diff --git a/Makefile b/Makefile index dcedcb78..c3f94cde 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,11 @@ build: git rev-parse HEAD > .git-ref mkdir -p build/src - mkdir -p build/demo + mkdir -p build/demo/kitchen-sink mkdir -p build/textarea/src - cp demo/styles.css build/demo/styles.css - cp demo/logo.png build/demo/logo.png + cp -r demo/kitchen-sink/styles.css build/demo/kitchen-sink/styles.css + cp demo/kitchen-sink/logo.png build/demo/kitchen-sink/logo.png ./Makefile.dryice.js normal ./Makefile.dryice.js bm diff --git a/Makefile.dryice.js b/Makefile.dryice.js index a2877f0c..a705fcf4 100755 --- a/Makefile.dryice.js +++ b/Makefile.dryice.js @@ -95,7 +95,7 @@ var aceProject = [ ]; if (target == "normal") { - aceProject.push(aceHome + '/demo'); + //aceProject.push(aceHome + '/demo'); copy({ source: "build_support/editor.html", @@ -349,7 +349,7 @@ function demo() { source: [ copy.source.commonjs({ project: project, - require: [ "pilot/index", "ace/defaults", "demo/boot" ] + require: [ "pilot/index", "ace/defaults", "demo/kitchen-sink/boot" ] }) ], filter: [ copy.filter.moduleDefines ], @@ -358,8 +358,7 @@ function demo() { copy({ source: { root: project, - include: /demo\/docs\/.*$/, - exclude: /tests?\// + include: /demo\/kitchen-sink\/docs\/.*$/, }, filter: [ copy.filter.addDefines ], dest: demo @@ -367,8 +366,7 @@ function demo() { copy({ source: { root: project, - include: /.*\.css$/, - exclude: /tests?\// + include: /ace\/.*\.css$/, }, filter: [ copy.filter.addDefines ], dest: demo @@ -377,11 +375,11 @@ function demo() { copy({ source: demo, filter: [ filterTextPlugin ], - dest: 'build/demo/kitchen-sink-uncompressed.js' + dest: 'build/demo/kitchen-sink/kitchen-sink-uncompressed.js' }); copy({ source: demo, filter: [ copy.filter.uglifyjs, filterTextPlugin ], - dest: 'build/demo/kitchen-sink.js' + dest: 'build/demo/kitchen-sink/kitchen-sink.js' }); } diff --git a/demo/boot.js b/demo/kitchen-sink/boot.js similarity index 96% rename from demo/boot.js rename to demo/kitchen-sink/boot.js index 93d9badb..a91c37e7 100644 --- a/demo/boot.js +++ b/demo/kitchen-sink/boot.js @@ -40,7 +40,7 @@ define(function(require, exports, module) { require("pilot/fixoldbrowsers"); require("pilot/plugin_manager"); require("pilot/environment"); -require("demo/demo"); +require("demo/kitchen-sink/demo"); require("pilot/index"); require("ace/defaults"); @@ -50,7 +50,7 @@ var catalog = require("pilot/plugin_manager").catalog; catalog.registerPlugins(plugins).then(function() { var env = require("pilot/environment").create(); catalog.startupPlugins({ env: env }).then(function() { - require("demo/demo").launch(env); + require("demo/kitchen-sink/demo").launch(env); }); }); diff --git a/demo/demo.js b/demo/kitchen-sink/demo.js similarity index 90% rename from demo/demo.js rename to demo/kitchen-sink/demo.js index 4723dff0..ab059f20 100644 --- a/demo/demo.js +++ b/demo/kitchen-sink/demo.js @@ -125,7 +125,7 @@ exports.launch = function(env) { modesByName[m.name] = m; }); - var loreIpsum = require("ace/requirejs/text!demo/docs/plaintext.txt"); + var loreIpsum = require("ace/requirejs/text!demo/kitchen-sink/docs/plaintext.txt"); for (var i = 0; i < 5; i++) { loreIpsum += loreIpsum; } @@ -133,108 +133,108 @@ exports.launch = function(env) { var docs = [ new Doc( "javascript", "JavaScript", - require("ace/requirejs/text!demo/docs/javascript.js") + require("ace/requirejs/text!demo/kitchen-sink/docs/javascript.js") ), new WrappedDoc("text", "Plain Text", loreIpsum), new Doc( "coffee", "Coffeescript", - require("ace/requirejs/text!demo/docs/coffeescript.coffee") + require("ace/requirejs/text!demo/kitchen-sink/docs/coffeescript.coffee") ), new Doc( "json", "JSON", - require("ace/requirejs/text!demo/docs/json.json") + require("ace/requirejs/text!demo/kitchen-sink/docs/json.json") ), new Doc( "css", "CSS", - require("ace/requirejs/text!demo/docs/css.css") + require("ace/requirejs/text!demo/kitchen-sink/docs/css.css") ), new Doc( "scss", "SCSS", - require("ace/requirejs/text!demo/docs/scss.scss") + require("ace/requirejs/text!demo/kitchen-sink/docs/scss.scss") ), new Doc( "html", "HTML", - require("ace/requirejs/text!demo/docs/html.html") + require("ace/requirejs/text!demo/kitchen-sink/docs/html.html") ), new Doc( "xml", "XML", - require("ace/requirejs/text!demo/docs/xml.xml") + require("ace/requirejs/text!demo/kitchen-sink/docs/xml.xml") ), new Doc( "svg", "SVG", - require("ace/requirejs/text!demo/docs/svg.svg") + require("ace/requirejs/text!demo/kitchen-sink/docs/svg.svg") ), new Doc( "php", "PHP", - require("ace/requirejs/text!demo/docs/php.php") + require("ace/requirejs/text!demo/kitchen-sink/docs/php.php") ), new Doc( "coldfusion", "ColdFusion", - require("ace/requirejs/text!demo/docs/coldfusion.cfm") + require("ace/requirejs/text!demo/kitchen-sink/docs/coldfusion.cfm") ), new Doc( "python", "Python", - require("ace/requirejs/text!demo/docs/python.py") + require("ace/requirejs/text!demo/kitchen-sink/docs/python.py") ), new Doc( "ruby", "Ruby", - require("ace/requirejs/text!demo/docs/ruby.rb") + require("ace/requirejs/text!demo/kitchen-sink/docs/ruby.rb") ), new Doc( "perl", "Perl", - require("ace/requirejs/text!demo/docs/perl.pl") + require("ace/requirejs/text!demo/kitchen-sink/docs/perl.pl") ), new Doc( "ocaml", "OCaml", - require("ace/requirejs/text!demo/docs/ocaml.ml") + require("ace/requirejs/text!demo/kitchen-sink/docs/ocaml.ml") ), new Doc( "lua", "Lua", - require("ace/requirejs/text!demo/docs/lua.lua") + require("ace/requirejs/text!demo/kitchen-sink/docs/lua.lua") ), new Doc( "java", "Java", - require("ace/requirejs/text!demo/docs/java.java") + require("ace/requirejs/text!demo/kitchen-sink/docs/java.java") ), new Doc( "clojure", "Clojure", - require("ace/requirejs/text!demo/docs/clojure.clj") + require("ace/requirejs/text!demo/kitchen-sink/docs/clojure.clj") ), new Doc( "groovy", "Groovy", - require("ace/requirejs/text!demo/docs/groovy.groovy") + require("ace/requirejs/text!demo/kitchen-sink/docs/groovy.groovy") ), new Doc( "scala", "Scala", - require("ace/requirejs/text!demo/docs/scala.scala") + require("ace/requirejs/text!demo/kitchen-sink/docs/scala.scala") ), new Doc( "csharp", "C#", - require("ace/requirejs/text!demo/docs/csharp.cs") + require("ace/requirejs/text!demo/kitchen-sink/docs/csharp.cs") ), new Doc( "powershell", "Powershell", - require("ace/requirejs/text!demo/docs/powershell.ps1") + require("ace/requirejs/text!demo/kitchen-sink/docs/powershell.ps1") ), new Doc( "c_cpp", "C/C++", - require("ace/requirejs/text!demo/docs/cpp.cpp") + require("ace/requirejs/text!demo/kitchen-sink/docs/cpp.cpp") ), new Doc( "markdown", "Markdown", - require("ace/requirejs/text!demo/docs/markdown.md") + require("ace/requirejs/text!demo/kitchen-sink/docs/markdown.md") ), new WrappedDoc( "markdown", "Markdown", - require("ace/requirejs/text!demo/docs/markdown.md") + require("ace/requirejs/text!demo/kitchen-sink/docs/markdown.md") ), new WrappedDoc( "textile", "Textile", - require("ace/requirejs/text!demo/docs/textile.textile") + require("ace/requirejs/text!demo/kitchen-sink/docs/textile.textile") ), new WrappedDoc( "latex", "LaTeX", - require("ace/requirejs/text!demo/docs/latex.tex") + require("ace/requirejs/text!demo/kitchen-sink/docs/latex.tex") ) ]; diff --git a/demo/docs/clojure.clj b/demo/kitchen-sink/docs/clojure.clj similarity index 100% rename from demo/docs/clojure.clj rename to demo/kitchen-sink/docs/clojure.clj diff --git a/demo/docs/coffeescript.coffee b/demo/kitchen-sink/docs/coffeescript.coffee similarity index 100% rename from demo/docs/coffeescript.coffee rename to demo/kitchen-sink/docs/coffeescript.coffee diff --git a/demo/docs/coldfusion.cfm b/demo/kitchen-sink/docs/coldfusion.cfm similarity index 100% rename from demo/docs/coldfusion.cfm rename to demo/kitchen-sink/docs/coldfusion.cfm diff --git a/demo/docs/cpp.cpp b/demo/kitchen-sink/docs/cpp.cpp similarity index 100% rename from demo/docs/cpp.cpp rename to demo/kitchen-sink/docs/cpp.cpp diff --git a/demo/docs/csharp.cs b/demo/kitchen-sink/docs/csharp.cs similarity index 100% rename from demo/docs/csharp.cs rename to demo/kitchen-sink/docs/csharp.cs diff --git a/demo/docs/css.css b/demo/kitchen-sink/docs/css.css similarity index 100% rename from demo/docs/css.css rename to demo/kitchen-sink/docs/css.css diff --git a/demo/docs/groovy.groovy b/demo/kitchen-sink/docs/groovy.groovy similarity index 100% rename from demo/docs/groovy.groovy rename to demo/kitchen-sink/docs/groovy.groovy diff --git a/demo/docs/html.html b/demo/kitchen-sink/docs/html.html similarity index 100% rename from demo/docs/html.html rename to demo/kitchen-sink/docs/html.html diff --git a/demo/docs/java.java b/demo/kitchen-sink/docs/java.java similarity index 100% rename from demo/docs/java.java rename to demo/kitchen-sink/docs/java.java diff --git a/demo/docs/javascript.js b/demo/kitchen-sink/docs/javascript.js similarity index 100% rename from demo/docs/javascript.js rename to demo/kitchen-sink/docs/javascript.js diff --git a/demo/docs/json.json b/demo/kitchen-sink/docs/json.json similarity index 100% rename from demo/docs/json.json rename to demo/kitchen-sink/docs/json.json diff --git a/demo/docs/latex.tex b/demo/kitchen-sink/docs/latex.tex similarity index 100% rename from demo/docs/latex.tex rename to demo/kitchen-sink/docs/latex.tex diff --git a/demo/docs/lua.lua b/demo/kitchen-sink/docs/lua.lua similarity index 100% rename from demo/docs/lua.lua rename to demo/kitchen-sink/docs/lua.lua diff --git a/demo/docs/markdown.md b/demo/kitchen-sink/docs/markdown.md similarity index 100% rename from demo/docs/markdown.md rename to demo/kitchen-sink/docs/markdown.md diff --git a/demo/docs/ocaml.ml b/demo/kitchen-sink/docs/ocaml.ml similarity index 100% rename from demo/docs/ocaml.ml rename to demo/kitchen-sink/docs/ocaml.ml diff --git a/demo/docs/perl.pl b/demo/kitchen-sink/docs/perl.pl similarity index 100% rename from demo/docs/perl.pl rename to demo/kitchen-sink/docs/perl.pl diff --git a/demo/docs/php.php b/demo/kitchen-sink/docs/php.php similarity index 100% rename from demo/docs/php.php rename to demo/kitchen-sink/docs/php.php diff --git a/demo/docs/plaintext.txt b/demo/kitchen-sink/docs/plaintext.txt similarity index 100% rename from demo/docs/plaintext.txt rename to demo/kitchen-sink/docs/plaintext.txt diff --git a/demo/docs/powershell.ps1 b/demo/kitchen-sink/docs/powershell.ps1 similarity index 100% rename from demo/docs/powershell.ps1 rename to demo/kitchen-sink/docs/powershell.ps1 diff --git a/demo/docs/python.py b/demo/kitchen-sink/docs/python.py similarity index 100% rename from demo/docs/python.py rename to demo/kitchen-sink/docs/python.py diff --git a/demo/docs/ruby.rb b/demo/kitchen-sink/docs/ruby.rb similarity index 100% rename from demo/docs/ruby.rb rename to demo/kitchen-sink/docs/ruby.rb diff --git a/demo/docs/scala.scala b/demo/kitchen-sink/docs/scala.scala similarity index 100% rename from demo/docs/scala.scala rename to demo/kitchen-sink/docs/scala.scala diff --git a/demo/docs/scss.scss b/demo/kitchen-sink/docs/scss.scss similarity index 100% rename from demo/docs/scss.scss rename to demo/kitchen-sink/docs/scss.scss diff --git a/demo/docs/sql.sql b/demo/kitchen-sink/docs/sql.sql similarity index 100% rename from demo/docs/sql.sql rename to demo/kitchen-sink/docs/sql.sql diff --git a/demo/docs/svg.svg b/demo/kitchen-sink/docs/svg.svg similarity index 100% rename from demo/docs/svg.svg rename to demo/kitchen-sink/docs/svg.svg diff --git a/demo/docs/textile.textile b/demo/kitchen-sink/docs/textile.textile similarity index 100% rename from demo/docs/textile.textile rename to demo/kitchen-sink/docs/textile.textile diff --git a/demo/docs/xml.xml b/demo/kitchen-sink/docs/xml.xml similarity index 100% rename from demo/docs/xml.xml rename to demo/kitchen-sink/docs/xml.xml diff --git a/demo/icons/Readme.txt b/demo/kitchen-sink/icons/Readme.txt similarity index 100% rename from demo/icons/Readme.txt rename to demo/kitchen-sink/icons/Readme.txt diff --git a/demo/icons/epl.html b/demo/kitchen-sink/icons/epl.html similarity index 100% rename from demo/icons/epl.html rename to demo/kitchen-sink/icons/epl.html diff --git a/demo/icons/error_obj.gif b/demo/kitchen-sink/icons/error_obj.gif similarity index 100% rename from demo/icons/error_obj.gif rename to demo/kitchen-sink/icons/error_obj.gif diff --git a/demo/icons/warning_obj.gif b/demo/kitchen-sink/icons/warning_obj.gif similarity index 100% rename from demo/icons/warning_obj.gif rename to demo/kitchen-sink/icons/warning_obj.gif diff --git a/demo/logo.png b/demo/kitchen-sink/logo.png similarity index 100% rename from demo/logo.png rename to demo/kitchen-sink/logo.png diff --git a/demo/require.js b/demo/kitchen-sink/require.js similarity index 100% rename from demo/require.js rename to demo/kitchen-sink/require.js diff --git a/demo/styles.css b/demo/kitchen-sink/styles.css similarity index 100% rename from demo/styles.css rename to demo/kitchen-sink/styles.css diff --git a/demo/static-highlighter/client.html b/demo/static-highlighter/client.html new file mode 100644 index 00000000..561add80 --- /dev/null +++ b/demo/static-highlighter/client.html @@ -0,0 +1,48 @@ + + + +
+ +Syntax highlighting using Ace language modes and themes.
+ + + + + + + + diff --git a/demo/static-highlighter/server.js b/demo/static-highlighter/server.js new file mode 100644 index 00000000..a58b00b6 --- /dev/null +++ b/demo/static-highlighter/server.js @@ -0,0 +1,36 @@ +/** + * Simple node.js server, which generates the synax highlighted version of itself + * using the Ace modes and themes on the server and serving a static web page. + */ + +// include ace search path and modules +require("../../support/paths"); + +// load jsdom, which is required by Ace +require("ace/test/mockdom"); + +var http = require("http"); +var fs = require("fs"); + +// load the highlighter and the desired mode and theme +var highlighter = require("ace/ext/static_highlight"); +var JavaScriptMode = require("ace/mode/javascript").Mode; +var theme = require("ace/theme/twilight"); + +var port = process.env.PORT || 2222; + +http.createServer(function(req, res) { + res.writeHead(200, {"Content-Type": "text/html"}); + + fs.readFile(__filename, "utf8", function(err, data) { + var highlighted = highlighter.render(data, new JavaScriptMode(), theme); + res.end('\n\ +\n\ +:html:\n\ +'.replace(":css:", highlighted.css).replace(":html:", highlighted.html)); + }); +}).listen(port); + +console.log("Listening on port " + port); \ No newline at end of file diff --git a/kitchen-sink.html b/kitchen-sink.html index 572e71c4..9c7a90d7 100644 --- a/kitchen-sink.html +++ b/kitchen-sink.html @@ -6,7 +6,7 @@
+
|
@@ -189,20 +189,20 @@
-
+
diff --git a/lib/ace/ext/static.css b/lib/ace/ext/static.css
new file mode 100644
index 00000000..d048034f
--- /dev/null
+++ b/lib/ace/ext/static.css
@@ -0,0 +1,22 @@
+.ace_editor {
+ font-family: 'Monaco', 'Menlo', 'Droid Sans Mono', 'Courier New', monospace;
+ font-size: 12px;
+}
+
+.ace_editor .ace_gutter {
+ width: 25px !important;
+ display: block;
+ float: left;
+ text-align: right;
+ padding: 0 3px 0 0;
+ margin-right: 3px;
+}
+
+.ace-row { clear: both; }
+
+*.ace_gutter-cell {
+ -moz-user-select: -moz-none;
+ -khtml-user-select: none;
+ -webkit-user-select: none;
+ user-select: none;
+}
\ No newline at end of file
diff --git a/lib/ace/ext/static_highlight.js b/lib/ace/ext/static_highlight.js
new file mode 100644
index 00000000..bcdf10eb
--- /dev/null
+++ b/lib/ace/ext/static_highlight.js
@@ -0,0 +1,95 @@
+/* vim:ts=4:sts=4:sw=4:
+ * ***** 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):
+ * Jan Jongboom ");
+ stringBuilder.push("" + (ix+1) + "");
+ textLayer.$renderLine(stringBuilder, 0, lineTokens, true);
+ stringBuilder.push(" ");
+ }
+
+ // let's prepare the whole html
+ var html = "\
+ ".replace(/:cssClass/, theme.cssClass).replace(/:code/, stringBuilder.join(""));
+
+ textLayer.destroy();
+
+ return {
+ css: baseStyles + theme.cssText,
+ html: html
+ };
+};
+
+});
\ No newline at end of file
diff --git a/lib/ace/ext/static_highlight_test.js b/lib/ace/ext/static_highlight_test.js
new file mode 100644
index 00000000..e2658073
--- /dev/null
+++ b/lib/ace/ext/static_highlight_test.js
@@ -0,0 +1,74 @@
+if (typeof process !== "undefined") {
+ require("../../../support/paths");
+ require("ace/test/mockdom");
+}
+
+var assert = require("assert");
+var highlighter = require("./static_highlight");
+var JavaScriptMode = require("ace/mode/javascript").Mode;
+
+// Execution ORDER: test.setUpSuite, setUp, testFn, tearDown, test.tearDownSuite
+module.exports = {
+ timeout: 10000,
+
+ "test simple snippet": function(next) {
+ var theme = require("ace/theme/tomorrow");
+ var snippet = "/** this is a function\n\
+*\n\
+*/\n\
+function hello (a, b, c) {\n\
+ console.log(a * b + c + 'sup?');\n\
+}";
+ var mode = new JavaScriptMode();
+
+ var isError = false, result;
+ try {
+ result = highlighter.render(snippet, mode, theme);
+ }
+ catch (e) {
+ console.log(e);
+ isError = true;
+ }
+ // todo: write something more meaningful
+ assert.equal(isError, false);
+
+ next();
+ },
+
+ "test css from theme is used": function(next) {
+ var theme = require("ace/theme/tomorrow");
+ var snippet = "/** this is a function\n\
+*\n\
+*/\n\
+function hello (a, b, c) {\n\
+ console.log(a * b + c + 'sup?');\n\
+}";
+ var mode = new JavaScriptMode();
+
+ var isError = false, result;
+ result = highlighter.render(snippet, mode, theme);
+
+ assert.equal(result.css, theme.cssText);
+
+ next();
+ },
+
+ "test theme classname should be in output html": function (next) {
+ var theme = require("ace/theme/tomorrow");
+ var snippet = "/** this is a function\n\
+*\n\
+*/\n\
+function hello (a, b, c) {\n\
+ console.log(a * b + c + 'sup?');\n\
+}";
+ var mode = new JavaScriptMode();
+
+ var isError = false, result;
+ result = highlighter.render(snippet, mode, theme);
+ assert.equal(!!result.html.match(/\
+ :code\
+ \
+ /), true);
+
+ next();
+ }
+};
+
+!module.parent && require("asyncjs").test.testcase(module.exports).exec();
diff --git a/lib/ace/test/mockrenderer.js b/lib/ace/test/mockrenderer.js
index 3c0c4342..ad8a24d7 100644
--- a/lib/ace/test/mockrenderer.js
+++ b/lib/ace/test/mockrenderer.js
@@ -161,4 +161,8 @@ MockRenderer.prototype.textToScreenCoordinates = function() {
}
};
+MockRenderer.prototype.adjustWrapLimit = function () {
+
+};
+
});
diff --git a/lib/ace/theme/tomorrow.js b/lib/ace/theme/tomorrow.js
index 977c4d33..e91cd3c5 100644
--- a/lib/ace/theme/tomorrow.js
+++ b/lib/ace/theme/tomorrow.js
@@ -37,9 +37,7 @@
define(function(require, exports, module) {
- var dom = require("pilot/dom");
-
- var cssText = ".ace-tomorrow .ace_editor {\
+ exports.cssText = ".ace-tomorrow .ace_editor {\
border: 2px solid rgb(159, 159, 159);\
}\
\
@@ -254,8 +252,5 @@ background-color:#8959A8;\
\
}";
- // import CSS once
- dom.importCssString(cssText);
-
exports.cssClass = "ace-tomorrow";
});
\ No newline at end of file
diff --git a/support/pilot b/support/pilot
index c720ab56..f1ac22a9 160000
--- a/support/pilot
+++ b/support/pilot
@@ -1 +1 @@
-Subproject commit c720ab56a80ba8cc10d0c86a9c4f1fa9cfc83b1b
+Subproject commit f1ac22a9bc806772ae68fd67d800fc0625518346
|