maglev-webtools 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (125) hide show
  1. data/LICENSE.txt +25 -0
  2. data/README.rdoc +121 -0
  3. data/bin/webtools +15 -0
  4. data/lib/web_tools/#debugger.rb# +212 -0
  5. data/lib/web_tools/browser.rb +45 -0
  6. data/lib/web_tools/debugger.rb +219 -0
  7. data/lib/web_tools/info.rb +29 -0
  8. data/lib/web_tools/middleware/debugger.rb +118 -0
  9. data/lib/web_tools/support/app_model.rb +117 -0
  10. data/lib/web_tools/support/code_browser.rb +109 -0
  11. data/lib/web_tools/support/ruby.rb +132 -0
  12. data/lib/web_tools/support/service_helper.rb +22 -0
  13. data/lib/web_tools/support/smalltalk_extensions.rb +65 -0
  14. data/lib/web_tools/support/smalltalk_tools.rb +16 -0
  15. data/lib/web_tools/ui.rb +67 -0
  16. data/lib/web_tools.rb +10 -0
  17. data/public/images/favicon.ico +0 -0
  18. data/public/javascript/CodeMirror/LICENSE +23 -0
  19. data/public/javascript/CodeMirror/css/Smalltalk.css +34 -0
  20. data/public/javascript/CodeMirror/js/codemirror.js +582 -0
  21. data/public/javascript/CodeMirror/js/editor.js +1671 -0
  22. data/public/javascript/CodeMirror/js/highlight.js +68 -0
  23. data/public/javascript/CodeMirror/js/parseSmalltalk.js +126 -0
  24. data/public/javascript/CodeMirror/js/parsedummy.js +32 -0
  25. data/public/javascript/CodeMirror/js/select.js +699 -0
  26. data/public/javascript/CodeMirror/js/stringstream.js +159 -0
  27. data/public/javascript/CodeMirror/js/tokenize.js +57 -0
  28. data/public/javascript/CodeMirror/js/undo.js +413 -0
  29. data/public/javascript/CodeMirror/js/util.js +133 -0
  30. data/public/javascript/CodeMirror/testSmalltalkParser.html +116 -0
  31. data/public/javascript/ace/ace-uncompressed.js +17299 -0
  32. data/public/javascript/ace/ace.js +1 -0
  33. data/public/javascript/ace/keybinding-emacs.js +1 -0
  34. data/public/javascript/ace/keybinding-vim.js +1 -0
  35. data/public/javascript/ace/mode-c_cpp.js +1 -0
  36. data/public/javascript/ace/mode-clojure.js +1 -0
  37. data/public/javascript/ace/mode-coffee.js +1 -0
  38. data/public/javascript/ace/mode-csharp.js +1 -0
  39. data/public/javascript/ace/mode-css.js +1 -0
  40. data/public/javascript/ace/mode-groovy.js +1 -0
  41. data/public/javascript/ace/mode-html.js +1 -0
  42. data/public/javascript/ace/mode-java.js +1 -0
  43. data/public/javascript/ace/mode-javascript.js +1 -0
  44. data/public/javascript/ace/mode-json.js +1 -0
  45. data/public/javascript/ace/mode-lua.js +1 -0
  46. data/public/javascript/ace/mode-markdown.js +1 -0
  47. data/public/javascript/ace/mode-ocaml.js +1 -0
  48. data/public/javascript/ace/mode-perl.js +1 -0
  49. data/public/javascript/ace/mode-php.js +1 -0
  50. data/public/javascript/ace/mode-python.js +1 -0
  51. data/public/javascript/ace/mode-ruby.js +1 -0
  52. data/public/javascript/ace/mode-scad.js +1 -0
  53. data/public/javascript/ace/mode-scala.js +1 -0
  54. data/public/javascript/ace/mode-scss.js +1 -0
  55. data/public/javascript/ace/mode-svg.js +1 -0
  56. data/public/javascript/ace/mode-textile.js +1 -0
  57. data/public/javascript/ace/mode-xml.js +1 -0
  58. data/public/javascript/ace/theme-clouds.js +1 -0
  59. data/public/javascript/ace/theme-clouds_midnight.js +1 -0
  60. data/public/javascript/ace/theme-cobalt.js +1 -0
  61. data/public/javascript/ace/theme-crimson_editor.js +1 -0
  62. data/public/javascript/ace/theme-dawn.js +1 -0
  63. data/public/javascript/ace/theme-eclipse.js +1 -0
  64. data/public/javascript/ace/theme-idle_fingers.js +1 -0
  65. data/public/javascript/ace/theme-kr_theme.js +1 -0
  66. data/public/javascript/ace/theme-merbivore.js +1 -0
  67. data/public/javascript/ace/theme-merbivore_soft.js +1 -0
  68. data/public/javascript/ace/theme-mono_industrial.js +1 -0
  69. data/public/javascript/ace/theme-monokai.js +1 -0
  70. data/public/javascript/ace/theme-pastel_on_dark.js +1 -0
  71. data/public/javascript/ace/theme-solarized_dark.js +1 -0
  72. data/public/javascript/ace/theme-solarized_light.js +1 -0
  73. data/public/javascript/ace/theme-textmate.js +1 -0
  74. data/public/javascript/ace/theme-twilight.js +1 -0
  75. data/public/javascript/ace/theme-vibrant_ink.js +1 -0
  76. data/public/javascript/ace/worker-coffee.js +1 -0
  77. data/public/javascript/ace/worker-css.js +1 -0
  78. data/public/javascript/ace/worker-javascript.js +1 -0
  79. data/public/javascript/webtools/#debugger.coffee# +253 -0
  80. data/public/javascript/webtools/browser.js +260 -0
  81. data/public/javascript/webtools/debugger.coffee +286 -0
  82. data/public/javascript/webtools/debugger.js +366 -0
  83. data/public/javascript/webtools/sessions.coffee +17 -0
  84. data/public/javascript/webtools/sessions.js +27 -0
  85. data/public/javascript/webtools/version.coffee +14 -0
  86. data/public/javascript/webtools/version.js +20 -0
  87. data/public/stylesheets/base/images/ui-anim_basic_16x16.gif +0 -0
  88. data/public/stylesheets/base/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  89. data/public/stylesheets/base/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  90. data/public/stylesheets/base/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  91. data/public/stylesheets/base/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  92. data/public/stylesheets/base/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  93. data/public/stylesheets/base/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  94. data/public/stylesheets/base/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  95. data/public/stylesheets/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  96. data/public/stylesheets/base/images/ui-icons_222222_256x240.png +0 -0
  97. data/public/stylesheets/base/images/ui-icons_2e83ff_256x240.png +0 -0
  98. data/public/stylesheets/base/images/ui-icons_454545_256x240.png +0 -0
  99. data/public/stylesheets/base/images/ui-icons_888888_256x240.png +0 -0
  100. data/public/stylesheets/base/images/ui-icons_cd0a0a_256x240.png +0 -0
  101. data/public/stylesheets/base/jquery.ui.accordion.css +12 -0
  102. data/public/stylesheets/base/jquery.ui.all.css +2 -0
  103. data/public/stylesheets/base/jquery.ui.autocomplete.css +39 -0
  104. data/public/stylesheets/base/jquery.ui.base.css +11 -0
  105. data/public/stylesheets/base/jquery.ui.button.css +35 -0
  106. data/public/stylesheets/base/jquery.ui.core.css +37 -0
  107. data/public/stylesheets/base/jquery.ui.datepicker.css +61 -0
  108. data/public/stylesheets/base/jquery.ui.dialog.css +13 -0
  109. data/public/stylesheets/base/jquery.ui.progressbar.css +4 -0
  110. data/public/stylesheets/base/jquery.ui.resizable.css +13 -0
  111. data/public/stylesheets/base/jquery.ui.selectable.css +3 -0
  112. data/public/stylesheets/base/jquery.ui.slider.css +17 -0
  113. data/public/stylesheets/base/jquery.ui.tabs.css +11 -0
  114. data/public/stylesheets/base/jquery.ui.theme.css +247 -0
  115. data/public/stylesheets/jquery.contextMenu.css +62 -0
  116. data/public/stylesheets/reset.css +18 -0
  117. data/public/stylesheets/webtools.css +53 -0
  118. data/public/test.html +47 -0
  119. data/views/browser.rhtml +63 -0
  120. data/views/debugger.rhtml +59 -0
  121. data/views/index.rhtml +8 -0
  122. data/views/layout.rhtml +24 -0
  123. data/views/sessions.rhtml +12 -0
  124. data/views/version.rhtml +10 -0
  125. metadata +316 -0
