maglev-webtools 0.2.1 → 1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. data/README.rdoc +38 -29
  2. data/bin/webtools +22 -1
  3. data/lib/web_tools/code_browser.rb +156 -0
  4. data/lib/web_tools/debugger.rb +96 -199
  5. data/lib/web_tools/info.rb +1 -3
  6. data/lib/web_tools/method_list.rb +67 -0
  7. data/lib/web_tools/middleware/debugger.rb +10 -16
  8. data/lib/web_tools/object_log.rb +24 -0
  9. data/lib/web_tools/session_list.rb +119 -0
  10. data/lib/web_tools/shared_page_cache.rb +30 -0
  11. data/lib/web_tools/stat_process.rb +24 -0
  12. data/lib/web_tools/statistics.rb +14 -0
  13. data/lib/web_tools/support/app_model.rb +66 -101
  14. data/lib/web_tools/support/code_browser.rb +88 -86
  15. data/lib/web_tools/support/debugger.rb +303 -0
  16. data/lib/web_tools/support/error_log.rb +33 -0
  17. data/lib/web_tools/support/ruby.rb +60 -121
  18. data/lib/web_tools/support/service_helper.rb +38 -10
  19. data/lib/web_tools/support/smalltalk_extensions.rb +12 -0
  20. data/lib/web_tools/tool.rb +48 -0
  21. data/lib/web_tools/ui.rb +14 -53
  22. data/lib/web_tools/version_report.rb +29 -0
  23. data/lib/web_tools/workspace.rb +77 -0
  24. data/lib/web_tools.rb +14 -4
  25. data/public/CodeBrowser.html +51 -0
  26. data/public/CodeMirror/LICENSE +19 -0
  27. data/public/CodeMirror/css/codemirror.css +67 -0
  28. data/public/CodeMirror/css/default.css +18 -0
  29. data/public/CodeMirror/js/codemirror.js +2131 -0
  30. data/public/CodeMirror/js/ruby.js +195 -0
  31. data/public/CodeMirror/js/smalltalk.js +139 -0
  32. data/public/Debugger.html +28 -0
  33. data/public/MethodList.html +20 -0
  34. data/public/ObjectLog.html +20 -0
  35. data/public/SessionList.html +31 -0
  36. data/public/SharedPageCache.html +78 -0
  37. data/public/Statistics.html +64 -0
  38. data/public/VersionReport.html +50 -0
  39. data/public/Workspace.html +39 -0
  40. data/public/css/CodeBrowser.css +24 -0
  41. data/public/css/Debugger.css +32 -0
  42. data/public/css/MethodList.css +8 -0
  43. data/public/css/ObjectLog.css +5 -0
  44. data/public/css/SessionList.css +9 -0
  45. data/public/css/Statistics.css +24 -0
  46. data/public/{stylesheets → css}/base/images/ui-anim_basic_16x16.gif +0 -0
  47. data/public/{stylesheets → css}/base/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  48. data/public/{stylesheets → css}/base/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  49. data/public/{stylesheets → css}/base/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  50. data/public/{stylesheets → css}/base/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  51. data/public/{stylesheets → css}/base/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  52. data/public/{stylesheets → css}/base/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  53. data/public/{stylesheets → css}/base/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  54. data/public/{stylesheets → css}/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  55. data/public/{stylesheets → css}/base/images/ui-icons_222222_256x240.png +0 -0
  56. data/public/{stylesheets → css}/base/images/ui-icons_2e83ff_256x240.png +0 -0
  57. data/public/{stylesheets → css}/base/images/ui-icons_454545_256x240.png +0 -0
  58. data/public/{stylesheets → css}/base/images/ui-icons_888888_256x240.png +0 -0
  59. data/public/{stylesheets → css}/base/images/ui-icons_cd0a0a_256x240.png +0 -0
  60. data/public/{stylesheets → css}/base/jquery.ui.accordion.css +0 -0
  61. data/public/{stylesheets → css}/base/jquery.ui.all.css +0 -0
  62. data/public/{stylesheets → css}/base/jquery.ui.autocomplete.css +0 -0
  63. data/public/{stylesheets → css}/base/jquery.ui.base.css +0 -0
  64. data/public/{stylesheets → css}/base/jquery.ui.button.css +0 -0
  65. data/public/{stylesheets → css}/base/jquery.ui.core.css +0 -0
  66. data/public/{stylesheets → css}/base/jquery.ui.datepicker.css +0 -0
  67. data/public/{stylesheets → css}/base/jquery.ui.dialog.css +0 -0
  68. data/public/{stylesheets → css}/base/jquery.ui.progressbar.css +0 -0
  69. data/public/{stylesheets → css}/base/jquery.ui.resizable.css +0 -0
  70. data/public/{stylesheets → css}/base/jquery.ui.selectable.css +0 -0
  71. data/public/{stylesheets → css}/base/jquery.ui.slider.css +0 -0
  72. data/public/{stylesheets → css}/base/jquery.ui.tabs.css +0 -0
  73. data/public/{stylesheets → css}/base/jquery.ui.theme.css +0 -0
  74. data/public/css/editor.css +25 -0
  75. data/public/css/jjmenu.css +33 -0
  76. data/public/css/menuitem.gif +0 -0
  77. data/public/css/more.gif +0 -0
  78. data/public/{stylesheets → css}/reset.css +1 -1
  79. data/public/css/smoothness/images/ui-anim_basic_16x16.gif +0 -0
  80. data/public/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  81. data/public/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  82. data/public/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  83. data/public/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  84. data/public/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  85. data/public/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  86. data/public/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  87. data/public/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  88. data/public/css/smoothness/images/ui-icons_222222_256x240.png +0 -0
  89. data/public/css/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  90. data/public/css/smoothness/images/ui-icons_454545_256x240.png +0 -0
  91. data/public/css/smoothness/images/ui-icons_888888_256x240.png +0 -0
  92. data/public/css/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  93. data/public/css/smoothness/jquery-ui.css +489 -0
  94. data/public/css/ui-lightness/images/ui-anim_basic_16x16.gif +0 -0
  95. data/public/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  96. data/public/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  97. data/public/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  98. data/public/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  99. data/public/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  100. data/public/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  101. data/public/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  102. data/public/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  103. data/public/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  104. data/public/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  105. data/public/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  106. data/public/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  107. data/public/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  108. data/public/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  109. data/public/css/ui-lightness/jquery-ui.css +489 -0
  110. data/public/css/webtools.css +65 -0
  111. data/public/favicon.ico +0 -0
  112. data/public/flot/API.txt +1201 -0
  113. data/public/flot/FAQ.txt +76 -0
  114. data/public/flot/LICENSE.txt +22 -0
  115. data/public/flot/Makefile +9 -0
  116. data/public/flot/NEWS.txt +508 -0
  117. data/public/flot/PLUGINS.txt +137 -0
  118. data/public/flot/README.txt +90 -0
  119. data/public/flot/examples/ajax.html +143 -0
  120. data/public/flot/examples/annotating.html +75 -0
  121. data/public/flot/examples/arrow-down.gif +0 -0
  122. data/public/flot/examples/arrow-left.gif +0 -0
  123. data/public/flot/examples/arrow-right.gif +0 -0
  124. data/public/flot/examples/arrow-up.gif +0 -0
  125. data/public/flot/examples/basic.html +38 -0
  126. data/public/flot/examples/data-eu-gdp-growth-1.json +4 -0
  127. data/public/flot/examples/data-eu-gdp-growth-2.json +4 -0
  128. data/public/flot/examples/data-eu-gdp-growth-3.json +4 -0
  129. data/public/flot/examples/data-eu-gdp-growth-4.json +4 -0
  130. data/public/flot/examples/data-eu-gdp-growth-5.json +4 -0
  131. data/public/flot/examples/data-eu-gdp-growth.json +4 -0
  132. data/public/flot/examples/data-japan-gdp-growth.json +4 -0
  133. data/public/flot/examples/data-usa-gdp-growth.json +4 -0
  134. data/public/flot/examples/graph-types.html +75 -0
  135. data/public/flot/examples/hs-2004-27-a-large_web.jpg +0 -0
  136. data/public/flot/examples/image.html +45 -0
  137. data/public/flot/examples/index.html +44 -0
  138. data/public/flot/examples/interacting-axes.html +97 -0
  139. data/public/flot/examples/interacting.html +93 -0
  140. data/public/flot/examples/layout.css +6 -0
  141. data/public/flot/examples/multiple-axes.html +60 -0
  142. data/public/flot/examples/navigate.html +118 -0
  143. data/public/flot/examples/percentiles.html +57 -0
  144. data/public/flot/examples/pie.html +756 -0
  145. data/public/flot/examples/realtime.html +83 -0
  146. data/public/flot/examples/resize.html +61 -0
  147. data/public/flot/examples/selection.html +114 -0
  148. data/public/flot/examples/setting-options.html +61 -0
  149. data/public/flot/examples/stacking.html +77 -0
  150. data/public/flot/examples/symbols.html +49 -0
  151. data/public/flot/examples/thresholding.html +54 -0
  152. data/public/flot/examples/time.html +71 -0
  153. data/public/flot/examples/tracking.html +95 -0
  154. data/public/flot/examples/turning-series.html +98 -0
  155. data/public/flot/examples/visitors.html +90 -0
  156. data/public/flot/examples/zooming.html +98 -0
  157. data/public/flot/excanvas.js +1427 -0
  158. data/public/flot/excanvas.min.js +1 -0
  159. data/public/flot/jquery.colorhelpers.js +179 -0
  160. data/public/flot/jquery.colorhelpers.min.js +1 -0
  161. data/public/flot/jquery.flot.crosshair.js +167 -0
  162. data/public/flot/jquery.flot.crosshair.min.js +1 -0
  163. data/public/flot/jquery.flot.fillbetween.js +183 -0
  164. data/public/flot/jquery.flot.fillbetween.min.js +1 -0
  165. data/public/flot/jquery.flot.image.js +238 -0
  166. data/public/flot/jquery.flot.image.min.js +1 -0
  167. data/public/flot/jquery.flot.js +2599 -0
  168. data/public/flot/jquery.flot.min.js +6 -0
  169. data/public/flot/jquery.flot.navigate.js +336 -0
  170. data/public/flot/jquery.flot.navigate.min.js +1 -0
  171. data/public/flot/jquery.flot.pie.js +750 -0
  172. data/public/flot/jquery.flot.pie.min.js +1 -0
  173. data/public/flot/jquery.flot.resize.js +60 -0
  174. data/public/flot/jquery.flot.resize.min.js +1 -0
  175. data/public/flot/jquery.flot.selection.js +344 -0
  176. data/public/flot/jquery.flot.selection.min.js +1 -0
  177. data/public/flot/jquery.flot.stack.js +184 -0
  178. data/public/flot/jquery.flot.stack.min.js +1 -0
  179. data/public/flot/jquery.flot.symbol.js +70 -0
  180. data/public/flot/jquery.flot.symbol.min.js +1 -0
  181. data/public/flot/jquery.flot.threshold.js +103 -0
  182. data/public/flot/jquery.flot.threshold.min.js +1 -0
  183. data/public/flot/jquery.js +8316 -0
  184. data/public/flot/jquery.min.js +23 -0
  185. data/public/genPacking.pl +30 -0
  186. data/public/index.html +28 -0
  187. data/public/install.tpz +66 -0
  188. data/public/installAndRun.tpz +5 -0
  189. data/public/jsTree/jquery.jstree.js +3510 -0
  190. data/public/jsTree/themes/default/d.gif +0 -0
  191. data/public/jsTree/themes/default/d.png +0 -0
  192. data/public/jsTree/themes/default/style.css +73 -0
  193. data/public/jsTree/themes/default/throbber.gif +0 -0
  194. data/public/readMe.txt +9 -0
  195. data/public/scripts/CodeBrowser.js +645 -0
  196. data/public/scripts/Debugger.js +134 -0
  197. data/public/scripts/MethodList.js +72 -0
  198. data/public/scripts/ObjectLog.js +59 -0
  199. data/public/scripts/SessionList.js +164 -0
  200. data/public/scripts/Statistics.js +266 -0
  201. data/public/scripts/editor.js +430 -0
  202. data/public/scripts/jjmenu.js +375 -0
  203. data/public/scripts/jquery-ui.js +1012 -0
  204. data/public/scripts/jquery.js +154 -0
  205. data/public/scripts/webtools.js +374 -0
  206. data/public/src/CodeBrowser.gs +416 -0
  207. data/public/src/Debugger.gs +132 -0
  208. data/public/src/MethodList.gs +130 -0
  209. data/public/src/ObjectLog.gs +73 -0
  210. data/public/src/Server.gs +544 -0
  211. data/public/src/SessionList.gs +172 -0
  212. data/public/src/SharedPageCache.gs +66 -0
  213. data/public/src/StatProcess.gs +280 -0
  214. data/public/src/StatProcessType.gs +242 -0
  215. data/public/src/StatStatistic.gs +381 -0
  216. data/public/src/Statistics.gs +222 -0
  217. data/public/src/Statmonitor.gs +490 -0
  218. data/public/src/Tool.gs +86 -0
  219. data/public/src/VersionReport.gs +52 -0
  220. data/public/src/Workspace.gs +163 -0
  221. data/views/debugger.rhtml +6 -9
  222. metadata +344 -243
  223. data/lib/web_tools/#debugger.rb# +0 -212
  224. data/lib/web_tools/browser.rb +0 -45
  225. data/public/images/favicon.ico +0 -0
  226. data/public/javascript/CodeMirror/LICENSE +0 -23
  227. data/public/javascript/CodeMirror/css/Smalltalk.css +0 -34
  228. data/public/javascript/CodeMirror/js/codemirror.js +0 -582
  229. data/public/javascript/CodeMirror/js/editor.js +0 -1671
  230. data/public/javascript/CodeMirror/js/highlight.js +0 -68
  231. data/public/javascript/CodeMirror/js/parseSmalltalk.js +0 -126
  232. data/public/javascript/CodeMirror/js/parsedummy.js +0 -32
  233. data/public/javascript/CodeMirror/js/select.js +0 -699
  234. data/public/javascript/CodeMirror/js/stringstream.js +0 -159
  235. data/public/javascript/CodeMirror/js/tokenize.js +0 -57
  236. data/public/javascript/CodeMirror/js/undo.js +0 -413
  237. data/public/javascript/CodeMirror/js/util.js +0 -133
  238. data/public/javascript/CodeMirror/testSmalltalkParser.html +0 -116
  239. data/public/javascript/ace/ace-uncompressed.js +0 -17299
  240. data/public/javascript/ace/ace.js +0 -1
  241. data/public/javascript/ace/keybinding-emacs.js +0 -1
  242. data/public/javascript/ace/keybinding-vim.js +0 -1
  243. data/public/javascript/ace/mode-c_cpp.js +0 -1
  244. data/public/javascript/ace/mode-clojure.js +0 -1
  245. data/public/javascript/ace/mode-coffee.js +0 -1
  246. data/public/javascript/ace/mode-csharp.js +0 -1
  247. data/public/javascript/ace/mode-css.js +0 -1
  248. data/public/javascript/ace/mode-groovy.js +0 -1
  249. data/public/javascript/ace/mode-html.js +0 -1
  250. data/public/javascript/ace/mode-java.js +0 -1
  251. data/public/javascript/ace/mode-javascript.js +0 -1
  252. data/public/javascript/ace/mode-json.js +0 -1
  253. data/public/javascript/ace/mode-lua.js +0 -1
  254. data/public/javascript/ace/mode-markdown.js +0 -1
  255. data/public/javascript/ace/mode-ocaml.js +0 -1
  256. data/public/javascript/ace/mode-perl.js +0 -1
  257. data/public/javascript/ace/mode-php.js +0 -1
  258. data/public/javascript/ace/mode-python.js +0 -1
  259. data/public/javascript/ace/mode-ruby.js +0 -1
  260. data/public/javascript/ace/mode-scad.js +0 -1
  261. data/public/javascript/ace/mode-scala.js +0 -1
  262. data/public/javascript/ace/mode-scss.js +0 -1
  263. data/public/javascript/ace/mode-svg.js +0 -1
  264. data/public/javascript/ace/mode-textile.js +0 -1
  265. data/public/javascript/ace/mode-xml.js +0 -1
  266. data/public/javascript/ace/theme-clouds.js +0 -1
  267. data/public/javascript/ace/theme-clouds_midnight.js +0 -1
  268. data/public/javascript/ace/theme-cobalt.js +0 -1
  269. data/public/javascript/ace/theme-crimson_editor.js +0 -1
  270. data/public/javascript/ace/theme-dawn.js +0 -1
  271. data/public/javascript/ace/theme-eclipse.js +0 -1
  272. data/public/javascript/ace/theme-idle_fingers.js +0 -1
  273. data/public/javascript/ace/theme-kr_theme.js +0 -1
  274. data/public/javascript/ace/theme-merbivore.js +0 -1
  275. data/public/javascript/ace/theme-merbivore_soft.js +0 -1
  276. data/public/javascript/ace/theme-mono_industrial.js +0 -1
  277. data/public/javascript/ace/theme-monokai.js +0 -1
  278. data/public/javascript/ace/theme-pastel_on_dark.js +0 -1
  279. data/public/javascript/ace/theme-solarized_dark.js +0 -1
  280. data/public/javascript/ace/theme-solarized_light.js +0 -1
  281. data/public/javascript/ace/theme-textmate.js +0 -1
  282. data/public/javascript/ace/theme-twilight.js +0 -1
  283. data/public/javascript/ace/theme-vibrant_ink.js +0 -1
  284. data/public/javascript/ace/worker-coffee.js +0 -1
  285. data/public/javascript/ace/worker-css.js +0 -1
  286. data/public/javascript/ace/worker-javascript.js +0 -1
  287. data/public/javascript/webtools/browser.js +0 -260
  288. data/public/javascript/webtools/debugger.coffee +0 -286
  289. data/public/javascript/webtools/debugger.js +0 -366
  290. data/public/javascript/webtools/sessions.coffee +0 -17
  291. data/public/javascript/webtools/sessions.js +0 -27
  292. data/public/javascript/webtools/version.coffee +0 -14
  293. data/public/javascript/webtools/version.js +0 -20
  294. data/public/stylesheets/jquery.contextMenu.css +0 -62
  295. data/public/stylesheets/webtools.css +0 -53
  296. data/public/test.html +0 -47
