codemirror-rails 5.0 → 5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/lib/codemirror/rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/codemirror.js +104 -64
  4. data/vendor/assets/javascripts/codemirror/addons/dialog/dialog.js +3 -1
  5. data/vendor/assets/javascripts/codemirror/addons/edit/closebrackets.js +144 -121
  6. data/vendor/assets/javascripts/codemirror/addons/fold/foldgutter.js +4 -2
  7. data/vendor/assets/javascripts/codemirror/addons/hint/css-hint.js +4 -0
  8. data/vendor/assets/javascripts/codemirror/addons/hint/sql-hint.js +13 -8
  9. data/vendor/assets/javascripts/codemirror/addons/lint/lint.js +2 -0
  10. data/vendor/assets/javascripts/codemirror/addons/merge/merge.js +40 -0
  11. data/vendor/assets/javascripts/codemirror/addons/mode/multiplex_test.js +33 -0
  12. data/vendor/assets/javascripts/codemirror/addons/scroll/simplescrollbars.js +8 -2
  13. data/vendor/assets/javascripts/codemirror/addons/tern/tern.js +1 -1
  14. data/vendor/assets/javascripts/codemirror/keymaps/sublime.js +13 -0
  15. data/vendor/assets/javascripts/codemirror/keymaps/vim.js +43 -54
  16. data/vendor/assets/javascripts/codemirror/modes/asciiarmor.js +73 -0
  17. data/vendor/assets/javascripts/codemirror/modes/clike.js +2 -1
  18. data/vendor/assets/javascripts/codemirror/modes/clojure.js +1 -0
  19. data/vendor/assets/javascripts/codemirror/modes/cmake.js +97 -0
  20. data/vendor/assets/javascripts/codemirror/modes/commonlisp.js +1 -0
  21. data/vendor/assets/javascripts/codemirror/modes/css.js +1 -0
  22. data/vendor/assets/javascripts/codemirror/modes/groovy.js +1 -0
  23. data/vendor/assets/javascripts/codemirror/modes/htmlembedded.js +18 -76
  24. data/vendor/assets/javascripts/codemirror/modes/javascript.js +5 -0
  25. data/vendor/assets/javascripts/codemirror/modes/kotlin.js +1 -0
  26. data/vendor/assets/javascripts/codemirror/modes/less_test.js +51 -0
  27. data/vendor/assets/javascripts/codemirror/modes/mllike.js +1 -1
  28. data/vendor/assets/javascripts/codemirror/modes/properties.js +1 -1
  29. data/vendor/assets/javascripts/codemirror/modes/python.js +1 -0
  30. data/vendor/assets/javascripts/codemirror/modes/sass.js +1 -1
  31. data/vendor/assets/javascripts/codemirror/modes/scheme.js +1 -0
  32. data/vendor/assets/javascripts/codemirror/modes/scss_test.js +110 -0
  33. data/vendor/assets/javascripts/codemirror/modes/smarty.js +100 -107
  34. data/vendor/assets/javascripts/codemirror/modes/stylus.js +651 -332
  35. data/vendor/assets/javascripts/codemirror/modes/test.js +67 -0
  36. data/vendor/assets/javascripts/codemirror/modes/troff.js +82 -0
  37. data/vendor/assets/javascripts/codemirror/modes/vb.js +6 -5
  38. data/vendor/assets/javascripts/codemirror/modes/verilog.js +53 -53
  39. data/vendor/assets/stylesheets/codemirror.css +11 -8
  40. data/vendor/assets/stylesheets/codemirror/themes/mdn-like.css +1 -1
  41. metadata +9 -3
  42. data/vendor/assets/javascripts/codemirror/modes/smartymixed.js +0 -197
@@ -403,7 +403,8 @@ CodeMirror.defineMode("clike", function(config, parserConfig) {
403
403
  stream.eatWhile(/[\w\$_\xa1-\uffff]/);
404
404
  return "atom";
405
405
  }
406
- }
406
+ },
407
+ modeProps: {closeBrackets: {triples: '"'}}
407
408
  });
408
409
 
409
410
  def(["x-shader/x-vertex", "x-shader/x-fragment"], {
@@ -234,6 +234,7 @@ CodeMirror.defineMode("clojure", function (options) {
234
234
  return state.indentStack.indent;
235
235
  },
236
236
 
237
+ closeBrackets: {pairs: "()[]{}\"\""},
237
238
  lineComment: ";;"
238
239
  };
239
240
  });
