From 83a7d703cbabd6e514a6d8a948b39325b59e9f58 Mon Sep 17 00:00:00 2001 From: Matěj Cepl Date: Fri, 28 Jan 2011 02:04:52 +0100 Subject: bzpage.js mostly done Also: * created libbugzilla.js for putting aside most RPCed functions * utils.js and color.js moved to data * tons and tons of restructing to make things work via RPC --- data/bzpage.js | 671 ++++++++++++++++++++++----------------------------------- 1 file changed, 259 insertions(+), 412 deletions(-) (limited to 'data/bzpage.js') diff --git a/data/bzpage.js b/data/bzpage.js index def12a7..086fe44 100644 --- a/data/bzpage.js +++ b/data/bzpage.js @@ -3,16 +3,23 @@ // http://www.opensource.org/licenses/mit-license.php "use strict"; var bugURL = "https://bugzilla.redhat.com/show_bug.cgi?id="; +var BTSPrefNS = "bugzilla-triage.setting."; // Shared contstants var NumberOfFrames = 7; exports.NumberOfFrames = NumberOfFrames; -var BTSPrefNS = "bugzilla-triage.setting."; -exports.BTSPrefNS = BTSPrefNS; -var BTSPassRealm = "BTSXMLRPCPass"; -// ============================================ +// constants +var SalmonPink = new Color(255, 224, 176); // RGB 255, 224, 176; HSL 36, 2, + // 85 +var ReporterColor = new Color(255, 255, 166); // RGB 255, 255, 166; HSL 60, 2, + // 83 +// global variables +var constantData = {}; // This should be probably eliminated ASAP or + // or done by other means. TODO +var submitHandlerInstalled = false; // for setUpLogging +// ============================================ /** * object to pack messaging. Use as in postMessage(new Message("GetPassword", { @@ -39,64 +46,51 @@ NotLoggedinException.prototype.toString = function () { }; exports.NotLoggedinException = NotLoggedinException; -// ==================================================================================== /** - * In case URL contains alias, not the real bug number, get the real bug no - * from the XML representation. Sets correct value to this.bugNo. - */ -nonTestedFunction getRealBugNo() { - console.log("We have to deal with bug aliased as " + this.bugNo); - var that = this; - // https://bugzilla.redhat.com/show_bug.cgi?ctype=xml&id=serialWacom - Request({ - url: this.win.location.href+"&ctype=xml", - onComplete: function(response) { - if (response.status === 200) { - var xmlRepr = response.xml; - var bugID = parseInt(xmlRepr.getElementsByTagName("bug_id")[0].textContent, 10); - if (isNaN(bugID)) { - throw new Error("Cannot get bug no. even from XML representation!"); - } - that.bugNo = bugID; - console.log("The real bug no. is " + bugID); +* central handler processing messages from the main script. +*/ +onMessage = function onMessage(msg) { + console.log("onMessage: msg = " + msg.toSource()); + switch (msg.cmd) { + case "ReloadThePage": + document.location.reload(true); + break; + case "RetClipboard": + if (msg.data.cmd == "queryLocal") { + queryInNewTab(msg.data.data, getComponent(), getProduct()); + } else if (msg.data.cmd == "queryUpstream") { + // } - } - }).get(); -} + break; + case "CreateButtons": + constantData = msg.data.constData; + generateButtons(msg.data.instPkgs); + break; + case "Error": + alert("Error " + msg.data); + break; + case "Unhandled": + break; + default: + console.error("Error: unknown RPC call " + msg.toSource()); + } +}; /** + * @param cmd Object with all commands to be executed * + * PROBLEM: according to https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference\ + * /Statements/for...in there is no guaranteed order of execution of + * commands (i.e., key, commentObj[key] pairs) in for..in cycle. + * According to https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference\ + * /Operators/Special_Operators/delete_Operator#Cross-browser_issues it seems that + * everywhere except of Internet Explorer this should work well, but waiting + * impatiently when this bite us. */ -nonTestedFunction getInstalledPackages(cfg) { - var installedPackages = {}; - var enabledPackages = []; - - // Collect enabled packages per hostname (plus default ones) - if (cfg.gJSONData && ("commentPackages" in cfg.gJSONData)) { - if ("enabledPackages" in cfg.gJSONData.configData) { - var epObject = cfg.gJSONData.configData.enabledPackages; - if (this.hostname in epObject) { - enabledPackages = enabledPackages.concat(epObject[this.hostname].split(/[,\s]+/)); - } - if ("any" in epObject) { - enabledPackages = enabledPackages.concat(epObject.any.split(/[,\s]+/)); - } - } - - if ((enabledPackages.length === 1) && (enabledPackages[0] === "all")) { - enabledPackages = []; - for (var key in cfg.gJSONData.commentPackages) { - enabledPackages.push(key); - } - } - - enabledPackages.forEach(function (pkg, idx, arr) { - if (pkg in cfg.gJSONData.commentPackages) { - installedPackages[pkg] = cfg.gJSONData.commentPackages[pkg]; - } - }); +function executeCommand(cmdObj) { + for (var key in cmdObj) { + centralCommandDispatch(key, cmdObj[key]); } - return installedPackages; } /** @@ -105,124 +99,97 @@ nonTestedFunction getInstalledPackages(cfg) { * @param cmdLabel String with the name of the command to be executed * @param cmdParams Object with the appropriate parameters for the command */ -nonTestedFunction centralCommandDispatch (cmdLabel, cmdParams) { +function centralCommandDispatch (cmdLabel, cmdParams) { switch (cmdLabel) { case "resolution": case "product": case "component": case "version": case "priority": - this.selectOption(cmdLabel, cmdParams); + selectOption(cmdLabel, cmdParams); break; case "status": - this.selectOption("bug_status", cmdParams); + selectOption("bug_status", cmdParams); break; case "platform": - this.selectOption("rep_platform", cmdParams); + selectOption("rep_platform", cmdParams); break; case "os": - this.selectOption("op_sys", cmdParams); + selectOption("op_sys", cmdParams); break; case "severity": - this.selectOption("bug_severity", cmdParams); + selectOption("bug_severity", cmdParams); break; case "target": - this.selectOption("target_milestone", cmdParams); + selectOption("target_milestone", cmdParams); break; case "addKeyword": - this.addStuffToTextBox("keywords",cmdParams); + addStuffToTextBox("keywords",cmdParams); break; case "removeKeyword": - this.removeStuffFromTextBox("keywords", cmdParams); + removeStuffFromTextBox("keywords", cmdParams); break; case "addWhiteboard": - this.addStuffToTextBox("status_whiteboard",cmdParams); + addStuffToTextBox("status_whiteboard",cmdParams); break; case "removeWhiteboard": - this.removeStuffFromTextBox("status_whiteboard",cmdParams); + removeStuffFromTextBox("status_whiteboard",cmdParams); break; case "assignee": - this.changeAssignee(cmdParams); + changeAssignee(cmdParams); break; case "qacontact": - this.clickMouse("bz_qa_contact_edit_action"); - this.doc.getElementById("qa_contact").value = cmdParams; + clickMouse("bz_qa_contact_edit_action"); + document.getElementById("qa_contact").value = cmdParams; break; case "url": - this.clickMouse("bz_url_edit_action"); - this.doc.getElementById("bug_file_loc").value = cmdParams; + clickMouse("bz_url_edit_action"); + document.getElementById("bug_file_loc").value = cmdParams; break; // TODO dependson/blocked doesn't work. Find out why. case "addDependsOn": - this.clickMouse("dependson_edit_action"); - this.addStuffToTextBox("dependson", cmdParams); + clickMouse("dependson_edit_action"); + addStuffToTextBox("dependson", cmdParams); break; case "removeDependsOn": - this.clickMouse("dependson_edit_action"); - this.removeStuffFromTextBox("dependson", cmdParams); + clickMouse("dependson_edit_action"); + removeStuffFromTextBox("dependson", cmdParams); break; case "addBlocks": - this.clickMouse("blocked_edit_action"); - this.addStuffToTextBox("blocked", cmdParams); + clickMouse("blocked_edit_action"); + addStuffToTextBox("blocked", cmdParams); break; case "removeBlocks": - this.clickMouse("blocked_edit_action"); - this.removeStuffFromTextBox("blocked", cmdParams); + clickMouse("blocked_edit_action"); + removeStuffFromTextBox("blocked", cmdParams); break; case "comment": - this.addStuffToTextBox("comment", cmdParams); + addStuffToTextBox("comment", cmdParams); break; case "commentIdx": - var commentText = this.commentStrings[cmdParams]; - this.addStuffToTextBox("comment", commentText); + throw "There should be no commentIdx here at all."; break; case "setNeedinfo": // cmdParams are actually ignored for now; we may in future // distinguish different actors to be target of needinfo - this.setNeedinfoReporter(); + setNeedinfoReporter(); break; case "addCC": - this.addToCCList(cmdParams); + addToCCList(cmdParams); break; case "queryStringOurBugzilla": - this.queryForSelection(); + queryForSelection(); break; // TODO flags, see also - case "commit": if (cmdParams) { - // Directly commit the form - this.doc.forms.namedItem("changeform").submit(); + // Directly commit the form + document.forms.namedItem("changeform").submit(); } break; } } -/** - * Take the ID of the package/id combination, and execute it - * - * @param String combined package + "//" + id combination - * Fetches the command object from this.installedPackages and then - * goes through all commands contained in it, and calls - * this.centralCommandDispatch to execute them. - * - * PROBLEM: according to https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference\ - * /Statements/for...in there is no guaranteed order of execution of - * commands (i.e., key, commentObj[key] pairs) in for..in cycle. - * According to https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference\ - * /Operators/Special_Operators/delete_Operator#Cross-browser_issues it seems that - * everywhere except of Internet Explorer this should work well, but waiting - * impatiently when this bite us. - */ -nonTestedFunction executeCommand (cmd) { - var cmdArr = cmd.split("//"); - var commentObj = this.packages[cmdArr[0]][cmdArr[1]]; - - for (var key in commentObj) { - this.centralCommandDispatch(key,commentObj[key]); - } -} - /** * Change assignee of the bug * @@ -231,21 +198,21 @@ nonTestedFunction executeCommand (cmd) { * Value null clears "Reset Assignee to default for component" checkbox * @return none */ -nonTestedFunction changeAssignee (newAssignee) { +function changeAssignee (newAssignee) { var defAssigneeButton = null; // Previous assignee should know what's going on in his bug - this.addToCCList(this.owner); + addToCCList(getOwner()); // Optional value null if (newAssignee === null) { - this.doc.getElementById("set_default_assignee").removeAttribute( + document.getElementById("set_default_assignee").removeAttribute( "checked"); return ; } - if (this.getDefaultAssignee) { + if (getDefaultAssignee) { if (newAssignee === "default") { - var defAss = this.getDefaultAssignee(); + var defAss = getDefaultAssignee(); if (defAss) { newAssignee = defAss; } else { @@ -255,10 +222,10 @@ nonTestedFunction changeAssignee (newAssignee) { } if (newAssignee) { - this.clickMouse("bz_assignee_edit_action"); - this.doc.getElementById("assigned_to").value = newAssignee; - this.doc.getElementById("set_default_assignee").checked = false; - defAssigneeButton = this.doc.getElementById("setDefaultAssignee_btn"); + clickMouse("bz_assignee_edit_action"); + document.getElementById("assigned_to").value = newAssignee; + document.getElementById("set_default_assignee").checked = false; + defAssigneeButton = document.getElementById("setDefaultAssignee_btn"); if (defAssigneeButton) { defAssigneeButton.style.display = "none"; } @@ -273,34 +240,26 @@ nonTestedFunction changeAssignee (newAssignee) { * If the 'comment_action' scroll down box doesn't exist, this * function will set up new one. */ -nonTestedFunction addToCommentsDropdown (pkg, cmd) { - var select = this.doc.getElementById("comment_action"); +function addToCommentsDropdown (cmdObj) { + var select = document.getElementById("comment_action"); if (!select) { - var that = this; - this.doc.getElementById("comments").innerHTML += + document.getElementById("comments").innerHTML += "
" + " " + "