codemirror-rails 2.36 → 3.00

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/lib/codemirror/rails/version.rb +2 -2
  2. data/vendor/assets/javascripts/codemirror.js +3727 -2345
  3. data/vendor/assets/javascripts/codemirror/keymaps/vim.js +2226 -825
  4. data/vendor/assets/javascripts/codemirror/modes/clike.js +23 -8
  5. data/vendor/assets/javascripts/codemirror/modes/clojure.js +4 -4
  6. data/vendor/assets/javascripts/codemirror/modes/coffeescript.js +1 -1
  7. data/vendor/assets/javascripts/codemirror/modes/commonlisp.js +1 -1
  8. data/vendor/assets/javascripts/codemirror/modes/css.js +20 -3
  9. data/vendor/assets/javascripts/codemirror/modes/diff.js +2 -2
  10. data/vendor/assets/javascripts/codemirror/modes/ecl.js +192 -203
  11. data/vendor/assets/javascripts/codemirror/modes/erlang.js +1 -1
  12. data/vendor/assets/javascripts/codemirror/modes/gfm.js +1 -1
  13. data/vendor/assets/javascripts/codemirror/modes/go.js +1 -6
  14. data/vendor/assets/javascripts/codemirror/modes/groovy.js +1 -1
  15. data/vendor/assets/javascripts/codemirror/modes/haskell.js +1 -1
  16. data/vendor/assets/javascripts/codemirror/modes/haxe.js +13 -13
  17. data/vendor/assets/javascripts/codemirror/modes/htmlembedded.js +3 -3
  18. data/vendor/assets/javascripts/codemirror/modes/htmlmixed.js +1 -1
  19. data/vendor/assets/javascripts/codemirror/modes/http.js +98 -0
  20. data/vendor/assets/javascripts/codemirror/modes/javascript.js +1 -1
  21. data/vendor/assets/javascripts/codemirror/modes/jinja2.js +1 -1
  22. data/vendor/assets/javascripts/codemirror/modes/markdown.js +7 -14
  23. data/vendor/assets/javascripts/codemirror/modes/mysql.js +2 -2
  24. data/vendor/assets/javascripts/codemirror/modes/ntriples.js +0 -2
  25. data/vendor/assets/javascripts/codemirror/modes/ocaml.js +1 -2
  26. data/vendor/assets/javascripts/codemirror/modes/pascal.js +2 -2
  27. data/vendor/assets/javascripts/codemirror/modes/perl.js +1 -1
  28. data/vendor/assets/javascripts/codemirror/modes/php.js +5 -4
  29. data/vendor/assets/javascripts/codemirror/modes/pig.js +3 -4
  30. data/vendor/assets/javascripts/codemirror/modes/plsql.js +3 -4
  31. data/vendor/assets/javascripts/codemirror/modes/python.js +1 -1
  32. data/vendor/assets/javascripts/codemirror/modes/r.js +1 -1
  33. data/vendor/assets/javascripts/codemirror/modes/rpm-changes.js +1 -1
  34. data/vendor/assets/javascripts/codemirror/modes/rpm-spec.js +1 -1
  35. data/vendor/assets/javascripts/codemirror/modes/rst.js +1 -13
  36. data/vendor/assets/javascripts/codemirror/modes/ruby.js +1 -1
  37. data/vendor/assets/javascripts/codemirror/modes/rust.js +3 -3
  38. data/vendor/assets/javascripts/codemirror/modes/scheme.js +4 -4
  39. data/vendor/assets/javascripts/codemirror/modes/shell.js +1 -1
  40. data/vendor/assets/javascripts/codemirror/modes/sieve.js +1 -1
  41. data/vendor/assets/javascripts/codemirror/modes/smalltalk.js +2 -2
  42. data/vendor/assets/javascripts/codemirror/modes/smarty.js +1 -1
  43. data/vendor/assets/javascripts/codemirror/modes/sparql.js +2 -2
  44. data/vendor/assets/javascripts/codemirror/modes/stex.js +6 -13
  45. data/vendor/assets/javascripts/codemirror/modes/tiddlywiki.js +6 -37
  46. data/vendor/assets/javascripts/codemirror/modes/tiki.js +3 -3
  47. data/vendor/assets/javascripts/codemirror/modes/vb.js +3 -3
  48. data/vendor/assets/javascripts/codemirror/modes/velocity.js +2 -4
  49. data/vendor/assets/javascripts/codemirror/modes/verilog.js +182 -194
  50. data/vendor/assets/javascripts/codemirror/modes/xml.js +9 -5
  51. data/vendor/assets/javascripts/codemirror/modes/xquery.js +3 -4
  52. data/vendor/assets/javascripts/codemirror/utils/closetag.js +85 -164
  53. data/vendor/assets/javascripts/codemirror/utils/colorize.js +29 -0
  54. data/vendor/assets/javascripts/codemirror/utils/continuecomment.js +1 -1
  55. data/vendor/assets/javascripts/codemirror/utils/continuelist.js +28 -0
  56. data/vendor/assets/javascripts/codemirror/utils/dialog.js +21 -16
  57. data/vendor/assets/javascripts/codemirror/utils/foldcode.js +59 -73
  58. data/vendor/assets/javascripts/codemirror/utils/formatting.js +43 -131
  59. data/vendor/assets/javascripts/codemirror/utils/javascript-hint.js +22 -19
  60. data/vendor/assets/javascripts/codemirror/utils/match-highlighter.js +5 -3
  61. data/vendor/assets/javascripts/codemirror/utils/matchbrackets.js +63 -0
  62. data/vendor/assets/javascripts/codemirror/utils/multiplex.js +18 -0
  63. data/vendor/assets/javascripts/codemirror/utils/pig-hint.js +3 -9
  64. data/vendor/assets/javascripts/codemirror/utils/runmode.js +19 -20
  65. data/vendor/assets/javascripts/codemirror/utils/search.js +6 -5
  66. data/vendor/assets/javascripts/codemirror/utils/searchcursor.js +1 -1
  67. data/vendor/assets/javascripts/codemirror/utils/simple-hint.js +10 -10
  68. data/vendor/assets/javascripts/codemirror/utils/xml-hint.js +2 -2
  69. data/vendor/assets/stylesheets/codemirror.css +169 -104
  70. data/vendor/assets/stylesheets/codemirror/themes/ambiance-mobile.css +1 -1
  71. data/vendor/assets/stylesheets/codemirror/themes/ambiance.css +7 -12
  72. data/vendor/assets/stylesheets/codemirror/themes/blackboard.css +3 -3
  73. data/vendor/assets/stylesheets/codemirror/themes/cobalt.css +3 -3
  74. data/vendor/assets/stylesheets/codemirror/themes/erlang-dark.css +3 -3
  75. data/vendor/assets/stylesheets/codemirror/themes/lesser-dark.css +4 -4
  76. data/vendor/assets/stylesheets/codemirror/themes/monokai.css +3 -3
  77. data/vendor/assets/stylesheets/codemirror/themes/night.css +3 -3
  78. data/vendor/assets/stylesheets/codemirror/themes/rubyblue.css +3 -3
  79. data/vendor/assets/stylesheets/codemirror/themes/solarized.css +207 -0
  80. data/vendor/assets/stylesheets/codemirror/themes/twilight.css +4 -4
  81. data/vendor/assets/stylesheets/codemirror/themes/vibrant-ink.css +3 -3
  82. data/vendor/assets/stylesheets/codemirror/themes/xq-dark.css +3 -3
  83. data/vendor/assets/stylesheets/codemirror/utils/dialog.css +12 -7
  84. metadata +16 -11
