AmberRack 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +74 -0
- data/.rvmrc +4 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +62 -0
- data/README.md +17 -0
- data/Rakefile +24 -0
- data/amber-rack.gemspec +33 -0
- data/app/amber_app.rb +35 -0
- data/app/javascripts/Benchfib.deploy.js +159 -0
- data/app/javascripts/Benchfib.js +159 -0
- data/app/javascripts/Canvas.deploy.js +1464 -0
- data/app/javascripts/Canvas.js +1464 -0
- data/app/javascripts/Compiler.deploy.js +1587 -0
- data/app/javascripts/Compiler.js +1587 -0
- data/app/javascripts/Examples.deploy.js +800 -0
- data/app/javascripts/Examples.js +800 -0
- data/app/javascripts/IDE.deploy.js +3457 -0
- data/app/javascripts/IDE.js +3457 -0
- data/app/javascripts/IDE.js.bak +3420 -0
- data/app/javascripts/JQuery.deploy.js +898 -0
- data/app/javascripts/JQuery.js +898 -0
- data/app/javascripts/Kernel.deploy.js +6761 -0
- data/app/javascripts/Kernel.js +6761 -0
- data/app/javascripts/Parser.deploy.js +1655 -0
- data/app/javascripts/Parser.js +1655 -0
- data/app/javascripts/Raphael-Core.js +0 -0
- data/app/javascripts/Raphael-Graph.js +0 -0
- data/app/javascripts/SUnit.deploy.js +1059 -0
- data/app/javascripts/SUnit.js +1059 -0
- data/app/javascripts/application.js +2 -0
- data/app/javascripts/boot.js +466 -0
- data/app/javascripts/init.js +2 -0
- data/app/javascripts/jquery-1.4.4.min.js +167 -0
- data/app/javascripts/jquery-ui-1.8.9.custom.min.js +781 -0
- data/app/javascripts/jquery.textarea.js +267 -0
- data/app/javascripts/jtalk.js +78 -0
- data/app/javascripts/lib/CodeMirror/LICENSE +19 -0
- data/app/javascripts/lib/CodeMirror/README.md +6 -0
- data/app/javascripts/lib/CodeMirror/compress.html +92 -0
- data/app/javascripts/lib/CodeMirror/css/baboon.png +0 -0
- data/app/javascripts/lib/CodeMirror/css/baboon_vector.svg +153 -0
- data/app/javascripts/lib/CodeMirror/css/docs.css +154 -0
- data/app/javascripts/lib/CodeMirror/demo/activeline.html +72 -0
- data/app/javascripts/lib/CodeMirror/demo/changemode.html +51 -0
- data/app/javascripts/lib/CodeMirror/demo/complete.html +79 -0
- data/app/javascripts/lib/CodeMirror/demo/complete.js +151 -0
- data/app/javascripts/lib/CodeMirror/demo/fullscreen.html +158 -0
- data/app/javascripts/lib/CodeMirror/demo/marker.html +53 -0
- data/app/javascripts/lib/CodeMirror/demo/mustache.html +57 -0
- data/app/javascripts/lib/CodeMirror/demo/preview.html +75 -0
- data/app/javascripts/lib/CodeMirror/demo/resize.html +44 -0
- data/app/javascripts/lib/CodeMirror/demo/runmode.html +50 -0
- data/app/javascripts/lib/CodeMirror/demo/search.html +106 -0
- data/app/javascripts/lib/CodeMirror/demo/theme.html +53 -0
- data/app/javascripts/lib/CodeMirror/index.html +239 -0
- data/app/javascripts/lib/CodeMirror/internals.html +389 -0
- data/app/javascripts/lib/CodeMirror/lib/codemirror.css +67 -0
- data/app/javascripts/lib/CodeMirror/lib/codemirror.js +2144 -0
- data/app/javascripts/lib/CodeMirror/lib/overlay.js +51 -0
- data/app/javascripts/lib/CodeMirror/lib/runmode.js +27 -0
- data/app/javascripts/lib/CodeMirror/manual.html +854 -0
- data/app/javascripts/lib/CodeMirror/mode/clike/clike.js +247 -0
- data/app/javascripts/lib/CodeMirror/mode/clike/index.html +102 -0
- data/app/javascripts/lib/CodeMirror/mode/css/css.js +124 -0
- data/app/javascripts/lib/CodeMirror/mode/css/index.html +56 -0
- data/app/javascripts/lib/CodeMirror/mode/diff/diff.css +3 -0
- data/app/javascripts/lib/CodeMirror/mode/diff/diff.js +13 -0
- data/app/javascripts/lib/CodeMirror/mode/diff/index.html +99 -0
- data/app/javascripts/lib/CodeMirror/mode/haskell/haskell.js +242 -0
- data/app/javascripts/lib/CodeMirror/mode/haskell/index.html +60 -0
- data/app/javascripts/lib/CodeMirror/mode/htmlmixed/htmlmixed.js +79 -0
- data/app/javascripts/lib/CodeMirror/mode/htmlmixed/index.html +52 -0
- data/app/javascripts/lib/CodeMirror/mode/javascript/index.html +78 -0
- data/app/javascripts/lib/CodeMirror/mode/javascript/javascript.js +348 -0
- data/app/javascripts/lib/CodeMirror/mode/lua/index.html +72 -0
- data/app/javascripts/lib/CodeMirror/mode/lua/lua.js +138 -0
- data/app/javascripts/lib/CodeMirror/mode/php/index.html +49 -0
- data/app/javascripts/lib/CodeMirror/mode/php/php.js +110 -0
- data/app/javascripts/lib/CodeMirror/mode/plsql/index.html +63 -0
- data/app/javascripts/lib/CodeMirror/mode/plsql/plsql.js +217 -0
- data/app/javascripts/lib/CodeMirror/mode/python/LICENSE.txt +21 -0
- data/app/javascripts/lib/CodeMirror/mode/python/index.html +123 -0
- data/app/javascripts/lib/CodeMirror/mode/python/python.js +321 -0
- data/app/javascripts/lib/CodeMirror/mode/rst/index.html +526 -0
- data/app/javascripts/lib/CodeMirror/mode/rst/rst.css +75 -0
- data/app/javascripts/lib/CodeMirror/mode/rst/rst.js +333 -0
- data/app/javascripts/lib/CodeMirror/mode/scheme/index.html +65 -0
- data/app/javascripts/lib/CodeMirror/mode/scheme/scheme.js +181 -0
- data/app/javascripts/lib/CodeMirror/mode/smalltalk/index.html +56 -0
- data/app/javascripts/lib/CodeMirror/mode/smalltalk/smalltalk.js +134 -0
- data/app/javascripts/lib/CodeMirror/mode/sparql/index.html +41 -0
- data/app/javascripts/lib/CodeMirror/mode/sparql/sparql.js +143 -0
- data/app/javascripts/lib/CodeMirror/mode/stex/index.html +96 -0
- data/app/javascripts/lib/CodeMirror/mode/stex/stex.js +167 -0
- data/app/javascripts/lib/CodeMirror/mode/xml/index.html +42 -0
- data/app/javascripts/lib/CodeMirror/mode/xml/xml.js +231 -0
- data/app/javascripts/lib/CodeMirror/mode/yaml/index.html +68 -0
- data/app/javascripts/lib/CodeMirror/mode/yaml/yaml.js +95 -0
- data/app/javascripts/lib/CodeMirror/oldrelease.html +178 -0
- data/app/javascripts/lib/CodeMirror/test/index.html +29 -0
- data/app/javascripts/lib/CodeMirror/test/test.js +249 -0
- data/app/javascripts/lib/CodeMirror/theme/default.css +18 -0
- data/app/javascripts/lib/CodeMirror/theme/elegant.css +9 -0
- data/app/javascripts/lib/CodeMirror/theme/jtalk.css +21 -0
- data/app/javascripts/lib/CodeMirror/theme/neat.css +8 -0
- data/app/javascripts/lib/CodeMirror/theme/night.css +20 -0
- data/app/javascripts/lib/jQuery/jquery-1.4.4.min.js +167 -0
- data/app/javascripts/lib/jQuery/jquery-ui-1.8.9.custom.min.js +781 -0
- data/app/javascripts/lib/jQuery/jquery.textarea.js +267 -0
- data/app/smalltalk/Canvas.st +481 -0
- data/app/smalltalk/IDE.st +1752 -0
- data/config.ru +2 -0
- data/lib/amber-rack.rb +4 -0
- data/lib/amber-rack/version.rb +3 -0
- data/public/CodeMirror/LICENSE +19 -0
- data/public/CodeMirror/README.md +6 -0
- data/public/CodeMirror/compress.html +92 -0
- data/public/CodeMirror/css/baboon.png +0 -0
- data/public/CodeMirror/css/baboon_vector.svg +153 -0
- data/public/CodeMirror/css/docs.css +154 -0
- data/public/CodeMirror/demo/activeline.html +72 -0
- data/public/CodeMirror/demo/changemode.html +51 -0
- data/public/CodeMirror/demo/complete.html +79 -0
- data/public/CodeMirror/demo/complete.js +151 -0
- data/public/CodeMirror/demo/fullscreen.html +158 -0
- data/public/CodeMirror/demo/marker.html +53 -0
- data/public/CodeMirror/demo/mustache.html +57 -0
- data/public/CodeMirror/demo/preview.html +75 -0
- data/public/CodeMirror/demo/resize.html +44 -0
- data/public/CodeMirror/demo/runmode.html +50 -0
- data/public/CodeMirror/demo/search.html +106 -0
- data/public/CodeMirror/demo/theme.html +53 -0
- data/public/CodeMirror/index.html +239 -0
- data/public/CodeMirror/internals.html +389 -0
- data/public/CodeMirror/lib/codemirror.css +67 -0
- data/public/CodeMirror/lib/codemirror.js +2144 -0
- data/public/CodeMirror/lib/overlay.js +51 -0
- data/public/CodeMirror/lib/runmode.js +27 -0
- data/public/CodeMirror/manual.html +854 -0
- data/public/CodeMirror/mode/clike/clike.js +247 -0
- data/public/CodeMirror/mode/clike/index.html +102 -0
- data/public/CodeMirror/mode/css/css.js +124 -0
- data/public/CodeMirror/mode/css/index.html +56 -0
- data/public/CodeMirror/mode/diff/diff.css +3 -0
- data/public/CodeMirror/mode/diff/diff.js +13 -0
- data/public/CodeMirror/mode/diff/index.html +99 -0
- data/public/CodeMirror/mode/haskell/haskell.js +242 -0
- data/public/CodeMirror/mode/haskell/index.html +60 -0
- data/public/CodeMirror/mode/htmlmixed/htmlmixed.js +79 -0
- data/public/CodeMirror/mode/htmlmixed/index.html +52 -0
- data/public/CodeMirror/mode/javascript/index.html +78 -0
- data/public/CodeMirror/mode/javascript/javascript.js +348 -0
- data/public/CodeMirror/mode/lua/index.html +72 -0
- data/public/CodeMirror/mode/lua/lua.js +138 -0
- data/public/CodeMirror/mode/php/index.html +49 -0
- data/public/CodeMirror/mode/php/php.js +110 -0
- data/public/CodeMirror/mode/plsql/index.html +63 -0
- data/public/CodeMirror/mode/plsql/plsql.js +217 -0
- data/public/CodeMirror/mode/python/LICENSE.txt +21 -0
- data/public/CodeMirror/mode/python/index.html +123 -0
- data/public/CodeMirror/mode/python/python.js +321 -0
- data/public/CodeMirror/mode/rst/index.html +526 -0
- data/public/CodeMirror/mode/rst/rst.css +75 -0
- data/public/CodeMirror/mode/rst/rst.js +333 -0
- data/public/CodeMirror/mode/scheme/index.html +65 -0
- data/public/CodeMirror/mode/scheme/scheme.js +181 -0
- data/public/CodeMirror/mode/smalltalk/index.html +56 -0
- data/public/CodeMirror/mode/smalltalk/smalltalk.js +134 -0
- data/public/CodeMirror/mode/sparql/index.html +41 -0
- data/public/CodeMirror/mode/sparql/sparql.js +143 -0
- data/public/CodeMirror/mode/stex/index.html +96 -0
- data/public/CodeMirror/mode/stex/stex.js +167 -0
- data/public/CodeMirror/mode/xml/index.html +42 -0
- data/public/CodeMirror/mode/xml/xml.js +231 -0
- data/public/CodeMirror/mode/yaml/index.html +68 -0
- data/public/CodeMirror/mode/yaml/yaml.js +95 -0
- data/public/CodeMirror/oldrelease.html +178 -0
- data/public/CodeMirror/test/index.html +29 -0
- data/public/CodeMirror/test/test.js +249 -0
- data/public/CodeMirror/theme/default.css +18 -0
- data/public/CodeMirror/theme/elegant.css +9 -0
- data/public/CodeMirror/theme/jtalk.css +21 -0
- data/public/CodeMirror/theme/neat.css +8 -0
- data/public/CodeMirror/theme/night.css +20 -0
- data/public/css/jtalk.css +362 -0
- data/public/css/style.css +456 -0
- data/public/css/sunit.css +66 -0
- data/public/ide/fork_me.png +0 -0
- data/public/ide/screen2.png +0 -0
- data/public/ide/style.css +456 -0
- data/public/ide/syntax.css +61 -0
- data/public/ide/text_header.png +0 -0
- data/public/ide/title_container1.png +0 -0
- data/public/images/background_box.png +0 -0
- data/public/images/background_header.png +0 -0
- data/public/images/balloon_header.png +0 -0
- data/views/index.haml +66 -0
- metadata +341 -0
@@ -0,0 +1,151 @@
|
|
1
|
+
(function () {
|
2
|
+
// Minimal event-handling wrapper.
|
3
|
+
function stopEvent() {
|
4
|
+
if (this.preventDefault) {this.preventDefault(); this.stopPropagation();}
|
5
|
+
else {this.returnValue = false; this.cancelBubble = true;}
|
6
|
+
}
|
7
|
+
function addStop(event) {
|
8
|
+
if (!event.stop) event.stop = stopEvent;
|
9
|
+
return event;
|
10
|
+
}
|
11
|
+
function connect(node, type, handler) {
|
12
|
+
function wrapHandler(event) {handler(addStop(event || window.event));}
|
13
|
+
if (typeof node.addEventListener == "function")
|
14
|
+
node.addEventListener(type, wrapHandler, false);
|
15
|
+
else
|
16
|
+
node.attachEvent("on" + type, wrapHandler);
|
17
|
+
}
|
18
|
+
|
19
|
+
function forEach(arr, f) {
|
20
|
+
for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]);
|
21
|
+
}
|
22
|
+
|
23
|
+
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
|
24
|
+
lineNumbers: true,
|
25
|
+
theme: "night",
|
26
|
+
onKeyEvent: function(i, e) {
|
27
|
+
// Hook into ctrl-space
|
28
|
+
if (e.keyCode == 32 && (e.ctrlKey || e.metaKey) && !e.altKey) {
|
29
|
+
e.stop();
|
30
|
+
return startComplete();
|
31
|
+
}
|
32
|
+
}
|
33
|
+
});
|
34
|
+
|
35
|
+
function startComplete() {
|
36
|
+
// We want a single cursor position.
|
37
|
+
if (editor.somethingSelected()) return;
|
38
|
+
// Find the token at the cursor
|
39
|
+
var cur = editor.getCursor(false), token = editor.getTokenAt(cur), tprop = token;
|
40
|
+
// If it's not a 'word-style' token, ignore the token.
|
41
|
+
if (!/^[\w$_]*$/.test(token.string)) {
|
42
|
+
token = tprop = {start: cur.ch, end: cur.ch, string: "", state: token.state,
|
43
|
+
className: token.string == "." ? "js-property" : null};
|
44
|
+
}
|
45
|
+
// If it is a property, find out what it is a property of.
|
46
|
+
while (tprop.className == "js-property") {
|
47
|
+
tprop = editor.getTokenAt({line: cur.line, ch: tprop.start});
|
48
|
+
if (tprop.string != ".") return;
|
49
|
+
tprop = editor.getTokenAt({line: cur.line, ch: tprop.start});
|
50
|
+
if (!context) var context = [];
|
51
|
+
context.push(tprop);
|
52
|
+
}
|
53
|
+
var completions = getCompletions(token, context);
|
54
|
+
if (!completions.length) return;
|
55
|
+
function insert(str) {
|
56
|
+
editor.replaceRange(str, {line: cur.line, ch: token.start}, {line: cur.line, ch: token.end});
|
57
|
+
}
|
58
|
+
// When there is only one completion, use it directly.
|
59
|
+
if (completions.length == 1) {insert(completions[0]); return true;}
|
60
|
+
|
61
|
+
// Build the select widget
|
62
|
+
var complete = document.createElement("div");
|
63
|
+
complete.className = "completions";
|
64
|
+
var sel = complete.appendChild(document.createElement("select"));
|
65
|
+
sel.multiple = true;
|
66
|
+
for (var i = 0; i < completions.length; ++i) {
|
67
|
+
var opt = sel.appendChild(document.createElement("option"));
|
68
|
+
opt.appendChild(document.createTextNode(completions[i]));
|
69
|
+
}
|
70
|
+
sel.firstChild.selected = true;
|
71
|
+
sel.size = Math.min(10, completions.length);
|
72
|
+
var pos = editor.cursorCoords();
|
73
|
+
complete.style.left = pos.x + "px";
|
74
|
+
complete.style.top = pos.yBot + "px";
|
75
|
+
document.body.appendChild(complete);
|
76
|
+
// Hack to hide the scrollbar.
|
77
|
+
if (completions.length <= 10)
|
78
|
+
complete.style.width = (sel.clientWidth - 1) + "px";
|
79
|
+
|
80
|
+
var done = false;
|
81
|
+
function close() {
|
82
|
+
if (done) return;
|
83
|
+
done = true;
|
84
|
+
complete.parentNode.removeChild(complete);
|
85
|
+
}
|
86
|
+
function pick() {
|
87
|
+
insert(sel.options[sel.selectedIndex].value);
|
88
|
+
close();
|
89
|
+
setTimeout(function(){editor.focus();}, 50);
|
90
|
+
}
|
91
|
+
connect(sel, "blur", close);
|
92
|
+
connect(sel, "keydown", function(event) {
|
93
|
+
var code = event.keyCode;
|
94
|
+
// Enter and space
|
95
|
+
if (code == 13 || code == 32) {event.stop(); pick();}
|
96
|
+
// Escape
|
97
|
+
else if (code == 27) {event.stop(); close(); editor.focus();}
|
98
|
+
else if (code != 38 && code != 40) {close(); editor.focus(); setTimeout(startComplete, 50);}
|
99
|
+
});
|
100
|
+
connect(sel, "dblclick", pick);
|
101
|
+
|
102
|
+
sel.focus();
|
103
|
+
// Opera sometimes ignores focusing a freshly created node
|
104
|
+
if (window.opera) setTimeout(function(){if (!done) sel.focus();}, 100);
|
105
|
+
return true;
|
106
|
+
}
|
107
|
+
|
108
|
+
var stringProps = ("charAt charCodeAt indexOf lastIndexOf substring substr slice trim trimLeft trimRight " +
|
109
|
+
"toUpperCase toLowerCase split concat match replace search").split(" ");
|
110
|
+
var arrayProps = ("length concat join splice push pop shift unshift slice reverse sort indexOf " +
|
111
|
+
"lastIndexOf every some filter forEach map reduce reduceRight ").split(" ");
|
112
|
+
var funcProps = "prototype apply call bind".split(" ");
|
113
|
+
var keywords = ("break case catch continue debugger default delete do else false finally for function " +
|
114
|
+
"if in instanceof new null return switch throw true try typeof var void while with").split(" ");
|
115
|
+
|
116
|
+
function getCompletions(token, context) {
|
117
|
+
var found = [], start = token.string;
|
118
|
+
function maybeAdd(str) {
|
119
|
+
if (str.indexOf(start) == 0) found.push(str);
|
120
|
+
}
|
121
|
+
function gatherCompletions(obj) {
|
122
|
+
if (typeof obj == "string") forEach(stringProps, maybeAdd);
|
123
|
+
else if (obj instanceof Array) forEach(arrayProps, maybeAdd);
|
124
|
+
else if (obj instanceof Function) forEach(funcProps, maybeAdd);
|
125
|
+
for (var name in obj) maybeAdd(name);
|
126
|
+
}
|
127
|
+
|
128
|
+
if (context) {
|
129
|
+
// If this is a property, see if it belongs to some object we can
|
130
|
+
// find in the current environment.
|
131
|
+
var obj = context.pop(), base;
|
132
|
+
if (obj.className == "js-variable")
|
133
|
+
base = window[obj.string];
|
134
|
+
else if (obj.className == "js-string")
|
135
|
+
base = "";
|
136
|
+
else if (obj.className == "js-atom")
|
137
|
+
base = 1;
|
138
|
+
while (base != null && context.length)
|
139
|
+
base = base[context.pop().string];
|
140
|
+
if (base != null) gatherCompletions(base);
|
141
|
+
}
|
142
|
+
else {
|
143
|
+
// If not, just look in the window object and any local scope
|
144
|
+
// (reading into JS mode internals to get at the local variables)
|
145
|
+
for (var v = token.state.localVars; v; v = v.next) maybeAdd(v.name);
|
146
|
+
gatherCompletions(window);
|
147
|
+
forEach(keywords, maybeAdd);
|
148
|
+
}
|
149
|
+
return found;
|
150
|
+
}
|
151
|
+
})();
|
@@ -0,0 +1,158 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>CodeMirror 2: Full Screen Editing</title>
|
5
|
+
<link rel="stylesheet" href="../lib/codemirror.css">
|
6
|
+
<script src="../lib/codemirror.js"></script>
|
7
|
+
<link rel="stylesheet" href="../theme/default.css">
|
8
|
+
<link rel="stylesheet" href="../theme/night.css">
|
9
|
+
<script src="../mode/xml/xml.js"></script>
|
10
|
+
<link rel="stylesheet" href="../css/docs.css">
|
11
|
+
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
|
12
|
+
|
13
|
+
<style type="text/css">
|
14
|
+
.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}
|
15
|
+
.fullscreen {
|
16
|
+
display: block;
|
17
|
+
position: absolute;
|
18
|
+
top: 0;
|
19
|
+
left: 0;
|
20
|
+
width: 100%;
|
21
|
+
height: 100%;
|
22
|
+
z-index: 9999;
|
23
|
+
margin: 0;
|
24
|
+
padding: 0;
|
25
|
+
border: 0px solid #BBBBBB;
|
26
|
+
opacity: 1;
|
27
|
+
}
|
28
|
+
</style>
|
29
|
+
</head>
|
30
|
+
<body>
|
31
|
+
<h1>CodeMirror 2: Full Screen Editing</h1>
|
32
|
+
|
33
|
+
<form><textarea id="code" name="code" rows="5">
|
34
|
+
<dt id="option_indentWithTabs"><code>indentWithTabs (boolean)</code></dt>
|
35
|
+
<dd>Whether, when indenting, the first N*8 spaces should be
|
36
|
+
replaced by N tabs. Default is false.</dd>
|
37
|
+
|
38
|
+
<dt id="option_tabMode"><code>tabMode (string)</code></dt>
|
39
|
+
<dd>Determines what happens when the user presses the tab key.
|
40
|
+
Must be one of the following:
|
41
|
+
<dl>
|
42
|
+
<dt><code>"classic" (the default)</code></dt>
|
43
|
+
<dd>When nothing is selected, insert a tab. Otherwise,
|
44
|
+
behave like the <code>"shift"</code> mode. (When shift is
|
45
|
+
held, this behaves like the <code>"indent"</code> mode.)</dd>
|
46
|
+
<dt><code>"shift"</code></dt>
|
47
|
+
<dd>Indent all selected lines by
|
48
|
+
one <a href="#option_indentUnit"><code>indentUnit</code></a>.
|
49
|
+
If shift was held while pressing tab, un-indent all selected
|
50
|
+
lines one unit.</dd>
|
51
|
+
<dt><code>"indent"</code></dt>
|
52
|
+
<dd>Indent the line the 'correctly', based on its syntactic
|
53
|
+
context. Only works if the
|
54
|
+
mode <a href="#indent">supports</a> it.</dd>
|
55
|
+
<dt><code>"default"</code></dt>
|
56
|
+
<dd>Do not capture tab presses, let the browser apply its
|
57
|
+
default behaviour (which usually means it skips to the next
|
58
|
+
control).</dd>
|
59
|
+
</dl></dd>
|
60
|
+
|
61
|
+
<dt id="option_enterMode"><code>enterMode (string)</code></dt>
|
62
|
+
<dd>Determines whether and how new lines are indented when the
|
63
|
+
enter key is pressed. The following modes are supported:
|
64
|
+
<dl>
|
65
|
+
<dt><code>"indent" (the default)</code></dt>
|
66
|
+
<dd>Use the mode's indentation rules to give the new line
|
67
|
+
the correct indentation.</dd>
|
68
|
+
<dt><code>"keep"</code></dt>
|
69
|
+
<dd>Indent the line the same as the previous line.</dd>
|
70
|
+
<dt><code>"flat"</code></dt>
|
71
|
+
<dd>Do not indent the new line.</dd>
|
72
|
+
</dl></dd>
|
73
|
+
|
74
|
+
<dt id="option_enterMode"><code>enterMode (string)</code></dt>
|
75
|
+
<dd>Determines whether and how new lines are indented when the
|
76
|
+
enter key is pressed. The following modes are supported:
|
77
|
+
<dl>
|
78
|
+
<dt><code>"indent" (the default)</code></dt>
|
79
|
+
<dd>Use the mode's indentation rules to give the new line
|
80
|
+
the correct indentation.</dd>
|
81
|
+
<dt><code>"keep"</code></dt>
|
82
|
+
<dd>Indent the line the same as the previous line.</dd>
|
83
|
+
<dt><code>"flat"</code></dt>
|
84
|
+
<dd>Do not indent the new line.</dd>
|
85
|
+
</dl></dd>
|
86
|
+
|
87
|
+
<dt id="option_enterMode"><code>enterMode (string)</code></dt>
|
88
|
+
<dd>Determines whether and how new lines are indented when the
|
89
|
+
enter key is pressed. The following modes are supported:
|
90
|
+
<dl>
|
91
|
+
<dt><code>"indent" (the default)</code></dt>
|
92
|
+
<dd>Use the mode's indentation rules to give the new line
|
93
|
+
the correct indentation.</dd>
|
94
|
+
<dt><code>"keep"</code></dt>
|
95
|
+
<dd>Indent the line the same as the previous line.</dd>
|
96
|
+
<dt><code>"flat"</code></dt>
|
97
|
+
<dd>Do not indent the new line.</dd>
|
98
|
+
</dl></dd>
|
99
|
+
|
100
|
+
<dt id="option_enterMode"><code>enterMode (string)</code></dt>
|
101
|
+
<dd>Determines whether and how new lines are indented when the
|
102
|
+
enter key is pressed. The following modes are supported:
|
103
|
+
<dl>
|
104
|
+
<dt><code>"indent" (the default)</code></dt>
|
105
|
+
<dd>Use the mode's indentation rules to give the new line
|
106
|
+
the correct indentation.</dd>
|
107
|
+
<dt><code>"keep"</code></dt>
|
108
|
+
<dd>Indent the line the same as the previous line.</dd>
|
109
|
+
<dt><code>"flat"</code></dt>
|
110
|
+
<dd>Do not indent the new line.</dd>
|
111
|
+
</dl></dd>
|
112
|
+
|
113
|
+
</textarea></form>
|
114
|
+
<script>
|
115
|
+
|
116
|
+
(function () {
|
117
|
+
|
118
|
+
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
|
119
|
+
lineNumbers: true,
|
120
|
+
theme: "night",
|
121
|
+
onKeyEvent: function(i, e) {
|
122
|
+
// Hook into F11
|
123
|
+
if ((e.keyCode == 122 || e.keyCode == 27) && e.type == 'keydown') {
|
124
|
+
e.stop();
|
125
|
+
return toggleFullscreenEditing();
|
126
|
+
}
|
127
|
+
}
|
128
|
+
});
|
129
|
+
|
130
|
+
function toggleFullscreenEditing()
|
131
|
+
{
|
132
|
+
var editorDiv = $('.CodeMirror-scroll');
|
133
|
+
if (!editorDiv.hasClass('fullscreen')) {
|
134
|
+
toggleFullscreenEditing.beforeFullscreen = { height: editorDiv.height(), width: editorDiv.width() }
|
135
|
+
editorDiv.addClass('fullscreen');
|
136
|
+
editorDiv.height('100%');
|
137
|
+
editorDiv.width('100%');
|
138
|
+
editor.refresh();
|
139
|
+
}
|
140
|
+
else {
|
141
|
+
editorDiv.removeClass('fullscreen');
|
142
|
+
editorDiv.height(toggleFullscreenEditing.beforeFullscreen.height);
|
143
|
+
editorDiv.width(toggleFullscreenEditing.beforeFullscreen.width);
|
144
|
+
editor.refresh();
|
145
|
+
}
|
146
|
+
}
|
147
|
+
|
148
|
+
})();
|
149
|
+
</script>
|
150
|
+
|
151
|
+
<p>Press <strong>F11</strong> (or <strong>ESC</strong> in Safari on Mac OS X) when cursor is in the editor to toggle full screen editing.</p>
|
152
|
+
|
153
|
+
<p><strong>Note:</strong> Does not currently work correctly in IE
|
154
|
+
6 and 7, where setting the height of something
|
155
|
+
to <code>100%</code> doesn't make it full-screen.</p>
|
156
|
+
|
157
|
+
</body>
|
158
|
+
</html>
|
@@ -0,0 +1,53 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>CodeMirror 2: Breakpoint Demo</title>
|
5
|
+
<link rel="stylesheet" href="../lib/codemirror.css">
|
6
|
+
<script src="../lib/codemirror.js"></script>
|
7
|
+
<link rel="stylesheet" href="../theme/default.css">
|
8
|
+
<script src="../mode/javascript/javascript.js"></script>
|
9
|
+
<link rel="stylesheet" href="../css/docs.css">
|
10
|
+
|
11
|
+
<style type="text/css">
|
12
|
+
.CodeMirror-gutter {
|
13
|
+
width: 3em;
|
14
|
+
background: white;
|
15
|
+
}
|
16
|
+
.CodeMirror {
|
17
|
+
border: 1px solid #aaa;
|
18
|
+
}
|
19
|
+
</style>
|
20
|
+
</head>
|
21
|
+
<body>
|
22
|
+
<h1>CodeMirror 2: Breakpoint demo</h1>
|
23
|
+
|
24
|
+
<form><textarea id="code" name="code">
|
25
|
+
CodeMirror.fromTextArea(document.getElementById("code"), {
|
26
|
+
lineNumbers: true,
|
27
|
+
onGutterClick: function(cm, n) {
|
28
|
+
var info = cm.lineInfo(n);
|
29
|
+
if (info.markerText)
|
30
|
+
cm.clearMarker(n);
|
31
|
+
else
|
32
|
+
cm.setMarker(n, "<span style=\"color: #900\">●</span> %N%");
|
33
|
+
}
|
34
|
+
});
|
35
|
+
</textarea></form>
|
36
|
+
|
37
|
+
<p>Click the line-number gutter to add or remove 'breakpoints'.</p>
|
38
|
+
|
39
|
+
<script>
|
40
|
+
CodeMirror.fromTextArea(document.getElementById("code"), {
|
41
|
+
lineNumbers: true,
|
42
|
+
onGutterClick: function(cm, n) {
|
43
|
+
var info = cm.lineInfo(n);
|
44
|
+
if (info.markerText)
|
45
|
+
cm.clearMarker(n);
|
46
|
+
else
|
47
|
+
cm.setMarker(n, "<span style=\"color: #900\">●</span> %N%");
|
48
|
+
}
|
49
|
+
});
|
50
|
+
</script>
|
51
|
+
|
52
|
+
</body>
|
53
|
+
</html>
|
@@ -0,0 +1,57 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>CodeMirror 2: Overlay Parser Demo</title>
|
5
|
+
<link rel="stylesheet" href="../lib/codemirror.css">
|
6
|
+
<script src="../lib/codemirror.js"></script>
|
7
|
+
<script src="../lib/overlay.js"></script>
|
8
|
+
<link rel="stylesheet" href="../theme/default.css">
|
9
|
+
<script src="../mode/xml/xml.js"></script>
|
10
|
+
<link rel="stylesheet" href="../css/docs.css">
|
11
|
+
|
12
|
+
<style type="text/css">
|
13
|
+
.CodeMirror {border: 1px solid black;}
|
14
|
+
.mustache {color: #0ca;}
|
15
|
+
</style>
|
16
|
+
</head>
|
17
|
+
<body>
|
18
|
+
<h1>CodeMirror 2: Overlay Parser Demo</h1>
|
19
|
+
|
20
|
+
<form><textarea id="code" name="code">
|
21
|
+
<html>
|
22
|
+
<body>
|
23
|
+
<h1>{{title}}</h1>
|
24
|
+
<p>These are links to {{things}}:</p>
|
25
|
+
<ul>{{#links}}
|
26
|
+
<li><a href="{{url}}">{{text}}</a></li>
|
27
|
+
{{/links}}</ul>
|
28
|
+
</body>
|
29
|
+
</html>
|
30
|
+
</textarea></form>
|
31
|
+
|
32
|
+
<script>
|
33
|
+
CodeMirror.defineMode("mustache", function(config, parserConfig) {
|
34
|
+
var mustacheOverlay = {
|
35
|
+
token: function(stream, state) {
|
36
|
+
if (stream.match("{{")) {
|
37
|
+
while ((ch = stream.next()) != null)
|
38
|
+
if (ch == "}" && stream.next() == "}") break;
|
39
|
+
return "mustache";
|
40
|
+
}
|
41
|
+
while (stream.next() != null && !stream.match("{{", false)) {}
|
42
|
+
return null;
|
43
|
+
}
|
44
|
+
};
|
45
|
+
return CodeMirror.overlayParser(CodeMirror.getMode(config, parserConfig.backdrop || "text/html"), mustacheOverlay);
|
46
|
+
});
|
47
|
+
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {mode: "mustache"});
|
48
|
+
</script>
|
49
|
+
|
50
|
+
<p>Demonstration of a mode that parses HTML, highlighting
|
51
|
+
the <a href="http://mustache.github.com/">Mustache</a> templating
|
52
|
+
directives inside of it by using the code
|
53
|
+
in <a href="../lib/overlay.js"><code>overlay.js</code></a>. View
|
54
|
+
source to see the 15 lines of code needed to accomplish this.</p>
|
55
|
+
|
56
|
+
</body>
|
57
|
+
</html>
|
@@ -0,0 +1,75 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>CodeMirror 2: HTML5 preview</title>
|
5
|
+
<meta charset=utf-8>
|
6
|
+
<script src=../lib/codemirror.js></script>
|
7
|
+
<script src=../mode/xml/xml.js></script>
|
8
|
+
<script src=../mode/javascript/javascript.js></script>
|
9
|
+
<script src=../mode/css/css.js></script>
|
10
|
+
<script src=../mode/htmlmixed/htmlmixed.js></script>
|
11
|
+
<link rel=stylesheet href=../lib/codemirror.css>
|
12
|
+
<link rel=stylesheet href=../theme/default.css>
|
13
|
+
<link rel=stylesheet href=../css/docs.css>
|
14
|
+
<style type=text/css>
|
15
|
+
.CodeMirror {
|
16
|
+
float: left;
|
17
|
+
width: 50%;
|
18
|
+
border: 1px solid black;
|
19
|
+
}
|
20
|
+
iframe {
|
21
|
+
width: 49%;
|
22
|
+
float: left;
|
23
|
+
height: 300px;
|
24
|
+
border: 1px solid black;
|
25
|
+
border-left: 0px;
|
26
|
+
}
|
27
|
+
</style>
|
28
|
+
</head>
|
29
|
+
<body>
|
30
|
+
<h1>CodeMirror 2: HTML5 preview</h1>
|
31
|
+
<textarea id=code name=code>
|
32
|
+
<!doctype html>
|
33
|
+
<html>
|
34
|
+
<head>
|
35
|
+
<title>HTML5 canvas demo</title>
|
36
|
+
<meta charset=utf-8>
|
37
|
+
</head>
|
38
|
+
<body>
|
39
|
+
<canvas id=tutorial width=250 height=250></canvas>
|
40
|
+
<script>
|
41
|
+
var canvas = document.getElementById('tutorial');
|
42
|
+
var context = canvas.getContext('2d');
|
43
|
+
|
44
|
+
context.fillStyle = 'rgb(250,0,0)';
|
45
|
+
context.fillRect(10, 10, 55, 50);
|
46
|
+
|
47
|
+
context.fillStyle = 'rgba(0, 0, 250, 0.5)';
|
48
|
+
context.fillRect(30, 30, 55, 50);
|
49
|
+
</script>
|
50
|
+
</body>
|
51
|
+
</html>
|
52
|
+
</textarea>
|
53
|
+
<iframe id=preview></iframe>
|
54
|
+
<script>
|
55
|
+
var delay;
|
56
|
+
// Initialize CodeMirror editor with a nice html5 canvas demo.
|
57
|
+
var editor = CodeMirror.fromTextArea(document.getElementById('code'), {
|
58
|
+
mode: 'text/html',
|
59
|
+
tabMode: 'indent',
|
60
|
+
onChange: function() {
|
61
|
+
clearTimeout(delay);
|
62
|
+
delay = setTimeout(updatePreview, 300);
|
63
|
+
}
|
64
|
+
});
|
65
|
+
|
66
|
+
function updatePreview() {
|
67
|
+
var preview = document.getElementById('preview').contentDocument;
|
68
|
+
preview.open();
|
69
|
+
preview.write(editor.getValue());
|
70
|
+
preview.close();
|
71
|
+
}
|
72
|
+
setTimeout(updatePreview, 300);
|
73
|
+
</script>
|
74
|
+
</body>
|
75
|
+
</html>
|