@@ -0,0 +1,97 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
4
+ (function(mod) {
5
+ if (typeof exports == "object" && typeof module == "object")
6
+ mod(require("../../lib/codemirror"));
7
+ else if (typeof define == "function" && define.amd)
8
+ define(["../../lib/codemirror"], mod);
9
+ else
10
+ mod(CodeMirror);
11
+ })(function(CodeMirror) {
12
+ "use strict";
13
+
14
+ CodeMirror.defineMode("cmake", function () {
15
+ var variable_regex = /({)?[a-zA-Z0-9_]+(})?/;
16
+
17
+ function tokenString(stream, state) {
18
+ var current, prev, found_var = false;
19
+ while (!stream.eol() && (current = stream.next()) != state.pending) {
20
+ if (current === '$' && prev != '\\' && state.pending == '"') {
21
+ found_var = true;
22
+ break;
23
+ }
24
+ prev = current;
25
+ }
26
+ if (found_var) {
27
+ stream.backUp(1);
28
+ }
29
+ if (current == state.pending) {
30
+ state.continueString = false;
31
+ } else {
32
+ state.continueString = true;
33
+ }
34
+ return "string";
35
+ }
36
+
37
+ function tokenize(stream, state) {
38
+ var ch = stream.next();
39
+
40
+ // Have we found a variable?
41
+ if (ch === '$') {
42
+ if (stream.match(variable_regex)) {
43
+ return 'variable-2';
44
+ }
45
+ return 'variable';
46
+ }
47
+ // Should we still be looking for the end of a string?
48
+ if (state.continueString) {
49
+ // If so, go through the loop again
50
+ stream.backUp(1);
51
+ return tokenString(stream, state);
52
+ }
53
+ // Do we just have a function on our hands?
54
+ // In 'cmake_minimum_required (VERSION 2.8.8)', 'cmake_minimum_required' is matched
55
+ if (stream.match(/(\s+)?\w+\(/) || stream.match(/(\s+)?\w+\ \(/)) {
56
+ stream.backUp(1);
57
+ return 'def';
58
+ }
59
+ if (ch == "#") {
60
+ stream.skipToEnd();
61
+ return "comment";
62
+ }
63
+ // Have we found a string?
64
+ if (ch == "'" || ch == '"') {
65
+ // Store the type (single or double)
66
+ state.pending = ch;
67
+ // Perform the looping function to find the end
68
+ return tokenString(stream, state);
69
+ }
70
+ if (ch == '(' || ch == ')') {
71
+ return 'bracket';
72
+ }
73
+ if (ch.match(/[0-9]/)) {
74
+ return 'number';
75
+ }
76
+ stream.eatWhile(/[\w-]/);
77
+ return null;
78
+ }
79
+ return {
80
+ startState: function () {
81
+ var state = {};
82
+ state.inDefinition = false;
83
+ state.inInclude = false;
84
+ state.continueString = false;
85
+ state.pending = false;
86
+ return state;
87
+ },
88
+ token: function (stream, state) {
89
+ if (stream.eatSpace()) return null;
90
+ return tokenize(stream, state);
91
+ }
92
+ };
93
+ });
94
+
95
+ CodeMirror.defineMIME("text/x-cmake", "cmake");
96
+
97
+ });
@@ -111,6 +111,7 @@ CodeMirror.defineMode("commonlisp", function (config) {
111
111
  return typeof i == "number" ? i : state.ctx.start + 1;
112
112
  },
113
113
 
114
+ closeBrackets: {pairs: "()[]{}\"\""},
114
115
  lineComment: ";;",
115
116
  blockCommentStart: "#|",
116
117
  blockCommentEnd: "|#"
@@ -239,6 +239,7 @@ CodeMirror.defineMode("css", function(config, parserConfig) {
239
239
  if (type == "{" || type == "}") return popAndPass(type, stream, state);
240
240
  if (type == ")") return popContext(state);
241
241
  if (type == "(") return pushContext(state, stream, "parens");
242
+ if (type == "interpolation") return pushContext(state, stream, "interpolation");
242
243
  if (type == "word") wordAsValue(stream);
243
244
  return "parens";
244
245
  };
@@ -217,6 +217,7 @@ CodeMirror.defineMode("groovy", function(config) {
217
217
  },
218
218
 
219
219
  electricChars: "{}",
220
+ closeBrackets: {triples: "'\""},
220
221
  fold: "brace"
221
222
  };
222
223
  });
@@ -3,84 +3,26 @@
3
3
 
4
4
  (function(mod) {
5
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
6
- mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"));
6
+ mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"),
7
+ require("../../addon/mode/multiplex"));
7
8
  else if (typeof define == "function" && define.amd) // AMD
8
- define(["../../lib/codemirror", "../htmlmixed/htmlmixed"], mod);
9
+ define(["../../lib/codemirror", "../htmlmixed/htmlmixed",
10
+ "../../addon/mode/multiplex"], mod);
9
11
  else // Plain browser env
10
12
  mod(CodeMirror);
11
13
  })(function(CodeMirror) {
12
- "use strict";
13
-
14
- CodeMirror.defineMode("htmlembedded", function(config, parserConfig) {
15
-
16
- //config settings
17
- var scriptStartRegex = parserConfig.scriptStartRegex || /^<%/i,
18
- scriptEndRegex = parserConfig.scriptEndRegex || /^%>/i;
19
-
20
- //inner modes
21
- var scriptingMode, htmlMixedMode;
22
-
23
- //tokenizer when in html mode
24
- function htmlDispatch(stream, state) {
25
- if (stream.match(scriptStartRegex, false)) {
26
- state.token=scriptingDispatch;
27
- return scriptingMode.token(stream, state.scriptState);
28
- }
29
- else
30
- return htmlMixedMode.token(stream, state.htmlState);
31
- }
32
-
33
- //tokenizer when in scripting mode
34
- function scriptingDispatch(stream, state) {
35
- if (stream.match(scriptEndRegex, false)) {
36
- state.token=htmlDispatch;
37
- return htmlMixedMode.token(stream, state.htmlState);
38
- }
39
- else
40
- return scriptingMode.token(stream, state.scriptState);
41
- }
42
-
43
-
44
- return {
45
- startState: function() {
46
- scriptingMode = scriptingMode || CodeMirror.getMode(config, parserConfig.scriptingModeSpec);
47
- htmlMixedMode = htmlMixedMode || CodeMirror.getMode(config, "htmlmixed");
48
- return {
49
- token : parserConfig.startOpen ? scriptingDispatch : htmlDispatch,
50
- htmlState : CodeMirror.startState(htmlMixedMode),
51
- scriptState : CodeMirror.startState(scriptingMode)
52
- };
53
- },
54
-
55
- token: function(stream, state) {
56
- return state.token(stream, state);
57
- },
58
-
59
- indent: function(state, textAfter) {
60
- if (state.token == htmlDispatch)
61
- return htmlMixedMode.indent(state.htmlState, textAfter);
62
- else if (scriptingMode.indent)
63
- return scriptingMode.indent(state.scriptState, textAfter);
64
- },
65
-
66
- copyState: function(state) {
67
- return {
68
- token : state.token,
69
- htmlState : CodeMirror.copyState(htmlMixedMode, state.htmlState),
70
- scriptState : CodeMirror.copyState(scriptingMode, state.scriptState)
71
- };
72
- },
73
-
74
- innerMode: function(state) {
75
- if (state.token == scriptingDispatch) return {state: state.scriptState, mode: scriptingMode};
76
- else return {state: state.htmlState, mode: htmlMixedMode};
77
- }
78
- };
79
- }, "htmlmixed");
80
-
81
- CodeMirror.defineMIME("application/x-ejs", { name: "htmlembedded", scriptingModeSpec:"javascript"});
82
- CodeMirror.defineMIME("application/x-aspx", { name: "htmlembedded", scriptingModeSpec:"text/x-csharp"});
83
- CodeMirror.defineMIME("application/x-jsp", { name: "htmlembedded", scriptingModeSpec:"text/x-java"});
84
- CodeMirror.defineMIME("application/x-erb", { name: "htmlembedded", scriptingModeSpec:"ruby"});
85
-
14
+ "use strict";
15
+
16
+ CodeMirror.defineMode("htmlembedded", function(config, parserConfig) {
17
+ return CodeMirror.multiplexingMode(CodeMirror.getMode(config, "htmlmixed"), {
18
+ open: parserConfig.open || parserConfig.scriptStartRegex || "<%",
19
+ close: parserConfig.close || parserConfig.scriptEndRegex || "%>",
20
+ mode: CodeMirror.getMode(config, parserConfig.scriptingModeSpec)
21
+ });
22
+ }, "htmlmixed");
23
+
24
+ CodeMirror.defineMIME("application/x-ejs", {name: "htmlembedded", scriptingModeSpec:"javascript"});
25
+ CodeMirror.defineMIME("application/x-aspx", {name: "htmlembedded", scriptingModeSpec:"text/x-csharp"});
26
+ CodeMirror.defineMIME("application/x-jsp", {name: "htmlembedded", scriptingModeSpec:"text/x-java"});
27
+ CodeMirror.defineMIME("application/x-erb", {name: "htmlembedded", scriptingModeSpec:"ruby"});
86
28
  });
@@ -549,6 +549,10 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
549
549
  }
