import { __commonJSMin, __toESM, getHot } from "./hot-D67q3Up2.js"; import { Fragment, computed, createBaseVNode, createBlock, createCommentVNode, createElementBlock, createTextVNode, createVNode, customRef, defineComponent, getCurrentInstance, h, inject, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, openBlock, provide, ref, renderList, renderSlot, resolveComponent, resolveDynamicComponent, toDisplayString, toRefs, toValue, unref, useSlots, useTemplateRef, watch, watchEffect, withAsyncContext, withCtx, withDirectives } from "./runtime-core.esm-bundler-Cyv4obHQ.js"; import { useRoute, useRouter, vShow } from "./vue-router-BxYGFXy-.js"; import { guessMode, inspectSourcemaps, isStaticMode, onModuleUpdated, rpc, safeJsonParse, tryOnScopeDispose, usePayloadStore } from "./payload-BX9lTMvN.js"; import "./_plugin-vue_export-helper-DfavQbjy.js"; import { Badge_default, Container_default, NavBar_default, PluginName_default, QuerySelector_default } from "./QuerySelector-iLRAQoow.js"; import { DurationDisplay_default, useOptionsStore } from "./options-D_MMddT_.js"; import { ModuleId_default, ModuleList_default, kt } from "./ModuleList-ByxGSHde.js"; const Pe = { __name: "splitpanes", props: { horizontal: { type: Boolean, default: !1 }, pushOtherPanes: { type: Boolean, default: !0 }, maximizePanes: { type: Boolean, default: !0 }, rtl: { type: Boolean, default: !1 }, firstSplitter: { type: Boolean, default: !1 } }, emits: [ "ready", "resize", "resized", "pane-click", "pane-maximize", "pane-add", "pane-remove", "splitter-click", "splitter-dblclick" ], setup(D, { emit: h$1 }) { const y = h$1, u = D, E = useSlots(), l = ref([]), M = computed(() => l.value.reduce((e, n) => (e[~~n.id] = n) && e, {})), m = computed(() => l.value.length), x = ref(null), S = ref(!1), c = ref({ mouseDown: !1, dragging: !1, activeSplitter: null, cursorOffset: 0 }), f = ref({ splitter: null, timeoutId: null }), _ = computed(() => ({ [`splitpanes splitpanes--${u.horizontal ? "horizontal" : "vertical"}`]: !0, "splitpanes--dragging": c.value.dragging })), R = () => { document.addEventListener("mousemove", r, { passive: !1 }), document.addEventListener("mouseup", P), "ontouchstart" in window && (document.addEventListener("touchmove", r, { passive: !1 }), document.addEventListener("touchend", P)); }, O = () => { document.removeEventListener("mousemove", r, { passive: !1 }), document.removeEventListener("mouseup", P), "ontouchstart" in window && (document.removeEventListener("touchmove", r, { passive: !1 }), document.removeEventListener("touchend", P)); }, b = (e, n) => { const t = e.target.closest(".splitpanes__splitter"); if (t) { const { left: i, top: a } = t.getBoundingClientRect(), { clientX: s, clientY: o } = "ontouchstart" in window && e.touches ? e.touches[0] : e; c.value.cursorOffset = u.horizontal ? o - a : s - i; } R(), c.value.mouseDown = !0, c.value.activeSplitter = n; }, r = (e) => { c.value.mouseDown && (e.preventDefault(), c.value.dragging = !0, requestAnimationFrame(() => { K(I(e)), d("resize", { event: e }, !0); })); }, P = (e) => { c.value.dragging && (window.getSelection().removeAllRanges(), d("resized", { event: e }, !0)), c.value.mouseDown = !1, c.value.activeSplitter = null, setTimeout(() => { c.value.dragging = !1, O(); }, 100); }, A = (e, n) => { "ontouchstart" in window && (e.preventDefault(), f.value.splitter === n ? (clearTimeout(f.value.timeoutId), f.value.timeoutId = null, U(e, n), f.value.splitter = null) : (f.value.splitter = n, f.value.timeoutId = setTimeout(() => f.value.splitter = null, 500))), c.value.dragging || d("splitter-click", { event: e, index: n }, !0); }, U = (e, n) => { if (d("splitter-dblclick", { event: e, index: n }, !0), u.maximizePanes) { let t = 0; l.value = l.value.map((i, a) => (i.size = a === n ? i.max : i.min, a !== n && (t += i.min), i)), l.value[n].size -= t, d("pane-maximize", { event: e, index: n, pane: l.value[n] }), d("resized", { event: e, index: n }, !0); } }, W = (e, n) => { d("pane-click", { event: e, index: M.value[n].index, pane: M.value[n] }); }, I = (e) => { const n = x.value.getBoundingClientRect(), { clientX: t, clientY: i } = "ontouchstart" in window && e.touches ? e.touches[0] : e; return { x: t - (u.horizontal ? 0 : c.value.cursorOffset) - n.left, y: i - (u.horizontal ? c.value.cursorOffset : 0) - n.top }; }, J = (e) => { e = e[u.horizontal ? "y" : "x"]; const n = x.value[u.horizontal ? "clientHeight" : "clientWidth"]; return u.rtl && !u.horizontal && (e = n - e), e * 100 / n; }, K = (e) => { const n = c.value.activeSplitter; let t = { prevPanesSize: $(n), nextPanesSize: N(n), prevReachedMinPanes: 0, nextReachedMinPanes: 0 }; const i = 0 + (u.pushOtherPanes ? 0 : t.prevPanesSize), a = 100 - (u.pushOtherPanes ? 0 : t.nextPanesSize), s = Math.max(Math.min(J(e), a), i); let o = [n, n + 1], v = l.value[o[0]] || null, p = l.value[o[1]] || null; const H = v.max < 100 && s >= v.max + t.prevPanesSize, ue = p.max < 100 && s <= 100 - (p.max + N(n + 1)); if (H || ue) { H ? (v.size = v.max, p.size = Math.max(100 - v.max - t.prevPanesSize - t.nextPanesSize, 0)) : (v.size = Math.max(100 - p.max - t.prevPanesSize - N(n + 1), 0), p.size = p.max); return; } if (u.pushOtherPanes) { const j = Q(t, s); if (!j) return; ({sums: t, panesToResize: o} = j), v = l.value[o[0]] || null, p = l.value[o[1]] || null; } v !== null && (v.size = Math.min(Math.max(s - t.prevPanesSize - t.prevReachedMinPanes, v.min), v.max)), p !== null && (p.size = Math.min(Math.max(100 - s - t.nextPanesSize - t.nextReachedMinPanes, p.min), p.max)); }, Q = (e, n) => { const t = c.value.activeSplitter, i = [t, t + 1]; return n < e.prevPanesSize + l.value[i[0]].min && (i[0] = V(t).index, e.prevReachedMinPanes = 0, i[0] < t && l.value.forEach((a, s) => { s > i[0] && s <= t && (a.size = a.min, e.prevReachedMinPanes += a.min); }), e.prevPanesSize = $(i[0]), i[0] === void 0) ? (e.prevReachedMinPanes = 0, l.value[0].size = l.value[0].min, l.value.forEach((a, s) => { s > 0 && s <= t && (a.size = a.min, e.prevReachedMinPanes += a.min); }), l.value[i[1]].size = 100 - e.prevReachedMinPanes - l.value[0].min - e.prevPanesSize - e.nextPanesSize, null) : n > 100 - e.nextPanesSize - l.value[i[1]].min && (i[1] = Z(t).index, e.nextReachedMinPanes = 0, i[1] > t + 1 && l.value.forEach((a, s) => { s > t && s < i[1] && (a.size = a.min, e.nextReachedMinPanes += a.min); }), e.nextPanesSize = N(i[1] - 1), i[1] === void 0) ? (e.nextReachedMinPanes = 0, l.value.forEach((a, s) => { s < m.value - 1 && s >= t + 1 && (a.size = a.min, e.nextReachedMinPanes += a.min); }), l.value[i[0]].size = 100 - e.prevPanesSize - N(i[0] - 1), null) : { sums: e, panesToResize: i }; }, $ = (e) => l.value.reduce((n, t, i) => n + (i < e ? t.size : 0), 0), N = (e) => l.value.reduce((n, t, i) => n + (i > e + 1 ? t.size : 0), 0), V = (e) => [...l.value].reverse().find((t) => t.index < e && t.size > t.min) || {}, Z = (e) => l.value.find((t) => t.index > e + 1 && t.size > t.min) || {}, ee = () => { var n; const e = Array.from(((n = x.value) == null ? void 0 : n.children) || []); for (const t of e) { const i = t.classList.contains("splitpanes__pane"), a = t.classList.contains("splitpanes__splitter"); !i && !a && (t.remove(), console.warn("Splitpanes: Only elements are allowed at the root of . One of your DOM nodes was removed.")); } }, F = (e, n, t = !1) => { const i = e - 1, a = document.createElement("div"); a.classList.add("splitpanes__splitter"), t || (a.onmousedown = (s) => b(s, i), typeof window < "u" && "ontouchstart" in window && (a.ontouchstart = (s) => b(s, i)), a.onclick = (s) => A(s, i + 1)), a.ondblclick = (s) => U(s, i + 1), n.parentNode.insertBefore(a, n); }, ne = (e) => { e.onmousedown = void 0, e.onclick = void 0, e.ondblclick = void 0, e.remove(); }, C = () => { var t; const e = Array.from(((t = x.value) == null ? void 0 : t.children) || []); for (const i of e) i.className.includes("splitpanes__splitter") && ne(i); let n = 0; for (const i of e) i.className.includes("splitpanes__pane") && (!n && u.firstSplitter ? F(n, i, !0) : n && F(n, i), n++); }, ie = ({ uid: e,...n }) => { const t = M.value[e]; for (const [i, a] of Object.entries(n)) t[i] = a; }, te = (e) => { var t; let n = -1; Array.from(((t = x.value) == null ? void 0 : t.children) || []).some((i) => (i.className.includes("splitpanes__pane") && n++, i.isSameNode(e.el))), l.value.splice(n, 0, { ...e, index: n }), l.value.forEach((i, a) => i.index = a), S.value && nextTick(() => { C(), L({ addedPane: l.value[n] }), d("pane-add", { pane: l.value[n] }); }); }, ae = (e) => { const n = l.value.findIndex((i) => i.id === e); l.value[n].el = null; const t = l.value.splice(n, 1)[0]; l.value.forEach((i, a) => i.index = a), nextTick(() => { C(), d("pane-remove", { pane: t }), L({ removedPane: { ...t } }); }); }, L = (e = {}) => { !e.addedPane && !e.removedPane ? le() : l.value.some((n) => n.givenSize !== null || n.min || n.max < 100) ? oe(e) : se(), S.value && d("resized"); }, se = () => { const e = 100 / m.value; let n = 0; const t = [], i = []; for (const a of l.value) a.size = Math.max(Math.min(e, a.max), a.min), n -= a.size, a.size >= a.max && t.push(a.id), a.size <= a.min && i.push(a.id); n > .1 && q(n, t, i); }, le = () => { let e = 100; const n = [], t = []; let i = 0; for (const s of l.value) e -= s.size, s.givenSize !== null && i++, s.size >= s.max && n.push(s.id), s.size <= s.min && t.push(s.id); let a = 100; if (e > .1) { for (const s of l.value) s.givenSize === null && (s.size = Math.max(Math.min(e / (m.value - i), s.max), s.min)), a -= s.size; a > .1 && q(a, n, t); } }, oe = ({ addedPane: e, removedPane: n } = {}) => { let t = 100 / m.value, i = 0; const a = [], s = []; ((e == null ? void 0 : e.givenSize) ?? null) !== null && (t = (100 - e.givenSize) / (m.value - 1)); for (const o of l.value) i -= o.size, o.size >= o.max && a.push(o.id), o.size <= o.min && s.push(o.id); if (!(Math.abs(i) < .1)) { for (const o of l.value) (e == null ? void 0 : e.givenSize) !== null && (e == null ? void 0 : e.id) === o.id || (o.size = Math.max(Math.min(t, o.max), o.min)), i -= o.size, o.size >= o.max && a.push(o.id), o.size <= o.min && s.push(o.id); i > .1 && q(i, a, s); } }, q = (e, n, t) => { let i; e > 0 ? i = e / (m.value - n.length) : i = e / (m.value - t.length), l.value.forEach((a, s) => { if (e > 0 && !n.includes(a.id)) { const o = Math.max(Math.min(a.size + i, a.max), a.min), v = o - a.size; e -= v, a.size = o; } else if (!t.includes(a.id)) { const o = Math.max(Math.min(a.size + i, a.max), a.min), v = o - a.size; e -= v, a.size = o; } }), Math.abs(e) > .1 && nextTick(() => { S.value && console.warn("Splitpanes: Could not resize panes correctly due to their constraints."); }); }, d = (e, n = void 0, t = !1) => { const i = (n == null ? void 0 : n.index) ?? c.value.activeSplitter ?? null; y(e, { ...n, ...i !== null && { index: i }, ...t && i !== null && { prevPane: l.value[i - (u.firstSplitter ? 1 : 0)], nextPane: l.value[i + (u.firstSplitter ? 0 : 1)] }, panes: l.value.map((a) => ({ min: a.min, max: a.max, size: a.size })) }); }; watch(() => u.firstSplitter, () => C()), onMounted(() => { ee(), C(), L(), d("ready"), S.value = !0; }), onBeforeUnmount(() => S.value = !1); const re = () => { var e; return h("div", { ref: x, class: _.value }, (e = E.default) == null ? void 0 : e.call(E)); }; return provide("panes", l), provide("indexedPanes", M), provide("horizontal", computed(() => u.horizontal)), provide("requestUpdate", ie), provide("onPaneAdd", te), provide("onPaneRemove", ae), provide("onPaneClick", W), (e, n) => (openBlock(), createBlock(resolveDynamicComponent(re))); } }, ge = { __name: "pane", props: { size: { type: [Number, String] }, minSize: { type: [Number, String], default: 0 }, maxSize: { type: [Number, String], default: 100 } }, setup(D) { var b; const h$1 = D, y = inject("requestUpdate"), u = inject("onPaneAdd"), E = inject("horizontal"), l = inject("onPaneRemove"), M = inject("onPaneClick"), m = (b = getCurrentInstance()) == null ? void 0 : b.uid, x = inject("indexedPanes"), S = computed(() => x.value[m]), c = ref(null), f = computed(() => { const r = isNaN(h$1.size) || h$1.size === void 0 ? 0 : parseFloat(h$1.size); return Math.max(Math.min(r, R.value), _.value); }), _ = computed(() => { const r = parseFloat(h$1.minSize); return isNaN(r) ? 0 : r; }), R = computed(() => { const r = parseFloat(h$1.maxSize); return isNaN(r) ? 100 : r; }), O = computed(() => { var r; return `${E.value ? "height" : "width"}: ${(r = S.value) == null ? void 0 : r.size}%`; }); return watch(() => f.value, (r) => y({ uid: m, size: r })), watch(() => _.value, (r) => y({ uid: m, min: r })), watch(() => R.value, (r) => y({ uid: m, max: r })), onMounted(() => { u({ id: m, el: c.value, min: _.value, max: R.value, givenSize: h$1.size === void 0 ? null : f.value, size: f.value }); }), onBeforeUnmount(() => l(m)), (r, P) => (openBlock(), createElementBlock("div", { ref_key: "paneEl", ref: c, class: "splitpanes__pane", onClick: P[0] || (P[0] = (A) => unref(M)(A, r._.uid)), style: normalizeStyle(O.value) }, [renderSlot(r.$slots, "default")], 4)); } }; var require_codemirror = __commonJSMin((exports, module) => { (function(global, factory) { typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global = global || self, global.CodeMirror = factory()); })(exports, function() { "use strict"; var userAgent = navigator.userAgent; var platform = navigator.platform; var gecko = /gecko\/\d/i.test(userAgent); var ie_upto10 = /MSIE \d/.test(userAgent); var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent); var edge = /Edge\/(\d+)/.exec(userAgent); var ie = ie_upto10 || ie_11up || edge; var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]); var webkit = !edge && /WebKit\//.test(userAgent); var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); var chrome = !edge && /Chrome\/(\d+)/.exec(userAgent); var chrome_version = chrome && +chrome[1]; var presto = /Opera\//.test(userAgent); var safari = /Apple Computer/.test(navigator.vendor); var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); var phantom = /PhantomJS/.test(userAgent); var ios = safari && (/Mobile\/\w+/.test(userAgent) || navigator.maxTouchPoints > 2); var android = /Android/.test(userAgent); var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent); var mac = ios || /Mac/.test(platform); var chromeOS = /\bCrOS\b/.test(userAgent); var windows = /win/i.test(platform); var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/); if (presto_version) presto_version = Number(presto_version[1]); if (presto_version && presto_version >= 15) { presto = false; webkit = true; } var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); var captureRightClick = gecko || ie && ie_version >= 9; function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); } var rmClass = function(node, cls) { var current = node.className; var match = classTest(cls).exec(current); if (match) { var after = current.slice(match.index + match[0].length); node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); } }; function removeChildren(e) { for (var count = e.childNodes.length; count > 0; --count) e.removeChild(e.firstChild); return e; } function removeChildrenAndAdd(parent, e) { return removeChildren(parent).appendChild(e); } function elt(tag, content, className, style) { var e = document.createElement(tag); if (className) e.className = className; if (style) e.style.cssText = style; if (typeof content == "string") e.appendChild(document.createTextNode(content)); else if (content) for (var i$3 = 0; i$3 < content.length; ++i$3) e.appendChild(content[i$3]); return e; } function eltP(tag, content, className, style) { var e = elt(tag, content, className, style); e.setAttribute("role", "presentation"); return e; } var range; if (document.createRange) range = function(node, start, end, endNode) { var r = document.createRange(); r.setEnd(endNode || node, end); r.setStart(node, start); return r; }; else range = function(node, start, end) { var r = document.body.createTextRange(); try { r.moveToElementText(node.parentNode); } catch (e) { return r; } r.collapse(true); r.moveEnd("character", end); r.moveStart("character", start); return r; }; function contains(parent, child) { if (child.nodeType == 3) child = child.parentNode; if (parent.contains) return parent.contains(child); do { if (child.nodeType == 11) child = child.host; if (child == parent) return true; } while (child = child.parentNode); } function activeElt(rootNode$1) { var doc$1 = rootNode$1.ownerDocument || rootNode$1; var activeElement; try { activeElement = rootNode$1.activeElement; } catch (e) { activeElement = doc$1.body || null; } while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) activeElement = activeElement.shadowRoot.activeElement; return activeElement; } function addClass(node, cls) { var current = node.className; if (!classTest(cls).test(current)) node.className += (current ? " " : "") + cls; } function joinClasses(a, b) { var as = a.split(" "); for (var i$3 = 0; i$3 < as.length; i$3++) if (as[i$3] && !classTest(as[i$3]).test(b)) b += " " + as[i$3]; return b; } var selectInput = function(node) { node.select(); }; if (ios) selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; else if (ie) selectInput = function(node) { try { node.select(); } catch (_e) {} }; function doc(cm) { return cm.display.wrapper.ownerDocument; } function root(cm) { return rootNode(cm.display.wrapper); } function rootNode(element) { return element.getRootNode ? element.getRootNode() : element.ownerDocument; } function win(cm) { return doc(cm).defaultView; } function bind(f) { var args = Array.prototype.slice.call(arguments, 1); return function() { return f.apply(null, args); }; } function copyObj(obj, target, overwrite) { if (!target) target = {}; for (var prop$1 in obj) if (obj.hasOwnProperty(prop$1) && (overwrite !== false || !target.hasOwnProperty(prop$1))) target[prop$1] = obj[prop$1]; return target; } function countColumn(string, end, tabSize, startIndex, startValue) { if (end == null) { end = string.search(/[^\s\u00a0]/); if (end == -1) end = string.length; } for (var i$3 = startIndex || 0, n = startValue || 0;;) { var nextTab = string.indexOf(" ", i$3); if (nextTab < 0 || nextTab >= end) return n + (end - i$3); n += nextTab - i$3; n += tabSize - n % tabSize; i$3 = nextTab + 1; } } var Delayed = function() { this.id = null; this.f = null; this.time = 0; this.handler = bind(this.onTimeout, this); }; Delayed.prototype.onTimeout = function(self$1) { self$1.id = 0; if (self$1.time <= +new Date()) self$1.f(); else setTimeout(self$1.handler, self$1.time - +new Date()); }; Delayed.prototype.set = function(ms, f) { this.f = f; var time = +new Date() + ms; if (!this.id || time < this.time) { clearTimeout(this.id); this.id = setTimeout(this.handler, ms); this.time = time; } }; function indexOf(array, elt$1) { for (var i$3 = 0; i$3 < array.length; ++i$3) if (array[i$3] == elt$1) return i$3; return -1; } var scrollerGap = 50; var Pass = { toString: function() { return "CodeMirror.Pass"; } }; var sel_dontScroll = { scroll: false }, sel_mouse = { origin: "*mouse" }, sel_move = { origin: "+move" }; function findColumn(string, goal, tabSize) { for (var pos = 0, col = 0;;) { var nextTab = string.indexOf(" ", pos); if (nextTab == -1) nextTab = string.length; var skipped = nextTab - pos; if (nextTab == string.length || col + skipped >= goal) return pos + Math.min(skipped, goal - col); col += nextTab - pos; col += tabSize - col % tabSize; pos = nextTab + 1; if (col >= goal) return pos; } } var spaceStrs = [""]; function spaceStr(n) { while (spaceStrs.length <= n) spaceStrs.push(lst(spaceStrs) + " "); return spaceStrs[n]; } function lst(arr) { return arr[arr.length - 1]; } function map(array, f) { var out = []; for (var i$3 = 0; i$3 < array.length; i$3++) out[i$3] = f(array[i$3], i$3); return out; } function insertSorted(array, value, score) { var pos = 0, priority = score(value); while (pos < array.length && score(array[pos]) <= priority) pos++; array.splice(pos, 0, value); } function nothing() {} function createObj(base, props) { var inst; if (Object.create) inst = Object.create(base); else { nothing.prototype = base; inst = new nothing(); } if (props) copyObj(props, inst); return inst; } var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; function isWordCharBasic(ch) { return /\w/.test(ch) || ch > "€" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); } function isWordChar(ch, helper) { if (!helper) return isWordCharBasic(ch); if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) return true; return helper.test(ch); } function isEmpty(obj) { for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false; return true; } var extendingChars = /[\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]/; function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); } function skipExtendingChars(str, pos, dir) { while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) pos += dir; return pos; } function findFirst(pred, from, to) { var dir = from > to ? -1 : 1; for (;;) { if (from == to) return from; var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF); if (mid == from) return pred(mid) ? from : to; if (pred(mid)) to = mid; else from = mid + dir; } } function iterateBidiSections(order, from, to, f) { if (!order) return f(from, to, "ltr", 0); var found = false; for (var i$3 = 0; i$3 < order.length; ++i$3) { var part = order[i$3]; if (part.from < to && part.to > from || from == to && part.to == from) { f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i$3); found = true; } } if (!found) f(from, to, "ltr"); } var bidiOther = null; function getBidiPartAt(order, ch, sticky) { var found; bidiOther = null; for (var i$3 = 0; i$3 < order.length; ++i$3) { var cur = order[i$3]; if (cur.from < ch && cur.to > ch) return i$3; if (cur.to == ch) if (cur.from != cur.to && sticky == "before") found = i$3; else bidiOther = i$3; if (cur.from == ch) if (cur.from != cur.to && sticky != "before") found = i$3; else bidiOther = i$3; } return found != null ? found : bidiOther; } var bidiOrdering = function() { var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111"; function charType(code) { if (code <= 247) return lowTypes.charAt(code); else if (1424 <= code && code <= 1524) return "R"; else if (1536 <= code && code <= 1785) return arabicTypes.charAt(code - 1536); else if (1774 <= code && code <= 2220) return "r"; else if (8192 <= code && code <= 8203) return "w"; else if (code == 8204) return "b"; else return "L"; } var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; function BidiSpan(level, from, to) { this.level = level; this.from = from; this.to = to; } return function(str, direction) { var outerType = direction == "ltr" ? "L" : "R"; if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) return false; var len = str.length, types = []; for (var i$3 = 0; i$3 < len; ++i$3) types.push(charType(str.charCodeAt(i$3))); for (var i$1$1 = 0, prev = outerType; i$1$1 < len; ++i$1$1) { var type = types[i$1$1]; if (type == "m") types[i$1$1] = prev; else prev = type; } for (var i$2$1 = 0, cur = outerType; i$2$1 < len; ++i$2$1) { var type$1 = types[i$2$1]; if (type$1 == "1" && cur == "r") types[i$2$1] = "n"; else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") types[i$2$1] = "R"; } } for (var i$3$1 = 1, prev$1 = types[0]; i$3$1 < len - 1; ++i$3$1) { var type$2 = types[i$3$1]; if (type$2 == "+" && prev$1 == "1" && types[i$3$1 + 1] == "1") types[i$3$1] = "1"; else if (type$2 == "," && prev$1 == types[i$3$1 + 1] && (prev$1 == "1" || prev$1 == "n")) types[i$3$1] = prev$1; prev$1 = type$2; } for (var i$4 = 0; i$4 < len; ++i$4) { var type$3 = types[i$4]; if (type$3 == ",") types[i$4] = "N"; else if (type$3 == "%") { var end = void 0; for (end = i$4 + 1; end < len && types[end] == "%"; ++end); var replace = i$4 && types[i$4 - 1] == "!" || end < len && types[end] == "1" ? "1" : "N"; for (var j = i$4; j < end; ++j) types[j] = replace; i$4 = end - 1; } } for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) { var type$4 = types[i$5]; if (cur$1 == "L" && type$4 == "1") types[i$5] = "L"; else if (isStrong.test(type$4)) cur$1 = type$4; } for (var i$6 = 0; i$6 < len; ++i$6) if (isNeutral.test(types[i$6])) { var end$1 = void 0; for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1); var before = (i$6 ? types[i$6 - 1] : outerType) == "L"; var after = (end$1 < len ? types[end$1] : outerType) == "L"; var replace$1 = before == after ? before ? "L" : "R" : outerType; for (var j$1 = i$6; j$1 < end$1; ++j$1) types[j$1] = replace$1; i$6 = end$1 - 1; } var order = [], m; for (var i$7 = 0; i$7 < len;) if (countsAsLeft.test(types[i$7])) { var start = i$7; for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7); order.push(new BidiSpan(0, start, i$7)); } else { var pos = i$7, at = order.length, isRTL = direction == "rtl" ? 1 : 0; for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7); for (var j$2 = pos; j$2 < i$7;) if (countsAsNum.test(types[j$2])) { if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; } var nstart = j$2; for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2); order.splice(at, 0, new BidiSpan(2, nstart, j$2)); at += isRTL; pos = j$2; } else ++j$2; if (pos < i$7) order.splice(at, 0, new BidiSpan(1, pos, i$7)); } if (direction == "ltr") { if (order[0].level == 1 && (m = str.match(/^\s+/))) { order[0].from = m[0].length; order.unshift(new BidiSpan(0, 0, m[0].length)); } if (lst(order).level == 1 && (m = str.match(/\s+$/))) { lst(order).to -= m[0].length; order.push(new BidiSpan(0, len - m[0].length, len)); } } return direction == "rtl" ? order.reverse() : order; }; }(); function getOrder(line, direction) { var order = line.order; if (order == null) order = line.order = bidiOrdering(line.text, direction); return order; } var noHandlers = []; var on = function(emitter, type, f) { if (emitter.addEventListener) emitter.addEventListener(type, f, false); else if (emitter.attachEvent) emitter.attachEvent("on" + type, f); else { var map$1 = emitter._handlers || (emitter._handlers = {}); map$1[type] = (map$1[type] || noHandlers).concat(f); } }; function getHandlers(emitter, type) { return emitter._handlers && emitter._handlers[type] || noHandlers; } function off(emitter, type, f) { if (emitter.removeEventListener) emitter.removeEventListener(type, f, false); else if (emitter.detachEvent) emitter.detachEvent("on" + type, f); else { var map$1 = emitter._handlers, arr = map$1 && map$1[type]; if (arr) { var index = indexOf(arr, f); if (index > -1) map$1[type] = arr.slice(0, index).concat(arr.slice(index + 1)); } } } function signal(emitter, type) { var handlers = getHandlers(emitter, type); if (!handlers.length) return; var args = Array.prototype.slice.call(arguments, 2); for (var i$3 = 0; i$3 < handlers.length; ++i$3) handlers[i$3].apply(null, args); } function signalDOMEvent(cm, e, override) { if (typeof e == "string") e = { type: e, preventDefault: function() { this.defaultPrevented = true; } }; signal(cm, override || e.type, cm, e); return e_defaultPrevented(e) || e.codemirrorIgnore; } function signalCursorActivity(cm) { var arr = cm._handlers && cm._handlers.cursorActivity; if (!arr) return; var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); for (var i$3 = 0; i$3 < arr.length; ++i$3) if (indexOf(set, arr[i$3]) == -1) set.push(arr[i$3]); } function hasHandler(emitter, type) { return getHandlers(emitter, type).length > 0; } function eventMixin(ctor) { ctor.prototype.on = function(type, f) { on(this, type, f); }; ctor.prototype.off = function(type, f) { off(this, type, f); }; } function e_preventDefault(e) { if (e.preventDefault) e.preventDefault(); else e.returnValue = false; } function e_stopPropagation(e) { if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true; } function e_defaultPrevented(e) { return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; } function e_stop(e) { e_preventDefault(e); e_stopPropagation(e); } function e_target(e) { return e.target || e.srcElement; } function e_button(e) { var b = e.which; if (b == null) { if (e.button & 1) b = 1; else if (e.button & 2) b = 3; else if (e.button & 4) b = 2; } if (mac && e.ctrlKey && b == 1) b = 3; return b; } var dragAndDrop = function() { if (ie && ie_version < 9) return false; var div = elt("div"); return "draggable" in div || "dragDrop" in div; }(); var zwspSupported; function zeroWidthElement(measure) { if (zwspSupported == null) { var test = elt("span", "​"); removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); if (measure.firstChild.offsetHeight != 0) zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); } var node = zwspSupported ? elt("span", "​") : elt("span", "\xA0", null, "display: inline-block; width: 1px; margin-right: -1px"); node.setAttribute("cm-text", ""); return node; } var badBidiRects; function hasBadBidiRects(measure) { if (badBidiRects != null) return badBidiRects; var txt = removeChildrenAndAdd(measure, document.createTextNode("AخA")); var r0 = range(txt, 0, 1).getBoundingClientRect(); var r1 = range(txt, 1, 2).getBoundingClientRect(); removeChildren(measure); if (!r0 || r0.left == r0.right) return false; return badBidiRects = r1.right - r0.right < 3; } var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function(string) { var pos = 0, result = [], l = string.length; while (pos <= l) { var nl = string.indexOf("\n", pos); if (nl == -1) nl = string.length; var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); var rt = line.indexOf("\r"); if (rt != -1) { result.push(line.slice(0, rt)); pos += rt + 1; } else { result.push(line); pos = nl + 1; } } return result; } : function(string) { return string.split(/\r\n?|\n/); }; var hasSelection = window.getSelection ? function(te) { try { return te.selectionStart != te.selectionEnd; } catch (e) { return false; } } : function(te) { var range$1; try { range$1 = te.ownerDocument.selection.createRange(); } catch (e) {} if (!range$1 || range$1.parentElement() != te) return false; return range$1.compareEndPoints("StartToEnd", range$1) != 0; }; var hasCopyEvent = function() { var e = elt("div"); if ("oncopy" in e) return true; e.setAttribute("oncopy", "return;"); return typeof e.oncopy == "function"; }(); var badZoomedRects = null; function hasBadZoomedRects(measure) { if (badZoomedRects != null) return badZoomedRects; var node = removeChildrenAndAdd(measure, elt("span", "x")); var normal = node.getBoundingClientRect(); var fromRange = range(node, 0, 1).getBoundingClientRect(); return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1; } var modes = {}, mimeModes = {}; function defineMode(name, mode) { if (arguments.length > 2) mode.dependencies = Array.prototype.slice.call(arguments, 2); modes[name] = mode; } function defineMIME(mime, spec) { mimeModes[mime] = spec; } function resolveMode(spec) { if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) spec = mimeModes[spec]; else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { var found = mimeModes[spec.name]; if (typeof found == "string") found = { name: found }; spec = createObj(found, spec); spec.name = found.name; } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) return resolveMode("application/xml"); else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) return resolveMode("application/json"); if (typeof spec == "string") return { name: spec }; else return spec || { name: "null" }; } function getMode(options, spec) { spec = resolveMode(spec); var mfactory = modes[spec.name]; if (!mfactory) return getMode(options, "text/plain"); var modeObj = mfactory(options, spec); if (modeExtensions.hasOwnProperty(spec.name)) { var exts = modeExtensions[spec.name]; for (var prop$1 in exts) { if (!exts.hasOwnProperty(prop$1)) continue; if (modeObj.hasOwnProperty(prop$1)) modeObj["_" + prop$1] = modeObj[prop$1]; modeObj[prop$1] = exts[prop$1]; } } modeObj.name = spec.name; if (spec.helperType) modeObj.helperType = spec.helperType; if (spec.modeProps) for (var prop$1$1 in spec.modeProps) modeObj[prop$1$1] = spec.modeProps[prop$1$1]; return modeObj; } var modeExtensions = {}; function extendMode(mode, properties) { var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : modeExtensions[mode] = {}; copyObj(properties, exts); } function copyState(mode, state) { if (state === true) return state; if (mode.copyState) return mode.copyState(state); var nstate = {}; for (var n in state) { var val = state[n]; if (val instanceof Array) val = val.concat([]); nstate[n] = val; } return nstate; } function innerMode(mode, state) { var info; while (mode.innerMode) { info = mode.innerMode(state); if (!info || info.mode == mode) break; state = info.state; mode = info.mode; } return info || { mode, state }; } function startState(mode, a1, a2) { return mode.startState ? mode.startState(a1, a2) : true; } var StringStream = function(string, tabSize, lineOracle) { this.pos = this.start = 0; this.string = string; this.tabSize = tabSize || 8; this.lastColumnPos = this.lastColumnValue = 0; this.lineStart = 0; this.lineOracle = lineOracle; }; StringStream.prototype.eol = function() { return this.pos >= this.string.length; }; StringStream.prototype.sol = function() { return this.pos == this.lineStart; }; StringStream.prototype.peek = function() { return this.string.charAt(this.pos) || void 0; }; StringStream.prototype.next = function() { if (this.pos < this.string.length) return this.string.charAt(this.pos++); }; StringStream.prototype.eat = function(match) { var ch = this.string.charAt(this.pos); var ok; if (typeof match == "string") ok = ch == match; else ok = ch && (match.test ? match.test(ch) : match(ch)); if (ok) { ++this.pos; return ch; } }; StringStream.prototype.eatWhile = function(match) { var start = this.pos; while (this.eat(match)); return this.pos > start; }; StringStream.prototype.eatSpace = function() { var start = this.pos; while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; return this.pos > start; }; StringStream.prototype.skipToEnd = function() { this.pos = this.string.length; }; StringStream.prototype.skipTo = function(ch) { var found = this.string.indexOf(ch, this.pos); if (found > -1) { this.pos = found; return true; } }; StringStream.prototype.backUp = function(n) { this.pos -= n; }; StringStream.prototype.column = function() { if (this.lastColumnPos < this.start) { this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); this.lastColumnPos = this.start; } return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); }; StringStream.prototype.indentation = function() { return countColumn(this.string, null, this.tabSize) - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); }; StringStream.prototype.match = function(pattern, consume, caseInsensitive) { if (typeof pattern == "string") { var cased = function(str) { return caseInsensitive ? str.toLowerCase() : str; }; var substr = this.string.substr(this.pos, pattern.length); if (cased(substr) == cased(pattern)) { if (consume !== false) this.pos += pattern.length; return true; } } else { var match = this.string.slice(this.pos).match(pattern); if (match && match.index > 0) return null; if (match && consume !== false) this.pos += match[0].length; return match; } }; StringStream.prototype.current = function() { return this.string.slice(this.start, this.pos); }; StringStream.prototype.hideFirstChars = function(n, inner) { this.lineStart += n; try { return inner(); } finally { this.lineStart -= n; } }; StringStream.prototype.lookAhead = function(n) { var oracle = this.lineOracle; return oracle && oracle.lookAhead(n); }; StringStream.prototype.baseToken = function() { var oracle = this.lineOracle; return oracle && oracle.baseToken(this.pos); }; function getLine(doc$1, n) { n -= doc$1.first; if (n < 0 || n >= doc$1.size) throw new Error("There is no line " + (n + doc$1.first) + " in the document."); var chunk = doc$1; while (!chunk.lines) for (var i$3 = 0;; ++i$3) { var child = chunk.children[i$3], sz = child.chunkSize(); if (n < sz) { chunk = child; break; } n -= sz; } return chunk.lines[n]; } function getBetween(doc$1, start, end) { var out = [], n = start.line; doc$1.iter(start.line, end.line + 1, function(line) { var text = line.text; if (n == end.line) text = text.slice(0, end.ch); if (n == start.line) text = text.slice(start.ch); out.push(text); ++n; }); return out; } function getLines(doc$1, from, to) { var out = []; doc$1.iter(from, to, function(line) { out.push(line.text); }); return out; } function updateLineHeight(line, height) { var diff = height - line.height; if (diff) for (var n = line; n; n = n.parent) n.height += diff; } function lineNo(line) { if (line.parent == null) return null; var cur = line.parent, no = indexOf(cur.lines, line); for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) for (var i$3 = 0;; ++i$3) { if (chunk.children[i$3] == cur) break; no += chunk.children[i$3].chunkSize(); } return no + cur.first; } function lineAtHeight(chunk, h$1) { var n = chunk.first; outer: do { for (var i$1$1 = 0; i$1$1 < chunk.children.length; ++i$1$1) { var child = chunk.children[i$1$1], ch = child.height; if (h$1 < ch) { chunk = child; continue outer; } h$1 -= ch; n += child.chunkSize(); } return n; } while (!chunk.lines); var i$3 = 0; for (; i$3 < chunk.lines.length; ++i$3) { var line = chunk.lines[i$3], lh = line.height; if (h$1 < lh) break; h$1 -= lh; } return n + i$3; } function isLine(doc$1, l) { return l >= doc$1.first && l < doc$1.first + doc$1.size; } function lineNumberFor(options, i$3) { return String(options.lineNumberFormatter(i$3 + options.firstLineNumber)); } function Pos(line, ch, sticky) { if (sticky === void 0) sticky = null; if (!(this instanceof Pos)) return new Pos(line, ch, sticky); this.line = line; this.ch = ch; this.sticky = sticky; } function cmp(a, b) { return a.line - b.line || a.ch - b.ch; } function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0; } function copyPos(x) { return Pos(x.line, x.ch); } function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; } function minPos(a, b) { return cmp(a, b) < 0 ? a : b; } function clipLine(doc$1, n) { return Math.max(doc$1.first, Math.min(n, doc$1.first + doc$1.size - 1)); } function clipPos(doc$1, pos) { if (pos.line < doc$1.first) return Pos(doc$1.first, 0); var last = doc$1.first + doc$1.size - 1; if (pos.line > last) return Pos(last, getLine(doc$1, last).text.length); return clipToLen(pos, getLine(doc$1, pos.line).text.length); } function clipToLen(pos, linelen) { var ch = pos.ch; if (ch == null || ch > linelen) return Pos(pos.line, linelen); else if (ch < 0) return Pos(pos.line, 0); else return pos; } function clipPosArray(doc$1, array) { var out = []; for (var i$3 = 0; i$3 < array.length; i$3++) out[i$3] = clipPos(doc$1, array[i$3]); return out; } var SavedContext = function(state, lookAhead) { this.state = state; this.lookAhead = lookAhead; }; var Context = function(doc$1, state, line, lookAhead) { this.state = state; this.doc = doc$1; this.line = line; this.maxLookAhead = lookAhead || 0; this.baseTokens = null; this.baseTokenPos = 1; }; Context.prototype.lookAhead = function(n) { var line = this.doc.getLine(this.line + n); if (line != null && n > this.maxLookAhead) this.maxLookAhead = n; return line; }; Context.prototype.baseToken = function(n) { if (!this.baseTokens) return null; while (this.baseTokens[this.baseTokenPos] <= n) this.baseTokenPos += 2; var type = this.baseTokens[this.baseTokenPos + 1]; return { type: type && type.replace(/( |^)overlay .*/, ""), size: this.baseTokens[this.baseTokenPos] - n }; }; Context.prototype.nextLine = function() { this.line++; if (this.maxLookAhead > 0) this.maxLookAhead--; }; Context.fromSaved = function(doc$1, saved, line) { if (saved instanceof SavedContext) return new Context(doc$1, copyState(doc$1.mode, saved.state), line, saved.lookAhead); else return new Context(doc$1, copyState(doc$1.mode, saved), line); }; Context.prototype.save = function(copy) { var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state; return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state; }; function highlightLine(cm, line, context, forceToEnd) { var st = [cm.state.modeGen], lineClasses = {}; runMode(cm, line.text, cm.doc.mode, context, function(end, style) { return st.push(end, style); }, lineClasses, forceToEnd); var state = context.state; var loop = function(o$1) { context.baseTokens = st; var overlay = cm.state.overlays[o$1], i$3 = 1, at = 0; context.state = true; runMode(cm, line.text, overlay.mode, context, function(end, style) { var start = i$3; while (at < end) { var i_end = st[i$3]; if (i_end > end) st.splice(i$3, 1, end, st[i$3 + 1], i_end); i$3 += 2; at = Math.min(end, i_end); } if (!style) return; if (overlay.opaque) { st.splice(start, i$3 - start, end, "overlay " + style); i$3 = start + 2; } else for (; start < i$3; start += 2) { var cur = st[start + 1]; st[start + 1] = (cur ? cur + " " : "") + "overlay " + style; } }, lineClasses); context.state = state; context.baseTokens = null; context.baseTokenPos = 1; }; for (var o = 0; o < cm.state.overlays.length; ++o) loop(o); return { styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null }; } function getLineStyles(cm, line, updateFrontier) { if (!line.styles || line.styles[0] != cm.state.modeGen) { var context = getContextBefore(cm, lineNo(line)); var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state); var result = highlightLine(cm, line, context); if (resetState) context.state = resetState; line.stateAfter = context.save(!resetState); line.styles = result.styles; if (result.classes) line.styleClasses = result.classes; else if (line.styleClasses) line.styleClasses = null; if (updateFrontier === cm.doc.highlightFrontier) cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); } return line.styles; } function getContextBefore(cm, n, precise) { var doc$1 = cm.doc, display = cm.display; if (!doc$1.mode.startState) return new Context(doc$1, true, n); var start = findStartLine(cm, n, precise); var saved = start > doc$1.first && getLine(doc$1, start - 1).stateAfter; var context = saved ? Context.fromSaved(doc$1, saved, start) : new Context(doc$1, startState(doc$1.mode), start); doc$1.iter(start, n, function(line) { processLine(cm, line.text, context); var pos = context.line; line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null; context.nextLine(); }); if (precise) doc$1.modeFrontier = context.line; return context; } function processLine(cm, text, context, startAt) { var mode = cm.doc.mode; var stream = new StringStream(text, cm.options.tabSize, context); stream.start = stream.pos = startAt || 0; if (text == "") callBlankLine(mode, context.state); while (!stream.eol()) { readToken(mode, stream, context.state); stream.start = stream.pos; } } function callBlankLine(mode, state) { if (mode.blankLine) return mode.blankLine(state); if (!mode.innerMode) return; var inner = innerMode(mode, state); if (inner.mode.blankLine) return inner.mode.blankLine(inner.state); } function readToken(mode, stream, state, inner) { for (var i$3 = 0; i$3 < 10; i$3++) { if (inner) inner[0] = innerMode(mode, state).mode; var style = mode.token(stream, state); if (stream.pos > stream.start) return style; } throw new Error("Mode " + mode.name + " failed to advance stream."); } var Token = function(stream, type, state) { this.start = stream.start; this.end = stream.pos; this.string = stream.current(); this.type = type || null; this.state = state; }; function takeToken(cm, pos, precise, asArray) { var doc$1 = cm.doc, mode = doc$1.mode, style; pos = clipPos(doc$1, pos); var line = getLine(doc$1, pos.line), context = getContextBefore(cm, pos.line, precise); var stream = new StringStream(line.text, cm.options.tabSize, context), tokens; if (asArray) tokens = []; while ((asArray || stream.pos < pos.ch) && !stream.eol()) { stream.start = stream.pos; style = readToken(mode, stream, context.state); if (asArray) tokens.push(new Token(stream, style, copyState(doc$1.mode, context.state))); } return asArray ? tokens : new Token(stream, style, context.state); } function extractLineClasses(type, output) { if (type) for (;;) { var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); if (!lineClass) break; type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); var prop$1 = lineClass[1] ? "bgClass" : "textClass"; if (output[prop$1] == null) output[prop$1] = lineClass[2]; else if (!new RegExp("(?:^|\\s)" + lineClass[2] + "(?:$|\\s)").test(output[prop$1])) output[prop$1] += " " + lineClass[2]; } return type; } function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) { var flattenSpans = mode.flattenSpans; if (flattenSpans == null) flattenSpans = cm.options.flattenSpans; var curStart = 0, curStyle = null; var stream = new StringStream(text, cm.options.tabSize, context), style; var inner = cm.options.addModeClass && [null]; if (text == "") extractLineClasses(callBlankLine(mode, context.state), lineClasses); while (!stream.eol()) { if (stream.pos > cm.options.maxHighlightLength) { flattenSpans = false; if (forceToEnd) processLine(cm, text, context, stream.pos); stream.pos = text.length; style = null; } else style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses); if (inner) { var mName = inner[0].name; if (mName) style = "m-" + (style ? mName + " " + style : mName); } if (!flattenSpans || curStyle != style) { while (curStart < stream.start) { curStart = Math.min(stream.start, curStart + 5e3); f(curStart, curStyle); } curStyle = style; } stream.start = stream.pos; } while (curStart < stream.pos) { var pos = Math.min(stream.pos, curStart + 5e3); f(pos, curStyle); curStart = pos; } } function findStartLine(cm, n, precise) { var minindent, minline, doc$1 = cm.doc; var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1e3 : 100); for (var search = n; search > lim; --search) { if (search <= doc$1.first) return doc$1.first; var line = getLine(doc$1, search - 1), after = line.stateAfter; if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc$1.modeFrontier)) return search; var indented = countColumn(line.text, null, cm.options.tabSize); if (minline == null || minindent > indented) { minline = search - 1; minindent = indented; } } return minline; } function retreatFrontier(doc$1, n) { doc$1.modeFrontier = Math.min(doc$1.modeFrontier, n); if (doc$1.highlightFrontier < n - 10) return; var start = doc$1.first; for (var line = n - 1; line > start; line--) { var saved = getLine(doc$1, line).stateAfter; if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) { start = line + 1; break; } } doc$1.highlightFrontier = Math.min(doc$1.highlightFrontier, start); } var sawReadOnlySpans = false, sawCollapsedSpans = false; function seeReadOnlySpans() { sawReadOnlySpans = true; } function seeCollapsedSpans() { sawCollapsedSpans = true; } function MarkedSpan(marker, from, to) { this.marker = marker; this.from = from; this.to = to; } function getMarkedSpanFor(spans, marker) { if (spans) for (var i$3 = 0; i$3 < spans.length; ++i$3) { var span = spans[i$3]; if (span.marker == marker) return span; } } function removeMarkedSpan(spans, span) { var r; for (var i$3 = 0; i$3 < spans.length; ++i$3) if (spans[i$3] != span) (r || (r = [])).push(spans[i$3]); return r; } function addMarkedSpan(line, span, op) { var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet())); if (inThisOp && line.markedSpans && inThisOp.has(line.markedSpans)) line.markedSpans.push(span); else { line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; if (inThisOp) inThisOp.add(line.markedSpans); } span.marker.attachLine(line); } function markedSpansBefore(old, startCh, isInsert) { var nw; if (old) for (var i$3 = 0; i$3 < old.length; ++i$3) { var span = old[i$3], marker = span.marker; var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); } } return nw; } function markedSpansAfter(old, endCh, isInsert) { var nw; if (old) for (var i$3 = 0; i$3 < old.length; ++i$3) { var span = old[i$3], marker = span.marker; var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, span.to == null ? null : span.to - endCh)); } } return nw; } function stretchSpansOverChange(doc$1, change) { if (change.full) return null; var oldFirst = isLine(doc$1, change.from.line) && getLine(doc$1, change.from.line).markedSpans; var oldLast = isLine(doc$1, change.to.line) && getLine(doc$1, change.to.line).markedSpans; if (!oldFirst && !oldLast) return null; var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; var first = markedSpansBefore(oldFirst, startCh, isInsert); var last = markedSpansAfter(oldLast, endCh, isInsert); var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); if (first) for (var i$3 = 0; i$3 < first.length; ++i$3) { var span = first[i$3]; if (span.to == null) { var found = getMarkedSpanFor(last, span.marker); if (!found) span.to = startCh; else if (sameLine) span.to = found.to == null ? null : found.to + offset; } } if (last) for (var i$1$1 = 0; i$1$1 < last.length; ++i$1$1) { var span$1 = last[i$1$1]; if (span$1.to != null) span$1.to += offset; if (span$1.from == null) { var found$1 = getMarkedSpanFor(first, span$1.marker); if (!found$1) { span$1.from = offset; if (sameLine) (first || (first = [])).push(span$1); } } else { span$1.from += offset; if (sameLine) (first || (first = [])).push(span$1); } } if (first) first = clearEmptySpans(first); if (last && last != first) last = clearEmptySpans(last); var newMarkers = [first]; if (!sameLine) { var gap = change.text.length - 2, gapMarkers; if (gap > 0 && first) { for (var i$2$1 = 0; i$2$1 < first.length; ++i$2$1) if (first[i$2$1].to == null) (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2$1].marker, null, null)); } for (var i$3$1 = 0; i$3$1 < gap; ++i$3$1) newMarkers.push(gapMarkers); newMarkers.push(last); } return newMarkers; } function clearEmptySpans(spans) { for (var i$3 = 0; i$3 < spans.length; ++i$3) { var span = spans[i$3]; if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) spans.splice(i$3--, 1); } if (!spans.length) return null; return spans; } function removeReadOnlyRanges(doc$1, from, to) { var markers = null; doc$1.iter(from.line, to.line + 1, function(line) { if (line.markedSpans) for (var i$4 = 0; i$4 < line.markedSpans.length; ++i$4) { var mark = line.markedSpans[i$4].marker; if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) (markers || (markers = [])).push(mark); } }); if (!markers) return null; var parts = [{ from, to }]; for (var i$3 = 0; i$3 < markers.length; ++i$3) { var mk = markers[i$3], m = mk.find(0); for (var j = 0; j < parts.length; ++j) { var p = parts[j]; if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue; var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) newParts.push({ from: p.from, to: m.from }); if (dto > 0 || !mk.inclusiveRight && !dto) newParts.push({ from: m.to, to: p.to }); parts.splice.apply(parts, newParts); j += newParts.length - 3; } } return parts; } function detachMarkedSpans(line) { var spans = line.markedSpans; if (!spans) return; for (var i$3 = 0; i$3 < spans.length; ++i$3) spans[i$3].marker.detachLine(line); line.markedSpans = null; } function attachMarkedSpans(line, spans) { if (!spans) return; for (var i$3 = 0; i$3 < spans.length; ++i$3) spans[i$3].marker.attachLine(line); line.markedSpans = spans; } function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; } function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; } function compareCollapsedMarkers(a, b) { var lenDiff = a.lines.length - b.lines.length; if (lenDiff != 0) return lenDiff; var aPos = a.find(), bPos = b.find(); var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); if (fromCmp) return -fromCmp; var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); if (toCmp) return toCmp; return b.id - a.id; } function collapsedSpanAtSide(line, start) { var sps = sawCollapsedSpans && line.markedSpans, found; if (sps) for (var sp = void 0, i$3 = 0; i$3 < sps.length; ++i$3) { sp = sps[i$3]; if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) found = sp.marker; } return found; } function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); } function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); } function collapsedSpanAround(line, ch) { var sps = sawCollapsedSpans && line.markedSpans, found; if (sps) for (var i$3 = 0; i$3 < sps.length; ++i$3) { var sp = sps[i$3]; if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) found = sp.marker; } return found; } function conflictingCollapsedRange(doc$1, lineNo$1, from, to, marker) { var line = getLine(doc$1, lineNo$1); var sps = sawCollapsedSpans && line.markedSpans; if (sps) for (var i$3 = 0; i$3 < sps.length; ++i$3) { var sp = sps[i$3]; if (!sp.marker.collapsed) continue; var found = sp.marker.find(0); var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue; if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) return true; } } function visualLine(line) { var merged; while (merged = collapsedSpanAtStart(line)) line = merged.find(-1, true).line; return line; } function visualLineEnd(line) { var merged; while (merged = collapsedSpanAtEnd(line)) line = merged.find(1, true).line; return line; } function visualLineContinued(line) { var merged, lines; while (merged = collapsedSpanAtEnd(line)) { line = merged.find(1, true).line; (lines || (lines = [])).push(line); } return lines; } function visualLineNo(doc$1, lineN) { var line = getLine(doc$1, lineN), vis = visualLine(line); if (line == vis) return lineN; return lineNo(vis); } function visualLineEndNo(doc$1, lineN) { if (lineN > doc$1.lastLine()) return lineN; var line = getLine(doc$1, lineN), merged; if (!lineIsHidden(doc$1, line)) return lineN; while (merged = collapsedSpanAtEnd(line)) line = merged.find(1, true).line; return lineNo(line) + 1; } function lineIsHidden(doc$1, line) { var sps = sawCollapsedSpans && line.markedSpans; if (sps) for (var sp = void 0, i$3 = 0; i$3 < sps.length; ++i$3) { sp = sps[i$3]; if (!sp.marker.collapsed) continue; if (sp.from == null) return true; if (sp.marker.widgetNode) continue; if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc$1, line, sp)) return true; } } function lineIsHiddenInner(doc$1, line, span) { if (span.to == null) { var end = span.marker.find(1, true); return lineIsHiddenInner(doc$1, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)); } if (span.marker.inclusiveRight && span.to == line.text.length) return true; for (var sp = void 0, i$3 = 0; i$3 < line.markedSpans.length; ++i$3) { sp = line.markedSpans[i$3]; if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && (sp.to == null || sp.to != span.from) && (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && lineIsHiddenInner(doc$1, line, sp)) return true; } } function heightAtLine(lineObj) { lineObj = visualLine(lineObj); var h$1 = 0, chunk = lineObj.parent; for (var i$3 = 0; i$3 < chunk.lines.length; ++i$3) { var line = chunk.lines[i$3]; if (line == lineObj) break; else h$1 += line.height; } for (var p = chunk.parent; p; chunk = p, p = chunk.parent) for (var i$1$1 = 0; i$1$1 < p.children.length; ++i$1$1) { var cur = p.children[i$1$1]; if (cur == chunk) break; else h$1 += cur.height; } return h$1; } function lineLength(line) { if (line.height == 0) return 0; var len = line.text.length, merged, cur = line; while (merged = collapsedSpanAtStart(cur)) { var found = merged.find(0, true); cur = found.from.line; len += found.from.ch - found.to.ch; } cur = line; while (merged = collapsedSpanAtEnd(cur)) { var found$1 = merged.find(0, true); len -= cur.text.length - found$1.from.ch; cur = found$1.to.line; len += cur.text.length - found$1.to.ch; } return len; } function findMaxLine(cm) { var d = cm.display, doc$1 = cm.doc; d.maxLine = getLine(doc$1, doc$1.first); d.maxLineLength = lineLength(d.maxLine); d.maxLineChanged = true; doc$1.iter(function(line) { var len = lineLength(line); if (len > d.maxLineLength) { d.maxLineLength = len; d.maxLine = line; } }); } var Line = function(text, markedSpans, estimateHeight$1) { this.text = text; attachMarkedSpans(this, markedSpans); this.height = estimateHeight$1 ? estimateHeight$1(this) : 1; }; Line.prototype.lineNo = function() { return lineNo(this); }; eventMixin(Line); function updateLine(line, text, markedSpans, estimateHeight$1) { line.text = text; if (line.stateAfter) line.stateAfter = null; if (line.styles) line.styles = null; if (line.order != null) line.order = null; detachMarkedSpans(line); attachMarkedSpans(line, markedSpans); var estHeight = estimateHeight$1 ? estimateHeight$1(line) : 1; if (estHeight != line.height) updateLineHeight(line, estHeight); } function cleanUpLine(line) { line.parent = null; detachMarkedSpans(line); } var styleToClassCache = {}, styleToClassCacheWithMode = {}; function interpretTokenStyle(style, options) { if (!style || /^\s*$/.test(style)) return null; var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; return cache[style] || (cache[style] = style.replace(/\S+/g, "cm-$&")); } function buildLineContent(cm, lineView) { var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null); var builder = { pre: eltP("pre", [content], "CodeMirror-line"), content, col: 0, pos: 0, cm, trailingSpace: false, splitSpaces: cm.getOption("lineWrapping") }; lineView.measure = {}; for (var i$3 = 0; i$3 <= (lineView.rest ? lineView.rest.length : 0); i$3++) { var line = i$3 ? lineView.rest[i$3 - 1] : lineView.line, order = void 0; builder.pos = 0; builder.addToken = buildToken; if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) builder.addToken = buildTokenBadBidi(builder.addToken, order); builder.map = []; var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); if (line.styleClasses) { if (line.styleClasses.bgClass) builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); if (line.styleClasses.textClass) builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); } if (builder.map.length == 0) builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); if (i$3 == 0) { lineView.measure.map = builder.map; lineView.measure.cache = {}; } else { (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map); (lineView.measure.caches || (lineView.measure.caches = [])).push({}); } } if (webkit) { var last = builder.content.lastChild; if (/\bcm-tab\b/.test(last.className) || last.querySelector && last.querySelector(".cm-tab")) builder.content.className = "cm-tab-wrap-hack"; } signal(cm, "renderLine", cm, lineView.line, builder.pre); if (builder.pre.className) builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); return builder; } function defaultSpecialCharPlaceholder(ch) { var token = elt("span", "•", "cm-invalidchar"); token.title = "\\u" + ch.charCodeAt(0).toString(16); token.setAttribute("aria-label", token.title); return token; } function buildToken(builder, text, style, startStyle, endStyle, css, attributes) { if (!text) return; var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text; var special = builder.cm.state.specialChars, mustWrap = false; var content; if (!special.test(text)) { builder.col += text.length; content = document.createTextNode(displayText); builder.map.push(builder.pos, builder.pos + text.length, content); if (ie && ie_version < 9) mustWrap = true; builder.pos += text.length; } else { content = document.createDocumentFragment(); var pos = 0; while (true) { special.lastIndex = pos; var m = special.exec(text); var skipped = m ? m.index - pos : text.length - pos; if (skipped) { var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); else content.appendChild(txt); builder.map.push(builder.pos, builder.pos + skipped, txt); builder.col += skipped; builder.pos += skipped; } if (!m) break; pos += skipped + 1; var txt$1 = void 0; if (m[0] == " ") { var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); txt$1.setAttribute("role", "presentation"); txt$1.setAttribute("cm-text", " "); builder.col += tabWidth; } else if (m[0] == "\r" || m[0] == "\n") { txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "␍" : "␤", "cm-invalidchar")); txt$1.setAttribute("cm-text", m[0]); builder.col += 1; } else { txt$1 = builder.cm.options.specialCharPlaceholder(m[0]); txt$1.setAttribute("cm-text", m[0]); if (ie && ie_version < 9) content.appendChild(elt("span", [txt$1])); else content.appendChild(txt$1); builder.col += 1; } builder.map.push(builder.pos, builder.pos + 1, txt$1); builder.pos++; } } builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32; if (style || startStyle || endStyle || mustWrap || css || attributes) { var fullStyle = style || ""; if (startStyle) fullStyle += startStyle; if (endStyle) fullStyle += endStyle; var token = elt("span", [content], fullStyle, css); if (attributes) { for (var attr in attributes) if (attributes.hasOwnProperty(attr) && attr != "style" && attr != "class") token.setAttribute(attr, attributes[attr]); } return builder.content.appendChild(token); } builder.content.appendChild(content); } function splitSpaces(text, trailingBefore) { if (text.length > 1 && !/ /.test(text)) return text; var spaceBefore = trailingBefore, result = ""; for (var i$3 = 0; i$3 < text.length; i$3++) { var ch = text.charAt(i$3); if (ch == " " && spaceBefore && (i$3 == text.length - 1 || text.charCodeAt(i$3 + 1) == 32)) ch = "\xA0"; result += ch; spaceBefore = ch == " "; } return result; } function buildTokenBadBidi(inner, order) { return function(builder, text, style, startStyle, endStyle, css, attributes) { style = style ? style + " cm-force-border" : "cm-force-border"; var start = builder.pos, end = start + text.length; for (;;) { var part = void 0; for (var i$3 = 0; i$3 < order.length; i$3++) { part = order[i$3]; if (part.to > start && part.from <= start) break; } if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, css, attributes); inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes); startStyle = null; text = text.slice(part.to - start); start = part.to; } }; } function buildCollapsedSpan(builder, size, marker, ignoreWidget) { var widget = !ignoreWidget && marker.widgetNode; if (widget) builder.map.push(builder.pos, builder.pos + size, widget); if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { if (!widget) widget = builder.content.appendChild(document.createElement("span")); widget.setAttribute("cm-marker", marker.id); } if (widget) { builder.cm.display.input.setUneditable(widget); builder.content.appendChild(widget); } builder.pos += size; builder.trailingSpace = false; } function insertLineContent(line, builder, styles) { var spans = line.markedSpans, allText = line.text, at = 0; if (!spans) { for (var i$1$1 = 1; i$1$1 < styles.length; i$1$1 += 2) builder.addToken(builder, allText.slice(at, at = styles[i$1$1]), interpretTokenStyle(styles[i$1$1 + 1], builder.cm.options)); return; } var len = allText.length, pos = 0, i$3 = 1, text = "", style, css; var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes; for (;;) { if (nextChange == pos) { spanStyle = spanEndStyle = spanStartStyle = css = ""; attributes = null; collapsed = null; nextChange = Infinity; var foundBookmarks = [], endStyles = void 0; for (var j = 0; j < spans.length; ++j) { var sp = spans[j], m = sp.marker; if (m.type == "bookmark" && sp.from == pos && m.widgetNode) foundBookmarks.push(m); else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { if (sp.to != null && sp.to != pos && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; } if (m.className) spanStyle += " " + m.className; if (m.css) css = (css ? css + ";" : "") + m.css; if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle; if (m.endStyle && sp.to == nextChange) (endStyles || (endStyles = [])).push(m.endStyle, sp.to); if (m.title) (attributes || (attributes = {})).title = m.title; if (m.attributes) for (var attr in m.attributes) (attributes || (attributes = {}))[attr] = m.attributes[attr]; if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) collapsed = sp; } else if (sp.from > pos && nextChange > sp.from) nextChange = sp.from; } if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) if (endStyles[j$1 + 1] == nextChange) spanEndStyle += " " + endStyles[j$1]; } if (!collapsed || collapsed.from == pos) for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); if (collapsed && (collapsed.from || 0) == pos) { buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, collapsed.marker, collapsed.from == null); if (collapsed.to == null) return; if (collapsed.to == pos) collapsed = false; } } if (pos >= len) break; var upto = Math.min(len, nextChange); while (true) { if (text) { var end = pos + text.length; if (!collapsed) { var tokenText = end > upto ? text.slice(0, upto - pos) : text; builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", css, attributes); } if (end >= upto) { text = text.slice(upto - pos); pos = upto; break; } pos = end; spanStartStyle = ""; } text = allText.slice(at, at = styles[i$3++]); style = interpretTokenStyle(styles[i$3++], builder.cm.options); } } } function LineView(doc$1, line, lineN) { this.line = line; this.rest = visualLineContinued(line); this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; this.node = this.text = null; this.hidden = lineIsHidden(doc$1, line); } function buildViewArray(cm, from, to) { var array = [], nextPos; for (var pos = from; pos < to; pos = nextPos) { var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); nextPos = pos + view.size; array.push(view); } return array; } var operationGroup = null; function pushOperation(op) { if (operationGroup) operationGroup.ops.push(op); else op.ownsGroup = operationGroup = { ops: [op], delayedCallbacks: [] }; } function fireCallbacksForOps(group) { var callbacks = group.delayedCallbacks, i$3 = 0; do { for (; i$3 < callbacks.length; i$3++) callbacks[i$3].call(null); for (var j = 0; j < group.ops.length; j++) { var op = group.ops[j]; if (op.cursorActivityHandlers) while (op.cursorActivityCalled < op.cursorActivityHandlers.length) op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } } while (i$3 < callbacks.length); } function finishOperation(op, endCb) { var group = op.ownsGroup; if (!group) return; try { fireCallbacksForOps(group); } finally { operationGroup = null; endCb(group); } } var orphanDelayedCallbacks = null; function signalLater(emitter, type) { var arr = getHandlers(emitter, type); if (!arr.length) return; var args = Array.prototype.slice.call(arguments, 2), list; if (operationGroup) list = operationGroup.delayedCallbacks; else if (orphanDelayedCallbacks) list = orphanDelayedCallbacks; else { list = orphanDelayedCallbacks = []; setTimeout(fireOrphanDelayed, 0); } var loop = function(i$4) { list.push(function() { return arr[i$4].apply(null, args); }); }; for (var i$3 = 0; i$3 < arr.length; ++i$3) loop(i$3); } function fireOrphanDelayed() { var delayed = orphanDelayedCallbacks; orphanDelayedCallbacks = null; for (var i$3 = 0; i$3 < delayed.length; ++i$3) delayed[i$3](); } function updateLineForChanges(cm, lineView, lineN, dims) { for (var j = 0; j < lineView.changes.length; j++) { var type = lineView.changes[j]; if (type == "text") updateLineText(cm, lineView); else if (type == "gutter") updateLineGutter(cm, lineView, lineN, dims); else if (type == "class") updateLineClasses(cm, lineView); else if (type == "widget") updateLineWidgets(cm, lineView, dims); } lineView.changes = null; } function ensureLineWrapped(lineView) { if (lineView.node == lineView.text) { lineView.node = elt("div", null, null, "position: relative"); if (lineView.text.parentNode) lineView.text.parentNode.replaceChild(lineView.node, lineView.text); lineView.node.appendChild(lineView.text); if (ie && ie_version < 8) lineView.node.style.zIndex = 2; } return lineView.node; } function updateLineBackground(cm, lineView) { var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; if (cls) cls += " CodeMirror-linebackground"; if (lineView.background) if (cls) lineView.background.className = cls; else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } else if (cls) { var wrap$1 = ensureLineWrapped(lineView); lineView.background = wrap$1.insertBefore(elt("div", null, cls), wrap$1.firstChild); cm.display.input.setUneditable(lineView.background); } } function getLineContent(cm, lineView) { var ext = cm.display.externalMeasured; if (ext && ext.line == lineView.line) { cm.display.externalMeasured = null; lineView.measure = ext.measure; return ext.built; } return buildLineContent(cm, lineView); } function updateLineText(cm, lineView) { var cls = lineView.text.className; var built = getLineContent(cm, lineView); if (lineView.text == lineView.node) lineView.node = built.pre; lineView.text.parentNode.replaceChild(built.pre, lineView.text); lineView.text = built.pre; if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { lineView.bgClass = built.bgClass; lineView.textClass = built.textClass; updateLineClasses(cm, lineView); } else if (cls) lineView.text.className = cls; } function updateLineClasses(cm, lineView) { updateLineBackground(cm, lineView); if (lineView.line.wrapClass) ensureLineWrapped(lineView).className = lineView.line.wrapClass; else if (lineView.node != lineView.text) lineView.node.className = ""; var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; lineView.text.className = textClass || ""; } function updateLineGutter(cm, lineView, lineN, dims) { if (lineView.gutter) { lineView.node.removeChild(lineView.gutter); lineView.gutter = null; } if (lineView.gutterBackground) { lineView.node.removeChild(lineView.gutterBackground); lineView.gutterBackground = null; } if (lineView.line.gutterClass) { var wrap$1 = ensureLineWrapped(lineView); lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + dims.gutterTotalWidth + "px"); cm.display.input.setUneditable(lineView.gutterBackground); wrap$1.insertBefore(lineView.gutterBackground, lineView.text); } var markers = lineView.line.gutterMarkers; if (cm.options.lineNumbers || markers) { var wrap$1$1 = ensureLineWrapped(lineView); var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"); gutterWrap.setAttribute("aria-hidden", "true"); cm.display.input.setUneditable(gutterWrap); wrap$1$1.insertBefore(gutterWrap, lineView.text); if (lineView.line.gutterClass) gutterWrap.className += " " + lineView.line.gutterClass; if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) lineView.lineNumber = gutterWrap.appendChild(elt("div", lineNumberFor(cm.options, lineN), "CodeMirror-linenumber CodeMirror-gutter-elt", "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + cm.display.lineNumInnerWidth + "px")); if (markers) for (var k = 0; k < cm.display.gutterSpecs.length; ++k) { var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id]; if (found) gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); } } } function updateLineWidgets(cm, lineView, dims) { if (lineView.alignable) lineView.alignable = null; var isWidget = classTest("CodeMirror-linewidget"); for (var node = lineView.node.firstChild, next = void 0; node; node = next) { next = node.nextSibling; if (isWidget.test(node.className)) lineView.node.removeChild(node); } insertLineWidgets(cm, lineView, dims); } function buildLineElement(cm, lineView, lineN, dims) { var built = getLineContent(cm, lineView); lineView.text = lineView.node = built.pre; if (built.bgClass) lineView.bgClass = built.bgClass; if (built.textClass) lineView.textClass = built.textClass; updateLineClasses(cm, lineView); updateLineGutter(cm, lineView, lineN, dims); insertLineWidgets(cm, lineView, dims); return lineView.node; } function insertLineWidgets(cm, lineView, dims) { insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); if (lineView.rest) for (var i$3 = 0; i$3 < lineView.rest.length; i$3++) insertLineWidgetsFor(cm, lineView.rest[i$3], lineView, dims, false); } function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { if (!line.widgets) return; var wrap$1 = ensureLineWrapped(lineView); for (var i$3 = 0, ws = line.widgets; i$3 < ws.length; ++i$3) { var widget = ws[i$3], node = elt("div", [widget.node], "CodeMirror-linewidget" + (widget.className ? " " + widget.className : "")); if (!widget.handleMouseEvents) node.setAttribute("cm-ignore-events", "true"); positionLineWidget(widget, node, lineView, dims); cm.display.input.setUneditable(node); if (allowAbove && widget.above) wrap$1.insertBefore(node, lineView.gutter || lineView.text); else wrap$1.appendChild(node); signalLater(widget, "redraw"); } } function positionLineWidget(widget, node, lineView, dims) { if (widget.noHScroll) { (lineView.alignable || (lineView.alignable = [])).push(node); var width = dims.wrapperWidth; node.style.left = dims.fixedPos + "px"; if (!widget.coverGutter) { width -= dims.gutterTotalWidth; node.style.paddingLeft = dims.gutterTotalWidth + "px"; } node.style.width = width + "px"; } if (widget.coverGutter) { node.style.zIndex = 5; node.style.position = "relative"; if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"; } } function widgetHeight(widget) { if (widget.height != null) return widget.height; var cm = widget.doc.cm; if (!cm) return 0; if (!contains(document.body, widget.node)) { var parentStyle = "position: relative;"; if (widget.coverGutter) parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; if (widget.noHScroll) parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); } return widget.height = widget.node.parentNode.offsetHeight; } function eventInWidget(display, e) { for (var n = e_target(e); n != display.wrapper; n = n.parentNode) if (!n || n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true" || n.parentNode == display.sizer && n != display.mover) return true; } function paddingTop(display) { return display.lineSpace.offsetTop; } function paddingVert(display) { return display.mover.offsetHeight - display.lineSpace.offsetHeight; } function paddingH(display) { if (display.cachedPaddingH) return display.cachedPaddingH; var e = removeChildrenAndAdd(display.measure, elt("pre", "x", "CodeMirror-line-like")); var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; var data = { left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight) }; if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data; return data; } function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth; } function displayWidth(cm) { return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth; } function displayHeight(cm) { return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight; } function ensureLineHeights(cm, lineView, rect) { var wrapping = cm.options.lineWrapping; var curWidth = wrapping && displayWidth(cm); if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { var heights = lineView.measure.heights = []; if (wrapping) { lineView.measure.width = curWidth; var rects = lineView.text.firstChild.getClientRects(); for (var i$3 = 0; i$3 < rects.length - 1; i$3++) { var cur = rects[i$3], next = rects[i$3 + 1]; if (Math.abs(cur.bottom - next.bottom) > 2) heights.push((cur.bottom + next.top) / 2 - rect.top); } } heights.push(rect.bottom - rect.top); } } function mapFromLineView(lineView, line, lineN) { if (lineView.line == line) return { map: lineView.measure.map, cache: lineView.measure.cache }; if (lineView.rest) { for (var i$3 = 0; i$3 < lineView.rest.length; i$3++) if (lineView.rest[i$3] == line) return { map: lineView.measure.maps[i$3], cache: lineView.measure.caches[i$3] }; for (var i$1$1 = 0; i$1$1 < lineView.rest.length; i$1$1++) if (lineNo(lineView.rest[i$1$1]) > lineN) return { map: lineView.measure.maps[i$1$1], cache: lineView.measure.caches[i$1$1], before: true }; } } function updateExternalMeasurement(cm, line) { line = visualLine(line); var lineN = lineNo(line); var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); view.lineN = lineN; var built = view.built = buildLineContent(cm, view); view.text = built.pre; removeChildrenAndAdd(cm.display.lineMeasure, built.pre); return view; } function measureChar(cm, line, ch, bias) { return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); } function findViewForLine(cm, lineN) { if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) return cm.display.view[findViewIndex(cm, lineN)]; var ext = cm.display.externalMeasured; if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) return ext; } function prepareMeasureForLine(cm, line) { var lineN = lineNo(line); var view = findViewForLine(cm, lineN); if (view && !view.text) view = null; else if (view && view.changes) { updateLineForChanges(cm, view, lineN, getDimensions(cm)); cm.curOp.forceUpdate = true; } if (!view) view = updateExternalMeasurement(cm, line); var info = mapFromLineView(view, line, lineN); return { line, view, rect: null, map: info.map, cache: info.cache, before: info.before, hasHeights: false }; } function measureCharPrepared(cm, prepared, ch, bias, varHeight) { if (prepared.before) ch = -1; var key = ch + (bias || ""), found; if (prepared.cache.hasOwnProperty(key)) found = prepared.cache[key]; else { if (!prepared.rect) prepared.rect = prepared.view.text.getBoundingClientRect(); if (!prepared.hasHeights) { ensureLineHeights(cm, prepared.view, prepared.rect); prepared.hasHeights = true; } found = measureCharInner(cm, prepared, ch, bias); if (!found.bogus) prepared.cache[key] = found; } return { left: found.left, right: found.right, top: varHeight ? found.rtop : found.top, bottom: varHeight ? found.rbottom : found.bottom }; } var nullRect = { left: 0, right: 0, top: 0, bottom: 0 }; function nodeAndOffsetInLineMap(map$1, ch, bias) { var node, start, end, collapse, mStart, mEnd; for (var i$3 = 0; i$3 < map$1.length; i$3 += 3) { mStart = map$1[i$3]; mEnd = map$1[i$3 + 1]; if (ch < mStart) { start = 0; end = 1; collapse = "left"; } else if (ch < mEnd) { start = ch - mStart; end = start + 1; } else if (i$3 == map$1.length - 3 || ch == mEnd && map$1[i$3 + 3] > ch) { end = mEnd - mStart; start = end - 1; if (ch >= mEnd) collapse = "right"; } if (start != null) { node = map$1[i$3 + 2]; if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) collapse = bias; if (bias == "left" && start == 0) while (i$3 && map$1[i$3 - 2] == map$1[i$3 - 3] && map$1[i$3 - 1].insertLeft) { node = map$1[(i$3 -= 3) + 2]; collapse = "left"; } if (bias == "right" && start == mEnd - mStart) while (i$3 < map$1.length - 3 && map$1[i$3 + 3] == map$1[i$3 + 4] && !map$1[i$3 + 5].insertLeft) { node = map$1[(i$3 += 3) + 2]; collapse = "right"; } break; } } return { node, start, end, collapse, coverStart: mStart, coverEnd: mEnd }; } function getUsefulRect(rects, bias) { var rect = nullRect; if (bias == "left") { for (var i$3 = 0; i$3 < rects.length; i$3++) if ((rect = rects[i$3]).left != rect.right) break; } else for (var i$1$1 = rects.length - 1; i$1$1 >= 0; i$1$1--) if ((rect = rects[i$1$1]).left != rect.right) break; return rect; } function measureCharInner(cm, prepared, ch, bias) { var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); var node = place.node, start = place.start, end = place.end, collapse = place.collapse; var rect; if (node.nodeType == 3) { for (var i$1$1 = 0; i$1$1 < 4; i$1$1++) { while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) --start; while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) ++end; if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) rect = node.parentNode.getBoundingClientRect(); else rect = getUsefulRect(range(node, start, end).getClientRects(), bias); if (rect.left || rect.right || start == 0) break; end = start; start = start - 1; collapse = "right"; } if (ie && ie_version < 11) rect = maybeUpdateRectForZooming(cm.display.measure, rect); } else { if (start > 0) collapse = bias = "right"; var rects; if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) rect = rects[bias == "right" ? rects.length - 1 : 0]; else rect = node.getBoundingClientRect(); } if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { var rSpan = node.parentNode.getClientRects()[0]; if (rSpan) rect = { left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom }; else rect = nullRect; } var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; var mid = (rtop + rbot) / 2; var heights = prepared.view.measure.heights; var i$3 = 0; for (; i$3 < heights.length - 1; i$3++) if (mid < heights[i$3]) break; var top = i$3 ? heights[i$3 - 1] : 0, bot = heights[i$3]; var result = { left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, top, bottom: bot }; if (!rect.left && !rect.right) result.bogus = true; if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } return result; } function maybeUpdateRectForZooming(measure, rect) { if (!window.screen || screen.logicalXDPI == null || screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) return rect; var scaleX = screen.logicalXDPI / screen.deviceXDPI; var scaleY = screen.logicalYDPI / screen.deviceYDPI; return { left: rect.left * scaleX, right: rect.right * scaleX, top: rect.top * scaleY, bottom: rect.bottom * scaleY }; } function clearLineMeasurementCacheFor(lineView) { if (lineView.measure) { lineView.measure.cache = {}; lineView.measure.heights = null; if (lineView.rest) for (var i$3 = 0; i$3 < lineView.rest.length; i$3++) lineView.measure.caches[i$3] = {}; } } function clearLineMeasurementCache(cm) { cm.display.externalMeasure = null; removeChildren(cm.display.lineMeasure); for (var i$3 = 0; i$3 < cm.display.view.length; i$3++) clearLineMeasurementCacheFor(cm.display.view[i$3]); } function clearCaches(cm) { clearLineMeasurementCache(cm); cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; if (!cm.options.lineWrapping) cm.display.maxLineChanged = true; cm.display.lineNumChars = null; } function pageScrollX(doc$1) { if (chrome && android) return -(doc$1.body.getBoundingClientRect().left - parseInt(getComputedStyle(doc$1.body).marginLeft)); return doc$1.defaultView.pageXOffset || (doc$1.documentElement || doc$1.body).scrollLeft; } function pageScrollY(doc$1) { if (chrome && android) return -(doc$1.body.getBoundingClientRect().top - parseInt(getComputedStyle(doc$1.body).marginTop)); return doc$1.defaultView.pageYOffset || (doc$1.documentElement || doc$1.body).scrollTop; } function widgetTopHeight(lineObj) { var ref$1 = visualLine(lineObj); var widgets = ref$1.widgets; var height = 0; if (widgets) { for (var i$3 = 0; i$3 < widgets.length; ++i$3) if (widgets[i$3].above) height += widgetHeight(widgets[i$3]); } return height; } function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) { if (!includeWidgets) { var height = widgetTopHeight(lineObj); rect.top += height; rect.bottom += height; } if (context == "line") return rect; if (!context) context = "local"; var yOff = heightAtLine(lineObj); if (context == "local") yOff += paddingTop(cm.display); else yOff -= cm.display.viewOffset; if (context == "page" || context == "window") { var lOff = cm.display.lineSpace.getBoundingClientRect(); yOff += lOff.top + (context == "window" ? 0 : pageScrollY(doc(cm))); var xOff = lOff.left + (context == "window" ? 0 : pageScrollX(doc(cm))); rect.left += xOff; rect.right += xOff; } rect.top += yOff; rect.bottom += yOff; return rect; } function fromCoordSystem(cm, coords, context) { if (context == "div") return coords; var left = coords.left, top = coords.top; if (context == "page") { left -= pageScrollX(doc(cm)); top -= pageScrollY(doc(cm)); } else if (context == "local" || !context) { var localBox = cm.display.sizer.getBoundingClientRect(); left += localBox.left; top += localBox.top; } var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); return { left: left - lineSpaceBox.left, top: top - lineSpaceBox.top }; } function charCoords(cm, pos, context, lineObj, bias) { if (!lineObj) lineObj = getLine(cm.doc, pos.line); return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context); } function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { lineObj = lineObj || getLine(cm.doc, pos.line); if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj); function get(ch$1, right) { var m = measureCharPrepared(cm, preparedMeasure, ch$1, right ? "right" : "left", varHeight); if (right) m.left = m.right; else m.right = m.left; return intoCoordSystem(cm, lineObj, m, context); } var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky; if (ch >= lineObj.text.length) { ch = lineObj.text.length; sticky = "before"; } else if (ch <= 0) { ch = 0; sticky = "after"; } if (!order) return get(sticky == "before" ? ch - 1 : ch, sticky == "before"); function getBidi(ch$1, partPos$1, invert) { var part = order[partPos$1], right = part.level == 1; return get(invert ? ch$1 - 1 : ch$1, right != invert); } var partPos = getBidiPartAt(order, ch, sticky); var other = bidiOther; var val = getBidi(ch, partPos, sticky == "before"); if (other != null) val.other = getBidi(ch, other, sticky != "before"); return val; } function estimateCoords(cm, pos) { var left = 0; pos = clipPos(cm.doc, pos); if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch; var lineObj = getLine(cm.doc, pos.line); var top = heightAtLine(lineObj) + paddingTop(cm.display); return { left, right: left, top, bottom: top + lineObj.height }; } function PosWithInfo(line, ch, sticky, outside, xRel) { var pos = Pos(line, ch, sticky); pos.xRel = xRel; if (outside) pos.outside = outside; return pos; } function coordsChar(cm, x, y) { var doc$1 = cm.doc; y += cm.display.viewOffset; if (y < 0) return PosWithInfo(doc$1.first, 0, null, -1, -1); var lineN = lineAtHeight(doc$1, y), last = doc$1.first + doc$1.size - 1; if (lineN > last) return PosWithInfo(doc$1.first + doc$1.size - 1, getLine(doc$1, last).text.length, null, 1, 1); if (x < 0) x = 0; var lineObj = getLine(doc$1, lineN); for (;;) { var found = coordsCharInner(cm, lineObj, lineN, x, y); var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0)); if (!collapsed) return found; var rangeEnd = collapsed.find(1); if (rangeEnd.line == lineN) return rangeEnd; lineObj = getLine(doc$1, lineN = rangeEnd.line); } } function wrappedLineExtent(cm, lineObj, preparedMeasure, y) { y -= widgetTopHeight(lineObj); var end = lineObj.text.length; var begin = findFirst(function(ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0); end = findFirst(function(ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end); return { begin, end }; } function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) { if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj); var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top; return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop); } function boxIsAfter(box, x, y, left) { return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x; } function coordsCharInner(cm, lineObj, lineNo$1, x, y) { y -= heightAtLine(lineObj); var preparedMeasure = prepareMeasureForLine(cm, lineObj); var widgetHeight$1 = widgetTopHeight(lineObj); var begin = 0, end = lineObj.text.length, ltr = true; var order = getOrder(lineObj, cm.doc.direction); if (order) { var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)(cm, lineObj, lineNo$1, preparedMeasure, order, x, y); ltr = part.level != 1; begin = ltr ? part.from : part.to - 1; end = ltr ? part.to : part.from - 1; } var chAround = null, boxAround = null; var ch = findFirst(function(ch$1) { var box = measureCharPrepared(cm, preparedMeasure, ch$1); box.top += widgetHeight$1; box.bottom += widgetHeight$1; if (!boxIsAfter(box, x, y, false)) return false; if (box.top <= y && box.left <= x) { chAround = ch$1; boxAround = box; } return true; }, begin, end); var baseX, sticky, outside = false; if (boxAround) { var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr; ch = chAround + (atStart ? 0 : 1); sticky = atStart ? "after" : "before"; baseX = atLeft ? boxAround.left : boxAround.right; } else { if (!ltr && (ch == end || ch == begin)) ch++; sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" : measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight$1 <= y == ltr ? "after" : "before"; var coords = cursorCoords(cm, Pos(lineNo$1, ch, sticky), "line", lineObj, preparedMeasure); baseX = coords.left; outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0; } ch = skipExtendingChars(lineObj.text, ch, 1); return PosWithInfo(lineNo$1, ch, sticky, outside, x - baseX); } function coordsBidiPart(cm, lineObj, lineNo$1, preparedMeasure, order, x, y) { var index = findFirst(function(i$3) { var part$1 = order[i$3], ltr$1 = part$1.level != 1; return boxIsAfter(cursorCoords(cm, Pos(lineNo$1, ltr$1 ? part$1.to : part$1.from, ltr$1 ? "before" : "after"), "line", lineObj, preparedMeasure), x, y, true); }, 0, order.length - 1); var part = order[index]; if (index > 0) { var ltr = part.level != 1; var start = cursorCoords(cm, Pos(lineNo$1, ltr ? part.from : part.to, ltr ? "after" : "before"), "line", lineObj, preparedMeasure); if (boxIsAfter(start, x, y, true) && start.top > y) part = order[index - 1]; } return part; } function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) { var ref$1 = wrappedLineExtent(cm, lineObj, preparedMeasure, y); var begin = ref$1.begin; var end = ref$1.end; if (/\s/.test(lineObj.text.charAt(end - 1))) end--; var part = null, closestDist = null; for (var i$3 = 0; i$3 < order.length; i$3++) { var p = order[i$3]; if (p.from >= end || p.to <= begin) continue; var ltr = p.level != 1; var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right; var dist = endX < x ? x - endX + 1e9 : endX - x; if (!part || closestDist > dist) { part = p; closestDist = dist; } } if (!part) part = order[order.length - 1]; if (part.from < begin) part = { from: begin, to: part.to, level: part.level }; if (part.to > end) part = { from: part.from, to: end, level: part.level }; return part; } var measureText; function textHeight(display) { if (display.cachedTextHeight != null) return display.cachedTextHeight; if (measureText == null) { measureText = elt("pre", null, "CodeMirror-line-like"); for (var i$3 = 0; i$3 < 49; ++i$3) { measureText.appendChild(document.createTextNode("x")); measureText.appendChild(elt("br")); } measureText.appendChild(document.createTextNode("x")); } removeChildrenAndAdd(display.measure, measureText); var height = measureText.offsetHeight / 50; if (height > 3) display.cachedTextHeight = height; removeChildren(display.measure); return height || 1; } function charWidth(display) { if (display.cachedCharWidth != null) return display.cachedCharWidth; var anchor = elt("span", "xxxxxxxxxx"); var pre = elt("pre", [anchor], "CodeMirror-line-like"); removeChildrenAndAdd(display.measure, pre); var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; if (width > 2) display.cachedCharWidth = width; return width || 10; } function getDimensions(cm) { var d = cm.display, left = {}, width = {}; var gutterLeft = d.gutters.clientLeft; for (var n = d.gutters.firstChild, i$3 = 0; n; n = n.nextSibling, ++i$3) { var id = cm.display.gutterSpecs[i$3].className; left[id] = n.offsetLeft + n.clientLeft + gutterLeft; width[id] = n.clientWidth; } return { fixedPos: compensateForHScroll(d), gutterTotalWidth: d.gutters.offsetWidth, gutterLeft: left, gutterWidth: width, wrapperWidth: d.wrapper.clientWidth }; } function compensateForHScroll(display) { return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; } function estimateHeight(cm) { var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); return function(line) { if (lineIsHidden(cm.doc, line)) return 0; var widgetsHeight = 0; if (line.widgets) { for (var i$3 = 0; i$3 < line.widgets.length; i$3++) if (line.widgets[i$3].height) widgetsHeight += line.widgets[i$3].height; } if (wrapping) return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th; else return widgetsHeight + th; }; } function estimateLineHeights(cm) { var doc$1 = cm.doc, est = estimateHeight(cm); doc$1.iter(function(line) { var estHeight = est(line); if (estHeight != line.height) updateLineHeight(line, estHeight); }); } function posFromMouse(cm, e, liberal, forRect) { var display = cm.display; if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") return null; var x, y, space = display.lineSpace.getBoundingClientRect(); try { x = e.clientX - space.left; y = e.clientY - space.top; } catch (e$1) { return null; } var coords = coordsChar(cm, x, y), line; if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); } return coords; } function findViewIndex(cm, n) { if (n >= cm.display.viewTo) return null; n -= cm.display.viewFrom; if (n < 0) return null; var view = cm.display.view; for (var i$3 = 0; i$3 < view.length; i$3++) { n -= view[i$3].size; if (n < 0) return i$3; } } function regChange(cm, from, to, lendiff) { if (from == null) from = cm.doc.first; if (to == null) to = cm.doc.first + cm.doc.size; if (!lendiff) lendiff = 0; var display = cm.display; if (lendiff && to < display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers > from)) display.updateLineNumbers = from; cm.curOp.viewChanged = true; if (from >= display.viewTo) { if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) resetView(cm); } else if (to <= display.viewFrom) if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) resetView(cm); else { display.viewFrom += lendiff; display.viewTo += lendiff; } else if (from <= display.viewFrom && to >= display.viewTo) resetView(cm); else if (from <= display.viewFrom) { var cut = viewCuttingPoint(cm, to, to + lendiff, 1); if (cut) { display.view = display.view.slice(cut.index); display.viewFrom = cut.lineN; display.viewTo += lendiff; } else resetView(cm); } else if (to >= display.viewTo) { var cut$1 = viewCuttingPoint(cm, from, from, -1); if (cut$1) { display.view = display.view.slice(0, cut$1.index); display.viewTo = cut$1.lineN; } else resetView(cm); } else { var cutTop = viewCuttingPoint(cm, from, from, -1); var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); if (cutTop && cutBot) { display.view = display.view.slice(0, cutTop.index).concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)).concat(display.view.slice(cutBot.index)); display.viewTo += lendiff; } else resetView(cm); } var ext = display.externalMeasured; if (ext) { if (to < ext.lineN) ext.lineN += lendiff; else if (from < ext.lineN + ext.size) display.externalMeasured = null; } } function regLineChange(cm, line, type) { cm.curOp.viewChanged = true; var display = cm.display, ext = cm.display.externalMeasured; if (ext && line >= ext.lineN && line < ext.lineN + ext.size) display.externalMeasured = null; if (line < display.viewFrom || line >= display.viewTo) return; var lineView = display.view[findViewIndex(cm, line)]; if (lineView.node == null) return; var arr = lineView.changes || (lineView.changes = []); if (indexOf(arr, type) == -1) arr.push(type); } function resetView(cm) { cm.display.viewFrom = cm.display.viewTo = cm.doc.first; cm.display.view = []; cm.display.viewOffset = 0; } function viewCuttingPoint(cm, oldN, newN, dir) { var index = findViewIndex(cm, oldN), diff, view = cm.display.view; if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) return { index, lineN: newN }; var n = cm.display.viewFrom; for (var i$3 = 0; i$3 < index; i$3++) n += view[i$3].size; if (n != oldN) { if (dir > 0) { if (index == view.length - 1) return null; diff = n + view[index].size - oldN; index++; } else diff = n - oldN; oldN += diff; newN += diff; } while (visualLineNo(cm.doc, newN) != newN) { if (index == (dir < 0 ? 0 : view.length - 1)) return null; newN += dir * view[index - (dir < 0 ? 1 : 0)].size; index += dir; } return { index, lineN: newN }; } function adjustView(cm, from, to) { var display = cm.display, view = display.view; if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { display.view = buildViewArray(cm, from, to); display.viewFrom = from; } else { if (display.viewFrom > from) display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); else if (display.viewFrom < from) display.view = display.view.slice(findViewIndex(cm, from)); display.viewFrom = from; if (display.viewTo < to) display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); else if (display.viewTo > to) display.view = display.view.slice(0, findViewIndex(cm, to)); } display.viewTo = to; } function countDirtyView(cm) { var view = cm.display.view, dirty = 0; for (var i$3 = 0; i$3 < view.length; i$3++) { var lineView = view[i$3]; if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty; } return dirty; } function updateSelection(cm) { cm.display.input.showSelection(cm.display.input.prepareSelection()); } function prepareSelection(cm, primary) { if (primary === void 0) primary = true; var doc$1 = cm.doc, result = {}; var curFragment = result.cursors = document.createDocumentFragment(); var selFragment = result.selection = document.createDocumentFragment(); var customCursor = cm.options.$customCursor; if (customCursor) primary = true; for (var i$3 = 0; i$3 < doc$1.sel.ranges.length; i$3++) { if (!primary && i$3 == doc$1.sel.primIndex) continue; var range$1 = doc$1.sel.ranges[i$3]; if (range$1.from().line >= cm.display.viewTo || range$1.to().line < cm.display.viewFrom) continue; var collapsed = range$1.empty(); if (customCursor) { var head = customCursor(cm, range$1); if (head) drawSelectionCursor(cm, head, curFragment); } else if (collapsed || cm.options.showCursorWhenSelecting) drawSelectionCursor(cm, range$1.head, curFragment); if (!collapsed) drawSelectionRange(cm, range$1, selFragment); } return result; } function drawSelectionCursor(cm, head, output) { var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine); var cursor = output.appendChild(elt("div", "\xA0", "CodeMirror-cursor")); cursor.style.left = pos.left + "px"; cursor.style.top = pos.top + "px"; cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; if (/\bcm-fat-cursor\b/.test(cm.getWrapperElement().className)) { var charPos = charCoords(cm, head, "div", null, null); var width = charPos.right - charPos.left; cursor.style.width = (width > 0 ? width : cm.defaultCharWidth()) + "px"; } if (pos.other) { var otherCursor = output.appendChild(elt("div", "\xA0", "CodeMirror-cursor CodeMirror-secondarycursor")); otherCursor.style.display = ""; otherCursor.style.left = pos.other.left + "px"; otherCursor.style.top = pos.other.top + "px"; otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; } } function cmpCoords(a, b) { return a.top - b.top || a.left - b.left; } function drawSelectionRange(cm, range$1, output) { var display = cm.display, doc$1 = cm.doc; var fragment = document.createDocumentFragment(); var padding = paddingH(cm.display), leftSide = padding.left; var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; var docLTR = doc$1.direction == "ltr"; function add(left, top, width, bottom) { if (top < 0) top = 0; top = Math.round(top); bottom = Math.round(bottom); fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px")); } function drawForLine(line, fromArg, toArg) { var lineObj = getLine(doc$1, line); var lineLen = lineObj.text.length; var start, end; function coords(ch, bias) { return charCoords(cm, Pos(line, ch), "div", lineObj, bias); } function wrapX(pos, dir, side) { var extent = wrappedLineExtentChar(cm, lineObj, null, pos); var prop$1 = dir == "ltr" == (side == "after") ? "left" : "right"; var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1); return coords(ch, prop$1)[prop$1]; } var order = getOrder(lineObj, doc$1.direction); iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir, i$3) { var ltr = dir == "ltr"; var fromPos = coords(from, ltr ? "left" : "right"); var toPos = coords(to - 1, ltr ? "right" : "left"); var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen; var first = i$3 == 0, last = !order || i$3 == order.length - 1; if (toPos.top - fromPos.top <= 3) { var openLeft = (docLTR ? openStart : openEnd) && first; var openRight = (docLTR ? openEnd : openStart) && last; var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left; var right = openRight ? rightSide : (ltr ? toPos : fromPos).right; add(left, fromPos.top, right - left, fromPos.bottom); } else { var topLeft, topRight, botLeft, botRight; if (ltr) { topLeft = docLTR && openStart && first ? leftSide : fromPos.left; topRight = docLTR ? rightSide : wrapX(from, dir, "before"); botLeft = docLTR ? leftSide : wrapX(to, dir, "after"); botRight = docLTR && openEnd && last ? rightSide : toPos.right; } else { topLeft = !docLTR ? leftSide : wrapX(from, dir, "before"); topRight = !docLTR && openStart && first ? rightSide : fromPos.right; botLeft = !docLTR && openEnd && last ? leftSide : toPos.left; botRight = !docLTR ? rightSide : wrapX(to, dir, "after"); } add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom); if (fromPos.bottom < toPos.top) add(leftSide, fromPos.bottom, null, toPos.top); add(botLeft, toPos.top, botRight - botLeft, toPos.bottom); } if (!start || cmpCoords(fromPos, start) < 0) start = fromPos; if (cmpCoords(toPos, start) < 0) start = toPos; if (!end || cmpCoords(fromPos, end) < 0) end = fromPos; if (cmpCoords(toPos, end) < 0) end = toPos; }); return { start, end }; } var sFrom = range$1.from(), sTo = range$1.to(); if (sFrom.line == sTo.line) drawForLine(sFrom.line, sFrom.ch, sTo.ch); else { var fromLine = getLine(doc$1, sFrom.line), toLine = getLine(doc$1, sTo.line); var singleVLine = visualLine(fromLine) == visualLine(toLine); var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; if (singleVLine) if (leftEnd.top < rightStart.top - 2) { add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); } else add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); if (leftEnd.bottom < rightStart.top) add(leftSide, leftEnd.bottom, null, rightStart.top); } output.appendChild(fragment); } function restartBlink(cm) { if (!cm.state.focused) return; var display = cm.display; clearInterval(display.blinker); var on$1 = true; display.cursorDiv.style.visibility = ""; if (cm.options.cursorBlinkRate > 0) display.blinker = setInterval(function() { if (!cm.hasFocus()) onBlur(cm); display.cursorDiv.style.visibility = (on$1 = !on$1) ? "" : "hidden"; }, cm.options.cursorBlinkRate); else if (cm.options.cursorBlinkRate < 0) display.cursorDiv.style.visibility = "hidden"; } function ensureFocus(cm) { if (!cm.hasFocus()) { cm.display.input.focus(); if (!cm.state.focused) onFocus(cm); } } function delayBlurEvent(cm) { cm.state.delayingBlurEvent = true; setTimeout(function() { if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; if (cm.state.focused) onBlur(cm); } }, 100); } function onFocus(cm, e) { if (cm.state.delayingBlurEvent && !cm.state.draggingText) cm.state.delayingBlurEvent = false; if (cm.options.readOnly == "nocursor") return; if (!cm.state.focused) { signal(cm, "focus", cm, e); cm.state.focused = true; addClass(cm.display.wrapper, "CodeMirror-focused"); if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { cm.display.input.reset(); if (webkit) setTimeout(function() { return cm.display.input.reset(true); }, 20); } cm.display.input.receivedFocus(); } restartBlink(cm); } function onBlur(cm, e) { if (cm.state.delayingBlurEvent) return; if (cm.state.focused) { signal(cm, "blur", cm, e); cm.state.focused = false; rmClass(cm.display.wrapper, "CodeMirror-focused"); } clearInterval(cm.display.blinker); setTimeout(function() { if (!cm.state.focused) cm.display.shift = false; }, 150); } function updateHeightsInViewport(cm) { var display = cm.display; var prevBottom = display.lineDiv.offsetTop; var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top); var oldHeight = display.lineDiv.getBoundingClientRect().top; var mustScroll = 0; for (var i$3 = 0; i$3 < display.view.length; i$3++) { var cur = display.view[i$3], wrapping = cm.options.lineWrapping; var height = void 0, width = 0; if (cur.hidden) continue; oldHeight += cur.line.height; if (ie && ie_version < 8) { var bot = cur.node.offsetTop + cur.node.offsetHeight; height = bot - prevBottom; prevBottom = bot; } else { var box = cur.node.getBoundingClientRect(); height = box.bottom - box.top; if (!wrapping && cur.text.firstChild) width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; } var diff = cur.line.height - height; if (diff > .005 || diff < -.005) { if (oldHeight < viewTop) mustScroll -= diff; updateLineHeight(cur.line, height); updateWidgetHeight(cur.line); if (cur.rest) for (var j = 0; j < cur.rest.length; j++) updateWidgetHeight(cur.rest[j]); } if (width > cm.display.sizerWidth) { var chWidth = Math.ceil(width / charWidth(cm.display)); if (chWidth > cm.display.maxLineLength) { cm.display.maxLineLength = chWidth; cm.display.maxLine = cur.line; cm.display.maxLineChanged = true; } } } if (Math.abs(mustScroll) > 2) display.scroller.scrollTop += mustScroll; } function updateWidgetHeight(line) { if (line.widgets) for (var i$3 = 0; i$3 < line.widgets.length; ++i$3) { var w = line.widgets[i$3], parent = w.node.parentNode; if (parent) w.height = parent.offsetHeight; } } function visibleLines(display, doc$1, viewport) { var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; top = Math.floor(top - paddingTop(display)); var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; var from = lineAtHeight(doc$1, top), to = lineAtHeight(doc$1, bottom); if (viewport && viewport.ensure) { var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; if (ensureFrom < from) { from = ensureFrom; to = lineAtHeight(doc$1, heightAtLine(getLine(doc$1, ensureFrom)) + display.wrapper.clientHeight); } else if (Math.min(ensureTo, doc$1.lastLine()) >= to) { from = lineAtHeight(doc$1, heightAtLine(getLine(doc$1, ensureTo)) - display.wrapper.clientHeight); to = ensureTo; } } return { from, to: Math.max(to, from + 1) }; } function maybeScrollWindow(cm, rect) { if (signalDOMEvent(cm, "scrollCursorIntoView")) return; var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; var doc$1 = display.wrapper.ownerDocument; if (rect.top + box.top < 0) doScroll = true; else if (rect.bottom + box.top > (doc$1.defaultView.innerHeight || doc$1.documentElement.clientHeight)) doScroll = false; if (doScroll != null && !phantom) { var scrollNode = elt("div", "​", null, "position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + rect.left + "px; width: " + Math.max(2, rect.right - rect.left) + "px;"); cm.display.lineSpace.appendChild(scrollNode); scrollNode.scrollIntoView(doScroll); cm.display.lineSpace.removeChild(scrollNode); } } function scrollPosIntoView(cm, pos, end, margin) { if (margin == null) margin = 0; var rect; if (!cm.options.lineWrapping && pos == end) { end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos; pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos; } for (var limit = 0; limit < 5; limit++) { var changed = false; var coords = cursorCoords(cm, pos); var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); rect = { left: Math.min(coords.left, endCoords.left), top: Math.min(coords.top, endCoords.top) - margin, right: Math.max(coords.left, endCoords.left), bottom: Math.max(coords.bottom, endCoords.bottom) + margin }; var scrollPos = calculateScrollPos(cm, rect); var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true; } if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true; } if (!changed) break; } return rect; } function scrollIntoView(cm, rect) { var scrollPos = calculateScrollPos(cm, rect); if (scrollPos.scrollTop != null) updateScrollTop(cm, scrollPos.scrollTop); if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft); } function calculateScrollPos(cm, rect) { var display = cm.display, snapMargin = textHeight(cm.display); if (rect.top < 0) rect.top = 0; var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; var screen$1 = displayHeight(cm), result = {}; if (rect.bottom - rect.top > screen$1) rect.bottom = rect.top + screen$1; var docBottom = cm.doc.height + paddingVert(display); var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin; if (rect.top < screentop) result.scrollTop = atTop ? 0 : rect.top; else if (rect.bottom > screentop + screen$1) { var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen$1); if (newTop != screentop) result.scrollTop = newTop; } var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth; var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace; var screenw = displayWidth(cm) - display.gutters.offsetWidth; var tooWide = rect.right - rect.left > screenw; if (tooWide) rect.right = rect.left + screenw; if (rect.left < 10) result.scrollLeft = 0; else if (rect.left < screenleft) result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); else if (rect.right > screenw + screenleft - 3) result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; return result; } function addToScrollTop(cm, top) { if (top == null) return; resolveScrollToPos(cm); cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; } function ensureCursorVisible(cm) { resolveScrollToPos(cm); var cur = cm.getCursor(); cm.curOp.scrollToPos = { from: cur, to: cur, margin: cm.options.cursorScrollMargin }; } function scrollToCoords(cm, x, y) { if (x != null || y != null) resolveScrollToPos(cm); if (x != null) cm.curOp.scrollLeft = x; if (y != null) cm.curOp.scrollTop = y; } function scrollToRange(cm, range$1) { resolveScrollToPos(cm); cm.curOp.scrollToPos = range$1; } function resolveScrollToPos(cm) { var range$1 = cm.curOp.scrollToPos; if (range$1) { cm.curOp.scrollToPos = null; var from = estimateCoords(cm, range$1.from), to = estimateCoords(cm, range$1.to); scrollToCoordsRange(cm, from, to, range$1.margin); } } function scrollToCoordsRange(cm, from, to, margin) { var sPos = calculateScrollPos(cm, { left: Math.min(from.left, to.left), top: Math.min(from.top, to.top) - margin, right: Math.max(from.right, to.right), bottom: Math.max(from.bottom, to.bottom) + margin }); scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop); } function updateScrollTop(cm, val) { if (Math.abs(cm.doc.scrollTop - val) < 2) return; if (!gecko) updateDisplaySimple(cm, { top: val }); setScrollTop(cm, val, true); if (gecko) updateDisplaySimple(cm); startWorker(cm, 100); } function setScrollTop(cm, val, forceScroll) { val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val)); if (cm.display.scroller.scrollTop == val && !forceScroll) return; cm.doc.scrollTop = val; cm.display.scrollbars.setScrollTop(val); if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val; } function setScrollLeft(cm, val, isScroller, forceScroll) { val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth)); if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) return; cm.doc.scrollLeft = val; alignHorizontally(cm); if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val; cm.display.scrollbars.setScrollLeft(val); } function measureForScrollbars(cm) { var d = cm.display, gutterW = d.gutters.offsetWidth; var docH = Math.round(cm.doc.height + paddingVert(cm.display)); return { clientHeight: d.scroller.clientHeight, viewHeight: d.wrapper.clientHeight, scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, viewWidth: d.wrapper.clientWidth, barLeft: cm.options.fixedGutter ? gutterW : 0, docHeight: docH, scrollHeight: docH + scrollGap(cm) + d.barHeight, nativeBarWidth: d.nativeBarWidth, gutterWidth: gutterW }; } var NativeScrollbars = function(place, scroll, cm) { this.cm = cm; var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); vert.tabIndex = horiz.tabIndex = -1; place(vert); place(horiz); on(vert, "scroll", function() { if (vert.clientHeight) scroll(vert.scrollTop, "vertical"); }); on(horiz, "scroll", function() { if (horiz.clientWidth) scroll(horiz.scrollLeft, "horizontal"); }); this.checkedZeroWidth = false; if (ie && ie_version < 8) this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; }; NativeScrollbars.prototype.update = function(measure) { var needsH = measure.scrollWidth > measure.clientWidth + 1; var needsV = measure.scrollHeight > measure.clientHeight + 1; var sWidth = measure.nativeBarWidth; if (needsV) { this.vert.style.display = "block"; this.vert.style.bottom = needsH ? sWidth + "px" : "0"; var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); this.vert.firstChild.style.height = Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; } else { this.vert.scrollTop = 0; this.vert.style.display = ""; this.vert.firstChild.style.height = "0"; } if (needsH) { this.horiz.style.display = "block"; this.horiz.style.right = needsV ? sWidth + "px" : "0"; this.horiz.style.left = measure.barLeft + "px"; var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); this.horiz.firstChild.style.width = Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; } else { this.horiz.style.display = ""; this.horiz.firstChild.style.width = "0"; } if (!this.checkedZeroWidth && measure.clientHeight > 0) { if (sWidth == 0) this.zeroWidthHack(); this.checkedZeroWidth = true; } return { right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0 }; }; NativeScrollbars.prototype.setScrollLeft = function(pos) { if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos; if (this.disableHoriz) this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); }; NativeScrollbars.prototype.setScrollTop = function(pos) { if (this.vert.scrollTop != pos) this.vert.scrollTop = pos; if (this.disableVert) this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); }; NativeScrollbars.prototype.zeroWidthHack = function() { var w = mac && !mac_geMountainLion ? "12px" : "18px"; this.horiz.style.height = this.vert.style.width = w; this.horiz.style.visibility = this.vert.style.visibility = "hidden"; this.disableHoriz = new Delayed(); this.disableVert = new Delayed(); }; NativeScrollbars.prototype.enableZeroWidthBar = function(bar, delay, type) { bar.style.visibility = ""; function maybeDisable() { var box = bar.getBoundingClientRect(); var elt$1 = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1); if (elt$1 != bar) bar.style.visibility = "hidden"; else delay.set(1e3, maybeDisable); } delay.set(1e3, maybeDisable); }; NativeScrollbars.prototype.clear = function() { var parent = this.horiz.parentNode; parent.removeChild(this.horiz); parent.removeChild(this.vert); }; var NullScrollbars = function() {}; NullScrollbars.prototype.update = function() { return { bottom: 0, right: 0 }; }; NullScrollbars.prototype.setScrollLeft = function() {}; NullScrollbars.prototype.setScrollTop = function() {}; NullScrollbars.prototype.clear = function() {}; function updateScrollbars(cm, measure) { if (!measure) measure = measureForScrollbars(cm); var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; updateScrollbarsInner(cm, measure); for (var i$3 = 0; i$3 < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i$3++) { if (startWidth != cm.display.barWidth && cm.options.lineWrapping) updateHeightsInViewport(cm); updateScrollbarsInner(cm, measureForScrollbars(cm)); startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; } } function updateScrollbarsInner(cm, measure) { var d = cm.display; var sizes = d.scrollbars.update(measure); d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"; if (sizes.right && sizes.bottom) { d.scrollbarFiller.style.display = "block"; d.scrollbarFiller.style.height = sizes.bottom + "px"; d.scrollbarFiller.style.width = sizes.right + "px"; } else d.scrollbarFiller.style.display = ""; if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { d.gutterFiller.style.display = "block"; d.gutterFiller.style.height = sizes.bottom + "px"; d.gutterFiller.style.width = measure.gutterWidth + "px"; } else d.gutterFiller.style.display = ""; } var scrollbarModel = { "native": NativeScrollbars, "null": NullScrollbars }; function initScrollbars(cm) { if (cm.display.scrollbars) { cm.display.scrollbars.clear(); if (cm.display.scrollbars.addClass) rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); } cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function(node) { cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); on(node, "mousedown", function() { if (cm.state.focused) setTimeout(function() { return cm.display.input.focus(); }, 0); }); node.setAttribute("cm-not-content", "true"); }, function(pos, axis) { if (axis == "horizontal") setScrollLeft(cm, pos); else updateScrollTop(cm, pos); }, cm); if (cm.display.scrollbars.addClass) addClass(cm.display.wrapper, cm.display.scrollbars.addClass); } var nextOpId = 0; function startOperation(cm) { cm.curOp = { cm, viewChanged: false, startHeight: cm.doc.height, forceUpdate: false, updateInput: 0, typing: false, changeObjs: null, cursorActivityHandlers: null, cursorActivityCalled: 0, selectionChanged: false, updateMaxLine: false, scrollLeft: null, scrollTop: null, scrollToPos: null, focus: false, id: ++nextOpId, markArrays: null }; pushOperation(cm.curOp); } function endOperation(cm) { var op = cm.curOp; if (op) finishOperation(op, function(group) { for (var i$3 = 0; i$3 < group.ops.length; i$3++) group.ops[i$3].cm.curOp = null; endOperations(group); }); } function endOperations(group) { var ops = group.ops; for (var i$3 = 0; i$3 < ops.length; i$3++) endOperation_R1(ops[i$3]); for (var i$1$1 = 0; i$1$1 < ops.length; i$1$1++) endOperation_W1(ops[i$1$1]); for (var i$2$1 = 0; i$2$1 < ops.length; i$2$1++) endOperation_R2(ops[i$2$1]); for (var i$3$1 = 0; i$3$1 < ops.length; i$3$1++) endOperation_W2(ops[i$3$1]); for (var i$4 = 0; i$4 < ops.length; i$4++) endOperation_finish(ops[i$4]); } function endOperation_R1(op) { var cm = op.cm, display = cm.display; maybeClipScrollbars(cm); if (op.updateMaxLine) findMaxLine(cm); op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || op.scrollToPos.to.line >= display.viewTo) || display.maxLineChanged && cm.options.lineWrapping; op.update = op.mustUpdate && new DisplayUpdate(cm, op.mustUpdate && { top: op.scrollTop, ensure: op.scrollToPos }, op.forceUpdate); } function endOperation_W1(op) { op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); } function endOperation_R2(op) { var cm = op.cm, display = cm.display; if (op.updatedDisplay) updateHeightsInViewport(cm); op.barMeasure = measureForScrollbars(cm); if (display.maxLineChanged && !cm.options.lineWrapping) { op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; cm.display.sizerWidth = op.adjustWidthTo; op.barMeasure.scrollWidth = Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); } if (op.updatedDisplay || op.selectionChanged) op.preparedSelection = display.input.prepareSelection(); } function endOperation_W2(op) { var cm = op.cm; if (op.adjustWidthTo != null) { cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; if (op.maxScrollLeft < cm.doc.scrollLeft) setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); cm.display.maxLineChanged = false; } var takeFocus = op.focus && op.focus == activeElt(root(cm)); if (op.preparedSelection) cm.display.input.showSelection(op.preparedSelection, takeFocus); if (op.updatedDisplay || op.startHeight != cm.doc.height) updateScrollbars(cm, op.barMeasure); if (op.updatedDisplay) setDocumentHeight(cm, op.barMeasure); if (op.selectionChanged) restartBlink(cm); if (cm.state.focused && op.updateInput) cm.display.input.reset(op.typing); if (takeFocus) ensureFocus(op.cm); } function endOperation_finish(op) { var cm = op.cm, display = cm.display, doc$1 = cm.doc; if (op.updatedDisplay) postUpdateDisplay(cm, op.update); if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) display.wheelStartX = display.wheelStartY = null; if (op.scrollTop != null) setScrollTop(cm, op.scrollTop, op.forceScroll); if (op.scrollLeft != null) setScrollLeft(cm, op.scrollLeft, true, true); if (op.scrollToPos) { var rect = scrollPosIntoView(cm, clipPos(doc$1, op.scrollToPos.from), clipPos(doc$1, op.scrollToPos.to), op.scrollToPos.margin); maybeScrollWindow(cm, rect); } var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; if (hidden) { for (var i$3 = 0; i$3 < hidden.length; ++i$3) if (!hidden[i$3].lines.length) signal(hidden[i$3], "hide"); } if (unhidden) { for (var i$1$1 = 0; i$1$1 < unhidden.length; ++i$1$1) if (unhidden[i$1$1].lines.length) signal(unhidden[i$1$1], "unhide"); } if (display.wrapper.offsetHeight) doc$1.scrollTop = cm.display.scroller.scrollTop; if (op.changeObjs) signal(cm, "changes", cm, op.changeObjs); if (op.update) op.update.finish(); } function runInOp(cm, f) { if (cm.curOp) return f(); startOperation(cm); try { return f(); } finally { endOperation(cm); } } function operation(cm, f) { return function() { if (cm.curOp) return f.apply(cm, arguments); startOperation(cm); try { return f.apply(cm, arguments); } finally { endOperation(cm); } }; } function methodOp(f) { return function() { if (this.curOp) return f.apply(this, arguments); startOperation(this); try { return f.apply(this, arguments); } finally { endOperation(this); } }; } function docMethodOp(f) { return function() { var cm = this.cm; if (!cm || cm.curOp) return f.apply(this, arguments); startOperation(cm); try { return f.apply(this, arguments); } finally { endOperation(cm); } }; } function startWorker(cm, time) { if (cm.doc.highlightFrontier < cm.display.viewTo) cm.state.highlight.set(time, bind(highlightWorker, cm)); } function highlightWorker(cm) { var doc$1 = cm.doc; if (doc$1.highlightFrontier >= cm.display.viewTo) return; var end = +new Date() + cm.options.workTime; var context = getContextBefore(cm, doc$1.highlightFrontier); var changedLines = []; doc$1.iter(context.line, Math.min(doc$1.first + doc$1.size, cm.display.viewTo + 500), function(line) { if (context.line >= cm.display.viewFrom) { var oldStyles = line.styles; var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc$1.mode, context.state) : null; var highlighted = highlightLine(cm, line, context, true); if (resetState) context.state = resetState; line.styles = highlighted.styles; var oldCls = line.styleClasses, newCls = highlighted.classes; if (newCls) line.styleClasses = newCls; else if (oldCls) line.styleClasses = null; var ischange = !oldStyles || oldStyles.length != line.styles.length || oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); for (var i$3 = 0; !ischange && i$3 < oldStyles.length; ++i$3) ischange = oldStyles[i$3] != line.styles[i$3]; if (ischange) changedLines.push(context.line); line.stateAfter = context.save(); context.nextLine(); } else { if (line.text.length <= cm.options.maxHighlightLength) processLine(cm, line.text, context); line.stateAfter = context.line % 5 == 0 ? context.save() : null; context.nextLine(); } if (+new Date() > end) { startWorker(cm, cm.options.workDelay); return true; } }); doc$1.highlightFrontier = context.line; doc$1.modeFrontier = Math.max(doc$1.modeFrontier, context.line); if (changedLines.length) runInOp(cm, function() { for (var i$3 = 0; i$3 < changedLines.length; i$3++) regLineChange(cm, changedLines[i$3], "text"); }); } var DisplayUpdate = function(cm, viewport, force) { var display = cm.display; this.viewport = viewport; this.visible = visibleLines(display, cm.doc, viewport); this.editorIsHidden = !display.wrapper.offsetWidth; this.wrapperHeight = display.wrapper.clientHeight; this.wrapperWidth = display.wrapper.clientWidth; this.oldDisplayWidth = displayWidth(cm); this.force = force; this.dims = getDimensions(cm); this.events = []; }; DisplayUpdate.prototype.signal = function(emitter, type) { if (hasHandler(emitter, type)) this.events.push(arguments); }; DisplayUpdate.prototype.finish = function() { for (var i$3 = 0; i$3 < this.events.length; i$3++) signal.apply(null, this.events[i$3]); }; function maybeClipScrollbars(cm) { var display = cm.display; if (!display.scrollbarsClipped && display.scroller.offsetWidth) { display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; display.heightForcer.style.height = scrollGap(cm) + "px"; display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; display.scrollbarsClipped = true; } } function selectionSnapshot(cm) { if (cm.hasFocus()) return null; var active = activeElt(root(cm)); if (!active || !contains(cm.display.lineDiv, active)) return null; var result = { activeElt: active }; if (window.getSelection) { var sel = win(cm).getSelection(); if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) { result.anchorNode = sel.anchorNode; result.anchorOffset = sel.anchorOffset; result.focusNode = sel.focusNode; result.focusOffset = sel.focusOffset; } } return result; } function restoreSelection(snapshot) { if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt(rootNode(snapshot.activeElt))) return; snapshot.activeElt.focus(); if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) && snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) { var doc$1 = snapshot.activeElt.ownerDocument; var sel = doc$1.defaultView.getSelection(), range$1 = doc$1.createRange(); range$1.setEnd(snapshot.anchorNode, snapshot.anchorOffset); range$1.collapse(false); sel.removeAllRanges(); sel.addRange(range$1); sel.extend(snapshot.focusNode, snapshot.focusOffset); } } function updateDisplayIfNeeded(cm, update) { var display = cm.display, doc$1 = cm.doc; if (update.editorIsHidden) { resetView(cm); return false; } if (!update.force && update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && display.renderedView == display.view && countDirtyView(cm) == 0) return false; if (maybeUpdateLineNumberWidth(cm)) { resetView(cm); update.dims = getDimensions(cm); } var end = doc$1.first + doc$1.size; var from = Math.max(update.visible.from - cm.options.viewportMargin, doc$1.first); var to = Math.min(end, update.visible.to + cm.options.viewportMargin); if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc$1.first, display.viewFrom); if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo); if (sawCollapsedSpans) { from = visualLineNo(cm.doc, from); to = visualLineEndNo(cm.doc, to); } var different = from != display.viewFrom || to != display.viewTo || display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; adjustView(cm, from, to); display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); cm.display.mover.style.top = display.viewOffset + "px"; var toUpdate = countDirtyView(cm); if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) return false; var selSnapshot = selectionSnapshot(cm); if (toUpdate > 4) display.lineDiv.style.display = "none"; patchDisplay(cm, display.updateLineNumbers, update.dims); if (toUpdate > 4) display.lineDiv.style.display = ""; display.renderedView = display.view; restoreSelection(selSnapshot); removeChildren(display.cursorDiv); removeChildren(display.selectionDiv); display.gutters.style.height = display.sizer.style.minHeight = 0; if (different) { display.lastWrapHeight = update.wrapperHeight; display.lastWrapWidth = update.wrapperWidth; startWorker(cm, 400); } display.updateLineNumbers = null; return true; } function postUpdateDisplay(cm, update) { var viewport = update.viewport; for (var first = true;; first = false) { if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { if (viewport && viewport.top != null) viewport = { top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top) }; update.visible = visibleLines(cm.display, cm.doc, viewport); if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) break; } else if (first) update.visible = visibleLines(cm.display, cm.doc, viewport); if (!updateDisplayIfNeeded(cm, update)) break; updateHeightsInViewport(cm); var barMeasure = measureForScrollbars(cm); updateSelection(cm); updateScrollbars(cm, barMeasure); setDocumentHeight(cm, barMeasure); update.force = false; } update.signal(cm, "update", cm); if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; } } function updateDisplaySimple(cm, viewport) { var update = new DisplayUpdate(cm, viewport); if (updateDisplayIfNeeded(cm, update)) { updateHeightsInViewport(cm); postUpdateDisplay(cm, update); var barMeasure = measureForScrollbars(cm); updateSelection(cm); updateScrollbars(cm, barMeasure); setDocumentHeight(cm, barMeasure); update.finish(); } } function patchDisplay(cm, updateNumbersFrom, dims) { var display = cm.display, lineNumbers = cm.options.lineNumbers; var container = display.lineDiv, cur = container.firstChild; function rm(node$1) { var next = node$1.nextSibling; if (webkit && mac && cm.display.currentWheelTarget == node$1) node$1.style.display = "none"; else node$1.parentNode.removeChild(node$1); return next; } var view = display.view, lineN = display.viewFrom; for (var i$3 = 0; i$3 < view.length; i$3++) { var lineView = view[i$3]; if (lineView.hidden); else if (!lineView.node || lineView.node.parentNode != container) { var node = buildLineElement(cm, lineView, lineN, dims); container.insertBefore(node, cur); } else { while (cur != lineView.node) cur = rm(cur); var updateNumber = lineNumbers && updateNumbersFrom != null && updateNumbersFrom <= lineN && lineView.lineNumber; if (lineView.changes) { if (indexOf(lineView.changes, "gutter") > -1) updateNumber = false; updateLineForChanges(cm, lineView, lineN, dims); } if (updateNumber) { removeChildren(lineView.lineNumber); lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); } cur = lineView.node.nextSibling; } lineN += lineView.size; } while (cur) cur = rm(cur); } function updateGutterSpace(display) { var width = display.gutters.offsetWidth; display.sizer.style.marginLeft = width + "px"; signalLater(display, "gutterChanged", display); } function setDocumentHeight(cm, measure) { cm.display.sizer.style.minHeight = measure.docHeight + "px"; cm.display.heightForcer.style.top = measure.docHeight + "px"; cm.display.gutters.style.height = measure.docHeight + cm.display.barHeight + scrollGap(cm) + "px"; } function alignHorizontally(cm) { var display = cm.display, view = display.view; if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return; var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; var gutterW = display.gutters.offsetWidth, left = comp + "px"; for (var i$3 = 0; i$3 < view.length; i$3++) if (!view[i$3].hidden) { if (cm.options.fixedGutter) { if (view[i$3].gutter) view[i$3].gutter.style.left = left; if (view[i$3].gutterBackground) view[i$3].gutterBackground.style.left = left; } var align = view[i$3].alignable; if (align) for (var j = 0; j < align.length; j++) align[j].style.left = left; } if (cm.options.fixedGutter) display.gutters.style.left = comp + gutterW + "px"; } function maybeUpdateLineNumberWidth(cm) { if (!cm.options.lineNumbers) return false; var doc$1 = cm.doc, last = lineNumberFor(cm.options, doc$1.first + doc$1.size - 1), display = cm.display; if (last.length != display.lineNumChars) { var test = display.measure.appendChild(elt("div", [elt("div", last)], "CodeMirror-linenumber CodeMirror-gutter-elt")); var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; display.lineGutter.style.width = ""; display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; display.lineNumWidth = display.lineNumInnerWidth + padding; display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; display.lineGutter.style.width = display.lineNumWidth + "px"; updateGutterSpace(cm.display); return true; } return false; } function getGutters(gutters, lineNumbers) { var result = [], sawLineNumbers = false; for (var i$3 = 0; i$3 < gutters.length; i$3++) { var name = gutters[i$3], style = null; if (typeof name != "string") { style = name.style; name = name.className; } if (name == "CodeMirror-linenumbers") if (!lineNumbers) continue; else sawLineNumbers = true; result.push({ className: name, style }); } if (lineNumbers && !sawLineNumbers) result.push({ className: "CodeMirror-linenumbers", style: null }); return result; } function renderGutters(display) { var gutters = display.gutters, specs = display.gutterSpecs; removeChildren(gutters); display.lineGutter = null; for (var i$3 = 0; i$3 < specs.length; ++i$3) { var ref$1 = specs[i$3]; var className = ref$1.className; var style = ref$1.style; var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className)); if (style) gElt.style.cssText = style; if (className == "CodeMirror-linenumbers") { display.lineGutter = gElt; gElt.style.width = (display.lineNumWidth || 1) + "px"; } } gutters.style.display = specs.length ? "" : "none"; updateGutterSpace(display); } function updateGutters(cm) { renderGutters(cm.display); regChange(cm); alignHorizontally(cm); } function Display(place, doc$1, input, options) { var d = this; this.input = input; d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); d.scrollbarFiller.setAttribute("cm-not-content", "true"); d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); d.gutterFiller.setAttribute("cm-not-content", "true"); d.lineDiv = eltP("div", null, "CodeMirror-code"); d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); d.cursorDiv = elt("div", null, "CodeMirror-cursors"); d.measure = elt("div", null, "CodeMirror-measure"); d.lineMeasure = elt("div", null, "CodeMirror-measure"); d.lineSpace = eltP("div", [ d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv ], null, "position: relative; outline: none"); var lines = eltP("div", [d.lineSpace], "CodeMirror-lines"); d.mover = elt("div", [lines], null, "position: relative"); d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); d.sizerWidth = null; d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); d.gutters = elt("div", null, "CodeMirror-gutters"); d.lineGutter = null; d.scroller = elt("div", [ d.sizer, d.heightForcer, d.gutters ], "CodeMirror-scroll"); d.scroller.setAttribute("tabIndex", "-1"); d.wrapper = elt("div", [ d.scrollbarFiller, d.gutterFiller, d.scroller ], "CodeMirror"); if (chrome && chrome_version >= 105) d.wrapper.style.clipPath = "inset(0px)"; d.wrapper.setAttribute("translate", "no"); if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } if (!webkit && !(gecko && mobile)) d.scroller.draggable = true; if (place) if (place.appendChild) place.appendChild(d.wrapper); else place(d.wrapper); d.viewFrom = d.viewTo = doc$1.first; d.reportedViewFrom = d.reportedViewTo = doc$1.first; d.view = []; d.renderedView = null; d.externalMeasured = null; d.viewOffset = 0; d.lastWrapHeight = d.lastWrapWidth = 0; d.updateLineNumbers = null; d.nativeBarWidth = d.barHeight = d.barWidth = 0; d.scrollbarsClipped = false; d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; d.alignWidgets = false; d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; d.maxLine = null; d.maxLineLength = 0; d.maxLineChanged = false; d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; d.shift = false; d.selForContextMenu = null; d.activeTouch = null; d.gutterSpecs = getGutters(options.gutters, options.lineNumbers); renderGutters(d); input.init(d); } var wheelSamples = 0, wheelPixelsPerUnit = null; if (ie) wheelPixelsPerUnit = -.53; else if (gecko) wheelPixelsPerUnit = 15; else if (chrome) wheelPixelsPerUnit = -.7; else if (safari) wheelPixelsPerUnit = -1 / 3; function wheelEventDelta(e) { var dx = e.wheelDeltaX, dy = e.wheelDeltaY; if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail; if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail; else if (dy == null) dy = e.wheelDelta; return { x: dx, y: dy }; } function wheelEventPixels(e) { var delta = wheelEventDelta(e); delta.x *= wheelPixelsPerUnit; delta.y *= wheelPixelsPerUnit; return delta; } function onScrollWheel(cm, e) { if (chrome && chrome_version == 102) { if (cm.display.chromeScrollHack == null) cm.display.sizer.style.pointerEvents = "none"; else clearTimeout(cm.display.chromeScrollHack); cm.display.chromeScrollHack = setTimeout(function() { cm.display.chromeScrollHack = null; cm.display.sizer.style.pointerEvents = ""; }, 100); } var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; var pixelsPerUnit = wheelPixelsPerUnit; if (e.deltaMode === 0) { dx = e.deltaX; dy = e.deltaY; pixelsPerUnit = 1; } var display = cm.display, scroll = display.scroller; var canScrollX = scroll.scrollWidth > scroll.clientWidth; var canScrollY = scroll.scrollHeight > scroll.clientHeight; if (!(dx && canScrollX || dy && canScrollY)) return; if (dy && mac && webkit) { outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) for (var i$3 = 0; i$3 < view.length; i$3++) if (view[i$3].node == cur) { cm.display.currentWheelTarget = cur; break outer; } } if (dx && !gecko && !presto && pixelsPerUnit != null) { if (dy && canScrollY) updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit)); setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit)); if (!dy || dy && canScrollY) e_preventDefault(e); display.wheelStartX = null; return; } if (dy && pixelsPerUnit != null) { var pixels = dy * pixelsPerUnit; var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; if (pixels < 0) top = Math.max(0, top + pixels - 50); else bot = Math.min(cm.doc.height, bot + pixels + 50); updateDisplaySimple(cm, { top, bottom: bot }); } if (wheelSamples < 20 && e.deltaMode !== 0) if (display.wheelStartX == null) { display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; display.wheelDX = dx; display.wheelDY = dy; setTimeout(function() { if (display.wheelStartX == null) return; var movedX = scroll.scrollLeft - display.wheelStartX; var movedY = scroll.scrollTop - display.wheelStartY; var sample = movedY && display.wheelDY && movedY / display.wheelDY || movedX && display.wheelDX && movedX / display.wheelDX; display.wheelStartX = display.wheelStartY = null; if (!sample) return; wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); ++wheelSamples; }, 200); } else { display.wheelDX += dx; display.wheelDY += dy; } } var Selection = function(ranges, primIndex) { this.ranges = ranges; this.primIndex = primIndex; }; Selection.prototype.primary = function() { return this.ranges[this.primIndex]; }; Selection.prototype.equals = function(other) { if (other == this) return true; if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false; for (var i$3 = 0; i$3 < this.ranges.length; i$3++) { var here = this.ranges[i$3], there = other.ranges[i$3]; if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) return false; } return true; }; Selection.prototype.deepCopy = function() { var out = []; for (var i$3 = 0; i$3 < this.ranges.length; i$3++) out[i$3] = new Range(copyPos(this.ranges[i$3].anchor), copyPos(this.ranges[i$3].head)); return new Selection(out, this.primIndex); }; Selection.prototype.somethingSelected = function() { for (var i$3 = 0; i$3 < this.ranges.length; i$3++) if (!this.ranges[i$3].empty()) return true; return false; }; Selection.prototype.contains = function(pos, end) { if (!end) end = pos; for (var i$3 = 0; i$3 < this.ranges.length; i$3++) { var range$1 = this.ranges[i$3]; if (cmp(end, range$1.from()) >= 0 && cmp(pos, range$1.to()) <= 0) return i$3; } return -1; }; var Range = function(anchor, head) { this.anchor = anchor; this.head = head; }; Range.prototype.from = function() { return minPos(this.anchor, this.head); }; Range.prototype.to = function() { return maxPos(this.anchor, this.head); }; Range.prototype.empty = function() { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; }; function normalizeSelection(cm, ranges, primIndex) { var mayTouch = cm && cm.options.selectionsMayTouch; var prim = ranges[primIndex]; ranges.sort(function(a, b) { return cmp(a.from(), b.from()); }); primIndex = indexOf(ranges, prim); for (var i$3 = 1; i$3 < ranges.length; i$3++) { var cur = ranges[i$3], prev = ranges[i$3 - 1]; var diff = cmp(prev.to(), cur.from()); if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) { var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; if (i$3 <= primIndex) --primIndex; ranges.splice(--i$3, 2, new Range(inv ? to : from, inv ? from : to)); } } return new Selection(ranges, primIndex); } function simpleSelection(anchor, head) { return new Selection([new Range(anchor, head || anchor)], 0); } function changeEnd(change) { if (!change.text) return change.to; return Pos(change.from.line + change.text.length - 1, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); } function adjustForChange(pos, change) { if (cmp(pos, change.from) < 0) return pos; if (cmp(pos, change.to) <= 0) return changeEnd(change); var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch; return Pos(line, ch); } function computeSelAfterChange(doc$1, change) { var out = []; for (var i$3 = 0; i$3 < doc$1.sel.ranges.length; i$3++) { var range$1 = doc$1.sel.ranges[i$3]; out.push(new Range(adjustForChange(range$1.anchor, change), adjustForChange(range$1.head, change))); } return normalizeSelection(doc$1.cm, out, doc$1.sel.primIndex); } function offsetPos(pos, old, nw) { if (pos.line == old.line) return Pos(nw.line, pos.ch - old.ch + nw.ch); else return Pos(nw.line + (pos.line - old.line), pos.ch); } function computeReplacedSel(doc$1, changes, hint) { var out = []; var oldPrev = Pos(doc$1.first, 0), newPrev = oldPrev; for (var i$3 = 0; i$3 < changes.length; i$3++) { var change = changes[i$3]; var from = offsetPos(change.from, oldPrev, newPrev); var to = offsetPos(changeEnd(change), oldPrev, newPrev); oldPrev = change.to; newPrev = to; if (hint == "around") { var range$1 = doc$1.sel.ranges[i$3], inv = cmp(range$1.head, range$1.anchor) < 0; out[i$3] = new Range(inv ? to : from, inv ? from : to); } else out[i$3] = new Range(from, from); } return new Selection(out, doc$1.sel.primIndex); } function loadMode(cm) { cm.doc.mode = getMode(cm.options, cm.doc.modeOption); resetModeState(cm); } function resetModeState(cm) { cm.doc.iter(function(line) { if (line.stateAfter) line.stateAfter = null; if (line.styles) line.styles = null; }); cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first; startWorker(cm, 100); cm.state.modeGen++; if (cm.curOp) regChange(cm); } function isWholeLineUpdate(doc$1, change) { return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && (!doc$1.cm || doc$1.cm.options.wholeLineUpdateBefore); } function updateDoc(doc$1, change, markedSpans, estimateHeight$1) { function spansFor(n) { return markedSpans ? markedSpans[n] : null; } function update(line, text$1, spans) { updateLine(line, text$1, spans, estimateHeight$1); signalLater(line, "change", line, change); } function linesFor(start, end) { var result = []; for (var i$3 = start; i$3 < end; ++i$3) result.push(new Line(text[i$3], spansFor(i$3), estimateHeight$1)); return result; } var from = change.from, to = change.to, text = change.text; var firstLine = getLine(doc$1, from.line), lastLine = getLine(doc$1, to.line); var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; if (change.full) { doc$1.insert(0, linesFor(0, text.length)); doc$1.remove(text.length, doc$1.size - text.length); } else if (isWholeLineUpdate(doc$1, change)) { var added = linesFor(0, text.length - 1); update(lastLine, lastLine.text, lastSpans); if (nlines) doc$1.remove(from.line, nlines); if (added.length) doc$1.insert(from.line, added); } else if (firstLine == lastLine) if (text.length == 1) update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); else { var added$1 = linesFor(1, text.length - 1); added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight$1)); update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); doc$1.insert(from.line + 1, added$1); } else if (text.length == 1) { update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); doc$1.remove(from.line + 1, nlines); } else { update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); var added$2 = linesFor(1, text.length - 1); if (nlines > 1) doc$1.remove(from.line + 1, nlines - 1); doc$1.insert(from.line + 1, added$2); } signalLater(doc$1, "change", doc$1, change); } function linkedDocs(doc$1, f, sharedHistOnly) { function propagate(doc$2, skip, sharedHist) { if (doc$2.linked) for (var i$3 = 0; i$3 < doc$2.linked.length; ++i$3) { var rel = doc$2.linked[i$3]; if (rel.doc == skip) continue; var shared = sharedHist && rel.sharedHist; if (sharedHistOnly && !shared) continue; f(rel.doc, shared); propagate(rel.doc, doc$2, shared); } } propagate(doc$1, null, true); } function attachDoc(cm, doc$1) { if (doc$1.cm) throw new Error("This document is already in use."); cm.doc = doc$1; doc$1.cm = cm; estimateLineHeights(cm); loadMode(cm); setDirectionClass(cm); cm.options.direction = doc$1.direction; if (!cm.options.lineWrapping) findMaxLine(cm); cm.options.mode = doc$1.modeOption; regChange(cm); } function setDirectionClass(cm) { (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl"); } function directionChanged(cm) { runInOp(cm, function() { setDirectionClass(cm); regChange(cm); }); } function History(prev) { this.done = []; this.undone = []; this.undoDepth = prev ? prev.undoDepth : Infinity; this.lastModTime = this.lastSelTime = 0; this.lastOp = this.lastSelOp = null; this.lastOrigin = this.lastSelOrigin = null; this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1; } function historyChangeFromChange(doc$1, change) { var histChange = { from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc$1, change.from, change.to) }; attachLocalSpans(doc$1, histChange, change.from.line, change.to.line + 1); linkedDocs(doc$1, function(doc$2) { return attachLocalSpans(doc$2, histChange, change.from.line, change.to.line + 1); }, true); return histChange; } function clearSelectionEvents(array) { while (array.length) { var last = lst(array); if (last.ranges) array.pop(); else break; } } function lastChangeEvent(hist, force) { if (force) { clearSelectionEvents(hist.done); return lst(hist.done); } else if (hist.done.length && !lst(hist.done).ranges) return lst(hist.done); else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { hist.done.pop(); return lst(hist.done); } } function addChangeToHistory(doc$1, change, selAfter, opId) { var hist = doc$1.history; hist.undone.length = 0; var time = +new Date(), cur; var last; if ((hist.lastOp == opId || hist.lastOrigin == change.origin && change.origin && (change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc$1.cm ? doc$1.cm.options.historyEventDelay : 500) || change.origin.charAt(0) == "*")) && (cur = lastChangeEvent(hist, hist.lastOp == opId))) { last = lst(cur.changes); if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) last.to = changeEnd(change); else cur.changes.push(historyChangeFromChange(doc$1, change)); } else { var before = lst(hist.done); if (!before || !before.ranges) pushSelectionToHistory(doc$1.sel, hist.done); cur = { changes: [historyChangeFromChange(doc$1, change)], generation: hist.generation }; hist.done.push(cur); while (hist.done.length > hist.undoDepth) { hist.done.shift(); if (!hist.done[0].ranges) hist.done.shift(); } } hist.done.push(selAfter); hist.generation = ++hist.maxGeneration; hist.lastModTime = hist.lastSelTime = time; hist.lastOp = hist.lastSelOp = opId; hist.lastOrigin = hist.lastSelOrigin = change.origin; if (!last) signal(doc$1, "historyAdded"); } function selectionEventCanBeMerged(doc$1, origin, prev, sel) { var ch = origin.charAt(0); return ch == "*" || ch == "+" && prev.ranges.length == sel.ranges.length && prev.somethingSelected() == sel.somethingSelected() && new Date() - doc$1.history.lastSelTime <= (doc$1.cm ? doc$1.cm.options.historyEventDelay : 500); } function addSelectionToHistory(doc$1, sel, opId, options) { var hist = doc$1.history, origin = options && options.origin; if (opId == hist.lastSelOp || origin && hist.lastSelOrigin == origin && (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || selectionEventCanBeMerged(doc$1, origin, lst(hist.done), sel))) hist.done[hist.done.length - 1] = sel; else pushSelectionToHistory(sel, hist.done); hist.lastSelTime = +new Date(); hist.lastSelOrigin = origin; hist.lastSelOp = opId; if (options && options.clearRedo !== false) clearSelectionEvents(hist.undone); } function pushSelectionToHistory(sel, dest) { var top = lst(dest); if (!(top && top.ranges && top.equals(sel))) dest.push(sel); } function attachLocalSpans(doc$1, change, from, to) { var existing = change["spans_" + doc$1.id], n = 0; doc$1.iter(Math.max(doc$1.first, from), Math.min(doc$1.first + doc$1.size, to), function(line) { if (line.markedSpans) (existing || (existing = change["spans_" + doc$1.id] = {}))[n] = line.markedSpans; ++n; }); } function removeClearedSpans(spans) { if (!spans) return null; var out; for (var i$3 = 0; i$3 < spans.length; ++i$3) if (spans[i$3].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i$3); } else if (out) out.push(spans[i$3]); return !out ? spans : out.length ? out : null; } function getOldSpans(doc$1, change) { var found = change["spans_" + doc$1.id]; if (!found) return null; var nw = []; for (var i$3 = 0; i$3 < change.text.length; ++i$3) nw.push(removeClearedSpans(found[i$3])); return nw; } function mergeOldSpans(doc$1, change) { var old = getOldSpans(doc$1, change); var stretched = stretchSpansOverChange(doc$1, change); if (!old) return stretched; if (!stretched) return old; for (var i$3 = 0; i$3 < old.length; ++i$3) { var oldCur = old[i$3], stretchCur = stretched[i$3]; if (oldCur && stretchCur) spans: for (var j = 0; j < stretchCur.length; ++j) { var span = stretchCur[j]; for (var k = 0; k < oldCur.length; ++k) if (oldCur[k].marker == span.marker) continue spans; oldCur.push(span); } else if (stretchCur) old[i$3] = stretchCur; } return old; } function copyHistoryArray(events, newGroup, instantiateSel) { var copy = []; for (var i$3 = 0; i$3 < events.length; ++i$3) { var event = events[i$3]; if (event.ranges) { copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); continue; } var changes = event.changes, newChanges = []; copy.push({ changes: newChanges }); for (var j = 0; j < changes.length; ++j) { var change = changes[j], m = void 0; newChanges.push({ from: change.from, to: change.to, text: change.text }); if (newGroup) { for (var prop$1 in change) if (m = prop$1.match(/^spans_(\d+)$/)) { if (indexOf(newGroup, Number(m[1])) > -1) { lst(newChanges)[prop$1] = change[prop$1]; delete change[prop$1]; } } } } } return copy; } function extendRange(range$1, head, other, extend) { if (extend) { var anchor = range$1.anchor; if (other) { var posBefore = cmp(head, anchor) < 0; if (posBefore != cmp(other, anchor) < 0) { anchor = head; head = other; } else if (posBefore != cmp(head, other) < 0) head = other; } return new Range(anchor, head); } else return new Range(other || head, head); } function extendSelection(doc$1, head, other, options, extend) { if (extend == null) extend = doc$1.cm && (doc$1.cm.display.shift || doc$1.extend); setSelection(doc$1, new Selection([extendRange(doc$1.sel.primary(), head, other, extend)], 0), options); } function extendSelections(doc$1, heads, options) { var out = []; var extend = doc$1.cm && (doc$1.cm.display.shift || doc$1.extend); for (var i$3 = 0; i$3 < doc$1.sel.ranges.length; i$3++) out[i$3] = extendRange(doc$1.sel.ranges[i$3], heads[i$3], null, extend); var newSel = normalizeSelection(doc$1.cm, out, doc$1.sel.primIndex); setSelection(doc$1, newSel, options); } function replaceOneSelection(doc$1, i$3, range$1, options) { var ranges = doc$1.sel.ranges.slice(0); ranges[i$3] = range$1; setSelection(doc$1, normalizeSelection(doc$1.cm, ranges, doc$1.sel.primIndex), options); } function setSimpleSelection(doc$1, anchor, head, options) { setSelection(doc$1, simpleSelection(anchor, head), options); } function filterSelectionChange(doc$1, sel, options) { var obj = { ranges: sel.ranges, update: function(ranges) { this.ranges = []; for (var i$3 = 0; i$3 < ranges.length; i$3++) this.ranges[i$3] = new Range(clipPos(doc$1, ranges[i$3].anchor), clipPos(doc$1, ranges[i$3].head)); }, origin: options && options.origin }; signal(doc$1, "beforeSelectionChange", doc$1, obj); if (doc$1.cm) signal(doc$1.cm, "beforeSelectionChange", doc$1.cm, obj); if (obj.ranges != sel.ranges) return normalizeSelection(doc$1.cm, obj.ranges, obj.ranges.length - 1); else return sel; } function setSelectionReplaceHistory(doc$1, sel, options) { var done = doc$1.history.done, last = lst(done); if (last && last.ranges) { done[done.length - 1] = sel; setSelectionNoUndo(doc$1, sel, options); } else setSelection(doc$1, sel, options); } function setSelection(doc$1, sel, options) { setSelectionNoUndo(doc$1, sel, options); addSelectionToHistory(doc$1, doc$1.sel, doc$1.cm ? doc$1.cm.curOp.id : NaN, options); } function setSelectionNoUndo(doc$1, sel, options) { if (hasHandler(doc$1, "beforeSelectionChange") || doc$1.cm && hasHandler(doc$1.cm, "beforeSelectionChange")) sel = filterSelectionChange(doc$1, sel, options); var bias = options && options.bias || (cmp(sel.primary().head, doc$1.sel.primary().head) < 0 ? -1 : 1); setSelectionInner(doc$1, skipAtomicInSelection(doc$1, sel, bias, true)); if (!(options && options.scroll === false) && doc$1.cm && doc$1.cm.getOption("readOnly") != "nocursor") ensureCursorVisible(doc$1.cm); } function setSelectionInner(doc$1, sel) { if (sel.equals(doc$1.sel)) return; doc$1.sel = sel; if (doc$1.cm) { doc$1.cm.curOp.updateInput = 1; doc$1.cm.curOp.selectionChanged = true; signalCursorActivity(doc$1.cm); } signalLater(doc$1, "cursorActivity", doc$1); } function reCheckSelection(doc$1) { setSelectionInner(doc$1, skipAtomicInSelection(doc$1, doc$1.sel, null, false)); } function skipAtomicInSelection(doc$1, sel, bias, mayClear) { var out; for (var i$3 = 0; i$3 < sel.ranges.length; i$3++) { var range$1 = sel.ranges[i$3]; var old = sel.ranges.length == doc$1.sel.ranges.length && doc$1.sel.ranges[i$3]; var newAnchor = skipAtomic(doc$1, range$1.anchor, old && old.anchor, bias, mayClear); var newHead = range$1.head == range$1.anchor ? newAnchor : skipAtomic(doc$1, range$1.head, old && old.head, bias, mayClear); if (out || newAnchor != range$1.anchor || newHead != range$1.head) { if (!out) out = sel.ranges.slice(0, i$3); out[i$3] = new Range(newAnchor, newHead); } } return out ? normalizeSelection(doc$1.cm, out, sel.primIndex) : sel; } function skipAtomicInner(doc$1, pos, oldPos, dir, mayClear) { var line = getLine(doc$1, pos.line); if (line.markedSpans) for (var i$3 = 0; i$3 < line.markedSpans.length; ++i$3) { var sp = line.markedSpans[i$3], m = sp.marker; var preventCursorLeft = "selectLeft" in m ? !m.selectLeft : m.inclusiveLeft; var preventCursorRight = "selectRight" in m ? !m.selectRight : m.inclusiveRight; if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) { if (mayClear) { signal(m, "beforeCursorEnter"); if (m.explicitlyCleared) if (!line.markedSpans) break; else { --i$3; continue; } } if (!m.atomic) continue; if (oldPos) { var near = m.find(dir < 0 ? 1 : -1), diff = void 0; if (dir < 0 ? preventCursorRight : preventCursorLeft) near = movePos(doc$1, near, -dir, near && near.line == pos.line ? line : null); if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) return skipAtomicInner(doc$1, near, pos, dir, mayClear); } var far = m.find(dir < 0 ? -1 : 1); if (dir < 0 ? preventCursorLeft : preventCursorRight) far = movePos(doc$1, far, dir, far.line == pos.line ? line : null); return far ? skipAtomicInner(doc$1, far, pos, dir, mayClear) : null; } } return pos; } function skipAtomic(doc$1, pos, oldPos, bias, mayClear) { var dir = bias || 1; var found = skipAtomicInner(doc$1, pos, oldPos, dir, mayClear) || !mayClear && skipAtomicInner(doc$1, pos, oldPos, dir, true) || skipAtomicInner(doc$1, pos, oldPos, -dir, mayClear) || !mayClear && skipAtomicInner(doc$1, pos, oldPos, -dir, true); if (!found) { doc$1.cantEdit = true; return Pos(doc$1.first, 0); } return found; } function movePos(doc$1, pos, dir, line) { if (dir < 0 && pos.ch == 0) if (pos.line > doc$1.first) return clipPos(doc$1, Pos(pos.line - 1)); else return null; else if (dir > 0 && pos.ch == (line || getLine(doc$1, pos.line)).text.length) if (pos.line < doc$1.first + doc$1.size - 1) return Pos(pos.line + 1, 0); else return null; else return new Pos(pos.line, pos.ch + dir); } function selectAll(cm) { cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll); } function filterChange(doc$1, change, update) { var obj = { canceled: false, from: change.from, to: change.to, text: change.text, origin: change.origin, cancel: function() { return obj.canceled = true; } }; if (update) obj.update = function(from, to, text, origin) { if (from) obj.from = clipPos(doc$1, from); if (to) obj.to = clipPos(doc$1, to); if (text) obj.text = text; if (origin !== void 0) obj.origin = origin; }; signal(doc$1, "beforeChange", doc$1, obj); if (doc$1.cm) signal(doc$1.cm, "beforeChange", doc$1.cm, obj); if (obj.canceled) { if (doc$1.cm) doc$1.cm.curOp.updateInput = 2; return null; } return { from: obj.from, to: obj.to, text: obj.text, origin: obj.origin }; } function makeChange(doc$1, change, ignoreReadOnly) { if (doc$1.cm) { if (!doc$1.cm.curOp) return operation(doc$1.cm, makeChange)(doc$1, change, ignoreReadOnly); if (doc$1.cm.state.suppressEdits) return; } if (hasHandler(doc$1, "beforeChange") || doc$1.cm && hasHandler(doc$1.cm, "beforeChange")) { change = filterChange(doc$1, change, true); if (!change) return; } var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc$1, change.from, change.to); if (split) for (var i$3 = split.length - 1; i$3 >= 0; --i$3) makeChangeInner(doc$1, { from: split[i$3].from, to: split[i$3].to, text: i$3 ? [""] : change.text, origin: change.origin }); else makeChangeInner(doc$1, change); } function makeChangeInner(doc$1, change) { if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) return; var selAfter = computeSelAfterChange(doc$1, change); addChangeToHistory(doc$1, change, selAfter, doc$1.cm ? doc$1.cm.curOp.id : NaN); makeChangeSingleDoc(doc$1, change, selAfter, stretchSpansOverChange(doc$1, change)); var rebased = []; linkedDocs(doc$1, function(doc$2, sharedHist) { if (!sharedHist && indexOf(rebased, doc$2.history) == -1) { rebaseHist(doc$2.history, change); rebased.push(doc$2.history); } makeChangeSingleDoc(doc$2, change, null, stretchSpansOverChange(doc$2, change)); }); } function makeChangeFromHistory(doc$1, type, allowSelectionOnly) { var suppress = doc$1.cm && doc$1.cm.state.suppressEdits; if (suppress && !allowSelectionOnly) return; var hist = doc$1.history, event, selAfter = doc$1.sel; var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; var i$3 = 0; for (; i$3 < source.length; i$3++) { event = source[i$3]; if (allowSelectionOnly ? event.ranges && !event.equals(doc$1.sel) : !event.ranges) break; } if (i$3 == source.length) return; hist.lastOrigin = hist.lastSelOrigin = null; for (;;) { event = source.pop(); if (event.ranges) { pushSelectionToHistory(event, dest); if (allowSelectionOnly && !event.equals(doc$1.sel)) { setSelection(doc$1, event, { clearRedo: false }); return; } selAfter = event; } else if (suppress) { source.push(event); return; } else break; } var antiChanges = []; pushSelectionToHistory(selAfter, dest); dest.push({ changes: antiChanges, generation: hist.generation }); hist.generation = event.generation || ++hist.maxGeneration; var filter = hasHandler(doc$1, "beforeChange") || doc$1.cm && hasHandler(doc$1.cm, "beforeChange"); var loop = function(i$4) { var change = event.changes[i$4]; change.origin = type; if (filter && !filterChange(doc$1, change, false)) { source.length = 0; return {}; } antiChanges.push(historyChangeFromChange(doc$1, change)); var after = i$4 ? computeSelAfterChange(doc$1, change) : lst(source); makeChangeSingleDoc(doc$1, change, after, mergeOldSpans(doc$1, change)); if (!i$4 && doc$1.cm) doc$1.cm.scrollIntoView({ from: change.from, to: changeEnd(change) }); var rebased = []; linkedDocs(doc$1, function(doc$2, sharedHist) { if (!sharedHist && indexOf(rebased, doc$2.history) == -1) { rebaseHist(doc$2.history, change); rebased.push(doc$2.history); } makeChangeSingleDoc(doc$2, change, null, mergeOldSpans(doc$2, change)); }); }; for (var i$1$1 = event.changes.length - 1; i$1$1 >= 0; --i$1$1) { var returned = loop(i$1$1); if (returned) return returned.v; } } function shiftDoc(doc$1, distance) { if (distance == 0) return; doc$1.first += distance; doc$1.sel = new Selection(map(doc$1.sel.ranges, function(range$1) { return new Range(Pos(range$1.anchor.line + distance, range$1.anchor.ch), Pos(range$1.head.line + distance, range$1.head.ch)); }), doc$1.sel.primIndex); if (doc$1.cm) { regChange(doc$1.cm, doc$1.first, doc$1.first - distance, distance); for (var d = doc$1.cm.display, l = d.viewFrom; l < d.viewTo; l++) regLineChange(doc$1.cm, l, "gutter"); } } function makeChangeSingleDoc(doc$1, change, selAfter, spans) { if (doc$1.cm && !doc$1.cm.curOp) return operation(doc$1.cm, makeChangeSingleDoc)(doc$1, change, selAfter, spans); if (change.to.line < doc$1.first) { shiftDoc(doc$1, change.text.length - 1 - (change.to.line - change.from.line)); return; } if (change.from.line > doc$1.lastLine()) return; if (change.from.line < doc$1.first) { var shift = change.text.length - 1 - (doc$1.first - change.from.line); shiftDoc(doc$1, shift); change = { from: Pos(doc$1.first, 0), to: Pos(change.to.line + shift, change.to.ch), text: [lst(change.text)], origin: change.origin }; } var last = doc$1.lastLine(); if (change.to.line > last) change = { from: change.from, to: Pos(last, getLine(doc$1, last).text.length), text: [change.text[0]], origin: change.origin }; change.removed = getBetween(doc$1, change.from, change.to); if (!selAfter) selAfter = computeSelAfterChange(doc$1, change); if (doc$1.cm) makeChangeSingleDocInEditor(doc$1.cm, change, spans); else updateDoc(doc$1, change, spans); setSelectionNoUndo(doc$1, selAfter, sel_dontScroll); if (doc$1.cantEdit && skipAtomic(doc$1, Pos(doc$1.firstLine(), 0))) doc$1.cantEdit = false; } function makeChangeSingleDocInEditor(cm, change, spans) { var doc$1 = cm.doc, display = cm.display, from = change.from, to = change.to; var recomputeMaxLength = false, checkWidthStart = from.line; if (!cm.options.lineWrapping) { checkWidthStart = lineNo(visualLine(getLine(doc$1, from.line))); doc$1.iter(checkWidthStart, to.line + 1, function(line) { if (line == display.maxLine) { recomputeMaxLength = true; return true; } }); } if (doc$1.sel.contains(change.from, change.to) > -1) signalCursorActivity(cm); updateDoc(doc$1, change, spans, estimateHeight(cm)); if (!cm.options.lineWrapping) { doc$1.iter(checkWidthStart, from.line + change.text.length, function(line) { var len = lineLength(line); if (len > display.maxLineLength) { display.maxLine = line; display.maxLineLength = len; display.maxLineChanged = true; recomputeMaxLength = false; } }); if (recomputeMaxLength) cm.curOp.updateMaxLine = true; } retreatFrontier(doc$1, from.line); startWorker(cm, 400); var lendiff = change.text.length - (to.line - from.line) - 1; if (change.full) regChange(cm); else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) regLineChange(cm, from.line, "text"); else regChange(cm, from.line, to.line + 1, lendiff); var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); if (changeHandler || changesHandler) { var obj = { from, to, text: change.text, removed: change.removed, origin: change.origin }; if (changeHandler) signalLater(cm, "change", cm, obj); if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); } cm.display.selForContextMenu = null; } function replaceRange(doc$1, code, from, to, origin) { var assign; if (!to) to = from; if (cmp(to, from) < 0) assign = [to, from], from = assign[0], to = assign[1]; if (typeof code == "string") code = doc$1.splitLines(code); makeChange(doc$1, { from, to, text: code, origin }); } function rebaseHistSelSingle(pos, from, to, diff) { if (to < pos.line) pos.line += diff; else if (from < pos.line) { pos.line = from; pos.ch = 0; } } function rebaseHistArray(array, from, to, diff) { for (var i$3 = 0; i$3 < array.length; ++i$3) { var sub = array[i$3], ok = true; if (sub.ranges) { if (!sub.copied) { sub = array[i$3] = sub.deepCopy(); sub.copied = true; } for (var j = 0; j < sub.ranges.length; j++) { rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); } continue; } for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) { var cur = sub.changes[j$1]; if (to < cur.from.line) { cur.from = Pos(cur.from.line + diff, cur.from.ch); cur.to = Pos(cur.to.line + diff, cur.to.ch); } else if (from <= cur.to.line) { ok = false; break; } } if (!ok) { array.splice(0, i$3 + 1); i$3 = 0; } } } function rebaseHist(hist, change) { var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; rebaseHistArray(hist.done, from, to, diff); rebaseHistArray(hist.undone, from, to, diff); } function changeLine(doc$1, handle, changeType, op) { var no = handle, line = handle; if (typeof handle == "number") line = getLine(doc$1, clipLine(doc$1, handle)); else no = lineNo(handle); if (no == null) return null; if (op(line, no) && doc$1.cm) regLineChange(doc$1.cm, no, changeType); return line; } function LeafChunk(lines) { this.lines = lines; this.parent = null; var height = 0; for (var i$3 = 0; i$3 < lines.length; ++i$3) { lines[i$3].parent = this; height += lines[i$3].height; } this.height = height; } LeafChunk.prototype = { chunkSize: function() { return this.lines.length; }, removeInner: function(at, n) { for (var i$3 = at, e = at + n; i$3 < e; ++i$3) { var line = this.lines[i$3]; this.height -= line.height; cleanUpLine(line); signalLater(line, "delete"); } this.lines.splice(at, n); }, collapse: function(lines) { lines.push.apply(lines, this.lines); }, insertInner: function(at, lines, height) { this.height += height; this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); for (var i$3 = 0; i$3 < lines.length; ++i$3) lines[i$3].parent = this; }, iterN: function(at, n, op) { for (var e = at + n; at < e; ++at) if (op(this.lines[at])) return true; } }; function BranchChunk(children) { this.children = children; var size = 0, height = 0; for (var i$3 = 0; i$3 < children.length; ++i$3) { var ch = children[i$3]; size += ch.chunkSize(); height += ch.height; ch.parent = this; } this.size = size; this.height = height; this.parent = null; } BranchChunk.prototype = { chunkSize: function() { return this.size; }, removeInner: function(at, n) { this.size -= n; for (var i$3 = 0; i$3 < this.children.length; ++i$3) { var child = this.children[i$3], sz = child.chunkSize(); if (at < sz) { var rm = Math.min(n, sz - at), oldHeight = child.height; child.removeInner(at, rm); this.height -= oldHeight - child.height; if (sz == rm) { this.children.splice(i$3--, 1); child.parent = null; } if ((n -= rm) == 0) break; at = 0; } else at -= sz; } if (this.size - n < 25 && (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { var lines = []; this.collapse(lines); this.children = [new LeafChunk(lines)]; this.children[0].parent = this; } }, collapse: function(lines) { for (var i$3 = 0; i$3 < this.children.length; ++i$3) this.children[i$3].collapse(lines); }, insertInner: function(at, lines, height) { this.size += lines.length; this.height += height; for (var i$3 = 0; i$3 < this.children.length; ++i$3) { var child = this.children[i$3], sz = child.chunkSize(); if (at <= sz) { child.insertInner(at, lines, height); if (child.lines && child.lines.length > 50) { var remaining = child.lines.length % 25 + 25; for (var pos = remaining; pos < child.lines.length;) { var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)); child.height -= leaf.height; this.children.splice(++i$3, 0, leaf); leaf.parent = this; } child.lines = child.lines.slice(0, remaining); this.maybeSpill(); } break; } at -= sz; } }, maybeSpill: function() { if (this.children.length <= 10) return; var me = this; do { var spilled = me.children.splice(me.children.length - 5, 5); var sibling = new BranchChunk(spilled); if (!me.parent) { var copy = new BranchChunk(me.children); copy.parent = me; me.children = [copy, sibling]; me = copy; } else { me.size -= sibling.size; me.height -= sibling.height; var myIndex = indexOf(me.parent.children, me); me.parent.children.splice(myIndex + 1, 0, sibling); } sibling.parent = me.parent; } while (me.children.length > 10); me.parent.maybeSpill(); }, iterN: function(at, n, op) { for (var i$3 = 0; i$3 < this.children.length; ++i$3) { var child = this.children[i$3], sz = child.chunkSize(); if (at < sz) { var used = Math.min(n, sz - at); if (child.iterN(at, used, op)) return true; if ((n -= used) == 0) break; at = 0; } else at -= sz; } } }; var LineWidget = function(doc$1, node, options) { if (options) { for (var opt in options) if (options.hasOwnProperty(opt)) this[opt] = options[opt]; } this.doc = doc$1; this.node = node; }; LineWidget.prototype.clear = function() { var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); if (no == null || !ws) return; for (var i$3 = 0; i$3 < ws.length; ++i$3) if (ws[i$3] == this) ws.splice(i$3--, 1); if (!ws.length) line.widgets = null; var height = widgetHeight(this); updateLineHeight(line, Math.max(0, line.height - height)); if (cm) { runInOp(cm, function() { adjustScrollWhenAboveVisible(cm, line, -height); regLineChange(cm, no, "widget"); }); signalLater(cm, "lineWidgetCleared", cm, this, no); } }; LineWidget.prototype.changed = function() { var this$1 = this; var oldH = this.height, cm = this.doc.cm, line = this.line; this.height = null; var diff = widgetHeight(this) - oldH; if (!diff) return; if (!lineIsHidden(this.doc, line)) updateLineHeight(line, line.height + diff); if (cm) runInOp(cm, function() { cm.curOp.forceUpdate = true; adjustScrollWhenAboveVisible(cm, line, diff); signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line)); }); }; eventMixin(LineWidget); function adjustScrollWhenAboveVisible(cm, line, diff) { if (heightAtLine(line) < (cm.curOp && cm.curOp.scrollTop || cm.doc.scrollTop)) addToScrollTop(cm, diff); } function addLineWidget(doc$1, handle, node, options) { var widget = new LineWidget(doc$1, node, options); var cm = doc$1.cm; if (cm && widget.noHScroll) cm.display.alignWidgets = true; changeLine(doc$1, handle, "widget", function(line) { var widgets = line.widgets || (line.widgets = []); if (widget.insertAt == null) widgets.push(widget); else widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); widget.line = line; if (cm && !lineIsHidden(doc$1, line)) { var aboveVisible = heightAtLine(line) < doc$1.scrollTop; updateLineHeight(line, line.height + widgetHeight(widget)); if (aboveVisible) addToScrollTop(cm, widget.height); cm.curOp.forceUpdate = true; } return true; }); if (cm) signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); return widget; } var nextMarkerId = 0; var TextMarker = function(doc$1, type) { this.lines = []; this.type = type; this.doc = doc$1; this.id = ++nextMarkerId; }; TextMarker.prototype.clear = function() { if (this.explicitlyCleared) return; var cm = this.doc.cm, withOp = cm && !cm.curOp; if (withOp) startOperation(cm); if (hasHandler(this, "clear")) { var found = this.find(); if (found) signalLater(this, "clear", found.from, found.to); } var min = null, max = null; for (var i$3 = 0; i$3 < this.lines.length; ++i$3) { var line = this.lines[i$3]; var span = getMarkedSpanFor(line.markedSpans, this); if (cm && !this.collapsed) regLineChange(cm, lineNo(line), "text"); else if (cm) { if (span.to != null) max = lineNo(line); if (span.from != null) min = lineNo(line); } line.markedSpans = removeMarkedSpan(line.markedSpans, span); if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) updateLineHeight(line, textHeight(cm.display)); } if (cm && this.collapsed && !cm.options.lineWrapping) for (var i$1$1 = 0; i$1$1 < this.lines.length; ++i$1$1) { var visual = visualLine(this.lines[i$1$1]), len = lineLength(visual); if (len > cm.display.maxLineLength) { cm.display.maxLine = visual; cm.display.maxLineLength = len; cm.display.maxLineChanged = true; } } if (min != null && cm && this.collapsed) regChange(cm, min, max + 1); this.lines.length = 0; this.explicitlyCleared = true; if (this.atomic && this.doc.cantEdit) { this.doc.cantEdit = false; if (cm) reCheckSelection(cm.doc); } if (cm) signalLater(cm, "markerCleared", cm, this, min, max); if (withOp) endOperation(cm); if (this.parent) this.parent.clear(); }; TextMarker.prototype.find = function(side, lineObj) { if (side == null && this.type == "bookmark") side = 1; var from, to; for (var i$3 = 0; i$3 < this.lines.length; ++i$3) { var line = this.lines[i$3]; var span = getMarkedSpanFor(line.markedSpans, this); if (span.from != null) { from = Pos(lineObj ? line : lineNo(line), span.from); if (side == -1) return from; } if (span.to != null) { to = Pos(lineObj ? line : lineNo(line), span.to); if (side == 1) return to; } } return from && { from, to }; }; TextMarker.prototype.changed = function() { var this$1 = this; var pos = this.find(-1, true), widget = this, cm = this.doc.cm; if (!pos || !cm) return; runInOp(cm, function() { var line = pos.line, lineN = lineNo(pos.line); var view = findViewForLine(cm, lineN); if (view) { clearLineMeasurementCacheFor(view); cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; } cm.curOp.updateMaxLine = true; if (!lineIsHidden(widget.doc, line) && widget.height != null) { var oldHeight = widget.height; widget.height = null; var dHeight = widgetHeight(widget) - oldHeight; if (dHeight) updateLineHeight(line, line.height + dHeight); } signalLater(cm, "markerChanged", cm, this$1); }); }; TextMarker.prototype.attachLine = function(line) { if (!this.lines.length && this.doc.cm) { var op = this.doc.cm.curOp; if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); } this.lines.push(line); }; TextMarker.prototype.detachLine = function(line) { this.lines.splice(indexOf(this.lines, line), 1); if (!this.lines.length && this.doc.cm) { var op = this.doc.cm.curOp; (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); } }; eventMixin(TextMarker); function markText(doc$1, from, to, options, type) { if (options && options.shared) return markTextShared(doc$1, from, to, options, type); if (doc$1.cm && !doc$1.cm.curOp) return operation(doc$1.cm, markText)(doc$1, from, to, options, type); var marker = new TextMarker(doc$1, type), diff = cmp(from, to); if (options) copyObj(options, marker, false); if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) return marker; if (marker.replacedWith) { marker.collapsed = true; marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget"); if (!options.handleMouseEvents) marker.widgetNode.setAttribute("cm-ignore-events", "true"); if (options.insertLeft) marker.widgetNode.insertLeft = true; } if (marker.collapsed) { if (conflictingCollapsedRange(doc$1, from.line, from, to, marker) || from.line != to.line && conflictingCollapsedRange(doc$1, to.line, from, to, marker)) throw new Error("Inserting collapsed marker partially overlapping an existing one"); seeCollapsedSpans(); } if (marker.addToHistory) addChangeToHistory(doc$1, { from, to, origin: "markText" }, doc$1.sel, NaN); var curLine = from.line, cm = doc$1.cm, updateMaxLine; doc$1.iter(curLine, to.line + 1, function(line) { if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) updateMaxLine = true; if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0); addMarkedSpan(line, new MarkedSpan(marker, curLine == from.line ? from.ch : null, curLine == to.line ? to.ch : null), doc$1.cm && doc$1.cm.curOp); ++curLine; }); if (marker.collapsed) doc$1.iter(from.line, to.line + 1, function(line) { if (lineIsHidden(doc$1, line)) updateLineHeight(line, 0); }); if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { return marker.clear(); }); if (marker.readOnly) { seeReadOnlySpans(); if (doc$1.history.done.length || doc$1.history.undone.length) doc$1.clearHistory(); } if (marker.collapsed) { marker.id = ++nextMarkerId; marker.atomic = true; } if (cm) { if (updateMaxLine) cm.curOp.updateMaxLine = true; if (marker.collapsed) regChange(cm, from.line, to.line + 1); else if (marker.className || marker.startStyle || marker.endStyle || marker.css || marker.attributes || marker.title) for (var i$3 = from.line; i$3 <= to.line; i$3++) regLineChange(cm, i$3, "text"); if (marker.atomic) reCheckSelection(cm.doc); signalLater(cm, "markerAdded", cm, marker); } return marker; } var SharedTextMarker = function(markers, primary) { this.markers = markers; this.primary = primary; for (var i$3 = 0; i$3 < markers.length; ++i$3) markers[i$3].parent = this; }; SharedTextMarker.prototype.clear = function() { if (this.explicitlyCleared) return; this.explicitlyCleared = true; for (var i$3 = 0; i$3 < this.markers.length; ++i$3) this.markers[i$3].clear(); signalLater(this, "clear"); }; SharedTextMarker.prototype.find = function(side, lineObj) { return this.primary.find(side, lineObj); }; eventMixin(SharedTextMarker); function markTextShared(doc$1, from, to, options, type) { options = copyObj(options); options.shared = false; var markers = [markText(doc$1, from, to, options, type)], primary = markers[0]; var widget = options.widgetNode; linkedDocs(doc$1, function(doc$2) { if (widget) options.widgetNode = widget.cloneNode(true); markers.push(markText(doc$2, clipPos(doc$2, from), clipPos(doc$2, to), options, type)); for (var i$3 = 0; i$3 < doc$2.linked.length; ++i$3) if (doc$2.linked[i$3].isParent) return; primary = lst(markers); }); return new SharedTextMarker(markers, primary); } function findSharedMarkers(doc$1) { return doc$1.findMarks(Pos(doc$1.first, 0), doc$1.clipPos(Pos(doc$1.lastLine())), function(m) { return m.parent; }); } function copySharedMarkers(doc$1, markers) { for (var i$3 = 0; i$3 < markers.length; i$3++) { var marker = markers[i$3], pos = marker.find(); var mFrom = doc$1.clipPos(pos.from), mTo = doc$1.clipPos(pos.to); if (cmp(mFrom, mTo)) { var subMark = markText(doc$1, mFrom, mTo, marker.primary, marker.primary.type); marker.markers.push(subMark); subMark.parent = marker; } } } function detachSharedMarkers(markers) { var loop = function(i$4) { var marker = markers[i$4], linked = [marker.primary.doc]; linkedDocs(marker.primary.doc, function(d) { return linked.push(d); }); for (var j = 0; j < marker.markers.length; j++) { var subMarker = marker.markers[j]; if (indexOf(linked, subMarker.doc) == -1) { subMarker.parent = null; marker.markers.splice(j--, 1); } } }; for (var i$3 = 0; i$3 < markers.length; i$3++) loop(i$3); } var nextDocId = 0; var Doc = function(text, mode, firstLine, lineSep, direction) { if (!(this instanceof Doc)) return new Doc(text, mode, firstLine, lineSep, direction); if (firstLine == null) firstLine = 0; BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); this.first = firstLine; this.scrollTop = this.scrollLeft = 0; this.cantEdit = false; this.cleanGeneration = 1; this.modeFrontier = this.highlightFrontier = firstLine; var start = Pos(firstLine, 0); this.sel = simpleSelection(start); this.history = new History(null); this.id = ++nextDocId; this.modeOption = mode; this.lineSep = lineSep; this.direction = direction == "rtl" ? "rtl" : "ltr"; this.extend = false; if (typeof text == "string") text = this.splitLines(text); updateDoc(this, { from: start, to: start, text }); setSelection(this, simpleSelection(start), sel_dontScroll); }; Doc.prototype = createObj(BranchChunk.prototype, { constructor: Doc, iter: function(from, to, op) { if (op) this.iterN(from - this.first, to - from, op); else this.iterN(this.first, this.first + this.size, from); }, insert: function(at, lines) { var height = 0; for (var i$3 = 0; i$3 < lines.length; ++i$3) height += lines[i$3].height; this.insertInner(at - this.first, lines, height); }, remove: function(at, n) { this.removeInner(at - this.first, n); }, getValue: function(lineSep) { var lines = getLines(this, this.first, this.first + this.size); if (lineSep === false) return lines; return lines.join(lineSep || this.lineSeparator()); }, setValue: docMethodOp(function(code) { var top = Pos(this.first, 0), last = this.first + this.size - 1; makeChange(this, { from: top, to: Pos(last, getLine(this, last).text.length), text: this.splitLines(code), origin: "setValue", full: true }, true); if (this.cm) scrollToCoords(this.cm, 0, 0); setSelection(this, simpleSelection(top), sel_dontScroll); }), replaceRange: function(code, from, to, origin) { from = clipPos(this, from); to = to ? clipPos(this, to) : from; replaceRange(this, code, from, to, origin); }, getRange: function(from, to, lineSep) { var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); if (lineSep === false) return lines; if (lineSep === "") return lines.join(""); return lines.join(lineSep || this.lineSeparator()); }, getLine: function(line) { var l = this.getLineHandle(line); return l && l.text; }, getLineHandle: function(line) { if (isLine(this, line)) return getLine(this, line); }, getLineNumber: function(line) { return lineNo(line); }, getLineHandleVisualStart: function(line) { if (typeof line == "number") line = getLine(this, line); return visualLine(line); }, lineCount: function() { return this.size; }, firstLine: function() { return this.first; }, lastLine: function() { return this.first + this.size - 1; }, clipPos: function(pos) { return clipPos(this, pos); }, getCursor: function(start) { var range$1 = this.sel.primary(), pos; if (start == null || start == "head") pos = range$1.head; else if (start == "anchor") pos = range$1.anchor; else if (start == "end" || start == "to" || start === false) pos = range$1.to(); else pos = range$1.from(); return pos; }, listSelections: function() { return this.sel.ranges; }, somethingSelected: function() { return this.sel.somethingSelected(); }, setCursor: docMethodOp(function(line, ch, options) { setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); }), setSelection: docMethodOp(function(anchor, head, options) { setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); }), extendSelection: docMethodOp(function(head, other, options) { extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); }), extendSelections: docMethodOp(function(heads, options) { extendSelections(this, clipPosArray(this, heads), options); }), extendSelectionsBy: docMethodOp(function(f, options) { var heads = map(this.sel.ranges, f); extendSelections(this, clipPosArray(this, heads), options); }), setSelections: docMethodOp(function(ranges, primary, options) { if (!ranges.length) return; var out = []; for (var i$3 = 0; i$3 < ranges.length; i$3++) out[i$3] = new Range(clipPos(this, ranges[i$3].anchor), clipPos(this, ranges[i$3].head || ranges[i$3].anchor)); if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex); setSelection(this, normalizeSelection(this.cm, out, primary), options); }), addSelection: docMethodOp(function(anchor, head, options) { var ranges = this.sel.ranges.slice(0); ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options); }), getSelection: function(lineSep) { var ranges = this.sel.ranges, lines; for (var i$3 = 0; i$3 < ranges.length; i$3++) { var sel = getBetween(this, ranges[i$3].from(), ranges[i$3].to()); lines = lines ? lines.concat(sel) : sel; } if (lineSep === false) return lines; else return lines.join(lineSep || this.lineSeparator()); }, getSelections: function(lineSep) { var parts = [], ranges = this.sel.ranges; for (var i$3 = 0; i$3 < ranges.length; i$3++) { var sel = getBetween(this, ranges[i$3].from(), ranges[i$3].to()); if (lineSep !== false) sel = sel.join(lineSep || this.lineSeparator()); parts[i$3] = sel; } return parts; }, replaceSelection: function(code, collapse, origin) { var dup = []; for (var i$3 = 0; i$3 < this.sel.ranges.length; i$3++) dup[i$3] = code; this.replaceSelections(dup, collapse, origin || "+input"); }, replaceSelections: docMethodOp(function(code, collapse, origin) { var changes = [], sel = this.sel; for (var i$3 = 0; i$3 < sel.ranges.length; i$3++) { var range$1 = sel.ranges[i$3]; changes[i$3] = { from: range$1.from(), to: range$1.to(), text: this.splitLines(code[i$3]), origin }; } var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); for (var i$1$1 = changes.length - 1; i$1$1 >= 0; i$1$1--) makeChange(this, changes[i$1$1]); if (newSel) setSelectionReplaceHistory(this, newSel); else if (this.cm) ensureCursorVisible(this.cm); }), undo: docMethodOp(function() { makeChangeFromHistory(this, "undo"); }), redo: docMethodOp(function() { makeChangeFromHistory(this, "redo"); }), undoSelection: docMethodOp(function() { makeChangeFromHistory(this, "undo", true); }), redoSelection: docMethodOp(function() { makeChangeFromHistory(this, "redo", true); }), setExtending: function(val) { this.extend = val; }, getExtending: function() { return this.extend; }, historySize: function() { var hist = this.history, done = 0, undone = 0; for (var i$3 = 0; i$3 < hist.done.length; i$3++) if (!hist.done[i$3].ranges) ++done; for (var i$1$1 = 0; i$1$1 < hist.undone.length; i$1$1++) if (!hist.undone[i$1$1].ranges) ++undone; return { undo: done, redo: undone }; }, clearHistory: function() { var this$1 = this; this.history = new History(this.history); linkedDocs(this, function(doc$1) { return doc$1.history = this$1.history; }, true); }, markClean: function() { this.cleanGeneration = this.changeGeneration(true); }, changeGeneration: function(forceSplit) { if (forceSplit) this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; return this.history.generation; }, isClean: function(gen) { return this.history.generation == (gen || this.cleanGeneration); }, getHistory: function() { return { done: copyHistoryArray(this.history.done), undone: copyHistoryArray(this.history.undone) }; }, setHistory: function(histData) { var hist = this.history = new History(this.history); hist.done = copyHistoryArray(histData.done.slice(0), null, true); hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); }, setGutterMarker: docMethodOp(function(line, gutterID, value) { return changeLine(this, line, "gutter", function(line$1) { var markers = line$1.gutterMarkers || (line$1.gutterMarkers = {}); markers[gutterID] = value; if (!value && isEmpty(markers)) line$1.gutterMarkers = null; return true; }); }), clearGutter: docMethodOp(function(gutterID) { var this$1 = this; this.iter(function(line) { if (line.gutterMarkers && line.gutterMarkers[gutterID]) changeLine(this$1, line, "gutter", function() { line.gutterMarkers[gutterID] = null; if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null; return true; }); }); }), lineInfo: function(line) { var n; if (typeof line == "number") { if (!isLine(this, line)) return null; n = line; line = getLine(this, line); if (!line) return null; } else { n = lineNo(line); if (n == null) return null; } return { line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, widgets: line.widgets }; }, addLineClass: docMethodOp(function(handle, where, cls) { return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { var prop$1 = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; if (!line[prop$1]) line[prop$1] = cls; else if (classTest(cls).test(line[prop$1])) return false; else line[prop$1] += " " + cls; return true; }); }), removeLineClass: docMethodOp(function(handle, where, cls) { return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { var prop$1 = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; var cur = line[prop$1]; if (!cur) return false; else if (cls == null) line[prop$1] = null; else { var found = cur.match(classTest(cls)); if (!found) return false; var end = found.index + found[0].length; line[prop$1] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; } return true; }); }), addLineWidget: docMethodOp(function(handle, node, options) { return addLineWidget(this, handle, node, options); }), removeLineWidget: function(widget) { widget.clear(); }, markText: function(from, to, options) { return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range"); }, setBookmark: function(pos, options) { var realOpts = { replacedWith: options && (options.nodeType == null ? options.widget : options), insertLeft: options && options.insertLeft, clearWhenEmpty: false, shared: options && options.shared, handleMouseEvents: options && options.handleMouseEvents }; pos = clipPos(this, pos); return markText(this, pos, pos, realOpts, "bookmark"); }, findMarksAt: function(pos) { pos = clipPos(this, pos); var markers = [], spans = getLine(this, pos.line).markedSpans; if (spans) for (var i$3 = 0; i$3 < spans.length; ++i$3) { var span = spans[i$3]; if ((span.from == null || span.from <= pos.ch) && (span.to == null || span.to >= pos.ch)) markers.push(span.marker.parent || span.marker); } return markers; }, findMarks: function(from, to, filter) { from = clipPos(this, from); to = clipPos(this, to); var found = [], lineNo$1 = from.line; this.iter(from.line, to.line + 1, function(line) { var spans = line.markedSpans; if (spans) for (var i$3 = 0; i$3 < spans.length; i$3++) { var span = spans[i$3]; if (!(span.to != null && lineNo$1 == from.line && from.ch >= span.to || span.from == null && lineNo$1 != from.line || span.from != null && lineNo$1 == to.line && span.from >= to.ch) && (!filter || filter(span.marker))) found.push(span.marker.parent || span.marker); } ++lineNo$1; }); return found; }, getAllMarks: function() { var markers = []; this.iter(function(line) { var sps = line.markedSpans; if (sps) { for (var i$3 = 0; i$3 < sps.length; ++i$3) if (sps[i$3].from != null) markers.push(sps[i$3].marker); } }); return markers; }, posFromIndex: function(off$1) { var ch, lineNo$1 = this.first, sepSize = this.lineSeparator().length; this.iter(function(line) { var sz = line.text.length + sepSize; if (sz > off$1) { ch = off$1; return true; } off$1 -= sz; ++lineNo$1; }); return clipPos(this, Pos(lineNo$1, ch)); }, indexFromPos: function(coords) { coords = clipPos(this, coords); var index = coords.ch; if (coords.line < this.first || coords.ch < 0) return 0; var sepSize = this.lineSeparator().length; this.iter(this.first, coords.line, function(line) { index += line.text.length + sepSize; }); return index; }, copy: function(copyHistory) { var doc$1 = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep, this.direction); doc$1.scrollTop = this.scrollTop; doc$1.scrollLeft = this.scrollLeft; doc$1.sel = this.sel; doc$1.extend = false; if (copyHistory) { doc$1.history.undoDepth = this.history.undoDepth; doc$1.setHistory(this.getHistory()); } return doc$1; }, linkedDoc: function(options) { if (!options) options = {}; var from = this.first, to = this.first + this.size; if (options.from != null && options.from > from) from = options.from; if (options.to != null && options.to < to) to = options.to; var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction); if (options.sharedHist) copy.history = this.history; (this.linked || (this.linked = [])).push({ doc: copy, sharedHist: options.sharedHist }); copy.linked = [{ doc: this, isParent: true, sharedHist: options.sharedHist }]; copySharedMarkers(copy, findSharedMarkers(this)); return copy; }, unlinkDoc: function(other) { if (other instanceof CodeMirror$1) other = other.doc; if (this.linked) for (var i$3 = 0; i$3 < this.linked.length; ++i$3) { var link = this.linked[i$3]; if (link.doc != other) continue; this.linked.splice(i$3, 1); other.unlinkDoc(this); detachSharedMarkers(findSharedMarkers(this)); break; } if (other.history == this.history) { var splitIds = [other.id]; linkedDocs(other, function(doc$1) { return splitIds.push(doc$1.id); }, true); other.history = new History(null); other.history.done = copyHistoryArray(this.history.done, splitIds); other.history.undone = copyHistoryArray(this.history.undone, splitIds); } }, iterLinkedDocs: function(f) { linkedDocs(this, f); }, getMode: function() { return this.mode; }, getEditor: function() { return this.cm; }, splitLines: function(str) { if (this.lineSep) return str.split(this.lineSep); return splitLinesAuto(str); }, lineSeparator: function() { return this.lineSep || "\n"; }, setDirection: docMethodOp(function(dir) { if (dir != "rtl") dir = "ltr"; if (dir == this.direction) return; this.direction = dir; this.iter(function(line) { return line.order = null; }); if (this.cm) directionChanged(this.cm); }) }); Doc.prototype.eachLine = Doc.prototype.iter; var lastDrop = 0; function onDrop(e) { var cm = this; clearDragCursor(cm); if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; e_preventDefault(e); if (ie) lastDrop = +new Date(); var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; if (!pos || cm.isReadOnly()) return; if (files && files.length && window.FileReader && window.File) { var n = files.length, text = Array(n), read = 0; var markAsReadAndPasteIfAllFilesAreRead = function() { if (++read == n) operation(cm, function() { pos = clipPos(cm.doc, pos); var change = { from: pos, to: pos, text: cm.doc.splitLines(text.filter(function(t) { return t != null; }).join(cm.doc.lineSeparator())), origin: "paste" }; makeChange(cm.doc, change); setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change)))); })(); }; var readTextFromFile = function(file, i$4) { if (cm.options.allowDropFileTypes && indexOf(cm.options.allowDropFileTypes, file.type) == -1) { markAsReadAndPasteIfAllFilesAreRead(); return; } var reader = new FileReader(); reader.onerror = function() { return markAsReadAndPasteIfAllFilesAreRead(); }; reader.onload = function() { var content = reader.result; if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { markAsReadAndPasteIfAllFilesAreRead(); return; } text[i$4] = content; markAsReadAndPasteIfAllFilesAreRead(); }; reader.readAsText(file); }; for (var i$3 = 0; i$3 < files.length; i$3++) readTextFromFile(files[i$3], i$3); } else { if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { cm.state.draggingText(e); setTimeout(function() { return cm.display.input.focus(); }, 20); return; } try { var text$1 = e.dataTransfer.getData("Text"); if (text$1) { var selected; if (cm.state.draggingText && !cm.state.draggingText.copy) selected = cm.listSelections(); setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); if (selected) for (var i$1$1 = 0; i$1$1 < selected.length; ++i$1$1) replaceRange(cm.doc, "", selected[i$1$1].anchor, selected[i$1$1].head, "drag"); cm.replaceSelection(text$1, "around", "paste"); cm.display.input.focus(); } } catch (e$1) {} } } function onDragStart(cm, e) { if (ie && (!cm.state.draggingText || +new Date() - lastDrop < 100)) { e_stop(e); return; } if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; e.dataTransfer.setData("Text", cm.getSelection()); e.dataTransfer.effectAllowed = "copyMove"; if (e.dataTransfer.setDragImage && !safari) { var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; if (presto) { img.width = img.height = 1; cm.display.wrapper.appendChild(img); img._top = img.offsetTop; } e.dataTransfer.setDragImage(img, 0, 0); if (presto) img.parentNode.removeChild(img); } } function onDragOver(cm, e) { var pos = posFromMouse(cm, e); if (!pos) return; var frag = document.createDocumentFragment(); drawSelectionCursor(cm, pos, frag); if (!cm.display.dragCursor) { cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors"); cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv); } removeChildrenAndAdd(cm.display.dragCursor, frag); } function clearDragCursor(cm) { if (cm.display.dragCursor) { cm.display.lineSpace.removeChild(cm.display.dragCursor); cm.display.dragCursor = null; } } function forEachCodeMirror(f) { if (!document.getElementsByClassName) return; var byClass = document.getElementsByClassName("CodeMirror"), editors = []; for (var i$3 = 0; i$3 < byClass.length; i$3++) { var cm = byClass[i$3].CodeMirror; if (cm) editors.push(cm); } if (editors.length) editors[0].operation(function() { for (var i$4 = 0; i$4 < editors.length; i$4++) f(editors[i$4]); }); } var globalsRegistered = false; function ensureGlobalHandlers() { if (globalsRegistered) return; registerGlobalHandlers(); globalsRegistered = true; } function registerGlobalHandlers() { var resizeTimer; on(window, "resize", function() { if (resizeTimer == null) resizeTimer = setTimeout(function() { resizeTimer = null; forEachCodeMirror(onResize); }, 100); }); on(window, "blur", function() { return forEachCodeMirror(onBlur); }); } function onResize(cm) { var d = cm.display; d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; d.scrollbarsClipped = false; cm.setSize(); } var keyNames = { 3: "Pause", 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: "/", 145: "ScrollLock", 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'", 224: "Mod", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" }; for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i); for (var i$1 = 65; i$1 <= 90; i$1++) keyNames[i$1] = String.fromCharCode(i$1); for (var i$2 = 1; i$2 <= 12; i$2++) keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; var keyMap = {}; keyMap.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" }; keyMap.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" }; keyMap.emacsy = { "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars", "Ctrl-O": "openLine" }; keyMap.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"] }; keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; function normalizeKeyName(name) { var parts = name.split(/-(?!$)/); name = parts[parts.length - 1]; var alt, ctrl, shift, cmd; for (var i$3 = 0; i$3 < parts.length - 1; i$3++) { var mod = parts[i$3]; if (/^(cmd|meta|m)$/i.test(mod)) cmd = true; else if (/^a(lt)?$/i.test(mod)) alt = true; else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true; else if (/^s(hift)?$/i.test(mod)) shift = true; else throw new Error("Unrecognized modifier name: " + mod); } if (alt) name = "Alt-" + name; if (ctrl) name = "Ctrl-" + name; if (cmd) name = "Cmd-" + name; if (shift) name = "Shift-" + name; return name; } function normalizeKeyMap(keymap) { var copy = {}; for (var keyname in keymap) if (keymap.hasOwnProperty(keyname)) { var value = keymap[keyname]; if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) continue; if (value == "...") { delete keymap[keyname]; continue; } var keys = map(keyname.split(" "), normalizeKeyName); for (var i$3 = 0; i$3 < keys.length; i$3++) { var val = void 0, name = void 0; if (i$3 == keys.length - 1) { name = keys.join(" "); val = value; } else { name = keys.slice(0, i$3 + 1).join(" "); val = "..."; } var prev = copy[name]; if (!prev) copy[name] = val; else if (prev != val) throw new Error("Inconsistent bindings for " + name); } delete keymap[keyname]; } for (var prop$1 in copy) keymap[prop$1] = copy[prop$1]; return keymap; } function lookupKey(key, map$1, handle, context) { map$1 = getKeyMap(map$1); var found = map$1.call ? map$1.call(key, context) : map$1[key]; if (found === false) return "nothing"; if (found === "...") return "multi"; if (found != null && handle(found)) return "handled"; if (map$1.fallthrough) { if (Object.prototype.toString.call(map$1.fallthrough) != "[object Array]") return lookupKey(key, map$1.fallthrough, handle, context); for (var i$3 = 0; i$3 < map$1.fallthrough.length; i$3++) { var result = lookupKey(key, map$1.fallthrough[i$3], handle, context); if (result) return result; } } } function isModifierKey(value) { var name = typeof value == "string" ? value : keyNames[value.keyCode]; return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; } function addModifierNames(name, event, noShift) { var base = name; if (event.altKey && base != "Alt") name = "Alt-" + name; if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") name = "Ctrl-" + name; if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Mod") name = "Cmd-" + name; if (!noShift && event.shiftKey && base != "Shift") name = "Shift-" + name; return name; } function keyName(event, noShift) { if (presto && event.keyCode == 34 && event["char"]) return false; var name = keyNames[event.keyCode]; if (name == null || event.altGraphKey) return false; if (event.keyCode == 3 && event.code) name = event.code; return addModifierNames(name, event, noShift); } function getKeyMap(val) { return typeof val == "string" ? keyMap[val] : val; } function deleteNearSelection(cm, compute) { var ranges = cm.doc.sel.ranges, kill = []; for (var i$3 = 0; i$3 < ranges.length; i$3++) { var toKill = compute(ranges[i$3]); while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { var replaced = kill.pop(); if (cmp(replaced.from, toKill.from) < 0) { toKill.from = replaced.from; break; } } kill.push(toKill); } runInOp(cm, function() { for (var i$4 = kill.length - 1; i$4 >= 0; i$4--) replaceRange(cm.doc, "", kill[i$4].from, kill[i$4].to, "+delete"); ensureCursorVisible(cm); }); } function moveCharLogically(line, ch, dir) { var target = skipExtendingChars(line.text, ch + dir, dir); return target < 0 || target > line.text.length ? null : target; } function moveLogically(line, start, dir) { var ch = moveCharLogically(line, start.ch, dir); return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before"); } function endOfLine(visually, cm, lineObj, lineNo$1, dir) { if (visually) { if (cm.doc.direction == "rtl") dir = -dir; var order = getOrder(lineObj, cm.doc.direction); if (order) { var part = dir < 0 ? lst(order) : order[0]; var moveInStorageOrder = dir < 0 == (part.level == 1); var sticky = moveInStorageOrder ? "after" : "before"; var ch; if (part.level > 0 || cm.doc.direction == "rtl") { var prep = prepareMeasureForLine(cm, lineObj); ch = dir < 0 ? lineObj.text.length - 1 : 0; var targetTop = measureCharPrepared(cm, prep, ch).top; ch = findFirst(function(ch$1) { return measureCharPrepared(cm, prep, ch$1).top == targetTop; }, dir < 0 == (part.level == 1) ? part.from : part.to - 1, ch); if (sticky == "before") ch = moveCharLogically(lineObj, ch, 1); } else ch = dir < 0 ? part.to : part.from; return new Pos(lineNo$1, ch, sticky); } } return new Pos(lineNo$1, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after"); } function moveVisually(cm, line, start, dir) { var bidi = getOrder(line, cm.doc.direction); if (!bidi) return moveLogically(line, start, dir); if (start.ch >= line.text.length) { start.ch = line.text.length; start.sticky = "before"; } else if (start.ch <= 0) { start.ch = 0; start.sticky = "after"; } var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos]; if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) return moveLogically(line, start, dir); var mv = function(pos, dir$1) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir$1); }; var prep; var getWrappedLineExtent = function(ch$1) { if (!cm.options.lineWrapping) return { begin: 0, end: line.text.length }; prep = prep || prepareMeasureForLine(cm, line); return wrappedLineExtentChar(cm, line, prep, ch$1); }; var wrappedLineExtent$1 = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch); if (cm.doc.direction == "rtl" || part.level == 1) { var moveInStorageOrder = part.level == 1 == dir < 0; var ch = mv(start, moveInStorageOrder ? 1 : -1); if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent$1.begin : ch <= part.to && ch <= wrappedLineExtent$1.end)) { var sticky = moveInStorageOrder ? "before" : "after"; return new Pos(start.line, ch, sticky); } } var searchInVisualLine = function(partPos$1, dir$1, wrappedLineExtent$2) { var getRes = function(ch$2, moveInStorageOrder$2) { return moveInStorageOrder$2 ? new Pos(start.line, mv(ch$2, 1), "before") : new Pos(start.line, ch$2, "after"); }; for (; partPos$1 >= 0 && partPos$1 < bidi.length; partPos$1 += dir$1) { var part$1 = bidi[partPos$1]; var moveInStorageOrder$1 = dir$1 > 0 == (part$1.level != 1); var ch$1 = moveInStorageOrder$1 ? wrappedLineExtent$2.begin : mv(wrappedLineExtent$2.end, -1); if (part$1.from <= ch$1 && ch$1 < part$1.to) return getRes(ch$1, moveInStorageOrder$1); ch$1 = moveInStorageOrder$1 ? part$1.from : mv(part$1.to, -1); if (wrappedLineExtent$2.begin <= ch$1 && ch$1 < wrappedLineExtent$2.end) return getRes(ch$1, moveInStorageOrder$1); } }; var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent$1); if (res) return res; var nextCh = dir > 0 ? wrappedLineExtent$1.end : mv(wrappedLineExtent$1.begin, -1); if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) { res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh)); if (res) return res; } return null; } var commands = { selectAll, singleSelection: function(cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); }, killLine: function(cm) { return deleteNearSelection(cm, function(range$1) { if (range$1.empty()) { var len = getLine(cm.doc, range$1.head.line).text.length; if (range$1.head.ch == len && range$1.head.line < cm.lastLine()) return { from: range$1.head, to: Pos(range$1.head.line + 1, 0) }; else return { from: range$1.head, to: Pos(range$1.head.line, len) }; } else return { from: range$1.from(), to: range$1.to() }; }); }, deleteLine: function(cm) { return deleteNearSelection(cm, function(range$1) { return { from: Pos(range$1.from().line, 0), to: clipPos(cm.doc, Pos(range$1.to().line + 1, 0)) }; }); }, delLineLeft: function(cm) { return deleteNearSelection(cm, function(range$1) { return { from: Pos(range$1.from().line, 0), to: range$1.from() }; }); }, delWrappedLineLeft: function(cm) { return deleteNearSelection(cm, function(range$1) { var top = cm.charCoords(range$1.head, "div").top + 5; var leftPos = cm.coordsChar({ left: 0, top }, "div"); return { from: leftPos, to: range$1.from() }; }); }, delWrappedLineRight: function(cm) { return deleteNearSelection(cm, function(range$1) { var top = cm.charCoords(range$1.head, "div").top + 5; var rightPos = cm.coordsChar({ left: cm.display.lineDiv.offsetWidth + 100, top }, "div"); return { from: range$1.from(), to: rightPos }; }); }, undo: function(cm) { return cm.undo(); }, redo: function(cm) { return cm.redo(); }, undoSelection: function(cm) { return cm.undoSelection(); }, redoSelection: function(cm) { return cm.redoSelection(); }, goDocStart: function(cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); }, goDocEnd: function(cm) { return cm.extendSelection(Pos(cm.lastLine())); }, goLineStart: function(cm) { return cm.extendSelectionsBy(function(range$1) { return lineStart(cm, range$1.head.line); }, { origin: "+move", bias: 1 }); }, goLineStartSmart: function(cm) { return cm.extendSelectionsBy(function(range$1) { return lineStartSmart(cm, range$1.head); }, { origin: "+move", bias: 1 }); }, goLineEnd: function(cm) { return cm.extendSelectionsBy(function(range$1) { return lineEnd(cm, range$1.head.line); }, { origin: "+move", bias: -1 }); }, goLineRight: function(cm) { return cm.extendSelectionsBy(function(range$1) { var top = cm.cursorCoords(range$1.head, "div").top + 5; return cm.coordsChar({ left: cm.display.lineDiv.offsetWidth + 100, top }, "div"); }, sel_move); }, goLineLeft: function(cm) { return cm.extendSelectionsBy(function(range$1) { var top = cm.cursorCoords(range$1.head, "div").top + 5; return cm.coordsChar({ left: 0, top }, "div"); }, sel_move); }, goLineLeftSmart: function(cm) { return cm.extendSelectionsBy(function(range$1) { var top = cm.cursorCoords(range$1.head, "div").top + 5; var pos = cm.coordsChar({ left: 0, top }, "div"); if (pos.ch < cm.getLine(pos.line).search(/\S/)) return lineStartSmart(cm, range$1.head); return pos; }, sel_move); }, goLineUp: function(cm) { return cm.moveV(-1, "line"); }, goLineDown: function(cm) { return cm.moveV(1, "line"); }, goPageUp: function(cm) { return cm.moveV(-1, "page"); }, goPageDown: function(cm) { return cm.moveV(1, "page"); }, goCharLeft: function(cm) { return cm.moveH(-1, "char"); }, goCharRight: function(cm) { return cm.moveH(1, "char"); }, goColumnLeft: function(cm) { return cm.moveH(-1, "column"); }, goColumnRight: function(cm) { return cm.moveH(1, "column"); }, goWordLeft: function(cm) { return cm.moveH(-1, "word"); }, goGroupRight: function(cm) { return cm.moveH(1, "group"); }, goGroupLeft: function(cm) { return cm.moveH(-1, "group"); }, goWordRight: function(cm) { return cm.moveH(1, "word"); }, delCharBefore: function(cm) { return cm.deleteH(-1, "codepoint"); }, delCharAfter: function(cm) { return cm.deleteH(1, "char"); }, delWordBefore: function(cm) { return cm.deleteH(-1, "word"); }, delWordAfter: function(cm) { return cm.deleteH(1, "word"); }, delGroupBefore: function(cm) { return cm.deleteH(-1, "group"); }, delGroupAfter: function(cm) { return cm.deleteH(1, "group"); }, indentAuto: function(cm) { return cm.indentSelection("smart"); }, indentMore: function(cm) { return cm.indentSelection("add"); }, indentLess: function(cm) { return cm.indentSelection("subtract"); }, insertTab: function(cm) { return cm.replaceSelection(" "); }, insertSoftTab: function(cm) { var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; for (var i$3 = 0; i$3 < ranges.length; i$3++) { var pos = ranges[i$3].from(); var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); spaces.push(spaceStr(tabSize - col % tabSize)); } cm.replaceSelections(spaces); }, defaultTab: function(cm) { if (cm.somethingSelected()) cm.indentSelection("add"); else cm.execCommand("insertTab"); }, transposeChars: function(cm) { return runInOp(cm, function() { var ranges = cm.listSelections(), newSel = []; for (var i$3 = 0; i$3 < ranges.length; i$3++) { if (!ranges[i$3].empty()) continue; var cur = ranges[i$3].head, line = getLine(cm.doc, cur.line).text; if (line) { if (cur.ch == line.length) cur = new Pos(cur.line, cur.ch - 1); if (cur.ch > 0) { cur = new Pos(cur.line, cur.ch + 1); cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), Pos(cur.line, cur.ch - 2), cur, "+transpose"); } else if (cur.line > cm.doc.first) { var prev = getLine(cm.doc, cur.line - 1).text; if (prev) { cur = new Pos(cur.line, 1); cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + prev.charAt(prev.length - 1), Pos(cur.line - 1, prev.length - 1), cur, "+transpose"); } } } newSel.push(new Range(cur, cur)); } cm.setSelections(newSel); }); }, newlineAndIndent: function(cm) { return runInOp(cm, function() { var sels = cm.listSelections(); for (var i$3 = sels.length - 1; i$3 >= 0; i$3--) cm.replaceRange(cm.doc.lineSeparator(), sels[i$3].anchor, sels[i$3].head, "+input"); sels = cm.listSelections(); for (var i$1$1 = 0; i$1$1 < sels.length; i$1$1++) cm.indentLine(sels[i$1$1].from().line, null, true); ensureCursorVisible(cm); }); }, openLine: function(cm) { return cm.replaceSelection("\n", "start"); }, toggleOverwrite: function(cm) { return cm.toggleOverwrite(); } }; function lineStart(cm, lineN) { var line = getLine(cm.doc, lineN); var visual = visualLine(line); if (visual != line) lineN = lineNo(visual); return endOfLine(true, cm, visual, lineN, 1); } function lineEnd(cm, lineN) { var line = getLine(cm.doc, lineN); var visual = visualLineEnd(line); if (visual != line) lineN = lineNo(visual); return endOfLine(true, cm, line, lineN, -1); } function lineStartSmart(cm, pos) { var start = lineStart(cm, pos.line); var line = getLine(cm.doc, start.line); var order = getOrder(line, cm.doc.direction); if (!order || order[0].level == 0) { var firstNonWS = Math.max(start.ch, line.text.search(/\S/)); var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky); } return start; } function doHandleBinding(cm, bound, dropShift) { if (typeof bound == "string") { bound = commands[bound]; if (!bound) return false; } cm.display.input.ensurePolled(); var prevShift = cm.display.shift, done = false; try { if (cm.isReadOnly()) cm.state.suppressEdits = true; if (dropShift) cm.display.shift = false; done = bound(cm) != Pass; } finally { cm.display.shift = prevShift; cm.state.suppressEdits = false; } return done; } function lookupKeyForEditor(cm, name, handle) { for (var i$3 = 0; i$3 < cm.state.keyMaps.length; i$3++) { var result = lookupKey(name, cm.state.keyMaps[i$3], handle, cm); if (result) return result; } return cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm) || lookupKey(name, cm.options.keyMap, handle, cm); } var stopSeq = new Delayed(); function dispatchKey(cm, name, e, handle) { var seq = cm.state.keySeq; if (seq) { if (isModifierKey(name)) return "handled"; if (/\'$/.test(name)) cm.state.keySeq = null; else stopSeq.set(50, function() { if (cm.state.keySeq == seq) { cm.state.keySeq = null; cm.display.input.reset(); } }); if (dispatchKeyInner(cm, seq + " " + name, e, handle)) return true; } return dispatchKeyInner(cm, name, e, handle); } function dispatchKeyInner(cm, name, e, handle) { var result = lookupKeyForEditor(cm, name, handle); if (result == "multi") cm.state.keySeq = name; if (result == "handled") signalLater(cm, "keyHandled", cm, name, e); if (result == "handled" || result == "multi") { e_preventDefault(e); restartBlink(cm); } return !!result; } function handleKeyBinding(cm, e) { var name = keyName(e, true); if (!name) return false; if (e.shiftKey && !cm.state.keySeq) return dispatchKey(cm, "Shift-" + name, e, function(b) { return doHandleBinding(cm, b, true); }) || dispatchKey(cm, name, e, function(b) { if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) return doHandleBinding(cm, b); }); else return dispatchKey(cm, name, e, function(b) { return doHandleBinding(cm, b); }); } function handleCharBinding(cm, e, ch) { return dispatchKey(cm, "'" + ch + "'", e, function(b) { return doHandleBinding(cm, b, true); }); } var lastStoppedKey = null; function onKeyDown(e) { var cm = this; if (e.target && e.target != cm.display.input.getField()) return; cm.curOp.focus = activeElt(root(cm)); if (signalDOMEvent(cm, e)) return; if (ie && ie_version < 11 && e.keyCode == 27) e.returnValue = false; var code = e.keyCode; cm.display.shift = code == 16 || e.shiftKey; var handled = handleKeyBinding(cm, e); if (presto) { lastStoppedKey = handled ? code : null; if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) cm.replaceSelection("", null, "cut"); } if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand) document.execCommand("cut"); if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) showCrossHair(cm); } function showCrossHair(cm) { var lineDiv = cm.display.lineDiv; addClass(lineDiv, "CodeMirror-crosshair"); function up(e) { if (e.keyCode == 18 || !e.altKey) { rmClass(lineDiv, "CodeMirror-crosshair"); off(document, "keyup", up); off(document, "mouseover", up); } } on(document, "keyup", up); on(document, "mouseover", up); } function onKeyUp(e) { if (e.keyCode == 16) this.doc.sel.shift = false; signalDOMEvent(this, e); } function onKeyPress(e) { var cm = this; if (e.target && e.target != cm.display.input.getField()) return; if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) return; var keyCode = e.keyCode, charCode = e.charCode; if (presto && keyCode == lastStoppedKey) { lastStoppedKey = null; e_preventDefault(e); return; } if (presto && (!e.which || e.which < 10) && handleKeyBinding(cm, e)) return; var ch = String.fromCharCode(charCode == null ? keyCode : charCode); if (ch == "\b") return; if (handleCharBinding(cm, e, ch)) return; cm.display.input.onKeyPress(e); } var DOUBLECLICK_DELAY = 400; var PastClick = function(time, pos, button) { this.time = time; this.pos = pos; this.button = button; }; PastClick.prototype.compare = function(time, pos, button) { return this.time + DOUBLECLICK_DELAY > time && cmp(pos, this.pos) == 0 && button == this.button; }; var lastClick, lastDoubleClick; function clickRepeat(pos, button) { var now = +new Date(); if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) { lastClick = lastDoubleClick = null; return "triple"; } else if (lastClick && lastClick.compare(now, pos, button)) { lastDoubleClick = new PastClick(now, pos, button); lastClick = null; return "double"; } else { lastClick = new PastClick(now, pos, button); lastDoubleClick = null; return "single"; } } function onMouseDown(e) { var cm = this, display = cm.display; if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) return; display.input.ensurePolled(); display.shift = e.shiftKey; if (eventInWidget(display, e)) { if (!webkit) { display.scroller.draggable = false; setTimeout(function() { return display.scroller.draggable = true; }, 100); } return; } if (clickInGutter(cm, e)) return; var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single"; win(cm).focus(); if (button == 1 && cm.state.selectingText) cm.state.selectingText(e); if (pos && handleMappedButton(cm, button, pos, repeat, e)) return; if (button == 1) { if (pos) leftButtonDown(cm, pos, repeat, e); else if (e_target(e) == display.scroller) e_preventDefault(e); } else if (button == 2) { if (pos) extendSelection(cm.doc, pos); setTimeout(function() { return display.input.focus(); }, 20); } else if (button == 3) if (captureRightClick) cm.display.input.onContextMenu(e); else delayBlurEvent(cm); } function handleMappedButton(cm, button, pos, repeat, event) { var name = "Click"; if (repeat == "double") name = "Double" + name; else if (repeat == "triple") name = "Triple" + name; name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name; return dispatchKey(cm, addModifierNames(name, event), event, function(bound) { if (typeof bound == "string") bound = commands[bound]; if (!bound) return false; var done = false; try { if (cm.isReadOnly()) cm.state.suppressEdits = true; done = bound(cm, pos) != Pass; } finally { cm.state.suppressEdits = false; } return done; }); } function configureMouse(cm, repeat, event) { var option = cm.getOption("configureMouse"); var value = option ? option(cm, repeat, event) : {}; if (value.unit == null) { var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey; value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line"; } if (value.extend == null || cm.doc.extend) value.extend = cm.doc.extend || event.shiftKey; if (value.addNew == null) value.addNew = mac ? event.metaKey : event.ctrlKey; if (value.moveOnDrag == null) value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); return value; } function leftButtonDown(cm, pos, repeat, event) { if (ie) setTimeout(bind(ensureFocus, cm), 0); else cm.curOp.focus = activeElt(root(cm)); var behavior = configureMouse(cm, repeat, event); var sel = cm.doc.sel, contained; if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && repeat == "single" && (contained = sel.contains(pos)) > -1 && (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) leftButtonStartDrag(cm, event, pos, behavior); else leftButtonSelect(cm, event, pos, behavior); } function leftButtonStartDrag(cm, event, pos, behavior) { var display = cm.display, moved = false; var dragEnd = operation(cm, function(e) { if (webkit) display.scroller.draggable = false; cm.state.draggingText = false; if (cm.state.delayingBlurEvent) if (cm.hasFocus()) cm.state.delayingBlurEvent = false; else delayBlurEvent(cm); off(display.wrapper.ownerDocument, "mouseup", dragEnd); off(display.wrapper.ownerDocument, "mousemove", mouseMove); off(display.scroller, "dragstart", dragStart); off(display.scroller, "drop", dragEnd); if (!moved) { e_preventDefault(e); if (!behavior.addNew) extendSelection(cm.doc, pos, null, null, behavior.extend); if (webkit && !safari || ie && ie_version == 9) setTimeout(function() { display.wrapper.ownerDocument.body.focus({ preventScroll: true }); display.input.focus(); }, 20); else display.input.focus(); } }); var mouseMove = function(e2) { moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10; }; var dragStart = function() { return moved = true; }; if (webkit) display.scroller.draggable = true; cm.state.draggingText = dragEnd; dragEnd.copy = !behavior.moveOnDrag; on(display.wrapper.ownerDocument, "mouseup", dragEnd); on(display.wrapper.ownerDocument, "mousemove", mouseMove); on(display.scroller, "dragstart", dragStart); on(display.scroller, "drop", dragEnd); cm.state.delayingBlurEvent = true; setTimeout(function() { return display.input.focus(); }, 20); if (display.scroller.dragDrop) display.scroller.dragDrop(); } function rangeForUnit(cm, pos, unit) { if (unit == "char") return new Range(pos, pos); if (unit == "word") return cm.findWordAt(pos); if (unit == "line") return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); var result = unit(cm, pos); return new Range(result.from, result.to); } function leftButtonSelect(cm, event, start, behavior) { if (ie) delayBlurEvent(cm); var display = cm.display, doc$1 = cm.doc; e_preventDefault(event); var ourRange, ourIndex, startSel = doc$1.sel, ranges = startSel.ranges; if (behavior.addNew && !behavior.extend) { ourIndex = doc$1.sel.contains(start); if (ourIndex > -1) ourRange = ranges[ourIndex]; else ourRange = new Range(start, start); } else { ourRange = doc$1.sel.primary(); ourIndex = doc$1.sel.primIndex; } if (behavior.unit == "rectangle") { if (!behavior.addNew) ourRange = new Range(start, start); start = posFromMouse(cm, event, true, true); ourIndex = -1; } else { var range$1 = rangeForUnit(cm, start, behavior.unit); if (behavior.extend) ourRange = extendRange(ourRange, range$1.anchor, range$1.head, behavior.extend); else ourRange = range$1; } if (!behavior.addNew) { ourIndex = 0; setSelection(doc$1, new Selection([ourRange], 0), sel_mouse); startSel = doc$1.sel; } else if (ourIndex == -1) { ourIndex = ranges.length; setSelection(doc$1, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex), { scroll: false, origin: "*mouse" }); } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) { setSelection(doc$1, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), { scroll: false, origin: "*mouse" }); startSel = doc$1.sel; } else replaceOneSelection(doc$1, ourIndex, ourRange, sel_mouse); var lastPos = start; function extendTo(pos) { if (cmp(lastPos, pos) == 0) return; lastPos = pos; if (behavior.unit == "rectangle") { var ranges$1 = [], tabSize = cm.options.tabSize; var startCol = countColumn(getLine(doc$1, start.line).text, start.ch, tabSize); var posCol = countColumn(getLine(doc$1, pos.line).text, pos.ch, tabSize); var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); line <= end; line++) { var text = getLine(doc$1, line).text, leftPos = findColumn(text, left, tabSize); if (left == right) ranges$1.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); else if (text.length > leftPos) ranges$1.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); } if (!ranges$1.length) ranges$1.push(new Range(start, start)); setSelection(doc$1, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges$1), ourIndex), { origin: "*mouse", scroll: false }); cm.scrollIntoView(pos); } else { var oldRange = ourRange; var range$2 = rangeForUnit(cm, pos, behavior.unit); var anchor = oldRange.anchor, head; if (cmp(range$2.anchor, anchor) > 0) { head = range$2.head; anchor = minPos(oldRange.from(), range$2.anchor); } else { head = range$2.anchor; anchor = maxPos(oldRange.to(), range$2.head); } var ranges$1$1 = startSel.ranges.slice(0); ranges$1$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc$1, anchor), head)); setSelection(doc$1, normalizeSelection(cm, ranges$1$1, ourIndex), sel_mouse); } } var editorSize = display.wrapper.getBoundingClientRect(); var counter = 0; function extend(e) { var curCount = ++counter; var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle"); if (!cur) return; if (cmp(cur, lastPos) != 0) { cm.curOp.focus = activeElt(root(cm)); extendTo(cur); var visible = visibleLines(display, doc$1); if (cur.line >= visible.to || cur.line < visible.from) setTimeout(operation(cm, function() { if (counter == curCount) extend(e); }), 150); } else { var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; if (outside) setTimeout(operation(cm, function() { if (counter != curCount) return; display.scroller.scrollTop += outside; extend(e); }), 50); } } function done(e) { cm.state.selectingText = false; counter = Infinity; if (e) { e_preventDefault(e); display.input.focus(); } off(display.wrapper.ownerDocument, "mousemove", move); off(display.wrapper.ownerDocument, "mouseup", up); doc$1.history.lastSelOrigin = null; } var move = operation(cm, function(e) { if (e.buttons === 0 || !e_button(e)) done(e); else extend(e); }); var up = operation(cm, done); cm.state.selectingText = up; on(display.wrapper.ownerDocument, "mousemove", move); on(display.wrapper.ownerDocument, "mouseup", up); } function bidiSimplify(cm, range$1) { var anchor = range$1.anchor; var head = range$1.head; var anchorLine = getLine(cm.doc, anchor.line); if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) return range$1; var order = getOrder(anchorLine); if (!order) return range$1; var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index]; if (part.from != anchor.ch && part.to != anchor.ch) return range$1; var boundary = index + (part.from == anchor.ch == (part.level != 1) ? 0 : 1); if (boundary == 0 || boundary == order.length) return range$1; var leftSide; if (head.line != anchor.line) leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0; else { var headIndex = getBidiPartAt(order, head.ch, head.sticky); var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1); if (headIndex == boundary - 1 || headIndex == boundary) leftSide = dir < 0; else leftSide = dir > 0; } var usePart = order[boundary + (leftSide ? -1 : 0)]; var from = leftSide == (usePart.level == 1); var ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before"; return anchor.ch == ch && anchor.sticky == sticky ? range$1 : new Range(new Pos(anchor.line, ch, sticky), head); } function gutterEvent(cm, e, type, prevent) { var mX, mY; if (e.touches) { mX = e.touches[0].clientX; mY = e.touches[0].clientY; } else try { mX = e.clientX; mY = e.clientY; } catch (e$1) { return false; } if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false; if (prevent) e_preventDefault(e); var display = cm.display; var lineBox = display.lineDiv.getBoundingClientRect(); if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e); mY -= lineBox.top - display.viewOffset; for (var i$3 = 0; i$3 < cm.display.gutterSpecs.length; ++i$3) { var g = display.gutters.childNodes[i$3]; if (g && g.getBoundingClientRect().right >= mX) { var line = lineAtHeight(cm.doc, mY); var gutter = cm.display.gutterSpecs[i$3]; signal(cm, type, cm, line, gutter.className, e); return e_defaultPrevented(e); } } } function clickInGutter(cm, e) { return gutterEvent(cm, e, "gutterClick", true); } function onContextMenu(cm, e) { if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) return; if (signalDOMEvent(cm, e, "contextmenu")) return; if (!captureRightClick) cm.display.input.onContextMenu(e); } function contextMenuInGutter(cm, e) { if (!hasHandler(cm, "gutterContextMenu")) return false; return gutterEvent(cm, e, "gutterContextMenu", false); } function themeChanged(cm) { cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); clearCaches(cm); } var Init = { toString: function() { return "CodeMirror.Init"; } }; var defaults = {}; var optionHandlers = {}; function defineOptions(CodeMirror$2) { var optionHandlers$1 = CodeMirror$2.optionHandlers; function option(name, deflt, handle, notOnInit) { CodeMirror$2.defaults[name] = deflt; if (handle) optionHandlers$1[name] = notOnInit ? function(cm, val, old) { if (old != Init) handle(cm, val, old); } : handle; } CodeMirror$2.defineOption = option; CodeMirror$2.Init = Init; option("value", "", function(cm, val) { return cm.setValue(val); }, true); option("mode", null, function(cm, val) { cm.doc.modeOption = val; loadMode(cm); }, true); option("indentUnit", 2, loadMode, true); option("indentWithTabs", false); option("smartIndent", true); option("tabSize", 4, function(cm) { resetModeState(cm); clearCaches(cm); regChange(cm); }, true); option("lineSeparator", null, function(cm, val) { cm.doc.lineSep = val; if (!val) return; var newBreaks = [], lineNo$1 = cm.doc.first; cm.doc.iter(function(line) { for (var pos = 0;;) { var found = line.text.indexOf(val, pos); if (found == -1) break; pos = found + val.length; newBreaks.push(Pos(lineNo$1, found)); } lineNo$1++; }); for (var i$3 = newBreaks.length - 1; i$3 >= 0; i$3--) replaceRange(cm.doc, val, newBreaks[i$3], Pos(newBreaks[i$3].line, newBreaks[i$3].ch + val.length)); }); option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g, function(cm, val, old) { cm.state.specialChars = new RegExp(val.source + (val.test(" ") ? "" : "| "), "g"); if (old != Init) cm.refresh(); }); option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function(cm) { return cm.refresh(); }, true); option("electricChars", true); option("inputStyle", mobile ? "contenteditable" : "textarea", function() { throw new Error("inputStyle can not (yet) be changed in a running editor"); }, true); option("spellcheck", false, function(cm, val) { return cm.getInputField().spellcheck = val; }, true); option("autocorrect", false, function(cm, val) { return cm.getInputField().autocorrect = val; }, true); option("autocapitalize", false, function(cm, val) { return cm.getInputField().autocapitalize = val; }, true); option("rtlMoveVisually", !windows); option("wholeLineUpdateBefore", true); option("theme", "default", function(cm) { themeChanged(cm); updateGutters(cm); }, true); option("keyMap", "default", function(cm, val, old) { var next = getKeyMap(val); var prev = old != Init && getKeyMap(old); if (prev && prev.detach) prev.detach(cm, next); if (next.attach) next.attach(cm, prev || null); }); option("extraKeys", null); option("configureMouse", null); option("lineWrapping", false, wrappingChanged, true); option("gutters", [], function(cm, val) { cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers); updateGutters(cm); }, true); option("fixedGutter", true, function(cm, val) { cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; cm.refresh(); }, true); option("coverGutterNextToScrollbar", false, function(cm) { return updateScrollbars(cm); }, true); option("scrollbarStyle", "native", function(cm) { initScrollbars(cm); updateScrollbars(cm); cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); }, true); option("lineNumbers", false, function(cm, val) { cm.display.gutterSpecs = getGutters(cm.options.gutters, val); updateGutters(cm); }, true); option("firstLineNumber", 1, updateGutters, true); option("lineNumberFormatter", function(integer) { return integer; }, updateGutters, true); option("showCursorWhenSelecting", false, updateSelection, true); option("resetSelectionOnContextMenu", true); option("lineWiseCopyCut", true); option("pasteLinesPerSelection", true); option("selectionsMayTouch", false); option("readOnly", false, function(cm, val) { if (val == "nocursor") { onBlur(cm); cm.display.input.blur(); } cm.display.input.readOnlyChanged(val); }); option("screenReaderLabel", null, function(cm, val) { val = val === "" ? null : val; cm.display.input.screenReaderLabelChanged(val); }); option("disableInput", false, function(cm, val) { if (!val) cm.display.input.reset(); }, true); option("dragDrop", true, dragDropChanged); option("allowDropFileTypes", null); option("cursorBlinkRate", 530); option("cursorScrollMargin", 0); option("cursorHeight", 1, updateSelection, true); option("singleCursorHeightPerLine", true, updateSelection, true); option("workTime", 100); option("workDelay", 100); option("flattenSpans", true, resetModeState, true); option("addModeClass", false, resetModeState, true); option("pollInterval", 100); option("undoDepth", 200, function(cm, val) { return cm.doc.history.undoDepth = val; }); option("historyEventDelay", 1250); option("viewportMargin", 10, function(cm) { return cm.refresh(); }, true); option("maxHighlightLength", 1e4, resetModeState, true); option("moveInputWithCursor", true, function(cm, val) { if (!val) cm.display.input.resetPosition(); }); option("tabindex", null, function(cm, val) { return cm.display.input.getField().tabIndex = val || ""; }); option("autofocus", null); option("direction", "ltr", function(cm, val) { return cm.doc.setDirection(val); }, true); option("phrases", null); } function dragDropChanged(cm, value, old) { var wasOn = old && old != Init; if (!value != !wasOn) { var funcs = cm.display.dragFunctions; var toggle = value ? on : off; toggle(cm.display.scroller, "dragstart", funcs.start); toggle(cm.display.scroller, "dragenter", funcs.enter); toggle(cm.display.scroller, "dragover", funcs.over); toggle(cm.display.scroller, "dragleave", funcs.leave); toggle(cm.display.scroller, "drop", funcs.drop); } } function wrappingChanged(cm) { if (cm.options.lineWrapping) { addClass(cm.display.wrapper, "CodeMirror-wrap"); cm.display.sizer.style.minWidth = ""; cm.display.sizerWidth = null; } else { rmClass(cm.display.wrapper, "CodeMirror-wrap"); findMaxLine(cm); } estimateLineHeights(cm); regChange(cm); clearCaches(cm); setTimeout(function() { return updateScrollbars(cm); }, 100); } function CodeMirror$1(place, options) { var this$1 = this; if (!(this instanceof CodeMirror$1)) return new CodeMirror$1(place, options); this.options = options = options ? copyObj(options) : {}; copyObj(defaults, options, false); var doc$1 = options.value; if (typeof doc$1 == "string") doc$1 = new Doc(doc$1, options.mode, null, options.lineSeparator, options.direction); else if (options.mode) doc$1.modeOption = options.mode; this.doc = doc$1; var input = new CodeMirror$1.inputStyles[options.inputStyle](this); var display = this.display = new Display(place, doc$1, input, options); display.wrapper.CodeMirror = this; themeChanged(this); if (options.lineWrapping) this.display.wrapper.className += " CodeMirror-wrap"; initScrollbars(this); this.state = { keyMaps: [], overlays: [], modeGen: 0, overwrite: false, delayingBlurEvent: false, focused: false, suppressEdits: false, pasteIncoming: -1, cutIncoming: -1, selectingText: false, draggingText: false, highlight: new Delayed(), keySeq: null, specialChars: null }; if (options.autofocus && !mobile) display.input.focus(); if (ie && ie_version < 11) setTimeout(function() { return this$1.display.input.reset(true); }, 20); registerEventHandlers(this); ensureGlobalHandlers(); startOperation(this); this.curOp.forceUpdate = true; attachDoc(this, doc$1); if (options.autofocus && !mobile || this.hasFocus()) setTimeout(function() { if (this$1.hasFocus() && !this$1.state.focused) onFocus(this$1); }, 20); else onBlur(this); for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt)) optionHandlers[opt](this, options[opt], Init); maybeUpdateLineNumberWidth(this); if (options.finishInit) options.finishInit(this); for (var i$3 = 0; i$3 < initHooks.length; ++i$3) initHooks[i$3](this); endOperation(this); if (webkit && options.lineWrapping && getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") display.lineDiv.style.textRendering = "auto"; } CodeMirror$1.defaults = defaults; CodeMirror$1.optionHandlers = optionHandlers; function registerEventHandlers(cm) { var d = cm.display; on(d.scroller, "mousedown", operation(cm, onMouseDown)); if (ie && ie_version < 11) on(d.scroller, "dblclick", operation(cm, function(e) { if (signalDOMEvent(cm, e)) return; var pos = posFromMouse(cm, e); if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return; e_preventDefault(e); var word = cm.findWordAt(pos); extendSelection(cm.doc, word.anchor, word.head); })); else on(d.scroller, "dblclick", function(e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); on(d.scroller, "contextmenu", function(e) { return onContextMenu(cm, e); }); on(d.input.getField(), "contextmenu", function(e) { if (!d.scroller.contains(e.target)) onContextMenu(cm, e); }); var touchFinished, prevTouch = { end: 0 }; function finishTouch() { if (d.activeTouch) { touchFinished = setTimeout(function() { return d.activeTouch = null; }, 1e3); prevTouch = d.activeTouch; prevTouch.end = +new Date(); } } function isMouseLikeTouchEvent(e) { if (e.touches.length != 1) return false; var touch = e.touches[0]; return touch.radiusX <= 1 && touch.radiusY <= 1; } function farAway(touch, other) { if (other.left == null) return true; var dx = other.left - touch.left, dy = other.top - touch.top; return dx * dx + dy * dy > 20 * 20; } on(d.scroller, "touchstart", function(e) { if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) { d.input.ensurePolled(); clearTimeout(touchFinished); var now = +new Date(); d.activeTouch = { start: now, moved: false, prev: now - prevTouch.end <= 300 ? prevTouch : null }; if (e.touches.length == 1) { d.activeTouch.left = e.touches[0].pageX; d.activeTouch.top = e.touches[0].pageY; } } }); on(d.scroller, "touchmove", function() { if (d.activeTouch) d.activeTouch.moved = true; }); on(d.scroller, "touchend", function(e) { var touch = d.activeTouch; if (touch && !eventInWidget(d, e) && touch.left != null && !touch.moved && new Date() - touch.start < 300) { var pos = cm.coordsChar(d.activeTouch, "page"), range$1; if (!touch.prev || farAway(touch, touch.prev)) range$1 = new Range(pos, pos); else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) range$1 = cm.findWordAt(pos); else range$1 = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); cm.setSelection(range$1.anchor, range$1.head); cm.focus(); e_preventDefault(e); } finishTouch(); }); on(d.scroller, "touchcancel", finishTouch); on(d.scroller, "scroll", function() { if (d.scroller.clientHeight) { updateScrollTop(cm, d.scroller.scrollTop); setScrollLeft(cm, d.scroller.scrollLeft, true); signal(cm, "scroll", cm); } }); on(d.scroller, "mousewheel", function(e) { return onScrollWheel(cm, e); }); on(d.scroller, "DOMMouseScroll", function(e) { return onScrollWheel(cm, e); }); on(d.wrapper, "scroll", function() { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); d.dragFunctions = { enter: function(e) { if (!signalDOMEvent(cm, e)) e_stop(e); }, over: function(e) { if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); } }, start: function(e) { return onDragStart(cm, e); }, drop: operation(cm, onDrop), leave: function(e) { if (!signalDOMEvent(cm, e)) clearDragCursor(cm); } }; var inp = d.input.getField(); on(inp, "keyup", function(e) { return onKeyUp.call(cm, e); }); on(inp, "keydown", operation(cm, onKeyDown)); on(inp, "keypress", operation(cm, onKeyPress)); on(inp, "focus", function(e) { return onFocus(cm, e); }); on(inp, "blur", function(e) { return onBlur(cm, e); }); } var initHooks = []; CodeMirror$1.defineInitHook = function(f) { return initHooks.push(f); }; function indentLine(cm, n, how, aggressive) { var doc$1 = cm.doc, state; if (how == null) how = "add"; if (how == "smart") if (!doc$1.mode.indent) how = "prev"; else state = getContextBefore(cm, n).state; var tabSize = cm.options.tabSize; var line = getLine(doc$1, n), curSpace = countColumn(line.text, null, tabSize); if (line.stateAfter) line.stateAfter = null; var curSpaceString = line.text.match(/^\s*/)[0], indentation; if (!aggressive && !/\S/.test(line.text)) { indentation = 0; how = "not"; } else if (how == "smart") { indentation = doc$1.mode.indent(state, line.text.slice(curSpaceString.length), line.text); if (indentation == Pass || indentation > 150) { if (!aggressive) return; how = "prev"; } } if (how == "prev") if (n > doc$1.first) indentation = countColumn(getLine(doc$1, n - 1).text, null, tabSize); else indentation = 0; else if (how == "add") indentation = curSpace + cm.options.indentUnit; else if (how == "subtract") indentation = curSpace - cm.options.indentUnit; else if (typeof how == "number") indentation = curSpace + how; indentation = Math.max(0, indentation); var indentString = "", pos = 0; if (cm.options.indentWithTabs) for (var i$3 = Math.floor(indentation / tabSize); i$3; --i$3) { pos += tabSize; indentString += " "; } if (pos < indentation) indentString += spaceStr(indentation - pos); if (indentString != curSpaceString) { replaceRange(doc$1, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); line.stateAfter = null; return true; } else for (var i$1$1 = 0; i$1$1 < doc$1.sel.ranges.length; i$1$1++) { var range$1 = doc$1.sel.ranges[i$1$1]; if (range$1.head.line == n && range$1.head.ch < curSpaceString.length) { var pos$1 = Pos(n, curSpaceString.length); replaceOneSelection(doc$1, i$1$1, new Range(pos$1, pos$1)); break; } } } var lastCopied = null; function setLastCopied(newLastCopied) { lastCopied = newLastCopied; } function applyTextInput(cm, inserted, deleted, sel, origin) { var doc$1 = cm.doc; cm.display.shift = false; if (!sel) sel = doc$1.sel; var recent = +new Date() - 200; var paste = origin == "paste" || cm.state.pasteIncoming > recent; var textLines = splitLinesAuto(inserted), multiPaste = null; if (paste && sel.ranges.length > 1) { if (lastCopied && lastCopied.text.join("\n") == inserted) { if (sel.ranges.length % lastCopied.text.length == 0) { multiPaste = []; for (var i$3 = 0; i$3 < lastCopied.text.length; i$3++) multiPaste.push(doc$1.splitLines(lastCopied.text[i$3])); } } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) multiPaste = map(textLines, function(l) { return [l]; }); } var updateInput = cm.curOp.updateInput; for (var i$1$1 = sel.ranges.length - 1; i$1$1 >= 0; i$1$1--) { var range$1 = sel.ranges[i$1$1]; var from = range$1.from(), to = range$1.to(); if (range$1.empty()) { if (deleted && deleted > 0) from = Pos(from.line, from.ch - deleted); else if (cm.state.overwrite && !paste) to = Pos(to.line, Math.min(getLine(doc$1, to.line).text.length, to.ch + lst(textLines).length)); else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == textLines.join("\n")) from = to = Pos(from.line, 0); } var changeEvent = { from, to, text: multiPaste ? multiPaste[i$1$1 % multiPaste.length] : textLines, origin: origin || (paste ? "paste" : cm.state.cutIncoming > recent ? "cut" : "+input") }; makeChange(cm.doc, changeEvent); signalLater(cm, "inputRead", cm, changeEvent); } if (inserted && !paste) triggerElectric(cm, inserted); ensureCursorVisible(cm); if (cm.curOp.updateInput < 2) cm.curOp.updateInput = updateInput; cm.curOp.typing = true; cm.state.pasteIncoming = cm.state.cutIncoming = -1; } function handlePaste(e, cm) { var pasted = e.clipboardData && e.clipboardData.getData("Text"); if (pasted) { e.preventDefault(); if (!cm.isReadOnly() && !cm.options.disableInput && cm.hasFocus()) runInOp(cm, function() { return applyTextInput(cm, pasted, 0, null, "paste"); }); return true; } } function triggerElectric(cm, inserted) { if (!cm.options.electricChars || !cm.options.smartIndent) return; var sel = cm.doc.sel; for (var i$3 = sel.ranges.length - 1; i$3 >= 0; i$3--) { var range$1 = sel.ranges[i$3]; if (range$1.head.ch > 100 || i$3 && sel.ranges[i$3 - 1].head.line == range$1.head.line) continue; var mode = cm.getModeAt(range$1.head); var indented = false; if (mode.electricChars) { for (var j = 0; j < mode.electricChars.length; j++) if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { indented = indentLine(cm, range$1.head.line, "smart"); break; } } else if (mode.electricInput) { if (mode.electricInput.test(getLine(cm.doc, range$1.head.line).text.slice(0, range$1.head.ch))) indented = indentLine(cm, range$1.head.line, "smart"); } if (indented) signalLater(cm, "electricInput", cm, range$1.head.line); } } function copyableRanges(cm) { var text = [], ranges = []; for (var i$3 = 0; i$3 < cm.doc.sel.ranges.length; i$3++) { var line = cm.doc.sel.ranges[i$3].head.line; var lineRange = { anchor: Pos(line, 0), head: Pos(line + 1, 0) }; ranges.push(lineRange); text.push(cm.getRange(lineRange.anchor, lineRange.head)); } return { text, ranges }; } function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) { field.setAttribute("autocorrect", autocorrect ? "on" : "off"); field.setAttribute("autocapitalize", autocapitalize ? "on" : "off"); field.setAttribute("spellcheck", !!spellcheck); } function hiddenTextarea() { var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none"); var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); if (webkit) te.style.width = "1000px"; else te.setAttribute("wrap", "off"); if (ios) te.style.border = "1px solid black"; return div; } function addEditorMethods(CodeMirror$2) { var optionHandlers$1 = CodeMirror$2.optionHandlers; var helpers = CodeMirror$2.helpers = {}; CodeMirror$2.prototype = { constructor: CodeMirror$2, focus: function() { win(this).focus(); this.display.input.focus(); }, setOption: function(option, value) { var options = this.options, old = options[option]; if (options[option] == value && option != "mode") return; options[option] = value; if (optionHandlers$1.hasOwnProperty(option)) operation(this, optionHandlers$1[option])(this, value, old); signal(this, "optionChange", this, option); }, getOption: function(option) { return this.options[option]; }, getDoc: function() { return this.doc; }, addKeyMap: function(map$1, bottom) { this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map$1)); }, removeKeyMap: function(map$1) { var maps = this.state.keyMaps; for (var i$3 = 0; i$3 < maps.length; ++i$3) if (maps[i$3] == map$1 || maps[i$3].name == map$1) { maps.splice(i$3, 1); return true; } }, addOverlay: methodOp(function(spec, options) { var mode = spec.token ? spec : CodeMirror$2.getMode(this.options, spec); if (mode.startState) throw new Error("Overlays may not be stateful."); insertSorted(this.state.overlays, { mode, modeSpec: spec, opaque: options && options.opaque, priority: options && options.priority || 0 }, function(overlay) { return overlay.priority; }); this.state.modeGen++; regChange(this); }), removeOverlay: methodOp(function(spec) { var overlays = this.state.overlays; for (var i$3 = 0; i$3 < overlays.length; ++i$3) { var cur = overlays[i$3].modeSpec; if (cur == spec || typeof spec == "string" && cur.name == spec) { overlays.splice(i$3, 1); this.state.modeGen++; regChange(this); return; } } }), indentLine: methodOp(function(n, dir, aggressive) { if (typeof dir != "string" && typeof dir != "number") if (dir == null) dir = this.options.smartIndent ? "smart" : "prev"; else dir = dir ? "add" : "subtract"; if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive); }), indentSelection: methodOp(function(how) { var ranges = this.doc.sel.ranges, end = -1; for (var i$3 = 0; i$3 < ranges.length; i$3++) { var range$1 = ranges[i$3]; if (!range$1.empty()) { var from = range$1.from(), to = range$1.to(); var start = Math.max(end, from.line); end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; for (var j = start; j < end; ++j) indentLine(this, j, how); var newRanges = this.doc.sel.ranges; if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i$3].from().ch > 0) replaceOneSelection(this.doc, i$3, new Range(from, newRanges[i$3].to()), sel_dontScroll); } else if (range$1.head.line > end) { indentLine(this, range$1.head.line, how, true); end = range$1.head.line; if (i$3 == this.doc.sel.primIndex) ensureCursorVisible(this); } } }), getTokenAt: function(pos, precise) { return takeToken(this, pos, precise); }, getLineTokens: function(line, precise) { return takeToken(this, Pos(line), precise, true); }, getTokenTypeAt: function(pos) { pos = clipPos(this.doc, pos); var styles = getLineStyles(this, getLine(this.doc, pos.line)); var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; var type; if (ch == 0) type = styles[2]; else for (;;) { var mid = before + after >> 1; if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid; else if (styles[mid * 2 + 1] < ch) before = mid + 1; else { type = styles[mid * 2 + 2]; break; } } var cut = type ? type.indexOf("overlay ") : -1; return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1); }, getModeAt: function(pos) { var mode = this.doc.mode; if (!mode.innerMode) return mode; return CodeMirror$2.innerMode(mode, this.getTokenAt(pos).state).mode; }, getHelper: function(pos, type) { return this.getHelpers(pos, type)[0]; }, getHelpers: function(pos, type) { var found = []; if (!helpers.hasOwnProperty(type)) return found; var help = helpers[type], mode = this.getModeAt(pos); if (typeof mode[type] == "string") { if (help[mode[type]]) found.push(help[mode[type]]); } else if (mode[type]) for (var i$3 = 0; i$3 < mode[type].length; i$3++) { var val = help[mode[type][i$3]]; if (val) found.push(val); } else if (mode.helperType && help[mode.helperType]) found.push(help[mode.helperType]); else if (help[mode.name]) found.push(help[mode.name]); for (var i$1$1 = 0; i$1$1 < help._global.length; i$1$1++) { var cur = help._global[i$1$1]; if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) found.push(cur.val); } return found; }, getStateAfter: function(line, precise) { var doc$1 = this.doc; line = clipLine(doc$1, line == null ? doc$1.first + doc$1.size - 1 : line); return getContextBefore(this, line + 1, precise).state; }, cursorCoords: function(start, mode) { var pos, range$1 = this.doc.sel.primary(); if (start == null) pos = range$1.head; else if (typeof start == "object") pos = clipPos(this.doc, start); else pos = start ? range$1.from() : range$1.to(); return cursorCoords(this, pos, mode || "page"); }, charCoords: function(pos, mode) { return charCoords(this, clipPos(this.doc, pos), mode || "page"); }, coordsChar: function(coords, mode) { coords = fromCoordSystem(this, coords, mode || "page"); return coordsChar(this, coords.left, coords.top); }, lineAtHeight: function(height, mode) { height = fromCoordSystem(this, { top: height, left: 0 }, mode || "page").top; return lineAtHeight(this.doc, height + this.display.viewOffset); }, heightAtLine: function(line, mode, includeWidgets) { var end = false, lineObj; if (typeof line == "number") { var last = this.doc.first + this.doc.size - 1; if (line < this.doc.first) line = this.doc.first; else if (line > last) { line = last; end = true; } lineObj = getLine(this.doc, line); } else lineObj = line; return intoCoordSystem(this, lineObj, { top: 0, left: 0 }, mode || "page", includeWidgets || end).top + (end ? this.doc.height - heightAtLine(lineObj) : 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(pos, node, scroll, vert, horiz) { var display = this.display; pos = cursorCoords(this, clipPos(this.doc, pos)); var top = pos.bottom, left = pos.left; node.style.position = "absolute"; node.setAttribute("cm-ignore-events", "true"); this.display.input.setUneditable(node); display.sizer.appendChild(node); if (vert == "over") top = pos.top; else if (vert == "above" || vert == "near") { var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); if ((vert == "above" || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) top = pos.top - node.offsetHeight; else if (pos.bottom + node.offsetHeight <= vspace) top = pos.bottom; if (left + node.offsetWidth > hspace) left = hspace - node.offsetWidth; } node.style.top = top + "px"; node.style.left = node.style.right = ""; if (horiz == "right") { left = display.sizer.clientWidth - node.offsetWidth; node.style.right = "0px"; } else { if (horiz == "left") left = 0; else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2; node.style.left = left + "px"; } if (scroll) scrollIntoView(this, { left, top, right: left + node.offsetWidth, bottom: top + node.offsetHeight }); }, triggerOnKeyDown: methodOp(onKeyDown), triggerOnKeyPress: methodOp(onKeyPress), triggerOnKeyUp: onKeyUp, triggerOnMouseDown: methodOp(onMouseDown), execCommand: function(cmd) { if (commands.hasOwnProperty(cmd)) return commands[cmd].call(null, this); }, triggerElectric: methodOp(function(text) { triggerElectric(this, text); }), findPosH: function(from, amount, unit, visually) { var dir = 1; if (amount < 0) { dir = -1; amount = -amount; } var cur = clipPos(this.doc, from); for (var i$3 = 0; i$3 < amount; ++i$3) { cur = findPosH(this.doc, cur, dir, unit, visually); if (cur.hitSide) break; } return cur; }, moveH: methodOp(function(dir, unit) { var this$1 = this; this.extendSelectionsBy(function(range$1) { if (this$1.display.shift || this$1.doc.extend || range$1.empty()) return findPosH(this$1.doc, range$1.head, dir, unit, this$1.options.rtlMoveVisually); else return dir < 0 ? range$1.from() : range$1.to(); }, sel_move); }), deleteH: methodOp(function(dir, unit) { var sel = this.doc.sel, doc$1 = this.doc; if (sel.somethingSelected()) doc$1.replaceSelection("", null, "+delete"); else deleteNearSelection(this, function(range$1) { var other = findPosH(doc$1, range$1.head, dir, unit, false); return dir < 0 ? { from: other, to: range$1.head } : { from: range$1.head, to: other }; }); }), findPosV: function(from, amount, unit, goalColumn) { var dir = 1, x = goalColumn; if (amount < 0) { dir = -1; amount = -amount; } var cur = clipPos(this.doc, from); for (var i$3 = 0; i$3 < amount; ++i$3) { var coords = cursorCoords(this, cur, "div"); if (x == null) x = coords.left; else coords.left = x; cur = findPosV(this, coords, dir, unit); if (cur.hitSide) break; } return cur; }, moveV: methodOp(function(dir, unit) { var this$1 = this; var doc$1 = this.doc, goals = []; var collapse = !this.display.shift && !doc$1.extend && doc$1.sel.somethingSelected(); doc$1.extendSelectionsBy(function(range$1) { if (collapse) return dir < 0 ? range$1.from() : range$1.to(); var headPos = cursorCoords(this$1, range$1.head, "div"); if (range$1.goalColumn != null) headPos.left = range$1.goalColumn; goals.push(headPos.left); var pos = findPosV(this$1, headPos, dir, unit); if (unit == "page" && range$1 == doc$1.sel.primary()) addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top); return pos; }, sel_move); if (goals.length) for (var i$3 = 0; i$3 < doc$1.sel.ranges.length; i$3++) doc$1.sel.ranges[i$3].goalColumn = goals[i$3]; }), findWordAt: function(pos) { var doc$1 = this.doc, line = getLine(doc$1, pos.line).text; var start = pos.ch, end = pos.ch; if (line) { var helper = this.getHelper(pos, "wordChars"); if ((pos.sticky == "before" || end == line.length) && start) --start; else ++end; var startChar = line.charAt(start); var check = isWordChar(startChar, helper) ? function(ch) { return isWordChar(ch, helper); } : /\s/.test(startChar) ? function(ch) { return /\s/.test(ch); } : function(ch) { return !/\s/.test(ch) && !isWordChar(ch); }; while (start > 0 && check(line.charAt(start - 1))) --start; while (end < line.length && check(line.charAt(end))) ++end; } return new Range(Pos(pos.line, start), Pos(pos.line, end)); }, toggleOverwrite: function(value) { if (value != null && value == this.state.overwrite) return; if (this.state.overwrite = !this.state.overwrite) addClass(this.display.cursorDiv, "CodeMirror-overwrite"); else rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); signal(this, "overwriteToggle", this, this.state.overwrite); }, hasFocus: function() { return this.display.input.getField() == activeElt(root(this)); }, isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit); }, scrollTo: methodOp(function(x, y) { scrollToCoords(this, x, y); }), getScrollInfo: function() { var scroller = this.display.scroller; return { left: scroller.scrollLeft, top: scroller.scrollTop, height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, clientHeight: displayHeight(this), clientWidth: displayWidth(this) }; }, scrollIntoView: methodOp(function(range$1, margin) { if (range$1 == null) { range$1 = { from: this.doc.sel.primary().head, to: null }; if (margin == null) margin = this.options.cursorScrollMargin; } else if (typeof range$1 == "number") range$1 = { from: Pos(range$1, 0), to: null }; else if (range$1.from == null) range$1 = { from: range$1, to: null }; if (!range$1.to) range$1.to = range$1.from; range$1.margin = margin || 0; if (range$1.from.line != null) scrollToRange(this, range$1); else scrollToCoordsRange(this, range$1.from, range$1.to, range$1.margin); }), setSize: methodOp(function(width, height) { var this$1 = this; var interpret = function(val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; }; if (width != null) this.display.wrapper.style.width = interpret(width); if (height != null) this.display.wrapper.style.height = interpret(height); if (this.options.lineWrapping) clearLineMeasurementCache(this); var lineNo$1 = this.display.viewFrom; this.doc.iter(lineNo$1, this.display.viewTo, function(line) { if (line.widgets) { for (var i$3 = 0; i$3 < line.widgets.length; i$3++) if (line.widgets[i$3].noHScroll) { regLineChange(this$1, lineNo$1, "widget"); break; } } ++lineNo$1; }); this.curOp.forceUpdate = true; signal(this, "refresh", this); }), operation: function(f) { return runInOp(this, f); }, startOperation: function() { return startOperation(this); }, endOperation: function() { return endOperation(this); }, refresh: methodOp(function() { var oldHeight = this.display.cachedTextHeight; regChange(this); this.curOp.forceUpdate = true; clearCaches(this); scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop); updateGutterSpace(this.display); if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping) estimateLineHeights(this); signal(this, "refresh", this); }), swapDoc: methodOp(function(doc$1) { var old = this.doc; old.cm = null; if (this.state.selectingText) this.state.selectingText(); attachDoc(this, doc$1); clearCaches(this); this.display.input.reset(); scrollToCoords(this, doc$1.scrollLeft, doc$1.scrollTop); this.curOp.forceScroll = true; signalLater(this, "swapDoc", this, old); return old; }), phrase: function(phraseText) { var phrases = this.options.phrases; return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText; }, 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(CodeMirror$2); CodeMirror$2.registerHelper = function(type, name, value) { if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror$2[type] = { _global: [] }; helpers[type][name] = value; }; CodeMirror$2.registerGlobalHelper = function(type, name, predicate, value) { CodeMirror$2.registerHelper(type, name, value); helpers[type]._global.push({ pred: predicate, val: value }); }; } function findPosH(doc$1, pos, dir, unit, visually) { var oldPos = pos; var origDir = dir; var lineObj = getLine(doc$1, pos.line); var lineDir = visually && doc$1.direction == "rtl" ? -dir : dir; function findNextLine() { var l = pos.line + lineDir; if (l < doc$1.first || l >= doc$1.first + doc$1.size) return false; pos = new Pos(l, pos.ch, pos.sticky); return lineObj = getLine(doc$1, l); } function moveOnce(boundToLine) { var next; if (unit == "codepoint") { var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1)); if (isNaN(ch)) next = null; else { var astral = dir > 0 ? ch >= 55296 && ch < 56320 : ch >= 56320 && ch < 57343; next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir); } } else if (visually) next = moveVisually(doc$1.cm, lineObj, pos, dir); else next = moveLogically(lineObj, pos, dir); if (next == null) if (!boundToLine && findNextLine()) pos = endOfLine(visually, doc$1.cm, lineObj, pos.line, lineDir); else return false; else pos = next; return true; } if (unit == "char" || unit == "codepoint") moveOnce(); else if (unit == "column") moveOnce(true); else if (unit == "word" || unit == "group") { var sawType = null, group = unit == "group"; var helper = doc$1.cm && doc$1.cm.getHelper(pos, "wordChars"); for (var first = true;; first = false) { if (dir < 0 && !moveOnce(!first)) break; var cur = lineObj.text.charAt(pos.ch) || "\n"; var type = isWordChar(cur, helper) ? "w" : group && cur == "\n" ? "n" : !group || /\s/.test(cur) ? null : "p"; if (group && !first && !type) type = "s"; if (sawType && sawType != type) { if (dir < 0) { dir = 1; moveOnce(); pos.sticky = "after"; } break; } if (type) sawType = type; if (dir > 0 && !moveOnce(!first)) break; } } var result = skipAtomic(doc$1, pos, oldPos, origDir, true); if (equalCursorPos(oldPos, result)) result.hitSide = true; return result; } function findPosV(cm, pos, dir, unit) { var doc$1 = cm.doc, x = pos.left, y; if (unit == "page") { var pageSize = Math.min(cm.display.wrapper.clientHeight, win(cm).innerHeight || doc$1(cm).documentElement.clientHeight); var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3); y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount; } else if (unit == "line") y = dir > 0 ? pos.bottom + 3 : pos.top - 3; var target; for (;;) { target = coordsChar(cm, x, y); if (!target.outside) break; if (dir < 0 ? y <= 0 : y >= doc$1.height) { target.hitSide = true; break; } y += dir * 5; } return target; } var ContentEditableInput = function(cm) { this.cm = cm; this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; this.polling = new Delayed(); this.composing = null; this.gracePeriod = false; this.readDOMTimeout = null; }; ContentEditableInput.prototype.init = function(display) { var this$1 = this; var input = this, cm = input.cm; var div = input.div = display.lineDiv; div.contentEditable = true; disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize); function belongsToInput(e) { for (var t = e.target; t; t = t.parentNode) { if (t == div) return true; if (/\bCodeMirror-(?:line)?widget\b/.test(t.className)) break; } return false; } on(div, "paste", function(e) { if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) return; if (ie_version <= 11) setTimeout(operation(cm, function() { return this$1.updateFromDOM(); }), 20); }); on(div, "compositionstart", function(e) { this$1.composing = { data: e.data, done: false }; }); on(div, "compositionupdate", function(e) { if (!this$1.composing) this$1.composing = { data: e.data, done: false }; }); on(div, "compositionend", function(e) { if (this$1.composing) { if (e.data != this$1.composing.data) this$1.readFromDOMSoon(); this$1.composing.done = true; } }); on(div, "touchstart", function() { return input.forceCompositionEnd(); }); on(div, "input", function() { if (!this$1.composing) this$1.readFromDOMSoon(); }); function onCopyCut(e) { if (!belongsToInput(e) || signalDOMEvent(cm, e)) return; if (cm.somethingSelected()) { setLastCopied({ lineWise: false, text: cm.getSelections() }); if (e.type == "cut") cm.replaceSelection("", null, "cut"); } else if (!cm.options.lineWiseCopyCut) return; else { var ranges = copyableRanges(cm); setLastCopied({ lineWise: true, text: ranges.text }); if (e.type == "cut") cm.operation(function() { cm.setSelections(ranges.ranges, 0, sel_dontScroll); cm.replaceSelection("", null, "cut"); }); } if (e.clipboardData) { e.clipboardData.clearData(); var content = lastCopied.text.join("\n"); e.clipboardData.setData("Text", content); if (e.clipboardData.getData("Text") == content) { e.preventDefault(); return; } } var kludge = hiddenTextarea(), te = kludge.firstChild; disableBrowserMagic(te); cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); te.value = lastCopied.text.join("\n"); var hadFocus = activeElt(rootNode(div)); selectInput(te); setTimeout(function() { cm.display.lineSpace.removeChild(kludge); hadFocus.focus(); if (hadFocus == div) input.showPrimarySelection(); }, 50); } on(div, "copy", onCopyCut); on(div, "cut", onCopyCut); }; ContentEditableInput.prototype.screenReaderLabelChanged = function(label) { if (label) this.div.setAttribute("aria-label", label); else this.div.removeAttribute("aria-label"); }; ContentEditableInput.prototype.prepareSelection = function() { var result = prepareSelection(this.cm, false); result.focus = activeElt(rootNode(this.div)) == this.div; return result; }; ContentEditableInput.prototype.showSelection = function(info, takeFocus) { if (!info || !this.cm.display.view.length) return; if (info.focus || takeFocus) this.showPrimarySelection(); this.showMultipleSelections(info); }; ContentEditableInput.prototype.getSelection = function() { return this.cm.display.wrapper.ownerDocument.getSelection(); }; ContentEditableInput.prototype.showPrimarySelection = function() { var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary(); var from = prim.from(), to = prim.to(); if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) { sel.removeAllRanges(); return; } var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset); if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && cmp(minPos(curAnchor, curFocus), from) == 0 && cmp(maxPos(curAnchor, curFocus), to) == 0) return; var view = cm.display.view; var start = from.line >= cm.display.viewFrom && posToDOM(cm, from) || { node: view[0].measure.map[2], offset: 0 }; var end = to.line < cm.display.viewTo && posToDOM(cm, to); if (!end) { var measure = view[view.length - 1].measure; var map$1 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; end = { node: map$1[map$1.length - 1], offset: map$1[map$1.length - 2] - map$1[map$1.length - 3] }; } if (!start || !end) { sel.removeAllRanges(); return; } var old = sel.rangeCount && sel.getRangeAt(0), rng; try { rng = range(start.node, start.offset, end.offset, end.node); } catch (e) {} if (rng) { if (!gecko && cm.state.focused) { sel.collapse(start.node, start.offset); if (!rng.collapsed) { sel.removeAllRanges(); sel.addRange(rng); } } else { sel.removeAllRanges(); sel.addRange(rng); } if (old && sel.anchorNode == null) sel.addRange(old); else if (gecko) this.startGracePeriod(); } this.rememberSelection(); }; ContentEditableInput.prototype.startGracePeriod = function() { var this$1 = this; clearTimeout(this.gracePeriod); this.gracePeriod = setTimeout(function() { this$1.gracePeriod = false; if (this$1.selectionChanged()) this$1.cm.operation(function() { return this$1.cm.curOp.selectionChanged = true; }); }, 20); }; ContentEditableInput.prototype.showMultipleSelections = function(info) { removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); }; ContentEditableInput.prototype.rememberSelection = function() { var sel = this.getSelection(); this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset; this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset; }; ContentEditableInput.prototype.selectionInEditor = function() { var sel = this.getSelection(); if (!sel.rangeCount) return false; var node = sel.getRangeAt(0).commonAncestorContainer; return contains(this.div, node); }; ContentEditableInput.prototype.focus = function() { if (this.cm.options.readOnly != "nocursor") { if (!this.selectionInEditor() || activeElt(rootNode(this.div)) != this.div) this.showSelection(this.prepareSelection(), true); this.div.focus(); } }; ContentEditableInput.prototype.blur = function() { this.div.blur(); }; ContentEditableInput.prototype.getField = function() { return this.div; }; ContentEditableInput.prototype.supportsTouch = function() { return true; }; ContentEditableInput.prototype.receivedFocus = function() { var this$1 = this; var input = this; if (this.selectionInEditor()) setTimeout(function() { return this$1.pollSelection(); }, 20); else runInOp(this.cm, function() { return input.cm.curOp.selectionChanged = true; }); function poll() { if (input.cm.state.focused) { input.pollSelection(); input.polling.set(input.cm.options.pollInterval, poll); } } this.polling.set(this.cm.options.pollInterval, poll); }; ContentEditableInput.prototype.selectionChanged = function() { var sel = this.getSelection(); return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset; }; ContentEditableInput.prototype.pollSelection = function() { if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) return; var sel = this.getSelection(), cm = this.cm; if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) { this.cm.triggerOnKeyDown({ type: "keydown", keyCode: 8, preventDefault: Math.abs }); this.blur(); this.focus(); return; } if (this.composing) return; this.rememberSelection(); var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); var head = domToPos(cm, sel.focusNode, sel.focusOffset); if (anchor && head) runInOp(cm, function() { setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); if (anchor.bad || head.bad) cm.curOp.selectionChanged = true; }); }; ContentEditableInput.prototype.pollContent = function() { if (this.readDOMTimeout != null) { clearTimeout(this.readDOMTimeout); this.readDOMTimeout = null; } var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary(); var from = sel.from(), to = sel.to(); if (from.ch == 0 && from.line > cm.firstLine()) from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) to = Pos(to.line + 1, 0); if (from.line < display.viewFrom || to.line > display.viewTo - 1) return false; var fromIndex, fromLine, fromNode; if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { fromLine = lineNo(display.view[0].line); fromNode = display.view[0].node; } else { fromLine = lineNo(display.view[fromIndex].line); fromNode = display.view[fromIndex - 1].node.nextSibling; } var toIndex = findViewIndex(cm, to.line); var toLine, toNode; if (toIndex == display.view.length - 1) { toLine = display.viewTo - 1; toNode = display.lineDiv.lastChild; } else { toLine = lineNo(display.view[toIndex + 1].line) - 1; toNode = display.view[toIndex + 1].node.previousSibling; } if (!fromNode) return false; var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); while (newText.length > 1 && oldText.length > 1) if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; } else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; } else break; var cutFront = 0, cutEnd = 0; var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length); while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) ++cutFront; var newBot = lst(newText), oldBot = lst(oldText); var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), oldBot.length - (oldText.length == 1 ? cutFront : 0)); while (cutEnd < maxCutEnd && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) ++cutEnd; if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) while (cutFront && cutFront > from.ch && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { cutFront--; cutEnd++; } newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, ""); newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, ""); var chFrom = Pos(fromLine, cutFront); var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { replaceRange(cm.doc, newText, chFrom, chTo, "+input"); return true; } }; ContentEditableInput.prototype.ensurePolled = function() { this.forceCompositionEnd(); }; ContentEditableInput.prototype.reset = function() { this.forceCompositionEnd(); }; ContentEditableInput.prototype.forceCompositionEnd = function() { if (!this.composing) return; clearTimeout(this.readDOMTimeout); this.composing = null; this.updateFromDOM(); this.div.blur(); this.div.focus(); }; ContentEditableInput.prototype.readFromDOMSoon = function() { var this$1 = this; if (this.readDOMTimeout != null) return; this.readDOMTimeout = setTimeout(function() { this$1.readDOMTimeout = null; if (this$1.composing) if (this$1.composing.done) this$1.composing = null; else return; this$1.updateFromDOM(); }, 80); }; ContentEditableInput.prototype.updateFromDOM = function() { var this$1 = this; if (this.cm.isReadOnly() || !this.pollContent()) runInOp(this.cm, function() { return regChange(this$1.cm); }); }; ContentEditableInput.prototype.setUneditable = function(node) { node.contentEditable = "false"; }; ContentEditableInput.prototype.onKeyPress = function(e) { if (e.charCode == 0 || this.composing) return; e.preventDefault(); if (!this.cm.isReadOnly()) operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }; ContentEditableInput.prototype.readOnlyChanged = function(val) { this.div.contentEditable = String(val != "nocursor"); }; ContentEditableInput.prototype.onContextMenu = function() {}; ContentEditableInput.prototype.resetPosition = function() {}; ContentEditableInput.prototype.needsContentAttribute = true; function posToDOM(cm, pos) { var view = findViewForLine(cm, pos.line); if (!view || view.hidden) return null; var line = getLine(cm.doc, pos.line); var info = mapFromLineView(view, line, pos.line); var order = getOrder(line, cm.doc.direction), side = "left"; if (order) { var partPos = getBidiPartAt(order, pos.ch); side = partPos % 2 ? "right" : "left"; } var result = nodeAndOffsetInLineMap(info.map, pos.ch, side); result.offset = result.collapse == "right" ? result.end : result.start; return result; } function isInGutter(node) { for (var scan = node; scan; scan = scan.parentNode) if (/CodeMirror-gutter-wrapper/.test(scan.className)) return true; return false; } function badPos(pos, bad) { if (bad) pos.bad = true; return pos; } function domTextBetween(cm, from, to, fromLine, toLine) { var text = "", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false; function recognizeMarker(id) { return function(marker) { return marker.id == id; }; } function close() { if (closing) { text += lineSep; if (extraLinebreak) text += lineSep; closing = extraLinebreak = false; } } function addText(str) { if (str) { close(); text += str; } } function walk(node) { if (node.nodeType == 1) { var cmText = node.getAttribute("cm-text"); if (cmText) { addText(cmText); return; } var markerID = node.getAttribute("cm-marker"), range$1; if (markerID) { var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); if (found.length && (range$1 = found[0].find(0))) addText(getBetween(cm.doc, range$1.from, range$1.to).join(lineSep)); return; } if (node.getAttribute("contenteditable") == "false") return; var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName); if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) return; if (isBlock) close(); for (var i$3 = 0; i$3 < node.childNodes.length; i$3++) walk(node.childNodes[i$3]); if (/^(pre|p)$/i.test(node.nodeName)) extraLinebreak = true; if (isBlock) closing = true; } else if (node.nodeType == 3) addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " ")); } for (;;) { walk(from); if (from == to) break; from = from.nextSibling; extraLinebreak = false; } return text; } function domToPos(cm, node, offset) { var lineNode; if (node == cm.display.lineDiv) { lineNode = cm.display.lineDiv.childNodes[offset]; if (!lineNode) return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true); node = null; offset = 0; } else for (lineNode = node;; lineNode = lineNode.parentNode) { if (!lineNode || lineNode == cm.display.lineDiv) return null; if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) break; } for (var i$3 = 0; i$3 < cm.display.view.length; i$3++) { var lineView = cm.display.view[i$3]; if (lineView.node == lineNode) return locateNodeInLineView(lineView, node, offset); } } function locateNodeInLineView(lineView, node, offset) { var wrapper = lineView.text.firstChild, bad = false; if (!node || !contains(wrapper, node)) return badPos(Pos(lineNo(lineView.line), 0), true); if (node == wrapper) { bad = true; node = wrapper.childNodes[offset]; offset = 0; if (!node) { var line = lineView.rest ? lst(lineView.rest) : lineView.line; return badPos(Pos(lineNo(line), line.text.length), bad); } } var textNode = node.nodeType == 3 ? node : null, topNode = node; if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { textNode = node.firstChild; if (offset) offset = textNode.nodeValue.length; } while (topNode.parentNode != wrapper) topNode = topNode.parentNode; var measure = lineView.measure, maps = measure.maps; function find(textNode$1, topNode$1, offset$1) { for (var i$3 = -1; i$3 < (maps ? maps.length : 0); i$3++) { var map$1 = i$3 < 0 ? measure.map : maps[i$3]; for (var j = 0; j < map$1.length; j += 3) { var curNode = map$1[j + 2]; if (curNode == textNode$1 || curNode == topNode$1) { var line$1 = lineNo(i$3 < 0 ? lineView.line : lineView.rest[i$3]); var ch = map$1[j] + offset$1; if (offset$1 < 0 || curNode != textNode$1) ch = map$1[j + (offset$1 ? 1 : 0)]; return Pos(line$1, ch); } } } } var found = find(textNode, topNode, offset); if (found) return badPos(found, bad); for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { found = find(after, after.firstChild, 0); if (found) return badPos(Pos(found.line, found.ch - dist), bad); else dist += after.textContent.length; } for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) { found = find(before, before.firstChild, -1); if (found) return badPos(Pos(found.line, found.ch + dist$1), bad); else dist$1 += before.textContent.length; } } var TextareaInput = function(cm) { this.cm = cm; this.prevInput = ""; this.pollingFast = false; this.polling = new Delayed(); this.hasSelection = false; this.composing = null; this.resetting = false; }; TextareaInput.prototype.init = function(display) { var this$1 = this; var input = this, cm = this.cm; this.createField(display); var te = this.textarea; display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild); if (ios) te.style.width = "0px"; on(te, "input", function() { if (ie && ie_version >= 9 && this$1.hasSelection) this$1.hasSelection = null; input.poll(); }); on(te, "paste", function(e) { if (signalDOMEvent(cm, e) || handlePaste(e, cm)) return; cm.state.pasteIncoming = +new Date(); input.fastPoll(); }); function prepareCopyCut(e) { if (signalDOMEvent(cm, e)) return; if (cm.somethingSelected()) setLastCopied({ lineWise: false, text: cm.getSelections() }); else if (!cm.options.lineWiseCopyCut) return; else { var ranges = copyableRanges(cm); setLastCopied({ lineWise: true, text: ranges.text }); if (e.type == "cut") cm.setSelections(ranges.ranges, null, sel_dontScroll); else { input.prevInput = ""; te.value = ranges.text.join("\n"); selectInput(te); } } if (e.type == "cut") cm.state.cutIncoming = +new Date(); } on(te, "cut", prepareCopyCut); on(te, "copy", prepareCopyCut); on(display.scroller, "paste", function(e) { if (eventInWidget(display, e) || signalDOMEvent(cm, e)) return; if (!te.dispatchEvent) { cm.state.pasteIncoming = +new Date(); input.focus(); return; } var event = new Event("paste"); event.clipboardData = e.clipboardData; te.dispatchEvent(event); }); on(display.lineSpace, "selectstart", function(e) { if (!eventInWidget(display, e)) e_preventDefault(e); }); on(te, "compositionstart", function() { var start = cm.getCursor("from"); if (input.composing) input.composing.range.clear(); input.composing = { start, range: cm.markText(start, cm.getCursor("to"), { className: "CodeMirror-composing" }) }; }); on(te, "compositionend", function() { if (input.composing) { input.poll(); input.composing.range.clear(); input.composing = null; } }); }; TextareaInput.prototype.createField = function(_display) { this.wrapper = hiddenTextarea(); this.textarea = this.wrapper.firstChild; var opts = this.cm.options; disableBrowserMagic(this.textarea, opts.spellcheck, opts.autocorrect, opts.autocapitalize); }; TextareaInput.prototype.screenReaderLabelChanged = function(label) { if (label) this.textarea.setAttribute("aria-label", label); else this.textarea.removeAttribute("aria-label"); }; TextareaInput.prototype.prepareSelection = function() { var cm = this.cm, display = cm.display, doc$1 = cm.doc; var result = prepareSelection(cm); if (cm.options.moveInputWithCursor) { var headPos = cursorCoords(cm, doc$1.sel.primary().head, "div"); var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, headPos.top + lineOff.top - wrapOff.top)); result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, headPos.left + lineOff.left - wrapOff.left)); } return result; }; TextareaInput.prototype.showSelection = function(drawn) { var cm = this.cm, display = cm.display; removeChildrenAndAdd(display.cursorDiv, drawn.cursors); removeChildrenAndAdd(display.selectionDiv, drawn.selection); if (drawn.teTop != null) { this.wrapper.style.top = drawn.teTop + "px"; this.wrapper.style.left = drawn.teLeft + "px"; } }; TextareaInput.prototype.reset = function(typing) { if (this.contextMenuPending || this.composing && typing) return; var cm = this.cm; this.resetting = true; if (cm.somethingSelected()) { this.prevInput = ""; var content = cm.getSelection(); this.textarea.value = content; if (cm.state.focused) selectInput(this.textarea); if (ie && ie_version >= 9) this.hasSelection = content; } else if (!typing) { this.prevInput = this.textarea.value = ""; if (ie && ie_version >= 9) this.hasSelection = null; } this.resetting = false; }; TextareaInput.prototype.getField = function() { return this.textarea; }; TextareaInput.prototype.supportsTouch = function() { return false; }; TextareaInput.prototype.focus = function() { if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt(rootNode(this.textarea)) != this.textarea)) try { this.textarea.focus(); } catch (e) {} }; TextareaInput.prototype.blur = function() { this.textarea.blur(); }; TextareaInput.prototype.resetPosition = function() { this.wrapper.style.top = this.wrapper.style.left = 0; }; TextareaInput.prototype.receivedFocus = function() { this.slowPoll(); }; TextareaInput.prototype.slowPoll = function() { var this$1 = this; if (this.pollingFast) return; this.polling.set(this.cm.options.pollInterval, function() { this$1.poll(); if (this$1.cm.state.focused) this$1.slowPoll(); }); }; TextareaInput.prototype.fastPoll = function() { var missed = false, input = this; input.pollingFast = true; function p() { var changed = input.poll(); if (!changed && !missed) { missed = true; input.polling.set(60, p); } else { input.pollingFast = false; input.slowPoll(); } } input.polling.set(20, p); }; TextareaInput.prototype.poll = function() { var this$1 = this; var cm = this.cm, input = this.textarea, prevInput = this.prevInput; if (this.contextMenuPending || this.resetting || !cm.state.focused || hasSelection(input) && !prevInput && !this.composing || cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) return false; var text = input.value; if (text == prevInput && !cm.somethingSelected()) return false; if (ie && ie_version >= 9 && this.hasSelection === text || mac && /[\uf700-\uf7ff]/.test(text)) { cm.display.input.reset(); return false; } if (cm.doc.sel == cm.display.selForContextMenu) { var first = text.charCodeAt(0); if (first == 8203 && !prevInput) prevInput = "​"; if (first == 8666) { this.reset(); return this.cm.execCommand("undo"); } } var same = 0, l = Math.min(prevInput.length, text.length); while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same; runInOp(cm, function() { applyTextInput(cm, text.slice(same), prevInput.length - same, null, this$1.composing ? "*compose" : null); if (text.length > 1e3 || text.indexOf("\n") > -1) input.value = this$1.prevInput = ""; else this$1.prevInput = text; if (this$1.composing) { this$1.composing.range.clear(); this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"), { className: "CodeMirror-composing" }); } }); return true; }; TextareaInput.prototype.ensurePolled = function() { if (this.pollingFast && this.poll()) this.pollingFast = false; }; TextareaInput.prototype.onKeyPress = function() { if (ie && ie_version >= 9) this.hasSelection = null; this.fastPoll(); }; TextareaInput.prototype.onContextMenu = function(e) { var input = this, cm = input.cm, display = cm.display, te = input.textarea; if (input.contextMenuPending) input.contextMenuPending(); var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; if (!pos || presto) return; var reset = cm.options.resetSelectionOnContextMenu; if (reset && cm.doc.sel.contains(pos) == -1) operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText; var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect(); input.wrapper.style.cssText = "position: static"; te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; var oldScrollY; if (webkit) oldScrollY = te.ownerDocument.defaultView.scrollY; display.input.focus(); if (webkit) te.ownerDocument.defaultView.scrollTo(null, oldScrollY); display.input.reset(); if (!cm.somethingSelected()) te.value = input.prevInput = " "; input.contextMenuPending = rehide; display.selForContextMenu = cm.doc.sel; clearTimeout(display.detectingSelectAll); function prepareSelectAllHack() { if (te.selectionStart != null) { var selected = cm.somethingSelected(); var extval = "​" + (selected ? te.value : ""); te.value = "⇚"; te.value = extval; input.prevInput = selected ? "" : "​"; te.selectionStart = 1; te.selectionEnd = extval.length; display.selForContextMenu = cm.doc.sel; } } function rehide() { if (input.contextMenuPending != rehide) return; input.contextMenuPending = false; input.wrapper.style.cssText = oldWrapperCSS; te.style.cssText = oldCSS; if (ie && ie_version < 9) display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); if (te.selectionStart != null) { if (!ie || ie && ie_version < 9) prepareSelectAllHack(); var i$3 = 0, poll = function() { if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && te.selectionEnd > 0 && input.prevInput == "​") operation(cm, selectAll)(cm); else if (i$3++ < 10) display.detectingSelectAll = setTimeout(poll, 500); else { display.selForContextMenu = null; display.input.reset(); } }; display.detectingSelectAll = setTimeout(poll, 200); } } if (ie && ie_version >= 9) prepareSelectAllHack(); if (captureRightClick) { e_stop(e); var mouseup = function() { off(window, "mouseup", mouseup); setTimeout(rehide, 20); }; on(window, "mouseup", mouseup); } else setTimeout(rehide, 50); }; TextareaInput.prototype.readOnlyChanged = function(val) { if (!val) this.reset(); this.textarea.disabled = val == "nocursor"; this.textarea.readOnly = !!val; }; TextareaInput.prototype.setUneditable = function() {}; TextareaInput.prototype.needsContentAttribute = false; function fromTextArea(textarea, options) { options = options ? copyObj(options) : {}; options.value = textarea.value; if (!options.tabindex && textarea.tabIndex) options.tabindex = textarea.tabIndex; if (!options.placeholder && textarea.placeholder) options.placeholder = textarea.placeholder; if (options.autofocus == null) { var hasFocus = activeElt(rootNode(textarea)); options.autofocus = hasFocus == textarea || textarea.getAttribute("autofocus") != null && hasFocus == document.body; } function save() { textarea.value = cm.getValue(); } var realSubmit; if (textarea.form) { on(textarea.form, "submit", save); if (!options.leaveSubmitMethodAlone) { var form = textarea.form; realSubmit = form.submit; try { var wrappedSubmit = form.submit = function() { save(); form.submit = realSubmit; form.submit(); form.submit = wrappedSubmit; }; } catch (e) {} } } options.finishInit = function(cm$1) { cm$1.save = save; cm$1.getTextArea = function() { return textarea; }; cm$1.toTextArea = function() { cm$1.toTextArea = isNaN; save(); textarea.parentNode.removeChild(cm$1.getWrapperElement()); textarea.style.display = ""; if (textarea.form) { off(textarea.form, "submit", save); if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == "function") textarea.form.submit = realSubmit; } }; }; textarea.style.display = "none"; var cm = CodeMirror$1(function(node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); }, options); return cm; } function addLegacyProps(CodeMirror$2) { CodeMirror$2.off = off; CodeMirror$2.on = on; CodeMirror$2.wheelEventPixels = wheelEventPixels; CodeMirror$2.Doc = Doc; CodeMirror$2.splitLines = splitLinesAuto; CodeMirror$2.countColumn = countColumn; CodeMirror$2.findColumn = findColumn; CodeMirror$2.isWordChar = isWordCharBasic; CodeMirror$2.Pass = Pass; CodeMirror$2.signal = signal; CodeMirror$2.Line = Line; CodeMirror$2.changeEnd = changeEnd; CodeMirror$2.scrollbarModel = scrollbarModel; CodeMirror$2.Pos = Pos; CodeMirror$2.cmpPos = cmp; CodeMirror$2.modes = modes; CodeMirror$2.mimeModes = mimeModes; CodeMirror$2.resolveMode = resolveMode; CodeMirror$2.getMode = getMode; CodeMirror$2.modeExtensions = modeExtensions; CodeMirror$2.extendMode = extendMode; CodeMirror$2.copyState = copyState; CodeMirror$2.startState = startState; CodeMirror$2.innerMode = innerMode; CodeMirror$2.commands = commands; CodeMirror$2.keyMap = keyMap; CodeMirror$2.keyName = keyName; CodeMirror$2.isModifierKey = isModifierKey; CodeMirror$2.lookupKey = lookupKey; CodeMirror$2.normalizeKeyMap = normalizeKeyMap; CodeMirror$2.StringStream = StringStream; CodeMirror$2.SharedTextMarker = SharedTextMarker; CodeMirror$2.TextMarker = TextMarker; CodeMirror$2.LineWidget = LineWidget; CodeMirror$2.e_preventDefault = e_preventDefault; CodeMirror$2.e_stopPropagation = e_stopPropagation; CodeMirror$2.e_stop = e_stop; CodeMirror$2.addClass = addClass; CodeMirror$2.contains = contains; CodeMirror$2.rmClass = rmClass; CodeMirror$2.keyNames = keyNames; } defineOptions(CodeMirror$1); addEditorMethods(CodeMirror$1); var dontDelegate = "iter insert remove copy getEditor constructor".split(" "); for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) CodeMirror$1.prototype[prop] = function(method) { return function() { return method.apply(this.doc, arguments); }; }(Doc.prototype[prop]); eventMixin(Doc); CodeMirror$1.inputStyles = { "textarea": TextareaInput, "contenteditable": ContentEditableInput }; CodeMirror$1.defineMode = function(name) { if (!CodeMirror$1.defaults.mode && name != "null") CodeMirror$1.defaults.mode = name; defineMode.apply(this, arguments); }; CodeMirror$1.defineMIME = defineMIME; CodeMirror$1.defineMode("null", function() { return { token: function(stream) { return stream.skipToEnd(); } }; }); CodeMirror$1.defineMIME("text/plain", "null"); CodeMirror$1.defineExtension = function(name, func) { CodeMirror$1.prototype[name] = func; }; CodeMirror$1.defineDocExtension = function(name, func) { Doc.prototype[name] = func; }; CodeMirror$1.fromTextArea = fromTextArea; addLegacyProps(CodeMirror$1); CodeMirror$1.version = "5.65.18"; return CodeMirror$1; }); }); var import_codemirror = __toESM(require_codemirror()); var require_dialog = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror()); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod); else mod(CodeMirror); })(function(CodeMirror$1) { function dialogDiv(cm, template, bottom) { var wrap$1 = cm.getWrapperElement(); var dialog; dialog = wrap$1.appendChild(document.createElement("div")); if (bottom) dialog.className = "CodeMirror-dialog CodeMirror-dialog-bottom"; else dialog.className = "CodeMirror-dialog CodeMirror-dialog-top"; if (typeof template == "string") dialog.innerHTML = template; else dialog.appendChild(template); CodeMirror$1.addClass(wrap$1, "dialog-opened"); return dialog; } function closeNotification(cm, newVal) { if (cm.state.currentNotificationClose) cm.state.currentNotificationClose(); cm.state.currentNotificationClose = newVal; } CodeMirror$1.defineExtension("openDialog", function(template, callback, options) { if (!options) options = {}; closeNotification(this, null); var dialog = dialogDiv(this, template, options.bottom); var closed = false, me = this; function close(newVal) { if (typeof newVal == "string") inp.value = newVal; else { if (closed) return; closed = true; CodeMirror$1.rmClass(dialog.parentNode, "dialog-opened"); dialog.parentNode.removeChild(dialog); me.focus(); if (options.onClose) options.onClose(dialog); } } var inp = dialog.getElementsByTagName("input")[0], button; if (inp) { inp.focus(); if (options.value) { inp.value = options.value; if (options.selectValueOnOpen !== false) inp.select(); } if (options.onInput) CodeMirror$1.on(inp, "input", function(e) { options.onInput(e, inp.value, close); }); if (options.onKeyUp) CodeMirror$1.on(inp, "keyup", function(e) { options.onKeyUp(e, inp.value, close); }); CodeMirror$1.on(inp, "keydown", function(e) { if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) return; if (e.keyCode == 27 || options.closeOnEnter !== false && e.keyCode == 13) { inp.blur(); CodeMirror$1.e_stop(e); close(); } if (e.keyCode == 13) callback(inp.value, e); }); if (options.closeOnBlur !== false) CodeMirror$1.on(dialog, "focusout", function(evt) { if (evt.relatedTarget !== null) close(); }); } else if (button = dialog.getElementsByTagName("button")[0]) { CodeMirror$1.on(button, "click", function() { close(); me.focus(); }); if (options.closeOnBlur !== false) CodeMirror$1.on(button, "blur", close); button.focus(); } return close; }); CodeMirror$1.defineExtension("openConfirm", function(template, callbacks, options) { closeNotification(this, null); var dialog = dialogDiv(this, template, options && options.bottom); var buttons = dialog.getElementsByTagName("button"); var closed = false, me = this, blurring = 1; function close() { if (closed) return; closed = true; CodeMirror$1.rmClass(dialog.parentNode, "dialog-opened"); dialog.parentNode.removeChild(dialog); me.focus(); } buttons[0].focus(); for (var i = 0; i < buttons.length; ++i) { var b = buttons[i]; (function(callback) { CodeMirror$1.on(b, "click", function(e) { CodeMirror$1.e_preventDefault(e); close(); if (callback) callback(me); }); })(callbacks[i]); CodeMirror$1.on(b, "blur", function() { --blurring; setTimeout(function() { if (blurring <= 0) close(); }, 200); }); CodeMirror$1.on(b, "focus", function() { ++blurring; }); } }); CodeMirror$1.defineExtension("openNotification", function(template, options) { closeNotification(this, close); var dialog = dialogDiv(this, template, options && options.bottom); var closed = false, doneTimer; var duration = options && typeof options.duration !== "undefined" ? options.duration : 5e3; function close() { if (closed) return; closed = true; clearTimeout(doneTimer); CodeMirror$1.rmClass(dialog.parentNode, "dialog-opened"); dialog.parentNode.removeChild(dialog); } CodeMirror$1.on(dialog, "click", function(e) { CodeMirror$1.e_preventDefault(e); close(); }); if (duration) doneTimer = setTimeout(close, duration); return close; }); }); }); var require_placeholder = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror()); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod); else mod(CodeMirror); })(function(CodeMirror$1) { CodeMirror$1.defineOption("placeholder", "", function(cm, val, old) { var prev = old && old != CodeMirror$1.Init; if (val && !prev) { cm.on("blur", onBlur); cm.on("change", onChange); cm.on("swapDoc", onChange); CodeMirror$1.on(cm.getInputField(), "compositionupdate", cm.state.placeholderCompose = function() { onComposition(cm); }); onChange(cm); } else if (!val && prev) { cm.off("blur", onBlur); cm.off("change", onChange); cm.off("swapDoc", onChange); CodeMirror$1.off(cm.getInputField(), "compositionupdate", cm.state.placeholderCompose); clearPlaceholder(cm); var wrapper = cm.getWrapperElement(); wrapper.className = wrapper.className.replace(" CodeMirror-empty", ""); } if (val && !cm.hasFocus()) onBlur(cm); }); function clearPlaceholder(cm) { if (cm.state.placeholder) { cm.state.placeholder.parentNode.removeChild(cm.state.placeholder); cm.state.placeholder = null; } } function setPlaceholder(cm) { clearPlaceholder(cm); var elt = cm.state.placeholder = document.createElement("pre"); elt.style.cssText = "height: 0; overflow: visible"; elt.style.direction = cm.getOption("direction"); elt.className = "CodeMirror-placeholder CodeMirror-line-like"; var placeHolder = cm.getOption("placeholder"); if (typeof placeHolder == "string") placeHolder = document.createTextNode(placeHolder); elt.appendChild(placeHolder); cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild); } function onComposition(cm) { setTimeout(function() { var empty = false; if (cm.lineCount() == 1) { var input = cm.getInputField(); empty = input.nodeName == "TEXTAREA" ? !cm.getLine(0).length : !/[^\u200b]/.test(input.querySelector(".CodeMirror-line").textContent); } if (empty) setPlaceholder(cm); else clearPlaceholder(cm); }, 20); } function onBlur(cm) { if (isEmpty(cm)) setPlaceholder(cm); } function onChange(cm) { var wrapper = cm.getWrapperElement(), empty = isEmpty(cm); wrapper.className = wrapper.className.replace(" CodeMirror-empty", "") + (empty ? " CodeMirror-empty" : ""); if (empty) setPlaceholder(cm); else clearPlaceholder(cm); } function isEmpty(cm) { return cm.lineCount() === 1 && cm.getLine(0) === ""; } }); }); var require_jump_to_line = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror(), require_dialog()); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror", "../dialog/dialog"], mod); else mod(CodeMirror); })(function(CodeMirror$1) { "use strict"; CodeMirror$1.defineOption("search", { bottom: false }); function dialog(cm, text, shortText, deflt, f) { if (cm.openDialog) cm.openDialog(text, f, { value: deflt, selectValueOnOpen: true, bottom: cm.options.search.bottom }); else f(prompt(shortText, deflt)); } function getJumpDialog(cm) { return cm.phrase("Jump to line:") + " " + cm.phrase("(Use line:column or scroll% syntax)") + ""; } function interpretLine(cm, string) { var num = Number(string); if (/^[-+]/.test(string)) return cm.getCursor().line + num; else return num - 1; } CodeMirror$1.commands.jumpToLine = function(cm) { var cur = cm.getCursor(); dialog(cm, getJumpDialog(cm), cm.phrase("Jump to line:"), cur.line + 1 + ":" + cur.ch, function(posStr) { if (!posStr) return; var match; if (match = /^\s*([\+\-]?\d+)\s*\:\s*(\d+)\s*$/.exec(posStr)) cm.setCursor(interpretLine(cm, match[1]), Number(match[2])); else if (match = /^\s*([\+\-]?\d+(\.\d+)?)\%\s*/.exec(posStr)) { var line = Math.round(cm.lineCount() * Number(match[1]) / 100); if (/^[-+]/.test(match[1])) line = cur.line + line + 1; cm.setCursor(line - 1, cur.ch); } else if (match = /^\s*\:?\s*([\+\-]?\d+)\s*/.exec(posStr)) cm.setCursor(interpretLine(cm, match[1]), cur.ch); }); }; CodeMirror$1.keyMap["default"]["Alt-G"] = "jumpToLine"; }); }); var require_searchcursor = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror()); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod); else mod(CodeMirror); })(function(CodeMirror$1) { "use strict"; var Pos = CodeMirror$1.Pos; function regexpFlags(regexp) { var flags = regexp.flags; return flags != null ? flags : (regexp.ignoreCase ? "i" : "") + (regexp.global ? "g" : "") + (regexp.multiline ? "m" : ""); } function ensureFlags(regexp, flags) { var current = regexpFlags(regexp), target = current; for (var i = 0; i < flags.length; i++) if (target.indexOf(flags.charAt(i)) == -1) target += flags.charAt(i); return current == target ? regexp : new RegExp(regexp.source, target); } function maybeMultiline(regexp) { return /\\s|\\n|\n|\\W|\\D|\[\^/.test(regexp.source); } function searchRegexpForward(doc, regexp, start) { regexp = ensureFlags(regexp, "g"); for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) { regexp.lastIndex = ch; var string = doc.getLine(line), match = regexp.exec(string); if (match) return { from: Pos(line, match.index), to: Pos(line, match.index + match[0].length), match }; } } function searchRegexpForwardMultiline(doc, regexp, start) { if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start); regexp = ensureFlags(regexp, "gm"); var string, chunk = 1; for (var line = start.line, last = doc.lastLine(); line <= last;) { for (var i = 0; i < chunk; i++) { if (line > last) break; var curLine = doc.getLine(line++); string = string == null ? curLine : string + "\n" + curLine; } chunk = chunk * 2; regexp.lastIndex = start.ch; var match = regexp.exec(string); if (match) { var before = string.slice(0, match.index).split("\n"), inside = match[0].split("\n"); var startLine = start.line + before.length - 1, startCh = before[before.length - 1].length; return { from: Pos(startLine, startCh), to: Pos(startLine + inside.length - 1, inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length), match }; } } } function lastMatchIn(string, regexp, endMargin) { var match, from = 0; while (from <= string.length) { regexp.lastIndex = from; var newMatch = regexp.exec(string); if (!newMatch) break; var end = newMatch.index + newMatch[0].length; if (end > string.length - endMargin) break; if (!match || end > match.index + match[0].length) match = newMatch; from = newMatch.index + 1; } return match; } function searchRegexpBackward(doc, regexp, start) { regexp = ensureFlags(regexp, "g"); for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) { var string = doc.getLine(line); var match = lastMatchIn(string, regexp, ch < 0 ? 0 : string.length - ch); if (match) return { from: Pos(line, match.index), to: Pos(line, match.index + match[0].length), match }; } } function searchRegexpBackwardMultiline(doc, regexp, start) { if (!maybeMultiline(regexp)) return searchRegexpBackward(doc, regexp, start); regexp = ensureFlags(regexp, "gm"); var string, chunkSize = 1, endMargin = doc.getLine(start.line).length - start.ch; for (var line = start.line, first = doc.firstLine(); line >= first;) { for (var i = 0; i < chunkSize && line >= first; i++) { var curLine = doc.getLine(line--); string = string == null ? curLine : curLine + "\n" + string; } chunkSize *= 2; var match = lastMatchIn(string, regexp, endMargin); if (match) { var before = string.slice(0, match.index).split("\n"), inside = match[0].split("\n"); var startLine = line + before.length, startCh = before[before.length - 1].length; return { from: Pos(startLine, startCh), to: Pos(startLine + inside.length - 1, inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length), match }; } } } var doFold, noFold; if (String.prototype.normalize) { doFold = function(str) { return str.normalize("NFD").toLowerCase(); }; noFold = function(str) { return str.normalize("NFD"); }; } else { doFold = function(str) { return str.toLowerCase(); }; noFold = function(str) { return str; }; } function adjustPos(orig, folded, pos, foldFunc) { if (orig.length == folded.length) return pos; for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) { if (min == max) return min; var mid = min + max >> 1; var len = foldFunc(orig.slice(0, mid)).length; if (len == pos) return mid; else if (len > pos) max = mid; else min = mid + 1; } } function searchStringForward(doc, query, start, caseFold) { if (!query.length) return null; var fold = caseFold ? doFold : noFold; var lines = fold(query).split(/\r|\n\r?/); search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) { var orig = doc.getLine(line).slice(ch), string = fold(orig); if (lines.length == 1) { var found = string.indexOf(lines[0]); if (found == -1) continue search; var start = adjustPos(orig, string, found, fold) + ch; return { from: Pos(line, adjustPos(orig, string, found, fold) + ch), to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch) }; } else { var cutFrom = string.length - lines[0].length; if (string.slice(cutFrom) != lines[0]) continue search; for (var i = 1; i < lines.length - 1; i++) if (fold(doc.getLine(line + i)) != lines[i]) continue search; var end = doc.getLine(line + lines.length - 1), endString = fold(end), lastLine = lines[lines.length - 1]; if (endString.slice(0, lastLine.length) != lastLine) continue search; return { from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch), to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold)) }; } } } function searchStringBackward(doc, query, start, caseFold) { if (!query.length) return null; var fold = caseFold ? doFold : noFold; var lines = fold(query).split(/\r|\n\r?/); search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) { var orig = doc.getLine(line); if (ch > -1) orig = orig.slice(0, ch); var string = fold(orig); if (lines.length == 1) { var found = string.lastIndexOf(lines[0]); if (found == -1) continue search; return { from: Pos(line, adjustPos(orig, string, found, fold)), to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold)) }; } else { var lastLine = lines[lines.length - 1]; if (string.slice(0, lastLine.length) != lastLine) continue search; for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++) if (fold(doc.getLine(start + i)) != lines[i]) continue search; var top = doc.getLine(line + 1 - lines.length), topString = fold(top); if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search; return { from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)), to: Pos(line, adjustPos(orig, string, lastLine.length, fold)) }; } } } function SearchCursor(doc, query, pos, options) { this.atOccurrence = false; this.afterEmptyMatch = false; this.doc = doc; pos = pos ? doc.clipPos(pos) : Pos(0, 0); this.pos = { from: pos, to: pos }; var caseFold; if (typeof options == "object") caseFold = options.caseFold; else { caseFold = options; options = null; } if (typeof query == "string") { if (caseFold == null) caseFold = false; this.matches = function(reverse, pos$1) { return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos$1, caseFold); }; } else { query = ensureFlags(query, "gm"); if (!options || options.multiline !== false) this.matches = function(reverse, pos$1) { return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos$1); }; else this.matches = function(reverse, pos$1) { return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos$1); }; } } SearchCursor.prototype = { findNext: function() { return this.find(false); }, findPrevious: function() { return this.find(true); }, find: function(reverse) { var head = this.doc.clipPos(reverse ? this.pos.from : this.pos.to); if (this.afterEmptyMatch && this.atOccurrence) { head = Pos(head.line, head.ch); if (reverse) { head.ch--; if (head.ch < 0) { head.line--; head.ch = (this.doc.getLine(head.line) || "").length; } } else { head.ch++; if (head.ch > (this.doc.getLine(head.line) || "").length) { head.ch = 0; head.line++; } } if (CodeMirror$1.cmpPos(head, this.doc.clipPos(head)) != 0) return this.atOccurrence = false; } var result = this.matches(reverse, head); this.afterEmptyMatch = result && CodeMirror$1.cmpPos(result.from, result.to) == 0; if (result) { this.pos = result; this.atOccurrence = true; return this.pos.match || true; } else { var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0); this.pos = { from: end, to: end }; return this.atOccurrence = false; } }, from: function() { if (this.atOccurrence) return this.pos.from; }, to: function() { if (this.atOccurrence) return this.pos.to; }, replace: function(newText, origin) { if (!this.atOccurrence) return; var lines = CodeMirror$1.splitLines(newText); this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin); this.pos.to = Pos(this.pos.from.line + lines.length - 1, lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0)); } }; CodeMirror$1.defineExtension("getSearchCursor", function(query, pos, caseFold) { return new SearchCursor(this.doc, query, pos, caseFold); }); CodeMirror$1.defineDocExtension("getSearchCursor", function(query, pos, caseFold) { return new SearchCursor(this, query, pos, caseFold); }); CodeMirror$1.defineExtension("selectMatches", function(query, caseFold) { var ranges = []; var cur = this.getSearchCursor(query, this.getCursor("from"), caseFold); while (cur.findNext()) { if (CodeMirror$1.cmpPos(cur.to(), this.getCursor("to")) > 0) break; ranges.push({ anchor: cur.from(), head: cur.to() }); } if (ranges.length) this.setSelections(ranges, 0); }); }); }); var require_search = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror(), require_searchcursor(), require_dialog()); else if (typeof define == "function" && define.amd) define([ "../../lib/codemirror", "./searchcursor", "../dialog/dialog" ], mod); else mod(CodeMirror); })(function(CodeMirror$1) { "use strict"; CodeMirror$1.defineOption("search", { bottom: false }); function searchOverlay(query, caseInsensitive) { if (typeof query == "string") query = new RegExp(query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), caseInsensitive ? "gi" : "g"); else if (!query.global) query = new RegExp(query.source, query.ignoreCase ? "gi" : "g"); return { token: function(stream) { query.lastIndex = stream.pos; var match = query.exec(stream.string); if (match && match.index == stream.pos) { stream.pos += match[0].length || 1; return "searching"; } else if (match) stream.pos = match.index; else stream.skipToEnd(); } }; } function SearchState() { this.posFrom = this.posTo = this.lastQuery = this.query = null; this.overlay = null; } function getSearchState(cm) { return cm.state.search || (cm.state.search = new SearchState()); } function queryCaseInsensitive(query) { return typeof query == "string" && query == query.toLowerCase(); } function getSearchCursor(cm, query, pos) { return cm.getSearchCursor(query, pos, { caseFold: queryCaseInsensitive(query), multiline: true }); } function persistentDialog(cm, text, deflt, onEnter, onKeyDown) { cm.openDialog(text, onEnter, { value: deflt, selectValueOnOpen: true, closeOnEnter: false, onClose: function() { clearSearch(cm); }, onKeyDown, bottom: cm.options.search.bottom }); } function dialog(cm, text, shortText, deflt, f) { if (cm.openDialog) cm.openDialog(text, f, { value: deflt, selectValueOnOpen: true, bottom: cm.options.search.bottom }); else f(prompt(shortText, deflt)); } function confirmDialog(cm, text, shortText, fs) { if (cm.openConfirm) cm.openConfirm(text, fs); else if (confirm(shortText)) fs[0](); } function parseString(string) { return string.replace(/\\([nrt\\])/g, function(match, ch) { if (ch == "n") return "\n"; if (ch == "r") return "\r"; if (ch == "t") return " "; if (ch == "\\") return "\\"; return match; }); } function parseQuery(query) { var isRE = query.match(/^\/(.*)\/([a-z]*)$/); if (isRE) try { query = new RegExp(isRE[1], isRE[2].indexOf("i") == -1 ? "" : "i"); } catch (e) {} else query = parseString(query); if (typeof query == "string" ? query == "" : query.test("")) query = /x^/; return query; } function startSearch(cm, state, query) { state.queryText = query; state.query = parseQuery(query); cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query)); state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query)); cm.addOverlay(state.overlay); if (cm.showMatchesOnScrollbar) { if (state.annotate) { state.annotate.clear(); state.annotate = null; } state.annotate = cm.showMatchesOnScrollbar(state.query, queryCaseInsensitive(state.query)); } } function doSearch(cm, rev, persistent, immediate) { var state = getSearchState(cm); if (state.query) return findNext(cm, rev); var q = cm.getSelection() || state.lastQuery; if (q instanceof RegExp && q.source == "x^") q = null; if (persistent && cm.openDialog) { var hiding = null; var searchNext = function(query, event) { CodeMirror$1.e_stop(event); if (!query) return; if (query != state.queryText) { startSearch(cm, state, query); state.posFrom = state.posTo = cm.getCursor(); } if (hiding) hiding.style.opacity = 1; findNext(cm, event.shiftKey, function(_, to) { var dialog$1; if (to.line < 3 && document.querySelector && (dialog$1 = cm.display.wrapper.querySelector(".CodeMirror-dialog")) && dialog$1.getBoundingClientRect().bottom - 4 > cm.cursorCoords(to, "window").top) (hiding = dialog$1).style.opacity = .4; }); }; persistentDialog(cm, getQueryDialog(cm), q, searchNext, function(event, query) { var keyName = CodeMirror$1.keyName(event); var extra = cm.getOption("extraKeys"), cmd = extra && extra[keyName] || CodeMirror$1.keyMap[cm.getOption("keyMap")][keyName]; if (cmd == "findNext" || cmd == "findPrev" || cmd == "findPersistentNext" || cmd == "findPersistentPrev") { CodeMirror$1.e_stop(event); startSearch(cm, getSearchState(cm), query); cm.execCommand(cmd); } else if (cmd == "find" || cmd == "findPersistent") { CodeMirror$1.e_stop(event); searchNext(query, event); } }); if (immediate && q) { startSearch(cm, state, q); findNext(cm, rev); } } else dialog(cm, getQueryDialog(cm), "Search for:", q, function(query) { if (query && !state.query) cm.operation(function() { startSearch(cm, state, query); state.posFrom = state.posTo = cm.getCursor(); findNext(cm, rev); }); }); } function findNext(cm, rev, callback) { cm.operation(function() { var state = getSearchState(cm); var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo); if (!cursor.find(rev)) { cursor = getSearchCursor(cm, state.query, rev ? CodeMirror$1.Pos(cm.lastLine()) : CodeMirror$1.Pos(cm.firstLine(), 0)); if (!cursor.find(rev)) return; } cm.setSelection(cursor.from(), cursor.to()); cm.scrollIntoView({ from: cursor.from(), to: cursor.to() }, 20); state.posFrom = cursor.from(); state.posTo = cursor.to(); if (callback) callback(cursor.from(), cursor.to()); }); } function clearSearch(cm) { cm.operation(function() { var state = getSearchState(cm); state.lastQuery = state.query; if (!state.query) return; state.query = state.queryText = null; cm.removeOverlay(state.overlay); if (state.annotate) { state.annotate.clear(); state.annotate = null; } }); } function el(tag, attrs) { var element = tag ? document.createElement(tag) : document.createDocumentFragment(); for (var key in attrs) element[key] = attrs[key]; for (var i = 2; i < arguments.length; i++) { var child = arguments[i]; element.appendChild(typeof child == "string" ? document.createTextNode(child) : child); } return element; } function getQueryDialog(cm) { var label = el("label", { className: "CodeMirror-search-label" }, cm.phrase("Search:"), el("input", { type: "text", "style": "width: 10em", className: "CodeMirror-search-field", id: "CodeMirror-search-field" })); label.setAttribute("for", "CodeMirror-search-field"); return el("", null, label, " ", el("span", { style: "color: #666", className: "CodeMirror-search-hint" }, cm.phrase("(Use /re/ syntax for regexp search)"))); } function getReplaceQueryDialog(cm) { return el("", null, " ", el("input", { type: "text", "style": "width: 10em", className: "CodeMirror-search-field" }), " ", el("span", { style: "color: #666", className: "CodeMirror-search-hint" }, cm.phrase("(Use /re/ syntax for regexp search)"))); } function getReplacementQueryDialog(cm) { return el("", null, el("span", { className: "CodeMirror-search-label" }, cm.phrase("With:")), " ", el("input", { type: "text", "style": "width: 10em", className: "CodeMirror-search-field" })); } function getDoReplaceConfirm(cm) { return el("", null, el("span", { className: "CodeMirror-search-label" }, cm.phrase("Replace?")), " ", el("button", {}, cm.phrase("Yes")), " ", el("button", {}, cm.phrase("No")), " ", el("button", {}, cm.phrase("All")), " ", el("button", {}, cm.phrase("Stop"))); } function replaceAll(cm, query, text) { cm.operation(function() { for (var cursor = getSearchCursor(cm, query); cursor.findNext();) if (typeof query != "string") { var match = cm.getRange(cursor.from(), cursor.to()).match(query); cursor.replace(text.replace(/\$(\d)/g, function(_, i) { return match[i]; })); } else cursor.replace(text); }); } function replace(cm, all) { if (cm.getOption("readOnly")) return; var query = cm.getSelection() || getSearchState(cm).lastQuery; var dialogText = all ? cm.phrase("Replace all:") : cm.phrase("Replace:"); var fragment = el("", null, el("span", { className: "CodeMirror-search-label" }, dialogText), getReplaceQueryDialog(cm)); dialog(cm, fragment, dialogText, query, function(query$1) { if (!query$1) return; query$1 = parseQuery(query$1); dialog(cm, getReplacementQueryDialog(cm), cm.phrase("Replace with:"), "", function(text) { text = parseString(text); if (all) replaceAll(cm, query$1, text); else { clearSearch(cm); var cursor = getSearchCursor(cm, query$1, cm.getCursor("from")); var advance = function() { var start = cursor.from(), match; if (!(match = cursor.findNext())) { cursor = getSearchCursor(cm, query$1); if (!(match = cursor.findNext()) || start && cursor.from().line == start.line && cursor.from().ch == start.ch) return; } cm.setSelection(cursor.from(), cursor.to()); cm.scrollIntoView({ from: cursor.from(), to: cursor.to() }); confirmDialog(cm, getDoReplaceConfirm(cm), cm.phrase("Replace?"), [ function() { doReplace(match); }, advance, function() { replaceAll(cm, query$1, text); } ]); }; var doReplace = function(match) { cursor.replace(typeof query$1 == "string" ? text : text.replace(/\$(\d)/g, function(_, i) { return match[i]; })); advance(); }; advance(); } }); }); } CodeMirror$1.commands.find = function(cm) { clearSearch(cm); doSearch(cm); }; CodeMirror$1.commands.findPersistent = function(cm) { clearSearch(cm); doSearch(cm, false, true); }; CodeMirror$1.commands.findPersistentNext = function(cm) { doSearch(cm, false, true, true); }; CodeMirror$1.commands.findPersistentPrev = function(cm) { doSearch(cm, true, true, true); }; CodeMirror$1.commands.findNext = doSearch; CodeMirror$1.commands.findPrev = function(cm) { doSearch(cm, true); }; CodeMirror$1.commands.clearSearch = clearSearch; CodeMirror$1.commands.replace = replace; CodeMirror$1.commands.replaceAll = function(cm) { replace(cm, true); }; }); }); var require_css = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror()); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod); else mod(CodeMirror); })(function(CodeMirror$1) { "use strict"; CodeMirror$1.defineMode("css", function(config, parserConfig) { var inline = parserConfig.inline; if (!parserConfig.propertyKeywords) parserConfig = CodeMirror$1.resolveMode("text/css"); var indentUnit = config.indentUnit, tokenHooks = parserConfig.tokenHooks, documentTypes$1 = parserConfig.documentTypes || {}, mediaTypes$1 = parserConfig.mediaTypes || {}, mediaFeatures$1 = parserConfig.mediaFeatures || {}, mediaValueKeywords$1 = parserConfig.mediaValueKeywords || {}, propertyKeywords$1 = parserConfig.propertyKeywords || {}, nonStandardPropertyKeywords$1 = parserConfig.nonStandardPropertyKeywords || {}, fontProperties$1 = parserConfig.fontProperties || {}, counterDescriptors$1 = parserConfig.counterDescriptors || {}, colorKeywords$1 = parserConfig.colorKeywords || {}, valueKeywords$1 = parserConfig.valueKeywords || {}, allowNested = parserConfig.allowNested, lineComment = parserConfig.lineComment, supportsAtComponent = parserConfig.supportsAtComponent === true, highlightNonStandardPropertyKeywords = config.highlightNonStandardPropertyKeywords !== false; var type, override; function ret(style, tp) { type = tp; return style; } function tokenBase(stream, state) { var ch = stream.next(); if (tokenHooks[ch]) { var result = tokenHooks[ch](stream, state); if (result !== false) return result; } if (ch == "@") { stream.eatWhile(/[\w\\\-]/); return ret("def", stream.current()); } else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare"); else if (ch == "\"" || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (ch == "#") { stream.eatWhile(/[\w\\\-]/); return ret("atom", "hash"); } else if (ch == "!") { stream.match(/^\s*\w*/); return ret("keyword", "important"); } else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) { stream.eatWhile(/[\w.%]/); return ret("number", "unit"); } else if (ch === "-") { if (/[\d.]/.test(stream.peek())) { stream.eatWhile(/[\w.%]/); return ret("number", "unit"); } else if (stream.match(/^-[\w\\\-]*/)) { stream.eatWhile(/[\w\\\-]/); if (stream.match(/^\s*:/, false)) return ret("variable-2", "variable-definition"); return ret("variable-2", "variable"); } else if (stream.match(/^\w+-/)) return ret("meta", "meta"); } else if (/[,+>*\/]/.test(ch)) return ret(null, "select-op"); else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) return ret("qualifier", "qualifier"); else if (/[:;{}\[\]\(\)]/.test(ch)) return ret(null, ch); else if (stream.match(/^[\w-.]+(?=\()/)) { if (/^(url(-prefix)?|domain|regexp)$/i.test(stream.current())) state.tokenize = tokenParenthesized; return ret("variable callee", "variable"); } else if (/[\w\\\-]/.test(ch)) { stream.eatWhile(/[\w\\\-]/); return ret("property", "word"); } else return ret(null, null); } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { if (quote == ")") stream.backUp(1); break; } escaped = !escaped && ch == "\\"; } if (ch == quote || !escaped && quote != ")") state.tokenize = null; return ret("string", "string"); }; } function tokenParenthesized(stream, state) { stream.next(); if (!stream.match(/^\s*[\"\')]/, false)) state.tokenize = tokenString(")"); else state.tokenize = null; return ret(null, "("); } function Context(type$1, indent, prev) { this.type = type$1; this.indent = indent; this.prev = prev; } function pushContext(state, stream, type$1, indent) { state.context = new Context(type$1, stream.indentation() + (indent === false ? 0 : indentUnit), state.context); return type$1; } function popContext(state) { if (state.context.prev) state.context = state.context.prev; return state.context.type; } function pass(type$1, stream, state) { return states[state.context.type](type$1, stream, state); } function popAndPass(type$1, stream, state, n) { for (var i = n || 1; i > 0; i--) state.context = state.context.prev; return pass(type$1, stream, state); } function wordAsValue(stream) { var word = stream.current().toLowerCase(); if (valueKeywords$1.hasOwnProperty(word)) override = "atom"; else if (colorKeywords$1.hasOwnProperty(word)) override = "keyword"; else override = "variable"; } var states = {}; states.top = function(type$1, stream, state) { if (type$1 == "{") return pushContext(state, stream, "block"); else if (type$1 == "}" && state.context.prev) return popContext(state); else if (supportsAtComponent && /@component/i.test(type$1)) return pushContext(state, stream, "atComponentBlock"); else if (/^@(-moz-)?document$/i.test(type$1)) return pushContext(state, stream, "documentTypes"); else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type$1)) return pushContext(state, stream, "atBlock"); else if (/^@(font-face|counter-style)/i.test(type$1)) { state.stateArg = type$1; return "restricted_atBlock_before"; } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type$1)) return "keyframes"; else if (type$1 && type$1.charAt(0) == "@") return pushContext(state, stream, "at"); else if (type$1 == "hash") override = "builtin"; else if (type$1 == "word") override = "tag"; else if (type$1 == "variable-definition") return "maybeprop"; else if (type$1 == "interpolation") return pushContext(state, stream, "interpolation"); else if (type$1 == ":") return "pseudo"; else if (allowNested && type$1 == "(") return pushContext(state, stream, "parens"); return state.context.type; }; states.block = function(type$1, stream, state) { if (type$1 == "word") { var word = stream.current().toLowerCase(); if (propertyKeywords$1.hasOwnProperty(word)) { override = "property"; return "maybeprop"; } else if (nonStandardPropertyKeywords$1.hasOwnProperty(word)) { override = highlightNonStandardPropertyKeywords ? "string-2" : "property"; return "maybeprop"; } else if (allowNested) { override = stream.match(/^\s*:(?:\s|$)/, false) ? "property" : "tag"; return "block"; } else { override += " error"; return "maybeprop"; } } else if (type$1 == "meta") return "block"; else if (!allowNested && (type$1 == "hash" || type$1 == "qualifier")) { override = "error"; return "block"; } else return states.top(type$1, stream, state); }; states.maybeprop = function(type$1, stream, state) { if (type$1 == ":") return pushContext(state, stream, "prop"); return pass(type$1, stream, state); }; states.prop = function(type$1, stream, state) { if (type$1 == ";") return popContext(state); if (type$1 == "{" && allowNested) return pushContext(state, stream, "propBlock"); if (type$1 == "}" || type$1 == "{") return popAndPass(type$1, stream, state); if (type$1 == "(") return pushContext(state, stream, "parens"); if (type$1 == "hash" && !/^#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(stream.current())) override += " error"; else if (type$1 == "word") wordAsValue(stream); else if (type$1 == "interpolation") return pushContext(state, stream, "interpolation"); return "prop"; }; states.propBlock = function(type$1, _stream, state) { if (type$1 == "}") return popContext(state); if (type$1 == "word") { override = "property"; return "maybeprop"; } return state.context.type; }; states.parens = function(type$1, stream, state) { if (type$1 == "{" || type$1 == "}") return popAndPass(type$1, stream, state); if (type$1 == ")") return popContext(state); if (type$1 == "(") return pushContext(state, stream, "parens"); if (type$1 == "interpolation") return pushContext(state, stream, "interpolation"); if (type$1 == "word") wordAsValue(stream); return "parens"; }; states.pseudo = function(type$1, stream, state) { if (type$1 == "meta") return "pseudo"; if (type$1 == "word") { override = "variable-3"; return state.context.type; } return pass(type$1, stream, state); }; states.documentTypes = function(type$1, stream, state) { if (type$1 == "word" && documentTypes$1.hasOwnProperty(stream.current())) { override = "tag"; return state.context.type; } else return states.atBlock(type$1, stream, state); }; states.atBlock = function(type$1, stream, state) { if (type$1 == "(") return pushContext(state, stream, "atBlock_parens"); if (type$1 == "}" || type$1 == ";") return popAndPass(type$1, stream, state); if (type$1 == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top"); if (type$1 == "interpolation") return pushContext(state, stream, "interpolation"); if (type$1 == "word") { var word = stream.current().toLowerCase(); if (word == "only" || word == "not" || word == "and" || word == "or") override = "keyword"; else if (mediaTypes$1.hasOwnProperty(word)) override = "attribute"; else if (mediaFeatures$1.hasOwnProperty(word)) override = "property"; else if (mediaValueKeywords$1.hasOwnProperty(word)) override = "keyword"; else if (propertyKeywords$1.hasOwnProperty(word)) override = "property"; else if (nonStandardPropertyKeywords$1.hasOwnProperty(word)) override = highlightNonStandardPropertyKeywords ? "string-2" : "property"; else if (valueKeywords$1.hasOwnProperty(word)) override = "atom"; else if (colorKeywords$1.hasOwnProperty(word)) override = "keyword"; else override = "error"; } return state.context.type; }; states.atComponentBlock = function(type$1, stream, state) { if (type$1 == "}") return popAndPass(type$1, stream, state); if (type$1 == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top", false); if (type$1 == "word") override = "error"; return state.context.type; }; states.atBlock_parens = function(type$1, stream, state) { if (type$1 == ")") return popContext(state); if (type$1 == "{" || type$1 == "}") return popAndPass(type$1, stream, state, 2); return states.atBlock(type$1, stream, state); }; states.restricted_atBlock_before = function(type$1, stream, state) { if (type$1 == "{") return pushContext(state, stream, "restricted_atBlock"); if (type$1 == "word" && state.stateArg == "@counter-style") { override = "variable"; return "restricted_atBlock_before"; } return pass(type$1, stream, state); }; states.restricted_atBlock = function(type$1, stream, state) { if (type$1 == "}") { state.stateArg = null; return popContext(state); } if (type$1 == "word") { if (state.stateArg == "@font-face" && !fontProperties$1.hasOwnProperty(stream.current().toLowerCase()) || state.stateArg == "@counter-style" && !counterDescriptors$1.hasOwnProperty(stream.current().toLowerCase())) override = "error"; else override = "property"; return "maybeprop"; } return "restricted_atBlock"; }; states.keyframes = function(type$1, stream, state) { if (type$1 == "word") { override = "variable"; return "keyframes"; } if (type$1 == "{") return pushContext(state, stream, "top"); return pass(type$1, stream, state); }; states.at = function(type$1, stream, state) { if (type$1 == ";") return popContext(state); if (type$1 == "{" || type$1 == "}") return popAndPass(type$1, stream, state); if (type$1 == "word") override = "tag"; else if (type$1 == "hash") override = "builtin"; return "at"; }; states.interpolation = function(type$1, stream, state) { if (type$1 == "}") return popContext(state); if (type$1 == "{" || type$1 == ";") return popAndPass(type$1, stream, state); if (type$1 == "word") override = "variable"; else if (type$1 != "variable" && type$1 != "(" && type$1 != ")") override = "error"; return "interpolation"; }; return { startState: function(base) { return { tokenize: null, state: inline ? "block" : "top", stateArg: null, context: new Context(inline ? "block" : "top", base || 0, null) }; }, token: function(stream, state) { if (!state.tokenize && stream.eatSpace()) return null; var style = (state.tokenize || tokenBase)(stream, state); if (style && typeof style == "object") { type = style[1]; style = style[0]; } override = style; if (type != "comment") state.state = states[state.state](type, stream, state); return override; }, indent: function(state, textAfter) { var cx = state.context, ch = textAfter && textAfter.charAt(0); var indent = cx.indent; if (cx.type == "prop" && (ch == "}" || ch == ")")) cx = cx.prev; if (cx.prev) { if (ch == "}" && (cx.type == "block" || cx.type == "top" || cx.type == "interpolation" || cx.type == "restricted_atBlock")) { cx = cx.prev; indent = cx.indent; } else if (ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || ch == "{" && (cx.type == "at" || cx.type == "atBlock")) indent = Math.max(0, cx.indent - indentUnit); } return indent; }, electricChars: "}", blockCommentStart: "/*", blockCommentEnd: "*/", blockCommentContinue: " * ", lineComment, fold: "brace" }; }); function keySet(array) { var keys = {}; for (var i = 0; i < array.length; ++i) keys[array[i].toLowerCase()] = true; return keys; } var documentTypes_ = [ "domain", "regexp", "url", "url-prefix" ], documentTypes = keySet(documentTypes_); var mediaTypes_ = [ "all", "aural", "braille", "handheld", "print", "projection", "screen", "tty", "tv", "embossed" ], mediaTypes = keySet(mediaTypes_); var mediaFeatures_ = [ "width", "min-width", "max-width", "height", "min-height", "max-height", "device-width", "min-device-width", "max-device-width", "device-height", "min-device-height", "max-device-height", "aspect-ratio", "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", "max-color", "color-index", "min-color-index", "max-color-index", "monochrome", "min-monochrome", "max-monochrome", "resolution", "min-resolution", "max-resolution", "scan", "grid", "orientation", "device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio", "pointer", "any-pointer", "hover", "any-hover", "prefers-color-scheme", "dynamic-range", "video-dynamic-range" ], mediaFeatures = keySet(mediaFeatures_); var mediaValueKeywords_ = [ "landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover", "interlace", "progressive", "dark", "light", "standard", "high" ], mediaValueKeywords = keySet(mediaValueKeywords_); var propertyKeywords_ = [ "align-content", "align-items", "align-self", "alignment-adjust", "alignment-baseline", "all", "anchor-point", "animation", "animation-delay", "animation-direction", "animation-duration", "animation-fill-mode", "animation-iteration-count", "animation-name", "animation-play-state", "animation-timing-function", "appearance", "azimuth", "backdrop-filter", "backface-visibility", "background", "background-attachment", "background-blend-mode", "background-clip", "background-color", "background-image", "background-origin", "background-position", "background-position-x", "background-position-y", "background-repeat", "background-size", "baseline-shift", "binding", "bleed", "block-size", "bookmark-label", "bookmark-level", "bookmark-state", "bookmark-target", "border", "border-bottom", "border-bottom-color", "border-bottom-left-radius", "border-bottom-right-radius", "border-bottom-style", "border-bottom-width", "border-collapse", "border-color", "border-image", "border-image-outset", "border-image-repeat", "border-image-slice", "border-image-source", "border-image-width", "border-left", "border-left-color", "border-left-style", "border-left-width", "border-radius", "border-right", "border-right-color", "border-right-style", "border-right-width", "border-spacing", "border-style", "border-top", "border-top-color", "border-top-left-radius", "border-top-right-radius", "border-top-style", "border-top-width", "border-width", "bottom", "box-decoration-break", "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", "caption-side", "caret-color", "clear", "clip", "color", "color-profile", "column-count", "column-fill", "column-gap", "column-rule", "column-rule-color", "column-rule-style", "column-rule-width", "column-span", "column-width", "columns", "contain", "content", "counter-increment", "counter-reset", "crop", "cue", "cue-after", "cue-before", "cursor", "direction", "display", "dominant-baseline", "drop-initial-after-adjust", "drop-initial-after-align", "drop-initial-before-adjust", "drop-initial-before-align", "drop-initial-size", "drop-initial-value", "elevation", "empty-cells", "fit", "fit-content", "fit-position", "flex", "flex-basis", "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", "float", "float-offset", "flow-from", "flow-into", "font", "font-family", "font-feature-settings", "font-kerning", "font-language-override", "font-optical-sizing", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-synthesis", "font-variant", "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric", "font-variant-position", "font-variation-settings", "font-weight", "gap", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", "grid-auto-rows", "grid-column", "grid-column-end", "grid-column-gap", "grid-column-start", "grid-gap", "grid-row", "grid-row-end", "grid-row-gap", "grid-row-start", "grid-template", "grid-template-areas", "grid-template-columns", "grid-template-rows", "hanging-punctuation", "height", "hyphens", "icon", "image-orientation", "image-rendering", "image-resolution", "inline-box-align", "inset", "inset-block", "inset-block-end", "inset-block-start", "inset-inline", "inset-inline-end", "inset-inline-start", "isolation", "justify-content", "justify-items", "justify-self", "left", "letter-spacing", "line-break", "line-height", "line-height-step", "line-stacking", "line-stacking-ruby", "line-stacking-shift", "line-stacking-strategy", "list-style", "list-style-image", "list-style-position", "list-style-type", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "marks", "marquee-direction", "marquee-loop", "marquee-play-count", "marquee-speed", "marquee-style", "mask-clip", "mask-composite", "mask-image", "mask-mode", "mask-origin", "mask-position", "mask-repeat", "mask-size", "mask-type", "max-block-size", "max-height", "max-inline-size", "max-width", "min-block-size", "min-height", "min-inline-size", "min-width", "mix-blend-mode", "move-to", "nav-down", "nav-index", "nav-left", "nav-right", "nav-up", "object-fit", "object-position", "offset", "offset-anchor", "offset-distance", "offset-path", "offset-position", "offset-rotate", "opacity", "order", "orphans", "outline", "outline-color", "outline-offset", "outline-style", "outline-width", "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", "page", "page-break-after", "page-break-before", "page-break-inside", "page-policy", "pause", "pause-after", "pause-before", "perspective", "perspective-origin", "pitch", "pitch-range", "place-content", "place-items", "place-self", "play-during", "position", "presentation-level", "punctuation-trim", "quotes", "region-break-after", "region-break-before", "region-break-inside", "region-fragment", "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness", "right", "rotate", "rotation", "rotation-point", "row-gap", "ruby-align", "ruby-overhang", "ruby-position", "ruby-span", "scale", "scroll-behavior", "scroll-margin", "scroll-margin-block", "scroll-margin-block-end", "scroll-margin-block-start", "scroll-margin-bottom", "scroll-margin-inline", "scroll-margin-inline-end", "scroll-margin-inline-start", "scroll-margin-left", "scroll-margin-right", "scroll-margin-top", "scroll-padding", "scroll-padding-block", "scroll-padding-block-end", "scroll-padding-block-start", "scroll-padding-bottom", "scroll-padding-inline", "scroll-padding-inline-end", "scroll-padding-inline-start", "scroll-padding-left", "scroll-padding-right", "scroll-padding-top", "scroll-snap-align", "scroll-snap-type", "shape-image-threshold", "shape-inside", "shape-margin", "shape-outside", "size", "speak", "speak-as", "speak-header", "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", "tab-size", "table-layout", "target", "target-name", "target-new", "target-position", "text-align", "text-align-last", "text-combine-upright", "text-decoration", "text-decoration-color", "text-decoration-line", "text-decoration-skip", "text-decoration-skip-ink", "text-decoration-style", "text-emphasis", "text-emphasis-color", "text-emphasis-position", "text-emphasis-style", "text-height", "text-indent", "text-justify", "text-orientation", "text-outline", "text-overflow", "text-rendering", "text-shadow", "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position", "text-wrap", "top", "touch-action", "transform", "transform-origin", "transform-style", "transition", "transition-delay", "transition-duration", "transition-property", "transition-timing-function", "translate", "unicode-bidi", "user-select", "vertical-align", "visibility", "voice-balance", "voice-duration", "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", "voice-volume", "volume", "white-space", "widows", "width", "will-change", "word-break", "word-spacing", "word-wrap", "writing-mode", "z-index", "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", "color-interpolation", "color-interpolation-filters", "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", "marker", "marker-end", "marker-mid", "marker-start", "paint-order", "shape-rendering", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", "glyph-orientation-vertical", "text-anchor", "writing-mode" ], propertyKeywords = keySet(propertyKeywords_); var nonStandardPropertyKeywords_ = [ "accent-color", "aspect-ratio", "border-block", "border-block-color", "border-block-end", "border-block-end-color", "border-block-end-style", "border-block-end-width", "border-block-start", "border-block-start-color", "border-block-start-style", "border-block-start-width", "border-block-style", "border-block-width", "border-inline", "border-inline-color", "border-inline-end", "border-inline-end-color", "border-inline-end-style", "border-inline-end-width", "border-inline-start", "border-inline-start-color", "border-inline-start-style", "border-inline-start-width", "border-inline-style", "border-inline-width", "content-visibility", "margin-block", "margin-block-end", "margin-block-start", "margin-inline", "margin-inline-end", "margin-inline-start", "overflow-anchor", "overscroll-behavior", "padding-block", "padding-block-end", "padding-block-start", "padding-inline", "padding-inline-end", "padding-inline-start", "scroll-snap-stop", "scrollbar-3d-light-color", "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color", "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color", "scrollbar-track-color", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "shape-inside", "zoom" ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_); var fontProperties_ = [ "font-display", "font-family", "src", "unicode-range", "font-variant", "font-feature-settings", "font-stretch", "font-weight", "font-style" ], fontProperties = keySet(fontProperties_); var counterDescriptors_ = [ "additive-symbols", "fallback", "negative", "pad", "prefix", "range", "speak-as", "suffix", "symbols", "system" ], counterDescriptors = keySet(counterDescriptors_); var colorKeywords_ = [ "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen" ], colorKeywords = keySet(colorKeywords_); var valueKeywords_ = [ "above", "absolute", "activeborder", "additive", "activecaption", "afar", "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", "arabic-indic", "armenian", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page", "avoid-region", "axis-pan", "background", "backwards", "baseline", "below", "bidi-override", "binary", "bengali", "blink", "block", "block-axis", "blur", "bold", "bolder", "border", "border-box", "both", "bottom", "break", "break-all", "break-word", "brightness", "bullets", "button", "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian", "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch", "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse", "compact", "condensed", "conic-gradient", "contain", "content", "contents", "content-box", "context-menu", "continuous", "contrast", "copy", "counter", "counters", "cover", "crop", "cross", "crosshair", "cubic-bezier", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal", "decimal-leading-zero", "default", "default-button", "dense", "destination-atop", "destination-in", "destination-out", "destination-over", "devanagari", "difference", "disc", "discard", "disclosure-closed", "disclosure-open", "document", "dot-dash", "dot-dot-dash", "dotted", "double", "down", "drop-shadow", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", "ethiopic-halehame-gez", "ethiopic-halehame-om-et", "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig", "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed", "extra-expanded", "fantasy", "fast", "fill", "fill-box", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes", "forwards", "from", "geometricPrecision", "georgian", "grayscale", "graytext", "grid", "groove", "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew", "help", "hidden", "hide", "higher", "highlight", "highlighttext", "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "hue-rotate", "icon", "ignore", "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert", "italic", "japanese-formal", "japanese-informal", "justify", "kannada", "katakana", "katakana-iroha", "keep-all", "khmer", "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten", "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "manipulation", "match", "matrix", "matrix3d", "media-play-button", "media-slider", "media-sliderthumb", "media-volume-slider", "media-volume-sliderthumb", "medium", "menu", "menulist", "menulist-button", "menutext", "message-box", "middle", "min-intrinsic", "mix", "mongolian", "monospace", "move", "multiple", "multiple_mask_images", "multiply", "myanmar", "n-resize", "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "opacity", "open-quote", "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", "painted", "page", "paused", "persian", "perspective", "pinch-zoom", "plus-darker", "plus-lighter", "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button", "radial-gradient", "radio", "read-only", "read-write", "read-write-plaintext-only", "rectangle", "region", "relative", "repeat", "repeating-linear-gradient", "repeating-radial-gradient", "repeating-conic-gradient", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running", "s-resize", "sans-serif", "saturate", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen", "scroll", "scrollbar", "scroll-position", "se-resize", "searchfield", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "self-start", "self-end", "semi-condensed", "semi-expanded", "separate", "sepia", "serif", "show", "sidama", "simp-chinese-formal", "simp-chinese-informal", "single", "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali", "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square", "square-button", "start", "static", "status-bar", "stretch", "stroke", "stroke-box", "sub", "subpixel-antialiased", "svg_masks", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row", "table-row-group", "tamil", "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", "trad-chinese-formal", "trad-chinese-informal", "transform", "translate", "translate3d", "translateX", "translateY", "translateZ", "transparent", "ultra-condensed", "ultra-expanded", "underline", "unidirectional-pan", "unset", "up", "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", "var", "vertical", "vertical-text", "view-box", "visible", "visibleFill", "visiblePainted", "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor", "xx-large", "xx-small" ], valueKeywords = keySet(valueKeywords_); var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_).concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_).concat(valueKeywords_); CodeMirror$1.registerHelper("hintWords", "css", allWords); function tokenCComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == "/") { state.tokenize = null; break; } maybeEnd = ch == "*"; } return ["comment", "comment"]; } CodeMirror$1.defineMIME("text/css", { documentTypes, mediaTypes, mediaFeatures, mediaValueKeywords, propertyKeywords, nonStandardPropertyKeywords, fontProperties, counterDescriptors, colorKeywords, valueKeywords, tokenHooks: { "/": function(stream, state) { if (!stream.eat("*")) return false; state.tokenize = tokenCComment; return tokenCComment(stream, state); } }, name: "css" }); CodeMirror$1.defineMIME("text/x-scss", { mediaTypes, mediaFeatures, mediaValueKeywords, propertyKeywords, nonStandardPropertyKeywords, colorKeywords, valueKeywords, fontProperties, allowNested: true, lineComment: "//", tokenHooks: { "/": function(stream, state) { if (stream.eat("/")) { stream.skipToEnd(); return ["comment", "comment"]; } else if (stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } else return ["operator", "operator"]; }, ":": function(stream) { if (stream.match(/^\s*\{/, false)) return [null, null]; return false; }, "$": function(stream) { stream.match(/^[\w-]+/); if (stream.match(/^\s*:/, false)) return ["variable-2", "variable-definition"]; return ["variable-2", "variable"]; }, "#": function(stream) { if (!stream.eat("{")) return false; return [null, "interpolation"]; } }, name: "css", helperType: "scss" }); CodeMirror$1.defineMIME("text/x-less", { mediaTypes, mediaFeatures, mediaValueKeywords, propertyKeywords, nonStandardPropertyKeywords, colorKeywords, valueKeywords, fontProperties, allowNested: true, lineComment: "//", tokenHooks: { "/": function(stream, state) { if (stream.eat("/")) { stream.skipToEnd(); return ["comment", "comment"]; } else if (stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } else return ["operator", "operator"]; }, "@": function(stream) { if (stream.eat("{")) return [null, "interpolation"]; if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i, false)) return false; stream.eatWhile(/[\w\\\-]/); if (stream.match(/^\s*:/, false)) return ["variable-2", "variable-definition"]; return ["variable-2", "variable"]; }, "&": function() { return ["atom", "atom"]; } }, name: "css", helperType: "less" }); CodeMirror$1.defineMIME("text/x-gss", { documentTypes, mediaTypes, mediaFeatures, propertyKeywords, nonStandardPropertyKeywords, fontProperties, counterDescriptors, colorKeywords, valueKeywords, supportsAtComponent: true, tokenHooks: { "/": function(stream, state) { if (!stream.eat("*")) return false; state.tokenize = tokenCComment; return tokenCComment(stream, state); } }, name: "css", helperType: "gss" }); }); }); var require_simple = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror()); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod); else mod(CodeMirror); })(function(CodeMirror$1) { "use strict"; CodeMirror$1.defineSimpleMode = function(name, states) { CodeMirror$1.defineMode(name, function(config) { return CodeMirror$1.simpleMode(config, states); }); }; CodeMirror$1.simpleMode = function(config, states) { ensureState(states, "start"); var states_ = {}, meta = states.meta || {}, hasIndentation = false; for (var state in states) if (state != meta && states.hasOwnProperty(state)) { var list = states_[state] = [], orig = states[state]; for (var i = 0; i < orig.length; i++) { var data = orig[i]; list.push(new Rule(data, states)); if (data.indent || data.dedent) hasIndentation = true; } } var mode = { startState: function() { return { state: "start", pending: null, local: null, localState: null, indent: hasIndentation ? [] : null }; }, copyState: function(state$1) { var s = { state: state$1.state, pending: state$1.pending, local: state$1.local, localState: null, indent: state$1.indent && state$1.indent.slice(0) }; if (state$1.localState) s.localState = CodeMirror$1.copyState(state$1.local.mode, state$1.localState); if (state$1.stack) s.stack = state$1.stack.slice(0); for (var pers = state$1.persistentStates; pers; pers = pers.next) s.persistentStates = { mode: pers.mode, spec: pers.spec, state: pers.state == state$1.localState ? s.localState : CodeMirror$1.copyState(pers.mode, pers.state), next: s.persistentStates }; return s; }, token: tokenFunction(states_, config), innerMode: function(state$1) { return state$1.local && { mode: state$1.local.mode, state: state$1.localState }; }, indent: indentFunction(states_, meta) }; if (meta) { for (var prop in meta) if (meta.hasOwnProperty(prop)) mode[prop] = meta[prop]; } return mode; }; function ensureState(states, name) { if (!states.hasOwnProperty(name)) throw new Error("Undefined state " + name + " in simple mode"); } function toRegex(val, caret) { if (!val) return /(?:)/; var flags = ""; if (val instanceof RegExp) { if (val.ignoreCase) flags = "i"; if (val.unicode) flags += "u"; val = val.source; } else val = String(val); return new RegExp((caret === false ? "" : "^") + "(?:" + val + ")", flags); } function asToken(val) { if (!val) return null; if (val.apply) return val; if (typeof val == "string") return val.replace(/\./g, " "); var result = []; for (var i = 0; i < val.length; i++) result.push(val[i] && val[i].replace(/\./g, " ")); return result; } function Rule(data, states) { if (data.next || data.push) ensureState(states, data.next || data.push); this.regex = toRegex(data.regex); this.token = asToken(data.token); this.data = data; } function tokenFunction(states, config) { return function(stream, state) { if (state.pending) { var pend = state.pending.shift(); if (state.pending.length == 0) state.pending = null; stream.pos += pend.text.length; return pend.token; } if (state.local) if (state.local.end && stream.match(state.local.end)) { var tok = state.local.endToken || null; state.local = state.localState = null; return tok; } else { var tok = state.local.mode.token(stream, state.localState), m; if (state.local.endScan && (m = state.local.endScan.exec(stream.current()))) stream.pos = stream.start + m.index; return tok; } var curState = states[state.state]; for (var i = 0; i < curState.length; i++) { var rule = curState[i]; var matches = (!rule.data.sol || stream.sol()) && stream.match(rule.regex); if (matches) { if (rule.data.next) state.state = rule.data.next; else if (rule.data.push) { (state.stack || (state.stack = [])).push(state.state); state.state = rule.data.push; } else if (rule.data.pop && state.stack && state.stack.length) state.state = state.stack.pop(); if (rule.data.mode) enterLocalMode(config, state, rule.data.mode, rule.token); if (rule.data.indent) state.indent.push(stream.indentation() + config.indentUnit); if (rule.data.dedent) state.indent.pop(); var token = rule.token; if (token && token.apply) token = token(matches); if (matches.length > 2 && rule.token && typeof rule.token != "string") { for (var j = 2; j < matches.length; j++) if (matches[j]) (state.pending || (state.pending = [])).push({ text: matches[j], token: rule.token[j - 1] }); stream.backUp(matches[0].length - (matches[1] ? matches[1].length : 0)); return token[0]; } else if (token && token.join) return token[0]; else return token; } } stream.next(); return null; }; } function cmp(a, b) { if (a === b) return true; if (!a || typeof a != "object" || !b || typeof b != "object") return false; var props = 0; for (var prop in a) if (a.hasOwnProperty(prop)) { if (!b.hasOwnProperty(prop) || !cmp(a[prop], b[prop])) return false; props++; } for (var prop in b) if (b.hasOwnProperty(prop)) props--; return props == 0; } function enterLocalMode(config, state, spec, token) { var pers; if (spec.persistent) { for (var p = state.persistentStates; p && !pers; p = p.next) if (spec.spec ? cmp(spec.spec, p.spec) : spec.mode == p.mode) pers = p; } var mode = pers ? pers.mode : spec.mode || CodeMirror$1.getMode(config, spec.spec); var lState = pers ? pers.state : CodeMirror$1.startState(mode); if (spec.persistent && !pers) state.persistentStates = { mode, spec: spec.spec, state: lState, next: state.persistentStates }; state.localState = lState; state.local = { mode, end: spec.end && toRegex(spec.end), endScan: spec.end && spec.forceEnd !== false && toRegex(spec.end, false), endToken: token && token.join ? token[token.length - 1] : token }; } function indexOf(val, arr) { for (var i = 0; i < arr.length; i++) if (arr[i] === val) return true; } function indentFunction(states, meta) { return function(state, textAfter, line) { if (state.local && state.local.mode.indent) return state.local.mode.indent(state.localState, textAfter, line); if (state.indent == null || state.local || meta.dontIndentStates && indexOf(state.state, meta.dontIndentStates) > -1) return CodeMirror$1.Pass; var pos = state.indent.length - 1, rules = states[state.state]; scan: for (;;) { for (var i = 0; i < rules.length; i++) { var rule = rules[i]; if (rule.data.dedent && rule.data.dedentIfLineStart !== false) { var m = rule.regex.exec(textAfter); if (m && m[0]) { pos--; if (rule.next || rule.push) rules = states[rule.next || rule.push]; textAfter = textAfter.slice(m[0].length); continue scan; } } } break; } return pos < 0 ? 0 : state.indent[pos]; }; } }); }); var require_multiplex = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror()); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod); else mod(CodeMirror); })(function(CodeMirror$1) { "use strict"; CodeMirror$1.multiplexingMode = function(outer) { var others = Array.prototype.slice.call(arguments, 1); function indexOf(string, pattern, from, returnEnd) { if (typeof pattern == "string") { var found = string.indexOf(pattern, from); return returnEnd && found > -1 ? found + pattern.length : found; } var m = pattern.exec(from ? string.slice(from) : string); return m ? m.index + from + (returnEnd ? m[0].length : 0) : -1; } return { startState: function() { return { outer: CodeMirror$1.startState(outer), innerActive: null, inner: null, startingInner: false }; }, copyState: function(state) { return { outer: CodeMirror$1.copyState(outer, state.outer), innerActive: state.innerActive, inner: state.innerActive && CodeMirror$1.copyState(state.innerActive.mode, state.inner), startingInner: state.startingInner }; }, token: function(stream, state) { if (!state.innerActive) { var cutOff = Infinity, oldContent = stream.string; for (var i = 0; i < others.length; ++i) { var other = others[i]; var found = indexOf(oldContent, other.open, stream.pos); if (found == stream.pos) { if (!other.parseDelimiters) stream.match(other.open); state.startingInner = !!other.parseDelimiters; state.innerActive = other; var outerIndent = 0; if (outer.indent) { var possibleOuterIndent = outer.indent(state.outer, "", ""); if (possibleOuterIndent !== CodeMirror$1.Pass) outerIndent = possibleOuterIndent; } state.inner = CodeMirror$1.startState(other.mode, outerIndent); return other.delimStyle && other.delimStyle + " " + other.delimStyle + "-open"; } else if (found != -1 && found < cutOff) cutOff = found; } if (cutOff != Infinity) stream.string = oldContent.slice(0, cutOff); var outerToken = outer.token(stream, state.outer); if (cutOff != Infinity) stream.string = oldContent; return outerToken; } else { var curInner = state.innerActive, oldContent = stream.string; if (!curInner.close && stream.sol()) { state.innerActive = state.inner = null; return this.token(stream, state); } var found = curInner.close && !state.startingInner ? indexOf(oldContent, curInner.close, stream.pos, curInner.parseDelimiters) : -1; if (found == stream.pos && !curInner.parseDelimiters) { stream.match(curInner.close); state.innerActive = state.inner = null; return curInner.delimStyle && curInner.delimStyle + " " + curInner.delimStyle + "-close"; } if (found > -1) stream.string = oldContent.slice(0, found); var innerToken = curInner.mode.token(stream, state.inner); if (found > -1) stream.string = oldContent; else if (stream.pos > stream.start) state.startingInner = false; if (found == stream.pos && curInner.parseDelimiters) state.innerActive = state.inner = null; if (curInner.innerStyle) if (innerToken) innerToken = innerToken + " " + curInner.innerStyle; else innerToken = curInner.innerStyle; return innerToken; } }, indent: function(state, textAfter, line) { var mode = state.innerActive ? state.innerActive.mode : outer; if (!mode.indent) return CodeMirror$1.Pass; return mode.indent(state.innerActive ? state.inner : state.outer, textAfter, line); }, blankLine: function(state) { var mode = state.innerActive ? state.innerActive.mode : outer; if (mode.blankLine) mode.blankLine(state.innerActive ? state.inner : state.outer); if (!state.innerActive) for (var i = 0; i < others.length; ++i) { var other = others[i]; if (other.open === "\n") { state.innerActive = other; state.inner = CodeMirror$1.startState(other.mode, mode.indent ? mode.indent(state.outer, "", "") : 0); } } else if (state.innerActive.close === "\n") state.innerActive = state.inner = null; }, electricChars: outer.electricChars, innerMode: function(state) { return state.inner ? { state: state.inner, mode: state.innerActive.mode } : { state: state.outer, mode: outer }; } }; }; }); }); var require_handlebars = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror(), require_simple(), require_multiplex()); else if (typeof define == "function" && define.amd) define([ "../../lib/codemirror", "../../addon/mode/simple", "../../addon/mode/multiplex" ], mod); else mod(CodeMirror); })(function(CodeMirror$1) { "use strict"; CodeMirror$1.defineSimpleMode("handlebars-tags", { start: [ { regex: /\{\{\{/, push: "handlebars_raw", token: "tag" }, { regex: /\{\{!--/, push: "dash_comment", token: "comment" }, { regex: /\{\{!/, push: "comment", token: "comment" }, { regex: /\{\{/, push: "handlebars", token: "tag" } ], handlebars_raw: [{ regex: /\}\}\}/, pop: true, token: "tag" }], handlebars: [ { regex: /\}\}/, pop: true, token: "tag" }, { regex: /"(?:[^\\"]|\\.)*"?/, token: "string" }, { regex: /'(?:[^\\']|\\.)*'?/, token: "string" }, { regex: />|[#\/]([A-Za-z_]\w*)/, token: "keyword" }, { regex: /(?:else|this)\b/, token: "keyword" }, { regex: /\d+/i, token: "number" }, { regex: /=|~|@|true|false/, token: "atom" }, { regex: /(?:\.\.\/)*(?:[A-Za-z_][\w\.]*)+/, token: "variable-2" } ], dash_comment: [{ regex: /--\}\}/, pop: true, token: "comment" }, { regex: /./, token: "comment" }], comment: [{ regex: /\}\}/, pop: true, token: "comment" }, { regex: /./, token: "comment" }], meta: { blockCommentStart: "{{--", blockCommentEnd: "--}}" } }); CodeMirror$1.defineMode("handlebars", function(config, parserConfig) { var handlebars = CodeMirror$1.getMode(config, "handlebars-tags"); if (!parserConfig || !parserConfig.base) return handlebars; return CodeMirror$1.multiplexingMode(CodeMirror$1.getMode(config, parserConfig.base), { open: "{{", close: /\}\}\}?/, mode: handlebars, parseDelimiters: true }); }); CodeMirror$1.defineMIME("text/x-handlebars-template", "handlebars"); }); }); var require_xml = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror()); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod); else mod(CodeMirror); })(function(CodeMirror$1) { "use strict"; var htmlConfig = { autoSelfClosers: { "area": true, "base": true, "br": true, "col": true, "command": true, "embed": true, "frame": true, "hr": true, "img": true, "input": true, "keygen": true, "link": true, "meta": true, "param": true, "source": true, "track": true, "wbr": true, "menuitem": true }, implicitlyClosed: { "dd": true, "li": true, "optgroup": true, "option": true, "p": true, "rp": true, "rt": true, "tbody": true, "td": true, "tfoot": true, "th": true, "tr": true }, contextGrabbers: { "dd": { "dd": true, "dt": true }, "dt": { "dd": true, "dt": true }, "li": { "li": true }, "option": { "option": true, "optgroup": true }, "optgroup": { "optgroup": true }, "p": { "address": true, "article": true, "aside": true, "blockquote": true, "dir": true, "div": true, "dl": true, "fieldset": true, "footer": true, "form": true, "h1": true, "h2": true, "h3": true, "h4": true, "h5": true, "h6": true, "header": true, "hgroup": true, "hr": true, "menu": true, "nav": true, "ol": true, "p": true, "pre": true, "section": true, "table": true, "ul": true }, "rp": { "rp": true, "rt": true }, "rt": { "rp": true, "rt": true }, "tbody": { "tbody": true, "tfoot": true }, "td": { "td": true, "th": true }, "tfoot": { "tbody": true }, "th": { "td": true, "th": true }, "thead": { "tbody": true, "tfoot": true }, "tr": { "tr": true } }, doNotIndent: { "pre": true }, allowUnquoted: true, allowMissing: true, caseFold: true }; var xmlConfig = { autoSelfClosers: {}, implicitlyClosed: {}, contextGrabbers: {}, doNotIndent: {}, allowUnquoted: false, allowMissing: false, allowMissingTagName: false, caseFold: false }; CodeMirror$1.defineMode("xml", function(editorConf, config_) { var indentUnit = editorConf.indentUnit; var config = {}; var defaults = config_.htmlMode ? htmlConfig : xmlConfig; for (var prop in defaults) config[prop] = defaults[prop]; for (var prop in config_) config[prop] = config_[prop]; var type, setStyle; function inText(stream, state) { function chain(parser) { state.tokenize = parser; return parser(stream, state); } var ch = stream.next(); if (ch == "<") if (stream.eat("!")) if (stream.eat("[")) if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>")); else return null; else if (stream.match("--")) return chain(inBlock("comment", "-->")); else if (stream.match("DOCTYPE", true, true)) { stream.eatWhile(/[\w\._\-]/); return chain(doctype(1)); } else return null; else if (stream.eat("?")) { stream.eatWhile(/[\w\._\-]/); state.tokenize = inBlock("meta", "?>"); return "meta"; } else { type = stream.eat("/") ? "closeTag" : "openTag"; state.tokenize = inTag; return "tag bracket"; } else if (ch == "&") { var ok; if (stream.eat("#")) if (stream.eat("x")) ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";"); else ok = stream.eatWhile(/[\d]/) && stream.eat(";"); else ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";"); return ok ? "atom" : "error"; } else { stream.eatWhile(/[^&<]/); return null; } } inText.isInText = true; function inTag(stream, state) { var ch = stream.next(); if (ch == ">" || ch == "/" && stream.eat(">")) { state.tokenize = inText; type = ch == ">" ? "endTag" : "selfcloseTag"; return "tag bracket"; } else if (ch == "=") { type = "equals"; return null; } else if (ch == "<") { state.tokenize = inText; state.state = baseState; state.tagName = state.tagStart = null; var next = state.tokenize(stream, state); return next ? next + " tag error" : "tag error"; } else if (/[\'\"]/.test(ch)) { state.tokenize = inAttribute(ch); state.stringStartCol = stream.column(); return state.tokenize(stream, state); } else { stream.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/); return "word"; } } function inAttribute(quote) { var closure = function(stream, state) { while (!stream.eol()) if (stream.next() == quote) { state.tokenize = inTag; break; } return "string"; }; closure.isInAttribute = true; return closure; } function inBlock(style, terminator) { return function(stream, state) { while (!stream.eol()) { if (stream.match(terminator)) { state.tokenize = inText; break; } stream.next(); } return style; }; } function doctype(depth) { return function(stream, state) { var ch; while ((ch = stream.next()) != null) if (ch == "<") { state.tokenize = doctype(depth + 1); return state.tokenize(stream, state); } else if (ch == ">") if (depth == 1) { state.tokenize = inText; break; } else { state.tokenize = doctype(depth - 1); return state.tokenize(stream, state); } return "meta"; }; } function lower(tagName) { return tagName && tagName.toLowerCase(); } function Context(state, tagName, startOfLine) { this.prev = state.context; this.tagName = tagName || ""; this.indent = state.indented; this.startOfLine = startOfLine; if (config.doNotIndent.hasOwnProperty(tagName) || state.context && state.context.noIndent) this.noIndent = true; } function popContext(state) { if (state.context) state.context = state.context.prev; } function maybePopContext(state, nextTagName) { var parentTagName; while (true) { if (!state.context) return; parentTagName = state.context.tagName; if (!config.contextGrabbers.hasOwnProperty(lower(parentTagName)) || !config.contextGrabbers[lower(parentTagName)].hasOwnProperty(lower(nextTagName))) return; popContext(state); } } function baseState(type$1, stream, state) { if (type$1 == "openTag") { state.tagStart = stream.column(); return tagNameState; } else if (type$1 == "closeTag") return closeTagNameState; else return baseState; } function tagNameState(type$1, stream, state) { if (type$1 == "word") { state.tagName = stream.current(); setStyle = "tag"; return attrState; } else if (config.allowMissingTagName && type$1 == "endTag") { setStyle = "tag bracket"; return attrState(type$1, stream, state); } else { setStyle = "error"; return tagNameState; } } function closeTagNameState(type$1, stream, state) { if (type$1 == "word") { var tagName = stream.current(); if (state.context && state.context.tagName != tagName && config.implicitlyClosed.hasOwnProperty(lower(state.context.tagName))) popContext(state); if (state.context && state.context.tagName == tagName || config.matchClosing === false) { setStyle = "tag"; return closeState; } else { setStyle = "tag error"; return closeStateErr; } } else if (config.allowMissingTagName && type$1 == "endTag") { setStyle = "tag bracket"; return closeState(type$1, stream, state); } else { setStyle = "error"; return closeStateErr; } } function closeState(type$1, _stream, state) { if (type$1 != "endTag") { setStyle = "error"; return closeState; } popContext(state); return baseState; } function closeStateErr(type$1, stream, state) { setStyle = "error"; return closeState(type$1, stream, state); } function attrState(type$1, _stream, state) { if (type$1 == "word") { setStyle = "attribute"; return attrEqState; } else if (type$1 == "endTag" || type$1 == "selfcloseTag") { var tagName = state.tagName, tagStart = state.tagStart; state.tagName = state.tagStart = null; if (type$1 == "selfcloseTag" || config.autoSelfClosers.hasOwnProperty(lower(tagName))) maybePopContext(state, tagName); else { maybePopContext(state, tagName); state.context = new Context(state, tagName, tagStart == state.indented); } return baseState; } setStyle = "error"; return attrState; } function attrEqState(type$1, stream, state) { if (type$1 == "equals") return attrValueState; if (!config.allowMissing) setStyle = "error"; return attrState(type$1, stream, state); } function attrValueState(type$1, stream, state) { if (type$1 == "string") return attrContinuedState; if (type$1 == "word" && config.allowUnquoted) { setStyle = "string"; return attrState; } setStyle = "error"; return attrState(type$1, stream, state); } function attrContinuedState(type$1, stream, state) { if (type$1 == "string") return attrContinuedState; return attrState(type$1, stream, state); } return { startState: function(baseIndent) { var state = { tokenize: inText, state: baseState, indented: baseIndent || 0, tagName: null, tagStart: null, context: null }; if (baseIndent != null) state.baseIndent = baseIndent; return state; }, token: function(stream, state) { if (!state.tagName && stream.sol()) state.indented = stream.indentation(); if (stream.eatSpace()) return null; type = null; var style = state.tokenize(stream, state); if ((style || type) && style != "comment") { setStyle = null; state.state = state.state(type || style, stream, state); if (setStyle) style = setStyle == "error" ? style + " error" : setStyle; } return style; }, indent: function(state, textAfter, fullLine) { var context = state.context; if (state.tokenize.isInAttribute) if (state.tagStart == state.indented) return state.stringStartCol + 1; else return state.indented + indentUnit; if (context && context.noIndent) return CodeMirror$1.Pass; if (state.tokenize != inTag && state.tokenize != inText) return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0; if (state.tagName) if (config.multilineTagIndentPastTag !== false) return state.tagStart + state.tagName.length + 2; else return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1); if (config.alignCDATA && /$/, blockCommentStart: "", configuration: config.htmlMode ? "html" : "xml", helperType: config.htmlMode ? "html" : "xml", skipAttribute: function(state) { if (state.state == attrValueState) state.state = attrState; }, xmlCurrentTag: function(state) { return state.tagName ? { name: state.tagName, close: state.type == "closeTag" } : null; }, xmlCurrentContext: function(state) { var context = []; for (var cx = state.context; cx; cx = cx.prev) context.push(cx.tagName); return context.reverse(); } }; }); CodeMirror$1.defineMIME("text/xml", "xml"); CodeMirror$1.defineMIME("application/xml", "xml"); if (!CodeMirror$1.mimeModes.hasOwnProperty("text/html")) CodeMirror$1.defineMIME("text/html", { name: "xml", htmlMode: true }); }); }); var require_javascript = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror()); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod); else mod(CodeMirror); })(function(CodeMirror$1) { "use strict"; CodeMirror$1.defineMode("javascript", function(config, parserConfig) { var indentUnit = config.indentUnit; var statementIndent = parserConfig.statementIndent; var jsonldMode = parserConfig.jsonld; var jsonMode = parserConfig.json || jsonldMode; var trackScope = parserConfig.trackScope !== false; var isTS = parserConfig.typescript; var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/; var keywords = function() { function kw(type$1) { return { type: type$1, style: "keyword" }; } var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"), D = kw("keyword d"); var operator = kw("operator"), atom = { type: "atom", style: "atom" }; return { "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, "return": D, "break": D, "continue": D, "new": kw("new"), "delete": C, "void": C, "throw": C, "debugger": kw("debugger"), "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": operator, "typeof": operator, "instanceof": operator, "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom, "this": kw("this"), "class": kw("class"), "super": kw("atom"), "yield": C, "export": kw("export"), "import": kw("import"), "extends": C, "await": C }; }(); var isOperatorChar = /[+\-*&%=<>!?|~^@]/; var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; function readRegexp(stream) { var escaped = false, next, inSet = false; while ((next = stream.next()) != null) { if (!escaped) { if (next == "/" && !inSet) return; if (next == "[") inSet = true; else if (inSet && next == "]") inSet = false; } escaped = !escaped && next == "\\"; } } var type, content; function ret(tp, style, cont$1) { type = tp; content = cont$1; return style; } function tokenBase(stream, state) { var ch = stream.next(); if (ch == "\"" || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (ch == "." && stream.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/)) return ret("number", "number"); else if (ch == "." && stream.match("..")) return ret("spread", "meta"); else if (/[\[\]{}\(\),;\:\.]/.test(ch)) return ret(ch); else if (ch == "=" && stream.eat(">")) return ret("=>", "operator"); else if (ch == "0" && stream.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/)) return ret("number", "number"); else if (/\d/.test(ch)) { stream.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/); return ret("number", "number"); } else if (ch == "/") if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } else if (stream.eat("/")) { stream.skipToEnd(); return ret("comment", "comment"); } else if (expressionAllowed(stream, state, 1)) { readRegexp(stream); stream.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/); return ret("regexp", "string-2"); } else { stream.eat("="); return ret("operator", "operator", stream.current()); } else if (ch == "`") { state.tokenize = tokenQuasi; return tokenQuasi(stream, state); } else if (ch == "#" && stream.peek() == "!") { stream.skipToEnd(); return ret("meta", "meta"); } else if (ch == "#" && stream.eatWhile(wordRE)) return ret("variable", "property"); else if (ch == "<" && stream.match("!--") || ch == "-" && stream.match("->") && !/\S/.test(stream.string.slice(0, stream.start))) { stream.skipToEnd(); return ret("comment", "comment"); } else if (isOperatorChar.test(ch)) { if (ch != ">" || !state.lexical || state.lexical.type != ">") { if (stream.eat("=")) { if (ch == "!" || ch == "=") stream.eat("="); } else if (/[<>*+\-|&?]/.test(ch)) { stream.eat(ch); if (ch == ">") stream.eat(ch); } } if (ch == "?" && stream.eat(".")) return ret("."); return ret("operator", "operator", stream.current()); } else if (wordRE.test(ch)) { stream.eatWhile(wordRE); var word = stream.current(); if (state.lastType != ".") { if (keywords.propertyIsEnumerable(word)) { var kw = keywords[word]; return ret(kw.type, kw.style, word); } if (word == "async" && stream.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/, false)) return ret("async", "keyword", word); } return ret("variable", "variable", word); } } function tokenString(quote) { return function(stream, state) { var escaped = false, next; if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)) { state.tokenize = tokenBase; return ret("jsonld-keyword", "meta"); } while ((next = stream.next()) != null) { if (next == quote && !escaped) break; escaped = !escaped && next == "\\"; } if (!escaped) state.tokenize = tokenBase; return ret("string", "string"); }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = ch == "*"; } return ret("comment", "comment"); } function tokenQuasi(stream, state) { var escaped = false, next; while ((next = stream.next()) != null) { if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { state.tokenize = tokenBase; break; } escaped = !escaped && next == "\\"; } return ret("quasi", "string-2", stream.current()); } var brackets = "([{}])"; function findFatArrow(stream, state) { if (state.fatArrowAt) state.fatArrowAt = null; var arrow = stream.string.indexOf("=>", stream.start); if (arrow < 0) return; if (isTS) { var m = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(stream.string.slice(stream.start, arrow)); if (m) arrow = m.index; } var depth = 0, sawSomething = false; for (var pos = arrow - 1; pos >= 0; --pos) { var ch = stream.string.charAt(pos); var bracket = brackets.indexOf(ch); if (bracket >= 0 && bracket < 3) { if (!depth) { ++pos; break; } if (--depth == 0) { if (ch == "(") sawSomething = true; break; } } else if (bracket >= 3 && bracket < 6) ++depth; else if (wordRE.test(ch)) sawSomething = true; else if (/["'\/`]/.test(ch)) for (;; --pos) { if (pos == 0) return; var next = stream.string.charAt(pos - 1); if (next == ch && stream.string.charAt(pos - 2) != "\\") { pos--; break; } } else if (sawSomething && !depth) { ++pos; break; } } if (sawSomething && !depth) state.fatArrowAt = pos; } var atomicTypes = { "atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "import": true, "jsonld-keyword": true }; function JSLexical(indented, column, type$1, align, prev, info) { this.indented = indented; this.column = column; this.type = type$1; this.prev = prev; this.info = info; if (align != null) this.align = align; } function inScope(state, varname) { if (!trackScope) return false; for (var v = state.localVars; v; v = v.next) if (v.name == varname) return true; for (var cx$1 = state.context; cx$1; cx$1 = cx$1.prev) for (var v = cx$1.vars; v; v = v.next) if (v.name == varname) return true; } function parseJS(state, style, type$1, content$1, stream) { var cc = state.cc; cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style; if (!state.lexical.hasOwnProperty("align")) state.lexical.align = true; while (true) { var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; if (combinator(type$1, content$1)) { while (cc.length && cc[cc.length - 1].lex) cc.pop()(); if (cx.marked) return cx.marked; if (type$1 == "variable" && inScope(state, content$1)) return "variable-2"; return style; } } } var cx = { state: null, column: null, marked: null, cc: null }; function pass() { for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); } function cont() { pass.apply(null, arguments); return true; } function inList(name, list) { for (var v = list; v; v = v.next) if (v.name == name) return true; return false; } function register(varname) { var state = cx.state; cx.marked = "def"; if (!trackScope) return; if (state.context) { if (state.lexical.info == "var" && state.context && state.context.block) { var newContext = registerVarScoped(varname, state.context); if (newContext != null) { state.context = newContext; return; } } else if (!inList(varname, state.localVars)) { state.localVars = new Var(varname, state.localVars); return; } } if (parserConfig.globalVars && !inList(varname, state.globalVars)) state.globalVars = new Var(varname, state.globalVars); } function registerVarScoped(varname, context) { if (!context) return null; else if (context.block) { var inner = registerVarScoped(varname, context.prev); if (!inner) return null; if (inner == context.prev) return context; return new Context(inner, context.vars, true); } else if (inList(varname, context.vars)) return context; else return new Context(context.prev, new Var(varname, context.vars), false); } function isModifier(name) { return name == "public" || name == "private" || name == "protected" || name == "abstract" || name == "readonly"; } function Context(prev, vars, block$1) { this.prev = prev; this.vars = vars; this.block = block$1; } function Var(name, next) { this.name = name; this.next = next; } var defaultVars = new Var("this", new Var("arguments", null)); function pushcontext() { cx.state.context = new Context(cx.state.context, cx.state.localVars, false); cx.state.localVars = defaultVars; } function pushblockcontext() { cx.state.context = new Context(cx.state.context, cx.state.localVars, true); cx.state.localVars = null; } pushcontext.lex = pushblockcontext.lex = true; function popcontext() { cx.state.localVars = cx.state.context.vars; cx.state.context = cx.state.context.prev; } popcontext.lex = true; function pushlex(type$1, info) { var result = function() { var state = cx.state, indent = state.indented; if (state.lexical.type == "stat") indent = state.lexical.indented; else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) indent = outer.indented; state.lexical = new JSLexical(indent, cx.stream.column(), type$1, null, state.lexical, info); }; result.lex = true; return result; } function poplex() { var state = cx.state; if (state.lexical.prev) { if (state.lexical.type == ")") state.indented = state.lexical.indented; state.lexical = state.lexical.prev; } } poplex.lex = true; function expect(wanted) { function exp(type$1) { if (type$1 == wanted) return cont(); else if (wanted == ";" || type$1 == "}" || type$1 == ")" || type$1 == "]") return pass(); else return cont(exp); } return exp; } function statement(type$1, value) { if (type$1 == "var") return cont(pushlex("vardef", value), vardef, expect(";"), poplex); if (type$1 == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex); if (type$1 == "keyword b") return cont(pushlex("form"), statement, poplex); if (type$1 == "keyword d") return cx.stream.match(/^\s*$/, false) ? cont() : cont(pushlex("stat"), maybeexpression, expect(";"), poplex); if (type$1 == "debugger") return cont(expect(";")); if (type$1 == "{") return cont(pushlex("}"), pushblockcontext, block, poplex, popcontext); if (type$1 == ";") return cont(); if (type$1 == "if") { if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) cx.state.cc.pop()(); return cont(pushlex("form"), parenExpr, statement, poplex, maybeelse); } if (type$1 == "function") return cont(functiondef); if (type$1 == "for") return cont(pushlex("form"), pushblockcontext, forspec, statement, popcontext, poplex); if (type$1 == "class" || isTS && value == "interface") { cx.marked = "keyword"; return cont(pushlex("form", type$1 == "class" ? type$1 : value), className, poplex); } if (type$1 == "variable") if (isTS && value == "declare") { cx.marked = "keyword"; return cont(statement); } else if (isTS && (value == "module" || value == "enum" || value == "type") && cx.stream.match(/^\s*\w/, false)) { cx.marked = "keyword"; if (value == "enum") return cont(enumdef); else if (value == "type") return cont(typename, expect("operator"), typeexpr, expect(";")); else return cont(pushlex("form"), pattern, expect("{"), pushlex("}"), block, poplex, poplex); } else if (isTS && value == "namespace") { cx.marked = "keyword"; return cont(pushlex("form"), expression, statement, poplex); } else if (isTS && value == "abstract") { cx.marked = "keyword"; return cont(statement); } else return cont(pushlex("stat"), maybelabel); if (type$1 == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"), pushblockcontext, block, poplex, poplex, popcontext); if (type$1 == "case") return cont(expression, expect(":")); if (type$1 == "default") return cont(expect(":")); if (type$1 == "catch") return cont(pushlex("form"), pushcontext, maybeCatchBinding, statement, poplex, popcontext); if (type$1 == "export") return cont(pushlex("stat"), afterExport, poplex); if (type$1 == "import") return cont(pushlex("stat"), afterImport, poplex); if (type$1 == "async") return cont(statement); if (value == "@") return cont(expression, statement); return pass(pushlex("stat"), expression, expect(";"), poplex); } function maybeCatchBinding(type$1) { if (type$1 == "(") return cont(funarg, expect(")")); } function expression(type$1, value) { return expressionInner(type$1, value, false); } function expressionNoComma(type$1, value) { return expressionInner(type$1, value, true); } function parenExpr(type$1) { if (type$1 != "(") return pass(); return cont(pushlex(")"), maybeexpression, expect(")"), poplex); } function expressionInner(type$1, value, noComma) { if (cx.state.fatArrowAt == cx.stream.start) { var body = noComma ? arrowBodyNoComma : arrowBody; if (type$1 == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, expect("=>"), body, popcontext); else if (type$1 == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); } var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; if (atomicTypes.hasOwnProperty(type$1)) return cont(maybeop); if (type$1 == "function") return cont(functiondef, maybeop); if (type$1 == "class" || isTS && value == "interface") { cx.marked = "keyword"; return cont(pushlex("form"), classExpression, poplex); } if (type$1 == "keyword c" || type$1 == "async") return cont(noComma ? expressionNoComma : expression); if (type$1 == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop); if (type$1 == "operator" || type$1 == "spread") return cont(noComma ? expressionNoComma : expression); if (type$1 == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); if (type$1 == "{") return contCommasep(objprop, "}", null, maybeop); if (type$1 == "quasi") return pass(quasi, maybeop); if (type$1 == "new") return cont(maybeTarget(noComma)); return cont(); } function maybeexpression(type$1) { if (type$1.match(/[;\}\)\],]/)) return pass(); return pass(expression); } function maybeoperatorComma(type$1, value) { if (type$1 == ",") return cont(maybeexpression); return maybeoperatorNoComma(type$1, value, false); } function maybeoperatorNoComma(type$1, value, noComma) { var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; var expr = noComma == false ? expression : expressionNoComma; if (type$1 == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); if (type$1 == "operator") { if (/\+\+|--/.test(value) || isTS && value == "!") return cont(me); if (isTS && value == "<" && cx.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/, false)) return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, me); if (value == "?") return cont(expression, expect(":"), expr); return cont(expr); } if (type$1 == "quasi") return pass(quasi, me); if (type$1 == ";") return; if (type$1 == "(") return contCommasep(expressionNoComma, ")", "call", me); if (type$1 == ".") return cont(property, me); if (type$1 == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); if (isTS && value == "as") { cx.marked = "keyword"; return cont(typeexpr, me); } if (type$1 == "regexp") { cx.state.lastType = cx.marked = "operator"; cx.stream.backUp(cx.stream.pos - cx.stream.start - 1); return cont(expr); } } function quasi(type$1, value) { if (type$1 != "quasi") return pass(); if (value.slice(value.length - 2) != "\${") return cont(quasi); return cont(maybeexpression, continueQuasi); } function continueQuasi(type$1) { if (type$1 == "}") { cx.marked = "string-2"; cx.state.tokenize = tokenQuasi; return cont(quasi); } } function arrowBody(type$1) { findFatArrow(cx.stream, cx.state); return pass(type$1 == "{" ? statement : expression); } function arrowBodyNoComma(type$1) { findFatArrow(cx.stream, cx.state); return pass(type$1 == "{" ? statement : expressionNoComma); } function maybeTarget(noComma) { return function(type$1) { if (type$1 == ".") return cont(noComma ? targetNoComma : target); else if (type$1 == "variable" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma); else return pass(noComma ? expressionNoComma : expression); }; } function target(_, value) { if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorComma); } } function targetNoComma(_, value) { if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorNoComma); } } function maybelabel(type$1) { if (type$1 == ":") return cont(poplex, statement); return pass(maybeoperatorComma, expect(";"), poplex); } function property(type$1) { if (type$1 == "variable") { cx.marked = "property"; return cont(); } } function objprop(type$1, value) { if (type$1 == "async") { cx.marked = "property"; return cont(objprop); } else if (type$1 == "variable" || cx.style == "keyword") { cx.marked = "property"; if (value == "get" || value == "set") return cont(getterSetter); var m; if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\s*:\s*/, false))) cx.state.fatArrowAt = cx.stream.pos + m[0].length; return cont(afterprop); } else if (type$1 == "number" || type$1 == "string") { cx.marked = jsonldMode ? "property" : cx.style + " property"; return cont(afterprop); } else if (type$1 == "jsonld-keyword") return cont(afterprop); else if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(objprop); } else if (type$1 == "[") return cont(expression, maybetype, expect("]"), afterprop); else if (type$1 == "spread") return cont(expressionNoComma, afterprop); else if (value == "*") { cx.marked = "keyword"; return cont(objprop); } else if (type$1 == ":") return pass(afterprop); } function getterSetter(type$1) { if (type$1 != "variable") return pass(afterprop); cx.marked = "property"; return cont(functiondef); } function afterprop(type$1) { if (type$1 == ":") return cont(expressionNoComma); if (type$1 == "(") return pass(functiondef); } function commasep(what, end, sep) { function proceed(type$1, value) { if (sep ? sep.indexOf(type$1) > -1 : type$1 == ",") { var lex = cx.state.lexical; if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; return cont(function(type$2, value$1) { if (type$2 == end || value$1 == end) return pass(); return pass(what); }, proceed); } if (type$1 == end || value == end) return cont(); if (sep && sep.indexOf(";") > -1) return pass(what); return cont(expect(end)); } return function(type$1, value) { if (type$1 == end || value == end) return cont(); return pass(what, proceed); }; } function contCommasep(what, end, info) { for (var i = 3; i < arguments.length; i++) cx.cc.push(arguments[i]); return cont(pushlex(end, info), commasep(what, end), poplex); } function block(type$1) { if (type$1 == "}") return cont(); return pass(statement, block); } function maybetype(type$1, value) { if (isTS) { if (type$1 == ":") return cont(typeexpr); if (value == "?") return cont(maybetype); } } function maybetypeOrIn(type$1, value) { if (isTS && (type$1 == ":" || value == "in")) return cont(typeexpr); } function mayberettype(type$1) { if (isTS && type$1 == ":") if (cx.stream.match(/^\s*\w+\s+is\b/, false)) return cont(expression, isKW, typeexpr); else return cont(typeexpr); } function isKW(_, value) { if (value == "is") { cx.marked = "keyword"; return cont(); } } function typeexpr(type$1, value) { if (value == "keyof" || value == "typeof" || value == "infer" || value == "readonly") { cx.marked = "keyword"; return cont(value == "typeof" ? expressionNoComma : typeexpr); } if (type$1 == "variable" || value == "void") { cx.marked = "type"; return cont(afterType); } if (value == "|" || value == "&") return cont(typeexpr); if (type$1 == "string" || type$1 == "number" || type$1 == "atom") return cont(afterType); if (type$1 == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType); if (type$1 == "{") return cont(pushlex("}"), typeprops, poplex, afterType); if (type$1 == "(") return cont(commasep(typearg, ")"), maybeReturnType, afterType); if (type$1 == "<") return cont(commasep(typeexpr, ">"), typeexpr); if (type$1 == "quasi") return pass(quasiType, afterType); } function maybeReturnType(type$1) { if (type$1 == "=>") return cont(typeexpr); } function typeprops(type$1) { if (type$1.match(/[\}\)\]]/)) return cont(); if (type$1 == "," || type$1 == ";") return cont(typeprops); return pass(typeprop, typeprops); } function typeprop(type$1, value) { if (type$1 == "variable" || cx.style == "keyword") { cx.marked = "property"; return cont(typeprop); } else if (value == "?" || type$1 == "number" || type$1 == "string") return cont(typeprop); else if (type$1 == ":") return cont(typeexpr); else if (type$1 == "[") return cont(expect("variable"), maybetypeOrIn, expect("]"), typeprop); else if (type$1 == "(") return pass(functiondecl, typeprop); else if (!type$1.match(/[;\}\)\],]/)) return cont(); } function quasiType(type$1, value) { if (type$1 != "quasi") return pass(); if (value.slice(value.length - 2) != "\${") return cont(quasiType); return cont(typeexpr, continueQuasiType); } function continueQuasiType(type$1) { if (type$1 == "}") { cx.marked = "string-2"; cx.state.tokenize = tokenQuasi; return cont(quasiType); } } function typearg(type$1, value) { if (type$1 == "variable" && cx.stream.match(/^\s*[?:]/, false) || value == "?") return cont(typearg); if (type$1 == ":") return cont(typeexpr); if (type$1 == "spread") return cont(typearg); return pass(typeexpr); } function afterType(type$1, value) { if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType); if (value == "|" || type$1 == "." || value == "&") return cont(typeexpr); if (type$1 == "[") return cont(typeexpr, expect("]"), afterType); if (value == "extends" || value == "implements") { cx.marked = "keyword"; return cont(typeexpr); } if (value == "?") return cont(typeexpr, expect(":"), typeexpr); } function maybeTypeArgs(_, value) { if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType); } function typeparam() { return pass(typeexpr, maybeTypeDefault); } function maybeTypeDefault(_, value) { if (value == "=") return cont(typeexpr); } function vardef(_, value) { if (value == "enum") { cx.marked = "keyword"; return cont(enumdef); } return pass(pattern, maybetype, maybeAssign, vardefCont); } function pattern(type$1, value) { if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(pattern); } if (type$1 == "variable") { register(value); return cont(); } if (type$1 == "spread") return cont(pattern); if (type$1 == "[") return contCommasep(eltpattern, "]"); if (type$1 == "{") return contCommasep(proppattern, "}"); } function proppattern(type$1, value) { if (type$1 == "variable" && !cx.stream.match(/^\s*:/, false)) { register(value); return cont(maybeAssign); } if (type$1 == "variable") cx.marked = "property"; if (type$1 == "spread") return cont(pattern); if (type$1 == "}") return pass(); if (type$1 == "[") return cont(expression, expect("]"), expect(":"), proppattern); return cont(expect(":"), pattern, maybeAssign); } function eltpattern() { return pass(pattern, maybeAssign); } function maybeAssign(_type, value) { if (value == "=") return cont(expressionNoComma); } function vardefCont(type$1) { if (type$1 == ",") return cont(vardef); } function maybeelse(type$1, value) { if (type$1 == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex); } function forspec(type$1, value) { if (value == "await") return cont(forspec); if (type$1 == "(") return cont(pushlex(")"), forspec1, poplex); } function forspec1(type$1) { if (type$1 == "var") return cont(vardef, forspec2); if (type$1 == "variable") return cont(forspec2); return pass(forspec2); } function forspec2(type$1, value) { if (type$1 == ")") return cont(); if (type$1 == ";") return cont(forspec2); if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression, forspec2); } return pass(expression, forspec2); } function functiondef(type$1, value) { if (value == "*") { cx.marked = "keyword"; return cont(functiondef); } if (type$1 == "variable") { register(value); return cont(functiondef); } if (type$1 == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, statement, popcontext); if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondef); } function functiondecl(type$1, value) { if (value == "*") { cx.marked = "keyword"; return cont(functiondecl); } if (type$1 == "variable") { register(value); return cont(functiondecl); } if (type$1 == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, popcontext); if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondecl); } function typename(type$1, value) { if (type$1 == "keyword" || type$1 == "variable") { cx.marked = "type"; return cont(typename); } else if (value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex); } function funarg(type$1, value) { if (value == "@") cont(expression, funarg); if (type$1 == "spread") return cont(funarg); if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(funarg); } if (isTS && type$1 == "this") return cont(maybetype, maybeAssign); return pass(pattern, maybetype, maybeAssign); } function classExpression(type$1, value) { if (type$1 == "variable") return className(type$1, value); return classNameAfter(type$1, value); } function className(type$1, value) { if (type$1 == "variable") { register(value); return cont(classNameAfter); } } function classNameAfter(type$1, value) { if (value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, classNameAfter); if (value == "extends" || value == "implements" || isTS && type$1 == ",") { if (value == "implements") cx.marked = "keyword"; return cont(isTS ? typeexpr : expression, classNameAfter); } if (type$1 == "{") return cont(pushlex("}"), classBody, poplex); } function classBody(type$1, value) { if (type$1 == "async" || type$1 == "variable" && (value == "static" || value == "get" || value == "set" || isTS && isModifier(value)) && cx.stream.match(/^\s+#?[\w$\xa1-\uffff]/, false)) { cx.marked = "keyword"; return cont(classBody); } if (type$1 == "variable" || cx.style == "keyword") { cx.marked = "property"; return cont(classfield, classBody); } if (type$1 == "number" || type$1 == "string") return cont(classfield, classBody); if (type$1 == "[") return cont(expression, maybetype, expect("]"), classfield, classBody); if (value == "*") { cx.marked = "keyword"; return cont(classBody); } if (isTS && type$1 == "(") return pass(functiondecl, classBody); if (type$1 == ";" || type$1 == ",") return cont(classBody); if (type$1 == "}") return cont(); if (value == "@") return cont(expression, classBody); } function classfield(type$1, value) { if (value == "!") return cont(classfield); if (value == "?") return cont(classfield); if (type$1 == ":") return cont(typeexpr, maybeAssign); if (value == "=") return cont(expressionNoComma); var context = cx.state.lexical.prev, isInterface = context && context.info == "interface"; return pass(isInterface ? functiondecl : functiondef); } function afterExport(type$1, value) { if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); } if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); } if (type$1 == "{") return cont(commasep(exportField, "}"), maybeFrom, expect(";")); return pass(statement); } function exportField(type$1, value) { if (value == "as") { cx.marked = "keyword"; return cont(expect("variable")); } if (type$1 == "variable") return pass(expressionNoComma, exportField); } function afterImport(type$1) { if (type$1 == "string") return cont(); if (type$1 == "(") return pass(expression); if (type$1 == ".") return pass(maybeoperatorComma); return pass(importSpec, maybeMoreImports, maybeFrom); } function importSpec(type$1, value) { if (type$1 == "{") return contCommasep(importSpec, "}"); if (type$1 == "variable") register(value); if (value == "*") cx.marked = "keyword"; return cont(maybeAs); } function maybeMoreImports(type$1) { if (type$1 == ",") return cont(importSpec, maybeMoreImports); } function maybeAs(_type, value) { if (value == "as") { cx.marked = "keyword"; return cont(importSpec); } } function maybeFrom(_type, value) { if (value == "from") { cx.marked = "keyword"; return cont(expression); } } function arrayLiteral(type$1) { if (type$1 == "]") return cont(); return pass(commasep(expressionNoComma, "]")); } function enumdef() { return pass(pushlex("form"), pattern, expect("{"), pushlex("}"), commasep(enummember, "}"), poplex, poplex); } function enummember() { return pass(pattern, maybeAssign); } function isContinuedStatement(state, textAfter) { return state.lastType == "operator" || state.lastType == "," || isOperatorChar.test(textAfter.charAt(0)) || /[,.]/.test(textAfter.charAt(0)); } function expressionAllowed(stream, state, backUp) { return state.tokenize == tokenBase && /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(state.lastType) || state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))); } return { startState: function(basecolumn) { var state = { tokenize: tokenBase, lastType: "sof", cc: [], lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), localVars: parserConfig.localVars, context: parserConfig.localVars && new Context(null, null, false), indented: basecolumn || 0 }; if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") state.globalVars = parserConfig.globalVars; return state; }, token: function(stream, state) { if (stream.sol()) { if (!state.lexical.hasOwnProperty("align")) state.lexical.align = false; state.indented = stream.indentation(); findFatArrow(stream, state); } if (state.tokenize != tokenComment && stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (type == "comment") return style; state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; return parseJS(state, style, type, content, stream); }, indent: function(state, textAfter) { if (state.tokenize == tokenComment || state.tokenize == tokenQuasi) return CodeMirror$1.Pass; if (state.tokenize != tokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top; if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) { var c = state.cc[i]; if (c == poplex) lexical = lexical.prev; else if (c != maybeelse && c != popcontext) break; } while ((lexical.type == "stat" || lexical.type == "form") && (firstChar == "}" || (top = state.cc[state.cc.length - 1]) && (top == maybeoperatorComma || top == maybeoperatorNoComma) && !/^[,\.=+\-*:?[\(]/.test(textAfter))) lexical = lexical.prev; if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") lexical = lexical.prev; var type$1 = lexical.type, closing = firstChar == type$1; if (type$1 == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info.length + 1 : 0); else if (type$1 == "form" && firstChar == "{") return lexical.indented; else if (type$1 == "form") return lexical.indented + indentUnit; else if (type$1 == "stat") return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0); else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); else if (lexical.align) return lexical.column + (closing ? 0 : 1); else return lexical.indented + (closing ? 0 : indentUnit); }, electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, blockCommentStart: jsonMode ? null : "/*", blockCommentEnd: jsonMode ? null : "*/", blockCommentContinue: jsonMode ? null : " * ", lineComment: jsonMode ? null : "//", fold: "brace", closeBrackets: "()[]{}''\"\"``", helperType: jsonMode ? "json" : "javascript", jsonldMode, jsonMode, expressionAllowed, skipExpression: function(state) { parseJS(state, "atom", "atom", "true", new CodeMirror$1.StringStream("", 2, null)); } }; }); CodeMirror$1.registerHelper("wordChars", "javascript", /[\w$]/); CodeMirror$1.defineMIME("text/javascript", "javascript"); CodeMirror$1.defineMIME("text/ecmascript", "javascript"); CodeMirror$1.defineMIME("application/javascript", "javascript"); CodeMirror$1.defineMIME("application/x-javascript", "javascript"); CodeMirror$1.defineMIME("application/ecmascript", "javascript"); CodeMirror$1.defineMIME("application/json", { name: "javascript", json: true }); CodeMirror$1.defineMIME("application/x-json", { name: "javascript", json: true }); CodeMirror$1.defineMIME("application/manifest+json", { name: "javascript", json: true }); CodeMirror$1.defineMIME("application/ld+json", { name: "javascript", jsonld: true }); CodeMirror$1.defineMIME("text/typescript", { name: "javascript", typescript: true }); CodeMirror$1.defineMIME("application/typescript", { name: "javascript", typescript: true }); }); }); var require_htmlmixed = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror(), require_xml(), require_javascript(), require_css()); else if (typeof define == "function" && define.amd) define([ "../../lib/codemirror", "../xml/xml", "../javascript/javascript", "../css/css" ], mod); else mod(CodeMirror); })(function(CodeMirror$1) { "use strict"; var defaultTags = { script: [ [ "lang", /(javascript|babel)/i, "javascript" ], [ "type", /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i, "javascript" ], [ "type", /./, "text/plain" ], [ null, null, "javascript" ] ], style: [ [ "lang", /^css$/i, "css" ], [ "type", /^(text\/)?(x-)?(stylesheet|css)$/i, "css" ], [ "type", /./, "text/plain" ], [ null, null, "css" ] ] }; function maybeBackup(stream, pat, style) { var cur = stream.current(), close = cur.search(pat); if (close > -1) stream.backUp(cur.length - close); else if (cur.match(/<\/?$/)) { stream.backUp(cur.length); if (!stream.match(pat, false)) stream.match(cur); } return style; } var attrRegexpCache = {}; function getAttrRegexp(attr) { var regexp = attrRegexpCache[attr]; if (regexp) return regexp; return attrRegexpCache[attr] = new RegExp("\\s+" + attr + "\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*"); } function getAttrValue(text, attr) { var match = text.match(getAttrRegexp(attr)); return match ? /^\s*(.*?)\s*$/.exec(match[2])[1] : ""; } function getTagRegexp(tagName, anchored) { return new RegExp((anchored ? "^" : "") + "", "i"); } function addTags(from, to) { for (var tag in from) { var dest = to[tag] || (to[tag] = []); var source = from[tag]; for (var i = source.length - 1; i >= 0; i--) dest.unshift(source[i]); } } function findMatchingMode(tagInfo, tagText) { for (var i = 0; i < tagInfo.length; i++) { var spec = tagInfo[i]; if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0]))) return spec[2]; } } CodeMirror$1.defineMode("htmlmixed", function(config, parserConfig) { var htmlMode = CodeMirror$1.getMode(config, { name: "xml", htmlMode: true, multilineTagIndentFactor: parserConfig.multilineTagIndentFactor, multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag, allowMissingTagName: parserConfig.allowMissingTagName }); var tags = {}; var configTags = parserConfig && parserConfig.tags, configScript = parserConfig && parserConfig.scriptTypes; addTags(defaultTags, tags); if (configTags) addTags(configTags, tags); if (configScript) for (var i = configScript.length - 1; i >= 0; i--) tags.script.unshift([ "type", configScript[i].matches, configScript[i].mode ]); function html(stream, state) { var style = htmlMode.token(stream, state.htmlState), tag = /\btag\b/.test(style), tagName; if (tag && !/[<>\s\/]/.test(stream.current()) && (tagName = state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) && tags.hasOwnProperty(tagName)) state.inTag = tagName + " "; else if (state.inTag && tag && />$/.test(stream.current())) { var inTag = /^([\S]+) (.*)/.exec(state.inTag); state.inTag = null; var modeSpec = stream.current() == ">" && findMatchingMode(tags[inTag[1]], inTag[2]); var mode = CodeMirror$1.getMode(config, modeSpec); var endTagA = getTagRegexp(inTag[1], true), endTag = getTagRegexp(inTag[1], false); state.token = function(stream$1, state$1) { if (stream$1.match(endTagA, false)) { state$1.token = html; state$1.localState = state$1.localMode = null; return null; } return maybeBackup(stream$1, endTag, state$1.localMode.token(stream$1, state$1.localState)); }; state.localMode = mode; state.localState = CodeMirror$1.startState(mode, htmlMode.indent(state.htmlState, "", "")); } else if (state.inTag) { state.inTag += stream.current(); if (stream.eol()) state.inTag += " "; } return style; } return { startState: function() { var state = CodeMirror$1.startState(htmlMode); return { token: html, inTag: null, localMode: null, localState: null, htmlState: state }; }, copyState: function(state) { var local; if (state.localState) local = CodeMirror$1.copyState(state.localMode, state.localState); return { token: state.token, inTag: state.inTag, localMode: state.localMode, localState: local, htmlState: CodeMirror$1.copyState(htmlMode, state.htmlState) }; }, token: function(stream, state) { return state.token(stream, state); }, indent: function(state, textAfter, line) { if (!state.localMode || /^\s*<\//.test(textAfter)) return htmlMode.indent(state.htmlState, textAfter, line); else if (state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line); else return CodeMirror$1.Pass; }, innerMode: function(state) { return { state: state.localState || state.htmlState, mode: state.localMode || htmlMode }; } }; }, "xml", "javascript", "css"); CodeMirror$1.defineMIME("text/html", "htmlmixed"); }); }); var require_meta = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror()); else if (typeof define == "function" && define.amd) define(["../lib/codemirror"], mod); else mod(CodeMirror); })(function(CodeMirror$1) { "use strict"; CodeMirror$1.modeInfo = [ { name: "APL", mime: "text/apl", mode: "apl", ext: ["dyalog", "apl"] }, { name: "PGP", mimes: [ "application/pgp", "application/pgp-encrypted", "application/pgp-keys", "application/pgp-signature" ], mode: "asciiarmor", ext: [ "asc", "pgp", "sig" ] }, { name: "ASN.1", mime: "text/x-ttcn-asn", mode: "asn.1", ext: ["asn", "asn1"] }, { name: "Asterisk", mime: "text/x-asterisk", mode: "asterisk", file: /^extensions\.conf$/i }, { name: "Brainfuck", mime: "text/x-brainfuck", mode: "brainfuck", ext: ["b", "bf"] }, { name: "C", mime: "text/x-csrc", mode: "clike", ext: [ "c", "h", "ino" ] }, { name: "C++", mime: "text/x-c++src", mode: "clike", ext: [ "cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx" ], alias: ["cpp"] }, { name: "Cobol", mime: "text/x-cobol", mode: "cobol", ext: [ "cob", "cpy", "cbl" ] }, { name: "C#", mime: "text/x-csharp", mode: "clike", ext: ["cs"], alias: ["csharp", "cs"] }, { name: "Clojure", mime: "text/x-clojure", mode: "clojure", ext: [ "clj", "cljc", "cljx" ] }, { name: "ClojureScript", mime: "text/x-clojurescript", mode: "clojure", ext: ["cljs"] }, { name: "Closure Stylesheets (GSS)", mime: "text/x-gss", mode: "css", ext: ["gss"] }, { name: "CMake", mime: "text/x-cmake", mode: "cmake", ext: ["cmake", "cmake.in"], file: /^CMakeLists\.txt$/ }, { name: "CoffeeScript", mimes: [ "application/vnd.coffeescript", "text/coffeescript", "text/x-coffeescript" ], mode: "coffeescript", ext: ["coffee"], alias: ["coffee", "coffee-script"] }, { name: "Common Lisp", mime: "text/x-common-lisp", mode: "commonlisp", ext: [ "cl", "lisp", "el" ], alias: ["lisp"] }, { name: "Cypher", mime: "application/x-cypher-query", mode: "cypher", ext: ["cyp", "cypher"] }, { name: "Cython", mime: "text/x-cython", mode: "python", ext: [ "pyx", "pxd", "pxi" ] }, { name: "Crystal", mime: "text/x-crystal", mode: "crystal", ext: ["cr"] }, { name: "CSS", mime: "text/css", mode: "css", ext: ["css"] }, { name: "CQL", mime: "text/x-cassandra", mode: "sql", ext: ["cql"] }, { name: "D", mime: "text/x-d", mode: "d", ext: ["d"] }, { name: "Dart", mimes: ["application/dart", "text/x-dart"], mode: "dart", ext: ["dart"] }, { name: "diff", mime: "text/x-diff", mode: "diff", ext: ["diff", "patch"] }, { name: "Django", mime: "text/x-django", mode: "django" }, { name: "Dockerfile", mime: "text/x-dockerfile", mode: "dockerfile", file: /^Dockerfile$/ }, { name: "DTD", mime: "application/xml-dtd", mode: "dtd", ext: ["dtd"] }, { name: "Dylan", mime: "text/x-dylan", mode: "dylan", ext: [ "dylan", "dyl", "intr" ] }, { name: "EBNF", mime: "text/x-ebnf", mode: "ebnf" }, { name: "ECL", mime: "text/x-ecl", mode: "ecl", ext: ["ecl"] }, { name: "edn", mime: "application/edn", mode: "clojure", ext: ["edn"] }, { name: "Eiffel", mime: "text/x-eiffel", mode: "eiffel", ext: ["e"] }, { name: "Elm", mime: "text/x-elm", mode: "elm", ext: ["elm"] }, { name: "Embedded JavaScript", mime: "application/x-ejs", mode: "htmlembedded", ext: ["ejs"] }, { name: "Embedded Ruby", mime: "application/x-erb", mode: "htmlembedded", ext: ["erb"] }, { name: "Erlang", mime: "text/x-erlang", mode: "erlang", ext: ["erl"] }, { name: "Esper", mime: "text/x-esper", mode: "sql" }, { name: "Factor", mime: "text/x-factor", mode: "factor", ext: ["factor"] }, { name: "FCL", mime: "text/x-fcl", mode: "fcl" }, { name: "Forth", mime: "text/x-forth", mode: "forth", ext: [ "forth", "fth", "4th" ] }, { name: "Fortran", mime: "text/x-fortran", mode: "fortran", ext: [ "f", "for", "f77", "f90", "f95" ] }, { name: "F#", mime: "text/x-fsharp", mode: "mllike", ext: ["fs"], alias: ["fsharp"] }, { name: "Gas", mime: "text/x-gas", mode: "gas", ext: ["s"] }, { name: "Gherkin", mime: "text/x-feature", mode: "gherkin", ext: ["feature"] }, { name: "GitHub Flavored Markdown", mime: "text/x-gfm", mode: "gfm", file: /^(readme|contributing|history)\.md$/i }, { name: "Go", mime: "text/x-go", mode: "go", ext: ["go"] }, { name: "Groovy", mime: "text/x-groovy", mode: "groovy", ext: ["groovy", "gradle"], file: /^Jenkinsfile$/ }, { name: "HAML", mime: "text/x-haml", mode: "haml", ext: ["haml"] }, { name: "Haskell", mime: "text/x-haskell", mode: "haskell", ext: ["hs"] }, { name: "Haskell (Literate)", mime: "text/x-literate-haskell", mode: "haskell-literate", ext: ["lhs"] }, { name: "Haxe", mime: "text/x-haxe", mode: "haxe", ext: ["hx"] }, { name: "HXML", mime: "text/x-hxml", mode: "haxe", ext: ["hxml"] }, { name: "ASP.NET", mime: "application/x-aspx", mode: "htmlembedded", ext: ["aspx"], alias: ["asp", "aspx"] }, { name: "HTML", mime: "text/html", mode: "htmlmixed", ext: [ "html", "htm", "handlebars", "hbs" ], alias: ["xhtml"] }, { name: "HTTP", mime: "message/http", mode: "http" }, { name: "IDL", mime: "text/x-idl", mode: "idl", ext: ["pro"] }, { name: "Pug", mime: "text/x-pug", mode: "pug", ext: ["jade", "pug"], alias: ["jade"] }, { name: "Java", mime: "text/x-java", mode: "clike", ext: ["java"] }, { name: "Java Server Pages", mime: "application/x-jsp", mode: "htmlembedded", ext: ["jsp"], alias: ["jsp"] }, { name: "JavaScript", mimes: [ "text/javascript", "text/ecmascript", "application/javascript", "application/x-javascript", "application/ecmascript" ], mode: "javascript", ext: ["js"], alias: [ "ecmascript", "js", "node" ] }, { name: "JSON", mimes: ["application/json", "application/x-json"], mode: "javascript", ext: ["json", "map"], alias: ["json5"] }, { name: "JSON-LD", mime: "application/ld+json", mode: "javascript", ext: ["jsonld"], alias: ["jsonld"] }, { name: "JSX", mime: "text/jsx", mode: "jsx", ext: ["jsx"] }, { name: "Jinja2", mime: "text/jinja2", mode: "jinja2", ext: [ "j2", "jinja", "jinja2" ] }, { name: "Julia", mime: "text/x-julia", mode: "julia", ext: ["jl"], alias: ["jl"] }, { name: "Kotlin", mime: "text/x-kotlin", mode: "clike", ext: ["kt"] }, { name: "LESS", mime: "text/x-less", mode: "css", ext: ["less"] }, { name: "LiveScript", mime: "text/x-livescript", mode: "livescript", ext: ["ls"], alias: ["ls"] }, { name: "Lua", mime: "text/x-lua", mode: "lua", ext: ["lua"] }, { name: "Markdown", mime: "text/x-markdown", mode: "markdown", ext: [ "markdown", "md", "mkd" ] }, { name: "mIRC", mime: "text/mirc", mode: "mirc" }, { name: "MariaDB SQL", mime: "text/x-mariadb", mode: "sql" }, { name: "Mathematica", mime: "text/x-mathematica", mode: "mathematica", ext: [ "m", "nb", "wl", "wls" ] }, { name: "Modelica", mime: "text/x-modelica", mode: "modelica", ext: ["mo"] }, { name: "MUMPS", mime: "text/x-mumps", mode: "mumps", ext: ["mps"] }, { name: "MS SQL", mime: "text/x-mssql", mode: "sql" }, { name: "mbox", mime: "application/mbox", mode: "mbox", ext: ["mbox"] }, { name: "MySQL", mime: "text/x-mysql", mode: "sql" }, { name: "Nginx", mime: "text/x-nginx-conf", mode: "nginx", file: /nginx.*\.conf$/i }, { name: "NSIS", mime: "text/x-nsis", mode: "nsis", ext: ["nsh", "nsi"] }, { name: "NTriples", mimes: [ "application/n-triples", "application/n-quads", "text/n-triples" ], mode: "ntriples", ext: ["nt", "nq"] }, { name: "Objective-C", mime: "text/x-objectivec", mode: "clike", ext: ["m"], alias: ["objective-c", "objc"] }, { name: "Objective-C++", mime: "text/x-objectivec++", mode: "clike", ext: ["mm"], alias: ["objective-c++", "objc++"] }, { name: "OCaml", mime: "text/x-ocaml", mode: "mllike", ext: [ "ml", "mli", "mll", "mly" ] }, { name: "Octave", mime: "text/x-octave", mode: "octave", ext: ["m"] }, { name: "Oz", mime: "text/x-oz", mode: "oz", ext: ["oz"] }, { name: "Pascal", mime: "text/x-pascal", mode: "pascal", ext: ["p", "pas"] }, { name: "PEG.js", mime: "null", mode: "pegjs", ext: ["jsonld"] }, { name: "Perl", mime: "text/x-perl", mode: "perl", ext: ["pl", "pm"] }, { name: "PHP", mimes: [ "text/x-php", "application/x-httpd-php", "application/x-httpd-php-open" ], mode: "php", ext: [ "php", "php3", "php4", "php5", "php7", "phtml" ] }, { name: "Pig", mime: "text/x-pig", mode: "pig", ext: ["pig"] }, { name: "Plain Text", mime: "text/plain", mode: "null", ext: [ "txt", "text", "conf", "def", "list", "log" ] }, { name: "PLSQL", mime: "text/x-plsql", mode: "sql", ext: ["pls"] }, { name: "PostgreSQL", mime: "text/x-pgsql", mode: "sql" }, { name: "PowerShell", mime: "application/x-powershell", mode: "powershell", ext: [ "ps1", "psd1", "psm1" ] }, { name: "Properties files", mime: "text/x-properties", mode: "properties", ext: [ "properties", "ini", "in" ], alias: ["ini", "properties"] }, { name: "ProtoBuf", mime: "text/x-protobuf", mode: "protobuf", ext: ["proto"] }, { name: "Python", mime: "text/x-python", mode: "python", ext: [ "BUILD", "bzl", "py", "pyw" ], file: /^(BUCK|BUILD)$/ }, { name: "Puppet", mime: "text/x-puppet", mode: "puppet", ext: ["pp"] }, { name: "Q", mime: "text/x-q", mode: "q", ext: ["q"] }, { name: "R", mime: "text/x-rsrc", mode: "r", ext: ["r", "R"], alias: ["rscript"] }, { name: "reStructuredText", mime: "text/x-rst", mode: "rst", ext: ["rst"], alias: ["rst"] }, { name: "RPM Changes", mime: "text/x-rpm-changes", mode: "rpm" }, { name: "RPM Spec", mime: "text/x-rpm-spec", mode: "rpm", ext: ["spec"] }, { name: "Ruby", mime: "text/x-ruby", mode: "ruby", ext: ["rb"], alias: [ "jruby", "macruby", "rake", "rb", "rbx" ] }, { name: "Rust", mime: "text/x-rustsrc", mode: "rust", ext: ["rs"] }, { name: "SAS", mime: "text/x-sas", mode: "sas", ext: ["sas"] }, { name: "Sass", mime: "text/x-sass", mode: "sass", ext: ["sass"] }, { name: "Scala", mime: "text/x-scala", mode: "clike", ext: ["scala"] }, { name: "Scheme", mime: "text/x-scheme", mode: "scheme", ext: ["scm", "ss"] }, { name: "SCSS", mime: "text/x-scss", mode: "css", ext: ["scss"] }, { name: "Shell", mimes: ["text/x-sh", "application/x-sh"], mode: "shell", ext: [ "sh", "ksh", "bash" ], alias: [ "bash", "sh", "zsh" ], file: /^PKGBUILD$/ }, { name: "Sieve", mime: "application/sieve", mode: "sieve", ext: ["siv", "sieve"] }, { name: "Slim", mimes: ["text/x-slim", "application/x-slim"], mode: "slim", ext: ["slim"] }, { name: "Smalltalk", mime: "text/x-stsrc", mode: "smalltalk", ext: ["st"] }, { name: "Smarty", mime: "text/x-smarty", mode: "smarty", ext: ["tpl"] }, { name: "Solr", mime: "text/x-solr", mode: "solr" }, { name: "SML", mime: "text/x-sml", mode: "mllike", ext: [ "sml", "sig", "fun", "smackspec" ] }, { name: "Soy", mime: "text/x-soy", mode: "soy", ext: ["soy"], alias: ["closure template"] }, { name: "SPARQL", mime: "application/sparql-query", mode: "sparql", ext: ["rq", "sparql"], alias: ["sparul"] }, { name: "Spreadsheet", mime: "text/x-spreadsheet", mode: "spreadsheet", alias: ["excel", "formula"] }, { name: "SQL", mime: "text/x-sql", mode: "sql", ext: ["sql"] }, { name: "SQLite", mime: "text/x-sqlite", mode: "sql" }, { name: "Squirrel", mime: "text/x-squirrel", mode: "clike", ext: ["nut"] }, { name: "Stylus", mime: "text/x-styl", mode: "stylus", ext: ["styl"] }, { name: "Swift", mime: "text/x-swift", mode: "swift", ext: ["swift"] }, { name: "sTeX", mime: "text/x-stex", mode: "stex" }, { name: "LaTeX", mime: "text/x-latex", mode: "stex", ext: [ "text", "ltx", "tex" ], alias: ["tex"] }, { name: "SystemVerilog", mime: "text/x-systemverilog", mode: "verilog", ext: [ "v", "sv", "svh" ] }, { name: "Tcl", mime: "text/x-tcl", mode: "tcl", ext: ["tcl"] }, { name: "Textile", mime: "text/x-textile", mode: "textile", ext: ["textile"] }, { name: "TiddlyWiki", mime: "text/x-tiddlywiki", mode: "tiddlywiki" }, { name: "Tiki wiki", mime: "text/tiki", mode: "tiki" }, { name: "TOML", mime: "text/x-toml", mode: "toml", ext: ["toml"] }, { name: "Tornado", mime: "text/x-tornado", mode: "tornado" }, { name: "troff", mime: "text/troff", mode: "troff", ext: [ "1", "2", "3", "4", "5", "6", "7", "8", "9" ] }, { name: "TTCN", mime: "text/x-ttcn", mode: "ttcn", ext: [ "ttcn", "ttcn3", "ttcnpp" ] }, { name: "TTCN_CFG", mime: "text/x-ttcn-cfg", mode: "ttcn-cfg", ext: ["cfg"] }, { name: "Turtle", mime: "text/turtle", mode: "turtle", ext: ["ttl"] }, { name: "TypeScript", mime: "application/typescript", mode: "javascript", ext: ["ts"], alias: ["ts"] }, { name: "TypeScript-JSX", mime: "text/typescript-jsx", mode: "jsx", ext: ["tsx"], alias: ["tsx"] }, { name: "Twig", mime: "text/x-twig", mode: "twig" }, { name: "Web IDL", mime: "text/x-webidl", mode: "webidl", ext: ["webidl"] }, { name: "VB.NET", mime: "text/x-vb", mode: "vb", ext: ["vb"] }, { name: "VBScript", mime: "text/vbscript", mode: "vbscript", ext: ["vbs"] }, { name: "Velocity", mime: "text/velocity", mode: "velocity", ext: ["vtl"] }, { name: "Verilog", mime: "text/x-verilog", mode: "verilog", ext: ["v"] }, { name: "VHDL", mime: "text/x-vhdl", mode: "vhdl", ext: ["vhd", "vhdl"] }, { name: "Vue.js Component", mimes: ["script/x-vue", "text/x-vue"], mode: "vue", ext: ["vue"] }, { name: "XML", mimes: ["application/xml", "text/xml"], mode: "xml", ext: [ "xml", "xsl", "xsd", "svg" ], alias: [ "rss", "wsdl", "xsd" ] }, { name: "XQuery", mime: "application/xquery", mode: "xquery", ext: ["xy", "xquery"] }, { name: "Yacas", mime: "text/x-yacas", mode: "yacas", ext: ["ys"] }, { name: "YAML", mimes: ["text/x-yaml", "text/yaml"], mode: "yaml", ext: ["yaml", "yml"], alias: ["yml"] }, { name: "Z80", mime: "text/x-z80", mode: "z80", ext: ["z80"] }, { name: "mscgen", mime: "text/x-mscgen", mode: "mscgen", ext: [ "mscgen", "mscin", "msc" ] }, { name: "xu", mime: "text/x-xu", mode: "mscgen", ext: ["xu"] }, { name: "msgenny", mime: "text/x-msgenny", mode: "mscgen", ext: ["msgenny"] }, { name: "WebAssembly", mime: "text/webassembly", mode: "wast", ext: ["wat", "wast"] } ]; for (var i = 0; i < CodeMirror$1.modeInfo.length; i++) { var info = CodeMirror$1.modeInfo[i]; if (info.mimes) info.mime = info.mimes[0]; } CodeMirror$1.findModeByMIME = function(mime) { mime = mime.toLowerCase(); for (var i$1 = 0; i$1 < CodeMirror$1.modeInfo.length; i$1++) { var info$1 = CodeMirror$1.modeInfo[i$1]; if (info$1.mime == mime) return info$1; if (info$1.mimes) { for (var j = 0; j < info$1.mimes.length; j++) if (info$1.mimes[j] == mime) return info$1; } } if (/\+xml$/.test(mime)) return CodeMirror$1.findModeByMIME("application/xml"); if (/\+json$/.test(mime)) return CodeMirror$1.findModeByMIME("application/json"); }; CodeMirror$1.findModeByExtension = function(ext) { ext = ext.toLowerCase(); for (var i$1 = 0; i$1 < CodeMirror$1.modeInfo.length; i$1++) { var info$1 = CodeMirror$1.modeInfo[i$1]; if (info$1.ext) { for (var j = 0; j < info$1.ext.length; j++) if (info$1.ext[j] == ext) return info$1; } } }; CodeMirror$1.findModeByFileName = function(filename) { for (var i$1 = 0; i$1 < CodeMirror$1.modeInfo.length; i$1++) { var info$1 = CodeMirror$1.modeInfo[i$1]; if (info$1.file && info$1.file.test(filename)) return info$1; } var dot = filename.lastIndexOf("."); var ext = dot > -1 && filename.substring(dot + 1, filename.length); if (ext) return CodeMirror$1.findModeByExtension(ext); }; CodeMirror$1.findModeByName = function(name) { name = name.toLowerCase(); for (var i$1 = 0; i$1 < CodeMirror$1.modeInfo.length; i$1++) { var info$1 = CodeMirror$1.modeInfo[i$1]; if (info$1.name.toLowerCase() == name) return info$1; if (info$1.alias) { for (var j = 0; j < info$1.alias.length; j++) if (info$1.alias[j].toLowerCase() == name) return info$1; } } }; }); }); var require_markdown = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror(), require_xml(), require_meta()); else if (typeof define == "function" && define.amd) define([ "../../lib/codemirror", "../xml/xml", "../meta" ], mod); else mod(CodeMirror); })(function(CodeMirror$1) { "use strict"; CodeMirror$1.defineMode("markdown", function(cmCfg, modeCfg) { var htmlMode = CodeMirror$1.getMode(cmCfg, "text/html"); var htmlModeMissing = htmlMode.name == "null"; function getMode(name) { if (CodeMirror$1.findModeByName) { var found = CodeMirror$1.findModeByName(name); if (found) name = found.mime || found.mimes[0]; } var mode$1 = CodeMirror$1.getMode(cmCfg, name); return mode$1.name == "null" ? null : mode$1; } if (modeCfg.highlightFormatting === void 0) modeCfg.highlightFormatting = false; if (modeCfg.maxBlockquoteDepth === void 0) modeCfg.maxBlockquoteDepth = 0; if (modeCfg.taskLists === void 0) modeCfg.taskLists = false; if (modeCfg.strikethrough === void 0) modeCfg.strikethrough = false; if (modeCfg.emoji === void 0) modeCfg.emoji = false; if (modeCfg.fencedCodeBlockHighlighting === void 0) modeCfg.fencedCodeBlockHighlighting = true; if (modeCfg.fencedCodeBlockDefaultMode === void 0) modeCfg.fencedCodeBlockDefaultMode = "text/plain"; if (modeCfg.xml === void 0) modeCfg.xml = true; if (modeCfg.tokenTypeOverrides === void 0) modeCfg.tokenTypeOverrides = {}; var tokenTypes = { header: "header", code: "comment", quote: "quote", list1: "variable-2", list2: "variable-3", list3: "keyword", hr: "hr", image: "image", imageAltText: "image-alt-text", imageMarker: "image-marker", formatting: "formatting", linkInline: "link", linkEmail: "link", linkText: "link", linkHref: "string", em: "em", strong: "strong", strikethrough: "strikethrough", emoji: "builtin" }; for (var tokenType in tokenTypes) if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType]; var hrRE = /^([*\-_])(?:\s*\1){2,}\s*$/, listRE = /^(?:[*\-+]|^[0-9]+([.)]))\s+/, taskListRE = /^\[(x| )\](?=\s)/i, atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/, setextHeaderRE = /^ {0,3}(?:\={1,}|-{2,})\s*$/, textRE = /^[^#!\[\]*_\\<>` "'(~:]+/, fencedCodeRE = /^(~~~+|```+)[ \t]*([\w\/+#-]*)[^\n`]*$/, linkDefRE = /^\s*\[[^\]]+?\]:.*$/, punctuation = /[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/, expandedTab = " "; function switchInline(stream, state, f) { state.f = state.inline = f; return f(stream, state); } function switchBlock(stream, state, f) { state.f = state.block = f; return f(stream, state); } function lineIsEmpty(line) { return !line || !/\S/.test(line.string); } function blankLine(state) { state.linkTitle = false; state.linkHref = false; state.linkText = false; state.em = false; state.strong = false; state.strikethrough = false; state.quote = 0; state.indentedCode = false; if (state.f == htmlBlock) { var exit = htmlModeMissing; if (!exit) { var inner = CodeMirror$1.innerMode(htmlMode, state.htmlState); exit = inner.mode.name == "xml" && inner.state.tagStart === null && !inner.state.context && inner.state.tokenize.isInText; } if (exit) { state.f = inlineNormal; state.block = blockNormal; state.htmlState = null; } } state.trailingSpace = 0; state.trailingSpaceNewLine = false; state.prevLine = state.thisLine; state.thisLine = { stream: null }; return null; } function blockNormal(stream, state) { var firstTokenOnLine = stream.column() === state.indentation; var prevLineLineIsEmpty = lineIsEmpty(state.prevLine.stream); var prevLineIsIndentedCode = state.indentedCode; var prevLineIsHr = state.prevLine.hr; var prevLineIsList = state.list !== false; var maxNonCodeIndentation = (state.listStack[state.listStack.length - 1] || 0) + 3; state.indentedCode = false; var lineIndentation = state.indentation; if (state.indentationDiff === null) { state.indentationDiff = state.indentation; if (prevLineIsList) { state.list = null; while (lineIndentation < state.listStack[state.listStack.length - 1]) { state.listStack.pop(); if (state.listStack.length) state.indentation = state.listStack[state.listStack.length - 1]; else state.list = false; } if (state.list !== false) state.indentationDiff = lineIndentation - state.listStack[state.listStack.length - 1]; } } var allowsInlineContinuation = !prevLineLineIsEmpty && !prevLineIsHr && !state.prevLine.header && (!prevLineIsList || !prevLineIsIndentedCode) && !state.prevLine.fencedCodeEnd; var isHr = (state.list === false || prevLineIsHr || prevLineLineIsEmpty) && state.indentation <= maxNonCodeIndentation && stream.match(hrRE); var match = null; if (state.indentationDiff >= 4 && (prevLineIsIndentedCode || state.prevLine.fencedCodeEnd || state.prevLine.header || prevLineLineIsEmpty)) { stream.skipToEnd(); state.indentedCode = true; return tokenTypes.code; } else if (stream.eatSpace()) return null; else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(atxHeaderRE)) && match[1].length <= 6) { state.quote = 0; state.header = match[1].length; state.thisLine.header = true; if (modeCfg.highlightFormatting) state.formatting = "header"; state.f = state.inline; return getType(state); } else if (state.indentation <= maxNonCodeIndentation && stream.eat(">")) { state.quote = firstTokenOnLine ? 1 : state.quote + 1; if (modeCfg.highlightFormatting) state.formatting = "quote"; stream.eatSpace(); return getType(state); } else if (!isHr && !state.setext && firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(listRE))) { var listType = match[1] ? "ol" : "ul"; state.indentation = lineIndentation + stream.current().length; state.list = true; state.quote = 0; state.listStack.push(state.indentation); state.em = false; state.strong = false; state.code = false; state.strikethrough = false; if (modeCfg.taskLists && stream.match(taskListRE, false)) state.taskList = true; state.f = state.inline; if (modeCfg.highlightFormatting) state.formatting = ["list", "list-" + listType]; return getType(state); } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(fencedCodeRE, true))) { state.quote = 0; state.fencedEndRE = new RegExp(match[1] + "+ *$"); state.localMode = modeCfg.fencedCodeBlockHighlighting && getMode(match[2] || modeCfg.fencedCodeBlockDefaultMode); if (state.localMode) state.localState = CodeMirror$1.startState(state.localMode); state.f = state.block = local; if (modeCfg.highlightFormatting) state.formatting = "code-block"; state.code = -1; return getType(state); } else if (state.setext || (!allowsInlineContinuation || !prevLineIsList) && !state.quote && state.list === false && !state.code && !isHr && !linkDefRE.test(stream.string) && (match = stream.lookAhead(1)) && (match = match.match(setextHeaderRE))) { if (!state.setext) { state.header = match[0].charAt(0) == "=" ? 1 : 2; state.setext = state.header; } else { state.header = state.setext; state.setext = 0; stream.skipToEnd(); if (modeCfg.highlightFormatting) state.formatting = "header"; } state.thisLine.header = true; state.f = state.inline; return getType(state); } else if (isHr) { stream.skipToEnd(); state.hr = true; state.thisLine.hr = true; return tokenTypes.hr; } else if (stream.peek() === "[") return switchInline(stream, state, footnoteLink); return switchInline(stream, state, state.inline); } function htmlBlock(stream, state) { var style = htmlMode.token(stream, state.htmlState); if (!htmlModeMissing) { var inner = CodeMirror$1.innerMode(htmlMode, state.htmlState); if (inner.mode.name == "xml" && inner.state.tagStart === null && !inner.state.context && inner.state.tokenize.isInText || state.md_inside && stream.current().indexOf(">") > -1) { state.f = inlineNormal; state.block = blockNormal; state.htmlState = null; } } return style; } function local(stream, state) { var currListInd = state.listStack[state.listStack.length - 1] || 0; var hasExitedList = state.indentation < currListInd; var maxFencedEndInd = currListInd + 3; if (state.fencedEndRE && state.indentation <= maxFencedEndInd && (hasExitedList || stream.match(state.fencedEndRE))) { if (modeCfg.highlightFormatting) state.formatting = "code-block"; var returnType; if (!hasExitedList) returnType = getType(state); state.localMode = state.localState = null; state.block = blockNormal; state.f = inlineNormal; state.fencedEndRE = null; state.code = 0; state.thisLine.fencedCodeEnd = true; if (hasExitedList) return switchBlock(stream, state, state.block); return returnType; } else if (state.localMode) return state.localMode.token(stream, state.localState); else { stream.skipToEnd(); return tokenTypes.code; } } function getType(state) { var styles = []; if (state.formatting) { styles.push(tokenTypes.formatting); if (typeof state.formatting === "string") state.formatting = [state.formatting]; for (var i = 0; i < state.formatting.length; i++) { styles.push(tokenTypes.formatting + "-" + state.formatting[i]); if (state.formatting[i] === "header") styles.push(tokenTypes.formatting + "-" + state.formatting[i] + "-" + state.header); if (state.formatting[i] === "quote") if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) styles.push(tokenTypes.formatting + "-" + state.formatting[i] + "-" + state.quote); else styles.push("error"); } } if (state.taskOpen) { styles.push("meta"); return styles.length ? styles.join(" ") : null; } if (state.taskClosed) { styles.push("property"); return styles.length ? styles.join(" ") : null; } if (state.linkHref) styles.push(tokenTypes.linkHref, "url"); else { if (state.strong) styles.push(tokenTypes.strong); if (state.em) styles.push(tokenTypes.em); if (state.strikethrough) styles.push(tokenTypes.strikethrough); if (state.emoji) styles.push(tokenTypes.emoji); if (state.linkText) styles.push(tokenTypes.linkText); if (state.code) styles.push(tokenTypes.code); if (state.image) styles.push(tokenTypes.image); if (state.imageAltText) styles.push(tokenTypes.imageAltText, "link"); if (state.imageMarker) styles.push(tokenTypes.imageMarker); } if (state.header) styles.push(tokenTypes.header, tokenTypes.header + "-" + state.header); if (state.quote) { styles.push(tokenTypes.quote); if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) styles.push(tokenTypes.quote + "-" + state.quote); else styles.push(tokenTypes.quote + "-" + modeCfg.maxBlockquoteDepth); } if (state.list !== false) { var listMod = (state.listStack.length - 1) % 3; if (!listMod) styles.push(tokenTypes.list1); else if (listMod === 1) styles.push(tokenTypes.list2); else styles.push(tokenTypes.list3); } if (state.trailingSpaceNewLine) styles.push("trailing-space-new-line"); else if (state.trailingSpace) styles.push("trailing-space-" + (state.trailingSpace % 2 ? "a" : "b")); return styles.length ? styles.join(" ") : null; } function handleText(stream, state) { if (stream.match(textRE, true)) return getType(state); return void 0; } function inlineNormal(stream, state) { var style = state.text(stream, state); if (typeof style !== "undefined") return style; if (state.list) { state.list = null; return getType(state); } if (state.taskList) { var taskOpen = stream.match(taskListRE, true)[1] === " "; if (taskOpen) state.taskOpen = true; else state.taskClosed = true; if (modeCfg.highlightFormatting) state.formatting = "task"; state.taskList = false; return getType(state); } state.taskOpen = false; state.taskClosed = false; if (state.header && stream.match(/^#+$/, true)) { if (modeCfg.highlightFormatting) state.formatting = "header"; return getType(state); } var ch = stream.next(); if (state.linkTitle) { state.linkTitle = false; var matchCh = ch; if (ch === "(") matchCh = ")"; matchCh = (matchCh + "").replace(/([.?*+^\[\]\\(){}|-])/g, "\\$1"); var regex = "^\\s*(?:[^" + matchCh + "\\\\]+|\\\\\\\\|\\\\.)" + matchCh; if (stream.match(new RegExp(regex), true)) return tokenTypes.linkHref; } if (ch === "`") { var previousFormatting = state.formatting; if (modeCfg.highlightFormatting) state.formatting = "code"; stream.eatWhile("`"); var count = stream.current().length; if (state.code == 0 && (!state.quote || count == 1)) { state.code = count; return getType(state); } else if (count == state.code) { var t = getType(state); state.code = 0; return t; } else { state.formatting = previousFormatting; return getType(state); } } else if (state.code) return getType(state); if (ch === "\\") { stream.next(); if (modeCfg.highlightFormatting) { var type = getType(state); var formattingEscape = tokenTypes.formatting + "-escape"; return type ? type + " " + formattingEscape : formattingEscape; } } if (ch === "!" && stream.match(/\[[^\]]*\] ?(?:\(|\[)/, false)) { state.imageMarker = true; state.image = true; if (modeCfg.highlightFormatting) state.formatting = "image"; return getType(state); } if (ch === "[" && state.imageMarker && stream.match(/[^\]]*\](\(.*?\)| ?\[.*?\])/, false)) { state.imageMarker = false; state.imageAltText = true; if (modeCfg.highlightFormatting) state.formatting = "image"; return getType(state); } if (ch === "]" && state.imageAltText) { if (modeCfg.highlightFormatting) state.formatting = "image"; var type = getType(state); state.imageAltText = false; state.image = false; state.inline = state.f = linkHref; return type; } if (ch === "[" && !state.image) { if (state.linkText && stream.match(/^.*?\]/)) return getType(state); state.linkText = true; if (modeCfg.highlightFormatting) state.formatting = "link"; return getType(state); } if (ch === "]" && state.linkText) { if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); state.linkText = false; state.inline = state.f = stream.match(/\(.*?\)| ?\[.*?\]/, false) ? linkHref : inlineNormal; return type; } if (ch === "<" && stream.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/, false)) { state.f = state.inline = linkInline; if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); if (type) type += " "; else type = ""; return type + tokenTypes.linkInline; } if (ch === "<" && stream.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/, false)) { state.f = state.inline = linkInline; if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); if (type) type += " "; else type = ""; return type + tokenTypes.linkEmail; } if (modeCfg.xml && ch === "<" && stream.match(/^(!--|\?|!\[CDATA\[|[a-z][a-z0-9-]*(?:\s+[a-z_:.\-]+(?:\s*=\s*[^>]+)?)*\s*(?:>|$))/i, false)) { var end = stream.string.indexOf(">", stream.pos); if (end != -1) { var atts = stream.string.substring(stream.start, end); if (/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(atts)) state.md_inside = true; } stream.backUp(1); state.htmlState = CodeMirror$1.startState(htmlMode); return switchBlock(stream, state, htmlBlock); } if (modeCfg.xml && ch === "<" && stream.match(/^\/\w*?>/)) { state.md_inside = false; return "tag"; } else if (ch === "*" || ch === "_") { var len = 1, before = stream.pos == 1 ? " " : stream.string.charAt(stream.pos - 2); while (len < 3 && stream.eat(ch)) len++; var after = stream.peek() || " "; var leftFlanking = !/\s/.test(after) && (!punctuation.test(after) || /\s/.test(before) || punctuation.test(before)); var rightFlanking = !/\s/.test(before) && (!punctuation.test(before) || /\s/.test(after) || punctuation.test(after)); var setEm = null, setStrong = null; if (len % 2) { if (!state.em && leftFlanking && (ch === "*" || !rightFlanking || punctuation.test(before))) setEm = true; else if (state.em == ch && rightFlanking && (ch === "*" || !leftFlanking || punctuation.test(after))) setEm = false; } if (len > 1) { if (!state.strong && leftFlanking && (ch === "*" || !rightFlanking || punctuation.test(before))) setStrong = true; else if (state.strong == ch && rightFlanking && (ch === "*" || !leftFlanking || punctuation.test(after))) setStrong = false; } if (setStrong != null || setEm != null) { if (modeCfg.highlightFormatting) state.formatting = setEm == null ? "strong" : setStrong == null ? "em" : "strong em"; if (setEm === true) state.em = ch; if (setStrong === true) state.strong = ch; var t = getType(state); if (setEm === false) state.em = false; if (setStrong === false) state.strong = false; return t; } } else if (ch === " ") { if (stream.eat("*") || stream.eat("_")) if (stream.peek() === " ") return getType(state); else stream.backUp(1); } if (modeCfg.strikethrough) { if (ch === "~" && stream.eatWhile(ch)) { if (state.strikethrough) { if (modeCfg.highlightFormatting) state.formatting = "strikethrough"; var t = getType(state); state.strikethrough = false; return t; } else if (stream.match(/^[^\s]/, false)) { state.strikethrough = true; if (modeCfg.highlightFormatting) state.formatting = "strikethrough"; return getType(state); } } else if (ch === " ") { if (stream.match("~~", true)) if (stream.peek() === " ") return getType(state); else stream.backUp(2); } } if (modeCfg.emoji && ch === ":" && stream.match(/^(?:[a-z_\d+][a-z_\d+-]*|\-[a-z_\d+][a-z_\d+-]*):/)) { state.emoji = true; if (modeCfg.highlightFormatting) state.formatting = "emoji"; var retType = getType(state); state.emoji = false; return retType; } if (ch === " ") { if (stream.match(/^ +$/, false)) state.trailingSpace++; else if (state.trailingSpace) state.trailingSpaceNewLine = true; } return getType(state); } function linkInline(stream, state) { var ch = stream.next(); if (ch === ">") { state.f = state.inline = inlineNormal; if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); if (type) type += " "; else type = ""; return type + tokenTypes.linkInline; } stream.match(/^[^>]+/, true); return tokenTypes.linkInline; } function linkHref(stream, state) { if (stream.eatSpace()) return null; var ch = stream.next(); if (ch === "(" || ch === "[") { state.f = state.inline = getLinkHrefInside(ch === "(" ? ")" : "]"); if (modeCfg.highlightFormatting) state.formatting = "link-string"; state.linkHref = true; return getType(state); } return "error"; } var linkRE = { ")": /^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/, "]": /^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\]]|\\.)*\])*?(?=\])/ }; function getLinkHrefInside(endChar) { return function(stream, state) { var ch = stream.next(); if (ch === endChar) { state.f = state.inline = inlineNormal; if (modeCfg.highlightFormatting) state.formatting = "link-string"; var returnState = getType(state); state.linkHref = false; return returnState; } stream.match(linkRE[endChar]); state.linkHref = true; return getType(state); }; } function footnoteLink(stream, state) { if (stream.match(/^([^\]\\]|\\.)*\]:/, false)) { state.f = footnoteLinkInside; stream.next(); if (modeCfg.highlightFormatting) state.formatting = "link"; state.linkText = true; return getType(state); } return switchInline(stream, state, inlineNormal); } function footnoteLinkInside(stream, state) { if (stream.match("]:", true)) { state.f = state.inline = footnoteUrl; if (modeCfg.highlightFormatting) state.formatting = "link"; var returnType = getType(state); state.linkText = false; return returnType; } stream.match(/^([^\]\\]|\\.)+/, true); return tokenTypes.linkText; } function footnoteUrl(stream, state) { if (stream.eatSpace()) return null; stream.match(/^[^\s]+/, true); if (stream.peek() === void 0) state.linkTitle = true; else stream.match(/^(?:\s+(?:"(?:[^"\\]|\\.)+"|'(?:[^'\\]|\\.)+'|\((?:[^)\\]|\\.)+\)))?/, true); state.f = state.inline = inlineNormal; return tokenTypes.linkHref + " url"; } var mode = { startState: function() { return { f: blockNormal, prevLine: { stream: null }, thisLine: { stream: null }, block: blockNormal, htmlState: null, indentation: 0, inline: inlineNormal, text: handleText, formatting: false, linkText: false, linkHref: false, linkTitle: false, code: 0, em: false, strong: false, header: 0, setext: 0, hr: false, taskList: false, list: false, listStack: [], quote: 0, trailingSpace: 0, trailingSpaceNewLine: false, strikethrough: false, emoji: false, fencedEndRE: null }; }, copyState: function(s) { return { f: s.f, prevLine: s.prevLine, thisLine: s.thisLine, block: s.block, htmlState: s.htmlState && CodeMirror$1.copyState(htmlMode, s.htmlState), indentation: s.indentation, localMode: s.localMode, localState: s.localMode ? CodeMirror$1.copyState(s.localMode, s.localState) : null, inline: s.inline, text: s.text, formatting: false, linkText: s.linkText, linkTitle: s.linkTitle, linkHref: s.linkHref, code: s.code, em: s.em, strong: s.strong, strikethrough: s.strikethrough, emoji: s.emoji, header: s.header, setext: s.setext, hr: s.hr, taskList: s.taskList, list: s.list, listStack: s.listStack.slice(0), quote: s.quote, indentedCode: s.indentedCode, trailingSpace: s.trailingSpace, trailingSpaceNewLine: s.trailingSpaceNewLine, md_inside: s.md_inside, fencedEndRE: s.fencedEndRE }; }, token: function(stream, state) { state.formatting = false; if (stream != state.thisLine.stream) { state.header = 0; state.hr = false; if (stream.match(/^\s*$/, true)) { blankLine(state); return null; } state.prevLine = state.thisLine; state.thisLine = { stream }; state.taskList = false; state.trailingSpace = 0; state.trailingSpaceNewLine = false; if (!state.localState) { state.f = state.block; if (state.f != htmlBlock) { var indentation = stream.match(/^\s*/, true)[0].replace(/\t/g, expandedTab).length; state.indentation = indentation; state.indentationDiff = null; if (indentation > 0) return null; } } } return state.f(stream, state); }, innerMode: function(state) { if (state.block == htmlBlock) return { state: state.htmlState, mode: htmlMode }; if (state.localState) return { state: state.localState, mode: state.localMode }; return { state, mode }; }, indent: function(state, textAfter, line) { if (state.block == htmlBlock && htmlMode.indent) return htmlMode.indent(state.htmlState, textAfter, line); if (state.localState && state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line); return CodeMirror$1.Pass; }, blankLine, getType, blockCommentStart: "", closeBrackets: "()[]{}''\"\"``", fold: "markdown" }; return mode; }, "xml"); CodeMirror$1.defineMIME("text/markdown", "markdown"); CodeMirror$1.defineMIME("text/x-markdown", "markdown"); }); }); var require_pug = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror(), require_javascript(), require_css(), require_htmlmixed()); else if (typeof define == "function" && define.amd) define([ "../../lib/codemirror", "../javascript/javascript", "../css/css", "../htmlmixed/htmlmixed" ], mod); else mod(CodeMirror); })(function(CodeMirror$1) { "use strict"; CodeMirror$1.defineMode("pug", function(config) { var KEYWORD = "keyword"; var DOCTYPE = "meta"; var ID = "builtin"; var CLASS = "qualifier"; var ATTRS_NEST = { "{": "}", "(": ")", "[": "]" }; var jsMode = CodeMirror$1.getMode(config, "javascript"); function State() { this.javaScriptLine = false; this.javaScriptLineExcludesColon = false; this.javaScriptArguments = false; this.javaScriptArgumentsDepth = 0; this.isInterpolating = false; this.interpolationNesting = 0; this.jsState = CodeMirror$1.startState(jsMode); this.restOfLine = ""; this.isIncludeFiltered = false; this.isEach = false; this.lastTag = ""; this.scriptType = ""; this.isAttrs = false; this.attrsNest = []; this.inAttributeName = true; this.attributeIsType = false; this.attrValue = ""; this.indentOf = Infinity; this.indentToken = ""; this.innerMode = null; this.innerState = null; this.innerModeForLine = false; } /** * Safely copy a state * * @return {State} */ State.prototype.copy = function() { var res = new State(); res.javaScriptLine = this.javaScriptLine; res.javaScriptLineExcludesColon = this.javaScriptLineExcludesColon; res.javaScriptArguments = this.javaScriptArguments; res.javaScriptArgumentsDepth = this.javaScriptArgumentsDepth; res.isInterpolating = this.isInterpolating; res.interpolationNesting = this.interpolationNesting; res.jsState = CodeMirror$1.copyState(jsMode, this.jsState); res.innerMode = this.innerMode; if (this.innerMode && this.innerState) res.innerState = CodeMirror$1.copyState(this.innerMode, this.innerState); res.restOfLine = this.restOfLine; res.isIncludeFiltered = this.isIncludeFiltered; res.isEach = this.isEach; res.lastTag = this.lastTag; res.scriptType = this.scriptType; res.isAttrs = this.isAttrs; res.attrsNest = this.attrsNest.slice(); res.inAttributeName = this.inAttributeName; res.attributeIsType = this.attributeIsType; res.attrValue = this.attrValue; res.indentOf = this.indentOf; res.indentToken = this.indentToken; res.innerModeForLine = this.innerModeForLine; return res; }; function javaScript(stream, state) { if (stream.sol()) { state.javaScriptLine = false; state.javaScriptLineExcludesColon = false; } if (state.javaScriptLine) { if (state.javaScriptLineExcludesColon && stream.peek() === ":") { state.javaScriptLine = false; state.javaScriptLineExcludesColon = false; return; } var tok = jsMode.token(stream, state.jsState); if (stream.eol()) state.javaScriptLine = false; return tok || true; } } function javaScriptArguments(stream, state) { if (state.javaScriptArguments) { if (state.javaScriptArgumentsDepth === 0 && stream.peek() !== "(") { state.javaScriptArguments = false; return; } if (stream.peek() === "(") state.javaScriptArgumentsDepth++; else if (stream.peek() === ")") state.javaScriptArgumentsDepth--; if (state.javaScriptArgumentsDepth === 0) { state.javaScriptArguments = false; return; } var tok = jsMode.token(stream, state.jsState); return tok || true; } } function yieldStatement(stream) { if (stream.match(/^yield\b/)) return "keyword"; } function doctype(stream) { if (stream.match(/^(?:doctype) *([^\n]+)?/)) return DOCTYPE; } function interpolation(stream, state) { if (stream.match("#{")) { state.isInterpolating = true; state.interpolationNesting = 0; return "punctuation"; } } function interpolationContinued(stream, state) { if (state.isInterpolating) { if (stream.peek() === "}") { state.interpolationNesting--; if (state.interpolationNesting < 0) { stream.next(); state.isInterpolating = false; return "punctuation"; } } else if (stream.peek() === "{") state.interpolationNesting++; return jsMode.token(stream, state.jsState) || true; } } function caseStatement(stream, state) { if (stream.match(/^case\b/)) { state.javaScriptLine = true; return KEYWORD; } } function when(stream, state) { if (stream.match(/^when\b/)) { state.javaScriptLine = true; state.javaScriptLineExcludesColon = true; return KEYWORD; } } function defaultStatement(stream) { if (stream.match(/^default\b/)) return KEYWORD; } function extendsStatement(stream, state) { if (stream.match(/^extends?\b/)) { state.restOfLine = "string"; return KEYWORD; } } function append(stream, state) { if (stream.match(/^append\b/)) { state.restOfLine = "variable"; return KEYWORD; } } function prepend(stream, state) { if (stream.match(/^prepend\b/)) { state.restOfLine = "variable"; return KEYWORD; } } function block(stream, state) { if (stream.match(/^block\b *(?:(prepend|append)\b)?/)) { state.restOfLine = "variable"; return KEYWORD; } } function include(stream, state) { if (stream.match(/^include\b/)) { state.restOfLine = "string"; return KEYWORD; } } function includeFiltered(stream, state) { if (stream.match(/^include:([a-zA-Z0-9\-]+)/, false) && stream.match("include")) { state.isIncludeFiltered = true; return KEYWORD; } } function includeFilteredContinued(stream, state) { if (state.isIncludeFiltered) { var tok = filter(stream, state); state.isIncludeFiltered = false; state.restOfLine = "string"; return tok; } } function mixin(stream, state) { if (stream.match(/^mixin\b/)) { state.javaScriptLine = true; return KEYWORD; } } function call(stream, state) { if (stream.match(/^\+([-\w]+)/)) { if (!stream.match(/^\( *[-\w]+ *=/, false)) { state.javaScriptArguments = true; state.javaScriptArgumentsDepth = 0; } return "variable"; } if (stream.match("+#{", false)) { stream.next(); state.mixinCallAfter = true; return interpolation(stream, state); } } function callArguments(stream, state) { if (state.mixinCallAfter) { state.mixinCallAfter = false; if (!stream.match(/^\( *[-\w]+ *=/, false)) { state.javaScriptArguments = true; state.javaScriptArgumentsDepth = 0; } return true; } } function conditional(stream, state) { if (stream.match(/^(if|unless|else if|else)\b/)) { state.javaScriptLine = true; return KEYWORD; } } function each(stream, state) { if (stream.match(/^(- *)?(each|for)\b/)) { state.isEach = true; return KEYWORD; } } function eachContinued(stream, state) { if (state.isEach) { if (stream.match(/^ in\b/)) { state.javaScriptLine = true; state.isEach = false; return KEYWORD; } else if (stream.sol() || stream.eol()) state.isEach = false; else if (stream.next()) { while (!stream.match(/^ in\b/, false) && stream.next()); return "variable"; } } } function whileStatement(stream, state) { if (stream.match(/^while\b/)) { state.javaScriptLine = true; return KEYWORD; } } function tag(stream, state) { var captures; if (captures = stream.match(/^(\w(?:[-:\w]*\w)?)\/?/)) { state.lastTag = captures[1].toLowerCase(); if (state.lastTag === "script") state.scriptType = "application/javascript"; return "tag"; } } function filter(stream, state) { if (stream.match(/^:([\w\-]+)/)) { var innerMode$1; if (config && config.innerModes) innerMode$1 = config.innerModes(stream.current().substring(1)); if (!innerMode$1) innerMode$1 = stream.current().substring(1); if (typeof innerMode$1 === "string") innerMode$1 = CodeMirror$1.getMode(config, innerMode$1); setInnerMode(stream, state, innerMode$1); return "atom"; } } function code(stream, state) { if (stream.match(/^(!?=|-)/)) { state.javaScriptLine = true; return "punctuation"; } } function id(stream) { if (stream.match(/^#([\w-]+)/)) return ID; } function className(stream) { if (stream.match(/^\.([\w-]+)/)) return CLASS; } function attrs(stream, state) { if (stream.peek() == "(") { stream.next(); state.isAttrs = true; state.attrsNest = []; state.inAttributeName = true; state.attrValue = ""; state.attributeIsType = false; return "punctuation"; } } function attrsContinued(stream, state) { if (state.isAttrs) { if (ATTRS_NEST[stream.peek()]) state.attrsNest.push(ATTRS_NEST[stream.peek()]); if (state.attrsNest[state.attrsNest.length - 1] === stream.peek()) state.attrsNest.pop(); else if (stream.eat(")")) { state.isAttrs = false; return "punctuation"; } if (state.inAttributeName && stream.match(/^[^=,\)!]+/)) { if (stream.peek() === "=" || stream.peek() === "!") { state.inAttributeName = false; state.jsState = CodeMirror$1.startState(jsMode); if (state.lastTag === "script" && stream.current().trim().toLowerCase() === "type") state.attributeIsType = true; else state.attributeIsType = false; } return "attribute"; } var tok = jsMode.token(stream, state.jsState); if (state.attributeIsType && tok === "string") state.scriptType = stream.current().toString(); if (state.attrsNest.length === 0 && (tok === "string" || tok === "variable" || tok === "keyword")) try { Function("", "var x " + state.attrValue.replace(/,\s*$/, "").replace(/^!/, "")); state.inAttributeName = true; state.attrValue = ""; stream.backUp(stream.current().length); return attrsContinued(stream, state); } catch (ex) {} state.attrValue += stream.current(); return tok || true; } } function attributesBlock(stream, state) { if (stream.match(/^&attributes\b/)) { state.javaScriptArguments = true; state.javaScriptArgumentsDepth = 0; return "keyword"; } } function indent(stream) { if (stream.sol() && stream.eatSpace()) return "indent"; } function comment(stream, state) { if (stream.match(/^ *\/\/(-)?([^\n]*)/)) { state.indentOf = stream.indentation(); state.indentToken = "comment"; return "comment"; } } function colon(stream) { if (stream.match(/^: */)) return "colon"; } function text(stream, state) { if (stream.match(/^(?:\| ?| )([^\n]+)/)) return "string"; if (stream.match(/^(<[^\n]*)/, false)) { setInnerMode(stream, state, "htmlmixed"); state.innerModeForLine = true; return innerMode(stream, state, true); } } function dot(stream, state) { if (stream.eat(".")) { var innerMode$1 = null; if (state.lastTag === "script" && state.scriptType.toLowerCase().indexOf("javascript") != -1) innerMode$1 = state.scriptType.toLowerCase().replace(/"|'/g, ""); else if (state.lastTag === "style") innerMode$1 = "css"; setInnerMode(stream, state, innerMode$1); return "dot"; } } function fail(stream) { stream.next(); return null; } function setInnerMode(stream, state, mode) { mode = CodeMirror$1.mimeModes[mode] || mode; mode = config.innerModes ? config.innerModes(mode) || mode : mode; mode = CodeMirror$1.mimeModes[mode] || mode; mode = CodeMirror$1.getMode(config, mode); state.indentOf = stream.indentation(); if (mode && mode.name !== "null") state.innerMode = mode; else state.indentToken = "string"; } function innerMode(stream, state, force) { if (stream.indentation() > state.indentOf || state.innerModeForLine && !stream.sol() || force) if (state.innerMode) { if (!state.innerState) state.innerState = state.innerMode.startState ? CodeMirror$1.startState(state.innerMode, stream.indentation()) : {}; return stream.hideFirstChars(state.indentOf + 2, function() { return state.innerMode.token(stream, state.innerState) || true; }); } else { stream.skipToEnd(); return state.indentToken; } else if (stream.sol()) { state.indentOf = Infinity; state.indentToken = null; state.innerMode = null; state.innerState = null; } } function restOfLine(stream, state) { if (stream.sol()) state.restOfLine = ""; if (state.restOfLine) { stream.skipToEnd(); var tok = state.restOfLine; state.restOfLine = ""; return tok; } } function startState() { return new State(); } function copyState(state) { return state.copy(); } /** * Get the next token in the stream * * @param {Stream} stream * @param {State} state */ function nextToken(stream, state) { var tok = innerMode(stream, state) || restOfLine(stream, state) || interpolationContinued(stream, state) || includeFilteredContinued(stream, state) || eachContinued(stream, state) || attrsContinued(stream, state) || javaScript(stream, state) || javaScriptArguments(stream, state) || callArguments(stream, state) || yieldStatement(stream) || doctype(stream) || interpolation(stream, state) || caseStatement(stream, state) || when(stream, state) || defaultStatement(stream) || extendsStatement(stream, state) || append(stream, state) || prepend(stream, state) || block(stream, state) || include(stream, state) || includeFiltered(stream, state) || mixin(stream, state) || call(stream, state) || conditional(stream, state) || each(stream, state) || whileStatement(stream, state) || tag(stream, state) || filter(stream, state) || code(stream, state) || id(stream) || className(stream) || attrs(stream, state) || attributesBlock(stream, state) || indent(stream) || text(stream, state) || comment(stream, state) || colon(stream) || dot(stream, state) || fail(stream); return tok === true ? null : tok; } return { startState, copyState, token: nextToken }; }, "javascript", "css", "htmlmixed"); CodeMirror$1.defineMIME("text/x-pug", "pug"); CodeMirror$1.defineMIME("text/x-jade", "pug"); }); }); var require_sass = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror(), require_css()); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror", "../css/css"], mod); else mod(CodeMirror); })(function(CodeMirror$1) { "use strict"; CodeMirror$1.defineMode("sass", function(config) { var cssMode = CodeMirror$1.mimeModes["text/css"]; var propertyKeywords = cssMode.propertyKeywords || {}, colorKeywords = cssMode.colorKeywords || {}, valueKeywords = cssMode.valueKeywords || {}, fontProperties = cssMode.fontProperties || {}; function tokenRegexp(words) { return new RegExp("^" + words.join("|")); } var keywords = [ "true", "false", "null", "auto" ]; var keywordsRegexp = new RegExp("^" + keywords.join("|")); var operators = [ "\\(", "\\)", "=", ">", "<", "==", ">=", "<=", "\\+", "-", "\\!=", "/", "\\*", "%", "and", "or", "not", ";", "\\{", "\\}", ":" ]; var opRegexp = tokenRegexp(operators); var pseudoElementsRegexp = /^::?[a-zA-Z_][\w\-]*/; var word; function isEndLine(stream) { return !stream.peek() || stream.match(/\s+$/, false); } function urlTokens(stream, state) { var ch = stream.peek(); if (ch === ")") { stream.next(); state.tokenizer = tokenBase; return "operator"; } else if (ch === "(") { stream.next(); stream.eatSpace(); return "operator"; } else if (ch === "'" || ch === "\"") { state.tokenizer = buildStringTokenizer(stream.next()); return "string"; } else { state.tokenizer = buildStringTokenizer(")", false); return "string"; } } function comment(indentation, multiLine) { return function(stream, state) { if (stream.sol() && stream.indentation() <= indentation) { state.tokenizer = tokenBase; return tokenBase(stream, state); } if (multiLine && stream.skipTo("*/")) { stream.next(); stream.next(); state.tokenizer = tokenBase; } else stream.skipToEnd(); return "comment"; }; } function buildStringTokenizer(quote, greedy) { if (greedy == null) greedy = true; function stringTokenizer(stream, state) { var nextChar = stream.next(); var peekChar = stream.peek(); var previousChar = stream.string.charAt(stream.pos - 2); var endingString = nextChar !== "\\" && peekChar === quote || nextChar === quote && previousChar !== "\\"; if (endingString) { if (nextChar !== quote && greedy) stream.next(); if (isEndLine(stream)) state.cursorHalf = 0; state.tokenizer = tokenBase; return "string"; } else if (nextChar === "#" && peekChar === "{") { state.tokenizer = buildInterpolationTokenizer(stringTokenizer); stream.next(); return "operator"; } else return "string"; } return stringTokenizer; } function buildInterpolationTokenizer(currentTokenizer) { return function(stream, state) { if (stream.peek() === "}") { stream.next(); state.tokenizer = currentTokenizer; return "operator"; } else return tokenBase(stream, state); }; } function indent(state) { if (state.indentCount == 0) { state.indentCount++; var lastScopeOffset = state.scopes[0].offset; var currentOffset = lastScopeOffset + config.indentUnit; state.scopes.unshift({ offset: currentOffset }); } } function dedent(state) { if (state.scopes.length == 1) return; state.scopes.shift(); } function tokenBase(stream, state) { var ch = stream.peek(); if (stream.match("/*")) { state.tokenizer = comment(stream.indentation(), true); return state.tokenizer(stream, state); } if (stream.match("//")) { state.tokenizer = comment(stream.indentation(), false); return state.tokenizer(stream, state); } if (stream.match("#{")) { state.tokenizer = buildInterpolationTokenizer(tokenBase); return "operator"; } if (ch === "\"" || ch === "'") { stream.next(); state.tokenizer = buildStringTokenizer(ch); return "string"; } if (!state.cursorHalf) { if (ch === "-") { if (stream.match(/^-\w+-/)) return "meta"; } if (ch === ".") { stream.next(); if (stream.match(/^[\w-]+/)) { indent(state); return "qualifier"; } else if (stream.peek() === "#") { indent(state); return "tag"; } } if (ch === "#") { stream.next(); if (stream.match(/^[\w-]+/)) { indent(state); return "builtin"; } if (stream.peek() === "#") { indent(state); return "tag"; } } if (ch === "$") { stream.next(); stream.eatWhile(/[\w-]/); return "variable-2"; } if (stream.match(/^-?[0-9\.]+/)) return "number"; if (stream.match(/^(px|em|in)\b/)) return "unit"; if (stream.match(keywordsRegexp)) return "keyword"; if (stream.match(/^url/) && stream.peek() === "(") { state.tokenizer = urlTokens; return "atom"; } if (ch === "=") { if (stream.match(/^=[\w-]+/)) { indent(state); return "meta"; } } if (ch === "+") { if (stream.match(/^\+[\w-]+/)) return "variable-3"; } if (ch === "@") { if (stream.match("@extend")) { if (!stream.match(/\s*[\w]/)) dedent(state); } } if (stream.match(/^@(else if|if|media|else|for|each|while|mixin|function)/)) { indent(state); return "def"; } if (ch === "@") { stream.next(); stream.eatWhile(/[\w-]/); return "def"; } if (stream.eatWhile(/[\w-]/)) if (stream.match(/ *: *[\w-\+\$#!\("']/, false)) { word = stream.current().toLowerCase(); var prop = state.prevProp + "-" + word; if (propertyKeywords.hasOwnProperty(prop)) return "property"; else if (propertyKeywords.hasOwnProperty(word)) { state.prevProp = word; return "property"; } else if (fontProperties.hasOwnProperty(word)) return "property"; return "tag"; } else if (stream.match(/ *:/, false)) { indent(state); state.cursorHalf = 1; state.prevProp = stream.current().toLowerCase(); return "property"; } else if (stream.match(/ *,/, false)) return "tag"; else { indent(state); return "tag"; } if (ch === ":") { if (stream.match(pseudoElementsRegexp)) return "variable-3"; stream.next(); state.cursorHalf = 1; return "operator"; } } else { if (ch === "#") { stream.next(); if (stream.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/)) { if (isEndLine(stream)) state.cursorHalf = 0; return "number"; } } if (stream.match(/^-?[0-9\.]+/)) { if (isEndLine(stream)) state.cursorHalf = 0; return "number"; } if (stream.match(/^(px|em|in)\b/)) { if (isEndLine(stream)) state.cursorHalf = 0; return "unit"; } if (stream.match(keywordsRegexp)) { if (isEndLine(stream)) state.cursorHalf = 0; return "keyword"; } if (stream.match(/^url/) && stream.peek() === "(") { state.tokenizer = urlTokens; if (isEndLine(stream)) state.cursorHalf = 0; return "atom"; } if (ch === "$") { stream.next(); stream.eatWhile(/[\w-]/); if (isEndLine(stream)) state.cursorHalf = 0; return "variable-2"; } if (ch === "!") { stream.next(); state.cursorHalf = 0; return stream.match(/^[\w]+/) ? "keyword" : "operator"; } if (stream.match(opRegexp)) { if (isEndLine(stream)) state.cursorHalf = 0; return "operator"; } if (stream.eatWhile(/[\w-]/)) { if (isEndLine(stream)) state.cursorHalf = 0; word = stream.current().toLowerCase(); if (valueKeywords.hasOwnProperty(word)) return "atom"; else if (colorKeywords.hasOwnProperty(word)) return "keyword"; else if (propertyKeywords.hasOwnProperty(word)) { state.prevProp = stream.current().toLowerCase(); return "property"; } else return "tag"; } if (isEndLine(stream)) { state.cursorHalf = 0; return null; } } if (stream.match(opRegexp)) return "operator"; stream.next(); return null; } function tokenLexer(stream, state) { if (stream.sol()) state.indentCount = 0; var style = state.tokenizer(stream, state); var current = stream.current(); if (current === "@return" || current === "}") dedent(state); if (style !== null) { var startOfToken = stream.pos - current.length; var withCurrentIndent = startOfToken + config.indentUnit * state.indentCount; var newScopes = []; for (var i = 0; i < state.scopes.length; i++) { var scope = state.scopes[i]; if (scope.offset <= withCurrentIndent) newScopes.push(scope); } state.scopes = newScopes; } return style; } return { startState: function() { return { tokenizer: tokenBase, scopes: [{ offset: 0, type: "sass" }], indentCount: 0, cursorHalf: 0, definedVars: [], definedMixins: [] }; }, token: function(stream, state) { var style = tokenLexer(stream, state); state.lastToken = { style, content: stream.current() }; return style; }, indent: function(state) { return state.scopes[0].offset; }, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//", fold: "indent" }; }, "css"); CodeMirror$1.defineMIME("text/x-sass", "sass"); }); }); var require_overlay = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror()); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod); else mod(CodeMirror); })(function(CodeMirror$1) { "use strict"; CodeMirror$1.overlayMode = function(base, overlay, combine) { return { startState: function() { return { base: CodeMirror$1.startState(base), overlay: CodeMirror$1.startState(overlay), basePos: 0, baseCur: null, overlayPos: 0, overlayCur: null, streamSeen: null }; }, copyState: function(state) { return { base: CodeMirror$1.copyState(base, state.base), overlay: CodeMirror$1.copyState(overlay, state.overlay), basePos: state.basePos, baseCur: null, overlayPos: state.overlayPos, overlayCur: null }; }, token: function(stream, state) { if (stream != state.streamSeen || Math.min(state.basePos, state.overlayPos) < stream.start) { state.streamSeen = stream; state.basePos = state.overlayPos = stream.start; } if (stream.start == state.basePos) { state.baseCur = base.token(stream, state.base); state.basePos = stream.pos; } if (stream.start == state.overlayPos) { stream.pos = stream.start; state.overlayCur = overlay.token(stream, state.overlay); state.overlayPos = stream.pos; } stream.pos = Math.min(state.basePos, state.overlayPos); if (state.overlayCur == null) return state.baseCur; else if (state.baseCur != null && state.overlay.combineTokens || combine && state.overlay.combineTokens == null) return state.baseCur + " " + state.overlayCur; else return state.overlayCur; }, indent: base.indent && function(state, textAfter, line) { return base.indent(state.base, textAfter, line); }, electricChars: base.electricChars, innerMode: function(state) { return { state: state.base, mode: base }; }, blankLine: function(state) { var baseToken, overlayToken; if (base.blankLine) baseToken = base.blankLine(state.base); if (overlay.blankLine) overlayToken = overlay.blankLine(state.overlay); return overlayToken == null ? baseToken : combine && baseToken != null ? baseToken + " " + overlayToken : overlayToken; } }; }; }); }); var require_coffeescript = __commonJSMin((exports, module) => { /** * Link to the project's GitHub page: * https://github.com/pickhardt/coffeescript-codemirror-mode */ (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror()); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod); else mod(CodeMirror); })(function(CodeMirror$1) { "use strict"; CodeMirror$1.defineMode("coffeescript", function(conf, parserConf) { var ERRORCLASS = "error"; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } var operators = /^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\|=?|\^=?|\~|!|\?|(or|and|\|\||&&|\?)=)/; var delimiters = /^(?:[()\[\]{},:`=;]|\.\.?\.?)/; var identifiers = /^[_A-Za-z$][_A-Za-z$0-9]*/; var atProp = /^@[_A-Za-z$][_A-Za-z$0-9]*/; var wordOperators = wordRegexp([ "and", "or", "not", "is", "isnt", "in", "instanceof", "typeof" ]); var indentKeywords = [ "for", "while", "loop", "if", "unless", "else", "switch", "try", "catch", "finally", "class" ]; var commonKeywords = [ "break", "by", "continue", "debugger", "delete", "do", "in", "of", "new", "return", "then", "this", "@", "throw", "when", "until", "extends" ]; var keywords = wordRegexp(indentKeywords.concat(commonKeywords)); indentKeywords = wordRegexp(indentKeywords); var stringPrefixes = /^('{3}|\"{3}|['\"])/; var regexPrefixes = /^(\/{3}|\/)/; var commonConstants = [ "Infinity", "NaN", "undefined", "null", "true", "false", "on", "off", "yes", "no" ]; var constants = wordRegexp(commonConstants); function tokenBase(stream, state) { if (stream.sol()) { if (state.scope.align === null) state.scope.align = false; var scopeOffset = state.scope.offset; if (stream.eatSpace()) { var lineOffset = stream.indentation(); if (lineOffset > scopeOffset && state.scope.type == "coffee") return "indent"; else if (lineOffset < scopeOffset) return "dedent"; return null; } else if (scopeOffset > 0) dedent(stream, state); } if (stream.eatSpace()) return null; var ch = stream.peek(); if (stream.match("####")) { stream.skipToEnd(); return "comment"; } if (stream.match("###")) { state.tokenize = longComment; return state.tokenize(stream, state); } if (ch === "#") { stream.skipToEnd(); return "comment"; } if (stream.match(/^-?[0-9\.]/, false)) { var floatLiteral = false; if (stream.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)) floatLiteral = true; if (stream.match(/^-?\d+\.\d*/)) floatLiteral = true; if (stream.match(/^-?\.\d+/)) floatLiteral = true; if (floatLiteral) { if (stream.peek() == ".") stream.backUp(1); return "number"; } var intLiteral = false; if (stream.match(/^-?0x[0-9a-f]+/i)) intLiteral = true; if (stream.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)) intLiteral = true; if (stream.match(/^-?0(?![\dx])/i)) intLiteral = true; if (intLiteral) return "number"; } if (stream.match(stringPrefixes)) { state.tokenize = tokenFactory(stream.current(), false, "string"); return state.tokenize(stream, state); } if (stream.match(regexPrefixes)) if (stream.current() != "/" || stream.match(/^.*\//, false)) { state.tokenize = tokenFactory(stream.current(), true, "string-2"); return state.tokenize(stream, state); } else stream.backUp(1); if (stream.match(operators) || stream.match(wordOperators)) return "operator"; if (stream.match(delimiters)) return "punctuation"; if (stream.match(constants)) return "atom"; if (stream.match(atProp) || state.prop && stream.match(identifiers)) return "property"; if (stream.match(keywords)) return "keyword"; if (stream.match(identifiers)) return "variable"; stream.next(); return ERRORCLASS; } function tokenFactory(delimiter, singleline, outclass) { return function(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"\/\\]/); if (stream.eat("\\")) { stream.next(); if (singleline && stream.eol()) return outclass; } else if (stream.match(delimiter)) { state.tokenize = tokenBase; return outclass; } else stream.eat(/['"\/]/); } if (singleline) if (parserConf.singleLineStringErrors) outclass = ERRORCLASS; else state.tokenize = tokenBase; return outclass; }; } function longComment(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^#]/); if (stream.match("###")) { state.tokenize = tokenBase; break; } stream.eatWhile("#"); } return "comment"; } function indent(stream, state, type) { type = type || "coffee"; var offset = 0, align = false, alignOffset = null; for (var scope = state.scope; scope; scope = scope.prev) if (scope.type === "coffee" || scope.type == "}") { offset = scope.offset + conf.indentUnit; break; } if (type !== "coffee") { align = null; alignOffset = stream.column() + stream.current().length; } else if (state.scope.align) state.scope.align = false; state.scope = { offset, type, prev: state.scope, align, alignOffset }; } function dedent(stream, state) { if (!state.scope.prev) return; if (state.scope.type === "coffee") { var _indent = stream.indentation(); var matched = false; for (var scope = state.scope; scope; scope = scope.prev) if (_indent === scope.offset) { matched = true; break; } if (!matched) return true; while (state.scope.prev && state.scope.offset !== _indent) state.scope = state.scope.prev; return false; } else { state.scope = state.scope.prev; return false; } } function tokenLexer(stream, state) { var style = state.tokenize(stream, state); var current = stream.current(); if (current === "return") state.dedent = true; if ((current === "->" || current === "=>") && stream.eol() || style === "indent") indent(stream, state); var delimiter_index = "[({".indexOf(current); if (delimiter_index !== -1) indent(stream, state, "])}".slice(delimiter_index, delimiter_index + 1)); if (indentKeywords.exec(current)) indent(stream, state); if (current == "then") dedent(stream, state); if (style === "dedent") { if (dedent(stream, state)) return ERRORCLASS; } delimiter_index = "])}".indexOf(current); if (delimiter_index !== -1) { while (state.scope.type == "coffee" && state.scope.prev) state.scope = state.scope.prev; if (state.scope.type == current) state.scope = state.scope.prev; } if (state.dedent && stream.eol()) { if (state.scope.type == "coffee" && state.scope.prev) state.scope = state.scope.prev; state.dedent = false; } return style; } var external = { startState: function(basecolumn) { return { tokenize: tokenBase, scope: { offset: basecolumn || 0, type: "coffee", prev: null, align: false }, prop: false, dedent: 0 }; }, token: function(stream, state) { var fillAlign = state.scope.align === null && state.scope; if (fillAlign && stream.sol()) fillAlign.align = false; var style = tokenLexer(stream, state); if (style && style != "comment") { if (fillAlign) fillAlign.align = true; state.prop = style == "punctuation" && stream.current() == "."; } return style; }, indent: function(state, text) { if (state.tokenize != tokenBase) return 0; var scope = state.scope; var closer = text && "])}".indexOf(text.charAt(0)) > -1; if (closer) while (scope.type == "coffee" && scope.prev) scope = scope.prev; var closes = closer && scope.type === text.charAt(0); if (scope.align) return scope.alignOffset - (closes ? 1 : 0); else return (closes ? scope.prev : scope).offset; }, lineComment: "#", fold: "indent" }; return external; }); CodeMirror$1.defineMIME("application/vnd.coffeescript", "coffeescript"); CodeMirror$1.defineMIME("text/x-coffeescript", "coffeescript"); CodeMirror$1.defineMIME("text/coffeescript", "coffeescript"); }); }); var require_stylus = __commonJSMin((exports, module) => { (function(mod) { if (typeof exports == "object" && typeof module == "object") mod(require_codemirror()); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"], mod); else mod(CodeMirror); })(function(CodeMirror$1) { "use strict"; CodeMirror$1.defineMode("stylus", function(config) { var indentUnit = config.indentUnit, indentUnitString = "", tagKeywords = keySet(tagKeywords_), tagVariablesRegexp = /^(a|b|i|s|col|em)$/i, propertyKeywords = keySet(propertyKeywords_), nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_), valueKeywords = keySet(valueKeywords_), colorKeywords = keySet(colorKeywords_), documentTypes = keySet(documentTypes_), documentTypesRegexp = wordRegexp(documentTypes_), mediaFeatures = keySet(mediaFeatures_), mediaTypes = keySet(mediaTypes_), fontProperties = keySet(fontProperties_), operatorsRegexp = /^\s*([.]{2,3}|&&|\|\||\*\*|[?!=:]?=|[-+*\/%<>]=?|\?:|\~)/, wordOperatorKeywordsRegexp = wordRegexp(wordOperatorKeywords_), blockKeywords = keySet(blockKeywords_), vendorPrefixesRegexp = new RegExp(/^\-(moz|ms|o|webkit)-/i), commonAtoms = keySet(commonAtoms_), firstWordMatch = "", states = {}, ch, style, type, override; while (indentUnitString.length < indentUnit) indentUnitString += " "; /** * Tokenizers */ function tokenBase(stream, state) { firstWordMatch = stream.string.match(/(^[\w-]+\s*=\s*$)|(^\s*[\w-]+\s*=\s*[\w-])|(^\s*(\.|#|@|\$|\&|\[|\d|\+|::?|\{|\>|~|\/)?\s*[\w-]*([a-z0-9-]|\*|\/\*)(\(|,)?)/); state.context.line.firstWord = firstWordMatch ? firstWordMatch[0].replace(/^\s*/, "") : ""; state.context.line.indent = stream.indentation(); ch = stream.peek(); if (stream.match("//")) { stream.skipToEnd(); return ["comment", "comment"]; } if (stream.match("/*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } if (ch == "\"" || ch == "'") { stream.next(); state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (ch == "@") { stream.next(); stream.eatWhile(/[\w\\-]/); return ["def", stream.current()]; } if (ch == "#") { stream.next(); if (stream.match(/^[0-9a-f]{3}([0-9a-f]([0-9a-f]{2}){0,2})?\b(?!-)/i)) return ["atom", "atom"]; if (stream.match(/^[a-z][\w-]*/i)) return ["builtin", "hash"]; } if (stream.match(vendorPrefixesRegexp)) return ["meta", "vendor-prefixes"]; if (stream.match(/^-?[0-9]?\.?[0-9]/)) { stream.eatWhile(/[a-z%]/i); return ["number", "unit"]; } if (ch == "!") { stream.next(); return [stream.match(/^(important|optional)/i) ? "keyword" : "operator", "important"]; } if (ch == "." && stream.match(/^\.[a-z][\w-]*/i)) return ["qualifier", "qualifier"]; if (stream.match(documentTypesRegexp)) { if (stream.peek() == "(") state.tokenize = tokenParenthesized; return ["property", "word"]; } if (stream.match(/^[a-z][\w-]*\(/i)) { stream.backUp(1); return ["keyword", "mixin"]; } if (stream.match(/^(\+|-)[a-z][\w-]*\(/i)) { stream.backUp(1); return ["keyword", "block-mixin"]; } if (stream.string.match(/^\s*&/) && stream.match(/^[-_]+[a-z][\w-]*/)) return ["qualifier", "qualifier"]; if (stream.match(/^(\/|&)(-|_|:|\.|#|[a-z])/)) { stream.backUp(1); return ["variable-3", "reference"]; } if (stream.match(/^&{1}\s*$/)) return ["variable-3", "reference"]; if (stream.match(wordOperatorKeywordsRegexp)) return ["operator", "operator"]; if (stream.match(/^\$?[-_]*[a-z0-9]+[\w-]*/i)) { if (stream.match(/^(\.|\[)[\w-\'\"\]]+/i, false)) { if (!wordIsTag(stream.current())) { stream.match("."); return ["variable-2", "variable-name"]; } } return ["variable-2", "word"]; } if (stream.match(operatorsRegexp)) return ["operator", stream.current()]; if (/[:;,{}\[\]\(\)]/.test(ch)) { stream.next(); return [null, ch]; } stream.next(); return [null, null]; } /** * Token comment */ function tokenCComment(stream, state) { var maybeEnd = false, ch$1; while ((ch$1 = stream.next()) != null) { if (maybeEnd && ch$1 == "/") { state.tokenize = null; break; } maybeEnd = ch$1 == "*"; } return ["comment", "comment"]; } /** * Token string */ function tokenString(quote) { return function(stream, state) { var escaped = false, ch$1; while ((ch$1 = stream.next()) != null) { if (ch$1 == quote && !escaped) { if (quote == ")") stream.backUp(1); break; } escaped = !escaped && ch$1 == "\\"; } if (ch$1 == quote || !escaped && quote != ")") state.tokenize = null; return ["string", "string"]; }; } /** * Token parenthesized */ function tokenParenthesized(stream, state) { stream.next(); if (!stream.match(/\s*[\"\')]/, false)) state.tokenize = tokenString(")"); else state.tokenize = null; return [null, "("]; } /** * Context management */ function Context(type$1, indent, prev, line) { this.type = type$1; this.indent = indent; this.prev = prev; this.line = line || { firstWord: "", indent: 0 }; } function pushContext(state, stream, type$1, indent) { indent = indent >= 0 ? indent : indentUnit; state.context = new Context(type$1, stream.indentation() + indent, state.context); return type$1; } function popContext(state, currentIndent) { var contextIndent = state.context.indent - indentUnit; currentIndent = currentIndent || false; state.context = state.context.prev; if (currentIndent) state.context.indent = contextIndent; return state.context.type; } function pass(type$1, stream, state) { return states[state.context.type](type$1, stream, state); } function popAndPass(type$1, stream, state, n) { for (var i = n || 1; i > 0; i--) state.context = state.context.prev; return pass(type$1, stream, state); } /** * Parser */ function wordIsTag(word) { return word.toLowerCase() in tagKeywords; } function wordIsProperty(word) { word = word.toLowerCase(); return word in propertyKeywords || word in fontProperties; } function wordIsBlock(word) { return word.toLowerCase() in blockKeywords; } function wordIsVendorPrefix(word) { return word.toLowerCase().match(vendorPrefixesRegexp); } function wordAsValue(word) { var wordLC = word.toLowerCase(); var override$1 = "variable-2"; if (wordIsTag(word)) override$1 = "tag"; else if (wordIsBlock(word)) override$1 = "block-keyword"; else if (wordIsProperty(word)) override$1 = "property"; else if (wordLC in valueKeywords || wordLC in commonAtoms) override$1 = "atom"; else if (wordLC == "return" || wordLC in colorKeywords) override$1 = "keyword"; else if (word.match(/^[A-Z]/)) override$1 = "string"; return override$1; } function typeIsBlock(type$1, stream) { return endOfLine(stream) && (type$1 == "{" || type$1 == "]" || type$1 == "hash" || type$1 == "qualifier") || type$1 == "block-mixin"; } function typeIsInterpolation(type$1, stream) { return type$1 == "{" && stream.match(/^\s*\$?[\w-]+/i, false); } function typeIsPseudo(type$1, stream) { return type$1 == ":" && stream.match(/^[a-z-]+/, false); } function startOfLine(stream) { return stream.sol() || stream.string.match(new RegExp("^\\s*" + escapeRegExp(stream.current()))); } function endOfLine(stream) { return stream.eol() || stream.match(/^\s*$/, false); } function firstWordOfLine(line) { var re = /^\s*[-_]*[a-z0-9]+[\w-]*/i; var result = typeof line == "string" ? line.match(re) : line.string.match(re); return result ? result[0].replace(/^\s*/, "") : ""; } /** * Block */ states.block = function(type$1, stream, state) { if (type$1 == "comment" && startOfLine(stream) || type$1 == "," && endOfLine(stream) || type$1 == "mixin") return pushContext(state, stream, "block", 0); if (typeIsInterpolation(type$1, stream)) return pushContext(state, stream, "interpolation"); if (endOfLine(stream) && type$1 == "]") { if (!/^\s*(\.|#|:|\[|\*|&)/.test(stream.string) && !wordIsTag(firstWordOfLine(stream))) return pushContext(state, stream, "block", 0); } if (typeIsBlock(type$1, stream)) return pushContext(state, stream, "block"); if (type$1 == "}" && endOfLine(stream)) return pushContext(state, stream, "block", 0); if (type$1 == "variable-name") if (stream.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/) || wordIsBlock(firstWordOfLine(stream))) return pushContext(state, stream, "variableName"); else return pushContext(state, stream, "variableName", 0); if (type$1 == "=") { if (!endOfLine(stream) && !wordIsBlock(firstWordOfLine(stream))) return pushContext(state, stream, "block", 0); return pushContext(state, stream, "block"); } if (type$1 == "*") { if (endOfLine(stream) || stream.match(/\s*(,|\.|#|\[|:|{)/, false)) { override = "tag"; return pushContext(state, stream, "block"); } } if (typeIsPseudo(type$1, stream)) return pushContext(state, stream, "pseudo"); if (/@(font-face|media|supports|(-moz-)?document)/.test(type$1)) return pushContext(state, stream, endOfLine(stream) ? "block" : "atBlock"); if (/@(-(moz|ms|o|webkit)-)?keyframes$/.test(type$1)) return pushContext(state, stream, "keyframes"); if (/@extends?/.test(type$1)) return pushContext(state, stream, "extend", 0); if (type$1 && type$1.charAt(0) == "@") { if (stream.indentation() > 0 && wordIsProperty(stream.current().slice(1))) { override = "variable-2"; return "block"; } if (/(@import|@require|@charset)/.test(type$1)) return pushContext(state, stream, "block", 0); return pushContext(state, stream, "block"); } if (type$1 == "reference" && endOfLine(stream)) return pushContext(state, stream, "block"); if (type$1 == "(") return pushContext(state, stream, "parens"); if (type$1 == "vendor-prefixes") return pushContext(state, stream, "vendorPrefixes"); if (type$1 == "word") { var word = stream.current(); override = wordAsValue(word); if (override == "property") if (startOfLine(stream)) return pushContext(state, stream, "block", 0); else { override = "atom"; return "block"; } if (override == "tag") { if (/embed|menu|pre|progress|sub|table/.test(word)) { if (wordIsProperty(firstWordOfLine(stream))) { override = "atom"; return "block"; } } if (stream.string.match(new RegExp("\\[\\s*" + word + "|" + word + "\\s*\\]"))) { override = "atom"; return "block"; } if (tagVariablesRegexp.test(word)) { if (startOfLine(stream) && stream.string.match(/=/) || !startOfLine(stream) && !stream.string.match(/^(\s*\.|#|\&|\[|\/|>|\*)/) && !wordIsTag(firstWordOfLine(stream))) { override = "variable-2"; if (wordIsBlock(firstWordOfLine(stream))) return "block"; return pushContext(state, stream, "block", 0); } } if (endOfLine(stream)) return pushContext(state, stream, "block"); } if (override == "block-keyword") { override = "keyword"; if (stream.current(/(if|unless)/) && !startOfLine(stream)) return "block"; return pushContext(state, stream, "block"); } if (word == "return") return pushContext(state, stream, "block", 0); if (override == "variable-2" && stream.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/)) return pushContext(state, stream, "block"); } return state.context.type; }; /** * Parens */ states.parens = function(type$1, stream, state) { if (type$1 == "(") return pushContext(state, stream, "parens"); if (type$1 == ")") { if (state.context.prev.type == "parens") return popContext(state); if (stream.string.match(/^[a-z][\w-]*\(/i) && endOfLine(stream) || wordIsBlock(firstWordOfLine(stream)) || /(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(firstWordOfLine(stream)) || !stream.string.match(/^-?[a-z][\w-\.\[\]\'\"]*\s*=/) && wordIsTag(firstWordOfLine(stream))) return pushContext(state, stream, "block"); if (stream.string.match(/^[\$-]?[a-z][\w-\.\[\]\'\"]*\s*=/) || stream.string.match(/^\s*(\(|\)|[0-9])/) || stream.string.match(/^\s+[a-z][\w-]*\(/i) || stream.string.match(/^\s+[\$-]?[a-z]/i)) return pushContext(state, stream, "block", 0); if (endOfLine(stream)) return pushContext(state, stream, "block"); else return pushContext(state, stream, "block", 0); } if (type$1 && type$1.charAt(0) == "@" && wordIsProperty(stream.current().slice(1))) override = "variable-2"; if (type$1 == "word") { var word = stream.current(); override = wordAsValue(word); if (override == "tag" && tagVariablesRegexp.test(word)) override = "variable-2"; if (override == "property" || word == "to") override = "atom"; } if (type$1 == "variable-name") return pushContext(state, stream, "variableName"); if (typeIsPseudo(type$1, stream)) return pushContext(state, stream, "pseudo"); return state.context.type; }; /** * Vendor prefixes */ states.vendorPrefixes = function(type$1, stream, state) { if (type$1 == "word") { override = "property"; return pushContext(state, stream, "block", 0); } return popContext(state); }; /** * Pseudo */ states.pseudo = function(type$1, stream, state) { if (!wordIsProperty(firstWordOfLine(stream.string))) { stream.match(/^[a-z-]+/); override = "variable-3"; if (endOfLine(stream)) return pushContext(state, stream, "block"); return popContext(state); } return popAndPass(type$1, stream, state); }; /** * atBlock */ states.atBlock = function(type$1, stream, state) { if (type$1 == "(") return pushContext(state, stream, "atBlock_parens"); if (typeIsBlock(type$1, stream)) return pushContext(state, stream, "block"); if (typeIsInterpolation(type$1, stream)) return pushContext(state, stream, "interpolation"); if (type$1 == "word") { var word = stream.current().toLowerCase(); if (/^(only|not|and|or)$/.test(word)) override = "keyword"; else if (documentTypes.hasOwnProperty(word)) override = "tag"; else if (mediaTypes.hasOwnProperty(word)) override = "attribute"; else if (mediaFeatures.hasOwnProperty(word)) override = "property"; else if (nonStandardPropertyKeywords.hasOwnProperty(word)) override = "string-2"; else override = wordAsValue(stream.current()); if (override == "tag" && endOfLine(stream)) return pushContext(state, stream, "block"); } if (type$1 == "operator" && /^(not|and|or)$/.test(stream.current())) override = "keyword"; return state.context.type; }; states.atBlock_parens = function(type$1, stream, state) { if (type$1 == "{" || type$1 == "}") return state.context.type; if (type$1 == ")") if (endOfLine(stream)) return pushContext(state, stream, "block"); else return pushContext(state, stream, "atBlock"); if (type$1 == "word") { var word = stream.current().toLowerCase(); override = wordAsValue(word); if (/^(max|min)/.test(word)) override = "property"; if (override == "tag") tagVariablesRegexp.test(word) ? override = "variable-2" : override = "atom"; return state.context.type; } return states.atBlock(type$1, stream, state); }; /** * Keyframes */ states.keyframes = function(type$1, stream, state) { if (stream.indentation() == "0" && (type$1 == "}" && startOfLine(stream) || type$1 == "]" || type$1 == "hash" || type$1 == "qualifier" || wordIsTag(stream.current()))) return popAndPass(type$1, stream, state); if (type$1 == "{") return pushContext(state, stream, "keyframes"); if (type$1 == "}") if (startOfLine(stream)) return popContext(state, true); else return pushContext(state, stream, "keyframes"); if (type$1 == "unit" && /^[0-9]+\%$/.test(stream.current())) return pushContext(state, stream, "keyframes"); if (type$1 == "word") { override = wordAsValue(stream.current()); if (override == "block-keyword") { override = "keyword"; return pushContext(state, stream, "keyframes"); } } if (/@(font-face|media|supports|(-moz-)?document)/.test(type$1)) return pushContext(state, stream, endOfLine(stream) ? "block" : "atBlock"); if (type$1 == "mixin") return pushContext(state, stream, "block", 0); return state.context.type; }; /** * Interpolation */ states.interpolation = function(type$1, stream, state) { if (type$1 == "{") popContext(state) && pushContext(state, stream, "block"); if (type$1 == "}") { if (stream.string.match(/^\s*(\.|#|:|\[|\*|&|>|~|\+|\/)/i) || stream.string.match(/^\s*[a-z]/i) && wordIsTag(firstWordOfLine(stream))) return pushContext(state, stream, "block"); if (!stream.string.match(/^(\{|\s*\&)/) || stream.match(/\s*[\w-]/, false)) return pushContext(state, stream, "block", 0); return pushContext(state, stream, "block"); } if (type$1 == "variable-name") return pushContext(state, stream, "variableName", 0); if (type$1 == "word") { override = wordAsValue(stream.current()); if (override == "tag") override = "atom"; } return state.context.type; }; /** * Extend/s */ states.extend = function(type$1, stream, state) { if (type$1 == "[" || type$1 == "=") return "extend"; if (type$1 == "]") return popContext(state); if (type$1 == "word") { override = wordAsValue(stream.current()); return "extend"; } return popContext(state); }; /** * Variable name */ states.variableName = function(type$1, stream, state) { if (type$1 == "string" || type$1 == "[" || type$1 == "]" || stream.current().match(/^(\.|\$)/)) { if (stream.current().match(/^\.[\w-]+/i)) override = "variable-2"; return "variableName"; } return popAndPass(type$1, stream, state); }; return { startState: function(base) { return { tokenize: null, state: "block", context: new Context("block", base || 0, null) }; }, token: function(stream, state) { if (!state.tokenize && stream.eatSpace()) return null; style = (state.tokenize || tokenBase)(stream, state); if (style && typeof style == "object") { type = style[1]; style = style[0]; } override = style; state.state = states[state.state](type, stream, state); return override; }, indent: function(state, textAfter, line) { var cx = state.context, ch$1 = textAfter && textAfter.charAt(0), indent = cx.indent, lineFirstWord = firstWordOfLine(textAfter), lineIndent = line.match(/^\s*/)[0].replace(/\t/g, indentUnitString).length, prevLineFirstWord = state.context.prev ? state.context.prev.line.firstWord : "", prevLineIndent = state.context.prev ? state.context.prev.line.indent : lineIndent; if (cx.prev && (ch$1 == "}" && (cx.type == "block" || cx.type == "atBlock" || cx.type == "keyframes") || ch$1 == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || ch$1 == "{" && cx.type == "at")) indent = cx.indent - indentUnit; else if (!/(\})/.test(ch$1)) { if (/@|\$|\d/.test(ch$1) || /^\{/.test(textAfter) || /^\s*\/(\/|\*)/.test(textAfter) || /^\s*\/\*/.test(prevLineFirstWord) || /^\s*[\w-\.\[\]\'\"]+\s*(\?|:|\+)?=/i.test(textAfter) || /^(\+|-)?[a-z][\w-]*\(/i.test(textAfter) || /^return/.test(textAfter) || wordIsBlock(lineFirstWord)) indent = lineIndent; else if (/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(ch$1) || wordIsTag(lineFirstWord)) if (/\,\s*$/.test(prevLineFirstWord)) indent = prevLineIndent; else if (/^\s+/.test(line) && (/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(prevLineFirstWord) || wordIsTag(prevLineFirstWord))) indent = lineIndent <= prevLineIndent ? prevLineIndent : prevLineIndent + indentUnit; else indent = lineIndent; else if (!/,\s*$/.test(line) && (wordIsVendorPrefix(lineFirstWord) || wordIsProperty(lineFirstWord))) if (wordIsBlock(prevLineFirstWord)) indent = lineIndent <= prevLineIndent ? prevLineIndent : prevLineIndent + indentUnit; else if (/^\{/.test(prevLineFirstWord)) indent = lineIndent <= prevLineIndent ? lineIndent : prevLineIndent + indentUnit; else if (wordIsVendorPrefix(prevLineFirstWord) || wordIsProperty(prevLineFirstWord)) indent = lineIndent >= prevLineIndent ? prevLineIndent : lineIndent; else if (/^(\.|#|:|\[|\*|&|@|\+|\-|>|~|\/)/.test(prevLineFirstWord) || /=\s*$/.test(prevLineFirstWord) || wordIsTag(prevLineFirstWord) || /^\$[\w-\.\[\]\'\"]/.test(prevLineFirstWord)) indent = prevLineIndent + indentUnit; else indent = lineIndent; } return indent; }, electricChars: "}", blockCommentStart: "/*", blockCommentEnd: "*/", blockCommentContinue: " * ", lineComment: "//", fold: "indent" }; }); var tagKeywords_ = [ "a", "abbr", "address", "area", "article", "aside", "audio", "b", "base", "bdi", "bdo", "bgsound", "blockquote", "body", "br", "button", "canvas", "caption", "cite", "code", "col", "colgroup", "data", "datalist", "dd", "del", "details", "dfn", "div", "dl", "dt", "em", "embed", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "iframe", "img", "input", "ins", "kbd", "keygen", "label", "legend", "li", "link", "main", "map", "mark", "marquee", "menu", "menuitem", "meta", "meter", "nav", "nobr", "noframes", "noscript", "object", "ol", "optgroup", "option", "output", "p", "param", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "script", "section", "select", "small", "source", "span", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "u", "ul", "var", "video" ]; var documentTypes_ = [ "domain", "regexp", "url-prefix", "url" ]; var mediaTypes_ = [ "all", "aural", "braille", "handheld", "print", "projection", "screen", "tty", "tv", "embossed" ]; var mediaFeatures_ = [ "width", "min-width", "max-width", "height", "min-height", "max-height", "device-width", "min-device-width", "max-device-width", "device-height", "min-device-height", "max-device-height", "aspect-ratio", "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", "max-color", "color-index", "min-color-index", "max-color-index", "monochrome", "min-monochrome", "max-monochrome", "resolution", "min-resolution", "max-resolution", "scan", "grid", "dynamic-range", "video-dynamic-range" ]; var propertyKeywords_ = [ "align-content", "align-items", "align-self", "alignment-adjust", "alignment-baseline", "anchor-point", "animation", "animation-delay", "animation-direction", "animation-duration", "animation-fill-mode", "animation-iteration-count", "animation-name", "animation-play-state", "animation-timing-function", "appearance", "azimuth", "backface-visibility", "background", "background-attachment", "background-clip", "background-color", "background-image", "background-origin", "background-position", "background-repeat", "background-size", "baseline-shift", "binding", "bleed", "bookmark-label", "bookmark-level", "bookmark-state", "bookmark-target", "border", "border-bottom", "border-bottom-color", "border-bottom-left-radius", "border-bottom-right-radius", "border-bottom-style", "border-bottom-width", "border-collapse", "border-color", "border-image", "border-image-outset", "border-image-repeat", "border-image-slice", "border-image-source", "border-image-width", "border-left", "border-left-color", "border-left-style", "border-left-width", "border-radius", "border-right", "border-right-color", "border-right-style", "border-right-width", "border-spacing", "border-style", "border-top", "border-top-color", "border-top-left-radius", "border-top-right-radius", "border-top-style", "border-top-width", "border-width", "bottom", "box-decoration-break", "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", "caption-side", "clear", "clip", "color", "color-profile", "column-count", "column-fill", "column-gap", "column-rule", "column-rule-color", "column-rule-style", "column-rule-width", "column-span", "column-width", "columns", "content", "counter-increment", "counter-reset", "crop", "cue", "cue-after", "cue-before", "cursor", "direction", "display", "dominant-baseline", "drop-initial-after-adjust", "drop-initial-after-align", "drop-initial-before-adjust", "drop-initial-before-align", "drop-initial-size", "drop-initial-value", "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", "float", "float-offset", "flow-from", "flow-into", "font", "font-feature-settings", "font-family", "font-kerning", "font-language-override", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-synthesis", "font-variant", "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric", "font-variant-position", "font-weight", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", "grid-auto-position", "grid-auto-rows", "grid-column", "grid-column-end", "grid-column-start", "grid-row", "grid-row-end", "grid-row-start", "grid-template", "grid-template-areas", "grid-template-columns", "grid-template-rows", "hanging-punctuation", "height", "hyphens", "icon", "image-orientation", "image-rendering", "image-resolution", "inline-box-align", "justify-content", "left", "letter-spacing", "line-break", "line-height", "line-stacking", "line-stacking-ruby", "line-stacking-shift", "line-stacking-strategy", "list-style", "list-style-image", "list-style-position", "list-style-type", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "marker-offset", "marks", "marquee-direction", "marquee-loop", "marquee-play-count", "marquee-speed", "marquee-style", "max-height", "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index", "nav-left", "nav-right", "nav-up", "object-fit", "object-position", "opacity", "order", "orphans", "outline", "outline-color", "outline-offset", "outline-style", "outline-width", "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", "page", "page-break-after", "page-break-before", "page-break-inside", "page-policy", "pause", "pause-after", "pause-before", "perspective", "perspective-origin", "pitch", "pitch-range", "play-during", "position", "presentation-level", "punctuation-trim", "quotes", "region-break-after", "region-break-before", "region-break-inside", "region-fragment", "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness", "right", "rotation", "rotation-point", "ruby-align", "ruby-overhang", "ruby-position", "ruby-span", "shape-image-threshold", "shape-inside", "shape-margin", "shape-outside", "size", "speak", "speak-as", "speak-header", "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", "tab-size", "table-layout", "target", "target-name", "target-new", "target-position", "text-align", "text-align-last", "text-decoration", "text-decoration-color", "text-decoration-line", "text-decoration-skip", "text-decoration-style", "text-emphasis", "text-emphasis-color", "text-emphasis-position", "text-emphasis-style", "text-height", "text-indent", "text-justify", "text-outline", "text-overflow", "text-shadow", "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position", "text-wrap", "top", "transform", "transform-origin", "transform-style", "transition", "transition-delay", "transition-duration", "transition-property", "transition-timing-function", "unicode-bidi", "vertical-align", "visibility", "voice-balance", "voice-duration", "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", "voice-volume", "volume", "white-space", "widows", "width", "will-change", "word-break", "word-spacing", "word-wrap", "z-index", "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", "color-interpolation", "color-interpolation-filters", "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", "marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", "glyph-orientation-vertical", "text-anchor", "writing-mode", "font-smoothing", "osx-font-smoothing" ]; var nonStandardPropertyKeywords_ = [ "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color", "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color", "scrollbar-3d-light-color", "scrollbar-track-color", "shape-inside", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "zoom" ]; var fontProperties_ = [ "font-family", "src", "unicode-range", "font-variant", "font-feature-settings", "font-stretch", "font-weight", "font-style" ]; var colorKeywords_ = [ "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen" ]; var valueKeywords_ = [ "above", "absolute", "activeborder", "additive", "activecaption", "afar", "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", "arabic-indic", "armenian", "asterisks", "attr", "auto", "avoid", "avoid-column", "avoid-page", "avoid-region", "background", "backwards", "baseline", "below", "bidi-override", "binary", "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian", "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch", "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", "col-resize", "collapse", "column", "compact", "condensed", "conic-gradient", "contain", "content", "contents", "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop", "cross", "crosshair", "currentcolor", "cursive", "cyclic", "dashed", "decimal", "decimal-leading-zero", "default", "default-button", "destination-atop", "destination-in", "destination-out", "destination-over", "devanagari", "disc", "discard", "disclosure-closed", "disclosure-open", "document", "dot-dash", "dot-dot-dash", "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", "ethiopic-halehame-gez", "ethiopic-halehame-om-et", "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig", "ethiopic-numeric", "ew-resize", "expanded", "extends", "extra-condensed", "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "flex", "footnotes", "forwards", "from", "geometricPrecision", "georgian", "graytext", "groove", "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hebrew", "help", "hidden", "hide", "high", "higher", "highlight", "highlighttext", "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "icon", "ignore", "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", "inline-block", "inline-flex", "inline-table", "inset", "inside", "intrinsic", "invert", "italic", "japanese-formal", "japanese-informal", "justify", "kannada", "katakana", "katakana-iroha", "keep-all", "khmer", "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", "landscape", "lao", "large", "larger", "left", "level", "lighter", "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", "lower-roman", "lowercase", "ltr", "malayalam", "match", "matrix", "matrix3d", "media-play-button", "media-slider", "media-sliderthumb", "media-volume-slider", "media-volume-sliderthumb", "medium", "menu", "menulist", "menulist-button", "menutext", "message-box", "middle", "min-intrinsic", "mix", "mongolian", "monospace", "move", "multiple", "myanmar", "n-resize", "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "open-quote", "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", "painted", "page", "paused", "persian", "perspective", "plus-darker", "plus-lighter", "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button", "radial-gradient", "radio", "read-only", "read-write", "read-write-plaintext-only", "rectangle", "region", "relative", "repeat", "repeating-linear-gradient", "repeating-radial-gradient", "repeating-conic-gradient", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", "rotateZ", "round", "row-resize", "rtl", "run-in", "running", "s-resize", "sans-serif", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "scroll", "scrollbar", "scroll-position", "se-resize", "searchfield", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", "simp-chinese-formal", "simp-chinese-informal", "single", "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", "small", "small-caps", "small-caption", "smaller", "solid", "somali", "source-atop", "source-in", "source-out", "source-over", "space", "spell-out", "square", "square-button", "standard", "start", "static", "status-bar", "stretch", "stroke", "sub", "subpixel-antialiased", "super", "sw-resize", "symbolic", "symbols", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row", "table-row-group", "tamil", "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", "trad-chinese-formal", "trad-chinese-informal", "translate", "translate3d", "translateX", "translateY", "translateZ", "transparent", "ultra-condensed", "ultra-expanded", "underline", "up", "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", "var", "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted", "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", "window", "windowframe", "windowtext", "words", "x-large", "x-small", "xor", "xx-large", "xx-small", "bicubic", "optimizespeed", "grayscale", "row", "row-reverse", "wrap", "wrap-reverse", "column-reverse", "flex-start", "flex-end", "space-between", "space-around", "unset" ]; var wordOperatorKeywords_ = [ "in", "and", "or", "not", "is not", "is a", "is", "isnt", "defined", "if unless" ], blockKeywords_ = [ "for", "if", "else", "unless", "from", "to" ], commonAtoms_ = [ "null", "true", "false", "href", "title", "type", "not-allowed", "readonly", "disabled" ], commonDef_ = [ "@font-face", "@keyframes", "@media", "@viewport", "@page", "@host", "@supports", "@block", "@css" ]; var hintWords = tagKeywords_.concat(documentTypes_, mediaTypes_, mediaFeatures_, propertyKeywords_, nonStandardPropertyKeywords_, colorKeywords_, valueKeywords_, fontProperties_, wordOperatorKeywords_, blockKeywords_, commonAtoms_, commonDef_); function wordRegexp(words) { words = words.sort(function(a, b) { return b > a; }); return new RegExp("^((" + words.join(")|(") + "))\\b"); } function keySet(array) { var keys = {}; for (var i = 0; i < array.length; ++i) keys[array[i]] = true; return keys; } function escapeRegExp(text) { return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); } CodeMirror$1.registerHelper("hintWords", "stylus", hintWords); CodeMirror$1.defineMIME("text/x-styl", "stylus"); }); }); var require_vue = __commonJSMin((exports, module) => { (function(mod) { "use strict"; if (typeof exports === "object" && typeof module === "object") mod(require_codemirror(), require_overlay(), require_xml(), require_javascript(), require_coffeescript(), require_css(), require_sass(), require_stylus(), require_pug(), require_handlebars()); else if (typeof define === "function" && define.amd) define([ "../../lib/codemirror", "../../addon/mode/overlay", "../xml/xml", "../javascript/javascript", "../coffeescript/coffeescript", "../css/css", "../sass/sass", "../stylus/stylus", "../pug/pug", "../handlebars/handlebars" ], mod); else mod(CodeMirror); })(function(CodeMirror$1) { var tagLanguages = { script: [ [ "lang", /coffee(script)?/, "coffeescript" ], [ "type", /^(?:text|application)\/(?:x-)?coffee(?:script)?$/, "coffeescript" ], [ "lang", /^babel$/, "javascript" ], [ "type", /^text\/babel$/, "javascript" ], [ "type", /^text\/ecmascript-\d+$/, "javascript" ] ], style: [ [ "lang", /^stylus$/i, "stylus" ], [ "lang", /^sass$/i, "sass" ], [ "lang", /^less$/i, "text/x-less" ], [ "lang", /^scss$/i, "text/x-scss" ], [ "type", /^(text\/)?(x-)?styl(us)?$/i, "stylus" ], [ "type", /^text\/sass/i, "sass" ], [ "type", /^(text\/)?(x-)?scss$/i, "text/x-scss" ], [ "type", /^(text\/)?(x-)?less$/i, "text/x-less" ] ], template: [ [ "lang", /^vue-template$/i, "vue" ], [ "lang", /^pug$/i, "pug" ], [ "lang", /^handlebars$/i, "handlebars" ], [ "type", /^(text\/)?(x-)?pug$/i, "pug" ], [ "type", /^text\/x-handlebars-template$/i, "handlebars" ], [ null, null, "vue-template" ] ] }; CodeMirror$1.defineMode("vue-template", function(config, parserConfig) { var mustacheOverlay = { token: function(stream) { if (stream.match(/^\{\{.*?\}\}/)) return "meta mustache"; while (stream.next() && !stream.match("{{", false)); return null; } }; return CodeMirror$1.overlayMode(CodeMirror$1.getMode(config, parserConfig.backdrop || "text/html"), mustacheOverlay); }); CodeMirror$1.defineMode("vue", function(config) { return CodeMirror$1.getMode(config, { name: "htmlmixed", tags: tagLanguages }); }, "htmlmixed", "xml", "javascript", "coffeescript", "css", "sass", "stylus", "pug", "handlebars"); CodeMirror$1.defineMIME("script/x-vue", "vue"); CodeMirror$1.defineMIME("text/x-vue", "vue"); }); }); function useCodeMirror(container, input, options = {}) { const cm = (0, import_codemirror.default)(container.value, { theme: "vars", value: input.value, ...options }); let skip = false; cm.on("change", () => { if (skip) { skip = false; return; } input.value = cm.getValue(); }); watch(input, (v) => { if (v !== cm.getValue()) { skip = true; const selections = cm.listSelections(); cm.replaceRange(v, cm.posFromIndex(0), cm.posFromIndex(Number.POSITIVE_INFINITY)); cm.setSelections(selections); cm.scrollTo(0, 0); } }, { immediate: true }); return cm; } function syncEditorScrolls(primary, target) { const pInfo = primary.getScrollInfo(); const tInfo = target.getScrollInfo(); let x = (tInfo.width - tInfo.clientWidth) / (pInfo.width - pInfo.clientWidth) * pInfo.left; let y = (tInfo.height - tInfo.clientHeight) / (pInfo.height - pInfo.clientHeight) * pInfo.top; x = Number.isNaN(x) ? 0 : x; y = Number.isNaN(y) ? 0 : y; target.scrollTo(x, y); } function syncScrollListeners(cm1, cm2) { let activeCm = 1; cm1.getWrapperElement().addEventListener("mouseenter", () => { activeCm = 1; }); cm2.getWrapperElement().addEventListener("mouseenter", () => { activeCm = 2; }); cm1.on("scroll", (editor) => { if (activeCm === 1) syncEditorScrolls(editor, cm2); }); cm1.on("scrollCursorIntoView", (editor) => syncEditorScrolls(editor, cm2)); cm2.on("scroll", (editor) => { if (activeCm === 2) syncEditorScrolls(editor, cm1); }); cm2.on("scrollCursorIntoView", (editor) => syncEditorScrolls(editor, cm1)); } /** * @license * Copyright 2019 Google LLC * SPDX-License-Identifier: Apache-2.0 */ const proxyMarker = Symbol("Comlink.proxy"); const createEndpoint = Symbol("Comlink.endpoint"); const releaseProxy = Symbol("Comlink.releaseProxy"); const finalizer = Symbol("Comlink.finalizer"); const throwMarker = Symbol("Comlink.thrown"); const isObject = (val) => typeof val === "object" && val !== null || typeof val === "function"; /** * Internal transfer handle to handle objects marked to proxy. */ const proxyTransferHandler = { canHandle: (val) => isObject(val) && val[proxyMarker], serialize(obj) { const { port1, port2 } = new MessageChannel(); expose(obj, port1); return [port2, [port2]]; }, deserialize(port) { port.start(); return wrap(port); } }; /** * Internal transfer handler to handle thrown exceptions. */ const throwTransferHandler = { canHandle: (value) => isObject(value) && throwMarker in value, serialize({ value }) { let serialized; if (value instanceof Error) serialized = { isError: true, value: { message: value.message, name: value.name, stack: value.stack } }; else serialized = { isError: false, value }; return [serialized, []]; }, deserialize(serialized) { if (serialized.isError) throw Object.assign(new Error(serialized.value.message), serialized.value); throw serialized.value; } }; /** * Allows customizing the serialization of certain values. */ const transferHandlers = new Map([["proxy", proxyTransferHandler], ["throw", throwTransferHandler]]); function isAllowedOrigin(allowedOrigins, origin) { for (const allowedOrigin of allowedOrigins) { if (origin === allowedOrigin || allowedOrigin === "*") return true; if (allowedOrigin instanceof RegExp && allowedOrigin.test(origin)) return true; } return false; } function expose(obj, ep = globalThis, allowedOrigins = ["*"]) { ep.addEventListener("message", function callback(ev) { if (!ev || !ev.data) return; if (!isAllowedOrigin(allowedOrigins, ev.origin)) { console.warn(`Invalid origin '${ev.origin}' for comlink proxy`); return; } const { id, type, path } = Object.assign({ path: [] }, ev.data); const argumentList = (ev.data.argumentList || []).map(fromWireValue); let returnValue; try { const parent = path.slice(0, -1).reduce((obj$1, prop) => obj$1[prop], obj); const rawValue = path.reduce((obj$1, prop) => obj$1[prop], obj); switch (type) { case "GET": returnValue = rawValue; break; case "SET": { parent[path.slice(-1)[0]] = fromWireValue(ev.data.value); returnValue = true; } break; case "APPLY": returnValue = rawValue.apply(parent, argumentList); break; case "CONSTRUCT": { const value = new rawValue(...argumentList); returnValue = proxy(value); } break; case "ENDPOINT": { const { port1, port2 } = new MessageChannel(); expose(obj, port2); returnValue = transfer(port1, [port1]); } break; case "RELEASE": returnValue = void 0; break; default: return; } } catch (value) { returnValue = { value, [throwMarker]: 0 }; } Promise.resolve(returnValue).catch((value) => { return { value, [throwMarker]: 0 }; }).then((returnValue$1) => { const [wireValue, transferables] = toWireValue(returnValue$1); ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables); if (type === "RELEASE") { ep.removeEventListener("message", callback); closeEndPoint(ep); if (finalizer in obj && typeof obj[finalizer] === "function") obj[finalizer](); } }).catch((error) => { const [wireValue, transferables] = toWireValue({ value: new TypeError("Unserializable return value"), [throwMarker]: 0 }); ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables); }); }); if (ep.start) ep.start(); } function isMessagePort(endpoint) { return endpoint.constructor.name === "MessagePort"; } function closeEndPoint(endpoint) { if (isMessagePort(endpoint)) endpoint.close(); } function wrap(ep, target) { const pendingListeners = new Map(); ep.addEventListener("message", function handleMessage(ev) { const { data } = ev; if (!data || !data.id) return; const resolver = pendingListeners.get(data.id); if (!resolver) return; try { resolver(data); } finally { pendingListeners.delete(data.id); } }); return createProxy(ep, pendingListeners, [], target); } function throwIfProxyReleased(isReleased) { if (isReleased) throw new Error("Proxy has been released and is not useable"); } function releaseEndpoint(ep) { return requestResponseMessage(ep, new Map(), { type: "RELEASE" }).then(() => { closeEndPoint(ep); }); } const proxyCounter = new WeakMap(); const proxyFinalizers = "FinalizationRegistry" in globalThis && new FinalizationRegistry((ep) => { const newCount = (proxyCounter.get(ep) || 0) - 1; proxyCounter.set(ep, newCount); if (newCount === 0) releaseEndpoint(ep); }); function registerProxy(proxy$1, ep) { const newCount = (proxyCounter.get(ep) || 0) + 1; proxyCounter.set(ep, newCount); if (proxyFinalizers) proxyFinalizers.register(proxy$1, ep, proxy$1); } function unregisterProxy(proxy$1) { if (proxyFinalizers) proxyFinalizers.unregister(proxy$1); } function createProxy(ep, pendingListeners, path = [], target = function() {}) { let isProxyReleased = false; const proxy$1 = new Proxy(target, { get(_target, prop) { throwIfProxyReleased(isProxyReleased); if (prop === releaseProxy) return () => { unregisterProxy(proxy$1); releaseEndpoint(ep); pendingListeners.clear(); isProxyReleased = true; }; if (prop === "then") { if (path.length === 0) return { then: () => proxy$1 }; const r = requestResponseMessage(ep, pendingListeners, { type: "GET", path: path.map((p) => p.toString()) }).then(fromWireValue); return r.then.bind(r); } return createProxy(ep, pendingListeners, [...path, prop]); }, set(_target, prop, rawValue) { throwIfProxyReleased(isProxyReleased); const [value, transferables] = toWireValue(rawValue); return requestResponseMessage(ep, pendingListeners, { type: "SET", path: [...path, prop].map((p) => p.toString()), value }, transferables).then(fromWireValue); }, apply(_target, _thisArg, rawArgumentList) { throwIfProxyReleased(isProxyReleased); const last = path[path.length - 1]; if (last === createEndpoint) return requestResponseMessage(ep, pendingListeners, { type: "ENDPOINT" }).then(fromWireValue); if (last === "bind") return createProxy(ep, pendingListeners, path.slice(0, -1)); const [argumentList, transferables] = processArguments(rawArgumentList); return requestResponseMessage(ep, pendingListeners, { type: "APPLY", path: path.map((p) => p.toString()), argumentList }, transferables).then(fromWireValue); }, construct(_target, rawArgumentList) { throwIfProxyReleased(isProxyReleased); const [argumentList, transferables] = processArguments(rawArgumentList); return requestResponseMessage(ep, pendingListeners, { type: "CONSTRUCT", path: path.map((p) => p.toString()), argumentList }, transferables).then(fromWireValue); } }); registerProxy(proxy$1, ep); return proxy$1; } function myFlat(arr) { return Array.prototype.concat.apply([], arr); } function processArguments(argumentList) { const processed = argumentList.map(toWireValue); return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))]; } const transferCache = new WeakMap(); function transfer(obj, transfers) { transferCache.set(obj, transfers); return obj; } function proxy(obj) { return Object.assign(obj, { [proxyMarker]: true }); } function toWireValue(value) { for (const [name, handler] of transferHandlers) if (handler.canHandle(value)) { const [serializedValue, transferables] = handler.serialize(value); return [{ type: "HANDLER", name, value: serializedValue }, transferables]; } return [{ type: "RAW", value }, transferCache.get(value) || []]; } function fromWireValue(value) { switch (value.type) { case "HANDLER": return transferHandlers.get(value.name).deserialize(value.value); case "RAW": return value.value; } } function requestResponseMessage(ep, pendingListeners, msg, transfers) { return new Promise((resolve) => { const id = generateUUID(); pendingListeners.set(id, resolve); if (ep.start) ep.start(); ep.postMessage(Object.assign({ id }, msg), transfers); }); } function generateUUID() { return new Array(4).fill(0).map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16)).join("-"); } let diffWorker; async function calculateDiffWithWorker(left, right) { if (!diffWorker) diffWorker = wrap(new Worker(new URL( /* @vite-ignore */ "" + new URL("diff.worker-CMaeQEBs.js", import.meta.url).href, "" + import.meta.url ), { type: "module" })); const result = await diffWorker.calculateDiff(left, right); return result; } var DiffEditor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({ __name: "DiffEditor", props: { from: {}, to: {}, oneColumn: { type: Boolean }, diff: { type: Boolean } }, setup(__props) { const props = __props; const options = useOptionsStore(); const { from, to } = toRefs(props); const fromEl = useTemplateRef("fromEl"); const toEl = useTemplateRef("toEl"); let cm1; let cm2; onMounted(() => { cm1 = useCodeMirror(fromEl, from, { mode: "javascript", readOnly: true, lineNumbers: true }); cm2 = useCodeMirror(toEl, to, { mode: "javascript", readOnly: true, lineNumbers: true }); syncScrollListeners(cm1, cm2); watchEffect(() => { cm1.setOption("lineWrapping", options.view.lineWrapping); cm2.setOption("lineWrapping", options.view.lineWrapping); }); watchEffect(async () => { cm1.getWrapperElement().style.display = props.oneColumn ? "none" : ""; if (!props.oneColumn) { await nextTick(); cm1.refresh(); syncEditorScrolls(cm2, cm1); } }); watchEffect(async () => { const l = from.value; const r = to.value; const diffEnabled = props.diff; cm1.setOption("mode", guessMode(l)); cm2.setOption("mode", guessMode(r)); await nextTick(); cm1.startOperation(); cm2.startOperation(); cm1.getAllMarks().forEach((i) => i.clear()); cm2.getAllMarks().forEach((i) => i.clear()); for (let i = 0; i < cm1.lineCount() + 2; i++) cm1.removeLineClass(i, "background", "diff-removed"); for (let i = 0; i < cm2.lineCount() + 2; i++) cm2.removeLineClass(i, "background", "diff-added"); if (diffEnabled && from.value) { const changes = await calculateDiffWithWorker(l, r); const addedLines = new Set(); const removedLines = new Set(); let indexL = 0; let indexR = 0; changes.forEach(([type, change]) => { if (type === 1) { const start = cm2.posFromIndex(indexR); indexR += change.length; const end = cm2.posFromIndex(indexR); cm2.markText(start, end, { className: "diff-added-inline" }); for (let i = start.line; i <= end.line; i++) addedLines.add(i); } else if (type === -1) { const start = cm1.posFromIndex(indexL); indexL += change.length; const end = cm1.posFromIndex(indexL); cm1.markText(start, end, { className: "diff-removed-inline" }); for (let i = start.line; i <= end.line; i++) removedLines.add(i); } else { indexL += change.length; indexR += change.length; } }); Array.from(removedLines).forEach((i) => cm1.addLineClass(i, "background", "diff-removed")); Array.from(addedLines).forEach((i) => cm2.addLineClass(i, "background", "diff-added")); } cm1.endOperation(); cm2.endOperation(); }); }); const leftPanelSize = computed(() => { return props.oneColumn ? 0 : options.view.panelSizeDiff; }); function onUpdate(size) { cm1?.refresh(); cm2?.refresh(); if (props.oneColumn) return; options.view.panelSizeDiff = size; } return (_ctx, _cache) => { return openBlock(), createBlock(unref(Pe), { onResize: _cache[0] || (_cache[0] = ($event) => onUpdate($event.prevPane.size)) }, { default: withCtx(() => [withDirectives(createVNode(unref(ge), { "min-size": "10", size: unref(leftPanelSize) }, { default: withCtx(() => [createBaseVNode("div", { ref_key: "fromEl", ref: fromEl, class: "h-inherit" }, null, 512)]), _: 1 }, 8, ["size"]), [[vShow, !_ctx.oneColumn]]), createVNode(unref(ge), { "min-size": "10", size: 100 - unref(leftPanelSize) }, { default: withCtx(() => [createBaseVNode("div", { ref_key: "toEl", ref: toEl, class: "h-inherit" }, null, 512)]), _: 1 }, 8, ["size"])]), _: 1 }); }; } }); var DiffEditor_default = DiffEditor_vue_vue_type_script_setup_true_lang_default; const _hoisted_1$2 = { "fw-600": "", "dark:fw-unset": "" }; const _hoisted_2$2 = { op72: "", "dark:op50": "" }; const _hoisted_3$2 = { key: 0, op72: "", "dark:op50": "" }; var FilepathItem_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({ __name: "FilepathItem", props: { filepath: {}, line: {}, column: {} }, setup(__props) { const props = __props; async function openInEditor() { await fetch(`/__open-in-editor?file=${encodeURI(props.filepath)}:${props.line}:${props.column}`); } const display = computed(() => { const path = props.filepath.replace(/\\/g, "/"); if (props.filepath.includes("/node_modules/")) { const match = path.match(/.*\/node_modules\/(@[^/]+\/[^/]+|[^/]+)(\/.*)?$/); if (match) return [match[1], match[2]]; } return [path]; }); return (_ctx, _cache) => { return openBlock(), createElementBlock("button", { flex: "~", hover: "underline", onClick: openInEditor }, [ createBaseVNode("span", _hoisted_1$2, toDisplayString(unref(display)[0]), 1), createBaseVNode("span", _hoisted_2$2, toDisplayString(unref(display)[1]), 1), props.line != null && props.column != null ? (openBlock(), createElementBlock("span", _hoisted_3$2, ":" + toDisplayString(props.line) + ":" + toDisplayString(props.column), 1)) : createCommentVNode("", true) ]); }; } }); var FilepathItem_default = FilepathItem_vue_vue_type_script_setup_true_lang_default; const _hoisted_1$1 = { "of-auto": "", p4: "", "font-mono": "", flex: "~ col gap-4" }; const _hoisted_2$1 = { "text-sm": "", "status-red": "" }; const _hoisted_3$1 = { class: "text-xs", mt2: "", grid: "~ cols-[max-content_1fr] gap-x-4 gap-y-1", "font-mono": "" }; const _hoisted_4$1 = { "text-right": "", op72: "", "dark:op50": "" }; const _hoisted_5$1 = { "ws-nowrap": "" }; var ErrorDisplay_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({ __name: "ErrorDisplay", props: { error: {} }, setup(__props) { function normalizeFilename(filename) { return (filename || "").replace(/^async\s+/, "").replace(/^file:\/\//, ""); } return (_ctx, _cache) => { const _component_FilepathItem = FilepathItem_default; return openBlock(), createElementBlock("div", _hoisted_1$1, [ _cache[0] || (_cache[0] = createBaseVNode("div", { "text-xl": "", "status-red": "", flex: "~ gap-2 items-center" }, [createBaseVNode("div", { "i-carbon:warning-square": "" }), createTextVNode(" Error ")], -1)), createBaseVNode("pre", _hoisted_2$1, toDisplayString(_ctx.error.message), 1), _cache[1] || (_cache[1] = createBaseVNode("div", { border: "t main", "h-1px": "", "w-full": "" }, null, -1)), createBaseVNode("div", _hoisted_3$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.error.stack, (item, idx) => { return openBlock(), createElementBlock(Fragment, { key: idx }, [createBaseVNode("div", _hoisted_4$1, toDisplayString(item.functionName || `(anonymous)`), 1), createBaseVNode("div", _hoisted_5$1, [createVNode(_component_FilepathItem, { filepath: normalizeFilename(item.fileName), line: item.lineNumber, column: item.columnNumber }, null, 8, [ "filepath", "line", "column" ])])], 64); }), 128))]) ]); }; } }); var ErrorDisplay_default = ErrorDisplay_vue_vue_type_script_setup_true_lang_default; const _queue = /* @__PURE__ */ new WeakMap(); function useRouteQuery(name, defaultValue, options = {}) { const { mode = "replace", route = useRoute(), router = useRouter(), transform } = options; let transformGet = (value) => value; let transformSet = (value) => value; if (typeof transform === "function") transformGet = transform; else if (transform) { if (transform.get) transformGet = transform.get; if (transform.set) transformSet = transform.set; } if (!_queue.has(router)) _queue.set(router, /* @__PURE__ */ new Map()); const _queriesQueue = _queue.get(router); let query = route.query[name]; tryOnScopeDispose(() => { query = void 0; }); let _trigger; const proxy$1 = customRef((track, trigger) => { _trigger = trigger; return { get() { track(); return transformGet(query !== void 0 ? query : toValue(defaultValue)); }, set(v) { v = transformSet(v); if (query === v) return; query = v === toValue(defaultValue) ? void 0 : v; _queriesQueue.set(name, v === toValue(defaultValue) ? void 0 : v); trigger(); nextTick(() => { if (_queriesQueue.size === 0) return; const newQueries = Object.fromEntries(_queriesQueue.entries()); _queriesQueue.clear(); const { params, query: query2, hash } = route; router[toValue(mode)]({ params, query: { ...query2, ...newQueries }, hash }); }); } }; }); watch(() => route.query[name], (v) => { if (query === transformGet(v)) return; query = v; _trigger(); }, { flush: "sync" }); return proxy$1; } const _hoisted_1 = { title: "Dependencies", flex: "~ gap-2 items-center", "icon-btn": "", "text-lg": "" }; const _hoisted_2 = { "line-height-1em": "" }; const _hoisted_3 = { "max-h-400": "", "max-w-200": "", "of-auto": "" }; const _hoisted_4 = { title: "Importers", flex: "~ gap-2 items-center", "icon-btn": "", "text-lg": "" }; const _hoisted_5 = { "line-height-1em": "" }; const _hoisted_6 = { "max-h-400": "", "max-w-200": "", "of-auto": "" }; const _hoisted_7 = ["title", "disabled"]; const _hoisted_8 = { key: 0, "i-carbon-side-panel-open": "" }; const _hoisted_9 = { key: 1, "i-carbon-side-panel-close": "" }; const _hoisted_10 = { key: 0, flex: "~ col gap-2 items-center justify-center", "h-full": "" }; const _hoisted_11 = { flex: "~ gap2 items-center", p2: "", "tracking-widest": "", class: "op75 dark:op50" }; const _hoisted_12 = { "flex-auto": "", "text-center": "", "text-sm": "", uppercase: "" }; const _hoisted_13 = ["onClick"]; const _hoisted_14 = { "h-full": "", "of-auto": "" }; var module_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({ __name: "module", async setup(__props) { let __temp, __restore; function getModuleId(fullPath) { if (!fullPath) return void 0; return new URL(fullPath, "http://localhost").searchParams.get("id") || void 0; } const options = useOptionsStore(); const payload = usePayloadStore(); const route = useRoute(); const id = computed(() => getModuleId(route.fullPath)); const info = ref(id.value ? ([__temp, __restore] = withAsyncContext(() => rpc.getModuleTransformInfo(payload.query, id.value)), __temp = await __temp, __restore(), __temp) : void 0); const mod = computed(() => payload.modules.find((m) => m.id === id.value)); const index = useRouteQuery("index"); const currentIndex = computed(() => (index.value != null ? +index.value : null) ?? (info.value?.transforms.length || 1) - 1); const deps = computed(() => { return mod.value?.deps.map((dep) => payload.modules.find((m) => m.id === dep)).filter(Boolean); }); const importers = computed(() => { return mod.value?.importers.map((dep) => payload.modules.find((m) => m.id === dep)).filter(Boolean); }); const transforms = computed(() => { const trs = info.value?.transforms; if (!trs) return void 0; let load = false; return trs.map((tr, index$1) => ({ ...tr, noChange: !!tr.result && index$1 > 0 && tr.result === trs[index$1 - 1]?.result, load: tr.result && (load ? false : load = true), index: index$1 })); }); const filteredTransforms = computed(() => transforms.value?.filter((tr) => options.view.showBailout || tr.result)); async function refetch(clear = false) { if (id.value) info.value = await rpc.getModuleTransformInfo(payload.query, id.value, clear); } onModuleUpdated.on(async () => { await refetch(false); }); watch(() => [id.value, payload.query], () => refetch(false), { deep: true }); const lastTransform = computed(() => transforms.value?.slice(0, currentIndex.value).reverse().find((tr) => tr.result)); const currentTransform = computed(() => transforms.value?.find((tr) => tr.index === currentIndex.value)); const from = computed(() => lastTransform.value?.result || ""); const to = computed(() => currentTransform.value?.result || from.value); const sourcemaps = computed(() => { let sourcemaps$1 = currentTransform.value?.sourcemaps; if (!sourcemaps$1) return void 0; if (typeof sourcemaps$1 === "string") sourcemaps$1 = safeJsonParse(sourcemaps$1); if (!sourcemaps$1?.mappings) return; if (sourcemaps$1 && !sourcemaps$1.sourcesContent?.filter(Boolean)?.length) sourcemaps$1.sourcesContent = [from.value]; if (sourcemaps$1 && !sourcemaps$1.sources?.filter(Boolean)?.length) sourcemaps$1.sources = ["index.js"]; return JSON.stringify(sourcemaps$1); }); getHot().then((hot) => { if (hot) hot.on("vite-plugin-inspect:update", ({ ids }) => { if (id.value && ids.includes(id.value)) refetch(); }); }); return (_ctx, _cache) => { const _component_RouterLink = resolveComponent("RouterLink"); const _component_ModuleId = ModuleId_default; const _component_QuerySelector = QuerySelector_default; const _component_ModuleList = ModuleList_default; const _component_NavBar = NavBar_default; const _component_Badge = Badge_default; const _component_PluginName = PluginName_default; const _component_DurationDisplay = DurationDisplay_default; const _component_ErrorDisplay = ErrorDisplay_default; const _component_DiffEditor = DiffEditor_default; const _component_Container = Container_default; return openBlock(), createElementBlock(Fragment, null, [createVNode(_component_NavBar, null, { default: withCtx(() => [ createVNode(_component_RouterLink, { "my-auto": "", "icon-btn": "", "outline-none": "", to: "/" }, { default: withCtx(() => [..._cache[8] || (_cache[8] = [createBaseVNode("div", { "i-carbon-arrow-left": "" }, null, -1)])]), _: 1 }), unref(id) ? (openBlock(), createBlock(_component_ModuleId, { key: 0, id: unref(id) }, null, 8, ["id"])) : createCommentVNode("", true), _cache[13] || (_cache[13] = createBaseVNode("div", { "flex-auto": "" }, null, -1)), createVNode(_component_QuerySelector), unref(deps)?.length || unref(importers)?.length ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [ _cache[11] || (_cache[11] = createBaseVNode("div", { mx1: "", "h-full": "", "w-0": "", border: "r main" }, null, -1)), unref(deps)?.length ? (openBlock(), createBlock(unref(kt), { key: 0 }, { popper: withCtx(() => [createBaseVNode("div", _hoisted_3, [createVNode(_component_ModuleList, { modules: unref(deps) }, null, 8, ["modules"])])]), default: withCtx(() => [createBaseVNode("button", _hoisted_1, [_cache[9] || (_cache[9] = createBaseVNode("span", { "i-carbon-downstream": "" }, null, -1)), createBaseVNode("span", _hoisted_2, toDisplayString(unref(deps).length), 1)])]), _: 1 })) : createCommentVNode("", true), unref(importers)?.length ? (openBlock(), createBlock(unref(kt), { key: 1 }, { popper: withCtx(() => [createBaseVNode("div", _hoisted_6, [createVNode(_component_ModuleList, { modules: unref(importers) }, null, 8, ["modules"])])]), default: withCtx(() => [createBaseVNode("button", _hoisted_4, [_cache[10] || (_cache[10] = createBaseVNode("span", { "i-carbon-upstream": "" }, null, -1)), createBaseVNode("span", _hoisted_5, toDisplayString(unref(importers).length), 1)])]), _: 1 })) : createCommentVNode("", true) ], 64)) : createCommentVNode("", true), _cache[14] || (_cache[14] = createBaseVNode("div", { mx1: "", "h-full": "", "w-0": "", border: "r main" }, null, -1)), createBaseVNode("button", { "icon-btn": "", "text-lg": "", title: unref(sourcemaps) ? "Inspect sourcemaps" : "Sourcemap is not available", disabled: !unref(sourcemaps), onClick: _cache[0] || (_cache[0] = ($event) => unref(inspectSourcemaps)({ code: unref(to), sourcemaps: unref(sourcemaps) })) }, [createBaseVNode("span", { "i-carbon-choropleth-map": "", block: "", class: normalizeClass(unref(sourcemaps) ? "opacity-100" : "opacity-25") }, null, 2)], 8, _hoisted_7), createBaseVNode("button", { "icon-btn": "", "text-lg": "", title: "Line Wrapping", onClick: _cache[1] || (_cache[1] = ($event) => unref(options).view.lineWrapping = !unref(options).view.lineWrapping) }, [createBaseVNode("span", { "i-carbon-text-wrap": "", class: normalizeClass(unref(options).view.lineWrapping ? "opacity-100" : "opacity-25") }, null, 2)]), createBaseVNode("button", { "icon-btn": "", "text-lg": "", title: "Toggle one column", onClick: _cache[2] || (_cache[2] = ($event) => unref(options).view.showOneColumn = !unref(options).view.showOneColumn) }, [unref(options).view.showOneColumn ? (openBlock(), createElementBlock("span", _hoisted_8)) : (openBlock(), createElementBlock("span", _hoisted_9))]), createBaseVNode("button", { class: "icon-btn text-lg", title: "Toggle Diff", onClick: _cache[3] || (_cache[3] = ($event) => unref(options).view.diff = !unref(options).view.diff) }, [createBaseVNode("span", { "i-carbon-compare": "", class: normalizeClass(unref(options).view.diff ? "opacity-100" : "opacity-25") }, null, 2)]), !unref(payload).isStatic ? (openBlock(), createElementBlock("button", { key: 2, class: "icon-btn text-lg", title: "Refetch", onClick: _cache[4] || (_cache[4] = ($event) => refetch(true)) }, [..._cache[12] || (_cache[12] = [createBaseVNode("span", { "i-carbon-renew": "" }, null, -1)])])) : createCommentVNode("", true) ]), _: 1 }), !unref(info)?.transforms.length ? (openBlock(), createElementBlock("div", _hoisted_10, [createBaseVNode("div", null, [ _cache[15] || (_cache[15] = createTextVNode("No transform data for this module in the ", -1)), createVNode(_component_Badge, { text: unref(payload).query.env, size: "none", px1: "", "py0.5": "", "line-height-1em": "" }, null, 8, ["text"]), _cache[16] || (_cache[16] = createTextVNode(" env", -1)) ]), !unref(isStaticMode) ? (openBlock(), createElementBlock("button", { key: 0, rounded: "", "bg-teal5": "", px2: "", py1: "", "text-white": "", onClick: _cache[5] || (_cache[5] = ($event) => refetch(true)) }, " Request the module ")) : createCommentVNode("", true)])) : unref(info) && unref(filteredTransforms) ? (openBlock(), createBlock(_component_Container, { key: 1, flex: "", "overflow-hidden": "" }, { default: withCtx(() => [createVNode(unref(Pe), { "h-full": "", "of-hidden": "", onResize: _cache[7] || (_cache[7] = ($event) => unref(options).view.panelSizeModule = $event.prevPane.size) }, { default: withCtx(() => [createVNode(unref(ge), { size: unref(options).view.panelSizeModule, "min-size": "10", flex: "~ col", "overflow-y-auto": "" }, { default: withCtx(() => [ createBaseVNode("div", _hoisted_11, [createBaseVNode("span", _hoisted_12, toDisplayString(unref(payload).query.env) + " TRANSFORM STACK", 1), createBaseVNode("button", { class: "icon-btn", title: "Toggle bailout plugins", onClick: _cache[6] || (_cache[6] = ($event) => unref(options).view.showBailout = !unref(options).view.showBailout) }, [createBaseVNode("div", { class: normalizeClass(unref(options).view.showBailout ? "opacity-100 i-carbon-view" : "opacity-75 i-carbon-view-off") }, null, 2)])]), _cache[18] || (_cache[18] = createBaseVNode("div", { border: "b main" }, null, -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(unref(filteredTransforms), (tr) => { return openBlock(), createElementBlock("button", { key: tr.index, border: "b main", flex: "~ gap-1 wrap", "items-center": "", "px-2": "", "py-2": "", "text-left": "", "text-xs": "", "font-mono": "", class: normalizeClass(unref(currentIndex) === tr.index ? "bg-active" : tr.noChange || !tr.result ? "op75 saturate-50" : ""), onClick: ($event) => index.value = tr.index.toString() }, [ createBaseVNode("span", { class: normalizeClass(unref(currentIndex) !== tr.index && (tr.noChange || !tr.result) ? "" : "fw-600") }, [createVNode(_component_PluginName, { name: tr.name }, null, 8, ["name"])], 2), !tr.result ? (openBlock(), createBlock(_component_Badge, { key: 0, text: "bailout", "saturate-0": "" })) : tr.noChange ? (openBlock(), createBlock(_component_Badge, { key: 1, text: "no change", color: 20 })) : createCommentVNode("", true), tr.load ? (openBlock(), createBlock(_component_Badge, { key: 2, text: "load" })) : createCommentVNode("", true), tr.order && tr.order !== "normal" ? (openBlock(), createBlock(_component_Badge, { key: 3, title: tr.order.includes("-") ? `Using object hooks ${tr.order}` : tr.order, text: tr.order }, null, 8, ["title", "text"])) : createCommentVNode("", true), tr.error ? (openBlock(), createBlock(_component_Badge, { key: 4, text: "error" }, { default: withCtx(() => [_cache[17] || (_cache[17] = createBaseVNode("span", { "flex-auto": "" }, null, -1)), createVNode(_component_DurationDisplay, { duration: tr.end - tr.start }, null, 8, ["duration"])]), _: 2 }, 1024)) : createCommentVNode("", true) ], 10, _hoisted_13); }), 128)) ]), _: 1 }, 8, ["size"]), createVNode(unref(ge), { "min-size": "5" }, { default: withCtx(() => [createBaseVNode("div", _hoisted_14, [unref(currentTransform)?.error ? (openBlock(), createBlock(_component_ErrorDisplay, { key: `error-${unref(id)}`, error: unref(currentTransform).error }, null, 8, ["error"])) : (openBlock(), createBlock(_component_DiffEditor, { key: 1, "one-column": unref(options).view.showOneColumn || !!unref(currentTransform)?.error, diff: unref(options).view.diff && !unref(currentTransform)?.error, from: unref(from), to: unref(to) }, null, 8, [ "one-column", "diff", "from", "to" ]))])]), _: 1 })]), _: 1 })]), _: 1 })) : createCommentVNode("", true)], 64); }; } }); var module_default = module_vue_vue_type_script_setup_true_lang_default; export { module_default as default };