// Released under the MIT/X11 license
// http://www.opensource.org/licenses/mit-license.php
jetpack.future.import("pageMods");
jetpack.future.import("storage.simple");
var RHColor = "#9E292B";
var FedoraColor = "#002867";
var RawhideColor = "#007700"; // or "green"
var RHITColor = "#660066";
var SalmonPink = "#FFE0B0";
var ReporterColorHex = "#FFFFA6";
var XMLRPCurl = "https://bugzilla.redhat.com/xmlrpc.cgi";
var myConfig = jetpack.storage.simple;
//==============================================================
// CONFIGURE: The easiest method how to set up the configuration
// value is to uncomment the following line with proper URL as
// the second parameter. Then reload the bug page and comment out
// again.
// myConfig.JSONURL = "URL-somewhere-with-your-JSON";
var jsonDataURL = myConfig.JSONURL ? myConfig.JSONURL :
"http://mcepl.fedorapeople.org/scripts/BugZappers_data.json";
var PCIIDsURL = "http://mcepl.fedorapeople.org/scripts/drm_pciids.json";
//var debug = GM_getValue("debug",false);
var reqCounter = 0;
var msgStrs = {};
var CommentRe = RegExp("^\\s*#");
var BlankLineRe = RegExp("^\\s*$");
var ChipsetRE = RegExp("^\\(--\\) ([A-Za-z]+)\\([0-9]?\\): Chipset: (.*)$");
var ATIgetIDRE = RegExp("^.*\\(ChipID = 0x([0-9a-fA-F]+)\\).*$");
// For identification of graphics card
var manuChipStrs = [
["ATI Radeon","ATI","1002"],
["ATI Mobility Radeon","ATI","1002"],
["Intel Corporation","INTEL","8086"],
["NVIDIA","NV","10de"]
];
var backTranslateManufacturerPCIID = [{
regexp: "ATI Technologies Inc",
addr: "1002"
},{
regexp: "Intel Corporation",
addr: "8086"
},{
regexp: "nVidia Corporation",
addr: "10de"
}];
// Initialize data from remote URL
var XMLHTTPRequestDone = false;
var hashBugzillaName = Array();
var hashBugzillaWholeURL = Array();
var defAssigneeList = Array();
var signatureFedoraString = "";
// TODO we should have an array SpecialFlags instead of multiple Boolean variables
var queryButtonAvailable = false;
var chipIDsGroupings = Array();
var AddrArray = Array();
var PCI_ID_Array = Array();
var XorgLogAttList = Array();
var XorgLogAttListIndex = 0;
// Get JSON configuration data
var JSONXHR = new XMLHttpRequest();
JSONXHR.open("GET",jsonDataURL,true);
JSONXHR.onreadystatechange = function(response) {
var data = JSON.parse(response.responseText);
console.log("data = " + data);
msgStrs = data['strings'];
signatureFedoraString = data['signature'];
hashBugzillaName = data['bugzillalabelNames'];
hashBugzillaWholeURL = data['bugzillaIDURLs'];
// [{'regexp to match component':'email address of an universal maintainer'}, ...]
AddrArray = data['CCmaintainer'],
console.log("AddrArray = " + AddrArray);
defAssigneeList = data['defaultAssignee'],
queryButtonAvailable = data['queryButton'];
chipIDsGroupings = data['chipIDsGroupings'];
buildButtons(data['topRow'],data['bottomRow']);
};
JSONXHR.send(null);
// Get card translation table
var PCIXHR = new XMLHttpRequest();
PCIXHR.open("GET",PCIIDsURL,true);
PCIXHR.onreadystatechange = function(response) {
if (response.readyState == 4) {
if (response.status == 200)
PCI_ID_Array = JSON.parse(response.responseText);
}
};
PCIXHR.send(null);
//==============================================================
/**
* select element of the array where regexp in the first element matches second parameter
* of this function
* @param list array with regexps and return values
* @param chosingMark string by which the element of array is to be matched
* @return string chosen element
*/
function filterByRegexp(list,chosingMark) {
var chosenPair = Array();
if (list.length > 0) {
chosenPair = list.filter(
function(pair){
return RegExp(pair['regexp'],"i").test(chosingMark);
});
};
if (chosenPair.length > 0) {
return $.trim(chosenPair[0]['addr']);
} else {
return "";
}
}
///////////////////////////////////////////////////////////////////////////////
function bzPage(doc) {
this.doc = $(doc);
this.reporter = $("#bz_show_bug_column_2 > table .vcard:first > a",
this.doc).attr("title");
this.product = $("#product option:selected:first",this.doc).text();
this.component = $("#component option:selected:first",this.doc).text();
console.log("component = " + this.component);
console.log("AddrArray = " + AddrArray.toSource());
this.version = $("#version option:selected:first",this.doc).text();
this.its = $.trim($("#cf_issuetracker",this.doc).text());
this.maintCCAddr = filterByRegexp(AddrArray,this.component).toLowerCase();
console.log("maintCCAddr = " + this.maintCCAddr);
// Take care of signature for Fedora bugzappers
if (signatureFedoraString.length > 0) {
// (or a form named "changeform")
$("form::nth-child(2)",this.doc).submit(function () {
var cmntText = $("#comment",this.doc);
if ((signatureFedoraString.length > 0) &&
($.trim(cmntText.text()).length > 0)) {
cmntText.text($.trim(cmntText.text()) + signatureFedoraString);
}
});
}
this.setBranding();
this.checkComments();
}
/**
* Check for the presence of a keyword
*
* @param str string with the keyword
* @return Boolean
*
*/
bzPage.prototype.hasKeyword = function(str) {
var kwd = $.trim($('keywords',this.doc).text());
return (RegExp(str).test(kwd));
}
/* Bugzilla functions.*/
/**
* Set background color of all comments made by reporter in ReporterColorHex color
*
*/
bzPage.prototype.checkComments = function() {
var reporter = this.reporter;
$("#comments .bz_comment",this.doc).each(function (i) {
var email = $(".vcard a",this).text();
if (RegExp(reporter).test(email)) {
$(this).css("background-color",ReporterColorHex);
}
});
};
/**
* Set branding colours to easily distinguish between Fedora and RHEL bugs
*
* @param brand string with product of the current bug
* @param version string with the version of the bug
* @param its string with the IsueTracker numbers
* @return none
*
*/
bzPage.prototype.setBranding = function () {
var brandColor = "";
if (RegExp("Red Hat Enterprise Linux").test(this.product)) {
if (this.its.length > 0) {
brandColor = RHITColor;
} else {
brandColor = RHColor;
}
} else if (RegExp("Fedora").test(this.product)) {
if (RegExp("rawhide","i").test(this.version)) {
brandColor = RawhideColor;
} else {
brandColor = FedoraColor;
}
}
// Comment each of the following lines to get only partial branding
$("body",this.doc).css("background",brandColor);
$("#titles",this.doc).css("background",brandColor);
// Make background-color of the body of bug salmon pink
// for security bugs.
if (this.hasKeyword("Security")) {
$("#bugzilla-body",this.doc).css({
'background-image' : 'none',
'background-color' : SalmonPink
});
}
// // we should make visible whether maintCCAddr is in CCList
// if (isInList(maintCCAddr, CCList)) {
// var switchCCEdit=document.getElementById("cc_edit_area_showhide");
// //switchCCEdit.textContent = "*"+switchCCEdit.textContent;
// switchCCEdit.style.color = "navy";
// switchCCEdit.style.fontWeight = "bolder";
// switchCCEdit.style.textDecoration = "underline";
// }
}
var callback = function(doc) {
var curPage = new bzPage(doc);
};
var options = {};
options.matches = [
"https://bugzilla.redhat.com/show_bug.cgi*",
"https://bugzilla.redhat.com/process_bug.cgi"
];
jetpack.pageMods.add(callback, options);