aboutsummaryrefslogblamecommitdiffstats
path: root/lib/main.js
blob: 61a566dc12ef6ce84673ec4ef3a31a9434a789dc (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
                                                                                                                                                                                                                   

                                                     







                                                                                                              
  
             
                           
                               
                                                  
                                     
                            
                                                                         
 


                                                         
 



                                               
  
 



                                                  

                                                   
  
 






















                                                                                    
 
                                          
                                   
 
                                          
                                                     
                                             
       
 
 





                                                                    
                                                                

                                                      
                             








                                                                        
















                                                                                     




                                                 

                                                          
                                                                      
 



                         


                                                  











                                                                         
             
          
       
  
/*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 */
// 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 util = require("util");
var logger = require("logger");
var myStorage = require("simple-storage").storage;
var browser = require("tab-browser");
var urlMod = require("url");
var JSONURL = "http://matej.ceplovi.cz/progs/data/RH_Data-packages.json";

var TriagedDistro = 13;
var NumberOfFrames = 7;
var XMLRPCurl = "https://bugzilla.redhat.com/xmlrpc.cgi";

var config = {};
config.matches = [
    "https://bugzilla.redhat.com/show_bug.cgi",
    "https://bugzilla.mozilla.org/show_bug.cgi"
];

config.skipMatches = [
    "https://bugzilla.redhat.com/process_bug.cgi",
    "https://bugzilla.redhat.com/post_bug.cgi",
    "https://bugzilla.mozilla.org/post_bug.cgi",
    "https://bugzilla.mozilla.org/process_bug.cgi",
    "https://bugzilla.redhat.com/attachment.cgi$"
];

// ==============================================================
// https://wiki.mozilla.org/Labs/Jetpack/JEP/24
var WillBemanifest = {
    settings : [
        {
            name : "BZpassword",
            type : "password",
            label : "Bugzilla password"
        },
        {
            name : "JSONURL",
            type : "text",
            label : "Configuration file URL",
            "default" : "http://mcepl.fedorapeople.org/scripts/BugZappers_data.json"
        },
        {
            name : "enabledPacks",
            type : "text",
            label : "comment packs which should be enabled",
            "default" : ""
        }
    ]
};

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 titleStr = doc.getElementsByTagName("title")[0].textContent;
    var REArr = new RegExp("[bB]ug\\s+([0-9]+)").exec(titleStr);
    var hostname = urlMod.URL(doc.location.href).host;
    if (REArr) {
        var bugNo = REArr[1];
        console.log("bugNo = " + bugNo + ", hostname = " + hostname);
        var emailsSent = doc.
        querySelector("#bugzilla-body > dl:nth-of-type(1)").textContent;
        emailsSent = emailsSent.replace(/^(\s*)$/mg,"");
        util.notification(emailsSent);
        doc.location = stemURL.replace("HOSTNAME",hostname) + bugNo;
    }
}

function initialize(callback) {
    util.loadJSON(JSONURL, function(parsedData) {
        config.gJSONData = parsedData;

        var keys = "", key = "";
        for (key in config.gJSONData) {
            keys += key + " ";
        }
        console.log("loaded JSON object keys: " + keys);

        // Get card translation table
        if ("PCIIDsURL" in config.gJSONData.configData) {
            util.loadJSON(config.gJSONData.configData.PCIIDsURL, function(response) {
                config.PCI_ID_Array = response;
            });
        }

        if (!myStorage.logs) {
            console.log("myStorage.logs empty!");
            myStorage.logs = {};
        }

        var logConstructor = logger.Logger;
        config.logger = new logConstructor(myStorage.logs,
            config.gJSONData.constantData.bugzillalabelAbbreviations);

        callback(config);
    }, this);
}

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; }
                var doc = window.document;
                var construct = require("rhbzpage").RHBugzillaPage;
                if (isOurPage(window, config.matches)) {
                    var curPage = new construct(doc, config);
                } else if (isOurPage(window, config.skipMatches)) {
                    skipThisPage(doc);
                } else {
                    console.log("Not our page: " + window.location.href);
                }
            }
        );
    });
};