/* 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 = '' + oData + ''; }, 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) }, }; })();