Skip to content

Instantly share code, notes, and snippets.

@floriandierickx
Created April 6, 2019 11:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save floriandierickx/7ef67ed2de867eaf63069e375c97ce0e to your computer and use it in GitHub Desktop.
Save floriandierickx/7ef67ed2de867eaf63069e375c97ce0e to your computer and use it in GitHub Desktop.
This file has been truncated, but you can view the full file.
! function(t) {
function e(t) {
Object.defineProperty(this, t, {
enumerable: !0,
get: function() {
return this[f][t]
}
})
}
function n(t) {
if ("undefined" != typeof System && System.isModule ? System.isModule(t) : "[object Module]" === Object.prototype.toString.call(t)) return t;
var e = {
default: t,
__useDefault: t
};
if (t && t.__esModule)
for (var n in t) Object.hasOwnProperty.call(t, n) && (e[n] = t[n]);
return new i(e)
}
function i(t) {
Object.defineProperty(this, f, {
value: t
}), Object.keys(t).forEach(e, this)
}
function r(t) {
return "@node/" === t.substr(0, 6) ? c(t, n(h(t.substr(6)))) : l[t]
}
function o(e) {
var n = r(e);
if (!n) throw new Error('Module "' + e + '" expected, but not contained in build.');
if (n.module) return n.module;
var i = n.linkRecord;
return function e(n, i) {
if (!i.depLoads) {
i.declare && function(e, n) {
var i = n.moduleObj,
r = e.importerSetters,
o = !1,
a = n.declare.call(t, function(t, e) {
if (!o) {
if ("object" == typeof t)
for (var n in t) "__useDefault" !== n && (i[n] = t[n]);
else i[t] = e;
o = !0;
for (var a = 0; a < r.length; a++) r[a](i);
return o = !1, e
}
}, {
id: e.key
});
"function" != typeof a ? (n.setters = a.setters, n.execute = a.execute) : (n.setters = [], n.execute = a)
}(n, i), i.depLoads = [];
for (var o = 0; o < i.deps.length; o++) {
var a = r(i.deps[o]);
i.depLoads.push(a), a.linkRecord && e(a, a.linkRecord);
var s = i.setters && i.setters[o];
s && (s(a.module || a.linkRecord.moduleObj), a.importerSetters.push(s))
}
return n
}
}(n, i), u(n, i, []), n.module
}
function a(t, e, n) {
return l[t] = {
key: t,
module: void 0,
importerSetters: [],
linkRecord: {
deps: e,
depLoads: void 0,
declare: n,
setters: void 0,
execute: void 0,
moduleObj: {}
}
}
}
function s(t, e, n, i) {
var r = {};
return l[t] = {
key: t,
module: void 0,
importerSetters: [],
linkRecord: {
deps: e,
depLoads: void 0,
declare: void 0,
execute: i,
executingRequire: n,
moduleObj: {
default: r,
__useDefault: r
},
setters: void 0
}
}
}
function u(e, n, r) {
if (r.push(e), e.module) return e.module;
if (n.setters) {
for (var o = 0; o < n.deps.length; o++) {
var a = n.depLoads[o],
s = a.linkRecord;
s && -1 === r.indexOf(a) && u(a, s, s.setters ? r : [])
}
n.execute.call(d)
} else {
var c = {
id: e.key
},
l = n.moduleObj;
Object.defineProperty(c, "exports", {
configurable: !0,
set: function(t) {
l.default = l.__useDefault = t
},
get: function() {
return l.__useDefault
}
});
var f = (p = n.deps, g = n.depLoads, b = r, function(t) {
for (var e = 0; e < p.length; e++)
if (p[e] === t) {
var n, i = g[e],
r = i.linkRecord;
return "__useDefault" in (n = r ? -1 === b.indexOf(i) ? u(i, r, b) : r.moduleObj : i.module) ? n.__useDefault : n
}
});
if (!n.executingRequire)
for (o = 0; o < n.deps.length; o++) f(n.deps[o]);
var h = n.execute.call(t, f, l.__useDefault, c);
void 0 !== h ? l.default = l.__useDefault = h : c.exports !== l.__useDefault && (l.default = l.__useDefault = c.exports);
var m = l.__useDefault;
if (m && m.__esModule)
for (var v in m) Object.hasOwnProperty.call(m, v) && (l[v] = m[v])
}
var p, g, b;
c = e.module = new i(n.moduleObj);
if (!n.setters)
for (o = 0; o < e.importerSetters.length; o++) e.importerSetters[o](c);
return c
}
function c(t, e) {
return l[t] = {
key: t,
module: e,
importerSetters: [],
linkRecord: void 0
}
}
var l = {},
f = "undefined" != typeof Symbol ? Symbol() : "@@baseObject";
i.prototype = Object.create(null), "undefined" != typeof Symbol && Symbol.toStringTag && (i.prototype[Symbol.toStringTag] = "Module");
var h = "undefined" != typeof System && System._nodeRequire || "undefined" != typeof require && void 0 !== require.resolve && "undefined" != typeof process && process.platform && require,
d = {};
return Object.freeze && Object.freeze(d),
function(t, e, r, u) {
return function(f) {
f(function(f) {
var d = {
_nodeRequire: h,
register: a,
registerDynamic: s,
registry: {
get: function(t) {
return l[t].module
},
set: c
},
newModule: function(t) {
return new i(t)
}
};
c("@empty", new i({}));
for (var m = 0; m < e.length; m++) c(e[m], n(arguments[m]));
u(d);
var v = o(t[0]);
if (t.length > 1)
for (m = 1; m < t.length; m++) o(t[m]);
return r ? v.__useDefault : (v instanceof i && Object.defineProperty(v, "__esModule", {
value: !0
}), v)
})
}
}
}("undefined" != typeof self ? self : "undefined" != typeof global ? global : this)(["a"], [], !0, function($__System) {
var require = this.require,
exports = this.exports,
module = this.module;
! function(t) {
function e(t, e) {
for (var n = t.split("."); n.length;) e = e[n.shift()];
return e
}
function n(e) {
if (-1 === o.indexOf(e)) {
try {
var n = t[e]
} catch (t) {
o.push(e)
}
this(e, n)
}
}
var i, r = $__System,
o = ["_g", "sessionStorage", "localStorage", "clipboardData", "frames", "frameElement", "external", "mozAnimationStartTime", "webkitStorageInfo", "webkitIndexedDB", "mozInnerScreenY", "mozInnerScreenX"];
r.registry.set("@@global-helpers", r.newModule({
prepareGlobal: function(r, o, a) {
var s = t.define;
t.define = void 0;
var u;
if (a) {
u = {};
for (var c in a) u[c] = t[c], t[c] = a[c]
}
return o || (i = {}, Object.keys(t).forEach(n, function(t, e) {
i[t] = e
})),
function() {
var r, a = o ? function(n) {
if ("string" == typeof n) return e(n, t);
if (!(n instanceof Array)) throw new Error("Global exports must be a string or array.");
for (var i = {}, r = 0; r < n.length; r++) i[n[r].split(".").pop()] = e(n[r], t);
return i
}(o) : {},
c = !!o;
if (o || Object.keys(t).forEach(n, function(t, e) {
i[t] !== e && void 0 !== e && (o || (a[t] = e, void 0 !== r ? c || r === e || (c = !0) : r = e))
}), a = c ? a : r, u)
for (var l in u) t[l] = u[l];
return t.define = s, a
}
}
}))
}("undefined" != typeof self ? self : "undefined" != typeof global ? global : this),
function(t) {
"use strict";
var e = function() {},
n = t.requestAnimationFrame || t.webkitRequestAnimationFrame || t.mozRequestAnimationFrame || t.msRequestAnimationFrame || function(t) {
return setTimeout(t, 16)
};
function i() {
this.reads = [], this.writes = [], this.raf = n.bind(t), e("initialized", this)
}
i.prototype = {
constructor: i,
measure: function(t, n) {
e("measure");
var i = n ? t.bind(n) : t;
return this.reads.push(i), r(this), i
},
mutate: function(t, n) {
e("mutate");
var i = n ? t.bind(n) : t;
return this.writes.push(i), r(this), i
},
clear: function(t) {
return e("clear", t), a(this.reads, t) || a(this.writes, t)
},
extend: function(t) {
if (e("extend", t), "object" != typeof t) throw new Error("expected object");
var n = Object.create(this);
return function(t, e) {
for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n])
}(n, t), n.fastdom = this, n.initialize && n.initialize(), n
},
catch: null
};
function r(t) {
t.scheduled || (t.scheduled = !0, t.raf(function(t) {
e("flush");
var n, i = t.writes,
a = t.reads;
try {
e("flushing reads", a.length), o(a), e("flushing writes", i.length), o(i)
} catch (t) {
n = t
}
t.scheduled = !1, (a.length || i.length) && r(t);
if (n) {
if (e("task errored", n.message), !t.catch) throw n;
t.catch(n)
}
}.bind(null, t)), e("flush scheduled"))
}
function o(t) {
e("run tasks");
for (var n; n = t.shift();) n()
}
function a(t, e) {
var n = t.indexOf(e);
return !!~n && !!t.splice(n, 1)
}
var s = t.fastdom = t.fastdom || new i;
"f" == "function" [0] ? $__System.registerDynamic("b", [], !1, function(t, e, n) {
return function() {
return s
}.call(this)
}): "o" == (typeof module)[0] && (module.exports = s)
}(window || this),
function() {
var t = {
initialize: function() {
this._tasks = new Map
},
mutate: function(t, n) {
return e(this, "mutate", t, n)
},
measure: function(t, n) {
return e(this, "measure", t, n)
},
clear: function(t) {
var e = this._tasks,
n = e.get(t);
this.fastdom.clear(n), e.delete(n)
}
};
function e(t, e, n, i) {
var r, o = t._tasks,
a = t.fastdom,
s = new Promise(function(t, u) {
r = a[e](function() {
o.delete(s);
try {
t(i ? n.call(i) : n())
} catch (t) {
u(t)
}
}, i)
});
return o.set(s, r), s
}
"f" == "function" [0] ? $__System.registerDynamic("c", [], !1, function(e, n, i) {
return function() {
return t
}.call(this)
}): "o" == (typeof module)[0] ? module.exports = t : window.fastdomPromised = t
}(), $__System.registerDynamic("d", ["e"], !0, function(t, e, n) {
this || self;
! function(t) {
var e;
e = function(t) {
return t
}, t.defaultLanguage = e(navigator.languages && navigator.languages.length > 0 ? navigator.languages[0] : navigator.language || navigator.userLanguage), t.localize = function(n, i) {
var r, o, a, s, u, c, l, f, h, d, m, v, p, g, b, y, w, F;
return null == i && (i = {}), F = this, s = {}, a = i.fileExtension || "json", o = t.Deferred(), l = function(t, e, n) {
switch (null == n && (n = 1), n) {
case 1:
return s = {}, u(e + ".lproj/" + t + "." + a, t, e, n);
default:
return o.resolve()
}
}, u = function(e, n, r, o) {
var a, u, c;
return null != i.pathPrefix && (e = i.pathPrefix + "/" + e), c = function(e) {
return t.extend(s, e), p(s), l(n, r, o + 1)
}, u = function() {
return 2 === o && r.indexOf("-") > -1 ? l(n, r, o + 1) : i.fallback && i.fallback !== r ? l(n, i.fallback) : void 0
}, t.localize.data[n] ? c(t.localize.data[n]) : (a = {
url: e,
dataType: "json",
async: !0,
timeout: null != i.timeout ? i.timeout : 500,
success: c,
error: u
}, "file:" === window.location.protocol && (a.error = function(e) {
return c(e.responseText ? t.parseJSON(e.responseText) : {})
}), t.ajax(a))
}, p = function(t) {
return null != i.callback ? i.callback(t, r) : r(t)
}, r = function(e) {
return t.localize.data[n] = e, F.each(function() {
var n, i, r;
if (i = ((n = t(this)).data("localize") || n.data("afterContent") || n.attr("ty-hint") || "").replace(/\\n/g, "\n"), r = w(i, e)) return f(n, i, r)
})
}, f = function(e, n, i) {
if (e.is("input") ? m(e, n, i) : e.is("textarea") ? m(e, n, i) : e.is("img") ? d(e, n, i) : e.is("optgroup") && v(e, n, i), e[0].hasAttribute("data-after-content")) e.attr("data-after-content", i);
else if (e[0].hasAttribute("ty-hint")) e.attr("ty-hint", i).attr("aria-label", i);
else if (e[0].hasAttribute("data-lt")) e.html(i);
else {
if (t.isPlainObject(i)) return h(e, i);
e.text(i)
}
}, m = function(e, n, i) {
var r;
if (r = t.isPlainObject(i) ? i.value : i, e.is("[placeholder]")) return e.attr("placeholder", r)
}, h = function(t, e) {
return b(t, "title", e), y(t, "text", e)
}, v = function(t, e, n) {
return t.attr("label", n)
}, d = function(t, e, n) {
return b(t, "alt", n), b(t, "src", n)
}, w = function(t, e) {
return e[t] || t
}, b = function(t, e, n) {
if (null != (n = w(e, n))) return t.attr(e, n)
}, y = function(t, e, n) {
if (null != (n = w(e, n))) return t.text(n)
}, g = function(t) {
var e;
return "string" == typeof t ? "^" + t + "$" : null != t.length ? function() {
var n, i, r;
for (r = [], n = 0, i = t.length; n < i; n++) e = t[n], r.push(g(e));
return r
}().join("|") : t
}, c = e(i.language ? i.language : t.defaultLanguage), i.skipLanguage && c.match(g(i.skipLanguage)) ? o.resolve() : l(n, c, 1), F.localizePromise = o, F
}, t.fn.localize = t.localize, t.localize.getString = function(e, n) {
return (t.localize.data[n || "Front"] || {})[e] || e
}, t.localize.isLoaded = function(e) {
return !!t.localize.data[e || "Front"]
}, t.localize.data = {}
}(t("e"))
}), $__System.registerDynamic("f", ["e"], !0, function(t, e, n) {
"use strict";
this || self;
if (window.jQuery || (window.$ = t("e"), window.jQuery = window.$), "undefined" == typeof jQuery) throw new Error("Bootstrap's JavaScript requires jQuery");
! function(t) {
var e = '[data-dismiss="alert"]',
n = function(n) {
t(n).on("click", e, this.close)
};
n.VERSION = "3.2.0", n.prototype.close = function(e) {
var n = t(this),
i = n.attr("data-target");
i || (i = (i = n.attr("href")) && i.replace(/.*(?=#[^\s]*$)/, ""));
var r = t(i);
e && e.preventDefault(), r.length || (r = n.hasClass("alert") ? n : n.parent()), r.trigger(e = t.Event("close.bs.alert")), e.isDefaultPrevented() || (r.removeClass("in"), t.support.transition && r.hasClass("fade") ? r.one("bsTransitionEnd", o).emulateTransitionEnd(150) : o());
function o() {
r.detach().trigger("closed.bs.alert").remove()
}
};
var i = t.fn.alert;
t.fn.alert = function(e) {
return this.each(function() {
var i = t(this),
r = i.data("bs.alert");
r || i.data("bs.alert", r = new n(this)), "string" == typeof e && r[e].call(i)
})
}, t.fn.alert.Constructor = n, t.fn.alert.noConflict = function() {
return t.fn.alert = i, this
}, t(document).on("click.bs.alert.data-api", e, n.prototype.close)
}(jQuery),
function(t) {
var e = function(n, i) {
this.$element = t(n), this.options = t.extend({}, e.DEFAULTS, i), this.isLoading = !1
};
e.VERSION = "3.2.0", e.DEFAULTS = {
loadingText: "loading..."
}, e.prototype.setState = function(e) {
var n = "disabled",
i = this.$element,
r = i.is("input") ? "val" : "html",
o = i.data();
e += "Text", null == o.resetText && i.data("resetText", i[r]()), i[r](null == o[e] ? this.options[e] : o[e]), setTimeout(t.proxy(function() {
"loadingText" == e ? (this.isLoading = !0, i.addClass(n).attr(n, n)) : this.isLoading && (this.isLoading = !1, i.removeClass(n).removeAttr(n))
}, this), 0)
}, e.prototype.toggle = function() {
var t = !0,
e = this.$element.closest('[data-toggle="buttons"]');
if (e.length) {
var n = this.$element.find("input");
"radio" == n.prop("type") && (n.prop("checked") && this.$element.hasClass("active") ? t = !1 : e.find(".active").removeClass("active")), t && n.prop("checked", !this.$element.hasClass("active")).trigger("change")
}
t && this.$element.toggleClass("active")
};
function n(n) {
return this.each(function() {
var i = t(this),
r = i.data("bs.button"),
o = "object" == typeof n && n;
r || i.data("bs.button", r = new e(this, o)), "toggle" == n ? r.toggle() : n && r.setState(n)
})
}
var i = t.fn.button;
t.fn.button = n, t.fn.button.Constructor = e, t.fn.button.noConflict = function() {
return t.fn.button = i, this
}, t(document).on("click.bs.button.data-api", '[data-toggle^="button"]', function(e) {
var i = t(e.target);
i.hasClass("btn") || (i = i.closest(".btn")), n.call(i, "toggle"), e.preventDefault()
})
}(jQuery),
function(t) {
var e = ".dropdown-backdrop",
n = '[data-toggle="dropdown"]',
i = function(e) {
t(e).on("click.bs.dropdown", this.toggle)
};
i.VERSION = "3.2.0", i.prototype.toggle = function(e) {
var n = t(this);
if (!n.is(".disabled, :disabled")) {
var i = o(n),
a = i.hasClass("open");
if (r(), !a) {
"ontouchstart" in document.documentElement && !i.closest(".navbar-nav").length && t('<div class="dropdown-backdrop"/>').insertAfter(t(this)).on("click", r);
var s = {
relatedTarget: this
};
if (i.trigger(e = t.Event("show.bs.dropdown", s)), e.isDefaultPrevented()) return;
n.trigger("focus"), i.toggleClass("open").trigger("shown.bs.dropdown", s)
}
return !1
}
}, i.prototype.keydown = function(e) {
if (/(38|40|27)/.test(e.keyCode)) {
var i = t(this);
if (e.preventDefault(), e.stopPropagation(), !i.is(".disabled, :disabled")) {
var r = o(i),
a = r.hasClass("open");
if (!a || a && 27 == e.keyCode) return 27 == e.which && r.find(n).trigger("focus"), i.trigger("click");
var s = " li:not(.divider):visible a",
u = r.find('[role="menu"]' + s + ', [role="listbox"]' + s);
if (u.length) {
var c = u.index(u.filter(":focus"));
38 == e.keyCode && c > 0 && c--, 40 == e.keyCode && c < u.length - 1 && c++, ~c || (c = 0), u.eq(c).trigger("focus")
}
}
}
};
function r(i) {
i && 3 === i.which || (t(e).remove(), t(n).each(function() {
var e = o(t(this)),
n = {
relatedTarget: this
};
e.hasClass("open") && (e.trigger(i = t.Event("hide.bs.dropdown", n)), i.isDefaultPrevented() || e.removeClass("open").trigger("hidden.bs.dropdown", n))
}))
}
function o(e) {
var n = e.attr("data-target");
n || (n = (n = e.attr("href")) && /#[A-Za-z]/.test(n) && n.replace(/.*(?=#[^\s]*$)/, ""));
var i = n && t(n);
return i && i.length ? i : e.parent()
}
var a = t.fn.dropdown;
t.fn.dropdown = function(e) {
return this.each(function() {
var n = t(this),
r = n.data("bs.dropdown");
r || n.data("bs.dropdown", r = new i(this)), "string" == typeof e && r[e].call(n)
})
}, t.fn.dropdown.Constructor = i, t.fn.dropdown.noConflict = function() {
return t.fn.dropdown = a, this
}, t(document).on("click.bs.dropdown.data-api", "modal.fade.in", r).on("click.bs.dropdown.data-api", ".dropdown form", function(t) {
t.stopPropagation()
}).on("click.bs.dropdown.data-api", n, i.prototype.toggle).on("keydown.bs.dropdown.data-api", n + ', [role="menu"], [role="listbox"]', i.prototype.keydown)
}(jQuery),
function(t) {
var e = function(e, n) {
this.options = n, this.$body = t(document.body), this.$element = t(e), this.$backdrop = this.isShown = null, this.scrollbarWidth = 0, this.options.remote && this.$element.find(".modal-content").load(this.options.remote, t.proxy(function() {
this.$element.trigger("loaded.bs.modal")
}, this))
};
e.VERSION = "3.2.0", e.DEFAULTS = {
backdrop: !0,
keyboard: !0,
show: !0
}, e.prototype.toggle = function(t) {
return this.isShown ? this.hide() : this.show(t)
}, e.prototype.show = function(e) {
var n = this,
i = t.Event("show.bs.modal", {
relatedTarget: e
});
this.$element.trigger(i), this.isShown || i.isDefaultPrevented() || (this.isShown = !0, this.checkScrollbar(), this.$body.addClass("modal-open"), this.setScrollbar(), this.escape(), this.$element.on("click.dismiss.bs.modal", '[data-dismiss="modal"]', t.proxy(this.hide, this)), this.backdrop(function() {
var i = t.support.transition && n.$element.hasClass("fade");
n.$element.parent().length || n.$element.appendTo(n.$body), n.$element.show().scrollTop(0), i && n.$element[0].offsetWidth, n.$element.addClass("in").attr("aria-hidden", !1), n.enforceFocus();
var r = t.Event("shown.bs.modal", {
relatedTarget: e
});
i ? n.$element.find(".modal-dialog").one("bsTransitionEnd", function() {
n.$element.trigger("focus").trigger(r)
}).emulateTransitionEnd(300) : n.$element.trigger("focus").trigger(r)
}))
}, e.prototype.hide = function(e) {
e && e.preventDefault(), e = t.Event("hide.bs.modal"), this.$element.trigger(e), this.isShown && !e.isDefaultPrevented() && (this.isShown = !1, this.resetScrollbar(), this.escape(), t(document).off("focusin.bs.modal"), this.$element.removeClass("in").attr("aria-hidden", !0).off("click.dismiss.bs.modal"), t.support.transition && this.$element.hasClass("fade") ? this.$element.one("bsTransitionEnd", t.proxy(this.hideModal, this)).emulateTransitionEnd(300) : this.hideModal())
}, e.prototype.enforceFocus = function() {
t(document).off("focusin.bs.modal").on("focusin.bs.modal", t.proxy(function(t) {
this.$element[0] === t.target || this.$element.has(t.target).length || this.$element.trigger("focus")
}, this))
}, e.prototype.escape = function() {
this.isShown && this.options.keyboard ? this.$element.on("keyup.dismiss.bs.modal", t.proxy(function(t) {
27 == t.which && this.hide()
}, this)) : this.isShown || this.$element.off("keyup.dismiss.bs.modal")
}, e.prototype.hideModal = function() {
var e = this;
this.$element.hide(), this.backdrop(function() {
e.$element.trigger("hidden.bs.modal"), t("body").removeClass("modal-open")
})
}, e.prototype.removeBackdrop = function() {
this.$backdrop && this.$backdrop.remove(), this.$backdrop = null
}, e.prototype.backdrop = function(e) {
var n = this,
i = this.$element.hasClass("fade") ? "fade" : "";
if (this.isShown && this.options.backdrop) {
var r = t.support.transition && i;
if (this.$backdrop = t('<div class="modal-backdrop ' + i + '" />').appendTo(this.$body), this.$element.on("click.dismiss.bs.modal", t.proxy(function(t) {
t.target === t.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus.call(this.$element[0]) : this.hide.call(this))
}, this)), r && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in"), !e) return;
r ? this.$backdrop.one("bsTransitionEnd", e).emulateTransitionEnd(150) : e()
} else if (!this.isShown && this.$backdrop) {
this.$backdrop.removeClass("in");
var o = function() {
n.removeBackdrop(), e && e()
};
t.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one("bsTransitionEnd", o).emulateTransitionEnd(150) : o()
} else e && e()
}, e.prototype.checkScrollbar = function() {
document.body.clientWidth >= window.innerWidth || (this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar())
}, e.prototype.setScrollbar = function() {
var t = parseInt(this.$body.css("padding-right") || 0, 10);
this.scrollbarWidth && this.$body.css("padding-right", t + this.scrollbarWidth)
}, e.prototype.resetScrollbar = function() {
this.$body.css("padding-right", "")
}, e.prototype.measureScrollbar = function() {
var t = document.createElement("div");
t.className = "modal-scrollbar-measure", this.$body.append(t);
var e = t.offsetWidth - t.clientWidth;
return this.$body[0].removeChild(t), e
};
function n(n, i) {
return this.each(function() {
var r = t(this),
o = r.data("bs.modal"),
a = t.extend({}, e.DEFAULTS, r.data(), "object" == typeof n && n);
o || r.data("bs.modal", o = new e(this, a)), "string" == typeof n ? o[n](i) : a.show && o.show(i)
})
}
var i = t.fn.modal;
t.fn.modal = n, t.fn.modal.Constructor = e, t.fn.modal.noConflict = function() {
return t.fn.modal = i, this
}, t(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function(e) {
var i = t(this),
r = i.attr("href"),
o = t(i.attr("data-target") || r && r.replace(/.*(?=#[^\s]+$)/, "")),
a = o.data("bs.modal") ? "toggle" : t.extend({
remote: !/#/.test(r) && r
}, o.data(), i.data());
i.is("a") && e.preventDefault(), o.one("show.bs.modal", function(t) {
t.isDefaultPrevented() || o.one("hidden.bs.modal", function() {
i.is(":visible") && i.trigger("focus")
})
}), n.call(o, a, this)
})
}(jQuery),
function(t) {
var e = function(e) {
this.element = t(e)
};
e.VERSION = "3.2.0", e.prototype.show = function() {
var e = this.element,
n = e.closest("ul:not(.dropdown-menu)"),
i = e.data("target");
if (i || (i = (i = e.attr("href")) && i.replace(/.*(?=#[^\s]*$)/, "")), !e.parent("li").hasClass("active")) {
var r = n.find(".active:last a")[0],
o = t.Event("show.bs.tab", {
relatedTarget: r
});
if (e.trigger(o), !o.isDefaultPrevented()) {
var a = t(i);
this.activate(e.closest("li"), n), this.activate(a, a.parent(), function() {
e.trigger({
type: "shown.bs.tab",
relatedTarget: r
})
})
}
}
}, e.prototype.activate = function(e, n, i) {
var r = n.find("> .active"),
o = i && t.support.transition && r.hasClass("fade");
function a() {
r.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"), e.addClass("active"), o ? (e[0].offsetWidth, e.addClass("in")) : e.removeClass("fade"), e.parent(".dropdown-menu") && e.closest("li.dropdown").addClass("active"), i && i()
}
o ? r.one("bsTransitionEnd", a).emulateTransitionEnd(150) : a(), r.removeClass("in")
};
function n(n) {
return this.each(function() {
var i = t(this),
r = i.data("bs.tab");
r || i.data("bs.tab", r = new e(this)), "string" == typeof n && r[n]()
})
}
var i = t.fn.tab;
t.fn.tab = n, t.fn.tab.Constructor = e, t.fn.tab.noConflict = function() {
return t.fn.tab = i, this
}, t(document).on("click.bs.tab.data-api", '[data-toggle="tab"], [data-toggle="pill"]', function(e) {
e.preventDefault(), n.call(t(this), "show")
})
}(jQuery)
}), $__System.registerDynamic("10", [], !0, function(t, e, n) {
"use strict";
this || self;
var i = window.reqnode ? reqnode("electron") : null,
r = i ? i.remote.app : null,
o = window.bridge,
a = null,
s = {
clipboard: {
readText: function() {
return i ? i.clipboard.readText() || "" : o ? o.callSync("clipboard.readText") : void 0
},
writeForMac: function(t, e) {
return o.callHandler("clipboard.write", {
data: t,
shouldClear: !!e
})
},
read: function(t, e) {
var n = e || {},
i = t && (t.clipboardData || t.dataTransfer);
return i && (n.html = i.getData("text/html"), n.markhtml = i.getData("text/markhtml"), n.text = i.getData("text/plain")), o ? new Promise(function(t, e) {
o.callHandler("clipboard.read", {}, function(e) {
n.html || n.markhtml || (n.html = (e.html || [])[0], n.baseUrlInClipboard = (e.html || [])[1]), i || n.html || (n.text = e.text), n.files = e.files || [], t(n)
})
}) : Promise.resolve(n)
},
readImage: function() {
var t = File.editor.imgEdit;
return new Promise(function(e, n) {
var a = t.getTagetImageStorageFolder();
if (o) o.callHandler("clipboard.readImage", {
imageStorageFolder: a,
slient: a == t.getTagetImageStorageFolderFromSetting()
}, e);
else if (i) {
var s = i.clipboard.readImage();
s && !s.isEmpty() ? (a = a || r.getPath("userData") + "/typora-user-images", t.prepImageMove(a).then(function() {
var t = reqnode("path").join(a, Number(new Date) + ".png");
reqnode("fs").writeFileSync(t, s.toPNG()), e([t])
})) : e(null)
} else e(null)
})
}
},
menu: {
update: function(t, e) {
if (t) {
if (e && "string" == typeof t) {
var n = t;
(t = {})[n] = e
}
File.isNode ? i.ipcRenderer.send("menu.updateMenu", t) : o && o.callHandler("menu.updateMenu", t)
}
}
},
putSetting: function(t, e) {
o ? o.callHandler("setting.put", {
key: t,
value: e
}) : r && r.setting.put(t, e)
},
getSetting: function(t, e) {
var n = void 0;
return void 0 == (n = o ? o.callSync("setting.get", t) : r && r.setting.get(t)) ? e : n
},
showInFinder: function(t) {
File.isMac ? o.callHandler("path.showInFinder", t) : i.remote.shell.showItemInFolder(t)
},
fsCaseInsensitive: function() {
return null === a && (File.isNode && (a = File.isWin || reqnode("fs-plus").isCaseInsensitive), File.isMac && (a = !0)), a
}
};
window.JSBridge = s, e.JSBridge = s
}), $__System.registerDynamic("11", ["12", "13", "14"], !0, function(t, e, n) {
this || self, t("12");
var i = t("13"),
r = i.Node,
o = i.NodeMap,
a = i.TYPE,
s = t("14"),
u = /\uE027/gi,
c = ["-", "+", "*"];
r.UL_DEFAULT_START = c, r.prototype.toMark = function() {
var t = f.call(this);
return t instanceof Array ? t.join(File.useCRLF ? "\r\n" : "\n").replace(u, "") : t
};
var l = function(t, e) {
return "right" == t ? "-".repeat(e - 1) + ":" : "center" == t ? ":" + "-".repeat(e - 2) + ":" : "left" == t ? ":" + "-".repeat(e - 1) : "-".repeat(e)
},
f = function() {
var t, e, n, i = [];
function o(t) {
if (t.get("children").length) return v(t.get("children"));
var e = t.get("text") ? t.get("text") : "";
return e = e.replace(/(\u200B*):(\u200B*)/g, ":").replace(/\u200B\$/, "$")
}
function c(t, e) {
g(t, e.get("ahead") || 0)
}
function p(t, e, n) {
void 0 === n && (n = e.get("after") ? 1 : 0), g(t, void 0 == e.get("tail") ? n : e.get("tail"))
}
function g(t, e) {
for (var n = 0; n < e; n++) t.push("")
}
function b(t) {
return r.isType(t.get("parent"), a.list_item) && !1 !== t.get("parent").get("tight")
}
function y(t, e) {
var n = -1,
i = "",
o = this.get("alignText");
for (J = 0; J < t.length; J++)
if (K = this.get("align")[J], o) {
var a = o[J];
if (a) i += a, n = J;
else if (n > -1) {
var s = o[n],
u = this.get("align")[n];
" " != s[0] || " " === s[s.length - 1] || u && "center" != u || (o[n] = s + " ", i += " "), i += r.adjustAlignText(this, n, K)
} else i += ((H = e.getNthChild(J)).get("marginLeft") || "") + l(K, 4) + (H.get("marginRight") || "");
i += "|"
} else i += " " + l(K, t[J]) + " |";
return i
}
try {
switch (this.get("type")) {
case a.meta_block:
return i.push("---"), (i = i.concat((this.get("text") || "").replace(/^---/gm, "​---").split(/\r*\n/))).push("---"), p(i, this), i;
case a.heading:
if (c(i, this), this.get("pattern")) i = i.concat(this.get("pattern").replace("{0}", o(this)).split(/\r*\n/));
else if (!r.isType(this.get("parent"), a.list_item) && (1 == File.option.headingStyle || 3 == File.option.headingStyle) && this.get("depth") <= 2) i.push(o(this)), 3 == File.option.headingStyle ? i.push((1 == this.get("depth") ? "=" : "-").repeat(Math.max(1, s.wcswidth(this.get("text"))))) : i.push(1 == this.get("depth") ? "===" : "---");
else {
var w = "#".repeat(this.get("depth")) + " " + o(this);
2 == File.option.headingStyle && (w += " " + "#".repeat(this.get("depth"))), i.push(w)
}
return p(i, this), i;
case a.paragraph:
c(i, this), e = this.get("text").split(/\r?\n/g).map(function(t) {
return t || ""
}), i = /^( {4}|\t)/.exec(e[0]) ? i.concat(e.map(function(t) {
return t.replace(/^( {4}|\t)/, "​$1")
})) : i.concat(e);
return void 0 === (B = this.get("tail")) && this.get("after") && r.isType(this.get("parent"), a.list_item) && (B = b(this) ? 0 : void 0), r.isType(this.get("after"), a.paragraph) && B < 1 && this.unset("tail"), r.isType(this.get("after"), a.math_block) && !this.get("tail") && (B = 0), void 0 === B ? p(i, this, B) : g(i, B), i;
case a.blockquote:
return c(i, this), e = o(this), (A = this.get("userIndent")) && A.length == e.length ? e.map(function(t, n) {
e[n] = (A[n] || "") + t
}) : (this.unset("userIndent"), n = m(a.blockquote, 0, this, this.get("pattern")), e.map(function(t, i) {
e[i] = t ? n + t : n.replace(/\s+$/, "")
})), p(i = i.concat(e), this), "" !== i.last() && r.isType(this.get("after"), a.blockquote) && i.push(""), i;
case a.list:
c(i, this);
var F = this.get("style"),
k = this.isLoose(),
x = this.get("children").length,
_ = this;
if (x)
for (var $ = this.getFirstChild(), E = Number.isNaN(Number.parseInt(this.get("start"))) ? 0 : Number.parseInt(this.get("start")) - 1, C = 0; $;) {
$.set("tight", !k), e = f.call($), t = this.get("pattern"), k && t && $.get("markindent") && (t = d(F, t.trim(), $.get("markindent")));
var A, S = Math.min($.get("prespace") || 0, 3),
T = void 0 === this.get("isFixed") && File.option.olStyle || this.get("isFixed"),
M = (n = " ".repeat(S) + m(F, (T ? 0 : C) + E, $, t, (x + "").length)).length,
D = "",
L = F == r.ListType.ol ? (C + E + "").length - 1 : 0;
D = (M = $.get("subindent") ? Math.min(n.replace(/\s+$/, "").length + 4, $.get("subindent") + L) : _.get("subindent") ? Math.min(n.replace(/\s+$/, "").length + 4, _.get("subindent") + L) : File.option.indentByTab ? 0 : Math.max(M, File.option.indentSize)) ? " ".repeat(M) : "\t";
if ((A = $.get("userIndent")) && A.length == e.length) $.get("style") == r.ListType.task && (A[0].trim().length && -1 == A[0].indexOf("[") && (A[0] = A[0] + "[ ] "), $.get("checked") ? A[0] = A[0].replace("[ ]", "[x]") : A[0] = A[0].replace(/\[x\]/i, "[ ]")), e.map(function(t, n) {
e[n] = A[n] + t, i.push(e[n].replace(u, ""))
});
else {
$.unset("userIndent");
var R = n;
$.get("style") == r.ListType.task && (R = n + ($.get("checked") ? "[x] " : "[ ] ")), e.map(function(t, n) {
e[n] = (n ? t ? D : "" : R) + e[n], i.push(e[n].replace(u, ""))
})
}
C++, $ = $.get("after")
}
return r.isType(this.get("after"), a.list) && (!this.get("tail") || this.get("tail")) < 1 && this.get("pattern") == this.get("after").get("pattern") && this.get("style") == this.get("after").get("style") && (this.unset("tail"), i.push(""), b(this) && i.push("")), p(i, this, b(this) ? 0 : function(t) {
var e = _.get("tail"),
n = _.get("after");
if (0 === e) {
if (r.isType(n, a.paragraph)) return void t.unset("tail");
if (r.isType(n, a.fences) && /^\s+$/.exec(n.get("pattern") || "")) return void t.unset("tail")
}
return e
}(this)), i;
case a.list_item:
"string" == typeof(e = o(this)) && (e = [e]), i = i.concat(e);
var B;
for (void 0 == (B = this.get("tail")) && !this.get("tight") && this.get("after") && (B = 1), B > 0 && i.push(""); i.length > 2 && "" === i.last() && "" === i[i.length - 2];) i.pop();
return i;
case a.fences:
c(i, this);
var I = this.getText();
e = I.split(/\r*\n/), this.get("lang") ? (this.get("pattern") || "").trim() ? t = this.get("pattern") : (this.unset("pattern"), t = /^\s*```/gm.exec(this.get("text") || "") ? "~~~{0}" : "```{0}") : t = this.get("pattern") || "```{0}";
var N = t.replace(/\s*\{0\}/, "");
this.get("pattern") && (N = this.get("patternEnd") || N);
var O, j = t.match(/^\s+$/),
P = (t.match(/[`~]/) || [])[0];
P && (O = new RegExp("^(" + P + "{3})"));
for (C = 0; C < e.length; C++) e[C] = (j ? t : "") + (O ? e[C].replace(O, "​$1") : e[C]), e[C] = e[C] || "";
return !j && i.push(t.replace(/\{0\}/, this.get("lang") || "")), i = i.concat(e), !j && i.push(N), p(i, this), i;
case a.math_block:
return c(i, this), this.get("tagBefore") ? i.push("$$ {" + this.get("tagBefore") + "}") : i.push("$$"), i = i.concat(this.get("text").replace(/(^\n)|(\n$)/g, "").split(/\r?\n/).map(function(t) {
return t || ""
})), this.get("tagAfter") ? i.push("$$ {" + this.get("tagAfter") + "}") : i.push("$$"), p(i, this, r.isType(this.get("after"), a.paragraph) && r.isType(this.get("before"), a.paragraph) ? 0 : void 0), i;
case a.hr:
return i.push(this.get("pattern") || "------"), p(i, this), i;
case a.def_footnote:
return c(i, this), i.push("[^" + this.get("ref") + "]:" + s.orDefault(this.get("pattern"), " ") + o(this)), p(i, this, !this.get("after") || r.isType(this.get("after"), r.TYPE.def_footnote) ? 0 : 1), i;
case a.def_link:
c(i, this);
var q, U = this.safeGetStrAttr("title").length;
if (this.get("pattern")) {
var z = this.get("pattern").split(";");
q = z[0] + this.get("ref") + z[1] + this.safeGetStrAttr("href") + z[2], U && (q += (z[3] || "\t") + '"' + this.get("title") + '"')
} else q = "[" + this.get("ref") + "]: " + this.safeGetStrAttr("href") + (U ? '\t"' + this.get("title") + '"' : "");
return i.push(q), p(i, this, !this.get("after") || r.isType(this.get("after"), r.TYPE.def_link) ? 0 : 1), i;
case a.table:
if (c(i, this), this.get("userText")) return p(i = i.concat(this.get("userText").clone()), this), i;
for (var H, W, J, Y, G, K, V, Q = [], X = [], Z = 0, tt = this.getFirstChild(); tt;) {
for (W = tt.getFirstChild(), X[Z] = [], J = 0; W;) X[Z][J] = W.toMark().trim(), W = W.get("after"), 0 === Z && (Q[J] = 4), Q[J] = Math.max(s.wcswidth(X[Z][J]), Q[J]), Q[J] = Math.min(Q[J], 60), J++;
tt = tt.get("after"), Z++
}
var et = "npTable" == this.get("style") && Q.length > 1;
for (tt = this.getFirstChild(), Z = 0; Z < X.length; Z++) {
for (Y = "|", H = tt.getFirstChild(), J = 0; J < Q.length; J++) void 0 !== H.get("marginLeft") ? (Y += H.get("marginLeft") + X[Z][J] + H.get("marginRight"), Y += "|") : (Y += " ", G = Math.max(Q[J] - s.wcswidth(X[Z][J]), 0), Y += "right" == (K = this.get("align")[J]) ? " ".repeat(G) + X[Z][J] : "center" == K ? " ".repeat(V = ~~(G / 2)) + X[Z][J] + " ".repeat(G - V) : X[Z][J] + " ".repeat(G), Y += " |"), H = H.get("after");
et ? i.push(Y.replace(/(^\s*\|)|(\|\s*$)/g, "")) : i.push(Y.replace(/\s$/, "")), 0 === Z && (Y = "|" + y.call(this, Q, tt), et ? i.push(Y.replace(/(^\s*\|)|(\|\s*$)/g, "")) : i.push(Y.replace(/\s$/, ""))), tt = tt.get("after")
}
return p(i, this), i;
case a.table_row:
return console.sendError("cannot call toMark on table_row"), "";
case a.table_cell:
return h(o(this));
case a.toc:
return c(i, this), i.push(this.get("pattern") || "[TOC]"), ~(this.get("pattern") || "").indexOf("\n") && this.get("after") ? p(i, this, 2) : p(i, this), i;
case a.html_block:
return c(i, this), p(i = i.concat(this.get("text").replace(/(^\n)|(\n$)/g, "").split(/\r?\n/).map(function(t) {
return t || ""
})), this), i;
default:
return o(this)
}
} catch (t) {
return console.error(t.stack), i
}
},
h = function(t) {
var e = "",
n = "",
i = [],
r = 0,
o = 0;
return t = t.replace(/(^|[^\\])`[^`]*\|[^`]*`/g, function(t) {
return i.push(t), [e, ++r - 1, n].join("")
}), File.option.enableInlineMath && (t = t.replace(/(^|[^\\])\$[^$]*\|[^$]*\$/g, function(t) {
return i.push(t), [e, ++r - 1, n].join("")
})), t.replace(/\|/g, "\\|").replace(/\\\\\|/g, "\\|").replace(/\uE07A[^\uE07B]+\uE07B/g, function() {
return i[++o - 1]
})
},
d = function(t, e, n) {
var i = File.option.prettyIndent;
return void 0 !== n ? n -= 0 : n = Math.max(File.option.indentSize - 0, 2), t == a.blockquote ? ">" + " ".repeat(Math.min(n - 1, i ? 4 : 1)) : t === r.ListType.ol ? "{0}." + " ".repeat(Math.min(n - 2, i ? 4 : 1) || 1) : t === r.ListType.ul ? (e || c[File.option.ulStyle]) + " ".repeat(Math.min(n - 1, i ? 4 : 1)) : c[File.option.ulStyle] + " "
},
m = function(t, e, n, i) {
var o = File.option.indentSize;
return e++, i = i || d(t), (!$.isNumeric(o) || o < 2) && (o = 2), t == a.blockquote ? i : t === r.ListType.ol ? i.replace("{0}", e) : i
};
r.getIndentPrefix = m, r.getDefaultPrefixPattern = d, r.markFromArr = function(t) {
var e = v(t);
return e instanceof Array ? e.join(File.useCRLF ? "\r\n" : "\n").replace(u, "") : e
};
var v = function(t) {
var e = [],
n = "";
function i(t) {
var i = f.call(t);
i instanceof Array ? e = e.concat(i) : n += i
}
if (t.length)
if (t instanceof Array) t.map(function(t) {
i(t)
});
else {
var r = t.sortedFirst();
do {
i(r), r = r.get("after")
} while (r)
}
return e.length ? e : n
};
o.prototype.toMark = function() {
if (this.blocks.length > 0) {
var t = this.blocks.sortedFirst();
t = t.getLastBrother(!0);
var e = [],
n = "";
do {
var i = f.call(t);
i instanceof Array ? e = e.concat(i) : n += i, t = t.get("after")
} while (t);
return e.length ? e.join(File.useCRLF ? "\r\n" : "\n").replace(u, "") : n
}
return ""
}, r.getIndentPrefix = m
}), $__System.registerDynamic("15", ["12", "13", "14", "16", "17", "18", "19"], !0, function(t, e, n) {
this || self, t("12");
var i = t("13"),
r = i.Node,
o = (i.NodeMap, i.TYPE),
a = (i.NodeCollectionUtils, t("14")),
s = t("16"),
u = (t("17"), t("18")),
c = t("19"),
l = document.querySelector("#md-rawblock-tooltip-templ").innerHTML;
r.prototype.toHTML = function(t, e) {
var n, f = ["h1", "h2", "h3", "h4", "h5", "h6"];
File.option.expandSimpleBlock && r.isType(this, o.paragraph) && (f.indexOf(e) > -1 ? this.set("depth", f.indexOf(e) + 1) : this.unset("depth"));
function h(e, n) {
var a, s = e.get("children");
return void 0 !== t && null !== t ? t : s && s.length > 0 ? i.NodeCollectionUtils.toHTML(s, n) : (a = e.safeGetStrAttr("text"), r.isType(e, o.paragraph) && /^\u200b( {4}|\t)/g.exec(a) && (a = a.replace(/^\u200b( {4}|\t)/g, "$1"), e.set("text", a)), e.cursorDiff = [], c.parseInline(e.safeGetStrAttr("text"), {
attr: !r.isType(e, o.heading)
}, e.cursorDiff))
}
function d(t) {
var n = function(t) {
try {
if (r.isType(t, o.fences, o.hr, o.def_link, o.def_footnote, o.table, o.math_block)) return !1;
if (r.isType(t, o.list_item) && t.get("style") == r.ListType.task) return !1;
if (t.canContainBlock()) return;
return File.inBusyMode ? 0 == t.get("children").length || void 0 : 0 == t.get("children").length || r.isType(t.get("parent"), o.list_item) || void 0
} catch (t) {}
}(t),
i = n ? " contenteditable='true' " : !1 === n ? " contenteditable='false' " : "",
a = e ? "mdlike='" + e + "' " : " ",
s = " cid = '" + t.id + "' mdtype = '" + t.get("type") + "' " + i + a;
return (t.get("text") || "").length > 1e4 && (s += " spellcheck='false' "), s
}
switch (this.get("type")) {
case o.meta_block:
var m = this.get("text") || "";
return m.match(/^\n/g) && (m = m.replace(/^\n/g, "\n\n")), "<pre " + d(this) + " class='md-meta-block md-end-block' >" + a.escape(m, !1, !0) + "\n</pre>";
case o.paragraph:
return "<p " + d(this) + " class='md-end-block md-p'>" + h(this) + "</p>";
case o.raw_edit:
return "<p class='rawedit' contenteditable ='true' spellcheck='false' " + d(this) + ">" + this.safeGetStrAttr("text", !0) + "</p>";
case o.heading:
return "<h" + this.get("depth") + d(this) + "class='md-end-block md-heading' >" + h(this) + "</h" + this.get("depth") + ">";
case o.blockquote:
return "<blockquote " + d(this) + " >" + h(this) + "</blockquote>";
case o.list:
var v = this.get("style"),
p = ((this.get("pattern") || r.UL_DEFAULT_START[File.option.ulStyle] || "-").match(/[*+-]/) || [])[0];
if (p = " data-mark='" + p + "' ", v == r.ListType.ol) {
var g = "" === this.get("start") ? void 0 : this.get("start") - 0;
return "<ol class='ol-list' " + (g = Number.isNaN(g) || 1 == g ? "" : "start='" + this.get("start") + "' ") + d(this) + " >" + h(this) + "</ol>"
}
return "<ul class='ul-list' " + d(this) + p + " >" + h(this) + "</ul>";
case o.list_item:
return this.get("parent") && this.get("style") === r.ListType.task ? "<li class='md-list-item task-list-item md-task-list-item task-list-" + (this.get("checked") ? "done" : "not-done") + " ' " + d(this) + "><input type='checkbox' " + (this.get("checked") ? "checked" : "") + "></input>" + h(this) + "</li>" : "<li class='md-list-item' " + d(this) + " >" + h(this) + "</li>";
case o.fences:
var b = "<pre spellcheck='false' class='md-fences mock-cm md-end-block" + (File.option.showLineNumbersForFence ? " md-fences-with-lineno" : "") + "' lang='" + a.escape(this.get("lang") || "") + "' contenteditable='false'" + d(this) + ">" + (this.get("text") && this.get("text").trim().length ? a.escape(this.get("text")) + "\n" : "<br/>") + "</pre>";
if (s.isDiagramType(this.get("lang"))) {
var y = File.editor.findElemById(this.cid);
if (y.find("textarea").val() == this.get("text")) {
b = $(b).append(y.find(".md-diagram-panel").clone())[0].outerHTML
}
}
return b;
case o.hr:
return "<div tabindex='-1' contenteditable='false' " + d(this) + " class='md-hr md-end-block' ><hr /></div>";
case o.def_footnote:
return "<div class='footnotes md-def-footnote md-end-block' contenteditable='false'" + d(this) + "><span class='md-def-name' contenteditable='true'>" + a.escape(this.get("ref") ? this.get("ref") : "​") + "</span><span class='md-def-split md-def-f' contenteditable='false' >&nbsp;</span><span class='md-def-content' contenteditable='true'>" + h(this) + "</span></div>";
case o.def_link:
return "<div class='footnotes md-def-link md-end-block' contenteditable='false'" + d(this) + "><span class='md-def-name' contenteditable='true'>" + a.escape(this.get("ref") ? this.get("ref") : "​") + "</span><span class='md-def-split md-def-f' contenteditable='false' >&nbsp;</span><span class='md-def-content md-def-url md-auto-disp' href='#' contenteditable='true'>" + a.escape(this.get("href")) + "</span><span class='md-def-split md-auto-hide' contenteditable='false'>&nbsp;</span><span class='md-def-title md-auto-disp md-auto-hide' contenteditable='true'>" + a.escape(this.get("title")) + "</span></div>";
case o.table:
this.get("align").length, b = "<figure class='md-table-fig' contenteditable='false' " + d(this) + "><table class='md-table'>";
for (var w = this.getFirstChild(); w;) w.get("before") ? b += w.toHTML() : b += "<thead>" + w.toHTML() + "</thead><tbody>", (w = w.get("after")) || (b += "</tbody>");
return b += "</table></figure>";
case o.table_row:
b = "<tr class='md-end-block' " + d(this) + ">", w = this.getFirstChild();
var F, k = this.get("parent").get("align") || [],
x = 0,
_ = this.get("before") ? "td" : "th";
for (this.get("parent").get("align") || this.get("parent").set("align", []); w;) b += "<" + _ + (F = (F = k[x]) ? " style='text-align:" + F + ";' " : "") + ">" + w.toHTML() + "</" + _ + ">", w = w.get("after"), x++;
return b += "</tr>";
case o.table_cell:
return "<span contenteditable='true' class='td-span' " + d(this) + ">" + h(this) + "</span>";
case o.math_block:
var E = document.createElement("script");
return E.textContent = this.get("text") || "<Empty \\space Math \\space Block>", E.setAttribute("type", "math/tex; mode=display"), "<div contenteditable='false' spellcheck='false' class='mathjax-block md-end-block md-math-block md-rawblock' id='mathjax-" + this.cid + "' " + d(this) + ">" + l.replace("{type}", $.localize.getString("Math", "Menu")) + "<div class='md-rawblock-container md-math-container' tabindex='-1'>" + $(E.outerHTML)[0].outerHTML + "</div></div>";
case o.toc:
return n = this.get("in"), "<div contenteditable='false' tabindex='-1' class='md-toc md-end-block' " + d(this) + "><div class='md-tooltip-hide md-toc-tooltip'><span>" + $.localize.getString("Table of Contents") + "</span> <button type='button' class='btn md-delete-toc'><span class='ty-icon ty-delete'></span></button></div><p class='md-toc-content'>" + (n.toc ? n.toc.getTocInnerHTML() : "") + "</p></div>";
case o.html_block:
return u.HIDDEN_TYPE.indexOf(this.get("displayStyle") || this.get("style")) > -1 && !u.checkIsWhiteList(this) ? "<div contenteditable='false' spellcheck='false' class='md-htmlblock md-rawblock md-end-block' " + d(this) + ">" + l.replace("{type}", "HTML") + "<div class='md-htmlblock-panel md-rawblock-control' style='display:none;' contenteditable='false'></div><div class='md-htmlblock-container md-rawblock-container md-raw-html-src' contenteditable='false'><div class='md-raw-html-src-content'>" + a.escape(this.get("text")) + "</div></div></div>" : "<div contenteditable='false' spellcheck='false' class='md-htmlblock md-rawblock md-end-block' " + d(this) + "><span style='position:absolute;'>​</span>" + l.replace("{type}", "HTML") + "<div class='md-htmlblock-panel md-rawblock-control' style='display:none;' contenteditable='false;'></div><div class='md-htmlblock-container md-rawblock-container' tabindex='-1' contenteditable='false'>" + u.buildHTML(this) + "</div><span style='position:absolute;'>​</span></div>";
default:
return "<p " + d(this) + ">unknow type: " + this.get("type") + "</p>"
}
}
}), $__System.registerDynamic("1a", ["12", "13", "14", "1b", "16", "1c", "1d"], !0, function(t, e, n) {
"use strict";
this || self, t("12");
var i = t("13"),
r = i.Node,
o = i.TYPE,
a = (i.NodeCollectionUtils, t("14")),
s = t("1b"),
u = t("16"),
c = t("1c"),
l = t("1d");
r.normalizeNode = function(t) {
if (0 == t.get("children").length && r.isType(t, o.blockquote)) {
var e = new r({
type: o.paragraph,
parent: t,
in: t.get("in")
});
return r.normalizeNode(e)
}
};
r.genNormalSplitExitFunc = function(t, e, n) {
return function(t, i) {
var a = {
prev: t,
next: i
};
return t.get("type") == o.paragraph && (!n && t.parseFrom({
skips: {
enableStartMatch: !0
}
}), r.isType(t, o.paragraph) || (a.oldCid = t.cid, a.prev = t)), i.get("type") == o.paragraph && (!e && function(t, e) {
try {
var n, i, a = !e.isDeleted() && e.get("parent");
if (a = r.isType(a, o.list_item) && a.get("parent"), !(n = r.isType(a, o.list) && a.get("style"))) return;
if ((i = t.get("text")).match(/^(\s{2, }|\t)/)) return;
n == r.ListType.ol ? i = i.replace(/^\s*\d+\.\s+/, "") : n == r.ListType.ul && (i = i.replace(/^\s*[+*-]\s+/, "")), t.set("text", i)
} catch (t) {}
}(i, t), !n && i.parseFrom(), r.isType(i, o.paragraph) || (a.next = i)), a
}
}, r.prototype.breakOn = function(t, e, n) {
var i, a;
if (r.isType(this, o.table, o.table_row, o.table_cell, o.blockquote, o.list, o.list_item)) return null;
var u = e.selection.buildUndo();
if (r.isType(this, o.def_footnote)) {
var c = e.getJQueryElem(window.getSelection().baseNode);
i = c.closest(".md-def-name").length ? e.selection.getOffset(c.closest(".md-def-name")) : this.get("ref").length + 1 + e.selection.getOffset(c.closest(".md-def-content"))
} else {
var l = e.findElemById(this.id);
l.find(".md-emoji").each(function() {
var t = [];
this.childNodes.forEach(function(e) {
3 == e.nodeType && t.push(e)
});
for (var e = 0; e < t.length; e++) this.removeChild(t[e])
}), l.find(".md-ruby-container").remove(), i = e.selection.getOffset(l)
}
if (!this.get("children").length && (a = this.getText(!1).length, r.isType(this, o.def_link, o.def_footnote) && (a += this.get("ref").length + 1), !this.get("children").length)) {
var f;
return (f = function(e) {
if (e = e.getClosetBlock(), a <= 1 && r.isType(e, o.def_footnote, o.def_footnote) && !t && !n && r.isEmptyBlock(e, null, !0)) return (c = s.makeEmptyCommand(u)).undo.push(s.buildReplaceUndo(e)), e.unset("ahead"), e.unset("tail"), e.set("type", o.paragraph), r.normalizeNode(e), c.redo.push(s.buildReplaceUndo(e)), c.redo.push({
type: "cursor",
id: e.getLastChild().cid,
start: 0
}), {
command: c,
nextFocus: e.getLastChild().cid,
oldCid: e.cid,
newHtml: e.toHTML()
};
if (0 == i && 0 == a && !t && !n && e.closest(o.blockquote, o.list) && e.get("parent") && e.get("parent").canContainBlock(!0) && (e.get("parent").get("type") != o.list_item || !e.get("after")) && ! function(t) {
var e = t.get("parent");
return r.isType(e, o.list_item) && !t.get("before") && !t.get("after") && !e.get("before") && !e.get("after") && e.get("parent").get("attachTo")
}(e)) {
var c;
(c = s.makeEmptyCommand()).undo.push(u);
var l = {},
f = e.get("before") && r.isEmptyBlock(e.get("before"));
return l = e.upStream(f), c.undo = c.undo.concat(l.command.undo), c.redo = c.redo.concat(l.command.redo), l.nextFocus = l.nextFocus || e.id, c.redo.push({
type: "cursor",
id: l.nextFocus,
start: 0
}), l.command = c, l
}
}(this.getClosetBlock())) ? f : (f = function(t) {
if (i == a && t == e.nodeMap.getFirst() && r.isType(t, o.paragraph) && (u = t.get("text"), File.shouldRemapPunctuation() ? "---" == (u || "").replace(/\u2013/g, "--").replace(/\u2014/g, "---") : "---" == u)) {
var n = e.stylize.insertMetaBlock(!0);
return n.command.undo.push(s.buildReplaceUndo(t)), t.set("text", ""), n.command.redo.push(s.buildReplaceUndo(t)), n.newHtml = n.node.toHTML() + t.toHTML(), n.nextFocus = n.node.id, n.oldCid = t.id, n
}
var u
}(this)) ? f : function(i, c, l) {
l = l || s.makeEmptyCommand();
var f = {},
m = c == a && c > 0,
v = i.getClosetBlock();
return l.undo.push(u), r.isType(v.get("parent"), o.list_item) && !t ? l.undo.push(s.buildReplaceUndo(v.get("parent"))) : l.undo.push(s.buildReplaceUndo(v)), v.unset("ahead"), v.unset("tail"), n && r.isType(i, o.paragraph) ? h(i, c, l, m) : (f = r.splitAt(i, c, e, t), l.redo.push(e.undo.buildReplaceUndo(f.prev)), f.prev && f.prev.contains(i) || l.redo.push(e.undo.buildReplaceUndo(i)), i = f.insertArray[0] ? f.insertArray[0].get("before") : i, f.oldCid = i.cid, s.addUndoForInsertArray(l, f.insertArray), f.newHtml = i.toHTML() + f.insertArray.map(function(t) {
return t.toHTML()
}).join(""), d(f, m), l.redo.push({
type: "cursor",
id: f.nextFocus,
start: 0
}), f.command = l, f)
}(this, i = Math.min(a, i))
}
function h(t, i, a, u) {
if (n && r.isType(t, o.paragraph)) {
var c = t.get("text") || "";
if ("\n" == c[i] ? n = !1 : "\n" == c[i - 1] && (n = !1, i--), a.undo.push(s.buildReplaceUndo(t)), t.set("text", c.substring(0, i)), !n) return a.redo.push(s.buildReplaceUndo(t)),
function(t, e, n) {
var i = new r({
type: o.paragraph,
text: n,
in: t.get("in")
});
return t.insert(i), s.addUndoForInsert(e, i), {
oldCid: t.cid,
prev: t,
next: i,
command: e,
nextFocus: i.cid,
newHtml: t.toHTML() + i.toHTML()
}
}(t, a, c.substring(i + 1));
var l = r.smartSplit(e.findElemById(t.id), i);
t.set("text", l[0]);
var f, h = t.parseFrom({
skips: {
enableStartMatch: !0
}
}, void 0, !0);
if (1 == h[1].length && r.isType(h[1][0], o.paragraph)) return t.set("text", l[0] + "\n" + l[1]), a.redo.push(s.buildReplaceUndo(t)), f = {
type: "cursor",
id: t.id,
start: l[0].length + 1
}, a.redo.push(f), {
oldCid: t.cid,
nextFocus: t.cid,
prev: t,
newHtml: t.toHTML(),
command: a,
cursor: f
};
a.redo.push(s.buildReplaceUndo(t));
var m = h[1],
v = m.last(),
p = v.getVeryFirst(!0).getClosetBlock();
r.isType(p, o.paragraph) ? (f = {
type: "cursor",
id: p.id,
start: p.get("text").length + 1
}, p.set("text", p.get("text") + "\n" + l[1])) : (f = {
type: "cursor",
id: (p = new r({
type: o.paragraph,
text: l[1]
})).id,
start: 0
}, m.last().insert(p), m.push(p)), s.addUndoForInsertArray(a, m.subarray(1));
var g = {
oldCid: t.cid,
nextFocus: p.cid,
prev: v,
next: v.get("after"),
newHtml: m.map(function(t) {
return t.toHTML()
}).join(""),
command: a,
cursor: f
};
return 0 == f.start ? (g.cursor = void 0, d(g, u), a.redo.push({
type: "cursor",
id: g.nextFocus,
start: 0
})) : a.redo.push(f), g
}
}
function d(t, e) {
if (r.isType(t.prev, o.meta_block) && e && t.prev.get("text").match(/\n$/)) t.nextFocus = t.next.getVeryFirst().id;
else if (e && r.isType(t.prev && t.prev.getLastChild() || t.prev, o.math_block, o.fences, o.meta_block, o.html_block)) {
var n = t.prev.getVeryFirst(!0);
!r.isType(n, o.html_block) || /\n/.exec(n.get("text")) || n.get("depth") ? t.nextFocus = n.id : t.nextFocus = t.next.getVeryFirst().cid
} else e && r.isType(t.prev, o.table) ? t.nextFocus = t.prev.getLastChild().getVeryFirst().cid : t.nextFocus = t.next.getVeryFirst().cid
}
}, r.isEmptyBlock = function(t, e, n) {
var i = n ? a.isNullOrBlank : a.isNullOrEmpty;
if (r.isType(t, e || [])) return !1;
if (t.get("children").length) {
if (r.isType(t, o.paragraph)) return i(t.get("text"))
} else {
if (r.isType(t, o.def_link)) return i(t.get("ref")) && i(t.get("href")) && i(t.get("title"));
if (r.isType(t, o.def_footnote)) return i(t.get("ref")) && i(t.get("text"));
if (!r.isType(t, o.table_cell, o.table_row, o.hr, o.toc)) return i(t.get("text"))
}
return !1
};
r.smartSplit = function(t, e, n) {
var i, r, o, a = c.createRange();
if (0 == e) return ["", t.rawText()];
if (e == (t[0].textContent || t[0].innerText).length) {
var s = t.rawText();
return File.isMac && File.option.smartQuote && !File.option.convertSmartOnRender && /["']$/.exec(s) && s.length > 1 && (s = s.replace(/["']$/, function(t) {
return l.userQuote("'" == t ? 3 : 1, !1, !0)
})), [s, ""]
}
n ? (o = $.parseHTML("<span />")[0], t[0].appendChild(o), t.prepend("<span />"), a.moveToBookmark({
containerNode: t[0],
start: e,
end: e
}), a.setEndAfter(o), r = (o = a.extractContents()).querySelectorAll("[md-inline='strong'], [md-inline='em'], [md-inline='del'], [md-inline='code']"), i = t[0].querySelectorAll("[md-inline='strong'], [md-inline='em'], [md-inline='del'], [md-inline='code']")) : (t[0].childElementCount < 3 && (o = $.parseHTML("<span />")[0], t[0].insertBefore(o, t[0].firstChild), t.append("<span />")), a.moveToBookmark({
containerNode: t[0],
start: 0,
end: e
}), o && a.setStart(o, 0), i = (o = a.extractContents()).querySelectorAll("[md-inline='strong'], [md-inline='em'], [md-inline='del'], [md-inline='code']"), r = t[0].querySelectorAll("[md-inline='strong'], [md-inline='em'], [md-inline='del'], [md-inline='code']"));
for (var u = 0; u < i.length; u++) {
(f = $(i[u])).find(":not(.md-meta)").text().length ? f.children(".md-after").length || f.append(f.children(".md-before").clone().removeClass("md-before").addClass("md-after")) : f.html("")
}
for (u = 0; u < r.length; u++) {
var f;
(f = $(r[u])).find(":not(.md-meta)").text().length ? f.children(".md-before").length || f.prepend(f.children(".md-after").clone().removeClass("md-after").addClass("md-before")) : f.html("")
}
var h = o.querySelectorAll("svg");
for (u = 0; u < h.length; u++) h[u].parentElement.removeChild(h[u]);
return [$(o).rawText(), t.rawText()]
};
r.splitAt = function(t, e, n, i, a, s) {
if (s = s || !a, r.isType(t, o.def_link, o.def_footnote)) return function(t, e, n) {
var i, a, s = t.clone(),
u = t.get("ref");
if (e <= u.length) t.set("ref", u.substring(0, e)), s.set("ref", u.substring(e)), s.set("href", t.get("href")), s.set("title", t.get("title")), t.set("href", ""), t.set("title", ""), i = "", a = t.get("text");
else if (r.isType(t, o.def_link)) {
var c = t.get("href") || "",
l = t.get("title") || "";
e <= u.length + c.length ? (t.set("title", ""), s.set("ref", ""), t.set("href", c.substring(0, e - u.length - 1)), s.set("href", c.substring(e - u.length - 1))) : (s.set("ref", ""), s.set("href", ""), t.set("title", l.substring(0, e - u.length - c.length - 1)), s.set("title", l.substring(e - u.length - c.length - 1)))
} else {
var f = t.get("text") || "";
s.set("ref", ""), i = f.substring(0, e - u.length - 1), a = f.substring(e - u.length - 1)
}
return t.set("text", i), r.isType(s, o.def_link) || s.set("text", a || ""), r.isEmptyBlock(s) && !r.isType(s, o.paragraph) && (s.set("type", o.paragraph), s.set("text", "")), t.insert(s), {
oldCid: t.cid,
prev: t,
next: s,
insertArray: [s]
}
}(t, e);
var u, c, l, f = t.clone();
if (t.get("children").length) return console.error("cannot do Node.split at this ndoe"), null;
r.isType(t, o.paragraph, o.heading) ? (u = (l = r.smartSplit(n.findElemById(t.id), e))[0].replace(/\n$/, ""), c = l[1].replace(/^\n/, ""), r.isType(t.get("parent"), o.list_item) && t.get("parent").get("parent").get("children").toArray().forEach(function(t) {
t.unset("tail")
})) : (u = t.getText().substring(0, e), c = t.getText().substring(e)), t.set("text", u), f.set("text", c);
var h = t,
d = [h],
m = [];
a || r.isType(t, o.paragraph) && !a && (m = (d = t.parseFrom({
skips: {
enableStartMatch: !0
}
}, void 0, !0)[1]).subarray(1), h = d.last().getVeryFirst().getClosetBlock()), h.insert(f), d.last() == h && m.push(f), r.isEmptyBlock(f) ? f.set("type", o.paragraph) : r.isEmptyBlock(h) && h.set("type", o.paragraph);
var v = {
prev: h,
next: f,
insertArray: m
};
if (i) return v;
if (s && r.isType(h.get("parent"), o.list_item) && !h.get("before")) {
var p = h.get("parent"),
g = p.clone();
p.get("style") == r.ListType.task && g.set("checked", !1), p.insert(g), g.appendTillEnd(f), m = d.subarray(1), d.last() == h && (d = [p]), d.last() == p && m.push(g), v = {
prev: p,
next: g,
insertArray: m
}
}
return v
};
r.getTreePosition = function(t, e) {
function n(t) {
return t.get("parent") ? 1 + n(t.get("parent")) : 0
}
if (t == e) return [t, t, e];
var i = n(t) - n(e);
if (i > 0)
for (; i > 0;) t = t.get("parent"), i--;
else if (i < 0)
for (; i < 0;) e = e.get("parent"), i++;
return function t(e, n) {
return e == n ? [e, e, n] : e.get("parent") == n.get("parent") || !e.get("parent") && !e.get("parent") ? [e.get("parent"), e, n] : t(e.get("parent"), n.get("parent"))
}(t, e)
}, r.prototype.copyContentFrom = function(t) {
var e = this;
r.property.map(function(n) {
e.set(n, t.get(n))
})
}, r.prototype.clone = function() {
var t = new r;
return t.copyContentFrom(this), t.set("in", this.get("in")), t
};
r.reverseAttrFromElem = function(t, e, n, i) {
var s, u = e.attr("mdtype");
t.set("type", u), n && (e.find("[data-emoji]").text(function() {
return this.getAttribute("data-emoji")
}), e.find(".md-meta, .md-content").remove()), t.set("text", !i && r.isType(u, o.paragraph, o.def_footnote, o.heading) ? (c = e, c.find("[md-inline='image'], [md-inline='imgtag']").each(function() {
var t = $(this),
e = t.attr("data-src");
if (!/^[a-z0-9\-]+:/i.exec(e)) {
var n = t.find("img").attr("src") || "",
i = t.text(),
r = File.editor.imgEdit.resolveImagePath(n.replace(/^file:\/\//, "").replace(/[#?]([^.]*)$/, ""));
i = "image" == this.getAttribute("md-inline") ? i.replace(/(\(<?)((?:\([^)]*\)|[^()])*?)(>?[ \t]*((['"])(.*?)\5[ \t]*)?\))/, "$1" + r + "$3") : i.replace(/(^<img(\s+.+)*?\s+src=)("([^"]+)"|'([^']+)')(.*?(\/?\s*>.*?(<\/img>)?))/, '$1"' + r + '"$6'), t.text(i)
}
}), c).text() : e.text());
var c;
switch (u) {
case t.TYPE.heading:
t.set("depth", e[0].tagName.replace(/H/gi, ""));
break;
case t.TYPE.list:
t.set("style", e[0].tagName.toLowerCase()), t.set("start", (e[0].getAttribute("start") || 1) - 0);
break;
case t.TYPE.math_block:
break;
case t.TYPE.fences:
t.set("lang", a.unescape(e.attr("lang")) || e.find(".ty-input").text()), t.set("text", e.find("textarea[id]").val() || e.text());
break;
case t.TYPE.list_item:
e.hasClass("md-task-list-item") && t.set("style", r.ListType.task), t.set("checked", "checked" == e.children("input").attr("checked"));
break;
case t.TYPE.def_link:
t.set("ref", e.find(".md-def-name").text()), t.set("title", e.find(".md-def-title").text()), t.set("href", e.find(".md-def-content").text());
break;
case t.TYPE.def_footnote:
t.set("text", e.find(".md-def-content").rawText()), t.set("ref", e.find(".md-def-name").text());
break;
case t.TYPE.table:
s = [], e.find("tbody>tr:first").children().toArray().map(function(t) {
s[t.cellIndex] = t.style.textAlign, "" == t.style.textAlign && (s[t.cellIndex] = null)
}), s.length || e.find("thead>tr:first").children().toArray().map(function(t) {
s[t.cellIndex] = t.style.textAlign, "" == t.style.textAlign && (s[t.cellIndex] = null)
}), t.set("align", s);
break;
case t.TYPE.table_row:
t.set("header", e.closest("thead").length > 0);
break;
case t.TYPE.html_block:
t.set("text", e.text()), t.set("style", e.attr("data-tag"))
}
}, r.reverse = function(t, e, n, i) {
if (t.length && t[0].hasAttribute("mdtype")) {
var o, a, s = new r({ in: e
});
return r.reverseAttrFromElem(s, t, n, i), s.get("type") == s.TYPE.table ? (t.find("tr[mdtype]").toArray().map(function(t) {
(a = r.reverse($(t), e, n, i)).set("parent", s), a.set("before", o), o = a
}), r.TableEdit.valify(s)) : s.get("type") == s.TYPE.table_row ? t.children().children("span[mdtype]").toArray().map(function(t) {
(a = r.reverse($(t), e, n, i)).set("parent", s), a.set("before", o), o = a
}) : t.children("[mdtype]").toArray().map(function(t) {
(a = r.reverse($(t), e, n, i)).set("parent", s), a.set("before", o), o = a
}), s
}
}, r.prototype.downStream = function(t) {
var e = new r({
type: t,
parent: this.get("parent"),
before: this.get("before"),
after: this.get("after"),
in: this.get("in"),
attachTo: this.get("attachTo")
});
this.set("parent", e)
}, r.prototype.upStream = function(t, e) {
var n, i = this.get("parent"),
a = {};
if (a.command = e || s.makeEmptyCommand(), i)
if (!r.isType(i, o.list_item) || this.get("before") || this.get("after")) {
a.command.undo.push(s.buildReplaceUndo(i)), a.oldCid = i.id;
var u = this.get("after"),
c = this.get("before"),
l = i.get("type") == o.list_item;
if (this.set("parent", i.get("parent")), i.get("parent") || this.set("attachTo", this.get("in")), this.get("type") !== o.table && (this.get("type") == o.list_item && (this.set("type", o.paragraph), this.set("text", ""), this.clearChildren(), a.nextFocus = this.cid), i.get("type") == o.list_item)) {
this.set("type", i.get("type")), this.set("style", i.get("style"));
var f = new r({
type: o.paragraph,
in: this.get("in")
});
f.clearChildren(), f.set("parent", this), r.normalizeNode(f)
}
if (a.newHtml = this.toHTML(), u)
if (u.set("before", this.canContainBlock(!1) ? this.getFirstChild() : null), l) {
do {
u.set("parent", this), u = u.get("after")
} while (u);
a.newHtml = this.toHTML()
} else {
n = i.clone();
do {
u.set("parent", n), u = u.get("after")
} while (u);
a.newHtml += n.toHTML()
}
c ? (a.command.redo.push(s.buildReplaceUndo(i)), i.insert(this), s.addUndoForInsert(a.command, this), a.newHtml = i.toHTML() + a.newHtml) : (i.insert(this, !0), s.addUndoForInsert(a.command, this), s.addUndoForRemove(a.command, i), i.remove()), n && (this.insert(n), s.addUndoForInsert(a.command, n))
} else {
var h = s.buildReplaceUndo(i);
this.giveChildrenTo(i), this.remove(), (a = i.upStream()).command.undo.unshift(h), a.nextFocus = a.nextFocus || i.id
}
return a
}, r.prototype.attr = function(t, e, n, i) {
function s(i, r) {
var o = n.undo.UndoManager.makeEmptyCommand();
return o.undo.push({
type: "attr",
id: i.id,
key: t,
value: r || i.safeGetStrAttr(t)
}), o.redo.push({
type: "attr",
key: t,
id: i.id,
value: e
}), o
}
if (this.get(t) != e) {
i || n.store();
var c = s(this);
switch (i || "align_idx" == t || n.undo.register(c), e = "string" == typeof e ? a.escape(e) : e, t) {
case "tagBefore":
case "tagAfter":
(f = n.mathBlock.currentCm) && f.cid == this.cid || n.mathBlock.startEditing(this.cid), this.set(t, e);
var l = $("[cid='" + this.id + "'] .md-rawblock-" + ("tagBefore" == t ? "before" : "after") + " .ty-input").text(e || "").focus();
n.selection.selectAllElem(l);
break;
case "lang":
var f;
if (!(f = n.fences.getCm(this.id))) {
Reporter.error(new Error("Failed to get CodeMirror"));
break
}
var h = $("[cid='" + this.id + "']");
if (f.options.mode == e) break;
u.isDiagramType(f.options.mode) && n.diagrams.cancelDiagram(this.id), f.setOption("mode", getCodeMirrorMode(e));
var d = n.fences.getOptionsFromFencesAttr(e);
if (File.option.showLineNumbersForFence || (d.lineNumbers ? (f.setOption("lineNumbers", !0), h.addClass("md-fences-with-lineno")) : h.removeClass("md-fences-with-lineno")), d.firstLineNumber && f.setOption("firstLineNumber", d.firstLineNumber), f.refresh(), this.set("lang", e), h.attr("lang", e).find(".CodeMirror").attr("lang", (e || "").toLowerCase()), i) {
var m = $("[cid='" + this.id + "'] .code-tooltip").show().find(".ty-input").text(e || "").focus();
n.selection.selectAllElem(m)
}
u.isDiagramType(e) && n.diagrams.updateDiagram(this.id);
break;
case "checked":
var v = document.querySelector("[cid='" + this.id + "']>input");
e ? (v.setAttribute("checked", "checked"), v.parentElement.classList.remove("task-list-not-done"), v.parentElement.classList.add("task-list-done")) : (v.removeAttribute("checked"), v.parentElement.classList.remove("task-list-done"), v.parentElement.classList.add("task-list-not-done")), v.checked = e || !1, this.set("checked", e || !1);
break;
case "href-title":
if (this.get("type") == o.image) {
var p = e.split(/\s/);
if (n.findElemById(this.id).find("img").attr("src", p[0]), this.set("href", p[0]), this.set("title", p[1]), i) {
(l = $("[cid='" + this.id + "']")).hasClass("onfocus") || (l.addClass("onfocus").focus(), n.EditHelper.showTooltipForImage(n, l), $("[cid='" + this.id + "'] input.t-bracket-input").val(e || "").focus())
}
}
break;
case "alt":
if (this.get("type") == o.image && (n.findElemById(this.id).find("img").attr("alt", e), this.set("alt", e), i)) {
(l = $("[cid='" + this.id + "']")).hasClass("onfocus") || (l.addClass("onfocus").focus(), n.EditHelper.showTooltipForImage(n, l), $("[cid='" + this.id + "'] input.t-alt-input").val(e || "").focus())
}
break;
case "align_idx":
if (this.get("type") == o.table) {
var g = e[0],
b = e[1],
y = e[2];
l = n.findElemById(this.id), c = s(this, [g, this.get("align")[g]]);
if (i || ((y = r.adjustAlignText(this, g, b)) && (c.undo.last().value.push(this.get("alignText")[g]), c.redo.last().value.push(y)), n.undo.register(c)), this.get("alignText") && (this.get("alignText")[g] = y), this.get("align")[g] = b, b = b || "", l.find("tbody>tr>td:nth-child(" + (g + 1) + ")").css("text-align", b), l.find("thead>tr>th:nth-child(" + (g + 1) + ")").css("text-align", b), i) n.tableEdit.showTableEdit(l);
else {
var w = l.find(".md-align-gp[data-col='" + g + "']");
w.find("button").removeClass("active").blur(), w.find(".md-align-" + b).addClass("active").focus()
}
}
}
return c
}
}, r.adjustAlignText = function(t, e, n) {
if (t.get("alignText")) {
var i = t.get("alignText")[e];
if (i) return i = "left" == n || "center" == n ? (i = i.replace(/(^\s*)-/, "$1:")).replace(/(^\s*):(\s*$)/, "$1:-$2") : i.replace(/(^\s*):/, "$1-"), i = "right" == n || "center" == n ? (i = i.replace(/-(\s*$)/, ":$1")).replace(/(^\s*):(\s*$)/, "$1-:$2") : i.replace(/:(\s*$)/, "-$1"), /^\s*::\s*$/.exec(i) && (i = i.replace("::", ":-:")), i
}
}, r.tryResetTable = function(t) {
t && !t.isDeleted() && t.get("type") == o.table && t.get("userText") && t.set("userText", void 0)
}, r.prototype.unwrap = function(t) {
var e = [],
n = this.getFirstChild();
do {
var r = n.get("after");
n.set("parent", this.get("parent")), n.set("attachTo", this.get("attachTo")), n.get("before") || n.set("before", this.get("before")), n.get("after") || n.set("after", this.get("after")), e.push(n), n.get("pattern") && n.set("pattern", n.get("pattern").replace(/^\s+/, "")), n = r
} while (n);
return this.remove(!0), t && t.findElemById(this.cid).replaceWith(i.NodeCollectionUtils.toHTML(e)), e
}, r.prototype.wrap = function(t, e, n, i) {
for (var r, o = t, a = [], s = {
parent: t.get("parent"),
before: t.get("before"),
after: e ? e.get("after") : t.get("after")
}; o && o != s.after;) n && n.findElemById(o.id).remove(), r = o, o = o.get("after"), this.append(r);
s.after && (s.after.insert(this, !0), i || (a = n.findElemById(s.after.id)).before(this.toHTML())), !a.length && s.before && (s.before.insert(this, !1), i || (a = n.findElemById(s.before.id)).after(this.toHTML())), a.length || (s.parent ? (this.set("parent", s.parent), !i && n && n.findElemById(s.parent.id).html(this.toHTML())) : i || 0 !== $(n.sessionStr).children().length || (this.set("attachTo", this.get("in")), n && ($(n.sessionStr).html(this.toHTML()), n.focusCid = null)))
}
}), $__System.registerDynamic("1e", ["1f"], !0, function(t, e, n) {
"use strict";
this || self;
! function(t) {
t.defineOption("styleSelectedText", !1, function(i, r, o) {
var a = o && o != t.Init;
r && !a ? (i.state.markedSelection = [], i.state.markedSelectionStyle = "string" == typeof r ? r : "CodeMirror-selectedtext", u(i), i.on("cursorActivity", e), i.on("change", n)) : !r && a && (i.off("cursorActivity", e), i.off("change", n), s(i), i.state.markedSelection = i.state.markedSelectionStyle = null)
});
function e(t) {
t.state.markedSelection && t.operation(function() {
! function(t) {
if (!t.somethingSelected()) return s(t);
if (t.listSelections().length > 1) return u(t);
var e = t.getCursor("start"),
n = t.getCursor("end"),
r = t.state.markedSelection;
if (!r.length) return a(t, e, n);
var c = r[0].find(),
l = r[r.length - 1].find();
if (!c || !l || n.line - e.line < i || o(e, l.to) >= 0 || o(n, c.from) <= 0) return u(t);
for (; o(e, c.from) > 0;) r.shift().clear(), c = r[0].find();
o(e, c.from) < 0 && (c.to.line - e.line < i ? (r.shift().clear(), a(t, e, c.to, 0)) : a(t, e, c.from, 0));
for (; o(n, l.to) < 0;) r.pop().clear(), l = r[r.length - 1].find();
o(n, l.to) > 0 && (n.line - l.from.line < i ? (r.pop().clear(), a(t, l.from, n)) : a(t, l.to, n))
}(t)
})
}
function n(t) {
t.state.markedSelection && t.state.markedSelection.length && t.operation(function() {
s(t)
})
}
var i = 8,
r = t.Pos,
o = t.cmpPos;
function a(t, e, n, a) {
if (0 != o(e, n))
for (var s = t.state.markedSelection, u = t.state.markedSelectionStyle, c = e.line;;) {
var l = c == e.line ? e : r(c, 0),
f = c + i,
h = f >= n.line,
d = h ? n : r(f, 0),
m = t.markText(l, d, {
className: u
});
if (null == a ? s.push(m) : s.splice(a++, 0, m), h) break;
c = f
}
}
function s(t) {
for (var e = t.state.markedSelection, n = 0; n < e.length; ++n) e[n].clear();
e.length = 0
}
function u(t) {
s(t);
for (var e = t.listSelections(), n = 0; n < e.length; n++) a(t, e[n].from(), e[n].to())
}
}(t("1f"))
}), $__System.registerDynamic("20", ["1f"], !0, function(t, e, n) {
this || self;
! function(t) {
var e = {
pairs: "()[]{}''\"\"",
triples: "",
explode: "[]{}"
},
n = t.Pos;
t.defineOption("autoCloseBrackets", !1, function(e, n, i) {
i && i != t.Init && (e.removeKeyMap(o), e.state.closeBrackets = null), n && (e.state.closeBrackets = n, e.addKeyMap(o))
});
function i(t, n) {
return "pairs" == n && "string" == typeof t ? t : "object" == typeof t && null != t[n] ? t[n] : e[n]
}
for (var r = e.pairs + "`", o = {
Backspace: function(e) {
var r = u(e);
if (!r || e.getOption("disableInput")) return t.Pass;
for (var o = i(r, "pairs"), a = e.listSelections(), s = 0; s < a.length; s++) {
if (!a[s].empty()) return t.Pass;
var c = f(e, a[s].head);
if (!c || o.indexOf(c) % 2 != 0) return t.Pass
}
for (var s = a.length - 1; s >= 0; s--) {
var l = a[s].head;
e.replaceRange("", n(l.line, l.ch - 1), n(l.line, l.ch + 1), "+delete")
}
},
Enter: function(e) {
var n = u(e),
r = n && i(n, "explode");
if (!r || e.getOption("disableInput")) return t.Pass;
for (var o = e.listSelections(), a = 0; a < o.length; a++) {
if (!o[a].empty()) return t.Pass;
var s = f(e, o[a].head);
if (!s || r.indexOf(s) % 2 != 0) return t.Pass
}
if (e.getModeAt(e.getCursor()).indent || e.getMode().indent) return e.operation(function() {
e.replaceSelection("\n", null), e.execCommand("goCharLeft");
for (var t = 0; t < o.length; t++) {
var n = o[t].head.line;
e.indentLine(n, null, !0), e.indentLine(n + 1, null, !0)
}
}), t.Pass;
e.operation(function() {
e.replaceSelection("\n\n", null), e.execCommand("goCharLeft"), o = e.listSelections();
for (var t = 0; t < o.length; t++) {
var n = o[t].head.line;
e.indentLine(n, null, !0), e.indentLine(n + 1, null, !0), e.indentLine(n, "add", !0)
}
})
}
}, a = 0; a < r.length; a++) o["'" + r.charAt(a) + "'"] = s(r.charAt(a));
function s(e) {
return function(r) {
return function(e, r) {
var o = u(e);
if (!o || e.getOption("disableInput")) return t.Pass;
var a = i(o, "pairs"),
s = a.indexOf(r);
if (-1 == s) return t.Pass;
for (var f, m = i(o, "triples"), v = a.charAt(s + 1) == r, p = e.listSelections(), g = s % 2 == 0, b = 0; b < p.length; b++) {
var y, w = p[b],
F = w.head,
k = e.getRange(F, n(F.line, F.ch + 1));
if (g && !w.empty()) y = "surround";
else if (!v && g || k != r)
if (v && F.ch > 1 && m.indexOf(r) >= 0 && e.getRange(n(F.line, F.ch - 2), F) == r + r && (F.ch <= 2 || e.getRange(n(F.line, F.ch - 3), n(F.line, F.ch - 2)) != r)) y = "addFour";
else if (v) {
if (t.isWordChar(k) || !h(e, F, r)) return t.Pass;
y = "both"
} else {
if (!g || e.getLine(F.line).length != F.ch && !l(k, a) && !/\s/.test(k)) return t.Pass;
y = "both"
} else y = v && d(e, F) ? "both" : m.indexOf(r) >= 0 && e.getRange(F, n(F.line, F.ch + 3)) == r + r + r ? "skipThree" : "skip";
if (f) {
if (f != y) return t.Pass
} else f = y
}
var x = s % 2 ? a.charAt(s - 1) : r,
_ = s % 2 ? r : a.charAt(s + 1);
e.operation(function() {
if ("skip" == f) e.execCommand("goCharRight");
else if ("skipThree" == f)
for (var t = 0; t < 3; t++) e.execCommand("goCharRight");
else if ("surround" == f) {
for (var n = e.getSelections(), t = 0; t < n.length; t++) n[t] = x + n[t] + _;
e.replaceSelections(n, "around"), n = e.listSelections().slice();
for (var t = 0; t < n.length; t++) n[t] = c(n[t]);
e.setSelections(n)
} else "both" == f ? (e.replaceSelection(x + _, null), e.triggerElectric(x + _), e.execCommand("goCharLeft")) : "addFour" == f && (e.replaceSelection(x + x + x + x, "before"), e.execCommand("goCharRight"))
})
}(r, e)
}
}
function u(t) {
var e = t.state.closeBrackets;
if (!e || e.override) return e;
return t.getModeAt(t.getCursor()).closeBrackets || e
}
function c(e) {
var i = t.cmpPos(e.anchor, e.head) > 0;
return {
anchor: new n(e.anchor.line, e.anchor.ch + (i ? -1 : 1)),
head: new n(e.head.line, e.head.ch + (i ? 1 : -1))
}
}
function l(t, e) {
var n = e.lastIndexOf(t);
return n > -1 && n % 2 == 1
}
function f(t, e) {
var i = t.getRange(n(e.line, e.ch - 1), n(e.line, e.ch + 1));
return 2 == i.length ? i : null
}
function h(e, n, i) {
var r = e.getLine(n.line),
o = e.getTokenAt(n);
if (/\bstring2?\b/.test(o.type) || d(e, n)) return !1;
var a = new t.StringStream(r.slice(0, n.ch) + i + r.slice(n.ch), 4);
for (a.pos = a.start = o.start;;) {
var s = e.getMode().token(a, o.state);
if (a.pos >= n.ch + 1) return /\bstring2?\b/.test(s);
a.start = a.pos
}
}
function d(t, e) {
var i = t.getTokenAt(n(e.line, e.ch + 1));
return /\bstring/.test(i.type) && i.start == e.ch
}
}(t("1f"))
}), $__System.registerDynamic("21", ["1f"], !0, function(t, e, n) {
this || self;
var i = t("1f");
! function() {
i.defineOption("autoCloseTags", !1, function(a, s, u) {
if (u != i.Init && u && a.removeKeyMap("autoCloseTags"), s) {
var c = {
name: "autoCloseTags"
};
("object" != typeof s || s.whenClosing) && (c["'/'"] = function(t) {
return (e = t).getOption("disableInput") ? i.Pass : n(e, !0);
var e
}), ("object" != typeof s || s.whenOpening) && (c["'>'"] = function(n) {
return function(n) {
if (n.getOption("disableInput")) return i.Pass;
for (var a = n.listSelections(), s = [], u = 0; u < a.length; u++) {
if (!a[u].empty()) return i.Pass;
var c = a[u].head,
l = n.getTokenAt(c),
f = i.innerMode(n.getMode(), l.state),
h = f.state;
if ("xml" != f.mode.name || !h.tagName) return i.Pass;
var d = n.getOption("autoCloseTags"),
m = "html" == f.mode.configuration,
v = "object" == typeof d && d.dontCloseTags || m && t,
p = "object" == typeof d && d.indentTags || m && e,
g = h.tagName;
l.end > c.ch && (g = g.slice(0, g.length - l.end + c.ch));
var b = g.toLowerCase();
if (!g || "string" == l.type && (l.end != c.ch || !/[\"\']/.test(l.string.charAt(l.string.length - 1)) || 1 == l.string.length) || "tag" == l.type && "closeTag" == h.type || l.string.indexOf("/") == l.string.length - 1 || v && r(v, b) > -1 || o(n, g, c, h, !0)) return i.Pass;
var y = p && r(p, b) > -1;
s[u] = {
indent: y,
text: ">" + (y ? "\n\n" : "") + "</" + g + ">",
newPos: y ? i.Pos(c.line + 1, 0) : i.Pos(c.line, c.ch + 1)
}
}
for (var u = a.length - 1; u >= 0; u--) {
var w = s[u];
n.replaceRange(w.text, a[u].head, a[u].anchor, "+insert");
var F = n.listSelections().slice(0);
F[u] = {
head: w.newPos,
anchor: w.newPos
}, n.setSelections(F), w.indent && (n.indentLine(w.newPos.line, null, !0), n.indentLine(w.newPos.line + 1, null, !0))
}
}(n)
}), a.addKeyMap(c)
}
});
var t = ["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr"],
e = ["applet", "blockquote", "body", "button", "div", "dl", "fieldset", "form", "frameset", "h1", "h2", "h3", "h4", "h5", "h6", "head", "html", "iframe", "layer", "legend", "object", "ol", "p", "select", "table", "ul"];
function n(t, e) {
for (var n = t.listSelections(), r = [], a = e ? "/" : "</", s = 0; s < n.length; s++) {
if (!n[s].empty()) return i.Pass;
var u = n[s].head,
c = t.getTokenAt(u),
l = i.innerMode(t.getMode(), c.state),
f = l.state;
if (e && ("string" == c.type || "<" != c.string.charAt(0) || c.start != u.ch - 1)) return i.Pass;
var h;
if ("xml" != l.mode.name)
if ("htmlmixed" == t.getMode().name && "javascript" == l.mode.name) h = a + "script";
else {
if ("htmlmixed" != t.getMode().name || "css" != l.mode.name) return i.Pass;
h = a + "style"
}
else {
if (!f.context || !f.context.tagName || o(t, f.context.tagName, u, f)) return i.Pass;
h = a + f.context.tagName
}
">" != t.getLine(u.line).charAt(c.end) && (h += ">"), r[s] = h
}
t.replaceSelections(r), n = t.listSelections();
for (s = 0; s < n.length; s++)(s == n.length - 1 || n[s].head.line < n[s + 1].head.line) && t.indentLine(n[s].head.line)
}
i.commands.closeTag = function(t) {
return n(t)
};
function r(t, e) {
if (t.indexOf) return t.indexOf(e);
for (var n = 0, i = t.length; n < i; ++n)
if (t[n] == e) return n;
return -1
}
function o(t, e, n, r, o) {
if (!i.scanForClosingTag) return !1;
var a = Math.min(t.lastLine() + 1, n.line + 500),
s = i.scanForClosingTag(t, n, null, a);
if (!s || s.tag != e) return !1;
for (var u = r.context, c = o ? 1 : 0; u && u.tagName == e; u = u.prev) ++c;
n = s.to;
for (var l = 1; l < c; l++) {
var f = i.scanForClosingTag(t, n, null, a);
if (!f || f.tag != e) return !1;
n = f.to
}
return !0
}
}()
}), $__System.registerDynamic("22", ["1f"], !0, function(t, e, n) {
"use strict";
this || self;
var i = t("1f");
i.overlayMode = function(t, e, n) {
return {
startState: function() {
return {
base: i.startState(t),
overlay: i.startState(e),
basePos: 0,
baseCur: null,
overlayPos: 0,
overlayCur: null,
streamSeen: null
}
},
copyState: function(n) {
return {
base: i.copyState(t, n.base),
overlay: i.copyState(e, n.overlay),
basePos: n.basePos,
baseCur: null,
overlayPos: n.overlayPos,
overlayCur: null
}
},
token: function(i, r) {
return (i != r.streamSeen || Math.min(r.basePos, r.overlayPos) < i.start) && (r.streamSeen = i, r.basePos = r.overlayPos = i.start), i.start == r.basePos && (r.base.lineBefore = r.lineBefore, r.base.lineAfter = r.lineAfter, r.baseCur = t.token(i, r.base), r.basePos = i.pos), i.start == r.overlayPos && (i.pos = i.start, r.overlayCur = e.token(i, r.overlay), r.overlayPos = i.pos), i.pos = Math.min(r.basePos, r.overlayPos), null == r.overlayCur ? r.baseCur : null != r.baseCur && r.overlay.combineTokens || n && null == r.overlay.combineTokens ? r.baseCur + " " + r.overlayCur : r.overlayCur
},
indent: t.indent && function(e, n) {
return t.indent(e.base, n)
},
electricChars: t.electricChars,
innerMode: function(e) {
return {
state: e.base,
mode: t
}
},
blankLine: function(i) {
var r, o;
return t.blankLine && (r = t.blankLine(i.base)), e.blankLine && (o = e.blankLine(i.overlay)), null == o ? r : n && null != r ? r + " " + o : o
}
}
}
}), $__System.registerDynamic("23", ["1f"], !0, function(t, e, n) {
this || self;
var i = t("1f"),
r = "CodeMirror-lint-markers";
function o(t) {
t.parentNode && t.parentNode.removeChild(t)
}
function a(t, e, n) {
var r = function(t, e) {
var n = document.createElement("div");
n.className = "CodeMirror-lint-tooltip", n.appendChild(e.cloneNode(!0)), document.body.appendChild(n);
function r(t) {
if (!n.parentNode) return i.off(document, "mousemove", r);
n.style.top = Math.max(0, t.clientY - n.offsetHeight - 5) + "px", n.style.left = t.clientX + 5 + "px"
}
return i.on(document, "mousemove", r), r(t), null != n.style.opacity && (n.style.opacity = 1), n
}(t, e);
function a() {
i.off(n, "mouseout", a), r && ((t = r).parentNode && (null == t.style.opacity && o(t), t.style.opacity = 0, setTimeout(function() {
o(t)
}, 600)), r = null);
var t
}
var s = setInterval(function() {
if (r)
for (var t = n;; t = t.parentNode) {
if (t && 11 == t.nodeType && (t = t.host), t == document.body) return;
if (!t) {
a();
break
}
}
if (!r) return clearInterval(s)
}, 400);
i.on(n, "mouseout", a)
}
function s(t, e, n) {
this.marked = [], this.options = e, this.timeout = null, this.hasGutter = n, this.onMouseOver = function(e) {
! function(t, e) {
var n = e.target || e.srcElement;
if (!/\bCodeMirror-lint-mark-/.test(n.className)) return;
for (var i = n.getBoundingClientRect(), r = (i.left + i.right) / 2, o = (i.top + i.bottom) / 2, s = t.findMarksAt(t.coordsChar({
left: r,
top: o
}, "client")), u = [], c = 0; c < s.length; ++c) {
var f = s[c].__annotation;
f && u.push(f)
}
u.length && function(t, e) {
for (var n = e.target || e.srcElement, i = document.createDocumentFragment(), r = 0; r < t.length; r++) {
var o = t[r];
i.appendChild(l(o))
}
a(e, i, n)
}(u, e)
}(t, e)
}, this.waitingFor = 0
}
function u(t) {
var e = t.state.lint;
e.hasGutter && t.clearGutter(r);
for (var n = 0; n < e.marked.length; ++n) e.marked[n].clear();
e.marked.length = 0
}
function c(t, e, n, r) {
var o = document.createElement("div"),
s = o;
return o.className = "CodeMirror-lint-marker-" + e, n && ((s = o.appendChild(document.createElement("div"))).className = "CodeMirror-lint-marker-multiple"), 0 != r && i.on(s, "mouseover", function(e) {
a(e, t, s)
}), o
}
function l(t) {
var e = t.severity;
e || (e = "error");
var n = document.createElement("div");
return n.className = "CodeMirror-lint-message-" + e, n.appendChild(document.createTextNode(t.message)), n
}
function f(t) {
var e = t.state.lint.options,
n = e.options || e,
r = e.getAnnotations || t.getHelper(i.Pos(0, 0), "lint");
if (r)
if (e.async || r.async) ! function(t, e, n) {
var r = t.state.lint,
o = ++r.waitingFor;
function a() {
o = -1, t.off("change", a)
}
t.on("change", a), e(t.getValue(), function(e, n) {
t.off("change", a), r.waitingFor == o && (n && e instanceof i && (e = n), h(t, e))
}, n, t)
}(t, r, n);
else {
var o = r(t.getValue(), n, t);
if (!o) return;
o.then ? o.then(function(e) {
h(t, e)
}) : h(t, o)
}
}
function h(t, e) {
u(t);
for (var n = t.state.lint, i = n.options, o = function(t) {
for (var e = [], n = 0; n < t.length; ++n) {
var i = t[n],
r = i.from.line;
(e[r] || (e[r] = [])).push(i)
}
return e
}(e), a = 0; a < o.length; ++a) {
var s = o[a];
if (s) {
for (var f = null, h = n.hasGutter && document.createDocumentFragment(), d = 0; d < s.length; ++d) {
var m = s[d],
v = m.severity;
v || (v = "error"), f = "error" == (p = f) ? p : v, i.formatAnnotation && (m = i.formatAnnotation(m)), n.hasGutter && h.appendChild(l(m)), m.to && n.marked.push(t.markText(m.from, m.to, {
className: "CodeMirror-lint-mark-" + v,
__annotation: m
}))
}
n.hasGutter && t.setGutterMarker(a, r, c(h, f, s.length > 1, n.options.tooltips))
}
}
var p;
i.onUpdateLinting && i.onUpdateLinting(e, o, t)
}
function d(t) {
var e = t.state.lint;
e && (clearTimeout(e.timeout), e.timeout = setTimeout(function() {
f(t)
}, e.options.delay || 500))
}
i.defineOption("lint", !1, function(t, e, n) {
if (n && n != i.Init && (u(t), !1 !== t.state.lint.options.lintOnChange && t.off("change", d), i.off(t.getWrapperElement(), "mouseover", t.state.lint.onMouseOver), clearTimeout(t.state.lint.timeout), delete t.state.lint), e) {
for (var o = t.getOption("gutters"), a = !1, c = 0; c < o.length; ++c) o[c] == r && (a = !0);
var l = t.state.lint = new s(t, (h = e, h instanceof Function ? {
getAnnotations: h
} : (h && !0 !== h || (h = {}), h)), a);
!1 !== l.options.lintOnChange && t.on("change", d), 0 != l.options.tooltips && "gutter" != l.options.tooltips && i.on(t.getWrapperElement(), "mouseover", l.onMouseOver), f(t)
}
var h
}), i.defineExtension("performLint", function() {
this.state.lint && f(this)
}), i.clearMarks = u, i.updateLinting = h
}), $__System.registerDynamic("24", ["1f", "14", "e", "12", "25", "13", "26", "1b", "16", "1e", "20", "21", "22", "23"], !0, function(t, e, n) {
"use strict";
this || self;
var i = t("1f"),
r = t("14"),
o = t("e"),
a = t("12"),
s = t("25"),
u = t("13"),
c = t("26"),
l = (t("1b"), t("16")),
f = c.map;
Node = u.Node;
var h = i.prototype.focus;
i.prototype.focus = function() {
i.signal(this, "focus", this), h.apply(this)
};
t("1e"), t("20"), t("21"), t("22"), t("23");
var d = ["js", "javascript", "java", "json", "typescript", "clojure", "coffeescript", "css", "less", "scss", "gfm", "markdown", "xaml", "xml", "haskell", "html", "lua", "lisp", "commonlisp", "pascal", "perl", "php", "php+HTML", "python", "cython", "ruby", "shell", "sh", "sql", "sqlite", "mssql", "mysql", "CQL", "mariadb", "cassandra", "plsql", "tiddlywiki", "wiki", "vb", "basic", "visual basic", "vbscript", "velocity", "verilog", "xquery", "yaml", "go", "groovy", "nginx", "octave", "c", "clike", "c++", "cpp", "objc", "objective-c", "csharp", "c#", "squirrel", "ceylon", "kotlin", "tex", "latex", "swift", "scala", "R", "D", "diff", "erlang", "http", "jade", "rst", "rust", "jinja2", "reStructuredText", "asp", "jsp", "erb", "ejs", "embeddedjs", "powershell", "dockerfile", "jsx", "tsx", "react", "vue", "nsis", "mathematica", "tiki wiki", "properties", "ini", "livescript", "assembly", "gas", "toml", "matlab", "ocaml", "F#", "fsharp", "elm", "pgp", "asciiarmor", "spreadsheet", "elixir", "cmake", "cypher", "dart", "django", "dtd", "xml-dtd", "dylan", "handlebars", "idl", "web-idl", "yacas", "mbox", "vhdl", "julia", "haxe", "hxml", "fortran", "protobuf", "makefile", "tcl", "scheme", "twig", "bash", "SAS", "pseudocode", "stylus", "cobol", "oz", "SPARQL", "crystal"];
! function(t) {
var e = t.commands.delLineLeft;
t.commands.delLineLeft = function(n) {
try {
return 0 == n.getCursor().ch ? t.commands.delCharBefore(n) : e(n)
} catch (t) {}
}
}(i);
var m = function(t, e) {
var n = [];
return d.map(function(e) {
0 == e.toLowerCase().indexOf(t.toLowerCase()) && n.push(e)
}), n.sort(), n.length < 4 && d.map(function(e) {
e.toLowerCase().indexOf(t.toLowerCase()) > 0 && n.push(e)
}), e && 1 == n.length && n[0] == t ? [] : n
};
function v(t, e) {
if (t) switch (t) {
case "javascript":
case "text/javascript":
case "js":
return t = "javascript";
case "json":
return e ? t : t = {
name: "javascript",
json: !0
};
case "jsonld":
case "json-ld":
return e ? t : "application/ld+json";
case "text/typescript":
case "typescript":
case "ts":
return e ? "typescript" : t = {
name: "javascript",
typescript: !0
};
case "clojure":
return t;
case "coffee":
case "coffeescript":
case "css":
return t;
case "less":
return e ? "less" : "text/x-less";
case "scss":
return e ? "scss" : t = "text/x-scss";
case "gfm":
case "github flavored markdown":
return t = "gfm";
case "markdown":
case "md":
case "mkd":
return t;
case "xml":
case "xaml":
case "mjml":
case "xul":
case "enml":
return e ? t : "xml";
case "haskell":
return t;
case "htmlmixed":
case "html":
case "xhtml":
case "svg":
case "epub":
return e ? /^html/.exec(t) ? "html" : t : t = "htmlmixed";
case "lua":
return t;
case "lisp":
case "commonlisp":
case "common lisp":
return t = "commonlisp";
case "pascal":
case "perl":
return t;
case "php+html":
return e ? "php" : "application/x-httpd-php";
case "php":
case "php3":
case "php4":
case "php5":
case "php6":
return e ? t : "text/x-php";
case "cython":
return e ? t : t = "text/x-cython";
case "python":
return e ? t : t = "text/x-python";
case "ruby":
return t;
case "shell":
case "sh":
case "zsh":
case "bash":
return t = "shell";
case "sql":
case "sql lite":
case "sqlite":
return e ? t : t = "text/x-sql";
case "mssql":
return e ? t : t = "text/x-mssql";
case "mysql":
return e ? t : t = "text/x-mysql";
case "mariadb":
return e ? t : t = "text/x-mariadb";
case "cassandra":
case "cql":
return e ? t : t = "text/x-cassandra";
case "plsql":
return e ? t : t = "text/x-plsql";
case "stex":
case "tex":
case "latex":
return e ? t : "text/x-stex";
case "tiddlywiki":
case "wiki":
return e ? t : t = "tiddlywiki";
case "vb":
case "visual basic":
case "visualbasic":
case "basic":
return e ? t : t = "vb";
case "vbscript":
case "velocity":
return t;
case "verilog":
return e ? t : t = "text/x-verilog";
case "xquery":
return t;
case "yaml":
case "yml":
return e ? t : "yaml";
case "go":
case "groovy":
case "nginx":
return t;
case "octave":
case "matlab":
return e ? t : "text/x-octave";
case "c":
case "clike":
case "csrc":
return e ? t : t = "text/x-csrc";
case "c++":
case "c++src":
case "cpp":
case "cc":
case "hpp":
case "h++":
case "h":
return e ? t : t = "text/x-c++src";
case "obj-c":
case "objc":
case "objective c":
case "objective-c":
case "objectivec":
return e ? t : t = "text/x-objectivec";
case "text/x-scala":
case "scala":
return e ? t : t = "text/x-scala";
case "csharp":
case "c#":
case "cs":
return e ? t : t = "text/x-csharp";
case "java":
return e ? t : t = "text/x-java";
case "squirrel":
return e ? t : t = "text/x-squirrel";
case "ceylon":
return e ? t : t = "text/x-ceylon";
case "kotlin":
return e ? t : t = "text/x-kotlin";
case "swift":
return t = "swift";
case "r":
case "rlang":
case "r-lang":
return e ? t : t = "text/x-rsrc";
case "d":
case "diff":
case "erlang":
case "http":
case "jade":
return t;
case "rst":
case "restructuredtext":
return t = "rst";
case "rust":
case "jinja2":
return t;
case "aspx":
case "asp":
case "asp.net":
return e ? t : t = "application/x-aspx";
case "jsp":
return e ? t : t = "application/x-jsp";
case "erb":
return e ? t : t = "application/x-erb";
case "ejs":
case "embeddedjs":
case "embedded javaScript":
return e ? t : t = "application/x-ejs";
case "powershell":
case "bat":
case "cmd":
return e ? t : "application/x-powershell";
case "dockerfile":
return e ? t : "text/x-dockerfile";
case "jsx":
case "react":
return e ? t : "text/jsx";
case "tsx":
return e ? t : "text/typescript-jsx";
case "vue.js":
case "vue":
case "vue-template":
return e ? t : "script/x-vue";
case "nsis":
return e ? t : "text/x-nsis";
case "mathematica":
return e ? t : "text/x-mathematica";
case "tiki":
case "tiki wiki":
case "tiki-wiki":
case "tikiwiki":
return "tiki";
case "properties":
case "ini":
return e ? t : "text/x-properties";
case "livescript":
return e ? t : "text/x-livescript";
case "asm":
case "assembly":
case "nasm":
case "gas":
return e ? t : "assembly";
case "toml":
return e ? t : "text/x-toml";
case "sequence":
return "sequence";
case "flow":
case "flowchart":
return "flow";
case "mermaid":
return "mermaid";
case "ocaml":
return e ? t : "text/x-ocaml";
case "f#":
case "fsharp":
return e ? t : "text/x-fsharp";
case "elm":
return e ? t : "text/x-elm";
case "pgp":
case "pgp-keys":
case "pgp-key":
case "pgp-signature":
case "asciiarmor":
case "ascii-armor":
case "ascii armor":
return e ? t : "application/pgp";
case "spreadsheet":
case "excel":
return e ? t : "text/x-spreadsheet";
case "elixir":
return "elixir";
case "cmake":
return e ? t : "text/x-cmake";
case "cypher":
case "cypher-query":
return e ? t : "application/x-cypher-query";
case "dart":
return "dart";
case "django":
return e ? t : "text/x-django";
case "dtd":
case "xml-dtd":
case "xml dtd":
case "xmldtd":
return e ? t : "application/xml-dtd";
case "dylan":
return e ? t : "text/x-dylan";
case "handlebars":
return e ? t : "text/x-handlebars-template";
case "idl":
return e ? t : "text/x-idl";
case "webidl":
case "web-idl":
case "web idl":
return e ? t : "text/x-webidl";
case "yacas":
return e ? t : "text/x-yacas";
case "mbox":
return e ? t : "application/mbox";
case "vhdl":
return e ? t : "text/x-vhdl";
case "julia":
return "julia";
case "haxe":
return e ? t : "text/x-haxe";
case "hxml":
return e ? t : "text/x-hxml";
case "fortran":
return e ? t : "text/x-fortran";
case "protobuf":
return e ? t : "text/x-protobuf";
case "makefile":
return e ? t : "text/x-makefile";
case "tcl":
return e ? t : "text/x-tcl";
case "scheme":
return e ? t : "text/x-scheme";
case "twig":
return e ? t : "text/x-twig";
case "sas":
return e ? t : "text/x-sas";
case "pseudocode":
return e ? t : "text/x-pseudocode";
case "julia":
case "text/x-julia":
case "stylus":
case "cobol":
case "oz":
case "sparql":
case "crystal":
return t;
default:
return ""
}
}
var p = function(t) {
if (!t) return {};
if ("{" != t[0] || "}" != t[t.length - 1]) return {};
var e = t.replace(/(^{)|(}$)/g, "").split(/\s+/);
if (!e || !e.length) return {};
var n = {};
return e.forEach(function(t) {
var e;
(e = /^[.]number((-?l)|L)ines/.exec(t)) ? n.lineNumbers = !0: (e = /^startFrom=['"](\d+)['"]$/.exec(t)) && (n.firstLineNumber = e[1] - 0)
}), n
};
window.getCodeMirrorMode = function(t, e, n) {
var i = ((t = (t = t ? t.toLowerCase() : "").replace(/^\s*\.*lang(uage)*-/g, "").replace(/[{}]/g, "").trim()).split(/\s+/) || [t])[0],
r = v(t, n);
return r || t == i || (r = v(i.replace(/(^[.])|(,$)/g, ""), n)), r || (n ? i : e ? null : t)
};
var g = a.Model.extend({
initialize: function(t) {
var e = this;
this.editor = t, this.queue = {}, this.cachedCharWidth, this.$container = o("#fences-auto-suggest"), this.editor.diagrams = new l(t), File.option.enableDiagram && (d = d.concat(l.MODES)), o(document).on("losefocus", ".md-fences", function() {
var t = o(this),
n = e.queue[t.attr("cid")];
n && (e.syncToNode(this.getAttribute("cid")), n.doc.setCursor(0, 0, {
scroll: !1
}), t.find(".md-tooltip-hide").hide(), t[0].style.marginBottom = "")
}).on("endfocus", ".md-fences", function() {
var t = o(this);
e.queue[t.attr("cid")] && (t.find(".md-tooltip-hide").hide(), t[0].style.marginBottom = "")
}).on("mousedown", ".autoComplt-list li", function(e) {
var n = o(".ty-input:focus");
return n.text(this.textContent), t.selection.jumpIntoElemEnd(n), !1
}), this.lazyload(), this.editor.diagrams.lazyload()
},
onLeaveDocument: function() {
this.queue = {}, this.intersectionObserve(null, !0)
},
getOptionsFromFencesAttr: p,
showAutoSuggest: function(t, e) {
if (e.token === t) return !1;
var n = m(t, !0),
i = "";
if (e.type = "fences", e.token = t, e.match = n, e.found = n.length, e.pageNo = 0, e.pageCnt = Math.floor((n.length - 1) / 5 + 1), !e.found) return this.$container.removeClass("ty-show"), !1;
for (var r = 0; r < n.length && r < 40; r++) r % 5 == 0 && (i += (r > 0 ? "</ul>" : "") + "<ul data-page='" + r / 5 + "' style='display:none'>"), i += "<li data-content='" + n[r] + "' > " + n[r] + "</span></li>";
return i += "</ul>", this.$container.html(i), this.$container
},
clickEventHandled: function(t, e) {
var n, i, r;
this.queue[e] || (r = window.scrollY, this.getCm(e), r -= window.scrollY, window.scrollBy(0, r), (n = document.elementFromPoint(t.clientX, t.clientY)) && (t.stopPropagation(), (i = document.createEvent("MouseEvents")).initMouseEvent("mousedown", !0, !0, n.ownerDocument.defaultView, 1, t.screenX, t.screenY, t.clientX, t.clientY, t.ctrlKey, t.altKey, t.shiftKey, t.metaKey, t.button), n.dispatchEvent(i)), this.editor.refocus(e))
},
getCm: function(t) {
if (this.queue[t]) {
if (o("[cid='" + t + "'] textarea").length) return this.queue[t];
delete this.queue[t]
}
if (!this.queue[t]) return this.addCodeBlock(t)
},
getValue: function(t) {
return this.queue[t] ? this.queue[t].getValue() : this.editor.findElemById(t).text()
},
addCodeBlock: function(t) {
var e = this.editor,
n = this;
function r(t, r) {
var o, a = r.which || r.keyCode,
s = i.keyName(r),
u = !r.metaKey && !r.shiftKey && !r.ctrlKey;
if ("Up" == i.keyNames[a]) {
if ((o = t.getCursor()) && 0 == o.line) {
if (u) return e.selection.moveUpOrDown(!0, r), r.codemirrorIgnore;
if (0 == o.ch && !r.shiftKey && (File.isNode && r.ctrlKey || File.isMac && r.metaKey)) return void(r.codemirrorIgnore = !0)
}
r.stopPropagation()
} else if ("Down" == i.keyNames[a]) {
if ((o = t.getCursor()) && o.line >= t.lineCount() - 1) {
if (u) return e.selection.moveUpOrDown(!1, r), r.codemirrorIgnore;
if (o.ch == t.doc.getLine(o.line).length && !r.shiftKey && (File.isNode && r.ctrlKey || File.isMac && r.metaKey)) return void(r.codemirrorIgnore = !0)
}
r.stopPropagation()
} else e.selection.clearGlobalColumn();
if ("Left" == i.keyNames[a]) {
if (t.getSelection().length > 0) return;
if ((o = t.doc.getCursor()) && !o.line && !o.ch && u) return e.selection.moveUpOrDown(!0, r), r.codemirrorIgnore;
r.stopPropagation()
} else if ("Right" == i.keyNames[a]) {
if (t.getSelection().length > 0) return;
if ((o = t.doc.getCursor()) && o.line >= t.lineCount() - 1 && o.ch >= t.doc.getLine(o.line).length && u) return e.selection.moveUpOrDown(!1, r), r.codemirrorIgnore;
r.stopPropagation()
} else if ("Backspace" == i.keyNames[a]) {
if ((o = t.doc.getCursor()) && t.lineCount() <= 1 && !o.line && !o.ch && !t.getSelection().length) return function(t) {
var i = e.getNode(t.cid),
r = e.undo.UndoManager,
o = r.makeEmptyCommand();
n.beforeDeleteFences(t.cid), o.undo.push({
type: "fences-pos",
pos: t.getCursor(),
id: t.cid
}), r.append(o, e.UserOp.backToParagraph(e, i, !1)), e.undo.register(o)
}(t), r.preventDefault(), r.codemirrorIgnore;
r.stopPropagation()
} else if ("PageDown" == i.keyNames[a]) {
if (!(o = t.doc.getCursor(o)) || t.doc.indexFromPos(o) >= t.doc.getValue().length) return t.execCommand("goDocEnd"), e.selection.moveUpOrDown(!1), void(r.codemirrorIgnore = !0)
} else if ("PageUp" == i.keyNames[a]) {
if (!(o = t.doc.getCursor()) || 0 == o.line && 0 == o.ch) return t.execCommand("goDocStart"), e.selection.moveUpOrDown(!0), void(r.codemirrorIgnore = !0)
} else if ("Enter" == i.keyNames[a] && (File.isMac ? r.metaKey : r.ctrlKey)) {
if (t.getSelection().length > 0) return;
if (o = t.doc.getCursor(), t.lineCount() - 1 == o.line && o.ch >= t.doc.getLine(o.line).length) return e.UserOp.insertParagraph(!1), r.stopPropagation(), void(r.codemirrorIgnore = !0)
}(i.keyMap.macDefault[s] || i.keyMap.pcDefault[s]) && r.stopPropagation()
}
function a(n) {
e.refocus(t.id), n.getWrapperElement().offsetHeight || n.refresh();
o(n.getWrapperElement()).closest(".md-fences").find(".md-tooltip-hide").show(), d(n), l.isDiagramType(n.options.mode) && e.diagrams.startPreview(n.cid), File.isMac && bridge.callHandler("touchBar.setFencesOnSetLang", !1)
}
function u(t, e) {
if (t.focus(), "" == t.getSelection()) {
var n = t.findWordAt(i.posFromMouse(t, e));
t.setSelection(n.head, n.anchor)
}
File.isNodeHtml && File.contextMenu.show(e, t.getWrapperElement())
}
function c(n, i) {
e.wordCount.quickUpdate(n.cid), e.selection.clearGlobalColumn(), l.isDiagramType(n.options.mode) && e.diagrams.updateDiagram(n.cid), File.isTypeWriterMode && !File.option.scrollWithCursor && e.selection.typeWriterScroll(n.cursorCoords(n.getCursor())), t.set("text", n.getValue()), i.length && i[0].origin && e.syncChange([{
type: "sync",
id: n.cid,
cmChanges: i
}])
}
function h(t, n) {
l.isDiagramType(t.options.mode) && n.ranges.length && n.ranges[0].anchor.line != (t.getCursor() || {}).line && e.diagrams.attachError(t)
}
function d(t, n) {
File.isTypeWriterMode && File.option.scrollWithCursor && e.selection.typeWriterScroll(t.cursorCoords(t.getCursor())), e.wordCount.updateInSelection()
}
function v(t, e) {
File.isTypeWriterMode && e.preventDefault()
}
if ("string" == typeof t && (t = this.editor.getNode(t)), !this.queue[t.id] && t.get("type") == t.TYPE.fences) {
if (!(w = o("[cid = " + t.id + "]").removeClass("mock-cm")).length) return;
var g = w.find(".md-diagram-panel").clone();
w.addClass("ty-contain-cm").html("");
var b = getCodeMirrorMode(t.get("lang"));
t.id, this.modeLoaded;
var y = {
lineWrapping: !File.option.noLineWrapping,
mode: b,
styleSelectedText: !0,
maxHighlightLength: 1 / 0,
viewportMargin: 1 / 0,
styleActiveLine: !0,
autoCloseBrackets: !File.option.noPairingMatch,
autoCloseTags: !File.option.noPairingMatch,
theme: " inner",
lineNumbers: File.option.showLineNumbersForFence,
resetSelectionOnContextMenu: !0,
cursorScrollMargin: 60,
dragDrop: !1,
indentUnit: File.option.codeIndentSize,
tabSize: File.option.codeIndentSize,
scrollbarStyle: "null",
value: t.safeGetStrAttr("text").replace(/\u200b```/gm, "```")
};
Object.assign(y, p(t.get("lang"))), this.queue[t.id] = i(w[0], y, this.editor, t.id), t.get("history") && this.queue[t.id].setHistory(t.get("history")), this.queue[t.id].off("keydown", r), this.queue[t.id].on("keydown", r), this.queue[t.id].off("focus", a), this.queue[t.id].on("focus", a), this.queue[t.id].off("changes", c), this.queue[t.id].on("changes", c), this.queue[t.id].off("scrollCursorIntoView", v), this.queue[t.id].on("scrollCursorIntoView", v), this.queue[t.id].off("cursorActivity", d), this.queue[t.id].on("cursorActivity", d), this.queue[t.id].off("contextmenu", u), this.queue[t.id].on("contextmenu", u), this.queue[t.id].off("beforeSelectionChange", h), this.queue[t.id].on("beforeSelectionChange", h);
var w = o("[cid = " + t.id + "]"),
F = document.createElement("div");
F.setAttribute("class", "code-tooltip md-tooltip-hide"), F.setAttribute("align", "right"), F.setAttribute("contenteditable", "false"), F.innerHTML = "<span class='ty-input ty-input-after ty-cm-lang-input' contenteditable='plaintext-only' tabindex='-1' autocorrect='false' placeholder='" + o.localize.getString("select a language") + "'></span>", F.childNodes[0].textContent = t.get("lang") || "", w[0].insertChildAtIndex(F, 1), w.children(".CodeMirror").attr("lang", (t.get("lang") || "").toLowerCase()), this.modeLoaded && w.addClass("modeLoaded"), !File.option.showLineNumbersForFence && y.lineNumbers && w.addClass("md-fences-with-lineno"), g.length && w.append(g),
function(t, e) {
var n = this,
i = t.find(".ty-input").on("change blur", function() {
o(this).val() != e.get("lang") && n.tryAddLangUndo(e, this)
}).keydown(function(t) {
var e = t.which || t.keyCode;
"Enter" == f[e] && o(this).trigger("change")
}).focus(function() {
File.isMac && bridge.callHandler("touchBar.setFencesOnSetLang", !0)
}).on("keydown", function(t) {
var e, i = t.keyCode || t.which;
if ("Delete" == f[i]) {
if ((e = n.editor.selection.getRangy()).commonAncestorContainer.parentElement != this) return !1;
if (e.commonAncestorContainer == this || e.startOffset == e.endOffset && e.endOffset == this.textContent.length) return n.editor.selection.moveUpOrDown(!1), !1
} else if ("Backspace" == f[i]) {
if ((e = n.editor.selection.getRangy()).commonAncestorContainer.parentElement != this) return !1;
if (e.commonAncestorContainer == this || e.startOffset == e.endOffset && 0 == e.startOffset) return n.editor.selection.moveUpOrDown(!0), !1
} else if ("Return" == f[i] || "Enter" == f[i]) return n.editor.selection.moveUpOrDown(!1), !1
}).on("paste", function(t) {
setTimeout(function() {
t.target.textContent = t.target.textContent.replace(/(^\n+)|(\n+$)/g, "").split(/\r?\n/)[0], o(t.target).trigger("change")
}, 0)
}).on("input", function(t) {
this.querySelector("*") && (this.textContent = this.textContent.replace(/(^\n+)|(\n+$)/g, ""))
});
return s.enable(i[0], {
hintsFetcher: function(t, e) {
e(m(t));
var n = document.querySelector(".autoComplt-list");
n && (n.style.height = "auto")
},
maxHintNum: 5
}), t
}.call(this, w, t)
}
return this.queue[t.id]
},
toggleFocusedComponent: function() {
var t = document.activeElement,
e = o(t).closest(".md-fences");
if (e.length)
if (t.classList && t.classList.contains("ty-cm-lang-input")) {
var n = e.attr("cid"),
i = this.getCm(n),
r = i.getCursor();
i.focus(), i.setCursor(r)
} else e.find(".CodeMirror-focused").removeClass("CodeMirror-focused").end().find(".ty-input").show().focus()
},
focus: function(t) {
var e = "string" == typeof t ? t : t.id;
this.getCm(e).focus()
},
getFocused: function() {
for (var t in this.queue)
if (this.queue.hasOwnProperty(t) && this.queue[t].hasFocus()) return this.queue[t]
},
updateCodeNum: function() {
for (var t in this.queue) this.editor.getNode(t) || delete this.queue[t]
},
syncToNode: function(t) {
var e, n;
(e = "string" == typeof t ? this.editor.getNode(t) : t) && (n = this.getCm(e.id), e.set("history", n.doc.getHistory()), e.set("text", n.getValue()))
},
intersectionObserve: function(t, e) {
this.continueRenderTimer && clearTimeout(this.continueRenderTimer), this.intersectionObserver && e && this.intersectionObserver.disconnect();
var n = this;
t && (this.intersectionObserver || (this.intersectionObserver = new IntersectionObserver(function(t) {
t.forEach(function(t) {
t.intersectionRatio <= 0 || (n.addCodeBlock(t.target.getAttribute("cid")), n.intersectionObserver.unobserve(t.target))
})
})), this.intersectionObserver.observe(t))
},
refreshEditor: function(t, e, n) {
if (this.modeLoaded) {
var i = this,
r = 0;
for (var o in this.queue) {
var a = this.editor.findElemById(o);
if (a.find(".CodeMirror").length && this.editor.getNode(o)) {
var s = this.queue[o];
if (a.hasClass("modeLoaded")) e && s.refresh();
else {
var u = this.editor.getNode(o);
s.setOption("mode", getCodeMirrorMode(u.get("lang"))), s.refresh()
}
r++
} else delete this.queue[o]
}
var c = (n || document).querySelectorAll("\t[mdtype='fences']"),
l = window.IntersectionObserver ? 8 : 30,
f = 0;
c.length != r && c.forEach(function(e) {
var n = e.getAttribute("cid");
i.queue[n] || (t || f < l ? (i.addCodeBlock(n), f++) : window.IntersectionObserver && i.intersectionObserve(e))
})
}
},
lazyload: function() {
var t = this;
o.getScript((File.isNode && !window.debugMode ? "./lib.asar" : "./lib") + "/codemirror/mode.min.js").then(function() {
t.modeLoaded = !0, t.refreshEditor()
})
},
addToUndoManager: function(t) {
this.editor.undo.register({
undo: [{
type: "fences",
cmd: "undo",
id: t.cid
}],
redo: [{
type: "fences",
cmd: "redo",
id: t.cid
}]
})
},
jumpCmEnd: function(t) {
var e = t,
n = t;
"string" == typeof e ? n = this.getCm(e) : e = n.cid;
var i = 0,
r = 0;
n && (i = n.doc.lastLine(), r = n.doc.getLine(i).length, n.focus(), n.setCursor({
line: i,
ch: r
}))
},
jumpCmBegin: function(t) {
var e = t;
"string" == typeof e && (e = this.getCm(e)), e.focus(), e.setCursor({
line: 0,
ch: 0
})
},
beforeDeleteFences: function(t, e) {
var n, i;
"string" == typeof t ? (n = this.queue[t], i = this.editor.getNode(t)) : (i = t, n = this.queue[i.id]), n && (i.set("text", n.getValue()), i.set("history", n.doc.getHistory()), n.doc.history = null, delete this.queue[i.id], e && e.map(function(t) {
t && (t.id == i.id && t.json && t.json.content && t.json.content.type == i.TYPE.fences ? (t.json.content.text = i.get("text"), t.json.content.history = i.get("history")) : Array.isArray(t.json) && t.json.map(function(t) {
t.id == i.id && t.content.type == i.TYPE.fences && (t.content.text = i.get("text"), t.content.history = i.get("history"))
}))
}))
},
searchOn: function(t, e, n) {
this.searchStatus = this.searchStatus || {}, this.searchStatus.overlay = this.searchStatus.overlay || {}, this.searchStatus.queue = this.searchStatus.queue || [];
var i = new RegExp("^" + r.escapeRegExp(e), n.caseSensitive ? "" : "i");
this.searchStatus.overlay[t.cid || "source"] = (o = e, {
token: function(t) {
return n.wholeWord && t.pos && /[a-z_\\u00C0-\\u024f]/.exec(t.string.substring(t.pos - 1, t.pos)) || !t.match(i) || n.wholeWord && /[a-z_\\u00C0-\\u024f]/.exec(t.string.substr(t.pos, t.pos + 1)) ? (t.next(), t.pos = t.string.toLowerCase().indexOf(o, t.pos), !~t.pos && t.skipToEnd(), null) : "search-hit"
}
});
var o;
t.addOverlay(this.searchStatus.overlay[t.cid || "source"]), this.searchStatus.queue.push(t)
},
clearSearchOn: function(t) {
this.searchStatus && (t.removeOverlay(this.searchStatus.overlay[t.cid || "source"]), this.searchStatus.queue.remove(t))
},
clearSearchAll: function() {
if (this.editor.sourceView.inSourceMode) return this.searchStatus && this.editor.sourceView.cm.removeOverlay(this.searchStatus.overlay.source), void(this.searchStatus = null);
this.searchStatus && this.searchStatus.overlay && this.searchStatus.queue.forEach(function(t) {
this.searchStatus.overlay[t.cid] && t.removeOverlay(this.searchStatus.overlay[t.cid])
}, this), this.searchStatus = null
},
tryAddLangUndo: function(t, e) {
if (e || (e = document.activeElement), !e.classList || !e.classList.contains("ty-cm-lang-input")) return !1;
if (t || (t = this.editor.getNode(o(e).closest("[cid]").attr("cid"))), !t) return !1;
var n = t.get("lang") || "",
i = e.textContent || "";
return n != i && (t.attr("lang", i, this.editor, !1), !0)
}
});
n.exports = g, window.CodeMirror = i, window.Fences = g
}), $__System.registerDynamic("27", ["1f", "e", "12", "13", "1b", "14", "26"], !0, function(t, e, n) {
"use strict";
this || self;
var i = t("1f"),
r = t("e"),
o = t("12"),
a = t("13"),
s = a.Node,
u = t("1b"),
c = (u.SnapFlag, t("14")),
l = t("26"),
f = l.map,
h = a.TYPE,
d = (f = l.map, document.querySelector("#md-rawblock-tooltip-templ").innerHTML);
var m = !1;
function v() {
if (m || !window.MathJax) return !0;
File.option.autoNumberingForMath && (MathJax.Hub.config.TeX.equationNumbers ? MathJax.Hub.config.TeX.equationNumbers.autoNumber = "all" : MathJax.Hub.config.TeX.equationNumbers = {
autoNumber: "all",
useLabelIds: !0
}),
function() {
var t = [],
e = [];
MathJax.Hub.Register.MessageHook("Begin Attach MathJax", function(n) {
w() && (t = Object.keys(p.labels).clone(), e = Object.keys(p.eqlabels).clone())
}), MathJax.Hub.Register.MessageHook("End Attach MathJax", function(n) {
var i = [],
o = [],
a = r(n[1]).closest("[mdtype='math_block']");
if (w() && a.length) {
var s = File.editor.findNodeByElem(a);
for (var u in p.labels) - 1 == t.indexOf(u) && i.push(u);
for (var c in p.eqlabels) - 1 == e.indexOf(c) && o.push(c);
s.set("mathLabel", i), s.set("mathEqLabel", o)
}
})
}(), m = !0
}
var p, g = o.Model.extend({
initialize: function(t) {
this.editor = t, this.queue = {}, this.preview, this.bindEvent(), v()
},
bindEvent: function() {
var t = this,
e = this.editor;
r(this.editor.sessionStr).on("mousedown", ".md-math-container", function(t) {
e.undo.prepCursorSnap()
}).on("click startedit", ".md-math-container", function(n) {
if (void 0 === n.which || 1 == n.which) return t.startEditing(r(this).closest("[cid]"), "auto"), e.undo.endSnap(), !1
}).on("losefocus", ".md-math-block", function(n) {
t.stopEditing(this.getAttribute("cid")), e.selection.scrollAdjust()
}).on("endfocus", ".md-math-block", function(n) {
t.stopEditing(this.getAttribute("cid"), !1, !0), e.selection.scrollAdjust()
}).on("keydown", ".md-math-block", function(e) {
var n = event.keyCode || event.which;
if ("Enter" === f[n]) return t.startEditing(r(this), "auto"), e.stopPropagation(), e.preventDefault()
}).on("blur inline-change", ".md-math-block .ty-input", function() {
if (t.currentCm) {
var e = t.editor.getNode(t.currentCm.cid);
t.tryAddTagUndo(e, r(this))
}
}).on("keydown", ".md-math-block .ty-input", function(e) {
"Enter" == f[e.keyCode || e.which] && t.editor.selection.moveUpOrDown(!1, e)
}).on("click", ".md-math-block .md-rawblock-after, .md-math-block .md-rawblock-before", function(t) {
t.target == this && this.querySelector(".ty-input").focus()
}).on("keydown", ".md-math-block .ty-input", function(e) {
var n, i = e.keyCode || e.which;
if ("Delete" == f[i]) {
if ((n = t.editor.selection.getRangy()).commonAncestorContainer.parentElement != this) return !1;
if (n.startOffset == n.endOffset && n.endOffset == this.textContent.length) return t.editor.selection.moveUpOrDown(!1), !1
} else if ("Backspace" == f[i]) {
if ((n = t.editor.selection.getRangy()).commonAncestorContainer.parentElement != this) return !1;
if (n.startOffset == n.endOffset && 0 == n.startOffset) return t.editor.selection.moveUpOrDown(!0), !1
} else if ("Return" == f[i] || "Enter" == f[i]) return t.editor.selection.moveUpOrDown(!1), !1
}).on("paste", ".md-math-block .ty-input", function(t) {
setTimeout(function() {
t.target.textContent = t.target.textContent.replace(/(^[\n{]+)|([\n}]+$)/g, "").split(/\r?\n/)[0], r(t.target).trigger("change")
}, 0)
})
},
tryAddTagUndo: function(t, e) {
if (!e.hasClass("ty-input")) return !1;
t || (t = this.editor.getNode(this.currentCm.cid));
var n = e.hasClass("ty-input-before") ? "tagBefore" : "tagAfter",
i = t.get(n),
r = e.text();
if (i != r) {
var o = u.makeEmptyCommand();
return o.undo.push({
id: t.cid,
type: "attr",
key: n,
value: i || ""
}), t.set(n, r), o.redo.push({
id: t.cid,
type: "attr",
key: n,
value: r
}), self.editor.undo.register(o), !0
}
return !1
},
renderAll: function(t, e) {
if (!window.MathJax) {
var n = this;
setTimeout(function() {
n.renderAll(t, e)
}, 1e3)
}
var i = (t || document).querySelectorAll(".md-math-block");
t || (v(), F.Init());
for (var r = 0; r < i.length; r++) {
var o = i[r],
a = o.querySelector("script");
if (a && (!a.MathJax && !a.parentElement.classList.contains("md-mathjax-preview "))) {
if (File.option.autoNumberingForMath && !e) return void this.forceRefresh();
var s = this.editor.getNode(o.getAttribute("cid"));
MathJax.Hub.Queue(["BeforeRender", F, s], ["Process", MathJax.Hub, o.getAttribute("id")], ["AfterRender", F, s])
}
}
},
getTex: function(t) {
return this.editor.findElemById(t).find("script").text()
},
getCidAndElem: function(t) {
var e = t,
n = t;
return "string" == typeof t ? n = this.editor.findElemById(e) : e = n.attr("cid"), [e, n]
},
syncToNode: function(t) {
var e = "string" == typeof t ? this.editor.getNode(t) : t;
return (this.currentCm || {}).cid === e.cid && (e.set("history", this.currentCm.doc.getHistory()), e.set("text", this.currentCm.getValue())), e
},
remove: function(t) {
var e, n = this.getCidAndElem(t),
i = n[0],
o = n[1],
a = editor.getNode(i),
u = editor.undo.UndoManager,
c = u.makeEmptyCommand(),
l = (a.get("before"), this.currentCm);
this.beforeDeleteFences(a), l && l.cid === a.cid ? c.undo.push({
type: "fences-pos",
pos: l.getCursor(),
id: l.cid
}) : c.undo.push(this.editor.selection.buildUndo()), c.undo.push(u.buildReplaceUndo(a)), a.set("type", a.TYPE.paragraph), a.set("text", ""), s.normalizeNode(a), c.redo.push(u.buildReplaceUndo(a)), e = r(r.parseHTML(a.toHTML())[0]), o.replaceWith(e), editor.selection.jumpIntoElemEnd(e), c.redo.push(editor.selection.buildUndo()), editor.undo.register(c), this.currentCm = void 0, this.renderAll()
},
beforeDeleteFences: function(t) {
var e = this.syncToNode(t);
this.currentCm = void 0;
var n = this.editor.findElemById(t);
(n = n && n.find("script")[0]) && n.MathJax && File.option.autoNumberingForMath ? b.call(this) : w() && k(e), this.stopEditing(e.cid, !1, !0)
},
stopEditing: function(t, e, n) {
if (this.currentCm && this.currentCm.cid && t) {
var i = this.getCidAndElem(t),
o = i[0],
a = i[1],
s = this.editor,
c = this.currentCm,
l = a[0].querySelectorAll(".mathjax-candidate");
if (l[0]) {
var f = u.makeEmptyCommand();
f.undo.push({
type: "fences-pos",
pos: c.getCursor(),
id: c.cid
});
var h = "hidden" === l[0].style.visibility ? l[1] : l[0],
m = this.syncToNode(o),
v = this;
h && (this.currentCm = void 0, a.html(d.replace("{type}", r.localize.getString("Math", "Menu"))).removeClass("md-rawblock-on-edit"), h.setAttribute("class", "md-rawblock-container md-math-container"), h.setAttribute("tabindex", "-1"), a[0].appendChild(h), e && s.selection.jumpToNextBlock(m, f), !n && s.undo.register(f), File.option.autoNumberingForMath && F.isDirty ? (F.Init(), this.forceRefresh()) : (h.querySelector("script").MathJax = void 0, MathJax.Hub.Queue(["BeforeRender", F, m], ["Typeset", MathJax.Hub, h], ["AfterRender", F, m]), MathJax.Hub.Queue(function() {
void 0 !== v.startNumber && (p.startNumber = Math.max(v.startNumber, p.startNumber), p.number = p.startNumber, v.startNumber = void 0, F.Init())
})))
}
}
},
startEditing: function(t, e) {
var n = this.getCidAndElem(t),
o = n[0],
a = n[1],
u = this.editor,
c = this.editor.getNode(o);
if (s.isType(c, h.math_block)) {
var l = document.querySelector("content"),
f = null;
if (r(document.activeElement).closest(".md-math-block").length && (f = l.scrollHeight - l.scrollTop - l.clientHeight), o) {
if (this.currentCm && this.currentCm.cid === o) {
if (u.writingArea.contains(this.currentCm.getWrapperElement())) return this.currentCm.focus(), this.currentCm;
this.currentCm = null
}
this.currentCm && (this.stopEditing(this.currentCm.cid), window.getSelection().removeAllRanges()),
function() {
if (File.option.autoNumberingForMath) {
var t = this.editor.findElemById(c.id).find("script")[0];
F.startNumber = this.startNumber = void 0, t && t.MathJax && void 0 !== t.MathJax.startNumber && (this.startNumber = w().startNumber, F.startNumber = t.MathJax.startNumber, t.MathJax = void 0), void 0 == F.startNumber && File.option.autoNumberingForMath && (F.startNumber = (w() || {}).startNumber || 0)
}
}.call(this), a.html(d.replace("{type}", r.localize.getString("Math", "Menu")) + document.querySelector("#md-mathblock-panel-templ").textContent).addClass("md-rawblock-on-edit"), c.get("tagBefore") && a.find(".md-rawblock-before .ty-input").text(c.get("tagBefore")), c.get("tagAfter") && a.find(".md-rawblock-after .ty-input").text(c.get("tagAfter"));
var m = a.children(".md-mathblock-panel");
this.currentCm = function(t) {
var e = i(m[0].querySelector(".md-rawblock-input"), {
styleSelectedText: !0,
styleActiveLine: !0,
lineWrapping: !0,
mode: "stex",
placeholder: r.localize.getString("Input Math TeX here"),
theme: " inner",
autoCloseBrackets: !File.option.noPairingMatch,
autoCloseTags: !File.option.noPairingMatch,
value: c.get("text").trim(),
lineNumbers: File.option.showLineNumbersForFence,
resetSelectionOnContextMenu: !0,
dragDrop: !1,
indentUnit: File.option.codeIndentSize,
tabSize: File.option.codeIndentSize
}, t, o);
return c.get("history") && e.setHistory(c.get("history")), e.doc.on("change", function(n) {
t.wordCount.quickUpdate(e.cid), F.getTextFunc && F.Update(), t.selection.clearGlobalColumn(), t.syncChange([{
type: "sync",
id: c.id,
tex: e.getValue()
}]), File.isTypeWriterMode && !File.option.scrollWithCursor && t.selection.typeWriterScroll(e.cursorCoords(e.getCursor()))
}), e.on("cursorActivity", function() {
File.isTypeWriterMode && File.option.scrollWithCursor && t.selection.typeWriterScroll(e.cursorCoords(e.getCursor()))
}), e.on("blur", function(t) {
try {
c.set("history", t.doc.getHistory()), c.set("text", t.getValue())
} catch (t) {
console.warn(t.stack)
}
}), e.on("keydown", function(e, n) {
var r, o = n.which || n.keyCode,
a = i.keyName(n);
if (!n.metaKey && !n.shiftKey && n.ctrlKey, "Up" == i.keyNames[o]) return t.selection.moveUpOrDown(!0, n), n.codemirrorIgnore;
if ("Down" == i.keyNames[o]) return t.selection.moveUpOrDown(!1, n), n.codemirrorIgnore;
if (t.selection.clearGlobalColumn(), "Backspace" == i.keyNames[o]) {
if (!e.getValue().length) return t.mathBlock.remove(e.cid), n.preventDefault(), n.codemirrorIgnore
} else {
if ("Enter" == i.keyNames[o] && (n.ctrlKey || n.metaKey) && p(e)) return setTimeout(function() {
t.UserOp.insertParagraph()
}, 20), n.stopPropagation(), n.codemirrorIgnore;
if ("PageDown" == i.keyNames[o]) {
if (p(e)) return e.execCommand("goDocEnd"), t.selection.moveUpOrDown(!1), void(n.codemirrorIgnore = !0)
} else if ("PageUp" == i.keyNames[o] && (!(r = e.doc.getCursor()) || 0 == r.line && 0 == r.ch)) return e.execCommand("goDocStart"), t.selection.moveUpOrDown(!0), void(n.codemirrorIgnore = !0)
}(i.keyMap.macDefault[a] || i.keyMap.pcDefault[a]) && n.stopPropagation()
}), e.focus(), e
}(this.editor),
function(t, e, n, i) {
var r = t.querySelector(".CodeMirror").CodeMirror,
o = t.querySelector(".md-mathjax-preview");
o.textContent = "$$\n" + r.getValue() + "\n$$", F.Init(o, t.querySelector(".md-mathjax-buffer"), function() {
return "$$\n" + (e.doc.getValue().trim() || "<Empty \\space Math \\space Block>") + "\n$$"
}, n), F.startNumber = i, MathJax.Hub.Queue(["BeforeRender", F, n, !1], ["Typeset", MathJax.Hub, o]), F.Update()
}(a[0], this.currentCm, c, F.startNumber), (v = this.currentCm).focus(), e && ("<Empty \\space Math \\space Block>" == v.getValue() ? v.execCommand("selectAll") : "end" == e || "auto" == e ? v.execCommand("goDocEnd") : "start" == e && v.execCommand("goDocStart"), u.refocus(o), null === f || f > 100 ? u.selection.scrollAdjust() : l.scrollTop = l.scrollHeight - f - l.clientHeight)
}
var v;
return this.currentCm
}
function p(t) {
var e = t.doc.getCursor();
return !e || t.doc.indexFromPos(e) >= t.doc.getValue().length
}
},
copyAsTex: function(t) {
var e = r(t || document.activeElement).closest("[cid]").find("script")[0].textContent.trim();
this.editor.UserOp.setClipboard(null, null, e, !0)
},
copyAsMathML: function(t, e) {
var n = MathJax.Hub.getAllJax(r(t || document.activeElement).closest("[cid]")[0])[0],
i = this.editor;
y(n, function(t) {
if (e) i.UserOp.nativeCopyText(t);
else {
var n = "<pre class='md-fences' lang='xml'>" + c.escape(t) + "</pre>";
i.UserOp.setClipboard(n, null, t, !0)
}
})
},
copyAsImage: function(t) {
var e = (t && t.querySelector || document.activeElement).querySelector("svg"),
n = this.editor,
i = n.EditHelper.SVG2HtmlImg(e);
n.UserOp.setClipboard(i, null, i, !0)
},
forceRefresh: function() {
if (!File.editor.sourceView.inSourceMode) {
v(), this.editor.brush.clearAndPause(), b.call(this, !0), r(".md-math-container").each(function() {
MathJax.Hub.Queue(["Process", MathJax.Hub, this])
}), File.option.enableInlineMath && this.editor.mathInline.renderAll(!0);
var t = this;
MathJax.Hub.Queue(function() {
t.renderAll(document, !0), t.editor.brush.resume()
})
}
}
}),
b = function(t) {
!t && this.currentCm && (self.stopEditing(this.currentCm.cid), window.getSelection().removeAllRanges(), this.editor.refocus(null));
for (var e = document.querySelectorAll("script"), n = 0; n < e.length; n++) e[n].MathJax && (e[n].MathJax = void 0);
w() && (p.labels = p.eqlabels = p.IDs = p.eqIDs = {}, p.refs = [], this.startNumber = p.number = p.startNumber = 0, F.Init())
},
y = function(t, e) {
var n;
try {
n = t.root.toMathML("")
} catch (n) {
if (!n.restart) throw n;
return MathJax.Callback.After([y, t, e], n.restart)
}
MathJax.Callback(e)(n)
},
w = function() {
return p = MathJax.Extension["TeX/AMSmath"]
},
F = {
delay: 0,
preview: null,
buffer: null,
timeout: null,
mjRunning: !1,
oldText: null,
maxIgnored: 3,
curIgnored: 0,
startNumber: void 0,
originalEnd: void 0,
isDirty: !1,
Init: function(t, e, n, i) {
File.editor.mathBlock && !n && this.getTextFunc && File.editor.mathBlock.currentCm || (this.preview = t, this.buffer = e, this.getTextFunc = n, this.node = i, this.originalEnd = void 0, this.isDirty = !1, this.startNumber = void 0)
},
SwapBuffers: function() {
var t = this.preview,
e = this.buffer;
this.buffer = t, this.preview = e, t && e && (t.style.visibility = "hidden", t.style.position = "absolute", e.style.position = "", e.style.visibility = "")
},
Update: function() {
this.callback()
},
CreatePreview: function() {
if (this.curIgnored = 0, F.timeout = null, !this.mjRunning) {
var t = this.getTextFunc();
t !== this.oldtext && (this.buffer.textContent = this.oldtext = t, this.mjRunning = !0, MathJax.Hub.Queue(["BeforeRender", this, this.node, !1], ["Typeset", MathJax.Hub, this.buffer], ["AfterRender", this, this.node], ["PreviewDone", this, this.node]))
}
},
PreviewDone: function() {
this.mjRunning = !1, this.SwapBuffers()
},
BeforeRender: function(t, e) {
w() && (e ? (t.unset("mathLabel"), t.unset("mathEqLabel")) : k(t), void 0 !== this.startNumber && (p.startNumber = p.number = this.startNumber))
},
AfterRender: function(t) {
File.option.autoNumberingForMath && w() && (this.isDirty || (void 0 === this.originalEnd ? this.originalEnd = p.startNumber : this.isDirty = this.originalEnd !== p.startNumber))
}
};
function k(t) {
(t.get("mathLabel") || []).map(function(t) {
delete p.labels[t]
}), (t.get("mathEqLabel") || []).map(function(t) {
delete p.eqlabels[t]
})
}
F.callback = MathJax.Callback(["CreatePreview", F]), F.callback.autoReset = !0, g.Preview = F, n.exports = g
}), $__System.registerDynamic("28", ["e", "12", "13", "1b", "26", "29", "14", "1c"], !0, function(t, e, n) {
"use strict";
this || self;
var i = t("e"),
r = t("12"),
o = (t("13").Node, t("1b"), t("26")),
a = t("29"),
s = (o.map, t("14"));
t("1c");
window.svgCache = {};
var u, c = function(t, e, n) {
return !!e.length && (!n && MathJax.Hub.Queue(function() {
t.brush.pause()
}), e.forEach(function(t) {
(function(t) {
t && MathJax.Hub.Queue(["Process", MathJax.Hub, t], function() {
t.querySelector(".noError") && t.querySelector("script").classList.add("math-jax-error");
var e = t.parentElement;
if (e && !e.classList.contains("math-jax-postprocess")) {
e.classList.add("math-jax-postprocess"), e.classList.remove("math-jax-preprocess");
var n = t.querySelector("script").innerText.replace(/\u200B+/g, ""),
i = t.cloneNode(!0);
i.children.forEach(function(t) {
t.hasAttribute("id") && t.removeAttribute("id")
}), svgCache[n] = a.processExportedSVG(i.innerHTML)
}
})
}).call(this, t, n)
}, this), !n && MathJax.Hub.Queue(function() {
t.brush.resume()
}), !0)
},
l = null,
f = function(t, e) {
u = e[0];
var n = i("#math-inline-preview"),
r = i("#math-inline-preview-content"),
o = e.clone().find("svg").remove().end().text();
l = function() {
var e = MathJax.Hub.getAllJax(r[0])[0],
o = i(".md-inline-math.md-expand"),
s = o.find("script"),
u = s.text().replace(/\u200B+/g, ""),
c = l;
if (e) return s.height() ? void(svgCache[u] || MathJax.Hub.Queue(["Text", e, u], function() {
a.fixPopoverPosition(s, n), o.find("svg").replaceWith(n.find("svg").clone())
})) : i(t.sessionStr).off("inline-math-changed", c)
}, (n.hasClass("md-math-inline-prep-preview") || "none" === n[0].style.display) && /^\$/.exec(o) && (n.removeClass("md-math-inline-prep-preview"), r.text(o), MathJax.Hub.Queue(["Typeset", MathJax.Hub, r[0]], function() {
n.show(), a.fixPopoverPosition(e.find("script"), n), i(t.sessionStr).on("inline-math-changed", l)
}))
},
h = function(t) {
u = null;
var e = i("#math-inline-preview");
"none" !== e[0].style.display && e.hide(), l && (i(t.sessionStr).off("inline-math-changed", l), l = null)
},
d = function(t, e) {
var n;
try {
n = t.root.toMathML("")
} catch (n) {
if (!n.restart) throw n;
return MathJax.Callback.After([d, t, e], n.restart)
}
MathJax.Callback(e)(n)
},
m = function() {
MathJax.Hub.Queue(["Typeset", MathJax.Hub, document.querySelector("#math-preheat")])
},
v = r.Model.extend({
initialize: function(t) {
this.editor = t, this.queue = {},
function() {
var t = this.editor;
i(this.editor.sessionStr).on("cursorChange", function(e) {
var n, r = e.cursor || t.selection.getRangy();
if (!r) return h(t);
(n = i(r.commonAncestorContainer).closest(".md-inline-math.md-expand")).find("script").length ? (u != n[0] && h(t), f(t, n)) : h(t)
}).on("mousedown", ".md-inline-math svg", function(e) {
h(t), i(".md-expand").removeClass("md-expand");
var n = i(this).closest(".md-inline-math"),
r = n.addClass("md-expand").find("script");
t.selection.selectAllElem(r), f(t, n)
})
}.call(this), File.option.enableInlineMath && setTimeout(m, 1e3)
},
brush: function(t, e, n) {
var i = t.querySelectorAll(".math-jax-preprocess .inline-math-svg");
return c.call(this, this.editor, i, n && e && t.getAttribute("cid") === e.startId ? e : null), i.length
},
showAutoSuggest: function(t) {
if (File.option.enableInlineMath) {
i(".md-math-prep").removeClass("md-math-prep"), a.markRange(t, "md-math-prep");
var e = i("#math-inline-preview").show().addClass("md-math-inline-prep-preview").css("width", "auto");
e.find("#math-inline-preview-content").text("<Empty Inline Math>"), a.fixPopoverPosition(i(".md-math-prep"), e)
}
},
renderAll: function(t, e) {
if (File.option.enableInlineMath) {
var n = [];
t ? (window.svgCache = {}, (n = document.querySelectorAll(".inline-math-svg")).forEach(function(t) {
t.innerHTML = "<script type='math/tex'>" + t.querySelector("script").innerText + "<\/script>", t.parentElement.classList.add("math-jax-preprocess"), t.parentElement.classList.remove("math-jax-postprocess")
})) : n = (e || document).querySelectorAll(".math-jax-preprocess .inline-math-svg"), n.length && (c.call(this, this.editor, n), this.renderInToc())
}
},
renderInToc: function() {
File.option.enableInlineMath && document.querySelectorAll(".math-in-toc").forEach(function(t) {
MathJax.Hub.Queue(["Typeset", MathJax.Hub, t])
}, this)
},
tryCloseInlinePreview: function() {
h(this.editor)
},
copyAsTex: function() {
var t = function() {
var t = this.editor.selection.getRangy();
return i(t.commonAncestorContainer).closest(".md-inline-math")
}.call(this),
e = t.attr("pattern"),
n = t.text().replace("$$" == e ? /(^\$\$)|(\$\$$)/g : /(^\$)|(\$$)/g, "");
this.editor.UserOp.setClipboard(null, null, n, !0)
},
copyAsMathML: function(t) {
var e = i("#math-inline-preview-content")[0],
n = MathJax.Hub.getAllJax(e)[0],
r = this.editor;
d(n, function(e) {
if (t) r.UserOp.nativeCopyText(e);
else {
var n = "<pre class='md-fences' lang='xml'>" + s.escape(e) + "</pre>";
r.UserOp.setClipboard(n, null, e, !0)
}
})
},
copyAsImage: function() {
var t = document.querySelector("#math-inline-preview-content svg"),
e = this.editor,
n = e.EditHelper.SVG2HtmlImg(t);
e.UserOp.setClipboard(n, null, n, !0)
}
});
n.exports = v
}), $__System.registerDynamic("2a", ["12", "14", "19", "13", "2b", "1b", "29", "2c", "1c"], !0, function(t, e, n) {
"use strict";
this || self;
var i = t("12"),
r = t("14"),
o = t("19"),
a = t("13"),
s = a.Node,
u = a.TYPE,
c = t("2b"),
l = t("1b"),
f = (t("29"), t("2c"), l.SnapFlag),
h = t("1c"),
d = function(t) {
this.editor = t, this.queue = [], this.interval = 200, this.inline = new o.InlineLexer, this.articleArea = document.querySelector(this.editor.sessionStr), b.call(this)
},
m = null,
v = null,
p = {},
g = function(t, e) {
if (t || e) {
try {
t.brush.pause(), v ? t.focusCid = v.id || v.startId : t.refocus(void 0, void 0, !0);
var n = m,
i = h.createRange(),
r = l.makeEmptyCommand(v || t.selection.buildUndo()),
o = t.getNode(t.focusCid);
if (r.undo.push(l.buildReplaceUndo(o)), i.moveToBookmark(n), t.selection.deRange(i), i.deleteContents(), i.insertNode(document.createTextNode(e)), n.start = n.start += e.length, n.end = n.start, t.store(t.focusCid, !0), i.moveToBookmark(n), r.redo.push(l.buildReplaceUndo(o)), t.selection.setRange(i, !0), r.redo.push(t.selection.buildUndo()), t.undo.register(r), "fences" == p.type) {
var a = o.breakOn(!1, t);
t.findElemById(a.oldCid).replaceWith(a.newHtml), t.selection.jumpIntoElemBegin(t.findElemById(a.nextFocus)), t.undo.register(a.command)
} else t.brush.addToQueue(t.focusCid, !0)
} catch (t) {
console.sendError(t.stack)
}
t.brush.hideAutoComplete(), t.brush.resume(!0)
} else t.brush.hideAutoComplete()
},
b = function() {
this.autoCompleteShown = !1;
var t = this.editor;
$(document).click(function(e) {
document.activeElement !== t.brush.articleArea && t.brush.hideAutoComplete()
}), $(".auto-suggest-container").on("mousedown", "li[data-content]", function(e) {
v = t.selection.buildUndo()
}).on("click", "li[data-content]", function(e) {
g(t, this.getAttribute("data-content"))
})
},
y = function(t) {
if (!t || !t.length) return !1;
var e = window.getSelection().getRangeAt(0).getClientRects()[0],
n = !t.hasClass("ty-show"),
i = document.querySelector("content").getBoundingClientRect(),
r = e.left - 15;
return n && (r = r + 200 > window.innerWidth ? window.innerWidth - 200 : r, t.css({
top: e.bottom + (File.isMac && app.shouldFixFontGlitch ? $("content").scrollTop() - i.top : 0),
left: r
}).addClass("ty-show")), t.find("[data-page]").hide().filter("[data-page=" + p.pageNo + "]").show(), this.autoCompleteShown = !0, !0
};
d.prototype = {
addToQueue: function(t, e) {
e = e || !1, r.isNullOrEmpty(t) || this.queue.push({
cid: t,
inlineOnly: e
})
},
run: function() {
this.timerID || this.scheduleNext()
},
scheduleNext: function() {
var t = this;
this.timerID = window.setTimeout(function() {
t.brushQueue(), t.scheduleNext()
}, this.interval)
},
clearAndPause: function() {
this.queue = [], this.pause()
},
pause: function() {
clearTimeout(this.timerID), this.timerID = null
},
resume: function(t) {
t && this.brushQueue(), this.run()
},
restart: function() {
this.queue = [], this.run()
},
brushNode: function(t) {
var e = this.editor.selection.buildUndo();
x.call(this, t, {}, e, !1) && this.editor.undo.exeCommand(e)
},
brushQueue: function() {
var t = this,
e = {},
n = t.queue.length;
if (!this.editor.isIME && !this.editor.isMousePressed) {
if (t.queue.length > 0 && !File.isLocked) {
var i = t.editor.selection.buildUndo(),
r = !1,
o = !0;
t.queue.map(function(n) {
e[n.cid] || (r = x.call(t, n.cid, e, i, n.inlineOnly) || r, e[n.cid] = 1, o = o && n.inlineOnly)
}), t.queue = [], r && i && t.editor.undo.exeCommand(i), this.expand(!0, !1, o)
}
n && this.triggerAutoComplete()
}
},
applyAutocompleteByKey: function() {
v = null, this.autoCompleteShown && g(this.editor, ((document.querySelector(".auto-suggest-container.ty-show .active") || {}).dataset || {}).content)
},
triggerAutoComplete: function(t) {
var e, n, i = null,
r = this.editor,
o = this.editor.selection.getTextAround(),
a = o[0],
s = o[1],
u = o[2],
c = this.editor.getJQueryElem((this.editor.selection.getRangy() || {}).commonAncestorContainer),
l = c.closest(".md-inline-math").length,
h = t && File.option.enableInlineMath,
d = this.editor.selection.getRangy();
if (u && d && d.collapsed && (a || s)) {
if (r.lastCursor = r.selection.buildUndo(d), n = function() {
if (d && d.collapsed) {
var t = $(d.endContainer).closest(".md-lang"),
e = t.text(),
n = t.prev().text().length + t.parent().prevAll().text().length;
if (e) return m = {
start: n,
end: n + e.length,
containerNode: t.closest("[mdtype]")[0]
}, e
}
}.call(this)) return void y.call(this, this.editor.fences.showAutoSuggest(n, p));
if (i = _.exec(a)) return void((e = /^(\w*:*)(\s|$)/.exec(s || "")) && (y.call(this, this.editor.emoji.showAutoSuggest(i[1] + e[1], p)), u.start -= i[1].length + 1, u.end += e[1].length, m = u));
if (h && (n = /\$?\$$/.exec(a)) && 0 == $(".md-expand.md-inline-math").length) {
var v, g = (/^\$+/.exec(s) || "").length;
if (g <= n[0].length) return (v = "$".repeat(n[0].length - g)).length && (d.insertNode(document.createTextNode(v)), d.collapse(!0)), u.start -= n[0].length, u.end += n[0].length, d.moveToBookmark(u), this.editor.mathInline.showAutoSuggest(d), this.editor.restoreLastCursor(null, !0), this.editor.undo.addSnap(r.focusCid, f.REPLACE), void(m = null)
}
} else {
if (!l) return this.hideAutoComplete();
c.trigger("inline-math-changed")
}
this.hideAutoComplete()
},
changeAutoCompleteSelection: function(t, e) {
if (this.isAutoCompleteShown()) {
var n, i = $(".auto-suggest-container.ty-show"),
r = i.find(".active");
i.length && p.pageCnt && (e && e.preventDefault(), r.length ? (r.length && (r = r.removeClass("active")[t ? "prev" : "next"]().addClass("active")), r.length || (p.pageNo += t ? -1 : 1, p.pageNo < 0 ? p.pageNo = p.pageCnt - 1 : p.pageNo >= p.pageCnt && (p.pageNo = 0), n = i.find("[data-page]").hide().filter("[data-page=" + p.pageNo + "]").show(), t ? n.find("li:last").addClass("active") : n.find("li:first").addClass("active"))) : r = i.find("ul:first>li:first").addClass("active"))
}
},
hideAutoComplete: function() {
p = {}, m = null, this.autoCompleteShown = !1, $(".auto-suggest-container.ty-show").removeClass("ty-show").find(".active").removeClass("active")
},
expandOnDelay: function(t) {
var e = this;
this.willExpandSoon && clearTimeout(this.willExpandSoon), this.willExpandSoon = setTimeout(function() {
e.expand(t)
}, 10)
},
closestExpandable: function(t) {
var e = t.closest("[md-inline]"),
n = e.parent().closest("[md-inline]");
if (!n.length) return e;
var i = e.attr("md-inline");
return i && !s.isType(i, u.plain, u.br, u.tag, u.autolink, u.pants, u.attr, u.linebreak) && e.prevAll("[md-inline]").length || e.nextAll("[md-inline]").length ? e : this.closestExpandable(n)
},
expand: function(t, e, n) {
if (!e && this.editor.wordCount.updateInSelection(), this.willExpandSoon && (clearTimeout(this.willExpandSoon), this.willExpandSoon = null), !this.editor.isIME) {
var i = this.editor.selection,
r = i.getRangy(),
o = i.rangy,
a = r ? r.cloneRange() : null;
if (a && (a.startContainer != this.editor.writingArea || 0 != a.startOffset)) {
var c;
if ($(".selected").removeClass("selected"), r && !File.isLocked) {
if (this.editor.selection.deRange(r), c = this.editor.getJQueryElem(r.commonAncestorContainer), this.editor.stylize.putBookmark(a, this.editor.stylize.buildBookmark(c)), !e && !n && function(t, e) {
var n = t.closest("[cid]");
if (n.length && t.closest("[md-inline]").length && !t.closest(".md-block-like").length) {
var i = n.find(".md-block-like");
if (!i.length) return !1;
var r = editor.findNodeByElem(t.closest("[cid]")),
o = editor.selection.buildUndo(e);
if (r.cid != o.endId) return !1;
var a = i.prevAll().rawText().length,
s = i.rawText().length;
if (!editor.lastCursor || editor.lastCursor.endId != o.endId || editor.lastCursor.startOffset > a + s || editor.lastCursor.endOffset < a + s) return !1;
var u = !1;
e.comparePoint(i[0], 0) < 0 && (o.start = o.end = o.end - a - s, u = !0);
var c = editor.simpleParse(r, !1);
if (c) return editor.findElemById(c[2]).replaceWith(c[1]), u && c[3].length > 1 && (o.startId = o.endId = c[3].last().getVeryFirst().cid), editor.undo.exeCommand(o), c[0].undo[0] = editor.lastCursor, c[0].redo.push(editor.selection.buildUndo()), editor.undo.register(c[0]), editor.quickRefresh(), !0
}
return !1
}(c, r)) return;
if (isInputComponent(document.activeElement) || document.activeElement.hasAttribute("tabindex")) return $(".md-expand").removeClass("md-expand"), $(this.editor.sessionStr).trigger("cursorChange", this.editor.styleBookmark);
if (!c.closest("[cid]").length || s.isType(c.closest("[cid]").attr("mdtype"), u.fences, u.math_block, u.html_block)) return $(this.editor.sessionStr).trigger("cursorChange", this.editor.styleBookmark);
if (r.collapsed) {
var l, f = k(c),
h = c.closest("[mdtype]"),
d = (h.attr("contenteditable"), []),
m = f.visibleText().length;
if (r.endOffset === m && m < f.text().length) l = f.addClass("md-expand"), (a = o.createRange()).collapseToPoint(f[0], f[0].childNodes.length), this.editor.selection.setRange(a, !0);
else if (b(r, -1), l = h[0] != $(r.startContainer).closest("[mdtype]")[0] ? f : k(this.editor.getJQueryElem(r.startContainer)), r.startContainer === r.endContainer)
if (r.toString().length && r.collapse(!1), 3 == r.endContainer.nodeType && r.endOffset == r.endContainer.textContent.length && y(r.endContainer.nextElementSibling)) r.endContainer.nextElementSibling.classList.add("selected"), r.selectNode(r.endContainer.nextElementSibling);
else {
b(r, 1);
var v = r.getNodes([1], y);
v.length && (a.setStart(v[0], 0), a.setEnd(v[0], 0), editor.selection.setRange(a, !0))
}
} else l = k(this.editor.getJQueryElem(r.startContainer));
if (!(d = k(this.editor.getJQueryElem(r.endContainer))).length && (d = l), l.length || d.length) {
var p = !1;
a.collapsed || (p = (a = function(e) {
try {
var n, i, r = e.commonAncestorContainer;
if (0 == e.startOffset && l.length && (l = editor.getJQueryElem(e.startContainer)).length)
if (l.closest(".md-expand").length || l[0].hasAttribute("cid") || l[0].querySelector("[cid]") || l.closest(".md-image:not(.md-img-loaded)").length)(i = l.closest(".md-expand")).length && (l = i);
else {
n = l.closest("[cid]")[0];
var o = e.collapsed;
l = function e(n, i) {
if (!n.prevAll(":not(.md-meta, .md-content)").text().length) {
var r = n.parent();
return r.attr("mdtype") ? n : i.contains(r[0]) || t ? e(r, i) : k(n)
}
return k(n)
}(l, r.contains && r.contains(n) ? n : r), e.setStartBefore(l[0]), o && e.collapse(!0)
}
if (e.endOffset == (e.endContainer.nodeType === document.TEXT_NODE ? e.endContainer.length : e.endContainer.childNodes.length)) {
var a = editor.getJQueryElem(e.endContainer);
if (a.length)
if (a.closest(".md-expand").length || a[0].hasAttribute("cid") || a[0].querySelector("[cid]") || a.closest(".md-image:not(.md-img-loaded)").length)(i = a.closest(".md-expand")).length && (a = i);
else {
if (n = a.closest("[cid]")[0], !(a = function t(e, n) {
if (!e.nextAll(":not(.md-meta, .md-content)").text().length) {
var i = e.parent();
return i.hasClass("[mdtype]") || i[0].contains(n) ? k(e) : t(i, n)
}
return k(e)
}(a, r.contains && r.contains(n) ? n : r)).length) return null;
e.setEndAfter(a[0])
}
}
} catch (t) {
console.warn(t)
}
return e
}(a) || a) && !a.collapsed), fastdom.mutate(function() {
$(".md-expand").removeClass("md-expand"), l.length ? F.call(this, l) : F.call(this, d), l.length && d.length && l.next().is(d) && !d.hasClass("md-img-loaded") && F.call(this, d, !0)
})
} else $(".md-expand").removeClass("md-expand");
if (p) this.editor.selection.deRange(a, !0, a);
else {
var g = window.getSelection().anchorNode;
g && (3 === g.nodeType || g.hasAttribute && g.hasAttribute("contenteditable")) && (a = a || this.editor.selection.getRangy(), this.editor.selection.deRange(a, !0, a)), a.commonAncestorContainer.parentElement && a.commonAncestorContainer.parentElement.classList.contains("ty-focusable-btn") ? a.commonAncestorContainer.parentElement.classList.add("selected") : y(g) && g.classList.add("selected")
}
$(this.editor.sessionStr).trigger("cursorChange", this.editor.styleBookmark)
} else c = this.editor.getMarkElem(), $(".md-expand").removeClass("md-expand"), c.length && s.isType(c.attr("mdtype"), s.TYPE.hr, s.TYPE.toc) && (this.editor.stylize.putBookmark(null, this.editor.stylize.buildBookmark(c)), $(this.editor.sessionStr).trigger("cursorChange", this.editor.styleBookmark))
}
}
function b(t, e) {
return i.extendRange(t, e)
}
function y(t) {
return t && t.classList && t.classList.contains("ty-focusable-btn")
}
},
isAutoCompleteShown: function() {
return this.autoCompleteShown
},
focusContainer: function(t) {
w.call(this, t)
}
};
var w = function(t) {
var e = t.closest("tr.md-end-block, li[cid]")[0],
n = t[0];
if (e && n) {
for (; e !== n && e.contains(n);) {
if (n.previousSibling && n.previousSibling.hasAttribute && n.previousSibling.hasAttribute("cid")) return !1;
n = n.parentElement
}
e.classList.add("md-focus-container")
}
},
F = function(t, e) {
e || $(".md-focus-container").removeClass("md-focus-container"), t.length && w(t.addClass("md-expand").trigger("expand").closest("[cid]").addClass("md-focus"))
};
function k(t) {
var e = t.parent().closest("[md-inline]");
return e.length ? k(e) : t.closest("[md-inline]")
}
var x = function(t, e, n, r) {
function a(t) {
for (var e = 0; e < t.attributes.length; e++) s.isType(t.attributes[e].name, "cid", "contenteditable", "id", "for", "onerror", "onload") && t.removeAttributeNode(t.attributes[e]);
t.classList.remove("md-img-loaded"), t.classList.remove("md-img-error")
}
function l(t) {
for (var e = t.querySelectorAll("*"), n = 0; n < e.length; n++) a(e[n]);
a(t)
}
function f(t, e, n, r, o, a) {
if (t.length) {
var s, u = n.innerHtml,
c = t[0].cloneNode(!0),
f = document.createElement("div");
a = n.cursorDiff;
return f.innerHTML = u, c.querySelectorAll(".md-inline-math").forEach(function(t) {
t.textContent = t.rawText()
}), c.querySelectorAll(".md-expand").forEach(function(t) {
t.classList.remove("md-expand")
}), f.querySelectorAll(".md-inline-math").forEach(function(t) {
t.textContent = t.rawText()
}), l(c), l(f), c.innerHTML.replace(/\s*class=\"\"/gi, "") != f.innerHTML.replace(/\s*class=\"\"/gi, "") ? (t.html(u), n.mdlike ? t.attr("mdlike") != n.mdlike && t.attr("mdlike", n.mdlike) : t.attr("mdlike") && t.removeAttr("mdlike"), o.selection.clearGlobalColumn(), o.mathInline.brush(t[0], r, !0), s = !0) : (t.hasClass("unholdable") && t.removeClass("unholdable"), t.find(".math-jax-preprocess").length && o.mathInline.brush(t[0], r, !0)),
function(t, e, n, r, o) {
if (e.length && o.focusCid === r.cid) return t && (n && n.undo.unshift(i.utils.clone(t)), t.start = d(e, t.start), t.end = d(e, t.end), n && n.redo.push(i.utils.clone(t))), o.undo && o.undo.register(n), !0;
return !1
}(r, a, n.command, e, o) || s
}
}
function h(t, e, n, r, o) {
return n.blockChanged ? function(t, e, n, r, o) {
var a = n.cursorDiff || [];
return o.selection.clearGlobalColumn(), n.replaceCid ? (o.findElemById(n.replaceCid).replaceWith(n.html), o.refreshUnder(o.findElemById(n.replaceCid)[0])) : t.closest("p").replaceWith(n.html), n.toRemove && n.toRemove.forEach(function(t) {
o.findElemById(t).remove()
}), o.focusCid && o.focusCid !== e.cid || (o.focusCid = n.focus, o.focusCid && w(o.findElemById(o.focusCid)), r && (n.command.undo.unshift(i.utils.clone(r)), a.length && (r.start = d(a, r.start), r.end = d(a, r.end)), r.id = n.focus, r.startId = n.focus, r.endId = n.focus, r.start -= n.offset, r.end -= n.offset, n.command.redo.push(i.utils.clone(r))), o.undo.register(n.command)), !0
}(t, e, n, r, o) : f(t, e, n, r, o)
}
function d(t, e) {
var n = e;
for (var i in t) void 0 !== i && i <= e && (n += t[i]);
return n
}
try {
var m, v, p = t,
g = t;
if ("string" == typeof t ? p = this.editor.getNode(t) : g = p.id, !p) return;
if (s.isType(p, u.meta_block)) return;
if (c.CONST.NoInline.indexOf(p.get("type")) > -1) return;
if (p.get("children").length) return p.get("children").toArray().map(function(t) {
e && (e[t.id] = 1), x.call(this, t, e, n, r)
}, this), !0;
if (m = this.editor.findElemById(g), p.get("type") == u.def_footnote) {
var b = m.children(".md-def-content");
return v = b.rawText(), h(b, p, o.quickParse(v, this, p, !0), n, this.editor)
}
return v = m.rawText(), h(m, p, o.quickParse(v, this, p, r || !s.isType(p, u.paragraph), null, n), n, this.editor)
} catch (t) {
t.stack
}
},
_ = /:(\w+)$/;
n.exports = d
}), $__System.registerDynamic("2d", ["e", "12", "13", "2e", "2f", "30", "1b", "29", "14", "31"], !0, function(t, e, n) {
"use strict";
this || self;
var i = t("e"),
r = t("12"),
o = t("13"),
a = o.Node,
s = o.TYPE,
u = t("2e"),
c = t("2f"),
l = t("30").rangy,
f = t("1b"),
h = t("29"),
d = t("14"),
m = t("31"),
v = window.reqnode ? reqnode("electron").remote : null,
p = null,
g = {},
b = null,
y = "typora-copy-images-to",
w = "http://support.typora.io/Images/";
window.imgLastModified = Math.floor((new Date - 0) / 1e3), window.uploadImageQueue = new Set, window.moveImageQueue = new Set, window.imagePreLoadAfterMove = {};
function F(t, e, n) {
if (n && t && e) {
var i = n.clientHeight,
r = n.clientWidth;
i && r && (imagePreLoadAfterMove["file://" + t.replace(/^file:\/\//, "").replace(/\\/g, "/")] = {
src: e,
size: "height:" + i + "px;width:" + r + "px;"
})
}
}
function k(t, e) {
return t.replace(/(\(<?)((?:\([^)]*\)|[^()])*?)(>?[ \t]*((['"])(.*?)\5[ \t]*)?\))/, "$1" + e + "$3")
}
function x(t, e) {
return /src\s*=\s*['"]/.exec(t) ? t.replace(/(src\s*=\s*(["'])).+?(\2)/i, "$1" + e + "$3") : t.replace(/(src\s*=\s*)([^\s'"]+)(\s|$)/i, '$1"' + e + '"$3')
}
function _(t) {
var e = i("[data-origin-path=" + JSON.stringify(t) + "]");
e.length, uploadImageQueue.delete(t), moveImageQueue.delete(t), (n = e).removeClass("md-on-uploading").removeClass("md-on-moving"), n.find(".md-image-uploading-mask-wrapper").remove(), n.removeAttr("data-origin-path");
var n;
return e
}
var $ = {};
window.onImageDownloaded = function(t, e, n, i) {
var r = $[t];
r && (r.callbacks.map(function(t) {
t(e, n, i)
}), delete $[t])
};
function E(t, e, n, i) {
var r = c.applyUploadingStyle;
if (t.length) {
var o = t.find("img")[0];
loadedImgCache.remove(o.getAttribute("src") || ""), o.onload = null
}
return this.editor.brush.clearAndPause(!0), window.moveImageQueue.add(n), r(t, n, !0, !0), this.editor.brush.resume(), File.isMac ? function(t, e) {
if (e = e.replace(/^file:\/\//, ""), !/^\w+:/.exec(e)) try {
e = decodeURI(e)
} catch (t) {}
return new Promise(function(n, r) {
bridge.callHandler("images.copyImage", {
src: e,
folder: t,
fileNameDefined: i || !1
}, function(t) {
t.success ? n(t.msg) : r(t.msg)
})
})
}.call(this, e, n) : function(t, e) {
return new Promise(function(n, r) {
var o = reqnode("fs-extra"),
a = null;
function s(t, e, i) {
var a;
if (/^(http(s?))|(ftp):\/\//.exec(t)) ! function(t, e, n, i, r) {
var o = v.getCurrentWindow(),
a = reqnode("fs-extra"),
s = reqnode("path").dirname(e),
u = function(o, s, u) {
u && !/^image/.exec(u) ? i(t + " is not an image, mimeType is " + u) : "completed" === o ? (r && s != e ? a.renameSync(s, e) : e = s, n(e)) : i(o ? "Image download " + o : "")
};
$[t] ? $[t].callbacks.push(u) : $[t] = {
dest: e,
callbacks: [u]
}, v.app.download(o.webContents.id, t, s), setTimeout(function() {
$[t] && ($[t].callbacks.remove(u), $[t].callbacks.length || delete $[t]), i("Download timeout.")
}, 3e4)
}(t, e, n, r, i);
else if (a = /^data:image\/[^;]+;base64,/.exec(t)) {
var s = decodeURI(t.substr(a[0].length));
try {
s = decodeURI(s)
} catch (t) {}
o.writeFile(e, s, "base64", function(t) {
if (t) return r("Failed to copy image\n." + t.message);
n(e)
})
} else {
try {
t = decodeURI(t)
} catch (t) {}
o.copy(t, e, {
overwrite: i
}, function(t) {
if (t) return r("Failed to copy image\n." + t.message);
n(e)
})
}
}
var u, c = File.isWin ? "\\" : "/";
if (i) s(e, a = t, !0);
else {
if (/^data:/.exec(e)) {
if (!(u = (/^data:image\/([^;]+);base64,/.exec(e) || [])[1])) return n(e);
u = d.removeInvalidPathCh(function() {
var t = new Date;
t.setHours(t.getHours() - t.getTimezoneOffset() / 60);
var e = t.toUTCString();
return e.substr(0, e.length - 4)
}() + "." + u)
} else u = m.getFileNameFromPath(e), u = d.removeInvalidPathCh(u.replace(/\?([^./]*)$/, ""));
t = (t + c).replace(/[\/\\]{2}$/, c), a = t + u, o.access(a, o.R_OK, function(t) {
t || (a = function(t) {
var e = reqnode("path");
return t.replace(/(\.[^.\/\\]+?$)/, "") + "-" + (new Date - 0) + e.extname(t)
}(a)), s(e, a, !1)
})
}
})
}.call(this, e, n)
}
function C(t, e, n) {
if (e = this.resolveImagePath(e), !t[0]) return this.editor.selection.buildUndo();
var r = this.editor,
o = r.selection.getRangy(),
a = t[0].querySelector(".md-content").textContent,
u = t.attr("md-inline") == s.imgtag ? x(a, e) : k(a, e),
c = r.selection.buildUndo(o),
l = f.makeEmptyCommand(c),
h = i.extend({}, c),
d = u.length - a.length,
m = r.findNodeByElem(t.closest("[cid]"));
r.undo.endSnap(!0);
var v = t.find(".md-content")[0];
o && v && o.comparePoint && o.comparePoint(v, 1) < 0 && (h.start += d), o && v && o.comparePoint && o.comparePoint(v, 2) < 0 && (h.end += d), l.undo.push(f.buildReplaceUndo(m)), t.find(".md-content").text(u), r.store(m, !0);
var p = r.findElemById(m.cid);
return r.brush.brushNode(m.cid), p.removeClass("md-expand"), r.undo.exeCommand(h), (o = r.selection.getRangy()) && i(o.commonAncestorContainer).closest(".md-image").length && (h = r.imgEdit.selectComponent(!0, !0)), l.redo.push(f.buildReplaceUndo(m)), l.redo.push(h), r.undo.register(l), h
}
function A(t, e, n, r, o) {
var a = this;
t && t.length && n && E.call(this, t, e, n, r).then(function(e) {
t = _(n), F(e, n, t.find("img")[0]), C.call(a, t, e)
}, function(e) {
t = _(n), e && console.error(e), e && !o && setTimeout(function() {
h.showNotification(i.localize.getString("Failed to Copy Image to Target Folder.") + " <code>" + d.escape(e) + "</code>", !0)
}, 500)
})
}
var S = r.Model.extend({
initialize: function(t) {
var e = this;
this.editor = t, i(t.sessionStr).on("mousemove", ".md-image>.md-meta", function(t) {
fastdom.measure(function() {
t.offsetX - t.target.offsetLeft < 20 && t.offsetY < 30 ? this.nextElementSibling && this.nextElementSibling.getAttribute("src").trim().length && fastdom.mutate(function() {
this.classList.add("md-show-hint")
}, this) : fastdom.mutate(function() {
this.classList.remove("md-show-hint")
}, this)
}, this)
}).on("mouseleave", ".md-image>.md-meta", function() {
fastdom.mutate(function() {
this.classList.remove("md-show-hint")
}, this)
}).on("click", "img", function(e) {
var n = i(e.target).closest(".md-image").addClass("md-expand");
if (n.length) {
var r = l.createRange();
r.moveToBookmark({
containerNode: n.children(".md-meta")[0],
start: 2,
end: 2 + (e.target.getAttribute("alt") || "").length
}), t.selection.setRange(r, !0)
}
}).on("btn-action", ".md-image-input-src-btn", function(e) {
i("#ty-tooltip").hide();
var n = document.createRange();
n.setStart(this.parentElement, 0), n.setEnd(this.parentElement, 0), i(this).remove(), t.selection.setRange(n, !0)
}).on("click btn-action", ".md-image-pick-file-btn", function(t) {
return i("#ty-tooltip").hide(), e.insertLocalImage(), !1
}).on("cursorChange", function(e, n) {
n && -1 != n.style.inline.indexOf("image") || !document.querySelector("#user-context-menu.show") || t.contextMenu.hide("#user-context-menu")
}), i(".context-menu").on("click", "[data-key='select-img-target'] a", function() {
File.editor.contextMenu.hide(), e.copyToSelectedFolderAction()
}).on("click", "[data-key='upload-img'] a", function() {
File.editor.contextMenu.hide(), e.uploadAction()
}).on("click", "[data-key='move-img-to-target'] a", function() {
File.editor.contextMenu.hide(), e.copyToTargetFolderAction()
}).on("click", "[data-key='reveal-img-in-finder'] a", function() {
if (File.editor.contextMenu.hide(), File.isNode) {
var t = i(".md-expand.md-img-loaded");
if (!t) return;
var n = e.getAbsolutePath(t.attr("data-src"));
n && v.shell.showItemInFolder(n)
}
}), this.registerBridge()
},
registerBridge: function() {
if (File.isMac) {
var t = this;
bridge.registerHandler("images.fetchImageLocalStorageFolder", function(e, n) {
n(t.getTagetImageStorageFolder() || null)
}), bridge.registerHandler("images.replaceImageMap", function(e, n) {
t.replaceImageMap(e.updateMap, e.allSuccess), n && n()
}), bridge.registerHandler("images.tagetImageStorageFolderExcludeSelf", function(e, n) {
n && n(t.getTagetImageStorageFolder(!0))
}), bridge.registerHandler("images.doSetImageCopyToFolder", function(e, n) {
t.doSetImageCopyToFolder(e), n && n()
}), bridge.registerHandler("images.doSetImageCopyToIPic", function(e, n) {
t.doSetImageCopyToFolder("ipic", !0), n && n()
}), bridge.registerHandler("images.doRemoveImageCopyToFolder", function(e, n) {
t.doRemoveImageCopyToFolder(), n && n()
}), bridge.registerHandler("images.doSetImageRootPath", function(e, n) {
t.doSetImageRootPath(e), n && n()
})
}
},
getLocalRootUrlForInsert: function() {
return this.editor.docMenu.getLocalRootUrl() || File.option.useRelativePathForImg && m.getCurrentFileFolderPath() || ""
},
getSrcFromDom: function(t, e) {
return t ? t.dataset.isDataSrc && t.querySelector("img") ? t.querySelector("img").getAttribute("src") : e ? this.getAbsolutePath(t.dataset.src) : t.dataset.src : ""
},
getAbsolutePath: function(t, e) {
if (!t) return t;
var n = this.getRealSrc(t).replace(/^file:\/\//, "");
return File.isWin && (n = n.replace(/^[\/\\]+/, "")), e && /^[\/\\]/.exec(n) ? "file://" + n : n
},
getRealSrc: function(t) {
if (!t) return t;
if (t = d.decodeFromEscapedURL(t), /^data:/.exec(t)) return t;
if (/^\/\//.exec(t)) return "http:" + t;
function e(t, e) {
return "file://" + m.normalizePath(t.replace(/^file:\/\//, "").replace(/\/$/, "") + "/" + e.replace(/^\//gi, ""))
}
try {
if (/^(file|ftp|https?):(\/\/|\\\\)/gi.exec(t)) return t;
if (File.isNode) {
var n = reqnode("path"),
i = this.editor.docMenu.getLocalRootUrl();
return File.isWin || !/^\//.exec(t) || i ? "file://" + n.resolve(this.editor.docMenu.getLocalRootUrl() || m.getCurrentFileFolderPath() || "", t.replace(/^\s*(\\\\|\/)/, "")) : "file://" + t
}
return /^(\/)|(\/\/)|(\\\\)|([a-z]+\:\\\\)/gi.exec(t) ? e(this.editor.docMenu.getLocalRootUrl() || "", t || "") : e(m.getCurrentFileFolderPath() || "", t || "")
} catch (t) {}
return t
},
updateImgRef: function(t) {
var e = this.editor.brush.inline;
i("[data-ref='" + d.escape(t) + "']").each(function() {
var t = (this.querySelector(".md-content") || {}).textContent;
void 0 !== t && i(this).replaceWith(e.output(t))
})
},
willUpdateImgRef: function(t) {
t && (b && clearTimeout(b), g[t] = !0, p = p || new Date, new Date - p > 200 ? setTimeout(function() {
Object.keys(g).map(this.updateImgRef, this)
}.bind(this), 10) : b = setTimeout(function() {
Object.keys(g).map(this.updateImgRef, this)
}.bind(this), 300))
},
refreshLocalImg: function() {
if (!File.inBusyMode) {
var t = Math.floor((new Date - 0) / 1e3);
i(".md-image img").each(function() {
var e = this.getAttribute("src");
if (/^file:/i.exec(e)) {
var n = e.replace(/\?lastModify=\d+$/, ""),
i = n + "?lastModify=" + imgLastModified;
failImgCache.remove(i), loadedImgCache.remove(i), this.setAttribute("src", n + "?lastModify=" + t), this.dataset.localRefresh = !0, this.onload = onImageLoadedFunc, this.onError = onImageErrorFunc
}
}), imgLastModified = t
}
},
updateLocalRootUrl: function() {
var t = this.editor.docMenu.getLocalRootUrl() || "";
if (this.editor.localRootUrl != t) {
for (var e = document.querySelectorAll("[md-inline='image']"), n = 0; n < e.length; n++) {
var r = (u = e[n]).querySelector("img");
if (u.getAttribute("data-src") != r.getAttribute("src")) {
var a = i.parseHTML(c.decorate({
type: o.TYPE.image,
markdown: u.textContent,
alt: r.getAttribute("alt"),
href: u.getAttribute("data-src")
}))[0];
u.parentElement.replaceChild(a, u)
}
}
var s = document.querySelectorAll("[data-ty-watch-src]");
for (n = 0; n < s.length; n++) {
var u, l = (u = s[n]).dataset.src;
u.getAttribute("src") != l && (u.src = this.getAbsolutePath(l, !0), "VIDEO" == u.tagName && this.editor.htmlBlock.resetVideoDom(u))
}
}
},
selectComponent: function(t, e) {
var n = this.editor.selection.getRangy(),
r = i(n.startContainer).closest("[md-inline='image']"),
o = r.text(),
a = n.getBookmark(r[0]),
s = o.indexOf("]"),
u = f.makeEmptyCommand(this.editor.selection.buildUndo());
t ? (a.start = s + 2, a.end = o.length - 1) : (a.start = 2, a.end = s), n.moveToBookmark(a), this.editor.selection.setRange(n, !0);
var c = this.editor.selection.buildUndo();
return u.redo.push(c), !e && this.editor.undo.register(u), c
},
buildImageMapToUpload: function() {
M = {};
for (var t, e, n = document.querySelectorAll(".md-image.md-img-loaded"), i = n.length, r = 0; r < i; r++) T(e = (t = n[r]).querySelector("img").getAttribute("src") || "") && (e = e.replace(/\?[^.\\\/]*$/, ""), M[e] = M[e] || [], M[e].push(t));
return Object.keys(M)
},
replaceImageMap: function(t, e) {
var n = f.makeEmptyCommand(this.editor.selection.buildUndo()),
r = this.editor,
o = new Set;
if (Object.keys(t).forEach(function(e) {
if (M[e]) {
var u = t[e];
M[e].forEach(function(t) {
t.querySelector("img").src = u, t.hasAttribute("data-src") && t.setAttribute("data-src", u);
var e, c, l = r.findNodeByElem(i(t).closest("[cid]")),
h = t.getAttribute("md-inline");
if (!o.has(l) && a.isType(h, s.image, s.imgtag) && (o.add(l), n.undo.push(f.buildReplaceUndo(l))), e = t.querySelector(".md-content").textContent, h == s.image) c = k(e, u), t.querySelector(".md-content").textContent = c;
else if (h == s.imgtag) c = x(e, u), t.querySelector(".md-content").textContent = c;
else if (h == s.refimg) {
var d = /^!\[((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)\]\s*\[([^\]]*)\]/.exec(e),
m = (d[2] || d[1]).replace(/\s+/g, " "),
v = r.nodeMap.link_list.getNodeByRef(m);
if (o.has(v)) return;
o.add(v), n.undo.push(f.buildReplaceUndo(v)), v.set("href", u), r.findElemById(v.cid).replaceWith(v.toHTML())
}
})
}
}), o.forEach(function(t) {
t.get("type") !== s.def_link && r.store(t, !0), n.redo.push(f.buildReplaceUndo(t))
}), n.redo.push(r.selection.buildUndo()), r.undo.register(n), e) {
var u = Object.keys(t).length;
h.showNotification(i.localize.getString("Successfully uploaded {0} images.").format(u), !0, i.localize.getString("Undo"), function() {
r.undo.undo()
})
}
},
insertLocalImage: function() {
if (!File.isLocked) {
var t = this.editor;
File.isNode ? function() {
var t = reqnode("electron").remote,
n = t.getCurrentWindow();
t.dialog.showOpenDialog(n, {
filters: [{
name: "Images",
extensions: ["png", "jpg", "jpeg", "bmp", "svg", "tiff", "webp", "gif"]
}],
properties: ["openFile", "multiSelections"],
buttonLabel: "Select"
}, e)
}() : File.isMac && window.bridge.callHandler("images.insertLocalImage", e)
}
function e(e) {
e && 0 != e.length && t.imgEdit.doInsertFromURLs(e)
}
},
shouldTriggerMove: function(t, e) {
if (void 0 === e && (e = this.getTagetImageStorageFolder()), !t) return !1;
if (/^\s*(https?|ftp):\/\//.exec(t)) return File.option.applyImageMoveForWeb;
if (File.option.applyImageMoveForLocal && !/^data:/.exec(t)) {
var n = this.getAbsolutePath(t);
if (0 != n.indexOf(e) || n.substring(e.length + 1).match(/[\\\/]/g)) return !0
}
return !1
},
tryMoveImageDom: function(t, e, n) {
if (e && t.length) {
var i = this.getSrcFromDom(t[0]);
this.shouldTriggerMove(i, e) && (File.isMac && "ipic" == e ? this.uploadAction(t, !0) : A.call(this, t, e, i, void 0, n))
}
},
prepImageMove: function(t, e) {
var n = this;
return new Promise(function(r, o) {
if (e) return r();
function a(t) {
t && alert(t.message || t), o()
}
if (File.isMac) {
if (void 0 === t && (t = n.getTagetImageStorageFolder()), "ipic" == t) return r();
bridge.callHandler("images.prepImageMove", {
folder: folder,
slient: folder == n.getTagetImageStorageFolderFromSetting()
}, function(t) {
"success" != t ? a(t) : r()
})
} else {
var s = reqnode("fs-extra"),
u = !1;
n.getTagetImageStorageFolder(!0) && (u = !0), void 0 === t && (t = n.getTagetImageStorageFolder()),
function(t, e) {
var n = reqnode("fs-extra");
return new Promise(function(r, o) {
if (!e) return r();
n.stat(t, function(e) {
if (!e) return r();
if ("ENOENT" != e.code) return o(e.message);
var n = i("#image-create-folder-confirm").find("#image-create-folder-target").text(t).end().modal({
backdrop: "static",
keyboard: !1
});
File.isLocked = !0, n.off("mousedown", ".image-create-folder-dialog-yes, .image-create-folder-dialog-no, .image-create-folder-dialog-help, .close").one("mousedown", ".image-create-folder-dialog-yes", function() {
n.modal("hide"), File.isLocked = !1, File.freshMenu(), r()
}).one("mousedown", ".image-create-folder-dialog-no", function() {
n.modal("hide"), File.isLocked = !1, File.freshMenu(), o(!1)
}).one("mousedown", ".close", function() {
n.modal("hide"), File.isLocked = !1, File.freshMenu(), o(!1)
}).on("mousedown", ".image-create-folder-dialog-help", function() {
v.shell.openExternal(w)
})
})
})
}(t, u).then(function() {
s.ensureDir(t, function(t) {
t ? a(t) : r()
})
}, a)
}
})
},
tryMoveImageInRange: function(t, e) {
var n = this.editor,
r = this.getTagetImageStorageFolder();
if (r) {
this.editor.brush.clearAndPause();
var o = t.getNodes([document.ELEMENT_NODE], function(t) {
return "image" == t.getAttribute("md-inline")
});
if (!o.length && t) {
var a = t.commonAncestorContainer.parentElement;
a && "image" == a.getAttribute("md-inline") && (o = [t.commonAncestorContainer.parentElement])
}
o.length && this.prepImageMove(r).then(function() {
o.forEach(function(t) {
n.imgEdit.tryMoveImageDom(i(t), r, e)
})
}), this.editor.brush.resume()
}
},
generateAlt: function(t) {
return (m.getFileNameFromPath(t) || "").replace(/(^\.)|(\.[^.]+$)/g, "")
},
doInsertFromURL: function(t, e, n) {
var r = t;
function o() {
return File.editor.imgEdit.generateAlt(t)
}
function a() {
var t = window.getSelection(),
e = "";
return !File.editor.sourceView.inSourceMode && t.startOffset > 0 && (e = " "), e
}
function s(t) {
var e = this.editor,
n = e.getMarkElem();
if (!n.length || !e.stylize.canContainInline(n)) return !1;
u.backspaceHandler(e, null, "delSelection");
var r, s = o(),
c = a(),
l = e.getNode(n.attr("cid")),
h = this.resolveImagePath(t),
d = c + "![" + s + "](" + h + ")",
m = e.selection.getRangy();
if (!m) return null;
if ((r = i(m.startContainer).closest("[md-inline='image']")).length) return window.moveImageQueue.add(t), C.call(this, r, t), r.attr("data-src", h), this.selectComponent(!0), r;
var v = m.getBookmark(n[0]).start,
p = f.makeEmptyCommand();
p.undo.push(e.selection.buildUndo()), u.insertInlineText(e, l, d, v, p, !0);
var g = e.findElemById(l.cid);
return e.brush.brushNode(l.cid), g.removeClass("md-expand"), m.moveToBookmark({
containerNode: g[0],
start: v + d.length,
end: v + d.length
}), (r = i(m.startContainer).closest(".md-image")).find("img").attr("src", "file://" + t), e.undo.register(p), window.getSelection(), r
}
if (t = this.resolveImagePath(t))
if (/\.(png|jpg|jpeg|svg|gif|bmp|webp|tiff)$/gi.exec(t)) {
var c, l = r,
h = this,
d = this.editor,
v = this.getTagetImageStorageFolder();
if (function() {
var e, n = o(),
s = a(),
c = d.selection.getRangy();
c && (e = i(c.startContainer).closest("[md-inline='image']")).length && ! function(t) {
if (t.startContainer.parentElement.classList.contains("md-image-after-src") && t.startContainer.textContent.length == t.startOffset) return !0
}(c) ? (C.call(this, e, r, !0), this.selectComponent(!0)) : u.pasteHandler(this.editor, s + "![" + n + "](" + t + ")", !0, !0)
}.call(this), this.shouldTriggerMove(t, v) && v)
if (File.isMac && "ipic" == v) bridge.callHandler("images.iPicValidateBeforeUpload", function(t) {
t && (h.editor.brush.clearAndPause(), c = s.call(h, l), h.uploadAction(c), h.editor.brush.resume())
});
else if (v && !e) return l = m.normalizePath(l), this.editor.brush.clearAndPause(), c = s.call(this, l), h.prepImageMove(v, File.isMac).then(function() {
A.call(h, c, v, l)
}), void this.editor.brush.resume()
} else if (/\.(flv|mov|mp4|avi|ogg|webm)$/gi.exec(t)) this.doInsertVideoFromURL(t);
else {
if (!/\.(wave|mp3|flac|aac)$/gi.exec(t)) return !1;
this.doInsertAudioFromURL(t)
}
},
doInsertVideoFromURL: function(t) {
var e = '<video src="{url}"></video>'.replace("{url}", t);
u.pasteHandler(this.editor, e, !1, !0)
},
doInsertAudioFromURL: function(t) {
var e = '<audio src="{url}"></audio>'.replace("{url}", t);
u.pasteHandler(this.editor, e, !1, !0)
},
doInsertFromURLs: function(t, e) {
var n = this.editor;
t.forEach(function(t, i) {
i > 0 && n.UserOp.insertParagraph(!1, n), n.imgEdit.doInsertFromURL(t, !1, e)
})
},
resolveImagePath: function(t) {
if (/^\/\//.exec(t)) return "https://" + t;
if (/^[^:]+:\/\//.exec(t)) return t;
var e = this.getLocalRootUrlForInsert(),
n = m.getCurrentFileFolderPath();
if (e && e.length) {
var i = d.getRelativePath(e, t);
e == n && (i = i.replace(/^\s*(\\\\|\/)/, "")), t = (!i.match(/^\.[\/\\]/) && this.editor.docMenu.getLocalRootUrl() ? "/" : "") + i
} else {
if (!File.option.useRelativePathForImg || !n || 0 !== t.indexOf(n)) return t;
t = t.substring(n.length).replace(/^\//, "").replace(/\\/, "/")
}
return File.isWin && (t = t.replace(/[\/\\]{1,2}/g, "/")), t
},
getTagetImageStorageFolder: function(t) {
var e = this.editor.docMenu.getValueInMeta(y);
if (e && !File.editor.sourceView.inSourceMode) {
if (File.option.allowImageUpload && "ipic" == e.toLowerCase()) return "ipic";
var n = m.getCurrentFileFolderPath();
if (n) return /[\\/]$/.exec(n[n.length - 1]) || (n += "/"), m.normalizePath(n + e.replace(/\${filename}/g, (File.getFileName() || "").replace(/\.[^.\/\\]+$/, "")), !0)
}
return t ? null : this.getTagetImageStorageFolderFromSetting()
},
getTagetImageStorageFolderFromSetting: function() {
if ("ipic" == File.option.defaultImageStorage) return "ipic";
var t = m.getCurrentFileFolderPath();
if (this.cachedFileImageStorage) return this.cachedFileImageStorage;
var e = File.option.defaultImageStorage;
if (t && (/[\\/]$/.exec(t[t.length - 1]) || (t += "/")), "folder" == e) {
if (t) return this.cachedFileImageStorage = m.normalizePath(t.replace(/[\\/]$/, ""), !0), this.cachedFileImageStorage
} else if ("assert" == e) {
if (t) return this.cachedFileImageStorage = m.normalizePath(t + "assets", !0), this.cachedFileImageStorage
} else if ("per-file-assert" == e) {
if (t) return this.cachedFileImageStorage = m.normalizePath(t + File.getFileName().replace(/\.[^.\/\\]+$/, "") + ".assets", !0), this.cachedFileImageStorage
} else if (e && !a.isType(e, "ipic")) {
var n = File.getFileName();
if (e.indexOf("${filename}") > -1) {
if (!n) return null;
e = e.replace(/\${filename}/g, n.replace(/\.[^.\/\\]+$/, ""))
}
/^\.\.?[\\\/]/.exec(e) ? t && (this.cachedFileImageStorage = m.normalizePath(t + e, !0)) : this.cachedFileImageStorage = m.normalizePath(e, !0)
}
return this.cachedFileImageStorage || ""
},
onFileMoved: function() {
"per-file-assert" != !File.option.defaultImageStorage && (this.cachedFileImageStorage = void 0)
},
revealInFinder: function() {
var t = i(".md-expand.md-img-loaded img").attr("src").replace(/^file:\/\//, "").replace(/\?lastModify=.+/, "");
JSBridge.showInFinder(t)
},
t: function(t, e, n, i) {
A.call(this, t, e, n, i)
},
copyToSelectedFolderAction: function() {
var t = i(".md-expand.md-img-loaded");
if (t) {
var e = this,
n = e.getSrcFromDom(t[0], !0),
r = m.getFileNameFromPath(n);
if (/^data:/.exec(n)) {
var o = (/^data:[\\\/]*image\/([^;]+)/.exec(n) || [])[1];
r = t.find("img").attr("alt") || new Date + "", o && (r = r + "." + o)
}
File.isMac ? bridge.callHandler("images.selectImageSavePath", {
defaultName: r || "",
absolutePath: n || ""
}, function(i) {
i && e.t(t, i, n, !0)
}) : v.dialog.showSaveDialog({
title: "Copy and update image srouce to..",
defaultPath: r
}, function(i) {
i && e.t(t, i, n, !0)
})
}
},
copyToTargetFolderAction: function() {
this.editor.brush.clearAndPause();
var t = i(".md-expand.md-img-loaded");
if (t) {
var e = this.getSrcFromDom(t[0], !0),
n = this.getTagetImageStorageFolder(),
r = this;
e && this.prepImageMove(n, File.isMac).then(function() {
r.t(t, n, e)
}), this.editor.brush.resume()
}
},
uploadAction: function(t, e) {
if (t = t || i(".md-expand.md-img-loaded")) {
var n = this;
File.isMac && bridge.callHandler("images.iPicValidateBeforeUpload", function(r) {
if (r) {
var o = n.getRealSrc(t.attr("data-src")).replace(/^file:\/\//, "");
(function(t, e) {
return this.editor.brush.pause(), window.uploadImageQueue.add(e.replace(/^file:\/\//, "")), c.applyUploadingStyle(t, e, !1), e = e.replace(/^file:\/\//, ""), File.isWin && (e = e.replace(/^[\/\\]+/, "")), this.editor.brush.resume(), new Promise(function(t, n) {
bridge.callHandler("images.upload", e, function(e) {
e.success ? t(e.msg) : n(e.msg)
})
})
}).call(n, t, o).then(function(i) {
e || F(i, o, t), t = _(o), C.call(n, t, i)
}, function(e) {
t = _(o), C.call(n, t, o), e && setTimeout(function() {
i("#md-notification").html("<p style='padding-right: 100px;'>" + i.localize.getString("Failed to upload image. Error Message:") + " <code>" + d.escape(e) + "</code><span class='btn-default btn-xs btn ok-btn' style='right: 40px;position: absolute;bottom: 8px;'>" + i.localize.getString("Close") + "</span></p>").show()
}, 500)
})
}
})
}
},
contextMenuItems: function(t) {
var e = (t.getAttribute("src") || "").replace(/\?(.+)$/, ""),
n = [],
i = this.getTagetImageStorageFolder();
i && "ipic" != i && (i = i.replace(/[\\\/]$/, "") + (File.isWin ? "\\" : "/"));
var r = d.escapeURL(i);
if (i && "ipic" != i && (0 != e.replace(/^file:\/\//, "").indexOf(r) || e.replace(/^file:\/\//, "").substring(r.length + 1).match(/[\\\/]/g))) {
var o = d.getFolder(i);
o && n.push("copyImgToTarget-" + o.replace(/\|/g, ""))
}
return n.push("copyImgToSelect"), File.isMac && ("ipic" == i ? n.unshift("uploadImg") : n.push("uploadImg")), /^file:\/\//.exec(e) && n.unshift("revealImgInFinder"), n
},
afterUserInsertImage: function(t) {
var e = (t.getAttribute("src") || "").replace(/\?(.+)$/, "");
if (e != this.lastUrl && t.parentElement && t.parentElement.contains(window.getSelection().anchorNode)) {
var n = [],
r = this.editor,
o = this.getTagetImageStorageFolder();
if (o && "ipic" != o) {
o = o.replace(/[\\\/]$/, "") + (File.isWin ? "\\" : "/"), e = e.replace(/^file:\/\//, ""), File.isWin && (e = e.replace(/^[\/\\]+/, ""));
var a = d.escapeURL(o);
if (0 != e.replace(/[\\]/g, "/").indexOf(a) || e.substring(a.length + 1).match(/[\\\/]/g)) {
var s = d.getFolder(o);
s && n.push({
label: "Copy to %@",
key: "move-img-to-target",
variable: s
})
} else this.lastUrl = e
}
if (n.push({
label: "Copy Image to...",
key: "select-img-target"
}), File.isMac && File.option.showiPic && ("ipic" == o ? n.unshift({
label: "Upload via iPic",
key: "upload-img"
}) : n.push({
label: "Upload via iPic",
key: "upload-img"
})), n.length) {
var u = r.selection.getRangy(),
c = i(u.endContainer).closest("[md-inline='image']");
u && c.length && !c.hasClass("md-on-moving") && !c.hasClass("md-on-uploading") && r.contextMenu.showCustom(n, "image")
}
}
},
toggleCopyToFolder: function() {
var t = reqnode("electron").remote,
e = t.getCurrentWindow(),
n = t.dialog,
r = this,
o = this.getTagetImageStorageFolder(!0),
a = m.getCurrentFileFolderPath();
if (File.refreshImageCopyStatus(!0), !File.isLocked && !File.editor.sourceView.inSourceMode)
if (o) this.doRemoveImageCopyToFolder(!1);
else {
if (!a) return void n.showMessageBox(e, {
title: i.localize.getString("Document must be saved first.", "Panel"),
message: i.localize.getString("Typora will copy newly inserted image to folder by selected relative path, so please save the file first.", "Panel"),
defaultId: 0,
cancelId: 0,
buttons: [i.localize.getString("OK")]
});
n.showOpenDialog(e, {
defaultPath: m.getCurrentFileFolderPath(),
title: i.localize.getString("Select Container Folder"),
properties: ["openDirectory", "createDirectory"],
buttonLabel: i.localize.getString("Select")
}, function(t) {
t && 0 != t.length && r.doSetImageCopyToFolder(t[0])
})
}
},
toggleUseImageRootPath: function() {
var t = reqnode("electron").remote,
e = t.getCurrentWindow(),
n = t.dialog,
r = this.editor.docMenu.getLocalRootUrl(),
o = this.editor;
r ? this.editor.docMenu.removeProperty("typora-root-url") : n.showOpenDialog(e, {
defaultPath: m.getCurrentFileFolderPath(),
title: i.localize.getString("Select Container Folder"),
properties: ["openDirectory", "createDirectory"],
buttonLabel: i.localize.getString("Select")
}, function(t) {
t && 0 != t.length && o.imgEdit.doSetImageRootPath(t[0])
})
},
doSetImageCopyToFolder: function(t, e) {
t = e && File.isMac ? "ipic" : d.getRelativePath(m.getCurrentFileFolderPath(), t, !0), this.editor.docMenu.writeProperty(y, t)
},
doSetImageRootPath: function(t) {
this.editor.docMenu.writeProperty("typora-root-url", d.getRelativePath(m.getCurrentFileFolderPath(), t, !0)), this.refreshLocalImg()
},
doRemoveImageCopyToFolder: function(t) {
return this.editor.docMenu.removeProperty(y, t)
}
});
function T(t) {
return !!/^\s*(file|data):/.exec(t)
}
var M = {};
n.exports = S
}), $__System.registerDynamic("32", [], !0, function(t, e, n) {
"use strict";
this || self;
if (window.reqnode) {
var i = reqnode("fs"),
r = reqnode("path"),
o = {},
a = function(t) {
return r.join(r.dirname(t), ".~" + r.basename(t))
},
s = function(t) {
this.file = t, this.callbacks = [], this.nextData = null, this.nextCallbacks = []
};
s.prototype.write = function(t, e) {
var n = this;
function r(t) {
for (; this.callbacks.length;) this.callbacks.shift()(t);
e(t), o()
}
function o() {
if (n.lock = !1, n.nextData) {
var t = n.nextData;
n.callbacks = n.nextCallbacks, n.nextData = null, n.nextCallbacks = [], n.write(t, n.callbacks.pop())
}
}
function s(t, n) {
for (; this.callbacks.length;) this.callbacks.shift()(t);
e(null, n), o()
}
this.lock ? (e && this.nextCallbacks.push(e), this.nextData = t) : (this.lock = !0, i.stat(this.file, function(e, n) {
if (!e && n) {
var o = a(this.file);
i.writeFile(o, t, function(e) {
i.writeFile(this.file, t, function(t) {
if (t) return r.call(this, t), void i.unlink(o, function() {});
i.unlink(o, s.bind(this))
}.bind(this))
}.bind(this))
} else(function() {
i.writeFile(this.file, t, function(t) {
t ? r.call(this, t) : s.call(this, null, !0)
}.bind(this))
}).call(this)
}.bind(this)))
}, e.writeFile = function(t, e, n) {
t = r.resolve(t), o[t] = o[t] || new s(t), o[t].write(e, n)
}, e.writeFileSync = function(t, e) {
i.writeFileSync(a(t), e), i.renameSync(a(t), t)
}
}
}), $__System.registerDynamic("33", ["34", "12", "e", "14", "1b", "13", "35", "29", "31", "36", "37", "32"], !0, function(t, e, n) {
"use strict";
this || self;
var i = t("34"),
r = (t("12"), t("e")),
o = t("14"),
a = t("1b"),
s = (a.SnapFlag, t("13")),
u = s.Node,
c = s.TYPE,
l = (t("35"), t("29")),
f = t("31"),
h = t("36"),
d = t("37"),
m = f.ChangeCounter,
v = (f.ChangeType, t("32")),
p = window.reqnode ? reqnode("electron").remote : null,
g = p ? p.app : window.app,
b = {
MAX_FILE_SIZE: 2e6,
option: {
indentByTab: !1,
indentSize: 2,
codeIndentSize: 4,
enableInlineMath: !0,
autoNumberingForMath: !1,
enableHighlight: !1,
enableSubscript: !1,
enableSuperscript: !1,
enableDiagram: !1,
copyMarkdownByDefault: !1,
showLineNumbersForFence: !1,
useRelativePathForImg: !1,
autoCorrectMisspell: !1,
noPairingMatch: !1,
autoPairExtendSymbol: !1,
enableAutoSave: !1,
scrollWithCursor: !1,
expandSimpleBlock: !1,
allowImageMove: !0,
allowImageUpload: !0,
headingStyle: 0,
ulStyle: 0,
olStyle: 0,
strictMarkdown: !1,
preferCRLF: !1,
sortType: 0,
sidebarTab: "",
useTreeStyle: !1,
noLineWrapping: !1,
prettyIndent: !1,
defaultImageStorage: null,
applyImageMoveForWeb: !1,
applyImageMoveForLocal: !0,
ignoreLineBreak: !1,
preLinebreakOnExport: !1,
hideBrAndLineBreak: !1,
indentFirstLine: !1,
monocolorEmoji: !1,
useFsQueue: !0,
isLocked: !1,
notGroupByFolder: !1,
convertSmartOnRender: !1,
remapUnicodePunctuation: !1,
smartDash: !1,
smartQuote: !1,
userQuotesArray: null,
autoResizeIframe: !0,
blockHTML: !0,
imageExportFontSize: "24px",
imageExportWidth: 640,
sendAnonymousUsage: !0,
presetSpellCheck: "auto",
sidebarWidth: null,
caseSensitive: !1,
wholeWord: !1,
fileSearchCaseSensitive: !1,
fileSearchWholeWord: !1,
wordCountDelimiter: 0,
expandFolders: !1,
customWordsPerMinute: !1,
wordsPerMinute: 382
},
needSaveState: !1,
fileHasModified: !1,
readOption: function() {
window._options && (b.option = r.extend(b.option, window._options)), b.option.headingStyle = b.option.headingStyle || 0, b.option.ulStyle = b.option.ulStyle || 0, b.option.olStyle = b.option.olStyle || 0, b.option.wordCountDelimiter = b.option.wordCountDelimiter || 0, b.option.sortType = b.option.sortType || 0, b.option.indentSize = b.option.indentSize || 2, b.option.codeIndentSize = b.option.codeIndentSize || 4, _options.mountFolder && b.setMountFolder(_options.mountFolder), b.isMac && b.setupSafari(), b.setIndentSize(b.option.indentSize), window.innerWidth < 540 && (b.option.sidebarTab = null), b.option.useCustomFontSize && (document.body.parentElement.style.fontSize = b.option.customFontSize + "px"), b.setCanCollapsePinnedOutline(b.option.canCollapseOutlinePanel), 3 == b.option.headingStyle && document.body.classList.add("use-varible-width-setex"), b.option.noLineWrapping && r("#write").addClass("fences-no-line-wrapping"), b.setIndentFirstLine(b.option.indentFirstLine, !0), b.setHideBrAndLineBreak(b.option.hideBrAndLineBreak || !1, !0), b.isFocusMode = b.option.isFocusMode, b.isTypeWriterMode = b.option.isTypeWriterMode, b.setIgnoreLineBreak(b.option.ignoreLineBreak || !1), b.option.monocolorEmoji && document.body.classList.add("monocolor-emoji"), i.setTagsContext({
appVersion: b.option.appVersion,
instance: b.option.instance,
arch: window.process ? process.arch : "x64",
lang: b.option.userLocale
}), i.setExtraContext({
setting: b.option
}), i.setUserContext({
id: b.option.uuid
})
},
setupSafari: function() {
try {
var t = Object.defineProperty({}, "passive", {
get: function() {
b.option.passiveEvents = !0
}
});
window.addEventListener("test", null, t)
} catch (t) {}
},
shouldRemapPunctuation: function() {
return b.option.remapUnicodePunctuation || !b.option.convertSmartOnRender && (b.option.smartQuote || b.option.smartDash)
},
setIndentFirstLine: function(t, e, n) {
b.option.indentFirstLine = t, b.option.indentFirstLine ? b.editor.writingArea.classList.add("first-line-indent") : b.editor.writingArea.classList.remove("first-line-indent"), e && (JSBridge.menu.update("Edit→Whitespace and Line Breaks→Indent first line of paragraphs", {
state: b.option.indentFirstLine
}), h.forceRefreshMenu()), n && JSBridge.putSetting("indentFirstLine", t)
},
setHideBrAndLineBreak: function(t, e, n) {
b.option.hideBrAndLineBreak = t, b.option.hideBrAndLineBreak ? document.body.classList.add("hide-br-and-line-break") : document.body.classList.remove("hide-br-and-line-break"), e && (JSBridge.menu.update("Edit→Whitespace and Line Breaks→Visible <br/>", {
state: !b.option.hideBrAndLineBreak
}), h.forceRefreshMenu()), n && JSBridge.putSetting("hideBrAndLineBreak", t)
},
setIgnoreLineBreak: function(t, e, n) {
(t = 1 == t || "true" == t) ? document.body.classList.add("ignore-line-break"): document.body.classList.remove("ignore-line-break"), b.option.ignoreLineBreak != t && (t ? r(".md-softbreak").html("<span contenteditable='false'></span>\n") : (r(".md-softbreak-emptyline").replaceWith("&#10;<span md-inline='emptyline' class='md-emptyline'>&#10;</span>"), r(".md-softbreak [contenteditable]").remove())), b.option.ignoreLineBreak = t, n && JSBridge.putSetting("ignoreLineBreak", t), e && (JSBridge.menu.update("Edit→Whitespace and Line Breaks→Preserve single line break", {
state: !t
}), h.forceRefreshMenu())
},
setIndentSize: function(t) {
b.option.indentSize = (t || 2) - 0, b.option.indentSize < 0 ? (b.option.indentSize = 2, b.option.indentByTab = !0) : b.option.indentByTab = !1
},
setEditor: function(t) {
b.isLocked = b.isMac && g.document.isLocked(), b.editor = t, b.isMac || (b.changeCounter = new m)
},
onFileOpened: function() {
if (b.isNode) {
reqnode("electron").ipcRenderer.send("addBackup", {
path: b.filePath,
mountFolder: b.e,
encode: b.encode,
useCRLF: b.useCRLF
}), b.needSaveState = !1
}
},
getFilePathUseNode: function() {
if (b.isNode) {
var t = p.getCurrentWindow(),
e = p.app.getDocumentController().getDocumentFromWindowId(t.id).path;
b.e || (b.e = t.initMountFolder, t.initMountFolder = void 0)
}
return e
},
setLineEnding: function(t, e, n) {
if (t != b.useCRLF || n) {
b.useCRLF = t;
var i = {
"Edit→Line Endings→Windows Line Endings (CRLF)": {
state: b.useCRLF,
enabled: !b.isLocked
},
"Edit→Line Endings→Unix Line Endings (LF)": {
state: !b.useCRLF,
enabled: !b.isLocked
}
};
if (JSBridge.menu.update(i), e) {
b.sync();
var r = b.editor.getMarkdown();
r = (r.split(/\r?\n/g) || [r]).join(b.useCRLF ? "\r\n" : "\n"), b.reloadContent(r), b.backupWindow()
}
}
},
loadInitData: function() {
function t(t) {
var e = b.editor;
e.reset(t), e.writingArea.focus(), void 0 != t && t.trim().length ? (e.selection.lockScroll(), e.selection.jumpIntoElemEnd(r("[cid]").last())) : (r(e.sessionStr + ">*:first-child").addClass("md-focus"), e.selection.jumpTop())
}
if (b.isMacWK) bridge.callHandler("document.loadInitData", function(e) {
var n = e[0],
i = e[1];
i && i.nodeMap ? b.restoreEditStateFromData(i, !1, !0) : t(n)
});
else {
var e = b.getDocumentSnap();
(e || {}).nodeMap ? (d.setFileTitle(b.getFilePathUseNode(), e.fileEncode), b.restoreEditStateFromData(e, !1, !0)) : b.recoverFromBackup() || b.getContent().then(t), onFileOpened()
}
},
recoverFromBackup: function() {
if (!b.isNode) return !1;
var t = b.getCurrentDocByNode(),
e = t && t.popBackupState();
if (!e || !e.content) return !1;
if (b.setLineEnding(e.useCRLF), d.setFileTitle(e.path || "", e.encode), b.e = e.mountFolder, b.editor.reset(e.content), b.updateChangeCount(f.ChangeType.NSChangeDone), e.path) {
var n = a.makeEmptyCommand();
n.redo.push(a.buildAllDoc(b.editor.nodeMap)), b.fs.readFile(e.path, e.encode || "utf8", function(t, e) {
t || (n.undo.push({
type: "initSrc",
src: e
}), b.changeCounter.doneStack.unshift(f.ChangeType.NSChangeCleared), b.editor.undo.register(n, !0, void 0, !0))
})
}
return !0
},
getContent: function(t, e) {
b.setLineEnding(b.option.preferCRLF);
var n;
if (b.isMac) return n = g.document.content || "", n = b.tryEnterOversize(n), b.setLineEnding(n.indexOf("\r\n") > -1 && !/[^\r]\n/.exec("a" + n)), n;
if (b.isNode) {
var i = t;
try {
if (i = t || b.getFilePathUseNode()) {
var o = b.fs.readFileSync(i),
a = e;
return o.length > b.MAX_FILE_SIZE ? (b.unsupported = !0, n = "", b.tryEnterOversize(null, !0)) : (a = a || f.getItemInDB("[encode]" + i) || f.detectEncodeByNode(o), n = f.getContentFromBuffer(o, a), b.setLineEnding(n.indexOf("\r\n") > -1 || !(n.indexOf("\n") > -1) && b.option.preferCRLF)), d.setFileTitle(i, a), n
}
d.setFileTitle()
} catch (t) {
if (b.option.slientOpenFailure = b.option.slientOpenFailure || p.getCurrentWindow().slientOpenFailure, !b.option.slientOpenFailure) {
var s = t.message || "";
debugMode || (s = s.splits && s.splits(/\n/)[0] || s), p.dialog.showErrorBox(r.localize.getString("Failed to load file"), s), b.editor && b.editor.library && b.editor.library.isFileTabShown() && b.editor.library.refreshPanelCommand()
}
if (b.option.slientOpenFailure = !1, d.setFileTitle(""), d.watchFileChange(null), i) {
var u = g.getDocumentController().getDocument(i);
u && u.switchToUntitled()
}
return ""
}
}
return ""
},
setContent: function(t, e) {
b.unsupported || (b.isMac ? g.document.content = t : e && b.isNode && g.documentController.setContentForWindow(t, p.getCurrentWindow().id), b.editor.tryEnterBusyMode(t))
},
getMountFolder: function() {
return b.e
},
setMountFolder: function(t) {
b.e = t
},
sync: function(t, e, n) {
if (!b.unsupported) {
var i;
if (b.editor.sourceView && b.editor.sourceView.inSourceMode) i = b.editor.sourceView.cm.getValue(b.useCRLF ? "\r\n" : "\n"), !n && b.setContent(i, e), (b.isMacLegacy || b.isMacWK) && t && b.isDocumentEdited() && b.editor.sourceView.onSave();
else {
b.editor.store(null, !0), isInputComponent(document.activeElement) && r(document.activeElement).trigger("change").trigger("inline-change");
try {
r(".md-focus").closest(".unholdable").length || b.editor.autoRemoveUnholdable()
} catch (t) {
Reporter.error(t, {
level: "warning"
}), console.sendError(t.stack)
}
b.setContent(b.editor.getMarkdown(), e)
}
}
},
isActiveWindow: function() {
if (b.isMac) return g.controller.isActiveWindow();
if (!b.isNode) return !0;
var t = p.getCurrentWindow();
if (t.id === (b.getCurrentDocByNode().activeWindow || {}).id) return !0;
t.isFocused() && (console.warn("error found on windows focus management"), window.onWindowFocus())
},
shouldTriggerSyncChange: function() {
if (b.isMac) return g.controller.shouldTriggerSyncChange();
if (b.isNode) {
var t = b.getCurrentDocByNode();
return b.isActiveWindow() && t.windows.size > 1
}
},
getCurrentDocByNode: function() {
return b.isNode ? g.documentController.getDocumentFromWindowId(p.getCurrentWindow().id) : null
},
saveUseNode: function(t, e, n) {
if (b.isActiveWindow() && !b.unsupported) {
b.sync();
var i, o = b.getFilePathUseNode(),
a = o,
s = b.fileEncode || "utf8",
u = b.editor.getMarkdown(),
c = !1;
if (!o && b.filePath && !n) {
o = b.filePath;
var h = reqnode("path").dirname(o);
reqnode("fs").existsSync(h) || (o = void 0), c = !0
}
if ((o || !n) && b.isNode) {
var m = reqnode("iconv-lite"),
p = reqnode("electron").ipcRenderer;
try {
i = m.encode(u, s)
} catch (t) {
y()
}
0 == i.length && "" != u && y(), o && !e ? (b.inSavingProcess = b.inSavingProcess || !e, !c && g.sendEvent("willSave", o), v.writeFile(o, i, function(e, n) {
if (e) return Reporter.error(e, {
fingerprint: ["steno2", "writeFile"]
}), void F(e.stack, e.code);
(c || n) && d.watchFileChange(o);
try {
if (i.length && 0 == b.fs.statSync(o).size) return F("Failed to write file"), void Reporter.error("Failed to write file: File size is 0 but data is not", {
fingerprint: ["steno2", "afterWriteFile"]
});
var r = b.fs.statSync(o);
b.lastModifiedDate = r.mtimeMs
} catch (t) {
return F(t.stack, t.code), void Reporter.error(t)
}
b.lastSaved = new Date;
var a = b.getCurrentDocByNode();
c && a.rename(o), a.setLastSync(b.lastSaved - 0), b.changeCounter.isDocumentEdited() && b.updateChangeCount(b.ChangeType.NSChangeAutosaved), t && t(e), c || g.sendEvent("didSave", {
path: o,
summary: u.substr(0, 200),
lastModifiedDate: b.lastModifiedDate
}), b.inSavingProcess = !1, b.needSaveState = !0, f.refreshTitlebarText(), b.backupWindow()
}), b.updateChangeCount(b.ChangeType.NSChangeAutosaved)) : n || (f.showSaveDialog(t || void 0), p.send("countly_add_event", {
key: "saveFile"
}))
}
}
function y() {
console.log("swith to utf8 encode"), i = Buffer.from(u), b.fileEncode = "utf8"
}
function w(t) {
var e = a ? [r.localize.getString("Save As", "Menu"), r.localize.getString("Open File Location", "Menu"), r.localize.getString("Cancel")] : [r.localize.getString("Save As", "Menu"), r.localize.getString("Cancel")];
l.showDialog({
title: r.localize.getString("Save File Failed"),
message: t,
buttons: e,
type: "error",
callback: function(t) {
0 == t ? ClientCommand.saveAs() : t == e.length - 2 && ClientCommand.openFileLocation()
}
})
}
function F(t, e) {
n || (w("EPERM" == e ? r.localize.getString("The file is read-only, or you do not have right permissions to modify the file.") : t), console.sendError("fs write failed -- \n" + (e || t))), b.updateChangeCount(b.ChangeType.NodeSaveFailed), b.inSavingProcess = !1, b.backupWindow()
}
},
recordEvent: function(t, e) {
b.isNode && ipc.send("countly_add_event", {
key: t,
segment: e
}), b.isMac && bridge.callHandler("controller.recordEvent", {
key: t,
segment: JSON.stringify(e || {})
})
},
updateChangeCount: function(t) {
if (!b.unsupported)
if (b.editor.sourceView && b.editor.sourceView.inSourceMode) b.isMac ? t == b.ChangeType.NSChangeAutosaved ? g.document.updateChangeCount(t) : t == b.ChangeType.NSChangeCleared ? g.document.updateChangeCount(t) : g.document.isDocumentEdited() || g.document.updateChangeCount(b.ChangeType.NSChangeDone) : b.changeCounter.updateChangeCount(t);
else {
b.needsUpdateSnap();
var e = null;
b.isMac ? (g.document.updateChangeCount(t), e = {
"Edit→Undo": {
enabled: b.editor.undo.hasUndo()
},
"Edit→Redo": {
enabled: b.editor.undo.hasRedo()
}
}) : (b.changeCounter.updateChangeCount(t), t === b.ChangeType.NSChangeAutosaved ? w = !1 : (w = !0, b.needSaveState = !0), b.isNode && (e = {
"Edit→Undo": {
enabled: b.editor.undo.hasUndo()
},
"Edit→Redo": {
enabled: b.editor.undo.hasRedo()
}
}, releasePrintWin_(), releaseCaptureWin_())), JSBridge.menu.update(e)
}
},
setDefaultImageStorage: function(t) {
b.option.defaultImageStorage = t, b.editor.imgEdit && (b.editor.imgEdit.cachedFileImageStorage = null)
},
exitOversize: function() {
var t = document.querySelector("#ty-oversize-body");
t.style.display || (t.style.display = "none"), b.unsupported = !1
},
tryEnterOversize: function(t, e, n) {
if (b.isMac && !g.document.currentFilePath()) return t;
if (f.bindOversizePlaceholder(), e || t.length > b.MAX_FILE_SIZE) {
if (document.querySelector("#ty-oversize-body").style.display = "", b.unsupported = !0, b.isNode) {
var i = b.getCurrentDocByNode();
i && !n && i.addSnap(null)
}
return ""
}
return t
},
onSwitchDocumentTarget: function(t, e) {
b.editor.brush.clearAndPause(), b.editor.searchPanel.closePanel(), b.fileHasModified = !1, b.editor.focusCid = null, b.exitOversize(), b.isMac && b.editor.library.markCurrentFile();
var n = b.tryEnterOversize(b.getContent(e)),
i = b.editor.sourceView.inSourceMode;
if (b.setDefaultImageStorage(b.option.defaultImageStorage), b._onInitParse = !0, t && b.isNode) {
var o = b.getCurrentDocByNode();
o.shouldReadFromDisk() && (t = null, o.addSnap(null))
}
t && t.nodeMap && t.undoRedo ? b.restoreEditStateFromData(t, void 0, !0) : (b.changeCounter && b.changeCounter.reset(), b.editor.undo.reset(), b.editor.nodeMap.reset(!1, !0), b.editor.reset(i ? "" : n)), i && b.editor.sourceView.setValue(n, !0);
var a = null,
s = 0;
if ((!t || !t.nodeMap) && b.editor.undo.reset(), b.isMac) {
var u = g.controller.getLastCursor() || [];
a = JSON.parse(u[1] || "null"), s = u[2] || 0
}
b.freshMenu(), b.editor.refresh(!1), b.editor.imgEdit.preFileImageStorage = void 0, b._onInitParse = !1, b.getMountFolder() || b.editor.library.onRootChanged(), a ? b.editor.undo.exeCommand(a) : window._hasSwitchCallback || (window.getSelection().removeAllRanges(), r("content").scrollTop(s), window._hasSwitchCallback = !1), b.backupWindow(), b.editor.brush.restart(), f.refreshTitlebarText()
},
getDocumentSnap: function() {
if (b.isMac) return g.document.snap;
if (b.isNode) {
var t = b.getCurrentDocByNode();
if (t) return t.getSnap()
}
},
restoreEditStateFromData: function(t, e, n) {
if (!t || !t.undoRedo || !t.nodeMap) return !0;
if (t.timeStamp == (b.isMac ? g.controller.contentSnapRestoredTime : b.contentSnapRestoredTime)) return !0;
b.fileHasModified = !0;
var i = null,
o = b.editor,
a = o.sourceView && o.sourceView.inSourceMode,
u = !1;
if (b._onInitParse = !0, b.editor.focusCid = null, b.editor.lastCursor = null, o.nodeMap.restoreFromJson(JSON.parse(t.nodeMap)), o.undo.restoreFromJson(JSON.parse(t.undoRedo)), b.setLineEnding(t.useCRLF), b._onInitParse = !1, b.isNode && (u = b.getCurrentDocByNode().shouldReadFromDisk(), t.content = t.srcContent = b.getCurrentDocByNode().getContent(), o.tryEnterBusyMode(t.content)), n && o.fences && o.fences.onLeaveDocument(), a) e && (i = o.sourceView.cm.getScrollInfo().top), b.reloadContent(t.srcContent, !0, !1, !1, !0), t.srcHist && (o.sourceView.cm.doc.clearHistory(), o.sourceView.cm.doc.setHistory(JSON.parse(t.srcHist))), t.fromSourceMode || b.reloadContent(t.content, !1, !1, !1, n || b.isMac && !g.document.isDocumentEdited()), e && o.sourceView.cm.scrollTo(0, i);
else if (e && (i = r("content").scrollTop()), t.fromSourceMode ? b.reloadContent(t.srcContent, !1, !1, !1, !0, n) : u || (r(o.sessionStr).html(s.NodeCollectionUtils.toHTML(o.nodeMap.blocks)), n || (o.focusCid = void 0, o.refresh())), e) {
if ("object" == typeof e) try {
o.undo.exeCommand(e)
} catch (t) {}
r("content").scrollTop(i)
}
if (b.isMac && (g.controller.contentSnapRestoredTime = t.timeStamp), b.isNode) {
if (b._needsUpdateSnap = !1, b.contentSnapRestoredTime = t.timeStamp, b.changeCounter.reset(t.changeCounter), u) return b.reloadContent(b.getContent(), !1, !1, !0, !1, n), b.updateChangeCount(b.ChangeType.NSChangeAutosaved), void(b.fileHasModified = !1);
d.setFileTitle(b.filePath, t.fileEncode), b.editor.spellChecker && b.editor.spellChecker.reset(!0)
}
n || (b.freshMenu(), b.editor.refresh(!1, !0));
var c = b.editor.wordCount;
c && c.update()
},
needsUpdateSnap: function() {
b.isMac ? g.document.needsUpdateSnap() : b._needsUpdateSnap = !0
},
backupDocumentSnap: function() {
b.isMac && g.document.backupDocumentSnap(), b.isNode && !b._onInitParse && b.buildDocumentSnap()
},
backupLastCursor: function() {
if (b.isMac) {
var t = b.editor.sourceView.inSourceMode;
bridge.callHandler("window.setLastCursor", {
cursor: JSON.stringify(b.editor.selection.buildUndo() || null),
offset: t ? 0 : r("content").scrollTop()
})
}
},
buildDocumentSnap: function() {
if (!b.unsupported && (b.sync(!1, !0), b.isMac && g.document.buildDocumentSnap(e()), b.isNode)) {
var t;
if (!b._needsUpdateSnap) return;
b._needsUpdateSnap = !1, (t = b.getCurrentDocByNode()) && t.shouldSaveSnap() && t.addSnap(e())
}
function e() {
var t = b.editor.sourceView.inSourceMode,
e = {
nodeMap: JSON.stringify(b.editor.nodeMap.storeToJson()),
undoRedo: JSON.stringify(b.editor.undo.storeToJson()),
timeStamp: new Date - 0,
cursorPos: JSON.stringify(b.editor.selection.buildUndo()),
useCRLF: b.useCRLF
};
return e.scrollOffset = t ? 0 : r("content").scrollTop(), t && (e.fromSourceMode = !0, e.srcHist = JSON.stringify(b.editor.sourceView.cm.doc.getHistory())), b.isNode && (e.fileEncode = b.fileEncode, e.changeCounter = b.changeCounter.clone(), b.contentSnapRestoredTime = e.timeStamp), b.isMac && (g.controller.contentSnapRestoredTime = e.timeStamp), e
}
},
presentedItemChanged: function(t) {
if (b.isActiveWindow() && !b.unsupported)
if (console.log("presentedItemChanged"), t && clientHanlderOnPresentationMoved(), b.isNode) {
if (b.filePath) {
if (b.inSavingProcess) return
} else b.filePath = b.getFilePathUseNode(), b.fileName = f.getFileNameFromPath(b.filePath);
b.filePath && b.fs.stat(b.filePath, function(t, e) {
if (e && !(b.lastModifiedDate >= e.mtimeMs)) {
b.lastModifiedDate = e.mtimeMs, console.log("presentedItemChanged did happen");
var n = b.changeCounter.isDocumentEdited();
if (function(t) {
var e, n = r("content").scrollTop();
if (t) {
if (b.isMac ? e = g.document.getDataFromFile(!0) : b.isNode && (e = b.getContent(b.filePath, b.fileEncode)), b.unsupported) {
if (b.isNode) {
var i = b.getCurrentDocByNode();
i && i.enterOversize()
}
return
}
b.reloadContent(e, !1, !1, !0), b.updateChangeCount(b.ChangeType.NSChangeAutosaved);
var o = b.editor.sourceView;
if (o.inSourceMode) {
var a = o.cm.getScrollInfo().top,
s = o.cm.listSelections();
o.setValue(e), o.cm.setSelections(s), o.cm.scrollTo(0, a)
}
setTimeout(function() {
b.setContent(e), r("content").scrollTop(n)
}, 0)
} else b.updateChangeCount(b.ChangeType.NSChangeReadOtherContents)
}(!n || confirm(r.localize.getString("File content is changed by external applications. Reload content from disk ?"))), n) {
p.getCurrentWindow().focus()
}
}
})
} else b.isMac && (g.document.isDocumentEdited() && !confirm(r.localize.getString("File content is changed by external applications. Reload content from disk ?")) || g.document.refreshContentFromDisk())
},
reloadWithEncoding: function(t) {
if (b.isNode && b.filePath && t != b.fileEncode) {
f.setItemInDB("[encode]" + b.filePath, t);
var e = b.getContent(b.filePath, t);
b.reloadContent(e), b.updateChangeCount(b.ChangeType.NSChangeCleared), b.backupWindow()
}
},
reloadContent: function(t, e, n, i, r, o) {
if (!b.unsupported && b.isMac && i && (t = b.tryEnterOversize(t), b.unsupported && g.document.enterOversize()), !b.unsupported) {
var u, c, l = a.makeEmptyCommand(),
f = b.editor.sourceView && b.editor.sourceView.inSourceMode;
b.isMac && b.setLineEnding(b.useCRLF), f || o || (b.editor.store(), l.undo.push(b.editor.selection.buildUndo())), b.editor.focusCid = null, b.editor.lastCursor = null, l.undo.push(a.buildAllDoc(b.editor.nodeMap, i));
var h;
if (f && (h = b.editor.sourceView.cm.getScrollInfo().top, c = b.editor.sourceView.cm.getCursor(), b.editor.sourceView.setValue(t, !0, i || r ? "fromDisk" : "begin")), f && i || (b.editor.nodeMap.reset(), (u = s.Node.parseFrom(t, b.editor.nodeMap, {
skips: {
old_code: !1
}
}))[1].map(function(t) {
t.set("attachTo", b.editor.nodeMap)
}), l.redo.push(a.buildAllDoc(b.editor.nodeMap, i)), b.editor.tryEnterBusyMode(t), f ? (b.editor.sourceView.renderedHTML = u[0], b.editor.undo.register(l, r)) : (b.editor.writingArea.innerHTML = u[0], b.editor.runAllScript())), f) {
var d = b.editor.sourceView.cm.getInputField();
return d.setSelectionRange && d.setSelectionRange(0, 0), b.editor.sourceView.cm.setCursor(c), void(i && void 0 !== h && b.editor.sourceView.cm.scrollTo(0, h))
}
if (i) {
var m = b.editor.undo.lastRegisteredOperationCommand(),
v = m && m.undo.last();
v && "reload" == v.type && v.reloadFromDisk && (l.undo = [v], b.editor.undo.removeLastRegisteredOperationCommand())
}
e || b.editor.undo.register(l, r), o || (e ? (b.editor.undo.reset(), b.updateChangeCount(b.ChangeType.NSChangeAutosaved)) : window.getSelection().removeAllRanges(), setTimeout(function() {
b.editor.refresh(), b.editor.selection.scrollAdjust()
}, n ? 500 : 0))
}
},
copy: function() {
b.editor.UserOp.copyHandler(b.editor)
},
delete: function() {
isInputComponent(document.activeElement) || b.editor.UserOp.backspaceHandler(b.editor, null, "Backspace")
},
editActive: function() {
var t = b.editor;
t.undo.prepCursorSnap();
var e = t.findElemById(t.focusCid);
u.isType(e.attr("mdtype"), c.html_block, c.math_block) && e.find(".md-rawblock-container").trigger("startedit")
},
deleteActive: function() {
var t = b.editor.getMarkElem(),
e = b.editor.findNodeByElem(t),
n = b.editor.UserOp.backToParagraph(editor, e, !0);
b.editor.undo.register(n)
},
cut: function() {
if (b.isLocked) return !1;
b.editor.refocus(void 0, !0), b.editor.UserOp.copyHandler(editor, null), b.editor.UserOp.backspaceHandler(editor, null, "delSelection")
},
pasteAsPlainText: function() {
r(b.editor.sessionStr).trigger("pasteAsPlainText")
},
lock: function() {
b.isLocked = !0, b.freshLock()
},
unlock: function() {
b.isLocked = !1, b.freshLock()
},
toggleSourceMode: function() {
b.editor.sourceView.inSourceMode ? (b.editor.sourceView.hide(), b.editor.library.recoverSidebar()) : (b.editor.library.tmpHideSidebar(), b.editor.sourceView.show()), b.freshMenuWithDeplay()
},
isFocusedOnWriteDiv: function() {
return r(document.activeElement).closest("#write").length > 0
},
getCurBlockType: function() {
try {
if (document.activeElement.hasAttribute && document.activeElement.hasAttribute("tabindex")) return r(document.activeElement).closest("[mdtype]").attr("mdtype") || "";
if (rangy.getSelection().rangeCount) {
var t = b.editor.selection.getRangy();
return r(t.commonAncestorContainer).closest("[mdtype]").attr("mdtype") || ""
}
} catch (t) {}
return ""
},
freshLock: function(t) {
b.editor && (void 0 !== t && (b.isLocked = t), r("content input, selector").prop("readOnly", b.isLocked || !1), r(".CodeMirror").each(function() {
this.CodeMirror && (this.CodeMirror.options.readOnly = b.isLocked || !1)
}), b.isLocked ? (b.editor.tableEdit.unfocusAll(), r("[contenteditable=true]").attr("locked", "true").attr("contenteditable", "false"), r(b.editor.sessionStr).blur(), r(".md-expand").removeClass("md-expand")) : r("[locked='true']").attr("locked", "false").attr("contenteditable", "true"), r("#md-searchpanel input").prop("readOnly", !1), b.freshMenu(), b.editor && b.editor.sourceView && b.editor.sourceView.inSourceMode && b.editor.sourceView.cm.focus())
},
setTheme: function(t) {
b.colorBrightness = 1;
function e() {
var t = (window.getComputedStyle(document.body).backgroundColor.match(/[\d.]+/gi) || []).map(function(t) {
return t - 0
});
void 0 !== t[3] && null !== t[3] || (t[3] = 1);
function e(t) {
var e = Number(t).toString(16).toUpperCase();
return 1 == e.length ? "0" + e : e
}
t.length && (b.isMac ? (t[0] + t[1] + t[2] + t[3] == 0 && (t = [255, 255, 255, 0]), bridge.callHandler("window.setBackground", t)) : JSBridge.putSetting("backgroundColor", (n = t[0], i = t[1], r = t[2], "#" + e(n) + e(i) + e(r))), b.colorBrightness = (299 * t[0] + 587 * t[1] + 114 * t[2]) / 256e3);
var n, i, r;
if (b.isMac) {
var o = null;
"true" != (window.getComputedStyle(document.body).getPropertyValue("--typora-center-window-title") || "").trim() && document.body.classList.contains("pin-outline") && (o = document.querySelector("#typora-sidebar").getBoundingClientRect().width), bridge.callHandler("window.setTitlebarTextMarginLeft", o)
}
}
var n = function() {
setTimeout(e, 1e3), b.editor.refresh(!0), b.isFocusMode && b.editor.updateFocusMode(!1), b.isTypeWriterMode && b.editor.setTypeWriterMode(!0, !0)
};
if (b.isMac) {
var i = document.getElementById("theme_css"),
o = i.getAttribute("href"),
a = "http://typora-theme";
if (t = (t = t || b.option.theme || "github").replace(/\s*([A-Z])/g, "-$1").replace(/^-/, "").toLowerCase(), b.option.useCustomFontSize) {
var s = (b.option.customFontSize || 16) + "";
document.body.parentElement.style.fontSize = s + "px"
} else document.body.parentElement.style.fontSize = "";
(o = (/([^\\\/]+)\.css$/.exec(o) || [])[1]) != t ? r.get(a + "/" + t + ".css", function() {
i.setAttribute("href", a + "/" + t + ".css")
}).then(function() {
setTimeout(n, 20)
}) : setTimeout(e, 20), document.querySelector("#base_user_css").setAttribute("href", a + "/base.user.css"), document.querySelector("#theme_user_css").setAttribute("href", a + "/" + t + ".user.css")
} else if (b.isNode) {
t = (t || b.option.theme || "").replace(/\.css$/, "");
var u = b.option.userDataPath,
c = b.isWin ? "\\" : "/";
r("#theme_css").attr("href", [u, "themes", t + ".css"].join(c)), setTimeout(n, 20), document.querySelector("#base_user_css").setAttribute("href", [u, "themes", "base.user.css"].join(c)), document.querySelector("#theme_user_css").setAttribute("href", [u, "themes", t + ".user.css"].join(c)), b.isMacNode && g.setting.refreshThemeMenu()
}
document.body.style.backgroundColor = "", document.body.style.setProperty("--bg-color", "")
},
getFileName: function(t) {
if (b.isMac) {
var e = g.document.currentFilePath(),
n = g.document.currentFolderPath(),
i = void 0;
return e && n && (i = e.replace(n, "").replace(/^\//g, "")), i || (t ? b.getSuggestedFileName() : void 0)
}
return b.fileName || (t ? b.getSuggestedFileName() : void 0)
},
getSuggestedFileName: function(t) {
if (b.fileName) return b.fileName.replace(/\.[^.]+$/, "");
if (t) {
var e = b.getFileName();
if (e) return e.replace(/\.[^.]+$/, "")
}
var n, i, a = "",
s = "";
try {
(i = b.editor.docMenu.getMetaNode()) && (s = b.editor.docMenu.getValueInMeta("date", i) || "", s = (/\d+-\d+-\d+/g.exec(s) || /\d+\/\d+\/\d+/g.exec(s) || [""])[0], a = (a = b.editor.docMenu.getValueInMeta("title", i) || "").replace(/(^\s*("|'))|(("|')\s*)/gi, "").replace(/\s+(.)/gi, "-$1").toLocaleString(), a = s && a ? [s, a].join("-") : a), 0 != a.trim().length && "-" != a || (n = r(r("#write h1, #write h2, #write h3")[0]), b.editor.sourceView.inSourceMode ? (a = (a = b.editor.getMarkdown()).substr(0, a.indexOf("\n")) || a).length > 60 && (a = a.substr(0, a.indexOf(".")) || a) : n.length ? a = b.editor.UserOp.getDisplayText(n).replace(/\r?\n/gi, "") : (a = (a = (n = r(r("[cid]:not(.md-meta-block)")[0])).length ? b.editor.UserOp.getDisplayText(n) : "").substr(0, a.indexOf("\n")) || a).length > 60 && (a = a.substr(0, a.indexOf(".")) || a)), a.length > 120 && (a = a.substr(0, 120))
} catch (t) {}
return 0 == a.trim().length && (a = r.localize.getString("Untitled", "Front")), o.removeInvalidPathCh(a.trim()) || "Untitled"
},
setCanCollapsePinnedOutline: function(t) {
t ? document.body.classList.remove("no-collapse-outline") : document.body.classList.add("no-collapse-outline"), this.editor && this.editor.nodeMap && this.editor.nodeMap.toc && this.editor.nodeMap.toc.updateHTML()
},
refreshImageCopyStatus: function(t, e) {
t ? (y && clearTimeout(y), y = setTimeout(function() {
h.doRefreshImageCopyStatus(e)
}, 500)) : h.doRefreshImageCopyStatus(e)
},
isDocumentEdited: function() {
return b.isNode ? b.changeCounter.isDocumentEdited() : b.isMacWK ? bridge.callSync("document.isDocumentEdited") : b.isMac ? g.document.isDocumentEdited() : void 0
},
backupWindow: function() {
if (b.isNode)
if (b._onInitParse) b.needSaveState = !1;
else try {
if (!b.needSaveState || !b.editor.brush.timerID || !b.isActiveWindow()) return;
var t = b.fileHasModified && b.changeCounter.isDocumentEdited();
if (!t && b.changeCounter.isDiscardableUntitled() && !b.e) return;
t && b.option.enableAutoSave && (b.saveUseNode(null, null, !0), t = b.changeCounter.isDocumentEdited());
var e = {
path: b.filePath,
encode: b.encode,
hasUnsaved: t,
scrollPos: r("content").scrollTop(),
useCRLF: b.useCRLF,
syncDate: new Date - 0,
mountFolder: b.e,
content: null
};
t && (b.editor.store(null, !0), e.content = b.editor.getMarkdown());
return reqnode("electron").ipcRenderer.send("addBackup", e), b.needSaveState = !1, e
} catch (t) {
console.sendError(t.stack)
}
}
},
y = null,
w = !1,
F = function() {
b.editor.brush.timerID && b.isActiveWindow() && w && (w = !1, d.saveToRecover(b.editor.getMarkdown()))
};
b.ChangeType = f.ChangeType, b.isMacLegacy = b.isMac = void 0 !== window.app, b.isNode = void 0 !== window.reqnode, b.isMacNode = b.isNode && "darwin" == process.platform, b.isMacOrMacNode = b.isMac || b.isMacNode || b.isMacLegacy, b.isNodeHtml = window.isOnWindowHtml, b.isWin = b.isNode && "win32" == process.platform, b.isLinux = b.isNode && "linux" == process.platform, b.isUnixNode = b.isLinux || b.isMacNode, b.FileInfoPanel = d, b.backupVersionWorker = F, b.freshMenu = h.freshMenu, b.freshMenuWithDeplay = h.freshMenuWithDeplay, b.bindMenu = h.bindMenu, b.MenuHelper = h;
var k = navigator.userAgent.toLowerCase();
b.isSafari = b.isMac || k.indexOf("safari/") > -1 && -1 == k.indexOf("chrome"), b.startAutoSaveAndBackupService = function() {
if (b.isNode) {
p.getCurrentWindow().on("blur", b.backupWindow);
var t = g.setting.config || {},
e = Number.parseFloat(t.autoSaveTimer || 3);
e && !Number.isNaN(e) || (e = 3), setInterval(b.backupWindow, 60 * e * 1e3), setInterval(F, 6e5)
}
}, b.isNode && (b.fs = reqnode("fs"), b.startAutoSaveAndBackupService()), n.exports = b
}), $__System.registerDynamic("38", ["12", "14", "1c", "26", "1f", "13", "29"], !0, function(t, e, n) {
"use strict";
this || self;
var i = t("12"),
r = t("14"),
o = t("1c"),
a = t("26"),
s = t("1f"),
u = t("13"),
c = t("29"),
l = u.Node,
f = u.TYPE,
h = /[A-Za-z_\\u00C0-\\u024f]/i;
function d(t, e) {
return new RegExp(r.escapeRegExp(t) + (e.wholeWord ? "(?![A-Za-z_\\u00C0-\\u024f])" : ""), e.caseSensitive ? "g" : "gi")
}
var m = null;
function v(t) {
if (t) {
var e = t.initPos;
if (!e && t.curSelection)
if (t.curSelection.isCm) e = t.curSelection;
else {
var n = o.createRange(),
i = t.curSelection;
if (!i.parentElement) return;
n.selectNode(i), (i = $(i).closest("[cid]")[0]) && (e = n.getBookmark(i)), e && (e.cid = i.getAttribute("cid"))
}
return e || null
}
return null
}
var p = i.Model.extend({
initialize: function(t) {
this.editor = t, this.curSel = null, this.searchTimer, this.caseSensitive = File.option.caseSensitive, this.wholeWord = File.option.wholeWord, this.bindEvents()
},
bindEvents: function() {
var t, e = this,
n = !1,
i = a.map;
!File.isMac && !File.isNode && a("command+f, ctrl+f", function(t) {
e.showPanel(), t.preventDefault()
}), !File.isMac && !File.isNode && a("command+h, ctrl+h", function(t) {
e.showPanel(!0), t.preventDefault()
}), $(document.body).on("keydown", function(t) {
var n = event.keyCode || event.which;
if ("Esc" == i[n] && e.isOpen) return e.closePanel(), !1
}).on("mouseup", ".md-search-hit", function() {
e.closePanel(!1, $(this))
}).on("mouseup", ".cm-search-hit", function(t) {
var n = $(t.target).closest(".CodeMirror")[0].CodeMirror,
i = s.posFromMouse(n, t),
r = n.indexFromPos(i),
o = e.searchStatus.hits.find(function(t) {
return t.isCm == n && t.start <= r && t.end >= r
});
if (e.closePanel(!0), o) return n.doc.setSelection(n.posFromIndex(o.start), n.posFromIndex(o.end)), !1
}).on("mouseup", ".CodeMirror", function(t) {
e.closePanel(!0)
}), $("#md-searchpanel").on("blur", function() {
e.closePanel()
}).on("click", ".close-btn", function() {
e.closePanel()
}).on("keydown", "input", function() {
var t = event.keyCode || event.which;
if ("Esc" == i[t]) return e.closePanel(), !1
}).on("keydown", "#search-panel-input", function(t) {
var r = t.keyCode || t.which;
return n = 229 == r, "Enter" == i[r] ? (e.highlightNext(t.shiftKey), !1) : "Tab" == i[r] ? $("#md-searchpanel.searchpanel-replace-mode").length ? ($("#search-panel-replace-input").focus(), !1) : (this.value += "\t", !1) : void(e.inKeydown = !0)
}).on("keyup", "#search-panel-input", function() {
var r = event.keyCode || event.which;
(n = n && !(String.fromCharCode(r).match(/\s|[0-9]/g) || "Enter" == i[r])) || t == $(this).val() || (t = $(this).val(), e.inKeydown = !1, e.doSearch(t))
}).on("keydown", "#search-panel-replace-input", function() {
var t = event.keyCode || event.which;
if ((n = 229 == t) || "Enter" != i[t]) {
if ("Tab" == i[t] && !event.shiftKey) return !1
} else e.replaceSelection()
}).on("mousedown", "#search-panel-prev", function() {
e.highlightNext(!0)
}).on("mousedown", "#search-panel-next", function() {
e.highlightNext()
}).on("click", "#md-search-type-label", function() {
$("#md-searchpanel").addClass("searchpanel-replace-mode"), $("#search-panel-replace-input").focus(), document.body.classList.add("on-replace-panel-open")
}).on("click", "#md-replace-type-label", function() {
$("#md-searchpanel").removeClass("searchpanel-replace-mode").removeClass("searchpanel-msg-mode"), $("#search-panel-input").focus(), document.body.classList.remove("on-replace-panel-open"), $("content").removeClass("on-replace-panel-open")
}).on("click", "#search-panel-replace-btn", function() {
e.replaceSelection(), $("#md-searchpanel").removeClass("searchpanel-msg-mode")
}).on("click", "#search-panel-replaceall-btn", function() {
$("#md-searchpanel").removeClass("searchpanel-msg-mode"), e.replaceAll()
}).on("click", "#searchpanel-msg-close-btn", function() {
$("#md-searchpanel").removeClass("searchpanel-msg-mode")
}).on("click", "#searchpanel-msg-undo-btn", function() {
e.editor.undo.undo(), $("#md-searchpanel").removeClass("searchpanel-msg-mode"), !e.editor.sourceView.inSourceMode && e.doSearch($("#search-panel-input").val())
}).on("mousedown", "#searchpanel-case-option-btn", function(t) {
return this.classList.toggle("active"), e.caseSensitive = !e.caseSensitive, File.isMac && bridge.callHandler("touchBar.updateFindReplaceMode"), JSBridge.putSetting("caseSensitive", e.caseSensitive), e.doSearch(), !1
}).on("mousedown", "#searchpanel-word-option-btn", function() {
return this.classList.toggle("active"), e.wholeWord = !e.wholeWord, File.isMac && bridge.callHandler("touchBar.updateFindReplaceMode"), JSBridge.putSetting("wholeWord", e.wholeWord), e.doSearch(), !1
}), e.wholeWord && document.querySelector("#searchpanel-word-option-btn").classList.add("active"), e.caseSensitive && document.querySelector("#searchpanel-case-option-btn").classList.add("active")
},
replaceAll: function() {
if (this.searchStatus && this.searchStatus.hits.length) {
var t, e = this.searchStatus.searchText,
n = $("#search-panel-replace-input").val(),
r = this.searchStatus.hits;
(function(t) {
m && clearTimeout(m), $("#md-searchpanel.searchpanel-replace-mode").addClass("searchpanel-msg-mode").find("#searchpanel-msg-content").text(t), m = setTimeout(function() {
$("#md-searchpanel").removeClass("searchpanel-msg-mode")
}, 5e3)
}).call(this, (a = this.searchStatus.hits.length, this.searchStatus.searchText, "Replaced " + a + " occurrence(s)"));
var a;
if (this.editor.sourceView.inSourceMode) {
var s = "",
u = 0,
c = r.length;
for (t = 0, e = this.editor.sourceView.cm.getValue(); u < c; u++) s = s + e.substring(t, r[u].start - 0) + n, t = r[u].end - 0;
s += e.substring(t);
var l = this.editor.sourceView.cm.getScrollInfo().top;
return this.editor.sourceView.cm.setValue(s), this.editor.sourceView.cm.scrollTo(0, l), void this.clearSearch()
}
var f = this.editor.undo.UndoManager,
v = f.makeEmptyCommand(),
p = this.searchStatus,
g = this.searchStatus.curSelection;
if (g && g.isCm) v.undo.push(i.utils.extend(this.searchStatus.curSelection, {
type: "cursor"
}));
else if (g && g.parentElement) {
var b = o.createRange();
b.selectNode(g), v.undo.push(this.editor.selection.buildUndo(b))
}
this.resetSearchStatus();
var y;
for (u = 0; u < r.length; u++) {
var w = (t = r[u]).isCm ? t.cid : $(t).closest("[cid]").attr("cid");
y != w && (y = w, k.call(this, w))
}
this.editor.undo.register(v)
}
function F(t, i) {
var r = t.get(i);
r && t.set(i, r.replace(d(e, p), function(t, e, i) {
return p.wholeWord && e > 0 && h.exec(i.substr(e - 1, 1)) ? t : n
}))
}
function k(t) {
var e = this.editor.getNode(t);
v.undo.push(f.buildReplaceUndo(e)), F(e, "text"), F(e, "title"), F(e, "ref"), v.redo.push(f.buildReplaceUndo(e)), this.editor.findElemById(e.cid).replaceWith(e.toHTML())
}
},
replaceSelection: function() {
if (this.editor.sourceView.inSourceMode && !this.searchStatus.curSelection && this.highlightNext(), this.searchStatus.curSelection && this.searchStatus.hits.length && $("#md-searchpanel.searchpanel-replace-mode").length) {
var t = $("#search-panel-replace-input").val(),
e = this.searchStatus.curPos,
n = this.editor.undo.UndoManager.makeEmptyCommand(),
i = this.searchStatus.curSelection,
r = i.isCm;
r ? r.doc.replaceSelection(t, "start", "+findReplace") : function(t, e, n, i) {
var r = t.undo.UndoManager,
a = t.nodeMap.allNodes.get($(e).closest("[cid]").attr("cid")),
s = o.createRange();
s.selectNode(e), i.undo.push(t.selection.buildUndo(s)), i.undo.push(r.buildReplaceUndo(a));
var u = document.createTextNode(n);
e.parentElement.insertBefore(u, e), e.remove(), t.store(a.cid), i.redo.push(r.buildReplaceUndo(a)), s.selectNode(u), i.redo.push(t.selection.buildUndo(s))
}(editor, i, t, n), this.highlightNext(), this.searchStatus.hits.splice(e, 1), this.searchStatus.curPos > 0 && this.searchStatus.curPos--, this.searchStatus.hits.length || this.clearSearch(), this.editor.sourceView.inSourceMode || this.editor.undo.register(n)
}
},
isOpen: function() {
return "block" == document.querySelector("#md-searchpanel").style.display
},
showPanel: function(t) {
if (!$("#md-searchpanel").is(":visible")) {
var e = editor.selection.getRangy();
editor.lastCursor = editor.selection.buildUndo(e), $(".md-search-select").removeClass("md-search-select"), this.clearSearch(), this.searchStatus.initPos = editor.selection.getPosBookmark(), $("#md-searchpanel").show();
var n = document.querySelector("#search-panel-input");
n.value || (n.value = e && e.toString()), n.focus(), n.select(), n.value && this.doSearch(n.value), document.body.classList.add("on-search-panel-open")
}
t ? ($("#md-searchpanel").addClass("searchpanel-replace-mode"), document.body.classList.add("on-replace-panel-open")) : ($("#md-searchpanel").removeClass("searchpanel-replace-mode"), document.body.classList.remove("on-replace-panel-open")), File.isMac && (bridge.callHandler("touchBar.showFindReplaceTouchBar"), bridge.callHandler("touchBar.updateFindReplaceMode"))
},
closePanel: function(t, e) {
e = e || $(".md-search-select");
var n = this.editor.getMarkElem().length;
document.body.classList.remove("on-replace-panel-open"), document.body.classList.remove("on-search-panel-open");
var i = document.querySelector("#file-library-search-result .select");
if (i && i.classList.remove("select"), $("#md-searchpanel").removeClass("searchpanel-msg-mode").hide(), this.editor.sourceView.inSourceMode) return this.searchStatus && this.searchStatus.hits.length && (this.editor.fences.clearSearchAll(), this.editor.sourceView.cm.focus()), void this.resetSearchStatus();
t ? n = !0 : e.length ? (this.editor.selection.selectAllElem(e), this.editor.lastCursor = this.editor.selection.buildUndo(), n = !1) : this.searchStatus && this.searchStatus.curSelection && this.searchStatus.curSelection.isCm && (this.searchStatus.curSelection.isCm.focus(), this.editor.lastCursor = this.editor.selection.buildUndo(), n = !1), $(".md-search-select").removeClass("md-search-select"), this.clearSearch(), $(".md-search-hit").removeClass("md-search-hit"), !n && this.editor.restoreLastCursor(), !t && this.editor.refocus()
},
doSearch: function(t, e) {
var n = this.editor,
i = this,
r = this.searchStatus,
o = r && v(r),
a = o && document.querySelector("[cid='" + o.cid + "']"),
s = e;
if (e || (s = {
caseSensitive: $("#searchpanel-case-option-btn.active").length,
wholeWord: $("#searchpanel-word-option-btn.active").length
}), (s = Object.assign({
caseSensitive: !1,
wholeWord: !1,
noSelect: !1,
deply: 100
}, s)).initPosContainer = a, s.initPos = o, s.searchText = (void 0 === t ? $("#search-panel-input").val() : t || "").trim(), (r = Object.assign(this.emptySearchStatus(), s)).searchText.length) {
r.searchText.match(/^[a-z]$/i) && (r.wholeWord = !0);
i = this;
if (this.editor.sourceView.inSourceMode) return this.clearSearch(void 0, !0), this.searchStatus = r, void this.findAtNode(this.editor.sourceView.cm, r.searchText, r, !0);
this.searchTimer && (clearTimeout(this.searchTimer), this.searchTimer = null), this.searchTimer = setTimeout(function() {
if (i.clearSearch(void 0, !0), $(".md-search-expand").removeClass("md-search-expand"), !i.inKeydown) {
i.searchStatus = r;
for (var t = n.nodeMap.getFirst(); t;) i.findAtNode(t, r.searchText, r, !1), t = t.get("after");
!s.noSelect && i.highlightNext()
}
}, s.deply)
} else $(".md-search-expand").removeClass("md-search-expand"), this.clearSearch(void 0, !0), this.searchStatus = r
},
findAtNode: function(t, e, n, i) {
var r = this.editor,
a = n.initPosContainer,
s = n.initPos;
function u(t) {
var e = t.containerNode || document.querySelector("[cid='" + t.cid + "']");
return !!a && (a.compareDocumentPosition(e) == Element.DOCUMENT_POSITION_PRECEDING || a == e && t.start < s.start)
}
function m(t) {
var e = $(t);
if (e.closest(".md-meta, .md-content, script").length || e.hasClass("md-meta") || e.hasClass("md-content") || e[0] && "script" == e[0].tagName) e.closest("[md-inline]").addClass("md-search-expand");
else {
t.querySelectorAll(".md-meta, .md-content, script").forEach(function(t) {
$(t).closest("[md-inline]").addClass("md-search-expand")
})
}
}
function v(t, e) {
for (var i = d(e, n), o = t.getValue(), a = !1, s = null; i.exec(o);) a = !0, s = {
isCm: t,
cid: t.cid,
start: i.lastIndex - e.length,
end: i.lastIndex
}, n.wholeWord && s.start > 0 && h.exec(o.substr(s.start - 1, 1)) || (n.hits.push(s), u(s) && n.curPos++);
a && r.fences.searchOn(t, e, n)
}
i ? v(this.editor.sourceView.cm, e) : function t(e, i) {
e.get("children").length ? e.get("children").toArray().map(function(e) {
t(e, i)
}) : r.fences.queue[e.cid] ? v(r.fences.queue[e.cid], i) : l.isType(e, f.math_block) ? (r.mathBlock.currentCm || {}).cid === e.cid && (r.fences.clearSearchOn(r.mathBlock.currentCm), v(r.mathBlock.currentCm, i)) : function(t, e) {
for (var i, a, s = d(e, n), l = r.findElemById(t.cid)[0], f = l.textContent; s.exec(f);)
if (a = {
cid: t.cid,
containerNode: l,
start: s.lastIndex - e.length,
end: s.lastIndex
}, !(n.wholeWord && a.start > 0 && h.exec(f.substr(a.start - 1, 1)))) {
(i = i || o.createRange()).moveToBookmark(a);
var v = (p = i, c.markRange(p, "md-search-hit"));
m(v), n.hits.push(v), u(a) && n.curPos++
}
var p
}(e, i)
}(t, e)
},
highlightNext: function(t) {
if (!$("#md-searchpanel").is(":visible")) return this.showPanel();
$("#md-searchpanel").removeClass("searchpanel-msg-mode");
var e, n = this.searchStatus,
i = this.editor;
if (n && n.hits.length) {
var r = null;
n.curSelection ? n.curPos += t ? -1 : 1 : function() {
if (i.lastCursor)
if (void 0 != i.lastCursor.startId) {
var t = i.selection.rangy.createRange();
t.moveToBookmark({
containerNode: i.findElemById(i.lastCursor.startId)[0],
start: i.lastCursor.start,
end: i.lastCursor.start
}), n.curPos = 0;
for (var e = 0; e < n.hits.length; e++) {
if (!(o(t, r = n.hits[e]) > 0)) return;
n.curPos++
}
} else if (i.lastCursor.pos)
for (n.curPos = 0, e = 0; e < n.hits.length; e++) {
var r = n.hits[e];
if (!(a(i.lastCursor, r) > 0)) return;
n.curPos++
}
}(), n.curPos >= n.hits.length ? n.curPos = 0 : n.curPos < 0 ? n.curPos = n.hits.length - 1 : isNaN(n.curPos - 0) && (n.curPos = 0),
function(r) {
(function() {
n.curSelection && ((e = n.curSelection.isCm) ? e.execCommand(t ? "goDocStart" : "goDocEnd") : n.curSelection.classList.remove("md-search-select"))
}).call(this), n.curSelection = n.hits[n.curPos], n.initPos = null, $(".md-focus").removeClass("md-focus"), (e = n.curSelection.isCm) ? (n.lastRange = null, e.doc.setSelection(e.posFromIndex(n.curSelection.start), e.posFromIndex(n.curSelection.end)), File.isTypeWriterMode ? i.selection.typeWriterScroll($(".CodeMirror-selectedtext")) : i.selection.scrollAdjust($(".CodeMirror-selectedtext"), void 0, 200), $(".CodeMirror-selectedtext").closest("[cid]").addClass("md-focus")) : (n.curSelection.classList.add("md-search-select"), n.lastRange = n.curSelection, File.isTypeWriterMode ? i.selection.typeWriterScroll($(n.curSelection)) : i.selection.scrollAdjust($(n.curSelection), void 0, 200), $(n.curSelection).closest("[cid]").addClass("md-focus"))
}.call(this, n.curPos)
}
function o(t, e) {
try {
var n = i.selection.rangy.createRange();
return e.isCm ? n.selectNode(e.isCm.getWrapperElement()) : n.selectNode(e), t.compareBoundaryPoints(Range.END_TO_END, n)
} catch (t) {
Reporter.error(t, {
level: "warning"
})
}
}
function a(t, e) {
try {
if (e.isCm && e.isCm.cid == t.id) return e.isCm.indexFromPos(t.pos) - e.end;
r || (r = i.selection.rangy.createRange()).selectNode(i.findElemById(t.id)[0]);
var n = i.selection.rangy.createRange();
return e.isCm ? n.selectNode(e.isCm.getWrapperElement()) : n.selectNode(e), r.compareBoundaryPoints(Range.END_TO_END, n)
} catch (t) {
Reporter.error(t, {
level: "warning"
})
}
}
},
clearSearch: function(t, e) {
var n = v(this.searchStatus);
if (this.editor.sourceView.inSourceMode) return this.editor.fences.clearSearchAll(), this.resetSearchStatus(n), clearTimeout(this.searchTimer), void(this.searchTimer = null);
if (e || $(".md-search-expand").removeClass("md-search-expand"), this.searchStatus) {
for (var i = 0; i < this.searchStatus.hits.length; i++) {
var r = this.searchStatus.hits[i];
r.isCm || (s = r, c.unmarkSpan(s))
}
var o = this.searchStatus.curSelection,
a = (o || {}).isCm;
a && (a.doc.setSelection(a.posFromIndex(o.start)), $(a.display.input.textarea).blur())
}
var s;
this.editor.fences.clearSearchAll(), clearTimeout(this.searchTimer), this.searchTimer = null, this.resetSearchStatus(n)
},
emptySearchStatus: function(t) {
return {
hits: [],
curPos: 0,
searchText: null,
lastRange: null,
initPos: t,
curSelection: null
}
},
resetSearchStatus: function(t) {
this.searchStatus = this.emptySearchStatus(t)
}
});
n.exports = p
}), $__System.registerDynamic("39", ["14", "e", "13", "12"], !0, function(t, e, n) {
this || self, t("14");
var i = t("e"),
r = t("13"),
o = r.Node,
a = r.TYPE,
s = function(t) {
if (0 === t.trim().length) return 0;
var e = 0,
n = ["d", t.replace(/[\u3040-\uABFF\uD7A4-\uFAFF]/gi, function(t) {
return e++, " "
}).replace(/(^|\s+)[(\u3000-\u303F)!-\/:-@\[-`{-~]+(\s+|$)/gm, " "), "d"].join(" ").split(/[(\u3000-\u303F)\s!-,\.\\:-@\[-`{-~]+/g).length;
return e + n - 2
},
u = {
WORD: 0,
CHAR: 1,
LINE: 2,
TIME: 3
},
c = ["Words", "Characters", "Lines", "Minutes"],
l = ["Word", "Character", "Line", "Minute"],
f = t("12").Model.extend({
initialize: function(t) {
this.editor = t, this.delimiter = (File.option.wordCountDelimiter || 0) - 0, this.Delimiter = u, this.defferUpdateTimer = null, this.defferSelectionUpdateTimer = null, this.lastCount = -1, this.excludedCid = null, this.excludedCount = -1, File.isNodeHtml && this.bindWordCountOnNode()
},
getText: function(t) {
var e = this.editor,
n = t,
i = t;
void 0 === i.nodeType ? i = document.querySelector("[cid='" + n + "']") : n = i.getAttribute("cid");
var r = i && i.getAttribute("mdtype");
if (r == a.toc) return "toc";
if (o.isType(r, a.html_block, a.math_block, a.fences)) {
var s = (i.querySelector(".CodeMirror") || {}).CodeMirror;
if (s) {
if (r == a.fences) {
var u = i.getAttribute("lang");
return (u ? "```" + u + "\n" : "") + s.getValue() + (u ? "```" : "")
}
return r == a.math_block ? "$$\n" + s.getValue() + "\n$$" : s.getValue()
}
var c = e.getNode(n);
return c ? c.get("text") : ""
}
return r && !o.canContainBlock(r, !0) ? this.useWordDelimiter() ? i.rawText() : i.textContent : null
},
useWordDelimiter: function() {
return this.delimiter == u.WORD
},
clearTimer: function() {
this.defferUpdateTimer && (clearTimeout(this.defferUpdateTimer), this.defferUpdateTimer = null)
},
quickUpdate: function(t, e, n) {
var i = null,
r = t;
t && (t.cid ? (i = t.get("text"), r = t.cid) : i = this.getText(r)), e && (this.excludedCount = -1, this.excludedCid = null), null !== i && (this.delimiter == u.CHAR && this.quickUpdateCharCount(r, i, n), this.delimiter == u.WORD && this.quickUpdateWordCount(r, i, n), this.delimiter == u.LINE && this.quickUpdateLineCount(r, i, n), this.delimiter == u.TIME && this.quickUpdateReadTime(r, i, n))
},
quickUpdateWordCount: function(t, e, n, i) {
var r;
if (this.excludedCid == t && this.excludedCount >= 0) {
if (r = s(e) + this.excludedCount, n && r == this.lastCount) return;
return this.lastCount = r, void this.updateLabel(0, i ? Math.round(this.lastCount / File.option.wordsPerMinute) : this.lastCount)
}
if (!n) {
this.clearTimer();
var o = this;
this.defferUpdateTimer = setTimeout(function() {
o.lastCount = o.getWordCount(), o.excludedCid = t, o.excludedCount = o.lastCount - s(e), o.updateLabel(0, i ? Math.round(o.lastCount / File.option.wordsPerMinute) : o.lastCount)
}, 50)
}
},
quickUpdateCharCount: function(t, e, n, i) {
var r;
if (this.excludedCid == t && this.excludedCount >= 0) {
if (r = (i ? e.split(/\n/g).length : e.length) + this.excludedCount, n && r == this.lastCount) return;
return this.lastCount = r, void this.updateLabel(0, this.lastCount)
}
if (!n) {
File.sync(!1, !1, !0);
var o = this.editor.getMarkdown();
this.lastCount = i ? o.split(/\n/g).length : o.length, this.excludedCid = t, this.excludedCount = this.lastCount - (i ? e.split(/\n/g).length : e.length), this.updateLabel(0, this.lastCount)
}
},
quickUpdateReadTime: function(t, e, n) {
this.quickUpdateWordCount(t, e, n, !0)
},
quickUpdateLineCount: function(t, e, n) {
this.quickUpdateCharCount(t, e, n, !0)
},
getLabelsToShowOnMac: function() {
File.sync();
var t = this.getWordCount(),
e = this.editor.selection.getTextInSelection();
return e.length ? [t, s(e), e.length, Math.round(t / File.option.wordsPerMinute)].join("|") : [t, 0, 0, Math.round(t / File.option.wordsPerMinute)].join("|")
},
updateLabel: function(t, e) {
var n = i.localize.getString(c[this.delimiter], "Panel");
if (t > 0 && t < e) {
if (File.isMac) bridge.callHandler("word.updateWordCount", {
sel: t,
all: e
});
else if (File.isNodeHtml) {
var r = document.querySelector("#footer-word-count-label"),
o = r.textContent,
a = t + " / " + e + " " + n;
o != a && fastdom.mutate(function() {
r.textContent = a
})
}
} else if (e >= 0)
if (File.isMac) bridge.callHandler("word.updateWordCount", {
sel: t,
all: e
});
else if (File.isNodeHtml) {
var s = document.querySelector("#footer-word-count-label");
this.delimiter == u.TIME && 0 == e ? (n = i.localize.getString(l[this.delimiter], "Panel"), e = "≤ 1") : e <= 1 && (n = i.localize.getString(l[this.delimiter], "Panel")), fastdom.mutate(function() {
s.textContent = e + " " + n
})
}
},
updateLineCount: function(t) {
var e = (t = !0 === t ? this.editor.getMarkdown() : t || this.editor.getMarkdown()).split(/\n/g).length;
this.lastCount != e && (this.lastCount = e, this.updateLabel(0, this.lastCount))
},
updateCharCount: function(t) {
t = t || this.editor.getMarkdown();
this.lastCount != t.length && (this.lastCount = t.length, this.updateLabel(0, this.lastCount))
},
getWordCount: function() {
var t = "";
return this.editor.writingArea.querySelectorAll("[mdtype]").forEach(function(e) {
var n = this.getText(e);
n && (t += "\n" + n)
}, this), s(t)
},
updateWordCount: function() {
if (this.delimiter == u.WORD) {
this.clearTimer();
var t = this;
this.defferUpdateTimer = setTimeout(function() {
t.lastCount = t.getWordCount(), t.updateLabel(0, t.lastCount)
}, File.inBusyMode ? 500 : 100)
}
},
updateReadTime: function() {
this.clearTimer();
var t = this;
this.defferUpdateTimer = setTimeout(function() {
t.lastCount = t.getWordCount(), t.updateLabel(0, Math.round(t.lastCount / File.option.wordsPerMinute))
}, File.inBusyMode ? 500 : 100)
},
update: function(t) {
this.delimiter == u.WORD ? this.updateWordCount() : this.delimiter == u.CHAR ? this.updateCharCount(t) : this.delimiter == u.LINE ? this.updateLineCount(t) : this.delimiter == u.TIME && this.updateReadTime(t)
},
updateInSelection: function(t) {
this.defferSelectionUpdateTimer && clearTimeout(this.defferSelectionUpdateTimer);
var e = this.editor,
n = this;
this.defferSelectionUpdateTimer = setTimeout(function() {
var i = void 0 == t || null == t ? e.selection.getTextInSelection() : t;
i = i || "";
var r = 0;
if (this.defferSelectionUpdateTimer = null, n.delimiter == u.CHAR) r = i.length;
else {
if (n.delimiter != u.WORD) return;
r = s(i)
}
r = Math.min(r, n.lastCount);
n.updateLabel(r, n.lastCount)
}, 50)
},
getWordCountInSelection: function() {
var t = editor.selection.getTextInSelection();
return s(t)
},
getCharCountInSelection: function() {
return editor.selection.getTextInSelection().length
},
bindWordCountOnNode: function() {
var t = this,
e = this.editor;
i("#footer-word-count").on("click", function() {
if (document.body.classList.contains("ty-show-word-count")) document.body.classList.remove("ty-show-word-count"), document.body.classList.remove("ty-show-word-count-in-selection");
else {
document.body.classList.remove("ty-show-spell-check"), document.body.classList.add("ty-show-word-count"), File.sync();
var n = t.getWordCount();
i("#footer-word-count-td").text(n);
var r = e.getMarkdown(),
o = Math.round(n / File.option.wordsPerMinute);
i("#footer-read-time-count-td").text(o || "≤ 1"), i("#footer-line-count-td").text((r.match(/\n/g) || []).length + 1), i("#footer-char-count-td").text(r.length);
var a = e.selection.getTextInSelection();
a.length ? (i("#footer-char-count-td-sel").text(a.length), i("#footer-word-count-td-sel").text(s(a)), document.body.classList.add("ty-show-word-count-in-selection")) : document.body.classList.remove("ty-show-word-count-in-selection")
}
}).on("before-show-ty-hint", function(t) {
document.body.classList.contains("ty-show-word-count") && (t.cancel = !0)
}), i("#footer-word-count-info").on("click", "[data-delimiter]", function() {
var n = this.dataset.delimiter - 0;
t.setDelimiter(n);
var i = this.children[0].textContent + " " + this.children[1].textContent;
document.querySelector("#footer-word-count-label").textContent = i, document.body.classList.remove("ty-show-word-count"), e.restoreLastCursor(null, !0)
})
},
setDelimiter: function(t) {
this.delimiter = t, this.update(!0), this.quickUpdate(editor.focusCid, !0), JSBridge.putSetting("wordCountDelimiter", this.delimiter)
}
});
f.Delimiter = u, n.exports = f
}), $__System.registerDynamic("3a", ["e", "12"], !0, function(t, e, n) {
"use strict";
this || self;
var i = t("e"),
r = t("12").Model.extend({
initialize: function(t) {
this.editor = t, this.$container = i("#word-auto-suggest")
},
search: function(t, e, n, i) {
var r = t.substring(e, e + n);
return r ? new Promise(function(o, a) {
File.isMac ? bridge.callHandler("word.getSpellSuggestionInContext", {
context: t,
start: e,
length: n
}, function(t) {
i.type = "word", i.token = r, i.match = t, i.found = t.length, i.pageNo = 0, i.pageCnt = Math.floor((t.length - 1) / 5 + 1), o(i)
}) : o(i)
}) : []
},
showAutoSuggest: function(t, e, n, r) {
if (r.token === t.substring(e, e + n)) return !1;
var o = this.search(t, e, n, r),
a = "";
if (!r.found) return this.$container.hide(), !1;
for (var s = 0; s < o.length && s < 40; s++) s % 5 == 0 && (a += (s > 0 ? "</ul>" : "") + "<ul data-page='" + s / 5 + "' style='display:none'>"), a += i("<li/>").attr("data-content", o[s]).text(o[s])[0].outerHTML;
return a += "</ul>", this.$container.html(a), this.$container
}
});
n.exports = r
}), $__System.registerDynamic("3b", ["12", "13", "14", "16", "19", "29"], !0, function(t, e, n) {
"use strict";
this || self, t("12");
var i, r, o = t("13"),
a = o.Node,
s = o.NodeMap,
u = o.TYPE,
c = t("14"),
l = t("16"),
f = t("19"),
h = t("29"),
d = {
"\b": "\\b",
"\t": "\\t",
"\n": "\\n",
"\f": "\\f",
"\r": "\\r",
'"': '\\"',
"'": "'",
"\\": "\\\\"
};
var m, v, p = "",
g = {},
b = [],
y = [];
function w(t, e, n) {
var i = h.svg2DataURL(t, e),
r = t.getBoundingClientRect(),
o = new Image;
o.onerror = function(t) {
n("")
}, o.onload = function() {
var t = document.createElement("canvas"),
e = t.getContext("2d"),
i = File.canvasratio,
a = o.width,
s = r.bottom - r.top;
t.width = o.width, t.height = r.bottom - r.top, i > 1.1 && (t.width = a * i, t.height = s * i, e.scale(i, i)), e.drawImage(o, 0, 0), t.style.width = a + "px", t.style.height = s + "px", setTimeout(function() {
var e = "";
try {
e = t.toDataURL("image/png")
} catch (t) {
console.warn(t)
}! function(t, e) {
var n;
if (File.isNode) {
var i = t.replace(/^data:image\/png;base64,/, ""),
r = reqnode("electron").remote.app;
n = r.getPath("temp").replace(/[/\\]$/, "") + (File.isWin ? "\\\\" : "/") + Number(new Date) + ".png", reqnode("fs").writeFile(n, i, "base64", function(t) {
t ? console.sendError(t.stack) : (e(n), y.push(n))
})
} else File.isMac && bridge.callHandler("images.savePNG", t, function(t) {
e(t), y.push(t)
})
}(e, n)
}, 100)
}, o.src = i
}
function F(t, e) {
var n = document.querySelector("[cid='" + t + "'] svg"),
i = $(n).closest("[lang='mermaid']").length;
File.isMac && i ? function(t, e) {
var n = "<html><body>$1</body></html>",
i = t.getBoundingClientRect();
i = {
x: 0,
y: 0,
width: i.width,
height: i.height
}, n = n.replace("$1", h.svg2DataURL(t, !0, !0)), bridge.callHandler("controller.screenshotHTML", {
html: n,
rect: i
}, e)
}(n, e) : w(n, i, e)
}
function k(t, e, n, i) {
var r = t.split(/(\uE040\d+)\uE041/g);
if (!r) return e(t);
Promise.all(r.map(function(t) {
return new Promise(function(e) {
if (t.charAt(0) == p) {
var r = t.substring(1) - 0,
o = m[r].cid;
F(o, function(t) {
v.delete(o), "latex" == n ? (r = t, a = i, a ? new Promise(function(t) {
if (File.isNode) {
var e = reqnode("path").basename(r);
reqnode("fs-extra").move(r, a + "/" + e, function() {
t(e)
})
} else File.isMac && bridge.callHandler("path.moveTo", {
source: r,
folder: a
}, t)
}) : Promise.resolve(r)).then(function(t) {
e(JSON.stringify(t))
}) : e(JSON.stringify(t));
var r, a
})
} else e(t)
})
})).then(function(n) {
t = n.join(""), e(t)
}, function(n) {
t = r.join("").replace(/[\uE040-\uE041]/g, ""), e(t)
})
}
function x() {
if (File.isNode)
for (; y.length;) reqnode("fs").unlink(y.pop(), function() {});
else File.isMac && (bridge.callHandler("path.removeFiles", y), y = [])
}
var _, E = function(t) {
return f.recoverEscape(t).replace(/["'\\\b\t\n\f\r]/g, function(t) {
return d[t]
}).replace(/\u200b/g, "")
},
C = {
left: "AlignLeft",
right: "AlignRight",
center: "AlignCenter"
},
A = function(t, e, n, i) {
e = void 0 === e ? "," : e, i = i || g;
for (var r, o = [], a = n || t.getFirstChild(); a;)(r = R(a, i)) && o.push(r), a = a.get("after");
return o.join(e)
},
S = function(t, e) {
return e = e || t.get("text"), _.output(e, null, t).replace(/, $/, "") || 'Str ""'
},
T = function(t) {
return a.isType(t, "epub", "rst", "opml", "textile")
},
M = /([^\\]|^)\\tag{([^}]+)}\s*/,
D = /([^\\]|^)\\label{([^}]+)}\s*/,
L = /([^\\]|^)\\over[^\w\d]/,
R = function(t, e) {
var n;
T(e.target);
switch (t.get("type")) {
case u.paragraph:
return "Para [" + (n = S(t)) + "]";
case u.meta_block:
return "";
case u.heading:
var i = a.isType(e.target, "textile", "opml") ? "" : "header-" + t.cid;
return "Header " + t.get("depth") + ' ("' + i + '", [], []) [' + S(t) + "]";
case u.blockquote:
return "BlockQuote [" + (n = A(t)) + "]";
case u.list:
var o = t.get("style");
return n = A(t), o == a.ListType.ol ? "OrderedList (1,Decimal,Period) [" + n + "]" : "BulletList [" + n + "]";
case u.list_item:
return "[" + (n = A(t)) + "]";
case u.fences:
if (l.isDiagramType(t.get("lang")) && a.isType(e.target, "epub", "docx", "odt", "latex")) {
m.push(t), v.add(t.cid);
var s = document.querySelector("[cid='" + t.cid + "'] svg").getBoundingClientRect();
return 'Div ("",[],[("style","text-align:center"), ("align", "center")]) [Para [Image (' + JSON.stringify(t.get("lang")) + ',[],[("width", "' + (s.right - s.left) + '"), ("align", "center")]) [Str ""] (' + (p + (m.length - 1)) + ',"fig:")]] '
}
var h = f.parsePandocAttr(t.get("lang"));
if (Object.keys(h).length) {
var d = [];
for (var g in h.nativeAttr) d.push('("' + g.replace(/['"]/g, "") + '","' + h.nativeAttr[g].replace(/['"]/g, "") + '")');
return 'CodeBlock ("' + E(h.id || "") + '",[' + (h.class || "").trim().split(/\s+/).map(function(t) {
return '"' + E(t) + '"'
}).join(",") + "],[" + d.join(",") + ']) "' + E(t.get("text")) + '"'
}
return 'CodeBlock ("",["' + E(getCodeMirrorMode(t.get("lang") || "", !1, !0)) + '"],[]) "' + E(t.get("text")) + '"';
case u.math_block:
if (n = t.get("text").trim().replace(/\u200b/g, ""), "epub" == e.target) {
var b = r[n];
if (b) return 'RawBlock (Format "html") ' + JSON.stringify(function(t) {
try {
var e = (new DOMParser).parseFromString(t, "text/html");
return e.querySelectorAll("mtable").forEach(function(t) {
t.hasAttribute("columnalign") && !t.getAttribute("columnalign") && t.removeAttribute("columnalign")
}), e.body.innerHTML
} catch (t) {}
return t
}(b)) + " "
} else if ("latex" == e.target) {
if (n.match(/^\\(begin|newcommand|renewcommand|newenvironment|renewenvironment|def|let){/)) return 'RawBlock (Format "latex") ' + JSON.stringify(n)
} else if ("docx" == e.target && File.option.autoNumberingForMath) {
var y = function(t, e) {
e.number = e.number || 1;
var n;
if (File.option.autoNumberingForMath && (n = e.number, e.number++), L.test(t)) return [t, n];
var i = M.exec(t);
return t = t.replace(/([^\\]|^)\\eqref{([^}]+)}\s*/g, "$1($2)"), i ? (n = i[2], [t = t.replace(/([^\\]|^)\\tag{([^}]+)}\s*/g, "$1") + "\\qquad\\text{(" + c.escapeInQuote(n) + ")}", n]) : (t = t += "\\qquad\\text{(" + c.escapeInQuote(n + "") + ")}", (i = D.exec(t)) && (n = i[2]), [t, n])
}(n, e);
return "Plain [" + ['RawInline (Format "openxml") "<w:bookmarkStart w:id=\\"0\\" w:name=\\"%s\\"/><w:r><w:t>" '.replace("%s", y[1]), 'Math DisplayMath "' + E(y[0]) + '" ', 'RawInline (Format "openxml") "</w:t></w:r><w:bookmarkEnd w:id=\\"0\\"/>"'].join(",") + "]"
}
return 'Plain [Math DisplayMath "' + E(n) + '"]';
case u.hr:
return "HorizontalRule";
case u.def_footnote:
case u.def_link:
return "";
case u.toc:
return "latex" == e.target ? 'RawBlock (Format "latex") "\\\\tableofcontents"' : "wiki" == e.target ? 'RawBlock (Format "mediawiki") "__TOC__", RawBlock (Format "mediawiki") ""' : "rst" == e.target ? 'RawBlock (Format "rst") ".. contents::", RawBlock (Format "rst") "\n"' : "opml" == e.target ? "" : "textile" == e.target ? 'RawBlock (Format "textile") "{toc}", RawBlock (Format "textile") "\n"' : function(t, e) {
try {
return 'Div ("toc", [], []) [Para [' + t.toc.headers.map(e ? function(t) {
return 'Str "' + " ".repeat(t.get("depth") - 1) + '", Link ("", [], []) [' + S(t) + '] ("#header-' + t.cid + '","")'
} : function(t) {
return 'Str "' + "\\t".repeat(t.get("depth") - 1) + '", Link ("", [], []) [' + S(t) + '] ("#header-' + t.cid + '","")'
}).join(",LineBreak,") + "]]"
} catch (t) {
return console.warn(t.stack), ""
}
}(t.get("in"), "epub" == e.target);
case u.table:
var w = t.get("align").map(function(t) {
return C[t] || "AlignDefault"
}),
F = w.map(function() {
return "0.0"
}),
k = t.getFirstChild();
return "Table [] [" + w.join(",") + "] [" + F.join(",") + "] [" + A(k) + "] [" + A(t, ",", k.get("after")) + "]";
case u.table_row:
return "[" + A(t) + "]";
case u.table_cell:
return "[Plain [" + S(t) + "]]";
default:
return ""
}
},
B = [];
B[u.strong] = "Strong", B[u.em] = "Emph", B[u.del] = "Strikeout", B[u.subscript] = "Subscript", B[u.superscript] = "Superscript";
var I, N = {
html: 'RawInline (Format "html") "<u>", $0, RawInline (Format "html") "</u>", ',
docx: 'RawInline (Format "openxml") "<w:r><w:rPr><w:u w:val=\\"single\\" /></w:rPr><w:t>$0</w:t></w:r>", ',
rtf: 'RawInline (Format "rtf") "{\\\\ul ", $0, RawInline (Format "rtf") " }", ',
latex: 'RawInline (Format "latex") "\\\\underline{", $0, RawInline (Format "latex") "}", '
},
O = {
html: 'RawInline (Format "html") "<mark>", $0, RawInline (Format "html") "</mark>", ',
docx: 'RawInline (Format "openxml") "<w:r><w:rPr><w:shd w:val=\\"clear\\" w:fill=\\"ffff00\\" /></w:rPr><w:t>$0</w:t></w:r>", ',
rtf: 'RawInline (Format "rtf") "{{\\\\colortbl;\\\\red255\\\\green255\\\\blue0;} \\\\cb1 ", $0, RawInline (Format "rtf") "}", ',
latex: 'RawInline (Format "latex") "\\\\hl{", $0, RawInline (Format "latex") "}", '
},
j = {
atag: !1,
imgtag: !1,
comment: !0,
citation: !0
},
P = function(t, e) {
var n = function(t) {
if (a.isType(t.type, u.plain, u.escape, u.emoji)) return t.inner || t.text;
if (e) return t.text || "";
throw Error("caught styles")
};
I || (I = new f.InlineLexer({
skipOp: j
}, n));
try {
return I.output(t.text, n, !0)
} catch (t) {
return !1
}
},
q = function(t, e) {
var n, i, o, a, s, l = /^(\S*)(?:(\n)|(\s*))/,
f = function(t) {
for (var e, n = ""; t.length && (e = l.exec(t));) t = t.substring(e[0].length), e[1] && (n += 'Str "' + E(e[1]) + '", '), e[2] ? n += File.option.preLinebreakOnExport ? "LineBreak, " : "SoftBreak, " : e[3] && (n += "Space, ");
return n
};
t.inner && (t.inner = t.inner.replace(/, $/, ""));
var h = /^file:[\\\/]{0,2}/i;
switch (t.type) {
case u.strong:
case u.em:
case u.del:
case u.subscript:
case u.superscript:
return B[t.type] + " [" + t.inner + "], ";
case u.plain:
case u.escape:
case u.tab:
case u.emptyline:
return f(t.text);
case u.html_entity:
return f(c.decodeHtmlEntity(t.text) || t.text);
case u.pants:
return f(t.inner);
case u.softbreak:
return File.option.preLinebreakOnExport ? "LineBreak, " : "SoftBreak, ";
case u.code:
return 'Code ("", [], []) "' + E(t.text.trim()) + '", ';
case u.autolink:
case u.url:
return 'Link ("", [], []) [Str "' + E(t.text) + '"] ("' + E(t.href) + '", ""), ';
case u.atag:
if (!T(e.target)) return 'Link ("", [], []) [' + t.inner + '] ("' + E(t.href) + '", "' + E("") + '"), ';
case u.imgtag:
if (!T(e.target)) {
var d = $($.parseHTML(t.text));
return 'Image ("",[],[]) [Str "' + E(d.attr("title") || d.attr("alt") || "") + '"] ("' + E(File.editor.imgEdit.getRealSrc(t.href).replace(h, "")) + '","fig:"), '
}
case u.tag:
case u.comment:
case u.citation:
case u.ruby:
return 'RawInline (Format "html") "' + E(t.text) + '", ';
case u.link:
if ("#" == (t.href || "").trim()[0]) {
var m = t.href.substr(1),
v = $("h1, h2, h3, h4, h5, h6").filter(function() {
return $(this).text().toLowerCase().trim() == m.toLowerCase().trim()
});
v.length && (t.href = "#header-" + v.attr("cid"))
}
return 'Link ("", [], []) [' + t.inner + '] ("' + E(t.href) + '", "' + E(t.title || "") + '"), ';
case u.image:
return 'Image ("",[],[]) [Str "' + E(t.title || "") + '"] ("' + E(File.editor.imgEdit.getRealSrc(t.href).replace(h, "")) + '","fig:"), ';
case u.refimg:
o = "Image";
case u.reflink:
return i = (n = e.nodeMap.link_list.getNodeByRef(t.ref || t.text)) ? E(n.get("href").replace(h, "")) : "", m = E(n && n.get("title") || ""), "Image" == (o = o || "Link") && (t.inner = 'Str "' + E(m || "") + '"'), o + ' ("", [], []) [' + t.inner + '] ("' + i + '", "' + m + '"), ';
case u.footnote:
var p = e.nodeMap.foot_list.getNodeByRef(t.text);
return p ? "Note [Para [" + S(p) + "]], " : f(t.text);
case u.attr:
return f(t.text);
case u.emoji:
return 'Str "' + E(t.inner) + '", ';
case u.inline_math:
if ("epub" == e.target) {
var g = r[t.text.replace(/(^\s*\$+)|(\$+\s*$)|\u200b/g, "").trim()];
if (g) return 'RawInline (Format "html") ' + JSON.stringify(g) + ", "
}
return 'Math InlineMath "' + E(t.text.replace(/(^\s*\$+)|(\$+\s*$)|\u200b/g, "")) + '", ';
case u.linebreak:
return "LineBreak, ";
case u.highlight:
if ("latex" == e.target) b.push("\\usepackage{color}"), b.push("\\usepackage{soulutf8}");
else if ("docx" == e.target) return s = P(t, !0), O[e.target].replace("$0", E(c.escape(s)));
a = O;
case u.underline:
return a = a || N, "docx" == e.target ? (s = P(t, !0), a[e.target].replace("$0", E(c.escape(s)))) : (a[e.target] || a.html).replace("$0", t.inner);
default:
return f(t.text || "")
}
},
U = function(t) {
var e = [];
function n(t, e) {
if (e instanceof Array) return n = e, '("' + E(t) + '", MetaList [' + n.map(function(t) {
return 'MetaInlines [RawInline (Format "tex") "' + E(t) + '"]'
}).join(", ") + "])";
var n;
return '("' + E(t) + '", MetaInlines [ ' + (_.output(e).replace(/, $/, "") || 'Str ""') + "])"
}
t["header-includes"] && t["header-includes"] instanceof Array ? t["header-includes"] = t["header-includes"].concat(b) : b.length && (t["header-includes"] = b);
for (var i in t) e.push(n(i, t[i]));
return e.join(", ")
};
s.prototype.exportToNative = function(t, e, n) {
File.editor.export.cleanUpTempFiles = x,
function(t) {
if (g = {
forExport: !0,
target: t,
nodeMap: this,
skipOp: j
}, b = [], m = [], v = new Set, void 0 === File.canvasratio) {
File.canvasratio = 1;
var e = document.createElement("canvas").getContext("2d"),
n = window.devicePixelRatio || 1,
i = e.webkitBackingStorePixelRatio || e.mozBackingStorePixelRatio || e.msBackingStorePixelRatio || e.oBackingStorePixelRatio || e.backingStorePixelRatio || 1;
File.canvasratio = n / i
}
}.call(this, t), "epub" == t && (r = Object.create(null), !i && File.option.enableInlineMath && (i = document.querySelector("#inline-math-export-jax"), MathJax.Hub.Typeset(i), i = MathJax.Hub.getAllJax(i)[0]), $(".md-inline-math, [mdtype='math_block']").each(function() {
try {
var t, e = this.querySelector("script").textContent.trim().replace(/\u200b/g, "");
this.classList.contains("md-inline-math") ? (i.Text(e), t = i.root.toMathML("")) : t = MathJax.Hub.getAllJax(this)[0].root.toMathML(""), r[e] = t
} catch (t) {}
})), _ && _.options.nodeMap === this || (_ = new f.InlineLexer(g, q));
var o = A(null, "\n ,", this.getFirst(), g),
s = "Pandoc (Meta {unMeta = fromList [" + U(File.editor.docMenu.buildMetaMap()) + "]})\n [" + o + "]";
return a.isType(t, "epub", "docx", "odt", "latex") ? k(s, e, t, n) : e(s), s
}
}), $__System.registerDynamic("3c", ["12", "13", "14", "19", "2f", "3b", "29", "18", "e", "35"], !0, function(t, e, n) {
"use strict";
this || self;
var i, r, o = t("12"),
a = t("13"),
s = a.Node,
u = a.TYPE,
c = (a.NodeCollectionUtils, t("14")),
l = t("19"),
f = t("2f"),
h = (t("3b"), t("29")),
d = t("18"),
m = t("e"),
v = (t("35"), File.isWin ? 8e3 : 960),
p = File.isWin ? 5 : 40,
g = function() {
for (var t = document.querySelectorAll("#write figure"), e = 0; e < t.length; e++) {
var n = t[e];
n.style.zoom = Math.min(n.clientWidth / n.scrollWidth, 1), n.style.overflowX = "hidden", n.style.overflowy = "hidden"
}
},
b = function() {
for (var t = document.querySelectorAll("#write a"), e = /^\s*#(.+)$/, n = {
"\b": "\\b",
"\t": "\\t",
"\n": "\\n",
"\f": "\\f",
"\r": "\\r",
'"': '\\"',
"'": "\\'",
"\\": "\\\\"
}, i = function(t) {
return t.replace(/["\\\b\t\n\f\r]/g, function(t) {
return n[t]
}).replace(/\u200b/g, "")
}, r = 0; r < t.length; r++) {
var o, a = t[r],
s = a.getAttribute("name"),
u = a.getAttribute("href");
if (s) {
var c = document.createElement("a"),
l = document.createTextNode(" ");
c.appendChild(l), c.setAttribute("class", "md-print-anchor"), c.setAttribute("href", "uaf://" + i(s)), a.parentNode.insertBefore(c, a)
}
u && (o = e.exec(u)) && (u = o[1], a.setAttribute("href", "uat://" + i(u)))
}
};
function y(t) {
if (r) r.close(), r.destroy(), r = null;
else if (!t) return;
m("#md-notification").hide()
}
window.i = y;
var w = o.Model.extend({
initialize: function(t) {
this.editor = t, window.debugMode && SystemJS.import("FileSaver.min.js").then(function(t) {
i = t
}), this.registerBridge()
},
registerBridge: function() {
if (File.isMac) {
var t = this;
bridge.registerHandler("export.exportToNative", function(e, n) {
t.exportToNative(e.target, n, e.folder)
}), bridge.registerHandler("export.onExportSuccess", function(t, e) {
k(t.type, t.path), e && e()
}), bridge.registerHandler("export.dataForExport", function(e, n) {
setTimeout(function() {
n({
suggestedFilename: File.getSuggestedFileName() || "",
content: t.exportToHTML(e || {})
})
}, t.beforeExport(e.forPrint) ? 1e3 : 0)
})
}
},
beforeExport: function(t) {
var e = !1;
return t && File.editor.sourceView.inSourceMode && (File.editor.sourceView.hide(), e = !0), File.sync(), e
},
exportToNative: function(t, e, n) {
return e = e || function() {}, this.editor.nodeMap.exportToNative(t, e, n)
},
exportToImage: function() {
function t() {
y(!0), i && (i.postMessage("terminiate"), i.terminate(), i = null)
}
var e, n = File.option.imageExportWidth,
i = new Worker((window.debugMode ? "lib" : "lib.asar") + "/image-worker.js"),
o = reqnode("electron").remote,
a = o.getCurrentWindow(),
s = o.app,
u = o.dialog,
c = o.BrowserWindow,
l = this,
f = o.screen.getPrimaryDisplay().scaleFactor || 1,
h = JSBridge.getSetting("zoomFactor") || 1,
d = 0,
g = null;
i.onmessage = function(e) {
e.data.success ? (t(), o.shell.showItemInFolder(g)) : (console.sendError(e.data.error), Reporter.error(e.data.error, {
level: "warn"
}), t())
};
try {
(function() {
File.editor.store(!0), y(!0);
var t = l.exportToHTML({
forPrint: !0,
forImage: !0
}),
e = o.app.setting.config;
return (r = new c({
skipTaskbar: !0,
show: !1,
webPreferences: {
devTools: !1,
webSecurity: !1,
allowDisplayingInsecureContent: !0,
allowRunningInsecureContent: !0,
nodeIntegration: !1,
directWrite: e.directWrite,
defaultFontFamily: e.defaultFontFamily,
zoomFactor: h,
safeDialogs: !0
},
webgl: !1,
useContentSize: !0,
width: n,
height: v,
frame: !1,
enableLargerThanScreen: !!File.isWin,
offscreen: !0,
alwaysOnTop: !0,
minimizable: !1,
closable: !0
})).loadURL("data:text/html;charset=UTF-8, " + encodeURIComponent(t)), r
})().webContents.once("did-finish-load", function() {
r.webContents.executeJavaScript("window.innerHeight").then(function(o) {
File.isLinux && (v = o), setTimeout(function() {
r.webContents.executeJavaScript("document.body.parentElement.scrollTop = document.body.clientHeight;\nMath.max(document.body.clientHeight, document.body.parentElement.scrollHeight)").then(function(o) {
return o -= 0, isNaN(o) || null == o ? y(!0) : (e = o) > v * p ? (t(), u.showErrorBox(m.localize.getString("Export Failed", "Panel"), m.localize.getString("Generated Image too Large", "Panel")), !1) : void
function o(a) {
var s = e - a;
s > v && (s = v), r.setSize(n, s), r.setContentSize(n, s), r.webContents.executeJavaScript("document.body.parentElement.scrollTop = {d}; document.body.parentElement.scrollHeight;".replace("{d}", a)).then(function(u) {
setTimeout(function() {
r ? ((u -= 0) > e + 100 && (i.postMessage({
action: "updateTotalHeight",
totalHeight: u
}), e = u), r.webContents.capturePage(function(r) {
if (r.isEmpty()) return t();
f > 1 && (r = r.resize({
width: n,
quality: "best"
})), i.postMessage({
action: "addImage",
buffer: r.toDataURL(),
index: d,
position: {
width: n,
offset: a
},
totalHeight: e,
total: Math.ceil(e / v)
}), a + s < e && (d++, o(a += s))
})) : t()
}, 50)
})
}(0)
})
}, 1e3)
})
})
} catch (e) {
t()
}
u.showSaveDialog(a, {
properties: ["saveFile"],
title: "Export to…",
defaultPath: s.getPath("userDesktop") + "/" + File.getSuggestedFileName(!0) + ".png",
filters: [{
name: "PNG",
extensions: ["png"]
}, {
name: "JPEG",
extensions: ["jpg", "jpeg"]
}]
}, function(e) {
if (!e) return t();
g = e, i.postMessage({
action: "setPath",
path: g
}), m("#md-notification").html("<p> " + m.localize.getString("Exporting in progress...", "Panel") + " </p>").show()
})
},
exportAndSaveHTML: function(t) {
var e = new Blob([this.exportToHTML({
forPrint: t
})], {
type: "text/html;charset=utf-8"
});
i(e, "export.html")
},
exportCollection: function(t, e, n) {
var i = n || {},
r = i.forPrint,
o = i.noStyle,
a = i.exportFooter,
v = i.exportInline,
p = i.forImage,
g = this.editor.nodeMap,
b = this.editor,
y = (v = v || new l.InlineLexer({
nodeMap: g,
count: 1,
footnoteList: [],
appendFootnote: function(t, n) {
if (!e[n]) {
e[n] = [""];
var i = v.output(t.get("text"), f.decorateAsExport, !1, {
parent: t,
skipFootnote: n
});
e[n][0] = "<span class='md-fn-count'>" + n + "</span> " + i
}
var r = e[n].length - 1,
o = n + (r ? "-" + r : "");
return e[n].push("<a name='dfref-footnote-" + o + "' href='#ref-footnote-" + o + "' title='" + m.localize.getString("back to document") + "' class='reversefootnote' >↩</a>"), o
},
noStyle: o,
forPrint: r,
skipOp: {
atag: !0,
underline: !0,
comment: !0,
citation: !0,
imgtag: !0
}
}, f.decorateAsExport), ""),
w = void 0 === i.split || null === i.split ? o ? "\n" : "" : i.split,
k = this;
i.exportInline = v, e = e || [];
function x(t, n) {
if ("string" == typeof t) return v.output(t, f.decorateAsExport);
var r = t.get("children");
return s.canContainBlock(t.get("type")) ? r && r.length > 0 ? k.exportCollection(r, e, i) : v.output(t.get("text"), f.decorateAsExport) : v.output(t.get("text"), f.decorateAsExport, void 0, void 0, n)
}
function _(t) {
var e = null;
function n(t) {
return t ? g.toc.headers.findIndex(function(e) {
return e.cid == t
}) : -1
}
var i = {
cid: t.cid
};
switch (t.get("type")) {
case u.paragraph:
if (-1 == t.get("text").indexOf("\n")) {
var a = s.parseFrom(t.getText(), null, {
noTop: !0,
skips: {
fromP: !0
}
}, !0)[1][0];
if (s.isType(a, u.heading) && (a.cid = t.cid, -1 == n(a.cid) && t.isTopBlock())) {
var f = b.findElemById(a.cid).prevAll(".md-heading").last().attr("cid");
g.toc.headers.splice(n(f) + 1, 0, a)
}
if (s.isType(a, u.heading, u.def_footnote, u.def_link)) return a.cid = t.cid, _(a)
}
var v = x(t, i);
return "" == v || i.hasContent ? "<p>" + (v || "&nbsp;") + "</p>" : v;
case u.heading:
var y = "";
return r && 1 == t.get("depth") && !t.get("parent") && t.get("before") && (y = " data-breakpage"), "<h" + t.get("depth") + y + ">" + (o || p ? "" : "<a name='header-" + t.cid + "' class='md-header-anchor " + (r ? "md-print-anchor' href='af://" + t.cid + "'> " : "'>") + "</a>") + x(t, i) + "</h" + t.get("depth") + ">";
case u.blockquote:
return "<blockquote>" + x(t, i) + "</blockquote>";
case u.list:
var F = t.get("style"),
$ = function() {
for (var e = t.get("children").toArray(), n = 0; n < e.length; n++) {
var i = e[n].getFirstChild();
if (!s.isType(i, u.paragraph) || i.get("after")) return !0
}
return !1
}();
t.set("loose", $);
var E = "";
return F == s.ListType.ol && (E = "" === t.get("start") ? void 0 : t.get("start") - 0, E = Number.isNaN(E) || 1 == E ? "" : " start='" + t.get("start") + "' "), "<" + F + E + ">" + w + x(t, i) + w + "</" + F + ">";
case u.list_item:
return t.get("style") === s.ListType.task ? "<li" + (o ? "" : " class='md-task-list-item task-list-item task-list-" + (t.get("checked") ? "done" : "not-done") + "' ") + "><input type='checkbox' disabled='disabled' " + (t.get("checked") ? "checked" : "") + "/>" + x(t, i) + "</li>" : "<li>" + (j = t, P = i, !1 === j.get("parent").get("loose") ? x(j.getFirstChild(), P) : x(j, P)) + "</li>";
case u.fences:
if (o) {
var C = t.get("lang") || "";
if (C) {
return "<pre" + l.attrToString(l.parsePandocAttr(C)) + "><code class='language-" + (C = c.escapeInQuote(getCodeMirrorMode(C, !1, !0))) + "' lang='" + C + "'>" + c.escape(t.get("text")) + w + "</code></pre>"
}
return "<pre><code>" + c.escape(t.get("text")) + w + "</code></pre>"
}
var A, S = b.findElemById(t.id).clone();
if (File.option.enableDiagram && s.isType((t.get("lang") || "").toLowerCase(), "flow", "sequence", "mermaid")) {
A = !1;
var T = b.findElemById(t.id).find("svg"),
M = S.find("svg");
return T.attr("width") && !T.attr("viewBox") && (M.attr("viewBox", "0 0 " + T.attr("width") + " " + T.height()), M.css("max-width", "100%"), M.css("height", "auto")), h.processExportedSVG(S.find(".md-diagram-panel").html(S.find(".md-diagram-panel-preview").html())[0].outerHTML)
}
if (!1 !== A && (A = t.get("text").split(/\n/).length > 13), S.children(".CodeMirror").length && S.removeAttr("cid").removeAttr("contenteditable").removeAttr("mdtype").html(S.children(".CodeMirror")[0].outerHTML).find(".CodeMirror-cursors, .CodeMirror-hscrollbar, .CodeMirror-vscrollbar, .CodeMirror-selected").remove().end().find(".CodeMirror-sizer").css("min-height", "").end().find(".CodeMirror-selectedtext").removeClass("CodeMirror-selectedtext").end(), r && File.option.noLineWrapping && S.children(".CodeMirror").addClass("CodeMirror-wrap").find(".CodeMirror-sizer").css("min-width", ""), A && S.css("page-break-inside", "unset"), r && File.isNode) {
var D = window.getComputedStyle(File.editor.writingArea).fontFamily || "initial";
D = D.replace(/'/g, "\\'"), S.find(".CodeMirror-line > span").each(function() {
! function t(e, n) {
if (e.nodeType == document.TEXT_NODE) {
var i = e.textContent;
(i = i.split(/(;|-)/).map(function(t) {
return ";" == t || "-" == t ? "<span style='font-family:" + n + "'>" + t + "</span>" : c.escape(t)
}).join("")) != e.textContent && (e.innerHTML = i)
} else 1 == e.nodeType && e.childNodes.forEach(function(e) {
t(e, n)
})
}(this, D)
})
}
return S[0].outerHTML;
case u.html_block:
return d.buildHTMLForExport(t, b, r);
case u.math_block:
return k.getSVGForExport(t, p);
case u.hr:
return "<hr />";
case u.def_footnote:
case u.def_link:
return "";
case u.table:
t.get("align").length;
for (var L = "<figure><table>" + w, R = t.getFirstChild(); R;) R.get("before") ? L += _(R) : L += "<thead>" + w + _(R) + "</thead>" + w + "<tbody>", (R = R.get("after")) || (L += "</tbody>" + w);
return L += "</table></figure>";
case u.table_row:
L = "<tr>", R = t.getFirstChild();
for (var B, I = t.get("parent").get("align"), N = 0, O = t.get("before") ? "td" : "th"; R;) L += "<" + O + (B = (B = I[N]) ? " style='text-align:" + B + ";' " : "") + ">" + _(R) + "</" + O + ">", R = R.get("after"), N++;
return L += "</tr>";
case u.table_cell:
return x(t, i) || "&nbsp;";
case u.meta_block:
return "";
case u.toc:
return function() {
if (o) return "<div>[TOC]</div>";
if (!e) {
var t = m(document.querySelector(".md-toc-content")).clone();
t.find("[data-ref]").each(function() {
this.querySelector("a").setAttribute("href", (r && File.isMac ? "at://" : "#header-") + this.getAttribute("data-ref"))
}), t.find(".md-meta").remove(), e = "<div class='md-toc' mdtype='toc'>" + t[0].outerHTML + "</div>"
}
return e
}();
default:
return "<p>" + x(t, i) + "</p>"
}
var j, P
}
if ("string" == typeof t) return x(t);
if (t.length) {
var $ = t instanceof Array,
E = $ ? t[0] : t.sortedFirst();
do {
y += _(E) + w, E = E.get("after")
} while (E && (!$ || t.indexOf(E) > -1))
}
return y + (a ? F(e) : "")
},
getSVGForExport: function(t, e) {
var n = this.editor.findElemById(t.id),
i = n.width(),
r = n.find("svg"),
o = [r.width(), r.height()],
a = n.find(".MathJax_SVG").width();
if (e) {
var s = n.find(".MathJax_SVG").clone();
return function(t, n) {
if (t && n) {
var i = (t.getAttribute("viewBox") || "").split(" ");
if (i && 4 === i.length) {
i = i.map(function(t) {
return t - 0
});
var r = t.getBoundingClientRect(),
o = t.querySelector("g").getBoundingClientRect();
i[0] = i[0] + (o.left - r.left) / r.width * i[2], i[2] = o.width / r.width * i[2], n.setAttribute("viewBox", i.join(" ")), e ? n.setAttribute("width", Math.min(o.width, 640)) : n.setAttribute("width", o.width)
}
}
}(n.find("svg")[0], s.find("svg")[0]), s[0] ? h.processExportedSVG(s[0].outerHTML) : "<p class='md-math-block'>$$" + c.escape(t.get("text")) + "$$</p>"
}
return (n = n.clone()).find(".md-rawblock-tooltip").remove(), n.find("svg").attr("width", o[0] + "px").attr("height", o[1] + "px").css("max-width", "100%"), i < a - 10 && n.find(".MathJax_SVG").css("zoom", i / a), n.length ? h.processExportedSVG(n[0].outerHTML) : "<p class='md-math-block'>{math}</p>".replace("{math}", "$$\n" + c.escape(t.get("text")) + "\n$$")
},
exportToHTML: function(t) {
var e = (t = t || {}).forPrint,
n = t.noStyle,
i = t.noBackground,
r = t.forImage,
o = t.extraCss,
a = this.editor.nodeMap,
s = this.editor,
u = [],
l = File.editor.docMenu.getValueInMeta("title") || (File.getFileName() || "").replace(/\.(md|mmd|markdown|txt|text)$/i, ""),
f = File.option.enableDiagram && m(".md-fences[lang='mermaid']").length,
h = Object.keys(File.editor.fences.queue).length,
d = "";
File.option.showLineNumbersForFence && s.fences.refreshEditor(!0);
function v(t, e) {
if (!t) return "";
e = e || [];
var n, i = /^\s*@include-when-export\s+(url)?([('"]+)([^\)"']+)([)'"]+)/im;
function r(t) {
File.isMac ? t && e.push(c.getFilePathFromMacProxy(t)) : t && e.push(t)
}
try {
(n = t.match(/^\s*@include-when-export\s.+$/gim)) && n.map(function(t) {
r((i.exec(t) || [])[3])
})
} catch (t) {}
i = /^\s*@import\s+(url)?([('"]+)([^\)"']+)([)'"]+)/im;
try {
(n = t.match(/^\s*@import\s.+$/gim)) && n.map(function(t) {
r((i.exec(t) || [])[3])
})
} catch (t) {}
return e.map(function(t) {
return "<link href='" + t + "' rel='stylesheet' type='text/css' />"
}).join("\n")
}
function p(t) {
return File.isMac ? bridge.callSync("path.readText", t) : File.isNode ? reqnode("fs").readFileSync(t, "utf-8") : void 0
}
return function(t, a) {
a = c.escape(a) || "";
var s = File.option.splitPages;
u.length && (t += "<div class='footnotes-area' " + (e ? "data-breakpage" : "") + " ><hr/>" + F(u) + "</div>");
var l = e ? "<script> window.setBreakPage = function(b){var node = document.querySelectorAll('[data-breakpage]'); for(var i=0;i<node.length;i++){node[i].style.pageBreakBefore = b ? 'always':'' }}; setBreakPage(" + (s ? "true" : "false") + ");<\/script>" : "",
y = File.isMac ? "is-mac" : "is-node",
w = r ? File.option.imageExportFontSize : document.body.parentElement.style.fontSize || "";
if (w && (w = " style='font-size:" + w + " !important'"), e && File.isMac && (l += "<script>(" + b.toString() + ")();<\/script>"), e && (l += "<script>(" + g.toString() + ")();<\/script>"), n) return "<!doctype html>\n<html>\n<head>\n<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>\n<title>" + a + "</title></head>\n<body>" + t + "</body>\n</html>";
var k = function() {
var t, n, o, a = [];
if (d = "", e) {
if (document.querySelectorAll("link[css-include]").forEach(function(t) {
d += "<link rel='stylesheet' href='" + c.escapeInQuote(t.href) + "' type='text/css' />"
}), !r && File.colorBrightness < .5 && File.isNode) {
var s = reqnode("electron").remote.app.getPath("userData");
d += ["github.css", "base.user.css", "github.user.css"].map(function(t) {
return "<link rel='stylesheet' href='file:///" + c.escapeInQuote(s + "/themes/" + t) + "' type='text/css' />"
}).join("\n")
} else !r && File.colorBrightness < .5 && i && File.isMac ? d += ["github.css", "base.user.css", "github.user.css"].map(function(t) {
return "<link rel='stylesheet' href='http://typora-theme/" + c.escapeInQuote(t) + "' type='text/css' />"
}).join("\n") : d += ["theme_css", "base_user_css", "theme_user_css"].map(function(t) {
return File.isMac ? "<link rel='stylesheet' href='" + c.escapeInQuote(m("#" + t).attr("href")) + "' type='text/css' />" : "<link rel='stylesheet' href='file://" + (File.isWin ? "/" : "") + c.escapeInQuote(m("#" + t).attr("href")) + "' type='text/css' />"
}).join("\n");
return ""
}
function u(t) {
for (var e in t.cssRules) {
var n = t.cssRules[e];
if (n.styleSheet) {
if (n.href.match(/mermaid/i) && !f) continue;
if (n.href.match(/sourcemode\.dark\.css/i)) continue;
u(n.styleSheet)
} else /@font\-face/.exec(n.cssText || "") || a.push((n.cssText || "").replace(/content: ([^;]{1});/g, "content: '$1';"))
}
}
var l, g, b;
File.isMac && (o = ["theme_css", "base_user_css", "theme_user_css"].map(function(t) {
return g = [], b = c.getFilePathFromMacProxy(m("#" + t).attr("href")).replace(/^file:\/\//, ""), v(l = p(b), g), g.forEach(function(t) {
(/^\/\//.exec(t) || /.+:\/\//.exec(t)) && (d += "<link href='" + t + "' rel='stylesheet' type='text/css' />")
}),
function t(e, n) {
var i = /^["']/,
r = [];
File.isMac && (n = c.getFilePathFromMacProxy(n).replace(/^file:\/\/?/, ""));
function o(e) {
var o = (e.match(i) || [""])[0];
return e = decodeURI(o.length ? e.substring(1, e.length - 1) : e), (e = c.getAbsolutePath(n, e)).match(/\.css$/) ? (r.push(t(p(e), e)), e = "") : e = (File.isMac ? "file://" : "file:///") + e, o + encodeURI(e) + o
}
return e = (e || "").replace(/@font\-face\s*{[^}]+}\s*\n/g, "").replace(/(^|;|\n)[\s]*@import([^;\n]+)(;|$|\n)/g, function(t, e) {
var n = (/['"]([^"']+)['"]/.exec(t) || [])[0];
return n ? t.replace(n, o(n)) : t
}).replace(/url\([^:)]+\)/gi, function(t) {
return "url(" + o(t = t.substring(4, t.length - 1)) + ")"
}), e = r.join("\n") + e
}(l, b)
}).join("\n")), n = ["(base\\.css)"], o || n.push("(theme)"), h && n.push("(codemirror)"), f && n.push("(mermaid)"), n = new RegExp(n.join("|"), "i");
for (var y = 0; y < document.styleSheets.length; y++)
if (t = document.styleSheets[y], n.exec(t.href) && (u(t), /themes/.exec(t.href))) try {
var w = t.href;
File.isMac && (w = c.getFilePathFromMacProxy(w));
var F = decodeURI(w.replace(File.isWin ? /^[\w_-]+:[\/]+/ : /^[\w_-]+:\/\/?/, ""));
d += v(p(F))
} catch (t) {}
return o && a.push(o), a.join("\n")
}(),
x = ["typora-export"];
return r && (x.push("for-image"), k += " ::-webkit-scrollbar {display: none;} "), File.option.preLinebreakOnExport || (k += " .typora-export li, .typora-export p, .typora-export, .footnote-line {white-space: normal;} "), File.option.indentFirstLine && (y += " first-line-indent"), document.body.classList.contains("os-windows") && (x.push("os-windows"), File.option.monocolorEmoji && x.push("monocolor-emoji")), o && (k += " " + o), "<!doctype html>\n<html" + w + (e ? " class='blink-to-pdf' " : "") + ">\n<head>\n<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>\n<title>" + a + "</title>" + d + "<style type='text/css'>html {overflow-x: initial !important;}" + k + "\n</style>\n</head>\n<body class='" + x.join(" ") + "' >\n<div id='write' " + (e ? "style='top:auto'" : "") + " class = '" + y + "'>" + t + "</div>\n" + l + "</body>\n</html>"
}(this.exportCollection(a.blocks, u, {
forPrint: e,
noStyle: n,
forImage: r
}), l)
},
cleanUpTempFiles: function() {}
});
function F(t) {
return t.map(function(t) {
return "<div class='footnote-line'>" + t.join("") + "</div>"
}).join("\n")
}
var k = function(t, e) {
var n = m.localize.getString(File.isMac ? "Reveal in Finder" : "Reveal in File Explorer", "Front"),
i = "pdf" == t ? "Export to PDF successfully." : "Export operation finished successfully.";
i = m.localize.getString(i, "Panel"), h.showNotification(i, !1, n, function() {
JSBridge.showInFinder(e)
}), File.isMac && File.editor.export.cleanUpTempFiles()
};
w.onExportSuccess = k, n.exports = w
}), $__System.registerDynamic("3d", ["1f"], !0, function(t, e, n) {
this || self;
var i = t("1f"),
r = "CodeMirror-activeline",
o = "CodeMirror-activeline-background",
a = "CodeMirror-activeline-gutter";
i.defineOption("styleActiveLine", !1, function(t, e, n) {
var r = n != i.Init && n;
e != r && (r && (t.off("beforeSelectionChange", c), s(t), delete t.state.activeLines), e && (t.state.activeLines = [], u(t, t.listSelections()), t.on("beforeSelectionChange", c)))
});
function s(t) {
for (var e = 0; e < t.state.activeLines.length; e++) t.removeLineClass(t.state.activeLines[e], "wrap", r), t.removeLineClass(t.state.activeLines[e], "background", o), t.removeLineClass(t.state.activeLines[e], "gutter", a)
}
function u(t, e) {
for (var n = [], i = 0; i < e.length; i++) {
var u = e[i],
c = t.getOption("styleActiveLine");
if ("object" == typeof c && c.nonEmpty ? u.anchor.line == u.head.line : u.empty()) {
var l = t.getLineHandleVisualStart(u.head.line);
n[n.length - 1] != l && n.push(l)
}
}(function(t, e) {
if (t.length != e.length) return !1;
for (var n = 0; n < t.length; n++)
if (t[n] != e[n]) return !1;
return !0
})(t.state.activeLines, n) || t.operation(function() {
s(t);
for (var e = 0; e < n.length; e++) t.addLineClass(n[e], "wrap", r), t.addLineClass(n[e], "background", o), t.addLineClass(n[e], "gutter", a);
t.state.activeLines = n
})
}
function c(t, e) {
u(t, e.ranges)
}
}), $__System.registerDynamic("3e", ["1f"], !0, function(t, e, n) {
"use strict";
this || self;
var i = t("1f");
i.defineOption("visibleSpace", !1, function(t, e, n) {
n == i.Init && (n = !1), n && !e ? t.removeOverlay("visiblespace") : !n && e && t.addOverlay({
token: function(t, e) {
if (!e) return null;
if (e.atBlockStart && t.pos < e.atBlockStart) return t.eat(" ") ? "startspace startspace-" + (t.pos - 1) : t.eat("\t") ? "starttab startspace-" + (t.pos - 1) : (t.pos++, null);
var n = /(^[ \t]+)|(\s+$)/.exec(t.string),
i = t.string.length,
r = n && n[1] ? n[1].length : -1;
n && n[2] && n[2].length;
return r > 0 && r > t.pos ? (t.pos++, "startspace-" + (t.pos - 1) + ("\t" == t.string.charAt(t.pos - 1) ? " starttab" : " startspace")) : (t.pos = i, null)
},
name: "visiblespace"
})
})
}), $__System.registerDynamic("3f", ["1f", "3d", "3e", "e", "12", "13", "14", "19", "1b"], !0, function(t, e, n) {
"use strict";
this || self;
var i = t("1f"),
r = (t("3d"), t("3e"), t("e")),
o = (t("12"), t("13")),
a = t("14"),
s = t("19"),
u = t("1b"),
c = window.reqnode ? reqnode("electron").remote : null,
l = o.Node,
f = o.TYPE,
h = r("#typora-source"),
d = (r("#toggle-sourceview-btn"), !1),
m = function(t) {
this.editor = t, this.cm = null, this.inSourceMode = !1, this.renderedHTML = ""
};
m.prototype.prep = function() {
if (!this.cm) {
var t = this;
this.cm = i(document.querySelector("#typora-source"), {
lineWrapping: !0,
mode: "gfm",
theme: "typora-default",
styleSelectedText: !0,
maxHighlightLength: 1 / 0,
styleActiveLine: !0,
visibleSpace: !0,
viewportMargin: 100,
autoCloseBrackets: !0,
autoCloseTags: !0,
resetSelectionOnContextMenu: !1,
extraKeys: {
Enter: "newlineAndIndentContinueMarkdownList"
},
lineNumbers: !0,
dragDrop: !1,
indentUnit: File.option.codeIndentSize,
tabSize: File.option.codeIndentSize
}, this.editor), h.css("z-index", "2");
var e = this.editor;
this.cm.on("changes", function(n, i) {
if (t.inSourceMode && (document.querySelector(".on-search-panel-open") && "+findReplace" !== i[0].origin && "setValue" !== i[0].origin && t.editor.searchPanel.closePanel(), "begin" !== i[0].origin && "sync" !== i[0].origin)) {
d = !0;
var r = File.editor.sourceView.cm.doc.historySize();
JSBridge.menu.update({
"Edit→Undo": {
enabled: !File.isLocked && r.undo > 0
},
"Edit→Redo": {
enabled: !File.isLocked && r.redo > 0
}
}), "fromDisk" !== i[0].origin && File.updateChangeCount(File.ChangeType.NSChangeDone), e.syncChange([{
type: "sync",
srcChanges: i
}]), File.needsUpdateSnap()
}
}), this.cm.on("contextmenu", function(e, n) {
if (t.inSourceMode) {
var i = e.getCursor("from"),
r = e.getCursor("to");
setTimeout(function() {
e.setSelection(i, r, {
scroll: !1
})
}, 180), File.isNodeHtml && File.contextMenu.show(n)
}
}), this.cm.on("cursorActivity", function(n, i) {
t.inSourceMode && (File.isFocusMode && e.updateFocusMode(!0), File.isTypeWriterMode && t.scrollAdjust(), File.isNodeHtml && File.contextMenu.hide(i))
}), this.cm.on("scrollCursorIntoView", function(e, n) {
t.inSourceMode && !File.isTypeWriterMode || n.preventDefault()
}), this.cm.display.scroller.addEventListener("wheel", function(t) {
Math.abs(t.deltaY) < 4 || File.isFocusMode && File.isTypeWriterMode && e.updateFocusMode(!1)
}, {
passive: !0
})
}
}, m.prototype.show = function() {
File.sync();
var t, e = this.editor.getMarkdown();
try {
t = x.call(this)
} catch (e) {
t = null, console.warn(e.stack)
}
this.editor.refocus(null), this.editor.cleanTooltip(), this.editor.searchPanel.closePanel(!0), this.inSourceMode = !0, File.isNode && c.getCurrentWindow().setInSourceMode(!0), r("body").addClass("typora-sourceview-on");
var n = r("content");
r("body").find(".md-tooltip-hide, #md-notification").hide(), n.find(".auto-suggest-container.ty-show").removeClass("ty-show"), this.renderedHTML = "", this.prep(), this.cm.setValue(e, "begin"), d = !1, h.show(), _.call(this, t), this.cm.refresh(), this.cm.focus(), this.cm.getDoc().clearHistory(), this.cm.options.readOnly = File.isLocked, this.enableTypeWriterMode(File.isTypeWriterMode)
};
var v;
m.prototype.enableTypeWriterMode = function(t) {
if (this.cm) {
if (t) {
var e = this.cm.defaultTextHeight();
v = document.querySelector("content").clientHeight, this.cm.display.lineSpace.parentNode.style.paddingTop = (v - e) / 2 + "px", this.cm.display.lineSpace.parentNode.style.paddingBottom = (v - e) / 2 + "px"
} else this.cm.display.lineSpace.parentNode.style.paddingTop = "", this.cm.display.lineSpace.parentNode.style.paddingBottom = "";
this.scrollAdjust()
}
}, m.prototype.setValue = function(t, e, n) {
this.cm && (this.cm.setValue(t, n || "begin"), e && (d = !0))
}, m.prototype.onSave = function() {
if (this.cm.doc.history.lastModTime = 0, d) {
var t = this.cm.getScrollInfo().top;
File.reloadContent(this.cm.getValue(File.useCRLF ? "\r\n" : "\n"), !1, !0, !1, !0), this.cm.scrollTo(0, t)
}
}, m.prototype.hide = function() {
var t = this.editor;
t.searchPanel.closePanel(), r("body").removeClass("typora-sourceview-on"), this.inSourceMode = !1, File.isNode && c.getCurrentWindow().setInSourceMode(!1);
var e = this.cm.getCursor();
e.lineText = this.cm.getLine(e.line),
function(t) {
var e = t.lineText.substring(0, t.ch);
t.inRef = e.match(b) && !e.match(y), t.textBefore = e
}(e), d && (File.isMac && !app.document.isDocumentEdited() && this.renderedHTML ? (r(File.editor.sessionStr).html(this.renderedHTML), setTimeout(function() {
File.editor.refresh()
}, 500), File.editor.syncChange([{
type: "sync",
allHtml: this.renderedHTML,
json: u.buildAllDoc(File.editor.nodeMap).json
}])) : File.reloadContent(this.cm.getValue(File.useCRLF ? "\r\n" : "\n"), !1, !0, !1, !0)), h.hide(), k.call(this, e), t.selection.scrollAdjust()
}, m.prototype.scrollAdjust = function() {
var t = this.cm;
if (File.isTypeWriterMode) {
var e = t.cursorCoords(!0, "window"),
n = e.top - (v + e.bottom - e.top) / 2;
Math.abs(n) > 2 && t.scrollTo(null, t.getScrollInfo().top + n)
} else {
var i = this.cm.charCoords(this.cm.getCursor(), "local").top,
r = this.cm.getScrollerElement().offsetHeight / 2;
this.cm.scrollTo(null, i - r - 5)
}
};
function p(t, e) {
var n = "number" == typeof t ? t : t.get("tail");
return void 0 === n ? void 0 === e ? t.get("after") ? 1 : 0 : e : n
}
function g(t, e) {
function n(t, e) {
return t.get("children").toArray().reduce(function(t, n) {
return t + g(n, e)
}, 0)
}
function i(t) {
return l.isType(t.get("parent"), f.list_item) && !1 !== t.get("parent").get("tight")
}
switch (t.get("type")) {
case f.meta_block:
return 2 + t.get("text").match(/(\n|$)/g).length + p(t);
case f.heading:
return (t.get("ahead") || 0) + ((t.get("pattern") || (!l.isType(t.get("parent"), f.list_item) && (1 == File.option.headingStyle || 3 == File.option.headingStyle) && t.get("depth") <= 2 ? "===" : "#")).match(/[-=]/) ? 2 : 1) + p(t);
case f.paragraph:
var r = t.get("tail");
return (e || i(t)) && (r = 0), l.isType(t.get("after"), f.paragraph) && r < 1 && (t.unset("tail"), r = 1), void 0 !== r || !l.isType(t.get("after"), f.math_block) && t.get("after") || (r = 0), (t.get("ahead") || 0) + (t.get("text").split(/\n/g).length || 1) + p(void 0 === r ? t : r, r);
case f.blockquote:
return (t.get("ahead") || 0) + n(t) + p(t);
case f.list:
var o = t.get("ahead") || 0;
return t.isLoose(!0), o += n(t), l.isType(t.get("after"), f.list) && (!t.get("tail") || t.get("tail")) < 2 && t.get("pattern") == t.get("after").get("pattern") && t.get("style") == t.get("after").get("style") && (t.unset("tail"), o++, i(t) && o++), e || (o += p(t, i(t) ? 0 : 1)), o;
case f.list_item:
return t.toMark().split(/\n/).length;
case f.html_block:
return (t.get("ahead") || 1) + (t.get("text").match(/\n/g) || []).length + p(t);
case f.fences:
var a = /`|~/.exec(t.get("pattern") || "```");
return (t.get("ahead") || 0) + (a ? 3 : 1) + (t.get("text").match(/\n/g) || []).length + p(t);
case f.math_block:
return (t.get("ahead") || 0) + 3 + (t.get("text").match(/\n/g) || []).length + p(t, l.isType(t.get("before"), f.paragraph) && l.isType(t.get("after"), f.paragraph) ? 0 : 1);
case f.hr:
return p(t) + 1;
case f.toc:
return (t.get("ahead") || 0) + (t.get("pattern") || "").split(/\n/).length + p(t);
case f.def_footnote:
case f.def_link:
return (t.get("ahead") || 0) + 1 + p(t, !t.get("after") || l.isType(t.get("after"), l.TYPE.def_link) ? 0 : 1);
case f.table:
return (t.get("ahead") || 0) + t.get("children").length + 1 + p(t);
case f.table_row:
return t.get("before") ? 1 : 2;
case f.table_cell:
return 0;
default:
return 1
}
}
var b = /\[/,
y = /\]/;
var w = function(t, e, n, i) {
var r = null;
function o(t, e, n) {
return void 0 === n && (n = (n = e ? i.lineText.indexOf(t) : i.lineText.lastIndexOf(t)) < 0 ? 0 : n), Math.max(0, i.ch - n)
}
switch (e.get("type")) {
case f.paragraph:
for (var u = e.get("text").split(/\n/), c = 0, l = 0; l < n && l < u.length; l++) c += u[l].length + 1;
t.undo.exeCommand({
type: "cursor",
id: e.cid,
start: c + o(u[n])
});
break;
case f.heading:
t.undo.exeCommand({
type: "cursor",
id: e.cid,
start: function(t, e) {
var n = e;
for (var i in t) void 0 !== i && i <= e && (n += t[i]);
return n
}(e.cursorDiff || [], o(e.get("text")))
});
break;
case f.hr:
case f.toc:
e.get("after") ? t.selection.jumpIntoElemBegin(t.findElemById(e.get("after").getVeryFirst().cid)) : t.selection.selectNode(e);
break;
case f.math_block:
r = t.mathBlock.startEditing(e.cid), n--;
break;
case f.html_block:
r = t.htmlBlock.startEditing(e.cid);
break;
case f.fences:
(e.get("pattern") || "```").match(/`/) && n--, r = t.fences.getCm(e.cid);
break;
case f.def_link:
case f.def_footnote:
if (i.inRef) t.undo.exeCommand({
type: "cursor",
id: e.cid,
start: o(e.get("ref"), !0)
});
else {
var h = new RegExp("(]:\\s*)" + a.escapeRegExp(e.get("href") || e.get("text"))).exec(i.lineText),
d = h ? h.index + h[1].length : 0;
t.undo.exeCommand({
type: "cursor",
id: e.cid,
start: e.get("ref").length + o(void 0, void 0, d)
})
}
break;
case f.meta_block:
for (u = e.get("text").split(/\n/), d = i.ch, l = 0; l < n - 1; l++) d += (u[l] || "").length + 1;
t.undo.exeCommand({
type: "cursor",
id: e.cid,
start: d
});
break;
case f.table_row:
! function(t) {
var e = t.textBefore;
t.cellsBefore = s.splitTableCell(e.replace(/^\s*\|/, ""), !0) || [e], t.cellsOffset = t.cellsBefore.last().length, t.cellsBefore = t.cellsBefore.length
}(i), t.undo.exeCommand({
type: "cursor",
id: e.getNthChild(Math.max(0, i.cellsBefore - 1)).cid,
start: i.cellsOffset
});
break;
default:
t.selection.jumpIntoElemEnd(t.findElemById(e.getVeryFirst(!0).cid))
}
r && (r.focus(), n >= r.lineCount() ? r.execCommand("goDocEnd") : r.setCursor({
line: n,
ch: o(r.getLine(n))
}))
},
F = function(t, e, n, i) {
var r = 0;
for (n + (e.get("ahead") || 0) > i.line && t.selection.jumpIntoElemBegin(t.findElemById(e.getVeryFirst().cid)), r = g(e); e.get("after") && n + r <= i.line;) n += r, r = g(e = e.get("after"));
e.get("children").length && !l.isType(e, f.table_row) ? F(t, e.getFirstChild(), n + (e.get("ahead") || 0), i) : n + r - (o = e, l.isType(o, f.table_row) ? 0 : p(o)) > i.line ? w(t, e, i.line - n - (e.get("ahead") || 0), i) : t.selection.jumpIntoElemEnd(t.findElemById(e.getVeryFirst(!0).cid));
var o
};
m.prototype.gotoLine = function(t) {
var e = this.editor;
try {
F(e, e.nodeMap.getFirst(), 0, t)
} catch (t) {
console.warn(t.stack)
}
};
var k = function(t) {
var e = this.editor;
try {
F(e, e.nodeMap.getFirst(), 0, t)
} catch (t) {
console.warn(t.stack)
}
e.refocus()
},
x = function(t) {
if (this.editor.focusCid) {
var e = this.editor.findElemById(this.editor.focusCid),
n = this.editor.getNode(this.editor.focusCid),
i = 0,
o = "",
s = "",
u = this.editor.selection.getRangy();
if (n) {
if (i = function t(e, n) {
return n = n || 0, e ? e.get("before") ? t(e.get("before"), n + g(e.get("before"))) : e.get("parent") ? t(e.get("parent"), n + (e.get("parent").get("ahead") || 0)) : n : n
}(n) + (n.get("ahead") || 0), l.isType(n, f.fences)) {
var c = !/`|~/.exec(n.get("pattern") || "```");
return !c && i++, (t = document.activeElement.classList.contains("ty-cm-lang-input") ? {
line: -1,
before: n.get("pattern") || "```"
} : this.editor.fences.getCm(n.cid).doc.getCursor()).before = (c ? n.get("pattern") : "") + this.editor.fences.getCm(n.cid).getLine(t.line).substring(0, t.ch), t.line = t.line + i, t.ch = void 0, t
}
if (l.isType(n, f.math_block)) return this.editor.mathBlock.currentCm ? ((t = this.editor.mathBlock.currentCm.doc.getCursor()).line = t.line + i + 1, t) : {
line: i,
ch: -1
};
if (l.isType(n, f.toc)) return {
line: i,
before: "]"
};
if (l.isType(n, f.hr)) return {
line: i,
before: this.get("pattern") || "------"
};
if (l.isType(n, f.def_link, f.def_footnote)) {
var h, d = this.editor.getJQueryElem(u.startContainer);
if ((h = d.closest(".md-def-content")).length) return u.setStartBefore(h[0]), {
line: i,
before: o = "]: " + u.toString()
};
if ((h = d.closest(".md-def-title")).length && d.text().length) return u.setStartBefore(h[0]), {
line: i,
before: o = '"' + u.toString()
}
}
if (l.isType(n, f.table, f.table_row)) return {
line: i,
ch: -1
};
if (u.setStartBefore(e[0]), o = r(u.toHtml()).rawText(), l.isType(n, f.table_cell)) {
for (s = "", n = n.get("before"); n;) s = "\\|[^|]*" + s, n = n.get("before");
return {
line: i,
beforeRegExp: o = s + "\\|\\s*" + a.escapeRegExp(o)
}
}
if (l.isType(n, f.meta_block)) return {
line: i = ((o = o.replace(/^---/gm, "​---").replace(/\n$/g, "")).match(/\n/g) || []).length + 1,
before: o = o.substring(o.lastIndexOf("\\n"))
};
if (l.isType(n, f.html_block)) return this.editor.htmlBlock.currentCm ? ((t = this.editor.htmlBlock.currentCm.doc.getCursor()).line = t.line + i, t) : {
line: i + 2,
ch: -1
};
if ("" === o && l.isType(n, f.paragraph, f.heading)) {
if (l.isType(n, f.heading)) {
var m = n.toMark();
if (/^\s*#/.exec(m)) return {
line: i,
beforeRegExp: "^\\s*#+\\s*"
}
}
var v = n.getTopBlock();
if (l.isType(v, f.list, f.blockquote)) return {
line: i,
ch: 0,
afterIndent: !0
}
}
var p = o.split(/\n/) || [o];
return o = p.last(), {
line: i + p.length - 1,
before: o
}
}
}
},
_ = function(t) {
if (t) try {
var e = t.ch;
if (t.line < 0 && (t.line = this.cm.doc.lineCount() - 1), t.afterIndent) {
var n = this.cm.doc.getLine(t.line);
e = (/^((\s+)|([-+*]\s)|(\[( |x)\])|>|(\d+\.\s))+/i.exec(n) || [""])[0].length
}
if (void 0 === e) {
n = this.cm.doc.getLine(t.line) || "";
if (t.before) e = n.indexOf(t.before) + t.before.length;
else if (t.beforeRegExp) {
var i = new RegExp(t.beforeRegExp, "g");
i.exec(n), e = i.lastIndex
}
}
this.cm.doc.setCursor({
line: t.line,
ch: e > 0 ? e : 0
}), e < 0 && this.cm.execCommand("goLineEnd")
} catch (t) {
console.warn(t.stack)
}
};
n.exports = m
}), $__System.registerDynamic("40", ["e", "14", "26", "31"], !0, function(t, e, n) {
"use strict";
this || self;
var i, r = t("e"),
o = t("14"),
a = t("26").map,
s = t("31"),
u = window.reqnode ? reqnode("electron").remote : null,
c = u ? u.app : window.app,
l = function(t) {
this.editor = t, this.worker = null
},
f = r(r("#typora-quick-open-item-templ").html()),
h = r(r("#typora-quick-loading-item-templ").html()),
d = r(".typora-quick-open-list"),
m = r(".typora-quick-open-list-inner"),
v = r("#typora-quick-open-input input"),
p = [],
g = [],
b = [],
y = [],
w = 0,
F = [],
k = "",
x = [],
_ = 40,
$ = 8,
E = -1,
C = null,
A = null,
S = 0,
T = !0,
M = -1,
D = 20;
function L(t, e) {
File.isMac && (e ? bridge.callHandler("controller.openFolder", t) : bridge.callHandler("path.openFile", t)), File.isNode && (e ? c.openFolder(t, u.getCurrentWindow()) : c.openFileOrFolder(t, {
mountFolder: function(t, e) {
var n = File.isWin ? "\\" : "/";
return t && e && 0 == e.indexOf(t.replace(/[\/\\]$/, "") + n)
}(File.getMountFolder(), t) ? File.getMountFolder() : void 0
}))
}
function R(t, e, n, i) {
var r, a, s;
if (t.n) r = t.n, a = t.p.replace(/[\/\\][^\/\\]+$/, "") + (File.isWin ? "\\" : "/"), s = t.p;
else {
s = t;
var u = /[^\\\/]+$/.exec(t);
r = u[0], a = t.substring(0, u.index)
}
x.length && (r = r.replace(/</g, "").replace(/>/g, "").replace(new RegExp("((" + x.join(")|(") + "))", "gi"), function(t, e) {
return "<b>" + e.replace(/</g, "").replace(/>/g, "") + "</b>"
}).replace(/\uE27A/g, "&lt;").replace(/\uE27B/g, "&gt;").replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/'/g, "&#39;")), i && (r += File.isWin ? "\\" : "/");
var c, l = e.children(".typora-quick-open-info-item"),
h = f.find(".typora-quick-open-item-title").html(r).end().find(".typora-quick-open-item-path").text((c = a, !A && File.option.userPath && (A = new RegExp("^" + o.escapeRegExp(File.option.userPath))), (c = A ? c.replace(A, "~") : c).length > 60 ? c.substring(0, 30) + "..." + c.substring(c.length - 30, c.length) : c)).end().clone().attr("data-is-dir", i || !1).attr("data-path", s).attr("data-index", n + "").addClass(M == n ? "active" : "");
l.length ? l.before(h) : e.append(h).css("translate3d", "(0, 0, 0)")
}
l.prototype.init = function() {
this.bindEvent(), File.isMac ? (this.registerBridge(), bridge.callHandler("quickOpen.cacheRecentFiles")) : File.isNode && (this.initWorker(), T = !1, this.setRecentFiles((c.setting.getRecentDocuments() || []).map(function(t) {
return t.path
})), this.setRecentFolders((c.setting.getRecentFolders() || []).map(function(t) {
return t.path
})), this.cacheFolder(File.getMountFolder()), this.listenIpc())
}, l.prototype.registerBridge = function() {
var t = this;
bridge.registerHandler("quickOpen.initFileCache", function(e, n) {
t.initFileCache.apply(t, e || []), n && n()
}), bridge.registerHandler("quickOpen.updateResult", function(e, n) {
t.updateResult(e), n && n()
}), bridge.registerHandler("quickOpen.setSearchState", function(e, n) {
t.setSearchState(e), n && n()
}), bridge.registerHandler("quickOpen.setRecentFiles", function(e, n) {
t.setRecentFiles(e), n && n()
}), bridge.registerHandler("quickOpen.setRecentFolders", function(e, n) {
t.setRecentFolders(e), n && n()
}), bridge.registerHandler("quickOpen.updateCacheByRename", function(e, n) {
t.updateCacheByRename(e.src, e.dest), n && n()
}), bridge.registerHandler("quickOpen.updateCache", function(e, n) {
t.updateCache(e.toDel, e.toAdd, e.group), n && n()
})
}, l.prototype.bindEvent = function() {
var t = this;
v.on("input", function() {
var e = r(this).val();
e != k && (k = e.replace(/[()'"%\\\/.?]/, " "), H.call(t, k))
}).on("keydown", function(e) {
var n = e.keyCode || e.which;
if ("Esc" == a[n] || "o" == a[n] && e.shiftKey && e.metaKey) return t.close(), !1;
if ("Tab" == a[n]) return !1;
if ("Up" == a[n]) return I(-1), !1;
if ("Down" == a[n]) return I(1), !1;
if ("Enter" == a[n]) {
var i = r(".typora-quick-open-item.active")[0];
if (i) return L(i.dataset.path, i.dataset.isDir + "" == "true"), t.close(), !1
}
if (File.isMac && e.ctrlKey && !e.metaKey && !e.shiftKey) {
if ("P" == String.fromCharCode(n)) return I(-1), !1;
if ("N" == String.fromCharCode(n)) return I(1), !1
}
e.stopPropagation()
}).on("blur", function() {
setTimeout(t.close, 200)
}), d.on("mousedown", ".typora-quick-open-item", function(t) {
1 == t.which && L(this.dataset.path, this.dataset.isDir + "" == "true")
}).on("scroll", N)
}, l.prototype.listenIpc = function() {
var t = this;
reqnode("electron").ipcRenderer.on("updateQuickOpenCache", function(e, n) {
t.updateCache(n.toDel, n.toAdd, n.group)
})
};
function B(t) {
var e = 0;
return F.forEach(function(n) {
n < t && (e += 20)
}), e
}
function I(t) {
if (p.length) {
M = -1 == M ? 0 : (M + t) % p.length, r(".typora-quick-open-item.active").removeClass("active"), r(".typora-quick-open-item[data-index='" + M + "']").addClass("active");
var e = B(M),
n = M * _ + e,
i = d.scrollTop();
(n < i || n > i + _ * $ - 25) && d.scrollTop(Math.min(n, (p.length - $) * _ + B(p.length)) - 4)
}
}
function N(t, e) {
e = e || m;
var n = p.length - w;
function o(t) {
if (!(t < 0)) {
e.find("[data-block-index='" + t + "']").remove();
var o = r("<div class='quick-open-group-block' data-block-index='" + t + "'>").css("position", "absolute").css("top", t * D * 40 + "px").css("width", "100%");
if (i = Math.min(n + S, t * D + D + S), !(t * D > i)) {
for (var a = t * D; a < i; a++) a == n ? (s = n, o.append(h.clone().find(".typora-quick-open-info").text(r.localize.getString(s ? "Gathering more results" : "Searching")).end())) : R(p[a + w], o, a + w);
var s;
e.append(o)
}
}
}
var a = d.scrollTop(),
s = Math.floor(a / 40),
u = Math.floor(s / D);
u != E && (o((E = u) - 1), o(E), o(E + 1))
}
function O(t, e, n) {
if (t) {
var i = n.parent().show();
return e > 0 ? i.addClass("ty-has-prev") : i.removeClass("ty-has-prev"), !0
}
n.parent().hide()
}
function j(t, e, n, i) {
P(t), t.length && F.push(e), n.html(""), t.forEach(function(t, r) {
R(t, n, e + r, i)
}), O(t.length, e, n)
}
function P(t) {
C && M < 0 && (M = t.findIndex(function(t) {
return t.p == C
}))
}
function q(t) {
var e = (x = t.split(/\s+/).filter(o.isNotNullOrEmpty).map(function(t) {
return t.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace("*", ".*")
})).map(function(t) {
return new RegExp("(.)?" + t + "(.)?", "i")
});
p = [], F = [], M = -1, (File.filePath = s.getCurrentFilePath()) && (p = [File.filePath]);
var n, i, a = 0;
File.getMountFolder() ? (i = U(e, x.length ? b : b.slice(0, 12), p), n = U(e, x.length ? y : y.slice(0, 7), p)) : (n = U(e, x.length ? y : y.slice(0, 7), p), i = U(e, x.length ? b : b.slice(0, 12), p));
var u = U(e, g, p);
File.filePath && p.splice(0, 1), j(n, a, r("#ty-quick-open-folder-list-inner"), !0), j(i, a += n.length, r("#ty-quick-open-recent-list-inner")), a += i.length, l = a, E = -1, P(c = u), c.length && F.push(l), w = l, m.html("").height(_ * (c.length + S)), O(c.length + S, l, m) && (0 == w ? m.prev().css("height", "0") : m.prev().css("height", "auto")), N(0, m);
var c, l;
if ((a += u.length) > 0 && !r(".typora-quick-open-item.active").length) {
var f = r(".typora-quick-open-item")[0];
f && f.classList.add("active")
}
}
function U(t, e, n) {
n = n || [];
var i = File.getMountFolder() + (File.isWin ? "\\" : "/"),
r = [],
o = [];
return t.length ? (e.forEach(function(e) {
var a, s = 0;
if (!(n.indexOf(e.p) > -1)) {
for (var u = 0; u < t.length; u++) {
if (!(a = z(e.n, t[u]))) return;
s += a
}
0 == e.p.indexOf(i) && (s += 1.5), e.s = s, r.push(e), o.push(e.p)
}
}), r.sort(function(t, e) {
var n = e.s - t.s;
return n || e.d - t.d
})) : ((r = e.filter(function(t) {
return -1 == n.indexOf(t.p)
})).sort(function(t, e) {
var n = (0 == e.p.indexOf(i) ? 1 : 0) - (0 == t.p.indexOf(i) ? 1 : 0);
return n || e.d - t.d
}), o = r.map(function(t) {
return t.p
})), n.splice.apply(n, [n.length, 0].concat(o)), r
}
function z(t, e) {
t = o.removeDiacritics(t);
var n = e.exec(t);
return n ? (n[1] = n[1] || "", n[3] = n[3] || "", 4 - n[1].length - (/\w/.test(n[1]) ? 1 : 0) - (/\w/.test(n[3]) ? 1 : 0)) : 0
}
function H(t) {
C = p[M], T ? (this.setSearchState(1), File.isMac && bridge.callHandler("quickOpen.query", t), File.isNode && File.e && this.worker.postMessage(["quickFind", File.e, t])) : this.setSearchState(0), q.call(this, t), File.isMac && bridge.callHandler("quickOpen.reindexFolderIfNeeded")
}
l.prototype.stopQuery = function() {
File.isMac && bridge.callHandler("quickOpen.stopQuery"), File.isNode && this.worker.postMessage(["stopQuery"])
}, l.prototype.initWorker = function() {
this.worker = new Worker("app/finder-worker.js");
var t = this;
this.worker.onmessage = function(e) {
switch (e.data.type) {
case "initFileCache":
t.initFileCache.apply(t, e.data.detail);
break;
case "addInitFiles":
t.addInitFiles.apply(t, e.data.detail);
break;
case "removeInitFiles":
t.removeInitFiles.apply(t, e.data.detail);
break;
case "queryMatch":
t.updateResult.apply(t, e.data.detail);
break;
case "queryEnd":
t.setSearchState.apply(t, [0])
}
}
}, l.prototype.cacheFolder = function(t) {
T = !0, g = [], File.isNode && this.worker.postMessage(["listAllFiles", t])
}, l.prototype.show = function() {
var t = r("#typora-quick-open:not(:visible)").show();
this.editor.searchPanel.closePanel(!0), t.length && (v[0].select(), M = -1, H.call(this, v.val().replace(/[()'"%\\\/.?]/, " ")))
}, l.prototype.close = function() {
r("#typora-quick-open:visible").hide().length && File.isMac && bridge.callHandler("quickOpen.stopQuery"), M = -1
}, l.prototype.appendResultAtEnd = function(t, e) {
var n = m.children().last();
return !!(n.hasClass("quick-open-group-block") && n[0].childElementCount + t.length <= D) && (t.forEach(function(t, i) {
R(t, n, e + i)
}), !0)
}, l.prototype.updateResult = function(t) {
t = t.filter(function(t) {
return -1 == p.indexOf(t)
});
var e = p.length;
t.length && (p = p.concat(t), m.height(_ * (p.length - w + S)), p.length - e == t.length && this.appendResultAtEnd(t, e) || (E = -1, m.html(""), N(0, m)))
}, l.prototype.addInitFiles = function(t, e, n) {
g = g.concat(t.map(function(t, i) {
return {
n: e[i],
p: t,
d: n[i]
}
}))
}, l.prototype.removeInitFiles = function(t) {
var e = t.length;
g = g.filter(function(n) {
return n.p.substring(0, e) != t
})
}, l.prototype.initFileCache = function(t, e, n, i, o) {
g = t.map(function(t, i) {
return {
n: e[i],
p: t,
d: n[i]
}
}), o && (b = o.map(function(t) {
return {
n: (/[^\\\/]+$/.exec(t) || [])[0] || "",
p: t
}
})), T = i > t.length, r("#typora-quick-open:visible").length && 0 == x.length && this.updateResult(g)
}, l.prototype.updateCache = function(t, e, n) {
var i = File.isWin ? "\\" : "/";
if (t && [b, y].forEach(function(e) {
e.removeIf(function(e) {
return e.p != t && 0 != (t + i).indexOf(e.p)
})
}, this), e && e != File.filepath) {
var r = {
recentFiles: b,
recentFolders: y
}[n];
r.removeIf(function(t) {
return t.p == e
}), r.unshift({
n: (/[^\\\/]+$/.exec(e) || [])[0] || "",
p: e
})
}
}, l.prototype.updateCacheByRename = function(t, e) {
var n = File.isWin ? "\\" : "/",
i = [b, y];
File.isNode && i.push(g), i.forEach(function(i) {
i.forEach(function(i) {
i.p != t && 0 != i.p.indexOf(t + n) || (i.p = e + i.p.substring(t.length), i.n = (/[^\\\/]+$/.exec(i.p) || [])[0] || "")
})
}, this)
}, l.prototype.setRecentFiles = function(t) {
b = t.map(function(t) {
return {
n: (/[^\\\/]+$/.exec(t) || [])[0] || "",
p: t
}
})
}, l.prototype.setRecentFolders = function(t) {
y = t.map(function(t) {
return {
n: (/[^\\\/]+$/.exec(t) || [])[0] || "",
p: t
}
})
}, l.prototype.setSearchState = function(t) {
S !== t && (t && i == p.length - w ? (r(".typora-quick-open-item:last").after(h.clone().find(".typora-quick-open-info").text(r.localize.getString(i ? "Gathering more results" : "Searching")).end()), i++) : t || (r(".typora-quick-open-info-item").remove().length && m.height(m.height() - 40), i == p.length - w + 1 && i--), S = t)
}, n.exports = l
}), $__System.registerDynamic("41", ["12", "14", "13", "1b", "1c"], !0, function(t, e, n) {
"use strict";
this || self, t("12"), t("14");
var i = t("13"),
r = t("1b"),
o = i.Node,
a = i.TYPE,
s = i.NodeCollectionUtils,
u = (t("1c"), function(t, e) {
if (e(t)) return t;
var n = t.get("parent");
return n ? u(n, e) : null
}),
c = function(t, e) {
if (o.isType(t, a.list) && o.isType(t.get("before"), a.list) && t.get("style") == t.get("before").get("style")) return t.get("before").appendTillEnd(t.getFirstChild(), !0), t.remove(), e && e.remove.push(t.cid), !0
};
function l(t, e) {
var n, i;
if (!t) return t;
if (o.isType(t.get("before"), a.list)) return t;
if (!(n = u(t, function(t) {
return o.isType(t.get("parent"), a.list_item)
})) && e)
for (i = e; i;) {
if (i == t || i.contains(t)) return i;
i = i.get("after")
}
return n
}
function f(t) {
return t ? u(t, function(t) {
return o.isType(t.get("parent"), a.list_item)
}) : t
}
function h(t) {
return u(t, function(t) {
return o.isType(t.get("parent"), a.blockquote)
})
}
function d(t, e) {
return t ? t.get("after") ? e(t.get("after").getVeryFirst()) : d(t.get("parent"), e) : null
}
var m = function(t, e, n, i, s, u) {
u = u || {
replace: [],
remove: []
};
function f(t) {
var e, n, s, l = t.get("before");
if (o.isType(l, a.list)) return s = t.get("after"), i.undo.push(r.buildReplaceUndo(l)), r.addUndoForRemove(i, t), l.getLastChild().getLastChild().set("tail", l.get("tail") || l.getLastChild().get("tail") || l.getLastChild().getLastChild().get("tail")), v(l, 2), l.getLastChild().append(t), v(t), o.isType(s, a.list) && s.get("style") == l.get("style") && (r.addUndoForRemove(i, s), c(s, u)), i.redo.push(r.buildReplaceUndo(l)), u.remove.push(t.cid), u.replace.push(l), !0;
if (n = (e = t.get("parent")).get("before"), !l && n) {
var f = n.getLastChild();
return i.undo.push(r.buildReplaceUndo(n)), o.isType(f, a.list) ? (f.getLastChild().set("tail", n.get("tail") || f.get("tail")), n.set("tail", t.get("tail"))) : (n.getLastChild().set("tail", n.get("tail")), v(n), (f = e.get("parent").clone()).unset("start"), v(f), n.append(f), n.set("tail", t.get("tail")), v(t)),
function(t, e, n) {
var o, a = n.get("parent");
r.addUndoForRemove(i, a), o = n.get("after"), t.append(a), o && (o.set("before", null), e.set("tail", a.get("tail")), v(a), e.appendTillEnd(o), v(e.getLastChild(), 2), c(o, u));
v(a, 2), i.redo.push(r.buildReplaceUndo(e)), u.remove.push(a.cid), u.replace.push(e)
}(f, n, t), !0
}
}
var h, p, g, b = e.get("parent");
if (e.get("before")) g = f(e);
else {
if (!b.get("before")) {
if (h = (p = b.get("parent")).get("before"), !o.isType(h, a.list) || h.get("style") != p.get("style")) return !1;
i.undo.push(r.buildReplaceUndo(h)), r.addUndoForRemove(i, p), h.getLastChild().set("tail", Math.min(h.get("tail"), 1)), h.set("tail", p.get("tail")), c(p, u), i.redo.push(r.buildReplaceUndo(h)), u.remove.push(p.cid), u.replace.push(h)
}
s.containsNode(document.querySelector("[cid='" + b.getLastChild().cid + "']"), !0) ? (g = function(t) {
var e, n = t.get("before");
return !!n && (i.undo.push(r.buildReplaceUndo(n)), e = n.getLastChild(), o.isType(e, a.list) ? e.getLastChild().set("tail", n.get("tail") || e.get("tail")) : ((e = n.get("parent").clone()).unset("start"), n.getLastChild().set("tail", n.get("tail")), n.append(e), v(e)), r.addUndoForRemove(i, t), e.append(t), n.set("tail", t.get("tail")), v(t, 2), i.redo.push(r.buildReplaceUndo(n)), u.remove.push(t.cid), u.replace.push(n), !0)
}(b), e = b) : g = f(e)
}
return !g || e == n || e.contains(n) || n.contains(e) || (e = d(e, l)) && m(t, e, n, i, s, u), g && u
};
function v(t, e) {
for (e = e || 1; e > 0 && t;) t.unset("tail"), t = t.getLastChild(), e--
}
var p = function(t, e, n, i, o, a) {
a = a || [];
function u() {
var t, n, o = e.get("parent"),
u = {},
c = [];
u.oldCid = o.cid, i.undo.push(r.buildReplaceUndo(o)), e.get("before") ? (n = [e], c.push(o), e.get("after") && (t = o.clone(), n.push(t), t.appendTillEnd(e.get("after")), o.insert(t)), o.insert(e), o.set("tail", o.getLastChild().get("tail")), v(o.getLastChild()), c.push(e), t && c.push(t), i.redo.push(r.buildReplaceUndo(o)), r.addUndoForInsertArray(i, n)) : (r.addUndoForRemove(i, e), o.insert(e, !0), r.addUndoForInsert(i, e), c.push(e), o.get("children").length ? (i.redo.push(r.buildReplaceUndo(o)), c.push(o)) : (r.addUndoForRemove(i, o), o.remove())), u.html = s.toHTML(c), a.push(u)
}
for (u(); e && e != n && !e.contains(n) && !n.contains(e);) e && (e = d(e, h)), u();
return a
},
g = function(t, e) {
for (var n = [], i = t; i != e;) n.push(i), i = i.get("after");
return e && n.push(e), n
},
b = function(t, e, n, i, u, l) {
l = l || [];
var h, m, p, y = e.get("before"),
w = e.get("parent"),
F = {};
if (y) m = e.getLastBrother(), i.undo.push(r.buildReplaceUndo(w)), F.oldCid = w.get("parent").cid, w.get("after") && (p = g(w.get("after")), r.addUndoForRemoveArray(i, p), (h = w.get("parent").clone()).unset("start"), w.get("parent").set("tail", w.getLastChild().get("tail")), v(w, 2), h.appendTillEnd(w.get("after")), w.append(h), c(h)), v(e.get("before")), p = g(e), w.get("parent").insertTillEnd(e), i.redo.push(r.buildReplaceUndo(w)), r.addUndoForInsertArray(i, p), e = m, p.unshift(w.get("parent")), F.html = s.toHTML(p), l.push(F);
else {
var k = w.get("parent").get("parent"),
x = k && k.get("parent");
if (!o.isType(x, a.list)) return !1;
if (w.get("parent").get("before") || w.get("before")) {
if (i.undo.push(r.buildReplaceUndo(x)), m = w.getLastChild(), !u.containsNode(document.querySelector("[cid='" + w.getLastChild().cid + "']"), !0) && o.isType(n.get("before"), a.list)) {
var _ = n.get("before");
_.getLastChild().getLastChild().set("tail", _.get("tail"), _.getLastChild().get("tail")), v(_, 2), _.set("tail", n.getLastBrother().get("tail")), v(n.getLastBrother()), _.getLastChild().appendTillEnd(n)
}! function() {
var t, e;
if (w.get("after")) {
(t = w.get("parent").clone()).unset("start"), w.getLastChild().set("tail", w.get("tail")), v(w);
var n = w.get("after");
v(n),
function(t) {
if (t) {
var e = g(t),
n = e[0].get("userIndent");
n && !/^\s*1\./.exec(n) && e.forEach(function(t) {
t.unset("userIndent")
})
}
}(n), t.appendTillEnd(n), w.append(t)
}
e = (t = w.get("parent")).get("parent"), t.get("after") && (v(t), w.set("tail", e.get("tail") || w.get("tail")), t.getLastChild().appendTillEnd(t.get("after"))), e.insert(w), 0 == t.get("children").length && t.remove(), e.set("tail", e.getLastChild().get("tail")), v(e.getLastChild()), F.oldCid = e.cid, F.html = s.toHTML(g(e, w)), l.push(F)
}(), e = m, i.redo.push(r.buildReplaceUndo(x))
} else i.undo.push(r.buildReplaceUndo(k)), m = w.getLastChild(),
function() {
var t, e;
e = (t = w.get("parent")).get("parent"), w.detach(), 0 == t.get("children").length && t.remove();
for (var n, i = w.getLastChild(); i;) n = i.get("before"), e.append(i, !0), i = n;
F.oldCid = e.cid, F.html = e.toHTML(), l.push(F)
}(), e = m, i.redo.push(r.buildReplaceUndo(k))
}
return m = d(e, f), l && m && u.containsNode(document.querySelector("[cid='" + m.cid + "']"), !0) && b(t, m, n, i, u, l), l
};
e.moreIndent = function(t) {
var e = t.selection.getRangy();
if (!e || File.isLocked) return !0;
if (o.isType(isInputComponent(document.activeElement))) {
var n = $(document.activeElement).closest(".CodeMirror")[0];
return n && n.CodeMirror.execCommand("indentMore"), !0
}
var i = t.getMarkElem(e.startContainer),
s = l(t.findNodeByElem(i)),
u = t.getMarkElem(e.endContainer),
c = l(t.findNodeByElem(u), s);
t.brush.pause(), s && !c && (c = s.closest(a.list).getLastChild().getFirstChild());
var f = !1;
if (s && c) {
var h = t.selection.buildUndo(),
d = r.makeEmptyCommand(h);
return (f = m(t, s, c, d, e)) && (d.redo.push(h), f.remove.forEach(function(e) {
t.findElemById(e).remove()
}), f.replace.forEach(function(e) {
e.isDeleted() || t.findElemById(e.cid).replaceWith(e.toHTML())
}), t.undo.exeCommand(h), t.undo.register(d)), t.refresh(), t.selection.scrollAdjust(), t.brush.resume(), f || s !== c
}
return t.brush.resume(), !1
}, e.lessIndent = function(t) {
var e = t.selection.getRangy();
if (!e || File.isLocked) return !0;
if (isInputComponent(document.activeElement)) {
var n = $(e.startContainer).closest(".CodeMirror")[0];
return n && n.CodeMirror.execCommand("indentLess"), !0
}
e = t.selection.deRange(e);
var i, s, u = t.getMarkElem(e.startContainer),
c = f(t.findNodeByElem(u)),
l = t.getMarkElem(e.endContainer),
d = f(t.findNodeByElem(l));
c && !d && (d = c.closest(a.list).getLastChild().getFirstChild());
function m() {
t.brush.pause(), i = t.selection.buildUndo(), s = r.makeEmptyCommand(i)
}
var v = !1;
if (c && d && (m(), v = b(t, c, d, s, e)), v || (c = h(t.findNodeByElem(u)), d = h(t.findNodeByElem(l)), o.isType(c, a.paragraph, a.def_footnote, a.def_link, a.heading) && d && (m(), v = p(t, c, d, s, e))), v) {
for (var g = 0; g < v.length; g++) {
t.findElemById(v[g].oldCid).replaceWith(v[g].html);
var y = t.findElemById(v[g].oldCid)[0];
y && (y.parentElement ? t.fences.refreshEditor(!1, !1, y.parentElement) : (t.fences.refreshEditor(!1, !1, y), y.nextElementSibling && t.fences.refreshEditor(!1, !1, y.nextElementSibling)))
}
t.undo.exeCommand(i), s.redo.push(i), t.mathBlock.renderAll(), t.undo.register(s)
}
return t.brush.resume(), v && c != d
}
}), $__System.registerDynamic("42", ["e", "12", "13", "1b", "35", "36", "26"], !0, function(t, e, n) {
"use strict";
this || self;
var i = t("e"),
r = t("12"),
o = t("13"),
a = o.TYPE,
s = o.Node,
u = t("1b"),
c = (t("35"), t("36")),
l = t("26").map,
f = 99,
h = 20,
d = r.Model.extend({
initialize: function(t) {
var e = this;
this.editor = t, this.TableEdit = d;
i(t.sessionStr).on("click", ".md-align-gp button", function(e) {
var n, r = /md-align-\S+/g.exec(this.className)[0].substring(9),
o = i(this).closest(".md-align-gp").attr("data-col"),
a = i(this).closest('[mdtype="table"]'),
s = t.findNodeByElem(a);
void 0 != o && (o -= 0, n = s.get("align")[o] == r ? null : r, s.attr("align_idx", [o, n], t), e.stopPropagation(), t.lastCursor && t.undo.exeCommand(t.lastCursor))
}).on("click", ".md-delete-table", function() {
t.tableEdit.deleteTable(i(this).closest("[mdtype='table']"))
}).on("click", ".md-resize-table", function(n) {
i(this).next(".md-table-resize-popover").length ? (i(".md-table-resize-popover").remove(), t.lastCursor && t.undo.exeCommand(t.lastCursor)) : function(n) {
var r, o = '<div class="popover bottom md-table-resize-popover" style="display:block; bottom:auto; top:20px; margin-left:-10px;" contenteditable="false">\t\t\t\t<div class="arrow" style="left:20px;"></div>\t\t\t\t<div class="md-grid-board-wrap md-reset code-tooltip-content">\t\t\t\t\t<table role="grid" class="md-grid-board md-reset">\t\t\t\t\t\t<tbody>\t\t\t\t\t\t\t<tr class="md-reset" row="1">\t\t\t\t\t\t\t\t<td class="md-reset" col="1"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="2"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="3"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="4"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="5"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="6"><a href="#"></a></td>\t\t\t\t\t\t\t</tr>\t\t\t\t\t\t\t<tr class="md-reset" row="2">\t\t\t\t\t\t\t\t<td class="md-reset" col="1"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="2"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="3"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="4"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="5"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="6"><a href="#"></a></td>\t\t\t\t\t\t\t</tr>\t\t\t\t\t\t\t<tr class="md-reset" row="3">\t\t\t\t\t\t\t\t<td class="md-reset" col="1"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="2"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="3"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="4"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="5"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="6"><a href="#"></a></td>\t\t\t\t\t\t\t</tr>\t\t\t\t\t\t\t<tr class="md-reset" row="4">\t\t\t\t\t\t\t\t<td class="md-reset" col="1"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="2"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="3"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="4"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="5"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="6"><a href="#"></a></td>\t\t\t\t\t\t\t</tr>\t\t\t\t\t\t\t<tr class="md-reset" row="5">\t\t\t\t\t\t\t\t<td class="md-reset" col="1"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="2"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="3"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="4"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="5"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="6"><a href="#"></a></td>\t\t\t\t\t\t\t</tr>\t\t\t\t\t\t\t<tr class="md-reset" row="6">\t\t\t\t\t\t\t\t<td class="md-reset" col="1"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="2"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="3"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="4"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="5"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="6"><a href="#"></a></td>\t\t\t\t\t\t\t</tr>\t\t\t\t\t\t\t<tr class="md-reset" row="7">\t\t\t\t\t\t\t\t<td class="md-reset" col="1"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="2"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="3"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="4"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="5"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="6"><a href="#"></a></td>\t\t\t\t\t\t\t</tr>\t\t\t\t\t\t\t<tr class="md-reset" row="8">\t\t\t\t\t\t\t\t<td class="md-reset" col="1"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="2"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="3"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="4"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="5"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="6"><a href="#"></a></td>\t\t\t\t\t\t\t</tr>\t\t\t\t\t\t\t<tr class="md-reset" row="9">\t\t\t\t\t\t\t\t<td class="md-reset" col="1"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="2"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="3"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="4"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="5"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="6"><a href="#"></a></td>\t\t\t\t\t\t\t</tr>\t\t\t\t\t\t\t<tr class="md-reset" row="10">\t\t\t\t\t\t\t\t<td class="md-reset" col="1"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="2"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="3"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="4"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="5"><a href="#"></a></td>\t\t\t\t\t\t\t\t<td class="md-reset" col="6"><a href="#"></a></td>\t\t\t\t\t\t\t</tr>\t\t\t\t\t\t</tbody>\t\t\t\t\t</table>\t\t\t\t\t<div class="popover-title">\t\t\t\t\t\t<input id="md-grid-width" type="text" max="20" size="2" min="1" value="0" /> x <input id="md-grid-height" maxlength="2" size="2" min="1" value="0"/><button id="md-resize-grid" class="btn btn-primary btn-xs">' + i.localize.getString("OK") + "</button>\t\t\t\t\t</div>\t\t\t\t</div>\t\t\t</div>",
a = n.closest('[mdtype="table"]'),
s = t.findNodeByElem(a),
u = s.get("align").length,
c = a.children("table").children("tbody").children("tr").length + 1;
function m() {
i(this).val().trim().length || i(this).val(2);
var t = r.find("#md-grid-width").val(),
e = r.find("#md-grid-height").val();
r.find("a.md-active").removeClass("md-active"), r.find("tr:nth-child(-n+" + e + ")>td:nth-child(-n+" + t + ")>a").addClass("md-active")
}
i(".md-table-resize-popover").remove(), n.append(o), (r = n.find(".md-table-resize-popover")).find("tr:nth-child(-n+" + c + ")>td:nth-child(-n+" + u + ")").addClass("md-grid-ext"), r.find("#md-grid-width, #md-grid-height").off("keydown keypress").on("keypress", function(t) {
if (!/\d/.exec(String.fromCharCode(t.which))) return !1
}).on("keydown", function(t) {
var e = t.keyCode || t.which;
return "Up" === l[e] ? (this.value = this.value - 0 + 1, this.value = Math.min("md-grid-height" == this.getAttribute("id") ? f : h, this.value), !1) : "Down" === l[e] ? (this.value = this.value - 1, this.value = Math.max(2, this.value), !1) : void 0
}), r.find("#md-grid-width").val(u).off("blur focus").blur(m).focus(function() {
r.find("#md-resize-grid").show()
}).blur(function() {
this.value > h ? this.value = h : this.value < 2 && (this.value = 2)
}).on("keydown", function(t) {
var e = t.keyCode || t.which;
if ("Tab" === l[e] && !t.ctrlKey) return r.find("#md-grid-height").focus(), !1;
"Enter" === l[e] && r.find("#md-grid-height").focus()
}), r.find("#md-grid-height").val(c).off("blur focus").blur(m).focus(function() {
r.find("#md-resize-grid").show()
}).blur(function() {
this.value > f ? this.value = f : this.value < 2 && (this.value = 2)
}).on("keydown", function(t) {
var e = t.keyCode || t.which;
if ("Tab" === l[e] && !t.ctrlKey) return r.find("#md-grid-width").focus(), !1;
"Enter" === l[e] && r.find("#md-resize-grid").click()
}), r.find(".md-grid-board a").off("mouseenter mouseleave click").hover(function() {
var t = i(this).closest("td"),
e = t.prevAll().length + 1,
n = t.closest("tr").prevAll().length + 1;
n = 1 === n ? 2 : n, r.find("a.md-active").removeClass("md-active"), r.find("tr:nth-child(-n+" + n + ")>td:nth-child(-n+" + e + ")>a").addClass("md-active"), r.find("#md-grid-width").val(e), r.find("#md-grid-height").val(n), r.find("#md-resize-grid").hide()
}).click(function(t) {
t.stopPropagation(), t.preventDefault(), r.find("#md-resize-grid").click()
}), r.find(".md-grid-board").off("mouseleave").on("mouseleave", function(t) {
i(this).find("a").removeClass("md-active"), i("#md-grid-width").val(u), i("#md-grid-height").val(c)
}), r.find("#md-resize-grid").off("click").click(function(n) {
var i, o = (r.find("#md-grid-width").val() || 0) - 0,
u = (r.find("#md-grid-height").val() || 0) - 0,
c = s.getFirstChild(),
l = s.get("align").length,
f = 0,
h = t.undo.UndoManager.makeEmptyCommand();
for (h.undo.push(t.undo.buildReplaceUndo(s)); c || f < u;) f < u ? (c ? d.resizeRow(c, o, s) : c = d.newEmptyRowAfter(i, o, s), c = (i = c).get("after")) : c && (i = c, c = c.get("after"), i.delete()), f++;
o < l ? s.set("align", s.get("align").slice(0, o)) : s.set("align", s.get("align").concat([].repeat(null, o - l))), a.replaceWith(s.toHTML()), t.lastCursor ? t.undo.exeCommand(t.lastCursor) : window.getSelection().removeAllRanges(), e.showTableEdit(s), h.redo.push(t.undo.buildReplaceUndo(s)), t.undo.register(h)
})
}(i(this).parent()), n.stopPropagation()
}).on("click", ".ty-table-edit", function(e) {
i(e.target).closest(".md-table-resize-popover").length || (i(".md-table-resize-popover").remove(), t.lastCursor && i(".md-table-resize-popover").length && t.undo.exeCommand(t.lastCursor)), e.stopPropagation()
}).on("mousedown", ".ty-table-edit button", function() {
File.editor.lastCursor = File.editor.selection.buildUndo() || File.editor.lastCursor
}).on("refocus", "[mdtype='table']", function() {
i(document.activeElement).closest("[md-inline='image']").length || e.showTableEdit(i(this))
}).on("mouseup", ".ty-table-edit", function(t) {
t.stopPropagation()
}).on("click", ".md-table-more", function() {
i(File.editor.sessionStr).trigger("cursorChange"), File.editor.lastCursor = File.editor.selection.buildUndo(), File.editor.contextMenu.updateTableVisiblity(), File.editor.contextMenu.showExtMenu("#table-menu", i(this)), this.focus()
}),
function() {
var e = i("#table-insert-dialog");
e.find("#table-insert-col, #table-insert-row").off("keydown keypress keyup change").on("keypress", function(t) {
if (!/\d/.exec(String.fromCharCode(t.which))) return !1
}).on("keydown", function(t) {
var n = t.keyCode || t.which;
return "Up" === l[n] ? (this.value = this.value - 0 + 1, this.value = Math.min("table-insert-row" == this.getAttribute("id") ? f : h, this.value), !1) : "Down" === l[n] ? (this.value = this.value - 1, this.value = Math.max(2, this.value), !1) : void("ESC" === l[n] && e.modal("hide"))
}).on("keyup", function() {
i(this).trigger("change")
}).on("change", function() {
File.isMac && bridge.callHandler("touchBar.updateInsertTableTouchBar")
}), e.find("#table-insert-col").blur(function() {
0 === i(this).val().trim().length && i(this).val(2), this.value > h ? this.value = h : this.value < 1 && (this.value = 1)
}).on("keydown", function(t) {
var n = t.keyCode || t.which;
if ("Tab" === l[n] && !event.ctrlKey || "Enter" === l[n]) return e.find("#table-insert-row").focus(), !1
}), e.find("#table-insert-row").blur(function() {
0 === i(this).val().trim().length && i(this).val(2), this.value > f ? this.value = f : this.value < 2 && (this.value = 2)
}).on("keydown", function(t) {
var n = t.keyCode || t.which;
if ("Tab" === l[n] && !event.ctrlKey) return e.find("#table-insert-col").focus(), !1;
"Enter" === l[n] && e.find(".btn-primary").trigger("click")
}), e.find(".btn-primary").click(function() {
e.modal("hide"), t.restoreLastCursor(), i(File.editor.sessionStr).trigger("cursorChange");
var n = new s({
type: s.TYPE.table,
in: t.nodeMap
});
d.valify(n, e.find("#table-insert-col").val(), e.find("#table-insert-row").val()), t.stylize.insertBlock(s.TYPE.table, n)
}), e.on("hidden.bs.modal", function() {
File.isMac && setTimeout(function() {
c.refreshBlockMenu(null, !0)
}, 100)
})
}();
var n, r, o, a, u, v, p, g, b, y, w, F, k = 0;
setTimeout(function() {
a = i("content").offset().top
}, 200),
function() {
var e = i("#typora-table-row-tracker"),
a = i("#typora-table-col-tracker");
i(t.sessionStr).on("mouseenter click", "th, td", function(t) {
if (0 != (o = i(this)).children("[mdtype]").length) {
r = o.closest("tr"), n = r.closest("[mdtype='table']"), b = o.prevAll().length;
var s = r.offset(),
u = o.offset(),
c = n.offset();
e.show().offset(s).find(".typora-table-drag-area").height(r[0].offsetHeight + 1), u.top = c.top;
var l = n.width();
a.show().offset(u).find(".typora-table-drag-area").width(Math.min(o[0].offsetWidth + 1, l - (c.left - u.left) - 1))
}
}), i(document).on("mousedown", "#typora-table-row-tracker", x).on("mousedown", "#typora-table-col-tracker", _).on("mousemove", $).on("mouseup", T)
}();
function x(t) {
if (!File.isLocked) {
e.editor.focusCid = null, u = !0, window.getSelection().removeAllRanges(), C();
var o = r.children();
i("#typora-table-row-tracker .typora-table-data-area").html(function() {
var t = r.height();
return r.closest("thead").length ? "<table class='md-table' style='margin:0 ; padding:0; margin-left:0; height:" + t + "px;'><thead>" + r[0].outerHTML + "</thead></table>" : "<table class='md-table' style='margin:0 ; padding:0; margin-left:0; height:" + t + "px;'><tbody>" + r[0].outerHTML + "</tbody></table>"
}()).find("td, th").each(function(t) {
this.style.width = o[t].offsetWidth + "px"
}), w = t.offsetX, F = t.offsetY, g = p = r.closest("thead").length ? 0 : r.prevAll().length + 1, y = [];
var a = n.offset().top;
return r.closest("table").find("[mdtype='table_row']").each(function() {
y.push(this.offsetTop + a)
}), y.push(y.last() + n.find("tbody tr:last-child")[0].offsetHeight), !1
}
}
function _(t) {
if (!File.isLocked) {
e.editor.focusCid = null, v = !0, window.getSelection().removeAllRanges();
var r = A(g = p = b),
a = i(r[0]).offset();
i("#typora-table-col-tracker .typora-table-data-area").offset(a).html(function(t) {
var e = o[0].offsetWidth;
return "<table class='md-table' style='margin:0 ; padding:0; height:" + n.height() + "px; width:" + e + "px;'><thead><tr>" + t[0].outerHTML + "</tr></thead><tbody>" + t.toArray().map(function(t, e) {
return e ? "<tr style='width:" + t.offsetWidth + "px; height:" + t.offsetHeight + "px;'>" + t.outerHTML + "</tr>" : ""
}).join("") + "</tbody></table>"
}(r)), C(!0), w = t.offsetX, F = t.offsetY, k = i("content").offset().left, y = [];
var s = n.offset().left;
n.find("thead:last-of-type th").each(function() {
y.push(this.offsetLeft + s)
}), y.push(y.last() + n.find("thead [mdtype='table_row'] th:last-child")[0].offsetWidth)
}
}
function $(t) {
u ? function(t) {
if (!u) return;
i("#typora-table-row-tracker").css("top", t.clientY - F - a + document.querySelector("content").scrollTop);
var e;
(e = y.findIndex(function(e, n) {
return y[n] > t.clientY
})) > 0 && (e -= 1); - 1 == e && (e = y.length - 1);
p != e && function(t) {
var e;
if (t >= y.length - 1)(e = n.find("tbody tr:last-child").offset()).top += n.find("tbody tr:last-child")[0].offsetHeight;
else {
var o = i(n.find("tr[mdtype]")[t]);
if (o[0] == r[0] || !o.length) return void E();
e = o.offset()
}
i("#typora-table-row-insert-marker").width(n[0].offsetWidth).show().offset(e)
}(p = e)
}(t) : v && function(t) {
if (!v) return;
i("#typora-table-col-tracker").css("left", t.clientX - w - k);
var e, r = n.scrollLeft();
(e = y.findIndex(function(e, n) {
return y[n] > t.clientX + r
})) > 0 && (e -= 1); - 1 == e && (e = y.length - 1);
p != e && function(t) {
var e;
if (t >= y.length - 1)(e = n.offset()).left += n[0].offsetWidth;
else {
if (g == t || g + 1 == t) return void E();
e = A(t).offset()
}
n.find(".ty-table-edit").remove(), i("#typora-table-col-insert-marker").height(n[0].offsetHeight).show().offset(e)
}(p = e)
}(t)
}
function E() {
i(".typora-table-insert-marker").hide()
}
function C(t) {
i("#write").addClass("no-selection"), File.preventScroll = !0, t ? (A(b).addClass("typora-on-moving"), i("#typora-table-row-tracker").hide()) : (r.addClass("typora-on-moving"), i("#typora-table-col-tracker").hide())
}
function A(t) {
return n.find("[mdtype='table_row']>*:nth-child(" + (t + 1) + ")")
}
function S(t) {
File.preventScroll = !1, i("#write").removeClass("no-selection"), i("content").removeClass("prevent-scroll"), i(".typora-on-moving").removeClass("typora-on-moving"), E()
}
function T(t) {
u ? function(t) {
if (!u) return;
u = !1, S(), m(), e.moveTableRow(g, p, n), M()
}() : v && function(t) {
if (!v) return;
v = !1, S(), m(), e.moveTableCol(g, p, n), e.showAlignCol(n), M()
}()
}
function M() {
u = !1, v = !1, n = null, r = null, o = null, g = null, p = null
}
},
moveTableRow: function(t, e, n) {
if (t != e && t + 1 != e) {
n = n || this.editor.getMarkElem().closest("[mdtype='table']");
var i = this.editor,
r = i.selection.buildUndo(),
o = u.makeEmptyCommand(r),
a = i.findNodeByElem(n),
c = a.getNthChild(t);
o.undo.push(u.buildReplaceUndo(a)), s.tryResetTable(a), t < --e && e--, c.detach(), e >= 0 ? a.getNthChild(e).insert(c) : a.getFirstChild().insert(c, !0), o.redo.push(u.buildReplaceUndo(a)), n.replaceWith(a.toHTML()), r && (i.undo.exeCommand(r), o.redo.push(i.selection.buildUndo())), i.undo.register(o), this.showTableEdit(a)
}
},
moveTableCol: function(t, e, n) {
n = n || this.editor.getMarkElem().closest(".md-table");
var i = this.editor,
r = i.selection.buildUndo(),
o = u.makeEmptyCommand(r),
a = i.findNodeByElem(n),
c = a.getFirstChild();
if (t != e && t + 1 != e) {
for (o.undo.push(u.buildReplaceUndo(a)), s.tryResetTable(a), t < --e && e--; c;) {
var l = c.getNthChild(t);
l.detach(), e >= 0 ? c.getNthChild(e).insert(l) : c.getFirstChild().insert(l, !0), c = c.get("after")
}
var f = a.get("align").splice(t, 1)[0];
a.get("align").splice(e + 1, 0, f), a.get("alignText") && (f = a.get("alignText").splice(t, 1)[0], a.get("alignText").splice(e + 1, 0, f)), o.redo.push(u.buildReplaceUndo(a)), n.replaceWith(a.toHTML()), r && (i.undo.exeCommand(r), o.redo.push(i.selection.buildUndo())), i.undo.register(o), this.showTableEdit(a)
} else this.showTableEdit(a)
},
moveRowUpOrDown: function(t) {
var e = this.editor.selection.getRangy();
if (e && !File.isLocked) {
var n = i(e.commonAncestorContainer).closest("[mdtype='table_row']").closest("tr");
if (0 != n.length) {
var r = n.closest("thead").length ? 0 : n.prevAll().length + 1;
t && 0 == r || !t && r && 0 == n.nextAll().length || this.moveTableRow(r, t ? r - 1 : r + 2, n.closest("[mdtype='table']"))
}
}
},
moveColLeftOrRight: function(t) {
var e = this.editor.selection.getRangy();
if (e && !File.isLocked) {
var n = i(e.commonAncestorContainer).closest("[mdtype='table_cell']").closest("td, th");
if (0 != n.length) {
var r = n.prevAll().length;
t && 0 == r || !t && 0 == n.nextAll().length || this.moveTableCol(r, t ? r - 1 : r + 2, n.closest("[mdtype='table']"))
}
}
},
insertTable: function() {
File.isLocked || document.body.classList.contains("modal-open") || (this.editor.lastCursor = this.editor.selection.buildUndo(), i("#table-insert-dialog").modal({
keyboard: !0
}), File.isMac && bridge.callHandler("touchBar.showInsertTableTouchBar"), setTimeout(function() {
i("#table-insert-col").focus()
}, 500))
},
resizeTableEdit: function(t) {
var e = t.parent().children(".ty-table-edit"),
n = t.parent()[0].getBoundingClientRect(),
i = e.length && e[0].getBoundingClientRect();
e.length && (e[0].style.marginTop = "-" + i.height + "px", e[0].style.width = n.width + 10 + "px")
},
showTableEdit: function(t) {
var e = t,
n = t;
t.jquery ? e = editor.findNodeByElem(t) : n = editor.findElemById(e.id), n.children(".md-table").length && (n = n.children(".md-table"));
function r(t) {
var e = [],
n = i.localize.getString("Align Left"),
r = i.localize.getString("Align Center"),
o = i.localize.getString("Align Right"),
a = i.localize.getString("Resize Table"),
s = i.localize.getString("Delete Table"),
u = i.localize.getString("More Actions"),
c = '<span class="btn-group btn-group-xs md-align-gp"><button type="button" class="btn btn-default md-align-left" ty-hint="' + n + '" aria-label="' + n + '"><span class="ty-icon ty-left-alignment"></span></button><button type="button" class="btn btn-default md-align-center" ty-hint="' + r + '" aria-label="' + r + '"><span class="ty-icon ty-justify-align"></span></button><button type="button" class="btn btn-default md-align-right" ty-hint="' + o + '" aria-label="' + o + '"><span class="ty-icon ty-right-alignment"></span></button></span>';
return e.push("<div class='ty-table-edit md-table-edit md-tooltip-remove' contenteditable='false'>"), e.push('<span class="md-th-button btn-group-xs md-resize-table-th"><button type="button" class="btn btn-default md-resize-table" ty-hint="' + a + '" aria-label="' + a + '"><span class="ty-icon ty-menu"></span></button></span>'), e.push(c), e.push('<span class="md-th-button right-th-button btn-group-xs"><button type="button" class="btn btn-default md-delete-table" ty-hint="' + s + '" aria-label="' + s + '"><span class="ty-icon ty-delete"></span></button></span>'), e.push('<span class="md-th-button right-th-button"><button type="button" class="btn btn-default md-table-more" aria-label="' + u + '"><span class="md-table-more-label">More Actions</span><span class="ty-icon ty-dots-v" style="margin-left:8px;"></span></button></span>'), e.push("</div>"), e.join("")
}
n.prev(".ty-table-edit").length || (i(".ty-table-edit").remove(), r(), n.before(r())), this.resizeTableEdit(n), this.showAlignCol(n)
},
showAlignCol: function(t) {
var e = this.editor.selection.getRangy(),
n = e && i(e.commonAncestorContainer).closest("td, th");
if (n && n.length) {
File.isMac || i(".md-table-more").show();
var r = this.editor.findNodeByElem(t.closest("[cid]")).get("align"),
o = n.prevAll().length;
! function(e, n) {
var i = t.closest("figure").find(".md-align-gp").show();
i.find("button").removeClass("active"), i.attr("data-col", e), "left" !== n && "right" !== n && "center" !== n || i.find(".md-align-" + n).addClass("active")
}(o, r[o])
} else i(".md-align-gp, .md-table-more").hide()
},
keydownHandler: function(t) {
var e = t.keyCode || t.which;
if ("Tab" === l[e] && !t.ctrlKey) return this.moveToNextCell(!0, t.shiftKey), !1;
if ("Enter" === l[e]) {
var n = this.editor.UserOp.backspaceHandler(this.editor, null, "delSelection");
if (t.shiftKey) this.editor.UserOp.pasteHandler(this.editor, "<br />", !0);
else if (File.isMacOrMacNode ? t.metaKey : t.ctrlKey) {
var i = this.addRow(!1, this.editor.undo.commandStack.indexOf(n) > -1);
u.append(n, i)
} else this.moveToBelowCell(u.isEmptyCommand(n));
return !1
}
return File.isMac && s.isType(l[e], "Left", "Right", "Up", "Down") && t.metaKey && t.ctrlKey ? ("Up" == l[e] ? this.moveRowUpOrDown(!0) : "Down" == l[e] ? this.moveRowUpOrDown(!1) : "Left" == l[e] ? this.moveColLeftOrRight(!0) : "Right" == l[e] && this.moveColLeftOrRight(!1), !1) : File.isNode && s.isType(l[e], "Left", "Right", "Up", "Down") && t.shiftKey && t.ctrlKey ? ("Up" == l[e] ? this.moveRowUpOrDown(!0) : "Down" == l[e] ? this.moveRowUpOrDown(!1) : "Left" == l[e] ? this.moveColLeftOrRight(!0) : "Right" == l[e] && this.moveColLeftOrRight(!1), !1) : (File.isMacOrMacNode ? t.metaKey : t.ctrlKey) && ("Left" === l[e] || "Right" === l[e]) ? (this.moveToNextCell(t.shiftKey, "Left" === l[e], !0), !1) : void 0
},
moveToNextCell: function(t, e, n) {
try {
var i, r = this.editor.getMarkElem(window.getSelection().anchorNode).closest("[mdtype='table_cell']").parent(),
o = (e ? r.prev() : r.next()).children("[mdtype='table_cell']"),
a = this.editor.selection,
s = this.editor.selection.getRangy();
if (n) {
var u = s.getBookmark(r[0]);
if (e && u.start > 0) return t ? a.extendToLineEdge(!1, r[0]) : a.jumpIntoElemBegin(r), this.editor.refocus(), !0;
if (!e && u.end < r.text().length) return t ? a.extendToLineEdge(!0, r[0]) : a.jumpIntoElemEnd(r), this.editor.refocus(), !0
}
if (!o.length && r.length && (i = r.parent(), (o = (e ? i.prev().children(":last") : i.next().children(":first")).children("[mdtype='table_cell']")).length || (e && "TD" === r[0].tagName ? o = i.closest("table").find("thead>tr>th:last>[mdtype='table_cell']") : e || "TH" !== r[0].tagName || (o = i.closest("table").find("tbody>tr:first>td:first>[mdtype='table_cell']")))), o.focus(), o.length) {
if (t)
if (n) {
var c = this.editor.selection.extendToLineEdge(!e, o[0], !0);
e ? s.setStart(c.startContainer, c.startOffset) : s.setEnd(c.endContainer, c.endOffset), this.editor.selection.setRange(s)
} else this.editor.selection.selectAllElem(o);
else e ? this.editor.selection.jumpIntoElemEnd(o) : this.editor.selection.jumpIntoElemBegin(o);
return this.editor.refocus(), !0
}
} catch (t) {}
},
moveToBelowCell: function(t, e, n) {
try {
var i = this.editor.getMarkElem(window.getSelection().anchorNode).closest("[mdtype='table_cell']"),
r = this.editor.findNodeByElem(i),
o = d.getNextCellInColumn(r, e),
a = o && this.editor.findElemById(o.cid);
o ? a.length && (t ? this.editor.selection.selectAllElem(a) : e ? this.editor.selection.jumpIntoElemEnd(a) : this.editor.selection.jumpIntoElemBegin(a)) : this.editor.selection.moveUpOrDown()
} catch (t) {}
},
getSibling: function(t, e, n) {
return d.getSibling(t, e, n)
},
unfocusAll: function(t) {
t ? i(".ty-table-edit").fadeOut(function() {
i(".ty-table-edit").remove()
}) : i(".ty-table-edit").remove(), i(".typora-table-tracker").hide()
},
deleteRow: function() {
d.deleteRow(this.editor)
},
addRow: function(t, e) {
return d.addRow(this.editor, t, e)
},
deleteCol: function() {
d.deleteCol(this.editor)
},
addCol: function(t) {
d.addCol(this.editor, t)
},
copyTable: function() {
var t = this.editor.getMarkElem(window.getSelection().anchorNode).closest(".md-table-fig");
if (t.length) {
(t = t.clone()).find(".md-tooltip-remove").remove(), t.find("td, th").attr("style", function(t, e) {
return "border: 1px solid rgb(204, 204, 204);min-height:1ch;min-width:4ch;" + (this.style.textAlign ? "text-align:" + this.style.textAlign + ";" : "")
});
var e = t.html(),
n = this.editor.UserOp.prepMarkHtml(t[0].outerHTML, editor),
i = this.editor.UserOp.getMarkdownSourceFrom(n.html());
this.editor.UserOp.setClipboard(e, "", i, !0)
}
},
deleteTable: function(t, e) {
m(), i("#ty-tooltip").hide(), t = t || editor.getMarkElem(window.getSelection().anchorNode).closest("[mdtype='table']");
var n = this.editor.getNode(t.attr("cid")),
r = editor.undo.UndoManager.makeEmptyCommand(this.editor.selection.buildUndo()),
o = n.get("after"),
c = n.get("before");
return o || c ? (u.addUndoForRemove(r, n), n.remove(), t.remove()) : (r.undo.push(u.buildReplaceUndo(n)), n.set("type", a.paragraph), n.set("text", ""), n.clearChildren(), s.normalizeNode(n), t.replaceWith(n.toHTML()), r.redo.push(u.buildReplaceUndo(n))), editor.focusCid = null, o ? this.editor.selection.jumpIntoElemBegin(this.editor.findElemById(o.id)) : this.editor.selection.jumpIntoElemEnd(this.editor.findElemById((c || n).id)), this.editor.lastCursor = null, r.redo.push(this.editor.selection.buildUndo()), !e && this.editor.undo.register(r), r
},
isTableEmpty: function(t) {
function e(t) {
for (var e = 0, n = t.get("children").length; e < n; e++)
if (t.get("children").at(e).get("text")) return !1;
return !0
}
for (var n = 0, i = t.get("children").length; n < i; n++)
if (!e(t.get("children").at(n))) return !1;
return !0
},
reformatTable: function(t) {
if ((t = t || editor.getMarkElem(window.getSelection().anchorNode).closest("[mdtype='table']")).length) {
var e = this.editor.getNode(t.attr("cid")),
n = editor.undo.UndoManager.makeEmptyCommand(this.editor.selection.buildUndo());
n.undo.push(u.buildReplaceUndo(e)), e.set("userText", void 0), e.set("style", void 0), e.set("alignText", void 0);
for (var i = e.getFirstChild(); i;) {
for (var r = i.getFirstChild(); r;) r.set("marginRight", void 0), r.set("marginLeft", void 0), r = r.get("after");
i = i.get("after")
}
n.redo.push(u.buildReplaceUndo(e)), n.redo.push(this.editor.selection.buildUndo()), this.editor.undo.register(n)
}
}
});
d.deleteRow = function(t) {
i(".md-tooltip-hide").hide();
var e, n, r, o, a, u = t.getMarkElem(window.getSelection().anchorNode).closest("td"),
c = t.getMarkElem(window.getSelection().anchorNode).closest("tr[mdtype='table_row']"),
l = c.prevAll().length;
if (c.siblings().length) {
for (n = t.findNodeByElem(c).get("parent"), (e = t.undo.UndoManager.makeEmptyCommand()).undo.push(t.selection.buildUndo()), e.undo.push(t.undo.UndoManager.buildReplaceUndo(n)), s.tryResetTable(n), o = n.getNthChild(1), r = l; r;) o = o.get("after"), r--;
o.remove(), e.redo.push(t.undo.UndoManager.buildReplaceUndo(n)), t.findElemById(n.id).replaceWith(n.toHTML()), l ? l-- : l++, a = document.createRange();
try {
a.setStart(t.findElemById(n.id).find("tbody>tr:nth-child(" + (l + 1) + ")>td:nth-child(" + (u.prevAll().length + 1) + ")>span")[0], 0), window.getSelection().removeAllRanges(), window.getSelection().addRange(a), e.redo.push(t.selection.buildUndo())
} catch (t) {}
t.undo.register(e), t.tableEdit.showTableEdit(n)
}
}, d.addRow = function(t, e, n) {
i(".md-tooltip-hide").hide();
var r, o, a = t.getMarkElem(window.getSelection().anchorNode).closest("tr[mdtype='table_row']"),
u = "TBODY" == (a.parent()[0] || {}).tagName,
c = u ? a.prevAll().length + 1 : 0,
l = t.undo.UndoManager.makeEmptyCommand();
r = t.findNodeByElem(a).get("parent"), l.undo.push(t.selection.buildUndo()), l.undo.push(t.undo.UndoManager.buildReplaceUndo(r)), s.tryResetTable(r), o = r.getNthChild(c), o = d.newEmptyRowAfter(e ? o.get("before") : o, o.get("children").length, r, e ? o : o.get("after")), u ? a[e ? "before" : "after"](o.toHTML()) : t.findElemById(r.id).replaceWith(r.toHTML());
var f = t.findElemById(o.getFirstChild().id);
return t.selection.jumpIntoElemBegin(f), t.selection.scrollAdjust(), l.redo.push(t.undo.UndoManager.buildReplaceUndo(r)), l.redo.push(t.selection.buildUndo()), !n && t.undo.register(l), t.tableEdit.showTableEdit(r), l
}, d.addCol = function(t, e) {
i(".md-tooltip-hide").hide();
var n, r, o = t.getMarkElem(window.getSelection().anchorNode).closest("td, th"),
a = o.find("[cid]").attr("cid"),
u = o.prevAll().length;
if (o.length) {
if (r = t.findNodeByElem(o.children("[cid]")).get("parent").get("parent"), (n = t.undo.UndoManager.makeEmptyCommand()).undo.push(t.selection.buildUndo()), n.undo.push(t.undo.UndoManager.buildReplaceUndo(r)), s.tryResetTable(r), r.get("children").toArray().map(function(t) {
var n = t.getNthChild(u);
n.insert(new s({
type: s.TYPE.table_cell,
text: "",
marginLeft: n.get("marginLeft"),
marginRight: n.get("marginRight")
}), e)
}), r.get("align").splice(e ? u : u + 1, 0, null), r.get("alignText")) {
var c = s.adjustAlignText(r, 0, null);
r.get("align").splice(e ? u : u + 1, 0, c)
}
t.findElemById(r.id).replaceWith(r.toHTML()), o = t.findElemById(a).closest("th, td"), t.selection.jumpIntoElemBegin(e ? o.prev() : o.next()), n.redo.push(t.undo.UndoManager.buildReplaceUndo(r)), t.undo.register(n), t.tableEdit.showTableEdit(r)
}
}, d.deleteCol = function(t) {
i(".md-tooltip-hide").hide();
var e, n, r = t.getMarkElem(window.getSelection().anchorNode).closest("td, th"),
o = r.prevAll().length,
a = r.nextAll().length,
u = r.closest("tr"),
c = "TBODY" == u.parent()[0].tagName ? u.prevAll().length + 1 : 0;
if (o || a) {
n = t.findNodeByElem(r.children("[cid]")).get("parent").get("parent"), (e = t.undo.UndoManager.makeEmptyCommand()).undo.push(t.selection.buildUndo()), e.undo.push(t.undo.UndoManager.buildReplaceUndo(n)), s.tryResetTable(n), n.get("children").toArray().map(function(t) {
t.getNthChild(o).remove()
}), n.get("align").splice(o, 1), n.get("alignText") && n.get("alignText").splice(o, 1), t.findElemById(n.id).replaceWith(n.toHTML());
var l = document.createRange();
try {
c ? l.setStart(t.findElemById(n.id).find("tbody>tr:nth-child(" + c + ")>td:nth-child(" + (o + 1) + ")>span")[0], 0) : l.setStart(t.findElemById(n.id).find("thead>tr[mdtype]>th:nth-child(" + (o + 1) + ")>span")[0], 0), window.getSelection().removeAllRanges(), window.getSelection().addRange(l), e.redo.push(t.selection.buildUndo())
} catch (t) {}
e.redo.push(t.undo.UndoManager.buildReplaceUndo(n)), t.undo.register(e), t.tableEdit.showTableEdit(n)
}
}, d.getSibling = function(t, e, n) {
if (s.isType(t, s.TYPE.table_cell)) {
e = e || "after";
var i = t.get(e),
r = t.get("parent").get(e);
return i || !r || n || (i = "after" == e ? r.getFirstChild() : r.getLastChild()), i
}
}, d.getColumnIndex = function(t) {
return t.get("before") ? 1 + d.getColumnIndex(t.get("before")) : 0
}, d.getCellAt = function(t, e) {
if (s.isType(t, s.TYPE.table_row)) {
for (var n = t.getFirstChild(); e > 0;) e--, n = n.get("after");
return n
}
}, d.getNextCellInColumn = function(t, e, n) {
if (s.isType(t, s.TYPE.table_cell)) {
n = n || d.getColumnIndex(t), e = e || "after";
var i = t.get("parent").get(e);
return i ? d.getCellAt(i, n) : void 0
}
}, d.resizeRow = function(t, e) {
var n, i = t.getFirstChild(),
r = 0,
o = t.get("before"),
a = o ? o.getFirstChild() : null,
u = t.get("parent");
s.tryResetTable(u);
function c(t) {
return t.length > 1 ? t[0] : t
}
for (var l = Math.max(e, t.get("children").length); r < l;) r < e ? (i || (i = new s({
type: s.TYPE.table_cell,
in: t.get("in"),
parent: t,
before: n
}), a && void 0 !== a.get("marginLeft") ? (i.set("marginLeft", c(a.get("marginLeft"))), i.set("marginRight", c(a.get("marginRight")))) : !o && n && void 0 !== n.get("marginLeft") && (i.set("marginLeft", c(n.get("marginLeft"))), i.set("marginRight", c(n.get("marginRight")))), u.get("alignText") && !u.get("alignText")[r] && (u.get("alignText")[r] = s.adjustAlignText(u, 0, null))), i = (n = i).get("after")) : i && (i = (n = i).get("after"), n.delete()), r++, a && (a = a.get("after"))
}, d.newEmptyRowAfter = function(t, e, n, i) {
var r = new s({
type: s.TYPE.table_row,
in: n.get("in"),
parent: n,
before: t,
after: t ? t.get("after") : i || null
});
return d.resizeRow(r, e), r
};
function m() {
i("#typora-table-row-tracker, #typora-table-col-tracker").hide().find(".typora-table-data-area").html("")
}
d.valify = function(t, e, n, i) {
var r;
if (n = n || 2, void 0 === e && (e = (e = t.get("children").at(0)) ? e.get("children").length : 1), i && 1 == t.get("children").length && 1 == e) i(t, t.get("children").at(0).get("children").at(0).get("text"));
else {
t.get("children").map(function(t) {
for (var n = t.get("children").length; n < e; n++) n === t.get("children").length && (r = t.getLastChild()), r = new s({
type: s.TYPE.table_cell,
parent: t,
in: t.get("in"),
before: r,
text: ""
})
});
for (var o = t.get("children").length; o < n; o++) d.newEmptyRowAfter(t.get("children").at(o - 1), e, t);
t.get("align") || t.set("align", new Array(e - 0))
}
}, s.TableEdit = d, n.exports = d
}), $__System.registerDynamic("43", ["12", "14", "13", "42", "19", "18", "e"], !0, function(t, e, n) {
"use strict";
this || self, t("12");
var i = t("14"),
r = t("13"),
o = r.Node,
a = r.TYPE,
s = (r.NodeCollectionUtils, t("42")),
u = t("19"),
c = t("18"),
l = t("e"),
f = ["CONTENT", "HEADER", "FOOTER", "ARTICLE", "SECTION", "DIV", "P", "BLOCKQUOTE", "PRE", "UL", "OL", "TABLE", "HR", "H1", "H2", "H3", "H4", "H5", "H6", "DL", "DT", "DD", "TBODY", "THEAD", "TFOOT", "ASID", "LI", "HTML", "BODY", "IFRAME", "STYLE", "SCRIPT", "FIGURE", "VIDEO", "AUDIO"],
h = ["TITLE", "SELECT", "TEXTAREA", "INPUT", "BUTTON", "SELECT", "SCRIPT", "CANVAS", "META", "PROGRESS", "HEAD", "EMBED", "STYLE", "TEMPLATE", "LINK", "NOSCRIPT", "MENU", "EMBED", "OBJECT"],
d = function(t) {
var e = t.find(".gist-file>.gist-data .blob-wrapper");
if (!e.length) return null;
var n = e.find(".blob-code.blob-code-inner").map(function() {
return this.textContent
}).toArray().join("\n"),
i = /\stype-([^\s]+)/.exec(e.attr("class") || ["", ""])[1];
return "text" == i && (i = ""), {
type: a.fences,
text: n,
lang: i
}
},
m = /^\s*<(iframe|div|p|table|details|figure|img|a|video|audio|script|style|meta|svg|pre|code)(\s|\/?>)/,
v = /(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)/,
p = /\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)/,
g = {
NORMAL: "normal",
HTML: "html"
},
b = function(t, e, n, r) {
n = n || File.editor;
function o(t) {
var e = ["", t, ""],
n = /^(\s*)/.exec(t);
return n && (t = t.substring(n[0].length), e[0] = n[0]), (n = /(\s*)$/.exec(t)) && (t = t.substring(0, t.length - n[0].length), e[2] = n[0]), e[1] = t, e
}
var a, s, u, c;
t.find("img").each(function() {
(a = l(this)).text("![" + (a.attr("alt") || a.attr("title") || "img").replace(/\r?\n/gi, " ") + "](" + (t = a.attr("src") || "", File.isMac && (0 == t.indexOf("file:///") && -1 == t.substring("file:///".length).indexOf("/") ? (t = t.substring("file:///".length), t = i.getAbsoluteURL(r, t)) : 0 == t.indexOf("webkit-fake-url:") && (File.isMacWK || (t = bridge.callSync("images.convertFakeUrl", t)))), -1 == t.indexOf(":/") && n && n.imgEdit && (t = n.imgEdit.resolveImagePath(t)), t) + ")");
var t;
a.replaceWith(a[0].childNodes[0])
}), t.find("strong, b").each(function() {
a = l(this), "normal" !== this.style.fontWeight && ((c = o(a.text()))[1] = c[1] ? "**" + c[1].replace(/([^\\])\*/g, "$1\\*") + "**" : "", a.text(c.join("")))
}), t.find("em, i").each(function() {
a = l(this), (c = o(a.text()))[1] = c[1] ? "*" + c[1].replace(/([^\\*])\*([^*])/g, "$1\\*$2") + "*" : "", a.text(c.join(""))
}), t.find("code, pre, tt").each(function() {
(a = l(this)).text("`" + a.text() + "`")
}), t.find("del, strike").each(function() {
(a = l(this)).text("~~" + a.text() + "~~")
}), t.find("span").each(function() {
a = l(this), 0 != (this.style.fontWeight || "").indexOf("bold") && 700 != this.style.fontWeight && 900 != this.style.fontWeight || ((c = o(a.text()))[1] = c[1] ? "**" + c[1].replace(/([^\\])\*/g, "$1\\*") + "**" : "", a.text(c.join(""))), "italic" == this.style.fontStyle && ((c = o(a.text()))[1] = c[1] ? "*" + c[1].replace(/([^\\*])\*([^*])/g, "$1\\*$2") + "*" : "", a.text(c.join("")))
}), t.find("br").each(function() {
(a = l(this)).replaceWith("")
}), t.find("a[href]:not(:empty)").each(function() {
a = l(this), s = i.getAbsoluteURL(r, a.attr("href")), 0 == (u = a.text()).length ? a.replaceWith("") : s == u ? a.replaceWith("&lt;" + s.replace(/</g, encodeURI("<")).replace(/>/g, encodeURI(">")) + "&gt;") : a.replaceWith("[" + u.replace(/([^\\])]([^(]|$)/, "$1\\]$2").replace(/\r?\n/gi, " ") + "](" + s + ")")
}), File.option.highlight && t.find("mark").each(function() {
(a = l(this)).text("==" + a.text().replace(/([^\\])\=/, "\\=") + "==")
});
var f = (t[0].innerText || t[0].textContent || "").replace(/(\r?\n)|\u00a0/gi, " ");
return e ? f.split(/\uE033/g) : f.replace(/\uE033/g, " ")
};
e.parseInlineHTML = function(t, e, n) {
var i = l(l.parseHTML("<div>" + t + "</div>")[0]);
i.find("head, meta, script, css, .gutter, style, title, template, wbr, menu").remove(), i[0].normalize && i[0].normalize();
for (var r = 0; r < i[0].childNodes.length; r++) {
var o = i[0].childNodes[r];
o.nodeType == o.TEXT_NODE ? /^[\s\r\n]*$/.exec(o.textContent) && (o.remove(), r--) : o.nodeType !== o.ELEMENT_NODE && (o.remove(), r--)
}
return b(i, void 0, e, n)
}, e.convertToPlain = function(t) {
function e(t, e) {
for (var i = (t instanceof Array ? t[0] : t.first()).getLastBrother(!0), r = [], o = 0; o < t.length; o++) r = r.concat(n(i, e)), i = i.get("after");
return r
}
function n(t, i) {
var r, s = [];
function u(t) {
return i ? [t] : [t, ""]
}
switch (t.get("type")) {
case a.fences:
s = t.get("text").replace(/\u200B/g, "").split("\n");
for (var c = 0; c < s.length; c++) s[c] = " " + s[c];
return i || s.push(""), s;
case a.list:
var l = t.get("style"),
f = Number.isNaN(Number.parseInt(t.get("start"))) ? 0 : Number.parseInt(t.get("start")) - 1,
h = t.get("children").length;
if (h) {
var d = t.getFirstChild();
for (c = 0; d;) {
var m = n(d, !0),
v = o.getIndentPrefix(l, c + f, d, void 0, (h + "").length);
m.map(function(t, e) {
m[e] = (e ? " ".repeat(v.length) : v) + m[e], s.push(m[e])
}), c++, d = d.get("after")
}
}
return i || s.push(""), s;
case a.table:
for (var p, g, b, y, w, F, k = [], x = [], _ = 0, $ = t.getFirstChild(); $;) {
for (p = $.getFirstChild(), x[_] = [], g = 0; p;) x[_][g] = p.toMark().trim(), p = p.get("after"), 0 === _ && (k[g] = 4), k[g] = Math.max(x[_][g].length, k[g]), k[g] = Math.min(k[g], 40), g++;
$ = $.get("after"), _++
}
for (_ = 0; _ < x.length; _++) {
for (b = " ", g = 0; g < k.length; g++) y = Math.max(k[g] - x[_][g].length, 0), b += "right" == (w = t.get("align")[g]) ? " ".repeat(y) + x[_][g] : "center" == w ? " ".repeat(F = ~~(y / 2)) + x[_][g] + " ".repeat(y - F) : x[_][g] + " ".repeat(y), b += "\t";
s.push(b.replace(/\s$/, ""))
}
return i || s.push(""), s;
case a.hr:
return u("---");
case a.def_link:
return r = "[" + t.get("ref") + "]: " + t.safeGetStrAttr("href") + (t.safeGetStrAttr("title").length ? '\t"' + t.get("title") + '"' : ""), o.isType(t.get("after"), a.def_link) ? [r] : u(r);
case a.def_footnote:
return r = "[" + t.get("ref") + "]: " + t.get("text"), o.isType(t.get("after"), a.def_footnote) ? [r] : u(r);
default:
return t.get("children") && t.get("children").length > 0 ? e(t.get("children"), i) : u(t.get("text"))
}
}
return e(t).join("\n")
}, e.parseHTML = function(t, e, n, r) {
var y = l(l.parseHTML("<div>" + t + "</div>")[0]),
w = [];
function F(t, n, i) {
t.in = e, t.parent = n, t.before = i.last(), t && t.text && (t.text = t.text.replace(/\u200b/g, "").replace(/\u00a0/g, " "));
var r = new o(t);
return i.push(r), r
}
function k(t, e, i) {
var s = [];
if (e)
for (var u = 0; u < t[0].childNodes.length; u++) E(l(t[0].childNodes[u]), i, s);
else o.isType(i, a.blockquote, a.list_item) ? _(t, i, s) : i.set("text", b(t, void 0, n, r))
}
function x(t, e, n) {
for (var r, o = [], s = null, c = 0; c < t.length; c++) r = t[c], (o = u.reDefLink.exec(r)) ? (s = null, F({
type: a.def_link,
ref: o[1],
href: o[3],
title: o[7]
}, e, n)) : (o = u.reDefFootnote.exec(r)) ? (s = null, F({
type: a.def_footnote,
ref: o[1],
text: (o[3] || "").trim()
}, e, n)) : null == s ? s = F({
type: a.paragraph,
text: i.escapeHead(r)
}, e, n) : r ? s.set("text", s.get("text") + "\n" + i.escapeHead(r)) : s = null
}
function _(t, e, i) {
if (t.find("br").length) x(b(t, !0, n.baseURL), e, i);
else {
if (3 == t[0].nodeType && !t.text().trim().length) return;
if (1 == t[0].nodeType && "BR" == t[0].tagName) return;
x([b(t, void 0, n, r)], e, i)
}
}
var $ = {
center: "center",
left: "left",
right: "right"
};
function E(t, i, u, y) {
var w, x, C = function(t) {
if (!t[0] || !t[0].tagName) return !1;
if (-1 == f.indexOf(t[0].tagName.toUpperCase())) return t[0].querySelector("video, div, p");
var e = !1;
return t.children().each(function() {
e = e || this.tagName && (f.indexOf(this.tagName.toUpperCase()) > -1 || "BLOCK" == this.style.display)
}), e || t[0].querySelector("video, div, p")
}(t),
A = t[0].tagName;
if (!(t.data("skip") || h.indexOf(A) > -1 || t[0].nodeType === document.CITATION_NODE)) {
if (y && y.length) y.push(("P" == A ? "\n" : "") + t.text());
else if ("BLOCKQUOTE" === A) k(t, C, w = F({
type: a.blockquote
}, i, u));
else if ("LI" === A && o.isType(i, a.list)) k(t, C, w = F({
type: a.list_item
}, i, u));
else if ("UL" === A || "OL" === A) k(t, C, w = F({
type: a.list,
style: A.toLowerCase()
}, i, u));
else if ("DL" === A) w = F({
type: a.list,
style: "ul"
}, i, u),
function(t, e) {
for (var i, o = [], s = 0; s < t.length; s++) "DT" == t[s].tagName && ((i = F({
type: a.list_item
}, e, o)).itemList = [], F({
type: a.paragraph,
text: b(l(t[s]), void 0, n, r)
}, i, i.itemList)), "DD" == t[s].tagName && i && F({
type: a.paragraph,
text: b(l(t[s]), void 0, n, r)
}, i, i.itemList)
}(t.children(), w);
else if ("TABLE" === A)(x = t.children().children("tr").add(t.children("tr"))).length && (w = F({
type: a.table
}, i, u), u = [], w.cols = 1, w.set("align", new Array(w.cols - 0)), x.toArray().map(function(t) {
E(l(t), w, u)
}), s.valify(w, w.cols, 2, function(t, e) {
var n = e.split(/(\r|\n)+/);
t.set("type", a.paragraph), t.set("text", n[0]);
for (var r = 1; r < n.length; r++) n[r].trim().length && F({
type: a.paragraph,
text: n[r]
}, i, u)
}));
else if ("THEAD" === A || "TBODY" === A || "TFOOTER" === A) {
for (var T = [t], M = $elem.next(); M.length && o.isType(M[0].tagName, "THEAD", "TBODY", "TFOOTER");) T.push(M), M.data("skip", !0);
t.wrap("<table></table>"), E(t.parent(), i, u)
} else if ("TR" === A && o.isType(i, a.table)) {
var D;
D = (x = t.children("th")).length, x = x.add(t.children("td")), i.cols = x.length > i.cols ? x.length : i.cols, w = F({
type: a.table_row,
isHeader: D
}, i, u), u = [], x.toArray().map(function(t) {
E(l(t), w, u)
})
} else if ("TD" !== A && "TH" !== A || !o.isType(i, a.table_row))
if ("HR" === A) F({
type: a.hr
}, i, u);
else if (/H[1-6]/g.exec(A)) F({
type: a.heading,
text: b(t, void 0, n, r),
depth: t[0].tagName[1]
}, i, u);
else if ("CODE" === A || "PRE" === A && 0 == t.find("pre").length || "FIGURE" == A && t.hasClass("highlight")) {
S = "";
var L = t.attr("class") + " " + t.children("code").attr("class"),
R = (/lang(?:uage)?\-([^\s]+)/.exec(L) || [])[1],
B = t.find("tr");
B.length > 1 ? S = B.map(function() {
return this.innerText
}).toArray().join("\n") : (t.find("div").each(function() {
l(this).before("<br/>")
}), S = t[0].innerText.replace(/(^\s*\n+)|([\r\n]+$)/g, "")), F({
type: a.fences,
text: S,
lang: R
}, i, u)
} else {
if (o.isType((A || "").toUpperCase(), "VIDEO", "AUDIO", "IFRAME", "DETAILS", "SVG")) return S = t[0].outerHTML, F({
type: a.html_block,
text: S
}, i, u), S;
if ("P" != A && C) {
if (C) {
var I, N;
if (t.is("div.gist") && (N = d(t))) return void F(N, i, u);
var O = [];
if (t[0].childNodes.forEach(function(t, e) {
(t.nodeType != t.TEXT_NODE || t.nodeValue.trim().length) && (t.nodeType == t.TEXT_NODE || c.ALL_INLINE_TYPE.indexOf((t.tagName || "").toUpperCase()) > -1 ? I ? I.append(l(t)) : I = l(t).wrap("<p></p>").parent() : t.nodeType == t.ELEMENT_NODE && (I && (E(I, i, u, O), I = null), E(l(t), i, u, O)))
}), O.length) {
var j = O.join("\n"),
P = o.parseFrom(j, e, void 0, !0)[1];
return u.splice.apply(u, [u.length, 0].concat(P)), j
}
I && (E(I, i, u), I = null)
}
} else {
var q = function(t) {
t = t || "";
var e = !1;
try {
e = (e = (t.match(/\n\s*(\!?\[|#{1,5}|>|```|([-+*]\s)|(\d+\.\s))/gm) || "").length > 3 || t.match(p) || t.match(v)) ? g.NORMAL : null
} catch (t) {}
return e || (e = (e = m.exec(t)) ? g.HTML : null), e || (e = (e = (t.match(/(\/\w*>)|(\n\s+<)/g) || []).length > 6) ? g.HTML : null), e
}(S = t[0].innerText || t[0].textContent || "");
if (q) {
var U = new o({
type: a.paragraph,
text: S.replace(/^[\r\n]+\s*/, "").replace(/\s*[\r\n]+$/, ""),
in: e
});
if (i) i.append(U);
else {
var z = (U.parseFrom(void 0, void 0, !0) || [])[1];
z && z.length && (y && 1 == z.length && !u.length && z[0].get("type") == a.html_block ? y.push(S) : u.splice.apply(u, [u.length, 0].concat(z)))
}
} else _(t, i, u);
if (q) return S
}
} else w = F({
type: a.table_cell,
text: b(t, void 0, n, r)
}, i, u), "TH" === A && function(t, e) {
if ("TH" === t[0].tagName) {
var n = t.attr("style") || "",
i = /text\-align:([^;]+)($|;)/.exec(n),
r = null;
if (i && (r = $[i[1].replace(/;/g, "").trim()] || null), r) {
var o = t.prevAll("th").length;
(e.get("parent").get("parent").get("align") || [])[o] = r
}
}
}(t, w);
return null
}
}
y.find("head, meta, script, css, .gutter, style, title, template, wbr, menu").remove(), y[0].normalize && y[0].normalize();
var C = E(y, null, w);
if (C) return C;
if (w.length && (function t(e, n, i, r) {
var s, u = n,
c = [];
if (n && n !== i) {
for (; u && u !== i && o.isType(u, a.paragraph) && o.isEmptyBlock(u);) s = u, u = u.get("after"), s.remove(), r && r.splice(r.indexOf(s), 1), u = u.get("after");
for (n = u.get("before") || u, u = i; u && u !== n && o.isType(u, a.paragraph) && o.isEmptyBlock(u);) s = u, u = u.get("before"), s.remove(), r && r.splice(r.indexOf(s), 1), u = u.get("before")
}
for (u = n; u;) {
var l = null;
if (o.isType(u, a.blockquote, a.list_item)) t(u, u.getFirstChild(), u.getLastChild());
else if (o.isType(u, a.fences) && o.isType(u.get("before"), a.fences)) c.push(u), u.head = u.get("before").head || u.get("before"), u.head.set("text", u.head.get("text") + "\n" + u.get("text"));
else if (o.isType(u, a.list) && 0 === u.get("children").length) u.set("type", a.paragraph);
else if (o.isType(u, a.paragraph) && (l = /^(`+)([\s\S]*?[^`])\1(?!`)\s*$/g.exec(u.get("text")))) {
u.set("type", a.fences), u.set("text", l[2]);
continue
}
u = u.get("after")
}
c.map(function(t) {
r && r.splice(r.indexOf(t), 1), t.remove()
})
}(0, w[0], w.last(), w), 1 === w.length && o.isType(w[0], a.paragraph))) {
y.find("br").replaceWith(""), y.html(y.html().replace(/^\s+/gm, ""));
var A = (S = y.text()).indexOf("") > -1,
S = S.replace(/^(\s*\n)+/, "").replace(/(\r?\n)+$/, "").replace(/\u00a0/g, " ").replace(/\u200b/g, "");
return A && (S = S.replace(/\uE033/g, "\n").replace(/(\r?\n){2,}/g, "\n")), w[0].delete(), S.indexOf(/\n/) > -1 ? o.parseFrom(S, e, {
noTop: !0,
skips: {
old_code: !0
}
}, !0)[1] : S
}
return w
}
}), $__System.registerDynamic("2b", ["12", "14", "13", "1b", "1c", "19", "36"], !0, function(t, e, n) {
"use strict";
this || self;
var i = t("12"),
r = t("14"),
o = t("13"),
a = t("1b"),
s = a.SnapFlag,
u = o.Node,
c = o.TYPE,
l = (o.NodeCollectionUtils, t("1c")),
f = t("19"),
h = t("36");
function d(t) {
if (t.get("style") == u.ListType.ol) return u.ListType.ol;
var e = !1;
return t.get("children").map(function(t) {
e = e || t.get("style") !== u.ListType.task
}), e ? u.ListType.ul : u.ListType.task
}
var m = function(t, e, n, i, r) {
var o = l.createRange();
function a(t) {
var i;
i = t.attr("md-inline") == e ? t.children(".md-meta:not(.md-content)") : t.find('[md-inline="' + e + '"]').children(".md-meta:not(.md-content)"), n && (n.end -= i.text().length), i.remove(), t.attr("md-inline") == e && n && (n.end = n.start + t.text().length)
}
if (t[0].hasAttribute("mdtype") && (t.wrapInner("<span></span>"), t = $(t[0].firstChild)), n ? (n.containerNode = t[0], o.moveToBookmark(n)) : o.selectNode(t[0]), o.commonAncestorContainer.nodeType == document.ELEMENT_NODE && o.commonAncestorContainer.getAttribute("md-inline") == e) a($(o.commonAncestorContainer));
else {
for (var s = document.createElement("SPAN"), u = o.extractContents(), c = 0; c < u.childNodes.length; c++) s.appendChild(u.childNodes[c].cloneNode(!0));
a($(s)), s.childNodes.length != s.childElementCount || 1 != s.childNodes.length || s.childNodes[0].getAttribute("md-inline") || (s = s.childNodes[0]), o.insertNode(s), o.setStart(s, 0), o.setEnd(s, s.childNodes.length)
}
return r || v.call(this, o, e, t[0], i ? n : null), this.editor.brush.addToQueue(t.attr("cid")), o
},
v = function(t, e, n, i) {
if (u.isType(e, c.link, c.image)) p.call(this, t, e, n, i);
else if (t.commonAncestorContainer == t.startContainer && t.startContainer == t.endContainer) {
var r = function(t) {
var e, n = [],
i = 0,
r = t.commonAncestorContainer;
if (!r.childElementCount) return [t];
function o() {
if (e != i && 0 != e) {
var t = l.createRange();
t.setStart(r.children[i], 0), t.setEndAfter(r.children[e - 1]), n.push(t)
}
}
for (e = 0; e < r.childElementCount; e++) r.children[e].classList.contains("md-softbreak") && (o(), i = e + 1);
return i < e && o(), n
}(t),
o = r.length > 1,
a = this;
r.forEach(function(t, s) {
var u = p.call(a, t, e, n, s == r.length - 1 ? i : void 0, o);
i && u && (i instanceof Object ? i.end += u : i += u)
})
} else p.call(this, t, e, n, i)
},
p = function(t, e, n, i, o) {
var a, s, l, f, h, d, m = y.SyntaxMap[e];
if (i) {
var v, p = this.editor.getJQueryElem(t.startContainer),
g = this.editor.getJQueryElem(t.endContainer);
if (p.closest("md-before").length || p.closest("md-content").length ? (t.setStartBefore(p.closest("[md-inline]")[0]), v = !0) : p.closest("md-meta").length && (t.setStartAfter(p.closest("[md-inline]")[0]), v = !0), g.closest("md-after").length || p.closest("md-content").length ? (t.setEndAfter(p.closest("[md-inline]")[0]), v = !0) : g.closest("md-meta").length && (t.setEndBefore(p.closest("[md-inline]")[0]), v = !0), a = t.toString(), t.collapsed || 0 === a.trim()) return;
s = v ? s || t.getBookmark(n && document.body.contains(n) ? n : t.commonAncestorContainer) : i instanceof Object ? i : {
start: i,
end: i
}
} else a = t.toString();
return l = /^\s+/g.exec(a), f = /\s+$/g.exec(a), l = l ? l[0].length : 0, f = f ? f[0].length : 0, (l || f) && ((s = s || t.getBookmark(n && document.body.contains(n) ? n : t.commonAncestorContainer || t.commonAncestorContainer)).start += l, s.end -= f, t.moveToBookmark(s)), h = m[1], (d = JSBridge.clipboard.readText()) && d.length > 5e3 && (d = ""), u.isType(e, c.link) ? r.isURL(a) ? h = "](" + a + ")" : r.isURL(d) && (h = "](" + d + ")") : u.isType(e, c.image) && (r.isImg(a) ? h = "](" + a + ")" : r.isImg(d) && (h = "](" + d + ")")), t.insertNodeAtEnd(document.createTextNode(h)), t.insertNode(document.createTextNode(m[0])), i && (u.isType(e, c.link) ? t.moveToBookmark({
containerNode: n,
start: s.start + 1,
end: 1 + s.end
}) : t.moveToBookmark({
containerNode: n,
start: s.start + (o ? 0 : m[0].length),
end: s.end + m[0].length + (o ? m[1].length : 0)
}), editor.selection.setRange(t, !0)), (m[0] || "").length + (m[1] || "").length
};
function g(t, e, n, i) {
var r, o = e.closest('[md-inline="' + i + '"]');
o.length || "link" != i || (o = e.closest('[md-inline="reflink"], [md-inline="autolink"]')), "image" == i && (o.length ? r = /!\[([^\]]*)\]/.exec(o.text())[1] : r || ((o = e.closest('[md-inline="refimg"]')).length ? r = /!\[((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)\]/.exec(o.text())[1] : (o = e.closest(".md-url").closest("[md-inline]")).length && (r = "!" + o.text()))), i == c.comment && (r = o.text().replace(/(^<\!--)|(-->)$/g, ""));
var a = t.findNodeByElem(n);
r ? (o.text(r), t.selection.selectAllElem(o)) : (o.children(".md-meta, .md-content").remove(), t.brush.addToQueue(o.closest("[cid]").attr("cid"), !0)), a && t.undo.addSnap(a.id, s.REPLACE)
}
var b = i.Model.extend({
initialize: function(t) {
this.editor = t, this.CONST = y, this.putBookmark(null, {
block: []
})
},
removeStyle: function(t, e, n) {
t.children(".md-meta").remove()
},
canContainInline: function(t) {
return t.jquery && (t = t.attr("mdtype")), u.isType(t, c.paragraph, c.def_footnote, c.heading, c.table_cell)
},
putStyle: function(t, e, n) {
this.editor.selection.deRange(t);
var i, r = this.editor.getMarkElem(t.commonAncestorContainer),
o = y.InsertInline.indexOf(e) > -1;
if (o && (r = this.editor.getMarkElem(t.startContainer)), r.length && 0 === r.find("[mdtype]").length && this.canContainInline(r)) {
var s = a.makeEmptyCommand(this.editor.selection.buildUndo()),
c = this.editor.store(r.attr("cid"));
s.undo.push(a.buildReplaceUndo(c)), i = n && this.hasStyleInRange(e, t, !0), (t = this.putStyleForRange(r, e, t, !0, i)).select(), this.editor.store(r.attr("cid")), s.redo.push(a.buildReplaceUndo(c)), s.redo.push(this.editor.selection.buildUndo()), this.editor.undo.register(s), this.editor.brush.addToQueue(c.id, !0)
} else if (!o) return i = n && this.hasStyleInRange(e, t, !1),
function(t, e, n) {
var i = this.editor;
function r(t) {
var o = t.get("children");
return o.length ? o.toArray().map(r) : i.stylize.canContainInline(t.get("type")) && i.findElemById(t.id).text().length && (i.stylize.putStyleInBlock(i.findElemById(t.id), e, void 0, void 0, !0, n), i.store(t), i.brush.addToQueue(t.id)), t
}
var o = i.selection.getDetailPos(t.startContainer, t.startOffset),
s = i.selection.getDetailPos(t.endContainer, t.endOffset),
c = i.getMarkElem(o[0]),
l = i.getMarkElem(s[0]),
f = i.findNodeByElem(c),
h = i.findNodeByElem(l),
d = u.getTreePosition(f, h),
m = d[1],
v = d[2],
p = a.makeEmptyCommand(i.selection.buildUndo()),
g = t.cloneRange(),
b = t.cloneRange(),
y = m;
for (p.undo.push(a.buildReplaceUndo(m)), b.setEndAfter(c[0]), this.canContainInline(f) && b.toString().length && (this.putStyleInBlock(c, e, b.getBookmark(c[0]), void 0, !0, n), i.store(f, !0)), i.UserOp.decorateOneSide(f, m, "after", r), p.redo.push(a.buildReplaceUndo(m)), i.brush.addToQueue(c.attr("cid")), y = m.get("after"); y && y !== v;) p.undo.push(a.buildReplaceUndo(y)), r(y), p.redo.push(a.buildReplaceUndo(y)), y = y.get("after");
h && h != m && (g.setStartBefore(l[0]), g.toString().length && (p.undo.push(a.buildReplaceUndo(v)), this.canContainInline(h) && (this.putStyleInBlock(l, e, g.getBookmark(l[0]), void 0, !0, n), i.store(h, !0)), i.UserOp.decorateOneSide(h, v, "before", r), p.redo.push(a.buildReplaceUndo(v)), i.brush.addToQueue(l.attr("cid")))), p.redo.push(i.selection.buildUndo()), i.undo.register(p), $(".md-expand").removeClass("md-expand"), i.brush.resume(!0)
}.call(this, t, e, i)
},
putStyleInBlock: function(t, e, n, i, r, o) {
if (!r || 0 != t.text().length) {
t[0].hasAttribute("mdtype") && t.addClass("md-expand");
try {
return m.call(this, t, e, n, i, o)
} catch (t) {
console.error(t)
}
}
},
putStyleForRange: function(t, e, n, i, r) {
var o = n.getBookmark(t[0]);
return t[0].hasAttribute("mdtype") && n.commonAncestorContainer.nodeType != document.TEXT_NODE && t.addClass("md-expand"), m.call(this, t, e, o, i, r)
},
addStyle: function(t, e) {
var n, i = y.SyntaxMap[e],
o = document.createElement("SPAN");
o.className = "md-meta md-expand", o.setAttribute("md-inline", e), "link" == e && (n = JSBridge.clipboard.readText(), r.isURL(n) && (i[1] = "](" + n + ")")), o.appendChild(document.createTextNode(i[0] + i[1])), t.insertNode(o), t.moveToBookmark({
containerNode: o,
start: i[0].length,
end: i[0].length
}), this.editor.selection.rangy.getSelection().setSingleRange(t)
},
detach: function(t, e) {
return !(!t.collapsed || !$.parseHTML("<div>" + t.toHtml() + "</div>")[0].querySelector('[md-inline="' + e + '"]')) || $(t.commonAncestorContainer).closest('[md-inline="' + e + '"]').length
},
canToggleStyle: function(t, e, n) {
var i = function(t) {
for (var e = 0; e < t.CONST.NoInline.length; e++)
if (t.hasStyle(t.CONST.NoInline[e])) return !0
}(this);
return !!this.hasStyle(t) || !(i || /(md-meta|md-content)(\s+|$)/g.exec(e[0].className) && !n || /md-blockmeta/g.exec(e[0].className)) && !i
},
clearStyle: function() {
if (window.getSelection().rangeCount && !isInputComponent(document.activeElement) && !File.isLocked) {
this.editor.brush.clearAndPause();
var t = this.editor.selection.getRangy();
if (t) {
for (var e, n = a.makeEmptyCommand(editor.selection.buildUndo()), i = editor.selection.getDetailPos(t.startContainer, t.startOffset), r = editor.selection.getDetailPos(t.endContainer, t.endOffset), o = editor.getMarkElem(i[0]), s = editor.getMarkElem(r[0]), c = editor.findNodeByElem(o), l = editor.findNodeByElem(s), f = u.getTreePosition(c, l), h = f[1], d = f[2], m = h; m && m != d.get("after");) e = m, m = m.get("after"), n.undo.push(a.buildReplaceUndo(e)), this.editor.findElemById(e.id).find(".md-meta, .md-content").remove(), this.editor.store(e.id), this.editor.brush.addToQueue(e.id), n.redo.push(a.buildReplaceUndo(e));
this.editor.undo.register(n)
}
this.editor.brush.resume(), this.editor.brush.expand()
}
},
toggleStyle: function(t) {
if (!File.isLocked && window.getSelection().rangeCount && "INPUT" != document.activeElement.tagName && "TEXTAREA" != document.activeElement.tagName && !File.isLocked) {
var e, n, i = this.editor.selection.getRangy(),
r = this.hasStyle(t),
o = this.editor.getJQueryElem(i.commonAncestorContainer),
a = this.editor.getMarkElem(i.commonAncestorContainer);
if (!r) {
var u = this.editor.getJQueryElem(i.startContainer);
"link" == t && (r = u.closest('[md-inline="reflink"], [md-inline="autolink"]').length), "image" == t && (r = u.closest('[md-inline="refimg"], .md-url').length)
}
this.editor.brush.pause();
do {
if (!this.canToggleStyle(t, o, i.collapsed)) break;
if (r) g(this.editor, o, a, t);
else {
if (!i.collapsed) {
this.putStyle(i, t, !0);
break
}
if (!(n = this.editor.findNodeByElem(a))) return;
e = i.getBookmark(a[0]).start;
var l = a.text().substring(e - 1, e + 1),
f = "**" == l && $(i.startContainer).closest("[md-inline='plain']").length;
t == c.em && f ? (i.moveToBookmark({
containerNode: a[0],
start: e - 1,
end: e + 1
}), i.extractContents()) : !(d = l) || i.collapsed && /^[\(\)\[\]\^&_\-+*#@!~`\\\/\{\}'":;<>,.?%\s]+$/.exec(d) ? this.addStyle(i, t) : (a.addClass("md-expand"), f || t == c.image || this.editor.selection.selectWord(!0, !1, i), (i = this.editor.selection.getRangy()).collapsed ? this.addStyle(i, t) : v.call(this, i, t, a[0], e)), n && this.editor.undo.addSnap(n.id, s.REPLACE)
}
if (this.editor.brush.addToQueue(a.attr("cid")), t == c.inline_math && !r) {
var h = this.editor;
setTimeout(function() {
h.brush.triggerAutoComplete(!0)
}, 100)
}
} while (0);
var d;
this.editor.brush.resume(!0)
}
},
putBookmark: function(t, e) {
return this.editor.styleBookmark = {
cursor: t,
style: e
}
},
isAtFootnoteDefSpan: function() {
var t = this.editor.selection.getRangy();
return t && this.editor.getJQueryElem(t.startContainer).closest(".md-def-name").length
},
buildBookmark: function(t) {
if (File.ignoreStyleChange) return File.editor.styleBookmark.style;
var e, n = {
inline: [],
block: [],
state: ""
},
i = this.editor.selection.getRangy(),
r = (t = t || this.editor.getJQueryElem(i && i.commonAncestorContainer || document.activeElement) || $()).closest("[md-inline]"),
o = t;
if (0 == t.length) {
if (!(t = this.editor.getMarkElem()).length || !u.isType(t.attr("mdtype"), u.TYPE.hr, u.TYPE.toc)) return n;
o = t
}
for (; r.length;) e = r.attr("md-inline"), this.CONST.LinkList.indexOf(e) > -1 && (e = "link"), n.inline.push(e), o = r, r = r.parent().closest("[md-inline]");
for (r = o.closest("[mdtype], [mdlike]"); r.length;)(e = r.attr("mdlike") || r.attr("mdtype")) === c.heading ? n.block.push("header" + r[0].tagName.substring(1)) : e === c.list ? n.block.push(d(this.editor.findNodeByElem(r))) : e === c.list_item ? r.hasClass("md-task-list-item") && !n.state && (n.state = r.hasClass("task-list-done") ? "checked" : "unchecked") : (e = e.replace(/^h([1-6])$/, "header$1"), n.block.push(e)), r = r.parent().closest("[mdtype]");
return n
},
hasStyleInRange: function(t, e, n) {
var i = e.toHtml();
return n && (i = "<div>" + i + "</div>"), 0 == $(i).find("[md-inline='" + t + "']").remove().end().text().trim().length
},
hasStyle: function(t) {
var e = this.editor.styleBookmark.style;
if (e) return (e.inline || []).indexOf(t) > -1 || (e.block || []).indexOf(t) > -1
},
changeStyleFromMenu: function(t) {
if (!File.isLocked && !document.body.classList.contains("modal-open")) {
var e = y.NameMapToStyle[t.toLowerCase()];
u.isType(e, "header1", "header2", "header3", "header4", "header5", "header6", c.paragraph) ? this.changeBlock(e) : u.isType(e, c.def_footnote, c.def_link, c.hr, c.fences, c.math_block, c.toc) ? this.insertBlock(e) : u.isType(e, c.table) ? File.editor.tableEdit.insertTable() : u.isType(e, c.meta_block) ? this.insertMetaBlock() : u.isType(e, c.blockquote) && this.toggleIndent(c.blockquote)
}
},
changeBetweenCodeMirror: function(t, e) {
if (u.isType(e, c.math_block, c.fences)) {
var n = this.editor,
i = a.makeEmptyCommand(n.selection.buildUndo());
u.isType(e, c.fences) ? (n.fences.syncToNode(e.cid), n.fences.beforeDeleteFences(e)) : (n.mathBlock.syncToNode(e.cid), n.mathBlock.beforeDeleteFences(e)), i.undo.push(a.buildReplaceUndo(e)), e.set("type", t), i.redo.push(a.buildReplaceUndo(e)), n.findElemById(e.id).replaceWith(e.toHTML()), t == c.fences ? n.fences.getCm(e.id) : t == c.math_block && n.mathBlock.startEditing(e.id), n.selection.jumpIntoElemBegin(n.findElemById(e.id)), i.redo.push(n.selection.buildUndo()), n.undo.register(i), n.refocus(), h.refreshBlockMenu()
}
},
toggleFences: function() {
if (!File.isLocked && !document.body.classList.contains("modal-open")) {
var t = this.editor.getNode(null, !0);
u.isType(t, c.fences) ? this.changeBlock(c.paragraph, t) : u.isType(t, c.math_block) ? this.changeBetweenCodeMirror(c.fences, t) : this.insertBlock(c.fences)
}
},
toggleMathBlock: function() {
if (!File.isLocked && !document.body.classList.contains("modal-open")) {
var t = this.editor.getNode(null, !0);
u.isType(t, c.math_block) ? this.changeBlock(c.paragraph, t) : u.isType(t, c.fences) ? this.changeBetweenCodeMirror(c.math_block, t) : this.insertBlock(c.math_block)
}
},
changeBlock: function(t, e, n) {
if (!File.isLocked && !document.body.classList.contains("modal-open") && (e = e || this.editor.getNode(null, !0))) {
var o, s, h, d, m = y.getMenuBlockType(e),
v = this.editor,
p = e.cid;
if (u.isType(m, c.math_block, c.html_block, c.table)) v.UserOp.insertParagraph();
else if (!u.isType(e, c.table_row, c.table_cell, c.blockquote, c.list) && (File.option.expandSimpleBlock && u.isType(m, c.paragraph) && e.get("depth") > 0 && (m = "header" + e.get("depth")), v.lastCursor = v.selection.buildUndo(), m == t && n && u.isType(e, c.heading) && (t = c.paragraph), m != t && m)) {
if (u.isType(m, c.fences) && (v.fences.syncToNode(e.cid), v.fences.beforeDeleteFences(e)), (o = a.makeEmptyCommand(v.lastCursor)).undo.push(a.buildReplaceUndo(e)), u.isType(m, c.def_link) && e.set("text", (e.get("href") || "") + (e.get("tittle") ? ' "' + e.get("tittle") + '"' : "")), 0 == t.indexOf("header")) h = t.substr(6) - 0, (s = e.get("pattern")) && /-|=/.exec(s) ? s = h <= 2 ? s.replace(/-|=/g, 1 == h ? "=" : "-") : void 0 : s && (s = s.replace(/#+/g, "#".repeat(h))), e = u.isType(e, c.paragraph) ? File.option.expandSimpleBlock && e.get("depth") && /^#/.exec(e.get("text")) ? function(t, n, r) {
(d = i.utils.clone(o.undo[0])).start += t - e.get("depth"), d.end += t - e.get("depth"), e.set("depth", t);
var s = e.get("text");
if (s = s.replace(/^#+/, "#".repeat(t)).replace(/#+$/, "#".repeat(t)), e.set("text", s), !r) {
var u = f.renderHtmlWithBlockMeta(e, File.editor.brush);
v.findElemById(e.id).replaceWith(u)
}
return o.redo.push(a.buildReplaceUndo(e)), e
}(h) : function(t, n) {
var s = function() {
var t, n, s = e.get("text") || "",
l = s.split(/\n/) || [];
if (e.set("text", s), !l.length) return [t, e, n];
var f = r.findLine(s, v.lastCursor.start);
return e.set("text", f.line), f.start > 0 && (t = e.insert(new u({
type: c.paragraph,
text: s.substring(0, f.start - 1)
}), !0), a.addUndoForInsert(o, t)), f.start + f.line.length < s.length && (n = e.insert(new u({
type: c.paragraph,
text: s.substring(f.start + f.line.length + 1)
}), !1), a.addUndoForInsert(o, n)), (d = i.utils.clone(o.undo[0])).start -= f.start, d.end -= f.start, [t, e, n]
}();
x(t, n, !0);
var l = (s[0] ? s[0].toHTML() : "") + s[1].toHTML() + (s[2] ? s[2].toHTML() : "");
return v.findElemById(e.id).replaceWith(l), s[1]
}(h, s) : x(h, s);
else {
u.isType(e, c.paragraph) && m !== c.paragraph && e.set("text", e.get("text").replace(/^#+\s*/, "")), e.set("type", t), e.set("pattern", void 0);
var g;
if (u.isType(e, c.paragraph) || m != c.paragraph || e.set("text", e.get("text").replace(/\r?\n/g, " ")), u.isType(m, c.meta_block, c.fences) && u.isType(e, c.paragraph) && (e.set("type", c.raw_edit), (g = v.simpleParse(e)) || e.set("type", c.paragraph)), g) {
var b = $(g[1]),
w = b[0].getAttribute("cid"),
F = b.last()[0].getAttribute("cid"),
k = l.createRange();
v.findElemById(g[2]).replaceWith(g[1]), g && a.append(o, g[0]), k.setStartBefore(v.findElemById(w)[0]), k.setEndAfter(v.findElemById(F)[0]), k = v.selection.deRange(k, !0), d = v.selection.buildUndo(k)
} else u.normalizeNode(e), o.redo.push(a.buildReplaceUndo(e)), v.findElemById(e.id).replaceWith(e.toHTML())
}
d || ((d = i.utils.clone(o.undo[0])).startId === p && (d.startId = e.cid), d.endId === p && (d.endId = e.cid), d.id === p && (d.id = e.cid)), v.undo.exeCommand(d), o.redo.push(d), v.undo.register(o), v.refocus()
}
}
function x(t, n, i) {
return e.set("type", c.heading), e.set("depth", t), e.set("pattern", n), i || v.findElemById(e.id).replaceWith(e.toHTML()), o.redo.push(a.buildReplaceUndo(e)), e
}
},
increaseHeaderLevel: function() {
if (!File.isLocked && !document.body.classList.contains("modal-open")) {
var t = this.editor.getMarkElem(),
e = t.attr("mdtype");
e != c.heading && e != c.paragraph || this.editor.stylize.changeHeadingLevel(this.editor.findNodeByElem(t), !0, t.attr("mdlike"))
}
},
decreaseHeaderLevel: function() {
if (!File.isLocked && !document.body.classList.contains("modal-open")) {
var t = this.editor.getMarkElem(),
e = t.attr("mdtype");
e != c.heading && e != c.paragraph || this.editor.stylize.changeHeadingLevel(this.editor.findNodeByElem(t), !1, t.attr("mdlike"))
}
},
insertMetaBlock: function(t, e) {
if (!File.isLocked && !document.body.classList.contains("modal-open")) {
e = e || "";
var n = this.editor.nodeMap.getFirst();
if (!u.isType(n, c.meta_block)) {
this.editor.lastCursor = this.editor.selection.buildUndo();
var i = a.makeEmptyCommand(this.editor.lastCursor || this.editor.selection.buildUndo()),
r = new u({
type: c.meta_block,
in: this.editor.nodeMap,
attachTo: this.editor.nodeMap,
after: n,
text: e
});
return a.addUndoForInsert(i, r), t ? {
command: i,
node: r
} : (this.editor.findElemById(n.cid).before(r.toHTML()), this.editor.selection.restoreSelection(this.editor.findElemById(r.cid), 0), i.redo.push(this.editor.selection.buildUndo()), this.editor.undo.register(i), $(this.editor.sessionStr).trigger("cursorChange"), this.editor.selection.scrollAdjust(), this.editor.refocus(r.cid), r)
}
}
},
insertBlock: function(t, e) {
if (!(File.isLocked || "table" != t && document.body.classList.contains("modal-open"))) {
var n = this.editor,
i = n.selection.getRangy(),
r = "",
o = null,
s = "";
!i || i.collapsed || e ? o = a.makeEmptyCommand() : (r = n.UserOp.prepMarkHtml(i.toHtml(), n).html(), s = i.toString(), o = n.UserOp.backspaceHandler(n, null, "delSelection", !0), i = n.selection.getRangy(), n.selection.deRange(i, !0), n.refocus(null, !1, !0));
var l = this.editor.getNode(null, !0);
if (l) {
var f = y.getMenuBlockType(l),
h = this.editor.findElemById(l.id);
if (this.editor.lastCursor = this.editor.selection.buildUndo(i), f != t && f && u.isType(l, c.paragraph, c.heading)) {
o.undo.push(this.editor.lastCursor), o.undo.push(a.buildReplaceUndo(l));
var d, m = u.splitAt(l, (this.editor.lastCursor || {
start: 0
}).start, n, !0),
v = m.prev,
p = e || new u({
type: t,
text: ""
}),
g = m.next,
b = "",
w = t == c.hr ? g.id : p.id;
u.isType(t, c.math_block, c.fences) ? p.set("text", r ? n.UserOp.getMarkdownSourceFrom(r) : "") : t == c.def_link && (s = (s.trim().split(/\n/) || [])[0] || "", /[\/\\]/.exec(s) ? p.set("href", s.substr(0, 160)) : p.set("ref", (s.split(/\s/)[0] || s).substr(0, 20))), o.redo.push(n.undo.buildReplaceUndo(l)), a.addUndoForInsertArray(o, m.insertArray), v.insert(p, !1), a.addUndoForInsert(o, p), m.insertArray.indexOf(g) > -1 && m.insertArray.splice(m.insertArray.indexOf(g), 0, p), e && F(e, l.get("in")), g && u.isEmptyBlock(g) && u.isType(g.get("after"), c.paragraph) && (a.addUndoForRemove(o, g), g.remove(), g = null), u.isEmptyBlock(v) && (a.addUndoForRemove(o, v), v.remove(), v = null), b = (l.isDeleted() ? "" : l.toHTML()) + m.insertArray.map(function(t) {
return t.isDeleted() ? "" : t.toHTML()
}).join(""), h.replaceWith(b), d = this.editor.findElemById(w), this.editor.selection.jumpIntoElemBegin(d)
} else {
l = l.getClosetBlock(!1);
p = e || new u({
type: t,
text: ""
});
l.insert(p), e && F(e, l.get("in")), a.addUndoForInsert(o, p), this.editor.findElemById(l.cid).after(p.toHTML()), this.editor.selection.jumpIntoElemBegin(this.editor.findElemById(p.cid))
}
this.editor.lastCursor = this.editor.selection.buildUndo(), o.redo.push(this.editor.lastCursor), this.editor.undo.register(o), this.editor.refocus(), $(this.editor.sessionStr).trigger("cursorChange"), this.editor.selection.scrollAdjust()
}
}
function F(t, e) {
t.set("in", e), t.get("children").toArray().map(function(t) {
F(t, e)
})
}
},
toggleTaskStatus: function(t) {
if (!File.isLocked && !document.body.classList.contains("modal-open")) {
var e = this.editor.selection.getRangy(),
n = this.editor.getMarkElem(e && e.startContainer).closest(".md-task-list-item"),
i = n.hasClass("task-list-done");
if (void 0 === t && (t = !i), n.length && t !== i) {
var r = this.editor;
if (e.collapsed) r.getNode(n.attr("cid")).attr("checked", t, r, !1);
else {
var o = a.makeEmptyCommand(),
s = $.parseHTML(e.toHtml());
$(s).find(t ? ".task-list-not-done" : ".task-list-done").addBack(t ? ".task-list-not-done" : ".task-list-done").each(function() {
var e = r.getNode(this.getAttribute("cid")).attr("checked", t, r, !0);
a.append(o, e)
}), o.undo.length ? r.undo.register(o) : r.getNode(n.attr("cid")).attr("checked", t, r, !1)
}
JSBridge.menu.update({
"Paragraph→Task Status→Mark as Complete": {
state: t
},
"Paragraph→Task Status→Mark as Incomplete": {
state: !t
}
})
}
}
},
toggleIndent: function(t, e) {
if (!File.isLocked && !document.body.classList.contains("modal-open")) {
var n, i, r = this.editor,
o = a.makeEmptyCommand(r.selection.buildUndo()),
s = this.editor.selection.getRangy();
if (!(isInputComponent(document.activeElement) && !this.editor.fences.getFocused() || File.isLocked)) {
this.editor.store();
var l = this.editor.selection.buildUndo();
if (this.editor.lastCursor = l, function(t) {
if (t && !t.collapsed) {
var e = !1;
! function t(i) {
var r, o = n(i.endContainer);
o.text().length || o.parent()[0] != i.commonAncestorContainer || (r = o.prev()[0]) && (e = !0, i.setEndAfter(r), t(i))
}(t),
function t(i) {
var r, o = n(i.startContainer);
o.text().length || o.parent()[0] != i.commonAncestorContainer || (r = o.after()[0]) && (e = !0, i.setStartBefore(r), t(i))
}(t), e && r.selection.deRange(t)
}
function n(t) {
return $(t).closest("p")
}
}(s), s) {
var f = r.selection.getDetailPos(s.startContainer, s.startOffset),
h = r.selection.getDetailPos(s.endContainer, s.endOffset),
m = r.getMarkElem(f[0]),
v = r.getMarkElem(h[0]),
p = r.findNodeByElem(m),
g = r.findNodeByElem(v),
b = u.getTreePosition(p, g),
y = (w = b, F = s, F.collapsed && w[2] === w[1] && u.isType(w[1], c.line) ? [w[0], w[1].getLastBrother(!0), w[1].getLastBrother(!1)] : w);
n = y[1], i = y[1] === y[2] ? null : y[2]
} else n = this.editor.findNodeByElem(this.editor.getMarkElem());
var w, F;
n && (this.editor.brush.pause(!0), t == c.blockquote ? function(e, n, i) {
e = e.getClosetBlock(), n = n && n.getClosetBlock();
var o = e.get("parent");
if (f = e, d = o, h = (h = n) || f, d && d.get("type") == c.blockquote && (s.collapsed || !f.get("before") && !h.get("after"))) a.addUndoForUnwrap(i, o), o.unwrap(r);
else {
var l = new u({
type: t,
in: e.get("in")
});
l.wrap(e, n, r), a.addUndoForWrap(i, l)
}
var f, h, d
}(n, i, o) : function(n, i, o, l, f) {
var h = function(t, e) {
e = e || t;
var n = t.get("parent");
if (s.collapsed) {
if (!t.get("before") && !e.get("after") && n && u.isType(n.get("parent"), c.list)) return n.get("parent")
} else if (n && u.isType(n.getClosetBlock(), c.list)) return n.getClosetBlock()
}(n, i),
m = h ? d(h) : void 0;
if (e)
if ("none" == l) {
if (!h) return;
l = m
} else if (h && l == m) return;
if (h) m == l ? (h.get("children").map(function(t) {
a.addUndoForUnwrap(o, t), t.unwrap()
}), a.addUndoForUnwrap(o, h), h.unwrap(r)) : (o.undo.push(a.buildReplaceUndo(h)), h.set("pattern", void 0), k(h, l), r.findElemById(h.id).replaceWith(h.toHTML()), o.redo.push(a.buildReplaceUndo(h)));
else {
for (var v, p = n, g = [], b = (i = i || n).get("after"); p && p != b;) {
var y;
v = p, File.option.ignoreLineBreak || ((y = x(p, o, f)) && y[0] && (v = p = n = y[0]), y && y[1] && (b = y[1]));
var w = new u({
type: c.list_item,
in: n.get("in")
});
p = p.get("after"), w.wrap(v, v, r, !0), g.push(w), a.addUndoForWrap(o, w)
}
k(h = new u({
type: c.list,
in: n.get("in")
}), l);
var F = g[0],
_ = g.last();
if (t == u.ListType.task)
for (var $ = F; $ != _.get("after");) $.set("style", u.ListType.task), $ = $.get("after");
h.wrap(F, _, r), a.addUndoForWrap(o, h), r.refresh()
}
}(n, i, o, t, l), o.redo.push(l), this.editor.undo.exeCommand(l), this.editor.undo.register(o), this.editor.brush.resume(), this.editor.refocus(), this.editor.selection.scrollAdjust())
}
}
function k(t, e) {
e != u.ListType.ol && e != u.ListType.ul || (t.set("style", e), t.get("children").map(function(t) {
t.unset("style"), t.unset("checked")
})), e == u.ListType.task && (t.set("style", u.ListType.ul), t.get("children").map(function(t) {
t.set("style", u.ListType.task)
}))
}
function x(t, e, n) {
if (!u.isType(t, c.paragraph)) return t;
var i = t.get("text").split(/\n/g) || [];
if (i.length < 2) return t;
var o = n.startId == t.cid,
s = n.endId == t.cid,
l = n.start == n.end;
if (o && s) {
e.undo.push(a.buildReplaceUndo(t));
var f, h = [],
d = t;
t.set("text", i[0]);
for (var m, v = t, p = 1; p < i.length; p++) {
var g = i[p];
if (n.start > i[p - 1].length + i[p].length && !l) i[p] = t.get("text") + "\n" + g, t.set("text", i[p]);
else if (f = new u({
type: c.paragraph,
text: g
}), d.insert(f), d = f, h.push(f), o && n.start > i[p - 1].length ? (n.startId = f.cid, n.start -= i[p - 1].length + 1, v = f) : o = !1, s && n.end > i[p - 1].length) {
if (n.endId = f.cid, n.end -= i[p - 1].length + 1, !l && p < i.length - 1 && n.end <= i[p].length) {
m = new u({
type: c.paragraph,
text: i.slice(p + 1).join("\n")
}), d.insert(m), h.push(m);
break
}
} else s = !1
}
return (t.get("text").indexOf("\n") > -1 || v != t) && (r.findElemById(t.cid).replaceWith(t.toHTML()), e.redo.push(a.buildReplaceUndo(t))), m && r.findElemById(t.cid).after(m.toHTML()), a.addUndoForInsertArray(e, h), [v, m]
}
}
},
changeHeadingLevel: function(t, e, n) {
var i, r, o = null;
t.get("type") == c.paragraph ? n && (i = /h(\d)/.exec(n)) ? r = i[1] - 0 : e && (o = "header6") : t.get("type") == c.heading && (r = t.get("depth") - 0), void 0 !== r && (7 == (r -= e ? 1 : -1) ? o = "paragraph" : r > 0 && (o = "header" + r)), o && this.changeBlock(o)
}
}),
y = {
SyntaxMap: {
strong: ["**", "**"],
em: ["*", "*"],
code: ["`", "`"],
del: ["~~", "~~"],
underline: ["<u>", "</u>"],
footnote: ["[^", " ]"],
link: ["[", "]()"],
image: ["![", "]()"],
highlight: ["==", "=="],
superscript: ["^", "^"],
subscript: ["~", "~"],
inline_math: ["$", "$"],
comment: ["\x3c!--", "--\x3e"]
},
NormalBlockMap: {
line: "Paragraph",
paragraph: "Paragraph",
header1: "Header 1",
header2: "Header 2",
header3: "Header 3",
header4: "Header 4",
header5: "Header 5",
header6: "Header 6",
def_link: "Link Reference",
def_footnote: "Footnotes"
},
InsertInline: ["link", "image", "footnote", "inline_math"],
LinkList: ["autolink", "reflink", "link"],
NoInline: ["hr", "fences", "def_link", "code", "meta_block", "raw_edit", "math_block", "toc", "comment", "citation", "tag", "atag", "imgtag", "html_block"],
Selectable: ["hr", "math_block", "toc", "html_block", "fences"],
InsertBlock: ["table", "fences", "hr"],
StyleToNameMap: {
paragraph: "Paragraph",
header1: "Heading 1",
header2: "Heading 2",
header3: "Heading 3",
header4: "Heading 4",
header5: "Heading 5",
header6: "Heading 6",
def_link: "Link Reference",
def_footnote: "Footnotes",
table: "Table",
fences: "Code Fences",
blockquote: "Quote",
toc: "Table of Contents",
hr: "Horizontal Line",
meta_block: "YAML Front Matter",
ol: "Ordered List",
ul: "Unordered List",
tasklist: "Task List",
html_block: "HTML Block",
strong: "Strong",
em: "Emphasis",
code: "Code",
del: "Strike",
highlight: "Highlight",
inline_math: "Inline Math",
math_block: "Math Block",
superscript: "Superscript",
subscript: "subscript",
image: "Image",
footnote: "Superscript",
autolink: "Hyperlink",
reflink: "Hyperlink",
link: "Hyperlink",
url: "Hyperlink",
underline: "Underline",
comment: "Comment",
citation: "Citation"
}
};
y.NameMapToStyle = {};
for (var w in y.StyleToNameMap) y.NameMapToStyle[y.StyleToNameMap[w].toLowerCase()] = w;
y.InsertQuery = '[md-inline="' + y.InsertInline.join('"],[md-inline="') + '"]', y.getMenuBlockType = function(t) {
var e = t.get("type");
switch (e) {
case c.heading:
return "header" + t.get("depth");
case c.list:
return t.get("style")
}
return e
}, b.CONST = y, n.exports = b
}), $__System.registerDynamic("44", ["12", "14", "13", "1b", "1c", "1d"], !0, function(t, e, n) {
"use strict";
this || self, t("12"), t("14");
var i = t("13"),
r = t("1b").SnapFlag,
o = (i.Node, i.TYPE, t("1c"), t("1d")),
a = {
"(": ")",
"[": "]",
"{": "}",
'"': '"',
"'": "'",
"~": "~",
"^": "^",
"=": "=",
"*": "*",
"`": "`",
$: "$",
_: "_"
},
s = null;
var u = null;
var c = null;
e.hanldePair = function(t, e, n, i, s, u) {
if (!File.option.noPairingMatch) {
var l, f, h, d;
if (/^[\]\)\}'"]$/.exec(e)) {
if (t.undo.endSnap(), l = t.findElemById(n.cid).rawText(), e === l.substring(i.start, i.start + 1)) return w(), s || !0;
if ("'" == e || '"' == e) {
if ("" == l) return F();
f = (d = l.substring(0, i.start)).slice(-1);
var m = "'" == e;
if (o.shouldTriggerReplaceQuote(!0) && -1 == "\"'".indexOf(o.userQuote(m ? 2 : 0)) && o.shouldTriggerReplace(t, u)) {
if (h = l.substring(i.start, i.start + 1), o.userQuote(m ? 3 : 1) == h) return w(), s || !0;
if (o.userQuote(m ? 2 : 0) == f) return function(e) {
var i = t.selection.getRangy(),
o = document.createTextNode(e);
return i.insertNode(o), o.parentElement.normalize(), w(), s && t.undo.register(s), t.undo.addSnap(n.cid, r.REPLACE), !0
}(o.userQuote(m ? 3 : 1))
}
if (e != f && "\\" != f && !/\w/.exec(l.substring(Math.max(0, i.start - 1), i.start + 1)) && ! function(t, e) {
for (var n, i, r = t.length, o = 0; o < r; o++) {
var a = t[o];
"'" != a && '"' != a || (n ? n == a ? (n = null, i = null) : i = i ? null : a : n = a)
}
return e == n || e == i
}(d, e)) return F()
}
} else if (/^[\[\(\{]$/.exec(e)) {
if (t.undo.endSnap(), h = (l = t.findElemById(n.cid).rawText()).substring(i.start, i.start + 1), !/[^\[\]{}()"'\s`>$]/.exec(h)) return F()
} else if (File.option.autoPairExtendSymbol && function() {
if (!c) {
var t = "*`_";
File.option.enableInlineMath && (t += "$"), c = new RegExp("^[" + t + "]$")
}
return c
}().exec(e)) {
if (t.undo.endSnap(), u && u.commonAncestorContainer && u.commonAncestorContainer.parentElement && ("CODE" == u.commonAncestorContainer.parentElement.tagName && "`" != e || "SCRIPT" == u.commonAncestorContainer.parentElement.tagName && "$" != e)) return;
if (l = t.findElemById(n.cid).rawText(), File.option.enableInlineMath && "$" == l.substring(i.start - 1, i.start) && /[*`^_~=]/.exec(e)) return;
var v = (d = d || l.substring(0, i.start))[d.length - 1] || "";
if ("\\" == v) return !1;
h = l.substring(i.start, i.start + 1);
var p = l.substring(i.start + 1, i.start + 2),
g = /[*_]/.exec(e);
if (h == e) {
if (g) {
if (g && p) return w() || !0;
var b = $(t.selection.getRangy().commonAncestorContainer);
return b.closest(".md-after").length && b.parent().parent("[md-inline='strong'], [md-inline='em']").length ? w() || !0 : (d = l.substring(0, i.start), /[*_]$/.exec(d) ? F() : w() || !0)
}
return w() || !0
}
var y = 0 == v.trim().length;
if (y || ! function(t, e) {
if ("`" == e && /``$/.exec(t)) return !0;
t.replace(/\\[*`_$]/g, ""), "_" == e && (t = t.replace(/([a-z])_([a-z])/gi, ""));
for (var n = t.length, i = !1, r = 0; r < n; r++) t[r] == e && (i = !i);
return i
}(d, e)) {
if (y && !/^[^\s\>\)\]}'";:.,?!~*\/&#=_+-]/.exec(h)) return F();
if ((v + "a").trim().split(/\b/).length > 1) return F()
}
}
return !1
}
function w() {
var e = t.selection.rangy.createRange();
i.end++, i.start++, e.moveToBookmark(i), e.select(e.isBackward), s && s.redo.push(t.selection.buildUndo())
}
function F() {
var i = t.selection.getRangy(),
c = document.createTextNode(e + a[e]);
i.insertNode(c), o.shouldTriggerReplaceQuote(!0) && /['"]/.exec(e) && o.shouldTriggerReplace(t, u) && o.replaceQuote(c);
var l = c.textContent.toString().length > 2;
return c.parentElement.normalize(), w(), l && w(), s && t.undo.register(s), t.undo.addSnap(n.cid, r.REPLACE), !0
}
}, e.surroundPair = function(t, e, n) {
if (!File.option.noPairingMatch) {
var i, u, c, l = $(n.commonAncestorContainer).closest("[cid]"),
f = $(n.commonAncestorContainer).closest(".md-def-content:not(.md-def-url)");
if ((l.length && !l.find("[cid], .md-def-name").length || f.length) && function() {
if (!s) {
var t = "\\{\\(\\[\"'";
File.option.autoPairExtendSymbol && (t += "*`~_", File.option.enableInlineMath && (t += "$"), File.option.enableSuperscript && (t += "^"), File.option.enableHighlight && (t += "=")), s = new RegExp("^[" + t + "]$")
}
return s
}().exec(e)) {
u = t.findNodeByElem(l), l = f.length ? f : l, i = n.getBookmark(l[0]), c = u.get("text"), u.set("text", c.substring(0, i.start) + e + c.substring(i.start, i.end) + a[e] + c.substring(i.end)), (n = t.selection.rangy.createRange()).moveToBookmark(i), t.selection.deRange(n);
var h = document.createTextNode(e),
d = document.createTextNode(a[e]);
return n.insertNodeAtEnd(d), n.insertNode(h), i.start++, i.end++, n.moveToBookmark(i), n.select(n.isBackward), o.shouldTriggerReplaceQuote(!0) && /['"]/.exec(e) && !/['"]/.exec(o.userQuote('"' == e ? 0 : 2)) && o.shouldTriggerReplace(t, n) && (o.replaceQuote(h, d), n.moveToBookmark(i), n.select(n.isBackward)), t.undo.addSnap(u.cid, r.REPLACE), !0
}
}
}, e.tryRemovePairStart = function(t, e) {
var n = e.toString();
if (!File.option.noPairingMatch && (1 != e.endOffset || !$(e.endContainer).closest(".md-after, .md-before").length) && (function() {
if (!u) {
var t = "\\{\\(\\[\"'";
File.option.autoPairExtendSymbol && (t += "*`~_", File.option.enableInlineMath && (t += "$"), File.option.enableSuperscript && (t += "^")), u = new RegExp("[" + t + "]")
}
return u
}().exec(n) || o.userQuote(0, !0) == n || o.userQuote(2, !0) == n)) {
var i = $(e.commonAncestorContainer).closest("[cid]"),
r = i.text(),
s = e.getBookmark(i[0]),
c = r.substring(s.end, s.end + 1);
if (a[n] == c || o.userQuote(0, !0) == n && o.userQuote(1, !0) == c || o.userQuote(2, !0) == n && o.userQuote(3, !0) == c) return s.end++, e.moveToBookmark(s), e
}
}
}), $__System.registerDynamic("45", ["12", "14", "13", "1b", "1c", "19", "42", "43", "2b", "46", "29", "31", "44"], !0, function(t, e, n) {
this || self, t("12"), t("14");
var i = t("13"),
r = t("1b"),
o = r.SnapFlag,
a = i.Node,
s = i.TYPE,
u = (i.NodeCollectionUtils, t("1c"), t("19"), t("42")),
c = (t("43"), t("2b")),
l = (t("46"), t("29"), t("31"), t("44")),
f = (window.reqnode && reqnode("electron").remote, "skipCommand"),
h = $("content"),
d = function(t, e) {
var n = e.get("parent"),
i = n && n.get("parent");
if (i && i.get("style") == a.ListType.task && !n.get("before") && a.isType(n, s.paragraph)) {
var o = r.makeEmptyCommand(t.selection.buildUndo());
return o.undo.push(r.buildReplaceUndo(i)), i.unset("style"), i.unset("checked"), t.findElemById(i.cid).replaceWith(i.toHTML()), o.redo.push(r.buildReplaceUndo(i)), t.undo.exeCommand(o.undo[0]), o.redo.push(t.selection.buildUndo()), o
}
},
m = function(t, e, n) {
if (a.isType(e.get("parent"), s.blockquote) && (n || !e.get("before"))) {
var o = r.makeEmptyCommand(t.selection.buildUndo()),
u = e.upStream();
return r.append(o, u.command), t.findElemById(u.oldCid).replaceWith(u.newHtml), t.undo.exeCommand(o.undo[0]), o.redo.push(t.selection.buildUndo()), o
}
if (a.isType(e.get("parent"), s.list_item) && (n || !e.get("parent").get("before") && !e.get("before"))) {
o = r.makeEmptyCommand(t.selection.buildUndo());
var c = e.get("parent"),
l = c.get("parent");
o.undo.push(r.buildReplaceUndo(l)), l.unset("start"), c.set("parent", null), c.set("after", null), l.insert(c, !0);
var f = c.unwrap();
return r.addUndoForInsertArray(o, f), t.findElemById(l.id).before(i.NodeCollectionUtils.toHTML(f)), l.get("children").length ? (t.findElemById(l.id).replaceWith(l.toHTML()), o.redo.push(r.buildReplaceUndo(l))) : (r.addUndoForRemove(o, l), l.remove(), t.findElemById(l.id).remove()), t.selection.jumpIntoElemBegin(t.findElemById(f[0].id)), o.redo.push(t.selection.buildUndo()), o
}
},
v = function(t, e, n, i) {
var o = r.makeEmptyCommand(t.selection.buildUndo());
return o.undo.push(r.buildReplaceUndo(e)), e.set("type", s.paragraph), e.clearChildren(), n ? e.set("text", "") : e.set("text", e.get("text").replace(/\u200B|(\r?\n)/g, "")), a.normalizeNode(e), o.redo.push(r.buildReplaceUndo(e)), t.findElemById(e.id).replaceWith(e.toHTML()), t.selection.jumpIntoElemBegin(t.findElemById(e.id)), o.redo.push(t.selection.buildUndo()), !i && $(t.sessionStr).trigger("cursorChange"), o
},
p = function(t, e, n, i) {
if (e && e.length) {
n && n.preventDefault();
var o = t.findNodeByElem(e),
a = r.makeEmptyCommand(t.selection.buildUndo());
return o ? (o.set("text", ""), a = r.append(a, v(t, o))) : (o = t.findNodeByElem(e.closest("[mdtype]")), a.undo.push(r.buildReplaceUndo(o)), t.selection.moveLeftOrRight(!0, n), e.remove(), t.store(o.id), a.redo.push(r.buildReplaceUndo(o)), a.redo.push(t.selection.buildUndo())), !i && t.undo.register(a), a
}
},
g = function(t, e, n, g, b) {
var y, w, F, k, x = t.selection.includeTrailMeta(t.selection.getRangy()),
_ = x && t.selection.deRange(x.cloneRange()),
E = document.activeElement,
C = !1,
A = x;
function S(t, e, n) {
var i, r = t;
if (t == e) return null;
for (i = t.get(n); i;) $("[cid='" + i.id + "']").remove(), i.remove(), i = t.get(n);
return S(t.get("parent"), e, n), r
}
function T(t, e, n, i, o) {
var s, u, l, f = e.cloneRange(),
h = t.findElemById(n.id);
return f.setEndAfter(h[0]), t.selection.deRange(f), u = t.findNodeByElem(t.getMarkElem(f.startContainer)), !o && $(f.startContainer).closest("table").length ? (r.append(i, O(t, f, !0)), u = t.findNodeByElem($(f.startContainer).closest("[mdtype='table']")), n.contains(u) && (S(u, n, "after"), 0 === u.getText().length) ? (r.append(i, v(t, u)), "abortAndSkipCursor") : "abort") : (i.undo.push(r.buildReplaceUndo(n)), s = $(f.extractContents()), a.isType.apply(null, [n].concat(c.CONST.Selectable)) && r.append(i, v(t, n, !0, !0)), t.store(u, !0), t.findElemById(u.cid).replaceWith(u.toHTML()), l = S(u, n, "after"), !!(s.text().length || s.find("img").length || l) && (i.redo.push(r.buildReplaceUndo(n)), u))
}
function M(t, e, n, i, o) {
var a, s, u, c = e.cloneRange(),
l = t.findElemById(n.id);
if (c.setStartBefore(l[0]), t.selection.deRange(c), !o && $(c.endContainer).closest("table").length) return r.append(i, O(t, c, !0)), s = t.findNodeByElem($(c.endContainer).closest("[mdtype='table']")), "abort";
i.undo.push(r.buildReplaceUndo(n)), s = t.findNodeByElem(t.getMarkElem(t.selection.getEndNode(c))), a = $(c.extractContents()), t.store(s, !0);
var f = t.findElemById(s.cid);
if (u = S(s, n, "before"), a.text().length || a.find("img").length || u) {
for (i.redo.push(r.buildReplaceUndo(n)); f.parent().closest(".md-task-list-item").length;) f = f.parent().closest(".md-task-list-item");
return f.hasClass("md-task-list-item") ? f.replaceWith(t.findNodeByElem(f).toHTML()) : f.replaceWith(s.toHTML()), s
}
return f.replaceWith(s.toHTML()), !1
}
function D(t, e, n, i, o, u, c) {
var l, f, h, d;
function m(t, e) {
return t == e || t.get("before") || t.get("after") ? t : m(t.get("parent"), e)
}
var v = a.isEmptyBlock(i);
if (!v || i == o || a.isEmptyBlock(o) && !c)
if (v && i == o && o.isBlock()) o.set("type", s.paragraph), o.set("text", ""), o.clearChildren(), t.findElemById(o.id).replaceWith(o.toHTML()), t.selection.jumpIntoElemBegin(t.findElemById(o.id)), u.redo.push(t.selection.buildUndo());
else {
if (console.assert(e != n, "Error on spliceStartAndEnd"), e != n) {
if (l = n.safeGetStrAttr("text"), d = m(n, o), r.addUndoForRemove(u, d), t.findElemById(d.id).remove(), d.remove(), f = $(e.toHTML()).rawText().length, u.undo.push(r.buildReplaceUndo(i)), a.isType(e, s.def_link))
if (e.safeGetStrAttr("title").length) e.set("title", e.get("title") + l);
else {
var p = /["']([^"]*)["']\s*$/g.exec(l);
l = l.replace(/"([^"])*"\s*$/, ""), p && e.set("title", p[1]), e.set("href", e.get("href") + l)
}
else e.set("text", e.safeGetStrAttr("text") + l);
if (d != o && o !== n && o.get("before") == i && a.isType(i, s.list_item)) {
var g = o.getFirstChild();
g.set("before", i.getLastChild()), o.giveChildrenTo(i, g), r.addUndoForRemove(u, o), t.findElemById(o.id).remove(), o.remove()
}
u.redo.push(r.buildReplaceUndo(i)), t.findElemById(i.id).replaceWith(i.toHTML()), h = t.findElemById(e.id)
}((h = t.findElemById(e.id)).hasClass("md-def-link") || h.hasClass("md-def-footnote")) && h.attr("contenteditable", "true"), t.undo.exeCommand({
type: "cursor",
id: e.id,
start: f,
end: f
}), u.redo.push(t.selection.buildUndo())
}
else t.findElemById(i.id).remove(), r.addUndoForRemove(u, i), i.remove(), d = m(n, o), t.findElemById(d.id).replaceWith(d.toHTML()), t.selection.jumpIntoElemBegin(t.findElemById(d.id))
}
function L(t, e) {
var n = e.get("before");
function i(e) {
var n = r.makeEmptyCommand(t.selection.buildUndo());
return r.addUndoForRemove(n, e), t.findElemById(e.id).remove(), e.remove(), n.redo.push(t.selection.buildUndo()), n
}
return a.isType(n, s.hr) ? i(n) : n && !a.isEmptyBlock(e) && a.isEmptyBlock(n) ? i(n) : !n && a.isType(e.get("parent"), s.list_item) && (n = e.get("parent").get("before")) && 1 == n.get("children").length && a.isEmptyBlock(n.get("children").at(0)) ? i(n) : void 0
}
function R(t, i) {
if (a.isType(i, s.table_cell)) {
var o = i.get("parent").get("parent");
if (e && !n && !i.get("before") && !i.get("parent").get("before") && t.tableEdit.isTableEmpty(o)) return t.tableEdit.deleteTable(t.findElemById(o.cid), !0);
var c = u.getSibling(i, "before");
return c && (F = r.makeEmptyCommand(t.selection.buildUndo()), t.selection.jumpIntoElemEnd(t.findElemById(c.id)), F.redo.push(t.selection.buildUndo())), F
}
}
function B(t, e) {
if (a.isType(e.get("parent"), s.list_item) && e.get("parent").get("before") && !e.get("before")) return function(t, e) {
var n, o = r.makeEmptyCommand(t.selection.buildUndo()),
a = e.get("before"),
s = a.get("children").at(a.get("children").length - 1).getLastBrother();
return o.undo.push(r.buildReplaceUndo(a.get("parent"))), t.findElemById(e.id).remove(), s.insert(e), n = e.unwrap(), o.redo.push(r.buildReplaceUndo(a.get("parent"))), t.findElemById(s.id).after(i.NodeCollectionUtils.toHTML(n)), t.selection.jumpIntoElemBegin(t.findElemById(n[0].id)), o.redo.push(t.selection.buildUndo()), o
}(t, e.get("parent"))
}
function I(t, e) {
if (a.isType(e, a.backToParagraphBeforeDelete)) return t.stylize.changeBlock(s.paragraph, e), f
}
function N(t, e, n, i, o) {
for (var u = [R, L, d, m, B, I], c = null, l = 0; l < u.length; l++)
if (c = u[l](t, e)) return c;
if (n = n || e, o = o || n.get("before"), i = i || o && o.getVeryFirst(!0), !c && i && D(t, i, e, o, n, c = r.makeEmptyCommand(t.selection.buildUndo())), !c && !i && a.isType(e, s.paragraph) && a.isEmptyBlock(e) && e.get("after")) {
c = r.makeEmptyCommand(t.selection.buildUndo());
var f = e.get("after").cid;
r.addUndoForRemove(c, e), e.remove(), t.findElemById(e.cid).remove(), t.selection.jumpIntoElemBegin(t.findElemById(f)), c.redo.push(t.selection.buildUndo())
}
return c
}
function O(t, e, n) {
var i, o = t.selection.getDetailPos(e.startContainer, e.startOffset),
u = t.selection.getDetailPos(e.endContainer, e.endOffset),
c = r.makeEmptyCommand(),
l = t.getMarkElem(o[0]),
f = t.getMarkElem(u[0]),
h = l.closest('[mdtype="table"]'),
d = t.findNodeByElem(h),
m = t.findNodeByElem(l),
v = t.findNodeByElem(f);
if (n || ((i = e.cloneRange()).collapse(!0), i = t.selection.buildUndo(i)), e.setStart(o[0], o[1]), e.setEnd(u[0], u[1]), m == v) return e.collapsed || !a.isType(m, s.table_cell) || l[0] != e.commonAncestorContainer && !l[0].contains(e.commonAncestorContainer) || (c.undo.push(r.buildReplaceUndo(m)), e.extractContents(), t.store(m, !0), c.redo.push(r.buildReplaceUndo(m)), c.redo.push(t.selection.buildUndo(e))), c;
c.undo.push(r.buildReplaceUndo(d));
var p, g, b = T(t, e, m, c, !0),
y = M(t, e, v, c, !0);
for (b && (b.unset("marginLeft"), b.unset("marginRight")), y && (y.unset("marginLeft"), y.unset("marginRight")), p = t.tableEdit.getSibling(m, "after"); p && p != v;) p.set("text", ""), p.unset("marginLeft"), p.unset("marginRight"), g = !0, p = t.tableEdit.getSibling(p, "after");
return b || y || g ? (t.findElemById(d.id).replaceWith(d.toHTML()), c.redo.push(r.buildReplaceUndo(d))) : c.undo.pop(), n || (c.redo.push(i), t.undo.exeCommand(i)), c
}
function j(e) {
return t.selection.deRange(e), y = t.getMarkElem(e.commonAncestorContainer), w = t.nodeMap.allNodes.get(y.attr("cid")), k = e.getBookmark(y[0]), y.length && w && !w.get("children").length && 0 == k.start && !n
}
function P() {
var n = null;
if (a.isType(w.get("before"), a.TYPE.hr, a.TYPE.toc) && (n = w.get("before")), e && e.preventDefault(), $(".md-tooltip-remove").remove(), y.prev("[cid]").addClass("md-expand"), (F = N(t, w)) === f);
else if (!g) return n && (t.selection.selectNode(n), F.redo.push(t.selection.buildUndo())), t.undo.register(F), t.refresh(), n || t.findElemById(w.cid).trigger("refocus"), t.refocus(), t.selection.scrollAdjust(), F
}
var q = $(document.activeElement).closest(".CodeMirror");
if (q.length) {
q[0].CodeMirror.execCommand("delCharBefore")
} else {
if (a.isType(E.getAttribute("mdtype"), a.TYPE.hr, a.TYPE.toc)) {
var U = $(E).closest("[mdtype]");
return p(t, U, e, g)
}
if (E.getAttribute("mdtype") == s.math_block) return e && e.preventDefault(), t.mathBlock.remove(E.getAttribute("cid")), F;
if (n && "Backspace" != n ? !0 === n && (n = "Delete") : n = !1, _) {
if ($(_.commonAncestorContainer).closest("[mdtype='table_row']").length && e && e.shiftKey && (File.isMac ? e.metaKey : e.ctrlKey)) return e.preventDefault(), t.tableEdit.deleteRow(), f;
if (_.collapsed) {
if (n) {
if ("Delete" == n && (z = _, t.selection.deRange(z), y = t.getMarkElem(z.commonAncestorContainer), w = t.nodeMap.allNodes.get(y.attr("cid")), k = z.getBookmark(y[0]), "Delete" == n && a.isType(y.attr("mdtype"), s.paragraph, s.heading) && !w.get("children").length && 0 == k.start && 0 == y.text().length && (F = w.get("after") ? function(e, n) {
var i = r.makeEmptyCommand(t.selection.buildUndo());
return t.findElemById(e.cid).remove(), r.addUndoForRemove(i, e), e.remove(), t.selection.jumpIntoElemBegin(t.findElemById(n)), i.redo.push(t.selection.buildUndo()), i
}(w, w.get("after").getVeryFirst().cid) : null))) return g || (t.undo.register(F), t.refocus()), e && e.preventDefault(), F
} else if (j(_)) return P();
if (!0 === (_ = function() {
var i = e && (File.isNodeHtml ? e.ctrlKey : e.altKey),
r = !1;
return "delSelection" == n ? t.selection.getRangy() : (i || (r = t.selection.extendCharFromCollapse(_, !n)), r || (C = !0, n ? (window.getSelection().modify("extend", "forward", i ? "word" : "character"), _ = t.selection.getRangy()) : (window.getSelection().modify("extend", "backward", i ? "word" : "character"), _ = i ? (/\n/.exec(window.getSelection().toString()) ? (_.setStart(_.startContainer, 0), _.select(_.isBackward)) : _ = t.selection.getRangy(), _) : t.selection.getRangy())), !n && /^\u200b|\007F$/g.exec(_.toString()) ? (t.selection.extendCharFromCollapse(_, !0), j(_) || _) : _)
}())) return P();
if (!n && l.tryRemovePairStart(t, _) && (b = !1), "delSelection" == n && _ && _.collapsed) return e && e.preventDefault(), r.makeEmptyCommand()
} else ! function(e) {
if (t.selection.selectWordTime && File.isMac)
if (n) "Delete" == n && e.endContainer.nodeType === document.TEXT_NODE && (i = e.endContainer.textContent.charAt(e.endOffset), /\s/.exec(i) && (e.endOffset++, A = e.cloneRange()));
else if (e.startOffset > 0 && e.startContainer.nodeType === document.TEXT_NODE) {
var i = e.startContainer.textContent.charAt(e.startOffset - 1);
/\s/.exec(i) && (e.startOffset--, A = e.cloneRange())
}
}(_);
var z;
(H = _).startContainer.parentElement && H.startContainer.parentElement.classList.contains("md-pants") && 0 == H.startOffset && H.setStart(H.startContainer.parentElement, 0);
var H;
if (b && function() {
if (!(_.commonAncestorContainer.nodeType != document.TEXT_NODE || 0 == n && _.startOffset <= 1 || "Delete" == n && _.endOffset >= _.commonAncestorContainer.textContent.length - 1) && t.selection.getRangy().endContainer == _.endContainer) return !0
}()) return null;
if (t.selection.selectWordTime = null, t.selection.deRange(_), y = t.getMarkElem(_.commonAncestorContainer), w = t.nodeMap.allNodes.get(y.attr("cid")), C && (window.getSelection().removeAllRanges(), window.getSelection().addRange(x.nativeRange)), y.length && !w.get("children").length) {
if (y.get("type") !== s.fences) return function(t, e, n, i, u) {
var c, l = 3 !== n.commonAncestorContainer.nodeType,
f = t.getNode(i.attr("cid"));
u || (t.undo.addSnap(f.cid, o.NONE), t.brush.clearAndPause());
var d = t.selection.buildUndo(A);
if ((F = r.makeEmptyCommand(d)).undo.push(r.buildReplaceUndo(f)), !l && d && d.startId == d.endId && a.isType(f, s.line)) {
var m = (i.text().substring(0, d.start).match(/\u200b/g) || []).length,
v = (i.text().substring(0, d.end).match(/\u200b/g) || []).length;
t.undo.lastSnap && t.undo.lastSnap.selection.end == d.end && t.undo.lastSnap.selection.start == d.start ? (t.undo.lastSnap.selection.start -= m, t.undo.lastSnap.selection.end -= v) : (d.start -= m, d.end -= v)
}
var p = h.scrollTop(),
g = n.commonAncestorContainer;
if (!g.contains(document.querySelector("#write"))) {
if (g.parentElement.getAttribute("md-inline")) {
var b = g.parentElement;
1 == i.children().length && i.children()[0] == b && (b.textContent.length != n.toString().length || b.style.display || (b.style.display = "inline-block"))
}
if (c = n.extractContents(), p != h.scrollTop() && t.undo.clearEventTimer(), t.store(f.cid), t.wordCount.quickUpdate(f, !0), F.redo.push(r.buildReplaceUndo(f)), a.isType(f, s.def_link, s.def_footnote) ? t.selection.deRange(n, !0) : f.getText().length || (t.findElemById(f.cid).html($(f.toHTML()).html()), n = t.selection.getRangy(), t.selection.deRange(n, !0)), F.redo.push(t.selection.buildUndo()), c.querySelector("img"), n.collapse(!1), l) {
var y = i.attr("cid");
l = t.selection.saveSelection(i, n), n.setStart(i[0], 0);
var w = (n.toString().match(/(:\u200b)|(\u200b:)/g) || []).length;
t.store(y, !0), i.replaceWith(t.nodeMap.allNodes.get(y).toHTML()), i = t.findElemById(y), l.start -= w, l.end -= w, t.selection.restoreSelection(i, l), t.focusCid = null, t.refocus()
}
return t.brush.addToQueue(i.attr("cid")), !u && t.brush.resume(!0), e && (e.preventDefault(), $("#write").trigger("input")), u || null != e || t.undo.register(F), F
}
}(t, e, _, y, g);
F = p(t, y, e, g)
} else e && e.preventDefault(), $(".md-tooltip-remove").remove(), F = function(t, e, n) {
if (!document.contains(e.startContainer) && !(e = t.selection.getRangy())) return r.makeEmptyCommand();
var i = t.selection.getDetailPos(e.startContainer, e.startOffset),
o = t.selection.getDetailPos(e.endContainer, e.endOffset),
s = t.getMarkElem(i[0]),
u = t.getMarkElem(o[0]),
c = t.findNodeByElem(s),
l = t.findNodeByElem(u);
if (!c || !l) return r.makeEmptyCommand();
var f = a.getTreePosition(c, l),
h = f[1],
d = f[2],
m = r.makeEmptyCommand(t.selection.buildUndo()),
v = e.cloneRange();
if (s[0] == u[0]) return m;
if (v.collapse(!0), v = t.selection.buildUndo(v), e.setStart(i[0], i[1]), e.setEnd(o[0], o[1]), $(e.commonAncestorContainer).closest('[mdtype="table"]').length) return r.append(m, O(t, e));
var p = T(t, e, h, m),
g = M(t, e, d, m),
b = h.get("after"),
y = [];
for (e = t.selection.getRangy(), t.selection.deRange(e, !0); b && b != d;) y.push(b), b = b.get("after");
return r.addUndoForRemoveArray(m, y, h, d), y.map(function(e) {
t.findElemById(e.id).remove(), e.remove()
}), "abort" == p || "abort" == g || "abortAndSkipCursor" == p ? ("abortAndSkipCursor" != p && (e.collapse(!0), m.redo.push(v), t.undo.exeCommand(v)), !1 === g && 0 == l.getText().length && (r.addUndoForRemove(m, l), t.findElemById(l.id).remove(), l.remove())) : p || g || y.length || n ? D(t, p || c, g || l, h, d, m, p) : m = N(t, l, d, c, h), m.redo.push(t.selection.buildUndo()), m
}(t, _, n), g || (t.undo.register(F), t.refocus(), t.refresh()), t.selection.scrollAdjust();
return F
}
}
},
b = {
"[mdtype='hr']": g,
"tr[mdtype='table_row']": u.deleteRow,
".md-toc": p
};
e.backspaceHandler = g, e.deleteSelectable = p, e.deleteLineProcessor = b, e.deleteLine = function(t) {
var e = $(document.activeElement).closest(".CodeMirror");
if (e.length) e[0].CodeMirror.execCommand("deleteLine");
else {
var n, i = t.getMarkElem();
if (i && i.length) {
for (n in b)
if (i.closest(n).length) return void b[n](t, i.closest(n));
! function(e) {
var n = e.hasClass("md-expand");
e.addClass("md-expand"), window.getSelection().modify("move", "backward", "sentence"), window.getSelection().modify("extend", "forward", "sentence"), n && e.removeClass("md-expand"), g(t, null, "delSelection")
}(i)
}
}
}, e.deleteBlock = function(t) {
t || File.editor;
var e = t.getNode(t.focusCid);
if (e) {
var n = r.makeEmptyCommand(t.selection.buildUndo());
e = e.getClosetBlock(!1), !a.isType(e, s.paragraph) || e.get("before") || e.get("after") || !e.get("parent") || a.isVirtualBlock(e.get("parent")) || (e = e.get("parent"));
var i = e.getClosetBlock(!0).getVeryFirstBrotherIncludeTopBlock(!1, !0);
i ? (t.findElemById(e.cid).remove(), r.addUndoForRemove(n, e), e.remove()) : (e.set("type", s.paragraph), e.set("text", ""), e.clearChildren(), n.redo.push(t.undo.buildReplaceUndo(e)), t.findElemById(e.cid).replaceWith(e.toHTML())), t.selection.jumpIntoElemBegin(t.findElemById(i.cid)), n.redo.push(t.selection.buildUndo()), t.refocus(i.cid), t.undo.register(n)
}
}, e.backToParagraph = v
}), $__System.registerDynamic("47", ["12", "14", "13", "1b", "1c", "19", "42", "43", "2b", "46", "18", "31", "45"], !0, function(t, e, n) {
"use strict";
this || self, t("12");
var i = t("14"),
r = t("13"),
o = t("1b"),
a = r.Node,
s = r.TYPE,
u = r.NodeCollectionUtils,
c = (t("1c"), t("19")),
l = t("42"),
f = t("43"),
h = t("2b"),
d = t("46"),
m = t("18"),
v = (t("31"), t("45")),
p = window.reqnode ? reqnode("electron").remote : null,
g = v.backspaceHandler,
b = function(t) {
return a.isEmptyBlock(t) || a.isType(t, s.list_item) && 1 == t.get("children").length && a.isEmptyBlock(t.getFirstChild())
},
y = function(t, e, n, r, u, l) {
if (e = e || (h = t.getMarkElem(), t.getNode(h.attr("cid")))) {
var f = t.getJQueryElem(window.getSelection().anchorNode),
h = t.findElemById(e.id);
a.noChangeLine(e) && (n = n.trim().split(/[\n\r]+/gi)[0]), "\n" == n && h.text().length <= r && (n = "\n​"), u && u.undo.push(o.buildReplaceUndo(e, void 0));
var d = f.closest(".md-def-link, .md-def-footnote").length;
if (d && f.hasClass("md-def-name")) h = f.closest("[cid]"), t.selection.getRangy().insertNode(document.createTextNode(i.escape(n))), e.set("ref", f.text());
else if (d && f.hasClass("md-def-url")) h = f.closest("[cid]"), n = n.replace(/\s/gi, ""), t.selection.getRangy().insertNode(document.createTextNode(i.escape(n))), e.set("href", f.text());
else if (d && f.hasClass("md-def-title")) h = f.closest("[cid]"), t.selection.getRangy().insertNode(document.createTextNode(i.escape(n))), e.set("title", f.text());
else {
var m, v = "",
p = r;
f.hasClass("md-meta-block") && 0 == f.text().length && "\n​" == n ? m = "\n\n" : (f.hasClass("md-meta-block") && v.length == r && "\n" == v[r - 1] ? r-- : d && f.closest(".md-def-content").length ? (p -= e.get("ref").length + 1, v = f.closest(".md-def-content").rawText()) : (v = h.rawText(), a.isType(e, s.meta_block) && (v = v.replace(/\n$/, ""))), m = void 0 !== p ? v.substring(0, p) + n + v.substring(p) : v.text() + n), e.set("text", m.replace("​", "")), h.html($(c.renderHtmlWithBlockMeta(e, t.brush)).html())
}
u && (t.store(e, !0), u.redo.push(o.buildReplaceUndo(e, void 0)));
var g = {
id: e.id,
type: "cursor",
start: r + n.length
};
l && (t.undo.exeCommand(g), t.brush.addToQueue(e.id)), u && u.redo.push(g), t.brush.addToQueue(e.id), h = t.findElemById(e.id), l && h.addClass("md-focus"), h.length && t.refreshUnder(h[0])
}
},
w = function(t, e, n, r, o) {
if (File.isMac) ! function(t, e, n, r) {
var o = {};
i.isDefined(t) && (o["text/html"] = A(t)[0]), i.isDefined(e) && (o["text/markhtml"] = e), i.isDefined(n) && (o["text/plain"] = n), JSBridge.clipboard.writeForMac(o, r)
}(t, e, n, r);
else if (File.isNode)
if (o) {
if ("cut_before" === File._CopyContentFlag || "cut" == o.type && t) {
if (!t) return setTimeout(p.getCurrentWindow().webContents.copy, 0), void(File._CopyContentFlag = "cut_after");
g(File.editor, null, "delSelection"), File._CopyContentFlag = !1
} else if ("cut_after" === File._CopyContentFlag) File._CopyContentFlag = !1, t = (A(p.clipboard.readHTML()) || [])[0], g(File.editor, null, "delSelection");
else if (t && !File._CopyContentFlag);
else {
if (!File._CopyContentFlag) return File._CopyContentFlag = !0, void(!t && setTimeout(p.getCurrentWindow().webContents.copy, 0));
!0 === File._CopyContentFlag && (t = (A(p.clipboard.readHTML() || t) || [])[0] || ""), File._CopyContentFlag = !1
}
null != n ? o.clipboardData.setData("text/plain", n) : r && o.clipboardData.setData("text/plain", ""), null != t ? o.clipboardData.setData("text/html", t) : r && o.clipboardData.setData("text/html", ""), null != e ? o.clipboardData.setData("text/markhtml", e) : r && o.clipboardData.setData("text/markhtml", ""), o.preventDefault()
} else r && p.clipboard.clear(), p.clipboard.write({
html: A(t)[0] || n,
text: n
}), e && (File._CopyContentFlag = "mock_copy", setTimeout(p.getCurrentWindow().webContents.copy, 0))
},
F = function(t, e, n) {
e = e || File.editor;
var i, r, o, a;
return t.find(".md-fences").toArray().map(function(t) {
i = t.getAttribute("cid"), (r = $(t)).attr("lang", r.attr("lang")), r.text(e.fences.getValue(i))
}), n && n.skipEmoji || t.find(".md-emoji").toArray().map(function(t) {
(r = $(t)).text(":" + r.attr("data-content") + ":")
}), t.find("[mdtype='math_block']").toArray().map(function(t) {
i = t.getAttribute("cid"), (r = $(t)).text(e.mathBlock.getTex(i))
}), t.find("[mdtype='html_block']").toArray().map(function(t) {
i = t.getAttribute("cid");
var n = e.getNode(i);
(r = $(t)).text(n.get("text"))
}), t.find(".md-math-after-sym").remove(), (o = t.children("li[cid]")).length && ((a = $(document.querySelector("[cid='" + o[0].getAttribute("cid") + "']").parentElement).clone()).empty().append(o).wrap("div"), t = a.parent()), t
},
k = function(t, e) {
/^\<(tbody|thead)/.exec(t) && (t = "<table mdtype='table'>" + t + "</table>");
var n = $($.parseHTML("<div>" + t + "</div>"));
return F(n, e)
},
x = function(t, e) {
t = t || File.editor;
var n = document.activeElement,
i = t.selection.getRangy();
if (t.sourceView.inSourceMode) w(null, null, File.editor.sourceView.cm.getSelection(), !0, e);
else if ("HR" == n.getAttribute("mdtype")) w(null, null, "---", !0, e);
else if (n.getAttribute("mdtype") !== s.math_block || i && !i.collapsed) {
if (isInputComponent(n) || void 0 !== n.tabindex) w(null, null, n.value || n.textContent, !0, e);
else if (window.getSelection().rangeCount) {
var r, o = "";
i.collapsed && (r = (r = $(i.startContainer).closest(".md-table-fig")).length ? k(r[0].outerHTML, t) : null), r || (r = k(i.toHtml(), t)), o = r.html(), w(null, o, D(o), !0, e)
}
} else w(null, null, "$$\n" + t.mathBlock.getTex(n.getAttribute("cid")) + "\n$$", !0, e);
File._CopyContentFlag = !1
};
function _(t, e, n) {
var i = "",
r = T(i = k(t, e).html());
return [e.export.exportCollection(r, null, {
forPrint: !0,
noStyle: !0,
exportFooter: !0,
prettyForRendering: n,
split: "\n"
}), i]
}
var E = function(t, e) {
t = t || File.editor;
var n = document.activeElement,
r = t.selection.getRangy();
if (t.sourceView.inSourceMode) w(null, null, File.editor.sourceView.cm.getSelection(), !0, e);
else if ("HR" == n.getAttribute("mdtype")) w(null, null, "<hr/>", !0, e);
else if (n.getAttribute("mdtype") !== s.math_block || r && !r.collapsed) {
if (isInputComponent(n) || 0 == n.childElementCount) {
if (n.classList.contains("md-content") && r.toString() == n.textContent) {
var o = $(n).closest(".md-image");
if (o.length) {
var a = _(o[0].outerHTML, t)[0];
return void w(null, "<pre mdtype='fences' lang='HTML'>" + i.escape(a) + "</pre>", a, !0, e)
}
}
w(null, null, n.value || n.textContent, !0, e)
} else if (window.getSelection().rangeCount) {
a = _(r.toHtml(), t)[0];
w(null, "<pre mdtype='fences' lang='HTML'>" + i.escape(a) + "</pre>", a, !0, e)
}
} else w(null, null, "$$\n" + t.mathBlock.getTex(n.getAttribute("cid")) + "\n$$", !0, e)
},
C = function(t, e) {
t = t || File.editor;
var n, i, r = document.activeElement,
o = t.selection.getRangy();
if (t.sourceView.inSourceMode) w(null, null, File.editor.sourceView.cm.getSelection(), !0, e);
else if ("HR" == r.getAttribute("mdtype")) {
var a = t.getNode(r.getAttribute("cid"));
w("<hr/>", null, a.get("text"), !0, e)
} else if (r.getAttribute("mdtype") !== s.math_block || o && !o.collapsed)
if (isInputComponent(r) || 0 == r.childElementCount) {
if (r.classList.contains("md-content") && o.toString() == r.textContent) {
if ($(r).closest(".md-image").length) return i = _(o.toHtml(), t, !0), void w(i[0], i[1], null, !0, e)
}
w(r.value || r.textContent, null, r.value || r.textContent, !0, e)
} else window.getSelection().rangeCount && (i = _(o.toHtml(), t, !0), w(i[0], i[1], null, !0, e));
else {
n = r.getAttribute("cid");
var u = t.getNode(n);
w(t.export.getSVGForExport(u, !1), "$$\n" + t.mathBlock.getTex(n) + "\n$$", "$$\n" + t.mathBlock.getTex(n) + "\n$$", !0, e)
}
},
A = function(t) {
if (!t) return "";
var e = $.parseHTML(t || ""),
n = "<!DOCTYPE html>",
i = "<!DOCTYPE html>",
r = File.option.showLineNumbersForFence ? "&nbsp;" : "";
return e ? (e.map(function(t) {
var e = $(t),
o = e.find(".md-emoji").addBack(".md-emoji");
if (e.hasClass("md-br")) return n += "<br/>", void(i += "<br/>");
o.text(function(t) {
return $(o[t]).children("[data-emoji]").attr("data-emoji")
}), e.find(".ty-table-edit, .md-meta, .md-content, .md-rawblock-tooltip").remove(), e.find("[cid].md-fences").addBack("[cid].md-fences").html(function() {
var t = this.querySelectorAll("pre.CodeMirror-line");
if (t.length) {
for (var e = [], n = 0; n < t.length; n++) t[n].innerHTML && e.push(r + t[n].innerHTML);
return e.join("<br/>")
}
return this.innerHTML
}), e.find("p, h1, h2, h3, h4, h5, h6, .md-def-link, .md-def-footnoote").css("width", ""), e.find(".md-br").text("\n"), e.find(".md-def-name").before("[").after("] "), e.find(".task-list-item > p").oldReplaceWith(function() {
return (this.previousElementSibling && "INPUT" == this.previousElementSibling.tagName ? " " : "") + this.innerHTML + (this.nextSibling ? "\n" : "")
}), e.find(".md-entity").text(function() {
return this.dataset.content
}), e.find("[contenteditable]").removeAttr("contenteditable"), n += t.outerHTML || t.textContent, t.getAttribute && t.getAttribute("mdtype") == s.toc || (e.find(".md-toc").remove(), e.find(".mathjax-block").addBack(".mathjax-block").html(function() {
try {
return File.editor.findElemById(this.getAttribute("cid")).find("script").text()
} catch (t) {
return ""
}
}).css("font-size", "1rem"), e.find("li p").oldReplaceWith(function() {
return this.innerHTML + (this.nextSibling ? "\n" : "")
}), e.find("ul, ol, .md-def-link, .md-def-footnoote, blockquote, .md-fences, .mathjax-block").after("<br/>"), e.find(".md-def-name").before("[").after("] "), i += t.outerHTML || t.textContent, a.isType(t.tagName, "UL", "OL", "PRE") ? i += "<br/>" : t.classList && t.classList.contains("md-toc") && (i += "<br/>"))
}), [n, i]) : ["", ""]
};
function S(t, e, n, i) {
e || (M.reset(!0), e = M);
var r, o, s = $($.parseHTML("<div>" + t + "</div>")[0]),
u = [],
c = s.children("[mdtype]");
return c.length ? (c.each(function() {
(o = a.reverse($(this), e, n, i)).set("before", r), r = o, u.push(o)
}), u) : n ? (s.find("[data-emoji]").text(function() {
return this.getAttribute("data-emoji")
}), s.find(".md-meta, .md-content").remove(), s.text()) : s.rawText()
}
function T(t, e, n, i, r) {
return S(t, e, !1, r)
}
var M = new r.NodeMap;
function D(t) {
var e = T(t, void 0, 0, 0, !0);
return "string" == typeof e ? e : a.markFromArr(e)
}
var L = function(t, e, n, r, c) {
var d = "";
if (File._PasteContentFlag = !1, t = t || File.editor) {
var v = "string" != typeof e || n ? null : e,
p = "string" == typeof e && n ? e : null,
w = "object" == typeof e ? e : null;
if ("INPUT" == document.activeElement.tagName || document.activeElement.classList && document.activeElement.classList.contains("ty-input")) return !0;
if ("TEXTAREA" == document.activeElement.tagName) {
if (!w && p) {
var F = $(document.activeElement).closest(".CodeMirror");
F && (F = F[0].CodeMirror).replaceSelection(p)
}
return !0
}
if (a.isType(A, s.hr)) return !1;
if ("BODY" == document.activeElement.tagName) return !1;
var k, x, _, E = t.UserOp.backspaceHandler(t, null, "delSelection", !0, !1) || o.makeEmptyCommand(),
C = t.getMarkElem(),
A = t.findNodeByElem(C),
S = {
html: v,
text: p
};
w ? (w.preventDefault(), JSBridge.clipboard.read(w, S).then(j)) : S.html || S.text ? j(S) : JSBridge.clipboard.read(null, S).then(j)
}
function M(t, e) {
return t.get("attr") && t.get("attr").trim().length ? t.get("attr") : void 0
}
function D(e, n, i, r) {
var u = t.tableEdit.TableEdit;
function c(t, e, n, i) {
var r = t.safeGetStrAttr("text"),
o = function t(e) {
return a.isType(e, a.TYPE.paragraph, a.TYPE.heading, a.TYPE.raw_edit, a.TYPE.fences, a.TYPE.table_cell) ? e.get("text") : (!a.isType(e, s.def_footnote) || M(e) && M(e)) && (!a.isType(e, s.def_link) || M(e) && M(e)) ? e.get("children").toArray().reduce(function(e, n) {
return e + t(n)
}, " ") : M(blocks[0]) || M(blocks[0]) || M(blocks[0]) || M(blocks[0]) || ""
}(n).replace(/\r?\n/g, " ");
return t.set("text", r.substr(0, e) + o + r.substr(e)), e + o.length
}
var l, f = e.get("parent").get("parent"),
h = e,
d = h;
r.undo.push(o.buildReplaceUndo(f));
var m = [];
i.forEach(function(t, e) {
t.get("type") == s.table ? m = m.concat(function(t) {
for (var e, n = t.getFirstChild().getFirstChild(), i = []; n;) e = n, i.push(n), n = u.getSibling(n), e.detach();
return t.remove(), i
}(t)) : m.push(t)
});
for (var v = 0; v < m.length && h; v++) l = c(h, 0 === v ? n : 0, m[v]), d = h, h = a.isType(m[v], s.table_cell) ? u.getSibling(h, !1, !0) : u.getNextCellInColumn(h);
t.findElemById(f.id).replaceWith(f.toHTML()), r.redo.push(o.buildReplaceUndo(f)), void 0 !== l ? t.selection.jumpInto(t.findElemById(d.id), l) : t.selection.jumpIntoElemEnd(t.findElemById(d.id)), r.redo.push(t.selection.buildUndo())
}
function L(e, n, i, o, a) {
if (!r) try {
var s = t.selection.restoreEdge(t.findElemById(e), n);
void 0 !== o ? s = t.selection.restoreEdge(t.findElemById(i), o, !0, s) : s.setEndAfter(t.findElemById(i)[0] || t.findElemById(e)[0]), t.imgEdit.tryMoveImageInRange(s, !0)
} catch (t) {
console.error(t)
}
}
function B(e, n, i, r, o, u) {
i.undo.push(t.selection.buildUndo());
var c = o(r, t.nodeMap, t, d);
if ("string" == typeof c) return N(e, n, c, i);
if (1 == c.length && n && -1 == c[0].get("text").indexOf("\n")) return N(e, n, c[0].get("text"), i);
if (0 != c.length) {
if (a.isType(e, s.table_cell)) D(e, n, c, i);
else if (a.isType(e, s.table_row, s.table));
else {
a.isType(e.get("parent"), s.list_item) ? i.undo.push(t.undo.buildReplaceUndo(e.get("parent"))) : i.undo.push(t.undo.buildReplaceUndo(e));
var l = e === t.nodeMap.getFirst() && 0 === n,
f = [];
c.map(function(t, e) {
a.isType(t, s.meta_block) && (0 != e || !l) && f.push(t)
}), f.map(function(t) {
c.remove(t)
});
var h = a.splitAt(e, n, t, !1, !0, !0);
if (O(h.prev, h.next, c, i, h.insertArray, e), h.prev && c.last()) try {
var m = h.prev.isDeleted() ? c[0] : h.prev,
v = c.last();
!h.prev.isDeleted() && a.isType(h.prev, s.list_item) && (v.isDeleted() || h.prev.contains(c.last())) && (m = h.prev.getVeryFirst()), L(m.getVeryFirst(!0, !1).cid, n, c.last().cid, void 0)
} catch (t) {
console.stackError(t)
}
}
t.undo.register(i)
}
}
function I(e, n, i, r) {
if (!e.isDeleted() && !n.isDeleted()) {
var u = e.canContainBlock() ? e.getLastChild() : e,
c = n.canContainBlock() ? n.getFirstChild() : n,
l = -1;
if (t.stylize.canContainInline(u) && t.stylize.canContainInline(c) && !a.isType(u, s.table_cell) && !a.isType(c, s.table_cell)) {
l = u.get("text").length, u.set("text", u.get("text") + c.get("text"));
var f = function t(e) {
if (e && !e.isDeleted()) {
var n = e.get("parent");
return n ? e.get("before") || e.get("after") ? e : t(n) : e
}
}(c);
return o.addUndoForRemove(i, f), f.remove(), r.remove(f), n.isDeleted() || a.isType(n, s.list_item) && a.isType(e, s.list_item) && (i.undo.push(o.buildReplaceUndo(e)), e.getLastChild().insertTillEnd(n.getFirstChild()), o.addUndoForRemove(i, n), n.remove(), r.remove(n)), i.redo.push(o.buildReplaceUndo(e)), l
}
}
}
function N(e, n, i, r) {
var u = (i = i.replace(/\u00a0/g, " ").replace(/\u200b/g, "").replace(/^[\r\n]+/g, "").replace(/[\r\n]+$/g, "")).split(/\r?\n/g);
if (u.length > 1 && !u[0].trim().length && u[1].trim().length && (u = u.slice(1)), a.isType(e, s.table_cell)) return function(e, n, i, r) {
r.undo.push(t.selection.buildUndo()), i = i.trim();
var a = null;
/\|/.exec(i) && (a = /\s*\|\s*/);
var s, u = e;
if (a) {
var c = i.split(/\n/).filter(function(t) {
return t.length
}),
f = e.get("parent"),
h = l.getColumnIndex(e);
c.map(function(i, c) {
if (f && !/^[-\s:|]+$/.exec(i)) {
var l = i.split(a);
"" == l[0] && (l = l.subarray(1)), "" == l.last() && (l = l.subarray(0, l.length - 1));
var d = f.getNthChild(h);
l.map(function(t, i) {
d && (r.undo.push(o.buildReplaceUndo(d)), 0 == c && 0 == i ? (e.set("text", e.get("text").substring(0, n) + t + e.get("text").substring(n)), s = n + t.length) : (i == l.length - 1 ? d.set("text", t + d.get("text")) : d.set("text", t), u = d, s = t.length), r.redo.push(o.buildReplaceUndo(d)), d = d.get("after"))
}), t.findElemById(f.id).replaceWith(f.toHTML()), f = f.get("after")
}
})
} else r.undo.push(o.buildReplaceUndo(e)), i = i.replace(/<br\/?>/g, "\n").replace(/\n/, "<br/>"), e.set("text", e.get("text").substring(0, n) + i + e.get("text").substring(n)), r.redo.push(o.buildReplaceUndo(e)), t.findElemById(e.id).replaceWith(e.toHTML()), s = n + i.length;
var d = t.findElemById(u.cid);
t.selection.jumpInto(d, s), r.redo.push(t.selection.buildUndo()), t.undo.register(r), d.length && t.refreshUnder(d[0]), L(e.cid, 0, u.cid, u.get("text").length)
}(e, n, i, r);
if (a.noChangeLine(e) && (u = [u[0]]), u.length <= 1 || h.CONST.NoInline.indexOf(e.get("type")) > -1) i = u.join("\n"), y(t, e, i, n, r, !0),
function(t, e, n, i, r) {
if (a.isType(e, s.paragraph) && m.BLOCK_OPEN_REG.exec(n) && m.BLOCK_OPEN_REG.exec(e.get("text"))) {
var u = r.redo.last(),
c = e.parseFrom({
skips: {
old_code: !1,
pass_format: !0
}
});
r.redo.push(o.buildReplaceUndo(e)), o.addUndoForInsertArray(r, c[1].subarray(1));
var l = c[1].last().getVeryFirst(!0),
f = u.end || n.length + i;
t.findElemById(e.id).replaceWith(c[0]), t.selection.jumpInto(t.findElemById(l.cid), f), r.redo.push(t.selection.buildUndo())
}
}(t, e, i, n, r);
else {
if (r.undo.push(t.selection.buildUndo()), a.isType(e, s.paragraph) && a.isType(e.get("parent"), s.list_item) ? r.undo.push(o.buildReplaceUndo(e.get("parent"))) : r.undo.push(o.buildReplaceUndo(e)), a.isType(e, s.paragraph) && !a.isType(e.get("parent"), s.list_item)) return function(e, n, i, r) {
var a = e.get("text");
e.set("text", a.substring(0, n) + i + a.substring(n));
var s = e.parseFrom({
skips: {
old_code: !1,
pass_format: !0
}
});
r.redo.push(o.buildReplaceUndo(e)), o.addUndoForInsertArray(r, s[1].subarray(1)), t.findElemById(e.id).replaceWith(s[0]);
var u = s[1].last().getVeryFirst(!0),
c = Math.max(u.get("text").length - (a.length - n), 0);
t.selection.jumpInto(t.findElemById(u.cid), c), r.redo.push(t.selection.buildUndo()), t.undo.register(r), t.focusCid = u.cid, t.refresh(), L(e.cid, 0, u.cid, u.get("text").length)
}(e, n, i, r);
var c = a.splitAt(e, n, t),
f = a.parseFrom(u.join("\n"), e.get("in"), {
noTop: !c.prev.get("attachTo"),
skips: {
old_code: !1,
pass_format: !0
}
}, !0);
a.isType(c.prev, s.list_item) && r.undo.push(o.buildReplaceUndo(c.prev)), O(c.prev, c.next, f[1], r, c.insertArray, e)
}
t.undo.register(r), L(e.cid, n, e.cid, n + i.length)
}
function O(e, n, i, r, c, l) {
var f, d = l.id,
m = -1;
i = function(t) {
for (var e = [], n = -2, i = 0; i < t.length; i++) {
var r = t[i];
a.isType(r, s.table_cell) ? (n !== i - 1 ? (r.set("type", s.paragraph), e.push(r)) : (e.last().set("text", e.last().get("text") + " " + r.get("text")), r.remove()), n = i) : e.push(r)
}
return e
}(i = function(t) {
var e, n, i = [],
r = t[0].get("before"),
o = t.last().get("after"),
u = t[0].get("parent");
return t.map(function(t) {
a.isType(t, s.list_item) ? (n = !0, e || (e = new a({
type: e,
in: t.get("in")
}), i.push(e)), e.append(t)) : (e = null, i.push(t))
}), n && (console.log("group list items"), i.map(function(e, n) {
0 == n ? e.set("before", r) : e.set("before", t[n - 1]), n == i.length - 1 ? e.set("after", o) : e.set("after", t[n + 1]), e.set("parent", u)
})), i
}(i)), f = i.last().getVeryFirst(!0), c = c || [n], l = l || e;
var v = c.indexOf(n),
p = !1;
if (b(n) ? (c.remove(n), n.remove(), p = !0) : a.isType(f, h.CONST.Selectable) && (f = n), !a.isType(e, s.blockquote, s.list)) {
if (a.isType(e, s.list_item) && a.isType(i[0], s.list, s.list_item)) ! function(e, l) {
r.redo.push(o.buildReplaceUndo(e));
var h, v = n,
p = e.get("parent");
if (d = e.id, a.isType(i[0], s.list)) {
e.insert(i[0]);
var g = i.shift().unwrap();
if (h = g.concat(c), o.addUndoForInsertArray(r, h), !l || b(e)) {
var y = h.shift();
void 0 == I(e, y, r, h) && (y.isDeleted() || h.unshift(y))
}
h.unshift(e), n.isDeleted() || i.length || (m = I(g.last(), n, r, h))
}
if (i.length) {
var w;
d = p.cid, p.insertArray(i, !1, !0);
var F = i.clone();
h = (h = [p]).concat(i), v && !v.isDeleted() ? (d = p.cid, r.undo.push(o.buildReplaceUndo(p)), p.unset("ahead"), p.unset("tail"), (w = p.clone()).unset("start"), p.giveChildrenTo(w, v, null, !0), r.redo.push(o.buildReplaceUndo(p)), i.last().insert(w), h.push(w), F.push(w), o.addUndoForInsertArray(r, F)) : o.addUndoForInsertArray(r, F)
} else f = h.last();
t.findElemById(d).replaceWith(u.toHTML(h))
}(e, p);
else {
var g = e.getVeryFirst(!0);
g.insertArray(i, !1, !0), v > -1 && c.splice.apply(c, [v, 0].concat(i)), o.addUndoForInsertArray(r, c), a.isEmptyBlock(g) ? (o.addUndoForRemove(r, g), g.remove()) : I(g, i.shift(), r, c), n.isDeleted() || (a.isEmptyBlock(n) ? (o.addUndoForRemove(r, n), n.remove()) : m = i.length ? I(i.last(), n, r, c) : I(e, n, r, c)), (f = i.last() || e) && !f.isDeleted() && (f = f.getVeryFirst(!0)), l.isDeleted() || r.redo.push(o.buildReplaceUndo(l));
var y = (l.isDeleted() ? "" : l.toHTML()) + c.map(function(t) {
return t.isDeleted() ? "" : t.toHTML()
}).join("");
t.findElemById(d).replaceWith(y)
}
a.isType(f, h.CONST.Selectable) && (n && !n.isDeleted() && (f = n), m = -1);
try {
m >= 0 ? t.selection.jumpInto(t.findElemById(f.cid), m) : f == n ? t.selection.jumpIntoElemBegin(t.findElemById(n.cid)) : t.selection.jumpIntoElemEnd(t.findElemById(f.getVeryFirst(!0).cid)), r.redo.push(t.selection.buildUndo())
} catch (t) {
console.warn(t)
}
t.tryEnterBusyMode(), setTimeout(function() {
t.refocus(), t.refresh()
}, 0), setTimeout(function() {
t.selection.scrollAdjust()
}, 100)
}
}
function j(e) {
if (E.undo.push(t.selection.buildUndo()), E = o.append(E, g(t, w, "delSelection", !0)), A = t.findNodeByElem(t.getMarkElem()), k = t.selection.getRangy(), c || A && k) {
x = k.getBookmark(t.findElemById(A.id)[0]).start;
var a = t.getJQueryElem(k.startContainer);
if (n = n || k.startContainer && a.closest(".md-def-url, .md-def-name, .md-def-title, pre, code").length, _ = e.markhtml, v = e.html, p = e.text, d = e.baseUrlInClipboard || "", n) i.isDefined(p) || (p = f.parseInlineHTML(v, t, d)), N(A, x, p = p || "", E);
else if (_) r = !0, B(A, x, E, _, T);
else {
if (!v) return void JSBridge.clipboard.readImage().then(function(e) {
e && e.length ? R(t, e) : N(A, x, p, E), t.selection.scrollAdjust()
});
a.closest(".md-def-content").length ? (p = f.parseInlineHTML(v, t, d), N(A, x, p, E)) : B(A, x, E, v, f.parseHTML)
}
t.selection.scrollAdjust()
}
}
},
R = function(t, e) {
if (window.app) {
if (app.document.isLocked()) return
} else if (File.isLocked) return !1;
t.sourceView.inSourceMode || t.imgEdit.doInsertFromURLs(e, !0)
};
e.getMarkdownSourceFrom = D, e.nativeCopyText = function(t) {
var e = document.createElement("textarea");
document.body.appendChild(e), e.value = t, e.focus(), e.select(), document.execCommand("Copy"), e.remove()
}, e.copyAsMarkdown = x, e.copyAsSemanticHTML = C, e.copyAsHTMLSource = E, e.copyHandler = function(t, e) {
if ("copyAsMarkdown" === File._CopyContentFlag) return x(t, e);
if ("copyAsHTMLSource" === File._CopyContentFlag) return E(t, e);
if ("copyAsSemanticHTML" === File._CopyContentFlag) return C(t, e);
var n = document.activeElement,
r = t.selection.getRangy(),
o = $(n).closest("[cid]");
if (t.sourceView.inSourceMode) w(null, null, File.editor.sourceView.cm.getSelection(), !0, e);
else {
if (isInputComponent(n)) return e || console.sendError("in copyHandler : shouldn't be here"), !0;
if ("hr" == n.getAttribute("mdtype")) w(n.outerHTML, null, "---", !0, e);
else if ("toc" == n.getAttribute("mdtype")) w(n.outerHTML, "<div mdtype='toc'><div>", "[toc]", !0, e);
else if ("IMG" == n.tagName) w(n.outerHTML, null, n.getAttribute("src") || "", !0, e);
else if (o.attr("mdtype") !== s.math_block || r && !r.collapsed)
if (o.attr("mdtype") !== s.html_block || r && !r.collapsed) {
if (window.getSelection().rangeCount) {
if (!File._CopyContentFlag && File.isNode) return File._CopyContentFlag = !0, p.clipboard.clear(), void setTimeout(p.getCurrentWindow().webContents.copy, 0);
t.selection.includeTrailMeta(r);
var a = r.toHtml(),
u = $($.parseHTML("<div>" + a + "</div>"));
u.find(".md-emoji").text(function() {
return d.data[this.getAttribute("data-content")]
}), u.find(".md-header-span").oldReplaceWith(function() {
var t = $(this).prev();
if (t.length) {
var e = t.text().trim().length;
return t.remove(), t.next().remove(), "<h" + e + " mdtype='heading'>" + this.innerHTML + "</h" + e + ">"
}
}), u.find(".math-jax-postprocess svg").remove();
var c = (u = F(u, t, {
skipEmoji: !File.option.copyMarkdownByDefault
})).html(),
l = File.option.copyMarkdownByDefault ? D(c) : function(t) {
var e = S(t, null, !0);
return "string" == typeof e ? e : f.convertToPlain(e)
}(c).replace(/\u200B/gi, "");
w(null, c, l, !1, e)
}
} else {
var h = t.getNode(o.attr("cid")),
m = h.get("text");
w(m, "<div mdtype='" + s.html_block + "' data-tag='" + i.escape(h.get("style")) + "'>" + i.escape(m) + "</div>", m, !0, e)
}
else {
var v = t.mathBlock.getTex(o.attr("cid"));
w(n.querySelector(".MathJax_Display").outerHTML, "<div mdtype='" + s.math_block + "'>" + v + "</div>", v, !0, e)
}
}
}, e.insertInlineText = y, e.pasteHandler = L, e.setClipboard = w, e.prepMarkHtml = k, e.insertParagraph = function(t, e, n) {
if (!File.isNode || !File.isLocked) {
e = e || File.editor, n = n || e.getMarkElem();
var i = e.findNodeByElem(n),
r = new a({
type: s.paragraph,
text: ""
}),
u = o.makeEmptyCommand(e.selection.buildUndo(void 0, n));
i && ((i = i.getClosetBlock()).insert(r, t), o.addUndoForInsert(u, r), t ? e.findElemById(i.cid).before(r.toHTML()) : e.findElemById(i.cid).after(r.toHTML()), e.selection.jumpIntoElemBegin(e.findElemById(r.cid)), u.redo.push(e.selection.buildUndo()), e.undo.register(u), e.refocus())
}
}, e.insertDom = function(t) {
File.editor.focusAndRestorePos(), L(File.editor, $("<div>").append(t).html(), !1)
}, e.processClipboardHTML = A
}), $__System.registerDynamic("2e", ["12", "14", "13", "1b", "1c", "19", "42", "31", "43", "45", "41", "44", "1d", "47"], !0, function(t, e, n) {
"use strict";
this || self, t("12");
var i = t("14"),
r = t("13"),
o = t("1b"),
a = r.Node,
s = r.TYPE,
u = (r.NodeCollectionUtils, t("1c"), t("19")),
c = (t("42"), t("31")),
l = (t("43"), t("45")),
f = t("41"),
h = t("44"),
d = t("1d"),
m = t("47"),
v = function(t, e, n, i) {
var r, o = t;
if (t == e) return null;
for (r = t.get(n); r;) i(r, o), r = (o = r).get(n);
return v(t.get("parent"), e, n, i), o
};
e.getDisplayText = function(t) {
var e = t.clone();
return e.find(".md-meta, .md-content").remove(), e.text().replace(/\u00A0/g, " ")
}, e.decorateOneSide = v, e.simpleExpand = function(t, e) {
if (File.isLocked) return !1;
var n, i, r, c = t.getNode(e),
l = t.selection.buildUndo();
if (!a.isType(c, s.heading, s.def_footnote, s.def_link) || l.startId && l.startId != l.endId) return !1;
if ((n = c.toMark().trim()).match(/\n/)) return !1;
var f = o.makeEmptyCommand(t.lastCursor);
if (!f.undo.length || !f.undo[0].id && f.undo[0].startId != f.undo[0].endId) return !1;
if (f.undo.push(o.buildReplaceUndo(c)), a.isType(c, s.heading) && (i = c.get("pattern") && c.get("pattern").replace("{0}", "").length || c.get("depth") + 1), a.isType(c, s.def_link, s.def_footnote)) {
var h, d = t.selection.getRangy(),
m = t.getJQueryElem(d.startContainer);
h = m.closest(".md-def-content"), i = a.isType(c, s.def_link) ? 1 : 2, h.length && (i += 3), (h = m.closest(".md-def-title")).length && m.text().length && (i += 5)
}
return c.set("text", n), c.set("type", s.paragraph), f.redo.push(o.buildReplaceUndo(c)), (l = t.selection.buildUndo()).start += i, l.end += i, l.id = c.cid, l.startId = l.endId = void 0, f.redo.push(l), r = u.renderHtmlWithBlockMeta(c, t.brush), t.findElemById(c.cid).replaceWith(r), t.undo.exeCommand(l, []), f.incomplete = !0, t.undo.register(f), c.cid
}, e.insertFileLink = function(t, e) {
if (!File.isLocked) {
var n = c.getFileNameFromPath(e);
e = i.getRelativePath(c.getCurrentFileFolderPath(), e), m.pasteHandler(t, " [" + n + "](" + e + ") ", !0, !0, !0)
}
}, e.backspaceHandler = l.backspaceHandler, e.deleteSelectable = l.deleteSelectable, e.deleteLineProcessor = l.deleteLineProcessor, e.deleteLine = l.deleteLine, e.deleteBlock = l.deleteBlock, e.backToParagraph = l.backToParagraph, e.getMarkdownSourceFrom = m.getMarkdownSourceFrom, e.nativeCopyText = m.nativeCopyText, e.copyAsMarkdown = m.copyAsMarkdown, e.copyAsSemanticHTML = m.copyAsSemanticHTML, e.copyAsHTMLSource = m.copyAsHTMLSource, e.copyHandler = m.copyHandler, e.insertInlineText = m.insertInlineText, e.pasteHandler = m.pasteHandler, e.setClipboard = m.setClipboard, e.insertDom = m.insertDom, e.prepMarkHtml = m.prepMarkHtml, e.insertParagraph = m.insertParagraph, e.processClipboardHTML = m.processClipboardHTML, e.moreIndent = f.moreIndent, e.lessIndent = f.lessIndent, e.hanldePair = h.hanldePair, e.surroundPair = h.surroundPair, e.PunctuationOp = d
}), $__System.registerDynamic("48", ["26", "13", "2b", "2e", "14", "1b"], !0, function(t, e, n) {
"use strict";
this || self;
var i = "",
r = t("26"),
o = t("13"),
a = o.Node,
s = o.TYPE,
u = t("2b"),
c = t("2e"),
l = t("14"),
f = (r = t("26"), t("1b").SnapFlag, r.map),
h = window.reqnode ? reqnode("electron").remote : null;
function d(t) {
t = t || ".context-menu", $(t).removeClass("show").find(".active").removeClass("active")
}
function m(t) {
var e = h.getCurrentWindow();
d(), e.inspectElement(t.clientX, t.clientY)
}
var v = !1;
function p() {
v = !0;
var t = (h.app.setting.config || {}).searchService || [
["Search with Google", "https://google.com/search?q=%s"]
];
t.forEach(function(e, n) {
var r = $($.parseHTML('<li data-group="search" data-key>\n<a role="menuitem">' + l.escape($.localize.getString(e[0], "Menu")) + "</a></li>")[0]);
0 === n ? ($("#search-service-placeholder").after('<li class="divider" data-group="search"></li>').replaceWith(r), r.attr("data-key", "search-default"), t.length > 2 && r.after('<li data-key="search-with" data-group="search" class="has-extra-menu">\n<a role="menuitem"><span>' + $.localize.getString("Search With…") + '</span><i class="fa fa-caret-right"></i></a></li>')) : 1 === n && 2 == t.length ? $("[data-key='search-default']").after(r) : $("#search-menu").append(r), r.click(function() {
t = e[1], d(), h.shell.openExternal(t.replace(/%s/, encodeURIComponent(i)));
var t
})
})
}
function g(t, e) {
var n = $("[data-group='" + t + "']");
e ? n.show() : n.hide()
}
function b() {
return File.editor && File.editor.spellChecker && File.editor.spellChecker.curSpellchecker
}
function y() {
if (File.editor.sourceView && File.editor.sourceView.inSourceMode) {
var t = File.editor.sourceView.cm,
e = t.getCursor("from"),
n = t.getCursor("to");
t.setSelection(e, n, {
scroll: !1
}), t.focus()
} else File.editor.lastCursor && File.editor.undo.exeCommand(File.editor.lastCursor)
}
var w = function(t) {
this.sessionStr = t, $(document).ready(k.bind(this))
},
F = function() {
!!document.querySelector("#user-context-menu.show") ? this.showCustom(j, O) : d()
},
k = function() {
$("content").on("post-scroll", F.bind(this)), $(window).on("resize", F.bind(this)), M.call(this), File.isMac || (A.call(this), L.call(this), x.call(this), S.call(this), T.call(this), window.reqnode && setTimeout(D.bind(this), 1e3))
},
x = function() {
document.querySelector("#context-menu");
$("[data-style]").click(function() {
d(), y(), File.editor.refocus(), File.editor.stylize.toggleStyle(this.getAttribute("data-style"))
})
},
_ = function() {
var t = File.editor.getMarkElem(),
e = !1;
t.closest("thead").length || (t.closest("tbody").children().length >= 2 ? ($("[data-key='delete_table_row']").show(), e = !0) : $("[data-key='delete_table_row']").hide()), t.closest("tr").children().length >= 2 ? ($("[data-key='delete_table_col']").show(), e = !0) : $("[data-key='delete_table_col']").hide(), e ? $("[data-key='delete_table_col']").next(".divider").show() : $("[data-key='delete_table_col']").next(".divider").hide()
};
w.prototype.updateTableVisiblity = _;
var E, C, A = function() {
$("body").on("mouseenter", ".context-menu [data-key]", function() {
var t = $(this);
t.closest(".context-menu").find(".active").removeClass("active"), t.addClass("active")
}).on("mouseleave", ".context-menu", function(t) {
$(this).find(".active:not(.has-extra-menu)").removeClass("active")
}), $("#context-menu").on("mouseenter", "[data-key]", function() {
var t = $(this);
"block-style" == t.attr("data-key") ? (B("#block-style-menu", t), t.addClass("active")) : (document.querySelector("#block-style-menu").classList.remove("show"), document.querySelector("[data-key='block-style']").classList.remove("active")), "insert" == t.attr("data-key") ? (B("#insert-menu", t), t.addClass("active")) : (document.querySelector("#insert-menu").classList.remove("show"), document.querySelector("[data-key='insert']").classList.remove("active")), "copy-as" == t.attr("data-key") ? (B("#edit-menu", t), t.addClass("active")) : (document.querySelector("[data-key='copy-as']").classList.remove("active"), document.querySelector("#edit-menu").classList.remove("show")), "search-with" == t.attr("data-key") ? (B("#search-menu", t), t.addClass("active")) : (document.querySelector("#search-menu").classList.remove("show"), $("[data-key='search-with']").removeClass("active")), "table" == t.attr("data-key") ? (_(), B("#table-menu", t), t.addClass("active")) : (document.querySelector("#table-menu").classList.remove("show"), document.querySelector("[data-key='table']").classList.remove("active")), "math" == t.attr("data-key") ? (B("#math-menu", t), t.addClass("active")) : (document.querySelector("#math-menu").classList.remove("show"), document.querySelector("[data-key='math']").classList.remove("active"))
})
},
S = function() {
$("#context-menu").on("click", "[data-indent]", function() {
var t = this.getAttribute("data-indent");
d(), y(), File.editor.refocus(), File.editor.stylize.toggleIndent(t)
}).on("click", "[data-tab]", function() {
d(), y(), File.editor.refocus();
"left" == this.getAttribute("data-tab") ? c.lessIndent(File.editor) : c.moreIndent(File.editor)
}), $("#block-style-menu").on("click", "[data-block]", function() {
var t = this.getAttribute("data-block");
d(), y(), File.editor.refocus(), File.editor.stylize.changeBlock(t)
}), $("#insert-menu").on("click", "[data-insert]", function() {
var t = this.getAttribute("data-insert");
d(), y(), File.editor.refocus(), t === s.table ? File.editor.tableEdit.insertTable() : t === s.meta_block ? File.editor.stylize.insertMetaBlock() : File.editor.stylize.insertBlock(t)
}).on("click", "[data-insert-p]", function() {
var t = "before" == this.getAttribute("data-insert-p");
d(), File.editor.refocus(E.attr("cid")), File.editor.UserOp.insertParagraph(t, File.editor, E)
})
},
T = function() {
$("#math-menu").on("click", '[data-key="copy_as_mathml"]', function() {
d(), y(), File.editor.styleBookmark.style.block.indexOf(s.math_block) > -1 ? File.editor.mathBlock.copyAsMathML(E[0]) : File.editor.mathInline.copyAsMathML()
}).on("click", '[data-key="copy_as_word"]', function() {
d(), y(), File.editor.styleBookmark.style.block.indexOf(s.math_block) > -1 ? File.editor.mathBlock.copyAsMathML(E[0], !0) : File.editor.mathInline.copyAsMathML(!0)
}).on("click", '[data-key="copy_as_math_tex"]', function() {
d(), y(), File.editor.styleBookmark.style.block.indexOf(s.math_block) > -1 ? File.editor.mathBlock.copyAsTex(E[0]) : File.editor.mathInline.copyAsTex()
}).on("click", '[data-key="copy_as_math_image"]', function() {
d(), y(), File.editor.styleBookmark.style.block.indexOf(s.math_block) > -1 ? File.editor.mathBlock.copyAsImage(E[0]) : File.editor.mathInline.copyAsImage()
}), File.isWin || $("#math-menu [menu-for-win]").hide()
},
M = function() {
$("#table-menu").on("click", '[data-key="insert_row_before"]', function() {
d(), y(), File.editor.tableEdit.addRow(!0)
}).on("click", '[data-key="insert_row_after"]', function() {
d(), y(), File.editor.tableEdit.addRow(!1)
}).on("click", '[data-key="delete_table_row"]', function() {
d(), y(), File.editor.tableEdit.deleteRow(!1)
}).on("click", '[data-key="insert_col_before"]', function() {
d(), y(), File.editor.tableEdit.addCol(!0)
}).on("click", '[data-key="insert_col_after"]', function() {
d(), y(), File.editor.tableEdit.addCol(!1)
}).on("click", '[data-key="delete_table_col"]', function() {
d(), y(), File.editor.tableEdit.deleteCol()
}).on("click", '[data-key="delete_table"]', function() {
d(), y(), File.editor.tableEdit.deleteTable()
}).on("click", '[data-key="copy_table"]', function() {
d(), y(), File.editor.tableEdit.copyTable()
}).on("click", '[data-key="reformat_table"]', function() {
d(), y(), File.editor.tableEdit.reformatTable()
})
},
D = function() {
$("#context-menu").on("click", "[data-key='learn']", function() {
d(), y(), b().add(i)
}).on("click", "[data-key='unlearn']", function() {
d(), y(), b().remove(i)
}).on("click", "[data-key='correct']", function(t) {
d(), y(), c.pasteHandler(File.editor, $(t.target).text(), !0)
})
},
L = function() {
$("[data-key='jumpto']").click(function() {
d(), y(), File.editor.tryOpenLink(File.editor.getJQueryElem(window.getSelection().anchorNode).closest("a"))
}), $(".context-menu").mousedown(function(t) {
if (!$(t.target).closest("a").length) return !1
}), $("[data-key='dev-tool']").click(m), File.isNode && (JSBridge.getSetting("debug", !1) ? $("[data-group='dev-tool']").show() : $("[data-group='dev-tool']").hide()), $("[data-key='edit']").click(function(t) {
return d(), y(), File.editor.undo.prepCursorSnap(), $(C).closest(".md-rawblock-container").trigger("startedit"), File.editor.undo.endSnap(), !1
}), $("[data-key='cut']").click(function(t) {
d(), y(), ClientCommand.cut();
var e;
(e = $(document.activeElement.tagName).closest(".CodeMirror")[0]) && setTimeout(function() {
e.CodeMirror.replaceSelection("", "start")
}, 30)
}), $("[data-key='copy']").click(function(t) {
d(), E.find(".md-rawblock-container").focus().length || y(), ClientCommand.copy()
}), $("[data-key='delete-block']").click(function(t) {
d(), y(), E.length && (File.editor.refocus(E.attr("cid")), File.editor.UserOp.deleteBlock(File.editor))
}), $("[data-key='copy_as_markdown']").click(function(t) {
d(), y(), ClientCommand.copyAsMarkdown()
}), $("[data-key='paste_as_plain']").click(function(t) {
d(), y(), ClientCommand.pasteAsPlain()
}), $("[data-key='paste']").click(function() {
d(), y(), ClientCommand.paste()
}), $("[data-key='copy-emoji']").click(function() {
d(), y();
var t = $(".md-emoji.md-expand [data-emoji]").attr("data-emoji");
File.editor.UserOp.setClipboard("", "", t, !0)
}), $("[data-key='play']").click(function(t) {
d();
try {
$(C).closest("video")[0].play()
} catch (t) {}
}), $("[data-key='pause']").click(function(t) {
d();
try {
$(C).closest("video")[0].pause()
} catch (t) {}
})
},
R = function(t, e) {
t.addClass("show");
var n = t.height() + 48,
i = e.clientX > window.innerWidth - 220 ? window.innerWidth - 220 : e.clientX,
r = e.clientY > window.innerHeight - n ? window.innerHeight - n : e.clientY - $("#top-titlebar").height() + 8;
t.css({
top: r + "px",
left: i + "px"
})
};
w.prototype.show = function(t, e) {
if (!v && window.reqnode && p.call(this), C = e || t.target, (E = $(C).closest("[cid]")).hasClass("md-rawblock") ? File.editor.stylize.putBookmark(null, File.editor.stylize.buildBookmark(E)) : ($(File.editor.sessionStr).trigger("cursorChange"), File.editor.lastCursor = File.editor.selection.buildUndo(), File.editor.stylize.putBookmark(null, File.editor.stylize.buildBookmark(E))), $(".context-menu").removeClass("show").find(".active").removeClass("active"), File.editor.sourceView.inSourceMode) return R($("#context-menu-for-source"), t), !1;
! function() {
try {
var t = File.editor.getJQueryElem(window.getSelection().anchorNode).closest("a");
g("hyperlink", t.attr("href") || t.attr("data-ref"))
} catch (t) {
g("hyperlink", !1)
}
}(),
function() {
i = "";
try {
g("search", (i = window.getSelection().toString()).trim().length > 0 && -1 == i.indexOf("\n"))
} catch (t) {
g("search")
}
}(),
function() {
var t = File.editor,
e = t.styleBookmark.style,
n = e.block[0],
i = document.querySelector("#context-menu"),
r = !1,
o = !1,
c = !1,
f = !1,
h = !1;
g("inline-style", !(t.stylize.CONST.NoInline.indexOf(e.block[0]) > -1)), $("[data-style]").removeClass("active"), e.inline.map(function(t) {
var e = document.querySelector("[data-style='" + t + "']");
e && e.classList.add("active"), a.isType(t, s.inline_math) && (c = !0), (a.isType(t, s.image) || a.isType(t, s.imgtag)) && (f = !0), a.isType(t, s.emoji) && (h = !0)
}), e.block.map(function(t) {
a.isType(t, s.blockquote, s.list_item) && (r = !0), a.isType(t, s.table) && (o = !0), a.isType(t, s.math_block) && (c = !0)
});
var d = $.localize.getString(u.CONST.StyleToNameMap[n], "Menu");
if (a.isType(n, s.html_block, s.math_block) ? $("[data-key='block-style']").hide() : ($("[data-key='block-style']").show(), $("[data-key='block-style'] span").text(d)), n == s.paragraph) {
var m = t.getNode(E.attr("cid"));
!m || m.get("before") || m.get("after") || m.get("parent") && (m = m.get("parent")), m && (d = $.localize.getString(u.CONST.StyleToNameMap[m.get("type")], "Menu"))
}
if (!d || a.isType(n, s.paragraph, s.heading) || /header/.exec(n) ? $("[data-group='delete-block']").hide() : $("[data-key='delete-block']").children("a").text($.localize.getString("Delete %@", "Menu").replace("%@", d || "")), $("#block-style-menu [data-block]").removeClass("state-on").filter("[data-block='" + n + "']").addClass("state-on"), e.block.length > 0 && File.editor.stylize.CONST.NormalBlockMap[n] ? ($("[data-block-auto-disable]").removeClass("disabled"), $("[data-block-auto-hide]").removeClass("hide")) : ($("[data-block-auto-disable]").addClass("disabled"), $("[data-block-auto-hide]").addClass("hide")), n != s.def_footnote && n != s.def_link || ($("#insert-menu [data-block-auto-disable]").addClass("disabled"), $("#insert-menu [data-block-auto-hide]").addClass("hide")), n == s.meta_block ? $('[data-insert-p="before"]').parent().addClass("disabled") : $('[data-insert="meta_block"]').removeClass("hide"), a.isType(n, s.html_block, s.math_block, s.meta_block) ? $("[data-group='block-wrap']").hide() : $("[data-group='block-wrap']").show(), r ? i.querySelector('[data-group="block-tab"]').classList.remove("hide") : i.querySelector('[data-group="block-tab"]').classList.add("hide"), o ? ($('[data-group="table"]').show(), i.querySelector('[data-key="block-style"]').classList.add("hide")) : ($('[data-group="table"]').hide(), i.querySelector('[data-key="block-style"]').classList.remove("hide")), c ? i.querySelector('[data-key="math"]').classList.remove("hide") : i.querySelector('[data-key="math"]').classList.add("hide"), h) {
var v = $(".md-emoji.md-expand [data-emoji]").attr("data-emoji");
v && (i.querySelector('[data-key="copy-emoji"] a').textContent = $.localize.getString("Copy '%@'", "Menu").replace("%@", v)), $("#context-menu [data-group='emoji']").addClass(v ? "show" : "hide")
} else $("#context-menu [data-group='emoji']").addClass("hide");
if ($("#context-menu [data-group='image']").addClass("hide"), f) {
var p = $(".md-image.md-expand").find("img").attr("src") || "";
if (!p) return;
/^file:\/\//.exec(p) && i.querySelector('[data-key="reveal-img-in-finder"]').classList.remove("hide");
var b = File.editor.imgEdit.getTagetImageStorageFolder();
if (b) {
var y = l.escapeURL(b);
if (-1 == p.replace(/^file:\/\//, "").indexOf(y)) {
var w = l.getFolder(b);
w && ($(i).find('[data-key="move-img-to-target"] a').text($.localize.getString("Copy to %@", "Menu").replace("%@", w)), i.querySelector('[data-key="move-img-to-target"]').classList.remove("hide"))
}
}
i.querySelector('[data-key="select-img-target"]').classList.remove("hide"), $('.divider[data-group="image"]').removeClass("hide")
}
var F = $(C).closest(".md-rawblock-container");
F.length ? ($("[data-group='copy-paste']").hide(), $("[data-key='copy'], [data-group='edit-block']").show(), F.hasClass("md-htmlblock-container") && $("[data-key='copy']").hide()) : ($("[data-group='copy-paste']").show(), $("[data-group='edit-block']").hide()), $(C).closest("video").length ? $("[data-group='video']").show() : $(C).closest("video").length && $("[data-group='video']").hide()
}(), window.reqnode && function() {
var t = b(),
e = $("#context-menu");
if (i = ";" == i.trim() ? "" : i.trim(), t && i.length)
if (t.isMisspelled(i)) {
g("spell-check", !0), e.find("[data-key='correct']").remove(), e.find("[data-key='unlearn']").hide();
var n = t.getCorrectionsForMisspelling(i.trim());
0 == n.length ? e.find("#divider-before-learn").hide() : (n = n.slice(0, 6), e.find("#divider-before-learn").show().before(n.reduce(function(t, e) {
return t += '<li data-group="spell-check" data-key="correct"><a role="menuitem">' + e + "</a></li>"
}, "")))
} else t.isLearned(i) ? (e.find("[data-key='correct']").remove(), g("spell-check", !0), e.find("[data-key='learn'], #divider-before-learn").hide(), e.find("[data-key='unlearn']").show()) : g("spell-check", !1);
else g("spell-check", !1)
}(), R($("#context-menu"), t), t.preventDefault(), t.stopPropagation()
}, w.prototype.hide = d;
var B = function(t, e) {
var n = $(t).addClass("show"),
i = n.height() + 48,
r = e.offset(),
o = r.left,
a = o + 200,
s = r.top - 30,
u = a + 160 > window.innerWidth ? o - 184 : a,
c = s + i > window.innerHeight ? window.innerHeight - i : s;
return n.css({
top: c + "px",
left: u + "px"
}), !1
};
w.prototype.showExtMenu = B;
var I = function(t, e) {
var n, i, r = $(t);
if ("Enter" == e) {
if (!r.hasClass("has-extra-menu")) {
var o = r.find("a");
return o.length ? o.trigger("click") : r.trigger("click"), !0
}
e = "OpenSubmenu"
}
if ("Up" == e || "Down" == e) return r = r.closest("li"), 0 == (n = "Up" == e ? r.prev() : r.next()).length ? (r.closest("#user-context-menu").length && d(), !0) : !n.height() || n.hasClass("divider") ? I(n[0], e) : (r = r.closest(".context-menu").find(".active"), n.hasClass("has-btn-submenu") ? (i = r.prevAll("a").length / (r.closest(".has-btn-submenu").find("a").length || 1) * n.find("a").length, (n = $(n.find("[data-key]")[Math.floor(i)])).trigger("mouseenter"), !0) : (r.removeClass("active"), n.addClass("active"), !0));
if (("Left" == e || "Right" == e) && "A" == r[0].tagName) return n = "Left" == e ? r.prev() : r.next(), r.removeClass("active"), n.addClass("active"), !0;
if ("Left" == e || "Esc" == e) {
if ((r = r.closest(".context-menu")).hasClass("ext-context-menu")) return r.find(".active").removeClass("active"), r.removeClass("show"), !0;
if ("Left" == e) return !0
}
return "Right" == e || "OpenSubmenu" == e ? (r.hasClass("has-extra-menu") && (r.trigger("mouseenter"), $(".ext-context-menu:visible [data-key]:visible").first().trigger("mouseenter")), !0) : void 0
};
w.prototype.handleKeyEvent = function(t) {
var e = f[t.keyCode || t.which];
if (a.isType(e, "Esc", "Right", "Left", "Up", "Down", "Return", "Enter")) {
var n, i = $(".context-menu:visible");
return !!i.length && ("Esc" == e ? ($(".context-menu").removeClass("show").find(".active").removeClass("active"), !0) : i.find(".active").length ? (n = $(".ext-context-menu .active")[0]) ? I(n, e) : I($(".context-menu .active")[0], e) : "Up" == e ? (i.find("li[data-key]:visible").last().addClass("active"), !0) : "Down" == e ? (i.find("li[data-key]:visible").first().addClass("active"), !0) : void 0)
}
};
var N, O, j;
w.prototype.getCustomFocuedElem = function() {
return N.length ? N : null
}, w.prototype.hideCustomMenu = function(t) {
t == O && $("#user-context-menu.show").length && this.hide()
}, w.prototype.showCustom = function(t, e) {
if (N = null, window.getSelection().rangeCount) {
O = e, j = t;
var n = $("#user-context-menu").html(t.map(function(t) {
return t.key == w.SPLITER ? '<li for-file class="divider"></li>' : '<li data-key="' + t.key + '"><a role="menuitem">' + $.localize.getString(t.label, "Menu").replace("%@", t.variable || "") + "</a></li>"
}).join(""));
setTimeout(function() {
var t = window.getSelection().getRangeAt(0),
e = t.getClientRects(),
i = e.length && e[e.length - 1];
if ((!i || 0 == i.left && 0 == i.height) && (t.selectNodeContents(t.commonAncestorContainer), i = (e = t.getClientRects()).length && e[e.length - 1]), i && (0 != i.left || 0 != i.height)) {
var r = $(t.commonAncestorContainer).closest("[cid]")[0],
o = r ? r.getBoundingClientRect().left || 0 : 0;
n.addClass("show").css({
top: i.bottom + "px",
left: Math.max(o, i.right - n.width() + 20) + "px"
}), N = $(t.commonAncestorContainer).closest("[md-inline]")
}
}, 100)
}
}, w.prototype.getContextTarget = function() {
return C
}, w.prototype.getMenuItemsForMac = function(t) {
C = t;
if (!t) return [];
if (void(t.ownerDocument.defaultView != window && (t = function t(e) {
return e.parent == window ? e.frameElement : e && e.parent ? t(e.parent) : null
}(t.ownerDocument.defaultView))) || document.querySelector("#write").contains(t)) return function() {
try {
var e = editor.getMarkElem(t);
if (a.isType(document.activeElement.tagName, "INPUT", "TEXTAREA") && !e.length) return ["input"];
e.length && File.editor.refocus(e.attr("cid"));
var n = editor.selection.getRangy(),
i = $(t).closest(".md-expand"),
r = e.attr("mdtype");
if (/^table/g.exec(r) && !File.isLocked) return ["normal", "table", "|", "insertParagraphBefore", "insertParagraphAfter"];
if (a.isType(r, s.html_block)) return ["normal", "edit", "|", "insertParagraphBefore", "insertParagraphAfter", "delete"];
if (a.isType(r, s.math_block)) return ["normal", "edit", "copyMathBlock", "|", "insertParagraphBefore", "insertParagraphAfter", "delete"];
if (a.isType(r, s.fences)) return ["normal", "insertParagraphBefore", "insertParagraphAfter", "delete-fences"];
if (e.attr("tabindex")) return ["normal", "|", "insertParagraphBefore", "insertParagraphAfter", "delete"];
if (e.hasClass("md-def-link")) {
var o = $(n.commonAncestorContainer).closest(".md-def-url");
return o.length ? (File.editor.setCurLinkElem(o), ["normal", "openLink"]) : ["normal"]
}
if ($(t).closest(".md-emoji").length) return ["normal", "copyEmoji-" + $(t).closest(".md-emoji").find("[data-emoji]").attr("data-emoji"), "|"];
if (n && $(n.commonAncestorContainer).closest(".md-inline-math").length) return ["normal", "copyMathInline"];
if (a.isType(i.hasClass("md-img-loaded") && i.attr("md-inline"), s.image, s.imgtag)) return ["normal"].concat(File.editor.imgEdit.contextMenuItems(i.find("img")[0]));
if (a.isType(i.hasClass("md-img-loaded") && i.attr("md-inline"), s.refimg) && /^file:\/\//.exec(i.find("img").attr("src") || "")) return ["normal", "revealInFinder", "|"]
} catch (t) {}
return ["normal"]
}();
if (File.editor.sourceView.inSourceMode && document.querySelector("#typora-source").contains(t)) return ["input"];
if (File.getMountFolder()) {
var e = File.editor.getJQueryElem(t).closest(".file-library-node");
if (File.editor.library.useTreeStyle) {
if (e.length) return e.attr("data-path") == File.getMountFolder() ? ["folder-root"] : ["true" == e.attr("data-is-directory") ? "folder" : "file"];
if (File.getMountFolder()) return ["folder-root"]
} else if (e.length) return ["file-list"];
return []
}
return []
}, w.SPLITER = "divider", n.exports = w
}), $__System.registerDynamic("49", ["35", "e", "31", "26"], !0, function(t, e, n) {
"use strict";
this || self, t("35");
var i = t("e"),
r = t("31"),
o = t("26").map,
a = window.reqnode ? reqnode("electron").remote : null,
s = a ? a.app : null,
u = [{
code: "en-US",
userLang: "en-US",
label: "English (US)",
enLabel: "English (US)"
}, {
code: "en-GB",
userLang: "en-GB",
label: "English (UK)",
enLabel: "English (UK)"
}, {
code: "cs",
userLang: "cs-CZ",
label: "Čeština",
enLabel: "Czech"
}, {
code: "de",
userLang: "de-DE",
label: "Deutsch",
enLabel: "German"
}, {
code: "es",
userLang: "es-ES",
label: "Español",
enLabel: "Spanish"
}, {
code: "el",
userLang: "el-GR",
label: "Ελληνικά",
enLabel: "Greek"
}, {
code: "fr",
userLang: "fr-FR",
label: "Français",
enLabel: "French"
}, {
code: "gl",
userLang: "gl-ES",
label: "Galego",
enLabel: "Galician"
}, {
code: "hr",
userLang: "hr-HR",
label: "Hrvatski",
enLabel: "Croatian"
}, {
code: "it",
userLang: "it-IT",
label: "Italiana",
enLabel: "Italian"
}, {
code: "id",
userLang: "id-ID",
label: "Bahasa Indonesia",
enLabel: "Indonesian"
}, {
code: "nl",
userLang: "nl-NL",
label: "Nederlands",
enLabel: "Dutch"
}, {
code: "hu",
userLang: "hu-HU",
label: "Magyar",
enLabel: "Hungarian"
}, {
code: "pl",
userLang: "pl-PL",
label: "Polski",
enLabel: "Polish"
}, {
code: "pt-BR",
userLang: "pt-BR",
label: "Português (Brasil)",
enLabel: "Portuguese (Brazil)"
}, {
code: "pt",
userLang: "pt-PT",
label: "Português (Portugal)",
enLabel: "Portuguese (Portugal)"
}, {
code: "ru",
userLang: "ru-RU",
label: "Ру́сский",
enLabel: "Russian"
}, {
code: "sv",
userLang: "sv-SE",
label: "Svenska",
enLabel: "Swedish "
}, {
code: "vi",
userLang: "vi-VN",
label: "Tiếng Việt",
enLabel: "Vietnamese"
}, {
code: "ko",
userLang: "jo-KR",
label: "한국어",
enLabel: "Korean"
}, {
code: "zh",
userLang: "zh",
label: "中文",
enLabel: "Chinese"
}, {
code: "ja",
userLang: "ja-JP",
label: "日本語",
enLabel: "Janapese"
}],
c = "disabled",
l = function(t) {
this.editor = t, this.r = new Map, this.u = File.option.presetSpellCheck, this.c, this.l(), this.f(), this.reset()
};
l.prototype.useHunSpell = function() {
return !/Windows NT (8|10)\./.exec(navigator.userAgent)
}, l.prototype.h = function() {
var t = new Map;
this.labelMap = {}, u.forEach(function(e) {
t.set(e.userLang, e.code), this.labelMap[e.code] = e.label
}, this);
var e = File.option.userLocale,
n = t.get(e);
n || (n = /^zh/.exec(e) ? "zh" : t.get(s.getLocale() || "en-US") || "en-US"), this.g = n
}, l.prototype.w = function() {
if (this.spellCheckFactory) {
File.filePath ? this.r.has(File.filePath) ? this.u = this.r.get(File.filePath) || File.option.presetSpellCheck : (this.u = r.getItemInDB("[spellcheck]" + File.filePath), this.r.set(File.filePath, this.u), this.u = this.u || File.option.presetSpellCheck) : this.u = File.option.presetSpellCheck;
var t = this;
"auto" != this.u && this.u != c && File.isNode && setTimeout(function() {
t.curSpellchecker = t.spellCheckFactory.getSpellChecker(/^(zh|ja)/.exec(t.u || "") ? "en-US" : t.u)
}, 1e3)
}
}, l.prototype.f = function() {
File.isNodeHtml && (this.$label = document.querySelector("#footer-spell-check"), this.F(), File.isNode && (this.k = null, this.h(), this.C()))
}, l.prototype.F = function() {
var t = this;
i("#footer-spell-check").on("click", function() {
document.body.classList.contains("ty-show-spell-check") ? t.hide() : t.show()
}), i("#spell-check-panel").on("click", "[data-spell-lang]", function() {
t.setLangMode(this.dataset.spellLang, !0), t.hide(), document.querySelector("#footer-spell-check").classList.contains("ty-spell-check-dict-error") && t.showDictMissing()
}).on("click", "#ty-spell-check-global-setting", function() {
File.megaMenu.highlight("spellcheck-option-wrapper")
}), i("#md-notification").on("click", ".dropdown-toggle", function() {
i("#md-notification .dropdown-menu:visible").length ? i("#md-notification .dropdown-menu").parent().removeClass("open") : i("#md-notification .dropdown-menu").dropdown("toggle")
}).on("blur", ".dropdown-toggle", function() {
i("#md-notification .dropdown-menu").parent().removeClass("open")
}).on("shown.bs.dropdown", function(t) {
var e = i(this),
n = e.find(".dropdown-toggle-split"),
r = e.find(".dropdown-menu"),
o = n.offset();
o.top += n[0].clientHeight + 4, o.left += n[0].clientWidth - r[0].clientWidth + 2, r.offset(o)
}).on("click", "#ty-spell-check-dict-missing-disable-btn", function() {
t.setLangMode(c, !0), i("#md-notification").fadeOut()
}).on("click", "#ty-spell-check-dict-missing-close-btn", function() {
i("#md-notification").fadeOut()
}).on("click", "#ty-spell-check-dict-missing-primary-btn", function() {
t.useHunSpell() ? t.A() : a.shell.openExternal("http://support.typora.io/Spellcheck/")
}).on("mousedown", "#ty-spell-check-dict-missing-secondary-btn", function() {
t.useHunSpell() ? a.shell.openExternal("http://support.typora.io/Spellcheck/") : t.A()
}), i("#dict-install-dialog").on("click", ".btn-primary", function() {
t.S()
})
}, l.prototype.T = function(t, e) {
if (this.M(), this.userDictPath)
if (null == this.curSpellchecker && this.downloadDicts[t] <= 1) i("#footer-spell-check").attr("ty-hint", i.localize.getString("Spell Check (%@ downloading)").replace("%@", this.labelMap[t])).removeClass("ty-spell-check-dict-error").addClass("ty-spell-check-dict-downloading");
else if (i("#footer-spell-check").removeClass("ty-spell-check-dict-downloading"), null == this.curSpellchecker && e) i("#footer-spell-check").attr("ty-hint", i.localize.getString("Spell Check (%@ unavailable)").replace("%@", this.labelMap[t])).addClass("ty-spell-check-dict-error");
else {
var n;
n = this.labelMap[t] ? (i.localize.getString("Spell Check") + " (%@)").replace("%@", this.labelMap[t]) : this.u == c ? i.localize.getString("Spell Check (Disabled)") : i.localize.getString("Spell Check"), i("#footer-spell-check").attr("ty-hint", n).removeClass("ty-spell-check-dict-error"), i("#md-notification").fadeOut()
}
}, l.prototype.setLangMode = function(t, e) {
this.spellCheckFactory || (t = c, e = !1), this.u = t, File.filePath && e && (r.setItemInDB("[spellcheck]" + File.filePath, t), this.r.set(File.filePath, this.u));
var n, o = this.curSpellchecker,
a = !1;
this.u == c ? this.curSpellchecker = null : "auto" == this.u ? this.D ? (n = this.D, this.curSpellchecker = this.getSpellChecker(this.D), a = !0) : (this.curSpellchecker = null, this.scheduleAutoUpdateLang()) : (n = this.u, this.curSpellchecker = this.getSpellChecker(this.u), a = !0), this.T(n, a), o && o != this.curSpellchecker && (o || {}).lang != (this.curSpellchecker || {}).lang && i("[contenteditable='true']").prop("contenteditable", !1).prop("contenteditable", !0), this.updatePanel()
}, l.prototype.L = function() {
if (!this.R) {
this.$panel = i("#spell-check-panel"), this.B(u);
var t = this;
this.R = !0;
var e = null;
i("#ty-spell-check-panel-item-label").on("keydown", function(e) {
e.stopPropagation();
var n = e.keyCode || e.which;
if ("Esc" == o[n]) t.hide();
else {
if ("Tab" == o[n]) return !1;
if ("Up" == o[n] || "Down" == o[n]) return t.I("Up" == o[n]), !1;
"Enter" == o[n] ? i("[data-spell-lang].ty-active").trigger("click") : "Backspace" != o[n] && "Delete" != o[n] || i(this).trigger("input")
}
}).on("input cut copy", function(n) {
e && clearTimeout(e), e = setTimeout(function() {
t.N(), e = null
}, 50)
}), this.updatePanel()
}
}, l.prototype.B = function(t) {
var e = this.$panel[0].querySelector(".ty-lang-list"),
n = this.$panel[0].querySelector("#ty-spell-check-panel-item-temp").innerText.trim(),
i = this.u,
r = t.map(function(t) {
return n.replace("%label", t.label).replace(/%code/g, t.code).replace(/%select/, i == t.code ? "ty-checked" : "")
}).join("");
e.innerHTML = r
}, l.prototype.N = function() {
var t = i("#ty-spell-check-panel-item-label").val().trim().toLocaleLowerCase();
if (!t) return this.B(u), void this.O();
if (!this.$panel[0].style.height) {
var e = this.$panel[0];
e.style.height = e.clientHeight + "px"
}
var n = {},
r = u.filter(function(e) {
var i = [e.code, e.userLang, e.label, e.enLabel].map(function(e) {
var n = e.toLocaleLowerCase().indexOf(t);
return ~n ? n : 99
}).sort()[0];
return 99 != i && (n[e.code] = i, !0)
});
r = r.sort(function(t, e) {
return n[t.code] - n[e.code]
}), this.B(r), this.O()
}, l.prototype.O = function() {
var t = this.$panel.find(".ty-active");
return t.length || (t = this.$panel.find(".ty-lang-list>.ty-spell-check-panel-item").first().addClass("ty-active")), t
}, l.prototype.I = function(t) {
var e = this.O(),
n = t ? e.prev() : e.next();
e.removeClass("ty-active"), n.addClass("ty-active")
}, l.prototype.j = function() {
return this.u == c ? null : "auto" == this.u ? this.D || "" : this.u
}, l.prototype.updatePanel = function() {
var t = this.j();
i("#footer-spell-check-label").html((t || "").toUpperCase() || '<span class="ty-icon ty-spellcheck" style="font-size: 1.1em;vertical-align: middle;"></span>'), this.R && (this.$panel.find(".ty-checked").removeClass("ty-checked"), this.$panel.find("[data-spell-lang='" + this.u + "']").addClass("ty-checked"), this.$panel.find("[data-spell-lang='auto'] .ty-spell-check-panel-item-code").text(this.D || ""))
}, l.prototype.show = function() {
this.loadSpellCheckErr && this.P(), this.editor.lastCursor = this.editor.selection.buildUndo(), this.L(), document.body.classList.add("ty-show-spell-check"), document.body.classList.remove("ty-show-word-count"), this.autoUpdateLang(!0), document.querySelector("#footer-spell-check").classList.contains("ty-spell-check-dict-error") && this.showDictMissing(), setTimeout(function() {
document.querySelector("#ty-spell-check-panel-item-label").focus()
}, 10);
this.$panel[0].style.height = ""
}, l.prototype.hide = function() {
document.body.classList.remove("ty-show-spell-check"), this.editor.restoreLastCursor(), i("#ty-spell-check-panel-item-label").val(""), this.$panel.find(".ty-active").removeClass("ty-active"), this.$panel[0].style.height = "", this.B(u)
}, l.prototype.A = function() {
var t = i("#dict-install-dialog"),
e = this.c;
t.find("#dict-install-dialog-title").text(i.localize.getString("Download dictionary file for %@").replace("%@", e.label));
var n = "https://dict.typora.io/" + e.code + "/LICENSE";
t.modal({
backdrop: "static"
}).focus(), setTimeout(function() {
t.find("webview").attr("src", n)
}, 100)
}, l.prototype.q = function(t) {
this.j() == t && (this.downloadDicts[t] = void 0, this.spellCheckFactory.clearCache(), i("#footer-spell-check").addClass("ty-spell-check-dict-downloaded"), this.setLangMode(t), setTimeout(function() {
i("#footer-spell-check").removeClass("ty-spell-check-dict-downloaded")
}, 1e3))
}, l.prototype.U = function(t, e, n) {
var r = this.z,
o = e || 0;
e < 0 ? (r[t] = void 0, this.downloadDicts[t] = void 0) : (r[t] || (r[t] = [0, 0]), void 0 !== e && (r[t][0] = e), void 0 !== n && (r[t][1] = n), o = (r[t][0] + r[t][1]) / 2, this.downloadDicts[t] = o), this.j() == t && (e < 0 ? (i("#footer-spell-check").attr("ty-hint", i.localize.getString("Spell Check (%@ unavailable)").replace("%@", this.labelMap[t])).addClass("ty-spell-check-dict-error").removeClass("ty-spell-check-dict-downloading"), document.querySelector("#footer-spell-check-download-process").innerText = "") : (i("#footer-spell-check").attr("ty-hint", i.localize.getString("Spell Check (%@ downloading)").replace("%@", this.labelMap[t])).removeClass("ty-spell-check-dict-error").addClass("ty-spell-check-dict-downloading"), document.querySelector("#footer-spell-check-download-process").innerText = "#footer-spell-check.ty-spell-check-dict-downloading:before {width: " + 100 * o + "%;}"))
}, l.prototype.S = function() {
var t = this.c.code;
s.setting.downloadDict(t, a.getCurrentWindow().id), this.U(t, 0, 0), i("#md-notification").fadeOut()
}, l.prototype.C = function() {
var t = this;
try {
var e = reqnode("electron").ipcRenderer;
e.on("dict-loaded", function(e, n) {
t.u, t.userDictPath = n, t.spellCheckFactory.setUserDictionaryPath(t.userDictPath), t.u && t.setLangMode(t.u)
}), this.downloadDicts = {}, this.z = {}, e.on("dict-download-start", function(e, n) {
t.U(n, 0, 0)
}), e.on("dict-download-process", function(e, n) {
t.U(n.locale, "dic" == n.type ? n.process : void 0, "dic" == n.type ? void 0 : n.process)
}), e.on("dict-download-end", function(e, n) {
t.U(n, 1, 1), t.q(n)
}), e.on("dict-download-err", function(e, n) {
t.U(n, -1)
});
s.setting.getDownloadingDicts().forEach(function(e) {
t.U(e, 0, 0)
}), this.spellCheckFactory = reqnode("spellchecker"), this.curSpellchecker = null, this.userDictPath = s.setting.getUserDictionaryPath(), this.userDictPath, this.userDictPath && this.spellCheckFactory.setUserDictionaryPath(this.userDictPath);
var n = new(reqnode("events").EventEmitter);
n.add = function(t, n) {
e.send("user-dict-add", {
lang: t,
word: n
})
}, n.remove = function(t, n) {
e.send("user-dict-remove", {
lang: t,
word: n
})
}, n.loadUserDict = function() {
return s.setting.userDict || {}
}, e.on("user-dict-update", function(t, e) {
n.emit("update", e)
}), this.spellCheckFactory.setUserDictProvider(n), this.M()
} catch (t) {
this.loadSpellCheckErr = t.stack || t.message, console.error(t)
}
this.spellCheckFactory || i("#footer-spell-check").off("click").on("click", function() {
t.P()
})
}, l.prototype.P = function() {
this.editor.EditHelper.showDialog({
title: i.localize.getString("Failed to load spellcheck module"),
message: this.loadSpellCheckErr.split(/\n/).map(function(t) {
return t.replace(/\((.+)(TypeMark|app)/, "(")
}).join("\n"),
type: "error",
backdrop: "static"
})
}, l.prototype.M = function(t) {
var e = this;
if (this.u != c) {
var n = this.j() || this.g || "en-US";
/^(zh|ja)/.exec(n) && (n = "en-US"), reqnode("electron").webFrame.setSpellCheckProvider(n, !1, {
spellCheck: function(t) {
return e.curSpellchecker ? !e.curSpellchecker.isMisspelled(t) : (e.scheduleAutoUpdateLang(), !0)
}
})
} else this.curSpellchecker = null
}, l.prototype.H = function() {
var t = this.editor;
var e = this.j() || this.g;
return this.spellCheckFactory ? this.spellCheckFactory.detectLanguageForText(function() {
for (var e = t.writingArea.querySelectorAll("p, h1, h2, h3, h4, h5, h6"), n = Math.min(e.length, 4), i = "", r = 0; r < n && ((e[r].querySelectorAll("[md-inline='plain']") || []).forEach(function(t) {
i += t.textContent
}), !((i += "\n").length > 100)); r++);
return i
}(), {
httpHint: e
}) : Promise.resolve("")
}, l.prototype.getSpellChecker = function(t) {
return this.spellCheckFactory.getSpellChecker(/^(zh|ja)/.exec(t || "") ? "en-US" : t)
}, l.prototype.autoUpdateLang = function(t) {
if (!0 === t || !this.D && this.u != c) {
var e = this;
this.H().then(function(n, i) {
if (i) Reporter.error(i);
else if (n && (/^en/.exec(n) ? n = /^en/.exec(e.g) ? e.g : "en-US" : /^zh/.exec(n) ? n = "zh" : e.labelMap[n] || (n = null)), n) {
if (e.D = n, e.updatePanel(), "auto" != e.u) return;
e.curSpellchecker = e.getSpellChecker(n), e.T(n, !0)
} else t && e.D && (e.D = null, e.updatePanel())
}), this.k = null
}
}, l.prototype.scheduleAutoUpdateLang = function(t) {
if ("auto" == this.u || t) {
this.k && clearTimeout(this.k);
var e = this;
this.k = setTimeout(function() {
e.autoUpdateLang(t)
}, 2e3)
}
}, l.prototype.W = function() {
this.w(), this.autoUpdateLang()
}, l.prototype.l = function() {
this.D = "", this.curSpellchecker = null, this.k && clearTimeout(this.k)
}, l.prototype.reset = function(t) {
File.isNode && (this.l(), this.w(), this.setLangMode(this.u), t && this.scheduleAutoUpdateLang(!0))
}, l.prototype.showDictMissing = function() {
var t = u.find(function(t) {
return t.code == ("auto" == this.u ? this.D : this.u)
}, this);
if (t) {
this.c = t;
var e = document.querySelector("#ty-spell-check-dict-missing-temp").innerText;
i("#md-notification").html(e.replace("$1", i.localize.getString("Dictionary file is missing to enable spellcheck support for %@.")).replace("%@", t.label).replace("$2", i.localize.getString("Install Language Support")).replace("$3", i.localize.getString("Disable Spell Check")).replace("$4", i.localize.getString("Dismiss"))).show(), this.useHunSpell() ? i("#ty-spell-check-dict-missing-secondary-btn").text(i.localize.getString("Learn More…")) : i("#ty-spell-check-dict-missing-secondary-btn").text(i.localize.getString("Install dictionary file only for Typora"))
}
}, n.exports = l
}), $__System.registerDynamic("4a", ["14", "12", "13", "31", "37", "26", "e", "2c"], !0, function(t, e, n) {
"use strict";
this || self;
var i, r = t("14"),
o = t("12"),
a = t("13"),
s = (a.Node, a.TYPE, t("31")),
u = t("37"),
c = (r = t("14"), t("26").map, t("e")),
l = t("2c"),
f = window.reqnode ? reqnode("electron").remote : null,
h = f ? f.app : window.app,
d = !1,
m = (f && f.getCurrentWindow(), "_recent"),
v = [];
function p(t, e) {
t.length && e.length && l(t[0], e[0], {
childrenOnly: !0,
getNodeKey: function(t) {
return t.dataset && t.dataset.path
},
onBeforeElUpdated: function(t, e) {
t.classList.contains("file-node-collapsed") && (e.classList.add("file-node-collapsed"), e.classList.remove("file-node-expanded"))
}
})
}
var g = s.statWrapper;
function b(t, e) {
return File.isMac ? new Promise(function(e) {
y(t, e)
}) : w(t, !1, e)
}
function y(t, e) {
if (!t.path) return e(null);
bridge.callHandler("library.listDocsUnder", t.path, function(n) {
if (!n || !n.name) return e(null);
t.fetched = !0, t.subdir = n.subdir, t.lastModified = n.lastModified, (i = t.subdir.map(function(e, n) {
return new Promise(function(i) {
e.isOpen ? (e.fetched = !0, i()) : document.querySelector(".file-node-expanded.file-tree-node[data-path='" + r.escapeSelector(e.path) + "']") ? y(e.path, function(e) {
t.subdir[n] = e, t.subdir[n] && (t.subdir[n].isOpen = !0), i()
}) : i()
})
}), i && i.length ? Promise.all(i) : Promise.resolve()).then(function() {
t.content = n.content, t.isDirectory = n.isDirectory, t.isFile = n.isFile, t.name = n.name, e && e(t)
});
var i
})
}
function w(t, e, n) {
var i = reqnode("fs-plus"),
o = reqnode("path"),
a = File.isWin ? "\\" : "/";
return new Promise(function(u, c) {
var l = t.path;
if (t.name = o.basename(l) || l, t.subdir = [], t.content = [], t.fetched = !e, "." == t.name[0]) return u();
g(l, function(o) {
if (!o || o.shouldIgnore) return u();
if (t.isDirectory = o.isDir, t.isFile = o.isFile, t.lastModified = o.mtime, o.isFile) return t.fetched = !0, s.isSupportedFile(t.name) ? u(t) : u();
if (o.isDir) {
if (c = l, File.filePath && c && 0 == File.filePath.indexOf(c.replace(/[\/\\]$/, "") + a)) t.isOpen = !0;
else if (e) return u(t);
t.isDirectory && (t.fetched || t.isOpen) && File.isUnixNode && n.addFolderWatchByUnix(t), i.list(l, void 0, function(e, i) {
if (e) return u();
t.isOpen || document.querySelector(".file-node-expanded.file-tree-node[data-path='" + r.escapeSelector(l) + "']") && (t.isOpen = !0), Promise.all(i.map(function(e) {
return w({
path: e
}, !t.isOpen, n)
})).then(function(e) {
if (t.subdir.length + t.content.length > 0) return t.fetched = !0, void u(t);
e.forEach(function(e) {
e && (e.isDirectory ? t.subdir.push(e) : t.content.push(e))
}), t.fetched = !0, u(t)
})
})
}
var c
})
})
}
var F = o.Model.extend({
initialize: function(t) {
this.parent = t, this.editor = t.editor, this.$template = c(document.querySelector("#file-library-node-template").textContent), this.root, this.unixWatchers = {}
},
getRoot: function() {
return this.parent.root
},
setRoot: function(t) {
return this.parent.root = t
},
renderNode: function(t, e) {
if (!t) return c();
var n = this.$template.clone(),
i = this.parent;
e || (t.subdir && t.subdir.sort(i.compareItem.bind(i)), t.content && t.content.sort(i.compareItem.bind(i))), t == this.getRoot() ? (t.isOpen = !0, n.find(".file-node-open-state").remove()) : t.isDirectory && t.subdir && (t.subdir.length || t.content.length) && n.attr("data-has-sub", "true").addClass(t.isOpen ? "file-node-expanded" : "file-node-collapsed");
var o = t.name.lastIndexOf(".");
if ((o < 0 || t.isDirectory) && (o = t.name.length), n.find(".file-node-title-name-part").text(t.name.substr(0, o)), n.find(".file-node-title-ext-part").text(t.name.substr(o)), n.attr("data-path", t.path).attr("data-is-directory", t.isDirectory), n.find(".file-node-icon").addClass(function(t) {
return t == this.getRoot() ? t.path == m ? "fa fa-history" : "fa fa-folder" : t.isDirectory ? "fa fa-folder" : "fa fa-file-text-o"
}.call(this, t)), n.find(".file-node-title").attr("title", r.abbreviatingWithTilde(t.path)), t.isDirectory || n.addClass("file-library-file-node"), t == this.getRoot() ? n.addClass("file-node-root") : t.isDirectory || t.path != s.getCurrentFilePath() || n.addClass("active"), t.isDirectory && t.subdir) {
var a = n.find(".file-node-children");
a.html(""), t.isOpen && (t.subdir.forEach(function(t) {
a.append(this.renderNode(t))
}, this), t.content.forEach(function(t) {
a.append(this.renderNode(t))
}, this))
}
return n
},
renderIfNeed: function() {
return !d && (this.render(), File.isWin && this.parent.addFolderWatchByWin(File.getMountFolder()), !0)
},
render: function(t) {
d = !0;
var e = this,
n = File.getMountFolder();
(e.getRoot() ? Promise.resolve(e.getRoot()) : new Promise(function(t) {
e.parent.calcMountFolder().then(function(n) {
e.parent.root = {
path: n,
isOpen: !0
}, n ? b(e.parent.root, e).then(function(n) {
e.parent.root = n, t(n), e.parent.slient = !1
}) : t(null)
})
})).then(function(i) {
i && i.path ? (t || 1 == d) && function() {
d = "complete", c("#file-library-tree").html("").append(this.renderNode(this.getRoot())).attr("data-state", ""), this.parent.markCurrentFile()
}.call(e) : (c("#file-library-tree").html(""), e.parent.onLoadFolderFailed(!n))
}), c("#file-library-tree").attr("data-state", "rendering").html("")
},
findElemFromPath: function(t) {
return c(".file-tree-node[data-path='" + r.escapeSelector(t) + "']")
},
focusToFile: function(t, e, n, i) {
if (this.getRoot() && t && !0 !== d) {
var r = File.getMountFolder(),
o = File.isWin ? "\\" : "/",
a = this,
s = window.innerHeight,
u = File.isMac ? c(".sidebar-content") : c("#file-library"),
l = u.scrollTop();
if (0 === t.indexOf(r)) {
! function e(r, c) {
if (0 != c.length)
if (1 == c.length) {
var f = n ? a.findElemFromPath(t) : a.markOpenedFile(t);
! function(t) {
if (t.length) {
var e = t[0].offsetTop;
e < l ? (l = e, u.scrollTop(l)) : e - l > s - 200 && (l = e - s + 300, u.scrollTop(l))
}
}(f), 0 == u.scrollTop() && setTimeout(function() {
0 != u.scrollTop() || l || u.scrollTop(l)
}, 200), i && i(f)
} else r = (r + o + c.shift()).replace(/[\\]+/, "\\"), a.expandNode(a.findElemFromPath(r), r, function() {
e(r, c)
})
}(r, t.substr(r.length).replace(/^[\\/]+/g, "").split(/[\\/]+/) || [])
}
}
},
highlight: function(t) {
var e = this;
this.focusToFile(t, !1, !0, function(t) {
t.addClass("blink-area"), setTimeout(function() {
t.removeClass("blink-area")
}, 2e3), t.length && (e.parent.nextChangeHighlight = null)
})
},
markOpenedFile: function(t) {
return this.parent.markOpenedFile(t).filter(".file-tree-node")
},
needRepaint: function() {
d = !1
},
addFolderWatchByUnix: function(t) {
var e = this,
n = this.unixWatchers[t.path];
n && (n.close(), n = null);
function r() {
var t = v.clone();
i = null, v = [];
var n = [];
e.parent.isSuppressOnChange() || t.forEach(function(t) {
e.onChangeForLinux(t[0], t[1], n)
})
}
var o;
try {
o = reqnode("pathwatcher")
} catch (t) {
this.parent.showUnixWatchError(t.message)
}
if (o) try {
this.unixWatchers[t.path] = o.watch(t.path, function(n) {
o = n, a = t, e.parent.isSuppressOnChange() || (i && clearTimeout(i), v.push([o, a]), i = setTimeout(r, 200));
var o, a
})
} catch (e) {
console.warn("Unable to watch path " + t.path)
}
},
findNodeFromPath: function(t, e) {
if (t && this.getRoot()) return e = e || [],
function t(n, i) {
if (n) {
if (r.isSamePath(n.path, i)) return n;
e.push(n);
for (var o = 0; o < n.subdir.length; o++) {
var a = n.subdir[o];
if (r.isSamePath(a.path, i)) return a;
if (r.isAncesterPathOf(a.path, i)) return t(a, i)
}
return n.content.find(function(t) {
return r.isSamePath(t.path, i)
})
}
return null
}(this.getRoot(), t)
},
expand: function(t, e, n) {
var i;
return 1 != (i = e ? c(e) : this.findElemFromPath(t))[0].dataset.hasSub && "true" != i[0].dataset.hasSub || !i.hasClass("file-node-collapsed") ? (n && n(), !1) : (this.expandNode(i, t, n), !0)
},
expandNode: function(t, e, n) {
if (!0 !== d) {
var i = this.findNodeFromPath(e, []),
r = this;
i && (i.isOpen = !0, t.children(".file-node-children").children().length ? t.removeClass("file-node-collapsed").addClass("file-node-expanded") : !i.fetched || i.subdir.length > 0 && !i.subdir[0].fetched ? b(i, r).then(function(e) {
e && (t.replaceWith(r.renderNode(e)), c(".file-library-node.active").length || r.markOpenedFile(s.getCurrentFilePath()), n && n())
}) : t.replaceWith(this.renderNode(i)), c(".file-library-node.active").length || this.markOpenedFile(s.getCurrentFilePath()), n && n())
}
},
setSortType: function() {
"complete" === d && this.getRoot() && this.getRoot().fetched && this.render(!0)
},
onChangeForMac: function(t) {
if (d) {
var e, n = [],
i = new Set,
o = new Set,
a = this;
if (t.forEach(function(t) {
if (e = this.findNodeFromPath(t.path, n), this.getRoot())
if ("removed" == t.type) t.path == this.getRoot().path ? this.parent.root = null : e && n.length && l.call(this, e, n.last());
else if ("rename" == t.type) {
if (t.oldPath == this.getRoot().path) return void(this.parent.root = null);
n = [], e = this.findNodeFromPath(t.oldPath, n), l.call(this, e, n.last()), f(t.newPath, t.isDir)
} else "created" != t.type || e || e == this.getRoot() || f(t.path, t.isDir)
}, this), this.getRoot()) {
a = this;
o.forEach(function(t) {
y(t, function(t) {
t && s.call(a, t)
}), i.delete(t)
}, this), i.forEach(function(t) {
s.call(this, t)
}, this)
} else this.parent.onRootChanged()
}
function s(t) {
var e = a.findElemFromPath(t.path),
n = null;
e.hasClass("file-node-root") && (n = c(".sidebar-content").scrollTop()), p(e, a.renderNode(t)), n && c(".sidebar-content").scrollTop(n), u(t.path)
}
function u(t) {
var e = a.parent.nextChangeHighlight;
e && 0 == e.indexOf(t) && a.highlight(e)
}
function l(t, e) {
t && (t.isDirectory ? e.subdir.remove(t) : e.content.remove(t), e.subdir.length + e.content.length == 0 ? (t.isOpen = !1, s.call(this, e)) : a.findElemFromPath(t.path).remove())
}
function f(t, e) {
var n = r.pathByDeleteLastComponent(t),
s = a.findNodeFromPath(n);
s && function(t, e, n) {
if (e.fetched && !o.has(e)) {
var r;
if (e.content.length + e.subdir.length == 0 && o.add(e), n) {
if (e.subdir.findIndex(function(e) {
return e.path == t
}) > -1) return;
o.add(e)
} else {
if (e.content.findIndex(function(e) {
return e.path == t
}) > -1) return;
r = {
path: t,
isDirectory: !1,
name: t.split("/").last(),
lastModified: (new Date).getTime() / 1e3
}, e.content.push(r)
}
i.add(e)
}
}.call(a, t, s, e), u(t)
}
},
isPathTooDeepToDisplay: function(t, e) {
if (e = e || [], this.findNodeFromPath(t, e), !e.length) return !0;
return !!t.substr(e.last().path.length).replace(/^[\\/]+/, "").match(/[\\/]/)
},
onChangeForWin: function(t, e) {
if (d && !this.parent.isSuppressOnChange()) {
var n = [],
i = File.isWin ? "\\" : "/",
r = this;
this.isPathTooDeepToDisplay(t, n) || function(t, n, o) {
if (n = n || [], !e.find(function(e) {
return e == t || 0 == t.indexOf(e + i)
})) {
e.push(t);
var a = reqnode("path").dirname(t),
s = r.findNodeFromPath(a);
if (s && s.fetched) {
var u = !s.isOpen;
w({
path: t
}, u, r).then(function(e) {
e ? (function(t, e, n) {
var i = r.findNodeFromPath(t);
i && i.fetched ? i.path != t && (r.findElemFromPath(i.path).replaceWith(r.renderNode(e)), i.path = e.path, i.name = e.name) : r.onAddFile(e, n)
}(t, e, s), o && o()) : function(t, e) {
e = e || [];
var n = r.findNodeFromPath(t, e);
if (n) {
var i = e.last();
i.subdir.remove(n), i.content.remove(n), i.subdir.length + i.content.length == 0 ? r.findElemFromPath(i.path).replaceWith(r.renderNode(i)) : r.findElemFromPath(t).remove()
}
}(t, n)
})
}
}
}(t, n, function() {
if (r.parent.useTreeStyle) {
var e = r.parent.nextChangeHighlight;
e && 0 == e.indexOf(t) && r.highlight(e)
}
})
}
},
onChangeForLinux: function(t, e, n) {
var i = this;
n.find(function(t) {
return t == e.path || 0 == e.path.indexOf(t + "/")
}) || (n.push(e.path), "change" == t && w(e, !1, this).then(function(t) {
if (t) {
p(i.findElemFromPath(t.path), i.renderNode(t)), File.filePath && File.filePath.substring(0, File.filePath.lastIndexOf("/")) == t.path && i.parent.markCurrentFile(!0, !0);
var e = i.parent.nextChangeHighlight;
e && 0 == e.indexOf(t.path) && i.highlight(e)
}
}), "rename" == t && e == i.getRoot() && i.parent.onRootChanged(), "delete" == t && e == i.getRoot() && i.parent.onRootChanged())
},
onAddFile: function(t, e) {
var n = e || this.findNodeFromPath(t.folderPath),
i = n.content.length + n.subdir.length == 0,
r = t.isDirectory ? n.subdir : n.content,
o = r.findIndex(function(e) {
return this.parent.compareItem(t, e) < 0
}, this);
if (o < 0 && (o = r.length), r.splice(o, 0, t), t.isDirectory || (o += n.subdir.length), i) this.findElemFromPath(n.path).replaceWith(this.renderNode(n));
else {
var a = this.findElemFromPath(n.path).children(".file-node-children");
if (n.isOpen || a.children().length) {
var s = this.renderNode(t)[0];
return a[0].insertChildAtIndex(s, o), s
}
}
},
newFile: function(t) {
this.newFileCommand(this.findElemFromPath(t), !1)
},
newFolderCommand: function(t) {
this.newFileCommand(t, !0)
},
newFileCommand: function(t, e) {
var n = this.editor.getJQueryElem(t).closest(".file-library-node"),
i = n.attr("data-path"),
o = "true" == n.attr("data-is-directory"),
a = this;
if (i || (n = c("#file-library-tree .file-node-root"), i = n.attr("data-path"), o = !0), i)
if (o || (i = r.pathByDeleteLastComponent(i)), o) {
a = this;
this.expandNode(n, i, function() {
u.call(a)
})
} else u.call(this);
function s(t, e, n, i) {
if (i) {
if (t.content.push(n), a.parent.isDiscardableUntitled()) return a.parent.openFile(n.path), p(e, a.renderNode(t, !0)), a.focusToFile(n.path), void setTimeout(function() {
a.parent.markCurrentFile(), a.parent.resumeOnChange(), a.renameFileCommand(a.findElemFromPath(n.path)[0], !0)
}, 10)
} else t.subdir.push(n);
p(e, a.renderNode(t, !0)), a.markOpenedFile(n.path), a.renameFileCommand(a.findElemFromPath(n.path)[0], !0)
}
function u() {
var t = this.findNodeFromPath(i);
if (t) {
var n = function(t, e) {
var n = 0;
return e ? (t.subdir.forEach(function(t) {
var e = /^untitled folder( (\d+))?$/i.exec(t.name);
e && (n = Math.max(n, (e[2] || 0) - 0 + 1))
}), "Untitled Folder" + (n ? " " + n : "")) : (t.content.forEach(function(t) {
var e = /^untitled( (\d+))?\./i.exec(t.name);
e && (n = Math.max(n, (e[2] || 0) - 0 + 1))
}), "Untitled" + (n ? " " + n : "") + ".md")
}(t, e),
r = File.isNode && reqnode("fs");
try {
var o = this.findElemFromPath(i),
u = i + (File.isWin ? "\\" : "/") + n,
c = {
fetched: !0,
subdir: [],
content: [],
isDirectory: !!e,
name: n,
path: u
};
if (a.parent.pauseOnChange(!0), e) File.isNode ? r.mkdir(u, function(e) {
e ? a.parent.resumeOnChange() : s(t, o, c, !1)
}) : bridge.callHandler("library.newFolder", u, function(e) {
e ? s(t, o, c, !1) : a.parent.resumeOnChange()
});
else if (File.isNode) {
var l = r.openSync(u, "wx");
r.close(l), s(t, o, c, !0)
} else bridge.callHandler("library.newFile", u, function(e) {
e ? s(t, o, c, !0) : a.parent.resumeOnChange()
})
} catch (t) {
a.parent.resumeOnChange()
}
}
}
},
renameFileCommand: function(t, e) {
c(".file-node-on-edit").removeClass("file-node-on-edit");
var n = this.editor.getJQueryElem(t).closest(".file-library-node").addClass("file-node-on-edit"),
i = n.attr("data-path"),
o = (n.attr("data-is-directory"), n.children(".file-node-content").children(".file-tree-rename-div")),
a = o.prev().text().trim(),
l = o.children("input").val(a),
d = this,
m = c("#sidebar-content").width() - 48 - o[0].offsetLeft;
m = Math.min(m, 200), m = Math.max(m, 140), l.width(m);
this.parent.bindRename(l, function(t) {
File.isMac ? function(t) {
var e = t.val().replace(/[\/\\]/g, "").trim(),
o = r.pathByDeleteLastComponent(i) + "/" + e;
d.parent.pauseOnChange(!0);
var u = i == s.getCurrentFilePath();
i != o ? bridge.callHandler("library.renameFile", {
old: i,
new: o
}, function(i) {
i ? (n.children(".file-node-content").children(".file-node-title").text(e), u && setTimeout(function() {
d.parent.markOpenedFile(o, !0), d.focusToFile(o)
}, 200), d.parent.scheduleChangeHighlight(o)) : t.val(a)
}) : t.val(a), n.removeClass("file-node-on-edit"), d.editor.restoreLastCursor()
}(t) : function(t) {
var o = t.val().trim();
d.parent.resumeOnChange(), o = File.isWin ? o.replace(/[\\\/:*?"<>\|\000-\031]/g, "").trim() : o.replace(/[\/\\\000-\031]/g, "");
var s = r.pathByDeleteLastComponent(i) + (File.isWin ? "\\" : "/") + o;
s = s.trim(), t.closest(".file-node-on-edit").removeClass("file-node-on-edit");
var l = File.filePath && r.isAncesterPathOf(i, File.filePath),
m = f.getCurrentWindow().id,
v = reqnode("fs-extra");
File.filePath;
function p(t) {
f.dialog.showErrorBox(c.localize.getString("Rename Failed"), c.localize.getString('Failed to rename from "{0}" to "{1}"').format(a, o) + "\n" + t), l && u.watchFileChange(File.filePath), h.filesOp.clearUndo()
}
r.isSamePath(i, s) || !v.existsSync(s) ? (h.sendEvent("willRename", {
oldPath: i,
fromWin: m
}), v.rename(i, s, function(t) {
n.removeClass("file-node-on-edit"), d.editor.restoreLastCursor(), t && (s = i), h.sendEvent("didRename", {
oldPath: i,
newPath: s,
fromWin: m
});
var o = reqnode("path");
if (File.isWin && !d.parent.folderWatchedOnWin) {
n.attr("data-path", s), n.find(".file-node-title").attr("title", r.abbreviatingWithTilde(s));
var a = o.basename(s),
u = a.lastIndexOf(".");
u < 0 && (u = a.length), n.find(".file-node-title-name-part").text(a.substr(0, u)), n.find(".file-node-title-ext-part").text(a.substr(u))
}
if (t) p(t);
else if (e || (h.filesOp.registerUndo(s, i, c.localize.getString("Rename %@", "Panel").replace("%@", o.basename(i))), d.parent.scheduleChangeHighlight(s)), !File.filePath) return
})) : p(c.localize.getString("File with same name already exists at target path."))
}(t)
}, function() {
l.closest(".file-node-on-edit").removeClass("file-node-on-edit")
}), l.focus()
},
bindEvents: function() {
var t = this;
c("#file-library-tree").on("click", ".file-node-content", function(e) {
if (1 === e.which) {
e.preventDefault(), e.stopPropagation(), document.activeElement.blur();
var n = c(this).parent(),
i = n.attr("data-path"),
r = n.attr("data-is-directory");
if (n.hasClass("file-node-on-edit")) return !1;
if (File.isMacOrMacNode ? e.metaKey : e.ctrlKey) t.parent.openWithCtrl(i, "true" == r);
else {
if ("false" == r) t.parent.openFile(i);
else if ("true" == n.attr("data-has-sub")) {
n.hasClass("file-node-expanded") ? (o = n, a = i, t.findNodeFromPath(a).isOpen = !1, o.addClass("file-node-collapsed").removeClass("file-node-expanded")) : t.expandNode(n, i)
}
var o, a
}
}
})
}
});
n.exports = F
}), $__System.registerDynamic("37", ["14", "12", "31", "29", "26"], !0, function(t, e, n) {
"use strict";
this || self;
var i, r = t("14"),
o = (t("12"), t("31")),
a = (t("29"), t("26").map, window.reqnode ? reqnode("electron").remote : null),
s = (r.date2NatrualLang, null),
u = null,
c = function(t) {
var e = new Date;
return i = r.formateDateOnly(new Date) + " " + (t || "untitled").replace(/\.[^.]*$/, "") + " " + r.formateTimeOnly(e, !0).replace(/:/g, "") + ".md"
};
function l(t) {
var e;
try {
var n = reqnode("fs");
u && n.unwatchFile(u), u = t, n.watchFile(t, function(i, r) {
r && r.mtime == i.mtime || (e && clearTimeout(e), e = setTimeout(function() {
n.existsSync(t) ? File.presentedItemChanged() : v(), e = null
}, 100))
})
} catch (t) {
console.log(t)
}
}
var f = !1;
function h(t, e) {
var n = reqnode("fs");
!t || n.existsSync(e) ? (File.presentedItemChanged(), t && m(e)) : (m(null), v()), t = !1, d = null
}
var d;
function m(t) {
if (reqnode) {
var e = reqnode("fs");
if (s && (s.removeAllListeners(), s.close(), s._handle = null, s = null), d && clearTimeout(d), d = null, u && e.unwatchFile(u), t) try {
(s = e.watch(t, {
persistent: !1
})).on("change", function(e, n) {
File.inSavingProcess && "rename" == e ? m(t) : (f = f || "change" == e, d && clearTimeout(d), d = setTimeout(function() {
h(h, t)
}, 500))
}), s.on("error", function(e) {
s.close(), s._handle = null, s = null, l(t)
})
} catch (e) {
l(t)
}
}
}
var v = function() {
File.getCurrentDocByNode().switchToUntitled(), Reporter.record("current file is moved/deleted")
};
window.clientHanlderOnPresentationMoved = function() {
File.isNode && (File.updateChangeCount(File.ChangeType.NSChangeReadOtherContents), m(null)), File.editor.imgEdit.onFileMoved()
};
var p = function(t) {
t && window.debugMode && console.warn(t)
},
g = function(t) {
if (i && t) {
var e = reqnode("fs"),
n = reqnode("path"),
r = o.getUnsavedDraftsPath(),
a = n.resolve(r, i);
e.stat(a, function(i, o) {
!i && e.rename(a, n.resolve(r, c(t)), p)
})
}
},
b = function(t, e, n) {
var r = $("#title-text"),
s = a.app,
u = a.getCurrentWindow(),
l = {
"File→Open File Location": {
enabled: !!t
},
"File→Reveal in Sidebar": {
enabled: !!t
}
};
if (File.isWin && (l["File→Properties"] = {
enabled: !!t
}), File.fileEncode = void 0, t) {
n = o.getFileNameFromPath(t);
File.filePath = t, File.fileName = n, File.fileEncode = e, s.getDocumentController().hasDuplicateName(n) ? (r.text(t), u.setTitle(t + " - Typora")) : (r.text(n), u.setTitle(n + " - Typora")), m(t), g(n), File.editor.library && (File.editor.library.markCurrentFile(), File.e && -1 != t.indexOf(File.e + (File.isWin ? "\\" : "/")) || (File.setMountFolder(reqnode("path").dirname(t)), File.editor.library.onRootChanged(File.e, !0)))
} else(n = n || File.fileName) ? (File.fileName = n, r.text(n), u.setTitle(n + "• - Typora")) : (r.text($.localize.getString("Untitled")), u.setTitle($.localize.getString("Untitled") + " - Typora")), File.filePath = void 0, i || c();
o.refreshTitlebarText(), JSBridge.menu.update(l)
};
e.watchFileChange = m, e.onPresentationMoved = v, e.setFileTitle = b, e.saveToRecover = function(t) {
t.trim().length && -1 == (File.filePath || "").indexOf(o.getUnsavedDraftsPath()) && reqnode("fs").writeFile(o.getUnsavedDraftsPath() + "/" + (i || c()), t, "utf8", function(t) {
t ? p(t) : g(File.fileName || File.getSuggestedFileName())
})
}, e.prepareInfoPanel = function() {
document.querySelector("#file-library").style.display = "", document.querySelector("#file-info-content").style.display = "none";
function t(t) {
$(".info-panel-tab.active").removeClass("active"), "file" == t ? File.editor.library.switch("files", !0) : File.editor.library.switch("outline")
}
$("#info-panel-tab-file").click(function() {
t("file")
}), $("#info-panel-tab-outline").click(function() {
t("outline")
})
}
}), $__System.registerDynamic("4b", ["14", "12", "13", "31", "37", "26", "29", "e"], !0, function(t, e, n) {
"use strict";
this || self;
var i, r, o, a, s, u = t("14"),
c = t("12"),
l = t("13"),
f = l.Node,
h = (l.TYPE, t("31")),
d = (t("37"), u = t("14"), t("26").map, t("29"), t("e")),
m = window.reqnode ? reqnode("electron").remote : null,
v = m ? m.app : window.app,
p = d("#file-library-list-children"),
g = d("#file-library-list"),
b = [],
y = function(t) {
return t.replace(/^\s*(([\n#>]+)|([-=*`\s]{3,}))/gm, "").replace(/\s*[*_`$=]+\s*/gm, " ").replace(/\[([^\]]+)\]\([^)]*\)/gm, "$1")
},
w = function(t, e, n, i) {
for (var r = e + 1; r < i; r++) {
if (t[r].indexOf(":") >= 0) return n;
n += "\n" + t[r]
}
return n
},
F = function(t, e) {
var n = e.lastIndexOf(".");
n < 0 && (n = e.length), t.find(".file-list-item-file-name-part").text(e.substr(0, n)), t.find(".file-list-item-file-ext-part").text(e.substr(n))
},
k = function(t, e) {
var n, i = t.split(/\r*\n+/),
r = i.length;
if ("---" == i[0]) {
for (var o, a = [], s = 1; s < r; s++) {
if ("---" == i[s]) return a.length < 3 && a.push(y(i.slice(s + 1).join("\n") || t)), a.join("\n");
(n = /^\s*(title)\s*:(.+)$/.exec(i[s])) ? (o = w(i, s, n[2], r)) && a.push(o.trim()): (n = /^\s*(subtitle)\s*:(.+)$/.exec(i[s])) ? (o = w(i, s, n[2], r)) && a.push(o.trim()) : (n = /^\s*(overview|summary|description|excerpt)\s*:(.+)$/.exec(i[s])) && (o = w(i, s, n[2], r)) && a.push(o.trim())
}
return y(t)
}
return y(t)
},
x = h.statWrapper;
function _(t, e, n) {
var i = File.isWin ? "\\" : "/";
if (e.find(function(e) {
return e == t || 0 == t.indexOf(e + i)
})) return !0;
!n && e.push(t)
}
var $ = 400,
E = c.Model.extend({
initialize: function(t) {
this.parent = t, this.editor = t.editor, this.$template = d(document.querySelector("#file-list-item-template").textContent), this.expandFolders = File.option.expandFolders || !1, this.setGroupByFolder(this.expandFolders), this.unixWatchers = {}, this.registerBridge(), this.needRepaint(), File.isNode && ($ = Number.parseInt(v.setting.config.maxFetchCountOnFileList) || 200, Number.isNaN($) && ($ = 200))
},
registerBridge: function() {
if (File.isMac) {
var t = this;
bridge.registerHandler("fileList.renderAll", function(e, n) {
if ("oversize" != i) {
var r = document.createDocumentFragment();
e[0].forEach(function(e) {
t.appendItemToView(e, !1, r)
}), p.html(""), p.append(r), t.endRender(e[1], e[2], e[2]), n && n(null)
}
}), bridge.registerHandler("fileList.appendItem", function(e, n) {
t.appendItemToView(e[0], e[1], void 0, {
forceMark: e[2]
}), n && n(null)
})
}
},
isShown: function() {
return this.parent.isFileTabShown() && !this.parent.useTreeStyle
},
isRendering: function() {
return i
},
renderIfNeed: function() {
return !i && (this.render(), File.isWin && this.parent.addFolderWatchByWin(File.getMountFolder()), !0)
},
appendTreeByNode: function(t, e, n, r) {
var o = reqnode("fs-plus"),
a = reqnode("path"),
s = (reqnode("util"), this),
u = File.option.useFsQueue;
n = n || 0, e = e || function() {};
var c = !!r;
r = r || g;
var l = [],
f = 0,
d = function() {
l = []
},
m = function() {
if ("oversize" != i)
for (var t = 0; t < 20 && l.length;) {
t++;
var e = l.shift();
e[1] ? v(e[0], e[2]) : p(e[0], e[2])
} else d()
},
v = function(t, e) {
f++, o.readdir(t, function(t, n) {
f--, u && f < 50 && m(), e(t, n)
})
},
p = function(t, e) {
f++, x(t, function(t) {
f--, u && f < 50 && m(), e(t)
})
},
b = function(t, e, o, c) {
if (!t) return c();
h = t, m = function(h, m) {
if (h) return c(void 0, h);
!File.isWin && s.addFileWatchByUnix(t, !0);
var v = m.length;
v || c();
var g = function() {
--v <= 0 && c()
};
m.forEach(function(c) {
var h = a.join(t, c);
m = h, v = function(a) {
if (i) {
if (!a || a.shouldIgnore) return g();
if (50 == n && !0 === i && "rendering" != r.attr("data-state") && r.attr("data-state", "rendering"), n > $) return d(), void s.endRender(!0);
a.isFile ? e(a, c, t, h, g) && n++ : a.isDir && o(a, c, t, h) ? b(h, e, o, g) : g()
}
}, u && f >= 50 ? l.push([m, !1, v]) : p(m, v);
var m, v
})
}, u && f >= 50 ? l.push([h, !0, m]) : v(h, m);
var h, m
};
b(t, function(t, e, n, i, o) {
if (!t.shouldIgnore) {
var a = {
folderPath: n,
folderName: h.getFileNameFromPath(n),
name: e,
path: i,
lastModified: t.mtime
};
return s.fetchSummaryByNode(i, function(t) {
a.summary = t, s.appendItemToView(a, !1, c ? r[0] : void 0), !File.isWin && s.addFileWatchByUnix(a.path, !1, a), o()
}), !0
}
o()
}, function(t, e, n, i) {
return !t.shouldIgnore
}, e)
},
fecthAllDocsByNode: function() {
var t = this;
this.parent.calcMountFolder(!0).then(function(e) {
t.appendTreeByNode(e || "", t.endRender.bind(t))
})
},
fetchSummaryByNode: function(t, e) {
var n;
reqnode("fs-plus").createReadStream(t, {
start: 0,
end: 600
}).on("data", function(t) {
if ("string" == typeof t) n = t;
else {
var e = h.detectEncodeByNode(t),
i = h.getContentFromBuffer(t, e);
n = i
}
}).on("end", function() {
void 0 === n && (n = ""), e(n)
})
},
render: function(t) {
if (t && this.needRepaint(), !i) {
i = !0, r = new Date, o = !1;
var e = this;
setTimeout(function() {
!0 === i && "rendering" != g.attr("data-state") && g.attr("data-state", "rendering")
}, 500), p.html("").removeClass("show-folder-name"), File.isMac ? this.parent.calcMountFolder(!0).then(function(t) {
bridge.callHandler("library.fetchAllDocs", t || "")
}) : File.isNode && this.fecthAllDocsByNode(), setTimeout(function() {
!0 === i && new Date - r > 8e3 && (console.warn("render file list timeout"), e.endRender(!0))
}, 1e4)
}
},
endRender: function(t, e, n) {
if ("oversize" != i || !t) {
if (i = t ? "oversize" : "complete", d("#file-library-list").attr("data-state", i), a && clearTimeout(a), a = setTimeout(function() {
"oversize" == i && d("#file-library-list").attr("data-state", "oversize-end")
}, 2e3), t)(File.isLinux || File.isMacNode) && Object.values(this.unixWatchers || {}).map(function(t) {
try {
t && t.close()
} catch (t) {}
});
else {
if (e && File.getMountFolder()) return void this.parent.onLoadFolderFailed();
this.parent.markCurrentFile(!1)
}
this.parent.slient = !1
}
},
setSortType: function() {
if ("complete" === i) {
p.html("");
var t = document.createDocumentFragment();
this.expandFolders ? (this.files.sort(this.parent.compareItem.bind(this.parent)), this.files.forEach(function(e) {
this.appendItemToView(e, !1, t)
}, this)) : this.dirArr.forEach(function(e) {
var n = e.content;
e.content = [], n.forEach(function(e) {
this.appendItemToView(e, !1, t)
}, this)
}, this), p.append(t)
}
},
setGroupByFolder: function(t) {
if (t ? d("#ty-group-by-folder-btn").removeClass("active") : d("#ty-group-by-folder-btn").addClass("active"), this.expandFolders != t) {
this.expandFolders = t, JSBridge.putSetting("not_group_by_folders", t), p.html("");
var e = document.createDocumentFragment();
t ? (this.files = [], this.dirArr.forEach(function(t) {
this.files = this.files.concat(t.content)
}, this), this.dirArr = [], this.dirMap = {}, this.files.sort(this.parent.compareItem.bind(this.parent)), this.files.forEach(function(t) {
this.appendItemToView(t, !1, e)
}, this)) : (this.dirArr = [], this.dirMap = {}, this.files.forEach(function(t) {
this.appendItemToView(t, !1, e)
}, this), this.files = []), p.append(e), "oversize" == i ? this.endRender(!0) : "complete" == i && this.endRender(!1)
}
},
getItem: function(t) {
if (this.expandFolders)
for (var e = this.files.length, n = 0; n < e; n++) {
if (this.files[n].path == t) return this.files[n];
if (this.files[n].folderPath == t) return {
path: t,
isDir: !0
}
} else {
if (this.dirMap[t]) return {
path: t,
isDir: !0
};
var i = u.pathByDeleteLastComponent(t);
if (this.dirMap[i]) return this.dirMap[i].content.find(function(e) {
return e.path == t
})
}
},
computeIndex: function(t) {
return (this.expandFolders ? function(t) {
var e = this.files.indexOf(t);
if (e > -1) return e;
e = 0;
for (var n = 0; n < this.files.length && !(this.parent.compareItem(this.files[n], t) > 0); n++) e++;
return this.files.splice(e, 0, t), e
} : function(t) {
var e = t.folderPath,
n = this.dirMap[e],
i = 0,
r = 0;
n || (n = {
path: e,
content: []
}, this.dirArr.push(n), this.dirMap[e] = n);
for (var o = 0; o < this.dirArr.length - 1; o++) {
var a = this.dirArr[o];
if (a.path == e) break;
i += a.content.length
}
for (o = 0; o < n.content.length && !(this.parent.compareItem(n.content[o], t) > 0); o++) r++;
return n.content.splice(r, 0, t), r + i
}).call(this, t)
},
appendItemToView: function(t, e, n, r) {
if ("oversize" != i && i) {
var a = r || {},
s = a.forceMark,
c = a.skipAnim,
l = this,
f = this.$template.clone();
if (t && t.path && File.getMountFolder()) {
o || File.getMountFolder() != t.folderPath && (o = !0, p.addClass("show-folder-name")), f.attr("data-path", t.path).attr("data-parent-path", t.folderPath), f.find(".file-list-item-file-name").attr("title", u.abbreviatingWithTilde(t.path)), f.children(".file-list-item-parent-loc").text(t.folderName), f.children(".file-list-item-time").text(u.date2NatrualLang(new Date(t.lastModified), !0)), F(f, t.name);
var d = f.children(".file-list-item-summary");
d.text(k(t.summary, t.name)), d.html(d.html().replace(/([^\s]+)\s*\n+/g, "$1<br/>")), t.path == h.getCurrentFilePath() && f.addClass("active");
var m;
if (n) this.expandFolders ? (this.computeIndex(t), n.appendChild(f[0])) : (m = this.computeIndex(t), n.insertChildAtIndex(f[0], m));
else {
if (e) {
var v, g, b = this.removeItemFromView(t, !0),
y = b.hasClass("active");
if (b && b.length) return g = b.prevAll().length, m = this.computeIndex(t), g != m || t.oldPath ? (t.oldPath = void 0, v = b[0].clientHeight, b.remove(), p[0].insertChildAtIndex(f[0], m), (y || s) && f.addClass("active"), c || p.children().each(function(t) {
var e = this;
if (e == f[0]) e.style.transition = "transform 0s", e.style.transform = "translate(0px, " + v * (g - t) + "px)";
else if (t >= m && t < g) e.style.transition = "transform 0s", e.style.transform = "translate(0px, -" + v + "px)";
else {
if (!(t >= g && t < m)) return;
e.style.transform = "translate(0px, " + v + "px)"
}
requestAnimationFrame(function() {
e.style.transform = "", e.style.transition = "transform 400ms"
})
}), h.getCurrentFilePath() == t.path && this.parent.markCurrentFile(), w(), f[0]) : b.find("input").length ? b[0] : (b.replaceWith(f), w(), f[0])
}
m = this.computeIndex(t), p[0].insertChildAtIndex(f[0], m)
}
return w(), f[0]
}
}
function w() {
var e = l.parent.nextChangeHighlight;
e && 0 == e.indexOf(t.path) && l.highlight(e)
}
},
removeFileOrFolder: function(t, e) {
var n = this,
i = File.isWin ? "\\" : "/";
function r(t) {
var i = n.findElemFromPath(t);
i.length && (e ? i.remove() : i.hide("slow", function() {
i.remove()
}))
}
if (n.expandFolders) return o = t, void n.files.removeIf(function(t) {
if (t.path == o || 0 == t.path.indexOf(o + i)) return r(t.path), !0
});
var o;
n.findElemFromPath(t).length ? n.removeItemFromView({
path: t
}, !1, e) : function(t) {
var e = 0;
n.dirArr.removeIf(function(n) {
return e++, n.path == t || 0 == n.path.indexOf(t + i)
}), 0 != e && Object.keys(n.dirMap).clone().forEach(function(e) {
e != t && 0 != e.indexOf(t + i) || (n.dirMap[e].content.forEach(function(t) {
r(t.path)
}), delete n.dirMap[e])
})
}(t)
},
removeItemFromView: function(t, e, n) {
function i(t, e) {
~t.indexOf(e) ? t.remove(e) : t.removeIf(function(t) {
return t.path.toLowerCase() == (e.oldPath || e.path).toLowerCase()
}, !0)
}
var r = this.findElemFromPath(t.oldPath || t.path);
if (t.folderPath || (t.folderPath = r.attr("data-parent-path")), !r.length) return d();
if (this.expandFolders) i(this.files, t);
else {
var o = this.dirMap[t.folderPath];
o && i(o.content, t)
}
return e || (n ? r.remove() : r.hide("slow", function() {
r.remove()
})), r
},
appendItemToViewByMac: function(t, e, n) {
this.appendItemToView(JSON.parse(t), e, void 0, {
forceMark: n
})
},
bindEvents: function() {
var t = this;
p.on("mousedown", ".file-list-item", function(e) {
if ("INPUT" == document.activeElement.tagName && d(document.activeElement).trigger("blur"), 1 == event.which) return event.ctrlKey || event.metaKey ? t.parent.openFileInNewWindowCommand(this) : (d(".file-list-item:focus").blur(), t.parent.openFile(this.getAttribute("data-path"))), !1
}), d("#switch-to-tree-on-oversize").on("click", function(e) {
t.parent.switch("file-tree")
});
var e = 0;
d("#file-library").on("dragenter", function(n) {
if (!t.parent.useTreeStyle) {
(n.originalEvent.dataTransfer.types || []).indexOf("Files") > -1 && (n.preventDefault(), n.stopPropagation(), e || document.querySelector("#sidebar-content").classList.add("on-drop")), e++
}
}).on("dragover", function(t) {
t.preventDefault(), t.stopPropagation()
}).on("dragleave", function(n) {
t.parent.useTreeStyle || --e || document.querySelector("#sidebar-content").classList.remove("on-drop")
}).on("drop", function(n) {
if (!t.parent.useTreeStyle && File.getMountFolder() && File.isActiveWindow()) {
document.querySelector("#sidebar-content").classList.remove("on-drop"), e = 0, n.stopPropagation(), n.preventDefault();
var i = n.originalEvent.dataTransfer,
r = [];
if (i.files.item(o).path)
for (var o = 0; o < i.files.length; o++) {
var a = i.files.item(o).path;
a && r.push(a)
} else r = t.parent.filesInDragging || [];
t.parent.copyOrMoveFiles(r, File.getMountFolder())
}
})
},
needRepaint: function(t) {
(t || !0 !== i) && (i = !1, this.dirArr = [], this.dirMap = {}, this.files = [])
},
findElemFromPath: function(t) {
return d(".file-list-item[data-path='" + u.escapeSelector(t) + "']")
},
onAddFile: function(t) {
return this.appendItemToView(t, !0)
},
onChangeForMac: function(t) {
if ("complete" == i && !this.parent.isSuppressOnChange()) {
for (var e = [], n = !1, r = 0; r < t.length; r++) {
var o = t[r];
if (f.isType(o.type, "created", "modified") && _(o.path, e)) return;
if ("rename" == o.type) {
if (o.isDir) {
n = !0;
break
}
var a = h.getCurrentFilePath() == o.oldPath;
this.removeFileOrFolder(o.oldPath), bridge.callHandler("library.updateListItem", {
path: o.newPath,
mark: a || !1
})
} else "removed" == o.type && this.removeFileOrFolder(o.path);
if (o.isDir && "modified" != o.type) {
n = !0;
break
}
"created" == o.type ? bridge.callHandler("library.updateListItem", {
path: o.path,
mark: !1
}) : "modified" != o.type || o.isDir || "oversize" != i && bridge.callHandler("library.updateListItemIfIsOpen", o.path)
}
if (!i && n && this.isShown()) {
var s = d("#file-library").scrollTop();
this.render(!0), setTimeout(function() {
d("#file-library").scrollTop(s)
}, 0)
}
}
},
onChangeForWin: function(t, e, n) {
if ("complete" == i && !this.parent.isSuppressOnChange()) {
var r = this;
e ? _(a = t, n, !0) || 0 != r.findElemFromPath(a).length && x(a, function(t) {
if (t && !t.shouldIgnore && t.isFile) {
var e = r.getItem(a);
if (!e) return;
r.fetchSummaryByNode(a, function(n) {
e.summary = n, e.lastModified = t.mtime, r.appendItemToView(e, !0)
}), n.push(a)
}
}) : (o = t, File.getMountFolder() && 0 == o.indexOf(File.getMountFolder()) && x(o, function(t) {
t && !t.shouldIgnore ? _(o, n) || function(t, e) {
if (e.isFile) {
var n = u.pathByDeleteLastComponent(t),
i = {
folderPath: n,
folderName: h.getFileNameFromPath(n),
name: h.getFileNameFromPath(t),
path: t
};
r.fetchSummaryByNode(t, function(t) {
i.summary = t, i.lastModified = e.mtime, r.appendItemToView(i, !0)
})
} else e.isDir && r.appendTreeByNode(t)
}(o, t) : r.removeFileOrFolder(o)
}));
var o, a
}
},
addFileWatchByUnix: function(t, e) {
if (!File.isMac && !File.isWin && "oversize" != i) {
var n, r = this,
o = (reqnode("fs-plus"), reqnode("util"), "/"),
a = this.unixWatchers[t];
try {
n = reqnode("pathwatcher")
} catch (t) {
this.parent.showUnixWatchError(t.message)
}
if (n) try {
a && (a.close(), a = null), this.unixWatchers[t] = n.watch(t, function(n) {
i = n, o = t, a = e, r.parent.isSuppressOnChange() || (s && clearTimeout(s), b.push([i, o, a]), s = setTimeout(u, 200));
var i, o, a
})
} catch (t) {
console.warn(t)
}
}
function u() {
var t = b.clone();
s = null, b = [];
var e = [];
if (!r.parent.isSuppressOnChange()) {
for (var n = [], i = [], a = !1, u = 0; u < t.length; u++) {
var c = t[u],
l = c[1];
if (c[2]) {
if ("change" != c[0]) {
a = !1;
break
} - 1 == i.indexOf(l) && i.push(l)
} else if (-1 == n.indexOf(l)) a = c[0], n.push(l);
else if (a != c[0]) {
a = !1;
break
}
}
a && 1 == n.length && 1 == i.length && 0 == n[0].indexOf(i[0]) && ("delete" == a ? t.length <= 2 && (t = [
[a, n[0], !1]
]) : "change" == a && (t = [
[a, n[0], !1]
])), t.forEach(function(t) {
! function(t, e, n, i) {
if (!i.find(function(t) {
return t == e || 0 == e.indexOf(t + o)
}))
if (i.push(e), "rename" != t && "delete" != t || e != File.getMountFolder()) {
if ("change" == t)
if (n) {
var a = File.getMountFolder() == e,
s = d("#file-library").scrollTop();
r.removeFileOrFolder(e, a), r.appendTreeByNode(e, function() {
a && d("#file-library").scrollTop(s)
})
} else {
var u = r.getItem(e);
if (!u) return;
h.statWrapper(e, function(t) {
t && !t.shouldIgnore && r.fetchSummaryByNode(e, function(e) {
u.summary = e, u.lastModified = t.mtime, r.appendItemToView(u, !0)
})
})
}
else if ("delete" == t) r.removeFileOrFolder(e);
else if ("rename" == t);
} else r.parent.onRootChanged()
}(t[0], t[1], t[2], e)
})
}
}
},
update: function(t, e) {
if (void 0 !== e) {
var n = this.parent.findElemFromPath(t).children(".file-list-item-summary");
n.text(k(e.substr(0, 500))), n.html(n.html().replace(/([^\s]+)\s*\n+/g, "$1<br/>"))
}
},
highlight: function(t) {
var e = this.focusToFile(t, !0);
e && (e.classList.add("blink-area"), setTimeout(function() {
e.classList.remove("blink-area"), this.parent.nextChangeHighlight = null
}, 2e3))
},
focusToFile: function(t, e) {
var n = this.findElemFromPath(t)[0];
if (n) {
var i = n ? n.offsetTop : 0,
r = n.clientHeight,
o = n ? {
scrollTop: Math.max(0, i - r)
} : null,
a = d(File.isMac ? ".sidebar-content" : "#file-library"),
s = a.parent().height();
return !o || a.scrollTop() < i + 40 && s + a.scrollTop() > i + 40 || (e ? a.finish().scrollTop(o.scrollTop) : a.animate(o, 500)), n
}
},
newFile: function() {
var t = this;
function e(e, n) {
var i = this.appendItemToView({
folderPath: File.getMountFolder(),
folderName: h.getFileNameFromPath(File.getMountFolder()),
name: n,
path: e,
lastModified: new Date,
summary: ""
}, !0);
if (t.parent.isDiscardableUntitled()) return t.parent.openFile(e), void setTimeout(function() {
t.renameFileCommand(i, !0)
}, 100);
t.renameFileCommand(i, !0)
}
if (File.getMountFolder())
if (o) File.isMac ? bridge.callHandler("library.newFileUnder", File.getMountFolder()) : m.dialog.showSaveDialog(File.isLinux ? null : m.getCurrentWindow(), {
title: "New",
defaultPath: File.getMountFolder() + "/Untitled.md",
buttonLabel: "Create",
filters: [{
name: "Markdown",
extensions: ["md", "markdown", "mmd", "mdown", "txt", "text"]
}]
}, function(e) {
e && (t.parent.scheduleChangeHighlight(e), reqnode("fs").writeFile(e, "", function() {
t.parent.openFile(e)
}))
});
else {
var n = function(t) {
var e = 0;
return d(".file-list-item[data-parent-path='" + JSON.stringify(t).replace(/(^")|("$)/g, "") + "']").each(function() {
var t = /^untitled( (\d+))?\./i.exec(this.querySelector(".file-list-item-file-name").textContent.trim());
t && (e = Math.max(e, (t[2] || 0) - 0 + 1))
}), "Untitled" + (e ? " " + e : "") + ".md"
}(File.getMountFolder()),
i = File.getMountFolder() + (File.isWin ? "\\" : "/") + n;
t = this;
if (this.parent.pauseOnChange(!0), File.isMac) this.parent.pauseOnChange(!0), bridge.callHandler("library.newFile", i, function(r) {
r ? e.call(this, i, n) : (t.parent.resumeOnChange(), bridge.callHandler("library.newFileUnder", File.getMountFolder()))
});
else {
var r = reqnode("fs");
i = reqnode("path").resolve(i);
var a = r.openSync(i, "wx");
r.close(a), this.parent.pauseOnChange(!0), e.call(this, i, n)
}
}
},
newFileCommand: function(t) {
this.newFile()
},
renameFileCommand: function(t, e) {
t = d(t).closest(".file-library-node")[0], File.isMac && bridge.callHandler("window.focus");
var n = this,
i = d("<input class='file-list-item-file-name' />"),
r = d(t).find(".file-list-item-file-name"),
o = r.clone(),
a = t.getAttribute("data-path"),
s = r.children().text();
r.replaceWith(i), i.val(s);
function c(e, r) {
if (r = r.trim(), e = e.trim(), F(o, e), i.replaceWith(o), a != r) {
var s = d(t);
n.appendItemToView({
path: r,
folderPath: t.getAttribute("data-parent-path"),
folderName: d(t).children(".file-list-item-parent-loc").text(),
lastModified: new Date,
name: e,
summary: (u = s.children(".file-list-item-summary"), u.length ? u[0].textContent || u[0].innerText : ""),
oldPath: a
}, !0)
}
var u;
n.editor.restoreLastCursor()
}
this.parent.bindRename(i, function(t) {
return File.isMac ? function(t) {
var e = t.val().replace(/[\/\\]/g, ""),
i = u.pathByDeleteLastComponent(a) + "/" + e;
n.parent.pauseOnChange(!0), a != i ? bridge.callHandler("library.renameFile", {
old: a,
new: i
}, function(t) {
t ? (c(e, i), a == h.getCurrentFilePath() && setTimeout(function() {
n.parent.markOpenedFile(i), n.focusToFile(i, !0)
}, 200), n.highlight(i)) : c(s, a)
}) : c(s, a)
}(t) : function(t) {
var i = t.val();
i = (File.isWin ? i.replace(/[\\\/:*?"<>\|\000-\031]/g, "") : i.replace(/[\/\\\000-\031]/g, "")).trim();
var r = reqnode("path").resolve(u.pathByDeleteLastComponent(a) + (File.isWin ? "\\" : "/") + i),
o = m.getCurrentWindow().id,
l = reqnode("fs");
a != r ? u.isSamePath(a, r) || !l.existsSync(r) ? (n.parent.pauseOnChange(!0), v.sendEvent("willRename", {
oldPath: a,
fromWin: o
}), l.rename(a, r, function(t) {
v.sendEvent("didRename", {
oldPath: a,
newPath: t ? a : r,
fromWin: o
}), t ? f(t) : (e || v.filesOp.registerUndo(r, a, d.localize.getString("Rename %@", "Panel").replace("%@", reqnode("path").basename(a))), c(i, r), n.highlight(r))
})) : f(d.localize.getString("File with same name already exists at target path.")) : c(s, a);
function f(t) {
c(s, a), m.dialog.showErrorBox(d.localize.getString("Operation Failed"), d.localize.getString('Failed to rename from "{0}" to "{1}"').format(s, i) + "\n" + t)
}
}(t)
}, function() {
c(s, a)
}, e), i.focus()
}
});
n.exports = E
}), $__System.registerDynamic("46", ["e", "12"], !0, function(t, e, n) {
"use strict";
this || self;
var i = t("e"),
r = t("12").Model.extend({
initialize: function(t) {
this.editor = t, this.$container = i("#emoji-auto-suggest"), setTimeout(function() {
i.getScript("./app/editor/EmojiSearchMap.js", function() {
var t = window.EmojiSearchMap;
for (var e in r.data) t[e] || (t[e] = [e])
})
}, 1e3)
},
search: function(t, e) {
if (!t) return [];
var n, i = new RegExp("(^" + t + ")|(_" + t + ")|(-" + t + ")", "i"),
o = Object.keys(r.data).filter(function(e) {
return i.exec(e) && e !== t
});
if (o.sort(), r.data[t] && o.unshift(t), n = (window.EmojiSearchMap || {})[t])
for (var a = 0; a < n.length; a++) - 1 == o.indexOf(n[a]) && o.push(n[a]);
return e.type = "emoji", e.token = t, e.match = o, e.found = o.length, e.pageNo = 0, e.pageCnt = Math.floor((o.length - 1) / 5 + 1), o
},
showAutoSuggest: function(t, e) {
if (e.token === t) return !1;
var n = this.search(t, e),
i = "";
if (!e.found) return this.$container.hide(), !1;
for (var o = 0; o < n.length && o < 40; o++) o % 5 == 0 && (i += (o > 0 ? "</ul>" : "") + "<ul data-page='" + o / 5 + "' style='display:none'>"), i += "<li data-content=':" + n[o] + ":' ><span>" + r.data[n[o]] + "</span> <span class='emoji-meta'>:" + n[o] + ":</span></li>";
return i += "</ul>", this.$container.html(i), this.$container
}
});
r.data = {
100: "💯",
1234: "🔢",
grinning: "😀",
smiley: "😃",
smile: "😄",
grin: "😁",
laughing: "😆",
satisfied: "😆",
sweat_smile: "😅",
joy: "😂",
rofl: "🤣",
relaxed: "☺️",
blush: "😊",
innocent: "😇",
slightly_smiling_face: "🙂",
upside_down_face: "🙃",
wink: "😉",
relieved: "😌",
heart_eyes: "😍",
kissing_heart: "😘",
kissing: "😗",
kissing_smiling_eyes: "😙",
kissing_closed_eyes: "😚",
yum: "😋",
stuck_out_tongue_winking_eye: "😜",
stuck_out_tongue_closed_eyes: "😝",
stuck_out_tongue: "😛",
money_mouth_face: "🤑",
hugs: "🤗",
nerd_face: "🤓",
sunglasses: "😎",
clown_face: "🤡",
cowboy_hat_face: "🤠",
smirk: "😏",
unamused: "😒",
disappointed: "😞",
pensive: "😔",
worried: "😟",
confused: "😕",
slightly_frowning_face: "🙁",
frowning_face: "☹️",
persevere: "😣",
confounded: "😖",
tired_face: "😫",
weary: "😩",
triumph: "😤",
angry: "😠",
rage: "😡",
pout: "😡",
no_mouth: "😶",
neutral_face: "😐",
expressionless: "😑",
hushed: "😯",
frowning: "😦",
anguished: "😧",
open_mouth: "😮",
astonished: "😲",
dizzy_face: "😵",
flushed: "😳",
scream: "😱",
fearful: "😨",
cold_sweat: "😰",
cry: "😢",
disappointed_relieved: "😥",
drooling_face: "🤤",
sob: "😭",
sweat: "😓",
sleepy: "😪",
sleeping: "😴",
roll_eyes: "🙄",
thinking: "🤔",
lying_face: "🤥",
grimacing: "😬",
zipper_mouth_face: "🤐",
nauseated_face: "🤢",
sneezing_face: "🤧",
mask: "😷",
face_with_thermometer: "🤒",
face_with_head_bandage: "🤕",
smiling_imp: "😈",
imp: "👿",
japanese_ogre: "👹",
japanese_goblin: "👺",
hankey: "💩",
poop: "💩",
shit: "💩",
ghost: "👻",
skull: "💀",
skull_and_crossbones: "☠️",
alien: "👽",
space_invader: "👾",
robot: "🤖",
jack_o_lantern: "🎃",
smiley_cat: "😺",
smile_cat: "😸",
joy_cat: "😹",
heart_eyes_cat: "😻",
smirk_cat: "😼",
kissing_cat: "😽",
scream_cat: "🙀",
crying_cat_face: "😿",
pouting_cat: "😾",
open_hands: "👐",
raised_hands: "🙌",
clap: "👏",
pray: "🙏",
handshake: "🤝",
"+1": "👍",
thumbsup: "👍",
"-1": "👎",
thumbsdown: "👎",
fist_oncoming: "👊",
facepunch: "👊",
punch: "👊",
fist_raised: "✊",
fist: "✊",
fist_left: "🤛",
fist_right: "🤜",
crossed_fingers: "🤞",
v: "✌️",
metal: "🤘",
ok_hand: "👌",
point_left: "👈",
point_right: "👉",
point_up_2: "👆",
point_down: "👇",
point_up: "☝️",
hand: "✋",
raised_hand: "✋",
raised_back_of_hand: "🤚",
raised_hand_with_fingers_splayed: "🖐",
vulcan_salute: "🖖",
wave: "👋",
call_me_hand: "🤙",
muscle: "💪",
middle_finger: "🖕",
fu: "🖕",
writing_hand: "✍️",
selfie: "🤳",
nail_care: "💅",
ring: "💍",
lipstick: "💄",
kiss: "💋",
lips: "👄",
tongue: "👅",
ear: "👂",
nose: "👃",
footprints: "👣",
eye: "👁",
eyes: "👀",
speaking_head: "🗣",
bust_in_silhouette: "👤",
busts_in_silhouette: "👥",
baby: "👶",
boy: "👦",
girl: "👧",
man: "👨",
woman: "👩",
blonde_woman: "👱‍♀",
blonde_man: "👱",
person_with_blond_hair: "👱",
older_man: "👴",
older_woman: "👵",
man_with_gua_pi_mao: "👲",
woman_with_turban: "👳‍♀",
man_with_turban: "👳",
policewoman: "👮‍♀",
policeman: "👮",
cop: "👮",
construction_worker_woman: "👷‍♀",
construction_worker_man: "👷",
construction_worker: "👷",
guardswoman: "💂‍♀",
guardsman: "💂",
female_detective: "🕵️‍♀️",
male_detective: "🕵",
detective: "🕵",
woman_health_worker: "👩‍⚕",
man_health_worker: "👨‍⚕",
woman_farmer: "👩‍🌾",
man_farmer: "👨‍🌾",
woman_cook: "👩‍🍳",
man_cook: "👨‍🍳",
woman_student: "👩‍🎓",
man_student: "👨‍🎓",
woman_singer: "👩‍🎤",
man_singer: "👨‍🎤",
woman_teacher: "👩‍🏫",
man_teacher: "👨‍🏫",
woman_factory_worker: "👩‍🏭",
man_factory_worker: "👨‍🏭",
woman_technologist: "👩‍💻",
man_technologist: "👨‍💻",
woman_office_worker: "👩‍💼",
man_office_worker: "👨‍💼",
woman_mechanic: "👩‍🔧",
man_mechanic: "👨‍🔧",
woman_scientist: "👩‍🔬",
man_scientist: "👨‍🔬",
woman_artist: "👩‍🎨",
man_artist: "👨‍🎨",
woman_firefighter: "👩‍🚒",
man_firefighter: "👨‍🚒",
woman_pilot: "👩‍✈",
man_pilot: "👨‍✈",
woman_astronaut: "👩‍🚀",
man_astronaut: "👨‍🚀",
woman_judge: "👩‍⚖",
man_judge: "👨‍⚖",
mrs_claus: "🤶",
santa: "🎅",
princess: "👸",
prince: "🤴",
bride_with_veil: "👰",
man_in_tuxedo: "🤵",
angel: "👼",
pregnant_woman: "🤰",
bowing_woman: "🙇‍♀",
bowing_man: "🙇",
bow: "🙇",
tipping_hand_woman: "💁",
information_desk_person: "💁",
sassy_woman: "💁",
tipping_hand_man: "💁‍♂",
sassy_man: "💁‍♂",
no_good_woman: "🙅",
no_good: "🙅",
ng_woman: "🙅",
no_good_man: "🙅‍♂",
ng_man: "🙅‍♂",
ok_woman: "🙆",
ok_man: "🙆‍♂",
raising_hand_woman: "🙋",
raising_hand: "🙋",
raising_hand_man: "🙋‍♂",
woman_facepalming: "🤦‍♀",
man_facepalming: "🤦‍♂",
woman_shrugging: "🤷‍♀",
man_shrugging: "🤷‍♂",
pouting_woman: "🙎",
person_with_pouting_face: "🙎",
pouting_man: "🙎‍♂",
frowning_woman: "🙍",
person_frowning: "🙍",
frowning_man: "🙍‍♂",
haircut_woman: "💇",
haircut: "💇",
haircut_man: "💇‍♂",
massage_woman: "💆",
massage: "💆",
massage_man: "💆‍♂",
business_suit_levitating: "🕴",
dancer: "💃",
man_dancing: "🕺",
dancing_women: "👯",
dancers: "👯",
dancing_men: "👯‍♂",
walking_woman: "🚶‍♀",
walking_man: "🚶",
walking: "🚶",
running_woman: "🏃‍♀",
running_man: "🏃",
runner: "🏃",
running: "🏃",
couple: "👫",
two_women_holding_hands: "👭",
two_men_holding_hands: "👬",
couple_with_heart_woman_man: "💑",
couple_with_heart: "💑",
couple_with_heart_woman_woman: "👩‍❤️‍👩",
couple_with_heart_man_man: "👨‍❤️‍👨",
couplekiss_man_woman: "💏",
couplekiss_woman_woman: "👩‍❤️‍💋‍👩",
couplekiss_man_man: "👨‍❤️‍💋‍👨",
family_man_woman_boy: "👪",
family: "👪",
family_man_woman_girl: "👨‍👩‍👧",
family_man_woman_girl_boy: "👨‍👩‍👧‍👦",
family_man_woman_boy_boy: "👨‍👩‍👦‍👦",
family_man_woman_girl_girl: "👨‍👩‍👧‍👧",
family_woman_woman_boy: "👩‍👩‍👦",
family_woman_woman_girl: "👩‍👩‍👧",
family_woman_woman_girl_boy: "👩‍👩‍👧‍👦",
family_woman_woman_boy_boy: "👩‍👩‍👦‍👦",
family_woman_woman_girl_girl: "👩‍👩‍👧‍👧",
family_man_man_boy: "👨‍👨‍👦",
family_man_man_girl: "👨‍👨‍👧",
family_man_man_girl_boy: "👨‍👨‍👧‍👦",
family_man_man_boy_boy: "👨‍👨‍👦‍👦",
family_man_man_girl_girl: "👨‍👨‍👧‍👧",
family_woman_boy: "👩‍👦",
family_woman_girl: "👩‍👧",
family_woman_girl_boy: "👩‍👧‍👦",
family_woman_boy_boy: "👩‍👦‍👦",
family_woman_girl_girl: "👩‍👧‍👧",
family_man_boy: "👨‍👦",
family_man_girl: "👨‍👧",
family_man_girl_boy: "👨‍👧‍👦",
family_man_boy_boy: "👨‍👦‍👦",
family_man_girl_girl: "👨‍👧‍👧",
womans_clothes: "👚",
shirt: "👕",
tshirt: "👕",
jeans: "👖",
necktie: "👔",
dress: "👗",
bikini: "👙",
kimono: "👘",
high_heel: "👠",
sandal: "👡",
boot: "👢",
mans_shoe: "👞",
shoe: "👞",
athletic_shoe: "👟",
womans_hat: "👒",
tophat: "🎩",
mortar_board: "🎓",
crown: "👑",
rescue_worker_helmet: "⛑",
school_satchel: "🎒",
pouch: "👝",
purse: "👛",
handbag: "👜",
briefcase: "💼",
eyeglasses: "👓",
dark_sunglasses: "🕶",
closed_umbrella: "🌂",
open_umbrella: "☂️",
dog: "🐶",
cat: "🐱",
mouse: "🐭",
hamster: "🐹",
rabbit: "🐰",
fox_face: "🦊",
bear: "🐻",
panda_face: "🐼",
koala: "🐨",
tiger: "🐯",
lion: "🦁",
cow: "🐮",
pig: "🐷",
pig_nose: "🐽",
frog: "🐸",
monkey_face: "🐵",
see_no_evil: "🙈",
hear_no_evil: "🙉",
speak_no_evil: "🙊",
monkey: "🐒",
chicken: "🐔",
penguin: "🐧",
bird: "🐦",
baby_chick: "🐤",
hatching_chick: "🐣",
hatched_chick: "🐥",
duck: "🦆",
eagle: "🦅",
owl: "🦉",
bat: "🦇",
wolf: "🐺",
boar: "🐗",
horse: "🐴",
unicorn: "🦄",
bee: "🐝",
honeybee: "🐝",
bug: "🐛",
butterfly: "🦋",
snail: "🐌",
shell: "🐚",
beetle: "🐞",
ant: "🐜",
spider: "🕷",
spider_web: "🕸",
turtle: "🐢",
snake: "🐍",
lizard: "🦎",
scorpion: "🦂",
crab: "🦀",
squid: "🦑",
octopus: "🐙",
shrimp: "🦐",
tropical_fish: "🐠",
fish: "🐟",
blowfish: "🐡",
dolphin: "🐬",
flipper: "🐬",
shark: "🦈",
whale: "🐳",
whale2: "🐋",
crocodile: "🐊",
leopard: "🐆",
tiger2: "🐅",
water_buffalo: "🐃",
ox: "🐂",
cow2: "🐄",
deer: "🦌",
dromedary_camel: "🐪",
camel: "🐫",
elephant: "🐘",
rhinoceros: "🦏",
gorilla: "🦍",
racehorse: "🐎",
pig2: "🐖",
goat: "🐐",
ram: "🐏",
sheep: "🐑",
dog2: "🐕",
poodle: "🐩",
cat2: "🐈",
rooster: "🐓",
turkey: "🦃",
dove: "🕊",
rabbit2: "🐇",
mouse2: "🐁",
rat: "🐀",
chipmunk: "🐿",
feet: "🐾",
paw_prints: "🐾",
dragon: "🐉",
dragon_face: "🐲",
cactus: "🌵",
christmas_tree: "🎄",
evergreen_tree: "🌲",
deciduous_tree: "🌳",
palm_tree: "🌴",
seedling: "🌱",
herb: "🌿",
shamrock: "☘️",
four_leaf_clover: "🍀",
bamboo: "🎍",
tanabata_tree: "🎋",
leaves: "🍃",
fallen_leaf: "🍂",
maple_leaf: "🍁",
mushroom: "🍄",
ear_of_rice: "🌾",
bouquet: "💐",
tulip: "🌷",
rose: "🌹",
wilted_flower: "🥀",
sunflower: "🌻",
blossom: "🌼",
cherry_blossom: "🌸",
hibiscus: "🌺",
earth_americas: "🌎",
earth_africa: "🌍",
earth_asia: "🌏",
full_moon: "🌕",
waning_gibbous_moon: "🌖",
last_quarter_moon: "🌗",
waning_crescent_moon: "🌘",
new_moon: "🌑",
waxing_crescent_moon: "🌒",
first_quarter_moon: "🌓",
moon: "🌔",
waxing_gibbous_moon: "🌔",
new_moon_with_face: "🌚",
full_moon_with_face: "🌝",
sun_with_face: "🌞",
first_quarter_moon_with_face: "🌛",
last_quarter_moon_with_face: "🌜",
crescent_moon: "🌙",
dizzy: "💫",
star: "⭐️",
star2: "🌟",
sparkles: "✨",
zap: "⚡️",
fire: "🔥",
boom: "💥",
collision: "💥",
comet: "☄",
sunny: "☀️",
sun_behind_small_cloud: "🌤",
partly_sunny: "⛅️",
sun_behind_large_cloud: "🌥",
sun_behind_rain_cloud: "🌦",
rainbow: "🌈",
cloud: "☁️",
cloud_with_rain: "🌧",
cloud_with_lightning_and_rain: "⛈",
cloud_with_lightning: "🌩",
cloud_with_snow: "🌨",
snowman_with_snow: "☃️",
snowman: "⛄️",
snowflake: "❄️",
wind_face: "🌬",
dash: "💨",
tornado: "🌪",
fog: "🌫",
ocean: "🌊",
droplet: "💧",
sweat_drops: "💦",
umbrella: "☔️",
green_apple: "🍏",
apple: "🍎",
pear: "🍐",
tangerine: "🍊",
orange: "🍊",
mandarin: "🍊",
lemon: "🍋",
banana: "🍌",
watermelon: "🍉",
grapes: "🍇",
strawberry: "🍓",
melon: "🍈",
cherries: "🍒",
peach: "🍑",
pineapple: "🍍",
kiwi_fruit: "🥝",
avocado: "🥑",
tomato: "🍅",
eggplant: "🍆",
cucumber: "🥒",
carrot: "🥕",
corn: "🌽",
hot_pepper: "🌶",
potato: "🥔",
sweet_potato: "🍠",
chestnut: "🌰",
peanuts: "🥜",
honey_pot: "🍯",
croissant: "🥐",
bread: "🍞",
baguette_bread: "🥖",
cheese: "🧀",
egg: "🥚",
fried_egg: "🍳",
bacon: "🥓",
pancakes: "🥞",
fried_shrimp: "🍤",
poultry_leg: "🍗",
meat_on_bone: "🍖",
pizza: "🍕",
hotdog: "🌭",
hamburger: "🍔",
fries: "🍟",
stuffed_flatbread: "🥙",
taco: "🌮",
burrito: "🌯",
green_salad: "🥗",
shallow_pan_of_food: "🥘",
spaghetti: "🍝",
ramen: "🍜",
stew: "🍲",
fish_cake: "🍥",
sushi: "🍣",
bento: "🍱",
curry: "🍛",
rice: "🍚",
rice_ball: "🍙",
rice_cracker: "🍘",
oden: "🍢",
dango: "🍡",
shaved_ice: "🍧",
ice_cream: "🍨",
icecream: "🍦",
cake: "🍰",
birthday: "🎂",
custard: "🍮",
lollipop: "🍭",
candy: "🍬",
chocolate_bar: "🍫",
popcorn: "🍿",
doughnut: "🍩",
cookie: "🍪",
milk_glass: "🥛",
baby_bottle: "🍼",
coffee: "☕️",
tea: "🍵",
sake: "🍶",
beer: "🍺",
beers: "🍻",
clinking_glasses: "🥂",
wine_glass: "🍷",
tumbler_glass: "🥃",
cocktail: "🍸",
tropical_drink: "🍹",
champagne: "🍾",
spoon: "🥄",
fork_and_knife: "🍴",
plate_with_cutlery: "🍽",
soccer: "⚽️",
basketball: "🏀",
football: "🏈",
baseball: "⚾️",
tennis: "🎾",
volleyball: "🏐",
rugby_football: "🏉",
"8ball": "🎱",
ping_pong: "🏓",
badminton: "🏸",
goal_net: "🥅",
ice_hockey: "🏒",
field_hockey: "🏑",
cricket: "🏏",
golf: "⛳️",
bow_and_arrow: "🏹",
fishing_pole_and_fish: "🎣",
boxing_glove: "🥊",
martial_arts_uniform: "🥋",
ice_skate: "⛸",
ski: "🎿",
skier: "⛷",
snowboarder: "🏂",
weight_lifting_woman: "🏋️‍♀️",
weight_lifting_man: "🏋",
person_fencing: "🤺",
women_wrestling: "🤼‍♀",
men_wrestling: "🤼‍♂",
woman_cartwheeling: "🤸‍♀",
man_cartwheeling: "🤸‍♂",
basketball_woman: "⛹️‍♀️",
basketball_man: "⛹",
woman_playing_handball: "🤾‍♀",
man_playing_handball: "🤾‍♂",
golfing_woman: "🏌️‍♀️",
golfing_man: "🏌",
surfing_woman: "🏄‍♀",
surfing_man: "🏄",
surfer: "🏄",
swimming_woman: "🏊‍♀",
swimming_man: "🏊",
swimmer: "🏊",
woman_playing_water_polo: "🤽‍♀",
man_playing_water_polo: "🤽‍♂",
rowing_woman: "🚣‍♀",
rowing_man: "🚣",
rowboat: "🚣",
horse_racing: "🏇",
biking_woman: "🚴‍♀",
biking_man: "🚴",
bicyclist: "🚴",
mountain_biking_woman: "🚵‍♀",
mountain_biking_man: "🚵",
mountain_bicyclist: "🚵",
running_shirt_with_sash: "🎽",
medal_sports: "🏅",
medal_military: "🎖",
"1st_place_medal": "🥇",
"2nd_place_medal": "🥈",
"3rd_place_medal": "🥉",
trophy: "🏆",
rosette: "🏵",
reminder_ribbon: "🎗",
ticket: "🎫",
tickets: "🎟",
circus_tent: "🎪",
woman_juggling: "🤹‍♀",
man_juggling: "🤹‍♂",
performing_arts: "🎭",
art: "🎨",
clapper: "🎬",
microphone: "🎤",
headphones: "🎧",
musical_score: "🎼",
musical_keyboard: "🎹",
drum: "🥁",
saxophone: "🎷",
trumpet: "🎺",
guitar: "🎸",
violin: "🎻",
game_die: "🎲",
dart: "🎯",
bowling: "🎳",
video_game: "🎮",
slot_machine: "🎰",
car: "🚗",
red_car: "🚗",
taxi: "🚕",
blue_car: "🚙",
bus: "🚌",
trolleybus: "🚎",
racing_car: "🏎",
police_car: "🚓",
ambulance: "🚑",
fire_engine: "🚒",
minibus: "🚐",
truck: "🚚",
articulated_lorry: "🚛",
tractor: "🚜",
kick_scooter: "🛴",
bike: "🚲",
motor_scooter: "🛵",
motorcycle: "🏍",
rotating_light: "🚨",
oncoming_police_car: "🚔",
oncoming_bus: "🚍",
oncoming_automobile: "🚘",
oncoming_taxi: "🚖",
aerial_tramway: "🚡",
mountain_cableway: "🚠",
suspension_railway: "🚟",
railway_car: "🚃",
train: "🚋",
mountain_railway: "🚞",
monorail: "🚝",
bullettrain_side: "🚄",
bullettrain_front: "🚅",
light_rail: "🚈",
steam_locomotive: "🚂",
train2: "🚆",
metro: "🚇",
tram: "🚊",
station: "🚉",
helicopter: "🚁",
small_airplane: "🛩",
airplane: "✈️",
flight_departure: "🛫",
flight_arrival: "🛬",
rocket: "🚀",
artificial_satellite: "🛰",
seat: "💺",
canoe: "🛶",
boat: "⛵️",
sailboat: "⛵️",
motor_boat: "🛥",
speedboat: "🚤",
passenger_ship: "🛳",
ferry: "⛴",
ship: "🚢",
anchor: "⚓️",
construction: "🚧",
fuelpump: "⛽️",
busstop: "🚏",
vertical_traffic_light: "🚦",
traffic_light: "🚥",
world_map: "🗺",
moyai: "🗿",
statue_of_liberty: "🗽",
fountain: "⛲️",
tokyo_tower: "🗼",
european_castle: "🏰",
japanese_castle: "🏯",
stadium: "🏟",
ferris_wheel: "🎡",
roller_coaster: "🎢",
carousel_horse: "🎠",
parasol_on_ground: "⛱",
beach_umbrella: "🏖",
desert_island: "🏝",
mountain: "⛰",
mountain_snow: "🏔",
mount_fuji: "🗻",
volcano: "🌋",
desert: "🏜",
camping: "🏕",
tent: "⛺️",
railway_track: "🛤",
motorway: "🛣",
building_construction: "🏗",
factory: "🏭",
house: "🏠",
house_with_garden: "🏡",
houses: "🏘",
derelict_house: "🏚",
office: "🏢",
department_store: "🏬",
post_office: "🏣",
european_post_office: "🏤",
hospital: "🏥",
bank: "🏦",
hotel: "🏨",
convenience_store: "🏪",
school: "🏫",
love_hotel: "🏩",
wedding: "💒",
classical_building: "🏛",
church: "⛪️",
mosque: "🕌",
synagogue: "🕍",
kaaba: "🕋",
shinto_shrine: "⛩",
japan: "🗾",
rice_scene: "🎑",
national_park: "🏞",
sunrise: "🌅",
sunrise_over_mountains: "🌄",
stars: "🌠",
sparkler: "🎇",
fireworks: "🎆",
city_sunrise: "🌇",
city_sunset: "🌆",
cityscape: "🏙",
night_with_stars: "🌃",
milky_way: "🌌",
bridge_at_night: "🌉",
foggy: "🌁",
watch: "⌚️",
iphone: "📱",
calling: "📲",
computer: "💻",
keyboard: "⌨️",
desktop_computer: "🖥",
printer: "🖨",
computer_mouse: "🖱",
trackball: "🖲",
joystick: "🕹",
clamp: "🗜",
minidisc: "💽",
floppy_disk: "💾",
cd: "💿",
dvd: "📀",
vhs: "📼",
camera: "📷",
camera_flash: "📸",
video_camera: "📹",
movie_camera: "🎥",
film_projector: "📽",
film_strip: "🎞",
telephone_receiver: "📞",
phone: "☎️",
telephone: "☎️",
pager: "📟",
fax: "📠",
tv: "📺",
radio: "📻",
studio_microphone: "🎙",
level_slider: "🎚",
control_knobs: "🎛",
stopwatch: "⏱",
timer_clock: "⏲",
alarm_clock: "⏰",
mantelpiece_clock: "🕰",
hourglass: "⌛️",
hourglass_flowing_sand: "⏳",
satellite: "📡",
battery: "🔋",
electric_plug: "🔌",
bulb: "💡",
flashlight: "🔦",
candle: "🕯",
wastebasket: "🗑",
oil_drum: "🛢",
money_with_wings: "💸",
dollar: "💵",
yen: "💴",
euro: "💶",
pound: "💷",
moneybag: "💰",
credit_card: "💳",
gem: "💎",
balance_scale: "⚖️",
wrench: "🔧",
hammer: "🔨",
hammer_and_pick: "⚒",
hammer_and_wrench: "🛠",
pick: "⛏",
nut_and_bolt: "🔩",
gear: "⚙️",
chains: "⛓",
gun: "🔫",
bomb: "💣",
hocho: "🔪",
knife: "🔪",
dagger: "🗡",
crossed_swords: "⚔️",
shield: "🛡",
smoking: "🚬",
coffin: "⚰️",
funeral_urn: "⚱️",
amphora: "🏺",
crystal_ball: "🔮",
prayer_beads: "📿",
barber: "💈",
alembic: "⚗️",
telescope: "🔭",
microscope: "🔬",
hole: "🕳",
pill: "💊",
syringe: "💉",
thermometer: "🌡",
toilet: "🚽",
potable_water: "🚰",
shower: "🚿",
bathtub: "🛁",
bath: "🛀",
bellhop_bell: "🛎",
key: "🔑",
old_key: "🗝",
door: "🚪",
couch_and_lamp: "🛋",
bed: "🛏",
sleeping_bed: "🛌",
framed_picture: "🖼",
shopping: "🛍",
shopping_cart: "🛒",
gift: "🎁",
balloon: "🎈",
flags: "🎏",
ribbon: "🎀",
confetti_ball: "🎊",
tada: "🎉",
dolls: "🎎",
izakaya_lantern: "🏮",
lantern: "🏮",
wind_chime: "🎐",
email: "✉️",
envelope: "✉️",
envelope_with_arrow: "📩",
incoming_envelope: "📨",
"e-mail": "📧",
love_letter: "💌",
inbox_tray: "📥",
outbox_tray: "📤",
package: "📦",
label: "🏷",
mailbox_closed: "📪",
mailbox: "📫",
mailbox_with_mail: "📬",
mailbox_with_no_mail: "📭",
postbox: "📮",
postal_horn: "📯",
scroll: "📜",
page_with_curl: "📃",
page_facing_up: "📄",
bookmark_tabs: "📑",
bar_chart: "📊",
chart_with_upwards_trend: "📈",
chart_with_downwards_trend: "📉",
spiral_notepad: "🗒",
spiral_calendar: "🗓",
calendar: "📆",
date: "📅",
card_index: "📇",
card_file_box: "🗃",
ballot_box: "🗳",
file_cabinet: "🗄",
clipboard: "📋",
file_folder: "📁",
open_file_folder: "📂",
card_index_dividers: "🗂",
newspaper_roll: "🗞",
newspaper: "📰",
notebook: "📓",
notebook_with_decorative_cover: "📔",
ledger: "📒",
closed_book: "📕",
green_book: "📗",
blue_book: "📘",
orange_book: "📙",
books: "📚",
book: "📖",
open_book: "📖",
bookmark: "🔖",
link: "🔗",
paperclip: "📎",
paperclips: "🖇",
triangular_ruler: "📐",
straight_ruler: "📏",
pushpin: "📌",
round_pushpin: "📍",
scissors: "✂️",
pen: "🖊",
fountain_pen: "🖋",
black_nib: "✒️",
paintbrush: "🖌",
crayon: "🖍",
memo: "📝",
pencil: "📝",
pencil2: "✏️",
mag: "🔍",
mag_right: "🔎",
lock_with_ink_pen: "🔏",
closed_lock_with_key: "🔐",
lock: "🔒",
unlock: "🔓",
heart: "❤️",
yellow_heart: "💛",
green_heart: "💚",
blue_heart: "💙",
purple_heart: "💜",
black_heart: "🖤",
broken_heart: "💔",
heavy_heart_exclamation: "❣️",
two_hearts: "💕",
revolving_hearts: "💞",
heartbeat: "💓",
heartpulse: "💗",
sparkling_heart: "💖",
cupid: "💘",
gift_heart: "💝",
heart_decoration: "💟",
peace_symbol: "☮️",
latin_cross: "✝️",
star_and_crescent: "☪️",
om: "🕉",
wheel_of_dharma: "☸️",
star_of_david: "✡️",
six_pointed_star: "🔯",
menorah: "🕎",
yin_yang: "☯️",
orthodox_cross: "☦️",
place_of_worship: "🛐",
ophiuchus: "⛎",
aries: "♈️",
taurus: "♉️",
gemini: "♊️",
cancer: "♋️",
leo: "♌️",
virgo: "♍️",
libra: "♎️",
scorpius: "♏️",
sagittarius: "♐️",
capricorn: "♑️",
aquarius: "♒️",
pisces: "♓️",
id: "🆔",
atom_symbol: "⚛️",
accept: "🉑",
radioactive: "☢️",
biohazard: "☣️",
mobile_phone_off: "📴",
vibration_mode: "📳",
eight_pointed_black_star: "✴️",
vs: "🆚",
white_flower: "💮",
ideograph_advantage: "🉐",
secret: "㊙️",
congratulations: "㊗️",
u6e80: "🈵",
a: "🅰️",
b: "🅱️",
ab: "🆎",
cl: "🆑",
o2: "🅾️",
sos: "🆘",
x: "❌",
o: "⭕️",
stop_sign: "🛑",
no_entry: "⛔️",
name_badge: "📛",
no_entry_sign: "🚫",
anger: "💢",
hotsprings: "♨️",
no_pedestrians: "🚷",
do_not_litter: "🚯",
no_bicycles: "🚳",
"non-potable_water": "🚱",
underage: "🔞",
no_mobile_phones: "📵",
no_smoking: "🚭",
exclamation: "❗️",
heavy_exclamation_mark: "❗️",
grey_exclamation: "❕",
question: "❓",
grey_question: "❔",
bangbang: "‼️",
interrobang: "⁉️",
low_brightness: "🔅",
high_brightness: "🔆",
part_alternation_mark: "〽️",
warning: "⚠️",
children_crossing: "🚸",
trident: "🔱",
fleur_de_lis: "⚜️",
beginner: "🔰",
recycle: "♻️",
white_check_mark: "✅",
chart: "💹",
sparkle: "❇️",
eight_spoked_asterisk: "✳️",
negative_squared_cross_mark: "❎",
globe_with_meridians: "🌐",
diamond_shape_with_a_dot_inside: "💠",
m: "Ⓜ️",
cyclone: "🌀",
zzz: "💤",
atm: "🏧",
wc: "🚾",
wheelchair: "♿️",
parking: "🅿️",
sa: "🈂️",
passport_control: "🛂",
customs: "🛃",
baggage_claim: "🛄",
left_luggage: "🛅",
mens: "🚹",
womens: "🚺",
baby_symbol: "🚼",
restroom: "🚻",
put_litter_in_its_place: "🚮",
cinema: "🎦",
signal_strength: "📶",
koko: "🈁",
symbols: "🔣",
information_source: "ℹ️",
abc: "🔤",
abcd: "🔡",
capital_abcd: "🔠",
ng: "🆖",
ok: "🆗",
up: "🆙",
cool: "🆒",
new: "🆕",
free: "🆓",
zero: "0️⃣",
one: "1️⃣",
two: "2️⃣",
three: "3️⃣",
four: "4️⃣",
five: "5️⃣",
six: "6️⃣",
seven: "7️⃣",
eight: "8️⃣",
nine: "9️⃣",
keycap_ten: "🔟",
hash: "#️⃣",
asterisk: "*️⃣",
arrow_forward: "▶️",
pause_button: "⏸",
play_or_pause_button: "⏯",
stop_button: "⏹",
record_button: "⏺",
next_track_button: "⏭",
previous_track_button: "⏮",
fast_forward: "⏩",
rewind: "⏪",
arrow_double_up: "⏫",
arrow_double_down: "⏬",
arrow_backward: "◀️",
arrow_up_small: "🔼",
arrow_down_small: "🔽",
arrow_right: "➡️",
arrow_left: "⬅️",
arrow_up: "⬆️",
arrow_down: "⬇️",
arrow_upper_right: "↗️",
arrow_lower_right: "↘️",
arrow_lower_left: "↙️",
arrow_upper_left: "↖️",
arrow_up_down: "↕️",
left_right_arrow: "↔️",
arrow_right_hook: "↪️",
leftwards_arrow_with_hook: "↩️",
arrow_heading_up: "⤴️",
arrow_heading_down: "⤵️",
twisted_rightwards_arrows: "🔀",
repeat: "🔁",
repeat_one: "🔂",
arrows_counterclockwise: "🔄",
arrows_clockwise: "🔃",
musical_note: "🎵",
notes: "🎶",
heavy_plus_sign: "➕",
heavy_minus_sign: "➖",
heavy_division_sign: "➗",
heavy_multiplication_x: "✖️",
heavy_dollar_sign: "💲",
currency_exchange: "💱",
tm: "™️",
copyright: "©️",
registered: "®️",
wavy_dash: "〰️",
curly_loop: "➰",
loop: "➿",
end: "🔚",
back: "🔙",
on: "🔛",
top: "🔝",
soon: "🔜",
heavy_check_mark: "✔️",
ballot_box_with_check: "☑️",
radio_button: "🔘",
white_circle: "⚪️",
black_circle: "⚫️",
red_circle: "🔴",
large_blue_circle: "🔵",
small_red_triangle: "🔺",
small_red_triangle_down: "🔻",
small_orange_diamond: "🔸",
small_blue_diamond: "🔹",
large_orange_diamond: "🔶",
large_blue_diamond: "🔷",
white_square_button: "🔳",
black_square_button: "🔲",
black_small_square: "▪️",
white_small_square: "▫️",
black_medium_small_square: "◾️",
white_medium_small_square: "◽️",
black_medium_square: "◼️",
white_medium_square: "◻️",
black_large_square: "⬛️",
white_large_square: "⬜️",
speaker: "🔈",
mute: "🔇",
sound: "🔉",
loud_sound: "🔊",
bell: "🔔",
no_bell: "🔕",
mega: "📣",
loudspeaker: "📢",
eye_speech_bubble: "👁‍🗨",
speech_balloon: "💬",
thought_balloon: "💭",
right_anger_bubble: "🗯",
spades: "♠️",
clubs: "♣️",
hearts: "♥️",
diamonds: "♦️",
black_joker: "🃏",
flower_playing_cards: "🎴",
mahjong: "🀄️",
clock1: "🕐",
clock2: "🕑",
clock3: "🕒",
clock4: "🕓",
clock5: "🕔",
clock6: "🕕",
clock7: "🕖",
clock8: "🕗",
clock9: "🕘",
clock10: "🕙",
clock11: "🕚",
clock12: "🕛",
clock130: "🕜",
clock230: "🕝",
clock330: "🕞",
clock430: "🕟",
clock530: "🕠",
clock630: "🕡",
clock730: "🕢",
clock830: "🕣",
clock930: "🕤",
clock1030: "🕥",
clock1130: "🕦",
clock1230: "🕧",
white_flag: "🏳️",
black_flag: "🏴",
checkered_flag: "🏁",
triangular_flag_on_post: "🚩",
rainbow_flag: "🏳️‍🌈",
afghanistan: "🇦🇫",
aland_islands: "🇦🇽",
albania: "🇦🇱",
algeria: "🇩🇿",
american_samoa: "🇦🇸",
andorra: "🇦🇩",
angola: "🇦🇴",
anguilla: "🇦🇮",
antarctica: "🇦🇶",
antigua_barbuda: "🇦🇬",
argentina: "🇦🇷",
armenia: "🇦🇲",
aruba: "🇦🇼",
australia: "🇦🇺",
austria: "🇦🇹",
azerbaijan: "🇦🇿",
bahamas: "🇧🇸",
bahrain: "🇧🇭",
bangladesh: "🇧🇩",
barbados: "🇧🇧",
belarus: "🇧🇾",
belgium: "🇧🇪",
belize: "🇧🇿",
benin: "🇧🇯",
bermuda: "🇧🇲",
bhutan: "🇧🇹",
bolivia: "🇧🇴",
caribbean_netherlands: "🇧🇶",
bosnia_herzegovina: "🇧🇦",
botswana: "🇧🇼",
brazil: "🇧🇷",
british_indian_ocean_territory: "🇮🇴",
british_virgin_islands: "🇻🇬",
brunei: "🇧🇳",
bulgaria: "🇧🇬",
burkina_faso: "🇧🇫",
burundi: "🇧🇮",
cape_verde: "🇨🇻",
cambodia: "🇰🇭",
cameroon: "🇨🇲",
canada: "🇨🇦",
canary_islands: "🇮🇨",
cayman_islands: "🇰🇾",
central_african_republic: "🇨🇫",
chad: "🇹🇩",
chile: "🇨🇱",
cn: "🇨🇳",
christmas_island: "🇨🇽",
cocos_islands: "🇨🇨",
colombia: "🇨🇴",
comoros: "🇰🇲",
congo_brazzaville: "🇨🇬",
congo_kinshasa: "🇨🇩",
cook_islands: "🇨🇰",
costa_rica: "🇨🇷",
cote_divoire: "🇨🇮",
croatia: "🇭🇷",
cuba: "🇨🇺",
curacao: "🇨🇼",
cyprus: "🇨🇾",
czech_republic: "🇨🇿",
denmark: "🇩🇰",
djibouti: "🇩🇯",
dominica: "🇩🇲",
dominican_republic: "🇩🇴",
ecuador: "🇪🇨",
egypt: "🇪🇬",
el_salvador: "🇸🇻",
equatorial_guinea: "🇬🇶",
eritrea: "🇪🇷",
estonia: "🇪🇪",
ethiopia: "🇪🇹",
eu: "🇪🇺",
european_union: "🇪🇺",
falkland_islands: "🇫🇰",
faroe_islands: "🇫🇴",
fiji: "🇫🇯",
finland: "🇫🇮",
fr: "🇫🇷",
french_guiana: "🇬🇫",
french_polynesia: "🇵🇫",
french_southern_territories: "🇹🇫",
gabon: "🇬🇦",
gambia: "🇬🇲",
georgia: "🇬🇪",
de: "🇩🇪",
ghana: "🇬🇭",
gibraltar: "🇬🇮",
greece: "🇬🇷",
greenland: "🇬🇱",
grenada: "🇬🇩",
guadeloupe: "🇬🇵",
guam: "🇬🇺",
guatemala: "🇬🇹",
guernsey: "🇬🇬",
guinea: "🇬🇳",
guinea_bissau: "🇬🇼",
guyana: "🇬🇾",
haiti: "🇭🇹",
honduras: "🇭🇳",
hong_kong: "🇭🇰",
hungary: "🇭🇺",
iceland: "🇮🇸",
india: "🇮🇳",
indonesia: "🇮🇩",
iran: "🇮🇷",
iraq: "🇮🇶",
ireland: "🇮🇪",
isle_of_man: "🇮🇲",
israel: "🇮🇱",
it: "🇮🇹",
jamaica: "🇯🇲",
jp: "🇯🇵",
crossed_flags: "🎌",
jersey: "🇯🇪",
jordan: "🇯🇴",
kazakhstan: "🇰🇿",
kenya: "🇰🇪",
kiribati: "🇰🇮",
kosovo: "🇽🇰",
kuwait: "🇰🇼",
kyrgyzstan: "🇰🇬",
laos: "🇱🇦",
latvia: "🇱🇻",
lebanon: "🇱🇧",
lesotho: "🇱🇸",
liberia: "🇱🇷",
libya: "🇱🇾",
liechtenstein: "🇱🇮",
lithuania: "🇱🇹",
luxembourg: "🇱🇺",
macau: "🇲🇴",
macedonia: "🇲🇰",
madagascar: "🇲🇬",
malawi: "🇲🇼",
malaysia: "🇲🇾",
maldives: "🇲🇻",
mali: "🇲🇱",
malta: "🇲🇹",
marshall_islands: "🇲🇭",
martinique: "🇲🇶",
mauritania: "🇲🇷",
mauritius: "🇲🇺",
mayotte: "🇾🇹",
mexico: "🇲🇽",
micronesia: "🇫🇲",
moldova: "🇲🇩",
monaco: "🇲🇨",
mongolia: "🇲🇳",
montenegro: "🇲🇪",
montserrat: "🇲🇸",
morocco: "🇲🇦",
mozambique: "🇲🇿",
myanmar: "🇲🇲",
namibia: "🇳🇦",
nauru: "🇳🇷",
nepal: "🇳🇵",
netherlands: "🇳🇱",
new_caledonia: "🇳🇨",
new_zealand: "🇳🇿",
nicaragua: "🇳🇮",
niger: "🇳🇪",
nigeria: "🇳🇬",
niue: "🇳🇺",
norfolk_island: "🇳🇫",
northern_mariana_islands: "🇲🇵",
north_korea: "🇰🇵",
norway: "🇳🇴",
oman: "🇴🇲",
pakistan: "🇵🇰",
palau: "🇵🇼",
palestinian_territories: "🇵🇸",
panama: "🇵🇦",
papua_new_guinea: "🇵🇬",
paraguay: "🇵🇾",
peru: "🇵🇪",
philippines: "🇵🇭",
pitcairn_islands: "🇵🇳",
poland: "🇵🇱",
portugal: "🇵🇹",
puerto_rico: "🇵🇷",
qatar: "🇶🇦",
reunion: "🇷🇪",
romania: "🇷🇴",
ru: "🇷🇺",
rwanda: "🇷🇼",
st_barthelemy: "🇧🇱",
st_helena: "🇸🇭",
st_kitts_nevis: "🇰🇳",
st_lucia: "🇱🇨",
st_pierre_miquelon: "🇵🇲",
st_vincent_grenadines: "🇻🇨",
samoa: "🇼🇸",
san_marino: "🇸🇲",
sao_tome_principe: "🇸🇹",
saudi_arabia: "🇸🇦",
senegal: "🇸🇳",
serbia: "🇷🇸",
seychelles: "🇸🇨",
sierra_leone: "🇸🇱",
singapore: "🇸🇬",
sint_maarten: "🇸🇽",
slovakia: "🇸🇰",
slovenia: "🇸🇮",
solomon_islands: "🇸🇧",
somalia: "🇸🇴",
south_africa: "🇿🇦",
south_georgia_south_sandwich_islands: "🇬🇸",
kr: "🇰🇷",
south_sudan: "🇸🇸",
es: "🇪🇸",
sri_lanka: "🇱🇰",
sudan: "🇸🇩",
suriname: "🇸🇷",
swaziland: "🇸🇿",
sweden: "🇸🇪",
switzerland: "🇨🇭",
syria: "🇸🇾",
taiwan: "🇹🇼",
tajikistan: "🇹🇯",
tanzania: "🇹🇿",
thailand: "🇹🇭",
timor_leste: "🇹🇱",
togo: "🇹🇬",
tokelau: "🇹🇰",
tonga: "🇹🇴",
trinidad_tobago: "🇹🇹",
tunisia: "🇹🇳",
tr: "🇹🇷",
turkmenistan: "🇹🇲",
turks_caicos_islands: "🇹🇨",
tuvalu: "🇹🇻",
uganda: "🇺🇬",
ukraine: "🇺🇦",
united_arab_emirates: "🇦🇪",
gb: "🇬🇧",
uk: "🇬🇧",
us: "🇺🇸",
us_virgin_islands: "🇻🇮",
uruguay: "🇺🇾",
uzbekistan: "🇺🇿",
vanuatu: "🇻🇺",
vatican_city: "🇻🇦",
venezuela: "🇻🇪",
vietnam: "🇻🇳",
wallis_futuna: "🇼🇫",
western_sahara: "🇪🇭",
yemen: "🇾🇪",
zambia: "🇿🇲",
zimbabwe: "🇿🇼"
}, r.data.happy = r.data.smile, n.exports = r
}), $__System.registerDynamic("1d", ["12", "14", "13", "1b", "1c"], !0, function(t, e, n) {
"use strict";
this || self, t("12"), t("14");
var i, r, o = t("13"),
a = t("1b").SnapFlag,
s = (o.Node, o.TYPE, t("1c")),
u = ["“", "”", "‘", "’"],
c = {
isSmartQuote: function(t) {
return !!c.shouldTriggerReplaceQuote() && [c.userQuote(0), c.userQuote(1), c.userQuote(2), c.userQuote(3)].indexOf(t) > -1
},
shouldTriggerReplaceQuote: function(t) {
return !File.option.convertSmartOnRender && (t || !File.isMac) && File.option.smartQuote
},
replaceQuote: function(t, e) {
if (!File.option.convertSmartOnRender && File.option.smartQuote) {
var n = "'" == t.textContent.toString()[0];
t && (2 == t.textContent.length ? t.nodeValue = c.userQuote(n ? 2 : 0, !1, !0) + c.userQuote(n ? 3 : 1, !1, !0) : t.nodeValue = c.userQuote(n ? 2 : 0, !1, !0)), e && (e.nodeValue = c.userQuote(n ? 3 : 1, !1, !0))
}
},
userQuote: function(t, e, n) {
var i = (File.option.userQuotesArray || u)[t] || u[t];
return !e || '"' != i && "'" != i ? n ? i : i.trim() : null
},
shouldTriggerReplace: function(t, e) {
var n = t.getJQueryElem(e.commonAncestorContainer);
return !n.closest("code, script, pre, [md-inline='escape']").length && !n.find("code, script, [md-inline='escape']").length
},
clearLastQuoteState: function() {
i = !1, r = !1
},
handlerCh: function(t, e, n, o, u, l) {
var f, h = function(t, e) {
var n = t[t.length - 1] || "";
return !(!/(^|[\(\{\[\s\-/\u2018])$/.exec(n) && !/(^|\s)[*`~+^$_]$/.exec(t)) || (!(!e || c.userQuote(0) != n) || !e && c.userQuote(2) == n)
},
d = function() {
return void 0 !== f ? f : f = m().replace(/\\[-."']/g, "")
},
m = function() {
try {
var t = s.createRange();
return t.setEnd(l.startContainer, l.startOffset), t.setStart($(l.startContainer).closest("[md-inline], [cid]")[0], 0), t.toString()
} catch (t) {}
return ""
},
v = function(i, r) {
var o = function() {
var n = t.selection.buildUndo(l);
return l.insertNode(document.createTextNode(e)), n.end = n.start + 1, n.start = n.end, n
}();
o.start -= 1 + i, t.selection.restoreSelection(t.findElemById(n.cid)[0], {
start: o.end,
end: o.end
});
var s = t.selection.restoreSelection(t.findElemById(n.cid)[0], {
start: o.start,
end: o.end
});
if (s) {
var u = document.createTextNode(r);
s.deleteContents(), s.insertNode(u), s.setStartAndEnd(u, 1), s.select()
}
t.undo.addSnap(n.cid, a.REPLACE)
},
p = function(e, n) {
var o = t.getMarkElem(e.startContainer),
a = t.selection.getOffset(o, e);
return n ? !(!i || i.startContainer != o[0] || i.startOffset != a) || (i = {
startContainer: o[0],
startOffset: a
}, !1) : !(!r || r.startContainer != o[0] || r.startOffset != a) || (r = {
startContainer: o[0],
startOffset: a
}, !1)
};
if (!File.option.convertSmartOnRender && !File.isMac) {
if ("-" == e && File.option.smartDash) {
if (!c.shouldTriggerReplace(t, l)) return;
var g;
if (/\\$/.exec(d())) return;
if (g = /(--|–)$/.exec(d())) return v(g[0].length, "—"), !0;
if (/-$/.exec(d())) return v(1, "–"), !0
}
if ("." == e && File.option.smartDash) {
if (!c.shouldTriggerReplace(t, l)) return;
if (/\\$/.exec(d())) return;
if (/\.\.$/.exec(d())) return v(2, "…"), !0
}
var b;
if ("'" == e && File.option.smartQuote) {
if (!c.shouldTriggerReplace(t, l)) return;
if (/\\$/.exec(d())) return;
return b = h(d(), !0), p(l, !0) && (i = null, b = !b), b ? (v(0, c.userQuote(2)), !0) : (v(0, c.userQuote(3)), !0)
}
if ('"' == e && File.option.smartQuote) {
if (!c.shouldTriggerReplace(t, l)) return;
if (/\\$/.exec(d())) return;
return b = h(d(), !1), p(l, !1) && (r = null, b = !b), b ? (v(0, c.userQuote(0)), !0) : (v(0, c.userQuote(1)), !0)
}
}
}
};
n.exports = c
}), $__System.registerDynamic("19", ["14", "13", "2f", "1b", "46", "18", "1d"], !0, function(t, e, n) {
"use strict";
this || self;
var i = t("14"),
r = t("13"),
o = r.Node,
a = r.TYPE,
s = t("2f"),
u = t("1b"),
c = t("46"),
l = t("18"),
f = t("1d"),
h = {
ul: /^(\s*)(([-+*])\s+)/,
ol: /^(\s*)\d+\.\s+/,
tasklist: /^(\s*)(([-+*])\s*)\[((x|X)| )\]\s+/
},
d = /^(\s*)([-+*>\[]|\d+\.)\s+/,
m = /^(\s*)[^\s]/,
v = null,
p = {
ul: /^(\s*)([-+*])\s+/,
ol: /^(\s*)(\d+\.)\s+/,
tasklist: /^(\s*)([-+*]\s*\[((x|X)| )\])\s+/
},
g = {
ul: /^(\s{0,3})([-+*])\s+/,
ol: /^(\s{0,3})(\d+\.)\s+/,
tasklist: /^(\s{0,3})([-+*]\s*\[((x|X)| )\])\s+/
},
b = /\r\n|\r|\n|\u2424/,
y = /^[ \u00A0]{0,3}$/,
w = /^[\s\u00A0]*$/,
F = /(^\s{0,3}>[ \t]*)(.*)$/,
k = /(^\s*(#{1,6})\s*)([^\n]+?)(\s+#+\s*)*$/,
x = /(^\s*(#{1,6})\s+)([^\n]+?)(\s+#+\s*)*$/,
_ = /^ *(=|-){2,}[\s\u00A0]*$/,
$ = /^\s*[-+*_<\[\{|#0-9`~=>$]/,
E = /^( *(`{3,}|~{3,}|·{3,})[ \t\u00A0]*)([^\n`]+)? *$/,
C = /^\s*(`{3,}|~{3,})\s*$/,
A = /^\s*\${2}\s*(?:\{(.+)\})?$/,
S = /^( {4}|\t)(\s*\S.*)$/,
T = /^( {4}|\t)/,
M = /^\s*([-+_*])\s*\1\s*\1(\s|\1)*$/,
D = /^\s*\[toc\]\s*$/i,
L = /^\s*\{:toc\}\s*$/i,
R = /^\s?\{:\s*toc(\s*|(\s+.*))\}/,
B = /^\s*\[([^\]]+)\]:(\s*<?)([^\s>]+)(>?)((\s+)["'(]([^\n]*)["')])?\s*$/,
I = /^\s*\[\^([^\]\n]+)\]:(\s*)([^\n]*)$/,
N = /^-{3}$/,
O = /^ *\|([^\|]+\|.+)\|\s*$/,
j = /^\s*\|(.+)\|\s*$/,
P = /^ *\|(\s*[-:]+\s*\|[-| :]*)$/,
q = /^ *([-:]+\s*\|[-| :]*)$/,
U = /\|/,
z = l.BLOCK_OPEN_REG,
H = /^\s*[-\u2013\u2014+*_<\u3010\[\{|#0-9`~=>$]/,
W = /^\s*([-\u2013\u2014])/,
J = /^\s*[\[\u3010]toc[\]\u3011]\s*$/i,
Y = /^(-{3}|\u2013[-\u2013\u2014]+|\u2014[-\u2013\u2014]*)$/,
G = {},
K = {},
V = {},
Q = {},
X = " ",
Z = function(t) {
if (t.get("style") == o.ListType.ol) {
for (var e = function(t) {
if (t.get("style") == o.ListType.ol) {
for (var e = t.getFirstChild(), n = !1, i = e.get("after"); i && i._numText;) {
if (e._numText.trim() != i._numText.trim()) return !1;
n = !0, i = (e = i).get("after")
}
return n
}
}(t), n = t.getFirstChild(), i = n._numText; n;) n._numText = void 0, n = n.get("after");
e && t.set("pattern", i), t.set("isFixed", e)
}
},
tt = function(t) {
return (t || "").replace(/\t/g, X).length
},
et = {
NOT_CLOSE: 0,
CLOSE_EXCLUDE: 1,
CLOSE_INCLUDE: 2,
UNKNOWN: -1
},
nt = l.getHTMLTagReg,
it = {
paragraph: {
shouldClose: function(t) {
return t.match(y) ? (this.cur.set("tail", 1), et.CLOSE_INCLUDE) : et.UNKNOWN
},
onClose: function(t) {
this.cur._lines.length > 1 && this.cur._lines[0].match(w) && (this.cur.set("ahead", 1), this.cur._lines.shift()), !this.cur._lines.length && this.cur._lines.push(""), this.cur.set("text", this.cur._lines.join("\n")), this.cur._lines = void 0
},
onContinue: function(t) {
this.cur._lines.push(t)
}
},
html_block: {
shouldClose: function(t) {
var e, n = this.cur.get("depth") || 0,
i = nt(this.cur.get("style")),
r = t;
if (!t.trim()) return et.CLOSE_EXCLUDE;
for (; e = i.exec(r);) r = r.substring(e.index + e[0].length), e[2] ? n-- : e[1] || n++;
return n <= 0 ? (this.cur.set("depth", 0), this.cur._lines.push(t), et.CLOSE_INCLUDE) : (this.cur.set("depth", n), et.NOT_CLOSE)
},
onClose: function(t) {
var e = this.cur.get("depth");
this.cur.set("text", this.cur._lines.join("\n")), e && this.skips.enableStartMatch && (1 != this.cur._lines.length || />/.exec(this.cur._lines[0]) ? l.autoCloseTag(this.cur) : (this.cur.set("type", a.paragraph), this.cur.unset("style"))), this.cur._lines = void 0
},
onContinue: function(t) {
this.cur._lines.push(t)
}
},
blockquote: {
shouldClose: function(t) {
return t.trim().length ? t.match(F) ? et.NOT_CLOSE : t.match(/\t|( {2,})/) ? et.NOT_CLOSE : et.UNKNOWN : (this.cur.set("tail", 1), et.CLOSE_INCLUDE)
},
onClose: function(t) {
new ot(this.cur._lines, this.cur, null, null, this.skips), this.cur._lines = void 0, this.cur.unset("text"), (this.skips || {}).pass_format || this.cur.set("userIndent", this.cur._lineIndents), this.cur._lineIndents = void 0
},
onContinue: function(t) {
var e = this.cur._indent;
G[e] || (G[e] = new RegExp("^((( {0," + (e + 4) + "}|\\t)> {0," + (e || 1) + "})|\\t|>(\\t| {0," + (e || 1) + "}))"), G[e].toString());
var n = G[e].exec(t) || [""],
i = n[0];
if (n[2] && e < 4 && !/^\s*([-+*>]|\d+\.)\s/.exec(t.substring(i.length)) && (K[e] || (K[e] = new RegExp("^( {1," + (4 - e) + "}|\\t)>")), !K[e].exec(t.substring(i.length)))) {
i += (new RegExp("^ {1," + (4 - e) + "}").exec(t.substring(i.length)) || [""])[0]
}
this.cur._lineIndents.push(i), this.cur._lines.push(t.substring(i.length))
}
},
list: {
shouldClose: function(t) {
var e, n = this.cur.getLastChild();
if (V[n._indent] || (V[n._indent] = new RegExp("^( {" + n._indent + ",}|\\t)")), t.match(V[n._indent])) return this.cur.unset("tail"), et.NOT_CLOSE;
if (t.match(w)) return this.cur.set("tail", (this.cur.get("tail") || 0) + 1), this.cur.get("tail") > 1 ? (this.cur.set("tail", 1), et.CLOSE_EXCLUDE) : et.NOT_CLOSE;
if (n._minIndent < n._indent && (V[n._minIndent] || (V[n._minIndent] = new RegExp("^( {" + n._minIndent + ",})")), t.match(V[n._minIndent]))) return this.cur.unset("tail"), n._indent = /^\s+/.exec(t)[0].length, n._indentDecided = !1, et.NOT_CLOSE;
if (e = h[this.cur.get("style")].exec(t)) return this.cur.get("style") != o.ListType.ol ? e[3] == this.cur._mark ? 0 : 1 : et.NOT_CLOSE;
return this.lines[this.ln - 1].match(w) ? et.CLOSE_EXCLUDE : et.UNKNOWN
},
onClose: function() {
for (var t = this.cur.getLastChild(), e = this.cur.get("tail") || 0; e > 0 && !t._lines.last().trim().length;) t._lines.pop(), t._lineIndents.pop(), e--;
new ot(t._lines, t, null, null, this.skips), t.unset("text"), (this.skips || {}).pass_format || t.set("userIndent", t._lineIndents), t._lines = void 0, t._indent = void 0, t._minIndent = void 0, t._indentDecided = void 0, t._lineIndents = void 0, this.cur._mark = void 0, this.cur.unset("text"), (this.skips || {}).pass_format || (Z(this.cur), !this.cur.get("tail") && this.lines[this.ln] && this.cur.set("tail", 0))
},
onContinue: function(t, e, n) {
var i, r = this.cur.getLastChild(),
s = tt(e),
u = File.option.strictMarkdown ? s - n : 2,
c = this.cur.get("style"),
l = 0;
n = n || (r ? r.get("prespace") : 0) || 0;
function f(t, e, n) {
n && (t._lines = []), t._lines.push(e)
}
t.match(w) || this.cur.unset("tail");
var p, g;
if (!r) return c == o.ListType.ol && (l = /^\s*(\d+)\.\s+/.exec(t)[1].length - 1), r = new o({
type: a.list_item,
prespace: n,
markindent: s - l - n
}), this.cur.append(r), r._indent = u + n, r._minIndent = l + (c == o.ListType.ol ? 3 : 2) + n, c == o.ListType.ol && (r._numText = (/^\s*(\d+\.\s+)/.exec(t) || [])[1], r._numLength = l), (g = h[o.ListType.task].exec(t)) ? (r.set("checked", !!g[5]), r.set("style", o.ListType.task), p = g[0]) : p = h[c].exec(t)[0], r._lineIndents = [p], void f(r, t.substring(p.length), !0);
r._numLength = r._numLength || 0, V[r._indent] || (V[r._indent] = new RegExp("^( {" + r._indent + ",}|\\t)"));
var b = t.match(V[r._indent]),
y = 0;
if (Q[r._indent] || (Q[r._indent] = new RegExp("^ {2," + r._indent + "}|\\t")), y = (t.match(Q[r._indent]) || [""])[0].length, p = (Q[r._indent].exec(t) || [""])[0], t = b ? t.substring(p.length) : t, r.get("style") == o.ListType.task && !File.option.strictMarkdown && b && (p += (t.match(/^ {4}/) || [""])[0], t = t.replace(/^ {4}/, "")), !b && (i = v[c].exec(t))) return n = (i[1] || "").length, e = i[0], s = tt(e), u = File.option.strictMarkdown ? s - n : 2, r._lines.length > 1 && r._lines.last().match(w) ? (r._lines.pop(), r.set("tail", 1)) : r.set("tail", 0), this.cur.unset("tail"), new ot(r._lines, r, null, null, this.skips), (this.skips || {}).pass_format || r.set("userIndent", r._lineIndents), r.unset("text"), r._lines = void 0, r._lineIndents = void 0, r._indent = void 0, c == o.ListType.ol && (l = /^\s*(\d+)\.\s+/.exec(t)[1].length - 1), (r = new o({
type: a.list_item,
prespace: n,
markindent: s - l - n
}))._numLength = l, r._numText = (/^\s*(\d+\.\s+)/.exec(t) || [])[1], r._minIndent = l + (c == o.ListType.ol ? 3 : 2) + n, p = i[0], (g = h[o.ListType.task].exec(t)) && (r.set("checked", !!g[5]), r.set("style", o.ListType.task), p = g[0]), this.cur.append(r), r._indent = u + n, r._lineIndents = [p], void f(r, t.substring(p.length), !0);
if (!r._indentDecided) {
if ((i = m.exec(t)) && r._indent && r._indent - n < 4)
if (i[1].length) {
var F = i[1].length,
k = F + r._indent;
k > n + r.get("markindent") && (x = r._lines, d.exec(function(t) {
if (!t || 0 == t.length) return "";
for (var e = t.length - 1; e >= 0; e--)
if (t[e].trim().length > 0) return t[e];
return ""
}(x))) ? F = r.get("markindent") - r._indent : k >= n + r.get("markindent") + 4 && (F = F + r._indent - 4 - r.get("markindent")), r._indent += F, this.cur.set("subindent", r._indent - r._numLength), r.set("subindent", r._indent - r._numLength), p += t.substring(0, F), t = t.substring(F)
} else r.set("subindent", Math.max(2, y - r._numLength));
r._indentDecided = !!i
}
return r._lineIndents.push(p), void f(r, t, !1);
var x
}
},
fences: {
shouldClose: function(t) {
var e;
if (e = C.exec(t)) {
var n = e[1][0] == this.cur._mark[0] ? et.CLOSE_INCLUDE : et.NOT_CLOSE;
return n == et.CLOSE_INCLUDE && this.cur._mark != e[1] && this.cur.set("patternEnd", e[1]), n
}
return et.NOT_CLOSE
},
onContinue: function(t) {
this.cur._lines.push(t)
},
onClose: function() {
this.cur.set("text", this.cur._lines.join("\n")), this.cur._mark = void 0, this.cur._lines = void 0;
var t = this.lines[this.ln + 1];
void 0 !== t && t.match(w) && (this.cur.set("tail", 1), this.ln++)
}
},
code: {
shouldClose: function(t) {
return t.match(S) ? et.NOT_CLOSE : t.trim().length ? et.CLOSE_EXCLUDE : this.cur._lines.length > 1 && !this.cur._lines.last().trim().length ? et.CLOSE_EXCLUDE : et.NOT_CLOSE
},
onClose: function() {
var t = this.lines[this.ln];
t && !t.trim().length && this.cur._lines.push(t.replace(T, "")), this.cur._lines.length > 1 && (this.cur._lines.last().match(w) ? (this.cur.set("tail", 1), this.cur._lines.pop(), this.cur._lines.length > 1 && this.cur._lines.last().match(w) && (this.cur._lines.pop(), this.ln--)) : this.cur.set("tail", 0)), this.cur.set("text", this.cur._lines.join("\n")), this.cur.attributes.type = a.fences, this.cur._lines = void 0
},
onContinue: function(t) {
this.cur._lines.push(t.replace(T, ""))
}
}
};
function rt(t, e, n) {
var i, r, o = "",
a = "",
s = [],
u = 0;
if (!e) {
if (!(r = j.exec(t))) return null;
t = r[1]
}
if (t = t.replace(/(^|[^\\])((`+)([\s\S]*?[^`])\3(?!`))/g, function(t, e, n) {
return s.push(n), [e, o, ++u - 1, a].join("")
}), File.option.enableInlineMath && (t = t.replace(/\\\$/g, "").replace(/(^|[^\\])((\$+)([\s\S]*?[^$])\3(?!\$))/g, function(t, e, n) {
return s.push(n.replace(/\uE07D/g, "\\$")), u++, [e.replace(/\uE07D/g, "\\$"), o, u - 1, a].join("")
})), i = (t = t.replace(/\\\\/g, lt.ESCAPE_ESCAPE).replace(/\\\|/g, lt.ESCAPE_VLINE).replace(/\\\ /g, lt.ESCAPE_SPACE)).split(U), e && i.length <= 1) return null;
if (i.length < n && File.option.enableInlineMath) {
var c = (t = t.replace(/\uE07A(\d+)\uE07B/g, function(t, e) {
return s[e - 0]
})).split(U);
c.length == n && (i = c)
}
return i.map(function(t) {
return (e = t.replace(/\uE022/g, "\\ ").replace(new RegExp("", "g"), "\\$").replace(/\uE07A(\d+)\uE07B/g, function(t, e) {
return s[e - 0]
})) ? e.replace(new RegExp(lt.ESCAPE_ESCAPE, "g"), "\\\\").replace(new RegExp(lt.ESCAPE_VLINE, "g"), "\\|") : e;
var e
})
}
var ot = function(t, e, n, i, r) {
v = File.option.strictMarkdown ? g : p;
var o = t;
this.remap = File.shouldRemapPunctuation() && (r.enableRemap || i && i.cid == File.editor.focusCid), "string" == typeof t && (o = t.split(b), "\n" === t.charCodeAt(t.length - 1) && (a -= 1));
var a = o.length;
this.lines = o, u = e, c = n, l = i, f = r, (s = this).parent = u, s.cur = null, s.skips = f, s.ln = 0, s.blocks = [], s.oldNode = l, s.nodeMap = u || l, s.nodeMap = s.nodeMap ? s.nodeMap.get("in") : c, X = " ".repeat(File.option.indentSize);
var s, u, c, l, f;
for (this.skips.enableMetaBlock = this.skips.enableMetaBlock && !e; this.ln <= a; this.ln++) at.call(this, o[this.ln], a);
return this
};
function at(t, e) {
var n = this.ln >= e;
function r(t) {
if (o.isType(this.cur, a.paragraph) && this.cur._lines && 1 == this.cur._lines.length && this.cur._lines[0].match(w)) return function(t) {
this.blocks.remove(t), t.remove()
}.call(this, this.cur), this.cur = null, t.set("ahead", 1), !0
}
function s(t) {
var e = this.lines[this.ln + 1];
if (void 0 !== e && e.match(w)) return this.ln++, t.set("tail", 1), !0;
void 0 !== e && t.set("tail", 0)
}
function u(t, e) {
var n, i = t = t || this.cur;
this.oldNode && !this.blocks.length ? (this.oldNode !== t && (n = t.get("userIndent"), t.giveChildrenTo(this.oldNode), this.oldNode.copyContentFrom(t), this.oldNode.set("userIndent", n), t._lines && (this.oldNode._lines = t._lines), t.remove()), this.blocks.push(this.oldNode), i = this.oldNode) : (this.parent ? this.parent.append(t) : this.blocks.length ? this.blocks.last().insert(t) : (console.sendError("parse error: " + t.getText()), t.set("parent", this.parent), t.set("in", this.nodeMap), t.set("attachTo", this.nodeMap)), this.blocks.push(t)), this.cur = e ? i : null
}
var c, f, d;
function m(t, n) {
this.cur && (!o.isType(this.cur, a.paragraph) || (this.cur._lines || []).length ? (d.onClose && d.onClose.call(this, n), this.ln < e - 1 && void 0 == this.cur.get("tail") && this.cur.set("tail", 0), u.call(this, this.cur, t)) : this.cur = null)
}
function v(t, e, n) {
var i = new o({
type: a.list,
style: t,
in: this.nodeMap,
pattern: e
});
t == o.ListType.ol ? i.set("start", n) : i._mark = n, r.call(this, i), m.call(this), this.cur = i
}
function p(e) {
var n = e ? q : P;
if (i = rt(t, e)) {
var i, r, o = this.ln + 1,
a = this.lines.length,
s = this.lines[o],
u = [];
if (o < a && this.lines[o].match(n))
for (o++; o < a && (r = null, r = rt(this.lines[o], e, i.length)); o++) u.push(r);
if (u.length) return s = e ? s.split(U) : s.replace(/^ *\||\| *$/g, "").split(U), b.call(this, i, s, u, o - 1, e), !0
}
return !1
}
function g(t) {
f = new o({
type: a.toc,
in: this.nodeMap,
pattern: t
}), r.call(this, f), s.call(this, f), m.call(this, !0), u.call(this, f)
}
function b(t, e, n, c, l) {
var f, h = (this.skips || {}).pass_format,
d = new o({
type: a.table,
in: this.nodeMap,
style: !h && e && l ? "npTable" : void 0
}),
v = t.length,
p = h || function(t, e, n) {
if (!e || !n) return !0;
for (var r = 0; r < t.length; r++) {
var o = (t[r] || "").length;
if (!(o > 40)) {
var a = i.wcswidth(t[r]);
if (o != (e[r] || "").length && a != i.wcswidth(e[r])) return !1;
for (var s = 0; s < n.length; s++) {
var u = (n[s] || [])[r] || "";
if (!(u.length > 40) && o !== u.length && a != i.wcswidth(u)) return !1
}
}
}
return !0
}(t, e, n);
function g(t, e) {
var n, i = new o({
type: a.table_row,
parent: t,
in: t.get("in"),
header: !f,
before: f
});
for (y = 0; y < v; y++) {
var r = (e[y] || "").match(/^\s*/)[0];
e[y] = (e[y] || "").substring(r.length);
var s = (e[y] || "").match(/\s*$/)[0];
n = new o({
type: a.table_cell,
parent: i,
in: i.get("in"),
before: n,
text: (e[y] || "").trim(),
marginLeft: p ? void 0 : r,
marginRight: p ? void 0 : s
})
}
return i
}
if (d.set("alignText", p ? void 0 : e.slice(0)), !h && e && n) {
var b = [t.join("|"), e.join("|")].concat(n.map(function(t) {
return t.join("|")
}));
l || (b = b.map(function(t) {
return "|" + t + "|"
})), d.set("userText", b)
}
e = e || new Array(t.length), n = n || [
[]
];
for (var y = 0; y < v; y++) e[y] = e[y] || "", e[y].match(/^ *-+: *$/) ? e[y] = "right" : e[y].match(/^ *:-+: *$/) ? e[y] = "center" : e[y].match(/^ *:-+ *$/) ? e[y] = "left" : e[y] = null;
d.set("align", e), f = g.call(this, d, t), n.forEach(function(t) {
f = g.call(this, d, t)
}, this), r.call(this, d), m.call(this), c && (this.ln = c), s.call(this, d), u.call(this, d), this.cur = null
}
if (this.cur) {
d = it[this.cur.get("type")];
var y = !n && d.shouldClose.call(this, t);
if (y > 0 || n) {
if (m.call(this, !1, n), 2 == y) return
} else if (!y) return void(d.onContinue && d.onContinue.call(this, t))
}
if (!n)
if (this.skips.old_code || this.skips.fromP || !(c = S.exec(t))) {
if ((c = _.exec(t)) && o.isType(this.cur, a.paragraph) && !i.isNullOrBlank(this.cur._lines.last())) return f = new o({
type: a.heading,
depth: "=" == c[1] ? 1 : 2,
text: this.cur._lines.pop(),
pattern: "{0}\n" + t,
in: this.nodeMap
}), r.call(this, f), m.call(this), s.call(this, f), void u.call(this, f);
if (t.match(this.remap ? H : $)) {
if (c = (File.option.strictMarkdown ? x : k).exec(t)) return f = new o({
type: a.heading,
depth: c[2].length,
text: c[3],
pattern: (this.skips.enableStartMatch ? c[1].replace(/#$/, "# ") : c[1]) + "{0}" + (c[4] || ""),
in: this.nodeMap
}), r.call(this, f), s.call(this, f), m.call(this), void u.call(this, f);
if (c = I.exec(t)) return f = new o({
type: a.def_footnote,
ref: c[1],
pattern: c[2],
text: c[3],
in: this.nodeMap
}), r.call(this, f), s.call(this, f), m.call(this, !0), void u.call(this, f);
if (c = B.exec(t)) return f = new o({
type: a.def_link,
ref: c[1],
href: c[3],
title: c[7],
in: this.nodeMap,
pattern: "[;]:" + c[2] + ";" + c[4] + (c[5] ? ";" + c[6] : "")
}), r.call(this, f), s.call(this, f), m.call(this, !0), void u.call(this, f);
if (this.skips.fromP) return this.cur || (this.cur = new o({
type: a.paragraph,
in: this.nodeMap
}), this.cur._lines = []), void this.cur._lines.push(t);
if (this.skips.enableStartMatch && (c = O.exec(t))) {
var C = rt(t, !1);
if (C && C.length > 1) return void b.call(this, C)
}
if (c = F.exec(t)) return f = new o({
type: a.blockquote,
in: this.nodeMap,
pattern: c[1]
}), r.call(this, f), f._lines = [c[2]], f._indent = c[1].replace(/[ \u00A0]*>/, "").length, f._lineIndents = [c[1]], m.call(this), void(this.cur = f);
var T = this.remap ? Y : N;
if (this.skips.enableMetaBlock && 0 == this.ln && t.match(T)) {
var j = this.ln + 1,
G = this.lines.length;
if (!(X = this.skips.enableStartMatch || !1))
for (; j < G; j++)
if (this.lines[j].match(T)) {
X = j > this.ln + 1;
break
}
if (X) return f = new o({
type: a.meta_block,
in: this.nodeMap,
text: this.lines.slice(this.ln + 1, j).join("\n")
}), r.call(this, f), this.ln = j, s.call(this, f), m.call(this, !0), void u.call(this, f)
}
if (this.remap) {
if (t.match(W)) {
var K = t.replace(/\u2013/g, "--").replace(/\u2014/g, "---");
if (c = M.exec(K)) return f = new o({
type: a.hr,
pattern: K.trim(),
in: this.nodeMap
}), r.call(this, f), s.call(this, f), m.call(this, !0), void u.call(this, f)
}
} else if (c = M.exec(t)) return f = new o({
type: a.hr,
pattern: t.trim(),
in: this.nodeMap
}), r.call(this, f), s.call(this, f), m.call(this, !0), void u.call(this, f);
if (c = h.ul.exec(t)) return R.exec(this.lines[this.ln + 1] || "") ? (g.call(this, t + "\n" + this.lines[this.ln + 1]), void this.ln++) : (v.call(this, o.ListType.ul, c[2], c[3]), void(d = it[a.list]).onContinue.call(this, t, c[0], c[1].length));
if (c = h.ol.exec(t)) return v.call(this, o.ListType.ol, c[0].replace(/\d+/, "{0}"), c[0].match(/\d+/)[0].replace(/^1$/, "")), void(d = it[a.list]).onContinue.call(this, t, c[0], c[1].length);
if ((c = t.match(A)) && !this.skips.math_block) {
j = this.ln + 1, G = this.lines.length;
var V, Q, X = this.skips.enableStartMatch || !1;
if (V = c[1], !X)
for (; j < G; j++)
if (c = this.lines[j].match(A)) {
Q = c[1], X = !0;
break
}
if (X) return f = new o({
type: a.math_block,
in: this.nodeMap,
tagBefore: V,
tagAfter: Q,
text: this.lines.slice(this.ln + 1, j).join("\n")
}), r.call(this, f), this.ln = j, s.call(this, f), m.call(this, !0), void u.call(this, f)
}
if (c = E.exec(t)) return (f = new o({
type: a.fences,
lang: c[3],
pattern: c[1] + "{0}",
in: this.nodeMap
}))._mark = c[2], f._lines = [], r.call(this, f), m.call(this), void(this.cur = f);
var Z = this.remap ? J : D;
if (t.match(Z)) return void g.call(this);
if (t.match(L)) return void g.call(this, t);
if (p.call(this, !1)) return;
if (File.option.blockHTML && (c = z.exec(t))) {
f = new o({
type: a.html_block,
in: this.nodeMap,
style: (c[1] || "").toLowerCase(),
depth: 0
}), r.call(this, f), m.call(this, !0);
var tt = this.cur || (this.blocks || []).last();
if (tt && o.isType(tt, a.html_block) && 0 === tt.get("tail") && !f.get("ahead")) {
tt !== this.oldNode && tt.detach(), this.blocks.pop(), this.cur = tt, tt._lines = tt.get("text").split(/\n/);
var nt = tt.get("displayStyle") || tt.get("style");
l.HIDDEN_TYPE.indexOf(nt) > -1 && (nt = c[1]), tt.set("displayStyle", nt), tt.unset("tail"), tt.set("style", c[1]), tt.set("depth", 0), f.remove(), f = tt
} else r.call(this, f), this.cur = f, this.cur._lines = [];
return d = it[a.html_block], void(it.html_block.shouldClose.call(this, t) == et.CLOSE_INCLUDE ? (m.call(this, !0), s.call(this, this.cur), this.cur = null) : (this.cur._lines = this.cur._lines || [], this.cur._lines.push(t)))
}
} else if (!this.skips.fromP && p.call(this, !0)) return;
this.cur || (this.cur = new o({
type: a.paragraph,
in: this.nodeMap
}), this.cur._lines = []), o.isType(this.cur, a.paragraph) ? this.cur._lines.push(t) : d && d.onContinue && d.onContinue.call(this, t)
} else o.isType(this.cur, a.code) && d ? d.onContinue && d.onContinue.call(this, t) : o.isType(this.cur, a.paragraph) && (this.cur._lines.last() || "").trim().length ? this.cur._lines.push(t) : (f = new o({
type: a.code,
pattern: c[1],
in: this.nodeMap
}), r.call(this, f), f._lines = [c[2]], m.call(this), this.cur = f)
}
o.parseFrom = function(t, e, n, i) {
n = n || {};
return new o({
type: a.raw_edit,
in: e,
attachTo: n.noTop ? null : e,
text: t
}).parseFrom(n, void 0, i)
}, o.prototype.parseFrom = function(t, e, n) {
if (t = t || {}, o.isType(this.get("parent"), a.table_row)) return this.set("type", a.table_cell), this.set("text", this.safeGetStrAttr("text").replace(/\n|\r/gi, "").replace(/([^\\])\|/gi, "$1|")), [!n && this.toHTML(), [this]];
if (!o.isType(this, a.paragraph, a.raw_edit, a.html_block, a.list_item)) return [!n && this.toHTML(), [this]];
var i = function(t) {
if (o.isType(t, a.list_item) && !t.get("children").length) {
var e = new o({
type: a.paragraph,
text: t.get("text"),
parent: t,
in: t.get("in")
});
return t.set("text", ""), e
}
return null
}(this) || this,
s = t.skips || {};
if (e = e || i.get("text"), File.option.ignoreLineBreak && (e = e.replace(/\u00a0/g, " ")), s.enableMetaBlock = this.get("attachTo") && !this.get("before"), s.old_code = !1 !== s.old_code, this.isBlock(!0)) {
var u = this.get("before"),
c = this.get("after"),
l = new ot(e, null, i.get("in"), i, s).blocks;
return l.length <= 1 ? [!n && this.toHTML(), [this]] : (l[0].set("before", u), l.last().set("after", c), [!n && r.NodeCollectionUtils.toHTML(l), l])
}
};
var st = function(t) {
var e = t.last();
if (e) return e.text || ""
},
ut = {
escape: /^\\([\\`*{}\[\]()#+\-.!_>$|<~"'&])/,
escape2: /^[\uE013\uE014\uE018\uE020]/,
autolink: /^<\uE016?((([^ >]+(@|:)[^ >]+))|(\s*www\.[^ >]+))\uE017?>/,
url: /^\uE016([^\uE017]+)\uE017/i,
comment: /^<!--[\s\S]*?-->/,
citation: /^(?:^|[ ;\[-])\@\w\S+([^\]\s]*)/,
br: /^<w?br[\s/]*>(\s*<\/w?br>)*/i,
tag: /^(?:<([A-Za-z][A-Za-z0-9-]*)(?:\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\s*=\s*(?:[^"'=<>`\x00-\x20]+|'[^']*'|"[^"]*"))?)*\s*(\/?)>|<(\/)([A-Za-z][A-Za-z0-9-]*)\s*[>]|[<][?].*?[?][>]|<![A-Z]+\s+[^>]*>|<!\[CDATA\[[\s\S]*?\]\]>)/,
underline: /^<u>([^\r]*?\S)<\/u>/i,
atag: /^(<a\s.+?>)(.*?)(<\/\s*a>)/i,
imgtag: /^<img(\s+[^<]+)(\/?\s*>([^<]*(<\/img>))?)/i,
link: /^\[((?:\[[^\]]*\]|[^\[\]])*)\]\(<?((?:\([^)]*\)|[^()])*?)>?[ \t]*((['"])(.*?)\4[ \t]*)?\)/,
image: /(^\!\[((?:\[[^\]]*\]|[^\[\]])*)\]\()(<?((?:\([^)]*\)|[^()])*?)>?[ \t]*((['"])(.*?)\6[ \t]*)?)(\)(?:\s*{([^{}\(\)]*)})?)/,
reflink: /^(!?)\[(inside)\]\[([^\]]*)\]/,
strong: /^(\*\*|__)(?=\S)([^\r]*?\S?[*_]?)\1/,
strong_esp: /^\uE031([^\uE031]+)\uE031/,
em1: /^(\_)(?=\S)([^\r]*?[^\s_])\1(?!\1)/,
em2: /^(\*)(?=\S)([^\r]*?[^\s*])(\1{1}|\1{3})(?!\1)/,
highlight: /^(\=\=)(?=\S)([^\r]*?\S)\1/,
code: /^(`+)([\s\S]*?[^`])\1(?!`)/,
del: /^~~(?=\S)([\s\S]*?\S)~~/,
tab: /^[\t]+/,
text: /^(\s|\S)+?[^\n\t\u200B\uE010-\uE020\uE006\\<!\[._*`&{\$\:~\^\="'\-]*/,
footnote: /^\[\^([^\]\n]+)\]/,
attr: /^{( *([#.][-\w_\uE006]+ *|[-\w_\uE006]+=[-\w_"'\uE006]+ *)+)}/,
entity: /^&#?[a-z0-9]+;/i,
emoji: /^(\u200B*):([+\-\w\uE006]+):(\u200B*)/,
inline_math: /^\$(.|\n)*(?:[^\\])\$/,
subscript: /^~(([^\s\n]|(\\\s))+?)~/,
superscript: /^\^(([^\s\n]|(\\\s))+?)\^/,
linebreak: /[ \u00A0]{2}$/,
emptyline: /^(\n)(?:\n|$)/
};
ut.comment_ext = /^<!(--|\u2013|\u2014)[\s\S]*?(--|\u2013|\u2014)>/, ut.citation_ext = /^(?:^|[ ;\[-])(\@|\u0040|\uFE6B|\uFF20|\u0040)\w\S+([^\]\s]*)/, ut.link_ext = /^[\[\u3010]((?:[\[\u3010][^\]\u3011]*[\u3011\]]|[^\[\]\u3010\u3011])*)[\]\u3011]\(<?((?:\([^)]*\)|[^()])*?)>?[ \t]*((["'«»‘’‚‛„‟‹›])(.*?)["'«»‘’‚‛„‟‹›][ \t]*)?\)/, ut.image_ext = /(^\![\[\u3010]((?:[\[\u3010][^\]\u3011]*[\]\u3011]|[^\[\]\u3010\u3011])*)[\]\u3011][\(\uff08])(<?((?:[\(\uff08][^)\uff09]*[\)\uff09]|[^()\uff08\uff09])*?)>?)([\)\uff09](?:\s*{([^{}\(\)\uff08\uff09]*)})?)/, ut.attr_ext = /^{( *([#.][-\w_\uE006]+ *|[-\w_\uE006]+=[-\w_"'«»‘’‚‛„‟‹›\uE006]+ *)+)}/, ut._inside = /(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/, ut._inside_ext = /(?:[\[\u3010][^\]\u3011]*[\]\u3011]|[^\[\]\u3010\u3011]|[\]\u3011](?=[^\[\u3010]*[\]\u3011]))*/, ut.tag_ext = /^(?:<([A-Za-z][A-Za-z0-9-]*)(?:\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\s*=\s*(?:[^"'=<>`\x00-\x20]+|[’‚‛'‹›][^'’‚‛]*['’‚‛‹›]|["“«»„‟][^"“«»„‟]*["“«»„‟]))?)*\s*(\/?)>|<(\/)([A-Za-z][A-Za-z0-9-]*)\s*[>]|[<][?].*?[?][>]|<![A-Z]+\s+[^>]*>|<!\[CDATA\[[\s\S]*?\]\]>)/, ut.reflink = pt(ut.reflink)("inside", ut._inside)(), ut.normal = bt({}, ut), ut.pedantic = bt({}, ut.normal, {
strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/
}), ut.gfm = ut.normal, ut.breaks = bt({}, ut.gfm, {
text: pt(ut.gfm.text)("{2,}", "*")()
});
function ct(t, e, n) {
this.options = t || bt({}, Ct.defaults), this.options.decorate = e || s.decorate, this.options.context = n || this, this.rules = ut.normal, this.options.gfm ? this.options.breaks ? this.rules = ut.breaks : this.rules = ut.gfm : this.options.pedantic && (this.rules = ut.pedantic), File.option.enableHighlight && (this.rules.escape2 = /^[\uE013\uE014\uE015\uE018\uE020]/), File.option.enableSuperscript ? File.option.enableHighlight ? this.rules.escape = /^\\([\\`*{}\[\]()#+\-.!_>$|<~^=])/ : this.rules.escape = /^\\([\\`*{}\[\]()#+\-.!_>$|<~^])/ : File.option.enableHighlight && (this.rules.escape = /^\\([\\`*{}\[\]()#+\-.!_>$|<~=])/)
}
ct.rules = ut;
var lt = {
UNDER_CHAR: "",
MATH_CHAR: "",
DEF_FOOT_PERFIX_CHAR: "",
ESCAPE_SATR: "",
ESCAPE_UNDERLINE: "",
ESCAPE_EQUAL: "",
URL_START: "",
URL_END: "",
ESCAPE_END_SQUARE_BRACKET: "",
NOT_USED: "",
ESCAPE_ESCAPE: "",
ESCAPE_VLINE: "",
ESCAPE_SPACE: ""
},
ft = {
"": "[^",
"": "*",
"": "_",
"": "=",
"": "]",
"": "\\"
},
ht = {
"": "_",
"": "",
"": ""
},
dt = {
"\\\\": lt.ESCAPE_ESCAPE,
"\\*": lt.ESCAPE_SATR,
"\\=": lt.ESCAPE_EQUAL,
"\\_": lt.ESCAPE_UNDERLINE,
"\\]": lt.ESCAPE_END_SQUARE_BRACKET
};
function mt(t) {
return t.replace(/[\uE006-\uE020]/g, function(t) {
return ft[t] ? "\\" + ft[t] : ht[t] || ""
})
}
ct.skipLink = {
autolink: 1,
url: 1,
link: 1,
reflink: 1
};
var vt = function(t) {
for (var e = t.length - 1; e >= 0; e--)
if (t[e].type == a.pants) {
if ("open_double_quote" == t[e].desc) return !0;
if ("close_double_quote" == t[e].desc) return !1
}
return !1
};
ct.prototype.output = function(t, e, n, r, o) {
e = e || this.options.decorate, (r = bt(r || {}, this.options.skipOp)).attr = !1 !== r.attr, r.markLinebreak = !0, File.option.enableInlineMath || (r.inline_math = !0), File.option.enableSubscript || (r.subscript = !0), File.option.enableSuperscript || (r.superscript = !0), File.option.enableHighlight || (r.highlight = !0);
var u, h, d, m, v, p = (o = o || {
cursorDiff: [],
openQuote: null,
hasContent: !1
}).isCur || File.shouldRemapPunctuation(),
g = o.cursorDiff || [],
b = 0,
y = [],
w = this.options,
F = e == s.decorate,
k = w.forPrint;
function x(t, e) {
var n = t.last();
n && n.type === a.plain ? n.text += e : t.push({
type: a.plain,
text: e
})
}
function _(t, e, n) {
for (var i = 1, r = e; r < t.length; r++)
if (t[r].name == n && (t[r].pos < 0 && i--, t[r].pos > 0 && i++, !i)) return r;
return 0
}
function $(t) {
for (var n = "", i = 0; i < t.length; i++) {
var r = t[i];
r.name = r.name || "";
var s = l.INLINE_TYPE.indexOf(r.name.toLowerCase()) > -1,
u = l.HIDDEN_TYPE.indexOf(r.name.toLowerCase()) > -1,
c = k && l.UNSFAE_TAGS.indexOf(r.name.toLowerCase()) > -1;
if ((F && (s || u) || c) && r.type == a.tag && r.pos > 0 && r.name) {
var f = r.name || "",
h = _(t, i + 1, f);
if (h > 0) {
n += e({
type: a.html_inline,
inner: $(t.subarray(i + 1, h)),
name: f.toLowerCase(),
before: r.text,
after: t[h].text,
isMeta: !s
}, w, o), i = h;
continue
}
}
n += e(r, w, o)
}
return n
}
for (t.length > 1e5 && (n = !0, x(y, t), t = ""), n || (t = function(t, e) {
for (var n, i = /([a-z0-9])_([a-z0-9])/gi; n = i.exec(t);) t = t.substring(0, n.index + 1) + lt.UNDER_CHAR + t.substring(n.index + 2), i.lastIndex && i.lastIndex--;
return t = t.replace(/\\[\*_=\]\\]/gi, function(t) {
return dt[t] || t
}), e && t.length < 2e4 && (t = t.replace(/((?:(https?:\/\/([a-z0-9]|\/|\.\.\/|([-@+.,!\/~?%&=:#\uE006_](?![\s.~*-,_]|$)))+)|((mailto:\/{0,2})?[a-z0-9][a-z0-9\-_+\.\uE006]*(@)[a-z0-9](?:[a-z0-9\-_\uE006]{0,15}\.?){0,2}\.(com|co|net|org|edu|io|tv|fm|me|info|cc|ca|de|cn|ru))|(www\.[a-z0-9][a-z0-9\-_\uE006]*(\.[a-z0-9\-_\uE006]+)+\/?(\/|\.\.\/|[a-z0-9]|([-@+.,!\/~?%&=:#\uE006_](?![\s.~*-,_]|$)))*)))/gi, lt.URL_START + "$1" + lt.URL_END)), t
}(t, !r.url)); t;)
if (r.markLinebreak && (d = /^\r?\n/.exec(t))) b += d[0].length, t = t.substring(d[0].length), y.push({
type: t || r.emptyline ? a.softbreak : a.emptyline,
text: "\n",
inner: "\n"
});
else if (d = this.rules.escape2.exec(t)) b += d[0].length, t = t.substring(d[0].length), y.push({
type: a.escape,
text: ft[d[0]]
}), o.hasContent = !0;
else if (d = this.rules.escape.exec(t)) b += d[0].length, t = t.substring(d[0].length), y.push({
type: a.escape,
text: d[1]
}), o.hasContent = !0;
else if (r.autolink || !(d = this.rules.autolink.exec(t)))
if (r.url || !(d = this.rules.url.exec(t)))
if (d = (p ? this.rules.comment_ext : this.rules.comment).exec(t)) b += d[0].length, t = t.substring(d[0].length), u = d[0], p && (u = u.replace(/[\u2013\u2014]/g, "--"), g[b] = u.length - d[0].length), y.push({
type: r.comment ? a.tag : a.comment,
text: u
});
else if (d = this.rules.br.exec(t)) b += d[0].length, t = t.substring(d[0].length), y.push({
type: "br",
text: d[0]
});
else if (r.autolink || !(d = this.rules.autolink.exec(t)))
if (r.url || !(d = this.rules.url.exec(t)))
if (d = (p ? this.rules.citation_ext : this.rules.citation).exec(t)) b += d[0].length, t = t.substring(d[0].length), u = d[0], p && (u = u.replace(/[\u2013\u2014]/g, "--"), g[b] = u.length - d[0].length), y.push({
type: r.citation ? a.tag : a.citation,
text: u
});
else if (d = this.rules.br.exec(t)) b += d[0].length, t = t.substring(d[0].length), y.push({
type: "br",
text: d[0]
});
else if (d = (File.shouldRemapPunctuation() ? this.rules.tag_ext : this.rules.tag).exec(t)) {
var E;
if (!r.underline && (E = this.rules.underline.exec(t))) {
b += E[0].length, t = t.substring(E[0].length), y.push({
type: a.underline,
inner: this.output(mt(E[1]), e, !0, r),
text: E[0]
}), o.hasContent = !0;
continue
}
if (!r.imgtag && (E = this.rules.imgtag.exec(t))) {
var C = E[0];
p && (C = C.replace(/(\w=)[«»“”„‟〝〟]/g, '$1"').replace(/(\w=)[‚‘’‛‹›]/g, "$1'").replace(/[»«”“〞]([\s\/>]|$)/g, '"$1').replace(/[’‛‘›‹']([\s\/>]|$)/g, "'$1"));
var A = (/src\s*=\s*(['"])((.|\n)*?)\1/.exec(C) || [])[2];
if (A || (A = (/src\s*=\s*([^\s'"]+)(\s|$)/.exec(C) || [])[1]), A) {
b += E[0].length, t = t.substring(E[0].length);
var S = (/\sstyle=(['"])(.+?)\1/.exec(C) || [])[2] || "",
T = (/(^|[^\w-])width\s*:\s*(.+?)(\s*;|$)/.exec(S) || [])[2],
M = (/(^|[^\w-])height*:\s*(.+?)(\s*;|$)/.exec(S) || [])[2],
D = (/(^|[^\w-])zoom*:\s*(.+?)(\s*;|$)/.exec(S) || [])[2];
T || (T = (/\swidth=(['"])(.+?)\1/.exec(C) || /\swidth=((.+?))[\s/>]/.exec(C) || [])[2], /\d\s*$/.exec(T || "") && (T += "px;")), M || (M = (/\sheight=(['"])(.+?)\1/.exec(C) || /\sheight=((.+?))[\s/>]/.exec(C) || [])[2], /\d\s*$/.exec(M || "") && (T += "px;")), y.push({
type: a.imgtag,
text: C,
href: mt(A),
width: T,
height: M,
zoom: D
})
} else b += d[0].length, t = t.substring(d[0].length), u = d[0].replace(/(\w=)[«»“”„‟〝〟]/g, '$1"').replace(/(\w=)[‚‘’‛‹›]/g, "$1'").replace(/[»«”“〞]([\s\/>]|$)/g, '"$1').replace(/[’‛‘›‹']([\s\/>]|$)/g, "'$1"), y.push({
type: a.tag,
text: mt(u)
});
o.hasContent = !0;
continue
}
if (b += d[0].length, t = t.substring(d[0].length), u = d[0].replace(/(\w=)[«»“”„‟〝〟]/g, '$1"').replace(/(\w=)[‚‘’‛‹›]/g, "$1'").replace(/[»«”“〞]([\s\/>]|$)/g, '"$1').replace(/[’‛‘›‹']([\s\/>]|$)/g, "'$1"), "ruby" == (v = {
type: a.tag,
pos: d[1] || d[4] ? d[3] ? -1 : d[2] ? 0 : 1 : 0,
name: (d[1] || d[4] || "").toLowerCase()
}).name && v.pos > 0 && F && (d = /<\/ruby>/.exec(t))) {
var L = d.index + d[0].length;
b += L, u += t.substring(0, L), t = t.substring(L), v = {
type: a.ruby,
text: mt(u)
}
} else v.text = mt(u);
y.push(v), o.hasContent = o.hasContent || -1 == l.NO_TEXT_BLOCK_TYPE.indexOf(v.name)
} else {
if (o.hasContent = !0, !r.link && (d = (p ? this.rules.link_ext : this.rules.link).exec(t))) {
var R = d[0];
if (m = d[0].length, p && (R = R.replace(/[‘’‚‛‹›]/g, "'").replace(/[«»“”„‟]/g, '"').replace(/\u3010/g, "[").replace(/\u3011/g, "]"), R = "[" + d[1] + "]" + R.substring(d[1].length + 2), d = this.rules.link.exec(R)), d) {
b += m, t = t.substring(m), y.push({
type: "link",
href: mt(d[2]),
title: d[5],
markdown: R,
text: d[1] || "",
inner: d[1] ? this.output(d[1], e, !0, ct.skipLink, o) : "",
meta: mt(R.substring(d[1].length + 2))
});
continue
}
}
if (!r.image) {
if (!p && (d = this.rules.image.exec(t))) {
b += d[0].length, t = t.substring(d[0].length), y.push({
type: "image",
href: mt(d[4]),
title: d[5],
markdown: d[0],
components: [d[1], d[3], d[8]],
alt: d[2],
onlychild: !t && !y.length
});
continue
}
if (p && (d = this.rules.image_ext.exec(t))) {
m = d[0].length;
var B = d[0].replace(/\u3010/g, "[").replace(/\u3011/g, "]").replace(/\uff08/g, "(").replace(/\uff09/g, ")").replace(/[«»“”„‟]/g, '"').replace(/[‘’‚‛‹›]/g, "'");
if (d = this.rules.image.exec(B)) {
b += m, t = t.substring(m), y.push({
type: "image",
href: mt(d[4]),
title: d[5],
markdown: d[0],
components: [d[1], d[3], d[8]],
alt: d[2],
onlychild: !t && !y.length
});
continue
}
}
}
if (!r.footnote && b && (d = this.rules.footnote.exec(t))) {
b += d[0].length, t = t.substring(d[0].length);
var I = (d[2] || d[1]).replace(/\s+/g, " ");
y.push({
type: a.footnote,
inner: this.output(d[1], e, !0, ct.skipLink),
text: mt(d[1])
})
} else if (!(d = this.rules.reflink.exec(t)) || r.reflink && !d[1])
if (r.attr || !(d = (p ? this.rules.attr_ext : this.rules.attr).exec(t)))
if (d = this.rules.strong.exec(t)) b += d[0].length, t = t.substring(d[0].length), y.push({
type: a.strong,
pattern: d[1],
inner: this.output(d[2], e, !0, r, o),
text: d[2]
});
else if (d = this.rules.em1.exec(t)) b += d[0].length, t = t.substring(d[0].length), y.push({
type: a.em,
pattern: d[1],
inner: this.output(d[2], e, !0),
text: d[2]
});
else if (d = this.rules.em2.exec(t)) {
var N = (d[2] + d[3].substring(1, 3)).match(/\s\*(?!\*)/);
if (N) {
b += N.index + 1, t = t.substring(N.index + 1), x(y, d[0].substr(0, N.index + 1));
continue
}
if ("***" === d[3] && !d[2].match(/\*\*/)) {
b += d[0].length - 2, t = t.substring(d[0].length - 2), y.push({
type: a.em,
pattern: d[1],
inner: this.output(d[2], e, !0),
text: d[2]
});
continue
}
b += d[0].length, t = t.substring(d[0].length), y.push({
type: a.em,
pattern: d[1],
inner: this.output(d[2] + d[3].substring(1, 3), e, !0),
text: d[2] + d[3].substring(1, 3)
})
} else if (d = this.rules.code.exec(t)) b += d[0].length, t = t.substring(d[0].length), y.push({
type: a.code,
pattern: d[1],
text: d[2]
});
else if (d = this.rules.del.exec(t)) b += d[0].length, t = t.substring(d[0].length), y.push({
type: a.del,
pattern: "~~",
inner: this.output(d[1], e, !0),
text: d[1]
});
else if ((d = this.rules.emoji.exec(t)) && c.data[d[2] = d[2].replace(/\uE006/g, "_")]) t = t.substring(d[0].length), y.push({
type: a.emoji,
text: d[2],
inner: c.data[d[2]]
}), !d[1].length && (g[b] = 1), b += d[0].length, !d[3].length && (g[b] = 1);
else {
if (!r.subscript && (d = this.rules.subscript.exec(t))) {
b += d[0].length, t = t.substring(d[0].length);
var O = [];
(d = d[1].split(/\\\s/g))[0] && O.push({
type: a.plain,
text: d[0]
});
for (var j = 1; j < d.length; j++) O.push({
type: a.escape,
text: " "
}), d[j] && O.push({
type: a.plain,
text: d[j]
});
y.push({
type: a.subscript,
inner: $(O),
text: d[0]
})
}
if (!r.superscript && (d = this.rules.superscript.exec(t))) {
b += d[0].length, t = t.substring(d[0].length);
O = [];
(d = d[1].split(/\\\s/g))[0] && O.push({
type: a.plain,
text: d[0]
});
for (j = 1; j < d.length; j++) O.push({
type: a.escape,
text: " "
}), d[j] && O.push({
type: a.plain,
text: d[j]
});
y.push({
type: a.superscript,
inner: $(O),
text: d[0]
})
}
if (r.inline_math || !(d = this.rules.inline_math.exec(t)))
if (r.highlight || !(d = this.rules.highlight.exec(t)))
if (d = this.rules.entity.exec(t)) b += d[0].length, t = t.substring(d[0].length), i.decodeHtmlEntity(d[0]) ? y.push({
type: a.html_entity,
inner: d[0],
text: d[0]
}) : x(y, d[0] || "");
else {
if (File.option.convertSmartOnRender && File.option.smartDash) {
if (d = /^(---)($|[^-])/.exec(t)) {
b += d[1].length, t = t.substring(d[1].length), y.push({
type: a.pants,
inner: "—",
desc: "em_dash",
meta: "--",
text: "---"
});
continue
}
if (d = /^--/.exec(t)) {
t = t.substring(d[0].length), b += d[0].length, y.push({
type: a.pants,
inner: "–",
desc: "en_dash",
meta: "-",
text: "--"
});
continue
}
if (d = /^\.{3}/.exec(t)) {
b += d[0].length, "." !== (t = t.substring(d[0].length))[4] ? y.push({
type: a.pants,
inner: "…",
desc: "ellipsis",
meta: "..",
text: "..."
}) : x(y, d[0]);
continue
}
}
if (File.option.convertSmartOnRender && File.option.smartQuote) {
var P, q;
if ('"' == t[0]) {
if (q = (P = st(y) || "")[P.length - 1] || "", /(^|[\(\{\[\s\-/\u2018])$/.exec(P) || q == f.userQuote(2)) {
b++, t = t.substring(1), y.push({
type: a.pants,
inner: f.userQuote(0),
desc: "open_double_quote",
text: '"'
});
continue
}
if (d = /^"($|[\)\s/.,;:?!\u2019])/.exec(t)) {
b++, t = t.substring(1), y.push({
type: a.pants,
inner: f.userQuote(1),
desc: "close_double_quote",
text: '"'
});
continue
}
if (vt(y)) {
b++, t = t.substring(1), y.push({
type: a.pants,
inner: f.userQuote(1),
desc: "close_double_quote",
text: '"'
});
continue
}
b++, t = t.substring(1), y.push({
type: a.pants,
inner: f.userQuote(0),
desc: "open_double_quote",
text: '"'
});
continue
}
if ("'" == t[0]) {
if (o.openQuote && (d = /^'($|[\)\s".,;:?!-])/.exec(t))) {
b++, t = t.substring(1), y.push({
type: a.pants,
inner: f.userQuote(3),
desc: "close_single",
text: "'"
}), o.openQuote.inner = f.userQuote(2), o.openQuote.desc = "open_single", o.openQuote = null;
continue
}
if (P = st(y) || "", t.length <= 1 && /((^|[\s])$)/.exec(P)) {
b += t.length, x(y, t), t = "";
continue
}
b++, t = t.substring(1), y.push({
type: a.pants,
inner: "’" == f.userQuote(3) ? "’" : "'",
desc: "close_single",
text: "'"
}), /(^|[\(\s"-])$/.exec(P) && (o.openQuote = y.last());
continue
}
}
if (d = this.rules.tab.exec(t)) b += d[0].length, t = t.substring(d[0].length), y.push({
type: a.tab,
inner: d[0],
text: d[0]
});
else if (d = this.rules.text.exec(t)) b += d[0].length, "\n" == (t = t.substring(d[0].length))[0] && this.rules.linebreak.exec(d[0] || "") ? (b++, t = t.substring(1), x(y, d[0].replace(this.rules.linebreak, "")), y.push({
type: a.linebreak,
text: " \n",
isLast: !t
})) : x(y, d[0] || "");
else if (t) throw new Error("Infinite loop on byte: " + t.charCodeAt(0))
}
else b += d[0].length, t = t.substring(d[0].length), y.push({
type: a.highlight,
inner: this.output(d[2], e, !0),
text: d[2]
});
else {
var U = null,
z = 0,
H = "",
W = null,
J = /\$/,
Y = "$";
for (/^\$\$/.exec(d[0]) ? (U = /{|}|\$\$/g, Y = "$$") : (U = /{|}|\$/g, Y = "$"), U.exec(d[0]); W = U.exec(d[0]);) {
if (J.exec(W[0]) && z <= 0 && "\\" != d[0].substring(W.index - 1, W.index)) {
H = d[0].substring(0, W.index + W[0].length);
break
}
"{" === W[0] ? "\\" === W.input[W.index - 1] && "\\" !== !W.input[W.index - 2] || z++ : "}" === W[0] && ("\\" === W.input[W.index - 1] && "\\" !== !W.input[W.index - 2] || z--)
}
var G = Y.length;
if (H.length - 2 * G > 0 && /[^\s$]/.exec(H)) {
var K = H.indexOf("​");
K > -1 && (g[b + K] = -1), b += H.length, t = t.substring(H.length), y.push({
type: "inline_math",
text: mt(H.substring(G, H.length - G)),
pattern: Y
});
continue
}
b += d[0].length, t = t.substring(d[0].length), x(y, d[0] || "")
}
} else {
b += d[0].length, t = t.substring(d[0].length);
var V = d[0];
p && (V = V.replace(/[‘’‚‛‹›]/g, "'").replace(/[«»“”„‟]/g, '"')), y.push({
type: a.attr,
text: d[0]
})
} else {
b += d[0].length, t = t.substring(d[0].length);
I = (d[3] || "").replace(/\s+/g, " ");
y.push({
type: d[1] ? "refimg" : "reflink",
ref: mt(I),
inner: this.output(d[2], e, !0, ct.skipLink),
text: mt(d[2]),
markdown: d[0],
onlychild: !t && !y.length
})
}
} else t = t.substring(d[0].length), b += d[1].length, h = u = d[1], null === /^\w+:\/\//.exec(u) && /@/.exec(u) && (h = "mailto:" + h), y.push({
type: a.url,
href: mt(h),
text: u
}), o.hasContent = !0;
else b += d[0].length, t = t.substring(d[0].length), "", u = d[1], h = "@" === d[4] ? ":" === d[1].charAt(6) ? u : "mailto:" + d[1] : u, y.push({
type: a.autolink,
href: mt(h),
text: u
}), o.hasContent = !0;
var Q = $(y);
return n || (Q = mt(Q)), Q
}, ct.prototype.mangle = function(t) {
for (var e, n = "", i = t.length, r = 0; r < i; r++) e = t.charCodeAt(r), Math.random() > .5 && (e = "x" + e.toString(16)), n += "&#" + e + ";";
return n
};
function pt(t, e) {
return t = t.source, e = e || "",
function n(i, r) {
return i ? (r = (r = r.source || r).replace(/(^|[^\[])\^/g, "$1"), t = t.replace(i, r), n) : new RegExp(t, e)
}
}
function gt() {}
gt.exec = gt;
function bt(t) {
for (var e, n, i = 1; i < arguments.length; i++) {
e = arguments[i];
for (n in e) Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n])
}
return t
}
var yt = /^( *)[*+-][ \t\u00A0]+(\[(x|X)\]|\[ \]) +/,
wt = /^( *)[*+-][ \t\u00A0]+/,
Ft = /^( *)\d+\.[ \t\u00A0]+/,
kt = function() {
return File.shouldRemapPunctuation() ? /^ *[>〉》][^\n]+/ : /^ *>[^\n]+/
};
var xt = /^( *#{1,6}\s*)([^\n]+?)(\s+#+ *)*$/m,
_t = /^( *#{1,6}\s+)([^\n]+?)(\s+#+ *)*$/m;
function $t(t, e, n, i, r, s) {
var u = [],
c = "",
l = l || {
cursorDiff: r
};
i && i.cid == File.editor.focusCid && (l.isCur = !0);
function f(t, n, r) {
var s = [];
return s[0] = t.substr(0, n.index), s[1] = t.substr(n.index, n[0].length), s[2] = t.substr(n.index + n[0].length), s.map(function(t, n) {
return 1 == n ? e.options.decorate(r) : t ? e.options.decorate({
type: a.paragraph,
inner: e.output(t, null, null, {
attr: !o.isType(i, a.heading),
emptyline: 2 != n
}, l)
}) : ""
}).join("")
}
for (; t;) {
if (!n && /^\s*[-+*_<\[\{|#0-9`~=>$]/m.exec(t)) {
if (u = /^ *>[^\n]+/m.exec(t)) {
c = f(t, u, {
type: a.blockquote,
pattern: u[0].match(/^( *> ?)+/gm)[0],
inner: $t(u[0].replace(/^( *> ?)+/gm, ""), e, !0, i, r)
});
break
}
if (u = (File.option.strictMarkdown ? _t : xt).exec(t)) {
var h = "h" + u[0].match(/#/g).length;
s.push(h), c = f(t, u, {
type: a.heading,
meta_before: u[0].substring(0, u[1].length),
meta_after: u[3] || "",
mdlike: h,
inner: e.output(u[2], null, null, {
attr: !1
}, l)
});
break
}
if (u = /^( *(`{3,}|~{3,}|·{3,})[ \t\u00A0]*)([^\n`]+)? *$/m.exec(t)) {
c = f(t, u, {
type: a.fences,
lang: u[3],
pattern: u[1]
});
break
}
if (u = /^\s*\[\^([^\]\n]+)\]:(\s*)([^\n]*)$/m.exec(t)) {
c = f(t, u, {
type: a.def_footnote,
ref: u[1],
pattern: u[2],
inner: e.output(u[3] || "", null, null, null, l)
});
break
}
if (u = /^\s*\[([^\]\n]+)\]:(\s*)([^\n]*)/m.exec(t)) {
c = f(t, u, {
type: a.def_link,
ref: u[1],
pattern: u[2],
inner: e.output(u[3] || "", null, null, null, l)
});
break
}
if (u = /^(\s*)(([-+*]|\d+\.)\s+)/m.exec(t)) {
c = f(t, u, {
type: "block",
inner: e.output(u[0] || "", null, null, null, l)
});
break
}
if (u = /^\s*(\$\$|\[toc\])\s*$/im.exec(t)) {
c = f(t, u, {
type: "block",
inner: e.output(u[0] || "", null, null, null, l)
});
break
}
if (u = /^\s*([-+_*])\s*\1\s*\1(\s|\1)*$/m.exec(t)) {
c = f(t, u, {
type: "block",
inner: e.output(u[0] || "", null, null, null, l)
});
break
}
if (u = /^ *\|([^\|]+\|.+)\|\s*$/m.exec(t)) {
c = f(t, u, {
type: "block",
inner: e.output(u[0] || "", null, null, null, l)
});
break
}
}
c = e.options.decorate({
type: a.paragraph,
inner: e.output(t, null, null, {
attr: !o.isType(i, a.heading)
}, l)
});
break
}
return c
}
var Et, Ct = {};
Ct.options = Ct.setOptions = function(t) {
return bt(Ct.defaults, t), Ct
}, Ct.defaults = {
gfm: !0,
tables: !0,
breaks: !1,
pedantic: !1,
sanitize: !1,
smartLists: !1,
silent: !1,
highlight: null,
langPrefix: "lang-",
smartypants: !1,
headerPrefix: ""
}, Ct.parseInline = function(t, e, n) {
return Et || (Et = new ct), Et.output(t, null, null, e, {
cursorDiff: n
})
}, Ct.parsePandocAttr = function(t) {
var e = {};
return t && "{" == t[0] && "}" == t[t.length - 1] ? (((t = t.replace(/(^{)|(}$)/g, "")).split(/\s+/) || [t]).forEach(function(t) {
var n;
(n = /^#(.+)/.exec(t)) ? e.id = i.escapeInQuote(n[1]): (n = /^\.(.+)/.exec(t)) ? e.class = (e.class || "") + " " + i.escapeInQuote(n[1]) : (n = /^(.+)=(['"])([^'"]+)\2/.exec(t)) && (e.attr = (e.attr || "") + " " + t, e.nativeAttr = e.nativeAttr || {}, e.nativeAttr[n[1]] = n[3])
}), e) : e
}, Ct.attrToString = function(t) {
var e = "";
return t.id && (e += " id='" + t.id + "'"), t.class && (e += " class='" + t.class.trim() + "'"), t.attr && (e += t.attr), e
}, Ct.InlineLexer = ct, Ct.quickParse = function t(e, n, r, s, c, l) {
var f, h = 0,
d = r,
m = [];
c = c || !s && u.makeEmptyCommand();
function v(t, e, n) {
return new o({
type: n || a.paragraph,
text: t,
parent: e,
in: e.get("in")
})
}
function p(t, i, r, s) {
r.cid == n.editor.focusCid && n.editor.store(), i.undo.push(u.buildReplaceUndo(r));
var c = null;
return s && s.start ? (h = h - s.start + t.length, c = r.insert(new o({
type: a.paragraph,
text: e.substring(0, s.start - 1)
}), !0), u.addUndoForInsert(i, c)) : h += t.length, e = e.substring((s ? s.start : 0) + t.length), c
}
function g(i, r, o, a, s) {
return a = a || t(e, n, i, !1, r, l), r.redo.push(u.buildReplaceUndo(o)), {
html: (s ? s.toHTML() : "") + o.toHTML(a.html),
offset: h + a.offset,
focus: a.focus,
blockChanged: !0,
command: r,
splits: void 0
}
}
function b(i, s, c, l) {
var f, h, m, b = File.option.indentSize,
y = p(i = i.replace("【", "[").replace("】", "]"), s, r, l);
if (r.set("type", a.list), r.set("text", ""), r.set("style", c), (h = v("", r, a.list_item)).set("checked", null != /x|X/g.exec(l.line)), i.indexOf("[") > -1 && h.set("style", o.ListType.task), c == o.ListType.ul && (File.option.prettyIndent ? r.set("pattern", i.replace(/\[[xX\s]\]\s+/, "").trim() + " ".repeat(b - 1)) : r.set("pattern", i.replace(/\[[xX\s]\]\s+/, "").trim() + " ")), c == o.ListType.ol) {
var w = i.match(/\d+/)[0].replace(/^1$/, "");
"" != w ? r.set("start", w) : r.unset("start")
}
if (i && File.option.autoPairExtendSymbol && /\*\s$/.exec(i) && (e = e.replace(/^\*/, "")), d = v(e, h, a.paragraph), (m = t(e, n, d, !1)).html = h.toHTML(m.html), f = g(null, s, r, m, y), !y) return f;
var F = (r = f.splits && f.splits[1] || r).get("before"),
k = r.get("after");
return f.splits && !f.splits[0] && o.isType(F, a.list) && F.get("style") == r.get("style") && (f.replaceCid = F.cid, f.toRemove = [r.cid], s.undo.push(u.buildReplaceUndo(F)), u.addUndoForRemove(s, r), F.appendTillEnd(r.getFirstChild()), F.getFirstChild().unset("tail"), F.getFirstChild().getLastChild().unset("tail"), r.remove(), o.isType(k, a.list) && k.get("style") == k.get("style") && (f.toRemove.push(k.cid), u.addUndoForRemove(s, k), F.appendTillEnd(k.getFirstChild()), F.getFirstChild().unset("tail"), F.getFirstChild().getLastChild().unset("tail"), k.remove()), s.redo.push(u.buildReplaceUndo(F)), f.html = F.toHTML(), f.splits[2] && (f.html += f.splits[2].toHTML())), f
}
if (File.option.strictMarkdown && (yt = File.shouldRemapPunctuation() ? /^( {0,3})[*+-][ \t\u00A0]+([\[【](x|X)[\]】]|[\[【] [\]】]) +/ : /^( {0,3})[*+-][ \t\u00A0]+(\[(x|X)\]|\[ \]) +/, wt = /^( {0,3})[*+-][ \t\u00A0]+/, Ft = /^( {0,3})\d+\.[ \t\u00A0]+/), l && void 0 === l.endId && (l.endId = l.id), l && void 0 === l.startId && (l.startId = l.id), !(s = s || !l || l.endId != r.cid)) {
var y = i.findLine(e, l.end);
if (kt().exec(y.line)) return function(t, n) {
var i = p(n.line.match(/^ *[>〉》][ \u00A0]?/)[0], t, r, n);
return r.set("type", a.blockquote), r.set("text", ""), d = v(e, r), t.redo.push(u.buildReplaceUndo(r)), g(d, t, r, void 0, i)
}(c, y);
if (f = yt.exec(y.line)) return b(f[0], c, o.ListType.ul, y);
if (f = wt.exec(y.line)) return b(f[0], c, o.ListType.ul, y);
if (f = Ft.exec(y.line)) return b(f[0], c, o.ListType.ol, y);
if (f = function(t, e) {
var n = t.get("parent");
return o.isType(t, a.paragraph) && !t.get("before") && o.isType(n, a.list_item) && n.get("style") !== o.ListType.task && n.get("parent").get("style") == o.ListType.ul && (File.shouldRemapPunctuation() ? /(^ *[\[【](x|X)[\]】]( |\t)+)|((^ *[\[【] [\]】]) +)/g : /(^ *\[(x|X)\]( |\t)+)|((^ *\[ \]) +)/g).exec(e)
}(r, e)) return function(i, a) {
var s, u, c = r.get("parent");
return p(i, a, c), c.set("style", o.ListType.task), c.set("checked", null != /x|X/g.exec(i)), r.set("text", e), (u = t(e, n, d = r, !0, a)).html = void 0, (s = g(null, a, c, u)).replaceCid = c.cid, s
}(f[0], c)
}
var w = [],
F = {
innerHtml: $t(e, n.inline, o.isType(r, a.heading), r, m, w),
offset: 0,
focus: r.cid,
blockChanged: !1,
command: c,
cursorDiff: m,
mdlike: w[0]
};
return F.html = r && r.toHTML(F.innerHtml, w[0]), F
}, Ct.reDefLink = B, Ct.reDefFootnote = I, Ct.renderHtmlWithBlockMeta = function t(e, n) {
if (o.isType(e, a.paragraph)) {
var i = [],
r = $t(e.safeGetStrAttr("text"), n.inline, !1, e, [], i);
return e.toHTML(r, i[0])
}
if (e.get("children").length) {
for (var s = e.getFirstChild(), u = []; s;) u.push(t(s, n)), s = s.get("after");
return e.toHTML(u.join(""))
}
return e.toHTML()
}, Ct.splitTableCell = rt, Ct.recoverEscape = mt, n.exports = Ct
}), $__System.registerDynamic("1c", [], !0, function(t, e, n) {
"use strict";
this || self;
var i = function(t) {
var e = "object",
n = "function",
i = "undefined",
r = ["startContainer", "startOffset", "endContainer", "endOffset", "collapsed", "commonAncestorContainer"],
o = ["setStart", "setStartBefore", "setStartAfter", "setEnd", "setEndBefore", "setEndAfter", "collapse", "selectNode", "selectNodeContents", "compareBoundaryPoints", "deleteContents", "extractContents", "cloneContents", "insertNode", "surroundContents", "cloneRange", "toString", "detach"],
a = ["boundingHeight", "boundingLeft", "boundingTop", "boundingWidth", "htmlText", "text"],
s = ["collapse", "compareEndPoints", "duplicate", "moveToElementText", "parentElement", "select", "setEndPoint", "getBoundingClientRect"];
function u(t, i) {
var r = typeof t[i];
return r == n || !(r != e || !t[i]) || "unknown" == r
}
function c(t, n) {
return !(typeof t[n] != e || !t[n])
}
function l(t, e) {
return typeof t[e] != i
}
function f(t) {
return function(e, n) {
for (var i = n.length; i--;)
if (!t(e, n[i])) return !1;
return !0
}
}
var h = f(u),
d = f(c),
m = f(l);
function v(t) {
return t && h(t, s) && m(t, a)
}
function p(t) {
return c(t, "body") ? t.body : t.getElementsByTagName("body")[0]
}
var g = {},
b = {
version: "1.3alpha.20140716",
initialized: !1,
supported: !0,
util: {
isHostMethod: u,
isHostObject: c,
isHostProperty: l,
areHostMethods: h,
areHostObjects: d,
areHostProperties: m,
isTextRange: v,
getBody: p
},
features: {},
modules: g,
config: {
alertOnFail: !0,
alertOnWarn: !1,
preferTextRange: !1
}
};
function y(t) {
c(window, "console") && u(window.console, "log") && window.console.log(t)
}
function w(t, e) {
e ? window.alert(t) : y(t)
}
function F(t) {
b.initialized = !0, b.supported = !1, w("Rangy is not supported on this page in your browser. Reason: " + t, b.config.alertOnFail)
}
b.fail = F;
b.warn = function(t) {
w("Rangy warning: " + t, b.config.alertOnWarn)
}, !{}.hasOwnProperty ? F("hasOwnProperty not supported") : b.util.extend = function(t, e, n) {
var i, r;
for (var o in e) e.hasOwnProperty(o) && (i = t[o], r = e[o], n && null !== i && "object" == typeof i && null !== r && "object" == typeof r && b.util.extend(i, r, !0), t[o] = r);
return e.hasOwnProperty("toString") && (t.toString = e.toString), t
},
function() {
var t = document.createElement("div");
t.appendChild(document.createElement("span"));
var e, n = [].slice;
try {
1 == n.call(t.childNodes, 0)[0].nodeType && (e = function(t) {
return n.call(t, 0)
})
} catch (t) {}
e || (e = function(t) {
for (var e = [], n = 0, i = t.length; n < i; ++n) e[n] = t[n];
return e
}), b.util.toArray = e
}();
var k;
u(document, "addEventListener") ? k = function(t, e, n) {
t.addEventListener(e, n, !1)
} : u(document, "attachEvent") ? k = function(t, e, n) {
t.attachEvent("on" + e, n)
} : F("Document does not have required addEventListener or attachEvent method"), b.util.addListener = k;
var x = [];
function _(t) {
return t.message || t.description || String(t)
}
function $() {
if (!b.initialized) {
var t, e = !1,
n = !1;
u(document, "createRange") && (t = document.createRange(), h(t, o) && m(t, r) && (e = !0));
var i = p(document);
if (i && "body" == i.nodeName.toLowerCase())
if (i && u(i, "createTextRange") && v(t = i.createTextRange()) && (n = !0), e || n) {
b.initialized = !0, b.features = {
implementsDomRange: e,
implementsTextRange: n
};
var a;
for (var s in g)(a = g[s]) instanceof C && a.init(a, b);
for (var c = 0, l = x.length; c < l; ++c) try {
x[c](b)
} catch (t) {
y("Rangy init listener threw an exception. Continuing. Detail: " + _(t))
}
} else F("Neither Range nor TextRange are available");
else F("No body element found")
}
}
b.init = $, b.addInitListener = function(t) {
b.initialized ? t(b) : x.push(t)
};
var E = [];
b.addCreateMissingNativeApiListener = function(t) {
E.push(t)
};
b.createMissingNativeApi = function(t) {
t = t || window, $();
for (var e = 0, n = E.length; e < n; ++e) E[e](t)
};
function C(t, e, n) {
this.name = t, this.dependencies = e, this.initialized = !1, this.supported = !1, this.initializer = n
}
C.prototype = {
init: function(t) {
for (var e, n, i = this.dependencies || [], r = 0, o = i.length; r < o; ++r) {
if (n = i[r], !((e = g[n]) && e instanceof C)) throw new Error("required module '" + n + "' not found");
if (e.init(), !e.supported) throw new Error("required module '" + n + "' not supported")
}
this.initializer(this)
},
fail: function(t) {
throw this.initialized = !0, this.supported = !1, new Error("Module '" + this.name + "' failed to load: " + t)
},
warn: function(t) {
b.warn("Module " + this.name + ": " + t)
},
deprecationNotice: function(t, e) {
b.warn("DEPRECATED: " + t + " in module " + this.name + "is deprecated. Please use " + e + " instead")
},
createError: function(t) {
return new Error("Error in Rangy " + this.name + " module: " + t)
}
};
function A(t, e, n, i) {
var r = new C(e, n, function(t) {
if (!t.initialized) {
t.initialized = !0;
try {
i(b, t), t.supported = !0
} catch (t) {
y("Module '" + e + "' failed to load: " + _(t))
}
}
});
g[e] = r
}
b.createModule = function(t) {
var e, n;
2 == arguments.length ? (e = arguments[1], n = []) : (e = arguments[2], n = arguments[1]), A(0, t, n, e)
}, b.createCoreModule = function(t, e, n) {
A(0, t, e, n)
};
function S() {}
b.RangePrototype = S, b.rangePrototype = new S;
b.selectionPrototype = new function() {};
var T = !1,
M = function(t) {
T || (T = !0, b.initialized || $())
};
if (typeof window != i) {
if (typeof document != i) return u(document, "addEventListener") && document.addEventListener("DOMContentLoaded", M, !1), k(window, "load", M), b;
F("No document found")
} else F("No window found")
}();
i.createCoreModule("DomUtil", [], function(t, e) {
var n = "undefined",
i = t.util;
i.areHostMethods(document, ["createDocumentFragment", "createElement", "createTextNode"]) || e.fail("document missing a Node creation method"), i.isHostMethod(document, "getElementsByTagName") || e.fail("document missing getElementsByTagName method");
var r = document.createElement("div");
i.areHostMethods(r, ["insertBefore", "appendChild", "cloneNode"] || !i.areHostObjects(r, ["previousSibling", "nextSibling", "childNodes", "parentNode"])) || e.fail("Incomplete Element implementation"), i.isHostProperty(r, "innerHTML") || e.fail("Element is missing innerHTML property");
var o = document.createTextNode("test");
i.areHostMethods(o, ["splitText", "deleteData", "insertData", "appendData", "cloneNode"] || !i.areHostObjects(r, ["previousSibling", "nextSibling", "childNodes", "parentNode"]) || !i.areHostProperties(o, ["data"])) || e.fail("Incomplete Text Node implementation");
var a = function(t, e) {
for (var n = t.length; n--;)
if (t[n] === e) return !0;
return !1
};
function s(t) {
for (var e = 0; t = t.previousSibling;) ++e;
return e
}
function u(t, e) {
var n, i = [];
for (n = t; n; n = n.parentNode) i.push(n);
for (n = e; n; n = n.parentNode)
if (a(i, n)) return n;
return null
}
function c(t, e, n) {
for (var i = n ? e : e.parentNode; i;) {
if (i === t) return !0;
i = i.parentNode
}
return !1
}
function l(t, e, n) {
for (var i, r = n ? t : t.parentNode; r;) {
if ((i = r.parentNode) === e) return r;
r = i
}
return null
}
function f(t) {
var e = t.nodeType;
return 3 == e || 4 == e || 8 == e
}
function h(t, e) {
var n = e.nextSibling,
i = e.parentNode;
return n ? i.insertBefore(t, n) : i.appendChild(t), t
}
function d(t) {
if (9 == t.nodeType) return t;
if (typeof t.ownerDocument != n) return t.ownerDocument;
if (typeof t.document != n) return t.document;
if (t.parentNode) return d(t.parentNode);
throw e.createError("getDocument: no document found for node")
}
function m(t) {
var i = d(t);
if (typeof i.defaultView != n) return i.defaultView;
if (typeof i.parentWindow != n) return i.parentWindow;
throw e.createError("Cannot get a window object for node")
}
function v(t) {
if (typeof t.contentDocument != n) return t.contentDocument;
if (typeof t.contentWindow != n) return t.contentWindow.document;
throw e.createError("getIframeDocument: No Document object found for iframe element")
}
function p(t) {
return t && i.isHostMethod(t, "setTimeout") && i.isHostObject(t, "document")
}
var g = !1;
function b(t) {
try {
return t.parentNode, !1
} catch (t) {
return !0
}
}! function() {
var e = document.createElement("b");
e.innerHTML = "1";
var n = e.firstChild;
e.innerHTML = "<br>", g = b(n), t.features.crashyTextNodes = g
}();
function y(t) {
if (!t) return "[No node]";
if (g && b(t)) return "[Broken node]";
if (f(t)) return '"' + t.data + '"';
if (1 == t.nodeType) {
var e = t.id ? ' id="' + t.id + '"' : "";
return "<" + t.nodeName + e + ">[index:" + s(t) + ",length:" + t.childNodes.length + "][" + (t.innerHTML || "[innerHTML not supported]").slice(0, 25) + "]"
}
return t.nodeName
}
var w;
typeof window.getComputedStyle != n ? w = function(t, e) {
return m(t).getComputedStyle(t, null)[e]
} : typeof document.documentElement.currentStyle != n ? w = function(t, e) {
return t.currentStyle[e]
} : e.fail("No means of obtaining computed style properties found");
function F(t) {
this.root = t, this._next = t
}
F.prototype = {
_current: null,
hasNext: function() {
return !!this._next
},
next: function() {
var t, e, n = this._current = this._next;
if (this._current)
if (t = n.firstChild) this._next = t;
else {
for (e = null; n !== this.root && !(e = n.nextSibling);) n = n.parentNode;
this._next = e
}
return this._current
},
detach: function() {
this._current = this._next = this.root = null
}
};
function k(t, e) {
this.node = t, this.offset = e
}
k.prototype = {
equals: function(t) {
return !!t && this.node === t.node && this.offset == t.offset
},
inspect: function() {
return "[DomPosition(" + y(this.node) + ":" + this.offset + ")]"
},
toString: function() {
return this.inspect()
}
};
function x(t) {
this.code = this[t], this.codeName = t, this.message = "DOMException: " + this.codeName
}
x.prototype = {
INDEX_SIZE_ERR: 1,
HIERARCHY_REQUEST_ERR: 3,
WRONG_DOCUMENT_ERR: 4,
NO_MODIFICATION_ALLOWED_ERR: 7,
NOT_FOUND_ERR: 8,
NOT_SUPPORTED_ERR: 9,
INVALID_STATE_ERR: 11,
INVALID_NODE_TYPE_ERR: 24
}, x.prototype.toString = function() {
return this.message
}, t.dom = {
arrayContains: a,
isHtmlNamespace: function(t) {
var e;
return typeof t.namespaceURI == n || null === (e = t.namespaceURI) || "http://www.w3.org/1999/xhtml" == e
},
parentElement: function(t) {
var e = t.parentNode;
return 1 == e.nodeType ? e : null
},
getNodeIndex: s,
getNodeLength: function(t) {
switch (t.nodeType) {
case 7:
case 10:
return 0;
case 3:
case 8:
return t.length;
default:
return t.childNodes.length
}
},
getCommonAncestor: u,
isAncestorOf: c,
isOrIsAncestorOf: function(t, e) {
return c(t, e, !0)
},
getClosestAncestorIn: l,
isCharacterDataNode: f,
isTextOrCommentNode: function(t) {
if (!t) return !1;
var e = t.nodeType;
return 3 == e || 8 == e
},
insertAfter: h,
splitDataNode: function(t, e, n) {
var i = t.cloneNode(!1);
if (i.deleteData(0, e), t.deleteData(e, t.length - e), h(i, t), n)
for (var r, o = 0; r = n[o++];) r.node == t && r.offset > e ? (r.node = i, r.offset -= e) : r.node == t.parentNode && r.offset > s(t) && ++r.offset;
return i
},
getDocument: d,
getWindow: m,
getIframeWindow: function(t) {
if (typeof t.contentWindow != n) return t.contentWindow;
if (typeof t.contentDocument != n) return t.contentDocument.defaultView;
throw e.createError("getIframeWindow: No Window object found for iframe element")
},
getIframeDocument: v,
getBody: i.getBody,
isWindow: p,
getContentDocument: function(t, e, n) {
var r;
if (t ? i.isHostProperty(t, "nodeType") ? r = 1 == t.nodeType && "iframe" == t.tagName.toLowerCase() ? v(t) : d(t) : p(t) && (r = t.document) : r = document, !r) throw e.createError(n + "(): Parameter must be a Window object or DOM node");
return r
},
getRootContainer: function(t) {
for (var e; e = t.parentNode;) t = e;
return t
},
comparePoints: function(t, n, i, r) {
var o, a, c, f, h;
if (t == i) return n === r ? 0 : n < r ? -1 : 1;
if (o = l(i, t, !0)) return n <= s(o) ? -1 : 1;
if (o = l(t, i, !0)) return s(o) < r ? -1 : 1;
if (!(a = u(t, i))) throw new Error("comparePoints error: nodes have no common ancestor");
if ((c = t === a ? a : l(t, a, !0)) === (f = i === a ? a : l(i, a, !0))) throw e.createError("comparePoints got to case 4 and childA and childB are the same!");
for (h = a.firstChild; h;) {
if (h === c) return -1;
if (h === f) return 1;
h = h.nextSibling
}
},
isBrokenNode: b,
inspectNode: y,
getComputedStyleProperty: w,
fragmentFromNodeChildren: function(t) {
for (var e, n = d(t).createDocumentFragment(); e = t.firstChild;) n.appendChild(e);
return n
},
createIterator: function(t) {
return new F(t)
},
DomPosition: k
}, t.DOMException = x
}), i.createCoreModule("DomRange", ["DomUtil"], function(t, e) {
var n = t.dom,
i = t.util,
r = n.DomPosition,
o = t.DOMException,
a = n.isCharacterDataNode,
s = n.getNodeIndex,
u = n.isOrIsAncestorOf,
c = n.getDocument,
l = n.comparePoints,
f = n.splitDataNode,
h = n.getClosestAncestorIn,
d = n.getNodeLength,
m = n.arrayContains,
v = n.getRootContainer,
p = t.features.crashyTextNodes;
function g(t, e) {
return 3 != t.nodeType && (u(t, e.startContainer) || u(t, e.endContainer))
}
function b(t) {
return t.document || c(t.startContainer)
}
function y(t) {
return new r(t.parentNode, s(t))
}
function w(t) {
return new r(t.parentNode, s(t) + 1)
}
function F(t, e, i) {
var r = 11 == t.nodeType ? t.firstChild : t;
return a(e) ? i == e.length ? n.insertAfter(t, e) : e.parentNode.insertBefore(t, 0 == i ? e : f(e, i)) : i >= e.childNodes.length ? e.appendChild(t) : e.insertBefore(t, e.childNodes[i]), r
}
function k(t, e, n) {
if (W(t), W(e), b(e) != b(t)) throw new o("WRONG_DOCUMENT_ERR");
var i = l(t.startContainer, t.startOffset, e.endContainer, e.endOffset),
r = l(t.endContainer, t.endOffset, e.startContainer, e.startOffset);
return n ? i <= 0 && r >= 0 : i < 0 && r > 0
}
function x(t, e, i) {
var r, o;
i = i || {
stop: !1
};
for (var a, s; a = t.next();)
if (t.isPartiallySelectedSubtree()) {
if (!1 === e(a)) return void(i.stop = !0);
if (x(s = t.getSubtreeIterator(), e, i), s.detach(), i.stop) return
} else
for (r = n.createIterator(a); o = r.next();)
if (!1 === e(o)) return void(i.stop = !0)
}
function _(t) {
for (var e; t.next();) t.isPartiallySelectedSubtree() ? (_(e = t.getSubtreeIterator()), e.detach()) : t.remove()
}
function $(t) {
for (var e, n, i = b(t.range).createDocumentFragment(); e = t.next();) {
if (t.isPartiallySelectedSubtree() ? (e = e.cloneNode(!1), n = t.getSubtreeIterator(), e.appendChild($(n)), n.detach()) : t.remove(), 10 == e.nodeType) throw new o("HIERARCHY_REQUEST_ERR");
i.appendChild(e)
}
return i
}
function E(t) {
return "[" + (void 0 === t.getName ? "Range" : t.getName()) + "(" + n.inspectNode(t.startContainer) + ":" + t.startOffset + ", " + n.inspectNode(t.endContainer) + ":" + t.endOffset + ")]"
}
function C(t, e) {
if (this.range = t, this.clonePartiallySelectedTextNodes = e, !t.collapsed) {
this.sc = t.startContainer, this.so = t.startOffset, this.ec = t.endContainer, this.eo = t.endOffset;
var n = t.commonAncestorContainer;
this.sc === this.ec && a(this.sc) ? (this.isSingleCharacterDataNode = !0, this._first = this._last = this._next = this.sc) : (this._first = this._next = this.sc !== n || a(this.sc) ? h(this.sc, n, !0) : this.sc.childNodes[this.so], this._last = this.ec !== n || a(this.ec) ? h(this.ec, n, !0) : this.ec.childNodes[this.eo - 1])
}
}
C.prototype = {
_current: null,
_next: null,
_first: null,
_last: null,
isSingleCharacterDataNode: !1,
reset: function() {
this._current = null, this._next = this._first
},
hasNext: function() {
return !!this._next
},
next: function() {
var t = this._current = this._next;
return t && (this._next = t !== this._last ? t.nextSibling : null, a(t) && this.clonePartiallySelectedTextNodes && (t === this.ec && (t = t.cloneNode(!0)).deleteData(this.eo, t.length - this.eo), this._current === this.sc && (t = t.cloneNode(!0)).deleteData(0, this.so))), t
},
remove: function() {
var t, e, n = this._current;
!a(n) || n !== this.sc && n !== this.ec ? n.parentNode && n.parentNode.removeChild(n) : (t = n === this.sc ? this.so : 0) != (e = n === this.ec ? this.eo : n.length) && n.deleteData(t, e - t)
},
isPartiallySelectedSubtree: function() {
return g(this._current, this.range)
},
getSubtreeIterator: function() {
var t;
if (this.isSingleCharacterDataNode)(t = this.range.cloneRange()).collapse(!1);
else {
t = new ft(b(this.range));
var e = this._current,
n = e,
i = 0,
r = e,
o = d(e);
u(e, this.sc) && (n = this.sc, i = this.so), u(e, this.ec) && (r = this.ec, o = this.eo), lt(t, n, i, r, o)
}
return new C(t, this.clonePartiallySelectedTextNodes)
},
detach: function() {
this.range = this._current = this._next = this._first = this._last = this.sc = this.so = this.ec = this.eo = null
}
};
var A = [1, 3, 4, 5, 7, 8, 10],
S = [2, 9, 11],
T = [1, 3, 4, 5, 7, 8, 10, 11],
M = [1, 3, 4, 5, 7, 8];
function D(t) {
return function(e, n) {
for (var i, r = n ? e : e.parentNode; r;) {
if (i = r.nodeType, m(t, i)) return r;
r = r.parentNode
}
return null
}
}
var L = D([9, 11]),
R = D([5, 6, 10, 12]),
B = D([6, 10, 12]);
function I(t, e) {
if (B(t, e)) throw new o("INVALID_NODE_TYPE_ERR")
}
function N(t, e) {
if (!m(e, t.nodeType)) throw new o("INVALID_NODE_TYPE_ERR")
}
function O(t, e) {
if (e < 0 || e > (a(t) ? t.length : t.childNodes.length)) throw new o("INDEX_SIZE_ERR")
}
function j(t, e) {
if (L(t, !0) !== L(e, !0)) throw new o("WRONG_DOCUMENT_ERR")
}
function P(t) {
if (R(t, !0)) throw new o("NO_MODIFICATION_ALLOWED_ERR")
}
function q(t, e) {
if (!t) throw new o(e)
}
function U(t) {
return p && n.isBrokenNode(t) || !m(S, t.nodeType) && !L(t, !0)
}
function z(t, e) {
return e <= (a(t) ? t.length : t.childNodes.length)
}
function H(t) {
return !!t.startContainer && !!t.endContainer && !U(t.startContainer) && !U(t.endContainer) && z(t.startContainer, t.startOffset) && z(t.endContainer, t.endOffset)
}
function W(t) {
if (!H(t)) throw new Error("Range error: Range is no longer valid after DOM mutation (" + t.inspect() + ")")
}
var J = document.createElement("style"),
Y = !1;
try {
J.innerHTML = "<b>x</b>", Y = 3 == J.firstChild.nodeType
} catch (t) {}
t.features.htmlParsingConforms = Y;
var G = Y ? function(t) {
var e = this.startContainer,
i = c(e);
if (!e) throw new o("INVALID_STATE_ERR");
var r = null;
return 1 == e.nodeType ? r = e : a(e) && (r = n.parentElement(e)), (r = null === r || "HTML" == r.nodeName && n.isHtmlNamespace(c(r).documentElement) && n.isHtmlNamespace(r) ? i.createElement("body") : r.cloneNode(!1)).innerHTML = t, n.fragmentFromNodeChildren(r)
} : function(t) {
var e = b(this).createElement("body");
return e.innerHTML = t, n.fragmentFromNodeChildren(e)
};
function K(t, e) {
W(t);
var n = t.startContainer,
i = t.startOffset,
r = t.endContainer,
o = t.endOffset,
u = n === r;
a(r) && o > 0 && o < r.length && f(r, o, e), a(n) && i > 0 && i < n.length && (n = f(n, i, e), u ? (o -= i, r = n) : r == n.parentNode && o >= s(n) && o++, i = 0), t.setStartAndEnd(n, i, r, o)
}
var V = ["startContainer", "startOffset", "endContainer", "endOffset", "collapsed", "commonAncestorContainer"],
Q = 0,
X = 1,
Z = 2,
tt = 3,
et = 0,
nt = 1,
it = 2,
rt = 3;
i.extend(t.rangePrototype, {
compareBoundaryPoints: function(t, e) {
W(this), j(this.startContainer, e.startContainer);
var n, i, r, o, a = t == tt || t == Q ? "start" : "end",
s = t == X || t == Q ? "start" : "end";
return n = this[a + "Container"], i = this[a + "Offset"], r = e[s + "Container"], o = e[s + "Offset"], l(n, i, r, o)
},
insertNode: function(t) {
if (W(this), N(t, T), P(this.startContainer), u(t, this.startContainer)) throw new o("HIERARCHY_REQUEST_ERR");
var e = F(t, this.startContainer, this.startOffset);
this.setStartBefore(e)
},
cloneContents: function() {
W(this);
var t, e;
if (this.collapsed) return b(this).createDocumentFragment();
if (this.startContainer === this.endContainer && a(this.startContainer)) return (t = this.startContainer.cloneNode(!0)).data = t.data.slice(this.startOffset, this.endOffset), (e = b(this).createDocumentFragment()).appendChild(t), e;
var n = new C(this, !0);
return t = function t(e) {
for (var n, i, r, a = b(e.range).createDocumentFragment(); i = e.next();) {
if (n = e.isPartiallySelectedSubtree(), i = i.cloneNode(!n), n && (r = e.getSubtreeIterator(), i.appendChild(t(r)), r.detach()), 10 == i.nodeType) throw new o("HIERARCHY_REQUEST_ERR");
a.appendChild(i)
}
return a
}(n), n.detach(), t
},
canSurroundContents: function() {
W(this), P(this.startContainer), P(this.endContainer);
var t = new C(this, !0),
e = t._first && g(t._first, this) || t._last && g(t._last, this);
return t.detach(), !e
},
surroundContents: function(t) {
if (N(t, M), !this.canSurroundContents()) throw new o("INVALID_STATE_ERR");
var e = this.extractContents();
if (t.hasChildNodes())
for (; t.lastChild;) t.removeChild(t.lastChild);
F(t, this.startContainer, this.startOffset), t.appendChild(e), this.selectNode(t)
},
cloneRange: function() {
W(this);
for (var t, e = new ft(b(this)), n = V.length; n--;) e[t = V[n]] = this[t];
return e.isBackward = this.isBackward, e
},
toString: function() {
W(this);
var t = this.startContainer;
if (t === this.endContainer && a(t)) return 3 == t.nodeType || 4 == t.nodeType ? t.data.slice(this.startOffset, this.endOffset) : "";
var e = [],
n = new C(this, !0);
return x(n, function(t) {
3 != t.nodeType && 4 != t.nodeType || e.push(t.data)
}), n.detach(), e.join("")
},
compareNode: function(t) {
W(this);
var e = t.parentNode,
n = s(t);
if (!e) throw new o("NOT_FOUND_ERR");
var i = this.comparePoint(e, n),
r = this.comparePoint(e, n + 1);
return i < 0 ? r > 0 ? it : et : r > 0 ? nt : rt
},
comparePoint: function(t, e) {
return W(this), q(t, "HIERARCHY_REQUEST_ERR"), j(t, this.startContainer), l(t, e, this.startContainer, this.startOffset) < 0 ? -1 : l(t, e, this.endContainer, this.endOffset) > 0 ? 1 : 0
},
createContextualFragment: G,
toHtml: function() {
W(this);
var t = this.commonAncestorContainer.parentNode.cloneNode(!1);
return t.appendChild(this.cloneContents()), t.innerHTML
},
intersectsNode: function(t, e) {
if (W(this), q(t, "NOT_FOUND_ERR"), c(t) !== b(this)) return !1;
var n = t.parentNode,
i = s(t);
q(n, "NOT_FOUND_ERR");
var r = l(n, i, this.endContainer, this.endOffset),
o = l(n, i + 1, this.startContainer, this.startOffset);
return e ? r <= 0 && o >= 0 : r < 0 && o > 0
},
isPointInRange: function(t, e) {
return W(this), q(t, "HIERARCHY_REQUEST_ERR"), j(t, this.startContainer), l(t, e, this.startContainer, this.startOffset) >= 0 && l(t, e, this.endContainer, this.endOffset) <= 0
},
intersectsRange: function(t) {
return k(this, t, !1)
},
intersectsOrTouchesRange: function(t) {
return k(this, t, !0)
},
intersection: function(t) {
if (this.intersectsRange(t)) {
var e = l(this.startContainer, this.startOffset, t.startContainer, t.startOffset),
n = l(this.endContainer, this.endOffset, t.endContainer, t.endOffset),
i = this.cloneRange();
return -1 == e && i.setStart(t.startContainer, t.startOffset), 1 == n && i.setEnd(t.endContainer, t.endOffset), i
}
return null
},
union: function(t) {
if (this.intersectsOrTouchesRange(t)) {
var e = this.cloneRange();
return -1 == l(t.startContainer, t.startOffset, this.startContainer, this.startOffset) && e.setStart(t.startContainer, t.startOffset), 1 == l(t.endContainer, t.endOffset, this.endContainer, this.endOffset) && e.setEnd(t.endContainer, t.endOffset), e
}
throw new o("Ranges do not intersect")
},
containsNode: function(t, e) {
return e ? this.intersectsNode(t, !1) : this.compareNode(t) == rt
},
containsNodeContents: function(t) {
return this.comparePoint(t, 0) >= 0 && this.comparePoint(t, d(t)) <= 0
},
containsRange: function(t) {
var e = this.intersection(t);
return null !== e && t.equals(e)
},
containsNodeText: function(t) {
var e = this.cloneRange();
e.selectNode(t);
var n = e.getNodes([3]);
if (n.length > 0) {
e.setStart(n[0], 0);
var i = n.pop();
return e.setEnd(i, i.length), this.containsRange(e)
}
return this.containsNodeContents(t)
},
getNodes: function(t, e) {
return W(this),
function(t, e, n) {
var i, r = !(!e || !e.length),
o = !!n;
r && (i = new RegExp("^(" + e.join("|") + ")$"));
var s = [];
return x(new C(t, !1), function(e) {
if ((!r || i.test(e.nodeType)) && (!o || n(e))) {
var u = t.startContainer;
if (e != u || !a(u) || t.startOffset != u.length) {
var c = t.endContainer;
e == c && a(c) && 0 == t.endOffset || s.push(e)
}
}
}), s
}(this, t, e)
},
getDocument: function() {
return b(this)
},
collapseBefore: function(t) {
this.setEndBefore(t), this.collapse(!1)
},
collapseAfter: function(t) {
this.setStartAfter(t), this.collapse(!0)
},
getBookmark: function(e) {
if (!e) return {};
function i(t) {
var e = t.cloneContents();
if (e.querySelector("text, ruby")) {
for (var n = e.querySelectorAll("svg, ruby"), i = 0; i < n.length; i++) n[i].parentElement.removeChild(n[i]);
return e.textContent.length
}
return t.toString().length
}
var r = b(this),
o = t.createRange(r);
e = e || n.getBody(r), o.selectNodeContents(e);
var a = this.intersection(o),
s = e.querySelectorAll("text, ruby").length,
u = 0,
c = 0;
return a && (o.setEnd(a.startContainer, a.startOffset), c = (u = s ? i(o) : o.toString().length) + (s ? i(a) : a.toString().length)), {
start: u,
end: c,
containerNode: e
}
},
moveToBookmark: function(t) {
var e = t.containerNode,
n = 0;
this.setStart(e, 0), this.collapse(!0);
for (var i, r, o, a, s = [e], u = !1, c = !1; !c && (i = s.pop());)
if (3 == i.nodeType) r = n + i.length, !u && t.start >= n && t.start <= r && (this.setStart(i, t.start - n), u = !0), u && t.end >= n && t.end <= r && (this.setEnd(i, t.end - n), c = !0), n = r;
else if (!/^(text|RUBY)$/i.exec(i.tagName || ""))
for (o = (a = i.childNodes).length; o--;) s.push(a[o])
},
getName: function() {
return "DomRange"
},
equals: function(t) {
return ft.rangesEqual(this, t)
},
isValid: function() {
return H(this)
},
inspect: function() {
return E(this)
},
detach: function() {}
});
function ot(t) {
t.START_TO_START = Q, t.START_TO_END = X, t.END_TO_END = Z, t.END_TO_START = tt, t.NODE_BEFORE = et, t.NODE_AFTER = nt, t.NODE_BEFORE_AND_AFTER = it, t.NODE_INSIDE = rt
}
function at(t) {
ot(t), ot(t.prototype)
}
function st(t, e) {
return function() {
W(this);
var n, i = this.startContainer,
r = this.startOffset,
o = this.commonAncestorContainer,
a = new C(this, !0);
i !== o && (i = (n = w(h(i, o, !0))).node, r = n.offset), x(a, P), a.reset();
var s = t(a);
return a.detach(), e(this, i, r, i, r), s
}
}
function ut(e, n) {
function r(t, e) {
return function(n) {
N(n, A), N(v(n), S);
var i = (t ? y : w)(n);
(e ? o : u)(this, i.node, i.offset)
}
}
function o(t, e, i) {
var r = t.endContainer,
o = t.endOffset;
e === t.startContainer && i === t.startOffset || (v(e) == v(r) && 1 != l(e, i, r, o) || (r = e, o = i), n(t, e, i, r, o))
}
function u(t, e, i) {
var r = t.startContainer,
o = t.startOffset;
e === t.endContainer && i === t.endOffset || (v(e) == v(r) && -1 != l(e, i, r, o) || (r = e, o = i), n(t, r, o, e, i))
}
var c = function() {};
c.prototype = t.rangePrototype, e.prototype = new c, i.extend(e.prototype, {
setStart: function(t, e) {
I(t, !0), O(t, e), o(this, t, e)
},
setEnd: function(t, e) {
I(t, !0), O(t, e), u(this, t, e)
},
setStartAndEnd: function() {
var t = arguments,
e = t[0],
i = t[1],
r = e,
o = i;
switch (t.length) {
case 3:
o = t[2];
break;
case 4:
r = t[2], o = t[3]
}
n(this, e, i, r, o)
},
setBoundary: function(t, e, n) {
this["set" + (n ? "Start" : "End")](t, e)
},
setStartBefore: r(!0, !0),
setStartAfter: r(!1, !0),
setEndBefore: r(!0, !1),
setEndAfter: r(!1, !1),
collapse: function(t) {
W(this), t ? n(this, this.startContainer, this.startOffset, this.startContainer, this.startOffset) : n(this, this.endContainer, this.endOffset, this.endContainer, this.endOffset)
},
selectNodeContents: function(t) {
I(t, !0), n(this, t, 0, t, d(t))
},
selectNode: function(t) {
I(t, !1), N(t, A);
var e = y(t),
i = w(t);
n(this, e.node, e.offset, i.node, i.offset)
},
extractContents: st($, n),
deleteContents: st(_, n),
canSurroundContents: function() {
W(this), P(this.startContainer), P(this.endContainer);
var t = new C(this, !0),
e = t._first && g(t._first, this) || t._last && g(t._last, this);
return t.detach(), !e
},
splitBoundaries: function() {
K(this)
},
splitBoundariesPreservingPositions: function(t) {
K(this, t)
},
normalizeBoundaries: function() {
W(this);
var t = this.startContainer,
e = this.startOffset,
i = this.endContainer,
r = this.endOffset,
o = function(t) {
var e = t.nextSibling;
e && e.nodeType == t.nodeType && (i = t, r = t.length, t.appendData(e.data), e.parentNode.removeChild(e))
},
u = function(n) {
var o = n.previousSibling;
if (o && o.nodeType == n.nodeType) {
t = n;
var a = n.length;
if (e = o.length, n.insertData(0, o.data), o.parentNode.removeChild(o), t == i) r += e, i = t;
else if (i == n.parentNode) {
var u = s(n);
r == u ? (i = n, r = a) : r > u && r--
}
}
},
c = !0;
if (a(i)) i.length == r && o(i);
else {
if (r > 0) {
var l = i.childNodes[r - 1];
l && a(l) && o(l)
}
c = !this.collapsed
}
if (c) {
if (a(t)) 0 == e && u(t);
else if (e < t.childNodes.length) {
var f = t.childNodes[e];
f && a(f) && u(f)
}
} else t = i, e = r;
n(this, t, e, i, r)
},
collapseToPoint: function(t, e) {
I(t, !0), O(t, e), this.setStartAndEnd(t, e)
}
}), at(e)
}
function ct(t) {
t.collapsed = t.startContainer === t.endContainer && t.startOffset === t.endOffset, t.commonAncestorContainer = t.collapsed ? t.startContainer : n.getCommonAncestor(t.startContainer, t.endContainer)
}
function lt(t, e, i, r, o) {
t.startContainer = e, t.startOffset = i, t.endContainer = r, t.endOffset = o, t.document = n.getDocument(e), ct(t)
}
function ft(t) {
this.startContainer = t, this.startOffset = 0, this.endContainer = t, this.endOffset = 0, this.document = t, ct(this)
}
ut(ft, lt), i.extend(ft, {
rangeProperties: V,
RangeIterator: C,
copyComparisonConstants: at,
createPrototypeRange: ut,
inspect: E,
getRangeDocument: b,
rangesEqual: function(t, e) {
return t.startContainer === e.startContainer && t.startOffset === e.startOffset && t.endContainer === e.endContainer && t.endOffset === e.endOffset
}
}), t.DomRange = ft
}), i.createCoreModule("WrappedRange", ["DomRange"], function(t, e) {
var n, i, r = t.dom,
o = t.util,
a = r.DomPosition,
s = t.DomRange,
u = r.getBody,
c = r.getContentDocument,
l = r.isCharacterDataNode;
if (t.features.implementsDomRange && function() {
var i, a = s.rangeProperties;
function l(t) {
for (var e, n = a.length; n--;) t[e = a[n]] = t.nativeRange[e];
t.collapsed = t.startContainer === t.endContainer && t.startOffset === t.endOffset
}
var f;
n = function(t) {
if (!t) throw e.createError("WrappedRange: Range must be specified");
this.nativeRange = t, l(this)
}, s.createPrototypeRange(n, function(t, e, n, i, r) {
var o = t.startContainer !== e || t.startOffset != n,
a = t.endContainer !== i || t.endOffset != r,
s = !t.equals(t.nativeRange);
(o || a || s) && (t.setEnd(i, r), t.setStart(e, n))
}), (i = n.prototype).selectNode = function(t) {
this.nativeRange.selectNode(t), l(this)
}, i.cloneContents = function() {
return this.nativeRange.cloneContents()
}, i.surroundContents = function(t) {
this.nativeRange.surroundContents(t), l(this)
}, i.collapse = function(t) {
this.nativeRange.collapse(t), l(this)
}, i.cloneRange = function() {
var t = new n(this.nativeRange.cloneRange());
return t.isBackward = this.isBackward, t
}, i.refresh = function() {
l(this)
}, i.toString = function() {
return this.nativeRange.toString()
};
var h = document.createTextNode("test");
u(document).appendChild(h);
var d = document.createRange();
d.setStart(h, 0), d.setEnd(h, 0);
try {
d.setStart(h, 1), i.setStart = function(t, e) {
this.nativeRange.setStart(t, e), l(this)
}, i.setEnd = function(t, e) {
this.nativeRange.setEnd(t, e), l(this)
}, f = function(t) {
return function(e) {
this.nativeRange[t](e), l(this)
}
}
} catch (t) {
i.setStart = function(t, e) {
try {
this.nativeRange.setStart(t, e)
} catch (n) {
this.nativeRange.setEnd(t, e), this.nativeRange.setStart(t, e)
}
l(this)
}, i.setEnd = function(t, e) {
try {
this.nativeRange.setEnd(t, e)
} catch (n) {
this.nativeRange.setStart(t, e), this.nativeRange.setEnd(t, e)
}
l(this)
}, f = function(t, e) {
return function(n) {
try {
this.nativeRange[t](n)
} catch (i) {
this.nativeRange[e](n), this.nativeRange[t](n)
}
l(this)
}
}
}
i.setStartBefore = f("setStartBefore", "setEndBefore"), i.setStartAfter = f("setStartAfter", "setEndAfter"), i.setEndBefore = f("setEndBefore", "setStartBefore"), i.setEndAfter = f("setEndAfter", "setStartAfter"), i.selectNodeContents = function(t) {
this.setStartAndEnd(t, 0, r.getNodeLength(t))
}, d.selectNodeContents(h), d.setEnd(h, 3);
var m = document.createRange();
m.selectNodeContents(h), m.setEnd(h, 4), m.setStart(h, 2), -1 == d.compareBoundaryPoints(d.START_TO_END, m) && 1 == d.compareBoundaryPoints(d.END_TO_START, m) ? i.compareBoundaryPoints = function(t, e) {
return t == (e = e.nativeRange || e).START_TO_END ? t = e.END_TO_START : t == e.END_TO_START && (t = e.START_TO_END), this.nativeRange.compareBoundaryPoints(t, e)
} : i.compareBoundaryPoints = function(t, e) {
return this.nativeRange.compareBoundaryPoints(t, e.nativeRange || e)
};
var v = document.createElement("div");
v.innerHTML = "123";
var p = v.firstChild,
g = u(document);
g.appendChild(v), d.setStart(p, 1), d.setEnd(p, 2), d.deleteContents(), "13" == p.data && (i.deleteContents = function() {
this.nativeRange.deleteContents(), l(this)
}, i.extractContents = function() {
var t = this.nativeRange.extractContents();
return l(this), t
}), g.removeChild(v), g = null, o.isHostMethod(d, "createContextualFragment") && (i.createContextualFragment = function(t) {
return this.nativeRange.createContextualFragment(t)
}), u(document).removeChild(h), i.getName = function() {
return "WrappedRange"
}, t.WrappedRange = n, t.createNativeRange = function(t) {
return (t = c(t, e, "createNativeRange")).createRange()
}
}(), t.features.implementsTextRange) {
var f = function(t, e, n, i, o) {
var s = t.duplicate();
s.collapse(n);
var u = s.parentElement();
if (r.isOrIsAncestorOf(e, u) || (u = e), !u.canHaveHTML) {
var c = new a(u.parentNode, r.getNodeIndex(u));
return {
boundaryPosition: c,
nodeInfo: {
nodeIndex: c.offset,
containerElement: c.node
}
}
}
var f = r.getDocument(u).createElement("span");
f.parentNode && f.parentNode.removeChild(f);
for (var h, d, m, v, p, g = n ? "StartToStart" : "StartToEnd", b = o && o.containerElement == u ? o.nodeIndex : 0, y = u.childNodes.length, w = y, F = w; F == y ? u.appendChild(f) : u.insertBefore(f, u.childNodes[F]), s.moveToElementText(f), 0 != (h = s.compareEndPoints(g, t)) && b != w;) {
if (-1 == h) {
if (w == b + 1) break;
b = F
} else w = w == b + 1 ? b : F;
F = Math.floor((b + w) / 2), u.removeChild(f)
}
if (p = f.nextSibling, -1 == h && p && l(p)) {
s.setEndPoint(n ? "EndToStart" : "EndToEnd", t);
var k;
if (/[\r\n]/.test(p.data)) {
var x = s.duplicate(),
_ = x.text.replace(/\r\n/g, "\r").length;
for (k = x.moveStart("character", _); - 1 == (h = x.compareEndPoints("StartToEnd", x));) k++, x.moveStart("character", 1)
} else k = s.text.length;
v = new a(p, k)
} else d = (i || !n) && f.previousSibling, v = (m = (i || n) && f.nextSibling) && l(m) ? new a(m, 0) : d && l(d) ? new a(d, d.data.length) : new a(u, r.getNodeIndex(f));
return f.parentNode.removeChild(f), {
boundaryPosition: v,
nodeInfo: {
nodeIndex: F,
containerElement: u
}
}
},
h = function(t, e) {
var n, i, o, a, s = t.offset,
c = r.getDocument(t.node),
f = u(c).createTextRange(),
h = l(t.node);
return h ? i = (n = t.node).parentNode : (n = s < (a = t.node.childNodes).length ? a[s] : null, i = t.node), (o = c.createElement("span")).innerHTML = "&#feff;", n ? i.insertBefore(o, n) : i.appendChild(o), f.moveToElementText(o), f.collapse(!e), i.removeChild(o), h && f[e ? "moveStart" : "moveEnd"]("character", s), f
};
if ((i = function(t) {
this.textRange = t, this.refresh()
}).prototype = new s(document), i.prototype.refresh = function() {
var t, e, n, i = function(t) {
var e = t.parentElement(),
n = t.duplicate();
n.collapse(!0);
var i = n.parentElement();
(n = t.duplicate()).collapse(!1);
var o = n.parentElement(),
a = i == o ? i : r.getCommonAncestor(i, o);
return a == e ? a : r.getCommonAncestor(e, a)
}(this.textRange);
0 == (o = this.textRange).compareEndPoints("StartToEnd", o) ? e = t = f(this.textRange, i, !0, !0).boundaryPosition : (t = (n = f(this.textRange, i, !0, !1)).boundaryPosition, e = f(this.textRange, i, !1, !1, n.nodeInfo).boundaryPosition);
var o;
this.setStart(t.node, t.offset), this.setEnd(e.node, e.offset)
}, i.prototype.getName = function() {
return "WrappedTextRange"
}, s.copyComparisonConstants(i), i.rangeToTextRange = function(t) {
if (t.collapsed) return h(new a(t.startContainer, t.startOffset), !0);
var e = h(new a(t.startContainer, t.startOffset), !0),
n = h(new a(t.endContainer, t.endOffset), !1),
i = u(s.getRangeDocument(t)).createTextRange();
return i.setEndPoint("StartToStart", e), i.setEndPoint("EndToEnd", n), i
}, t.WrappedTextRange = i, !t.features.implementsDomRange || t.config.preferTextRange) {
var d = function() {
return this
}();
void 0 === d.Range && (d.Range = i), t.createNativeRange = function(t) {
return t = c(t, e, "createNativeRange"), u(t).createTextRange()
}, t.WrappedRange = i
}
}
t.createRange = function(n) {
return n = c(n, e, "createRange"), new t.WrappedRange(t.createNativeRange(n))
}, t.createRangyRange = function(t) {
return t = c(t, e, "createRangyRange"), new s(t)
}, t.createIframeRange = function(n) {
return e.deprecationNotice("createIframeRange()", "createRange(iframeEl)"), t.createRange(n)
}, t.createIframeRangyRange = function(n) {
return e.deprecationNotice("createIframeRangyRange()", "createRangyRange(iframeEl)"), t.createRangyRange(n)
}, t.addCreateMissingNativeApiListener(function(e) {
var n = e.document;
void 0 === n.createRange && (n.createRange = function() {
return t.createRange(n)
}), n = e = null
})
}), i.createCoreModule("WrappedSelection", ["DomRange", "WrappedRange"], function(t, e) {
t.config.checkSelectionRanges = !0;
var n, i, r = t.dom,
o = t.util,
a = o.isHostMethod,
s = t.DomRange,
u = t.WrappedRange,
c = t.DOMException,
l = r.DomPosition,
f = t.features,
h = "Control",
d = r.getDocument,
m = r.getBody,
v = s.rangesEqual;
function p(t) {
return "string" == typeof t ? /^backward(s)?$/i.test(t) : !!t
}
function g(t, n) {
if (t) {
if (r.isWindow(t)) return t;
if (t instanceof q) return t.win;
var i = r.getContentDocument(t, e, n);
return r.getWindow(i)
}
return window
}
function b(t) {
return g(t, "getDocSelection").document.selection
}
function y(t) {
var e = !1;
return t.anchorNode && (e = 1 == r.comparePoints(t.anchorNode, t.anchorOffset, t.focusNode, t.focusOffset)), e
}
var w = a(window, "getSelection"),
F = o.isHostObject(document, "selection");
f.implementsWinGetSelection = w, f.implementsDocSelection = F;
var k = F && (!w || t.config.preferTextRange);
k ? (n = b, t.isSelectionValid = function(t) {
var e = g(t, "isSelectionValid").document,
n = e.selection;
return "None" != n.type || d(n.createRange().parentElement()) == e
}) : w ? (n = function(t) {
return g(t, "getWinSelection").getSelection()
}, t.isSelectionValid = function() {
return !0
}) : e.fail("Neither document.selection or window.getSelection() detected."), t.getNativeSelection = n;
var x = n(),
_ = t.createNativeRange(document),
$ = m(document),
E = o.areHostProperties(x, ["anchorNode", "focusNode", "anchorOffset", "focusOffset"]);
f.selectionHasAnchorAndFocus = E;
var C = a(x, "extend");
f.selectionHasExtend = C;
var A = "number" == typeof x.rangeCount;
f.selectionHasRangeCount = A;
var S = C ? function(e, n) {
var i = s.getRangeDocument(n),
r = t.createRange(i);
r.collapseToPoint(n.endContainer, n.endOffset), e.addRange(R(r)), e.extend(n.startContainer, n.startOffset)
} : null;
o.areHostMethods(x, ["addRange", "getRangeAt", "removeAllRanges"]) && "number" == typeof x.rangeCount && f.implementsDomRange && function() {
var e = window.getSelection();
if (e) {
for (var n = e.rangeCount, i = [], r = y(e), o = 0; o < n; ++o) i[o] = e.getRangeAt(o);
for (o = 0; o < n; ++o) 0 == o && r ? S ? S(e, i[o]) : (t.warn("Rangy initialization: original selection was backwards but selection has been restored forwards because the browser does not support Selection.extend"), e.addRange(i[o])) : e.addRange(i[o])
}
}(), f.selectionSupportsMultipleRanges = !1, f.collapsedNonEditableSelectionsSupported = !0;
var T, M = !1;
$ && a($, "createControlRange") && (T = $.createControlRange(), o.areHostProperties(T, ["item", "add"]) && (M = !0)), f.implementsControlRange = M, i = E ? function(t) {
return t.anchorNode === t.focusNode && t.anchorOffset === t.focusOffset
} : function(t) {
return !!t.rangeCount && t.getRangeAt(t.rangeCount - 1).collapsed
};
function D(t, e, n) {
var i = n ? "end" : "start",
r = n ? "start" : "end";
t.anchorNode = e[i + "Container"], t.anchorOffset = e[i + "Offset"], t.focusNode = e[r + "Container"], t.focusOffset = e[r + "Offset"]
}
function L(t) {
t.anchorNode = t.focusNode = null, t.anchorOffset = t.focusOffset = 0, t.rangeCount = 0, t.isCollapsed = !0, t._ranges.length = 0
}
function R(e) {
var n;
return e instanceof s ? ((n = t.createNativeRange(e.getDocument())).setEnd(e.endContainer, e.endOffset), n.setStart(e.startContainer, e.startOffset)) : e instanceof u ? n = e.nativeRange : f.implementsDomRange && e instanceof r.getWindow(e.startContainer).Range && (n = e), n
}
function B(t) {
var n = t.getNodes();
if (! function(t) {
if (!t.length || 1 != t[0].nodeType) return !1;
for (var e = 1, n = t.length; e < n; ++e)
if (!r.isAncestorOf(t[0], t[e])) return !1;
return !0
}(n)) throw e.createError("getSingleElementFromRange: range " + t.inspect() + " did not consist of a single element");
return n[0]
}
function I(t) {
return !!t && void 0 !== t.text
}
function N(t, e) {
var n = new u(e);
t._ranges = [n], D(t, n, !1), t.rangeCount = 1, t.isCollapsed = n.collapsed
}
function O(e) {
if (e._ranges.length = 0, "None" == e.docSelection.type) L(e);
else {
var n = e.docSelection.createRange();
if (I(n)) N(e, n);
else {
e.rangeCount = n.length;
for (var i, r = d(n.item(0)), o = 0; o < e.rangeCount; ++o)(i = t.createRange(r)).selectNode(n.item(o)), e._ranges.push(i);
e.isCollapsed = 1 == e.rangeCount && e._ranges[0].collapsed, D(e, e._ranges[e.rangeCount - 1], !1)
}
}
}
function j(t, n) {
for (var i = t.docSelection.createRange(), r = B(n), o = d(i.item(0)), a = m(o).createControlRange(), s = 0, u = i.length; s < u; ++s) a.add(i.item(s));
try {
a.add(r)
} catch (t) {
throw e.createError("addRange(): Element within the specified Range could not be added to control selection (does it have layout?)")
}
newControlrange.select(n.isBackward), O(t)
}
var P;
a(x, "getRangeAt") ? P = function(t, e) {
try {
return t.getRangeAt(e)
} catch (t) {
return null
}
} : E && (P = function(e) {
var n = d(e.anchorNode),
i = t.createRange(n);
return i.setStartAndEnd(e.anchorNode, e.anchorOffset, e.focusNode, e.focusOffset), i.collapsed !== this.isCollapsed && i.setStartAndEnd(e.focusNode, e.focusOffset, e.anchorNode, e.anchorOffset), i
});
function q(t, e, n) {
this.nativeSelection = t, this.docSelection = e, this._ranges = [], this.win = n, this.refresh()
}
q.prototype = t.selectionPrototype;
function U(t) {
t.win = t.anchorNode = t.focusNode = t._ranges = null, t.rangeCount = t.anchorOffset = t.focusOffset = 0, t.detached = !0
}
var z = [];
function H(t, e) {
for (var n, i, r = z.length; r--;)
if (i = (n = z[r]).selection, "deleteAll" == e) U(i);
else if (n.win == t) return "delete" == e ? (z.splice(r, 1), !0) : i;
return "deleteAll" == e && (z.length = 0), null
}
var W = function(t) {
if (t && t instanceof q) return t.refresh(), t;
var e = H(t = g(t, "getNativeSelection")),
i = n(t),
r = F ? b(t) : null;
return e ? (e.nativeSelection = i, e.docSelection = r, e.refresh()) : (e = new q(i, r, t), z.push({
win: t,
selection: e
})), e
};
t.getSelection = W, t.getIframeSelection = function(n) {
return e.deprecationNotice("getIframeSelection()", "getSelection(iframeEl)"), t.getSelection(r.getIframeWindow(n))
};
var J = q.prototype;
function Y(t, n) {
for (var i, r = d(n[0].startContainer), o = m(r).createControlRange(), a = 0, s = n.length; a < s; ++a) {
i = B(n[a]);
try {
o.add(i)
} catch (t) {
throw e.createError("setRanges(): Element within one of the specified Ranges could not be added to control selection (does it have layout?)")
}
}
controlrange.select(range.isBackward), O(t)
}
if (!k && E && o.areHostMethods(x, ["removeAllRanges", "addRange"])) {
J.removeAllRanges = function() {
this.nativeSelection.removeAllRanges(), L(this)
};
var G = function(t, e) {
S(t.nativeSelection, e), t.refresh()
};
J.addRange = A ? function(e, n) {
if (M && F && this.docSelection.type == h) j(this, e);
else if (p(n) && C) G(this, e);
else {
var r;
if (this.removeAllRanges(), r = 0, this.nativeSelection.addRange(R(e).cloneRange()), this.rangeCount = this.nativeSelection.rangeCount, this.rangeCount == r + 1) {
if (t.config.checkSelectionRanges) {
var o = P(this.nativeSelection, this.rangeCount - 1);
o && !v(o, e) && (e = new u(o))
}
this._ranges[this.rangeCount - 1] = e, D(this, e, Q(this.nativeSelection)), this.isCollapsed = i(this)
} else this.refresh()
}
} : function(t, e) {
p(e) && C ? G(this, t) : (this.nativeSelection.addRange(R(t)), this.refresh())
}, J.setRanges = function(t) {
if (M && t.length > 1) Y(this, t);
else {
this.removeAllRanges();
for (var e = 0, n = t.length; e < n; ++e) this.addRange(t[e])
}
}
} else {
if (!(a(x, "empty") && a(_, "select") && M && k)) return e.fail("No means of selecting a Range or TextRange was found"), !1;
J.removeAllRanges = function() {
try {
if (this.docSelection.empty(), "None" != this.docSelection.type) {
var t;
if (this.anchorNode) t = d(this.anchorNode);
else if (this.docSelection.type == h) {
var e = this.docSelection.createRange();
e.length && (t = d(e.item(0)))
}
if (t) {
m(t).createTextRange();
textrange.select(range.isBackward), this.docSelection.empty()
}
}
} catch (t) {}
L(this)
}, J.addRange = function(e) {
this.docSelection.type == h ? j(this, e) : (t.WrappedTextRange.rangeToTextRange(e).select(), this._ranges[0] = e, this.rangeCount = 1, this.isCollapsed = this._ranges[0].collapsed, D(this, e, !1))
}, J.setRanges = function(t) {
this.removeAllRanges();
var e = t.length;
e > 1 ? Y(this, t) : e && this.addRange(t[0])
}
}
J.getRangeAt = function(t) {
if (t < 0 || t >= this.rangeCount) throw new c("INDEX_SIZE_ERR");
return this._ranges[t].cloneRange()
};
var K;
if (k) K = function(e) {
var n;
t.isSelectionValid(e.win) ? n = e.docSelection.createRange() : (n = m(e.win.document).createTextRange()).collapse(!0), e.docSelection.type == h ? O(e) : I(n) ? N(e, n) : L(e)
};
else if (a(x, "getRangeAt") && "number" == typeof x.rangeCount) K = function(e) {
if (M && F && e.docSelection.type == h) O(e);
else if (e._ranges.length = e.rangeCount = e.nativeSelection.rangeCount, e.rangeCount) {
for (var n = 0, r = e.rangeCount; n < r; ++n) e._ranges[n] = new t.WrappedRange(e.nativeSelection.getRangeAt(n));
D(e, e._ranges[e.rangeCount - 1], Q(e.nativeSelection)), e.isCollapsed = i(e)
} else L(e)
};
else {
if (!E || "boolean" != typeof x.isCollapsed || "boolean" != typeof _.collapsed || !f.implementsDomRange) return e.fail("No means of obtaining a Range or TextRange from the user's selection was found"), !1;
K = function(t) {
var e, n = t.nativeSelection;
n.anchorNode ? (e = P(n, 0), t._ranges = [e], t.rangeCount = 1, function(t) {
var e = t.nativeSelection;
t.anchorNode = e.anchorNode, t.anchorOffset = e.anchorOffset, t.focusNode = e.focusNode, t.focusOffset = e.focusOffset
}(t), t.isCollapsed = i(t)) : L(t)
}
}
J.refresh = function(t) {
var e = t ? this._ranges.slice(0) : null,
n = this.anchorNode,
i = this.anchorOffset;
if (K(this), t) {
var r = e.length;
if (r != this._ranges.length) return !0;
if (this.anchorNode != n || this.anchorOffset != i) return !0;
for (; r--;)
if (!v(e[r], this._ranges[r])) return !0;
return !1
}
};
var V = function(t, e) {
var n = t.getAllRanges();
t.removeAllRanges();
for (var i = 0, r = n.length; i < r; ++i) v(e, n[i]) || t.addRange(n[i]);
t.rangeCount || L(t)
};
J.removeRange = M ? function(t) {
if (this.docSelection.type == h) {
for (var e = this.docSelection.createRange(), n = B(t), i = d(e.item(0)), r = m(i).createControlRange(), o = !1, a = 0, s = e.length; a < s; ++a) e.item(a) !== n || o ? r.add(e.item(a)) : o = !0;
newControlrange.select(t.isBackward), O(this)
} else V(this, t)
} : function(t) {
V(this, t)
};
var Q;
!k && E && f.implementsDomRange ? (Q = y, J.isBackward = function() {
return Q(this)
}) : Q = J.isBackward = function() {
return !1
}, J.isBackwards = J.isBackward, J.toString = function() {
for (var t = [], e = 0, n = this.rangeCount; e < n; ++e) t[e] = "" + this._ranges[e];
return t.join("")
};
function X(t, e) {
if (t.win.document != d(e)) throw new c("WRONG_DOCUMENT_ERR")
}
J.collapse = function(e, n) {
X(this, e);
var i = t.createRange(e);
i.collapseToPoint(e, n), this.setSingleRange(i), this.isCollapsed = !0
}, J.collapseToStart = function() {
if (!this.rangeCount) throw new c("INVALID_STATE_ERR");
var t = this._ranges[0];
this.collapse(t.startContainer, t.startOffset)
}, J.collapseToEnd = function() {
if (!this.rangeCount) throw new c("INVALID_STATE_ERR");
var t = this._ranges[this.rangeCount - 1];
this.collapse(t.endContainer, t.endOffset)
}, J.selectAllChildren = function(e) {
X(this, e);
var n = t.createRange(e);
n.selectNodeContents(e), this.setSingleRange(n)
}, J.deleteFromDocument = function() {
if (M && F && this.docSelection.type == h) {
for (var t, e = this.docSelection.createRange(); e.length;) t = e.item(0), e.remove(t), t.parentNode.removeChild(t);
this.refresh()
} else if (this.rangeCount) {
var n = this.getAllRanges();
if (n.length) {
this.removeAllRanges();
for (var i = 0, r = n.length; i < r; ++i) n[i].deleteContents();
this.addRange(n[r - 1])
}
}
}, J.eachRange = function(t, e) {
for (var n = 0, i = this._ranges.length; n < i; ++n)
if (t(this.getRangeAt(n))) return e
}, J.getAllRanges = function() {
var t = [];
return this.eachRange(function(e) {
t.push(e)
}), t
}, J.setSingleRange = function(t, e) {
this.removeAllRanges(), this.addRange(t, e)
}, J.callMethodOnEachRange = function(t, e) {
var n = [];
return this.eachRange(function(i) {
n.push(i[t].apply(i, e))
}), n
};
function Z(e) {
return function(n, i) {
var r;
this.rangeCount ? (r = this.getRangeAt(0))["set" + (e ? "Start" : "End")](n, i) : (r = t.createRange(this.win.document)).setStartAndEnd(n, i), this.setSingleRange(r, this.isBackward())
}
}
J.setStart = Z(!0), J.setEnd = Z(!1), t.rangePrototype.select = function(t) {
W(this.getDocument()).setSingleRange(this, t)
}, J.changeEachRange = function(t) {
var e = [],
n = this.isBackward();
this.eachRange(function(n) {
t(n), e.push(n)
}), this.removeAllRanges(), n && 1 == e.length ? this.addRange(e[0], "backward") : this.setRanges(e)
}, J.containsNode = function(t, e) {
return this.eachRange(function(n) {
return n.containsNode(t, e)
}, !0)
}, J.getBookmark = function(t) {
return {
backward: this.isBackward(),
rangeBookmarks: this.callMethodOnEachRange("getBookmark", [t])
}
}, J.moveToBookmark = function(e) {
for (var n, i, r = [], o = 0; n = e.rangeBookmarks[o++];)(i = t.createRange(this.win)).moveToBookmark(n), r.push(i);
e.backward ? this.setSingleRange(r[0], "backward") : this.setRanges(r)
}, J.toHtml = function() {
return this.callMethodOnEachRange("toHtml").join("")
};
function tt(t) {
var e = [],
n = new l(t.anchorNode, t.anchorOffset),
i = new l(t.focusNode, t.focusOffset),
r = "function" == typeof t.getName ? t.getName() : "Selection";
if (void 0 !== t.rangeCount)
for (var o = 0, a = t.rangeCount; o < a; ++o) e[o] = s.inspect(t.getRangeAt(o));
return "[" + r + "(Ranges: " + e.join(", ") + ")(anchor: " + n.inspect() + ", focus: " + i.inspect() + "]"
}
J.getName = function() {
return "WrappedSelection"
}, J.inspect = function() {
return tt(this)
}, J.detach = function() {
H(this.win, "delete"), U(this)
}, q.detachAll = function() {
H(null, "deleteAll")
}, q.inspect = tt, q.isDirectionBackward = p, t.Selection = q, t.selectionPrototype = J, t.addCreateMissingNativeApiListener(function(t) {
void 0 === t.getSelection && (t.getSelection = function() {
return W(t)
}), t = null
})
}), n.exports = i
}), $__System.registerDynamic("30", ["14", "e", "1c", "1f", "13", "26"], !0, function(t, e, n) {
"use strict";
this || self;
var i = t("14"),
r = t("e"),
o = t("1c"),
a = t("1f"),
s = t("13"),
u = s.Node,
c = t("26").map,
l = u.TYPE,
f = i.WESTERN_WORD_SPLITER,
h = function(t) {
this.rangy = o, o.init(), this.savedSel = {}, this.editor = t, r(document).on("selectionchange", function(e) {
t.selection.selectWordTime && new Date - t.selection.selectWordTime > 200 && (t.selection.selectWordTime = null)
}), this.updateMetrics()
},
d = !1,
m = r.fn.scrollTop;
r.fn.oldScrollTop = m, r.fn.scrollTop = function(t) {
if (void 0 === t || !d) return m.apply(this, arguments)
};
var v;
r(document.body).on("hidden.bs.modal", ".modal", function(t) {
File.editor.restoreLastCursor()
}).on(".show.bs.modal", ".modal", function() {
var t = File.editor.selection.buildUndo();
t && (File.editor.lastCursor = t)
});
function p(t) {
return !1
}
function g(t) {
r("content").on(t ? "scroll" : "DOMMouseScroll mousewheel", p), setTimeout(function() {
r("content").off(t ? "scroll" : "DOMMouseScroll mousewheel", p)
}, 500)
}
g(), o.rangePrototype.insertNodeAtEnd = function(t) {
var e = this.cloneRange();
e.collapse(!1), e.insertNode(t), e.detach(), this.setEndAfter(t)
};
var b;
r(window).on("resize", function() {
File.suppressResize || (b = document.querySelector("content").clientHeight)
}), h.prototype = {
preventScrollOnce: g,
enableScroll: function(t) {
r("content").off(t ? "scroll" : "DOMMouseScroll mousewheel", p)
},
clearGlobalColumn: function() {
v = void 0
},
updateMetrics: function() {
b = document.querySelector("content").clientHeight, this.editor.defaultTextHeight = parseInt(r("#write p").css("line-height"))
},
jumpIntoElemBegin: function(t, e) {
try {
var n = this,
i = this.editor,
a = t.find(".CodeMirror")[0],
s = t.children("[mdtype]");
if (!t || !t.length) return Reporter.error("cannot jumpIntoElemBegin to empty elem", {
level: "warning"
}), window.getSelection().removeAllRanges(), !1;
if (t.length > 1 && (t = r(t[0])), a) return a.CodeMirror.focus(), a.CodeMirror.execCommand("goDocStart");
if (_(i, !1, i.findNodeByElem(t))) return;
if (u.isType(t.attr("mdtype"), u.TYPE.image, u.TYPE.hr, u.TYPE.math_block)) return this.selectNode(null, t);
if (t.hasClass("footnotes")) return this.jumpIntoElemBegin(t.find(".md-def-name"));
if (s.length) return this.jumpIntoElemBegin(r(s[0]), e);
var c = o.createRange();
return c.setStart(t[0], 0), c.setEnd(t[0], 0), this.deRange(c), n.setRange(c, !0), e ? setTimeout(function() {
n.setRange(c, !0), n.editor.refocus()
}, 20) : !window.getSelection().anchorNode && t.length && (! function t(e) {
3 == e.nodeType ? (c.setStart(e, 0), c.setEnd(e, 0)) : e.childNodes.length ? t(e.childNodes[0]) : (c.setStart(e, 0), c.setEnd(e, 0))
}(t[0]), window.getSelection().addRange(c.nativeRange)), window.getSelection().anchorOffset
} catch (e) {
Reporter.error("cursor may go wrong", {
level: "warning",
filename: "Selection.js",
extra: {
dom: Reporter.sanitizeDom(t[0])
}
})
}
},
jumpIntoElemEnd: function(t, e) {
var n = t.find(".CodeMirror")[0];
if (t.length > 1 && (t = r(t[0])), n) n.CodeMirror.execCommand("goDocEnd");
else {
if (_(this.editor, !0, this.editor.findNodeByElem(t))) return;
if (u.isType(t.attr("mdtype"), u.TYPE.image, u.TYPE.hr, u.TYPE.math_block)) return this.selectNode(null, t);
if (t.children("[mdtype]").length) return this.jumpIntoElemEnd(r(t.children("[mdtype]")[0]), e);
t.addClass("md-expand"), this.restoreSelection(t[0], t.text().length), t.removeClass("md-expand")
}
},
jumpInto: function(t, e) {
if ("" == t.text()) return this.jumpIntoElemBegin(t);
this.restoreSelection(t[0], e)
},
setRange: function(t, e) {
this.editor.wordCount.updateInSelection(), e || (this.editor.brush.closestExpandable(r(t.startContainer)).addClass("md-expand"), this.editor.brush.closestExpandable(r(t.endContainer)).addClass("md-expand")), t.commonAncestorContainer && t.commonAncestorContainer.getAttribute && "linebreak" == t.commonAncestorContainer.getAttribute("md-inline") && "\n" == t.toString() && t.collapse(!0), File.isTypeWriterMode && File.option.scrollWithCursor && this.typeWriterScroll(t.nativeRange || t), this.rangy.getSelection().setSingleRange(t, t.isBackward)
},
getOffset: function(t, e) {
if (e = e || this.getRangy()) try {
return e.getBookmark(t[0]).start
} catch (t) {}
return 0
},
restoreEdge: function(t, e, n, i) {
t.jquery && (t = t.length ? t[0] : null);
var a, s = 0,
u = {};
if (!n) {
var c = r(t).closest("[mdtype='line'], [mdtype='heading']");
a = c.length && e < c.text().length
}
i = i || o.createRange();
try {
t && function t(r) {
if (3 == r.nodeType) {
var o = s + r.textContent.length;
if (n) {
if (e >= s && e <= o) throw i.setEnd(r, e - s), u
} else if (a) {
if (e >= s && e < o) throw i.setStart(r, e - s), u
} else if (e >= s && e <= o) throw i.setStart(r, e - s), u;
s = o
} else {
r.childNodes.length || r.nodeType !== r.ELEMENT_NODE || r.appendChild(document.createTextNode(""));
for (var c = 0, l = r.childNodes.length; c < l; ++c) t(r.childNodes[c])
}
}(t)
} catch (t) {
if (t == u) return i;
throw t
}
return i
},
saveSelection: function(t, e) {
if (t) {
t.jquery && (t = t[0]);
return (e = e || this.getRangy()) ? (this.savedSel = e.getBookmark(t), this.savedSel) : void 0
}
},
restoreSelection: function(t, e) {
if (!t) return window.getSelection().removeAllRanges();
if (t.jquery && (t = t[0]), !t) return window.getSelection().removeAllRanges();
var n = "false" === t.getAttribute("contenteditable");
if (void 0 === e || null === e || "" === e ? e = this.savedSel : "number" == typeof e && (e = {
start: e,
end: e
}), !k(this.editor, t, e.start)) {
var i = o.createRange();
if (i.moveToBookmark({
start: e.start,
end: e.end,
containerNode: t
}), i.endContainer == t && 0 == i.endOffset && e.end > 0) {
var a = t.rawText().length;
e.end > a && i.moveToBookmark({
start: Math.min(e.start, a),
end: Math.min(e.end, a),
containerNode: t
})
}
if ("BODY" == document.activeElement.tagName || document.activeElement.hasAttribute("tabindex")) {
var s = r("content").scrollTop();
this.editor.writingArea.focus(), r("content").scrollTop(s)
}
return i.collapsed && this.deRange(i), n && t.setAttribute("contenteditable", "true"), this.setRange(i), !n || t.classList.contains("md-def-link") || t.classList.contains("md-def-footnote") || t.setAttribute("contenteditable", "false"), i
}
},
getVeryFirstElem: function(t) {
return t.children("[cid]").length > 0 ? this.getVeryFirstElem(t.children("[cid]").first()) : t
},
getVeryLastElem: function(t) {
return t.children("[cid]").length > 0 ? this.getVeryLastElem(t.children("[cid]").last()) : t
},
getSelection: function() {
return this.rangy.getSelection()
},
prepNode: function(t, e, n, i) {
var r, a = this.editor,
c = this.getRangy(),
f = this.editor.undo.UndoManager,
h = f.SnapFlag,
d = c && !c.collapsed;
v = void 0, File.inBusyMode && setAttributeOnlyNeeded(this.editor.writingArea, "contenteditable", "false");
try {
if (d) {
if (n) return r;
if (a.UserOp.surroundPair(a, t, c)) return void(e && e.preventDefault());
r = a.UserOp.backspaceHandler(a, null, "delSelection", !0, !0)
}
c = this.getRangy();
var m, p, g = this.rangy.getSelection(),
b = g.anchorOffset == o.dom.getNodeLength(g.anchorNode),
y = a.getJQueryElem(g.anchorNode),
w = a.getMarkElem(g.anchorNode),
F = a.findNodeByElem(w),
k = c.getBookmark(w[0]);
if (y.hasClass("ty-input")) return;
if (r || n || (a.undo.addSnap(F.cid, h.NONE), a.brush.addToQueue(F.cid)), File.inBusyMode) {
var x = y.closest("[contenteditable='true']");
document.activeElement !== x[0] && x.focus()
}
if (y.hasClass("md-def-url") && (t.match(/\s/g) || []).length) return b && this.jumpIntoElemBegin(w.find(".md-def-title")), e && e.preventDefault();
!n && r && a.undo.addSnap(w.attr("cid"), t.length > 1 ? h.REPLACE : h.ADD, a.docMenu.getAttrByElem(y));
if ((w.is(".unholdable") ? w : w.closest(".unholdable")).find(".math-jax-postprocess>.md-math-after-sym").text(""), u.isType(F, l.def_link, l.def_footnote)) {
if (w[0] == y[0] && c.collapsed) return void this.jumpIntoElemBegin(w.find(".md-def-name"))
} else F.get("type") == l.meta_block || F.get("type") == l.fences || (F.isBlock() && F.canNotDirectEdit() ? (window.getSelection().removeAllRanges(), e && e.preventDefault()) : y.hasClass("md-image") && (1 != c.startOffset || y.prev().length || (y.before("​"), c.setStartBefore(y.parent()), g.setSingleRange(c))));
if (F.get("children").length) {
var _ = window.getSelection().anchorNode.childNodes,
$ = window.getSelection().anchorOffset,
E = $ > 0 ? _[$ - 1] : null,
C = $ < _.length ? _[$] : null,
A = a.findNodeByElem(E ? a.getMarkElem(E) : []),
S = a.findNodeByElem(C ? a.getMarkElem(C) : []);
if (t = t.replace("​", ""), u.isType(S, s.TYPE.table)) {
a.undo.endSnap(!0), r = r || f.makeEmptyCommand();
var T = new u({
type: s.TYPE.paragraph,
text: t,
in: S.get("in")
});
S.insert(T, !0), f.addUndoForInsert(r, T), a.findElemById(S.id).before(T.toHTML()), a.selection.restoreSelection(a.findElemById(T.id)[0], t.length), m = T
} else if (u.isType(A, s.TYPE.table)) {
a.undo.endSnap(!0), r = r || f.makeEmptyCommand();
T = new u({
type: s.TYPE.paragraph,
text: t,
in: A.get("in")
});
A.insert(T), f.addUndoForInsert(r, T), a.findElemById(A.id).after(T.toHTML()), a.selection.restoreSelection(a.findElemById(T.id)[0], t.length), m = T
} else S ? (S = S.getVeryFirst(), a.undo.addSnap(S.cid, h.NONE), S.set("text", t + S.safeGetStrAttr("text", !0)), a.findElemById(S.id).replaceWith(S.toHTML()), S && a.selection.jumpInto(a.findElemById(S.id), 1), r = null) : A && (A = A.getVeryFirst(!0), a.undo.addSnap(A.cid, h.NONE), A.set("text", A.safeGetStrAttr("text", !0) + t), a.findElemById(A.id).replaceWith(A.toHTML()), a.selection.jumpIntoElemEnd(a.findElemById(A.id)), r = null);
r && r.redo.push(this.buildUndo()), !n && a.refocus(m.id), e && e.preventDefault()
}
return n || (d ? r && (a.UserOp.insertInlineText(a, F, t, k.start, r, !0), e && e.preventDefault()) : ((p = a.UserOp.hanldePair(a, t, F, k, r, c)) || (p = a.UserOp.PunctuationOp.handlerCh(a, t, F, k, r, c)), p || (p = a.htmlBlock.autoCloseTagWhenInput(a, t, F, k, r, c)), p && ("object" == typeof p && (r = p), e && e.preventDefault()))), !n && r && this.editor.undo.register(r), r
} catch (t) {
console.warn(t)
}
},
getPosBookmark: function() {
var t = editor.getMarkElem();
if (t.length) {
var e = this.editor.fences.queue[t.attr("cid")];
if (e) return {
isCm: e,
cid: e.cid,
start: e.indexFromPos(e.getCursor())
};
return null
}
},
getRangy: function(t) {
var e = this.rangy.getSelection(),
n = e.rangeCount ? e.getRangeAt(0) : null;
return n && (n.isBackward = e.isBackward(), t && this.deRange(n)), n
},
buildUndo: function(t, e) {
var n = {};
if (n.type = "cursor", this.editor.sourceView.inSourceMode) return n.pos = this.editor.sourceView.cm.getCursor(), n.inSourceMode = !0, n;
try {
if ((e = ((t = t || this.getRangy()) && t.commonAncestorContainer ? this.editor.getMarkElem(t.commonAncestorContainer) : e) || this.editor.getMarkElem()).find(".CodeMirror").length) {
var i = e.find(".CodeMirror")[0].CodeMirror;
n.id = i.cid, n.pos = i.getCursor(), n.selections = i.listSelections()
} else if (e.attr("mdtype") && e.children("[tabindex]").addBack("[tabindex]").length) n.id = e.attr("cid"), n.focus = e.attr("mdtype");
else {
if (!t) return null;
var r = this.editor.getMarkElem(this.getDetailPos(t.startContainer, t.startOffset)[0]),
o = this.editor.getMarkElem(this.getDetailPos(t.endContainer, t.endOffset)[0]),
a = t.getBookmark(r[0]);
if (r[0] === o[0]) {
if (n.id = r.attr("cid"), !n.id) return null;
n.start = a.start, n.end = a.end
} else {
if (n.startId = r.attr("cid"), n.endId = o.attr("cid"), !n.startId || !n.endId) return null;
n.start = a.start, n.end = t.getBookmark(o[0]).end
}
}
} catch (t) {
return t.stack, null
}
return n
},
selectNode: function(t, e) {
(e = e || editor.findElemById(t.id)).length && void 0 !== e.attr("tabindex") && (window.getSelection().removeAllRanges(), e.addClass("onfocus"), e.focus())
},
extendToLineEdge: function(t, e, n) {
e = e || this.editor.getMarkElem()[0];
var i = this.getRangy();
if (i && e && !isInputComponent(e)) {
var r = i.getBookmark(e),
a = o.createRange();
return t ? r.end = e.textContent.length : r.start = 0, a.moveToBookmark(r), !n && this.setRange(a), a
}
},
extendCharFromCollapse: function(t, e) {
var n, i = !1,
r = !e;
if (t.commonAncestorContainer.nodeType == document.TEXT_NODE && (e && t.startOffset > 0 && (t.setStart(t.startContainer, t.startOffset - 1), t.startOffset > 0 && (n = t.toString().charCodeAt(0)) >= 56320 && n <= 57343 && (t.setStart(t.startContainer, t.startOffset - 1), (n = t.toString().charCodeAt(0)) >= 55296 && n <= 56319 || t.setStart(t.startContainer, t.startOffset + 1)), i = !0), r && t.endOffset < t.commonAncestorContainer.textContent.length && (t.setEnd(t.endContainer, t.endOffset + 1), (n = t.toString().charCodeAt(t.toString().length)) >= 55296 && n <= 56319 && t.endOffset < t.commonAncestorContainer.textContent.length && t.setEnd(t.endContainer, t.endOffset + 1), i = !0)), !i) {
var o = this.editor.getMarkElem(t.startContainer)[0],
a = t.getBookmark(o);
if (e && 0 === a.start || r && a.end >= o.textContent.length) return !1;
if (e ? a.start-- : a.end++, o.classList.contains("md-def-link") || o.classList.contains("md-def-footnote")) {
var s = o.querySelector(".md-def-name").textContent.length;
a.start != s && a.start != s + 1 + o.querySelector(".md-def-content").textContent.length || (e ? (a.end - a.start <= 1 && a.end--, a.start--) : (a.end - a.start <= 1 && a.start++, a.end++))
}
t.moveToBookmark(a)
}
return t
},
moveLeftOrRight: function(t, e) {
v = void 0;
var n = this.editor.getMarkElem()[0],
i = this.getRangy(),
a = this.editor;
if (!(e && isInputComponent(e.target) || !i) && n) {
!File.inBusyMode || i && !r(i.startContainer).closest("[contenteditable='false'][cid]").length || a.writingArea.setAttribute("contenteditable", "true");
var s;
if (!e || !(s = r(e.target).closest("[mdtype='table_cell']")).length || s.closest("th").length && !s.closest("th").prev().length) {
var u = i.getBookmark(n),
c = o.createRange();
if (e && i.toString().length && !e.metaKey && !e.ctrlKey && !e.shiftKey) {
i.collapse(t), this.setRange(i, !0);
var l = this.editor.getMarkElem(i.startContainer);
return l.length && _(this.editor, !t, this.editor.findNodeByElem(l)), e.preventDefault(), !0
}
if (e && !e.metaKey) {
if (t && 0 === u.start) return this.moveUpOrDown(!0, e, !0);
if (!t && u.end >= n.textContent.length && (!n.classList.contains("md-def-link") || 0 != a.getJQueryElem(i.startContainer).closest(".md-def-title").length)) return this.moveUpOrDown(!1, e, !0);
var f = document.querySelector(".ty-focusable-btn.selected");
if (f && !e.ctrlKey && !e.shiftKey && u.end == u.start) return f.classList.remove("selected"), u.end += t ? -1 : 1, u.start += t ? -1 : 1, c.moveToBookmark(u), this.setRange(c, !0), e.preventDefault(), !0
}
if (File.isNodeHtml && !t && e && e.ctrlKey && !e.shiftKey) {
var h = n.textContent.substring(u.end) || "";
if (/^\w+$/.exec(h)) return u.start = u.end = n.textContent.length, c.moveToBookmark(u), this.setRange(c, !0), e.preventDefault(), !0
}
if (t ? (u.end = u.start, u.start--) : (u.start = u.end, u.end++), c.moveToBookmark(u), /\u200b|\007F/g.exec(c.toString())) return c.collapse(t), this.setRange(c, !0), !0;
if (d = c, r(t ? d.startContainer : d.endContainer).closest(".md-inline-math").addClass("md-expand").length && !e.ctrlKey && !e.metaKey && !e.altKey) return c.collapse(t), this.setRange(c, !0), e && e.preventDefault(), !0;
var d
}
}
},
addUnholdable: function(t, e, n, i) {
var o = function(t, e, n) {
var i = l.paragraph;
t.get("type") == l.list_item && (i = l.list_item);
var r = new u({
type: i
});
return t.insert(r, e), u.normalizeNode(r), r
}(t, n),
a = this.editor.findElemById(t.id),
s = n ? t : void 0,
c = n ? void 0 : t;
return n ? a.before(o.toHTML()) : a.after(o.toHTML()), e = e || this.editor.undo.UndoManager.makeEmptyCommand(), r(".unholdable").removeClass("unholdable"), this.editor.findElemById(o.id).addClass(i ? "" : "unholdable"), this.editor.undo.UndoManager.addUndoForInsert(e, o, c, s), e.discardable = !0, o
},
jumpToNextBlock: function(t, e) {
var n, i = t.getClosetBlock(!0).getVeryFirstBrotherIncludeTopBlock(!1);
if (i);
else {
if (!e) return void window.getSelection().removeAllRanges();
i = this.addUnholdable(t, e)
}
n = this.editor.findElemById(i.cid), this.jumpIntoElemBegin(n), e.redo.push(this.buildUndo());
var r = this.editor;
setTimeout(function() {
r.refocus()
}, 50)
},
moveUpOrDown: function(t, e, n) {
File.inBusyMode && e && (e.shiftKey || e.metaKey || e.ctrlK) && this.editor.writingArea.setAttribute("contenteditable", "true");
var i, o = this.getRangy(),
a = this,
f = e && u.isType(c[e.keyCode || e.which], "Right", "Left"),
h = File.isNode && e && e.ctrlKey && !e.shiftKey;
function d(t, e) {
return e ? !t || u.isType(t, l.fences, l.html_block, l.table, l.math_block, l.hr, l.toc) : u.isType(t, l.fences, l.html_block, l.table, l.math_block, l.hr, l.toc, l.def_footnote, l.def_link)
}
function m(t, e, n, i, r) {
var o = t.getVeryFirstBrotherIncludeTopBlock(e),
s = a.editor.undo.UndoManager.makeEmptyCommand();
return (!f && !o && !t.get(e ? "before" : "after") || d(t) && d(t.get(e ? "before" : "after"), !0)) && (e && u.isType(t, t.TYPE.meta_block) || (o = a.addUnholdable(function t(e, n) {
if (u.isType(e, l.fences, l.html_block, l.table, l.hr, l.def_link, l.def_footnote)) return e;
var i = n ? "before" : "after";
return e.get("parent") ? e.get("parent").get(i) ? e : e.get(i) ? e : t(e.get("parent")) : e
}(t), s, e))), s.undo.push(a.buildUndo()), n && n(), h ? a.jumpIntoElemBegin(a.editor.findElemById(o.id), !0) : b(o, i, s, r), s
}
function p(t, n, i) {
A = m(t.getClosetBlock(), n, void 0, i), e && e.preventDefault(), a.editor.undo.UndoManager.isEmptyCommand(A) || (A.redo.push(a.buildUndo()), a.editor.undo.register(A)), a.scrollAdjust()
}
function g(t, n, s, u) {
var c, f = s || a.editor.fences.getCm(t.id),
d = (f.doc.getCursor(), u[0].contains(document.activeElement) && document.activeElement.classList.contains("ty-input")),
p = n && 0 == f.doc.getCursor().line,
g = !n && f.doc.getCursor().line == f.lineCount() - 1;
if (p && n && (p = (c = f.cursorCoords().top) == f.cursorCoords({
line: 0,
ch: 0
}).top), g && !n && (g = (c = f.cursorCoords().top) == f.cursorCoords({
line: f.lineCount() - 1,
ch: f.getLine(f.lineCount() - 1).length
}).top), h && (p = !0), s || !r(".autoComplt-list").is(":visible")) {
if (void 0 == v && (v = d ? r(document.activeElement).offset().left + document.activeElement.clientWidth : f.cursorCoords(f.getCursor()).right), d) {
var b = document.activeElement.classList.contains("ty-input-before");
if (!b && n) return a.editor.fences.jumpCmEnd(f), x(f, v), y(e);
if (b && !n) return a.editor.fences.jumpCmBegin(f), x(f, v), y(e);
(g = g || document.activeElement.classList.contains("ty-input-after")) && r(document.activeElement).closest(".md-tooltip-hide").hide()
} else if (g && !n) {
if (t.get("type") == l.fences || t.get("type") == l.math_block && t.get("tagAfter")) return f.getInputField().blur(), setTimeout(function() {
a.selectAllElem(u.find(".ty-input-after").focus())
}, 0), y(e)
} else if (p && n && t.get("type") == l.math_block && t.get("tagBefore")) return f.getInputField().blur(), setTimeout(function() {
a.selectAllElem(u.find(".ty-input-before").focus())
}, 0), y(e);
if (p || g) {
var w = f.getCursor();
d || (h = !v && (0 == w.ch || c != f.cursorCoords({
line: w.line,
ch: w.ch - 1
}).top), i = $(o.nativeRange) || {}), A = m(t, n, function() {
f.getInputField().blur()
}, u, d ? v : i.x), n && !a.editor.undo.UndoManager.isEmptyCommand(A) && (A.redo.push(a.buildUndo()), a.editor.undo.register(A)), y(e)
}
e && e.stopPropagation()
}
}
function b(i, s, c, f) {
if (i) {
var h = a.editor.findElemById(i.id);
d = s.closest(".unholdable"), m = C, p = c, d.hasClass("unholdable") && m && (d.text().length ? d.removeClass("unholdable") : (a.editor.undo.UndoManager.addUndoForRemove(p, m), p.redo.push(a.buildUndo()), m.remove(), d.remove(), a.editor.undo.register(p)));
var d, m, p;
if (_(a.editor, t, i, e, c, v));
else {
if (F(h)) return y(e), h.find("img:first").trigger("click"), !0;
if (u.isType(i, l.table, l.table_row, l.table_cell)) a.jumpIntoElemBegin(h), y(e);
else if (u.isType(i, l.paragraph, l.heading, l.def_link, l.def_footnote) && !i.get("text")) a.jumpIntoElemBegin(h), e && e.preventDefault();
else if (u.isType(i, l.meta_block) && t) a.jumpIntoElemEnd(h), e && e.preventDefault();
else if (h.length) {
if (n || 0 == s.closest("#write").length) t ? a.jumpIntoElemEnd(h) : a.jumpIntoElemBegin(h);
else {
editor.selection.scrollAdjust(h, void 0, !0, !0), File.inBusyMode && editor.writingArea.setAttribute("contenteditable", "true");
var g = o && o.getBookmark(s[0]).end == s.text().length ? v : f;
if (void 0 != g) {
var b = a.getRangy(),
w = null;
if (b && b.nativeRange.getClientRects()[0] || void 0 != f) {
var k = (h.children[0] || h[0]).getBoundingClientRect(),
x = t ? k.y + k.height - 3 : k.y + 3;
w = document.caretRangeFromPoint(g, x)
}
w && (h[0] == w.startContainer || h[0].contains(w.startContainer)) ? a.setRange(w) : void 0 != f ? t ? a.jumpIntoElemEnd(h) : a.jumpIntoElemBegin(h) : window.getSelection().modify("move", t ? "backward" : "forward", "line")
} else t ? a.jumpIntoElemEnd(h) : a.jumpIntoElemBegin(h)
}
File.isFocusMode && (r(".md-focus").removeClass("md-focus"), h.addClass("md-focus")), y(e)
}
}
}
}
try {
var k = this.editor.getMarkElem(o && o.startContainer),
E = k.attr("mdtype"),
C = this.editor.findNodeByElem(k),
A = a.editor.undo.UndoManager.makeEmptyCommand();
if (!C) return;
if (w(C, k) || k.hasClass("rawedit")) p(C, t, k);
else if (E == s.TYPE.fences) g(C, t, void 0, k);
else if (E == s.TYPE.html_block && this.editor.htmlBlock.currentCm) g(C, t, this.editor.htmlBlock.currentCm, k);
else if (E == s.TYPE.math_block && this.editor.mathBlock.currentCm) g(C, t, this.editor.mathBlock.currentCm, k);
else if (k.closest(".td-span").length) {
var S = function(t, e) {
var n, i = t.closest("td"),
r = i.prevAll().length + 1;
if (!i.length) {
if (e) return [];
r = (i = t.closest("th")).prevAll().length + 1
}
return "TD" == i[0].tagName ? (n = i.closest("tr")[e ? "prev" : "next"]().find("td:nth-child(" + r + ")>.td-span"), e && !n.length && (n = i.closest("tbody").prev().find("tr:last > th:nth-child(" + r + ") > .td-span")), n) : e ? [] : i.closest("thead").next().find("tr:first > td:nth-child(" + r + ")>.td-span")
}(k.closest(".td-span"), t);
if (S.length) e && e.preventDefault(), t ? this.jumpIntoElemEnd(S) : this.jumpIntoElemBegin(S), this.scrollAdjust(void 0, void 0, !0);
else {
if (f) return y(e), !1;
p(C, t, k)
}
} else if (k.closest(".md-meta-block").length && !t) !k.text().substring(window.getSelection().focusOffset).match(/\S+\n+/) && p(C, t, k);
else {
void 0 == v && (v = (o.nativeRange.getClientRects()[0] || {}).left);
var T = C.getClosetBlock(!0).getVeryFirstBrotherIncludeTopBlock(t);
if (A.undo.push(this.editor.lastCursor), function(t, e, n) {
if ((n = n || this.getRangy()).collapsed) {
if (!(i = $(n.nativeRange)) || !t.length) return 0 == t.text().length;
var r = t[0].getBoundingClientRect();
return e ? !! function(t, e) {
var n = e.endContainer.nodeType == document.TEXT_NODE ? e.endContainer.parentElement.parentElement : null;
if (n && n.classList.contains("md-meta") && (n = n.parentElement), n && n.classList.contains("md-image")) {
if (e.endContainer.textContent.length == e.endOffset && t.rawText().length == e.getBookmark(t[0]).end) return !0;
var i = e.nativeRange.getClientRects();
if (!i.length) return;
var r = i[i.length - 1],
o = document.elementFromPoint(r.x, r.y + 28);
if (o && "IMG" == o.tagName && (e.collapseAfter(o), t.rawText().length == e.getBookmark(t[0]).end)) return !0
}
}(t, n) || r.bottom - i.bottom < parseInt(t.css("paddingBottom")) + 10 : i.top - r.top < parseInt(t.css("paddingTop")) + 10
}
}.call(this, k, !t)) T ? b(T, k, A) : !t && k.text().trim().length && p(C, t, k);
else {
var M = r(o.commonAncestorContainer.parentElement);
if (!t && M.hasClass("md-image-after-src")) {
var D = M.closest(".md-image").next();
return D.length ? (a.jumpIntoElemBegin(D), y(e)) : p(C, t, k), !1
}
if (!t && o.collapsed && o.startContainer.parentElement.classList.contains("md-def-name") && i && i.left) {
var L = i.left,
R = t ? i.top - 9 : i.bottom + 9,
B = document.caretRangeFromPoint(L, R);
this.setRange(B, !0), y(e)
} else if (File.isTypeWriterMode && File.option.scrollWithCursor && i && i.left) {
L = i.left, R = t ? i.top - 9 : i.bottom + 9, B = document.caretRangeFromPoint(L, R);
this.editor.writingArea.contains(B.startContainer) && ($(B) || {}).top != i.top && (this.setRange(B), y(e))
}
}
}
} catch (t) {
t.stack
}
},
click: function(t, e, n) {
window.getSelection().removeAllRanges();
var i = document.createEvent("MouseEvent"),
r = document.elementFromPoint(t, e);
n = "click", i.initMouseEvent(n, !0, !0, window, null, t, e, 0, 0, !1, !1, !1, !1, 0, null), r.dispatchEvent(i)
},
jumpDefComponent: function(t) {
var e = this.editor.getMarkElem(),
n = o.createRange();
t ? (n.selectNodeContents(e.children(".md-def-name")[0]), this.deRange(n, !0)) : (n.selectNodeContents(e.children(".md-def-content")[0]), this.deRange(n, !0)), this.editor.refocus()
},
jumpSelection: function() {
return this.scrollAdjust(null, 20)
},
jumpTop: function(t) {
var e = this.editor;
if (e.sourceView.inSourceMode) e.sourceView.cm.execCommand("goDocStart");
else {
var n = this.getRangy();
t && n ? (n.setStart(e.writingArea, 0), this.deRange(n, !0)) : e.nodeMap && this.jumpIntoElemBegin(e.findElemById((e.nodeMap.getFirst() || {}).cid)), File.isTypeWriterMode || r("content").animate({
scrollTop: 0
}, "100", "swing", function() {
e.library.outline.highlightVisibleHeader()
})
}
},
jumpBottom: function(t) {
var e = this.editor;
if (e.sourceView.inSourceMode) e.sourceView.cm.execCommand("goDocEnd");
else {
var n = this.getRangy();
if (t && n) {
n.setEnd(e.writingArea, e.writingArea.childNodes.length), n = this.deRange(n, !0);
try {
n.endContainer.parentElement.classList.contains("md-def-title") && "" == n.endContainer.parentElement.textContent && (n.setEndAfter(n.endContainer.parentElement.previousSibling.previousSibling), n = this.deRange(n, !0))
} catch (t) {}
} else this.jumpIntoElemEnd(this.editor.findElemById(this.editor.nodeMap.getLast().getVeryFirst(!0).cid));
File.isTypeWriterMode || r("content").animate({
scrollTop: document.querySelector(this.editor.sessionStr).scrollHeight - window.innerHeight
}, "100", "swing", function() {
e.library.outline.highlightVisibleHeader()
})
}
},
lockScroll: function() {
d = !0
},
unlockScroll: function() {
d = !1
},
typeWriterScroll: function(t, e, n) {
d = !1;
var i = this.editor;
function o(t) {
return !(!t || 0 == t.top && 0 == t.bottom) && (t = t.top - b / 2 + i.defaultTextHeight / 2, Math.abs(t) > 2 && (n ? r("content").animate({
scrollTop: r("content").scrollTop() + t
}, 120, "swing", n) : r("content").scrollTop(r("content").scrollTop() + t)), !0)
}
if (File.isTypeWriterMode) {
var a;
if (e) return void((a = t.jquery && t.length && t[0].getBoundingClientRect()) && (a = document.caretRangeFromPoint((a.left + a.right) / 2, a.bottom - 10), this.typeWriterScroll(a)));
if (!t || t.getBoundingClientRect) return void((a = t || window.getSelection().rangeCount && window.getSelection().getRangeAt(0)) && (a.startContainer.nodeType == document.TEXT_NODE && a.startContainer.parentElement.hasAttribute("cid") ? o(a.startContainer.parentElement.getBoundingClientRect()) : o($(a))));
t.top ? o(t) : t.jquery && t.length && o(t[0].getBoundingClientRect())
}
},
scrollAdjust: function(t, e, n, i) {
if (this.editor.sourceView && this.editor.sourceView.inSourceMode) this.editor.sourceView.scrollAdjust();
else {
if (File.isTypeWriterMode && !i) return this.typeWriterScroll(t);
n && (n = window.isNaN(n - 0) ? 70 : n);
try {
var o, a, s, u = window.innerHeight,
c = r("content").scrollTop(),
l = this.editor,
f = t && t.jquery && t.closest("[mdtype='heading']").toArray();
if (t && t.jquery) {
if (!t.length) return;
o = t.offset().top + c
} else if (t && void 0 !== t.startContainer) o = (t.nativeRange || t).getClientRects()[0].top + c;
else {
if (r(document.activeElement).closest(".CodeMirror-focused").find(".CodeMirror-selected").length) return this.scrollAdjust(selectedCodeMirrorDom);
(a = window.getSelection().getRangeAt(0)) ? ((s = a.getClientRects()[0]) || (s = a.endContainer.nodeType === document.TEXT_NODE ? a.endContainer.parentElement.getClientRects()[0] : a.endContainer.getClientRects()[0]), o = s.top + c) : o = r(document.activeElement).offset().top
}
var h = (File.isNodeHtml ? r("#top-titlebar").height() : document.body.classList.contains("mac-seamless-mode") ? 30 : 0) + (r("#md-searchpanel:visible").height() || 0);
void 0 !== e && null !== e ? r("content").animate({
scrollTop: o - e - h
}, "500", "swing", function() {
l.library.outline.highlightVisibleHeader(f)
}) : o > u + c - (n ? 70 : 140) + h ? d(o - u + (n || 140)) : o < c + h ? d(o - h - (n || 140)) : l.library.outline.highlightVisibleHeader()
} catch (t) {}
}
function d(t) {
r("content").scrollTop(t), l.library.outline.highlightVisibleHeader(), g()
}
},
selectAllElem: function(t) {
if (!t[0] || "INPUT" != t[0].tagName && "TEXTAREA" != t[0].tagName)
if (this.editor.sourceView.inSourceMode) this.editor.sourceView.cm.execCommand("selectAll");
else {
if (r("body").hasClass("typora-sourceview-on")) return this.editor.sourceView.cm.execCommand("selectAll");
r(".math-jax-postprocess>.md-math-after-sym").text("​");
var e = o.createRange();
t.children().length ? (e.setStart(t.children()[0]), e.setEndAfter(t.children()[t.children().length - 1])) : e.selectNode(t[0]), this.deRange(e, !0)
}
else t[0].select()
},
selectAll: function(t) {
if (this.editor.sourceView.inSourceMode) this.editor.sourceView.cm.execCommand("selectAll");
else if (File.inBusyMode && !File.isLocked && this.editor.writingArea.setAttribute("contenteditable", "true"), r(".math-jax-postprocess>.md-math-after-sym").text("​"), document.activeElement && u.isType(document.activeElement.tagName, "INPUT", "TEXTAREA")) document.activeElement.select();
else {
var e = this.editor.getMarkElem(),
n = o.createRange();
if (e.hasClass("rawedit")) t || (n.selectNode(e[0]), this.setRange(n));
else {
if (t && u.isType(t.target.tagName, "INPUT", "TEXTAREA")) return t.target.select(), !0;
if (isInputComponent(t && t.target || document.activeElement)) return this.selectAllElem(r(t && t.target || document.activeElement)), !1;
if (e.find(".CodeMirror").length) {
e.find(".CodeMirror")[0].CodeMirror.execCommand("selectAll")
} else e.closest('[mdtype="table"]').length ? (this.selectAllElem(e.closest("[mdtype='table_cell']")), t && t.preventDefault()) : e.closest(".md-meta-block").length ? (this.selectAllElem(e.closest("[mdtype='meta_block']")), t && t.preventDefault()) : (r(this.editor.sessionStr).addClass("md-expand"), r(".footnotes, .md-fences, .hr, .md-rawblock").attr("contenteditable", !0), n.setStart(r(this.editor.sessionStr).children()[0]), r(this.editor.sessionStr).children()[0].classList.contains("md-hr") && n.setStart(r(this.editor.sessionStr).children()[1]), n.setEndAfter(r(this.editor.sessionStr).children().last()[0]), r(this.editor.sessionStr).removeClass("md-expand"), n = this.deRange(n), this.fixSafariRange(n), this.setRange(n), t && t.preventDefault(), File.isMac && setTimeout(function() {
r(".footnotes, .md-fences, .hr, .md-rawblock").prop("contenteditable", !1)
}, 10))
}
this.editor.lastCursor = this.buildUndo()
}
},
getEndNode: function(t) {
return this.getDetailPos(t.endContainer, t.endOffset)[0]
},
getDetailPos: function(t, e, n) {
var i = {};
function r(t) {
1 === t.nodeType && 0 === t.childNodes.length && t.appendChild(document.createTextNode(""))
}
function o(t) {
if (r(t), t.childNodes.length) return t.childNodes.length;
if (3 === t.nodeType) return t.textContent.length;
if (void 0 !== t.length) return t.length;
throw i
}
if (t.parentElement && t.parentElement.classList.contains("md-def-split")) return 0 == e ? this.getDetailPos(t.parentElement.previousElementSibling, t.parentElement.previousElementSibling.textContent.length, n) : this.getDetailPos(t.parentElement.nextElementSibling, 0, n);
if (1 == t.nodeType) {
var a = t.childNodes;
if (t.classList.contains("md-image") && 2 === e && (e = 1), r(t), !a || !a.length || t.classList && t.classList.contains("md-fences")) return [t, e];
try {
var s = a[e] && a[e].getAttribute && "checkbox" === a[e].getAttribute("type");
return n ? (s && e++, e == a.length ? this.getDetailPos(a[e - 1], o(a[e - 1])) : this.getDetailPos(a[e], 0, !0)) : 0 == e ? (s && e++, this.getDetailPos(a[e], 0)) : this.getDetailPos(a[e - 1], o(a[e - 1]))
} catch (n) {
return [t, e]
}
}
return [t, e]
},
fixSafariRange: function(t) {
if (File.isSafari) {
var e, n, i = r(t.startContainer).closest(".md-meta, .md-content");
i.length && 0 == t.startOffset && (n = (e = i.closest("[contenteditable='true'], [cid]")).children()[0]) && t.setStart(n, 0), (i = r(t.endContainer).closest(".md-meta, .md-content")).length && ((e = i.closest("[contenteditable='true'], [cid]")).hasClass("md-meta") && (e = e.parent().closest("[contenteditable='true'], [cid]")), (n = e.children().last()[0]) && t.setEndAfter(n))
}
},
deRange: function(t, e, n) {
var i = t.cloneRange();
try {
var r = this.getDetailPos(t.startContainer, t.startOffset, !0),
o = this.getDetailPos(t.endContainer, t.endOffset, !1);
return e && r[0].parentElement && "HR" == r[0].parentElement.tagName && (r[0] = r[0].parentElement.parentElement), t.setStart.apply(t, r), t.setEnd.apply(t, o), n && n.equals(t) ? n : (e && this.setRange(t, !0), t)
} catch (t) {}
return i
},
selectLine: function() {
var t, e;
if (this.editor.sourceView.inSourceMode) return e = (t = this.editor.sourceView.cm).getCursor(), void t.setSelection(a.Pos(e.line, 0), a.Pos(e.line, t.getLine(e.line).length));
var n = r(document.activeElement).closest(".CodeMirror");
if (n.length) return e = (t = n[0].CodeMirror).getCursor(), void t.setSelection(a.Pos(e.line, 0), a.Pos(e.line, t.getLine(e.line).length));
if (document.activeElement && u.isType(document.activeElement.tagName, "INPUT")) document.activeElement.select();
else {
if (window.getSelection().rangeCount) {
var i = window.getSelection(),
s = this.editor.getMarkElem(i.commonAncestorContainer),
c = o.createRange();
if (s.length)
if (s.closest("tr[mdtype='table_row']").length) {
var l = s.closest("tr[mdtype='table_row']");
c.selectNode(l[0]), l.closest('[mdtype="table"]').attr("contenteditable", !0), this.deRange(c, !0), l.closest('[mdtype="table"]').attr("contenteditable", !1)
} else {
s.addClass("md-expand-on-selection"), window.getSelection().modify("move", "backward", "sentence"), window.getSelection().modify("extend", "forward", "sentence"), c = this.getRangy();
var f = r(c.commonAncestorContainer).closest(".md-meta");
f.length ? this.selectAllElem(f.closest("[md-inline]")) : (f = this.editor.getMarkElem(c.startContainer)).length && f[0] !== this.editor.getMarkElem(c.endContainer)[0] && (c.setEndAfter(f[0]), this.deRange(c, !0)), s.removeClass("md-expand-on-selection")
}
}
this.editor.wordCount.updateInSelection()
}
},
selectWord: function(t, e, n) {
var o, a;
if (this.editor.sourceView.inSourceMode) return a = (o = this.editor.sourceView.cm).findWordAt(o.getCursor()), void o.extendSelection(a.anchor, a.head);
this.selectWordTime = new Date;
var s = r(document.activeElement).closest(".CodeMirror");
if (s.length) return a = (o = s[0].CodeMirror).findWordAt(o.getCursor()), void o.extendSelection(a.anchor, a.head);
if (n = n || this.getRangy()) {
var u = null;
if (t && (u = r(n.startContainer).closest(".md-meta, .md-content")).length) return n.selectNode(u.closest("[md-inline]")[0]), void this.setRange(n);
if ((u = r(n.startContainer).closest(".md-content, [md-inline='url'], [md-inline='emoji'], [md-inline='escape']")).length) return n.selectNode(u.closest("[md-inline]")[0]), void this.setRange(n, !0);
if ((u = r(n.startContainer).closest("[md-inline]")).length || (u = r(n.startContainer).closest("[cid]")), u.length) {
var c = n.getBookmark(u[0]).start,
l = u.text(),
h = /[\u3040-\uABFF\uD7A4-\uFAFF]/,
d = [],
m = null;
if (l.split(f).filter(function(t) {
return !!t
}).forEach(function(t) {
h.test(t) ? m ? m += t : m = t : (m && d.push(m), d.push(t), m = null)
}), m && d.push(m), d.length) {
var v = 0,
p = l.length,
g = 0,
b = 0,
y = !1;
for (b = 0; b < d.length; b++) {
var w = d[b].length;
if (g + w >= c) {
y = g + w == c;
break
}
g += w
}
if (b >= d.length - 1) {
if (v = (p = l.length) - d.last().length, t && i.NOT_WORD.exec(d.last())) return
} else if (y && !i.NOT_WORD.exec(d[b + 1])) p = (v = g + d[b].length) + d[1 + b].length, e && /\s/.exec(d[b + 2] || "a") && (p += 1);
else if (i.NOT_WORD.exec(d[b])) {
if (t) return;
p = (v = g + d[b].length) + d[1 + b].length
} else p = (v = g) + d[b].length, e && /\s/.exec(d[b + 1] || "a") && (p += 1);
n.moveToBookmark({
containerNode: u[0],
start: v,
end: p
}), this.setRange(n, !0), this.editor.wordCount.updateInSelection()
}
}
}
},
selectPhrase: function() {
if (this.editor.sourceView.inSourceMode) {
var t = this.editor.sourceView.cm,
e = t.findWordAt(t.getCursor());
t.extendSelection(e.anchor, e.head)
} else if (document.activeElement && u.isType(document.activeElement.tagName, "INPUT")) document.activeElement.select();
else {
var n, i = this.getRangy(!0),
o = !1;
if (i) {
if (this.editor.styleBookmark.style) {
var a = this.editor.styleBookmark.style.block;
if (a.indexOf(l.def_footnote) > -1 || a.indexOf(l.def_link) > -1 ? /md-def-(name|url|title)|/gi.exec(document.activeElement.className) && (o = !0, n = r(i.startContainer).closest(".md-def-name, .md-def-url, .md-def-title")[0]) : a.indexOf(l.table) > -1 && (o = !0, n = r(i.startContainer).closest("[mdtype='table_cell']")[0]), n = n || function t(e) {
return e ? e.nodeType === e.ELEMENT_NODE ? e.hasAttribute("md-inline") && e.getAttribute("md-inline") !== l.plain ? e : e.hasAttribute("mdtype") ? e : e.classList.contains("md-def-name") || e.classList.contains("md-def-content") || e.classList.contains("md-def-title") ? e : t(e.parentElement) : e.nodeType === e.TEXT_NODE ? t(e.parentElement) : null : null
}(i.startContainer)) return c = i, f = o, (s = n).getAttribute("md-inline") == l.image && (f = !1, s = s.children[0]), f ? c.selectNodeContents(s) : (c.selectNode(s), editor.selection.deRange(c)), this.setRange(i, !0)
}
return this.selectWord()
}
var s, c, f
}
},
isCrossBlock: function(t) {
return (t = t || this.getRangy()) ? !t.collapsed && this.editor.getJQueryElem(t.commonAncestorContainer).find("[mdtype]").length : t
},
handleMouseSelection: function(t) {
if ("false" == this.editor.writingArea.getAttribute("contenteditable")) {
this.getBlockFromMouseEvent(t).closest(".md-focus").length || this.editor.writingArea.setAttribute("contenteditable", "true")
}
},
getBlockFromMouseEvent: function(t) {
var e = t.target;
return this.editor.writingArea.contains(t.target) || (e = document.elementFromPoint(t.clientX, t.clientY)), r(e).closest("[cid]")
},
getTextAround: function() {
var t, e, n = this.getRangy();
if (n && n.collapsed) {
var i = r(n.startContainer).closest("[md-inline='plain'], .md-lang")[0];
if (i) {
var o = n.getBookmark(i);
return n.setStartBefore(i), t = n.toString(), n.collapse(!1), n.setEndAfter(i), e = n.toString(), n.setStart(i, 0), [t, e, o]
}
}
return []
},
getTextInSelection: function() {
var t = r(document.activeElement).closest(".CodeMirror");
if (t.length) {
return t[0].CodeMirror.getSelection()
}
var e = this.getRangy();
if (e && !e.collapsed && r(e.commonAncestorContainer).closest("#write").length) {
return r(r.parseHTML("<div>" + e.toHtml() + "</div>")).find("[mdtype]").after("\n").filter(".md-toc").text("[toc]").end().filter(".md-math-block").text(function() {
return r(this).find("script").html()
}).end().find(".CodeMirror-gutter-wrapper").remove().end().end().text()
}
return ""
},
extendRange: function(t, e) {
if (t.commonAncestorContainer.nodeType === document.TEXT_NODE) {
if (e > 0 && t.endOffset + e <= t.commonAncestorContainer.length) return t.setEnd(t.commonAncestorContainer, t.endOffset + e), t;
if (e < 0 && t.startOffset + e >= 0) return t.setStart(t.commonAncestorContainer, t.startOffset + e), t
}
var n = r(t.startContainer).closest("[cid]")[0],
i = t.getBookmark(n);
return e > 0 ? i.end += e : i.start += e, t.moveToBookmark(i), t
},
createRange: function(t, e, n, i) {
var r = o.createRange();
return r.setStart(t, e), r.setEnd(n, i), r.startContainer ? r : null
},
moveToSelectable: function(t, e) {
return _(this.editor, t, e)
},
includeTrailMeta: function(t) {
if (!t || t.collapsed) return t;
function e(n, i, o) {
var a = i ? n.previousElementSibling : n.nextElementSibling;
return n == t.commonAncestorContainer || n.parentElement == t.commonAncestorContainer || !n.parentElement || n.getAttribute && n.getAttribute("cid") ? o : (a && a.classList && a.classList.contains("md-meta") && !r(a.parentElement).closest(".md-expand").length && (o = a), e(n.parentElement, i, o))
}
var n;
if (0 == t.startOffset) {
var i = e(t.startContainer, !0);
i && (n = !0, t.setStart(i, 0))
}
if (t.endContainer.childNodes && t.endOffset == t.endContainer.childNodes.length || t.endContainer.nodeType == document.TEXT_NODE && t.endOffset == t.endContainer.nodeValue.length) {
var o = e(t.endContainer, !1);
o && (n = !0, t.setEnd(o, o.childNodes.length))
}
return n && this.setRange(t, !0), t
}
};
var y = function(t) {
t && (t.codemirrorIgnore = !0, t.preventDefault(), t.stopPropagation())
},
w = function(t, e) {
return u.isType(t, u.TYPE.hr, u.TYPE.toc) && (!e || e[0].hasAttribute("tabindex"))
},
F = function(t) {
var e = t[0];
return e.childElementCount > 0 && function() {
for (var t = 0; t < e.childElementCount; t++)
if (e.children[0].getAttribute("md-inline") !== l.image) return !1;
return !0
}()
},
k = function(t, e, n) {
var i;
if (e.getAttribute("mdtype") === l.fences && (i = t.fences.getCm(e.getAttribute("cid"))), e.getAttribute("mdtype") === l.math_block && (i = t.mathBlock.startEditing(r(e))), e.getAttribute("mdtype") === l.html_block && (i = t.htmlBlock.startEditing(r(e))), i) return i.focus(), i.setCursor(n), !0
},
x = function(t, e) {
if (void 0 != e) {
var n = t.cursorCoords(t.getCursor());
n.left = n.right = e;
var i = t.coordsChar(n);
t.setCursor(i)
}
},
_ = function(t, e, n, i, r, o) {
if (!n) return !1;
var a = t.findElemById(n.id);
t.lastCursor = t.selection.buildUndo();
var s = !r;
if (u.isType(n, l.fences)) return (c = t.fences.getCm(n.id)).focus(), e ? setTimeout(function() {
a.find(".ty-input-after").focus()
}, 0) : (c.execCommand(e ? "goDocEnd" : "goDocStart"), x(c, o)), y(i), !0;
if (u.isType(n, l.math_block)) return e ? (c = t.mathBlock.startEditing(a, !n.get("tagAfter") && "end", s), n.get("tagAfter") ? setTimeout(function() {
t.selection.selectAllElem(a.find(".ty-input-after").focus())
}, 0) : x(c, o)) : (c = t.mathBlock.startEditing(a, !n.get("tagBefore") && "start", s), n.get("tagBefore") ? setTimeout(function() {
t.selection.selectAllElem(a.find(".ty-input-before").focus())
}, 0) : x(c, o)), y(i), !0;
if (u.isType(n, l.html_block)) {
var c = t.htmlBlock.startEditing(a, e ? "end" : "start", s);
return x(c, o), y(i), !0
}
return !!w(n) && (y(i), window.getSelection().removeAllRanges(), t.findElemById(n.id).focus(), t.refocus(), !0)
},
$ = function(t) {
var e, n = t.getClientRects(),
i = n.length && n[n.length - 1];
return !i && t.collapsed ? "write" == (e = t.startContainer.nodeType == document.TEXT_NODE ? t.startContainer.parentElement : t.startContainer).getAttribute("id") ? null : (i = e.getBoundingClientRect()).height > 150 ? null : i : i
};
n.exports = h, n.exports.buildRange = function(t, e, n) {
if (!t) return window.getSelection().removeAllRanges();
var i = 0,
r = o.createRange(),
a = !1,
s = {};
r.collapseToPoint(t, 0);
try {
! function t(o) {
if (3 == o.nodeType) {
var u = i + o.textContent.length;
if (!a && e >= i && e <= u && (r.setStart(o, e - i), a = !0), a && n >= i && n <= u) throw r.setEnd(o, n - i), s;
i = u
} else
for (var c = 0, l = o.childNodes.length; c < l; ++c) t(o.childNodes[c])
}(t)
} catch (t) {
if (t == s) return r;
throw t
}
}, n.exports.rangy = o
}), $__System.registerDynamic("17", [], !0, function(t, e, n) {
this || self;
var i = ["a", "abbr", "acronym", "address", "area", "article", "aside", "audio", "b", "bdi", "bdo", "big", "blink", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "content", "data", "datalist", "dd", "decorator", "del", "details", "dfn", "dir", "div", "dl", "dt", "element", "em", "fieldset", "figcaption", "figure", "font", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "header", "hgroup", "hr", "i", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "map", "mark", "marquee", "menu", "menuitem", "meter", "nav", "nobr", "ol", "optgroup", "option", "output", "p", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "section", "select", "shadow", "small", "source", "spacer", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "tt", "u", "ul", "var", "video", "wbr", "iframe", "dialog", "embed"],
r = ["svg", "a", "altglyph", "altglyphdef", "altglyphitem", "animatecolor", "animatemotion", "animatetransform", "audio", "canvas", "circle", "clippath", "defs", "desc", "ellipse", "filter", "font", "g", "glyph", "glyphref", "hkern", "image", "line", "lineargradient", "marker", "mask", "metadata", "mpath", "path", "pattern", "polygon", "polyline", "radialgradient", "rect", "stop", "style", "switch", "symbol", "text", "textpath", "title", "tref", "tspan", "video", "view", "vkern"],
o = ["feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence"],
a = ["math", "menclose", "merror", "mfenced", "mfrac", "mglyph", "mi", "mlabeledtr", "mmuliscripts", "mn", "mo", "mover", "mpadded", "mphantom", "mroot", "mrow", "ms", "mpspace", "msqrt", "mystyle", "msub", "msup", "msubsup", "mtable", "mtd", "mtext", "mtr", "munder", "munderover"],
s = ["#text"],
u = ["accept", "action", "align", "alt", "autocomplete", "background", "bgcolor", "border", "cellpadding", "cellspacing", "checked", "cite", "class", "clear", "color", "cols", "colspan", "coords", "crossorigin", "datetime", "default", "dir", "disabled", "download", "enctype", "face", "for", "headers", "height", "hidden", "high", "href", "hreflang", "id", "integrity", "ismap", "label", "lang", "list", "loop", "low", "max", "maxlength", "media", "method", "min", "multiple", "name", "noshade", "novalidate", "nowrap", "open", "optimum", "pattern", "placeholder", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "rev", "reversed", "role", "rows", "rowspan", "spellcheck", "scope", "selected", "shape", "size", "sizes", "span", "srclang", "start", "src", "srcset", "step", "style", "summary", "tabindex", "title", "type", "usemap", "valign", "value", "width", "xmlns", "charset", "async", "srcdoc"],
c = ["accent-height", "accumulate", "additivive", "alignment-baseline", "ascent", "attributename", "attributetype", "azimuth", "basefrequency", "baseline-shift", "begin", "bias", "by", "class", "clip", "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile", "color-rendering", "cx", "cy", "d", "dx", "dy", "diffuseconstant", "direction", "display", "divisor", "dur", "edgemode", "elevation", "end", "fill", "fill-opacity", "fill-rule", "filter", "flood-color", "flood-opacity", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "fx", "fy", "g1", "g2", "glyph-name", "glyphref", "gradientunits", "gradienttransform", "height", "href", "id", "image-rendering", "in", "in2", "k", "k1", "k2", "k3", "k4", "kerning", "keypoints", "keysplines", "keytimes", "lang", "lengthadjust", "letter-spacing", "kernelmatrix", "kernelunitlength", "lighting-color", "local", "marker-end", "marker-mid", "marker-start", "markerheight", "markerunits", "markerwidth", "maskcontentunits", "maskunits", "max", "mask", "media", "method", "mode", "min", "name", "numoctaves", "offset", "operator", "opacity", "order", "orient", "orientation", "origin", "overflow", "paint-order", "path", "pathlength", "patterncontentunits", "patterntransform", "patternunits", "points", "preservealpha", "preserveaspectratio", "r", "rx", "ry", "radius", "refx", "refy", "repeatcount", "repeatdur", "restart", "result", "rotate", "scale", "seed", "shape-rendering", "specularconstant", "specularexponent", "spreadmethod", "stddeviation", "stitchtiles", "stop-color", "stop-opacity", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke", "stroke-width", "style", "surfacescale", "tabindex", "targetx", "targety", "transform", "text-anchor", "text-decoration", "text-rendering", "textlength", "type", "u1", "u2", "unicode", "values", "viewbox", "visibility", "vert-adv-y", "vert-origin-x", "vert-origin-y", "width", "word-spacing", "wrap", "writing-mode", "xchannelselector", "ychannelselector", "x", "x1", "x2", "xmlns", "y", "y1", "y2", "z", "zoomandpan"],
l = ["accent", "accentunder", "align", "bevelled", "close", "columnsalign", "columnlines", "columnspan", "denomalign", "depth", "dir", "display", "displaystyle", "fence", "frame", "height", "href", "id", "largeop", "length", "linethickness", "lspace", "lquote", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "minsize", "movablelimits", "notation", "numalign", "open", "rowalign", "rowlines", "rowspacing", "rowspan", "rspace", "rquote", "scriptlevel", "scriptminsize", "scriptsizemultiplier", "selection", "separator", "separators", "stretchy", "subscriptshift", "supscriptshift", "symmetric", "voffset", "width", "xmlns"],
f = ["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"];
function h(t, e) {
for (var n = e.length; n--;) "string" == typeof e[n] && (e[n] = e[n].toLowerCase()), t[e[n]] = !0;
return t
}
function d(t) {
var e = {},
n = void 0;
for (n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);
return e
}
var m = /\{\{[\s\S]*|[\s\S]*\}\}/gm,
v = /<%[\s\S]*|[\s\S]*%>/gm,
p = /^data-[\-\w.\u00B7-\uFFFF]/,
g = /^aria-[\-\w]+$/,
b = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,
y = /^(?:\w+script|data):/i,
w = /[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,
F = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) {
return typeof t
} : function(t) {
return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t
};
function k(t) {
if (Array.isArray(t)) {
for (var e = 0, n = Array(t.length); e < t.length; e++) n[e] = t[e];
return n
}
return Array.from(t)
}
var x = function() {
return "undefined" == typeof window ? null : window
};
var _ = function t() {
var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : x(),
n = function(e) {
return t(e)
};
if (n.version = "1.0.4", n.removed = [], !e || !e.document || 9 !== e.document.nodeType) return n.isSupported = !1, n;
var _ = e.document,
$ = !1,
E = !1,
C = e.document,
A = e.DocumentFragment,
S = e.HTMLTemplateElement,
T = e.Node,
M = e.NodeFilter,
D = e.NamedNodeMap,
L = void 0 === D ? e.NamedNodeMap || e.MozNamedAttrMap : D,
R = e.Text,
B = e.Comment,
I = e.DOMParser,
N = e.XMLHttpRequest,
O = void 0 === N ? e.XMLHttpRequest : N,
j = e.encodeURI,
P = void 0 === j ? e.encodeURI : j;
if ("function" == typeof S) {
var q = C.createElement("template");
q.content && q.content.ownerDocument && (C = q.content.ownerDocument)
}
var U = C,
z = U.implementation,
H = U.createNodeIterator,
W = U.getElementsByTagName,
J = U.createDocumentFragment,
Y = _.importNode,
G = {};
n.isSupported = z && void 0 !== z.createHTMLDocument && 9 !== C.documentMode;
var K = m,
V = v,
Q = p,
X = g,
Z = y,
tt = w,
et = b,
nt = null,
it = h({}, [].concat(k(i), k(r), k(o), k(a), k(s))),
rt = null,
ot = h({}, [].concat(k(u), k(c), k(l), k(f))),
at = null,
st = null,
ut = !0,
ct = !0,
lt = !1,
ft = !1,
ht = !1,
dt = !1,
mt = !1,
vt = !1,
pt = !1,
gt = !1,
bt = !1,
yt = !0,
wt = !0,
Ft = {},
kt = h({}, ["audio", "head", "math", "script", "style", "template", "svg", "video"]),
xt = h({}, ["audio", "video", "img", "source", "image", "iframe"]),
_t = h({}, ["alt", "class", "for", "id", "label", "name", "pattern", "placeholder", "summary", "title", "value", "style", "xmlns"]),
$t = null,
Et = C.createElement("form"),
Ct = function(t) {
"object" !== (void 0 === t ? "undefined" : F(t)) && (t = {}), nt = "ALLOWED_TAGS" in t ? h({}, t.ALLOWED_TAGS) : it, rt = "ALLOWED_ATTR" in t ? h({}, t.ALLOWED_ATTR) : ot, at = "FORBID_TAGS" in t ? h({}, t.FORBID_TAGS) : {}, st = "FORBID_ATTR" in t ? h({}, t.FORBID_ATTR) : {}, Ft = "USE_PROFILES" in t && t.USE_PROFILES, ut = !1 !== t.ALLOW_ARIA_ATTR, ct = !1 !== t.ALLOW_DATA_ATTR, lt = t.ALLOW_UNKNOWN_PROTOCOLS || !1, ft = t.SAFE_FOR_JQUERY || !1, ht = t.SAFE_FOR_TEMPLATES || !1, dt = t.WHOLE_DOCUMENT || !1, pt = t.RETURN_DOM || !1, gt = t.RETURN_DOM_FRAGMENT || !1, bt = t.RETURN_DOM_IMPORT || !1, vt = t.FORCE_BODY || !1, yt = !1 !== t.SANITIZE_DOM, wt = !1 !== t.KEEP_CONTENT, et = t.ALLOWED_URI_REGEXP || et, ht && (ct = !1), gt && (pt = !0), Ft && (nt = h({}, [].concat(k(s))), rt = [], !0 === Ft.html && (h(nt, i), h(rt, u)), !0 === Ft.svg && (h(nt, r), h(rt, c), h(rt, f)), !0 === Ft.svgFilters && (h(nt, o), h(rt, c), h(rt, f)), !0 === Ft.mathMl && (h(nt, a), h(rt, l), h(rt, f))), t.ADD_TAGS && (nt === it && (nt = d(nt)), h(nt, t.ADD_TAGS)), t.ADD_ATTR && (rt === ot && (rt = d(rt)), h(rt, t.ADD_ATTR)), t.ADD_URI_SAFE_ATTR && h(_t, t.ADD_URI_SAFE_ATTR), wt && (nt["#text"] = !0), Object && "freeze" in Object && Object.freeze(t), $t = t
},
At = function(t) {
n.removed.push({
element: t
});
try {
t.parentNode.removeChild(t)
} catch (e) {
t.outerHTML = ""
}
},
St = function(t, e) {
try {
n.removed.push({
attribute: e.getAttributeNode(t),
from: e
})
} catch (t) {
n.removed.push({
attribute: null,
from: e
})
}
e.removeAttribute(t)
},
Tt = function(t) {
var e = void 0,
n = void 0;
if (vt && (t = "<remove></remove>" + t), E) {
try {
t = P(t)
} catch (t) {}
var i = new O;
i.responseType = "document", i.open("GET", "data:text/html;charset=utf-8," + t, !1), i.send(null), e = i.response
}
if ($) try {
e = (new I).parseFromString(t, "text/html")
} catch (t) {}
return e && e.documentElement || ((n = (e = z.createHTMLDocument("")).body).parentNode.removeChild(n.parentNode.firstElementChild), n.outerHTML = t), W.call(e, dt ? "html" : "body")[0]
};
n.isSupported && function() {
var t = Tt('<svg><g onload="this.parentNode.remove()"></g></svg>');
t.querySelector("svg") || (E = !0);
try {
(t = Tt('<svg><p><style><img src="</style><img src=x onerror=alert(1)//">')).querySelector("svg img") && ($ = !0)
} catch (t) {}
}();
var Mt = function(t) {
return H.call(t.ownerDocument || t, t, M.SHOW_ELEMENT | M.SHOW_COMMENT | M.SHOW_TEXT, function() {
return M.FILTER_ACCEPT
}, !1)
},
Dt = function(t) {
return "object" === (void 0 === T ? "undefined" : F(T)) ? t instanceof T : t && "object" === (void 0 === t ? "undefined" : F(t)) && "number" == typeof t.nodeType && "string" == typeof t.nodeName
},
Lt = function(t, e, i) {
G[t] && G[t].forEach(function(t) {
t.call(n, e, i, $t)
})
},
Rt = function(t) {
var e = void 0;
if (Lt("beforeSanitizeElements", t, null), !((i = t) instanceof R || i instanceof B || "string" == typeof i.nodeName && "string" == typeof i.textContent && "function" == typeof i.removeChild && i.attributes instanceof L && "function" == typeof i.removeAttribute && "function" == typeof i.setAttribute)) return At(t), !0;
var i, r = t.nodeName.toLocaleLowerCase();
if (Lt("uponSanitizeElement", t, {
tagName: r,
allowedTags: nt
}), !nt[r] || at[r]) {
if (wt && !kt[r] && "function" == typeof t.insertAdjacentHTML) try {
t.insertAdjacentHTML("AfterEnd", t.innerHTML)
} catch (t) {}
return At(t), !0
}
return !ft || t.firstElementChild || t.content && t.content.firstElementChild || !/</g.test(t.textContent) || (n.removed.push({
element: t.cloneNode()
}), t.innerHTML = t.textContent.replace(/</g, "&lt;")), ht && 3 === t.nodeType && (e = (e = (e = t.textContent).replace(K, " ")).replace(V, " "), t.textContent !== e && (n.removed.push({
element: t.cloneNode()
}), t.textContent = e)), Lt("afterSanitizeElements", t, null), !1
},
Bt = function(t) {
var e = void 0,
i = void 0,
r = void 0,
o = void 0,
a = void 0,
s = void 0,
u = void 0;
if (Lt("beforeSanitizeAttributes", t, null), s = t.attributes) {
var c = {
attrName: "",
attrValue: "",
keepAttr: !0,
allowedAttributes: rt
};
for (u = s.length; u--;) {
if (i = (e = s[u]).name, r = e.value.trim(), o = i.toLocaleLowerCase(), c.attrName = o, c.attrValue = r, c.keepAttr = !0, Lt("uponSanitizeAttribute", t, c), r = c.attrValue, "name" === o && "IMG" === t.nodeName && s.id) a = s.id, s = Array.prototype.slice.apply(s), St("id", t), St(i, t), s.indexOf(a) > u && t.setAttribute("id", a.value);
else {
if ("INPUT" === t.nodeName && "type" === o && "file" === r && (rt[o] || !st[o])) continue;
"id" === i && t.setAttribute(i, ""), St(i, t)
}
if (c.keepAttr && (!yt || "id" !== o && "name" !== o || !(r in C || r in Et))) {
if (ht && (r = (r = r.replace(K, " ")).replace(V, " ")), ct && Q.test(o));
else if (ut && X.test(o));
else {
if (!rt[o] || st[o]) continue;
if (_t[o]);
else if (et.test(r.replace(tt, "")));
else if ("src" !== o && "xlink:href" !== o || 0 !== r.indexOf("data:") || !xt[t.nodeName.toLocaleLowerCase()])
if (lt && !Z.test(r.replace(tt, "")));
else if (r) continue
}
try {
t.setAttribute(i, r), n.removed.pop()
} catch (t) {}
}
}
Lt("afterSanitizeAttributes", t, null)
}
},
It = function t(e) {
var n = void 0,
i = Mt(e);
for (Lt("beforeSanitizeShadowDOM", e, null); n = i.nextNode();) Lt("uponSanitizeShadowNode", n, null), Rt(n) || (n.content instanceof A && t(n.content), Bt(n));
Lt("afterSanitizeShadowDOM", e, null)
};
return n.sanitize = function(t, i) {
var r = void 0,
o = void 0,
a = void 0,
s = void 0,
u = void 0;
if (t || (t = "\x3c!--\x3e"), "string" != typeof t && !Dt(t)) {
if ("function" != typeof t.toString) throw new TypeError("toString is not a function");
if ("string" != typeof(t = t.toString())) throw new TypeError("dirty is not a string, aborting")
}
if (!n.isSupported) {
if ("object" === F(e.toStaticHTML) || "function" == typeof e.toStaticHTML) {
if ("string" == typeof t) return e.toStaticHTML(t);
if (Dt(t)) return e.toStaticHTML(t.outerHTML)
}
return t
}
if (mt || Ct(i), n.removed = [], t instanceof T) 1 === (o = (r = Tt("\x3c!--\x3e")).ownerDocument.importNode(t, !0)).nodeType && "BODY" === o.nodeName ? r = o : r.appendChild(o);
else {
if (!pt && !dt && -1 === t.indexOf("<")) return t;
if (!(r = Tt(t))) return pt ? null : ""
}
vt && At(r.firstChild);
for (var c = Mt(r); a = c.nextNode();) 3 === a.nodeType && a === s || Rt(a) || (a.content instanceof A && It(a.content), Bt(a), s = a);
if (pt) {
if (gt)
for (u = J.call(r.ownerDocument); r.firstChild;) u.appendChild(r.firstChild);
else u = r;
return bt && (u = Y.call(_, u, !0)), u
}
return dt ? r.outerHTML : r.innerHTML
}, n.setConfig = function(t) {
Ct(t), mt = !0
}, n.clearConfig = function() {
$t = null, mt = !1
}, n.addHook = function(t, e) {
"function" == typeof e && (G[t] = G[t] || [], G[t].push(e))
}, n.removeHook = function(t) {
G[t] && G[t].pop()
}, n.removeHooks = function(t) {
G[t] && (G[t] = [])
}, n.removeAllHooks = function() {
G = {}
}, n
}();
n.exports = _
}), $__System.registerDynamic("25", ["e"], !0, function(t, e, n) {
this || self;
var i = t("e"),
r = function() {
var t = "autoComplt-list",
e = "autoComplt-hint",
n = "active",
r = 10,
o = 100,
a = {
attr: "data-listStatus",
open: "open"
},
s = {
up: 38,
down: 40,
esc: 27,
enter: 13,
left: 37,
right: 39
},
u = {
autoCompltList: {
maxHeight: "none",
border: "1px solid #aaa",
padding: "0",
margin: "0",
zIndex: 99,
overflowX: "hidden",
overflowY: "auto",
display: "none",
position: "absolute",
backgroundColor: "#fff"
},
autoCompltHint: {
height: "1.5em",
padding: "2px 6px 2px 10px",
margin: "6px 0",
overflow: "hidden",
listStyleType: "none",
color: "#000",
backgroundColor: "#fff",
cursor: "default",
fontSize: "1em"
},
autoCompltHintSelected: {
color: "#fff",
backgroundColor: "#3399ff"
}
},
c = function(t) {
return (t = t || window.event).target = t.target || t.srcElement, t
},
l = function(t, e, n) {
t.addEventListener ? t.addEventListener(e, n) : t.attachEvent && t.attachEvent("on" + e, n)
},
f = function(t, e, n) {
t.removeEventListener ? t.removeEventListener(e, n) : t.detachEvent && t.detachEvent("on" + e, n)
},
h = function(t, e) {
var n = null;
if (window.getComputedStyle) n = window.getComputedStyle(t)[e] || null;
else if (t.currentStyle) {
n = t.currentStyle && t.currentStyle[e];
var i, r, o = t.style;
null == n && o && o[e] && (n = o[e]), i = o.left, (r = t.runtimeStyle && t.runtimeStyle.left) && (t.runtimeStyle.left = t.currentStyle.left), o.left = "fontSize" === e ? "1em" : n, n = o.pixelLeft + "px", o.left = i, r && (t.runtimeStyle.left = r)
}
return n
},
d = {
buildElem: function(t) {
var e = document.createElement("DIV");
return e.innerHTML = t, e.firstChild.cloneNode(!0)
},
buildHint: function(t, n) {
if ("string" == typeof t && t) {
return t = this.buildElem('<li class="' + e + '">' + t + "</li>")
}
return null
},
buildList: function(e) {
return this.buildElem('<div class="auto-suggest-container"><ul class="' + t + '"></ul></div>')
}
},
m = function(t) {
this.uiElem = null, this.assocInput = t, this.mouseOnList = !1, this.pauseMouseoverSelection = !1, this.pauseMouseoutDeselection = !1, this.maxHintNum = r, this.styles = JSON.parse(JSON.stringify(u))
};
m.prototype.genList = function() {
if (!this.uiElem) {
var t = this;
this.uiElem = d.buildList(this.styles), l(this.uiElem, "mouseover", function(e) {
e = c(e), t.isHint(e.target) && (t.select(e.target), t.autoScroll())
}), l(this.uiElem, "mouseout", function(e) {
e = c(e), t.deselect()
}), l(this.uiElem, "mousedown", function(e) {
t.mouseOnList = !0, "INPUT" !== t.assocInput.tagName && t.getSelected() && e.preventDefault()
}), l(this.uiElem, "mouseup", function(e) {
e = c(e), t.isHint(e.target) && (t.select(e.target), p(t.assocInput, t.getSelected().innerHTML), t.assocInput.autoComplt.close(), i(t.assocInput).trigger("change"))
}), document.body.appendChild(this.uiElem)
}
}, m.prototype.isHint = function(t) {
if (t && "object" == typeof t && 1 === t.nodeType) {
return (" " + t.className + " ").indexOf(" " + e + " ") >= 0
}
return !1
}, m.prototype.putHints = function(t) {
var e = 0;
if (t instanceof Array) {
var n, i, r = [];
for (i = Math.min(t.length, this.maxHintNum), n = 0; n < i; n++) r.push(d.buildHint(t[n], this.styles)), r[r.length - 1] || r.pop();
if (r.length > 0) {
var o = document.createDocumentFragment();
for (n = 0, e = r.length; n < e; n++) o.appendChild(r[n]);
this.clearHints(), this.genList(), this.uiElem.querySelector("ul").appendChild(o)
}
}
return e
}, m.prototype.clearHints = function() {
this.uiElem && (this.uiElem.querySelector("ul").innerHTML = "")
}, m.prototype.isOpen = function() {
return !!this.uiElem && this.uiElem.getAttribute(a.attr) == a.open
}, m.prototype.open = function() {
var t;
if (this.uiElem && (t = this.uiElem.querySelectorAll("." + e)) && t.length) {
var n, i;
for (i = this.assocInput.getBoundingClientRect(), this.uiElem.style.top = (document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + i.bottom + "px", this.uiElem.style.left = i.left + "px", i = i.right - i.left - parseFloat(h(this.uiElem, "borderLeftWidth")) - parseFloat(h(this.uiElem, "borderRightWidth")), this.uiElem.style.width = i + "px", n = 0, i = 0; n < t.length; n++) i += parseFloat(h(t[n], "height")) + parseFloat(h(t[n], "paddingTop")) + parseFloat(h(t[n], "paddingBottom")), t[n + 1] && (i += Math.max(parseFloat(h(t[n], "marginBottom")), parseFloat(h(t[n + 1], "marginTop"))));
i += parseFloat(h(t[0], "marginTop")) + parseFloat(h(t[t.length - 1], "marginBottom")), this.uiElem.style.height = i + 1 + "px", this.uiElem.setAttribute(a.attr, a.open), this.uiElem.classList.add("ty-show")
}
}, m.prototype.close = function() {
this.uiElem && (this.mouseOnList = !1, this.uiElem.parentNode.removeChild(this.uiElem), this.uiElem = null, i(this.assocInput).trigger("change"))
}, m.prototype.autoScroll = function() {
var t = this.getSelected();
if (t) {
var e, n = 0,
i = 0,
r = t.clientHeight,
o = parseFloat(h(t, "marginTop")),
a = parseFloat(h(t, "marginBottom"));
for (i = r + ((e = t.previousSibling) ? Math.max(o, a) : o); e;) n += r, n += (e = e.previousSibling) ? Math.max(o, a) : o;
(this.uiElem.clientHeight + this.uiElem.scrollTop - n < i || n - this.uiElem.scrollTop < i) && (this.uiElem.scrollTop = n)
}
}, m.prototype.select = function(t) {
if (this.uiElem) {
var i = null;
if (this.isHint(t)) i = t;
else if ("number" == typeof t && (t >= 0 || -1 === t)) {
var r = this.uiElem.querySelectorAll("." + e);
r.length > 0 && (i = r[i = -1 === (i = +t) || i > r.length - 1 ? r.length - 1 : i])
}
null !== i && (this.deselect(), i.className += " " + n)
}
}, m.prototype.deselect = function() {
if (this.uiElem) {
var t = this.getSelected();
t && (t.className = e)
}
}, m.prototype.getSelected = function() {
return this.uiElem ? this.uiElem.querySelector("." + n) || null : null
};
var v = function(t) {
return "INPUT" == t.tagName ? t.value : t.textContent
},
p = function(t, e) {
if ("INPUT" == t.tagName) t.value = e;
else if (t.textContent = e, e) {
var n = document.createRange();
n.setStart(t.childNodes[0], e.length), n.setEnd(t.childNodes[0], e.length);
var i = window.getSelection();
i.removeAllRanges(), i.addRange(n)
}
};
return {
enable: function(t, e) {
if (t && 1 === t.nodeType && !t.autoComplt) {
t.autoComplt = {};
var n = o,
r = !0,
a = "",
u = null,
c = new m(t),
h = function() {
if (r) {
var t = c.getSelected();
p(this, t ? t.innerHTML : a)
}
},
d = function(e) {
c.mouseOnList && "INPUT" == t.tagName && (t.focus(), c.mouseOnList = !1), t.autoComplt.close()
},
g = function(e) {
if (r)
if ("keydown" == e.type) {
if (e.keyCode === s.enter) return e.preventDefault();
if (c.isOpen() && (e.keyCode === s.up || e.keyCode === s.down)) {
var o = c.getSelected();
if (e.keyCode === s.up) {
if (!o) return void t.autoComplt.close();
e.preventDefault(), o.previousSibling ? c.select(o.previousSibling) : c.deselect()
} else e.keyCode === s.down && (e.preventDefault(), o ? o.nextSibling ? c.select(o.nextSibling) : c.deselect() : c.select(0));
c.autoScroll(), h.call(t)
}
} else if ("keyup" == e.type) {
var l = !1;
switch (e.keyCode) {
case s.up:
case s.down:
e.preventDefault();
break;
case s.left:
case s.right:
break;
case s.esc:
c.isOpen() && (t.value = a, t.autoComplt.close());
break;
case s.enter:
c.isOpen() && (h.call(t), t.autoComplt.close(), i(t).trigger("change"));
break;
default:
l = !0
}
l && function() {
if (v(this).length > 0 && r && "function" == typeof u && a !== v(this)) {
var e = {};
e.call = function() {
u.call(e.that, e.compltTarget, e.openHint)
}, e.that = t, e.compltTarget = a = v(this), e.openHint = function(n) {
if (e.compltTarget === a)
if (c.putHints(n)) {
var r = i(t).offset();
r.top += t.offsetHeight + 5, c.open(), i(c.uiElem).css("min-width", 100), i(c.uiElem).offset(r)
} else e.that.autoComplt.close()
}, setTimeout(e.call, n)
}
}.call(t)
}
};
return t.autoComplt.setHintsFetcher = function(t) {
return "function" == typeof t && (u = t, !0)
}, t.autoComplt.config = function(t) {
if (t instanceof Object) {
var e, i = {};
return (e = Math.floor(t.delay)) > 0 && (n = i.delay = e), (e = Math.floor(t.maxHintNum)) > 0 && (c.maxHintNum = i.maxHintNum = e), i
}
return !1
}, t.autoComplt.close = function() {
a = "", c.close()
}, t.autoComplt.enable = function() {
r = !0
}, t.autoComplt.disable = function() {
this.close(), r = !1
}, t.autoComplt.destroy = function() {
f(t, "blur", d), f(t, "keyup", g), f(t, "keydown", g), this.close(), delete t.autoComplt
}, l(t, "blur", d), l(t, "keyup", g), l(t, "keydown", g), e instanceof Object && (t.autoComplt.config(e), t.autoComplt.setHintsFetcher(e.hintsFetcher)), t
}
return null
}
}
}();
n.exports = r
}), $__System.registerDynamic("1f", [], !0, function(t, e, n) {
this || self;
n.exports = function() {
"use strict";
var t = navigator.userAgent,
e = navigator.platform,
n = /gecko\/\d/i.test(t),
i = /MSIE \d/.test(t),
r = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(t),
o = /Edge\/(\d+)/.exec(t),
a = i || r || o,
s = a && (i ? document.documentMode || 6 : +(o || r)[1]),
u = !o && /WebKit\//.test(t),
c = u && /Qt\/\d+\.\d+/.test(t),
l = !o && /Chrome\//.test(t),
f = /Opera\//.test(t),
h = /Apple Computer/.test(navigator.vendor),
d = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(t),
m = /PhantomJS/.test(t),
v = !o && /AppleWebKit/.test(t) && /Mobile\/\w+/.test(t),
p = /Android/.test(t),
g = v || p || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(t),
b = v || /Mac/.test(e),
y = /\bCrOS\b/.test(t),
w = /win/i.test(e),
F = f && t.match(/Version\/(\d*\.\d*)/);
F && (F = Number(F[1])), F && F >= 15 && (f = !1, u = !0);
var k = b && (c || f && (null == F || F < 12.11)),
x = n || a && s >= 9;
function _(t) {
return new RegExp("(^|\\s)" + t + "(?:$|\\s)\\s*")
}
var $ = function(t, e) {
var n = t.className,
i = _(e).exec(n);
if (i) {
var r = n.slice(i.index + i[0].length);
t.className = n.slice(0, i.index) + (r ? i[1] + r : "")
}
};
function E(t) {
for (var e = t.childNodes.length; e > 0; --e) t.removeChild(t.firstChild);
return t
}
function C(t, e) {
return E(t).appendChild(e)
}
function A(t, e, n, i) {
var r = document.createElement(t);
if (n && (r.className = n), i && (r.style.cssText = i), "string" == typeof e) r.appendChild(document.createTextNode(e));
else if (e)
for (var o = 0; o < e.length; ++o) r.appendChild(e[o]);
return r
}
function S(t, e, n, i) {
var r = A(t, e, n, i);
return r.setAttribute("role", "presentation"), r
}
var T;
T = document.createRange ? function(t, e, n, i) {
var r = document.createRange();
return r.setEnd(i || t, n), r.setStart(t, e), r
} : function(t, e, n) {
var i = document.body.createTextRange();
try {
i.moveToElementText(t.parentNode)
} catch (t) {
return i
}
return i.collapse(!0), i.moveEnd("character", n), i.moveStart("character", e), i
};
function M(t, e) {
if (3 == e.nodeType && (e = e.parentNode), t.contains) return t.contains(e);
do {
if (11 == e.nodeType && (e = e.host), e == t) return !0
} while (e = e.parentNode)
}
function D() {
var t;
try {
t = document.activeElement
} catch (e) {
t = document.body || null
}
for (; t && t.shadowRoot && t.shadowRoot.activeElement;) t = t.shadowRoot.activeElement;
return t
}
function L(t, e) {
var n = t.className;
_(e).test(n) || (t.className += (n ? " " : "") + e)
}
function R(t, e) {
for (var n = t.split(" "), i = 0; i < n.length; i++) n[i] && !_(n[i]).test(e) && (e += " " + n[i]);
return e
}
var B = function(t) {
t.select()
};
v ? B = function(t) {
t.selectionStart = 0, t.selectionEnd = t.value.length
} : a && (B = function(t) {
try {
t.select()
} catch (t) {}
});
function I(t) {
var e = Array.prototype.slice.call(arguments, 1);
return function() {
return t.apply(null, e)
}
}
function N(t, e, n) {
e || (e = {});
for (var i in t) !t.hasOwnProperty(i) || !1 === n && e.hasOwnProperty(i) || (e[i] = t[i]);
return e
}
function O(t, e, n, i, r) {
null == e && -1 == (e = t.search(/[^\s\u00a0]/)) && (e = t.length);
for (var o = i || 0, a = r || 0;;) {
var s = t.indexOf("\t", o);
if (s < 0 || s >= e) return a + (e - o);
a += s - o, a += n - a % n, o = s + 1
}
}
var j = function() {
this.id = null
};
j.prototype.set = function(t, e) {
clearTimeout(this.id), this.id = setTimeout(e, t)
};
function P(t, e) {
for (var n = 0; n < t.length; ++n)
if (t[n] == e) return n;
return -1
}
var q = 0,
U = {
toString: function() {
return "CodeMirror.Pass"
}
},
z = {
scroll: !1
},
H = {
origin: "*mouse"
},
W = {
origin: "+move"
};
function J(t, e, n) {
for (var i = 0, r = 0;;) {
var o = t.indexOf("\t", i); - 1 == o && (o = t.length);
var a = o - i;
if (o == t.length || r + a >= e) return i + Math.min(a, e - r);
if (r += o - i, i = o + 1, (r += n - r % n) >= e) return i
}
}
var Y = [""];
function G(t) {
for (; Y.length <= t;) Y.push(K(Y) + " ");
return Y[t]
}
function K(t) {
return t[t.length - 1]
}
function V(t, e) {
for (var n = [], i = 0; i < t.length; i++) n[i] = e(t[i], i);
return n
}
function Q() {}
function X(t, e) {
var n;
return Object.create ? n = Object.create(t) : (Q.prototype = t, n = new Q), e && N(e, n), n
}
var Z = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;
function tt(t) {
return /\w/.test(t) || t > "€" && (t.toUpperCase() != t.toLowerCase() || Z.test(t))
}
function et(t, e) {
return e ? !!(e.source.indexOf("\\w") > -1 && tt(t)) || e.test(t) : tt(t)
}
function nt(t) {
for (var e in t)
if (t.hasOwnProperty(e) && t[e]) return !1;
return !0
}
var it = /[\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 rt(t) {
return t.charCodeAt(0) >= 768 && it.test(t)
}
function ot(t, e, n) {
for (;
(n < 0 ? e > 0 : e < t.length) && rt(t.charAt(e));) e += n;
return e
}
function at(t, e, n) {
for (;;) {
if (Math.abs(e - n) <= 1) return t(e) ? e : n;
var i = Math.floor((e + n) / 2);
t(i) ? n = i : e = i
}
}
function st(t, e) {
if ((e -= t.first) < 0 || e >= t.size) throw new Error("There is no line " + (e + t.first) + " in the document.");
for (var n = t; !n.lines;)
for (var i = 0;; ++i) {
var r = n.children[i],
o = r.chunkSize();
if (e < o) {
n = r;
break
}
e -= o
}
return n.lines[e]
}
function ut(t, e, n) {
var i = [],
r = e.line;
return t.iter(e.line, n.line + 1, function(t) {
var o = t.text;
r == n.line && (o = o.slice(0, n.ch)), r == e.line && (o = o.slice(e.ch)), i.push(o), ++r
}), i
}
function ct(t, e, n) {
var i = [];
return t.iter(e, n, function(t) {
i.push(t.text)
}), i
}
function lt(t, e) {
var n = e - t.height;
if (n)
for (var i = t; i; i = i.parent) i.height += n
}
function ft(t) {
if (null == t.parent) return null;
for (var e = t.parent, n = P(e.lines, t), i = e.parent; i; e = i, i = i.parent)
for (var r = 0; i.children[r] != e; ++r) n += i.children[r].chunkSize();
return n + e.first
}
function ht(t, e) {
var n = t.first;
t: do {
for (var i = 0; i < t.children.length; ++i) {
var r = t.children[i],
o = r.height;
if (e < o) {
t = r;
continue t
}
e -= o, n += r.chunkSize()
}
return n
} while (!t.lines);
for (var a = 0; a < t.lines.length; ++a) {
var s = t.lines[a].height;
if (e < s) break;
e -= s
}
return n + a
}
function dt(t, e) {
return e >= t.first && e < t.first + t.size
}
function mt(t, e) {
return String(t.lineNumberFormatter(e + t.firstLineNumber))
}
function vt(t, e, n) {
if (void 0 === n && (n = null), !(this instanceof vt)) return new vt(t, e, n);
this.line = t, this.ch = e, this.sticky = n
}
function pt(t, e) {
return t.line - e.line || t.ch - e.ch
}
function gt(t, e) {
return t.sticky == e.sticky && 0 == pt(t, e)
}
function bt(t) {
return vt(t.line, t.ch)
}
function yt(t, e) {
return pt(t, e) < 0 ? e : t
}
function wt(t, e) {
return pt(t, e) < 0 ? t : e
}
function Ft(t, e) {
return Math.max(t.first, Math.min(e, t.first + t.size - 1))
}
function kt(t, e) {
if (e.line < t.first) return vt(t.first, 0);
var n = t.first + t.size - 1;
return e.line > n ? vt(n, st(t, n).text.length) : function(t, e) {
var n = t.ch;
return null == n || n > e ? vt(t.line, e) : n < 0 ? vt(t.line, 0) : t
}(e, st(t, e.line).text.length)
}
function xt(t, e) {
for (var n = [], i = 0; i < e.length; i++) n[i] = kt(t, e[i]);
return n
}
var _t = !1,
$t = !1;
function Et(t, e, n) {
this.marker = t, this.from = e, this.to = n
}
function Ct(t, e) {
if (t)
for (var n = 0; n < t.length; ++n) {
var i = t[n];
if (i.marker == e) return i
}
}
function At(t, e) {
for (var n, i = 0; i < t.length; ++i) t[i] != e && (n || (n = [])).push(t[i]);
return n
}
function St(t, e) {
if (e.full) return null;
var n = dt(t, e.from.line) && st(t, e.from.line).markedSpans,
i = dt(t, e.to.line) && st(t, e.to.line).markedSpans;
if (!n && !i) return null;
var r = e.from.ch,
o = e.to.ch,
a = 0 == pt(e.from, e.to),
s = function(t, e, n) {
var i;
if (t)
for (var r = 0; r < t.length; ++r) {
var o = t[r],
a = o.marker;
if (null == o.from || (a.inclusiveLeft ? o.from <= e : o.from < e) || o.from == e && "bookmark" == a.type && (!n || !o.marker.insertLeft)) {
var s = null == o.to || (a.inclusiveRight ? o.to >= e : o.to > e);
(i || (i = [])).push(new Et(a, o.from, s ? null : o.to))
}
}
return i
}(n, r, a),
u = function(t, e, n) {
var i;
if (t)
for (var r = 0; r < t.length; ++r) {
var o = t[r],
a = o.marker;
if (null == o.to || (a.inclusiveRight ? o.to >= e : o.to > e) || o.from == e && "bookmark" == a.type && (!n || o.marker.insertLeft)) {
var s = null == o.from || (a.inclusiveLeft ? o.from <= e : o.from < e);
(i || (i = [])).push(new Et(a, s ? null : o.from - e, null == o.to ? null : o.to - e))
}
}
return i
}(i, o, a),
c = 1 == e.text.length,
l = K(e.text).length + (c ? r : 0);
if (s)
for (var f = 0; f < s.length; ++f) {
var h = s[f];
if (null == h.to) {
var d = Ct(u, h.marker);
d ? c && (h.to = null == d.to ? null : d.to + l) : h.to = r
}
}
if (u)
for (var m = 0; m < u.length; ++m) {
var v = u[m];
if (null != v.to && (v.to += l), null == v.from) {
Ct(s, v.marker) || (v.from = l, c && (s || (s = [])).push(v))
} else v.from += l, c && (s || (s = [])).push(v)
}
s && (s = Tt(s)), u && u != s && (u = Tt(u));
var p = [s];
if (!c) {
var g, b = e.text.length - 2;
if (b > 0 && s)
for (var y = 0; y < s.length; ++y) null == s[y].to && (g || (g = [])).push(new Et(s[y].marker, null, null));
for (var w = 0; w < b; ++w) p.push(g);
p.push(u)
}
return p
}
function Tt(t) {
for (var e = 0; e < t.length; ++e) {
var n = t[e];
null != n.from && n.from == n.to && !1 !== n.marker.clearWhenEmpty && t.splice(e--, 1)
}
return t.length ? t : null
}
function Mt(t) {
var e = t.markedSpans;
if (e) {
for (var n = 0; n < e.length; ++n) e[n].marker.detachLine(t);
t.markedSpans = null
}
}
function Dt(t, e) {
if (e) {
for (var n = 0; n < e.length; ++n) e[n].marker.attachLine(t);
t.markedSpans = e
}
}
function Lt(t) {
return t.inclusiveLeft ? -1 : 0
}
function Rt(t) {
return t.inclusiveRight ? 1 : 0
}
function Bt(t, e) {
var n = t.lines.length - e.lines.length;
if (0 != n) return n;
var i = t.find(),
r = e.find(),
o = pt(i.from, r.from) || Lt(t) - Lt(e);
if (o) return -o;
var a = pt(i.to, r.to) || Rt(t) - Rt(e);
return a || e.id - t.id
}
function It(t, e) {
var n, i = $t && t.markedSpans;
if (i)
for (var r = void 0, o = 0; o < i.length; ++o)(r = i[o]).marker.collapsed && null == (e ? r.from : r.to) && (!n || Bt(n, r.marker) < 0) && (n = r.marker);
return n
}
function Nt(t) {
return It(t, !0)
}
function Ot(t) {
return It(t, !1)
}
function jt(t, e, n, i, r) {
var o = st(t, e),
a = $t && o.markedSpans;
if (a)
for (var s = 0; s < a.length; ++s) {
var u = a[s];
if (u.marker.collapsed) {
var c = u.marker.find(0),
l = pt(c.from, n) || Lt(u.marker) - Lt(r),
f = pt(c.to, i) || Rt(u.marker) - Rt(r);
if (!(l >= 0 && f <= 0 || l <= 0 && f >= 0) && (l <= 0 && (u.marker.inclusiveRight && r.inclusiveLeft ? pt(c.to, n) >= 0 : pt(c.to, n) > 0) || l >= 0 && (u.marker.inclusiveRight && r.inclusiveLeft ? pt(c.from, i) <= 0 : pt(c.from, i) < 0))) return !0
}
}
}
function Pt(t) {
for (var e; e = Nt(t);) t = e.find(-1, !0).line;
return t
}
function qt(t, e) {
var n = st(t, e),
i = Pt(n);
return n == i ? e : ft(i)
}
function Ut(t, e) {
if (e > t.lastLine()) return e;
var n, i = st(t, e);
if (!zt(t, i)) return e;
for (; n = Ot(i);) i = n.find(1, !0).line;
return ft(i) + 1
}
function zt(t, e) {
var n = $t && e.markedSpans;
if (n)
for (var i = void 0, r = 0; r < n.length; ++r)
if ((i = n[r]).marker.collapsed) {
if (null == i.from) return !0;
if (!i.marker.widgetNode && 0 == i.from && i.marker.inclusiveLeft && Ht(t, e, i)) return !0
}
}
function Ht(t, e, n) {
if (null == n.to) {
var i = n.marker.find(1, !0);
return Ht(t, i.line, Ct(i.line.markedSpans, n.marker))
}
if (n.marker.inclusiveRight && n.to == e.text.length) return !0;
for (var r = void 0, o = 0; o < e.markedSpans.length; ++o)
if ((r = e.markedSpans[o]).marker.collapsed && !r.marker.widgetNode && r.from == n.to && (null == r.to || r.to != n.from) && (r.marker.inclusiveLeft || n.marker.inclusiveRight) && Ht(t, e, r)) return !0
}
function Wt(t) {
for (var e = 0, n = (t = Pt(t)).parent, i = 0; i < n.lines.length; ++i) {
var r = n.lines[i];
if (r == t) break;
e += r.height
}
for (var o = n.parent; o; n = o, o = n.parent)
for (var a = 0; a < o.children.length; ++a) {
var s = o.children[a];
if (s == n) break;
e += s.height
}
return e
}
function Jt(t) {
if (0 == t.height) return 0;
for (var e, n = t.text.length, i = t; e = Nt(i);) {
var r = e.find(0, !0);
i = r.from.line, n += r.from.ch - r.to.ch
}
for (i = t; e = Ot(i);) {
var o = e.find(0, !0);
n -= i.text.length - o.from.ch, n += (i = o.to.line).text.length - o.to.ch
}
return n
}
function Yt(t) {
var e = t.display,
n = t.doc;
e.maxLine = st(n, n.first), e.maxLineLength = Jt(e.maxLine), e.maxLineChanged = !0, n.iter(function(t) {
var n = Jt(t);
n > e.maxLineLength && (e.maxLineLength = n, e.maxLine = t)
})
}
var Gt = null;
function Kt(t, e, n) {
var i;
Gt = null;
for (var r = 0; r < t.length; ++r) {
var o = t[r];
if (o.from < e && o.to > e) return r;
o.to == e && (o.from != o.to && "before" == n ? i = r : Gt = r), o.from == e && (o.from != o.to && "before" != n ? i = r : Gt = r)
}
return null != i ? i : Gt
}
var Vt = function() {
var t = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",
e = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";
var n = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,
i = /[stwN]/,
r = /[LRr]/,
o = /[Lb1n]/,
a = /[1n]/;
function s(t, e, n) {
this.level = t, this.from = e, this.to = n
}
return function(u, c) {
var l = "ltr" == c ? "L" : "R";
if (0 == u.length || "ltr" == c && !n.test(u)) return !1;
for (var f = u.length, h = [], d = 0; d < f; ++d) h.push((m = u.charCodeAt(d)) <= 247 ? t.charAt(m) : 1424 <= m && m <= 1524 ? "R" : 1536 <= m && m <= 1785 ? e.charAt(m - 1536) : 1774 <= m && m <= 2220 ? "r" : 8192 <= m && m <= 8203 ? "w" : 8204 == m ? "b" : "L");
for (var m, v = 0, p = l; v < f; ++v) {
var g = h[v];
"m" == g ? h[v] = p : p = g
}
for (var b = 0, y = l; b < f; ++b) {
var w = h[b];
"1" == w && "r" == y ? h[b] = "n" : r.test(w) && (y = w, "r" == w && (h[b] = "R"))
}
for (var F = 1, k = h[0]; F < f - 1; ++F) {
var x = h[F];
"+" == x && "1" == k && "1" == h[F + 1] ? h[F] = "1" : "," != x || k != h[F + 1] || "1" != k && "n" != k || (h[F] = k), k = x
}
for (var _ = 0; _ < f; ++_) {
var $ = h[_];
if ("," == $) h[_] = "N";
else if ("%" == $) {
var E = void 0;
for (E = _ + 1; E < f && "%" == h[E]; ++E);
for (var C = _ && "!" == h[_ - 1] || E < f && "1" == h[E] ? "1" : "N", A = _; A < E; ++A) h[A] = C;
_ = E - 1
}
}
for (var S = 0, T = l; S < f; ++S) {
var M = h[S];
"L" == T && "1" == M ? h[S] = "L" : r.test(M) && (T = M)
}
for (var D = 0; D < f; ++D)
if (i.test(h[D])) {
var L = void 0;
for (L = D + 1; L < f && i.test(h[L]); ++L);
for (var R = "L" == (D ? h[D - 1] : l), B = R == ("L" == (L < f ? h[L] : l)) ? R ? "L" : "R" : l, I = D; I < L; ++I) h[I] = B;
D = L - 1
}
for (var N, O = [], j = 0; j < f;)
if (o.test(h[j])) {
var P = j;
for (++j; j < f && o.test(h[j]); ++j);
O.push(new s(0, P, j))
} else {
var q = j,
U = O.length;
for (++j; j < f && "L" != h[j]; ++j);
for (var z = q; z < j;)
if (a.test(h[z])) {
q < z && O.splice(U, 0, new s(1, q, z));
var H = z;
for (++z; z < j && a.test(h[z]); ++z);
O.splice(U, 0, new s(2, H, z)), q = z
} else ++z;
q < j && O.splice(U, 0, new s(1, q, j))
}
return 1 == O[0].level && (N = u.match(/^\s+/)) && (O[0].from = N[0].length, O.unshift(new s(0, 0, N[0].length))), 1 == K(O).level && (N = u.match(/\s+$/)) && (K(O).to -= N[0].length, O.push(new s(0, f - N[0].length, f))), "rtl" == c ? O.reverse() : O
}
}();
function Qt(t, e) {
var n = t.order;
return null == n && (n = t.order = Vt(t.text, e)), n
}
function Xt(t, e, n) {
var i = ot(t.text, e + n, n);
return i < 0 || i > t.text.length ? null : i
}
function Zt(t, e, n) {
var i = Xt(t, e.ch, n);
return null == i ? null : new vt(e.line, i, n < 0 ? "after" : "before")
}
function te(t, e, n, i, r) {
if (t) {
var o = Qt(n, e.doc.direction);
if (o) {
var a, s = r < 0 ? K(o) : o[0],
u = r < 0 == (1 == s.level) ? "after" : "before";
if (s.level > 0) {
var c = Tn(e, n);
a = r < 0 ? n.text.length - 1 : 0;
var l = Mn(e, c, a).top;
a = at(function(t) {
return Mn(e, c, t).top == l
}, r < 0 == (1 == s.level) ? s.from : s.to - 1, a), "before" == u && (a = Xt(n, a, 1))
} else a = r < 0 ? s.to : s.from;
return new vt(i, a, u)
}
}
return new vt(i, r < 0 ? n.text.length : 0, r < 0 ? "before" : "after")
}
function ee(t, e, n, i) {
var r = Qt(e, t.doc.direction);
if (!r) return Zt(e, n, i);
n.ch >= e.text.length ? (n.ch = e.text.length, n.sticky = "before") : n.ch <= 0 && (n.ch = 0, n.sticky = "after");
var o = Kt(r, n.ch, n.sticky),
a = r[o];
if ("ltr" == t.doc.direction && a.level % 2 == 0 && (i > 0 ? a.to > n.ch : a.from < n.ch)) return Zt(e, n, i);
var s, u = function(t, n) {
return Xt(e, t instanceof vt ? t.ch : t, n)
},
c = function(n) {
return t.options.lineWrapping ? (s = s || Tn(t, e), function(t, e, n, i) {
var r = Pn(t, e, Mn(t, n, i), "line").top;
return Yn(t, e, n, r)
}(t, e, s, n)) : {
begin: 0,
end: e.text.length
}
},
l = c("before" == n.sticky ? u(n, -1) : n.ch);
if ("rtl" == t.doc.direction || 1 == a.level) {
var f = 1 == a.level == i < 0,
h = u(n, f ? 1 : -1);
if (null != h && (f ? h <= a.to && h <= l.end : h >= a.from && h >= l.begin)) {
var d = f ? "before" : "after";
return new vt(n.line, h, d)
}
}
var m = function(t, e, i) {
for (var o = function(t, e) {
return e ? new vt(n.line, u(t, 1), "before") : new vt(n.line, t, "after")
}; t >= 0 && t < r.length; t += e) {
var a = r[t],
s = e > 0 == (1 != a.level),
c = s ? i.begin : u(i.end, -1);
if (a.from <= c && c < a.to) return o(c, s);
if (c = s ? a.from : u(a.to, -1), i.begin <= c && c < i.end) return o(c, s)
}
},
v = m(o + i, i, l);
if (v) return v;
var p = i > 0 ? l.end : u(l.begin, -1);
return null == p || i > 0 && p == e.text.length || !(v = m(i > 0 ? 0 : r.length - 1, i, c(p))) ? null : v
}
var ne = [],
ie = function(t, e, n) {
if (t.addEventListener) {
var i = File.option.passiveEvents && ("scroll" == e || "mousewheel" == e || "DOMMouseScroll" == e);
t.addEventListener(e, n, !!i && {
passive: !0,
capture: !1
})
} else if (t.attachEvent) t.attachEvent("on" + e, n);
else {
var r = t._handlers || (t._handlers = {});
r[e] = (r[e] || ne).concat(n)
}
};
function re(t, e) {
return t._handlers && t._handlers[e] || ne
}
function oe(t, e, n) {
if (t.removeEventListener) t.removeEventListener(e, n, !1);
else if (t.detachEvent) t.detachEvent("on" + e, n);
else {
var i = t._handlers,
r = i && i[e];
if (r) {
var o = P(r, n);
o > -1 && (i[e] = r.slice(0, o).concat(r.slice(o + 1)))
}
}
}
function ae(t, e) {
var n = re(t, e);
if (n.length)
for (var i = Array.prototype.slice.call(arguments, 2), r = 0; r < n.length; ++r) n[r].apply(null, i)
}
function se(t, e, n) {
return "string" == typeof e && (e = {
type: e,
preventDefault: function() {
this.defaultPrevented = !0
}
}), ae(t, n || e.type, t, e), de(e) || e.codemirrorIgnore
}
function ue(t) {
var e = t._handlers && t._handlers.cursorActivity;
if (e)
for (var n = t.curOp.cursorActivityHandlers || (t.curOp.cursorActivityHandlers = []), i = 0; i < e.length; ++i) - 1 == P(n, e[i]) && n.push(e[i])
}
function ce(t, e) {
return re(t, e).length > 0
}
function le(t) {
t.prototype.on = function(t, e) {
ie(this, t, e)
}, t.prototype.off = function(t, e) {
oe(this, t, e)
}
}
function fe(t) {
t.preventDefault ? t.preventDefault() : t.returnValue = !1
}
function he(t) {
t.stopPropagation ? t.stopPropagation() : t.cancelBubble = !0
}
function de(t) {
return null != t.defaultPrevented ? t.defaultPrevented : 0 == t.returnValue
}
function me(t) {
fe(t), he(t)
}
function ve(t) {
return t.target || t.srcElement
}
function pe(t) {
var e = t.which;
return null == e && (1 & t.button ? e = 1 : 2 & t.button ? e = 3 : 4 & t.button && (e = 2)), b && t.ctrlKey && 1 == e && (e = 3), e
}
var ge, be = function() {
if (a && s < 9) return !1;
var t = A("div");
return "draggable" in t || "dragDrop" in t
}();
function ye(t) {
if (null == ge) {
var e = A("span", "​");
C(t, A("span", [e, document.createTextNode("x")])), 0 != t.firstChild.offsetHeight && (ge = e.offsetWidth <= 1 && e.offsetHeight > 2 && !(a && s < 8))
}
var n = ge ? A("span", "​") : A("span", " ", null, "display: inline-block; width: 1px; margin-right: -1px");
return n.setAttribute("cm-text", ""), n
}
var we;
function Fe(t) {
if (null != we) return we;
var e = C(t, document.createTextNode("AخA")),
n = T(e, 0, 1).getBoundingClientRect(),
i = T(e, 1, 2).getBoundingClientRect();
return E(t), !(!n || n.left == n.right) && (we = i.right - n.right < 3)
}
var ke = 3 != "\n\nb".split(/\n/).length ? function(t) {
for (var e = 0, n = [], i = t.length; e <= i;) {
var r = t.indexOf("\n", e); - 1 == r && (r = t.length);
var o = t.slice(e, "\r" == t.charAt(r - 1) ? r - 1 : r),
a = o.indexOf("\r"); - 1 != a ? (n.push(o.slice(0, a)), e += a + 1) : (n.push(o), e = r + 1)
}
return n
} : function(t) {
return t.split(/\r\n?|\n/)
},
xe = window.getSelection ? function(t) {
try {
return t.selectionStart != t.selectionEnd
} catch (t) {
return !1
}
} : function(t) {
var e;
try {
e = t.ownerDocument.selection.createRange()
} catch (t) {}
return !(!e || e.parentElement() != t) && 0 != e.compareEndPoints("StartToEnd", e)
},
_e = function() {
var t = A("div");
return "oncopy" in t || (t.setAttribute("oncopy", "return;"), "function" == typeof t.oncopy)
}(),
$e = null;
var Ee = {},
Ce = {};
function Ae(t) {
if ("string" == typeof t && Ce.hasOwnProperty(t)) t = Ce[t];
else if (t && "string" == typeof t.name && Ce.hasOwnProperty(t.name)) {
var e = Ce[t.name];
"string" == typeof e && (e = {
name: e
}), (t = X(e, t)).name = e.name
} else {
if ("string" == typeof t && /^[\w\-]+\/[\w\-]+\+xml$/.test(t)) return Ae("application/xml");
if ("string" == typeof t && /^[\w\-]+\/[\w\-]+\+json$/.test(t)) return Ae("application/json")
}
return "string" == typeof t ? {
name: t
} : t || {
name: "null"
}
}
function Se(t, e) {
e = Ae(e);
var n = Ee[e.name];
if (!n) return Se(t, "text/plain");
var i = n(t, e);
if (Te.hasOwnProperty(e.name)) {
var r = Te[e.name];
for (var o in r) r.hasOwnProperty(o) && (i.hasOwnProperty(o) && (i["_" + o] = i[o]), i[o] = r[o])
}
if (i.name = e.name, e.helperType && (i.helperType = e.helperType), e.modeProps)
for (var a in e.modeProps) i[a] = e.modeProps[a];
return i
}
var Te = {};
function Me(t, e) {
N(e, Te.hasOwnProperty(t) ? Te[t] : Te[t] = {})
}
function De(t, e) {
if (!0 === e) return e;
if (t.copyState) return t.copyState(e);
var n = {};
for (var i in e) {
var r = e[i];
r instanceof Array && (r = r.concat([])), n[i] = r
}
return n
}
function Le(t, e) {
for (var n; t.innerMode && (n = t.innerMode(e)) && n.mode && n.mode != t;) e = n.state, t = n.mode;
return n && !n.mode && (n = void 0), n || {
mode: t,
state: e
}
}
function Re(t, e, n) {
return !t.startState || t.startState(e, n)
}
var Be = function(t, e) {
this.pos = this.start = 0, this.string = t, this.tabSize = e || 8, this.lastColumnPos = this.lastColumnValue = 0, this.lineStart = 0
};
Be.prototype.eol = function() {
return this.pos >= this.string.length
}, Be.prototype.sol = function() {
return this.pos == this.lineStart
}, Be.prototype.peek = function() {
return this.string.charAt(this.pos) || void 0
}, Be.prototype.next = function() {
if (this.pos < this.string.length) return this.string.charAt(this.pos++)
}, Be.prototype.eat = function(t) {
var e = this.string.charAt(this.pos);
if ("string" == typeof t ? e == t : e && (t.test ? t.test(e) : t(e))) return ++this.pos, e
}, Be.prototype.eatWhile = function(t) {
for (var e = this.pos; this.eat(t););
return this.pos > e
}, Be.prototype.eatSpace = function() {
for (var t = this.pos;
/[\s\u00a0]/.test(this.string.charAt(this.pos));) ++this.pos;
return this.pos > t
}, Be.prototype.skipToEnd = function() {
this.pos = this.string.length
}, Be.prototype.skipTo = function(t) {
var e = this.string.indexOf(t, this.pos);
if (e > -1) return this.pos = e, !0
}, Be.prototype.backUp = function(t) {
this.pos -= t
}, Be.prototype.column = function() {
return this.lastColumnPos < this.start && (this.lastColumnValue = O(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue), this.lastColumnPos = this.start), this.lastColumnValue - (this.lineStart ? O(this.string, this.lineStart, this.tabSize) : 0)
}, Be.prototype.indentation = function() {
return O(this.string, null, this.tabSize) - (this.lineStart ? O(this.string, this.lineStart, this.tabSize) : 0)
}, Be.prototype.match = function(t, e, n) {
if ("string" != typeof t) {
var i = this.string.slice(this.pos).match(t);
return i && i.index > 0 ? null : (i && !1 !== e && (this.pos += i[0].length), i)
}
var r = function(t) {
return n ? t.toLowerCase() : t
};
if (r(this.string.substr(this.pos, t.length)) == r(t)) return !1 !== e && (this.pos += t.length), !0
}, Be.prototype.current = function() {
return this.string.slice(this.start, this.pos)
}, Be.prototype.hideFirstChars = function(t, e) {
this.lineStart += t;
try {
return e()
} finally {
this.lineStart -= t
}
};
function Ie(t, e, n, i) {
var r = [t.state.modeGen],
o = {},
a = ft(e);
"object" == typeof n && (n.lineBefore = t.getLine(a - 1), n.lineAfter = t.getLine(a + 1)), He(t, e.text, t.doc.mode, n, function(t, e) {
return r.push(t, e)
}, o, i);
for (var s = function(i) {
var a = t.state.overlays[i],
s = 1,
u = 0;
He(t, e.text, a.mode, "visiblespace" !== a.mode.name || n, function(t, e) {
for (var n = s; u < t;) {
var i = r[s];
i > t && r.splice(s, 1, t, r[s + 1], i), s += 2, u = Math.min(t, i)
}
if (e)
if (a.opaque) r.splice(n, s - n, t, "overlay " + e), s = n + 2;
else
for (; n < s; n += 2) {
var o = r[n + 1];
r[n + 1] = (o ? o + " " : "") + "overlay " + e
}
}, o)
}, u = 0; u < t.state.overlays.length; ++u) s(u);
return {
styles: r,
classes: o.bgClass || o.textClass ? o : null
}
}
function Ne(t, e, n) {
if (!e.styles || e.styles[0] != t.state.modeGen) {
var i = Oe(t, ft(e)),
r = Ie(t, e, e.text.length > t.options.maxHighlightLength ? De(t.doc.mode, i) : i);
e.stateAfter = i, e.styles = r.styles, r.classes ? e.styleClasses = r.classes : e.styleClasses && (e.styleClasses = null), n === t.doc.frontier && t.doc.frontier++
}
return e.styles
}
function Oe(t, e, n) {
var i = t.doc,
r = t.display;
if (!i.mode.startState) return !0;
var o = function(t, e, n) {
for (var i, r, o = t.doc, a = n ? -1 : e - (t.doc.mode.innerMode ? 1e3 : 100), s = e; s > a; --s) {
if (s <= o.first) return o.first;
var u = st(o, s - 1);
if (u.stateAfter && (!n || s <= o.frontier)) return s;
var c = O(u.text, null, t.options.tabSize);
(null == r || i > c) && (r = s - 1, i = c)
}
return r
}(t, e, n),
a = o > i.first && st(i, o - 1).stateAfter;
return a = a ? De(i.mode, a) : Re(i.mode), i.iter(o, e, function(n) {
"object" == typeof a && (a.lineBefore = t.getLine(e - 1), a.lineAfter = t.getLine(e + 1)), je(t, n.text, a);
var s = o == e - 1 || o % 5 == 0 || o >= r.viewFrom && o < r.viewTo;
n.stateAfter = s ? De(i.mode, a) : null, ++o
}), n && (i.frontier = o), a
}
function je(t, e, n, i) {
var r = t.doc.mode,
o = new Be(e, t.options.tabSize);
for (o.start = o.pos = i || 0, n.lineBefore = n.lineBefore || "", n.lineAfter = n.lineAfter || "", "" == e && Pe(r, n); !o.eol();) qe(r, o, n), o.start = o.pos
}
function Pe(t, e) {
if (t.blankLine) return t.blankLine(e);
if (t.innerMode) {
var n = Le(t, e);
return n.mode.blankLine ? n.mode.blankLine(n.state) : void 0
}
}
function qe(t, e, n, i) {
for (var r = 0; r < 10; r++) {
i && (i[0] = Le(t, n).mode);
var o = t.token(e, n);
if (e.pos > e.start) return o
}
if ("gfm" == t.name) return e.pos = e.start + 1, null;
throw new Error("Mode " + t.name + " failed to advance stream.")
}
function Ue(t, e, n, i) {
var r, o = function(t) {
return {
start: f.start,
end: f.pos,
string: f.current(),
type: r || null,
state: t ? De(a.mode, l) : l
}
},
a = t.doc,
s = a.mode;
e = kt(a, e);
var u, c = st(a, e.line),
l = Oe(t, e.line, n),
f = new Be(c.text, t.options.tabSize);
for (i && (u = []);
(i || f.pos < e.ch) && !f.eol();) f.start = f.pos, r = qe(s, f, l), i && u.push(o(!0));
return i ? u : o()
}
function ze(t, e) {
if (t)
for (;;) {
var n = t.match(/(?:^|\s+)line-(background-)?(\S+)/);
if (!n) break;
t = t.slice(0, n.index) + t.slice(n.index + n[0].length);
var i = n[1] ? "bgClass" : "textClass";
null == e[i] ? e[i] = n[2] : new RegExp("(?:^|s)" + n[2] + "(?:$|s)").test(e[i]) || (e[i] += " " + n[2])
}
return t
}
function He(t, e, n, i, r, o, a) {
var s = n.flattenSpans;
null == s && (s = t.options.flattenSpans);
var u, c = 0,
l = null,
f = new Be(e, t.options.tabSize),
h = t.options.addModeClass && [null];
for ("" == e && ze(Pe(n, i), o); !f.eol();) {
if (f.pos > t.options.maxHighlightLength ? (s = !1, a && je(t, e, i, f.pos), f.pos = e.length, u = null) : u = ze(qe(n, f, i, h), o), h) {
var d = h[0].name;
d && (u = "m-" + (u ? d + " " + u : d))
}
if (!s || l != u) {
for (; c < f.start;) r(c = Math.min(f.start, c + 5e3), l);
l = u
}
f.start = f.pos
}
for (; c < f.pos;) {
var m = Math.min(f.pos, c + 5e3);
r(m, l), c = m
}
}
var We = function(t, e, n) {
this.text = t, Dt(this, e), this.height = n ? n(this) : 1
};
We.prototype.lineNo = function() {
return ft(this)
}, le(We);
var Je = {},
Ye = {};
function Ge(t, e) {
if (!t || /^\s*$/.test(t)) return null;
var n = e.addModeClass ? Ye : Je;
return n[t] || (n[t] = t.replace(/\S+/g, "cm-$&"))
}
function Ke(t, e) {
var n = S("span", null, null, u ? "padding-right: .1px" : null),
i = {
pre: S("pre", [n], "CodeMirror-line"),
content: n,
col: 0,
pos: 0,
cm: t,
trailingSpace: !1,
splitSpaces: (a || u) && t.getOption("lineWrapping")
};
e.measure = {};
for (var r = 0; r <= (e.rest ? e.rest.length : 0); r++) {
var o = r ? e.rest[r - 1] : e.line,
s = void 0;
i.pos = 0, i.addToken = Qe, Fe(t.display.measure) && (s = Qt(o, t.doc.direction)) && (i.addToken = Xe(i.addToken, s)), i.map = [];
tn(o, i, Ne(t, o, e != t.display.externalMeasured && ft(o))), o.styleClasses && (o.styleClasses.bgClass && (i.bgClass = R(o.styleClasses.bgClass, i.bgClass || "")), o.styleClasses.textClass && (i.textClass = R(o.styleClasses.textClass, i.textClass || ""))), 0 == i.map.length && i.map.push(0, 0, i.content.appendChild(ye(t.display.measure))), 0 == r ? (e.measure.map = i.map, e.measure.cache = {}) : ((e.measure.maps || (e.measure.maps = [])).push(i.map), (e.measure.caches || (e.measure.caches = [])).push({}))
}
if (u) {
var c = i.content.lastChild;
(/\bcm-tab\b/.test(c.className) || c.querySelector && c.querySelector(".cm-tab")) && (i.content.className = "cm-tab-wrap-hack")
}
return ae(t, "renderLine", t, e.line, i.pre), i.pre.className && (i.textClass = R(i.pre.className, i.textClass || "")), i
}
function Ve(t) {
var e = A("span", "•", "cm-invalidchar");
return e.title = "\\u" + t.charCodeAt(0).toString(16), e.setAttribute("aria-label", e.title), e
}
function Qe(t, e, n, i, r, o, u) {
if (e) {
var c, l = t.splitSpaces ? function(t, e) {
if (t.length > 1 && !/ /.test(t)) return t;
for (var n = e, i = "", r = 0; r < t.length; r++) {
var o = t.charAt(r);
" " != o || !n || r != t.length - 1 && 32 != t.charCodeAt(r + 1) || (o = " "), i += o, n = " " == o
}
return i
}(e, t.trailingSpace) : e,
f = t.cm.state.specialChars,
h = !1;
if (f.test(e)) {
c = document.createDocumentFragment();
for (var d = 0;;) {
f.lastIndex = d;
var m = f.exec(e),
v = m ? m.index - d : e.length - d;
if (v) {
var p = document.createTextNode(l.slice(d, d + v));
a && s < 9 ? c.appendChild(A("span", [p])) : c.appendChild(p), t.map.push(t.pos, t.pos + v, p), t.col += v, t.pos += v
}
if (!m) break;
d += v + 1;
var g = void 0;
if ("\t" == m[0]) {
var b = t.cm.options.tabSize,
y = b - t.col % b;
(g = c.appendChild(A("span", G(y), "cm-tab"))).setAttribute("role", "presentation"), g.setAttribute("cm-text", "\t"), t.col += y
} else "\r" == m[0] || "\n" == m[0] ? ((g = c.appendChild(A("span", "\r" == m[0] ? "␍" : "␤", "cm-invalidchar"))).setAttribute("cm-text", m[0]), t.col += 1) : ((g = t.cm.options.specialCharPlaceholder(m[0])).setAttribute("cm-text", m[0]), a && s < 9 ? c.appendChild(A("span", [g])) : c.appendChild(g), t.col += 1);
t.map.push(t.pos, t.pos + 1, g), t.pos++
}
} else t.col += e.length, c = document.createTextNode(l), t.map.push(t.pos, t.pos + e.length, c), a && s < 9 && (h = !0), t.pos += e.length;
if (t.trailingSpace = 32 == l.charCodeAt(e.length - 1), n || i || r || h || u) {
var w = n || "";
i && (w += i), r && (w += r);
var F = A("span", [c], w, u);
return o && (F.title = o), t.content.appendChild(F)
}
t.content.appendChild(c)
}
}
function Xe(t, e) {
return function(n, i, r, o, a, s, u) {
r = r ? r + " cm-force-border" : "cm-force-border";
for (var c = n.pos, l = c + i.length;;) {
for (var f = void 0, h = 0; h < e.length && !((f = e[h]).to > c && f.from <= c); h++);
if (f.to >= l) return t(n, i, r, o, a, s, u);
t(n, i.slice(0, f.to - c), r, o, null, s, u), o = null, i = i.slice(f.to - c), c = f.to
}
}
}
function Ze(t, e, n, i) {
var r = !i && n.widgetNode;
r && t.map.push(t.pos, t.pos + e, r), !i && t.cm.display.input.needsContentAttribute && (r || (r = t.content.appendChild(document.createElement("span"))), r.setAttribute("cm-marker", n.id)), r && (t.cm.display.input.setUneditable(r), t.content.appendChild(r)), t.pos += e, t.trailingSpace = !1
}
function tn(t, e, n) {
var i = t.markedSpans,
r = t.text,
o = 0;
if (i)
for (var a, s, u, c, l, f, h, d = r.length, m = 0, v = 1, p = "", g = 0;;) {
if (g == m) {
u = c = l = f = s = "", h = null, g = 1 / 0;
for (var b = [], y = void 0, w = 0; w < i.length; ++w) {
var F = i[w],
k = F.marker;
"bookmark" == k.type && F.from == m && k.widgetNode ? b.push(k) : F.from <= m && (null == F.to || F.to > m || k.collapsed && F.to == m && F.from == m) ? (null != F.to && F.to != m && g > F.to && (g = F.to, c = ""), k.className && (u += " " + k.className), k.css && (s = (s ? s + ";" : "") + k.css), k.startStyle && F.from == m && (l += " " + k.startStyle), k.endStyle && F.to == g && (y || (y = [])).push(k.endStyle, F.to), k.title && !f && (f = k.title), k.collapsed && (!h || Bt(h.marker, k) < 0) && (h = F)) : F.from > m && g > F.from && (g = F.from)
}
if (y)
for (var x = 0; x < y.length; x += 2) y[x + 1] == g && (c += " " + y[x]);
if (!h || h.from == m)
for (var _ = 0; _ < b.length; ++_) Ze(e, 0, b[_]);
if (h && (h.from || 0) == m) {
if (Ze(e, (null == h.to ? d + 1 : h.to) - m, h.marker, null == h.from), null == h.to) return;
h.to == m && (h = !1)
}
}
if (m >= d) break;
for (var $ = Math.min(d, g);;) {
if (p) {
var E = m + p.length;
if (!h) {
var C = E > $ ? p.slice(0, $ - m) : p;
e.addToken(e, C, a ? a + u : u, l, m + C.length == g ? c : "", f, s)
}
if (E >= $) {
p = p.slice($ - m), m = $;
break
}
m = E, l = ""
}
p = r.slice(o, o = n[v++]), a = Ge(n[v++], e.cm.options)
}
} else
for (var A = 1; A < n.length; A += 2) e.addToken(e, r.slice(o, o = n[A]), Ge(n[A + 1], e.cm.options))
}
function en(t, e, n) {
this.line = e, this.rest = function(t) {
for (var e, n; e = Ot(t);) t = e.find(1, !0).line, (n || (n = [])).push(t);
return n
}(e), this.size = this.rest ? ft(K(this.rest)) - n + 1 : 1, this.node = this.text = null, this.hidden = zt(t, e)
}
function nn(t, e, n) {
for (var i, r = [], o = e; o < n; o = i) {
var a = new en(t.doc, st(t.doc, o), o);
i = o + a.size, r.push(a)
}
return r
}
var rn = null;
var on = null;
function an(t, e) {
var n = re(t, e);
if (n.length) {
var i, r = Array.prototype.slice.call(arguments, 2);
rn ? i = rn.delayedCallbacks : on ? i = on : (i = on = [], setTimeout(sn, 0));
for (var o = function(t) {
i.push(function() {
return n[t].apply(null, r)
})
}, a = 0; a < n.length; ++a) o(a)
}
}
function sn() {
var t = on;
on = null;
for (var e = 0; e < t.length; ++e) t[e]()
}
function un(t, e, n, i) {
for (var r = 0; r < e.changes.length; r++) {
var o = e.changes[r];
"text" == o ? fn(t, e) : "gutter" == o ? dn(t, e, n, i) : "class" == o ? hn(t, e) : "widget" == o && mn(t, e, i)
}
e.changes = null
}
function cn(t) {
return t.node == t.text && (t.node = A("div", null, null, "position: relative"), t.text.parentNode && t.text.parentNode.replaceChild(t.node, t.text), t.node.appendChild(t.text), a && s < 8 && (t.node.style.zIndex = 2)), t.node
}
function ln(t, e) {
var n = t.display.externalMeasured;
return n && n.line == e.line ? (t.display.externalMeasured = null, e.measure = n.measure, n.built) : Ke(t, e)
}
function fn(t, e) {
var n = e.text.className,
i = ln(t, e);
e.text == e.node && (e.node = i.pre), e.text.parentNode.replaceChild(i.pre, e.text), e.text = i.pre, i.bgClass != e.bgClass || i.textClass != e.textClass ? (e.bgClass = i.bgClass, e.textClass = i.textClass, hn(t, e)) : n && (e.text.className = n)
}
function hn(t, e) {
! function(t, e) {
var n = e.bgClass ? e.bgClass + " " + (e.line.bgClass || "") : e.line.bgClass;
if (n && (n += " CodeMirror-linebackground"), e.background) n ? e.background.className = n : (e.background.parentNode.removeChild(e.background), e.background = null);
else if (n) {
var i = cn(e);
e.background = i.insertBefore(A("div", null, n), i.firstChild), t.display.input.setUneditable(e.background)
}
}(t, e), e.line.wrapClass ? cn(e).className = e.line.wrapClass : e.node != e.text && (e.node.className = "");
var n = e.textClass ? e.textClass + " " + (e.line.textClass || "") : e.line.textClass;
e.text.className = n || ""
}
function dn(t, e, n, i) {
if (e.gutter && (e.node.removeChild(e.gutter), e.gutter = null), e.gutterBackground && (e.node.removeChild(e.gutterBackground), e.gutterBackground = null), e.line.gutterClass) {
var r = cn(e);
e.gutterBackground = A("div", null, "CodeMirror-gutter-background " + e.line.gutterClass, "left: " + (t.options.fixedGutter ? i.fixedPos : -i.gutterTotalWidth) + "px; width: " + i.gutterTotalWidth + "px"), t.display.input.setUneditable(e.gutterBackground), r.insertBefore(e.gutterBackground, e.text)
}
var o = e.line.gutterMarkers;
if (t.options.lineNumbers || o) {
var a = 0 === n || n === t.lineCount() - 1 || (n + 1) % 10 == 0 ? " CodeMirror-linenumber-show" : "",
s = cn(e),
u = e.gutter = A("div", null, "CodeMirror-gutter-wrapper", "left: " + (t.options.fixedGutter ? i.fixedPos : -i.gutterTotalWidth) + "px");
if (t.display.input.setUneditable(u), s.insertBefore(u, e.text), e.line.gutterClass && (u.className += " " + e.line.gutterClass), !t.options.lineNumbers || o && o["CodeMirror-linenumbers"] || (e.lineNumber = u.appendChild(A("div", mt(t.options, n), "CodeMirror-linenumber CodeMirror-gutter-elt" + a, "left: " + i.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + t.display.lineNumInnerWidth + "px"))), o)
for (var c = 0; c < t.options.gutters.length; ++c) {
var l = t.options.gutters[c],
f = o.hasOwnProperty(l) && o[l];
f && u.appendChild(A("div", [f], "CodeMirror-gutter-elt", "left: " + i.gutterLeft[l] + "px; width: " + i.gutterWidth[l] + "px"))
}
}
}
function mn(t, e, n) {
e.alignable && (e.alignable = null);
for (var i = e.node.firstChild, r = void 0; i; i = r) r = i.nextSibling, "CodeMirror-linewidget" == i.className && e.node.removeChild(i);
pn(t, e, n)
}
function vn(t, e, n, i) {
var r = ln(t, e);
return e.text = e.node = r.pre, r.bgClass && (e.bgClass = r.bgClass), r.textClass && (e.textClass = r.textClass), hn(t, e), dn(t, e, n, i), pn(t, e, i), e.node
}
function pn(t, e, n) {
if (gn(t, e.line, e, n, !0), e.rest)
for (var i = 0; i < e.rest.length; i++) gn(t, e.rest[i], e, n, !1)
}
function gn(t, e, n, i, r) {
if (e.widgets)
for (var o = cn(n), a = 0, s = e.widgets; a < s.length; ++a) {
var u = s[a],
c = A("div", [u.node], "CodeMirror-linewidget");
u.handleMouseEvents || c.setAttribute("cm-ignore-events", "true"), bn(u, c, n, i), t.display.input.setUneditable(c), r && u.above ? o.insertBefore(c, n.gutter || n.text) : o.appendChild(c), an(u, "redraw")
}
}
function bn(t, e, n, i) {
if (t.noHScroll) {
(n.alignable || (n.alignable = [])).push(e);
var r = i.wrapperWidth;
e.style.left = i.fixedPos + "px", t.coverGutter || (r -= i.gutterTotalWidth, e.style.paddingLeft = i.gutterTotalWidth + "px"), e.style.width = r + "px"
}
t.coverGutter && (e.style.zIndex = 5, e.style.position = "relative", t.noHScroll || (e.style.marginLeft = -i.gutterTotalWidth + "px"))
}
function yn(t) {
if (null != t.height) return t.height;
var e = t.doc.cm;
if (!e) return 0;
if (!M(document.body, t.node)) {
var n = "position: relative;";
t.coverGutter && (n += "margin-left: -" + e.display.gutters.offsetWidth + "px;"), t.noHScroll && (n += "width: " + e.display.wrapper.clientWidth + "px;"), C(e.display.measure, A("div", [t.node], null, n))
}
return t.height = t.node.parentNode.offsetHeight
}
function wn(t, e) {
for (var n = ve(e); n != t.wrapper; n = n.parentNode)
if (!n || 1 == n.nodeType && "true" == n.getAttribute("cm-ignore-events") || n.parentNode == t.sizer && n != t.mover) return !0
}
function Fn(t) {
return t.lineSpace.offsetTop
}
function kn(t) {
return t.mover.offsetHeight - t.lineSpace.offsetHeight
}
function xn(t) {
if (t.cachedPaddingH) return t.cachedPaddingH;
var e = C(t.measure, A("pre", "x")),
n = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle,
i = {
left: parseInt(n.paddingLeft),
right: parseInt(n.paddingRight)
};
return isNaN(i.left) || isNaN(i.right) || (t.cachedPaddingH = i), i
}
function _n(t) {
return q - t.display.nativeBarWidth
}
function $n(t) {
return t.display.lineDiv.clientWidth
}
function En(t) {
return t.display.scroller.clientHeight - _n(t) - t.display.barHeight
}
function Cn(t, e, n) {
if (t.line == e) return {
map: t.measure.map,
cache: t.measure.cache
};
for (var i = 0; i < t.rest.length; i++)
if (t.rest[i] == e) return {
map: t.measure.maps[i],
cache: t.measure.caches[i]
};
for (var r = 0; r < t.rest.length; r++)
if (ft(t.rest[r]) > n) return {
map: t.measure.maps[r],
cache: t.measure.caches[r],
before: !0
}
}
function An(t, e, n, i) {
return Mn(t, Tn(t, e), n, i)
}
function Sn(t, e) {
if (e >= t.display.viewFrom && e < t.display.viewTo) return t.display.view[ii(t, e)];
var n = t.display.externalMeasured;
return n && e >= n.lineN && e < n.lineN + n.size ? n : void 0
}
function Tn(t, e) {
var n = ft(e),
i = Sn(t, n);
i && !i.text ? i = null : i && i.changes && (un(t, i, n, Xn(t)), t.curOp.forceUpdate = !0), i || (i = function(t, e) {
var n = ft(e = Pt(e)),
i = t.display.externalMeasured = new en(t.doc, e, n);
i.lineN = n;
var r = i.built = Ke(t, i);
return i.text = r.pre, C(t.display.lineMeasure, r.pre), i
}(t, e));
var r = Cn(i, e, n);
return {
line: e,
view: i,
rect: null,
map: r.map,
cache: r.cache,
before: r.before,
hasHeights: !1
}
}
function Mn(t, e, n, i, r) {
e.before && (n = -1);
var o, u = n + (i || "");
return e.cache.hasOwnProperty(u) ? o = e.cache[u] : (e.rect || (e.rect = e.view.text.getBoundingClientRect()), e.hasHeights || (! function(t, e, n) {
var i = t.options.lineWrapping,
r = i && $n(t);
if (!e.measure.heights || i && e.measure.width != r) {
var o = e.measure.heights = [];
if (i) {
e.measure.width = r;
for (var a = e.text.firstChild.getClientRects(), s = 0; s < a.length - 1; s++) {
var u = a[s],
c = a[s + 1];
Math.abs(u.bottom - c.bottom) > 2 && o.push((u.bottom + c.top) / 2 - n.top)
}
}
o.push(n.bottom - n.top)
}
}(t, e.view, e.rect), e.hasHeights = !0), (o = function(t, e, n, i) {
var r, o = Ln(e.map, n, i),
u = o.node,
c = o.start,
l = o.end,
f = o.collapse;
if (3 == u.nodeType) {
for (var h = 0; h < 4; h++) {
for (; c && rt(e.line.text.charAt(o.coverStart + c));) --c;
for (; o.coverStart + l < o.coverEnd && rt(e.line.text.charAt(o.coverStart + l));) ++l;
if ((r = a && s < 9 && 0 == c && l == o.coverEnd - o.coverStart ? u.parentNode.getBoundingClientRect() : Rn(T(u, c, l).getClientRects(), i)).left || r.right || 0 == c) break;
l = c, c -= 1, f = "right"
}
a && s < 11 && (r = function(t, e) {
if (!window.screen || null == screen.logicalXDPI || screen.logicalXDPI == screen.deviceXDPI || ! function(t) {
if (null != $e) return $e;
var e = C(t, A("span", "x")),
n = e.getBoundingClientRect(),
i = T(e, 0, 1).getBoundingClientRect();
return $e = Math.abs(n.left - i.left) > 1
}(t)) return e;
var n = screen.logicalXDPI / screen.deviceXDPI,
i = screen.logicalYDPI / screen.deviceYDPI;
return {
left: e.left * n,
right: e.right * n,
top: e.top * i,
bottom: e.bottom * i
}
}(t.display.measure, r))
} else {
c > 0 && (f = i = "right");
var d;
r = t.options.lineWrapping && (d = u.getClientRects()).length > 1 ? d["right" == i ? d.length - 1 : 0] : u.getBoundingClientRect()
}
if (a && s < 9 && !c && (!r || !r.left && !r.right)) {
var m = u.parentNode.getClientRects()[0];
r = m ? {
left: m.left,
right: m.left + Qn(t.display),
top: m.top,
bottom: m.bottom
} : Dn
}
for (var v = r.top - e.rect.top, p = r.bottom - e.rect.top, g = (v + p) / 2, b = e.view.measure.heights, y = 0; y < b.length - 1 && !(g < b[y]); y++);
var w = y ? b[y - 1] : 0,
F = b[y],
k = {
left: ("right" == f ? r.right : r.left) - e.rect.left,
right: ("left" == f ? r.left : r.right) - e.rect.left,
top: w,
bottom: F
};
r.left || r.right || (k.bogus = !0);
t.options.singleCursorHeightPerLine || (k.rtop = v, k.rbottom = p);
return k
}(t, e, n, i)).bogus || (e.cache[u] = o)), {
left: o.left,
right: o.right,
top: r ? o.rtop : o.top,
bottom: r ? o.rbottom : o.bottom
}
}
var Dn = {
left: 0,
right: 0,
top: 0,
bottom: 0
};
function Ln(t, e, n) {
for (var i, r, o, a, s, u, c = 0; c < t.length; c += 3)
if (s = t[c], u = t[c + 1], e < s ? (r = 0, o = 1, a = "left") : e < u ? o = (r = e - s) + 1 : (c == t.length - 3 || e == u && t[c + 3] > e) && (r = (o = u - s) - 1, e >= u && (a = "right")), null != r) {
if (i = t[c + 2], s == u && n == (i.insertLeft ? "left" : "right") && (a = n), "left" == n && 0 == r)
for (; c && t[c - 2] == t[c - 3] && t[c - 1].insertLeft;) i = t[2 + (c -= 3)], a = "left";
if ("right" == n && r == u - s)
for (; c < t.length - 3 && t[c + 3] == t[c + 4] && !t[c + 5].insertLeft;) i = t[(c += 3) + 2], a = "right";
break
}
return {
node: i,
start: r,
end: o,
collapse: a,
coverStart: s,
coverEnd: u
}
}
function Rn(t, e) {
var n = Dn;
if ("left" == e)
for (var i = 0; i < t.length && (n = t[i]).left == n.right; i++);
else
for (var r = t.length - 1; r >= 0 && (n = t[r]).left == n.right; r--);
return n
}
function Bn(t) {
if (t.measure && (t.measure.cache = {}, t.measure.heights = null, t.rest))
for (var e = 0; e < t.rest.length; e++) t.measure.caches[e] = {}
}
function In(t) {
t.display.externalMeasure = null, E(t.display.lineMeasure);
for (var e = 0; e < t.display.view.length; e++) Bn(t.display.view[e])
}
function Nn(t) {
In(t), t.display.cachedCharWidth = t.display.cachedTextHeight = t.display.cachedPaddingH = null, t.options.lineWrapping || (t.display.maxLineChanged = !0), t.display.lineNumChars = null
}
function On() {
return l && p ? -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) : window.pageXOffset || (document.documentElement || document.body).scrollLeft
}
function jn() {
return l && p ? -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) : window.pageYOffset || (document.documentElement || document.body).scrollTop
}
function Pn(t, e, n, i, r) {
if (!r && e.widgets)
for (var o = 0; o < e.widgets.length; ++o)
if (e.widgets[o].above) {
var a = yn(e.widgets[o]);
n.top += a, n.bottom += a
}
if ("line" == i) return n;
i || (i = "local");
var s = Wt(e);
if ("local" == i ? s += Fn(t.display) : s -= t.display.viewOffset, "page" == i || "window" == i) {
var u = t.display.lineSpace.getBoundingClientRect();
s += u.top + ("window" == i ? 0 : jn());
var c = u.left + ("window" == i ? 0 : On());
n.left += c, n.right += c
}
return n.top += s, n.bottom += s, n
}
function qn(t, e, n) {
if ("div" == n) return e;
var i = e.left,
r = e.top;
if ("page" == n) i -= On(), r -= jn();
else if ("local" == n || !n) {
var o = t.display.sizer.getBoundingClientRect();
i += o.left, r += o.top
}
var a = t.display.lineSpace.getBoundingClientRect();
return {
left: i - a.left,
top: r - a.top
}
}
function Un(t, e, n, i, r) {
return i || (i = st(t.doc, e.line)), Pn(t, i, An(t, i, e.ch, r), n)
}
function zn(t, e, n, i, r, o) {
i = i || st(t.doc, e.line), r || (r = Tn(t, i));
function a(e, a) {
var s = Mn(t, r, e, a ? "right" : "left", o);
return a ? s.left = s.right : s.right = s.left, Pn(t, i, s, n)
}
var s = Qt(i, t.doc.direction),
u = e.ch,
c = e.sticky;
if (u >= i.text.length ? (u = i.text.length, c = "before") : u <= 0 && (u = 0, c = "after"), !s) return a("before" == c ? u - 1 : u, "before" == c);
function l(t, e, n) {
var i = s[e].level % 2 != 0;
return a(n ? t - 1 : t, i != n)
}
var f = Kt(s, u, c),
h = Gt,
d = l(u, f, "before" == c);
return null != h && (d.other = l(u, h, "before" != c)), d
}
function Hn(t, e) {
var n = 0;
e = kt(t.doc, e), t.options.lineWrapping || (n = Qn(t.display) * e.ch);
var i = st(t.doc, e.line),
r = Wt(i) + Fn(t.display);
return {
left: n,
right: n,
top: r,
bottom: r + i.height
}
}
function Wn(t, e, n, i, r) {
var o = vt(t, e, n);
return o.xRel = r, i && (o.outside = !0), o
}
function Jn(t, e, n) {
var i = t.doc;
if ((n += t.display.viewOffset) < 0) return Wn(i.first, 0, null, !0, -1);
var r = ht(i, n),
o = i.first + i.size - 1;
if (r > o) return Wn(i.first + i.size - 1, st(i, o).text.length, null, !0, 1);
e < 0 && (e = 0);
for (var a = st(i, r);;) {
var s = Gn(t, a, r, e, n),
u = Ot(a),
c = u && u.find(0, !0);
if (!u || !(s.ch > c.from.ch || s.ch == c.from.ch && s.xRel > 0)) return s;
r = ft(a = c.to.line)
}
}
function Yn(t, e, n, i) {
var r = function(i) {
return Pn(t, e, Mn(t, n, i), "line")
},
o = e.text.length,
a = at(function(t) {
return r(t - 1).bottom <= i
}, o, 0);
return {
begin: a,
end: o = at(function(t) {
return r(t).top > i
}, a, o)
}
}
function Gn(t, e, n, i, r) {
r -= Wt(e);
var o, a = 0,
s = e.text.length,
u = Tn(t, e);
if (Qt(e, t.doc.direction)) {
if (t.options.lineWrapping) {
var c;
a = (c = Yn(t, e, u, r)).begin, s = c.end
}
o = new vt(n, a);
var l, f, h = zn(t, o, "line", e, u).left,
d = h < i ? 1 : -1,
m = h - i;
do {
if (l = m, f = o, null == (o = ee(t, e, o, d)) || o.ch < a || s <= ("before" == o.sticky ? o.ch - 1 : o.ch)) {
o = f;
break
}
m = zn(t, o, "line", e, u).left - i
} while (d < 0 != m < 0 && Math.abs(m) <= Math.abs(l));
if (Math.abs(m) > Math.abs(l)) {
if (m < 0 == l < 0) throw new Error("Broke out of infinite loop in coordsCharInner");
o = f
}
} else {
var v = at(function(n) {
var o = Pn(t, e, Mn(t, u, n), "line");
return o.top > r ? (s = Math.min(n, s), !0) : !(o.bottom <= r) && (o.left > i || !(o.right < i) && i - o.left < o.right - i)
}, a, s);
o = new vt(n, v = ot(e.text, v, 1), v == s ? "before" : "after")
}
var p = zn(t, o, "line", e, u);
return (r < p.top || p.bottom < r) && (o.outside = !0), o.xRel = i < p.left ? -1 : i > p.right ? 1 : 0, o
}
var Kn;
function Vn(t) {
if (null != t.cachedTextHeight) return t.cachedTextHeight;
if (null == Kn) {
Kn = A("pre");
for (var e = 0; e < 49; ++e) Kn.appendChild(document.createTextNode("x")), Kn.appendChild(A("br"));
Kn.appendChild(document.createTextNode("x"))
}
C(t.measure, Kn);
var n = Kn.offsetHeight / 50;
return n > 3 && (t.cachedTextHeight = n), E(t.measure), n || 1
}
function Qn(t) {
if (null != t.cachedCharWidth) return t.cachedCharWidth;
var e = A("span", "xxxxxxxxxx"),
n = A("pre", [e]);
C(t.measure, n);
var i = e.getBoundingClientRect(),
r = (i.right - i.left) / 10;
return r > 2 && (t.cachedCharWidth = r), r || 10
}
function Xn(t) {
for (var e = t.display, n = {}, i = {}, r = e.gutters.clientLeft, o = e.gutters.firstChild, a = 0; o; o = o.nextSibling, ++a) n[t.options.gutters[a]] = o.offsetLeft + o.clientLeft + r, i[t.options.gutters[a]] = o.clientWidth;
return {
fixedPos: Zn(e),
gutterTotalWidth: e.gutters.offsetWidth,
gutterLeft: n,
gutterWidth: i,
wrapperWidth: e.wrapper.clientWidth
}
}
function Zn(t) {
return t.scroller.getBoundingClientRect().left - t.sizer.getBoundingClientRect().left
}
function ti(t) {
var e = Vn(t.display),
n = t.options.lineWrapping,
i = n && Math.max(5, t.display.scroller.clientWidth / Qn(t.display) - 3);
return function(r) {
if (zt(t.doc, r)) return 0;
var o = 0;
if (r.widgets)
for (var a = 0; a < r.widgets.length; a++) r.widgets[a].height && (o += r.widgets[a].height);
return n ? o + (Math.ceil(r.text.length / i) || 1) * e : o + e
}
}
function ei(t) {
var e = t.doc,
n = ti(t);
e.iter(function(t) {
var e = n(t);
e != t.height && lt(t, e)
})
}
function ni(t, e, n, i) {
var r = t.display;
if (!n && "true" == ve(e).getAttribute("cm-not-content")) return null;
var o, a, s = r.lineSpace.getBoundingClientRect();
try {
o = e.clientX - s.left, a = e.clientY - s.top
} catch (e) {
return null
}
var u, c = Jn(t, o, a);
if (i && 1 == c.xRel && (u = st(t.doc, c.line).text).length == c.ch) {
var l = O(u, u.length, t.options.tabSize) - u.length;
c = vt(c.line, Math.max(0, Math.round((o - xn(t.display).left) / Qn(t.display)) - l))
}
return c
}
la.posFromMouse = ni;
function ii(t, e) {
if (e >= t.display.viewTo) return null;
if ((e -= t.display.viewFrom) < 0) return null;
for (var n = t.display.view, i = 0; i < n.length; i++)
if ((e -= n[i].size) < 0) return i
}
function ri(t) {
t.display.input.showSelection(t.display.input.prepareSelection())
}
function oi(t, e) {
for (var n = t.doc, i = {}, r = i.cursors = document.createDocumentFragment(), o = i.selection = document.createDocumentFragment(), a = 0; a < n.sel.ranges.length; a++)
if (!1 !== e || a != n.sel.primIndex) {
var s = n.sel.ranges[a];
if (!(s.from().line >= t.display.viewTo || s.to().line < t.display.viewFrom)) {
var u = s.empty();
(u || t.options.showCursorWhenSelecting) && ai(t, s.head, r), u || si(t, s, o)
}
}
return i
}
function ai(t, e, n) {
var i = zn(t, e, "div", null, null, !t.options.singleCursorHeightPerLine),
r = n.appendChild(A("div", " ", "CodeMirror-cursor"));
if (r.style.left = i.left + "px", r.style.top = i.top + "px", r.style.height = Math.max(0, i.bottom - i.top) * t.options.cursorHeight + "px", i.other) {
var o = n.appendChild(A("div", " ", "CodeMirror-cursor CodeMirror-secondarycursor"));
o.style.display = "", o.style.left = i.other.left + "px", o.style.top = i.other.top + "px", o.style.height = .85 * (i.other.bottom - i.other.top) + "px"
}
}
function si(t, e, n) {
var i = t.display,
r = t.doc,
o = document.createDocumentFragment(),
a = xn(t.display),
s = a.left,
u = Math.max(i.sizerWidth, $n(t) - i.sizer.offsetLeft) - a.right;
function c(t, e, n, i) {
e < 0 && (e = 0), e = Math.round(e), i = Math.round(i), o.appendChild(A("div", null, "CodeMirror-selected", "position: absolute; left: " + t + "px;\n top: " + e + "px; width: " + (null == n ? u - t : n) + "px;\n height: " + (i - e) + "px"))
}
function l(e, n, i) {
var o, a, l = st(r, e),
f = l.text.length;
function h(n, i) {
return Un(t, vt(e, n), "div", l, i)
}
return function(t, e, n, i) {
if (!t) return i(e, n, "ltr");
for (var r = !1, o = 0; o < t.length; ++o) {
var a = t[o];
(a.from < n && a.to > e || e == n && a.to == e) && (i(Math.max(a.from, e), Math.min(a.to, n), 1 == a.level ? "rtl" : "ltr"), r = !0)
}
r || i(e, n, "ltr")
}(Qt(l, r.direction), n || 0, null == i ? f : i, function(t, e, r) {
var l, d, m, v = h(t, "left");
if (t == e) l = v, d = m = v.left;
else {
if (l = h(e - 1, "right"), "rtl" == r) {
var p = v;
v = l, l = p
}
d = v.left, m = l.right
}
null == n && 0 == t && (d = s), l.top - v.top > 3 && (c(d, v.top, null, v.bottom), d = s, v.bottom < l.top && c(d, v.bottom, null, l.top)), null == i && e == f && (m = u), (!o || v.top < o.top || v.top == o.top && v.left < o.left) && (o = v), (!a || l.bottom > a.bottom || l.bottom == a.bottom && l.right > a.right) && (a = l), d < s + 1 && (d = s), c(d, l.top, m - d, l.bottom)
}), {
start: o,
end: a
}
}
var f = e.from(),
h = e.to();
if (f.line == h.line) l(f.line, f.ch, h.ch);
else {
var d = st(r, f.line),
m = st(r, h.line),
v = Pt(d) == Pt(m),
p = l(f.line, f.ch, v ? d.text.length + 1 : null).end,
g = l(h.line, v ? 0 : null, h.ch).start;
v && (p.top < g.top - 2 ? (c(p.right, p.top, null, p.bottom), c(s, g.top, g.left, g.bottom)) : c(p.right, p.top, g.left - p.right, p.bottom)), p.bottom < g.top && c(s, p.bottom, null, g.top)
}
n.appendChild(o)
}
function ui(t) {
if (t.state.focused) {
var e = t.display;
clearInterval(e.blinker);
var n = !0;
e.cursorDiv.style.visibility = "", t.options.cursorBlinkRate > 0 ? e.blinker = setInterval(function() {
return e.cursorDiv.style.visibility = (n = !n) ? "" : "hidden"
}, t.options.cursorBlinkRate) : t.options.cursorBlinkRate < 0 && (e.cursorDiv.style.visibility = "hidden")
}
}
function ci(t) {
t.state.focused || (t.display.input.focus(), fi(t))
}
function li(t) {
t.state.delayingBlurEvent = !0, setTimeout(function() {
t.state.delayingBlurEvent && (t.state.delayingBlurEvent = !1, hi(t))
}, 100)
}
function fi(t, e) {
t.state.delayingBlurEvent && (t.state.delayingBlurEvent = !1), "nocursor" != t.options.readOnly && (t.state.focused || (ae(t, "focus", t, e), t.state.focused = !0, L(t.display.wrapper, "CodeMirror-focused"), t.curOp || t.display.selForContextMenu == t.doc.sel || (t.display.input.reset(), u && setTimeout(function() {
return t.display.input.reset(!0)
}, 20)), t.display.input.receivedFocus()), ui(t))
}
function hi(t, e) {
t.state.delayingBlurEvent || (t.state.focused && (ae(t, "blur", t, e), t.state.focused = !1, $(t.display.wrapper, "CodeMirror-focused")), clearInterval(t.display.blinker), setTimeout(function() {
t.state.focused || (t.display.shift = !1)
}, 150))
}
function di(t) {
for (var e = t.display, n = e.lineDiv.offsetTop, i = 0; i < e.view.length; i++) {
var r = e.view[i],
o = void 0;
if (!r.hidden) {
if (a && s < 8) {
var u = r.node.offsetTop + r.node.offsetHeight;
o = u - n, n = u
} else {
var c = r.node.getBoundingClientRect();
o = c.bottom - c.top
}
var l = r.line.height - o;
if (o < 2 && (o = Vn(e)), (l > .001 || l < -.001) && (lt(r.line, o), mi(r.line), r.rest))
for (var f = 0; f < r.rest.length; f++) mi(r.rest[f])
}
}
}
function mi(t) {
if (t.widgets)
for (var e = 0; e < t.widgets.length; ++e) t.widgets[e].height = t.widgets[e].node.parentNode.offsetHeight
}
function vi(t, e, n) {
var i = n && null != n.top ? Math.max(0, n.top) : t.scroller.scrollTop;
i = Math.floor(i - Fn(t));
var r = n && null != n.bottom ? n.bottom : i + t.wrapper.clientHeight,
o = ht(e, i),
a = ht(e, r);
if (n && n.ensure) {
var s = n.ensure.from.line,
u = n.ensure.to.line;
s < o ? (o = s, a = ht(e, Wt(st(e, s)) + t.wrapper.clientHeight)) : Math.min(u, e.lastLine()) >= a && (o = ht(e, Wt(st(e, u)) - t.wrapper.clientHeight), a = u)
}
return {
from: o,
to: Math.max(a, o + 1)
}
}
function pi(t) {
var e = t.display,
n = e.view;
if (e.alignWidgets || e.gutters.firstChild && t.options.fixedGutter) {
for (var i = Zn(e) - e.scroller.scrollLeft + t.doc.scrollLeft, r = e.gutters.offsetWidth, o = i + "px", a = 0; a < n.length; a++)
if (!n[a].hidden) {
t.options.fixedGutter && (n[a].gutter && (n[a].gutter.style.left = o), n[a].gutterBackground && (n[a].gutterBackground.style.left = o));
var s = n[a].alignable;
if (s)
for (var u = 0; u < s.length; u++) s[u].style.left = o
}
t.options.fixedGutter && (e.gutters.style.left = i + r + "px")
}
}
function gi(t) {
if (!t.options.lineNumbers) return !1;
var e = t.doc,
n = mt(t.options, e.first + e.size - 1),
i = t.display;
if (n.length != i.lineNumChars) {
var r = i.measure.appendChild(A("div", [A("div", n)], "CodeMirror-linenumber CodeMirror-gutter-elt")),
o = r.firstChild.offsetWidth,
a = r.offsetWidth - o;
return i.lineGutter.style.width = "", i.lineNumInnerWidth = Math.max(o, i.lineGutter.offsetWidth - a) + a + 2, i.lineNumWidth = i.lineNumInnerWidth + a, i.lineNumChars = i.lineNumInnerWidth ? n.length : -1, i.lineGutter.style.width = i.lineNumWidth + "px", nr(t), !0
}
return !1
}
function bi(t, e) {
var n = t.display,
i = Vn(t.display);
e.top < 0 && (e.top = 0);
var r = t.curOp && null != t.curOp.scrollTop ? t.curOp.scrollTop : n.scroller.scrollTop,
o = En(t),
a = {};
e.bottom - e.top > o && (e.bottom = e.top + o);
var s = t.doc.height + kn(n),
u = e.top < i,
c = e.bottom > s - i;
if (e.top < r) a.scrollTop = u ? 0 : e.top;
else if (e.bottom > r + o) {
var l = Math.min(e.top, (c ? s : e.bottom) - o);
l != r && (a.scrollTop = l)
}
var f = t.curOp && null != t.curOp.scrollLeft ? t.curOp.scrollLeft : n.scroller.scrollLeft,
h = $n(t) - (t.options.fixedGutter ? n.gutters.offsetWidth : 0),
d = e.right - e.left > h;
return d && (e.right = e.left + h), e.left < 10 ? a.scrollLeft = 0 : e.left < f ? a.scrollLeft = Math.max(0, e.left - (d ? 0 : 10)) : e.right > h + f - 3 && (a.scrollLeft = e.right + (d ? 0 : 10) - h), a
}
function yi(t, e) {
null != e && (ki(t), t.curOp.scrollTop = (null == t.curOp.scrollTop ? t.doc.scrollTop : t.curOp.scrollTop) + e)
}
function wi(t) {
ki(t);
var e = t.getCursor(),
n = e,
i = e;
t.options.lineWrapping || (n = e.ch ? vt(e.line, e.ch - 1) : e, i = vt(e.line, e.ch + 1)), t.curOp.scrollToPos = {
from: n,
to: i,
margin: t.options.cursorScrollMargin
}
}
function Fi(t, e, n) {
null == e && null == n || ki(t), null != e && (t.curOp.scrollLeft = e), null != n && (t.curOp.scrollTop = n)
}
function ki(t) {
var e = t.curOp.scrollToPos;
if (e) {
t.curOp.scrollToPos = null;
xi(t, Hn(t, e.from), Hn(t, e.to), e.margin)
}
}
function xi(t, e, n, i) {
var r = bi(t, {
left: Math.min(e.left, n.left),
top: Math.min(e.top, n.top) - i,
right: Math.max(e.right, n.right),
bottom: Math.max(e.bottom, n.bottom) + i
});
Fi(t, r.scrollLeft, r.scrollTop)
}
function _i(t, e) {
Math.abs(t.doc.scrollTop - e) < 2 || (n || er(t, {
top: e
}), $i(t, e, !0), n && er(t), Vi(t, 100))
}
function $i(t, e, n) {
e = Math.min(t.display.scroller.scrollHeight - t.display.scroller.clientHeight, e), (t.display.scroller.scrollTop != e || n) && (t.doc.scrollTop = e, t.display.scrollbars.setScrollTop(e), t.display.scroller.scrollTop != e && (t.display.scroller.scrollTop = e))
}
function Ei(t, e, n, i) {
e = Math.min(e, t.display.scroller.scrollWidth - t.display.scroller.clientWidth), (n ? e == t.doc.scrollLeft : Math.abs(t.doc.scrollLeft - e) < 2) && !i || (t.doc.scrollLeft = e, pi(t), t.display.scroller.scrollLeft != e && (t.display.scroller.scrollLeft = e), t.display.scrollbars.setScrollLeft(e))
}
function Ci(t) {
var e = t.display,
n = e.gutters.offsetWidth,
i = Math.round(t.doc.height + kn(t.display));
return {
clientHeight: e.scroller.clientHeight,
viewHeight: e.wrapper.clientHeight,
scrollWidth: e.scroller.scrollWidth,
clientWidth: e.scroller.clientWidth,
viewWidth: e.wrapper.clientWidth,
barLeft: t.options.fixedGutter ? n : 0,
docHeight: i,
scrollHeight: i + _n(t) + e.barHeight,
nativeBarWidth: e.nativeBarWidth,
gutterWidth: n
}
}
var Ai = function(t, e, n) {
this.cm = n;
var i = this.vert = A("div", [A("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"),
r = this.horiz = A("div", [A("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar");
t(i), t(r), ie(i, "scroll", function() {
i.clientHeight && e(i.scrollTop, "vertical")
}), ie(r, "scroll", function() {
r.clientWidth && e(r.scrollLeft, "horizontal")
}), this.checkedZeroWidth = !1, a && s < 8 && (this.horiz.style.minHeight = this.vert.style.minWidth = "18px")
};
Ai.prototype.update = function(t) {
var e = t.scrollWidth > t.clientWidth + 1,
n = t.scrollHeight > t.clientHeight + 1,
i = t.nativeBarWidth;
if (n) {
this.vert.style.display = "block", this.vert.style.bottom = e ? i + "px" : "0";
var r = t.viewHeight - (e ? i : 0);
this.vert.firstChild.style.height = Math.max(0, t.scrollHeight - t.clientHeight + r) + "px"
} else this.vert.style.display = "", this.vert.firstChild.style.height = "0";
if (e) {
this.horiz.style.display = "block", this.horiz.style.right = n ? i + "px" : "0", this.horiz.style.left = t.barLeft + "px";
var o = t.viewWidth - t.barLeft - (n ? i : 0);
this.horiz.firstChild.style.width = Math.max(0, t.scrollWidth - t.clientWidth + o) + "px"
} else this.horiz.style.display = "", this.horiz.firstChild.style.width = "0";
return !this.checkedZeroWidth && t.clientHeight > 0 && (0 == i && this.zeroWidthHack(), this.checkedZeroWidth = !0), {
right: n ? i : 0,
bottom: e ? i : 0
}
}, Ai.prototype.setScrollLeft = function(t) {
this.horiz.scrollLeft != t && (this.horiz.scrollLeft = t), this.disableHoriz && this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz")
}, Ai.prototype.setScrollTop = function(t) {
this.vert.scrollTop != t && (this.vert.scrollTop = t), this.disableVert && this.enableZeroWidthBar(this.vert, this.disableVert, "vert")
}, Ai.prototype.zeroWidthHack = function() {
var t = b && !d ? "12px" : "18px";
this.horiz.style.height = this.vert.style.width = t, this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none", this.disableHoriz = new j, this.disableVert = new j
}, Ai.prototype.enableZeroWidthBar = function(t, e, n) {
t.style.pointerEvents = "auto";
e.set(1e3, function i() {
var r = t.getBoundingClientRect();
("vert" == n ? document.elementFromPoint(r.right - 1, (r.top + r.bottom) / 2) : document.elementFromPoint((r.right + r.left) / 2, r.bottom - 1)) != t ? t.style.pointerEvents = "none" : e.set(1e3, i)
})
}, Ai.prototype.clear = function() {
var t = this.horiz.parentNode;
t.removeChild(this.horiz), t.removeChild(this.vert)
};
var Si = function() {};
Si.prototype.update = function() {
return {
bottom: 0,
right: 0
}
}, Si.prototype.setScrollLeft = function() {}, Si.prototype.setScrollTop = function() {}, Si.prototype.clear = function() {};
function Ti(t, e) {
e || (e = Ci(t));
var n = t.display.barWidth,
i = t.display.barHeight;
Mi(t, e);
for (var r = 0; r < 4 && n != t.display.barWidth || i != t.display.barHeight; r++) n != t.display.barWidth && t.options.lineWrapping && di(t), Mi(t, Ci(t)), n = t.display.barWidth, i = t.display.barHeight
}
function Mi(t, e) {
var n = t.display,
i = n.scrollbars.update(e);
n.sizer.style.paddingRight = (n.barWidth = i.right) + "px", n.sizer.style.paddingBottom = (n.barHeight = i.bottom) + "px", n.heightForcer.style.borderBottom = i.bottom + "px solid transparent", i.right && i.bottom ? (n.scrollbarFiller.style.display = "block", n.scrollbarFiller.style.height = i.bottom + "px", n.scrollbarFiller.style.width = i.right + "px") : n.scrollbarFiller.style.display = "", i.bottom && t.options.coverGutterNextToScrollbar && t.options.fixedGutter ? (n.gutterFiller.style.display = "block", n.gutterFiller.style.height = i.bottom + "px", n.gutterFiller.style.width = e.gutterWidth + "px") : n.gutterFiller.style.display = ""
}
var Di = {
native: Ai,
null: Si
};
function Li(t) {
t.display.scro
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment