more support for relative module ids

This commit is contained in:
Fabian Jakobs 2011-11-09 16:48:35 +01:00
commit 0b69b42ade
4 changed files with 60 additions and 44 deletions

View file

@ -86,8 +86,6 @@ var copy = require('dryice').copy;
var aceHome = __dirname;
console.log('# ace ---------');
var aceProject = {
roots: [
aceHome + '/lib',
@ -165,6 +163,8 @@ copy({
});
if (target == "normal") {
console.log('# ace ---------');
// Create the compressed and uncompressed output files
copy({
source: ace,

View file

@ -134,7 +134,7 @@ modes.forEach(function(m) {
modesByName[m.name] = m;
});
var loreIpsum = require("ace/requirejs/text!demo/kitchen-sink/docs/plaintext.txt");
var loreIpsum = require("ace/requirejs/text!./docs/plaintext.txt");
for (var i = 0; i < 5; i++) {
loreIpsum += loreIpsum;
}
@ -142,108 +142,104 @@ for (var i = 0; i < 5; i++) {
var docs = [
new Doc(
"javascript", "JavaScript",
require("ace/requirejs/text!demo/kitchen-sink/docs/javascript.js")
require("ace/requirejs/text!./docs/javascript.js")
),
new WrappedDoc("text", "Plain Text", loreIpsum),
new Doc(
"coffee", "Coffeescript",
require("ace/requirejs/text!demo/kitchen-sink/docs/coffeescript.coffee")
require("ace/requirejs/text!./docs/coffeescript.coffee")
),
new Doc(
"json", "JSON",
require("ace/requirejs/text!demo/kitchen-sink/docs/json.json")
require("ace/requirejs/text!./docs/json.json")
),
new Doc(
"css", "CSS",
require("ace/requirejs/text!demo/kitchen-sink/docs/css.css")
require("ace/requirejs/text!./docs/css.css")
),
new Doc(
"scss", "SCSS",
require("ace/requirejs/text!demo/kitchen-sink/docs/scss.scss")
require("ace/requirejs/text!./docs/scss.scss")
),
new Doc(
"html", "HTML",
require("ace/requirejs/text!demo/kitchen-sink/docs/html.html")
require("ace/requirejs/text!./docs/html.html")
),
new Doc(
"xml", "XML",
require("ace/requirejs/text!demo/kitchen-sink/docs/xml.xml")
require("ace/requirejs/text!./docs/xml.xml")
),
new Doc(
"svg", "SVG",
require("ace/requirejs/text!demo/kitchen-sink/docs/svg.svg")
require("ace/requirejs/text!./docs/svg.svg")
),
new Doc(
"php", "PHP",
require("ace/requirejs/text!demo/kitchen-sink/docs/php.php")
require("ace/requirejs/text!./docs/php.php")
),
new Doc(
"coldfusion", "ColdFusion",
require("ace/requirejs/text!demo/kitchen-sink/docs/coldfusion.cfm")
require("ace/requirejs/text!./docs/coldfusion.cfm")
),
new Doc(
"python", "Python",
require("ace/requirejs/text!demo/kitchen-sink/docs/python.py")
require("ace/requirejs/text!./docs/python.py")
),
new Doc(
"ruby", "Ruby",
require("ace/requirejs/text!demo/kitchen-sink/docs/ruby.rb")
require("ace/requirejs/text!./docs/ruby.rb")
),
new Doc(
"perl", "Perl",
require("ace/requirejs/text!demo/kitchen-sink/docs/perl.pl")
require("ace/requirejs/text!./docs/perl.pl")
),
new Doc(
"ocaml", "OCaml",
require("ace/requirejs/text!demo/kitchen-sink/docs/ocaml.ml")
require("ace/requirejs/text!./docs/ocaml.ml")
),
new Doc(
"lua", "Lua",
require("ace/requirejs/text!demo/kitchen-sink/docs/lua.lua")
require("ace/requirejs/text!./docs/lua.lua")
),
new Doc(
"java", "Java",
require("ace/requirejs/text!demo/kitchen-sink/docs/java.java")
require("ace/requirejs/text!./docs/java.java")
),
new Doc(
"clojure", "Clojure",
require("ace/requirejs/text!demo/kitchen-sink/docs/clojure.clj")
require("ace/requirejs/text!./docs/clojure.clj")
),
new Doc(
"groovy", "Groovy",
require("ace/requirejs/text!demo/kitchen-sink/docs/groovy.groovy")
require("ace/requirejs/text!./docs/groovy.groovy")
),
new Doc(
"scala", "Scala",
require("ace/requirejs/text!demo/kitchen-sink/docs/scala.scala")
require("ace/requirejs/text!./docs/scala.scala")
),
new Doc(
"csharp", "C#",
require("ace/requirejs/text!demo/kitchen-sink/docs/csharp.cs")
require("ace/requirejs/text!./docs/csharp.cs")
),
new Doc(
"powershell", "Powershell",
require("ace/requirejs/text!demo/kitchen-sink/docs/powershell.ps1")
require("ace/requirejs/text!./docs/powershell.ps1")
),
new Doc(
"c_cpp", "C/C++",
require("ace/requirejs/text!demo/kitchen-sink/docs/cpp.cpp")
),
new Doc(
"markdown", "Markdown",
require("ace/requirejs/text!demo/kitchen-sink/docs/markdown.md")
require("ace/requirejs/text!./docs/cpp.cpp")
),
new WrappedDoc(
"markdown", "Markdown",
require("ace/requirejs/text!demo/kitchen-sink/docs/markdown.md")
require("ace/requirejs/text!./docs/markdown.md")
),
new WrappedDoc(
"textile", "Textile",
require("ace/requirejs/text!demo/kitchen-sink/docs/textile.textile")
require("ace/requirejs/text!./docs/textile.textile")
),
new WrappedDoc(
"latex", "LaTeX",
require("ace/requirejs/text!demo/kitchen-sink/docs/latex.tex")
require("ace/requirejs/text!./docs/latex.tex")
)
];
@ -349,7 +345,7 @@ bindDropdown("mode", function(value) {
});
bindDropdown("theme", function(value) {
if (require.packaged) {
if (window.require.packaged) {
loadTheme(value, function() {
env.editor.setTheme(value);
});

View file

@ -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) {

View file

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