138 lines
4 KiB
JavaScript
138 lines
4 KiB
JavaScript
define(function(require, exports, module) {
|
|
|
|
/** creates globals intentionally to make things easily accessible from console **/
|
|
|
|
var net = require("ace/lib/net");
|
|
var Range = require("ace/range").Range;
|
|
var util = require("demo/kitchen-sink/util");
|
|
var layout = require("demo/kitchen-sink/layout");
|
|
var modelist = require("demo/kitchen-sink/modelist");
|
|
var doclist = require("demo/kitchen-sink/doclist");
|
|
var TokenTooltip = require("demo/kitchen-sink/token_tooltip").TokenTooltip;
|
|
|
|
var EditSession = require("ace/edit_session").EditSession;
|
|
var UndoManager = require("ace/undomanager").UndoManager;
|
|
|
|
var DebugTokenizer = require("ace/tokenizer_dev").Tokenizer;
|
|
|
|
// createEditor
|
|
var splitEditor = window.splitEditor = util.createSplitEditor("editor");
|
|
|
|
var editor1 = window.editor1 = splitEditor.editor0;
|
|
var editor2 = window.editor2 = splitEditor.editor1;
|
|
new TokenTooltip(editor2);
|
|
|
|
timeout = null
|
|
schedule = function() {
|
|
if(timeout != null) {
|
|
clearTimeout(timeout)
|
|
}
|
|
timeout = setTimeout(run, 800)
|
|
}
|
|
|
|
|
|
setAutorunEnabled = function(val) {
|
|
if (val)
|
|
editor1.on('change', schedule)
|
|
else
|
|
editor1.removeEventListener('change', schedule)
|
|
}
|
|
|
|
util.bindCheckbox("autorunEl", setAutorunEnabled)
|
|
|
|
|
|
docEl = document.getElementById("doc")
|
|
util.fillDropdown(docEl, doclist.docs)
|
|
util.bindDropdown("doc", function(value) {
|
|
doclist.loadDoc(value, function(session) {
|
|
if (session) {
|
|
editor2.setSession(session)
|
|
}
|
|
})
|
|
});
|
|
|
|
modeEl = document.getElementById("modeEl");
|
|
util.fillDropdown(modeEl, modelist.modes)
|
|
var modeSessions = {}
|
|
util.bindDropdown(modeEl, function(value) {
|
|
if (modeSessions[value])
|
|
editor1.setSession(modeSessions[value])
|
|
var hp = "./lib/ace/mode/" + value + "_highlight_rules.js"
|
|
net.get(hp, function(text) {
|
|
text = util.stripLeadingComments(text)
|
|
var desc = value
|
|
modePath = "ace/mode/" + value
|
|
|
|
var session = new EditSession(text)
|
|
session.setUndoManager(new UndoManager())
|
|
modeSessions[value] = session;
|
|
session.setMode("ace/mode/javascript")
|
|
|
|
editor1.setSession(modeSessions[value])
|
|
})
|
|
});
|
|
|
|
util.fillDropdown("themeEl", {
|
|
bright: [
|
|
"chrome", "clouds", "crimson_editor", "dawn", "dreamweaver", "eclipse", "github",
|
|
"solarized_light", "textmate", "tomorrow", "xcode"],
|
|
dark: [ "clouds_midnight", "cobalt", "idle_fingers", "kr_theme", "merbivore", "merbivore_soft",
|
|
"mono_industrial", "monokai", "pastel_on_dark", "solarized_dark", "tomorrow_night",
|
|
"tomorrow_night_blue", "tomorrow_night_bright", "tomorrow_night_eighties", "twilight", "vibrant_ink"]
|
|
})
|
|
|
|
util.bindDropdown("themeEl", function(value) {
|
|
if (!value)
|
|
return;
|
|
editor1.setTheme("ace/theme/" + value);
|
|
editor2.setTheme("ace/theme/" + value);
|
|
})
|
|
|
|
|
|
function getDeps(src, path) {
|
|
var deps = []
|
|
src.replace(/require\((['"])(.*?)\1/g, function(a,b,c){
|
|
if (c[0] == ".") {
|
|
var base = path.split("/")
|
|
c.split("/").forEach(function(part) {
|
|
if (part == ".") {
|
|
base.pop()
|
|
} else if (part == "..") {
|
|
base.pop();
|
|
base.pop()
|
|
} else {
|
|
base.push(part)
|
|
}
|
|
})
|
|
c = base.join("/")
|
|
}
|
|
deps.push('"' + c + '"')
|
|
})
|
|
|
|
return deps
|
|
}
|
|
function run() {
|
|
var src = editor1.getValue();
|
|
var path = "ace/mode/new";
|
|
var deps = getDeps(src, path)
|
|
src = src.replace("define(", 'define("' + path +'", ["require","exports","module",' + deps +'],');
|
|
src += ';require(["ace/mode/new"], continueRun, function(e){console.log(e);require.undef("ace/mode/new")})'
|
|
try {
|
|
eval(src)
|
|
} catch(e) {
|
|
console.log(e)
|
|
}
|
|
}
|
|
var continueRun = function(rules) {
|
|
rules = rules[Object.keys(rules)[0]]
|
|
var Tokenizer = DebugTokenizer
|
|
|
|
var tk = new Tokenizer(new rules().getRules())
|
|
editor2.session.bgTokenizer.setTokenizer(tk)
|
|
editor2.renderer.updateText()
|
|
}
|
|
|
|
editor1.commands.bindKey("ctrl-Return", run)
|
|
|
|
});
|
|
|