From 9472d497a326632fadd00afe34a52cbfc8cb44fa Mon Sep 17 00:00:00 2001 From: nightwing Date: Sat, 27 Oct 2012 17:34:40 +0400 Subject: [PATCH] add basePath config --- lib/ace/config.js | 17 ++++++---- lib/ace/config_test.js | 71 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 6 deletions(-) create mode 100644 lib/ace/config_test.js diff --git a/lib/ace/config.js b/lib/ace/config.js index cf8151cb..5a1b0e47 100644 --- a/lib/ace/config.js +++ b/lib/ace/config.js @@ -39,9 +39,10 @@ var global = (function() { var options = { packaged: false, - workerPath: "", - modePath: "", - themePath: "", + workerPath: null, + modePath: null, + themePath: null, + basePath: "", suffix: ".js", $moduleUrls: {} }; @@ -74,7 +75,12 @@ exports.moduleUrl = function(name, component) { if (!base && parts.length > 1) base = parts[parts.length - 2]; - return this.get(component + "Path") + "/" + component + "-" + base + this.get("suffix"); + var path = options[component + "Path"]; + if (path == null) + path = options.basePath; + if (path && path.slice(-1) != "/") + path += "/"; + return path + component + "-" + base + this.get("suffix"); }; exports.setModuleUrl = function(name, subst) { @@ -95,9 +101,8 @@ exports.init = function() { var script = scripts[i]; var src = script.src || script.getAttribute("src"); - if (!src) { + if (!src) continue; - } var attributes = script.attributes; for (var j=0, l=attributes.length; j < l; j++) { diff --git a/lib/ace/config_test.js b/lib/ace/config_test.js new file mode 100644 index 00000000..efb3f2dd --- /dev/null +++ b/lib/ace/config_test.js @@ -0,0 +1,71 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Distributed under the BSD license: + * + * Copyright (c) 2010, Ajax.org B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Ajax.org B.V. nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ***** END LICENSE BLOCK ***** */ + +if (typeof process !== "undefined") { + require("amd-loader"); +} + +define(function(require, exports, module) { +"use strict"; + +var config = require("ace/config"); +var assert = require("./test/assertions"); + +module.exports = { + + "test path resolution" : function() { + config.set("packaged", "true"); + var url = config.moduleUrl("kr_theme", "theme"); + assert.equal(url, "theme-kr.js"); + + config.set("basePath", "a/b"); + url = config.moduleUrl("m/theme", "theme"); + assert.equal(url, "a/b/theme-m.js"); + + url = config.moduleUrl("m/theme", "ext"); + assert.equal(url, "a/b/ext-theme.js"); + + config.set("workerPath", "c/"); + url = config.moduleUrl("foo/1", "worker"); + assert.equal(url, "c/worker-1.js"); + + config.setModuleUrl("foo/1", "a/b1.js"); + url = config.moduleUrl("foo/1", "theme"); + assert.equal(url, "a/b1.js"); + + assert.equal(); + } +}; + +}); + +if (typeof module !== "undefined" && module === require.main) { + require("asyncjs").test.testcase(module.exports).exec() +}