diff --git a/Makefile.dryice.js b/Makefile.dryice.js index 4e2c2213..d0b7afa9 100755 --- a/Makefile.dryice.js +++ b/Makefile.dryice.js @@ -108,10 +108,7 @@ var project = copy.createCommonJsProject(aceProject); function filterTextPlugin(text) { - return text.replace(/(['"])text\!/g, "$1text/"); - /*return text - .replace(/define\(\s*['"]text\!\)/g, "text/") - .replace(/require\(\s*['"]text\!\)/g, "text/")*/ + return text.replace(/(['"])ace\/requirejs\/text\!/g, "$1text/"); } var ace = copy.createDataObject(); @@ -363,11 +360,12 @@ function demo() { copy({ source: demo, - filter: copy.filter.uglifyjs, + filter: [ copy.filter.uglifyjs, filterTextPlugin ], dest: 'build/demo/kitchen-sink.js' }); copy({ source: demo, + filter: [ filterTextPlugin ], dest: 'build/demo/kitchen-sink-uncompressed.js' }); } \ No newline at end of file diff --git a/demo/demo.js b/demo/demo.js index ac17f54f..fec9ec67 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -43,6 +43,7 @@ define(function(require, exports, module) { exports.launch = function(env) { var canon = require("pilot/canon"); var event = require("pilot/event"); + var net = require("ace/lib/net"); var Range = require("ace/range").Range; var Editor = require("ace/editor").Editor; var Renderer = require("ace/virtual_renderer").VirtualRenderer; @@ -95,7 +96,7 @@ exports.launch = function(env) { var docs = {}; // Make the lorem ipsum text a little bit longer. - var loreIpsum = require("text!demo/docs/plaintext.txt"); + var loreIpsum = require("ace/requirejs/text!demo/docs/plaintext.txt"); for (var i = 0; i < 5; i++) { loreIpsum += loreIpsum; } @@ -105,80 +106,80 @@ exports.launch = function(env) { docs.plain.setMode(new TextMode()); docs.plain.setUndoManager(new UndoManager()); - docs.js = new EditSession(require("text!demo/docs/javascript.js")); + docs.js = new EditSession(require("ace/requirejs/text!demo/docs/javascript.js")); docs.js.setMode(new JavaScriptMode()); docs.js.setUndoManager(new UndoManager()); - docs.css = new EditSession(require("text!demo/docs/css.css")); + docs.css = new EditSession(require("ace/requirejs/text!demo/docs/css.css")); docs.css.setMode(new CssMode()); docs.css.setUndoManager(new UndoManager()); - docs.scss = new EditSession(require("text!demo/docs/scss.scss")); + docs.scss = new EditSession(require("ace/requirejs/text!demo/docs/scss.scss")); docs.scss.setMode(new ScssMode()); docs.scss.setUndoManager(new UndoManager()); - docs.html = new EditSession(require("text!demo/docs/html.html")); + docs.html = new EditSession(require("ace/requirejs/text!demo/docs/html.html")); docs.html.setMode(new HtmlMode()); docs.html.setUndoManager(new UndoManager()); - docs.python = new EditSession(require("text!demo/docs/python.py")); + docs.python = new EditSession(require("ace/requirejs/text!demo/docs/python.py")); docs.python.setMode(new PythonMode()); docs.python.setUndoManager(new UndoManager()); - docs.php = new EditSession(require("text!demo/docs/php.php")); + docs.php = new EditSession(require("ace/requirejs/text!demo/docs/php.php")); docs.php.setMode(new PhpMode()); docs.php.setUndoManager(new UndoManager()); - docs.java = new EditSession(require("text!demo/docs/java.java")); + docs.java = new EditSession(require("ace/requirejs/text!demo/docs/java.java")); docs.java.setMode(new JavaMode()); docs.java.setUndoManager(new UndoManager()); docs.java.addFold("...", new Range(8, 44, 13, 4)); - docs.ruby = new EditSession(require("text!demo/docs/ruby.rb")); + docs.ruby = new EditSession(require("ace/requirejs/text!demo/docs/ruby.rb")); docs.ruby.setMode(new RubyMode()); docs.ruby.setUndoManager(new UndoManager()); - docs.csharp = new EditSession(require("text!demo/docs/csharp.cs")); + docs.csharp = new EditSession(require("ace/requirejs/text!demo/docs/csharp.cs")); docs.csharp.setMode(new CSharpMode()); docs.csharp.setUndoManager(new UndoManager()); - docs.c_cpp = new EditSession(require("text!demo/docs/cpp.cpp")); + docs.c_cpp = new EditSession(require("ace/requirejs/text!demo/docs/cpp.cpp")); docs.c_cpp.setMode(new CCPPMode()); docs.c_cpp.setUndoManager(new UndoManager()); - docs.coffee = new EditSession(require("text!demo/docs/coffeescript.coffee")); + docs.coffee = new EditSession(require("ace/requirejs/text!demo/docs/coffeescript.coffee")); docs.coffee.setMode(new CoffeeMode()); docs.coffee.setUndoManager(new UndoManager()); - docs.json = new EditSession(require("text!demo/docs/json.json")); + docs.json = new EditSession(require("ace/requirejs/text!demo/docs/json.json")); docs.json.setMode(new JsonMode()); docs.json.setUndoManager(new UndoManager()); - docs.perl = new EditSession(require("text!demo/docs/perl.pl")); + docs.perl = new EditSession(require("ace/requirejs/text!demo/docs/perl.pl")); docs.perl.setMode(new PerlMode()); docs.perl.setUndoManager(new UndoManager()); - docs.clojure = new EditSession(require("text!demo/docs/clojure.clj")); + docs.clojure = new EditSession(require("ace/requirejs/text!demo/docs/clojure.clj")); docs.clojure.setMode(new ClojureMode()); docs.clojure.setUndoManager(new UndoManager()); - docs.ocaml = new EditSession(require("text!demo/docs/ocaml.ml")); + docs.ocaml = new EditSession(require("ace/requirejs/text!demo/docs/ocaml.ml")); docs.ocaml.setMode(new OcamlMode()); docs.ocaml.setUndoManager(new UndoManager()); - docs.svg = new EditSession(require("text!demo/docs/svg.svg")); + docs.svg = new EditSession(require("ace/requirejs/text!demo/docs/svg.svg")); docs.svg.setMode(new SvgMode()); docs.svg.setUndoManager(new UndoManager()); - docs.textile = new EditSession(require("text!demo/docs/textile.textile")); + docs.textile = new EditSession(require("ace/requirejs/text!demo/docs/textile.textile")); docs.textile.setMode(new TextileMode()); docs.textile.setUndoManager(new UndoManager()); - docs.groovy = new EditSession(require("text!demo/docs/groovy.groovy")); + docs.groovy = new EditSession(require("ace/requirejs/text!demo/docs/groovy.groovy")); docs.groovy.setMode(new GroovyMode()); docs.groovy.setUndoManager(new UndoManager()); - docs.scala = new EditSession(require("text!demo/docs/scala.scala")); + docs.scala = new EditSession(require("ace/requirejs/text!demo/docs/scala.scala")); docs.scala.setMode(new ScalaMode()); docs.scala.setUndoManager(new UndoManager()); @@ -685,17 +686,7 @@ function loadTheme(name, callback) { themes[name] = 1; var base = name.split("/").pop(); var fileName = "src/theme-" + base + ".js"; - loadScriptFile(fileName, callback) -} - -function loadScriptFile(path, callback) { - var head = document.getElementsByTagName('head')[0]; - var s = document.createElement('script'); - - s.src = path; - head.appendChild(s); - - s.onload = callback; + net.loadScript(fileName, callback) } }); diff --git a/demo/text.js b/demo/text.js deleted file mode 100644 index fdb8a089..00000000 --- a/demo/text.js +++ /dev/null @@ -1,262 +0,0 @@ -/** - * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved. - * Available via the MIT or new BSD license. - * see: http://github.com/jrburke/requirejs for details - */ -/*jslint regexp: false, nomen: false, plusplus: false, strict: false */ -/*global require: false, XMLHttpRequest: false, ActiveXObject: false, - define: false, window: false, process: false, Packages: false, - java: false, location: false */ - -(function () { - var progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], - xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, - bodyRegExp = /
]*>\s*([\s\S]+)\s*<\/body>/im, - hasLocation = typeof location !== 'undefined' && location.href, - buildMap = []; - - define(function () { - var text, get, fs; - - if (typeof window !== "undefined" && window.navigator && window.document) { - get = function (url, callback) { - var xhr = text.createXhr(); - xhr.open('GET', url, true); - xhr.onreadystatechange = function (evt) { - //Do not explicitly handle errors, those should be - //visible via console output in the browser. - if (xhr.readyState === 4) { - callback(xhr.responseText); - } - }; - xhr.send(null); - }; - } else if (typeof process !== "undefined" && - process.versions && - !!process.versions.node) { - //Using special require.nodeRequire, something added by r.js. - fs = require.nodeRequire('fs'); - - get = function (url, callback) { - callback(fs.readFileSync(url, 'utf8')); - }; - } else if (typeof Packages !== 'undefined') { - //Why Java, why is this so awkward? - get = function (url, callback) { - var encoding = "utf-8", - file = new java.io.File(url), - lineSeparator = java.lang.System.getProperty("line.separator"), - input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)), - stringBuffer, line, - content = ''; - try { - stringBuffer = new java.lang.StringBuffer(); - line = input.readLine(); - - // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324 - // http://www.unicode.org/faq/utf_bom.html - - // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK: - // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 - if (line && line.length() && line.charAt(0) === 0xfeff) { - // Eat the BOM, since we've already found the encoding on this file, - // and we plan to concatenating this buffer with others; the BOM should - // only appear at the top of a file. - line = line.substring(1); - } - - stringBuffer.append(line); - - while ((line = input.readLine()) !== null) { - stringBuffer.append(lineSeparator); - stringBuffer.append(line); - } - //Make sure we return a JavaScript string and not a Java string. - content = String(stringBuffer.toString()); //String - } finally { - input.close(); - } - callback(content); - }; - } - - text = { - version: '0.25.0', - - strip: function (content) { - //Strips declarations so that external SVG and XML - //documents can be added to a document without worry. Also, if the string - //is an HTML document, only the part inside the body tag is returned. - if (content) { - content = content.replace(xmlRegExp, ""); - var matches = content.match(bodyRegExp); - if (matches) { - content = matches[1]; - } - } else { - content = ""; - } - return content; - }, - - 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"); - }, - - createXhr: function () { - //Would love to dump the ActiveX crap in here. Need IE 6 to die first. - var xhr, i, progId; - if (typeof XMLHttpRequest !== "undefined") { - return new XMLHttpRequest(); - } else { - for (i = 0; i < 3; i++) { - progId = progIds[i]; - try { - xhr = new ActiveXObject(progId); - } catch (e) {} - - if (xhr) { - progIds = [progId]; // so faster next time - break; - } - } - } - - if (!xhr) { - throw new Error("createXhr(): XMLHttpRequest not available"); - } - - return xhr; - }, - - get: get, - - /** - * Parses a resource name into its component parts. Resource names - * look like: module/name.ext!strip, where the !strip part is - * optional. - * @param {String} name the resource name - * @returns {Object} with properties "moduleName", "ext" and "strip" - * where strip is a boolean. - */ - parseName: function (name) { - var strip = false, index = name.indexOf("."), - modName = name.substring(0, index), - ext = name.substring(index + 1, name.length); - - index = ext.indexOf("!"); - if (index !== -1) { - //Pull off the strip arg. - strip = ext.substring(index + 1, ext.length); - strip = strip === "strip"; - ext = ext.substring(0, index); - } - - return { - moduleName: modName, - ext: ext, - strip: strip - }; - }, - - xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, - - /** - * Is an URL on another domain. Only works for browser use, returns - * false in non-browser environments. Only used to know if an - * optimized .js version of a text resource should be loaded - * instead. - * @param {String} url - * @returns Boolean - */ - canUseXhr: function (url, protocol, hostname, port) { - var match = text.xdRegExp.exec(url), - uProtocol, uHostName, uPort; - if (!match) { - return true; - } - uProtocol = match[2]; - uHostName = match[3]; - - uHostName = uHostName.split(':'); - uPort = uHostName[1]; - uHostName = uHostName[0]; - - return (!uProtocol || uProtocol === protocol) && - (!uHostName || uHostName === hostname) && - ((!uPort && !uHostName) || uPort === port); - }, - - finishLoad: function (name, strip, content, onLoad, config) { - content = strip ? text.strip(content) : content; - if (config.isBuild && config.inlineText) { - buildMap[name] = content; - } - onLoad(content); - }, - - load: function (name, req, onLoad, config) { - //Name has format: some.module.filext!strip - //The strip part is optional. - //if strip is present, then that means only get the string contents - //inside a body tag in an HTML string. For XML/SVG content it means - //removing the declarations so the content can be inserted - //into the current doc without problems. - - var parsed = text.parseName(name), - nonStripName = parsed.moduleName + '.' + parsed.ext, - url = req.toUrl(nonStripName); - - //Load the text. Use XHR if possible and in a browser. - if (!hasLocation || text.canUseXhr(url)) { - text.get(url, function (content) { - text.finishLoad(name, parsed.strip, content, onLoad, config); - }); - } else { - //Need to fetch the resource across domains. Assume - //the resource has been optimized into a JS module. Fetch - //by the module name + extension, but do not include the - //!strip part to avoid file system issues. - req([nonStripName], function (content) { - text.finishLoad(parsed.moduleName + '.' + parsed.ext, - parsed.strip, content, onLoad, config); - }); - } - }, - - write: function (pluginName, moduleName, write, config) { - if (moduleName in buildMap) { - var content = text.jsEscape(buildMap[moduleName]); - write("define('" + pluginName + "!" + moduleName + - "', function () { return '" + content + "';});\n"); - } - }, - - writeFile: function (pluginName, moduleName, req, write, config) { - var parsed = text.parseName(moduleName), - nonStripName = parsed.moduleName + '.' + parsed.ext, - //Use a '.js' file name so that it indicates it is a - //script that can be loaded across domains. - fileName = req.toUrl(parsed.moduleName + '.' + - parsed.ext) + '.js'; - - //Leverage own load() method to load plugin value, but only - //write out values that do not have the strip argument, - //to avoid any potential issues with ! in file names. - text.load(nonStripName, req, function (value) { - //Use own write() method to construct full module value. - text.write(pluginName, nonStripName, function (contents) { - write(fileName, contents); - }, config); - }, config); - } - }; - - return text; - }); -}()); diff --git a/lib/ace/lib/net.js b/lib/ace/lib/net.js new file mode 100644 index 00000000..175f9d32 --- /dev/null +++ b/lib/ace/lib/net.js @@ -0,0 +1,62 @@ + +/** + * based on code from: + * + * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved. + * Available via the MIT or new BSD license. + * see: http://github.com/jrburke/requirejs for details + */ +define(function(require, exports, module) { + +exports.get = function (url, callback) { + var xhr = exports.createXhr(); + xhr.open('GET', url, true); + xhr.onreadystatechange = function (evt) { + //Do not explicitly handle errors, those should be + //visible via console output in the browser. + if (xhr.readyState === 4) { + callback(xhr.responseText); + } + }; + xhr.send(null); +}; + +var progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; + +exports.createXhr = function () { + //Would love to dump the ActiveX crap in here. Need IE 6 to die first. + var xhr, i, progId; + if (typeof XMLHttpRequest !== "undefined") { + return new XMLHttpRequest(); + } else { + for (i = 0; i < 3; i++) { + progId = progIds[i]; + try { + xhr = new ActiveXObject(progId); + } catch (e) {} + + if (xhr) { + progIds = [progId]; // so faster next time + break; + } + } + } + + if (!xhr) { + throw new Error("createXhr(): XMLHttpRequest not available"); + } + + return xhr; +}; + +exports.loadScript = function(path, callback) { + var head = document.getElementsByTagName('head')[0]; + var s = document.createElement('script'); + + s.src = path; + head.appendChild(s); + + s.onload = callback; +}; + +}); \ No newline at end of file diff --git a/lib/ace/requirejs/text.js b/lib/ace/requirejs/text.js new file mode 100644 index 00000000..f3b1ede0 --- /dev/null +++ b/lib/ace/requirejs/text.js @@ -0,0 +1,47 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Ajax.org Code Editor (ACE). + * + * The Initial Developer of the Original Code is + * Ajax.org B.V. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Fabian Jakobs