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.
- data/README.rdoc +38 -29
- data/bin/webtools +22 -1
- data/lib/web_tools/code_browser.rb +156 -0
- data/lib/web_tools/debugger.rb +96 -199
- data/lib/web_tools/info.rb +1 -3
- data/lib/web_tools/method_list.rb +67 -0
- data/lib/web_tools/middleware/debugger.rb +10 -16
- data/lib/web_tools/object_log.rb +24 -0
- data/lib/web_tools/session_list.rb +119 -0
- data/lib/web_tools/shared_page_cache.rb +30 -0
- data/lib/web_tools/stat_process.rb +24 -0
- data/lib/web_tools/statistics.rb +14 -0
- data/lib/web_tools/support/app_model.rb +66 -101
- data/lib/web_tools/support/code_browser.rb +88 -86
- data/lib/web_tools/support/debugger.rb +303 -0
- data/lib/web_tools/support/error_log.rb +33 -0
- data/lib/web_tools/support/ruby.rb +60 -121
- data/lib/web_tools/support/service_helper.rb +38 -10
- data/lib/web_tools/support/smalltalk_extensions.rb +12 -0
- data/lib/web_tools/tool.rb +48 -0
- data/lib/web_tools/ui.rb +14 -53
- data/lib/web_tools/version_report.rb +29 -0
- data/lib/web_tools/workspace.rb +77 -0
- data/lib/web_tools.rb +14 -4
- data/public/CodeBrowser.html +51 -0
- data/public/CodeMirror/LICENSE +19 -0
- data/public/CodeMirror/css/codemirror.css +67 -0
- data/public/CodeMirror/css/default.css +18 -0
- data/public/CodeMirror/js/codemirror.js +2131 -0
- data/public/CodeMirror/js/ruby.js +195 -0
- data/public/CodeMirror/js/smalltalk.js +139 -0
- data/public/Debugger.html +28 -0
- data/public/MethodList.html +20 -0
- data/public/ObjectLog.html +20 -0
- data/public/SessionList.html +31 -0
- data/public/SharedPageCache.html +78 -0
- data/public/Statistics.html +64 -0
- data/public/VersionReport.html +50 -0
- data/public/Workspace.html +39 -0
- data/public/css/CodeBrowser.css +24 -0
- data/public/css/Debugger.css +32 -0
- data/public/css/MethodList.css +8 -0
- data/public/css/ObjectLog.css +5 -0
- data/public/css/SessionList.css +9 -0
- data/public/css/Statistics.css +24 -0
- data/public/{stylesheets → css}/base/images/ui-anim_basic_16x16.gif +0 -0
- data/public/{stylesheets → css}/base/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/public/{stylesheets → css}/base/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/public/{stylesheets → css}/base/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/public/{stylesheets → css}/base/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/public/{stylesheets → css}/base/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/public/{stylesheets → css}/base/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/public/{stylesheets → css}/base/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/public/{stylesheets → css}/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/public/{stylesheets → css}/base/images/ui-icons_222222_256x240.png +0 -0
- data/public/{stylesheets → css}/base/images/ui-icons_2e83ff_256x240.png +0 -0
- data/public/{stylesheets → css}/base/images/ui-icons_454545_256x240.png +0 -0
- data/public/{stylesheets → css}/base/images/ui-icons_888888_256x240.png +0 -0
- data/public/{stylesheets → css}/base/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/{stylesheets → css}/base/jquery.ui.accordion.css +0 -0
- data/public/{stylesheets → css}/base/jquery.ui.all.css +0 -0
- data/public/{stylesheets → css}/base/jquery.ui.autocomplete.css +0 -0
- data/public/{stylesheets → css}/base/jquery.ui.base.css +0 -0
- data/public/{stylesheets → css}/base/jquery.ui.button.css +0 -0
- data/public/{stylesheets → css}/base/jquery.ui.core.css +0 -0
- data/public/{stylesheets → css}/base/jquery.ui.datepicker.css +0 -0
- data/public/{stylesheets → css}/base/jquery.ui.dialog.css +0 -0
- data/public/{stylesheets → css}/base/jquery.ui.progressbar.css +0 -0
- data/public/{stylesheets → css}/base/jquery.ui.resizable.css +0 -0
- data/public/{stylesheets → css}/base/jquery.ui.selectable.css +0 -0
- data/public/{stylesheets → css}/base/jquery.ui.slider.css +0 -0
- data/public/{stylesheets → css}/base/jquery.ui.tabs.css +0 -0
- data/public/{stylesheets → css}/base/jquery.ui.theme.css +0 -0
- data/public/css/editor.css +25 -0
- data/public/css/jjmenu.css +33 -0
- data/public/css/menuitem.gif +0 -0
- data/public/css/more.gif +0 -0
- data/public/{stylesheets → css}/reset.css +1 -1
- data/public/css/smoothness/images/ui-anim_basic_16x16.gif +0 -0
- data/public/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/public/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/public/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/public/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/public/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/public/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/public/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/public/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/public/css/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/public/css/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/public/css/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/public/css/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/public/css/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/css/smoothness/jquery-ui.css +489 -0
- data/public/css/ui-lightness/images/ui-anim_basic_16x16.gif +0 -0
- data/public/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/public/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/public/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/public/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/public/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/public/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/public/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/public/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/public/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/public/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
- data/public/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
- data/public/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
- data/public/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
- data/public/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
- data/public/css/ui-lightness/jquery-ui.css +489 -0
- data/public/css/webtools.css +65 -0
- data/public/favicon.ico +0 -0
- data/public/flot/API.txt +1201 -0
- data/public/flot/FAQ.txt +76 -0
- data/public/flot/LICENSE.txt +22 -0
- data/public/flot/Makefile +9 -0
- data/public/flot/NEWS.txt +508 -0
- data/public/flot/PLUGINS.txt +137 -0
- data/public/flot/README.txt +90 -0
- data/public/flot/examples/ajax.html +143 -0
- data/public/flot/examples/annotating.html +75 -0
- data/public/flot/examples/arrow-down.gif +0 -0
- data/public/flot/examples/arrow-left.gif +0 -0
- data/public/flot/examples/arrow-right.gif +0 -0
- data/public/flot/examples/arrow-up.gif +0 -0
- data/public/flot/examples/basic.html +38 -0
- data/public/flot/examples/data-eu-gdp-growth-1.json +4 -0
- data/public/flot/examples/data-eu-gdp-growth-2.json +4 -0
- data/public/flot/examples/data-eu-gdp-growth-3.json +4 -0
- data/public/flot/examples/data-eu-gdp-growth-4.json +4 -0
- data/public/flot/examples/data-eu-gdp-growth-5.json +4 -0
- data/public/flot/examples/data-eu-gdp-growth.json +4 -0
- data/public/flot/examples/data-japan-gdp-growth.json +4 -0
- data/public/flot/examples/data-usa-gdp-growth.json +4 -0
- data/public/flot/examples/graph-types.html +75 -0
- data/public/flot/examples/hs-2004-27-a-large_web.jpg +0 -0
- data/public/flot/examples/image.html +45 -0
- data/public/flot/examples/index.html +44 -0
- data/public/flot/examples/interacting-axes.html +97 -0
- data/public/flot/examples/interacting.html +93 -0
- data/public/flot/examples/layout.css +6 -0
- data/public/flot/examples/multiple-axes.html +60 -0
- data/public/flot/examples/navigate.html +118 -0
- data/public/flot/examples/percentiles.html +57 -0
- data/public/flot/examples/pie.html +756 -0
- data/public/flot/examples/realtime.html +83 -0
- data/public/flot/examples/resize.html +61 -0
- data/public/flot/examples/selection.html +114 -0
- data/public/flot/examples/setting-options.html +61 -0
- data/public/flot/examples/stacking.html +77 -0
- data/public/flot/examples/symbols.html +49 -0
- data/public/flot/examples/thresholding.html +54 -0
- data/public/flot/examples/time.html +71 -0
- data/public/flot/examples/tracking.html +95 -0
- data/public/flot/examples/turning-series.html +98 -0
- data/public/flot/examples/visitors.html +90 -0
- data/public/flot/examples/zooming.html +98 -0
- data/public/flot/excanvas.js +1427 -0
- data/public/flot/excanvas.min.js +1 -0
- data/public/flot/jquery.colorhelpers.js +179 -0
- data/public/flot/jquery.colorhelpers.min.js +1 -0
- data/public/flot/jquery.flot.crosshair.js +167 -0
- data/public/flot/jquery.flot.crosshair.min.js +1 -0
- data/public/flot/jquery.flot.fillbetween.js +183 -0
- data/public/flot/jquery.flot.fillbetween.min.js +1 -0
- data/public/flot/jquery.flot.image.js +238 -0
- data/public/flot/jquery.flot.image.min.js +1 -0
- data/public/flot/jquery.flot.js +2599 -0
- data/public/flot/jquery.flot.min.js +6 -0
- data/public/flot/jquery.flot.navigate.js +336 -0
- data/public/flot/jquery.flot.navigate.min.js +1 -0
- data/public/flot/jquery.flot.pie.js +750 -0
- data/public/flot/jquery.flot.pie.min.js +1 -0
- data/public/flot/jquery.flot.resize.js +60 -0
- data/public/flot/jquery.flot.resize.min.js +1 -0
- data/public/flot/jquery.flot.selection.js +344 -0
- data/public/flot/jquery.flot.selection.min.js +1 -0
- data/public/flot/jquery.flot.stack.js +184 -0
- data/public/flot/jquery.flot.stack.min.js +1 -0
- data/public/flot/jquery.flot.symbol.js +70 -0
- data/public/flot/jquery.flot.symbol.min.js +1 -0
- data/public/flot/jquery.flot.threshold.js +103 -0
- data/public/flot/jquery.flot.threshold.min.js +1 -0
- data/public/flot/jquery.js +8316 -0
- data/public/flot/jquery.min.js +23 -0
- data/public/genPacking.pl +30 -0
- data/public/index.html +28 -0
- data/public/install.tpz +66 -0
- data/public/installAndRun.tpz +5 -0
- data/public/jsTree/jquery.jstree.js +3510 -0
- data/public/jsTree/themes/default/d.gif +0 -0
- data/public/jsTree/themes/default/d.png +0 -0
- data/public/jsTree/themes/default/style.css +73 -0
- data/public/jsTree/themes/default/throbber.gif +0 -0
- data/public/readMe.txt +9 -0
- data/public/scripts/CodeBrowser.js +645 -0
- data/public/scripts/Debugger.js +134 -0
- data/public/scripts/MethodList.js +72 -0
- data/public/scripts/ObjectLog.js +59 -0
- data/public/scripts/SessionList.js +164 -0
- data/public/scripts/Statistics.js +266 -0
- data/public/scripts/editor.js +430 -0
- data/public/scripts/jjmenu.js +375 -0
- data/public/scripts/jquery-ui.js +1012 -0
- data/public/scripts/jquery.js +154 -0
- data/public/scripts/webtools.js +374 -0
- data/public/src/CodeBrowser.gs +416 -0
- data/public/src/Debugger.gs +132 -0
- data/public/src/MethodList.gs +130 -0
- data/public/src/ObjectLog.gs +73 -0
- data/public/src/Server.gs +544 -0
- data/public/src/SessionList.gs +172 -0
- data/public/src/SharedPageCache.gs +66 -0
- data/public/src/StatProcess.gs +280 -0
- data/public/src/StatProcessType.gs +242 -0
- data/public/src/StatStatistic.gs +381 -0
- data/public/src/Statistics.gs +222 -0
- data/public/src/Statmonitor.gs +490 -0
- data/public/src/Tool.gs +86 -0
- data/public/src/VersionReport.gs +52 -0
- data/public/src/Workspace.gs +163 -0
- data/views/debugger.rhtml +6 -9
- metadata +344 -243
- data/lib/web_tools/#debugger.rb# +0 -212
- data/lib/web_tools/browser.rb +0 -45
- data/public/images/favicon.ico +0 -0
- data/public/javascript/CodeMirror/LICENSE +0 -23
- data/public/javascript/CodeMirror/css/Smalltalk.css +0 -34
- data/public/javascript/CodeMirror/js/codemirror.js +0 -582
- data/public/javascript/CodeMirror/js/editor.js +0 -1671
- data/public/javascript/CodeMirror/js/highlight.js +0 -68
- data/public/javascript/CodeMirror/js/parseSmalltalk.js +0 -126
- data/public/javascript/CodeMirror/js/parsedummy.js +0 -32
- data/public/javascript/CodeMirror/js/select.js +0 -699
- data/public/javascript/CodeMirror/js/stringstream.js +0 -159
- data/public/javascript/CodeMirror/js/tokenize.js +0 -57
- data/public/javascript/CodeMirror/js/undo.js +0 -413
- data/public/javascript/CodeMirror/js/util.js +0 -133
- data/public/javascript/CodeMirror/testSmalltalkParser.html +0 -116
- data/public/javascript/ace/ace-uncompressed.js +0 -17299
- data/public/javascript/ace/ace.js +0 -1
- data/public/javascript/ace/keybinding-emacs.js +0 -1
- data/public/javascript/ace/keybinding-vim.js +0 -1
- data/public/javascript/ace/mode-c_cpp.js +0 -1
- data/public/javascript/ace/mode-clojure.js +0 -1
- data/public/javascript/ace/mode-coffee.js +0 -1
- data/public/javascript/ace/mode-csharp.js +0 -1
- data/public/javascript/ace/mode-css.js +0 -1
- data/public/javascript/ace/mode-groovy.js +0 -1
- data/public/javascript/ace/mode-html.js +0 -1
- data/public/javascript/ace/mode-java.js +0 -1
- data/public/javascript/ace/mode-javascript.js +0 -1
- data/public/javascript/ace/mode-json.js +0 -1
- data/public/javascript/ace/mode-lua.js +0 -1
- data/public/javascript/ace/mode-markdown.js +0 -1
- data/public/javascript/ace/mode-ocaml.js +0 -1
- data/public/javascript/ace/mode-perl.js +0 -1
- data/public/javascript/ace/mode-php.js +0 -1
- data/public/javascript/ace/mode-python.js +0 -1
- data/public/javascript/ace/mode-ruby.js +0 -1
- data/public/javascript/ace/mode-scad.js +0 -1
- data/public/javascript/ace/mode-scala.js +0 -1
- data/public/javascript/ace/mode-scss.js +0 -1
- data/public/javascript/ace/mode-svg.js +0 -1
- data/public/javascript/ace/mode-textile.js +0 -1
- data/public/javascript/ace/mode-xml.js +0 -1
- data/public/javascript/ace/theme-clouds.js +0 -1
- data/public/javascript/ace/theme-clouds_midnight.js +0 -1
- data/public/javascript/ace/theme-cobalt.js +0 -1
- data/public/javascript/ace/theme-crimson_editor.js +0 -1
- data/public/javascript/ace/theme-dawn.js +0 -1
- data/public/javascript/ace/theme-eclipse.js +0 -1
- data/public/javascript/ace/theme-idle_fingers.js +0 -1
- data/public/javascript/ace/theme-kr_theme.js +0 -1
- data/public/javascript/ace/theme-merbivore.js +0 -1
- data/public/javascript/ace/theme-merbivore_soft.js +0 -1
- data/public/javascript/ace/theme-mono_industrial.js +0 -1
- data/public/javascript/ace/theme-monokai.js +0 -1
- data/public/javascript/ace/theme-pastel_on_dark.js +0 -1
- data/public/javascript/ace/theme-solarized_dark.js +0 -1
- data/public/javascript/ace/theme-solarized_light.js +0 -1
- data/public/javascript/ace/theme-textmate.js +0 -1
- data/public/javascript/ace/theme-twilight.js +0 -1
- data/public/javascript/ace/theme-vibrant_ink.js +0 -1
- data/public/javascript/ace/worker-coffee.js +0 -1
- data/public/javascript/ace/worker-css.js +0 -1
- data/public/javascript/ace/worker-javascript.js +0 -1
- data/public/javascript/webtools/browser.js +0 -260
- data/public/javascript/webtools/debugger.coffee +0 -286
- data/public/javascript/webtools/debugger.js +0 -366
- data/public/javascript/webtools/sessions.coffee +0 -17
- data/public/javascript/webtools/sessions.js +0 -27
- data/public/javascript/webtools/version.coffee +0 -14
- data/public/javascript/webtools/version.js +0 -20
- data/public/stylesheets/jquery.contextMenu.css +0 -62
- data/public/stylesheets/webtools.css +0 -53
- 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: </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'> </div>
|
|
65
|
+
<div class='bitmap' title='% frames with Bitmap Pages'> </div>
|
|
66
|
+
<div class='commitRecord' title='% frames with Commit Records Pages'> </div>
|
|
67
|
+
<div class='other' title='% frames with Other Pages'> </div>
|
|
68
|
+
<div class='data' title='% frames with Data Pages'> </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'> </div>
|
|
74
|
+
<div class='localDirty' title='% frames with dirty committed pages'> </div>
|
|
75
|
+
<div class='clean' title='% frames with clean pages'> </div>
|
|
76
|
+
<div class='free' title='% free frames'> </div>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|