diff options
Diffstat (limited to 'docs/html/overview-summary-rhbzpage.js.html')
-rw-r--r-- | docs/html/overview-summary-rhbzpage.js.html | 1092 |
1 files changed, 1092 insertions, 0 deletions
diff --git a/docs/html/overview-summary-rhbzpage.js.html b/docs/html/overview-summary-rhbzpage.js.html new file mode 100644 index 0000000..56dcb4c --- /dev/null +++ b/docs/html/overview-summary-rhbzpage.js.html @@ -0,0 +1,1092 @@ +<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd"> +<html> +<head> +<title> + Overview +</title> +<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style"> +<script> +function asd() { + + parent.document.title="rhbzpage.js Overview"; + +} +</script> +</head> +<body bgcolor="white" onload="asd();"> + +<!-- ========== START OF NAVBAR ========== --> +<a name="navbar_top"><!-- --></a> +<table border="0" width="100%" cellpadding="1" cellspacing="0"> +<tr> +<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1"> +<a name="navbar_top_firstrow"><!-- --></a> +<table border="0" cellpadding="0" cellspacing="3"> + <tr align="center" valign="top"> + + + <td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a> </td> + <td bgcolor="#FFFFFF" class="NavBarCell1Rev"> <font class="NavBarFont1Rev"><b>File</b></font> </td> + + + <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font> </td> + <td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a> </td> + <td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a> </td> + <td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a> </td> + </tr> +</table> +</td> +<td bgcolor="#EEEEFF" align="right" valign="top"> +<em> +<b></b></em> +</td> +</tr> + +<tr> +<td bgcolor="white" class="NavBarCell2"><font size="-2"> + PREV + NEXT</font></td> +<td bgcolor="white" class="NavBarCell2"><font size="-2"> + <a href="index.html" target="_top"><b>FRAMES</b></a> + <a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a> + +<script> + <!-- + if(window==top) { + document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>'); + } + //--> +</script> +<noscript> +<a href="allclasses-noframe.html" target=""><b>All Classes</b></a> +</noscript> +</font></td> +</tr> +</table> +<!-- =========== END OF NAVBAR =========== --> + +<hr> +<center> + + <h2>rhbzpage.js</h2> + +</center> + + + + +<h4>Summary</h4> +<p> + + No overview generated for 'rhbzpage.js'<BR/><BR/> + +</p> + +<hr> + + + <table border="1" cellpadding="3" cellspacing="0" width="100%"> + <tr bgcolor="#CCCCFF" class="TableHeadingColor"> + <td colspan=2><font size="+2"> + + <b>Class Summary</b> + + </font></td> + </tr> + + <tr bgcolor="white" class="TableRowColor"> + <td width="15%"><b><a href="RHBugzillaPage.html">RHBugzillaPage</a></b></td> + <td> </td> + </tr> + + </table> + <hr/> + + +<!-- ========== METHOD SUMMARY =========== --> + +<!-- ========== END METHOD SUMMARY =========== --> + + + <pre class="sourceview"><span class="comment">/*jslint onevar: false, browser: true, evil: true, laxbreak: true, undef: true, nomen: true, eqeqeq: true, bitwise: true, maxerr: 1000, immed: false, white: false, plusplus: false, regexp: false, undef: false */</span> +<span class="comment">// Released under the MIT/X11 license</span> +<span class="comment">// http://www.opensource.org/licenses/mit-license.php</span> +<span class="literal">"use strict"</span>; +var util = require(<span class="literal">"util"</span>); +var xrpc = require(<span class="literal">"xmlrpc"</span>); +var apiUtils = require(<span class="literal">"api-utils"</span>); +var xhr = require(<span class="literal">"xhr"</span>); +var clip = require(<span class="literal">"clipboard"</span>); +var Color = require(<span class="literal">"color"</span>).Color; +var BZPage = require(<span class="literal">"bzpage"</span>).BZPage; +var url = require(<span class="literal">"url"</span>); +var timer = require(<span class="literal">"timer"</span>); +var selection = require(<span class="literal">"selection"</span>); +var tabs = require(<span class="literal">"tabs"</span>); +<span class="comment">// var NumberOfFrames = 7;</span> +<span class="comment">// var bugURL = "https://bugzilla.redhat.com/show_bug.cgi?id=";</span> + +<span class="comment">// ====================================================================================</span> +<span class="comment">// RHBugzillaPage object</span> + +var RHBugzillaPage = <span class="reserved">function</span> RHBugzillaPage(win, config) { + <span class="comment">// inheritance ... call superobject's constructor</span> + BZPage.call(<span class="reserved">this</span>, win, config); + + <span class="comment">// For identification of graphics card</span> + var manuChipStrs = [ [ <span class="literal">"ATI Radeon"</span>, <span class="literal">"ATI"</span>, <span class="literal">"1002"</span> ], + [ <span class="literal">"ATI Mobility Radeon"</span>, <span class="literal">"ATI"</span>, <span class="literal">"1002"</span> ], + [ <span class="literal">"Intel Corporation"</span>, <span class="literal">"INTEL"</span>, <span class="literal">"8086"</span> ], [ <span class="literal">"NVIDIA"</span>, <span class="literal">"NV"</span>, <span class="literal">"10de"</span> ] ]; + + <span class="comment">// http://en.wikipedia.org/wiki/HSL_color_space</span> + <span class="comment">// when only the value of S is changed</span> + <span class="comment">// stupido!!! the string is value in hex for each color</span> + <span class="reserved">this</span>.RHColor = new Color(158, 41, 43); <span class="comment">// RGB 158, 41, 43; HSL 359, 1, 39</span> + <span class="reserved">this</span>.FedoraColor = new Color(0, 40, 103); <span class="comment">// RGB 0, 40, 103; HSL 359, 1, 39</span> + <span class="reserved">this</span>.RawhideColor = new Color(0, 119, 0); <span class="comment">// or "green", or RGB 0, 119, 0, or</span> + <span class="comment">// HSL</span> + <span class="comment">// 120, 0, 23</span> + <span class="reserved">this</span>.RHITColor = new Color(102, 0, 102); <span class="comment">// RGB 102, 0, 102; HSL 300, 0, 20</span> + + <span class="reserved">this</span>.RE = { + Comment: new RegExp(<span class="literal">"^\\s*#"</span>), <span class="comment">// unsused</span> + BlankLine: new RegExp(<span class="literal">"^\\s*$"</span>), <span class="comment">// unused</span> + <span class="comment">// new line</span> + <span class="comment">// [ 65.631] (--) intel(0): Chipset: "845G"</span> + Chipset: new RegExp(<span class="literal">"^\\s*\\[?[ 0-9.]*\\]?\\s*\\(--\\) "</span>+ + <span class="literal">"([A-Za-z]+)\\([0-9]?\\): Chipset: (.*)$"</span>), + ATIgetID: new RegExp(<span class="literal">"^.*\\(ChipID = 0x([0-9a-fA-F]+)\\).*$"</span>), + Abrt: new RegExp(<span class="literal">"^\\s*\\[abrt\\]"</span>), + signalHandler: new RegExp(<span class="literal">"^\\s*#[0-9]*\\s*<signal handler called>"</span>), + frameNo: new RegExp(<span class="literal">"^\\s*#([0-9]*)\\s"</span>) + }; + + <span class="reserved">this</span>.XMLRPCurl = <span class="literal">"https://bugzilla.redhat.com/xmlrpc.cgi"</span>; + <span class="comment">// END OF CONSTANTS</span> + + var that = <span class="reserved">this</span>; + <span class="reserved">this</span>.reqCounter = 0; + <span class="reserved">this</span>.signaturesCounter = 0; + <span class="reserved">this</span>.chipMagicInterestingLine = <span class="literal">""</span>; + + <span class="reserved">this</span>.login = <span class="reserved">this</span>.getLogin(); + <span class="reserved">this</span>.password = <span class="reserved">this</span>.getPassword(); + + var ITbutton = <span class="reserved">this</span>.doc.getElementById(<span class="literal">"cf_issuetracker"</span>); + <span class="reserved">this</span>.its = ITbutton ? ITbutton.value.trim() : <span class="literal">""</span>; + + <span class="comment">// set default assignee on change of the component</span> + <span class="reserved">this</span>.doc.getElementById(<span class="literal">"component"</span>).addEventListener(<span class="literal">"change"</span>, + <span class="reserved">function</span>() { + that.component = that.getOptionValue(<span class="literal">"component"</span>); + that.changeAssignee(<span class="literal">"default"</span>); + }, false); + + <span class="comment">// getBadAttachments</span> + <span class="reserved">this</span>.XorgLogAttList = []; + <span class="reserved">this</span>.XorgLogAttListIndex = 0; + <span class="reserved">this</span>.attachments = <span class="reserved">this</span>.getAttachments(); + <span class="reserved">this</span>.markBadAttachments(); + <span class="reserved">this</span>.setDefaultAssignee(); + + <span class="comment">// Dig out backtrace</span> + <span class="reserved">this</span>.btSnippet = <span class="literal">""</span>; + + var parseAbrtBacktraces = config.gJSONData.configData.parseAbrtBacktraces; + <span class="reserved">if</span> (parseAbrtBacktraces && <span class="reserved">this</span>.RE.Abrt.test(<span class="reserved">this</span>.title)) { + <span class="reserved">this</span>.pasteBacktraceInComments(); + } + + <span class="comment">// Take care of signature for Fedora bugzappers</span> + <span class="reserved">if</span> (config.gJSONData.configData.signature.length > 0) { + var signatureFedoraString = config.gJSONData.configData.signature; + <span class="reserved">this</span>.doc.forms.namedItem(<span class="literal">"changeform"</span>).addEventListener(<span class="literal">"submit"</span>, + <span class="reserved">function</span>() { + <span class="reserved">if</span> (<span class="reserved">this</span>.signaturesCounter < 1) { + that.addStuffToTextBox(<span class="literal">"comment"</span>, signatureFedoraString); + <span class="reserved">this</span>.signaturesCounter += 1; + } + }, false); + } + + <span class="reserved">this</span>.setBranding(); + <span class="reserved">this</span>.checkComments(); + + <span class="comment">// TODO Get compiz bugs as well</span> + <span class="reserved">if</span> ((config.gJSONData.configData.PCIIDsURL + && (config.PCI_ID_Array.length > 0)) + && <span class="reserved">this</span>.maintCCAddr === <span class="literal">"xgl-maint@redhat.com"</span>) { + <span class="comment">// Add find chip magic button</span> + var whiteboard_string = <span class="reserved">this</span>.doc.getElementById(<span class="literal">"status_whiteboard"</span>).value; + <span class="reserved">if</span> (!/card_/.test(whiteboard_string)) { + <span class="reserved">this</span>.fillInChipMagic(); + } + } +}; <span class="comment">// END OF RHBugzillaPage CONSTRUCTOR</span> + +RHBugzillaPage.<span class="reserved">prototype</span>.toString = <span class="reserved">function</span> toString () { + <span class="reserved">return</span> (<span class="literal">"[Object RHBugzillaPage]"</span>); +}; + +RHBugzillaPage.<span class="reserved">prototype</span> = util.heir(BZPage); +RHBugzillaPage.<span class="reserved">prototype</span>.constructor = RHBugzillaPage; + +<span class="comment">/** + * Find default assignee based on the current component + * + * <span class="attrib">@return</span> String what would be a default assignee if + * we haven't set it up. + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.getDefaultAssignee = <span class="reserved">function</span>() { + <span class="reserved">return</span> util.filterByRegexp(<span class="reserved">this</span>.constantData.defaultAssignee, + <span class="reserved">this</span>.component).toLowerCase(); +}; + +<span class="comment">/** + * Set default assignee + * + * <span class="attrib">@return</span> none + * sets this.defaultAssignee property according to defaultAssignee list + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.setDefaultAssignee = <span class="reserved">function</span>() { + <span class="reserved">this</span>.defaultAssignee = <span class="reserved">this</span>.getDefaultAssignee(); + var defAss = <span class="reserved">this</span>.defaultAssignee; + + <span class="comment">// Add setting default assignee</span> + <span class="reserved">if</span> ((defAss.length > 0) && (defAss !== <span class="reserved">this</span>.getOwner())) { + <span class="reserved">this</span>.constantData.defaultAssigneeTrigger = true; + <span class="reserved">this</span>.createNewButton(<span class="literal">"bz_assignee_edit_container"</span>,true,<span class="literal">"rh-common"</span>,<span class="literal">"setDefaultAssignee"</span>); + } +}; + +<span class="comment">/** + * Auxiliary function to computer more complicated resolution + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.closeSomeRelease = <span class="reserved">function</span>() { + <span class="comment">// for RAWHIDE close as RAWHIDE,</span> + <span class="comment">// if active selection -> CURRENTRELEASE</span> + <span class="comment">// and put the release version to</span> + <span class="comment">// "Fixed in Version" textbox</span> + <span class="comment">// otherwise -> NEXTRELEASE</span> + var verNo = <span class="reserved">this</span>.getVersion(); + <span class="reserved">this</span>.selectOption(<span class="literal">"bug_status"</span>, <span class="literal">"CLOSED"</span>); + var text = <span class="literal">""</span>; + var resolution = <span class="literal">""</span>; + + <span class="reserved">if</span> (selection.text) { + text = selection.text.trim(); + } + <span class="reserved">if</span> (text.length > 0) { + resolution = <span class="literal">"CURRENTRELEASE"</span>; + <span class="reserved">this</span>.doc.getElementById(<span class="literal">"cf_fixed_in"</span>).value = text; + } <span class="reserved">else</span> <span class="reserved">if</span> (verNo === 999) { + resolution = <span class="literal">"RAWHIDE"</span>; + } <span class="reserved">else</span> { + resolution = <span class="literal">"NEXTRELEASE"</span>; + } + <span class="reserved">this</span>.centralCommandDispatch(<span class="literal">"resolution"</span>, resolution); +}; + +<span class="comment">/** + * Additional commands specific for this subclass, overriding superclass one. + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.centralCommandDispatch = <span class="reserved">function</span>(cmdLabel, cmdParams) { + console.log(<span class="literal">"cmdLabel = "</span> + cmdLabel + <span class="literal">", cmdParams = "</span> + cmdParams); + switch (cmdLabel) { + <span class="comment">// Set up our own commands</span> + case <span class="literal">"closeUpstream"</span>: + <span class="reserved">this</span>.addClosingUpstream(); + break; + case <span class="literal">"computeResolution"</span>: + <span class="reserved">this</span>.closeSomeRelease(); + break; + case <span class="literal">"queryStringOurBugzilla"</span>: + <span class="reserved">this</span>.queryForSelection(); + break; + case <span class="literal">"queryUpstreamBugzilla"</span>: + <span class="reserved">this</span>.queryUpstream(); + break; + case <span class="literal">"sendBugUpstream"</span>: + <span class="reserved">this</span>.sendBugUpstream(); + break; + case <span class="literal">"markTriaged"</span>: + <span class="reserved">this</span>.markBugTriaged(); + break; + case <span class="literal">"chipMagic"</span>: + var splitArr = cmdParams.split(<span class="literal">"\t"</span>); + <span class="reserved">this</span>.fillInWhiteBoard(splitArr[0], splitArr[1]); + break; + <span class="comment">// If we don't have it here, call superclass method</span> + default: + BZPage.<span class="reserved">prototype</span>.centralCommandDispatch.call(<span class="reserved">this</span>, cmdLabel, cmdParams); + break; + } +}; + + +<span class="comment">/* Bugzilla functions. */</span> + +RHBugzillaPage.<span class="reserved">prototype</span>.ProfessionalProducts = [ + <span class="literal">"Red Hat Enterprise Linux"</span>, + <span class="literal">"Red Hat Enterprise MRG"</span> +]; + +<span class="comment">/** + * + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.pasteBacktraceInComments = <span class="reserved">function</span>() { + <span class="comment">// FIXME This paragraph looks suspicous ... what is it?</span> + <span class="comment">// Does it belong to this function?</span> + var notedLabel = <span class="reserved">this</span>.doc.querySelector(<span class="literal">"label[for='newcc']"</span>); + <span class="reserved">while</span> (notedLabel.firstChild) { + var node = notedLabel.removeChild(notedLabel.firstChild); + notedLabel.parentNode.insertBefore(node, notedLabel); + } + notedLabel.parentNode.removeChild(notedLabel); + + var abrtQueryURL = <span class="literal">"https://bugzilla.redhat.com/buglist.cgi?"</span> + + <span class="literal">"cmdtype=dorem&remaction=run&namedcmd=all%20NEW%20abrt%20crashes&sharer_id=74116"</span>; + + var mainTitle = <span class="reserved">this</span>.doc + .getElementsByClassName(<span class="literal">"bz_alias_short_desc_container"</span>)[0]; + var abrtButton = <span class="reserved">this</span>.doc.createElement(<span class="literal">"a"</span>); + abrtButton.setAttribute(<span class="literal">"accesskey"</span>, <span class="literal">"a"</span>); + abrtButton.setAttribute(<span class="literal">"href"</span>, abrtQueryURL); + abrtButton.textContent = <span class="literal">"Abrt bugs"</span>; + mainTitle.appendChild(abrtButton); + + <span class="reserved">if</span> (<span class="reserved">this</span>.idContainsWord(<span class="literal">"cf_devel_whiteboard"</span>, <span class="literal">'btparsed'</span>)) { + <span class="reserved">this</span>.addStuffToTextBox(<span class="literal">'status_whiteboard'</span>, <span class="literal">'btparsed'</span>); + } + + <span class="reserved">if</span> (!(<span class="reserved">this</span>.isTriaged() || <span class="reserved">this</span>.idContainsWord(<span class="literal">"status_whiteboard"</span>, + <span class="literal">'btparsed'</span>))) { + var btAttachments = <span class="reserved">this</span>.attachments + .filter(<span class="reserved">function</span>(att, idx, arr) { + <span class="reserved">return</span> (/backtrace/.test(att[0])); + }); + <span class="comment">// TODO we need to go through all backtrace attachments, but</span> + <span class="comment">// just the first one will do for now, we would need to do async</span> + <span class="comment">// parsing</span> + btAttachments.forEach(<span class="reserved">function</span>(x) { + attURL = <span class="literal">"https://bugzilla.redhat.com/attachment.cgi?id="</span> + + x[1]; + <span class="reserved">if</span> (!<span class="reserved">this</span>.btSnippet) { + var btRaw = util.loadText(attURL, <span class="reserved">function</span>(ret) { + <span class="reserved">this</span>.btSnippet = <span class="reserved">this</span>.parseBacktrace(ret); + <span class="reserved">if</span> (<span class="reserved">this</span>.btSnippet) { + <span class="reserved">this</span>.addStuffToTextBox(<span class="literal">"comment"</span>, <span class="reserved">this</span>.btSnippet); + <span class="reserved">this</span>.addStuffToTextBox(<span class="literal">"status_whiteboard"</span>, + <span class="literal">"btparsed"</span>); + } + }, <span class="reserved">this</span>); + } + }, <span class="reserved">this</span>); + } +}; + +<span class="comment">/** + * + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.markBadAttachments = <span class="reserved">function</span>() { + var badMIMEArray = [ <span class="literal">"application/octet-stream"</span>, <span class="literal">"text/x-log"</span>, <span class="literal">"undefined"</span> ]; + + var badAttachments = <span class="reserved">this</span>.attachments.filter(<span class="reserved">function</span>(att, idx, arr) { + <span class="reserved">return</span> (util.isInList(att[2], badMIMEArray)); + }); + + <span class="reserved">if</span> (badAttachments.length > 0) { + var titleElement = <span class="reserved">this</span>.doc + .getElementsByClassName(<span class="literal">"bz_alias_short_desc_container"</span>)[0]; + titleElement.style.backgroundColor = <span class="literal">"olive"</span>; + titleElement.appendChild(<span class="reserved">this</span>.createFixAllButton(badAttachments)); + badAttachments.forEach(<span class="reserved">function</span>(x, i, a) { + <span class="reserved">this</span>.addTextLink(x); + }, <span class="reserved">this</span>); + } +}; + +<span class="comment">/** + * Is this bug a RHEL bug? + * + * <span class="attrib">@return</span> Boolean true if it is a RHEL bug + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.isEnterprise = <span class="reserved">function</span>() { + var prod = <span class="reserved">this</span>.product; + var result = <span class="reserved">this</span>.ProfessionalProducts.some(<span class="reserved">function</span>(elem,idx,arr) { + <span class="reserved">return</span> new RegExp(elem).test(prod); + }); + <span class="reserved">return</span> result; +}; + +<span class="comment">/** + * Find out whether the bug is needed an attention of bugZappers + * + * <span class="attrib">@return</span> Boolean whether the bug has been triaged or not + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.isTriaged = <span class="reserved">function</span>() { + <span class="comment">// First excceptions</span> + <span class="reserved">if</span> (<span class="reserved">this</span>.version > 7 && <span class="reserved">this</span>.version < 12) { + <span class="reserved">return</span> <span class="reserved">this</span>.doc.getElementById(<span class="literal">"bug_status"</span>).value.toUpperCase() !== <span class="literal">"NEW"</span>; + } <span class="reserved">else</span> { <span class="comment">// and then the rule</span> + <span class="reserved">return</span> <span class="reserved">this</span>.hasKeyword(<span class="literal">"Triaged"</span>); + } +}; + +<span class="comment">/** + * Set branding colours to easily distinguish between Fedora and RHEL bugs + * + * <span class="attrib">@param</span> brand String with product of the current bug + * <span class="attrib">@param</span> version String with the version of the bug + * <span class="attrib">@param</span> its String with the IsueTracker numbers + * <span class="attrib">@return</span> none + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.setBranding = <span class="reserved">function</span>() { + var brandColor = {}; + var TriagedColor = {}; + + <span class="reserved">if</span> (<span class="reserved">this</span>.isEnterprise()) { + <span class="reserved">if</span> (<span class="reserved">this</span>.its && (<span class="reserved">this</span>.its.length > 0)) { + brandColor = <span class="reserved">this</span>.RHITColor; + } <span class="reserved">else</span> { + brandColor = <span class="reserved">this</span>.RHColor; + } + } <span class="reserved">else</span> <span class="reserved">if</span> (new RegExp(<span class="literal">"Fedora"</span>).test(<span class="reserved">this</span>.product)) { + <span class="reserved">if</span> (<span class="reserved">this</span>.version === 999) { + brandColor = <span class="reserved">this</span>.RawhideColor; + } <span class="reserved">else</span> { + brandColor = <span class="reserved">this</span>.FedoraColor; + } + } + + <span class="comment">// Comment each of the following lines to get only partial branding</span> + <span class="reserved">this</span>.doc.getElementsByTagName(<span class="literal">"body"</span>)[0].style.background = brandColor + .toString() + + <span class="literal">" none"</span>; + <span class="reserved">this</span>.doc.getElementById(<span class="literal">"titles"</span>).style.background = brandColor.toString() + + <span class="literal">" none"</span>; + + <span class="comment">// Remove "Bug" from the title of the bug page, so we have more space with</span> + <span class="comment">// plenty of tabs</span> + var titleElem = <span class="reserved">this</span>.doc.getElementsByTagName(<span class="literal">"title"</span>)[0]; + + titleElem.textContent = titleElem.textContent.slice(4); + var bodyTitleParent = <span class="reserved">this</span>.doc.getElementById(<span class="literal">"summary_alias_container"</span>).parentNode; + var bodyTitleElem = bodyTitleParent.getElementsByTagName(<span class="literal">"b"</span>)[0]; + bodyTitleElem.textContent = bodyTitleElem.textContent.slice(4); + + <span class="comment">// Make background-color of the body of bug salmon pink</span> + <span class="comment">// for security bugs.</span> + <span class="reserved">if</span> (<span class="reserved">this</span>.hasKeyword(<span class="literal">"Security"</span>)) { + <span class="reserved">this</span>.doc.getElementById(<span class="literal">"bugzilla-body"</span>).style.background = <span class="reserved">this</span>.SalmonPink + .toString() + <span class="literal">' none'</span>; + } + + <span class="comment">// Make it visible whether the bug has been triaged</span> + <span class="reserved">if</span> (<span class="reserved">this</span>.isTriaged()) { + <span class="reserved">this</span>.doc.getElementById(<span class="literal">"bz_field_status"</span>).style.background = brandColor + .lightColor().toString() + + <span class="literal">" none"</span>; + } + + <span class="comment">// we should make visible whether maintCCAddr is in CCList</span> + <span class="reserved">if</span> (util.isInList(<span class="reserved">this</span>.maintCCAddr, <span class="reserved">this</span>.CCList)) { + var ccEditBoxElem = <span class="reserved">this</span>.doc.getElementById(<span class="literal">"cc_edit_area_showhide"</span>); + <span class="comment">// ccEditBoxElem.textContent = "*"+ccEditBoxElem.textContent;</span> + ccEditBoxElem.style.color = <span class="literal">"navy"</span>; + ccEditBoxElem.style.fontWeight = <span class="literal">"bolder"</span>; + ccEditBoxElem.style.textDecoration = <span class="literal">"underline"</span>; + } + + <span class="comment">// mark suspicious components</span> + var compElems; + <span class="reserved">if</span> (<span class="reserved">this</span>.suspiciousComponents + && util.isInList(<span class="reserved">this</span>.component, <span class="reserved">this</span>.suspiciousComponents) + && (compElems = <span class="reserved">this</span>.doc + .getElementById(<span class="literal">"bz_component_edit_container"</span>))) { + compElems.style.background = <span class="literal">"red none"</span>; + } +}; + +<span class="comment">/** + * Given line to be parsed, find out which chipset it is and fill in the + * whiteboard + * + * <span class="attrib">@param</span> iLine String with the whole unparsed "interesting line" + * <span class="attrib">@param</span> driverStr String with the driver name + * <span class="attrib">@return</span> None + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.fillInWhiteBoard = <span class="reserved">function</span>(iLine, driverStr) { + var that = <span class="reserved">this</span>; + + <span class="reserved">function</span> groupIDs(manStr, cardStrID) { + var outStr = util.filterByRegexp(chipIDsGroupings, manStr + <span class="literal">","</span> + cardStrID); + <span class="reserved">if</span> (outStr.length === 0) { + outStr = <span class="literal">"UNGROUPED_"</span> + manStr + <span class="literal">"/"</span> + cardStrID; + } + <span class="reserved">return</span> outStr; + } + + <span class="comment">/** + * Given PCI IDs for manufacturer and card ID return chipset string + * + * <span class="attrib">@param</span> manufacturerNo String with manufacturer PCI ID + * <span class="attrib">@param</span> cardNo String with card PCI ID + * <span class="attrib">@return</span> Array with chip string and optinoal variants + */</span> + <span class="reserved">function</span> checkChipStringFromID(manufacturerNo, cardNo) { + var soughtID = (manufacturerNo + <span class="literal">","</span> + cardNo).toUpperCase(); + var outList = config.PCI_ID_Array[soughtID]; + <span class="reserved">if</span> (outList) { + <span class="reserved">return</span> outList; + } <span class="reserved">else</span> { + <span class="reserved">return</span> <span class="literal">""</span>; + } + } + + var outStr = <span class="literal">""</span>; + var cardIDStr = <span class="literal">""</span>; + var cardIDArr = []; + + chipSwitchboard: <span class="reserved">if</span> (driverStr === <span class="literal">"RADEON"</span>) { + var cardID = iLine.replace(<span class="reserved">this</span>.RE.ATIgetID, <span class="literal">"$1"</span>); + cardIDArr = checkChipStringFromID(<span class="literal">"1002"</span>, cardID); + <span class="reserved">if</span> (cardIDArr.length > 0) { + cardIDStr = cardIDArr[0]; + <span class="reserved">if</span> (cardIDArr[1]) { + optionStr = cardIDArr[1]; + outStr = groupIDs(driverStr, cardIDStr) + <span class="literal">"/"</span> + optionStr; + } <span class="reserved">else</span> { + outStr = groupIDs(driverStr, cardIDStr); + optionStr = <span class="literal">""</span>; + } + } <span class="reserved">else</span> { + outStr = <span class="literal">"**** FULLSTRING: "</span> + iLine; + } + } <span class="reserved">else</span> { + <span class="comment">// Intel Corporation, NVIDIA</span> + cardIDArr = manuChipStrs.filter(<span class="reserved">function</span>(el, ind, arr) { + <span class="reserved">return</span> new RegExp(el[0], <span class="literal">"i"</span>).test(iLine); + }); + <span class="reserved">if</span> (cardIDArr && (cardIDArr.length > 0)) { + cardIDArr = cardIDArr[0]; + } <span class="reserved">else</span> { + outStr = iLine; + break chipSwitchboard; + } + <span class="comment">// cardIDArr [0] = RE, [1] = ("RADEON","INTEL","NOUVEAU"), [2] = manu</span> + <span class="comment">// PCIID</span> + iLine = iLine.replace(new RegExp(cardIDArr[0], <span class="literal">"i"</span>)).trim(); + <span class="comment">// nVidia developers opted-out from grouping</span> + <span class="reserved">if</span> (driverStr === <span class="literal">"INTEL"</span>) { + outStr = groupIDs(cardIDArr[1], iLine); + } <span class="reserved">else</span> { + outStr = iLine; + } + } + <span class="reserved">this</span>.addStuffToTextBox(<span class="literal">"status_whiteboard"</span>, (<span class="literal">"card_"</span> + outStr).trim()); + <span class="reserved">this</span>.doc.getElementById(<span class="literal">"chipmagic"</span>).style.display = <span class="literal">"none"</span>; +}; + +<span class="comment">/** + * Get attached Xorg.0.log, parse it and find the value of chip. Does not fill + * the whiteboard itself, just adds button to do so,paramList so that slow + * XMLHttpRequest is done in advance. + * + * <span class="attrib">@return</span> None + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.fillInChipMagic = <span class="reserved">function</span> () { + var that = <span class="reserved">this</span>; + var XorgLogURL = <span class="literal">""</span>; + var XorgLogAttID = <span class="literal">""</span>; + var XorgLogFound = false; + var attURL = <span class="literal">""</span>, interestingLine = <span class="literal">""</span>; + var interestingArray = []; + + + <span class="comment">// Find out Xorg.0.log attachment URL</span> + <span class="reserved">this</span>.XorgLogAttList = <span class="reserved">this</span>.attachments.filter(<span class="reserved">function</span> (value, index, array) { + <span class="comment">// Xorg.0.log must be text, otherwise we cannot parse it</span> + <span class="reserved">return</span> (/[xX].*log/.test(value[0]) && /text/.test(value[2])); + }); + <span class="reserved">if</span> (<span class="reserved">this</span>.XorgLogAttList.length === 0) { + <span class="reserved">return</span>; + } + + XorgLogAttID = <span class="reserved">this</span>.XorgLogAttList[<span class="reserved">this</span>.XorgLogAttListIndex][1]; + attURL = <span class="literal">"https://bugzilla.redhat.com/attachment.cgi?id="</span>+XorgLogAttID; + that = <span class="reserved">this</span>; + + <span class="comment">// parse Xorg.0.log</span> + util.loadText(attURL, <span class="reserved">function</span>(ret){ + var interestingLineArr = ret.split(<span class="literal">"\n"</span>). + filter(<span class="reserved">function</span> (v,i,a) { + <span class="reserved">return</span> that.RE.Chipset.test(v); + }); + <span class="reserved">if</span> (interestingLineArr.length >0) { + <span class="comment">// TODO we are parsing only the first found line; is it alright?</span> + interestingArray = that.RE.Chipset.exec(interestingLineArr[0]); + interestingLine = interestingArray[2]. + replace(/[\s<span class="literal">"]+/g,"</span> <span class="literal">").trim(); + // Persuade createNewButton to have mercy and to actually add + // non-default button + that.constantData.chipMagicTrigger = true; + that.chipMagicInterestingLine = interestingLine+"</span>\t<span class="literal">"+interestingArray[1] + .toUpperCase(); + that.createNewButton("</span>status_whiteboard<span class="literal">", true, "</span>rh-xorg<span class="literal">", "</span>chipMagic<span class="literal">"); + } + }); + this.XorgLogAttListIndex++; +}; + +RHBugzillaPage.prototype.getSelectionOrClipboard = function getSelectionOrClipboard () { + var text = selection.text; + if (!text) { + text = clip.get(); + } + return text; +}; + +/** + * Opens a new tab with a query for the given text in the selected component + * + * @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 + * @return None + * + */ +RHBugzillaPage.prototype.queryInNewTab = function(text, component, product) { + var urlStr = "</span>https:<span class="comment">//bugzilla.redhat.com/buglist.cgi?query_format=advanced";</span> + <span class="reserved">if</span> (product) { + urlStr += <span class="literal">"&product="</span> + product.trim(); + } + <span class="reserved">if</span> (component) { + urlStr += <span class="literal">"&field0-0-0=component&type0-0-0=substring&value0-0-0="</span> + + component.trim(); + } + <span class="comment">// using more complicated query tables here, because they can be more easily</span> + <span class="comment">// edited</span> + <span class="comment">// for further investigative searches</span> + <span class="reserved">if</span> (text) { + text = encodeURIComponent(text.trim()); + var searchText = <span class="literal">"&field1-0-0=longdesc&type1-0-0=substring&value1-0-0="</span> + + text + + <span class="literal">"&field1-0-1=attach_data.thedata&type1-0-1=substring&value1-0-1="</span> + + text + + <span class="literal">"&field1-0-2=status_whiteboard&type1-0-2=substring&value1-0-2="</span> + + text; + urlStr += searchText; + tabs.open({url: urlStr}); + } +}; + +<span class="comment">/** + * Get the text to search for and prepare other things for the real executive + * function this.queryInNewTab, and run it. + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.queryForSelection = <span class="reserved">function</span>() { + var text = <span class="reserved">this</span>.getSelectionOrClipboard(); + <span class="reserved">if</span> (text) { + <span class="reserved">this</span>.queryInNewTab(text, <span class="reserved">this</span>.component); + } +}; + +<span class="comment">/** + * Search simple query in the upstream bugzilla appropriate for the component. + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.queryUpstream = <span class="reserved">function</span>() { + console.log(<span class="literal">"Querying upstream!"</span>); + var text = <span class="reserved">this</span>.getSelectionOrClipboard(); + <span class="reserved">if</span> (text) { + text = encodeURIComponent(text.trim()); + var queryUpstreamBugsURLArray = <span class="reserved">this</span>.constantData.queryUpstreamBug; + var urlBase = util.filterByRegexp(queryUpstreamBugsURLArray, <span class="reserved">this</span>.component); + tabs.open({ + url: urlBase + text, + inBackground: true, + onOpen: <span class="reserved">function</span> (t) { + t.activate(); + } + }); + } +}; + +<span class="comment">/** + * + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.sendBugUpstream = <span class="reserved">function</span>() { + var that = <span class="reserved">this</span>; + var urlStr = util.filterByRegexp(<span class="reserved">this</span>.constantData.newUpstreamBug, <span class="reserved">this</span> + .getOptionValue(<span class="literal">"component"</span>)); + + var ret = tabs.open({ + url: urlStr, + inBackground: true, + onOpen: <span class="reserved">function</span> (tab) { + var otherDoc = tab.contentDocument; + var otherElems = otherDoc.forms.namedItem(<span class="literal">"Create"</span>).elements; + otherElems.namedItem(<span class="literal">"short_desc"</span>).value = that.doc + .getElementById(<span class="literal">"short_desc_nonedit_display"</span>).textContent + .trim(); + otherElems.namedItem(<span class="literal">"comment"</span>).value = that.collectComments(); + ret.focus(); + } + }); +}; + +<span class="comment">/** + * Parse the row with the attachment + * + * <span class="attrib">@param</span> DOM element to be parsed + * <span class="attrib">@return</span> 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 + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.parseAttachmentLine = <span class="reserved">function</span>(inElem) { + var MIMEtype = <span class="literal">""</span>; + var size = 0; + + <span class="comment">// Skip over obsolete attachments</span> + <span class="reserved">if</span> (inElem.getElementsByClassName(<span class="literal">"bz_obsolete"</span>).length > 0) { + <span class="reserved">return</span> ( []); + } + + <span class="comment">// getting name of the attachment</span> + <span class="comment">// FIXME probably could use url.URL object</span> + var attName = inElem.getElementsByTagName(<span class="literal">"b"</span>)[0].textContent.trim(); + + var aHrefsArr = inElem.getElementsByTagName(<span class="literal">"a"</span>); + var aHref = Array.filter(aHrefsArr, <span class="reserved">function</span>(x) { + <span class="reserved">return</span> x.textContent.trim() === <span class="literal">"Details"</span>; + })[0]; + var id = parseInt(aHref.getAttribute(<span class="literal">"href"</span>).replace( + /^.*attachment.cgi\?id=/, <span class="literal">""</span>), 10); + + <span class="comment">// getting MIME type and size</span> + var stringArray = inElem.getElementsByClassName(<span class="literal">"bz_attach_extra_info"</span>)[0].textContent + .replace(/[\n ()]+/g, <span class="literal">" "</span>).trim().split(<span class="literal">", "</span>); + size = parseInt(stringArray[0], 10); + MIMEtype = stringArray[1].split(<span class="literal">" "</span>)[0]; + + <span class="reserved">return</span> [ attName, id, MIMEtype, size, inElem ]; +}; + +<span class="comment">/** + * Add accesskey to the particular element + * + * <span class="attrib">@param</span> rootElement Element to which the new text object will be attached + * <span class="attrib">@param</span> beforeText Text before the accesskey character + * <span class="attrib">@param</span> accKey what will be the accesskey itself + * <span class="attrib">@param</span> afterText text after the accesskey character + * <span class="attrib">@return</span> modified element with the fixed accesskey + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.fixElement = <span class="reserved">function</span>(elem, beforeText, accKey, afterText) { + elem.setAttribute(<span class="literal">"accesskey"</span>, accKey.toLowerCase()); + elem.innerHTML = beforeText + <span class="literal">"<b><u>"</span> + accKey + <span class="literal">"</u></b>"</span> + afterText; + <span class="reserved">return</span> elem; +}; + +<span class="comment">/** + * Return string with the ID for the external_id SELECT for external bugzilla + * + * <span class="attrib">@param</span> URLhostname String hostname of the external bugzilla + * <span class="attrib">@return</span> String with the string for the external_id SELECT + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.getBugzillaName = <span class="reserved">function</span>(URLhostname) { + var bugzillaID = <span class="literal">""</span>; + <span class="reserved">if</span> (<span class="reserved">this</span>.constantData.bugzillalabelNames[URLhostname]) { + bugzillaID = <span class="reserved">this</span>.constantData.bugzillalabelNames[URLhostname]; + } <span class="reserved">else</span> { + bugzillaID = <span class="literal">""</span>; + } + <span class="reserved">return</span> bugzillaID; +}; + +<span class="comment">/** + * Callback function for the XMLRPC request + * + * <span class="attrib">@param</span> ret Object with xmlhttprequest response with attributes: + * + status -- int return code + * + statusText + * + responseHeaders + * + responseText + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.fixingMIMECallBack = <span class="reserved">function</span>() { + var that = <span class="reserved">this</span>; + console.log(<span class="literal">"fixingMIMECallBack / that.doc = "</span> + that.doc); + console.log(<span class="literal">"fixingMIMECallBack / that.win = "</span> + that.win); + <span class="reserved">if</span> (--<span class="reserved">this</span>.reqCounter <= 0) { + timer.setTimeout(<span class="reserved">function</span> () { + that.win.location.reload(true); + }, 1000); + } +}; + +<span class="comment">/** + * The worker function -- call XMLRPC to fix MIME type of the particular + * attachment + * + * <span class="attrib">@param</span> id Integer with the attachment id to be fixed + * <span class="attrib">@param</span> type String with the new MIME type, optional defaults to "text/plain" + * <span class="attrib">@param</span> email Boolean whether email should be sent to appropriate person; + * option, defaults to false + * + * updateAttachMimeType($data_ref, $username, $password) + * + * Update the attachment mime type of an attachment. The first argument is a + * data hash containing information on the new MIME type and the attachment id + * that you want to act on. + * + * $data_ref = { "attach_id" => "<Attachment ID>", # Attachment ID to perform + * MIME type change on. "mime_type" => "<New MIME Type Value>", # Legal MIME + * type value that you want to change the attachment to. "nomail" => 0, # + * OPTIONAL Flag that is either 1 or 0 if you want email to be sent or not for + * this change }; + * + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.fixAttachById = <span class="reserved">function</span>(id, type, email) { + <span class="reserved">if</span> (type === undefined) { + type = <span class="literal">"text/plain"</span>; + } + <span class="reserved">if</span> (email === undefined) { + email = false; + } + + var msg = new xrpc.XMLRPCMessage(<span class="literal">"bugzilla.updateAttachMimeType"</span>); + msg.addParameter( { + <span class="literal">'attach_id'</span> : id, + <span class="literal">'mime_type'</span> : type, + <span class="literal">'nomail'</span> : !email + }); + msg.addParameter(<span class="reserved">this</span>.login); + msg.addParameter(<span class="reserved">this</span>.password); + + <span class="comment">// https://bugzilla.redhat.com/\</span> + <span class="comment">// docs/en/html/api/extensions/compat_xmlrpc/code/webservice.html</span> + <span class="comment">// test on https://bugzilla.redhat.com/show_bug.cgi?id=485145</span> + util.httpPOST(<span class="reserved">this</span>.XMLRPCurl, msg.xml(), <span class="reserved">this</span>.fixingMIMECallBack, + <span class="reserved">this</span>, <span class="literal">"text/xml"</span>, <span class="literal">"text/xml"</span>); + <span class="reserved">this</span>.reqCounter++; +}; + +<span class="comment">/** + * Create a button for fixing all bad attachments. + * + * <span class="attrib">@param</span> list Array of all bad attachmentss + * <span class="attrib">@return</span> button fixing all bad Attachments + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.createFixAllButton = <span class="reserved">function</span>(list) { + <span class="reserved">if</span> (!xrpc.XMLRPCMessage) { + <span class="reserved">return</span>; + } + var that = <span class="reserved">this</span>; + var elem = <span class="reserved">this</span>.doc.createElement(<span class="literal">"a"</span>); + elem.setAttribute(<span class="literal">"href"</span>, <span class="literal">""</span>); + elem.setAttribute(<span class="literal">"accesskey"</span>, <span class="literal">"f"</span>); + elem.innerHTML = <span class="literal">"<b>F</b>ix all"</span>; + elem.addEventListener(<span class="literal">"click"</span>, <span class="reserved">function</span>() { + Array.forEach(list, <span class="reserved">function</span>(x) { + <span class="reserved">this</span>.fixAttachById(x[1]); + }, that); + }, false); + <span class="reserved">return</span> elem; +}; + +<span class="comment">/** + * Add a link to the bad attachment for fixing it. + * + * <span class="attrib">@param</span> + * <TR> DOM jQuery element with a bad attachment + * <span class="attrib">@return</span> none + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.addTextLink = <span class="reserved">function</span>(row) { + var that = <span class="reserved">this</span>; + var elemS = row[4].getElementsByTagName(<span class="literal">"td"</span>); + var elem = elemS[elemS.length - 1]; + elem.innerHTML += <span class="literal">"<br/><a href=''>Text</a>"</span>; + elem.addEventListener(<span class="literal">"click"</span>, <span class="reserved">function</span>(x) { + that.fixAttachById(row[1], <span class="literal">"text/plain"</span>); + }, false); +}; + +<span class="comment">/** + * Add information about the upstream bug upstream, and closing it. + * + * <span class="attrib">@param</span> evt Event which called this handler + * <span class="attrib">@return</span> none + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.addClosingUpstream = <span class="reserved">function</span>() { + var refs = <span class="reserved">this</span>.doc.getElementById(<span class="literal">"external_bugs_table"</span>) + .getElementsByTagName(<span class="literal">"tr"</span>); + <span class="comment">// that's a bad id, if there is a one. :)</span> + var inputBox = <span class="reserved">this</span>.doc.getElementById(<span class="literal">"inputbox"</span>); + var externalBugID = 0; + var wholeURL = <span class="literal">""</span>; + + <span class="comment">// FIXME Hopefully unfinished and even less tested</span> + <span class="comment">// Fix missing ID on the external_id SELECT</span> + <span class="reserved">this</span>.doc.getElementsByName(<span class="literal">"external_id"</span>)[0].setAttribute(<span class="literal">"id"</span>, + <span class="literal">"external_id"</span>); + + <span class="reserved">if</span> (inputBox.value.match(/^http.*/)) { + wholeURL = inputBox.value; + var helpURL = new url.URL(wholeURL); + var paramsArr = helpURL.path.replace(/^\?/, <span class="literal">''</span>).split(<span class="literal">'&'</span>); + <span class="comment">// get convert URL parameters to an Object</span> + var params = {}, s = []; + paramsArr.forEach(<span class="reserved">function</span>(par, idx, arr) { + s = par.split(<span class="literal">'='</span>); + params[s[0]] = s[1]; + }); + <span class="reserved">if</span> (params.id) { + externalBugID = parseInt(params.id, 10); + inputBox.value = externalBugID; + } + <span class="comment">// get host and bugzillaName</span> + var bugzillaName = <span class="reserved">this</span>.getBugzillaName(helpURL.hostname); + <span class="reserved">this</span>.selectOption(<span class="literal">"external_id"</span>, bugzillaName); + } <span class="reserved">else</span> <span class="reserved">if</span> (!isNaN(inputBox.value)) { + externalBugID = parseInt(inputBox.value, 10); + var bugzillaHostname = <span class="reserved">this</span>.doc.getElementById(<span class="literal">"external_id"</span>).value; + wholeURL = bugzillaHostname+<span class="literal">"show_bug.cgi?id="</span>+externalBugID; + } <span class="reserved">else</span> { + <span class="comment">// no inputBox.value -- maybe there is an external bug from</span> + <span class="comment">// the previous commit?</span> + } + + <span class="comment">// FIXME THis is not good, we don't have a feedback for other commands,</span> + <span class="comment">// not to be run, if this fails.</span> + + <span class="comment">// It is not good to close bug as UPSTREAM, if there is no reference</span> + <span class="comment">// to the upstream bug.</span> + <span class="reserved">if</span> ((externalBugID > 0) || (refs.length > 2)) { + var msgStr = <span class="reserved">this</span>.commentStrings.sentUpstreamString; + msgStr = msgStr.replace(<span class="literal">"§§§"</span>, wholeURL); + <span class="reserved">this</span>.centralCommandDispatch(<span class="literal">"comment"</span>,msgStr); + <span class="reserved">this</span>.centralCommandDispatch(<span class="literal">"status"</span>, <span class="literal">"CLOSED"</span>); + <span class="reserved">this</span>.centralCommandDispatch(<span class="literal">"resolution"</span>, <span class="literal">"UPSTREAM"</span>); + } <span class="reserved">else</span> { + console.log(<span class="literal">"No external bug specified among the External References!"</span>); + } +}; + +RHBugzillaPage.<span class="reserved">prototype</span>.markBugTriaged = <span class="reserved">function</span>() { + <span class="comment">// Now we lie completely, we just set keyword Triaged,</span> + <span class="comment">// this is not just plain ASSIGNED, but</span> + <span class="comment">// modified according to</span> + <span class="comment">// https://fedoraproject.org/wiki/BugZappers/Meetings/Minutes-2009-Oct-27</span> + <span class="comment">// and</span> + <span class="comment">// http://meetbot.fedoraproject.org/fedora-meeting/2009-11-24\</span> + <span class="comment">// /fedora-meeting.2009-11-24-15.11.log.html</span> + <span class="comment">// and</span> + <span class="comment">// http://meetbot.fedoraproject.org/fedora-meeting/2009-11-24\</span> + <span class="comment">// /fedora-meeting.2009-11-24-15.11.log.html</span> + <span class="comment">// for F13 and later, ASSIGNED is "add Triaged keyword" (as well)</span> + <span class="comment">// for <F13 it is "add both" (ASSIGNED status and Triaged keyword)</span> + var ver = <span class="reserved">this</span>.getVersion(); + console.log(<span class="literal">"Marking bug as Triaged!"</span>); + <span class="reserved">if</span> ((!<span class="reserved">this</span>.isEnterprise()) && (ver <= 12)) { + <span class="reserved">this</span>.selectOption(<span class="literal">"bug_status"</span>, <span class="literal">"ASSIGNED"</span>); + } + <span class="reserved">this</span>.addStuffToTextBox(<span class="literal">"keywords"</span>,<span class="literal">"Triaged"</span>); +}; + +<span class="comment">/** + * + */</span> +RHBugzillaPage.<span class="reserved">prototype</span>.parseBacktrace = <span class="reserved">function</span>(ret) { + var splitArray = ret.split(<span class="literal">"\n"</span>); + var i = 0, ii = splitArray.length; + var outStr = <span class="literal">""</span>, curLine = <span class="literal">""</span>, numStr = <span class="literal">""</span>; + var lineCounter = 0, endLineNo = 0; + + <span class="reserved">while</span> (i < ii) { + <span class="reserved">if</span> (<span class="reserved">this</span>.RE.signalHandler.test(splitArray[i])) { + break; + } + i++; + } + + <span class="reserved">if</span> (i < ii) { + lineCounter = parseInt(<span class="reserved">this</span>.RE.frameNo.exec(splitArray[i])[1], 10); + endLineNo = lineCounter + NumberOfFrames; + curLine = splitArray[i]; + <span class="reserved">while</span> ((lineCounter < endLineNo) && (curLine.trim().length > 0) + && (i < ii)) { + outStr += curLine + <span class="literal">'\n'</span>; + numStr = <span class="reserved">this</span>.RE.frameNo.exec(curLine); + <span class="reserved">if</span> (numStr) { + lineCounter = parseInt(numStr[1], 10); + } + i++; + curLine = splitArray[i]; + } + } + <span class="reserved">return</span> outStr; +}; + +<span class="comment">// exports.RHBugzillaPage = apiUtils.publicConstructor(RHBugzillaPage);</span> +exports.RHBugzillaPage = RHBugzillaPage; +</pre> + <hr> + + + +<!-- ========== START OF NAVBAR ========== --> +<a name="navbar_top"><!-- --></a> +<table border="0" width="100%" cellpadding="1" cellspacing="0"> +<tr> +<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1"> +<a name="navbar_top_firstrow"><!-- --></a> +<table border="0" cellpadding="0" cellspacing="3"> + <tr align="center" valign="top"> + + + <td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a> </td> + <td bgcolor="#FFFFFF" class="NavBarCell1Rev"> <font class="NavBarFont1Rev"><b>File</b></font> </td> + + + <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font> </td> + <td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a> </td> + <td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a> </td> + <td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a> </td> + </tr> +</table> +</td> +<td bgcolor="#EEEEFF" align="right" valign="top"><em> +<b></b></em> +</td> +</tr> + +<tr> +<td bgcolor="white" class="NavBarCell2"><font size="-2"> + PREV + NEXT</font></td> +<td bgcolor="white" class="NavBarCell2"><font size="-2"> + <a href="index.html" target="_top"><b>FRAMES</b></a> + <a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a> + +<script> + <!-- + if(window==top) { + document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>'); + } + //--> +</script> +<noscript> +<a href="allclasses-noframe.html" target=""><b>All Classes</b></a> +</noscript> +</font></td> +</tr> +</table> +<!-- =========== END OF NAVBAR =========== --> + +<hr> +<font size="-1"> + +</font> +<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Wed Jun 23 09:33:14 2010</div> +</body> +</html> |