/*jslint rhino: true, forin: true, onevar: false, browser: true, evil: true, laxbreak: true, undef: true, nomen: true, eqeqeq: false, bitwise: true, maxerr: 1000, immed: false, white: false, plusplus: false, regexp: false, undef: false */ // Released under the MIT/X11 license // http://www.opensource.org/licenses/mit-license.php // // Links to read through // http://ehsanakhgari.org/blog/2010-01-07/bugzilla-tweaks-enhanced // http://hg.mozilla.org/users/ehsan.akhgari_gmail.com/extensions/file/tip/bugzillatweaks // http://hg.mozilla.org/users/ehsan.akhgari_gmail.com/extensions/file/ecfa0f028b81/bugzillatweaks/lib/main.js // http://hg.mozilla.org/users/avarma_mozilla.com/atul-packages/file/42ac1e99a107/packages\ // /facebook-acquaintances/lib/main.js#l11 // http://ehsanakhgari.org/blog/2010-05-31/my-experience-jetpack-sdk#comment-1253 // "use strict"; var logger = require("logger"); var browser = require("tab-browser"); var self = require("self"); var Request = require("request").Request; var preferences = require("preferences-service"); var pageMod = require("page-mod"); // var BTSPrefNS = require("bzpage").BTSPrefNS; // Use my JSON for now before it is fixed for general public var JSONURLDefault = "https://fedorahosted.org/released"+ "/bugzilla-triage-scripts/Config_data.json"; var config = {}; function isOurPage(window, matchingURLs) { var url = window.location.href; // like ["regexp-url1", "regexp-url2"] return matchingURLs.some(function (element,i,a) { return new RegExp(element).test(url); }); } /** * */ function skipThisPage(doc) { var stemURL = "https://HOSTNAME/show_bug.cgi?id="; var titleElems = doc.getElementsByTagName("title"); var titleStr = titleElems[0].textContent; var REArr = new RegExp("[bB]ug\\s+([0-9]+)").exec(titleStr); var hostname = doc.location.hostname; if (REArr) { var bugNo = REArr[1]; doc.location = stemURL.replace("HOSTNAME",hostname) + bugNo; } } function initialize(callback) { var prefName = BTSPrefNS+"JSONURL"; var urlStr = ""; if (preferences.isSet(prefName)) { urlStr = preferences.get(prefName); } else { urlStr = JSONURLDefault; preferences.set(prefName, JSONURLDefault); } // Randomize URL to avoid caching // TODO see https://fedorahosted.org/bugzilla-triage-scripts/ticket/21 // for more thorough discussion and possible further improvement urlStr += (urlStr.match(/\?/) == null ? "?" : "&") + (new Date()).getTime(); Request({ url: urlStr, onComplete: function (response) { if (response.status == 200) { config.gJSONData = response.json; // Get additional tables if ("downloadJSON" in config.gJSONData.configData) { var URLsList = config.gJSONData.configData.downloadJSON; var dwnldObj = ""; URLsList.forEach(function (arr) { var title = arr[0]; var url = arr[1]; Request({ url: url, onComplete: function(response) { if (response.status == 200) { config.gJSONData.constantData[title] = response.json; } } }).get(); }, this); } config.logger = new logger.Logger(JSON.parse(self.data.load("bugzillalabelAbbreviations.json"))); config.matches = config.gJSONData.configData.matches; config.skipMatches = config.matches.map(function(x) { return x.replace("show_bug.cgi.*","((process|post)_bug|attachment)\.cgi$"); }); config.objConstructor = {}; var bzType = config.gJSONData.configData.objectStyle; if (bzType === "RH") { config.objConstructor = require("rhbzpage").RHBugzillaPage; } else if (bzType === "MoFo") { config.objConstructor = require("mozillabzpage").MozillaBugzilla; } callback(config); } } }).get(); } /* exports.main = function main(options, callbacks) { initialize(function (config) { browser.whenContentLoaded( function(window) { // is this good for anything? if ("window" in window) { window = window.window; } if (isOurPage(window, config.matches)) { try { var curPage = new config.objConstructor(window, config); } catch (ex) { if (ex instanceof require("bzpage").NotLoggedinException) { return ; // Bail out if the user is not logged in } else { throw ex; // rethrow the exception otherwise } } } else if (isOurPage(window, config.skipMatches)) { skipThisPage(window.document); } } ); }); }; */ var messageHandler = exports.messageHandler = function messageHandler(worker, msg) { switch (msg.cmd) { case "LogMessage": console.log(msg.data); break; case "GetDuplicatorID": getDuplicatorID(msg.data.host, msg.data.bugID, function (msgObj) { worker.postMessage(msgObj); }); break; case "GetPassword": getPassword(msg.data.login, msg.data.hostname, function (pass) { worker.postMessage(pass); }); break; case "DeDeduplicateQueue": LoginData = { queue: msg.data.bugs, host: msg.data.hostname, login: msg.data.login, pass: msg.data.password, dupID: msg.data.duplicator, finalCallback: function (msgObj) { worker.postMessage(msgObj); } }; processReqQueue(); break; case "testReady": // we ignore it here, interesting only in unit test break; default: console.error(msg.toSource()); } }; var contentScriptLibraries = { "bugzilla.redhat.com": [ self.data.url("bzpage.js"), self.data.url("rhbzpage.js") ] }; pageMod.PageMod({ include: [ "https://bugzilla.redhat.com/show_bug.cgi?id=*" ], contentScriptWhen: 'ready', // contentScriptFile: contentScriptLibraries["bugzilla.redhat.com"], onAttach: function onAttach(worker, msg) { console.log("worker: " + worker); worker.on('message', function (msg) { messageHandler(worker, msg); }); } });