codemirror-rails 5.5 → 5.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/codemirror/rails/version.rb +2 -2
- data/vendor/assets/javascripts/codemirror.js +54 -20
- data/vendor/assets/javascripts/codemirror/addons/display/autorefresh.js +47 -0
- data/vendor/assets/javascripts/codemirror/addons/edit/closetag.js +6 -3
- data/vendor/assets/javascripts/codemirror/addons/hint/anyword-hint.js +1 -1
- data/vendor/assets/javascripts/codemirror/addons/lint/html-lint.js +46 -0
- data/vendor/assets/javascripts/codemirror/addons/lint/lint.js +8 -2
- data/vendor/assets/javascripts/codemirror/addons/merge/merge.js +2 -2
- data/vendor/assets/javascripts/codemirror/addons/search/search.js +11 -0
- data/vendor/assets/javascripts/codemirror/addons/tern/tern.js +6 -5
- data/vendor/assets/javascripts/codemirror/modes/css.js +26 -10
- data/vendor/assets/javascripts/codemirror/modes/cypher.js +2 -2
- data/vendor/assets/javascripts/codemirror/modes/dockerfile.js +4 -1
- data/vendor/assets/javascripts/codemirror/modes/go.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/javascript.js +1 -6
- data/vendor/assets/javascripts/codemirror/modes/php.js +6 -5
- data/vendor/assets/javascripts/codemirror/modes/rust.js +39 -432
- data/vendor/assets/javascripts/codemirror/modes/stylus.js +10 -9
- data/vendor/assets/stylesheets/codemirror.css +12 -10
- data/vendor/assets/stylesheets/codemirror/themes/3024-day.css +20 -20
- data/vendor/assets/stylesheets/codemirror/themes/3024-night.css +20 -20
- data/vendor/assets/stylesheets/codemirror/themes/abcdef.css +32 -0
- data/vendor/assets/stylesheets/codemirror/themes/ambiance.css +7 -9
- data/vendor/assets/stylesheets/codemirror/themes/base16-dark.css +24 -24
- data/vendor/assets/stylesheets/codemirror/themes/base16-light.css +24 -24
- data/vendor/assets/stylesheets/codemirror/themes/blackboard.css +5 -5
- data/vendor/assets/stylesheets/codemirror/themes/cobalt.css +4 -4
- data/vendor/assets/stylesheets/codemirror/themes/colorforth.css +3 -3
- data/vendor/assets/stylesheets/codemirror/themes/dracula.css +25 -71
- data/vendor/assets/stylesheets/codemirror/themes/eclipse.css +21 -21
- data/vendor/assets/stylesheets/codemirror/themes/elegant.css +12 -12
- data/vendor/assets/stylesheets/codemirror/themes/erlang-dark.css +4 -4
- data/vendor/assets/stylesheets/codemirror/themes/icecoder.css +29 -29
- data/vendor/assets/stylesheets/codemirror/themes/lesser-dark.css +14 -14
- data/vendor/assets/stylesheets/codemirror/themes/liquibyte.css +5 -5
- data/vendor/assets/stylesheets/codemirror/themes/material.css +28 -80
- data/vendor/assets/stylesheets/codemirror/themes/mbo.css +23 -23
- data/vendor/assets/stylesheets/codemirror/themes/mdn-like.css +6 -6
- data/vendor/assets/stylesheets/codemirror/themes/midnight.css +22 -24
- data/vendor/assets/stylesheets/codemirror/themes/monokai.css +21 -21
- data/vendor/assets/stylesheets/codemirror/themes/neat.css +3 -3
- data/vendor/assets/stylesheets/codemirror/themes/neo.css +7 -7
- data/vendor/assets/stylesheets/codemirror/themes/night.css +4 -4
- data/vendor/assets/stylesheets/codemirror/themes/paraiso-dark.css +24 -24
- data/vendor/assets/stylesheets/codemirror/themes/paraiso-light.css +24 -24
- data/vendor/assets/stylesheets/codemirror/themes/pastel-on-dark.css +3 -3
- data/vendor/assets/stylesheets/codemirror/themes/rubyblue.css +3 -3
- data/vendor/assets/stylesheets/codemirror/themes/seti.css +25 -69
- data/vendor/assets/stylesheets/codemirror/themes/solarized.css +7 -9
- data/vendor/assets/stylesheets/codemirror/themes/the-matrix.css +21 -21
- data/vendor/assets/stylesheets/codemirror/themes/tomorrow-night-bright.css +24 -24
- data/vendor/assets/stylesheets/codemirror/themes/tomorrow-night-eighties.css +24 -24
- data/vendor/assets/stylesheets/codemirror/themes/ttcn.css +45 -46
- data/vendor/assets/stylesheets/codemirror/themes/twilight.css +7 -7
- data/vendor/assets/stylesheets/codemirror/themes/vibrant-ink.css +9 -9
- data/vendor/assets/stylesheets/codemirror/themes/xq-dark.css +20 -20
- data/vendor/assets/stylesheets/codemirror/themes/xq-light.css +18 -18
- data/vendor/assets/stylesheets/codemirror/themes/yeti.css +24 -66
- data/vendor/assets/stylesheets/codemirror/themes/zenburn.css +3 -3
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95aed5d670b225a60a9b6fe42757c35fc4f2e57e
|
4
|
+
data.tar.gz: d016c556fb97792a9a7e5006c8b9e4e829cc8605
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3fb0a350ed05a56863602cd6b7a140c04357358d428f19b0579b101b12d335cbc76e1672768bdce2750a66f92bafb79d74720828361f1ebfb9cced0c72f77419
|
7
|
+
data.tar.gz: 5e7b240ff00353319fdb8e790ee58036ad32ddbd6f91b2e5de6b8cfb156dfbd053589fbd0da523a4d2037422029515701ffdb8d6a78754e01986b085f1926ebc
|
@@ -87,6 +87,7 @@
|
|
87
87
|
focused: false,
|
88
88
|
suppressEdits: false, // used to disable editing during key handlers when in readOnly mode
|
89
89
|
pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll
|
90
|
+
selectingText: false,
|
90
91
|
draggingText: false,
|
91
92
|
highlight: new Delayed(), // stores highlight worker timeout
|
92
93
|
keySeq: null, // Unfinished key sequence
|
@@ -1135,7 +1136,8 @@
|
|
1135
1136
|
var pasted = e.clipboardData && e.clipboardData.getData("text/plain");
|
1136
1137
|
if (pasted) {
|
1137
1138
|
e.preventDefault();
|
1138
|
-
|
1139
|
+
if (!isReadOnly(cm) && !cm.options.disableInput)
|
1140
|
+
runInOp(cm, function() { applyTextInput(cm, pasted, 0, null, "paste"); });
|
1139
1141
|
return true;
|
1140
1142
|
}
|
1141
1143
|
}
|
@@ -2270,7 +2272,7 @@
|
|
2270
2272
|
var range = doc.sel.ranges[i];
|
2271
2273
|
var collapsed = range.empty();
|
2272
2274
|
if (collapsed || cm.options.showCursorWhenSelecting)
|
2273
|
-
drawSelectionCursor(cm, range, curFragment);
|
2275
|
+
drawSelectionCursor(cm, range.head, curFragment);
|
2274
2276
|
if (!collapsed)
|
2275
2277
|
drawSelectionRange(cm, range, selFragment);
|
2276
2278
|
}
|
@@ -2278,8 +2280,8 @@
|
|
2278
2280
|
}
|
2279
2281
|
|
2280
2282
|
// Draws a cursor for the given range
|
2281
|
-
function drawSelectionCursor(cm,
|
2282
|
-
var pos = cursorCoords(cm,
|
2283
|
+
function drawSelectionCursor(cm, head, output) {
|
2284
|
+
var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine);
|
2283
2285
|
|
2284
2286
|
var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor"));
|
2285
2287
|
cursor.style.left = pos.left + "px";
|
@@ -2403,8 +2405,8 @@
|
|
2403
2405
|
|
2404
2406
|
doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) {
|
2405
2407
|
if (doc.frontier >= cm.display.viewFrom) { // Visible
|
2406
|
-
var oldStyles = line.styles;
|
2407
|
-
var highlighted = highlightLine(cm, line, state, true);
|
2408
|
+
var oldStyles = line.styles, tooLong = line.text.length > cm.options.maxHighlightLength;
|
2409
|
+
var highlighted = highlightLine(cm, line, tooLong ? copyState(doc.mode, state) : state, true);
|
2408
2410
|
line.styles = highlighted.styles;
|
2409
2411
|
var oldCls = line.styleClasses, newCls = highlighted.classes;
|
2410
2412
|
if (newCls) line.styleClasses = newCls;
|
@@ -2413,9 +2415,10 @@
|
|
2413
2415
|
oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);
|
2414
2416
|
for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i];
|
2415
2417
|
if (ischange) changedLines.push(doc.frontier);
|
2416
|
-
line.stateAfter = copyState(doc.mode, state);
|
2418
|
+
line.stateAfter = tooLong ? state : copyState(doc.mode, state);
|
2417
2419
|
} else {
|
2418
|
-
|
2420
|
+
if (line.text.length <= cm.options.maxHighlightLength)
|
2421
|
+
processLine(cm, line.text, state);
|
2419
2422
|
line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null;
|
2420
2423
|
}
|
2421
2424
|
++doc.frontier;
|
@@ -2978,12 +2981,12 @@
|
|
2978
2981
|
var callbacks = group.delayedCallbacks, i = 0;
|
2979
2982
|
do {
|
2980
2983
|
for (; i < callbacks.length; i++)
|
2981
|
-
callbacks[i]();
|
2984
|
+
callbacks[i].call(null);
|
2982
2985
|
for (var j = 0; j < group.ops.length; j++) {
|
2983
2986
|
var op = group.ops[j];
|
2984
2987
|
if (op.cursorActivityHandlers)
|
2985
2988
|
while (op.cursorActivityCalled < op.cursorActivityHandlers.length)
|
2986
|
-
op.cursorActivityHandlers[op.cursorActivityCalled++](op.cm);
|
2989
|
+
op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm);
|
2987
2990
|
}
|
2988
2991
|
} while (i < callbacks.length);
|
2989
2992
|
}
|
@@ -3443,9 +3446,11 @@
|
|
3443
3446
|
on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });
|
3444
3447
|
|
3445
3448
|
d.dragFunctions = {
|
3446
|
-
|
3449
|
+
enter: function(e) {if (!signalDOMEvent(cm, e)) e_stop(e);},
|
3450
|
+
over: function(e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},
|
3447
3451
|
start: function(e){onDragStart(cm, e);},
|
3448
|
-
drop: operation(cm, onDrop)
|
3452
|
+
drop: operation(cm, onDrop),
|
3453
|
+
leave: function() {clearDragCursor(cm);}
|
3449
3454
|
};
|
3450
3455
|
|
3451
3456
|
var inp = d.input.getField();
|
@@ -3462,8 +3467,9 @@
|
|
3462
3467
|
var funcs = cm.display.dragFunctions;
|
3463
3468
|
var toggle = value ? on : off;
|
3464
3469
|
toggle(cm.display.scroller, "dragstart", funcs.start);
|
3465
|
-
toggle(cm.display.scroller, "dragenter", funcs.
|
3466
|
-
toggle(cm.display.scroller, "dragover", funcs.
|
3470
|
+
toggle(cm.display.scroller, "dragenter", funcs.enter);
|
3471
|
+
toggle(cm.display.scroller, "dragover", funcs.over);
|
3472
|
+
toggle(cm.display.scroller, "dragleave", funcs.leave);
|
3467
3473
|
toggle(cm.display.scroller, "drop", funcs.drop);
|
3468
3474
|
}
|
3469
3475
|
}
|
@@ -3536,7 +3542,10 @@
|
|
3536
3542
|
|
3537
3543
|
switch (e_button(e)) {
|
3538
3544
|
case 1:
|
3539
|
-
|
3545
|
+
// #3261: make sure, that we're not starting a second selection
|
3546
|
+
if (cm.state.selectingText)
|
3547
|
+
cm.state.selectingText(e);
|
3548
|
+
else if (start)
|
3540
3549
|
leftButtonDown(cm, e, start);
|
3541
3550
|
else if (e_target(e) == display.scroller)
|
3542
3551
|
e_preventDefault(e);
|
@@ -3656,7 +3665,8 @@
|
|
3656
3665
|
setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex),
|
3657
3666
|
{scroll: false, origin: "*mouse"});
|
3658
3667
|
} else if (ranges.length > 1 && ranges[ourIndex].empty() && type == "single" && !e.shiftKey) {
|
3659
|
-
setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0)
|
3668
|
+
setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),
|
3669
|
+
{scroll: false, origin: "*mouse"});
|
3660
3670
|
startSel = doc.sel;
|
3661
3671
|
} else {
|
3662
3672
|
replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);
|
@@ -3734,6 +3744,7 @@
|
|
3734
3744
|
}
|
3735
3745
|
|
3736
3746
|
function done(e) {
|
3747
|
+
cm.state.selectingText = false;
|
3737
3748
|
counter = Infinity;
|
3738
3749
|
e_preventDefault(e);
|
3739
3750
|
display.input.focus();
|
@@ -3747,6 +3758,7 @@
|
|
3747
3758
|
else extend(e);
|
3748
3759
|
});
|
3749
3760
|
var up = operation(cm, done);
|
3761
|
+
cm.state.selectingText = up;
|
3750
3762
|
on(document, "mousemove", move);
|
3751
3763
|
on(document, "mouseup", up);
|
3752
3764
|
}
|
@@ -3786,6 +3798,7 @@
|
|
3786
3798
|
|
3787
3799
|
function onDrop(e) {
|
3788
3800
|
var cm = this;
|
3801
|
+
clearDragCursor(cm);
|
3789
3802
|
if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))
|
3790
3803
|
return;
|
3791
3804
|
e_preventDefault(e);
|
@@ -3858,6 +3871,25 @@
|
|
3858
3871
|
}
|
3859
3872
|
}
|
3860
3873
|
|
3874
|
+
function onDragOver(cm, e) {
|
3875
|
+
var pos = posFromMouse(cm, e);
|
3876
|
+
if (!pos) return;
|
3877
|
+
var frag = document.createDocumentFragment();
|
3878
|
+
drawSelectionCursor(cm, pos, frag);
|
3879
|
+
if (!cm.display.dragCursor) {
|
3880
|
+
cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors");
|
3881
|
+
cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);
|
3882
|
+
}
|
3883
|
+
removeChildrenAndAdd(cm.display.dragCursor, frag);
|
3884
|
+
}
|
3885
|
+
|
3886
|
+
function clearDragCursor(cm) {
|
3887
|
+
if (cm.display.dragCursor) {
|
3888
|
+
cm.display.lineSpace.removeChild(cm.display.dragCursor);
|
3889
|
+
cm.display.dragCursor = null;
|
3890
|
+
}
|
3891
|
+
}
|
3892
|
+
|
3861
3893
|
// SCROLL EVENTS
|
3862
3894
|
|
3863
3895
|
// Sync the scrollable area and scrollbars, ensure the viewport
|
@@ -5064,7 +5096,7 @@
|
|
5064
5096
|
|
5065
5097
|
execCommand: function(cmd) {
|
5066
5098
|
if (commands.hasOwnProperty(cmd))
|
5067
|
-
return commands[cmd](this);
|
5099
|
+
return commands[cmd].call(null, this);
|
5068
5100
|
},
|
5069
5101
|
|
5070
5102
|
triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),
|
@@ -6783,7 +6815,9 @@
|
|
6783
6815
|
|
6784
6816
|
function getLineStyles(cm, line, updateFrontier) {
|
6785
6817
|
if (!line.styles || line.styles[0] != cm.state.modeGen) {
|
6786
|
-
var
|
6818
|
+
var state = getStateBefore(cm, lineNo(line));
|
6819
|
+
var result = highlightLine(cm, line, line.text.length > cm.options.maxHighlightLength ? copyState(cm.doc.mode, state) : state);
|
6820
|
+
line.stateAfter = state;
|
6787
6821
|
line.styles = result.styles;
|
6788
6822
|
if (result.classes) line.styleClasses = result.classes;
|
6789
6823
|
else if (line.styleClasses) line.styleClasses = null;
|
@@ -6800,7 +6834,7 @@
|
|
6800
6834
|
var stream = new StringStream(text, cm.options.tabSize);
|
6801
6835
|
stream.start = stream.pos = startAt || 0;
|
6802
6836
|
if (text == "") callBlankLine(mode, state);
|
6803
|
-
while (!stream.eol()
|
6837
|
+
while (!stream.eol()) {
|
6804
6838
|
readToken(mode, stream, state);
|
6805
6839
|
stream.start = stream.pos;
|
6806
6840
|
}
|
@@ -8782,7 +8816,7 @@
|
|
8782
8816
|
|
8783
8817
|
// THE END
|
8784
8818
|
|
8785
|
-
CodeMirror.version = "5.
|
8819
|
+
CodeMirror.version = "5.6.0";
|
8786
8820
|
|
8787
8821
|
return CodeMirror;
|
8788
8822
|
});
|
@@ -0,0 +1,47 @@
|
|
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") // CommonJS
|
6
|
+
mod(require("../../lib/codemirror"))
|
7
|
+
else if (typeof define == "function" && define.amd) // AMD
|
8
|
+
define(["../../lib/codemirror"], mod)
|
9
|
+
else // Plain browser env
|
10
|
+
mod(CodeMirror)
|
11
|
+
})(function(CodeMirror) {
|
12
|
+
"use strict"
|
13
|
+
|
14
|
+
CodeMirror.defineOption("autoRefresh", false, function(cm, val) {
|
15
|
+
if (cm.state.autoRefresh) {
|
16
|
+
stopListening(cm, cm.state.autoRefresh)
|
17
|
+
cm.state.autoRefresh = null
|
18
|
+
}
|
19
|
+
if (val && cm.display.wrapper.offsetHeight == 0)
|
20
|
+
startListening(cm, cm.state.autoRefresh = {delay: val.delay || 250})
|
21
|
+
})
|
22
|
+
|
23
|
+
function startListening(cm, state) {
|
24
|
+
function check() {
|
25
|
+
if (cm.display.wrapper.offsetHeight) {
|
26
|
+
stopListening(cm, state)
|
27
|
+
if (cm.display.lastWrapHeight != cm.display.wrapper.clientHeight)
|
28
|
+
cm.refresh()
|
29
|
+
} else {
|
30
|
+
state.timeout = setTimeout(check, state.delay)
|
31
|
+
}
|
32
|
+
}
|
33
|
+
state.timeout = setTimeout(check, state.delay)
|
34
|
+
state.hurry = function() {
|
35
|
+
clearTimeout(state.timeout)
|
36
|
+
state.timeout = setTimeout(check, 50)
|
37
|
+
}
|
38
|
+
CodeMirror.on(window, "mouseup", state.hurry)
|
39
|
+
CodeMirror.on(window, "keyup", state.hurry)
|
40
|
+
}
|
41
|
+
|
42
|
+
function stopListening(_cm, state) {
|
43
|
+
clearTimeout(state.timeout)
|
44
|
+
CodeMirror.off(window, "mouseup", state.hurry)
|
45
|
+
CodeMirror.off(window, "keyup", state.hurry)
|
46
|
+
}
|
47
|
+
});
|
@@ -108,19 +108,22 @@
|
|
108
108
|
// when completing in JS/CSS snippet in htmlmixed mode. Does not
|
109
109
|
// work for other XML embedded languages (there is no general
|
110
110
|
// way to go from a mixed mode to its current XML state).
|
111
|
+
var replacement;
|
111
112
|
if (inner.mode.name != "xml") {
|
112
113
|
if (cm.getMode().name == "htmlmixed" && inner.mode.name == "javascript")
|
113
|
-
|
114
|
+
replacement = head + "script";
|
114
115
|
else if (cm.getMode().name == "htmlmixed" && inner.mode.name == "css")
|
115
|
-
|
116
|
+
replacement = head + "style";
|
116
117
|
else
|
117
118
|
return CodeMirror.Pass;
|
118
119
|
} else {
|
119
120
|
if (!state.context || !state.context.tagName ||
|
120
121
|
closingTagExists(cm, state.context.tagName, pos, state))
|
121
122
|
return CodeMirror.Pass;
|
122
|
-
|
123
|
+
replacement = head + state.context.tagName;
|
123
124
|
}
|
125
|
+
if (cm.getLine(pos.line).charAt(tok.end) != ">") replacement += ">";
|
126
|
+
replacements[i] = replacement;
|
124
127
|
}
|
125
128
|
cm.replaceSelections(replacements);
|
126
129
|
ranges = cm.listSelections();
|
@@ -21,7 +21,7 @@
|
|
21
21
|
while (start && word.test(curLine.charAt(start - 1))) --start;
|
22
22
|
var curWord = start != end && curLine.slice(start, end);
|
23
23
|
|
24
|
-
var list = [], seen = {};
|
24
|
+
var list = options && options.list || [], seen = {};
|
25
25
|
var re = new RegExp(word.source, "g");
|
26
26
|
for (var dir = -1; dir <= 1; dir += 2) {
|
27
27
|
var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir;
|
@@ -0,0 +1,46 @@
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
3
|
+
|
4
|
+
// Depends on htmlhint.js from http://htmlhint.com/js/htmlhint.js
|
5
|
+
|
6
|
+
// declare global: HTMLHint
|
7
|
+
|
8
|
+
(function(mod) {
|
9
|
+
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
10
|
+
mod(require("../../lib/codemirror"), require("htmlhint"));
|
11
|
+
else if (typeof define == "function" && define.amd) // AMD
|
12
|
+
define(["../../lib/codemirror", "htmlhint"], mod);
|
13
|
+
else // Plain browser env
|
14
|
+
mod(CodeMirror);
|
15
|
+
})(function(CodeMirror) {
|
16
|
+
"use strict";
|
17
|
+
|
18
|
+
var defaultRules = {
|
19
|
+
"tagname-lowercase": true,
|
20
|
+
"attr-lowercase": true,
|
21
|
+
"attr-value-double-quotes": true,
|
22
|
+
"doctype-first": false,
|
23
|
+
"tag-pair": true,
|
24
|
+
"spec-char-escape": true,
|
25
|
+
"id-unique": true,
|
26
|
+
"src-not-empty": true,
|
27
|
+
"attr-no-duplication": true
|
28
|
+
};
|
29
|
+
|
30
|
+
CodeMirror.registerHelper("lint", "html", function(text, options) {
|
31
|
+
var found = [];
|
32
|
+
if (!window.HTMLHint) return found;
|
33
|
+
var messages = HTMLHint.verify(text, options && options.rules || defaultRules);
|
34
|
+
for (var i = 0; i < messages.length; i++) {
|
35
|
+
var message = messages[i];
|
36
|
+
var startLine = message.line - 1, endLine = message.line - 1, startCol = message.col - 1, endCol = message.col;
|
37
|
+
found.push({
|
38
|
+
from: CodeMirror.Pos(startLine, startCol),
|
39
|
+
to: CodeMirror.Pos(endLine, endCol),
|
40
|
+
message: message.message,
|
41
|
+
severity : message.type
|
42
|
+
});
|
43
|
+
}
|
44
|
+
return found;
|
45
|
+
});
|
46
|
+
});
|
@@ -187,7 +187,8 @@
|
|
187
187
|
CodeMirror.defineOption("lint", false, function(cm, val, old) {
|
188
188
|
if (old && old != CodeMirror.Init) {
|
189
189
|
clearMarks(cm);
|
190
|
-
cm.
|
190
|
+
if (cm.state.lint.options.lintOnChange !== false)
|
191
|
+
cm.off("change", onChange);
|
191
192
|
CodeMirror.off(cm.getWrapperElement(), "mouseover", cm.state.lint.onMouseOver);
|
192
193
|
clearTimeout(cm.state.lint.timeout);
|
193
194
|
delete cm.state.lint;
|
@@ -197,11 +198,16 @@
|
|
197
198
|
var gutters = cm.getOption("gutters"), hasLintGutter = false;
|
198
199
|
for (var i = 0; i < gutters.length; ++i) if (gutters[i] == GUTTER_ID) hasLintGutter = true;
|
199
200
|
var state = cm.state.lint = new LintState(cm, parseOptions(cm, val), hasLintGutter);
|
200
|
-
|
201
|
+
if (state.options.lintOnChange !== false)
|
202
|
+
cm.on("change", onChange);
|
201
203
|
if (state.options.tooltips != false)
|
202
204
|
CodeMirror.on(cm.getWrapperElement(), "mouseover", state.onMouseOver);
|
203
205
|
|
204
206
|
startLinting(cm);
|
205
207
|
}
|
206
208
|
});
|
209
|
+
|
210
|
+
CodeMirror.defineExtension("performLint", function() {
|
211
|
+
if (this.state.lint) startLinting(this);
|
212
|
+
});
|
207
213
|
});
|
@@ -9,8 +9,8 @@
|
|
9
9
|
else if (typeof define == "function" && define.amd) // AMD
|
10
10
|
define(["../../lib/codemirror", "diff_match_patch"], mod);
|
11
11
|
else // Plain browser env
|
12
|
-
mod(CodeMirror
|
13
|
-
})(function(CodeMirror
|
12
|
+
mod(CodeMirror);
|
13
|
+
})(function(CodeMirror) {
|
14
14
|
"use strict";
|
15
15
|
var Pos = CodeMirror.Pos;
|
16
16
|
var svgNS = "http://www.w3.org/2000/svg";
|
@@ -76,11 +76,21 @@
|
|
76
76
|
else if (confirm(shortText)) fs[0]();
|
77
77
|
}
|
78
78
|
|
79
|
+
function parseString(string) {
|
80
|
+
return string.replace(/\\(.)/g, function(_, ch) {
|
81
|
+
if (ch == "n") return "\n"
|
82
|
+
if (ch == "r") return "\r"
|
83
|
+
return ch
|
84
|
+
})
|
85
|
+
}
|
86
|
+
|
79
87
|
function parseQuery(query) {
|
80
88
|
var isRE = query.match(/^\/(.*)\/([a-z]*)$/);
|
81
89
|
if (isRE) {
|
82
90
|
try { query = new RegExp(isRE[1], isRE[2].indexOf("i") == -1 ? "" : "i"); }
|
83
91
|
catch(e) {} // Not a regular expression after all, do a string search
|
92
|
+
} else {
|
93
|
+
query = parseString(query)
|
84
94
|
}
|
85
95
|
if (typeof query == "string" ? query == "" : query.test(""))
|
86
96
|
query = /x^/;
|
@@ -157,6 +167,7 @@
|
|
157
167
|
if (!query) return;
|
158
168
|
query = parseQuery(query);
|
159
169
|
dialog(cm, replacementQueryDialog, "Replace with:", "", function(text) {
|
170
|
+
text = parseString(text)
|
160
171
|
if (all) {
|
161
172
|
cm.operation(function() {
|
162
173
|
for (var cursor = getSearchCursor(cm, query); cursor.findNext();) {
|
@@ -266,7 +266,7 @@
|
|
266
266
|
child.target = "_blank";
|
267
267
|
}
|
268
268
|
}
|
269
|
-
tempTooltip(cm, tip);
|
269
|
+
tempTooltip(cm, tip, ts);
|
270
270
|
if (c) c();
|
271
271
|
}, pos);
|
272
272
|
}
|
@@ -466,11 +466,12 @@
|
|
466
466
|
ts.request(cm, {type: "refs"}, function(error, data) {
|
467
467
|
if (error) return showError(ts, cm, error);
|
468
468
|
var ranges = [], cur = 0;
|
469
|
+
var curPos = cm.getCursor();
|
469
470
|
for (var i = 0; i < data.refs.length; i++) {
|
470
471
|
var ref = data.refs[i];
|
471
472
|
if (ref.file == name) {
|
472
473
|
ranges.push({anchor: ref.start, head: ref.end});
|
473
|
-
if (cmpPos(
|
474
|
+
if (cmpPos(curPos, ref.start) >= 0 && cmpPos(curPos, ref.end) <= 0)
|
474
475
|
cur = ranges.length - 1;
|
475
476
|
}
|
476
477
|
}
|
@@ -592,7 +593,7 @@
|
|
592
593
|
|
593
594
|
// Tooltips
|
594
595
|
|
595
|
-
function tempTooltip(cm, content) {
|
596
|
+
function tempTooltip(cm, content, ts) {
|
596
597
|
if (cm.state.ternTooltip) remove(cm.state.ternTooltip);
|
597
598
|
var where = cm.cursorCoords();
|
598
599
|
var tip = cm.state.ternTooltip = makeTooltip(where.right + 1, where.bottom, content);
|
@@ -616,7 +617,7 @@
|
|
616
617
|
else mouseOnTip = false;
|
617
618
|
}
|
618
619
|
});
|
619
|
-
setTimeout(maybeClear, 1700);
|
620
|
+
setTimeout(maybeClear, ts.options.hintDelay ? ts.options.hintDelay : 1700);
|
620
621
|
cm.on("cursorActivity", clear);
|
621
622
|
cm.on('blur', clear);
|
622
623
|
cm.on('scroll', clear);
|
@@ -644,7 +645,7 @@
|
|
644
645
|
if (ts.options.showError)
|
645
646
|
ts.options.showError(cm, msg);
|
646
647
|
else
|
647
|
-
tempTooltip(cm, String(msg));
|
648
|
+
tempTooltip(cm, String(msg), ts);
|
648
649
|
}
|
649
650
|
|
650
651
|
function closeArgHints(ts) {
|