550
550
  function classBody(type, value) {
551
551
  if (type == "variable" || cx.style == "keyword") {
552
+ if (value == "static") {
553
+ cx.marked = "keyword";
554
+ return cont(classBody);
555
+ }
552
556
  cx.marked = "property";
553
557
  if (value == "get" || value == "set") return cont(classGetterSetter, functiondef, classBody);
554
558
  return cont(functiondef, classBody);
@@ -669,6 +673,7 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
669
673
  blockCommentEnd: jsonMode ? null : "*/",
670
674
  lineComment: jsonMode ? null : "//",
671
675
  fold: "brace",
676
+ closeBrackets: "()[]{}''\"\"``",
672
677
 
673
678
  helperType: jsonMode ? "json" : "javascript",
674
679
  jsonldMode: jsonldMode,
@@ -271,6 +271,7 @@ CodeMirror.defineMode("kotlin", function (config, parserConfig) {
271
271
  else return ctx.indented + (closing ? 0 : config.indentUnit);
272
272
  },
273
273
 
274
+ closeBrackets: {triples: "'\""},
274
275
  electricChars: "{}"
275
276
  };
276
277
  });
@@ -0,0 +1,51 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
4
+ (function() {
5
+ "use strict";
6
+
7
+ var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-less");
8
+ function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "less"); }
9
+
10
+ MT("variable",
11
+ "[variable-2 @base]: [atom #f04615];",
12
+ "[qualifier .class] {",
13
+ " [property width]: [variable percentage]([number 0.5]); [comment // returns `50%`]",
14
+ " [property color]: [variable saturate]([variable-2 @base], [number 5%]);",
15
+ "}");
16
+
17
+ MT("amp",
18
+ "[qualifier .child], [qualifier .sibling] {",
19
+ " [qualifier .parent] [atom &] {",
20
+ " [property color]: [keyword black];",
21
+ " }",
22
+ " [atom &] + [atom &] {",
23
+ " [property color]: [keyword red];",
24
+ " }",
25
+ "}");
26
+
27
+ MT("mixin",
28
+ "[qualifier .mixin] ([variable dark]; [variable-2 @color]) {",
29
+ " [property color]: [variable darken]([variable-2 @color], [number 10%]);",
30
+ "}",
31
+ "[qualifier .mixin] ([variable light]; [variable-2 @color]) {",
32
+ " [property color]: [variable lighten]([variable-2 @color], [number 10%]);",
33
+ "}",
34
+ "[qualifier .mixin] ([variable-2 @_]; [variable-2 @color]) {",
35
+ " [property display]: [atom block];",
36
+ "}",
37
+ "[variable-2 @switch]: [variable light];",
38
+ "[qualifier .class] {",
39
+ " [qualifier .mixin]([variable-2 @switch]; [atom #888]);",
40
+ "}");
41
+
42
+ MT("nest",
43
+ "[qualifier .one] {",
44
+ " [def @media] ([property width]: [number 400px]) {",
45
+ " [property font-size]: [number 1.2em];",
46
+ " [def @media] [attribute print] [keyword and] [property color] {",
47
+ " [property color]: [keyword blue];",
48
+ " }",
49
+ " }",
50
+ "}");
51
+ })();
@@ -85,7 +85,7 @@ CodeMirror.defineMode('mllike', function(_config, parserConfig) {
85
85
  }
86
86
  stream.eatWhile(/\w/);
87
87
  var cur = stream.current();
88
- return words[cur] || 'variable';
88
+ return words.hasOwnProperty(cur) ? words[cur] : 'variable';
89
89
  }