@@ -1,5 +1,5 @@
1
1
  // Define match-highlighter commands. Depends on searchcursor.js
2
- // Use by attaching the following function call to the onCursorActivity event:
2
+ // Use by attaching the following function call to the cursorActivity event:
3
3
  //myCodeMirror.matchHighlight(minChars);
4
4
  // And including a special span.CodeMirror-matchhighlight css class (also optionally a separate one for .CodeMirror-focused -- see demo matchhighlighter.html)
5
5
 
@@ -30,8 +30,10 @@
30
30
  if (cm.lineCount() < 2000) { // This is too expensive on big documents.
31
31
  for (var cursor = cm.getSearchCursor(query); cursor.findNext();) {
32
32
  //Only apply matchhighlight to the matches other than the one actually selected
33
- if (!(cursor.from().line === cm.getCursor(true).line && cursor.from().ch === cm.getCursor(true).ch))
34
- state.marked.push(cm.markText(cursor.from(), cursor.to(), className));
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}));
35
37
  }
36
38
  }
37
39
  });
@@ -0,0 +1,63 @@
1
+ (function() {
2
+ var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<"};
3
+ function findMatchingBracket(cm) {
4
+ var cur = cm.getCursor(), line = cm.getLineHandle(cur.line), pos = cur.ch - 1;
5
+ var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)];
6
+ if (!match) return null;
7
+ var forward = match.charAt(1) == ">", d = forward ? 1 : -1;
8
+ var style = cm.getTokenAt({line: cur.line, ch: pos + 1}).type;
9
+
10
+ var stack = [line.text.charAt(pos)], re = /[(){}[\]]/;
11
+ function scan(line, lineNo, start) {
12
+ if (!line.text) return;
13
+ var pos = forward ? 0 : line.text.length - 1, end = forward ? line.text.length : -1;
14
+ if (start != null) pos = start + d;
15
+ for (; pos != end; pos += d) {
16
+ var ch = line.text.charAt(pos);
17
+ if (re.test(ch) && cm.getTokenAt({line: lineNo, ch: pos + 1}).type == style) {
18
+ var match = matching[ch];
19
+ if (match.charAt(1) == ">" == forward) stack.push(ch);
20
+ else if (stack.pop() != match.charAt(0)) return {pos: pos, match: false};
21
+ else if (!stack.length) return {pos: pos, match: true};
22
+ }
23
+ }
24
+ }
25
+ for (var i = cur.line, found, e = forward ? Math.min(i + 100, cm.lineCount()) : Math.max(-1, i - 100); i != e; i+=d) {
26
+ if (i == cur.line) found = scan(line, i, pos);
27
+ else found = scan(cm.getLineHandle(i), i);
28
+ if (found) break;
29
+ }
30
+ return {from: {line: cur.line, ch: pos}, to: found && {line: i, ch: found.pos}, match: found && found.match};
31
+ }
32
+
33
+ function matchBrackets(cm, autoclear) {
34
+ var found = findMatchingBracket(cm);
35
+ if (!found) return;
36
+ var style = found.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket";
37
+ var one = cm.markText(found.from, {line: found.from.line, ch: found.from.ch + 1},
38
+ {className: style});
39
+ var two = found.to && cm.markText(found.to, {line: found.to.line, ch: found.to.ch + 1},
40
+ {className: style});
41
+ var clear = function() {
42
+ cm.operation(function() { one.clear(); two && two.clear(); });
43
+ };
44
+ if (autoclear) setTimeout(clear, 800);
45
+ else return clear;
46
+ }
47
+
48
+ var currentlyHighlighted = null;
49
+ function doMatchBrackets(cm) {
50
+ cm.operation(function() {
51
+ if (currentlyHighlighted) {currentlyHighlighted(); currentlyHighlighted = null;}
52
+ if (!cm.somethingSelected()) currentlyHighlighted = matchBrackets(cm, false);
53
+ });
54
+ }
55
+
56
+ CodeMirror.defineOption("matchBrackets", false, function(cm, val) {
57
+ if (val) cm.on("cursorActivity", doMatchBrackets);
58
+ else cm.off("cursorActivity", doMatchBrackets);
59
+ });
60
+
61
+ CodeMirror.defineExtension("matchBrackets", function() {matchBrackets(this, true);});
62
+ CodeMirror.defineExtension("findMatchingBracket", function(){return findMatchingBracket(this);});
63
+ })();
@@ -68,6 +68,24 @@ CodeMirror.multiplexingMode = function(outer /*, others */) {
68
68
  return mode.indent(state.innerActive ? state.inner : state.outer, textAfter);
69
69
  },