@@ -0,0 +1,195 @@
1
+ CodeMirror.defineMode("ruby", function(config, parserConfig) {
2
+ function wordObj(words) {
3
+ var o = {};
4
+ for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true;
5
+ return o;
6
+ }
7
+ var keywords = wordObj([
8
+ "alias", "and", "BEGIN", "begin", "break", "case", "class", "def", "defined?", "do", "else",
9
+ "elsif", "END", "end", "ensure", "false", "for", "if", "in", "module", "next", "not", "or",
10
+ "redo", "rescue", "retry", "return", "self", "super", "then", "true", "undef", "unless",
11
+ "until", "when", "while", "yield", "nil", "raise", "throw", "catch", "fail", "loop", "callcc",
12
+ "caller", "lambda", "proc", "public", "protected", "private", "require", "load",
13
+ "require_relative", "extend", "autoload"
14
+ ]);
15
+ var indentWords = wordObj(["def", "class", "case", "for", "while", "do", "module", "then",
16
+ "unless", "catch", "loop", "proc"]);
17
+ var dedentWords = wordObj(["end", "until"]);
18
+ var matching = {"[": "]", "{": "}", "(": ")"};
19
+ var curPunc;
20
+
21
+ function chain(newtok, stream, state) {
22
+ state.tokenize.push(newtok);
23
+ return newtok(stream, state);
24
+ }
25
+
26
+ function tokenBase(stream, state) {
27
+ curPunc = null;
28
+ if (stream.sol() && stream.match("=begin") && stream.eol()) {
29
+ state.tokenize.push(readBlockComment);
30
+ return "comment";
31
+ }
32
+ if (stream.eatSpace()) return null;
33
+ var ch = stream.next();
34
+ if (ch == "`" || ch == "'" || ch == '"' || ch == "/") {
35
+ return chain(readQuoted(ch, "string", ch == '"'), stream, state);
36
+ } else if (ch == "%") {
37
+ var style, embed = false;
38
+ if (stream.eat("s")) style = "atom";
39
+ else if (stream.eat(/[WQ]/)) { style = "string"; embed = true; }
40
+ else if (stream.eat(/[wxqr]/)) style = "string";
41
+ var delim = stream.eat(/[^\w\s]/);
42
+ if (!delim) return "operator";
43
+ if (matching.propertyIsEnumerable(delim)) delim = matching[delim];
44
+ return chain(readQuoted(delim, style, embed, true), stream, state);
45
+ } else if (ch == "#") {
46
+ stream.skipToEnd();
47
+ return "comment";
48
+ } else if (ch == "<" && stream.eat("<")) {
49
+ stream.eat("-");
50
+ stream.eat(/[\'\"\`]/);
51
+ var match = stream.match(/^\w+/);
52
+ stream.eat(/[\'\"\`]/);
53
+ if (match) return chain(readHereDoc(match[0]), stream, state);
54
+ return null;
55
+ } else if (ch == "0") {
56
+ if (stream.eat("x")) stream.eatWhile(/[\da-fA-F]/);
57
+ else if (stream.eat("b")) stream.eatWhile(/[01]/);
58
+ else stream.eatWhile(/[0-7]/);
59
+ return "number";
60
+ } else if (/\d/.test(ch)) {
61
+ stream.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+\-]?[\d_]+)?/);
62
+ return "number";
63
+ } else if (ch == "?") {
64
+ while (stream.match(/^\\[CM]-/)) {}
65
+ if (stream.eat("\\")) stream.eatWhile(/\w/);
66
+ else stream.next();
67
+ return "string";
68
+ } else if (ch == ":") {
69
+ if (stream.eat("'")) return chain(readQuoted("'", "atom", false), stream, state);
70
+ if (stream.eat('"')) return chain(readQuoted('"', "atom", true), stream, state);
71
+ stream.eatWhile(/[\w\?]/);
72
+ return "atom";
73
+ } else if (ch == "@") {
74
+ stream.eat("@");
75
+ stream.eatWhile(/[\w\?]/);
76
+ return "variable-2";
77
+ } else if (ch == "$") {
78
+ stream.next();
79
+ stream.eatWhile(/[\w\?]/);
80
+ return "variable-3";
81
+ } else if (/\w/.test(ch)) {
82
+ stream.eatWhile(/[\w\?]/);
83
+ if (stream.eat(":")) return "atom";
84
+ return "ident";
85
+ } else if (ch == "|" && (state.varList || state.lastTok == "{" || state.lastTok == "do")) {
86
+ curPunc = "|";
87
+ return null;
88
+ } else if (/[\(\)\[\]{}\\;]/.test(ch)) {
89
+ curPunc = ch;
90
+ return null;
91
+ } else if (ch == "-" && stream.eat(">")) {
92
+ return "arrow";
93
+ } else if (/[=+\-\/*:\.^%<>~|]/.test(ch)) {
94
+ stream.eatWhile(/[=+\-\/*:\.^%<>~|]/);
95
+ return "operator";
96
+ } else {
97
+ return null;
98
+ }
99
+ }
100
+
101
+ function tokenBaseUntilBrace() {
102
+ var depth = 1;
103
+ return function(stream, state) {
104
+ if (stream.peek() == "}") {
105
+ depth--;
106
+ if (depth == 0) {
107
+ state.tokenize.pop();
108
+ return state.tokenize[state.tokenize.length-1](stream, state);
109
+ }
110
+ } else if (stream.peek() == "{") {
111
+ depth++;
112
+ }
113
+ return tokenBase(stream, state);
114
+ };
115
+ }
116
+ function readQuoted(quote, style, embed, unescaped) {
117
+ return function(stream, state) {
118
+ var escaped = false, ch;
119
+ while ((ch = stream.next()) != null) {
120
+ if (ch == quote && (unescaped || !escaped)) {
121
+ state.tokenize.pop();
122
+ break;
123
+ }
124
+ if (embed && ch == "#" && !escaped && stream.eat("{")) {
125
+ state.tokenize.push(tokenBaseUntilBrace(arguments.callee));
126
+ break;
127
+ }
128
+ escaped = !escaped && ch == "\\";
129
+ }
130
+ return style;
131
+ };
132
+ }
133
+ function readHereDoc(phrase) {
134
+ return function(stream, state) {
135
+ if (stream.match(phrase)) state.tokenize.pop();
136
+ else stream.skipToEnd();
137
+ return "string";
138
+ };
139
+ }
140
+ function readBlockComment(stream, state) {
141
+ if (stream.sol() && stream.match("=end") && stream.eol())
142
+ state.tokenize.pop();
143
+ stream.skipToEnd();
144
+ return "comment";
145
+ }
146
+
147
+ return {
148
+ startState: function() {
149
+ return {tokenize: [tokenBase],
150
+ indented: 0,
151
+ context: {type: "top", indented: -config.indentUnit},
152
+ continuedLine: false,
153
+ lastTok: null,
154
+ varList: false};
155
+ },
156
+
157
+ token: function(stream, state) {
158
+ if (stream.sol()) state.indented = stream.indentation();
159
+ var style = state.tokenize[state.tokenize.length-1](stream, state), kwtype;
160
+ if (style == "ident") {
161
+ var word = stream.current();
162
+ style = keywords.propertyIsEnumerable(stream.current()) ? "keyword"
163
+ : /^[A-Z]/.test(word) ? "tag"
164
+ : (state.lastTok == "def" || state.lastTok == "class" || state.varList) ? "def"
165
+ : "variable";
166
+ if (indentWords.propertyIsEnumerable(word)) kwtype = "indent";
167
+ else if (dedentWords.propertyIsEnumerable(word)) kwtype = "dedent";
168
+ else if (word == "if" && stream.column() == stream.indentation()) kwtype = "indent";
169
+ }
170
+ if (curPunc || (style && style != "comment")) state.lastTok = word || curPunc || style;
171
+ if (curPunc == "|") state.varList = !state.varList;
172
+
173
+ if (kwtype == "indent" || /[\(\[\{]/.test(curPunc))
174
+ state.context = {prev: state.context, type: curPunc || style, indented: state.indented};
175
+ else if ((kwtype == "dedent" || /[\)\]\}]/.test(curPunc)) && state.context.prev)
176
+ state.context = state.context.prev;
177
+
178
+ if (stream.eol())
179
+ state.continuedLine = (curPunc == "\\" || style == "operator");
180
+ return style;
181
+ },
182
+
183
+ indent: function(state, textAfter) {
184
+ if (state.tokenize[state.tokenize.length-1] != tokenBase) return 0;
185
+ var firstChar = textAfter && textAfter.charAt(0);
186
+ var ct = state.context;
187
+ var closing = ct.type == matching[firstChar] ||
188
+ ct.type == "keyword" && /^(?:end|until|else|elsif|when)\b/.test(textAfter);
189
+ return ct.indented + (closing ? 0 : config.indentUnit) +
190
+ (state.continuedLine ? config.indentUnit : 0);
191
+ }
192
+ };
193
+ });
194
+
195
+ CodeMirror.defineMIME("text/x-ruby", "ruby");
@@ -0,0 +1,139 @@
1
+ CodeMirror.defineMode("smalltalk", function(config, parserConfig) {
2
+ var indentUnit = config.indentUnit;
3
+
4
+ function chain(stream, state, f) {
5
+ state.tokenize = f;
6
+ return f(stream, state);
7
+ }
8
+
9
+ var type;
10
+ function ret(tp, style) {
11
+ type = tp;
12
+ return style;
13
+ }
14
+
15
+ function tokenBase(stream, state) {
16
+ var identifierTest = /[A-Za-z0-9_]/;
17
+ var ch = stream.next();
18
+ if (/[A-Za-z]/.test(ch) || (ch === '_' && identifierTest.test(stream.peek()))) {
19
+ stream.eatWhile(identifierTest);
20
+ if (!stream.eol() && stream.match(':')) {
21
+ if (!state.context.keywordSelector) {
22
+ state.context.keywordSelector = stream.current();
23
+ } else {
24
+ state.context.keywordSelector += stream.current();
25
+ }
26
+ return ret('word', 'st-keyword');
27
+ }
28
+ var current = stream.current();
29
+ if (current === 'nil') { return ret('word', 'st-nil'); };
30
+ if (current === 'self') { return ret('word', 'st-self'); };
31
+ if (current === 'super') { return ret('word', 'st-super'); };
32
+ if (current === 'thisContext') { return ret('word', 'st-thisContext'); };
33
+ if (current === 'true' || current === 'false') { return ret('word', 'st-boolean'); };
34
+ if (/^[A-Z]/.test(current)) { return ret('word', 'st-global'); };
35
+ return ret('word', 'st-identifier'); }
36
+ else if (ch === '.') {
37
+ state.context.keywordSelector = null;
38
+ return ret('other', 'st-period'); }
39
+ else if (ch === '$') {
40
+ if (stream.eol()) return ret('error', 'error');
41
+ stream.next();
42
+ return ret('character', 'st-character'); }
43
+ else if (ch === '^') return ret('character', 'st-return');
44
+ else if (ch === '"')
45
+ return chain(stream, state, tokenString(ch, 'comment', 'st-comment'));
46
+ else if (ch === "'")
47
+ return chain(stream, state, tokenString(ch, 'string', 'st-string'));
48
+ else if (ch == "#") {
49
+ if (stream.eat("'")) {
50
+ return chain(stream, state, tokenString( "'", 'string', 'st-symbol'));
51
+ }
52
+ stream.eatWhile(/[A-Za-z0-9_:]/);
53
+ return ret("string", "st-symbol"); }
54
+ else if (/\d/.test(ch)) {
55
+ stream.eatWhile(/[\w\.]/)
56
+ return ret("number", "st-number"); }
57
+ else if (/[\[\](){}]/.test(ch)) {
58
+ return ret(ch, null); }
59
+ else if (stream.eatWhile('[\/\[\+\-\\\*\~\<\>\=\|\/\&\@\%\,\?\!]')) {
60
+ return ret('selector', 'st-binary'); }
61
+ else {
62
+ stream.eatWhile(/[\w\$_]/);
63
+ return ret("other", "st-other");
64
+ }
65
+ }
66
+
67
+ function tokenString(endChar, tp, style) {
68
+ return function(stream, state) {
69
+ while (true) {
70
+ if (stream.eol()) return ret(tp, style);
71
+ if (stream.next() === endChar && !stream.eat(endChar)) {
72
+ state.tokenize = tokenBase;
73
+ return ret(tp, style);
74
+ }
75
+ }
76
+ };
77
+ }
78
+
79
+ function Context(indented, column, type, align, prev) {
80
+ this.indented = indented;
81
+ this.column = column;
82
+ this.type = type;
83
+ this.align = align;
84
+ this.prev = prev;
85
+ }
86
+
87
+ function pushContext(state, col, type) {
88
+ return state.context = new Context(state.indented, col, type, null, state.context);
89
+ }
90
+ function popContext(state) {
91
+ return state.context = state.context.prev;
92
+ }
93
+
94
+ // Interface
95
+
96
+ return {
97
+ compareStates: function(x, y) { return false; }, // force full parse to get keyword selectors that span multiple lines
98
+
99
+ startState: function(basecolumn) {
100
+ return {
101
+ tokenize: tokenBase,
102
+ context: new Context((basecolumn || 0) - indentUnit, 0, "top", false),
103
+ indented: 0,
104
+ startOfLine: true
105
+ };
106
+ },
107
+
108
+ token: function(stream, state) {
109
+ var ctx = state.context;
110
+ if (stream.sol()) {
111
+ if (ctx.align == null) ctx.align = false;
112
+ state.indented = stream.indentation();
113
+ state.startOfLine = true;
114
+ }
115
+ if (stream.eatSpace()) return null;
116
+ var style = state.tokenize(stream, state);
117
+ if (type == "comment") return style;
118
+ if (ctx.align == null) ctx.align = true;
119
+
120
+ if (type == "[") pushContext(state, stream.column(), "]");
121
+ else if (type == "(") pushContext(state, stream.column(), ")");
122
+ else if (type == "{") pushContext(state, stream.column(), "}");
123
+ else if (type == ctx.type) popContext(state);
124
+ state.startOfLine = false;
125
+ return style;
126
+ },
127
+
128
+ indent: function(state, textAfter) {
129
+ if (state.tokenize != tokenBase) return 0;
130
+ var firstChar = textAfter && textAfter.charAt(0), ctx = state.context, closing = firstChar == ctx.type;
131
+ if (ctx.align) return ctx.column + (closing ? 0 : 1);
132
+ else return ctx.indented + (closing ? 0 : indentUnit);
133
+ },
134
+
135
+ electricChars: "]"
136
+ };
137
+ });
138
+
139
+ CodeMirror.defineMIME("text/x-stsrc", {name: "smalltalk"});
@@ -0,0 +1,28 @@
1
+ <script type="text/javascript" language="javascript">
2
+ GemStone.runJs('scripts/Debugger.js', OOP);
3
+ </script>
4
+
5
+ <div id='newTab' class='debuggerPanel hidden'>
6
+ <div class='toolbar'>
7
+ <button class='restart'>Restart</button>
8
+ <button class='into'>Into</button>
9
+ <button class='over'>Over</button>
10
+ <button class='out'>Out</button>
11
+ <button class='go'>Go</button>
12
+ <span class='label'></span>
13
+ </div>
14
+ <div class='navigation'>
15
+ <div class='stack divList'></div>
16
+ <table class='variables'>
17
+ <thead><tr>
18
+ <th>Variable</th>
19
+ <th>value</th>
20
+ <th>OOP</th>
21
+ </tr></thead>
22
+ <tbody />
23
+ </table>
24
+ <textarea class='variableValue'></textarea>
25
+ </div>
26
+ <div class='editArea newEditor' tabindex=0>
27
+ </div>
28
+ </div>
@@ -0,0 +1,20 @@
1
+ <script type="text/javascript" language="javascript">
2
+ GemStone.runJs('scripts/MethodList.js', SEARCH_OBJECT);
3
+ </script>
4
+
5
+ <div id='newTab' class='methodListPanel hidden'>
6
+ <div class='methodList'>
7
+ <table>
8
+ <thead><tr>
9
+ <th>Dictionary</th>
10
+ <th>Class Category</th>
11
+ <th>Class</th>
12
+ <th>Category</th>
13
+ <th>Method</th>
14
+ </tr></thead>
15
+ <tbody />
16
+ </table>
17
+ </div>
18
+ <div class='editArea newEditor' tabindex=0>
19
+ </div>
20
+ </div>
@@ -0,0 +1,20 @@
1
+ <script type="text/javascript" language="javascript">
2
+ GemStone.runJs('scripts/ObjectLog.js');
3
+ </script>
4
+
5
+ <div id='newTab' class='objectLogPanel hidden'>
6
+ <div class='objectLog'>
7
+ <table>
8
+ <thead><tr>
9
+ <th>Timestamp</th>
10
+ <th>PID</th>
11
+ <th>Label</th>
12
+ <th>Type</th>
13
+ <th>Tag</th>
14
+ <th>Object</th>
15
+ <th>Stack</th>
16
+ </tr></thead>
17
+ <tbody />
18
+ </table>
19
+ </div>
20
+ </div>
@@ -0,0 +1,31 @@
1
+ <script type="text/javascript" language="javascript">
2
+ GemStone.runJs('scripts/SessionList.js');
3
+ </script>
4
+
5
+ <div id='newTab' class='gemListPanel hidden'>
6
+ <div id='gemListPanelOnce' class='once'>
7
+ <div class='statsTemplate hidden'>
8
+ <div class='stats'>
9
+ <table>
10
+ <caption>Cache Statistics</caption>
11
+ <thead><tr>
12
+ <th>Name</th><th>Type</th><th>Level</th>
13
+ <th>Units</th><th>From OS</th><th>Value</th>
14
+ </tr></thead>
15
+ <tbody />
16
+ </table>
17
+ </div>
18
+ </div>
19
+ </div>
20
+ <div class='gemList'>
21
+ <table>
22
+ <caption>Current Sessions</caption>
23
+ <thead><tr /></thead>
24
+ <tbody />
25
+ </table>
26
+ </div>
27
+ <div class='gemListFooter maximize'>
28
+ <label>Stone processes:&nbsp;</label>
29
+ <ul class='stoneProcesses' />
30
+ </div>
31
+ </div>
@@ -0,0 +1,78 @@
1
+ <script type="text/javascript" language="javascript">
2
+ //<![CDATA[
3
+ (function() {
4
+ var $tabPanel
5
+ ;
6
+ GemStone.addTab({
7
+ id: 'newTab'
8
+ , label: 'SPC'
9
+ , title: 'Shared Page Cache'
10
+ , onAdd: onAdd
11
+ });
12
+ return;
13
+
14
+ function onAdd(tabPanel) {
15
+ $tabPanel = tabPanel;
16
+ GemStone.ajax('GET', 'SharedPageCache', null, gotData);
17
+ }
18
+
19
+ function gotData(data) {
20
+ var min = 1;
21
+ $('.pageTypes .objectTable', $tabPanel).css('width', Math.max(data.objectTable, min) + '%');
22
+ $('.pageTypes .objectTable', $tabPanel).text(data.objectTable);
23
+ $('.pageTypes .bitmap', $tabPanel).css('width', Math.max(data.bitmap, min) + '%');
24
+ $('.pageTypes .bitmap', $tabPanel).text(data.bitmap);
25
+ $('.pageTypes .commitRecord', $tabPanel).css('width', Math.max(data.commitRecord, min) + '%');
26
+ $('.pageTypes .commitRecord', $tabPanel).text(data.commitRecord);
27
+ $('.pageTypes .other', $tabPanel).css('width', Math.max(data.other, min) + '%');
28
+ $('.pageTypes .other', $tabPanel).text(data.other);
29
+ $('.pageTypes .data', $tabPanel).css('width', Math.max(data.data, min) + '%');
30
+ $('.pageTypes .data', $tabPanel).text(data.data);
31
+ $('.frameState .globalDirty', $tabPanel).css('width', Math.max(data.globalDirty, min) + '%');
32
+ $('.frameState .globalDirty', $tabPanel).text(data.globalDirty);
33
+ $('.frameState .localDirty', $tabPanel).css('width', Math.max(data.localDirty, min) + '%');
34
+ $('.frameState .localDirty', $tabPanel).text(data.localDirty);
35
+ $('.frameState .clean', $tabPanel).css('width', Math.max(data.clean, min) + '%');
36
+ $('.frameState .clean', $tabPanel).text(data.clean);
37
+ $('.frameState .free', $tabPanel).css('width', Math.max(data.free - 5, min) + '%');
38
+ $('.frameState .free', $tabPanel).text(data.free);
39
+ }
40
+ }())
41
+ //]]>
42
+ </script>
43
+
44
+ <div id='newTab' class='spcPanel hidden'>
45
+ <div id='spcPanelOnce' class='once'>
46
+ <style type="text/css">
47
+ .spcPanel .pageTypes { height: 2em; width: 100%; }
48
+ .spcPanel .pageTypes div { display: inline-block; }
49
+ .spcPanel .pageTypes .objectTable { background: Wheat; height: 100%; width: 15%; }
50
+ .spcPanel .pageTypes .bitmap { background: Blue; height: 100%; width: 15%; }
51
+ .spcPanel .pageTypes .commitRecord { background: Red; height: 100%; width: 15%; }
52
+ .spcPanel .pageTypes .other { background: CadetBlue; height: 100%; width: 15%; }
53
+ .spcPanel .pageTypes .data { background: Green; height: 100%; width: 15%; }
54
+ .spcPanel .frameState { height: 2em; width: 100%; }
55
+ .spcPanel .frameState div { display: inline-block; }
56
+ .spcPanel .frameState .globalDirty { background: Orange; height: 100%; width: 25%; }
57
+ .spcPanel .frameState .localDirty { background: Salmon; height: 100%; width: 25%; }
58
+ .spcPanel .frameState .clean { background: GreenYellow; height: 100%; width: 25%; }
59
+ .spcPanel .frameState .free { background: Beige; height: 100%; width: 25%; }
60
+ </style>
61
+ </div>
62
+ <div>Types of pages in Shared Page Cache</div>
63
+ <div class='pageTypes'>
64
+ <div class='objectTable' title='% frames with Object Table Pages'>&nbsp</div>
65
+ <div class='bitmap' title='% frames with Bitmap Pages'>&nbsp</div>
66
+ <div class='commitRecord' title='% frames with Commit Records Pages'>&nbsp</div>
67
+ <div class='other' title='% frames with Other Pages'>&nbsp</div>
68
+ <div class='data' title='% frames with Data Pages'>&nbsp</div>
69
+ </div>
70
+ <br />
71
+ <div>State of pages in Shared Page Cache</div>
72
+ <div class='frameState'>
73
+ <div class='globalDirty' title='% frames with dirty but not committed pages'>&nbsp</div>
74
+ <div class='localDirty' title='% frames with dirty committed pages'>&nbsp</div>
75
+ <div class='clean' title='% frames with clean pages'>&nbsp</div>
76
+ <div class='free' title='% free frames'>&nbsp</div>
77
+ </div>
78
+ </div>