stackprofiler 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/README.md +1 -1
  4. data/config.ru +3 -2
  5. data/lib/stackprofiler.rb +0 -1
  6. data/lib/stackprofiler/filters/build_tree.rb +3 -4
  7. data/lib/stackprofiler/filters/gem_removal.rb +3 -0
  8. data/lib/stackprofiler/web_ui.rb +34 -11
  9. data/lib/stackprofiler/web_ui/public/css/stackprofiler.css +77 -0
  10. data/lib/stackprofiler/web_ui/public/js/stackprofiler.js +129 -58
  11. data/lib/stackprofiler/web_ui/public/vendor/ace/ace.js +18298 -0
  12. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-beautify.js +334 -0
  13. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-chromevox.js +541 -0
  14. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-elastic_tabstops_lite.js +275 -0
  15. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-emmet.js +1190 -0
  16. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-error_marker.js +6 -0
  17. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-keybinding_menu.js +170 -0
  18. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-language_tools.js +1934 -0
  19. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-linking.js +52 -0
  20. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-modelist.js +187 -0
  21. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-old_ie.js +494 -0
  22. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-searchbox.js +409 -0
  23. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-settings_menu.js +637 -0
  24. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-spellcheck.js +71 -0
  25. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-split.js +246 -0
  26. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-static_highlight.js +154 -0
  27. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-statusbar.js +51 -0
  28. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-textarea.js +632 -0
  29. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-themelist.js +58 -0
  30. data/lib/stackprofiler/web_ui/public/vendor/ace/ext-whitespace.js +181 -0
  31. data/lib/stackprofiler/web_ui/public/vendor/ace/keybinding-emacs.js +1182 -0
  32. data/lib/stackprofiler/web_ui/public/vendor/ace/keybinding-vim.js +5320 -0
  33. data/lib/stackprofiler/web_ui/public/vendor/ace/mode-haml.js +525 -0
  34. data/lib/stackprofiler/web_ui/public/vendor/ace/mode-html.js +2427 -0
  35. data/lib/stackprofiler/web_ui/public/vendor/ace/mode-html_ruby.js +2955 -0
  36. data/lib/stackprofiler/web_ui/public/vendor/ace/mode-javascript.js +1025 -0
  37. data/lib/stackprofiler/web_ui/public/vendor/ace/mode-json.js +668 -0
  38. data/lib/stackprofiler/web_ui/public/vendor/ace/mode-ruby.js +839 -0
  39. data/lib/stackprofiler/web_ui/public/vendor/ace/mode-xml.js +637 -0
  40. data/lib/stackprofiler/web_ui/public/vendor/ace/mode-yaml.js +256 -0
  41. data/lib/stackprofiler/web_ui/public/vendor/ace/theme-xcode.js +89 -0
  42. data/lib/stackprofiler/web_ui/public/vendor/ace/worker-coffee.js +7599 -0
  43. data/lib/stackprofiler/web_ui/public/vendor/ace/worker-css.js +8682 -0
  44. data/lib/stackprofiler/web_ui/public/vendor/ace/worker-html.js +11527 -0
  45. data/lib/stackprofiler/web_ui/public/vendor/ace/worker-javascript.js +10429 -0
  46. data/lib/stackprofiler/web_ui/public/vendor/ace/worker-json.js +2319 -0
  47. data/lib/stackprofiler/web_ui/views/index.erb +1 -1
  48. data/lib/stackprofiler/web_ui/views/layout.erb +2 -55
  49. data/stackprofiler.gemspec +2 -4
  50. metadata +42 -19
  51. data/lib/stackprofiler/web_ui/views/code.erb +0 -17
