244 lines
9.5 KiB
JavaScript
244 lines
9.5 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*
|
|
* This Source Code Form is "Incompatible With Secondary Licenses", as
|
|
* defined by the Mozilla Public License, v. 2.0.
|
|
*/
|
|
|
|
/* This library assumes that the needed YUI libraries have been loaded
|
|
already. */
|
|
|
|
YAHOO.bugzilla.dupTable = {
|
|
counter: 0,
|
|
dataSource: null,
|
|
updateTable: function(dataTable, product_name, summary_field) {
|
|
if (summary_field.value.length < 4) return;
|
|
|
|
YAHOO.bugzilla.dupTable.counter = YAHOO.bugzilla.dupTable.counter + 1;
|
|
YAHOO.util.Connect.setDefaultPostHeader('application/json', true);
|
|
var json_object = {
|
|
version : "1.1",
|
|
method : "Bug.possible_duplicates",
|
|
id : YAHOO.bugzilla.dupTable.counter,
|
|
params : {
|
|
Bugzilla_api_token: BUGZILLA.api_token,
|
|
product : product_name,
|
|
summary : summary_field.value,
|
|
limit : 7,
|
|
include_fields : [ "id", "summary", "status", "resolution",
|
|
"update_token" ]
|
|
}
|
|
};
|
|
var post_data = YAHOO.lang.JSON.stringify(json_object);
|
|
|
|
var callback = {
|
|
success: dataTable.onDataReturnInitializeTable,
|
|
failure: dataTable.onDataReturnInitializeTable,
|
|
scope: dataTable,
|
|
argument: dataTable.getState()
|
|
};
|
|
dataTable.showTableMessage(dataTable.get("MSG_LOADING"),
|
|
YAHOO.widget.DataTable.CLASS_LOADING);
|
|
YAHOO.util.Dom.removeClass('possible_duplicates_container',
|
|
'bz_default_hidden');
|
|
dataTable.getDataSource().sendRequest(post_data, callback);
|
|
},
|
|
// This is the keyup event handler. It calls updateTable with a relatively
|
|
// long delay, to allow additional input. However, the delay is short
|
|
// enough that nobody could get from the summary field to the Submit
|
|
// Bug button before the table is shown (which is important, because
|
|
// the showing of the table causes the Submit Bug button to move, and
|
|
// if the table shows at the exact same time as the button is clicked,
|
|
// the click on the button won't register.)
|
|
doUpdateTable: function(e, args) {
|
|
var dt = args[0];
|
|
var product_name = args[1];
|
|
var summary = YAHOO.util.Event.getTarget(e);
|
|
clearTimeout(YAHOO.bugzilla.dupTable.lastTimeout);
|
|
YAHOO.bugzilla.dupTable.lastTimeout = setTimeout(function() {
|
|
YAHOO.bugzilla.dupTable.updateTable(dt, product_name, summary) },
|
|
600);
|
|
},
|
|
formatBugLink: function(el, oRecord, oColumn, oData) {
|
|
el.innerHTML = '<a href="show_bug.cgi?id=' + oData + '">'
|
|
+ oData + '</a>';
|
|
},
|
|
formatStatus: function(el, oRecord, oColumn, oData) {
|
|
var resolution = oRecord.getData('resolution');
|
|
var bug_status = display_value('bug_status', oData);
|
|
if (resolution) {
|
|
el.innerHTML = bug_status + ' '
|
|
+ display_value('resolution', resolution);
|
|
}
|
|
else {
|
|
el.innerHTML = bug_status;
|
|
}
|
|
},
|
|
formatCcButton: function(el, oRecord, oColumn, oData) {
|
|
var url = 'process_bug.cgi?id=' + oRecord.getData('id')
|
|
+ '&addselfcc=1&token=' + escape(oData);
|
|
var button = document.createElement('a');
|
|
button.setAttribute('href', url);
|
|
button.innerHTML = YAHOO.bugzilla.dupTable.addCcMessage;
|
|
el.appendChild(button);
|
|
new YAHOO.widget.Button(button);
|
|
},
|
|
init_ds: function() {
|
|
var new_ds = new YAHOO.util.XHRDataSource("jsonrpc.cgi");
|
|
new_ds.connTimeout = 30000;
|
|
new_ds.connMethodPost = true;
|
|
new_ds.connXhrMode = "cancelStaleRequests";
|
|
new_ds.maxCacheEntries = 3;
|
|
new_ds.responseSchema = {
|
|
resultsList : "result.bugs",
|
|
metaFields : { error: "error", jsonRpcId: "id" }
|
|
};
|
|
// DataSource can't understand a JSON-RPC error response, so
|
|
// we have to modify the result data if we get one.
|
|
new_ds.doBeforeParseData =
|
|
function(oRequest, oFullResponse, oCallback) {
|
|
if (oFullResponse.error) {
|
|
oFullResponse.result = {};
|
|
oFullResponse.result.bugs = [];
|
|
if (console) {
|
|
console.log("JSON-RPC error:", oFullResponse.error);
|
|
}
|
|
}
|
|
return oFullResponse;
|
|
}
|
|
|
|
this.dataSource = new_ds;
|
|
},
|
|
init: function(data) {
|
|
if (this.dataSource == null) this.init_ds();
|
|
data.options.initialLoad = false;
|
|
var dt = new YAHOO.widget.DataTable(data.container, data.columns,
|
|
this.dataSource, data.options);
|
|
YAHOO.util.Event.on(data.summary_field, 'keyup', this.doUpdateTable,
|
|
[dt, data.product_name]);
|
|
}
|
|
};
|
|
|
|
function set_assign_to(use_qa_contact) {
|
|
// Based on the selected component, fill the "Assign To:" field
|
|
// with the default component owner, and the "QA Contact:" field
|
|
// with the default QA Contact. It also selectively enables flags.
|
|
var form = document.Create;
|
|
var assigned_to = form.assigned_to.value;
|
|
|
|
if (use_qa_contact) {
|
|
var qa_contact = form.qa_contact.value;
|
|
}
|
|
|
|
var index = -1;
|
|
if (form.component.type == 'select-one') {
|
|
index = form.component.selectedIndex;
|
|
} else if (form.component.type == 'hidden') {
|
|
// Assume there is only one component in the list
|
|
index = 0;
|
|
}
|
|
if (index != -1) {
|
|
var owner = initialowners[index];
|
|
var component = components[index];
|
|
if (assigned_to == last_initialowner
|
|
|| assigned_to == owner
|
|
|| assigned_to == '') {
|
|
form.assigned_to.value = owner;
|
|
last_initialowner = owner;
|
|
}
|
|
|
|
document.getElementById('initial_cc').innerHTML = initialccs[index];
|
|
document.getElementById('comp_desc').innerHTML = comp_desc[index];
|
|
|
|
if (use_qa_contact) {
|
|
var contact = initialqacontacts[index];
|
|
if (qa_contact == last_initialqacontact
|
|
|| qa_contact == contact
|
|
|| qa_contact == '') {
|
|
form.qa_contact.value = contact;
|
|
last_initialqacontact = contact;
|
|
}
|
|
}
|
|
|
|
// We show or hide the available flags depending on the selected component.
|
|
var flag_rows = YAHOO.util.Dom.getElementsByClassName('bz_flag_type', 'tbody');
|
|
for (var i = 0; i < flag_rows.length; i++) {
|
|
// Each flag table row should have one flag form select element
|
|
// We get the flag type id from the id attribute of the select.
|
|
var flag_select = YAHOO.util.Dom.getElementsByClassName('flag_select',
|
|
'select',
|
|
flag_rows[i])[0];
|
|
var type_id = flag_select.id.split('-')[1];
|
|
var can_set = flag_select.options.length > 1 ? 1 : 0;
|
|
var show = 0;
|
|
// Loop through the allowed flag ids for the selected component
|
|
// and if we match, then show the row, otherwise hide the row.
|
|
for (var j = 0; j < flags[index].length; j++) {
|
|
if (flags[index][j] == type_id) {
|
|
show = 1;
|
|
break;
|
|
}
|
|
}
|
|
if (show && can_set) {
|
|
flag_select.disabled = false;
|
|
YAHOO.util.Dom.removeClass(flag_rows[i], 'bz_default_hidden');
|
|
} else {
|
|
flag_select.disabled = true;
|
|
YAHOO.util.Dom.addClass(flag_rows[i], 'bz_default_hidden');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
(function(){
|
|
'use strict';
|
|
var JSON = YAHOO.lang.JSON;
|
|
|
|
YAHOO.bugzilla.bugUserLastVisit = {
|
|
update: function(bug_id) {
|
|
var args = JSON.stringify({
|
|
version: "1.1",
|
|
method: 'BugUserLastVisit.update',
|
|
params: {
|
|
Bugzilla_api_token: BUGZILLA.api_token,
|
|
ids: bug_id
|
|
}
|
|
});
|
|
var callbacks = {
|
|
failure: function(res) {
|
|
if (console)
|
|
console.log("failed to update last visited: "
|
|
+ res.responseText);
|
|
}
|
|
};
|
|
|
|
YAHOO.util.Connect.setDefaultPostHeader('application/json', true);
|
|
YAHOO.util.Connect.asyncRequest('POST', 'jsonrpc.cgi', callbacks,
|
|
args)
|
|
},
|
|
|
|
get: function(done) {
|
|
var args = JSON.stringify({
|
|
version: "1.1",
|
|
method: 'BugUserLastVisit.get',
|
|
params: {
|
|
Bugzilla_api_token: BUGZILLA.api_token
|
|
}
|
|
});
|
|
var callbacks = {
|
|
success: function(res) { done(JSON.parse(res.responseText)) },
|
|
failure: function(res) {
|
|
if (console)
|
|
console.log("failed to get last visited: "
|
|
+ res.responseText);
|
|
}
|
|
};
|
|
|
|
YAHOO.util.Connect.setDefaultPostHeader('application/json', true);
|
|
YAHOO.util.Connect.asyncRequest('POST', 'jsonrpc.cgi', callbacks,
|
|
args)
|
|
}
|
|
};
|
|
})();
|