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










                                                                                                             
             
                                     
                           
                                  
                                   

                               
                                      
                                          
 
                                          
                                 
 
                                        
                                                    

                                         
 
 
   
  

                            






                                                              
                                                                 
   

 

                                                                      




                          
                                   

                      
                                  











                                      
                                                            



                                  
                                            



















                                                           





                                                              
          

                                           

                         


                                                               

                                                                
                 



                                                         
                                              

                                                                
                 
     
          
                




                                                              

                         

                                                           






                                                       

  
                              
                                       


                                        
                                                    
                                          
                                  
                                           
                                                 
                                                

                                                    
                                            
                                          

                                            
                                  
  
 
                                           
                   



                                                         
      



                                               






                                    









                                                     
    

                                                      

   
                                                                
                  

                              

                                           
   


                  

                                  

                                                


                                      

   
//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 "MakeJSONRPCall":
    // url, login, method, params, callback
    if (msg.data.login) {
      libbz
          .makeJSONRPCCallWithLogin(msg.data.url,
              msg.data.method, msg.data.params, msg.data.login,
              function(ret) {
                worker.postMessage(new Message(msg.data.callRPC,
                    ret));
              });
    }
    else {
      libbz
          .makeJSONRPCCall(msg.data.url, 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('tweaks/urltest.js'),
    self.data.url("lib/util.js"),
    self.data.url("lib/jumpNextBug.js"),
    self.data.url("lib/queries.js"),
    self.data.url("tweaks/preprocessDuplicates.js"),
    self.data.url("tweaks/viewSource.js"),
    self.data.url("lib/color.js"),
    self.data.url("tweaks/addNewLinks.js"),
    self.data.url("lib/bugzillaDOMFunctions.js"),
    self.data.url("rhlib/xorgBugCategories.js"),
    self.data.url("lib/otherButtons.js"),
    self.data.url("lib/makeBacktraceAttachment.js"),
    self.data.url("rhlib/fixingAttMIME.js"),
    self.data.url("lib/logging-front.js"),
    self.data.url('tweaks/bug-page-mod.js'),
    self.data.url("rhlib/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('tweaks/urltest.js'),
      self.data.url('tweaks/cc-context.js')
  ]
});

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