stackprofiler 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/README.md +1 -1
- data/config.ru +3 -2
- data/lib/stackprofiler.rb +0 -1
- data/lib/stackprofiler/filters/build_tree.rb +3 -4
- data/lib/stackprofiler/filters/gem_removal.rb +3 -0
- data/lib/stackprofiler/web_ui.rb +34 -11
- data/lib/stackprofiler/web_ui/public/css/stackprofiler.css +77 -0
- data/lib/stackprofiler/web_ui/public/js/stackprofiler.js +129 -58
- data/lib/stackprofiler/web_ui/public/vendor/ace/ace.js +18298 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-beautify.js +334 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-chromevox.js +541 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-elastic_tabstops_lite.js +275 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-emmet.js +1190 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-error_marker.js +6 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-keybinding_menu.js +170 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-language_tools.js +1934 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-linking.js +52 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-modelist.js +187 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-old_ie.js +494 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-searchbox.js +409 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-settings_menu.js +637 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-spellcheck.js +71 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-split.js +246 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-static_highlight.js +154 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-statusbar.js +51 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-textarea.js +632 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-themelist.js +58 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/ext-whitespace.js +181 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/keybinding-emacs.js +1182 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/keybinding-vim.js +5320 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/mode-haml.js +525 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/mode-html.js +2427 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/mode-html_ruby.js +2955 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/mode-javascript.js +1025 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/mode-json.js +668 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/mode-ruby.js +839 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/mode-xml.js +637 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/mode-yaml.js +256 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/theme-xcode.js +89 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/worker-coffee.js +7599 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/worker-css.js +8682 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/worker-html.js +11527 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/worker-javascript.js +10429 -0
- data/lib/stackprofiler/web_ui/public/vendor/ace/worker-json.js +2319 -0
- data/lib/stackprofiler/web_ui/views/index.erb +1 -1
- data/lib/stackprofiler/web_ui/views/layout.erb +2 -55
- data/stackprofiler.gemspec +2 -4
- metadata +42 -19
- 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
|
+
|