70
70
 
71
+ blankLine: function(state) {
72
+ var mode = state.innerActive ? state.innerActive.mode : outer;
73
+ if (mode.blankLine) {
74
+ mode.blankLine(state.innerActive ? state.inner : state.outer);
75
+ }
76
+ if (!state.innerActive) {
77
+ for (var i = 0; i < n_others; ++i) {
78
+ var other = others[i];
79
+ if (other.open === "\n") {
80
+ state.innerActive = other;
81
+ state.inner = CodeMirror.startState(other.mode, mode.indent ? mode.indent(state.outer, "") : 0);
82
+ }
83
+ }
84
+ } else if (mode.close === "\n") {
85
+ state.innerActive = state.inner = null;
86
+ }
87
+ },
88
+
71
89
  electricChars: outer.electricChars,
72
90
 
73
91
  innerMode: function(state) {
@@ -16,7 +16,7 @@
16
16
  return arr.indexOf(item) != -1;
17
17
  }
18
18
 
19
- function scriptHint(editor, keywords, getToken) {
19
+ function scriptHint(editor, _keywords, getToken) {
20
20
  // Find the token at the cursor
21
21
  var cur = editor.getCursor(), token = getToken(editor, cur), tprop = token;
22
22
  // If it's not a 'word-style' token, ignore the token.
@@ -45,12 +45,6 @@
45
45
  return scriptHint(editor, pigKeywordsU, function (e, cur) {return e.getTokenAt(cur);});
46
46
  };
47
47
 
48
- function toTitleCase(str) {
49
- return str.replace(/(?:^|\s)\w/g, function(match) {
50
- return match.toUpperCase();
51
- });
52
- }
53
-
54
48
  var pigKeywords = "VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP "
55
49
  + "JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL "
56
50
  + "PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE "
@@ -109,9 +103,9 @@
109
103
  // find in the current environment.
110
104
  var obj = context.pop(), base;
111
105
 
112
- if (obj.className == "pig-word")
106
+ if (obj.type == "variable")
113
107
  base = obj.string;
114
- else if(obj.className == "pig-type")
108
+ else if(obj.type == "variable-3")
115
109
  base = ":" + obj.string;
116
110
 
117
111
  while (base != null && context.length)
@@ -1,43 +1,44 @@
1
1
  CodeMirror.runMode = function(string, modespec, callback, options) {
2
- function esc(str) {
3
- return str.replace(/[<&]/g, function(ch) { return ch == "<" ? "&lt;" : "&amp;"; });
4
- }
5
-
6
2
  var mode = CodeMirror.getMode(CodeMirror.defaults, modespec);
7
- var isNode = callback.nodeType == 1;
8
- var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize;
9
- if (isNode) {
10
- var node = callback, accum = [], col = 0;
3
+
4
+ if (callback.nodeType == 1) {
5
+ var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize;
6
+ var node = callback, col = 0;
7
+ node.innerHTML = "";
11
8
  callback = function(text, style) {
12
9
  if (text == "\n") {
13
- accum.push("<br>");
10
+ node.appendChild(document.createElement("br"));
14
11
  col = 0;
15
12
  return;
16
13
  }
17
- var escaped = "";
18
- // HTML-escape and replace tabs
14
+ var content = "";
15
+ // replace tabs
19
16
  for (var pos = 0;;) {
20
17
  var idx = text.indexOf("\t", pos);
21
18
  if (idx == -1) {
22
- escaped += esc(text.slice(pos));
19
+ content += text.slice(pos);
23
20
  col += text.length - pos;
24
21
  break;
25
22
  } else {
26
23
  col += idx - pos;
27
- escaped += esc(text.slice(pos, idx));
24
+ content += text.slice(pos, idx);
28
25
  var size = tabSize - col % tabSize;
29
26
  col += size;
30
- for (var i = 0; i < size; ++i) escaped += " ";
27
+ for (var i = 0; i < size; ++i) content += " ";
31
28
  pos = idx + 1;
32
29
  }
33
30
  }
34
31
 
35
- if (style)
36
- accum.push("<span class=\"cm-" + esc(style) + "\">" + escaped + "</span>");
37
- else
38
- accum.push(escaped);
32
+ if (style) {
33
+ var sp = node.appendChild(document.createElement("span"));
34
+ sp.className = "cm-" + style.replace(/ +/g, " cm-");
35
+ sp.appendChild(document.createTextNode(content));
36
+ } else {
37
+ node.appendChild(document.createTextNode(content));
38
+ }
39
39
  };
40
40
  }
41
+
41
42
  var lines = CodeMirror.splitLines(string), state = CodeMirror.startState(mode);
42
43
  for (var i = 0, e = lines.length; i < e; ++i) {
43
44
  if (i) callback("\n");
@@ -48,6 +49,4 @@ CodeMirror.runMode = function(string, modespec, callback, options) {
48
49
  stream.start = stream.pos;
49
50
  }
50
51
  }
51
- if (isNode)
52
- node.innerHTML = accum.join("");
53
52
  };
@@ -41,7 +41,8 @@
41
41
  state.query = parseQuery(query);
42
42
  if (cm.lineCount() < 2000) { // This is too expensive on big documents.
43
43
  for (var cursor = getSearchCursor(cm, state.query); cursor.findNext();)
44
- state.marked.push(cm.markText(cursor.from(), cursor.to(), "CodeMirror-searching"));
44
+ state.marked.push(cm.markText(cursor.from(), cursor.to(),
45
+ {className: "CodeMirror-searching"}));
45
46
  }
46
47
  state.posFrom = state.posTo = cm.getCursor();
47
48
  findNext(cm, rev);
@@ -76,14 +77,14 @@
76
77
  query = parseQuery(query);
77
78
  dialog(cm, replacementQueryDialog, "Replace with:", function(text) {
78
79
  if (all) {
79
- cm.compoundChange(function() { cm.operation(function() {
80
+ cm.operation(function() {
80
81
  for (var cursor = getSearchCursor(cm, query); cursor.findNext();) {
81
82
  if (typeof query != "string") {
82
83
  var match = cm.getRange(cursor.from(), cursor.to()).match(query);
83
- cursor.replace(text.replace(/\$(\d)/, function(w, i) {return match[i];}));
84
+ cursor.replace(text.replace(/\$(\d)/, function(_, i) {return match[i];}));
84
85
  } else cursor.replace(text);
85
86
  }
86
- });});
87
+ });
87
88
  } else {
88
89
  clearSearch(cm);
89
90
  var cursor = getSearchCursor(cm, query, cm.getCursor());
@@ -100,7 +101,7 @@
100
101
  }
101
102
  function doReplace(match) {
102
103
  cursor.replace(typeof query == "string" ? text :
103
- text.replace(/\$(\d)/, function(w, i) {return match[i];}));
104
+ text.replace(/\$(\d)/, function(_, i) {return match[i];}));
104
105
  advance();
105
106
  }
106
107
  advance();
@@ -18,7 +18,7 @@
18
18
  var line = cm.getLine(pos.line).slice(0, pos.ch), match = query.exec(line), start = 0;
19
19
  while (match) {
20
20
  start += match.index + 1;
21
- line = line.slice(start);
21
+ line = line.slice(start);
22
22
  query.lastIndex = 0;
23
23
  var newmatch = query.exec(line);
24
24
  if (newmatch) match = newmatch;
@@ -14,11 +14,11 @@
14
14
 
15
15
  // Don't show completions if token has changed and the option is set.
16
16
  if (options.closeOnTokenChange && previousToken != null &&
17
- (tempToken.start != previousToken.start || tempToken.className != previousToken.className)) {
17
+ (tempToken.start != previousToken.start || tempToken.type != previousToken.type)) {
18
18
  return;
19
19
  }
20
20
 
21
- var result = getHints(editor);
21
+ var result = getHints(editor, givenOptions);
22
22
  if (!result || !result.list.length) return;
23
23
  var completions = result.list;
24
24
  function insert(str) {
@@ -44,14 +44,14 @@
44
44
  }
45
45
  sel.firstChild.selected = true;
46
46
  sel.size = Math.min(10, completions.length);
47
- var pos = options.alignWithWord ? editor.charCoords(result.from) : editor.cursorCoords();
48
- complete.style.left = pos.x + "px";
49
- complete.style.top = pos.yBot + "px";
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
50
  document.body.appendChild(complete);
51
51
  // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.
52
52
  var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth);
53
- if(winW - pos.x < sel.clientWidth)
54
- complete.style.left = (pos.x - sel.clientWidth) + "px";
53
+ if(winW - pos.left < sel.clientWidth)
54
+ complete.style.left = (pos.left - sel.clientWidth) + "px";
55
55
  // Hack to hide the scrollbar.
56
56
  if (completions.length <= 10)
57
57
  complete.style.width = (sel.clientWidth - 1) + "px";
@@ -67,8 +67,8 @@
67
67
  close();
68
68
  setTimeout(function(){editor.focus();}, 50);
69
69
  }
70
- CodeMirror.connect(sel, "blur", close);
71
- CodeMirror.connect(sel, "keydown", function(event) {
70
+ CodeMirror.on(sel, "blur", close);
71
+ CodeMirror.on(sel, "keydown", function(event) {
72
72
  var code = event.keyCode;
73
73
  // Enter
74
74
  if (code == 13) {CodeMirror.e_stop(event); pick();}
@@ -84,7 +84,7 @@
84
84
  }
85
85
  }
86
86
  });
87
- CodeMirror.connect(sel, "dblclick", pick);
87
+ CodeMirror.on(sel, "dblclick", pick);
88
88
 
89
89
  sel.focus();
90
90
  // Opera sometimes ignores focusing a freshly created node
@@ -36,7 +36,7 @@
36
36
 
37
37
  text = text.slice(0, text.length - typed.length);
38
38
 
39
- var path = getActiveElement(cm, text) + simbol;
39
+ var path = getActiveElement(text) + simbol;
40
40
  var hints = CodeMirror.xmlHints[path];
41
41
 
42
42
  if(typeof hints === 'undefined')
@@ -57,7 +57,7 @@
57
57
  };
58
58
  };
