codemirror-rails 4.1 → 4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/codemirror/rails/version.rb +2 -2
- data/vendor/assets/javascripts/codemirror.js +133 -58
- data/vendor/assets/javascripts/codemirror/addons/comment/comment.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/comment/continuecomment.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/dialog/dialog.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/display/fullscreen.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/display/placeholder.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/display/rulers.js +16 -6
- data/vendor/assets/javascripts/codemirror/addons/edit/closebrackets.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/edit/closetag.js +28 -3
- data/vendor/assets/javascripts/codemirror/addons/edit/continuelist.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/edit/matchbrackets.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/edit/matchtags.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/edit/trailingspace.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/fold/brace-fold.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/fold/comment-fold.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/fold/foldcode.js +36 -8
- data/vendor/assets/javascripts/codemirror/addons/fold/foldgutter.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/fold/indent-fold.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/fold/markdown-fold.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/fold/xml-fold.js +4 -1
- data/vendor/assets/javascripts/codemirror/addons/hint/anyword-hint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/hint/css-hint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/hint/html-hint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/hint/javascript-hint.js +7 -2
- data/vendor/assets/javascripts/codemirror/addons/hint/python-hint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/hint/show-hint.js +74 -36
- data/vendor/assets/javascripts/codemirror/addons/hint/sql-hint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/hint/xml-hint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/lint/coffeescript-lint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/lint/css-lint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/lint/javascript-lint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/lint/json-lint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/lint/lint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/lint/yaml-lint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/merge/merge.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/mode/loadmode.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/mode/multiplex.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/mode/overlay.js +12 -3
- data/vendor/assets/javascripts/codemirror/addons/runmode/colorize.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/runmode/runmode-standalone.js +4 -1
- data/vendor/assets/javascripts/codemirror/addons/runmode/runmode.js +4 -1
- data/vendor/assets/javascripts/codemirror/addons/runmode/runmode.node.js +4 -1
- data/vendor/assets/javascripts/codemirror/addons/scroll/scrollpastend.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/search/match-highlighter.js +6 -2
- data/vendor/assets/javascripts/codemirror/addons/search/search.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/search/searchcursor.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/selection/active-line.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/selection/mark-selection.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/tern/tern.js +23 -16
- data/vendor/assets/javascripts/codemirror/addons/tern/worker.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/wrap/hardwrap.js +3 -0
- data/vendor/assets/javascripts/codemirror/keymaps/emacs.js +4 -7
- data/vendor/assets/javascripts/codemirror/keymaps/sublime.js +11 -8
- data/vendor/assets/javascripts/codemirror/keymaps/vim.js +92 -33
- data/vendor/assets/javascripts/codemirror/modes/apl.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/asterisk.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/clike.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/clojure.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/cobol.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/coffeescript.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/commonlisp.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/css.js +13 -14
- data/vendor/assets/javascripts/codemirror/modes/cypher.js +146 -0
- data/vendor/assets/javascripts/codemirror/modes/d.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/diff.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/django.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/dtd.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/dylan.js +15 -0
- data/vendor/assets/javascripts/codemirror/modes/ecl.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/eiffel.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/erlang.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/fortran.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/gas.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/gfm.js +9 -1
- data/vendor/assets/javascripts/codemirror/modes/gherkin.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/go.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/groovy.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/haml.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/haskell.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/haxe.js +5 -1
- data/vendor/assets/javascripts/codemirror/modes/htmlembedded.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/htmlmixed.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/http.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/jade.js +569 -81
- data/vendor/assets/javascripts/codemirror/modes/javascript.js +5 -0
- data/vendor/assets/javascripts/codemirror/modes/jinja2.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/julia.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/livescript.js +17 -17
- data/vendor/assets/javascripts/codemirror/modes/lua.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/markdown.js +5 -3
- data/vendor/assets/javascripts/codemirror/modes/mirc.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/mllike.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/nginx.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/ntriples.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/octave.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/pascal.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/pegjs.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/perl.js +5 -0
- data/vendor/assets/javascripts/codemirror/modes/php.js +5 -2
- data/vendor/assets/javascripts/codemirror/modes/pig.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/properties.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/puppet.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/python.js +284 -328
- data/vendor/assets/javascripts/codemirror/modes/q.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/r.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/rpm.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/rst.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/ruby.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/rust.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/sass.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/scheme.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/shell.js +9 -2
- data/vendor/assets/javascripts/codemirror/modes/sieve.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/smalltalk.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/smarty.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/smartymixed.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/solr.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/sparql.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/sql.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/stex.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/tcl.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/tiddlywiki.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/tiki.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/toml.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/turtle.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/vb.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/vbscript.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/velocity.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/verilog.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/xml.js +4 -1
- data/vendor/assets/javascripts/codemirror/modes/xquery.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/yaml.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/z80.js +3 -0
- data/vendor/assets/stylesheets/codemirror/addons/tern/tern.css +1 -0
- data/vendor/assets/stylesheets/codemirror/themes/neo.css +40 -0
- metadata +4 -2
@@ -1,3 +1,6 @@
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
3
|
+
|
1
4
|
(function(mod) {
|
2
5
|
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
3
6
|
mod(require("../../lib/codemirror"));
|
@@ -34,15 +37,22 @@
|
|
34
37
|
var minH = cm.display.scroller.offsetHeight + 30;
|
35
38
|
for (var i = 0; i < val.length; i++) {
|
36
39
|
var elt = document.createElement("div");
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
+
elt.className = "CodeMirror-ruler";
|
41
|
+
var col, cls = null, conf = val[i];
|
42
|
+
if (typeof conf == "number") {
|
43
|
+
col = conf;
|
40
44
|
} else {
|
41
|
-
col =
|
45
|
+
col = conf.column;
|
46
|
+
if (conf.className) elt.className = " " + conf.className;
|
47
|
+
if (conf.color) elt.style.borderColor = conf.color;
|
48
|
+
if (conf.lineStyle) elt.style.borderLeftStyle = conf.lineStyle;
|
49
|
+
if (conf.width) elt.style.borderLeftWidth = conf.width;
|
42
50
|
cls = val[i].className;
|
43
51
|
}
|
44
|
-
elt.
|
45
|
-
elt.style.
|
52
|
+
elt.style.left = (left + col * cw) + "px";
|
53
|
+
elt.style.top = "-50px";
|
54
|
+
elt.style.bottom = "-20px";
|
55
|
+
elt.style.minHeight = minH + "px";
|
46
56
|
cm.display.lineSpace.insertBefore(elt, cm.display.cursorDiv);
|
47
57
|
}
|
48
58
|
}
|
@@ -1,3 +1,6 @@
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
3
|
+
|
1
4
|
/**
|
2
5
|
* Tag-closer extension for CodeMirror.
|
3
6
|
*
|
@@ -55,6 +58,7 @@
|
|
55
58
|
var pos = ranges[i].head, tok = cm.getTokenAt(pos);
|
56
59
|
var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state;
|
57
60
|
if (inner.mode.name != "xml" || !state.tagName) return CodeMirror.Pass;
|
61
|
+
|
58
62
|
var opt = cm.getOption("autoCloseTags"), html = inner.mode.configuration == "html";
|
59
63
|
var dontCloseTags = (typeof opt == "object" && opt.dontCloseTags) || (html && htmlDontClose);
|
60
64
|
var indentTags = (typeof opt == "object" && opt.indentTags) || (html && htmlIndent);
|
@@ -68,8 +72,7 @@
|
|
68
72
|
tok.type == "tag" && state.type == "closeTag" ||
|
69
73
|
tok.string.indexOf("/") == (tok.string.length - 1) || // match something like <someTagName />
|
70
74
|
dontCloseTags && indexOf(dontCloseTags, lowerTagName) > -1 ||
|
71
|
-
|
72
|
-
Math.min(cm.lastLine() + 1, pos.line + 50)))
|
75
|
+
closingTagExists(cm, tagName, pos, state, true))
|
73
76
|
return CodeMirror.Pass;
|
74
77
|
|
75
78
|
var indent = indentTags && indexOf(indentTags, lowerTagName) > -1;
|
@@ -100,7 +103,8 @@
|
|
100
103
|
var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state;
|
101
104
|
if (tok.type == "string" || tok.string.charAt(0) != "<" ||
|
102
105
|
tok.start != pos.ch - 1 || inner.mode.name != "xml" ||
|
103
|
-
!state.context || !state.context.tagName
|
106
|
+
!state.context || !state.context.tagName ||
|
107
|
+
closingTagExists(cm, state.context.tagName, pos, state))
|
104
108
|
return CodeMirror.Pass;
|
105
109
|
replacements[i] = "/" + state.context.tagName + ">";
|
106
110
|
}
|
@@ -113,4 +117,25 @@
|
|
113
117
|
if (collection[i] == elt) return i;
|
114
118
|
return -1;
|
115
119
|
}
|
120
|
+
|
121
|
+
// If xml-fold is loaded, we use its functionality to try and verify
|
122
|
+
// whether a given tag is actually unclosed.
|
123
|
+
function closingTagExists(cm, tagName, pos, state, newTag) {
|
124
|
+
if (!CodeMirror.scanForClosingTag) return false;
|
125
|
+
var end = Math.min(cm.lastLine() + 1, pos.line + 500);
|
126
|
+
var nextClose = CodeMirror.scanForClosingTag(cm, pos, null, end);
|
127
|
+
if (!nextClose || nextClose.tag != tagName) return false;
|
128
|
+
var cx = state.context;
|
129
|
+
// If the immediate wrapping context contains onCx instances of
|
130
|
+
// the same tag, a closing tag only exists if there are at least
|
131
|
+
// that many closing tags of that type following.
|
132
|
+
for (var onCx = newTag ? 1 : 0; cx && cx.tagName == tagName; cx = cx.prev) ++onCx;
|
133
|
+
pos = nextClose.to;
|
134
|
+
for (var i = 1; i < onCx; i++) {
|
135
|
+
var next = CodeMirror.scanForClosingTag(cm, pos, null, end);
|
136
|
+
if (!next || next.tag != tagName) return false;
|
137
|
+
pos = next.to;
|
138
|
+
}
|
139
|
+
return true;
|
140
|
+
}
|
116
141
|
});
|
@@ -1,3 +1,6 @@
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
3
|
+
|
1
4
|
(function(mod) {
|
2
5
|
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
3
6
|
mod(require("../../lib/codemirror"), require("../fold/xml-fold"));
|
@@ -1,3 +1,6 @@
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
3
|
+
|
1
4
|
(function(mod) {
|
2
5
|
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
3
6
|
mod(require("../../lib/codemirror"));
|
@@ -9,10 +12,14 @@
|
|
9
12
|
"use strict";
|
10
13
|
|
11
14
|
function doFold(cm, pos, options, force) {
|
12
|
-
|
13
|
-
|
15
|
+
if (options && options.call) {
|
16
|
+
var finder = options;
|
17
|
+
options = null;
|
18
|
+
} else {
|
19
|
+
var finder = getOption(cm, options, "rangeFinder");
|
20
|
+
}
|
14
21
|
if (typeof pos == "number") pos = CodeMirror.Pos(pos, 0);
|
15
|
-
var minSize = options
|
22
|
+
var minSize = getOption(cm, options, "minFoldSize");
|
16
23
|
|
17
24
|
function getRange(allowFolded) {
|
18
25
|
var range = finder(cm, pos);
|
@@ -29,14 +36,17 @@
|
|
29
36
|
}
|
30
37
|
|
31
38
|
var range = getRange(true);
|
32
|
-
if (options
|
39
|
+
if (getOption(cm, options, "scanUp")) while (!range && pos.line > cm.firstLine()) {
|
33
40
|
pos = CodeMirror.Pos(pos.line - 1, 0);
|
34
41
|
range = getRange(false);
|
35
42
|
}
|
36
43
|
if (!range || range.cleared || force === "unfold") return;
|
37
44
|
|
38
|
-
var myWidget = makeWidget(options);
|
39
|
-
CodeMirror.on(myWidget, "mousedown", function() {
|
45
|
+
var myWidget = makeWidget(cm, options);
|
46
|
+
CodeMirror.on(myWidget, "mousedown", function(e) {
|
47
|
+
myRange.clear();
|
48
|
+
CodeMirror.e_preventDefault(e);
|
49
|
+
});
|
40
50
|
var myRange = cm.markText(range.from, range.to, {
|
41
51
|
replacedWith: myWidget,
|
42
52
|
clearOnEnter: true,
|
@@ -48,8 +58,8 @@
|
|
48
58
|
CodeMirror.signal(cm, "fold", cm, range.from, range.to);
|
49
59
|
}
|
50
60
|
|
51
|
-
function makeWidget(options) {
|
52
|
-
var widget = (
|
61
|
+
function makeWidget(cm, options) {
|
62
|
+
var widget = getOption(cm, options, "widget");
|
53
63
|
if (typeof widget == "string") {
|
54
64
|
var text = document.createTextNode(widget);
|
55
65
|
widget = document.createElement("span");
|
@@ -114,4 +124,22 @@
|
|
114
124
|
if (cur) return cur;
|
115
125
|
}
|
116
126
|
});
|
127
|
+
|
128
|
+
var defaultOptions = {
|
129
|
+
rangeFinder: CodeMirror.fold.auto,
|
130
|
+
widget: "\u2194",
|
131
|
+
minFoldSize: 0,
|
132
|
+
scanUp: false
|
133
|
+
};
|
134
|
+
|
135
|
+
CodeMirror.defineOption("foldOptions", null);
|
136
|
+
|
137
|
+
function getOption(cm, options, name) {
|
138
|
+
if (options && options[name] !== undefined)
|
139
|
+
return options[name];
|
140
|
+
var editorOptions = cm.options.foldOptions;
|
141
|
+
if (editorOptions && editorOptions[name] !== undefined)
|
142
|
+
return editorOptions[name];
|
143
|
+
return defaultOptions[name];
|
144
|
+
}
|
117
145
|
});
|
@@ -1,3 +1,6 @@
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
3
|
+
|
1
4
|
(function(mod) {
|
2
5
|
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
3
6
|
mod(require("../../lib/codemirror"), require("./foldcode"));
|
@@ -1,3 +1,6 @@
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
3
|
+
|
1
4
|
(function(mod) {
|
2
5
|
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
3
6
|
mod(require("../../lib/codemirror"));
|
@@ -173,6 +176,6 @@
|
|
173
176
|
// Used by addon/edit/closetag.js
|
174
177
|
CodeMirror.scanForClosingTag = function(cm, pos, name, end) {
|
175
178
|
var iter = new Iter(cm, pos.line, pos.ch, end ? {from: 0, to: end} : null);
|
176
|
-
return
|
179
|
+
return findMatchingClose(iter, name);
|
177
180
|
};
|
178
181
|
});
|
@@ -1,3 +1,6 @@
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
3
|
+
|
1
4
|
(function(mod) {
|
2
5
|
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
3
6
|
mod(require("../../lib/codemirror"), require("../../mode/css/css"));
|
@@ -1,3 +1,6 @@
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
3
|
+
|
1
4
|
(function(mod) {
|
2
5
|
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
3
6
|
mod(require("../../lib/codemirror"));
|
@@ -108,7 +111,8 @@
|
|
108
111
|
if (obj.type && obj.type.indexOf("variable") === 0) {
|
109
112
|
if (options && options.additionalContext)
|
110
113
|
base = options.additionalContext[obj.string];
|
111
|
-
|
114
|
+
if (!options || options.useGlobalScope !== false)
|
115
|
+
base = base || window[obj.string];
|
112
116
|
} else if (obj.type == "string") {
|
113
117
|
base = "";
|
114
118
|
} else if (obj.type == "atom") {
|
@@ -128,7 +132,8 @@
|
|
128
132
|
// (reading into JS mode internals to get at the local and global variables)
|
129
133
|
for (var v = token.state.localVars; v; v = v.next) maybeAdd(v.name);
|
130
134
|
for (var v = token.state.globalVars; v; v = v.next) maybeAdd(v.name);
|
131
|
-
|
135
|
+
if (!options || options.useGlobalScope !== false)
|
136
|
+
gatherCompletions(window);
|
132
137
|
forEach(keywords, maybeAdd);
|
133
138
|
}
|
134
139
|
return found;
|
@@ -1,3 +1,6 @@
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
3
|
+
|
1
4
|
(function(mod) {
|
2
5
|
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
3
6
|
mod(require("../../lib/codemirror"));
|
@@ -11,28 +14,35 @@
|
|
11
14
|
var HINT_ELEMENT_CLASS = "CodeMirror-hint";
|
12
15
|
var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active";
|
13
16
|
|
17
|
+
// This is the old interface, kept around for now to stay
|
18
|
+
// backwards-compatible.
|
14
19
|
CodeMirror.showHint = function(cm, getHints, options) {
|
20
|
+
if (!getHints) return cm.showHint(options);
|
21
|
+
if (options && options.async) getHints.async = true;
|
22
|
+
var newOpts = {hint: getHints};
|
23
|
+
if (options) for (var prop in options) newOpts[prop] = options[prop];
|
24
|
+
return cm.showHint(newOpts);
|
25
|
+
};
|
26
|
+
|
27
|
+
CodeMirror.defineExtension("showHint", function(options) {
|
15
28
|
// We want a single cursor position.
|
16
|
-
if (
|
17
|
-
if (getHints == null) {
|
18
|
-
if (options && options.async) return;
|
19
|
-
else getHints = CodeMirror.hint.auto;
|
20
|
-
}
|
29
|
+
if (this.listSelections().length > 1 || this.somethingSelected()) return;
|
21
30
|
|
22
|
-
if (
|
31
|
+
if (this.state.completionActive) this.state.completionActive.close();
|
32
|
+
var completion = this.state.completionActive = new Completion(this, options);
|
33
|
+
var getHints = completion.options.hint;
|
34
|
+
if (!getHints) return;
|
23
35
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
getHints(cm, function(hints) { completion.showHints(hints); }, completion.options);
|
36
|
+
CodeMirror.signal(this, "startCompletion", this);
|
37
|
+
if (getHints.async)
|
38
|
+
getHints(this, function(hints) { completion.showHints(hints); }, completion.options);
|
28
39
|
else
|
29
|
-
return completion.showHints(getHints(
|
30
|
-
};
|
40
|
+
return completion.showHints(getHints(this, completion.options));
|
41
|
+
});
|
31
42
|
|
32
|
-
function Completion(cm,
|
43
|
+
function Completion(cm, options) {
|
33
44
|
this.cm = cm;
|
34
|
-
this.
|
35
|
-
this.options = options;
|
45
|
+
this.options = this.buildOptions(options);
|
36
46
|
this.widget = this.onClose = null;
|
37
47
|
}
|
38
48
|
|
@@ -62,7 +72,7 @@
|
|
62
72
|
showHints: function(data) {
|
63
73
|
if (!data || !data.list.length || !this.active()) return this.close();
|
64
74
|
|
65
|
-
if (this.options.completeSingle
|
75
|
+
if (this.options.completeSingle && data.list.length == 1)
|
66
76
|
this.pick(data, 0);
|
67
77
|
else
|
68
78
|
this.showWidget(data);
|
@@ -73,7 +83,7 @@
|
|
73
83
|
CodeMirror.signal(data, "shown");
|
74
84
|
|
75
85
|
var debounce = 0, completion = this, finished;
|
76
|
-
var closeOn = this.options.closeCharacters
|
86
|
+
var closeOn = this.options.closeCharacters;
|
77
87
|
var startPos = this.cm.getCursor(), startLen = this.cm.getLine(startPos.line).length;
|
78
88
|
|
79
89
|
var requestAnimationFrame = window.requestAnimationFrame || function(fn) {
|
@@ -92,10 +102,11 @@
|
|
92
102
|
function update() {
|
93
103
|
if (finished) return;
|
94
104
|
CodeMirror.signal(data, "update");
|
95
|
-
|
96
|
-
|
105
|
+
var getHints = completion.options.hint;
|
106
|
+
if (getHints.async)
|
107
|
+
getHints(completion.cm, finishUpdate, completion.options);
|
97
108
|
else
|
98
|
-
finishUpdate(
|
109
|
+
finishUpdate(getHints(completion.cm, completion.options));
|
99
110
|
}
|
100
111
|
function finishUpdate(data_) {
|
101
112
|
data = data_;
|
@@ -126,6 +137,17 @@
|
|
126
137
|
}
|
127
138
|
this.cm.on("cursorActivity", activity);
|
128
139
|
this.onClose = done;
|
140
|
+
},
|
141
|
+
|
142
|
+
buildOptions: function(options) {
|
143
|
+
var editor = this.cm.options.hintOptions;
|
144
|
+
var out = {};
|
145
|
+
for (var prop in defaultOptions) out[prop] = defaultOptions[prop];
|
146
|
+
if (editor) for (var prop in editor)
|
147
|
+
if (editor[prop] !== undefined) out[prop] = editor[prop];
|
148
|
+
if (options) for (var prop in options)
|
149
|
+
if (options[prop] !== undefined) out[prop] = options[prop];
|
150
|
+
return out;
|
129
151
|
}
|
130
152
|
};
|
131
153
|
|
@@ -134,7 +156,7 @@
|
|
134
156
|
else return completion.text;
|
135
157
|
}
|
136
158
|
|
137
|
-
function buildKeyMap(
|
159
|
+
function buildKeyMap(completion, handle) {
|
138
160
|
var baseMap = {
|
139
161
|
Up: function() {handle.moveFocus(-1);},
|
140
162
|
Down: function() {handle.moveFocus(1);},
|
@@ -146,7 +168,8 @@
|
|
146
168
|
Tab: handle.pick,
|
147
169
|
Esc: handle.close
|
148
170
|
};
|
149
|
-
var
|
171
|
+
var custom = completion.options.customKeys;
|
172
|
+
var ourMap = custom ? {} : baseMap;
|
150
173
|
function addBinding(key, val) {
|
151
174
|
var bound;
|
152
175
|
if (typeof val != "string")
|
@@ -158,12 +181,13 @@
|
|
158
181
|
bound = val;
|
159
182
|
ourMap[key] = bound;
|
160
183
|
}
|
161
|
-
if (
|
162
|
-
for (var key in
|
163
|
-
addBinding(key,
|
164
|
-
|
165
|
-
|
166
|
-
|
184
|
+
if (custom)
|
185
|
+
for (var key in custom) if (custom.hasOwnProperty(key))
|
186
|
+
addBinding(key, custom[key]);
|
187
|
+
var extra = completion.options.extraKeys;
|
188
|
+
if (extra)
|
189
|
+
for (var key in extra) if (extra.hasOwnProperty(key))
|
190
|
+
addBinding(key, extra[key]);
|
167
191
|
return ourMap;
|
168
192
|
}
|
169
193
|
|
@@ -177,11 +201,11 @@
|
|
177
201
|
function Widget(completion, data) {
|
178
202
|
this.completion = completion;
|
179
203
|
this.data = data;
|
180
|
-
var widget = this, cm = completion.cm
|
204
|
+
var widget = this, cm = completion.cm;
|
181
205
|
|
182
206
|
var hints = this.hints = document.createElement("ul");
|
183
207
|
hints.className = "CodeMirror-hints";
|
184
|
-
this.selectedHint =
|
208
|
+
this.selectedHint = data.selectedHint || 0;
|
185
209
|
|
186
210
|
var completions = data.list;
|
187
211
|
for (var i = 0; i < completions.length; ++i) {
|
@@ -194,14 +218,14 @@
|
|
194
218
|
elt.hintId = i;
|
195
219
|
}
|
196
220
|
|
197
|
-
var pos = cm.cursorCoords(options.alignWithWord
|
221
|
+
var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null);
|
198
222
|
var left = pos.left, top = pos.bottom, below = true;
|
199
223
|
hints.style.left = left + "px";
|
200
224
|
hints.style.top = top + "px";
|
201
225
|
// If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.
|
202
226
|
var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth);
|
203
227
|
var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight);
|
204
|
-
(options.container || document.body).appendChild(hints);
|
228
|
+
(completion.options.container || document.body).appendChild(hints);
|
205
229
|
var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH;
|
206
230
|
if (overlapY > 0) {
|
207
231
|
var height = box.bottom - box.top, curTop = box.top - (pos.bottom - pos.top);
|
@@ -228,7 +252,7 @@
|
|
228
252
|
hints.style.left = (left = pos.left - overlapX) + "px";
|
229
253
|
}
|
230
254
|
|
231
|
-
cm.addKeyMap(this.keyMap = buildKeyMap(
|
255
|
+
cm.addKeyMap(this.keyMap = buildKeyMap(completion, {
|
232
256
|
moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); },
|
233
257
|
setFocus: function(n) { widget.changeActive(n); },
|
234
258
|
menuSize: function() { return widget.screenAmount(); },
|
@@ -238,7 +262,7 @@
|
|
238
262
|
data: data
|
239
263
|
}));
|
240
264
|
|
241
|
-
if (options.closeOnUnfocus
|
265
|
+
if (completion.options.closeOnUnfocus) {
|
242
266
|
var closingOnBlur;
|
243
267
|
cm.on("blur", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); });
|
244
268
|
cm.on("focus", this.onFocus = function() { clearTimeout(closingOnBlur); });
|
@@ -264,7 +288,7 @@
|
|
264
288
|
var t = getHintElement(hints, e.target || e.srcElement);
|
265
289
|
if (t && t.hintId != null) {
|
266
290
|
widget.changeActive(t.hintId);
|
267
|
-
if (options.completeOnSingleClick) widget.pick();
|
291
|
+
if (completion.options.completeOnSingleClick) widget.pick();
|
268
292
|
}
|
269
293
|
});
|
270
294
|
|
@@ -284,7 +308,7 @@
|
|
284
308
|
this.completion.cm.removeKeyMap(this.keyMap);
|
285
309
|
|
286
310
|
var cm = this.completion.cm;
|
287
|
-
if (this.completion.options.closeOnUnfocus
|
311
|
+
if (this.completion.options.closeOnUnfocus) {
|
288
312
|
cm.off("blur", this.onBlur);
|
289
313
|
cm.off("focus", this.onFocus);
|
290
314
|
}
|
@@ -348,4 +372,18 @@
|
|
348
372
|
});
|
349
373
|
|
350
374
|
CodeMirror.commands.autocomplete = CodeMirror.showHint;
|
375
|
+
|
376
|
+
var defaultOptions = {
|
377
|
+
hint: CodeMirror.hint.auto,
|
378
|
+
completeSingle: true,
|
379
|
+
alignWithWord: true,
|
380
|
+
closeCharacters: /[\s()\[\]{};:>,]/,
|
381
|
+
closeOnUnfocus: true,
|
382
|
+
completeOnSingleClick: false,
|
383
|
+
container: null,
|
384
|
+
customKeys: null,
|
385
|
+
extraKeys: null
|
386
|
+
};
|
387
|
+
|
388
|
+
CodeMirror.defineOption("hintOptions", null);
|
351
389
|
});
|