mirror of
https://github.com/yldio/copilot.git
synced 2024-12-27 04:10:05 +02:00
10092 lines
378 KiB
JavaScript
10092 lines
378 KiB
JavaScript
webpackJsonp([0], {
|
||
1036: function(e, t, n) {
|
||
!(function(t, n) {
|
||
e.exports = n();
|
||
})(0, function() {
|
||
'use strict';
|
||
function classTest(e) {
|
||
return new RegExp('(^|\\s)' + e + '(?:$|\\s)\\s*');
|
||
}
|
||
function removeChildren(e) {
|
||
for (
|
||
var t = e.childNodes.length;
|
||
t > 0;
|
||
--t
|
||
) e.removeChild(e.firstChild);
|
||
return e;
|
||
}
|
||
function removeChildrenAndAdd(e, t) {
|
||
return removeChildren(e).appendChild(t);
|
||
}
|
||
function elt(e, t, n, r) {
|
||
var i = document.createElement(e);
|
||
if (
|
||
(n && (i.className = n), r && (i.style.cssText = r), 'string' ==
|
||
typeof t)
|
||
)
|
||
i.appendChild(document.createTextNode(t));
|
||
else if (t) for (var o = 0; o < t.length; ++o) i.appendChild(t[o]);
|
||
return i;
|
||
}
|
||
function eltP(e, t, n, r) {
|
||
var i = elt(e, t, n, r);
|
||
return i.setAttribute('role', 'presentation'), i;
|
||
}
|
||
function contains(e, t) {
|
||
if ((3 == t.nodeType && (t = t.parentNode), e.contains))
|
||
return e.contains(t);
|
||
do {
|
||
if ((11 == t.nodeType && (t = t.host), t == e)) return !0;
|
||
} while ((t = t.parentNode));
|
||
}
|
||
function activeElt() {
|
||
var e;
|
||
try {
|
||
e = document.activeElement;
|
||
} catch (t) {
|
||
e = document.body || null;
|
||
}
|
||
for (
|
||
;
|
||
e && e.shadowRoot && e.shadowRoot.activeElement;
|
||
|
||
) e = e.shadowRoot.activeElement;
|
||
return e;
|
||
}
|
||
function addClass(e, t) {
|
||
var n = e.className;
|
||
classTest(t).test(n) || (e.className += (n ? ' ' : '') + t);
|
||
}
|
||
function joinClasses(e, t) {
|
||
for (
|
||
var n = e.split(' '), r = 0;
|
||
r < n.length;
|
||
r++
|
||
) n[r] && !classTest(n[r]).test(t) && (t += ' ' + n[r]);
|
||
return t;
|
||
}
|
||
function bind(e) {
|
||
var t = Array.prototype.slice.call(arguments, 1);
|
||
return function() {
|
||
return e.apply(null, t);
|
||
};
|
||
}
|
||
function copyObj(e, t, n) {
|
||
t || (t = {});
|
||
for (var r in e) !e.hasOwnProperty(r) || (!1 === n && t.hasOwnProperty(r)) || (t[r] = e[r]);
|
||
return t;
|
||
}
|
||
function countColumn(e, t, n, r, i) {
|
||
null == t && -1 == (t = e.search(/[^\s\u00a0]/)) && (t = e.length);
|
||
for (var o = r || 0, a = i || 0; ; ) {
|
||
var s = e.indexOf('\t', o);
|
||
if (s < 0 || s >= t) return a + (t - o);
|
||
(a += s - o), (a += n - a % n), (o = s + 1);
|
||
}
|
||
}
|
||
function indexOf(e, t) {
|
||
for (var n = 0; n < e.length; ++n) if (e[n] == t) return n;
|
||
return -1;
|
||
}
|
||
function findColumn(e, t, n) {
|
||
for (var r = 0, i = 0; ; ) {
|
||
var o = e.indexOf('\t', r);
|
||
-1 == o && (o = e.length);
|
||
var a = o - r;
|
||
if (o == e.length || i + a >= t) return r + Math.min(a, t - i);
|
||
if (((i += o - r), (i += n - i % n), (r = o + 1), i >= t)) return r;
|
||
}
|
||
}
|
||
function spaceStr(e) {
|
||
for (; E.length <= e; ) E.push(lst(E) + ' ');
|
||
return E[e];
|
||
}
|
||
function lst(e) {
|
||
return e[e.length - 1];
|
||
}
|
||
function map(e, t) {
|
||
for (var n = [], r = 0; r < e.length; r++) n[r] = t(e[r], r);
|
||
return n;
|
||
}
|
||
function insertSorted(e, t, n) {
|
||
for (var r = 0, i = n(t); r < e.length && n(e[r]) <= i; ) r++;
|
||
e.splice(r, 0, t);
|
||
}
|
||
function nothing() {}
|
||
function createObj(e, t) {
|
||
var n;
|
||
return Object.create
|
||
? (n = Object.create(e))
|
||
: ((nothing.prototype = e), (n = new nothing())), t && copyObj(t, n), n;
|
||
}
|
||
function isWordCharBasic(e) {
|
||
return (
|
||
/\w/.test(e) ||
|
||
(e > '' && (e.toUpperCase() != e.toLowerCase() || I.test(e)))
|
||
);
|
||
}
|
||
function isWordChar(e, t) {
|
||
return t
|
||
? !!(t.source.indexOf('\\w') > -1 && isWordCharBasic(e)) || t.test(e)
|
||
: isWordCharBasic(e);
|
||
}
|
||
function isEmpty(e) {
|
||
for (var t in e) if (e.hasOwnProperty(t) && e[t]) return !1;
|
||
return !0;
|
||
}
|
||
function isExtendingChar(e) {
|
||
return e.charCodeAt(0) >= 768 && F.test(e);
|
||
}
|
||
function skipExtendingChars(e, t, n) {
|
||
for (
|
||
;
|
||
(n < 0 ? t > 0 : t < e.length) && isExtendingChar(e.charAt(t));
|
||
|
||
) t += n;
|
||
return t;
|
||
}
|
||
function findFirst(e, t, n) {
|
||
for (;;) {
|
||
if (Math.abs(t - n) <= 1) return e(t) ? t : n;
|
||
var r = Math.floor((t + n) / 2);
|
||
e(r) ? (n = r) : (t = r);
|
||
}
|
||
}
|
||
function Display(e, t, r) {
|
||
var i = this;
|
||
(this.input = r), (i.scrollbarFiller = elt('div', null, 'CodeMirror-scrollbar-filler')), i.scrollbarFiller.setAttribute('cm-not-content', 'true'), (i.gutterFiller = elt('div', null, 'CodeMirror-gutter-filler')), i.gutterFiller.setAttribute('cm-not-content', 'true'), (i.lineDiv = eltP('div', null, 'CodeMirror-code')), (i.selectionDiv = elt('div', null, null, 'position: relative; z-index: 1')), (i.cursorDiv = elt('div', null, 'CodeMirror-cursors')), (i.measure = elt('div', null, 'CodeMirror-measure')), (i.lineMeasure = elt('div', null, 'CodeMirror-measure')), (i.lineSpace = eltP('div', [i.measure, i.lineMeasure, i.selectionDiv, i.cursorDiv, i.lineDiv], null, 'position: relative; outline: none'));
|
||
var o = eltP('div', [i.lineSpace], 'CodeMirror-lines');
|
||
(i.mover = elt(
|
||
'div',
|
||
[o],
|
||
null,
|
||
'position: relative'
|
||
)), (i.sizer = elt('div', [i.mover], 'CodeMirror-sizer')), (i.sizerWidth = null), (i.heightForcer = elt('div', null, null, 'position: absolute; height: ' + N + 'px; width: 1px;')), (i.gutters = elt('div', null, 'CodeMirror-gutters')), (i.lineGutter = null), (i.scroller = elt('div', [i.sizer, i.heightForcer, i.gutters], 'CodeMirror-scroll')), i.scroller.setAttribute('tabIndex', '-1'), (i.wrapper = elt('div', [i.scrollbarFiller, i.gutterFiller, i.scroller], 'CodeMirror')), a && s < 8 && ((i.gutters.style.zIndex = -1), (i.scroller.style.paddingRight = 0)), l || (n && v) || (i.scroller.draggable = !0), e && (e.appendChild ? e.appendChild(i.wrapper) : e(i.wrapper)), (i.viewFrom = i.viewTo = t.first), (i.reportedViewFrom = i.reportedViewTo = t.first), (i.view = []), (i.renderedView = null), (i.externalMeasured = null), (i.viewOffset = 0), (i.lastWrapHeight = i.lastWrapWidth = 0), (i.updateLineNumbers = null), (i.nativeBarWidth = i.barHeight = i.barWidth = 0), (i.scrollbarsClipped = !1), (i.lineNumWidth = i.lineNumInnerWidth = i.lineNumChars = null), (i.alignWidgets = !1), (i.cachedCharWidth = i.cachedTextHeight = i.cachedPaddingH = null), (i.maxLine = null), (i.maxLineLength = 0), (i.maxLineChanged = !1), (i.wheelDX = i.wheelDY = i.wheelStartX = i.wheelStartY = null), (i.shift = !1), (i.selForContextMenu = null), (i.activeTouch = null), r.init(i);
|
||
}
|
||
function getLine(e, t) {
|
||
if ((t -= e.first) < 0 || t >= e.size)
|
||
throw new Error(
|
||
'There is no line ' + (t + e.first) + ' in the document.'
|
||
);
|
||
for (var n = e; !n.lines; ) for (var r = 0; ; ++r) {
|
||
var i = n.children[r], o = i.chunkSize();
|
||
if (t < o) {
|
||
n = i;
|
||
break;
|
||
}
|
||
t -= o;
|
||
}
|
||
return n.lines[t];
|
||
}
|
||
function getBetween(e, t, n) {
|
||
var r = [], i = t.line;
|
||
return e.iter(t.line, n.line + 1, function(e) {
|
||
var o = e.text;
|
||
i == n.line &&
|
||
(o = o.slice(
|
||
0,
|
||
n.ch
|
||
)), i == t.line && (o = o.slice(t.ch)), r.push(o), ++i;
|
||
}), r;
|
||
}
|
||
function getLines(e, t, n) {
|
||
var r = [];
|
||
return e.iter(t, n, function(e) {
|
||
r.push(e.text);
|
||
}), r;
|
||
}
|
||
function updateLineHeight(e, t) {
|
||
var n = t - e.height;
|
||
if (n) for (var r = e; r; r = r.parent) r.height += n;
|
||
}
|
||
function lineNo(e) {
|
||
if (null == e.parent) return null;
|
||
for (
|
||
var t = e.parent, n = indexOf(t.lines, e), r = t.parent;
|
||
r;
|
||
(t = r), (r = r.parent)
|
||
) for (var i = 0; r.children[i] != t; ++i) n += r.children[i].chunkSize();
|
||
return n + t.first;
|
||
}
|
||
function lineAtHeight(e, t) {
|
||
var n = e.first;
|
||
e: do {
|
||
for (var r = 0; r < e.children.length; ++r) {
|
||
var i = e.children[r], o = i.height;
|
||
if (t < o) {
|
||
e = i;
|
||
continue e;
|
||
}
|
||
(t -= o), (n += i.chunkSize());
|
||
}
|
||
return n;
|
||
} while (!e.lines);
|
||
for (var a = 0; a < e.lines.length; ++a) {
|
||
var s = e.lines[a], l = s.height;
|
||
if (t < l) break;
|
||
t -= l;
|
||
}
|
||
return n + a;
|
||
}
|
||
function isLine(e, t) {
|
||
return t >= e.first && t < e.first + e.size;
|
||
}
|
||
function lineNumberFor(e, t) {
|
||
return String(e.lineNumberFormatter(t + e.firstLineNumber));
|
||
}
|
||
function Pos(e, t, n) {
|
||
if ((void 0 === n && (n = null), !(this instanceof Pos)))
|
||
return new Pos(e, t, n);
|
||
(this.line = e), (this.ch = t), (this.sticky = n);
|
||
}
|
||
function cmp(e, t) {
|
||
return e.line - t.line || e.ch - t.ch;
|
||
}
|
||
function equalCursorPos(e, t) {
|
||
return e.sticky == t.sticky && 0 == cmp(e, t);
|
||
}
|
||
function copyPos(e) {
|
||
return Pos(e.line, e.ch);
|
||
}
|
||
function maxPos(e, t) {
|
||
return cmp(e, t) < 0 ? t : e;
|
||
}
|
||
function minPos(e, t) {
|
||
return cmp(e, t) < 0 ? e : t;
|
||
}
|
||
function clipLine(e, t) {
|
||
return Math.max(e.first, Math.min(t, e.first + e.size - 1));
|
||
}
|
||
function clipPos(e, t) {
|
||
if (t.line < e.first) return Pos(e.first, 0);
|
||
var n = e.first + e.size - 1;
|
||
return t.line > n
|
||
? Pos(n, getLine(e, n).text.length)
|
||
: clipToLen(t, getLine(e, t.line).text.length);
|
||
}
|
||
function clipToLen(e, t) {
|
||
var n = e.ch;
|
||
return null == n || n > t ? Pos(e.line, t) : n < 0 ? Pos(e.line, 0) : e;
|
||
}
|
||
function clipPosArray(e, t) {
|
||
for (var n = [], r = 0; r < t.length; r++) n[r] = clipPos(e, t[r]);
|
||
return n;
|
||
}
|
||
function seeReadOnlySpans() {
|
||
B = !0;
|
||
}
|
||
function seeCollapsedSpans() {
|
||
z = !0;
|
||
}
|
||
function MarkedSpan(e, t, n) {
|
||
(this.marker = e), (this.from = t), (this.to = n);
|
||
}
|
||
function getMarkedSpanFor(e, t) {
|
||
if (e)
|
||
for (var n = 0; n < e.length; ++n) {
|
||
var r = e[n];
|
||
if (r.marker == t) return r;
|
||
}
|
||
}
|
||
function removeMarkedSpan(e, t) {
|
||
for (
|
||
var n, r = 0;
|
||
r < e.length;
|
||
++r
|
||
) e[r] != t && (n || (n = [])).push(e[r]);
|
||
return n;
|
||
}
|
||
function addMarkedSpan(e, t) {
|
||
(e.markedSpans = e.markedSpans
|
||
? e.markedSpans.concat([t])
|
||
: [t]), t.marker.attachLine(e);
|
||
}
|
||
function markedSpansBefore(e, t, n) {
|
||
var r;
|
||
if (e)
|
||
for (var i = 0; i < e.length; ++i) {
|
||
var o = e[i],
|
||
a = o.marker,
|
||
s =
|
||
null == o.from || (a.inclusiveLeft ? o.from <= t : o.from < t);
|
||
if (
|
||
s ||
|
||
(o.from == t &&
|
||
'bookmark' == a.type &&
|
||
(!n || !o.marker.insertLeft))
|
||
) {
|
||
var l = null == o.to || (a.inclusiveRight ? o.to >= t : o.to > t);
|
||
(r || (r = [])).push(new MarkedSpan(a, o.from, l ? null : o.to));
|
||
}
|
||
}
|
||
return r;
|
||
}
|
||
function markedSpansAfter(e, t, n) {
|
||
var r;
|
||
if (e)
|
||
for (var i = 0; i < e.length; ++i) {
|
||
var o = e[i],
|
||
a = o.marker,
|
||
s = null == o.to || (a.inclusiveRight ? o.to >= t : o.to > t);
|
||
if (
|
||
s ||
|
||
(o.from == t &&
|
||
'bookmark' == a.type &&
|
||
(!n || o.marker.insertLeft))
|
||
) {
|
||
var l =
|
||
null == o.from || (a.inclusiveLeft ? o.from <= t : o.from < t);
|
||
(r || (r = []))
|
||
.push(
|
||
new MarkedSpan(
|
||
a,
|
||
l ? null : o.from - t,
|
||
null == o.to ? null : o.to - t
|
||
)
|
||
);
|
||
}
|
||
}
|
||
return r;
|
||
}
|
||
function stretchSpansOverChange(e, t) {
|
||
if (t.full) return null;
|
||
var n = isLine(e, t.from.line) && getLine(e, t.from.line).markedSpans,
|
||
r = isLine(e, t.to.line) && getLine(e, t.to.line).markedSpans;
|
||
if (!n && !r) return null;
|
||
var i = t.from.ch,
|
||
o = t.to.ch,
|
||
a = 0 == cmp(t.from, t.to),
|
||
s = markedSpansBefore(n, i, a),
|
||
l = markedSpansAfter(r, o, a),
|
||
c = 1 == t.text.length,
|
||
u = lst(t.text).length + (c ? i : 0);
|
||
if (s)
|
||
for (var d = 0; d < s.length; ++d) {
|
||
var p = s[d];
|
||
if (null == p.to) {
|
||
var f = getMarkedSpanFor(l, p.marker);
|
||
f ? c && (p.to = null == f.to ? null : f.to + u) : (p.to = i);
|
||
}
|
||
}
|
||
if (l)
|
||
for (var h = 0; h < l.length; ++h) {
|
||
var g = l[h];
|
||
if ((null != g.to && (g.to += u), null == g.from)) {
|
||
var m = getMarkedSpanFor(s, g.marker);
|
||
m || ((g.from = u), c && (s || (s = [])).push(g));
|
||
} else (g.from += u), c && (s || (s = [])).push(g);
|
||
}
|
||
s && (s = clearEmptySpans(s)), l && l != s && (l = clearEmptySpans(l));
|
||
var v = [s];
|
||
if (!c) {
|
||
var y, b = t.text.length - 2;
|
||
if (b > 0 && s)
|
||
for (var x = 0; x < s.length; ++x)
|
||
null == s[x].to &&
|
||
(y || (y = [])).push(new MarkedSpan(s[x].marker, null, null));
|
||
for (var C = 0; C < b; ++C)
|
||
v.push(y);
|
||
v.push(l);
|
||
}
|
||
return v;
|
||
}
|
||
function clearEmptySpans(e) {
|
||
for (var t = 0; t < e.length; ++t) {
|
||
var n = e[t];
|
||
null != n.from &&
|
||
n.from == n.to &&
|
||
!1 !== n.marker.clearWhenEmpty &&
|
||
e.splice(t--, 1);
|
||
}
|
||
return e.length ? e : null;
|
||
}
|
||
function removeReadOnlyRanges(e, t, n) {
|
||
var r = null;
|
||
if (
|
||
(e.iter(t.line, n.line + 1, function(e) {
|
||
if (e.markedSpans)
|
||
for (var t = 0; t < e.markedSpans.length; ++t) {
|
||
var n = e.markedSpans[t].marker;
|
||
!n.readOnly ||
|
||
(r && -1 != indexOf(r, n)) ||
|
||
(r || (r = [])).push(n);
|
||
}
|
||
}), !r)
|
||
)
|
||
return null;
|
||
for (
|
||
var i = [{ from: t, to: n }], o = 0;
|
||
o < r.length;
|
||
++o
|
||
) for (var a = r[o], s = a.find(0), l = 0; l < i.length; ++l) {
|
||
var c = i[l];
|
||
if (!(cmp(c.to, s.from) < 0 || cmp(c.from, s.to) > 0)) {
|
||
var u = [l, 1], d = cmp(c.from, s.from), p = cmp(c.to, s.to);
|
||
(d < 0 || (!a.inclusiveLeft && !d)) &&
|
||
u.push({ from: c.from, to: s.from }), (p > 0 ||
|
||
(!a.inclusiveRight && !p)) &&
|
||
u.push({ from: s.to, to: c.to }), i.splice.apply(i, u), (l +=
|
||
u.length - 3);
|
||
}
|
||
}
|
||
return i;
|
||
}
|
||
function detachMarkedSpans(e) {
|
||
var t = e.markedSpans;
|
||
if (t) {
|
||
for (var n = 0; n < t.length; ++n)
|
||
t[n].marker.detachLine(e);
|
||
e.markedSpans = null;
|
||
}
|
||
}
|
||
function attachMarkedSpans(e, t) {
|
||
if (t) {
|
||
for (var n = 0; n < t.length; ++n)
|
||
t[n].marker.attachLine(e);
|
||
e.markedSpans = t;
|
||
}
|
||
}
|
||
function extraLeft(e) {
|
||
return e.inclusiveLeft ? -1 : 0;
|
||
}
|
||
function extraRight(e) {
|
||
return e.inclusiveRight ? 1 : 0;
|
||
}
|
||
function compareCollapsedMarkers(e, t) {
|
||
var n = e.lines.length - t.lines.length;
|
||
if (0 != n) return n;
|
||
var r = e.find(),
|
||
i = t.find(),
|
||
o = cmp(r.from, i.from) || extraLeft(e) - extraLeft(t);
|
||
if (o) return -o;
|
||
var a = cmp(r.to, i.to) || extraRight(e) - extraRight(t);
|
||
return a || t.id - e.id;
|
||
}
|
||
function collapsedSpanAtSide(e, t) {
|
||
var n, r = z && e.markedSpans;
|
||
if (r)
|
||
for (var i = void 0, o = 0; o < r.length; ++o)
|
||
(i = r[o]), i.marker.collapsed &&
|
||
null == (t ? i.from : i.to) &&
|
||
(!n || compareCollapsedMarkers(n, i.marker) < 0) &&
|
||
(n = i.marker);
|
||
return n;
|
||
}
|
||
function collapsedSpanAtStart(e) {
|
||
return collapsedSpanAtSide(e, !0);
|
||
}
|
||
function collapsedSpanAtEnd(e) {
|
||
return collapsedSpanAtSide(e, !1);
|
||
}
|
||
function conflictingCollapsedRange(e, t, n, r, i) {
|
||
var o = getLine(e, t), a = z && o.markedSpans;
|
||
if (a)
|
||
for (var s = 0; s < a.length; ++s) {
|
||
var l = a[s];
|
||
if (l.marker.collapsed) {
|
||
var c = l.marker.find(0),
|
||
u = cmp(c.from, n) || extraLeft(l.marker) - extraLeft(i),
|
||
d = cmp(c.to, r) || extraRight(l.marker) - extraRight(i);
|
||
if (
|
||
!((u >= 0 && d <= 0) || (u <= 0 && d >= 0)) &&
|
||
((u <= 0 &&
|
||
(l.marker.inclusiveRight && i.inclusiveLeft
|
||
? cmp(c.to, n) >= 0
|
||
: cmp(c.to, n) > 0)) ||
|
||
(u >= 0 &&
|
||
(l.marker.inclusiveRight && i.inclusiveLeft
|
||
? cmp(c.from, r) <= 0
|
||
: cmp(c.from, r) < 0)))
|
||
)
|
||
return !0;
|
||
}
|
||
}
|
||
}
|
||
function visualLine(e) {
|
||
for (var t; (t = collapsedSpanAtStart(e)); ) e = t.find(-1, !0).line;
|
||
return e;
|
||
}
|
||
function visualLineEnd(e) {
|
||
for (var t; (t = collapsedSpanAtEnd(e)); ) e = t.find(1, !0).line;
|
||
return e;
|
||
}
|
||
function visualLineContinued(e) {
|
||
for (
|
||
var t, n;
|
||
(t = collapsedSpanAtEnd(e));
|
||
|
||
) (e = t.find(1, !0).line), (n || (n = [])).push(e);
|
||
return n;
|
||
}
|
||
function visualLineNo(e, t) {
|
||
var n = getLine(e, t), r = visualLine(n);
|
||
return n == r ? t : lineNo(r);
|
||
}
|
||
function visualLineEndNo(e, t) {
|
||
if (t > e.lastLine()) return t;
|
||
var n, r = getLine(e, t);
|
||
if (!lineIsHidden(e, r)) return t;
|
||
for (; (n = collapsedSpanAtEnd(r)); ) r = n.find(1, !0).line;
|
||
return lineNo(r) + 1;
|
||
}
|
||
function lineIsHidden(e, t) {
|
||
var n = z && t.markedSpans;
|
||
if (n)
|
||
for (var r = void 0, i = 0; i < n.length; ++i)
|
||
if (((r = n[i]), r.marker.collapsed)) {
|
||
if (null == r.from) return !0;
|
||
if (
|
||
!r.marker.widgetNode &&
|
||
0 == r.from &&
|
||
r.marker.inclusiveLeft &&
|
||
lineIsHiddenInner(e, t, r)
|
||
)
|
||
return !0;
|
||
}
|
||
}
|
||
function lineIsHiddenInner(e, t, n) {
|
||
if (null == n.to) {
|
||
var r = n.marker.find(1, !0);
|
||
return lineIsHiddenInner(
|
||
e,
|
||
r.line,
|
||
getMarkedSpanFor(r.line.markedSpans, n.marker)
|
||
);
|
||
}
|
||
if (n.marker.inclusiveRight && n.to == t.text.length) return !0;
|
||
for (
|
||
var i = void 0, o = 0;
|
||
o < t.markedSpans.length;
|
||
++o
|
||
) if (((i = t.markedSpans[o]), i.marker.collapsed && !i.marker.widgetNode && i.from == n.to && (null == i.to || i.to != n.from) && (i.marker.inclusiveLeft || n.marker.inclusiveRight) && lineIsHiddenInner(e, t, i))) return !0;
|
||
}
|
||
function heightAtLine(e) {
|
||
e = visualLine(e);
|
||
for (var t = 0, n = e.parent, r = 0; r < n.lines.length; ++r) {
|
||
var i = n.lines[r];
|
||
if (i == e) break;
|
||
t += i.height;
|
||
}
|
||
for (
|
||
var o = n.parent;
|
||
o;
|
||
(n = o), (o = n.parent)
|
||
) for (var a = 0; a < o.children.length; ++a) {
|
||
var s = o.children[a];
|
||
if (s == n) break;
|
||
t += s.height;
|
||
}
|
||
return t;
|
||
}
|
||
function lineLength(e) {
|
||
if (0 == e.height) return 0;
|
||
for (var t, n = e.text.length, r = e; (t = collapsedSpanAtStart(r)); ) {
|
||
var i = t.find(0, !0);
|
||
(r = i.from.line), (n += i.from.ch - i.to.ch);
|
||
}
|
||
for (r = e; (t = collapsedSpanAtEnd(r)); ) {
|
||
var o = t.find(0, !0);
|
||
(n -=
|
||
r.text.length -
|
||
o.from.ch), (r = o.to.line), (n += r.text.length - o.to.ch);
|
||
}
|
||
return n;
|
||
}
|
||
function findMaxLine(e) {
|
||
var t = e.display, n = e.doc;
|
||
(t.maxLine = getLine(
|
||
n,
|
||
n.first
|
||
)), (t.maxLineLength = lineLength(t.maxLine)), (t.maxLineChanged = !0), n.iter(
|
||
function(e) {
|
||
var n = lineLength(e);
|
||
n > t.maxLineLength && ((t.maxLineLength = n), (t.maxLine = e));
|
||
}
|
||
);
|
||
}
|
||
function iterateBidiSections(e, t, n, r) {
|
||
if (!e) return r(t, n, 'ltr');
|
||
for (var i = !1, o = 0; o < e.length; ++o) {
|
||
var a = e[o];
|
||
((a.from < n && a.to > t) || (t == n && a.to == t)) &&
|
||
(r(
|
||
Math.max(a.from, t),
|
||
Math.min(a.to, n),
|
||
1 == a.level ? 'rtl' : 'ltr'
|
||
), (i = !0));
|
||
}
|
||
i || r(t, n, 'ltr');
|
||
}
|
||
function getBidiPartAt(e, t, n) {
|
||
var r;
|
||
R = null;
|
||
for (var i = 0; i < e.length; ++i) {
|
||
var o = e[i];
|
||
if (o.from < t && o.to > t) return i;
|
||
o.to == t &&
|
||
(o.from != o.to && 'before' == n
|
||
? (r = i)
|
||
: (R = i)), o.from == t && (o.from != o.to && 'before' != n ? (r = i) : (R = i));
|
||
}
|
||
return null != r ? r : R;
|
||
}
|
||
function getOrder(e, t) {
|
||
var n = e.order;
|
||
return null == n && (n = e.order = V(e.text, t)), n;
|
||
}
|
||
function moveCharLogically(e, t, n) {
|
||
var r = skipExtendingChars(e.text, t + n, n);
|
||
return r < 0 || r > e.text.length ? null : r;
|
||
}
|
||
function moveLogically(e, t, n) {
|
||
var r = moveCharLogically(e, t.ch, n);
|
||
return null == r
|
||
? null
|
||
: new Pos(t.line, r, n < 0 ? 'after' : 'before');
|
||
}
|
||
function endOfLine(e, t, n, r, i) {
|
||
if (e) {
|
||
var o = getOrder(n, t.doc.direction);
|
||
if (o) {
|
||
var a,
|
||
s = i < 0 ? lst(o) : o[0],
|
||
l = i < 0 == (1 == s.level),
|
||
c = l ? 'after' : 'before';
|
||
if (s.level > 0) {
|
||
var u = prepareMeasureForLine(t, n);
|
||
a = i < 0 ? n.text.length - 1 : 0;
|
||
var d = measureCharPrepared(t, u, a).top;
|
||
(a = findFirst(
|
||
function(e) {
|
||
return measureCharPrepared(t, u, e).top == d;
|
||
},
|
||
i < 0 == (1 == s.level) ? s.from : s.to - 1,
|
||
a
|
||
)), 'before' == c && (a = moveCharLogically(n, a, 1));
|
||
} else a = i < 0 ? s.to : s.from;
|
||
return new Pos(r, a, c);
|
||
}
|
||
}
|
||
return new Pos(
|
||
r,
|
||
i < 0 ? n.text.length : 0,
|
||
i < 0 ? 'before' : 'after'
|
||
);
|
||
}
|
||
function moveVisually(e, t, n, r) {
|
||
var i = getOrder(t, e.doc.direction);
|
||
if (!i) return moveLogically(t, n, r);
|
||
n.ch >= t.text.length
|
||
? ((n.ch = t.text.length), (n.sticky = 'before'))
|
||
: n.ch <= 0 && ((n.ch = 0), (n.sticky = 'after'));
|
||
var o = getBidiPartAt(i, n.ch, n.sticky), a = i[o];
|
||
if (
|
||
'ltr' == e.doc.direction &&
|
||
a.level % 2 == 0 &&
|
||
(r > 0 ? a.to > n.ch : a.from < n.ch)
|
||
)
|
||
return moveLogically(t, n, r);
|
||
var s,
|
||
l = function(e, n) {
|
||
return moveCharLogically(t, e instanceof Pos ? e.ch : e, n);
|
||
},
|
||
c = function(n) {
|
||
return e.options.lineWrapping
|
||
? ((s = s || prepareMeasureForLine(e, t)), wrappedLineExtentChar(
|
||
e,
|
||
t,
|
||
s,
|
||
n
|
||
))
|
||
: { begin: 0, end: t.text.length };
|
||
},
|
||
u = c('before' == n.sticky ? l(n, -1) : n.ch);
|
||
if ('rtl' == e.doc.direction || 1 == a.level) {
|
||
var d = 1 == a.level == r < 0, p = l(n, d ? 1 : -1);
|
||
if (
|
||
null != p &&
|
||
(d ? p <= a.to && p <= u.end : p >= a.from && p >= u.begin)
|
||
) {
|
||
var f = d ? 'before' : 'after';
|
||
return new Pos(n.line, p, f);
|
||
}
|
||
}
|
||
var h = function(e, t, r) {
|
||
for (
|
||
var o = function(e, t) {
|
||
return t
|
||
? new Pos(n.line, l(e, 1), 'before')
|
||
: new Pos(n.line, e, 'after');
|
||
};
|
||
e >= 0 && e < i.length;
|
||
e += t
|
||
) {
|
||
var a = i[e],
|
||
s = t > 0 == (1 != a.level),
|
||
c = s ? r.begin : l(r.end, -1);
|
||
if (a.from <= c && c < a.to) return o(c, s);
|
||
if (((c = s ? a.from : l(a.to, -1)), r.begin <= c && c < r.end))
|
||
return o(c, s);
|
||
}
|
||
},
|
||
g = h(o + r, r, u);
|
||
if (g) return g;
|
||
var m = r > 0 ? u.end : l(u.begin, -1);
|
||
return null == m ||
|
||
(r > 0 && m == t.text.length) ||
|
||
!(g = h(r > 0 ? 0 : i.length - 1, r, c(m)))
|
||
? null
|
||
: g;
|
||
}
|
||
function getHandlers(e, t) {
|
||
return (e._handlers && e._handlers[t]) || j;
|
||
}
|
||
function off(e, t, n) {
|
||
if (e.removeEventListener) e.removeEventListener(t, n, !1);
|
||
else if (e.detachEvent) e.detachEvent('on' + t, n);
|
||
else {
|
||
var r = e._handlers, i = r && r[t];
|
||
if (i) {
|
||
var o = indexOf(i, n);
|
||
o > -1 && (r[t] = i.slice(0, o).concat(i.slice(o + 1)));
|
||
}
|
||
}
|
||
}
|
||
function signal(e, t) {
|
||
var n = getHandlers(e, t);
|
||
if (n.length)
|
||
for (
|
||
var r = Array.prototype.slice.call(arguments, 2), i = 0;
|
||
i < n.length;
|
||
++i
|
||
)
|
||
n[i].apply(null, r);
|
||
}
|
||
function signalDOMEvent(e, t, n) {
|
||
return 'string' == typeof t &&
|
||
(t = {
|
||
type: t,
|
||
preventDefault: function() {
|
||
this.defaultPrevented = !0;
|
||
}
|
||
}), signal(e, n || t.type, e, t), e_defaultPrevented(t) || t.codemirrorIgnore;
|
||
}
|
||
function signalCursorActivity(e) {
|
||
var t = e._handlers && e._handlers.cursorActivity;
|
||
if (t)
|
||
for (
|
||
var n =
|
||
e.curOp.cursorActivityHandlers ||
|
||
(e.curOp.cursorActivityHandlers = []),
|
||
r = 0;
|
||
r < t.length;
|
||
++r
|
||
)
|
||
-1 == indexOf(n, t[r]) && n.push(t[r]);
|
||
}
|
||
function hasHandler(e, t) {
|
||
return getHandlers(e, t).length > 0;
|
||
}
|
||
function eventMixin(e) {
|
||
(e.prototype.on = function(e, t) {
|
||
G(this, e, t);
|
||
}), (e.prototype.off = function(e, t) {
|
||
off(this, e, t);
|
||
});
|
||
}
|
||
function e_preventDefault(e) {
|
||
e.preventDefault ? e.preventDefault() : (e.returnValue = !1);
|
||
}
|
||
function e_stopPropagation(e) {
|
||
e.stopPropagation ? e.stopPropagation() : (e.cancelBubble = !0);
|
||
}
|
||
function e_defaultPrevented(e) {
|
||
return null != e.defaultPrevented
|
||
? e.defaultPrevented
|
||
: 0 == e.returnValue;
|
||
}
|
||
function e_stop(e) {
|
||
e_preventDefault(e), e_stopPropagation(e);
|
||
}
|
||
function e_target(e) {
|
||
return e.target || e.srcElement;
|
||
}
|
||
function e_button(e) {
|
||
var t = e.which;
|
||
return null == t &&
|
||
(1 & e.button
|
||
? (t = 1)
|
||
: 2 & e.button
|
||
? (t = 3)
|
||
: 4 & e.button &&
|
||
(t = 2)), y && e.ctrlKey && 1 == t && (t = 3), t;
|
||
}
|
||
function zeroWidthElement(e) {
|
||
if (null == O) {
|
||
var t = elt('span', '');
|
||
removeChildrenAndAdd(
|
||
e,
|
||
elt('span', [t, document.createTextNode('x')])
|
||
), 0 != e.firstChild.offsetHeight &&
|
||
(O = t.offsetWidth <= 1 && t.offsetHeight > 2 && !(a && s < 8));
|
||
}
|
||
var n = O
|
||
? elt('span', '')
|
||
: elt(
|
||
'span',
|
||
' ',
|
||
null,
|
||
'display: inline-block; width: 1px; margin-right: -1px'
|
||
);
|
||
return n.setAttribute('cm-text', ''), n;
|
||
}
|
||
function hasBadBidiRects(e) {
|
||
if (null != P) return P;
|
||
var t = removeChildrenAndAdd(e, document.createTextNode('AخA')),
|
||
n = w(t, 0, 1).getBoundingClientRect(),
|
||
r = w(t, 1, 2).getBoundingClientRect();
|
||
return removeChildren(
|
||
e
|
||
), !(!n || n.left == n.right) && (P = r.right - n.right < 3);
|
||
}
|
||
function hasBadZoomedRects(e) {
|
||
if (null != q) return q;
|
||
var t = removeChildrenAndAdd(e, elt('span', 'x')),
|
||
n = t.getBoundingClientRect(),
|
||
r = w(t, 0, 1).getBoundingClientRect();
|
||
return (q = Math.abs(n.left - r.left) > 1);
|
||
}
|
||
function defineMode(e, t) {
|
||
arguments.length > 2 &&
|
||
(t.dependencies = Array.prototype.slice.call(
|
||
arguments,
|
||
2
|
||
)), (X[e] = t);
|
||
}
|
||
function defineMIME(e, t) {
|
||
Y[e] = t;
|
||
}
|
||
function resolveMode(e) {
|
||
if ('string' == typeof e && Y.hasOwnProperty(e)) e = Y[e];
|
||
else if (e && 'string' == typeof e.name && Y.hasOwnProperty(e.name)) {
|
||
var t = Y[e.name];
|
||
'string' == typeof t && (t = { name: t }), (e = createObj(
|
||
t,
|
||
e
|
||
)), (e.name = t.name);
|
||
} else {
|
||
if ('string' == typeof e && /^[\w\-]+\/[\w\-]+\+xml$/.test(e))
|
||
return resolveMode('application/xml');
|
||
if ('string' == typeof e && /^[\w\-]+\/[\w\-]+\+json$/.test(e))
|
||
return resolveMode('application/json');
|
||
}
|
||
return 'string' == typeof e ? { name: e } : e || { name: 'null' };
|
||
}
|
||
function getMode(e, t) {
|
||
t = resolveMode(t);
|
||
var n = X[t.name];
|
||
if (!n) return getMode(e, 'text/plain');
|
||
var r = n(e, t);
|
||
if (Z.hasOwnProperty(t.name)) {
|
||
var i = Z[t.name];
|
||
for (var o in i)
|
||
i.hasOwnProperty(o) &&
|
||
(r.hasOwnProperty(o) && (r['_' + o] = r[o]), (r[o] = i[o]));
|
||
}
|
||
if (
|
||
((r.name = t.name), t.helperType &&
|
||
(r.helperType = t.helperType), t.modeProps)
|
||
)
|
||
for (var a in t.modeProps)
|
||
r[a] = t.modeProps[a];
|
||
return r;
|
||
}
|
||
function extendMode(e, t) {
|
||
copyObj(t, Z.hasOwnProperty(e) ? Z[e] : (Z[e] = {}));
|
||
}
|
||
function copyState(e, t) {
|
||
if (!0 === t) return t;
|
||
if (e.copyState) return e.copyState(t);
|
||
var n = {};
|
||
for (var r in t) {
|
||
var i = t[r];
|
||
i instanceof Array && (i = i.concat([])), (n[r] = i);
|
||
}
|
||
return n;
|
||
}
|
||
function innerMode(e, t) {
|
||
for (
|
||
var n;
|
||
e.innerMode && (n = e.innerMode(t)) && n.mode != e;
|
||
|
||
) (t = n.state), (e = n.mode);
|
||
return n || { mode: e, state: t };
|
||
}
|
||
function startState(e, t, n) {
|
||
return !e.startState || e.startState(t, n);
|
||
}
|
||
function highlightLine(e, t, n, r) {
|
||
var i = [e.state.modeGen], o = {};
|
||
runMode(
|
||
e,
|
||
t.text,
|
||
e.doc.mode,
|
||
n,
|
||
function(e, t) {
|
||
return i.push(e, t);
|
||
},
|
||
o,
|
||
r
|
||
);
|
||
for (var a = 0; a < e.state.overlays.length; ++a) !(function(n) {
|
||
var r = e.state.overlays[n], a = 1, s = 0;
|
||
runMode(
|
||
e,
|
||
t.text,
|
||
r.mode,
|
||
!0,
|
||
function(e, t) {
|
||
for (var n = a; s < e; ) {
|
||
var o = i[a];
|
||
o > e &&
|
||
i.splice(a, 1, e, i[a + 1], o), (a += 2), (s = Math.min(
|
||
e,
|
||
o
|
||
));
|
||
}
|
||
if (t)
|
||
if (r.opaque)
|
||
i.splice(n, a - n, e, 'overlay ' + t), (a = n + 2);
|
||
else
|
||
for (; n < a; n += 2) {
|
||
var l = i[n + 1];
|
||
i[n + 1] = (l ? l + ' ' : '') + 'overlay ' + t;
|
||
}
|
||
},
|
||
o
|
||
);
|
||
})(a);
|
||
return { styles: i, classes: o.bgClass || o.textClass ? o : null };
|
||
}
|
||
function getLineStyles(e, t, n) {
|
||
if (!t.styles || t.styles[0] != e.state.modeGen) {
|
||
var r = getStateBefore(e, lineNo(t)),
|
||
i = highlightLine(
|
||
e,
|
||
t,
|
||
t.text.length > e.options.maxHighlightLength
|
||
? copyState(e.doc.mode, r)
|
||
: r
|
||
);
|
||
(t.stateAfter = r), (t.styles = i.styles), i.classes
|
||
? (t.styleClasses = i.classes)
|
||
: t.styleClasses && (t.styleClasses = null), n === e.doc.frontier &&
|
||
e.doc.frontier++;
|
||
}
|
||
return t.styles;
|
||
}
|
||
function getStateBefore(e, t, n) {
|
||
var r = e.doc, i = e.display;
|
||
if (!r.mode.startState) return !0;
|
||
var o = findStartLine(e, t, n),
|
||
a = o > r.first && getLine(r, o - 1).stateAfter;
|
||
return (a = a
|
||
? copyState(r.mode, a)
|
||
: startState(r.mode)), r.iter(o, t, function(n) {
|
||
processLine(e, n.text, a);
|
||
var s = o == t - 1 || o % 5 == 0 || (o >= i.viewFrom && o < i.viewTo);
|
||
(n.stateAfter = s ? copyState(r.mode, a) : null), ++o;
|
||
}), n && (r.frontier = o), a;
|
||
}
|
||
function processLine(e, t, n, r) {
|
||
var i = e.doc.mode, o = new J(t, e.options.tabSize);
|
||
for (
|
||
(o.start = o.pos = r || 0), '' == t && callBlankLine(i, n);
|
||
!o.eol();
|
||
|
||
) readToken(i, o, n), (o.start = o.pos);
|
||
}
|
||
function callBlankLine(e, t) {
|
||
if (e.blankLine) return e.blankLine(t);
|
||
if (e.innerMode) {
|
||
var n = innerMode(e, t);
|
||
return n.mode.blankLine ? n.mode.blankLine(n.state) : void 0;
|
||
}
|
||
}
|
||
function readToken(e, t, n, r) {
|
||
for (var i = 0; i < 10; i++) {
|
||
r && (r[0] = innerMode(e, n).mode);
|
||
var o = e.token(t, n);
|
||
if (t.pos > t.start) return o;
|
||
}
|
||
throw new Error('Mode ' + e.name + ' failed to advance stream.');
|
||
}
|
||
function takeToken(e, t, n, r) {
|
||
var i,
|
||
o = function(e) {
|
||
return {
|
||
start: d.start,
|
||
end: d.pos,
|
||
string: d.current(),
|
||
type: i || null,
|
||
state: e ? copyState(a.mode, u) : u
|
||
};
|
||
},
|
||
a = e.doc,
|
||
s = a.mode;
|
||
t = clipPos(a, t);
|
||
var l,
|
||
c = getLine(a, t.line),
|
||
u = getStateBefore(e, t.line, n),
|
||
d = new J(c.text, e.options.tabSize);
|
||
for (
|
||
r && (l = []);
|
||
(r || d.pos < t.ch) && !d.eol();
|
||
|
||
) (d.start = d.pos), (i = readToken(s, d, u)), r && l.push(o(!0));
|
||
return r ? l : o();
|
||
}
|
||
function extractLineClasses(e, t) {
|
||
if (e)
|
||
for (;;) {
|
||
var n = e.match(/(?:^|\s+)line-(background-)?(\S+)/);
|
||
if (!n) break;
|
||
e = e.slice(0, n.index) + e.slice(n.index + n[0].length);
|
||
var r = n[1] ? 'bgClass' : 'textClass';
|
||
null == t[r]
|
||
? (t[r] = n[2])
|
||
: new RegExp('(?:^|s)' + n[2] + '(?:$|s)').test(t[r]) ||
|
||
(t[r] += ' ' + n[2]);
|
||
}
|
||
return e;
|
||
}
|
||
function runMode(e, t, n, r, i, o, a) {
|
||
var s = n.flattenSpans;
|
||
null == s && (s = e.options.flattenSpans);
|
||
var l,
|
||
c = 0,
|
||
u = null,
|
||
d = new J(t, e.options.tabSize),
|
||
p = e.options.addModeClass && [null];
|
||
for (
|
||
'' == t && extractLineClasses(callBlankLine(n, r), o);
|
||
!d.eol();
|
||
|
||
) {
|
||
if (
|
||
(d.pos > e.options.maxHighlightLength
|
||
? ((s = !1), a && processLine(e, t, r, d.pos), (d.pos =
|
||
t.length), (l = null))
|
||
: (l = extractLineClasses(readToken(n, d, r, p), o)), p)
|
||
) {
|
||
var f = p[0].name;
|
||
f && (l = 'm-' + (l ? f + ' ' + l : f));
|
||
}
|
||
if (!s || u != l) {
|
||
for (; c < d.start; )
|
||
(c = Math.min(d.start, c + 5e3)), i(c, u);
|
||
u = l;
|
||
}
|
||
d.start = d.pos;
|
||
}
|
||
for (; c < d.pos; ) {
|
||
var h = Math.min(d.pos, c + 5e3);
|
||
i(h, u), (c = h);
|
||
}
|
||
}
|
||
function findStartLine(e, t, n) {
|
||
for (
|
||
var r,
|
||
i,
|
||
o = e.doc,
|
||
a = n ? -1 : t - (e.doc.mode.innerMode ? 1e3 : 100),
|
||
s = t;
|
||
s > a;
|
||
--s
|
||
) {
|
||
if (s <= o.first) return o.first;
|
||
var l = getLine(o, s - 1);
|
||
if (l.stateAfter && (!n || s <= o.frontier)) return s;
|
||
var c = countColumn(l.text, null, e.options.tabSize);
|
||
(null == i || r > c) && ((i = s - 1), (r = c));
|
||
}
|
||
return i;
|
||
}
|
||
function updateLine(e, t, n, r) {
|
||
(e.text = t), e.stateAfter && (e.stateAfter = null), e.styles && (e.styles = null), null != e.order && (e.order = null), detachMarkedSpans(e), attachMarkedSpans(e, n);
|
||
var i = r ? r(e) : 1;
|
||
i != e.height && updateLineHeight(e, i);
|
||
}
|
||
function cleanUpLine(e) {
|
||
(e.parent = null), detachMarkedSpans(e);
|
||
}
|
||
function interpretTokenStyle(e, t) {
|
||
if (!e || /^\s*$/.test(e)) return null;
|
||
var n = t.addModeClass ? ne : te;
|
||
return n[e] || (n[e] = e.replace(/\S+/g, 'cm-$&'));
|
||
}
|
||
function buildLineContent(e, t) {
|
||
var n = eltP('span', null, null, l ? 'padding-right: .1px' : null),
|
||
r = {
|
||
pre: eltP('pre', [n], 'CodeMirror-line'),
|
||
content: n,
|
||
col: 0,
|
||
pos: 0,
|
||
cm: e,
|
||
trailingSpace: !1,
|
||
splitSpaces: (a || l) && e.getOption('lineWrapping')
|
||
};
|
||
t.measure = {};
|
||
for (var i = 0; i <= (t.rest ? t.rest.length : 0); i++) {
|
||
var o = i ? t.rest[i - 1] : t.line, s = void 0;
|
||
(r.pos = 0), (r.addToken = buildToken), hasBadBidiRects(e.display.measure) && (s = getOrder(o, e.doc.direction)) && (r.addToken = buildTokenBadBidi(r.addToken, s)), (r.map = []);
|
||
insertLineContent(
|
||
o,
|
||
r,
|
||
getLineStyles(e, o, t != e.display.externalMeasured && lineNo(o))
|
||
), o.styleClasses && (o.styleClasses.bgClass && (r.bgClass = joinClasses(o.styleClasses.bgClass, r.bgClass || '')), o.styleClasses.textClass && (r.textClass = joinClasses(o.styleClasses.textClass, r.textClass || ''))), 0 == r.map.length && r.map.push(0, 0, r.content.appendChild(zeroWidthElement(e.display.measure))), 0 == i ? ((t.measure.map = r.map), (t.measure.cache = {})) : ((t.measure.maps || (t.measure.maps = [])).push(r.map), (t.measure.caches || (t.measure.caches = [])).push({}));
|
||
}
|
||
if (l) {
|
||
var c = r.content.lastChild;
|
||
(/\bcm-tab\b/.test(c.className) ||
|
||
(c.querySelector && c.querySelector('.cm-tab'))) &&
|
||
(r.content.className = 'cm-tab-wrap-hack');
|
||
}
|
||
return signal(
|
||
e,
|
||
'renderLine',
|
||
e,
|
||
t.line,
|
||
r.pre
|
||
), r.pre.className && (r.textClass = joinClasses(r.pre.className, r.textClass || '')), r;
|
||
}
|
||
function defaultSpecialCharPlaceholder(e) {
|
||
var t = elt('span', '•', 'cm-invalidchar');
|
||
return (t.title =
|
||
'\\u' +
|
||
e
|
||
.charCodeAt(0)
|
||
.toString(16)), t.setAttribute('aria-label', t.title), t;
|
||
}
|
||
function buildToken(e, t, n, r, i, o, l) {
|
||
if (t) {
|
||
var c,
|
||
u = e.splitSpaces ? splitSpaces(t, e.trailingSpace) : t,
|
||
d = e.cm.state.specialChars,
|
||
p = !1;
|
||
if (d.test(t)) {
|
||
c = document.createDocumentFragment();
|
||
for (var f = 0; ; ) {
|
||
d.lastIndex = f;
|
||
var h = d.exec(t), g = h ? h.index - f : t.length - f;
|
||
if (g) {
|
||
var m = document.createTextNode(u.slice(f, f + g));
|
||
a && s < 9
|
||
? c.appendChild(elt('span', [m]))
|
||
: c.appendChild(m), e.map.push(
|
||
e.pos,
|
||
e.pos + g,
|
||
m
|
||
), (e.col += g), (e.pos += g);
|
||
}
|
||
if (!h) break;
|
||
f += g + 1;
|
||
var v = void 0;
|
||
if ('\t' == h[0]) {
|
||
var y = e.cm.options.tabSize, b = y - e.col % y;
|
||
(v = c.appendChild(
|
||
elt('span', spaceStr(b), 'cm-tab')
|
||
)), v.setAttribute('role', 'presentation'), v.setAttribute(
|
||
'cm-text',
|
||
'\t'
|
||
), (e.col += b);
|
||
} else
|
||
'\r' == h[0] || '\n' == h[0]
|
||
? ((v = c.appendChild(
|
||
elt('span', '\r' == h[0] ? '␍' : '', 'cm-invalidchar')
|
||
)), v.setAttribute('cm-text', h[0]), (e.col += 1))
|
||
: ((v = e.cm.options.specialCharPlaceholder(
|
||
h[0]
|
||
)), v.setAttribute('cm-text', h[0]), a && s < 9
|
||
? c.appendChild(elt('span', [v]))
|
||
: c.appendChild(v), (e.col += 1));
|
||
e.map.push(e.pos, e.pos + 1, v), e.pos++;
|
||
}
|
||
} else
|
||
(e.col += t.length), (c = document.createTextNode(u)), e.map.push(
|
||
e.pos,
|
||
e.pos + t.length,
|
||
c
|
||
), a && s < 9 && (p = !0), (e.pos += t.length);
|
||
if (
|
||
((e.trailingSpace = 32 == u.charCodeAt(t.length - 1)), n ||
|
||
r ||
|
||
i ||
|
||
p ||
|
||
l)
|
||
) {
|
||
var x = n || '';
|
||
r && (x += r), i && (x += i);
|
||
var C = elt('span', [c], x, l);
|
||
return o && (C.title = o), e.content.appendChild(C);
|
||
}
|
||
e.content.appendChild(c);
|
||
}
|
||
}
|
||
function splitSpaces(e, t) {
|
||
if (e.length > 1 && !/ /.test(e)) return e;
|
||
for (var n = t, r = '', i = 0; i < e.length; i++) {
|
||
var o = e.charAt(i);
|
||
' ' != o ||
|
||
!n ||
|
||
(i != e.length - 1 && 32 != e.charCodeAt(i + 1)) ||
|
||
(o = ' '), (r += o), (n = ' ' == o);
|
||
}
|
||
return r;
|
||
}
|
||
function buildTokenBadBidi(e, t) {
|
||
return function(n, r, i, o, a, s, l) {
|
||
i = i ? i + ' cm-force-border' : 'cm-force-border';
|
||
for (var c = n.pos, u = c + r.length; ; ) {
|
||
for (
|
||
var d = void 0, p = 0;
|
||
p < t.length && ((d = t[p]), !(d.to > c && d.from <= c));
|
||
p++
|
||
);
|
||
if (d.to >= u) return e(n, r, i, o, a, s, l);
|
||
e(
|
||
n,
|
||
r.slice(0, d.to - c),
|
||
i,
|
||
o,
|
||
null,
|
||
s,
|
||
l
|
||
), (o = null), (r = r.slice(d.to - c)), (c = d.to);
|
||
}
|
||
};
|
||
}
|
||
function buildCollapsedSpan(e, t, n, r) {
|
||
var i = !r && n.widgetNode;
|
||
i &&
|
||
e.map.push(
|
||
e.pos,
|
||
e.pos + t,
|
||
i
|
||
), !r && e.cm.display.input.needsContentAttribute && (i || (i = e.content.appendChild(document.createElement('span'))), i.setAttribute('cm-marker', n.id)), i && (e.cm.display.input.setUneditable(i), e.content.appendChild(i)), (e.pos += t), (e.trailingSpace = !1);
|
||
}
|
||
function insertLineContent(e, t, n) {
|
||
var r = e.markedSpans, i = e.text, o = 0;
|
||
if (r)
|
||
for (
|
||
var a, s, l, c, u, d, p, f = i.length, h = 0, g = 1, m = '', v = 0;
|
||
;
|
||
|
||
) {
|
||
if (v == h) {
|
||
(l = c = u = d = s = ''), (p = null), (v = 1 / 0);
|
||
for (var y = [], b = void 0, x = 0; x < r.length; ++x) {
|
||
var C = r[x], w = C.marker;
|
||
'bookmark' == w.type && C.from == h && w.widgetNode
|
||
? y.push(w)
|
||
: C.from <= h &&
|
||
(null == C.to ||
|
||
C.to > h ||
|
||
(w.collapsed && C.to == h && C.from == h))
|
||
? (null != C.to &&
|
||
C.to != h &&
|
||
v > C.to &&
|
||
((v = C.to), (c = '')), w.className &&
|
||
(l += ' ' + w.className), w.css &&
|
||
(s = (s ? s + ';' : '') + w.css), w.startStyle &&
|
||
C.from == h &&
|
||
(u += ' ' + w.startStyle), w.endStyle &&
|
||
C.to == v &&
|
||
(b || (b = [])).push(w.endStyle, C.to), w.title &&
|
||
!d &&
|
||
(d = w.title), w.collapsed &&
|
||
(!p || compareCollapsedMarkers(p.marker, w) < 0) &&
|
||
(p = C))
|
||
: C.from > h && v > C.from && (v = C.from);
|
||
}
|
||
if (b)
|
||
for (var S = 0; S < b.length; S += 2)
|
||
b[S + 1] == v && (c += ' ' + b[S]);
|
||
if (!p || p.from == h)
|
||
for (var k = 0; k < y.length; ++k)
|
||
buildCollapsedSpan(t, 0, y[k]);
|
||
if (p && (p.from || 0) == h) {
|
||
if (
|
||
(buildCollapsedSpan(
|
||
t,
|
||
(null == p.to ? f + 1 : p.to) - h,
|
||
p.marker,
|
||
null == p.from
|
||
), null == p.to)
|
||
)
|
||
return;
|
||
p.to == h && (p = !1);
|
||
}
|
||
}
|
||
if (h >= f) break;
|
||
for (var L = Math.min(f, v); ; ) {
|
||
if (m) {
|
||
var M = h + m.length;
|
||
if (!p) {
|
||
var T = M > L ? m.slice(0, L - h) : m;
|
||
t.addToken(
|
||
t,
|
||
T,
|
||
a ? a + l : l,
|
||
u,
|
||
h + T.length == v ? c : '',
|
||
d,
|
||
s
|
||
);
|
||
}
|
||
if (M >= L) {
|
||
(m = m.slice(L - h)), (h = L);
|
||
break;
|
||
}
|
||
(h = M), (u = '');
|
||
}
|
||
(m = i.slice(o, (o = n[g++]))), (a = interpretTokenStyle(
|
||
n[g++],
|
||
t.cm.options
|
||
));
|
||
}
|
||
}
|
||
else
|
||
for (var O = 1; O < n.length; O += 2)
|
||
t.addToken(
|
||
t,
|
||
i.slice(o, (o = n[O])),
|
||
interpretTokenStyle(n[O + 1], t.cm.options)
|
||
);
|
||
}
|
||
function LineView(e, t, n) {
|
||
(this.line = t), (this.rest = visualLineContinued(t)), (this.size = this.rest ? lineNo(lst(this.rest)) - n + 1 : 1), (this.node = this.text = null), (this.hidden = lineIsHidden(e, t));
|
||
}
|
||
function buildViewArray(e, t, n) {
|
||
for (var r, i = [], o = t; o < n; o = r) {
|
||
var a = new LineView(e.doc, getLine(e.doc, o), o);
|
||
(r = o + a.size), i.push(a);
|
||
}
|
||
return i;
|
||
}
|
||
function pushOperation(e) {
|
||
re
|
||
? re.ops.push(e)
|
||
: (e.ownsGroup = re = { ops: [e], delayedCallbacks: [] });
|
||
}
|
||
function fireCallbacksForOps(e) {
|
||
var t = e.delayedCallbacks, n = 0;
|
||
do {
|
||
for (; n < t.length; n++) t[n].call(null);
|
||
for (var r = 0; r < e.ops.length; r++) {
|
||
var i = e.ops[r];
|
||
if (i.cursorActivityHandlers)
|
||
for (; i.cursorActivityCalled < i.cursorActivityHandlers.length; )
|
||
i.cursorActivityHandlers[i.cursorActivityCalled++].call(
|
||
null,
|
||
i.cm
|
||
);
|
||
}
|
||
} while (n < t.length);
|
||
}
|
||
function finishOperation(e, t) {
|
||
var n = e.ownsGroup;
|
||
if (n)
|
||
try {
|
||
fireCallbacksForOps(n);
|
||
} finally {
|
||
(re = null), t(n);
|
||
}
|
||
}
|
||
function signalLater(e, t) {
|
||
var n = getHandlers(e, t);
|
||
if (n.length) {
|
||
var r, i = Array.prototype.slice.call(arguments, 2);
|
||
re
|
||
? (r = re.delayedCallbacks)
|
||
: ie ? (r = ie) : ((r = ie = []), setTimeout(fireOrphanDelayed, 0));
|
||
for (var o = 0; o < n.length; ++o)
|
||
!(function(e) {
|
||
r.push(function() {
|
||
return n[e].apply(null, i);
|
||
});
|
||
})(o);
|
||
}
|
||
}
|
||
function fireOrphanDelayed() {
|
||
var e = ie;
|
||
ie = null;
|
||
for (var t = 0; t < e.length; ++t) e[t]();
|
||
}
|
||
function updateLineForChanges(e, t, n, r) {
|
||
for (var i = 0; i < t.changes.length; i++) {
|
||
var o = t.changes[i];
|
||
'text' == o
|
||
? updateLineText(e, t)
|
||
: 'gutter' == o
|
||
? updateLineGutter(e, t, n, r)
|
||
: 'class' == o
|
||
? updateLineClasses(e, t)
|
||
: 'widget' == o && updateLineWidgets(e, t, r);
|
||
}
|
||
t.changes = null;
|
||
}
|
||
function ensureLineWrapped(e) {
|
||
return e.node == e.text &&
|
||
((e.node = elt('div', null, null, 'position: relative')), e.text
|
||
.parentNode &&
|
||
e.text.parentNode.replaceChild(e.node, e.text), e.node.appendChild(
|
||
e.text
|
||
), a && s < 8 && (e.node.style.zIndex = 2)), e.node;
|
||
}
|
||
function updateLineBackground(e, t) {
|
||
var n = t.bgClass
|
||
? t.bgClass + ' ' + (t.line.bgClass || '')
|
||
: t.line.bgClass;
|
||
if ((n && (n += ' CodeMirror-linebackground'), t.background))
|
||
n
|
||
? (t.background.className = n)
|
||
: (t.background.parentNode.removeChild(
|
||
t.background
|
||
), (t.background = null));
|
||
else if (n) {
|
||
var r = ensureLineWrapped(t);
|
||
(t.background = r.insertBefore(
|
||
elt('div', null, n),
|
||
r.firstChild
|
||
)), e.display.input.setUneditable(t.background);
|
||
}
|
||
}
|
||
function getLineContent(e, t) {
|
||
var n = e.display.externalMeasured;
|
||
return n && n.line == t.line
|
||
? ((e.display.externalMeasured = null), (t.measure =
|
||
n.measure), n.built)
|
||
: buildLineContent(e, t);
|
||
}
|
||
function updateLineText(e, t) {
|
||
var n = t.text.className, r = getLineContent(e, t);
|
||
t.text == t.node &&
|
||
(t.node =
|
||
r.pre), t.text.parentNode.replaceChild(r.pre, t.text), (t.text = r.pre), r.bgClass != t.bgClass || r.textClass != t.textClass ? ((t.bgClass = r.bgClass), (t.textClass = r.textClass), updateLineClasses(e, t)) : n && (t.text.className = n);
|
||
}
|
||
function updateLineClasses(e, t) {
|
||
updateLineBackground(
|
||
e,
|
||
t
|
||
), t.line.wrapClass ? (ensureLineWrapped(t).className = t.line.wrapClass) : t.node != t.text && (t.node.className = '');
|
||
var n = t.textClass
|
||
? t.textClass + ' ' + (t.line.textClass || '')
|
||
: t.line.textClass;
|
||
t.text.className = n || '';
|
||
}
|
||
function updateLineGutter(e, t, n, r) {
|
||
if (
|
||
(t.gutter &&
|
||
(t.node.removeChild(
|
||
t.gutter
|
||
), (t.gutter = null)), t.gutterBackground &&
|
||
(t.node.removeChild(
|
||
t.gutterBackground
|
||
), (t.gutterBackground = null)), t.line.gutterClass)
|
||
) {
|
||
var i = ensureLineWrapped(t);
|
||
(t.gutterBackground = elt(
|
||
'div',
|
||
null,
|
||
'CodeMirror-gutter-background ' + t.line.gutterClass,
|
||
'left: ' +
|
||
(e.options.fixedGutter ? r.fixedPos : -r.gutterTotalWidth) +
|
||
'px; width: ' +
|
||
r.gutterTotalWidth +
|
||
'px'
|
||
)), e.display.input.setUneditable(t.gutterBackground), i.insertBefore(
|
||
t.gutterBackground,
|
||
t.text
|
||
);
|
||
}
|
||
var o = t.line.gutterMarkers;
|
||
if (e.options.lineNumbers || o) {
|
||
var a = ensureLineWrapped(t),
|
||
s = (t.gutter = elt(
|
||
'div',
|
||
null,
|
||
'CodeMirror-gutter-wrapper',
|
||
'left: ' +
|
||
(e.options.fixedGutter ? r.fixedPos : -r.gutterTotalWidth) +
|
||
'px'
|
||
));
|
||
if (
|
||
(e.display.input.setUneditable(s), a.insertBefore(s, t.text), t.line
|
||
.gutterClass && (s.className += ' ' + t.line.gutterClass), !e
|
||
.options.lineNumbers ||
|
||
(o && o['CodeMirror-linenumbers']) ||
|
||
(t.lineNumber = s.appendChild(
|
||
elt(
|
||
'div',
|
||
lineNumberFor(e.options, n),
|
||
'CodeMirror-linenumber CodeMirror-gutter-elt',
|
||
'left: ' +
|
||
r.gutterLeft['CodeMirror-linenumbers'] +
|
||
'px; width: ' +
|
||
e.display.lineNumInnerWidth +
|
||
'px'
|
||
)
|
||
)), o)
|
||
)
|
||
for (var l = 0; l < e.options.gutters.length; ++l) {
|
||
var c = e.options.gutters[l], u = o.hasOwnProperty(c) && o[c];
|
||
u &&
|
||
s.appendChild(
|
||
elt(
|
||
'div',
|
||
[u],
|
||
'CodeMirror-gutter-elt',
|
||
'left: ' +
|
||
r.gutterLeft[c] +
|
||
'px; width: ' +
|
||
r.gutterWidth[c] +
|
||
'px'
|
||
)
|
||
);
|
||
}
|
||
}
|
||
}
|
||
function updateLineWidgets(e, t, n) {
|
||
t.alignable && (t.alignable = null);
|
||
for (
|
||
var r = t.node.firstChild, i = void 0;
|
||
r;
|
||
r = i
|
||
) (i = r.nextSibling), 'CodeMirror-linewidget' == r.className && t.node.removeChild(r);
|
||
insertLineWidgets(e, t, n);
|
||
}
|
||
function buildLineElement(e, t, n, r) {
|
||
var i = getLineContent(e, t);
|
||
return (t.text = t.node =
|
||
i.pre), i.bgClass && (t.bgClass = i.bgClass), i.textClass && (t.textClass = i.textClass), updateLineClasses(e, t), updateLineGutter(e, t, n, r), insertLineWidgets(e, t, r), t.node;
|
||
}
|
||
function insertLineWidgets(e, t, n) {
|
||
if ((insertLineWidgetsFor(e, t.line, t, n, !0), t.rest))
|
||
for (var r = 0; r < t.rest.length; r++)
|
||
insertLineWidgetsFor(e, t.rest[r], t, n, !1);
|
||
}
|
||
function insertLineWidgetsFor(e, t, n, r, i) {
|
||
if (t.widgets)
|
||
for (
|
||
var o = ensureLineWrapped(n), a = 0, s = t.widgets;
|
||
a < s.length;
|
||
++a
|
||
) {
|
||
var l = s[a], c = elt('div', [l.node], 'CodeMirror-linewidget');
|
||
l.handleMouseEvents ||
|
||
c.setAttribute('cm-ignore-events', 'true'), positionLineWidget(
|
||
l,
|
||
c,
|
||
n,
|
||
r
|
||
), e.display.input.setUneditable(c), i && l.above
|
||
? o.insertBefore(c, n.gutter || n.text)
|
||
: o.appendChild(c), signalLater(l, 'redraw');
|
||
}
|
||
}
|
||
function positionLineWidget(e, t, n, r) {
|
||
if (e.noHScroll) {
|
||
(n.alignable || (n.alignable = [])).push(t);
|
||
var i = r.wrapperWidth;
|
||
(t.style.left = r.fixedPos + 'px'), e.coverGutter ||
|
||
((i -= r.gutterTotalWidth), (t.style.paddingLeft =
|
||
r.gutterTotalWidth + 'px')), (t.style.width = i + 'px');
|
||
}
|
||
e.coverGutter &&
|
||
((t.style.zIndex = 5), (t.style.position = 'relative'), e.noHScroll ||
|
||
(t.style.marginLeft = -r.gutterTotalWidth + 'px'));
|
||
}
|
||
function widgetHeight(e) {
|
||
if (null != e.height) return e.height;
|
||
var t = e.doc.cm;
|
||
if (!t) return 0;
|
||
if (!contains(document.body, e.node)) {
|
||
var n = 'position: relative;';
|
||
e.coverGutter &&
|
||
(n +=
|
||
'margin-left: -' +
|
||
t.display.gutters.offsetWidth +
|
||
'px;'), e.noHScroll &&
|
||
(n +=
|
||
'width: ' +
|
||
t.display.wrapper.clientWidth +
|
||
'px;'), removeChildrenAndAdd(
|
||
t.display.measure,
|
||
elt('div', [e.node], null, n)
|
||
);
|
||
}
|
||
return (e.height = e.node.parentNode.offsetHeight);
|
||
}
|
||
function eventInWidget(e, t) {
|
||
for (
|
||
var n = e_target(t);
|
||
n != e.wrapper;
|
||
n = n.parentNode
|
||
) if (!n || (1 == n.nodeType && 'true' == n.getAttribute('cm-ignore-events')) || (n.parentNode == e.sizer && n != e.mover)) return !0;
|
||
}
|
||
function paddingTop(e) {
|
||
return e.lineSpace.offsetTop;
|
||
}
|
||
function paddingVert(e) {
|
||
return e.mover.offsetHeight - e.lineSpace.offsetHeight;
|
||
}
|
||
function paddingH(e) {
|
||
if (e.cachedPaddingH) return e.cachedPaddingH;
|
||
var t = removeChildrenAndAdd(e.measure, elt('pre', 'x')),
|
||
n = window.getComputedStyle
|
||
? window.getComputedStyle(t)
|
||
: t.currentStyle,
|
||
r = {
|
||
left: parseInt(n.paddingLeft),
|
||
right: parseInt(n.paddingRight)
|
||
};
|
||
return isNaN(r.left) || isNaN(r.right) || (e.cachedPaddingH = r), r;
|
||
}
|
||
function scrollGap(e) {
|
||
return N - e.display.nativeBarWidth;
|
||
}
|
||
function displayWidth(e) {
|
||
return (
|
||
e.display.scroller.clientWidth - scrollGap(e) - e.display.barWidth
|
||
);
|
||
}
|
||
function displayHeight(e) {
|
||
return (
|
||
e.display.scroller.clientHeight - scrollGap(e) - e.display.barHeight
|
||
);
|
||
}
|
||
function ensureLineHeights(e, t, n) {
|
||
var r = e.options.lineWrapping, i = r && displayWidth(e);
|
||
if (!t.measure.heights || (r && t.measure.width != i)) {
|
||
var o = (t.measure.heights = []);
|
||
if (r) {
|
||
t.measure.width = i;
|
||
for (
|
||
var a = t.text.firstChild.getClientRects(), s = 0;
|
||
s < a.length - 1;
|
||
s++
|
||
) {
|
||
var l = a[s], c = a[s + 1];
|
||
Math.abs(l.bottom - c.bottom) > 2 &&
|
||
o.push((l.bottom + c.top) / 2 - n.top);
|
||
}
|
||
}
|
||
o.push(n.bottom - n.top);
|
||
}
|
||
}
|
||
function mapFromLineView(e, t, n) {
|
||
if (e.line == t) return { map: e.measure.map, cache: e.measure.cache };
|
||
for (
|
||
var r = 0;
|
||
r < e.rest.length;
|
||
r++
|
||
) if (e.rest[r] == t) return { map: e.measure.maps[r], cache: e.measure.caches[r] };
|
||
for (
|
||
var i = 0;
|
||
i < e.rest.length;
|
||
i++
|
||
) if (lineNo(e.rest[i]) > n) return { map: e.measure.maps[i], cache: e.measure.caches[i], before: !0 };
|
||
}
|
||
function updateExternalMeasurement(e, t) {
|
||
t = visualLine(t);
|
||
var n = lineNo(t),
|
||
r = (e.display.externalMeasured = new LineView(e.doc, t, n));
|
||
r.lineN = n;
|
||
var i = (r.built = buildLineContent(e, r));
|
||
return (r.text =
|
||
i.pre), removeChildrenAndAdd(e.display.lineMeasure, i.pre), r;
|
||
}
|
||
function measureChar(e, t, n, r) {
|
||
return measureCharPrepared(e, prepareMeasureForLine(e, t), n, r);
|
||
}
|
||
function findViewForLine(e, t) {
|
||
if (t >= e.display.viewFrom && t < e.display.viewTo)
|
||
return e.display.view[findViewIndex(e, t)];
|
||
var n = e.display.externalMeasured;
|
||
return n && t >= n.lineN && t < n.lineN + n.size ? n : void 0;
|
||
}
|
||
function prepareMeasureForLine(e, t) {
|
||
var n = lineNo(t), r = findViewForLine(e, n);
|
||
r && !r.text
|
||
? (r = null)
|
||
: r &&
|
||
r.changes &&
|
||
(updateLineForChanges(
|
||
e,
|
||
r,
|
||
n,
|
||
getDimensions(e)
|
||
), (e.curOp.forceUpdate = !0)), r || (r = updateExternalMeasurement(e, t));
|
||
var i = mapFromLineView(r, t, n);
|
||
return {
|
||
line: t,
|
||
view: r,
|
||
rect: null,
|
||
map: i.map,
|
||
cache: i.cache,
|
||
before: i.before,
|
||
hasHeights: !1
|
||
};
|
||
}
|
||
function measureCharPrepared(e, t, n, r, i) {
|
||
t.before && (n = -1);
|
||
var o, a = n + (r || '');
|
||
return t.cache.hasOwnProperty(a)
|
||
? (o = t.cache[a])
|
||
: (t.rect ||
|
||
(t.rect = t.view.text.getBoundingClientRect()), t.hasHeights ||
|
||
(ensureLineHeights(
|
||
e,
|
||
t.view,
|
||
t.rect
|
||
), (t.hasHeights = !0)), (o = measureCharInner(
|
||
e,
|
||
t,
|
||
n,
|
||
r
|
||
)), o.bogus ||
|
||
(t.cache[
|
||
a
|
||
] = o)), { left: o.left, right: o.right, top: i ? o.rtop : o.top, bottom: i ? o.rbottom : o.bottom };
|
||
}
|
||
function nodeAndOffsetInLineMap(e, t, n) {
|
||
for (var r, i, o, a, s, l, c = 0; c < e.length; c += 3) if (
|
||
((s = e[c]), (l = e[c + 1]), t < s
|
||
? ((i = 0), (o = 1), (a = 'left'))
|
||
: t < l
|
||
? ((i = t - s), (o = i + 1))
|
||
: (c == e.length - 3 || (t == l && e[c + 3] > t)) &&
|
||
((o = l - s), (i = o - 1), t >= l &&
|
||
(a = 'right')), null != i)
|
||
) {
|
||
if (
|
||
((r = e[c + 2]), s == l &&
|
||
n == (r.insertLeft ? 'left' : 'right') &&
|
||
(a = n), 'left' == n && 0 == i)
|
||
)
|
||
for (; c && e[c - 2] == e[c - 3] && e[c - 1].insertLeft; )
|
||
(r = e[2 + (c -= 3)]), (a = 'left');
|
||
if ('right' == n && i == l - s)
|
||
for (
|
||
;
|
||
c < e.length - 3 &&
|
||
e[c + 3] == e[c + 4] &&
|
||
!e[c + 5].insertLeft;
|
||
|
||
)
|
||
(r = e[(c += 3) + 2]), (a = 'right');
|
||
break;
|
||
}
|
||
return {
|
||
node: r,
|
||
start: i,
|
||
end: o,
|
||
collapse: a,
|
||
coverStart: s,
|
||
coverEnd: l
|
||
};
|
||
}
|
||
function getUsefulRect(e, t) {
|
||
var n = oe;
|
||
if ('left' == t)
|
||
for (var r = 0; r < e.length && (n = e[r]).left == n.right; r++);
|
||
else
|
||
for (var i = e.length - 1; i >= 0 && (n = e[i]).left == n.right; i--);
|
||
return n;
|
||
}
|
||
function measureCharInner(e, t, n, r) {
|
||
var i,
|
||
o = nodeAndOffsetInLineMap(t.map, n, r),
|
||
l = o.node,
|
||
c = o.start,
|
||
u = o.end,
|
||
d = o.collapse;
|
||
if (3 == l.nodeType) {
|
||
for (var p = 0; p < 4; p++) {
|
||
for (; c && isExtendingChar(t.line.text.charAt(o.coverStart + c)); )
|
||
--c;
|
||
for (
|
||
;
|
||
o.coverStart + u < o.coverEnd &&
|
||
isExtendingChar(t.line.text.charAt(o.coverStart + u));
|
||
|
||
)
|
||
++u;
|
||
if (
|
||
((i = a && s < 9 && 0 == c && u == o.coverEnd - o.coverStart
|
||
? l.parentNode.getBoundingClientRect()
|
||
: getUsefulRect(w(l, c, u).getClientRects(), r)), i.left ||
|
||
i.right ||
|
||
0 == c)
|
||
)
|
||
break;
|
||
(u = c), (c -= 1), (d = 'right');
|
||
}
|
||
a && s < 11 && (i = maybeUpdateRectForZooming(e.display.measure, i));
|
||
} else {
|
||
c > 0 && (d = r = 'right');
|
||
var f;
|
||
i = e.options.lineWrapping && (f = l.getClientRects()).length > 1
|
||
? f['right' == r ? f.length - 1 : 0]
|
||
: l.getBoundingClientRect();
|
||
}
|
||
if (a && s < 9 && !c && (!i || (!i.left && !i.right))) {
|
||
var h = l.parentNode.getClientRects()[0];
|
||
i = h
|
||
? {
|
||
left: h.left,
|
||
right: h.left + charWidth(e.display),
|
||
top: h.top,
|
||
bottom: h.bottom
|
||
}
|
||
: oe;
|
||
}
|
||
for (
|
||
var g = i.top - t.rect.top,
|
||
m = i.bottom - t.rect.top,
|
||
v = (g + m) / 2,
|
||
y = t.view.measure.heights,
|
||
b = 0;
|
||
b < y.length - 1 && !(v < y[b]);
|
||
b++
|
||
);
|
||
var x = b ? y[b - 1] : 0,
|
||
C = y[b],
|
||
S = {
|
||
left: ('right' == d ? i.right : i.left) - t.rect.left,
|
||
right: ('left' == d ? i.left : i.right) - t.rect.left,
|
||
top: x,
|
||
bottom: C
|
||
};
|
||
return i.left ||
|
||
i.right ||
|
||
(S.bogus = !0), e.options.singleCursorHeightPerLine || ((S.rtop = g), (S.rbottom = m)), S;
|
||
}
|
||
function maybeUpdateRectForZooming(e, t) {
|
||
if (
|
||
!window.screen ||
|
||
null == screen.logicalXDPI ||
|
||
screen.logicalXDPI == screen.deviceXDPI ||
|
||
!hasBadZoomedRects(e)
|
||
)
|
||
return t;
|
||
var n = screen.logicalXDPI / screen.deviceXDPI,
|
||
r = screen.logicalYDPI / screen.deviceYDPI;
|
||
return {
|
||
left: t.left * n,
|
||
right: t.right * n,
|
||
top: t.top * r,
|
||
bottom: t.bottom * r
|
||
};
|
||
}
|
||
function clearLineMeasurementCacheFor(e) {
|
||
if (
|
||
e.measure &&
|
||
((e.measure.cache = {}), (e.measure.heights = null), e.rest)
|
||
)
|
||
for (var t = 0; t < e.rest.length; t++)
|
||
e.measure.caches[t] = {};
|
||
}
|
||
function clearLineMeasurementCache(e) {
|
||
(e.display.externalMeasure = null), removeChildren(e.display.lineMeasure);
|
||
for (
|
||
var t = 0;
|
||
t < e.display.view.length;
|
||
t++
|
||
) clearLineMeasurementCacheFor(e.display.view[t]);
|
||
}
|
||
function clearCaches(e) {
|
||
clearLineMeasurementCache(
|
||
e
|
||
), (e.display.cachedCharWidth = e.display.cachedTextHeight = e.display.cachedPaddingH = null), e.options.lineWrapping || (e.display.maxLineChanged = !0), (e.display.lineNumChars = null);
|
||
}
|
||
function pageScrollX() {
|
||
return u && m
|
||
? -(document.body.getBoundingClientRect().left -
|
||
parseInt(getComputedStyle(document.body).marginLeft))
|
||
: window.pageXOffset ||
|
||
(document.documentElement || document.body).scrollLeft;
|
||
}
|
||
function pageScrollY() {
|
||
return u && m
|
||
? -(document.body.getBoundingClientRect().top -
|
||
parseInt(getComputedStyle(document.body).marginTop))
|
||
: window.pageYOffset ||
|
||
(document.documentElement || document.body).scrollTop;
|
||
}
|
||
function intoCoordSystem(e, t, n, r, i) {
|
||
if (!i && t.widgets)
|
||
for (var o = 0; o < t.widgets.length; ++o)
|
||
if (t.widgets[o].above) {
|
||
var a = widgetHeight(t.widgets[o]);
|
||
(n.top += a), (n.bottom += a);
|
||
}
|
||
if ('line' == r) return n;
|
||
r || (r = 'local');
|
||
var s = heightAtLine(t);
|
||
if (
|
||
('local' == r
|
||
? (s += paddingTop(e.display))
|
||
: (s -= e.display.viewOffset), 'page' == r || 'window' == r)
|
||
) {
|
||
var l = e.display.lineSpace.getBoundingClientRect();
|
||
s += l.top + ('window' == r ? 0 : pageScrollY());
|
||
var c = l.left + ('window' == r ? 0 : pageScrollX());
|
||
(n.left += c), (n.right += c);
|
||
}
|
||
return (n.top += s), (n.bottom += s), n;
|
||
}
|
||
function fromCoordSystem(e, t, n) {
|
||
if ('div' == n) return t;
|
||
var r = t.left, i = t.top;
|
||
if ('page' == n) (r -= pageScrollX()), (i -= pageScrollY());
|
||
else if ('local' == n || !n) {
|
||
var o = e.display.sizer.getBoundingClientRect();
|
||
(r += o.left), (i += o.top);
|
||
}
|
||
var a = e.display.lineSpace.getBoundingClientRect();
|
||
return { left: r - a.left, top: i - a.top };
|
||
}
|
||
function charCoords(e, t, n, r, i) {
|
||
return r ||
|
||
(r = getLine(
|
||
e.doc,
|
||
t.line
|
||
)), intoCoordSystem(e, r, measureChar(e, r, t.ch, i), n);
|
||
}
|
||
function cursorCoords(e, t, n, r, i, o) {
|
||
function get(t, a) {
|
||
var s = measureCharPrepared(e, i, t, a ? 'right' : 'left', o);
|
||
return a
|
||
? (s.left = s.right)
|
||
: (s.right = s.left), intoCoordSystem(e, r, s, n);
|
||
}
|
||
function getBidi(e, t, n) {
|
||
var r = a[t], i = r.level % 2 != 0;
|
||
return get(n ? e - 1 : e, i != n);
|
||
}
|
||
(r =
|
||
r || getLine(e.doc, t.line)), i || (i = prepareMeasureForLine(e, r));
|
||
var a = getOrder(r, e.doc.direction), s = t.ch, l = t.sticky;
|
||
if (
|
||
(s >= r.text.length
|
||
? ((s = r.text.length), (l = 'before'))
|
||
: s <= 0 && ((s = 0), (l = 'after')), !a)
|
||
)
|
||
return get('before' == l ? s - 1 : s, 'before' == l);
|
||
var c = getBidiPartAt(a, s, l), u = R, d = getBidi(s, c, 'before' == l);
|
||
return null != u && (d.other = getBidi(s, u, 'before' != l)), d;
|
||
}
|
||
function estimateCoords(e, t) {
|
||
var n = 0;
|
||
(t = clipPos(
|
||
e.doc,
|
||
t
|
||
)), e.options.lineWrapping || (n = charWidth(e.display) * t.ch);
|
||
var r = getLine(e.doc, t.line),
|
||
i = heightAtLine(r) + paddingTop(e.display);
|
||
return { left: n, right: n, top: i, bottom: i + r.height };
|
||
}
|
||
function PosWithInfo(e, t, n, r, i) {
|
||
var o = Pos(e, t, n);
|
||
return (o.xRel = i), r && (o.outside = !0), o;
|
||
}
|
||
function coordsChar(e, t, n) {
|
||
var r = e.doc;
|
||
if ((n += e.display.viewOffset) < 0)
|
||
return PosWithInfo(r.first, 0, null, !0, -1);
|
||
var i = lineAtHeight(r, n), o = r.first + r.size - 1;
|
||
if (i > o)
|
||
return PosWithInfo(
|
||
r.first + r.size - 1,
|
||
getLine(r, o).text.length,
|
||
null,
|
||
!0,
|
||
1
|
||
);
|
||
t < 0 && (t = 0);
|
||
for (var a = getLine(r, i); ; ) {
|
||
var s = coordsCharInner(e, a, i, t, n),
|
||
l = collapsedSpanAtEnd(a),
|
||
c = l && l.find(0, !0);
|
||
if (!l || !(s.ch > c.from.ch || (s.ch == c.from.ch && s.xRel > 0)))
|
||
return s;
|
||
i = lineNo((a = c.to.line));
|
||
}
|
||
}
|
||
function wrappedLineExtent(e, t, n, r) {
|
||
var i = function(r) {
|
||
return intoCoordSystem(e, t, measureCharPrepared(e, n, r), 'line');
|
||
},
|
||
o = t.text.length,
|
||
a = findFirst(
|
||
function(e) {
|
||
return i(e - 1).bottom <= r;
|
||
},
|
||
o,
|
||
0
|
||
);
|
||
return (o = findFirst(
|
||
function(e) {
|
||
return i(e).top > r;
|
||
},
|
||
a,
|
||
o
|
||
)), { begin: a, end: o };
|
||
}
|
||
function wrappedLineExtentChar(e, t, n, r) {
|
||
return wrappedLineExtent(
|
||
e,
|
||
t,
|
||
n,
|
||
intoCoordSystem(e, t, measureCharPrepared(e, n, r), 'line').top
|
||
);
|
||
}
|
||
function coordsCharInner(e, t, n, r, i) {
|
||
i -= heightAtLine(t);
|
||
var o, a = 0, s = t.text.length, l = prepareMeasureForLine(e, t);
|
||
if (getOrder(t, e.doc.direction)) {
|
||
if (e.options.lineWrapping) {
|
||
var c;
|
||
(c = wrappedLineExtent(e, t, l, i)), (a = c.begin), (s = c.end);
|
||
}
|
||
o = new Pos(n, a);
|
||
var u,
|
||
d,
|
||
p = cursorCoords(e, o, 'line', t, l).left,
|
||
f = p < r ? 1 : -1,
|
||
h = p - r;
|
||
do {
|
||
if (
|
||
((u = h), (d = o), null == (o = moveVisually(e, t, o, f)) ||
|
||
o.ch < a ||
|
||
s <= ('before' == o.sticky ? o.ch - 1 : o.ch))
|
||
) {
|
||
o = d;
|
||
break;
|
||
}
|
||
h = cursorCoords(e, o, 'line', t, l).left - r;
|
||
} while (f < 0 != h < 0 && Math.abs(h) <= Math.abs(u));
|
||
if (Math.abs(h) > Math.abs(u)) {
|
||
if (h < 0 == u < 0)
|
||
throw new Error('Broke out of infinite loop in coordsCharInner');
|
||
o = d;
|
||
}
|
||
} else {
|
||
var g = findFirst(
|
||
function(n) {
|
||
var o = intoCoordSystem(
|
||
e,
|
||
t,
|
||
measureCharPrepared(e, l, n),
|
||
'line'
|
||
);
|
||
return o.top > i
|
||
? ((s = Math.min(n, s)), !0)
|
||
: !(o.bottom <= i) &&
|
||
(o.left > r ||
|
||
(!(o.right < r) && r - o.left < o.right - r));
|
||
},
|
||
a,
|
||
s
|
||
);
|
||
(g = skipExtendingChars(t.text, g, 1)), (o = new Pos(
|
||
n,
|
||
g,
|
||
g == s ? 'before' : 'after'
|
||
));
|
||
}
|
||
var m = cursorCoords(e, o, 'line', t, l);
|
||
return (i < m.top || m.bottom < i) &&
|
||
(o.outside = !0), (o.xRel = r < m.left ? -1 : r > m.right ? 1 : 0), o;
|
||
}
|
||
function textHeight(e) {
|
||
if (null != e.cachedTextHeight) return e.cachedTextHeight;
|
||
if (null == ee) {
|
||
ee = elt('pre');
|
||
for (var t = 0; t < 49; ++t)
|
||
ee.appendChild(document.createTextNode('x')), ee.appendChild(
|
||
elt('br')
|
||
);
|
||
ee.appendChild(document.createTextNode('x'));
|
||
}
|
||
removeChildrenAndAdd(e.measure, ee);
|
||
var n = ee.offsetHeight / 50;
|
||
return n > 3 &&
|
||
(e.cachedTextHeight = n), removeChildren(e.measure), n || 1;
|
||
}
|
||
function charWidth(e) {
|
||
if (null != e.cachedCharWidth) return e.cachedCharWidth;
|
||
var t = elt('span', 'xxxxxxxxxx'), n = elt('pre', [t]);
|
||
removeChildrenAndAdd(e.measure, n);
|
||
var r = t.getBoundingClientRect(), i = (r.right - r.left) / 10;
|
||
return i > 2 && (e.cachedCharWidth = i), i || 10;
|
||
}
|
||
function getDimensions(e) {
|
||
for (
|
||
var t = e.display,
|
||
n = {},
|
||
r = {},
|
||
i = t.gutters.clientLeft,
|
||
o = t.gutters.firstChild,
|
||
a = 0;
|
||
o;
|
||
(o = o.nextSibling), ++a
|
||
) (n[e.options.gutters[a]] = o.offsetLeft + o.clientLeft + i), (r[e.options.gutters[a]] = o.clientWidth);
|
||
return {
|
||
fixedPos: compensateForHScroll(t),
|
||
gutterTotalWidth: t.gutters.offsetWidth,
|
||
gutterLeft: n,
|
||
gutterWidth: r,
|
||
wrapperWidth: t.wrapper.clientWidth
|
||
};
|
||
}
|
||
function compensateForHScroll(e) {
|
||
return (
|
||
e.scroller.getBoundingClientRect().left -
|
||
e.sizer.getBoundingClientRect().left
|
||
);
|
||
}
|
||
function estimateHeight(e) {
|
||
var t = textHeight(e.display),
|
||
n = e.options.lineWrapping,
|
||
r =
|
||
n &&
|
||
Math.max(
|
||
5,
|
||
e.display.scroller.clientWidth / charWidth(e.display) - 3
|
||
);
|
||
return function(i) {
|
||
if (lineIsHidden(e.doc, i)) return 0;
|
||
var o = 0;
|
||
if (i.widgets)
|
||
for (var a = 0; a < i.widgets.length; a++)
|
||
i.widgets[a].height && (o += i.widgets[a].height);
|
||
return n ? o + (Math.ceil(i.text.length / r) || 1) * t : o + t;
|
||
};
|
||
}
|
||
function estimateLineHeights(e) {
|
||
var t = e.doc, n = estimateHeight(e);
|
||
t.iter(function(e) {
|
||
var t = n(e);
|
||
t != e.height && updateLineHeight(e, t);
|
||
});
|
||
}
|
||
function posFromMouse(e, t, n, r) {
|
||
var i = e.display;
|
||
if (!n && 'true' == e_target(t).getAttribute('cm-not-content'))
|
||
return null;
|
||
var o, a, s = i.lineSpace.getBoundingClientRect();
|
||
try {
|
||
(o = t.clientX - s.left), (a = t.clientY - s.top);
|
||
} catch (t) {
|
||
return null;
|
||
}
|
||
var l, c = coordsChar(e, o, a);
|
||
if (
|
||
r &&
|
||
1 == c.xRel &&
|
||
(l = getLine(e.doc, c.line).text).length == c.ch
|
||
) {
|
||
var u = countColumn(l, l.length, e.options.tabSize) - l.length;
|
||
c = Pos(
|
||
c.line,
|
||
Math.max(
|
||
0,
|
||
Math.round(
|
||
(o - paddingH(e.display).left) / charWidth(e.display)
|
||
) - u
|
||
)
|
||
);
|
||
}
|
||
return c;
|
||
}
|
||
function findViewIndex(e, t) {
|
||
if (t >= e.display.viewTo) return null;
|
||
if ((t -= e.display.viewFrom) < 0) return null;
|
||
for (
|
||
var n = e.display.view, r = 0;
|
||
r < n.length;
|
||
r++
|
||
) if ((t -= n[r].size) < 0) return r;
|
||
}
|
||
function updateSelection(e) {
|
||
e.display.input.showSelection(e.display.input.prepareSelection());
|
||
}
|
||
function prepareSelection(e, t) {
|
||
for (
|
||
var n = e.doc,
|
||
r = {},
|
||
i = (r.cursors = document.createDocumentFragment()),
|
||
o = (r.selection = document.createDocumentFragment()),
|
||
a = 0;
|
||
a < n.sel.ranges.length;
|
||
a++
|
||
) if (!1 !== t || a != n.sel.primIndex) {
|
||
var s = n.sel.ranges[a];
|
||
if (
|
||
!(s.from().line >= e.display.viewTo ||
|
||
s.to().line < e.display.viewFrom)
|
||
) {
|
||
var l = s.empty();
|
||
(l || e.options.showCursorWhenSelecting) &&
|
||
drawSelectionCursor(e, s.head, i), l ||
|
||
drawSelectionRange(e, s, o);
|
||
}
|
||
}
|
||
return r;
|
||
}
|
||
function drawSelectionCursor(e, t, n) {
|
||
var r = cursorCoords(
|
||
e,
|
||
t,
|
||
'div',
|
||
null,
|
||
null,
|
||
!e.options.singleCursorHeightPerLine
|
||
),
|
||
i = n.appendChild(elt('div', ' ', 'CodeMirror-cursor'));
|
||
if (
|
||
((i.style.left = r.left + 'px'), (i.style.top =
|
||
r.top + 'px'), (i.style.height =
|
||
Math.max(0, r.bottom - r.top) * e.options.cursorHeight +
|
||
'px'), r.other)
|
||
) {
|
||
var o = n.appendChild(
|
||
elt('div', ' ', 'CodeMirror-cursor CodeMirror-secondarycursor')
|
||
);
|
||
(o.style.display = ''), (o.style.left =
|
||
r.other.left + 'px'), (o.style.top =
|
||
r.other.top + 'px'), (o.style.height =
|
||
0.85 * (r.other.bottom - r.other.top) + 'px');
|
||
}
|
||
}
|
||
function drawSelectionRange(e, t, n) {
|
||
function add(e, t, n, r) {
|
||
t < 0 &&
|
||
(t = 0), (t = Math.round(t)), (r = Math.round(r)), o.appendChild(elt('div', null, 'CodeMirror-selected', 'position: absolute; left: ' + e + 'px;\n top: ' + t + 'px; width: ' + (null == n ? l - e : n) + 'px;\n height: ' + (r - t) + 'px'));
|
||
}
|
||
function drawForLine(t, n, r) {
|
||
function coords(n, r) {
|
||
return charCoords(e, Pos(t, n), 'div', c, r);
|
||
}
|
||
var o, a, c = getLine(i, t), u = c.text.length;
|
||
return iterateBidiSections(
|
||
getOrder(c, i.direction),
|
||
n || 0,
|
||
null == r ? u : r,
|
||
function(e, t, i) {
|
||
var c, d, p, f = coords(e, 'left');
|
||
if (e == t) (c = f), (d = p = f.left);
|
||
else {
|
||
if (((c = coords(t - 1, 'right')), 'rtl' == i)) {
|
||
var h = f;
|
||
(f = c), (c = h);
|
||
}
|
||
(d = f.left), (p = c.right);
|
||
}
|
||
null == n && 0 == e && (d = s), c.top - f.top > 3 &&
|
||
(add(d, f.top, null, f.bottom), (d = s), f.bottom < c.top &&
|
||
add(d, f.bottom, null, c.top)), null == r &&
|
||
t == u &&
|
||
(p = l), (!o ||
|
||
f.top < o.top ||
|
||
(f.top == o.top && f.left < o.left)) &&
|
||
(o = f), (!a ||
|
||
c.bottom > a.bottom ||
|
||
(c.bottom == a.bottom && c.right > a.right)) &&
|
||
(a = c), d < s + 1 && (d = s), add(d, c.top, p - d, c.bottom);
|
||
}
|
||
), { start: o, end: a };
|
||
}
|
||
var r = e.display,
|
||
i = e.doc,
|
||
o = document.createDocumentFragment(),
|
||
a = paddingH(e.display),
|
||
s = a.left,
|
||
l =
|
||
Math.max(r.sizerWidth, displayWidth(e) - r.sizer.offsetLeft) -
|
||
a.right,
|
||
c = t.from(),
|
||
u = t.to();
|
||
if (c.line == u.line) drawForLine(c.line, c.ch, u.ch);
|
||
else {
|
||
var d = getLine(i, c.line),
|
||
p = getLine(i, u.line),
|
||
f = visualLine(d) == visualLine(p),
|
||
h = drawForLine(c.line, c.ch, f ? d.text.length + 1 : null).end,
|
||
g = drawForLine(u.line, f ? 0 : null, u.ch).start;
|
||
f &&
|
||
(h.top < g.top - 2
|
||
? (add(h.right, h.top, null, h.bottom), add(
|
||
s,
|
||
g.top,
|
||
g.left,
|
||
g.bottom
|
||
))
|
||
: add(h.right, h.top, g.left - h.right, h.bottom)), h.bottom <
|
||
g.top && add(s, h.bottom, null, g.top);
|
||
}
|
||
n.appendChild(o);
|
||
}
|
||
function restartBlink(e) {
|
||
if (e.state.focused) {
|
||
var t = e.display;
|
||
clearInterval(t.blinker);
|
||
var n = !0;
|
||
(t.cursorDiv.style.visibility = ''), e.options.cursorBlinkRate > 0
|
||
? (t.blinker = setInterval(function() {
|
||
return (t.cursorDiv.style.visibility = (n = !n)
|
||
? ''
|
||
: 'hidden');
|
||
}, e.options.cursorBlinkRate))
|
||
: e.options.cursorBlinkRate < 0 &&
|
||
(t.cursorDiv.style.visibility = 'hidden');
|
||
}
|
||
}
|
||
function ensureFocus(e) {
|
||
e.state.focused || (e.display.input.focus(), onFocus(e));
|
||
}
|
||
function delayBlurEvent(e) {
|
||
(e.state.delayingBlurEvent = !0), setTimeout(function() {
|
||
e.state.delayingBlurEvent &&
|
||
((e.state.delayingBlurEvent = !1), onBlur(e));
|
||
}, 100);
|
||
}
|
||
function onFocus(e, t) {
|
||
e.state.delayingBlurEvent &&
|
||
(e.state.delayingBlurEvent = !1), 'nocursor' != e.options.readOnly &&
|
||
(e.state.focused ||
|
||
(signal(e, 'focus', e, t), (e.state.focused = !0), addClass(
|
||
e.display.wrapper,
|
||
'CodeMirror-focused'
|
||
), e.curOp ||
|
||
e.display.selForContextMenu == e.doc.sel ||
|
||
(e.display.input.reset(), l &&
|
||
setTimeout(function() {
|
||
return e.display.input.reset(!0);
|
||
}, 20)), e.display.input.receivedFocus()), restartBlink(e));
|
||
}
|
||
function onBlur(e, t) {
|
||
e.state.delayingBlurEvent ||
|
||
(e.state.focused &&
|
||
(signal(e, 'blur', e, t), (e.state.focused = !1), L(
|
||
e.display.wrapper,
|
||
'CodeMirror-focused'
|
||
)), clearInterval(e.display.blinker), setTimeout(function() {
|
||
e.state.focused || (e.display.shift = !1);
|
||
}, 150));
|
||
}
|
||
function updateHeightsInViewport(e) {
|
||
for (
|
||
var t = e.display, n = t.lineDiv.offsetTop, r = 0;
|
||
r < t.view.length;
|
||
r++
|
||
) {
|
||
var i = t.view[r], o = void 0;
|
||
if (!i.hidden) {
|
||
if (a && s < 8) {
|
||
var l = i.node.offsetTop + i.node.offsetHeight;
|
||
(o = l - n), (n = l);
|
||
} else {
|
||
var c = i.node.getBoundingClientRect();
|
||
o = c.bottom - c.top;
|
||
}
|
||
var u = i.line.height - o;
|
||
if (
|
||
(o < 2 && (o = textHeight(t)), (u > 0.001 || u < -0.001) &&
|
||
(updateLineHeight(i.line, o), updateWidgetHeight(
|
||
i.line
|
||
), i.rest))
|
||
)
|
||
for (var d = 0; d < i.rest.length; d++)
|
||
updateWidgetHeight(i.rest[d]);
|
||
}
|
||
}
|
||
}
|
||
function updateWidgetHeight(e) {
|
||
if (e.widgets)
|
||
for (var t = 0; t < e.widgets.length; ++t)
|
||
e.widgets[t].height = e.widgets[t].node.parentNode.offsetHeight;
|
||
}
|
||
function visibleLines(e, t, n) {
|
||
var r = n && null != n.top ? Math.max(0, n.top) : e.scroller.scrollTop;
|
||
r = Math.floor(r - paddingTop(e));
|
||
var i = n && null != n.bottom ? n.bottom : r + e.wrapper.clientHeight,
|
||
o = lineAtHeight(t, r),
|
||
a = lineAtHeight(t, i);
|
||
if (n && n.ensure) {
|
||
var s = n.ensure.from.line, l = n.ensure.to.line;
|
||
s < o
|
||
? ((o = s), (a = lineAtHeight(
|
||
t,
|
||
heightAtLine(getLine(t, s)) + e.wrapper.clientHeight
|
||
)))
|
||
: Math.min(l, t.lastLine()) >= a &&
|
||
((o = lineAtHeight(
|
||
t,
|
||
heightAtLine(getLine(t, l)) - e.wrapper.clientHeight
|
||
)), (a = l));
|
||
}
|
||
return { from: o, to: Math.max(a, o + 1) };
|
||
}
|
||
function alignHorizontally(e) {
|
||
var t = e.display, n = t.view;
|
||
if (t.alignWidgets || (t.gutters.firstChild && e.options.fixedGutter)) {
|
||
for (
|
||
var r =
|
||
compensateForHScroll(t) -
|
||
t.scroller.scrollLeft +
|
||
e.doc.scrollLeft,
|
||
i = t.gutters.offsetWidth,
|
||
o = r + 'px',
|
||
a = 0;
|
||
a < n.length;
|
||
a++
|
||
)
|
||
if (!n[a].hidden) {
|
||
e.options.fixedGutter &&
|
||
(n[a].gutter && (n[a].gutter.style.left = o), n[a]
|
||
.gutterBackground && (n[a].gutterBackground.style.left = o));
|
||
var s = n[a].alignable;
|
||
if (s) for (var l = 0; l < s.length; l++) s[l].style.left = o;
|
||
}
|
||
e.options.fixedGutter && (t.gutters.style.left = r + i + 'px');
|
||
}
|
||
}
|
||
function maybeUpdateLineNumberWidth(e) {
|
||
if (!e.options.lineNumbers) return !1;
|
||
var t = e.doc,
|
||
n = lineNumberFor(e.options, t.first + t.size - 1),
|
||
r = e.display;
|
||
if (n.length != r.lineNumChars) {
|
||
var i = r.measure.appendChild(
|
||
elt(
|
||
'div',
|
||
[elt('div', n)],
|
||
'CodeMirror-linenumber CodeMirror-gutter-elt'
|
||
)
|
||
),
|
||
o = i.firstChild.offsetWidth,
|
||
a = i.offsetWidth - o;
|
||
return (r.lineGutter.style.width = ''), (r.lineNumInnerWidth =
|
||
Math.max(o, r.lineGutter.offsetWidth - a) + 1), (r.lineNumWidth =
|
||
r.lineNumInnerWidth + a), (r.lineNumChars = r.lineNumInnerWidth
|
||
? n.length
|
||
: -1), (r.lineGutter.style.width =
|
||
r.lineNumWidth + 'px'), updateGutterSpace(e), !0;
|
||
}
|
||
return !1;
|
||
}
|
||
function maybeScrollWindow(e, t) {
|
||
if (!signalDOMEvent(e, 'scrollCursorIntoView')) {
|
||
var n = e.display, r = n.sizer.getBoundingClientRect(), i = null;
|
||
if (
|
||
(t.top + r.top < 0
|
||
? (i = !0)
|
||
: t.bottom + r.top >
|
||
(window.innerHeight ||
|
||
document.documentElement.clientHeight) && (i = !1), null !=
|
||
i && !h)
|
||
) {
|
||
var o = elt(
|
||
'div',
|
||
'',
|
||
null,
|
||
'position: absolute;\n top: ' +
|
||
(t.top - n.viewOffset - paddingTop(e.display)) +
|
||
'px;\n height: ' +
|
||
(t.bottom - t.top + scrollGap(e) + n.barHeight) +
|
||
'px;\n left: ' +
|
||
t.left +
|
||
'px; width: ' +
|
||
Math.max(2, t.right - t.left) +
|
||
'px;'
|
||
);
|
||
e.display.lineSpace.appendChild(o), o.scrollIntoView(
|
||
i
|
||
), e.display.lineSpace.removeChild(o);
|
||
}
|
||
}
|
||
}
|
||
function scrollPosIntoView(e, t, n, r) {
|
||
null == r && (r = 0);
|
||
for (var i, o = 0; o < 5; o++) {
|
||
var a = !1,
|
||
s = cursorCoords(e, t),
|
||
l = n && n != t ? cursorCoords(e, n) : s;
|
||
i = {
|
||
left: Math.min(s.left, l.left),
|
||
top: Math.min(s.top, l.top) - r,
|
||
right: Math.max(s.left, l.left),
|
||
bottom: Math.max(s.bottom, l.bottom) + r
|
||
};
|
||
var c = calculateScrollPos(e, i),
|
||
u = e.doc.scrollTop,
|
||
d = e.doc.scrollLeft;
|
||
if (
|
||
(null != c.scrollTop &&
|
||
(updateScrollTop(e, c.scrollTop), Math.abs(e.doc.scrollTop - u) >
|
||
1 && (a = !0)), null != c.scrollLeft &&
|
||
(setScrollLeft(e, c.scrollLeft), Math.abs(e.doc.scrollLeft - d) >
|
||
1 && (a = !0)), !a)
|
||
)
|
||
break;
|
||
}
|
||
return i;
|
||
}
|
||
function scrollIntoView(e, t) {
|
||
var n = calculateScrollPos(e, t);
|
||
null != n.scrollTop &&
|
||
updateScrollTop(
|
||
e,
|
||
n.scrollTop
|
||
), null != n.scrollLeft && setScrollLeft(e, n.scrollLeft);
|
||
}
|
||
function calculateScrollPos(e, t) {
|
||
var n = e.display, r = textHeight(e.display);
|
||
t.top < 0 && (t.top = 0);
|
||
var i = e.curOp && null != e.curOp.scrollTop
|
||
? e.curOp.scrollTop
|
||
: n.scroller.scrollTop,
|
||
o = displayHeight(e),
|
||
a = {};
|
||
t.bottom - t.top > o && (t.bottom = t.top + o);
|
||
var s = e.doc.height + paddingVert(n),
|
||
l = t.top < r,
|
||
c = t.bottom > s - r;
|
||
if (t.top < i) a.scrollTop = l ? 0 : t.top;
|
||
else if (t.bottom > i + o) {
|
||
var u = Math.min(t.top, (c ? s : t.bottom) - o);
|
||
u != i && (a.scrollTop = u);
|
||
}
|
||
var d = e.curOp && null != e.curOp.scrollLeft
|
||
? e.curOp.scrollLeft
|
||
: n.scroller.scrollLeft,
|
||
p =
|
||
displayWidth(e) -
|
||
(e.options.fixedGutter ? n.gutters.offsetWidth : 0),
|
||
f = t.right - t.left > p;
|
||
return f &&
|
||
(t.right =
|
||
t.left +
|
||
p), t.left < 10 ? (a.scrollLeft = 0) : t.left < d ? (a.scrollLeft = Math.max(0, t.left - (f ? 0 : 10))) : t.right > p + d - 3 && (a.scrollLeft = t.right + (f ? 0 : 10) - p), a;
|
||
}
|
||
function addToScrollTop(e, t) {
|
||
null != t &&
|
||
(resolveScrollToPos(e), (e.curOp.scrollTop =
|
||
(null == e.curOp.scrollTop ? e.doc.scrollTop : e.curOp.scrollTop) +
|
||
t));
|
||
}
|
||
function ensureCursorVisible(e) {
|
||
resolveScrollToPos(e);
|
||
var t = e.getCursor(), n = t, r = t;
|
||
e.options.lineWrapping ||
|
||
((n = t.ch ? Pos(t.line, t.ch - 1) : t), (r = Pos(
|
||
t.line,
|
||
t.ch + 1
|
||
))), (e.curOp.scrollToPos = { from: n, to: r, margin: e.options.cursorScrollMargin });
|
||
}
|
||
function scrollToCoords(e, t, n) {
|
||
(null == t && null == n) ||
|
||
resolveScrollToPos(
|
||
e
|
||
), null != t && (e.curOp.scrollLeft = t), null != n && (e.curOp.scrollTop = n);
|
||
}
|
||
function scrollToRange(e, t) {
|
||
resolveScrollToPos(e), (e.curOp.scrollToPos = t);
|
||
}
|
||
function resolveScrollToPos(e) {
|
||
var t = e.curOp.scrollToPos;
|
||
if (t) {
|
||
e.curOp.scrollToPos = null;
|
||
scrollToCoordsRange(
|
||
e,
|
||
estimateCoords(e, t.from),
|
||
estimateCoords(e, t.to),
|
||
t.margin
|
||
);
|
||
}
|
||
}
|
||
function scrollToCoordsRange(e, t, n, r) {
|
||
var i = calculateScrollPos(e, {
|
||
left: Math.min(t.left, n.left),
|
||
top: Math.min(t.top, n.top) - r,
|
||
right: Math.max(t.right, n.right),
|
||
bottom: Math.max(t.bottom, n.bottom) + r
|
||
});
|
||
scrollToCoords(e, i.scrollLeft, i.scrollTop);
|
||
}
|
||
function updateScrollTop(e, t) {
|
||
Math.abs(e.doc.scrollTop - t) < 2 ||
|
||
(n || updateDisplaySimple(e, { top: t }), setScrollTop(e, t, !0), n &&
|
||
updateDisplaySimple(e), startWorker(e, 100));
|
||
}
|
||
function setScrollTop(e, t, n) {
|
||
(t = Math.min(
|
||
e.display.scroller.scrollHeight - e.display.scroller.clientHeight,
|
||
t
|
||
)), (e.display.scroller.scrollTop != t || n) && ((e.doc.scrollTop = t), e.display.scrollbars.setScrollTop(t), e.display.scroller.scrollTop != t && (e.display.scroller.scrollTop = t));
|
||
}
|
||
function setScrollLeft(e, t, n, r) {
|
||
(t = Math.min(
|
||
t,
|
||
e.display.scroller.scrollWidth - e.display.scroller.clientWidth
|
||
)), ((n ? t == e.doc.scrollLeft : Math.abs(e.doc.scrollLeft - t) < 2) && !r) || ((e.doc.scrollLeft = t), alignHorizontally(e), e.display.scroller.scrollLeft != t && (e.display.scroller.scrollLeft = t), e.display.scrollbars.setScrollLeft(t));
|
||
}
|
||
function measureForScrollbars(e) {
|
||
var t = e.display,
|
||
n = t.gutters.offsetWidth,
|
||
r = Math.round(e.doc.height + paddingVert(e.display));
|
||
return {
|
||
clientHeight: t.scroller.clientHeight,
|
||
viewHeight: t.wrapper.clientHeight,
|
||
scrollWidth: t.scroller.scrollWidth,
|
||
clientWidth: t.scroller.clientWidth,
|
||
viewWidth: t.wrapper.clientWidth,
|
||
barLeft: e.options.fixedGutter ? n : 0,
|
||
docHeight: r,
|
||
scrollHeight: r + scrollGap(e) + t.barHeight,
|
||
nativeBarWidth: t.nativeBarWidth,
|
||
gutterWidth: n
|
||
};
|
||
}
|
||
function updateScrollbars(e, t) {
|
||
t || (t = measureForScrollbars(e));
|
||
var n = e.display.barWidth, r = e.display.barHeight;
|
||
updateScrollbarsInner(e, t);
|
||
for (
|
||
var i = 0;
|
||
(i < 4 && n != e.display.barWidth) || r != e.display.barHeight;
|
||
i++
|
||
) n != e.display.barWidth && e.options.lineWrapping && updateHeightsInViewport(e), updateScrollbarsInner(e, measureForScrollbars(e)), (n = e.display.barWidth), (r = e.display.barHeight);
|
||
}
|
||
function updateScrollbarsInner(e, t) {
|
||
var n = e.display, r = n.scrollbars.update(t);
|
||
(n.sizer.style.paddingRight =
|
||
(n.barWidth = r.right) +
|
||
'px'), (n.sizer.style.paddingBottom = (n.barHeight = r.bottom) + 'px'), (n.heightForcer.style.borderBottom = r.bottom + 'px solid transparent'), r.right && r.bottom ? ((n.scrollbarFiller.style.display = 'block'), (n.scrollbarFiller.style.height = r.bottom + 'px'), (n.scrollbarFiller.style.width = r.right + 'px')) : (n.scrollbarFiller.style.display = ''), r.bottom && e.options.coverGutterNextToScrollbar && e.options.fixedGutter ? ((n.gutterFiller.style.display = 'block'), (n.gutterFiller.style.height = r.bottom + 'px'), (n.gutterFiller.style.width = t.gutterWidth + 'px')) : (n.gutterFiller.style.display = '');
|
||
}
|
||
function initScrollbars(e) {
|
||
e.display.scrollbars &&
|
||
(e.display.scrollbars.clear(), e.display.scrollbars.addClass &&
|
||
L(
|
||
e.display.wrapper,
|
||
e.display.scrollbars.addClass
|
||
)), (e.display.scrollbars = new le[e.options.scrollbarStyle](
|
||
function(t) {
|
||
e.display.wrapper.insertBefore(
|
||
t,
|
||
e.display.scrollbarFiller
|
||
), G(t, 'mousedown', function() {
|
||
e.state.focused &&
|
||
setTimeout(function() {
|
||
return e.display.input.focus();
|
||
}, 0);
|
||
}), t.setAttribute('cm-not-content', 'true');
|
||
},
|
||
function(t, n) {
|
||
'horizontal' == n ? setScrollLeft(e, t) : updateScrollTop(e, t);
|
||
},
|
||
e
|
||
)), e.display.scrollbars.addClass && addClass(e.display.wrapper, e.display.scrollbars.addClass);
|
||
}
|
||
function startOperation(e) {
|
||
(e.curOp = {
|
||
cm: e,
|
||
viewChanged: !1,
|
||
startHeight: e.doc.height,
|
||
forceUpdate: !1,
|
||
updateInput: null,
|
||
typing: !1,
|
||
changeObjs: null,
|
||
cursorActivityHandlers: null,
|
||
cursorActivityCalled: 0,
|
||
selectionChanged: !1,
|
||
updateMaxLine: !1,
|
||
scrollLeft: null,
|
||
scrollTop: null,
|
||
scrollToPos: null,
|
||
focus: !1,
|
||
id: ++ce
|
||
}), pushOperation(e.curOp);
|
||
}
|
||
function endOperation(e) {
|
||
finishOperation(e.curOp, function(e) {
|
||
for (var t = 0; t < e.ops.length; t++) e.ops[t].cm.curOp = null;
|
||
endOperations(e);
|
||
});
|
||
}
|
||
function endOperations(e) {
|
||
for (var t = e.ops, n = 0; n < t.length; n++) endOperation_R1(t[n]);
|
||
for (var r = 0; r < t.length; r++) endOperation_W1(t[r]);
|
||
for (var i = 0; i < t.length; i++) endOperation_R2(t[i]);
|
||
for (var o = 0; o < t.length; o++) endOperation_W2(t[o]);
|
||
for (var a = 0; a < t.length; a++) endOperation_finish(t[a]);
|
||
}
|
||
function endOperation_R1(e) {
|
||
var t = e.cm, n = t.display;
|
||
maybeClipScrollbars(
|
||
t
|
||
), e.updateMaxLine && findMaxLine(t), (e.mustUpdate = e.viewChanged || e.forceUpdate || null != e.scrollTop || (e.scrollToPos && (e.scrollToPos.from.line < n.viewFrom || e.scrollToPos.to.line >= n.viewTo)) || (n.maxLineChanged && t.options.lineWrapping)), (e.update = e.mustUpdate && new ue(t, e.mustUpdate && { top: e.scrollTop, ensure: e.scrollToPos }, e.forceUpdate));
|
||
}
|
||
function endOperation_W1(e) {
|
||
e.updatedDisplay =
|
||
e.mustUpdate && updateDisplayIfNeeded(e.cm, e.update);
|
||
}
|
||
function endOperation_R2(e) {
|
||
var t = e.cm, n = t.display;
|
||
e.updatedDisplay &&
|
||
updateHeightsInViewport(
|
||
t
|
||
), (e.barMeasure = measureForScrollbars(t)), n.maxLineChanged && !t.options.lineWrapping && ((e.adjustWidthTo = measureChar(t, n.maxLine, n.maxLine.text.length).left + 3), (t.display.sizerWidth = e.adjustWidthTo), (e.barMeasure.scrollWidth = Math.max(n.scroller.clientWidth, n.sizer.offsetLeft + e.adjustWidthTo + scrollGap(t) + t.display.barWidth)), (e.maxScrollLeft = Math.max(0, n.sizer.offsetLeft + e.adjustWidthTo - displayWidth(t)))), (e.updatedDisplay || e.selectionChanged) && (e.preparedSelection = n.input.prepareSelection(e.focus));
|
||
}
|
||
function endOperation_W2(e) {
|
||
var t = e.cm;
|
||
null != e.adjustWidthTo &&
|
||
((t.display.sizer.style.minWidth =
|
||
e.adjustWidthTo + 'px'), e.maxScrollLeft < t.doc.scrollLeft &&
|
||
setScrollLeft(
|
||
t,
|
||
Math.min(t.display.scroller.scrollLeft, e.maxScrollLeft),
|
||
!0
|
||
), (t.display.maxLineChanged = !1));
|
||
var n =
|
||
e.focus &&
|
||
e.focus == activeElt() &&
|
||
(!document.hasFocus || document.hasFocus());
|
||
e.preparedSelection &&
|
||
t.display.input.showSelection(
|
||
e.preparedSelection,
|
||
n
|
||
), (e.updatedDisplay || e.startHeight != t.doc.height) && updateScrollbars(t, e.barMeasure), e.updatedDisplay && setDocumentHeight(t, e.barMeasure), e.selectionChanged && restartBlink(t), t.state.focused && e.updateInput && t.display.input.reset(e.typing), n && ensureFocus(e.cm);
|
||
}
|
||
function endOperation_finish(e) {
|
||
var t = e.cm, n = t.display, r = t.doc;
|
||
if (
|
||
(e.updatedDisplay && postUpdateDisplay(t, e.update), null ==
|
||
n.wheelStartX ||
|
||
(null == e.scrollTop && null == e.scrollLeft && !e.scrollToPos) ||
|
||
(n.wheelStartX = n.wheelStartY = null), null != e.scrollTop &&
|
||
setScrollTop(t, e.scrollTop, e.forceScroll), null != e.scrollLeft &&
|
||
setScrollLeft(t, e.scrollLeft, !0, !0), e.scrollToPos)
|
||
) {
|
||
maybeScrollWindow(
|
||
t,
|
||
scrollPosIntoView(
|
||
t,
|
||
clipPos(r, e.scrollToPos.from),
|
||
clipPos(r, e.scrollToPos.to),
|
||
e.scrollToPos.margin
|
||
)
|
||
);
|
||
}
|
||
var i = e.maybeHiddenMarkers, o = e.maybeUnhiddenMarkers;
|
||
if (i)
|
||
for (var a = 0; a < i.length; ++a)
|
||
i[a].lines.length || signal(i[a], 'hide');
|
||
if (o)
|
||
for (var s = 0; s < o.length; ++s)
|
||
o[s].lines.length && signal(o[s], 'unhide');
|
||
n.wrapper.offsetHeight &&
|
||
(r.scrollTop =
|
||
t.display.scroller.scrollTop), e.changeObjs && signal(t, 'changes', t, e.changeObjs), e.update && e.update.finish();
|
||
}
|
||
function runInOp(e, t) {
|
||
if (e.curOp) return t();
|
||
startOperation(e);
|
||
try {
|
||
return t();
|
||
} finally {
|
||
endOperation(e);
|
||
}
|
||
}
|
||
function operation(e, t) {
|
||
return function() {
|
||
if (e.curOp) return t.apply(e, arguments);
|
||
startOperation(e);
|
||
try {
|
||
return t.apply(e, arguments);
|
||
} finally {
|
||
endOperation(e);
|
||
}
|
||
};
|
||
}
|
||
function methodOp(e) {
|
||
return function() {
|
||
if (this.curOp) return e.apply(this, arguments);
|
||
startOperation(this);
|
||
try {
|
||
return e.apply(this, arguments);
|
||
} finally {
|
||
endOperation(this);
|
||
}
|
||
};
|
||
}
|
||
function docMethodOp(e) {
|
||
return function() {
|
||
var t = this.cm;
|
||
if (!t || t.curOp) return e.apply(this, arguments);
|
||
startOperation(t);
|
||
try {
|
||
return e.apply(this, arguments);
|
||
} finally {
|
||
endOperation(t);
|
||
}
|
||
};
|
||
}
|
||
function regChange(e, t, n, r) {
|
||
null == t &&
|
||
(t =
|
||
e.doc
|
||
.first), null == n && (n = e.doc.first + e.doc.size), r || (r = 0);
|
||
var i = e.display;
|
||
if (
|
||
(r &&
|
||
n < i.viewTo &&
|
||
(null == i.updateLineNumbers || i.updateLineNumbers > t) &&
|
||
(i.updateLineNumbers = t), (e.curOp.viewChanged = !0), t >=
|
||
i.viewTo)
|
||
)
|
||
z && visualLineNo(e.doc, t) < i.viewTo && resetView(e);
|
||
else if (n <= i.viewFrom)
|
||
z && visualLineEndNo(e.doc, n + r) > i.viewFrom
|
||
? resetView(e)
|
||
: ((i.viewFrom += r), (i.viewTo += r));
|
||
else if (t <= i.viewFrom && n >= i.viewTo) resetView(e);
|
||
else if (t <= i.viewFrom) {
|
||
var o = viewCuttingPoint(e, n, n + r, 1);
|
||
o
|
||
? ((i.view = i.view.slice(o.index)), (i.viewFrom =
|
||
o.lineN), (i.viewTo += r))
|
||
: resetView(e);
|
||
} else if (n >= i.viewTo) {
|
||
var a = viewCuttingPoint(e, t, t, -1);
|
||
a
|
||
? ((i.view = i.view.slice(0, a.index)), (i.viewTo = a.lineN))
|
||
: resetView(e);
|
||
} else {
|
||
var s = viewCuttingPoint(e, t, t, -1),
|
||
l = viewCuttingPoint(e, n, n + r, 1);
|
||
s && l
|
||
? ((i.view = i.view
|
||
.slice(0, s.index)
|
||
.concat(buildViewArray(e, s.lineN, l.lineN))
|
||
.concat(i.view.slice(l.index))), (i.viewTo += r))
|
||
: resetView(e);
|
||
}
|
||
var c = i.externalMeasured;
|
||
c &&
|
||
(n < c.lineN
|
||
? (c.lineN += r)
|
||
: t < c.lineN + c.size && (i.externalMeasured = null));
|
||
}
|
||
function regLineChange(e, t, n) {
|
||
e.curOp.viewChanged = !0;
|
||
var r = e.display, i = e.display.externalMeasured;
|
||
if (
|
||
(i &&
|
||
t >= i.lineN &&
|
||
t < i.lineN + i.size &&
|
||
(r.externalMeasured = null), !(t < r.viewFrom || t >= r.viewTo))
|
||
) {
|
||
var o = r.view[findViewIndex(e, t)];
|
||
if (null != o.node) {
|
||
var a = o.changes || (o.changes = []);
|
||
-1 == indexOf(a, n) && a.push(n);
|
||
}
|
||
}
|
||
}
|
||
function resetView(e) {
|
||
(e.display.viewFrom = e.display.viewTo =
|
||
e.doc.first), (e.display.view = []), (e.display.viewOffset = 0);
|
||
}
|
||
function viewCuttingPoint(e, t, n, r) {
|
||
var i, o = findViewIndex(e, t), a = e.display.view;
|
||
if (!z || n == e.doc.first + e.doc.size) return { index: o, lineN: n };
|
||
for (var s = e.display.viewFrom, l = 0; l < o; l++) s += a[l].size;
|
||
if (s != t) {
|
||
if (r > 0) {
|
||
if (o == a.length - 1) return null;
|
||
(i = s + a[o].size - t), o++;
|
||
} else i = s - t;
|
||
(t += i), (n += i);
|
||
}
|
||
for (; visualLineNo(e.doc, n) != n; ) {
|
||
if (o == (r < 0 ? 0 : a.length - 1)) return null;
|
||
(n += r * a[o - (r < 0 ? 1 : 0)].size), (o += r);
|
||
}
|
||
return { index: o, lineN: n };
|
||
}
|
||
function adjustView(e, t, n) {
|
||
var r = e.display;
|
||
0 == r.view.length || t >= r.viewTo || n <= r.viewFrom
|
||
? ((r.view = buildViewArray(e, t, n)), (r.viewFrom = t))
|
||
: (r.viewFrom > t
|
||
? (r.view = buildViewArray(e, t, r.viewFrom).concat(r.view))
|
||
: r.viewFrom < t &&
|
||
(r.view = r.view.slice(
|
||
findViewIndex(e, t)
|
||
)), (r.viewFrom = t), r.viewTo < n
|
||
? (r.view = r.view.concat(buildViewArray(e, r.viewTo, n)))
|
||
: r.viewTo > n &&
|
||
(r.view = r.view.slice(
|
||
0,
|
||
findViewIndex(e, n)
|
||
))), (r.viewTo = n);
|
||
}
|
||
function countDirtyView(e) {
|
||
for (var t = e.display.view, n = 0, r = 0; r < t.length; r++) {
|
||
var i = t[r];
|
||
i.hidden || (i.node && !i.changes) || ++n;
|
||
}
|
||
return n;
|
||
}
|
||
function startWorker(e, t) {
|
||
e.doc.mode.startState &&
|
||
e.doc.frontier < e.display.viewTo &&
|
||
e.state.highlight.set(t, bind(highlightWorker, e));
|
||
}
|
||
function highlightWorker(e) {
|
||
var t = e.doc;
|
||
if (
|
||
(t.frontier < t.first && (t.frontier = t.first), !(t.frontier >=
|
||
e.display.viewTo))
|
||
) {
|
||
var n = +new Date() + e.options.workTime,
|
||
r = copyState(t.mode, getStateBefore(e, t.frontier)),
|
||
i = [];
|
||
t.iter(
|
||
t.frontier,
|
||
Math.min(t.first + t.size, e.display.viewTo + 500),
|
||
function(o) {
|
||
if (t.frontier >= e.display.viewFrom) {
|
||
var a = o.styles,
|
||
s = o.text.length > e.options.maxHighlightLength,
|
||
l = highlightLine(e, o, s ? copyState(t.mode, r) : r, !0);
|
||
o.styles = l.styles;
|
||
var c = o.styleClasses, u = l.classes;
|
||
u ? (o.styleClasses = u) : c && (o.styleClasses = null);
|
||
for (
|
||
var d =
|
||
!a ||
|
||
a.length != o.styles.length ||
|
||
(c != u &&
|
||
(!c ||
|
||
!u ||
|
||
c.bgClass != u.bgClass ||
|
||
c.textClass != u.textClass)),
|
||
p = 0;
|
||
!d && p < a.length;
|
||
++p
|
||
)
|
||
d = a[p] != o.styles[p];
|
||
d && i.push(t.frontier), (o.stateAfter = s
|
||
? r
|
||
: copyState(t.mode, r));
|
||
} else
|
||
o.text.length <= e.options.maxHighlightLength &&
|
||
processLine(e, o.text, r), (o.stateAfter = t.frontier % 5 == 0
|
||
? copyState(t.mode, r)
|
||
: null);
|
||
if ((++t.frontier, +new Date() > n))
|
||
return startWorker(e, e.options.workDelay), !0;
|
||
}
|
||
), i.length &&
|
||
runInOp(e, function() {
|
||
for (var t = 0; t < i.length; t++) regLineChange(e, i[t], 'text');
|
||
});
|
||
}
|
||
}
|
||
function maybeClipScrollbars(e) {
|
||
var t = e.display;
|
||
!t.scrollbarsClipped &&
|
||
t.scroller.offsetWidth &&
|
||
((t.nativeBarWidth =
|
||
t.scroller.offsetWidth -
|
||
t.scroller.clientWidth), (t.heightForcer.style.height =
|
||
scrollGap(e) + 'px'), (t.sizer.style.marginBottom =
|
||
-t.nativeBarWidth + 'px'), (t.sizer.style.borderRightWidth =
|
||
scrollGap(e) + 'px'), (t.scrollbarsClipped = !0));
|
||
}
|
||
function selectionSnapshot(e) {
|
||
if (e.hasFocus()) return null;
|
||
var t = activeElt();
|
||
if (!t || !contains(e.display.lineDiv, t)) return null;
|
||
var n = { activeElt: t };
|
||
if (window.getSelection) {
|
||
var r = window.getSelection();
|
||
r.anchorNode &&
|
||
r.extend &&
|
||
contains(e.display.lineDiv, r.anchorNode) &&
|
||
((n.anchorNode = r.anchorNode), (n.anchorOffset =
|
||
r.anchorOffset), (n.focusNode = r.focusNode), (n.focusOffset =
|
||
r.focusOffset));
|
||
}
|
||
return n;
|
||
}
|
||
function restoreSelection(e) {
|
||
if (
|
||
e &&
|
||
e.activeElt &&
|
||
e.activeElt != activeElt() &&
|
||
(e.activeElt.focus(), e.anchorNode &&
|
||
contains(document.body, e.anchorNode) &&
|
||
contains(document.body, e.focusNode))
|
||
) {
|
||
var t = window.getSelection(), n = document.createRange();
|
||
n.setEnd(e.anchorNode, e.anchorOffset), n.collapse(
|
||
!1
|
||
), t.removeAllRanges(), t.addRange(n), t.extend(
|
||
e.focusNode,
|
||
e.focusOffset
|
||
);
|
||
}
|
||
}
|
||
function updateDisplayIfNeeded(e, t) {
|
||
var n = e.display, r = e.doc;
|
||
if (t.editorIsHidden) return resetView(e), !1;
|
||
if (
|
||
!t.force &&
|
||
t.visible.from >= n.viewFrom &&
|
||
t.visible.to <= n.viewTo &&
|
||
(null == n.updateLineNumbers || n.updateLineNumbers >= n.viewTo) &&
|
||
n.renderedView == n.view &&
|
||
0 == countDirtyView(e)
|
||
)
|
||
return !1;
|
||
maybeUpdateLineNumberWidth(e) &&
|
||
(resetView(e), (t.dims = getDimensions(e)));
|
||
var i = r.first + r.size,
|
||
o = Math.max(t.visible.from - e.options.viewportMargin, r.first),
|
||
a = Math.min(i, t.visible.to + e.options.viewportMargin);
|
||
n.viewFrom < o &&
|
||
o - n.viewFrom < 20 &&
|
||
(o = Math.max(
|
||
r.first,
|
||
n.viewFrom
|
||
)), n.viewTo > a && n.viewTo - a < 20 && (a = Math.min(i, n.viewTo)), z && ((o = visualLineNo(e.doc, o)), (a = visualLineEndNo(e.doc, a)));
|
||
var s =
|
||
o != n.viewFrom ||
|
||
a != n.viewTo ||
|
||
n.lastWrapHeight != t.wrapperHeight ||
|
||
n.lastWrapWidth != t.wrapperWidth;
|
||
adjustView(
|
||
e,
|
||
o,
|
||
a
|
||
), (n.viewOffset = heightAtLine(getLine(e.doc, n.viewFrom))), (e.display.mover.style.top = n.viewOffset + 'px');
|
||
var l = countDirtyView(e);
|
||
if (
|
||
!s &&
|
||
0 == l &&
|
||
!t.force &&
|
||
n.renderedView == n.view &&
|
||
(null == n.updateLineNumbers || n.updateLineNumbers >= n.viewTo)
|
||
)
|
||
return !1;
|
||
var c = selectionSnapshot(e);
|
||
return l > 4 &&
|
||
(n.lineDiv.style.display =
|
||
'none'), patchDisplay(e, n.updateLineNumbers, t.dims), l > 4 && (n.lineDiv.style.display = ''), (n.renderedView = n.view), restoreSelection(c), removeChildren(n.cursorDiv), removeChildren(n.selectionDiv), (n.gutters.style.height = n.sizer.style.minHeight = 0), s && ((n.lastWrapHeight = t.wrapperHeight), (n.lastWrapWidth = t.wrapperWidth), startWorker(e, 400)), (n.updateLineNumbers = null), !0;
|
||
}
|
||
function postUpdateDisplay(e, t) {
|
||
for (
|
||
var n = t.viewport, r = !0;
|
||
((r &&
|
||
e.options.lineWrapping &&
|
||
t.oldDisplayWidth != displayWidth(e)) ||
|
||
(n &&
|
||
null != n.top &&
|
||
(n = {
|
||
top: Math.min(
|
||
e.doc.height + paddingVert(e.display) - displayHeight(e),
|
||
n.top
|
||
)
|
||
}), (t.visible = visibleLines(e.display, e.doc, n)), !(t.visible
|
||
.from >= e.display.viewFrom &&
|
||
t.visible.to <= e.display.viewTo))) &&
|
||
updateDisplayIfNeeded(e, t);
|
||
r = !1
|
||
) {
|
||
updateHeightsInViewport(e);
|
||
var i = measureForScrollbars(e);
|
||
updateSelection(e), updateScrollbars(e, i), setDocumentHeight(e, i);
|
||
}
|
||
t.signal(
|
||
e,
|
||
'update',
|
||
e
|
||
), (e.display.viewFrom == e.display.reportedViewFrom && e.display.viewTo == e.display.reportedViewTo) || (t.signal(e, 'viewportChange', e, e.display.viewFrom, e.display.viewTo), (e.display.reportedViewFrom = e.display.viewFrom), (e.display.reportedViewTo = e.display.viewTo));
|
||
}
|
||
function updateDisplaySimple(e, t) {
|
||
var n = new ue(e, t);
|
||
if (updateDisplayIfNeeded(e, n)) {
|
||
updateHeightsInViewport(e), postUpdateDisplay(e, n);
|
||
var r = measureForScrollbars(e);
|
||
updateSelection(e), updateScrollbars(e, r), setDocumentHeight(
|
||
e,
|
||
r
|
||
), n.finish();
|
||
}
|
||
}
|
||
function patchDisplay(e, t, n) {
|
||
function rm(t) {
|
||
var n = t.nextSibling;
|
||
return l && y && e.display.currentWheelTarget == t
|
||
? (t.style.display = 'none')
|
||
: t.parentNode.removeChild(t), n;
|
||
}
|
||
for (
|
||
var r = e.display,
|
||
i = e.options.lineNumbers,
|
||
o = r.lineDiv,
|
||
a = o.firstChild,
|
||
s = r.view,
|
||
c = r.viewFrom,
|
||
u = 0;
|
||
u < s.length;
|
||
u++
|
||
) {
|
||
var d = s[u];
|
||
if (d.hidden);
|
||
else if (d.node && d.node.parentNode == o) {
|
||
for (; a != d.node; )
|
||
a = rm(a);
|
||
var p = i && null != t && t <= c && d.lineNumber;
|
||
d.changes &&
|
||
(indexOf(d.changes, 'gutter') > -1 &&
|
||
(p = !1), updateLineForChanges(e, d, c, n)), p &&
|
||
(removeChildren(d.lineNumber), d.lineNumber.appendChild(
|
||
document.createTextNode(lineNumberFor(e.options, c))
|
||
)), (a = d.node.nextSibling);
|
||
} else {
|
||
var f = buildLineElement(e, d, c, n);
|
||
o.insertBefore(f, a);
|
||
}
|
||
c += d.size;
|
||
}
|
||
for (; a; ) a = rm(a);
|
||
}
|
||
function updateGutterSpace(e) {
|
||
var t = e.display.gutters.offsetWidth;
|
||
e.display.sizer.style.marginLeft = t + 'px';
|
||
}
|
||
function setDocumentHeight(e, t) {
|
||
(e.display.sizer.style.minHeight =
|
||
t.docHeight +
|
||
'px'), (e.display.heightForcer.style.top = t.docHeight + 'px'), (e.display.gutters.style.height = t.docHeight + e.display.barHeight + scrollGap(e) + 'px');
|
||
}
|
||
function updateGutters(e) {
|
||
var t = e.display.gutters, n = e.options.gutters;
|
||
removeChildren(t);
|
||
for (var r = 0; r < n.length; ++r) {
|
||
var i = n[r],
|
||
o = t.appendChild(elt('div', null, 'CodeMirror-gutter ' + i));
|
||
'CodeMirror-linenumbers' == i &&
|
||
((e.display.lineGutter = o), (o.style.width =
|
||
(e.display.lineNumWidth || 1) + 'px'));
|
||
}
|
||
(t.style.display = r ? '' : 'none'), updateGutterSpace(e);
|
||
}
|
||
function setGuttersForLineNumbers(e) {
|
||
var t = indexOf(e.gutters, 'CodeMirror-linenumbers');
|
||
-1 == t && e.lineNumbers
|
||
? (e.gutters = e.gutters.concat(['CodeMirror-linenumbers']))
|
||
: t > -1 &&
|
||
!e.lineNumbers &&
|
||
((e.gutters = e.gutters.slice(0)), e.gutters.splice(t, 1));
|
||
}
|
||
function wheelEventDelta(e) {
|
||
var t = e.wheelDeltaX, n = e.wheelDeltaY;
|
||
return null == t &&
|
||
e.detail &&
|
||
e.axis == e.HORIZONTAL_AXIS &&
|
||
(t =
|
||
e.detail), null == n && e.detail && e.axis == e.VERTICAL_AXIS ? (n = e.detail) : null == n && (n = e.wheelDelta), { x: t, y: n };
|
||
}
|
||
function wheelEventPixels(e) {
|
||
var t = wheelEventDelta(e);
|
||
return (t.x *= pe), (t.y *= pe), t;
|
||
}
|
||
function onScrollWheel(e, t) {
|
||
var r = wheelEventDelta(t),
|
||
i = r.x,
|
||
o = r.y,
|
||
a = e.display,
|
||
s = a.scroller,
|
||
c = s.scrollWidth > s.clientWidth,
|
||
u = s.scrollHeight > s.clientHeight;
|
||
if ((i && c) || (o && u)) {
|
||
if (o && y && l)
|
||
e: for (var p = t.target, f = a.view; p != s; p = p.parentNode)
|
||
for (var h = 0; h < f.length; h++)
|
||
if (f[h].node == p) {
|
||
e.display.currentWheelTarget = p;
|
||
break e;
|
||
}
|
||
if (i && !n && !d && null != pe)
|
||
return o &&
|
||
u &&
|
||
updateScrollTop(
|
||
e,
|
||
Math.max(0, s.scrollTop + o * pe)
|
||
), setScrollLeft(e, Math.max(0, s.scrollLeft + i * pe)), (!o ||
|
||
(o && u)) &&
|
||
e_preventDefault(t), void (a.wheelStartX = null);
|
||
if (o && null != pe) {
|
||
var g = o * pe, m = e.doc.scrollTop, v = m + a.wrapper.clientHeight;
|
||
g < 0
|
||
? (m = Math.max(0, m + g - 50))
|
||
: (v = Math.min(
|
||
e.doc.height,
|
||
v + g + 50
|
||
)), updateDisplaySimple(e, { top: m, bottom: v });
|
||
}
|
||
de < 20 &&
|
||
(null == a.wheelStartX
|
||
? ((a.wheelStartX = s.scrollLeft), (a.wheelStartY =
|
||
s.scrollTop), (a.wheelDX = i), (a.wheelDY = o), setTimeout(
|
||
function() {
|
||
if (null != a.wheelStartX) {
|
||
var e = s.scrollLeft - a.wheelStartX,
|
||
t = s.scrollTop - a.wheelStartY,
|
||
n =
|
||
(t && a.wheelDY && t / a.wheelDY) ||
|
||
(e && a.wheelDX && e / a.wheelDX);
|
||
(a.wheelStartX = a.wheelStartY = null), n &&
|
||
((pe = (pe * de + n) / (de + 1)), ++de);
|
||
}
|
||
},
|
||
200
|
||
))
|
||
: ((a.wheelDX += i), (a.wheelDY += o)));
|
||
}
|
||
}
|
||
function normalizeSelection(e, t) {
|
||
var n = e[t];
|
||
e.sort(function(e, t) {
|
||
return cmp(e.from(), t.from());
|
||
}), (t = indexOf(e, n));
|
||
for (var r = 1; r < e.length; r++) {
|
||
var i = e[r], o = e[r - 1];
|
||
if (cmp(o.to(), i.from()) >= 0) {
|
||
var a = minPos(o.from(), i.from()),
|
||
s = maxPos(o.to(), i.to()),
|
||
l = o.empty() ? i.from() == i.head : o.from() == o.head;
|
||
r <= t && --t, e.splice(--r, 2, new he(l ? s : a, l ? a : s));
|
||
}
|
||
}
|
||
return new fe(e, t);
|
||
}
|
||
function simpleSelection(e, t) {
|
||
return new fe([new he(e, t || e)], 0);
|
||
}
|
||
function changeEnd(e) {
|
||
return e.text
|
||
? Pos(
|
||
e.from.line + e.text.length - 1,
|
||
lst(e.text).length + (1 == e.text.length ? e.from.ch : 0)
|
||
)
|
||
: e.to;
|
||
}
|
||
function adjustForChange(e, t) {
|
||
if (cmp(e, t.from) < 0) return e;
|
||
if (cmp(e, t.to) <= 0) return changeEnd(t);
|
||
var n = e.line + t.text.length - (t.to.line - t.from.line) - 1,
|
||
r = e.ch;
|
||
return e.line == t.to.line &&
|
||
(r += changeEnd(t).ch - t.to.ch), Pos(n, r);
|
||
}
|
||
function computeSelAfterChange(e, t) {
|
||
for (var n = [], r = 0; r < e.sel.ranges.length; r++) {
|
||
var i = e.sel.ranges[r];
|
||
n.push(
|
||
new he(adjustForChange(i.anchor, t), adjustForChange(i.head, t))
|
||
);
|
||
}
|
||
return normalizeSelection(n, e.sel.primIndex);
|
||
}
|
||
function offsetPos(e, t, n) {
|
||
return e.line == t.line
|
||
? Pos(n.line, e.ch - t.ch + n.ch)
|
||
: Pos(n.line + (e.line - t.line), e.ch);
|
||
}
|
||
function computeReplacedSel(e, t, n) {
|
||
for (var r = [], i = Pos(e.first, 0), o = i, a = 0; a < t.length; a++) {
|
||
var s = t[a],
|
||
l = offsetPos(s.from, i, o),
|
||
c = offsetPos(changeEnd(s), i, o);
|
||
if (((i = s.to), (o = c), 'around' == n)) {
|
||
var u = e.sel.ranges[a], d = cmp(u.head, u.anchor) < 0;
|
||
r[a] = new he(d ? c : l, d ? l : c);
|
||
} else r[a] = new he(l, l);
|
||
}
|
||
return new fe(r, e.sel.primIndex);
|
||
}
|
||
function loadMode(e) {
|
||
(e.doc.mode = getMode(e.options, e.doc.modeOption)), resetModeState(e);
|
||
}
|
||
function resetModeState(e) {
|
||
e.doc.iter(function(e) {
|
||
e.stateAfter && (e.stateAfter = null), e.styles && (e.styles = null);
|
||
}), (e.doc.frontier =
|
||
e.doc.first), startWorker(e, 100), e.state.modeGen++, e.curOp && regChange(e);
|
||
}
|
||
function isWholeLineUpdate(e, t) {
|
||
return (
|
||
0 == t.from.ch &&
|
||
0 == t.to.ch &&
|
||
'' == lst(t.text) &&
|
||
(!e.cm || e.cm.options.wholeLineUpdateBefore)
|
||
);
|
||
}
|
||
function updateDoc(e, t, n, r) {
|
||
function spansFor(e) {
|
||
return n ? n[e] : null;
|
||
}
|
||
function update(e, n, i) {
|
||
updateLine(e, n, i, r), signalLater(e, 'change', e, t);
|
||
}
|
||
function linesFor(e, t) {
|
||
for (
|
||
var n = [], i = e;
|
||
i < t;
|
||
++i
|
||
) n.push(new Q(a[i], spansFor(i), r));
|
||
return n;
|
||
}
|
||
var i = t.from,
|
||
o = t.to,
|
||
a = t.text,
|
||
s = getLine(e, i.line),
|
||
l = getLine(e, o.line),
|
||
c = lst(a),
|
||
u = spansFor(a.length - 1),
|
||
d = o.line - i.line;
|
||
if (t.full)
|
||
e.insert(0, linesFor(0, a.length)), e.remove(
|
||
a.length,
|
||
e.size - a.length
|
||
);
|
||
else if (isWholeLineUpdate(e, t)) {
|
||
var p = linesFor(0, a.length - 1);
|
||
update(l, l.text, u), d && e.remove(i.line, d), p.length &&
|
||
e.insert(i.line, p);
|
||
} else if (s == l)
|
||
if (1 == a.length)
|
||
update(s, s.text.slice(0, i.ch) + c + s.text.slice(o.ch), u);
|
||
else {
|
||
var f = linesFor(1, a.length - 1);
|
||
f.push(new Q(c + s.text.slice(o.ch), u, r)), update(
|
||
s,
|
||
s.text.slice(0, i.ch) + a[0],
|
||
spansFor(0)
|
||
), e.insert(i.line + 1, f);
|
||
}
|
||
else if (1 == a.length)
|
||
update(
|
||
s,
|
||
s.text.slice(0, i.ch) + a[0] + l.text.slice(o.ch),
|
||
spansFor(0)
|
||
), e.remove(i.line + 1, d);
|
||
else {
|
||
update(s, s.text.slice(0, i.ch) + a[0], spansFor(0)), update(
|
||
l,
|
||
c + l.text.slice(o.ch),
|
||
u
|
||
);
|
||
var h = linesFor(1, a.length - 1);
|
||
d > 1 && e.remove(i.line + 1, d - 1), e.insert(i.line + 1, h);
|
||
}
|
||
signalLater(e, 'change', e, t);
|
||
}
|
||
function linkedDocs(e, t, n) {
|
||
function propagate(e, r, i) {
|
||
if (e.linked)
|
||
for (var o = 0; o < e.linked.length; ++o) {
|
||
var a = e.linked[o];
|
||
if (a.doc != r) {
|
||
var s = i && a.sharedHist;
|
||
(n && !s) || (t(a.doc, s), propagate(a.doc, e, s));
|
||
}
|
||
}
|
||
}
|
||
propagate(e, null, !0);
|
||
}
|
||
function attachDoc(e, t) {
|
||
if (t.cm) throw new Error('This document is already in use.');
|
||
(e.doc = t), (t.cm = e), estimateLineHeights(e), loadMode(e), setDirectionClass(e), e.options.lineWrapping || findMaxLine(e), (e.options.mode = t.modeOption), regChange(e);
|
||
}
|
||
function setDirectionClass(e) {
|
||
('rtl' == e.doc.direction
|
||
? addClass
|
||
: L)(e.display.lineDiv, 'CodeMirror-rtl');
|
||
}
|
||
function directionChanged(e) {
|
||
runInOp(e, function() {
|
||
setDirectionClass(e), regChange(e);
|
||
});
|
||
}
|
||
function History(e) {
|
||
(this.done = []), (this.undone = []), (this.undoDepth = 1 / 0), (this.lastModTime = this.lastSelTime = 0), (this.lastOp = this.lastSelOp = null), (this.lastOrigin = this.lastSelOrigin = null), (this.generation = this.maxGeneration = e || 1);
|
||
}
|
||
function historyChangeFromChange(e, t) {
|
||
var n = {
|
||
from: copyPos(t.from),
|
||
to: changeEnd(t),
|
||
text: getBetween(e, t.from, t.to)
|
||
};
|
||
return attachLocalSpans(e, n, t.from.line, t.to.line + 1), linkedDocs(
|
||
e,
|
||
function(e) {
|
||
return attachLocalSpans(e, n, t.from.line, t.to.line + 1);
|
||
},
|
||
!0
|
||
), n;
|
||
}
|
||
function clearSelectionEvents(e) {
|
||
for (; e.length; ) {
|
||
if (!lst(e).ranges) break;
|
||
e.pop();
|
||
}
|
||
}
|
||
function lastChangeEvent(e, t) {
|
||
return t
|
||
? (clearSelectionEvents(e.done), lst(e.done))
|
||
: e.done.length && !lst(e.done).ranges
|
||
? lst(e.done)
|
||
: e.done.length > 1 && !e.done[e.done.length - 2].ranges
|
||
? (e.done.pop(), lst(e.done))
|
||
: void 0;
|
||
}
|
||
function addChangeToHistory(e, t, n, r) {
|
||
var i = e.history;
|
||
i.undone.length = 0;
|
||
var o, a, s = +new Date();
|
||
if (
|
||
(i.lastOp == r ||
|
||
(i.lastOrigin == t.origin &&
|
||
t.origin &&
|
||
(('+' == t.origin.charAt(0) &&
|
||
e.cm &&
|
||
i.lastModTime > s - e.cm.options.historyEventDelay) ||
|
||
'*' == t.origin.charAt(0)))) &&
|
||
(o = lastChangeEvent(i, i.lastOp == r))
|
||
)
|
||
(a = lst(o.changes)), 0 == cmp(t.from, t.to) && 0 == cmp(t.from, a.to)
|
||
? (a.to = changeEnd(t))
|
||
: o.changes.push(historyChangeFromChange(e, t));
|
||
else {
|
||
var l = lst(i.done);
|
||
for (
|
||
(l && l.ranges) || pushSelectionToHistory(e.sel, i.done), (o = {
|
||
changes: [historyChangeFromChange(e, t)],
|
||
generation: i.generation
|
||
}), i.done.push(o);
|
||
i.done.length > i.undoDepth;
|
||
|
||
)
|
||
i.done.shift(), i.done[0].ranges || i.done.shift();
|
||
}
|
||
i.done.push(
|
||
n
|
||
), (i.generation = ++i.maxGeneration), (i.lastModTime = i.lastSelTime = s), (i.lastOp = i.lastSelOp = r), (i.lastOrigin = i.lastSelOrigin = t.origin), a || signal(e, 'historyAdded');
|
||
}
|
||
function selectionEventCanBeMerged(e, t, n, r) {
|
||
var i = t.charAt(0);
|
||
return (
|
||
'*' == i ||
|
||
('+' == i &&
|
||
n.ranges.length == r.ranges.length &&
|
||
n.somethingSelected() == r.somethingSelected() &&
|
||
new Date() - e.history.lastSelTime <=
|
||
(e.cm ? e.cm.options.historyEventDelay : 500))
|
||
);
|
||
}
|
||
function addSelectionToHistory(e, t, n, r) {
|
||
var i = e.history, o = r && r.origin;
|
||
n == i.lastSelOp ||
|
||
(o &&
|
||
i.lastSelOrigin == o &&
|
||
((i.lastModTime == i.lastSelTime && i.lastOrigin == o) ||
|
||
selectionEventCanBeMerged(e, o, lst(i.done), t)))
|
||
? (i.done[i.done.length - 1] = t)
|
||
: pushSelectionToHistory(
|
||
t,
|
||
i.done
|
||
), (i.lastSelTime = +new Date()), (i.lastSelOrigin = o), (i.lastSelOp = n), r && !1 !== r.clearRedo && clearSelectionEvents(i.undone);
|
||
}
|
||
function pushSelectionToHistory(e, t) {
|
||
var n = lst(t);
|
||
(n && n.ranges && n.equals(e)) || t.push(e);
|
||
}
|
||
function attachLocalSpans(e, t, n, r) {
|
||
var i = t['spans_' + e.id], o = 0;
|
||
e.iter(Math.max(e.first, n), Math.min(e.first + e.size, r), function(
|
||
n
|
||
) {
|
||
n.markedSpans &&
|
||
((i || (i = t['spans_' + e.id] = {}))[o] = n.markedSpans), ++o;
|
||
});
|
||
}
|
||
function removeClearedSpans(e) {
|
||
if (!e) return null;
|
||
for (
|
||
var t, n = 0;
|
||
n < e.length;
|
||
++n
|
||
) e[n].marker.explicitlyCleared ? t || (t = e.slice(0, n)) : t && t.push(e[n]);
|
||
return t ? (t.length ? t : null) : e;
|
||
}
|
||
function getOldSpans(e, t) {
|
||
var n = t['spans_' + e.id];
|
||
if (!n) return null;
|
||
for (
|
||
var r = [], i = 0;
|
||
i < t.text.length;
|
||
++i
|
||
) r.push(removeClearedSpans(n[i]));
|
||
return r;
|
||
}
|
||
function mergeOldSpans(e, t) {
|
||
var n = getOldSpans(e, t), r = stretchSpansOverChange(e, t);
|
||
if (!n) return r;
|
||
if (!r) return n;
|
||
for (var i = 0; i < n.length; ++i) {
|
||
var o = n[i], a = r[i];
|
||
if (o && a)
|
||
e: for (var s = 0; s < a.length; ++s) {
|
||
for (var l = a[s], c = 0; c < o.length; ++c)
|
||
if (o[c].marker == l.marker) continue e;
|
||
o.push(l);
|
||
}
|
||
else a && (n[i] = a);
|
||
}
|
||
return n;
|
||
}
|
||
function copyHistoryArray(e, t, n) {
|
||
for (var r = [], i = 0; i < e.length; ++i) {
|
||
var o = e[i];
|
||
if (o.ranges) r.push(n ? fe.prototype.deepCopy.call(o) : o);
|
||
else {
|
||
var a = o.changes, s = [];
|
||
r.push({ changes: s });
|
||
for (var l = 0; l < a.length; ++l) {
|
||
var c = a[l], u = void 0;
|
||
if ((s.push({ from: c.from, to: c.to, text: c.text }), t))
|
||
for (var d in c)
|
||
(u = d.match(/^spans_(\d+)$/)) &&
|
||
indexOf(t, Number(u[1])) > -1 &&
|
||
((lst(s)[d] = c[d]), delete c[d]);
|
||
}
|
||
}
|
||
}
|
||
return r;
|
||
}
|
||
function extendRange(e, t, n, r) {
|
||
if ((e.cm && e.cm.display.shift) || e.extend) {
|
||
var i = t.anchor;
|
||
if (r) {
|
||
var o = cmp(n, i) < 0;
|
||
o != cmp(r, i) < 0
|
||
? ((i = n), (n = r))
|
||
: o != cmp(n, r) < 0 && (n = r);
|
||
}
|
||
return new he(i, n);
|
||
}
|
||
return new he(r || n, n);
|
||
}
|
||
function extendSelection(e, t, n, r) {
|
||
setSelection(e, new fe([extendRange(e, e.sel.primary(), t, n)], 0), r);
|
||
}
|
||
function extendSelections(e, t, n) {
|
||
for (
|
||
var r = [], i = 0;
|
||
i < e.sel.ranges.length;
|
||
i++
|
||
) r[i] = extendRange(e, e.sel.ranges[i], t[i], null);
|
||
setSelection(e, normalizeSelection(r, e.sel.primIndex), n);
|
||
}
|
||
function replaceOneSelection(e, t, n, r) {
|
||
var i = e.sel.ranges.slice(0);
|
||
(i[t] = n), setSelection(e, normalizeSelection(i, e.sel.primIndex), r);
|
||
}
|
||
function setSimpleSelection(e, t, n, r) {
|
||
setSelection(e, simpleSelection(t, n), r);
|
||
}
|
||
function filterSelectionChange(e, t, n) {
|
||
var r = {
|
||
ranges: t.ranges,
|
||
update: function(t) {
|
||
var n = this;
|
||
this.ranges = [];
|
||
for (var r = 0; r < t.length; r++)
|
||
n.ranges[r] = new he(
|
||
clipPos(e, t[r].anchor),
|
||
clipPos(e, t[r].head)
|
||
);
|
||
},
|
||
origin: n && n.origin
|
||
};
|
||
return signal(
|
||
e,
|
||
'beforeSelectionChange',
|
||
e,
|
||
r
|
||
), e.cm && signal(e.cm, 'beforeSelectionChange', e.cm, r), r.ranges != t.ranges ? normalizeSelection(r.ranges, r.ranges.length - 1) : t;
|
||
}
|
||
function setSelectionReplaceHistory(e, t, n) {
|
||
var r = e.history.done, i = lst(r);
|
||
i && i.ranges
|
||
? ((r[r.length - 1] = t), setSelectionNoUndo(e, t, n))
|
||
: setSelection(e, t, n);
|
||
}
|
||
function setSelection(e, t, n) {
|
||
setSelectionNoUndo(
|
||
e,
|
||
t,
|
||
n
|
||
), addSelectionToHistory(e, e.sel, e.cm ? e.cm.curOp.id : NaN, n);
|
||
}
|
||
function setSelectionNoUndo(e, t, n) {
|
||
(hasHandler(e, 'beforeSelectionChange') ||
|
||
(e.cm && hasHandler(e.cm, 'beforeSelectionChange'))) &&
|
||
(t = filterSelectionChange(
|
||
e,
|
||
t,
|
||
n
|
||
)), setSelectionInner(e, skipAtomicInSelection(e, t, (n && n.bias) || (cmp(t.primary().head, e.sel.primary().head) < 0 ? -1 : 1), !0)), (n && !1 === n.scroll) || !e.cm || ensureCursorVisible(e.cm);
|
||
}
|
||
function setSelectionInner(e, t) {
|
||
t.equals(e.sel) ||
|
||
((e.sel = t), e.cm &&
|
||
((e.cm.curOp.updateInput = e.cm.curOp.selectionChanged = !0), signalCursorActivity(
|
||
e.cm
|
||
)), signalLater(e, 'cursorActivity', e));
|
||
}
|
||
function reCheckSelection(e) {
|
||
setSelectionInner(e, skipAtomicInSelection(e, e.sel, null, !1));
|
||
}
|
||
function skipAtomicInSelection(e, t, n, r) {
|
||
for (var i, o = 0; o < t.ranges.length; o++) {
|
||
var a = t.ranges[o],
|
||
s = t.ranges.length == e.sel.ranges.length && e.sel.ranges[o],
|
||
l = skipAtomic(e, a.anchor, s && s.anchor, n, r),
|
||
c = skipAtomic(e, a.head, s && s.head, n, r);
|
||
(i || l != a.anchor || c != a.head) &&
|
||
(i || (i = t.ranges.slice(0, o)), (i[o] = new he(l, c)));
|
||
}
|
||
return i ? normalizeSelection(i, t.primIndex) : t;
|
||
}
|
||
function skipAtomicInner(e, t, n, r, i) {
|
||
var o = getLine(e, t.line);
|
||
if (o.markedSpans)
|
||
for (var a = 0; a < o.markedSpans.length; ++a) {
|
||
var s = o.markedSpans[a], l = s.marker;
|
||
if (
|
||
(null == s.from ||
|
||
(l.inclusiveLeft ? s.from <= t.ch : s.from < t.ch)) &&
|
||
(null == s.to || (l.inclusiveRight ? s.to >= t.ch : s.to > t.ch))
|
||
) {
|
||
if (i && (signal(l, 'beforeCursorEnter'), l.explicitlyCleared)) {
|
||
if (o.markedSpans) {
|
||
--a;
|
||
continue;
|
||
}
|
||
break;
|
||
}
|
||
if (!l.atomic) continue;
|
||
if (n) {
|
||
var c = l.find(r < 0 ? 1 : -1), u = void 0;
|
||
if (
|
||
((r < 0 ? l.inclusiveRight : l.inclusiveLeft) &&
|
||
(c = movePos(
|
||
e,
|
||
c,
|
||
-r,
|
||
c && c.line == t.line ? o : null
|
||
)), c &&
|
||
c.line == t.line &&
|
||
(u = cmp(c, n)) &&
|
||
(r < 0 ? u < 0 : u > 0))
|
||
)
|
||
return skipAtomicInner(e, c, t, r, i);
|
||
}
|
||
var d = l.find(r < 0 ? -1 : 1);
|
||
return (r < 0 ? l.inclusiveLeft : l.inclusiveRight) &&
|
||
(d = movePos(e, d, r, d.line == t.line ? o : null)), d
|
||
? skipAtomicInner(e, d, t, r, i)
|
||
: null;
|
||
}
|
||
}
|
||
return t;
|
||
}
|
||
function skipAtomic(e, t, n, r, i) {
|
||
var o = r || 1,
|
||
a =
|
||
skipAtomicInner(e, t, n, o, i) ||
|
||
(!i && skipAtomicInner(e, t, n, o, !0)) ||
|
||
skipAtomicInner(e, t, n, -o, i) ||
|
||
(!i && skipAtomicInner(e, t, n, -o, !0));
|
||
return a || ((e.cantEdit = !0), Pos(e.first, 0));
|
||
}
|
||
function movePos(e, t, n, r) {
|
||
return n < 0 && 0 == t.ch
|
||
? t.line > e.first ? clipPos(e, Pos(t.line - 1)) : null
|
||
: n > 0 && t.ch == (r || getLine(e, t.line)).text.length
|
||
? t.line < e.first + e.size - 1 ? Pos(t.line + 1, 0) : null
|
||
: new Pos(t.line, t.ch + n);
|
||
}
|
||
function selectAll(e) {
|
||
e.setSelection(Pos(e.firstLine(), 0), Pos(e.lastLine()), D);
|
||
}
|
||
function filterChange(e, t, n) {
|
||
var r = {
|
||
canceled: !1,
|
||
from: t.from,
|
||
to: t.to,
|
||
text: t.text,
|
||
origin: t.origin,
|
||
cancel: function() {
|
||
return (r.canceled = !0);
|
||
}
|
||
};
|
||
return n &&
|
||
(r.update = function(t, n, i, o) {
|
||
t && (r.from = clipPos(e, t)), n && (r.to = clipPos(e, n)), i &&
|
||
(r.text = i), void 0 !== o && (r.origin = o);
|
||
}), signal(e, 'beforeChange', e, r), e.cm && signal(e.cm, 'beforeChange', e.cm, r), r.canceled ? null : { from: r.from, to: r.to, text: r.text, origin: r.origin };
|
||
}
|
||
function makeChange(e, t, n) {
|
||
if (e.cm) {
|
||
if (!e.cm.curOp) return operation(e.cm, makeChange)(e, t, n);
|
||
if (e.cm.state.suppressEdits) return;
|
||
}
|
||
if (
|
||
!(hasHandler(e, 'beforeChange') ||
|
||
(e.cm && hasHandler(e.cm, 'beforeChange'))) ||
|
||
(t = filterChange(e, t, !0))
|
||
) {
|
||
var r = B && !n && removeReadOnlyRanges(e, t.from, t.to);
|
||
if (r)
|
||
for (var i = r.length - 1; i >= 0; --i)
|
||
makeChangeInner(e, {
|
||
from: r[i].from,
|
||
to: r[i].to,
|
||
text: i ? [''] : t.text
|
||
});
|
||
else makeChangeInner(e, t);
|
||
}
|
||
}
|
||
function makeChangeInner(e, t) {
|
||
if (1 != t.text.length || '' != t.text[0] || 0 != cmp(t.from, t.to)) {
|
||
var n = computeSelAfterChange(e, t);
|
||
addChangeToHistory(
|
||
e,
|
||
t,
|
||
n,
|
||
e.cm ? e.cm.curOp.id : NaN
|
||
), makeChangeSingleDoc(e, t, n, stretchSpansOverChange(e, t));
|
||
var r = [];
|
||
linkedDocs(e, function(e, n) {
|
||
n ||
|
||
-1 != indexOf(r, e.history) ||
|
||
(rebaseHist(e.history, t), r.push(
|
||
e.history
|
||
)), makeChangeSingleDoc(e, t, null, stretchSpansOverChange(e, t));
|
||
});
|
||
}
|
||
}
|
||
function makeChangeFromHistory(e, t, n) {
|
||
if (!e.cm || !e.cm.state.suppressEdits || n) {
|
||
for (
|
||
var r,
|
||
i = e.history,
|
||
o = e.sel,
|
||
a = 'undo' == t ? i.done : i.undone,
|
||
s = 'undo' == t ? i.undone : i.done,
|
||
l = 0;
|
||
l < a.length &&
|
||
((r = a[l]), n ? !r.ranges || r.equals(e.sel) : r.ranges);
|
||
l++
|
||
);
|
||
if (l != a.length) {
|
||
for (
|
||
i.lastOrigin = i.lastSelOrigin = null;
|
||
(r = a.pop()), r.ranges;
|
||
|
||
) {
|
||
if ((pushSelectionToHistory(r, s), n && !r.equals(e.sel)))
|
||
return void setSelection(e, r, { clearRedo: !1 });
|
||
o = r;
|
||
}
|
||
var c = [];
|
||
pushSelectionToHistory(o, s), s.push({
|
||
changes: c,
|
||
generation: i.generation
|
||
}), (i.generation = r.generation || ++i.maxGeneration);
|
||
for (
|
||
var u =
|
||
hasHandler(e, 'beforeChange') ||
|
||
(e.cm && hasHandler(e.cm, 'beforeChange')),
|
||
d = r.changes.length - 1;
|
||
d >= 0;
|
||
--d
|
||
) {
|
||
var p = (function(n) {
|
||
var i = r.changes[n];
|
||
if (((i.origin = t), u && !filterChange(e, i, !1)))
|
||
return (a.length = 0), {};
|
||
c.push(historyChangeFromChange(e, i));
|
||
var o = n ? computeSelAfterChange(e, i) : lst(a);
|
||
makeChangeSingleDoc(e, i, o, mergeOldSpans(e, i)), !n &&
|
||
e.cm &&
|
||
e.cm.scrollIntoView({ from: i.from, to: changeEnd(i) });
|
||
var s = [];
|
||
linkedDocs(e, function(e, t) {
|
||
t ||
|
||
-1 != indexOf(s, e.history) ||
|
||
(rebaseHist(e.history, i), s.push(
|
||
e.history
|
||
)), makeChangeSingleDoc(e, i, null, mergeOldSpans(e, i));
|
||
});
|
||
})(d);
|
||
if (p) return p.v;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function shiftDoc(e, t) {
|
||
if (
|
||
0 != t &&
|
||
((e.first += t), (e.sel = new fe(
|
||
map(e.sel.ranges, function(e) {
|
||
return new he(
|
||
Pos(e.anchor.line + t, e.anchor.ch),
|
||
Pos(e.head.line + t, e.head.ch)
|
||
);
|
||
}),
|
||
e.sel.primIndex
|
||
)), e.cm)
|
||
) {
|
||
regChange(e.cm, e.first, e.first - t, t);
|
||
for (var n = e.cm.display, r = n.viewFrom; r < n.viewTo; r++)
|
||
regLineChange(e.cm, r, 'gutter');
|
||
}
|
||
}
|
||
function makeChangeSingleDoc(e, t, n, r) {
|
||
if (e.cm && !e.cm.curOp)
|
||
return operation(e.cm, makeChangeSingleDoc)(e, t, n, r);
|
||
if (t.to.line < e.first)
|
||
return void shiftDoc(
|
||
e,
|
||
t.text.length - 1 - (t.to.line - t.from.line)
|
||
);
|
||
if (!(t.from.line > e.lastLine())) {
|
||
if (t.from.line < e.first) {
|
||
var i = t.text.length - 1 - (e.first - t.from.line);
|
||
shiftDoc(e, i), (t = {
|
||
from: Pos(e.first, 0),
|
||
to: Pos(t.to.line + i, t.to.ch),
|
||
text: [lst(t.text)],
|
||
origin: t.origin
|
||
});
|
||
}
|
||
var o = e.lastLine();
|
||
t.to.line > o &&
|
||
(t = {
|
||
from: t.from,
|
||
to: Pos(o, getLine(e, o).text.length),
|
||
text: [t.text[0]],
|
||
origin: t.origin
|
||
}), (t.removed = getBetween(e, t.from, t.to)), n ||
|
||
(n = computeSelAfterChange(e, t)), e.cm
|
||
? makeChangeSingleDocInEditor(e.cm, t, r)
|
||
: updateDoc(e, t, r), setSelectionNoUndo(e, n, D);
|
||
}
|
||
}
|
||
function makeChangeSingleDocInEditor(e, t, n) {
|
||
var r = e.doc, i = e.display, o = t.from, a = t.to, s = !1, l = o.line;
|
||
e.options.lineWrapping ||
|
||
((l = lineNo(visualLine(getLine(r, o.line)))), r.iter(
|
||
l,
|
||
a.line + 1,
|
||
function(e) {
|
||
if (e == i.maxLine) return (s = !0), !0;
|
||
}
|
||
)), r.sel.contains(t.from, t.to) > -1 && signalCursorActivity(e), updateDoc(r, t, n, estimateHeight(e)), e
|
||
.options.lineWrapping ||
|
||
(r.iter(l, o.line + t.text.length, function(e) {
|
||
var t = lineLength(e);
|
||
t > i.maxLineLength &&
|
||
((i.maxLine = e), (i.maxLineLength = t), (i.maxLineChanged = !0), (s = !1));
|
||
}), s &&
|
||
(e.curOp.updateMaxLine = !0)), (r.frontier = Math.min(r.frontier, o.line)), startWorker(e, 400);
|
||
var c = t.text.length - (a.line - o.line) - 1;
|
||
t.full
|
||
? regChange(e)
|
||
: o.line != a.line ||
|
||
1 != t.text.length ||
|
||
isWholeLineUpdate(e.doc, t)
|
||
? regChange(e, o.line, a.line + 1, c)
|
||
: regLineChange(e, o.line, 'text');
|
||
var u = hasHandler(e, 'changes'), d = hasHandler(e, 'change');
|
||
if (d || u) {
|
||
var p = {
|
||
from: o,
|
||
to: a,
|
||
text: t.text,
|
||
removed: t.removed,
|
||
origin: t.origin
|
||
};
|
||
d && signalLater(e, 'change', e, p), u &&
|
||
(e.curOp.changeObjs || (e.curOp.changeObjs = [])).push(p);
|
||
}
|
||
e.display.selForContextMenu = null;
|
||
}
|
||
function replaceRange(e, t, n, r, i) {
|
||
if ((r || (r = n), cmp(r, n) < 0)) {
|
||
var o = r;
|
||
(r = n), (n = o);
|
||
}
|
||
'string' == typeof t &&
|
||
(t = e.splitLines(
|
||
t
|
||
)), makeChange(e, { from: n, to: r, text: t, origin: i });
|
||
}
|
||
function rebaseHistSelSingle(e, t, n, r) {
|
||
n < e.line ? (e.line += r) : t < e.line && ((e.line = t), (e.ch = 0));
|
||
}
|
||
function rebaseHistArray(e, t, n, r) {
|
||
for (var i = 0; i < e.length; ++i) {
|
||
var o = e[i], a = !0;
|
||
if (o.ranges) {
|
||
o.copied || ((o = e[i] = o.deepCopy()), (o.copied = !0));
|
||
for (var s = 0; s < o.ranges.length; s++)
|
||
rebaseHistSelSingle(
|
||
o.ranges[s].anchor,
|
||
t,
|
||
n,
|
||
r
|
||
), rebaseHistSelSingle(o.ranges[s].head, t, n, r);
|
||
} else {
|
||
for (var l = 0; l < o.changes.length; ++l) {
|
||
var c = o.changes[l];
|
||
if (n < c.from.line)
|
||
(c.from = Pos(c.from.line + r, c.from.ch)), (c.to = Pos(
|
||
c.to.line + r,
|
||
c.to.ch
|
||
));
|
||
else if (t <= c.to.line) {
|
||
a = !1;
|
||
break;
|
||
}
|
||
}
|
||
a || (e.splice(0, i + 1), (i = 0));
|
||
}
|
||
}
|
||
}
|
||
function rebaseHist(e, t) {
|
||
var n = t.from.line, r = t.to.line, i = t.text.length - (r - n) - 1;
|
||
rebaseHistArray(e.done, n, r, i), rebaseHistArray(e.undone, n, r, i);
|
||
}
|
||
function changeLine(e, t, n, r) {
|
||
var i = t, o = t;
|
||
return 'number' == typeof t
|
||
? (o = getLine(e, clipLine(e, t)))
|
||
: (i = lineNo(
|
||
t
|
||
)), null == i ? null : (r(o, i) && e.cm && regLineChange(e.cm, i, n), o);
|
||
}
|
||
function adjustScrollWhenAboveVisible(e, t, n) {
|
||
heightAtLine(t) < ((e.curOp && e.curOp.scrollTop) || e.doc.scrollTop) &&
|
||
addToScrollTop(e, n);
|
||
}
|
||
function addLineWidget(e, t, n, r) {
|
||
var i = new ve(e, n, r), o = e.cm;
|
||
return o &&
|
||
i.noHScroll &&
|
||
(o.display.alignWidgets = !0), changeLine(e, t, 'widget', function(t) {
|
||
var n = t.widgets || (t.widgets = []);
|
||
if (
|
||
(null == i.insertAt
|
||
? n.push(i)
|
||
: n.splice(
|
||
Math.min(n.length - 1, Math.max(0, i.insertAt)),
|
||
0,
|
||
i
|
||
), (i.line = t), o && !lineIsHidden(e, t))
|
||
) {
|
||
var r = heightAtLine(t) < e.scrollTop;
|
||
updateLineHeight(t, t.height + widgetHeight(i)), r &&
|
||
addToScrollTop(o, i.height), (o.curOp.forceUpdate = !0);
|
||
}
|
||
return !0;
|
||
}), signalLater(
|
||
o,
|
||
'lineWidgetAdded',
|
||
o,
|
||
i,
|
||
'number' == typeof t ? t : lineNo(t)
|
||
), i;
|
||
}
|
||
function markText(e, t, n, r, i) {
|
||
if (r && r.shared) return markTextShared(e, t, n, r, i);
|
||
if (e.cm && !e.cm.curOp)
|
||
return operation(e.cm, markText)(e, t, n, r, i);
|
||
var o = new be(e, i), a = cmp(t, n);
|
||
if (
|
||
(r && copyObj(r, o, !1), a > 0 || (0 == a && !1 !== o.clearWhenEmpty))
|
||
)
|
||
return o;
|
||
if (
|
||
(o.replacedWith &&
|
||
((o.collapsed = !0), (o.widgetNode = eltP(
|
||
'span',
|
||
[o.replacedWith],
|
||
'CodeMirror-widget'
|
||
)), r.handleMouseEvents ||
|
||
o.widgetNode.setAttribute(
|
||
'cm-ignore-events',
|
||
'true'
|
||
), r.insertLeft && (o.widgetNode.insertLeft = !0)), o.collapsed)
|
||
) {
|
||
if (
|
||
conflictingCollapsedRange(e, t.line, t, n, o) ||
|
||
(t.line != n.line && conflictingCollapsedRange(e, n.line, t, n, o))
|
||
)
|
||
throw new Error(
|
||
'Inserting collapsed marker partially overlapping an existing one'
|
||
);
|
||
seeCollapsedSpans();
|
||
}
|
||
o.addToHistory &&
|
||
addChangeToHistory(
|
||
e,
|
||
{ from: t, to: n, origin: 'markText' },
|
||
e.sel,
|
||
NaN
|
||
);
|
||
var s, l = t.line, c = e.cm;
|
||
if (
|
||
(e.iter(l, n.line + 1, function(e) {
|
||
c &&
|
||
o.collapsed &&
|
||
!c.options.lineWrapping &&
|
||
visualLine(e) == c.display.maxLine &&
|
||
(s = !0), o.collapsed && l != t.line && updateLineHeight(e, 0), addMarkedSpan(e, new MarkedSpan(o, l == t.line ? t.ch : null, l == n.line ? n.ch : null)), ++l;
|
||
}), o.collapsed &&
|
||
e.iter(t.line, n.line + 1, function(t) {
|
||
lineIsHidden(e, t) && updateLineHeight(t, 0);
|
||
}), o.clearOnEnter &&
|
||
G(o, 'beforeCursorEnter', function() {
|
||
return o.clear();
|
||
}), o.readOnly &&
|
||
(seeReadOnlySpans(), (e.history.done.length ||
|
||
e.history.undone.length) &&
|
||
e.clearHistory()), o.collapsed &&
|
||
((o.id = ++ye), (o.atomic = !0)), c)
|
||
) {
|
||
if ((s && (c.curOp.updateMaxLine = !0), o.collapsed))
|
||
regChange(c, t.line, n.line + 1);
|
||
else if (
|
||
o.className ||
|
||
o.title ||
|
||
o.startStyle ||
|
||
o.endStyle ||
|
||
o.css
|
||
)
|
||
for (var u = t.line; u <= n.line; u++)
|
||
regLineChange(c, u, 'text');
|
||
o.atomic && reCheckSelection(c.doc), signalLater(
|
||
c,
|
||
'markerAdded',
|
||
c,
|
||
o
|
||
);
|
||
}
|
||
return o;
|
||
}
|
||
function markTextShared(e, t, n, r, i) {
|
||
(r = copyObj(r)), (r.shared = !1);
|
||
var o = [markText(e, t, n, r, i)], a = o[0], s = r.widgetNode;
|
||
return linkedDocs(e, function(e) {
|
||
s &&
|
||
(r.widgetNode = s.cloneNode(
|
||
!0
|
||
)), o.push(markText(e, clipPos(e, t), clipPos(e, n), r, i));
|
||
for (
|
||
var l = 0;
|
||
l < e.linked.length;
|
||
++l
|
||
) if (e.linked[l].isParent) return;
|
||
a = lst(o);
|
||
}), new xe(o, a);
|
||
}
|
||
function findSharedMarkers(e) {
|
||
return e.findMarks(
|
||
Pos(e.first, 0),
|
||
e.clipPos(Pos(e.lastLine())),
|
||
function(e) {
|
||
return e.parent;
|
||
}
|
||
);
|
||
}
|
||
function copySharedMarkers(e, t) {
|
||
for (var n = 0; n < t.length; n++) {
|
||
var r = t[n],
|
||
i = r.find(),
|
||
o = e.clipPos(i.from),
|
||
a = e.clipPos(i.to);
|
||
if (cmp(o, a)) {
|
||
var s = markText(e, o, a, r.primary, r.primary.type);
|
||
r.markers.push(s), (s.parent = r);
|
||
}
|
||
}
|
||
}
|
||
function detachSharedMarkers(e) {
|
||
for (var t = 0; t < e.length; t++) !(function(t) {
|
||
var n = e[t], r = [n.primary.doc];
|
||
linkedDocs(n.primary.doc, function(e) {
|
||
return r.push(e);
|
||
});
|
||
for (var i = 0; i < n.markers.length; i++) {
|
||
var o = n.markers[i];
|
||
-1 == indexOf(r, o.doc) &&
|
||
((o.parent = null), n.markers.splice(i--, 1));
|
||
}
|
||
})(t);
|
||
}
|
||
function onDrop(e) {
|
||
var t = this;
|
||
if (
|
||
(clearDragCursor(t), !signalDOMEvent(t, e) &&
|
||
!eventInWidget(t.display, e))
|
||
) {
|
||
e_preventDefault(e), a && (Se = +new Date());
|
||
var n = posFromMouse(t, e, !0), r = e.dataTransfer.files;
|
||
if (n && !t.isReadOnly())
|
||
if (r && r.length && window.FileReader && window.File)
|
||
for (var i = r.length, o = Array(i), s = 0, l = 0; l < i; ++l)
|
||
!(function(e, r) {
|
||
if (
|
||
!t.options.allowDropFileTypes ||
|
||
-1 != indexOf(t.options.allowDropFileTypes, e.type)
|
||
) {
|
||
var a = new FileReader();
|
||
(a.onload = operation(t, function() {
|
||
var e = a.result;
|
||
if (
|
||
(/[\x00-\x08\x0e-\x1f]{2}/.test(e) && (e = ''), (o[
|
||
r
|
||
] = e), ++s == i)
|
||
) {
|
||
n = clipPos(t.doc, n);
|
||
var l = {
|
||
from: n,
|
||
to: n,
|
||
text: t.doc.splitLines(o.join(t.doc.lineSeparator())),
|
||
origin: 'paste'
|
||
};
|
||
makeChange(t.doc, l), setSelectionReplaceHistory(
|
||
t.doc,
|
||
simpleSelection(n, changeEnd(l))
|
||
);
|
||
}
|
||
})), a.readAsText(e);
|
||
}
|
||
})(r[l], l);
|
||
else {
|
||
if (t.state.draggingText && t.doc.sel.contains(n) > -1)
|
||
return t.state.draggingText(e), void setTimeout(function() {
|
||
return t.display.input.focus();
|
||
}, 20);
|
||
try {
|
||
var c = e.dataTransfer.getData('Text');
|
||
if (c) {
|
||
var u;
|
||
if (
|
||
(t.state.draggingText &&
|
||
!t.state.draggingText.copy &&
|
||
(u = t.listSelections()), setSelectionNoUndo(
|
||
t.doc,
|
||
simpleSelection(n, n)
|
||
), u)
|
||
)
|
||
for (var d = 0; d < u.length; ++d)
|
||
replaceRange(t.doc, '', u[d].anchor, u[d].head, 'drag');
|
||
t.replaceSelection(
|
||
c,
|
||
'around',
|
||
'paste'
|
||
), t.display.input.focus();
|
||
}
|
||
} catch (e) {}
|
||
}
|
||
}
|
||
}
|
||
function onDragStart(e, t) {
|
||
if (a && (!e.state.draggingText || +new Date() - Se < 100))
|
||
return void e_stop(t);
|
||
if (
|
||
!signalDOMEvent(e, t) &&
|
||
!eventInWidget(e.display, t) &&
|
||
(t.dataTransfer.setData(
|
||
'Text',
|
||
e.getSelection()
|
||
), (t.dataTransfer.effectAllowed = 'copyMove'), t.dataTransfer
|
||
.setDragImage && !p)
|
||
) {
|
||
var n = elt('img', null, null, 'position: fixed; left: 0; top: 0;');
|
||
(n.src =
|
||
'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='), d &&
|
||
((n.width = n.height = 1), e.display.wrapper.appendChild(
|
||
n
|
||
), (n._top = n.offsetTop)), t.dataTransfer.setDragImage(
|
||
n,
|
||
0,
|
||
0
|
||
), d && n.parentNode.removeChild(n);
|
||
}
|
||
}
|
||
function onDragOver(e, t) {
|
||
var n = posFromMouse(e, t);
|
||
if (n) {
|
||
var r = document.createDocumentFragment();
|
||
drawSelectionCursor(e, n, r), e.display.dragCursor ||
|
||
((e.display.dragCursor = elt(
|
||
'div',
|
||
null,
|
||
'CodeMirror-cursors CodeMirror-dragcursors'
|
||
)), e.display.lineSpace.insertBefore(
|
||
e.display.dragCursor,
|
||
e.display.cursorDiv
|
||
)), removeChildrenAndAdd(e.display.dragCursor, r);
|
||
}
|
||
}
|
||
function clearDragCursor(e) {
|
||
e.display.dragCursor &&
|
||
(e.display.lineSpace.removeChild(
|
||
e.display.dragCursor
|
||
), (e.display.dragCursor = null));
|
||
}
|
||
function forEachCodeMirror(e) {
|
||
if (document.body.getElementsByClassName)
|
||
for (
|
||
var t = document.body.getElementsByClassName('CodeMirror'), n = 0;
|
||
n < t.length;
|
||
n++
|
||
) {
|
||
var r = t[n].CodeMirror;
|
||
r && e(r);
|
||
}
|
||
}
|
||
function ensureGlobalHandlers() {
|
||
ke || (registerGlobalHandlers(), (ke = !0));
|
||
}
|
||
function registerGlobalHandlers() {
|
||
var e;
|
||
G(window, 'resize', function() {
|
||
null == e &&
|
||
(e = setTimeout(function() {
|
||
(e = null), forEachCodeMirror(onResize);
|
||
}, 100));
|
||
}), G(window, 'blur', function() {
|
||
return forEachCodeMirror(onBlur);
|
||
});
|
||
}
|
||
function onResize(e) {
|
||
var t = e.display;
|
||
(t.lastWrapHeight == t.wrapper.clientHeight &&
|
||
t.lastWrapWidth == t.wrapper.clientWidth) ||
|
||
((t.cachedCharWidth = t.cachedTextHeight = t.cachedPaddingH = null), (t.scrollbarsClipped = !1), e.setSize());
|
||
}
|
||
function normalizeKeyName(e) {
|
||
var t = e.split(/-(?!$)/);
|
||
e = t[t.length - 1];
|
||
for (var n, r, i, o, a = 0; a < t.length - 1; a++) {
|
||
var s = t[a];
|
||
if (/^(cmd|meta|m)$/i.test(s)) o = !0;
|
||
else if (/^a(lt)?$/i.test(s)) n = !0;
|
||
else if (/^(c|ctrl|control)$/i.test(s)) r = !0;
|
||
else {
|
||
if (!/^s(hift)?$/i.test(s))
|
||
throw new Error('Unrecognized modifier name: ' + s);
|
||
i = !0;
|
||
}
|
||
}
|
||
return n &&
|
||
(e =
|
||
'Alt-' +
|
||
e), r && (e = 'Ctrl-' + e), o && (e = 'Cmd-' + e), i && (e = 'Shift-' + e), e;
|
||
}
|
||
function normalizeKeyMap(e) {
|
||
var t = {};
|
||
for (var n in e) if (e.hasOwnProperty(n)) {
|
||
var r = e[n];
|
||
if (/^(name|fallthrough|(de|at)tach)$/.test(n)) continue;
|
||
if ('...' == r) {
|
||
delete e[n];
|
||
continue;
|
||
}
|
||
for (
|
||
var i = map(n.split(' '), normalizeKeyName), o = 0;
|
||
o < i.length;
|
||
o++
|
||
) {
|
||
var a = void 0, s = void 0;
|
||
o == i.length - 1
|
||
? ((s = i.join(' ')), (a = r))
|
||
: ((s = i.slice(0, o + 1).join(' ')), (a = '...'));
|
||
var l = t[s];
|
||
if (l) {
|
||
if (l != a) throw new Error('Inconsistent bindings for ' + s);
|
||
} else t[s] = a;
|
||
}
|
||
delete e[n];
|
||
}
|
||
for (var c in t) e[c] = t[c];
|
||
return e;
|
||
}
|
||
function lookupKey(e, t, n, r) {
|
||
t = getKeyMap(t);
|
||
var i = t.call ? t.call(e, r) : t[e];
|
||
if (!1 === i) return 'nothing';
|
||
if ('...' === i) return 'multi';
|
||
if (null != i && n(i)) return 'handled';
|
||
if (t.fallthrough) {
|
||
if ('[object Array]' != Object.prototype.toString.call(t.fallthrough))
|
||
return lookupKey(e, t.fallthrough, n, r);
|
||
for (var o = 0; o < t.fallthrough.length; o++) {
|
||
var a = lookupKey(e, t.fallthrough[o], n, r);
|
||
if (a) return a;
|
||
}
|
||
}
|
||
}
|
||
function isModifierKey(e) {
|
||
var t = 'string' == typeof e ? e : Le[e.keyCode];
|
||
return 'Ctrl' == t || 'Alt' == t || 'Shift' == t || 'Mod' == t;
|
||
}
|
||
function keyName(e, t) {
|
||
if (d && 34 == e.keyCode && e.char) return !1;
|
||
var n = Le[e.keyCode], r = n;
|
||
return (
|
||
null != r &&
|
||
!e.altGraphKey &&
|
||
(e.altKey && 'Alt' != n && (r = 'Alt-' + r), (S
|
||
? e.metaKey
|
||
: e.ctrlKey) &&
|
||
'Ctrl' != n &&
|
||
(r = 'Ctrl-' + r), (S ? e.ctrlKey : e.metaKey) &&
|
||
'Cmd' != n &&
|
||
(r = 'Cmd-' + r), !t &&
|
||
e.shiftKey &&
|
||
'Shift' != n &&
|
||
(r = 'Shift-' + r), r)
|
||
);
|
||
}
|
||
function getKeyMap(e) {
|
||
return 'string' == typeof e ? Pe[e] : e;
|
||
}
|
||
function deleteNearSelection(e, t) {
|
||
for (var n = e.doc.sel.ranges, r = [], i = 0; i < n.length; i++) {
|
||
for (var o = t(n[i]); r.length && cmp(o.from, lst(r).to) <= 0; ) {
|
||
var a = r.pop();
|
||
if (cmp(a.from, o.from) < 0) {
|
||
o.from = a.from;
|
||
break;
|
||
}
|
||
}
|
||
r.push(o);
|
||
}
|
||
runInOp(e, function() {
|
||
for (
|
||
var t = r.length - 1;
|
||
t >= 0;
|
||
t--
|
||
) replaceRange(e.doc, '', r[t].from, r[t].to, '+delete');
|
||
ensureCursorVisible(e);
|
||
});
|
||
}
|
||
function lineStart(e, t) {
|
||
var n = getLine(e.doc, t), r = visualLine(n);
|
||
return r != n && (t = lineNo(r)), endOfLine(!0, e, r, t, 1);
|
||
}
|
||
function lineEnd(e, t) {
|
||
var n = getLine(e.doc, t), r = visualLineEnd(n);
|
||
return r != n && (t = lineNo(r)), endOfLine(!0, e, n, t, -1);
|
||
}
|
||
function lineStartSmart(e, t) {
|
||
var n = lineStart(e, t.line),
|
||
r = getLine(e.doc, n.line),
|
||
i = getOrder(r, e.doc.direction);
|
||
if (!i || 0 == i[0].level) {
|
||
var o = Math.max(0, r.text.search(/\S/)),
|
||
a = t.line == n.line && t.ch <= o && t.ch;
|
||
return Pos(n.line, a ? 0 : o, n.sticky);
|
||
}
|
||
return n;
|
||
}
|
||
function doHandleBinding(e, t, n) {
|
||
if ('string' == typeof t && !(t = De[t])) return !1;
|
||
e.display.input.ensurePolled();
|
||
var r = e.display.shift, i = !1;
|
||
try {
|
||
e.isReadOnly() &&
|
||
(e.state.suppressEdits = !0), n && (e.display.shift = !1), (i = t(e) != A);
|
||
} finally {
|
||
(e.display.shift = r), (e.state.suppressEdits = !1);
|
||
}
|
||
return i;
|
||
}
|
||
function lookupKeyForEditor(e, t, n) {
|
||
for (var r = 0; r < e.state.keyMaps.length; r++) {
|
||
var i = lookupKey(t, e.state.keyMaps[r], n, e);
|
||
if (i) return i;
|
||
}
|
||
return (
|
||
(e.options.extraKeys && lookupKey(t, e.options.extraKeys, n, e)) ||
|
||
lookupKey(t, e.options.keyMap, n, e)
|
||
);
|
||
}
|
||
function dispatchKey(e, t, n, r) {
|
||
var i = e.state.keySeq;
|
||
if (i) {
|
||
if (isModifierKey(t)) return 'handled';
|
||
He.set(50, function() {
|
||
e.state.keySeq == i &&
|
||
((e.state.keySeq = null), e.display.input.reset());
|
||
}), (t = i + ' ' + t);
|
||
}
|
||
var o = lookupKeyForEditor(e, t, r);
|
||
return 'multi' == o &&
|
||
(e.state.keySeq = t), 'handled' == o && signalLater(e, 'keyHandled', e, t, n), ('handled' != o && 'multi' != o) || (e_preventDefault(n), restartBlink(e)), i && !o && /\'$/.test(t) ? (e_preventDefault(n), !0) : !!o;
|
||
}
|
||
function handleKeyBinding(e, t) {
|
||
var n = keyName(t, !0);
|
||
return (
|
||
!!n &&
|
||
(t.shiftKey && !e.state.keySeq
|
||
? dispatchKey(e, 'Shift-' + n, t, function(t) {
|
||
return doHandleBinding(e, t, !0);
|
||
}) ||
|
||
dispatchKey(e, n, t, function(t) {
|
||
if ('string' == typeof t ? /^go[A-Z]/.test(t) : t.motion)
|
||
return doHandleBinding(e, t);
|
||
})
|
||
: dispatchKey(e, n, t, function(t) {
|
||
return doHandleBinding(e, t);
|
||
}))
|
||
);
|
||
}
|
||
function handleCharBinding(e, t, n) {
|
||
return dispatchKey(e, "'" + n + "'", t, function(t) {
|
||
return doHandleBinding(e, t, !0);
|
||
});
|
||
}
|
||
function onKeyDown(e) {
|
||
var t = this;
|
||
if (((t.curOp.focus = activeElt()), !signalDOMEvent(t, e))) {
|
||
a && s < 11 && 27 == e.keyCode && (e.returnValue = !1);
|
||
var n = e.keyCode;
|
||
t.display.shift = 16 == n || e.shiftKey;
|
||
var r = handleKeyBinding(t, e);
|
||
d &&
|
||
((We = r ? n : null), !r &&
|
||
88 == n &&
|
||
!$ &&
|
||
(y ? e.metaKey : e.ctrlKey) &&
|
||
t.replaceSelection('', null, 'cut')), 18 != n ||
|
||
/\bCodeMirror-crosshair\b/.test(t.display.lineDiv.className) ||
|
||
showCrossHair(t);
|
||
}
|
||
}
|
||
function showCrossHair(e) {
|
||
function up(e) {
|
||
(18 != e.keyCode && e.altKey) ||
|
||
(L(t, 'CodeMirror-crosshair'), off(document, 'keyup', up), off(
|
||
document,
|
||
'mouseover',
|
||
up
|
||
));
|
||
}
|
||
var t = e.display.lineDiv;
|
||
addClass(
|
||
t,
|
||
'CodeMirror-crosshair'
|
||
), G(document, 'keyup', up), G(document, 'mouseover', up);
|
||
}
|
||
function onKeyUp(e) {
|
||
16 == e.keyCode && (this.doc.sel.shift = !1), signalDOMEvent(this, e);
|
||
}
|
||
function onKeyPress(e) {
|
||
var t = this;
|
||
if (
|
||
!(eventInWidget(t.display, e) ||
|
||
signalDOMEvent(t, e) ||
|
||
(e.ctrlKey && !e.altKey) ||
|
||
(y && e.metaKey))
|
||
) {
|
||
var n = e.keyCode, r = e.charCode;
|
||
if (d && n == We) return (We = null), void e_preventDefault(e);
|
||
if (!d || (e.which && !(e.which < 10)) || !handleKeyBinding(t, e)) {
|
||
var i = String.fromCharCode(null == r ? n : r);
|
||
'\b' != i &&
|
||
(handleCharBinding(t, e, i) || t.display.input.onKeyPress(e));
|
||
}
|
||
}
|
||
}
|
||
function onMouseDown(e) {
|
||
var t = this, n = t.display;
|
||
if (
|
||
!(signalDOMEvent(t, e) || (n.activeTouch && n.input.supportsTouch()))
|
||
) {
|
||
if (
|
||
(n.input.ensurePolled(), (n.shift = e.shiftKey), eventInWidget(
|
||
n,
|
||
e
|
||
))
|
||
)
|
||
return void (l ||
|
||
((n.scroller.draggable = !1), setTimeout(function() {
|
||
return (n.scroller.draggable = !0);
|
||
}, 100)));
|
||
if (!clickInGutter(t, e)) {
|
||
var r = posFromMouse(t, e);
|
||
switch ((window.focus(), e_button(e))) {
|
||
case 1:
|
||
t.state.selectingText
|
||
? t.state.selectingText(e)
|
||
: r
|
||
? leftButtonDown(t, e, r)
|
||
: e_target(e) == n.scroller && e_preventDefault(e);
|
||
break;
|
||
case 2:
|
||
l && (t.state.lastMiddleDown = +new Date()), r &&
|
||
extendSelection(t.doc, r), setTimeout(function() {
|
||
return n.input.focus();
|
||
}, 20), e_preventDefault(e);
|
||
break;
|
||
case 3:
|
||
k ? onContextMenu(t, e) : delayBlurEvent(t);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function leftButtonDown(e, t, n) {
|
||
a ? setTimeout(bind(ensureFocus, e), 0) : (e.curOp.focus = activeElt());
|
||
var r, i = +new Date();
|
||
Ae && Ae.time > i - 400 && 0 == cmp(Ae.pos, n)
|
||
? (r = 'triple')
|
||
: Ne && Ne.time > i - 400 && 0 == cmp(Ne.pos, n)
|
||
? ((r = 'double'), (Ae = { time: i, pos: n }))
|
||
: ((r = 'single'), (Ne = { time: i, pos: n }));
|
||
var o, s = e.doc.sel, l = y ? t.metaKey : t.ctrlKey;
|
||
e.options.dragDrop &&
|
||
_ &&
|
||
!e.isReadOnly() &&
|
||
'single' == r &&
|
||
(o = s.contains(n)) > -1 &&
|
||
(cmp((o = s.ranges[o]).from(), n) < 0 || n.xRel > 0) &&
|
||
(cmp(o.to(), n) > 0 || n.xRel < 0)
|
||
? leftButtonStartDrag(e, t, n, l)
|
||
: leftButtonSelect(e, t, n, r, l);
|
||
}
|
||
function leftButtonStartDrag(e, t, n, r) {
|
||
var i = e.display,
|
||
o = !1,
|
||
c = operation(e, function(t) {
|
||
l &&
|
||
(i.scroller.draggable = !1), (e.state.draggingText = !1), off(document, 'mouseup', c), off(document, 'mousemove', u), off(i.scroller, 'dragstart', d), off(i.scroller, 'drop', c), o ||
|
||
(e_preventDefault(t), r || extendSelection(e.doc, n), l ||
|
||
(a && 9 == s)
|
||
? setTimeout(function() {
|
||
document.body.focus(), i.input.focus();
|
||
}, 20)
|
||
: i.input.focus());
|
||
}),
|
||
u = function(e) {
|
||
o =
|
||
o ||
|
||
Math.abs(t.clientX - e.clientX) +
|
||
Math.abs(t.clientY - e.clientY) >=
|
||
10;
|
||
},
|
||
d = function() {
|
||
return (o = !0);
|
||
};
|
||
l &&
|
||
(i.scroller.draggable = !0), (e.state.draggingText = c), (c.copy = y ? t.altKey : t.ctrlKey), i.scroller.dragDrop && i.scroller.dragDrop(), G(document, 'mouseup', c), G(document, 'mousemove', u), G(i.scroller, 'dragstart', d), G(i.scroller, 'drop', c), delayBlurEvent(e), setTimeout(function() {
|
||
return i.input.focus();
|
||
}, 20);
|
||
}
|
||
function leftButtonSelect(e, t, n, r, i) {
|
||
function extendTo(t) {
|
||
if (0 != cmp(f, t))
|
||
if (((f = t), 'rect' == r)) {
|
||
for (
|
||
var i = [],
|
||
o = e.options.tabSize,
|
||
u = countColumn(getLine(a, n.line).text, n.ch, o),
|
||
d = countColumn(getLine(a, t.line).text, t.ch, o),
|
||
p = Math.min(u, d),
|
||
h = Math.max(u, d),
|
||
g = Math.min(n.line, t.line),
|
||
m = Math.min(e.lastLine(), Math.max(n.line, t.line));
|
||
g <= m;
|
||
g++
|
||
) {
|
||
var v = getLine(a, g).text, y = findColumn(v, p, o);
|
||
p == h
|
||
? i.push(new he(Pos(g, y), Pos(g, y)))
|
||
: v.length > y &&
|
||
i.push(new he(Pos(g, y), Pos(g, findColumn(v, h, o))));
|
||
}
|
||
i.length ||
|
||
i.push(new he(n, n)), setSelection(
|
||
a,
|
||
normalizeSelection(c.ranges.slice(0, l).concat(i), l),
|
||
{ origin: '*mouse', scroll: !1 }
|
||
), e.scrollIntoView(t);
|
||
} else {
|
||
var b = s, x = b.anchor, C = t;
|
||
if ('single' != r) {
|
||
var w;
|
||
(w = 'double' == r
|
||
? e.findWordAt(t)
|
||
: new he(
|
||
Pos(t.line, 0),
|
||
clipPos(a, Pos(t.line + 1, 0))
|
||
)), cmp(w.anchor, x) > 0
|
||
? ((C = w.head), (x = minPos(b.from(), w.anchor)))
|
||
: ((C = w.anchor), (x = maxPos(b.to(), w.head)));
|
||
}
|
||
var S = c.ranges.slice(0);
|
||
(S[l] = new he(clipPos(a, x), C)), setSelection(
|
||
a,
|
||
normalizeSelection(S, l),
|
||
H
|
||
);
|
||
}
|
||
}
|
||
function extend(t) {
|
||
var n = ++g, i = posFromMouse(e, t, !0, 'rect' == r);
|
||
if (i)
|
||
if (0 != cmp(i, f)) {
|
||
(e.curOp.focus = activeElt()), extendTo(i);
|
||
var s = visibleLines(o, a);
|
||
(i.line >= s.to || i.line < s.from) &&
|
||
setTimeout(
|
||
operation(e, function() {
|
||
g == n && extend(t);
|
||
}),
|
||
150
|
||
);
|
||
} else {
|
||
var l = t.clientY < h.top ? -20 : t.clientY > h.bottom ? 20 : 0;
|
||
l &&
|
||
setTimeout(
|
||
operation(e, function() {
|
||
g == n && ((o.scroller.scrollTop += l), extend(t));
|
||
}),
|
||
50
|
||
);
|
||
}
|
||
}
|
||
function done(t) {
|
||
(e.state.selectingText = !1), (g = 1 / 0), e_preventDefault(t), o.input.focus(), off(document, 'mousemove', m), off(document, 'mouseup', v), (a.history.lastSelOrigin = null);
|
||
}
|
||
var o = e.display, a = e.doc;
|
||
e_preventDefault(t);
|
||
var s, l, c = a.sel, u = c.ranges;
|
||
if (
|
||
(i && !t.shiftKey
|
||
? ((l = a.sel.contains(n)), (s = l > -1 ? u[l] : new he(n, n)))
|
||
: ((s = a.sel.primary()), (l = a.sel.primIndex)), b
|
||
? t.shiftKey && t.metaKey
|
||
: t.altKey)
|
||
)
|
||
(r = 'rect'), i || (s = new he(n, n)), (n = posFromMouse(
|
||
e,
|
||
t,
|
||
!0,
|
||
!0
|
||
)), (l = -1);
|
||
else if ('double' == r) {
|
||
var d = e.findWordAt(n);
|
||
s = e.display.shift || a.extend
|
||
? extendRange(a, s, d.anchor, d.head)
|
||
: d;
|
||
} else if ('triple' == r) {
|
||
var p = new he(Pos(n.line, 0), clipPos(a, Pos(n.line + 1, 0)));
|
||
s = e.display.shift || a.extend
|
||
? extendRange(a, s, p.anchor, p.head)
|
||
: p;
|
||
} else s = extendRange(a, s, n);
|
||
i
|
||
? -1 == l
|
||
? ((l = u.length), setSelection(
|
||
a,
|
||
normalizeSelection(u.concat([s]), l),
|
||
{ scroll: !1, origin: '*mouse' }
|
||
))
|
||
: u.length > 1 && u[l].empty() && 'single' == r && !t.shiftKey
|
||
? (setSelection(
|
||
a,
|
||
normalizeSelection(
|
||
u.slice(0, l).concat(u.slice(l + 1)),
|
||
0
|
||
),
|
||
{ scroll: !1, origin: '*mouse' }
|
||
), (c = a.sel))
|
||
: replaceOneSelection(a, l, s, H)
|
||
: ((l = 0), setSelection(a, new fe([s], 0), H), (c = a.sel));
|
||
var f = n,
|
||
h = o.wrapper.getBoundingClientRect(),
|
||
g = 0,
|
||
m = operation(e, function(e) {
|
||
e_button(e) ? extend(e) : done(e);
|
||
}),
|
||
v = operation(e, done);
|
||
(e.state.selectingText = v), G(document, 'mousemove', m), G(document, 'mouseup', v);
|
||
}
|
||
function gutterEvent(e, t, n, r) {
|
||
var i, o;
|
||
try {
|
||
(i = t.clientX), (o = t.clientY);
|
||
} catch (t) {
|
||
return !1;
|
||
}
|
||
if (i >= Math.floor(e.display.gutters.getBoundingClientRect().right))
|
||
return !1;
|
||
r && e_preventDefault(t);
|
||
var a = e.display, s = a.lineDiv.getBoundingClientRect();
|
||
if (o > s.bottom || !hasHandler(e, n)) return e_defaultPrevented(t);
|
||
o -= s.top - a.viewOffset;
|
||
for (var l = 0; l < e.options.gutters.length; ++l) {
|
||
var c = a.gutters.childNodes[l];
|
||
if (c && c.getBoundingClientRect().right >= i) {
|
||
return signal(
|
||
e,
|
||
n,
|
||
e,
|
||
lineAtHeight(e.doc, o),
|
||
e.options.gutters[l],
|
||
t
|
||
), e_defaultPrevented(t);
|
||
}
|
||
}
|
||
}
|
||
function clickInGutter(e, t) {
|
||
return gutterEvent(e, t, 'gutterClick', !0);
|
||
}
|
||
function onContextMenu(e, t) {
|
||
eventInWidget(e.display, t) ||
|
||
contextMenuInGutter(e, t) ||
|
||
signalDOMEvent(e, t, 'contextmenu') ||
|
||
e.display.input.onContextMenu(t);
|
||
}
|
||
function contextMenuInGutter(e, t) {
|
||
return (
|
||
!!hasHandler(e, 'gutterContextMenu') &&
|
||
gutterEvent(e, t, 'gutterContextMenu', !1)
|
||
);
|
||
}
|
||
function themeChanged(e) {
|
||
(e.display.wrapper.className =
|
||
e.display.wrapper.className.replace(/\s*cm-s-\S+/g, '') +
|
||
e.options.theme.replace(/(^|\s)\s*/g, ' cm-s-')), clearCaches(e);
|
||
}
|
||
function guttersChanged(e) {
|
||
updateGutters(e), regChange(e), alignHorizontally(e);
|
||
}
|
||
function dragDropChanged(e, t, n) {
|
||
if (!t != !(n && n != Ee)) {
|
||
var r = e.display.dragFunctions, i = t ? G : off;
|
||
i(e.display.scroller, 'dragstart', r.start), i(
|
||
e.display.scroller,
|
||
'dragenter',
|
||
r.enter
|
||
), i(e.display.scroller, 'dragover', r.over), i(
|
||
e.display.scroller,
|
||
'dragleave',
|
||
r.leave
|
||
), i(e.display.scroller, 'drop', r.drop);
|
||
}
|
||
}
|
||
function wrappingChanged(e) {
|
||
e.options.lineWrapping
|
||
? (addClass(
|
||
e.display.wrapper,
|
||
'CodeMirror-wrap'
|
||
), (e.display.sizer.style.minWidth =
|
||
''), (e.display.sizerWidth = null))
|
||
: (L(e.display.wrapper, 'CodeMirror-wrap'), findMaxLine(
|
||
e
|
||
)), estimateLineHeights(e), regChange(e), clearCaches(e), setTimeout(function() {
|
||
return updateScrollbars(e);
|
||
}, 100);
|
||
}
|
||
function CodeMirror$1(e, t) {
|
||
var n = this;
|
||
if (!(this instanceof CodeMirror$1)) return new CodeMirror$1(e, t);
|
||
(this.options = t = t
|
||
? copyObj(t)
|
||
: {}), copyObj(Ie, t, !1), setGuttersForLineNumbers(t);
|
||
var r = t.value;
|
||
'string' == typeof r &&
|
||
(r = new we(
|
||
r,
|
||
t.mode,
|
||
null,
|
||
t.lineSeparator,
|
||
t.direction
|
||
)), (this.doc = r);
|
||
var i = new CodeMirror$1.inputStyles[t.inputStyle](this),
|
||
o = (this.display = new Display(e, r, i));
|
||
(o.wrapper.CodeMirror = this), updateGutters(this), themeChanged(this), t.lineWrapping && (this.display.wrapper.className += ' CodeMirror-wrap'), initScrollbars(this), (this.state = { keyMaps: [], overlays: [], modeGen: 0, overwrite: !1, delayingBlurEvent: !1, focused: !1, suppressEdits: !1, pasteIncoming: !1, cutIncoming: !1, selectingText: !1, draggingText: !1, highlight: new T(), keySeq: null, specialChars: null }), t.autofocus && !v && o.input.focus(), a &&
|
||
s < 11 &&
|
||
setTimeout(function() {
|
||
return n.display.input.reset(!0);
|
||
}, 20), registerEventHandlers(
|
||
this
|
||
), ensureGlobalHandlers(), startOperation(this), (this.curOp.forceUpdate = !0), attachDoc(this, r), (t.autofocus && !v) || this.hasFocus() ? setTimeout(bind(onFocus, this), 20) : onBlur(this);
|
||
for (var c in Fe) Fe.hasOwnProperty(c) && Fe[c](n, t[c], Ee);
|
||
maybeUpdateLineNumberWidth(this), t.finishInit && t.finishInit(this);
|
||
for (var u = 0; u < Be.length; ++u) Be[u](n);
|
||
endOperation(
|
||
this
|
||
), l && t.lineWrapping && 'optimizelegibility' == getComputedStyle(o.lineDiv).textRendering && (o.lineDiv.style.textRendering = 'auto');
|
||
}
|
||
function registerEventHandlers(e) {
|
||
function finishTouch() {
|
||
t.activeTouch &&
|
||
((n = setTimeout(function() {
|
||
return (t.activeTouch = null);
|
||
}, 1e3)), (r = t.activeTouch), (r.end = +new Date()));
|
||
}
|
||
function isMouseLikeTouchEvent(e) {
|
||
if (1 != e.touches.length) return !1;
|
||
var t = e.touches[0];
|
||
return t.radiusX <= 1 && t.radiusY <= 1;
|
||
}
|
||
function farAway(e, t) {
|
||
if (null == t.left) return !0;
|
||
var n = t.left - e.left, r = t.top - e.top;
|
||
return n * n + r * r > 400;
|
||
}
|
||
var t = e.display;
|
||
G(t.scroller, 'mousedown', operation(e, onMouseDown)), a && s < 11
|
||
? G(
|
||
t.scroller,
|
||
'dblclick',
|
||
operation(e, function(t) {
|
||
if (!signalDOMEvent(e, t)) {
|
||
var n = posFromMouse(e, t);
|
||
if (
|
||
n &&
|
||
!clickInGutter(e, t) &&
|
||
!eventInWidget(e.display, t)
|
||
) {
|
||
e_preventDefault(t);
|
||
var r = e.findWordAt(n);
|
||
extendSelection(e.doc, r.anchor, r.head);
|
||
}
|
||
}
|
||
})
|
||
)
|
||
: G(t.scroller, 'dblclick', function(t) {
|
||
return signalDOMEvent(e, t) || e_preventDefault(t);
|
||
}), k ||
|
||
G(t.scroller, 'contextmenu', function(t) {
|
||
return onContextMenu(e, t);
|
||
});
|
||
var n, r = { end: 0 };
|
||
G(t.scroller, 'touchstart', function(i) {
|
||
if (!signalDOMEvent(e, i) && !isMouseLikeTouchEvent(i)) {
|
||
t.input.ensurePolled(), clearTimeout(n);
|
||
var o = +new Date();
|
||
(t.activeTouch = {
|
||
start: o,
|
||
moved: !1,
|
||
prev: o - r.end <= 300 ? r : null
|
||
}), 1 == i.touches.length &&
|
||
((t.activeTouch.left = i.touches[0].pageX), (t.activeTouch.top =
|
||
i.touches[0].pageY));
|
||
}
|
||
}), G(t.scroller, 'touchmove', function() {
|
||
t.activeTouch && (t.activeTouch.moved = !0);
|
||
}), G(t.scroller, 'touchend', function(n) {
|
||
var r = t.activeTouch;
|
||
if (
|
||
r &&
|
||
!eventInWidget(t, n) &&
|
||
null != r.left &&
|
||
!r.moved &&
|
||
new Date() - r.start < 300
|
||
) {
|
||
var i, o = e.coordsChar(t.activeTouch, 'page');
|
||
(i = !r.prev || farAway(r, r.prev)
|
||
? new he(o, o)
|
||
: !r.prev.prev || farAway(r, r.prev.prev)
|
||
? e.findWordAt(o)
|
||
: new he(
|
||
Pos(o.line, 0),
|
||
clipPos(e.doc, Pos(o.line + 1, 0))
|
||
)), e.setSelection(
|
||
i.anchor,
|
||
i.head
|
||
), e.focus(), e_preventDefault(n);
|
||
}
|
||
finishTouch();
|
||
}), G(
|
||
t.scroller,
|
||
'touchcancel',
|
||
finishTouch
|
||
), G(t.scroller, 'scroll', function() {
|
||
t.scroller.clientHeight &&
|
||
(updateScrollTop(e, t.scroller.scrollTop), setScrollLeft(
|
||
e,
|
||
t.scroller.scrollLeft,
|
||
!0
|
||
), signal(e, 'scroll', e));
|
||
}), G(t.scroller, 'mousewheel', function(t) {
|
||
return onScrollWheel(e, t);
|
||
}), G(t.scroller, 'DOMMouseScroll', function(t) {
|
||
return onScrollWheel(e, t);
|
||
}), G(t.wrapper, 'scroll', function() {
|
||
return (t.wrapper.scrollTop = t.wrapper.scrollLeft = 0);
|
||
}), (t.dragFunctions = {
|
||
enter: function(t) {
|
||
signalDOMEvent(e, t) || e_stop(t);
|
||
},
|
||
over: function(t) {
|
||
signalDOMEvent(e, t) || (onDragOver(e, t), e_stop(t));
|
||
},
|
||
start: function(t) {
|
||
return onDragStart(e, t);
|
||
},
|
||
drop: operation(e, onDrop),
|
||
leave: function(t) {
|
||
signalDOMEvent(e, t) || clearDragCursor(e);
|
||
}
|
||
});
|
||
var i = t.input.getField();
|
||
G(i, 'keyup', function(t) {
|
||
return onKeyUp.call(e, t);
|
||
}), G(
|
||
i,
|
||
'keydown',
|
||
operation(e, onKeyDown)
|
||
), G(i, 'keypress', operation(e, onKeyPress)), G(i, 'focus', function(t) {
|
||
return onFocus(e, t);
|
||
}), G(i, 'blur', function(t) {
|
||
return onBlur(e, t);
|
||
});
|
||
}
|
||
function indentLine(e, t, n, r) {
|
||
var i, o = e.doc;
|
||
null == n &&
|
||
(n =
|
||
'add'), 'smart' == n && (o.mode.indent ? (i = getStateBefore(e, t)) : (n = 'prev'));
|
||
var a = e.options.tabSize,
|
||
s = getLine(o, t),
|
||
l = countColumn(s.text, null, a);
|
||
s.stateAfter && (s.stateAfter = null);
|
||
var c, u = s.text.match(/^\s*/)[0];
|
||
if (r || /\S/.test(s.text)) {
|
||
if (
|
||
'smart' == n &&
|
||
((c = o.mode.indent(i, s.text.slice(u.length), s.text)) == A ||
|
||
c > 150)
|
||
) {
|
||
if (!r) return;
|
||
n = 'prev';
|
||
}
|
||
} else (c = 0), (n = 'not');
|
||
'prev' == n
|
||
? (c = t > o.first ? countColumn(getLine(o, t - 1).text, null, a) : 0)
|
||
: 'add' == n
|
||
? (c = l + e.options.indentUnit)
|
||
: 'subtract' == n
|
||
? (c = l - e.options.indentUnit)
|
||
: 'number' == typeof n && (c = l + n), (c = Math.max(0, c));
|
||
var d = '', p = 0;
|
||
if (e.options.indentWithTabs)
|
||
for (var f = Math.floor(c / a); f; --f)
|
||
(p += a), (d += '\t');
|
||
if ((p < c && (d += spaceStr(c - p)), d != u))
|
||
return replaceRange(
|
||
o,
|
||
d,
|
||
Pos(t, 0),
|
||
Pos(t, u.length),
|
||
'+input'
|
||
), (s.stateAfter = null), !0;
|
||
for (var h = 0; h < o.sel.ranges.length; h++) {
|
||
var g = o.sel.ranges[h];
|
||
if (g.head.line == t && g.head.ch < u.length) {
|
||
var m = Pos(t, u.length);
|
||
replaceOneSelection(o, h, new he(m, m));
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
function setLastCopied(e) {
|
||
ze = e;
|
||
}
|
||
function applyTextInput(e, t, n, r, i) {
|
||
var o = e.doc;
|
||
(e.display.shift = !1), r || (r = o.sel);
|
||
var a = e.state.pasteIncoming || 'paste' == i, s = U(t), l = null;
|
||
if (a && r.ranges.length > 1)
|
||
if (ze && ze.text.join('\n') == t) {
|
||
if (r.ranges.length % ze.text.length == 0) {
|
||
l = [];
|
||
for (var c = 0; c < ze.text.length; c++)
|
||
l.push(o.splitLines(ze.text[c]));
|
||
}
|
||
} else
|
||
s.length == r.ranges.length &&
|
||
(l = map(s, function(e) {
|
||
return [e];
|
||
}));
|
||
for (var u, d = r.ranges.length - 1; d >= 0; d--) {
|
||
var p = r.ranges[d], f = p.from(), h = p.to();
|
||
p.empty() &&
|
||
(n && n > 0
|
||
? (f = Pos(f.line, f.ch - n))
|
||
: e.state.overwrite && !a
|
||
? (h = Pos(
|
||
h.line,
|
||
Math.min(
|
||
getLine(o, h.line).text.length,
|
||
h.ch + lst(s).length
|
||
)
|
||
))
|
||
: ze &&
|
||
ze.lineWise &&
|
||
ze.text.join('\n') == t &&
|
||
(f = h = Pos(f.line, 0))), (u = e.curOp.updateInput);
|
||
var g = {
|
||
from: f,
|
||
to: h,
|
||
text: l ? l[d % l.length] : s,
|
||
origin: i || (a ? 'paste' : e.state.cutIncoming ? 'cut' : '+input')
|
||
};
|
||
makeChange(e.doc, g), signalLater(e, 'inputRead', e, g);
|
||
}
|
||
t &&
|
||
!a &&
|
||
triggerElectric(
|
||
e,
|
||
t
|
||
), ensureCursorVisible(e), (e.curOp.updateInput = u), (e.curOp.typing = !0), (e.state.pasteIncoming = e.state.cutIncoming = !1);
|
||
}
|
||
function handlePaste(e, t) {
|
||
var n = e.clipboardData && e.clipboardData.getData('Text');
|
||
if (n)
|
||
return e.preventDefault(), t.isReadOnly() ||
|
||
t.options.disableInput ||
|
||
runInOp(t, function() {
|
||
return applyTextInput(t, n, 0, null, 'paste');
|
||
}), !0;
|
||
}
|
||
function triggerElectric(e, t) {
|
||
if (e.options.electricChars && e.options.smartIndent)
|
||
for (var n = e.doc.sel, r = n.ranges.length - 1; r >= 0; r--) {
|
||
var i = n.ranges[r];
|
||
if (
|
||
!(i.head.ch > 100 ||
|
||
(r && n.ranges[r - 1].head.line == i.head.line))
|
||
) {
|
||
var o = e.getModeAt(i.head), a = !1;
|
||
if (o.electricChars) {
|
||
for (var s = 0; s < o.electricChars.length; s++)
|
||
if (t.indexOf(o.electricChars.charAt(s)) > -1) {
|
||
a = indentLine(e, i.head.line, 'smart');
|
||
break;
|
||
}
|
||
} else
|
||
o.electricInput &&
|
||
o.electricInput.test(
|
||
getLine(e.doc, i.head.line).text.slice(0, i.head.ch)
|
||
) &&
|
||
(a = indentLine(e, i.head.line, 'smart'));
|
||
a && signalLater(e, 'electricInput', e, i.head.line);
|
||
}
|
||
}
|
||
}
|
||
function copyableRanges(e) {
|
||
for (var t = [], n = [], r = 0; r < e.doc.sel.ranges.length; r++) {
|
||
var i = e.doc.sel.ranges[r].head.line,
|
||
o = { anchor: Pos(i, 0), head: Pos(i + 1, 0) };
|
||
n.push(o), t.push(e.getRange(o.anchor, o.head));
|
||
}
|
||
return { text: t, ranges: n };
|
||
}
|
||
function disableBrowserMagic(e, t) {
|
||
e.setAttribute(
|
||
'autocorrect',
|
||
'off'
|
||
), e.setAttribute('autocapitalize', 'off'), e.setAttribute('spellcheck', !!t);
|
||
}
|
||
function hiddenTextarea() {
|
||
var e = elt(
|
||
'textarea',
|
||
null,
|
||
null,
|
||
'position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none'
|
||
),
|
||
t = elt(
|
||
'div',
|
||
[e],
|
||
null,
|
||
'overflow: hidden; position: relative; width: 3px; height: 0px;'
|
||
);
|
||
return l
|
||
? (e.style.width = '1000px')
|
||
: e.setAttribute(
|
||
'wrap',
|
||
'off'
|
||
), g && (e.style.border = '1px solid black'), disableBrowserMagic(e), t;
|
||
}
|
||
function findPosH(e, t, n, r, i) {
|
||
function findNextLine() {
|
||
var r = t.line + n;
|
||
return (
|
||
!(r < e.first || r >= e.first + e.size) &&
|
||
((t = new Pos(r, t.ch, t.sticky)), (s = getLine(e, r)))
|
||
);
|
||
}
|
||
function moveOnce(r) {
|
||
var o;
|
||
if (
|
||
null ==
|
||
(o = i ? moveVisually(e.cm, s, t, n) : moveLogically(s, t, n))
|
||
) {
|
||
if (r || !findNextLine()) return !1;
|
||
t = endOfLine(i, e.cm, s, t.line, n);
|
||
} else t = o;
|
||
return !0;
|
||
}
|
||
var o = t, a = n, s = getLine(e, t.line);
|
||
if ('char' == r) moveOnce();
|
||
else if ('column' == r) moveOnce(!0);
|
||
else if ('word' == r || 'group' == r)
|
||
for (
|
||
var l = null,
|
||
c = 'group' == r,
|
||
u = e.cm && e.cm.getHelper(t, 'wordChars'),
|
||
d = !0;
|
||
!(n < 0) || moveOnce(!d);
|
||
d = !1
|
||
) {
|
||
var p = s.text.charAt(t.ch) || '\n',
|
||
f = isWordChar(p, u)
|
||
? 'w'
|
||
: c && '\n' == p ? 'n' : !c || /\s/.test(p) ? null : 'p';
|
||
if ((!c || d || f || (f = 's'), l && l != f)) {
|
||
n < 0 && ((n = 1), moveOnce(), (t.sticky = 'after'));
|
||
break;
|
||
}
|
||
if ((f && (l = f), n > 0 && !moveOnce(!d))) break;
|
||
}
|
||
var h = skipAtomic(e, t, o, a, !0);
|
||
return equalCursorPos(o, h) && (h.hitSide = !0), h;
|
||
}
|
||
function findPosV(e, t, n, r) {
|
||
var i, o = e.doc, a = t.left;
|
||
if ('page' == r) {
|
||
var s = Math.min(
|
||
e.display.wrapper.clientHeight,
|
||
window.innerHeight || document.documentElement.clientHeight
|
||
),
|
||
l = Math.max(s - 0.5 * textHeight(e.display), 3);
|
||
i = (n > 0 ? t.bottom : t.top) + n * l;
|
||
} else 'line' == r && (i = n > 0 ? t.bottom + 3 : t.top - 3);
|
||
for (var c; (c = coordsChar(e, a, i)), c.outside; ) {
|
||
if (n < 0 ? i <= 0 : i >= o.height) {
|
||
c.hitSide = !0;
|
||
break;
|
||
}
|
||
i += 5 * n;
|
||
}
|
||
return c;
|
||
}
|
||
function posToDOM(e, t) {
|
||
var n = findViewForLine(e, t.line);
|
||
if (!n || n.hidden) return null;
|
||
var r = getLine(e.doc, t.line),
|
||
i = mapFromLineView(n, r, t.line),
|
||
o = getOrder(r, e.doc.direction),
|
||
a = 'left';
|
||
if (o) {
|
||
a = getBidiPartAt(o, t.ch) % 2 ? 'right' : 'left';
|
||
}
|
||
var s = nodeAndOffsetInLineMap(i.map, t.ch, a);
|
||
return (s.offset = 'right' == s.collapse ? s.end : s.start), s;
|
||
}
|
||
function isInGutter(e) {
|
||
for (
|
||
var t = e;
|
||
t;
|
||
t = t.parentNode
|
||
) if (/CodeMirror-gutter-wrapper/.test(t.className)) return !0;
|
||
return !1;
|
||
}
|
||
function badPos(e, t) {
|
||
return t && (e.bad = !0), e;
|
||
}
|
||
function domTextBetween(e, t, n, r, i) {
|
||
function recognizeMarker(e) {
|
||
return function(t) {
|
||
return t.id == e;
|
||
};
|
||
}
|
||
function close() {
|
||
a && ((o += s), (a = !1));
|
||
}
|
||
function addText(e) {
|
||
e && (close(), (o += e));
|
||
}
|
||
function walk(t) {
|
||
if (1 == t.nodeType) {
|
||
var n = t.getAttribute('cm-text');
|
||
if (null != n)
|
||
return void addText(n || t.textContent.replace(/\u200b/g, ''));
|
||
var o, l = t.getAttribute('cm-marker');
|
||
if (l) {
|
||
var c = e.findMarks(
|
||
Pos(r, 0),
|
||
Pos(i + 1, 0),
|
||
recognizeMarker(+l)
|
||
);
|
||
return void (c.length &&
|
||
(o = c[0].find()) &&
|
||
addText(getBetween(e.doc, o.from, o.to).join(s)));
|
||
}
|
||
if ('false' == t.getAttribute('contenteditable')) return;
|
||
var u = /^(pre|div|p)$/i.test(t.nodeName);
|
||
u && close();
|
||
for (var d = 0; d < t.childNodes.length; d++)
|
||
walk(t.childNodes[d]);
|
||
u && (a = !0);
|
||
} else 3 == t.nodeType && addText(t.nodeValue);
|
||
}
|
||
for (
|
||
var o = '', a = !1, s = e.doc.lineSeparator();
|
||
walk(t), t != n;
|
||
|
||
) t = t.nextSibling;
|
||
return o;
|
||
}
|
||
function domToPos(e, t, n) {
|
||
var r;
|
||
if (t == e.display.lineDiv) {
|
||
if (!(r = e.display.lineDiv.childNodes[n]))
|
||
return badPos(e.clipPos(Pos(e.display.viewTo - 1)), !0);
|
||
(t = null), (n = 0);
|
||
} else
|
||
for (r = t; ; r = r.parentNode) {
|
||
if (!r || r == e.display.lineDiv) return null;
|
||
if (r.parentNode && r.parentNode == e.display.lineDiv) break;
|
||
}
|
||
for (var i = 0; i < e.display.view.length; i++) {
|
||
var o = e.display.view[i];
|
||
if (o.node == r) return locateNodeInLineView(o, t, n);
|
||
}
|
||
}
|
||
function locateNodeInLineView(e, t, n) {
|
||
function find(t, n, r) {
|
||
for (
|
||
var i = -1;
|
||
i < (c ? c.length : 0);
|
||
i++
|
||
) for (var o = i < 0 ? l.map : c[i], a = 0; a < o.length; a += 3) {
|
||
var s = o[a + 2];
|
||
if (s == t || s == n) {
|
||
var u = lineNo(i < 0 ? e.line : e.rest[i]), d = o[a] + r;
|
||
return (r < 0 || s != t) && (d = o[a + (r ? 1 : 0)]), Pos(u, d);
|
||
}
|
||
}
|
||
}
|
||
var r = e.text.firstChild, i = !1;
|
||
if (!t || !contains(r, t)) return badPos(Pos(lineNo(e.line), 0), !0);
|
||
if (t == r && ((i = !0), (t = r.childNodes[n]), (n = 0), !t)) {
|
||
var o = e.rest ? lst(e.rest) : e.line;
|
||
return badPos(Pos(lineNo(o), o.text.length), i);
|
||
}
|
||
var a = 3 == t.nodeType ? t : null, s = t;
|
||
for (
|
||
a ||
|
||
1 != t.childNodes.length ||
|
||
3 != t.firstChild.nodeType ||
|
||
((a = t.firstChild), n && (n = a.nodeValue.length));
|
||
s.parentNode != r;
|
||
|
||
) s = s.parentNode;
|
||
var l = e.measure, c = l.maps, u = find(a, s, n);
|
||
if (u) return badPos(u, i);
|
||
for (
|
||
var d = s.nextSibling, p = a ? a.nodeValue.length - n : 0;
|
||
d;
|
||
d = d.nextSibling
|
||
) {
|
||
if ((u = find(d, d.firstChild, 0)))
|
||
return badPos(Pos(u.line, u.ch - p), i);
|
||
p += d.textContent.length;
|
||
}
|
||
for (var f = s.previousSibling, h = n; f; f = f.previousSibling) {
|
||
if ((u = find(f, f.firstChild, -1)))
|
||
return badPos(Pos(u.line, u.ch + h), i);
|
||
h += f.textContent.length;
|
||
}
|
||
}
|
||
function fromTextArea(e, t) {
|
||
function save() {
|
||
e.value = a.getValue();
|
||
}
|
||
if (
|
||
((t = t ? copyObj(t) : {}), (t.value = e.value), !t.tabindex &&
|
||
e.tabIndex &&
|
||
(t.tabindex = e.tabIndex), !t.placeholder &&
|
||
e.placeholder &&
|
||
(t.placeholder = e.placeholder), null == t.autofocus)
|
||
) {
|
||
var n = activeElt();
|
||
t.autofocus =
|
||
n == e ||
|
||
(null != e.getAttribute('autofocus') && n == document.body);
|
||
}
|
||
var r;
|
||
if (e.form && (G(e.form, 'submit', save), !t.leaveSubmitMethodAlone)) {
|
||
var i = e.form;
|
||
r = i.submit;
|
||
try {
|
||
var o = (i.submit = function() {
|
||
save(), (i.submit = r), i.submit(), (i.submit = o);
|
||
});
|
||
} catch (e) {}
|
||
}
|
||
(t.finishInit = function(t) {
|
||
(t.save = save), (t.getTextArea = function() {
|
||
return e;
|
||
}), (t.toTextArea = function() {
|
||
(t.toTextArea = isNaN), save(), e.parentNode.removeChild(
|
||
t.getWrapperElement()
|
||
), (e.style.display = ''), e.form &&
|
||
(off(e.form, 'submit', save), 'function' ==
|
||
typeof e.form.submit && (e.form.submit = r));
|
||
});
|
||
}), (e.style.display = 'none');
|
||
var a = CodeMirror$1(function(t) {
|
||
return e.parentNode.insertBefore(t, e.nextSibling);
|
||
}, t);
|
||
return a;
|
||
}
|
||
var e = navigator.userAgent,
|
||
t = navigator.platform,
|
||
n = /gecko\/\d/i.test(e),
|
||
r = /MSIE \d/.test(e),
|
||
i = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),
|
||
o = /Edge\/(\d+)/.exec(e),
|
||
a = r || i || o,
|
||
s = a && (r ? document.documentMode || 6 : +(o || i)[1]),
|
||
l = !o && /WebKit\//.test(e),
|
||
c = l && /Qt\/\d+\.\d+/.test(e),
|
||
u = !o && /Chrome\//.test(e),
|
||
d = /Opera\//.test(e),
|
||
p = /Apple Computer/.test(navigator.vendor),
|
||
f = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),
|
||
h = /PhantomJS/.test(e),
|
||
g = !o && /AppleWebKit/.test(e) && /Mobile\/\w+/.test(e),
|
||
m = /Android/.test(e),
|
||
v =
|
||
g || m || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),
|
||
y = g || /Mac/.test(t),
|
||
b = /\bCrOS\b/.test(e),
|
||
x = /win/i.test(t),
|
||
C = d && e.match(/Version\/(\d*\.\d*)/);
|
||
C && (C = Number(C[1])), C && C >= 15 && ((d = !1), (l = !0));
|
||
var w,
|
||
S = y && (c || (d && (null == C || C < 12.11))),
|
||
k = n || (a && s >= 9),
|
||
L = function(e, t) {
|
||
var n = e.className, r = classTest(t).exec(n);
|
||
if (r) {
|
||
var i = n.slice(r.index + r[0].length);
|
||
e.className = n.slice(0, r.index) + (i ? r[1] + i : '');
|
||
}
|
||
};
|
||
w = document.createRange
|
||
? function(e, t, n, r) {
|
||
var i = document.createRange();
|
||
return i.setEnd(r || e, n), i.setStart(e, t), i;
|
||
}
|
||
: function(e, t, n) {
|
||
var r = document.body.createTextRange();
|
||
try {
|
||
r.moveToElementText(e.parentNode);
|
||
} catch (e) {
|
||
return r;
|
||
}
|
||
return r.collapse(!0), r.moveEnd('character', n), r.moveStart(
|
||
'character',
|
||
t
|
||
), r;
|
||
};
|
||
var M = function(e) {
|
||
e.select();
|
||
};
|
||
g
|
||
? (M = function(e) {
|
||
(e.selectionStart = 0), (e.selectionEnd = e.value.length);
|
||
})
|
||
: a &&
|
||
(M = function(e) {
|
||
try {
|
||
e.select();
|
||
} catch (e) {}
|
||
});
|
||
var T = function() {
|
||
this.id = null;
|
||
};
|
||
T.prototype.set = function(e, t) {
|
||
clearTimeout(this.id), (this.id = setTimeout(t, e));
|
||
};
|
||
var O,
|
||
P,
|
||
N = 30,
|
||
A = {
|
||
toString: function() {
|
||
return 'CodeMirror.Pass';
|
||
}
|
||
},
|
||
D = { scroll: !1 },
|
||
H = { origin: '*mouse' },
|
||
W = { origin: '+move' },
|
||
E = [''],
|
||
I = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,
|
||
F = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/,
|
||
B = !1,
|
||
z = !1,
|
||
R = null,
|
||
V = (function() {
|
||
function charType(n) {
|
||
return n <= 247
|
||
? e.charAt(n)
|
||
: 1424 <= n && n <= 1524
|
||
? 'R'
|
||
: 1536 <= n && n <= 1785
|
||
? t.charAt(n - 1536)
|
||
: 1774 <= n && n <= 2220
|
||
? 'r'
|
||
: 8192 <= n && n <= 8203
|
||
? 'w'
|
||
: 8204 == n ? 'b' : 'L';
|
||
}
|
||
function BidiSpan(e, t, n) {
|
||
(this.level = e), (this.from = t), (this.to = n);
|
||
}
|
||
var e =
|
||
'bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN',
|
||
t =
|
||
'nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111',
|
||
n = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,
|
||
r = /[stwN]/,
|
||
i = /[LRr]/,
|
||
o = /[Lb1n]/,
|
||
a = /[1n]/;
|
||
return function(e, t) {
|
||
var s = 'ltr' == t ? 'L' : 'R';
|
||
if (0 == e.length || ('ltr' == t && !n.test(e))) return !1;
|
||
for (var l = e.length, c = [], u = 0; u < l; ++u)
|
||
c.push(charType(e.charCodeAt(u)));
|
||
for (var d = 0, p = s; d < l; ++d) {
|
||
var f = c[d];
|
||
'm' == f ? (c[d] = p) : (p = f);
|
||
}
|
||
for (var h = 0, g = s; h < l; ++h) {
|
||
var m = c[h];
|
||
'1' == m && 'r' == g
|
||
? (c[h] = 'n')
|
||
: i.test(m) && ((g = m), 'r' == m && (c[h] = 'R'));
|
||
}
|
||
for (var v = 1, y = c[0]; v < l - 1; ++v) {
|
||
var b = c[v];
|
||
'+' == b && '1' == y && '1' == c[v + 1]
|
||
? (c[v] = '1')
|
||
: ',' != b ||
|
||
y != c[v + 1] ||
|
||
('1' != y && 'n' != y) ||
|
||
(c[v] = y), (y = b);
|
||
}
|
||
for (var x = 0; x < l; ++x) {
|
||
var C = c[x];
|
||
if (',' == C) c[x] = 'N';
|
||
else if ('%' == C) {
|
||
var w = void 0;
|
||
for (w = x + 1; w < l && '%' == c[w]; ++w);
|
||
for (
|
||
var S = (x && '!' == c[x - 1]) || (w < l && '1' == c[w])
|
||
? '1'
|
||
: 'N',
|
||
k = x;
|
||
k < w;
|
||
++k
|
||
)
|
||
c[k] = S;
|
||
x = w - 1;
|
||
}
|
||
}
|
||
for (var L = 0, M = s; L < l; ++L) {
|
||
var T = c[L];
|
||
'L' == M && '1' == T ? (c[L] = 'L') : i.test(T) && (M = T);
|
||
}
|
||
for (var O = 0; O < l; ++O)
|
||
if (r.test(c[O])) {
|
||
var P = void 0;
|
||
for (P = O + 1; P < l && r.test(c[P]); ++P);
|
||
for (
|
||
var N = 'L' == (O ? c[O - 1] : s),
|
||
A = 'L' == (P < l ? c[P] : s),
|
||
D = N == A ? (N ? 'L' : 'R') : s,
|
||
H = O;
|
||
H < P;
|
||
++H
|
||
)
|
||
c[H] = D;
|
||
O = P - 1;
|
||
}
|
||
for (var W, E = [], I = 0; I < l; )
|
||
if (o.test(c[I])) {
|
||
var F = I;
|
||
for (++I; I < l && o.test(c[I]); ++I);
|
||
E.push(new BidiSpan(0, F, I));
|
||
} else {
|
||
var B = I, z = E.length;
|
||
for (++I; I < l && 'L' != c[I]; ++I);
|
||
for (var R = B; R < I; )
|
||
if (a.test(c[R])) {
|
||
B < R && E.splice(z, 0, new BidiSpan(1, B, R));
|
||
var V = R;
|
||
for (++R; R < I && a.test(c[R]); ++R);
|
||
E.splice(z, 0, new BidiSpan(2, V, R)), (B = R);
|
||
} else ++R;
|
||
B < I && E.splice(z, 0, new BidiSpan(1, B, I));
|
||
}
|
||
return 1 == E[0].level &&
|
||
(W = e.match(/^\s+/)) &&
|
||
((E[0].from = W[0].length), E.unshift(
|
||
new BidiSpan(0, 0, W[0].length)
|
||
)), 1 == lst(E).level &&
|
||
(W = e.match(/\s+$/)) &&
|
||
((lst(E).to -= W[0].length), E.push(
|
||
new BidiSpan(0, l - W[0].length, l)
|
||
)), 'rtl' == t ? E.reverse() : E;
|
||
};
|
||
})(),
|
||
j = [],
|
||
G = function(e, t, n) {
|
||
if (e.addEventListener) e.addEventListener(t, n, !1);
|
||
else if (e.attachEvent) e.attachEvent('on' + t, n);
|
||
else {
|
||
var r = e._handlers || (e._handlers = {});
|
||
r[t] = (r[t] || j).concat(n);
|
||
}
|
||
},
|
||
_ = (function() {
|
||
if (a && s < 9) return !1;
|
||
var e = elt('div');
|
||
return 'draggable' in e || 'dragDrop' in e;
|
||
})(),
|
||
U = 3 != '\n\nb'.split(/\n/).length
|
||
? function(e) {
|
||
for (var t = 0, n = [], r = e.length; t <= r; ) {
|
||
var i = e.indexOf('\n', t);
|
||
-1 == i && (i = e.length);
|
||
var o = e.slice(t, '\r' == e.charAt(i - 1) ? i - 1 : i),
|
||
a = o.indexOf('\r');
|
||
-1 != a
|
||
? (n.push(o.slice(0, a)), (t += a + 1))
|
||
: (n.push(o), (t = i + 1));
|
||
}
|
||
return n;
|
||
}
|
||
: function(e) {
|
||
return e.split(/\r\n?|\n/);
|
||
},
|
||
K = window.getSelection
|
||
? function(e) {
|
||
try {
|
||
return e.selectionStart != e.selectionEnd;
|
||
} catch (e) {
|
||
return !1;
|
||
}
|
||
}
|
||
: function(e) {
|
||
var t;
|
||
try {
|
||
t = e.ownerDocument.selection.createRange();
|
||
} catch (e) {}
|
||
return (
|
||
!(!t || t.parentElement() != e) &&
|
||
0 != t.compareEndPoints('StartToEnd', t)
|
||
);
|
||
},
|
||
$ = (function() {
|
||
var e = elt('div');
|
||
return (
|
||
'oncopy' in e ||
|
||
(e.setAttribute('oncopy', 'return;'), 'function' == typeof e.oncopy)
|
||
);
|
||
})(),
|
||
q = null,
|
||
X = {},
|
||
Y = {},
|
||
Z = {},
|
||
J = function(e, t) {
|
||
(this.pos = this.start = 0), (this.string = e), (this.tabSize =
|
||
t ||
|
||
8), (this.lastColumnPos = this.lastColumnValue = 0), (this.lineStart = 0);
|
||
};
|
||
(J.prototype.eol = function() {
|
||
return this.pos >= this.string.length;
|
||
}), (J.prototype.sol = function() {
|
||
return this.pos == this.lineStart;
|
||
}), (J.prototype.peek = function() {
|
||
return this.string.charAt(this.pos) || void 0;
|
||
}), (J.prototype.next = function() {
|
||
if (this.pos < this.string.length)
|
||
return this.string.charAt(this.pos++);
|
||
}), (J.prototype.eat = function(e) {
|
||
var t = this.string.charAt(this.pos);
|
||
if ('string' == typeof e ? t == e : t && (e.test ? e.test(t) : e(t)))
|
||
return ++this.pos, t;
|
||
}), (J.prototype.eatWhile = function(e) {
|
||
for (var t = this.pos; this.eat(e); );
|
||
return this.pos > t;
|
||
}), (J.prototype.eatSpace = function() {
|
||
for (
|
||
var e = this, t = this.pos;
|
||
/[\s\u00a0]/.test(this.string.charAt(this.pos));
|
||
|
||
)
|
||
++e.pos;
|
||
return this.pos > t;
|
||
}), (J.prototype.skipToEnd = function() {
|
||
this.pos = this.string.length;
|
||
}), (J.prototype.skipTo = function(e) {
|
||
var t = this.string.indexOf(e, this.pos);
|
||
if (t > -1) return (this.pos = t), !0;
|
||
}), (J.prototype.backUp = function(e) {
|
||
this.pos -= e;
|
||
}), (J.prototype.column = function() {
|
||
return this.lastColumnPos < this.start &&
|
||
((this.lastColumnValue = countColumn(
|
||
this.string,
|
||
this.start,
|
||
this.tabSize,
|
||
this.lastColumnPos,
|
||
this.lastColumnValue
|
||
)), (this.lastColumnPos = this.start)), this.lastColumnValue -
|
||
(this.lineStart
|
||
? countColumn(this.string, this.lineStart, this.tabSize)
|
||
: 0);
|
||
}), (J.prototype.indentation = function() {
|
||
return (
|
||
countColumn(this.string, null, this.tabSize) -
|
||
(this.lineStart
|
||
? countColumn(this.string, this.lineStart, this.tabSize)
|
||
: 0)
|
||
);
|
||
}), (J.prototype.match = function(e, t, n) {
|
||
if ('string' != typeof e) {
|
||
var r = this.string.slice(this.pos).match(e);
|
||
return r && r.index > 0
|
||
? null
|
||
: (r && !1 !== t && (this.pos += r[0].length), r);
|
||
}
|
||
var i = function(e) {
|
||
return n ? e.toLowerCase() : e;
|
||
};
|
||
if (i(this.string.substr(this.pos, e.length)) == i(e))
|
||
return !1 !== t && (this.pos += e.length), !0;
|
||
}), (J.prototype.current = function() {
|
||
return this.string.slice(this.start, this.pos);
|
||
}), (J.prototype.hideFirstChars = function(e, t) {
|
||
this.lineStart += e;
|
||
try {
|
||
return t();
|
||
} finally {
|
||
this.lineStart -= e;
|
||
}
|
||
});
|
||
var Q = function(e, t, n) {
|
||
(this.text = e), attachMarkedSpans(this, t), (this.height = n
|
||
? n(this)
|
||
: 1);
|
||
};
|
||
(Q.prototype.lineNo = function() {
|
||
return lineNo(this);
|
||
}), eventMixin(Q);
|
||
var ee,
|
||
te = {},
|
||
ne = {},
|
||
re = null,
|
||
ie = null,
|
||
oe = { left: 0, right: 0, top: 0, bottom: 0 },
|
||
ae = function(e, t, n) {
|
||
this.cm = n;
|
||
var r = (this.vert = elt(
|
||
'div',
|
||
[elt('div', null, null, 'min-width: 1px')],
|
||
'CodeMirror-vscrollbar'
|
||
)),
|
||
i = (this.horiz = elt(
|
||
'div',
|
||
[elt('div', null, null, 'height: 100%; min-height: 1px')],
|
||
'CodeMirror-hscrollbar'
|
||
));
|
||
e(r), e(i), G(r, 'scroll', function() {
|
||
r.clientHeight && t(r.scrollTop, 'vertical');
|
||
}), G(i, 'scroll', function() {
|
||
i.clientWidth && t(i.scrollLeft, 'horizontal');
|
||
}), (this.checkedZeroWidth = !1), a &&
|
||
s < 8 &&
|
||
(this.horiz.style.minHeight = this.vert.style.minWidth = '18px');
|
||
};
|
||
(ae.prototype.update = function(e) {
|
||
var t = e.scrollWidth > e.clientWidth + 1,
|
||
n = e.scrollHeight > e.clientHeight + 1,
|
||
r = e.nativeBarWidth;
|
||
if (n) {
|
||
(this.vert.style.display = 'block'), (this.vert.style.bottom = t
|
||
? r + 'px'
|
||
: '0');
|
||
var i = e.viewHeight - (t ? r : 0);
|
||
this.vert.firstChild.style.height =
|
||
Math.max(0, e.scrollHeight - e.clientHeight + i) + 'px';
|
||
} else
|
||
(this.vert.style.display = ''), (this.vert.firstChild.style.height =
|
||
'0');
|
||
if (t) {
|
||
(this.horiz.style.display = 'block'), (this.horiz.style.right = n
|
||
? r + 'px'
|
||
: '0'), (this.horiz.style.left = e.barLeft + 'px');
|
||
var o = e.viewWidth - e.barLeft - (n ? r : 0);
|
||
this.horiz.firstChild.style.width =
|
||
Math.max(0, e.scrollWidth - e.clientWidth + o) + 'px';
|
||
} else
|
||
(this.horiz.style.display = ''), (this.horiz.firstChild.style.width =
|
||
'0');
|
||
return !this.checkedZeroWidth &&
|
||
e.clientHeight > 0 &&
|
||
(0 == r && this.zeroWidthHack(), (this.checkedZeroWidth = !0)), {
|
||
right: n ? r : 0,
|
||
bottom: t ? r : 0
|
||
};
|
||
}), (ae.prototype.setScrollLeft = function(e) {
|
||
this.horiz.scrollLeft != e && (this.horiz.scrollLeft = e), this
|
||
.disableHoriz &&
|
||
this.enableZeroWidthBar(this.horiz, this.disableHoriz, 'horiz');
|
||
}), (ae.prototype.setScrollTop = function(e) {
|
||
this.vert.scrollTop != e && (this.vert.scrollTop = e), this
|
||
.disableVert &&
|
||
this.enableZeroWidthBar(this.vert, this.disableVert, 'vert');
|
||
}), (ae.prototype.zeroWidthHack = function() {
|
||
var e = y && !f ? '12px' : '18px';
|
||
(this.horiz.style.height = this.vert.style.width = e), (this.horiz.style.pointerEvents = this.vert.style.pointerEvents =
|
||
'none'), (this.disableHoriz = new T()), (this.disableVert = new T());
|
||
}), (ae.prototype.enableZeroWidthBar = function(e, t, n) {
|
||
function maybeDisable() {
|
||
var r = e.getBoundingClientRect();
|
||
('vert' == n
|
||
? document.elementFromPoint(r.right - 1, (r.top + r.bottom) / 2)
|
||
: document.elementFromPoint(
|
||
(r.right + r.left) / 2,
|
||
r.bottom - 1
|
||
)) != e
|
||
? (e.style.pointerEvents = 'none')
|
||
: t.set(1e3, maybeDisable);
|
||
}
|
||
(e.style.pointerEvents = 'auto'), t.set(1e3, maybeDisable);
|
||
}), (ae.prototype.clear = function() {
|
||
var e = this.horiz.parentNode;
|
||
e.removeChild(this.horiz), e.removeChild(this.vert);
|
||
});
|
||
var se = function() {};
|
||
(se.prototype.update = function() {
|
||
return { bottom: 0, right: 0 };
|
||
}), (se.prototype.setScrollLeft = function() {}), (se.prototype.setScrollTop = function() {}), (se.prototype.clear = function() {});
|
||
var le = { native: ae, null: se },
|
||
ce = 0,
|
||
ue = function(e, t, n) {
|
||
var r = e.display;
|
||
(this.viewport = t), (this.visible = visibleLines(
|
||
r,
|
||
e.doc,
|
||
t
|
||
)), (this.editorIsHidden = !r.wrapper
|
||
.offsetWidth), (this.wrapperHeight =
|
||
r.wrapper.clientHeight), (this.wrapperWidth =
|
||
r.wrapper.clientWidth), (this.oldDisplayWidth = displayWidth(
|
||
e
|
||
)), (this.force = n), (this.dims = getDimensions(
|
||
e
|
||
)), (this.events = []);
|
||
};
|
||
(ue.prototype.signal = function(e, t) {
|
||
hasHandler(e, t) && this.events.push(arguments);
|
||
}), (ue.prototype.finish = function() {
|
||
for (var e = this, t = 0; t < this.events.length; t++)
|
||
signal.apply(null, e.events[t]);
|
||
});
|
||
var de = 0, pe = null;
|
||
a ? (pe = -0.53) : n ? (pe = 15) : u ? (pe = -0.7) : p && (pe = -1 / 3);
|
||
var fe = function(e, t) {
|
||
(this.ranges = e), (this.primIndex = t);
|
||
};
|
||
(fe.prototype.primary = function() {
|
||
return this.ranges[this.primIndex];
|
||
}), (fe.prototype.equals = function(e) {
|
||
var t = this;
|
||
if (e == this) return !0;
|
||
if (
|
||
e.primIndex != this.primIndex ||
|
||
e.ranges.length != this.ranges.length
|
||
)
|
||
return !1;
|
||
for (var n = 0; n < this.ranges.length; n++) {
|
||
var r = t.ranges[n], i = e.ranges[n];
|
||
if (
|
||
!equalCursorPos(r.anchor, i.anchor) ||
|
||
!equalCursorPos(r.head, i.head)
|
||
)
|
||
return !1;
|
||
}
|
||
return !0;
|
||
}), (fe.prototype.deepCopy = function() {
|
||
for (var e = this, t = [], n = 0; n < this.ranges.length; n++)
|
||
t[n] = new he(copyPos(e.ranges[n].anchor), copyPos(e.ranges[n].head));
|
||
return new fe(t, this.primIndex);
|
||
}), (fe.prototype.somethingSelected = function() {
|
||
for (var e = this, t = 0; t < this.ranges.length; t++)
|
||
if (!e.ranges[t].empty()) return !0;
|
||
return !1;
|
||
}), (fe.prototype.contains = function(e, t) {
|
||
var n = this;
|
||
t || (t = e);
|
||
for (var r = 0; r < this.ranges.length; r++) {
|
||
var i = n.ranges[r];
|
||
if (cmp(t, i.from()) >= 0 && cmp(e, i.to()) <= 0) return r;
|
||
}
|
||
return -1;
|
||
});
|
||
var he = function(e, t) {
|
||
(this.anchor = e), (this.head = t);
|
||
};
|
||
(he.prototype.from = function() {
|
||
return minPos(this.anchor, this.head);
|
||
}), (he.prototype.to = function() {
|
||
return maxPos(this.anchor, this.head);
|
||
}), (he.prototype.empty = function() {
|
||
return (
|
||
this.head.line == this.anchor.line && this.head.ch == this.anchor.ch
|
||
);
|
||
});
|
||
var ge = function(e) {
|
||
var t = this;
|
||
(this.lines = e), (this.parent = null);
|
||
for (var n = 0, r = 0; r < e.length; ++r)
|
||
(e[r].parent = t), (n += e[r].height);
|
||
this.height = n;
|
||
};
|
||
(ge.prototype.chunkSize = function() {
|
||
return this.lines.length;
|
||
}), (ge.prototype.removeInner = function(e, t) {
|
||
for (var n = this, r = e, i = e + t; r < i; ++r) {
|
||
var o = n.lines[r];
|
||
(n.height -= o.height), cleanUpLine(o), signalLater(o, 'delete');
|
||
}
|
||
this.lines.splice(e, t);
|
||
}), (ge.prototype.collapse = function(e) {
|
||
e.push.apply(e, this.lines);
|
||
}), (ge.prototype.insertInner = function(e, t, n) {
|
||
var r = this;
|
||
(this.height += n), (this.lines = this.lines
|
||
.slice(0, e)
|
||
.concat(t)
|
||
.concat(this.lines.slice(e)));
|
||
for (var i = 0; i < t.length; ++i)
|
||
t[i].parent = r;
|
||
}), (ge.prototype.iterN = function(e, t, n) {
|
||
for (var r = this, i = e + t; e < i; ++e)
|
||
if (n(r.lines[e])) return !0;
|
||
});
|
||
var me = function(e) {
|
||
var t = this;
|
||
this.children = e;
|
||
for (var n = 0, r = 0, i = 0; i < e.length; ++i) {
|
||
var o = e[i];
|
||
(n += o.chunkSize()), (r += o.height), (o.parent = t);
|
||
}
|
||
(this.size = n), (this.height = r), (this.parent = null);
|
||
};
|
||
(me.prototype.chunkSize = function() {
|
||
return this.size;
|
||
}), (me.prototype.removeInner = function(e, t) {
|
||
var n = this;
|
||
this.size -= t;
|
||
for (var r = 0; r < this.children.length; ++r) {
|
||
var i = n.children[r], o = i.chunkSize();
|
||
if (e < o) {
|
||
var a = Math.min(t, o - e), s = i.height;
|
||
if (
|
||
(i.removeInner(e, a), (n.height -= s - i.height), o == a &&
|
||
(n.children.splice(r--, 1), (i.parent = null)), 0 == (t -= a))
|
||
)
|
||
break;
|
||
e = 0;
|
||
} else e -= o;
|
||
}
|
||
if (
|
||
this.size - t < 25 &&
|
||
(this.children.length > 1 || !(this.children[0] instanceof ge))
|
||
) {
|
||
var l = [];
|
||
this.collapse(l), (this.children = [
|
||
new ge(l)
|
||
]), (this.children[0].parent = this);
|
||
}
|
||
}), (me.prototype.collapse = function(e) {
|
||
for (var t = this, n = 0; n < this.children.length; ++n)
|
||
t.children[n].collapse(e);
|
||
}), (me.prototype.insertInner = function(e, t, n) {
|
||
var r = this;
|
||
(this.size += t.length), (this.height += n);
|
||
for (var i = 0; i < this.children.length; ++i) {
|
||
var o = r.children[i], a = o.chunkSize();
|
||
if (e <= a) {
|
||
if ((o.insertInner(e, t, n), o.lines && o.lines.length > 50)) {
|
||
for (
|
||
var s = o.lines.length % 25 + 25, l = s;
|
||
l < o.lines.length;
|
||
|
||
) {
|
||
var c = new ge(o.lines.slice(l, (l += 25)));
|
||
(o.height -= c.height), r.children.splice(
|
||
++i,
|
||
0,
|
||
c
|
||
), (c.parent = r);
|
||
}
|
||
(o.lines = o.lines.slice(0, s)), r.maybeSpill();
|
||
}
|
||
break;
|
||
}
|
||
e -= a;
|
||
}
|
||
}), (me.prototype.maybeSpill = function() {
|
||
if (!(this.children.length <= 10)) {
|
||
var e = this;
|
||
do {
|
||
var t = e.children.splice(e.children.length - 5, 5), n = new me(t);
|
||
if (e.parent) {
|
||
(e.size -= n.size), (e.height -= n.height);
|
||
var r = indexOf(e.parent.children, e);
|
||
e.parent.children.splice(r + 1, 0, n);
|
||
} else {
|
||
var i = new me(e.children);
|
||
(i.parent = e), (e.children = [i, n]), (e = i);
|
||
}
|
||
n.parent = e.parent;
|
||
} while (e.children.length > 10);
|
||
e.parent.maybeSpill();
|
||
}
|
||
}), (me.prototype.iterN = function(e, t, n) {
|
||
for (var r = this, i = 0; i < this.children.length; ++i) {
|
||
var o = r.children[i], a = o.chunkSize();
|
||
if (e < a) {
|
||
var s = Math.min(t, a - e);
|
||
if (o.iterN(e, s, n)) return !0;
|
||
if (0 == (t -= s)) break;
|
||
e = 0;
|
||
} else e -= a;
|
||
}
|
||
});
|
||
var ve = function(e, t, n) {
|
||
var r = this;
|
||
if (n) for (var i in n) n.hasOwnProperty(i) && (r[i] = n[i]);
|
||
(this.doc = e), (this.node = t);
|
||
};
|
||
(ve.prototype.clear = function() {
|
||
var e = this,
|
||
t = this.doc.cm,
|
||
n = this.line.widgets,
|
||
r = this.line,
|
||
i = lineNo(r);
|
||
if (null != i && n) {
|
||
for (var o = 0; o < n.length; ++o)
|
||
n[o] == e && n.splice(o--, 1);
|
||
n.length || (r.widgets = null);
|
||
var a = widgetHeight(this);
|
||
updateLineHeight(r, Math.max(0, r.height - a)), t &&
|
||
(runInOp(t, function() {
|
||
adjustScrollWhenAboveVisible(
|
||
t,
|
||
r,
|
||
-a
|
||
), regLineChange(t, i, 'widget');
|
||
}), signalLater(t, 'lineWidgetCleared', t, this, i));
|
||
}
|
||
}), (ve.prototype.changed = function() {
|
||
var e = this, t = this.height, n = this.doc.cm, r = this.line;
|
||
this.height = null;
|
||
var i = widgetHeight(this) - t;
|
||
i &&
|
||
(updateLineHeight(r, r.height + i), n &&
|
||
runInOp(n, function() {
|
||
(n.curOp.forceUpdate = !0), adjustScrollWhenAboveVisible(n, r, i), signalLater(n, 'lineWidgetChanged', n, e, lineNo(r));
|
||
}));
|
||
}), eventMixin(ve);
|
||
var ye = 0,
|
||
be = function(e, t) {
|
||
(this.lines = []), (this.type = t), (this.doc = e), (this.id = ++ye);
|
||
};
|
||
(be.prototype.clear = function() {
|
||
var e = this;
|
||
if (!this.explicitlyCleared) {
|
||
var t = this.doc.cm, n = t && !t.curOp;
|
||
if ((n && startOperation(t), hasHandler(this, 'clear'))) {
|
||
var r = this.find();
|
||
r && signalLater(this, 'clear', r.from, r.to);
|
||
}
|
||
for (var i = null, o = null, a = 0; a < this.lines.length; ++a) {
|
||
var s = e.lines[a], l = getMarkedSpanFor(s.markedSpans, e);
|
||
t && !e.collapsed
|
||
? regLineChange(t, lineNo(s), 'text')
|
||
: t &&
|
||
(null != l.to && (o = lineNo(s)), null != l.from &&
|
||
(i = lineNo(s))), (s.markedSpans = removeMarkedSpan(
|
||
s.markedSpans,
|
||
l
|
||
)), null == l.from &&
|
||
e.collapsed &&
|
||
!lineIsHidden(e.doc, s) &&
|
||
t &&
|
||
updateLineHeight(s, textHeight(t.display));
|
||
}
|
||
if (t && this.collapsed && !t.options.lineWrapping)
|
||
for (var c = 0; c < this.lines.length; ++c) {
|
||
var u = visualLine(e.lines[c]), d = lineLength(u);
|
||
d > t.display.maxLineLength &&
|
||
((t.display.maxLine = u), (t.display.maxLineLength = d), (t.display.maxLineChanged = !0));
|
||
}
|
||
null != i &&
|
||
t &&
|
||
this.collapsed &&
|
||
regChange(
|
||
t,
|
||
i,
|
||
o + 1
|
||
), (this.lines.length = 0), (this.explicitlyCleared = !0), this
|
||
.atomic &&
|
||
this.doc.cantEdit &&
|
||
((this.doc.cantEdit = !1), t && reCheckSelection(t.doc)), t &&
|
||
signalLater(t, 'markerCleared', t, this, i, o), n &&
|
||
endOperation(t), this.parent && this.parent.clear();
|
||
}
|
||
}), (be.prototype.find = function(e, t) {
|
||
var n = this;
|
||
null == e && 'bookmark' == this.type && (e = 1);
|
||
for (var r, i, o = 0; o < this.lines.length; ++o) {
|
||
var a = n.lines[o], s = getMarkedSpanFor(a.markedSpans, n);
|
||
if (null != s.from && ((r = Pos(t ? a : lineNo(a), s.from)), -1 == e))
|
||
return r;
|
||
if (null != s.to && ((i = Pos(t ? a : lineNo(a), s.to)), 1 == e))
|
||
return i;
|
||
}
|
||
return r && { from: r, to: i };
|
||
}), (be.prototype.changed = function() {
|
||
var e = this, t = this.find(-1, !0), n = this, r = this.doc.cm;
|
||
t &&
|
||
r &&
|
||
runInOp(r, function() {
|
||
var i = t.line, o = lineNo(t.line), a = findViewForLine(r, o);
|
||
if (
|
||
(a &&
|
||
(clearLineMeasurementCacheFor(
|
||
a
|
||
), (r.curOp.selectionChanged = r.curOp.forceUpdate = !0)), (r.curOp.updateMaxLine = !0), !lineIsHidden(
|
||
n.doc,
|
||
i
|
||
) && null != n.height)
|
||
) {
|
||
var s = n.height;
|
||
n.height = null;
|
||
var l = widgetHeight(n) - s;
|
||
l && updateLineHeight(i, i.height + l);
|
||
}
|
||
signalLater(r, 'markerChanged', r, e);
|
||
});
|
||
}), (be.prototype.attachLine = function(e) {
|
||
if (!this.lines.length && this.doc.cm) {
|
||
var t = this.doc.cm.curOp;
|
||
(t.maybeHiddenMarkers && -1 != indexOf(t.maybeHiddenMarkers, this)) ||
|
||
(t.maybeUnhiddenMarkers || (t.maybeUnhiddenMarkers = []))
|
||
.push(this);
|
||
}
|
||
this.lines.push(e);
|
||
}), (be.prototype.detachLine = function(e) {
|
||
if (
|
||
(this.lines.splice(indexOf(this.lines, e), 1), !this.lines.length &&
|
||
this.doc.cm)
|
||
) {
|
||
var t = this.doc.cm.curOp;
|
||
(t.maybeHiddenMarkers || (t.maybeHiddenMarkers = [])).push(this);
|
||
}
|
||
}), eventMixin(be);
|
||
var xe = function(e, t) {
|
||
var n = this;
|
||
(this.markers = e), (this.primary = t);
|
||
for (var r = 0; r < e.length; ++r)
|
||
e[r].parent = n;
|
||
};
|
||
(xe.prototype.clear = function() {
|
||
var e = this;
|
||
if (!this.explicitlyCleared) {
|
||
this.explicitlyCleared = !0;
|
||
for (var t = 0; t < this.markers.length; ++t)
|
||
e.markers[t].clear();
|
||
signalLater(this, 'clear');
|
||
}
|
||
}), (xe.prototype.find = function(e, t) {
|
||
return this.primary.find(e, t);
|
||
}), eventMixin(xe);
|
||
var Ce = 0,
|
||
we = function(e, t, n, r, i) {
|
||
if (!(this instanceof we)) return new we(e, t, n, r, i);
|
||
null == n && (n = 0), me.call(this, [
|
||
new ge([new Q('', null)])
|
||
]), (this.first = n), (this.scrollTop = this.scrollLeft = 0), (this.cantEdit = !1), (this.cleanGeneration = 1), (this.frontier = n);
|
||
var o = Pos(n, 0);
|
||
(this.sel = simpleSelection(o)), (this.history = new History(
|
||
null
|
||
)), (this.id = ++Ce), (this.modeOption = t), (this.lineSep = r), (this.direction = 'rtl' ==
|
||
i
|
||
? 'rtl'
|
||
: 'ltr'), (this.extend = !1), 'string' == typeof e &&
|
||
(e = this.splitLines(e)), updateDoc(this, {
|
||
from: o,
|
||
to: o,
|
||
text: e
|
||
}), setSelection(this, simpleSelection(o), D);
|
||
};
|
||
(we.prototype = createObj(me.prototype, {
|
||
constructor: we,
|
||
iter: function(e, t, n) {
|
||
n
|
||
? this.iterN(e - this.first, t - e, n)
|
||
: this.iterN(this.first, this.first + this.size, e);
|
||
},
|
||
insert: function(e, t) {
|
||
for (var n = 0, r = 0; r < t.length; ++r)
|
||
n += t[r].height;
|
||
this.insertInner(e - this.first, t, n);
|
||
},
|
||
remove: function(e, t) {
|
||
this.removeInner(e - this.first, t);
|
||
},
|
||
getValue: function(e) {
|
||
var t = getLines(this, this.first, this.first + this.size);
|
||
return !1 === e ? t : t.join(e || this.lineSeparator());
|
||
},
|
||
setValue: docMethodOp(function(e) {
|
||
var t = Pos(this.first, 0), n = this.first + this.size - 1;
|
||
makeChange(
|
||
this,
|
||
{
|
||
from: t,
|
||
to: Pos(n, getLine(this, n).text.length),
|
||
text: this.splitLines(e),
|
||
origin: 'setValue',
|
||
full: !0
|
||
},
|
||
!0
|
||
), this.cm && scrollToCoords(this.cm, 0, 0), setSelection(this, simpleSelection(t), D);
|
||
}),
|
||
replaceRange: function(e, t, n, r) {
|
||
(t = clipPos(this, t)), (n = n ? clipPos(this, n) : t), replaceRange(
|
||
this,
|
||
e,
|
||
t,
|
||
n,
|
||
r
|
||
);
|
||
},
|
||
getRange: function(e, t, n) {
|
||
var r = getBetween(this, clipPos(this, e), clipPos(this, t));
|
||
return !1 === n ? r : r.join(n || this.lineSeparator());
|
||
},
|
||
getLine: function(e) {
|
||
var t = this.getLineHandle(e);
|
||
return t && t.text;
|
||
},
|
||
getLineHandle: function(e) {
|
||
if (isLine(this, e)) return getLine(this, e);
|
||
},
|
||
getLineNumber: function(e) {
|
||
return lineNo(e);
|
||
},
|
||
getLineHandleVisualStart: function(e) {
|
||
return 'number' == typeof e && (e = getLine(this, e)), visualLine(e);
|
||
},
|
||
lineCount: function() {
|
||
return this.size;
|
||
},
|
||
firstLine: function() {
|
||
return this.first;
|
||
},
|
||
lastLine: function() {
|
||
return this.first + this.size - 1;
|
||
},
|
||
clipPos: function(e) {
|
||
return clipPos(this, e);
|
||
},
|
||
getCursor: function(e) {
|
||
var t = this.sel.primary();
|
||
return null == e || 'head' == e
|
||
? t.head
|
||
: 'anchor' == e
|
||
? t.anchor
|
||
: 'end' == e || 'to' == e || !1 === e ? t.to() : t.from();
|
||
},
|
||
listSelections: function() {
|
||
return this.sel.ranges;
|
||
},
|
||
somethingSelected: function() {
|
||
return this.sel.somethingSelected();
|
||
},
|
||
setCursor: docMethodOp(function(e, t, n) {
|
||
setSimpleSelection(
|
||
this,
|
||
clipPos(this, 'number' == typeof e ? Pos(e, t || 0) : e),
|
||
null,
|
||
n
|
||
);
|
||
}),
|
||
setSelection: docMethodOp(function(e, t, n) {
|
||
setSimpleSelection(this, clipPos(this, e), clipPos(this, t || e), n);
|
||
}),
|
||
extendSelection: docMethodOp(function(e, t, n) {
|
||
extendSelection(this, clipPos(this, e), t && clipPos(this, t), n);
|
||
}),
|
||
extendSelections: docMethodOp(function(e, t) {
|
||
extendSelections(this, clipPosArray(this, e), t);
|
||
}),
|
||
extendSelectionsBy: docMethodOp(function(e, t) {
|
||
extendSelections(
|
||
this,
|
||
clipPosArray(this, map(this.sel.ranges, e)),
|
||
t
|
||
);
|
||
}),
|
||
setSelections: docMethodOp(function(e, t, n) {
|
||
var r = this;
|
||
if (e.length) {
|
||
for (var i = [], o = 0; o < e.length; o++)
|
||
i[o] = new he(clipPos(r, e[o].anchor), clipPos(r, e[o].head));
|
||
null == t &&
|
||
(t = Math.min(e.length - 1, this.sel.primIndex)), setSelection(
|
||
this,
|
||
normalizeSelection(i, t),
|
||
n
|
||
);
|
||
}
|
||
}),
|
||
addSelection: docMethodOp(function(e, t, n) {
|
||
var r = this.sel.ranges.slice(0);
|
||
r.push(
|
||
new he(clipPos(this, e), clipPos(this, t || e))
|
||
), setSelection(this, normalizeSelection(r, r.length - 1), n);
|
||
}),
|
||
getSelection: function(e) {
|
||
for (var t, n = this, r = this.sel.ranges, i = 0; i < r.length; i++) {
|
||
var o = getBetween(n, r[i].from(), r[i].to());
|
||
t = t ? t.concat(o) : o;
|
||
}
|
||
return !1 === e ? t : t.join(e || this.lineSeparator());
|
||
},
|
||
getSelections: function(e) {
|
||
for (
|
||
var t = this, n = [], r = this.sel.ranges, i = 0;
|
||
i < r.length;
|
||
i++
|
||
) {
|
||
var o = getBetween(t, r[i].from(), r[i].to());
|
||
!1 !== e && (o = o.join(e || t.lineSeparator())), (n[i] = o);
|
||
}
|
||
return n;
|
||
},
|
||
replaceSelection: function(e, t, n) {
|
||
for (var r = [], i = 0; i < this.sel.ranges.length; i++)
|
||
r[i] = e;
|
||
this.replaceSelections(r, t, n || '+input');
|
||
},
|
||
replaceSelections: docMethodOp(function(e, t, n) {
|
||
for (
|
||
var r = this, i = [], o = this.sel, a = 0;
|
||
a < o.ranges.length;
|
||
a++
|
||
) {
|
||
var s = o.ranges[a];
|
||
i[a] = {
|
||
from: s.from(),
|
||
to: s.to(),
|
||
text: r.splitLines(e[a]),
|
||
origin: n
|
||
};
|
||
}
|
||
for (
|
||
var l = t && 'end' != t && computeReplacedSel(this, i, t),
|
||
c = i.length - 1;
|
||
c >= 0;
|
||
c--
|
||
) makeChange(r, i[c]);
|
||
l
|
||
? setSelectionReplaceHistory(this, l)
|
||
: this.cm && ensureCursorVisible(this.cm);
|
||
}),
|
||
undo: docMethodOp(function() {
|
||
makeChangeFromHistory(this, 'undo');
|
||
}),
|
||
redo: docMethodOp(function() {
|
||
makeChangeFromHistory(this, 'redo');
|
||
}),
|
||
undoSelection: docMethodOp(function() {
|
||
makeChangeFromHistory(this, 'undo', !0);
|
||
}),
|
||
redoSelection: docMethodOp(function() {
|
||
makeChangeFromHistory(this, 'redo', !0);
|
||
}),
|
||
setExtending: function(e) {
|
||
this.extend = e;
|
||
},
|
||
getExtending: function() {
|
||
return this.extend;
|
||
},
|
||
historySize: function() {
|
||
for (
|
||
var e = this.history, t = 0, n = 0, r = 0;
|
||
r < e.done.length;
|
||
r++
|
||
)
|
||
e.done[r].ranges || ++t;
|
||
for (var i = 0; i < e.undone.length; i++)
|
||
e.undone[i].ranges || ++n;
|
||
return { undo: t, redo: n };
|
||
},
|
||
clearHistory: function() {
|
||
this.history = new History(this.history.maxGeneration);
|
||
},
|
||
markClean: function() {
|
||
this.cleanGeneration = this.changeGeneration(!0);
|
||
},
|
||
changeGeneration: function(e) {
|
||
return e &&
|
||
(this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null), this
|
||
.history.generation;
|
||
},
|
||
isClean: function(e) {
|
||
return this.history.generation == (e || this.cleanGeneration);
|
||
},
|
||
getHistory: function() {
|
||
return {
|
||
done: copyHistoryArray(this.history.done),
|
||
undone: copyHistoryArray(this.history.undone)
|
||
};
|
||
},
|
||
setHistory: function(e) {
|
||
var t = (this.history = new History(this.history.maxGeneration));
|
||
(t.done = copyHistoryArray(
|
||
e.done.slice(0),
|
||
null,
|
||
!0
|
||
)), (t.undone = copyHistoryArray(e.undone.slice(0), null, !0));
|
||
},
|
||
setGutterMarker: docMethodOp(function(e, t, n) {
|
||
return changeLine(this, e, 'gutter', function(e) {
|
||
var r = e.gutterMarkers || (e.gutterMarkers = {});
|
||
return (r[t] = n), !n && isEmpty(r) && (e.gutterMarkers = null), !0;
|
||
});
|
||
}),
|
||
clearGutter: docMethodOp(function(e) {
|
||
var t = this;
|
||
this.iter(function(n) {
|
||
n.gutterMarkers &&
|
||
n.gutterMarkers[e] &&
|
||
changeLine(t, n, 'gutter', function() {
|
||
return (n.gutterMarkers[
|
||
e
|
||
] = null), isEmpty(n.gutterMarkers) && (n.gutterMarkers = null), !0;
|
||
});
|
||
});
|
||
}),
|
||
lineInfo: function(e) {
|
||
var t;
|
||
if ('number' == typeof e) {
|
||
if (!isLine(this, e)) return null;
|
||
if (((t = e), !(e = getLine(this, e)))) return null;
|
||
} else if (null == (t = lineNo(e))) return null;
|
||
return {
|
||
line: t,
|
||
handle: e,
|
||
text: e.text,
|
||
gutterMarkers: e.gutterMarkers,
|
||
textClass: e.textClass,
|
||
bgClass: e.bgClass,
|
||
wrapClass: e.wrapClass,
|
||
widgets: e.widgets
|
||
};
|
||
},
|
||
addLineClass: docMethodOp(function(e, t, n) {
|
||
return changeLine(
|
||
this,
|
||
e,
|
||
'gutter' == t ? 'gutter' : 'class',
|
||
function(e) {
|
||
var r = 'text' == t
|
||
? 'textClass'
|
||
: 'background' == t
|
||
? 'bgClass'
|
||
: 'gutter' == t ? 'gutterClass' : 'wrapClass';
|
||
if (e[r]) {
|
||
if (classTest(n).test(e[r])) return !1;
|
||
e[r] += ' ' + n;
|
||
} else e[r] = n;
|
||
return !0;
|
||
}
|
||
);
|
||
}),
|
||
removeLineClass: docMethodOp(function(e, t, n) {
|
||
return changeLine(
|
||
this,
|
||
e,
|
||
'gutter' == t ? 'gutter' : 'class',
|
||
function(e) {
|
||
var r = 'text' == t
|
||
? 'textClass'
|
||
: 'background' == t
|
||
? 'bgClass'
|
||
: 'gutter' == t ? 'gutterClass' : 'wrapClass',
|
||
i = e[r];
|
||
if (!i) return !1;
|
||
if (null == n) e[r] = null;
|
||
else {
|
||
var o = i.match(classTest(n));
|
||
if (!o) return !1;
|
||
var a = o.index + o[0].length;
|
||
e[r] =
|
||
i.slice(0, o.index) +
|
||
(o.index && a != i.length ? ' ' : '') +
|
||
i.slice(a) || null;
|
||
}
|
||
return !0;
|
||
}
|
||
);
|
||
}),
|
||
addLineWidget: docMethodOp(function(e, t, n) {
|
||
return addLineWidget(this, e, t, n);
|
||
}),
|
||
removeLineWidget: function(e) {
|
||
e.clear();
|
||
},
|
||
markText: function(e, t, n) {
|
||
return markText(
|
||
this,
|
||
clipPos(this, e),
|
||
clipPos(this, t),
|
||
n,
|
||
(n && n.type) || 'range'
|
||
);
|
||
},
|
||
setBookmark: function(e, t) {
|
||
var n = {
|
||
replacedWith: t && (null == t.nodeType ? t.widget : t),
|
||
insertLeft: t && t.insertLeft,
|
||
clearWhenEmpty: !1,
|
||
shared: t && t.shared,
|
||
handleMouseEvents: t && t.handleMouseEvents
|
||
};
|
||
return (e = clipPos(this, e)), markText(this, e, e, n, 'bookmark');
|
||
},
|
||
findMarksAt: function(e) {
|
||
e = clipPos(this, e);
|
||
var t = [], n = getLine(this, e.line).markedSpans;
|
||
if (n)
|
||
for (var r = 0; r < n.length; ++r) {
|
||
var i = n[r];
|
||
(null == i.from || i.from <= e.ch) &&
|
||
(null == i.to || i.to >= e.ch) &&
|
||
t.push(i.marker.parent || i.marker);
|
||
}
|
||
return t;
|
||
},
|
||
findMarks: function(e, t, n) {
|
||
(e = clipPos(this, e)), (t = clipPos(this, t));
|
||
var r = [], i = e.line;
|
||
return this.iter(e.line, t.line + 1, function(o) {
|
||
var a = o.markedSpans;
|
||
if (a)
|
||
for (var s = 0; s < a.length; s++) {
|
||
var l = a[s];
|
||
(null != l.to && i == e.line && e.ch >= l.to) ||
|
||
(null == l.from && i != e.line) ||
|
||
(null != l.from && i == t.line && l.from >= t.ch) ||
|
||
(n && !n(l.marker)) ||
|
||
r.push(l.marker.parent || l.marker);
|
||
}
|
||
++i;
|
||
}), r;
|
||
},
|
||
getAllMarks: function() {
|
||
var e = [];
|
||
return this.iter(function(t) {
|
||
var n = t.markedSpans;
|
||
if (n)
|
||
for (var r = 0; r < n.length; ++r)
|
||
null != n[r].from && e.push(n[r].marker);
|
||
}), e;
|
||
},
|
||
posFromIndex: function(e) {
|
||
var t, n = this.first, r = this.lineSeparator().length;
|
||
return this.iter(function(i) {
|
||
var o = i.text.length + r;
|
||
if (o > e) return (t = e), !0;
|
||
(e -= o), ++n;
|
||
}), clipPos(this, Pos(n, t));
|
||
},
|
||
indexFromPos: function(e) {
|
||
e = clipPos(this, e);
|
||
var t = e.ch;
|
||
if (e.line < this.first || e.ch < 0) return 0;
|
||
var n = this.lineSeparator().length;
|
||
return this.iter(this.first, e.line, function(e) {
|
||
t += e.text.length + n;
|
||
}), t;
|
||
},
|
||
copy: function(e) {
|
||
var t = new we(
|
||
getLines(this, this.first, this.first + this.size),
|
||
this.modeOption,
|
||
this.first,
|
||
this.lineSep,
|
||
this.direction
|
||
);
|
||
return (t.scrollTop = this.scrollTop), (t.scrollLeft = this.scrollLeft), (t.sel = this.sel), (t.extend = !1), e &&
|
||
((t.history.undoDepth = this.history.undoDepth), t.setHistory(
|
||
this.getHistory()
|
||
)), t;
|
||
},
|
||
linkedDoc: function(e) {
|
||
e || (e = {});
|
||
var t = this.first, n = this.first + this.size;
|
||
null != e.from && e.from > t && (t = e.from), null != e.to &&
|
||
e.to < n &&
|
||
(n = e.to);
|
||
var r = new we(
|
||
getLines(this, t, n),
|
||
e.mode || this.modeOption,
|
||
t,
|
||
this.lineSep,
|
||
this.direction
|
||
);
|
||
return e.sharedHist && (r.history = this.history), (this.linked ||
|
||
(this.linked = []))
|
||
.push({ doc: r, sharedHist: e.sharedHist }), (r.linked = [
|
||
{ doc: this, isParent: !0, sharedHist: e.sharedHist }
|
||
]), copySharedMarkers(r, findSharedMarkers(this)), r;
|
||
},
|
||
unlinkDoc: function(e) {
|
||
var t = this;
|
||
if ((e instanceof CodeMirror$1 && (e = e.doc), this.linked))
|
||
for (var n = 0; n < this.linked.length; ++n) {
|
||
var r = t.linked[n];
|
||
if (r.doc == e) {
|
||
t.linked.splice(n, 1), e.unlinkDoc(t), detachSharedMarkers(
|
||
findSharedMarkers(t)
|
||
);
|
||
break;
|
||
}
|
||
}
|
||
if (e.history == this.history) {
|
||
var i = [e.id];
|
||
linkedDocs(
|
||
e,
|
||
function(e) {
|
||
return i.push(e.id);
|
||
},
|
||
!0
|
||
), (e.history = new History(
|
||
null
|
||
)), (e.history.done = copyHistoryArray(
|
||
this.history.done,
|
||
i
|
||
)), (e.history.undone = copyHistoryArray(this.history.undone, i));
|
||
}
|
||
},
|
||
iterLinkedDocs: function(e) {
|
||
linkedDocs(this, e);
|
||
},
|
||
getMode: function() {
|
||
return this.mode;
|
||
},
|
||
getEditor: function() {
|
||
return this.cm;
|
||
},
|
||
splitLines: function(e) {
|
||
return this.lineSep ? e.split(this.lineSep) : U(e);
|
||
},
|
||
lineSeparator: function() {
|
||
return this.lineSep || '\n';
|
||
},
|
||
setDirection: docMethodOp(function(e) {
|
||
'rtl' != e && (e = 'ltr'), e != this.direction &&
|
||
((this.direction = e), this.iter(function(e) {
|
||
return (e.order = null);
|
||
}), this.cm && directionChanged(this.cm));
|
||
})
|
||
})), (we.prototype.eachLine = we.prototype.iter);
|
||
for (
|
||
var Se = 0,
|
||
ke = !1,
|
||
Le = {
|
||
3: 'Enter',
|
||
8: 'Backspace',
|
||
9: 'Tab',
|
||
13: 'Enter',
|
||
16: 'Shift',
|
||
17: 'Ctrl',
|
||
18: 'Alt',
|
||
19: 'Pause',
|
||
20: 'CapsLock',
|
||
27: 'Esc',
|
||
32: 'Space',
|
||
33: 'PageUp',
|
||
34: 'PageDown',
|
||
35: 'End',
|
||
36: 'Home',
|
||
37: 'Left',
|
||
38: 'Up',
|
||
39: 'Right',
|
||
40: 'Down',
|
||
44: 'PrintScrn',
|
||
45: 'Insert',
|
||
46: 'Delete',
|
||
59: ';',
|
||
61: '=',
|
||
91: 'Mod',
|
||
92: 'Mod',
|
||
93: 'Mod',
|
||
106: '*',
|
||
107: '=',
|
||
109: '-',
|
||
110: '.',
|
||
111: '/',
|
||
127: 'Delete',
|
||
173: '-',
|
||
186: ';',
|
||
187: '=',
|
||
188: ',',
|
||
189: '-',
|
||
190: '.',
|
||
191: '/',
|
||
192: '`',
|
||
219: '[',
|
||
220: '\\',
|
||
221: ']',
|
||
222: "'",
|
||
63232: 'Up',
|
||
63233: 'Down',
|
||
63234: 'Left',
|
||
63235: 'Right',
|
||
63272: 'Delete',
|
||
63273: 'Home',
|
||
63275: 'End',
|
||
63276: 'PageUp',
|
||
63277: 'PageDown',
|
||
63302: 'Insert'
|
||
},
|
||
Me = 0;
|
||
Me < 10;
|
||
Me++
|
||
) Le[Me + 48] = Le[Me + 96] = String(Me);
|
||
for (var Te = 65; Te <= 90; Te++) Le[Te] = String.fromCharCode(Te);
|
||
for (var Oe = 1; Oe <= 12; Oe++) Le[Oe + 111] = Le[Oe + 63235] = 'F' + Oe;
|
||
var Pe = {};
|
||
(Pe.basic = {
|
||
Left: 'goCharLeft',
|
||
Right: 'goCharRight',
|
||
Up: 'goLineUp',
|
||
Down: 'goLineDown',
|
||
End: 'goLineEnd',
|
||
Home: 'goLineStartSmart',
|
||
PageUp: 'goPageUp',
|
||
PageDown: 'goPageDown',
|
||
Delete: 'delCharAfter',
|
||
Backspace: 'delCharBefore',
|
||
'Shift-Backspace': 'delCharBefore',
|
||
Tab: 'defaultTab',
|
||
'Shift-Tab': 'indentAuto',
|
||
Enter: 'newlineAndIndent',
|
||
Insert: 'toggleOverwrite',
|
||
Esc: 'singleSelection'
|
||
}), (Pe.pcDefault = { 'Ctrl-A': 'selectAll', 'Ctrl-D': 'deleteLine', 'Ctrl-Z': 'undo', 'Shift-Ctrl-Z': 'redo', 'Ctrl-Y': 'redo', 'Ctrl-Home': 'goDocStart', 'Ctrl-End': 'goDocEnd', 'Ctrl-Up': 'goLineUp', 'Ctrl-Down': 'goLineDown', 'Ctrl-Left': 'goGroupLeft', 'Ctrl-Right': 'goGroupRight', 'Alt-Left': 'goLineStart', 'Alt-Right': 'goLineEnd', 'Ctrl-Backspace': 'delGroupBefore', 'Ctrl-Delete': 'delGroupAfter', 'Ctrl-S': 'save', 'Ctrl-F': 'find', 'Ctrl-G': 'findNext', 'Shift-Ctrl-G': 'findPrev', 'Shift-Ctrl-F': 'replace', 'Shift-Ctrl-R': 'replaceAll', 'Ctrl-[': 'indentLess', 'Ctrl-]': 'indentMore', 'Ctrl-U': 'undoSelection', 'Shift-Ctrl-U': 'redoSelection', 'Alt-U': 'redoSelection', fallthrough: 'basic' }), (Pe.emacsy = { 'Ctrl-F': 'goCharRight', 'Ctrl-B': 'goCharLeft', 'Ctrl-P': 'goLineUp', 'Ctrl-N': 'goLineDown', 'Alt-F': 'goWordRight', 'Alt-B': 'goWordLeft', 'Ctrl-A': 'goLineStart', 'Ctrl-E': 'goLineEnd', 'Ctrl-V': 'goPageDown', 'Shift-Ctrl-V': 'goPageUp', 'Ctrl-D': 'delCharAfter', 'Ctrl-H': 'delCharBefore', 'Alt-D': 'delWordAfter', 'Alt-Backspace': 'delWordBefore', 'Ctrl-K': 'killLine', 'Ctrl-T': 'transposeChars', 'Ctrl-O': 'openLine' }), (Pe.macDefault = { 'Cmd-A': 'selectAll', 'Cmd-D': 'deleteLine', 'Cmd-Z': 'undo', 'Shift-Cmd-Z': 'redo', 'Cmd-Y': 'redo', 'Cmd-Home': 'goDocStart', 'Cmd-Up': 'goDocStart', 'Cmd-End': 'goDocEnd', 'Cmd-Down': 'goDocEnd', 'Alt-Left': 'goGroupLeft', 'Alt-Right': 'goGroupRight', 'Cmd-Left': 'goLineLeft', 'Cmd-Right': 'goLineRight', 'Alt-Backspace': 'delGroupBefore', 'Ctrl-Alt-Backspace': 'delGroupAfter', 'Alt-Delete': 'delGroupAfter', 'Cmd-S': 'save', 'Cmd-F': 'find', 'Cmd-G': 'findNext', 'Shift-Cmd-G': 'findPrev', 'Cmd-Alt-F': 'replace', 'Shift-Cmd-Alt-F': 'replaceAll', 'Cmd-[': 'indentLess', 'Cmd-]': 'indentMore', 'Cmd-Backspace': 'delWrappedLineLeft', 'Cmd-Delete': 'delWrappedLineRight', 'Cmd-U': 'undoSelection', 'Shift-Cmd-U': 'redoSelection', 'Ctrl-Up': 'goDocStart', 'Ctrl-Down': 'goDocEnd', fallthrough: ['basic', 'emacsy'] }), (Pe.default = y ? Pe.macDefault : Pe.pcDefault);
|
||
var Ne,
|
||
Ae,
|
||
De = {
|
||
selectAll: selectAll,
|
||
singleSelection: function(e) {
|
||
return e.setSelection(
|
||
e.getCursor('anchor'),
|
||
e.getCursor('head'),
|
||
D
|
||
);
|
||
},
|
||
killLine: function(e) {
|
||
return deleteNearSelection(e, function(t) {
|
||
if (t.empty()) {
|
||
var n = getLine(e.doc, t.head.line).text.length;
|
||
return t.head.ch == n && t.head.line < e.lastLine()
|
||
? { from: t.head, to: Pos(t.head.line + 1, 0) }
|
||
: { from: t.head, to: Pos(t.head.line, n) };
|
||
}
|
||
return { from: t.from(), to: t.to() };
|
||
});
|
||
},
|
||
deleteLine: function(e) {
|
||
return deleteNearSelection(e, function(t) {
|
||
return {
|
||
from: Pos(t.from().line, 0),
|
||
to: clipPos(e.doc, Pos(t.to().line + 1, 0))
|
||
};
|
||
});
|
||
},
|
||
delLineLeft: function(e) {
|
||
return deleteNearSelection(e, function(e) {
|
||
return { from: Pos(e.from().line, 0), to: e.from() };
|
||
});
|
||
},
|
||
delWrappedLineLeft: function(e) {
|
||
return deleteNearSelection(e, function(t) {
|
||
var n = e.charCoords(t.head, 'div').top + 5;
|
||
return {
|
||
from: e.coordsChar({ left: 0, top: n }, 'div'),
|
||
to: t.from()
|
||
};
|
||
});
|
||
},
|
||
delWrappedLineRight: function(e) {
|
||
return deleteNearSelection(e, function(t) {
|
||
var n = e.charCoords(t.head, 'div').top + 5,
|
||
r = e.coordsChar(
|
||
{ left: e.display.lineDiv.offsetWidth + 100, top: n },
|
||
'div'
|
||
);
|
||
return { from: t.from(), to: r };
|
||
});
|
||
},
|
||
undo: function(e) {
|
||
return e.undo();
|
||
},
|
||
redo: function(e) {
|
||
return e.redo();
|
||
},
|
||
undoSelection: function(e) {
|
||
return e.undoSelection();
|
||
},
|
||
redoSelection: function(e) {
|
||
return e.redoSelection();
|
||
},
|
||
goDocStart: function(e) {
|
||
return e.extendSelection(Pos(e.firstLine(), 0));
|
||
},
|
||
goDocEnd: function(e) {
|
||
return e.extendSelection(Pos(e.lastLine()));
|
||
},
|
||
goLineStart: function(e) {
|
||
return e.extendSelectionsBy(
|
||
function(t) {
|
||
return lineStart(e, t.head.line);
|
||
},
|
||
{ origin: '+move', bias: 1 }
|
||
);
|
||
},
|
||
goLineStartSmart: function(e) {
|
||
return e.extendSelectionsBy(
|
||
function(t) {
|
||
return lineStartSmart(e, t.head);
|
||
},
|
||
{ origin: '+move', bias: 1 }
|
||
);
|
||
},
|
||
goLineEnd: function(e) {
|
||
return e.extendSelectionsBy(
|
||
function(t) {
|
||
return lineEnd(e, t.head.line);
|
||
},
|
||
{ origin: '+move', bias: -1 }
|
||
);
|
||
},
|
||
goLineRight: function(e) {
|
||
return e.extendSelectionsBy(function(t) {
|
||
var n = e.charCoords(t.head, 'div').top + 5;
|
||
return e.coordsChar(
|
||
{ left: e.display.lineDiv.offsetWidth + 100, top: n },
|
||
'div'
|
||
);
|
||
}, W);
|
||
},
|
||
goLineLeft: function(e) {
|
||
return e.extendSelectionsBy(function(t) {
|
||
var n = e.charCoords(t.head, 'div').top + 5;
|
||
return e.coordsChar({ left: 0, top: n }, 'div');
|
||
}, W);
|
||
},
|
||
goLineLeftSmart: function(e) {
|
||
return e.extendSelectionsBy(function(t) {
|
||
var n = e.charCoords(t.head, 'div').top + 5,
|
||
r = e.coordsChar({ left: 0, top: n }, 'div');
|
||
return r.ch < e.getLine(r.line).search(/\S/)
|
||
? lineStartSmart(e, t.head)
|
||
: r;
|
||
}, W);
|
||
},
|
||
goLineUp: function(e) {
|
||
return e.moveV(-1, 'line');
|
||
},
|
||
goLineDown: function(e) {
|
||
return e.moveV(1, 'line');
|
||
},
|
||
goPageUp: function(e) {
|
||
return e.moveV(-1, 'page');
|
||
},
|
||
goPageDown: function(e) {
|
||
return e.moveV(1, 'page');
|
||
},
|
||
goCharLeft: function(e) {
|
||
return e.moveH(-1, 'char');
|
||
},
|
||
goCharRight: function(e) {
|
||
return e.moveH(1, 'char');
|
||
},
|
||
goColumnLeft: function(e) {
|
||
return e.moveH(-1, 'column');
|
||
},
|
||
goColumnRight: function(e) {
|
||
return e.moveH(1, 'column');
|
||
},
|
||
goWordLeft: function(e) {
|
||
return e.moveH(-1, 'word');
|
||
},
|
||
goGroupRight: function(e) {
|
||
return e.moveH(1, 'group');
|
||
},
|
||
goGroupLeft: function(e) {
|
||
return e.moveH(-1, 'group');
|
||
},
|
||
goWordRight: function(e) {
|
||
return e.moveH(1, 'word');
|
||
},
|
||
delCharBefore: function(e) {
|
||
return e.deleteH(-1, 'char');
|
||
},
|
||
delCharAfter: function(e) {
|
||
return e.deleteH(1, 'char');
|
||
},
|
||
delWordBefore: function(e) {
|
||
return e.deleteH(-1, 'word');
|
||
},
|
||
delWordAfter: function(e) {
|
||
return e.deleteH(1, 'word');
|
||
},
|
||
delGroupBefore: function(e) {
|
||
return e.deleteH(-1, 'group');
|
||
},
|
||
delGroupAfter: function(e) {
|
||
return e.deleteH(1, 'group');
|
||
},
|
||
indentAuto: function(e) {
|
||
return e.indentSelection('smart');
|
||
},
|
||
indentMore: function(e) {
|
||
return e.indentSelection('add');
|
||
},
|
||
indentLess: function(e) {
|
||
return e.indentSelection('subtract');
|
||
},
|
||
insertTab: function(e) {
|
||
return e.replaceSelection('\t');
|
||
},
|
||
insertSoftTab: function(e) {
|
||
for (
|
||
var t = [], n = e.listSelections(), r = e.options.tabSize, i = 0;
|
||
i < n.length;
|
||
i++
|
||
) {
|
||
var o = n[i].from(), a = countColumn(e.getLine(o.line), o.ch, r);
|
||
t.push(spaceStr(r - a % r));
|
||
}
|
||
e.replaceSelections(t);
|
||
},
|
||
defaultTab: function(e) {
|
||
e.somethingSelected()
|
||
? e.indentSelection('add')
|
||
: e.execCommand('insertTab');
|
||
},
|
||
transposeChars: function(e) {
|
||
return runInOp(e, function() {
|
||
for (
|
||
var t = e.listSelections(), n = [], r = 0;
|
||
r < t.length;
|
||
r++
|
||
) if (t[r].empty()) {
|
||
var i = t[r].head, o = getLine(e.doc, i.line).text;
|
||
if (o)
|
||
if (
|
||
(i.ch == o.length &&
|
||
(i = new Pos(i.line, i.ch - 1)), i.ch > 0)
|
||
)
|
||
(i = new Pos(i.line, i.ch + 1)), e.replaceRange(
|
||
o.charAt(i.ch - 1) + o.charAt(i.ch - 2),
|
||
Pos(i.line, i.ch - 2),
|
||
i,
|
||
'+transpose'
|
||
);
|
||
else if (i.line > e.doc.first) {
|
||
var a = getLine(e.doc, i.line - 1).text;
|
||
a &&
|
||
((i = new Pos(i.line, 1)), e.replaceRange(
|
||
o.charAt(0) +
|
||
e.doc.lineSeparator() +
|
||
a.charAt(a.length - 1),
|
||
Pos(i.line - 1, a.length - 1),
|
||
i,
|
||
'+transpose'
|
||
));
|
||
}
|
||
n.push(new he(i, i));
|
||
}
|
||
e.setSelections(n);
|
||
});
|
||
},
|
||
newlineAndIndent: function(e) {
|
||
return runInOp(e, function() {
|
||
for (
|
||
var t = e.listSelections(), n = t.length - 1;
|
||
n >= 0;
|
||
n--
|
||
) e.replaceRange(e.doc.lineSeparator(), t[n].anchor, t[n].head, '+input');
|
||
t = e.listSelections();
|
||
for (
|
||
var r = 0;
|
||
r < t.length;
|
||
r++
|
||
) e.indentLine(t[r].from().line, null, !0);
|
||
ensureCursorVisible(e);
|
||
});
|
||
},
|
||
openLine: function(e) {
|
||
return e.replaceSelection('\n', 'start');
|
||
},
|
||
toggleOverwrite: function(e) {
|
||
return e.toggleOverwrite();
|
||
}
|
||
},
|
||
He = new T(),
|
||
We = null,
|
||
Ee = {
|
||
toString: function() {
|
||
return 'CodeMirror.Init';
|
||
}
|
||
},
|
||
Ie = {},
|
||
Fe = {};
|
||
(CodeMirror$1.defaults = Ie), (CodeMirror$1.optionHandlers = Fe);
|
||
var Be = [];
|
||
CodeMirror$1.defineInitHook = function(e) {
|
||
return Be.push(e);
|
||
};
|
||
var ze = null,
|
||
Re = function(e) {
|
||
(this.cm = e), (this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null), (this.polling = new T()), (this.composing = null), (this.gracePeriod = !1), (this.readDOMTimeout = null);
|
||
};
|
||
(Re.prototype.init = function(e) {
|
||
function onCopyCut(e) {
|
||
if (!signalDOMEvent(r, e)) {
|
||
if (r.somethingSelected())
|
||
setLastCopied({ lineWise: !1, text: r.getSelections() }), 'cut' ==
|
||
e.type && r.replaceSelection('', null, 'cut');
|
||
else {
|
||
if (!r.options.lineWiseCopyCut) return;
|
||
var t = copyableRanges(r);
|
||
setLastCopied({ lineWise: !0, text: t.text }), 'cut' == e.type &&
|
||
r.operation(function() {
|
||
r.setSelections(
|
||
t.ranges,
|
||
0,
|
||
D
|
||
), r.replaceSelection('', null, 'cut');
|
||
});
|
||
}
|
||
if (e.clipboardData) {
|
||
e.clipboardData.clearData();
|
||
var o = ze.text.join('\n');
|
||
if (
|
||
(e.clipboardData.setData('Text', o), e.clipboardData.getData(
|
||
'Text'
|
||
) == o)
|
||
)
|
||
return void e.preventDefault();
|
||
}
|
||
var a = hiddenTextarea(), s = a.firstChild;
|
||
r.display.lineSpace.insertBefore(
|
||
a,
|
||
r.display.lineSpace.firstChild
|
||
), (s.value = ze.text.join('\n'));
|
||
var l = document.activeElement;
|
||
M(s), setTimeout(function() {
|
||
r.display.lineSpace.removeChild(
|
||
a
|
||
), l.focus(), l == i && n.showPrimarySelection();
|
||
}, 50);
|
||
}
|
||
}
|
||
var t = this, n = this, r = n.cm, i = (n.div = e.lineDiv);
|
||
disableBrowserMagic(i, r.options.spellcheck), G(i, 'paste', function(
|
||
e
|
||
) {
|
||
signalDOMEvent(r, e) ||
|
||
handlePaste(e, r) ||
|
||
(s <= 11 &&
|
||
setTimeout(
|
||
operation(r, function() {
|
||
return t.updateFromDOM();
|
||
}),
|
||
20
|
||
));
|
||
}), G(i, 'compositionstart', function(e) {
|
||
t.composing = { data: e.data, done: !1 };
|
||
}), G(i, 'compositionupdate', function(e) {
|
||
t.composing || (t.composing = { data: e.data, done: !1 });
|
||
}), G(i, 'compositionend', function(e) {
|
||
t.composing &&
|
||
(e.data != t.composing.data &&
|
||
t.readFromDOMSoon(), (t.composing.done = !0));
|
||
}), G(i, 'touchstart', function() {
|
||
return n.forceCompositionEnd();
|
||
}), G(i, 'input', function() {
|
||
t.composing || t.readFromDOMSoon();
|
||
}), G(i, 'copy', onCopyCut), G(i, 'cut', onCopyCut);
|
||
}), (Re.prototype.prepareSelection = function() {
|
||
var e = prepareSelection(this.cm, !1);
|
||
return (e.focus = this.cm.state.focused), e;
|
||
}), (Re.prototype.showSelection = function(e, t) {
|
||
e &&
|
||
this.cm.display.view.length &&
|
||
((e.focus || t) &&
|
||
this.showPrimarySelection(), this.showMultipleSelections(e));
|
||
}), (Re.prototype.showPrimarySelection = function() {
|
||
var e = window.getSelection(),
|
||
t = this.cm,
|
||
r = t.doc.sel.primary(),
|
||
i = r.from(),
|
||
o = r.to();
|
||
if (
|
||
t.display.viewTo == t.display.viewFrom ||
|
||
i.line >= t.display.viewTo ||
|
||
o.line < t.display.viewFrom
|
||
)
|
||
return void e.removeAllRanges();
|
||
var a = domToPos(t, e.anchorNode, e.anchorOffset),
|
||
s = domToPos(t, e.focusNode, e.focusOffset);
|
||
if (
|
||
!a ||
|
||
a.bad ||
|
||
!s ||
|
||
s.bad ||
|
||
0 != cmp(minPos(a, s), i) ||
|
||
0 != cmp(maxPos(a, s), o)
|
||
) {
|
||
var l = t.display.view,
|
||
c = (i.line >= t.display.viewFrom && posToDOM(t, i)) || {
|
||
node: l[0].measure.map[2],
|
||
offset: 0
|
||
},
|
||
u = o.line < t.display.viewTo && posToDOM(t, o);
|
||
if (!u) {
|
||
var d = l[l.length - 1].measure,
|
||
p = d.maps ? d.maps[d.maps.length - 1] : d.map;
|
||
u = {
|
||
node: p[p.length - 1],
|
||
offset: p[p.length - 2] - p[p.length - 3]
|
||
};
|
||
}
|
||
if (!c || !u) return void e.removeAllRanges();
|
||
var f, h = e.rangeCount && e.getRangeAt(0);
|
||
try {
|
||
f = w(c.node, c.offset, u.offset, u.node);
|
||
} catch (e) {}
|
||
f &&
|
||
(!n && t.state.focused
|
||
? (e.collapse(c.node, c.offset), f.collapsed ||
|
||
(e.removeAllRanges(), e.addRange(f)))
|
||
: (e.removeAllRanges(), e.addRange(f)), h && null == e.anchorNode
|
||
? e.addRange(h)
|
||
: n && this.startGracePeriod()), this.rememberSelection();
|
||
}
|
||
}), (Re.prototype.startGracePeriod = function() {
|
||
var e = this;
|
||
clearTimeout(
|
||
this.gracePeriod
|
||
), (this.gracePeriod = setTimeout(function() {
|
||
(e.gracePeriod = !1), e.selectionChanged() &&
|
||
e.cm.operation(function() {
|
||
return (e.cm.curOp.selectionChanged = !0);
|
||
});
|
||
}, 20));
|
||
}), (Re.prototype.showMultipleSelections = function(e) {
|
||
removeChildrenAndAdd(
|
||
this.cm.display.cursorDiv,
|
||
e.cursors
|
||
), removeChildrenAndAdd(this.cm.display.selectionDiv, e.selection);
|
||
}), (Re.prototype.rememberSelection = function() {
|
||
var e = window.getSelection();
|
||
(this.lastAnchorNode = e.anchorNode), (this.lastAnchorOffset =
|
||
e.anchorOffset), (this.lastFocusNode =
|
||
e.focusNode), (this.lastFocusOffset = e.focusOffset);
|
||
}), (Re.prototype.selectionInEditor = function() {
|
||
var e = window.getSelection();
|
||
if (!e.rangeCount) return !1;
|
||
var t = e.getRangeAt(0).commonAncestorContainer;
|
||
return contains(this.div, t);
|
||
}), (Re.prototype.focus = function() {
|
||
'nocursor' != this.cm.options.readOnly &&
|
||
(this.selectionInEditor() ||
|
||
this.showSelection(this.prepareSelection(), !0), this.div.focus());
|
||
}), (Re.prototype.blur = function() {
|
||
this.div.blur();
|
||
}), (Re.prototype.getField = function() {
|
||
return this.div;
|
||
}), (Re.prototype.supportsTouch = function() {
|
||
return !0;
|
||
}), (Re.prototype.receivedFocus = function() {
|
||
function poll() {
|
||
e.cm.state.focused &&
|
||
(e.pollSelection(), e.polling.set(e.cm.options.pollInterval, poll));
|
||
}
|
||
var e = this;
|
||
this.selectionInEditor()
|
||
? this.pollSelection()
|
||
: runInOp(this.cm, function() {
|
||
return (e.cm.curOp.selectionChanged = !0);
|
||
}), this.polling.set(this.cm.options.pollInterval, poll);
|
||
}), (Re.prototype.selectionChanged = function() {
|
||
var e = window.getSelection();
|
||
return (
|
||
e.anchorNode != this.lastAnchorNode ||
|
||
e.anchorOffset != this.lastAnchorOffset ||
|
||
e.focusNode != this.lastFocusNode ||
|
||
e.focusOffset != this.lastFocusOffset
|
||
);
|
||
}), (Re.prototype.pollSelection = function() {
|
||
if (
|
||
null == this.readDOMTimeout &&
|
||
!this.gracePeriod &&
|
||
this.selectionChanged()
|
||
) {
|
||
var e = window.getSelection(), t = this.cm;
|
||
if (
|
||
m &&
|
||
u &&
|
||
this.cm.options.gutters.length &&
|
||
isInGutter(e.anchorNode)
|
||
)
|
||
return this.cm.triggerOnKeyDown({
|
||
type: 'keydown',
|
||
keyCode: 8,
|
||
preventDefault: Math.abs
|
||
}), this.blur(), void this.focus();
|
||
if (!this.composing) {
|
||
this.rememberSelection();
|
||
var n = domToPos(t, e.anchorNode, e.anchorOffset),
|
||
r = domToPos(t, e.focusNode, e.focusOffset);
|
||
n &&
|
||
r &&
|
||
runInOp(t, function() {
|
||
setSelection(
|
||
t.doc,
|
||
simpleSelection(n, r),
|
||
D
|
||
), (n.bad || r.bad) && (t.curOp.selectionChanged = !0);
|
||
});
|
||
}
|
||
}
|
||
}), (Re.prototype.pollContent = function() {
|
||
null != this.readDOMTimeout &&
|
||
(clearTimeout(this.readDOMTimeout), (this.readDOMTimeout = null));
|
||
var e = this.cm,
|
||
t = e.display,
|
||
n = e.doc.sel.primary(),
|
||
r = n.from(),
|
||
i = n.to();
|
||
if (
|
||
(0 == r.ch &&
|
||
r.line > e.firstLine() &&
|
||
(r = Pos(r.line - 1, getLine(e.doc, r.line - 1).length)), i.ch ==
|
||
getLine(e.doc, i.line).text.length &&
|
||
i.line < e.lastLine() &&
|
||
(i = Pos(i.line + 1, 0)), r.line < t.viewFrom ||
|
||
i.line > t.viewTo - 1)
|
||
)
|
||
return !1;
|
||
var o, a, s;
|
||
r.line == t.viewFrom || 0 == (o = findViewIndex(e, r.line))
|
||
? ((a = lineNo(t.view[0].line)), (s = t.view[0].node))
|
||
: ((a = lineNo(t.view[o].line)), (s =
|
||
t.view[o - 1].node.nextSibling));
|
||
var l, c, u = findViewIndex(e, i.line);
|
||
if (
|
||
(u == t.view.length - 1
|
||
? ((l = t.viewTo - 1), (c = t.lineDiv.lastChild))
|
||
: ((l = lineNo(t.view[u + 1].line) - 1), (c =
|
||
t.view[u + 1].node.previousSibling)), !s)
|
||
)
|
||
return !1;
|
||
for (
|
||
var d = e.doc.splitLines(domTextBetween(e, s, c, a, l)),
|
||
p = getBetween(
|
||
e.doc,
|
||
Pos(a, 0),
|
||
Pos(l, getLine(e.doc, l).text.length)
|
||
);
|
||
d.length > 1 && p.length > 1;
|
||
|
||
)
|
||
if (lst(d) == lst(p)) d.pop(), p.pop(), l--;
|
||
else {
|
||
if (d[0] != p[0]) break;
|
||
d.shift(), p.shift(), a++;
|
||
}
|
||
for (
|
||
var f = 0,
|
||
h = 0,
|
||
g = d[0],
|
||
m = p[0],
|
||
v = Math.min(g.length, m.length);
|
||
f < v && g.charCodeAt(f) == m.charCodeAt(f);
|
||
|
||
)
|
||
++f;
|
||
for (
|
||
var y = lst(d),
|
||
b = lst(p),
|
||
x = Math.min(
|
||
y.length - (1 == d.length ? f : 0),
|
||
b.length - (1 == p.length ? f : 0)
|
||
);
|
||
h < x &&
|
||
y.charCodeAt(y.length - h - 1) == b.charCodeAt(b.length - h - 1);
|
||
|
||
)
|
||
++h;
|
||
if (1 == d.length && 1 == p.length && a == r.line)
|
||
for (
|
||
;
|
||
f &&
|
||
f > r.ch &&
|
||
y.charCodeAt(y.length - h - 1) == b.charCodeAt(b.length - h - 1);
|
||
|
||
)
|
||
f--, h++;
|
||
(d[d.length - 1] = y
|
||
.slice(0, y.length - h)
|
||
.replace(/^\u200b+/, '')), (d[0] = d[0]
|
||
.slice(f)
|
||
.replace(/\u200b+$/, ''));
|
||
var C = Pos(a, f), w = Pos(l, p.length ? lst(p).length - h : 0);
|
||
return d.length > 1 || d[0] || cmp(C, w)
|
||
? (replaceRange(e.doc, d, C, w, '+input'), !0)
|
||
: void 0;
|
||
}), (Re.prototype.ensurePolled = function() {
|
||
this.forceCompositionEnd();
|
||
}), (Re.prototype.reset = function() {
|
||
this.forceCompositionEnd();
|
||
}), (Re.prototype.forceCompositionEnd = function() {
|
||
this.composing &&
|
||
(clearTimeout(
|
||
this.readDOMTimeout
|
||
), (this.composing = null), this.updateFromDOM(), this.div.blur(), this.div.focus());
|
||
}), (Re.prototype.readFromDOMSoon = function() {
|
||
var e = this;
|
||
null == this.readDOMTimeout &&
|
||
(this.readDOMTimeout = setTimeout(function() {
|
||
if (((e.readDOMTimeout = null), e.composing)) {
|
||
if (!e.composing.done) return;
|
||
e.composing = null;
|
||
}
|
||
e.updateFromDOM();
|
||
}, 80));
|
||
}), (Re.prototype.updateFromDOM = function() {
|
||
var e = this;
|
||
(!this.cm.isReadOnly() && this.pollContent()) ||
|
||
runInOp(this.cm, function() {
|
||
return regChange(e.cm);
|
||
});
|
||
}), (Re.prototype.setUneditable = function(e) {
|
||
e.contentEditable = 'false';
|
||
}), (Re.prototype.onKeyPress = function(e) {
|
||
0 != e.charCode &&
|
||
(e.preventDefault(), this.cm.isReadOnly() ||
|
||
operation(this.cm, applyTextInput)(
|
||
this.cm,
|
||
String.fromCharCode(null == e.charCode ? e.keyCode : e.charCode),
|
||
0
|
||
));
|
||
}), (Re.prototype.readOnlyChanged = function(e) {
|
||
this.div.contentEditable = String('nocursor' != e);
|
||
}), (Re.prototype.onContextMenu = function() {}), (Re.prototype.resetPosition = function() {}), (Re.prototype.needsContentAttribute = !0);
|
||
var Ve = function(e) {
|
||
(this.cm = e), (this.prevInput =
|
||
''), (this.pollingFast = !1), (this.polling = new T()), (this.inaccurateSelection = !1), (this.hasSelection = !1), (this.composing = null);
|
||
};
|
||
(Ve.prototype.init = function(e) {
|
||
function prepareCopyCut(e) {
|
||
if (!signalDOMEvent(r, e)) {
|
||
if (r.somethingSelected())
|
||
setLastCopied({
|
||
lineWise: !1,
|
||
text: r.getSelections()
|
||
}), n.inaccurateSelection &&
|
||
((n.prevInput =
|
||
''), (n.inaccurateSelection = !1), (o.value = ze.text.join(
|
||
'\n'
|
||
)), M(o));
|
||
else {
|
||
if (!r.options.lineWiseCopyCut) return;
|
||
var t = copyableRanges(r);
|
||
setLastCopied({ lineWise: !0, text: t.text }), 'cut' == e.type
|
||
? r.setSelections(t.ranges, null, D)
|
||
: ((n.prevInput = ''), (o.value = t.text.join('\n')), M(o));
|
||
}
|
||
'cut' == e.type && (r.state.cutIncoming = !0);
|
||
}
|
||
}
|
||
var t = this,
|
||
n = this,
|
||
r = this.cm,
|
||
i = (this.wrapper = hiddenTextarea()),
|
||
o = (this.textarea = i.firstChild);
|
||
e.wrapper.insertBefore(i, e.wrapper.firstChild), g &&
|
||
(o.style.width = '0px'), G(o, 'input', function() {
|
||
a && s >= 9 && t.hasSelection && (t.hasSelection = null), n.poll();
|
||
}), G(o, 'paste', function(e) {
|
||
signalDOMEvent(r, e) ||
|
||
handlePaste(e, r) ||
|
||
((r.state.pasteIncoming = !0), n.fastPoll());
|
||
}), G(o, 'cut', prepareCopyCut), G(
|
||
o,
|
||
'copy',
|
||
prepareCopyCut
|
||
), G(e.scroller, 'paste', function(t) {
|
||
eventInWidget(e, t) ||
|
||
signalDOMEvent(r, t) ||
|
||
((r.state.pasteIncoming = !0), n.focus());
|
||
}), G(e.lineSpace, 'selectstart', function(t) {
|
||
eventInWidget(e, t) || e_preventDefault(t);
|
||
}), G(o, 'compositionstart', function() {
|
||
var e = r.getCursor('from');
|
||
n.composing &&
|
||
n.composing.range.clear(), (n.composing = { start: e, range: r.markText(e, r.getCursor('to'), { className: 'CodeMirror-composing' }) });
|
||
}), G(o, 'compositionend', function() {
|
||
n.composing &&
|
||
(n.poll(), n.composing.range.clear(), (n.composing = null));
|
||
});
|
||
}), (Ve.prototype.prepareSelection = function() {
|
||
var e = this.cm, t = e.display, n = e.doc, r = prepareSelection(e);
|
||
if (e.options.moveInputWithCursor) {
|
||
var i = cursorCoords(e, n.sel.primary().head, 'div'),
|
||
o = t.wrapper.getBoundingClientRect(),
|
||
a = t.lineDiv.getBoundingClientRect();
|
||
(r.teTop = Math.max(
|
||
0,
|
||
Math.min(t.wrapper.clientHeight - 10, i.top + a.top - o.top)
|
||
)), (r.teLeft = Math.max(
|
||
0,
|
||
Math.min(t.wrapper.clientWidth - 10, i.left + a.left - o.left)
|
||
));
|
||
}
|
||
return r;
|
||
}), (Ve.prototype.showSelection = function(e) {
|
||
var t = this.cm, n = t.display;
|
||
removeChildrenAndAdd(n.cursorDiv, e.cursors), removeChildrenAndAdd(
|
||
n.selectionDiv,
|
||
e.selection
|
||
), null != e.teTop &&
|
||
((this.wrapper.style.top = e.teTop + 'px'), (this.wrapper.style.left =
|
||
e.teLeft + 'px'));
|
||
}), (Ve.prototype.reset = function(e) {
|
||
if (!this.contextMenuPending && !this.composing) {
|
||
var t, n, r = this.cm, i = r.doc;
|
||
if (r.somethingSelected()) {
|
||
this.prevInput = '';
|
||
var o = i.sel.primary();
|
||
t =
|
||
$ &&
|
||
(o.to().line - o.from().line > 100 ||
|
||
(n = r.getSelection()).length > 1e3);
|
||
var l = t ? '-' : n || r.getSelection();
|
||
(this.textarea.value = l), r.state.focused && M(this.textarea), a &&
|
||
s >= 9 &&
|
||
(this.hasSelection = l);
|
||
} else
|
||
e ||
|
||
((this.prevInput = this.textarea.value = ''), a &&
|
||
s >= 9 &&
|
||
(this.hasSelection = null));
|
||
this.inaccurateSelection = t;
|
||
}
|
||
}), (Ve.prototype.getField = function() {
|
||
return this.textarea;
|
||
}), (Ve.prototype.supportsTouch = function() {
|
||
return !1;
|
||
}), (Ve.prototype.focus = function() {
|
||
if (
|
||
'nocursor' != this.cm.options.readOnly &&
|
||
(!v || activeElt() != this.textarea)
|
||
)
|
||
try {
|
||
this.textarea.focus();
|
||
} catch (e) {}
|
||
}), (Ve.prototype.blur = function() {
|
||
this.textarea.blur();
|
||
}), (Ve.prototype.resetPosition = function() {
|
||
this.wrapper.style.top = this.wrapper.style.left = 0;
|
||
}), (Ve.prototype.receivedFocus = function() {
|
||
this.slowPoll();
|
||
}), (Ve.prototype.slowPoll = function() {
|
||
var e = this;
|
||
this.pollingFast ||
|
||
this.polling.set(this.cm.options.pollInterval, function() {
|
||
e.poll(), e.cm.state.focused && e.slowPoll();
|
||
});
|
||
}), (Ve.prototype.fastPoll = function() {
|
||
function p() {
|
||
t.poll() || e
|
||
? ((t.pollingFast = !1), t.slowPoll())
|
||
: ((e = !0), t.polling.set(60, p));
|
||
}
|
||
var e = !1, t = this;
|
||
(t.pollingFast = !0), t.polling.set(20, p);
|
||
}), (Ve.prototype.poll = function() {
|
||
var e = this, t = this.cm, n = this.textarea, r = this.prevInput;
|
||
if (
|
||
this.contextMenuPending ||
|
||
!t.state.focused ||
|
||
(K(n) && !r && !this.composing) ||
|
||
t.isReadOnly() ||
|
||
t.options.disableInput ||
|
||
t.state.keySeq
|
||
)
|
||
return !1;
|
||
var i = n.value;
|
||
if (i == r && !t.somethingSelected()) return !1;
|
||
if (
|
||
(a && s >= 9 && this.hasSelection === i) ||
|
||
(y && /[\uf700-\uf7ff]/.test(i))
|
||
)
|
||
return t.display.input.reset(), !1;
|
||
if (t.doc.sel == t.display.selForContextMenu) {
|
||
var o = i.charCodeAt(0);
|
||
if ((8203 != o || r || (r = ''), 8666 == o))
|
||
return this.reset(), this.cm.execCommand('undo');
|
||
}
|
||
for (
|
||
var l = 0, c = Math.min(r.length, i.length);
|
||
l < c && r.charCodeAt(l) == i.charCodeAt(l);
|
||
|
||
)
|
||
++l;
|
||
return runInOp(t, function() {
|
||
applyTextInput(
|
||
t,
|
||
i.slice(l),
|
||
r.length - l,
|
||
null,
|
||
e.composing ? '*compose' : null
|
||
), i.length > 1e3 || i.indexOf('\n') > -1 ? (n.value = e.prevInput = '') : (e.prevInput = i), e.composing && (e.composing.range.clear(), (e.composing.range = t.markText(e.composing.start, t.getCursor('to'), { className: 'CodeMirror-composing' })));
|
||
}), !0;
|
||
}), (Ve.prototype.ensurePolled = function() {
|
||
this.pollingFast && this.poll() && (this.pollingFast = !1);
|
||
}), (Ve.prototype.onKeyPress = function() {
|
||
a && s >= 9 && (this.hasSelection = null), this.fastPoll();
|
||
}), (Ve.prototype.onContextMenu = function(e) {
|
||
function prepareSelectAllHack() {
|
||
if (null != i.selectionStart) {
|
||
var e = n.somethingSelected(), o = '' + (e ? i.value : '');
|
||
(i.value = '⇚'), (i.value = o), (t.prevInput = e
|
||
? ''
|
||
: ''), (i.selectionStart = 1), (i.selectionEnd =
|
||
o.length), (r.selForContextMenu = n.doc.sel);
|
||
}
|
||
}
|
||
function rehide() {
|
||
if (
|
||
((t.contextMenuPending = !1), (t.wrapper.style.cssText = p), (i.style.cssText = u), a &&
|
||
s < 9 &&
|
||
r.scrollbars.setScrollTop((r.scroller.scrollTop = c)), null !=
|
||
i.selectionStart)
|
||
) {
|
||
(!a || (a && s < 9)) && prepareSelectAllHack();
|
||
var e = 0,
|
||
o = function() {
|
||
r.selForContextMenu == n.doc.sel &&
|
||
0 == i.selectionStart &&
|
||
i.selectionEnd > 0 &&
|
||
'' == t.prevInput
|
||
? operation(n, selectAll)(n)
|
||
: e++ < 10
|
||
? (r.detectingSelectAll = setTimeout(o, 500))
|
||
: ((r.selForContextMenu = null), r.input.reset());
|
||
};
|
||
r.detectingSelectAll = setTimeout(o, 200);
|
||
}
|
||
}
|
||
var t = this,
|
||
n = t.cm,
|
||
r = n.display,
|
||
i = t.textarea,
|
||
o = posFromMouse(n, e),
|
||
c = r.scroller.scrollTop;
|
||
if (o && !d) {
|
||
n.options.resetSelectionOnContextMenu &&
|
||
-1 == n.doc.sel.contains(o) &&
|
||
operation(n, setSelection)(n.doc, simpleSelection(o), D);
|
||
var u = i.style.cssText, p = t.wrapper.style.cssText;
|
||
t.wrapper.style.cssText = 'position: absolute';
|
||
var f = t.wrapper.getBoundingClientRect();
|
||
i.style.cssText =
|
||
'position: absolute; width: 30px; height: 30px;\n top: ' +
|
||
(e.clientY - f.top - 5) +
|
||
'px; left: ' +
|
||
(e.clientX - f.left - 5) +
|
||
'px;\n z-index: 1000; background: ' +
|
||
(a ? 'rgba(255, 255, 255, .05)' : 'transparent') +
|
||
';\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);';
|
||
var h;
|
||
if (
|
||
(l && (h = window.scrollY), r.input.focus(), l &&
|
||
window.scrollTo(
|
||
null,
|
||
h
|
||
), r.input.reset(), n.somethingSelected() ||
|
||
(i.value = t.prevInput =
|
||
' '), (t.contextMenuPending = !0), (r.selForContextMenu =
|
||
n.doc.sel), clearTimeout(r.detectingSelectAll), a &&
|
||
s >= 9 &&
|
||
prepareSelectAllHack(), k)
|
||
) {
|
||
e_stop(e);
|
||
var g = function() {
|
||
off(window, 'mouseup', g), setTimeout(rehide, 20);
|
||
};
|
||
G(window, 'mouseup', g);
|
||
} else setTimeout(rehide, 50);
|
||
}
|
||
}), (Ve.prototype.readOnlyChanged = function(e) {
|
||
e || this.reset();
|
||
}), (Ve.prototype.setUneditable = function() {}), (Ve.prototype.needsContentAttribute = !1), (function defineOptions(e) {
|
||
function option(n, r, i, o) {
|
||
(e.defaults[n] = r), i &&
|
||
(t[n] = o
|
||
? function(e, t, n) {
|
||
n != Ee && i(e, t, n);
|
||
}
|
||
: i);
|
||
}
|
||
var t = e.optionHandlers;
|
||
(e.defineOption = option), (e.Init = Ee), option(
|
||
'value',
|
||
'',
|
||
function(e, t) {
|
||
return e.setValue(t);
|
||
},
|
||
!0
|
||
), option(
|
||
'mode',
|
||
null,
|
||
function(e, t) {
|
||
(e.doc.modeOption = t), loadMode(e);
|
||
},
|
||
!0
|
||
), option('indentUnit', 2, loadMode, !0), option('indentWithTabs', !1), option('smartIndent', !0), option(
|
||
'tabSize',
|
||
4,
|
||
function(e) {
|
||
resetModeState(e), clearCaches(e), regChange(e);
|
||
},
|
||
!0
|
||
), option('lineSeparator', null, function(e, t) {
|
||
if (((e.doc.lineSep = t), t)) {
|
||
var n = [], r = e.doc.first;
|
||
e.doc.iter(function(e) {
|
||
for (var i = 0; ; ) {
|
||
var o = e.text.indexOf(t, i);
|
||
if (-1 == o) break;
|
||
(i = o + t.length), n.push(Pos(r, o));
|
||
}
|
||
r++;
|
||
});
|
||
for (var i = n.length - 1; i >= 0; i--)
|
||
replaceRange(e.doc, t, n[i], Pos(n[i].line, n[i].ch + t.length));
|
||
}
|
||
}), option(
|
||
'specialChars',
|
||
/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g,
|
||
function(e, t, n) {
|
||
(e.state.specialChars = new RegExp(
|
||
t.source + (t.test('\t') ? '' : '|\t'),
|
||
'g'
|
||
)), n != Ee && e.refresh();
|
||
}
|
||
), option(
|
||
'specialCharPlaceholder',
|
||
defaultSpecialCharPlaceholder,
|
||
function(e) {
|
||
return e.refresh();
|
||
},
|
||
!0
|
||
), option('electricChars', !0), option(
|
||
'inputStyle',
|
||
v ? 'contenteditable' : 'textarea',
|
||
function() {
|
||
throw new Error(
|
||
'inputStyle can not (yet) be changed in a running editor'
|
||
);
|
||
},
|
||
!0
|
||
), option(
|
||
'spellcheck',
|
||
!1,
|
||
function(e, t) {
|
||
return (e.getInputField().spellcheck = t);
|
||
},
|
||
!0
|
||
), option('rtlMoveVisually', !x), option('wholeLineUpdateBefore', !0), option(
|
||
'theme',
|
||
'default',
|
||
function(e) {
|
||
themeChanged(e), guttersChanged(e);
|
||
},
|
||
!0
|
||
), option('keyMap', 'default', function(e, t, n) {
|
||
var r = getKeyMap(t), i = n != Ee && getKeyMap(n);
|
||
i && i.detach && i.detach(e, r), r.attach && r.attach(e, i || null);
|
||
}), option(
|
||
'extraKeys',
|
||
null
|
||
), option('lineWrapping', !1, wrappingChanged, !0), option(
|
||
'gutters',
|
||
[],
|
||
function(e) {
|
||
setGuttersForLineNumbers(e.options), guttersChanged(e);
|
||
},
|
||
!0
|
||
), option(
|
||
'fixedGutter',
|
||
!0,
|
||
function(e, t) {
|
||
(e.display.gutters.style.left = t
|
||
? compensateForHScroll(e.display) + 'px'
|
||
: '0'), e.refresh();
|
||
},
|
||
!0
|
||
), option(
|
||
'coverGutterNextToScrollbar',
|
||
!1,
|
||
function(e) {
|
||
return updateScrollbars(e);
|
||
},
|
||
!0
|
||
), option(
|
||
'scrollbarStyle',
|
||
'native',
|
||
function(e) {
|
||
initScrollbars(e), updateScrollbars(
|
||
e
|
||
), e.display.scrollbars.setScrollTop(
|
||
e.doc.scrollTop
|
||
), e.display.scrollbars.setScrollLeft(e.doc.scrollLeft);
|
||
},
|
||
!0
|
||
), option(
|
||
'lineNumbers',
|
||
!1,
|
||
function(e) {
|
||
setGuttersForLineNumbers(e.options), guttersChanged(e);
|
||
},
|
||
!0
|
||
), option('firstLineNumber', 1, guttersChanged, !0), option(
|
||
'lineNumberFormatter',
|
||
function(e) {
|
||
return e;
|
||
},
|
||
guttersChanged,
|
||
!0
|
||
), option('showCursorWhenSelecting', !1, updateSelection, !0), option('resetSelectionOnContextMenu', !0), option('lineWiseCopyCut', !0), option('readOnly', !1, function(e, t) {
|
||
'nocursor' == t
|
||
? (onBlur(e), e.display.input.blur(), (e.display.disabled = !0))
|
||
: (e.display.disabled = !1), e.display.input.readOnlyChanged(t);
|
||
}), option(
|
||
'disableInput',
|
||
!1,
|
||
function(e, t) {
|
||
t || e.display.input.reset();
|
||
},
|
||
!0
|
||
), option('dragDrop', !0, dragDropChanged), option('allowDropFileTypes', null), option('cursorBlinkRate', 530), option('cursorScrollMargin', 0), option('cursorHeight', 1, updateSelection, !0), option('singleCursorHeightPerLine', !0, updateSelection, !0), option('workTime', 100), option('workDelay', 100), option('flattenSpans', !0, resetModeState, !0), option('addModeClass', !1, resetModeState, !0), option('pollInterval', 100), option('undoDepth', 200, function(e, t) {
|
||
return (e.doc.history.undoDepth = t);
|
||
}), option('historyEventDelay', 1250), option(
|
||
'viewportMargin',
|
||
10,
|
||
function(e) {
|
||
return e.refresh();
|
||
},
|
||
!0
|
||
), option('maxHighlightLength', 1e4, resetModeState, !0), option('moveInputWithCursor', !0, function(e, t) {
|
||
t || e.display.input.resetPosition();
|
||
}), option('tabindex', null, function(e, t) {
|
||
return (e.display.input.getField().tabIndex = t || '');
|
||
}), option('autofocus', null), option(
|
||
'direction',
|
||
'ltr',
|
||
function(e, t) {
|
||
return e.doc.setDirection(t);
|
||
},
|
||
!0
|
||
);
|
||
})(CodeMirror$1), (function(e) {
|
||
var t = e.optionHandlers, n = (e.helpers = {});
|
||
(e.prototype = {
|
||
constructor: e,
|
||
focus: function() {
|
||
window.focus(), this.display.input.focus();
|
||
},
|
||
setOption: function(e, n) {
|
||
var r = this.options, i = r[e];
|
||
(r[e] == n && 'mode' != e) ||
|
||
((r[e] = n), t.hasOwnProperty(e) &&
|
||
operation(this, t[e])(this, n, i), signal(
|
||
this,
|
||
'optionChange',
|
||
this,
|
||
e
|
||
));
|
||
},
|
||
getOption: function(e) {
|
||
return this.options[e];
|
||
},
|
||
getDoc: function() {
|
||
return this.doc;
|
||
},
|
||
addKeyMap: function(e, t) {
|
||
this.state.keyMaps[t ? 'push' : 'unshift'](getKeyMap(e));
|
||
},
|
||
removeKeyMap: function(e) {
|
||
for (var t = this.state.keyMaps, n = 0; n < t.length; ++n)
|
||
if (t[n] == e || t[n].name == e) return t.splice(n, 1), !0;
|
||
},
|
||
addOverlay: methodOp(function(t, n) {
|
||
var r = t.token ? t : e.getMode(this.options, t);
|
||
if (r.startState) throw new Error('Overlays may not be stateful.');
|
||
insertSorted(
|
||
this.state.overlays,
|
||
{
|
||
mode: r,
|
||
modeSpec: t,
|
||
opaque: n && n.opaque,
|
||
priority: (n && n.priority) || 0
|
||
},
|
||
function(e) {
|
||
return e.priority;
|
||
}
|
||
), this.state.modeGen++, regChange(this);
|
||
}),
|
||
removeOverlay: methodOp(function(e) {
|
||
for (
|
||
var t = this, n = this.state.overlays, r = 0;
|
||
r < n.length;
|
||
++r
|
||
) {
|
||
var i = n[r].modeSpec;
|
||
if (i == e || ('string' == typeof e && i.name == e))
|
||
return n.splice(r, 1), t.state.modeGen++, void regChange(t);
|
||
}
|
||
}),
|
||
indentLine: methodOp(function(e, t, n) {
|
||
'string' != typeof t &&
|
||
'number' != typeof t &&
|
||
(t = null == t
|
||
? this.options.smartIndent ? 'smart' : 'prev'
|
||
: t
|
||
? 'add'
|
||
: 'subtract'), isLine(this.doc, e) && indentLine(this, e, t, n);
|
||
}),
|
||
indentSelection: methodOp(function(e) {
|
||
for (
|
||
var t = this, n = this.doc.sel.ranges, r = -1, i = 0;
|
||
i < n.length;
|
||
i++
|
||
) {
|
||
var o = n[i];
|
||
if (o.empty())
|
||
o.head.line > r &&
|
||
(indentLine(t, o.head.line, e, !0), (r = o.head.line), i ==
|
||
t.doc.sel.primIndex && ensureCursorVisible(t));
|
||
else {
|
||
var a = o.from(), s = o.to(), l = Math.max(r, a.line);
|
||
r = Math.min(t.lastLine(), s.line - (s.ch ? 0 : 1)) + 1;
|
||
for (var c = l; c < r; ++c)
|
||
indentLine(t, c, e);
|
||
var u = t.doc.sel.ranges;
|
||
0 == a.ch &&
|
||
n.length == u.length &&
|
||
u[i].from().ch > 0 &&
|
||
replaceOneSelection(t.doc, i, new he(a, u[i].to()), D);
|
||
}
|
||
}
|
||
}),
|
||
getTokenAt: function(e, t) {
|
||
return takeToken(this, e, t);
|
||
},
|
||
getLineTokens: function(e, t) {
|
||
return takeToken(this, Pos(e), t, !0);
|
||
},
|
||
getTokenTypeAt: function(e) {
|
||
e = clipPos(this.doc, e);
|
||
var t,
|
||
n = getLineStyles(this, getLine(this.doc, e.line)),
|
||
r = 0,
|
||
i = (n.length - 1) / 2,
|
||
o = e.ch;
|
||
if (0 == o) t = n[2];
|
||
else
|
||
for (;;) {
|
||
var a = (r + i) >> 1;
|
||
if ((a ? n[2 * a - 1] : 0) >= o) i = a;
|
||
else {
|
||
if (!(n[2 * a + 1] < o)) {
|
||
t = n[2 * a + 2];
|
||
break;
|
||
}
|
||
r = a + 1;
|
||
}
|
||
}
|
||
var s = t ? t.indexOf('overlay ') : -1;
|
||
return s < 0 ? t : 0 == s ? null : t.slice(0, s - 1);
|
||
},
|
||
getModeAt: function(t) {
|
||
var n = this.doc.mode;
|
||
return n.innerMode
|
||
? e.innerMode(n, this.getTokenAt(t).state).mode
|
||
: n;
|
||
},
|
||
getHelper: function(e, t) {
|
||
return this.getHelpers(e, t)[0];
|
||
},
|
||
getHelpers: function(e, t) {
|
||
var r = this, i = [];
|
||
if (!n.hasOwnProperty(t)) return i;
|
||
var o = n[t], a = this.getModeAt(e);
|
||
if ('string' == typeof a[t]) o[a[t]] && i.push(o[a[t]]);
|
||
else if (a[t])
|
||
for (var s = 0; s < a[t].length; s++) {
|
||
var l = o[a[t][s]];
|
||
l && i.push(l);
|
||
}
|
||
else
|
||
a.helperType && o[a.helperType]
|
||
? i.push(o[a.helperType])
|
||
: o[a.name] && i.push(o[a.name]);
|
||
for (var c = 0; c < o._global.length; c++) {
|
||
var u = o._global[c];
|
||
u.pred(a, r) && -1 == indexOf(i, u.val) && i.push(u.val);
|
||
}
|
||
return i;
|
||
},
|
||
getStateAfter: function(e, t) {
|
||
var n = this.doc;
|
||
return (e = clipLine(
|
||
n,
|
||
null == e ? n.first + n.size - 1 : e
|
||
)), getStateBefore(this, e + 1, t);
|
||
},
|
||
cursorCoords: function(e, t) {
|
||
var n, r = this.doc.sel.primary();
|
||
return (n = null == e
|
||
? r.head
|
||
: 'object' == typeof e
|
||
? clipPos(this.doc, e)
|
||
: e ? r.from() : r.to()), cursorCoords(this, n, t || 'page');
|
||
},
|
||
charCoords: function(e, t) {
|
||
return charCoords(this, clipPos(this.doc, e), t || 'page');
|
||
},
|
||
coordsChar: function(e, t) {
|
||
return (e = fromCoordSystem(this, e, t || 'page')), coordsChar(
|
||
this,
|
||
e.left,
|
||
e.top
|
||
);
|
||
},
|
||
lineAtHeight: function(e, t) {
|
||
return (e = fromCoordSystem(this, { top: e, left: 0 }, t || 'page')
|
||
.top), lineAtHeight(this.doc, e + this.display.viewOffset);
|
||
},
|
||
heightAtLine: function(e, t, n) {
|
||
var r, i = !1;
|
||
if ('number' == typeof e) {
|
||
var o = this.doc.first + this.doc.size - 1;
|
||
e < this.doc.first
|
||
? (e = this.doc.first)
|
||
: e > o && ((e = o), (i = !0)), (r = getLine(this.doc, e));
|
||
} else r = e;
|
||
return (
|
||
intoCoordSystem(this, r, { top: 0, left: 0 }, t || 'page', n || i)
|
||
.top + (i ? this.doc.height - heightAtLine(r) : 0)
|
||
);
|
||
},
|
||
defaultTextHeight: function() {
|
||
return textHeight(this.display);
|
||
},
|
||
defaultCharWidth: function() {
|
||
return charWidth(this.display);
|
||
},
|
||
getViewport: function() {
|
||
return { from: this.display.viewFrom, to: this.display.viewTo };
|
||
},
|
||
addWidget: function(e, t, n, r, i) {
|
||
var o = this.display;
|
||
e = cursorCoords(this, clipPos(this.doc, e));
|
||
var a = e.bottom, s = e.left;
|
||
if (
|
||
((t.style.position = 'absolute'), t.setAttribute(
|
||
'cm-ignore-events',
|
||
'true'
|
||
), this.display.input.setUneditable(t), o.sizer.appendChild(
|
||
t
|
||
), 'over' == r)
|
||
)
|
||
a = e.top;
|
||
else if ('above' == r || 'near' == r) {
|
||
var l = Math.max(o.wrapper.clientHeight, this.doc.height),
|
||
c = Math.max(o.sizer.clientWidth, o.lineSpace.clientWidth);
|
||
('above' == r || e.bottom + t.offsetHeight > l) &&
|
||
e.top > t.offsetHeight
|
||
? (a = e.top - t.offsetHeight)
|
||
: e.bottom + t.offsetHeight <= l && (a = e.bottom), s +
|
||
t.offsetWidth >
|
||
c && (s = c - t.offsetWidth);
|
||
}
|
||
(t.style.top = a + 'px'), (t.style.left = t.style.right =
|
||
''), 'right' == i
|
||
? ((s = o.sizer.clientWidth - t.offsetWidth), (t.style.right =
|
||
'0px'))
|
||
: ('left' == i
|
||
? (s = 0)
|
||
: 'middle' == i &&
|
||
(s =
|
||
(o.sizer.clientWidth - t.offsetWidth) /
|
||
2), (t.style.left = s + 'px')), n &&
|
||
scrollIntoView(this, {
|
||
left: s,
|
||
top: a,
|
||
right: s + t.offsetWidth,
|
||
bottom: a + t.offsetHeight
|
||
});
|
||
},
|
||
triggerOnKeyDown: methodOp(onKeyDown),
|
||
triggerOnKeyPress: methodOp(onKeyPress),
|
||
triggerOnKeyUp: onKeyUp,
|
||
execCommand: function(e) {
|
||
if (De.hasOwnProperty(e)) return De[e].call(null, this);
|
||
},
|
||
triggerElectric: methodOp(function(e) {
|
||
triggerElectric(this, e);
|
||
}),
|
||
findPosH: function(e, t, n, r) {
|
||
var i = this, o = 1;
|
||
t < 0 && ((o = -1), (t = -t));
|
||
for (
|
||
var a = clipPos(this.doc, e), s = 0;
|
||
s < t && ((a = findPosH(i.doc, a, o, n, r)), !a.hitSide);
|
||
++s
|
||
);
|
||
return a;
|
||
},
|
||
moveH: methodOp(function(e, t) {
|
||
var n = this;
|
||
this.extendSelectionsBy(function(r) {
|
||
return n.display.shift || n.doc.extend || r.empty()
|
||
? findPosH(n.doc, r.head, e, t, n.options.rtlMoveVisually)
|
||
: e < 0 ? r.from() : r.to();
|
||
}, W);
|
||
}),
|
||
deleteH: methodOp(function(e, t) {
|
||
var n = this.doc.sel, r = this.doc;
|
||
n.somethingSelected()
|
||
? r.replaceSelection('', null, '+delete')
|
||
: deleteNearSelection(this, function(n) {
|
||
var i = findPosH(r, n.head, e, t, !1);
|
||
return e < 0
|
||
? { from: i, to: n.head }
|
||
: { from: n.head, to: i };
|
||
});
|
||
}),
|
||
findPosV: function(e, t, n, r) {
|
||
var i = this, o = 1, a = r;
|
||
t < 0 && ((o = -1), (t = -t));
|
||
for (var s = clipPos(this.doc, e), l = 0; l < t; ++l) {
|
||
var c = cursorCoords(i, s, 'div');
|
||
if (
|
||
(null == a ? (a = c.left) : (c.left = a), (s = findPosV(
|
||
i,
|
||
c,
|
||
o,
|
||
n
|
||
)), s.hitSide)
|
||
)
|
||
break;
|
||
}
|
||
return s;
|
||
},
|
||
moveV: methodOp(function(e, t) {
|
||
var n = this,
|
||
r = this.doc,
|
||
i = [],
|
||
o = !this.display.shift && !r.extend && r.sel.somethingSelected();
|
||
if (
|
||
(r.extendSelectionsBy(function(a) {
|
||
if (o) return e < 0 ? a.from() : a.to();
|
||
var s = cursorCoords(n, a.head, 'div');
|
||
null != a.goalColumn && (s.left = a.goalColumn), i.push(s.left);
|
||
var l = findPosV(n, s, e, t);
|
||
return 'page' == t &&
|
||
a == r.sel.primary() &&
|
||
addToScrollTop(n, charCoords(n, l, 'div').top - s.top), l;
|
||
}, W), i.length)
|
||
)
|
||
for (var a = 0; a < r.sel.ranges.length; a++)
|
||
r.sel.ranges[a].goalColumn = i[a];
|
||
}),
|
||
findWordAt: function(e) {
|
||
var t = this.doc, n = getLine(t, e.line).text, r = e.ch, i = e.ch;
|
||
if (n) {
|
||
var o = this.getHelper(e, 'wordChars');
|
||
('before' != e.sticky && i != n.length) || !r ? ++i : --r;
|
||
for (
|
||
var a = n.charAt(r),
|
||
s = isWordChar(a, o)
|
||
? function(e) {
|
||
return isWordChar(e, o);
|
||
}
|
||
: /\s/.test(a)
|
||
? function(e) {
|
||
return /\s/.test(e);
|
||
}
|
||
: function(e) {
|
||
return !/\s/.test(e) && !isWordChar(e);
|
||
};
|
||
r > 0 && s(n.charAt(r - 1));
|
||
|
||
)
|
||
--r;
|
||
for (; i < n.length && s(n.charAt(i)); )
|
||
++i;
|
||
}
|
||
return new he(Pos(e.line, r), Pos(e.line, i));
|
||
},
|
||
toggleOverwrite: function(e) {
|
||
(null != e && e == this.state.overwrite) ||
|
||
((this.state.overwrite = !this.state.overwrite)
|
||
? addClass(this.display.cursorDiv, 'CodeMirror-overwrite')
|
||
: L(this.display.cursorDiv, 'CodeMirror-overwrite'), signal(
|
||
this,
|
||
'overwriteToggle',
|
||
this,
|
||
this.state.overwrite
|
||
));
|
||
},
|
||
hasFocus: function() {
|
||
return this.display.input.getField() == activeElt();
|
||
},
|
||
isReadOnly: function() {
|
||
return !(!this.options.readOnly && !this.doc.cantEdit);
|
||
},
|
||
scrollTo: methodOp(function(e, t) {
|
||
scrollToCoords(this, e, t);
|
||
}),
|
||
getScrollInfo: function() {
|
||
var e = this.display.scroller;
|
||
return {
|
||
left: e.scrollLeft,
|
||
top: e.scrollTop,
|
||
height: e.scrollHeight - scrollGap(this) - this.display.barHeight,
|
||
width: e.scrollWidth - scrollGap(this) - this.display.barWidth,
|
||
clientHeight: displayHeight(this),
|
||
clientWidth: displayWidth(this)
|
||
};
|
||
},
|
||
scrollIntoView: methodOp(function(e, t) {
|
||
null == e
|
||
? ((e = { from: this.doc.sel.primary().head, to: null }), null ==
|
||
t && (t = this.options.cursorScrollMargin))
|
||
: 'number' == typeof e
|
||
? (e = { from: Pos(e, 0), to: null })
|
||
: null == e.from &&
|
||
(e = {
|
||
from: e,
|
||
to: null
|
||
}), e.to || (e.to = e.from), (e.margin = t || 0), null != e.from.line ? scrollToRange(this, e) : scrollToCoordsRange(this, e.from, e.to, e.margin);
|
||
}),
|
||
setSize: methodOp(function(e, t) {
|
||
var n = this,
|
||
r = function(e) {
|
||
return 'number' == typeof e || /^\d+$/.test(String(e))
|
||
? e + 'px'
|
||
: e;
|
||
};
|
||
null != e &&
|
||
(this.display.wrapper.style.width = r(
|
||
e
|
||
)), null != t && (this.display.wrapper.style.height = r(t)), this.options.lineWrapping && clearLineMeasurementCache(this);
|
||
var i = this.display.viewFrom;
|
||
this.doc.iter(i, this.display.viewTo, function(e) {
|
||
if (e.widgets)
|
||
for (var t = 0; t < e.widgets.length; t++)
|
||
if (e.widgets[t].noHScroll) {
|
||
regLineChange(n, i, 'widget');
|
||
break;
|
||
}
|
||
++i;
|
||
}), (this.curOp.forceUpdate = !0), signal(this, 'refresh', this);
|
||
}),
|
||
operation: function(e) {
|
||
return runInOp(this, e);
|
||
},
|
||
refresh: methodOp(function() {
|
||
var e = this.display.cachedTextHeight;
|
||
regChange(
|
||
this
|
||
), (this.curOp.forceUpdate = !0), clearCaches(this), scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop), updateGutterSpace(this), (null == e || Math.abs(e - textHeight(this.display)) > 0.5) && estimateLineHeights(this), signal(this, 'refresh', this);
|
||
}),
|
||
swapDoc: methodOp(function(e) {
|
||
var t = this.doc;
|
||
return (t.cm = null), attachDoc(this, e), clearCaches(this), this.display.input.reset(), scrollToCoords(this, e.scrollLeft, e.scrollTop), (this.curOp.forceScroll = !0), signalLater(this, 'swapDoc', this, t), t;
|
||
}),
|
||
getInputField: function() {
|
||
return this.display.input.getField();
|
||
},
|
||
getWrapperElement: function() {
|
||
return this.display.wrapper;
|
||
},
|
||
getScrollerElement: function() {
|
||
return this.display.scroller;
|
||
},
|
||
getGutterElement: function() {
|
||
return this.display.gutters;
|
||
}
|
||
}), eventMixin(e), (e.registerHelper = function(t, r, i) {
|
||
n.hasOwnProperty(t) || (n[t] = e[t] = { _global: [] }), (n[t][r] = i);
|
||
}), (e.registerGlobalHelper = function(t, r, i, o) {
|
||
e.registerHelper(t, r, o), n[t]._global.push({ pred: i, val: o });
|
||
});
|
||
})(CodeMirror$1);
|
||
var je = 'iter insert remove copy getEditor constructor'.split(' ');
|
||
for (var Ge in we.prototype) we.prototype.hasOwnProperty(Ge) &&
|
||
indexOf(je, Ge) < 0 &&
|
||
(CodeMirror$1.prototype[Ge] = (function(e) {
|
||
return function() {
|
||
return e.apply(this.doc, arguments);
|
||
};
|
||
})(we.prototype[Ge]));
|
||
return eventMixin(
|
||
we
|
||
), (CodeMirror$1.inputStyles = { textarea: Ve, contenteditable: Re }), (CodeMirror$1.defineMode = function(
|
||
e
|
||
) {
|
||
CodeMirror$1.defaults.mode ||
|
||
'null' == e ||
|
||
(CodeMirror$1.defaults.mode = e), defineMode.apply(this, arguments);
|
||
}), (CodeMirror$1.defineMIME = defineMIME), CodeMirror$1.defineMode(
|
||
'null',
|
||
function() {
|
||
return {
|
||
token: function(e) {
|
||
return e.skipToEnd();
|
||
}
|
||
};
|
||
}
|
||
), CodeMirror$1.defineMIME('text/plain', 'null'), (CodeMirror$1.defineExtension = function(
|
||
e,
|
||
t
|
||
) {
|
||
CodeMirror$1.prototype[e] = t;
|
||
}), (CodeMirror$1.defineDocExtension = function(e, t) {
|
||
we.prototype[e] = t;
|
||
}), (CodeMirror$1.fromTextArea = fromTextArea), (function addLegacyProps(e) {
|
||
(e.off = off), (e.on = G), (e.wheelEventPixels = wheelEventPixels), (e.Doc = we), (e.splitLines = U), (e.countColumn = countColumn), (e.findColumn = findColumn), (e.isWordChar = isWordCharBasic), (e.Pass = A), (e.signal = signal), (e.Line = Q), (e.changeEnd = changeEnd), (e.scrollbarModel = le), (e.Pos = Pos), (e.cmpPos = cmp), (e.modes = X), (e.mimeModes = Y), (e.resolveMode = resolveMode), (e.getMode = getMode), (e.modeExtensions = Z), (e.extendMode = extendMode), (e.copyState = copyState), (e.startState = startState), (e.innerMode = innerMode), (e.commands = De), (e.keyMap = Pe), (e.keyName = keyName), (e.isModifierKey = isModifierKey), (e.lookupKey = lookupKey), (e.normalizeKeyMap = normalizeKeyMap), (e.StringStream = J), (e.SharedTextMarker = xe), (e.TextMarker = be), (e.LineWidget = ve), (e.e_preventDefault = e_preventDefault), (e.e_stopPropagation = e_stopPropagation), (e.e_stop = e_stop), (e.addClass = addClass), (e.contains = contains), (e.rmClass = L), (e.keyNames = Le);
|
||
})(CodeMirror$1), (CodeMirror$1.version = '5.26.0'), CodeMirror$1;
|
||
});
|
||
},
|
||
1037: function(e, t, n) {
|
||
!(function(e) {
|
||
e(n(1036));
|
||
})(function(e) {
|
||
'use strict';
|
||
function expressionAllowed(e, t, n) {
|
||
return (
|
||
/^(?:operator|sof|keyword c|case|new|export|default|[\[{}\(,;:]|=>)$/.test(
|
||
t.lastType
|
||
) ||
|
||
('quasi' == t.lastType &&
|
||
/\{\s*$/.test(e.string.slice(0, e.pos - (n || 0))))
|
||
);
|
||
}
|
||
e.defineMode('javascript', function(t, n) {
|
||
function readRegexp(e) {
|
||
for (var t, n = !1, r = !1; null != (t = e.next()); ) {
|
||
if (!n) {
|
||
if ('/' == t && !r) return;
|
||
'[' == t ? (r = !0) : r && ']' == t && (r = !1);
|
||
}
|
||
n = !n && '\\' == t;
|
||
}
|
||
}
|
||
function ret(e, t, n) {
|
||
return (r = e), (i = n), t;
|
||
}
|
||
function tokenBase(e, t) {
|
||
var n = e.next();
|
||
if ('"' == n || "'" == n)
|
||
return (t.tokenize = tokenString(n)), t.tokenize(e, t);
|
||
if ('.' == n && e.match(/^\d+(?:[eE][+\-]?\d+)?/))
|
||
return ret('number', 'number');
|
||
if ('.' == n && e.match('..')) return ret('spread', 'meta');
|
||
if (/[\[\]{}\(\),;\:\.]/.test(n)) return ret(n);
|
||
if ('=' == n && e.eat('>')) return ret('=>', 'operator');
|
||
if ('0' == n && e.eat(/x/i))
|
||
return e.eatWhile(/[\da-f]/i), ret('number', 'number');
|
||
if ('0' == n && e.eat(/o/i))
|
||
return e.eatWhile(/[0-7]/i), ret('number', 'number');
|
||
if ('0' == n && e.eat(/b/i))
|
||
return e.eatWhile(/[01]/i), ret('number', 'number');
|
||
if (/\d/.test(n))
|
||
return e.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/), ret(
|
||
'number',
|
||
'number'
|
||
);
|
||
if ('/' == n)
|
||
return e.eat('*')
|
||
? ((t.tokenize = tokenComment), tokenComment(e, t))
|
||
: e.eat('/')
|
||
? (e.skipToEnd(), ret('comment', 'comment'))
|
||
: expressionAllowed(e, t, 1)
|
||
? (readRegexp(e), e.match(
|
||
/^\b(([gimyu])(?![gimyu]*\2))+\b/
|
||
), ret('regexp', 'string-2'))
|
||
: (e.eatWhile(p), ret(
|
||
'operator',
|
||
'operator',
|
||
e.current()
|
||
));
|
||
if ('`' == n) return (t.tokenize = tokenQuasi), tokenQuasi(e, t);
|
||
if ('#' == n) return e.skipToEnd(), ret('error', 'error');
|
||
if (p.test(n))
|
||
return ('>' == n && t.lexical && '>' == t.lexical.type) ||
|
||
e.eatWhile(p), ret('operator', 'operator', e.current());
|
||
if (u.test(n)) {
|
||
e.eatWhile(u);
|
||
var r = e.current(), i = d.propertyIsEnumerable(r) && d[r];
|
||
return i && '.' != t.lastType
|
||
? ret(i.type, i.style, r)
|
||
: ret('variable', 'variable', r);
|
||
}
|
||
}
|
||
function tokenString(e) {
|
||
return function(t, n) {
|
||
var r, i = !1;
|
||
if (s && '@' == t.peek() && t.match(f))
|
||
return (n.tokenize = tokenBase), ret('jsonld-keyword', 'meta');
|
||
for (
|
||
;
|
||
null != (r = t.next()) && (r != e || i);
|
||
|
||
) i = !i && '\\' == r;
|
||
return i || (n.tokenize = tokenBase), ret('string', 'string');
|
||
};
|
||
}
|
||
function tokenComment(e, t) {
|
||
for (var n, r = !1; (n = e.next()); ) {
|
||
if ('/' == n && r) {
|
||
t.tokenize = tokenBase;
|
||
break;
|
||
}
|
||
r = '*' == n;
|
||
}
|
||
return ret('comment', 'comment');
|
||
}
|
||
function tokenQuasi(e, t) {
|
||
for (var n, r = !1; null != (n = e.next()); ) {
|
||
if (!r && ('`' == n || ('$' == n && e.eat('{')))) {
|
||
t.tokenize = tokenBase;
|
||
break;
|
||
}
|
||
r = !r && '\\' == n;
|
||
}
|
||
return ret('quasi', 'string-2', e.current());
|
||
}
|
||
function findFatArrow(e, t) {
|
||
t.fatArrowAt && (t.fatArrowAt = null);
|
||
var n = e.string.indexOf('=>', e.start);
|
||
if (!(n < 0)) {
|
||
if (c) {
|
||
var r = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(
|
||
e.string.slice(e.start, n)
|
||
);
|
||
r && (n = r.index);
|
||
}
|
||
for (var i = 0, o = !1, a = n - 1; a >= 0; --a) {
|
||
var s = e.string.charAt(a), l = h.indexOf(s);
|
||
if (l >= 0 && l < 3) {
|
||
if (!i) {
|
||
++a;
|
||
break;
|
||
}
|
||
if (0 == --i) {
|
||
'(' == s && (o = !0);
|
||
break;
|
||
}
|
||
} else if (l >= 3 && l < 6) ++i;
|
||
else if (u.test(s)) o = !0;
|
||
else {
|
||
if (/["'\/]/.test(s)) return;
|
||
if (o && !i) {
|
||
++a;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
o && !i && (t.fatArrowAt = a);
|
||
}
|
||
}
|
||
function JSLexical(e, t, n, r, i, o) {
|
||
(this.indented = e), (this.column = t), (this.type = n), (this.prev = i), (this.info = o), null != r && (this.align = r);
|
||
}
|
||
function inScope(e, t) {
|
||
for (var n = e.localVars; n; n = n.next) if (n.name == t) return !0;
|
||
for (
|
||
var r = e.context;
|
||
r;
|
||
r = r.prev
|
||
) for (var n = r.vars; n; n = n.next) if (n.name == t) return !0;
|
||
}
|
||
function parseJS(e, t, n, r, i) {
|
||
var o = e.cc;
|
||
for (
|
||
(m.state = e), (m.stream = i), (m.marked = null), (m.cc = o), (m.style = t), e.lexical.hasOwnProperty(
|
||
'align'
|
||
) || (e.lexical.align = !0);
|
||
;
|
||
|
||
) {
|
||
if ((o.length ? o.pop() : l ? expression : statement)(n, r)) {
|
||
for (; o.length && o[o.length - 1].lex; )
|
||
o.pop()();
|
||
return m.marked
|
||
? m.marked
|
||
: 'variable' == n && inScope(e, r) ? 'variable-2' : t;
|
||
}
|
||
}
|
||
}
|
||
function pass() {
|
||
for (
|
||
var e = arguments.length - 1;
|
||
e >= 0;
|
||
e--
|
||
) m.cc.push(arguments[e]);
|
||
}
|
||
function cont() {
|
||
return pass.apply(null, arguments), !0;
|
||
}
|
||
function register(e) {
|
||
function inList(t) {
|
||
for (var n = t; n; n = n.next) if (n.name == e) return !0;
|
||
return !1;
|
||
}
|
||
var t = m.state;
|
||
if (((m.marked = 'def'), t.context)) {
|
||
if (inList(t.localVars)) return;
|
||
t.localVars = { name: e, next: t.localVars };
|
||
} else {
|
||
if (inList(t.globalVars)) return;
|
||
n.globalVars && (t.globalVars = { name: e, next: t.globalVars });
|
||
}
|
||
}
|
||
function pushcontext() {
|
||
(m.state.context = {
|
||
prev: m.state.context,
|
||
vars: m.state.localVars
|
||
}), (m.state.localVars = v);
|
||
}
|
||
function popcontext() {
|
||
(m.state.localVars =
|
||
m.state.context.vars), (m.state.context = m.state.context.prev);
|
||
}
|
||
function pushlex(e, t) {
|
||
var n = function() {
|
||
var n = m.state, r = n.indented;
|
||
if ('stat' == n.lexical.type) r = n.lexical.indented;
|
||
else
|
||
for (var i = n.lexical; i && ')' == i.type && i.align; i = i.prev)
|
||
r = i.indented;
|
||
n.lexical = new JSLexical(
|
||
r,
|
||
m.stream.column(),
|
||
e,
|
||
null,
|
||
n.lexical,
|
||
t
|
||
);
|
||
};
|
||
return (n.lex = !0), n;
|
||
}
|
||
function poplex() {
|
||
var e = m.state;
|
||
e.lexical.prev &&
|
||
(')' == e.lexical.type &&
|
||
(e.indented = e.lexical.indented), (e.lexical = e.lexical.prev));
|
||
}
|
||
function expect(e) {
|
||
function exp(t) {
|
||
return t == e ? cont() : ';' == e ? pass() : cont(exp);
|
||
}
|
||
return exp;
|
||
}
|
||
function statement(e, t) {
|
||
return 'var' == e
|
||
? cont(pushlex('vardef', t.length), vardef, expect(';'), poplex)
|
||
: 'keyword a' == e
|
||
? cont(pushlex('form'), parenExpr, statement, poplex)
|
||
: 'keyword b' == e
|
||
? cont(pushlex('form'), statement, poplex)
|
||
: '{' == e
|
||
? cont(pushlex('}'), block, poplex)
|
||
: ';' == e
|
||
? cont()
|
||
: 'if' == e
|
||
? ('else' == m.state.lexical.info &&
|
||
m.state.cc[m.state.cc.length - 1] ==
|
||
poplex &&
|
||
m.state.cc.pop()(), cont(
|
||
pushlex('form'),
|
||
parenExpr,
|
||
statement,
|
||
poplex,
|
||
maybeelse
|
||
))
|
||
: 'function' == e
|
||
? cont(functiondef)
|
||
: 'for' == e
|
||
? cont(
|
||
pushlex('form'),
|
||
forspec,
|
||
statement,
|
||
poplex
|
||
)
|
||
: 'variable' == e
|
||
? c && 'type' == t
|
||
? ((m.marked = 'keyword'), cont(
|
||
typeexpr,
|
||
expect('operator'),
|
||
typeexpr,
|
||
expect(';')
|
||
))
|
||
: cont(
|
||
pushlex('stat'),
|
||
maybelabel
|
||
)
|
||
: 'switch' == e
|
||
? cont(
|
||
pushlex('form'),
|
||
parenExpr,
|
||
expect('{'),
|
||
pushlex('}', 'switch'),
|
||
block,
|
||
poplex,
|
||
poplex
|
||
)
|
||
: 'case' == e
|
||
? cont(
|
||
expression,
|
||
expect(':')
|
||
)
|
||
: 'default' == e
|
||
? cont(expect(':'))
|
||
: 'catch' == e
|
||
? cont(
|
||
pushlex('form'),
|
||
pushcontext,
|
||
expect('('),
|
||
funarg,
|
||
expect(')'),
|
||
statement,
|
||
poplex,
|
||
popcontext
|
||
)
|
||
: 'class' == e
|
||
? cont(
|
||
pushlex(
|
||
'form'
|
||
),
|
||
className,
|
||
poplex
|
||
)
|
||
: 'export' == e
|
||
? cont(
|
||
pushlex(
|
||
'stat'
|
||
),
|
||
afterExport,
|
||
poplex
|
||
)
|
||
: 'import' ==
|
||
e
|
||
? cont(
|
||
pushlex(
|
||
'stat'
|
||
),
|
||
afterImport,
|
||
poplex
|
||
)
|
||
: 'module' ==
|
||
e
|
||
? cont(
|
||
pushlex(
|
||
'form'
|
||
),
|
||
pattern,
|
||
expect(
|
||
'{'
|
||
),
|
||
pushlex(
|
||
'}'
|
||
),
|
||
block,
|
||
poplex,
|
||
poplex
|
||
)
|
||
: 'async' ==
|
||
e
|
||
? cont(
|
||
statement
|
||
)
|
||
: '@' ==
|
||
t
|
||
? cont(
|
||
expression,
|
||
statement
|
||
)
|
||
: pass(
|
||
pushlex(
|
||
'stat'
|
||
),
|
||
expression,
|
||
expect(
|
||
';'
|
||
),
|
||
poplex
|
||
);
|
||
}
|
||
function expression(e) {
|
||
return expressionInner(e, !1);
|
||
}
|
||
function expressionNoComma(e) {
|
||
return expressionInner(e, !0);
|
||
}
|
||
function parenExpr(e) {
|
||
return '(' != e
|
||
? pass()
|
||
: cont(pushlex(')'), expression, expect(')'), poplex);
|
||
}
|
||
function expressionInner(e, t) {
|
||
if (m.state.fatArrowAt == m.stream.start) {
|
||
var n = t ? arrowBodyNoComma : arrowBody;
|
||
if ('(' == e)
|
||
return cont(
|
||
pushcontext,
|
||
pushlex(')'),
|
||
commasep(pattern, ')'),
|
||
poplex,
|
||
expect('=>'),
|
||
n,
|
||
popcontext
|
||
);
|
||
if ('variable' == e)
|
||
return pass(pushcontext, pattern, expect('=>'), n, popcontext);
|
||
}
|
||
var r = t ? maybeoperatorNoComma : maybeoperatorComma;
|
||
return g.hasOwnProperty(e)
|
||
? cont(r)
|
||
: 'function' == e
|
||
? cont(functiondef, r)
|
||
: 'class' == e
|
||
? cont(pushlex('form'), classExpression, poplex)
|
||
: 'keyword c' == e || 'async' == e
|
||
? cont(t ? maybeexpressionNoComma : maybeexpression)
|
||
: '(' == e
|
||
? cont(
|
||
pushlex(')'),
|
||
maybeexpression,
|
||
expect(')'),
|
||
poplex,
|
||
r
|
||
)
|
||
: 'operator' == e || 'spread' == e
|
||
? cont(t ? expressionNoComma : expression)
|
||
: '[' == e
|
||
? cont(
|
||
pushlex(']'),
|
||
arrayLiteral,
|
||
poplex,
|
||
r
|
||
)
|
||
: '{' == e
|
||
? contCommasep(objprop, '}', null, r)
|
||
: 'quasi' == e
|
||
? pass(quasi, r)
|
||
: 'new' == e
|
||
? cont(maybeTarget(t))
|
||
: cont();
|
||
}
|
||
function maybeexpression(e) {
|
||
return e.match(/[;\}\)\],]/) ? pass() : pass(expression);
|
||
}
|
||
function maybeexpressionNoComma(e) {
|
||
return e.match(/[;\}\)\],]/) ? pass() : pass(expressionNoComma);
|
||
}
|
||
function maybeoperatorComma(e, t) {
|
||
return ',' == e ? cont(expression) : maybeoperatorNoComma(e, t, !1);
|
||
}
|
||
function maybeoperatorNoComma(e, t, n) {
|
||
var r = 0 == n ? maybeoperatorComma : maybeoperatorNoComma,
|
||
i = 0 == n ? expression : expressionNoComma;
|
||
return '=>' == e
|
||
? cont(pushcontext, n ? arrowBodyNoComma : arrowBody, popcontext)
|
||
: 'operator' == e
|
||
? /\+\+|--/.test(t)
|
||
? cont(r)
|
||
: '?' == t ? cont(expression, expect(':'), i) : cont(i)
|
||
: 'quasi' == e
|
||
? pass(quasi, r)
|
||
: ';' != e
|
||
? '(' == e
|
||
? contCommasep(expressionNoComma, ')', 'call', r)
|
||
: '.' == e
|
||
? cont(property, r)
|
||
: '[' == e
|
||
? cont(
|
||
pushlex(']'),
|
||
maybeexpression,
|
||
expect(']'),
|
||
poplex,
|
||
r
|
||
)
|
||
: void 0
|
||
: void 0;
|
||
}
|
||
function quasi(e, t) {
|
||
return 'quasi' != e
|
||
? pass()
|
||
: '${' != t.slice(t.length - 2)
|
||
? cont(quasi)
|
||
: cont(expression, continueQuasi);
|
||
}
|
||
function continueQuasi(e) {
|
||
if ('}' == e)
|
||
return (m.marked =
|
||
'string-2'), (m.state.tokenize = tokenQuasi), cont(quasi);
|
||
}
|
||
function arrowBody(e) {
|
||
return findFatArrow(
|
||
m.stream,
|
||
m.state
|
||
), pass('{' == e ? statement : expression);
|
||
}
|
||
function arrowBodyNoComma(e) {
|
||
return findFatArrow(
|
||
m.stream,
|
||
m.state
|
||
), pass('{' == e ? statement : expressionNoComma);
|
||
}
|
||
function maybeTarget(e) {
|
||
return function(t) {
|
||
return '.' == t
|
||
? cont(e ? targetNoComma : target)
|
||
: pass(e ? expressionNoComma : expression);
|
||
};
|
||
}
|
||
function target(e, t) {
|
||
if ('target' == t)
|
||
return (m.marked = 'keyword'), cont(maybeoperatorComma);
|
||
}
|
||
function targetNoComma(e, t) {
|
||
if ('target' == t)
|
||
return (m.marked = 'keyword'), cont(maybeoperatorNoComma);
|
||
}
|
||
function maybelabel(e) {
|
||
return ':' == e
|
||
? cont(poplex, statement)
|
||
: pass(maybeoperatorComma, expect(';'), poplex);
|
||
}
|
||
function property(e) {
|
||
if ('variable' == e) return (m.marked = 'property'), cont();
|
||
}
|
||
function objprop(e, t) {
|
||
return 'async' == e
|
||
? ((m.marked = 'property'), cont(objprop))
|
||
: 'variable' == e || 'keyword' == m.style
|
||
? ((m.marked = 'property'), cont(
|
||
'get' == t || 'set' == t ? getterSetter : afterprop
|
||
))
|
||
: 'number' == e || 'string' == e
|
||
? ((m.marked = s
|
||
? 'property'
|
||
: m.style + ' property'), cont(afterprop))
|
||
: 'jsonld-keyword' == e
|
||
? cont(afterprop)
|
||
: 'modifier' == e
|
||
? cont(objprop)
|
||
: '[' == e
|
||
? cont(expression, expect(']'), afterprop)
|
||
: 'spread' == e
|
||
? cont(expression)
|
||
: ':' == e ? pass(afterprop) : void 0;
|
||
}
|
||
function getterSetter(e) {
|
||
return 'variable' != e
|
||
? pass(afterprop)
|
||
: ((m.marked = 'property'), cont(functiondef));
|
||
}
|
||
function afterprop(e) {
|
||
return ':' == e
|
||
? cont(expressionNoComma)
|
||
: '(' == e ? pass(functiondef) : void 0;
|
||
}
|
||
function commasep(e, t, n) {
|
||
function proceed(r, i) {
|
||
if (n ? n.indexOf(r) > -1 : ',' == r) {
|
||
var o = m.state.lexical;
|
||
return 'call' == o.info &&
|
||
(o.pos = (o.pos || 0) + 1), cont(function(n, r) {
|
||
return n == t || r == t ? pass() : pass(e);
|
||
}, proceed);
|
||
}
|
||
return r == t || i == t ? cont() : cont(expect(t));
|
||
}
|
||
return function(n, r) {
|
||
return n == t || r == t ? cont() : pass(e, proceed);
|
||
};
|
||
}
|
||
function contCommasep(e, t, n) {
|
||
for (var r = 3; r < arguments.length; r++) m.cc.push(arguments[r]);
|
||
return cont(pushlex(t, n), commasep(e, t), poplex);
|
||
}
|
||
function block(e) {
|
||
return '}' == e ? cont() : pass(statement, block);
|
||
}
|
||
function maybetype(e, t) {
|
||
if (c) {
|
||
if (':' == e) return cont(typeexpr);
|
||
if ('?' == t) return cont(maybetype);
|
||
}
|
||
}
|
||
function typeexpr(e) {
|
||
return 'variable' == e
|
||
? ((m.marked = 'variable-3'), cont(afterType))
|
||
: 'string' == e || 'number' == e || 'atom' == e
|
||
? cont(afterType)
|
||
: '{' == e
|
||
? cont(
|
||
pushlex('}'),
|
||
commasep(typeprop, '}', ',;'),
|
||
poplex,
|
||
afterType
|
||
)
|
||
: '(' == e
|
||
? cont(commasep(typearg, ')'), maybeReturnType)
|
||
: void 0;
|
||
}
|
||
function maybeReturnType(e) {
|
||
if ('=>' == e) return cont(typeexpr);
|
||
}
|
||
function typeprop(e, t) {
|
||
return 'variable' == e || 'keyword' == m.style
|
||
? ((m.marked = 'property'), cont(typeprop))
|
||
: '?' == t
|
||
? cont(typeprop)
|
||
: ':' == e
|
||
? cont(typeexpr)
|
||
: '[' == e
|
||
? cont(expression, maybetype, expect(']'), typeprop)
|
||
: void 0;
|
||
}
|
||
function typearg(e) {
|
||
return 'variable' == e
|
||
? cont(typearg)
|
||
: ':' == e ? cont(typeexpr) : void 0;
|
||
}
|
||
function afterType(e, t) {
|
||
return '<' == t
|
||
? cont(pushlex('>'), commasep(typeexpr, '>'), poplex, afterType)
|
||
: '|' == t || '.' == e
|
||
? cont(typeexpr)
|
||
: '[' == e
|
||
? cont(expect(']'), afterType)
|
||
: 'extends' == t ? cont(typeexpr) : void 0;
|
||
}
|
||
function vardef() {
|
||
return pass(pattern, maybetype, maybeAssign, vardefCont);
|
||
}
|
||
function pattern(e, t) {
|
||
return 'modifier' == e
|
||
? cont(pattern)
|
||
: 'variable' == e
|
||
? (register(t), cont())
|
||
: 'spread' == e
|
||
? cont(pattern)
|
||
: '[' == e
|
||
? contCommasep(pattern, ']')
|
||
: '{' == e ? contCommasep(proppattern, '}') : void 0;
|
||
}
|
||
function proppattern(e, t) {
|
||
return 'variable' != e || m.stream.match(/^\s*:/, !1)
|
||
? ('variable' == e && (m.marked = 'property'), 'spread' == e
|
||
? cont(pattern)
|
||
: '}' == e ? pass() : cont(expect(':'), pattern, maybeAssign))
|
||
: (register(t), cont(maybeAssign));
|
||
}
|
||
function maybeAssign(e, t) {
|
||
if ('=' == t) return cont(expressionNoComma);
|
||
}
|
||
function vardefCont(e) {
|
||
if (',' == e) return cont(vardef);
|
||
}
|
||
function maybeelse(e, t) {
|
||
if ('keyword b' == e && 'else' == t)
|
||
return cont(pushlex('form', 'else'), statement, poplex);
|
||
}
|
||
function forspec(e) {
|
||
if ('(' == e)
|
||
return cont(pushlex(')'), forspec1, expect(')'), poplex);
|
||
}
|
||
function forspec1(e) {
|
||
return 'var' == e
|
||
? cont(vardef, expect(';'), forspec2)
|
||
: ';' == e
|
||
? cont(forspec2)
|
||
: 'variable' == e
|
||
? cont(formaybeinof)
|
||
: pass(expression, expect(';'), forspec2);
|
||
}
|
||
function formaybeinof(e, t) {
|
||
return 'in' == t || 'of' == t
|
||
? ((m.marked = 'keyword'), cont(expression))
|
||
: cont(maybeoperatorComma, forspec2);
|
||
}
|
||
function forspec2(e, t) {
|
||
return ';' == e
|
||
? cont(forspec3)
|
||
: 'in' == t || 'of' == t
|
||
? ((m.marked = 'keyword'), cont(expression))
|
||
: pass(expression, expect(';'), forspec3);
|
||
}
|
||
function forspec3(e) {
|
||
')' != e && cont(expression);
|
||
}
|
||
function functiondef(e, t) {
|
||
return '*' == t
|
||
? ((m.marked = 'keyword'), cont(functiondef))
|
||
: 'variable' == e
|
||
? (register(t), cont(functiondef))
|
||
: '(' == e
|
||
? cont(
|
||
pushcontext,
|
||
pushlex(')'),
|
||
commasep(funarg, ')'),
|
||
poplex,
|
||
maybetype,
|
||
statement,
|
||
popcontext
|
||
)
|
||
: c && '<' == t
|
||
? cont(
|
||
pushlex('>'),
|
||
commasep(typeexpr, '>'),
|
||
poplex,
|
||
functiondef
|
||
)
|
||
: void 0;
|
||
}
|
||
function funarg(e) {
|
||
return 'spread' == e
|
||
? cont(funarg)
|
||
: pass(pattern, maybetype, maybeAssign);
|
||
}
|
||
function classExpression(e, t) {
|
||
return 'variable' == e ? className(e, t) : classNameAfter(e, t);
|
||
}
|
||
function className(e, t) {
|
||
if ('variable' == e) return register(t), cont(classNameAfter);
|
||
}
|
||
function classNameAfter(e, t) {
|
||
return '<' == t
|
||
? cont(
|
||
pushlex('>'),
|
||
commasep(typeexpr, '>'),
|
||
poplex,
|
||
classNameAfter
|
||
)
|
||
: 'extends' == t || 'implements' == t || (c && ',' == e)
|
||
? cont(c ? typeexpr : expression, classNameAfter)
|
||
: '{' == e ? cont(pushlex('}'), classBody, poplex) : void 0;
|
||
}
|
||
function classBody(e, t) {
|
||
return 'variable' == e || 'keyword' == m.style
|
||
? ('async' == t ||
|
||
'static' == t ||
|
||
'get' == t ||
|
||
'set' == t ||
|
||
(c &&
|
||
('public' == t ||
|
||
'private' == t ||
|
||
'protected' == t ||
|
||
'readonly' == t ||
|
||
'abstract' == t))) &&
|
||
m.stream.match(/^\s+[\w$\xa1-\uffff]/, !1)
|
||
? ((m.marked = 'keyword'), cont(classBody))
|
||
: ((m.marked = 'property'), cont(
|
||
c ? classfield : functiondef,
|
||
classBody
|
||
))
|
||
: '[' == e
|
||
? cont(
|
||
expression,
|
||
expect(']'),
|
||
c ? classfield : functiondef,
|
||
classBody
|
||
)
|
||
: '*' == t
|
||
? ((m.marked = 'keyword'), cont(classBody))
|
||
: ';' == e
|
||
? cont(classBody)
|
||
: '}' == e
|
||
? cont()
|
||
: '@' == t ? cont(expression, classBody) : void 0;
|
||
}
|
||
function classfield(e, t) {
|
||
return '?' == t
|
||
? cont(classfield)
|
||
: ':' == e
|
||
? cont(typeexpr, maybeAssign)
|
||
: '=' == t ? cont(expressionNoComma) : pass(functiondef);
|
||
}
|
||
function afterExport(e, t) {
|
||
return '*' == t
|
||
? ((m.marked = 'keyword'), cont(maybeFrom, expect(';')))
|
||
: 'default' == t
|
||
? ((m.marked = 'keyword'), cont(expression, expect(';')))
|
||
: '{' == e
|
||
? cont(commasep(exportField, '}'), maybeFrom, expect(';'))
|
||
: pass(statement);
|
||
}
|
||
function exportField(e, t) {
|
||
return 'as' == t
|
||
? ((m.marked = 'keyword'), cont(expect('variable')))
|
||
: 'variable' == e ? pass(expressionNoComma, exportField) : void 0;
|
||
}
|
||
function afterImport(e) {
|
||
return 'string' == e
|
||
? cont()
|
||
: pass(importSpec, maybeMoreImports, maybeFrom);
|
||
}
|
||
function importSpec(e, t) {
|
||
return '{' == e
|
||
? contCommasep(importSpec, '}')
|
||
: ('variable' == e && register(t), '*' == t &&
|
||
(m.marked = 'keyword'), cont(maybeAs));
|
||
}
|
||
function maybeMoreImports(e) {
|
||
if (',' == e) return cont(importSpec, maybeMoreImports);
|
||
}
|
||
function maybeAs(e, t) {
|
||
if ('as' == t) return (m.marked = 'keyword'), cont(importSpec);
|
||
}
|
||
function maybeFrom(e, t) {
|
||
if ('from' == t) return (m.marked = 'keyword'), cont(expression);
|
||
}
|
||
function arrayLiteral(e) {
|
||
return ']' == e ? cont() : pass(commasep(expressionNoComma, ']'));
|
||
}
|
||
function isContinuedStatement(e, t) {
|
||
return (
|
||
'operator' == e.lastType ||
|
||
',' == e.lastType ||
|
||
p.test(t.charAt(0)) ||
|
||
/[,.]/.test(t.charAt(0))
|
||
);
|
||
}
|
||
var r,
|
||
i,
|
||
o = t.indentUnit,
|
||
a = n.statementIndent,
|
||
s = n.jsonld,
|
||
l = n.json || s,
|
||
c = n.typescript,
|
||
u = n.wordCharacters || /[\w$\xa1-\uffff]/,
|
||
d = (function() {
|
||
function kw(e) {
|
||
return { type: e, style: 'keyword' };
|
||
}
|
||
var e = kw('keyword a'),
|
||
t = kw('keyword b'),
|
||
n = kw('keyword c'),
|
||
r = kw('operator'),
|
||
i = { type: 'atom', style: 'atom' },
|
||
o = {
|
||
if: kw('if'),
|
||
while: e,
|
||
with: e,
|
||
else: t,
|
||
do: t,
|
||
try: t,
|
||
finally: t,
|
||
return: n,
|
||
break: n,
|
||
continue: n,
|
||
new: kw('new'),
|
||
delete: n,
|
||
throw: n,
|
||
debugger: n,
|
||
var: kw('var'),
|
||
const: kw('var'),
|
||
let: kw('var'),
|
||
function: kw('function'),
|
||
catch: kw('catch'),
|
||
for: kw('for'),
|
||
switch: kw('switch'),
|
||
case: kw('case'),
|
||
default: kw('default'),
|
||
in: r,
|
||
typeof: r,
|
||
instanceof: r,
|
||
true: i,
|
||
false: i,
|
||
null: i,
|
||
undefined: i,
|
||
NaN: i,
|
||
Infinity: i,
|
||
this: kw('this'),
|
||
class: kw('class'),
|
||
super: kw('atom'),
|
||
yield: n,
|
||
export: kw('export'),
|
||
import: kw('import'),
|
||
extends: n,
|
||
await: n,
|
||
async: kw('async')
|
||
};
|
||
if (c) {
|
||
var a = { type: 'variable', style: 'variable-3' },
|
||
s = {
|
||
interface: kw('class'),
|
||
implements: n,
|
||
namespace: n,
|
||
module: kw('module'),
|
||
enum: kw('module'),
|
||
public: kw('modifier'),
|
||
private: kw('modifier'),
|
||
protected: kw('modifier'),
|
||
abstract: kw('modifier'),
|
||
as: r,
|
||
string: a,
|
||
number: a,
|
||
boolean: a,
|
||
any: a
|
||
};
|
||
for (var l in s)
|
||
o[l] = s[l];
|
||
}
|
||
return o;
|
||
})(),
|
||
p = /[+\-*&%=<>!?|~^@]/,
|
||
f = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/,
|
||
h = '([{}])',
|
||
g = {
|
||
atom: !0,
|
||
number: !0,
|
||
variable: !0,
|
||
string: !0,
|
||
regexp: !0,
|
||
this: !0,
|
||
'jsonld-keyword': !0
|
||
},
|
||
m = { state: null, column: null, marked: null, cc: null },
|
||
v = { name: 'this', next: { name: 'arguments' } };
|
||
return (poplex.lex = !0), {
|
||
startState: function(e) {
|
||
var t = {
|
||
tokenize: tokenBase,
|
||
lastType: 'sof',
|
||
cc: [],
|
||
lexical: new JSLexical((e || 0) - o, 0, 'block', !1),
|
||
localVars: n.localVars,
|
||
context: n.localVars && { vars: n.localVars },
|
||
indented: e || 0
|
||
};
|
||
return n.globalVars &&
|
||
'object' == typeof n.globalVars &&
|
||
(t.globalVars = n.globalVars), t;
|
||
},
|
||
token: function(e, t) {
|
||
if (
|
||
(e.sol() &&
|
||
(t.lexical.hasOwnProperty('align') ||
|
||
(t.lexical.align = !1), (t.indented = e.indentation()), findFatArrow(
|
||
e,
|
||
t
|
||
)), t.tokenize != tokenComment && e.eatSpace())
|
||
)
|
||
return null;
|
||
var n = t.tokenize(e, t);
|
||
return 'comment' == r
|
||
? n
|
||
: ((t.lastType = 'operator' != r || ('++' != i && '--' != i)
|
||
? r
|
||
: 'incdec'), parseJS(t, n, r, i, e));
|
||
},
|
||
indent: function(t, r) {
|
||
if (t.tokenize == tokenComment) return e.Pass;
|
||
if (t.tokenize != tokenBase) return 0;
|
||
var i, s = r && r.charAt(0), l = t.lexical;
|
||
if (!/^\s*else\b/.test(r))
|
||
for (var c = t.cc.length - 1; c >= 0; --c) {
|
||
var u = t.cc[c];
|
||
if (u == poplex) l = l.prev;
|
||
else if (u != maybeelse) break;
|
||
}
|
||
for (
|
||
;
|
||
('stat' == l.type || 'form' == l.type) &&
|
||
('}' == s ||
|
||
((i = t.cc[t.cc.length - 1]) &&
|
||
(i == maybeoperatorComma || i == maybeoperatorNoComma) &&
|
||
!/^[,\.=+\-*:?[\(]/.test(r)));
|
||
|
||
)
|
||
l = l.prev;
|
||
a && ')' == l.type && 'stat' == l.prev.type && (l = l.prev);
|
||
var d = l.type, p = s == d;
|
||
return 'vardef' == d
|
||
? l.indented +
|
||
('operator' == t.lastType || ',' == t.lastType
|
||
? l.info + 1
|
||
: 0)
|
||
: 'form' == d && '{' == s
|
||
? l.indented
|
||
: 'form' == d
|
||
? l.indented + o
|
||
: 'stat' == d
|
||
? l.indented +
|
||
(isContinuedStatement(t, r) ? a || o : 0)
|
||
: 'switch' != l.info || p || 0 == n.doubleIndentSwitch
|
||
? l.align
|
||
? l.column + (p ? 0 : 1)
|
||
: l.indented + (p ? 0 : o)
|
||
: l.indented +
|
||
(/^(?:case|default)\b/.test(r) ? o : 2 * o);
|
||
},
|
||
electricInput: /^\s*(?:case .*?:|default:|\{|\})$/,
|
||
blockCommentStart: l ? null : '/*',
|
||
blockCommentEnd: l ? null : '*/',
|
||
lineComment: l ? null : '//',
|
||
fold: 'brace',
|
||
closeBrackets: '()[]{}\'\'""``',
|
||
helperType: l ? 'json' : 'javascript',
|
||
jsonldMode: s,
|
||
jsonMode: l,
|
||
expressionAllowed: expressionAllowed,
|
||
skipExpression: function(e) {
|
||
var t = e.cc[e.cc.length - 1];
|
||
(t != expression && t != expressionNoComma) || e.cc.pop();
|
||
}
|
||
};
|
||
}), e.registerHelper(
|
||
'wordChars',
|
||
'javascript',
|
||
/[\w$]/
|
||
), e.defineMIME('text/javascript', 'javascript'), e.defineMIME('text/ecmascript', 'javascript'), e.defineMIME('application/javascript', 'javascript'), e.defineMIME('application/x-javascript', 'javascript'), e.defineMIME('application/ecmascript', 'javascript'), e.defineMIME('application/json', { name: 'javascript', json: !0 }), e.defineMIME('application/x-json', { name: 'javascript', json: !0 }), e.defineMIME('application/ld+json', { name: 'javascript', jsonld: !0 }), e.defineMIME('text/typescript', { name: 'javascript', typescript: !0 }), e.defineMIME('application/typescript', { name: 'javascript', typescript: !0 });
|
||
});
|
||
},
|
||
1038: function(e, t, n) {
|
||
!(function(e) {
|
||
e(n(1036), n(1039), n(1037));
|
||
})(function(e) {
|
||
'use strict';
|
||
function Context(e, t, n, r) {
|
||
(this.state = e), (this.mode = t), (this.depth = n), (this.prev = r);
|
||
}
|
||
function copyContext(t) {
|
||
return new Context(
|
||
e.copyState(t.mode, t.state),
|
||
t.mode,
|
||
t.depth,
|
||
t.prev && copyContext(t.prev)
|
||
);
|
||
}
|
||
e.defineMode(
|
||
'jsx',
|
||
function(t, n) {
|
||
function flatXMLIndent(e) {
|
||
var t = e.tagName;
|
||
e.tagName = null;
|
||
var n = r.indent(e, '');
|
||
return (e.tagName = t), n;
|
||
}
|
||
function token(e, t) {
|
||
return t.context.mode == r
|
||
? xmlToken(e, t, t.context)
|
||
: jsToken(e, t, t.context);
|
||
}
|
||
function xmlToken(n, o, a) {
|
||
if (2 == a.depth)
|
||
return n.match(/^.*?\*\//)
|
||
? (a.depth = 1)
|
||
: n.skipToEnd(), 'comment';
|
||
if ('{' == n.peek()) {
|
||
r.skipAttribute(a.state);
|
||
var s = flatXMLIndent(a.state), l = a.state.context;
|
||
if (l && n.match(/^[^>]*>\s*$/, !1)) {
|
||
for (; l.prev && !l.startOfLine; )
|
||
l = l.prev;
|
||
l.startOfLine
|
||
? (s -= t.indentUnit)
|
||
: a.prev.state.lexical && (s = a.prev.state.lexical.indented);
|
||
} else 1 == a.depth && (s += t.indentUnit);
|
||
return (o.context = new Context(
|
||
e.startState(i, s),
|
||
i,
|
||
0,
|
||
o.context
|
||
)), null;
|
||
}
|
||
if (1 == a.depth) {
|
||
if ('<' == n.peek())
|
||
return r.skipAttribute(a.state), (o.context = new Context(
|
||
e.startState(r, flatXMLIndent(a.state)),
|
||
r,
|
||
0,
|
||
o.context
|
||
)), null;
|
||
if (n.match('//')) return n.skipToEnd(), 'comment';
|
||
if (n.match('/*')) return (a.depth = 2), token(n, o);
|
||
}
|
||
var c, u = r.token(n, a.state), d = n.current();
|
||
return /\btag\b/.test(u)
|
||
? />$/.test(d)
|
||
? a.state.context
|
||
? (a.depth = 0)
|
||
: (o.context = o.context.prev)
|
||
: /^</.test(d) && (a.depth = 1)
|
||
: !u && (c = d.indexOf('{')) > -1 && n.backUp(d.length - c), u;
|
||
}
|
||
function jsToken(t, n, o) {
|
||
if ('<' == t.peek() && i.expressionAllowed(t, o.state))
|
||
return i.skipExpression(o.state), (n.context = new Context(
|
||
e.startState(r, i.indent(o.state, '')),
|
||
r,
|
||
0,
|
||
n.context
|
||
)), null;
|
||
var a = i.token(t, o.state);
|
||
if (!a && null != o.depth) {
|
||
var s = t.current();
|
||
'{' == s
|
||
? o.depth++
|
||
: '}' == s && 0 == --o.depth && (n.context = n.context.prev);
|
||
}
|
||
return a;
|
||
}
|
||
var r = e.getMode(t, {
|
||
name: 'xml',
|
||
allowMissing: !0,
|
||
multilineTagIndentPastTag: !1
|
||
}),
|
||
i = e.getMode(t, (n && n.base) || 'javascript');
|
||
return {
|
||
startState: function() {
|
||
return { context: new Context(e.startState(i), i) };
|
||
},
|
||
copyState: function(e) {
|
||
return { context: copyContext(e.context) };
|
||
},
|
||
token: token,
|
||
indent: function(e, t, n) {
|
||
return e.context.mode.indent(e.context.state, t, n);
|
||
},
|
||
innerMode: function(e) {
|
||
return e.context;
|
||
}
|
||
};
|
||
},
|
||
'xml',
|
||
'javascript'
|
||
), e.defineMIME('text/jsx', 'jsx'), e.defineMIME('text/typescript-jsx', { name: 'jsx', base: { name: 'javascript', typescript: !0 } });
|
||
});
|
||
},
|
||
1039: function(e, t, n) {
|
||
!(function(e) {
|
||
e(n(1036));
|
||
})(function(e) {
|
||
'use strict';
|
||
var t = {
|
||
autoSelfClosers: {
|
||
area: !0,
|
||
base: !0,
|
||
br: !0,
|
||
col: !0,
|
||
command: !0,
|
||
embed: !0,
|
||
frame: !0,
|
||
hr: !0,
|
||
img: !0,
|
||
input: !0,
|
||
keygen: !0,
|
||
link: !0,
|
||
meta: !0,
|
||
param: !0,
|
||
source: !0,
|
||
track: !0,
|
||
wbr: !0,
|
||
menuitem: !0
|
||
},
|
||
implicitlyClosed: {
|
||
dd: !0,
|
||
li: !0,
|
||
optgroup: !0,
|
||
option: !0,
|
||
p: !0,
|
||
rp: !0,
|
||
rt: !0,
|
||
tbody: !0,
|
||
td: !0,
|
||
tfoot: !0,
|
||
th: !0,
|
||
tr: !0
|
||
},
|
||
contextGrabbers: {
|
||
dd: { dd: !0, dt: !0 },
|
||
dt: { dd: !0, dt: !0 },
|
||
li: { li: !0 },
|
||
option: { option: !0, optgroup: !0 },
|
||
optgroup: { optgroup: !0 },
|
||
p: {
|
||
address: !0,
|
||
article: !0,
|
||
aside: !0,
|
||
blockquote: !0,
|
||
dir: !0,
|
||
div: !0,
|
||
dl: !0,
|
||
fieldset: !0,
|
||
footer: !0,
|
||
form: !0,
|
||
h1: !0,
|
||
h2: !0,
|
||
h3: !0,
|
||
h4: !0,
|
||
h5: !0,
|
||
h6: !0,
|
||
header: !0,
|
||
hgroup: !0,
|
||
hr: !0,
|
||
menu: !0,
|
||
nav: !0,
|
||
ol: !0,
|
||
p: !0,
|
||
pre: !0,
|
||
section: !0,
|
||
table: !0,
|
||
ul: !0
|
||
},
|
||
rp: { rp: !0, rt: !0 },
|
||
rt: { rp: !0, rt: !0 },
|
||
tbody: { tbody: !0, tfoot: !0 },
|
||
td: { td: !0, th: !0 },
|
||
tfoot: { tbody: !0 },
|
||
th: { td: !0, th: !0 },
|
||
thead: { tbody: !0, tfoot: !0 },
|
||
tr: { tr: !0 }
|
||
},
|
||
doNotIndent: { pre: !0 },
|
||
allowUnquoted: !0,
|
||
allowMissing: !0,
|
||
caseFold: !0
|
||
},
|
||
n = {
|
||
autoSelfClosers: {},
|
||
implicitlyClosed: {},
|
||
contextGrabbers: {},
|
||
doNotIndent: {},
|
||
allowUnquoted: !1,
|
||
allowMissing: !1,
|
||
caseFold: !1
|
||
};
|
||
e.defineMode('xml', function(r, i) {
|
||
function inText(e, t) {
|
||
function chain(n) {
|
||
return (t.tokenize = n), n(e, t);
|
||
}
|
||
var n = e.next();
|
||
if ('<' == n)
|
||
return e.eat('!')
|
||
? e.eat('[')
|
||
? e.match('CDATA[') ? chain(inBlock('atom', ']]>')) : null
|
||
: e.match('--')
|
||
? chain(inBlock('comment', '--\x3e'))
|
||
: e.match('DOCTYPE', !0, !0)
|
||
? (e.eatWhile(/[\w\._\-]/), chain(doctype(1)))
|
||
: null
|
||
: e.eat('?')
|
||
? (e.eatWhile(/[\w\._\-]/), (t.tokenize = inBlock(
|
||
'meta',
|
||
'?>'
|
||
)), 'meta')
|
||
: ((c = e.eat('/')
|
||
? 'closeTag'
|
||
: 'openTag'), (t.tokenize = inTag), 'tag bracket');
|
||
if ('&' == n) {
|
||
var r;
|
||
return (r = e.eat('#')
|
||
? e.eat('x')
|
||
? e.eatWhile(/[a-fA-F\d]/) && e.eat(';')
|
||
: e.eatWhile(/[\d]/) && e.eat(';')
|
||
: e.eatWhile(/[\w\.\-:]/) && e.eat(';')), r ? 'atom' : 'error';
|
||
}
|
||
return e.eatWhile(/[^&<]/), null;
|
||
}
|
||
function inTag(e, t) {
|
||
var n = e.next();
|
||
if ('>' == n || ('/' == n && e.eat('>')))
|
||
return (t.tokenize = inText), (c = '>' == n
|
||
? 'endTag'
|
||
: 'selfcloseTag'), 'tag bracket';
|
||
if ('=' == n) return (c = 'equals'), null;
|
||
if ('<' == n) {
|
||
(t.tokenize = inText), (t.state = baseState), (t.tagName = t.tagStart = null);
|
||
var r = t.tokenize(e, t);
|
||
return r ? r + ' tag error' : 'tag error';
|
||
}
|
||
return /[\'\"]/.test(n)
|
||
? ((t.tokenize = inAttribute(
|
||
n
|
||
)), (t.stringStartCol = e.column()), t.tokenize(e, t))
|
||
: (e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/), 'word');
|
||
}
|
||
function inAttribute(e) {
|
||
var t = function(t, n) {
|
||
for (; !t.eol(); )
|
||
if (t.next() == e) {
|
||
n.tokenize = inTag;
|
||
break;
|
||
}
|
||
return 'string';
|
||
};
|
||
return (t.isInAttribute = !0), t;
|
||
}
|
||
function inBlock(e, t) {
|
||
return function(n, r) {
|
||
for (; !n.eol(); ) {
|
||
if (n.match(t)) {
|
||
r.tokenize = inText;
|
||
break;
|
||
}
|
||
n.next();
|
||
}
|
||
return e;
|
||
};
|
||
}
|
||
function doctype(e) {
|
||
return function(t, n) {
|
||
for (var r; null != (r = t.next()); ) {
|
||
if ('<' == r)
|
||
return (n.tokenize = doctype(e + 1)), n.tokenize(t, n);
|
||
if ('>' == r) {
|
||
if (1 == e) {
|
||
n.tokenize = inText;
|
||
break;
|
||
}
|
||
return (n.tokenize = doctype(e - 1)), n.tokenize(t, n);
|
||
}
|
||
}
|
||
return 'meta';
|
||
};
|
||
}
|
||
function Context(e, t, n) {
|
||
(this.prev =
|
||
e.context), (this.tagName = t), (this.indent = e.indented), (this.startOfLine = n), (a.doNotIndent.hasOwnProperty(t) || (e.context && e.context.noIndent)) && (this.noIndent = !0);
|
||
}
|
||
function popContext(e) {
|
||
e.context && (e.context = e.context.prev);
|
||
}
|
||
function maybePopContext(e, t) {
|
||
for (var n; ; ) {
|
||
if (!e.context) return;
|
||
if (
|
||
((n = e.context.tagName), !a.contextGrabbers.hasOwnProperty(n) ||
|
||
!a.contextGrabbers[n].hasOwnProperty(t))
|
||
)
|
||
return;
|
||
popContext(e);
|
||
}
|
||
}
|
||
function baseState(e, t, n) {
|
||
return 'openTag' == e
|
||
? ((n.tagStart = t.column()), tagNameState)
|
||
: 'closeTag' == e ? closeTagNameState : baseState;
|
||
}
|
||
function tagNameState(e, t, n) {
|
||
return 'word' == e
|
||
? ((n.tagName = t.current()), (u = 'tag'), attrState)
|
||
: ((u = 'error'), tagNameState);
|
||
}
|
||
function closeTagNameState(e, t, n) {
|
||
if ('word' == e) {
|
||
var r = t.current();
|
||
return n.context &&
|
||
n.context.tagName != r &&
|
||
a.implicitlyClosed.hasOwnProperty(n.context.tagName) &&
|
||
popContext(n), (n.context && n.context.tagName == r) ||
|
||
!1 === a.matchClosing
|
||
? ((u = 'tag'), closeState)
|
||
: ((u = 'tag error'), closeStateErr);
|
||
}
|
||
return (u = 'error'), closeStateErr;
|
||
}
|
||
function closeState(e, t, n) {
|
||
return 'endTag' != e
|
||
? ((u = 'error'), closeState)
|
||
: (popContext(n), baseState);
|
||
}
|
||
function closeStateErr(e, t, n) {
|
||
return (u = 'error'), closeState(e, t, n);
|
||
}
|
||
function attrState(e, t, n) {
|
||
if ('word' == e) return (u = 'attribute'), attrEqState;
|
||
if ('endTag' == e || 'selfcloseTag' == e) {
|
||
var r = n.tagName, i = n.tagStart;
|
||
return (n.tagName = n.tagStart = null), 'selfcloseTag' == e ||
|
||
a.autoSelfClosers.hasOwnProperty(r)
|
||
? maybePopContext(n, r)
|
||
: (maybePopContext(n, r), (n.context = new Context(
|
||
n,
|
||
r,
|
||
i == n.indented
|
||
))), baseState;
|
||
}
|
||
return (u = 'error'), attrState;
|
||
}
|
||
function attrEqState(e, t, n) {
|
||
return 'equals' == e
|
||
? attrValueState
|
||
: (a.allowMissing || (u = 'error'), attrState(e, t, n));
|
||
}
|
||
function attrValueState(e, t, n) {
|
||
return 'string' == e
|
||
? attrContinuedState
|
||
: 'word' == e && a.allowUnquoted
|
||
? ((u = 'string'), attrState)
|
||
: ((u = 'error'), attrState(e, t, n));
|
||
}
|
||
function attrContinuedState(e, t, n) {
|
||
return 'string' == e ? attrContinuedState : attrState(e, t, n);
|
||
}
|
||
var o = r.indentUnit, a = {}, s = i.htmlMode ? t : n;
|
||
for (var l in s) a[l] = s[l];
|
||
for (var l in i) a[l] = i[l];
|
||
var c, u;
|
||
return (inText.isInText = !0), {
|
||
startState: function(e) {
|
||
var t = {
|
||
tokenize: inText,
|
||
state: baseState,
|
||
indented: e || 0,
|
||
tagName: null,
|
||
tagStart: null,
|
||
context: null
|
||
};
|
||
return null != e && (t.baseIndent = e), t;
|
||
},
|
||
token: function(e, t) {
|
||
if (
|
||
(!t.tagName &&
|
||
e.sol() &&
|
||
(t.indented = e.indentation()), e.eatSpace())
|
||
)
|
||
return null;
|
||
c = null;
|
||
var n = t.tokenize(e, t);
|
||
return (n || c) &&
|
||
'comment' != n &&
|
||
((u = null), (t.state = t.state(c || n, e, t)), u &&
|
||
(n = 'error' == u ? n + ' error' : u)), n;
|
||
},
|
||
indent: function(t, n, r) {
|
||
var i = t.context;
|
||
if (t.tokenize.isInAttribute)
|
||
return t.tagStart == t.indented
|
||
? t.stringStartCol + 1
|
||
: t.indented + o;
|
||
if (i && i.noIndent) return e.Pass;
|
||
if (t.tokenize != inTag && t.tokenize != inText)
|
||
return r ? r.match(/^(\s*)/)[0].length : 0;
|
||
if (t.tagName)
|
||
return !1 !== a.multilineTagIndentPastTag
|
||
? t.tagStart + t.tagName.length + 2
|
||
: t.tagStart + o * (a.multilineTagIndentFactor || 1);
|
||
if (a.alignCDATA && /<!\[CDATA\[/.test(n)) return 0;
|
||
var s = n && /^<(\/)?([\w_:\.-]*)/.exec(n);
|
||
if (s && s[1])
|
||
for (; i; ) {
|
||
if (i.tagName == s[2]) {
|
||
i = i.prev;
|
||
break;
|
||
}
|
||
if (!a.implicitlyClosed.hasOwnProperty(i.tagName)) break;
|
||
i = i.prev;
|
||
}
|
||
else if (s)
|
||
for (; i; ) {
|
||
var l = a.contextGrabbers[i.tagName];
|
||
if (!l || !l.hasOwnProperty(s[2])) break;
|
||
i = i.prev;
|
||
}
|
||
for (; i && i.prev && !i.startOfLine; )
|
||
i = i.prev;
|
||
return i ? i.indent + o : t.baseIndent || 0;
|
||
},
|
||
electricInput: /<\/[\s\w:]+>$/,
|
||
blockCommentStart: '\x3c!--',
|
||
blockCommentEnd: '--\x3e',
|
||
configuration: a.htmlMode ? 'html' : 'xml',
|
||
helperType: a.htmlMode ? 'html' : 'xml',
|
||
skipAttribute: function(e) {
|
||
e.state == attrValueState && (e.state = attrState);
|
||
}
|
||
};
|
||
}), e.defineMIME(
|
||
'text/xml',
|
||
'xml'
|
||
), e.defineMIME('application/xml', 'xml'), e.mimeModes.hasOwnProperty('text/html') || e.defineMIME('text/html', { name: 'xml', htmlMode: !0 });
|
||
});
|
||
},
|
||
1040: function(e, t, n) {
|
||
(function(t) {
|
||
function debounce(e, t, r) {
|
||
function invokeFunc(t) {
|
||
var n = i, r = o;
|
||
return (i = o = void 0), (u = t), (s = e.apply(r, n));
|
||
}
|
||
function leadingEdge(e) {
|
||
return (u = e), (l = setTimeout(timerExpired, t)), d
|
||
? invokeFunc(e)
|
||
: s;
|
||
}
|
||
function remainingWait(e) {
|
||
var n = e - c, r = e - u, i = t - n;
|
||
return p ? m(i, a - r) : i;
|
||
}
|
||
function shouldInvoke(e) {
|
||
var n = e - c, r = e - u;
|
||
return void 0 === c || n >= t || n < 0 || (p && r >= a);
|
||
}
|
||
function timerExpired() {
|
||
var e = v();
|
||
if (shouldInvoke(e)) return trailingEdge(e);
|
||
l = setTimeout(timerExpired, remainingWait(e));
|
||
}
|
||
function trailingEdge(e) {
|
||
return (l = void 0), f && i ? invokeFunc(e) : ((i = o = void 0), s);
|
||
}
|
||
function cancel() {
|
||
void 0 !== l && clearTimeout(l), (u = 0), (i = c = o = l = void 0);
|
||
}
|
||
function flush() {
|
||
return void 0 === l ? s : trailingEdge(v());
|
||
}
|
||
function debounced() {
|
||
var e = v(), n = shouldInvoke(e);
|
||
if (((i = arguments), (o = this), (c = e), n)) {
|
||
if (void 0 === l) return leadingEdge(c);
|
||
if (p) return (l = setTimeout(timerExpired, t)), invokeFunc(c);
|
||
}
|
||
return void 0 === l && (l = setTimeout(timerExpired, t)), s;
|
||
}
|
||
var i, o, a, s, l, c, u = 0, d = !1, p = !1, f = !0;
|
||
if ('function' != typeof e) throw new TypeError(n);
|
||
return (t = toNumber(t) || 0), isObject(r) &&
|
||
((d = !!r.leading), (p = 'maxWait' in r), (a = p
|
||
? g(toNumber(r.maxWait) || 0, t)
|
||
: a), (f = 'trailing' in r
|
||
? !!r.trailing
|
||
: f)), (debounced.cancel = cancel), (debounced.flush = flush), debounced;
|
||
}
|
||
function isObject(e) {
|
||
var t = typeof e;
|
||
return !!e && ('object' == t || 'function' == t);
|
||
}
|
||
function isObjectLike(e) {
|
||
return !!e && 'object' == typeof e;
|
||
}
|
||
function isSymbol(e) {
|
||
return 'symbol' == typeof e || (isObjectLike(e) && h.call(e) == i);
|
||
}
|
||
function toNumber(e) {
|
||
if ('number' == typeof e) return e;
|
||
if (isSymbol(e)) return r;
|
||
if (isObject(e)) {
|
||
var t = 'function' == typeof e.valueOf ? e.valueOf() : e;
|
||
e = isObject(t) ? t + '' : t;
|
||
}
|
||
if ('string' != typeof e) return 0 === e ? e : +e;
|
||
e = e.replace(o, '');
|
||
var n = s.test(e);
|
||
return n || l.test(e) ? c(e.slice(2), n ? 2 : 8) : a.test(e) ? r : +e;
|
||
}
|
||
var n = 'Expected a function',
|
||
r = NaN,
|
||
i = '[object Symbol]',
|
||
o = /^\s+|\s+$/g,
|
||
a = /^[-+]0x[0-9a-f]+$/i,
|
||
s = /^0b[01]+$/i,
|
||
l = /^0o[0-7]+$/i,
|
||
c = parseInt,
|
||
u = 'object' == typeof t && t && t.Object === Object && t,
|
||
d = 'object' == typeof self && self && self.Object === Object && self,
|
||
p = u || d || Function('return this')(),
|
||
f = Object.prototype,
|
||
h = f.toString,
|
||
g = Math.max,
|
||
m = Math.min,
|
||
v = function() {
|
||
return p.Date.now();
|
||
};
|
||
e.exports = debounce;
|
||
}.call(t, n(16)));
|
||
},
|
||
1041: function(e, t, n) {
|
||
'use strict';
|
||
function normalizeLineEndings(e) {
|
||
return e ? e.replace(/\r\n|\r/g, '\n') : e;
|
||
}
|
||
var r = n(0),
|
||
i = n(194),
|
||
o = i.findDOMNode,
|
||
a = n(37),
|
||
s = n(1040),
|
||
l = r.createClass({
|
||
displayName: 'CodeMirror',
|
||
propTypes: {
|
||
className: r.PropTypes.any,
|
||
codeMirrorInstance: r.PropTypes.func,
|
||
defaultValue: r.PropTypes.string,
|
||
onChange: r.PropTypes.func,
|
||
onFocusChange: r.PropTypes.func,
|
||
onScroll: r.PropTypes.func,
|
||
options: r.PropTypes.object,
|
||
path: r.PropTypes.string,
|
||
value: r.PropTypes.string,
|
||
preserveScrollPosition: r.PropTypes.bool
|
||
},
|
||
getDefaultProps: function getDefaultProps() {
|
||
return { preserveScrollPosition: !1 };
|
||
},
|
||
getCodeMirrorInstance: function getCodeMirrorInstance() {
|
||
return this.props.codeMirrorInstance || n(1036);
|
||
},
|
||
getInitialState: function getInitialState() {
|
||
return { isFocused: !1 };
|
||
},
|
||
componentWillMount: function componentWillMount() {
|
||
this.componentWillReceiveProps = s(this.componentWillReceiveProps, 0);
|
||
},
|
||
componentDidMount: function componentDidMount() {
|
||
var e = o(this.refs.textarea), t = this.getCodeMirrorInstance();
|
||
(this.codeMirror = t.fromTextArea(
|
||
e,
|
||
this.props.options
|
||
)), this.codeMirror.on(
|
||
'change',
|
||
this.codemirrorValueChanged
|
||
), this.codeMirror.on(
|
||
'focus',
|
||
this.focusChanged.bind(this, !0)
|
||
), this.codeMirror.on(
|
||
'blur',
|
||
this.focusChanged.bind(this, !1)
|
||
), this.codeMirror.on(
|
||
'scroll',
|
||
this.scrollChanged
|
||
), this.codeMirror.setValue(
|
||
this.props.defaultValue || this.props.value || ''
|
||
);
|
||
},
|
||
componentWillUnmount: function componentWillUnmount() {
|
||
this.codeMirror && this.codeMirror.toTextArea();
|
||
},
|
||
componentWillReceiveProps: function componentWillReceiveProps(e) {
|
||
if (
|
||
this.codeMirror &&
|
||
void 0 !== e.value &&
|
||
normalizeLineEndings(this.codeMirror.getValue()) !==
|
||
normalizeLineEndings(e.value)
|
||
)
|
||
if (this.props.preserveScrollPosition) {
|
||
var t = this.codeMirror.getScrollInfo();
|
||
this.codeMirror.setValue(e.value), this.codeMirror.scrollTo(
|
||
t.left,
|
||
t.top
|
||
);
|
||
} else this.codeMirror.setValue(e.value);
|
||
if ('object' == typeof e.options)
|
||
for (var n in e.options)
|
||
e.options.hasOwnProperty(n) &&
|
||
this.codeMirror.setOption(n, e.options[n]);
|
||
},
|
||
getCodeMirror: function getCodeMirror() {
|
||
return this.codeMirror;
|
||
},
|
||
focus: function focus() {
|
||
this.codeMirror && this.codeMirror.focus();
|
||
},
|
||
focusChanged: function focusChanged(e) {
|
||
this.setState({ isFocused: e }), this.props.onFocusChange &&
|
||
this.props.onFocusChange(e);
|
||
},
|
||
scrollChanged: function scrollChanged(e) {
|
||
this.props.onScroll && this.props.onScroll(e.getScrollInfo());
|
||
},
|
||
codemirrorValueChanged: function codemirrorValueChanged(e, t) {
|
||
this.props.onChange &&
|
||
'setValue' !== t.origin &&
|
||
this.props.onChange(e.getValue(), t);
|
||
},
|
||
render: function render() {
|
||
var e = a(
|
||
'ReactCodeMirror',
|
||
this.state.isFocused ? 'ReactCodeMirror--focused' : null,
|
||
this.props.className
|
||
);
|
||
return r.createElement(
|
||
'div',
|
||
{ className: e },
|
||
r.createElement('textarea', {
|
||
ref: 'textarea',
|
||
name: this.props.path,
|
||
defaultValue: this.props.value,
|
||
autoComplete: 'off'
|
||
})
|
||
);
|
||
}
|
||
});
|
||
e.exports = l;
|
||
},
|
||
1042: function(e, t, n) {
|
||
(t = e.exports = n(330)(void 0)), t.push([
|
||
e.i,
|
||
"/* BASICS */\n\n.CodeMirror {\n /* Set height, width, borders, and global font properties here */\n font-family: monospace;\n height: 300px;\n color: black;\n}\n\n/* PADDING */\n\n.CodeMirror-lines {\n padding: 4px 0; /* Vertical padding around content */\n}\n.CodeMirror pre {\n padding: 0 4px; /* Horizontal padding of content */\n}\n\n.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n background-color: white; /* The little square between H and V scrollbars */\n}\n\n/* GUTTER */\n\n.CodeMirror-gutters {\n border-right: 1px solid #ddd;\n background-color: #f7f7f7;\n white-space: nowrap;\n}\n.CodeMirror-linenumbers {}\n.CodeMirror-linenumber {\n padding: 0 3px 0 5px;\n min-width: 20px;\n text-align: right;\n color: #999;\n white-space: nowrap;\n}\n\n.CodeMirror-guttermarker { color: black; }\n.CodeMirror-guttermarker-subtle { color: #999; }\n\n/* CURSOR */\n\n.CodeMirror-cursor {\n border-left: 1px solid black;\n border-right: none;\n width: 0;\n}\n/* Shown when moving in bi-directional text */\n.CodeMirror div.CodeMirror-secondarycursor {\n border-left: 1px solid silver;\n}\n.cm-fat-cursor .CodeMirror-cursor {\n width: auto;\n border: 0 !important;\n background: #7e7;\n}\n.cm-fat-cursor div.CodeMirror-cursors {\n z-index: 1;\n}\n\n.cm-animate-fat-cursor {\n width: auto;\n border: 0;\n -webkit-animation: blink 1.06s steps(1) infinite;\n -moz-animation: blink 1.06s steps(1) infinite;\n animation: blink 1.06s steps(1) infinite;\n background-color: #7e7;\n}\n@-moz-keyframes blink {\n 0% {}\n 50% { background-color: transparent; }\n 100% {}\n}\n@-webkit-keyframes blink {\n 0% {}\n 50% { background-color: transparent; }\n 100% {}\n}\n@keyframes blink {\n 0% {}\n 50% { background-color: transparent; }\n 100% {}\n}\n\n/* Can style cursor different in overwrite (non-insert) mode */\n.CodeMirror-overwrite .CodeMirror-cursor {}\n\n.cm-tab { display: inline-block; text-decoration: inherit; }\n\n.CodeMirror-rulers {\n position: absolute;\n left: 0; right: 0; top: -50px; bottom: -20px;\n overflow: hidden;\n}\n.CodeMirror-ruler {\n border-left: 1px solid #ccc;\n top: 0; bottom: 0;\n position: absolute;\n}\n\n/* DEFAULT THEME */\n\n.cm-s-default .cm-header {color: blue;}\n.cm-s-default .cm-quote {color: #090;}\n.cm-negative {color: #d44;}\n.cm-positive {color: #292;}\n.cm-header, .cm-strong {font-weight: bold;}\n.cm-em {font-style: italic;}\n.cm-link {text-decoration: underline;}\n.cm-strikethrough {text-decoration: line-through;}\n\n.cm-s-default .cm-keyword {color: #708;}\n.cm-s-default .cm-atom {color: #219;}\n.cm-s-default .cm-number {color: #164;}\n.cm-s-default .cm-def {color: #00f;}\n.cm-s-default .cm-variable,\n.cm-s-default .cm-punctuation,\n.cm-s-default .cm-property,\n.cm-s-default .cm-operator {}\n.cm-s-default .cm-variable-2 {color: #05a;}\n.cm-s-default .cm-variable-3 {color: #085;}\n.cm-s-default .cm-comment {color: #a50;}\n.cm-s-default .cm-string {color: #a11;}\n.cm-s-default .cm-string-2 {color: #f50;}\n.cm-s-default .cm-meta {color: #555;}\n.cm-s-default .cm-qualifier {color: #555;}\n.cm-s-default .cm-builtin {color: #30a;}\n.cm-s-default .cm-bracket {color: #997;}\n.cm-s-default .cm-tag {color: #170;}\n.cm-s-default .cm-attribute {color: #00c;}\n.cm-s-default .cm-hr {color: #999;}\n.cm-s-default .cm-link {color: #00c;}\n\n.cm-s-default .cm-error {color: #f00;}\n.cm-invalidchar {color: #f00;}\n\n.CodeMirror-composing { border-bottom: 2px solid; }\n\n/* Default styles for common addons */\n\ndiv.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}\n.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }\n.CodeMirror-activeline-background {background: #e8f2ff;}\n\n/* STOP */\n\n/* The rest of this file contains styles related to the mechanics of\n the editor. You probably shouldn't touch them. */\n\n.CodeMirror {\n position: relative;\n overflow: hidden;\n background: white;\n}\n\n.CodeMirror-scroll {\n overflow: scroll !important; /* Things will break if this is overridden */\n /* 30px is the magic margin used to hide the element's real scrollbars */\n /* See overflow: hidden in .CodeMirror */\n margin-bottom: -30px; margin-right: -30px;\n padding-bottom: 30px;\n height: 100%;\n outline: none; /* Prevent dragging from highlighting the element */\n position: relative;\n}\n.CodeMirror-sizer {\n position: relative;\n border-right: 30px solid transparent;\n}\n\n/* The fake, visible scrollbars. Used to force redraw during scrolling\n before actual scrolling happens, thus preventing shaking and\n flickering artifacts. */\n.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n position: absolute;\n z-index: 6;\n display: none;\n}\n.CodeMirror-vscrollbar {\n right: 0; top: 0;\n overflow-x: hidden;\n overflow-y: scroll;\n}\n.CodeMirror-hscrollbar {\n bottom: 0; left: 0;\n overflow-y: hidden;\n overflow-x: scroll;\n}\n.CodeMirror-scrollbar-filler {\n right: 0; bottom: 0;\n}\n.CodeMirror-gutter-filler {\n left: 0; bottom: 0;\n}\n\n.CodeMirror-gutters {\n position: absolute; left: 0; top: 0;\n min-height: 100%;\n z-index: 3;\n}\n.CodeMirror-gutter {\n white-space: normal;\n height: 100%;\n display: inline-block;\n vertical-align: top;\n margin-bottom: -30px;\n}\n.CodeMirror-gutter-wrapper {\n position: absolute;\n z-index: 4;\n background: none !important;\n border: none !important;\n}\n.CodeMirror-gutter-background {\n position: absolute;\n top: 0; bottom: 0;\n z-index: 4;\n}\n.CodeMirror-gutter-elt {\n position: absolute;\n cursor: default;\n z-index: 4;\n}\n.CodeMirror-gutter-wrapper ::selection { background-color: transparent }\n.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }\n\n.CodeMirror-lines {\n cursor: text;\n min-height: 1px; /* prevents collapsing before first draw */\n}\n.CodeMirror pre {\n /* Reset some styles that the rest of the page might have set */\n -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;\n border-width: 0;\n background: transparent;\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n white-space: pre;\n word-wrap: normal;\n line-height: inherit;\n color: inherit;\n z-index: 2;\n position: relative;\n overflow: visible;\n -webkit-tap-highlight-color: transparent;\n -webkit-font-variant-ligatures: contextual;\n font-variant-ligatures: contextual;\n}\n.CodeMirror-wrap pre {\n word-wrap: break-word;\n white-space: pre-wrap;\n word-break: normal;\n}\n\n.CodeMirror-linebackground {\n position: absolute;\n left: 0; right: 0; top: 0; bottom: 0;\n z-index: 0;\n}\n\n.CodeMirror-linewidget {\n position: relative;\n z-index: 2;\n overflow: auto;\n}\n\n.CodeMirror-widget {}\n\n.CodeMirror-rtl pre { direction: rtl; }\n\n.CodeMirror-code {\n outline: none;\n}\n\n/* Force content-box sizing for the elements where we expect it */\n.CodeMirror-scroll,\n.CodeMirror-sizer,\n.CodeMirror-gutter,\n.CodeMirror-gutters,\n.CodeMirror-linenumber {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n}\n\n.CodeMirror-measure {\n position: absolute;\n width: 100%;\n height: 0;\n overflow: hidden;\n visibility: hidden;\n}\n\n.CodeMirror-cursor {\n position: absolute;\n pointer-events: none;\n}\n.CodeMirror-measure pre { position: static; }\n\ndiv.CodeMirror-cursors {\n visibility: hidden;\n position: relative;\n z-index: 3;\n}\ndiv.CodeMirror-dragcursors {\n visibility: visible;\n}\n\n.CodeMirror-focused div.CodeMirror-cursors {\n visibility: visible;\n}\n\n.CodeMirror-selected { background: #d9d9d9; }\n.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }\n.CodeMirror-crosshair { cursor: crosshair; }\n.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }\n.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }\n\n.cm-searching {\n background: #ffa;\n background: rgba(255, 255, 0, .4);\n}\n\n/* Used to force a border model for a node */\n.cm-force-border { padding-right: .1px; }\n\n@media print {\n /* Hide the cursor when printing */\n .CodeMirror div.CodeMirror-cursors {\n visibility: hidden;\n }\n}\n\n/* See issue #2901 */\n.cm-tab-wrap-hack:after { content: ''; }\n\n/* Help users use markselection to safely style text background */\nspan.CodeMirror-selectedtext { background: none; }\n",
|
||
''
|
||
]);
|
||
},
|
||
1043: function(e, t, n) {
|
||
(t = e.exports = n(330)(void 0)), t.push([
|
||
e.i,
|
||
'/*\n\n Name: Base16 Default Light\n Author: Chris Kempson (http://chriskempson.com)\n\n CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)\n Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)\n\n*/\n\n.cm-s-base16-light.CodeMirror { background: #f5f5f5; color: #202020; }\n.cm-s-base16-light div.CodeMirror-selected { background: #e0e0e0; }\n.cm-s-base16-light .CodeMirror-line::selection, .cm-s-base16-light .CodeMirror-line > span::selection, .cm-s-base16-light .CodeMirror-line > span > span::selection { background: #e0e0e0; }\n.cm-s-base16-light .CodeMirror-line::-moz-selection, .cm-s-base16-light .CodeMirror-line > span::-moz-selection, .cm-s-base16-light .CodeMirror-line > span > span::-moz-selection { background: #e0e0e0; }\n.cm-s-base16-light .CodeMirror-gutters { background: #f5f5f5; border-right: 0px; }\n.cm-s-base16-light .CodeMirror-guttermarker { color: #ac4142; }\n.cm-s-base16-light .CodeMirror-guttermarker-subtle { color: #b0b0b0; }\n.cm-s-base16-light .CodeMirror-linenumber { color: #b0b0b0; }\n.cm-s-base16-light .CodeMirror-cursor { border-left: 1px solid #505050; }\n\n.cm-s-base16-light span.cm-comment { color: #8f5536; }\n.cm-s-base16-light span.cm-atom { color: #aa759f; }\n.cm-s-base16-light span.cm-number { color: #aa759f; }\n\n.cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute { color: #90a959; }\n.cm-s-base16-light span.cm-keyword { color: #ac4142; }\n.cm-s-base16-light span.cm-string { color: #f4bf75; }\n\n.cm-s-base16-light span.cm-variable { color: #90a959; }\n.cm-s-base16-light span.cm-variable-2 { color: #6a9fb5; }\n.cm-s-base16-light span.cm-def { color: #d28445; }\n.cm-s-base16-light span.cm-bracket { color: #202020; }\n.cm-s-base16-light span.cm-tag { color: #ac4142; }\n.cm-s-base16-light span.cm-link { color: #aa759f; }\n.cm-s-base16-light span.cm-error { background: #ac4142; color: #505050; }\n\n.cm-s-base16-light .CodeMirror-activeline-background { background: #DDDCDC; }\n.cm-s-base16-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n',
|
||
''
|
||
]);
|
||
},
|
||
1044: function(e, t, n) {
|
||
var r = n(1042);
|
||
'string' == typeof r && (r = [[e.i, r, '']]);
|
||
var i = {};
|
||
i.transform = void 0;
|
||
n(331)(r, i);
|
||
r.locals && (e.exports = r.locals);
|
||
},
|
||
1045: function(e, t, n) {
|
||
var r = n(1043);
|
||
'string' == typeof r && (r = [[e.i, r, '']]);
|
||
var i = {};
|
||
i.transform = void 0;
|
||
n(331)(r, i);
|
||
r.locals && (e.exports = r.locals);
|
||
},
|
||
333: function(e, t, n) {
|
||
'use strict';
|
||
function _interopRequireDefault(e) {
|
||
return e && e.__esModule ? e : { default: e };
|
||
}
|
||
function _classCallCheck(e, t) {
|
||
if (!(e instanceof t))
|
||
throw new TypeError('Cannot call a class as a function');
|
||
}
|
||
function _possibleConstructorReturn(e, t) {
|
||
if (!e)
|
||
throw new ReferenceError(
|
||
"this hasn't been initialised - super() hasn't been called"
|
||
);
|
||
return !t || ('object' != typeof t && 'function' != typeof t) ? e : t;
|
||
}
|
||
function _inherits(e, t) {
|
||
if ('function' != typeof t && null !== t)
|
||
throw new TypeError(
|
||
'Super expression must either be null or a function, not ' + typeof t
|
||
);
|
||
(e.prototype = Object.create(t && t.prototype, {
|
||
constructor: {
|
||
value: e,
|
||
enumerable: !1,
|
||
writable: !0,
|
||
configurable: !0
|
||
}
|
||
})), t &&
|
||
(Object.setPrototypeOf
|
||
? Object.setPrototypeOf(e, t)
|
||
: (e.__proto__ = t));
|
||
}
|
||
Object.defineProperty(t, '__esModule', { value: !0 });
|
||
var r =
|
||
Object.assign ||
|
||
function(e) {
|
||
for (var t = 1; t < arguments.length; t++) {
|
||
var n = arguments[t];
|
||
for (var r in n)
|
||
Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]);
|
||
}
|
||
return e;
|
||
},
|
||
i = (function() {
|
||
function defineProperties(e, t) {
|
||
for (var n = 0; n < t.length; n++) {
|
||
var r = t[n];
|
||
(r.enumerable =
|
||
r.enumerable || !1), (r.configurable = !0), 'value' in r &&
|
||
(r.writable = !0), Object.defineProperty(e, r.key, r);
|
||
}
|
||
}
|
||
return function(e, t, n) {
|
||
return t && defineProperties(e.prototype, t), n &&
|
||
defineProperties(e, n), e;
|
||
};
|
||
})(),
|
||
o = n(0),
|
||
a = _interopRequireDefault(o),
|
||
s = n(1),
|
||
l = _interopRequireDefault(s),
|
||
c = n(332),
|
||
u = _interopRequireDefault(c),
|
||
d = n(1041),
|
||
p = _interopRequireDefault(d);
|
||
n(1038), n(1044), n(1045);
|
||
var f = {
|
||
mode: 'jsx',
|
||
lineNumbers: !1,
|
||
lineWrapping: !0,
|
||
smartIndent: !1,
|
||
matchBrackets: !0,
|
||
viewportMargin: 1 / 0
|
||
},
|
||
h = 10,
|
||
g = (function(e) {
|
||
function Editor() {
|
||
_classCallCheck(this, Editor);
|
||
var e = _possibleConstructorReturn(
|
||
this,
|
||
(Editor.__proto__ || Object.getPrototypeOf(Editor)).call(this)
|
||
);
|
||
return (e.handleChange = (0, u.default)(
|
||
e.handleChange.bind(e),
|
||
h
|
||
)), e;
|
||
}
|
||
return _inherits(Editor, e), i(Editor, [
|
||
{
|
||
key: 'shouldComponentUpdate',
|
||
value: function shouldComponentUpdate() {
|
||
return !1;
|
||
}
|
||
},
|
||
{
|
||
key: 'handleChange',
|
||
value: function handleChange(e) {
|
||
this.props.onChange(e);
|
||
}
|
||
},
|
||
{
|
||
key: 'render',
|
||
value: function render() {
|
||
var e = this.props.code,
|
||
t = this.context.config.highlightTheme,
|
||
n = r({}, f, { theme: t });
|
||
return a.default.createElement(p.default, {
|
||
value: e,
|
||
onChange: this.handleChange,
|
||
options: n
|
||
});
|
||
}
|
||
}
|
||
]), Editor;
|
||
})(o.Component);
|
||
(g.propTypes = {
|
||
code: l.default.string.isRequired,
|
||
onChange: l.default.func.isRequired
|
||
}), (g.contextTypes = {
|
||
config: l.default.object.isRequired
|
||
}), (t.default = g);
|
||
}
|
||
});
|