diff --git a/demo/r.js/build.js b/demo/r.js/build.js new file mode 100644 index 00000000..028d2234 --- /dev/null +++ b/demo/r.js/build.js @@ -0,0 +1,20 @@ +({ + optimize: "none", + preserveLicenseComments: false, + name: "node_modules/almond/almond", + baseUrl: "../../", + paths: { + ace : "lib/ace", + demo: "demo/kitchen-sink" + }, + packages: [ + ], + include: [ + "ace/ace" + ], + exclude: [ + ], + out: "./packed.js", + useStrict: true, + wrap: false +}) \ No newline at end of file diff --git a/demo/r.js/editor.html b/demo/r.js/editor.html new file mode 100644 index 00000000..9f7a47bf --- /dev/null +++ b/demo/r.js/editor.html @@ -0,0 +1,36 @@ + + + + + Editor + + + +
+ + + +
+
+        
+ demo showing Ace usage with r.js: + + install r.js and almond + and run `r.js -o demo/r.js/build.js` + + note that you also need ace/build/src to lazy load modes and themes + require("ace/config").set("basePath", "../../build/src"); + require("ace/config").set("packaged", true); +
+
+ + + + + diff --git a/lib/ace/requirejs/text.js b/lib/ace/requirejs/text.js index cba62eef..8283c82f 100644 --- a/lib/ace/requirejs/text.js +++ b/lib/ace/requirejs/text.js @@ -35,17 +35,18 @@ (function() { var globalRequire = typeof require != "undefined" && require; - +if (typeof define !== "function") // running in webpack + return module.exports = function(source) { return source; }; + define(function (require, exports, module) { "use strict"; - - exports.load = function (name, req, onLoad, config) { - //Using special require.nodeRequire, something added by r.js. - if (globalRequire && globalRequire.nodeRequire) - onLoad(globalRequire.nodeRequire('fs').readFileSync(req.toUrl(name), 'utf8')); - else + if (globalRequire && globalRequire.nodeRequire) { + module.exports = globalRequire.nodeRequire(require.toUrl("./text_build")); + } else { + exports.load = function(name, req, onLoad, config) { require("../lib/net").get(req.toUrl(name), onLoad); - }; + }; + } }); })(); diff --git a/lib/ace/requirejs/text_build.js b/lib/ace/requirejs/text_build.js new file mode 100644 index 00000000..eb60ead0 --- /dev/null +++ b/lib/ace/requirejs/text_build.js @@ -0,0 +1,60 @@ +/* ***** 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 ***** */ + +/* + * used by r.js during build + */ + +"use strict"; +exports.buildMap = Object.create(null); +exports.load = function(name, req, onLoad, config) { + var buildMap = exports.buildMap; + buildMap[name] = require('fs').readFileSync(req.toUrl(name), 'utf8'); + onLoad(buildMap[name]); +}; +exports.write = function(pluginName, moduleName, write, config) { + if (exports.buildMap[moduleName]) { + var content = exports.jsEscape(exports.buildMap[moduleName]); + write.asModule(pluginName + "!" + moduleName, + "define(function () { return '" + + content + + "';});\n"); + } +}; +exports.jsEscape = function(content) { + return content.replace(/(['\\])/g, '\\$1') + .replace(/[\f]/g, "\\f") + .replace(/[\b]/g, "\\b") + .replace(/[\n]/g, "\\n") + .replace(/[\t]/g, "\\t") + .replace(/[\r]/g, "\\r") + .replace(/[\u2028]/g, "\\u2028") + .replace(/[\u2029]/g, "\\u2029"); +};