codemirror-rails 4.1 → 4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
});
|