more support for relative module ids
This commit is contained in:
parent
c043d14b8b
commit
0b69b42ade
4 changed files with 60 additions and 44 deletions
|
|
@ -7,8 +7,29 @@ var window = {
|
|||
console: console
|
||||
};
|
||||
|
||||
var require = function(id) {
|
||||
console.log("require " + id)
|
||||
var normalizeModule = function(parentId, moduleName) {
|
||||
// normalize plugin requires
|
||||
if (moduleName.indexOf("!") !== -1) {
|
||||
var chunks = moduleName.split("!");
|
||||
return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);
|
||||
}
|
||||
// normalize relative requires
|
||||
if (moduleName.charAt(0) == ".") {
|
||||
var base = parentId.split("/").slice(0, -1).join("/");
|
||||
var moduleName = base + "/" + moduleName;
|
||||
|
||||
while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
|
||||
var previous = moduleName;
|
||||
var moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
|
||||
}
|
||||
}
|
||||
|
||||
return moduleName;
|
||||
};
|
||||
|
||||
var require = function(parentId, id) {
|
||||
var id = normalizeModule(parentId, id);
|
||||
|
||||
var module = require.modules[id];
|
||||
if (module) {
|
||||
if (!module.initialized) {
|
||||
|
|
@ -23,9 +44,8 @@ var require = function(id) {
|
|||
path = chunks.join("/") + ".js";
|
||||
|
||||
require.id = id;
|
||||
// console.log("require " + path + " " + id)
|
||||
importScripts(path);
|
||||
return require(id);
|
||||
return require(parentId, id);
|
||||
};
|
||||
|
||||
require.modules = {};
|
||||
|
|
@ -38,7 +58,7 @@ var define = function(id, deps, factory) {
|
|||
factory = id;
|
||||
id = require.id;
|
||||
}
|
||||
|
||||
|
||||
if (id.indexOf("text!") === 0)
|
||||
return;
|
||||
|
||||
|
|
@ -47,7 +67,7 @@ var define = function(id, deps, factory) {
|
|||
var module = {
|
||||
exports: {}
|
||||
};
|
||||
var returnExports = factory(require, module.exports, module);
|
||||
var returnExports = factory(require.bind(null, id), module.exports, module);
|
||||
if (returnExports)
|
||||
module.exports = returnExports;
|
||||
return module;
|
||||
|
|
@ -61,8 +81,8 @@ function initBaseUrls(topLevelNamespaces) {
|
|||
|
||||
function initSender() {
|
||||
|
||||
var EventEmitter = require("ace/lib/event_emitter").EventEmitter;
|
||||
var oop = require("ace/lib/oop");
|
||||
var EventEmitter = require(null, "ace/lib/event_emitter").EventEmitter;
|
||||
var oop = require(null, "ace/lib/oop");
|
||||
|
||||
var Sender = function() {};
|
||||
|
||||
|
|
@ -101,9 +121,9 @@ onmessage = function(e) {
|
|||
}
|
||||
else if (msg.init) {
|
||||
initBaseUrls(msg.tlns);
|
||||
require("ace/lib/fixoldbrowsers");
|
||||
require(null, "ace/lib/fixoldbrowsers");
|
||||
sender = initSender();
|
||||
var clazz = require(msg.module)[msg.classname];
|
||||
var clazz = require(null, msg.module)[msg.classname];
|
||||
main = new clazz(sender);
|
||||
}
|
||||
else if (msg.event && sender) {
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ var WorkerClient = function(topLevelNamespaces, packagedJs, module, classname) {
|
|||
|
||||
this.changeListener = this.changeListener.bind(this);
|
||||
|
||||
if (require.packaged) {
|
||||
if (window.require.packaged) {
|
||||
var base = this.$guessBasePath();
|
||||
var worker = this.$worker = new Worker(base + packagedJs);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue