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

View file

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

View file

@ -7,8 +7,29 @@ var window = {
console: console console: console
}; };
var require = function(id) { var normalizeModule = function(parentId, moduleName) {
console.log("require " + id) // 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]; var module = require.modules[id];
if (module) { if (module) {
if (!module.initialized) { if (!module.initialized) {
@ -23,9 +44,8 @@ var require = function(id) {
path = chunks.join("/") + ".js"; path = chunks.join("/") + ".js";
require.id = id; require.id = id;
// console.log("require " + path + " " + id)
importScripts(path); importScripts(path);
return require(id); return require(parentId, id);
}; };
require.modules = {}; require.modules = {};
@ -47,7 +67,7 @@ var define = function(id, deps, factory) {
var module = { var module = {
exports: {} exports: {}
}; };
var returnExports = factory(require, module.exports, module); var returnExports = factory(require.bind(null, id), module.exports, module);
if (returnExports) if (returnExports)
module.exports = returnExports; module.exports = returnExports;
return module; return module;
@ -61,8 +81,8 @@ function initBaseUrls(topLevelNamespaces) {
function initSender() { function initSender() {
var EventEmitter = require("ace/lib/event_emitter").EventEmitter; var EventEmitter = require(null, "ace/lib/event_emitter").EventEmitter;
var oop = require("ace/lib/oop"); var oop = require(null, "ace/lib/oop");
var Sender = function() {}; var Sender = function() {};
@ -101,9 +121,9 @@ onmessage = function(e) {
} }
else if (msg.init) { else if (msg.init) {
initBaseUrls(msg.tlns); initBaseUrls(msg.tlns);
require("ace/lib/fixoldbrowsers"); require(null, "ace/lib/fixoldbrowsers");
sender = initSender(); sender = initSender();
var clazz = require(msg.module)[msg.classname]; var clazz = require(null, msg.module)[msg.classname];
main = new clazz(sender); main = new clazz(sender);
} }
else if (msg.event && 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); this.changeListener = this.changeListener.bind(this);
if (require.packaged) { if (window.require.packaged) {
var base = this.$guessBasePath(); var base = this.$guessBasePath();
var worker = this.$worker = new Worker(base + packagedJs); var worker = this.$worker = new Worker(base + packagedJs);
} }