diff options
author | Matěj Cepl <mcepl@redhat.com> | 2011-03-23 20:18:23 +0100 |
---|---|---|
committer | Matěj Cepl <mcepl@redhat.com> | 2011-03-23 20:18:23 +0100 |
commit | 2e5993bc9bd0d468f4e9d12dd39e0548ba9adda1 (patch) | |
tree | f31a0d612efbfa5beb78e4718768c55c650f14d8 /data/lib/bzpage.js | |
parent | c662ccddab2cbcc6d13f49a21c04a6aea808f457 (diff) | |
download | bugzilla-triage-2e5993bc9bd0d468f4e9d12dd39e0548ba9adda1.tar.gz |
Fix indentation and else for Mozilla coding guidelines.
Diffstat (limited to 'data/lib/bzpage.js')
-rw-r--r-- | data/lib/bzpage.js | 1078 |
1 files changed, 544 insertions, 534 deletions
diff --git a/data/lib/bzpage.js b/data/lib/bzpage.js index 893a5ea..9afb112 100644 --- a/data/lib/bzpage.js +++ b/data/lib/bzpage.js @@ -9,43 +9,44 @@ var NumberOfFrames = 7; // constants var SalmonPink = new Color(255, 224, 176); // RGB 255, 224, 176; HSL 36, 2, - // 85 + // 85 var ReporterColor = new Color(255, 255, 166); // RGB 255, 255, 166; HSL 60, 2, - // 83 + // 83 // global variables var config = {}; var constantData = {}; // This should be probably eliminated ASAP or - // or done by other means. TODO + // or done by other means. TODO /** * central handler processing messages from the main script. */ onMessage = function onMessage(msg) { - console.log("onMessage - incoming : msg.cmd = " + msg.cmd); - switch (msg.cmd) { - case "ReloadThePage": - document.location.reload(true); - break; - case "queryLocal": - queryInNewTab(msg.data, getComponent(), getProduct()); - break; - case "CreateButtons": - constantData = msg.data.constData; - config = msg.data.config; - generateButtons(msg.data.instPkgs, msg.data.kNodes); - break; - case "Error": - alert("Error " + msg.data); - break; - case "Unhandled": - break; - default: - if (RHOnMessageHandler) { - RHOnMessageHandler(msg); - } else { - console.error("Error: unknown RPC call " + msg.toSource()); - } - } + console.log("onMessage - incoming : msg.cmd = " + msg.cmd); + switch (msg.cmd) { + case "ReloadThePage": + document.location.reload(true); + break; + case "queryLocal": + queryInNewTab(msg.data, getComponent(), getProduct()); + break; + case "CreateButtons": + constantData = msg.data.constData; + config = msg.data.config; + generateButtons(msg.data.instPkgs, msg.data.kNodes); + break; + case "Error": + alert("Error " + msg.data); + break; + case "Unhandled": + break; + default: + if (RHOnMessageHandler) { + RHOnMessageHandler(msg); + } + else { + console.error("Error: unknown RPC call " + msg.toSource()); + } + } }; /** @@ -60,9 +61,9 @@ onMessage = function onMessage(msg) { * impatiently when this bite us. */ function executeCommand(cmdObj) { - for (var key in cmdObj) { - centralCommandDispatch(key, cmdObj[key]); - } + for (var key in cmdObj) { + centralCommandDispatch(key, cmdObj[key]); + } } /** @@ -72,105 +73,106 @@ function executeCommand(cmdObj) { * @param cmdParams Object with the appropriate parameters for the command */ function centralCommandDispatch (cmdLabel, cmdParams) { - console.log("centralCommandDispatch : cmdLabel = " + cmdLabel); - switch (cmdLabel) { - case "name": - case "position": - break; - case "resolution": - case "product": - case "component": - case "version": - case "priority": - selectOption(cmdLabel, cmdParams); - break; - case "status": - selectOption("bug_status", cmdParams); - break; - case "platform": - selectOption("rep_platform", cmdParams); - break; - case "os": - selectOption("op_sys", cmdParams); - break; - case "severity": - selectOption("bug_severity", cmdParams); - break; - case "target": - selectOption("target_milestone", cmdParams); - break; - case "addKeyword": - addStuffToTextBox("keywords",cmdParams); - break; - case "removeKeyword": - removeStuffFromTextBox("keywords", cmdParams); - break; - case "addWhiteboard": - addStuffToTextBox("status_whiteboard",cmdParams); - break; - case "removeWhiteboard": - removeStuffFromTextBox("status_whiteboard",cmdParams); - break; - case "assignee": - changeAssignee(cmdParams); - break; - case "qacontact": - clickMouse("bz_qa_contact_edit_action"); - document.getElementById("qa_contact").value = cmdParams; - break; - case "url": - clickMouse("bz_url_edit_action"); - document.getElementById("bug_file_loc").value = cmdParams; - break; - // TODO dependson/blocked doesn't work. Find out why. - case "addDependsOn": - clickMouse("dependson_edit_action"); - addStuffToTextBox("dependson", cmdParams); - break; - case "removeDependsOn": - clickMouse("dependson_edit_action"); - removeStuffFromTextBox("dependson", cmdParams); - break; - case "addBlocks": - clickMouse("blocked_edit_action"); - addStuffToTextBox("blocked", cmdParams); - break; - case "removeBlocks": - clickMouse("blocked_edit_action"); - removeStuffFromTextBox("blocked", cmdParams); - break; - case "comment": - addStuffToTextBox("comment", cmdParams); - break; - case "commentIdx": - 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 - setNeedinfoReporter(); - break; - case "addCC": - addToCCList(cmdParams); - break; - case "queryStringOurBugzilla": - queryForSelection(); - break; - // TODO flags, see also - case "commit": - if (cmdParams) { - // Directly commit the form - document.forms.namedItem("changeform").submit(); - } - break; - default: - if (RHcentralCommandDispatch) { - RHcentralCommandDispatch(cmdLabel, cmdParams); - } else { - console.error("Unknown command:\n" + cmdLabel + "\nparameters:\n" + cmdParams); - } - break; - } + console.log("centralCommandDispatch : cmdLabel = " + cmdLabel); + switch (cmdLabel) { + case "name": + case "position": + break; + case "resolution": + case "product": + case "component": + case "version": + case "priority": + selectOption(cmdLabel, cmdParams); + break; + case "status": + selectOption("bug_status", cmdParams); + break; + case "platform": + selectOption("rep_platform", cmdParams); + break; + case "os": + selectOption("op_sys", cmdParams); + break; + case "severity": + selectOption("bug_severity", cmdParams); + break; + case "target": + selectOption("target_milestone", cmdParams); + break; + case "addKeyword": + addStuffToTextBox("keywords",cmdParams); + break; + case "removeKeyword": + removeStuffFromTextBox("keywords", cmdParams); + break; + case "addWhiteboard": + addStuffToTextBox("status_whiteboard",cmdParams); + break; + case "removeWhiteboard": + removeStuffFromTextBox("status_whiteboard",cmdParams); + break; + case "assignee": + changeAssignee(cmdParams); + break; + case "qacontact": + clickMouse("bz_qa_contact_edit_action"); + document.getElementById("qa_contact").value = cmdParams; + break; + case "url": + clickMouse("bz_url_edit_action"); + document.getElementById("bug_file_loc").value = cmdParams; + break; + // TODO dependson/blocked doesn't work. Find out why. + case "addDependsOn": + clickMouse("dependson_edit_action"); + addStuffToTextBox("dependson", cmdParams); + break; + case "removeDependsOn": + clickMouse("dependson_edit_action"); + removeStuffFromTextBox("dependson", cmdParams); + break; + case "addBlocks": + clickMouse("blocked_edit_action"); + addStuffToTextBox("blocked", cmdParams); + break; + case "removeBlocks": + clickMouse("blocked_edit_action"); + removeStuffFromTextBox("blocked", cmdParams); + break; + case "comment": + addStuffToTextBox("comment", cmdParams); + break; + case "commentIdx": + 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 + setNeedinfoReporter(); + break; + case "addCC": + addToCCList(cmdParams); + break; + case "queryStringOurBugzilla": + queryForSelection(); + break; + // TODO flags, see also + case "commit": + if (cmdParams) { + // Directly commit the form + document.forms.namedItem("changeform").submit(); + } + break; + default: + if (RHcentralCommandDispatch) { + RHcentralCommandDispatch(cmdLabel, cmdParams); + } + else { + console.error("Unknown command:\n" + cmdLabel + "\nparameters:\n" + cmdParams); + } + break; + } } /** @@ -185,57 +187,59 @@ function centralCommandDispatch (cmdLabel, cmdParams) { * do actual activity. */ function killNodes(doc, target, remove) { - var targetArr = target instanceof Array ? target : target.trim().split(/[,\s]+/); - targetArr.forEach(function(x) { - if (remove) { - var targetNode = doc.getElementById(x); - targetNode.parentNode.removeChild(targetNode); - } else { - x.style.display = "none"; - } - }); + var targetArr = target instanceof Array ? target : target.trim().split(/[,\s]+/); + targetArr.forEach(function(x) { + if (remove) { + var targetNode = doc.getElementById(x); + targetNode.parentNode.removeChild(targetNode); + } + else { + x.style.display = "none"; + } + }); } /** * Change assignee of the bug * * @param newAssignee String with the email address of new assigneeAElement - * or 'default' if the component's default assignee should be used. - * Value null clears "Reset Assignee to default for component" checkbox + * or 'default' if the component's default assignee should be used. + * Value null clears "Reset Assignee to default for component" checkbox * @return none */ function changeAssignee (newAssignee) { - var defAssigneeButton = null; - // Previous assignee should know what's going on in his bug - addToCCList(getOwner()); - - // Optional value null - if (newAssignee === null) { - document.getElementById("set_default_assignee").removeAttribute( - "checked"); + var defAssigneeButton = null; + // Previous assignee should know what's going on in his bug + addToCCList(getOwner()); + + // Optional value null + if (newAssignee === null) { + document.getElementById("set_default_assignee").removeAttribute( + "checked"); + return ; + } + + if (getDefaultAssignee) { + if (newAssignee === "default") { + var defAss = getDefaultAssignee(); + if (defAss) { + newAssignee = defAss; + } + else { return ; + } } + } - if (getDefaultAssignee) { - if (newAssignee === "default") { - var defAss = getDefaultAssignee(); - if (defAss) { - newAssignee = defAss; - } else { - return ; - } - } - } - - if (newAssignee) { - clickMouse("bz_assignee_edit_action"); - document.getElementById("assigned_to").value = newAssignee; - document.getElementById("set_default_assignee").checked = false; - defAssigneeButton = document.getElementById("defassignee_btn"); - if (defAssigneeButton) { - defAssigneeButton.style.display = "none"; - } + if (newAssignee) { + clickMouse("bz_assignee_edit_action"); + document.getElementById("assigned_to").value = newAssignee; + document.getElementById("set_default_assignee").checked = false; + defAssigneeButton = document.getElementById("defassignee_btn"); + if (defAssigneeButton) { + defAssigneeButton.style.display = "none"; } + } } /** @@ -247,29 +251,29 @@ function changeAssignee (newAssignee) { * function will set up new one. */ function addToCommentsDropdown (cmdObj) { - var select = document.getElementById("comment_action"); - if (!select) { - config.commandsList = []; - document.getElementById("comments").innerHTML += - "<div id='make_bugzilla_comment_action'>" + - " <label for='comment_action'>Add Comment: </label>" + - " <select id='comment_action'>" + - " <option value=''>-- Select Comment from List --</option>" + - " </select>" + - "</div>"; - select = document.getElementById("comment_action"); - select.addEventListener("change", function (evt) { - var value = select.options[select.selectedIndex].value; - executeCommand(config.commandsList[value]); - }, false); - } + var select = document.getElementById("comment_action"); + if (!select) { + config.commandsList = []; + document.getElementById("comments").innerHTML += + "<div id='make_bugzilla_comment_action'>" + + " <label for='comment_action'>Add Comment: </label>" + + " <select id='comment_action'>" + + " <option value=''>-- Select Comment from List --</option>" + + " </select>" + + "</div>"; + select = document.getElementById("comment_action"); + select.addEventListener("change", function (evt) { + var value = select.options[select.selectedIndex].value; + executeCommand(config.commandsList[value]); + }, false); + } - var opt = document.createElement("option"); - var objIdx = config.commandsList.length + 1; - opt.value = objIdx; - config.commandsList[objIdx] = cmdObj; - opt.textContent = cmdObj.name; - select.appendChild(opt); + var opt = document.createElement("option"); + var objIdx = config.commandsList.length + 1; + opt.value = objIdx; + config.commandsList[objIdx] = cmdObj; + opt.textContent = cmdObj.name; + select.appendChild(opt); } /** @@ -283,116 +287,119 @@ function addToCommentsDropdown (cmdObj) { * @return none */ function createNewButton (location, after, cmdObj) { - try { - var newId = cmdObj.name.toLowerCase().replace(/[^a-z0-9]+/,"","g") + "_btn"; - } catch (e) { - console.error("createNewButton : e = " + e + - "\ncreateNewButton : cmdObj.toSource() = " + - cmdObj.toSource()); - } - - // protection against double-firings - if (document.getElementById(newId)) { - console.log("Element with id " + newId + " already exists!"); - return ; - } - - var newButton = document.createElement("input"); - newButton.setAttribute("id", newId); - newButton.setAttribute("type", "button"); - newButton.value = cmdObj.name; - newButton.addEventListener("click", function(evt) { - executeCommand(cmdObj); - }, false); - - var originalLocation = document.getElementById(location); - - try { - if (after) { - originalLocation.parentNode.insertBefore(newButton, - originalLocation.nextSibling); - originalLocation.parentNode.insertBefore(document - .createTextNode("\u00A0"), newButton); - } else { - originalLocation.parentNode.insertBefore(newButton, originalLocation); - originalLocation.parentNode.insertBefore(document - .createTextNode("\u00A0"), originalLocation); - } - } catch (e) { - if (e instanceof TypeError) { - console.error("cannot find originalLocation element with id " + location); - } else { - throw e; - } - } + try { + var newId = cmdObj.name.toLowerCase().replace(/[^a-z0-9]+/,"","g") + "_btn"; + } catch (e) { + console.error("createNewButton : e = " + e + + "\ncreateNewButton : cmdObj.toSource() = " + + cmdObj.toSource()); + } + + // protection against double-firings + if (document.getElementById(newId)) { + console.log("Element with id " + newId + " already exists!"); + return ; + } + + var newButton = document.createElement("input"); + newButton.setAttribute("id", newId); + newButton.setAttribute("type", "button"); + newButton.value = cmdObj.name; + newButton.addEventListener("click", function(evt) { + executeCommand(cmdObj); + }, false); + + var originalLocation = document.getElementById(location); + + try { + if (after) { + originalLocation.parentNode.insertBefore(newButton, + originalLocation.nextSibling); + originalLocation.parentNode.insertBefore(document + .createTextNode("\u00A0"), newButton); + } + else { + originalLocation.parentNode.insertBefore(newButton, originalLocation); + originalLocation.parentNode.insertBefore(document + .createTextNode("\u00A0"), originalLocation); + } + } catch (e) { + if (e instanceof TypeError) { + console.error("cannot find originalLocation element with id " + location); + } + else { + throw e; + } + } } /** * Generate button based on */ function generateButtons (pkgs, kNodes) { - var topRowPosition = "topRowPositionID"; - var bottomRowPosition = "commit"; - - // ========================================================= - if (kNodes && window.location.hostname in kNodes) { - var killConf = kNodes[window.location.hostname]; - killNodes(document, killConf[0], killConf[1]); - } - - // create anchor for the top toolbar - var commentBox = document.getElementById("comment"); - var brElement = document.createElement("br"); - brElement.setAttribute("id",topRowPosition); - commentBox.parentNode.normalize(); - commentBox.parentNode.insertBefore(brElement, commentBox); - - for (var pkg in pkgs) { - for (var cmdIdx in pkgs[pkg]) { - var cmdObj = pkgs[pkg][cmdIdx]; - if (cmdObj.position !== undefined) { - switch (cmdObj.position) { - case "topRow": - createNewButton(topRowPosition, false, cmdObj); - break; - case "bottomRow": - createNewButton(bottomRowPosition, false, cmdObj); - break; - case "dropDown": - addToCommentsDropdown(cmdObj); - break; - default: // [+-]ID - var firstChr = cmdObj.position.charAt(0); - var newId = cmdObj.position.substr(1); - createNewButton(newId, firstChr === "+", cmdObj); - break; - } - } else { - console.error("generateButtons : rejected cmdObj = " + - cmdObj.toSource()); - } + var topRowPosition = "topRowPositionID"; + var bottomRowPosition = "commit"; + + // ========================================================= + if (kNodes && window.location.hostname in kNodes) { + var killConf = kNodes[window.location.hostname]; + killNodes(document, killConf[0], killConf[1]); + } + + // create anchor for the top toolbar + var commentBox = document.getElementById("comment"); + var brElement = document.createElement("br"); + brElement.setAttribute("id",topRowPosition); + commentBox.parentNode.normalize(); + commentBox.parentNode.insertBefore(brElement, commentBox); + + for (var pkg in pkgs) { + for (var cmdIdx in pkgs[pkg]) { + var cmdObj = pkgs[pkg][cmdIdx]; + if (cmdObj.position !== undefined) { + switch (cmdObj.position) { + case "topRow": + createNewButton(topRowPosition, false, cmdObj); + break; + case "bottomRow": + createNewButton(bottomRowPosition, false, cmdObj); + break; + case "dropDown": + addToCommentsDropdown(cmdObj); + break; + default: // [+-]ID + var firstChr = cmdObj.position.charAt(0); + var newId = cmdObj.position.substr(1); + createNewButton(newId, firstChr === "+", cmdObj); + break; } + } + else { + console.error("generateButtons : rejected cmdObj = " + + cmdObj.toSource()); + } } - // TODO This is weird in this place, but that's the place where all constantData etc. - // are finally defined and available. - if (RHBZinit) { - RHBZinit(); - } + } + // TODO This is weird in this place, but that's the place where all constantData etc. + // are finally defined and available. + if (RHBZinit) { + RHBZinit(); + } } function setConfigurationButton () { - var additionalButtons = document.querySelector("#bugzilla-body *.related_actions"); - var configurationButtonUI = document.createElement("li"); - configurationButtonUI.innerHTML = "\u00A0-\u00A0<a href='' id='configurationButton'>" - + "Triage configuration</a>"; - additionalButtons.appendChild(configurationButtonUI); - document.getElementById("configurationButton").addEventListener( - "click", - function(evt) { - postMessage(new Message("ChangeJSONURL", null)); - evt.stopPropagation(); - evt.preventDefault(); - }, false); + var additionalButtons = document.querySelector("#bugzilla-body *.related_actions"); + var configurationButtonUI = document.createElement("li"); + configurationButtonUI.innerHTML = "\u00A0-\u00A0<a href='' id='configurationButton'>" + + "Triage configuration</a>"; + additionalButtons.appendChild(configurationButtonUI); + document.getElementById("configurationButton").addEventListener( + "click", + function(evt) { + postMessage(new Message("ChangeJSONURL", null)); + evt.stopPropagation(); + evt.preventDefault(); + }, false); } /** @@ -401,7 +408,7 @@ function setConfigurationButton () { * @return string */ function getSummary() { - return document.getElementById("short_desc_nonedit_display").textContent; + return document.getElementById("short_desc_nonedit_display").textContent; } /** @@ -410,37 +417,37 @@ function getSummary() { * @return string */ function getReporter () { - var reporterElement = getOptionTableCell("bz_show_bug_column_2", "Reported"); - // RH Bugzilla after upgrade to 3.6.2 moved the information to other column - if (!reporterElement) { - reporterElement = getOptionTableCell("bz_show_bug_column_1", "Reported", true); - } - // Maemo calls the label "Reporter" and it doesn't have ids on table columns ... TODO(maemo) - return parseMailto(reporterElement); + var reporterElement = getOptionTableCell("bz_show_bug_column_2", "Reported"); + // RH Bugzilla after upgrade to 3.6.2 moved the information to other column + if (!reporterElement) { + reporterElement = getOptionTableCell("bz_show_bug_column_1", "Reported", true); + } + // Maemo calls the label "Reporter" and it doesn't have ids on table columns ... TODO(maemo) + return parseMailto(reporterElement); } function getComponent() { - var elem = document.getElementById("component"); - if (elem) { - return elem.value; - } - return null; + var elem = document.getElementById("component"); + if (elem) { + return elem.value; + } + return null; } function getProduct() { - var elem = document.getElementById("product"); - if (elem) { - return elem.value; - } - return null; + var elem = document.getElementById("product"); + if (elem) { + return elem.value; + } + return null; } function commentsWalker (fce) { - var comments = document.getElementById("comments"). - getElementsByClassName("bz_comment"); - Array.forEach(comments, function(item) { - fce(item); - }); + var comments = document.getElementById("comments"). + getElementsByClassName("bz_comment"); + Array.forEach(comments, function(item) { + fce(item); + }); } /** @@ -448,22 +455,22 @@ function commentsWalker (fce) { * */ function checkComments () { - var reporter = getReporter(); - commentsWalker(function(x) { - var email = parseMailto(x.getElementsByClassName("vcard")[0] - .getElementsByTagName("a")[0]); - if (email.indexOf(reporter) != -1) { - x.style.backgroundColor = ReporterColor.toString(); - } - }); + var reporter = getReporter(); + commentsWalker(function(x) { + var email = parseMailto(x.getElementsByClassName("vcard")[0] + .getElementsByTagName("a")[0]); + if (email.indexOf(reporter) != -1) { + x.style.backgroundColor = ReporterColor.toString(); + } + }); } function collectComments () { - var outStr = ""; - commentsWalker(function(x) { - outStr += x.getElementsByTagName("pre")[0].textContent + "\n"; - }); - return outStr.trim(); + var outStr = ""; + commentsWalker(function(x) { + outStr += x.getElementsByTagName("pre")[0].textContent + "\n"; + }); + return outStr.trim(); } @@ -478,37 +485,37 @@ function collectComments () { * */ function selectOption (id, label, fireEvent) { - if (!fireEvent) { - fireEvent = true; - } - var sel = document.getElementById(id); - sel.value = label; - if (fireEvent) { - var intEvent = document.createEvent("HTMLEvents"); - intEvent.initEvent("change", true, true); - sel.dispatchEvent(intEvent); - } + if (!fireEvent) { + fireEvent = true; + } + var sel = document.getElementById(id); + sel.value = label; + if (fireEvent) { + var intEvent = document.createEvent("HTMLEvents"); + intEvent.initEvent("change", true, true); + sel.dispatchEvent(intEvent); + } } function selectOptionByLabel(id, label, fireEvent) { - if (!fireEvent) { - fireEvent = true; - } - var sel = document.getElementById(id); - var labelRE = new RegExp(label.trim()); - var ourOption = Array.filter(sel.options, function (op) { - return op.textContent.trim() === label; - }); - - if (ourOption[0]) { - sel.value = ourOption[0].value; - } - - if (fireEvent) { - var intEvent = document.createEvent("HTMLEvents"); - intEvent.initEvent("change", true, true); - sel.dispatchEvent(intEvent); - } + if (!fireEvent) { + fireEvent = true; + } + var sel = document.getElementById(id); + var labelRE = new RegExp(label.trim()); + var ourOption = Array.filter(sel.options, function (op) { + return op.textContent.trim() === label; + }); + + if (ourOption[0]) { + sel.value = ourOption[0].value; + } + + if (fireEvent) { + var intEvent = document.createEvent("HTMLEvents"); + intEvent.initEvent("change", true, true); + sel.dispatchEvent(intEvent); + } } /** @@ -518,10 +525,10 @@ function selectOptionByLabel(id, label, fireEvent) { * @return None */ function clickMouse (targetID) { - var localEvent = document.createEvent("MouseEvents"); - localEvent.initMouseEvent("click", true, true, document.defaultView, 0, 0, - 0, 0, 0, false, false, false, false, 0, null); - document.getElementById(targetID).dispatchEvent(localEvent); + var localEvent = document.createEvent("MouseEvents"); + localEvent.initMouseEvent("click", true, true, document.defaultView, 0, 0, + 0, 0, 0, false, false, false, false, 0, null); + document.getElementById(targetID).dispatchEvent(localEvent); } /** @@ -533,13 +540,14 @@ function clickMouse (targetID) { * @return none */ function addStuffToTextBox (id, stuff) { - var textBox = document.getElementById(id); - if (textBox.tagName.toLowerCase() === "textarea") { - stuff = textBox.value ? "\n\n" + stuff : stuff; - textBox.value += stuff; - } else { - textBox.value = addCSVValue(textBox.value,stuff); - } + var textBox = document.getElementById(id); + if (textBox.tagName.toLowerCase() === "textarea") { + stuff = textBox.value ? "\n\n" + stuff : stuff; + textBox.value += stuff; + } + else { + textBox.value = addCSVValue(textBox.value,stuff); + } } /** @@ -549,8 +557,8 @@ function addStuffToTextBox (id, stuff) { * @param stuff String/Array with keyword(s) to be removed */ function removeStuffFromTextBox (id, stuff) { - var changedElement = document.getElementById(id); - changedElement.value = removeCSVValue(changedElement.value,stuff); + var changedElement = document.getElementById(id); + changedElement.value = removeCSVValue(changedElement.value,stuff); } /** @@ -561,14 +569,14 @@ function removeStuffFromTextBox (id, stuff) { * @return Boolean found? */ function idContainsWord (id, str) { - var kwd = ""; - try { - kwd = document.getElementById(id).value; - } catch (e) { - // For those who don't have particular element at all or if it is empty - return false; - } - return (isInList(str, kwd.trim().split(/[,\s]+/))); + var kwd = ""; + try { + kwd = document.getElementById(id).value; + } catch (e) { + // For those who don't have particular element at all or if it is empty + return false; + } + return (isInList(str, kwd.trim().split(/[,\s]+/))); } /** @@ -578,7 +586,7 @@ function idContainsWord (id, str) { * @return Boolean */ function hasKeyword (str) { - return (idContainsWord('keywords', str)); + return (idContainsWord('keywords', str)); } /** @@ -587,21 +595,21 @@ function hasKeyword (str) { * @return Element with the href attribute containng the information */ function getOptionTableCell(tableId, label) { - var cleanLabelRE = new RegExp("^\\s*([^.:]*):?\\s*$"); - label = label.trim().replace(cleanLabelRE,"$1").toLowerCase(); - - var rows = document.getElementById(tableId).getElementsByTagName("tr"); - var ourLine = Array.filter(rows, function(row) { - var curLabel = row.getElementsByTagName("td")[0].textContent.toLowerCase(); - curLabel = curLabel.replace(cleanLabelRE,"$1"); - return (curLabel === label); // maybe this could be a RE match instead - }); + var cleanLabelRE = new RegExp("^\\s*([^.:]*):?\\s*$"); + label = label.trim().replace(cleanLabelRE,"$1").toLowerCase(); - if (ourLine.length > 0) { - return ourLine[0].getElementsByTagName("td")[1]. - getElementsByTagName("a")[0]; - } - return null; + var rows = document.getElementById(tableId).getElementsByTagName("tr"); + var ourLine = Array.filter(rows, function(row) { + var curLabel = row.getElementsByTagName("td")[0].textContent.toLowerCase(); + curLabel = curLabel.replace(cleanLabelRE,"$1"); + return (curLabel === label); // maybe this could be a RE match instead + }); + + if (ourLine.length > 0) { + return ourLine[0].getElementsByTagName("td")[1]. + getElementsByTagName("a")[0]; + } + return null; } /** @@ -613,17 +621,17 @@ function getOptionTableCell(tableId, label) { * with parameter [reporter|assignee|general-email-address] */ function setNeedinfoReporter () { - clickMouse("needinfo"); - selectOption("needinfo_role", "reporter"); + clickMouse("needinfo"); + selectOption("needinfo_role", "reporter"); } /** * */ function getOwner () { - // TODO(maemo) doesn't work on maemo - var assigneeAElement = getOptionTableCell("bz_show_bug_column_1","Assigned To"); - return parseMailto(assigneeAElement); + // TODO(maemo) doesn't work on maemo + var assigneeAElement = getOptionTableCell("bz_show_bug_column_1","Assigned To"); + return parseMailto(assigneeAElement); } /** @@ -633,8 +641,8 @@ function getOwner () { * @return String with the maintainer's email address */ function getDefaultBugzillaMaintainer (component) { - var address = filterByRegexp(constantData.defBugzillaMaintainerArr, component); - return address; + var address = filterByRegexp(constantData.defBugzillaMaintainerArr, component); + return address; } /** @@ -642,37 +650,37 @@ function getDefaultBugzillaMaintainer (component) { * * @param DOM element to be parsed * @return array with string name of the attachment, integer its id number, - * string of MIME type, integer of size in kilobytes, and the whole - * element itself + * string of MIME type, integer of size in kilobytes, and the whole + * element itself * * TODO error handling is missing ... it's bleee */ function parseAttachmentLine(inElem) { - var MIMEtype = ""; - var size = 0; + var MIMEtype = ""; + var size = 0; - // Skip over obsolete attachments - if (inElem.getElementsByClassName("bz_obsolete").length > 0) { - return ([]); - } + // Skip over obsolete attachments + if (inElem.getElementsByClassName("bz_obsolete").length > 0) { + return ([]); + } - // getting name of the attachment - var attName = inElem.getElementsByTagName("b")[0].textContent.trim(); + // getting name of the attachment + var attName = inElem.getElementsByTagName("b")[0].textContent.trim(); - // TODO probably could use url.URL object - var aHrefsArr = inElem.getElementsByTagName("a"); - var aHref = Array.filter(aHrefsArr, function(x) { - return x.textContent.trim() === "Details"; - })[0]; - var id = parseURL(aHref.getAttribute("href")).params.id; + // TODO probably could use url.URL object + var aHrefsArr = inElem.getElementsByTagName("a"); + var aHref = Array.filter(aHrefsArr, function(x) { + return x.textContent.trim() === "Details"; + })[0]; + var id = parseURL(aHref.getAttribute("href")).params.id; - // getting MIME type and size - var stringArray = inElem.getElementsByClassName("bz_attach_extra_info")[0].textContent. - replace(/[\n ()]+/g, " ").trim().split(", "); - size = parseInt(stringArray[0], 10); - MIMEtype = stringArray[1].split(" ")[0]; + // getting MIME type and size + var stringArray = inElem.getElementsByClassName("bz_attach_extra_info")[0].textContent. + replace(/[\n ()]+/g, " ").trim().split(", "); + size = parseInt(stringArray[0], 10); + MIMEtype = stringArray[1].split(" ")[0]; - return [ attName, id, MIMEtype, size, inElem ]; + return [ attName, id, MIMEtype, size, inElem ]; } /** @@ -680,17 +688,17 @@ function parseAttachmentLine(inElem) { * * @return Array of arrays, one for each attachments; * each record has string name of the attachment, integer its id number, - * string of MIME type, integer of size in kilobytes, and the whole - * element itself + * string of MIME type, integer of size in kilobytes, and the whole + * element itself */ function getAttachments () { - var outAtts = []; - var atts = document.getElementById("attachment_table"). - getElementsByTagName("tr"); - for ( var i = 1, ii = atts.length - 1; i < ii; i++) { - outAtts.push(parseAttachmentLine(atts[i])); - } - return outAtts; + var outAtts = []; + var atts = document.getElementById("attachment_table"). + getElementsByTagName("tr"); + for ( var i = 1, ii = atts.length - 1; i < ii; i++) { + outAtts.push(parseAttachmentLine(atts[i])); + } + return outAtts; } /** @@ -699,19 +707,19 @@ function getAttachments () { * @return String with the login name of the currently logged-in user */ function getLogin () { - var lastLIElement = document.querySelector("#header ul.links li:last-of-type"); - var loginArr = lastLIElement.textContent.split("\n"); - var loginStr = loginArr[loginArr.length - 1].trim(); - return loginStr; + var lastLIElement = document.querySelector("#header ul.links li:last-of-type"); + var loginArr = lastLIElement.textContent.split("\n"); + var loginStr = loginArr[loginArr.length - 1].trim(); + return loginStr; } function getSelection () { - var text = ""; - var selectionObject = window.getSelection(); - if (selectionObject.rangeCount > 0) { - text = selectionObject.getRangeAt(0).toString().trim(); - } - return text; + var text = ""; + var selectionObject = window.getSelection(); + if (selectionObject.rangeCount > 0) { + text = selectionObject.getRangeAt(0).toString().trim(); + } + return text; } /** @@ -720,42 +728,42 @@ function getSelection () { * @param text to be searched for * @param component String with the component name (maybe latter regexp?) * @param product (optional) string with the product name, if undefined, - * search in all products + * search in all products * @return None * */ function queryInNewTab(text, component, product) { - var urlStr = "https://" + window.location.hostname + "/buglist.cgi?query_format=advanced"; - if (product) { - urlStr += "&product=" + product.trim(); - } - if (component) { - if ("equivalentComponents" in constantData) { - var equivCompsArr = constantData.equivalentComponents. - filter(function (REstr) { - return new RegExp(REstr).test(getComponent()); - }, this); - if (equivCompsArr.length > 0) { - component = equivCompsArr[0]; - } - } - urlStr += "&component=" + component.trim(); - } - - // using more complicated query tables here, because they can be more easily - // edited - // for further investigative searches - if (text) { - text = encodeURIComponent(text.trim()); - var searchText = "&field0-0-0=longdesc&type0-0-0=substring&value0-0-0=" - + text - + "&field0-0-1=attach_data.thedata&type0-0-1=substring&value0-0-1=" - + text - + "&field0-0-2=status_whiteboard&type0-0-2=substring&value0-0-2=" - + text; - urlStr += searchText; - postMessage(new Message("OpenURLinTab", urlStr)); - } + var urlStr = "https://" + window.location.hostname + "/buglist.cgi?query_format=advanced"; + if (product) { + urlStr += "&product=" + product.trim(); + } + if (component) { + if ("equivalentComponents" in constantData) { + var equivCompsArr = constantData.equivalentComponents. + filter(function (REstr) { + return new RegExp(REstr).test(getComponent()); + }, this); + if (equivCompsArr.length > 0) { + component = equivCompsArr[0]; + } + } + urlStr += "&component=" + component.trim(); + } + + // using more complicated query tables here, because they can be more easily + // edited + // for further investigative searches + if (text) { + text = encodeURIComponent(text.trim()); + var searchText = "&field0-0-0=longdesc&type0-0-0=substring&value0-0-0=" + + text + + "&field0-0-1=attach_data.thedata&type0-0-1=substring&value0-0-1=" + + text + + "&field0-0-2=status_whiteboard&type0-0-2=substring&value0-0-2=" + + text; + urlStr += searchText; + postMessage(new Message("OpenURLinTab", urlStr)); + } } /** @@ -763,12 +771,13 @@ function queryInNewTab(text, component, product) { * function this.queryInNewTab, and run it. */ function queryForSelection() { - var text = getSelection(); - if (!text) { - postMessage(new Message("GetClipboard", "queryLocal")); - } else { - queryInNewTab(text, getComponent(), getProduct()); - } + var text = getSelection(); + if (!text) { + postMessage(new Message("GetClipboard", "queryLocal")); + } + else { + queryInNewTab(text, getComponent(), getProduct()); + } } /** @@ -778,17 +787,18 @@ function queryForSelection() { * of the bugzilla should be added */ function addToCCList (who) { - if (!who) { - return ; - } - if (who === "self") { - document.getElementById("addselfcc").checked = true; - } else { - clickMouse("cc_edit_area_showhide"); - if (!isInList(who, getCCList())) { - addStuffToTextBox("newcc",who); - } + if (!who) { + return ; + } + if (who === "self") { + document.getElementById("addselfcc").checked = true; + } + else { + clickMouse("cc_edit_area_showhide"); + if (!isInList(who, getCCList())) { + addStuffToTextBox("newcc",who); } + } } /** @@ -797,58 +807,58 @@ function addToCCList (who) { * @return Array with email addresses as Strings. */ function getCCList () { - var CCListSelect = document.getElementById("cc"); - var outCCList = []; - if (CCListSelect) { - outCCList = Array.map(CCListSelect.options, function(item) { - return item.value; - }); - } - return outCCList; + var CCListSelect = document.getElementById("cc"); + var outCCList = []; + if (CCListSelect) { + outCCList = Array.map(CCListSelect.options, function(item) { + return item.value; + }); + } + return outCCList; } function startup() { - // First, preflight check ... if we are not logged in, there - // is nothing we can do. - var logoutLink = Array.some(document.links, function (x) { - return x.search === "?logout=1" ; - }); - if (!logoutLink) { - return null; // This should just finish whole content script without - // doing any harm to anybody. - } - - // Prepare for query buttons - // element ID brElementPlace_location is later used in JSON files - // Stay with this add_comment element even if RH BZ upgrades, this seems - // to be generally much more stable (even with other bugzillas, e.g. b.gnome.org) - // then some getElementById. - var commentArea = document.getElementsByName("add_comment")[0].parentNode; - if (commentArea) { - var brElementPlacer = commentArea.getElementsByTagName("br"); - brElementPlacer = brElementPlacer[0]; - if (brElementPlacer) { - brElementPlacer.setAttribute("id","brElementPlacer_location"); - brElementPlacer.parentNode.insertBefore(document.createElement("br"), - brElementPlacer); - } - } - - // TODO Probably could be ignored ... used only once on line 973 of rhbzpage.js - // if (parseAbrtBacktraces && this.RE.Abrt.test(getSummary())) { - // title = document.getElementById("short_desc_nonedit_display").textContent; - - // So, now we know we are logged in, so we can get to - // the real work. - setConfigurationButton(); - submitHandlerInstalled = false; - - checkComments(); - - postMessage(new Message("GetInstalledPackages", { - location: window.location.href, - login: getLogin() - })); + // First, preflight check ... if we are not logged in, there + // is nothing we can do. + var logoutLink = Array.some(document.links, function (x) { + return x.search === "?logout=1" ; + }); + if (!logoutLink) { + return null; // This should just finish whole content script without + // doing any harm to anybody. + } + + // Prepare for query buttons + // element ID brElementPlace_location is later used in JSON files + // Stay with this add_comment element even if RH BZ upgrades, this seems + // to be generally much more stable (even with other bugzillas, e.g. b.gnome.org) + // then some getElementById. + var commentArea = document.getElementsByName("add_comment")[0].parentNode; + if (commentArea) { + var brElementPlacer = commentArea.getElementsByTagName("br"); + brElementPlacer = brElementPlacer[0]; + if (brElementPlacer) { + brElementPlacer.setAttribute("id","brElementPlacer_location"); + brElementPlacer.parentNode.insertBefore(document.createElement("br"), + brElementPlacer); + } + } + + // TODO Probably could be ignored ... used only once on line 973 of rhbzpage.js + // if (parseAbrtBacktraces && this.RE.Abrt.test(getSummary())) { + // title = document.getElementById("short_desc_nonedit_display").textContent; + + // So, now we know we are logged in, so we can get to + // the real work. + setConfigurationButton(); + submitHandlerInstalled = false; + + checkComments(); + + postMessage(new Message("GetInstalledPackages", { + location: window.location.href, + login: getLogin() + })); } startup(); |