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

                                                     





                                                                                                              
                                            
                                                                                 
  
             
                                     
                           
                                  
                                   

                               
                                      
                                          
 
                                          
                                 
 



                                                   
 
 
   
  

                            








                                                                

 
                                                                                    

































































                                                                              

  
                              
                                  

                                      
                                    

                                               
                                
                                      
                                       
                                        
                                       

                                   
  
 
                                            
                   
              


                                                       

                               






















                                                     

   



                                                                 

                                                         



                                 

                                                               



                                        
// 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 browser = require("tab-browser");
var self = require("self");
var pageMod = require("page-mod");
var libbz = require("libbugzilla");
var tabs = require("tabs");
var logger = require("logger");
var Message = require("util").Message;
var contextMenu = require("context-menu");

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;
  }
}

var messageHandler = exports.messageHandler = function messageHandler(worker, msg) {
  switch (msg.cmd) {
  case "LogMessage":
    console.log(msg.data);
    break;
  case "ExecCmd":
    libbz.executeCommand(msg.data); 
    break;
  case "AddLogRecord":
    logger.addLogRecord(msg.data); 
    break;
  case "GenerateTS":
    logger.generateTimeSheet();
    break;
  case "ClearTS":
    logger.clearTimeSheet();
    break;
  case "ImportTS":
    logger.importTimeSheet();
    break;
  case "GetInstalledPackages":
    // send message with packages back
    libbz.getInstalledPackages(msg.data, function (pkgsMsg) {
      worker.postMessage(pkgsMsg);
    });
    break;
  case "GetClipboard":
    libbz.getClipboard(function (clipboard) {
      worker.postMessage(new Message(msg.data, clipboard));
    });
    break;
  case "SetClipboard":
    libbz.setClipboard(msg.data);
    break;
  case "ChangeJSONURL":
    libbz.changeJSONURL();
    break;
  case "OpenURLinPanel":
    libbz.openURLInNewPanel(msg.data);
    break;
  case "OpenURLinTab":
    libbz.openURLInNewTab(msg.data);
    break;
  case "OpenStringInPanel":
    libbz.openStringInNewPanel(msg.data);
    break;
  case "MakeXMLRPCall":
    // url, login, method, params, callback
    libbz.makeXMLRPCCall(msg.data.url, msg.data.login, msg.data.method,
      msg.data.params, function(ret) {
        worker.postMessage(new Message(msg.data.callRPC, ret));
    });
    break;
  case "GetURL":
    libbz.getURL(msg.data.url, function(stuff) {
      worker.postMessage(new Message(msg.data.backMessage, stuff));
    });
    break;
  case "OpenBugUpstream":
    libbz.createUpstreamBug(msg.data.url, msg.data.subject, msg.data.comment);
    break;
  case "testReady":
    // we ignore it here, interesting only in unit test
    break;
  default:
    console.error(msg.toSource());
  }
};

var contentScriptLibraries = [
  self.data.url('lib/urltest.js'),
  self.data.url("lib/jumpNextBug.js"),
  self.data.url("lib/util.js"),
    self.data.url("lib/queries.js"),
  self.data.url("lib/preprocessDuplicates.js"),
  self.data.url("lib/viewSource.js"),
  self.data.url("lib/color.js"),
  self.data.url("lib/addNewLinks.js"),
  self.data.url("lib/otherButtons.js"),
  self.data.url("lib/logging-front.js"),
  self.data.url('lib/bug-page-mod.js'),
  self.data.url("lib/rhbzpage.js"),
  self.data.url("lib/bzpage.js")
];

libbz.initialize(libbz.config, function () {
  pageMod.PageMod({
    include: [
      "https://bugzilla.redhat.com/show_bug.cgi?id=*",
      "https://bugzilla.mozilla.org/show_bug.cgi?id=*",
      "https://bugzilla.gnome.org/show_bug.cgi?id=*"
    ],
    contentScriptWhen: 'ready',
    contentScriptFile: contentScriptLibraries,
    onAttach: function onAttach(worker, msg) {
      worker.on('message', function (msg) {
        messageHandler(worker, msg);
      });
    }
  });
});

pageMod.PageMod({
  include: [
    "https://bugzilla.redhat.com/process_bug.cgi",
    "https://bugzilla.redhat.com/post_bug.cgi",
    "https://bugzilla.redhat.com/attachment.cgi",
    "https://bugzilla.mozilla.org/process_bug.cgi",
    "https://bugzilla.mozilla.org/post_bug.cgi",
    "https://bugzilla.mozilla.org/attachment.cgi",
    "https://bugzilla.gnome.org/process_bug.cgi",
    "https://bugzilla.gnome.org/post_bug.cgi",
    "https://bugzilla.gnome.org/attachment.cgi"
  ],
  contentScriptWhen: 'ready',
  contentScriptFile: self.data.url("lib/skip-bug.js")
});


// Allow toggling of CC event displays using a context menu entry
contextMenu.Item({
  label: "Toggle CC History",
  contentScriptFile: [self.data.url('lib/urltest.js'),
                      self.data.url('lib/cc-context.js')]
});

contextMenu.Item({
  label: "Copy Check-in Comment",
  contentScriptFile: [self.data.url('lib/urltest.js'),
                      self.data.url('lib/checkin-context.js')],
  onMessage: function (comment) {
      require("clipboard").set(comment);
  }
});