Mercurial > jsm-in-web
changeset 3:017106cf4c79
Weave's util.js can now be imported.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Wed, 08 Apr 2009 16:59:52 -0700 |
parents | e8416415be29 |
children | 760cb3aa1a01 |
files | jsm-in-web.js |
diffstat | 1 files changed, 63 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/jsm-in-web.js Wed Apr 08 16:16:48 2009 -0700 +++ b/jsm-in-web.js Wed Apr 08 16:59:52 2009 -0700 @@ -23,16 +23,13 @@ function getCodeForJsModule(url, cb) { var realUri = resourceMapper(url); - if (realUri) - jQuery.get( - realUri, - function(code) { - code = code.replace(/Components/g, "FakeComponents"); - cb(code); - } - ); - else - cb("/* No code for " + url + "*/"); + jQuery.get( + realUri, + function(code) { + code = code.replace(/Components/g, "FakeComponents"); + cb(code); + } + ); } function findDependencies(code) { @@ -45,17 +42,45 @@ return dependencies; } - self.fetch = function fetch(url, cb) { + self.import = function JSMR_import(url, obj) { + //console.log("Importing " + url); + var module = modules[url]; + + if (!module) + throw new Error("Module at url not fetched: " + url); + + if (!module.hasBeenImported) { + //console.log("Evaluating code for " + url); + module.window.eval(module.code); + module.hasBeenImported = true; + } + + var exported = module.window.EXPORTED_SYMBOLS; + + if (!exported) + throw new Error("EXPORTED_SYMBOLS is " + exported + + " for " + url); + + exported.forEach( + function(symbol) { + //console.log("Exporting symbol " + symbol); + obj[symbol] = module.window[symbol]; + }); + }; + + self.fetch = function JSMR_fetch(url, cb) { //console.log("Fetching " + url); var jsModule = { + url: url, isBeingFetched: true, + hasBeenImported: false, fetchCallbacks: [] }; modules[url] = jsModule; function onMaybeDone() { - if (jsModule.code && jsModule.iframe) { + if (jsModule.code && jsModule.window) { jsModule.isBeingFetched = false; jsModule.fetchCallbacks.forEach( function(fetchCb) { @@ -97,8 +122,27 @@ } else doneResolvingDeps(); }); - loadIframe(function(iframe) { jsModule.iframe = iframe; - onMaybeDone(); }); + loadIframe( + function(iframe) { + var window = iframe.contentWindow; + jsModule.window = window; + window.FakeComponents = { + interfaces: {}, + classes: { + "@mozilla.org/observer-service;1": { + getService: function() {} + } + }, + utils: { + "import": function FCU_import(url, obj) { + if (!obj) + obj = window; + self.import(url, obj); + } + } + }; + onMaybeDone(); + }); }; self.modules = modules; @@ -116,14 +160,17 @@ filename = "constants.js.in"; filename = "modules/" + filename; return filename; + } else if (uri == "resource://gre/modules/XPCOMUtils.jsm") { + return "fake_XPCOMUtils.js"; } else - return ""; + throw new Error("Don't know how to map " + uri); } gJsmReg = new JsModuleRegistry(window, mapWeaveResourceUri); gJsmReg.fetch( "resource://weave/util.js", function(jsm) { - console.log(jsm); + gJsmReg.import(jsm.url, {}); + console.log("Import successful."); }); });