59
59
 
60
- var getActiveElement = function(codeMirror, text) {
60
+ var getActiveElement = function(text) {
61
61
 
62
62
  var element = '';
63
63
 
@@ -1,174 +1,239 @@
1
+ /* BASICS */
2
+
1
3
  .CodeMirror {
2
- line-height: 1em;
4
+ /* Set height, width, borders, and global font properties here */
3
5
  font-family: monospace;
6
+ height: 300px;
7
+ }
8
+ .CodeMirror-scroll {
9
+ /* Set scrolling behaviour here */
10
+ overflow: auto;
11
+ }
12
+
13
+ /* PADDING */
14
+
15
+ .CodeMirror-lines {
16
+ padding: 4px 0; /* Vertical padding around content */
17
+ }
18
+ .CodeMirror pre {
19
+ padding: 0 4px; /* Horizontal padding of content */
20
+ }
4
21
 
5
- /* Necessary so the scrollbar can be absolutely positioned within the wrapper on Lion. */
22
+ .CodeMirror-scrollbar-filler {
23
+ background-color: white; /* The little square between H and V scrollbars */
24
+ }
25
+
26
+ /* GUTTER */
27
+
28
+ .CodeMirror-gutters {
29
+ border-right: 1px solid #ddd;
30
+ background-color: #f7f7f7;
31
+ }
32
+ .CodeMirror-linenumbers {}
33
+ .CodeMirror-linenumber {
34
+ padding: 0 3px 0 5px;
35
+ min-width: 20px;
36
+ text-align: right;
37
+ color: #999;
38
+ }
39
+
40
+ /* CURSOR */
41
+
42
+ .CodeMirror pre.CodeMirror-cursor {
43
+ border-left: 1px solid black;
44
+ }
45
+ /* Shown when moving in bi-directional text */
46
+ .CodeMirror pre.CodeMirror-secondarycursor {
47
+ border-left: 1px solid silver;
48
+ }
49
+ .cm-keymap-fat-cursor pre.CodeMirror-cursor {
50
+ width: auto;
51
+ border: 0;
52
+ background: transparent;
53
+ background: rgba(0, 200, 0, .4);
54
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#6600c800, endColorstr=#4c00c800);
55
+ }
56
+ /* Kludge to turn off filter in ie9+, which also accepts rgba */
57
+ .cm-keymap-fat-cursor pre.CodeMirror-cursor:not(#nonsense_id) {
58
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
59
+ }
60
+ /* Can style cursor different in overwrite (non-insert) mode */
61
+ .CodeMirror pre.CodeMirror-cursor.CodeMirror-overwrite {}
62
+
63
+ /* DEFAULT THEME */
64
+
65
+ .cm-s-default .cm-keyword {color: #708;}
66
+ .cm-s-default .cm-atom {color: #219;}
67
+ .cm-s-default .cm-number {color: #164;}
68
+ .cm-s-default .cm-def {color: #00f;}
69
+ .cm-s-default .cm-variable {color: black;}
70
+ .cm-s-default .cm-variable-2 {color: #05a;}
71
+ .cm-s-default .cm-variable-3 {color: #085;}
72
+ .cm-s-default .cm-property {color: black;}
73
+ .cm-s-default .cm-operator {color: black;}
74
+ .cm-s-default .cm-comment {color: #a50;}
75
+ .cm-s-default .cm-string {color: #a11;}
76
+ .cm-s-default .cm-string-2 {color: #f50;}
77
+ .cm-s-default .cm-meta {color: #555;}
78
+ .cm-s-default .cm-error {color: #f00;}
79
+ .cm-s-default .cm-qualifier {color: #555;}
80
+ .cm-s-default .cm-builtin {color: #30a;}
81
+ .cm-s-default .cm-bracket {color: #997;}
82
+ .cm-s-default .cm-tag {color: #170;}
83
+ .cm-s-default .cm-attribute {color: #00c;}
84
+ .cm-s-default .cm-header {color: blue;}
85
+ .cm-s-default .cm-quote {color: #090;}
86
+ .cm-s-default .cm-hr {color: #999;}
87
+ .cm-s-default .cm-link {color: #00c;}
88
+
89
+ .cm-negative {color: #d44;}
90
+ .cm-positive {color: #292;}
91
+ .cm-header, .cm-strong {font-weight: bold;}
92
+ .cm-em {font-style: italic;}
93
+ .cm-emstrong {font-style: italic; font-weight: bold;}
94
+ .cm-link {text-decoration: underline;}
95
+
96
+ .cm-invalidchar {color: #f00;}
97
+
98
+ div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
99
+ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
100
+
101
+ /* STOP */
102
+
103
+ /* The rest of this file contains styles related to the mechanics of
104
+ the editor. You probably shouldn't touch them. */
105
+
106
+ .CodeMirror {
107
+ line-height: 1;
6
108
  position: relative;
7
- /* This prevents unwanted scrollbars from showing up on the body and wrapper in IE. */
8
109
  overflow: hidden;
9
110
  }
10
111
 
11
112
  .CodeMirror-scroll {
12
- overflow: auto;
13
- height: 300px;
14
- /* This is needed to prevent an IE[67] bug where the scrolled content
15
- is visible outside of the scrolling box. */
113
+ /* 30px is the magic margin used to hide the element's real scrollbars */
114
+ /* See overflow: hidden in .CodeMirror, and the paddings in .CodeMirror-sizer */
115
+ margin-bottom: -30px; margin-right: -30px;
116
+ padding-bottom: 30px; padding-right: 30px;
117
+ height: 100%;
118
+ outline: none; /* Prevent dragging from highlighting the element */
119
+ position: relative;
120
+ }
121
+ .CodeMirror-sizer {
16
122
  position: relative;
17
- outline: none;
18
123
  }
19
124
 
20
- /* Vertical scrollbar */
21
- .CodeMirror-scrollbar {
125
+ /* The fake, visible scrollbars. Used to force redraw during scrolling
126
+ before actuall scrolling happens, thus preventing shaking and
127
+ flickering artifacts. */
128
+ .CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler {
22
129
  position: absolute;
130
+ z-index: 6;
131
+ display: none;
132
+ }
133
+ .CodeMirror-vscrollbar {
23
134
  right: 0; top: 0;
24
135
  overflow-x: hidden;
25
136
  overflow-y: scroll;
26
- z-index: 5;
27
- }
28
- .CodeMirror-scrollbar-inner {
29
- /* This needs to have a nonzero width in order for the scrollbar to appear
30
- in Firefox and IE9. */
31
- width: 1px;
32
- }
33
- .CodeMirror-scrollbar.cm-sb-overlap {
34
- /* Ensure that the scrollbar appears in Lion, and that it overlaps the content
35
- rather than sitting to the right of it. */
36
- position: absolute;
37
- z-index: 1;
38
- float: none;
39
- right: 0;
40
- min-width: 12px;
41
137
  }
42
- .CodeMirror-scrollbar.cm-sb-nonoverlap {
43
- min-width: 12px;
138
+ .CodeMirror-hscrollbar {
139
+ bottom: 0; left: 0;
140
+ overflow-y: hidden;
141
+ overflow-x: scroll;
44
142
  }
45
- .CodeMirror-scrollbar.cm-sb-ie7 {
46
- min-width: 18px;
143
+ .CodeMirror-scrollbar-filler {
144
+ right: 0; bottom: 0;
145
+ z-index: 6;
47
146
  }
48
147
 
49
- .CodeMirror-gutter {
148
+ .CodeMirror-gutters {
50
149
  position: absolute; left: 0; top: 0;
51
- z-index: 10;
52
- background-color: #f7f7f7;
53
- border-right: 1px solid #eee;
54
- min-width: 2em;
55
150
  height: 100%;
151
+ z-index: 3;
56
152
  }
57
- .CodeMirror-gutter-text {
58
- color: #aaa;
59
- text-align: right;
60
- padding: .4em .2em .4em .4em;
61
- white-space: pre !important;
153
+ .CodeMirror-gutter {
154
+ height: 100%;
155
+ display: inline-block;
156
+ /* Hack to make IE7 behave */
157
+ *zoom:1;
158
+ *display:inline;
159
+ }
160
+ .CodeMirror-gutter-elt {
161
+ position: absolute;
62
162
  cursor: default;
163
+ z-index: 4;
63
164
  }
165
+
64
166
  .CodeMirror-lines {
65
- padding: .4em;
66
- white-space: pre;
67
167
  cursor: text;
68
168
  }
69
-
70
169
  .CodeMirror pre {
71
- -moz-border-radius: 0;
72
- -webkit-border-radius: 0;
73
- -o-border-radius: 0;
74
- border-radius: 0;
75
- border-width: 0; margin: 0; padding: 0; background: transparent;
170
+ /* Reset some styles that the rest of the page might have set */
171
+ -moz-border-radius: 0; -webkit-border-radius: 0; -o-border-radius: 0; border-radius: 0;
172
+ border-width: 0;
173
+ background: transparent;
76
174
  font-family: inherit;
77
175
  font-size: inherit;
78
- padding: 0; margin: 0;
176
+ margin: 0;
79
177
  white-space: pre;
80
178
  word-wrap: normal;
81
179
  line-height: inherit;
82
180
  color: inherit;
181
+ z-index: 2;
182
+ position: relative;
83
183
  overflow: visible;
84
184
  }
85
-
86
185
  .CodeMirror-wrap pre {
87
186
  word-wrap: break-word;
88
187
  white-space: pre-wrap;
89
188
  word-break: normal;
90
189
  }
190
+ .CodeMirror-linebackground {
191
+ position: absolute;
192
+ left: 0; right: 0; top: 0; bottom: 0;
193
+ z-index: 0;
194
+ }
195
+
196
+ .CodeMirror-linewidget {
197
+ position: relative;
198
+ z-index: 2;
199
+ }
200
+
91
201
  .CodeMirror-wrap .CodeMirror-scroll {
92
202
  overflow-x: hidden;
93
203
  }
94
204
 
95
- .CodeMirror textarea {
96
- outline: none !important;
205
+ .CodeMirror-measure {
206
+ position: absolute;
207
+ width: 100%; height: 0px;
208
+ overflow: hidden;
209
+ visibility: hidden;
97
210
  }
211
+ .CodeMirror-measure pre { position: static; }
98
212
 
99
213
  .CodeMirror pre.CodeMirror-cursor {
100
- z-index: 10;
101
214
  position: absolute;
102
215
  visibility: hidden;
103
- border-left: 1px solid black;
104
216
  border-right: none;
105
217
  width: 0;
106
218
  }
107
- .cm-keymap-fat-cursor pre.CodeMirror-cursor {
108
- width: auto;
109
- border: 0;
110
- background: transparent;
111
- background: rgba(0, 200, 0, .4);
112
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#6600c800, endColorstr=#4c00c800);
113
- }
114
- /* Kludge to turn off filter in ie9+, which also accepts rgba */
115
- .cm-keymap-fat-cursor pre.CodeMirror-cursor:not(#nonsense_id) {
116
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
117
- }
118
- .CodeMirror pre.CodeMirror-cursor.CodeMirror-overwrite {}
119
219
  .CodeMirror-focused pre.CodeMirror-cursor {
120
220
  visibility: visible;
121
221
  }
122
222
 
123
- div.CodeMirror-selected { background: #d9d9d9; }
124
- .CodeMirror-focused div.CodeMirror-selected { background: #d7d4f0; }
223
+ .CodeMirror-selected { background: #d9d9d9; }
224
+ .CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
125
225
 
126
226
  .CodeMirror-searching {
127
227
  background: #ffa;
128
228
  background: rgba(255, 255, 0, .4);
129
229
  }
130
230
 
131
- /* Default theme */
132
-
133
- .cm-s-default span.cm-keyword {color: #708;}
134
- .cm-s-default span.cm-atom {color: #219;}
135
- .cm-s-default span.cm-number {color: #164;}
136
- .cm-s-default span.cm-def {color: #00f;}
137
- .cm-s-default span.cm-variable {color: black;}
138
- .cm-s-default span.cm-variable-2 {color: #05a;}
139
- .cm-s-default span.cm-variable-3 {color: #085;}
140
- .cm-s-default span.cm-property {color: black;}
141
- .cm-s-default span.cm-operator {color: black;}
142
- .cm-s-default span.cm-comment {color: #a50;}
143
- .cm-s-default span.cm-string {color: #a11;}
144
- .cm-s-default span.cm-string-2 {color: #f50;}
145
- .cm-s-default span.cm-meta {color: #555;}
146
- .cm-s-default span.cm-error {color: #f00;}
147
- .cm-s-default span.cm-qualifier {color: #555;}
148
- .cm-s-default span.cm-builtin {color: #30a;}
149
- .cm-s-default span.cm-bracket {color: #997;}
150
- .cm-s-default span.cm-tag {color: #170;}
151
- .cm-s-default span.cm-attribute {color: #00c;}
152
- .cm-s-default span.cm-header {color: blue;}
153
- .cm-s-default span.cm-quote {color: #090;}
154
- .cm-s-default span.cm-hr {color: #999;}
155
- .cm-s-default span.cm-link {color: #00c;}
156
-
157
- span.cm-header, span.cm-strong {font-weight: bold;}
158
- span.cm-em {font-style: italic;}
159
- span.cm-emstrong {font-style: italic; font-weight: bold;}
160
- span.cm-link {text-decoration: underline;}
161
-
162
- span.cm-invalidchar {color: #f00;}
163
-
164
- div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
165
- div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
231
+ /* IE7 hack to prevent it from returning funny offsetTops on the spans */
232
+ .CodeMirror span { *vertical-align: text-bottom; }
166
233
 
167
234
  @media print {
168
-
169
235
  /* Hide the cursor when printing */
170
236
  .CodeMirror pre.CodeMirror-cursor {
171
237
  visibility: hidden;
172
238
  }
173
-
174
239
  }