codemirror-rails 2.32 → 2.33
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.
- data/codemirror-rails.gemspec +1 -1
- data/lib/codemirror/rails/version.rb +2 -2
- data/vendor/assets/javascripts/codemirror.js +355 -349
- data/vendor/assets/javascripts/codemirror/keymaps/vim.js +6 -5
- data/vendor/assets/javascripts/codemirror/modes/clike.js +6 -2
- data/vendor/assets/javascripts/codemirror/modes/clojure.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/coffeescript.js +3 -3
- data/vendor/assets/javascripts/codemirror/modes/css.js +52 -2
- data/vendor/assets/javascripts/codemirror/modes/ecl.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/gfm.js +4 -3
- data/vendor/assets/javascripts/codemirror/modes/go.js +2 -2
- data/vendor/assets/javascripts/codemirror/modes/groovy.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/haskell.js +2 -2
- data/vendor/assets/javascripts/codemirror/modes/haxe.js +4 -4
- data/vendor/assets/javascripts/codemirror/modes/htmlembedded.js +3 -3
- data/vendor/assets/javascripts/codemirror/modes/htmlmixed.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/javascript.js +2 -2
- data/vendor/assets/javascripts/codemirror/modes/less.js +94 -60
- data/vendor/assets/javascripts/codemirror/modes/markdown.js +4 -4
- data/vendor/assets/javascripts/codemirror/modes/ntriples.js +4 -4
- data/vendor/assets/javascripts/codemirror/modes/ocaml.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/pascal.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/perl.js +71 -71
- data/vendor/assets/javascripts/codemirror/modes/php.js +3 -3
- data/vendor/assets/javascripts/codemirror/modes/pig.js +3 -3
- data/vendor/assets/javascripts/codemirror/modes/python.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/scheme.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/shell.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/sieve.js +156 -0
- data/vendor/assets/javascripts/codemirror/modes/smalltalk.js +2 -2
- data/vendor/assets/javascripts/codemirror/modes/smarty.js +2 -2
- data/vendor/assets/javascripts/codemirror/modes/stex.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/tiki.js +4 -4
- data/vendor/assets/javascripts/codemirror/modes/velocity.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/verilog.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/xml.js +2 -2
- data/vendor/assets/javascripts/codemirror/modes/xquery.js +7 -4
- data/vendor/assets/javascripts/codemirror/utils/dialog.js +4 -1
- data/vendor/assets/javascripts/codemirror/utils/formatting.js +1 -1
- data/vendor/assets/javascripts/codemirror/utils/javascript-hint.js +3 -3
- data/vendor/assets/javascripts/codemirror/utils/loadmode.js +1 -1
- data/vendor/assets/javascripts/codemirror/utils/multiplex.js +1 -1
- data/vendor/assets/javascripts/codemirror/utils/pig-hint.js +1 -1
- data/vendor/assets/javascripts/codemirror/utils/runmode.js +8 -4
- data/vendor/assets/javascripts/codemirror/utils/search.js +4 -4
- data/vendor/assets/javascripts/codemirror/utils/searchcursor.js +13 -11
- data/vendor/assets/javascripts/codemirror/utils/simple-hint.js +89 -68
- data/vendor/assets/javascripts/codemirror/utils/xml-hint.js +8 -8
- data/vendor/assets/stylesheets/codemirror.css +15 -11
- metadata +13 -13
| @@ -1,4 +1,8 @@ | |
| 1 1 | 
             
            CodeMirror.runMode = function(string, modespec, callback, options) {
         | 
| 2 | 
            +
              function esc(str) {
         | 
| 3 | 
            +
                return str.replace(/[<&]/, function(ch) { return ch == "<" ? "<" : "&"; });
         | 
| 4 | 
            +
              }
         | 
| 5 | 
            +
             | 
| 2 6 | 
             
              var mode = CodeMirror.getMode(CodeMirror.defaults, modespec);
         | 
| 3 7 | 
             
              var isNode = callback.nodeType == 1;
         | 
| 4 8 | 
             
              var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize;
         | 
| @@ -15,12 +19,12 @@ CodeMirror.runMode = function(string, modespec, callback, options) { | |
| 15 19 | 
             
                  for (var pos = 0;;) {
         | 
| 16 20 | 
             
                    var idx = text.indexOf("\t", pos);
         | 
| 17 21 | 
             
                    if (idx == -1) {
         | 
| 18 | 
            -
                      escaped +=  | 
| 22 | 
            +
                      escaped += esc(text.slice(pos));
         | 
| 19 23 | 
             
                      col += text.length - pos;
         | 
| 20 24 | 
             
                      break;
         | 
| 21 25 | 
             
                    } else {
         | 
| 22 26 | 
             
                      col += idx - pos;
         | 
| 23 | 
            -
                      escaped +=  | 
| 27 | 
            +
                      escaped += esc(text.slice(pos, idx));
         | 
| 24 28 | 
             
                      var size = tabSize - col % tabSize;
         | 
| 25 29 | 
             
                      col += size;
         | 
| 26 30 | 
             
                      for (var i = 0; i < size; ++i) escaped += " ";
         | 
| @@ -29,10 +33,10 @@ CodeMirror.runMode = function(string, modespec, callback, options) { | |
| 29 33 | 
             
                  }
         | 
| 30 34 |  | 
| 31 35 | 
             
                  if (style) 
         | 
| 32 | 
            -
                    accum.push("<span class=\"cm-" +  | 
| 36 | 
            +
                    accum.push("<span class=\"cm-" + esc(style) + "\">" + escaped + "</span>");
         | 
| 33 37 | 
             
                  else
         | 
| 34 38 | 
             
                    accum.push(escaped);
         | 
| 35 | 
            -
                }
         | 
| 39 | 
            +
                };
         | 
| 36 40 | 
             
              }
         | 
| 37 41 | 
             
              var lines = CodeMirror.splitLines(string), state = CodeMirror.startState(mode);
         | 
| 38 42 | 
             
              for (var i = 0, e = lines.length; i < e; ++i) {
         | 
| @@ -40,7 +40,7 @@ | |
| 40 40 | 
             
                    if (!query || state.query) return;
         | 
| 41 41 | 
             
                    state.query = parseQuery(query);
         | 
| 42 42 | 
             
                    if (cm.lineCount() < 2000) { // This is too expensive on big documents.
         | 
| 43 | 
            -
                      for (var cursor = getSearchCursor(cm, query); cursor.findNext();)
         | 
| 43 | 
            +
                      for (var cursor = getSearchCursor(cm, state.query); cursor.findNext();)
         | 
| 44 44 | 
             
                        state.marked.push(cm.markText(cursor.from(), cursor.to(), "CodeMirror-searching"));
         | 
| 45 45 | 
             
                    }
         | 
| 46 46 | 
             
                    state.posFrom = state.posTo = cm.getCursor();
         | 
| @@ -57,14 +57,14 @@ | |
| 57 57 | 
             
                }
         | 
| 58 58 | 
             
                cm.setSelection(cursor.from(), cursor.to());
         | 
| 59 59 | 
             
                state.posFrom = cursor.from(); state.posTo = cursor.to();
         | 
| 60 | 
            -
              })}
         | 