@@ -0,0 +1,133 @@
1
+ /* A few useful utility functions. */
2
+
3
+ // Capture a method on an object.
4
+ function method(obj, name) {
5
+ return function() {obj[name].apply(obj, arguments);};
6
+ }
7
+
8
+ // The value used to signal the end of a sequence in iterators.
9
+ var StopIteration = {toString: function() {return "StopIteration"}};
10
+
11
+ // Apply a function to each element in a sequence.
12
+ function forEach(iter, f) {
13
+ if (iter.next) {
14
+ try {while (true) f(iter.next());}
15
+ catch (e) {if (e != StopIteration) throw e;}
16
+ }
17
+ else {
18
+ for (var i = 0; i < iter.length; i++)
19
+ f(iter[i]);
20
+ }
21
+ }
22
+
23
+ // Map a function over a sequence, producing an array of results.
24
+ function map(iter, f) {
25
+ var accum = [];
26
+ forEach(iter, function(val) {accum.push(f(val));});
27
+ return accum;
28
+ }
29
+
30
+ // Create a predicate function that tests a string againsts a given
31
+ // regular expression. No longer used but might be used by 3rd party
32
+ // parsers.
33
+ function matcher(regexp){
34
+ return function(value){return regexp.test(value);};
35
+ }
36
+
37
+ // Test whether a DOM node has a certain CSS class.
38
+ function hasClass(element, className) {
39
+ var classes = element.className;
40
+ return classes && new RegExp("(^| )" + className + "($| )").test(classes);
41
+ }
42
+ function removeClass(element, className) {
43
+ element.className = element.className.replace(new RegExp(" " + className + "\\b", "g"), "");
44
+ return element;
45
+ }
46
+
47
+ // Insert a DOM node after another node.
48
+ function insertAfter(newNode, oldNode) {
49
+ var parent = oldNode.parentNode;
50
+ parent.insertBefore(newNode, oldNode.nextSibling);
51
+ return newNode;
52
+ }
53
+
54
+ function removeElement(node) {
55
+ if (node.parentNode)
56
+ node.parentNode.removeChild(node);
57
+ }
58
+
59
+ function clearElement(node) {
60
+ while (node.firstChild)
61
+ node.removeChild(node.firstChild);
62
+ }
63
+
64
+ // Check whether a node is contained in another one.
65
+ function isAncestor(node, child) {
66
+ while (child = child.parentNode) {
67
+ if (node == child)
68
+ return true;
69
+ }
70
+ return false;
71
+ }
72
+
73
+ // The non-breaking space character.
74
+ var nbsp = "\u00a0";
75
+ var matching = {"{": "}", "[": "]", "(": ")",
76
+ "}": "{", "]": "[", ")": "("};
77
+
78
+ // Standardize a few unportable event properties.
79
+ function normalizeEvent(event) {
80
+ if (!event.stopPropagation) {
81
+ event.stopPropagation = function() {this.cancelBubble = true;};
82
+ event.preventDefault = function() {this.returnValue = false;};
83
+ }
84
+ if (!event.stop) {
85
+ event.stop = function() {
86
+ this.stopPropagation();
87
+ this.preventDefault();
88
+ };
89
+ }
90
+
91
+ if (event.type == "keypress") {
92
+ event.code = (event.charCode == null) ? event.keyCode : event.charCode;
93
+ event.character = String.fromCharCode(event.code);
94
+ }
95
+ return event;
96
+ }
97
+
98
+ // Portably register event handlers.
99
+ function addEventHandler(node, type, handler, removeFunc) {
100
+ function wrapHandler(event) {
101
+ handler(normalizeEvent(event || window.event));
102
+ }
103
+ if (typeof node.addEventListener == "function") {
104
+ node.addEventListener(type, wrapHandler, false);
105
+ if (removeFunc) return function() {node.removeEventListener(type, wrapHandler, false);};
106
+ }
107
+ else {
108
+ node.attachEvent("on" + type, wrapHandler);
109
+ if (removeFunc) return function() {node.detachEvent("on" + type, wrapHandler);};
110
+ }
111
+ }
112
+
113
+ function nodeText(node) {
114
+ return node.textContent || node.innerText || node.nodeValue || "";
115
+ }
116
+
117
+ function nodeTop(node) {
118
+ var top = 0;
119
+ while (node.offsetParent) {
120
+ top += node.offsetTop;
121
+ node = node.offsetParent;
122
+ }
123
+ return top;
124
+ }
125
+
126
+ function isBR(node) {
127
+ var nn = node.nodeName;
128
+ return nn == "BR" || nn == "br";
129
+ }
130
+ function isSpan(node) {
131
+ var nn = node.nodeName;
132
+ return nn == "SPAN" || nn == "span";
133
+ }
@@ -0,0 +1,116 @@
1
+ <!--
2
+ This file can be used with jsunit to test the Smalltalk parser.
3
+ -->
4
+ <html>
5
+ <head>
6
+ <title>Test Page for Smalltalk Parser</title>
7
+ <script language="javascript" src="/~jfoster/scripts/jquery.js"></script>
8
+ <script language="javascript" src="/~jfoster/jsunit/app/jsUnitCore.js"></script>
9
+ <script language="javascript" src="/~jfoster/CodeMirror/js/stringstream.js"></script>
10
+ <script language="javascript" src="/~jfoster/CodeMirror/js/tokenize.js"></script>
11
+ <script language="javascript" src="/~jfoster/CodeMirror/js/highlight.js"></script>
12
+ <script language="javascript" src="/~jfoster/CodeMirror/js/parseSmalltalk.js"></script>
13
+ </head>
14
+ <body>
15
+ <div style="display: none;" />
16
+ <script language="javascript">
17
+ function testCharacter() {
18
+ highlightText("$a $b", result, SmalltalkParser);
19
+ return;
20
+ function result(spanNodes) {
21
+ assertEquals("element count", 2, spanNodes.length);
22
+ assertEquals("span tag", "SPAN", spanNodes[0].tagName);
23
+ assertEquals("span class", "st-character", $(spanNodes[0]).attr("class"));
24
+ assertEquals("span html", "$a ", $(spanNodes[0]).html());
25
+ assertEquals("span tag", "SPAN", spanNodes[1].tagName);
26
+ assertEquals("span class", "st-character", $(spanNodes[1]).attr("class"));
27
+ assertEquals("span html", "$b", $(spanNodes[1]).html());
28
+ }
29
+ }
30
+ function testString() {
31
+ var lineCount = -1;
32
+ highlightText("'abc''def' 'qwe\nrty'", result, SmalltalkParser);
33
+ return;
34
+ function result(spanNodes) {
35
+ ++lineCount;
36
+ switch (lineCount) {
37
+ case 0:
38
+ assertEquals("element count", 2, spanNodes.length);
39
+ assertEquals("span tag", "SPAN", spanNodes[0].tagName);
40
+ assertEquals("span class", "st-string", $(spanNodes[0]).attr("class"));
41
+ assertEquals("span html", "'abc''def' ", $(spanNodes[0]).html());
42
+ assertEquals("span class", "st-string", $(spanNodes[1]).attr("class"));
43
+ assertEquals("span html", "'qwe", $(spanNodes[1]).html());
44
+ break;
45
+ case 1:
46
+ assertEquals("element count", 1, spanNodes.length);
47
+ assertEquals("span class", "st-string", $(spanNodes[0]).attr("class"));
48
+ assertEquals("span html", "rty'", $(spanNodes[0]).html());
49
+ break;
50
+ default:
51
+ fail("Should be only two lines!");
52
+ }
53
+ }
54
+ }
55
+ function testSymbol() {
56
+ highlightText("#'abc' #a #_a1 #a1:b2: # ", result, SmalltalkParser);
57
+ return;
58
+ function result(spanNodes) {
59
+ assertEquals("element count", 5, spanNodes.length);
60
+ assertEquals("span tag", "SPAN", spanNodes[0].tagName);
61
+ assertEquals("span class", "st-symbol", $(spanNodes[0]).attr("class"));
62
+ assertEquals("span html", "#'abc' ", $(spanNodes[0]).html());
63
+ assertEquals("span class", "st-symbol", $(spanNodes[1]).attr("class"));
64
+ assertEquals("span html", "#a ", $(spanNodes[1]).html());
65
+ assertEquals("span class", "st-symbol", $(spanNodes[2]).attr("class"));
66
+ assertEquals("span html", "#_a1 ", $(spanNodes[2]).html());
67
+ assertEquals("span class", "st-symbol", $(spanNodes[3]).attr("class"));
68
+ assertEquals("span html", "#a1:b2: ", $(spanNodes[3]).html());
69
+ assertEquals("span class", "st-error", $(spanNodes[4]).attr("class"));
70
+ assertEquals("span html", "# ", $(spanNodes[4]).html());
71
+ }
72
+ }
73
+ function testIdentifier() {
74
+ highlightText("a _a a_1", result, SmalltalkParser);
75
+ return;
76
+ function result(spanNodes) {
77
+ assertEquals("element count", 3, spanNodes.length);
78
+ assertEquals("span class", "st-identifier", $(spanNodes[0]).attr("class"));
79
+ assertEquals("span class", "st-identifier", $(spanNodes[1]).attr("class"));
80
+ assertEquals("span class", "st-identifier", $(spanNodes[2]).attr("class"));
81
+ }
82
+ }
83
+ function testKeyword() {
84
+ highlightText("foo:", result, SmalltalkParser);
85
+ return;
86
+ function result(spanNodes) {
87
+ assertEquals("element count", 1, spanNodes.length);
88
+ assertEquals("span class", "st-keyword", $(spanNodes[0]).attr("class"));
89
+ assertEquals("span html", "foo:", $(spanNodes[0]).html());
90
+ }
91
+ }
92
+ function testSpecialLiterals() {
93
+ highlightText("true false self super nil ", result, SmalltalkParser);
94
+ return;
95
+ function result(spanNodes) {
96
+ assertEquals("element count", 5, spanNodes.length);
97
+ assertEquals("span class", "st-boolean", $(spanNodes[0]).attr("class"));
98
+ assertEquals("span class", "st-boolean", $(spanNodes[1]).attr("class"));
99
+ assertEquals("span class", "st-self", $(spanNodes[2]).attr("class"));
100
+ assertEquals("span class", "st-super", $(spanNodes[3]).attr("class"));
101
+ assertEquals("span class", "st-nil", $(spanNodes[4]).attr("class"));
102
+ }
103
+ }
104
+ function testOperators() {
105
+ highlightText("^#a ", result, SmalltalkParser);
106
+ return;
107
+ function result(spanNodes) {
108
+ assertEquals("element count", 2, spanNodes.length);
109
+ assertEquals("span class", "st-return", $(spanNodes[0]).attr("class"));
110
+ assertEquals("span class", "st-symbol", $(spanNodes[1]).attr("class"));
111
+ }
112
+ }
113
+
114
+ </script>
115
+ </body>
116
+ </html>