codemirror-rails 2.36 → 3.00
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/codemirror/rails/version.rb +2 -2
- data/vendor/assets/javascripts/codemirror.js +3727 -2345
- data/vendor/assets/javascripts/codemirror/keymaps/vim.js +2226 -825
- data/vendor/assets/javascripts/codemirror/modes/clike.js +23 -8
- data/vendor/assets/javascripts/codemirror/modes/clojure.js +4 -4
- data/vendor/assets/javascripts/codemirror/modes/coffeescript.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/commonlisp.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/css.js +20 -3
- data/vendor/assets/javascripts/codemirror/modes/diff.js +2 -2
- data/vendor/assets/javascripts/codemirror/modes/ecl.js +192 -203
- data/vendor/assets/javascripts/codemirror/modes/erlang.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/gfm.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/go.js +1 -6
- data/vendor/assets/javascripts/codemirror/modes/groovy.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/haskell.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/haxe.js +13 -13
- data/vendor/assets/javascripts/codemirror/modes/htmlembedded.js +3 -3
- data/vendor/assets/javascripts/codemirror/modes/htmlmixed.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/http.js +98 -0
- data/vendor/assets/javascripts/codemirror/modes/javascript.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/jinja2.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/markdown.js +7 -14
- data/vendor/assets/javascripts/codemirror/modes/mysql.js +2 -2
- data/vendor/assets/javascripts/codemirror/modes/ntriples.js +0 -2
- data/vendor/assets/javascripts/codemirror/modes/ocaml.js +1 -2
- data/vendor/assets/javascripts/codemirror/modes/pascal.js +2 -2
- data/vendor/assets/javascripts/codemirror/modes/perl.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/php.js +5 -4
- data/vendor/assets/javascripts/codemirror/modes/pig.js +3 -4
- data/vendor/assets/javascripts/codemirror/modes/plsql.js +3 -4
- data/vendor/assets/javascripts/codemirror/modes/python.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/r.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/rpm-changes.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/rpm-spec.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/rst.js +1 -13
- data/vendor/assets/javascripts/codemirror/modes/ruby.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/rust.js +3 -3
- data/vendor/assets/javascripts/codemirror/modes/scheme.js +4 -4
- data/vendor/assets/javascripts/codemirror/modes/shell.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/sieve.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/smalltalk.js +2 -2
- data/vendor/assets/javascripts/codemirror/modes/smarty.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/sparql.js +2 -2
- data/vendor/assets/javascripts/codemirror/modes/stex.js +6 -13
- data/vendor/assets/javascripts/codemirror/modes/tiddlywiki.js +6 -37
- data/vendor/assets/javascripts/codemirror/modes/tiki.js +3 -3
- data/vendor/assets/javascripts/codemirror/modes/vb.js +3 -3
- data/vendor/assets/javascripts/codemirror/modes/velocity.js +2 -4
- data/vendor/assets/javascripts/codemirror/modes/verilog.js +182 -194
- data/vendor/assets/javascripts/codemirror/modes/xml.js +9 -5
- data/vendor/assets/javascripts/codemirror/modes/xquery.js +3 -4
- data/vendor/assets/javascripts/codemirror/utils/closetag.js +85 -164
- data/vendor/assets/javascripts/codemirror/utils/colorize.js +29 -0
- data/vendor/assets/javascripts/codemirror/utils/continuecomment.js +1 -1
- data/vendor/assets/javascripts/codemirror/utils/continuelist.js +28 -0
- data/vendor/assets/javascripts/codemirror/utils/dialog.js +21 -16
- data/vendor/assets/javascripts/codemirror/utils/foldcode.js +59 -73
- data/vendor/assets/javascripts/codemirror/utils/formatting.js +43 -131
- data/vendor/assets/javascripts/codemirror/utils/javascript-hint.js +22 -19
- data/vendor/assets/javascripts/codemirror/utils/match-highlighter.js +5 -3
- data/vendor/assets/javascripts/codemirror/utils/matchbrackets.js +63 -0
- data/vendor/assets/javascripts/codemirror/utils/multiplex.js +18 -0
- data/vendor/assets/javascripts/codemirror/utils/pig-hint.js +3 -9
- data/vendor/assets/javascripts/codemirror/utils/runmode.js +19 -20
- data/vendor/assets/javascripts/codemirror/utils/search.js +6 -5
- data/vendor/assets/javascripts/codemirror/utils/searchcursor.js +1 -1
- data/vendor/assets/javascripts/codemirror/utils/simple-hint.js +10 -10
- data/vendor/assets/javascripts/codemirror/utils/xml-hint.js +2 -2
- data/vendor/assets/stylesheets/codemirror.css +169 -104
- data/vendor/assets/stylesheets/codemirror/themes/ambiance-mobile.css +1 -1
- data/vendor/assets/stylesheets/codemirror/themes/ambiance.css +7 -12
- data/vendor/assets/stylesheets/codemirror/themes/blackboard.css +3 -3
- data/vendor/assets/stylesheets/codemirror/themes/cobalt.css +3 -3
- data/vendor/assets/stylesheets/codemirror/themes/erlang-dark.css +3 -3
- data/vendor/assets/stylesheets/codemirror/themes/lesser-dark.css +4 -4
- data/vendor/assets/stylesheets/codemirror/themes/monokai.css +3 -3
- data/vendor/assets/stylesheets/codemirror/themes/night.css +3 -3
- data/vendor/assets/stylesheets/codemirror/themes/rubyblue.css +3 -3
- data/vendor/assets/stylesheets/codemirror/themes/solarized.css +207 -0
- data/vendor/assets/stylesheets/codemirror/themes/twilight.css +4 -4
- data/vendor/assets/stylesheets/codemirror/themes/vibrant-ink.css +3 -3
- data/vendor/assets/stylesheets/codemirror/themes/xq-dark.css +3 -3
- data/vendor/assets/stylesheets/codemirror/utils/dialog.css +12 -7
- metadata +16 -11
@@ -211,14 +211,16 @@ CodeMirror.defineMode("xml", function(config, parserConfig) {
|
|
211
211
|
}
|
212
212
|
function endtag(startOfLine) {
|
213
213
|
return function(type) {
|
214
|
+
var tagName = curState.tagName;
|
215
|
+
curState.tagName = null;
|
214
216
|
if (type == "selfcloseTag" ||
|
215
|
-
(type == "endTag" && Kludges.autoSelfClosers.hasOwnProperty(
|
216
|
-
maybePopContext(
|
217
|
+
(type == "endTag" && Kludges.autoSelfClosers.hasOwnProperty(tagName.toLowerCase()))) {
|
218
|
+
maybePopContext(tagName.toLowerCase());
|
217
219
|
return cont();
|
218
220
|
}
|
219
221
|
if (type == "endTag") {
|
220
|
-
maybePopContext(
|
221
|
-
pushContext(
|
222
|
+
maybePopContext(tagName.toLowerCase());
|
223
|
+
pushContext(tagName, startOfLine);
|
222
224
|
return cont();
|
223
225
|
}
|
224
226
|
return cont();
|
@@ -310,7 +312,9 @@ CodeMirror.defineMode("xml", function(config, parserConfig) {
|
|
310
312
|
else return 0;
|
311
313
|
},
|
312
314
|
|
313
|
-
electricChars: "/"
|
315
|
+
electricChars: "/",
|
316
|
+
|
317
|
+
configuration: parserConfig.htmlMode ? "html" : "xml"
|
314
318
|
};
|
315
319
|
});
|
316
320
|
|
@@ -20,7 +20,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
21
|
THE SOFTWARE.
|
22
22
|
*/
|
23
|
-
CodeMirror.defineMode("xquery", function(
|
23
|
+
CodeMirror.defineMode("xquery", function() {
|
24
24
|
|
25
25
|
// The keywords object is set to the result of this self executing
|
26
26
|
// function. Each keyword is a property of the keywords object whose
|
@@ -401,7 +401,6 @@ CodeMirror.defineMode("xquery", function(config, parserConfig) {
|
|
401
401
|
// functions to test the current context of the state
|
402
402
|
function isInXmlBlock(state) { return isIn(state, "tag"); }
|
403
403
|
function isInXmlAttributeBlock(state) { return isIn(state, "attribute"); }
|
404
|
-
function isInCodeBlock(state) { return isIn(state, "codeblock"); }
|
405
404
|
function isInXmlConstructor(state) { return isIn(state, "xmlconstructor"); }
|
406
405
|
function isInString(state) { return isIn(state, "string"); }
|
407
406
|
|
@@ -424,14 +423,14 @@ CodeMirror.defineMode("xquery", function(config, parserConfig) {
|
|
424
423
|
}
|
425
424
|
|
426
425
|
function popStateStack(state) {
|
427
|
-
|
426
|
+
state.stack.pop();
|
428
427
|
var reinstateTokenize = state.stack.length && state.stack[state.stack.length-1].tokenize;
|
429
428
|
state.tokenize = reinstateTokenize || tokenBase;
|
430
429
|
}
|
431
430
|
|
432
431
|
// the interface for the mode API
|
433
432
|
return {
|
434
|
-
startState: function(
|
433
|
+
startState: function() {
|
435
434
|
return {
|
436
435
|
tokenize: tokenBase,
|
437
436
|
cc: [],
|
@@ -1,164 +1,85 @@
|
|
1
|
-
/**
|
2
|
-
* Tag-closer extension for CodeMirror.
|
3
|
-
*
|
4
|
-
* This extension adds
|
5
|
-
*
|
6
|
-
*
|
7
|
-
*
|
8
|
-
*
|
9
|
-
*
|
10
|
-
*
|
11
|
-
*
|
12
|
-
*
|
13
|
-
*
|
14
|
-
*
|
15
|
-
*
|
16
|
-
*
|
17
|
-
*
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
if (!state) throw CodeMirror.Pass;
|
87
|
-
var type = state.type;
|
88
|
-
|
89
|
-
if (tok.className == 'tag' && type != 'selfcloseTag') {
|
90
|
-
var tagName = state.tagName;
|
91
|
-
if (tagName.length > 0 && shouldClose(cm, vd, tagName)) {
|
92
|
-
insertEndTag(cm, indent, pos, tagName);
|
93
|
-
}
|
94
|
-
return;
|
95
|
-
}
|
96
|
-
|
97
|
-
// Undo the '>' insert and allow cm to handle the key instead.
|
98
|
-
cm.setSelection({line: pos.line, ch: pos.ch - 1}, pos);
|
99
|
-
cm.replaceSelection("");
|
100
|
-
|
101
|
-
} else if (ch == '/') {
|
102
|
-
if (tok.className == 'tag' && tok.string == '<') {
|
103
|
-
var ctx = state.context, tagName = ctx ? ctx.tagName : '';
|
104
|
-
if (tagName.length > 0) {
|
105
|
-
completeEndTag(cm, pos, tagName);
|
106
|
-
return;
|
107
|
-
}
|
108
|
-
}
|
109
|
-
}
|
110
|
-
|
111
|
-
}
|
112
|
-
|
113
|
-
throw CodeMirror.Pass; // Bubble if not handled
|
114
|
-
});
|
115
|
-
|
116
|
-
function insertEndTag(cm, indent, pos, tagName) {
|
117
|
-
if (shouldIndent(cm, indent, tagName)) {
|
118
|
-
cm.replaceSelection('\n\n</' + tagName + '>', 'end');
|
119
|
-
cm.indentLine(pos.line + 1);
|
120
|
-
cm.indentLine(pos.line + 2);
|
121
|
-
cm.setCursor({line: pos.line + 1, ch: cm.getLine(pos.line + 1).length});
|
122
|
-
} else {
|
123
|
-
cm.replaceSelection('</' + tagName + '>');
|
124
|
-
cm.setCursor(pos);
|
125
|
-
}
|
126
|
-
}
|
127
|
-
|
128
|
-
function shouldIndent(cm, indent, tagName) {
|
129
|
-
if (typeof indent == 'undefined' || indent == null || indent == true) {
|
130
|
-
indent = cm.getOption('closeTagIndent');
|
131
|
-
}
|
132
|
-
if (!indent) {
|
133
|
-
indent = [];
|
134
|
-
}
|
135
|
-
return indexOf(indent, tagName.toLowerCase()) != -1;
|
136
|
-
}
|
137
|
-
|
138
|
-
function shouldClose(cm, vd, tagName) {
|
139
|
-
if (cm.getOption('mode') == 'xml') {
|
140
|
-
return true; // always close xml tags
|
141
|
-
}
|
142
|
-
if (typeof vd == 'undefined' || vd == null) {
|
143
|
-
vd = cm.getOption('closeTagVoid');
|
144
|
-
}
|
145
|
-
if (!vd) {
|
146
|
-
vd = [];
|
147
|
-
}
|
148
|
-
return indexOf(vd, tagName.toLowerCase()) == -1;
|
149
|
-
}
|
150
|
-
|
151
|
-
// C&P from codemirror.js...would be nice if this were visible to utilities.
|
152
|
-
function indexOf(collection, elt) {
|
153
|
-
if (collection.indexOf) return collection.indexOf(elt);
|
154
|
-
for (var i = 0, e = collection.length; i < e; ++i)
|
155
|
-
if (collection[i] == elt) return i;
|
156
|
-
return -1;
|
157
|
-
}
|
158
|
-
|
159
|
-
function completeEndTag(cm, pos, tagName) {
|
160
|
-
cm.replaceSelection('/' + tagName + '>');
|
161
|
-
cm.setCursor({line: pos.line, ch: pos.ch + tagName.length + 2 });
|
162
|
-
}
|
163
|
-
|
164
|
-
})();
|
1
|
+
/**
|
2
|
+
* Tag-closer extension for CodeMirror.
|
3
|
+
*
|
4
|
+
* This extension adds an "autoCloseTags" option that can be set to
|
5
|
+
* either true to get the default behavior, or an object to further
|
6
|
+
* configure its behavior.
|
7
|
+
*
|
8
|
+
* These are supported options:
|
9
|
+
*
|
10
|
+
* `whenClosing` (default true)
|
11
|
+
* Whether to autoclose when the '/' of a closing tag is typed.
|
12
|
+
* `whenOpening` (default true)
|
13
|
+
* Whether to autoclose the tag when the final '>' of an opening
|
14
|
+
* tag is typed.
|
15
|
+
* `dontCloseTags` (default is empty tags for HTML, none for XML)
|
16
|
+
* An array of tag names that should not be autoclosed.
|
17
|
+
* `indentTags` (default is block tags for HTML, none for XML)
|
18
|
+
* An array of tag names that should, when opened, cause a
|
19
|
+
* blank line to be added inside the tag, and the blank line and
|
20
|
+
* closing line to be indented.
|
21
|
+
*
|
22
|
+
* See demos/closetag.html for a usage example.
|
23
|
+
*/
|
24
|
+
|
25
|
+
(function() {
|
26
|
+
CodeMirror.defineOption("autoCloseTags", false, function(cm, val, old) {
|
27
|
+
if (val && (old == CodeMirror.Init || !old)) {
|
28
|
+
var map = {name: "autoCloseTags"};
|
29
|
+
if (typeof val != "object" || val.whenClosing)
|
30
|
+
map["'/'"] = function(cm) { autoCloseTag(cm, '/'); };
|
31
|
+
if (typeof val != "object" || val.whenOpening)
|
32
|
+
map["'>'"] = function(cm) { autoCloseTag(cm, '>'); };
|
33
|
+
cm.addKeyMap(map);
|
34
|
+
} else if (!val && (old != CodeMirror.Init && old)) {
|
35
|
+
cm.removeKeyMap("autoCloseTags");
|
36
|
+
}
|
37
|
+
});
|
38
|
+
|
39
|
+
var htmlDontClose = ["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param",
|
40
|
+
"source", "track", "wbr"];
|
41
|
+
var htmlIndent = ["applet", "blockquote", "body", "button", "div", "dl", "fieldset", "form", "frameset", "h1", "h2", "h3", "h4",
|
42
|
+
"h5", "h6", "head", "html", "iframe", "layer", "legend", "object", "ol", "p", "select", "table", "ul"];
|
43
|
+
|
44
|
+
function autoCloseTag(cm, ch) {
|
45
|
+
var pos = cm.getCursor(), tok = cm.getTokenAt(pos);
|
46
|
+
var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state;
|
47
|
+
if (inner.mode.name != "xml") throw CodeMirror.Pass;
|
48
|
+
|
49
|
+
var opt = cm.getOption("autoCloseTags"), html = inner.mode.configuration == "html";
|
50
|
+
var dontCloseTags = (typeof opt == "object" && opt.dontCloseTags) || (html && htmlDontClose);
|
51
|
+
var indentTags = (typeof opt == "object" && opt.indentTags) || (html && htmlIndent);
|
52
|
+
|
53
|
+
if (ch == ">" && state.tagName) {
|
54
|
+
var tagName = state.tagName;
|
55
|
+
if (tok.end > pos.ch) tagName = tagName.slice(0, tagName.length - tok.end + pos.ch);
|
56
|
+
var lowerTagName = tagName.toLowerCase();
|
57
|
+
// Don't process the '>' at the end of an end-tag or self-closing tag
|
58
|
+
if (tok.type == "tag" && state.type == "closeTag" ||
|
59
|
+
/\/\s*$/.test(tok.string) ||
|
60
|
+
dontCloseTags && indexOf(dontCloseTags, lowerTagName) > -1)
|
61
|
+
throw CodeMirror.Pass;
|
62
|
+
|
63
|
+
var doIndent = indentTags && indexOf(indentTags, lowerTagName) > -1;
|
64
|
+
cm.replaceSelection(">" + (doIndent ? "\n\n" : "") + "</" + tagName + ">",
|
65
|
+
doIndent ? {line: pos.line + 1, ch: 0} : {line: pos.line, ch: pos.ch + 1});
|
66
|
+
if (doIndent) {
|
67
|
+
cm.indentLine(pos.line + 1);
|
68
|
+
cm.indentLine(pos.line + 2);
|
69
|
+
}
|
70
|
+
return;
|
71
|
+
} else if (ch == "/" && tok.type == "tag" && tok.string == "<") {
|
72
|
+
var tagName = state.context && state.context.tagName;
|
73
|
+
if (tagName) cm.replaceSelection("/" + tagName + ">", "end");
|
74
|
+
return;
|
75
|
+
}
|
76
|
+
throw CodeMirror.Pass;
|
77
|
+
}
|
78
|
+
|
79
|
+
function indexOf(collection, elt) {
|
80
|
+
if (collection.indexOf) return collection.indexOf(elt);
|
81
|
+
for (var i = 0, e = collection.length; i < e; ++i)
|
82
|
+
if (collection[i] == elt) return i;
|
83
|
+
return -1;
|
84
|
+
}
|
85
|
+
})();
|
@@ -0,0 +1,29 @@
|
|
1
|
+
CodeMirror.colorize = (function() {
|
2
|
+
|
3
|
+
var isBlock = /^(p|li|div|h\\d|pre|blockquote|td)$/;
|
4
|
+
|
5
|
+
function textContent(node, out) {
|
6
|
+
if (node.nodeType == 3) return out.push(node.nodeValue);
|
7
|
+
for (var ch = node.firstChild; ch; ch = ch.nextSibling) {
|
8
|
+
textContent(ch, out);
|
9
|
+
if (isBlock.test(node.nodeType)) out.push("\n");
|
10
|
+
}
|
11
|
+
}
|
12
|
+
|
13
|
+
return function(collection, defaultMode) {
|
14
|
+
if (!collection) collection = document.body.getElementsByTagName("pre");
|
15
|
+
|
16
|
+
for (var i = 0; i < collection.length; ++i) {
|
17
|
+
var node = collection[i];
|
18
|
+
var mode = node.getAttribute("data-lang") || defaultMode;
|
19
|
+
if (!mode) continue;
|
20
|
+
|
21
|
+
var text = [];
|
22
|
+
textContent(node, text);
|
23
|
+
node.innerHTML = "";
|
24
|
+
CodeMirror.runMode(text.join(""), mode, node);
|
25
|
+
|
26
|
+
node.className += " cm-s-default";
|
27
|
+
}
|
28
|
+
};
|
29
|
+
})();
|
@@ -10,7 +10,7 @@
|
|
10
10
|
var mode = CodeMirror.innerMode(cm.getMode(), token.state).mode;
|
11
11
|
var space;
|
12
12
|
|
13
|
-
if (token.
|
13
|
+
if (token.type == "comment" && mode.blockCommentStart) {
|
14
14
|
var end = token.string.indexOf(mode.blockCommentEnd);
|
15
15
|
var full = cm.getRange({line: pos.line, ch: 0}, {line: pos.line, ch: token.end}), found;
|
16
16
|
if (end != -1 && end == token.string.length - mode.blockCommentEnd.length) {
|
@@ -0,0 +1,28 @@
|
|
1
|
+
(function() {
|
2
|
+
CodeMirror.commands.newlineAndIndentContinueMarkdownList = function(cm) {
|
3
|
+
var pos = cm.getCursor(), token = cm.getTokenAt(pos);
|
4
|
+
var space;
|
5
|
+
if (token.className == "string") {
|
6
|
+
var full = cm.getRange({line: pos.line, ch: 0}, {line: pos.line, ch: token.end});
|
7
|
+
var listStart = /\*|\d+\./, listContinue;
|
8
|
+
if (token.string.search(listStart) == 0) {
|
9
|
+
var reg = /^[\W]*(\d+)\./g;
|
10
|
+
var matches = reg.exec(full);
|
11
|
+
if(matches)
|
12
|
+
listContinue = (parseInt(matches[1]) + 1) + ". ";
|
13
|
+
else
|
14
|
+
listContinue = "* ";
|
15
|
+
space = full.slice(0, token.start);
|
16
|
+
if (!/^\s*$/.test(space)) {
|
17
|
+
space = "";
|
18
|
+
for (var i = 0; i < token.start; ++i) space += " ";
|
19
|
+
}
|
20
|
+
}
|
21
|
+
}
|
22
|
+
|
23
|
+
if (space != null)
|
24
|
+
cm.replaceSelection("\n" + space + listContinue, "end");
|
25
|
+
else
|
26
|
+
cm.execCommand("newlineAndIndent");
|
27
|
+
};
|
28
|
+
})();
|
@@ -1,16 +1,21 @@
|
|
1
1
|
// Open simple dialogs on top of an editor. Relies on dialog.css.
|
2
2
|
|
3
3
|
(function() {
|
4
|
-
function dialogDiv(cm, template) {
|
4
|
+
function dialogDiv(cm, template, bottom) {
|
5
5
|
var wrap = cm.getWrapperElement();
|
6
|
-
var dialog
|
7
|
-
dialog
|
8
|
-
|
6
|
+
var dialog;
|
7
|
+
dialog = wrap.appendChild(document.createElement("div"));
|
8
|
+
if (bottom) {
|
9
|
+
dialog.className = "CodeMirror-dialog CodeMirror-dialog-bottom";
|
10
|
+
} else {
|
11
|
+
dialog.className = "CodeMirror-dialog CodeMirror-dialog-top";
|
12
|
+
}
|
13
|
+
dialog.innerHTML = template;
|
9
14
|
return dialog;
|
10
15
|
}
|
11
16
|
|
12
|
-
CodeMirror.defineExtension("openDialog", function(template, callback) {
|
13
|
-
var dialog = dialogDiv(this, template);
|
17
|
+
CodeMirror.defineExtension("openDialog", function(template, callback, options) {
|
18
|
+
var dialog = dialogDiv(this, template, options && options.bottom);
|
14
19
|
var closed = false, me = this;
|
15
20
|
function close() {
|
16
21
|
if (closed) return;
|
@@ -19,7 +24,7 @@
|
|
19
24
|
}
|
20
25
|
var inp = dialog.getElementsByTagName("input")[0], button;
|
21
26
|
if (inp) {
|
22
|
-
CodeMirror.
|
27
|
+
CodeMirror.on(inp, "keydown", function(e) {
|
23
28
|
if (e.keyCode == 13 || e.keyCode == 27) {
|
24
29
|
CodeMirror.e_stop(e);
|
25
30
|
close();
|
@@ -28,20 +33,20 @@
|
|
28
33
|
}
|
29
34
|
});
|
30
35
|
inp.focus();
|
31
|
-
CodeMirror.
|
36
|
+
CodeMirror.on(inp, "blur", close);
|
32
37
|
} else if (button = dialog.getElementsByTagName("button")[0]) {
|
33
|
-
CodeMirror.
|
38
|
+
CodeMirror.on(button, "click", function() {
|
34
39
|
close();
|
35
40
|
me.focus();
|
36
41
|
});
|
37
42
|
button.focus();
|
38
|
-
CodeMirror.
|
43
|
+
CodeMirror.on(button, "blur", close);
|
39
44
|
}
|
40
45
|
return close;
|
41
46
|
});
|
42
47
|
|
43
|
-
CodeMirror.defineExtension("openConfirm", function(template, callbacks) {
|
44
|
-
var dialog = dialogDiv(this, template);
|
48
|
+
CodeMirror.defineExtension("openConfirm", function(template, callbacks, options) {
|
49
|
+
var dialog = dialogDiv(this, template, options && options.bottom);
|
45
50
|
var buttons = dialog.getElementsByTagName("button");
|
46
51
|
var closed = false, me = this, blurring = 1;
|
47
52
|
function close() {
|
@@ -54,17 +59,17 @@
|
|
54
59
|
for (var i = 0; i < buttons.length; ++i) {
|
55
60
|
var b = buttons[i];
|
56
61
|
(function(callback) {
|
57
|
-
CodeMirror.
|
62
|
+
CodeMirror.on(b, "click", function(e) {
|
58
63
|
CodeMirror.e_preventDefault(e);
|
59
64
|
close();
|
60
65
|
if (callback) callback(me);
|
61
66
|
});
|
62
67
|
})(callbacks[i]);
|
63
|
-
CodeMirror.
|
68
|
+
CodeMirror.on(b, "blur", function() {
|
64
69
|
--blurring;
|
65
70
|
setTimeout(function() { if (blurring <= 0) close(); }, 200);
|
66
71
|
});
|
67
|
-
CodeMirror.
|
72
|
+
CodeMirror.on(b, "focus", function() { ++blurring; });
|
68
73
|
}
|
69
74
|
});
|
70
|
-
})();
|
75
|
+
})();
|