diff --git a/lib/ace/config.js b/lib/ace/config.js index 0bdaf786..6b5b3765 100644 --- a/lib/ace/config.js +++ b/lib/ace/config.js @@ -71,6 +71,22 @@ exports.all = function() { return lang.copyObject(options); }; +exports.moduleUrl = function(name) { + var parts = name.split("/"); + if (parts[0] !== "ace") return; + + var component = parts[1]; + var base = parts[2]; + + if (component == "mode") { + return this.get("modePath") + "/mode-" + base + this.get("suffix"); + } else if (component === "theme") { + return this.get("themePath") + "/theme-" + base + this.get("suffix"); + } else if (component == "worker") { + return this.get("workerPath") + "/" + base + this.get("suffix"); + } +}; + exports.init = function() { options.packaged = require.packaged || module.packaged || (global.define && define.packaged); diff --git a/lib/ace/edit_session.js b/lib/ace/edit_session.js index b7b0dead..1915991f 100644 --- a/lib/ace/edit_session.js +++ b/lib/ace/edit_session.js @@ -835,7 +835,7 @@ var EditSession = function(text, mode) { if (!this.$mode) this.$setModePlaceholder(); - fetch(function() { + fetch(mode, function() { require([mode], done); }); @@ -852,13 +852,11 @@ var EditSession = function(text, mode) { callback(_self.$modes[mode]); } - function fetch(callback) { + function fetch(name, callback) { if (!config.get("packaged")) return callback(); - var base = mode.split("/").pop(); - var filename = config.get("modePath") + "/mode-" + base + ".js"; - net.loadScript(filename, callback); + net.loadScript(config.moduleUrl(name), callback); } }; diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index eb6a17c7..632b944f 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -1288,9 +1288,7 @@ var VirtualRenderer = function(container, theme) { if (!config.get("packaged")) return callback(); - var base = name.split("/").pop(); - var filename = config.get("themePath") + "/theme-" + base + config.get("suffix"); - net.loadScript(filename, callback); + net.loadScript(config.moduleUrl(name), callback); }; /** diff --git a/lib/ace/worker/worker_client.js b/lib/ace/worker/worker_client.js index 609e981c..7b257d36 100644 --- a/lib/ace/worker/worker_client.js +++ b/lib/ace/worker/worker_client.js @@ -47,7 +47,7 @@ var WorkerClient = function(topLevelNamespaces, packagedJs, mod, classname) { this.changeListener = this.changeListener.bind(this); if (config.get("packaged")) { - this.$worker = new Worker(config.get("workerPath") + "/" + packagedJs); + this.$worker = new Worker(config.moduleUrl(mod)); } else { var workerUrl;