| 60 | 
            +
              });}
         | 
| 61 61 | 
             
              function clearSearch(cm) {cm.operation(function() {
         | 
| 62 62 | 
             
                var state = getSearchState(cm);
         | 
| 63 63 | 
             
                if (!state.query) return;
         | 
| 64 64 | 
             
                state.query = null;
         | 
| 65 65 | 
             
                for (var i = 0; i < state.marked.length; ++i) state.marked[i].clear();
         | 
| 66 66 | 
             
                state.marked.length = 0;
         | 
| 67 | 
            -
              })}
         | 
| 67 | 
            +
              });}
         | 
| 68 68 |  | 
| 69 69 | 
             
              var replaceQueryDialog =
         | 
| 70 70 | 
             
                'Replace: <input type="text" style="width: 10em"/> <span style="color: #888">(Use /re/ syntax for regexp search)</span>';
         | 
| @@ -83,7 +83,7 @@ | |
| 83 83 | 
             
                            cursor.replace(text.replace(/\$(\d)/, function(w, i) {return match[i];}));
         | 
| 84 84 | 
             
                          } else cursor.replace(text);
         | 
| 85 85 | 
             
                        }
         | 
| 86 | 
            -
                      })});
         | 
| 86 | 
            +
                      });});
         | 
| 87 87 | 
             
                    } else {
         | 
| 88 88 | 
             
                      clearSearch(cm);
         | 
| 89 89 | 
             
                      var cursor = getSearchCursor(cm, query, cm.getCursor());
         | 
| @@ -10,30 +10,32 @@ | |
| 10 10 | 
             
                // It takes a position and a direction, and returns an object
         | 
| 11 11 | 
             
                // describing the next occurrence of the query, or null if no
         | 
| 12 12 | 
             
                // more matches were found.
         | 
| 13 | 
            -
                if (typeof query != "string") // Regexp match
         | 
| 13 | 
            +
                if (typeof query != "string") { // Regexp match
         | 
| 14 | 
            +
                  if (!query.global) query = new RegExp(query.source, query.ignoreCase ? "ig" : "g");
         | 
| 14 15 | 
             
                  this.matches = function(reverse, pos) {
         | 
| 15 16 | 
             
                    if (reverse) {
         | 
| 16 | 
            -
                       | 
| 17 | 
            +
                      query.lastIndex = 0;
         | 
| 18 | 
            +
                      var line = cm.getLine(pos.line).slice(0, pos.ch), match = query.exec(line), start = 0;
         | 
| 17 19 | 
             
                      while (match) {
         | 
| 18 | 
            -
                         | 
| 19 | 
            -
                         | 
| 20 | 
            -
                         | 
| 21 | 
            -
                        var newmatch =  | 
| 20 | 
            +
                        start += match.index;
         | 
| 21 | 
            +
                        line = line.slice(match.index);
         | 
| 22 | 
            +
                        query.lastIndex = 0;
         | 
| 23 | 
            +
                        var newmatch = query.exec(line);
         | 
| 22 24 | 
             
                        if (newmatch) match = newmatch;
         | 
| 23 25 | 
             
                        else break;
         | 
| 24 26 | 
             
                        start++;
         | 
| 25 27 | 
             
                      }
         | 
| 26 | 
            -
                    }
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                      var line = cm.getLine(pos.line) | 
| 29 | 
            -
                      start = match &&  | 
| 28 | 
            +
                    } else {
         | 
| 29 | 
            +
                      query.lastIndex = pos.ch;
         | 
| 30 | 
            +
                      var line = cm.getLine(pos.line), match = query.exec(line),
         | 
| 31 | 
            +
                      start = match && match.index;
         | 
| 30 32 | 
             
                    }
         | 
| 31 33 | 
             
                    if (match)
         | 
| 32 34 | 
             
                      return {from: {line: pos.line, ch: start},
         | 
| 33 35 | 
             
                              to: {line: pos.line, ch: start + match[0].length},
         | 
| 34 36 | 
             
                              match: match};
         | 
| 35 37 | 
             
                  };
         | 
| 36 | 
            -
                else { // String query
         | 
| 38 | 
            +
                } else { // String query
         | 
| 37 39 | 
             
                  if (caseFold) query = query.toLowerCase();
         | 
| 38 40 | 
             
                  var fold = caseFold ? function(str){return str.toLowerCase();} : function(str){return str;};
         | 
| 39 41 | 
             
                  var target = query.split("\n");
         | 
| @@ -1,76 +1,97 @@ | |
| 1 1 | 
             
            (function() {
         | 
| 2 | 
            -
              CodeMirror.simpleHint = function(editor, getHints) {
         | 
| 3 | 
            -
                //  | 
| 4 | 
            -
                 | 
| 5 | 
            -
                 | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 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;
         | 
| 8 12 |  | 
| 9 | 
            -
             | 
| 10 | 
            -
                if (!result || !result.list.length) return;
         | 
| 11 | 
            -
                var completions = result.list;
         | 
| 12 | 
            -
                function insert(str) {
         | 
| 13 | 
            -
                  editor.replaceRange(str, result.from, result.to);
         | 
| 14 | 
            -
                }
         | 
| 15 | 
            -
                // When there is only one completion, use it directly.
         | 
| 16 | 
            -
                if (completions.length == 1) {insert(completions[0]); return true;}
         | 
| 13 | 
            +
                  var tempToken = editor.getTokenAt(editor.getCursor());
         | 
| 17 14 |  | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
                // multi-select, but it does properly support the size property on
         | 
| 24 | 
            -
                // single-selects, so no multi-select is necessary.
         | 
| 25 | 
            -
                if (!window.opera) sel.multiple = true;
         | 
| 26 | 
            -
                for (var i = 0; i < completions.length; ++i) {
         | 
| 27 | 
            -
                  var opt = sel.appendChild(document.createElement("option"));
         | 
| 28 | 
            -
                  opt.appendChild(document.createTextNode(completions[i]));
         | 
| 29 | 
            -
                }
         | 
| 30 | 
            -
                sel.firstChild.selected = true;
         | 
| 31 | 
            -
                sel.size = Math.min(10, completions.length);
         | 
| 32 | 
            -
                var pos = editor.cursorCoords();
         | 
| 33 | 
            -
                complete.style.left = pos.x + "px";
         | 
| 34 | 
            -
                complete.style.top = pos.yBot + "px";
         | 
| 35 | 
            -
                document.body.appendChild(complete);
         | 
| 36 | 
            -
                // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.
         | 
| 37 | 
            -
                var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth);
         | 
| 38 | 
            -
                if(winW - pos.x < sel.clientWidth)
         | 
| 39 | 
            -
                  complete.style.left = (pos.x - sel.clientWidth) + "px";
         | 
| 40 | 
            -
                // Hack to hide the scrollbar.
         | 
| 41 | 
            -
                if (completions.length <= 10)
         | 
| 42 | 
            -
                  complete.style.width = (sel.clientWidth - 1) + "px";
         | 
| 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.className != previousToken.className)) {
         | 
| 18 | 
            +
                    return;
         | 
| 19 | 
            +
                  }
         | 
| 43 20 |  | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
                   | 
| 47 | 
            -
                   | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
                  insert(completions[ | 
| 52 | 
            -
             | 
| 53 | 
            -
                   | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
                   | 
| 58 | 
            -
                  //  | 
| 59 | 
            -
                   | 
| 60 | 
            -
                   | 
| 61 | 
            -
                   | 
| 62 | 
            -
             | 
| 63 | 
            -
                     | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 21 | 
            +
                  var result = getHints(editor);
         | 
| 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 (completions.length == 1) {insert(completions[0]); return true;}
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  // Build the select widget
         | 
| 31 | 
            +
                  var complete = document.createElement("div");
         | 
| 32 | 
            +
                  complete.className = "CodeMirror-completions";
         | 
| 33 | 
            +
                  var sel = complete.appendChild(document.createElement("select"));
         | 
| 34 | 
            +
                  // Opera doesn't move the selection when pressing up/down in a
         | 
| 35 | 
            +
                  // multi-select, but it does properly support the size property on
         | 
| 36 | 
            +
                  // single-selects, so no multi-select is necessary.
         | 
| 37 | 
            +
                  if (!window.opera) sel.multiple = true;
         | 
| 38 | 
            +
                  for (var i = 0; i < completions.length; ++i) {
         | 
| 39 | 
            +
                    var opt = sel.appendChild(document.createElement("option"));
         | 
| 40 | 
            +
                    opt.appendChild(document.createTextNode(completions[i]));
         | 
| 41 | 
            +
                  }
         | 
| 42 | 
            +
                  sel.firstChild.selected = true;
         | 
| 43 | 
            +
                  sel.size = Math.min(10, completions.length);
         | 
| 44 | 
            +
                  var pos = editor.cursorCoords();
         | 
| 45 | 
            +
                  complete.style.left = pos.x + "px";
         | 
| 46 | 
            +
                  complete.style.top = pos.yBot + "px";
         | 
| 47 | 
            +
                  document.body.appendChild(complete);
         | 
| 48 | 
            +
                  // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.
         | 
| 49 | 
            +
                  var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth);
         | 
| 50 | 
            +
                  if(winW - pos.x < sel.clientWidth)
         | 
| 51 | 
            +
                    complete.style.left = (pos.x - sel.clientWidth) + "px";
         | 
| 52 | 
            +
                  // Hack to hide the scrollbar.
         | 
| 53 | 
            +
                  if (completions.length <= 10)
         | 
| 54 | 
            +
                    complete.style.width = (sel.clientWidth - 1) + "px";
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                  var done = false;
         | 
| 57 | 
            +
                  function close() {
         | 
| 58 | 
            +
                    if (done) return;
         | 
| 59 | 
            +
                    done = true;
         | 
| 60 | 
            +
                    complete.parentNode.removeChild(complete);
         | 
| 67 61 | 
             
                  }
         | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 62 | 
            +
                  function pick() {
         | 
| 63 | 
            +
                    insert(completions[sel.selectedIndex]);
         | 
| 64 | 
            +
                    close();
         | 
| 65 | 
            +
                    setTimeout(function(){editor.focus();}, 50);
         | 
| 66 | 
            +
                  }
         | 
| 67 | 
            +
                  CodeMirror.connect(sel, "blur", close);
         | 
| 68 | 
            +
                  CodeMirror.connect(sel, "keydown", function(event) {
         | 
| 69 | 
            +
                    var code = event.keyCode;
         | 
| 70 | 
            +
                    // Enter
         | 
| 71 | 
            +
                    if (code == 13) {CodeMirror.e_stop(event); pick();}
         | 
| 72 | 
            +
                    // Escape
         | 
| 73 | 
            +
                    else if (code == 27) {CodeMirror.e_stop(event); close(); editor.focus();}
         | 
| 74 | 
            +
                    else if (code != 38 && code != 40) {
         | 
| 75 | 
            +
                      close(); editor.focus();
         | 
| 76 | 
            +
                      // Pass the event to the CodeMirror instance so that it can handle things like backspace properly.
         | 
| 77 | 
            +
                      editor.triggerOnKeyDown(event);
         | 
| 78 | 
            +
                      // Don't show completions if the code is backspace and the option is set.
         | 
| 79 | 
            +
                      if (!options.closeOnBackspace || code != 8) {
         | 
| 80 | 
            +
                        setTimeout(function(){collectHints(tempToken);}, 50);
         | 
| 81 | 
            +
                      }
         | 
| 82 | 
            +
                    }
         | 
| 83 | 
            +
                  });
         | 
| 84 | 
            +
                  CodeMirror.connect(sel, "dblclick", pick);
         | 
| 70 85 |  | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 86 | 
            +
                  sel.focus();
         | 
| 87 | 
            +
                  // Opera sometimes ignores focusing a freshly created node
         | 
| 88 | 
            +
                  if (window.opera) setTimeout(function(){if (!done) sel.focus();}, 100);
         | 
| 89 | 
            +
                  return true;
         | 
| 90 | 
            +
                }
         | 
| 91 | 
            +
                return collectHints();
         | 
| 92 | 
            +
              };
         | 
| 93 | 
            +
              CodeMirror.simpleHint.defaults = {
         | 
| 94 | 
            +
                closeOnBackspace: true,
         | 
| 95 | 
            +
                closeOnTokenChange: false
         | 
| 75 96 | 
             
              };
         | 
| 76 97 | 
             
            })();
         | 
| @@ -1,4 +1,4 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
             | 
| 2 2 | 
             
            (function() {
         | 
| 3 3 |  | 
| 4 4 | 
             
                CodeMirror.xmlHints = [];
         | 
| @@ -15,7 +15,7 @@ | |
| 15 15 | 
             
                    // dirty hack for simple-hint to receive getHint event on space
         | 
| 16 16 | 
             
                    var getTokenAt = editor.getTokenAt;
         | 
| 17 17 |  | 
| 18 | 
            -
                    editor.getTokenAt = function() { return 'disabled'; }
         | 
| 18 | 
            +
                    editor.getTokenAt = function() { return 'disabled'; };
         | 
| 19 19 | 
             
                    CodeMirror.simpleHint(cm, getHint);
         | 
| 20 20 |  | 
| 21 21 | 
             
                    editor.getTokenAt = getTokenAt;
         | 
| @@ -40,7 +40,7 @@ | |
| 40 40 | 
             
                            }
         | 
| 41 41 | 
             
                        }
         | 
| 42 42 |  | 
| 43 | 
            -
                        text = text. | 
| 43 | 
            +
                        text = text.slice(0, text.length - typed.length);
         | 
| 44 44 |  | 
| 45 45 | 
             
                        var path = getActiveElement(cm, text) + simbol;
         | 
| 46 46 | 
             
                        var hints = CodeMirror.xmlHints[path];
         | 
| @@ -58,10 +58,10 @@ | |
| 58 58 | 
             
                        return {
         | 
| 59 59 | 
             
                            list: hints,
         | 
| 60 60 | 
             
                            from: { line: cursor.line, ch: cursor.ch - typed.length },
         | 
| 61 | 
            -
                            to: cursor | 
| 61 | 
            +
                            to: cursor
         | 
| 62 62 | 
             
                        };
         | 
| 63 63 | 
             
                    };
         | 
| 64 | 
            -
                }
         | 
| 64 | 
            +
                };
         | 
| 65 65 |  | 
| 66 66 | 
             
                var getActiveElement = function(codeMirror, text) {
         | 
| 67 67 |  | 
| @@ -76,7 +76,7 @@ | |
| 76 76 | 
             
                        while ((match = regex.exec(text)) != null) {
         | 
| 77 77 | 
             
                            matches.push({
         | 
| 78 78 | 
             
                                tag: match[1],
         | 
| 79 | 
            -
                                selfclose: (match[0]. | 
| 79 | 
            +
                                selfclose: (match[0].slice(match[0].length - 2) === '/>')
         | 
| 80 80 | 
             
                            });
         | 
| 81 81 | 
             
                        }
         | 
| 82 82 |  | 
| @@ -114,7 +114,7 @@ | |
| 114 114 |  | 
| 115 115 | 
             
                    if (close < open)
         | 
| 116 116 | 
             
                    {
         | 
| 117 | 
            -
                        text = text. | 
| 117 | 
            +
                        text = text.slice(open);
         | 
| 118 118 |  | 
| 119 119 | 
             
                        if(text != '<') {
         | 
| 120 120 |  | 
| @@ -127,7 +127,7 @@ | |
| 127 127 | 
             
                            if (space < 0)
         | 
| 128 128 | 
             
                                space = text.length;
         | 
| 129 129 |  | 
| 130 | 
            -
                            return text. | 
| 130 | 
            +
                            return text.slice(0, space);
         | 
| 131 131 | 
             
                        }
         | 
| 132 132 | 
             
                    }
         | 
| 133 133 |  | 
| @@ -9,8 +9,7 @@ | |
| 9 9 | 
             
            }
         | 
| 10 10 |  | 
| 11 11 | 
             
            .CodeMirror-scroll {
         | 
| 12 | 
            -
              overflow | 
| 13 | 
            -
              overflow-y: hidden;
         | 
| 12 | 
            +
              overflow: auto;
         | 
| 14 13 | 
             
              height: 300px;
         | 
| 15 14 | 
             
              /* This is needed to prevent an IE[67] bug where the scrolled content
         | 
| 16 15 | 
             
                 is visible outside of the scrolling box. */
         | 
| @@ -20,13 +19,11 @@ | |
| 20 19 |  | 
| 21 20 | 
             
            /* Vertical scrollbar */
         | 
| 22 21 | 
             
            .CodeMirror-scrollbar {
         | 
| 23 | 
            -
               | 
| 22 | 
            +
              position: absolute;
         | 
| 23 | 
            +
              right: 0; top: 0;
         | 
| 24 24 | 
             
              overflow-x: hidden;
         | 
| 25 25 | 
             
              overflow-y: scroll;
         | 
| 26 | 
            -
             | 
| 27 | 
            -
              /* This corrects for the 1px gap introduced to the left of the scrollbar
         | 
| 28 | 
            -
                 by the rule for .CodeMirror-scrollbar-inner. */
         | 
| 29 | 
            -
              margin-left: -1px;
         | 
| 26 | 
            +
              z-index: 5;
         | 
| 30 27 | 
             
            }
         | 
| 31 28 | 
             
            .CodeMirror-scrollbar-inner {
         | 
| 32 29 | 
             
              /* This needs to have a nonzero width in order for the scrollbar to appear
         | 
| @@ -69,10 +66,6 @@ | |
| 69 66 | 
             
              white-space: pre;
         | 
| 70 67 | 
             
              cursor: text;
         | 
| 71 68 | 
             
            }
         | 
| 72 | 
            -
            .CodeMirror-lines * {
         | 
| 73 | 
            -
              /* Necessary for throw-scrolling to decelerate properly on Safari. */
         | 
| 74 | 
            -
              pointer-events: none;
         | 
| 75 | 
            -
            }
         | 
| 76 69 |  | 
| 77 70 | 
             
            .CodeMirror pre {
         | 
| 78 71 | 
             
              -moz-border-radius: 0;
         | 
| @@ -165,5 +158,16 @@ span.cm-em {font-style: italic;} | |
| 165 158 | 
             
            span.cm-emstrong {font-style: italic; font-weight: bold;}
         | 
| 166 159 | 
             
            span.cm-link {text-decoration: underline;}
         | 
| 167 160 |  | 
| 161 | 
            +
            span.cm-invalidchar {color: #f00;}
         | 
| 162 | 
            +
             | 
| 168 163 | 
             
            div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
         | 
| 169 164 | 
             
            div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
         | 
| 165 | 
            +
             | 
| 166 | 
            +
            @media print {
         | 
| 167 | 
            +
             | 
| 168 | 
            +
              /* Hide the cursor when printing */
         | 
| 169 | 
            +
              .CodeMirror pre.CodeMirror-cursor {
         | 
| 170 | 
            +
                visibility: hidden;
         | 
| 171 | 
            +
              }
         | 
| 172 | 
            +
             | 
| 173 | 
            +
            }
         | 
    
        metadata
    CHANGED
    
    | @@ -1,20 +1,19 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: codemirror-rails
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: '2. | 
| 4 | 
            +
              version: '2.33'
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| 8 8 | 
             
            - Nathan Fixler
         | 
| 9 | 
            -
            - Robin Bühler
         | 
| 10 9 | 
             
            autorequire: 
         | 
| 11 10 | 
             
            bindir: bin
         | 
| 12 11 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date: 2012- | 
| 12 | 
            +
            date: 2012-08-25 00:00:00.000000000Z
         | 
| 14 13 | 
             
            dependencies:
         | 
| 15 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 15 | 
             
              name: railties
         | 
| 17 | 
            -
              requirement: & | 
| 16 | 
            +
              requirement: &2165662860 !ruby/object:Gem::Requirement
         | 
| 18 17 | 
             
                none: false
         | 
| 19 18 | 
             
                requirements:
         | 
| 20 19 | 
             
                - - ~>
         | 
| @@ -22,10 +21,10 @@ dependencies: | |
| 22 21 | 
             
                    version: '3.0'
         | 
| 23 22 | 
             
              type: :runtime
         | 
| 24 23 | 
             
              prerelease: false
         | 
| 25 | 
            -
              version_requirements: * | 
| 24 | 
            +
              version_requirements: *2165662860
         | 
| 26 25 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 27 26 | 
             
              name: rails
         | 
| 28 | 
            -
              requirement: & | 
| 27 | 
            +
              requirement: &2165662340 !ruby/object:Gem::Requirement
         | 
| 29 28 | 
             
                none: false
         | 
| 30 29 | 
             
                requirements:
         | 
| 31 30 | 
             
                - - ~>
         | 
| @@ -33,10 +32,10 @@ dependencies: | |
| 33 32 | 
             
                    version: '3.0'
         | 
| 34 33 | 
             
              type: :development
         | 
| 35 34 | 
             
              prerelease: false
         | 
| 36 | 
            -
              version_requirements: * | 
| 35 | 
            +
              version_requirements: *2165662340
         | 
| 37 36 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 38 37 | 
             
              name: sqlite3
         | 
| 39 | 
            -
              requirement: & | 
| 38 | 
            +
              requirement: &2165661960 !ruby/object:Gem::Requirement
         | 
| 40 39 | 
             
                none: false
         | 
| 41 40 | 
             
                requirements:
         | 
| 42 41 | 
             
                - - ! '>='
         | 
| @@ -44,10 +43,10 @@ dependencies: | |
| 44 43 | 
             
                    version: '0'
         | 
| 45 44 | 
             
              type: :development
         | 
| 46 45 | 
             
              prerelease: false
         | 
| 47 | 
            -
              version_requirements: * | 
| 46 | 
            +
              version_requirements: *2165661960
         | 
| 48 47 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 49 48 | 
             
              name: minitest
         | 
| 50 | 
            -
              requirement: & | 
| 49 | 
            +
              requirement: &2165661320 !ruby/object:Gem::Requirement
         | 
| 51 50 | 
             
                none: false
         | 
| 52 51 | 
             
                requirements:
         | 
| 53 52 | 
             
                - - ! '>='
         | 
| @@ -55,10 +54,10 @@ dependencies: | |
| 55 54 | 
             
                    version: '0'
         | 
| 56 55 | 
             
              type: :development
         | 
| 57 56 | 
             
              prerelease: false
         | 
| 58 | 
            -
              version_requirements: * | 
| 57 | 
            +
              version_requirements: *2165661320
         | 
| 59 58 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 60 59 | 
             
              name: capybara
         | 
| 61 | 
            -
              requirement: & | 
| 60 | 
            +
              requirement: &2165645620 !ruby/object:Gem::Requirement
         | 
| 62 61 | 
             
                none: false
         | 
| 63 62 | 
             
                requirements:
         | 
| 64 63 | 
             
                - - ! '>='
         | 
| @@ -66,7 +65,7 @@ dependencies: | |
| 66 65 | 
             
                    version: '0'
         | 
| 67 66 | 
             
              type: :development
         | 
| 68 67 | 
             
              prerelease: false
         | 
| 69 | 
            -
              version_requirements: * | 
| 68 | 
            +
              version_requirements: *2165645620
         | 
| 70 69 | 
             
            description: This gem provides CodeMirror assets for your Rails 3 application.
         | 
| 71 70 | 
             
            email: nathan@fixler.org
         | 
| 72 71 | 
             
            executables: []
         | 
| @@ -165,6 +164,7 @@ files: | |
| 165 164 | 
             
            - vendor/assets/javascripts/codemirror/modes/rust.js
         | 
| 166 165 | 
             
            - vendor/assets/javascripts/codemirror/modes/scheme.js
         | 
| 167 166 | 
             
            - vendor/assets/javascripts/codemirror/modes/shell.js
         | 
| 167 | 
            +
            - vendor/assets/javascripts/codemirror/modes/sieve.js
         | 
| 168 168 | 
             
            - vendor/assets/javascripts/codemirror/modes/smalltalk.js
         | 
| 169 169 | 
             
            - vendor/assets/javascripts/codemirror/modes/smarty.js
         | 
| 170 170 | 
             
            - vendor/assets/javascripts/codemirror/modes/sparql.js
         |