Advertisement
cgrunwald

Untitled

Aug 22nd, 2011
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function(win) {
  2.     if(typeof(win.require) != 'undefined') { return win.require; }
  3.    
  4.     var loader = Components.classes['@mozilla.org/moz/jssubscript-loader;1'].getService(Components.interfaces.mozIJSSubScriptLoader);
  5.     var baseUrl = 'chrome://modules/content/';
  6.     win.modules = {};
  7.    
  8.     function getUrl(module) {
  9.         return baseUrl + module.replace(/[\[\]\.]/g, '/') + '.js';
  10.     }
  11.    
  12.     function getPath(path) {
  13.         var next = win.modules;
  14.         path = path.split(/[\[\]\.]+/);
  15.         if (path[path.length - 1] == "") {
  16.             path.pop();
  17.         };
  18.         while (path.length && (next = next[path.shift()]) && typeof next == "object" && next !== null);
  19.         if (next == win.modules) { next = undefined; }
  20.         return next;
  21.     }
  22.  
  23.    
  24.     function loadModule(module, url) {
  25.         console.log('URL: ' + url)
  26.         var result;
  27.         var path = module.split(/[\[\]\.]+/);
  28.         module = getPath(module);
  29.         if(typeof module == 'undefined') {
  30.             result = loader.loadSubScript(url);
  31.             //win.modules[module] = result;
  32.         } else {
  33.             result = module;
  34.         }
  35.         return result;
  36.     }
  37.    
  38.     return win.require = function requireModule() {
  39.         if(arguments.length == 0) { return win.require; }
  40.         var results = {};
  41.         var resultsCount = 0;
  42.         var firstResult;
  43.         for(var i in arguments) {
  44.             if(typeof(arguments[i]) == 'object') {
  45.                 for(var module in arguments[i]) {
  46.                     var result = loadModule(module,  getUrl(module));
  47.                     arguments[i](result);
  48.                     results[module] = result;
  49.                     if(resultsCount == 0) {
  50.                         firstResult = result;
  51.                     }
  52.                     resultsCount++;
  53.                 }
  54.             } else if(typeof(arguments[i]) == 'string') {
  55.                 var result = loadModule(arguments[i],  getUrl(arguments[i]));
  56.                 results[arguments[i]] = result;
  57.                 if(resultsCount == 0) {
  58.                     firstResult = result;
  59.                 }
  60.                 resultsCount++;
  61.             }
  62.         }
  63.         if(resultsCount == 1) {
  64.             results = firstResult;
  65.         }
  66.         return results;
  67.     };
  68. })(window);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement