codemirror-rails 3.02 → 3.12

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.
Files changed (109) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +1 -1
  3. data/LICENSE +1 -1
  4. data/codemirror-rails.gemspec +1 -0
  5. data/doc/CodeMirror-LICENSE +5 -1
  6. data/lib/codemirror/rails/version.rb +2 -2
  7. data/vendor/assets/javascripts/codemirror/{utils → addons/dialog}/dialog.js +4 -0
  8. data/vendor/assets/javascripts/codemirror/addons/display/placeholder.js +54 -0
  9. data/vendor/assets/javascripts/codemirror/addons/edit/closebrackets.js +54 -0
  10. data/vendor/assets/javascripts/codemirror/{utils → addons/edit}/closetag.js +9 -8
  11. data/vendor/assets/javascripts/codemirror/{utils → addons/edit}/continuecomment.js +12 -4
  12. data/vendor/assets/javascripts/codemirror/addons/edit/continuelist.js +25 -0
  13. data/vendor/assets/javascripts/codemirror/{utils → addons/edit}/matchbrackets.js +30 -11
  14. data/vendor/assets/javascripts/codemirror/addons/fold/brace-fold.js +31 -0
  15. data/vendor/assets/javascripts/codemirror/addons/fold/foldcode.js +32 -0
  16. data/vendor/assets/javascripts/codemirror/addons/fold/indent-fold.js +11 -0
  17. data/vendor/assets/javascripts/codemirror/addons/fold/xml-fold.js +64 -0
  18. data/vendor/assets/javascripts/codemirror/addons/hint/html-hint.js +582 -0
  19. data/vendor/assets/javascripts/codemirror/{utils → addons/hint}/javascript-hint.js +15 -11
  20. data/vendor/assets/javascripts/codemirror/{utils → addons/hint}/pig-hint.js +19 -19
  21. data/vendor/assets/javascripts/codemirror/{utils → addons/hint}/python-hint.js +2 -2
  22. data/vendor/assets/javascripts/codemirror/addons/hint/show-hint.js +180 -0
  23. data/vendor/assets/javascripts/codemirror/{utils → addons/hint}/xml-hint.js +5 -18
  24. data/vendor/assets/javascripts/codemirror/addons/lint/javascript-lint.js +127 -0
  25. data/vendor/assets/javascripts/codemirror/addons/lint/json-lint.js +14 -0
  26. data/vendor/assets/javascripts/codemirror/addons/lint/lint.js +197 -0
  27. data/vendor/assets/javascripts/codemirror/{utils → addons/mode}/loadmode.js +0 -0
  28. data/vendor/assets/javascripts/codemirror/{utils → addons/mode}/multiplex.js +2 -2
  29. data/vendor/assets/javascripts/codemirror/{utils → addons/mode}/overlay.js +2 -2
  30. data/vendor/assets/javascripts/codemirror/{utils → addons/runmode}/colorize.js +0 -0
  31. data/vendor/assets/javascripts/codemirror/{utils → addons/runmode}/runmode-standalone.js +2 -3
  32. data/vendor/assets/javascripts/codemirror/{utils → addons/runmode}/runmode.js +0 -0
  33. data/vendor/assets/javascripts/codemirror/addons/runmode/runmode.node.js +89 -0
  34. data/vendor/assets/javascripts/codemirror/addons/search/match-highlighter.js +60 -0
  35. data/vendor/assets/javascripts/codemirror/{utils → addons/search}/search.js +5 -5
  36. data/vendor/assets/javascripts/codemirror/{utils → addons/search}/searchcursor.js +37 -30
  37. data/vendor/assets/javascripts/codemirror/addons/selection/active-line.js +39 -0
  38. data/vendor/assets/javascripts/codemirror/addons/selection/mark-selection.js +34 -0
  39. data/vendor/assets/javascripts/codemirror/keymaps/vim.js +721 -188
  40. data/vendor/assets/javascripts/codemirror/modes/asterisk.js +6 -6
  41. data/vendor/assets/javascripts/codemirror/modes/clike.js +14 -14
  42. data/vendor/assets/javascripts/codemirror/modes/clojure.js +23 -7
  43. data/vendor/assets/javascripts/codemirror/modes/coffeescript.js +2 -2
  44. data/vendor/assets/javascripts/codemirror/modes/css.js +337 -235
  45. data/vendor/assets/javascripts/codemirror/modes/ecl.js +12 -12
  46. data/vendor/assets/javascripts/codemirror/modes/erlang.js +1 -1
  47. data/vendor/assets/javascripts/codemirror/modes/gas.js +326 -0
  48. data/vendor/assets/javascripts/codemirror/modes/gfm.js +1 -0
  49. data/vendor/assets/javascripts/codemirror/modes/haskell.js +26 -26
  50. data/vendor/assets/javascripts/codemirror/modes/haxe.js +17 -17
  51. data/vendor/assets/javascripts/codemirror/modes/htmlembedded.js +6 -6
  52. data/vendor/assets/javascripts/codemirror/modes/htmlmixed.js +43 -23
  53. data/vendor/assets/javascripts/codemirror/modes/javascript.js +78 -33
  54. data/vendor/assets/javascripts/codemirror/modes/jinja2.js +2 -2
  55. data/vendor/assets/javascripts/codemirror/modes/less.js +38 -38
  56. data/vendor/assets/javascripts/codemirror/modes/livescript.js +267 -0
  57. data/vendor/assets/javascripts/codemirror/modes/lua.js +7 -7
  58. data/vendor/assets/javascripts/codemirror/modes/markdown.js +108 -57
  59. data/vendor/assets/javascripts/codemirror/modes/mirc.js +177 -0
  60. data/vendor/assets/javascripts/codemirror/modes/ntriples.js +22 -22
  61. data/vendor/assets/javascripts/codemirror/modes/ocaml.js +1 -1
  62. data/vendor/assets/javascripts/codemirror/modes/perl.js +791 -791
  63. data/vendor/assets/javascripts/codemirror/modes/php.js +1 -1
  64. data/vendor/assets/javascripts/codemirror/modes/pig.js +163 -163
  65. data/vendor/assets/javascripts/codemirror/modes/python.js +31 -31
  66. data/vendor/assets/javascripts/codemirror/modes/q.js +124 -0
  67. data/vendor/assets/javascripts/codemirror/modes/rst.js +486 -250
  68. data/vendor/assets/javascripts/codemirror/modes/sass.js +3 -3
  69. data/vendor/assets/javascripts/codemirror/modes/scss_test.js +80 -0
  70. data/vendor/assets/javascripts/codemirror/modes/shell.js +2 -2
  71. data/vendor/assets/javascripts/codemirror/modes/sieve.js +10 -10
  72. data/vendor/assets/javascripts/codemirror/modes/smalltalk.js +129 -129
  73. data/vendor/assets/javascripts/codemirror/modes/smarty.js +3 -3
  74. data/vendor/assets/javascripts/codemirror/modes/sparql.js +1 -1
  75. data/vendor/assets/javascripts/codemirror/modes/sql.js +23 -23
  76. data/vendor/assets/javascripts/codemirror/modes/stex.js +192 -121
  77. data/vendor/assets/javascripts/codemirror/modes/tcl.js +131 -0
  78. data/vendor/assets/javascripts/codemirror/modes/test.js +64 -0
  79. data/vendor/assets/javascripts/codemirror/modes/tiddlywiki.js +345 -345
  80. data/vendor/assets/javascripts/codemirror/modes/tiki.js +297 -298
  81. data/vendor/assets/javascripts/codemirror/modes/turtle.js +145 -0
  82. data/vendor/assets/javascripts/codemirror/modes/vb.js +31 -32
  83. data/vendor/assets/javascripts/codemirror/modes/vbscript.js +4 -4
  84. data/vendor/assets/javascripts/codemirror/modes/xml.js +10 -6
  85. data/vendor/assets/javascripts/codemirror/modes/xquery.js +55 -55
  86. data/vendor/assets/javascripts/codemirror/modes/yaml.js +90 -90
  87. data/vendor/assets/javascripts/codemirror/modes/z80.js +82 -110
  88. data/vendor/assets/javascripts/codemirror.js +1914 -1115
  89. data/vendor/assets/stylesheets/codemirror/{utils → addons/dialog}/dialog.css +0 -0
  90. data/vendor/assets/stylesheets/codemirror/addons/hint/show-hint.css +38 -0
  91. data/vendor/assets/stylesheets/codemirror/addons/lint/lint.css +96 -0
  92. data/vendor/assets/stylesheets/codemirror/modes/tiki.css +2 -2
  93. data/vendor/assets/stylesheets/codemirror/themes/ambiance-mobile.css +0 -1
  94. data/vendor/assets/stylesheets/codemirror/themes/ambiance.css +0 -1
  95. data/vendor/assets/stylesheets/codemirror/themes/eclipse.css +2 -2
  96. data/vendor/assets/stylesheets/codemirror/themes/erlang-dark.css +5 -5
  97. data/vendor/assets/stylesheets/codemirror/themes/midnight.css +52 -0
  98. data/vendor/assets/stylesheets/codemirror/themes/xq-light.css +43 -0
  99. data/vendor/assets/stylesheets/codemirror.css +16 -10
  100. metadata +60 -52
  101. data/vendor/assets/javascripts/codemirror/modes/mysql.js +0 -203
  102. data/vendor/assets/javascripts/codemirror/modes/plsql.js +0 -216
  103. data/vendor/assets/javascripts/codemirror/utils/collapserange.js +0 -68
  104. data/vendor/assets/javascripts/codemirror/utils/continuelist.js +0 -28
  105. data/vendor/assets/javascripts/codemirror/utils/foldcode.js +0 -183
  106. data/vendor/assets/javascripts/codemirror/utils/formatting.js +0 -114
  107. data/vendor/assets/javascripts/codemirror/utils/match-highlighter.js +0 -46
  108. data/vendor/assets/javascripts/codemirror/utils/simple-hint.js +0 -102
  109. data/vendor/assets/stylesheets/codemirror/utils/simple-hint.css +0 -16
@@ -1,183 +0,0 @@
1
- // the tagRangeFinder function is
2
- // Copyright (C) 2011 by Daniel Glazman <daniel@glazman.org>
3
- // released under the MIT license (../../LICENSE) like the rest of CodeMirror
4
- CodeMirror.tagRangeFinder = function(cm, start) {
5
- var nameStartChar = "A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD";
6
- var nameChar = nameStartChar + "\-\:\.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040";
7
- var xmlNAMERegExp = new RegExp("^[" + nameStartChar + "][" + nameChar + "]*");
8
-
9
- var lineText = cm.getLine(start.line);
10
- var found = false;
11
- var tag = null;
12
- var pos = start.ch;
13
- while (!found) {
14
- pos = lineText.indexOf("<", pos);
15
- if (-1 == pos) // no tag on line
16
- return;
17
- if (pos + 1 < lineText.length && lineText[pos + 1] == "/") { // closing tag
18
- pos++;
19
- continue;
20
- }
21
- // ok we seem to have a start tag
22
- if (!lineText.substr(pos + 1).match(xmlNAMERegExp)) { // not a tag name...
23
- pos++;
24
- continue;
25
- }
26
- var gtPos = lineText.indexOf(">", pos + 1);
27
- if (-1 == gtPos) { // end of start tag not in line
28
- var l = start.line + 1;
29
- var foundGt = false;
30
- var lastLine = cm.lineCount();
31
- while (l < lastLine && !foundGt) {
32
- var lt = cm.getLine(l);
33
- gtPos = lt.indexOf(">");
34
- if (-1 != gtPos) { // found a >
35
- foundGt = true;
36
- var slash = lt.lastIndexOf("/", gtPos);
37
- if (-1 != slash && slash < gtPos) {
38
- var str = lineText.substr(slash, gtPos - slash + 1);
39
- if (!str.match( /\/\s*\>/ )) // yep, that's the end of empty tag
40
- return;
41
- }
42
- }
43
- l++;
44
- }
45
- found = true;
46
- }
47
- else {
48
- var slashPos = lineText.lastIndexOf("/", gtPos);
49
- if (-1 == slashPos) { // cannot be empty tag
50
- found = true;
51
- // don't continue
52
- }
53
- else { // empty tag?
54
- // check if really empty tag
55
- var str = lineText.substr(slashPos, gtPos - slashPos + 1);
56
- if (!str.match( /\/\s*\>/ )) { // finally not empty
57
- found = true;
58
- // don't continue
59
- }
60
- }
61
- }
62
- if (found) {
63
- var subLine = lineText.substr(pos + 1);
64
- tag = subLine.match(xmlNAMERegExp);
65
- if (tag) {
66
- // we have an element name, wooohooo !
67
- tag = tag[0];
68
- // do we have the close tag on same line ???
69
- if (-1 != lineText.indexOf("</" + tag + ">", pos)) // yep
70
- {
71
- found = false;
72
- }
73
- // we don't, so we have a candidate...
74
- }
75
- else
76
- found = false;
77
- }
78
- if (!found)
79
- pos++;
80
- }
81
-
82
- if (found) {
83
- var startTag = "(\\<\\/" + tag + "\\>)|(\\<" + tag + "\\>)|(\\<" + tag + "\\s)|(\\<" + tag + "$)";
84
- var startTagRegExp = new RegExp(startTag);
85
- var endTag = "</" + tag + ">";
86
- var depth = 1;
87
- var l = start.line + 1;
88
- var lastLine = cm.lineCount();
89
- while (l < lastLine) {
90
- lineText = cm.getLine(l);
91
- var match = lineText.match(startTagRegExp);
92
- if (match) {
93
- for (var i = 0; i < match.length; i++) {
94
- if (match[i] == endTag)
95
- depth--;
96
- else
97
- depth++;
98
- if (!depth) return {from: {line: start.line, ch: gtPos + 1},
99
- to: {line: l, ch: match.index}};
100
- }
101
- }
102
- l++;
103
- }
104
- return;
105
- }
106
- };
107
-
108
- CodeMirror.braceRangeFinder = function(cm, start) {
109
- var line = start.line, lineText = cm.getLine(line);
110
- var at = lineText.length, startChar, tokenType;
111
- for (;;) {
112
- var found = lineText.lastIndexOf("{", at);
113
- if (found < start.ch) break;
114
- tokenType = cm.getTokenAt({line: line, ch: found}).type;
115
- if (!/^(comment|string)/.test(tokenType)) { startChar = found; break; }
116
- at = found - 1;
117
- }
118
- if (startChar == null || lineText.lastIndexOf("}") > startChar) return;
119
- var count = 1, lastLine = cm.lineCount(), end, endCh;
120
- outer: for (var i = line + 1; i < lastLine; ++i) {
121
- var text = cm.getLine(i), pos = 0;
122
- for (;;) {
123
- var nextOpen = text.indexOf("{", pos), nextClose = text.indexOf("}", pos);
124
- if (nextOpen < 0) nextOpen = text.length;
125
- if (nextClose < 0) nextClose = text.length;
126
- pos = Math.min(nextOpen, nextClose);
127
- if (pos == text.length) break;
128
- if (cm.getTokenAt({line: i, ch: pos + 1}).type == tokenType) {
129
- if (pos == nextOpen) ++count;
130
- else if (!--count) { end = i; endCh = pos; break outer; }
131
- }
132
- ++pos;
133
- }
134
- }
135
- if (end == null || end == line + 1) return;
136
- return {from: {line: line, ch: startChar + 1},
137
- to: {line: end, ch: endCh}};
138
- };
139
-
140
- CodeMirror.indentRangeFinder = function(cm, start) {
141
- var tabSize = cm.getOption("tabSize"), firstLine = cm.getLine(start.line);
142
- var myIndent = CodeMirror.countColumn(firstLine, null, tabSize);
143
- for (var i = start.line + 1, end = cm.lineCount(); i < end; ++i) {
144
- var curLine = cm.getLine(i);
145
- if (CodeMirror.countColumn(curLine, null, tabSize) < myIndent &&
146
- CodeMirror.countColumn(cm.getLine(i-1), null, tabSize) > myIndent)
147
- return {from: {line: start.line, ch: firstLine.length},
148
- to: {line: i, ch: curLine.length}};
149
- }
150
- };
151
-
152
- CodeMirror.newFoldFunction = function(rangeFinder, widget) {
153
- if (widget == null) widget = "\u2194";
154
- if (typeof widget == "string") {
155
- var text = document.createTextNode(widget);
156
- widget = document.createElement("span");
157
- widget.appendChild(text);
158
- widget.className = "CodeMirror-foldmarker";
159
- }
160
-
161
- return function(cm, pos) {
162
- if (typeof pos == "number") pos = {line: pos, ch: 0};
163
- var range = rangeFinder(cm, pos);
164
- if (!range) return;
165
-
166
- var present = cm.findMarksAt(range.from), cleared = 0;
167
- for (var i = 0; i < present.length; ++i) {
168
- if (present[i].__isFold) {
169
- ++cleared;
170
- present[i].clear();
171
- }
172
- }
173
- if (cleared) return;
174
-
175
- var myWidget = widget.cloneNode(true);
176
- CodeMirror.on(myWidget, "mousedown", function() {myRange.clear();});
177
- var myRange = cm.markText(range.from, range.to, {
178
- replacedWith: myWidget,
179
- clearOnEnter: true,
180
- __isFold: true
181
- });
182
- };
183
- };
@@ -1,114 +0,0 @@
1
- (function() {
2
-
3
- CodeMirror.extendMode("css", {
4
- commentStart: "/*",
5
- commentEnd: "*/",
6
- newlineAfterToken: function(_type, content) {
7
- return /^[;{}]$/.test(content);
8
- }
9
- });
10
-
11
- CodeMirror.extendMode("javascript", {
12
- commentStart: "/*",
13
- commentEnd: "*/",
14
- // FIXME semicolons inside of for
15
- newlineAfterToken: function(_type, content, textAfter, state) {
16
- if (this.jsonMode) {
17
- return /^[\[,{]$/.test(content) || /^}/.test(textAfter);
18
- } else {
19
- if (content == ";" && state.lexical && state.lexical.type == ")") return false;
20
- return /^[;{}]$/.test(content) && !/^;/.test(textAfter);
21
- }
22
- }
23
- });
24
-
25
- var inlineElements = /^(a|abbr|acronym|area|base|bdo|big|br|button|caption|cite|code|col|colgroup|dd|del|dfn|em|frame|hr|iframe|img|input|ins|kbd|label|legend|link|map|object|optgroup|option|param|q|samp|script|select|small|span|strong|sub|sup|textarea|tt|var)$/;
26
-
27
- CodeMirror.extendMode("xml", {
28
- commentStart: "<!--",
29
- commentEnd: "-->",
30
- newlineAfterToken: function(type, content, textAfter, state) {
31
- var inline = false;
32
- if (this.configuration == "html")
33
- inline = state.context ? inlineElements.test(state.context.tagName) : false;
34
- return !inline && ((type == "tag" && />$/.test(content) && state.context) ||
35
- /^</.test(textAfter));
36
- }
37
- });
38
-
39
- // Comment/uncomment the specified range
40
- CodeMirror.defineExtension("commentRange", function (isComment, from, to) {
41
- var cm = this, curMode = CodeMirror.innerMode(cm.getMode(), cm.getTokenAt(from).state).mode;
42
- cm.operation(function() {
43
- if (isComment) { // Comment range
44
- cm.replaceRange(curMode.commentEnd, to);
45
- cm.replaceRange(curMode.commentStart, from);
46
- if (from.line == to.line && from.ch == to.ch) // An empty comment inserted - put cursor inside
47
- cm.setCursor(from.line, from.ch + curMode.commentStart.length);
48
- } else { // Uncomment range
49
- var selText = cm.getRange(from, to);
50
- var startIndex = selText.indexOf(curMode.commentStart);
51
- var endIndex = selText.lastIndexOf(curMode.commentEnd);
52
- if (startIndex > -1 && endIndex > -1 && endIndex > startIndex) {
53
- // Take string till comment start
54
- selText = selText.substr(0, startIndex)
55
- // From comment start till comment end
56
- + selText.substring(startIndex + curMode.commentStart.length, endIndex)
57
- // From comment end till string end
58
- + selText.substr(endIndex + curMode.commentEnd.length);
59
- }
60
- cm.replaceRange(selText, from, to);
61
- }
62
- });
63
- });
64
-
65
- // Applies automatic mode-aware indentation to the specified range
66
- CodeMirror.defineExtension("autoIndentRange", function (from, to) {
67
- var cmInstance = this;
68
- this.operation(function () {
69
- for (var i = from.line; i <= to.line; i++) {
70
- cmInstance.indentLine(i, "smart");
71
- }
72
- });
73
- });
74
-
75
- // Applies automatic formatting to the specified range
76
- CodeMirror.defineExtension("autoFormatRange", function (from, to) {
77
- var cm = this;
78
- var outer = cm.getMode(), text = cm.getRange(from, to).split("\n");
79
- var state = CodeMirror.copyState(outer, cm.getTokenAt(from).state);
80
- var tabSize = cm.getOption("tabSize");
81
-
82
- var out = "", lines = 0, atSol = from.ch == 0;
83
- function newline() {
84
- out += "\n";
85
- atSol = true;
86
- ++lines;
87
- }
88
-
89
- for (var i = 0; i < text.length; ++i) {
90
- var stream = new CodeMirror.StringStream(text[i], tabSize);
91
- while (!stream.eol()) {
92
- var inner = CodeMirror.innerMode(outer, state);
93
- var style = outer.token(stream, state), cur = stream.current();
94
- stream.start = stream.pos;
95
- if (!atSol || /\S/.test(cur)) {
96
- out += cur;
97
- atSol = false;
98
- }
99
- if (!atSol && inner.mode.newlineAfterToken &&
100
- inner.mode.newlineAfterToken(style, cur, stream.string.slice(stream.pos) || text[i+1] || "", inner.state))
101
- newline();
102
- }
103
- if (!stream.pos && outer.blankLine) outer.blankLine(state);
104
- if (!atSol && i < text.length - 1) newline();
105
- }
106
-
107
- cm.operation(function () {
108
- cm.replaceRange(out, from, to);
109
- for (var cur = from.line + 1, end = from.line + lines; cur <= end; ++cur)
110
- cm.indentLine(cur, "smart");
111
- cm.setSelection(from, cm.getCursor(false));
112
- });
113
- });
114
- })();
@@ -1,46 +0,0 @@
1
- // Define match-highlighter commands. Depends on searchcursor.js
2
- // Use by attaching the following function call to the cursorActivity event:
3
- //myCodeMirror.matchHighlight(minChars);
4
- // And including a special span.CodeMirror-matchhighlight css class (also optionally a separate one for .CodeMirror-focused -- see demo matchhighlighter.html)
5
-
6
- (function() {
7
- var DEFAULT_MIN_CHARS = 2;
8
-
9
- function MatchHighlightState() {
10
- this.marked = [];
11
- }
12
- function getMatchHighlightState(cm) {
13
- return cm._matchHighlightState || (cm._matchHighlightState = new MatchHighlightState());
14
- }
15
-
16
- function clearMarks(cm) {
17
- var state = getMatchHighlightState(cm);
18
- for (var i = 0; i < state.marked.length; ++i)
19
- state.marked[i].clear();
20
- state.marked = [];
21
- }
22
-
23
- function markDocument(cm, className, minChars) {
24
- clearMarks(cm);
25
- minChars = (typeof minChars !== 'undefined' ? minChars : DEFAULT_MIN_CHARS);
26
- if (cm.somethingSelected() && cm.getSelection().replace(/^\s+|\s+$/g, "").length >= minChars) {
27
- var state = getMatchHighlightState(cm);
28
- var query = cm.getSelection();
29
- cm.operation(function() {
30
- if (cm.lineCount() < 2000) { // This is too expensive on big documents.
31
- for (var cursor = cm.getSearchCursor(query); cursor.findNext();) {
32
- //Only apply matchhighlight to the matches other than the one actually selected
33
- if (cursor.from().line !== cm.getCursor(true).line ||
34
- cursor.from().ch !== cm.getCursor(true).ch)
35
- state.marked.push(cm.markText(cursor.from(), cursor.to(),
36
- {className: className}));
37
- }
38
- }
39
- });
40
- }
41
- }
42
-
43
- CodeMirror.defineExtension("matchHighlight", function(className, minChars) {
44
- markDocument(this, className, minChars);
45
- });
46
- })();
@@ -1,102 +0,0 @@
1
- (function() {
2
- CodeMirror.simpleHint = function(editor, getHints, givenOptions) {
3
- // Determine effective options based on given values and defaults.
4
- var options = {}, defaults = CodeMirror.simpleHint.defaults;
5
- for (var opt in defaults)
6
- if (defaults.hasOwnProperty(opt))
7
- options[opt] = (givenOptions && givenOptions.hasOwnProperty(opt) ? givenOptions : defaults)[opt];
8
-
9
- function collectHints(previousToken) {
10
- // We want a single cursor position.
11
- if (editor.somethingSelected()) return;
12
-
13
- var tempToken = editor.getTokenAt(editor.getCursor());
14
-
15
- // Don't show completions if token has changed and the option is set.
16
- if (options.closeOnTokenChange && previousToken != null &&
17
- (tempToken.start != previousToken.start || tempToken.type != previousToken.type)) {
18
- return;
19
- }
20
-
21
- var result = getHints(editor, givenOptions);
22
- if (!result || !result.list.length) return;
23
- var completions = result.list;
24
- function insert(str) {
25
- editor.replaceRange(str, result.from, result.to);
26
- }
27
- // When there is only one completion, use it directly.
28
- if (options.completeSingle && completions.length == 1) {
29
- insert(completions[0]);
30
- return true;
31
- }
32
-
33
- // Build the select widget
34
- var complete = document.createElement("div");
35
- complete.className = "CodeMirror-completions";
36
- var sel = complete.appendChild(document.createElement("select"));
37
- // Opera doesn't move the selection when pressing up/down in a
38
- // multi-select, but it does properly support the size property on
39
- // single-selects, so no multi-select is necessary.
40
- if (!window.opera) sel.multiple = true;
41
- for (var i = 0; i < completions.length; ++i) {
42
- var opt = sel.appendChild(document.createElement("option"));
43
- opt.appendChild(document.createTextNode(completions[i]));
44
- }
45
- sel.firstChild.selected = true;
46
- sel.size = Math.min(10, completions.length);
47
- var pos = editor.cursorCoords(options.alignWithWord ? result.from : null);
48
- complete.style.left = pos.left + "px";
49
- complete.style.top = pos.bottom + "px";
50
- document.body.appendChild(complete);
51
- // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.
52
- var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth);
53
- if(winW - pos.left < sel.clientWidth)
54
- complete.style.left = (pos.left - sel.clientWidth) + "px";
55
- // Hack to hide the scrollbar.
56
- if (completions.length <= 10)
57
- complete.style.width = (sel.clientWidth - 1) + "px";
58
-
59
- var done = false;
60
- function close() {
61
- if (done) return;
62
- done = true;
63
- complete.parentNode.removeChild(complete);
64
- }
65
- function pick() {
66
- insert(completions[sel.selectedIndex]);
67
- close();
68
- setTimeout(function(){editor.focus();}, 50);
69
- }
70
- CodeMirror.on(sel, "blur", close);
71
- CodeMirror.on(sel, "keydown", function(event) {
72
- var code = event.keyCode;
73
- // Enter
74
- if (code == 13) {CodeMirror.e_stop(event); pick();}
75
- // Escape
76
- else if (code == 27) {CodeMirror.e_stop(event); close(); editor.focus();}
77
- else if (code != 38 && code != 40 && code != 33 && code != 34 && !CodeMirror.isModifierKey(event)) {
78
- close(); editor.focus();
79
- // Pass the event to the CodeMirror instance so that it can handle things like backspace properly.
80
- editor.triggerOnKeyDown(event);
81
- // Don't show completions if the code is backspace and the option is set.
82
- if (!options.closeOnBackspace || code != 8) {
83
- setTimeout(function(){collectHints(tempToken);}, 50);
84
- }
85
- }
86
- });
87
- CodeMirror.on(sel, "dblclick", pick);
88
-
89
- sel.focus();
90
- // Opera sometimes ignores focusing a freshly created node
91
- if (window.opera) setTimeout(function(){if (!done) sel.focus();}, 100);
92
- return true;
93
- }
94
- return collectHints();
95
- };
96
- CodeMirror.simpleHint.defaults = {
97
- closeOnBackspace: true,
98
- closeOnTokenChange: false,
99
- completeSingle: true,
100
- alignWithWord: true
101
- };
102
- })();
@@ -1,16 +0,0 @@
1
- .CodeMirror-completions {
2
- position: absolute;
3
- z-index: 10;
4
- overflow: hidden;
5
- -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
6
- -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
7
- box-shadow: 2px 3px 5px rgba(0,0,0,.2);
8
- }
9
- .CodeMirror-completions select {
10
- background: #fafafa;
11
- outline: none;
12
- border: none;
13
- padding: 0;
14
- margin: 0;
15
- font-family: monospace;
16
- }