sourcemint loader support
This commit is contained in:
parent
1178b03f37
commit
67abf80c4e
10 changed files with 489 additions and 2 deletions
16
demo/kitchen-sink/package.json
Normal file
16
demo/kitchen-sink/package.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"main": "./demo.js",
|
||||
"mappings": {
|
||||
"ace": "../.."
|
||||
},
|
||||
"config": {
|
||||
"github.com/sourcemint/bundler-js/0/-meta/config/0": {
|
||||
"adapter": "github.com/sourcemint/sdk-requirejs/0",
|
||||
"resources": [
|
||||
"./icons/*",
|
||||
"./logo.png",
|
||||
"./styles.css"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -50,7 +50,14 @@ var WorkerClient = function(topLevelNamespaces, packagedJs, mod, classname) {
|
|||
this.$worker = new Worker(base + packagedJs);
|
||||
}
|
||||
else {
|
||||
var workerUrl = this.$normalizePath(require.nameToUrl("ace/worker/worker", null, "_"));
|
||||
var workerUrl;
|
||||
if (require.supports.indexOf("ucjs2-pinf-0") >= 0) {
|
||||
// We are running in the sourcemint loader.
|
||||
workerUrl = require.nameToUrl("ace/worker/worker_sourcemint");
|
||||
} else {
|
||||
// We are running in RequireJS.
|
||||
workerUrl = this.$normalizePath(require.nameToUrl("ace/worker/worker", null, "_"));
|
||||
}
|
||||
this.$worker = new Worker(workerUrl);
|
||||
|
||||
var tlns = {};
|
||||
|
|
|
|||
73
lib/ace/worker/worker_sourcemint.js
Normal file
73
lib/ace/worker/worker_sourcemint.js
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
|
||||
define(function(require, exports, module) {
|
||||
|
||||
"no use strict";
|
||||
|
||||
exports.main = function()
|
||||
{
|
||||
var console = {
|
||||
log: function(msg) {
|
||||
postMessage({type: "log", data: msg});
|
||||
}
|
||||
};
|
||||
|
||||
// NOTE: This sets the global `window` object used by workers.
|
||||
// TODO: Pass into worker what it needs and don't set global here.
|
||||
window = {
|
||||
console: console
|
||||
};
|
||||
|
||||
function initSender() {
|
||||
|
||||
var EventEmitter = require("ace/lib/event_emitter").EventEmitter;
|
||||
var oop = require("ace/lib/oop");
|
||||
|
||||
var Sender = function() {};
|
||||
|
||||
(function() {
|
||||
|
||||
oop.implement(this, EventEmitter);
|
||||
|
||||
this.callback = function(data, callbackId) {
|
||||
postMessage({
|
||||
type: "call",
|
||||
id: callbackId,
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
this.emit = function(name, data) {
|
||||
postMessage({
|
||||
type: "event",
|
||||
name: name,
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
}).call(Sender.prototype);
|
||||
|
||||
return new Sender();
|
||||
}
|
||||
|
||||
var main;
|
||||
var sender;
|
||||
|
||||
onmessage = function(e) {
|
||||
var msg = e.data;
|
||||
if (msg.command) {
|
||||
main[msg.command].apply(main, msg.args);
|
||||
}
|
||||
else if (msg.init) {
|
||||
require("ace/lib/fixoldbrowsers");
|
||||
sender = initSender();
|
||||
require.async(msg.module, function(WORKER) {
|
||||
var clazz = WORKER[msg.classname];
|
||||
main = new clazz(sender);
|
||||
});
|
||||
}
|
||||
else if (msg.event && sender) {
|
||||
sender._emit(msg.event, msg.data);
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
27
package.json
27
package.json
|
|
@ -20,7 +20,9 @@
|
|||
"libxml": "0.0.x",
|
||||
"dryice": ">=0.4.1"
|
||||
},
|
||||
|
||||
"mappings": {
|
||||
"ace": "."
|
||||
},
|
||||
"licenses": [{
|
||||
"type": "MPL",
|
||||
"url": "http://www.mozilla.org/MPL/"
|
||||
|
|
@ -38,5 +40,28 @@
|
|||
},
|
||||
"scripts": {
|
||||
"test": "node lib/ace/test/all.js"
|
||||
},
|
||||
"config": {
|
||||
"github.com/sourcemint/bundler-js/0/-meta/config/0": {
|
||||
"adapter": "github.com/sourcemint/sdk-requirejs/0",
|
||||
"modules": {
|
||||
"/lib/ace/virtual_renderer.js": {
|
||||
"dynamicLinks": [
|
||||
"/lib/ace/theme/*.js"
|
||||
]
|
||||
},
|
||||
"/lib/ace/worker/worker_client.js": {
|
||||
"dynamicLinks": [
|
||||
"/lib/ace/worker/worker_sourcemint.js"
|
||||
]
|
||||
},
|
||||
"/lib/ace/worker/worker_sourcemint.js": {
|
||||
"bundleLoader": true,
|
||||
"dynamicLinks": [
|
||||
"/lib/ace/mode/*_worker.js"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
2
sourcemint/.gitignore
vendored
Normal file
2
sourcemint/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
/dist/
|
||||
/node_modules/
|
||||
60
sourcemint/README.md
Normal file
60
sourcemint/README.md
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
Develop & Distribute ACE using the Sourcemint Loader
|
||||
====================================================
|
||||
|
||||
The [Sourcemint JavaScript Loader](https://github.com/sourcemint/loader-js) is an optimized
|
||||
module loader that boots sets of *statically linked* modules from *bundles*. An application may
|
||||
load additional bundles by using *dynamic links*.
|
||||
|
||||
*Bundles* are generated from the AMD formatted source files on the fly during development (using a server helper)
|
||||
and in-batch for production builds. To generate bundles the Sourcemint [RequireJS SDK](https://github.com/sourcemint/sdk-requirejs)
|
||||
and [Platform NodeJS](https://github.com/sourcemint/platform-nodejs) projects are used.
|
||||
|
||||
|
||||
Development
|
||||
===========
|
||||
|
||||
**Requirements:**
|
||||
|
||||
* [NodeJS](http://nodejs.org/)
|
||||
|
||||
**Install:**
|
||||
|
||||
git clone git://github.com/ajaxorg/ace.git
|
||||
cd ace/sourcemint
|
||||
npm install
|
||||
|
||||
**Start development server:**
|
||||
|
||||
node dev
|
||||
|
||||
**NOTE:** Modified source files are automatically reloaded on browser refresh so there is no
|
||||
need to restart the server during development.
|
||||
|
||||
|
||||
Production
|
||||
==========
|
||||
|
||||
To generate production bundles, use the same setup as for *Development*, then run:
|
||||
|
||||
// NOT YET IMPLEMENTED
|
||||
node build ../demo/kitchen-sink ./dist
|
||||
|
||||
Where `../demo/kitchen-sink` is the path to your ACE bootstrap package which embeds ACE in the page
|
||||
or provides an interface for the rest of your application to interact with ACE.
|
||||
|
||||
Everything needed for ACE (and your bootstrap package) to run will be written to the `./dist` directory which can be
|
||||
used in a production application by serving these static files via a web server. To load the bootstrap file use:
|
||||
|
||||
<!-- Load the Sourcemint JavaScript Loader -->
|
||||
<script type="text/javascript" src="./dist/loader.min.js"></script>
|
||||
<!-- Load ACE bootstrap file -->
|
||||
<script type="text/javascript">
|
||||
require.sandbox("./dist/kitchen-sink.js", function(sandbox) {
|
||||
sandbox.main();
|
||||
});
|
||||
</script>
|
||||
|
||||
See `` for an example of how to write an ACE bootstrap package.
|
||||
|
||||
See [Embedding Ace](https://github.com/ajaxorg/ace) and [Embedding API](https://github.com/ajaxorg/ace/wiki/Embedding---API)
|
||||
for more information on how to embed and interact with ACE.
|
||||
67
sourcemint/dev.js
Normal file
67
sourcemint/dev.js
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
|
||||
var PATH = require("path"),
|
||||
FS = require("fs"),
|
||||
CONNECT = require("connect"),
|
||||
BUNDLER = require("sourcemint-platform-nodejs/lib/bundler");
|
||||
|
||||
|
||||
exports.main = function(options) {
|
||||
|
||||
// Rebuild bundles to get a clean start.
|
||||
|
||||
console.log("Building fresh bundles from source ...");
|
||||
|
||||
if (!PATH.existsSync(__dirname + "/dist")) {
|
||||
FS.mkdir(__dirname + "/dist", 0755);
|
||||
}
|
||||
|
||||
BUNDLER.bundle(PATH.dirname(__dirname) + "/demo/kitchen-sink", __dirname + "/dist", {
|
||||
packageIdHashSeed: "__ACE__",
|
||||
forceCompleteBuild: true,
|
||||
writeManifest: true
|
||||
}).then(function() {
|
||||
|
||||
console.log("... Done. Bundles will be updated as changes are detected in source files.");
|
||||
|
||||
var server = CONNECT();
|
||||
|
||||
server.use(CONNECT.router(function(app) {
|
||||
|
||||
app.get(/^\/loader.js/, CONNECT.static(PATH.dirname(require.resolve("sourcemint-loader-js/loader.js"))));
|
||||
|
||||
app.get(/^(\/demo\/kitchen-sink)(\.js)?(\/(.*))?$/, function (req, res) {
|
||||
|
||||
req.url = req.params[2] || "";
|
||||
|
||||
BUNDLER.Middleware(PATH.dirname(__dirname) + "/demo/kitchen-sink", __dirname + "/dist", {
|
||||
packageIdHashSeed: "__ACE__",
|
||||
// TODO: https://github.com/sourcemint/bundler-js/issues/3
|
||||
rebuildChanges: false
|
||||
}).handle(req, res);
|
||||
});
|
||||
|
||||
app.get(/^\//, function(req, res)
|
||||
{
|
||||
CONNECT.static(__dirname)(req, res, function()
|
||||
{
|
||||
res.writeHead(404);
|
||||
res.end("Not found!");
|
||||
});
|
||||
});
|
||||
}));
|
||||
|
||||
server.listen(options.port, "127.0.0.1");
|
||||
|
||||
console.log("ACE development server running at http://127.0.0.1:" + options.port + "/");
|
||||
|
||||
}, function(err) {
|
||||
console.error(err.stack);
|
||||
});
|
||||
}
|
||||
|
||||
if (require.main === module) {
|
||||
// TODO: Make configurable via command-line flag.
|
||||
exports.main({
|
||||
port: 8888
|
||||
});
|
||||
}
|
||||
16
sourcemint/index.html
Normal file
16
sourcemint/index.html
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
||||
"http://www.w3.org/TR/html4/strict.dtd">
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>Ace Development Server</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>Demos</h1>
|
||||
|
||||
<p><a href="kitchen-sink.html">Kitchen Sink</a></p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
209
sourcemint/kitchen-sink.html
Normal file
209
sourcemint/kitchen-sink.html
Normal file
|
|
@ -0,0 +1,209 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
||||
"http://www.w3.org/TR/html4/strict.dtd">
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>Ace Kitchen Sink</title>
|
||||
<meta name="author" content="Fabian Jakobs">
|
||||
<link rel="stylesheet" href="demo/kitchen-sink/styles.css" type="text/css" media="screen" charset="utf-8">
|
||||
<!--
|
||||
|
||||
Ace
|
||||
version %version%
|
||||
commit %commit%
|
||||
|
||||
-->
|
||||
</head>
|
||||
<body>
|
||||
<img id="logo" src="demo/kitchen-sink/logo.png">
|
||||
<table id="controls">
|
||||
<tr>
|
||||
<td>
|
||||
<label for="doc">Document</label>
|
||||
</td><td>
|
||||
<select id="doc" size="1">
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td >
|
||||
<label for="mode">Mode</label>
|
||||
</td><td>
|
||||
<select id="mode" size="1">
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label for="split">Split</label>
|
||||
</td><td>
|
||||
<select id="split" size="1">
|
||||
<option value="none">None</option>
|
||||
<option value="below">Below</option>
|
||||
<option value="beside">Beside</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td >
|
||||
<label for="theme">Theme</label>
|
||||
</td><td>
|
||||
<select id="theme" size="1">
|
||||
<option value="ace/theme/chrome">Chrome</option>
|
||||
<option value="ace/theme/clouds">Clouds</option>
|
||||
<option value="ace/theme/clouds_midnight">Clouds Midnight</option>
|
||||
<option value="ace/theme/cobalt">Cobalt</option>
|
||||
<option value="ace/theme/crimson_editor">Crimson Editor</option>
|
||||
<option value="ace/theme/dawn">Dawn</option>
|
||||
<option value="ace/theme/dreamweaver">Dreamweaver</option>
|
||||
<option value="ace/theme/eclipse">Eclipse</option>
|
||||
<option value="ace/theme/idle_fingers">idleFingers</option>
|
||||
<option value="ace/theme/kr_theme">krTheme</option>
|
||||
<option value="ace/theme/merbivore">Merbivore</option>
|
||||
<option value="ace/theme/merbivore_soft">Merbivore Soft</option>
|
||||
<option value="ace/theme/mono_industrial">Mono Industrial</option>
|
||||
<option value="ace/theme/monokai">Monokai</option>
|
||||
<option value="ace/theme/pastel_on_dark">Pastel on dark</option>
|
||||
<option value="ace/theme/solarized_dark">Solarized Dark</option>
|
||||
<option value="ace/theme/solarized_light">Solarized Light</option>
|
||||
<option value="ace/theme/textmate" selected="selected">TextMate</option>
|
||||
<option value="ace/theme/twilight">Twilight</option>
|
||||
<option value="ace/theme/tomorrow">Tomorrow</option>
|
||||
<option value="ace/theme/tomorrow_night">Tomorrow Night</option>
|
||||
<option value="ace/theme/tomorrow_night_blue">Tomorrow Night Blue</option>
|
||||
<option value="ace/theme/tomorrow_night_bright">Tomorrow Night Bright</option>
|
||||
<option value="ace/theme/tomorrow_night_eighties">Tomorrow Night 80s</option>
|
||||
<option value="ace/theme/vibrant_ink">Vibrant Ink</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label for="fontsize">Font Size</label>
|
||||
</td><td>
|
||||
<select id="fontsize" size="1">
|
||||
<option value="10px">10px</option>
|
||||
<option value="11px">11px</option>
|
||||
<option value="12px" selected="selected">12px</option>
|
||||
<option value="14px">14px</option>
|
||||
<option value="16px">16px</option>
|
||||
<option value="20px">20px</option>
|
||||
<option value="24px">24px</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label for="folding">Code Folding</label>
|
||||
</td><td>
|
||||
<select id="folding" size="1">
|
||||
<option value="manual">manual</option>
|
||||
<option value="markbegin" selected="selected">mark begin</option>
|
||||
<option value="markbeginend">mark begin and end</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label for="select_style">Full Line Selection</label>
|
||||
</td><td>
|
||||
<input type="checkbox" name="select_style" id="select_style" checked>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label for="highlight_active">Highlight Active Line</label>
|
||||
</td><td>
|
||||
<input type="checkbox" name="highlight_active" id="highlight_active" checked>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td >
|
||||
<label for="show_hidden">Show Invisibles</label>
|
||||
</td><td>
|
||||
<input type="checkbox" name="show_hidden" id="show_hidden" checked>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td >
|
||||
<label for="show_hscroll">Persistent HScroll</label>
|
||||
</td><td>
|
||||
<input type="checkbox" name="show_hscroll" id="show_hscroll">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td >
|
||||
<label for="keybinding">Key Binding</label>
|
||||
</td><td>
|
||||
<select id="keybinding" size="1">
|
||||
<option value="ace">Ace</option>
|
||||
<option value="vim">Vim</option>
|
||||
<option value="emacs">Emacs</option>
|
||||
<option value="custom">Custom</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td >
|
||||
<label for="soft_wrap">Soft Wrap</label>
|
||||
</td><td>
|
||||
<select id="soft_wrap" size="1">
|
||||
<option value="off">Off</option>
|
||||
<option value="40">40 Chars</option>
|
||||
<option value="80">80 Chars</option>
|
||||
<option value="free">Free</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td >
|
||||
<label for="show_gutter">Show Gutter</label>
|
||||
</td><td>
|
||||
<input type="checkbox" id="show_gutter" checked>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td >
|
||||
<label for="show_print_margin">Show Print Margin</label>
|
||||
</td><td>
|
||||
<input type="checkbox" id="show_print_margin" checked>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td >
|
||||
<label for="soft_tab">Use Soft Tab</label>
|
||||
</td><td>
|
||||
<input type="checkbox" id="soft_tab" checked>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td >
|
||||
<label for="highlight_selected_word">Highlight selected word</label>
|
||||
</td>
|
||||
<td>
|
||||
<input type="checkbox" id="highlight_selected_word" checked>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td >
|
||||
<label for="enable_behaviours">Enable Behaviours</label>
|
||||
</td>
|
||||
<td>
|
||||
<input type="checkbox" id="enable_behaviours">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div id="editor">
|
||||
</div>
|
||||
|
||||
<script src="loader.js" type="text/javascript"></script>
|
||||
<script type="text/javascript">
|
||||
require.sandbox("demo/kitchen-sink.js", function(sandbox) {
|
||||
sandbox.main();
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
12
sourcemint/package.json
Normal file
12
sourcemint/package.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"name": "ajaxorg-ace-sourcemint",
|
||||
"version": "0.1.0",
|
||||
"engines": {
|
||||
"node": "0.x"
|
||||
},
|
||||
"dependencies": {
|
||||
"connect": "1.x",
|
||||
"sourcemint-platform-nodejs": "0.x",
|
||||
"sourcemint-loader-js": "0.x"
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue