codemirror-rails 3.15 → 3.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/codemirror/rails/version.rb +2 -2
- data/vendor/assets/javascripts/codemirror.js +59 -29
- data/vendor/assets/javascripts/codemirror/addons/comment/continuecomment.js +44 -0
- data/vendor/assets/javascripts/codemirror/addons/display/fullscreen.js +30 -0
- data/vendor/assets/javascripts/codemirror/addons/edit/continuecomment.js +1 -1
- data/vendor/assets/javascripts/codemirror/addons/fold/brace-fold.js +3 -3
- data/vendor/assets/javascripts/codemirror/addons/fold/comment-fold.js +40 -0
- data/vendor/assets/javascripts/codemirror/addons/hint/show-hint.js +7 -10
- data/vendor/assets/javascripts/codemirror/addons/scroll/scrollpastend.js +34 -0
- data/vendor/assets/javascripts/codemirror/addons/search/match-highlighter.js +4 -1
- data/vendor/assets/javascripts/codemirror/keymaps/vim.js +5 -0
- data/vendor/assets/javascripts/codemirror/modes/css.js +21 -19
- data/vendor/assets/javascripts/codemirror/modes/erlang.js +122 -102
- data/vendor/assets/javascripts/codemirror/modes/javascript.js +3 -2
- data/vendor/assets/javascripts/codemirror/modes/python.js +12 -4
- data/vendor/assets/javascripts/codemirror/modes/rst.js +20 -21
- data/vendor/assets/javascripts/codemirror/modes/velocity.js +54 -12
- data/vendor/assets/javascripts/codemirror/modes/xml.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/xquery.js +5 -1
- data/vendor/assets/javascripts/codemirror/modes/yaml.js +8 -8
- data/vendor/assets/stylesheets/codemirror.css +1 -0
- data/vendor/assets/stylesheets/codemirror/addons/display/fullscreen.css +6 -0
- data/vendor/assets/stylesheets/codemirror/themes/3024-day.css +1 -0
- data/vendor/assets/stylesheets/codemirror/themes/3024-night.css +1 -0
- data/vendor/assets/stylesheets/codemirror/themes/ambiance.css +1 -1
- data/vendor/assets/stylesheets/codemirror/themes/base16-dark.css +1 -0
- data/vendor/assets/stylesheets/codemirror/themes/base16-light.css +1 -0
- data/vendor/assets/stylesheets/codemirror/themes/blackboard.css +3 -0
- data/vendor/assets/stylesheets/codemirror/themes/cobalt.css +3 -0
- data/vendor/assets/stylesheets/codemirror/themes/eclipse.css +2 -4
- data/vendor/assets/stylesheets/codemirror/themes/elegant.css +3 -0
- data/vendor/assets/stylesheets/codemirror/themes/erlang-dark.css +11 -2
- data/vendor/assets/stylesheets/codemirror/themes/lesser-dark.css +3 -0
- data/vendor/assets/stylesheets/codemirror/themes/midnight.css +2 -2
- data/vendor/assets/stylesheets/codemirror/themes/monokai.css +1 -0
- data/vendor/assets/stylesheets/codemirror/themes/neat.css +3 -0
- data/vendor/assets/stylesheets/codemirror/themes/night.css +3 -0
- data/vendor/assets/stylesheets/codemirror/themes/paraiso-dark.css +34 -0
- data/vendor/assets/stylesheets/codemirror/themes/paraiso-light.css +34 -0
- data/vendor/assets/stylesheets/codemirror/themes/rubyblue.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/solarized.css +2 -7
- data/vendor/assets/stylesheets/codemirror/themes/the-matrix.css +26 -0
- data/vendor/assets/stylesheets/codemirror/themes/tomorrow-night-eighties.css +1 -0
- data/vendor/assets/stylesheets/codemirror/themes/twilight.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/vibrant-ink.css +3 -0
- data/vendor/assets/stylesheets/codemirror/themes/xq-dark.css +4 -1
- data/vendor/assets/stylesheets/codemirror/themes/xq-light.css +1 -1
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a097dd836952a9d7016ff82994bb2cf95bf08c5
|
4
|
+
data.tar.gz: b9217b3006c879ae8e9df6feee1abffdd92ab939
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 29a02c78ca161d4b336e380ebfcd633a125f213efb655bf7c49a1bd48755458d572f7dd45094382930004a120d0a612478d9c7ba01cdae9e8732f3e7511d010b
|
7
|
+
data.tar.gz: 8e45db94d110041b68a8c9649b88edd7f1ed11cb045a80b5f9bc2e8de6f6a39690bc994a906bae7f65831959d7f84a28f8495f58082095277790127e4d5c03b8
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// CodeMirror version 3.
|
1
|
+
// CodeMirror version 3.16
|
2
2
|
//
|
3
3
|
// CodeMirror is the only global var we claim
|
4
4
|
window.CodeMirror = (function() {
|
@@ -26,7 +26,7 @@ window.CodeMirror = (function() {
|
|
26
26
|
// This is woefully incomplete. Suggestions for alternative methods welcome.
|
27
27
|
var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent);
|
28
28
|
var mac = ios || /Mac/.test(navigator.platform);
|
29
|
-
var windows = /
|
29
|
+
var windows = /win/i.test(navigator.platform);
|
30
30
|
|
31
31
|
var opera_version = opera && navigator.userAgent.match(/Version\/(\d*\.\d*)/);
|
32
32
|
if (opera_version) opera_version = Number(opera_version[1]);
|
@@ -334,13 +334,19 @@ window.CodeMirror = (function() {
|
|
334
334
|
d.scrollbarV.style.bottom = needsH ? scrollbarWidth(d.measure) + "px" : "0";
|
335
335
|
d.scrollbarV.firstChild.style.height =
|
336
336
|
(scrollHeight - d.scroller.clientHeight + d.scrollbarV.clientHeight) + "px";
|
337
|
-
} else
|
337
|
+
} else {
|
338
|
+
d.scrollbarV.style.display = "";
|
339
|
+
d.scrollbarV.firstChild.style.height = "0";
|
340
|
+
}
|
338
341
|
if (needsH) {
|
339
342
|
d.scrollbarH.style.display = "block";
|
340
343
|
d.scrollbarH.style.right = needsV ? scrollbarWidth(d.measure) + "px" : "0";
|
341
344
|
d.scrollbarH.firstChild.style.width =
|
342
345
|
(d.scroller.scrollWidth - d.scroller.clientWidth + d.scrollbarH.clientWidth) + "px";
|
343
|
-
} else
|
346
|
+
} else {
|
347
|
+
d.scrollbarH.style.display = "";
|
348
|
+
d.scrollbarH.firstChild.style.width = "0";
|
349
|
+
}
|
344
350
|
if (needsH && needsV) {
|
345
351
|
d.scrollbarFiller.style.display = "block";
|
346
352
|
d.scrollbarFiller.style.height = d.scrollbarFiller.style.width = scrollbarWidth(d.measure) + "px";
|
@@ -457,7 +463,7 @@ window.CodeMirror = (function() {
|
|
457
463
|
var positionsChangedFrom = Infinity;
|
458
464
|
if (cm.options.lineNumbers)
|
459
465
|
for (var i = 0; i < changes.length; ++i)
|
460
|
-
if (changes[i].diff) { positionsChangedFrom = changes[i].from;
|
466
|
+
if (changes[i].diff && changes[i].from < positionsChangedFrom) { positionsChangedFrom = changes[i].from; }
|
461
467
|
|
462
468
|
var end = doc.first + doc.size;
|
463
469
|
var from = Math.max(visible.from - cm.options.viewportMargin, doc.first);
|
@@ -614,7 +620,7 @@ window.CodeMirror = (function() {
|
|
614
620
|
if (nextIntact && nextIntact.to == lineN) nextIntact = intact.shift();
|
615
621
|
if (lineIsHidden(cm.doc, line)) {
|
616
622
|
if (line.height != 0) updateLineHeight(line, 0);
|
617
|
-
if (line.widgets && cur.previousSibling) for (var i = 0; i < line.widgets.length; ++i) {
|
623
|
+
if (line.widgets && cur && cur.previousSibling) for (var i = 0; i < line.widgets.length; ++i) {
|
618
624
|
var w = line.widgets[i];
|
619
625
|
if (w.showIfHidden) {
|
620
626
|
var prev = cur.previousSibling;
|
@@ -873,9 +879,10 @@ window.CodeMirror = (function() {
|
|
873
879
|
clearInterval(display.blinker);
|
874
880
|
var on = true;
|
875
881
|
display.cursor.style.visibility = display.otherCursor.style.visibility = "";
|
876
|
-
|
877
|
-
display.
|
878
|
-
|
882
|
+
if (cm.options.cursorBlinkRate > 0)
|
883
|
+
display.blinker = setInterval(function() {
|
884
|
+
display.cursor.style.visibility = display.otherCursor.style.visibility = (on = !on) ? "" : "hidden";
|
885
|
+
}, cm.options.cursorBlinkRate);
|
879
886
|
}
|
880
887
|
|
881
888
|
// HIGHLIGHT WORKER
|
@@ -926,8 +933,8 @@ window.CodeMirror = (function() {
|
|
926
933
|
// smallest indentation, which tends to need the least context to
|
927
934
|
// parse correctly.
|
928
935
|
function findStartLine(cm, n, precise) {
|
929
|
-
var minindent, minline, doc = cm.doc;
|
930
|
-
for (var search = n, lim = n -
|
936
|
+
var minindent, minline, doc = cm.doc, maxScan = cm.doc.mode.innerMode ? 1000 : 100;
|
937
|
+
for (var search = n, lim = n - maxScan; search > lim; --search) {
|
931
938
|
if (search <= doc.first) return doc.first;
|
932
939
|
var line = getLine(doc, search - 1);
|
933
940
|
if (line.stateAfter && (!precise || search <= doc.frontier)) return search;
|
@@ -942,7 +949,7 @@ window.CodeMirror = (function() {
|
|
942
949
|
|
943
950
|
function getStateBefore(cm, n, precise) {
|
944
951
|
var doc = cm.doc, display = cm.display;
|
945
|
-
|
952
|
+
if (!doc.mode.startState) return true;
|
946
953
|
var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter;
|
947
954
|
if (!state) state = startState(doc.mode);
|
948
955
|
else state = copyState(doc.mode, state);
|
@@ -1092,6 +1099,7 @@ window.CodeMirror = (function() {
|
|
1092
1099
|
if (cur.measureRight) rect.right = getRect(cur.measureRight).left;
|
1093
1100
|
if (cur.leftSide) rect.leftSide = measureRect(getRect(cur.leftSide));
|
1094
1101
|
}
|
1102
|
+
removeChildren(cm.display.measure);
|
1095
1103
|
for (var i = 0, cur; i < data.length; ++i) if (cur = data[i]) {
|
1096
1104
|
finishRect(cur);
|
1097
1105
|
if (cur.leftSide) finishRect(cur.leftSide);
|
@@ -1444,6 +1452,10 @@ window.CodeMirror = (function() {
|
|
1444
1452
|
function readInput(cm) {
|
1445
1453
|
var input = cm.display.input, prevInput = cm.display.prevInput, doc = cm.doc, sel = doc.sel;
|
1446
1454
|
if (!cm.state.focused || hasSelection(input) || isReadOnly(cm) || cm.state.disableInput) return false;
|
1455
|
+
if (cm.state.pasteIncoming && cm.state.fakedLastChar) {
|
1456
|
+
input.value = input.value.substring(0, input.value.length - 1);
|
1457
|
+
cm.state.fakedLastChar = false;
|
1458
|
+
}
|
1447
1459
|
var text = input.value;
|
1448
1460
|
if (text == prevInput && posEq(sel.from, sel.to)) return false;
|
1449
1461
|
if (ie && !ie_lt9 && cm.display.inputHasSelection === text) {
|
@@ -1590,12 +1602,22 @@ window.CodeMirror = (function() {
|
|
1590
1602
|
on(d.scroller, "dragover", drag_);
|
1591
1603
|
on(d.scroller, "drop", operation(cm, onDrop));
|
1592
1604
|
}
|
1593
|
-
on(d.scroller, "paste", function(e){
|
1605
|
+
on(d.scroller, "paste", function(e) {
|
1594
1606
|
if (eventInWidget(d, e)) return;
|
1595
1607
|
focusInput(cm);
|
1596
1608
|
fastPoll(cm);
|
1597
1609
|
});
|
1598
1610
|
on(d.input, "paste", function() {
|
1611
|
+
// Workaround for webkit bug https://bugs.webkit.org/show_bug.cgi?id=90206
|
1612
|
+
// Add a char to the end of textarea before paste occur so that
|
1613
|
+
// selection doesn't span to the end of textarea.
|
1614
|
+
if (webkit && !cm.state.fakedLastChar && !(new Date - cm.state.lastMiddleDown < 200)) {
|
1615
|
+
var start = d.input.selectionStart, end = d.input.selectionEnd;
|
1616
|
+
d.input.value += "$";
|
1617
|
+
d.input.selectionStart = start;
|
1618
|
+
d.input.selectionEnd = end;
|
1619
|
+
cm.state.fakedLastChar = true;
|
1620
|
+
}
|
1599
1621
|
cm.state.pasteIncoming = true;
|
1600
1622
|
fastPoll(cm);
|
1601
1623
|
});
|
@@ -1659,6 +1681,7 @@ window.CodeMirror = (function() {
|
|
1659
1681
|
if (captureMiddleClick) onContextMenu.call(cm, cm, e);
|
1660
1682
|
return;
|
1661
1683
|
case 2:
|
1684
|
+
if (webkit) cm.state.lastMiddleDown = +new Date;
|
1662
1685
|
if (start) extendSelection(cm.doc, start);
|
1663
1686
|
setTimeout(bind(focusInput, cm), 20);
|
1664
1687
|
e_preventDefault(e);
|
@@ -2062,8 +2085,8 @@ window.CodeMirror = (function() {
|
|
2062
2085
|
function onKeyDown(e) {
|
2063
2086
|
var cm = this;
|
2064
2087
|
if (!cm.state.focused) onFocus(cm);
|
2065
|
-
if (ie && e.keyCode == 27) { e.returnValue = false; }
|
2066
2088
|
if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return;
|
2089
|
+
if (ie && e.keyCode == 27) e.returnValue = false;
|
2067
2090
|
var code = e.keyCode;
|
2068
2091
|
// IE does strange things with escape.
|
2069
2092
|
cm.doc.sel.shift = code == 16 || e.shiftKey;
|
@@ -2100,7 +2123,10 @@ window.CodeMirror = (function() {
|
|
2100
2123
|
cm.state.focused = true;
|
2101
2124
|
if (cm.display.wrapper.className.search(/\bCodeMirror-focused\b/) == -1)
|
2102
2125
|
cm.display.wrapper.className += " CodeMirror-focused";
|
2103
|
-
|
2126
|
+
if (!cm.curOp) {
|
2127
|
+
resetInput(cm, true);
|
2128
|
+
if (webkit) setTimeout(bind(resetInput, cm, true), 0); // Issue #1730
|
2129
|
+
}
|
2104
2130
|
}
|
2105
2131
|
slowPoll(cm);
|
2106
2132
|
restartBlink(cm);
|
@@ -3731,9 +3757,10 @@ window.CodeMirror = (function() {
|
|
3731
3757
|
TextMarker.prototype.changed = function() {
|
3732
3758
|
var pos = this.find(), cm = this.doc.cm;
|
3733
3759
|
if (!pos || !cm) return;
|
3734
|
-
|
3760
|
+
if (this.type != "bookmark") pos = pos.from;
|
3761
|
+
var line = getLine(this.doc, pos.line);
|
3735
3762
|
clearCachedMeasurement(cm, line);
|
3736
|
-
if (pos.
|
3763
|
+
if (pos.line >= cm.display.showingFrom && pos.line < cm.display.showingTo) {
|
3737
3764
|
for (var node = cm.display.lineDiv.firstChild; node; node = node.nextSibling) if (node.lineObj == line) {
|
3738
3765
|
if (node.offsetHeight != line.height) updateLineHeight(line, node.offsetHeight);
|
3739
3766
|
break;
|
@@ -4396,11 +4423,13 @@ window.CodeMirror = (function() {
|
|
4396
4423
|
if (size) {
|
4397
4424
|
builder.measure[builder.pos] = widget;
|
4398
4425
|
} else {
|
4399
|
-
var elt =
|
4400
|
-
if (marker.type
|
4401
|
-
builder.pre.
|
4426
|
+
var elt = zeroWidthElement(builder.cm.display.measure);
|
4427
|
+
if (marker.type == "bookmark" && !marker.insertLeft)
|
4428
|
+
builder.measure[builder.pos] = builder.pre.appendChild(elt);
|
4429
|
+
else if (builder.measure[builder.pos])
|
4430
|
+
return;
|
4402
4431
|
else
|
4403
|
-
builder.pre.
|
4432
|
+
builder.measure[builder.pos] = builder.pre.insertBefore(elt, widget);
|
4404
4433
|
}
|
4405
4434
|
builder.measuredSomething = true;
|
4406
4435
|
}
|
@@ -4424,7 +4453,7 @@ window.CodeMirror = (function() {
|
|
4424
4453
|
if (nextChange == pos) { // Update current marker set
|
4425
4454
|
spanStyle = spanEndStyle = spanStartStyle = title = "";
|
4426
4455
|
collapsed = null; nextChange = Infinity;
|
4427
|
-
var
|
4456
|
+
var foundBookmarks = [];
|
4428
4457
|
for (var j = 0; j < spans.length; ++j) {
|
4429
4458
|
var sp = spans[j], m = sp.marker;
|
4430
4459
|
if (sp.from <= pos && (sp.to == null || sp.to > pos)) {
|
@@ -4438,14 +4467,15 @@ window.CodeMirror = (function() {
|
|
4438
4467
|
} else if (sp.from > pos && nextChange > sp.from) {
|
4439
4468
|
nextChange = sp.from;
|
4440
4469
|
}
|
4441
|
-
if (m.type == "bookmark" && sp.from == pos && m.replacedWith)
|
4470
|
+
if (m.type == "bookmark" && sp.from == pos && m.replacedWith) foundBookmarks.push(m);
|
4442
4471
|
}
|
4443
4472
|
if (collapsed && (collapsed.from || 0) == pos) {
|
4444
4473
|
buildCollapsedSpan(builder, (collapsed.to == null ? len : collapsed.to) - pos,
|
4445
4474
|
collapsed.marker, collapsed.from == null);
|
4446
4475
|
if (collapsed.to == null) return collapsed.marker.find();
|
4447
4476
|
}
|
4448
|
-
if (
|
4477
|
+
if (!collapsed && foundBookmarks.length) for (var j = 0; j < foundBookmarks.length; ++j)
|
4478
|
+
buildCollapsedSpan(builder, 0, foundBookmarks[j]);
|
4449
4479
|
}
|
4450
4480
|
if (pos >= len) break;
|
4451
4481
|
|
@@ -4741,11 +4771,11 @@ window.CodeMirror = (function() {
|
|
4741
4771
|
if (extend) extendSelection(this, pos);
|
4742
4772
|
else setSelection(this, pos, pos);
|
4743
4773
|
}),
|
4744
|
-
setSelection: docOperation(function(anchor, head) {
|
4745
|
-
setSelection(this, clipPos(this, anchor), clipPos(this, head || anchor));
|
4774
|
+
setSelection: docOperation(function(anchor, head, bias) {
|
4775
|
+
setSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), bias);
|
4746
4776
|
}),
|
4747
|
-
extendSelection: docOperation(function(from, to) {
|
4748
|
-
extendSelection(this, clipPos(this, from), to && clipPos(this, to));
|
4777
|
+
extendSelection: docOperation(function(from, to, bias) {
|
4778
|
+
extendSelection(this, clipPos(this, from), to && clipPos(this, to), bias);
|
4749
4779
|
}),
|
4750
4780
|
|
4751
4781
|
getSelection: function(lineSep) {return this.getRange(this.sel.from, this.sel.to, lineSep);},
|
@@ -5793,7 +5823,7 @@ window.CodeMirror = (function() {
|
|
5793
5823
|
|
5794
5824
|
// THE END
|
5795
5825
|
|
5796
|
-
CodeMirror.version = "3.
|
5826
|
+
CodeMirror.version = "3.16.0";
|
5797
5827
|
|
5798
5828
|
return CodeMirror;
|
5799
5829
|
})();
|
@@ -0,0 +1,44 @@
|
|
1
|
+
(function() {
|
2
|
+
var modes = ["clike", "css", "javascript"];
|
3
|
+
for (var i = 0; i < modes.length; ++i)
|
4
|
+
CodeMirror.extendMode(modes[i], {blockCommentStart: "/*",
|
5
|
+
blockCommentEnd: "*/",
|
6
|
+
blockCommentContinue: " * "});
|
7
|
+
|
8
|
+
function continueComment(cm) {
|
9
|
+
var pos = cm.getCursor(), token = cm.getTokenAt(pos);
|
10
|
+
var mode = CodeMirror.innerMode(cm.getMode(), token.state).mode;
|
11
|
+
var space;
|
12
|
+
|
13
|
+
if (token.type == "comment" && mode.blockCommentStart && mode.blockCommentContinue) {
|
14
|
+
var end = token.string.indexOf(mode.blockCommentEnd);
|
15
|
+
var full = cm.getRange(CodeMirror.Pos(pos.line, 0), CodeMirror.Pos(pos.line, token.end)), found;
|
16
|
+
if (end != -1 && end == token.string.length - mode.blockCommentEnd.length) {
|
17
|
+
// Comment ended, don't continue it
|
18
|
+
} else if (token.string.indexOf(mode.blockCommentStart) == 0) {
|
19
|
+
space = full.slice(0, token.start);
|
20
|
+
if (!/^\s*$/.test(space)) {
|
21
|
+
space = "";
|
22
|
+
for (var i = 0; i < token.start; ++i) space += " ";
|
23
|
+
}
|
24
|
+
} else if ((found = full.indexOf(mode.blockCommentContinue)) != -1 &&
|
25
|
+
found + mode.blockCommentContinue.length > token.start &&
|
26
|
+
/^\s*$/.test(full.slice(0, found))) {
|
27
|
+
space = full.slice(0, found);
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
if (space != null)
|
32
|
+
cm.replaceSelection("\n" + space + mode.blockCommentContinue, "end");
|
33
|
+
else
|
34
|
+
return CodeMirror.Pass;
|
35
|
+
}
|
36
|
+
|
37
|
+
CodeMirror.defineOption("continueComments", null, function(cm, val, prev) {
|
38
|
+
if (prev && prev != CodeMirror.Init)
|
39
|
+
cm.removeKeyMap("continueComment");
|
40
|
+
var map = {name: "continueComment"};
|
41
|
+
map[typeof val == "string" ? val : "Enter"] = continueComment;
|
42
|
+
cm.addKeyMap(map);
|
43
|
+
});
|
44
|
+
})();
|
@@ -0,0 +1,30 @@
|
|
1
|
+
(function() {
|
2
|
+
"use strict";
|
3
|
+
|
4
|
+
CodeMirror.defineOption("fullScreen", false, function(cm, val, old) {
|
5
|
+
if (old == CodeMirror.Init) old = false;
|
6
|
+
if (!old == !val) return;
|
7
|
+
if (val) setFullscreen(cm);
|
8
|
+
else setNormal(cm);
|
9
|
+
});
|
10
|
+
|
11
|
+
function setFullscreen(cm) {
|
12
|
+
var wrap = cm.getWrapperElement();
|
13
|
+
cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset,
|
14
|
+
width: wrap.style.width, height: wrap.style.height};
|
15
|
+
wrap.style.width = wrap.style.height = "";
|
16
|
+
wrap.className += " CodeMirror-fullscreen";
|
17
|
+
document.documentElement.style.overflow = "hidden";
|
18
|
+
cm.refresh();
|
19
|
+
}
|
20
|
+
|
21
|
+
function setNormal(cm) {
|
22
|
+
var wrap = cm.getWrapperElement();
|
23
|
+
wrap.className = wrap.className.replace(/\s*CodeMirror-fullscreen\b/, "");
|
24
|
+
document.documentElement.style.overflow = "";
|
25
|
+
var info = cm.state.fullScreenRestore;
|
26
|
+
wrap.style.width = info.width; wrap.style.height = info.height;
|
27
|
+
window.scrollTo(info.scrollLeft, info.scrollTop);
|
28
|
+
cm.refresh();
|
29
|
+
}
|
30
|
+
})();
|
@@ -10,7 +10,7 @@
|
|
10
10
|
var mode = CodeMirror.innerMode(cm.getMode(), token.state).mode;
|
11
11
|
var space;
|
12
12
|
|
13
|
-
if (token.type == "comment" && mode.blockCommentStart) {
|
13
|
+
if (token.type == "comment" && mode.blockCommentStart && mode.blockCommentContinue) {
|
14
14
|
var end = token.string.indexOf(mode.blockCommentEnd);
|
15
15
|
var full = cm.getRange(CodeMirror.Pos(pos.line, 0), CodeMirror.Pos(pos.line, token.end)), found;
|
16
16
|
if (end != -1 && end == token.string.length - mode.blockCommentEnd.length) {
|
@@ -4,7 +4,7 @@ CodeMirror.registerHelper("fold", "brace", function(cm, start) {
|
|
4
4
|
|
5
5
|
function findOpening(openCh) {
|
6
6
|
for (var at = start.ch, pass = 0;;) {
|
7
|
-
var found = lineText.lastIndexOf(openCh, at - 1);
|
7
|
+
var found = at <= 0 ? -1 : lineText.lastIndexOf(openCh, at - 1);
|
8
8
|
if (found == -1) {
|
9
9
|
if (pass == 1) break;
|
10
10
|
pass = 1;
|
@@ -12,7 +12,7 @@ CodeMirror.registerHelper("fold", "brace", function(cm, start) {
|
|
12
12
|
continue;
|
13
13
|
}
|
14
14
|
if (pass == 1 && found < start.ch) break;
|
15
|
-
tokenType = cm.
|
15
|
+
tokenType = cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1));
|
16
16
|
if (!/^(comment|string)/.test(tokenType)) return found + 1;
|
17
17
|
at = found - 1;
|
18
18
|
}
|
@@ -34,7 +34,7 @@ CodeMirror.registerHelper("fold", "brace", function(cm, start) {
|
|
34
34
|
if (nextClose < 0) nextClose = text.length;
|
35
35
|
pos = Math.min(nextOpen, nextClose);
|
36
36
|
if (pos == text.length) break;
|
37
|
-
if (cm.
|
37
|
+
if (cm.getTokenTypeAt(CodeMirror.Pos(i, pos + 1)) == tokenType) {
|
38
38
|
if (pos == nextOpen) ++count;
|
39
39
|
else if (!--count) { end = i; endCh = pos; break outer; }
|
40
40
|
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
CodeMirror.registerHelper("fold", "comment", function(cm, start) {
|
2
|
+
var mode = cm.getModeAt(start), startToken = mode.blockCommentStart, endToken = mode.blockCommentEnd;
|
3
|
+
if (!startToken || !endToken) return;
|
4
|
+
var line = start.line, lineText = cm.getLine(line);
|
5
|
+
|
6
|
+
var startCh;
|
7
|
+
for (var at = start.ch, pass = 0;;) {
|
8
|
+
var found = at <= 0 ? -1 : lineText.lastIndexOf(startToken, at - 1);
|
9
|
+
if (found == -1) {
|
10
|
+
if (pass == 1) return;
|
11
|
+
pass = 1;
|
12
|
+
at = lineText.length;
|
13
|
+
continue;
|
14
|
+
}
|
15
|
+
if (pass == 1 && found < start.ch) return;
|
16
|
+
if (/comment/.test(cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1)))) {
|
17
|
+
startCh = found + startToken.length;
|
18
|
+
break;
|
19
|
+
}
|
20
|
+
at = found - 1;
|
21
|
+
}
|
22
|
+
|
23
|
+
var depth = 1, lastLine = cm.lastLine(), end, endCh;
|
24
|
+
outer: for (var i = line; i <= lastLine; ++i) {
|
25
|
+
var text = cm.getLine(i), pos = i == line ? startCh : 0;
|
26
|
+
for (;;) {
|
27
|
+
var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos);
|
28
|
+
if (nextOpen < 0) nextOpen = text.length;
|
29
|
+
if (nextClose < 0) nextClose = text.length;
|
30
|
+
pos = Math.min(nextOpen, nextClose);
|
31
|
+
if (pos == text.length) break;
|
32
|
+
if (pos == nextOpen) ++depth;
|
33
|
+
else if (!--depth) { end = i; endCh = pos; break outer; }
|
34
|
+
++pos;
|
35
|
+
}
|
36
|
+
}
|
37
|
+
if (end == null || line == end && endCh == startCh) return;
|
38
|
+
return {from: CodeMirror.Pos(line, startCh),
|
39
|
+
to: CodeMirror.Pos(end, endCh)};
|
40
|
+
});
|
@@ -67,15 +67,11 @@
|
|
67
67
|
finished = true;
|
68
68
|
completion.close();
|
69
69
|
completion.cm.off("cursorActivity", activity);
|
70
|
-
CodeMirror.signal(data, "close");
|
71
|
-
}
|
72
|
-
function isDone() {
|
73
|
-
if (finished) return true;
|
74
|
-
if (!completion.widget) { done(); return true; }
|
70
|
+
if (data) CodeMirror.signal(data, "close");
|
75
71
|
}
|
76
72
|
|
77
73
|
function update() {
|
78
|
-
if (
|
74
|
+
if (finished) return;
|
79
75
|
CodeMirror.signal(data, "update");
|
80
76
|
if (completion.options.async)
|
81
77
|
completion.getHints(completion.cm, finishUpdate, completion.options);
|
@@ -84,9 +80,8 @@
|
|
84
80
|
}
|
85
81
|
function finishUpdate(data_) {
|
86
82
|
data = data_;
|
87
|
-
if (
|
83
|
+
if (finished) return;
|
88
84
|
if (!data || !data.list.length) return done();
|
89
|
-
completion.widget.close();
|
90
85
|
completion.widget = new Widget(completion, data);
|
91
86
|
}
|
92
87
|
|
@@ -95,10 +90,12 @@
|
|
95
90
|
var pos = completion.cm.getCursor(), line = completion.cm.getLine(pos.line);
|
96
91
|
if (pos.line != startPos.line || line.length - pos.ch != startLen - startPos.ch ||
|
97
92
|
pos.ch < startPos.ch || completion.cm.somethingSelected() ||
|
98
|
-
(pos.ch && closeOn.test(line.charAt(pos.ch - 1))))
|
93
|
+
(pos.ch && closeOn.test(line.charAt(pos.ch - 1)))) {
|
99
94
|
completion.close();
|
100
|
-
else
|
95
|
+
} else {
|
101
96
|
debounce = setTimeout(update, 170);
|
97
|
+
if (completion.widget) completion.widget.close();
|
98
|
+
}
|
102
99
|
}
|
103
100
|
this.cm.on("cursorActivity", activity);
|
104
101
|
this.onClose = done;
|