@@ -0,0 +1,51 @@
1
+ ace.define("ace/ext/statusbar",["require","exports","module","ace/lib/dom","ace/lib/lang"], function(require, exports, module) {
2
+ "use strict";
3
+ var dom = require("ace/lib/dom");
4
+ var lang = require("ace/lib/lang");
5
+
6
+ var StatusBar = function(editor, parentNode) {
7
+ this.element = dom.createElement("div");
8
+ this.element.className = "ace_status-indicator";
9
+ this.element.style.cssText = "display: inline-block;";
10
+ parentNode.appendChild(this.element);
11
+
12
+ var statusUpdate = lang.delayedCall(function(){
13
+ this.updateStatus(editor)
14
+ }.bind(this));
15
+ editor.on("changeStatus", function() {
16
+ statusUpdate.schedule(100);
17
+ });
18
+ editor.on("changeSelection", function() {
19
+ statusUpdate.schedule(100);
20
+ });
21
+ };
22
+
23
+ (function(){
24
+ this.updateStatus = function(editor) {
25
+ var status = [];
26
+ function add(str, separator) {
27
+ str && status.push(str, separator || "|");
28
+ }
29
+
30
+ add(editor.keyBinding.getStatusText(editor));
31
+ if (editor.commands.recording)
32
+ add("REC");
33
+
34
+ var c = editor.selection.lead;
35
+ add(c.row + ":" + c.column, " ");
36
+ if (!editor.selection.isEmpty()) {
37
+ var r = editor.getSelectionRange();
38
+ add("(" + (r.end.row - r.start.row) + ":" +(r.end.column - r.start.column) + ")");
39
+ }
40
+ status.pop();
41
+ this.element.textContent = status.join("");
42
+ };
43
+ }).call(StatusBar.prototype);
44
+
45
+ exports.StatusBar = StatusBar;
46
+
47
+ });
48
+ (function() {
49
+ ace.require(["ace/ext/statusbar"], function() {});
50
+ })();
51
+
@@ -0,0 +1,632 @@
1
+ ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"], function(require, exports, module) {
2
+ "use strict";
3
+
4
+ exports.isDark = false;
5
+ exports.cssClass = "ace-tm";
6
+ exports.cssText = ".ace-tm .ace_gutter {\
7
+ background: #f0f0f0;\
8
+ color: #333;\
9
+ }\
10
+ .ace-tm .ace_print-margin {\
11
+ width: 1px;\
12
+ background: #e8e8e8;\
13
+ }\
14
+ .ace-tm .ace_fold {\
15
+ background-color: #6B72E6;\
16
+ }\
17
+ .ace-tm {\
18
+ background-color: #FFFFFF;\
19
+ color: black;\
20
+ }\
21
+ .ace-tm .ace_cursor {\
22
+ color: black;\
23
+ }\
24
+ .ace-tm .ace_invisible {\
25
+ color: rgb(191, 191, 191);\
26
+ }\
27
+ .ace-tm .ace_storage,\
28
+ .ace-tm .ace_keyword {\
29
+ color: blue;\
30
+ }\
31
+ .ace-tm .ace_constant {\
32
+ color: rgb(197, 6, 11);\
33
+ }\
34
+ .ace-tm .ace_constant.ace_buildin {\
35
+ color: rgb(88, 72, 246);\
36
+ }\
37
+ .ace-tm .ace_constant.ace_language {\
38
+ color: rgb(88, 92, 246);\
39
+ }\
40
+ .ace-tm .ace_constant.ace_library {\
41
+ color: rgb(6, 150, 14);\
42
+ }\
43
+ .ace-tm .ace_invalid {\
44
+ background-color: rgba(255, 0, 0, 0.1);\
45
+ color: red;\
46
+ }\
47
+ .ace-tm .ace_support.ace_function {\
48
+ color: rgb(60, 76, 114);\
49
+ }\
50
+ .ace-tm .ace_support.ace_constant {\
51
+ color: rgb(6, 150, 14);\
52
+ }\
53
+ .ace-tm .ace_support.ace_type,\
54
+ .ace-tm .ace_support.ace_class {\
55
+ color: rgb(109, 121, 222);\
56
+ }\
57
+ .ace-tm .ace_keyword.ace_operator {\
58
+ color: rgb(104, 118, 135);\
59
+ }\
60
+ .ace-tm .ace_string {\
61
+ color: rgb(3, 106, 7);\
62
+ }\
63
+ .ace-tm .ace_comment {\
64
+ color: rgb(76, 136, 107);\
65
+ }\
66
+ .ace-tm .ace_comment.ace_doc {\
67
+ color: rgb(0, 102, 255);\
68
+ }\
69
+ .ace-tm .ace_comment.ace_doc.ace_tag {\
70
+ color: rgb(128, 159, 191);\
71
+ }\
72
+ .ace-tm .ace_constant.ace_numeric {\
73
+ color: rgb(0, 0, 205);\
74
+ }\
75
+ .ace-tm .ace_variable {\
76
+ color: rgb(49, 132, 149);\
77
+ }\
78
+ .ace-tm .ace_xml-pe {\
79
+ color: rgb(104, 104, 91);\
80
+ }\
81
+ .ace-tm .ace_entity.ace_name.ace_function {\
82
+ color: #0000A2;\
83
+ }\
84
+ .ace-tm .ace_heading {\
85
+ color: rgb(12, 7, 255);\
86
+ }\
87
+ .ace-tm .ace_list {\
88
+ color:rgb(185, 6, 144);\
89
+ }\
90
+ .ace-tm .ace_meta.ace_tag {\
91
+ color:rgb(0, 22, 142);\
92
+ }\
93
+ .ace-tm .ace_string.ace_regex {\
94
+ color: rgb(255, 0, 0)\
95
+ }\
96
+ .ace-tm .ace_marker-layer .ace_selection {\
97
+ background: rgb(181, 213, 255);\
98
+ }\
99
+ .ace-tm.ace_multiselect .ace_selection.ace_start {\
100
+ box-shadow: 0 0 3px 0px white;\
101
+ border-radius: 2px;\
102
+ }\
103
+ .ace-tm .ace_marker-layer .ace_step {\
104
+ background: rgb(252, 255, 0);\
105
+ }\
106
+ .ace-tm .ace_marker-layer .ace_stack {\
107
+ background: rgb(164, 229, 101);\
108
+ }\
109
+ .ace-tm .ace_marker-layer .ace_bracket {\
110
+ margin: -1px 0 0 -1px;\
111
+ border: 1px solid rgb(192, 192, 192);\
112
+ }\
113
+ .ace-tm .ace_marker-layer .ace_active-line {\
114
+ background: rgba(0, 0, 0, 0.07);\
115
+ }\
116
+ .ace-tm .ace_gutter-active-line {\
117
+ background-color : #dcdcdc;\
118
+ }\
119
+ .ace-tm .ace_marker-layer .ace_selected-word {\
120
+ background: rgb(250, 250, 255);\
121
+ border: 1px solid rgb(200, 200, 250);\
122
+ }\
123
+ .ace-tm .ace_indent-guide {\
124
+ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\
125
+ }\
126
+ ";
127
+
128
+ var dom = require("../lib/dom");
129
+ dom.importCssString(exports.cssText, exports.cssClass);
130
+ });
131
+
132
+ ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"], function(require, exports, module) {
133
+ "use strict";
134
+
135
+ require("./lib/fixoldbrowsers");
136
+
137
+ var dom = require("./lib/dom");
138
+ var event = require("./lib/event");
139
+
140
+ var Editor = require("./editor").Editor;
141
+ var EditSession = require("./edit_session").EditSession;
142
+ var UndoManager = require("./undomanager").UndoManager;
143
+ var Renderer = require("./virtual_renderer").VirtualRenderer;
144
+ require("./worker/worker_client");
145
+ require("./keyboard/hash_handler");
146
+ require("./placeholder");
147
+ require("./multi_select");
148
+ require("./mode/folding/fold_mode");
149
+ require("./theme/textmate");
150
+ require("./ext/error_marker");
151
+
152
+ exports.config = require("./config");
153
+ exports.require = require;
154
+ exports.edit = function(el) {
155
+ if (typeof(el) == "string") {
156
+ var _id = el;
157
+ el = document.getElementById(_id);
158
+ if (!el)
159
+ throw new Error("ace.edit can't find div #" + _id);
160
+ }
161
+
162
+ if (el && el.env && el.env.editor instanceof Editor)
163
+ return el.env.editor;
164
+
165
+ var value = "";
166
+ if (el && /input|textarea/i.test(el.tagName)) {
167
+ var oldNode = el;
168
+ value = oldNode.value;
169
+ el = dom.createElement("pre");
170
+ oldNode.parentNode.replaceChild(el, oldNode);
171
+ } else {
172
+ value = dom.getInnerText(el);
173
+ el.innerHTML = '';
174
+ }
175
+
176
+ var doc = exports.createEditSession(value);
177
+
178
+ var editor = new Editor(new Renderer(el));
179
+ editor.setSession(doc);
180
+
181
+ var env = {
182
+ document: doc,
183
+ editor: editor,
184
+ onResize: editor.resize.bind(editor, null)
185
+ };
186
+ if (oldNode) env.textarea = oldNode;
187
+ event.addListener(window, "resize", env.onResize);
188
+ editor.on("destroy", function() {
189
+ event.removeListener(window, "resize", env.onResize);
190
+ env.editor.container.env = null; // prevent memory leak on old ie
191
+ });
192
+ editor.container.env = editor.env = env;
193
+ return editor;
194
+ };
195
+ exports.createEditSession = function(text, mode) {
196
+ var doc = new EditSession(text, mode);
197
+ doc.setUndoManager(new UndoManager());
198
+ return doc;
199
+ }
200
+ exports.EditSession = EditSession;
201
+ exports.UndoManager = UndoManager;
202
+ });
203
+
204
+ ace.define("ace/ext/textarea",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/net","ace/ace","ace/theme/textmate"], function(require, exports, module) {
205
+ "use strict";
206
+
207
+ var event = require("../lib/event");
208
+ var UA = require("../lib/useragent");
209
+ var net = require("../lib/net");
210
+ var ace = require("../ace");
211
+
212
+ require("../theme/textmate");
213
+
214
+ module.exports = exports = ace;
215
+ var getCSSProperty = function(element, container, property) {
216
+ var ret = element.style[property];
217
+
218
+ if (!ret) {
219
+ if (window.getComputedStyle) {
220
+ ret = window.getComputedStyle(element, '').getPropertyValue(property);
221
+ } else {
222
+ ret = element.currentStyle[property];
223
+ }
224
+ }
225
+
226
+ if (!ret || ret == 'auto' || ret == 'intrinsic') {
227
+ ret = container.style[property];
228
+ }
229
+ return ret;
230
+ };
231
+
232
+ function applyStyles(elm, styles) {
233
+ for (var style in styles) {
234
+ elm.style[style] = styles[style];
235
+ }
236
+ }
237
+
238
+ function setupContainer(element, getValue) {
239
+ if (element.type != 'textarea') {
240
+ throw new Error("Textarea required!");
241
+ }
242
+
243
+ var parentNode = element.parentNode;
244
+ var container = document.createElement('div');
245
+ var resizeEvent = function() {
246
+ var style = 'position:relative;';
247
+ [
248
+ 'margin-top', 'margin-left', 'margin-right', 'margin-bottom'
249
+ ].forEach(function(item) {
250
+ style += item + ':' +
251
+ getCSSProperty(element, container, item) + ';';
252
+ });
253
+ var width = getCSSProperty(element, container, 'width') || (element.clientWidth + "px");
254
+ var height = getCSSProperty(element, container, 'height') || (element.clientHeight + "px");
255
+ style += 'height:' + height + ';width:' + width + ';';
256
+ style += 'display:inline-block;';
257
+ container.setAttribute('style', style);
258
+ };
259
+ event.addListener(window, 'resize', resizeEvent);
260
+ resizeEvent();
261
+ parentNode.insertBefore(container, element.nextSibling);
262
+ while (parentNode !== document) {
263
+ if (parentNode.tagName.toUpperCase() === 'FORM') {
264
+ var oldSumit = parentNode.onsubmit;
265
+ parentNode.onsubmit = function(evt) {
266
+ element.value = getValue();
267
+ if (oldSumit) {
268
+ oldSumit.call(this, evt);
269
+ }
270
+ };
271
+ break;
272
+ }
273
+ parentNode = parentNode.parentNode;
274
+ }
275
+ return container;
276
+ }
277
+
278
+ exports.transformTextarea = function(element, options) {
279
+ var session;
280
+ var container = setupContainer(element, function() {
281
+ return session.getValue();
282
+ });
283
+ element.style.display = 'none';
284
+ container.style.background = 'white';
285
+ var editorDiv = document.createElement("div");
286
+ applyStyles(editorDiv, {
287
+ top: "0px",
288
+ left: "0px",
289
+ right: "0px",
290
+ bottom: "0px",
291
+ border: "1px solid gray",
292
+ position: "absolute"
293
+ });
294
+ container.appendChild(editorDiv);
295
+
296
+ var settingOpener = document.createElement("div");
297
+ applyStyles(settingOpener, {
298
+ position: "absolute",
299
+ right: "0px",
300
+ bottom: "0px",
301
+ background: "red",
302
+ cursor: "nw-resize",
303
+ borderStyle: "solid",
304
+ borderWidth: "9px 8px 10px 9px",
305
+ width: "2px",
306
+ borderColor: "lightblue gray gray lightblue",
307
+ zIndex: 101
308
+ });
309
+
310
+ var settingDiv = document.createElement("div");
311
+ var settingDivStyles = {
312
+ top: "0px",
313
+ left: "20%",
314
+ right: "0px",
315
+ bottom: "0px",
316
+ position: "absolute",
317
+ padding: "5px",
318
+ zIndex: 100,
319
+ color: "white",
320
+ display: "none",
321
+ overflow: "auto",
322
+ fontSize: "14px",
323
+ boxShadow: "-5px 2px 3px gray"
324
+ };
325
+ if (!UA.isOldIE) {
326
+ settingDivStyles.backgroundColor = "rgba(0, 0, 0, 0.6)";
327
+ } else {
328
+ settingDivStyles.backgroundColor = "#333";
329
+ }
330
+
331
+ applyStyles(settingDiv, settingDivStyles);
332
+ container.appendChild(settingDiv);
333
+
334
+ options = options || exports.defaultOptions;
335
+ var editor = ace.edit(editorDiv);
336
+ session = editor.getSession();
337
+
338
+ session.setValue(element.value || element.innerHTML);
339
+ editor.focus();
340
+ container.appendChild(settingOpener);
341
+ setupApi(editor, editorDiv, settingDiv, ace, options, load);
342
+ setupSettingPanel(settingDiv, settingOpener, editor);
343
+
344
+ var state = "";
345
+ event.addListener(settingOpener, "mousemove", function(e) {
346
+ var rect = this.getBoundingClientRect();
347
+ var x = e.clientX - rect.left, y = e.clientY - rect.top;
348
+ if (x + y < (rect.width + rect.height)/2) {
349
+ this.style.cursor = "pointer";
350
+ state = "toggle";
351
+ } else {
352
+ state = "resize";
353
+ this.style.cursor = "nw-resize";
354
+ }
355
+ });
356
+
357
+ event.addListener(settingOpener, "mousedown", function(e) {
358
+ if (state == "toggle") {
359
+ editor.setDisplaySettings();
360
+ return;
361
+ }
362
+ container.style.zIndex = 100000;
363
+ var rect = container.getBoundingClientRect();
364
+ var startX = rect.width + rect.left - e.clientX;
365
+ var startY = rect.height + rect.top - e.clientY;
366
+ event.capture(settingOpener, function(e) {
367
+ container.style.width = e.clientX - rect.left + startX + "px";
368
+ container.style.height = e.clientY - rect.top + startY + "px";
369
+ editor.resize();
370
+ }, function() {});
371
+ });
372
+
373
+ return editor;
374
+ };
375
+
376
+ function load(url, module, callback) {
377
+ net.loadScript(url, function() {
378
+ require([module], callback);
379
+ });
380
+ }
381
+
382
+ function setupApi(editor, editorDiv, settingDiv, ace, options, loader) {
383
+ var session = editor.getSession();
384
+ var renderer = editor.renderer;
385
+ loader = loader || load;
386
+
387
+ function toBool(value) {
388
+ return value === "true" || value == true;
389
+ }
390
+
391
+ editor.setDisplaySettings = function(display) {
392
+ if (display == null)
393
+ display = settingDiv.style.display == "none";
394
+ if (display) {
395
+ settingDiv.style.display = "block";
396
+ settingDiv.hideButton.focus();
397
+ editor.on("focus", function onFocus() {
398
+ editor.removeListener("focus", onFocus);
399
+ settingDiv.style.display = "none";
400
+ });
401
+ } else {
402
+ editor.focus();
403
+ }
404
+ };
405
+
406
+ editor.$setOption = editor.setOption;
407
+ editor.$getOption = editor.getOption;
408
+ editor.setOption = function(key, value) {
409
+ switch (key) {
410
+ case "mode":
411
+ editor.$setOption("mode", "ace/mode/" + value)
412
+ break;
413
+ case "theme":
414
+ editor.$setOption("theme", "ace/theme/" + value)
415
+ break;
416
+ case "keybindings":
417
+ switch (value) {
418
+ case "vim":
419
+ editor.setKeyboardHandler("ace/keyboard/vim");
420
+ break;
421
+ case "emacs":
422
+ editor.setKeyboardHandler("ace/keyboard/emacs");
423
+ break;
424
+ default:
425
+ editor.setKeyboardHandler(null);
426
+ }
427
+ break;
428
+
429
+ case "softWrap":
430
+ case "fontSize":
431
+ editor.$setOption(key, value);
432
+ break;
433
+
434
+ default:
435
+ editor.$setOption(key, toBool(value));
436
+ }
437
+ };
438
+
439
+ editor.getOption = function(key) {
440
+ switch (key) {
441
+ case "mode":
442
+ return editor.$getOption("mode").substr("ace/mode/".length)
443
+ break;
444
+
445
+ case "theme":
446
+ return editor.$getOption("theme").substr("ace/theme/".length)
447
+ break;
448
+
449
+ case "keybindings":
450
+ var value = editor.getKeyboardHandler()
451
+ switch (value && value.$id) {
452
+ case "ace/keyboard/vim":
453
+ return "vim";
454
+ case "ace/keyboard/emacs":
455
+ return "emacs";
456
+ default:
457
+ return "ace";
458
+ }
459
+ break;
460
+
461
+ default:
462
+ return editor.$getOption(key);
463
+ }
464
+ };
465
+
466
+ editor.setOptions(options);
467
+ return editor;
468
+ }
469
+
470
+ function setupSettingPanel(settingDiv, settingOpener, editor) {
471
+ var BOOL = null;
472
+
473
+ var desc = {
474
+ mode: "Mode:",
475
+ wrap: "Soft Wrap:",
476
+ theme: "Theme:",
477
+ fontSize: "Font Size:",
478
+ showGutter: "Display Gutter:",
479
+ keybindings: "Keyboard",
480
+ showPrintMargin: "Show Print Margin:",
481
+ useSoftTabs: "Use Soft Tabs:",
482
+ showInvisibles: "Show Invisibles"
483
+ };
484
+
485
+ var optionValues = {
486
+ mode: {
487
+ text: "Plain",
488
+ javascript: "JavaScript",
489
+ xml: "XML",
490
+ html: "HTML",
491
+ css: "CSS",
492
+ scss: "SCSS",
493
+ python: "Python",
494
+ php: "PHP",
495
+ java: "Java",
496
+ ruby: "Ruby",
497
+ c_cpp: "C/C++",
498
+ coffee: "CoffeeScript",
499
+ json: "json",
500
+ perl: "Perl",
501
+ clojure: "Clojure",
502
+ ocaml: "OCaml",
503
+ csharp: "C#",
504
+ haxe: "haXe",
505
+ svg: "SVG",
506
+ textile: "Textile",
507
+ groovy: "Groovy",
508
+ liquid: "Liquid",
509
+ Scala: "Scala"
510
+ },
511
+ theme: {
512
+ clouds: "Clouds",
513
+ clouds_midnight: "Clouds Midnight",
514
+ cobalt: "Cobalt",
515
+ crimson_editor: "Crimson Editor",
516
+ dawn: "Dawn",
517
+ eclipse: "Eclipse",
518
+ idle_fingers: "Idle Fingers",
519
+ kr_theme: "Kr Theme",
520
+ merbivore: "Merbivore",
521
+ merbivore_soft: "Merbivore Soft",
522
+ mono_industrial: "Mono Industrial",
523
+ monokai: "Monokai",
524
+ pastel_on_dark: "Pastel On Dark",
525
+ solarized_dark: "Solarized Dark",
526
+ solarized_light: "Solarized Light",
527
+ textmate: "Textmate",
528
+ twilight: "Twilight",
529
+ vibrant_ink: "Vibrant Ink"
530
+ },
531
+ showGutter: BOOL,
532
+ fontSize: {
533
+ "10px": "10px",
534
+ "11px": "11px",
535
+ "12px": "12px",
536
+ "14px": "14px",
537
+ "16px": "16px"
538
+ },
539
+ wrap: {
540
+ off: "Off",
541
+ 40: "40",
542
+ 80: "80",
543
+ free: "Free"
544
+ },
545
+ keybindings: {
546
+ ace: "ace",
547
+ vim: "vim",
548
+ emacs: "emacs"
549
+ },
550
+ showPrintMargin: BOOL,
551
+ useSoftTabs: BOOL,
552
+ showInvisibles: BOOL
553
+ };
554
+
555
+ var table = [];
556
+ table.push("<table><tr><th>Setting</th><th>Value</th></tr>");
557
+
558
+ function renderOption(builder, option, obj, cValue) {
559
+ if (!obj) {
560
+ builder.push(
561
+ "<input type='checkbox' title='", option, "' ",
562
+ cValue + "" == "true" ? "checked='true'" : "",
563
+ "'></input>"
564
+ );
565
+ return;
566
+ }
567
+ builder.push("<select title='" + option + "'>");
568
+ for (var value in obj) {
569
+ builder.push("<option value='" + value + "' ");
570
+
571
+ if (cValue == value) {
572
+ builder.push(" selected ");
573
+ }
574
+
575
+ builder.push(">",
576
+ obj[value],
577
+ "</option>");
578
+ }
579
+ builder.push("</select>");
580
+ }
581
+
582
+ for (var option in exports.defaultOptions) {
583
+ table.push("<tr><td>", desc[option], "</td>");
584
+ table.push("<td>");
585
+ renderOption(table, option, optionValues[option], editor.getOption(option));
586
+ table.push("</td></tr>");
587
+ }
588
+ table.push("</table>");
589
+ settingDiv.innerHTML = table.join("");
590
+
591
+ var onChange = function(e) {
592
+ var select = e.currentTarget;
593
+ editor.setOption(select.title, select.value);
594
+ };
595
+ var onClick = function(e) {
596
+ var cb = e.currentTarget;
597
+ editor.setOption(cb.title, cb.checked);
598
+ };
599
+ var selects = settingDiv.getElementsByTagName("select");
600
+ for (var i = 0; i < selects.length; i++)
601
+ selects[i].onchange = onChange;
602
+ var cbs = settingDiv.getElementsByTagName("input");
603
+ for (var i = 0; i < cbs.length; i++)
604
+ cbs[i].onclick = onClick;
605
+
606
+
607
+ var button = document.createElement("input");
608
+ button.type = "button";
609
+ button.value = "Hide";
610
+ event.addListener(button, "click", function() {
611
+ editor.setDisplaySettings(false);
612
+ });
613
+ settingDiv.appendChild(button);
614
+ settingDiv.hideButton = button;
615
+ }
616
+ exports.defaultOptions = {
617
+ mode: "javascript",
618
+ theme: "textmate",
619
+ wrap: "off",
620
+ fontSize: "12px",
621
+ showGutter: "false",
622
+ keybindings: "ace",
623
+ showPrintMargin: "false",
624
+ useSoftTabs: "true",
625
+ showInvisibles: "false"
626
+ };
627
+
628
+ });
629
+ (function() {
630
+ ace.require(["ace/ext/textarea"], function() {});
631
+ })();
632
+