90
90
 
91
91
  function tokenString(stream, state) {
@@ -51,7 +51,7 @@ CodeMirror.defineMode("properties", function() {
51
51
  state.position = "quote";
52
52
  return null;
53
53
  } else if (ch === "\\" && state.position === "quote") {
54
- if (stream.next() !== "u") { // u = Unicode sequence \u1234
54
+ if (stream.eol()) { // end of line?
55
55
  // Multiline value
56
56
  state.nextMultiline = true;
57
57
  }
@@ -339,6 +339,7 @@
339
339
  return scope.offset;
340
340
  },
341
341
 
342
+ closeBrackets: {triples: "'\""},
342
343
  lineComment: "#",
343
344
  fold: "indent"
344
345
  };
@@ -232,7 +232,7 @@ CodeMirror.defineMode("sass", function(config) {
232
232
 
233
233
  if (stream.eatWhile(/[\w-]/)){
234
234
  if(stream.match(/ *: *[\w-\+\$#!\("']/,false)){
235
- return "propery";
235
+ return "property";
236
236
  }
237
237
  else if(stream.match(/ *:/,false)){
238
238
  indent(state);
@@ -239,6 +239,7 @@ CodeMirror.defineMode("scheme", function () {
239
239
  return state.indentStack.indent;
240
240
  },
241
241
 
242
+ closeBrackets: {pairs: "()[]{}\"\""},
242
243
  lineComment: ";;"
243
244
  };
244
245
  });
@@ -0,0 +1,110 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
4
+ (function() {
5
+ var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-scss");
6
+ function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "scss"); }
7
+
8
+ MT('url_with_quotation',
9
+ "[tag foo] { [property background]:[atom url]([string test.jpg]) }");
10
+
11
+ MT('url_with_double_quotes',
12
+ "[tag foo] { [property background]:[atom url]([string \"test.jpg\"]) }");
13
+
14
+ MT('url_with_single_quotes',
15
+ "[tag foo] { [property background]:[atom url]([string \'test.jpg\']) }");
16
+
17
+ MT('string',
18
+ "[def @import] [string \"compass/css3\"]");
19
+
20
+ MT('important_keyword',
21
+ "[tag foo] { [property background]:[atom url]([string \'test.jpg\']) [keyword !important] }");
22
+
23
+ MT('variable',
24
+ "[variable-2 $blue]:[atom #333]");
25
+
26
+ MT('variable_as_attribute',
27
+ "[tag foo] { [property color]:[variable-2 $blue] }");
28
+
29
+ MT('numbers',
30
+ "[tag foo] { [property padding]:[number 10px] [number 10] [number 10em] [number 8in] }");
31
+
32
+ MT('number_percentage',
33
+ "[tag foo] { [property width]:[number 80%] }");
34
+
35
+ MT('selector',
36
+ "[builtin #hello][qualifier .world]{}");
37
+
38
+ MT('singleline_comment',
39
+ "[comment // this is a comment]");
40
+
41
+ MT('multiline_comment',
42
+ "[comment /*foobar*/]");
43
+
44
+ MT('attribute_with_hyphen',
45
+ "[tag foo] { [property font-size]:[number 10px] }");
46
+
47
+ MT('string_after_attribute',
48
+ "[tag foo] { [property content]:[string \"::\"] }");
49
+
50
+ MT('directives',
51
+ "[def @include] [qualifier .mixin]");
52
+
53
+ MT('basic_structure',
54
+ "[tag p] { [property background]:[keyword red]; }");
55
+
56
+ MT('nested_structure',
57
+ "[tag p] { [tag a] { [property color]:[keyword red]; } }");
58
+
59
+ MT('mixin',
60
+ "[def @mixin] [tag table-base] {}");
61
+
62
+ MT('number_without_semicolon',
63
+ "[tag p] {[property width]:[number 12]}",
64
+ "[tag a] {[property color]:[keyword red];}");
65
+
66
+ MT('atom_in_nested_block',
67
+ "[tag p] { [tag a] { [property color]:[atom #000]; } }");
68
+
69
+ MT('interpolation_in_property',
70
+ "[tag foo] { #{[variable-2 $hello]}:[number 2]; }");
71
+
72
+ MT('interpolation_in_selector',
73
+ "[tag foo]#{[variable-2 $hello]} { [property color]:[atom #000]; }");
74
+
75
+ MT('interpolation_error',
76
+ "[tag foo]#{[error foo]} { [property color]:[atom #000]; }");
77
+
78
+ MT("divide_operator",
79
+ "[tag foo] { [property width]:[number 4] [operator /] [number 2] }");
80
+
81
+ MT('nested_structure_with_id_selector',
82
+ "[tag p] { [builtin #hello] { [property color]:[keyword red]; } }");
83
+
84
+ MT('indent_mixin',
85
+ "[def @mixin] [tag container] (",
86
+ " [variable-2 $a]: [number 10],",
87
+ " [variable-2 $b]: [number 10])",
88
+ "{}");
89
+
90
+ MT('indent_nested',
91
+ "[tag foo] {",
92
+ " [tag bar] {",
93
+ " }",
94
+ "}");
95
+
96
+ MT('indent_parentheses',
97
+ "[tag foo] {",
98
+ " [property color]: [variable darken]([variable-2 $blue],",
99
+ " [number 9%]);",
100
+ "}");
101
+
102
+ MT('indent_vardef',
103
+ "[variable-2 $name]:",
104
+ " [string 'val'];",
105
+ "[tag tag] {",
106
+ " [tag inner] {",
107
+ " [property margin]: [number 3px];",
108
+ " }",
109
+ "}");
110
+ })();