maglev-webtools 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.txt +25 -0
- data/README.rdoc +121 -0
- data/bin/webtools +15 -0
- data/lib/web_tools/#debugger.rb# +212 -0
- data/lib/web_tools/browser.rb +45 -0
- data/lib/web_tools/debugger.rb +219 -0
- data/lib/web_tools/info.rb +29 -0
- data/lib/web_tools/middleware/debugger.rb +118 -0
- data/lib/web_tools/support/app_model.rb +117 -0
- data/lib/web_tools/support/code_browser.rb +109 -0
- data/lib/web_tools/support/ruby.rb +132 -0
- data/lib/web_tools/support/service_helper.rb +22 -0
- data/lib/web_tools/support/smalltalk_extensions.rb +65 -0
- data/lib/web_tools/support/smalltalk_tools.rb +16 -0
- data/lib/web_tools/ui.rb +67 -0
- data/lib/web_tools.rb +10 -0
- data/public/images/favicon.ico +0 -0
- data/public/javascript/CodeMirror/LICENSE +23 -0
- data/public/javascript/CodeMirror/css/Smalltalk.css +34 -0
- data/public/javascript/CodeMirror/js/codemirror.js +582 -0
- data/public/javascript/CodeMirror/js/editor.js +1671 -0
- data/public/javascript/CodeMirror/js/highlight.js +68 -0
- data/public/javascript/CodeMirror/js/parseSmalltalk.js +126 -0
- data/public/javascript/CodeMirror/js/parsedummy.js +32 -0
- data/public/javascript/CodeMirror/js/select.js +699 -0
- data/public/javascript/CodeMirror/js/stringstream.js +159 -0
- data/public/javascript/CodeMirror/js/tokenize.js +57 -0
- data/public/javascript/CodeMirror/js/undo.js +413 -0
- data/public/javascript/CodeMirror/js/util.js +133 -0
- data/public/javascript/CodeMirror/testSmalltalkParser.html +116 -0
- data/public/javascript/ace/ace-uncompressed.js +17299 -0
- data/public/javascript/ace/ace.js +1 -0
- data/public/javascript/ace/keybinding-emacs.js +1 -0
- data/public/javascript/ace/keybinding-vim.js +1 -0
- data/public/javascript/ace/mode-c_cpp.js +1 -0
- data/public/javascript/ace/mode-clojure.js +1 -0
- data/public/javascript/ace/mode-coffee.js +1 -0
- data/public/javascript/ace/mode-csharp.js +1 -0
- data/public/javascript/ace/mode-css.js +1 -0
- data/public/javascript/ace/mode-groovy.js +1 -0
- data/public/javascript/ace/mode-html.js +1 -0
- data/public/javascript/ace/mode-java.js +1 -0
- data/public/javascript/ace/mode-javascript.js +1 -0
- data/public/javascript/ace/mode-json.js +1 -0
- data/public/javascript/ace/mode-lua.js +1 -0
- data/public/javascript/ace/mode-markdown.js +1 -0
- data/public/javascript/ace/mode-ocaml.js +1 -0
- data/public/javascript/ace/mode-perl.js +1 -0
- data/public/javascript/ace/mode-php.js +1 -0
- data/public/javascript/ace/mode-python.js +1 -0
- data/public/javascript/ace/mode-ruby.js +1 -0
- data/public/javascript/ace/mode-scad.js +1 -0
- data/public/javascript/ace/mode-scala.js +1 -0
- data/public/javascript/ace/mode-scss.js +1 -0
- data/public/javascript/ace/mode-svg.js +1 -0
- data/public/javascript/ace/mode-textile.js +1 -0
- data/public/javascript/ace/mode-xml.js +1 -0
- data/public/javascript/ace/theme-clouds.js +1 -0
- data/public/javascript/ace/theme-clouds_midnight.js +1 -0
- data/public/javascript/ace/theme-cobalt.js +1 -0
- data/public/javascript/ace/theme-crimson_editor.js +1 -0
- data/public/javascript/ace/theme-dawn.js +1 -0
- data/public/javascript/ace/theme-eclipse.js +1 -0
- data/public/javascript/ace/theme-idle_fingers.js +1 -0
- data/public/javascript/ace/theme-kr_theme.js +1 -0
- data/public/javascript/ace/theme-merbivore.js +1 -0
- data/public/javascript/ace/theme-merbivore_soft.js +1 -0
- data/public/javascript/ace/theme-mono_industrial.js +1 -0
- data/public/javascript/ace/theme-monokai.js +1 -0
- data/public/javascript/ace/theme-pastel_on_dark.js +1 -0
- data/public/javascript/ace/theme-solarized_dark.js +1 -0
- data/public/javascript/ace/theme-solarized_light.js +1 -0
- data/public/javascript/ace/theme-textmate.js +1 -0
- data/public/javascript/ace/theme-twilight.js +1 -0
- data/public/javascript/ace/theme-vibrant_ink.js +1 -0
- data/public/javascript/ace/worker-coffee.js +1 -0
- data/public/javascript/ace/worker-css.js +1 -0
- data/public/javascript/ace/worker-javascript.js +1 -0
- data/public/javascript/webtools/#debugger.coffee# +253 -0
- data/public/javascript/webtools/browser.js +260 -0
- data/public/javascript/webtools/debugger.coffee +286 -0
- data/public/javascript/webtools/debugger.js +366 -0
- data/public/javascript/webtools/sessions.coffee +17 -0
- data/public/javascript/webtools/sessions.js +27 -0
- data/public/javascript/webtools/version.coffee +14 -0
- data/public/javascript/webtools/version.js +20 -0
- data/public/stylesheets/base/images/ui-anim_basic_16x16.gif +0 -0
- data/public/stylesheets/base/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/public/stylesheets/base/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/public/stylesheets/base/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/public/stylesheets/base/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/public/stylesheets/base/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/public/stylesheets/base/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/public/stylesheets/base/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/public/stylesheets/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/public/stylesheets/base/images/ui-icons_222222_256x240.png +0 -0
- data/public/stylesheets/base/images/ui-icons_2e83ff_256x240.png +0 -0
- data/public/stylesheets/base/images/ui-icons_454545_256x240.png +0 -0
- data/public/stylesheets/base/images/ui-icons_888888_256x240.png +0 -0
- data/public/stylesheets/base/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/stylesheets/base/jquery.ui.accordion.css +12 -0
- data/public/stylesheets/base/jquery.ui.all.css +2 -0
- data/public/stylesheets/base/jquery.ui.autocomplete.css +39 -0
- data/public/stylesheets/base/jquery.ui.base.css +11 -0
- data/public/stylesheets/base/jquery.ui.button.css +35 -0
- data/public/stylesheets/base/jquery.ui.core.css +37 -0
- data/public/stylesheets/base/jquery.ui.datepicker.css +61 -0
- data/public/stylesheets/base/jquery.ui.dialog.css +13 -0
- data/public/stylesheets/base/jquery.ui.progressbar.css +4 -0
- data/public/stylesheets/base/jquery.ui.resizable.css +13 -0
- data/public/stylesheets/base/jquery.ui.selectable.css +3 -0
- data/public/stylesheets/base/jquery.ui.slider.css +17 -0
- data/public/stylesheets/base/jquery.ui.tabs.css +11 -0
- data/public/stylesheets/base/jquery.ui.theme.css +247 -0
- data/public/stylesheets/jquery.contextMenu.css +62 -0
- data/public/stylesheets/reset.css +18 -0
- data/public/stylesheets/webtools.css +53 -0
- data/public/test.html +47 -0
- data/views/browser.rhtml +63 -0
- data/views/debugger.rhtml +59 -0
- data/views/index.rhtml +8 -0
- data/views/layout.rhtml +24 -0
- data/views/sessions.rhtml +12 -0
- data/views/version.rhtml +10 -0
- metadata +316 -0
@@ -0,0 +1,68 @@
|
|
1
|
+
// Minimal framing needed to use CodeMirror-style parsers to highlight
|
2
|
+
// code. Load this along with tokenize.js, stringstream.js, and your
|
3
|
+
// parser. Then call highlightText, passing a string as the first
|
4
|
+
// argument, and as the second argument either a callback function
|
5
|
+
// that will be called with an array of SPAN nodes for every line in
|
6
|
+
// the code, or a DOM node to which to append these spans, and
|
7
|
+
// optionally (not needed if you only loaded one parser) a parser
|
8
|
+
// object.
|
9
|
+
|
10
|
+
// Stuff from util.js that the parsers are using.
|
11
|
+
var StopIteration = {toString: function() {return "StopIteration"}};
|
12
|
+
|
13
|
+
var Editor = {};
|
14
|
+
var indentUnit = 2;
|
15
|
+
|
16
|
+
(function(){
|
17
|
+
function normaliseString(string) {
|
18
|
+
var tab = "";
|
19
|
+
for (var i = 0; i < indentUnit; i++) tab += " ";
|
20
|
+
|
21
|
+
string = string.replace(/\t/g, tab).replace(/\u00a0/g, " ").replace(/\r\n?/g, "\n");
|
22
|
+
var pos = 0, parts = [], lines = string.split("\n");
|
23
|
+
for (var line = 0; line < lines.length; line++) {
|
24
|
+
if (line != 0) parts.push("\n");
|
25
|
+
parts.push(lines[line]);
|
26
|
+
}
|
27
|
+
|
28
|
+
return {
|
29
|
+
next: function() {
|
30
|
+
if (pos < parts.length) return parts[pos++];
|
31
|
+
else throw StopIteration;
|
32
|
+
}
|
33
|
+
};
|
34
|
+
}
|
35
|
+
|
36
|
+
window.highlightText = function(string, callback, parser) {
|
37
|
+
parser = (parser || Editor.Parser).make(stringStream(normaliseString(string)));
|
38
|
+
var line = [];
|
39
|
+
if (callback.nodeType == 1) {
|
40
|
+
var node = callback;
|
41
|
+
callback = function(line) {
|
42
|
+
for (var i = 0; i < line.length; i++)
|
43
|
+
node.appendChild(line[i]);
|
44
|
+
node.appendChild(document.createElement("br"));
|
45
|
+
};
|
46
|
+
}
|
47
|
+
|
48
|
+
try {
|
49
|
+
while (true) {
|
50
|
+
var token = parser.next();
|
51
|
+
if (token.value == "\n") {
|
52
|
+
callback(line);
|
53
|
+
line = [];
|
54
|
+
}
|
55
|
+
else {
|
56
|
+
var span = document.createElement("span");
|
57
|
+
span.className = token.style;
|
58
|
+
span.appendChild(document.createTextNode(token.value));
|
59
|
+
line.push(span);
|
60
|
+
}
|
61
|
+
}
|
62
|
+
}
|
63
|
+
catch (e) {
|
64
|
+
if (e != StopIteration) throw e;
|
65
|
+
}
|
66
|
+
if (line.length) callback(line);
|
67
|
+
}
|
68
|
+
})();
|
@@ -0,0 +1,126 @@
|
|
1
|
+
/* Simple parser for Smalltalk */
|
2
|
+
|
3
|
+
var SmalltalkParser = (function() {
|
4
|
+
var tokenizeSmalltalk = (function() {
|
5
|
+
var identifierTest = /[A-Za-z0-9_]/;
|
6
|
+
function normal(source, setState) {
|
7
|
+
var char = source.next();
|
8
|
+
if (char == ' ' || char == '\t') {
|
9
|
+
return 'whitespace';
|
10
|
+
}
|
11
|
+
if (char == '\n') {
|
12
|
+
return 'newline';
|
13
|
+
}
|
14
|
+
if (/[A-Za-z]/.test(char) || (char == '_' && identifierTest.test(source.peek()))) {
|
15
|
+
source.nextWhileMatches(identifierTest);
|
16
|
+
if (!source.endOfLine() && source.peek() == ':') {
|
17
|
+
source.next();
|
18
|
+
return 'st-keyword';
|
19
|
+
}
|
20
|
+
return 'st-identifier';
|
21
|
+
}
|
22
|
+
if (char == '$') {
|
23
|
+
if (source.endOfLine()) return 'st-error';
|
24
|
+
source.next();
|
25
|
+
return 'st-character';
|
26
|
+
}
|
27
|
+
if (char == '^') {
|
28
|
+
return 'st-return';
|
29
|
+
}
|
30
|
+
else if (char == "'") {
|
31
|
+
setState(inString("'", 'st-string'));
|
32
|
+
return null;
|
33
|
+
}
|
34
|
+
else if (char == '"') {
|
35
|
+
setState(inString('"', 'st-comment'));
|
36
|
+
return null;
|
37
|
+
}
|
38
|
+
else if (char == '#') {
|
39
|
+
if (source.endOfLine()) return 'st-error';
|
40
|
+
char = source.next();
|
41
|
+
if (char == "'") {
|
42
|
+
setState(inString("'", 'st-symbol'));
|
43
|
+
return null;
|
44
|
+
} else {
|
45
|
+
if (/[A-Za-z]/.test(char) || (char == '_' && identifierTest.test(source.peek()))) {
|
46
|
+
source.nextWhileMatches(/[A-Za-z0-9_:]/);
|
47
|
+
return 'st-symbol';
|
48
|
+
}
|
49
|
+
}
|
50
|
+
return 'st-error';
|
51
|
+
}
|
52
|
+
return 'st-other';
|
53
|
+
}
|
54
|
+
|
55
|
+
function inString(endChar, styleClass) {
|
56
|
+
return function(source, setState) {
|
57
|
+
while (true) {
|
58
|
+
if (source.endOfLine())
|
59
|
+
return styleClass;
|
60
|
+
if (source.next() == endChar) {
|
61
|
+
if (!source.endOfLine() && source.peek() == endChar)
|
62
|
+
source.next();
|
63
|
+
else
|
64
|
+
break;
|
65
|
+
}
|
66
|
+
}
|
67
|
+
setState(normal);
|
68
|
+
return styleClass;
|
69
|
+
}
|
70
|
+
}
|
71
|
+
return function(source, startState) {
|
72
|
+
return tokenizer(source, startState || normal);
|
73
|
+
};
|
74
|
+
})();
|
75
|
+
function parseSmalltalk(source, basecolumn) {
|
76
|
+
var tokens = tokenizeSmalltalk(source);
|
77
|
+
var iter = {
|
78
|
+
next: function() {
|
79
|
+
var token = tokens.next()
|
80
|
+
, style = token.style
|
81
|
+
, content = token.content
|
82
|
+
;
|
83
|
+
if (style == 'newline') {
|
84
|
+
token['indentation'] = function(text, current, direction) { };
|
85
|
+
return token;
|
86
|
+
}
|
87
|
+
if (style == 'st-identifier') {
|
88
|
+
if (content == 'true' || content == 'false') {
|
89
|
+
token.style = 'st-boolean';
|
90
|
+
return token;
|
91
|
+
}
|
92
|
+
if (content == 'self') {
|
93
|
+
token.style = 'st-self';
|
94
|
+
return token;
|
95
|
+
}
|
96
|
+
if (content == 'super') {
|
97
|
+
token.style = 'st-super';
|
98
|
+
return token;
|
99
|
+
}
|
100
|
+
if (content == 'nil') {
|
101
|
+
token.style = 'st-nil';
|
102
|
+
return token;
|
103
|
+
}
|
104
|
+
if (content.substring(0,1) == content.substring(0,1).toUpperCase()) {
|
105
|
+
token.style = 'st-global';
|
106
|
+
return token;
|
107
|
+
}
|
108
|
+
}
|
109
|
+
return token;
|
110
|
+
},
|
111
|
+
copy: function() {
|
112
|
+
var _tokenState = tokens.state;
|
113
|
+
return function(source) {
|
114
|
+
tokens = tokenizeSmalltalk(source, _tokenState);
|
115
|
+
return iter;
|
116
|
+
};
|
117
|
+
}
|
118
|
+
};
|
119
|
+
return iter;
|
120
|
+
}
|
121
|
+
return { make: parseSmalltalk };
|
122
|
+
})();
|
123
|
+
|
124
|
+
if (Editor) {
|
125
|
+
Editor.Parser = SmalltalkParser;
|
126
|
+
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
var DummyParser = Editor.Parser = (function() {
|
2
|
+
function tokenizeDummy(source) {
|
3
|
+
while (!source.endOfLine()) source.next();
|
4
|
+
return "text";
|
5
|
+
}
|
6
|
+
function parseDummy(source) {
|
7
|
+
function indentTo(n) {return function() {return n;}}
|
8
|
+
source = tokenizer(source, tokenizeDummy);
|
9
|
+
var space = 0;
|
10
|
+
|
11
|
+
var iter = {
|
12
|
+
next: function() {
|
13
|
+
var tok = source.next();
|
14
|
+
if (tok.type == "whitespace") {
|
15
|
+
if (tok.value == "\n") tok.indentation = indentTo(space);
|
16
|
+
else space = tok.value.length;
|
17
|
+
}
|
18
|
+
return tok;
|
19
|
+
},
|
20
|
+
copy: function() {
|
21
|
+
var _space = space;
|
22
|
+
return function(_source) {
|
23
|
+
space = _space;
|
24
|
+
source = tokenizer(_source, tokenizeDummy);
|
25
|
+
return iter;
|
26
|
+
};
|
27
|
+
}
|
28
|
+
};
|
29
|
+
return iter;
|
30
|
+
}
|
31
|
+
return {make: parseDummy};
|
32
|
+
})();
|