<!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>