mirror of
https://github.com/Azgaar/Fantasy-Map-Generator.git
synced 2025-12-17 01:41:22 +01:00
22153 lines
745 KiB
JavaScript
22153 lines
745 KiB
JavaScript
/**
|
|
* TinyMCE version 7.1.0 (2024-05-08)
|
|
*/
|
|
!(function () {
|
|
"use strict";
|
|
var e = function (e) {
|
|
if (null === e) return "null";
|
|
if (void 0 === e) return "undefined";
|
|
var t = typeof e;
|
|
return "object" === t && (Array.prototype.isPrototypeOf(e) || (e.constructor && "Array" === e.constructor.name))
|
|
? "array"
|
|
: "object" === t && (String.prototype.isPrototypeOf(e) || (e.constructor && "String" === e.constructor.name))
|
|
? "string"
|
|
: t;
|
|
},
|
|
t = function (e) {
|
|
return {eq: e};
|
|
},
|
|
n = t(function (e, t) {
|
|
return e === t;
|
|
}),
|
|
o = function (e) {
|
|
return t(function (t, n) {
|
|
if (t.length !== n.length) return !1;
|
|
for (var o = t.length, r = 0; r < o; r++) if (!e.eq(t[r], n[r])) return !1;
|
|
return !0;
|
|
});
|
|
},
|
|
r = function (e) {
|
|
return t(function (r, s) {
|
|
var a = Object.keys(r),
|
|
i = Object.keys(s);
|
|
if (
|
|
!(function (e, n) {
|
|
return (function (e, n) {
|
|
return t(function (t, o) {
|
|
return e.eq(n(t), n(o));
|
|
});
|
|
})(o(e), function (e) {
|
|
return (function (e, t) {
|
|
return Array.prototype.slice.call(e).sort(t);
|
|
})(e, n);
|
|
});
|
|
})(n).eq(a, i)
|
|
)
|
|
return !1;
|
|
for (var l = a.length, d = 0; d < l; d++) {
|
|
var c = a[d];
|
|
if (!e.eq(r[c], s[c])) return !1;
|
|
}
|
|
return !0;
|
|
});
|
|
},
|
|
s = t(function (t, n) {
|
|
if (t === n) return !0;
|
|
var a = e(t);
|
|
return (
|
|
a === e(n) &&
|
|
((function (e) {
|
|
return -1 !== ["undefined", "boolean", "number", "string", "function", "xml", "null"].indexOf(e);
|
|
})(a)
|
|
? t === n
|
|
: "array" === a
|
|
? o(s).eq(t, n)
|
|
: "object" === a && r(s).eq(t, n))
|
|
);
|
|
});
|
|
const a = Object.getPrototypeOf,
|
|
i = (e, t, n) => {
|
|
var o;
|
|
return !!n(e, t.prototype) || (null === (o = e.constructor) || void 0 === o ? void 0 : o.name) === t.name;
|
|
},
|
|
l = e => t =>
|
|
(e => {
|
|
const t = typeof e;
|
|
return null === e
|
|
? "null"
|
|
: "object" === t && Array.isArray(e)
|
|
? "array"
|
|
: "object" === t && i(e, String, (e, t) => t.isPrototypeOf(e))
|
|
? "string"
|
|
: t;
|
|
})(t) === e,
|
|
d = e => t => typeof t === e,
|
|
c = e => t => e === t,
|
|
u = (e, t) => f(e) && i(e, t, (e, t) => a(e) === t),
|
|
m = l("string"),
|
|
f = l("object"),
|
|
g = e => u(e, Object),
|
|
p = l("array"),
|
|
h = c(null),
|
|
b = d("boolean"),
|
|
v = c(void 0),
|
|
y = e => null == e,
|
|
C = e => !y(e),
|
|
w = d("function"),
|
|
x = d("number"),
|
|
E = (e, t) => {
|
|
if (p(e)) {
|
|
for (let n = 0, o = e.length; n < o; ++n) if (!t(e[n])) return !1;
|
|
return !0;
|
|
}
|
|
return !1;
|
|
},
|
|
k = () => {},
|
|
_ =
|
|
(e, t) =>
|
|
(...n) =>
|
|
e(t.apply(null, n)),
|
|
S = (e, t) => n => e(t(n)),
|
|
N = e => () => e,
|
|
R = e => e,
|
|
A = (e, t) => e === t;
|
|
function T(e, ...t) {
|
|
return (...n) => {
|
|
const o = t.concat(n);
|
|
return e.apply(null, o);
|
|
};
|
|
}
|
|
const O = e => t => !e(t),
|
|
B = e => () => {
|
|
throw new Error(e);
|
|
},
|
|
P = e => e(),
|
|
D = e => {
|
|
e();
|
|
},
|
|
L = N(!1),
|
|
M = N(!0);
|
|
class I {
|
|
constructor(e, t) {
|
|
(this.tag = e), (this.value = t);
|
|
}
|
|
static some(e) {
|
|
return new I(!0, e);
|
|
}
|
|
static none() {
|
|
return I.singletonNone;
|
|
}
|
|
fold(e, t) {
|
|
return this.tag ? t(this.value) : e();
|
|
}
|
|
isSome() {
|
|
return this.tag;
|
|
}
|
|
isNone() {
|
|
return !this.tag;
|
|
}
|
|
map(e) {
|
|
return this.tag ? I.some(e(this.value)) : I.none();
|
|
}
|
|
bind(e) {
|
|
return this.tag ? e(this.value) : I.none();
|
|
}
|
|
exists(e) {
|
|
return this.tag && e(this.value);
|
|
}
|
|
forall(e) {
|
|
return !this.tag || e(this.value);
|
|
}
|
|
filter(e) {
|
|
return !this.tag || e(this.value) ? this : I.none();
|
|
}
|
|
getOr(e) {
|
|
return this.tag ? this.value : e;
|
|
}
|
|
or(e) {
|
|
return this.tag ? this : e;
|
|
}
|
|
getOrThunk(e) {
|
|
return this.tag ? this.value : e();
|
|
}
|
|
orThunk(e) {
|
|
return this.tag ? this : e();
|
|
}
|
|
getOrDie(e) {
|
|
if (this.tag) return this.value;
|
|
throw new Error(null != e ? e : "Called getOrDie on None");
|
|
}
|
|
static from(e) {
|
|
return C(e) ? I.some(e) : I.none();
|
|
}
|
|
getOrNull() {
|
|
return this.tag ? this.value : null;
|
|
}
|
|
getOrUndefined() {
|
|
return this.value;
|
|
}
|
|
each(e) {
|
|
this.tag && e(this.value);
|
|
}
|
|
toArray() {
|
|
return this.tag ? [this.value] : [];
|
|
}
|
|
toString() {
|
|
return this.tag ? `some(${this.value})` : "none()";
|
|
}
|
|
}
|
|
I.singletonNone = new I(!1);
|
|
const F = Array.prototype.slice,
|
|
U = Array.prototype.indexOf,
|
|
z = Array.prototype.push,
|
|
j = (e, t) => U.call(e, t),
|
|
H = (e, t) => j(e, t) > -1,
|
|
$ = (e, t) => {
|
|
for (let n = 0, o = e.length; n < o; n++) if (t(e[n], n)) return !0;
|
|
return !1;
|
|
},
|
|
V = (e, t) => {
|
|
const n = e.length,
|
|
o = new Array(n);
|
|
for (let r = 0; r < n; r++) {
|
|
const n = e[r];
|
|
o[r] = t(n, r);
|
|
}
|
|
return o;
|
|
},
|
|
q = (e, t) => {
|
|
for (let n = 0, o = e.length; n < o; n++) t(e[n], n);
|
|
},
|
|
W = (e, t) => {
|
|
for (let n = e.length - 1; n >= 0; n--) t(e[n], n);
|
|
},
|
|
K = (e, t) => {
|
|
const n = [],
|
|
o = [];
|
|
for (let r = 0, s = e.length; r < s; r++) {
|
|
const s = e[r];
|
|
(t(s, r) ? n : o).push(s);
|
|
}
|
|
return {pass: n, fail: o};
|
|
},
|
|
Y = (e, t) => {
|
|
const n = [];
|
|
for (let o = 0, r = e.length; o < r; o++) {
|
|
const r = e[o];
|
|
t(r, o) && n.push(r);
|
|
}
|
|
return n;
|
|
},
|
|
G = (e, t, n) => (
|
|
W(e, (e, o) => {
|
|
n = t(n, e, o);
|
|
}),
|
|
n
|
|
),
|
|
X = (e, t, n) => (
|
|
q(e, (e, o) => {
|
|
n = t(n, e, o);
|
|
}),
|
|
n
|
|
),
|
|
Z = (e, t, n) => {
|
|
for (let o = 0, r = e.length; o < r; o++) {
|
|
const r = e[o];
|
|
if (t(r, o)) return I.some(r);
|
|
if (n(r, o)) break;
|
|
}
|
|
return I.none();
|
|
},
|
|
Q = (e, t) => Z(e, t, L),
|
|
J = (e, t) => {
|
|
for (let n = 0, o = e.length; n < o; n++) if (t(e[n], n)) return I.some(n);
|
|
return I.none();
|
|
},
|
|
ee = e => {
|
|
const t = [];
|
|
for (let n = 0, o = e.length; n < o; ++n) {
|
|
if (!p(e[n])) throw new Error("Arr.flatten item " + n + " was not an array, input: " + e);
|
|
z.apply(t, e[n]);
|
|
}
|
|
return t;
|
|
},
|
|
te = (e, t) => ee(V(e, t)),
|
|
ne = (e, t) => {
|
|
for (let n = 0, o = e.length; n < o; ++n) if (!0 !== t(e[n], n)) return !1;
|
|
return !0;
|
|
},
|
|
oe = e => {
|
|
const t = F.call(e, 0);
|
|
return t.reverse(), t;
|
|
},
|
|
re = (e, t) => Y(e, e => !H(t, e)),
|
|
se = (e, t) => {
|
|
const n = {};
|
|
for (let o = 0, r = e.length; o < r; o++) {
|
|
const r = e[o];
|
|
n[String(r)] = t(r, o);
|
|
}
|
|
return n;
|
|
},
|
|
ae = (e, t) => {
|
|
const n = F.call(e, 0);
|
|
return n.sort(t), n;
|
|
},
|
|
ie = (e, t) => (t >= 0 && t < e.length ? I.some(e[t]) : I.none()),
|
|
le = e => ie(e, 0),
|
|
de = e => ie(e, e.length - 1),
|
|
ce = w(Array.from) ? Array.from : e => F.call(e),
|
|
ue = (e, t) => {
|
|
for (let n = 0; n < e.length; n++) {
|
|
const o = t(e[n], n);
|
|
if (o.isSome()) return o;
|
|
}
|
|
return I.none();
|
|
},
|
|
me = (e, t) => {
|
|
const n = [],
|
|
o = w(t) ? e => $(n, n => t(n, e)) : e => H(n, e);
|
|
for (let t = 0, r = e.length; t < r; t++) {
|
|
const r = e[t];
|
|
o(r) || n.push(r);
|
|
}
|
|
return n;
|
|
},
|
|
fe = Object.keys,
|
|
ge = Object.hasOwnProperty,
|
|
pe = (e, t) => {
|
|
const n = fe(e);
|
|
for (let o = 0, r = n.length; o < r; o++) {
|
|
const r = n[o];
|
|
t(e[r], r);
|
|
}
|
|
},
|
|
he = (e, t) => be(e, (e, n) => ({k: n, v: t(e, n)})),
|
|
be = (e, t) => {
|
|
const n = {};
|
|
return (
|
|
pe(e, (e, o) => {
|
|
const r = t(e, o);
|
|
n[r.k] = r.v;
|
|
}),
|
|
n
|
|
);
|
|
},
|
|
ve = e => (t, n) => {
|
|
e[n] = t;
|
|
},
|
|
ye = (e, t, n, o) => {
|
|
pe(e, (e, r) => {
|
|
(t(e, r) ? n : o)(e, r);
|
|
});
|
|
},
|
|
Ce = (e, t) => {
|
|
const n = {};
|
|
return ye(e, t, ve(n), k), n;
|
|
},
|
|
we = (e, t) => {
|
|
const n = [];
|
|
return (
|
|
pe(e, (e, o) => {
|
|
n.push(t(e, o));
|
|
}),
|
|
n
|
|
);
|
|
},
|
|
xe = e => we(e, R),
|
|
Ee = (e, t) => (ke(e, t) ? I.from(e[t]) : I.none()),
|
|
ke = (e, t) => ge.call(e, t),
|
|
_e = (e, t) => ke(e, t) && void 0 !== e[t] && null !== e[t],
|
|
Se = e => {
|
|
const t = {};
|
|
return (
|
|
q(e, e => {
|
|
t[e] = {};
|
|
}),
|
|
fe(t)
|
|
);
|
|
},
|
|
Ne = e => void 0 !== e.length,
|
|
Re = Array.isArray,
|
|
Ae = (e, t, n) => {
|
|
if (!e) return !1;
|
|
if (((n = n || e), Ne(e))) {
|
|
for (let o = 0, r = e.length; o < r; o++) if (!1 === t.call(n, e[o], o, e)) return !1;
|
|
} else for (const o in e) if (ke(e, o) && !1 === t.call(n, e[o], o, e)) return !1;
|
|
return !0;
|
|
},
|
|
Te = (e, t) => {
|
|
const n = [];
|
|
return (
|
|
Ae(e, (o, r) => {
|
|
n.push(t(o, r, e));
|
|
}),
|
|
n
|
|
);
|
|
},
|
|
Oe = (e, t) => {
|
|
const n = [];
|
|
return (
|
|
Ae(e, (o, r) => {
|
|
(t && !t(o, r, e)) || n.push(o);
|
|
}),
|
|
n
|
|
);
|
|
},
|
|
Be = (e, t, n, o) => {
|
|
let r = v(n) ? e[0] : n;
|
|
for (let n = 0; n < e.length; n++) r = t.call(o, r, e[n], n);
|
|
return r;
|
|
},
|
|
Pe = (e, t, n) => {
|
|
for (let o = 0, r = e.length; o < r; o++) if (t.call(n, e[o], o, e)) return o;
|
|
return -1;
|
|
},
|
|
De = e => e[e.length - 1],
|
|
Le = e => {
|
|
let t,
|
|
n = !1;
|
|
return (...o) => (n || ((n = !0), (t = e.apply(null, o))), t);
|
|
},
|
|
Me = () => Ie(0, 0),
|
|
Ie = (e, t) => ({major: e, minor: t}),
|
|
Fe = {
|
|
nu: Ie,
|
|
detect: (e, t) => {
|
|
const n = String(t).toLowerCase();
|
|
return 0 === e.length
|
|
? Me()
|
|
: ((e, t) => {
|
|
const n = ((e, t) => {
|
|
for (let n = 0; n < e.length; n++) {
|
|
const o = e[n];
|
|
if (o.test(t)) return o;
|
|
}
|
|
})(e, t);
|
|
if (!n) return {major: 0, minor: 0};
|
|
const o = e => Number(t.replace(n, "$" + e));
|
|
return Ie(o(1), o(2));
|
|
})(e, n);
|
|
},
|
|
unknown: Me
|
|
},
|
|
Ue = (e, t) => {
|
|
const n = String(t).toLowerCase();
|
|
return Q(e, e => e.search(n));
|
|
},
|
|
ze = (e, t, n) => "" === t || (e.length >= t.length && e.substr(n, n + t.length) === t),
|
|
je = (e, t) => ($e(e, t) ? ((e, t) => e.substring(t))(e, t.length) : e),
|
|
He = (e, t, n = 0, o) => {
|
|
const r = e.indexOf(t, n);
|
|
return -1 !== r && (!!v(o) || r + t.length <= o);
|
|
},
|
|
$e = (e, t) => ze(e, t, 0),
|
|
Ve = (e, t) => ze(e, t, e.length - t.length),
|
|
qe = e => t => t.replace(e, ""),
|
|
We = qe(/^\s+|\s+$/g),
|
|
Ke = qe(/^\s+/g),
|
|
Ye = qe(/\s+$/g),
|
|
Ge = e => e.length > 0,
|
|
Xe = e => !Ge(e),
|
|
Ze = (e, t = 10) => {
|
|
const n = parseInt(e, t);
|
|
return isNaN(n) ? I.none() : I.some(n);
|
|
},
|
|
Qe = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/,
|
|
Je = e => t => He(t, e),
|
|
et = [
|
|
{
|
|
name: "Edge",
|
|
versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
|
|
search: e => He(e, "edge/") && He(e, "chrome") && He(e, "safari") && He(e, "applewebkit")
|
|
},
|
|
{
|
|
name: "Chromium",
|
|
brand: "Chromium",
|
|
versionRegexes: [/.*?chrome\/([0-9]+)\.([0-9]+).*/, Qe],
|
|
search: e => He(e, "chrome") && !He(e, "chromeframe")
|
|
},
|
|
{
|
|
name: "IE",
|
|
versionRegexes: [/.*?msie\ ?([0-9]+)\.([0-9]+).*/, /.*?rv:([0-9]+)\.([0-9]+).*/],
|
|
search: e => He(e, "msie") || He(e, "trident")
|
|
},
|
|
{name: "Opera", versionRegexes: [Qe, /.*?opera\/([0-9]+)\.([0-9]+).*/], search: Je("opera")},
|
|
{name: "Firefox", versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/], search: Je("firefox")},
|
|
{
|
|
name: "Safari",
|
|
versionRegexes: [Qe, /.*?cpu os ([0-9]+)_([0-9]+).*/],
|
|
search: e => (He(e, "safari") || He(e, "mobile/")) && He(e, "applewebkit")
|
|
}
|
|
],
|
|
tt = [
|
|
{name: "Windows", search: Je("win"), versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},
|
|
{
|
|
name: "iOS",
|
|
search: e => He(e, "iphone") || He(e, "ipad"),
|
|
versionRegexes: [
|
|
/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,
|
|
/.*cpu os ([0-9]+)_([0-9]+).*/,
|
|
/.*cpu iphone os ([0-9]+)_([0-9]+).*/
|
|
]
|
|
},
|
|
{name: "Android", search: Je("android"), versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]},
|
|
{name: "macOS", search: Je("mac os x"), versionRegexes: [/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},
|
|
{name: "Linux", search: Je("linux"), versionRegexes: []},
|
|
{name: "Solaris", search: Je("sunos"), versionRegexes: []},
|
|
{name: "FreeBSD", search: Je("freebsd"), versionRegexes: []},
|
|
{name: "ChromeOS", search: Je("cros"), versionRegexes: [/.*?chrome\/([0-9]+)\.([0-9]+).*/]}
|
|
],
|
|
nt = {browsers: N(et), oses: N(tt)},
|
|
ot = "Edge",
|
|
rt = "Chromium",
|
|
st = "Opera",
|
|
at = "Firefox",
|
|
it = "Safari",
|
|
lt = e => {
|
|
const t = e.current,
|
|
n = e.version,
|
|
o = e => () => t === e;
|
|
return {
|
|
current: t,
|
|
version: n,
|
|
isEdge: o(ot),
|
|
isChromium: o(rt),
|
|
isIE: o("IE"),
|
|
isOpera: o(st),
|
|
isFirefox: o(at),
|
|
isSafari: o(it)
|
|
};
|
|
},
|
|
dt = () => lt({current: void 0, version: Fe.unknown()}),
|
|
ct = lt,
|
|
ut = (N(ot), N(rt), N("IE"), N(st), N(at), N(it), "Windows"),
|
|
mt = "Android",
|
|
ft = "Linux",
|
|
gt = "macOS",
|
|
pt = "Solaris",
|
|
ht = "FreeBSD",
|
|
bt = "ChromeOS",
|
|
vt = e => {
|
|
const t = e.current,
|
|
n = e.version,
|
|
o = e => () => t === e;
|
|
return {
|
|
current: t,
|
|
version: n,
|
|
isWindows: o(ut),
|
|
isiOS: o("iOS"),
|
|
isAndroid: o(mt),
|
|
isMacOS: o(gt),
|
|
isLinux: o(ft),
|
|
isSolaris: o(pt),
|
|
isFreeBSD: o(ht),
|
|
isChromeOS: o(bt)
|
|
};
|
|
},
|
|
yt = () => vt({current: void 0, version: Fe.unknown()}),
|
|
Ct = vt,
|
|
wt = (N(ut), N("iOS"), N(mt), N(ft), N(gt), N(pt), N(ht), N(bt), e => window.matchMedia(e).matches);
|
|
let xt = Le(() =>
|
|
((e, t, n) => {
|
|
const o = nt.browsers(),
|
|
r = nt.oses(),
|
|
s = t
|
|
.bind(e =>
|
|
((e, t) =>
|
|
ue(t.brands, t => {
|
|
const n = t.brand.toLowerCase();
|
|
return Q(e, e => {
|
|
var t;
|
|
return n === (null === (t = e.brand) || void 0 === t ? void 0 : t.toLowerCase());
|
|
}).map(e => ({current: e.name, version: Fe.nu(parseInt(t.version, 10), 0)}));
|
|
}))(o, e)
|
|
)
|
|
.orThunk(() =>
|
|
((e, t) =>
|
|
Ue(e, t).map(e => {
|
|
const n = Fe.detect(e.versionRegexes, t);
|
|
return {current: e.name, version: n};
|
|
}))(o, e)
|
|
)
|
|
.fold(dt, ct),
|
|
a = ((e, t) =>
|
|
Ue(e, t).map(e => {
|
|
const n = Fe.detect(e.versionRegexes, t);
|
|
return {current: e.name, version: n};
|
|
}))(r, e).fold(yt, Ct),
|
|
i = ((e, t, n, o) => {
|
|
const r = e.isiOS() && !0 === /ipad/i.test(n),
|
|
s = e.isiOS() && !r,
|
|
a = e.isiOS() || e.isAndroid(),
|
|
i = a || o("(pointer:coarse)"),
|
|
l = r || (!s && a && o("(min-device-width:768px)")),
|
|
d = s || (a && !l),
|
|
c = t.isSafari() && e.isiOS() && !1 === /safari/i.test(n),
|
|
u = !d && !l && !c;
|
|
return {
|
|
isiPad: N(r),
|
|
isiPhone: N(s),
|
|
isTablet: N(l),
|
|
isPhone: N(d),
|
|
isTouch: N(i),
|
|
isAndroid: e.isAndroid,
|
|
isiOS: e.isiOS,
|
|
isWebView: N(c),
|
|
isDesktop: N(u)
|
|
};
|
|
})(a, s, e, n);
|
|
return {browser: s, os: a, deviceType: i};
|
|
})(navigator.userAgent, I.from(navigator.userAgentData), wt)
|
|
);
|
|
const Et = () => xt(),
|
|
kt = navigator.userAgent,
|
|
_t = Et(),
|
|
St = _t.browser,
|
|
Nt = _t.os,
|
|
Rt = _t.deviceType,
|
|
At = -1 !== kt.indexOf("Windows Phone"),
|
|
Tt = {
|
|
transparentSrc: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",
|
|
documentMode: St.isIE() ? document.documentMode || 7 : 10,
|
|
cacheSuffix: null,
|
|
container: null,
|
|
canHaveCSP: !St.isIE(),
|
|
windowsPhone: At,
|
|
browser: {
|
|
current: St.current,
|
|
version: St.version,
|
|
isChromium: St.isChromium,
|
|
isEdge: St.isEdge,
|
|
isFirefox: St.isFirefox,
|
|
isIE: St.isIE,
|
|
isOpera: St.isOpera,
|
|
isSafari: St.isSafari
|
|
},
|
|
os: {
|
|
current: Nt.current,
|
|
version: Nt.version,
|
|
isAndroid: Nt.isAndroid,
|
|
isChromeOS: Nt.isChromeOS,
|
|
isFreeBSD: Nt.isFreeBSD,
|
|
isiOS: Nt.isiOS,
|
|
isLinux: Nt.isLinux,
|
|
isMacOS: Nt.isMacOS,
|
|
isSolaris: Nt.isSolaris,
|
|
isWindows: Nt.isWindows
|
|
},
|
|
deviceType: {
|
|
isDesktop: Rt.isDesktop,
|
|
isiPad: Rt.isiPad,
|
|
isiPhone: Rt.isiPhone,
|
|
isPhone: Rt.isPhone,
|
|
isTablet: Rt.isTablet,
|
|
isTouch: Rt.isTouch,
|
|
isWebView: Rt.isWebView
|
|
}
|
|
},
|
|
Ot = /^\s*|\s*$/g,
|
|
Bt = e => (y(e) ? "" : ("" + e).replace(Ot, "")),
|
|
Pt = function (e, t, n, o) {
|
|
(o = o || this), e && (n && (e = e[n]), Ae(e, (e, r) => !1 !== t.call(o, e, r, n) && (Pt(e, t, n, o), !0)));
|
|
},
|
|
Dt = {
|
|
trim: Bt,
|
|
isArray: Re,
|
|
is: (e, t) => (t ? !("array" !== t || !Re(e)) || typeof e === t : void 0 !== e),
|
|
toArray: e => {
|
|
if (Re(e)) return e;
|
|
{
|
|
const t = [];
|
|
for (let n = 0, o = e.length; n < o; n++) t[n] = e[n];
|
|
return t;
|
|
}
|
|
},
|
|
makeMap: (e, t, n = {}) => {
|
|
const o = m(e) ? e.split(t || ",") : e || [];
|
|
let r = o.length;
|
|
for (; r--; ) n[o[r]] = {};
|
|
return n;
|
|
},
|
|
each: Ae,
|
|
map: Te,
|
|
grep: Oe,
|
|
inArray: (e, t) => {
|
|
if (e) for (let n = 0, o = e.length; n < o; n++) if (e[n] === t) return n;
|
|
return -1;
|
|
},
|
|
hasOwn: ke,
|
|
extend: (e, ...t) => {
|
|
for (let n = 0; n < t.length; n++) {
|
|
const o = t[n];
|
|
for (const t in o)
|
|
if (ke(o, t)) {
|
|
const n = o[t];
|
|
void 0 !== n && (e[t] = n);
|
|
}
|
|
}
|
|
return e;
|
|
},
|
|
walk: Pt,
|
|
resolve: (e, t = window) => {
|
|
const n = e.split(".");
|
|
for (let e = 0, o = n.length; e < o && (t = t[n[e]]); e++);
|
|
return t;
|
|
},
|
|
explode: (e, t) => (p(e) ? e : "" === e ? [] : Te(e.split(t || ","), Bt)),
|
|
_addCacheSuffix: e => {
|
|
const t = Tt.cacheSuffix;
|
|
return t && (e += (-1 === e.indexOf("?") ? "?" : "&") + t), e;
|
|
}
|
|
},
|
|
Lt = (e, t, n = A) => e.exists(e => n(e, t)),
|
|
Mt = (e, t, n = A) => It(e, t, n).getOr(e.isNone() && t.isNone()),
|
|
It = (e, t, n) => (e.isSome() && t.isSome() ? I.some(n(e.getOrDie(), t.getOrDie())) : I.none()),
|
|
Ft = (e, t) => (e ? I.some(t) : I.none()),
|
|
Ut = "undefined" != typeof window ? window : Function("return this;")(),
|
|
zt = (e, t) =>
|
|
((e, t) => {
|
|
let n = null != t ? t : Ut;
|
|
for (let t = 0; t < e.length && null != n; ++t) n = n[e[t]];
|
|
return n;
|
|
})(e.split("."), t),
|
|
jt = Object.getPrototypeOf,
|
|
Ht = e => {
|
|
const t = zt("ownerDocument.defaultView", e);
|
|
return (
|
|
f(e) &&
|
|
((e =>
|
|
((e, t) => {
|
|
const n = ((e, t) => zt(e, t))(e, t);
|
|
if (null == n) throw new Error(e + " not available on this browser");
|
|
return n;
|
|
})("HTMLElement", e))(t).prototype.isPrototypeOf(e) ||
|
|
/^HTML\w*Element$/.test(jt(e).constructor.name))
|
|
);
|
|
},
|
|
$t = e => e.dom.nodeName.toLowerCase(),
|
|
Vt = e => e.dom.nodeType,
|
|
qt = e => t => Vt(t) === e,
|
|
Wt = e => Kt(e) && Ht(e.dom),
|
|
Kt = qt(1),
|
|
Yt = qt(3),
|
|
Gt = qt(9),
|
|
Xt = qt(11),
|
|
Zt = e => t => Kt(t) && $t(t) === e,
|
|
Qt = (e, t, n) => {
|
|
if (!(m(n) || b(n) || x(n)))
|
|
throw (
|
|
(console.error("Invalid call to Attribute.set. Key ", t, ":: Value ", n, ":: Element ", e),
|
|
new Error("Attribute value was not simple"))
|
|
);
|
|
e.setAttribute(t, n + "");
|
|
},
|
|
Jt = (e, t, n) => {
|
|
Qt(e.dom, t, n);
|
|
},
|
|
en = (e, t) => {
|
|
const n = e.dom;
|
|
pe(t, (e, t) => {
|
|
Qt(n, t, e);
|
|
});
|
|
},
|
|
tn = (e, t) => {
|
|
const n = e.dom.getAttribute(t);
|
|
return null === n ? void 0 : n;
|
|
},
|
|
nn = (e, t) => I.from(tn(e, t)),
|
|
on = (e, t) => {
|
|
const n = e.dom;
|
|
return !(!n || !n.hasAttribute) && n.hasAttribute(t);
|
|
},
|
|
rn = (e, t) => {
|
|
e.dom.removeAttribute(t);
|
|
},
|
|
sn = e => X(e.dom.attributes, (e, t) => ((e[t.name] = t.value), e), {}),
|
|
an = (e, t) => {
|
|
const n = tn(e, t);
|
|
return void 0 === n || "" === n ? [] : n.split(" ");
|
|
},
|
|
ln = e => void 0 !== e.dom.classList,
|
|
dn = e => an(e, "class"),
|
|
cn = (e, t) =>
|
|
((e, t, n) => {
|
|
const o = an(e, t).concat([n]);
|
|
return Jt(e, t, o.join(" ")), !0;
|
|
})(e, "class", t),
|
|
un = (e, t) =>
|
|
((e, t, n) => {
|
|
const o = Y(an(e, t), e => e !== n);
|
|
return o.length > 0 ? Jt(e, t, o.join(" ")) : rn(e, t), !1;
|
|
})(e, "class", t),
|
|
mn = (e, t) => {
|
|
ln(e) ? e.dom.classList.add(t) : cn(e, t);
|
|
},
|
|
fn = e => {
|
|
0 === (ln(e) ? e.dom.classList : dn(e)).length && rn(e, "class");
|
|
},
|
|
gn = (e, t) => {
|
|
ln(e) ? e.dom.classList.remove(t) : un(e, t), fn(e);
|
|
},
|
|
pn = (e, t) => ln(e) && e.dom.classList.contains(t),
|
|
hn = e => {
|
|
if (null == e) throw new Error("Node cannot be null or undefined");
|
|
return {dom: e};
|
|
},
|
|
bn = (e, t) => {
|
|
const n = (t || document).createElement("div");
|
|
if (((n.innerHTML = e), !n.hasChildNodes() || n.childNodes.length > 1)) {
|
|
const t = "HTML does not have a single root node";
|
|
throw (console.error(t, e), new Error(t));
|
|
}
|
|
return hn(n.childNodes[0]);
|
|
},
|
|
vn = (e, t) => {
|
|
const n = (t || document).createElement(e);
|
|
return hn(n);
|
|
},
|
|
yn = (e, t) => {
|
|
const n = (t || document).createTextNode(e);
|
|
return hn(n);
|
|
},
|
|
Cn = hn,
|
|
wn = (e, t, n) => I.from(e.dom.elementFromPoint(t, n)).map(hn),
|
|
xn = (e, t) => {
|
|
const n = [],
|
|
o = e => (n.push(e), t(e));
|
|
let r = t(e);
|
|
do {
|
|
r = r.bind(o);
|
|
} while (r.isSome());
|
|
return n;
|
|
},
|
|
En = (e, t) => {
|
|
const n = e.dom;
|
|
if (1 !== n.nodeType) return !1;
|
|
{
|
|
const e = n;
|
|
if (void 0 !== e.matches) return e.matches(t);
|
|
if (void 0 !== e.msMatchesSelector) return e.msMatchesSelector(t);
|
|
if (void 0 !== e.webkitMatchesSelector) return e.webkitMatchesSelector(t);
|
|
if (void 0 !== e.mozMatchesSelector) return e.mozMatchesSelector(t);
|
|
throw new Error("Browser lacks native selectors");
|
|
}
|
|
},
|
|
kn = e => (1 !== e.nodeType && 9 !== e.nodeType && 11 !== e.nodeType) || 0 === e.childElementCount,
|
|
_n = (e, t) => e.dom === t.dom,
|
|
Sn = (e, t) => {
|
|
const n = e.dom,
|
|
o = t.dom;
|
|
return n !== o && n.contains(o);
|
|
},
|
|
Nn = e => Cn(e.dom.ownerDocument),
|
|
Rn = e => (Gt(e) ? e : Nn(e)),
|
|
An = e => Cn(Rn(e).dom.defaultView),
|
|
Tn = e => I.from(e.dom.parentNode).map(Cn),
|
|
On = e => I.from(e.dom.parentElement).map(Cn),
|
|
Bn = (e, t) => {
|
|
const n = w(t) ? t : L;
|
|
let o = e.dom;
|
|
const r = [];
|
|
for (; null !== o.parentNode && void 0 !== o.parentNode; ) {
|
|
const e = o.parentNode,
|
|
t = Cn(e);
|
|
if ((r.push(t), !0 === n(t))) break;
|
|
o = e;
|
|
}
|
|
return r;
|
|
},
|
|
Pn = e => I.from(e.dom.previousSibling).map(Cn),
|
|
Dn = e => I.from(e.dom.nextSibling).map(Cn),
|
|
Ln = e => oe(xn(e, Pn)),
|
|
Mn = e => xn(e, Dn),
|
|
In = e => V(e.dom.childNodes, Cn),
|
|
Fn = (e, t) => {
|
|
const n = e.dom.childNodes;
|
|
return I.from(n[t]).map(Cn);
|
|
},
|
|
Un = e => Fn(e, 0),
|
|
zn = e => Fn(e, e.dom.childNodes.length - 1),
|
|
jn = e => e.dom.childNodes.length,
|
|
Hn = e => Xt(e) && C(e.dom.host),
|
|
$n = w(Element.prototype.attachShadow) && w(Node.prototype.getRootNode),
|
|
Vn = N($n),
|
|
qn = $n ? e => Cn(e.dom.getRootNode()) : Rn,
|
|
Wn = e =>
|
|
Hn(e)
|
|
? e
|
|
: (e => {
|
|
const t = e.dom.head;
|
|
if (null == t) throw new Error("Head is not available yet");
|
|
return Cn(t);
|
|
})(Rn(e)),
|
|
Kn = e => Cn(e.dom.host),
|
|
Yn = e => {
|
|
if (Vn() && C(e.target)) {
|
|
const t = Cn(e.target);
|
|
if (Kt(t) && Gn(t) && e.composed && e.composedPath) {
|
|
const t = e.composedPath();
|
|
if (t) return le(t);
|
|
}
|
|
}
|
|
return I.from(e.target);
|
|
},
|
|
Gn = e => C(e.dom.shadowRoot),
|
|
Xn = e => {
|
|
const t = Yt(e) ? e.dom.parentNode : e.dom;
|
|
if (null == t || null === t.ownerDocument) return !1;
|
|
const n = t.ownerDocument;
|
|
return (e => {
|
|
const t = qn(e);
|
|
return Hn(t) ? I.some(t) : I.none();
|
|
})(Cn(t)).fold(() => n.body.contains(t), S(Xn, Kn));
|
|
};
|
|
var Zn = (e, t, n, o, r) => (e(n, o) ? I.some(n) : w(r) && r(n) ? I.none() : t(n, o, r));
|
|
const Qn = (e, t, n) => {
|
|
let o = e.dom;
|
|
const r = w(n) ? n : L;
|
|
for (; o.parentNode; ) {
|
|
o = o.parentNode;
|
|
const e = Cn(o);
|
|
if (t(e)) return I.some(e);
|
|
if (r(e)) break;
|
|
}
|
|
return I.none();
|
|
},
|
|
Jn = (e, t, n) => Zn((e, t) => t(e), Qn, e, t, n),
|
|
eo = (e, t) => {
|
|
const n = e => {
|
|
for (let o = 0; o < e.childNodes.length; o++) {
|
|
const r = Cn(e.childNodes[o]);
|
|
if (t(r)) return I.some(r);
|
|
const s = n(e.childNodes[o]);
|
|
if (s.isSome()) return s;
|
|
}
|
|
return I.none();
|
|
};
|
|
return n(e.dom);
|
|
},
|
|
to = (e, t, n) => Qn(e, e => En(e, t), n),
|
|
no = (e, t) =>
|
|
((e, t) => {
|
|
const n = void 0 === t ? document : t.dom;
|
|
return kn(n) ? I.none() : I.from(n.querySelector(e)).map(Cn);
|
|
})(t, e),
|
|
oo = (e, t, n) => Zn((e, t) => En(e, t), to, e, t, n),
|
|
ro = (e, t = !1) => {
|
|
return Xn(e) ? e.dom.isContentEditable : ((n = e), oo(n, "[contenteditable]")).fold(N(t), e => "true" === so(e));
|
|
var n;
|
|
},
|
|
so = e => e.dom.contentEditable,
|
|
ao = e => void 0 !== e.style && w(e.style.getPropertyValue),
|
|
io = (e, t, n) => {
|
|
if (!m(n))
|
|
throw (
|
|
(console.error("Invalid call to CSS.set. Property ", t, ":: Value ", n, ":: Element ", e),
|
|
new Error("CSS value must be a string: " + n))
|
|
);
|
|
ao(e) && e.style.setProperty(t, n);
|
|
},
|
|
lo = (e, t, n) => {
|
|
const o = e.dom;
|
|
io(o, t, n);
|
|
},
|
|
co = (e, t) => {
|
|
const n = e.dom;
|
|
pe(t, (e, t) => {
|
|
io(n, t, e);
|
|
});
|
|
},
|
|
uo = (e, t) => {
|
|
const n = e.dom,
|
|
o = window.getComputedStyle(n).getPropertyValue(t);
|
|
return "" !== o || Xn(e) ? o : mo(n, t);
|
|
},
|
|
mo = (e, t) => (ao(e) ? e.style.getPropertyValue(t) : ""),
|
|
fo = (e, t) => {
|
|
const n = e.dom,
|
|
o = mo(n, t);
|
|
return I.from(o).filter(e => e.length > 0);
|
|
},
|
|
go = e => {
|
|
const t = {},
|
|
n = e.dom;
|
|
if (ao(n))
|
|
for (let e = 0; e < n.style.length; e++) {
|
|
const o = n.style.item(e);
|
|
t[o] = n.style[o];
|
|
}
|
|
return t;
|
|
},
|
|
po = (e, t) => {
|
|
((e, t) => {
|
|
ao(e) && e.style.removeProperty(t);
|
|
})(e.dom, t),
|
|
Lt(nn(e, "style").map(We), "") && rn(e, "style");
|
|
},
|
|
ho = (e, t) => {
|
|
Tn(e).each(n => {
|
|
n.dom.insertBefore(t.dom, e.dom);
|
|
});
|
|
},
|
|
bo = (e, t) => {
|
|
Dn(e).fold(
|
|
() => {
|
|
Tn(e).each(e => {
|
|
yo(e, t);
|
|
});
|
|
},
|
|
e => {
|
|
ho(e, t);
|
|
}
|
|
);
|
|
},
|
|
vo = (e, t) => {
|
|
Un(e).fold(
|
|
() => {
|
|
yo(e, t);
|
|
},
|
|
n => {
|
|
e.dom.insertBefore(t.dom, n.dom);
|
|
}
|
|
);
|
|
},
|
|
yo = (e, t) => {
|
|
e.dom.appendChild(t.dom);
|
|
},
|
|
Co = (e, t) => {
|
|
ho(e, t), yo(t, e);
|
|
},
|
|
wo = (e, t) => {
|
|
q(t, t => {
|
|
yo(e, t);
|
|
});
|
|
},
|
|
xo = e => {
|
|
(e.dom.textContent = ""),
|
|
q(In(e), e => {
|
|
Eo(e);
|
|
});
|
|
},
|
|
Eo = e => {
|
|
const t = e.dom;
|
|
null !== t.parentNode && t.parentNode.removeChild(t);
|
|
},
|
|
ko = e => {
|
|
const t = In(e);
|
|
var n, o;
|
|
t.length > 0 &&
|
|
((n = e),
|
|
q((o = t), (e, t) => {
|
|
const r = 0 === t ? n : o[t - 1];
|
|
bo(r, e);
|
|
})),
|
|
Eo(e);
|
|
},
|
|
_o = e => V(e, Cn),
|
|
So = e => e.dom.innerHTML,
|
|
No = (e, t) => {
|
|
const n = Nn(e).dom,
|
|
o = Cn(n.createDocumentFragment()),
|
|
r = ((e, t) => {
|
|
const n = (t || document).createElement("div");
|
|
return (n.innerHTML = e), In(Cn(n));
|
|
})(t, n);
|
|
wo(o, r), xo(e), yo(e, o);
|
|
},
|
|
Ro = (e, t, n, o) =>
|
|
((e, t, n, o, r) => {
|
|
const s = ((e, t) => n => {
|
|
e(n) &&
|
|
t(
|
|
(e => {
|
|
const t = Cn(Yn(e).getOr(e.target)),
|
|
n = () => e.stopPropagation(),
|
|
o = () => e.preventDefault(),
|
|
r = _(o, n);
|
|
return ((e, t, n, o, r, s, a) => ({target: e, x: t, y: n, stop: o, prevent: r, kill: s, raw: a}))(
|
|
t,
|
|
e.clientX,
|
|
e.clientY,
|
|
n,
|
|
o,
|
|
r,
|
|
e
|
|
);
|
|
})(n)
|
|
);
|
|
})(n, o);
|
|
return e.dom.addEventListener(t, s, false), {unbind: T(Ao, e, t, s, false)};
|
|
})(e, t, n, o),
|
|
Ao = (e, t, n, o) => {
|
|
e.dom.removeEventListener(t, n, o);
|
|
},
|
|
To = (e, t) => ({left: e, top: t, translate: (n, o) => To(e + n, t + o)}),
|
|
Oo = To,
|
|
Bo = (e, t) => (void 0 !== e ? e : void 0 !== t ? t : 0),
|
|
Po = e => {
|
|
const t = e.dom,
|
|
n = t.ownerDocument.body;
|
|
return n === t
|
|
? Oo(n.offsetLeft, n.offsetTop)
|
|
: Xn(e)
|
|
? (e => {
|
|
const t = e.getBoundingClientRect();
|
|
return Oo(t.left, t.top);
|
|
})(t)
|
|
: Oo(0, 0);
|
|
},
|
|
Do = e => {
|
|
const t = void 0 !== e ? e.dom : document,
|
|
n = t.body.scrollLeft || t.documentElement.scrollLeft,
|
|
o = t.body.scrollTop || t.documentElement.scrollTop;
|
|
return Oo(n, o);
|
|
},
|
|
Lo = (e, t, n) => {
|
|
const o = (void 0 !== n ? n.dom : document).defaultView;
|
|
o && o.scrollTo(e, t);
|
|
},
|
|
Mo = (e, t) => {
|
|
Et().browser.isSafari() && w(e.dom.scrollIntoViewIfNeeded)
|
|
? e.dom.scrollIntoViewIfNeeded(!1)
|
|
: e.dom.scrollIntoView(t);
|
|
},
|
|
Io = (e, t, n, o) => ({x: e, y: t, width: n, height: o, right: e + n, bottom: t + o}),
|
|
Fo = e => {
|
|
const t = void 0 === e ? window : e,
|
|
n = t.document,
|
|
o = Do(Cn(n));
|
|
return (e => {
|
|
const t = void 0 === e ? window : e;
|
|
return Et().browser.isFirefox() ? I.none() : I.from(t.visualViewport);
|
|
})(t).fold(
|
|
() => {
|
|
const e = t.document.documentElement,
|
|
n = e.clientWidth,
|
|
r = e.clientHeight;
|
|
return Io(o.left, o.top, n, r);
|
|
},
|
|
e => Io(Math.max(e.pageLeft, o.left), Math.max(e.pageTop, o.top), e.width, e.height)
|
|
);
|
|
},
|
|
Uo = (e, t) => {
|
|
let n = [];
|
|
return (
|
|
q(In(e), e => {
|
|
t(e) && (n = n.concat([e])), (n = n.concat(Uo(e, t)));
|
|
}),
|
|
n
|
|
);
|
|
},
|
|
zo = (e, t) =>
|
|
((e, t) => {
|
|
const n = void 0 === t ? document : t.dom;
|
|
return kn(n) ? [] : V(n.querySelectorAll(e), Cn);
|
|
})(t, e),
|
|
jo = (e, t, n) => Qn(e, t, n).isSome(),
|
|
Ho = (e, t) =>
|
|
((e, t) => {
|
|
const n = e.dom;
|
|
return n.parentNode
|
|
? ((e, t) => Q(e.dom.childNodes, e => t(Cn(e))).map(Cn))(Cn(n.parentNode), n => !_n(e, n) && t(n))
|
|
: I.none();
|
|
})(e, t).isSome(),
|
|
$o = (e, t) => eo(e, t).isSome();
|
|
class Vo {
|
|
constructor(e, t) {
|
|
(this.node = e),
|
|
(this.rootNode = t),
|
|
(this.current = this.current.bind(this)),
|
|
(this.next = this.next.bind(this)),
|
|
(this.prev = this.prev.bind(this)),
|
|
(this.prev2 = this.prev2.bind(this));
|
|
}
|
|
current() {
|
|
return this.node;
|
|
}
|
|
next(e) {
|
|
return (this.node = this.findSibling(this.node, "firstChild", "nextSibling", e)), this.node;
|
|
}
|
|
prev(e) {
|
|
return (this.node = this.findSibling(this.node, "lastChild", "previousSibling", e)), this.node;
|
|
}
|
|
prev2(e) {
|
|
return (this.node = this.findPreviousNode(this.node, e)), this.node;
|
|
}
|
|
findSibling(e, t, n, o) {
|
|
if (e) {
|
|
if (!o && e[t]) return e[t];
|
|
if (e !== this.rootNode) {
|
|
let t = e[n];
|
|
if (t) return t;
|
|
for (let o = e.parentNode; o && o !== this.rootNode; o = o.parentNode) if (((t = o[n]), t)) return t;
|
|
}
|
|
}
|
|
}
|
|
findPreviousNode(e, t) {
|
|
if (e) {
|
|
const n = e.previousSibling;
|
|
if (this.rootNode && n === this.rootNode) return;
|
|
if (n) {
|
|
if (!t) for (let e = n.lastChild; e; e = e.lastChild) if (!e.lastChild) return e;
|
|
return n;
|
|
}
|
|
const o = e.parentNode;
|
|
if (o && o !== this.rootNode) return o;
|
|
}
|
|
}
|
|
}
|
|
const qo = "\ufeff",
|
|
Wo = "\xa0",
|
|
Ko = e => e === qo,
|
|
Yo = /^[ \t\r\n]*$/,
|
|
Go = e => Yo.test(e),
|
|
Xo = e => "\n" === e || "\r" === e,
|
|
Zo = (e, t = 4, n = !0, o = !0) => {
|
|
const r = ((e, t) => (t <= 0 ? "" : new Array(t + 1).join(" ")))(0, t),
|
|
s = e.replace(/\t/g, r),
|
|
a = X(
|
|
s,
|
|
(e, t) =>
|
|
(e => -1 !== " \f\t\v".indexOf(e))(t) || t === Wo
|
|
? e.pcIsSpace ||
|
|
("" === e.str && n) ||
|
|
(e.str.length === s.length - 1 && o) ||
|
|
((e, t) => t < e.length && t >= 0 && Xo(e[t]))(s, e.str.length + 1)
|
|
? {pcIsSpace: !1, str: e.str + Wo}
|
|
: {pcIsSpace: !0, str: e.str + " "}
|
|
: {pcIsSpace: Xo(t), str: e.str + t},
|
|
{pcIsSpace: !1, str: ""}
|
|
);
|
|
return a.str;
|
|
},
|
|
Qo = e => t => !!t && t.nodeType === e,
|
|
Jo = e => !!e && !Object.getPrototypeOf(e),
|
|
er = Qo(1),
|
|
tr = e => er(e) && Wt(Cn(e)),
|
|
nr = e => {
|
|
const t = e.toLowerCase();
|
|
return e => C(e) && e.nodeName.toLowerCase() === t;
|
|
},
|
|
or = e => {
|
|
const t = e.map(e => e.toLowerCase());
|
|
return e => {
|
|
if (e && e.nodeName) {
|
|
const n = e.nodeName.toLowerCase();
|
|
return H(t, n);
|
|
}
|
|
return !1;
|
|
};
|
|
},
|
|
rr = (e, t) => {
|
|
const n = t.toLowerCase().split(" ");
|
|
return t => {
|
|
if (er(t)) {
|
|
const o = t.ownerDocument.defaultView;
|
|
if (o)
|
|
for (let r = 0; r < n.length; r++) {
|
|
const s = o.getComputedStyle(t, null);
|
|
if ((s ? s.getPropertyValue(e) : null) === n[r]) return !0;
|
|
}
|
|
}
|
|
return !1;
|
|
};
|
|
},
|
|
sr = e => er(e) && e.hasAttribute("data-mce-bogus"),
|
|
ar = e => er(e) && "TABLE" === e.tagName,
|
|
ir = e => t => {
|
|
if (tr(t)) {
|
|
if (t.contentEditable === e) return !0;
|
|
if (t.getAttribute("data-mce-contenteditable") === e) return !0;
|
|
}
|
|
return !1;
|
|
},
|
|
lr = or(["textarea", "input"]),
|
|
dr = Qo(3),
|
|
cr = Qo(4),
|
|
ur = Qo(7),
|
|
mr = Qo(8),
|
|
fr = Qo(9),
|
|
gr = Qo(11),
|
|
pr = nr("br"),
|
|
hr = nr("img"),
|
|
br = ir("true"),
|
|
vr = ir("false"),
|
|
yr = or(["td", "th"]),
|
|
Cr = or(["td", "th", "caption"]),
|
|
wr = or(["video", "audio", "object", "embed"]),
|
|
xr = nr("li"),
|
|
Er = nr("details"),
|
|
kr = nr("summary"),
|
|
_r = {skipBogus: !0, includeZwsp: !1, checkRootAsContent: !1},
|
|
Sr = ("data-mce-bookmark", e => er(e) && e.hasAttribute("data-mce-bookmark"));
|
|
const Nr = (e, t, n, o) =>
|
|
dr(e) &&
|
|
!((e, t, n) =>
|
|
Go(e.data) &&
|
|
!((e, t, n) => {
|
|
const o = Cn(t),
|
|
r = Cn(e),
|
|
s = n.getWhitespaceElements();
|
|
return jo(r, e => ke(s, $t(e)), T(_n, o));
|
|
})(e, t, n))(e, t, n) &&
|
|
(!o.includeZwsp ||
|
|
!(e => {
|
|
for (const t of e) if (!Ko(t)) return !1;
|
|
return !0;
|
|
})(e.data)),
|
|
Rr = (e, t, n, o) =>
|
|
(w(o.isContent) && o.isContent(t)) ||
|
|
((e, t) => er(e) && ke(t.getNonEmptyElements(), e.nodeName))(t, e) ||
|
|
Sr(t) ||
|
|
(e => er(e) && "A" === e.nodeName && !e.hasAttribute("href") && (e.hasAttribute("name") || e.hasAttribute("id")))(
|
|
t
|
|
) ||
|
|
Nr(t, n, e, o) ||
|
|
vr(t) ||
|
|
(br(t) && (e => On(Cn(e)).exists(e => !ro(e)))(t)),
|
|
Ar = (e, t, n) => {
|
|
const o = {..._r, ...n};
|
|
if (o.checkRootAsContent && Rr(e, t, t, o)) return !1;
|
|
let r = t.firstChild,
|
|
s = 0;
|
|
if (!r) return !0;
|
|
const a = new Vo(r, t);
|
|
do {
|
|
if (o.skipBogus && er(r)) {
|
|
const e = r.getAttribute("data-mce-bogus");
|
|
if (e) {
|
|
r = a.next("all" === e);
|
|
continue;
|
|
}
|
|
}
|
|
if (mr(r)) r = a.next(!0);
|
|
else if (pr(r)) s++, (r = a.next());
|
|
else {
|
|
if (Rr(e, r, t, o)) return !1;
|
|
r = a.next();
|
|
}
|
|
} while (r);
|
|
return s <= 1;
|
|
},
|
|
Tr = (e, t, n) => Ar(e, t.dom, {checkRootAsContent: !0, ...n}),
|
|
Or = (e, t, n) => Rr(e, t, t, {includeZwsp: _r.includeZwsp, ...n}),
|
|
Br = e => {
|
|
let t = e;
|
|
return {
|
|
get: () => t,
|
|
set: e => {
|
|
t = e;
|
|
}
|
|
};
|
|
},
|
|
Pr = e => {
|
|
const t = Br(I.none()),
|
|
n = () => t.get().each(e => clearInterval(e));
|
|
return {
|
|
clear: () => {
|
|
n(), t.set(I.none());
|
|
},
|
|
isSet: () => t.get().isSome(),
|
|
get: () => t.get(),
|
|
set: o => {
|
|
n(), t.set(I.some(setInterval(o, e)));
|
|
}
|
|
};
|
|
},
|
|
Dr = () => {
|
|
const e = (e => {
|
|
const t = Br(I.none()),
|
|
n = () => t.get().each(e);
|
|
return {
|
|
clear: () => {
|
|
n(), t.set(I.none());
|
|
},
|
|
isSet: () => t.get().isSome(),
|
|
get: () => t.get(),
|
|
set: e => {
|
|
n(), t.set(I.some(e));
|
|
}
|
|
};
|
|
})(k);
|
|
return {...e, on: t => e.get().each(t)};
|
|
},
|
|
Lr = e => {
|
|
const t = e.toLowerCase();
|
|
return "svg" === t ? "svg" : "math" === t ? "math" : "html";
|
|
},
|
|
Mr = e => "html" !== Lr(e),
|
|
Ir = e => Mr(e.nodeName),
|
|
Fr = e => Lr(e.nodeName),
|
|
Ur = ["svg", "math"],
|
|
zr = "data-mce-block",
|
|
jr = e =>
|
|
V((e => Y(fe(e), e => !/[A-Z]/.test(e)))(e), e => {
|
|
const t = CSS.escape(e);
|
|
return `${t}:` + V(Ur, e => `not(${e} ${t})`).join(":");
|
|
}).join(","),
|
|
Hr = (e, t) =>
|
|
C(t.querySelector(e))
|
|
? (t.setAttribute(zr, "true"),
|
|
"inline-boundary" === t.getAttribute("data-mce-selected") && t.removeAttribute("data-mce-selected"),
|
|
!0)
|
|
: (t.removeAttribute(zr), !1),
|
|
$r = (e, t) => {
|
|
const n = jr(e.getTransparentElements()),
|
|
o = jr(e.getBlockElements());
|
|
return Y(t.querySelectorAll(n), e => Hr(o, e));
|
|
},
|
|
Vr = (e, t, n) => {
|
|
var o;
|
|
const r = n ? "lastChild" : "firstChild";
|
|
for (let n = t[r]; n; n = n[r])
|
|
if (Ar(e, n, {checkRootAsContent: !0}))
|
|
return void (null === (o = n.parentNode) || void 0 === o || o.removeChild(n));
|
|
},
|
|
qr = (e, t, n) => {
|
|
const o = e.getBlockElements(),
|
|
r = Cn(t),
|
|
s = e => $t(e) in o,
|
|
a = e => _n(e, r);
|
|
q(_o(n), t => {
|
|
Qn(t, s, a).each(n => {
|
|
const o = ((t, o) => Y(In(t), t => s(t) && !e.isValidChild($t(n), $t(t))))(t);
|
|
if (o.length > 0) {
|
|
const t = On(n);
|
|
q(o, t => {
|
|
Qn(t, s, a).each(n => {
|
|
((e, t, n) => {
|
|
const o = document.createRange(),
|
|
r = t.parentNode;
|
|
if (r) {
|
|
o.setStartBefore(t), o.setEndBefore(n);
|
|
const s = o.extractContents();
|
|
Vr(e, s, !0), o.setStartAfter(n), o.setEndAfter(t);
|
|
const a = o.extractContents();
|
|
Vr(e, a, !1),
|
|
Ar(e, s, {checkRootAsContent: !0}) || r.insertBefore(s, t),
|
|
Ar(e, n, {checkRootAsContent: !0}) || r.insertBefore(n, t),
|
|
Ar(e, a, {checkRootAsContent: !0}) || r.insertBefore(a, t),
|
|
r.removeChild(t);
|
|
}
|
|
})(e, n.dom, t.dom);
|
|
});
|
|
}),
|
|
t.each(t => $r(e, t.dom));
|
|
}
|
|
});
|
|
});
|
|
},
|
|
Wr = (e, t) => {
|
|
const n = $r(e, t);
|
|
qr(e, t, n),
|
|
((e, t, n) => {
|
|
q([...n, ...(Zr(e, t) ? [t] : [])], t =>
|
|
q(zo(Cn(t), t.nodeName.toLowerCase()), t => {
|
|
Qr(e, t.dom) && ko(t);
|
|
})
|
|
);
|
|
})(e, t, n);
|
|
},
|
|
Kr = (e, t) => {
|
|
if (Xr(e, t)) {
|
|
const n = jr(e.getBlockElements());
|
|
Hr(n, t);
|
|
}
|
|
},
|
|
Yr = e => e.hasAttribute(zr),
|
|
Gr = (e, t) => ke(e.getTransparentElements(), t),
|
|
Xr = (e, t) => er(t) && Gr(e, t.nodeName),
|
|
Zr = (e, t) => Xr(e, t) && Yr(t),
|
|
Qr = (e, t) => Xr(e, t) && !Yr(t),
|
|
Jr = (e, t) => 1 === t.type && Gr(e, t.name) && m(t.attr(zr)),
|
|
es = Et().browser,
|
|
ts = e => Q(e, Kt),
|
|
ns = (e, t) => e.children && H(e.children, t),
|
|
os = (e, t = {}) => {
|
|
let n = 0;
|
|
const o = {},
|
|
r = Cn(e),
|
|
s = Rn(r),
|
|
a = e => {
|
|
yo(Wn(r), e);
|
|
},
|
|
i = e => {
|
|
const t = Wn(r);
|
|
no(t, "#" + e).each(Eo);
|
|
},
|
|
l = e => Ee(o, e).getOrThunk(() => ({id: "mce-u" + n++, passed: [], failed: [], count: 0})),
|
|
d = e =>
|
|
new Promise((n, r) => {
|
|
let i;
|
|
const d = Dt._addCacheSuffix(e),
|
|
c = l(d);
|
|
(o[d] = c), c.count++;
|
|
const u = (e, t) => {
|
|
q(e, D),
|
|
(c.status = t),
|
|
(c.passed = []),
|
|
(c.failed = []),
|
|
i && ((i.onload = null), (i.onerror = null), (i = null));
|
|
},
|
|
m = () => u(c.passed, 2),
|
|
f = () => u(c.failed, 3);
|
|
if ((n && c.passed.push(n), r && c.failed.push(r), 1 === c.status)) return;
|
|
if (2 === c.status) return void m();
|
|
if (3 === c.status) return void f();
|
|
c.status = 1;
|
|
const g = vn("link", s.dom);
|
|
en(g, {rel: "stylesheet", type: "text/css", id: c.id}),
|
|
t.contentCssCors && Jt(g, "crossOrigin", "anonymous"),
|
|
t.referrerPolicy && Jt(g, "referrerpolicy", t.referrerPolicy),
|
|
(i = g.dom),
|
|
(i.onload = m),
|
|
(i.onerror = f),
|
|
a(g),
|
|
Jt(g, "href", d);
|
|
}),
|
|
c = e => {
|
|
const t = Dt._addCacheSuffix(e);
|
|
Ee(o, t).each(e => {
|
|
0 == --e.count && (delete o[t], i(e.id));
|
|
});
|
|
};
|
|
return {
|
|
load: d,
|
|
loadRawCss: (e, t) => {
|
|
const n = l(e);
|
|
(o[e] = n), n.count++;
|
|
const r = vn("style", s.dom);
|
|
en(r, {rel: "stylesheet", type: "text/css", id: n.id}), (r.dom.innerHTML = t), a(r);
|
|
},
|
|
loadAll: e =>
|
|
Promise.allSettled(V(e, e => d(e).then(N(e)))).then(e => {
|
|
const t = K(e, e => "fulfilled" === e.status);
|
|
return t.fail.length > 0 ? Promise.reject(V(t.fail, e => e.reason)) : V(t.pass, e => e.value);
|
|
}),
|
|
unload: c,
|
|
unloadRawCss: e => {
|
|
Ee(o, e).each(t => {
|
|
0 == --t.count && (delete o[e], i(t.id));
|
|
});
|
|
},
|
|
unloadAll: e => {
|
|
q(e, e => {
|
|
c(e);
|
|
});
|
|
},
|
|
_setReferrerPolicy: e => {
|
|
t.referrerPolicy = e;
|
|
},
|
|
_setContentCssCors: e => {
|
|
t.contentCssCors = e;
|
|
}
|
|
};
|
|
},
|
|
rs = (() => {
|
|
const e = new WeakMap();
|
|
return {
|
|
forElement: (t, n) => {
|
|
const o = qn(t).dom;
|
|
return I.from(e.get(o)).getOrThunk(() => {
|
|
const t = os(o, n);
|
|
return e.set(o, t), t;
|
|
});
|
|
}
|
|
};
|
|
})(),
|
|
ss = (e, t) => C(e) && (Or(t, e) || t.isInline(e.nodeName.toLowerCase())),
|
|
as = e => (e => "span" === e.nodeName.toLowerCase())(e) && "bookmark" === e.getAttribute("data-mce-type"),
|
|
is = (e, t, n, o) => {
|
|
var r;
|
|
const s = o || t;
|
|
if (er(t) && as(t)) return t;
|
|
const a = t.childNodes;
|
|
for (let t = a.length - 1; t >= 0; t--) is(e, a[t], n, s);
|
|
if (er(t)) {
|
|
const e = t.childNodes;
|
|
1 === e.length && as(e[0]) && (null === (r = t.parentNode) || void 0 === r || r.insertBefore(e[0], t));
|
|
}
|
|
return (
|
|
(e => gr(e) || fr(e))(t) ||
|
|
Or(n, t) ||
|
|
(e => !!er(e) && e.childNodes.length > 0)(t) ||
|
|
((e, t, n) =>
|
|
dr(e) &&
|
|
e.data.length > 0 &&
|
|
((e, t, n) => {
|
|
const o = new Vo(e, t).prev(!1),
|
|
r = new Vo(e, t).next(!1),
|
|
s = v(o) || ss(o, n),
|
|
a = v(r) || ss(r, n);
|
|
return s && a;
|
|
})(e, t, n))(t, s, n) ||
|
|
e.remove(t),
|
|
t
|
|
);
|
|
},
|
|
ls = Dt.makeMap,
|
|
ds = /[&<>\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
|
|
cs = /[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
|
|
us = /[<>&\"\']/g,
|
|
ms = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi,
|
|
fs = {
|
|
128: "\u20ac",
|
|
130: "\u201a",
|
|
131: "\u0192",
|
|
132: "\u201e",
|
|
133: "\u2026",
|
|
134: "\u2020",
|
|
135: "\u2021",
|
|
136: "\u02c6",
|
|
137: "\u2030",
|
|
138: "\u0160",
|
|
139: "\u2039",
|
|
140: "\u0152",
|
|
142: "\u017d",
|
|
145: "\u2018",
|
|
146: "\u2019",
|
|
147: "\u201c",
|
|
148: "\u201d",
|
|
149: "\u2022",
|
|
150: "\u2013",
|
|
151: "\u2014",
|
|
152: "\u02dc",
|
|
153: "\u2122",
|
|
154: "\u0161",
|
|
155: "\u203a",
|
|
156: "\u0153",
|
|
158: "\u017e",
|
|
159: "\u0178"
|
|
},
|
|
gs = {'"': """, "'": "'", "<": "<", ">": ">", "&": "&", "`": "`"},
|
|
ps = {"<": "<", ">": ">", "&": "&", """: '"', "'": "'"},
|
|
hs = (e, t) => {
|
|
const n = {};
|
|
if (e) {
|
|
const o = e.split(",");
|
|
t = t || 10;
|
|
for (let e = 0; e < o.length; e += 2) {
|
|
const r = String.fromCharCode(parseInt(o[e], t));
|
|
if (!gs[r]) {
|
|
const t = "&" + o[e + 1] + ";";
|
|
(n[r] = t), (n[t] = r);
|
|
}
|
|
}
|
|
return n;
|
|
}
|
|
},
|
|
bs = hs(
|
|
"50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",
|
|
32
|
|
),
|
|
vs = (e, t) => e.replace(t ? ds : cs, e => gs[e] || e),
|
|
ys = (e, t) =>
|
|
e.replace(t ? ds : cs, e =>
|
|
e.length > 1
|
|
? "&#" + (1024 * (e.charCodeAt(0) - 55296) + (e.charCodeAt(1) - 56320) + 65536) + ";"
|
|
: gs[e] || "&#" + e.charCodeAt(0) + ";"
|
|
),
|
|
Cs = (e, t, n) => {
|
|
const o = n || bs;
|
|
return e.replace(t ? ds : cs, e => gs[e] || o[e] || e);
|
|
},
|
|
ws = {
|
|
encodeRaw: vs,
|
|
encodeAllRaw: e => ("" + e).replace(us, e => gs[e] || e),
|
|
encodeNumeric: ys,
|
|
encodeNamed: Cs,
|
|
getEncodeFunc: (e, t) => {
|
|
const n = hs(t) || bs,
|
|
o = ls(e.replace(/\+/g, ","));
|
|
return o.named && o.numeric
|
|
? (e, t) =>
|
|
e.replace(t ? ds : cs, e =>
|
|
void 0 !== gs[e]
|
|
? gs[e]
|
|
: void 0 !== n[e]
|
|
? n[e]
|
|
: e.length > 1
|
|
? "&#" + (1024 * (e.charCodeAt(0) - 55296) + (e.charCodeAt(1) - 56320) + 65536) + ";"
|
|
: "&#" + e.charCodeAt(0) + ";"
|
|
)
|
|
: o.named
|
|
? t
|
|
? (e, t) => Cs(e, t, n)
|
|
: Cs
|
|
: o.numeric
|
|
? ys
|
|
: vs;
|
|
},
|
|
decode: e =>
|
|
e.replace(ms, (e, t) =>
|
|
t
|
|
? (t = "x" === t.charAt(0).toLowerCase() ? parseInt(t.substr(1), 16) : parseInt(t, 10)) > 65535
|
|
? ((t -= 65536), String.fromCharCode(55296 + (t >> 10), 56320 + (1023 & t)))
|
|
: fs[t] || String.fromCharCode(t)
|
|
: ps[e] ||
|
|
bs[e] ||
|
|
(e => {
|
|
const t = vn("div").dom;
|
|
return (t.innerHTML = e), t.textContent || t.innerText || e;
|
|
})(e)
|
|
)
|
|
},
|
|
xs = (e, t) => ((e = Dt.trim(e)) ? e.split(t || " ") : []),
|
|
Es = e => new RegExp("^" + e.replace(/([?+*])/g, ".$1") + "$"),
|
|
ks = e =>
|
|
Object.freeze([
|
|
"id",
|
|
"accesskey",
|
|
"class",
|
|
"dir",
|
|
"lang",
|
|
"style",
|
|
"tabindex",
|
|
"title",
|
|
"role",
|
|
...("html4" !== e
|
|
? [
|
|
"contenteditable",
|
|
"contextmenu",
|
|
"draggable",
|
|
"dropzone",
|
|
"hidden",
|
|
"spellcheck",
|
|
"translate",
|
|
"itemprop",
|
|
"itemscope",
|
|
"itemtype"
|
|
]
|
|
: []),
|
|
...("html5-strict" !== e ? ["xml:lang"] : [])
|
|
]),
|
|
_s = e => {
|
|
let t, n;
|
|
(t = "address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul"),
|
|
(n =
|
|
"a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd label map noscript object q s samp script select small span strong sub sup textarea u var #text #comment"),
|
|
"html4" !== e &&
|
|
((t += " article aside details dialog figure main header footer hgroup section nav a ins del canvas map"),
|
|
(n +=
|
|
" audio canvas command data datalist mark meter output picture progress time wbr video ruby bdi keygen svg")),
|
|
"html5-strict" !== e &&
|
|
((n = [n, "acronym applet basefont big font strike tt"].join(" ")),
|
|
(t = [t, "center dir isindex noframes"].join(" ")));
|
|
const o = [t, n].join(" ");
|
|
return {blockContent: t, phrasingContent: n, flowContent: o};
|
|
},
|
|
Ss = e => {
|
|
const {blockContent: t, phrasingContent: n, flowContent: o} = _s(e),
|
|
r = e => Object.freeze(e.split(" "));
|
|
return Object.freeze({blockContent: r(t), phrasingContent: r(n), flowContent: r(o)});
|
|
},
|
|
Ns = {html4: Le(() => Ss("html4")), html5: Le(() => Ss("html5")), "html5-strict": Le(() => Ss("html5-strict"))},
|
|
Rs = (e, t) => {
|
|
const {blockContent: n, phrasingContent: o, flowContent: r} = Ns[e]();
|
|
return "blocks" === t ? I.some(n) : "phrasing" === t ? I.some(o) : "flow" === t ? I.some(r) : I.none();
|
|
},
|
|
As = e =>
|
|
I.from(
|
|
/^(@?)([A-Za-z0-9_\-.\u00b7\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u037d\u037f-\u1fff\u200c-\u200d\u203f-\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]+)$/.exec(
|
|
e
|
|
)
|
|
).map(e => ({preset: "@" === e[1], name: e[2]})),
|
|
Ts = {},
|
|
Os = Dt.makeMap,
|
|
Bs = Dt.each,
|
|
Ps = Dt.extend,
|
|
Ds = Dt.explode,
|
|
Ls = (e, t = {}) => {
|
|
const n = Os(e, " ", Os(e.toUpperCase(), " "));
|
|
return Ps(n, t);
|
|
},
|
|
Ms = e => Ls("td th li dt dd figcaption caption details summary", e.getTextBlockElements()),
|
|
Is = (e, t) => {
|
|
if (e) {
|
|
const n = {};
|
|
return (
|
|
m(e) && (e = {"*": e}),
|
|
Bs(e, (e, o) => {
|
|
n[o] = n[o.toUpperCase()] = "map" === t ? Os(e, /[, ]/) : Ds(e, /[, ]/);
|
|
}),
|
|
n
|
|
);
|
|
}
|
|
},
|
|
Fs = (e = {}) => {
|
|
var t;
|
|
const n = {},
|
|
o = {};
|
|
let r = [];
|
|
const s = {},
|
|
a = {},
|
|
i = (t, n, o) => {
|
|
const r = e[t];
|
|
if (r) return Os(r, /[, ]/, Os(r.toUpperCase(), /[, ]/));
|
|
{
|
|
let e = Ts[t];
|
|
return e || ((e = Ls(n, o)), (Ts[t] = e)), e;
|
|
}
|
|
},
|
|
l = null !== (t = e.schema) && void 0 !== t ? t : "html5",
|
|
d = (e => {
|
|
const t = ks(e),
|
|
{phrasingContent: n, flowContent: o} = _s(e),
|
|
r = {},
|
|
s = (e, t, n) => {
|
|
r[e] = {attributes: se(t, N({})), attributesOrder: t, children: se(n, N({}))};
|
|
},
|
|
a = (e, n = "", o = "") => {
|
|
const r = xs(o),
|
|
a = xs(e);
|
|
let i = a.length;
|
|
const l = [...t, ...xs(n)];
|
|
for (; i--; ) s(a[i], l.slice(), r);
|
|
},
|
|
i = (e, t) => {
|
|
const n = xs(e),
|
|
o = xs(t);
|
|
let s = n.length;
|
|
for (; s--; ) {
|
|
const e = r[n[s]];
|
|
for (let t = 0, n = o.length; t < n; t++) (e.attributes[o[t]] = {}), e.attributesOrder.push(o[t]);
|
|
}
|
|
};
|
|
return (
|
|
"html5-strict" !== e &&
|
|
(q(xs("acronym applet basefont big font strike tt"), e => {
|
|
a(e, "", n);
|
|
}),
|
|
q(xs("center dir isindex noframes"), e => {
|
|
a(e, "", o);
|
|
})),
|
|
a("html", "manifest", "head body"),
|
|
a("head", "", "base command link meta noscript script style title"),
|
|
a("title hr noscript br"),
|
|
a("base", "href target"),
|
|
a("link", "href rel media hreflang type sizes hreflang"),
|
|
a("meta", "name http-equiv content charset"),
|
|
a("style", "media type scoped"),
|
|
a("script", "src async defer type charset"),
|
|
a(
|
|
"body",
|
|
"onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload",
|
|
o
|
|
),
|
|
a("dd div", "", o),
|
|
a("address dt caption", "", "html4" === e ? n : o),
|
|
a(
|
|
"h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn",
|
|
"",
|
|
n
|
|
),
|
|
a("blockquote", "cite", o),
|
|
a("ol", "reversed start type", "li"),
|
|
a("ul", "", "li"),
|
|
a("li", "value", o),
|
|
a("dl", "", "dt dd"),
|
|
a("a", "href target rel media hreflang type", "html4" === e ? n : o),
|
|
a("q", "cite", n),
|
|
a("ins del", "cite datetime", o),
|
|
a("img", "src sizes srcset alt usemap ismap width height"),
|
|
a("iframe", "src name width height", o),
|
|
a("embed", "src type width height"),
|
|
a("object", "data type typemustmatch name usemap form width height", [o, "param"].join(" ")),
|
|
a("param", "name value"),
|
|
a("map", "name", [o, "area"].join(" ")),
|
|
a("area", "alt coords shape href target rel media hreflang type"),
|
|
a("table", "border", "caption colgroup thead tfoot tbody tr" + ("html4" === e ? " col" : "")),
|
|
a("colgroup", "span", "col"),
|
|
a("col", "span"),
|
|
a("tbody thead tfoot", "", "tr"),
|
|
a("tr", "", "td th"),
|
|
a("td", "colspan rowspan headers", o),
|
|
a("th", "colspan rowspan headers scope abbr", o),
|
|
a("form", "accept-charset action autocomplete enctype method name novalidate target", o),
|
|
a("fieldset", "disabled form name", [o, "legend"].join(" ")),
|
|
a("label", "form for", n),
|
|
a(
|
|
"input",
|
|
"accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate formtarget height list max maxlength min multiple name pattern readonly required size src step type value width"
|
|
),
|
|
a(
|
|
"button",
|
|
"disabled form formaction formenctype formmethod formnovalidate formtarget name type value",
|
|
"html4" === e ? o : n
|
|
),
|
|
a("select", "disabled form multiple name required size", "option optgroup"),
|
|
a("optgroup", "disabled label", "option"),
|
|
a("option", "disabled label selected value"),
|
|
a("textarea", "cols dirname disabled form maxlength name readonly required rows wrap"),
|
|
a("menu", "type label", [o, "li"].join(" ")),
|
|
a("noscript", "", o),
|
|
"html4" !== e &&
|
|
(a("wbr"),
|
|
a("ruby", "", [n, "rt rp"].join(" ")),
|
|
a("figcaption", "", o),
|
|
a("mark rt rp bdi", "", n),
|
|
a("summary", "", [n, "h1 h2 h3 h4 h5 h6"].join(" ")),
|
|
a("canvas", "width height", o),
|
|
a("data", "value", n),
|
|
a(
|
|
"video",
|
|
"src crossorigin poster preload autoplay mediagroup loop muted controls width height buffered",
|
|
[o, "track source"].join(" ")
|
|
),
|
|
a(
|
|
"audio",
|
|
"src crossorigin preload autoplay mediagroup loop muted controls buffered volume",
|
|
[o, "track source"].join(" ")
|
|
),
|
|
a("picture", "", "img source"),
|
|
a("source", "src srcset type media sizes"),
|
|
a("track", "kind src srclang label default"),
|
|
a("datalist", "", [n, "option"].join(" ")),
|
|
a("article section nav aside main header footer", "", o),
|
|
a("hgroup", "", "h1 h2 h3 h4 h5 h6"),
|
|
a("figure", "", [o, "figcaption"].join(" ")),
|
|
a("time", "datetime", n),
|
|
a("dialog", "open", o),
|
|
a("command", "type label icon disabled checked radiogroup command"),
|
|
a("output", "for form name", n),
|
|
a("progress", "value max", n),
|
|
a("meter", "value min max low high optimum", n),
|
|
a("details", "open", [o, "summary"].join(" ")),
|
|
a("keygen", "autofocus challenge disabled form keytype name"),
|
|
s(
|
|
"svg",
|
|
"id tabindex lang xml:space class style x y width height viewBox preserveAspectRatio zoomAndPan transform".split(
|
|
" "
|
|
),
|
|
[]
|
|
)),
|
|
"html5-strict" !== e &&
|
|
(i("script", "language xml:space"),
|
|
i("style", "xml:space"),
|
|
i("object", "declare classid code codebase codetype archive standby align border hspace vspace"),
|
|
i("embed", "align name hspace vspace"),
|
|
i("param", "valuetype type"),
|
|
i("a", "charset name rev shape coords"),
|
|
i("br", "clear"),
|
|
i("applet", "codebase archive code object alt name width height align hspace vspace"),
|
|
i("img", "name longdesc align border hspace vspace"),
|
|
i("iframe", "longdesc frameborder marginwidth marginheight scrolling align"),
|
|
i("font basefont", "size color face"),
|
|
i("input", "usemap align"),
|
|
i("select"),
|
|
i("textarea"),
|
|
i("h1 h2 h3 h4 h5 h6 div p legend caption", "align"),
|
|
i("ul", "type compact"),
|
|
i("li", "type"),
|
|
i("ol dl menu dir", "compact"),
|
|
i("pre", "width xml:space"),
|
|
i("hr", "align noshade size width"),
|
|
i("isindex", "prompt"),
|
|
i("table", "summary width frame rules cellspacing cellpadding align bgcolor"),
|
|
i("col", "width align char charoff valign"),
|
|
i("colgroup", "width align char charoff valign"),
|
|
i("thead", "align char charoff valign"),
|
|
i("tr", "align char charoff valign bgcolor"),
|
|
i("th", "axis align char charoff valign nowrap bgcolor width height"),
|
|
i("form", "accept"),
|
|
i("td", "abbr axis scope align char charoff valign nowrap bgcolor width height"),
|
|
i("tfoot", "align char charoff valign"),
|
|
i("tbody", "align char charoff valign"),
|
|
i("area", "nohref"),
|
|
i("body", "background bgcolor text link vlink alink")),
|
|
"html4" !== e &&
|
|
(i("input button select textarea", "autofocus"),
|
|
i("input textarea", "placeholder"),
|
|
i("a", "download"),
|
|
i("link script img", "crossorigin"),
|
|
i("img", "loading"),
|
|
i("iframe", "sandbox seamless allow allowfullscreen loading")),
|
|
"html4" !== e &&
|
|
q([r.video, r.audio], e => {
|
|
delete e.children.audio, delete e.children.video;
|
|
}),
|
|
q(xs("a form meter progress dfn"), e => {
|
|
r[e] && delete r[e].children[e];
|
|
}),
|
|
delete r.caption.children.table,
|
|
delete r.script,
|
|
r
|
|
);
|
|
})(l);
|
|
!1 === e.verify_html && (e.valid_elements = "*[*]");
|
|
const c = Is(e.valid_styles),
|
|
u = Is(e.invalid_styles, "map"),
|
|
g = Is(e.valid_classes, "map"),
|
|
h = i("whitespace_elements", "pre script noscript style textarea video audio iframe object code"),
|
|
v = i("self_closing_elements", "colgroup dd dt li option p td tfoot th thead tr"),
|
|
y = i(
|
|
"void_elements",
|
|
"area base basefont br col frame hr img input isindex link meta param embed source wbr track"
|
|
),
|
|
C = i(
|
|
"boolean_attributes",
|
|
"checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls allowfullscreen"
|
|
),
|
|
w = "td th iframe video audio object script code",
|
|
x = i("non_empty_elements", w + " pre svg textarea summary", y),
|
|
E = i("move_caret_before_on_enter_elements", w + " table", y),
|
|
k = "h1 h2 h3 h4 h5 h6",
|
|
_ = i(
|
|
"text_block_elements",
|
|
k +
|
|
" p div address pre form blockquote center dir fieldset header footer article section hgroup aside main nav figure"
|
|
),
|
|
S = i(
|
|
"block_elements",
|
|
"hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup figcaption details summary html body multicol listing",
|
|
_
|
|
),
|
|
R = i("text_inline_elements", "span strong b em i font s strike u var cite dfn code mark q sup sub samp"),
|
|
A = i("transparent_elements", "a ins del canvas map"),
|
|
T = i("wrap_block_elements", "pre " + k);
|
|
Bs("script noscript iframe noframes noembed title style textarea xmp plaintext".split(" "), e => {
|
|
a[e] = new RegExp("</" + e + "[^>]*>", "gi");
|
|
});
|
|
const O = e => {
|
|
const t = I.from(n["@"]),
|
|
o = /[*?+]/;
|
|
q(
|
|
((e, t) => {
|
|
const n = /^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)])?$/;
|
|
return te(xs(t, ","), t => {
|
|
const o = n.exec(t);
|
|
if (o) {
|
|
const t = o[1],
|
|
n = o[2],
|
|
r = o[3],
|
|
s = o[4],
|
|
a = o[5],
|
|
i = {attributes: {}, attributesOrder: []};
|
|
if (
|
|
(e.each(e =>
|
|
((e, t) => {
|
|
pe(e.attributes, (e, n) => {
|
|
t.attributes[n] = e;
|
|
}),
|
|
t.attributesOrder.push(...e.attributesOrder);
|
|
})(e, i)
|
|
),
|
|
"#" === t ? (i.paddEmpty = !0) : "-" === t && (i.removeEmpty = !0),
|
|
"!" === s && (i.removeEmptyAttrs = !0),
|
|
a &&
|
|
((e, t) => {
|
|
const n = /^([!\-])?(\w+[\\:]:\w+|[^=~<]+)?(?:([=~<])(.*))?$/,
|
|
o = /[*?+]/,
|
|
{attributes: r, attributesOrder: s} = t;
|
|
q(xs(e, "|"), e => {
|
|
const a = n.exec(e);
|
|
if (a) {
|
|
const e = {},
|
|
n = a[1],
|
|
i = a[2].replace(/[\\:]:/g, ":"),
|
|
l = a[3],
|
|
d = a[4];
|
|
if (
|
|
("!" === n &&
|
|
((t.attributesRequired = t.attributesRequired || []),
|
|
t.attributesRequired.push(i),
|
|
(e.required = !0)),
|
|
"-" === n)
|
|
)
|
|
return delete r[i], void s.splice(Dt.inArray(s, i), 1);
|
|
if (
|
|
(l &&
|
|
("=" === l
|
|
? ((t.attributesDefault = t.attributesDefault || []),
|
|
t.attributesDefault.push({name: i, value: d}),
|
|
(e.defaultValue = d))
|
|
: "~" === l
|
|
? ((t.attributesForced = t.attributesForced || []),
|
|
t.attributesForced.push({name: i, value: d}),
|
|
(e.forcedValue = d))
|
|
: "<" === l && (e.validValues = Dt.makeMap(d, "?"))),
|
|
o.test(i))
|
|
) {
|
|
const n = e;
|
|
(t.attributePatterns = t.attributePatterns || []),
|
|
(n.pattern = Es(i)),
|
|
t.attributePatterns.push(n);
|
|
} else r[i] || s.push(i), (r[i] = e);
|
|
}
|
|
});
|
|
})(a, i),
|
|
r && (i.outputName = n),
|
|
"@" === n)
|
|
) {
|
|
if (!e.isNone()) return [];
|
|
e = I.some(i);
|
|
}
|
|
return [r ? {name: n, element: i, aliasName: r} : {name: n, element: i}];
|
|
}
|
|
return [];
|
|
});
|
|
})(t, null != e ? e : ""),
|
|
({name: e, element: t, aliasName: s}) => {
|
|
if ((s && (n[s] = t), o.test(e))) {
|
|
const n = t;
|
|
(n.pattern = Es(e)), r.push(n);
|
|
} else n[e] = t;
|
|
}
|
|
);
|
|
},
|
|
B = e => {
|
|
(r = []),
|
|
q(fe(n), e => {
|
|
delete n[e];
|
|
}),
|
|
O(e);
|
|
},
|
|
P = (e, t) => {
|
|
var r, a;
|
|
delete Ts.text_block_elements, delete Ts.block_elements;
|
|
const i = !!t.extends && !oe(t.extends),
|
|
d = t.extends;
|
|
if (
|
|
((o[e] = d ? o[d] : {}),
|
|
(s[e] = null != d ? d : e),
|
|
(x[e.toUpperCase()] = {}),
|
|
(x[e] = {}),
|
|
i || ((S[e.toUpperCase()] = {}), (S[e] = {})),
|
|
d && !n[e] && n[d])
|
|
) {
|
|
const t = (e => {
|
|
const t = e =>
|
|
p(e)
|
|
? V(e, t)
|
|
: (e => f(e) && e.source && "[object RegExp]" === Object.prototype.toString.call(e))(e)
|
|
? new RegExp(e.source, e.flags)
|
|
: f(e)
|
|
? he(e, t)
|
|
: e;
|
|
return t(e);
|
|
})(n[d]);
|
|
delete t.removeEmptyAttrs, delete t.removeEmpty, (n[e] = t);
|
|
} else n[e] = {attributesOrder: [], attributes: {}};
|
|
if (p(t.attributes)) {
|
|
const o = e => {
|
|
s.attributesOrder.push(e), (s.attributes[e] = {});
|
|
},
|
|
s = null !== (r = n[e]) && void 0 !== r ? r : {};
|
|
delete s.attributesDefault,
|
|
delete s.attributesForced,
|
|
delete s.attributePatterns,
|
|
delete s.attributesRequired,
|
|
(s.attributesOrder = []),
|
|
(s.attributes = {}),
|
|
q(t.attributes, e => {
|
|
const t = ks(l);
|
|
As(e).each(({preset: e, name: n}) => {
|
|
e ? "global" === n && q(t, o) : o(n);
|
|
});
|
|
}),
|
|
(n[e] = s);
|
|
}
|
|
if (b(t.padEmpty)) {
|
|
const o = null !== (a = n[e]) && void 0 !== a ? a : {};
|
|
(o.paddEmpty = t.padEmpty), (n[e] = o);
|
|
}
|
|
if (p(t.children)) {
|
|
const n = {},
|
|
r = e => {
|
|
n[e] = {};
|
|
},
|
|
s = e => {
|
|
Rs(l, e).each(e => {
|
|
q(e, r);
|
|
});
|
|
};
|
|
q(t.children, e => {
|
|
As(e).each(({preset: e, name: t}) => {
|
|
e ? s(t) : r(t);
|
|
});
|
|
}),
|
|
(o[e] = n);
|
|
}
|
|
d &&
|
|
pe(o, (t, n) => {
|
|
t[d] && ((o[n] = t = Ps({}, o[n])), (t[e] = t[d]));
|
|
});
|
|
},
|
|
D = e => {
|
|
f(e)
|
|
? pe(e, (e, t) => P(t, e))
|
|
: m(e) &&
|
|
(e => {
|
|
q(
|
|
(e => {
|
|
const t = /^(~)?(.+)$/;
|
|
return te(xs(e, ","), e => {
|
|
const n = t.exec(e);
|
|
return n ? [{cloneName: "~" === n[1] ? "span" : "div", name: n[2]}] : [];
|
|
});
|
|
})(null != e ? e : ""),
|
|
({name: e, cloneName: t}) => {
|
|
P(e, {extends: t});
|
|
}
|
|
);
|
|
})(e);
|
|
},
|
|
L = e => {
|
|
q(
|
|
(e => {
|
|
const t =
|
|
/^([+\-]?)([A-Za-z0-9_\-.\u00b7\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u037d\u037f-\u1fff\u200c-\u200d\u203f-\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]+)\[([^\]]+)]$/;
|
|
return te(xs(e, ","), e => {
|
|
const n = t.exec(e);
|
|
if (n) {
|
|
const e = n[1],
|
|
t = e ? (e => ("-" === e ? "remove" : "add"))(e) : "replace";
|
|
return [{operation: t, name: n[2], validChildren: te(xs(n[3], "|"), e => As(e).toArray())}];
|
|
}
|
|
return [];
|
|
});
|
|
})(null != e ? e : ""),
|
|
({operation: e, name: t, validChildren: n}) => {
|
|
const r = "replace" === e ? {"#comment": {}} : o[t],
|
|
s = t => {
|
|
"remove" === e ? delete r[t] : (r[t] = {});
|
|
};
|
|
q(n, ({preset: e, name: t}) => {
|
|
e
|
|
? (e => {
|
|
Rs(l, e).each(e => {
|
|
q(e, s);
|
|
});
|
|
})(t)
|
|
: s(t);
|
|
}),
|
|
(o[t] = r);
|
|
}
|
|
);
|
|
},
|
|
M = e => {
|
|
const t = n[e];
|
|
if (t) return t;
|
|
let o = r.length;
|
|
for (; o--; ) {
|
|
const t = r[o];
|
|
if (t.pattern.test(e)) return t;
|
|
}
|
|
},
|
|
F = N(c),
|
|
U = N(u),
|
|
z = N(g),
|
|
j = N(C),
|
|
H = N(S),
|
|
$ = N(_),
|
|
W = N(R),
|
|
K = N(Object.seal(y)),
|
|
Y = N(v),
|
|
G = N(x),
|
|
X = N(E),
|
|
Z = N(h),
|
|
Q = N(A),
|
|
J = N(T),
|
|
ee = N(Object.seal(a)),
|
|
ne = (e, t) => {
|
|
const n = M(e);
|
|
if (n) {
|
|
if (!t) return !0;
|
|
{
|
|
if (n.attributes[t]) return !0;
|
|
const e = n.attributePatterns;
|
|
if (e) {
|
|
let n = e.length;
|
|
for (; n--; ) if (e[n].pattern.test(t)) return !0;
|
|
}
|
|
}
|
|
}
|
|
return !1;
|
|
},
|
|
oe = e => ke(H(), e),
|
|
re = e => !$e(e, "#") && ne(e) && !oe(e),
|
|
ae = N(s);
|
|
return (
|
|
e.valid_elements
|
|
? (B(e.valid_elements),
|
|
Bs(d, (e, t) => {
|
|
o[t] = e.children;
|
|
}))
|
|
: (Bs(d, (e, t) => {
|
|
(n[t] = {attributes: e.attributes, attributesOrder: e.attributesOrder}), (o[t] = e.children);
|
|
}),
|
|
Bs(xs("strong/b em/i"), e => {
|
|
const t = xs(e, "/");
|
|
n[t[1]].outputName = t[0];
|
|
}),
|
|
Bs(R, (t, o) => {
|
|
n[o] && (e.padd_empty_block_inline_children && (n[o].paddInEmptyBlock = !0), (n[o].removeEmpty = !0));
|
|
}),
|
|
Bs(xs("ol ul blockquote a table tbody"), e => {
|
|
n[e] && (n[e].removeEmpty = !0);
|
|
}),
|
|
Bs(xs("p h1 h2 h3 h4 h5 h6 th td pre div address caption li summary"), e => {
|
|
n[e] && (n[e].paddEmpty = !0);
|
|
}),
|
|
Bs(xs("span"), e => {
|
|
n[e].removeEmptyAttrs = !0;
|
|
})),
|
|
delete n.svg,
|
|
D(e.custom_elements),
|
|
L(e.valid_children),
|
|
O(e.extended_valid_elements),
|
|
L("+ol[ul|ol],+ul[ul|ol]"),
|
|
Bs(
|
|
{
|
|
dd: "dl",
|
|
dt: "dl",
|
|
li: "ul ol",
|
|
td: "tr",
|
|
th: "tr",
|
|
tr: "tbody thead tfoot",
|
|
tbody: "table",
|
|
thead: "table",
|
|
tfoot: "table",
|
|
legend: "fieldset",
|
|
area: "map",
|
|
param: "video audio object"
|
|
},
|
|
(e, t) => {
|
|
n[t] && (n[t].parentsRequired = xs(e));
|
|
}
|
|
),
|
|
e.invalid_elements &&
|
|
Bs(Ds(e.invalid_elements), e => {
|
|
n[e] && delete n[e];
|
|
}),
|
|
M("span") || O("span[!data-mce-type|*]"),
|
|
{
|
|
type: l,
|
|
children: o,
|
|
elements: n,
|
|
getValidStyles: F,
|
|
getValidClasses: z,
|
|
getBlockElements: H,
|
|
getInvalidStyles: U,
|
|
getVoidElements: K,
|
|
getTextBlockElements: $,
|
|
getTextInlineElements: W,
|
|
getBoolAttrs: j,
|
|
getElementRule: M,
|
|
getSelfClosingElements: Y,
|
|
getNonEmptyElements: G,
|
|
getMoveCaretBeforeOnEnterElements: X,
|
|
getWhitespaceElements: Z,
|
|
getTransparentElements: Q,
|
|
getSpecialElements: ee,
|
|
isValidChild: (e, t) => {
|
|
const n = o[e.toLowerCase()];
|
|
return !(!n || !n[t.toLowerCase()]);
|
|
},
|
|
isValid: ne,
|
|
isBlock: oe,
|
|
isInline: re,
|
|
isWrapper: e => ke(J(), e) || re(e),
|
|
getCustomElements: ae,
|
|
addValidElements: O,
|
|
setValidElements: B,
|
|
addCustomElements: D,
|
|
addValidChildren: L
|
|
}
|
|
);
|
|
},
|
|
Us = e => {
|
|
const t = e.toString(16);
|
|
return (1 === t.length ? "0" + t : t).toUpperCase();
|
|
},
|
|
zs = e =>
|
|
(e => {
|
|
return {value: ((t = e), je(t, "#").toUpperCase())};
|
|
var t;
|
|
})(Us(e.red) + Us(e.green) + Us(e.blue)),
|
|
js = /^\s*rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)\s*$/i,
|
|
Hs = /^\s*rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d?(?:\.\d+)?)\s*\)\s*$/i,
|
|
$s = (e, t, n, o) => ({red: e, green: t, blue: n, alpha: o}),
|
|
Vs = (e, t, n, o) => {
|
|
const r = parseInt(e, 10),
|
|
s = parseInt(t, 10),
|
|
a = parseInt(n, 10),
|
|
i = parseFloat(o);
|
|
return $s(r, s, a, i);
|
|
},
|
|
qs = e => {
|
|
if ("transparent" === e) return I.some($s(0, 0, 0, 0));
|
|
const t = js.exec(e);
|
|
if (null !== t) return I.some(Vs(t[1], t[2], t[3], "1"));
|
|
const n = Hs.exec(e);
|
|
return null !== n ? I.some(Vs(n[1], n[2], n[3], n[4])) : I.none();
|
|
},
|
|
Ws = e => `rgba(${e.red},${e.green},${e.blue},${e.alpha})`,
|
|
Ks = e =>
|
|
qs(e)
|
|
.map(zs)
|
|
.map(e => "#" + e.value)
|
|
.getOr(e),
|
|
Ys = (e = {}, t) => {
|
|
const n =
|
|
/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,
|
|
o = /\s*([^:]+):\s*([^;]+);?/g,
|
|
r = /\s+$/,
|
|
s = /rgba *\(/i,
|
|
a = {};
|
|
let i, l;
|
|
const d = qo;
|
|
t && ((i = t.getValidStyles()), (l = t.getInvalidStyles()));
|
|
const c = "\\\" \\' \\; \\: ; : \ufeff".split(" ");
|
|
for (let e = 0; e < c.length; e++) (a[c[e]] = d + e), (a[d + e] = c[e]);
|
|
const u = {
|
|
parse: t => {
|
|
const i = {};
|
|
let l = !1;
|
|
const c = e.url_converter,
|
|
m = e.url_converter_scope || u,
|
|
f = (e, t, n) => {
|
|
const o = i[e + "-top" + t];
|
|
if (!o) return;
|
|
const r = i[e + "-right" + t];
|
|
if (!r) return;
|
|
const s = i[e + "-bottom" + t];
|
|
if (!s) return;
|
|
const a = i[e + "-left" + t];
|
|
if (!a) return;
|
|
const l = [o, r, s, a];
|
|
let d = l.length - 1;
|
|
for (; d-- && l[d] === l[d + 1]; );
|
|
(d > -1 && n) ||
|
|
((i[e + t] = -1 === d ? l[0] : l.join(" ")),
|
|
delete i[e + "-top" + t],
|
|
delete i[e + "-right" + t],
|
|
delete i[e + "-bottom" + t],
|
|
delete i[e + "-left" + t]);
|
|
},
|
|
g = e => {
|
|
const t = i[e];
|
|
if (!t) return;
|
|
const n = t.indexOf(",") > -1 ? [t] : t.split(" ");
|
|
let o = n.length;
|
|
for (; o--; ) if (n[o] !== n[0]) return !1;
|
|
return (i[e] = n[0]), !0;
|
|
},
|
|
p = e => ((l = !0), a[e]),
|
|
h = (e, t) => (
|
|
l && (e = e.replace(/\uFEFF[0-9]/g, e => a[e])), t || (e = e.replace(/\\([\'\";:])/g, "$1")), e
|
|
),
|
|
b = e => String.fromCharCode(parseInt(e.slice(1), 16)),
|
|
v = e => e.replace(/\\[0-9a-f]+/gi, b),
|
|
y = (t, n, o, r, s, a) => {
|
|
if ((s = s || a)) return "'" + (s = h(s)).replace(/\'/g, "\\'") + "'";
|
|
if (((n = h(n || o || r || "")), !e.allow_script_urls)) {
|
|
const t = n.replace(/[\s\r\n]+/g, "");
|
|
if (/(java|vb)script:/i.test(t)) return "";
|
|
if (!e.allow_svg_data_urls && /^data:image\/svg/i.test(t)) return "";
|
|
}
|
|
return c && (n = c.call(m, n, "style")), "url('" + n.replace(/\'/g, "\\'") + "')";
|
|
};
|
|
if (t) {
|
|
let a;
|
|
for (
|
|
t = (t = t.replace(/[\u0000-\u001F]/g, ""))
|
|
.replace(/\\[\"\';:\uFEFF]/g, p)
|
|
.replace(/\"[^\"]+\"|\'[^\']+\'/g, e => e.replace(/[;:]/g, p));
|
|
(a = o.exec(t));
|
|
|
|
) {
|
|
o.lastIndex = a.index + a[0].length;
|
|
let t = a[1].replace(r, "").toLowerCase(),
|
|
c = a[2].replace(r, "");
|
|
if (t && c) {
|
|
if (((t = v(t)), (c = v(c)), -1 !== t.indexOf(d) || -1 !== t.indexOf('"'))) continue;
|
|
if (!e.allow_script_urls && ("behavior" === t || /expression\s*\(|\/\*|\*\//.test(c))) continue;
|
|
"font-weight" === t && "700" === c
|
|
? (c = "bold")
|
|
: ("color" !== t && "background-color" !== t) || (c = c.toLowerCase()),
|
|
s.test(c) ||
|
|
qs(c).each(e => {
|
|
c = Ks(Ws(e)).toLowerCase();
|
|
}),
|
|
(c = c.replace(n, y)),
|
|
(i[t] = l ? h(c, !0) : c);
|
|
}
|
|
}
|
|
f("border", "", !0),
|
|
f("border", "-width"),
|
|
f("border", "-color"),
|
|
f("border", "-style"),
|
|
f("padding", ""),
|
|
f("margin", ""),
|
|
"border",
|
|
(w = "border-style"),
|
|
(x = "border-color"),
|
|
g((C = "border-width")) &&
|
|
g(w) &&
|
|
g(x) &&
|
|
((i.border = i[C] + " " + i[w] + " " + i[x]), delete i[C], delete i[w], delete i[x]),
|
|
"medium none" === i.border && delete i.border,
|
|
"none" === i["border-image"] && delete i["border-image"];
|
|
}
|
|
var C, w, x;
|
|
return i;
|
|
},
|
|
serialize: (e, t) => {
|
|
let n = "";
|
|
const o = (t, o) => {
|
|
const r = o[t];
|
|
if (r)
|
|
for (let t = 0, o = r.length; t < o; t++) {
|
|
const o = r[t],
|
|
s = e[o];
|
|
s && (n += (n.length > 0 ? " " : "") + o + ": " + s + ";");
|
|
}
|
|
};
|
|
return (
|
|
t && i
|
|
? (o("*", i), o(t, i))
|
|
: pe(e, (e, o) => {
|
|
e &&
|
|
((e, t) => {
|
|
if (!l || !t) return !0;
|
|
let n = l["*"];
|
|
return !((n && n[e]) || ((n = l[t]), n && n[e]));
|
|
})(o, t) &&
|
|
(n += (n.length > 0 ? " " : "") + o + ": " + e + ";");
|
|
}),
|
|
n
|
|
);
|
|
}
|
|
};
|
|
return u;
|
|
},
|
|
Gs = {
|
|
keyLocation: !0,
|
|
layerX: !0,
|
|
layerY: !0,
|
|
returnValue: !0,
|
|
webkitMovementX: !0,
|
|
webkitMovementY: !0,
|
|
keyIdentifier: !0,
|
|
mozPressure: !0
|
|
},
|
|
Xs = (e, t) => {
|
|
const n = null != t ? t : {};
|
|
for (const t in e) ke(Gs, t) || (n[t] = e[t]);
|
|
return (
|
|
C(e.composedPath) && (n.composedPath = () => e.composedPath()),
|
|
C(e.getModifierState) && (n.getModifierState = t => e.getModifierState(t)),
|
|
C(e.getTargetRanges) && (n.getTargetRanges = () => e.getTargetRanges()),
|
|
n
|
|
);
|
|
},
|
|
Zs = (e, t, n, o) => {
|
|
var r;
|
|
const s = Xs(t, o);
|
|
return (
|
|
(s.type = e),
|
|
y(s.target) && (s.target = null !== (r = s.srcElement) && void 0 !== r ? r : n),
|
|
(e => y(e.preventDefault) || (e => e instanceof Event || w(e.initEvent))(e))(t) &&
|
|
((s.preventDefault = () => {
|
|
(s.defaultPrevented = !0), (s.isDefaultPrevented = M), w(t.preventDefault) && t.preventDefault();
|
|
}),
|
|
(s.stopPropagation = () => {
|
|
(s.cancelBubble = !0), (s.isPropagationStopped = M), w(t.stopPropagation) && t.stopPropagation();
|
|
}),
|
|
(s.stopImmediatePropagation = () => {
|
|
(s.isImmediatePropagationStopped = M), s.stopPropagation();
|
|
}),
|
|
(e => e.isDefaultPrevented === M || e.isDefaultPrevented === L)(s) ||
|
|
((s.isDefaultPrevented = !0 === s.defaultPrevented ? M : L),
|
|
(s.isPropagationStopped = !0 === s.cancelBubble ? M : L),
|
|
(s.isImmediatePropagationStopped = L))),
|
|
s
|
|
);
|
|
},
|
|
Qs = /^(?:mouse|contextmenu)|click/,
|
|
Js = (e, t, n, o) => {
|
|
e.addEventListener(t, n, o || !1);
|
|
},
|
|
ea = (e, t, n, o) => {
|
|
e.removeEventListener(t, n, o || !1);
|
|
},
|
|
ta = (e, t) => {
|
|
const n = Zs(e.type, e, document, t);
|
|
if ((e => C(e) && Qs.test(e.type))(e) && v(e.pageX) && !v(e.clientX)) {
|
|
const t = n.target.ownerDocument || document,
|
|
o = t.documentElement,
|
|
r = t.body,
|
|
s = n;
|
|
(s.pageX =
|
|
e.clientX +
|
|
((o && o.scrollLeft) || (r && r.scrollLeft) || 0) -
|
|
((o && o.clientLeft) || (r && r.clientLeft) || 0)),
|
|
(s.pageY =
|
|
e.clientY +
|
|
((o && o.scrollTop) || (r && r.scrollTop) || 0) -
|
|
((o && o.clientTop) || (r && r.clientTop) || 0));
|
|
}
|
|
return n;
|
|
},
|
|
na = (e, t, n) => {
|
|
const o = e.document,
|
|
r = {type: "ready"};
|
|
if (n.domLoaded) return void t(r);
|
|
const s = () => {
|
|
ea(e, "DOMContentLoaded", s), ea(e, "load", s), n.domLoaded || ((n.domLoaded = !0), t(r)), (e = null);
|
|
};
|
|
"complete" === o.readyState || ("interactive" === o.readyState && o.body) ? s() : Js(e, "DOMContentLoaded", s),
|
|
n.domLoaded || Js(e, "load", s);
|
|
};
|
|
class oa {
|
|
constructor() {
|
|
(this.domLoaded = !1),
|
|
(this.events = {}),
|
|
(this.count = 1),
|
|
(this.expando = "mce-data-" + (+new Date()).toString(32)),
|
|
(this.hasFocusIn = "onfocusin" in document.documentElement),
|
|
(this.count = 1);
|
|
}
|
|
bind(e, t, n, o) {
|
|
const r = this;
|
|
let s;
|
|
const a = window,
|
|
i = e => {
|
|
r.executeHandlers(ta(e || a.event), l);
|
|
};
|
|
if (!e || dr(e) || mr(e)) return n;
|
|
let l;
|
|
e[r.expando] ? (l = e[r.expando]) : ((l = r.count++), (e[r.expando] = l), (r.events[l] = {})), (o = o || e);
|
|
const d = t.split(" ");
|
|
let c = d.length;
|
|
for (; c--; ) {
|
|
let t = d[c],
|
|
u = i,
|
|
m = !1,
|
|
f = !1;
|
|
"DOMContentLoaded" === t && (t = "ready"),
|
|
r.domLoaded && "ready" === t && "complete" === e.readyState
|
|
? n.call(o, ta({type: t}))
|
|
: (r.hasFocusIn ||
|
|
("focusin" !== t && "focusout" !== t) ||
|
|
((m = !0),
|
|
(f = "focusin" === t ? "focus" : "blur"),
|
|
(u = e => {
|
|
const t = ta(e || a.event);
|
|
(t.type = "focus" === t.type ? "focusin" : "focusout"), r.executeHandlers(t, l);
|
|
})),
|
|
(s = r.events[l][t]),
|
|
s
|
|
? "ready" === t && r.domLoaded
|
|
? n(ta({type: t}))
|
|
: s.push({func: n, scope: o})
|
|
: ((r.events[l][t] = s = [{func: n, scope: o}]),
|
|
(s.fakeName = f),
|
|
(s.capture = m),
|
|
(s.nativeHandler = u),
|
|
"ready" === t ? na(e, u, r) : Js(e, f || t, u, m)));
|
|
}
|
|
return (e = s = null), n;
|
|
}
|
|
unbind(e, t, n) {
|
|
if (!e || dr(e) || mr(e)) return this;
|
|
const o = e[this.expando];
|
|
if (o) {
|
|
let r = this.events[o];
|
|
if (t) {
|
|
const o = t.split(" ");
|
|
let s = o.length;
|
|
for (; s--; ) {
|
|
const t = o[s],
|
|
a = r[t];
|
|
if (a) {
|
|
if (n) {
|
|
let e = a.length;
|
|
for (; e--; )
|
|
if (a[e].func === n) {
|
|
const n = a.nativeHandler,
|
|
o = a.fakeName,
|
|
s = a.capture,
|
|
i = a.slice(0, e).concat(a.slice(e + 1));
|
|
(i.nativeHandler = n), (i.fakeName = o), (i.capture = s), (r[t] = i);
|
|
}
|
|
}
|
|
(n && 0 !== a.length) || (delete r[t], ea(e, a.fakeName || t, a.nativeHandler, a.capture));
|
|
}
|
|
}
|
|
} else
|
|
pe(r, (t, n) => {
|
|
ea(e, t.fakeName || n, t.nativeHandler, t.capture);
|
|
}),
|
|
(r = {});
|
|
for (const e in r) if (ke(r, e)) return this;
|
|
delete this.events[o];
|
|
try {
|
|
delete e[this.expando];
|
|
} catch (t) {
|
|
e[this.expando] = null;
|
|
}
|
|
}
|
|
return this;
|
|
}
|
|
fire(e, t, n) {
|
|
return this.dispatch(e, t, n);
|
|
}
|
|
dispatch(e, t, n) {
|
|
if (!e || dr(e) || mr(e)) return this;
|
|
const o = ta({type: t, target: e}, n);
|
|
do {
|
|
const t = e[this.expando];
|
|
t && this.executeHandlers(o, t), (e = e.parentNode || e.ownerDocument || e.defaultView || e.parentWindow);
|
|
} while (e && !o.isPropagationStopped());
|
|
return this;
|
|
}
|
|
clean(e) {
|
|
if (!e || dr(e) || mr(e)) return this;
|
|
if (
|
|
(e[this.expando] && this.unbind(e), e.getElementsByTagName || (e = e.document), e && e.getElementsByTagName)
|
|
) {
|
|
this.unbind(e);
|
|
const t = e.getElementsByTagName("*");
|
|
let n = t.length;
|
|
for (; n--; ) (e = t[n])[this.expando] && this.unbind(e);
|
|
}
|
|
return this;
|
|
}
|
|
destroy() {
|
|
this.events = {};
|
|
}
|
|
cancel(e) {
|
|
return e && (e.preventDefault(), e.stopImmediatePropagation()), !1;
|
|
}
|
|
executeHandlers(e, t) {
|
|
const n = this.events[t],
|
|
o = n && n[e.type];
|
|
if (o)
|
|
for (let t = 0, n = o.length; t < n; t++) {
|
|
const n = o[t];
|
|
if ((n && !1 === n.func.call(n.scope, e) && e.preventDefault(), e.isImmediatePropagationStopped())) return;
|
|
}
|
|
}
|
|
}
|
|
oa.Event = new oa();
|
|
const ra = Dt.each,
|
|
sa = Dt.grep,
|
|
aa = "data-mce-style",
|
|
ia = Dt.makeMap("fill-opacity font-weight line-height opacity orphans widows z-index zoom", " "),
|
|
la = (e, t, n) => {
|
|
y(n) || "" === n ? rn(e, t) : Jt(e, t, n);
|
|
},
|
|
da = e => e.replace(/[A-Z]/g, e => "-" + e.toLowerCase()),
|
|
ca = (e, t) => {
|
|
let n = 0;
|
|
if (e)
|
|
for (let o = e.nodeType, r = e.previousSibling; r; r = r.previousSibling) {
|
|
const e = r.nodeType;
|
|
(!t || !dr(r) || (e !== o && r.data.length)) && (n++, (o = e));
|
|
}
|
|
return n;
|
|
},
|
|
ua = (e, t) => {
|
|
const n = tn(t, "style"),
|
|
o = e.serialize(e.parse(n), $t(t));
|
|
la(t, aa, o);
|
|
},
|
|
ma = (e, t, n) => {
|
|
const o = da(t);
|
|
y(n) || "" === n ? po(e, o) : lo(e, o, ((e, t) => (x(e) ? (ke(ia, t) ? e + "" : e + "px") : e))(n, o));
|
|
},
|
|
fa = (e, t = {}) => {
|
|
const n = {},
|
|
o = window,
|
|
r = {};
|
|
let s = 0;
|
|
const a = rs.forElement(Cn(e), {contentCssCors: t.contentCssCors, referrerPolicy: t.referrerPolicy}),
|
|
i = [],
|
|
l = t.schema ? t.schema : Fs({}),
|
|
d = Ys({url_converter: t.url_converter, url_converter_scope: t.url_converter_scope}, t.schema),
|
|
c = t.ownEvents ? new oa() : oa.Event,
|
|
u = l.getBlockElements(),
|
|
f = t => (t && e && m(t) ? e.getElementById(t) : t),
|
|
h = e => {
|
|
const t = f(e);
|
|
return C(t) ? Cn(t) : null;
|
|
},
|
|
b = (e, t, n = "") => {
|
|
let o;
|
|
const r = h(e);
|
|
if (C(r) && Kt(r)) {
|
|
const e = G[t];
|
|
o = e && e.get ? e.get(r.dom, t) : tn(r, t);
|
|
}
|
|
return C(o) ? o : n;
|
|
},
|
|
v = e => {
|
|
const t = f(e);
|
|
return y(t) ? [] : t.attributes;
|
|
},
|
|
x = (e, n, o) => {
|
|
B(e, e => {
|
|
if (er(e)) {
|
|
const r = Cn(e),
|
|
s = "" === o ? null : o,
|
|
a = tn(r, n),
|
|
i = G[n];
|
|
i && i.set ? i.set(r.dom, s, n) : la(r, n, s),
|
|
a !== s && t.onSetAttrib && t.onSetAttrib({attrElm: r.dom, attrName: n, attrValue: s});
|
|
}
|
|
});
|
|
},
|
|
E = () => t.root_element || e.body,
|
|
_ = (t, n) =>
|
|
((e, t, n) => {
|
|
let o = 0,
|
|
r = 0;
|
|
const s = e.ownerDocument;
|
|
if (((n = n || e), t)) {
|
|
if (n === e && t.getBoundingClientRect && "static" === uo(Cn(e), "position")) {
|
|
const n = t.getBoundingClientRect();
|
|
return (
|
|
(o = n.left + (s.documentElement.scrollLeft || e.scrollLeft) - s.documentElement.clientLeft),
|
|
(r = n.top + (s.documentElement.scrollTop || e.scrollTop) - s.documentElement.clientTop),
|
|
{x: o, y: r}
|
|
);
|
|
}
|
|
let a = t;
|
|
for (; a && a !== n && a.nodeType && !ns(a, n); ) {
|
|
const e = a;
|
|
(o += e.offsetLeft || 0), (r += e.offsetTop || 0), (a = e.offsetParent);
|
|
}
|
|
for (a = t.parentNode; a && a !== n && a.nodeType && !ns(a, n); )
|
|
(o -= a.scrollLeft || 0), (r -= a.scrollTop || 0), (a = a.parentNode);
|
|
r += (e =>
|
|
es.isFirefox() && "table" === $t(e)
|
|
? ts(In(e))
|
|
.filter(e => "caption" === $t(e))
|
|
.bind(e =>
|
|
ts(Mn(e)).map(t => {
|
|
const n = t.dom.offsetTop,
|
|
o = e.dom.offsetTop,
|
|
r = e.dom.offsetHeight;
|
|
return n <= o ? -r : 0;
|
|
})
|
|
)
|
|
.getOr(0)
|
|
: 0)(Cn(t));
|
|
}
|
|
return {x: o, y: r};
|
|
})(e.body, f(t), n),
|
|
S = (e, t, n) => {
|
|
const o = f(e);
|
|
var r;
|
|
if (!y(o) && (tr(o) || (er((r = o)) && "http://www.w3.org/2000/svg" === r.namespaceURI)))
|
|
return n
|
|
? uo(Cn(o), da(t))
|
|
: ("float" === (t = t.replace(/-(\D)/g, (e, t) => t.toUpperCase())) && (t = "cssFloat"),
|
|
o.style ? o.style[t] : void 0);
|
|
},
|
|
R = e => {
|
|
const t = f(e);
|
|
if (!t) return {w: 0, h: 0};
|
|
let n = S(t, "width"),
|
|
o = S(t, "height");
|
|
return (
|
|
(n && -1 !== n.indexOf("px")) || (n = "0"),
|
|
(o && -1 !== o.indexOf("px")) || (o = "0"),
|
|
{
|
|
w: parseInt(n, 10) || t.offsetWidth || t.clientWidth,
|
|
h: parseInt(o, 10) || t.offsetHeight || t.clientHeight
|
|
}
|
|
);
|
|
},
|
|
A = (e, t) => {
|
|
if (!e) return !1;
|
|
const n = p(e) ? e : [e];
|
|
return $(n, e => En(Cn(e), t));
|
|
},
|
|
T = (e, t, n, o) => {
|
|
const r = [];
|
|
let s = f(e);
|
|
o = void 0 === o;
|
|
const a = n || ("BODY" !== E().nodeName ? E().parentNode : null);
|
|
if (m(t))
|
|
if ("*" === t) t = er;
|
|
else {
|
|
const e = t;
|
|
t = t => A(t, e);
|
|
}
|
|
for (; s && !(s === a || y(s.nodeType) || fr(s) || gr(s)); ) {
|
|
if (!t || t(s)) {
|
|
if (!o) return [s];
|
|
r.push(s);
|
|
}
|
|
s = s.parentNode;
|
|
}
|
|
return o ? r : null;
|
|
},
|
|
O = (e, t, n) => {
|
|
let o = t;
|
|
if (e) {
|
|
m(t) && (o = e => A(e, t));
|
|
for (let t = e[n]; t; t = t[n]) if (w(o) && o(t)) return t;
|
|
}
|
|
return null;
|
|
},
|
|
B = function (e, t, n) {
|
|
const o = null != n ? n : this;
|
|
if (p(e)) {
|
|
const n = [];
|
|
return (
|
|
ra(e, (e, r) => {
|
|
const s = f(e);
|
|
s && n.push(t.call(o, s, r));
|
|
}),
|
|
n
|
|
);
|
|
}
|
|
{
|
|
const n = f(e);
|
|
return !!n && t.call(o, n);
|
|
}
|
|
},
|
|
P = (e, t) => {
|
|
B(e, e => {
|
|
pe(t, (t, n) => {
|
|
x(e, n, t);
|
|
});
|
|
});
|
|
},
|
|
D = (e, t) => {
|
|
B(e, e => {
|
|
const n = Cn(e);
|
|
No(n, t);
|
|
});
|
|
},
|
|
L = (t, n, o, r, s) =>
|
|
B(t, t => {
|
|
const a = m(n) ? e.createElement(n) : n;
|
|
return (
|
|
C(o) && P(a, o), r && (!m(r) && r.nodeType ? a.appendChild(r) : m(r) && D(a, r)), s ? a : t.appendChild(a)
|
|
);
|
|
}),
|
|
M = (t, n, o) => L(e.createElement(t), t, n, o, !0),
|
|
I = ws.encodeAllRaw,
|
|
F = (e, t) =>
|
|
B(e, e => {
|
|
const n = Cn(e);
|
|
return (
|
|
t &&
|
|
q(In(n), e => {
|
|
Yt(e) && 0 === e.dom.length ? Eo(e) : ho(n, e);
|
|
}),
|
|
Eo(n),
|
|
n.dom
|
|
);
|
|
}),
|
|
U = (e, t, n) => {
|
|
B(e, e => {
|
|
if (er(e)) {
|
|
const o = Cn(e),
|
|
r = t.split(" ");
|
|
q(r, e => {
|
|
C(n)
|
|
? (n ? mn : gn)(o, e)
|
|
: ((e, t) => {
|
|
const n = ln(e)
|
|
? e.dom.classList.toggle(t)
|
|
: ((e, t) => (H(dn(e), t) ? un(e, t) : cn(e, t)))(e, t);
|
|
fn(e);
|
|
})(o, e);
|
|
});
|
|
}
|
|
});
|
|
},
|
|
z = (e, t, n) =>
|
|
B(t, o => {
|
|
var r;
|
|
const s = p(t) ? e.cloneNode(!0) : e;
|
|
return (
|
|
n &&
|
|
ra(sa(o.childNodes), e => {
|
|
s.appendChild(e);
|
|
}),
|
|
null === (r = o.parentNode) || void 0 === r || r.replaceChild(s, o),
|
|
o
|
|
);
|
|
}),
|
|
j = () => e.createRange(),
|
|
V = (n, r, s, a) => {
|
|
if (p(n)) {
|
|
let e = n.length;
|
|
const t = [];
|
|
for (; e--; ) t[e] = V(n[e], r, s, a);
|
|
return t;
|
|
}
|
|
return !t.collect || (n !== e && n !== o) || i.push([n, r, s, a]), c.bind(n, r, s, a || Y);
|
|
},
|
|
W = (t, n, r) => {
|
|
if (p(t)) {
|
|
let e = t.length;
|
|
const o = [];
|
|
for (; e--; ) o[e] = W(t[e], n, r);
|
|
return o;
|
|
}
|
|
if (i.length > 0 && (t === e || t === o)) {
|
|
let e = i.length;
|
|
for (; e--; ) {
|
|
const [o, s, a] = i[e];
|
|
t !== o || (n && n !== s) || (r && r !== a) || c.unbind(o, s, a);
|
|
}
|
|
}
|
|
return c.unbind(t, n, r);
|
|
},
|
|
K = e => {
|
|
if (e && tr(e)) {
|
|
const t = e.getAttribute("data-mce-contenteditable");
|
|
return t && "inherit" !== t ? t : "inherit" !== e.contentEditable ? e.contentEditable : null;
|
|
}
|
|
return null;
|
|
},
|
|
Y = {
|
|
doc: e,
|
|
settings: t,
|
|
win: o,
|
|
files: r,
|
|
stdMode: !0,
|
|
boxModel: !0,
|
|
styleSheetLoader: a,
|
|
boundEvents: i,
|
|
styles: d,
|
|
schema: l,
|
|
events: c,
|
|
isBlock: e => (m(e) ? ke(u, e) : er(e) && (ke(u, e.nodeName) || Zr(l, e))),
|
|
root: null,
|
|
clone: (e, t) => e.cloneNode(t),
|
|
getRoot: E,
|
|
getViewPort: e => {
|
|
const t = Fo(e);
|
|
return {x: t.x, y: t.y, w: t.width, h: t.height};
|
|
},
|
|
getRect: e => {
|
|
const t = f(e),
|
|
n = _(t),
|
|
o = R(t);
|
|
return {x: n.x, y: n.y, w: o.w, h: o.h};
|
|
},
|
|
getSize: R,
|
|
getParent: (e, t, n) => {
|
|
const o = T(e, t, n, !1);
|
|
return o && o.length > 0 ? o[0] : null;
|
|
},
|
|
getParents: T,
|
|
get: f,
|
|
getNext: (e, t) => O(e, t, "nextSibling"),
|
|
getPrev: (e, t) => O(e, t, "previousSibling"),
|
|
select: (n, o) => {
|
|
var r, s;
|
|
const a = null !== (s = null !== (r = f(o)) && void 0 !== r ? r : t.root_element) && void 0 !== s ? s : e;
|
|
return w(a.querySelectorAll) ? ce(a.querySelectorAll(n)) : [];
|
|
},
|
|
is: A,
|
|
add: L,
|
|
create: M,
|
|
createHTML: (e, t, n = "") => {
|
|
let o = "<" + e;
|
|
for (const e in t) _e(t, e) && (o += " " + e + '="' + I(t[e]) + '"');
|
|
return Xe(n) && ke(l.getVoidElements(), e) ? o + " />" : o + ">" + n + "</" + e + ">";
|
|
},
|
|
createFragment: t => {
|
|
const n = e.createElement("div"),
|
|
o = e.createDocumentFragment();
|
|
let r;
|
|
for (o.appendChild(n), t && (n.innerHTML = t); (r = n.firstChild); ) o.appendChild(r);
|
|
return o.removeChild(n), o;
|
|
},
|
|
remove: F,
|
|
setStyle: (e, n, o) => {
|
|
B(e, e => {
|
|
const r = Cn(e);
|
|
ma(r, n, o), t.update_styles && ua(d, r);
|
|
});
|
|
},
|
|
getStyle: S,
|
|
setStyles: (e, n) => {
|
|
B(e, e => {
|
|
const o = Cn(e);
|
|
pe(n, (e, t) => {
|
|
ma(o, t, e);
|
|
}),
|
|
t.update_styles && ua(d, o);
|
|
});
|
|
},
|
|
removeAllAttribs: e =>
|
|
B(e, e => {
|
|
const t = e.attributes;
|
|
for (let n = t.length - 1; n >= 0; n--) e.removeAttributeNode(t.item(n));
|
|
}),
|
|
setAttrib: x,
|
|
setAttribs: P,
|
|
getAttrib: b,
|
|
getPos: _,
|
|
parseStyle: e => d.parse(e),
|
|
serializeStyle: (e, t) => d.serialize(e, t),
|
|
addStyle: t => {
|
|
if (Y !== fa.DOM && e === document) {
|
|
if (n[t]) return;
|
|
n[t] = !0;
|
|
}
|
|
let o = e.getElementById("mceDefaultStyles");
|
|
if (!o) {
|
|
(o = e.createElement("style")), (o.id = "mceDefaultStyles"), (o.type = "text/css");
|
|
const t = e.head;
|
|
t.firstChild ? t.insertBefore(o, t.firstChild) : t.appendChild(o);
|
|
}
|
|
o.styleSheet ? (o.styleSheet.cssText += t) : o.appendChild(e.createTextNode(t));
|
|
},
|
|
loadCSS: e => {
|
|
e || (e = ""),
|
|
q(e.split(","), e => {
|
|
(r[e] = !0), a.load(e).catch(k);
|
|
});
|
|
},
|
|
addClass: (e, t) => {
|
|
U(e, t, !0);
|
|
},
|
|
removeClass: (e, t) => {
|
|
U(e, t, !1);
|
|
},
|
|
hasClass: (e, t) => {
|
|
const n = h(e),
|
|
o = t.split(" ");
|
|
return C(n) && ne(o, e => pn(n, e));
|
|
},
|
|
toggleClass: U,
|
|
show: e => {
|
|
B(e, e => po(Cn(e), "display"));
|
|
},
|
|
hide: e => {
|
|
B(e, e => lo(Cn(e), "display", "none"));
|
|
},
|
|
isHidden: e => {
|
|
const t = h(e);
|
|
return C(t) && Lt(fo(t, "display"), "none");
|
|
},
|
|
uniqueId: e => (e || "mce_") + s++,
|
|
setHTML: D,
|
|
getOuterHTML: e => {
|
|
const t = h(e);
|
|
return C(t)
|
|
? er(t.dom)
|
|
? t.dom.outerHTML
|
|
: (e => {
|
|
const t = vn("div"),
|
|
n = Cn(e.dom.cloneNode(!0));
|
|
return yo(t, n), So(t);
|
|
})(t)
|
|
: "";
|
|
},
|
|
setOuterHTML: (e, t) => {
|
|
B(e, e => {
|
|
er(e) && (e.outerHTML = t);
|
|
});
|
|
},
|
|
decode: ws.decode,
|
|
encode: I,
|
|
insertAfter: (e, t) => {
|
|
const n = f(t);
|
|
return B(e, e => {
|
|
const t = null == n ? void 0 : n.parentNode,
|
|
o = null == n ? void 0 : n.nextSibling;
|
|
return t && (o ? t.insertBefore(e, o) : t.appendChild(e)), e;
|
|
});
|
|
},
|
|
replace: z,
|
|
rename: (e, t) => {
|
|
if (e.nodeName !== t.toUpperCase()) {
|
|
const n = M(t);
|
|
return (
|
|
ra(v(e), t => {
|
|
x(n, t.nodeName, b(e, t.nodeName));
|
|
}),
|
|
z(n, e, !0),
|
|
n
|
|
);
|
|
}
|
|
return e;
|
|
},
|
|
findCommonAncestor: (e, t) => {
|
|
let n = e;
|
|
for (; n; ) {
|
|
let e = t;
|
|
for (; e && n !== e; ) e = e.parentNode;
|
|
if (n === e) break;
|
|
n = n.parentNode;
|
|
}
|
|
return !n && e.ownerDocument ? e.ownerDocument.documentElement : n;
|
|
},
|
|
run: B,
|
|
getAttribs: v,
|
|
isEmpty: (e, t, n) => {
|
|
if (g(t)) {
|
|
const o = e => {
|
|
const n = e.nodeName.toLowerCase();
|
|
return Boolean(t[n]);
|
|
};
|
|
return Ar(l, e, {...n, isContent: o});
|
|
}
|
|
return Ar(l, e, n);
|
|
},
|
|
createRng: j,
|
|
nodeIndex: ca,
|
|
split: (e, t, n) => {
|
|
let o,
|
|
r,
|
|
s = j();
|
|
if (e && t && e.parentNode && t.parentNode) {
|
|
const a = e.parentNode;
|
|
return (
|
|
s.setStart(a, ca(e)),
|
|
s.setEnd(t.parentNode, ca(t)),
|
|
(o = s.extractContents()),
|
|
(s = j()),
|
|
s.setStart(t.parentNode, ca(t) + 1),
|
|
s.setEnd(a, ca(e) + 1),
|
|
(r = s.extractContents()),
|
|
a.insertBefore(is(Y, o, l), e),
|
|
n ? a.insertBefore(n, e) : a.insertBefore(t, e),
|
|
a.insertBefore(is(Y, r, l), e),
|
|
F(e),
|
|
n || t
|
|
);
|
|
}
|
|
},
|
|
bind: V,
|
|
unbind: W,
|
|
fire: (e, t, n) => c.dispatch(e, t, n),
|
|
dispatch: (e, t, n) => c.dispatch(e, t, n),
|
|
getContentEditable: K,
|
|
getContentEditableParent: e => {
|
|
const t = E();
|
|
let n = null;
|
|
for (let o = e; o && o !== t && ((n = K(o)), null === n); o = o.parentNode);
|
|
return n;
|
|
},
|
|
isEditable: e => {
|
|
if (C(e)) {
|
|
const t = er(e) ? e : e.parentElement;
|
|
return C(t) && tr(t) && ro(Cn(t));
|
|
}
|
|
return !1;
|
|
},
|
|
destroy: () => {
|
|
if (i.length > 0) {
|
|
let e = i.length;
|
|
for (; e--; ) {
|
|
const [t, n, o] = i[e];
|
|
c.unbind(t, n, o);
|
|
}
|
|
}
|
|
pe(r, (e, t) => {
|
|
a.unload(t), delete r[t];
|
|
});
|
|
},
|
|
isChildOf: (e, t) => e === t || t.contains(e),
|
|
dumpRng: e =>
|
|
"startContainer: " +
|
|
e.startContainer.nodeName +
|
|
", startOffset: " +
|
|
e.startOffset +
|
|
", endContainer: " +
|
|
e.endContainer.nodeName +
|
|
", endOffset: " +
|
|
e.endOffset
|
|
},
|
|
G = ((e, t, n) => {
|
|
const o = t.keep_values,
|
|
r = {
|
|
set: (e, o, r) => {
|
|
const s = Cn(e);
|
|
w(t.url_converter) && C(o) && (o = t.url_converter.call(t.url_converter_scope || n(), String(o), r, e)),
|
|
la(s, "data-mce-" + r, o),
|
|
la(s, r, o);
|
|
},
|
|
get: (e, t) => {
|
|
const n = Cn(e);
|
|
return tn(n, "data-mce-" + t) || tn(n, t);
|
|
}
|
|
},
|
|
s = {
|
|
style: {
|
|
set: (t, n) => {
|
|
const r = Cn(t);
|
|
o && la(r, aa, n), rn(r, "style"), m(n) && co(r, e.parse(n));
|
|
},
|
|
get: t => {
|
|
const n = Cn(t),
|
|
o = tn(n, aa) || tn(n, "style");
|
|
return e.serialize(e.parse(o), $t(n));
|
|
}
|
|
}
|
|
};
|
|
return o && (s.href = s.src = r), s;
|
|
})(d, t, N(Y));
|
|
return Y;
|
|
};
|
|
(fa.DOM = fa(document)), (fa.nodeIndex = ca);
|
|
const ga = fa.DOM;
|
|
class pa {
|
|
constructor(e = {}) {
|
|
(this.states = {}),
|
|
(this.queue = []),
|
|
(this.scriptLoadedCallbacks = {}),
|
|
(this.queueLoadedCallbacks = []),
|
|
(this.loading = !1),
|
|
(this.settings = e);
|
|
}
|
|
_setReferrerPolicy(e) {
|
|
this.settings.referrerPolicy = e;
|
|
}
|
|
loadScript(e) {
|
|
return new Promise((t, n) => {
|
|
const o = ga;
|
|
let r;
|
|
const s = () => {
|
|
o.remove(a), r && (r.onerror = r.onload = r = null);
|
|
},
|
|
a = o.uniqueId();
|
|
(r = document.createElement("script")),
|
|
(r.id = a),
|
|
(r.type = "text/javascript"),
|
|
(r.src = Dt._addCacheSuffix(e)),
|
|
this.settings.referrerPolicy && o.setAttrib(r, "referrerpolicy", this.settings.referrerPolicy),
|
|
(r.onload = () => {
|
|
s(), t();
|
|
}),
|
|
(r.onerror = () => {
|
|
s(), n("Failed to load script: " + e);
|
|
}),
|
|
(document.getElementsByTagName("head")[0] || document.body).appendChild(r);
|
|
});
|
|
}
|
|
isDone(e) {
|
|
return 2 === this.states[e];
|
|
}
|
|
markDone(e) {
|
|
this.states[e] = 2;
|
|
}
|
|
add(e) {
|
|
const t = this;
|
|
return (
|
|
t.queue.push(e),
|
|
void 0 === t.states[e] && (t.states[e] = 0),
|
|
new Promise((n, o) => {
|
|
t.scriptLoadedCallbacks[e] || (t.scriptLoadedCallbacks[e] = []),
|
|
t.scriptLoadedCallbacks[e].push({resolve: n, reject: o});
|
|
})
|
|
);
|
|
}
|
|
load(e) {
|
|
return this.add(e);
|
|
}
|
|
remove(e) {
|
|
delete this.states[e], delete this.scriptLoadedCallbacks[e];
|
|
}
|
|
loadQueue() {
|
|
const e = this.queue;
|
|
return (this.queue = []), this.loadScripts(e);
|
|
}
|
|
loadScripts(e) {
|
|
const t = this,
|
|
n = (e, n) => {
|
|
Ee(t.scriptLoadedCallbacks, n).each(t => {
|
|
q(t, t => t[e](n));
|
|
}),
|
|
delete t.scriptLoadedCallbacks[n];
|
|
},
|
|
o = e => {
|
|
const t = Y(e, e => "rejected" === e.status);
|
|
return t.length > 0 ? Promise.reject(te(t, ({reason: e}) => (p(e) ? e : [e]))) : Promise.resolve();
|
|
},
|
|
r = e =>
|
|
Promise.allSettled(
|
|
V(e, e =>
|
|
2 === t.states[e]
|
|
? (n("resolve", e), Promise.resolve())
|
|
: 3 === t.states[e]
|
|
? (n("reject", e), Promise.reject(e))
|
|
: ((t.states[e] = 1),
|
|
t.loadScript(e).then(
|
|
() => {
|
|
(t.states[e] = 2), n("resolve", e);
|
|
const s = t.queue;
|
|
return s.length > 0 ? ((t.queue = []), r(s).then(o)) : Promise.resolve();
|
|
},
|
|
() => ((t.states[e] = 3), n("reject", e), Promise.reject(e))
|
|
))
|
|
)
|
|
),
|
|
s = e => (
|
|
(t.loading = !0),
|
|
r(e).then(e => {
|
|
t.loading = !1;
|
|
const n = t.queueLoadedCallbacks.shift();
|
|
return I.from(n).each(D), o(e);
|
|
})
|
|
),
|
|
a = Se(e);
|
|
return t.loading
|
|
? new Promise((e, n) => {
|
|
t.queueLoadedCallbacks.push(() => {
|
|
s(a).then(e, n);
|
|
});
|
|
})
|
|
: s(a);
|
|
}
|
|
}
|
|
pa.ScriptLoader = new pa();
|
|
const ha = {},
|
|
ba = Br("en"),
|
|
va = () => Ee(ha, ba.get()),
|
|
ya = {
|
|
getData: () => he(ha, e => ({...e})),
|
|
setCode: e => {
|
|
e && ba.set(e);
|
|
},
|
|
getCode: () => ba.get(),
|
|
add: (e, t) => {
|
|
let n = ha[e];
|
|
n || (ha[e] = n = {});
|
|
const o = V(fe(t), e => e.toLowerCase());
|
|
pe(t, (e, r) => {
|
|
const s = r.toLowerCase();
|
|
s !== r &&
|
|
((e, t) => {
|
|
const n = e.indexOf(t);
|
|
return -1 !== n && e.indexOf(t, n + 1) > n;
|
|
})(o, s)
|
|
? (ke(t, s) || (n[s] = e), (n[r] = e))
|
|
: (n[s] = e);
|
|
});
|
|
},
|
|
translate: e => {
|
|
const t = va().getOr({}),
|
|
n = e => (w(e) ? Object.prototype.toString.call(e) : o(e) ? "" : "" + e),
|
|
o = e => "" === e || null == e,
|
|
r = e => {
|
|
const o = n(e);
|
|
return ke(t, o) ? n(t[o]) : Ee(t, o.toLowerCase()).map(n).getOr(o);
|
|
},
|
|
s = e => e.replace(/{context:\w+}$/, "");
|
|
if (o(e)) return "";
|
|
if (f((a = e)) && ke(a, "raw")) return n(e.raw);
|
|
var a;
|
|
if ((e => p(e) && e.length > 1)(e)) {
|
|
const t = e.slice(1);
|
|
return s(r(e[0]).replace(/\{([0-9]+)\}/g, (e, o) => (ke(t, o) ? n(t[o]) : e)));
|
|
}
|
|
return s(r(e));
|
|
},
|
|
isRtl: () =>
|
|
va()
|
|
.bind(e => Ee(e, "_dir"))
|
|
.exists(e => "rtl" === e),
|
|
hasCode: e => ke(ha, e)
|
|
},
|
|
Ca = () => {
|
|
const e = [],
|
|
t = {},
|
|
n = {},
|
|
o = [],
|
|
r = (e, t) => {
|
|
const n = Y(o, n => n.name === e && n.state === t);
|
|
q(n, e => e.resolve());
|
|
},
|
|
s = e => ke(t, e),
|
|
a = (e, n) => {
|
|
const o = ya.getCode();
|
|
!o ||
|
|
(n && -1 === ("," + (n || "") + ",").indexOf("," + o + ",")) ||
|
|
pa.ScriptLoader.add(t[e] + "/langs/" + o + ".min.js");
|
|
},
|
|
i = (e, t = "added") =>
|
|
("added" === t && (e => ke(n, e))(e)) || ("loaded" === t && s(e))
|
|
? Promise.resolve()
|
|
: new Promise(n => {
|
|
o.push({name: e, state: t, resolve: n});
|
|
});
|
|
return {
|
|
items: e,
|
|
urls: t,
|
|
lookup: n,
|
|
get: e => {
|
|
if (n[e]) return n[e].instance;
|
|
},
|
|
requireLangPack: (e, t) => {
|
|
!1 !== Ca.languageLoad && (s(e) ? a(e, t) : i(e, "loaded").then(() => a(e, t)));
|
|
},
|
|
add: (t, o) => (e.push(o), (n[t] = {instance: o}), r(t, "added"), o),
|
|
remove: e => {
|
|
delete t[e], delete n[e];
|
|
},
|
|
createUrl: (e, t) =>
|
|
m(t) ? (m(e) ? {prefix: "", resource: t, suffix: ""} : {prefix: e.prefix, resource: t, suffix: e.suffix}) : t,
|
|
load: (e, o) => {
|
|
if (t[e]) return Promise.resolve();
|
|
let s = m(o) ? o : o.prefix + o.resource + o.suffix;
|
|
0 !== s.indexOf("/") && -1 === s.indexOf("://") && (s = Ca.baseURL + "/" + s),
|
|
(t[e] = s.substring(0, s.lastIndexOf("/")));
|
|
const a = () => (r(e, "loaded"), Promise.resolve());
|
|
return n[e] ? a() : pa.ScriptLoader.add(s).then(a);
|
|
},
|
|
waitFor: i
|
|
};
|
|
};
|
|
(Ca.languageLoad = !0),
|
|
(Ca.baseURL = ""),
|
|
(Ca.PluginManager = Ca()),
|
|
(Ca.ThemeManager = Ca()),
|
|
(Ca.ModelManager = Ca());
|
|
const wa = (e, t) => {
|
|
let n = null;
|
|
return {
|
|
cancel: () => {
|
|
h(n) || (clearTimeout(n), (n = null));
|
|
},
|
|
throttle: (...o) => {
|
|
h(n) &&
|
|
(n = setTimeout(() => {
|
|
(n = null), e.apply(null, o);
|
|
}, t));
|
|
}
|
|
};
|
|
},
|
|
xa = (e, t) => {
|
|
let n = null;
|
|
const o = () => {
|
|
h(n) || (clearTimeout(n), (n = null));
|
|
};
|
|
return {
|
|
cancel: o,
|
|
throttle: (...r) => {
|
|
o(),
|
|
(n = setTimeout(() => {
|
|
(n = null), e.apply(null, r);
|
|
}, t));
|
|
}
|
|
};
|
|
},
|
|
Ea = N("mce-annotation"),
|
|
ka = N("data-mce-annotation"),
|
|
_a = N("data-mce-annotation-uid"),
|
|
Sa = N("data-mce-annotation-active"),
|
|
Na = N("data-mce-annotation-classes"),
|
|
Ra = N("data-mce-annotation-attrs"),
|
|
Aa = e => t => _n(t, e),
|
|
Ta = (e, t) => {
|
|
const n = e.selection.getRng(),
|
|
o = Cn(n.startContainer),
|
|
r = Cn(e.getBody()),
|
|
s = t.fold(
|
|
() => "." + Ea(),
|
|
e => `[${ka()}="${e}"]`
|
|
),
|
|
a = Fn(o, n.startOffset).getOr(o);
|
|
return oo(a, s, Aa(r)).bind(t =>
|
|
nn(t, `${_a()}`).bind(n =>
|
|
nn(t, `${ka()}`).map(t => {
|
|
const o = Ba(e, n);
|
|
return {uid: n, name: t, elements: o};
|
|
})
|
|
)
|
|
);
|
|
},
|
|
Oa = (e, t) => on(e, "data-mce-bogus") || ((e, t, n) => to(e, '[data-mce-bogus="all"]', n).isSome())(e, 0, Aa(t)),
|
|
Ba = (e, t) => {
|
|
const n = Cn(e.getBody()),
|
|
o = zo(n, `[${_a()}="${t}"]`);
|
|
return Y(o, e => !Oa(e, n));
|
|
},
|
|
Pa = (e, t) => {
|
|
const n = Cn(e.getBody()),
|
|
o = zo(n, `[${ka()}="${t}"]`),
|
|
r = {};
|
|
return (
|
|
q(o, e => {
|
|
if (!Oa(e, n)) {
|
|
const t = tn(e, _a()),
|
|
n = Ee(r, t).getOr([]);
|
|
r[t] = n.concat([e]);
|
|
}
|
|
}),
|
|
r
|
|
);
|
|
};
|
|
let Da = 0;
|
|
const La = e => {
|
|
const t = new Date().getTime(),
|
|
n = Math.floor(1e9 * Math.random());
|
|
return Da++, e + "_" + n + Da + String(t);
|
|
},
|
|
Ma = (e, t) => Cn(e.dom.cloneNode(t)),
|
|
Ia = e => Ma(e, !1),
|
|
Fa = e => Ma(e, !0),
|
|
Ua = (e, t, n = L) => {
|
|
const o = new Vo(e, t),
|
|
r = e => {
|
|
let t;
|
|
do {
|
|
t = o[e]();
|
|
} while (t && !dr(t) && !n(t));
|
|
return I.from(t).filter(dr);
|
|
};
|
|
return {
|
|
current: () => I.from(o.current()).filter(dr),
|
|
next: () => r("next"),
|
|
prev: () => r("prev"),
|
|
prev2: () => r("prev2")
|
|
};
|
|
},
|
|
za = (e, t) => {
|
|
const n = t || (t => e.isBlock(t) || pr(t) || vr(t)),
|
|
o = (e, t, n, r) => {
|
|
if (dr(e)) {
|
|
const n = r(e, t, e.data);
|
|
if (-1 !== n) return I.some({container: e, offset: n});
|
|
}
|
|
return n().bind(e => o(e.container, e.offset, n, r));
|
|
};
|
|
return {
|
|
backwards: (t, r, s, a) => {
|
|
const i = Ua(t, null != a ? a : e.getRoot(), n);
|
|
return o(t, r, () => i.prev().map(e => ({container: e, offset: e.length})), s).getOrNull();
|
|
},
|
|
forwards: (t, r, s, a) => {
|
|
const i = Ua(t, null != a ? a : e.getRoot(), n);
|
|
return o(t, r, () => i.next().map(e => ({container: e, offset: 0})), s).getOrNull();
|
|
}
|
|
};
|
|
},
|
|
ja = ((e, t) => {
|
|
const n = t => (e(t) ? I.from(t.dom.nodeValue) : I.none());
|
|
return {
|
|
get: t => {
|
|
if (!e(t)) throw new Error("Can only get text value of a text node");
|
|
return n(t).getOr("");
|
|
},
|
|
getOption: n,
|
|
set: (t, n) => {
|
|
if (!e(t)) throw new Error("Can only set raw text value of a text node");
|
|
t.dom.nodeValue = n;
|
|
}
|
|
};
|
|
})(Yt),
|
|
Ha = e => ja.get(e),
|
|
$a = e => {
|
|
let t;
|
|
return n => ((t = t || se(e, M)), ke(t, $t(n)));
|
|
},
|
|
Va = e => Kt(e) && "br" === $t(e),
|
|
qa = $a([
|
|
"h1",
|
|
"h2",
|
|
"h3",
|
|
"h4",
|
|
"h5",
|
|
"h6",
|
|
"p",
|
|
"div",
|
|
"address",
|
|
"pre",
|
|
"form",
|
|
"blockquote",
|
|
"center",
|
|
"dir",
|
|
"fieldset",
|
|
"header",
|
|
"footer",
|
|
"article",
|
|
"section",
|
|
"hgroup",
|
|
"aside",
|
|
"nav",
|
|
"figure"
|
|
]),
|
|
Wa = $a(["ul", "ol", "dl"]),
|
|
Ka = $a(["li", "dd", "dt"]),
|
|
Ya = $a(["thead", "tbody", "tfoot"]),
|
|
Ga = $a(["td", "th"]),
|
|
Xa = $a(["pre", "script", "textarea", "style"]),
|
|
Za = () => {
|
|
const e = vn("br");
|
|
return Jt(e, "data-mce-bogus", "1"), e;
|
|
},
|
|
Qa = e => {
|
|
xo(e), yo(e, Za());
|
|
},
|
|
Ja = qo,
|
|
ei = Ko,
|
|
ti = e => e.replace(/\uFEFF/g, ""),
|
|
ni = er,
|
|
oi = dr,
|
|
ri = e => (oi(e) && (e = e.parentNode), ni(e) && e.hasAttribute("data-mce-caret")),
|
|
si = e => oi(e) && ei(e.data),
|
|
ai = e => ri(e) || si(e),
|
|
ii = e => e.firstChild !== e.lastChild || !pr(e.firstChild),
|
|
li = e => {
|
|
const t = e.container();
|
|
return !!dr(t) && (t.data.charAt(e.offset()) === Ja || (e.isAtStart() && si(t.previousSibling)));
|
|
},
|
|
di = e => {
|
|
const t = e.container();
|
|
return !!dr(t) && (t.data.charAt(e.offset() - 1) === Ja || (e.isAtEnd() && si(t.nextSibling)));
|
|
},
|
|
ci = e => oi(e) && e.data[0] === Ja,
|
|
ui = e => oi(e) && e.data[e.data.length - 1] === Ja,
|
|
mi = e =>
|
|
e && e.hasAttribute("data-mce-caret")
|
|
? ((e => {
|
|
var t;
|
|
const n = e.getElementsByTagName("br"),
|
|
o = n[n.length - 1];
|
|
sr(o) && (null === (t = o.parentNode) || void 0 === t || t.removeChild(o));
|
|
})(e),
|
|
e.removeAttribute("data-mce-caret"),
|
|
e.removeAttribute("data-mce-bogus"),
|
|
e.removeAttribute("style"),
|
|
e.removeAttribute("data-mce-style"),
|
|
e.removeAttribute("_moz_abspos"),
|
|
e)
|
|
: null,
|
|
fi = e => ri(e.startContainer),
|
|
gi = Math.round,
|
|
pi = e =>
|
|
e
|
|
? {
|
|
left: gi(e.left),
|
|
top: gi(e.top),
|
|
bottom: gi(e.bottom),
|
|
right: gi(e.right),
|
|
width: gi(e.width),
|
|
height: gi(e.height)
|
|
}
|
|
: {left: 0, top: 0, bottom: 0, right: 0, width: 0, height: 0},
|
|
hi = (e, t) => ((e = pi(e)), t || (e.left = e.left + e.width), (e.right = e.left), (e.width = 0), e),
|
|
bi = (e, t, n) => e >= 0 && e <= Math.min(t.height, n.height) / 2,
|
|
vi = (e, t) => {
|
|
const n = Math.min(t.height / 2, e.height / 2);
|
|
return e.bottom - n < t.top || (!(e.top > t.bottom) && bi(t.top - e.bottom, e, t));
|
|
},
|
|
yi = (e, t) => e.top > t.bottom || (!(e.bottom < t.top) && bi(t.bottom - e.top, e, t)),
|
|
Ci = (e, t, n) => {
|
|
const o = Math.max(Math.min(t, e.left + e.width), e.left),
|
|
r = Math.max(Math.min(n, e.top + e.height), e.top);
|
|
return Math.sqrt((t - o) * (t - o) + (n - r) * (n - r));
|
|
},
|
|
wi = e => {
|
|
const t = e.startContainer,
|
|
n = e.startOffset;
|
|
return t === e.endContainer && t.hasChildNodes() && e.endOffset === n + 1 ? t.childNodes[n] : null;
|
|
},
|
|
xi = (e, t) => {
|
|
if (er(e) && e.hasChildNodes()) {
|
|
const n = e.childNodes,
|
|
o = ((e, t, n) => Math.min(Math.max(e, 0), n))(t, 0, n.length - 1);
|
|
return n[o];
|
|
}
|
|
return e;
|
|
},
|
|
Ei = new RegExp(
|
|
"[\u0300-\u036f\u0483-\u0487\u0488-\u0489\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e3-\u0902\u093a\u093c\u0941-\u0948\u094d\u0951-\u0957\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\u0c00\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c62-\u0c63\u0c81\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc-\u0ccd\u0cd5-\u0cd6\u0ce2-\u0ce3\u0d01\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\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193b\u1a17-\u1a18\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1ab0-\u1abd\u1abe\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab-\u1bad\u1be6\u1be8-\u1be9\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8-\u1cf9\u1dc0-\u1df5\u1dfc-\u1dff\u200c-\u200d\u20d0-\u20dc\u20dd-\u20e0\u20e1\u20e2-\u20e4\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302d\u302e-\u302f\u3099-\u309a\ua66f\ua670-\ua672\ua674-\ua67d\ua69e-\ua69f\ua6f0-\ua6f1\ua802\ua806\ua80b\ua825-\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\ua9e5\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43\uaa4c\uaa7c\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1\uaaec-\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\uff9e-\uff9f]"
|
|
),
|
|
ki = e => m(e) && e.charCodeAt(0) >= 768 && Ei.test(e),
|
|
_i = br,
|
|
Si = vr,
|
|
Ni = pr,
|
|
Ri = dr,
|
|
Ai = or(["script", "style", "textarea"]),
|
|
Ti = or(["img", "input", "textarea", "hr", "iframe", "video", "audio", "object", "embed"]),
|
|
Oi = or(["table"]),
|
|
Bi = ai,
|
|
Pi = e => !Bi(e) && (Ri(e) ? !Ai(e.parentNode) : Ti(e) || Ni(e) || Oi(e) || Di(e)),
|
|
Di = e => !(e => er(e) && "true" === e.getAttribute("unselectable"))(e) && Si(e),
|
|
Li = (e, t) =>
|
|
Pi(e) &&
|
|
((e, t) => {
|
|
for (let n = e.parentNode; n && n !== t; n = n.parentNode) {
|
|
if (Di(n)) return !1;
|
|
if (_i(n)) return !0;
|
|
}
|
|
return !0;
|
|
})(e, t),
|
|
Mi = er,
|
|
Ii = Pi,
|
|
Fi = rr("display", "block table"),
|
|
Ui = rr("float", "left right"),
|
|
zi = (
|
|
(...e) =>
|
|
t => {
|
|
for (let n = 0; n < e.length; n++) if (!e[n](t)) return !1;
|
|
return !0;
|
|
}
|
|
)(Mi, Ii, O(Ui)),
|
|
ji = O(rr("white-space", "pre pre-line pre-wrap")),
|
|
Hi = dr,
|
|
$i = pr,
|
|
Vi = fa.nodeIndex,
|
|
qi = (e, t) => (t < 0 && er(e) && e.hasChildNodes() ? void 0 : xi(e, t)),
|
|
Wi = e => (e ? e.createRange() : fa.DOM.createRng()),
|
|
Ki = e => m(e) && /[\r\n\t ]/.test(e),
|
|
Yi = e => !!e.setStart && !!e.setEnd,
|
|
Gi = e => {
|
|
const t = e.startContainer,
|
|
n = e.startOffset;
|
|
if (Ki(e.toString()) && ji(t.parentNode) && dr(t)) {
|
|
const e = t.data;
|
|
if (Ki(e[n - 1]) || Ki(e[n + 1])) return !0;
|
|
}
|
|
return !1;
|
|
},
|
|
Xi = e => 0 === e.left && 0 === e.right && 0 === e.top && 0 === e.bottom,
|
|
Zi = e => {
|
|
var t;
|
|
let n;
|
|
const o = e.getClientRects();
|
|
return (
|
|
(n = o.length > 0 ? pi(o[0]) : pi(e.getBoundingClientRect())),
|
|
!Yi(e) && $i(e) && Xi(n)
|
|
? (e => {
|
|
const t = e.ownerDocument,
|
|
n = Wi(t),
|
|
o = t.createTextNode(Wo),
|
|
r = e.parentNode;
|
|
r.insertBefore(o, e), n.setStart(o, 0), n.setEnd(o, 1);
|
|
const s = pi(n.getBoundingClientRect());
|
|
return r.removeChild(o), s;
|
|
})(e)
|
|
: Xi(n) &&
|
|
Yi(e) &&
|
|
null !==
|
|
(t = (e => {
|
|
const t = e.startContainer,
|
|
n = e.endContainer,
|
|
o = e.startOffset,
|
|
r = e.endOffset;
|
|
if (t === n && dr(n) && 0 === o && 1 === r) {
|
|
const t = e.cloneRange();
|
|
return t.setEndAfter(n), Zi(t);
|
|
}
|
|
return null;
|
|
})(e)) &&
|
|
void 0 !== t
|
|
? t
|
|
: n
|
|
);
|
|
},
|
|
Qi = (e, t) => {
|
|
const n = hi(e, t);
|
|
return (n.width = 1), (n.right = n.left + 1), n;
|
|
},
|
|
Ji = (e, t, n) => {
|
|
const o = () => (
|
|
n ||
|
|
(n = (e => {
|
|
const t = [],
|
|
n = e => {
|
|
var n, o;
|
|
0 !== e.height &&
|
|
((t.length > 0 &&
|
|
((n = e),
|
|
(o = t[t.length - 1]),
|
|
n.left === o.left && n.top === o.top && n.bottom === o.bottom && n.right === o.right)) ||
|
|
t.push(e));
|
|
},
|
|
o = (e, t) => {
|
|
const o = Wi(e.ownerDocument);
|
|
if (t < e.data.length) {
|
|
if (ki(e.data[t])) return;
|
|
if (ki(e.data[t - 1]) && (o.setStart(e, t), o.setEnd(e, t + 1), !Gi(o))) return void n(Qi(Zi(o), !1));
|
|
}
|
|
t > 0 && (o.setStart(e, t - 1), o.setEnd(e, t), Gi(o) || n(Qi(Zi(o), !1))),
|
|
t < e.data.length && (o.setStart(e, t), o.setEnd(e, t + 1), Gi(o) || n(Qi(Zi(o), !0)));
|
|
},
|
|
r = e.container(),
|
|
s = e.offset();
|
|
if (Hi(r)) return o(r, s), t;
|
|
if (Mi(r))
|
|
if (e.isAtEnd()) {
|
|
const e = qi(r, s);
|
|
Hi(e) && o(e, e.data.length), zi(e) && !$i(e) && n(Qi(Zi(e), !1));
|
|
} else {
|
|
const a = qi(r, s);
|
|
if ((Hi(a) && o(a, 0), zi(a) && e.isAtEnd())) return n(Qi(Zi(a), !1)), t;
|
|
const i = qi(e.container(), e.offset() - 1);
|
|
zi(i) && !$i(i) && (Fi(i) || Fi(a) || !zi(a)) && n(Qi(Zi(i), !1)), zi(a) && n(Qi(Zi(a), !0));
|
|
}
|
|
return t;
|
|
})(Ji(e, t))),
|
|
n
|
|
);
|
|
return {
|
|
container: N(e),
|
|
offset: N(t),
|
|
toRange: () => {
|
|
const n = Wi(e.ownerDocument);
|
|
return n.setStart(e, t), n.setEnd(e, t), n;
|
|
},
|
|
getClientRects: o,
|
|
isVisible: () => o().length > 0,
|
|
isAtStart: () => (Hi(e), 0 === t),
|
|
isAtEnd: () => (Hi(e) ? t >= e.data.length : t >= e.childNodes.length),
|
|
isEqual: n => n && e === n.container() && t === n.offset(),
|
|
getNode: n => qi(e, n ? t - 1 : t)
|
|
};
|
|
};
|
|
(Ji.fromRangeStart = e => Ji(e.startContainer, e.startOffset)),
|
|
(Ji.fromRangeEnd = e => Ji(e.endContainer, e.endOffset)),
|
|
(Ji.after = e => Ji(e.parentNode, Vi(e) + 1)),
|
|
(Ji.before = e => Ji(e.parentNode, Vi(e))),
|
|
(Ji.isAbove = (e, t) => It(le(t.getClientRects()), de(e.getClientRects()), vi).getOr(!1)),
|
|
(Ji.isBelow = (e, t) => It(de(t.getClientRects()), le(e.getClientRects()), yi).getOr(!1)),
|
|
(Ji.isAtStart = e => !!e && e.isAtStart()),
|
|
(Ji.isAtEnd = e => !!e && e.isAtEnd()),
|
|
(Ji.isTextPosition = e => !!e && dr(e.container())),
|
|
(Ji.isElementPosition = e => !Ji.isTextPosition(e));
|
|
const el = (e, t) => {
|
|
dr(t) && 0 === t.data.length && e.remove(t);
|
|
},
|
|
tl = (e, t, n) => {
|
|
gr(n)
|
|
? ((e, t, n) => {
|
|
const o = I.from(n.firstChild),
|
|
r = I.from(n.lastChild);
|
|
t.insertNode(n), o.each(t => el(e, t.previousSibling)), r.each(t => el(e, t.nextSibling));
|
|
})(e, t, n)
|
|
: ((e, t, n) => {
|
|
t.insertNode(n), el(e, n.previousSibling), el(e, n.nextSibling);
|
|
})(e, t, n);
|
|
},
|
|
nl = dr,
|
|
ol = sr,
|
|
rl = fa.nodeIndex,
|
|
sl = e => {
|
|
const t = e.parentNode;
|
|
return ol(t) ? sl(t) : t;
|
|
},
|
|
al = e =>
|
|
e ? Be(e.childNodes, (e, t) => (ol(t) && "BR" !== t.nodeName ? (e = e.concat(al(t))) : e.push(t), e), []) : [],
|
|
il = e => t => e === t,
|
|
ll = e =>
|
|
(nl(e) ? "text()" : e.nodeName.toLowerCase()) +
|
|
"[" +
|
|
(e => {
|
|
let t, n;
|
|
(t = al(sl(e))), (n = Pe(t, il(e), e)), (t = t.slice(0, n + 1));
|
|
const o = Be(t, (e, n, o) => (nl(n) && nl(t[o - 1]) && e++, e), 0);
|
|
return (t = Oe(t, or([e.nodeName]))), (n = Pe(t, il(e), e)), n - o;
|
|
})(e) +
|
|
"]",
|
|
dl = (e, t) => {
|
|
let n,
|
|
o = [],
|
|
r = t.container(),
|
|
s = t.offset();
|
|
if (nl(r))
|
|
n = ((e, t) => {
|
|
let n = e;
|
|
for (; (n = n.previousSibling) && nl(n); ) t += n.data.length;
|
|
return t;
|
|
})(r, s);
|
|
else {
|
|
const e = r.childNodes;
|
|
s >= e.length ? ((n = "after"), (s = e.length - 1)) : (n = "before"), (r = e[s]);
|
|
}
|
|
o.push(ll(r));
|
|
let a = ((e, t, n) => {
|
|
const o = [];
|
|
for (let n = t.parentNode; n && n !== e; n = n.parentNode) o.push(n);
|
|
return o;
|
|
})(e, r);
|
|
return (a = Oe(a, O(sr))), (o = o.concat(Te(a, e => ll(e)))), o.reverse().join("/") + "," + n;
|
|
},
|
|
cl = (e, t) => {
|
|
if (!t) return null;
|
|
const n = t.split(","),
|
|
o = n[0].split("/"),
|
|
r = n.length > 1 ? n[1] : "before",
|
|
s = Be(
|
|
o,
|
|
(e, t) => {
|
|
const n = /([\w\-\(\)]+)\[([0-9]+)\]/.exec(t);
|
|
return n
|
|
? ("text()" === n[1] && (n[1] = "#text"),
|
|
((e, t, n) => {
|
|
let o = al(e);
|
|
return (o = Oe(o, (e, t) => !nl(e) || !nl(o[t - 1]))), (o = Oe(o, or([t]))), o[n];
|
|
})(e, n[1], parseInt(n[2], 10)))
|
|
: null;
|
|
},
|
|
e
|
|
);
|
|
if (!s) return null;
|
|
if (!nl(s) && s.parentNode) {
|
|
let e;
|
|
return (e = "after" === r ? rl(s) + 1 : rl(s)), Ji(s.parentNode, e);
|
|
}
|
|
return ((e, t) => {
|
|
let n = e,
|
|
o = 0;
|
|
for (; nl(n); ) {
|
|
const r = n.data.length;
|
|
if (t >= o && t <= o + r) {
|
|
(e = n), (t -= o);
|
|
break;
|
|
}
|
|
if (!nl(n.nextSibling)) {
|
|
(e = n), (t = r);
|
|
break;
|
|
}
|
|
(o += r), (n = n.nextSibling);
|
|
}
|
|
return nl(e) && t > e.data.length && (t = e.data.length), Ji(e, t);
|
|
})(s, parseInt(r, 10));
|
|
},
|
|
ul = vr,
|
|
ml = (e, t, n, o, r) => {
|
|
const s = r ? o.startContainer : o.endContainer;
|
|
let a = r ? o.startOffset : o.endOffset;
|
|
const i = [],
|
|
l = e.getRoot();
|
|
if (dr(s))
|
|
i.push(
|
|
n
|
|
? ((e, t, n) => {
|
|
let o = e(t.data.slice(0, n)).length;
|
|
for (let n = t.previousSibling; n && dr(n); n = n.previousSibling) o += e(n.data).length;
|
|
return o;
|
|
})(t, s, a)
|
|
: a
|
|
);
|
|
else {
|
|
let t = 0;
|
|
const o = s.childNodes;
|
|
a >= o.length && o.length && ((t = 1), (a = Math.max(0, o.length - 1))), i.push(e.nodeIndex(o[a], n) + t);
|
|
}
|
|
for (let t = s; t && t !== l; t = t.parentNode) i.push(e.nodeIndex(t, n));
|
|
return i;
|
|
},
|
|
fl = (e, t, n) => {
|
|
let o = 0;
|
|
return Dt.each(e.select(t), e => ("all" === e.getAttribute("data-mce-bogus") ? void 0 : e !== n && void o++)), o;
|
|
},
|
|
gl = (e, t) => {
|
|
let n = t ? e.startContainer : e.endContainer,
|
|
o = t ? e.startOffset : e.endOffset;
|
|
if (er(n) && "TR" === n.nodeName) {
|
|
const r = n.childNodes;
|
|
(n = r[Math.min(t ? o : o - 1, r.length - 1)]),
|
|
n && ((o = t ? 0 : n.childNodes.length), t ? e.setStart(n, o) : e.setEnd(n, o));
|
|
}
|
|
},
|
|
pl = e => (gl(e, !0), gl(e, !1), e),
|
|
hl = (e, t) => {
|
|
if (er(e) && ((e = xi(e, t)), ul(e))) return e;
|
|
if (ai(e)) {
|
|
dr(e) && ri(e) && (e = e.parentNode);
|
|
let t = e.previousSibling;
|
|
if (ul(t)) return t;
|
|
if (((t = e.nextSibling), ul(t))) return t;
|
|
}
|
|
},
|
|
bl = (e, t, n) => {
|
|
const o = n.getNode(),
|
|
r = n.getRng();
|
|
if ("IMG" === o.nodeName || ul(o)) {
|
|
const e = o.nodeName;
|
|
return {name: e, index: fl(n.dom, e, o)};
|
|
}
|
|
const s = (e => hl(e.startContainer, e.startOffset) || hl(e.endContainer, e.endOffset))(r);
|
|
if (s) {
|
|
const e = s.tagName;
|
|
return {name: e, index: fl(n.dom, e, s)};
|
|
}
|
|
return ((e, t, n, o) => {
|
|
const r = t.dom,
|
|
s = ml(r, e, n, o, !0),
|
|
a = t.isForward(),
|
|
i = fi(o) ? {isFakeCaret: !0} : {};
|
|
return t.isCollapsed() ? {start: s, forward: a, ...i} : {start: s, end: ml(r, e, n, o, !1), forward: a, ...i};
|
|
})(e, n, t, r);
|
|
},
|
|
vl = (e, t, n) => {
|
|
const o = {"data-mce-type": "bookmark", id: t, style: "overflow:hidden;line-height:0px"};
|
|
return n ? e.create("span", o, "") : e.create("span", o);
|
|
},
|
|
yl = (e, t) => {
|
|
const n = e.dom;
|
|
let o = e.getRng();
|
|
const r = n.uniqueId(),
|
|
s = e.isCollapsed(),
|
|
a = e.getNode(),
|
|
i = a.nodeName,
|
|
l = e.isForward();
|
|
if ("IMG" === i) return {name: i, index: fl(n, i, a)};
|
|
const d = pl(o.cloneRange());
|
|
if (!s) {
|
|
d.collapse(!1);
|
|
const e = vl(n, r + "_end", t);
|
|
tl(n, d, e);
|
|
}
|
|
(o = pl(o)), o.collapse(!0);
|
|
const c = vl(n, r + "_start", t);
|
|
return tl(n, o, c), e.moveToBookmark({id: r, keep: !0, forward: l}), {id: r, forward: l};
|
|
},
|
|
Cl = T(bl, R, !0),
|
|
wl = e => {
|
|
const t = t => t(e),
|
|
n = N(e),
|
|
o = () => r,
|
|
r = {
|
|
tag: !0,
|
|
inner: e,
|
|
fold: (t, n) => n(e),
|
|
isValue: M,
|
|
isError: L,
|
|
map: t => El.value(t(e)),
|
|
mapError: o,
|
|
bind: t,
|
|
exists: t,
|
|
forall: t,
|
|
getOr: n,
|
|
or: o,
|
|
getOrThunk: n,
|
|
orThunk: o,
|
|
getOrDie: n,
|
|
each: t => {
|
|
t(e);
|
|
},
|
|
toOptional: () => I.some(e)
|
|
};
|
|
return r;
|
|
},
|
|
xl = e => {
|
|
const t = () => n,
|
|
n = {
|
|
tag: !1,
|
|
inner: e,
|
|
fold: (t, n) => t(e),
|
|
isValue: L,
|
|
isError: M,
|
|
map: t,
|
|
mapError: t => El.error(t(e)),
|
|
bind: t,
|
|
exists: L,
|
|
forall: M,
|
|
getOr: R,
|
|
or: R,
|
|
getOrThunk: P,
|
|
orThunk: P,
|
|
getOrDie: B(String(e)),
|
|
each: k,
|
|
toOptional: I.none
|
|
};
|
|
return n;
|
|
},
|
|
El = {value: wl, error: xl, fromOption: (e, t) => e.fold(() => xl(t), wl)},
|
|
kl = e => {
|
|
if (!p(e)) throw new Error("cases must be an array");
|
|
if (0 === e.length) throw new Error("there must be at least one case");
|
|
const t = [],
|
|
n = {};
|
|
return (
|
|
q(e, (o, r) => {
|
|
const s = fe(o);
|
|
if (1 !== s.length) throw new Error("one and only one name per case");
|
|
const a = s[0],
|
|
i = o[a];
|
|
if (void 0 !== n[a]) throw new Error("duplicate key detected:" + a);
|
|
if ("cata" === a) throw new Error("cannot have a case named cata (sorry)");
|
|
if (!p(i)) throw new Error("case arguments must be an array");
|
|
t.push(a),
|
|
(n[a] = (...n) => {
|
|
const o = n.length;
|
|
if (o !== i.length)
|
|
throw new Error(
|
|
"Wrong number of arguments to case " + a + ". Expected " + i.length + " (" + i + "), got " + o
|
|
);
|
|
return {
|
|
fold: (...t) => {
|
|
if (t.length !== e.length)
|
|
throw new Error("Wrong number of arguments to fold. Expected " + e.length + ", got " + t.length);
|
|
return t[r].apply(null, n);
|
|
},
|
|
match: e => {
|
|
const o = fe(e);
|
|
if (t.length !== o.length)
|
|
throw new Error(
|
|
"Wrong number of arguments to match. Expected: " + t.join(",") + "\nActual: " + o.join(",")
|
|
);
|
|
if (!ne(t, e => H(o, e)))
|
|
throw new Error(
|
|
"Not all branches were specified when using match. Specified: " +
|
|
o.join(", ") +
|
|
"\nRequired: " +
|
|
t.join(", ")
|
|
);
|
|
return e[a].apply(null, n);
|
|
},
|
|
log: e => {
|
|
console.log(e, {constructors: t, constructor: a, params: n});
|
|
}
|
|
};
|
|
});
|
|
}),
|
|
n
|
|
);
|
|
};
|
|
kl([
|
|
{bothErrors: ["error1", "error2"]},
|
|
{firstError: ["error1", "value2"]},
|
|
{secondError: ["value1", "error2"]},
|
|
{bothValues: ["value1", "value2"]}
|
|
]);
|
|
const _l = e => "inline-command" === e.type || "inline-format" === e.type,
|
|
Sl = e => "block-command" === e.type || "block-format" === e.type,
|
|
Nl = e => {
|
|
var t;
|
|
const n = t => El.error({message: t, pattern: e}),
|
|
o = (t, o, r) => {
|
|
if (void 0 !== e.format) {
|
|
let r;
|
|
if (p(e.format)) {
|
|
if (!ne(e.format, m)) return n(t + " pattern has non-string items in the `format` array");
|
|
r = e.format;
|
|
} else {
|
|
if (!m(e.format)) return n(t + " pattern has non-string `format` parameter");
|
|
r = [e.format];
|
|
}
|
|
return El.value(o(r));
|
|
}
|
|
return void 0 !== e.cmd
|
|
? m(e.cmd)
|
|
? El.value(r(e.cmd, e.value))
|
|
: n(t + " pattern has non-string `cmd` parameter")
|
|
: n(t + " pattern is missing both `format` and `cmd` parameters");
|
|
};
|
|
if (!f(e)) return n("Raw pattern is not an object");
|
|
if (!m(e.start)) return n("Raw pattern is missing `start` parameter");
|
|
if (void 0 !== e.end) {
|
|
if (!m(e.end)) return n("Inline pattern has non-string `end` parameter");
|
|
if (0 === e.start.length && 0 === e.end.length)
|
|
return n("Inline pattern has empty `start` and `end` parameters");
|
|
let t = e.start,
|
|
r = e.end;
|
|
return (
|
|
0 === r.length && ((r = t), (t = "")),
|
|
o(
|
|
"Inline",
|
|
e => ({type: "inline-format", start: t, end: r, format: e}),
|
|
(e, n) => ({type: "inline-command", start: t, end: r, cmd: e, value: n})
|
|
)
|
|
);
|
|
}
|
|
if (void 0 !== e.replacement)
|
|
return m(e.replacement)
|
|
? 0 === e.start.length
|
|
? n("Replacement pattern has empty `start` parameter")
|
|
: El.value({type: "inline-command", start: "", end: e.start, cmd: "mceInsertContent", value: e.replacement})
|
|
: n("Replacement pattern has non-string `replacement` parameter");
|
|
{
|
|
const r = null !== (t = e.trigger) && void 0 !== t ? t : "space";
|
|
return 0 === e.start.length
|
|
? n("Block pattern has empty `start` parameter")
|
|
: o(
|
|
"Block",
|
|
t => ({type: "block-format", start: e.start, format: t[0], trigger: r}),
|
|
(t, n) => ({type: "block-command", start: e.start, cmd: t, value: n, trigger: r})
|
|
);
|
|
}
|
|
},
|
|
Rl = e => Y(e, Sl),
|
|
Al = e => Y(e, _l),
|
|
Tl = (e, t) => ({
|
|
...e,
|
|
blockPatterns: Y(e.blockPatterns, e =>
|
|
((e, t) => ("block-command" === e.type || "block-format" === e.type) && e.trigger === t)(e, t)
|
|
)
|
|
}),
|
|
Ol = e => {
|
|
const t = (e => {
|
|
const t = [],
|
|
n = [];
|
|
return (
|
|
q(e, e => {
|
|
e.fold(
|
|
e => {
|
|
t.push(e);
|
|
},
|
|
e => {
|
|
n.push(e);
|
|
}
|
|
);
|
|
}),
|
|
{errors: t, values: n}
|
|
);
|
|
})(V(e, Nl));
|
|
return q(t.errors, e => console.error(e.message, e.pattern)), t.values;
|
|
},
|
|
Bl = Et().deviceType,
|
|
Pl = Bl.isTouch(),
|
|
Dl = fa.DOM,
|
|
Ll = e => u(e, RegExp),
|
|
Ml = e => t => t.options.get(e),
|
|
Il = e => m(e) || f(e),
|
|
Fl =
|
|
(e, t = "") =>
|
|
n => {
|
|
const o = m(n);
|
|
if (o) {
|
|
if (-1 !== n.indexOf("=")) {
|
|
const r = (e => {
|
|
const t = e.indexOf("=") > 0 ? e.split(/[;,](?![^=;,]*(?:[;,]|$))/) : e.split(",");
|
|
return X(
|
|
t,
|
|
(e, t) => {
|
|
const n = t.split("="),
|
|
o = n[0],
|
|
r = n.length > 1 ? n[1] : o;
|
|
return (e[We(o)] = We(r)), e;
|
|
},
|
|
{}
|
|
);
|
|
})(n);
|
|
return {value: Ee(r, e.id).getOr(t), valid: o};
|
|
}
|
|
return {value: n, valid: o};
|
|
}
|
|
return {valid: !1, message: "Must be a string."};
|
|
},
|
|
Ul = Ml("iframe_attrs"),
|
|
zl = Ml("doctype"),
|
|
jl = Ml("document_base_url"),
|
|
Hl = Ml("body_id"),
|
|
$l = Ml("body_class"),
|
|
Vl = Ml("content_security_policy"),
|
|
ql = Ml("br_in_pre"),
|
|
Wl = Ml("forced_root_block"),
|
|
Kl = Ml("forced_root_block_attrs"),
|
|
Yl = Ml("newline_behavior"),
|
|
Gl = Ml("br_newline_selector"),
|
|
Xl = Ml("no_newline_selector"),
|
|
Zl = Ml("keep_styles"),
|
|
Ql = Ml("end_container_on_empty_block"),
|
|
Jl = Ml("automatic_uploads"),
|
|
ed = Ml("images_reuse_filename"),
|
|
td = Ml("images_replace_blob_uris"),
|
|
nd = Ml("icons"),
|
|
od = Ml("icons_url"),
|
|
rd = Ml("images_upload_url"),
|
|
sd = Ml("images_upload_base_path"),
|
|
ad = Ml("images_upload_credentials"),
|
|
id = Ml("images_upload_handler"),
|
|
ld = Ml("content_css_cors"),
|
|
dd = Ml("referrer_policy"),
|
|
cd = Ml("language"),
|
|
ud = Ml("language_url"),
|
|
md = Ml("indent_use_margin"),
|
|
fd = Ml("indentation"),
|
|
gd = Ml("content_css"),
|
|
pd = Ml("content_style"),
|
|
hd = Ml("font_css"),
|
|
bd = Ml("directionality"),
|
|
vd = Ml("inline_boundaries_selector"),
|
|
yd = Ml("object_resizing"),
|
|
Cd = Ml("resize_img_proportional"),
|
|
wd = Ml("placeholder"),
|
|
xd = Ml("event_root"),
|
|
Ed = Ml("service_message"),
|
|
kd = Ml("theme"),
|
|
_d = Ml("theme_url"),
|
|
Sd = Ml("model"),
|
|
Nd = Ml("model_url"),
|
|
Rd = Ml("inline_boundaries"),
|
|
Ad = Ml("formats"),
|
|
Td = Ml("preview_styles"),
|
|
Od = Ml("format_empty_lines"),
|
|
Bd = Ml("format_noneditable_selector"),
|
|
Pd = Ml("custom_ui_selector"),
|
|
Dd = Ml("inline"),
|
|
Ld = Ml("hidden_input"),
|
|
Md = Ml("submit_patch"),
|
|
Id = Ml("add_form_submit_trigger"),
|
|
Fd = Ml("add_unload_trigger"),
|
|
Ud = Ml("custom_undo_redo_levels"),
|
|
zd = Ml("disable_nodechange"),
|
|
jd = Ml("readonly"),
|
|
Hd = Ml("editable_root"),
|
|
$d = Ml("content_css_cors"),
|
|
Vd = Ml("plugins"),
|
|
qd = Ml("external_plugins"),
|
|
Wd = Ml("block_unsupported_drop"),
|
|
Kd = Ml("visual"),
|
|
Yd = Ml("visual_table_class"),
|
|
Gd = Ml("visual_anchor_class"),
|
|
Xd = Ml("iframe_aria_text"),
|
|
Zd = Ml("setup"),
|
|
Qd = Ml("init_instance_callback"),
|
|
Jd = Ml("urlconverter_callback"),
|
|
ec = Ml("auto_focus"),
|
|
tc = Ml("browser_spellcheck"),
|
|
nc = Ml("protect"),
|
|
oc = Ml("paste_block_drop"),
|
|
rc = Ml("paste_data_images"),
|
|
sc = Ml("paste_preprocess"),
|
|
ac = Ml("paste_postprocess"),
|
|
ic = Ml("newdocument_content"),
|
|
lc = Ml("paste_webkit_styles"),
|
|
dc = Ml("paste_remove_styles_if_webkit"),
|
|
cc = Ml("paste_merge_formats"),
|
|
uc = Ml("smart_paste"),
|
|
mc = Ml("paste_as_text"),
|
|
fc = Ml("paste_tab_spaces"),
|
|
gc = Ml("allow_html_data_urls"),
|
|
pc = Ml("text_patterns"),
|
|
hc = Ml("text_patterns_lookup"),
|
|
bc = Ml("noneditable_class"),
|
|
vc = Ml("editable_class"),
|
|
yc = Ml("noneditable_regexp"),
|
|
Cc = Ml("preserve_cdata"),
|
|
wc = Ml("highlight_on_focus"),
|
|
xc = Ml("xss_sanitization"),
|
|
Ec = Ml("init_content_sync"),
|
|
kc = e => Dt.explode(e.options.get("images_file_types")),
|
|
_c = Ml("table_tab_navigation"),
|
|
Sc = Ml("details_initial_state"),
|
|
Nc = Ml("details_serialized_state"),
|
|
Rc = Ml("sandbox_iframes"),
|
|
Ac = e => e.options.get("sandbox_iframes_exclusions"),
|
|
Tc = Ml("convert_unsafe_embeds"),
|
|
Oc = Ml("license_key"),
|
|
Bc = Ml("api_key"),
|
|
Pc = er,
|
|
Dc = dr,
|
|
Lc = e => {
|
|
const t = e.parentNode;
|
|
t && t.removeChild(e);
|
|
},
|
|
Mc = e => {
|
|
const t = ti(e);
|
|
return {count: e.length - t.length, text: t};
|
|
},
|
|
Ic = e => {
|
|
let t;
|
|
for (; -1 !== (t = e.data.lastIndexOf(Ja)); ) e.deleteData(t, 1);
|
|
},
|
|
Fc = (e, t) => (zc(e), t),
|
|
Uc = (e, t) =>
|
|
Ji.isTextPosition(t)
|
|
? ((e, t) =>
|
|
Dc(e) && t.container() === e
|
|
? ((e, t) => {
|
|
const n = Mc(e.data.substr(0, t.offset())),
|
|
o = Mc(e.data.substr(t.offset()));
|
|
return (n.text + o.text).length > 0 ? (Ic(e), Ji(e, t.offset() - n.count)) : t;
|
|
})(e, t)
|
|
: Fc(e, t))(e, t)
|
|
: ((e, t) =>
|
|
t.container() === e.parentNode
|
|
? ((e, t) => {
|
|
const n = t.container(),
|
|
o = ((e, t) => {
|
|
const n = j(e, t);
|
|
return -1 === n ? I.none() : I.some(n);
|
|
})(ce(n.childNodes), e)
|
|
.map(e => (e < t.offset() ? Ji(n, t.offset() - 1) : t))
|
|
.getOr(t);
|
|
return zc(e), o;
|
|
})(e, t)
|
|
: Fc(e, t))(e, t),
|
|
zc = e => {
|
|
Pc(e) && ai(e) && (ii(e) ? e.removeAttribute("data-mce-caret") : Lc(e)),
|
|
Dc(e) && (Ic(e), 0 === e.data.length && Lc(e));
|
|
},
|
|
jc = vr,
|
|
Hc = wr,
|
|
$c = yr,
|
|
Vc = (e, t, n) => {
|
|
const o = hi(t.getBoundingClientRect(), n);
|
|
let r, s;
|
|
if ("BODY" === e.tagName) {
|
|
const t = e.ownerDocument.documentElement;
|
|
(r = e.scrollLeft || t.scrollLeft), (s = e.scrollTop || t.scrollTop);
|
|
} else {
|
|
const t = e.getBoundingClientRect();
|
|
(r = e.scrollLeft - t.left), (s = e.scrollTop - t.top);
|
|
}
|
|
(o.left += r), (o.right += r), (o.top += s), (o.bottom += s), (o.width = 1);
|
|
let a = t.offsetWidth - t.clientWidth;
|
|
return a > 0 && (n && (a *= -1), (o.left += a), (o.right += a)), o;
|
|
},
|
|
qc = (e, t, n, o) => {
|
|
const r = Dr();
|
|
let s, a;
|
|
const i = Wl(e),
|
|
l = e.dom,
|
|
d = () => {
|
|
(e => {
|
|
var t, n;
|
|
const o = zo(Cn(e), "*[contentEditable=false],video,audio,embed,object");
|
|
for (let e = 0; e < o.length; e++) {
|
|
const r = o[e].dom;
|
|
let s = r.previousSibling;
|
|
if (ui(s)) {
|
|
const e = s.data;
|
|
1 === e.length
|
|
? null === (t = s.parentNode) || void 0 === t || t.removeChild(s)
|
|
: s.deleteData(e.length - 1, 1);
|
|
}
|
|
(s = r.nextSibling),
|
|
ci(s) &&
|
|
(1 === s.data.length
|
|
? null === (n = s.parentNode) || void 0 === n || n.removeChild(s)
|
|
: s.deleteData(0, 1));
|
|
}
|
|
})(t),
|
|
a && (zc(a), (a = null)),
|
|
r.on(e => {
|
|
l.remove(e.caret), r.clear();
|
|
}),
|
|
s && (clearInterval(s), (s = void 0));
|
|
};
|
|
return {
|
|
show: (e, c) => {
|
|
let u;
|
|
if ((d(), $c(c))) return null;
|
|
if (!n(c))
|
|
return (
|
|
(a = ((e, t) => {
|
|
var n;
|
|
const o = (null !== (n = e.ownerDocument) && void 0 !== n ? n : document).createTextNode(Ja),
|
|
r = e.parentNode;
|
|
if (t) {
|
|
const t = e.previousSibling;
|
|
if (oi(t)) {
|
|
if (ai(t)) return t;
|
|
if (ui(t)) return t.splitText(t.data.length - 1);
|
|
}
|
|
null == r || r.insertBefore(o, e);
|
|
} else {
|
|
const t = e.nextSibling;
|
|
if (oi(t)) {
|
|
if (ai(t)) return t;
|
|
if (ci(t)) return t.splitText(1), t;
|
|
}
|
|
e.nextSibling ? null == r || r.insertBefore(o, e.nextSibling) : null == r || r.appendChild(o);
|
|
}
|
|
return o;
|
|
})(c, e)),
|
|
(u = c.ownerDocument.createRange()),
|
|
Kc(a.nextSibling) ? (u.setStart(a, 0), u.setEnd(a, 0)) : (u.setStart(a, 1), u.setEnd(a, 1)),
|
|
u
|
|
);
|
|
{
|
|
const n = ((e, t, n) => {
|
|
var o;
|
|
const r = (null !== (o = t.ownerDocument) && void 0 !== o ? o : document).createElement(e);
|
|
r.setAttribute("data-mce-caret", n ? "before" : "after"),
|
|
r.setAttribute("data-mce-bogus", "all"),
|
|
r.appendChild(Za().dom);
|
|
const s = t.parentNode;
|
|
return (
|
|
n
|
|
? null == s || s.insertBefore(r, t)
|
|
: t.nextSibling
|
|
? null == s || s.insertBefore(r, t.nextSibling)
|
|
: null == s || s.appendChild(r),
|
|
r
|
|
);
|
|
})(i, c, e),
|
|
d = Vc(t, c, e);
|
|
l.setStyle(n, "top", d.top), l.setStyle(n, "caret-color", "transparent"), (a = n);
|
|
const m = l.create("div", {class: "mce-visual-caret", "data-mce-bogus": "all"});
|
|
l.setStyles(m, {...d}),
|
|
l.add(t, m),
|
|
r.set({caret: m, element: c, before: e}),
|
|
e && l.addClass(m, "mce-visual-caret-before"),
|
|
(s = setInterval(() => {
|
|
r.on(e => {
|
|
o()
|
|
? l.toggleClass(e.caret, "mce-visual-caret-hidden")
|
|
: l.addClass(e.caret, "mce-visual-caret-hidden");
|
|
});
|
|
}, 500)),
|
|
(u = c.ownerDocument.createRange()),
|
|
u.setStart(n, 0),
|
|
u.setEnd(n, 0);
|
|
}
|
|
return u;
|
|
},
|
|
hide: d,
|
|
getCss: () =>
|
|
".mce-visual-caret {position: absolute;background-color: black;background-color: currentcolor;}.mce-visual-caret-hidden {display: none;}*[data-mce-caret] {position: absolute;left: -1000px;right: auto;top: 0;margin: 0;padding: 0;}",
|
|
reposition: () => {
|
|
r.on(e => {
|
|
const n = Vc(t, e.element, e.before);
|
|
l.setStyles(e.caret, {...n});
|
|
});
|
|
},
|
|
destroy: () => clearInterval(s)
|
|
};
|
|
},
|
|
Wc = () => Tt.browser.isFirefox(),
|
|
Kc = e => jc(e) || Hc(e),
|
|
Yc = e => (Kc(e) || (ar(e) && Wc())) && On(Cn(e)).exists(ro),
|
|
Gc = br,
|
|
Xc = vr,
|
|
Zc = wr,
|
|
Qc = rr("display", "block table table-cell table-caption list-item"),
|
|
Jc = ai,
|
|
eu = ri,
|
|
tu = er,
|
|
nu = dr,
|
|
ou = Pi,
|
|
ru = e => e > 0,
|
|
su = e => e < 0,
|
|
au = (e, t) => {
|
|
let n;
|
|
for (; (n = e(t)); ) if (!eu(n)) return n;
|
|
return null;
|
|
},
|
|
iu = (e, t, n, o, r) => {
|
|
const s = new Vo(e, o),
|
|
a = Xc(e) || eu(e);
|
|
let i;
|
|
if (su(t)) {
|
|
if (a && ((i = au(s.prev.bind(s), !0)), n(i))) return i;
|
|
for (; (i = au(s.prev.bind(s), r)); ) if (n(i)) return i;
|
|
}
|
|
if (ru(t)) {
|
|
if (a && ((i = au(s.next.bind(s), !0)), n(i))) return i;
|
|
for (; (i = au(s.next.bind(s), r)); ) if (n(i)) return i;
|
|
}
|
|
return null;
|
|
},
|
|
lu = (e, t) => {
|
|
for (; e && e !== t; ) {
|
|
if (Qc(e)) return e;
|
|
e = e.parentNode;
|
|
}
|
|
return null;
|
|
},
|
|
du = (e, t, n) => lu(e.container(), n) === lu(t.container(), n),
|
|
cu = (e, t) => {
|
|
if (!t) return I.none();
|
|
const n = t.container(),
|
|
o = t.offset();
|
|
return tu(n) ? I.from(n.childNodes[o + e]) : I.none();
|
|
},
|
|
uu = (e, t) => {
|
|
var n;
|
|
const o = (null !== (n = t.ownerDocument) && void 0 !== n ? n : document).createRange();
|
|
return e ? (o.setStartBefore(t), o.setEndBefore(t)) : (o.setStartAfter(t), o.setEndAfter(t)), o;
|
|
},
|
|
mu = (e, t, n) => lu(t, e) === lu(n, e),
|
|
fu = (e, t, n) => {
|
|
const o = e ? "previousSibling" : "nextSibling";
|
|
let r = n;
|
|
for (; r && r !== t; ) {
|
|
let e = r[o];
|
|
if ((e && Jc(e) && (e = e[o]), Xc(e) || Zc(e))) {
|
|
if (mu(t, e, r)) return e;
|
|
break;
|
|
}
|
|
if (ou(e)) break;
|
|
r = r.parentNode;
|
|
}
|
|
return null;
|
|
},
|
|
gu = T(uu, !0),
|
|
pu = T(uu, !1),
|
|
hu = (e, t, n) => {
|
|
let o;
|
|
const r = T(fu, !0, t),
|
|
s = T(fu, !1, t),
|
|
a = n.startContainer,
|
|
i = n.startOffset;
|
|
if (ri(a)) {
|
|
const e = nu(a) ? a.parentNode : a,
|
|
t = e.getAttribute("data-mce-caret");
|
|
if ("before" === t && ((o = e.nextSibling), Yc(o))) return gu(o);
|
|
if ("after" === t && ((o = e.previousSibling), Yc(o))) return pu(o);
|
|
}
|
|
if (!n.collapsed) return n;
|
|
if (dr(a)) {
|
|
if (Jc(a)) {
|
|
if (1 === e) {
|
|
if (((o = s(a)), o)) return gu(o);
|
|
if (((o = r(a)), o)) return pu(o);
|
|
}
|
|
if (-1 === e) {
|
|
if (((o = r(a)), o)) return pu(o);
|
|
if (((o = s(a)), o)) return gu(o);
|
|
}
|
|
return n;
|
|
}
|
|
if (ui(a) && i >= a.data.length - 1) return 1 === e && ((o = s(a)), o) ? gu(o) : n;
|
|
if (ci(a) && i <= 1) return -1 === e && ((o = r(a)), o) ? pu(o) : n;
|
|
if (i === a.data.length) return (o = s(a)), o ? gu(o) : n;
|
|
if (0 === i) return (o = r(a)), o ? pu(o) : n;
|
|
}
|
|
return n;
|
|
},
|
|
bu = (e, t) => cu(e ? 0 : -1, t).filter(Xc),
|
|
vu = (e, t, n) => {
|
|
const o = hu(e, t, n);
|
|
return -1 === e ? Ji.fromRangeStart(o) : Ji.fromRangeEnd(o);
|
|
},
|
|
yu = e => I.from(e.getNode()).map(Cn),
|
|
Cu = (e, t) => {
|
|
let n = t;
|
|
for (; (n = e(n)); ) if (n.isVisible()) return n;
|
|
return n;
|
|
},
|
|
wu = (e, t) => {
|
|
const n = du(e, t);
|
|
return !(n || !pr(e.getNode())) || n;
|
|
};
|
|
var xu;
|
|
!(function (e) {
|
|
(e[(e.Backwards = -1)] = "Backwards"), (e[(e.Forwards = 1)] = "Forwards");
|
|
})(xu || (xu = {}));
|
|
const Eu = vr,
|
|
ku = dr,
|
|
_u = er,
|
|
Su = pr,
|
|
Nu = Pi,
|
|
Ru = e => Ti(e) || (e => !!Di(e) && !X(ce(e.getElementsByTagName("*")), (e, t) => e || _i(t), !1))(e),
|
|
Au = Li,
|
|
Tu = (e, t) => (e.hasChildNodes() && t < e.childNodes.length ? e.childNodes[t] : null),
|
|
Ou = (e, t) => {
|
|
if (ru(e)) {
|
|
if (Nu(t.previousSibling) && !ku(t.previousSibling)) return Ji.before(t);
|
|
if (ku(t)) return Ji(t, 0);
|
|
}
|
|
if (su(e)) {
|
|
if (Nu(t.nextSibling) && !ku(t.nextSibling)) return Ji.after(t);
|
|
if (ku(t)) return Ji(t, t.data.length);
|
|
}
|
|
return su(e) ? (Su(t) ? Ji.before(t) : Ji.after(t)) : Ji.before(t);
|
|
},
|
|
Bu = (e, t, n) => {
|
|
let o, r, s, a;
|
|
if (!_u(n) || !t) return null;
|
|
if (t.isEqual(Ji.after(n)) && n.lastChild) {
|
|
if (((a = Ji.after(n.lastChild)), su(e) && Nu(n.lastChild) && _u(n.lastChild)))
|
|
return Su(n.lastChild) ? Ji.before(n.lastChild) : a;
|
|
} else a = t;
|
|
const i = a.container();
|
|
let l = a.offset();
|
|
if (ku(i)) {
|
|
if (su(e) && l > 0) return Ji(i, --l);
|
|
if (ru(e) && l < i.length) return Ji(i, ++l);
|
|
o = i;
|
|
} else {
|
|
if (su(e) && l > 0 && ((r = Tu(i, l - 1)), Nu(r)))
|
|
return !Ru(r) && ((s = iu(r, e, Au, r)), s)
|
|
? ku(s)
|
|
? Ji(s, s.data.length)
|
|
: Ji.after(s)
|
|
: ku(r)
|
|
? Ji(r, r.data.length)
|
|
: Ji.before(r);
|
|
if (ru(e) && l < i.childNodes.length && ((r = Tu(i, l)), Nu(r)))
|
|
return Su(r)
|
|
? ((e, t) => {
|
|
const n = t.nextSibling;
|
|
return n && Nu(n) ? (ku(n) ? Ji(n, 0) : Ji.before(n)) : Bu(xu.Forwards, Ji.after(t), e);
|
|
})(n, r)
|
|
: !Ru(r) && ((s = iu(r, e, Au, r)), s)
|
|
? ku(s)
|
|
? Ji(s, 0)
|
|
: Ji.before(s)
|
|
: ku(r)
|
|
? Ji(r, 0)
|
|
: Ji.after(r);
|
|
o = r || a.getNode();
|
|
}
|
|
if (o && ((ru(e) && a.isAtEnd()) || (su(e) && a.isAtStart())) && ((o = iu(o, e, M, n, !0)), Au(o, n)))
|
|
return Ou(e, o);
|
|
r = o ? iu(o, e, Au, n) : o;
|
|
const d = De(
|
|
Y(
|
|
((e, t) => {
|
|
const n = [];
|
|
let o = e;
|
|
for (; o && o !== t; ) n.push(o), (o = o.parentNode);
|
|
return n;
|
|
})(i, n),
|
|
Eu
|
|
)
|
|
);
|
|
return !d || (r && d.contains(r)) ? (r ? Ou(e, r) : null) : ((a = ru(e) ? Ji.after(d) : Ji.before(d)), a);
|
|
},
|
|
Pu = e => ({next: t => Bu(xu.Forwards, t, e), prev: t => Bu(xu.Backwards, t, e)}),
|
|
Du = e => (Ji.isTextPosition(e) ? 0 === e.offset() : Pi(e.getNode())),
|
|
Lu = e => {
|
|
if (Ji.isTextPosition(e)) {
|
|
const t = e.container();
|
|
return e.offset() === t.data.length;
|
|
}
|
|
return Pi(e.getNode(!0));
|
|
},
|
|
Mu = (e, t) => !Ji.isTextPosition(e) && !Ji.isTextPosition(t) && e.getNode() === t.getNode(!0),
|
|
Iu = (e, t, n) => {
|
|
const o = Pu(t);
|
|
return I.from(e ? o.next(n) : o.prev(n));
|
|
},
|
|
Fu = (e, t, n) =>
|
|
Iu(e, t, n).bind(o =>
|
|
du(n, o, t) &&
|
|
((e, t, n) => {
|
|
return e
|
|
? !Mu(t, n) && ((o = t), !(!Ji.isTextPosition(o) && pr(o.getNode()))) && Lu(t) && Du(n)
|
|
: !Mu(n, t) && Du(t) && Lu(n);
|
|
var o;
|
|
})(e, n, o)
|
|
? Iu(e, t, o)
|
|
: I.some(o)
|
|
),
|
|
Uu = (e, t, n, o) => Fu(e, t, n).bind(n => (o(n) ? Uu(e, t, n, o) : I.some(n))),
|
|
zu = (e, t) => {
|
|
const n = e ? t.firstChild : t.lastChild;
|
|
return dr(n)
|
|
? I.some(Ji(n, e ? 0 : n.data.length))
|
|
: n
|
|
? Pi(n)
|
|
? I.some(e ? Ji.before(n) : pr((o = n)) ? Ji.before(o) : Ji.after(o))
|
|
: ((e, t, n) => {
|
|
const o = e ? Ji.before(n) : Ji.after(n);
|
|
return Iu(e, t, o);
|
|
})(e, t, n)
|
|
: I.none();
|
|
var o;
|
|
},
|
|
ju = T(Iu, !0),
|
|
Hu = T(Iu, !1),
|
|
$u = T(zu, !0),
|
|
Vu = T(zu, !1),
|
|
qu = "_mce_caret",
|
|
Wu = e => er(e) && e.id === qu,
|
|
Ku = (e, t) => {
|
|
let n = t;
|
|
for (; n && n !== e; ) {
|
|
if (Wu(n)) return n;
|
|
n = n.parentNode;
|
|
}
|
|
return null;
|
|
},
|
|
Yu = e => ke(e, "name"),
|
|
Gu = e => Dt.isArray(e.start),
|
|
Xu = e => !(!Yu(e) && b(e.forward)) || e.forward,
|
|
Zu = (e, t) => (er(t) && e.isBlock(t) && !t.innerHTML && (t.innerHTML = '<br data-mce-bogus="1" />'), t),
|
|
Qu = (e, t) => Vu(e).fold(L, e => (t.setStart(e.container(), e.offset()), t.setEnd(e.container(), e.offset()), !0)),
|
|
Ju = (e, t, n) =>
|
|
!(
|
|
!(e => !e.hasChildNodes())(t) ||
|
|
!Ku(e, t) ||
|
|
(((e, t) => {
|
|
var n;
|
|
const o = (null !== (n = e.ownerDocument) && void 0 !== n ? n : document).createTextNode(Ja);
|
|
e.appendChild(o), t.setStart(o, 0), t.setEnd(o, 0);
|
|
})(t, n),
|
|
0)
|
|
),
|
|
em = (e, t, n, o) => {
|
|
const r = n[t ? "start" : "end"],
|
|
s = e.getRoot();
|
|
if (r) {
|
|
let e = s,
|
|
n = r[0];
|
|
for (let t = r.length - 1; e && t >= 1; t--) {
|
|
const n = e.childNodes;
|
|
if (Ju(s, e, o)) return !0;
|
|
if (r[t] > n.length - 1) return !!Ju(s, e, o) || Qu(e, o);
|
|
e = n[r[t]];
|
|
}
|
|
dr(e) && (n = Math.min(r[0], e.data.length)),
|
|
er(e) && (n = Math.min(r[0], e.childNodes.length)),
|
|
t ? o.setStart(e, n) : o.setEnd(e, n);
|
|
}
|
|
return !0;
|
|
},
|
|
tm = e => dr(e) && e.data.length > 0,
|
|
nm = (e, t, n) => {
|
|
const o = e.get(n.id + "_" + t),
|
|
r = null == o ? void 0 : o.parentNode,
|
|
s = n.keep;
|
|
if (o && r) {
|
|
let a, i;
|
|
if (
|
|
("start" === t
|
|
? s
|
|
? o.hasChildNodes()
|
|
? ((a = o.firstChild), (i = 1))
|
|
: tm(o.nextSibling)
|
|
? ((a = o.nextSibling), (i = 0))
|
|
: tm(o.previousSibling)
|
|
? ((a = o.previousSibling), (i = o.previousSibling.data.length))
|
|
: ((a = r), (i = e.nodeIndex(o) + 1))
|
|
: ((a = r), (i = e.nodeIndex(o)))
|
|
: s
|
|
? o.hasChildNodes()
|
|
? ((a = o.firstChild), (i = 1))
|
|
: tm(o.previousSibling)
|
|
? ((a = o.previousSibling), (i = o.previousSibling.data.length))
|
|
: ((a = r), (i = e.nodeIndex(o)))
|
|
: ((a = r), (i = e.nodeIndex(o))),
|
|
!s)
|
|
) {
|
|
const r = o.previousSibling,
|
|
s = o.nextSibling;
|
|
let l;
|
|
for (
|
|
Dt.each(Dt.grep(o.childNodes), e => {
|
|
dr(e) && (e.data = e.data.replace(/\uFEFF/g, ""));
|
|
});
|
|
(l = e.get(n.id + "_" + t));
|
|
|
|
)
|
|
e.remove(l, !0);
|
|
if (dr(s) && dr(r) && !Tt.browser.isOpera()) {
|
|
const t = r.data.length;
|
|
r.appendData(s.data), e.remove(s), (a = r), (i = t);
|
|
}
|
|
}
|
|
return I.some(Ji(a, i));
|
|
}
|
|
return I.none();
|
|
},
|
|
om = (e, t, n) =>
|
|
((e, t, n = !1) =>
|
|
2 === t
|
|
? bl(ti, n, e)
|
|
: 3 === t
|
|
? (e => {
|
|
const t = e.getRng();
|
|
return {
|
|
start: dl(e.dom.getRoot(), Ji.fromRangeStart(t)),
|
|
end: dl(e.dom.getRoot(), Ji.fromRangeEnd(t)),
|
|
forward: e.isForward()
|
|
};
|
|
})(e)
|
|
: t
|
|
? (e => ({rng: e.getRng(), forward: e.isForward()}))(e)
|
|
: yl(e, !1))(e, t, n),
|
|
rm = (e, t) => {
|
|
((e, t) => {
|
|
const n = e.dom;
|
|
if (t) {
|
|
if (Gu(t))
|
|
return ((e, t) => {
|
|
const n = e.createRng();
|
|
return em(e, !0, t, n) && em(e, !1, t, n) ? I.some({range: n, forward: Xu(t)}) : I.none();
|
|
})(n, t);
|
|
if ((e => m(e.start))(t))
|
|
return ((e, t) => {
|
|
const n = I.from(cl(e.getRoot(), t.start)),
|
|
o = I.from(cl(e.getRoot(), t.end));
|
|
return It(n, o, (n, o) => {
|
|
const r = e.createRng();
|
|
return (
|
|
r.setStart(n.container(), n.offset()), r.setEnd(o.container(), o.offset()), {range: r, forward: Xu(t)}
|
|
);
|
|
});
|
|
})(n, t);
|
|
if ((e => ke(e, "id"))(t))
|
|
return ((e, t) => {
|
|
const n = nm(e, "start", t),
|
|
o = nm(e, "end", t);
|
|
return It(n, o.or(n), (n, o) => {
|
|
const r = e.createRng();
|
|
return (
|
|
r.setStart(Zu(e, n.container()), n.offset()),
|
|
r.setEnd(Zu(e, o.container()), o.offset()),
|
|
{range: r, forward: Xu(t)}
|
|
);
|
|
});
|
|
})(n, t);
|
|
if (Yu(t))
|
|
return ((e, t) =>
|
|
I.from(e.select(t.name)[t.index]).map(t => {
|
|
const n = e.createRng();
|
|
return n.selectNode(t), {range: n, forward: !0};
|
|
}))(n, t);
|
|
if ((e => ke(e, "rng"))(t)) return I.some({range: t.rng, forward: Xu(t)});
|
|
}
|
|
return I.none();
|
|
})(e, t).each(({range: t, forward: n}) => {
|
|
e.setRng(t, n);
|
|
});
|
|
},
|
|
sm = e => er(e) && "SPAN" === e.tagName && "bookmark" === e.getAttribute("data-mce-type"),
|
|
am = ((im = Wo), e => im === e);
|
|
var im;
|
|
const lm = e => "" !== e && -1 !== " \f\n\r\t\v".indexOf(e),
|
|
dm = e => !lm(e) && !am(e) && !Ko(e),
|
|
cm = e => {
|
|
const t = [];
|
|
if (e) for (let n = 0; n < e.rangeCount; n++) t.push(e.getRangeAt(n));
|
|
return t;
|
|
},
|
|
um = (e, t) => {
|
|
const n = zo(t, "td[data-mce-selected],th[data-mce-selected]");
|
|
return n.length > 0
|
|
? n
|
|
: (e =>
|
|
Y(
|
|
(e =>
|
|
te(e, e => {
|
|
const t = wi(e);
|
|
return t ? [Cn(t)] : [];
|
|
}))(e),
|
|
Ga
|
|
))(e);
|
|
},
|
|
mm = e => um(cm(e.selection.getSel()), Cn(e.getBody())),
|
|
fm = (e, t) => to(e, "table", t),
|
|
gm = e => Un(e).fold(N([e]), t => [e].concat(gm(t))),
|
|
pm = e =>
|
|
zn(e).fold(N([e]), t =>
|
|
"br" === $t(t)
|
|
? Pn(t)
|
|
.map(t => [e].concat(pm(t)))
|
|
.getOr([])
|
|
: [e].concat(pm(t))
|
|
),
|
|
hm = (e, t) =>
|
|
It(
|
|
(e => {
|
|
const t = e.startContainer,
|
|
n = e.startOffset;
|
|
return dr(t) ? (0 === n ? I.some(Cn(t)) : I.none()) : I.from(t.childNodes[n]).map(Cn);
|
|
})(t),
|
|
(e => {
|
|
const t = e.endContainer,
|
|
n = e.endOffset;
|
|
return dr(t) ? (n === t.data.length ? I.some(Cn(t)) : I.none()) : I.from(t.childNodes[n - 1]).map(Cn);
|
|
})(t),
|
|
(t, n) => {
|
|
const o = Q(gm(e), T(_n, t)),
|
|
r = Q(pm(e), T(_n, n));
|
|
return o.isSome() && r.isSome();
|
|
}
|
|
).getOr(!1),
|
|
bm = (e, t, n, o) => {
|
|
const r = n,
|
|
s = new Vo(n, r),
|
|
a = Ce(e.schema.getMoveCaretBeforeOnEnterElements(), (e, t) => !H(["td", "th", "table"], t.toLowerCase()));
|
|
let i = n;
|
|
do {
|
|
if (dr(i) && 0 !== Dt.trim(i.data).length) return void (o ? t.setStart(i, 0) : t.setEnd(i, i.data.length));
|
|
if (a[i.nodeName])
|
|
return void (o ? t.setStartBefore(i) : "BR" === i.nodeName ? t.setEndBefore(i) : t.setEndAfter(i));
|
|
} while ((i = o ? s.next() : s.prev()));
|
|
"BODY" === r.nodeName && (o ? t.setStart(r, 0) : t.setEnd(r, r.childNodes.length));
|
|
},
|
|
vm = e => {
|
|
const t = e.selection.getSel();
|
|
return C(t) && t.rangeCount > 0;
|
|
},
|
|
ym = (e, t) => {
|
|
const n = mm(e);
|
|
n.length > 0
|
|
? q(n, n => {
|
|
const o = n.dom,
|
|
r = e.dom.createRng();
|
|
r.setStartBefore(o), r.setEndAfter(o), t(r, !0);
|
|
})
|
|
: t(e.selection.getRng(), !1);
|
|
},
|
|
Cm = (e, t, n) => {
|
|
const o = yl(e, t);
|
|
n(o), e.moveToBookmark(o);
|
|
},
|
|
wm = e => x(null == e ? void 0 : e.nodeType),
|
|
xm = e => er(e) && !sm(e) && !Wu(e) && !sr(e),
|
|
Em = (e, t, n) => {
|
|
const {selection: o, dom: r} = e,
|
|
s = o.getNode(),
|
|
a = vr(s);
|
|
Cm(o, !0, () => {
|
|
t();
|
|
}),
|
|
a && vr(s) && r.isChildOf(s, e.getBody()) ? e.selection.select(s) : n(o.getStart()) && km(r, o);
|
|
},
|
|
km = (e, t) => {
|
|
var n, o;
|
|
const r = t.getRng(),
|
|
{startContainer: s, startOffset: a} = r;
|
|
if (
|
|
!((e, t) => {
|
|
if (xm(t) && !/^(TD|TH)$/.test(t.nodeName)) {
|
|
const n = e.getAttrib(t, "data-mce-selected"),
|
|
o = parseInt(n, 10);
|
|
return !isNaN(o) && o > 0;
|
|
}
|
|
return !1;
|
|
})(e, t.getNode()) &&
|
|
er(s)
|
|
) {
|
|
const i = s.childNodes,
|
|
l = e.getRoot();
|
|
let d;
|
|
if (a < i.length) {
|
|
const t = i[a];
|
|
d = new Vo(t, null !== (n = e.getParent(t, e.isBlock)) && void 0 !== n ? n : l);
|
|
} else {
|
|
const t = i[i.length - 1];
|
|
(d = new Vo(t, null !== (o = e.getParent(t, e.isBlock)) && void 0 !== o ? o : l)), d.next(!0);
|
|
}
|
|
for (let n = d.current(); n; n = d.next()) {
|
|
if ("false" === e.getContentEditable(n)) return;
|
|
if (dr(n) && !Rm(n)) return r.setStart(n, 0), void t.setRng(r);
|
|
}
|
|
}
|
|
},
|
|
_m = (e, t, n) => {
|
|
if (e) {
|
|
const o = t ? "nextSibling" : "previousSibling";
|
|
for (e = n ? e : e[o]; e; e = e[o]) if (er(e) || !Rm(e)) return e;
|
|
}
|
|
},
|
|
Sm = (e, t) => !!e.getTextBlockElements()[t.nodeName.toLowerCase()] || Zr(e, t),
|
|
Nm = (e, t, n) => e.schema.isValidChild(t, n),
|
|
Rm = (e, t = !1) => {
|
|
if (C(e) && dr(e)) {
|
|
const n = t ? e.data.replace(/ /g, "\xa0") : e.data;
|
|
return Go(n);
|
|
}
|
|
return !1;
|
|
},
|
|
Am = (e, t) => {
|
|
const n = e.dom;
|
|
return (
|
|
xm(t) &&
|
|
"false" === n.getContentEditable(t) &&
|
|
((e, t) => {
|
|
const n = "[data-mce-cef-wrappable]",
|
|
o = Bd(e),
|
|
r = Xe(o) ? n : `${n},${o}`;
|
|
return En(Cn(t), r);
|
|
})(e, t) &&
|
|
0 === n.select('[contenteditable="true"]', t).length
|
|
);
|
|
},
|
|
Tm = (e, t) => (w(e) ? e(t) : (C(t) && (e = e.replace(/%(\w+)/g, (e, n) => t[n] || e)), e)),
|
|
Om = (e, t) => (
|
|
(t = t || ""),
|
|
(e = "" + ((e = e || "").nodeName || e)),
|
|
(t = "" + (t.nodeName || t)),
|
|
e.toLowerCase() === t.toLowerCase()
|
|
),
|
|
Bm = (e, t) => {
|
|
if (y(e)) return null;
|
|
{
|
|
let n = String(e);
|
|
return (
|
|
("color" !== t && "backgroundColor" !== t) || (n = Ks(n)),
|
|
"fontWeight" === t && 700 === e && (n = "bold"),
|
|
"fontFamily" === t && (n = n.replace(/[\'\"]/g, "").replace(/,\s+/g, ",")),
|
|
n
|
|
);
|
|
}
|
|
},
|
|
Pm = (e, t, n) => {
|
|
const o = e.getStyle(t, n);
|
|
return Bm(o, n);
|
|
},
|
|
Dm = (e, t) => {
|
|
let n;
|
|
return e.getParent(t, t => !!er(t) && ((n = e.getStyle(t, "text-decoration")), !!n && "none" !== n)), n;
|
|
},
|
|
Lm = (e, t, n) => e.getParents(t, n, e.getRoot()),
|
|
Mm = (e, t, n) => {
|
|
const o = e.formatter.get(t);
|
|
return C(o) && $(o, n);
|
|
},
|
|
Im = e => _e(e, "block"),
|
|
Fm = e => _e(e, "selector"),
|
|
Um = e => _e(e, "inline"),
|
|
zm = e => Fm(e) && !1 !== e.expand && !Um(e),
|
|
jm = e =>
|
|
(e => {
|
|
const t = [];
|
|
let n = e;
|
|
for (; n; ) {
|
|
if ((dr(n) && n.data !== Ja) || n.childNodes.length > 1) return [];
|
|
er(n) && t.push(n), (n = n.firstChild);
|
|
}
|
|
return t;
|
|
})(e).length > 0,
|
|
Hm = e => Wu(e.dom) && jm(e.dom),
|
|
$m = sm,
|
|
Vm = Lm,
|
|
qm = Rm,
|
|
Wm = Sm,
|
|
Km = (e, t) => {
|
|
let n = t;
|
|
for (; n; ) {
|
|
if (er(n) && e.getContentEditable(n)) return "false" === e.getContentEditable(n) ? n : t;
|
|
n = n.parentNode;
|
|
}
|
|
return t;
|
|
},
|
|
Ym = (e, t, n, o) => {
|
|
const r = t.data;
|
|
if (e) {
|
|
for (let e = n; e > 0; e--) if (o(r.charAt(e - 1))) return e;
|
|
} else for (let e = n; e < r.length; e++) if (o(r.charAt(e))) return e;
|
|
return -1;
|
|
},
|
|
Gm = (e, t, n) => Ym(e, t, n, e => am(e) || lm(e)),
|
|
Xm = (e, t, n) => Ym(e, t, n, dm),
|
|
Zm = (e, t, n, o, r, s) => {
|
|
let a;
|
|
const i = e.getParent(n, e.isBlock) || t,
|
|
l = (t, n, o) => {
|
|
const s = za(e),
|
|
l = r ? s.backwards : s.forwards;
|
|
return I.from(l(t, n, (e, t) => ($m(e.parentNode) ? -1 : ((a = e), o(r, e, t))), i));
|
|
};
|
|
return l(n, o, Gm)
|
|
.bind(e => (s ? l(e.container, e.offset + (r ? -1 : 0), Xm) : I.some(e)))
|
|
.orThunk(() => (a ? I.some({container: a, offset: r ? 0 : a.length}) : I.none()));
|
|
},
|
|
Qm = (e, t, n, o, r) => {
|
|
const s = o[r];
|
|
dr(o) && Xe(o.data) && s && (o = s);
|
|
const a = Vm(e, o);
|
|
for (let o = 0; o < a.length; o++)
|
|
for (let r = 0; r < t.length; r++) {
|
|
const s = t[r];
|
|
if ((!C(s.collapsed) || s.collapsed === n.collapsed) && Fm(s) && e.is(a[o], s.selector)) return a[o];
|
|
}
|
|
return o;
|
|
},
|
|
Jm = (e, t, n, o) => {
|
|
var r;
|
|
let s = n;
|
|
const a = e.getRoot(),
|
|
i = t[0];
|
|
if ((Im(i) && (s = i.wrapper ? null : e.getParent(n, i.block, a)), !s)) {
|
|
const t = null !== (r = e.getParent(n, "LI,TD,TH,SUMMARY")) && void 0 !== r ? r : a;
|
|
s = e.getParent(dr(n) ? n.parentNode : n, t => t !== a && Wm(e.schema, t), t);
|
|
}
|
|
if ((s && Im(i) && i.wrapper && (s = Vm(e, s, "ul,ol").reverse()[0] || s), !s))
|
|
for (s = n; s && s[o] && !e.isBlock(s[o]) && ((s = s[o]), !Om(s, "br")); );
|
|
return s || n;
|
|
},
|
|
ef = (e, t, n, o) => {
|
|
const r = n.parentNode;
|
|
return !C(n[o]) && (!(r !== t && !y(r) && !e.isBlock(r)) || ef(e, t, r, o));
|
|
},
|
|
tf = (e, t, n, o, r) => {
|
|
let s = n;
|
|
const a = r ? "previousSibling" : "nextSibling",
|
|
i = e.getRoot();
|
|
if (dr(n) && !qm(n) && (r ? o > 0 : o < n.data.length)) return n;
|
|
for (; s; ) {
|
|
if (!t[0].block_expand && e.isBlock(s)) return s;
|
|
for (let t = s[a]; t; t = t[a]) {
|
|
const n = dr(t) && !ef(e, i, t, a);
|
|
if (!$m(t) && (!pr((l = t)) || !l.getAttribute("data-mce-bogus") || l.nextSibling) && !qm(t, n)) return s;
|
|
}
|
|
if (s === i || s.parentNode === i) {
|
|
n = s;
|
|
break;
|
|
}
|
|
s = s.parentNode;
|
|
}
|
|
var l;
|
|
return n;
|
|
},
|
|
nf = e => $m(e.parentNode) || $m(e),
|
|
of = (e, t, n, o = !1) => {
|
|
let {startContainer: r, startOffset: s, endContainer: a, endOffset: i} = t;
|
|
const l = n[0];
|
|
return (
|
|
er(r) && r.hasChildNodes() && ((r = xi(r, s)), dr(r) && (s = 0)),
|
|
er(a) && a.hasChildNodes() && ((a = xi(a, t.collapsed ? i : i - 1)), dr(a) && (i = a.data.length)),
|
|
(r = Km(e, r)),
|
|
(a = Km(e, a)),
|
|
nf(r) &&
|
|
((r = $m(r) ? r : r.parentNode),
|
|
(r = t.collapsed ? r.previousSibling || r : r.nextSibling || r),
|
|
dr(r) && (s = t.collapsed ? r.length : 0)),
|
|
nf(a) &&
|
|
((a = $m(a) ? a : a.parentNode),
|
|
(a = t.collapsed ? a.nextSibling || a : a.previousSibling || a),
|
|
dr(a) && (i = t.collapsed ? 0 : a.length)),
|
|
t.collapsed &&
|
|
(Zm(e, e.getRoot(), r, s, !0, o).each(({container: e, offset: t}) => {
|
|
(r = e), (s = t);
|
|
}),
|
|
Zm(e, e.getRoot(), a, i, !1, o).each(({container: e, offset: t}) => {
|
|
(a = e), (i = t);
|
|
})),
|
|
(Um(l) || l.block_expand) &&
|
|
((Um(l) && dr(r) && 0 !== s) || (r = tf(e, n, r, s, !0)),
|
|
(Um(l) && dr(a) && i !== a.data.length) || (a = tf(e, n, a, i, !1))),
|
|
zm(l) && ((r = Qm(e, n, t, r, "previousSibling")), (a = Qm(e, n, t, a, "nextSibling"))),
|
|
(Im(l) || Fm(l)) &&
|
|
((r = Jm(e, n, r, "previousSibling")),
|
|
(a = Jm(e, n, a, "nextSibling")),
|
|
Im(l) &&
|
|
(e.isBlock(r) || ((r = tf(e, n, r, s, !0)), dr(r) && (s = 0)),
|
|
e.isBlock(a) || ((a = tf(e, n, a, i, !1)), dr(a) && (i = a.data.length)))),
|
|
er(r) && r.parentNode && ((s = e.nodeIndex(r)), (r = r.parentNode)),
|
|
er(a) && a.parentNode && ((i = e.nodeIndex(a) + 1), (a = a.parentNode)),
|
|
{startContainer: r, startOffset: s, endContainer: a, endOffset: i}
|
|
);
|
|
},
|
|
rf = (e, t, n) => {
|
|
var o;
|
|
const r = t.startOffset,
|
|
s = xi(t.startContainer, r),
|
|
a = t.endOffset,
|
|
i = xi(t.endContainer, a - 1),
|
|
l = e => {
|
|
const t = e[0];
|
|
dr(t) && t === s && r >= t.data.length && e.splice(0, 1);
|
|
const n = e[e.length - 1];
|
|
return 0 === a && e.length > 0 && n === i && dr(n) && e.splice(e.length - 1, 1), e;
|
|
},
|
|
d = (e, t, n) => {
|
|
const o = [];
|
|
for (; e && e !== n; e = e[t]) o.push(e);
|
|
return o;
|
|
},
|
|
c = (t, n) => e.getParent(t, e => e.parentNode === n, n),
|
|
u = (e, t, o) => {
|
|
const r = o ? "nextSibling" : "previousSibling";
|
|
for (let s = e, a = s.parentNode; s && s !== t; s = a) {
|
|
a = s.parentNode;
|
|
const t = d(s === e ? s : s[r], r);
|
|
t.length && (o || t.reverse(), n(l(t)));
|
|
}
|
|
};
|
|
if (s === i) return n(l([s]));
|
|
const m = null !== (o = e.findCommonAncestor(s, i)) && void 0 !== o ? o : e.getRoot();
|
|
if (e.isChildOf(s, i)) return u(s, m, !0);
|
|
if (e.isChildOf(i, s)) return u(i, m);
|
|
const f = c(s, m) || s,
|
|
g = c(i, m) || i;
|
|
u(s, f, !0);
|
|
const p = d(f === s ? f : f.nextSibling, "nextSibling", g === i ? g.nextSibling : g);
|
|
p.length && n(l(p)), u(i, g);
|
|
},
|
|
sf = [
|
|
'pre[class*=language-][contenteditable="false"]',
|
|
"figure.image",
|
|
"div[data-ephox-embed-iri]",
|
|
"div.tiny-pageembed",
|
|
"div.mce-toc",
|
|
"div[data-mce-toc]"
|
|
],
|
|
af = (e, t, n, o, r, s) => {
|
|
const {uid: a = t, ...i} = n;
|
|
mn(e, Ea()), Jt(e, `${_a()}`, a), Jt(e, `${ka()}`, o);
|
|
const {attributes: l = {}, classes: d = []} = r(a, i);
|
|
if (
|
|
(en(e, l),
|
|
((e, t) => {
|
|
q(t, t => {
|
|
mn(e, t);
|
|
});
|
|
})(e, d),
|
|
s)
|
|
) {
|
|
d.length > 0 && Jt(e, `${Na()}`, d.join(","));
|
|
const t = fe(l);
|
|
t.length > 0 && Jt(e, `${Ra()}`, t.join(","));
|
|
}
|
|
},
|
|
lf = (e, t, n, o, r) => {
|
|
const s = vn("span", e);
|
|
return af(s, t, n, o, r, !1), s;
|
|
},
|
|
df = (e, t, n, o, r, s) => {
|
|
const a = [],
|
|
i = lf(e.getDoc(), n, s, o, r),
|
|
l = Dr(),
|
|
d = () => {
|
|
l.clear();
|
|
},
|
|
c = e => {
|
|
q(e, u);
|
|
},
|
|
u = t => {
|
|
switch (
|
|
((e, t, n, o) =>
|
|
Tn(t).fold(
|
|
() => "skipping",
|
|
r =>
|
|
"br" === o || (e => Yt(e) && Ha(e) === Ja)(t)
|
|
? "valid"
|
|
: (e => Kt(e) && pn(e, Ea()))(t)
|
|
? "existing"
|
|
: Wu(t.dom)
|
|
? "caret"
|
|
: $(sf, e => En(t, e))
|
|
? "valid-block"
|
|
: Nm(e, n, o) && Nm(e, $t(r), n)
|
|
? "valid"
|
|
: "invalid-child"
|
|
))(e, t, "span", $t(t))
|
|
) {
|
|
case "invalid-child": {
|
|
d();
|
|
const e = In(t);
|
|
c(e), d();
|
|
break;
|
|
}
|
|
case "valid-block":
|
|
d(), af(t, n, s, o, r, !0);
|
|
break;
|
|
case "valid": {
|
|
const e = l.get().getOrThunk(() => {
|
|
const e = Ia(i);
|
|
return a.push(e), l.set(e), e;
|
|
});
|
|
Co(t, e);
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
return (
|
|
rf(e.dom, t, e => {
|
|
d(),
|
|
(e => {
|
|
const t = V(e, Cn);
|
|
c(t);
|
|
})(e);
|
|
}),
|
|
a
|
|
);
|
|
},
|
|
cf = e => {
|
|
const t = (() => {
|
|
const e = {};
|
|
return {
|
|
register: (t, n) => {
|
|
e[t] = {name: t, settings: n};
|
|
},
|
|
lookup: t => Ee(e, t).map(e => e.settings),
|
|
getNames: () => fe(e)
|
|
};
|
|
})();
|
|
((e, t) => {
|
|
const n = ka(),
|
|
o = e => I.from(e.attr(n)).bind(t.lookup),
|
|
r = e => {
|
|
var t, n;
|
|
e.attr(_a(), null), e.attr(ka(), null), e.attr(Sa(), null);
|
|
const o = I.from(e.attr(Ra()))
|
|
.map(e => e.split(","))
|
|
.getOr([]),
|
|
r = I.from(e.attr(Na()))
|
|
.map(e => e.split(","))
|
|
.getOr([]);
|
|
q(o, t => e.attr(t, null));
|
|
const s =
|
|
null !== (n = null === (t = e.attr("class")) || void 0 === t ? void 0 : t.split(" ")) && void 0 !== n
|
|
? n
|
|
: [],
|
|
a = re(s, [Ea()].concat(r));
|
|
e.attr("class", a.length > 0 ? a.join(" ") : null), e.attr(Na(), null), e.attr(Ra(), null);
|
|
};
|
|
e.serializer.addTempAttr(Sa()),
|
|
e.serializer.addAttributeFilter(n, e => {
|
|
for (const t of e)
|
|
o(t).each(e => {
|
|
!1 === e.persistent && ("span" === t.name ? t.unwrap() : r(t));
|
|
});
|
|
});
|
|
})(e, t);
|
|
const n = ((e, t) => {
|
|
const n = Br({}),
|
|
o = () => ({listeners: [], previous: Dr()}),
|
|
r = (e, t) => {
|
|
s(e, e => (t(e), e));
|
|
},
|
|
s = (e, t) => {
|
|
const r = n.get(),
|
|
s = t(Ee(r, e).getOrThunk(o));
|
|
(r[e] = s), n.set(r);
|
|
},
|
|
a = (t, n) => {
|
|
q(Ba(e, t), e => {
|
|
n ? Jt(e, Sa(), "true") : rn(e, Sa());
|
|
});
|
|
},
|
|
i = xa(() => {
|
|
const n = ae(t.getNames());
|
|
q(n, t => {
|
|
s(t, n => {
|
|
const o = n.previous.get();
|
|
return (
|
|
Ta(e, I.some(t)).fold(
|
|
() => {
|
|
o.each(e => {
|
|
(e => {
|
|
r(e, t => {
|
|
q(t.listeners, t => t(!1, e));
|
|
});
|
|
})(t),
|
|
n.previous.clear(),
|
|
a(e, !1);
|
|
});
|
|
},
|
|
({uid: e, name: t, elements: s}) => {
|
|
Lt(o, e) ||
|
|
(o.each(e => a(e, !1)),
|
|
((e, t, n) => {
|
|
r(e, o => {
|
|
q(o.listeners, o => o(!0, e, {uid: t, nodes: V(n, e => e.dom)}));
|
|
});
|
|
})(t, e, s),
|
|
n.previous.set(e),
|
|
a(e, !0));
|
|
}
|
|
),
|
|
{previous: n.previous, listeners: n.listeners}
|
|
);
|
|
});
|
|
});
|
|
}, 30);
|
|
return (
|
|
e.on("remove", () => {
|
|
i.cancel();
|
|
}),
|
|
e.on("NodeChange", () => {
|
|
i.throttle();
|
|
}),
|
|
{
|
|
addListener: (e, t) => {
|
|
s(e, e => ({previous: e.previous, listeners: e.listeners.concat([t])}));
|
|
}
|
|
}
|
|
);
|
|
})(e, t),
|
|
o = Zt("span"),
|
|
r = e => {
|
|
q(e, e => {
|
|
o(e)
|
|
? ko(e)
|
|
: (e => {
|
|
gn(e, Ea()), rn(e, `${_a()}`), rn(e, `${ka()}`), rn(e, `${Sa()}`);
|
|
const t = nn(e, `${Ra()}`)
|
|
.map(e => e.split(","))
|
|
.getOr([]),
|
|
n = nn(e, `${Na()}`)
|
|
.map(e => e.split(","))
|
|
.getOr([]);
|
|
var o;
|
|
q(t, t => rn(e, t)),
|
|
(o = e),
|
|
q(n, e => {
|
|
gn(o, e);
|
|
}),
|
|
rn(e, `${Na()}`),
|
|
rn(e, `${Ra()}`);
|
|
})(e);
|
|
});
|
|
};
|
|
return {
|
|
register: (e, n) => {
|
|
t.register(e, n);
|
|
},
|
|
annotate: (n, o) => {
|
|
t.lookup(n).each(t => {
|
|
((e, t, n, o) => {
|
|
e.undoManager.transact(() => {
|
|
const r = e.selection,
|
|
s = r.getRng(),
|
|
a = mm(e).length > 0,
|
|
i = La("mce-annotation");
|
|
if (
|
|
(s.collapsed &&
|
|
!a &&
|
|
((e, t) => {
|
|
const n = of(e.dom, t, [{inline: "span"}]);
|
|
t.setStart(n.startContainer, n.startOffset),
|
|
t.setEnd(n.endContainer, n.endOffset),
|
|
e.selection.setRng(t);
|
|
})(e, s),
|
|
r.getRng().collapsed && !a)
|
|
) {
|
|
const s = lf(e.getDoc(), i, o, t, n.decorate);
|
|
No(s, Wo), r.getRng().insertNode(s.dom), r.select(s.dom);
|
|
} else
|
|
Cm(r, !1, () => {
|
|
ym(e, r => {
|
|
df(e, r, i, t, n.decorate, o);
|
|
});
|
|
});
|
|
});
|
|
})(e, n, t, o);
|
|
});
|
|
},
|
|
annotationChanged: (e, t) => {
|
|
n.addListener(e, t);
|
|
},
|
|
remove: t => {
|
|
Ta(e, I.some(t)).each(({elements: t}) => {
|
|
const n = e.selection.getBookmark();
|
|
r(t), e.selection.moveToBookmark(n);
|
|
});
|
|
},
|
|
removeAll: t => {
|
|
const n = e.selection.getBookmark();
|
|
pe(Pa(e, t), (e, t) => {
|
|
r(e);
|
|
}),
|
|
e.selection.moveToBookmark(n);
|
|
},
|
|
getAll: t => {
|
|
const n = Pa(e, t);
|
|
return he(n, e => V(e, e => e.dom));
|
|
}
|
|
};
|
|
},
|
|
uf = e => ({getBookmark: T(om, e), moveToBookmark: T(rm, e)});
|
|
uf.isBookmarkNode = sm;
|
|
const mf = (e, t, n) =>
|
|
!n.collapsed &&
|
|
$(n.getClientRects(), n => ((e, t, n) => t >= e.left && t <= e.right && n >= e.top && n <= e.bottom)(n, e, t)),
|
|
ff = (e, t, n) => {
|
|
e.dispatch(t, n);
|
|
},
|
|
gf = (e, t, n, o) => {
|
|
e.dispatch("FormatApply", {format: t, node: n, vars: o});
|
|
},
|
|
pf = (e, t, n, o) => {
|
|
e.dispatch("FormatRemove", {format: t, node: n, vars: o});
|
|
},
|
|
hf = (e, t) => e.dispatch("SetContent", t),
|
|
bf = (e, t) => e.dispatch("GetContent", t),
|
|
vf = (e, t) => {
|
|
e.dispatch("AutocompleterUpdateActiveRange", t);
|
|
},
|
|
yf = (e, t) => e.dispatch("PastePlainTextToggle", {state: t}),
|
|
Cf = {
|
|
BACKSPACE: 8,
|
|
DELETE: 46,
|
|
DOWN: 40,
|
|
ENTER: 13,
|
|
ESC: 27,
|
|
LEFT: 37,
|
|
RIGHT: 39,
|
|
SPACEBAR: 32,
|
|
TAB: 9,
|
|
UP: 38,
|
|
PAGE_UP: 33,
|
|
PAGE_DOWN: 34,
|
|
END: 35,
|
|
HOME: 36,
|
|
modifierPressed: e => e.shiftKey || e.ctrlKey || e.altKey || Cf.metaKeyPressed(e),
|
|
metaKeyPressed: e => (Tt.os.isMacOS() || Tt.os.isiOS() ? e.metaKey : e.ctrlKey && !e.altKey)
|
|
},
|
|
wf = "data-mce-selected",
|
|
xf = Math.abs,
|
|
Ef = Math.round,
|
|
kf = {nw: [0, 0, -1, -1], ne: [1, 0, 1, -1], se: [1, 1, 1, 1], sw: [0, 1, -1, 1]},
|
|
_f = (e, t) => {
|
|
const n = t.dom,
|
|
o = t.getDoc(),
|
|
r = document,
|
|
s = t.getBody();
|
|
let a, i, l, d, c, u, m, f, g, p, h, b, v, y, w;
|
|
const x = e => C(e) && (hr(e) || n.is(e, "figure.image")),
|
|
E = e => wr(e) || n.hasClass(e, "mce-preview-object"),
|
|
k = e => {
|
|
const n = e.target;
|
|
((e, t) => {
|
|
if ((e => "longpress" === e.type || 0 === e.type.indexOf("touch"))(e)) {
|
|
const n = e.touches[0];
|
|
return x(e.target) && !mf(n.clientX, n.clientY, t);
|
|
}
|
|
return x(e.target) && !mf(e.clientX, e.clientY, t);
|
|
})(e, t.selection.getRng()) &&
|
|
!e.isDefaultPrevented() &&
|
|
t.selection.select(n);
|
|
},
|
|
_ = e =>
|
|
n.hasClass(e, "mce-preview-object") && C(e.firstElementChild)
|
|
? [e, e.firstElementChild]
|
|
: n.is(e, "figure.image")
|
|
? [e.querySelector("img")]
|
|
: [e],
|
|
S = e => {
|
|
const o = yd(t);
|
|
return (
|
|
!!o &&
|
|
"false" !== e.getAttribute("data-mce-resize") &&
|
|
e !== t.getBody() &&
|
|
(n.hasClass(e, "mce-preview-object") && C(e.firstElementChild)
|
|
? En(Cn(e.firstElementChild), o)
|
|
: En(Cn(e), o))
|
|
);
|
|
},
|
|
N = (e, o, r) => {
|
|
if (C(r)) {
|
|
const s = _(e);
|
|
q(s, e => {
|
|
e.style[o] || !t.schema.isValid(e.nodeName.toLowerCase(), o)
|
|
? n.setStyle(e, o, r)
|
|
: n.setAttrib(e, o, "" + r);
|
|
});
|
|
}
|
|
},
|
|
R = (e, t, n) => {
|
|
N(e, "width", t), N(e, "height", n);
|
|
},
|
|
A = e => {
|
|
let o, r, c, C, k;
|
|
(o = e.screenX - u),
|
|
(r = e.screenY - m),
|
|
(b = o * d[2] + f),
|
|
(v = r * d[3] + g),
|
|
(b = b < 5 ? 5 : b),
|
|
(v = v < 5 ? 5 : v),
|
|
(c = (x(a) || E(a)) && !1 !== Cd(t) ? !Cf.modifierPressed(e) : Cf.modifierPressed(e)),
|
|
c && (xf(o) > xf(r) ? ((v = Ef(b * p)), (b = Ef(v / p))) : ((b = Ef(v / p)), (v = Ef(b * p)))),
|
|
R(i, b, v),
|
|
(C = d.startPos.x + o),
|
|
(k = d.startPos.y + r),
|
|
(C = C > 0 ? C : 0),
|
|
(k = k > 0 ? k : 0),
|
|
n.setStyles(l, {left: C, top: k, display: "block"}),
|
|
(l.innerHTML = b + " × " + v),
|
|
d[2] < 0 && i.clientWidth <= b && n.setStyle(i, "left", void 0 + (f - b)),
|
|
d[3] < 0 && i.clientHeight <= v && n.setStyle(i, "top", void 0 + (g - v)),
|
|
(o = s.scrollWidth - y),
|
|
(r = s.scrollHeight - w),
|
|
o + r !== 0 && n.setStyles(l, {left: C - o, top: k - r}),
|
|
h ||
|
|
(((e, t, n, o, r) => {
|
|
e.dispatch("ObjectResizeStart", {target: t, width: n, height: o, origin: r});
|
|
})(t, a, f, g, "corner-" + d.name),
|
|
(h = !0));
|
|
},
|
|
T = () => {
|
|
const e = h;
|
|
(h = !1),
|
|
e && (N(a, "width", b), N(a, "height", v)),
|
|
n.unbind(o, "mousemove", A),
|
|
n.unbind(o, "mouseup", T),
|
|
r !== o && (n.unbind(r, "mousemove", A), n.unbind(r, "mouseup", T)),
|
|
n.remove(i),
|
|
n.remove(l),
|
|
n.remove(c),
|
|
O(a),
|
|
e &&
|
|
(((e, t, n, o, r) => {
|
|
e.dispatch("ObjectResized", {target: t, width: n, height: o, origin: r});
|
|
})(t, a, b, v, "corner-" + d.name),
|
|
n.setAttrib(a, "style", n.getAttrib(a, "style"))),
|
|
t.nodeChanged();
|
|
},
|
|
O = e => {
|
|
M();
|
|
const h = n.getPos(e, s),
|
|
C = h.x,
|
|
x = h.y,
|
|
k = e.getBoundingClientRect(),
|
|
N = k.width || k.right - k.left,
|
|
O = k.height || k.bottom - k.top;
|
|
a !== e && (P(), (a = e), (b = v = 0));
|
|
const B = t.dispatch("ObjectSelected", {target: e});
|
|
S(e) && !B.isDefaultPrevented()
|
|
? pe(kf, (e, t) => {
|
|
let h = n.get("mceResizeHandle" + t);
|
|
h && n.remove(h),
|
|
(h = n.add(s, "div", {
|
|
id: "mceResizeHandle" + t,
|
|
"data-mce-bogus": "all",
|
|
class: "mce-resizehandle",
|
|
unselectable: !0,
|
|
style: "cursor:" + t + "-resize; margin:0; padding:0"
|
|
})),
|
|
n.bind(h, "mousedown", h => {
|
|
h.stopImmediatePropagation(),
|
|
h.preventDefault(),
|
|
(h => {
|
|
const b = _(a)[0];
|
|
(u = h.screenX),
|
|
(m = h.screenY),
|
|
(f = b.clientWidth),
|
|
(g = b.clientHeight),
|
|
(p = g / f),
|
|
(d = e),
|
|
(d.name = t),
|
|
(d.startPos = {x: N * e[0] + C, y: O * e[1] + x}),
|
|
(y = s.scrollWidth),
|
|
(w = s.scrollHeight),
|
|
(c = n.add(s, "div", {class: "mce-resize-backdrop", "data-mce-bogus": "all"})),
|
|
n.setStyles(c, {position: "fixed", left: "0", top: "0", width: "100%", height: "100%"}),
|
|
(i = ((e, t) => {
|
|
if (E(t)) return e.create("img", {src: Tt.transparentSrc});
|
|
if (ar(t)) {
|
|
const n = $e(d.name, "n") ? le : de,
|
|
o = t.cloneNode(!0);
|
|
return (
|
|
n(e.select("tr", o)).each(t => {
|
|
const n = e.select("td,th", t);
|
|
e.setStyle(t, "height", null), q(n, t => e.setStyle(t, "height", null));
|
|
}),
|
|
o
|
|
);
|
|
}
|
|
return t.cloneNode(!0);
|
|
})(n, a)),
|
|
n.addClass(i, "mce-clonedresizable"),
|
|
n.setAttrib(i, "data-mce-bogus", "all"),
|
|
(i.contentEditable = "false"),
|
|
n.setStyles(i, {left: C, top: x, margin: 0}),
|
|
R(i, N, O),
|
|
i.removeAttribute(wf),
|
|
s.appendChild(i),
|
|
n.bind(o, "mousemove", A),
|
|
n.bind(o, "mouseup", T),
|
|
r !== o && (n.bind(r, "mousemove", A), n.bind(r, "mouseup", T)),
|
|
(l = n.add(
|
|
s,
|
|
"div",
|
|
{class: "mce-resize-helper", "data-mce-bogus": "all"},
|
|
f + " × " + g
|
|
));
|
|
})(h);
|
|
}),
|
|
(e.elm = h),
|
|
n.setStyles(h, {left: N * e[0] + C - h.offsetWidth / 2, top: O * e[1] + x - h.offsetHeight / 2});
|
|
})
|
|
: P(!1);
|
|
},
|
|
B = wa(O, 0),
|
|
P = (e = !0) => {
|
|
B.cancel(),
|
|
M(),
|
|
a && e && a.removeAttribute(wf),
|
|
pe(kf, (e, t) => {
|
|
const o = n.get("mceResizeHandle" + t);
|
|
o && (n.unbind(o), n.remove(o));
|
|
});
|
|
},
|
|
D = (e, t) => n.isChildOf(e, t),
|
|
L = o => {
|
|
if (h || t.removed || t.composing) return;
|
|
const r = "mousedown" === o.type ? o.target : e.getNode(),
|
|
a = oo(Cn(r), "table,img,figure.image,hr,video,span.mce-preview-object,details")
|
|
.map(e => e.dom)
|
|
.filter(e => n.isEditable(e.parentElement) || ("IMG" === e.nodeName && n.isEditable(e)))
|
|
.getOrUndefined(),
|
|
i = C(a) ? n.getAttrib(a, wf, "1") : "1";
|
|
if (
|
|
(q(n.select(`img[${wf}],hr[${wf}]`), e => {
|
|
e.removeAttribute(wf);
|
|
}),
|
|
C(a) && D(a, s) && t.hasFocus())
|
|
) {
|
|
I();
|
|
const t = e.getStart(!0);
|
|
if (D(t, a) && D(e.getEnd(!0), a)) return n.setAttrib(a, wf, i), void B.throttle(a);
|
|
}
|
|
P();
|
|
},
|
|
M = () => {
|
|
pe(kf, e => {
|
|
e.elm && (n.unbind(e.elm), delete e.elm);
|
|
});
|
|
},
|
|
I = () => {
|
|
try {
|
|
t.getDoc().execCommand("enableObjectResizing", !1, "false");
|
|
} catch (e) {}
|
|
};
|
|
return (
|
|
t.on("init", () => {
|
|
I(),
|
|
t.on("NodeChange ResizeEditor ResizeWindow ResizeContent drop", L),
|
|
t.on("keyup compositionend", e => {
|
|
a && "TABLE" === a.nodeName && L(e);
|
|
}),
|
|
t.on("hide blur", P),
|
|
t.on("contextmenu longpress", k, !0);
|
|
}),
|
|
t.on("remove", M),
|
|
{
|
|
isResizable: S,
|
|
showResizeRect: O,
|
|
hideResizeRect: P,
|
|
updateResizeRect: L,
|
|
destroy: () => {
|
|
B.cancel(), (a = i = c = null);
|
|
}
|
|
}
|
|
);
|
|
},
|
|
Sf = (e, t, n) => {
|
|
const o = e.document.createRange();
|
|
var r;
|
|
return (
|
|
(r = o),
|
|
t.fold(
|
|
e => {
|
|
r.setStartBefore(e.dom);
|
|
},
|
|
(e, t) => {
|
|
r.setStart(e.dom, t);
|
|
},
|
|
e => {
|
|
r.setStartAfter(e.dom);
|
|
}
|
|
),
|
|
((e, t) => {
|
|
t.fold(
|
|
t => {
|
|
e.setEndBefore(t.dom);
|
|
},
|
|
(t, n) => {
|
|
e.setEnd(t.dom, n);
|
|
},
|
|
t => {
|
|
e.setEndAfter(t.dom);
|
|
}
|
|
);
|
|
})(o, n),
|
|
o
|
|
);
|
|
},
|
|
Nf = (e, t, n, o, r) => {
|
|
const s = e.document.createRange();
|
|
return s.setStart(t.dom, n), s.setEnd(o.dom, r), s;
|
|
},
|
|
Rf = kl([{ltr: ["start", "soffset", "finish", "foffset"]}, {rtl: ["start", "soffset", "finish", "foffset"]}]),
|
|
Af = (e, t, n) => t(Cn(n.startContainer), n.startOffset, Cn(n.endContainer), n.endOffset);
|
|
Rf.ltr, Rf.rtl;
|
|
const Tf = (e, t, n, o) => ({start: e, soffset: t, finish: n, foffset: o}),
|
|
Of = document.caretPositionFromPoint
|
|
? (e, t, n) => {
|
|
var o, r;
|
|
return I.from(
|
|
null === (r = (o = e.dom).caretPositionFromPoint) || void 0 === r ? void 0 : r.call(o, t, n)
|
|
).bind(t => {
|
|
if (null === t.offsetNode) return I.none();
|
|
const n = e.dom.createRange();
|
|
return n.setStart(t.offsetNode, t.offset), n.collapse(), I.some(n);
|
|
});
|
|
}
|
|
: document.caretRangeFromPoint
|
|
? (e, t, n) => {
|
|
var o, r;
|
|
return I.from(null === (r = (o = e.dom).caretRangeFromPoint) || void 0 === r ? void 0 : r.call(o, t, n));
|
|
}
|
|
: I.none,
|
|
Bf = kl([{before: ["element"]}, {on: ["element", "offset"]}, {after: ["element"]}]),
|
|
Pf = {
|
|
before: Bf.before,
|
|
on: Bf.on,
|
|
after: Bf.after,
|
|
cata: (e, t, n, o) => e.fold(t, n, o),
|
|
getStart: e => e.fold(R, R, R)
|
|
},
|
|
Df = kl([
|
|
{domRange: ["rng"]},
|
|
{relative: ["startSitu", "finishSitu"]},
|
|
{exact: ["start", "soffset", "finish", "foffset"]}
|
|
]),
|
|
Lf = {
|
|
domRange: Df.domRange,
|
|
relative: Df.relative,
|
|
exact: Df.exact,
|
|
exactFromRange: e => Df.exact(e.start, e.soffset, e.finish, e.foffset),
|
|
getWin: e => {
|
|
const t = (e =>
|
|
e.match({domRange: e => Cn(e.startContainer), relative: (e, t) => Pf.getStart(e), exact: (e, t, n, o) => e}))(
|
|
e
|
|
);
|
|
return An(t);
|
|
},
|
|
range: Tf
|
|
},
|
|
Mf = (e, t) => {
|
|
const n = $t(e);
|
|
return "input" === n ? Pf.after(e) : H(["br", "img"], n) ? (0 === t ? Pf.before(e) : Pf.after(e)) : Pf.on(e, t);
|
|
},
|
|
If = (e, t) => {
|
|
const n = e.fold(Pf.before, Mf, Pf.after),
|
|
o = t.fold(Pf.before, Mf, Pf.after);
|
|
return Lf.relative(n, o);
|
|
},
|
|
Ff = (e, t, n, o) => {
|
|
const r = Mf(e, t),
|
|
s = Mf(n, o);
|
|
return Lf.relative(r, s);
|
|
},
|
|
Uf = (e, t) => {
|
|
const n = (t || document).createDocumentFragment();
|
|
return (
|
|
q(e, e => {
|
|
n.appendChild(e.dom);
|
|
}),
|
|
Cn(n)
|
|
);
|
|
},
|
|
zf = e => {
|
|
const t = Lf.getWin(e).dom,
|
|
n = (e, n, o, r) => Nf(t, e, n, o, r),
|
|
o = (e =>
|
|
e.match({
|
|
domRange: e => {
|
|
const t = Cn(e.startContainer),
|
|
n = Cn(e.endContainer);
|
|
return Ff(t, e.startOffset, n, e.endOffset);
|
|
},
|
|
relative: If,
|
|
exact: Ff
|
|
}))(e);
|
|
return ((e, t) => {
|
|
const n = ((e, t) =>
|
|
t.match({
|
|
domRange: e => ({ltr: N(e), rtl: I.none}),
|
|
relative: (t, n) => ({ltr: Le(() => Sf(e, t, n)), rtl: Le(() => I.some(Sf(e, n, t)))}),
|
|
exact: (t, n, o, r) => ({ltr: Le(() => Nf(e, t, n, o, r)), rtl: Le(() => I.some(Nf(e, o, r, t, n)))})
|
|
}))(e, t);
|
|
return ((e, t) => {
|
|
const n = t.ltr();
|
|
return n.collapsed
|
|
? t
|
|
.rtl()
|
|
.filter(e => !1 === e.collapsed)
|
|
.map(e => Rf.rtl(Cn(e.endContainer), e.endOffset, Cn(e.startContainer), e.startOffset))
|
|
.getOrThunk(() => Af(0, Rf.ltr, n))
|
|
: Af(0, Rf.ltr, n);
|
|
})(0, n);
|
|
})(t, o).match({ltr: n, rtl: n});
|
|
},
|
|
jf = (e, t, n) =>
|
|
((e, t, n) =>
|
|
((e, t, n) => {
|
|
const o = Cn(e.document);
|
|
return Of(o, t, n).map(e => Tf(Cn(e.startContainer), e.startOffset, Cn(e.endContainer), e.endOffset));
|
|
})(e, t, n))(An(Cn(n)).dom, e, t)
|
|
.map(e => {
|
|
const t = n.createRange();
|
|
return t.setStart(e.start.dom, e.soffset), t.setEnd(e.finish.dom, e.foffset), t;
|
|
})
|
|
.getOrUndefined(),
|
|
Hf = (e, t) =>
|
|
C(e) &&
|
|
C(t) &&
|
|
e.startContainer === t.startContainer &&
|
|
e.startOffset === t.startOffset &&
|
|
e.endContainer === t.endContainer &&
|
|
e.endOffset === t.endOffset,
|
|
$f = (e, t, n) =>
|
|
null !==
|
|
((e, t, n) => {
|
|
let o = e;
|
|
for (; o && o !== t; ) {
|
|
if (n(o)) return o;
|
|
o = o.parentNode;
|
|
}
|
|
return null;
|
|
})(e, t, n),
|
|
Vf = (e, t, n) => $f(e, t, e => e.nodeName === n),
|
|
qf = (e, t) => ai(e) && !$f(e, t, Wu),
|
|
Wf = (e, t, n) => {
|
|
const o = t.parentNode;
|
|
if (o) {
|
|
const r = new Vo(t, e.getParent(o, e.isBlock) || e.getRoot());
|
|
let s;
|
|
for (; (s = r[n ? "prev" : "next"]()); ) if (pr(s)) return !0;
|
|
}
|
|
return !1;
|
|
},
|
|
Kf = (e, t, n, o, r) => {
|
|
const s = e.getRoot(),
|
|
a = e.schema.getNonEmptyElements(),
|
|
i = r.parentNode;
|
|
let l, d;
|
|
if (!i) return I.none();
|
|
const c = e.getParent(i, e.isBlock) || s;
|
|
if (o && pr(r) && t && e.isEmpty(c)) return I.some(Ji(i, e.nodeIndex(r)));
|
|
const u = new Vo(r, c);
|
|
for (; (d = u[o ? "prev" : "next"]()); ) {
|
|
if ("false" === e.getContentEditableParent(d) || qf(d, s)) return I.none();
|
|
if (dr(d) && d.data.length > 0) return Vf(d, s, "A") ? I.none() : I.some(Ji(d, o ? d.data.length : 0));
|
|
if (e.isBlock(d) || a[d.nodeName.toLowerCase()]) return I.none();
|
|
l = d;
|
|
}
|
|
return mr(l) ? I.none() : n && l ? I.some(Ji(l, 0)) : I.none();
|
|
},
|
|
Yf = (e, t, n, o) => {
|
|
const r = e.getRoot();
|
|
let s,
|
|
a = !1,
|
|
i = n ? o.startContainer : o.endContainer,
|
|
l = n ? o.startOffset : o.endOffset;
|
|
const d = er(i) && l === i.childNodes.length,
|
|
c = e.schema.getNonEmptyElements();
|
|
let u = n;
|
|
if (ai(i)) return I.none();
|
|
if ((er(i) && l > i.childNodes.length - 1 && (u = !1), fr(i) && ((i = r), (l = 0)), i === r)) {
|
|
if (u && ((s = i.childNodes[l > 0 ? l - 1 : 0]), s)) {
|
|
if (ai(s)) return I.none();
|
|
if (c[s.nodeName] || ar(s)) return I.none();
|
|
}
|
|
if (i.hasChildNodes()) {
|
|
if (
|
|
((l = Math.min(!u && l > 0 ? l - 1 : l, i.childNodes.length - 1)),
|
|
(i = i.childNodes[l]),
|
|
(l = dr(i) && d ? i.data.length : 0),
|
|
!t && i === r.lastChild && ar(i))
|
|
)
|
|
return I.none();
|
|
if (
|
|
((e, t) => {
|
|
let n = t;
|
|
for (; n && n !== e; ) {
|
|
if (vr(n)) return !0;
|
|
n = n.parentNode;
|
|
}
|
|
return !1;
|
|
})(r, i) ||
|
|
ai(i)
|
|
)
|
|
return I.none();
|
|
if (Er(i)) return I.none();
|
|
if (i.hasChildNodes() && !ar(i)) {
|
|
s = i;
|
|
const t = new Vo(i, r);
|
|
do {
|
|
if (vr(s) || ai(s)) {
|
|
a = !1;
|
|
break;
|
|
}
|
|
if (dr(s) && s.data.length > 0) {
|
|
(l = u ? 0 : s.data.length), (i = s), (a = !0);
|
|
break;
|
|
}
|
|
if (c[s.nodeName.toLowerCase()] && !Cr(s)) {
|
|
(l = e.nodeIndex(s)), (i = s.parentNode), u || l++, (a = !0);
|
|
break;
|
|
}
|
|
} while ((s = u ? t.next() : t.prev()));
|
|
}
|
|
}
|
|
}
|
|
return (
|
|
t &&
|
|
(dr(i) &&
|
|
0 === l &&
|
|
Kf(e, d, t, !0, i).each(e => {
|
|
(i = e.container()), (l = e.offset()), (a = !0);
|
|
}),
|
|
er(i) &&
|
|
((s = i.childNodes[l]),
|
|
s || (s = i.childNodes[l - 1]),
|
|
!s ||
|
|
!pr(s) ||
|
|
((e, t) => {
|
|
var n;
|
|
return "A" === (null === (n = e.previousSibling) || void 0 === n ? void 0 : n.nodeName);
|
|
})(s) ||
|
|
Wf(e, s, !1) ||
|
|
Wf(e, s, !0) ||
|
|
Kf(e, d, t, !0, s).each(e => {
|
|
(i = e.container()), (l = e.offset()), (a = !0);
|
|
}))),
|
|
u &&
|
|
!t &&
|
|
dr(i) &&
|
|
l === i.data.length &&
|
|
Kf(e, d, t, !1, i).each(e => {
|
|
(i = e.container()), (l = e.offset()), (a = !0);
|
|
}),
|
|
a && i ? I.some(Ji(i, l)) : I.none()
|
|
);
|
|
},
|
|
Gf = (e, t) => {
|
|
const n = t.collapsed,
|
|
o = t.cloneRange(),
|
|
r = Ji.fromRangeStart(t);
|
|
return (
|
|
Yf(e, n, !0, o).each(e => {
|
|
(n && Ji.isAbove(r, e)) || o.setStart(e.container(), e.offset());
|
|
}),
|
|
n ||
|
|
Yf(e, n, !1, o).each(e => {
|
|
o.setEnd(e.container(), e.offset());
|
|
}),
|
|
n && o.collapse(!0),
|
|
Hf(t, o) ? I.none() : I.some(o)
|
|
);
|
|
},
|
|
Xf = (e, t) => e.splitText(t),
|
|
Zf = e => {
|
|
let t = e.startContainer,
|
|
n = e.startOffset,
|
|
o = e.endContainer,
|
|
r = e.endOffset;
|
|
if (t === o && dr(t)) {
|
|
if (n > 0 && n < t.data.length)
|
|
if (((o = Xf(t, n)), (t = o.previousSibling), r > n)) {
|
|
r -= n;
|
|
const e = Xf(o, r).previousSibling;
|
|
(t = o = e), (r = e.data.length), (n = 0);
|
|
} else r = 0;
|
|
} else if (
|
|
(dr(t) && n > 0 && n < t.data.length && ((t = Xf(t, n)), (n = 0)), dr(o) && r > 0 && r < o.data.length)
|
|
) {
|
|
const e = Xf(o, r).previousSibling;
|
|
(o = e), (r = e.data.length);
|
|
}
|
|
return {startContainer: t, startOffset: n, endContainer: o, endOffset: r};
|
|
},
|
|
Qf = e => ({
|
|
walk: (t, n) => rf(e, t, n),
|
|
split: Zf,
|
|
expand: (t, n = {type: "word"}) => {
|
|
if ("word" === n.type) {
|
|
const n = of(e, t, [{inline: "span"}]),
|
|
o = e.createRng();
|
|
return o.setStart(n.startContainer, n.startOffset), o.setEnd(n.endContainer, n.endOffset), o;
|
|
}
|
|
return t;
|
|
},
|
|
normalize: t =>
|
|
Gf(e, t).fold(L, e => (t.setStart(e.startContainer, e.startOffset), t.setEnd(e.endContainer, e.endOffset), !0))
|
|
});
|
|
(Qf.compareRanges = Hf), (Qf.getCaretRangeFromPoint = jf), (Qf.getSelectedNode = wi), (Qf.getNode = xi);
|
|
const Jf = ((e, t) => {
|
|
const n = t => {
|
|
const n = (e => {
|
|
const t = e.dom;
|
|
return Xn(e) ? t.getBoundingClientRect().height : t.offsetHeight;
|
|
})(t);
|
|
if (n <= 0 || null === n) {
|
|
const n = uo(t, e);
|
|
return parseFloat(n) || 0;
|
|
}
|
|
return n;
|
|
},
|
|
o = (e, t) =>
|
|
X(
|
|
t,
|
|
(t, n) => {
|
|
const o = uo(e, n),
|
|
r = void 0 === o ? 0 : parseInt(o, 10);
|
|
return isNaN(r) ? t : t + r;
|
|
},
|
|
0
|
|
);
|
|
return {
|
|
set: (t, n) => {
|
|
if (!x(n) && !n.match(/^[0-9]+$/))
|
|
throw new Error(e + ".set accepts only positive integer values. Value was " + n);
|
|
const o = t.dom;
|
|
ao(o) && (o.style[e] = n + "px");
|
|
},
|
|
get: n,
|
|
getOuter: n,
|
|
aggregate: o,
|
|
max: (e, t, n) => {
|
|
const r = o(e, n);
|
|
return t > r ? t - r : 0;
|
|
}
|
|
};
|
|
})("height"),
|
|
eg = () => Cn(document),
|
|
tg = (e, t) =>
|
|
e.view(t).fold(N([]), t => {
|
|
const n = e.owner(t),
|
|
o = tg(e, n);
|
|
return [t].concat(o);
|
|
});
|
|
var ng = Object.freeze({
|
|
__proto__: null,
|
|
view: e => {
|
|
var t;
|
|
return (
|
|
e.dom === document
|
|
? I.none()
|
|
: I.from(null === (t = e.dom.defaultView) || void 0 === t ? void 0 : t.frameElement)
|
|
).map(Cn);
|
|
},
|
|
owner: e => Rn(e)
|
|
});
|
|
const og = e => "textarea" === $t(e),
|
|
rg = (e, t) => {
|
|
const n = (e => {
|
|
const t = e.dom.ownerDocument,
|
|
n = t.body,
|
|
o = t.defaultView,
|
|
r = t.documentElement;
|
|
if (n === e.dom) return Oo(n.offsetLeft, n.offsetTop);
|
|
const s = Bo(null == o ? void 0 : o.pageYOffset, r.scrollTop),
|
|
a = Bo(null == o ? void 0 : o.pageXOffset, r.scrollLeft),
|
|
i = Bo(r.clientTop, n.clientTop),
|
|
l = Bo(r.clientLeft, n.clientLeft);
|
|
return Po(e).translate(a - l, s - i);
|
|
})(e),
|
|
o = (e => Jf.get(e))(e);
|
|
return {element: e, bottom: n.top + o, height: o, pos: n, cleanup: t};
|
|
},
|
|
sg = (e, t, n, o) => {
|
|
dg(e, (r, s) => ig(e, t, n, o), n);
|
|
},
|
|
ag = (e, t, n, o, r) => {
|
|
const s = {elm: o.element.dom, alignToTop: r};
|
|
((e, t) => e.dispatch("ScrollIntoView", t).isDefaultPrevented())(e, s) ||
|
|
(n(e, t, Do(t).top, o, r),
|
|
((e, t) => {
|
|
e.dispatch("AfterScrollIntoView", t);
|
|
})(e, s));
|
|
},
|
|
ig = (e, t, n, o) => {
|
|
const r = Cn(e.getBody()),
|
|
s = Cn(e.getDoc());
|
|
r.dom.offsetWidth;
|
|
const a = ((e, t) => {
|
|
const n = ((e, t) => {
|
|
const n = In(e);
|
|
if (0 === n.length || og(e)) return {element: e, offset: t};
|
|
if (t < n.length && !og(n[t])) return {element: n[t], offset: 0};
|
|
{
|
|
const o = n[n.length - 1];
|
|
return og(o)
|
|
? {element: e, offset: t}
|
|
: "img" === $t(o)
|
|
? {element: o, offset: 1}
|
|
: Yt(o)
|
|
? {element: o, offset: Ha(o).length}
|
|
: {element: o, offset: In(o).length};
|
|
}
|
|
})(e, t),
|
|
o = bn('<span data-mce-bogus="all" style="display: inline-block;">\ufeff</span>');
|
|
return ho(n.element, o), rg(o, () => Eo(o));
|
|
})(Cn(n.startContainer), n.startOffset);
|
|
ag(e, s, t, a, o), a.cleanup();
|
|
},
|
|
lg = (e, t, n, o) => {
|
|
const r = Cn(e.getDoc());
|
|
ag(e, r, n, (e => rg(Cn(e), k))(t), o);
|
|
},
|
|
dg = (e, t, n) => {
|
|
const o = n.startContainer,
|
|
r = n.startOffset,
|
|
s = n.endContainer,
|
|
a = n.endOffset;
|
|
t(Cn(o), Cn(s));
|
|
const i = e.dom.createRng();
|
|
i.setStart(o, r), i.setEnd(s, a), e.selection.setRng(n);
|
|
},
|
|
cg = (e, t, n, o, r) => {
|
|
const s = t.pos;
|
|
if (o) Lo(s.left, s.top, r);
|
|
else {
|
|
const o = s.top - n + t.height;
|
|
Lo(-e.getBody().getBoundingClientRect().left, o, r);
|
|
}
|
|
},
|
|
ug = (e, t, n, o, r, s) => {
|
|
const a = o + n,
|
|
i = r.pos.top,
|
|
l = r.bottom,
|
|
d = l - i >= o;
|
|
i < n
|
|
? cg(e, r, o, !1 !== s, t)
|
|
: i > a
|
|
? cg(e, r, o, d ? !1 !== s : !0 === s, t)
|
|
: l > a && !d && cg(e, r, o, !0 === s, t);
|
|
},
|
|
mg = (e, t, n, o, r) => {
|
|
const s = An(t).dom.innerHeight;
|
|
ug(e, t, n, s, o, r);
|
|
},
|
|
fg = (e, t, n, o, r) => {
|
|
const s = An(t).dom.innerHeight;
|
|
ug(e, t, n, s, o, r);
|
|
const a = (e => {
|
|
const t = eg(),
|
|
n = Do(t),
|
|
o = ((e, t) => {
|
|
const n = t.owner(e);
|
|
return tg(t, n);
|
|
})(e, ng),
|
|
r = Po(e),
|
|
s = G(
|
|
o,
|
|
(e, t) => {
|
|
const n = Po(t);
|
|
return {left: e.left + n.left, top: e.top + n.top};
|
|
},
|
|
{left: 0, top: 0}
|
|
);
|
|
return Oo(s.left + r.left + n.left, s.top + r.top + n.top);
|
|
})(o.element),
|
|
i = Fo(window);
|
|
a.top < i.y ? Mo(o.element, !1 !== r) : a.top > i.bottom && Mo(o.element, !0 === r);
|
|
},
|
|
gg = (e, t, n) => sg(e, mg, t, n),
|
|
pg = (e, t, n) => lg(e, t, mg, n),
|
|
hg = (e, t, n) => sg(e, fg, t, n),
|
|
bg = (e, t, n) => lg(e, t, fg, n),
|
|
vg = (e, t, n) => {
|
|
(e.inline ? gg : hg)(e, t, n);
|
|
},
|
|
yg = (e, t = !1) => e.dom.focus({preventScroll: t}),
|
|
Cg = e => {
|
|
const t = qn(e).dom;
|
|
return e.dom === t.activeElement;
|
|
},
|
|
wg = (e = eg()) => I.from(e.dom.activeElement).map(Cn),
|
|
xg = (e, t) => {
|
|
const n = Yt(t) ? Ha(t).length : In(t).length + 1;
|
|
return e > n ? n : e < 0 ? 0 : e;
|
|
},
|
|
Eg = e => Lf.range(e.start, xg(e.soffset, e.start), e.finish, xg(e.foffset, e.finish)),
|
|
kg = (e, t) => !Jo(t.dom) && (Sn(e, t) || _n(e, t)),
|
|
_g = e => t => kg(e, t.start) && kg(e, t.finish),
|
|
Sg = e => Lf.range(Cn(e.startContainer), e.startOffset, Cn(e.endContainer), e.endOffset),
|
|
Ng = e => {
|
|
const t = document.createRange();
|
|
try {
|
|
return t.setStart(e.start.dom, e.soffset), t.setEnd(e.finish.dom, e.foffset), I.some(t);
|
|
} catch (e) {
|
|
return I.none();
|
|
}
|
|
},
|
|
Rg = e => {
|
|
const t = (e => e.inline || Tt.browser.isFirefox())(e)
|
|
? ((n = Cn(e.getBody())),
|
|
(e => {
|
|
const t = e.getSelection();
|
|
return (t && 0 !== t.rangeCount ? I.from(t.getRangeAt(0)) : I.none()).map(Sg);
|
|
})(An(n).dom).filter(_g(n)))
|
|
: I.none();
|
|
var n;
|
|
e.bookmark = t.isSome() ? t : e.bookmark;
|
|
},
|
|
Ag = e =>
|
|
(e.bookmark ? e.bookmark : I.none())
|
|
.bind(t => {
|
|
return (n = Cn(e.getBody())), (o = t), I.from(o).filter(_g(n)).map(Eg);
|
|
var n, o;
|
|
})
|
|
.bind(Ng),
|
|
Tg = {
|
|
isEditorUIElement: e => {
|
|
const t = e.className.toString();
|
|
return -1 !== t.indexOf("tox-") || -1 !== t.indexOf("mce-");
|
|
}
|
|
},
|
|
Og = {
|
|
setEditorTimeout: (e, t, n) =>
|
|
((e, t) => (x(t) || (t = 0), setTimeout(e, t)))(() => {
|
|
e.removed || t();
|
|
}, n),
|
|
setEditorInterval: (e, t, n) => {
|
|
const o = ((e, t) => (x(t) || (t = 0), setInterval(e, t)))(() => {
|
|
e.removed ? clearInterval(o) : t();
|
|
}, n);
|
|
return o;
|
|
}
|
|
};
|
|
let Bg;
|
|
const Pg = fa.DOM,
|
|
Dg = e => {
|
|
const t = e.classList;
|
|
return (
|
|
void 0 !== t &&
|
|
(t.contains("tox-edit-area") || t.contains("tox-edit-area__iframe") || t.contains("mce-content-body"))
|
|
);
|
|
},
|
|
Lg = (e, t) => {
|
|
const n = Pd(e),
|
|
o = Pg.getParent(t, t => (e => er(e) && Tg.isEditorUIElement(e))(t) || (!!n && e.dom.is(t, n)));
|
|
return null !== o;
|
|
},
|
|
Mg = e => {
|
|
try {
|
|
const t = qn(Cn(e.getElement()));
|
|
return wg(t).fold(
|
|
() => document.body,
|
|
e => e.dom
|
|
);
|
|
} catch (e) {
|
|
return document.body;
|
|
}
|
|
},
|
|
Ig = (e, t) => {
|
|
const n = t.editor;
|
|
(e => {
|
|
const t = wa(() => {
|
|
Rg(e);
|
|
}, 0);
|
|
e.on("init", () => {
|
|
e.inline &&
|
|
((e, t) => {
|
|
const n = () => {
|
|
t.throttle();
|
|
};
|
|
fa.DOM.bind(document, "mouseup", n),
|
|
e.on("remove", () => {
|
|
fa.DOM.unbind(document, "mouseup", n);
|
|
});
|
|
})(e, t),
|
|
((e, t) => {
|
|
((e, t) => {
|
|
e.on("mouseup touchend", e => {
|
|
t.throttle();
|
|
});
|
|
})(e, t),
|
|
e.on("keyup NodeChange AfterSetSelectionRange", t => {
|
|
(e => "nodechange" === e.type && e.selectionChange)(t) || Rg(e);
|
|
});
|
|
})(e, t);
|
|
}),
|
|
e.on("remove", () => {
|
|
t.cancel();
|
|
});
|
|
})(n);
|
|
const o = (e, t) => {
|
|
wc(e) && !0 !== e.inline && t(Cn(e.getContainer()), "tox-edit-focus");
|
|
};
|
|
n.on("focusin", () => {
|
|
const t = e.focusedEditor;
|
|
Dg(Mg(n)) && o(n, mn),
|
|
t !== n &&
|
|
(t && t.dispatch("blur", {focusedEditor: n}),
|
|
e.setActive(n),
|
|
(e.focusedEditor = n),
|
|
n.dispatch("focus", {blurredEditor: t}),
|
|
n.focus(!0));
|
|
}),
|
|
n.on("focusout", () => {
|
|
Og.setEditorTimeout(n, () => {
|
|
const t = e.focusedEditor;
|
|
(Dg(Mg(n)) && t === n) || o(n, gn),
|
|
Lg(n, Mg(n)) || t !== n || (n.dispatch("blur", {focusedEditor: null}), (e.focusedEditor = null));
|
|
});
|
|
}),
|
|
Bg ||
|
|
((Bg = t => {
|
|
const n = e.activeEditor;
|
|
n &&
|
|
Yn(t).each(t => {
|
|
const o = t;
|
|
o.ownerDocument === document &&
|
|
(o === document.body ||
|
|
Lg(n, o) ||
|
|
e.focusedEditor !== n ||
|
|
(n.dispatch("blur", {focusedEditor: null}), (e.focusedEditor = null)));
|
|
});
|
|
}),
|
|
Pg.bind(document, "focusin", Bg));
|
|
},
|
|
Fg = (e, t) => {
|
|
e.focusedEditor === t.editor && (e.focusedEditor = null),
|
|
!e.activeEditor && Bg && (Pg.unbind(document, "focusin", Bg), (Bg = null));
|
|
},
|
|
Ug = (e, t) => {
|
|
((e, t) =>
|
|
(e => (e.collapsed ? I.from(xi(e.startContainer, e.startOffset)).map(Cn) : I.none()))(t).bind(t =>
|
|
Ya(t) ? I.some(t) : Sn(e, t) ? I.none() : I.some(e)
|
|
))(Cn(e.getBody()), t)
|
|
.bind(e => $u(e.dom))
|
|
.fold(
|
|
() => {
|
|
e.selection.normalize();
|
|
},
|
|
t => e.selection.setRng(t.toRange())
|
|
);
|
|
},
|
|
zg = e => {
|
|
if (e.setActive)
|
|
try {
|
|
e.setActive();
|
|
} catch (t) {
|
|
e.focus();
|
|
}
|
|
else e.focus();
|
|
},
|
|
jg = e =>
|
|
e.inline
|
|
? (e => {
|
|
const t = e.getBody();
|
|
return t && ((n = Cn(t)), Cg(n) || ((o = n), wg(qn(o)).filter(e => o.dom.contains(e.dom))).isSome());
|
|
var n, o;
|
|
})(e)
|
|
: (e => C(e.iframeElement) && Cg(Cn(e.iframeElement)))(e),
|
|
Hg = e =>
|
|
jg(e) ||
|
|
(e => {
|
|
const t = qn(Cn(e.getElement()));
|
|
return wg(t)
|
|
.filter(t => !Dg(t.dom) && Lg(e, t.dom))
|
|
.isSome();
|
|
})(e),
|
|
$g = e => e.editorManager.setActive(e),
|
|
Vg = (e, t) =>
|
|
t.collapsed ? e.isEditable(t.startContainer) : e.isEditable(t.startContainer) && e.isEditable(t.endContainer),
|
|
qg = (e, t, n, o, r) => {
|
|
const s = n ? t.startContainer : t.endContainer,
|
|
a = n ? t.startOffset : t.endOffset;
|
|
return I.from(s)
|
|
.map(Cn)
|
|
.map(e => (o && t.collapsed ? e : Fn(e, r(e, a)).getOr(e)))
|
|
.bind(e => (Kt(e) ? I.some(e) : Tn(e).filter(Kt)))
|
|
.map(e => e.dom)
|
|
.getOr(e);
|
|
},
|
|
Wg = (e, t, n = !1) => qg(e, t, !0, n, (e, t) => Math.min(jn(e), t)),
|
|
Kg = (e, t, n = !1) => qg(e, t, !1, n, (e, t) => (t > 0 ? t - 1 : t)),
|
|
Yg = (e, t) => {
|
|
const n = e;
|
|
for (; e && dr(e) && 0 === e.length; ) e = t ? e.nextSibling : e.previousSibling;
|
|
return e || n;
|
|
},
|
|
Gg = (e, t) =>
|
|
V(t, t => {
|
|
const n = e.dispatch("GetSelectionRange", {range: t});
|
|
return n.range !== t ? n.range : t;
|
|
}),
|
|
Xg = {"#text": 3, "#comment": 8, "#cdata": 4, "#pi": 7, "#doctype": 10, "#document-fragment": 11},
|
|
Zg = (e, t, n) => {
|
|
const o = n ? "lastChild" : "firstChild",
|
|
r = n ? "prev" : "next";
|
|
if (e[o]) return e[o];
|
|
if (e !== t) {
|
|
let n = e[r];
|
|
if (n) return n;
|
|
for (let o = e.parent; o && o !== t; o = o.parent) if (((n = o[r]), n)) return n;
|
|
}
|
|
},
|
|
Qg = e => {
|
|
var t;
|
|
const n = null !== (t = e.value) && void 0 !== t ? t : "";
|
|
if (!Go(n)) return !1;
|
|
const o = e.parent;
|
|
return !o || ("span" === o.name && !o.attr("style")) || !/^[ ]+$/.test(n);
|
|
},
|
|
Jg = e => {
|
|
const t = "a" === e.name && !e.attr("href") && e.attr("id");
|
|
return e.attr("name") || (e.attr("id") && !e.firstChild) || e.attr("data-mce-bookmark") || t;
|
|
};
|
|
class ep {
|
|
static create(e, t) {
|
|
const n = new ep(e, Xg[e] || 1);
|
|
return (
|
|
t &&
|
|
pe(t, (e, t) => {
|
|
n.attr(t, e);
|
|
}),
|
|
n
|
|
);
|
|
}
|
|
constructor(e, t) {
|
|
(this.name = e), (this.type = t), 1 === t && ((this.attributes = []), (this.attributes.map = {}));
|
|
}
|
|
replace(e) {
|
|
const t = this;
|
|
return e.parent && e.remove(), t.insert(e, t), t.remove(), t;
|
|
}
|
|
attr(e, t) {
|
|
const n = this;
|
|
if (!m(e))
|
|
return (
|
|
C(e) &&
|
|
pe(e, (e, t) => {
|
|
n.attr(t, e);
|
|
}),
|
|
n
|
|
);
|
|
const o = n.attributes;
|
|
if (o) {
|
|
if (void 0 !== t) {
|
|
if (null === t) {
|
|
if (e in o.map) {
|
|
delete o.map[e];
|
|
let t = o.length;
|
|
for (; t--; ) if (o[t].name === e) return o.splice(t, 1), n;
|
|
}
|
|
return n;
|
|
}
|
|
if (e in o.map) {
|
|
let n = o.length;
|
|
for (; n--; )
|
|
if (o[n].name === e) {
|
|
o[n].value = t;
|
|
break;
|
|
}
|
|
} else o.push({name: e, value: t});
|
|
return (o.map[e] = t), n;
|
|
}
|
|
return o.map[e];
|
|
}
|
|
}
|
|
clone() {
|
|
const e = this,
|
|
t = new ep(e.name, e.type),
|
|
n = e.attributes;
|
|
if (n) {
|
|
const e = [];
|
|
e.map = {};
|
|
for (let t = 0, o = n.length; t < o; t++) {
|
|
const o = n[t];
|
|
"id" !== o.name && ((e[e.length] = {name: o.name, value: o.value}), (e.map[o.name] = o.value));
|
|
}
|
|
t.attributes = e;
|
|
}
|
|
return (t.value = e.value), t;
|
|
}
|
|
wrap(e) {
|
|
const t = this;
|
|
return t.parent && (t.parent.insert(e, t), e.append(t)), t;
|
|
}
|
|
unwrap() {
|
|
const e = this;
|
|
for (let t = e.firstChild; t; ) {
|
|
const n = t.next;
|
|
e.insert(t, e, !0), (t = n);
|
|
}
|
|
e.remove();
|
|
}
|
|
remove() {
|
|
const e = this,
|
|
t = e.parent,
|
|
n = e.next,
|
|
o = e.prev;
|
|
return (
|
|
t &&
|
|
(t.firstChild === e ? ((t.firstChild = n), n && (n.prev = null)) : o && (o.next = n),
|
|
t.lastChild === e ? ((t.lastChild = o), o && (o.next = null)) : n && (n.prev = o),
|
|
(e.parent = e.next = e.prev = null)),
|
|
e
|
|
);
|
|
}
|
|
append(e) {
|
|
const t = this;
|
|
e.parent && e.remove();
|
|
const n = t.lastChild;
|
|
return n ? ((n.next = e), (e.prev = n), (t.lastChild = e)) : (t.lastChild = t.firstChild = e), (e.parent = t), e;
|
|
}
|
|
insert(e, t, n) {
|
|
e.parent && e.remove();
|
|
const o = t.parent || this;
|
|
return (
|
|
n
|
|
? (t === o.firstChild ? (o.firstChild = e) : t.prev && (t.prev.next = e),
|
|
(e.prev = t.prev),
|
|
(e.next = t),
|
|
(t.prev = e))
|
|
: (t === o.lastChild ? (o.lastChild = e) : t.next && (t.next.prev = e),
|
|
(e.next = t.next),
|
|
(e.prev = t),
|
|
(t.next = e)),
|
|
(e.parent = o),
|
|
e
|
|
);
|
|
}
|
|
getAll(e) {
|
|
const t = this,
|
|
n = [];
|
|
for (let o = t.firstChild; o; o = Zg(o, t)) o.name === e && n.push(o);
|
|
return n;
|
|
}
|
|
children() {
|
|
const e = [];
|
|
for (let t = this.firstChild; t; t = t.next) e.push(t);
|
|
return e;
|
|
}
|
|
empty() {
|
|
const e = this;
|
|
if (e.firstChild) {
|
|
const t = [];
|
|
for (let n = e.firstChild; n; n = Zg(n, e)) t.push(n);
|
|
let n = t.length;
|
|
for (; n--; ) {
|
|
const e = t[n];
|
|
e.parent = e.firstChild = e.lastChild = e.next = e.prev = null;
|
|
}
|
|
}
|
|
return (e.firstChild = e.lastChild = null), e;
|
|
}
|
|
isEmpty(e, t = {}, n) {
|
|
var o;
|
|
const r = this;
|
|
let s = r.firstChild;
|
|
if (Jg(r)) return !1;
|
|
if (s)
|
|
do {
|
|
if (1 === s.type) {
|
|
if (s.attr("data-mce-bogus")) continue;
|
|
if (e[s.name]) return !1;
|
|
if (Jg(s)) return !1;
|
|
}
|
|
if (8 === s.type) return !1;
|
|
if (3 === s.type && !Qg(s)) return !1;
|
|
if (3 === s.type && s.parent && t[s.parent.name] && Go(null !== (o = s.value) && void 0 !== o ? o : ""))
|
|
return !1;
|
|
if (n && n(s)) return !1;
|
|
} while ((s = Zg(s, r)));
|
|
return !0;
|
|
}
|
|
walk(e) {
|
|
return Zg(this, null, e);
|
|
}
|
|
}
|
|
const tp = Dt.makeMap("NOSCRIPT STYLE SCRIPT XMP IFRAME NOEMBED NOFRAMES PLAINTEXT", " "),
|
|
np = e => m(e.nodeValue) && e.nodeValue.includes(Ja),
|
|
op = e => (0 === e.length ? "" : `${V(e, e => `[${e}]`).join(",")},`) + '[data-mce-bogus="all"]',
|
|
rp = e =>
|
|
document.createTreeWalker(e, NodeFilter.SHOW_COMMENT, e =>
|
|
np(e) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP
|
|
),
|
|
sp = e =>
|
|
document.createTreeWalker(e, NodeFilter.SHOW_TEXT, e => {
|
|
if (np(e)) {
|
|
const t = e.parentNode;
|
|
return t && ke(tp, t.nodeName) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
|
|
}
|
|
return NodeFilter.FILTER_SKIP;
|
|
}),
|
|
ap = e => null !== rp(e).nextNode(),
|
|
ip = e => null !== sp(e).nextNode(),
|
|
lp = (e, t) => null !== t.querySelector(op(e)),
|
|
dp = (e, t) => {
|
|
q(((e, t) => t.querySelectorAll(op(e)))(e, t), t => {
|
|
const n = Cn(t);
|
|
"all" === tn(n, "data-mce-bogus")
|
|
? Eo(n)
|
|
: q(e, e => {
|
|
on(n, e) && rn(n, e);
|
|
});
|
|
});
|
|
},
|
|
cp = e => {
|
|
let t = e.nextNode();
|
|
for (; null !== t; ) (t.nodeValue = null), (t = e.nextNode());
|
|
},
|
|
up = _(cp, rp),
|
|
mp = _(cp, sp),
|
|
fp = (e, t) => {
|
|
const n = [
|
|
{condition: T(lp, t), action: T(dp, t)},
|
|
{condition: ap, action: up},
|
|
{condition: ip, action: mp}
|
|
];
|
|
let o = e,
|
|
r = !1;
|
|
return (
|
|
q(n, ({condition: t, action: n}) => {
|
|
t(o) && (r || ((o = e.cloneNode(!0)), (r = !0)), n(o));
|
|
}),
|
|
o
|
|
);
|
|
},
|
|
gp = e => {
|
|
const t = zo(e, "[data-mce-bogus]");
|
|
q(t, e => {
|
|
"all" === tn(e, "data-mce-bogus") ? Eo(e) : Va(e) ? (ho(e, yn(qo)), Eo(e)) : ko(e);
|
|
});
|
|
},
|
|
pp = e => {
|
|
const t = zo(e, "input");
|
|
q(t, e => {
|
|
rn(e, "name");
|
|
});
|
|
},
|
|
hp = (e, t, n) => {
|
|
let o;
|
|
return (
|
|
(o =
|
|
"raw" === t.format
|
|
? Dt.trim(ti(fp(n, e.serializer.getTempAttrs()).innerHTML))
|
|
: "text" === t.format
|
|
? ((e, t) => {
|
|
const n = e.getDoc(),
|
|
o = qn(Cn(e.getBody())),
|
|
r = vn("div", n);
|
|
Jt(r, "data-mce-bogus", "all"),
|
|
co(r, {position: "fixed", left: "-9999999px", top: "0"}),
|
|
No(r, t.innerHTML),
|
|
gp(r),
|
|
pp(r);
|
|
const s = (e => (Hn(e) ? e : Cn(Rn(e).dom.body)))(o);
|
|
yo(s, r);
|
|
const a = ti(r.dom.innerText);
|
|
return Eo(r), a;
|
|
})(e, n)
|
|
: "tree" === t.format
|
|
? e.serializer.serialize(n, t)
|
|
: ((e, t) => {
|
|
const n = Wl(e),
|
|
o = new RegExp(`^(<${n}[^>]*>( | |\\s|\xa0|<br \\/>|)<\\/${n}>[\r\n]*|<br \\/>[\r\n]*)$`);
|
|
return t.replace(o, "");
|
|
})(e, e.serializer.serialize(n, t))),
|
|
"text" !== t.format && !Xa(Cn(n)) && m(o) ? Dt.trim(o) : o
|
|
);
|
|
},
|
|
bp = Dt.makeMap,
|
|
vp = e => {
|
|
const t = [],
|
|
n = (e = e || {}).indent,
|
|
o = bp(e.indent_before || ""),
|
|
r = bp(e.indent_after || ""),
|
|
s = ws.getEncodeFunc(e.entity_encoding || "raw", e.entities),
|
|
a = "xhtml" !== e.element_format;
|
|
return {
|
|
start: (e, i, l) => {
|
|
if (n && o[e] && t.length > 0) {
|
|
const e = t[t.length - 1];
|
|
e.length > 0 && "\n" !== e && t.push("\n");
|
|
}
|
|
if ((t.push("<", e), i))
|
|
for (let e = 0, n = i.length; e < n; e++) {
|
|
const n = i[e];
|
|
t.push(" ", n.name, '="', s(n.value, !0), '"');
|
|
}
|
|
if (((t[t.length] = !l || a ? ">" : " />"), l && n && r[e] && t.length > 0)) {
|
|
const e = t[t.length - 1];
|
|
e.length > 0 && "\n" !== e && t.push("\n");
|
|
}
|
|
},
|
|
end: e => {
|
|
let o;
|
|
t.push("</", e, ">"),
|
|
n && r[e] && t.length > 0 && ((o = t[t.length - 1]), o.length > 0 && "\n" !== o && t.push("\n"));
|
|
},
|
|
text: (e, n) => {
|
|
e.length > 0 && (t[t.length] = n ? e : s(e));
|
|
},
|
|
cdata: e => {
|
|
t.push("<![CDATA[", e, "]]>");
|
|
},
|
|
comment: e => {
|
|
t.push("\x3c!--", e, "--\x3e");
|
|
},
|
|
pi: (e, o) => {
|
|
o ? t.push("<?", e, " ", s(o), "?>") : t.push("<?", e, "?>"), n && t.push("\n");
|
|
},
|
|
doctype: e => {
|
|
t.push("<!DOCTYPE", e, ">", n ? "\n" : "");
|
|
},
|
|
reset: () => {
|
|
t.length = 0;
|
|
},
|
|
getContent: () => t.join("").replace(/\n$/, "")
|
|
};
|
|
},
|
|
yp = (e = {}, t = Fs()) => {
|
|
const n = vp(e);
|
|
return (
|
|
(e.validate = !("validate" in e) || e.validate),
|
|
{
|
|
serialize: o => {
|
|
const r = e.validate,
|
|
s = {
|
|
3: e => {
|
|
var t;
|
|
n.text(null !== (t = e.value) && void 0 !== t ? t : "", e.raw);
|
|
},
|
|
8: e => {
|
|
var t;
|
|
n.comment(null !== (t = e.value) && void 0 !== t ? t : "");
|
|
},
|
|
7: e => {
|
|
n.pi(e.name, e.value);
|
|
},
|
|
10: e => {
|
|
var t;
|
|
n.doctype(null !== (t = e.value) && void 0 !== t ? t : "");
|
|
},
|
|
4: e => {
|
|
var t;
|
|
n.cdata(null !== (t = e.value) && void 0 !== t ? t : "");
|
|
},
|
|
11: e => {
|
|
let t = e;
|
|
if ((t = t.firstChild))
|
|
do {
|
|
a(t);
|
|
} while ((t = t.next));
|
|
}
|
|
};
|
|
n.reset();
|
|
const a = e => {
|
|
var o;
|
|
const i = s[e.type];
|
|
if (i) i(e);
|
|
else {
|
|
const s = e.name,
|
|
i = s in t.getVoidElements();
|
|
let l = e.attributes;
|
|
if (r && l && l.length > 1) {
|
|
const n = [];
|
|
n.map = {};
|
|
const o = t.getElementRule(e.name);
|
|
if (o) {
|
|
for (let e = 0, t = o.attributesOrder.length; e < t; e++) {
|
|
const t = o.attributesOrder[e];
|
|
if (t in l.map) {
|
|
const e = l.map[t];
|
|
(n.map[t] = e), n.push({name: t, value: e});
|
|
}
|
|
}
|
|
for (let e = 0, t = l.length; e < t; e++) {
|
|
const t = l[e].name;
|
|
if (!(t in n.map)) {
|
|
const e = l.map[t];
|
|
(n.map[t] = e), n.push({name: t, value: e});
|
|
}
|
|
}
|
|
l = n;
|
|
}
|
|
}
|
|
if ((n.start(s, l, i), Mr(s))) m(e.value) && n.text(e.value, !0), n.end(s);
|
|
else if (!i) {
|
|
let t = e.firstChild;
|
|
if (t) {
|
|
("pre" !== s && "textarea" !== s) ||
|
|
3 !== t.type ||
|
|
"\n" !== (null === (o = t.value) || void 0 === o ? void 0 : o[0]) ||
|
|
n.text("\n", !0);
|
|
do {
|
|
a(t);
|
|
} while ((t = t.next));
|
|
}
|
|
n.end(s);
|
|
}
|
|
}
|
|
};
|
|
return 1 !== o.type || e.inner ? (3 === o.type ? s[3](o) : s[11](o)) : a(o), n.getContent();
|
|
}
|
|
}
|
|
);
|
|
},
|
|
Cp = new Set();
|
|
q(
|
|
[
|
|
"margin",
|
|
"margin-left",
|
|
"margin-right",
|
|
"margin-top",
|
|
"margin-bottom",
|
|
"padding",
|
|
"padding-left",
|
|
"padding-right",
|
|
"padding-top",
|
|
"padding-bottom",
|
|
"border",
|
|
"border-width",
|
|
"border-style",
|
|
"border-color",
|
|
"background",
|
|
"background-attachment",
|
|
"background-clip",
|
|
"background-color",
|
|
"background-image",
|
|
"background-origin",
|
|
"background-position",
|
|
"background-repeat",
|
|
"background-size",
|
|
"float",
|
|
"position",
|
|
"left",
|
|
"right",
|
|
"top",
|
|
"bottom",
|
|
"z-index",
|
|
"display",
|
|
"transform",
|
|
"width",
|
|
"max-width",
|
|
"min-width",
|
|
"height",
|
|
"max-height",
|
|
"min-height",
|
|
"overflow",
|
|
"overflow-x",
|
|
"overflow-y",
|
|
"text-overflow",
|
|
"vertical-align",
|
|
"transition",
|
|
"transition-delay",
|
|
"transition-duration",
|
|
"transition-property",
|
|
"transition-timing-function"
|
|
],
|
|
e => {
|
|
Cp.add(e);
|
|
}
|
|
);
|
|
const wp = ["font", "text-decoration", "text-emphasis"],
|
|
xp = (e, t) => fe(e.parseStyle(e.getAttrib(t, "style"))),
|
|
Ep = (e, t, n) => {
|
|
const o = xp(e, t),
|
|
r = xp(e, n),
|
|
s = o => {
|
|
var r, s;
|
|
const a = null !== (r = e.getStyle(t, o)) && void 0 !== r ? r : "",
|
|
i = null !== (s = e.getStyle(n, o)) && void 0 !== s ? s : "";
|
|
return Ge(a) && Ge(i) && a !== i;
|
|
};
|
|
return $(o, e => {
|
|
const t = t => $(t, t => t === e);
|
|
if (!t(r) && t(wp)) {
|
|
const e = Y(r, e => $(wp, t => $e(e, t)));
|
|
return $(e, s);
|
|
}
|
|
return s(e);
|
|
});
|
|
},
|
|
kp = (e, t, n) =>
|
|
I.from(n.container())
|
|
.filter(dr)
|
|
.exists(o => {
|
|
const r = e ? 0 : -1;
|
|
return t(o.data.charAt(n.offset() + r));
|
|
}),
|
|
_p = T(kp, !0, lm),
|
|
Sp = T(kp, !1, lm),
|
|
Np = e => {
|
|
const t = e.container();
|
|
return dr(t) && (0 === t.data.length || (ei(t.data) && uf.isBookmarkNode(t.parentNode)));
|
|
},
|
|
Rp = (e, t) => n =>
|
|
cu(e ? 0 : -1, n)
|
|
.filter(t)
|
|
.isSome(),
|
|
Ap = e => hr(e) && "block" === uo(Cn(e), "display"),
|
|
Tp = e => vr(e) && !(e => er(e) && "all" === e.getAttribute("data-mce-bogus"))(e),
|
|
Op = Rp(!0, Ap),
|
|
Bp = Rp(!1, Ap),
|
|
Pp = Rp(!0, wr),
|
|
Dp = Rp(!1, wr),
|
|
Lp = Rp(!0, ar),
|
|
Mp = Rp(!1, ar),
|
|
Ip = Rp(!0, Tp),
|
|
Fp = Rp(!1, Tp),
|
|
Up = (e, t) => ((e, t, n) => (Sn(t, e) ? Bn(e, e => n(e) || _n(e, t)).slice(0, -1) : []))(e, t, L),
|
|
zp = (e, t) => [e].concat(Up(e, t)),
|
|
jp = (e, t, n) => Uu(e, t, n, Np),
|
|
Hp = (e, t, n) =>
|
|
Q(
|
|
zp(Cn(t.container()), e),
|
|
(
|
|
e => t =>
|
|
e.isBlock($t(t))
|
|
)(n)
|
|
),
|
|
$p = (e, t, n, o) =>
|
|
jp(e, t.dom, n).forall(e =>
|
|
Hp(t, n, o).fold(
|
|
() => !du(e, n, t.dom),
|
|
o => !du(e, n, t.dom) && Sn(o, Cn(e.container()))
|
|
)
|
|
),
|
|
Vp = (e, t, n, o) =>
|
|
Hp(t, n, o).fold(
|
|
() => jp(e, t.dom, n).forall(e => !du(e, n, t.dom)),
|
|
t => jp(e, t.dom, n).isNone()
|
|
),
|
|
qp = T(Vp, !1),
|
|
Wp = T(Vp, !0),
|
|
Kp = T($p, !1),
|
|
Yp = T($p, !0),
|
|
Gp = e => yu(e).exists(Va),
|
|
Xp = (e, t, n, o) => {
|
|
const r = Y(zp(Cn(n.container()), t), e => o.isBlock($t(e))),
|
|
s = le(r).getOr(t);
|
|
return Iu(e, s.dom, n).filter(Gp);
|
|
},
|
|
Zp = (e, t, n) => yu(t).exists(Va) || Xp(!0, e, t, n).isSome(),
|
|
Qp = (e, t, n) => (e => I.from(e.getNode(!0)).map(Cn))(t).exists(Va) || Xp(!1, e, t, n).isSome(),
|
|
Jp = T(Xp, !1),
|
|
eh = T(Xp, !0),
|
|
th = e => Ji.isTextPosition(e) && !e.isAtStart() && !e.isAtEnd(),
|
|
nh = (e, t, n) => {
|
|
const o = Y(zp(Cn(t.container()), e), e => n.isBlock($t(e)));
|
|
return le(o).getOr(e);
|
|
},
|
|
oh = (e, t, n) => (th(t) ? Sp(t) : Sp(t) || Hu(nh(e, t, n).dom, t).exists(Sp)),
|
|
rh = (e, t, n) => (th(t) ? _p(t) : _p(t) || ju(nh(e, t, n).dom, t).exists(_p)),
|
|
sh = e =>
|
|
yu(e)
|
|
.bind(e => Jn(e, Kt))
|
|
.exists(e => (e => H(["pre", "pre-wrap"], e))(uo(e, "white-space"))),
|
|
ah = (e, t) => n => {
|
|
return (o = new Vo(n, e)[t]()), C(o) && vr(o) && Qc(o);
|
|
var o;
|
|
},
|
|
ih = (e, t, n) =>
|
|
!sh(t) &&
|
|
(((e, t, n) =>
|
|
((e, t) => Hu(e.dom, t).isNone())(e, t) ||
|
|
((e, t) => ju(e.dom, t).isNone())(e, t) ||
|
|
qp(e, t, n) ||
|
|
Wp(e, t, n) ||
|
|
Qp(e, t, n) ||
|
|
Zp(e, t, n))(e, t, n) ||
|
|
oh(e, t, n) ||
|
|
rh(e, t, n)),
|
|
lh = (e, t, n) =>
|
|
!sh(t) &&
|
|
(qp(e, t, n) ||
|
|
Kp(e, t, n) ||
|
|
Qp(e, t, n) ||
|
|
oh(e, t, n) ||
|
|
((e, t) => {
|
|
const n = Hu(e.dom, t).getOr(t),
|
|
o = ah(e.dom, "prev");
|
|
return t.isAtStart() && (o(t.container()) || o(n.container()));
|
|
})(e, t)),
|
|
dh = (e, t, n) =>
|
|
!sh(t) &&
|
|
(Wp(e, t, n) ||
|
|
Yp(e, t, n) ||
|
|
Zp(e, t, n) ||
|
|
rh(e, t, n) ||
|
|
((e, t) => {
|
|
const n = ju(e.dom, t).getOr(t),
|
|
o = ah(e.dom, "next");
|
|
return t.isAtEnd() && (o(t.container()) || o(n.container()));
|
|
})(e, t)),
|
|
ch = (e, t, n) =>
|
|
lh(e, t, n) ||
|
|
dh(
|
|
e,
|
|
(e => {
|
|
const t = e.container(),
|
|
n = e.offset();
|
|
return dr(t) && n < t.data.length ? Ji(t, n + 1) : e;
|
|
})(t),
|
|
n
|
|
),
|
|
uh = (e, t) => am(e.charAt(t)),
|
|
mh = (e, t) => lm(e.charAt(t)),
|
|
fh = (e, t, n, o) => {
|
|
const r = t.data,
|
|
s = Ji(t, 0);
|
|
return n || !uh(r, 0) || ch(e, s, o)
|
|
? !!(n && mh(r, 0) && lh(e, s, o)) && ((t.data = Wo + r.slice(1)), !0)
|
|
: ((t.data = " " + r.slice(1)), !0);
|
|
},
|
|
gh = (e, t, n, o) => {
|
|
const r = t.data,
|
|
s = Ji(t, r.length - 1);
|
|
return n || !uh(r, r.length - 1) || ch(e, s, o)
|
|
? !!(n && mh(r, r.length - 1) && dh(e, s, o)) && ((t.data = r.slice(0, -1) + Wo), !0)
|
|
: ((t.data = r.slice(0, -1) + " "), !0);
|
|
},
|
|
ph = (e, t, n) => {
|
|
const o = t.container();
|
|
if (!dr(o)) return I.none();
|
|
if (
|
|
(e => {
|
|
const t = e.container();
|
|
return dr(t) && He(t.data, Wo);
|
|
})(t)
|
|
) {
|
|
const r =
|
|
fh(e, o, !1, n) ||
|
|
(e => {
|
|
const t = e.data,
|
|
n = (e => {
|
|
const t = e.split("");
|
|
return V(t, (e, n) =>
|
|
am(e) && n > 0 && n < t.length - 1 && dm(t[n - 1]) && dm(t[n + 1]) ? " " : e
|
|
).join("");
|
|
})(t);
|
|
return n !== t && ((e.data = n), !0);
|
|
})(o) ||
|
|
gh(e, o, !1, n);
|
|
return Ft(r, t);
|
|
}
|
|
if (ch(e, t, n)) {
|
|
const r = fh(e, o, !0, n) || gh(e, o, !0, n);
|
|
return Ft(r, t);
|
|
}
|
|
return I.none();
|
|
},
|
|
hh = (e, t, n, o) => {
|
|
if (0 === n) return;
|
|
const r = Cn(e),
|
|
s = Qn(r, e => o.isBlock($t(e))).getOr(r),
|
|
a = e.data.slice(t, t + n),
|
|
i = t + n >= e.data.length && dh(s, Ji(e, e.data.length), o),
|
|
l = 0 === t && lh(s, Ji(e, 0), o);
|
|
e.replaceData(t, n, Zo(a, 4, l, i));
|
|
},
|
|
bh = (e, t, n) => {
|
|
const o = e.data.slice(t),
|
|
r = o.length - Ke(o).length;
|
|
hh(e, t, r, n);
|
|
},
|
|
vh = (e, t, n) => {
|
|
const o = e.data.slice(0, t),
|
|
r = o.length - Ye(o).length;
|
|
hh(e, t - r, r, n);
|
|
},
|
|
yh = (e, t, n, o, r = !0) => {
|
|
const s = Ye(e.data).length,
|
|
a = r ? e : t,
|
|
i = r ? t : e;
|
|
return r ? a.appendData(i.data) : a.insertData(0, i.data), Eo(Cn(i)), o && bh(a, s, n), a;
|
|
},
|
|
Ch = (e, t) =>
|
|
((e, t) => {
|
|
const n = e.container(),
|
|
o = e.offset();
|
|
return !Ji.isTextPosition(e) && n === t.parentNode && o > Ji.before(t).offset();
|
|
})(t, e)
|
|
? Ji(t.container(), t.offset() - 1)
|
|
: t,
|
|
wh = e => {
|
|
return Pi(e.previousSibling)
|
|
? I.some(((t = e.previousSibling), dr(t) ? Ji(t, t.data.length) : Ji.after(t)))
|
|
: e.previousSibling
|
|
? Vu(e.previousSibling)
|
|
: I.none();
|
|
var t;
|
|
},
|
|
xh = e => {
|
|
return Pi(e.nextSibling)
|
|
? I.some(((t = e.nextSibling), dr(t) ? Ji(t, 0) : Ji.before(t)))
|
|
: e.nextSibling
|
|
? $u(e.nextSibling)
|
|
: I.none();
|
|
var t;
|
|
},
|
|
Eh = (e, t, n) =>
|
|
((e, t, n) =>
|
|
e
|
|
? ((e, t) =>
|
|
xh(t)
|
|
.orThunk(() => wh(t))
|
|
.orThunk(() => ((e, t) => ju(e, Ji.after(t)).orThunk(() => Hu(e, Ji.before(t))))(e, t)))(t, n)
|
|
: ((e, t) =>
|
|
wh(t)
|
|
.orThunk(() => xh(t))
|
|
.orThunk(() =>
|
|
((e, t) =>
|
|
I.from(t.previousSibling ? t.previousSibling : t.parentNode)
|
|
.bind(t => Hu(e, Ji.before(t)))
|
|
.orThunk(() => ju(e, Ji.after(t))))(e, t)
|
|
))(t, n))(e, t, n).map(T(Ch, n)),
|
|
kh = (e, t, n) => {
|
|
n.fold(
|
|
() => {
|
|
e.focus();
|
|
},
|
|
n => {
|
|
e.selection.setRng(n.toRange(), t);
|
|
}
|
|
);
|
|
},
|
|
_h = (e, t) => t && ke(e.schema.getBlockElements(), $t(t)),
|
|
Sh = (e, t, n, o = !0, r = !1) => {
|
|
const s = Eh(t, e.getBody(), n.dom),
|
|
a = Qn(n, T(_h, e), ((i = e.getBody()), e => e.dom === i));
|
|
var i;
|
|
const l = ((e, t, n, o) => {
|
|
const r = Pn(e).filter(Yt),
|
|
s = Dn(e).filter(Yt);
|
|
return (
|
|
Eo(e),
|
|
((a = r),
|
|
(i = s),
|
|
(l = t),
|
|
(d = (e, t, r) => {
|
|
const s = e.dom,
|
|
a = t.dom,
|
|
i = s.data.length;
|
|
return yh(s, a, n, o), r.container() === a ? Ji(s, i) : r;
|
|
}),
|
|
a.isSome() && i.isSome() && l.isSome()
|
|
? I.some(d(a.getOrDie(), i.getOrDie(), l.getOrDie()))
|
|
: I.none()).orThunk(() => (o && (r.each(e => vh(e.dom, e.dom.length, n)), s.each(e => bh(e.dom, 0, n))), t))
|
|
);
|
|
var a, i, l, d;
|
|
})(n, s, e.schema, ((e, t) => ke(e.schema.getTextInlineElements(), $t(t)))(e, n));
|
|
e.dom.isEmpty(e.getBody())
|
|
? (e.setContent(""), e.selection.setCursorLocation())
|
|
: a
|
|
.bind(t =>
|
|
((e, t, n) => {
|
|
if (Tr(e, t)) {
|
|
const e = bn('<br data-mce-bogus="1">');
|
|
return (
|
|
n
|
|
? q(In(t), e => {
|
|
Hm(e) || Eo(e);
|
|
})
|
|
: xo(t),
|
|
yo(t, e),
|
|
I.some(Ji.before(e.dom))
|
|
);
|
|
}
|
|
return I.none();
|
|
})(e.schema, t, r)
|
|
)
|
|
.fold(
|
|
() => {
|
|
o && kh(e, t, l);
|
|
},
|
|
n => {
|
|
o && kh(e, t, I.some(n));
|
|
}
|
|
);
|
|
},
|
|
Nh = /[\u0591-\u07FF\uFB1D-\uFDFF\uFE70-\uFEFC]/,
|
|
Rh = (e, t) => En(Cn(t), vd(e)) && !Zr(e.schema, t) && e.dom.isEditable(t),
|
|
Ah = e => {
|
|
var t;
|
|
return (
|
|
"rtl" === fa.DOM.getStyle(e, "direction", !0) ||
|
|
(e => Nh.test(e))(null !== (t = e.textContent) && void 0 !== t ? t : "")
|
|
);
|
|
},
|
|
Th = (e, t, n) => {
|
|
const o = ((e, t, n) => Y(fa.DOM.getParents(n.container(), "*", t), e))(e, t, n);
|
|
return I.from(o[o.length - 1]);
|
|
},
|
|
Oh = (e, t) => {
|
|
const n = t.container(),
|
|
o = t.offset();
|
|
return e
|
|
? si(n)
|
|
? dr(n.nextSibling)
|
|
? Ji(n.nextSibling, 0)
|
|
: Ji.after(n)
|
|
: li(t)
|
|
? Ji(n, o + 1)
|
|
: t
|
|
: si(n)
|
|
? dr(n.previousSibling)
|
|
? Ji(n.previousSibling, n.previousSibling.data.length)
|
|
: Ji.before(n)
|
|
: di(t)
|
|
? Ji(n, o - 1)
|
|
: t;
|
|
},
|
|
Bh = T(Oh, !0),
|
|
Ph = T(Oh, !1),
|
|
Dh = (e, t) => {
|
|
const n = e => e.stopImmediatePropagation();
|
|
e.on("beforeinput input", n, !0), e.getDoc().execCommand(t), e.off("beforeinput input", n);
|
|
},
|
|
Lh = e => Dh(e, "Delete"),
|
|
Mh = e => qa(e) || Ka(e),
|
|
Ih = (e, t) =>
|
|
Sn(e, t)
|
|
? Jn(
|
|
t,
|
|
Mh,
|
|
(
|
|
e => t =>
|
|
Lt(Tn(t), e, _n)
|
|
)(e)
|
|
)
|
|
: I.none(),
|
|
Fh = (e, t = !0) => {
|
|
e.dom.isEmpty(e.getBody()) && e.setContent("", {no_selection: !t});
|
|
},
|
|
Uh = (e, t, n) =>
|
|
It($u(n), Vu(n), (o, r) => {
|
|
const s = Oh(!0, o),
|
|
a = Oh(!1, r),
|
|
i = Oh(!1, t);
|
|
return e
|
|
? ju(n, i).exists(e => e.isEqual(a) && t.isEqual(s))
|
|
: Hu(n, i).exists(e => e.isEqual(s) && t.isEqual(a));
|
|
}).getOr(!0),
|
|
zh = e => {
|
|
var t;
|
|
return (8 === Vt((t = e)) || "#comment" === $t(t) ? Pn(e) : zn(e)).bind(zh).orThunk(() => I.some(e));
|
|
},
|
|
jh = (e, t, n, o = !0) => {
|
|
var r;
|
|
t.deleteContents();
|
|
const s = zh(n).getOr(n),
|
|
a = Cn(null !== (r = e.dom.getParent(s.dom, e.dom.isBlock)) && void 0 !== r ? r : n.dom);
|
|
if (
|
|
(a.dom === e.getBody()
|
|
? Fh(e, o)
|
|
: Tr(e.schema, a, {checkRootAsContent: !1}) && (Qa(a), o && e.selection.setCursorLocation(a.dom, 0)),
|
|
!_n(n, a))
|
|
) {
|
|
const t = Lt(Tn(a), n)
|
|
? []
|
|
: Tn((i = a))
|
|
.map(In)
|
|
.map(e => Y(e, e => !_n(i, e)))
|
|
.getOr([]);
|
|
q(t.concat(In(n)), t => {
|
|
_n(t, a) || Sn(t, a) || !Tr(e.schema, t) || Eo(t);
|
|
});
|
|
}
|
|
var i;
|
|
},
|
|
Hh = e => zo(e, "td,th"),
|
|
$h = (e, t) => fm(Cn(e), t),
|
|
Vh = (e, t) => ({start: e, end: t}),
|
|
qh = kl([
|
|
{singleCellTable: ["rng", "cell"]},
|
|
{fullTable: ["table"]},
|
|
{partialTable: ["cells", "outsideDetails"]},
|
|
{multiTable: ["startTableCells", "endTableCells", "betweenRng"]}
|
|
]),
|
|
Wh = (e, t) => oo(Cn(e), "td,th", t),
|
|
Kh = e => !_n(e.start, e.end),
|
|
Yh = (e, t) => fm(e.start, t).bind(n => fm(e.end, t).bind(e => Ft(_n(n, e), n))),
|
|
Gh = e => t => Yh(t, e).map(e => ((e, t, n) => ({rng: e, table: t, cells: n}))(t, e, Hh(e))),
|
|
Xh = (e, t, n, o) => {
|
|
if (n.collapsed || !e.forall(Kh)) return I.none();
|
|
if (t.isSameTable) {
|
|
const t = e.bind(Gh(o));
|
|
return I.some({start: t, end: t});
|
|
}
|
|
{
|
|
const e = Wh(n.startContainer, o),
|
|
t = Wh(n.endContainer, o),
|
|
r = e
|
|
.bind(
|
|
(
|
|
e => t =>
|
|
fm(t, e).bind(e => de(Hh(e)).map(e => Vh(t, e)))
|
|
)(o)
|
|
)
|
|
.bind(Gh(o)),
|
|
s = t
|
|
.bind(
|
|
(
|
|
e => t =>
|
|
fm(t, e).bind(e => le(Hh(e)).map(e => Vh(e, t)))
|
|
)(o)
|
|
)
|
|
.bind(Gh(o));
|
|
return I.some({start: r, end: s});
|
|
}
|
|
},
|
|
Zh = (e, t) => J(e, e => _n(e, t)),
|
|
Qh = e => It(Zh(e.cells, e.rng.start), Zh(e.cells, e.rng.end), (t, n) => e.cells.slice(t, n + 1)),
|
|
Jh = (e, t) => {
|
|
const {startTable: n, endTable: o} = t,
|
|
r = e.cloneRange();
|
|
return n.each(e => r.setStartAfter(e.dom)), o.each(e => r.setEndBefore(e.dom)), r;
|
|
},
|
|
eb = (e, t) => {
|
|
const n = (
|
|
e => t =>
|
|
_n(e, t)
|
|
)(e),
|
|
o = ((e, t) => {
|
|
const n = Wh(e.startContainer, t),
|
|
o = Wh(e.endContainer, t);
|
|
return It(n, o, Vh);
|
|
})(t, n),
|
|
r = ((e, t) => {
|
|
const n = $h(e.startContainer, t),
|
|
o = $h(e.endContainer, t),
|
|
r = n.isSome(),
|
|
s = o.isSome(),
|
|
a = It(n, o, _n).getOr(!1);
|
|
return (e =>
|
|
It(e.startTable, e.endTable, (t, n) => {
|
|
const o = $o(t, e => _n(e, n)),
|
|
r = $o(n, e => _n(e, t));
|
|
return o || r
|
|
? {
|
|
...e,
|
|
startTable: o ? I.none() : e.startTable,
|
|
endTable: r ? I.none() : e.endTable,
|
|
isSameTable: !1,
|
|
isMultiTable: !1
|
|
}
|
|
: e;
|
|
}).getOr(e))({
|
|
startTable: n,
|
|
endTable: o,
|
|
isStartInTable: r,
|
|
isEndInTable: s,
|
|
isSameTable: a,
|
|
isMultiTable: !a && r && s
|
|
});
|
|
})(t, n);
|
|
return ((e, t, n) =>
|
|
e.exists(
|
|
e =>
|
|
((e, t) =>
|
|
!Kh(e) &&
|
|
Yh(e, t).exists(e => {
|
|
const t = e.dom.rows;
|
|
return 1 === t.length && 1 === t[0].cells.length;
|
|
}))(e, n) && hm(e.start, t)
|
|
))(o, t, n)
|
|
? o.map(e => qh.singleCellTable(t, e.start))
|
|
: r.isMultiTable
|
|
? ((e, t, n, o) =>
|
|
Xh(e, t, n, o).bind(({start: e, end: o}) => {
|
|
const r = e.bind(Qh).getOr([]),
|
|
s = o.bind(Qh).getOr([]);
|
|
if (r.length > 0 && s.length > 0) {
|
|
const e = Jh(n, t);
|
|
return I.some(qh.multiTable(r, s, e));
|
|
}
|
|
return I.none();
|
|
}))(o, r, t, n)
|
|
: ((e, t, n, o) =>
|
|
Xh(e, t, n, o)
|
|
.bind(({start: e, end: t}) => e.or(t))
|
|
.bind(e => {
|
|
const {isSameTable: o} = t,
|
|
r = Qh(e).getOr([]);
|
|
if (o && e.cells.length === r.length) return I.some(qh.fullTable(e.table));
|
|
if (r.length > 0) {
|
|
if (o) return I.some(qh.partialTable(r, I.none()));
|
|
{
|
|
const e = Jh(n, t);
|
|
return I.some(qh.partialTable(r, I.some({...t, rng: e})));
|
|
}
|
|
}
|
|
return I.none();
|
|
}))(o, r, t, n);
|
|
},
|
|
tb = e =>
|
|
q(e, e => {
|
|
rn(e, "contenteditable"), Qa(e);
|
|
}),
|
|
nb = (e, t, n, o) => {
|
|
const r = n.cloneRange();
|
|
o
|
|
? (r.setStart(n.startContainer, n.startOffset), r.setEndAfter(t.dom.lastChild))
|
|
: (r.setStartBefore(t.dom.firstChild), r.setEnd(n.endContainer, n.endOffset)),
|
|
ab(e, r, t, !1).each(e => e());
|
|
},
|
|
ob = e => {
|
|
const t = mm(e),
|
|
n = Cn(e.selection.getNode());
|
|
yr(n.dom) && Tr(e.schema, n) ? e.selection.setCursorLocation(n.dom, 0) : e.selection.collapse(!0),
|
|
t.length > 1 && $(t, e => _n(e, n)) && Jt(n, "data-mce-selected", "1");
|
|
},
|
|
rb = (e, t, n) =>
|
|
I.some(() => {
|
|
const o = e.selection.getRng(),
|
|
r = n
|
|
.bind(({rng: n, isStartInTable: r}) => {
|
|
const s = ((e, t) => I.from(e.dom.getParent(t, e.dom.isBlock)).map(Cn))(
|
|
e,
|
|
r ? n.endContainer : n.startContainer
|
|
);
|
|
n.deleteContents(),
|
|
((e, t, n) => {
|
|
n.each(n => {
|
|
t ? Eo(n) : (Qa(n), e.selection.setCursorLocation(n.dom, 0));
|
|
});
|
|
})(e, r, s.filter(T(Tr, e.schema)));
|
|
const a = r ? t[0] : t[t.length - 1];
|
|
return nb(e, a, o, r), Tr(e.schema, a) ? I.none() : I.some(r ? t.slice(1) : t.slice(0, -1));
|
|
})
|
|
.getOr(t);
|
|
tb(r), ob(e);
|
|
}),
|
|
sb = (e, t, n, o) =>
|
|
I.some(() => {
|
|
const r = e.selection.getRng(),
|
|
s = t[0],
|
|
a = n[n.length - 1];
|
|
nb(e, s, r, !0), nb(e, a, r, !1);
|
|
const i = Tr(e.schema, s) ? t : t.slice(1),
|
|
l = Tr(e.schema, a) ? n : n.slice(0, -1);
|
|
tb(i.concat(l)), o.deleteContents(), ob(e);
|
|
}),
|
|
ab = (e, t, n, o = !0) =>
|
|
I.some(() => {
|
|
jh(e, t, n, o);
|
|
}),
|
|
ib = (e, t) => I.some(() => Sh(e, !1, t)),
|
|
lb = (e, t) => Q(zp(t, e), Ga),
|
|
db = (e, t) => Q(zp(t, e), Zt("caption")),
|
|
cb = (e, t) =>
|
|
I.some(() => {
|
|
Qa(t), e.selection.setCursorLocation(t.dom, 0);
|
|
}),
|
|
ub = (e, t) => (e ? Lp(t) : Mp(t)),
|
|
mb = (e, t, n) => {
|
|
const o = Cn(e.getBody());
|
|
return db(o, n).fold(
|
|
() =>
|
|
((e, t, n, o) => {
|
|
const r = Ji.fromRangeStart(e.selection.getRng());
|
|
return lb(n, o).bind(o =>
|
|
Tr(e.schema, o, {checkRootAsContent: !1})
|
|
? cb(e, o)
|
|
: ((e, t, n, o, r) =>
|
|
Fu(n, e.getBody(), r).bind(e =>
|
|
lb(t, Cn(e.getNode())).bind(e => (_n(e, o) ? I.none() : I.some(k)))
|
|
))(e, n, t, o, r)
|
|
);
|
|
})(e, t, o, n).orThunk(() =>
|
|
Ft(
|
|
((e, t) => {
|
|
const n = Ji.fromRangeStart(e.selection.getRng());
|
|
return ub(t, n) || Iu(t, e.getBody(), n).exists(e => ub(t, e));
|
|
})(e, t),
|
|
k
|
|
)
|
|
),
|
|
n =>
|
|
((e, t, n, o) => {
|
|
const r = Ji.fromRangeStart(e.selection.getRng());
|
|
return Tr(e.schema, o)
|
|
? cb(e, o)
|
|
: ((e, t, n, o, r) =>
|
|
Fu(n, e.getBody(), r).fold(
|
|
() => I.some(k),
|
|
s =>
|
|
((e, t, n, o) =>
|
|
$u(e.dom)
|
|
.bind(r =>
|
|
Vu(e.dom).map(e => (t ? n.isEqual(r) && o.isEqual(e) : n.isEqual(e) && o.isEqual(r)))
|
|
)
|
|
.getOr(!0))(o, n, r, s)
|
|
? ((e, t) => cb(e, t))(e, o)
|
|
: ((e, t, n) =>
|
|
db(e, Cn(n.getNode())).fold(
|
|
() => I.some(k),
|
|
e => Ft(!_n(e, t), k)
|
|
))(t, o, s)
|
|
))(e, n, t, o, r);
|
|
})(e, t, o, n)
|
|
);
|
|
},
|
|
fb = (e, t) => {
|
|
const n = Cn(e.selection.getStart(!0)),
|
|
o = mm(e);
|
|
return e.selection.isCollapsed() && 0 === o.length
|
|
? mb(e, t, n)
|
|
: ((e, t, n) => {
|
|
const o = Cn(e.getBody()),
|
|
r = e.selection.getRng();
|
|
return 0 !== n.length
|
|
? rb(e, n, I.none())
|
|
: ((e, t, n, o) =>
|
|
db(t, o).fold(
|
|
() => ((e, t, n) => eb(t, n).bind(t => t.fold(T(ab, e), T(ib, e), T(rb, e), T(sb, e))))(e, t, n),
|
|
t => ((e, t) => cb(e, t))(e, t)
|
|
))(e, o, r, t);
|
|
})(e, n, o);
|
|
},
|
|
gb = (e, t) => {
|
|
let n = t;
|
|
for (; n && n !== e; ) {
|
|
if (br(n) || vr(n)) return n;
|
|
n = n.parentNode;
|
|
}
|
|
return null;
|
|
},
|
|
pb = ["data-ephox-", "data-mce-", "data-alloy-", "data-snooker-", "_"],
|
|
hb = Dt.each,
|
|
bb = e => {
|
|
const t = e.dom,
|
|
n = new Set(e.serializer.getTempAttrs()),
|
|
o = e => $(pb, t => $e(e, t)) || n.has(e);
|
|
return {
|
|
compare: (e, n) => {
|
|
if (e.nodeName !== n.nodeName || e.nodeType !== n.nodeType) return !1;
|
|
const r = e => {
|
|
const n = {};
|
|
return (
|
|
hb(t.getAttribs(e), r => {
|
|
const s = r.nodeName.toLowerCase();
|
|
"style" === s || o(s) || (n[s] = t.getAttrib(e, s));
|
|
}),
|
|
n
|
|
);
|
|
},
|
|
s = (e, t) => {
|
|
for (const n in e)
|
|
if (ke(e, n)) {
|
|
const o = t[n];
|
|
if (v(o)) return !1;
|
|
if (e[n] !== o) return !1;
|
|
delete t[n];
|
|
}
|
|
for (const e in t) if (ke(t, e)) return !1;
|
|
return !0;
|
|
};
|
|
if (er(e) && er(n)) {
|
|
if (!s(r(e), r(n))) return !1;
|
|
if (!s(t.parseStyle(t.getAttrib(e, "style")), t.parseStyle(t.getAttrib(n, "style")))) return !1;
|
|
}
|
|
return !sm(e) && !sm(n);
|
|
},
|
|
isAttributeInternal: o
|
|
};
|
|
},
|
|
vb = e => ["h1", "h2", "h3", "h4", "h5", "h6"].includes(e.name),
|
|
yb = (e, t, n, o) => {
|
|
const r = n.name;
|
|
for (let t = 0, s = e.length; t < s; t++) {
|
|
const s = e[t];
|
|
if (s.name === r) {
|
|
const e = o.nodes[r];
|
|
e ? e.nodes.push(n) : (o.nodes[r] = {filter: s, nodes: [n]});
|
|
}
|
|
}
|
|
if (n.attributes)
|
|
for (let e = 0, r = t.length; e < r; e++) {
|
|
const r = t[e],
|
|
s = r.name;
|
|
if (s in n.attributes.map) {
|
|
const e = o.attributes[s];
|
|
e ? e.nodes.push(n) : (o.attributes[s] = {filter: r, nodes: [n]});
|
|
}
|
|
}
|
|
},
|
|
Cb = (e, t) => {
|
|
const n = (e, n) => {
|
|
pe(e, e => {
|
|
const o = ce(e.nodes);
|
|
q(e.filter.callbacks, r => {
|
|
for (let t = o.length - 1; t >= 0; t--) {
|
|
const r = o[t];
|
|
((n ? void 0 !== r.attr(e.filter.name) : r.name === e.filter.name) && !y(r.parent)) || o.splice(t, 1);
|
|
}
|
|
o.length > 0 && r(o, e.filter.name, t);
|
|
});
|
|
});
|
|
};
|
|
n(e.nodes, !1), n(e.attributes, !0);
|
|
},
|
|
wb = (e, t, n, o = {}) => {
|
|
const r = ((e, t, n) => {
|
|
const o = {nodes: {}, attributes: {}};
|
|
return (
|
|
n.firstChild &&
|
|
((n, r) => {
|
|
let s = n;
|
|
for (; (s = s.walk()); ) yb(e, t, s, o);
|
|
})(n),
|
|
o
|
|
);
|
|
})(e, t, n);
|
|
Cb(r, o);
|
|
},
|
|
xb = (e, t, n, o) => {
|
|
if ((e.pad_empty_with_br || t.insert) && n(o)) {
|
|
const e = new ep("br", 1);
|
|
t.insert && e.attr("data-mce-bogus", "1"), o.empty().append(e);
|
|
} else o.empty().append(new ep("#text", 3)).value = Wo;
|
|
},
|
|
Eb = (e, t) => {
|
|
const n = null == e ? void 0 : e.firstChild;
|
|
return C(n) && n === e.lastChild && n.name === t;
|
|
},
|
|
kb = (e, t, n, o) =>
|
|
o.isEmpty(t, n, t =>
|
|
((e, t) => {
|
|
const n = e.getElementRule(t.name);
|
|
return !0 === (null == n ? void 0 : n.paddEmpty);
|
|
})(e, t)
|
|
),
|
|
_b = e => {
|
|
let t;
|
|
for (let n = e; n; n = n.parent) {
|
|
const e = n.attr("contenteditable");
|
|
if ("false" === e) break;
|
|
"true" === e && (t = n);
|
|
}
|
|
return I.from(t);
|
|
},
|
|
Sb = (e, t, n = e.parent) => {
|
|
if (t.getSpecialElements()[e.name]) e.empty().remove();
|
|
else {
|
|
const o = e.children();
|
|
for (const e of o) n && !t.isValidChild(n.name, e.name) && Sb(e, t, n);
|
|
e.unwrap();
|
|
}
|
|
},
|
|
Nb = (e, t, n, o = k) => {
|
|
const r = t.getTextBlockElements(),
|
|
s = t.getNonEmptyElements(),
|
|
a = t.getWhitespaceElements(),
|
|
i = Dt.makeMap("tr,td,th,tbody,thead,tfoot,table,summary"),
|
|
l = new Set(),
|
|
d = e => e !== n && !i[e.name];
|
|
for (let n = 0; n < e.length; n++) {
|
|
const i = e[n];
|
|
let c, u, m;
|
|
if (!i.parent || l.has(i)) continue;
|
|
if (r[i.name] && "li" === i.parent.name) {
|
|
let e = i.next;
|
|
for (; e && r[e.name]; ) (e.name = "li"), l.add(e), i.parent.insert(e, i.parent), (e = e.next);
|
|
i.unwrap();
|
|
continue;
|
|
}
|
|
const f = [i];
|
|
for (c = i.parent; c && !t.isValidChild(c.name, i.name) && d(c); c = c.parent) f.push(c);
|
|
if (c && f.length > 1)
|
|
if (Rb(t, i, c)) Sb(i, t);
|
|
else {
|
|
f.reverse(), (u = f[0].clone()), o(u);
|
|
let e = u;
|
|
for (let n = 0; n < f.length - 1; n++) {
|
|
t.isValidChild(e.name, f[n].name) && n > 0 ? ((m = f[n].clone()), o(m), e.append(m)) : (m = e);
|
|
for (let e = f[n].firstChild; e && e !== f[n + 1]; ) {
|
|
const t = e.next;
|
|
m.append(e), (e = t);
|
|
}
|
|
e = m;
|
|
}
|
|
kb(t, s, a, u) ? c.insert(i, f[0], !0) : (c.insert(u, f[0], !0), c.insert(i, u)),
|
|
(c = f[0]),
|
|
(kb(t, s, a, c) || Eb(c, "br")) && c.empty().remove();
|
|
}
|
|
else if (i.parent) {
|
|
if ("li" === i.name) {
|
|
let e = i.prev;
|
|
if (e && ("ul" === e.name || "ol" === e.name)) {
|
|
e.append(i);
|
|
continue;
|
|
}
|
|
if (((e = i.next), e && ("ul" === e.name || "ol" === e.name) && e.firstChild)) {
|
|
e.insert(i, e.firstChild, !0);
|
|
continue;
|
|
}
|
|
const t = new ep("ul", 1);
|
|
o(t), i.wrap(t);
|
|
continue;
|
|
}
|
|
if (t.isValidChild(i.parent.name, "div") && t.isValidChild("div", i.name)) {
|
|
const e = new ep("div", 1);
|
|
o(e), i.wrap(e);
|
|
} else Sb(i, t);
|
|
}
|
|
}
|
|
},
|
|
Rb = (e, t, n = t.parent) =>
|
|
!(
|
|
!n ||
|
|
((!e.children[t.name] || e.isValidChild(n.name, t.name)) &&
|
|
("a" !== t.name ||
|
|
!((e, t) => {
|
|
let n = e;
|
|
for (; n; ) {
|
|
if ("a" === n.name) return !0;
|
|
n = n.parent;
|
|
}
|
|
return !1;
|
|
})(n)) &&
|
|
(!(e => "summary" === e.name)(n) ||
|
|
!vb(t) ||
|
|
((null == n ? void 0 : n.firstChild) === t && (null == n ? void 0 : n.lastChild) === t)))
|
|
),
|
|
Ab = e =>
|
|
e.collapsed
|
|
? e
|
|
: (e => {
|
|
const t = Ji.fromRangeStart(e),
|
|
n = Ji.fromRangeEnd(e),
|
|
o = e.commonAncestorContainer;
|
|
return Iu(!1, o, n)
|
|
.map(r =>
|
|
!du(t, n, o) && du(t, r, o)
|
|
? ((e, t, n, o) => {
|
|
const r = document.createRange();
|
|
return r.setStart(e, t), r.setEnd(n, o), r;
|
|
})(t.container(), t.offset(), r.container(), r.offset())
|
|
: e
|
|
)
|
|
.getOr(e);
|
|
})(e),
|
|
Tb = (e, t) => {
|
|
let n = t.firstChild,
|
|
o = t.lastChild;
|
|
return (
|
|
n && "meta" === n.name && (n = n.next),
|
|
o && "mce_marker" === o.attr("id") && (o = o.prev),
|
|
((e, t) => {
|
|
const n = e.getNonEmptyElements();
|
|
return (
|
|
C(t) &&
|
|
(t.isEmpty(n) ||
|
|
((e, t) =>
|
|
e.getBlockElements()[t.name] &&
|
|
(e => C(e.firstChild) && e.firstChild === e.lastChild)(t) &&
|
|
(e => "br" === e.name || e.value === Wo)(t.firstChild))(e, t))
|
|
);
|
|
})(e, o) && (o = null == o ? void 0 : o.prev),
|
|
!(!n || n !== o || ("ul" !== n.name && "ol" !== n.name))
|
|
);
|
|
},
|
|
Ob = e => {
|
|
return e.length > 0 &&
|
|
(!(n = e[e.length - 1]).firstChild ||
|
|
(C(null == (t = n) ? void 0 : t.firstChild) &&
|
|
t.firstChild === t.lastChild &&
|
|
(e => e.data === Wo || pr(e))(t.firstChild)))
|
|
? e.slice(0, -1)
|
|
: e;
|
|
var t, n;
|
|
},
|
|
Bb = (e, t) => {
|
|
const n = e.getParent(t, e.isBlock);
|
|
return n && "LI" === n.nodeName ? n : null;
|
|
},
|
|
Pb = (e, t) => {
|
|
const n = Ji.after(e),
|
|
o = Pu(t).prev(n);
|
|
return o ? o.toRange() : null;
|
|
},
|
|
Db = (e, t, n, o) => {
|
|
const r = ((e, t, n) => {
|
|
const o = t.serialize(n);
|
|
return (e => {
|
|
var t, n;
|
|
const o = e.firstChild,
|
|
r = e.lastChild;
|
|
return (
|
|
o && "META" === o.nodeName && (null === (t = o.parentNode) || void 0 === t || t.removeChild(o)),
|
|
r && "mce_marker" === r.id && (null === (n = r.parentNode) || void 0 === n || n.removeChild(r)),
|
|
e
|
|
);
|
|
})(e.createFragment(o));
|
|
})(t, e, o),
|
|
s = Bb(t, n.startContainer),
|
|
a = Ob(
|
|
((i = r.firstChild),
|
|
Y(null !== (l = null == i ? void 0 : i.childNodes) && void 0 !== l ? l : [], e => "LI" === e.nodeName))
|
|
);
|
|
var i, l;
|
|
const d = t.getRoot(),
|
|
c = e => {
|
|
const o = Ji.fromRangeStart(n),
|
|
r = Pu(t.getRoot()),
|
|
a = 1 === e ? r.prev(o) : r.next(o),
|
|
i = null == a ? void 0 : a.getNode();
|
|
return !i || Bb(t, i) !== s;
|
|
};
|
|
return s
|
|
? c(1)
|
|
? ((e, t, n) => {
|
|
const o = e.parentNode;
|
|
return (
|
|
o &&
|
|
Dt.each(t, t => {
|
|
o.insertBefore(t, e);
|
|
}),
|
|
((e, t) => {
|
|
const n = Ji.before(e),
|
|
o = Pu(t).next(n);
|
|
return o ? o.toRange() : null;
|
|
})(e, n)
|
|
);
|
|
})(s, a, d)
|
|
: c(2)
|
|
? ((e, t, n, o) => (o.insertAfter(t.reverse(), e), Pb(t[0], n)))(s, a, d, t)
|
|
: ((e, t, n, o) => {
|
|
const r = ((e, t) => {
|
|
const n = t.cloneRange(),
|
|
o = t.cloneRange();
|
|
return n.setStartBefore(e), o.setEndAfter(e), [n.cloneContents(), o.cloneContents()];
|
|
})(e, o),
|
|
s = e.parentNode;
|
|
return (
|
|
s &&
|
|
(s.insertBefore(r[0], e),
|
|
Dt.each(t, t => {
|
|
s.insertBefore(t, e);
|
|
}),
|
|
s.insertBefore(r[1], e),
|
|
s.removeChild(e)),
|
|
Pb(t[t.length - 1], n)
|
|
);
|
|
})(s, a, d, n)
|
|
: null;
|
|
},
|
|
Lb = ["pre"],
|
|
Mb = yr,
|
|
Ib = (e, t, n) => {
|
|
var o, r;
|
|
const s = e.selection,
|
|
a = e.dom,
|
|
i = e.parser,
|
|
l = n.merge,
|
|
d = yp({validate: !0}, e.schema),
|
|
c = '<span id="mce_marker" data-mce-type="bookmark"></span>';
|
|
n.preserve_zwsp || (t = ti(t)),
|
|
-1 === t.indexOf("{$caret}") && (t += "{$caret}"),
|
|
(t = t.replace(/\{\$caret\}/, c));
|
|
let u = s.getRng();
|
|
const m = u.startContainer,
|
|
f = e.getBody();
|
|
m === f &&
|
|
s.isCollapsed() &&
|
|
a.isBlock(f.firstChild) &&
|
|
((e, t) => C(t) && !e.schema.getVoidElements()[t.nodeName])(e, f.firstChild) &&
|
|
a.isEmpty(f.firstChild) &&
|
|
((u = a.createRng()), u.setStart(f.firstChild, 0), u.setEnd(f.firstChild, 0), s.setRng(u)),
|
|
s.isCollapsed() ||
|
|
(e => {
|
|
const t = e.dom,
|
|
n = Ab(e.selection.getRng());
|
|
e.selection.setRng(n);
|
|
const o = t.getParent(n.startContainer, Mb);
|
|
((e, t, n) => !!C(n) && n === e.getParent(t.endContainer, Mb) && hm(Cn(n), t))(t, n, o)
|
|
? ab(e, n, Cn(o))
|
|
: n.startContainer === n.endContainer &&
|
|
n.endOffset - n.startOffset == 1 &&
|
|
dr(n.startContainer.childNodes[n.startOffset])
|
|
? n.deleteContents()
|
|
: e.getDoc().execCommand("Delete", !1);
|
|
})(e);
|
|
const g = s.getNode(),
|
|
p = {context: g.nodeName.toLowerCase(), data: n.data, insert: !0},
|
|
h = i.parse(t, p);
|
|
if (!0 === n.paste && Tb(e.schema, h) && ((e, t) => !!Bb(e, t))(a, g))
|
|
return (u = Db(d, a, s.getRng(), h)), u && s.setRng(u), t;
|
|
!0 === n.paste &&
|
|
((e, t, n, o) => {
|
|
var r;
|
|
const s = t.firstChild,
|
|
a = t.lastChild,
|
|
i = s === ("bookmark" === a.attr("data-mce-type") ? a.prev : a),
|
|
l = H(Lb, s.name);
|
|
if (i && l) {
|
|
const t = "false" !== s.attr("contenteditable"),
|
|
a =
|
|
(null === (r = e.getParent(n, e.isBlock)) || void 0 === r ? void 0 : r.nodeName.toLowerCase()) ===
|
|
s.name,
|
|
i = I.from(gb(o, n)).forall(br);
|
|
return t && a && i;
|
|
}
|
|
return !1;
|
|
})(a, h, g, e.getBody()) &&
|
|
(null === (o = h.firstChild) || void 0 === o || o.unwrap()),
|
|
(e => {
|
|
let t = e;
|
|
for (; (t = t.walk()); ) 1 === t.type && t.attr("data-mce-fragment", "1");
|
|
})(h);
|
|
let b = h.lastChild;
|
|
if (b && "mce_marker" === b.attr("id")) {
|
|
const t = b;
|
|
for (b = b.prev; b; b = b.walk(!0))
|
|
if (3 === b.type || !a.isBlock(b.name)) {
|
|
b.parent && e.schema.isValidChild(b.parent.name, "span") && b.parent.insert(t, b, "br" === b.name);
|
|
break;
|
|
}
|
|
}
|
|
if (
|
|
(e._selectionOverrides.showBlockCaretContainer(g),
|
|
p.invalid ||
|
|
((e, t, n) => {
|
|
var o;
|
|
return (
|
|
$(n.children(), vb) &&
|
|
"SUMMARY" === (null === (o = e.getParent(t, e.isBlock)) || void 0 === o ? void 0 : o.nodeName)
|
|
);
|
|
})(a, g, h))
|
|
) {
|
|
e.selection.setContent(c);
|
|
let n,
|
|
o = s.getNode();
|
|
const l = e.getBody();
|
|
for (fr(o) ? (o = n = l) : (n = o); n && n !== l; ) (o = n), (n = n.parentNode);
|
|
t = o === l ? l.innerHTML : a.getOuterHTML(o);
|
|
const u = i.parse(t),
|
|
m = (e => {
|
|
for (let t = e; t; t = t.walk()) if ("mce_marker" === t.attr("id")) return I.some(t);
|
|
return I.none();
|
|
})(u),
|
|
f = m.bind(_b).getOr(u);
|
|
m.each(e => e.replace(h));
|
|
const g = h.children(),
|
|
p = null !== (r = h.parent) && void 0 !== r ? r : u;
|
|
h.unwrap();
|
|
const b = Y(g, t => Rb(e.schema, t, p));
|
|
Nb(b, e.schema, f),
|
|
wb(i.getNodeFilters(), i.getAttributeFilters(), u),
|
|
(t = d.serialize(u)),
|
|
o === l ? a.setHTML(l, t) : a.setOuterHTML(o, t);
|
|
} else
|
|
(t = d.serialize(h)),
|
|
((e, t, n) => {
|
|
var o;
|
|
if ("all" === n.getAttribute("data-mce-bogus"))
|
|
null === (o = n.parentNode) || void 0 === o || o.insertBefore(e.dom.createFragment(t), n);
|
|
else {
|
|
const o = n.firstChild,
|
|
r = n.lastChild;
|
|
!o || (o === r && "BR" === o.nodeName) ? e.dom.setHTML(n, t) : e.selection.setContent(t, {no_events: !0});
|
|
}
|
|
})(e, t, g);
|
|
var v;
|
|
return (
|
|
((e, t) => {
|
|
const n = e.schema.getTextInlineElements(),
|
|
o = e.dom;
|
|
if (t) {
|
|
const t = e.getBody(),
|
|
r = bb(e);
|
|
Dt.each(o.select("*[data-mce-fragment]"), e => {
|
|
if (C(n[e.nodeName.toLowerCase()]) && ((e, t) => ne(xp(e, t), e => !(e => Cp.has(e))(e)))(o, e))
|
|
for (let n = e.parentElement; C(n) && n !== t && !Ep(o, e, n); n = n.parentElement)
|
|
if (r.compare(n, e)) {
|
|
o.remove(e, !0);
|
|
break;
|
|
}
|
|
});
|
|
}
|
|
})(e, l),
|
|
((e, t) => {
|
|
var n, o, r;
|
|
let s;
|
|
const a = e.dom,
|
|
i = e.selection;
|
|
if (!t) return;
|
|
i.scrollIntoView(t);
|
|
const l = gb(e.getBody(), t);
|
|
if (l && "false" === a.getContentEditable(l)) return a.remove(t), void i.select(l);
|
|
let d = a.createRng();
|
|
const c = t.previousSibling;
|
|
if (dr(c)) {
|
|
d.setStart(
|
|
c,
|
|
null !== (o = null === (n = c.nodeValue) || void 0 === n ? void 0 : n.length) && void 0 !== o ? o : 0
|
|
);
|
|
const e = t.nextSibling;
|
|
dr(e) && (c.appendData(e.data), null === (r = e.parentNode) || void 0 === r || r.removeChild(e));
|
|
} else d.setStartBefore(t), d.setEndBefore(t);
|
|
const u = a.getParent(t, a.isBlock);
|
|
if ((a.remove(t), u && a.isEmpty(u))) {
|
|
const t = Mb(u);
|
|
xo(Cn(u)),
|
|
d.setStart(u, 0),
|
|
d.setEnd(u, 0),
|
|
t ||
|
|
(e => !!e.getAttribute("data-mce-fragment"))(u) ||
|
|
!(s = (t => {
|
|
let n = Ji.fromRangeStart(t);
|
|
return (n = Pu(e.getBody()).next(n)), null == n ? void 0 : n.toRange();
|
|
})(d))
|
|
? a.add(u, a.create("br", t ? {} : {"data-mce-bogus": "1"}))
|
|
: ((d = s), a.remove(u));
|
|
}
|
|
i.setRng(d);
|
|
})(e, a.get("mce_marker")),
|
|
(v = e.getBody()),
|
|
Dt.each(v.getElementsByTagName("*"), e => {
|
|
e.removeAttribute("data-mce-fragment");
|
|
}),
|
|
((e, t, n) => {
|
|
I.from(e.getParent(t, "td,th"))
|
|
.map(Cn)
|
|
.each(e =>
|
|
((e, t) => {
|
|
zn(e).each(n => {
|
|
Pn(n).each(o => {
|
|
t.isBlock($t(e)) && Va(n) && t.isBlock($t(o)) && Eo(n);
|
|
});
|
|
});
|
|
})(e, n)
|
|
);
|
|
})(a, s.getStart(), e.schema),
|
|
((e, t, n) => {
|
|
const o = Bn(Cn(n), e => _n(e, Cn(t)));
|
|
ie(o, o.length - 2)
|
|
.filter(Kt)
|
|
.fold(
|
|
() => Wr(e, t),
|
|
t => Wr(e, t.dom)
|
|
);
|
|
})(e.schema, e.getBody(), s.getStart()),
|
|
t
|
|
);
|
|
},
|
|
Fb = e => e instanceof ep,
|
|
Ub = (e, t, n) => {
|
|
e.dom.setHTML(e.getBody(), t),
|
|
!0 !== n &&
|
|
(e => {
|
|
jg(e) &&
|
|
$u(e.getBody()).each(t => {
|
|
const n = t.getNode(),
|
|
o = ar(n) ? $u(n).getOr(t) : t;
|
|
e.selection.setRng(o.toRange());
|
|
});
|
|
})(e);
|
|
},
|
|
zb = e => (w(e) ? e : L),
|
|
jb = (e, t, n) => {
|
|
const o = t(e),
|
|
r = zb(n);
|
|
return o.orThunk(() =>
|
|
r(e)
|
|
? I.none()
|
|
: ((e, t, n) => {
|
|
let o = e.dom;
|
|
const r = zb(n);
|
|
for (; o.parentNode; ) {
|
|
o = o.parentNode;
|
|
const e = Cn(o),
|
|
n = t(e);
|
|
if (n.isSome()) return n;
|
|
if (r(e)) break;
|
|
}
|
|
return I.none();
|
|
})(e, t, r)
|
|
);
|
|
},
|
|
Hb = Om,
|
|
$b = (e, t, n) => {
|
|
const o = e.formatter.get(n);
|
|
if (o)
|
|
for (let n = 0; n < o.length; n++) {
|
|
const r = o[n];
|
|
if (Fm(r) && !1 === r.inherit && e.dom.is(t, r.selector)) return !0;
|
|
}
|
|
return !1;
|
|
},
|
|
Vb = (e, t, n, o, r) => {
|
|
const s = e.dom.getRoot();
|
|
if (t === s) return !1;
|
|
const a = e.dom.getParent(t, t => !!$b(e, t, n) || t.parentNode === s || !!Kb(e, t, n, o, !0));
|
|
return !!Kb(e, a, n, o, r);
|
|
},
|
|
qb = (e, t, n) =>
|
|
!(!Um(n) || !Hb(t, n.inline)) || !(!Im(n) || !Hb(t, n.block)) || (!!Fm(n) && er(t) && e.is(t, n.selector)),
|
|
Wb = (e, t, n, o, r, s) => {
|
|
const a = n[o],
|
|
i = "attributes" === o;
|
|
if (w(n.onmatch)) return n.onmatch(t, n, o);
|
|
if (a)
|
|
if (Ne(a)) {
|
|
for (let n = 0; n < a.length; n++) if (i ? e.getAttrib(t, a[n]) : Pm(e, t, a[n])) return !0;
|
|
} else
|
|
for (const o in a)
|
|
if (ke(a, o)) {
|
|
const l = i ? e.getAttrib(t, o) : Pm(e, t, o),
|
|
d = Tm(a[o], s),
|
|
c = y(l) || Xe(l);
|
|
if (c && y(d)) continue;
|
|
if (r && c && !n.exact) return !1;
|
|
if ((!r || n.exact) && !Hb(l, Bm(d, o))) return !1;
|
|
}
|
|
return !0;
|
|
},
|
|
Kb = (e, t, n, o, r) => {
|
|
const s = e.formatter.get(n),
|
|
a = e.dom;
|
|
if (s && er(t))
|
|
for (let n = 0; n < s.length; n++) {
|
|
const i = s[n];
|
|
if (qb(e.dom, t, i) && Wb(a, t, i, "attributes", r, o) && Wb(a, t, i, "styles", r, o)) {
|
|
const n = i.classes;
|
|
if (n) for (let r = 0; r < n.length; r++) if (!e.dom.hasClass(t, Tm(n[r], o))) return;
|
|
return i;
|
|
}
|
|
}
|
|
},
|
|
Yb = (e, t, n, o, r) => {
|
|
if (o) return Vb(e, o, t, n, r);
|
|
if (((o = e.selection.getNode()), Vb(e, o, t, n, r))) return !0;
|
|
const s = e.selection.getStart();
|
|
return !(s === o || !Vb(e, s, t, n, r));
|
|
},
|
|
Gb = Ja,
|
|
Xb = e => {
|
|
if (e) {
|
|
const t = new Vo(e, e);
|
|
for (let e = t.current(); e; e = t.next()) if (dr(e)) return e;
|
|
}
|
|
return null;
|
|
},
|
|
Zb = e => {
|
|
const t = vn("span");
|
|
return en(t, {id: qu, "data-mce-bogus": "1", "data-mce-type": "format-caret"}), e && yo(t, yn(Gb)), t;
|
|
},
|
|
Qb = (e, t, n) => {
|
|
const o = e.dom,
|
|
r = e.selection;
|
|
if (jm(t)) Sh(e, !1, Cn(t), n, !0);
|
|
else {
|
|
const e = r.getRng(),
|
|
n = o.getParent(t, o.isBlock),
|
|
s = e.startContainer,
|
|
a = e.startOffset,
|
|
i = e.endContainer,
|
|
l = e.endOffset,
|
|
d = (e => {
|
|
const t = Xb(e);
|
|
return t && t.data.charAt(0) === Gb && t.deleteData(0, 1), t;
|
|
})(t);
|
|
o.remove(t, !0),
|
|
s === d && a > 0 && e.setStart(d, a - 1),
|
|
i === d && l > 0 && e.setEnd(d, l - 1),
|
|
n && o.isEmpty(n) && Qa(Cn(n)),
|
|
r.setRng(e);
|
|
}
|
|
},
|
|
Jb = (e, t, n) => {
|
|
const o = e.dom,
|
|
r = e.selection;
|
|
if (t) Qb(e, t, n);
|
|
else if (!(t = Ku(e.getBody(), r.getStart()))) for (; (t = o.get(qu)); ) Qb(e, t, n);
|
|
},
|
|
ev = (e, t) => (e.appendChild(t), t),
|
|
tv = (e, t) => {
|
|
var n;
|
|
const o = G(e, (e, t) => ev(e, t.cloneNode(!1)), t),
|
|
r = null !== (n = o.ownerDocument) && void 0 !== n ? n : document;
|
|
return ev(o, r.createTextNode(Gb));
|
|
},
|
|
nv = (e, t, n, o) => {
|
|
const a = e.dom,
|
|
i = e.selection;
|
|
let l = !1;
|
|
const d = e.formatter.get(t);
|
|
if (!d) return;
|
|
const c = i.getRng(),
|
|
u = c.startContainer,
|
|
m = c.startOffset;
|
|
let f = u;
|
|
dr(u) && (m !== u.data.length && (l = !0), (f = f.parentNode));
|
|
const g = [];
|
|
let h;
|
|
for (; f; ) {
|
|
if (Kb(e, f, t, n, o)) {
|
|
h = f;
|
|
break;
|
|
}
|
|
f.nextSibling && (l = !0), g.push(f), (f = f.parentNode);
|
|
}
|
|
if (h)
|
|
if (l) {
|
|
const r = i.getBookmark();
|
|
c.collapse(!0);
|
|
let s = of(a, c, d, !0);
|
|
(s = Zf(s)), e.formatter.remove(t, n, s, o), i.moveToBookmark(r);
|
|
} else {
|
|
const l = Ku(e.getBody(), h),
|
|
d = C(l) ? a.getParents(h.parentNode, M, l) : [],
|
|
c = Zb(!1).dom;
|
|
((e, t, n) => {
|
|
var o, r;
|
|
const s = e.dom,
|
|
a = s.getParent(n, T(Sm, e.schema));
|
|
a && s.isEmpty(a)
|
|
? null === (o = n.parentNode) || void 0 === o || o.replaceChild(t, n)
|
|
: ((e => {
|
|
const t = zo(e, "br"),
|
|
n = Y(
|
|
(e => {
|
|
const t = [];
|
|
let n = e.dom;
|
|
for (; n; ) t.push(Cn(n)), (n = n.lastChild);
|
|
return t;
|
|
})(e).slice(-1),
|
|
Va
|
|
);
|
|
t.length === n.length && q(n, Eo);
|
|
})(Cn(n)),
|
|
s.isEmpty(n)
|
|
? null === (r = n.parentNode) || void 0 === r || r.replaceChild(t, n)
|
|
: s.insertAfter(t, n));
|
|
})(e, c, null != l ? l : h);
|
|
const u = ((e, t, n, o, a, i) => {
|
|
const l = e.formatter,
|
|
d = e.dom,
|
|
c = Y(fe(l.get()), e => e !== o && !He(e, "removeformat")),
|
|
u = ((e, t, n) =>
|
|
X(
|
|
n,
|
|
(n, o) => {
|
|
const r = ((e, t) =>
|
|
Mm(e, t, e => {
|
|
const t = e => w(e) || (e.length > 1 && "%" === e.charAt(0));
|
|
return $(["styles", "attributes"], n =>
|
|
Ee(e, n).exists(e => {
|
|
const n = p(e) ? e : xe(e);
|
|
return $(n, t);
|
|
})
|
|
);
|
|
}))(e, o);
|
|
return e.formatter.matchNode(t, o, {}, r) ? n.concat([o]) : n;
|
|
},
|
|
[]
|
|
))(e, n, c);
|
|
if (
|
|
Y(
|
|
u,
|
|
t =>
|
|
!((e, t, n) => {
|
|
const o = ["inline", "block", "selector", "attributes", "styles", "classes"],
|
|
a = e => Ce(e, (e, t) => $(o, e => e === t));
|
|
return Mm(e, t, t => {
|
|
const o = a(t);
|
|
return Mm(e, n, e => {
|
|
const t = a(e);
|
|
return ((e, t, n = s) => r(n).eq(e, t))(o, t);
|
|
});
|
|
});
|
|
})(e, t, o)
|
|
).length > 0
|
|
) {
|
|
const e = n.cloneNode(!1);
|
|
return d.add(t, e), l.remove(o, a, e, i), d.remove(e), I.some(e);
|
|
}
|
|
return I.none();
|
|
})(e, c, h, t, n, o),
|
|
m = tv([...g, ...u.toArray(), ...d], c);
|
|
l && Qb(e, l, C(l)), i.setCursorLocation(m, 1), a.isEmpty(h) && a.remove(h);
|
|
}
|
|
},
|
|
ov = e => {
|
|
const t = Zb(!1),
|
|
n = tv(e, t.dom);
|
|
return {caretContainer: t, caretPosition: Ji(n, 0)};
|
|
},
|
|
rv = (e, t) => {
|
|
const {caretContainer: n, caretPosition: o} = ov(t);
|
|
return ho(Cn(e), n), Eo(Cn(e)), o;
|
|
},
|
|
sv = (e, t) => {
|
|
if (Wu(t.dom)) return !1;
|
|
const n = e.schema.getTextInlineElements();
|
|
return ke(n, $t(t)) && !Wu(t.dom) && !sr(t.dom);
|
|
},
|
|
av = {},
|
|
iv = or(["pre"]);
|
|
((e, t) => {
|
|
av[e] || (av[e] = []),
|
|
av[e].push(e => {
|
|
if (!e.selection.getRng().collapsed) {
|
|
const t = e.selection.getSelectedBlocks(),
|
|
n = Y(
|
|
Y(t, iv),
|
|
(e => t => {
|
|
const n = t.previousSibling;
|
|
return iv(n) && H(e, n);
|
|
})(t)
|
|
);
|
|
q(n, e => {
|
|
((e, t) => {
|
|
const n = Cn(t),
|
|
o = Rn(n).dom;
|
|
Eo(n), wo(Cn(e), [vn("br", o), vn("br", o), ...In(n)]);
|
|
})(e.previousSibling, e);
|
|
});
|
|
}
|
|
});
|
|
})("pre");
|
|
const lv = ["fontWeight", "fontStyle", "color", "fontSize", "fontFamily"],
|
|
dv = (e, t) => {
|
|
const n = e.get(t);
|
|
return p(n)
|
|
? Q(n, e => Um(e) && "span" === e.inline && (e => f(e.styles) && $(fe(e.styles), e => H(lv, e)))(e))
|
|
: I.none();
|
|
},
|
|
cv = (e, t) => Hu(t, Ji.fromRangeStart(e)).isNone(),
|
|
uv = (e, t) => !1 === ju(t, Ji.fromRangeEnd(e)).exists(e => !pr(e.getNode()) || ju(t, e).isSome()),
|
|
mv = e => t => xr(t) && e.isEditable(t),
|
|
fv = e => Y(e.getSelectedBlocks(), mv(e.dom)),
|
|
gv = Dt.each,
|
|
pv = e => er(e) && !sm(e) && !Wu(e) && !sr(e),
|
|
hv = (e, t) => {
|
|
for (let n = e; n; n = n[t]) {
|
|
if (dr(n) && Ge(n.data)) return e;
|
|
if (er(n) && !sm(n)) return n;
|
|
}
|
|
return e;
|
|
},
|
|
bv = (e, t, n) => {
|
|
const o = bb(e),
|
|
r = tr(t) && e.dom.isEditable(t),
|
|
s = tr(n) && e.dom.isEditable(n);
|
|
if (r && s) {
|
|
const r = hv(t, "previousSibling"),
|
|
s = hv(n, "nextSibling");
|
|
if (o.compare(r, s)) {
|
|
for (let e = r.nextSibling; e && e !== s; ) {
|
|
const t = e;
|
|
(e = e.nextSibling), r.appendChild(t);
|
|
}
|
|
return (
|
|
e.dom.remove(s),
|
|
Dt.each(Dt.grep(s.childNodes), e => {
|
|
r.appendChild(e);
|
|
}),
|
|
r
|
|
);
|
|
}
|
|
}
|
|
return n;
|
|
},
|
|
vv = (e, t, n, o) => {
|
|
var r;
|
|
if (o && !1 !== t.merge_siblings) {
|
|
const t = null !== (r = bv(e, _m(o), o)) && void 0 !== r ? r : o;
|
|
bv(e, t, _m(t, !0));
|
|
}
|
|
},
|
|
yv = (e, t, n) => {
|
|
gv(e.childNodes, e => {
|
|
pv(e) && (t(e) && n(e), e.hasChildNodes() && yv(e, t, n));
|
|
});
|
|
},
|
|
Cv = (e, t) => n => !(!n || !Pm(e, n, t)),
|
|
wv = (e, t, n) => o => {
|
|
e.setStyle(o, t, n),
|
|
"" === o.getAttribute("style") && o.removeAttribute("style"),
|
|
((e, t) => {
|
|
"SPAN" === t.nodeName && 0 === e.getAttribs(t).length && e.remove(t, !0);
|
|
})(e, o);
|
|
},
|
|
xv = kl([{keep: []}, {rename: ["name"]}, {removed: []}]),
|
|
Ev = /^(src|href|style)$/,
|
|
kv = Dt.each,
|
|
_v = Om,
|
|
Sv = (e, t, n) => e.isChildOf(t, n) && t !== n && !e.isBlock(n),
|
|
Nv = (e, t, n) => {
|
|
let o = t[n ? "startContainer" : "endContainer"],
|
|
r = t[n ? "startOffset" : "endOffset"];
|
|
if (er(o)) {
|
|
const e = o.childNodes.length - 1;
|
|
!n && r && r--, (o = o.childNodes[r > e ? e : r]);
|
|
}
|
|
return (
|
|
dr(o) && n && r >= o.data.length && (o = new Vo(o, e.getBody()).next() || o),
|
|
dr(o) && !n && 0 === r && (o = new Vo(o, e.getBody()).prev() || o),
|
|
o
|
|
);
|
|
},
|
|
Rv = (e, t) => {
|
|
const n = t ? "firstChild" : "lastChild",
|
|
o = e[n];
|
|
return (e => /^(TR|TH|TD)$/.test(e.nodeName))(e) && o ? ("TR" === e.nodeName && o[n]) || o : e;
|
|
},
|
|
Av = (e, t, n, o) => {
|
|
var r;
|
|
const s = e.create(n, o);
|
|
return null === (r = t.parentNode) || void 0 === r || r.insertBefore(s, t), s.appendChild(t), s;
|
|
},
|
|
Tv = (e, t, n, o, r) => {
|
|
const s = Cn(t),
|
|
a = Cn(e.create(o, r)),
|
|
i = n ? Mn(s) : Ln(s);
|
|
return wo(a, i), n ? (ho(s, a), vo(a, s)) : (bo(s, a), yo(a, s)), a.dom;
|
|
},
|
|
Ov = (e, t, n) => {
|
|
const o = t.parentNode;
|
|
let r;
|
|
const s = e.dom,
|
|
a = Wl(e);
|
|
Im(n) &&
|
|
o === s.getRoot() &&
|
|
((n.list_block && _v(t, n.list_block)) ||
|
|
q(ce(t.childNodes), t => {
|
|
Nm(e, a, t.nodeName.toLowerCase())
|
|
? r
|
|
? r.appendChild(t)
|
|
: ((r = Av(s, t, a)), s.setAttribs(r, Kl(e)))
|
|
: (r = null);
|
|
})),
|
|
((e => Fm(e) && Um(e) && Lt(Ee(e, "mixed"), !0))(n) && !_v(n.inline, t)) || s.remove(t, !0);
|
|
},
|
|
Bv = (e, t, n) => (x(e) ? {name: t, value: null} : {name: e, value: Tm(t, n)}),
|
|
Pv = (e, t) => {
|
|
"" === e.getAttrib(t, "style") && (t.removeAttribute("style"), t.removeAttribute("data-mce-style"));
|
|
},
|
|
Dv = (e, t, n, o, r) => {
|
|
let s = !1;
|
|
kv(n.styles, (a, i) => {
|
|
const {name: l, value: d} = Bv(i, a, o),
|
|
c = Bm(d, l);
|
|
(n.remove_similar || h(d) || !er(r) || _v(Pm(e, r, l), c)) && e.setStyle(t, l, ""), (s = !0);
|
|
}),
|
|
s && Pv(e, t);
|
|
},
|
|
Lv = (e, t, n, o, r) => {
|
|
const s = e.dom,
|
|
a = bb(e),
|
|
i = e.schema;
|
|
if (Um(t) && Gr(i, t.inline) && Zr(i, o) && o.parentElement === e.getBody()) return Ov(e, o, t), xv.removed();
|
|
if (!t.ceFalseOverride && o && "false" === s.getContentEditableParent(o)) return xv.keep();
|
|
if (o && !qb(s, o, t) && !((e, t) => t.links && "A" === e.nodeName)(o, t)) return xv.keep();
|
|
const l = o,
|
|
d = t.preserve_attributes;
|
|
if (Um(t) && "all" === t.remove && p(d)) {
|
|
const e = Y(s.getAttribs(l), e => H(d, e.name.toLowerCase()));
|
|
if ((s.removeAllAttribs(l), q(e, e => s.setAttrib(l, e.name, e.value)), e.length > 0)) return xv.rename("span");
|
|
}
|
|
if ("all" !== t.remove) {
|
|
Dv(s, l, t, n, r),
|
|
kv(t.attributes, (e, o) => {
|
|
const {name: a, value: i} = Bv(o, e, n);
|
|
if (t.remove_similar || h(i) || !er(r) || _v(s.getAttrib(r, a), i)) {
|
|
if ("class" === a) {
|
|
const e = s.getAttrib(l, a);
|
|
if (e) {
|
|
let t = "";
|
|
if (
|
|
(q(e.split(/\s+/), e => {
|
|
/mce\-\w+/.test(e) && (t += (t ? " " : "") + e);
|
|
}),
|
|
t)
|
|
)
|
|
return void s.setAttrib(l, a, t);
|
|
}
|
|
}
|
|
if (
|
|
(Ev.test(a) && l.removeAttribute("data-mce-" + a),
|
|
"style" === a && or(["li"])(l) && "none" === s.getStyle(l, "list-style-type"))
|
|
)
|
|
return l.removeAttribute(a), void s.setStyle(l, "list-style-type", "none");
|
|
"class" === a && l.removeAttribute("className"), l.removeAttribute(a);
|
|
}
|
|
}),
|
|
kv(t.classes, e => {
|
|
(e = Tm(e, n)), (er(r) && !s.hasClass(r, e)) || s.removeClass(l, e);
|
|
});
|
|
const e = s.getAttribs(l);
|
|
for (let t = 0; t < e.length; t++) {
|
|
const n = e[t].nodeName;
|
|
if (!a.isAttributeInternal(n)) return xv.keep();
|
|
}
|
|
}
|
|
return "none" !== t.remove ? (Ov(e, l, t), xv.removed()) : xv.keep();
|
|
},
|
|
Mv = (e, t, n, o) =>
|
|
Lv(e, t, n, o, o).fold(N(o), t => (e.dom.createFragment().appendChild(o), e.dom.rename(o, t)), N(null)),
|
|
Iv = (e, t, n, o, r) => {
|
|
(o || e.selection.isEditable()) &&
|
|
((e, t, n, o, r) => {
|
|
const s = e.formatter.get(t),
|
|
a = s[0],
|
|
i = e.dom,
|
|
l = e.selection,
|
|
d = o => {
|
|
const i = ((e, t, n, o, r) => {
|
|
let s;
|
|
return (
|
|
t.parentNode &&
|
|
q(Lm(e.dom, t.parentNode).reverse(), t => {
|
|
if (!s && er(t) && "_start" !== t.id && "_end" !== t.id) {
|
|
const a = Kb(e, t, n, o, r);
|
|
a && !1 !== a.split && (s = t);
|
|
}
|
|
}),
|
|
s
|
|
);
|
|
})(e, o, t, n, r);
|
|
return ((e, t, n, o, r, s, a, i) => {
|
|
var l, d;
|
|
let c, u;
|
|
const m = e.dom;
|
|
if (n) {
|
|
const s = n.parentNode;
|
|
for (let n = o.parentNode; n && n !== s; n = n.parentNode) {
|
|
let o = m.clone(n, !1);
|
|
for (let n = 0; n < t.length && ((o = Mv(e, t[n], i, o)), null !== o); n++);
|
|
o && (c && o.appendChild(c), u || (u = o), (c = o));
|
|
}
|
|
(a.mixed && m.isBlock(n)) || (o = null !== (l = m.split(n, o)) && void 0 !== l ? l : o),
|
|
c &&
|
|
u &&
|
|
(null === (d = r.parentNode) || void 0 === d || d.insertBefore(c, r),
|
|
u.appendChild(r),
|
|
Um(a) && vv(e, a, 0, c));
|
|
}
|
|
return o;
|
|
})(e, s, i, o, o, 0, a, n);
|
|
},
|
|
c = t => $(s, o => Fv(e, o, n, t, t)),
|
|
u = t => {
|
|
const n = ce(t.childNodes),
|
|
o = c(t) || $(s, e => qb(i, t, e)),
|
|
r = t.parentNode;
|
|
if ((!o && C(r) && zm(a) && c(r), a.deep && n.length)) for (let e = 0; e < n.length; e++) u(n[e]);
|
|
q(["underline", "line-through", "overline"], n => {
|
|
er(t) &&
|
|
e.dom.getStyle(t, "text-decoration") === n &&
|
|
t.parentNode &&
|
|
Dm(i, t.parentNode) === n &&
|
|
Fv(e, {deep: !1, exact: !0, inline: "span", styles: {textDecoration: n}}, void 0, t);
|
|
});
|
|
},
|
|
m = e => {
|
|
const t = i.get(e ? "_start" : "_end");
|
|
if (t) {
|
|
let n = t[e ? "firstChild" : "lastChild"];
|
|
return (
|
|
(e => sm(e) && er(e) && ("_start" === e.id || "_end" === e.id))(n) &&
|
|
(n = n[e ? "firstChild" : "lastChild"]),
|
|
dr(n) &&
|
|
0 === n.data.length &&
|
|
(n = e ? t.previousSibling || t.nextSibling : t.nextSibling || t.previousSibling),
|
|
i.remove(t, !0),
|
|
n
|
|
);
|
|
}
|
|
return null;
|
|
},
|
|
f = t => {
|
|
let n,
|
|
o,
|
|
r = of(i, t, s, t.collapsed);
|
|
if (a.split) {
|
|
if (((r = Zf(r)), (n = Nv(e, r, !0)), (o = Nv(e, r)), n !== o)) {
|
|
if (((n = Rv(n, !0)), (o = Rv(o, !1)), Sv(i, n, o))) {
|
|
const e = I.from(n.firstChild).getOr(n);
|
|
return d(Tv(i, e, !0, "span", {id: "_start", "data-mce-type": "bookmark"})), void m(!0);
|
|
}
|
|
if (Sv(i, o, n)) {
|
|
const e = I.from(o.lastChild).getOr(o);
|
|
return d(Tv(i, e, !1, "span", {id: "_end", "data-mce-type": "bookmark"})), void m(!1);
|
|
}
|
|
(n = Av(i, n, "span", {id: "_start", "data-mce-type": "bookmark"})),
|
|
(o = Av(i, o, "span", {id: "_end", "data-mce-type": "bookmark"}));
|
|
const e = i.createRng();
|
|
e.setStartAfter(n),
|
|
e.setEndBefore(o),
|
|
rf(i, e, e => {
|
|
q(e, e => {
|
|
sm(e) || sm(e.parentNode) || d(e);
|
|
});
|
|
}),
|
|
d(n),
|
|
d(o),
|
|
(n = m(!0)),
|
|
(o = m());
|
|
} else n = o = d(n);
|
|
(r.startContainer = n.parentNode ? n.parentNode : n),
|
|
(r.startOffset = i.nodeIndex(n)),
|
|
(r.endContainer = o.parentNode ? o.parentNode : o),
|
|
(r.endOffset = i.nodeIndex(o) + 1);
|
|
}
|
|
rf(i, r, e => {
|
|
q(e, u);
|
|
});
|
|
};
|
|
if (o) {
|
|
if (wm(o)) {
|
|
const e = i.createRng();
|
|
e.setStartBefore(o), e.setEndAfter(o), f(e);
|
|
} else f(o);
|
|
pf(e, t, o, n);
|
|
} else
|
|
l.isCollapsed() && Um(a) && !mm(e).length
|
|
? nv(e, t, n, r)
|
|
: (Em(
|
|
e,
|
|
() => ym(e, f),
|
|
o => Um(a) && Yb(e, t, n, o)
|
|
),
|
|
e.nodeChanged()),
|
|
((e, t, n) => {
|
|
"removeformat" === t
|
|
? q(fv(e.selection), t => {
|
|
q(lv, n => e.dom.setStyle(t, n, "")), Pv(e.dom, t);
|
|
})
|
|
: dv(e.formatter, t).each(t => {
|
|
q(fv(e.selection), o => Dv(e.dom, o, t, n, null));
|
|
});
|
|
})(e, t, n),
|
|
pf(e, t, o, n);
|
|
})(e, t, n, o, r);
|
|
},
|
|
Fv = (e, t, n, o, r) => Lv(e, t, n, o, r).fold(L, t => (e.dom.rename(o, t), !0), M),
|
|
Uv = Dt.each,
|
|
zv = Dt.each,
|
|
jv = (e, t, n, o) => {
|
|
if (
|
|
(zv(n.styles, (n, r) => {
|
|
e.setStyle(t, r, Tm(n, o));
|
|
}),
|
|
n.styles)
|
|
) {
|
|
const n = e.getAttrib(t, "style");
|
|
n && e.setAttrib(t, "data-mce-style", n);
|
|
}
|
|
},
|
|
Hv = (e, t, n, o) => {
|
|
const r = e.formatter.get(t),
|
|
s = r[0],
|
|
a = !o && e.selection.isCollapsed(),
|
|
i = e.dom,
|
|
l = e.selection,
|
|
d = (e, t = s) => {
|
|
w(t.onformat) && t.onformat(e, t, n, o),
|
|
jv(i, e, t, n),
|
|
zv(t.attributes, (t, o) => {
|
|
i.setAttrib(e, o, Tm(t, n));
|
|
}),
|
|
zv(t.classes, t => {
|
|
const o = Tm(t, n);
|
|
i.hasClass(e, o) || i.addClass(e, o);
|
|
});
|
|
},
|
|
c = (e, t) => {
|
|
let n = !1;
|
|
return (
|
|
zv(
|
|
e,
|
|
e =>
|
|
!(
|
|
!Fm(e) ||
|
|
(("false" !== i.getContentEditable(t) || e.ceFalseOverride) &&
|
|
(!C(e.collapsed) || e.collapsed === a) &&
|
|
i.is(t, e.selector) &&
|
|
!Wu(t) &&
|
|
(d(t, e), (n = !0), 1))
|
|
)
|
|
),
|
|
n
|
|
);
|
|
},
|
|
u = e => {
|
|
if (m(e)) {
|
|
const t = i.create(e);
|
|
return d(t), t;
|
|
}
|
|
return null;
|
|
},
|
|
f = (o, a, i) => {
|
|
const l = [];
|
|
let m = !0;
|
|
const f = s.inline || s.block,
|
|
g = u(f);
|
|
rf(o, a, a => {
|
|
let u;
|
|
const p = a => {
|
|
let h = !1,
|
|
b = m,
|
|
v = !1;
|
|
const y = a.parentNode,
|
|
w = y.nodeName.toLowerCase(),
|
|
x = o.getContentEditable(a);
|
|
C(x) && ((b = m), (m = "true" === x), (h = !0), (v = Am(e, a)));
|
|
const E = m && !h;
|
|
if (
|
|
pr(a) &&
|
|
!((e, t, n, o) => {
|
|
if (Od(e) && Um(t) && n.parentNode) {
|
|
const t = Ms(e.schema),
|
|
r = Ho(Cn(n), e => Wu(e.dom));
|
|
return _e(t, o) && Ar(e.schema, n.parentNode, {skipBogus: !1, includeZwsp: !0}) && !r;
|
|
}
|
|
return !1;
|
|
})(e, s, a, w)
|
|
)
|
|
return (u = null), void (Im(s) && o.remove(a));
|
|
if ((o => (e => Im(e) && !0 === e.wrapper)(s) && Kb(e, o, t, n))(a)) u = null;
|
|
else {
|
|
if (
|
|
((t, n, o) => {
|
|
const r = (e => Im(e) && !0 !== e.wrapper)(s) && Sm(e.schema, t) && Nm(e, n, f);
|
|
return o && r;
|
|
})(a, w, E)
|
|
) {
|
|
const e = o.rename(a, f);
|
|
return d(e), l.push(e), void (u = null);
|
|
}
|
|
if (Fm(s)) {
|
|
let e = c(r, a);
|
|
if ((!e && C(y) && zm(s) && (e = c(r, y)), !Um(s) || e)) return void (u = null);
|
|
}
|
|
C(g) &&
|
|
((t, n, r, a) => {
|
|
const l = t.nodeName.toLowerCase(),
|
|
d = Nm(e, f, l) && Nm(e, n, f),
|
|
c = !i && dr(t) && ei(t.data),
|
|
u = Wu(t),
|
|
m = !Um(s) || !o.isBlock(t);
|
|
return (r || a) && d && !c && !u && m;
|
|
})(a, w, E, v)
|
|
? (u || ((u = o.clone(g, !1)), y.insertBefore(u, a), l.push(u)), v && h && (m = b), u.appendChild(a))
|
|
: ((u = null), q(ce(a.childNodes), p), h && (m = b), (u = null));
|
|
}
|
|
};
|
|
q(a, p);
|
|
}),
|
|
!0 === s.links &&
|
|
q(l, e => {
|
|
const t = e => {
|
|
"A" === e.nodeName && d(e, s), q(ce(e.childNodes), t);
|
|
};
|
|
t(e);
|
|
}),
|
|
q(l, a => {
|
|
const i = (e => {
|
|
let t = 0;
|
|
return (
|
|
q(e.childNodes, e => {
|
|
(e => C(e) && dr(e) && 0 === e.length)(e) || sm(e) || t++;
|
|
}),
|
|
t
|
|
);
|
|
})(a);
|
|
(!(l.length > 1) && o.isBlock(a)) || 0 !== i
|
|
? (Um(s) || (Im(s) && s.wrapper)) &&
|
|
(s.exact ||
|
|
1 !== i ||
|
|
(a = (e => {
|
|
const t = Q(e.childNodes, xm).filter(e => "false" !== o.getContentEditable(e) && qb(o, e, s));
|
|
return t
|
|
.map(t => {
|
|
const n = o.clone(t, !1);
|
|
return d(n), o.replace(n, e, !0), o.remove(t, !0), n;
|
|
})
|
|
.getOr(e);
|
|
})(a)),
|
|
((e, t, n, o) => {
|
|
Uv(t, t => {
|
|
Um(t) &&
|
|
Uv(e.dom.select(t.inline, o), o => {
|
|
pv(o) && Fv(e, t, n, o, t.exact ? o : null);
|
|
}),
|
|
((e, t, n) => {
|
|
if (t.clear_child_styles) {
|
|
const o = t.links ? "*:not(a)" : "*";
|
|
gv(e.select(o, n), n => {
|
|
pv(n) &&
|
|
e.isEditable(n) &&
|
|
gv(t.styles, (t, o) => {
|
|
e.setStyle(n, o, "");
|
|
});
|
|
});
|
|
}
|
|
})(e.dom, t, o);
|
|
});
|
|
})(e, r, n, a),
|
|
((e, t, n, o, r) => {
|
|
const s = r.parentNode;
|
|
(Kb(e, s, n, o) && Fv(e, t, o, r)) ||
|
|
(t.merge_with_parents && s && e.dom.getParent(s, s => !!Kb(e, s, n, o) && (Fv(e, t, o, r), !0)));
|
|
})(e, s, t, n, a),
|
|
((e, t, n, o) => {
|
|
if (t.styles && t.styles.backgroundColor) {
|
|
const r = Cv(e, "fontSize");
|
|
yv(o, t => r(t) && e.isEditable(t), wv(e, "backgroundColor", Tm(t.styles.backgroundColor, n)));
|
|
}
|
|
})(o, s, n, a),
|
|
((e, t, n, o) => {
|
|
const r = t => {
|
|
if (tr(t) && er(t.parentNode) && e.isEditable(t)) {
|
|
const n = Dm(e, t.parentNode);
|
|
e.getStyle(t, "color") && n
|
|
? e.setStyle(t, "text-decoration", n)
|
|
: e.getStyle(t, "text-decoration") === n && e.setStyle(t, "text-decoration", null);
|
|
}
|
|
};
|
|
t.styles && (t.styles.color || t.styles.textDecoration) && (Dt.walk(o, r, "childNodes"), r(o));
|
|
})(o, s, 0, a),
|
|
((e, t, n, o) => {
|
|
if (Um(t) && ("sub" === t.inline || "sup" === t.inline)) {
|
|
const n = Cv(e, "fontSize");
|
|
yv(o, t => n(t) && e.isEditable(t), wv(e, "fontSize", ""));
|
|
const r = Y(e.select("sup" === t.inline ? "sub" : "sup", o), e.isEditable);
|
|
e.remove(r, !0);
|
|
}
|
|
})(o, s, 0, a),
|
|
vv(e, s, 0, a))
|
|
: o.remove(a, !0);
|
|
});
|
|
},
|
|
g = wm(o) ? o : l.getNode();
|
|
if ("false" === i.getContentEditable(g) && !Am(e, g)) return c(r, (o = g)), void gf(e, t, o, n);
|
|
if (s) {
|
|
if (o)
|
|
if (wm(o)) {
|
|
if (!c(r, o)) {
|
|
const e = i.createRng();
|
|
e.setStartBefore(o), e.setEndAfter(o), f(i, of(i, e, r), !0);
|
|
}
|
|
} else f(i, o, !0);
|
|
else
|
|
a && Um(s) && !mm(e).length
|
|
? ((e, t, n) => {
|
|
let o;
|
|
const r = e.selection,
|
|
s = e.formatter.get(t);
|
|
if (!s) return;
|
|
const a = r.getRng();
|
|
let i = a.startOffset;
|
|
const l = a.startContainer.nodeValue;
|
|
o = Ku(e.getBody(), r.getStart());
|
|
const d = /[^\s\u00a0\u00ad\u200b\ufeff]/;
|
|
if (l && i > 0 && i < l.length && d.test(l.charAt(i)) && d.test(l.charAt(i - 1))) {
|
|
const o = r.getBookmark();
|
|
a.collapse(!0);
|
|
let i = of(e.dom, a, s);
|
|
(i = Zf(i)), e.formatter.apply(t, n, i), r.moveToBookmark(o);
|
|
} else {
|
|
let s = o ? Xb(o) : null;
|
|
(o && (null == s ? void 0 : s.data) === Gb) ||
|
|
((c = e.getDoc()),
|
|
(u = Zb(!0).dom),
|
|
(o = c.importNode(u, !0)),
|
|
(s = o.firstChild),
|
|
a.insertNode(o),
|
|
(i = 1)),
|
|
e.formatter.apply(t, n, o),
|
|
r.setCursorLocation(s, i);
|
|
}
|
|
var c, u;
|
|
})(e, t, n)
|
|
: (l.setRng(Ab(l.getRng())),
|
|
Em(
|
|
e,
|
|
() => {
|
|
ym(e, (e, t) => {
|
|
const n = t ? e : of(i, e, r);
|
|
f(i, n, !1);
|
|
});
|
|
},
|
|
M
|
|
),
|
|
e.nodeChanged()),
|
|
dv(e.formatter, t).each(t => {
|
|
q(
|
|
(e =>
|
|
Y(
|
|
(e => {
|
|
const t = e.getSelectedBlocks(),
|
|
n = e.getRng();
|
|
if (e.isCollapsed()) return [];
|
|
if (1 === t.length) return cv(n, t[0]) && uv(n, t[0]) ? t : [];
|
|
{
|
|
const e = le(t)
|
|
.filter(e => cv(n, e))
|
|
.toArray(),
|
|
o = de(t)
|
|
.filter(e => uv(n, e))
|
|
.toArray(),
|
|
r = t.slice(1, -1);
|
|
return e.concat(r).concat(o);
|
|
}
|
|
})(e),
|
|
mv(e.dom)
|
|
))(e.selection),
|
|
e => jv(i, e, t, n)
|
|
);
|
|
});
|
|
((e, t) => {
|
|
ke(av, e) &&
|
|
q(av[e], e => {
|
|
e(t);
|
|
});
|
|
})(t, e);
|
|
}
|
|
gf(e, t, o, n);
|
|
},
|
|
$v = (e, t, n, o) => {
|
|
(o || e.selection.isEditable()) && Hv(e, t, n, o);
|
|
},
|
|
Vv = e => ke(e, "vars"),
|
|
qv = e => e.selection.getStart(),
|
|
Wv = (e, t, n, o, r) =>
|
|
Z(
|
|
t,
|
|
t => {
|
|
const s = e.formatter.matchNode(t, n, null != r ? r : {}, o);
|
|
return !v(s);
|
|
},
|
|
t => !!$b(e, t, n) || (!o && C(e.formatter.matchNode(t, n, r, !0)))
|
|
),
|
|
Kv = (e, t) => {
|
|
const n = null != t ? t : qv(e);
|
|
return Y(Lm(e.dom, n), e => er(e) && !sr(e));
|
|
},
|
|
Yv = (e, t, n) => {
|
|
const o = Kv(e, t);
|
|
pe(n, (n, r) => {
|
|
const s = n => {
|
|
const s = Wv(e, o, r, n.similar, Vv(n) ? n.vars : void 0),
|
|
a = s.isSome();
|
|
if (n.state.get() !== a) {
|
|
n.state.set(a);
|
|
const e = s.getOr(t);
|
|
Vv(n)
|
|
? n.callback(a, {node: e, format: r, parents: o})
|
|
: q(n.callbacks, t => t(a, {node: e, format: r, parents: o}));
|
|
}
|
|
};
|
|
q([n.withSimilar, n.withoutSimilar], s), q(n.withVars, s);
|
|
});
|
|
},
|
|
Gv = Dt.explode,
|
|
Xv = () => {
|
|
const e = {};
|
|
return {
|
|
addFilter: (t, n) => {
|
|
q(Gv(t), t => {
|
|
ke(e, t) || (e[t] = {name: t, callbacks: []}), e[t].callbacks.push(n);
|
|
});
|
|
},
|
|
getFilters: () => xe(e),
|
|
removeFilter: (t, n) => {
|
|
q(Gv(t), t => {
|
|
if (ke(e, t))
|
|
if (C(n)) {
|
|
const o = e[t],
|
|
r = Y(o.callbacks, e => e !== n);
|
|
r.length > 0 ? (o.callbacks = r) : delete e[t];
|
|
} else delete e[t];
|
|
});
|
|
}
|
|
};
|
|
},
|
|
Zv = (e, t, n) => {
|
|
var o;
|
|
const r = Ys();
|
|
t.convert_fonts_to_spans &&
|
|
((e, t, n) => {
|
|
e.addNodeFilter("font", e => {
|
|
q(e, e => {
|
|
const o = t.parse(e.attr("style")),
|
|
r = e.attr("color"),
|
|
s = e.attr("face"),
|
|
a = e.attr("size");
|
|
r && (o.color = r),
|
|
s && (o["font-family"] = s),
|
|
a &&
|
|
Ze(a).each(e => {
|
|
o["font-size"] = n[e - 1];
|
|
}),
|
|
(e.name = "span"),
|
|
e.attr("style", t.serialize(o)),
|
|
((e, t) => {
|
|
q(["color", "face", "size"], t => {
|
|
e.attr(t, null);
|
|
});
|
|
})(e);
|
|
});
|
|
});
|
|
})(e, r, Dt.explode(null !== (o = t.font_size_legacy_values) && void 0 !== o ? o : "")),
|
|
((e, t, n) => {
|
|
e.addNodeFilter("strike", e => {
|
|
const o = "html4" !== t.type;
|
|
q(e, e => {
|
|
if (o) e.name = "s";
|
|
else {
|
|
const t = n.parse(e.attr("style"));
|
|
(t["text-decoration"] = "line-through"), (e.name = "span"), e.attr("style", n.serialize(t));
|
|
}
|
|
});
|
|
});
|
|
})(e, n, r);
|
|
},
|
|
Qv = e => {
|
|
const [t, ...n] = e.split(","),
|
|
o = n.join(","),
|
|
r = /data:([^/]+\/[^;]+)(;.+)?/.exec(t);
|
|
if (r) {
|
|
const e = ";base64" === r[2],
|
|
t = e
|
|
? (e => {
|
|
const t = /([a-z0-9+\/=\s]+)/i.exec(e);
|
|
return t ? t[1] : "";
|
|
})(o)
|
|
: decodeURIComponent(o);
|
|
return I.some({type: r[1], data: t, base64Encoded: e});
|
|
}
|
|
return I.none();
|
|
},
|
|
Jv = (e, t, n = !0) => {
|
|
let o = t;
|
|
if (n)
|
|
try {
|
|
o = atob(t);
|
|
} catch (e) {
|
|
return I.none();
|
|
}
|
|
const r = new Uint8Array(o.length);
|
|
for (let e = 0; e < r.length; e++) r[e] = o.charCodeAt(e);
|
|
return I.some(new Blob([r], {type: e}));
|
|
},
|
|
ey = e =>
|
|
new Promise((t, n) => {
|
|
const o = new FileReader();
|
|
(o.onloadend = () => {
|
|
t(o.result);
|
|
}),
|
|
(o.onerror = () => {
|
|
var e;
|
|
n(null === (e = o.error) || void 0 === e ? void 0 : e.message);
|
|
}),
|
|
o.readAsDataURL(e);
|
|
});
|
|
let ty = 0;
|
|
const ny = (e, t, n) =>
|
|
Qv(e).bind(({data: e, type: o, base64Encoded: r}) => {
|
|
if (t && !r) return I.none();
|
|
{
|
|
const t = r ? e : btoa(e);
|
|
return n(t, o);
|
|
}
|
|
}),
|
|
oy = (e, t, n) => {
|
|
const o = e.create("blobid" + ty++, t, n);
|
|
return e.add(o), o;
|
|
},
|
|
ry = (e, t, n = !1) => ny(t, n, (t, n) => I.from(e.getByData(t, n)).orThunk(() => Jv(n, t).map(n => oy(e, n, t)))),
|
|
sy =
|
|
/^(?:(?:(?:[A-Za-z][A-Za-z\d.+-]{0,14}:\/\/(?:[-.~*+=!&;:'%@?^${}(),\w]+@)?|www\.|[-;:&=+$,.\w]+@)([A-Za-z\d-]+(?:\.[A-Za-z\d-]+)*))(?::\d+)?(?:\/(?:[-.~*+=!;:'%@$(),\/\w]*[-~*+=%@$()\/\w])?)?(?:\?(?:[-.~*+=!&;:'%@?^${}(),\/\w]+)?)?(?:#(?:[-.~*+=!&;:'%@?^${}(),\/\w]+)?)?)$/,
|
|
ay = e =>
|
|
I.from(e.match(sy))
|
|
.bind(e => ie(e, 1))
|
|
.map(e => ($e(e, "www.") ? e.substring(4) : e)),
|
|
iy = (e, t) => {
|
|
I.from(e.attr("src"))
|
|
.bind(ay)
|
|
.forall(e => !H(t, e)) && e.attr("sandbox", "");
|
|
},
|
|
ly = (e, t) => $e(e, `${t}/`),
|
|
{entries: dy, setPrototypeOf: cy, isFrozen: uy, getPrototypeOf: my, getOwnPropertyDescriptor: fy} = Object;
|
|
let {freeze: gy, seal: py, create: hy} = Object,
|
|
{apply: by, construct: vy} = "undefined" != typeof Reflect && Reflect;
|
|
by ||
|
|
(by = function (e, t, n) {
|
|
return e.apply(t, n);
|
|
}),
|
|
gy ||
|
|
(gy = function (e) {
|
|
return e;
|
|
}),
|
|
py ||
|
|
(py = function (e) {
|
|
return e;
|
|
}),
|
|
vy ||
|
|
(vy = function (e, t) {
|
|
return new e(...t);
|
|
});
|
|
const yy = Oy(Array.prototype.forEach),
|
|
Cy = Oy(Array.prototype.pop),
|
|
wy = Oy(Array.prototype.push),
|
|
xy = Oy(String.prototype.toLowerCase),
|
|
Ey = Oy(String.prototype.toString),
|
|
ky = Oy(String.prototype.match),
|
|
_y = Oy(String.prototype.replace),
|
|
Sy = Oy(String.prototype.indexOf),
|
|
Ny = Oy(String.prototype.trim),
|
|
Ry = Oy(RegExp.prototype.test),
|
|
Ay =
|
|
((Ty = TypeError),
|
|
function () {
|
|
for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n];
|
|
return vy(Ty, t);
|
|
});
|
|
var Ty;
|
|
function Oy(e) {
|
|
return function (t) {
|
|
for (var n = arguments.length, o = new Array(n > 1 ? n - 1 : 0), r = 1; r < n; r++) o[r - 1] = arguments[r];
|
|
return by(e, t, o);
|
|
};
|
|
}
|
|
function By(e, t, n) {
|
|
var o;
|
|
(n = null !== (o = n) && void 0 !== o ? o : xy), cy && cy(e, null);
|
|
let r = t.length;
|
|
for (; r--; ) {
|
|
let o = t[r];
|
|
if ("string" == typeof o) {
|
|
const e = n(o);
|
|
e !== o && (uy(t) || (t[r] = e), (o = e));
|
|
}
|
|
e[o] = !0;
|
|
}
|
|
return e;
|
|
}
|
|
function Py(e) {
|
|
const t = hy(null);
|
|
for (const [n, o] of dy(e)) t[n] = o;
|
|
return t;
|
|
}
|
|
function Dy(e, t) {
|
|
for (; null !== e; ) {
|
|
const n = fy(e, t);
|
|
if (n) {
|
|
if (n.get) return Oy(n.get);
|
|
if ("function" == typeof n.value) return Oy(n.value);
|
|
}
|
|
e = my(e);
|
|
}
|
|
return function (e) {
|
|
return console.warn("fallback value for", e), null;
|
|
};
|
|
}
|
|
const Ly = gy([
|
|
"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",
|
|
"dialog",
|
|
"dir",
|
|
"div",
|
|
"dl",
|
|
"dt",
|
|
"element",
|
|
"em",
|
|
"fieldset",
|
|
"figcaption",
|
|
"figure",
|
|
"font",
|
|
"footer",
|
|
"form",
|
|
"h1",
|
|
"h2",
|
|
"h3",
|
|
"h4",
|
|
"h5",
|
|
"h6",
|
|
"head",
|
|
"header",
|
|
"hgroup",
|
|
"hr",
|
|
"html",
|
|
"i",
|
|
"img",
|
|
"input",
|
|
"ins",
|
|
"kbd",
|
|
"label",
|
|
"legend",
|
|
"li",
|
|
"main",
|
|
"map",
|
|
"mark",
|
|
"marquee",
|
|
"menu",
|
|
"menuitem",
|
|
"meter",
|
|
"nav",
|
|
"nobr",
|
|
"ol",
|
|
"optgroup",
|
|
"option",
|
|
"output",
|
|
"p",
|
|
"picture",
|
|
"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"
|
|
]),
|
|
My = gy([
|
|
"svg",
|
|
"a",
|
|
"altglyph",
|
|
"altglyphdef",
|
|
"altglyphitem",
|
|
"animatecolor",
|
|
"animatemotion",
|
|
"animatetransform",
|
|
"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",
|
|
"view",
|
|
"vkern"
|
|
]),
|
|
Iy = gy([
|
|
"feBlend",
|
|
"feColorMatrix",
|
|
"feComponentTransfer",
|
|
"feComposite",
|
|
"feConvolveMatrix",
|
|
"feDiffuseLighting",
|
|
"feDisplacementMap",
|
|
"feDistantLight",
|
|
"feDropShadow",
|
|
"feFlood",
|
|
"feFuncA",
|
|
"feFuncB",
|
|
"feFuncG",
|
|
"feFuncR",
|
|
"feGaussianBlur",
|
|
"feImage",
|
|
"feMerge",
|
|
"feMergeNode",
|
|
"feMorphology",
|
|
"feOffset",
|
|
"fePointLight",
|
|
"feSpecularLighting",
|
|
"feSpotLight",
|
|
"feTile",
|
|
"feTurbulence"
|
|
]),
|
|
Fy = gy([
|
|
"animate",
|
|
"color-profile",
|
|
"cursor",
|
|
"discard",
|
|
"font-face",
|
|
"font-face-format",
|
|
"font-face-name",
|
|
"font-face-src",
|
|
"font-face-uri",
|
|
"foreignobject",
|
|
"hatch",
|
|
"hatchpath",
|
|
"mesh",
|
|
"meshgradient",
|
|
"meshpatch",
|
|
"meshrow",
|
|
"missing-glyph",
|
|
"script",
|
|
"set",
|
|
"solidcolor",
|
|
"unknown",
|
|
"use"
|
|
]),
|
|
Uy = gy([
|
|
"math",
|
|
"menclose",
|
|
"merror",
|
|
"mfenced",
|
|
"mfrac",
|
|
"mglyph",
|
|
"mi",
|
|
"mlabeledtr",
|
|
"mmultiscripts",
|
|
"mn",
|
|
"mo",
|
|
"mover",
|
|
"mpadded",
|
|
"mphantom",
|
|
"mroot",
|
|
"mrow",
|
|
"ms",
|
|
"mspace",
|
|
"msqrt",
|
|
"mstyle",
|
|
"msub",
|
|
"msup",
|
|
"msubsup",
|
|
"mtable",
|
|
"mtd",
|
|
"mtext",
|
|
"mtr",
|
|
"munder",
|
|
"munderover",
|
|
"mprescripts"
|
|
]),
|
|
zy = gy([
|
|
"maction",
|
|
"maligngroup",
|
|
"malignmark",
|
|
"mlongdiv",
|
|
"mscarries",
|
|
"mscarry",
|
|
"msgroup",
|
|
"mstack",
|
|
"msline",
|
|
"msrow",
|
|
"semantics",
|
|
"annotation",
|
|
"annotation-xml",
|
|
"mprescripts",
|
|
"none"
|
|
]),
|
|
jy = gy(["#text"]),
|
|
Hy = gy([
|
|
"accept",
|
|
"action",
|
|
"align",
|
|
"alt",
|
|
"autocapitalize",
|
|
"autocomplete",
|
|
"autopictureinpicture",
|
|
"autoplay",
|
|
"background",
|
|
"bgcolor",
|
|
"border",
|
|
"capture",
|
|
"cellpadding",
|
|
"cellspacing",
|
|
"checked",
|
|
"cite",
|
|
"class",
|
|
"clear",
|
|
"color",
|
|
"cols",
|
|
"colspan",
|
|
"controls",
|
|
"controlslist",
|
|
"coords",
|
|
"crossorigin",
|
|
"datetime",
|
|
"decoding",
|
|
"default",
|
|
"dir",
|
|
"disabled",
|
|
"disablepictureinpicture",
|
|
"disableremoteplayback",
|
|
"download",
|
|
"draggable",
|
|
"enctype",
|
|
"enterkeyhint",
|
|
"face",
|
|
"for",
|
|
"headers",
|
|
"height",
|
|
"hidden",
|
|
"high",
|
|
"href",
|
|
"hreflang",
|
|
"id",
|
|
"inputmode",
|
|
"integrity",
|
|
"ismap",
|
|
"kind",
|
|
"label",
|
|
"lang",
|
|
"list",
|
|
"loading",
|
|
"loop",
|
|
"low",
|
|
"max",
|
|
"maxlength",
|
|
"media",
|
|
"method",
|
|
"min",
|
|
"minlength",
|
|
"multiple",
|
|
"muted",
|
|
"name",
|
|
"nonce",
|
|
"noshade",
|
|
"novalidate",
|
|
"nowrap",
|
|
"open",
|
|
"optimum",
|
|
"pattern",
|
|
"placeholder",
|
|
"playsinline",
|
|
"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",
|
|
"translate",
|
|
"type",
|
|
"usemap",
|
|
"valign",
|
|
"value",
|
|
"width",
|
|
"xmlns",
|
|
"slot"
|
|
]),
|
|
$y = gy([
|
|
"accent-height",
|
|
"accumulate",
|
|
"additive",
|
|
"alignment-baseline",
|
|
"ascent",
|
|
"attributename",
|
|
"attributetype",
|
|
"azimuth",
|
|
"basefrequency",
|
|
"baseline-shift",
|
|
"begin",
|
|
"bias",
|
|
"by",
|
|
"class",
|
|
"clip",
|
|
"clippathunits",
|
|
"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",
|
|
"filterunits",
|
|
"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",
|
|
"primitiveunits",
|
|
"r",
|
|
"rx",
|
|
"ry",
|
|
"radius",
|
|
"refx",
|
|
"refy",
|
|
"repeatcount",
|
|
"repeatdur",
|
|
"restart",
|
|
"result",
|
|
"rotate",
|
|
"scale",
|
|
"seed",
|
|
"shape-rendering",
|
|
"specularconstant",
|
|
"specularexponent",
|
|
"spreadmethod",
|
|
"startoffset",
|
|
"stddeviation",
|
|
"stitchtiles",
|
|
"stop-color",
|
|
"stop-opacity",
|
|
"stroke-dasharray",
|
|
"stroke-dashoffset",
|
|
"stroke-linecap",
|
|
"stroke-linejoin",
|
|
"stroke-miterlimit",
|
|
"stroke-opacity",
|
|
"stroke",
|
|
"stroke-width",
|
|
"style",
|
|
"surfacescale",
|
|
"systemlanguage",
|
|
"tabindex",
|
|
"targetx",
|
|
"targety",
|
|
"transform",
|
|
"transform-origin",
|
|
"text-anchor",
|
|
"text-decoration",
|
|
"text-rendering",
|
|
"textlength",
|
|
"type",
|
|
"u1",
|
|
"u2",
|
|
"unicode",
|
|
"values",
|
|
"viewbox",
|
|
"visibility",
|
|
"version",
|
|
"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"
|
|
]),
|
|
Vy = gy([
|
|
"accent",
|
|
"accentunder",
|
|
"align",
|
|
"bevelled",
|
|
"close",
|
|
"columnsalign",
|
|
"columnlines",
|
|
"columnspan",
|
|
"denomalign",
|
|
"depth",
|
|
"dir",
|
|
"display",
|
|
"displaystyle",
|
|
"encoding",
|
|
"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"
|
|
]),
|
|
qy = gy(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]),
|
|
Wy = py(/\{\{[\w\W]*|[\w\W]*\}\}/gm),
|
|
Ky = py(/<%[\w\W]*|[\w\W]*%>/gm),
|
|
Yy = py(/\${[\w\W]*}/gm),
|
|
Gy = py(/^data-[\-\w.\u00B7-\uFFFF]/),
|
|
Xy = py(/^aria-[\-\w]+$/),
|
|
Zy = py(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),
|
|
Qy = py(/^(?:\w+script|data):/i),
|
|
Jy = py(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),
|
|
eC = py(/^html$/i);
|
|
var tC = Object.freeze({
|
|
__proto__: null,
|
|
MUSTACHE_EXPR: Wy,
|
|
ERB_EXPR: Ky,
|
|
TMPLIT_EXPR: Yy,
|
|
DATA_ATTR: Gy,
|
|
ARIA_ATTR: Xy,
|
|
IS_ALLOWED_URI: Zy,
|
|
IS_SCRIPT_OR_DATA: Qy,
|
|
ATTR_WHITESPACE: Jy,
|
|
DOCTYPE_NAME: eC
|
|
});
|
|
const nC = () => ("undefined" == typeof window ? null : window);
|
|
var oC = (function e() {
|
|
let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : nC();
|
|
const n = t => e(t);
|
|
if (((n.version = "3.0.5"), (n.removed = []), !t || !t.document || 9 !== t.document.nodeType))
|
|
return (n.isSupported = !1), n;
|
|
const o = t.document,
|
|
r = o.currentScript;
|
|
let {document: s} = t;
|
|
const {
|
|
DocumentFragment: a,
|
|
HTMLTemplateElement: i,
|
|
Node: l,
|
|
Element: d,
|
|
NodeFilter: c,
|
|
NamedNodeMap: u = t.NamedNodeMap || t.MozNamedAttrMap,
|
|
HTMLFormElement: m,
|
|
DOMParser: f,
|
|
trustedTypes: g
|
|
} = t,
|
|
p = d.prototype,
|
|
h = Dy(p, "cloneNode"),
|
|
b = Dy(p, "nextSibling"),
|
|
v = Dy(p, "childNodes"),
|
|
y = Dy(p, "parentNode");
|
|
if ("function" == typeof i) {
|
|
const e = s.createElement("template");
|
|
e.content && e.content.ownerDocument && (s = e.content.ownerDocument);
|
|
}
|
|
let C,
|
|
w = "";
|
|
const {implementation: x, createNodeIterator: E, createDocumentFragment: k, getElementsByTagName: _} = s,
|
|
{importNode: S} = o;
|
|
let N = {};
|
|
n.isSupported = "function" == typeof dy && "function" == typeof y && x && void 0 !== x.createHTMLDocument;
|
|
const {
|
|
MUSTACHE_EXPR: R,
|
|
ERB_EXPR: A,
|
|
TMPLIT_EXPR: T,
|
|
DATA_ATTR: O,
|
|
ARIA_ATTR: B,
|
|
IS_SCRIPT_OR_DATA: P,
|
|
ATTR_WHITESPACE: D
|
|
} = tC;
|
|
let {IS_ALLOWED_URI: L} = tC,
|
|
M = null;
|
|
const I = By({}, [...Ly, ...My, ...Iy, ...Uy, ...jy]);
|
|
let F = null;
|
|
const U = By({}, [...Hy, ...$y, ...Vy, ...qy]);
|
|
let z = Object.seal(
|
|
Object.create(null, {
|
|
tagNameCheck: {writable: !0, configurable: !1, enumerable: !0, value: null},
|
|
attributeNameCheck: {writable: !0, configurable: !1, enumerable: !0, value: null},
|
|
allowCustomizedBuiltInElements: {writable: !0, configurable: !1, enumerable: !0, value: !1}
|
|
})
|
|
),
|
|
j = null,
|
|
H = null,
|
|
$ = !0,
|
|
V = !0,
|
|
q = !1,
|
|
W = !0,
|
|
K = !1,
|
|
Y = !1,
|
|
G = !1,
|
|
X = !1,
|
|
Z = !1,
|
|
Q = !1,
|
|
J = !1,
|
|
ee = !0,
|
|
te = !1,
|
|
ne = !0,
|
|
oe = !1,
|
|
re = {},
|
|
se = null;
|
|
const ae = By({}, [
|
|
"annotation-xml",
|
|
"audio",
|
|
"colgroup",
|
|
"desc",
|
|
"foreignobject",
|
|
"head",
|
|
"iframe",
|
|
"math",
|
|
"mi",
|
|
"mn",
|
|
"mo",
|
|
"ms",
|
|
"mtext",
|
|
"noembed",
|
|
"noframes",
|
|
"noscript",
|
|
"plaintext",
|
|
"script",
|
|
"style",
|
|
"svg",
|
|
"template",
|
|
"thead",
|
|
"title",
|
|
"video",
|
|
"xmp"
|
|
]);
|
|
let ie = null;
|
|
const le = By({}, ["audio", "video", "img", "source", "image", "track"]);
|
|
let de = null;
|
|
const ce = By({}, [
|
|
"alt",
|
|
"class",
|
|
"for",
|
|
"id",
|
|
"label",
|
|
"name",
|
|
"pattern",
|
|
"placeholder",
|
|
"role",
|
|
"summary",
|
|
"title",
|
|
"value",
|
|
"style",
|
|
"xmlns"
|
|
]),
|
|
ue = "http://www.w3.org/1998/Math/MathML",
|
|
me = "http://www.w3.org/2000/svg",
|
|
fe = "http://www.w3.org/1999/xhtml";
|
|
let ge = fe,
|
|
pe = !1,
|
|
he = null;
|
|
const be = By({}, [ue, me, fe], Ey);
|
|
let ve;
|
|
const ye = ["application/xhtml+xml", "text/html"];
|
|
let Ce,
|
|
we = null;
|
|
const xe = s.createElement("form"),
|
|
Ee = function (e) {
|
|
return e instanceof RegExp || e instanceof Function;
|
|
},
|
|
ke = function (e) {
|
|
if (!we || we !== e) {
|
|
if (
|
|
((e && "object" == typeof e) || (e = {}),
|
|
(e = Py(e)),
|
|
(ve = ve = -1 === ye.indexOf(e.PARSER_MEDIA_TYPE) ? "text/html" : e.PARSER_MEDIA_TYPE),
|
|
(Ce = "application/xhtml+xml" === ve ? Ey : xy),
|
|
(M = "ALLOWED_TAGS" in e ? By({}, e.ALLOWED_TAGS, Ce) : I),
|
|
(F = "ALLOWED_ATTR" in e ? By({}, e.ALLOWED_ATTR, Ce) : U),
|
|
(he = "ALLOWED_NAMESPACES" in e ? By({}, e.ALLOWED_NAMESPACES, Ey) : be),
|
|
(de = "ADD_URI_SAFE_ATTR" in e ? By(Py(ce), e.ADD_URI_SAFE_ATTR, Ce) : ce),
|
|
(ie = "ADD_DATA_URI_TAGS" in e ? By(Py(le), e.ADD_DATA_URI_TAGS, Ce) : le),
|
|
(se = "FORBID_CONTENTS" in e ? By({}, e.FORBID_CONTENTS, Ce) : ae),
|
|
(j = "FORBID_TAGS" in e ? By({}, e.FORBID_TAGS, Ce) : {}),
|
|
(H = "FORBID_ATTR" in e ? By({}, e.FORBID_ATTR, Ce) : {}),
|
|
(re = "USE_PROFILES" in e && e.USE_PROFILES),
|
|
($ = !1 !== e.ALLOW_ARIA_ATTR),
|
|
(V = !1 !== e.ALLOW_DATA_ATTR),
|
|
(q = e.ALLOW_UNKNOWN_PROTOCOLS || !1),
|
|
(W = !1 !== e.ALLOW_SELF_CLOSE_IN_ATTR),
|
|
(K = e.SAFE_FOR_TEMPLATES || !1),
|
|
(Y = e.WHOLE_DOCUMENT || !1),
|
|
(Z = e.RETURN_DOM || !1),
|
|
(Q = e.RETURN_DOM_FRAGMENT || !1),
|
|
(J = e.RETURN_TRUSTED_TYPE || !1),
|
|
(X = e.FORCE_BODY || !1),
|
|
(ee = !1 !== e.SANITIZE_DOM),
|
|
(te = e.SANITIZE_NAMED_PROPS || !1),
|
|
(ne = !1 !== e.KEEP_CONTENT),
|
|
(oe = e.IN_PLACE || !1),
|
|
(L = e.ALLOWED_URI_REGEXP || Zy),
|
|
(ge = e.NAMESPACE || fe),
|
|
(z = e.CUSTOM_ELEMENT_HANDLING || {}),
|
|
e.CUSTOM_ELEMENT_HANDLING &&
|
|
Ee(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck) &&
|
|
(z.tagNameCheck = e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),
|
|
e.CUSTOM_ELEMENT_HANDLING &&
|
|
Ee(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck) &&
|
|
(z.attributeNameCheck = e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),
|
|
e.CUSTOM_ELEMENT_HANDLING &&
|
|
"boolean" == typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements &&
|
|
(z.allowCustomizedBuiltInElements = e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),
|
|
K && (V = !1),
|
|
Q && (Z = !0),
|
|
re &&
|
|
((M = By({}, [...jy])),
|
|
(F = []),
|
|
!0 === re.html && (By(M, Ly), By(F, Hy)),
|
|
!0 === re.svg && (By(M, My), By(F, $y), By(F, qy)),
|
|
!0 === re.svgFilters && (By(M, Iy), By(F, $y), By(F, qy)),
|
|
!0 === re.mathMl && (By(M, Uy), By(F, Vy), By(F, qy))),
|
|
e.ADD_TAGS && (M === I && (M = Py(M)), By(M, e.ADD_TAGS, Ce)),
|
|
e.ADD_ATTR && (F === U && (F = Py(F)), By(F, e.ADD_ATTR, Ce)),
|
|
e.ADD_URI_SAFE_ATTR && By(de, e.ADD_URI_SAFE_ATTR, Ce),
|
|
e.FORBID_CONTENTS && (se === ae && (se = Py(se)), By(se, e.FORBID_CONTENTS, Ce)),
|
|
ne && (M["#text"] = !0),
|
|
Y && By(M, ["html", "head", "body"]),
|
|
M.table && (By(M, ["tbody"]), delete j.tbody),
|
|
e.TRUSTED_TYPES_POLICY)
|
|
) {
|
|
if ("function" != typeof e.TRUSTED_TYPES_POLICY.createHTML)
|
|
throw Ay('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');
|
|
if ("function" != typeof e.TRUSTED_TYPES_POLICY.createScriptURL)
|
|
throw Ay('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');
|
|
(C = e.TRUSTED_TYPES_POLICY), (w = C.createHTML(""));
|
|
} else
|
|
void 0 === C &&
|
|
(C = (function (e, t) {
|
|
if ("object" != typeof e || "function" != typeof e.createPolicy) return null;
|
|
let n = null;
|
|
const o = "data-tt-policy-suffix";
|
|
t && t.hasAttribute(o) && (n = t.getAttribute(o));
|
|
const r = "dompurify" + (n ? "#" + n : "");
|
|
try {
|
|
return e.createPolicy(r, {createHTML: e => e, createScriptURL: e => e});
|
|
} catch (e) {
|
|
return console.warn("TrustedTypes policy " + r + " could not be created."), null;
|
|
}
|
|
})(g, r)),
|
|
null !== C && "string" == typeof w && (w = C.createHTML(""));
|
|
gy && gy(e), (we = e);
|
|
}
|
|
},
|
|
_e = By({}, ["mi", "mo", "mn", "ms", "mtext"]),
|
|
Se = By({}, ["foreignobject", "desc", "title", "annotation-xml"]),
|
|
Ne = By({}, ["title", "style", "font", "a", "script"]),
|
|
Re = By({}, My);
|
|
By(Re, Iy), By(Re, Fy);
|
|
const Ae = By({}, Uy);
|
|
By(Ae, zy);
|
|
const Te = function (e) {
|
|
wy(n.removed, {element: e});
|
|
try {
|
|
e.parentNode.removeChild(e);
|
|
} catch (t) {
|
|
e.remove();
|
|
}
|
|
},
|
|
Oe = function (e, t) {
|
|
try {
|
|
wy(n.removed, {attribute: t.getAttributeNode(e), from: t});
|
|
} catch (e) {
|
|
wy(n.removed, {attribute: null, from: t});
|
|
}
|
|
if ((t.removeAttribute(e), "is" === e && !F[e]))
|
|
if (Z || Q)
|
|
try {
|
|
Te(t);
|
|
} catch (e) {}
|
|
else
|
|
try {
|
|
t.setAttribute(e, "");
|
|
} catch (e) {}
|
|
},
|
|
Be = function (e) {
|
|
let t, n;
|
|
if (X) e = "<remove></remove>" + e;
|
|
else {
|
|
const t = ky(e, /^[\r\n\t ]+/);
|
|
n = t && t[0];
|
|
}
|
|
"application/xhtml+xml" === ve &&
|
|
ge === fe &&
|
|
(e = '<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>' + e + "</body></html>");
|
|
const o = C ? C.createHTML(e) : e;
|
|
if (ge === fe)
|
|
try {
|
|
t = new f().parseFromString(o, ve);
|
|
} catch (e) {}
|
|
if (!t || !t.documentElement) {
|
|
t = x.createDocument(ge, "template", null);
|
|
try {
|
|
t.documentElement.innerHTML = pe ? w : o;
|
|
} catch (e) {}
|
|
}
|
|
const r = t.body || t.documentElement;
|
|
return (
|
|
e && n && r.insertBefore(s.createTextNode(n), r.childNodes[0] || null),
|
|
ge === fe ? _.call(t, Y ? "html" : "body")[0] : Y ? t.documentElement : r
|
|
);
|
|
},
|
|
Pe = function (e) {
|
|
return E.call(e.ownerDocument || e, e, c.SHOW_ELEMENT | c.SHOW_COMMENT | c.SHOW_TEXT, null, !1);
|
|
},
|
|
De = function (e) {
|
|
return "object" == typeof l
|
|
? e instanceof l
|
|
: e && "object" == typeof e && "number" == typeof e.nodeType && "string" == typeof e.nodeName;
|
|
},
|
|
Le = function (e, t, o) {
|
|
N[e] &&
|
|
yy(N[e], e => {
|
|
e.call(n, t, o, we);
|
|
});
|
|
},
|
|
Me = function (e) {
|
|
let t;
|
|
if (
|
|
(Le("beforeSanitizeElements", e, null),
|
|
(o = e) instanceof m &&
|
|
("string" != typeof o.nodeName ||
|
|
"string" != typeof o.textContent ||
|
|
"function" != typeof o.removeChild ||
|
|
!(o.attributes instanceof u) ||
|
|
"function" != typeof o.removeAttribute ||
|
|
"function" != typeof o.setAttribute ||
|
|
"string" != typeof o.namespaceURI ||
|
|
"function" != typeof o.insertBefore ||
|
|
"function" != typeof o.hasChildNodes))
|
|
)
|
|
return Te(e), !0;
|
|
var o;
|
|
const r = Ce(e.nodeName);
|
|
if (
|
|
(Le("uponSanitizeElement", e, {tagName: r, allowedTags: M}),
|
|
e.hasChildNodes() &&
|
|
!De(e.firstElementChild) &&
|
|
(!De(e.content) || !De(e.content.firstElementChild)) &&
|
|
Ry(/<[/\w]/g, e.innerHTML) &&
|
|
Ry(/<[/\w]/g, e.textContent))
|
|
)
|
|
return Te(e), !0;
|
|
if (!M[r] || j[r]) {
|
|
if (!j[r] && Fe(r)) {
|
|
if (z.tagNameCheck instanceof RegExp && Ry(z.tagNameCheck, r)) return !1;
|
|
if (z.tagNameCheck instanceof Function && z.tagNameCheck(r)) return !1;
|
|
}
|
|
if (ne && !se[r]) {
|
|
const t = y(e) || e.parentNode,
|
|
n = v(e) || e.childNodes;
|
|
if (n && t) for (let o = n.length - 1; o >= 0; --o) t.insertBefore(h(n[o], !0), b(e));
|
|
}
|
|
return Te(e), !0;
|
|
}
|
|
return e instanceof d &&
|
|
!(function (e) {
|
|
let t = y(e);
|
|
(t && t.tagName) || (t = {namespaceURI: ge, tagName: "template"});
|
|
const n = xy(e.tagName),
|
|
o = xy(t.tagName);
|
|
return (
|
|
!!he[e.namespaceURI] &&
|
|
(e.namespaceURI === me
|
|
? t.namespaceURI === fe
|
|
? "svg" === n
|
|
: t.namespaceURI === ue
|
|
? "svg" === n && ("annotation-xml" === o || _e[o])
|
|
: Boolean(Re[n])
|
|
: e.namespaceURI === ue
|
|
? t.namespaceURI === fe
|
|
? "math" === n
|
|
: t.namespaceURI === me
|
|
? "math" === n && Se[o]
|
|
: Boolean(Ae[n])
|
|
: e.namespaceURI === fe
|
|
? !(t.namespaceURI === me && !Se[o]) &&
|
|
!(t.namespaceURI === ue && !_e[o]) &&
|
|
!Ae[n] &&
|
|
(Ne[n] || !Re[n])
|
|
: !("application/xhtml+xml" !== ve || !he[e.namespaceURI]))
|
|
);
|
|
})(e)
|
|
? (Te(e), !0)
|
|
: ("noscript" !== r && "noembed" !== r && "noframes" !== r) || !Ry(/<\/no(script|embed|frames)/i, e.innerHTML)
|
|
? (K &&
|
|
3 === e.nodeType &&
|
|
((t = e.textContent),
|
|
(t = _y(t, R, " ")),
|
|
(t = _y(t, A, " ")),
|
|
(t = _y(t, T, " ")),
|
|
e.textContent !== t && (wy(n.removed, {element: e.cloneNode()}), (e.textContent = t))),
|
|
Le("afterSanitizeElements", e, null),
|
|
!1)
|
|
: (Te(e), !0);
|
|
},
|
|
Ie = function (e, t, n) {
|
|
if (ee && ("id" === t || "name" === t) && (n in s || n in xe)) return !1;
|
|
if (V && !H[t] && Ry(O, t));
|
|
else if ($ && Ry(B, t));
|
|
else if (!F[t] || H[t]) {
|
|
if (
|
|
!(
|
|
(Fe(e) &&
|
|
((z.tagNameCheck instanceof RegExp && Ry(z.tagNameCheck, e)) ||
|
|
(z.tagNameCheck instanceof Function && z.tagNameCheck(e))) &&
|
|
((z.attributeNameCheck instanceof RegExp && Ry(z.attributeNameCheck, t)) ||
|
|
(z.attributeNameCheck instanceof Function && z.attributeNameCheck(t)))) ||
|
|
("is" === t &&
|
|
z.allowCustomizedBuiltInElements &&
|
|
((z.tagNameCheck instanceof RegExp && Ry(z.tagNameCheck, n)) ||
|
|
(z.tagNameCheck instanceof Function && z.tagNameCheck(n))))
|
|
)
|
|
)
|
|
return !1;
|
|
} else if (de[t]);
|
|
else if (Ry(L, _y(n, D, "")));
|
|
else if (
|
|
("src" !== t && "xlink:href" !== t && "href" !== t) ||
|
|
"script" === e ||
|
|
0 !== Sy(n, "data:") ||
|
|
!ie[e]
|
|
)
|
|
if (q && !Ry(P, _y(n, D, "")));
|
|
else if (n) return !1;
|
|
return !0;
|
|
},
|
|
Fe = function (e) {
|
|
return e.indexOf("-") > 0;
|
|
},
|
|
Ue = function (e) {
|
|
let t, n, o, r;
|
|
Le("beforeSanitizeAttributes", e, null);
|
|
const {attributes: s} = e;
|
|
if (!s) return;
|
|
const a = {attrName: "", attrValue: "", keepAttr: !0, allowedAttributes: F};
|
|
for (r = s.length; r--; ) {
|
|
t = s[r];
|
|
const {name: i, namespaceURI: l} = t;
|
|
n = "value" === i ? t.value : Ny(t.value);
|
|
const d = n;
|
|
if (
|
|
((o = Ce(i)),
|
|
(a.attrName = o),
|
|
(a.attrValue = n),
|
|
(a.keepAttr = !0),
|
|
(a.forceKeepAttr = void 0),
|
|
Le("uponSanitizeAttribute", e, a),
|
|
(n = a.attrValue),
|
|
a.forceKeepAttr)
|
|
)
|
|
continue;
|
|
if (!a.keepAttr) {
|
|
Oe(i, e);
|
|
continue;
|
|
}
|
|
if (!W && Ry(/\/>/i, n)) {
|
|
Oe(i, e);
|
|
continue;
|
|
}
|
|
K && ((n = _y(n, R, " ")), (n = _y(n, A, " ")), (n = _y(n, T, " ")));
|
|
const c = Ce(e.nodeName);
|
|
if (Ie(c, o, n)) {
|
|
if (
|
|
(!te || ("id" !== o && "name" !== o) || (Oe(i, e), (n = "user-content-" + n)),
|
|
C && "object" == typeof g && "function" == typeof g.getAttributeType)
|
|
)
|
|
if (l);
|
|
else
|
|
switch (g.getAttributeType(c, o)) {
|
|
case "TrustedHTML":
|
|
n = C.createHTML(n);
|
|
break;
|
|
case "TrustedScriptURL":
|
|
n = C.createScriptURL(n);
|
|
}
|
|
if (n !== d)
|
|
try {
|
|
l ? e.setAttributeNS(l, i, n) : e.setAttribute(i, n);
|
|
} catch (t) {
|
|
Oe(i, e);
|
|
}
|
|
} else Oe(i, e);
|
|
}
|
|
Le("afterSanitizeAttributes", e, null);
|
|
},
|
|
ze = function e(t) {
|
|
let n;
|
|
const o = Pe(t);
|
|
for (Le("beforeSanitizeShadowDOM", t, null); (n = o.nextNode()); )
|
|
Le("uponSanitizeShadowNode", n, null), Me(n) || (n.content instanceof a && e(n.content), Ue(n));
|
|
Le("afterSanitizeShadowDOM", t, null);
|
|
};
|
|
return (
|
|
(n.sanitize = function (e) {
|
|
let t,
|
|
r,
|
|
s,
|
|
i,
|
|
d = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
|
|
if (((pe = !e), pe && (e = "\x3c!--\x3e"), "string" != typeof e && !De(e))) {
|
|
if ("function" != typeof e.toString) throw Ay("toString is not a function");
|
|
if ("string" != typeof (e = e.toString())) throw Ay("dirty is not a string, aborting");
|
|
}
|
|
if (!n.isSupported) return e;
|
|
if ((G || ke(d), (n.removed = []), "string" == typeof e && (oe = !1), oe)) {
|
|
if (e.nodeName) {
|
|
const t = Ce(e.nodeName);
|
|
if (!M[t] || j[t]) throw Ay("root node is forbidden and cannot be sanitized in-place");
|
|
}
|
|
} else if (e instanceof l)
|
|
(t = Be("\x3c!----\x3e")),
|
|
(r = t.ownerDocument.importNode(e, !0)),
|
|
(1 === r.nodeType && "BODY" === r.nodeName) || "HTML" === r.nodeName ? (t = r) : t.appendChild(r);
|
|
else {
|
|
if (!Z && !K && !Y && -1 === e.indexOf("<")) return C && J ? C.createHTML(e) : e;
|
|
if (((t = Be(e)), !t)) return Z ? null : J ? w : "";
|
|
}
|
|
t && X && Te(t.firstChild);
|
|
const c = Pe(oe ? e : t);
|
|
for (; (s = c.nextNode()); ) Me(s) || (s.content instanceof a && ze(s.content), Ue(s));
|
|
if (oe) return e;
|
|
if (Z) {
|
|
if (Q) for (i = k.call(t.ownerDocument); t.firstChild; ) i.appendChild(t.firstChild);
|
|
else i = t;
|
|
return (F.shadowroot || F.shadowrootmode) && (i = S.call(o, i, !0)), i;
|
|
}
|
|
let u = Y ? t.outerHTML : t.innerHTML;
|
|
return (
|
|
Y &&
|
|
M["!doctype"] &&
|
|
t.ownerDocument &&
|
|
t.ownerDocument.doctype &&
|
|
t.ownerDocument.doctype.name &&
|
|
Ry(eC, t.ownerDocument.doctype.name) &&
|
|
(u = "<!DOCTYPE " + t.ownerDocument.doctype.name + ">\n" + u),
|
|
K && ((u = _y(u, R, " ")), (u = _y(u, A, " ")), (u = _y(u, T, " "))),
|
|
C && J ? C.createHTML(u) : u
|
|
);
|
|
}),
|
|
(n.setConfig = function (e) {
|
|
ke(e), (G = !0);
|
|
}),
|
|
(n.clearConfig = function () {
|
|
(we = null), (G = !1);
|
|
}),
|
|
(n.isValidAttribute = function (e, t, n) {
|
|
we || ke({});
|
|
const o = Ce(e),
|
|
r = Ce(t);
|
|
return Ie(o, r, n);
|
|
}),
|
|
(n.addHook = function (e, t) {
|
|
"function" == typeof t && ((N[e] = N[e] || []), wy(N[e], t));
|
|
}),
|
|
(n.removeHook = function (e) {
|
|
if (N[e]) return Cy(N[e]);
|
|
}),
|
|
(n.removeHooks = function (e) {
|
|
N[e] && (N[e] = []);
|
|
}),
|
|
(n.removeAllHooks = function () {
|
|
N = {};
|
|
}),
|
|
n
|
|
);
|
|
})();
|
|
const rC = Dt.each,
|
|
sC = Dt.trim,
|
|
aC = [
|
|
"source",
|
|
"protocol",
|
|
"authority",
|
|
"userInfo",
|
|
"user",
|
|
"password",
|
|
"host",
|
|
"port",
|
|
"relative",
|
|
"path",
|
|
"directory",
|
|
"file",
|
|
"query",
|
|
"anchor"
|
|
],
|
|
iC = {ftp: 21, http: 80, https: 443, mailto: 25},
|
|
lC = ["img", "video"],
|
|
dC = (e, t, n) => {
|
|
const o = (e => {
|
|
try {
|
|
return decodeURIComponent(e);
|
|
} catch (t) {
|
|
return unescape(e);
|
|
}
|
|
})(t).replace(/\s/g, "");
|
|
return (
|
|
!e.allow_script_urls &&
|
|
(!!/((java|vb)script|mhtml):/i.test(o) ||
|
|
(!e.allow_html_data_urls &&
|
|
(/^data:image\//i.test(o)
|
|
? ((e, t) => (C(e) ? !e : !C(t) || !H(lC, t)))(e.allow_svg_data_urls, n) &&
|
|
/^data:image\/svg\+xml/i.test(o)
|
|
: /^data:/i.test(o))))
|
|
);
|
|
};
|
|
class cC {
|
|
static parseDataUri(e) {
|
|
let t;
|
|
const n = decodeURIComponent(e).split(","),
|
|
o = /data:([^;]+)/.exec(n[0]);
|
|
return o && (t = o[1]), {type: t, data: n[1]};
|
|
}
|
|
static isDomSafe(e, t, n = {}) {
|
|
if (n.allow_script_urls) return !0;
|
|
{
|
|
const o = ws.decode(e).replace(/[\s\u0000-\u001F]+/g, "");
|
|
return !dC(n, o, t);
|
|
}
|
|
}
|
|
static getDocumentBaseUrl(e) {
|
|
var t;
|
|
let n;
|
|
return (
|
|
(n =
|
|
0 !== e.protocol.indexOf("http") && "file:" !== e.protocol
|
|
? null !== (t = e.href) && void 0 !== t
|
|
? t
|
|
: ""
|
|
: e.protocol + "//" + e.host + e.pathname),
|
|
/^[^:]+:\/\/\/?[^\/]+\//.test(n) &&
|
|
((n = n.replace(/[\?#].*$/, "").replace(/[\/\\][^\/]+$/, "")), /[\/\\]$/.test(n) || (n += "/")),
|
|
n
|
|
);
|
|
}
|
|
constructor(e, t = {}) {
|
|
(this.path = ""), (this.directory = ""), (e = sC(e)), (this.settings = t);
|
|
const n = t.base_uri,
|
|
o = this;
|
|
if (/^([\w\-]+):([^\/]{2})/i.test(e) || /^\s*#/.test(e)) return void (o.source = e);
|
|
const r = 0 === e.indexOf("//");
|
|
if (
|
|
(0 !== e.indexOf("/") || r || (e = ((n && n.protocol) || "http") + "://mce_host" + e),
|
|
!/^[\w\-]*:?\/\//.test(e))
|
|
) {
|
|
const t = n ? n.path : new cC(document.location.href).directory;
|
|
if ("" === (null == n ? void 0 : n.protocol)) e = "//mce_host" + o.toAbsPath(t, e);
|
|
else {
|
|
const r = /([^#?]*)([#?]?.*)/.exec(e);
|
|
r && (e = ((n && n.protocol) || "http") + "://mce_host" + o.toAbsPath(t, r[1]) + r[2]);
|
|
}
|
|
}
|
|
e = e.replace(/@@/g, "(mce_at)");
|
|
const s =
|
|
/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?(\[[a-zA-Z0-9:.%]+\]|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(
|
|
e
|
|
);
|
|
s &&
|
|
rC(aC, (e, t) => {
|
|
let n = s[t];
|
|
n && (n = n.replace(/\(mce_at\)/g, "@@")), (o[e] = n);
|
|
}),
|
|
n &&
|
|
(o.protocol || (o.protocol = n.protocol),
|
|
o.userInfo || (o.userInfo = n.userInfo),
|
|
o.port || "mce_host" !== o.host || (o.port = n.port),
|
|
(o.host && "mce_host" !== o.host) || (o.host = n.host),
|
|
(o.source = "")),
|
|
r && (o.protocol = "");
|
|
}
|
|
setPath(e) {
|
|
const t = /^(.*?)\/?(\w+)?$/.exec(e);
|
|
t && ((this.path = t[0]), (this.directory = t[1]), (this.file = t[2])), (this.source = ""), this.getURI();
|
|
}
|
|
toRelative(e) {
|
|
if ("./" === e) return e;
|
|
const t = new cC(e, {base_uri: this});
|
|
if (
|
|
("mce_host" !== t.host && this.host !== t.host && t.host) ||
|
|
this.port !== t.port ||
|
|
(this.protocol !== t.protocol && "" !== t.protocol)
|
|
)
|
|
return t.getURI();
|
|
const n = this.getURI(),
|
|
o = t.getURI();
|
|
if (n === o || ("/" === n.charAt(n.length - 1) && n.substr(0, n.length - 1) === o)) return n;
|
|
let r = this.toRelPath(this.path, t.path);
|
|
return t.query && (r += "?" + t.query), t.anchor && (r += "#" + t.anchor), r;
|
|
}
|
|
toAbsolute(e, t) {
|
|
const n = new cC(e, {base_uri: this});
|
|
return n.getURI(t && this.isSameOrigin(n));
|
|
}
|
|
isSameOrigin(e) {
|
|
if (this.host == e.host && this.protocol == e.protocol) {
|
|
if (this.port == e.port) return !0;
|
|
const t = this.protocol ? iC[this.protocol] : null;
|
|
if (t && (this.port || t) == (e.port || t)) return !0;
|
|
}
|
|
return !1;
|
|
}
|
|
toRelPath(e, t) {
|
|
let n,
|
|
o,
|
|
r = 0,
|
|
s = "";
|
|
const a = e.substring(0, e.lastIndexOf("/")).split("/"),
|
|
i = t.split("/");
|
|
if (a.length >= i.length)
|
|
for (n = 0, o = a.length; n < o; n++)
|
|
if (n >= i.length || a[n] !== i[n]) {
|
|
r = n + 1;
|
|
break;
|
|
}
|
|
if (a.length < i.length)
|
|
for (n = 0, o = i.length; n < o; n++)
|
|
if (n >= a.length || a[n] !== i[n]) {
|
|
r = n + 1;
|
|
break;
|
|
}
|
|
if (1 === r) return t;
|
|
for (n = 0, o = a.length - (r - 1); n < o; n++) s += "../";
|
|
for (n = r - 1, o = i.length; n < o; n++) s += n !== r - 1 ? "/" + i[n] : i[n];
|
|
return s;
|
|
}
|
|
toAbsPath(e, t) {
|
|
let n = 0;
|
|
const o = /\/$/.test(t) ? "/" : "",
|
|
r = e.split("/"),
|
|
s = t.split("/"),
|
|
a = [];
|
|
rC(r, e => {
|
|
e && a.push(e);
|
|
});
|
|
const i = [];
|
|
for (let e = s.length - 1; e >= 0; e--)
|
|
0 !== s[e].length && "." !== s[e] && (".." !== s[e] ? (n > 0 ? n-- : i.push(s[e])) : n++);
|
|
const l = a.length - n;
|
|
let d;
|
|
return (
|
|
(d = l <= 0 ? oe(i).join("/") : a.slice(0, l).join("/") + "/" + oe(i).join("/")),
|
|
0 !== d.indexOf("/") && (d = "/" + d),
|
|
o && d.lastIndexOf("/") !== d.length - 1 && (d += o),
|
|
d
|
|
);
|
|
}
|
|
getURI(e = !1) {
|
|
let t;
|
|
return (
|
|
(this.source && !e) ||
|
|
((t = ""),
|
|
e ||
|
|
(this.protocol ? (t += this.protocol + "://") : (t += "//"),
|
|
this.userInfo && (t += this.userInfo + "@"),
|
|
this.host && (t += this.host),
|
|
this.port && (t += ":" + this.port)),
|
|
this.path && (t += this.path),
|
|
this.query && (t += "?" + this.query),
|
|
this.anchor && (t += "#" + this.anchor),
|
|
(this.source = t)),
|
|
this.source
|
|
);
|
|
}
|
|
}
|
|
const uC = Dt.makeMap("src,href,data,background,action,formaction,poster,xlink:href"),
|
|
mC = "data-mce-type";
|
|
let fC = 0;
|
|
const gC = (e, t, n, o, r) => {
|
|
var s, a, i, l;
|
|
const d = t.validate,
|
|
c = n.getSpecialElements();
|
|
8 === e.nodeType &&
|
|
!t.allow_conditional_comments &&
|
|
/^\[if/i.test(null !== (s = e.nodeValue) && void 0 !== s ? s : "") &&
|
|
(e.nodeValue = " " + e.nodeValue);
|
|
const u = null !== (a = null == r ? void 0 : r.tagName) && void 0 !== a ? a : e.nodeName.toLowerCase();
|
|
if ("html" !== o && n.isValid(o)) return void (C(r) && (r.allowedTags[u] = !0));
|
|
if (1 !== e.nodeType || "body" === u) return;
|
|
const f = Cn(e),
|
|
g = on(f, mC),
|
|
p = tn(f, "data-mce-bogus");
|
|
if (!g && m(p)) return void ("all" === p ? Eo(f) : ko(f));
|
|
const h = n.getElementRule(u);
|
|
if (!d || h) {
|
|
if ((C(r) && (r.allowedTags[u] = !0), d && h && !g)) {
|
|
if (
|
|
(q(null !== (i = h.attributesForced) && void 0 !== i ? i : [], e => {
|
|
Jt(f, e.name, "{$uid}" === e.value ? "mce_" + fC++ : e.value);
|
|
}),
|
|
q(null !== (l = h.attributesDefault) && void 0 !== l ? l : [], e => {
|
|
on(f, e.name) || Jt(f, e.name, "{$uid}" === e.value ? "mce_" + fC++ : e.value);
|
|
}),
|
|
h.attributesRequired && !$(h.attributesRequired, e => on(f, e)))
|
|
)
|
|
return void ko(f);
|
|
if (
|
|
h.removeEmptyAttrs &&
|
|
(e => {
|
|
const t = e.dom.attributes;
|
|
return null == t || 0 === t.length;
|
|
})(f)
|
|
)
|
|
return void ko(f);
|
|
h.outputName &&
|
|
h.outputName !== u &&
|
|
((e, t) => {
|
|
const n = ((e, t) => {
|
|
const n = vn(t),
|
|
o = sn(e);
|
|
return en(n, o), n;
|
|
})(e, t);
|
|
bo(e, n);
|
|
const o = In(e);
|
|
wo(n, o), Eo(e);
|
|
})(f, h.outputName);
|
|
}
|
|
} else ke(c, u) ? Eo(f) : ko(f);
|
|
},
|
|
pC = (e, t, n, o, r, s) =>
|
|
("html" !== n && !Mr(o)) ||
|
|
(!(r in uC && dC(e, s, o)) && (!e.validate || t.isValid(o, r) || $e(r, "data-") || $e(r, "aria-"))),
|
|
hC = (e, t) => e.hasAttribute(mC) && ("id" === t || "class" === t || "style" === t),
|
|
bC = (e, t) => e in t.getBoolAttrs(),
|
|
vC = (e, t, n, o) => {
|
|
const {attributes: r} = e;
|
|
for (let s = r.length - 1; s >= 0; s--) {
|
|
const a = r[s],
|
|
i = a.name,
|
|
l = a.value;
|
|
pC(t, n, o, e.tagName.toLowerCase(), i, l) || hC(e, i)
|
|
? bC(i, n) && e.setAttribute(i, i)
|
|
: e.removeAttribute(i);
|
|
}
|
|
},
|
|
yC = (e, t, n) => {
|
|
const o = oC();
|
|
return (
|
|
o.addHook("uponSanitizeElement", (o, r) => {
|
|
gC(o, e, t, n.track(o), r);
|
|
}),
|
|
o.addHook("uponSanitizeAttribute", (o, r) => {
|
|
((e, t, n, o, r) => {
|
|
const s = e.tagName.toLowerCase(),
|
|
{attrName: a, attrValue: i} = r;
|
|
(r.keepAttr = pC(t, n, o, s, a, i)),
|
|
r.keepAttr
|
|
? ((r.allowedAttributes[a] = !0),
|
|
bC(a, n) && (r.attrValue = a),
|
|
t.allow_svg_data_urls && $e(i, "data:image/svg+xml") && (r.forceKeepAttr = !0))
|
|
: hC(e, a) && (r.forceKeepAttr = !0);
|
|
})(o, e, t, n.current(), r);
|
|
}),
|
|
o
|
|
);
|
|
},
|
|
CC = e => {
|
|
const t = Fr(e);
|
|
if ("svg" === t) {
|
|
const t = ["type", "href", "role", "arcrole", "title", "show", "actuate", "label", "from", "to"].map(
|
|
e => `xlink:${e}`
|
|
),
|
|
n = {IN_PLACE: !0, USE_PROFILES: {html: !0, svg: !0, svgFilters: !0}, ALLOWED_ATTR: t};
|
|
oC().sanitize(e, n);
|
|
} else {
|
|
if ("math" !== t) throw new Error("Not a namespace element");
|
|
{
|
|
const t = {IN_PLACE: !0, USE_PROFILES: {mathMl: !0}};
|
|
oC().sanitize(e, t);
|
|
}
|
|
}
|
|
},
|
|
wC = Dt.makeMap,
|
|
xC = Dt.extend,
|
|
EC = (e, t, n, o) => {
|
|
const r = e.name,
|
|
s = r in n && "title" !== r && "textarea" !== r,
|
|
a = t.childNodes;
|
|
for (let t = 0, r = a.length; t < r; t++) {
|
|
const r = a[t],
|
|
i = new ep(r.nodeName.toLowerCase(), r.nodeType);
|
|
if (er(r)) {
|
|
const e = r.attributes;
|
|
for (let t = 0, n = e.length; t < n; t++) {
|
|
const n = e[t];
|
|
i.attr(n.name, n.value);
|
|
}
|
|
Mr(i.name) && (o(r), (i.value = r.innerHTML));
|
|
} else dr(r) ? ((i.value = r.data), s && (i.raw = !0)) : (mr(r) || cr(r) || ur(r)) && (i.value = r.data);
|
|
Mr(i.name) || EC(i, r, n, o), e.append(i);
|
|
}
|
|
},
|
|
kC = (e = {}, t = Fs()) => {
|
|
const n = Xv(),
|
|
o = Xv(),
|
|
r = {validate: !0, root_name: "body", sanitize: !0, ...e},
|
|
s = new DOMParser(),
|
|
a = ((e, t) => {
|
|
const n = (() => {
|
|
const e = Dr(),
|
|
t = () => e.get().map(Fr).getOr("html");
|
|
return {
|
|
track: n => (Ir(n) ? e.set(n) : e.get().exists(e => !e.contains(n)) && e.clear(), t()),
|
|
current: t,
|
|
reset: () => {
|
|
e.clear();
|
|
}
|
|
};
|
|
})();
|
|
if (e.sanitize) {
|
|
const o = yC(e, t, n),
|
|
r = (t, r) => {
|
|
o.sanitize(
|
|
t,
|
|
((e, t) => {
|
|
const n = {
|
|
IN_PLACE: !0,
|
|
ALLOW_UNKNOWN_PROTOCOLS: !0,
|
|
ALLOWED_TAGS: ["#comment", "#cdata-section", "body"],
|
|
ALLOWED_ATTR: []
|
|
};
|
|
return (
|
|
(n.PARSER_MEDIA_TYPE = t),
|
|
e.allow_script_urls
|
|
? (n.ALLOWED_URI_REGEXP = /.*/)
|
|
: e.allow_html_data_urls && (n.ALLOWED_URI_REGEXP = /^(?!(\w+script|mhtml):)/i),
|
|
n
|
|
);
|
|
})(e, r)
|
|
),
|
|
(o.removed = []),
|
|
n.reset();
|
|
};
|
|
return {sanitizeHtmlElement: r, sanitizeNamespaceElement: CC};
|
|
}
|
|
return {
|
|
sanitizeHtmlElement: (o, r) => {
|
|
const s = document.createNodeIterator(
|
|
o,
|
|
NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT
|
|
);
|
|
let a;
|
|
for (; (a = s.nextNode()); ) {
|
|
const o = n.track(a);
|
|
gC(a, e, t, o), er(a) && vC(a, e, t, o);
|
|
}
|
|
n.reset();
|
|
},
|
|
sanitizeNamespaceElement: k
|
|
};
|
|
})(r, t),
|
|
i = n.addFilter,
|
|
l = n.getFilters,
|
|
d = n.removeFilter,
|
|
c = o.addFilter,
|
|
u = o.getFilters,
|
|
f = o.removeFilter,
|
|
g = (e, n) => {
|
|
const o = m(n.attr(mC)),
|
|
r = 1 === n.type && !ke(e, n.name) && !Jr(t, n) && !Mr(n.name);
|
|
return 3 === n.type || (r && !o);
|
|
},
|
|
p = {
|
|
schema: t,
|
|
addAttributeFilter: c,
|
|
getAttributeFilters: u,
|
|
removeAttributeFilter: f,
|
|
addNodeFilter: i,
|
|
getNodeFilters: l,
|
|
removeNodeFilter: d,
|
|
parse: (e, n = {}) => {
|
|
var o;
|
|
const i = r.validate,
|
|
d = null !== (o = n.context) && void 0 !== o ? o : r.root_name,
|
|
c = ((e, n, o = "html") => {
|
|
const r = "xhtml" === o ? "application/xhtml+xml" : "text/html",
|
|
i = ke(t.getSpecialElements(), n.toLowerCase()),
|
|
l = i ? `<${n}>${e}</${n}>` : e,
|
|
d =
|
|
"xhtml" === o
|
|
? `<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>${l}</body></html>`
|
|
: `<body>${l}</body>`,
|
|
c = s.parseFromString(d, r).body;
|
|
return a.sanitizeHtmlElement(c, r), i ? c.firstChild : c;
|
|
})(e, d, n.format);
|
|
Wr(t, c);
|
|
const m = new ep(d, 11);
|
|
EC(m, c, t.getSpecialElements(), a.sanitizeNamespaceElement), (c.innerHTML = "");
|
|
const [f, p] = ((e, t, n, o) => {
|
|
const r = n.validate,
|
|
s = t.getNonEmptyElements(),
|
|
a = t.getWhitespaceElements(),
|
|
i = xC(wC("script,style,head,html,body,title,meta,param"), t.getBlockElements()),
|
|
l = Ms(t),
|
|
d = /[ \t\r\n]+/g,
|
|
c = /^[ \t\r\n]+/,
|
|
u = /[ \t\r\n]+$/,
|
|
m = e => {
|
|
let t = e.parent;
|
|
for (; C(t); ) {
|
|
if (t.name in a) return !0;
|
|
t = t.parent;
|
|
}
|
|
return !1;
|
|
},
|
|
f = n => n.name in i || Jr(t, n) || (Mr(n.name) && n.parent === e),
|
|
g = (t, n) => {
|
|
const r = n ? t.prev : t.next;
|
|
return !C(r) && !y(t.parent) && f(t.parent) && (t.parent !== e || !0 === o.isRootContent);
|
|
};
|
|
return [
|
|
e => {
|
|
var t;
|
|
if (3 === e.type && !m(e)) {
|
|
let n = null !== (t = e.value) && void 0 !== t ? t : "";
|
|
(n = n.replace(d, " ")),
|
|
(((e, t) => C(e) && (t(e) || "br" === e.name))(e.prev, f) || g(e, !0)) &&
|
|
(n = n.replace(c, "")),
|
|
0 === n.length ? e.remove() : (e.value = n);
|
|
}
|
|
},
|
|
e => {
|
|
var i;
|
|
if (1 === e.type) {
|
|
const i = t.getElementRule(e.name);
|
|
if (r && i) {
|
|
const r = kb(t, s, a, e);
|
|
i.paddInEmptyBlock &&
|
|
r &&
|
|
(e => {
|
|
let n = e;
|
|
for (; C(n); ) {
|
|
if (n.name in l) return kb(t, s, a, n);
|
|
n = n.parent;
|
|
}
|
|
return !1;
|
|
})(e)
|
|
? xb(n, o, f, e)
|
|
: i.removeEmpty && r
|
|
? f(e)
|
|
? e.remove()
|
|
: e.unwrap()
|
|
: i.paddEmpty &&
|
|
(r ||
|
|
(e => {
|
|
var t;
|
|
return (
|
|
Eb(e, "#text") &&
|
|
(null === (t = null == e ? void 0 : e.firstChild) || void 0 === t
|
|
? void 0
|
|
: t.value) === Wo
|
|
);
|
|
})(e)) &&
|
|
xb(n, o, f, e);
|
|
}
|
|
} else if (3 === e.type && !m(e)) {
|
|
let t = null !== (i = e.value) && void 0 !== i ? i : "";
|
|
((e.next && f(e.next)) || g(e, !1)) && (t = t.replace(u, "")),
|
|
0 === t.length ? e.remove() : (e.value = t);
|
|
}
|
|
}
|
|
];
|
|
})(m, t, r, n),
|
|
h = [],
|
|
b = i
|
|
? e =>
|
|
((e, n) => {
|
|
Rb(t, e) && n.push(e);
|
|
})(e, h)
|
|
: k,
|
|
v = {nodes: {}, attributes: {}},
|
|
w = e => yb(l(), u(), e, v);
|
|
if (
|
|
(((e, t, n) => {
|
|
const o = [];
|
|
for (let n = e, r = n; n; r = n, n = n.walk()) {
|
|
const s = n;
|
|
q(t, e => e(s)), y(s.parent) && s !== e ? (n = r) : o.push(s);
|
|
}
|
|
for (let e = o.length - 1; e >= 0; e--) {
|
|
const t = o[e];
|
|
q(n, e => e(t));
|
|
}
|
|
})(m, [f, w], [p, b]),
|
|
h.reverse(),
|
|
i && h.length > 0)
|
|
)
|
|
if (n.context) {
|
|
const {pass: e, fail: o} = K(h, e => e.parent === m);
|
|
Nb(o, t, m, w), (n.invalid = e.length > 0);
|
|
} else Nb(h, t, m, w);
|
|
const x = ((e, t) => {
|
|
var n;
|
|
const o = null !== (n = t.forced_root_block) && void 0 !== n ? n : e.forced_root_block;
|
|
return !1 === o ? "" : !0 === o ? "p" : o;
|
|
})(r, n);
|
|
return (
|
|
x &&
|
|
("body" === m.name || n.isRootContent) &&
|
|
((e, n) => {
|
|
const o = xC(wC("script,style,head,html,body,title,meta,param"), t.getBlockElements()),
|
|
s = /^[ \t\r\n]+/,
|
|
a = /[ \t\r\n]+$/;
|
|
let i = e.firstChild,
|
|
l = null;
|
|
const d = e => {
|
|
var t, n;
|
|
e &&
|
|
((i = e.firstChild),
|
|
i &&
|
|
3 === i.type &&
|
|
(i.value = null === (t = i.value) || void 0 === t ? void 0 : t.replace(s, "")),
|
|
(i = e.lastChild),
|
|
i &&
|
|
3 === i.type &&
|
|
(i.value = null === (n = i.value) || void 0 === n ? void 0 : n.replace(a, "")));
|
|
};
|
|
if (t.isValidChild(e.name, n.toLowerCase())) {
|
|
for (; i; ) {
|
|
const t = i.next;
|
|
g(o, i)
|
|
? (l || ((l = new ep(n, 1)), l.attr(r.forced_root_block_attrs), e.insert(l, i)), l.append(i))
|
|
: (d(l), (l = null)),
|
|
(i = t);
|
|
}
|
|
d(l);
|
|
}
|
|
})(m, x),
|
|
n.invalid || Cb(v, n),
|
|
m
|
|
);
|
|
}
|
|
};
|
|
return (
|
|
((e, t) => {
|
|
var n, o;
|
|
const r = e.schema;
|
|
e.addAttributeFilter("href", e => {
|
|
let n = e.length;
|
|
const o = e => {
|
|
const t = e ? Dt.trim(e) : "";
|
|
return /\b(noopener)\b/g.test(t)
|
|
? t
|
|
: (e =>
|
|
e
|
|
.split(" ")
|
|
.filter(e => e.length > 0)
|
|
.concat(["noopener"])
|
|
.sort()
|
|
.join(" "))(t);
|
|
};
|
|
if (!t.allow_unsafe_link_target)
|
|
for (; n--; ) {
|
|
const t = e[n];
|
|
"a" === t.name && "_blank" === t.attr("target") && t.attr("rel", o(t.attr("rel")));
|
|
}
|
|
}),
|
|
t.allow_html_in_named_anchor ||
|
|
e.addAttributeFilter("id,name", e => {
|
|
let t,
|
|
n,
|
|
o,
|
|
r,
|
|
s = e.length;
|
|
for (; s--; )
|
|
if (((r = e[s]), "a" === r.name && r.firstChild && !r.attr("href")))
|
|
for (o = r.parent, t = r.lastChild; t && o; ) (n = t.prev), o.insert(t, r), (t = n);
|
|
}),
|
|
t.fix_list_elements &&
|
|
e.addNodeFilter("ul,ol", e => {
|
|
let t,
|
|
n,
|
|
o = e.length;
|
|
for (; o--; )
|
|
if (((t = e[o]), (n = t.parent), n && ("ul" === n.name || "ol" === n.name)))
|
|
if (t.prev && "li" === t.prev.name) t.prev.append(t);
|
|
else {
|
|
const e = new ep("li", 1);
|
|
e.attr("style", "list-style-type: none"), t.wrap(e);
|
|
}
|
|
});
|
|
const s = r.getValidClasses();
|
|
t.validate &&
|
|
s &&
|
|
e.addAttributeFilter("class", e => {
|
|
var t;
|
|
let n = e.length;
|
|
for (; n--; ) {
|
|
const o = e[n],
|
|
r = null !== (t = o.attr("class")) && void 0 !== t ? t : "",
|
|
a = Dt.explode(r, " ");
|
|
let i = "";
|
|
for (let e = 0; e < a.length; e++) {
|
|
const t = a[e];
|
|
let n = !1,
|
|
r = s["*"];
|
|
r && r[t] && (n = !0), (r = s[o.name]), !n && r && r[t] && (n = !0), n && (i && (i += " "), (i += t));
|
|
}
|
|
i.length || (i = null), o.attr("class", i);
|
|
}
|
|
}),
|
|
((e, t) => {
|
|
const {blob_cache: n} = t;
|
|
if (n) {
|
|
const t = e => {
|
|
const t = e.attr("src");
|
|
(e => e.attr("src") === Tt.transparentSrc || C(e.attr("data-mce-placeholder")))(e) ||
|
|
(e => C(e.attr("data-mce-bogus")))(e) ||
|
|
y(t) ||
|
|
ry(n, t, !0).each(t => {
|
|
e.attr("src", t.blobUri());
|
|
});
|
|
};
|
|
e.addAttributeFilter("src", e => q(e, t));
|
|
}
|
|
})(e, t);
|
|
const a = null !== (n = t.sandbox_iframes) && void 0 !== n && n,
|
|
i = me(null !== (o = t.sandbox_iframes_exclusions) && void 0 !== o ? o : []);
|
|
t.convert_unsafe_embeds &&
|
|
e.addNodeFilter("object,embed", e =>
|
|
q(e, e => {
|
|
e.replace(
|
|
(({type: e, src: t, width: n, height: o} = {}, r, s) => {
|
|
const a = (e =>
|
|
v(e)
|
|
? "iframe"
|
|
: ly(e, "image")
|
|
? "img"
|
|
: ly(e, "video")
|
|
? "video"
|
|
: ly(e, "audio")
|
|
? "audio"
|
|
: "iframe")(e),
|
|
i = new ep(a, 1);
|
|
return (
|
|
i.attr("audio" === a ? {src: t} : {src: t, width: n, height: o}),
|
|
("audio" !== a && "video" !== a) || i.attr("controls", ""),
|
|
"iframe" === a && r && iy(i, s),
|
|
i
|
|
);
|
|
})(
|
|
{
|
|
type: e.attr("type"),
|
|
src: "object" === e.name ? e.attr("data") : e.attr("src"),
|
|
width: e.attr("width"),
|
|
height: e.attr("height")
|
|
},
|
|
a,
|
|
i
|
|
)
|
|
);
|
|
})
|
|
),
|
|
a && e.addNodeFilter("iframe", e => q(e, e => iy(e, i)));
|
|
})(p, r),
|
|
((e, t, n) => {
|
|
t.inline_styles && Zv(e, t, n);
|
|
})(p, r, t),
|
|
p
|
|
);
|
|
},
|
|
_C = (e, t, n) => {
|
|
const o = (e => (Fb(e) ? yp({validate: !1}).serialize(e) : e))(e),
|
|
r = t(o);
|
|
if (r.isDefaultPrevented()) return r;
|
|
if (Fb(e)) {
|
|
if (r.content !== o) {
|
|
const t = kC({validate: !1, forced_root_block: !1, ...n}).parse(r.content, {context: e.name});
|
|
return {...r, content: t};
|
|
}
|
|
return {...r, content: e};
|
|
}
|
|
return r;
|
|
},
|
|
SC = e => ({sanitize: xc(e), sandbox_iframes: Rc(e), sandbox_iframes_exclusions: Ac(e)}),
|
|
NC = (e, t) => {
|
|
if (t.no_events) return El.value(t);
|
|
{
|
|
const n = ((e, t) => e.dispatch("BeforeGetContent", t))(e, t);
|
|
return n.isDefaultPrevented() ? El.error(bf(e, {content: "", ...n}).content) : El.value(n);
|
|
}
|
|
},
|
|
RC = (e, t, n) => {
|
|
if (n.no_events) return t;
|
|
{
|
|
const o = _C(t, t => bf(e, {...n, content: t}), SC(e));
|
|
return o.content;
|
|
}
|
|
},
|
|
AC = (e, t) => {
|
|
if (t.no_events) return El.value(t);
|
|
{
|
|
const n = _C(t.content, n => ((e, t) => e.dispatch("BeforeSetContent", t))(e, {...t, content: n}), SC(e));
|
|
return n.isDefaultPrevented() ? (hf(e, n), El.error(void 0)) : El.value(n);
|
|
}
|
|
},
|
|
TC = (e, t, n) => {
|
|
n.no_events || hf(e, {...n, content: t});
|
|
},
|
|
OC = (e, t, n) => ({element: e, width: t, rows: n}),
|
|
BC = (e, t) => ({element: e, cells: t}),
|
|
PC = (e, t) => ({x: e, y: t}),
|
|
DC = (e, t) => nn(e, t).bind(Ze).getOr(1),
|
|
LC = (e, t, n) => {
|
|
const o = e.rows;
|
|
return !!(o[n] ? o[n].cells : [])[t];
|
|
},
|
|
MC = e => X(e, (e, t) => (t.cells.length > e ? t.cells.length : e), 0),
|
|
IC = (e, t) => {
|
|
const n = e.rows;
|
|
for (let e = 0; e < n.length; e++) {
|
|
const o = n[e].cells;
|
|
for (let n = 0; n < o.length; n++) if (_n(o[n], t)) return I.some(PC(n, e));
|
|
}
|
|
return I.none();
|
|
},
|
|
FC = (e, t, n, o, r) => {
|
|
const s = [],
|
|
a = e.rows;
|
|
for (let e = n; e <= r; e++) {
|
|
const n = a[e].cells,
|
|
r = t < o ? n.slice(t, o + 1) : n.slice(o, t + 1);
|
|
s.push(BC(a[e].element, r));
|
|
}
|
|
return s;
|
|
},
|
|
UC = e =>
|
|
((e, t) => {
|
|
const n = Ia(e.element),
|
|
o = vn("tbody");
|
|
return wo(o, t), yo(n, o), n;
|
|
})(
|
|
e,
|
|
(e =>
|
|
V(e.rows, e => {
|
|
const t = V(e.cells, e => {
|
|
const t = Fa(e);
|
|
return rn(t, "colspan"), rn(t, "rowspan"), t;
|
|
}),
|
|
n = Ia(e.element);
|
|
return wo(n, t), n;
|
|
}))(e)
|
|
),
|
|
zC = (e, t, n) => {
|
|
const o = Cn(t.commonAncestorContainer),
|
|
r = zp(o, e),
|
|
s = Y(r, e => n.isWrapper($t(e))),
|
|
a = ((e, t) =>
|
|
Q(e, e => "li" === $t(e) && hm(e, t)).fold(N([]), t =>
|
|
(e => Q(e, e => "ul" === $t(e) || "ol" === $t(e)))(e)
|
|
.map(e => {
|
|
const t = vn($t(e)),
|
|
n = Ce(go(e), (e, t) => $e(t, "list-style"));
|
|
return co(t, n), [vn("li"), t];
|
|
})
|
|
.getOr([])
|
|
))(r, t),
|
|
i = s.concat(
|
|
a.length
|
|
? a
|
|
: (e =>
|
|
Ka(e)
|
|
? Tn(e)
|
|
.filter(Wa)
|
|
.fold(N([]), t => [e, t])
|
|
: Wa(e)
|
|
? [e]
|
|
: [])(o)
|
|
);
|
|
return V(i, Ia);
|
|
},
|
|
jC = () => Uf([]),
|
|
HC = (e, t) =>
|
|
((e, t) => to(t, "table", T(_n, e)))(e, t[0])
|
|
.bind(e => {
|
|
const n = t[0],
|
|
o = t[t.length - 1],
|
|
r = (e => {
|
|
const t = OC(Ia(e), 0, []);
|
|
return (
|
|
q(zo(e, "tr"), (e, n) => {
|
|
q(zo(e, "td,th"), (o, r) => {
|
|
((e, t, n, o, r) => {
|
|
const s = DC(r, "rowspan"),
|
|
a = DC(r, "colspan"),
|
|
i = e.rows;
|
|
for (let e = n; e < n + s; e++) {
|
|
i[e] || (i[e] = BC(Fa(o), []));
|
|
for (let o = t; o < t + a; o++) i[e].cells[o] = e === n && o === t ? r : Ia(r);
|
|
}
|
|
})(
|
|
t,
|
|
((e, t, n) => {
|
|
for (; LC(e, t, n); ) t++;
|
|
return t;
|
|
})(t, r, n),
|
|
n,
|
|
e,
|
|
o
|
|
);
|
|
});
|
|
}),
|
|
OC(t.element, MC(t.rows), t.rows)
|
|
);
|
|
})(e);
|
|
return ((e, t, n) =>
|
|
IC(e, t).bind(t =>
|
|
IC(e, n).map(n =>
|
|
((e, t, n) => {
|
|
const o = t.x,
|
|
r = t.y,
|
|
s = n.x,
|
|
a = n.y,
|
|
i = r < a ? FC(e, o, r, s, a) : FC(e, o, a, s, r);
|
|
return OC(e.element, MC(i), i);
|
|
})(e, t, n)
|
|
)
|
|
))(r, n, o).map(e => Uf([UC(e)]));
|
|
})
|
|
.getOrThunk(jC),
|
|
$C = (e, t, n) => {
|
|
const o = um(t, e);
|
|
return o.length > 0
|
|
? HC(e, o)
|
|
: ((e, t, n) =>
|
|
t.length > 0 && t[0].collapsed
|
|
? jC()
|
|
: ((e, t, n) =>
|
|
((e, t) => {
|
|
const n = X(t, (e, t) => (yo(t, e), t), e);
|
|
return t.length > 0 ? Uf([n]) : n;
|
|
})(Cn(t.cloneContents()), zC(e, t, n)))(e, t[0], n))(e, t, n);
|
|
},
|
|
VC = (e, t) => t >= 0 && t < e.length && lm(e.charAt(t)),
|
|
qC = e => ti(e.innerText),
|
|
WC = e => (er(e) ? e.outerHTML : dr(e) ? ws.encodeRaw(e.data, !1) : mr(e) ? "\x3c!--" + e.data + "--\x3e" : ""),
|
|
KC = (e, t) => (
|
|
((e, t) => {
|
|
let n = 0;
|
|
q(e, e => {
|
|
0 === e[0]
|
|
? n++
|
|
: 1 === e[0]
|
|
? (((e, t, n) => {
|
|
const o = (e => {
|
|
let t;
|
|
const n = document.createElement("div"),
|
|
o = document.createDocumentFragment();
|
|
for (e && (n.innerHTML = e); (t = n.firstChild); ) o.appendChild(t);
|
|
return o;
|
|
})(t);
|
|
if (e.hasChildNodes() && n < e.childNodes.length) {
|
|
const t = e.childNodes[n];
|
|
e.insertBefore(o, t);
|
|
} else e.appendChild(o);
|
|
})(t, e[1], n),
|
|
n++)
|
|
: 2 === e[0] &&
|
|
((e, t) => {
|
|
if (e.hasChildNodes() && t < e.childNodes.length) {
|
|
const n = e.childNodes[t];
|
|
e.removeChild(n);
|
|
}
|
|
})(t, n);
|
|
});
|
|
})(
|
|
((e, t) => {
|
|
const n = e.length + t.length + 2,
|
|
o = new Array(n),
|
|
r = new Array(n),
|
|
s = (n, o, r, a, l) => {
|
|
const d = i(n, o, r, a);
|
|
if (null === d || (d.start === o && d.diag === o - a) || (d.end === n && d.diag === n - r)) {
|
|
let s = n,
|
|
i = r;
|
|
for (; s < o || i < a; )
|
|
s < o && i < a && e[s] === t[i]
|
|
? (l.push([0, e[s]]), ++s, ++i)
|
|
: o - n > a - r
|
|
? (l.push([2, e[s]]), ++s)
|
|
: (l.push([1, t[i]]), ++i);
|
|
} else {
|
|
s(n, d.start, r, d.start - d.diag, l);
|
|
for (let t = d.start; t < d.end; ++t) l.push([0, e[t]]);
|
|
s(d.end, o, d.end - d.diag, a, l);
|
|
}
|
|
},
|
|
a = (n, o, r, s) => {
|
|
let a = n;
|
|
for (; a - o < s && a < r && e[a] === t[a - o]; ) ++a;
|
|
return ((e, t, n) => ({start: e, end: t, diag: n}))(n, a, o);
|
|
},
|
|
i = (n, s, i, l) => {
|
|
const d = s - n,
|
|
c = l - i;
|
|
if (0 === d || 0 === c) return null;
|
|
const u = d - c,
|
|
m = c + d,
|
|
f = (m % 2 == 0 ? m : m + 1) / 2;
|
|
let g, p, h, b, v;
|
|
for (o[1 + f] = n, r[1 + f] = s + 1, g = 0; g <= f; ++g) {
|
|
for (p = -g; p <= g; p += 2) {
|
|
for (
|
|
h = p + f,
|
|
p === -g || (p !== g && o[h - 1] < o[h + 1]) ? (o[h] = o[h + 1]) : (o[h] = o[h - 1] + 1),
|
|
b = o[h],
|
|
v = b - n + i - p;
|
|
b < s && v < l && e[b] === t[v];
|
|
|
|
)
|
|
(o[h] = ++b), ++v;
|
|
if (u % 2 != 0 && u - g <= p && p <= u + g && r[h - u] <= o[h]) return a(r[h - u], p + n - i, s, l);
|
|
}
|
|
for (p = u - g; p <= u + g; p += 2) {
|
|
for (
|
|
h = p + f - u,
|
|
p === u - g || (p !== u + g && r[h + 1] <= r[h - 1]) ? (r[h] = r[h + 1] - 1) : (r[h] = r[h - 1]),
|
|
b = r[h] - 1,
|
|
v = b - n + i - p;
|
|
b >= n && v >= i && e[b] === t[v];
|
|
|
|
)
|
|
(r[h] = b--), v--;
|
|
if (u % 2 == 0 && -g <= p && p <= g && r[h] <= o[h + u]) return a(r[h], p + n - i, s, l);
|
|
}
|
|
}
|
|
return null;
|
|
},
|
|
l = [];
|
|
return s(0, e.length, 0, t.length, l), l;
|
|
})(V(ce(t.childNodes), WC), e),
|
|
t
|
|
),
|
|
t
|
|
),
|
|
YC = Le(() => document.implementation.createHTMLDocument("undo")),
|
|
GC = e => {
|
|
const t = e.serializer.getTempAttrs(),
|
|
n = fp(e.getBody(), t);
|
|
return (e => null !== e.querySelector("iframe"))(n)
|
|
? {
|
|
type: "fragmented",
|
|
fragments: Y(V(ce(n.childNodes), _(ti, WC)), e => e.length > 0),
|
|
content: "",
|
|
bookmark: null,
|
|
beforeBookmark: null
|
|
}
|
|
: {type: "complete", fragments: null, content: ti(n.innerHTML), bookmark: null, beforeBookmark: null};
|
|
},
|
|
XC = (e, t, n) => {
|
|
const o = n ? t.beforeBookmark : t.bookmark;
|
|
"fragmented" === t.type
|
|
? KC(t.fragments, e.getBody())
|
|
: e.setContent(t.content, {format: "raw", no_selection: !C(o) || !Gu(o) || !o.isFakeCaret}),
|
|
o && (e.selection.moveToBookmark(o), e.selection.scrollIntoView());
|
|
},
|
|
ZC = e => ("fragmented" === e.type ? e.fragments.join("") : e.content),
|
|
QC = e => {
|
|
const t = vn("body", YC());
|
|
return No(t, ZC(e)), q(zo(t, "*[data-mce-bogus]"), ko), So(t);
|
|
},
|
|
JC = (e, t) => !(!e || !t) && (!!((e, t) => ZC(e) === ZC(t))(e, t) || ((e, t) => QC(e) === QC(t))(e, t)),
|
|
ew = e => 0 === e.get(),
|
|
tw = (e, t, n) => {
|
|
ew(n) && (e.typing = t);
|
|
},
|
|
nw = (e, t) => {
|
|
e.typing && (tw(e, !1, t), e.add());
|
|
},
|
|
ow = e => ({
|
|
init: {bindEvents: k},
|
|
undoManager: {
|
|
beforeChange: (t, n) =>
|
|
((e, t, n) => {
|
|
ew(t) && n.set(Cl(e.selection));
|
|
})(e, t, n),
|
|
add: (t, n, o, r, s, a) =>
|
|
((e, t, n, o, r, s, a) => {
|
|
const i = GC(e),
|
|
l = Dt.extend(s || {}, i);
|
|
if (!ew(o) || e.removed) return null;
|
|
const d = t.data[n.get()];
|
|
if (e.dispatch("BeforeAddUndo", {level: l, lastLevel: d, originalEvent: a}).isDefaultPrevented())
|
|
return null;
|
|
if (d && JC(d, l)) return null;
|
|
t.data[n.get()] &&
|
|
r.get().each(e => {
|
|
t.data[n.get()].beforeBookmark = e;
|
|
});
|
|
const c = Ud(e);
|
|
if (c && t.data.length > c) {
|
|
for (let e = 0; e < t.data.length - 1; e++) t.data[e] = t.data[e + 1];
|
|
t.data.length--, n.set(t.data.length);
|
|
}
|
|
(l.bookmark = Cl(e.selection)),
|
|
n.get() < t.data.length - 1 && (t.data.length = n.get() + 1),
|
|
t.data.push(l),
|
|
n.set(t.data.length - 1);
|
|
const u = {level: l, lastLevel: d, originalEvent: a};
|
|
return (
|
|
n.get() > 0
|
|
? (e.setDirty(!0), e.dispatch("AddUndo", u), e.dispatch("change", u))
|
|
: e.dispatch("AddUndo", u),
|
|
l
|
|
);
|
|
})(e, t, n, o, r, s, a),
|
|
undo: (t, n, o) =>
|
|
((e, t, n, o) => {
|
|
let r;
|
|
return (
|
|
t.typing && (t.add(), (t.typing = !1), tw(t, !1, n)),
|
|
o.get() > 0 &&
|
|
(o.set(o.get() - 1),
|
|
(r = t.data[o.get()]),
|
|
XC(e, r, !0),
|
|
e.setDirty(!0),
|
|
e.dispatch("Undo", {level: r})),
|
|
r
|
|
);
|
|
})(e, t, n, o),
|
|
redo: (t, n) =>
|
|
((e, t, n) => {
|
|
let o;
|
|
return (
|
|
t.get() < n.length - 1 &&
|
|
(t.set(t.get() + 1), (o = n[t.get()]), XC(e, o, !1), e.setDirty(!0), e.dispatch("Redo", {level: o})),
|
|
o
|
|
);
|
|
})(e, t, n),
|
|
clear: (t, n) =>
|
|
((e, t, n) => {
|
|
(t.data = []), n.set(0), (t.typing = !1), e.dispatch("ClearUndos");
|
|
})(e, t, n),
|
|
reset: e =>
|
|
(e => {
|
|
e.clear(), e.add();
|
|
})(e),
|
|
hasUndo: (t, n) => ((e, t, n) => n.get() > 0 || (t.typing && t.data[0] && !JC(GC(e), t.data[0])))(e, t, n),
|
|
hasRedo: (e, t) => ((e, t) => t.get() < e.data.length - 1 && !e.typing)(e, t),
|
|
transact: (e, t, n) => ((e, t, n) => (nw(e, t), e.beforeChange(), e.ignore(n), e.add()))(e, t, n),
|
|
ignore: (e, t) =>
|
|
((e, t) => {
|
|
try {
|
|
e.set(e.get() + 1), t();
|
|
} finally {
|
|
e.set(e.get() - 1);
|
|
}
|
|
})(e, t),
|
|
extra: (t, n, o, r) =>
|
|
((e, t, n, o, r) => {
|
|
if (t.transact(o)) {
|
|
const o = t.data[n.get()].bookmark,
|
|
s = t.data[n.get() - 1];
|
|
XC(e, s, !0), t.transact(r) && (t.data[n.get() - 1].beforeBookmark = o);
|
|
}
|
|
})(e, t, n, o, r)
|
|
},
|
|
formatter: {
|
|
match: (t, n, o, r) => Yb(e, t, n, o, r),
|
|
matchAll: (t, n) =>
|
|
((e, t, n) => {
|
|
const o = [],
|
|
r = {},
|
|
s = e.selection.getStart();
|
|
return (
|
|
e.dom.getParent(
|
|
s,
|
|
s => {
|
|
for (let a = 0; a < t.length; a++) {
|
|
const i = t[a];
|
|
!r[i] && Kb(e, s, i, n) && ((r[i] = !0), o.push(i));
|
|
}
|
|
},
|
|
e.dom.getRoot()
|
|
),
|
|
o
|
|
);
|
|
})(e, t, n),
|
|
matchNode: (t, n, o, r) => Kb(e, t, n, o, r),
|
|
canApply: t =>
|
|
((e, t) => {
|
|
const n = e.formatter.get(t),
|
|
o = e.dom;
|
|
if (n && e.selection.isEditable()) {
|
|
const t = e.selection.getStart(),
|
|
r = Lm(o, t);
|
|
for (let e = n.length - 1; e >= 0; e--) {
|
|
const t = n[e];
|
|
if (!Fm(t)) return !0;
|
|
for (let e = r.length - 1; e >= 0; e--) if (o.is(r[e], t.selector)) return !0;
|
|
}
|
|
}
|
|
return !1;
|
|
})(e, t),
|
|
closest: t =>
|
|
((e, t) => {
|
|
const n = t => _n(t, Cn(e.getBody()));
|
|
return I.from(e.selection.getStart(!0))
|
|
.bind(o => jb(Cn(o), n => ue(t, t => ((t, n) => (Kb(e, t.dom, n) ? I.some(n) : I.none()))(n, t)), n))
|
|
.getOrNull();
|
|
})(e, t),
|
|
apply: (t, n, o) => $v(e, t, n, o),
|
|
remove: (t, n, o, r) => Iv(e, t, n, o, r),
|
|
toggle: (t, n, o) =>
|
|
((e, t, n, o) => {
|
|
const r = e.formatter.get(t);
|
|
r && (!Yb(e, t, n, o) || ("toggle" in r[0] && !r[0].toggle) ? $v(e, t, n, o) : Iv(e, t, n, o));
|
|
})(e, t, n, o),
|
|
formatChanged: (t, n, o, r, s) =>
|
|
((e, t, n, o, r, s) => (
|
|
((e, t, n, o, r, s) => {
|
|
const a = t.get();
|
|
q(n.split(","), t => {
|
|
const n = Ee(a, t).getOrThunk(() => {
|
|
const e = {
|
|
withSimilar: {state: Br(!1), similar: !0, callbacks: []},
|
|
withoutSimilar: {state: Br(!1), similar: !1, callbacks: []},
|
|
withVars: []
|
|
};
|
|
return (a[t] = e), e;
|
|
}),
|
|
i = () => {
|
|
const n = Kv(e);
|
|
return Wv(e, n, t, r, s).isSome();
|
|
};
|
|
if (v(s)) {
|
|
const e = r ? n.withSimilar : n.withoutSimilar;
|
|
e.callbacks.push(o), 1 === e.callbacks.length && e.state.set(i());
|
|
} else n.withVars.push({state: Br(i()), similar: r, vars: s, callback: o});
|
|
}),
|
|
t.set(a);
|
|
})(e, t, n, o, r, s),
|
|
{
|
|
unbind: () =>
|
|
((e, t, n) => {
|
|
const o = e.get();
|
|
q(t.split(","), e =>
|
|
Ee(o, e).each(t => {
|
|
o[e] = {
|
|
withSimilar: {...t.withSimilar, callbacks: Y(t.withSimilar.callbacks, e => e !== n)},
|
|
withoutSimilar: {...t.withoutSimilar, callbacks: Y(t.withoutSimilar.callbacks, e => e !== n)},
|
|
withVars: Y(t.withVars, e => e.callback !== n)
|
|
};
|
|
})
|
|
),
|
|
e.set(o);
|
|
})(t, n, o)
|
|
}
|
|
))(e, t, n, o, r, s)
|
|
},
|
|
editor: {
|
|
getContent: t =>
|
|
((e, t) => I.from(e.getBody()).fold(N("tree" === t.format ? new ep("body", 11) : ""), n => hp(e, t, n)))(
|
|
e,
|
|
t
|
|
),
|
|
setContent: (t, n) =>
|
|
((e, t, n) =>
|
|
I.from(e.getBody())
|
|
.map(o =>
|
|
Fb(t)
|
|
? ((e, t, n, o) => {
|
|
wb(e.parser.getNodeFilters(), e.parser.getAttributeFilters(), n);
|
|
const r = yp({validate: !1}, e.schema).serialize(n),
|
|
s = ti(Xa(Cn(t)) ? r : Dt.trim(r));
|
|
return Ub(e, s, o.no_selection), {content: n, html: s};
|
|
})(e, o, t, n)
|
|
: ((e, t, n, o) => {
|
|
if (0 === (n = ti(n)).length || /^\s+$/.test(n)) {
|
|
const r = '<br data-mce-bogus="1">';
|
|
"TABLE" === t.nodeName
|
|
? (n = "<tr><td>" + r + "</td></tr>")
|
|
: /^(UL|OL)$/.test(t.nodeName) && (n = "<li>" + r + "</li>");
|
|
const s = Wl(e);
|
|
return (
|
|
e.schema.isValidChild(t.nodeName.toLowerCase(), s.toLowerCase())
|
|
? ((n = r), (n = e.dom.createHTML(s, Kl(e), n)))
|
|
: n || (n = r),
|
|
Ub(e, n, o.no_selection),
|
|
{content: n, html: n}
|
|
);
|
|
}
|
|
{
|
|
"raw" !== o.format &&
|
|
(n = yp({validate: !1}, e.schema).serialize(
|
|
e.parser.parse(n, {isRootContent: !0, insert: !0})
|
|
));
|
|
const r = Xa(Cn(t)) ? n : Dt.trim(n);
|
|
return Ub(e, r, o.no_selection), {content: r, html: r};
|
|
}
|
|
})(e, o, t, n)
|
|
)
|
|
.getOr({content: t, html: Fb(n.content) ? "" : n.content}))(e, t, n),
|
|
insertContent: (t, n) => Ib(e, t, n),
|
|
addVisual: t =>
|
|
((e, t) => {
|
|
const n = e.dom,
|
|
o = C(t) ? t : e.getBody();
|
|
q(n.select("table,a", o), t => {
|
|
switch (t.nodeName) {
|
|
case "TABLE":
|
|
const o = Yd(e),
|
|
r = n.getAttrib(t, "border");
|
|
(r && "0" !== r) || !e.hasVisual ? n.removeClass(t, o) : n.addClass(t, o);
|
|
break;
|
|
case "A":
|
|
if (!n.getAttrib(t, "href")) {
|
|
const o = n.getAttrib(t, "name") || t.id,
|
|
r = Gd(e);
|
|
o && e.hasVisual ? n.addClass(t, r) : n.removeClass(t, r);
|
|
}
|
|
}
|
|
}),
|
|
e.dispatch("VisualAid", {element: t, hasVisual: e.hasVisual});
|
|
})(e, t)
|
|
},
|
|
selection: {
|
|
getContent: (t, n) =>
|
|
((e, t, n = {}) => {
|
|
const o = ((e, t) => ({...e, format: t, get: !0, selection: !0, getInner: !0}))(n, t);
|
|
return NC(e, o).fold(R, t => {
|
|
const n = ((e, t) => {
|
|
if ("text" === t.format)
|
|
return (e =>
|
|
I.from(e.selection.getRng())
|
|
.map(t => {
|
|
var n;
|
|
const o = I.from(e.dom.getParent(t.commonAncestorContainer, e.dom.isBlock)),
|
|
r = e.getBody(),
|
|
s = (e =>
|
|
e
|
|
.map(e => e.nodeName)
|
|
.getOr("div")
|
|
.toLowerCase())(o),
|
|
a = Cn(t.cloneContents());
|
|
gp(a), pp(a);
|
|
const i = e.dom.add(
|
|
r,
|
|
s,
|
|
{"data-mce-bogus": "all", style: "overflow: hidden; opacity: 0;"},
|
|
a.dom
|
|
),
|
|
l = qC(i),
|
|
d = ti(null !== (n = i.textContent) && void 0 !== n ? n : "");
|
|
if ((e.dom.remove(i), VC(d, 0) || VC(d, d.length - 1))) {
|
|
const e = o.getOr(r),
|
|
t = qC(e),
|
|
n = t.indexOf(l);
|
|
return -1 === n ? l : (VC(t, n - 1) ? " " : "") + l + (VC(t, n + l.length) ? " " : "");
|
|
}
|
|
return l;
|
|
})
|
|
.getOr(""))(e);
|
|
{
|
|
const n = ((e, t) => {
|
|
const n = e.selection.getRng(),
|
|
o = e.dom.create("body"),
|
|
r = e.selection.getSel(),
|
|
s = Gg(e, cm(r)),
|
|
a = t.contextual ? $C(Cn(e.getBody()), s, e.schema).dom : n.cloneContents();
|
|
return a && o.appendChild(a), e.selection.serializer.serialize(o, t);
|
|
})(e, t);
|
|
return "tree" === t.format ? n : e.selection.isCollapsed() ? "" : n;
|
|
}
|
|
})(e, t);
|
|
return RC(e, n, t);
|
|
});
|
|
})(e, t, n)
|
|
},
|
|
autocompleter: {addDecoration: k, removeDecoration: k},
|
|
raw: {getModel: () => I.none()}
|
|
}),
|
|
rw = e => ke(e.plugins, "rtc"),
|
|
sw = e => (e.rtcInstance ? e.rtcInstance : ow(e)),
|
|
aw = e => {
|
|
const t = e.rtcInstance;
|
|
if (t) return t;
|
|
throw new Error("Failed to get RTC instance not yet initialized.");
|
|
},
|
|
iw = e => aw(e).init.bindEvents(),
|
|
lw = e => (0 === e.dom.length ? (Eo(e), I.none()) : I.some(e)),
|
|
dw = (e, t, n, o, r) => {
|
|
e.bind(
|
|
e => (
|
|
(o ? vh : bh)(e.dom, o ? e.dom.length : 0, r),
|
|
t.filter(Yt).map(t =>
|
|
((e, t, n, o, r) => {
|
|
const s = e.dom,
|
|
a = t.dom,
|
|
i = o ? s.length : a.length;
|
|
o ? (yh(s, a, r, !1, !o), n.setStart(a, i)) : (yh(a, s, r, !1, !o), n.setEnd(a, i));
|
|
})(e, t, n, o, r)
|
|
)
|
|
)
|
|
).orThunk(() => {
|
|
const e = ((e, t) => e.filter(e => uf.isBookmarkNode(e.dom)).bind(t ? Dn : Pn))(t, o).or(t).filter(Yt);
|
|
return e.map(e =>
|
|
((e, t, n) => {
|
|
Tn(e).each(o => {
|
|
const r = e.dom;
|
|
t && lh(o, Ji(r, 0), n) ? bh(r, 0, n) : !t && dh(o, Ji(r, r.length), n) && vh(r, r.length, n);
|
|
});
|
|
})(e, o, r)
|
|
);
|
|
});
|
|
},
|
|
cw = (e, t, n) => {
|
|
if (ke(e, t)) {
|
|
const o = Y(e[t], e => e !== n);
|
|
0 === o.length ? delete e[t] : (e[t] = o);
|
|
}
|
|
};
|
|
const uw = e => !(!e || !e.ownerDocument) && Sn(Cn(e.ownerDocument), Cn(e)),
|
|
mw = (e, t, n, o) => {
|
|
let r, s;
|
|
const {selectorChangedWithUnbind: a} = ((e, t) => {
|
|
let n, o;
|
|
const r = (t, n) => Q(n, n => e.is(n, t)),
|
|
s = t => e.getParents(t, void 0, e.getRoot());
|
|
return {
|
|
selectorChangedWithUnbind: (e, a) => (
|
|
n ||
|
|
((n = {}),
|
|
(o = {}),
|
|
t.on("NodeChange", e => {
|
|
const t = e.element,
|
|
a = s(t),
|
|
i = {};
|
|
pe(n, (e, t) => {
|
|
r(t, a).each(n => {
|
|
o[t] ||
|
|
(q(e, e => {
|
|
e(!0, {node: n, selector: t, parents: a});
|
|
}),
|
|
(o[t] = e)),
|
|
(i[t] = e);
|
|
});
|
|
}),
|
|
pe(o, (e, n) => {
|
|
i[n] ||
|
|
(delete o[n],
|
|
q(e, e => {
|
|
e(!1, {node: t, selector: n, parents: a});
|
|
}));
|
|
});
|
|
})),
|
|
n[e] || (n[e] = []),
|
|
n[e].push(a),
|
|
r(e, s(t.selection.getStart())).each(() => {
|
|
o[e] = n[e];
|
|
}),
|
|
{
|
|
unbind: () => {
|
|
cw(n, e, a), cw(o, e, a);
|
|
}
|
|
}
|
|
)
|
|
};
|
|
})(e, o),
|
|
i = (e, t) =>
|
|
((e, t, n = {}) => {
|
|
const o = ((e, t) => ({format: "html", ...e, set: !0, selection: !0, content: t}))(n, t);
|
|
AC(e, o).each(t => {
|
|
const n = ((e, t) => {
|
|
if ("raw" !== t.format) {
|
|
const n = e.selection.getRng(),
|
|
o = e.dom.getParent(n.commonAncestorContainer, e.dom.isBlock),
|
|
r = o ? {context: o.nodeName.toLowerCase()} : {},
|
|
s = e.parser.parse(t.content, {forced_root_block: !1, ...r, ...t});
|
|
return yp({validate: !1}, e.schema).serialize(s);
|
|
}
|
|
return t.content;
|
|
})(e, t),
|
|
o = e.selection.getRng();
|
|
((e, t, n) => {
|
|
const o = I.from(t.firstChild).map(Cn),
|
|
r = I.from(t.lastChild).map(Cn);
|
|
e.deleteContents(), e.insertNode(t);
|
|
const s = o.bind(Pn).filter(Yt).bind(lw),
|
|
a = r.bind(Dn).filter(Yt).bind(lw);
|
|
dw(s, o, e, !0, n), dw(a, r, e, !1, n), e.collapse(!1);
|
|
})(o, o.createContextualFragment(n), e.schema),
|
|
e.selection.setRng(o),
|
|
vg(e, o),
|
|
TC(e, n, t);
|
|
});
|
|
})(o, e, t),
|
|
l = e => {
|
|
const t = c();
|
|
t.collapse(!!e), u(t);
|
|
},
|
|
d = () => (t.getSelection ? t.getSelection() : t.document.selection),
|
|
c = () => {
|
|
let n;
|
|
const a = (e, t, n) => {
|
|
try {
|
|
return t.compareBoundaryPoints(e, n);
|
|
} catch (e) {
|
|
return -1;
|
|
}
|
|
},
|
|
i = t.document;
|
|
if (C(o.bookmark) && !jg(o)) {
|
|
const e = Ag(o);
|
|
if (e.isSome()) return e.map(e => Gg(o, [e])[0]).getOr(i.createRange());
|
|
}
|
|
try {
|
|
const e = d();
|
|
e && !Jo(e.anchorNode) && ((n = e.rangeCount > 0 ? e.getRangeAt(0) : i.createRange()), (n = Gg(o, [n])[0]));
|
|
} catch (e) {}
|
|
if ((n || (n = i.createRange()), fr(n.startContainer) && n.collapsed)) {
|
|
const t = e.getRoot();
|
|
n.setStart(t, 0), n.setEnd(t, 0);
|
|
}
|
|
return (
|
|
r &&
|
|
s &&
|
|
(0 === a(n.START_TO_START, n, r) && 0 === a(n.END_TO_END, n, r) ? (n = s) : ((r = null), (s = null))),
|
|
n
|
|
);
|
|
},
|
|
u = (e, t) => {
|
|
if (!(e => !!e && uw(e.startContainer) && uw(e.endContainer))(e)) return;
|
|
const n = d();
|
|
if (((e = o.dispatch("SetSelectionRange", {range: e, forward: t}).range), n)) {
|
|
s = e;
|
|
try {
|
|
n.removeAllRanges(), n.addRange(e);
|
|
} catch (e) {}
|
|
!1 === t &&
|
|
n.extend &&
|
|
(n.collapse(e.endContainer, e.endOffset), n.extend(e.startContainer, e.startOffset)),
|
|
(r = n.rangeCount > 0 ? n.getRangeAt(0) : null);
|
|
}
|
|
if (
|
|
!e.collapsed &&
|
|
e.startContainer === e.endContainer &&
|
|
(null == n ? void 0 : n.setBaseAndExtent) &&
|
|
e.endOffset - e.startOffset < 2 &&
|
|
e.startContainer.hasChildNodes()
|
|
) {
|
|
const t = e.startContainer.childNodes[e.startOffset];
|
|
t &&
|
|
"IMG" === t.nodeName &&
|
|
(n.setBaseAndExtent(e.startContainer, e.startOffset, e.endContainer, e.endOffset),
|
|
(n.anchorNode === e.startContainer && n.focusNode === e.endContainer) || n.setBaseAndExtent(t, 0, t, 1));
|
|
}
|
|
o.dispatch("AfterSetSelectionRange", {range: e, forward: t});
|
|
},
|
|
m = () => {
|
|
const t = d(),
|
|
n = null == t ? void 0 : t.anchorNode,
|
|
o = null == t ? void 0 : t.focusNode;
|
|
if (!t || !n || !o || Jo(n) || Jo(o)) return !0;
|
|
const r = e.createRng(),
|
|
s = e.createRng();
|
|
try {
|
|
r.setStart(n, t.anchorOffset), r.collapse(!0), s.setStart(o, t.focusOffset), s.collapse(!0);
|
|
} catch (e) {
|
|
return !0;
|
|
}
|
|
return r.compareBoundaryPoints(r.START_TO_START, s) <= 0;
|
|
},
|
|
f = {
|
|
dom: e,
|
|
win: t,
|
|
serializer: n,
|
|
editor: o,
|
|
expand: (t = {type: "word"}) => u(Qf(e).expand(c(), t)),
|
|
collapse: l,
|
|
setCursorLocation: (t, n) => {
|
|
const r = e.createRng();
|
|
C(t) && C(n) ? (r.setStart(t, n), r.setEnd(t, n), u(r), l(!1)) : (bm(e, r, o.getBody(), !0), u(r));
|
|
},
|
|
getContent: e =>
|
|
((e, t = {}) => ((e, t, n) => aw(e).selection.getContent(t, n))(e, t.format ? t.format : "html", t))(o, e),
|
|
setContent: i,
|
|
getBookmark: (e, t) => g.getBookmark(e, t),
|
|
moveToBookmark: e => g.moveToBookmark(e),
|
|
select: (t, n) => (
|
|
((e, t, n) =>
|
|
I.from(t).bind(t =>
|
|
I.from(t.parentNode).map(o => {
|
|
const r = e.nodeIndex(t),
|
|
s = e.createRng();
|
|
return s.setStart(o, r), s.setEnd(o, r + 1), n && (bm(e, s, t, !0), bm(e, s, t, !1)), s;
|
|
})
|
|
))(e, t, n).each(u),
|
|
t
|
|
),
|
|
isCollapsed: () => {
|
|
const e = c(),
|
|
t = d();
|
|
return (
|
|
!(!e || e.item) && (e.compareEndPoints ? 0 === e.compareEndPoints("StartToEnd", e) : !t || e.collapsed)
|
|
);
|
|
},
|
|
isEditable: () => {
|
|
const t = c(),
|
|
n = o.getBody().querySelectorAll('[data-mce-selected="1"]');
|
|
return n.length > 0 ? ne(n, t => e.isEditable(t.parentElement)) : Vg(e, t);
|
|
},
|
|
isForward: m,
|
|
setNode: t => (i(e.getOuterHTML(t)), t),
|
|
getNode: () =>
|
|
((e, t) => {
|
|
if (!t) return e;
|
|
let n = t.startContainer,
|
|
o = t.endContainer;
|
|
const r = t.startOffset,
|
|
s = t.endOffset;
|
|
let a = t.commonAncestorContainer;
|
|
t.collapsed ||
|
|
(n === o && s - r < 2 && n.hasChildNodes() && (a = n.childNodes[r]),
|
|
dr(n) &&
|
|
dr(o) &&
|
|
((n = n.length === r ? Yg(n.nextSibling, !0) : n.parentNode),
|
|
(o = 0 === s ? Yg(o.previousSibling, !1) : o.parentNode),
|
|
n && n === o && (a = n)));
|
|
const i = dr(a) ? a.parentNode : a;
|
|
return tr(i) ? i : e;
|
|
})(o.getBody(), c()),
|
|
getSel: d,
|
|
setRng: u,
|
|
getRng: c,
|
|
getStart: e => Wg(o.getBody(), c(), e),
|
|
getEnd: e => Kg(o.getBody(), c(), e),
|
|
getSelectedBlocks: (t, n) =>
|
|
((e, t, n, o) => {
|
|
const r = [],
|
|
s = e.getRoot(),
|
|
a = e.getParent(n || Wg(s, t, t.collapsed), e.isBlock),
|
|
i = e.getParent(o || Kg(s, t, t.collapsed), e.isBlock);
|
|
if ((a && a !== s && r.push(a), a && i && a !== i)) {
|
|
let t;
|
|
const n = new Vo(a, s);
|
|
for (; (t = n.next()) && t !== i; ) e.isBlock(t) && r.push(t);
|
|
}
|
|
return i && a !== i && i !== s && r.push(i), r;
|
|
})(e, c(), t, n),
|
|
normalize: () => {
|
|
const t = c(),
|
|
n = d();
|
|
if (!(cm(n).length > 1) && vm(o)) {
|
|
const n = Gf(e, t);
|
|
return (
|
|
n.each(e => {
|
|
u(e, m());
|
|
}),
|
|
n.getOr(t)
|
|
);
|
|
}
|
|
return t;
|
|
},
|
|
selectorChanged: (e, t) => (a(e, t), f),
|
|
selectorChangedWithUnbind: a,
|
|
getScrollContainer: () => {
|
|
let t,
|
|
n = e.getRoot();
|
|
for (; n && "BODY" !== n.nodeName; ) {
|
|
if (n.scrollHeight > n.clientHeight) {
|
|
t = n;
|
|
break;
|
|
}
|
|
n = n.parentNode;
|
|
}
|
|
return t;
|
|
},
|
|
scrollIntoView: (e, t) => {
|
|
C(e)
|
|
? ((e, t, n) => {
|
|
(e.inline ? pg : bg)(e, t, n);
|
|
})(o, e, t)
|
|
: vg(o, c(), t);
|
|
},
|
|
placeCaretAt: (e, t) => u(jf(e, t, o.getDoc())),
|
|
getBoundingClientRect: () => {
|
|
const e = c();
|
|
return e.collapsed ? Ji.fromRangeStart(e).getClientRects()[0] : e.getBoundingClientRect();
|
|
},
|
|
destroy: () => {
|
|
(t = r = s = null), p.destroy();
|
|
}
|
|
},
|
|
g = uf(f),
|
|
p = _f(f, o);
|
|
return (f.bookmarkManager = g), (f.controlSelection = p), f;
|
|
},
|
|
fw = (e, t, n) => {
|
|
-1 === Dt.inArray(t, n) &&
|
|
(e.addAttributeFilter(n, (e, t) => {
|
|
let n = e.length;
|
|
for (; n--; ) e[n].attr(t, null);
|
|
}),
|
|
t.push(n));
|
|
},
|
|
gw = (e, t) => {
|
|
const n = ["data-mce-selected"],
|
|
o = {entity_encoding: "named", remove_trailing_brs: !0, pad_empty_with_br: !1, ...e},
|
|
r = t && t.dom ? t.dom : fa.DOM,
|
|
s = t && t.schema ? t.schema : Fs(o),
|
|
a = kC(o, s);
|
|
return (
|
|
((e, t, n) => {
|
|
e.addAttributeFilter("data-mce-tabindex", (e, t) => {
|
|
let n = e.length;
|
|
for (; n--; ) {
|
|
const o = e[n];
|
|
o.attr("tabindex", o.attr("data-mce-tabindex")), o.attr(t, null);
|
|
}
|
|
}),
|
|
e.addAttributeFilter("src,href,style", (e, o) => {
|
|
const r = "data-mce-" + o,
|
|
s = t.url_converter,
|
|
a = t.url_converter_scope;
|
|
let i = e.length;
|
|
for (; i--; ) {
|
|
const t = e[i];
|
|
let l = t.attr(r);
|
|
void 0 !== l
|
|
? (t.attr(o, l.length > 0 ? l : null), t.attr(r, null))
|
|
: ((l = t.attr(o)),
|
|
"style" === o
|
|
? (l = n.serializeStyle(n.parseStyle(l), t.name))
|
|
: s && (l = s.call(a, l, o, t.name)),
|
|
t.attr(o, l.length > 0 ? l : null));
|
|
}
|
|
}),
|
|
e.addAttributeFilter("class", e => {
|
|
let t = e.length;
|
|
for (; t--; ) {
|
|
const n = e[t];
|
|
let o = n.attr("class");
|
|
o && ((o = o.replace(/(?:^|\s)mce-item-\w+(?!\S)/g, "")), n.attr("class", o.length > 0 ? o : null));
|
|
}
|
|
}),
|
|
e.addAttributeFilter("data-mce-type", (e, t, n) => {
|
|
let o = e.length;
|
|
for (; o--; ) {
|
|
const t = e[o];
|
|
if ("bookmark" === t.attr("data-mce-type") && !n.cleanup) {
|
|
const e = I.from(t.firstChild).exists(e => {
|
|
var t;
|
|
return !ei(null !== (t = e.value) && void 0 !== t ? t : "");
|
|
});
|
|
e ? t.unwrap() : t.remove();
|
|
}
|
|
}
|
|
}),
|
|
e.addNodeFilter("noscript", e => {
|
|
var t;
|
|
let n = e.length;
|
|
for (; n--; ) {
|
|
const o = e[n].firstChild;
|
|
o && (o.value = ws.decode(null !== (t = o.value) && void 0 !== t ? t : ""));
|
|
}
|
|
}),
|
|
e.addNodeFilter("script,style", (e, n) => {
|
|
var o;
|
|
const r = e =>
|
|
e
|
|
.replace(/(<!--\[CDATA\[|\]\]-->)/g, "\n")
|
|
.replace(/^[\r\n]*|[\r\n]*$/g, "")
|
|
.replace(
|
|
/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi,
|
|
""
|
|
)
|
|
.replace(
|
|
/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,
|
|
""
|
|
);
|
|
let s = e.length;
|
|
for (; s--; ) {
|
|
const a = e[s],
|
|
i = a.firstChild,
|
|
l = null !== (o = null == i ? void 0 : i.value) && void 0 !== o ? o : "";
|
|
if ("script" === n) {
|
|
const e = a.attr("type");
|
|
e && a.attr("type", "mce-no/type" === e ? null : e.replace(/^mce\-/, "")),
|
|
"xhtml" === t.element_format &&
|
|
i &&
|
|
l.length > 0 &&
|
|
(i.value = "// <![CDATA[\n" + r(l) + "\n// ]]>");
|
|
} else "xhtml" === t.element_format && i && l.length > 0 && (i.value = "\x3c!--\n" + r(l) + "\n--\x3e");
|
|
}
|
|
}),
|
|
e.addNodeFilter("#comment", e => {
|
|
let o = e.length;
|
|
for (; o--; ) {
|
|
const r = e[o],
|
|
s = r.value;
|
|
t.preserve_cdata && 0 === (null == s ? void 0 : s.indexOf("[CDATA["))
|
|
? ((r.name = "#cdata"), (r.type = 4), (r.value = n.decode(s.replace(/^\[CDATA\[|\]\]$/g, ""))))
|
|
: 0 === (null == s ? void 0 : s.indexOf("mce:protected ")) &&
|
|
((r.name = "#text"), (r.type = 3), (r.raw = !0), (r.value = unescape(s).substr(14)));
|
|
}
|
|
}),
|
|
e.addNodeFilter("xml:namespace,input", (e, t) => {
|
|
let n = e.length;
|
|
for (; n--; ) {
|
|
const o = e[n];
|
|
7 === o.type ? o.remove() : 1 === o.type && ("input" !== t || o.attr("type") || o.attr("type", "text"));
|
|
}
|
|
}),
|
|
e.addAttributeFilter("data-mce-type", t => {
|
|
q(t, t => {
|
|
"format-caret" === t.attr("data-mce-type") &&
|
|
(t.isEmpty(e.schema.getNonEmptyElements()) ? t.remove() : t.unwrap());
|
|
});
|
|
}),
|
|
e.addAttributeFilter(
|
|
"data-mce-src,data-mce-href,data-mce-style,data-mce-selected,data-mce-expando,data-mce-block,data-mce-type,data-mce-resize,data-mce-placeholder",
|
|
(e, t) => {
|
|
let n = e.length;
|
|
for (; n--; ) e[n].attr(t, null);
|
|
}
|
|
),
|
|
t.remove_trailing_brs &&
|
|
((e, t, n) => {
|
|
t.addNodeFilter("br", (t, o, r) => {
|
|
const s = Dt.extend({}, n.getBlockElements()),
|
|
a = n.getNonEmptyElements(),
|
|
i = n.getWhitespaceElements();
|
|
s.body = 1;
|
|
const l = e => e.name in s || Jr(n, e);
|
|
for (let o = 0, d = t.length; o < d; o++) {
|
|
let d = t[o],
|
|
c = d.parent;
|
|
if (c && l(c) && d === c.lastChild) {
|
|
let t = d.prev;
|
|
for (; t; ) {
|
|
const e = t.name;
|
|
if ("span" !== e || "bookmark" !== t.attr("data-mce-type")) {
|
|
"br" === e && (d = null);
|
|
break;
|
|
}
|
|
t = t.prev;
|
|
}
|
|
if (d && (d.remove(), kb(n, a, i, c))) {
|
|
const t = n.getElementRule(c.name);
|
|
t && (t.removeEmpty ? c.remove() : t.paddEmpty && xb(e, r, l, c));
|
|
}
|
|
} else {
|
|
let e = d;
|
|
for (; c && c.firstChild === e && c.lastChild === e && ((e = c), !s[c.name]); ) c = c.parent;
|
|
if (e === c) {
|
|
const e = new ep("#text", 3);
|
|
(e.value = Wo), d.replace(e);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
})(t, e, e.schema);
|
|
})(a, o, r),
|
|
{
|
|
schema: s,
|
|
addNodeFilter: a.addNodeFilter,
|
|
addAttributeFilter: a.addAttributeFilter,
|
|
serialize: (e, n = {}) => {
|
|
const i = {format: "html", ...n},
|
|
l = ((e, t, n) =>
|
|
((e, t) => C(e) && e.hasEventListeners("PreProcess") && !t.no_events)(e, n)
|
|
? ((e, t, n) => {
|
|
let o;
|
|
const r = e.dom;
|
|
let s = t.cloneNode(!0);
|
|
const a = document.implementation;
|
|
if (a.createHTMLDocument) {
|
|
const e = a.createHTMLDocument("");
|
|
Dt.each("BODY" === s.nodeName ? s.childNodes : [s], t => {
|
|
e.body.appendChild(e.importNode(t, !0));
|
|
}),
|
|
(s = "BODY" !== s.nodeName ? e.body.firstChild : e.body),
|
|
(o = r.doc),
|
|
(r.doc = e);
|
|
}
|
|
return (
|
|
((e, t) => {
|
|
e.dispatch("PreProcess", t);
|
|
})(e, {...n, node: s}),
|
|
o && (r.doc = o),
|
|
s
|
|
);
|
|
})(e, t, n)
|
|
: t)(t, e, i),
|
|
d = ((e, t, n) => {
|
|
const o = ti(n.getInner ? t.innerHTML : e.getOuterHTML(t));
|
|
return n.selection || Xa(Cn(t)) ? o : Dt.trim(o);
|
|
})(r, l, i),
|
|
c = ((e, t, n) => {
|
|
const o = n.selection ? {forced_root_block: !1, ...n} : n,
|
|
r = e.parse(t, o);
|
|
return (
|
|
(e => {
|
|
const t = e => "br" === (null == e ? void 0 : e.name),
|
|
n = e.lastChild;
|
|
if (t(n)) {
|
|
const e = n.prev;
|
|
t(e) && (n.remove(), e.remove());
|
|
}
|
|
})(r),
|
|
r
|
|
);
|
|
})(a, d, i);
|
|
return "tree" === i.format
|
|
? c
|
|
: ((e, t, n, o, r) => {
|
|
const s = ((e, t, n) => yp(e, t).serialize(n))(t, n, o);
|
|
return ((e, t, n) => {
|
|
if (!t.no_events && e) {
|
|
const o = ((e, t) => e.dispatch("PostProcess", t))(e, {...t, content: n});
|
|
return o.content;
|
|
}
|
|
return n;
|
|
})(e, r, s);
|
|
})(t, o, s, c, i);
|
|
},
|
|
addRules: s.addValidElements,
|
|
setRules: s.setValidElements,
|
|
addTempAttr: T(fw, a, n),
|
|
getTempAttrs: N(n),
|
|
getNodeFilters: a.getNodeFilters,
|
|
getAttributeFilters: a.getAttributeFilters,
|
|
removeNodeFilter: a.removeNodeFilter,
|
|
removeAttributeFilter: a.removeAttributeFilter
|
|
}
|
|
);
|
|
},
|
|
pw = (e, t) => {
|
|
const n = gw(e, t);
|
|
return {
|
|
schema: n.schema,
|
|
addNodeFilter: n.addNodeFilter,
|
|
addAttributeFilter: n.addAttributeFilter,
|
|
serialize: n.serialize,
|
|
addRules: n.addRules,
|
|
setRules: n.setRules,
|
|
addTempAttr: n.addTempAttr,
|
|
getTempAttrs: n.getTempAttrs,
|
|
getNodeFilters: n.getNodeFilters,
|
|
getAttributeFilters: n.getAttributeFilters,
|
|
removeNodeFilter: n.removeNodeFilter,
|
|
removeAttributeFilter: n.removeAttributeFilter
|
|
};
|
|
},
|
|
hw = (e, t, n = {}) => {
|
|
const o = ((e, t) => ({format: "html", ...e, set: !0, content: t}))(n, t);
|
|
return AC(e, o)
|
|
.map(t => {
|
|
const n = ((e, t, n) => sw(e).editor.setContent(t, n))(e, t.content, t);
|
|
return TC(e, n.html, t), n.content;
|
|
})
|
|
.getOr(t);
|
|
},
|
|
bw =
|
|
"autoresize_on_init,content_editable_state,padd_empty_with_br,block_elements,boolean_attributes,editor_deselector,editor_selector,elements,file_browser_callback_types,filepicker_validator_handler,force_hex_style_colors,force_p_newlines,gecko_spellcheck,images_dataimg_filter,media_scripts,mode,move_caret_before_on_enter_elements,non_empty_elements,self_closing_elements,short_ended_elements,special,spellchecker_select_languages,spellchecker_whitelist,tab_focus,tabfocus_elements,table_responsive_width,text_block_elements,text_inline_elements,toolbar_drawer,types,validate,whitespace_elements,paste_enable_default_filters,paste_filter_drop,paste_word_valid_elements,paste_retain_style_properties,paste_convert_word_fake_lists,template_cdate_classes,template_mdate_classes,template_selected_content_classes,template_preview_replace_values,template_replace_values,templates,template_cdate_format,template_mdate_format".split(
|
|
","
|
|
),
|
|
vw = [],
|
|
yw = "bbcode,colorpicker,contextmenu,fullpage,legacyoutput,spellchecker,template,textcolor,rtc".split(","),
|
|
Cw = [],
|
|
ww = (e, t) => {
|
|
const n = Y(t, t => ke(e, t));
|
|
return ae(n);
|
|
},
|
|
xw = e => {
|
|
const t = ww(e, bw),
|
|
n = e.forced_root_block;
|
|
return (!1 !== n && "" !== n) || t.push("forced_root_block (false only)"), ae(t);
|
|
},
|
|
Ew = e => ww(e, vw),
|
|
kw = (e, t) => {
|
|
const n = Dt.makeMap(e.plugins, " "),
|
|
o = Y(t, e => ke(n, e));
|
|
return ae(o);
|
|
},
|
|
_w = e => kw(e, yw),
|
|
Sw = e =>
|
|
kw(
|
|
e,
|
|
Cw.map(e => e.name)
|
|
),
|
|
Nw = e =>
|
|
Q(Cw, t => t.name === e).fold(
|
|
() => e,
|
|
t => (t.replacedWith ? `${e}, replaced by ${t.replacedWith}` : e)
|
|
),
|
|
Rw = fa.DOM,
|
|
Aw = e => I.from(e).each(e => e.destroy()),
|
|
Tw = (() => {
|
|
const e = {};
|
|
return {
|
|
add: (t, n) => {
|
|
e[t] = n;
|
|
},
|
|
get: t => (e[t] ? e[t] : {icons: {}}),
|
|
has: t => ke(e, t)
|
|
};
|
|
})(),
|
|
Ow = Ca.ModelManager,
|
|
Bw = (e, t) => t.dom[e],
|
|
Pw = (e, t) => parseInt(uo(t, e), 10),
|
|
Dw = T(Bw, "clientWidth"),
|
|
Lw = T(Bw, "clientHeight"),
|
|
Mw = T(Pw, "margin-top"),
|
|
Iw = T(Pw, "margin-left"),
|
|
Fw = e => {
|
|
const t = [],
|
|
n = () => {
|
|
const t = e.theme;
|
|
return t && t.getNotificationManagerImpl
|
|
? t.getNotificationManagerImpl()
|
|
: (() => {
|
|
const e = () => {
|
|
throw new Error("Theme did not provide a NotificationManager implementation.");
|
|
};
|
|
return {open: e, close: e, getArgs: e};
|
|
})();
|
|
},
|
|
o = () => I.from(t[0]),
|
|
r = () => {
|
|
o().each(e => {
|
|
e.reposition();
|
|
});
|
|
},
|
|
s = e => {
|
|
J(t, t => t === e).each(e => {
|
|
t.splice(e, 1);
|
|
});
|
|
},
|
|
a = (o, a = !0) =>
|
|
e.removed ||
|
|
!(e => {
|
|
return ((t = e.inline ? e.getBody() : e.getContentAreaContainer()), I.from(t).map(Cn)).map(Xn).getOr(!1);
|
|
var t;
|
|
})(e)
|
|
? {}
|
|
: (a && e.dispatch("BeforeOpenNotification", {notification: o}),
|
|
Q(t, e => {
|
|
return (
|
|
(t = n().getArgs(e)),
|
|
(r = o),
|
|
!(t.type !== r.type || t.text !== r.text || t.progressBar || t.timeout || r.progressBar || r.timeout)
|
|
);
|
|
var t, r;
|
|
}).getOrThunk(() => {
|
|
e.editorManager.setActive(e);
|
|
const a = n().open(
|
|
o,
|
|
() => {
|
|
s(a);
|
|
},
|
|
() => Hg(e)
|
|
);
|
|
return (
|
|
(e => {
|
|
t.push(e);
|
|
})(a),
|
|
r(),
|
|
e.dispatch("OpenNotification", {notification: {...a}}),
|
|
a
|
|
);
|
|
})),
|
|
i = N(t);
|
|
return (
|
|
(e => {
|
|
e.on("SkinLoaded", () => {
|
|
const t = Ed(e);
|
|
t && a({text: t, type: "warning", timeout: 0}, !1), r();
|
|
}),
|
|
e.on("show ResizeEditor NodeChange", () => {
|
|
requestAnimationFrame(r);
|
|
}),
|
|
e.on("remove", () => {
|
|
q(t.slice(), e => {
|
|
n().close(e);
|
|
});
|
|
}),
|
|
e.addShortcut("alt+F12", "Focus to notification", () =>
|
|
o()
|
|
.map(e => Cn(e.getEl()))
|
|
.each(e => yg(e))
|
|
);
|
|
})(e),
|
|
{
|
|
open: a,
|
|
close: () => {
|
|
o().each(e => {
|
|
n().close(e), s(e), r();
|
|
});
|
|
},
|
|
getNotifications: i
|
|
}
|
|
);
|
|
},
|
|
Uw = Ca.PluginManager,
|
|
zw = Ca.ThemeManager,
|
|
jw = e => {
|
|
let t = [];
|
|
const n = () => {
|
|
const t = e.theme;
|
|
return t && t.getWindowManagerImpl
|
|
? t.getWindowManagerImpl()
|
|
: (() => {
|
|
const e = () => {
|
|
throw new Error("Theme did not provide a WindowManager implementation.");
|
|
};
|
|
return {open: e, openUrl: e, alert: e, confirm: e, close: e};
|
|
})();
|
|
},
|
|
o =
|
|
(e, t) =>
|
|
(...n) =>
|
|
t ? t.apply(e, n) : void 0,
|
|
r = n => {
|
|
(t => {
|
|
e.dispatch("CloseWindow", {dialog: t});
|
|
})(n),
|
|
(t = Y(t, e => e !== n)),
|
|
0 === t.length && e.focus();
|
|
},
|
|
s = n => {
|
|
e.editorManager.setActive(e), Rg(e), e.ui.show();
|
|
const o = n();
|
|
return (
|
|
(n => {
|
|
t.push(n),
|
|
(t => {
|
|
e.dispatch("OpenWindow", {dialog: t});
|
|
})(n);
|
|
})(o),
|
|
o
|
|
);
|
|
};
|
|
return (
|
|
e.on("remove", () => {
|
|
q(t, e => {
|
|
n().close(e);
|
|
});
|
|
}),
|
|
{
|
|
open: (e, t) => s(() => n().open(e, t, r)),
|
|
openUrl: e => s(() => n().openUrl(e, r)),
|
|
alert: (e, t, r) => {
|
|
const s = n();
|
|
s.alert(e, o(r || s, t));
|
|
},
|
|
confirm: (e, t, r) => {
|
|
const s = n();
|
|
s.confirm(e, o(r || s, t));
|
|
},
|
|
close: () => {
|
|
I.from(t[t.length - 1]).each(e => {
|
|
n().close(e), r(e);
|
|
});
|
|
}
|
|
}
|
|
);
|
|
},
|
|
Hw = (e, t) => {
|
|
e.notificationManager.open({type: "error", text: t});
|
|
},
|
|
$w = (e, t) => {
|
|
e._skinLoaded
|
|
? Hw(e, t)
|
|
: e.on("SkinLoaded", () => {
|
|
Hw(e, t);
|
|
});
|
|
},
|
|
Vw = (e, t, n) => {
|
|
ff(e, t, {message: n}), console.error(n);
|
|
},
|
|
qw = (e, t, n) => (n ? `Failed to load ${e}: ${n} from url ${t}` : `Failed to load ${e} url: ${t}`),
|
|
Ww = (e, ...t) => {
|
|
const n = window.console;
|
|
n && (n.error ? n.error(e, ...t) : n.log(e, ...t));
|
|
},
|
|
Kw = e => "content/" + e + "/content.css",
|
|
Yw = (e, t) => {
|
|
const n = e.editorManager.baseURL + "/skins/content",
|
|
o = `content${e.editorManager.suffix}.css`;
|
|
return V(t, t =>
|
|
(e => tinymce.Resource.has(Kw(e)))(t)
|
|
? t
|
|
: (e => /^[a-z0-9\-]+$/i.test(e))(t) && !e.inline
|
|
? `${n}/${t}/${o}`
|
|
: e.documentBaseURI.toAbsolute(t)
|
|
);
|
|
},
|
|
Gw = (e, t) => {
|
|
const n = {};
|
|
return {
|
|
findAll: (o, r = M) => {
|
|
const s = Y((e => (e ? ce(e.getElementsByTagName("img")) : []))(o), t => {
|
|
const n = t.src;
|
|
return (
|
|
!t.hasAttribute("data-mce-bogus") &&
|
|
!t.hasAttribute("data-mce-placeholder") &&
|
|
!(!n || n === Tt.transparentSrc) &&
|
|
($e(n, "blob:") ? !e.isUploaded(n) && r(t) : !!$e(n, "data:") && r(t))
|
|
);
|
|
}),
|
|
a = V(s, e => {
|
|
const o = e.src;
|
|
if (ke(n, o)) return n[o].then(t => (m(t) ? t : {image: e, blobInfo: t.blobInfo}));
|
|
{
|
|
const r = ((e, t) => {
|
|
const n = () => Promise.reject("Invalid data URI");
|
|
if ($e(t, "blob:")) {
|
|
const s = e.getByUri(t);
|
|
return C(s)
|
|
? Promise.resolve(s)
|
|
: ((o = t),
|
|
$e(o, "blob:")
|
|
? (e =>
|
|
fetch(e)
|
|
.then(e => (e.ok ? e.blob() : Promise.reject()))
|
|
.catch(() =>
|
|
Promise.reject({
|
|
message: `Cannot convert ${e} to Blob. Resource might not exist or is inaccessible.`,
|
|
uriType: "blob"
|
|
})
|
|
))(o)
|
|
: $e(o, "data:")
|
|
? ((r = o),
|
|
new Promise((e, t) => {
|
|
Qv(r)
|
|
.bind(({type: e, data: t, base64Encoded: n}) => Jv(e, t, n))
|
|
.fold(() => t("Invalid data URI"), e);
|
|
}))
|
|
: Promise.reject("Unknown URI format")).then(t =>
|
|
ey(t).then(o => ny(o, !1, n => I.some(oy(e, t, n))).getOrThunk(n))
|
|
);
|
|
}
|
|
var o, r;
|
|
return $e(t, "data:")
|
|
? ry(e, t).fold(n, e => Promise.resolve(e))
|
|
: Promise.reject("Unknown image data format");
|
|
})(t, o)
|
|
.then(t => (delete n[o], {image: e, blobInfo: t}))
|
|
.catch(e => (delete n[o], e));
|
|
return (n[o] = r), r;
|
|
}
|
|
});
|
|
return Promise.all(a);
|
|
}
|
|
};
|
|
},
|
|
Xw = () => {
|
|
let e = {};
|
|
const t = (e, t) => ({status: e, resultUri: t}),
|
|
n = t => t in e;
|
|
return {
|
|
hasBlobUri: n,
|
|
getResultUri: t => {
|
|
const n = e[t];
|
|
return n ? n.resultUri : null;
|
|
},
|
|
isPending: t => !!n(t) && 1 === e[t].status,
|
|
isUploaded: t => !!n(t) && 2 === e[t].status,
|
|
markPending: n => {
|
|
e[n] = t(1, null);
|
|
},
|
|
markUploaded: (n, o) => {
|
|
e[n] = t(2, o);
|
|
},
|
|
removeFailed: t => {
|
|
delete e[t];
|
|
},
|
|
destroy: () => {
|
|
e = {};
|
|
}
|
|
};
|
|
};
|
|
let Zw = 0;
|
|
const Qw = (e, t) => {
|
|
const n = {},
|
|
o = (e, n) =>
|
|
new Promise((o, r) => {
|
|
const s = new XMLHttpRequest();
|
|
s.open("POST", t.url),
|
|
(s.withCredentials = t.credentials),
|
|
(s.upload.onprogress = e => {
|
|
n((e.loaded / e.total) * 100);
|
|
}),
|
|
(s.onerror = () => {
|
|
r("Image upload failed due to a XHR Transport error. Code: " + s.status);
|
|
}),
|
|
(s.onload = () => {
|
|
if (s.status < 200 || s.status >= 300) return void r("HTTP Error: " + s.status);
|
|
const e = JSON.parse(s.responseText);
|
|
var n, a;
|
|
e && m(e.location)
|
|
? o(((n = t.basePath), (a = e.location), n ? n.replace(/\/$/, "") + "/" + a.replace(/^\//, "") : a))
|
|
: r("Invalid JSON: " + s.responseText);
|
|
});
|
|
const a = new FormData();
|
|
a.append("file", e.blob(), e.filename()), s.send(a);
|
|
}),
|
|
r = w(t.handler) ? t.handler : o,
|
|
s = (e, t) => ({url: t, blobInfo: e, status: !0}),
|
|
a = (e, t) => ({url: "", blobInfo: e, status: !1, error: t}),
|
|
i = (e, t) => {
|
|
Dt.each(n[e], e => {
|
|
e(t);
|
|
}),
|
|
delete n[e];
|
|
};
|
|
return {
|
|
upload: (l, d) =>
|
|
t.url || r !== o
|
|
? ((t, o) => (
|
|
(t = Dt.grep(t, t => !e.isUploaded(t.blobUri()))),
|
|
Promise.all(
|
|
Dt.map(t, t =>
|
|
e.isPending(t.blobUri())
|
|
? (e => {
|
|
const t = e.blobUri();
|
|
return new Promise(e => {
|
|
(n[t] = n[t] || []), n[t].push(e);
|
|
});
|
|
})(t)
|
|
: ((t, n, o) => (
|
|
e.markPending(t.blobUri()),
|
|
new Promise(r => {
|
|
let l, d;
|
|
try {
|
|
const c = () => {
|
|
l && (l.close(), (d = k));
|
|
},
|
|
u = n => {
|
|
c(), e.markUploaded(t.blobUri(), n), i(t.blobUri(), s(t, n)), r(s(t, n));
|
|
},
|
|
f = n => {
|
|
c(), e.removeFailed(t.blobUri()), i(t.blobUri(), a(t, n)), r(a(t, n));
|
|
};
|
|
(d = e => {
|
|
e < 0 ||
|
|
e > 100 ||
|
|
I.from(l)
|
|
.orThunk(() => I.from(o).map(P))
|
|
.each(t => {
|
|
(l = t), t.progressBar.value(e);
|
|
});
|
|
}),
|
|
n(t, d).then(u, e => {
|
|
f(m(e) ? {message: e} : e);
|
|
});
|
|
} catch (e) {
|
|
r(a(t, e));
|
|
}
|
|
})
|
|
))(t, r, o)
|
|
)
|
|
)
|
|
))(l, d)
|
|
: new Promise(e => {
|
|
e([]);
|
|
})
|
|
};
|
|
},
|
|
Jw = e => () =>
|
|
e.notificationManager.open({text: e.translate("Image uploading..."), type: "info", timeout: -1, progressBar: !0}),
|
|
ex = (e, t) => Qw(t, {url: rd(e), basePath: sd(e), credentials: ad(e), handler: id(e)}),
|
|
tx = e => {
|
|
const t = (() => {
|
|
let e = [];
|
|
const t = e => {
|
|
if (!e.blob || !e.base64)
|
|
throw new Error("blob and base64 representations of the image are required for BlobInfo to be created");
|
|
const t =
|
|
e.id ||
|
|
"blobid" +
|
|
Zw++ +
|
|
(() => {
|
|
const e = () => Math.round(4294967295 * Math.random()).toString(36);
|
|
return "s" + new Date().getTime().toString(36) + e() + e() + e();
|
|
})(),
|
|
n = e.name || t,
|
|
o = e.blob;
|
|
var r;
|
|
return {
|
|
id: N(t),
|
|
name: N(n),
|
|
filename: N(
|
|
e.filename ||
|
|
n +
|
|
"." +
|
|
((r = o.type),
|
|
{
|
|
"image/jpeg": "jpg",
|
|
"image/jpg": "jpg",
|
|
"image/gif": "gif",
|
|
"image/png": "png",
|
|
"image/apng": "apng",
|
|
"image/avif": "avif",
|
|
"image/svg+xml": "svg",
|
|
"image/webp": "webp",
|
|
"image/bmp": "bmp",
|
|
"image/tiff": "tiff"
|
|
}[r.toLowerCase()] || "dat")
|
|
),
|
|
blob: N(o),
|
|
base64: N(e.base64),
|
|
blobUri: N(e.blobUri || URL.createObjectURL(o)),
|
|
uri: N(e.uri)
|
|
};
|
|
},
|
|
n = t => Q(e, t).getOrUndefined(),
|
|
o = e => n(t => t.id() === e);
|
|
return {
|
|
create: (e, n, o, r, s) => {
|
|
if (m(e)) return t({id: e, name: r, filename: s, blob: n, base64: o});
|
|
if (f(e)) return t(e);
|
|
throw new Error("Unknown input type");
|
|
},
|
|
add: t => {
|
|
o(t.id()) || e.push(t);
|
|
},
|
|
get: o,
|
|
getByUri: e => n(t => t.blobUri() === e),
|
|
getByData: (e, t) => n(n => n.base64() === e && n.blob().type === t),
|
|
findFirst: n,
|
|
removeByUri: t => {
|
|
e = Y(e, e => e.blobUri() !== t || (URL.revokeObjectURL(e.blobUri()), !1));
|
|
},
|
|
destroy: () => {
|
|
q(e, e => {
|
|
URL.revokeObjectURL(e.blobUri());
|
|
}),
|
|
(e = []);
|
|
}
|
|
};
|
|
})();
|
|
let n, o;
|
|
const r = Xw(),
|
|
s = [],
|
|
a = t => n => e.selection ? t(n) : [],
|
|
i = (e, t, n) => {
|
|
let o = 0;
|
|
do {
|
|
(o = e.indexOf(t, o)),
|
|
-1 !== o && ((e = e.substring(0, o) + n + e.substr(o + t.length)), (o += n.length - t.length + 1));
|
|
} while (-1 !== o);
|
|
return e;
|
|
},
|
|
l = (e, t, n) => {
|
|
const o = `src="${n}"${n === Tt.transparentSrc ? ' data-mce-placeholder="1"' : ""}`;
|
|
return (e = i(e, `src="${t}"`, o)), i(e, 'data-mce-src="' + t + '"', 'data-mce-src="' + n + '"');
|
|
},
|
|
d = (t, n) => {
|
|
q(e.undoManager.data, e => {
|
|
"fragmented" === e.type
|
|
? (e.fragments = V(e.fragments, e => l(e, t, n)))
|
|
: (e.content = l(e.content, t, n));
|
|
});
|
|
},
|
|
c = () => (
|
|
n || (n = ex(e, r)),
|
|
p().then(
|
|
a(o => {
|
|
const r = V(o, e => e.blobInfo);
|
|
return n.upload(r, Jw(e)).then(
|
|
a(n => {
|
|
const r = [];
|
|
let s = !1;
|
|
const a = V(n, (n, a) => {
|
|
const {blobInfo: i, image: l} = o[a];
|
|
let c = !1;
|
|
return (
|
|
n.status && td(e)
|
|
? (n.url && !He(l.src, n.url) && (s = !0),
|
|
t.removeByUri(l.src),
|
|
rw(e) ||
|
|
((t, n) => {
|
|
const o = e.convertURL(n, "src");
|
|
var r;
|
|
d(t.src, n),
|
|
en(Cn(t), {
|
|
src: ed(e)
|
|
? ((r = n), r + (-1 === r.indexOf("?") ? "?" : "&") + new Date().getTime())
|
|
: n,
|
|
"data-mce-src": o
|
|
});
|
|
})(l, n.url))
|
|
: n.error &&
|
|
(n.error.remove && (d(l.src, Tt.transparentSrc), r.push(l), (c = !0)),
|
|
((e, t) => {
|
|
$w(e, ya.translate(["Failed to upload image: {0}", t]));
|
|
})(e, n.error.message)),
|
|
{element: l, status: n.status, uploadUri: n.url, blobInfo: i, removed: c}
|
|
);
|
|
});
|
|
return (
|
|
r.length > 0 && !rw(e)
|
|
? e.undoManager.transact(() => {
|
|
q(_o(r), n => {
|
|
const o = Tn(n);
|
|
Eo(n),
|
|
o.each(
|
|
(e => t => {
|
|
((e, t) => e.dom.isEmpty(t.dom) && C(e.schema.getTextBlockElements()[$t(t)]))(e, t) &&
|
|
yo(t, bn('<br data-mce-bogus="1" />'));
|
|
})(e)
|
|
),
|
|
t.removeByUri(n.dom.src);
|
|
});
|
|
})
|
|
: s && e.undoManager.dispatchChange(),
|
|
a
|
|
);
|
|
})
|
|
);
|
|
})
|
|
)
|
|
),
|
|
u = () => (Jl(e) ? c() : Promise.resolve([])),
|
|
g = e => ne(s, t => t(e)),
|
|
p = () => (
|
|
o || (o = Gw(r, t)),
|
|
o.findAll(e.getBody(), g).then(
|
|
a(t => {
|
|
const n = Y(t, t => (m(t) ? ($w(e, t), !1) : "blob" !== t.uriType));
|
|
return (
|
|
rw(e) ||
|
|
q(n, e => {
|
|
d(e.image.src, e.blobInfo.blobUri()),
|
|
(e.image.src = e.blobInfo.blobUri()),
|
|
e.image.removeAttribute("data-mce-src");
|
|
}),
|
|
n
|
|
);
|
|
})
|
|
)
|
|
),
|
|
h = n =>
|
|
n.replace(/src="(blob:[^"]+)"/g, (n, o) => {
|
|
const s = r.getResultUri(o);
|
|
if (s) return 'src="' + s + '"';
|
|
let a = t.getByUri(o);
|
|
return (
|
|
a ||
|
|
(a = X(
|
|
e.editorManager.get(),
|
|
(e, t) => e || (t.editorUpload && t.editorUpload.blobCache.getByUri(o)),
|
|
void 0
|
|
)),
|
|
a ? 'src="data:' + a.blob().type + ";base64," + a.base64() + '"' : n
|
|
);
|
|
});
|
|
return (
|
|
e.on("SetContent", () => {
|
|
Jl(e) ? u() : p();
|
|
}),
|
|
e.on("RawSaveContent", e => {
|
|
e.content = h(e.content);
|
|
}),
|
|
e.on("GetContent", e => {
|
|
e.source_view || "raw" === e.format || "tree" === e.format || (e.content = h(e.content));
|
|
}),
|
|
e.on("PostRender", () => {
|
|
e.parser.addNodeFilter("img", e => {
|
|
q(e, e => {
|
|
const n = e.attr("src");
|
|
if (!n || t.getByUri(n)) return;
|
|
const o = r.getResultUri(n);
|
|
o && e.attr("src", o);
|
|
});
|
|
});
|
|
}),
|
|
{
|
|
blobCache: t,
|
|
addFilter: e => {
|
|
s.push(e);
|
|
},
|
|
uploadImages: c,
|
|
uploadImagesAuto: u,
|
|
scanForImages: p,
|
|
destroy: () => {
|
|
t.destroy(), r.destroy(), (o = n = null);
|
|
}
|
|
}
|
|
);
|
|
},
|
|
nx = {remove_similar: !0, inherit: !1},
|
|
ox = {selector: "td,th", ...nx},
|
|
rx = {
|
|
tablecellbackgroundcolor: {styles: {backgroundColor: "%value"}, ...ox},
|
|
tablecellverticalalign: {styles: {"vertical-align": "%value"}, ...ox},
|
|
tablecellbordercolor: {styles: {borderColor: "%value"}, ...ox},
|
|
tablecellclass: {classes: ["%value"], ...ox},
|
|
tableclass: {selector: "table", classes: ["%value"], ...nx},
|
|
tablecellborderstyle: {styles: {borderStyle: "%value"}, ...ox},
|
|
tablecellborderwidth: {styles: {borderWidth: "%value"}, ...ox}
|
|
},
|
|
sx = N(rx),
|
|
ax = Dt.each,
|
|
ix = fa.DOM,
|
|
lx = e => C(e) && f(e),
|
|
dx = (e, t) => {
|
|
const n = (t && t.schema) || Fs({}),
|
|
o = e => {
|
|
const t = m(e) ? {name: e, classes: [], attrs: {}} : e,
|
|
n = ix.create(t.name);
|
|
return (
|
|
((e, t) => {
|
|
t.classes.length > 0 && ix.addClass(e, t.classes.join(" ")), ix.setAttribs(e, t.attrs);
|
|
})(n, t),
|
|
n
|
|
);
|
|
},
|
|
r = (e, t, s) => {
|
|
let a;
|
|
const i = t[0],
|
|
l = lx(i) ? i.name : void 0,
|
|
d = ((e, t) => {
|
|
const o = n.getElementRule(e.nodeName.toLowerCase()),
|
|
r = null == o ? void 0 : o.parentsRequired;
|
|
return !(!r || !r.length) && (t && H(r, t) ? t : r[0]);
|
|
})(e, l);
|
|
if (d) l === d ? ((a = i), (t = t.slice(1))) : (a = d);
|
|
else if (i) (a = i), (t = t.slice(1));
|
|
else if (!s) return e;
|
|
const c = a ? o(a) : ix.create("div");
|
|
c.appendChild(e),
|
|
s &&
|
|
Dt.each(s, t => {
|
|
const n = o(t);
|
|
c.insertBefore(n, e);
|
|
});
|
|
const u = lx(a) ? a.siblings : void 0;
|
|
return r(c, t, u);
|
|
},
|
|
s = ix.create("div");
|
|
if (e.length > 0) {
|
|
const t = e[0],
|
|
n = o(t),
|
|
a = lx(t) ? t.siblings : void 0;
|
|
s.appendChild(r(n, e.slice(1), a));
|
|
}
|
|
return s;
|
|
},
|
|
cx = e => {
|
|
let t = "div";
|
|
const n = {name: t, classes: [], attrs: {}, selector: (e = Dt.trim(e))};
|
|
return (
|
|
"*" !== e &&
|
|
(t = e.replace(/(?:([#\.]|::?)([\w\-]+)|(\[)([^\]]+)\]?)/g, (e, t, o, r, s) => {
|
|
switch (t) {
|
|
case "#":
|
|
n.attrs.id = o;
|
|
break;
|
|
case ".":
|
|
n.classes.push(o);
|
|
break;
|
|
case ":":
|
|
-1 !== Dt.inArray("checked disabled enabled read-only required".split(" "), o) && (n.attrs[o] = o);
|
|
}
|
|
if ("[" === r) {
|
|
const e = s.match(/([\w\-]+)(?:\=\"([^\"]+))?/);
|
|
e && (n.attrs[e[1]] = e[2]);
|
|
}
|
|
return "";
|
|
})),
|
|
(n.name = t || "div"),
|
|
n
|
|
);
|
|
},
|
|
ux = (e, t) => {
|
|
let n = "",
|
|
o = Td(e);
|
|
if ("" === o) return "";
|
|
const r = e => (m(e) ? e.replace(/%(\w+)/g, "") : ""),
|
|
s = (t, n) => ix.getStyle(null != n ? n : e.getBody(), t, !0);
|
|
if (m(t)) {
|
|
const n = e.formatter.get(t);
|
|
if (!n) return "";
|
|
t = n[0];
|
|
}
|
|
if ("preview" in t) {
|
|
const e = t.preview;
|
|
if (!1 === e) return "";
|
|
o = e || o;
|
|
}
|
|
let a,
|
|
i = t.block || t.inline || "span";
|
|
const l =
|
|
((d = t.selector),
|
|
m(d)
|
|
? ((d = (d = d.split(/\s*,\s*/)[0]).replace(/\s*(~\+|~|\+|>)\s*/g, "$1")),
|
|
Dt.map(d.split(/(?:>|\s+(?![^\[\]]+\]))/), e => {
|
|
const t = Dt.map(e.split(/(?:~\+|~|\+)/), cx),
|
|
n = t.pop();
|
|
return t.length && (n.siblings = t), n;
|
|
}).reverse())
|
|
: []);
|
|
var d;
|
|
l.length > 0 ? (l[0].name || (l[0].name = i), (i = t.selector), (a = dx(l, e))) : (a = dx([i], e));
|
|
const c = ix.select(i, a)[0] || a.firstChild;
|
|
ax(t.styles, (e, t) => {
|
|
const n = r(e);
|
|
n && ix.setStyle(c, t, n);
|
|
}),
|
|
ax(t.attributes, (e, t) => {
|
|
const n = r(e);
|
|
n && ix.setAttrib(c, t, n);
|
|
}),
|
|
ax(t.classes, e => {
|
|
const t = r(e);
|
|
ix.hasClass(c, t) || ix.addClass(c, t);
|
|
}),
|
|
e.dispatch("PreviewFormats"),
|
|
ix.setStyles(a, {position: "absolute", left: -65535}),
|
|
e.getBody().appendChild(a);
|
|
const u = s("fontSize"),
|
|
f = /px$/.test(u) ? parseInt(u, 10) : 0;
|
|
return (
|
|
ax(o.split(" "), e => {
|
|
let t = s(e, c);
|
|
if (
|
|
!(
|
|
("background-color" === e &&
|
|
/transparent|rgba\s*\([^)]+,\s*0\)/.test(t) &&
|
|
((t = s(e)), "#ffffff" === Ks(t).toLowerCase())) ||
|
|
("color" === e && "#000000" === Ks(t).toLowerCase())
|
|
)
|
|
) {
|
|
if ("font-size" === e && /em|%$/.test(t)) {
|
|
if (0 === f) return;
|
|
t = (parseFloat(t) / (/%$/.test(t) ? 100 : 1)) * f + "px";
|
|
}
|
|
"border" === e && t && (n += "padding:0 2px;"), (n += e + ":" + t + ";");
|
|
}
|
|
}),
|
|
e.dispatch("AfterPreviewFormats"),
|
|
ix.remove(a),
|
|
n
|
|
);
|
|
},
|
|
mx = e => {
|
|
const t = (e => {
|
|
const t = {},
|
|
n = (e, o) => {
|
|
e &&
|
|
(m(e)
|
|
? (p(o) || (o = [o]),
|
|
q(o, e => {
|
|
v(e.deep) && (e.deep = !Fm(e)),
|
|
v(e.split) && (e.split = !Fm(e) || Um(e)),
|
|
v(e.remove) && Fm(e) && !Um(e) && (e.remove = "none"),
|
|
Fm(e) && Um(e) && ((e.mixed = !0), (e.block_expand = !0)),
|
|
m(e.classes) && (e.classes = e.classes.split(/\s+/));
|
|
}),
|
|
(t[e] = o))
|
|
: pe(e, (e, t) => {
|
|
n(t, e);
|
|
}));
|
|
};
|
|
return (
|
|
n(
|
|
(e => {
|
|
const t = e.dom,
|
|
n = e.schema.type,
|
|
o = {
|
|
valigntop: [{selector: "td,th", styles: {verticalAlign: "top"}}],
|
|
valignmiddle: [{selector: "td,th", styles: {verticalAlign: "middle"}}],
|
|
valignbottom: [{selector: "td,th", styles: {verticalAlign: "bottom"}}],
|
|
alignleft: [
|
|
{
|
|
selector: "figure.image",
|
|
collapsed: !1,
|
|
classes: "align-left",
|
|
ceFalseOverride: !0,
|
|
preview: "font-family font-size"
|
|
},
|
|
{
|
|
selector: "figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre",
|
|
styles: {textAlign: "left"},
|
|
inherit: !1,
|
|
preview: !1
|
|
},
|
|
{
|
|
selector: "img,audio,video",
|
|
collapsed: !1,
|
|
styles: {float: "left"},
|
|
preview: "font-family font-size"
|
|
},
|
|
{
|
|
selector: "table",
|
|
collapsed: !1,
|
|
styles: {marginLeft: "0px", marginRight: "auto"},
|
|
onformat: e => {
|
|
t.setStyle(e, "float", null);
|
|
},
|
|
preview: "font-family font-size"
|
|
},
|
|
{
|
|
selector: ".mce-preview-object,[data-ephox-embed-iri]",
|
|
ceFalseOverride: !0,
|
|
styles: {float: "left"}
|
|
}
|
|
],
|
|
aligncenter: [
|
|
{
|
|
selector: "figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre",
|
|
styles: {textAlign: "center"},
|
|
inherit: !1,
|
|
preview: "font-family font-size"
|
|
},
|
|
{
|
|
selector: "figure.image",
|
|
collapsed: !1,
|
|
classes: "align-center",
|
|
ceFalseOverride: !0,
|
|
preview: "font-family font-size"
|
|
},
|
|
{
|
|
selector: "img,audio,video",
|
|
collapsed: !1,
|
|
styles: {display: "block", marginLeft: "auto", marginRight: "auto"},
|
|
preview: !1
|
|
},
|
|
{
|
|
selector: "table",
|
|
collapsed: !1,
|
|
styles: {marginLeft: "auto", marginRight: "auto"},
|
|
preview: "font-family font-size"
|
|
},
|
|
{
|
|
selector: ".mce-preview-object",
|
|
ceFalseOverride: !0,
|
|
styles: {display: "table", marginLeft: "auto", marginRight: "auto"},
|
|
preview: !1
|
|
},
|
|
{
|
|
selector: "[data-ephox-embed-iri]",
|
|
ceFalseOverride: !0,
|
|
styles: {marginLeft: "auto", marginRight: "auto"},
|
|
preview: !1
|
|
}
|
|
],
|
|
alignright: [
|
|
{
|
|
selector: "figure.image",
|
|
collapsed: !1,
|
|
classes: "align-right",
|
|
ceFalseOverride: !0,
|
|
preview: "font-family font-size"
|
|
},
|
|
{
|
|
selector: "figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre",
|
|
styles: {textAlign: "right"},
|
|
inherit: !1,
|
|
preview: "font-family font-size"
|
|
},
|
|
{
|
|
selector: "img,audio,video",
|
|
collapsed: !1,
|
|
styles: {float: "right"},
|
|
preview: "font-family font-size"
|
|
},
|
|
{
|
|
selector: "table",
|
|
collapsed: !1,
|
|
styles: {marginRight: "0px", marginLeft: "auto"},
|
|
onformat: e => {
|
|
t.setStyle(e, "float", null);
|
|
},
|
|
preview: "font-family font-size"
|
|
},
|
|
{
|
|
selector: ".mce-preview-object,[data-ephox-embed-iri]",
|
|
ceFalseOverride: !0,
|
|
styles: {float: "right"},
|
|
preview: !1
|
|
}
|
|
],
|
|
alignjustify: [
|
|
{
|
|
selector: "figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre",
|
|
styles: {textAlign: "justify"},
|
|
inherit: !1,
|
|
preview: "font-family font-size"
|
|
}
|
|
],
|
|
bold: [
|
|
{inline: "strong", remove: "all", preserve_attributes: ["class", "style"]},
|
|
{inline: "span", styles: {fontWeight: "bold"}},
|
|
{inline: "b", remove: "all", preserve_attributes: ["class", "style"]}
|
|
],
|
|
italic: [
|
|
{inline: "em", remove: "all", preserve_attributes: ["class", "style"]},
|
|
{inline: "span", styles: {fontStyle: "italic"}},
|
|
{inline: "i", remove: "all", preserve_attributes: ["class", "style"]}
|
|
],
|
|
underline: [
|
|
{inline: "span", styles: {textDecoration: "underline"}, exact: !0},
|
|
{inline: "u", remove: "all", preserve_attributes: ["class", "style"]}
|
|
],
|
|
strikethrough: (() => {
|
|
const e = {inline: "span", styles: {textDecoration: "line-through"}, exact: !0},
|
|
t = {inline: "strike", remove: "all", preserve_attributes: ["class", "style"]},
|
|
o = {inline: "s", remove: "all", preserve_attributes: ["class", "style"]};
|
|
return "html4" !== n ? [o, e, t] : [e, o, t];
|
|
})(),
|
|
forecolor: {
|
|
inline: "span",
|
|
styles: {color: "%value"},
|
|
links: !0,
|
|
remove_similar: !0,
|
|
clear_child_styles: !0
|
|
},
|
|
hilitecolor: {
|
|
inline: "span",
|
|
styles: {backgroundColor: "%value"},
|
|
links: !0,
|
|
remove_similar: !0,
|
|
clear_child_styles: !0
|
|
},
|
|
fontname: {inline: "span", toggle: !1, styles: {fontFamily: "%value"}, clear_child_styles: !0},
|
|
fontsize: {inline: "span", toggle: !1, styles: {fontSize: "%value"}, clear_child_styles: !0},
|
|
lineheight: {selector: "h1,h2,h3,h4,h5,h6,p,li,td,th,div", styles: {lineHeight: "%value"}},
|
|
fontsize_class: {inline: "span", attributes: {class: "%value"}},
|
|
blockquote: {block: "blockquote", wrapper: !0, remove: "all"},
|
|
subscript: {inline: "sub"},
|
|
superscript: {inline: "sup"},
|
|
code: {inline: "code"},
|
|
link: {
|
|
inline: "a",
|
|
selector: "a",
|
|
remove: "all",
|
|
split: !0,
|
|
deep: !0,
|
|
onmatch: (e, t, n) => er(e) && e.hasAttribute("href"),
|
|
onformat: (e, n, o) => {
|
|
Dt.each(o, (n, o) => {
|
|
t.setAttrib(e, o, n);
|
|
});
|
|
}
|
|
},
|
|
lang: {
|
|
inline: "span",
|
|
clear_child_styles: !0,
|
|
remove_similar: !0,
|
|
attributes: {
|
|
lang: "%value",
|
|
"data-mce-lang": e => {
|
|
var t;
|
|
return null !== (t = null == e ? void 0 : e.customValue) && void 0 !== t ? t : null;
|
|
}
|
|
}
|
|
},
|
|
removeformat: [
|
|
{
|
|
selector:
|
|
"b,strong,em,i,font,u,strike,s,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins,small",
|
|
remove: "all",
|
|
split: !0,
|
|
expand: !1,
|
|
block_expand: !0,
|
|
deep: !0
|
|
},
|
|
{
|
|
selector: "span",
|
|
attributes: ["style", "class"],
|
|
remove: "empty",
|
|
split: !0,
|
|
expand: !1,
|
|
deep: !0
|
|
},
|
|
{selector: "*", attributes: ["style", "class"], split: !1, expand: !1, deep: !0}
|
|
]
|
|
};
|
|
return (
|
|
Dt.each("p h1 h2 h3 h4 h5 h6 div address pre dt dd samp".split(/\s/), e => {
|
|
o[e] = {block: e, remove: "all"};
|
|
}),
|
|
o
|
|
);
|
|
})(e)
|
|
),
|
|
n(sx()),
|
|
n(Ad(e)),
|
|
{
|
|
get: e => (C(e) ? t[e] : t),
|
|
has: e => ke(t, e),
|
|
register: n,
|
|
unregister: e => (e && t[e] && delete t[e], t)
|
|
}
|
|
);
|
|
})(e),
|
|
n = Br({});
|
|
return (
|
|
(e => {
|
|
e.addShortcut("meta+b", "", "Bold"),
|
|
e.addShortcut("meta+i", "", "Italic"),
|
|
e.addShortcut("meta+u", "", "Underline");
|
|
for (let t = 1; t <= 6; t++) e.addShortcut("access+" + t, "", ["FormatBlock", !1, "h" + t]);
|
|
e.addShortcut("access+7", "", ["FormatBlock", !1, "p"]),
|
|
e.addShortcut("access+8", "", ["FormatBlock", !1, "div"]),
|
|
e.addShortcut("access+9", "", ["FormatBlock", !1, "address"]);
|
|
})(e),
|
|
(e => {
|
|
e.on("mouseup keydown", t => {
|
|
var n;
|
|
((e, t, n) => {
|
|
const o = e.selection,
|
|
r = e.getBody();
|
|
Jb(e, null, n),
|
|
(8 !== t && 46 !== t) ||
|
|
!o.isCollapsed() ||
|
|
o.getStart().innerHTML !== Gb ||
|
|
Jb(e, Ku(r, o.getStart()), !0),
|
|
(37 !== t && 39 !== t) || Jb(e, Ku(r, o.getStart()), !0);
|
|
})(e, t.keyCode, ((n = e.selection.getRng().endContainer), dr(n) && Ve(n.data, Wo)));
|
|
});
|
|
})(e),
|
|
rw(e) ||
|
|
((e, t) => {
|
|
e.set({}),
|
|
t.on("NodeChange", n => {
|
|
Yv(t, n.element, e.get());
|
|
}),
|
|
t.on("FormatApply FormatRemove", n => {
|
|
const o = I.from(n.node)
|
|
.map(e => (wm(e) ? e : e.startContainer))
|
|
.bind(e => (er(e) ? I.some(e) : I.from(e.parentElement)))
|
|
.getOrThunk(() => qv(t));
|
|
Yv(t, o, e.get());
|
|
});
|
|
})(n, e),
|
|
{
|
|
get: t.get,
|
|
has: t.has,
|
|
register: t.register,
|
|
unregister: t.unregister,
|
|
apply: (t, n, o) => {
|
|
((e, t, n, o) => {
|
|
aw(e).formatter.apply(t, n, o);
|
|
})(e, t, n, o);
|
|
},
|
|
remove: (t, n, o, r) => {
|
|
((e, t, n, o, r) => {
|
|
aw(e).formatter.remove(t, n, o, r);
|
|
})(e, t, n, o, r);
|
|
},
|
|
toggle: (t, n, o) => {
|
|
((e, t, n, o) => {
|
|
aw(e).formatter.toggle(t, n, o);
|
|
})(e, t, n, o);
|
|
},
|
|
match: (t, n, o, r) => ((e, t, n, o, r) => aw(e).formatter.match(t, n, o, r))(e, t, n, o, r),
|
|
closest: t => ((e, t) => aw(e).formatter.closest(t))(e, t),
|
|
matchAll: (t, n) => ((e, t, n) => aw(e).formatter.matchAll(t, n))(e, t, n),
|
|
matchNode: (t, n, o, r) => ((e, t, n, o, r) => aw(e).formatter.matchNode(t, n, o, r))(e, t, n, o, r),
|
|
canApply: t => ((e, t) => aw(e).formatter.canApply(t))(e, t),
|
|
formatChanged: (t, o, r, s) =>
|
|
((e, t, n, o, r, s) => aw(e).formatter.formatChanged(t, n, o, r, s))(e, n, t, o, r, s),
|
|
getCssText: T(ux, e)
|
|
}
|
|
);
|
|
},
|
|
fx = e => {
|
|
switch (e.toLowerCase()) {
|
|
case "undo":
|
|
case "redo":
|
|
case "mcefocus":
|
|
return !0;
|
|
default:
|
|
return !1;
|
|
}
|
|
},
|
|
gx = e => {
|
|
const t = Dr(),
|
|
n = Br(0),
|
|
o = Br(0),
|
|
r = {
|
|
data: [],
|
|
typing: !1,
|
|
beforeChange: () => {
|
|
((e, t, n) => {
|
|
aw(e).undoManager.beforeChange(t, n);
|
|
})(e, n, t);
|
|
},
|
|
add: (s, a) => ((e, t, n, o, r, s, a) => aw(e).undoManager.add(t, n, o, r, s, a))(e, r, o, n, t, s, a),
|
|
dispatchChange: () => {
|
|
e.setDirty(!0);
|
|
const t = GC(e);
|
|
(t.bookmark = Cl(e.selection)),
|
|
e.dispatch("change", {level: t, lastLevel: ie(r.data, o.get()).getOrUndefined()});
|
|
},
|
|
undo: () => ((e, t, n, o) => aw(e).undoManager.undo(t, n, o))(e, r, n, o),
|
|
redo: () => ((e, t, n) => aw(e).undoManager.redo(t, n))(e, o, r.data),
|
|
clear: () => {
|
|
((e, t, n) => {
|
|
aw(e).undoManager.clear(t, n);
|
|
})(e, r, o);
|
|
},
|
|
reset: () => {
|
|
((e, t) => {
|
|
aw(e).undoManager.reset(t);
|
|
})(e, r);
|
|
},
|
|
hasUndo: () => ((e, t, n) => aw(e).undoManager.hasUndo(t, n))(e, r, o),
|
|
hasRedo: () => ((e, t, n) => aw(e).undoManager.hasRedo(t, n))(e, r, o),
|
|
transact: t => ((e, t, n, o) => aw(e).undoManager.transact(t, n, o))(e, r, n, t),
|
|
ignore: t => {
|
|
((e, t, n) => {
|
|
aw(e).undoManager.ignore(t, n);
|
|
})(e, n, t);
|
|
},
|
|
extra: (t, n) => {
|
|
((e, t, n, o, r) => {
|
|
aw(e).undoManager.extra(t, n, o, r);
|
|
})(e, r, o, t, n);
|
|
}
|
|
};
|
|
return (
|
|
rw(e) ||
|
|
((e, t, n) => {
|
|
const o = Br(!1),
|
|
r = e => {
|
|
tw(t, !1, n), t.add({}, e);
|
|
};
|
|
e.on("init", () => {
|
|
t.add();
|
|
}),
|
|
e.on("BeforeExecCommand", e => {
|
|
const o = e.command;
|
|
fx(o) || (nw(t, n), t.beforeChange());
|
|
}),
|
|
e.on("ExecCommand", e => {
|
|
const t = e.command;
|
|
fx(t) || r(e);
|
|
}),
|
|
e.on("ObjectResizeStart cut", () => {
|
|
t.beforeChange();
|
|
}),
|
|
e.on("SaveContent ObjectResized blur", r),
|
|
e.on("dragend", r),
|
|
e.on("keyup", n => {
|
|
const s = n.keyCode;
|
|
if (n.isDefaultPrevented()) return;
|
|
const a = Tt.os.isMacOS() && "Meta" === n.key;
|
|
((s >= 33 && s <= 36) || (s >= 37 && s <= 40) || 45 === s || n.ctrlKey || a) && (r(), e.nodeChanged()),
|
|
(46 !== s && 8 !== s) || e.nodeChanged(),
|
|
o.get() &&
|
|
t.typing &&
|
|
!JC(GC(e), t.data[0]) &&
|
|
(e.isDirty() || e.setDirty(!0), e.dispatch("TypingUndo"), o.set(!1), e.nodeChanged());
|
|
}),
|
|
e.on("keydown", e => {
|
|
const s = e.keyCode;
|
|
if (e.isDefaultPrevented()) return;
|
|
if ((s >= 33 && s <= 36) || (s >= 37 && s <= 40) || 45 === s) return void (t.typing && r(e));
|
|
const a = (e.ctrlKey && !e.altKey) || e.metaKey;
|
|
if ((s < 16 || s > 20) && 224 !== s && 91 !== s && !t.typing && !a)
|
|
return t.beforeChange(), tw(t, !0, n), t.add({}, e), void o.set(!0);
|
|
(Tt.os.isMacOS() ? e.metaKey : e.ctrlKey && !e.altKey) && t.beforeChange();
|
|
}),
|
|
e.on("mousedown", e => {
|
|
t.typing && r(e);
|
|
}),
|
|
e.on("input", e => {
|
|
var t;
|
|
e.inputType &&
|
|
("insertReplacementText" === e.inputType ||
|
|
("insertText" === (t = e).inputType && null === t.data) ||
|
|
(e => "insertFromPaste" === e.inputType || "insertFromDrop" === e.inputType)(e)) &&
|
|
r(e);
|
|
}),
|
|
e.on("AddUndo Undo Redo ClearUndos", t => {
|
|
t.isDefaultPrevented() || e.nodeChanged();
|
|
});
|
|
})(e, r, n),
|
|
(e => {
|
|
e.addShortcut("meta+z", "", "Undo"), e.addShortcut("meta+y,meta+shift+z", "", "Redo");
|
|
})(e),
|
|
r
|
|
);
|
|
},
|
|
px = [
|
|
9,
|
|
27,
|
|
Cf.HOME,
|
|
Cf.END,
|
|
19,
|
|
20,
|
|
44,
|
|
144,
|
|
145,
|
|
33,
|
|
34,
|
|
45,
|
|
16,
|
|
17,
|
|
18,
|
|
91,
|
|
92,
|
|
93,
|
|
Cf.DOWN,
|
|
Cf.UP,
|
|
Cf.LEFT,
|
|
Cf.RIGHT
|
|
].concat(Tt.browser.isFirefox() ? [224] : []),
|
|
hx = "data-mce-placeholder",
|
|
bx = e => "keydown" === e.type || "keyup" === e.type,
|
|
vx = e => {
|
|
const t = e.keyCode;
|
|
return t === Cf.BACKSPACE || t === Cf.DELETE;
|
|
},
|
|
yx = (e, t) => ({from: e, to: t}),
|
|
Cx = (e, t) => {
|
|
const n = Cn(e),
|
|
o = Cn(t.container());
|
|
return Ih(n, o).map(e => ((e, t) => ({block: e, position: t}))(e, t));
|
|
},
|
|
wx = (e, t) =>
|
|
Jn(
|
|
t,
|
|
e => Ga(e) || br(e.dom),
|
|
t => _n(t, e)
|
|
)
|
|
.filter(Kt)
|
|
.getOr(e),
|
|
xx = (e, t) => {
|
|
const n = ((e, t) => {
|
|
const n = In(e);
|
|
return J(n, e => t.isBlock($t(e))).fold(N(n), e => n.slice(0, e));
|
|
})(e, t);
|
|
return q(n, Eo), n;
|
|
},
|
|
Ex = (e, t, n) => {
|
|
const o = zp(n, t);
|
|
return Q(o.reverse(), t => Tr(e, t)).each(Eo);
|
|
},
|
|
kx = (e, t, n, o, r) => {
|
|
if (Tr(o, n)) return Qa(n), $u(n.dom);
|
|
((e, t) => 0 === Y(Ln(t), t => !Tr(e, t)).length)(o, r) && Tr(o, t) && ho(r, vn("br"));
|
|
const s = Hu(n.dom, Ji.before(r.dom));
|
|
return (
|
|
q(xx(t, o), e => {
|
|
ho(r, e);
|
|
}),
|
|
Ex(o, e, t),
|
|
s
|
|
);
|
|
},
|
|
_x = (e, t, n, o) => {
|
|
if (Tr(o, n)) {
|
|
if (Tr(o, t)) {
|
|
const e = e => {
|
|
const t = (e, n) =>
|
|
Un(e).fold(
|
|
() => n,
|
|
e => (((e, t) => e.isInline($t(t)))(o, e) ? t(e, n.concat(Ia(e))) : n)
|
|
);
|
|
return t(e, []);
|
|
},
|
|
r = G(e(n), (e, t) => (Co(e, t), t), Za());
|
|
xo(t), yo(t, r);
|
|
}
|
|
return Eo(n), $u(t.dom);
|
|
}
|
|
const r = Vu(n.dom);
|
|
return (
|
|
q(xx(t, o), e => {
|
|
yo(n, e);
|
|
}),
|
|
Ex(o, e, t),
|
|
r
|
|
);
|
|
},
|
|
Sx = (e, t) => {
|
|
zu(e, t.dom)
|
|
.bind(e => I.from(e.getNode()))
|
|
.map(Cn)
|
|
.filter(Va)
|
|
.each(Eo);
|
|
},
|
|
Nx = (e, t, n, o) => (
|
|
Sx(!0, t),
|
|
Sx(!1, n),
|
|
((e, t) =>
|
|
Sn(t, e)
|
|
? ((e, t) => {
|
|
const n = zp(t, e);
|
|
return I.from(n[n.length - 1]);
|
|
})(t, e)
|
|
: I.none())(t, n).fold(T(_x, e, t, n, o), T(kx, e, t, n, o))
|
|
),
|
|
Rx = (e, t, n, o, r) => (t ? Nx(e, o, n, r) : Nx(e, n, o, r)),
|
|
Ax = (e, t) => {
|
|
const n = Cn(e.getBody()),
|
|
o = ((e, t, n, o) =>
|
|
o.collapsed
|
|
? ((e, t, n, o) => {
|
|
const r = Cx(t, Ji.fromRangeStart(o)),
|
|
s = r.bind(o =>
|
|
Iu(n, t, o.position).bind(o =>
|
|
Cx(t, o).map(o =>
|
|
((e, t, n, o) =>
|
|
pr(o.position.getNode()) && !Tr(e, o.block)
|
|
? zu(!1, o.block.dom)
|
|
.bind(e => (e.isEqual(o.position) ? Iu(n, t, e).bind(e => Cx(t, e)) : I.some(o)))
|
|
.getOr(o)
|
|
: o)(e, t, n, o)
|
|
)
|
|
)
|
|
);
|
|
return It(r, s, yx).filter(
|
|
e =>
|
|
(e => !_n(e.from.block, e.to.block))(e) &&
|
|
((e, t) => {
|
|
const n = Cn(e);
|
|
return _n(wx(n, t.from.block), wx(n, t.to.block));
|
|
})(t, e) &&
|
|
(e => !1 === vr(e.from.block.dom) && !1 === vr(e.to.block.dom))(e) &&
|
|
(e => {
|
|
const t = e => qa(e) || Yr(e.dom);
|
|
return t(e.from.block) && t(e.to.block);
|
|
})(e) &&
|
|
(e => !(Sn(e.to.block, e.from.block) || Sn(e.from.block, e.to.block)))(e)
|
|
);
|
|
})(e, t, n, o)
|
|
: I.none())(e.schema, n.dom, t, e.selection.getRng()).map(o => () => {
|
|
Rx(n, t, o.from.block, o.to.block, e.schema).each(t => {
|
|
e.selection.setRng(t.toRange());
|
|
});
|
|
});
|
|
return o;
|
|
},
|
|
Tx = (e, t) => {
|
|
const n = Cn(t),
|
|
o = T(_n, e);
|
|
return Qn(n, Ga, o).isSome();
|
|
},
|
|
Ox = e => {
|
|
const t = Cn(e.getBody());
|
|
return ((e, t) => {
|
|
const n = Hu(e.dom, Ji.fromRangeStart(t)).isNone(),
|
|
o = ju(e.dom, Ji.fromRangeEnd(t)).isNone();
|
|
return !((e, t) => Tx(e, t.startContainer) || Tx(e, t.endContainer))(e, t) && n && o;
|
|
})(t, e.selection.getRng())
|
|
? (e =>
|
|
I.some(() => {
|
|
e.setContent(""), e.selection.setCursorLocation();
|
|
}))(e)
|
|
: ((e, t, n) => {
|
|
const o = t.getRng();
|
|
return It(Ih(e, Cn(o.startContainer)), Ih(e, Cn(o.endContainer)), (r, s) =>
|
|
_n(r, s)
|
|
? I.none()
|
|
: I.some(() => {
|
|
o.deleteContents(),
|
|
Rx(e, !0, r, s, n).each(e => {
|
|
t.setRng(e.toRange());
|
|
});
|
|
})
|
|
).getOr(I.none());
|
|
})(t, e.selection, e.schema);
|
|
},
|
|
Bx = (e, t) => (e.selection.isCollapsed() ? I.none() : Ox(e)),
|
|
Px = (e, t, n, o, r) => I.from(t._selectionOverrides.showCaret(e, n, o, r)),
|
|
Dx = (e, t) =>
|
|
e.dispatch("BeforeObjectSelected", {target: t}).isDefaultPrevented()
|
|
? I.none()
|
|
: I.some(
|
|
(e => {
|
|
const t = e.ownerDocument.createRange();
|
|
return t.selectNode(e), t;
|
|
})(t)
|
|
),
|
|
Lx = (e, t, n) =>
|
|
t.collapsed
|
|
? ((e, t, n) => {
|
|
const o = hu(1, e.getBody(), t),
|
|
r = Ji.fromRangeStart(o),
|
|
s = r.getNode();
|
|
if (Kc(s)) return Px(1, e, s, !r.isAtEnd(), !1);
|
|
const a = r.getNode(!0);
|
|
if (Kc(a)) return Px(1, e, a, !1, !1);
|
|
const i = gb(e.dom.getRoot(), r.getNode());
|
|
return Kc(i) ? Px(1, e, i, !1, n) : I.none();
|
|
})(e, t, n).getOr(t)
|
|
: t,
|
|
Mx = e => Ip(e) || Pp(e),
|
|
Ix = e => Fp(e) || Dp(e),
|
|
Fx = (e, t, n, o, r, s) => {
|
|
Px(o, e, s.getNode(!r), r, !0).each(n => {
|
|
if (t.collapsed) {
|
|
const e = t.cloneRange();
|
|
r ? e.setEnd(n.startContainer, n.startOffset) : e.setStart(n.endContainer, n.endOffset), e.deleteContents();
|
|
} else t.deleteContents();
|
|
e.selection.setRng(n);
|
|
}),
|
|
((e, t) => {
|
|
dr(t) && 0 === t.data.length && e.remove(t);
|
|
})(e.dom, n);
|
|
},
|
|
Ux = (e, t) =>
|
|
((e, t) => {
|
|
const n = e.selection.getRng();
|
|
if (!dr(n.commonAncestorContainer)) return I.none();
|
|
const o = t ? xu.Forwards : xu.Backwards,
|
|
r = Pu(e.getBody()),
|
|
s = T(Cu, t ? r.next : r.prev),
|
|
a = t ? Mx : Ix,
|
|
i = vu(o, e.getBody(), n),
|
|
l = s(i),
|
|
d = l ? Oh(t, l) : l;
|
|
if (!d || !wu(i, d)) return I.none();
|
|
if (a(d)) return I.some(() => Fx(e, n, i.getNode(), o, t, d));
|
|
const c = s(d);
|
|
return c && a(c) && wu(d, c) ? I.some(() => Fx(e, n, i.getNode(), o, t, c)) : I.none();
|
|
})(e, t),
|
|
zx = (e, t) => {
|
|
const n = e.getBody();
|
|
return t ? $u(n).filter(Ip) : Vu(n).filter(Fp);
|
|
},
|
|
jx = e => {
|
|
const t = e.selection.getRng();
|
|
return (
|
|
!t.collapsed &&
|
|
(zx(e, !0).exists(e => e.isEqual(Ji.fromRangeStart(t))) || zx(e, !1).exists(e => e.isEqual(Ji.fromRangeEnd(t))))
|
|
);
|
|
},
|
|
Hx = kl([{remove: ["element"]}, {moveToElement: ["element"]}, {moveToPosition: ["position"]}]),
|
|
$x = (e, t, n, o) =>
|
|
Iu(t, e, n).bind(r => {
|
|
return (
|
|
(s = r.getNode()),
|
|
(C(s) && (Ga(Cn(s)) || Ka(Cn(s)))) ||
|
|
((e, t, n, o, r) => {
|
|
const s = t => r.isInline(t.nodeName.toLowerCase()) && !du(n, o, e);
|
|
return bu(!t, n).fold(() => bu(t, o).fold(L, s), s);
|
|
})(e, t, n, r, o)
|
|
? I.none()
|
|
: (t && vr(r.getNode())) || (!t && vr(r.getNode(!0)))
|
|
? ((e, t, n, o, r) => {
|
|
const s = r.getNode(!n);
|
|
return Ih(Cn(t), Cn(o.getNode()))
|
|
.map(t => (Tr(e, t) ? Hx.remove(t.dom) : Hx.moveToElement(s)))
|
|
.orThunk(() => I.some(Hx.moveToElement(s)));
|
|
})(o, e, t, n, r)
|
|
: (t && Fp(n)) || (!t && Ip(n))
|
|
? I.some(Hx.moveToPosition(r))
|
|
: I.none()
|
|
);
|
|
var s;
|
|
}),
|
|
Vx = (e, t) => I.from(gb(e.getBody(), t)),
|
|
qx = (e, t) => {
|
|
const n = e.selection.getNode();
|
|
return Vx(e, n)
|
|
.filter(vr)
|
|
.fold(
|
|
() =>
|
|
((e, t, n, o) => {
|
|
const r = hu(t ? 1 : -1, e, n),
|
|
s = Ji.fromRangeStart(r),
|
|
a = Cn(e);
|
|
return !t && Fp(s)
|
|
? I.some(Hx.remove(s.getNode(!0)))
|
|
: t && Ip(s)
|
|
? I.some(Hx.remove(s.getNode()))
|
|
: !t && Ip(s) && Qp(a, s, o)
|
|
? Jp(a, s, o).map(e => Hx.remove(e.getNode()))
|
|
: t && Fp(s) && Zp(a, s, o)
|
|
? eh(a, s, o).map(e => Hx.remove(e.getNode()))
|
|
: ((e, t, n, o) =>
|
|
((e, t) => {
|
|
const n = t.getNode(!e),
|
|
o = e ? "after" : "before";
|
|
return er(n) && n.getAttribute("data-mce-caret") === o;
|
|
})(t, n)
|
|
? ((e, t) =>
|
|
y(t)
|
|
? I.none()
|
|
: e && vr(t.nextSibling)
|
|
? I.some(Hx.moveToElement(t.nextSibling))
|
|
: !e && vr(t.previousSibling)
|
|
? I.some(Hx.moveToElement(t.previousSibling))
|
|
: I.none())(t, n.getNode(!t)).orThunk(() => $x(e, t, n, o))
|
|
: $x(e, t, n, o).bind(t =>
|
|
((e, t, n) =>
|
|
n.fold(
|
|
e => I.some(Hx.remove(e)),
|
|
e => I.some(Hx.moveToElement(e)),
|
|
n => (du(t, n, e) ? I.none() : I.some(Hx.moveToPosition(n)))
|
|
))(e, n, t)
|
|
))(e, t, s, o);
|
|
})(e.getBody(), t, e.selection.getRng(), e.schema).map(
|
|
n => () =>
|
|
n.fold(
|
|
((e, t) => n => (e._selectionOverrides.hideFakeCaret(), Sh(e, t, Cn(n)), !0))(e, t),
|
|
((e, t) => n => {
|
|
const o = t ? Ji.before(n) : Ji.after(n);
|
|
return e.selection.setRng(o.toRange()), !0;
|
|
})(e, t),
|
|
(e => t => (e.selection.setRng(t.toRange()), !0))(e)
|
|
)
|
|
),
|
|
() => I.some(k)
|
|
);
|
|
},
|
|
Wx = e => {
|
|
const t = e.dom,
|
|
n = e.selection,
|
|
o = gb(e.getBody(), n.getNode());
|
|
if (br(o) && t.isBlock(o) && t.isEmpty(o)) {
|
|
const e = t.create("br", {"data-mce-bogus": "1"});
|
|
t.setHTML(o, ""), o.appendChild(e), n.setRng(Ji.before(e).toRange());
|
|
}
|
|
return !0;
|
|
},
|
|
Kx = (e, t) =>
|
|
e.selection.isCollapsed()
|
|
? qx(e, t)
|
|
: ((e, t) => {
|
|
const n = e.selection.getNode();
|
|
return vr(n) && !yr(n)
|
|
? Vx(e, n.parentNode)
|
|
.filter(vr)
|
|
.fold(
|
|
() =>
|
|
I.some(() => {
|
|
var n;
|
|
(n = Cn(e.getBody())),
|
|
q(zo(n, ".mce-offscreen-selection"), Eo),
|
|
Sh(e, t, Cn(e.selection.getNode())),
|
|
Fh(e);
|
|
}),
|
|
() => I.some(k)
|
|
)
|
|
: jx(e)
|
|
? I.some(() => {
|
|
jh(e, e.selection.getRng(), Cn(e.getBody()));
|
|
})
|
|
: I.none();
|
|
})(e, t),
|
|
Yx = (e, t) =>
|
|
e.selection.isCollapsed()
|
|
? ((e, t) => {
|
|
const n = Ji.fromRangeStart(e.selection.getRng());
|
|
return Iu(t, e.getBody(), n)
|
|
.filter(e => (t ? Op(e) : Bp(e)))
|
|
.bind(e => cu(t ? 0 : -1, e))
|
|
.map(t => () => e.selection.select(t));
|
|
})(e, t)
|
|
: I.none(),
|
|
Gx = dr,
|
|
Xx = e => Gx(e) && e.data[0] === Ja,
|
|
Zx = e => Gx(e) && e.data[e.data.length - 1] === Ja,
|
|
Qx = e => {
|
|
var t;
|
|
return (null !== (t = e.ownerDocument) && void 0 !== t ? t : document).createTextNode(Ja);
|
|
},
|
|
Jx = (e, t) =>
|
|
e
|
|
? (e => {
|
|
var t;
|
|
if (Gx(e.previousSibling))
|
|
return Zx(e.previousSibling) || e.previousSibling.appendData(Ja), e.previousSibling;
|
|
if (Gx(e)) return Xx(e) || e.insertData(0, Ja), e;
|
|
{
|
|
const n = Qx(e);
|
|
return null === (t = e.parentNode) || void 0 === t || t.insertBefore(n, e), n;
|
|
}
|
|
})(t)
|
|
: (e => {
|
|
var t, n;
|
|
if (Gx(e.nextSibling)) return Xx(e.nextSibling) || e.nextSibling.insertData(0, Ja), e.nextSibling;
|
|
if (Gx(e)) return Zx(e) || e.appendData(Ja), e;
|
|
{
|
|
const o = Qx(e);
|
|
return (
|
|
e.nextSibling
|
|
? null === (t = e.parentNode) || void 0 === t || t.insertBefore(o, e.nextSibling)
|
|
: null === (n = e.parentNode) || void 0 === n || n.appendChild(o),
|
|
o
|
|
);
|
|
}
|
|
})(t),
|
|
eE = T(Jx, !0),
|
|
tE = T(Jx, !1),
|
|
nE = (e, t) => (dr(e.container()) ? Jx(t, e.container()) : Jx(t, e.getNode())),
|
|
oE = (e, t) => {
|
|
const n = t.get();
|
|
return n && e.container() === n && si(n);
|
|
},
|
|
rE = (e, t) =>
|
|
t.fold(
|
|
t => {
|
|
zc(e.get());
|
|
const n = eE(t);
|
|
return e.set(n), I.some(Ji(n, n.length - 1));
|
|
},
|
|
t =>
|
|
$u(t).map(t => {
|
|
if (oE(t, e)) {
|
|
const t = e.get();
|
|
return Ji(t, 1);
|
|
}
|
|
{
|
|
zc(e.get());
|
|
const n = nE(t, !0);
|
|
return e.set(n), Ji(n, 1);
|
|
}
|
|
}),
|
|
t =>
|
|
Vu(t).map(t => {
|
|
if (oE(t, e)) {
|
|
const t = e.get();
|
|
return Ji(t, t.length - 1);
|
|
}
|
|
{
|
|
zc(e.get());
|
|
const n = nE(t, !1);
|
|
return e.set(n), Ji(n, n.length - 1);
|
|
}
|
|
}),
|
|
t => {
|
|
zc(e.get());
|
|
const n = tE(t);
|
|
return e.set(n), I.some(Ji(n, 1));
|
|
}
|
|
),
|
|
sE = (e, t) => {
|
|
for (let n = 0; n < e.length; n++) {
|
|
const o = e[n].apply(null, t);
|
|
if (o.isSome()) return o;
|
|
}
|
|
return I.none();
|
|
},
|
|
aE = kl([{before: ["element"]}, {start: ["element"]}, {end: ["element"]}, {after: ["element"]}]),
|
|
iE = (e, t) => lu(t, e) || e,
|
|
lE = (e, t, n) => {
|
|
const o = Bh(n),
|
|
r = iE(t, o.container());
|
|
return Th(e, r, o).fold(
|
|
() =>
|
|
ju(r, o)
|
|
.bind(T(Th, e, r))
|
|
.map(e => aE.before(e)),
|
|
I.none
|
|
);
|
|
},
|
|
dE = (e, t) => null === Ku(e, t),
|
|
cE = (e, t, n) => Th(e, t, n).filter(T(dE, t)),
|
|
uE = (e, t, n) => {
|
|
const o = Ph(n);
|
|
return cE(e, t, o).bind(e => (Hu(e, o).isNone() ? I.some(aE.start(e)) : I.none()));
|
|
},
|
|
mE = (e, t, n) => {
|
|
const o = Bh(n);
|
|
return cE(e, t, o).bind(e => (ju(e, o).isNone() ? I.some(aE.end(e)) : I.none()));
|
|
},
|
|
fE = (e, t, n) => {
|
|
const o = Ph(n),
|
|
r = iE(t, o.container());
|
|
return Th(e, r, o).fold(
|
|
() =>
|
|
Hu(r, o)
|
|
.bind(T(Th, e, r))
|
|
.map(e => aE.after(e)),
|
|
I.none
|
|
);
|
|
},
|
|
gE = e => !Ah(hE(e)),
|
|
pE = (e, t, n) => sE([lE, uE, mE, fE], [e, t, n]).filter(gE),
|
|
hE = e => e.fold(R, R, R, R),
|
|
bE = e => e.fold(N("before"), N("start"), N("end"), N("after")),
|
|
vE = e => e.fold(aE.before, aE.before, aE.after, aE.after),
|
|
yE = e => e.fold(aE.start, aE.start, aE.end, aE.end),
|
|
CE = (e, t, n, o, r, s) =>
|
|
It(Th(t, n, o), Th(t, n, r), (t, o) =>
|
|
t !== o &&
|
|
((e, t, n) => {
|
|
const o = lu(t, e),
|
|
r = lu(n, e);
|
|
return C(o) && o === r;
|
|
})(n, t, o)
|
|
? aE.after(e ? t : o)
|
|
: s
|
|
).getOr(s),
|
|
wE = (e, t) =>
|
|
e.fold(M, e => {
|
|
return (o = t), !(bE((n = e)) === bE(o) && hE(n) === hE(o));
|
|
var n, o;
|
|
}),
|
|
xE = (e, t) =>
|
|
e
|
|
? t.fold(_(I.some, aE.start), I.none, _(I.some, aE.after), I.none)
|
|
: t.fold(I.none, _(I.some, aE.before), I.none, _(I.some, aE.end)),
|
|
EE = (e, t, n) => {
|
|
const o = e ? 1 : -1;
|
|
return (
|
|
t.setRng(Ji(n.container(), n.offset() + o).toRange()),
|
|
t.getSel().modify("move", e ? "forward" : "backward", "word"),
|
|
!0
|
|
);
|
|
};
|
|
var kE;
|
|
!(function (e) {
|
|
(e[(e.Br = 0)] = "Br"), (e[(e.Block = 1)] = "Block"), (e[(e.Wrap = 2)] = "Wrap"), (e[(e.Eol = 3)] = "Eol");
|
|
})(kE || (kE = {}));
|
|
const _E = (e, t) => (e === xu.Backwards ? oe(t) : t),
|
|
SE = (e, t, n) => (e === xu.Forwards ? t.next(n) : t.prev(n)),
|
|
NE = (e, t, n, o) => (pr(o.getNode(t === xu.Forwards)) ? kE.Br : !1 === du(n, o) ? kE.Block : kE.Wrap),
|
|
RE = (e, t, n, o) => {
|
|
const r = Pu(n);
|
|
let s = o;
|
|
const a = [];
|
|
for (; s; ) {
|
|
const n = SE(t, r, s);
|
|
if (!n) break;
|
|
if (pr(n.getNode(!1)))
|
|
return t === xu.Forwards
|
|
? {positions: _E(t, a).concat([n]), breakType: kE.Br, breakAt: I.some(n)}
|
|
: {positions: _E(t, a), breakType: kE.Br, breakAt: I.some(n)};
|
|
if (n.isVisible()) {
|
|
if (e(s, n)) {
|
|
const e = NE(0, t, s, n);
|
|
return {positions: _E(t, a), breakType: e, breakAt: I.some(n)};
|
|
}
|
|
a.push(n), (s = n);
|
|
} else s = n;
|
|
}
|
|
return {positions: _E(t, a), breakType: kE.Eol, breakAt: I.none()};
|
|
},
|
|
AE = (e, t, n, o) =>
|
|
t(n, o)
|
|
.breakAt.map(o => {
|
|
const r = t(n, o).positions;
|
|
return e === xu.Backwards ? r.concat(o) : [o].concat(r);
|
|
})
|
|
.getOr([]),
|
|
TE = (e, t) =>
|
|
X(
|
|
e,
|
|
(e, n) =>
|
|
e.fold(
|
|
() => I.some(n),
|
|
o =>
|
|
It(le(o.getClientRects()), le(n.getClientRects()), (e, r) => {
|
|
const s = Math.abs(t - e.left);
|
|
return Math.abs(t - r.left) <= s ? n : o;
|
|
}).or(e)
|
|
),
|
|
I.none()
|
|
),
|
|
OE = (e, t) => le(t.getClientRects()).bind(t => TE(e, t.left)),
|
|
BE = T(RE, Ji.isAbove, -1),
|
|
PE = T(RE, Ji.isBelow, 1),
|
|
DE = T(AE, -1, BE),
|
|
LE = T(AE, 1, PE),
|
|
ME = (e, t) => BE(e, t).breakAt.isNone(),
|
|
IE = (e, t) => PE(e, t).breakAt.isNone(),
|
|
FE = (e, t) => OE(DE(e, t), t),
|
|
UE = (e, t) => OE(LE(e, t), t),
|
|
zE = vr,
|
|
jE = (e, t) => Math.abs(e.left - t),
|
|
HE = (e, t) => Math.abs(e.right - t),
|
|
$E = (e, t) =>
|
|
Be(e, (e, n) => {
|
|
const o = Math.min(jE(e, t), HE(e, t)),
|
|
r = Math.min(jE(n, t), HE(n, t));
|
|
return (r === o && _e(n, "node") && zE(n.node)) || r < o ? n : e;
|
|
}),
|
|
VE = e => {
|
|
const t = t =>
|
|
V(t, t => {
|
|
const n = pi(t);
|
|
return (n.node = e), n;
|
|
});
|
|
if (er(e)) return t(e.getClientRects());
|
|
if (dr(e)) {
|
|
const n = e.ownerDocument.createRange();
|
|
return n.setStart(e, 0), n.setEnd(e, e.data.length), t(n.getClientRects());
|
|
}
|
|
return [];
|
|
},
|
|
qE = e => te(e, VE);
|
|
var WE;
|
|
!(function (e) {
|
|
(e[(e.Up = -1)] = "Up"), (e[(e.Down = 1)] = "Down");
|
|
})(WE || (WE = {}));
|
|
const KE = (e, t, n, o, r, s) => {
|
|
let a = 0;
|
|
const i = [],
|
|
l = o => {
|
|
let s = qE([o]);
|
|
-1 === e && (s = s.reverse());
|
|
for (let e = 0; e < s.length; e++) {
|
|
const o = s[e];
|
|
if (!n(o, d)) {
|
|
if ((i.length > 0 && t(o, De(i)) && a++, (o.line = a), r(o))) return !0;
|
|
i.push(o);
|
|
}
|
|
}
|
|
return !1;
|
|
},
|
|
d = De(s.getClientRects());
|
|
if (!d) return i;
|
|
const c = s.getNode();
|
|
return (
|
|
c &&
|
|
(l(c),
|
|
((e, t, n, o) => {
|
|
let r = o;
|
|
for (; (r = iu(r, e, Li, t)); ) if (n(r)) return;
|
|
})(e, o, l, c)),
|
|
i
|
|
);
|
|
},
|
|
YE = T(KE, WE.Up, vi, yi),
|
|
GE = T(KE, WE.Down, yi, vi),
|
|
XE = e => De(e.getClientRects()),
|
|
ZE = e => t => ((e, t) => t.line > e)(e, t),
|
|
QE = e => t => ((e, t) => t.line === e)(e, t),
|
|
JE = (e, t) => {
|
|
e.selection.setRng(t), vg(e, e.selection.getRng());
|
|
},
|
|
ek = (e, t, n) => I.some(Lx(e, t, n)),
|
|
tk = (e, t, n, o, r, s) => {
|
|
const a = t === xu.Forwards,
|
|
i = Pu(e.getBody()),
|
|
l = T(Cu, a ? i.next : i.prev),
|
|
d = a ? o : r;
|
|
if (!n.collapsed) {
|
|
const o = wi(n);
|
|
if (s(o)) return Px(t, e, o, t === xu.Backwards, !1);
|
|
if (jx(e)) {
|
|
const e = n.cloneRange();
|
|
return e.collapse(t === xu.Backwards), I.from(e);
|
|
}
|
|
}
|
|
const c = vu(t, e.getBody(), n);
|
|
if (d(c)) return Dx(e, c.getNode(!a));
|
|
let u = l(c);
|
|
const m = fi(n);
|
|
if (!u) return m ? I.some(n) : I.none();
|
|
if (((u = Oh(a, u)), d(u))) return Px(t, e, u.getNode(!a), a, !1);
|
|
const f = l(u);
|
|
return f && d(f) && wu(u, f) ? Px(t, e, f.getNode(!a), a, !1) : m ? ek(e, u.toRange(), !1) : I.none();
|
|
},
|
|
nk = (e, t, n, o, r, s) => {
|
|
const a = vu(t, e.getBody(), n),
|
|
i = De(a.getClientRects()),
|
|
l = t === WE.Down,
|
|
d = e.getBody();
|
|
if (!i) return I.none();
|
|
if (jx(e)) {
|
|
const e = l ? Ji.fromRangeEnd(n) : Ji.fromRangeStart(n);
|
|
return (l ? UE : FE)(d, e)
|
|
.orThunk(() => I.from(e))
|
|
.map(e => e.toRange());
|
|
}
|
|
const c = (l ? GE : YE)(d, ZE(1), a),
|
|
u = Y(c, QE(1)),
|
|
m = i.left,
|
|
f = $E(u, m);
|
|
if (f && s(f.node)) {
|
|
const n = Math.abs(m - f.left),
|
|
o = Math.abs(m - f.right);
|
|
return Px(t, e, f.node, n < o, !1);
|
|
}
|
|
let g;
|
|
if (((g = o(a) ? a.getNode() : r(a) ? a.getNode(!0) : wi(n)), g)) {
|
|
const n = ((e, t, n, o) => {
|
|
const r = Pu(t);
|
|
let s, a, i, l;
|
|
const d = [];
|
|
let c = 0;
|
|
1 === e
|
|
? ((s = r.next), (a = yi), (i = vi), (l = Ji.after(o)))
|
|
: ((s = r.prev), (a = vi), (i = yi), (l = Ji.before(o)));
|
|
const u = XE(l);
|
|
do {
|
|
if (!l.isVisible()) continue;
|
|
const e = XE(l);
|
|
if (i(e, u)) continue;
|
|
d.length > 0 && a(e, De(d)) && c++;
|
|
const t = pi(e);
|
|
if (((t.position = l), (t.line = c), n(t))) return d;
|
|
d.push(t);
|
|
} while ((l = s(l)));
|
|
return d;
|
|
})(t, d, ZE(1), g);
|
|
let o = $E(Y(n, QE(1)), m);
|
|
if (o) return ek(e, o.position.toRange(), !1);
|
|
if (((o = De(Y(n, QE(0)))), o)) return ek(e, o.position.toRange(), !1);
|
|
}
|
|
return 0 === u.length
|
|
? ok(e, l)
|
|
.filter(l ? r : o)
|
|
.map(t => Lx(e, t.toRange(), !1))
|
|
: I.none();
|
|
},
|
|
ok = (e, t) => {
|
|
const n = e.selection.getRng(),
|
|
o = t ? Ji.fromRangeEnd(n) : Ji.fromRangeStart(n),
|
|
r =
|
|
((s = o.container()),
|
|
(a = e.getBody()),
|
|
Qn(
|
|
Cn(s),
|
|
e => Gc(e.dom),
|
|
e => e.dom === a
|
|
)
|
|
.map(e => e.dom)
|
|
.getOr(a));
|
|
var s, a;
|
|
if (t) {
|
|
const e = PE(r, o);
|
|
return de(e.positions);
|
|
}
|
|
{
|
|
const e = BE(r, o);
|
|
return le(e.positions);
|
|
}
|
|
},
|
|
rk = (e, t, n) =>
|
|
ok(e, t)
|
|
.filter(n)
|
|
.exists(t => (e.selection.setRng(t.toRange()), !0)),
|
|
sk = (e, t) => {
|
|
const n = e.dom.createRng();
|
|
n.setStart(t.container(), t.offset()), n.setEnd(t.container(), t.offset()), e.selection.setRng(n);
|
|
},
|
|
ak = (e, t) => {
|
|
e ? t.setAttribute("data-mce-selected", "inline-boundary") : t.removeAttribute("data-mce-selected");
|
|
},
|
|
ik = (e, t, n) => rE(t, n).map(t => (sk(e, t), n)),
|
|
lk = (e, t, n) => {
|
|
const o = e.getBody(),
|
|
r = ((e, t, n) => {
|
|
const o = Ji.fromRangeStart(e);
|
|
if (e.collapsed) return o;
|
|
{
|
|
const r = Ji.fromRangeEnd(e);
|
|
return n ? Hu(t, r).getOr(r) : ju(t, o).getOr(o);
|
|
}
|
|
})(e.selection.getRng(), o, n);
|
|
return ((e, t, n, o) => {
|
|
const r = Oh(e, o),
|
|
s = pE(t, n, r);
|
|
return pE(t, n, r)
|
|
.bind(T(xE, e))
|
|
.orThunk(() =>
|
|
((e, t, n, o, r) => {
|
|
const s = Oh(e, r);
|
|
return Iu(e, n, s)
|
|
.map(T(Oh, e))
|
|
.fold(
|
|
() => o.map(vE),
|
|
r => pE(t, n, r).map(T(CE, e, t, n, s, r)).filter(T(wE, o))
|
|
)
|
|
.filter(gE);
|
|
})(e, t, n, s, o)
|
|
);
|
|
})(n, T(Rh, e), o, r).bind(n => ik(e, t, n));
|
|
},
|
|
dk = (e, t, n) => !!Rd(e) && lk(e, t, n).isSome(),
|
|
ck = (e, t, n) =>
|
|
!!Rd(t) &&
|
|
((e, t) => {
|
|
const n = t.selection.getRng(),
|
|
o = e ? Ji.fromRangeEnd(n) : Ji.fromRangeStart(n);
|
|
return (
|
|
!!(e => w(e.selection.getSel().modify))(t) &&
|
|
(e && li(o) ? EE(!0, t.selection, o) : !(e || !di(o)) && EE(!1, t.selection, o))
|
|
);
|
|
})(e, t),
|
|
uk = e => {
|
|
const t = Br(null),
|
|
n = T(Rh, e);
|
|
return (
|
|
e.on("NodeChange", o => {
|
|
Rd(e) &&
|
|
(((e, t, n) => {
|
|
const o = V(zo(Cn(t.getRoot()), '*[data-mce-selected="inline-boundary"]'), e => e.dom),
|
|
r = Y(o, e),
|
|
s = Y(n, e);
|
|
q(re(r, s), T(ak, !1)), q(re(s, r), T(ak, !0));
|
|
})(n, e.dom, o.parents),
|
|
((e, t) => {
|
|
const n = t.get();
|
|
if (e.selection.isCollapsed() && !e.composing && n) {
|
|
const o = Ji.fromRangeStart(e.selection.getRng());
|
|
Ji.isTextPosition(o) && !(e => li(e) || di(e))(o) && (sk(e, Uc(n, o)), t.set(null));
|
|
}
|
|
})(e, t),
|
|
((e, t, n, o) => {
|
|
if (t.selection.isCollapsed()) {
|
|
const r = Y(o, e);
|
|
q(r, o => {
|
|
const r = Ji.fromRangeStart(t.selection.getRng());
|
|
pE(e, t.getBody(), r).bind(e => ik(t, n, e));
|
|
});
|
|
}
|
|
})(n, e, t, o.parents));
|
|
}),
|
|
t
|
|
);
|
|
},
|
|
mk = T(ck, !0),
|
|
fk = T(ck, !1),
|
|
gk = (e, t, n) => {
|
|
if (Rd(e)) {
|
|
const o = ok(e, t).getOrThunk(() => {
|
|
const n = e.selection.getRng();
|
|
return t ? Ji.fromRangeEnd(n) : Ji.fromRangeStart(n);
|
|
});
|
|
return pE(T(Rh, e), e.getBody(), o).exists(t => {
|
|
const o = vE(t);
|
|
return rE(n, o).exists(t => (sk(e, t), !0));
|
|
});
|
|
}
|
|
return !1;
|
|
},
|
|
pk = (e, t) => n => rE(t, n).map(t => () => sk(e, t)),
|
|
hk = (e, t, n, o) => {
|
|
const r = e.getBody(),
|
|
s = T(Rh, e);
|
|
e.undoManager.ignore(() => {
|
|
e.selection.setRng(
|
|
((e, t) => {
|
|
const n = document.createRange();
|
|
return n.setStart(e.container(), e.offset()), n.setEnd(t.container(), t.offset()), n;
|
|
})(n, o)
|
|
),
|
|
Lh(e),
|
|
pE(s, r, Ji.fromRangeStart(e.selection.getRng())).map(yE).bind(pk(e, t)).each(D);
|
|
}),
|
|
e.nodeChanged();
|
|
},
|
|
bk = (e, t, n) => {
|
|
if (e.selection.isCollapsed() && Rd(e)) {
|
|
const o = Ji.fromRangeStart(e.selection.getRng());
|
|
return ((e, t, n, o) => {
|
|
const r = ((e, t) => lu(t, e) || e)(e.getBody(), o.container()),
|
|
s = T(Rh, e),
|
|
a = pE(s, r, o);
|
|
return a
|
|
.bind(e =>
|
|
n
|
|
? e.fold(N(I.some(yE(e))), I.none, N(I.some(vE(e))), I.none)
|
|
: e.fold(I.none, N(I.some(vE(e))), I.none, N(I.some(yE(e))))
|
|
)
|
|
.map(pk(e, t))
|
|
.getOrThunk(() => {
|
|
const i = Fu(n, r, o),
|
|
l = i.bind(e => pE(s, r, e));
|
|
return It(a, l, () =>
|
|
Th(s, r, o).bind(t =>
|
|
(e =>
|
|
It($u(e), Vu(e), (t, n) => {
|
|
const o = Oh(!0, t),
|
|
r = Oh(!1, n);
|
|
return ju(e, o).forall(e => e.isEqual(r));
|
|
}).getOr(!0))(t)
|
|
? I.some(() => {
|
|
Sh(e, n, Cn(t));
|
|
})
|
|
: I.none()
|
|
)
|
|
).getOrThunk(() =>
|
|
l.bind(() =>
|
|
i.map(r => () => {
|
|
n ? hk(e, t, o, r) : hk(e, t, r, o);
|
|
})
|
|
)
|
|
);
|
|
});
|
|
})(e, t, n, o);
|
|
}
|
|
return I.none();
|
|
},
|
|
vk = (e, t) => {
|
|
const n = Cn(e.getBody()),
|
|
o = Cn(e.selection.getStart()),
|
|
r = zp(o, n);
|
|
return J(r, t).fold(N(r), e => r.slice(0, e));
|
|
},
|
|
yk = e => 1 === jn(e),
|
|
Ck = (e, t) => {
|
|
const n = T(sv, e);
|
|
return te(t, e => (n(e) ? [e.dom] : []));
|
|
},
|
|
wk = e => {
|
|
const t = (e => vk(e, t => e.schema.isBlock($t(t))))(e);
|
|
return Ck(e, t);
|
|
},
|
|
xk = (e, t) => {
|
|
const n = Y((e => vk(e, t => e.schema.isBlock($t(t)) || (e => jn(e) > 1)(t)))(e), yk);
|
|
return de(n).bind(o => {
|
|
const r = Ji.fromRangeStart(e.selection.getRng());
|
|
return Uh(t, r, o.dom) && !Hm(o)
|
|
? I.some(() =>
|
|
((e, t, n, o) => {
|
|
const r = Ck(t, o);
|
|
if (0 === r.length) Sh(t, e, n);
|
|
else {
|
|
const e = rv(n.dom, r);
|
|
t.selection.setRng(e.toRange());
|
|
}
|
|
})(t, e, o, n)
|
|
)
|
|
: I.none();
|
|
});
|
|
},
|
|
Ek = (e, t) => {
|
|
const n = e.selection.getStart(),
|
|
o =
|
|
((e, t) => {
|
|
const n = t.parentElement;
|
|
return pr(t) && !h(n) && e.dom.isEmpty(n);
|
|
})(e, n) || Hm(Cn(n))
|
|
? rv(n, t)
|
|
: ((e, t) => {
|
|
const {caretContainer: n, caretPosition: o} = ov(t);
|
|
return e.insertNode(n.dom), o;
|
|
})(e.selection.getRng(), t);
|
|
e.selection.setRng(o.toRange());
|
|
},
|
|
kk = e => dr(e.startContainer),
|
|
_k = e => {
|
|
const t = e.selection.getRng();
|
|
return (
|
|
(e => 0 === e.startOffset && kk(e))(t) &&
|
|
((e, t) => {
|
|
const n = t.startContainer.parentElement;
|
|
return !h(n) && sv(e, Cn(n));
|
|
})(e, t) &&
|
|
(e =>
|
|
(e =>
|
|
(e => {
|
|
const t = e.startContainer.parentNode,
|
|
n = e.endContainer.parentNode;
|
|
return !h(t) && !h(n) && t.isEqualNode(n);
|
|
})(e) &&
|
|
(e => {
|
|
const t = e.endContainer;
|
|
return e.endOffset === (dr(t) ? t.length : t.childNodes.length);
|
|
})(e))(e) || (e => !e.endContainer.isEqualNode(e.commonAncestorContainer))(e))(t)
|
|
);
|
|
},
|
|
Sk = (e, t) =>
|
|
e.selection.isCollapsed()
|
|
? xk(e, t)
|
|
: (e => {
|
|
if (_k(e)) {
|
|
const t = wk(e);
|
|
return I.some(() => {
|
|
Lh(e),
|
|
((e, t) => {
|
|
const n = re(t, wk(e));
|
|
n.length > 0 && Ek(e, n);
|
|
})(e, t);
|
|
});
|
|
}
|
|
return I.none();
|
|
})(e),
|
|
Nk = e => (
|
|
(e => {
|
|
const t = e.selection.getRng();
|
|
return (
|
|
t.collapsed &&
|
|
(kk(t) || e.dom.isEmpty(t.startContainer)) &&
|
|
!(e => {
|
|
return (
|
|
(t = Cn(e.selection.getStart())),
|
|
(n = e.schema),
|
|
jo(
|
|
t,
|
|
e => Wu(e.dom),
|
|
e => n.isBlock($t(e))
|
|
)
|
|
);
|
|
var t, n;
|
|
})(e)
|
|
);
|
|
})(e) && Ek(e, []),
|
|
!0
|
|
),
|
|
Rk = (e, t, n) =>
|
|
C(n)
|
|
? I.some(() => {
|
|
e._selectionOverrides.hideFakeCaret(), Sh(e, t, Cn(n));
|
|
})
|
|
: I.none(),
|
|
Ak = (e, t) =>
|
|
e.selection.isCollapsed()
|
|
? ((e, t) => {
|
|
const n = t ? Pp : Dp,
|
|
o = t ? xu.Forwards : xu.Backwards,
|
|
r = vu(o, e.getBody(), e.selection.getRng());
|
|
return n(r)
|
|
? Rk(e, t, r.getNode(!t))
|
|
: I.from(Oh(t, r))
|
|
.filter(e => n(e) && wu(r, e))
|
|
.bind(n => Rk(e, t, n.getNode(!t)));
|
|
})(e, t)
|
|
: ((e, t) => {
|
|
const n = e.selection.getNode();
|
|
return wr(n) ? Rk(e, t, n) : I.none();
|
|
})(e, t),
|
|
Tk = e => Ze(null != e ? e : "").getOr(0),
|
|
Ok = (e, t) =>
|
|
(e || "table" === $t(t) ? "margin" : "padding") + ("rtl" === uo(t, "direction") ? "-right" : "-left"),
|
|
Bk = e => {
|
|
const t = Dk(e);
|
|
return (
|
|
!e.mode.isReadOnly() &&
|
|
(t.length > 1 ||
|
|
((e, t) =>
|
|
ne(t, t => {
|
|
const n = Ok(md(e), t),
|
|
o = fo(t, n).map(Tk).getOr(0);
|
|
return "false" !== e.dom.getContentEditable(t.dom) && o > 0;
|
|
}))(e, t))
|
|
);
|
|
},
|
|
Pk = e => Wa(e) || Ka(e),
|
|
Dk = e =>
|
|
Y(
|
|
_o(e.selection.getSelectedBlocks()),
|
|
e => !Pk(e) && !(e => Tn(e).exists(Pk))(e) && Jn(e, e => br(e.dom) || vr(e.dom)).exists(e => br(e.dom))
|
|
),
|
|
Lk = (e, t) => {
|
|
var n, o;
|
|
const {dom: r} = e,
|
|
s = fd(e),
|
|
a =
|
|
null !== (o = null === (n = /[a-z%]+$/i.exec(s)) || void 0 === n ? void 0 : n[0]) && void 0 !== o ? o : "px",
|
|
i = Tk(s),
|
|
l = md(e);
|
|
q(Dk(e), e => {
|
|
((e, t, n, o, r, s) => {
|
|
const a = Ok(n, Cn(s)),
|
|
i = Tk(e.getStyle(s, a));
|
|
if ("outdent" === t) {
|
|
const t = Math.max(0, i - o);
|
|
e.setStyle(s, a, t ? t + r : "");
|
|
} else {
|
|
const t = i + o + r;
|
|
e.setStyle(s, a, t);
|
|
}
|
|
})(r, t, l, i, a, e.dom);
|
|
});
|
|
},
|
|
Mk = e => Lk(e, "outdent"),
|
|
Ik = e => {
|
|
if (e.selection.isCollapsed() && Bk(e)) {
|
|
const t = e.dom,
|
|
n = e.selection.getRng(),
|
|
o = Ji.fromRangeStart(n),
|
|
r = t.getParent(n.startContainer, t.isBlock);
|
|
if (null !== r && qp(Cn(r), o, e.schema)) return I.some(() => Mk(e));
|
|
}
|
|
return I.none();
|
|
},
|
|
Fk = (e, t, n) =>
|
|
ue([Ik, Kx, Ux, (e, n) => bk(e, t, n), Ax, fb, Yx, Ak, Bx, Sk], t => t(e, n)).filter(t =>
|
|
e.selection.isEditable()
|
|
),
|
|
Uk = (e, t) => {
|
|
e.addCommand("delete", () => {
|
|
((e, t) => {
|
|
Fk(e, t, !1).fold(() => {
|
|
e.selection.isEditable() && (Lh(e), Fh(e));
|
|
}, D);
|
|
})(e, t);
|
|
}),
|
|
e.addCommand("forwardDelete", () => {
|
|
((e, t) => {
|
|
Fk(e, t, !0).fold(() => {
|
|
e.selection.isEditable() &&
|
|
(e => {
|
|
Dh(e, "ForwardDelete");
|
|
})(e);
|
|
}, D);
|
|
})(e, t);
|
|
});
|
|
},
|
|
zk = e => (void 0 === e.touches || 1 !== e.touches.length ? I.none() : I.some(e.touches[0])),
|
|
jk = (e, t) => ke(e, t.nodeName),
|
|
Hk = (e, t) => !!dr(t) || (!!er(t) && !(jk(e.getBlockElements(), t) || sm(t) || Zr(e, t) || Ir(t))),
|
|
$k = (e, t) => {
|
|
if (dr(t)) {
|
|
if (0 === t.data.length) return !0;
|
|
if (/^\s+$/.test(t.data)) return !t.nextSibling || jk(e, t.nextSibling) || Ir(t.nextSibling);
|
|
}
|
|
return !1;
|
|
},
|
|
Vk = e => e.dom.create(Wl(e), Kl(e)),
|
|
qk = e => {
|
|
const t = e.dom,
|
|
n = e.selection,
|
|
o = e.schema,
|
|
r = o.getBlockElements(),
|
|
s = n.getStart(),
|
|
a = e.getBody();
|
|
let i,
|
|
l,
|
|
d = !1;
|
|
const c = Wl(e);
|
|
if (!s || !er(s)) return;
|
|
const u = a.nodeName.toLowerCase();
|
|
if (!o.isValidChild(u, c.toLowerCase()) || ((e, t, n) => $(Up(Cn(n), Cn(t)), t => jk(e, t.dom)))(r, a, s)) return;
|
|
const m = n.getRng(),
|
|
{startContainer: f, startOffset: g, endContainer: p, endOffset: h} = m,
|
|
b = jg(e);
|
|
let v = a.firstChild;
|
|
for (; v; )
|
|
if ((er(v) && Kr(o, v), Hk(o, v))) {
|
|
if ($k(r, v)) {
|
|
(l = v), (v = v.nextSibling), t.remove(l);
|
|
continue;
|
|
}
|
|
i || ((i = Vk(e)), a.insertBefore(i, v), (d = !0)), (l = v), (v = v.nextSibling), i.appendChild(l);
|
|
} else (i = null), (v = v.nextSibling);
|
|
d && b && (m.setStart(f, g), m.setEnd(p, h), n.setRng(m), e.nodeChanged());
|
|
},
|
|
Wk = (e, t, n) => {
|
|
const o = Cn(Vk(e)),
|
|
r = Za();
|
|
yo(o, r), n(t, o);
|
|
const s = document.createRange();
|
|
return s.setStartBefore(r.dom), s.setEndBefore(r.dom), s;
|
|
},
|
|
Kk = e => t => -1 !== (" " + t.attr("class") + " ").indexOf(e),
|
|
Yk = (e, t, n) =>
|
|
function (o) {
|
|
const r = arguments,
|
|
s = r[r.length - 2],
|
|
a = s > 0 ? t.charAt(s - 1) : "";
|
|
if ('"' === a) return o;
|
|
if (">" === a) {
|
|
const e = t.lastIndexOf("<", s);
|
|
if (-1 !== e && -1 !== t.substring(e, s).indexOf('contenteditable="false"')) return o;
|
|
}
|
|
return (
|
|
'<span class="' +
|
|
n +
|
|
'" data-mce-content="' +
|
|
e.dom.encode(r[0]) +
|
|
'">' +
|
|
e.dom.encode("string" == typeof r[1] ? r[1] : r[0]) +
|
|
"</span>"
|
|
);
|
|
},
|
|
Gk = (e, t) => {
|
|
t.hasAttribute("data-mce-caret") &&
|
|
(mi(t), e.selection.setRng(e.selection.getRng()), e.selection.scrollIntoView(t));
|
|
},
|
|
Xk = (e, t) => {
|
|
const n = (e =>
|
|
no(Cn(e.getBody()), "*[data-mce-caret]")
|
|
.map(e => e.dom)
|
|
.getOrNull())(e);
|
|
if (n)
|
|
return "compositionstart" === t.type
|
|
? (t.preventDefault(), t.stopPropagation(), void Gk(e, n))
|
|
: void (ii(n) && (Gk(e, n), e.undoManager.add()));
|
|
},
|
|
Zk = vr,
|
|
Qk = (e, t, n) => {
|
|
const o = Pu(e.getBody()),
|
|
r = T(Cu, 1 === t ? o.next : o.prev);
|
|
if (n.collapsed) {
|
|
const o = e.dom.getParent(n.startContainer, "PRE");
|
|
if (!o) return;
|
|
if (!r(Ji.fromRangeStart(n))) {
|
|
const n = Cn(
|
|
(e => {
|
|
const t = e.dom.create(Wl(e));
|
|
return (t.innerHTML = '<br data-mce-bogus="1">'), t;
|
|
})(e)
|
|
);
|
|
1 === t ? bo(Cn(o), n) : ho(Cn(o), n), e.selection.select(n.dom, !0), e.selection.collapse();
|
|
}
|
|
}
|
|
},
|
|
Jk = (e, t) =>
|
|
((e, t) => {
|
|
const n = t ? xu.Forwards : xu.Backwards,
|
|
o = e.selection.getRng();
|
|
return ((e, t, n) => tk(t, e, n, Ip, Fp, Zk))(n, e, o).orThunk(() => (Qk(e, n, o), I.none()));
|
|
})(
|
|
e,
|
|
((e, t) => {
|
|
const n = t ? e.getEnd(!0) : e.getStart(!0);
|
|
return Ah(n) ? !t : t;
|
|
})(e.selection, t)
|
|
).exists(t => (JE(e, t), !0)),
|
|
e_ = (e, t) =>
|
|
((e, t) => {
|
|
const n = t ? 1 : -1,
|
|
o = e.selection.getRng();
|
|
return ((e, t, n) =>
|
|
nk(
|
|
t,
|
|
e,
|
|
n,
|
|
e => Ip(e) || Lp(e),
|
|
e => Fp(e) || Mp(e),
|
|
Zk
|
|
))(n, e, o).orThunk(() => (Qk(e, n, o), I.none()));
|
|
})(e, t).exists(t => (JE(e, t), !0)),
|
|
t_ = (e, t) => rk(e, t, t ? Fp : Ip),
|
|
n_ = (e, t) =>
|
|
zx(e, !t)
|
|
.map(n => {
|
|
const o = n.toRange(),
|
|
r = e.selection.getRng();
|
|
return t ? o.setStart(r.startContainer, r.startOffset) : o.setEnd(r.endContainer, r.endOffset), o;
|
|
})
|
|
.exists(t => (JE(e, t), !0)),
|
|
o_ = e => H(["figcaption"], $t(e)),
|
|
r_ = (e, t) =>
|
|
!!e.selection.isCollapsed() &&
|
|
((e, t) => {
|
|
const n = Cn(e.getBody()),
|
|
o = Ji.fromRangeStart(e.selection.getRng());
|
|
return ((e, t, n) => {
|
|
const o = T(_n, t);
|
|
return Jn(Cn(e.container()), e => n.isBlock($t(e)), o).filter(o_);
|
|
})(o, n, e.schema).exists(() => {
|
|
if (((e, t, n) => (t ? IE(e.dom, n) : ME(e.dom, n)))(n, t, o)) {
|
|
const o = Wk(e, n, t ? yo : vo);
|
|
return e.selection.setRng(o), !0;
|
|
}
|
|
return !1;
|
|
});
|
|
})(e, t),
|
|
s_ = (e, t) =>
|
|
((e, t) =>
|
|
t
|
|
? I.from(e.dom.getParent(e.selection.getNode(), "details"))
|
|
.map(t =>
|
|
((e, t) => {
|
|
const n = e.selection.getRng(),
|
|
o = Ji.fromRangeStart(n);
|
|
return !(e.getBody().lastChild !== t || !IE(t, o) || (e.execCommand("InsertNewBlockAfter"), 0));
|
|
})(e, t)
|
|
)
|
|
.getOr(!1)
|
|
: I.from(e.dom.getParent(e.selection.getNode(), "summary"))
|
|
.bind(t =>
|
|
I.from(e.dom.getParent(t, "details")).map(n =>
|
|
((e, t, n) => {
|
|
const o = e.selection.getRng(),
|
|
r = Ji.fromRangeStart(o);
|
|
return !(e.getBody().firstChild !== t || !ME(n, r) || (e.execCommand("InsertNewBlockBefore"), 0));
|
|
})(e, n, t)
|
|
)
|
|
)
|
|
.getOr(!1))(e, t),
|
|
a_ = {shiftKey: !1, altKey: !1, ctrlKey: !1, metaKey: !1, keyCode: 0},
|
|
i_ = (e, t) =>
|
|
t.keyCode === e.keyCode &&
|
|
t.shiftKey === e.shiftKey &&
|
|
t.altKey === e.altKey &&
|
|
t.ctrlKey === e.ctrlKey &&
|
|
t.metaKey === e.metaKey,
|
|
l_ =
|
|
(e, ...t) =>
|
|
() =>
|
|
e.apply(null, t),
|
|
d_ = (e, t) =>
|
|
Q(((e, t) => te((e => V(e, e => ({...a_, ...e})))(e), e => (i_(e, t) ? [e] : [])))(e, t), e => e.action()),
|
|
c_ = (e, t) =>
|
|
ue(((e, t) => te((e => V(e, e => ({...a_, ...e})))(e), e => (i_(e, t) ? [e] : [])))(e, t), e => e.action()),
|
|
u_ = (e, t) => {
|
|
const n = t ? xu.Forwards : xu.Backwards,
|
|
o = e.selection.getRng();
|
|
return tk(e, n, o, Pp, Dp, wr).exists(t => (JE(e, t), !0));
|
|
},
|
|
m_ = (e, t) => {
|
|
const n = t ? 1 : -1,
|
|
o = e.selection.getRng();
|
|
return nk(e, n, o, Pp, Dp, wr).exists(t => (JE(e, t), !0));
|
|
},
|
|
f_ = (e, t) => rk(e, t, t ? Dp : Pp),
|
|
g_ = kl([{none: ["current"]}, {first: ["current"]}, {middle: ["current", "target"]}, {last: ["current"]}]),
|
|
p_ = {...g_, none: e => g_.none(e)},
|
|
h_ = (e, t, n) => te(In(e), e => (En(e, t) ? (n(e) ? [e] : []) : h_(e, t, n))),
|
|
b_ = (e, t) => oo(e, "table", t),
|
|
v_ = (e, t, n, o, r = M) => {
|
|
const s = 1 === o;
|
|
if (!s && n <= 0) return p_.first(e[0]);
|
|
if (s && n >= e.length - 1) return p_.last(e[e.length - 1]);
|
|
{
|
|
const s = n + o,
|
|
a = e[s];
|
|
return r(a) ? p_.middle(t, a) : v_(e, t, s, o, r);
|
|
}
|
|
},
|
|
y_ = (e, t) =>
|
|
b_(e, t).bind(t => {
|
|
const n = h_(t, "th,td", M);
|
|
return J(n, t => _n(e, t)).map(e => ({index: e, all: n}));
|
|
}),
|
|
C_ = ["img", "br"],
|
|
w_ = e => {
|
|
return (
|
|
((t = e), ja.getOption(t)).filter(e => 0 !== e.trim().length || e.indexOf(Wo) > -1).isSome() ||
|
|
H(C_, $t(e)) ||
|
|
(e => Wt(e) && "false" === tn(e, "contenteditable"))(e)
|
|
);
|
|
var t;
|
|
},
|
|
x_ = (e, t, n, o, r) => {
|
|
const s = zo(Cn(n), "td,th,caption").map(e => e.dom),
|
|
a = Y(
|
|
((e, t) =>
|
|
te(t, t => {
|
|
const n = ((e, t) => ({
|
|
left: e.left - t,
|
|
top: e.top - t,
|
|
right: e.right + -2,
|
|
bottom: e.bottom + -2,
|
|
width: e.width + t,
|
|
height: e.height + t
|
|
}))(pi(t.getBoundingClientRect()), -1);
|
|
return [
|
|
{x: n.left, y: e(n), cell: t},
|
|
{x: n.right, y: e(n), cell: t}
|
|
];
|
|
}))(e, s),
|
|
e => t(e, r)
|
|
);
|
|
return ((e, t, n) =>
|
|
X(
|
|
e,
|
|
(e, o) =>
|
|
e.fold(
|
|
() => I.some(o),
|
|
e => {
|
|
const r = Math.sqrt(Math.abs(e.x - t) + Math.abs(e.y - n)),
|
|
s = Math.sqrt(Math.abs(o.x - t) + Math.abs(o.y - n));
|
|
return I.some(s < r ? o : e);
|
|
}
|
|
),
|
|
I.none()
|
|
))(a, o, r).map(e => e.cell);
|
|
},
|
|
E_ = T(
|
|
x_,
|
|
e => e.bottom,
|
|
(e, t) => e.y < t
|
|
),
|
|
k_ = T(
|
|
x_,
|
|
e => e.top,
|
|
(e, t) => e.y > t
|
|
),
|
|
__ = (e, t, n) => {
|
|
const o = e(t, n);
|
|
return (e => e.breakType === kE.Wrap && 0 === e.positions.length)(o) ||
|
|
(!pr(n.getNode()) && (e => e.breakType === kE.Br && 1 === e.positions.length)(o))
|
|
? !((e, t, n) => n.breakAt.exists(n => e(t, n).breakAt.isSome()))(e, t, o)
|
|
: o.breakAt.isNone();
|
|
},
|
|
S_ = T(__, BE),
|
|
N_ = T(__, PE),
|
|
R_ = (e, t, n, o) => {
|
|
const r = e.selection.getRng(),
|
|
s = t ? 1 : -1;
|
|
return !(
|
|
!Wc() ||
|
|
!((e, t, n) => {
|
|
const o = Ji.fromRangeStart(t);
|
|
return zu(!e, n).exists(e => e.isEqual(o));
|
|
})(t, r, n) ||
|
|
(Px(s, e, n, !t, !1).each(t => {
|
|
JE(e, t);
|
|
}),
|
|
0)
|
|
);
|
|
},
|
|
A_ = (e, t, n) => {
|
|
const o = ((e, t) => {
|
|
const n = t.getNode(e);
|
|
return ar(n) ? I.some(n) : I.none();
|
|
})(!!t, n),
|
|
r = !1 === t;
|
|
o.fold(
|
|
() => JE(e, n.toRange()),
|
|
o =>
|
|
zu(r, e.getBody())
|
|
.filter(e => e.isEqual(n))
|
|
.fold(
|
|
() => JE(e, n.toRange()),
|
|
n =>
|
|
((e, t, n) => {
|
|
t.undoManager.transact(() => {
|
|
const o = e ? bo : ho,
|
|
r = Wk(t, Cn(n), o);
|
|
JE(t, r);
|
|
});
|
|
})(t, e, o)
|
|
)
|
|
);
|
|
},
|
|
T_ = (e, t, n, o) => {
|
|
const r = e.selection.getRng(),
|
|
s = Ji.fromRangeStart(r),
|
|
a = e.getBody();
|
|
if (!t && S_(o, s)) {
|
|
const o = ((e, t, n) =>
|
|
((e, t) =>
|
|
le(t.getClientRects())
|
|
.bind(t => E_(e, t.left, t.top))
|
|
.bind(e => {
|
|
return OE(
|
|
Vu((n = e))
|
|
.map(e => BE(n, e).positions.concat(e))
|
|
.getOr([]),
|
|
t
|
|
);
|
|
var n;
|
|
}))(t, n)
|
|
.orThunk(() => le(n.getClientRects()).bind(n => TE(DE(e, Ji.before(t)), n.left)))
|
|
.getOr(Ji.before(t)))(a, n, s);
|
|
return A_(e, t, o), !0;
|
|
}
|
|
if (t && N_(o, s)) {
|
|
const o = ((e, t, n) =>
|
|
((e, t) =>
|
|
de(t.getClientRects())
|
|
.bind(t => k_(e, t.left, t.top))
|
|
.bind(e => {
|
|
return OE(
|
|
$u((n = e))
|
|
.map(e => [e].concat(PE(n, e).positions))
|
|
.getOr([]),
|
|
t
|
|
);
|
|
var n;
|
|
}))(t, n)
|
|
.orThunk(() => le(n.getClientRects()).bind(n => TE(LE(e, Ji.after(t)), n.left)))
|
|
.getOr(Ji.after(t)))(a, n, s);
|
|
return A_(e, t, o), !0;
|
|
}
|
|
return !1;
|
|
},
|
|
O_ = (e, t, n) =>
|
|
I.from(e.dom.getParent(e.selection.getNode(), "td,th"))
|
|
.bind(o => I.from(e.dom.getParent(o, "table")).map(r => n(e, t, r, o)))
|
|
.getOr(!1),
|
|
B_ = (e, t) => O_(e, t, R_),
|
|
P_ = (e, t) => O_(e, t, T_),
|
|
D_ = (e, t, n) =>
|
|
n.fold(
|
|
I.none,
|
|
I.none,
|
|
(e, t) => {
|
|
return ((n = t), eo(n, w_)).map(e =>
|
|
(e => {
|
|
const t = Lf.exact(e, 0, e, 0);
|
|
return zf(t);
|
|
})(e)
|
|
);
|
|
var n;
|
|
},
|
|
n => (e.execCommand("mceTableInsertRowAfter"), L_(e, t, n))
|
|
),
|
|
L_ = (e, t, n) => {
|
|
return D_(
|
|
e,
|
|
t,
|
|
((r = ro),
|
|
y_((o = n), void 0).fold(
|
|
() => p_.none(o),
|
|
e => v_(e.all, o, e.index, 1, r)
|
|
))
|
|
);
|
|
var o, r;
|
|
},
|
|
M_ = (e, t, n) => {
|
|
return D_(
|
|
e,
|
|
t,
|
|
((r = ro),
|
|
y_((o = n), void 0).fold(
|
|
() => p_.none(),
|
|
e => v_(e.all, o, e.index, -1, r)
|
|
))
|
|
);
|
|
var o, r;
|
|
},
|
|
I_ = (e, t) => {
|
|
const n = ["table", "li", "dl"],
|
|
o = Cn(e.getBody()),
|
|
r = e => {
|
|
const t = $t(e);
|
|
return _n(e, o) || H(n, t);
|
|
},
|
|
s = e.selection.getRng();
|
|
return ((e, t) =>
|
|
((e, t, n = L) =>
|
|
n(t) ? I.none() : H(e, $t(t)) ? I.some(t) : to(t, e.join(","), e => En(e, "table") || n(e)))(
|
|
["td", "th"],
|
|
e,
|
|
t
|
|
))(Cn(t ? s.endContainer : s.startContainer), r)
|
|
.map(
|
|
n => (
|
|
b_(n, r).each(t => {
|
|
e.model.table.clearSelectedCells(t.dom);
|
|
}),
|
|
e.selection.collapse(!t),
|
|
(t ? L_ : M_)(e, r, n).each(t => {
|
|
e.selection.setRng(t);
|
|
}),
|
|
!0
|
|
)
|
|
)
|
|
.getOr(!1);
|
|
},
|
|
F_ = (e, t) => ({container: e, offset: t}),
|
|
U_ = fa.DOM,
|
|
z_ = e => t => e === t ? -1 : 0,
|
|
j_ = (e, t, n) => {
|
|
if (dr(e) && t >= 0) return I.some(F_(e, t));
|
|
{
|
|
const o = za(U_);
|
|
return I.from(o.backwards(e, t, z_(e), n)).map(e => F_(e.container, e.container.data.length));
|
|
}
|
|
},
|
|
H_ = (e, t, n) => {
|
|
if (!dr(e)) return I.none();
|
|
const o = e.data;
|
|
if (t >= 0 && t <= o.length) return I.some(F_(e, t));
|
|
{
|
|
const o = za(U_);
|
|
return I.from(o.backwards(e, t, z_(e), n)).bind(e => {
|
|
const o = e.container.data;
|
|
return H_(e.container, t + o.length, n);
|
|
});
|
|
}
|
|
},
|
|
$_ = (e, t, n) => {
|
|
if (!dr(e)) return I.none();
|
|
const o = e.data;
|
|
if (t <= o.length) return I.some(F_(e, t));
|
|
{
|
|
const r = za(U_);
|
|
return I.from(r.forwards(e, t, z_(e), n)).bind(e => $_(e.container, t - o.length, n));
|
|
}
|
|
},
|
|
V_ = (e, t, n, o, r) => {
|
|
const s = za(
|
|
e,
|
|
(
|
|
e => t =>
|
|
e.isBlock(t) || H(["BR", "IMG", "HR", "INPUT"], t.nodeName) || "false" === e.getContentEditable(t)
|
|
)(e)
|
|
);
|
|
return I.from(s.backwards(t, n, o, r));
|
|
},
|
|
q_ = e => "" !== e && -1 !== " \xa0\f\n\r\t\v".indexOf(e),
|
|
W_ = (e, t) => e.substring(t.length),
|
|
K_ = (e, t, n, o = !1) => {
|
|
if (!(r = t).collapsed || !dr(r.startContainer)) return I.none();
|
|
var r;
|
|
const s = {text: "", offset: 0},
|
|
a = e.getParent(t.startContainer, e.isBlock) || e.getRoot();
|
|
return V_(
|
|
e,
|
|
t.startContainer,
|
|
t.startOffset,
|
|
(e, t, r) => (
|
|
(s.text = r + s.text),
|
|
(s.offset += t),
|
|
((e, t, n, o = !1) => {
|
|
let r;
|
|
const s = n.charAt(0);
|
|
for (r = t - 1; r >= 0; r--) {
|
|
const a = e.charAt(r);
|
|
if (!o && q_(a)) return I.none();
|
|
if (s === a && He(e, n, r, t)) break;
|
|
}
|
|
return I.some(r);
|
|
})(s.text, s.offset, n, o).getOr(t)
|
|
),
|
|
a
|
|
).bind(e => {
|
|
const o = t.cloneRange();
|
|
if ((o.setStart(e.container, e.offset), o.setEnd(t.endContainer, t.endOffset), o.collapsed)) return I.none();
|
|
const r = (e => ti(e.toString().replace(/\u00A0/g, " ")))(o);
|
|
return 0 !== r.lastIndexOf(n) ? I.none() : I.some({text: W_(r, n), range: o, trigger: n});
|
|
});
|
|
},
|
|
Y_ = e => {
|
|
if ((e => 3 === e.nodeType)(e)) return F_(e, e.data.length);
|
|
{
|
|
const t = e.childNodes;
|
|
return t.length > 0 ? Y_(t[t.length - 1]) : F_(e, t.length);
|
|
}
|
|
},
|
|
G_ = (e, t) => {
|
|
const n = e.childNodes;
|
|
return n.length > 0 && t < n.length
|
|
? G_(n[t], 0)
|
|
: n.length > 0 && (e => 1 === e.nodeType)(e) && n.length === t
|
|
? Y_(n[n.length - 1])
|
|
: F_(e, t);
|
|
},
|
|
X_ = (e, t, n, o = {}) => {
|
|
var r;
|
|
const s = t(),
|
|
a = null !== (r = e.selection.getRng().startContainer.nodeValue) && void 0 !== r ? r : "",
|
|
i = Y(
|
|
s.lookupByTrigger(n.trigger),
|
|
t =>
|
|
n.text.length >= t.minChars &&
|
|
t.matches.getOrThunk(() =>
|
|
(e => t => {
|
|
const n = G_(t.startContainer, t.startOffset);
|
|
return !((e, t) => {
|
|
var n;
|
|
const o = null !== (n = e.getParent(t.container, e.isBlock)) && void 0 !== n ? n : e.getRoot();
|
|
return V_(e, t.container, t.offset, (e, t) => (0 === t ? -1 : t), o)
|
|
.filter(e => {
|
|
const t = e.container.data.charAt(e.offset - 1);
|
|
return !q_(t);
|
|
})
|
|
.isSome();
|
|
})(e, n);
|
|
})(e.dom)
|
|
)(n.range, a, n.text)
|
|
);
|
|
if (0 === i.length) return I.none();
|
|
const l = Promise.all(
|
|
V(i, e =>
|
|
e.fetch(n.text, e.maxResults, o).then(t => ({
|
|
matchText: n.text,
|
|
items: t,
|
|
columns: e.columns,
|
|
onAction: e.onAction,
|
|
highlightOn: e.highlightOn
|
|
}))
|
|
)
|
|
);
|
|
return I.some({lookupData: l, context: n});
|
|
};
|
|
var Z_;
|
|
!(function (e) {
|
|
(e[(e.Error = 0)] = "Error"), (e[(e.Value = 1)] = "Value");
|
|
})(Z_ || (Z_ = {}));
|
|
const Q_ = (e, t, n) => (e.stype === Z_.Error ? t(e.serror) : n(e.svalue)),
|
|
J_ = e => ({stype: Z_.Value, svalue: e}),
|
|
eS = e => ({stype: Z_.Error, serror: e}),
|
|
tS = Q_,
|
|
nS = e => (f(e) && fe(e).length > 100 ? " removed due to size" : JSON.stringify(e, null, 2)),
|
|
oS = (e, t) => eS([{path: e, getErrorInfo: t}]),
|
|
rS = (e, t) => ({
|
|
extract: (n, o) =>
|
|
Ee(o, e).fold(
|
|
() => ((e, t) => oS(e, () => 'Choice schema did not contain choice key: "' + t + '"'))(n, e),
|
|
e =>
|
|
((e, t, n, o) =>
|
|
Ee(n, o).fold(
|
|
() =>
|
|
((e, t, n) => oS(e, () => 'The chosen schema: "' + n + '" did not exist in branches: ' + nS(t)))(
|
|
e,
|
|
n,
|
|
o
|
|
),
|
|
n => n.extract(e.concat(["branch: " + o]), t)
|
|
))(n, o, t, e)
|
|
),
|
|
toString: () => "chooseOn(" + e + "). Possible values: " + fe(t)
|
|
}),
|
|
sS =
|
|
e =>
|
|
(...t) => {
|
|
if (0 === t.length) throw new Error("Can't merge zero objects");
|
|
const n = {};
|
|
for (let o = 0; o < t.length; o++) {
|
|
const r = t[o];
|
|
for (const t in r) ke(r, t) && (n[t] = e(n[t], r[t]));
|
|
}
|
|
return n;
|
|
},
|
|
aS = sS((e, t) => (g(e) && g(t) ? aS(e, t) : t)),
|
|
iS = (sS((e, t) => t), e => ({tag: "defaultedThunk", process: N(e)})),
|
|
lS = e => {
|
|
const t = (e => {
|
|
const t = [],
|
|
n = [];
|
|
return (
|
|
q(e, e => {
|
|
Q_(
|
|
e,
|
|
e => n.push(e),
|
|
e => t.push(e)
|
|
);
|
|
}),
|
|
{values: t, errors: n}
|
|
);
|
|
})(e);
|
|
return t.errors.length > 0 ? ((n = t.errors), _(eS, ee)(n)) : J_(t.values);
|
|
var n;
|
|
},
|
|
dS = (e, t, n) => {
|
|
switch (e.tag) {
|
|
case "field":
|
|
return t(e.key, e.newKey, e.presence, e.prop);
|
|
case "custom":
|
|
return n(e.newKey, e.instantiator);
|
|
}
|
|
},
|
|
cS = e => ({
|
|
extract: (t, n) => {
|
|
return (o = e(n)), (r = e => ((e, t) => oS(e, N(t)))(t, e)), o.stype === Z_.Error ? r(o.serror) : o;
|
|
var o, r;
|
|
},
|
|
toString: N("val")
|
|
}),
|
|
uS = cS(J_),
|
|
mS = (e, t, n, o) => o(Ee(e, t).getOrThunk(() => n(e))),
|
|
fS = (e, t, n, o, r) => {
|
|
const s = e => r.extract(t.concat([o]), e),
|
|
a = e =>
|
|
e.fold(
|
|
() => J_(I.none()),
|
|
e => {
|
|
const n = r.extract(t.concat([o]), e);
|
|
return (s = n), (a = I.some), s.stype === Z_.Value ? {stype: Z_.Value, svalue: a(s.svalue)} : s;
|
|
var s, a;
|
|
}
|
|
);
|
|
switch (e.tag) {
|
|
case "required":
|
|
return ((e, t, n, o) =>
|
|
Ee(t, n).fold(
|
|
() =>
|
|
((e, t, n) => oS(e, () => 'Could not find valid *required* value for "' + t + '" in ' + nS(n)))(
|
|
e,
|
|
n,
|
|
t
|
|
),
|
|
o
|
|
))(t, n, o, s);
|
|
case "defaultedThunk":
|
|
return mS(n, o, e.process, s);
|
|
case "option":
|
|
return ((e, t, n) => n(Ee(e, t)))(n, o, a);
|
|
case "defaultedOptionThunk":
|
|
return ((e, t, n, o) => o(Ee(e, t).map(t => (!0 === t ? n(e) : t))))(n, o, e.process, a);
|
|
case "mergeWithThunk":
|
|
return mS(n, o, N({}), t => {
|
|
const o = aS(e.process(n), t);
|
|
return s(o);
|
|
});
|
|
}
|
|
},
|
|
gS = e => ({
|
|
extract: (t, n) =>
|
|
((e, t, n) => {
|
|
const o = {},
|
|
r = [];
|
|
for (const s of n)
|
|
dS(
|
|
s,
|
|
(n, s, a, i) => {
|
|
const l = fS(a, e, t, n, i);
|
|
tS(
|
|
l,
|
|
e => {
|
|
r.push(...e);
|
|
},
|
|
e => {
|
|
o[s] = e;
|
|
}
|
|
);
|
|
},
|
|
(e, n) => {
|
|
o[e] = n(t);
|
|
}
|
|
);
|
|
return r.length > 0 ? eS(r) : J_(o);
|
|
})(t, n, e),
|
|
toString: () => {
|
|
const t = V(e, e =>
|
|
dS(
|
|
e,
|
|
(e, t, n, o) => e + " -> " + o.toString(),
|
|
(e, t) => "state(" + e + ")"
|
|
)
|
|
);
|
|
return "obj{\n" + t.join("\n") + "}";
|
|
}
|
|
}),
|
|
pS = e => ({
|
|
extract: (t, n) => {
|
|
const o = V(n, (n, o) => e.extract(t.concat(["[" + o + "]"]), n));
|
|
return lS(o);
|
|
},
|
|
toString: () => "array(" + e.toString() + ")"
|
|
}),
|
|
hS = (e, t, n) => {
|
|
return (
|
|
(o = ((e, t, n) =>
|
|
((e, t) => (e.stype === Z_.Error ? {stype: Z_.Error, serror: t(e.serror)} : e))(t.extract([e], n), e => ({
|
|
input: n,
|
|
errors: e
|
|
})))(e, t, n)),
|
|
Q_(o, El.error, El.value)
|
|
);
|
|
var o;
|
|
},
|
|
bS = (e, t) => rS(e, he(t, gS)),
|
|
vS = N(uS),
|
|
yS = (e, t) =>
|
|
cS(n => {
|
|
const o = typeof n;
|
|
return e(n) ? J_(n) : eS(`Expected type: ${t} but got: ${o}`);
|
|
}),
|
|
CS = yS(x, "number"),
|
|
wS = yS(m, "string"),
|
|
xS = yS(b, "boolean"),
|
|
ES = yS(w, "function"),
|
|
kS = (e, t, n, o) => ({tag: "field", key: e, newKey: t, presence: n, prop: o}),
|
|
_S = (e, t) => ({tag: "custom", newKey: e, instantiator: t}),
|
|
SS = (e, t) => kS(e, e, {tag: "required", process: {}}, t),
|
|
NS = e => SS(e, wS),
|
|
RS = e => SS(e, ES),
|
|
AS = (e, t) => kS(e, e, {tag: "option", process: {}}, t),
|
|
TS = e => AS(e, wS),
|
|
OS = (e, t, n) => kS(e, e, iS(t), n),
|
|
BS = (e, t) => OS(e, t, CS),
|
|
PS = (e, t, n) =>
|
|
OS(
|
|
e,
|
|
t,
|
|
(e => {
|
|
return (
|
|
(t = t =>
|
|
H(e, t) ? El.value(t) : El.error(`Unsupported value: "${t}", choose one of "${e.join(", ")}".`)),
|
|
cS(e => t(e).fold(eS, J_))
|
|
);
|
|
var t;
|
|
})(n)
|
|
),
|
|
DS = (e, t) => OS(e, t, xS),
|
|
LS = (e, t) => OS(e, t, ES),
|
|
MS = NS("type"),
|
|
IS = RS("fetch"),
|
|
FS = RS("onAction"),
|
|
US = LS("onSetup", () => k),
|
|
zS = TS("text"),
|
|
jS = TS("icon"),
|
|
HS = TS("tooltip"),
|
|
$S = TS("label"),
|
|
VS = DS("active", !1),
|
|
qS = DS("enabled", !0),
|
|
WS = DS("primary", !1),
|
|
KS = e => ((e, t) => OS("type", t, wS))(0, e),
|
|
YS = gS([
|
|
MS,
|
|
NS("trigger"),
|
|
BS("minChars", 1),
|
|
(1, ((e, t) => kS(e, e, iS(1), vS()))("columns")),
|
|
BS("maxResults", 10),
|
|
("matches", AS("matches", ES)),
|
|
IS,
|
|
FS,
|
|
((GS = wS), OS("highlightOn", [], pS(GS)))
|
|
]);
|
|
var GS;
|
|
const XS = [qS, HS, jS, zS, US],
|
|
ZS = [VS].concat(XS),
|
|
QS = [
|
|
LS("predicate", L),
|
|
PS("scope", "node", ["node", "editor"]),
|
|
PS("position", "selection", ["node", "selection", "line"])
|
|
],
|
|
JS = XS.concat([KS("contextformbutton"), WS, FS, _S("original", R)]),
|
|
eN = ZS.concat([KS("contextformbutton"), WS, FS, _S("original", R)]),
|
|
tN = XS.concat([KS("contextformbutton")]),
|
|
nN = ZS.concat([KS("contextformtogglebutton")]),
|
|
oN = bS("type", {contextformbutton: JS, contextformtogglebutton: eN});
|
|
gS(
|
|
[
|
|
KS("contextform"),
|
|
LS("initValue", N("")),
|
|
$S,
|
|
((e, t) => kS(e, e, {tag: "required", process: {}}, pS(t)))("commands", oN),
|
|
AS("launch", bS("type", {contextformbutton: tN, contextformtogglebutton: nN}))
|
|
].concat(QS)
|
|
);
|
|
const rN = e => {
|
|
const t = e.ui.registry.getAll().popups,
|
|
n = he(t, e => {
|
|
return ((t = e), hS("Autocompleter", YS, t)).fold(e => {
|
|
throw new Error(
|
|
"Errors: \n" +
|
|
(e => {
|
|
const t =
|
|
e.length > 10
|
|
? e.slice(0, 10).concat([{path: [], getErrorInfo: N("... (only showing first ten failures)")}])
|
|
: e;
|
|
return V(t, e => "Failed path: (" + e.path.join(" > ") + ")\n" + e.getErrorInfo());
|
|
})((t = e).errors).join("\n") +
|
|
"\n\nInput object: " +
|
|
nS(t.input)
|
|
);
|
|
var t;
|
|
}, R);
|
|
var t;
|
|
}),
|
|
o = Se(we(n, e => e.trigger)),
|
|
r = xe(n);
|
|
return {dataset: n, triggers: o, lookupByTrigger: e => Y(r, t => t.trigger === e)};
|
|
},
|
|
sN = e => {
|
|
const t = Dr(),
|
|
n = Br(!1),
|
|
o = t.isSet,
|
|
r = () => {
|
|
o() &&
|
|
((e => {
|
|
e.dispatch("AutocompleterEnd");
|
|
})(e),
|
|
n.set(!1),
|
|
t.clear());
|
|
},
|
|
s = Le(() => rN(e)),
|
|
a = a => {
|
|
(n =>
|
|
t
|
|
.get()
|
|
.map(t => K_(e.dom, e.selection.getRng(), t.trigger, !0).bind(t => X_(e, s, t, n)))
|
|
.getOrThunk(() =>
|
|
((e, t) => {
|
|
const n = t(),
|
|
o = e.selection.getRng();
|
|
return ((e, t, n) => ue(n.triggers, n => K_(e, t, n)))(e.dom, o, n).bind(n => X_(e, t, n));
|
|
})(e, s)
|
|
))(a).fold(r, s => {
|
|
(e => {
|
|
o() || t.set({trigger: e.trigger, matchLength: e.text.length});
|
|
})(s.context),
|
|
s.lookupData.then(o => {
|
|
t.get().map(a => {
|
|
const i = s.context;
|
|
a.trigger === i.trigger &&
|
|
(i.text.length - a.matchLength >= 10
|
|
? r()
|
|
: (t.set({...a, matchLength: i.text.length}),
|
|
n.get()
|
|
? (vf(e, {range: i.range}),
|
|
((e, t) => {
|
|
e.dispatch("AutocompleterUpdate", t);
|
|
})(e, {lookupData: o}))
|
|
: (n.set(!0),
|
|
vf(e, {range: i.range}),
|
|
((e, t) => {
|
|
e.dispatch("AutocompleterStart", t);
|
|
})(e, {lookupData: o}))));
|
|
});
|
|
});
|
|
});
|
|
},
|
|
i = () =>
|
|
t.get().bind(({trigger: t}) => {
|
|
const o = e.selection.getRng();
|
|
return K_(e.dom, o, t, n.get())
|
|
.filter(({range: e}) =>
|
|
((e, t) => {
|
|
const n = e.compareBoundaryPoints(window.Range.START_TO_START, t),
|
|
o = e.compareBoundaryPoints(window.Range.END_TO_END, t);
|
|
return n >= 0 && o <= 0;
|
|
})(o, e)
|
|
)
|
|
.map(({range: e}) => e);
|
|
});
|
|
e.addCommand("mceAutocompleterReload", (e, t) => {
|
|
const n = f(t) ? t.fetchOptions : {};
|
|
a(n);
|
|
}),
|
|
e.addCommand("mceAutocompleterClose", r),
|
|
e.addCommand("mceAutocompleterRefreshActiveRange", () => {
|
|
i().each(t => {
|
|
vf(e, {range: t});
|
|
});
|
|
}),
|
|
e.editorCommands.addQueryStateHandler("mceAutoCompleterInRange", () => i().isSome()),
|
|
((e, t) => {
|
|
const n = xa(t.load, 50);
|
|
e.on("input", t => {
|
|
("insertCompositionText" !== t.inputType || e.composing) && n.throttle();
|
|
}),
|
|
e.on(
|
|
"keydown",
|
|
e => {
|
|
const o = e.which;
|
|
8 === o
|
|
? n.throttle()
|
|
: 27 === o
|
|
? (n.cancel(), t.cancelIfNecessary())
|
|
: (38 !== o && 40 !== o) || n.cancel();
|
|
},
|
|
!0
|
|
),
|
|
e.on("remove", n.cancel);
|
|
})(e, {cancelIfNecessary: r, load: a});
|
|
},
|
|
aN = Et().browser.isSafari(),
|
|
iN = e => Qa(Cn(e)),
|
|
lN = (e, t) => {
|
|
var n;
|
|
return 0 === e.startOffset && e.endOffset === (null === (n = t.textContent) || void 0 === n ? void 0 : n.length);
|
|
},
|
|
dN = (e, t) => I.from(e.getParent(t.container(), "details")),
|
|
cN = (e, t) => dN(e, t).isSome(),
|
|
uN = (e, t) => {
|
|
const n = t.getNode();
|
|
v(n) || e.selection.setCursorLocation(n, t.offset());
|
|
},
|
|
mN = (e, t, n) => {
|
|
const o = e.dom.getParent(t.container(), "details");
|
|
if (o && !o.open) {
|
|
const t = e.dom.select("summary", o)[0];
|
|
t && (n ? $u(t) : Vu(t)).each(t => uN(e, t));
|
|
} else uN(e, t);
|
|
},
|
|
fN = (e, t, n) => {
|
|
const {dom: o, selection: r} = e,
|
|
s = e.getBody();
|
|
if ("character" === n) {
|
|
const n = Ji.fromRangeStart(r.getRng()),
|
|
a = o.getParent(n.container(), o.isBlock),
|
|
i = dN(o, n),
|
|
l = a && o.isEmpty(a),
|
|
d = h(null == a ? void 0 : a.previousSibling),
|
|
c = h(null == a ? void 0 : a.nextSibling);
|
|
return (
|
|
!!(l && (t ? c : d) && Fu(!t, s, n).exists(e => cN(o, e) && !Mt(i, dN(o, e)))) ||
|
|
Fu(t, s, n).fold(L, n => {
|
|
const r = dN(o, n);
|
|
if (cN(o, n) && !Mt(i, r)) {
|
|
if ((t || mN(e, n, !1), a && l)) {
|
|
if (t && d) return !0;
|
|
if (!t && c) return !0;
|
|
mN(e, n, t), e.dom.remove(a);
|
|
}
|
|
return !0;
|
|
}
|
|
return !1;
|
|
})
|
|
);
|
|
}
|
|
return !1;
|
|
},
|
|
gN = (e, t, n, o) => {
|
|
const r = e.selection.getRng(),
|
|
s = Ji.fromRangeStart(r),
|
|
a = e.getBody();
|
|
return "selection" === o
|
|
? ((e, t) => {
|
|
const n = t.startSummary.exists(t => t.contains(e.startContainer)),
|
|
o = t.startSummary.exists(t => t.contains(e.endContainer)),
|
|
r = t.startDetails.forall(e => t.endDetails.forall(t => e !== t));
|
|
return ((n || o) && !(n && o)) || r;
|
|
})(r, t)
|
|
: n
|
|
? ((e, t) =>
|
|
t.startSummary.exists(t =>
|
|
((e, t) => Vu(t).exists(n => (pr(n.getNode()) && Hu(t, n).exists(t => t.isEqual(e))) || n.isEqual(e)))(
|
|
e,
|
|
t
|
|
)
|
|
))(s, t) ||
|
|
((e, t, n) => n.startDetails.exists(n => ju(e, t).forall(e => !n.contains(e.container()))))(a, s, t)
|
|
: ((e, t) => t.startSummary.exists(t => ((e, t) => $u(t).exists(t => t.isEqual(e)))(e, t)))(s, t) ||
|
|
((e, t) =>
|
|
t.startDetails.exists(n =>
|
|
Hu(n, e).forall(n => t.startSummary.exists(t => !t.contains(e.container()) && t.contains(n.container())))
|
|
))(s, t);
|
|
},
|
|
pN = (e, t, n) =>
|
|
((e, t, n) =>
|
|
((e, t) => {
|
|
const n = I.from(e.getParent(t.startContainer, "details")),
|
|
o = I.from(e.getParent(t.endContainer, "details"));
|
|
if (n.isSome() || o.isSome()) {
|
|
const t = n.bind(t => I.from(e.select("summary", t)[0]));
|
|
return I.some({startSummary: t, startDetails: n, endDetails: o});
|
|
}
|
|
return I.none();
|
|
})(e.dom, e.selection.getRng()).fold(
|
|
() => fN(e, t, n),
|
|
o => gN(e, o, t, n) || fN(e, t, n)
|
|
))(e, t, n) ||
|
|
(aN &&
|
|
((e, t, n) => {
|
|
const o = e.selection,
|
|
r = o.getNode(),
|
|
s = o.getRng(),
|
|
a = Ji.fromRangeStart(s);
|
|
return (
|
|
!!kr(r) &&
|
|
(("selection" === n && lN(s, r)) || Uh(t, a, r)
|
|
? iN(r)
|
|
: e.undoManager.transact(() => {
|
|
const s = o.getSel();
|
|
let {anchorNode: a, anchorOffset: i, focusNode: l, focusOffset: d} = null != s ? s : {};
|
|
const c = () => {
|
|
C(a) && C(i) && C(l) && C(d) && (null == s || s.setBaseAndExtent(a, i, l, d));
|
|
},
|
|
u = (e, t) => {
|
|
q(e.childNodes, e => {
|
|
wm(e) && t.appendChild(e);
|
|
});
|
|
},
|
|
m = e.dom.create("span", {"data-mce-bogus": "1"});
|
|
u(r, m),
|
|
r.appendChild(m),
|
|
c(),
|
|
("word" !== n && "line" !== n) || null == s || s.modify("extend", t ? "right" : "left", n),
|
|
!o.isCollapsed() && lN(o.getRng(), m)
|
|
? iN(r)
|
|
: (e.execCommand(t ? "ForwardDelete" : "Delete"),
|
|
(a = null == s ? void 0 : s.anchorNode),
|
|
(i = null == s ? void 0 : s.anchorOffset),
|
|
(l = null == s ? void 0 : s.focusNode),
|
|
(d = null == s ? void 0 : s.focusOffset),
|
|
u(m, r),
|
|
c()),
|
|
e.dom.remove(m);
|
|
}),
|
|
!0)
|
|
);
|
|
})(e, t, n))
|
|
? I.some(k)
|
|
: I.none(),
|
|
hN =
|
|
e =>
|
|
(t, n, o = {}) => {
|
|
const r = t.getBody(),
|
|
s = {
|
|
bubbles: !0,
|
|
composed: !0,
|
|
data: null,
|
|
isComposing: !1,
|
|
detail: 0,
|
|
view: null,
|
|
target: r,
|
|
currentTarget: r,
|
|
eventPhase: Event.AT_TARGET,
|
|
originalTarget: r,
|
|
explicitOriginalTarget: r,
|
|
isTrusted: !1,
|
|
srcElement: r,
|
|
cancelable: !1,
|
|
preventDefault: k,
|
|
inputType: n
|
|
},
|
|
a = Xs(new InputEvent(e));
|
|
return t.dispatch(e, {...a, ...s, ...o});
|
|
},
|
|
bN = hN("input"),
|
|
vN = hN("beforeinput"),
|
|
yN = Et(),
|
|
CN = yN.os,
|
|
wN = CN.isMacOS() || CN.isiOS(),
|
|
xN = yN.browser.isFirefox(),
|
|
EN = (e, t) => {
|
|
const n = e.dom,
|
|
o = e.schema.getMoveCaretBeforeOnEnterElements();
|
|
if (!t) return;
|
|
if (/^(LI|DT|DD)$/.test(t.nodeName)) {
|
|
const e = (e => {
|
|
for (; e; ) {
|
|
if (er(e) || (dr(e) && e.data && /[\r\n\s]/.test(e.data))) return e;
|
|
e = e.nextSibling;
|
|
}
|
|
return null;
|
|
})(t.firstChild);
|
|
e && /^(UL|OL|DL)$/.test(e.nodeName) && t.insertBefore(n.doc.createTextNode(Wo), t.firstChild);
|
|
}
|
|
const r = n.createRng();
|
|
if ((t.normalize(), t.hasChildNodes())) {
|
|
const e = new Vo(t, t);
|
|
let n,
|
|
s = t;
|
|
for (; (n = e.current()); ) {
|
|
if (dr(n)) {
|
|
r.setStart(n, 0), r.setEnd(n, 0);
|
|
break;
|
|
}
|
|
if (o[n.nodeName.toLowerCase()]) {
|
|
r.setStartBefore(n), r.setEndBefore(n);
|
|
break;
|
|
}
|
|
(s = n), (n = e.next());
|
|
}
|
|
n || (r.setStart(s, 0), r.setEnd(s, 0));
|
|
} else
|
|
pr(t)
|
|
? t.nextSibling && n.isBlock(t.nextSibling)
|
|
? (r.setStartBefore(t), r.setEndBefore(t))
|
|
: (r.setStartAfter(t), r.setEndAfter(t))
|
|
: (r.setStart(t, 0), r.setEnd(t, 0));
|
|
e.selection.setRng(r), vg(e, r);
|
|
},
|
|
kN = (e, t) => {
|
|
const n = e.getRoot();
|
|
let o,
|
|
r = t;
|
|
for (; r !== n && r && "false" !== e.getContentEditable(r); ) {
|
|
if ("true" === e.getContentEditable(r)) {
|
|
o = r;
|
|
break;
|
|
}
|
|
r = r.parentNode;
|
|
}
|
|
return r !== n ? o : n;
|
|
},
|
|
_N = e => I.from(e.dom.getParent(e.selection.getStart(!0), e.dom.isBlock)),
|
|
SN = e => {
|
|
e.innerHTML = '<br data-mce-bogus="1">';
|
|
},
|
|
NN = (e, t) => {
|
|
Wl(e).toLowerCase() === t.tagName.toLowerCase() &&
|
|
((e, t, n) => {
|
|
const o = e.dom;
|
|
I.from(n.style)
|
|
.map(o.parseStyle)
|
|
.each(e => {
|
|
const n = {...go(Cn(t)), ...e};
|
|
o.setStyles(t, n);
|
|
});
|
|
const r = I.from(n.class).map(e => e.split(/\s+/)),
|
|
s = I.from(t.className).map(e => Y(e.split(/\s+/), e => "" !== e));
|
|
It(r, s, (e, n) => {
|
|
const r = Y(n, t => !H(e, t)),
|
|
s = [...e, ...r];
|
|
o.setAttrib(t, "class", s.join(" "));
|
|
});
|
|
const a = ["style", "class"],
|
|
i = Ce(n, (e, t) => !H(a, t));
|
|
o.setAttribs(t, i);
|
|
})(e, t, Kl(e));
|
|
},
|
|
RN = (e, t, n, o, r = !0, s, a) => {
|
|
const i = e.dom,
|
|
l = e.schema,
|
|
d = Wl(e),
|
|
c = n ? n.nodeName.toUpperCase() : "";
|
|
let u = t;
|
|
const m = l.getTextInlineElements();
|
|
let f;
|
|
f = s || "TABLE" === c || "HR" === c ? i.create(s || d, a || {}) : n.cloneNode(!1);
|
|
let g = f;
|
|
if (r) {
|
|
do {
|
|
if (m[u.nodeName]) {
|
|
if (Wu(u) || sm(u)) continue;
|
|
const e = u.cloneNode(!1);
|
|
i.setAttrib(e, "id", ""),
|
|
f.hasChildNodes() ? (e.appendChild(f.firstChild), f.appendChild(e)) : ((g = e), f.appendChild(e));
|
|
}
|
|
} while ((u = u.parentNode) && u !== o);
|
|
} else i.setAttrib(f, "style", null), i.setAttrib(f, "class", null);
|
|
return NN(e, f), SN(g), f;
|
|
},
|
|
AN = (e, t) => {
|
|
const n = null == e ? void 0 : e.parentNode;
|
|
return C(n) && n.nodeName === t;
|
|
},
|
|
TN = e => C(e) && /^(OL|UL|LI)$/.test(e.nodeName),
|
|
ON = e => C(e) && /^(LI|DT|DD)$/.test(e.nodeName),
|
|
BN = e => {
|
|
const t = e.parentNode;
|
|
return ON(t) ? t : e;
|
|
},
|
|
PN = (e, t, n) => {
|
|
let o = e[n ? "firstChild" : "lastChild"];
|
|
for (; o && !er(o); ) o = o[n ? "nextSibling" : "previousSibling"];
|
|
return o === t;
|
|
},
|
|
DN = e =>
|
|
X(
|
|
we(go(Cn(e)), (e, t) => `${t}: ${e};`),
|
|
(e, t) => e + t,
|
|
""
|
|
),
|
|
LN = (e, t) => t && "A" === t.nodeName && e.isEmpty(t),
|
|
MN = (e, t) => e.nodeName === t || (e.previousSibling && e.previousSibling.nodeName === t),
|
|
IN = (e, t) =>
|
|
C(t) &&
|
|
e.isBlock(t) &&
|
|
!/^(TD|TH|CAPTION|FORM)$/.test(t.nodeName) &&
|
|
!/^(fixed|absolute)/i.test(t.style.position) &&
|
|
e.isEditable(t.parentNode) &&
|
|
"false" !== e.getContentEditable(t),
|
|
FN = (e, t, n) =>
|
|
dr(t)
|
|
? e
|
|
? 1 === n && t.data.charAt(n - 1) === Ja
|
|
? 0
|
|
: n
|
|
: n === t.data.length - 1 && t.data.charAt(n) === Ja
|
|
? t.data.length
|
|
: n
|
|
: n,
|
|
UN = {
|
|
insert: (e, t) => {
|
|
let n,
|
|
o,
|
|
r,
|
|
s,
|
|
a = !1;
|
|
const i = e.dom,
|
|
l = e.schema.getNonEmptyElements(),
|
|
d = e.selection.getRng(),
|
|
c = Wl(e),
|
|
u = Cn(d.startContainer),
|
|
f = Fn(u, d.startOffset),
|
|
g = f.exists(e => Wt(e) && !ro(e)),
|
|
p = d.collapsed && g,
|
|
b = (t, o) => RN(e, n, _, k, Zl(e), t, o),
|
|
v = e => {
|
|
const t = FN(e, n, o);
|
|
if (dr(n) && (e ? t > 0 : t < n.data.length)) return !1;
|
|
if ((n.parentNode === _ || n === _) && a && !e) return !0;
|
|
if (e && er(n) && n === _.firstChild) return !0;
|
|
if (MN(n, "TABLE") || MN(n, "HR")) return (a && !e) || (!a && e);
|
|
const r = new Vo(n, _);
|
|
let s;
|
|
for (dr(n) && (e && 0 === t ? r.prev() : e || t !== n.data.length || r.next()); (s = r.current()); ) {
|
|
if (er(s)) {
|
|
if (!s.getAttribute("data-mce-bogus")) {
|
|
const e = s.nodeName.toLowerCase();
|
|
if (l[e] && "br" !== e) return !1;
|
|
}
|
|
} else if (dr(s) && !Go(s.data)) return !1;
|
|
e ? r.prev() : r.next();
|
|
}
|
|
return !0;
|
|
},
|
|
w = () => {
|
|
let t;
|
|
return (
|
|
(t = /^(H[1-6]|PRE|FIGURE)$/.test(r) && "HGROUP" !== S ? b(c) : b()),
|
|
((e, t) => {
|
|
const n = Ql(e);
|
|
return !y(t) && (m(n) ? H(Dt.explode(n), t.nodeName.toLowerCase()) : n);
|
|
})(e, s) &&
|
|
IN(i, s) &&
|
|
i.isEmpty(_, void 0, {includeZwsp: !0})
|
|
? (t = i.split(s, _))
|
|
: i.insertAfter(t, _),
|
|
EN(e, t),
|
|
t
|
|
);
|
|
};
|
|
Gf(i, d).each(e => {
|
|
d.setStart(e.startContainer, e.startOffset), d.setEnd(e.endContainer, e.endOffset);
|
|
}),
|
|
(n = d.startContainer),
|
|
(o = d.startOffset);
|
|
const x = !(!t || !t.shiftKey),
|
|
E = !(!t || !t.ctrlKey);
|
|
er(n) &&
|
|
n.hasChildNodes() &&
|
|
!p &&
|
|
((a = o > n.childNodes.length - 1),
|
|
(n = n.childNodes[Math.min(o, n.childNodes.length - 1)] || n),
|
|
(o = a && dr(n) ? n.data.length : 0));
|
|
const k = kN(i, n);
|
|
if (
|
|
!k ||
|
|
((e, t) => {
|
|
const n = e.dom.getParent(t, "ol,ul,dl");
|
|
return null !== n && "false" === e.dom.getContentEditableParent(n);
|
|
})(e, n)
|
|
)
|
|
return;
|
|
x ||
|
|
(n = ((e, t, n, o, r) => {
|
|
var s, a;
|
|
const i = e.dom,
|
|
l = null !== (s = kN(i, o)) && void 0 !== s ? s : i.getRoot();
|
|
let d = i.getParent(o, i.isBlock);
|
|
if (!d || !IN(i, d)) {
|
|
if (((d = d || l), !d.hasChildNodes())) {
|
|
const o = i.create(t);
|
|
return NN(e, o), d.appendChild(o), n.setStart(o, 0), n.setEnd(o, 0), o;
|
|
}
|
|
let s,
|
|
c = o;
|
|
for (; c && c.parentNode !== d; ) c = c.parentNode;
|
|
for (; c && !i.isBlock(c); ) (s = c), (c = c.previousSibling);
|
|
const u = null === (a = null == s ? void 0 : s.parentElement) || void 0 === a ? void 0 : a.nodeName;
|
|
if (s && u && e.schema.isValidChild(u, t.toLowerCase())) {
|
|
const a = s.parentNode,
|
|
l = i.create(t);
|
|
for (NN(e, l), a.insertBefore(l, s), c = s; c && !i.isBlock(c); ) {
|
|
const e = c.nextSibling;
|
|
l.appendChild(c), (c = e);
|
|
}
|
|
n.setStart(o, r), n.setEnd(o, r);
|
|
}
|
|
}
|
|
return o;
|
|
})(e, c, d, n, o));
|
|
let _ = i.getParent(n, i.isBlock) || i.getRoot();
|
|
(s = C(null == _ ? void 0 : _.parentNode) ? i.getParent(_.parentNode, i.isBlock) : null),
|
|
(r = _ ? _.nodeName.toUpperCase() : "");
|
|
const S = s ? s.nodeName.toUpperCase() : "";
|
|
if (
|
|
("LI" !== S || E || ((_ = s), (s = s.parentNode), (r = S)),
|
|
er(s) &&
|
|
((e, t, n) =>
|
|
!t &&
|
|
n.nodeName.toLowerCase() === Wl(e) &&
|
|
e.dom.isEmpty(n) &&
|
|
((t, n, o) => {
|
|
let r = n;
|
|
for (; r && r !== t && h(r.nextSibling); ) {
|
|
const t = r.parentElement;
|
|
if (!t || ((s = t), !ke(e.schema.getTextBlockElements(), s.nodeName.toLowerCase()))) return Er(t);
|
|
r = t;
|
|
}
|
|
var s;
|
|
return !1;
|
|
})(e.getBody(), n))(e, x, _))
|
|
)
|
|
return ((e, t, n) => {
|
|
var o, r, s;
|
|
const a = t(Wl(e)),
|
|
i = ((e, t) => e.dom.getParent(t, Er))(e, n);
|
|
i &&
|
|
(e.dom.insertAfter(a, i),
|
|
EN(e, a),
|
|
(null !==
|
|
(s =
|
|
null === (r = null === (o = n.parentElement) || void 0 === o ? void 0 : o.childNodes) || void 0 === r
|
|
? void 0
|
|
: r.length) && void 0 !== s
|
|
? s
|
|
: 0) > 1 && e.dom.remove(n));
|
|
})(e, b, _);
|
|
if (/^(LI|DT|DD)$/.test(r) && er(s) && i.isEmpty(_))
|
|
return void ((e, t, n, o, r) => {
|
|
const s = e.dom,
|
|
a = e.selection.getRng(),
|
|
i = n.parentNode;
|
|
if (n === e.getBody() || !i) return;
|
|
var l;
|
|
TN((l = n)) && TN(l.parentNode) && (r = "LI");
|
|
const d = ON(o) ? DN(o) : void 0;
|
|
let c = ON(o) && d ? t(r, {style: DN(o)}) : t(r);
|
|
if (PN(n, o, !0) && PN(n, o, !1))
|
|
if (AN(n, "LI")) {
|
|
const e = BN(n);
|
|
s.insertAfter(c, e),
|
|
(e => {
|
|
var t;
|
|
return (null === (t = e.parentNode) || void 0 === t ? void 0 : t.firstChild) === e;
|
|
})(n)
|
|
? s.remove(e)
|
|
: s.remove(n);
|
|
} else s.replace(c, n);
|
|
else if (PN(n, o, !0))
|
|
AN(n, "LI")
|
|
? (s.insertAfter(c, BN(n)), c.appendChild(s.doc.createTextNode(" ")), c.appendChild(n))
|
|
: i.insertBefore(c, n),
|
|
s.remove(o);
|
|
else if (PN(n, o, !1)) s.insertAfter(c, BN(n)), s.remove(o);
|
|
else {
|
|
n = BN(n);
|
|
const e = a.cloneRange();
|
|
e.setStartAfter(o), e.setEndAfter(n);
|
|
const t = e.extractContents();
|
|
if ("LI" === r && ((e, t) => e.firstChild && "LI" === e.firstChild.nodeName)(t)) {
|
|
const e = Y(V(c.children, Cn), O(Zt("br")));
|
|
(c = t.firstChild), s.insertAfter(t, n), q(e, e => vo(Cn(c), e)), d && c.setAttribute("style", d);
|
|
} else s.insertAfter(t, n), s.insertAfter(c, n);
|
|
s.remove(o);
|
|
}
|
|
EN(e, c);
|
|
})(e, b, s, _, c);
|
|
if (!(p || (_ !== e.getBody() && IN(i, _)))) return;
|
|
const N = _.parentNode;
|
|
let R;
|
|
if (p)
|
|
(R = b(c)),
|
|
f.fold(
|
|
() => {
|
|
yo(u, Cn(R));
|
|
},
|
|
e => {
|
|
ho(e, Cn(R));
|
|
}
|
|
),
|
|
e.selection.setCursorLocation(R, 0);
|
|
else if (ri(_)) (R = mi(_)), i.isEmpty(_) && SN(_), NN(e, R), EN(e, R);
|
|
else if (v(!1)) R = w();
|
|
else if (v(!0) && N) {
|
|
R = N.insertBefore(b(), _);
|
|
const t = Cn(d.startContainer).dom.hasChildNodes() && d.collapsed;
|
|
EN(e, MN(_, "HR") || t ? R : _);
|
|
} else {
|
|
const t = (e => {
|
|
const t = e.cloneRange();
|
|
return (
|
|
t.setStart(e.startContainer, FN(!0, e.startContainer, e.startOffset)),
|
|
t.setEnd(e.endContainer, FN(!1, e.endContainer, e.endOffset)),
|
|
t
|
|
);
|
|
})(d).cloneRange();
|
|
t.setEndAfter(_);
|
|
const n = t.extractContents();
|
|
(e => {
|
|
q(Uo(Cn(e), Yt), e => {
|
|
const t = e.dom;
|
|
t.nodeValue = ti(t.data);
|
|
});
|
|
})(n),
|
|
(e => {
|
|
let t = e;
|
|
do {
|
|
dr(t) && (t.data = t.data.replace(/^[\r\n]+/, "")), (t = t.firstChild);
|
|
} while (t);
|
|
})(n),
|
|
(R = n.firstChild),
|
|
i.insertAfter(n, _),
|
|
((e, t, n) => {
|
|
var o;
|
|
const r = [];
|
|
if (!n) return;
|
|
let s = n;
|
|
for (; (s = s.firstChild); ) {
|
|
if (e.isBlock(s)) return;
|
|
er(s) && !t[s.nodeName.toLowerCase()] && r.push(s);
|
|
}
|
|
let a = r.length;
|
|
for (; a--; )
|
|
(s = r[a]),
|
|
(!s.hasChildNodes() ||
|
|
(s.firstChild === s.lastChild &&
|
|
"" === (null === (o = s.firstChild) || void 0 === o ? void 0 : o.nodeValue)) ||
|
|
LN(e, s)) &&
|
|
e.remove(s);
|
|
})(i, l, R),
|
|
((e, t) => {
|
|
t.normalize();
|
|
const n = t.lastChild;
|
|
(!n || (er(n) && /^(left|right)$/gi.test(e.getStyle(n, "float", !0)))) && e.add(t, "br");
|
|
})(i, _),
|
|
i.isEmpty(_) && SN(_),
|
|
R.normalize(),
|
|
i.isEmpty(R) ? (i.remove(R), w()) : (NN(e, R), EN(e, R));
|
|
}
|
|
i.setAttrib(R, "id", ""), e.dispatch("NewBlock", {newBlock: R});
|
|
},
|
|
fakeEventName: "insertParagraph"
|
|
},
|
|
zN = (e, t, n) => {
|
|
const o = e.dom.createRng();
|
|
n ? (o.setStartBefore(t), o.setEndBefore(t)) : (o.setStartAfter(t), o.setEndAfter(t)),
|
|
e.selection.setRng(o),
|
|
vg(e, o);
|
|
},
|
|
jN = (e, t) => {
|
|
const n = vn("br");
|
|
ho(Cn(t), n), e.undoManager.add();
|
|
},
|
|
HN = (e, t) => {
|
|
$N(e.getBody(), t) || bo(Cn(t), vn("br"));
|
|
const n = vn("br");
|
|
bo(Cn(t), n), zN(e, n.dom, !1), e.undoManager.add();
|
|
},
|
|
$N = (e, t) => {
|
|
return (
|
|
(n = Ji.after(t)),
|
|
!!pr(n.getNode()) ||
|
|
ju(e, Ji.after(t))
|
|
.map(e => pr(e.getNode()))
|
|
.getOr(!1)
|
|
);
|
|
var n;
|
|
},
|
|
VN = e => e && "A" === e.nodeName && "href" in e,
|
|
qN = e => e.fold(L, VN, VN, L),
|
|
WN = (e, t) => {
|
|
t.fold(k, T(jN, e), T(HN, e), k);
|
|
},
|
|
KN = {
|
|
insert: (e, t) => {
|
|
const n = (e => {
|
|
const t = T(Rh, e),
|
|
n = Ji.fromRangeStart(e.selection.getRng());
|
|
return pE(t, e.getBody(), n).filter(qN);
|
|
})(e);
|
|
n.isSome()
|
|
? n.each(T(WN, e))
|
|
: ((e, t) => {
|
|
const n = e.selection,
|
|
o = e.dom,
|
|
r = n.getRng();
|
|
let s,
|
|
a = !1;
|
|
Gf(o, r).each(e => {
|
|
r.setStart(e.startContainer, e.startOffset), r.setEnd(e.endContainer, e.endOffset);
|
|
});
|
|
let i = r.startOffset,
|
|
l = r.startContainer;
|
|
if (er(l) && l.hasChildNodes()) {
|
|
const e = i > l.childNodes.length - 1;
|
|
(l = l.childNodes[Math.min(i, l.childNodes.length - 1)] || l), (i = e && dr(l) ? l.data.length : 0);
|
|
}
|
|
let d = o.getParent(l, o.isBlock);
|
|
const c = d && d.parentNode ? o.getParent(d.parentNode, o.isBlock) : null,
|
|
u = c ? c.nodeName.toUpperCase() : "",
|
|
m = !(!t || !t.ctrlKey);
|
|
"LI" !== u || m || (d = c),
|
|
dr(l) &&
|
|
i >= l.data.length &&
|
|
(((e, t, n) => {
|
|
const o = new Vo(t, n);
|
|
let r;
|
|
const s = e.getNonEmptyElements();
|
|
for (; (r = o.next()); ) if (s[r.nodeName.toLowerCase()] || (dr(r) && r.length > 0)) return !0;
|
|
return !1;
|
|
})(e.schema, l, d || o.getRoot()) ||
|
|
((s = o.create("br")), r.insertNode(s), r.setStartAfter(s), r.setEndAfter(s), (a = !0))),
|
|
(s = o.create("br")),
|
|
tl(o, r, s),
|
|
zN(e, s, a),
|
|
e.undoManager.add();
|
|
})(e, t);
|
|
},
|
|
fakeEventName: "insertLineBreak"
|
|
},
|
|
YN = (e, t) =>
|
|
_N(e)
|
|
.filter(e => t.length > 0 && En(Cn(e), t))
|
|
.isSome(),
|
|
GN = kl([{br: []}, {block: []}, {none: []}]),
|
|
XN = (e, t) => (e => YN(e, Xl(e)))(e),
|
|
ZN = e => (t, n) =>
|
|
(e =>
|
|
_N(e)
|
|
.filter(e => Ka(Cn(e)))
|
|
.isSome())(t) === e,
|
|
QN = (e, t) => (n, o) => {
|
|
const r = (e => _N(e).fold(N(""), e => e.nodeName.toUpperCase()))(n) === e.toUpperCase();
|
|
return r === t;
|
|
},
|
|
JN = e => {
|
|
const t = kN(e.dom, e.selection.getStart());
|
|
return y(t);
|
|
},
|
|
eR = e => QN("pre", e),
|
|
tR = e => (t, n) => ql(t) === e,
|
|
nR = (e, t) => (e => YN(e, Gl(e)))(e),
|
|
oR = (e, t) => t,
|
|
rR = e => {
|
|
const t = Wl(e),
|
|
n = kN(e.dom, e.selection.getStart());
|
|
return C(n) && e.schema.isValidChild(n.nodeName, t);
|
|
},
|
|
sR = e => {
|
|
const t = e.selection.getRng(),
|
|
n = Cn(t.startContainer),
|
|
o = Fn(n, t.startOffset).map(e => Wt(e) && !ro(e));
|
|
return t.collapsed && o.getOr(!0);
|
|
},
|
|
aR = (e, t) => (n, o) => X(e, (e, t) => e && t(n, o), !0) ? I.some(t) : I.none(),
|
|
iR = (e, t, n) => {
|
|
t.selection.isCollapsed() ||
|
|
(e => {
|
|
e.execCommand("delete");
|
|
})(t),
|
|
(C(n) && vN(t, e.fakeEventName).isDefaultPrevented()) || (e.insert(t, n), C(n) && bN(t, e.fakeEventName));
|
|
},
|
|
lR = (e, t) => {
|
|
const n = () => iR(KN, e, t),
|
|
o = () => iR(UN, e, t),
|
|
r = ((e, t) =>
|
|
sE(
|
|
[
|
|
aR([XN], GN.none()),
|
|
aR([eR(!0), JN], GN.none()),
|
|
aR([QN("summary", !0)], GN.br()),
|
|
aR([eR(!0), tR(!1), oR], GN.br()),
|
|
aR([eR(!0), tR(!1)], GN.block()),
|
|
aR([eR(!0), tR(!0), oR], GN.block()),
|
|
aR([eR(!0), tR(!0)], GN.br()),
|
|
aR([ZN(!0), oR], GN.br()),
|
|
aR([ZN(!0)], GN.block()),
|
|
aR([nR], GN.br()),
|
|
aR([oR], GN.br()),
|
|
aR([rR], GN.block()),
|
|
aR([sR], GN.block())
|
|
],
|
|
[e, !(!t || !t.shiftKey)]
|
|
).getOr(GN.none()))(e, t);
|
|
switch (Yl(e)) {
|
|
case "linebreak":
|
|
r.fold(n, n, k);
|
|
break;
|
|
case "block":
|
|
r.fold(o, o, k);
|
|
break;
|
|
case "invert":
|
|
r.fold(o, n, k);
|
|
break;
|
|
default:
|
|
r.fold(n, o, k);
|
|
}
|
|
},
|
|
dR = Et(),
|
|
cR = dR.os.isiOS() && dR.browser.isSafari(),
|
|
uR = (e, t) => {
|
|
var n;
|
|
t.isDefaultPrevented() ||
|
|
(t.preventDefault(),
|
|
(n = e.undoManager).typing && ((n.typing = !1), n.add()),
|
|
e.undoManager.transact(() => {
|
|
lR(e, t);
|
|
}));
|
|
},
|
|
mR = Et(),
|
|
fR = e => e.stopImmediatePropagation(),
|
|
gR = e => e.keyCode === Cf.PAGE_UP || e.keyCode === Cf.PAGE_DOWN,
|
|
pR = (e, t, n) => {
|
|
n && !e.get() ? t.on("NodeChange", fR, !0) : !n && e.get() && t.off("NodeChange", fR), e.set(n);
|
|
},
|
|
hR = (e, t) => {
|
|
const n = t.container(),
|
|
o = t.offset();
|
|
return dr(n)
|
|
? (n.insertData(o, e), I.some(Ji(n, o + e.length)))
|
|
: yu(t).map(n => {
|
|
const o = yn(e);
|
|
return t.isAtEnd() ? bo(n, o) : ho(n, o), Ji(o.dom, e.length);
|
|
});
|
|
},
|
|
bR = T(hR, Wo),
|
|
vR = T(hR, " "),
|
|
yR = e => t => {
|
|
e.selection.setRng(t.toRange()), e.nodeChanged();
|
|
},
|
|
CR = e => {
|
|
const t = Ji.fromRangeStart(e.selection.getRng()),
|
|
n = Cn(e.getBody());
|
|
if (e.selection.isCollapsed()) {
|
|
const o = T(Rh, e),
|
|
r = Ji.fromRangeStart(e.selection.getRng());
|
|
return pE(o, e.getBody(), r)
|
|
.bind(
|
|
(
|
|
e => t =>
|
|
t.fold(
|
|
t => Hu(e.dom, Ji.before(t)),
|
|
e => $u(e),
|
|
e => Vu(e),
|
|
t => ju(e.dom, Ji.after(t))
|
|
)
|
|
)(n)
|
|
)
|
|
.map(
|
|
o => () =>
|
|
(
|
|
(e, t, n) => o =>
|
|
ih(e, o, n) ? bR(t) : vR(t)
|
|
)(
|
|
n,
|
|
t,
|
|
e.schema
|
|
)(o).each(yR(e))
|
|
);
|
|
}
|
|
return I.none();
|
|
},
|
|
wR = e => {
|
|
return Ft(
|
|
Tt.browser.isFirefox() &&
|
|
e.selection.isEditable() &&
|
|
((t = e.dom), (n = e.selection.getRng().startContainer), t.isEditable(t.getParent(n, "summary"))),
|
|
() => {
|
|
const t = Cn(e.getBody());
|
|
e.selection.isCollapsed() || e.getDoc().execCommand("Delete"),
|
|
((e, t, n) => (ih(e, t, n) ? bR(t) : vR(t)))(t, Ji.fromRangeStart(e.selection.getRng()), e.schema).each(
|
|
yR(e)
|
|
);
|
|
}
|
|
);
|
|
var t, n;
|
|
},
|
|
xR = e =>
|
|
_c(e)
|
|
? [
|
|
{keyCode: Cf.TAB, action: l_(I_, e, !0)},
|
|
{keyCode: Cf.TAB, shiftKey: !0, action: l_(I_, e, !1)}
|
|
]
|
|
: [],
|
|
ER = e => {
|
|
if ((e.addShortcut("Meta+P", "", "mcePrint"), sN(e), rw(e))) return Br(null);
|
|
{
|
|
const t = uk(e);
|
|
return (
|
|
(e => {
|
|
e.on("beforeinput", t => {
|
|
(e.selection.isEditable() && !$(t.getTargetRanges(), t => !Vg(e.dom, t))) || t.preventDefault();
|
|
});
|
|
})(e),
|
|
(e => {
|
|
e.on("keyup compositionstart", T(Xk, e));
|
|
})(e),
|
|
((e, t) => {
|
|
e.on("keydown", n => {
|
|
n.isDefaultPrevented() ||
|
|
((e, t, n) => {
|
|
const o = Tt.os.isMacOS() || Tt.os.isiOS();
|
|
d_(
|
|
[
|
|
{keyCode: Cf.RIGHT, action: l_(Jk, e, !0)},
|
|
{keyCode: Cf.LEFT, action: l_(Jk, e, !1)},
|
|
{keyCode: Cf.UP, action: l_(e_, e, !1)},
|
|
{keyCode: Cf.DOWN, action: l_(e_, e, !0)},
|
|
...(o
|
|
? [
|
|
{keyCode: Cf.UP, action: l_(n_, e, !1), metaKey: !0, shiftKey: !0},
|
|
{keyCode: Cf.DOWN, action: l_(n_, e, !0), metaKey: !0, shiftKey: !0}
|
|
]
|
|
: []),
|
|
{keyCode: Cf.RIGHT, action: l_(B_, e, !0)},
|
|
{keyCode: Cf.LEFT, action: l_(B_, e, !1)},
|
|
{keyCode: Cf.UP, action: l_(P_, e, !1)},
|
|
{keyCode: Cf.DOWN, action: l_(P_, e, !0)},
|
|
{keyCode: Cf.UP, action: l_(P_, e, !1)},
|
|
{keyCode: Cf.UP, action: l_(s_, e, !1)},
|
|
{keyCode: Cf.DOWN, action: l_(s_, e, !0)},
|
|
{keyCode: Cf.RIGHT, action: l_(u_, e, !0)},
|
|
{keyCode: Cf.LEFT, action: l_(u_, e, !1)},
|
|
{keyCode: Cf.UP, action: l_(m_, e, !1)},
|
|
{keyCode: Cf.DOWN, action: l_(m_, e, !0)},
|
|
{keyCode: Cf.RIGHT, action: l_(dk, e, t, !0)},
|
|
{keyCode: Cf.LEFT, action: l_(dk, e, t, !1)},
|
|
{keyCode: Cf.RIGHT, ctrlKey: !o, altKey: o, action: l_(mk, e, t)},
|
|
{keyCode: Cf.LEFT, ctrlKey: !o, altKey: o, action: l_(fk, e, t)},
|
|
{keyCode: Cf.UP, action: l_(r_, e, !1)},
|
|
{keyCode: Cf.DOWN, action: l_(r_, e, !0)}
|
|
],
|
|
n
|
|
).each(e => {
|
|
n.preventDefault();
|
|
});
|
|
})(e, t, n);
|
|
});
|
|
})(e, t),
|
|
((e, t) => {
|
|
let n = !1;
|
|
e.on("keydown", o => {
|
|
(n = o.keyCode === Cf.BACKSPACE),
|
|
o.isDefaultPrevented() ||
|
|
((e, t, n) => {
|
|
const o = n.keyCode === Cf.BACKSPACE ? "deleteContentBackward" : "deleteContentForward",
|
|
r = e.selection.isCollapsed(),
|
|
s = r ? "character" : "selection",
|
|
a = e => (r ? (e ? "word" : "line") : "selection");
|
|
c_(
|
|
[
|
|
{keyCode: Cf.BACKSPACE, action: l_(Ik, e)},
|
|
{keyCode: Cf.BACKSPACE, action: l_(Kx, e, !1)},
|
|
{keyCode: Cf.DELETE, action: l_(Kx, e, !0)},
|
|
{keyCode: Cf.BACKSPACE, action: l_(Ux, e, !1)},
|
|
{keyCode: Cf.DELETE, action: l_(Ux, e, !0)},
|
|
{keyCode: Cf.BACKSPACE, action: l_(bk, e, t, !1)},
|
|
{keyCode: Cf.DELETE, action: l_(bk, e, t, !0)},
|
|
{keyCode: Cf.BACKSPACE, action: l_(fb, e, !1)},
|
|
{keyCode: Cf.DELETE, action: l_(fb, e, !0)},
|
|
{keyCode: Cf.BACKSPACE, action: l_(pN, e, !1, s)},
|
|
{keyCode: Cf.DELETE, action: l_(pN, e, !0, s)},
|
|
...(wN
|
|
? [
|
|
{keyCode: Cf.BACKSPACE, altKey: !0, action: l_(pN, e, !1, a(!0))},
|
|
{keyCode: Cf.DELETE, altKey: !0, action: l_(pN, e, !0, a(!0))},
|
|
{keyCode: Cf.BACKSPACE, metaKey: !0, action: l_(pN, e, !1, a(!1))}
|
|
]
|
|
: [
|
|
{keyCode: Cf.BACKSPACE, ctrlKey: !0, action: l_(pN, e, !1, a(!0))},
|
|
{keyCode: Cf.DELETE, ctrlKey: !0, action: l_(pN, e, !0, a(!0))}
|
|
]),
|
|
{keyCode: Cf.BACKSPACE, action: l_(Yx, e, !1)},
|
|
{keyCode: Cf.DELETE, action: l_(Yx, e, !0)},
|
|
{keyCode: Cf.BACKSPACE, action: l_(Ak, e, !1)},
|
|
{keyCode: Cf.DELETE, action: l_(Ak, e, !0)},
|
|
{keyCode: Cf.BACKSPACE, action: l_(Bx, e, !1)},
|
|
{keyCode: Cf.DELETE, action: l_(Bx, e, !0)},
|
|
{keyCode: Cf.BACKSPACE, action: l_(Ax, e, !1)},
|
|
{keyCode: Cf.DELETE, action: l_(Ax, e, !0)},
|
|
{keyCode: Cf.BACKSPACE, action: l_(Sk, e, !1)},
|
|
{keyCode: Cf.DELETE, action: l_(Sk, e, !0)}
|
|
],
|
|
n
|
|
)
|
|
.filter(t => e.selection.isEditable())
|
|
.each(t => {
|
|
n.preventDefault(), vN(e, o).isDefaultPrevented() || (t(), bN(e, o));
|
|
});
|
|
})(e, t, o);
|
|
}),
|
|
e.on("keyup", t => {
|
|
t.isDefaultPrevented() ||
|
|
((e, t, n) => {
|
|
d_(
|
|
[
|
|
{keyCode: Cf.BACKSPACE, action: l_(Wx, e)},
|
|
{keyCode: Cf.DELETE, action: l_(Wx, e)},
|
|
...(wN
|
|
? [
|
|
{keyCode: Cf.BACKSPACE, altKey: !0, action: l_(Nk, e)},
|
|
{keyCode: Cf.DELETE, altKey: !0, action: l_(Nk, e)},
|
|
...(n ? [{keyCode: xN ? 224 : 91, action: l_(Nk, e)}] : [])
|
|
]
|
|
: [
|
|
{keyCode: Cf.BACKSPACE, ctrlKey: !0, action: l_(Nk, e)},
|
|
{keyCode: Cf.DELETE, ctrlKey: !0, action: l_(Nk, e)}
|
|
])
|
|
],
|
|
t
|
|
);
|
|
})(e, t, n),
|
|
(n = !1);
|
|
});
|
|
})(e, t),
|
|
(e => {
|
|
let t = I.none();
|
|
e.on("keydown", n => {
|
|
n.keyCode === Cf.ENTER &&
|
|
(cR &&
|
|
(e => {
|
|
if (!e.collapsed) return !1;
|
|
const t = e.startContainer;
|
|
if (dr(t)) {
|
|
const n = /^[\uAC00-\uD7AF\u1100-\u11FF\u3130-\u318F\uA960-\uA97F\uD7B0-\uD7FF]$/,
|
|
o = t.data.charAt(e.startOffset - 1);
|
|
return n.test(o);
|
|
}
|
|
return !1;
|
|
})(e.selection.getRng())
|
|
? (e => {
|
|
(t = I.some(e.selection.getBookmark())), e.undoManager.add();
|
|
})(e)
|
|
: uR(e, n));
|
|
}),
|
|
e.on("keyup", n => {
|
|
n.keyCode === Cf.ENTER &&
|
|
t.each(() =>
|
|
((e, n) => {
|
|
e.undoManager.undo(), t.fold(k, t => e.selection.moveToBookmark(t)), uR(e, n), (t = I.none());
|
|
})(e, n)
|
|
);
|
|
});
|
|
})(e),
|
|
(e => {
|
|
e.on("keydown", t => {
|
|
t.isDefaultPrevented() ||
|
|
((e, t) => {
|
|
c_(
|
|
[
|
|
{keyCode: Cf.SPACEBAR, action: l_(CR, e)},
|
|
{keyCode: Cf.SPACEBAR, action: l_(wR, e)}
|
|
],
|
|
t
|
|
).each(n => {
|
|
t.preventDefault(),
|
|
vN(e, "insertText", {data: " "}).isDefaultPrevented() || (n(), bN(e, "insertText", {data: " "}));
|
|
});
|
|
})(e, t);
|
|
});
|
|
})(e),
|
|
(e => {
|
|
e.on("input", t => {
|
|
t.isComposing ||
|
|
(e => {
|
|
const t = Cn(e.getBody());
|
|
e.selection.isCollapsed() &&
|
|
ph(t, Ji.fromRangeStart(e.selection.getRng()), e.schema).each(t => {
|
|
e.selection.setRng(t.toRange());
|
|
});
|
|
})(e);
|
|
});
|
|
})(e),
|
|
(e => {
|
|
e.on("keydown", t => {
|
|
t.isDefaultPrevented() ||
|
|
((e, t) => {
|
|
d_([...xR(e)], t).each(e => {
|
|
t.preventDefault();
|
|
});
|
|
})(e, t);
|
|
});
|
|
})(e),
|
|
((e, t) => {
|
|
e.on("keydown", n => {
|
|
n.isDefaultPrevented() ||
|
|
((e, t, n) => {
|
|
const o = Tt.os.isMacOS() || Tt.os.isiOS();
|
|
d_(
|
|
[
|
|
{keyCode: Cf.END, action: l_(t_, e, !0)},
|
|
{keyCode: Cf.HOME, action: l_(t_, e, !1)},
|
|
...(o
|
|
? []
|
|
: [
|
|
{keyCode: Cf.HOME, action: l_(n_, e, !1), ctrlKey: !0, shiftKey: !0},
|
|
{keyCode: Cf.END, action: l_(n_, e, !0), ctrlKey: !0, shiftKey: !0}
|
|
]),
|
|
{keyCode: Cf.END, action: l_(f_, e, !0)},
|
|
{keyCode: Cf.HOME, action: l_(f_, e, !1)},
|
|
{keyCode: Cf.END, action: l_(gk, e, !0, t)},
|
|
{keyCode: Cf.HOME, action: l_(gk, e, !1, t)}
|
|
],
|
|
n
|
|
).each(e => {
|
|
n.preventDefault();
|
|
});
|
|
})(e, t, n);
|
|
});
|
|
})(e, t),
|
|
((e, t) => {
|
|
if (mR.os.isMacOS()) return;
|
|
const n = Br(!1);
|
|
e.on("keydown", t => {
|
|
gR(t) && pR(n, e, !0);
|
|
}),
|
|
e.on("keyup", o => {
|
|
o.isDefaultPrevented() ||
|
|
((e, t, n) => {
|
|
d_(
|
|
[
|
|
{keyCode: Cf.PAGE_UP, action: l_(gk, e, !1, t)},
|
|
{keyCode: Cf.PAGE_DOWN, action: l_(gk, e, !0, t)}
|
|
],
|
|
n
|
|
);
|
|
})(e, t, o),
|
|
gR(o) && n.get() && (pR(n, e, !1), e.nodeChanged());
|
|
});
|
|
})(e, t),
|
|
t
|
|
);
|
|
}
|
|
};
|
|
class kR {
|
|
constructor(e) {
|
|
let t;
|
|
(this.lastPath = []), (this.editor = e);
|
|
const n = this;
|
|
"onselectionchange" in e.getDoc() ||
|
|
e.on("NodeChange click mouseup keyup focus", n => {
|
|
const o = e.selection.getRng(),
|
|
r = {
|
|
startContainer: o.startContainer,
|
|
startOffset: o.startOffset,
|
|
endContainer: o.endContainer,
|
|
endOffset: o.endOffset
|
|
};
|
|
("nodechange" !== n.type && Hf(r, t)) || e.dispatch("SelectionChange"), (t = r);
|
|
}),
|
|
e.on("contextmenu", () => {
|
|
Rg(e), e.dispatch("SelectionChange");
|
|
}),
|
|
e.on("SelectionChange", () => {
|
|
const t = e.selection.getStart(!0);
|
|
t &&
|
|
vm(e) &&
|
|
!n.isSameElementPath(t) &&
|
|
e.dom.isChildOf(t, e.getBody()) &&
|
|
e.nodeChanged({selectionChange: !0});
|
|
}),
|
|
e.on("mouseup", t => {
|
|
!t.isDefaultPrevented() &&
|
|
vm(e) &&
|
|
("IMG" === e.selection.getNode().nodeName
|
|
? Og.setEditorTimeout(e, () => {
|
|
e.nodeChanged();
|
|
})
|
|
: e.nodeChanged());
|
|
});
|
|
}
|
|
nodeChanged(e = {}) {
|
|
const t = this.editor.selection;
|
|
let n;
|
|
if (this.editor.initialized && t && !zd(this.editor) && !this.editor.mode.isReadOnly()) {
|
|
const o = this.editor.getBody();
|
|
(n = t.getStart(!0) || o),
|
|
(n.ownerDocument === this.editor.getDoc() && this.editor.dom.isChildOf(n, o)) || (n = o);
|
|
const r = [];
|
|
this.editor.dom.getParent(n, e => e === o || (r.push(e), !1)),
|
|
this.editor.dispatch("NodeChange", {...e, element: n, parents: r});
|
|
}
|
|
}
|
|
isSameElementPath(e) {
|
|
let t;
|
|
const n = this.editor,
|
|
o = oe(n.dom.getParents(e, M, n.getBody()));
|
|
if (o.length === this.lastPath.length) {
|
|
for (t = o.length; t >= 0 && o[t] === this.lastPath[t]; t--);
|
|
if (-1 === t) return (this.lastPath = o), !0;
|
|
}
|
|
return (this.lastPath = o), !1;
|
|
}
|
|
}
|
|
const _R = La("image"),
|
|
SR = La("event"),
|
|
NR = e => t => {
|
|
t[SR] = e;
|
|
},
|
|
RR = NR(0),
|
|
AR = NR(2),
|
|
TR = NR(1),
|
|
OR =
|
|
(0,
|
|
e => {
|
|
const t = e;
|
|
return I.from(t[SR]).exists(e => 0 === e);
|
|
});
|
|
const BR = La("mode"),
|
|
PR = e => t => {
|
|
t[BR] = e;
|
|
},
|
|
DR = (e, t) => PR(t)(e),
|
|
LR = PR(0),
|
|
MR = PR(2),
|
|
IR = PR(1),
|
|
FR = e => t => {
|
|
const n = t;
|
|
return I.from(n[BR]).exists(t => t === e);
|
|
},
|
|
UR = FR(0),
|
|
zR = FR(1),
|
|
jR = ["none", "copy", "link", "move"],
|
|
HR = ["none", "copy", "copyLink", "copyMove", "link", "linkMove", "move", "all", "uninitialized"],
|
|
$R = () => {
|
|
const e = new window.DataTransfer();
|
|
let t = "move",
|
|
n = "all";
|
|
const o = {
|
|
get dropEffect() {
|
|
return t;
|
|
},
|
|
set dropEffect(e) {
|
|
H(jR, e) && (t = e);
|
|
},
|
|
get effectAllowed() {
|
|
return n;
|
|
},
|
|
set effectAllowed(e) {
|
|
OR(o) && H(HR, e) && (n = e);
|
|
},
|
|
get items() {
|
|
return ((e, t) => ({
|
|
...t,
|
|
get length() {
|
|
return t.length;
|
|
},
|
|
add: (n, o) => {
|
|
if (UR(e)) {
|
|
if (!m(n)) return t.add(n);
|
|
if (!v(o)) return t.add(n, o);
|
|
}
|
|
return null;
|
|
},
|
|
remove: n => {
|
|
UR(e) && t.remove(n);
|
|
},
|
|
clear: () => {
|
|
UR(e) && t.clear();
|
|
}
|
|
}))(o, e.items);
|
|
},
|
|
get files() {
|
|
return zR(o) ? Object.freeze({length: 0, item: e => null}) : e.files;
|
|
},
|
|
get types() {
|
|
return e.types;
|
|
},
|
|
setDragImage: (t, n, r) => {
|
|
var s;
|
|
UR(o) && ((s = {image: t, x: n, y: r}), (o[_R] = s), e.setDragImage(t, n, r));
|
|
},
|
|
getData: t => (zR(o) ? "" : e.getData(t)),
|
|
setData: (t, n) => {
|
|
UR(o) && e.setData(t, n);
|
|
},
|
|
clearData: t => {
|
|
UR(o) && e.clearData(t);
|
|
}
|
|
};
|
|
return LR(o), o;
|
|
},
|
|
VR = (e, t) => e.setData("text/html", t),
|
|
qR = "x-tinymce/html",
|
|
WR = N(qR),
|
|
KR = "\x3c!-- " + qR + " --\x3e",
|
|
YR = e => KR + e,
|
|
GR = e => -1 !== e.indexOf(KR),
|
|
XR = "%MCEPASTEBIN%",
|
|
ZR = e => e.dom.get("mcepastebin"),
|
|
QR = e => C(e) && "mcepastebin" === e.id,
|
|
JR = e => e === XR,
|
|
eA = (e, t) => (
|
|
Dt.each(t, t => {
|
|
e = u(t, RegExp) ? e.replace(t, "") : e.replace(t[0], t[1]);
|
|
}),
|
|
e
|
|
),
|
|
tA = e =>
|
|
eA(e, [
|
|
/^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/gi,
|
|
/<!--StartFragment-->|<!--EndFragment-->/g,
|
|
[/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g, (e, t, n) => (t || n ? Wo : " ")],
|
|
/<br class="Apple-interchange-newline">/g,
|
|
/<br>$/i
|
|
]),
|
|
nA = (e, t) => ({content: e, cancelled: t}),
|
|
oA = (e, t) => (e.insertContent(t, {merge: cc(e), paste: !0}), !0),
|
|
rA = e => /^https?:\/\/[\w\-\/+=.,!;:&%@^~(){}?#]+$/i.test(e),
|
|
sA = (e, t, n) =>
|
|
!(e.selection.isCollapsed() || !rA(t)) &&
|
|
((e, t, n) => (
|
|
e.undoManager.extra(
|
|
() => {
|
|
n(e, t);
|
|
},
|
|
() => {
|
|
e.execCommand("mceInsertLink", !1, t);
|
|
}
|
|
),
|
|
!0
|
|
))(e, t, n),
|
|
aA = (e, t, n) =>
|
|
!!((e, t) => rA(t) && $(kc(e), e => Ve(t.toLowerCase(), `.${e.toLowerCase()}`)))(e, t) &&
|
|
((e, t, n) => (
|
|
e.undoManager.extra(
|
|
() => {
|
|
n(e, t);
|
|
},
|
|
() => {
|
|
e.insertContent('<img src="' + t + '">');
|
|
}
|
|
),
|
|
!0
|
|
))(e, t, n),
|
|
iA = (e => {
|
|
let t = 0;
|
|
return () => "mceclip" + t++;
|
|
})(),
|
|
lA = e => {
|
|
const t = $R();
|
|
return VR(t, e), MR(t), t;
|
|
},
|
|
dA = (e, t, n, o, r) => {
|
|
const s = ((e, t, n) =>
|
|
((e, t, n) => {
|
|
const o = ((e, t, n) => e.dispatch("PastePreProcess", {content: t, internal: n}))(e, t, n),
|
|
r = ((e, t) => {
|
|
const n = kC(
|
|
{
|
|
sanitize: xc(e),
|
|
sandbox_iframes: Rc(e),
|
|
sandbox_iframes_exclusions: Ac(e),
|
|
convert_unsafe_embeds: Tc(e)
|
|
},
|
|
e.schema
|
|
);
|
|
n.addNodeFilter("meta", e => {
|
|
Dt.each(e, e => {
|
|
e.remove();
|
|
});
|
|
});
|
|
const o = n.parse(t, {forced_root_block: !1, isRootContent: !0});
|
|
return yp({validate: !0}, e.schema).serialize(o);
|
|
})(e, o.content);
|
|
return e.hasEventListeners("PastePostProcess") && !o.isDefaultPrevented()
|
|
? ((e, t, n) => {
|
|
const o = e.dom.create("div", {style: "display:none"}, t),
|
|
r = ((e, t, n) => e.dispatch("PastePostProcess", {node: t, internal: n}))(e, o, n);
|
|
return nA(r.node.innerHTML, r.isDefaultPrevented());
|
|
})(e, r, n)
|
|
: nA(r, o.isDefaultPrevented());
|
|
})(e, t, n))(e, t, n);
|
|
if (!s.cancelled) {
|
|
const t = s.content,
|
|
n = () =>
|
|
((e, t, n) => {
|
|
n || !uc(e)
|
|
? oA(e, t)
|
|
: ((e, t) => {
|
|
Dt.each([sA, aA, oA], n => !n(e, t, oA));
|
|
})(e, t);
|
|
})(e, t, o);
|
|
r
|
|
? vN(e, "insertFromPaste", {dataTransfer: lA(t)}).isDefaultPrevented() || (n(), bN(e, "insertFromPaste"))
|
|
: n();
|
|
}
|
|
},
|
|
cA = (e, t, n, o) => {
|
|
const r = n || GR(t);
|
|
dA(e, (e => e.replace(KR, ""))(t), r, !1, o);
|
|
},
|
|
uA = (e, t, n) => {
|
|
const o = e.dom.encode(t).replace(/\r\n/g, "\n"),
|
|
r = ((e, t, n) => {
|
|
const o = e.split(/\n\n/),
|
|
r = ((e, t) => {
|
|
let n = "<" + e;
|
|
const o = we(t, (e, t) => t + '="' + ws.encodeAllRaw(e) + '"');
|
|
return o.length && (n += " " + o.join(" ")), n + ">";
|
|
})(t, n),
|
|
s = "</" + t + ">",
|
|
a = V(o, e => e.split(/\n/).join("<br />"));
|
|
return 1 === a.length ? a[0] : V(a, e => r + e + s).join("");
|
|
})(Zo(o, fc(e)), Wl(e), Kl(e));
|
|
dA(e, r, !1, !0, n);
|
|
},
|
|
mA = e => {
|
|
const t = {};
|
|
if (e && e.types)
|
|
for (let n = 0; n < e.types.length; n++) {
|
|
const o = e.types[n];
|
|
try {
|
|
t[o] = e.getData(o);
|
|
} catch (e) {
|
|
t[o] = "";
|
|
}
|
|
}
|
|
return t;
|
|
},
|
|
fA = (e, t) => t in e && e[t].length > 0,
|
|
gA = e => fA(e, "text/html") || fA(e, "text/plain"),
|
|
pA = (e, t, n) => {
|
|
const o = "paste" === t.type ? t.clipboardData : t.dataTransfer;
|
|
var r;
|
|
if (rc(e) && o) {
|
|
const s = ((e, t) => {
|
|
const n = t.items ? te(ce(t.items), e => ("file" === e.kind ? [e.getAsFile()] : [])) : [],
|
|
o = t.files ? ce(t.files) : [];
|
|
return Y(
|
|
n.length > 0 ? n : o,
|
|
(e => {
|
|
const t = kc(e);
|
|
return e =>
|
|
$e(e.type, "image/") &&
|
|
$(
|
|
t,
|
|
t =>
|
|
(e => {
|
|
const t = e.toLowerCase(),
|
|
n = {
|
|
jpg: "jpeg",
|
|
jpe: "jpeg",
|
|
jfi: "jpeg",
|
|
jif: "jpeg",
|
|
jfif: "jpeg",
|
|
pjpeg: "jpeg",
|
|
pjp: "jpeg",
|
|
svg: "svg+xml"
|
|
};
|
|
return Dt.hasOwn(n, t) ? "image/" + n[t] : "image/" + t;
|
|
})(t) === e.type
|
|
);
|
|
})(e)
|
|
);
|
|
})(e, o);
|
|
if (s.length > 0)
|
|
return (
|
|
t.preventDefault(),
|
|
((r = s), Promise.all(V(r, e => ey(e).then(t => ({file: e, uri: t}))))).then(t => {
|
|
n && e.selection.setRng(n),
|
|
q(t, t => {
|
|
((e, t) => {
|
|
Qv(t.uri).each(({data: n, type: o, base64Encoded: r}) => {
|
|
const s = r ? n : btoa(n),
|
|
a = t.file,
|
|
i = e.editorUpload.blobCache,
|
|
l = i.getByData(s, o),
|
|
d =
|
|
null != l
|
|
? l
|
|
: ((e, t, n, o) => {
|
|
const r = iA(),
|
|
s = ed(e) && C(n.name),
|
|
a = s
|
|
? ((e, t) => {
|
|
const n = t.match(/([\s\S]+?)(?:\.[a-z0-9.]+)$/i);
|
|
return C(n) ? e.dom.encode(n[1]) : void 0;
|
|
})(e, n.name)
|
|
: r,
|
|
i = s ? n.name : void 0,
|
|
l = t.create(r, n, o, a, i);
|
|
return t.add(l), l;
|
|
})(e, i, a, s);
|
|
cA(e, `<img src="${d.blobUri()}">`, !1, !0);
|
|
});
|
|
})(e, t);
|
|
});
|
|
}),
|
|
!0
|
|
);
|
|
}
|
|
return !1;
|
|
},
|
|
hA = (e, t, n, o, r) => {
|
|
let s = tA(n);
|
|
const a = fA(t, WR()) || GR(n),
|
|
i =
|
|
!a &&
|
|
(e =>
|
|
!/<(?:\/?(?!(?:div|p|br|span)>)\w+|(?:(?!(?:span style="white-space:\s?pre;?">)|br\s?\/>))\w+\s[^>]+)>/i.test(
|
|
e
|
|
))(s),
|
|
l = rA(s);
|
|
(JR(s) || !s.length || (i && !l)) && (o = !0),
|
|
(o || l) &&
|
|
(s =
|
|
fA(t, "text/plain") && i
|
|
? t["text/plain"]
|
|
: (e => {
|
|
const t = Fs(),
|
|
n = kC({}, t);
|
|
let o = "";
|
|
const r = t.getVoidElements(),
|
|
s = Dt.makeMap("script noscript style textarea video audio iframe object", " "),
|
|
a = t.getBlockElements(),
|
|
i = e => {
|
|
const n = e.name,
|
|
l = e;
|
|
if ("br" !== n) {
|
|
if ("wbr" !== n)
|
|
if ((r[n] && (o += " "), s[n])) o += " ";
|
|
else {
|
|
if ((3 === e.type && (o += e.value), !(e.name in t.getVoidElements()))) {
|
|
let t = e.firstChild;
|
|
if (t)
|
|
do {
|
|
i(t);
|
|
} while ((t = t.next));
|
|
}
|
|
a[n] && l.next && ((o += "\n"), "p" === n && (o += "\n"));
|
|
}
|
|
} else o += "\n";
|
|
};
|
|
return (e = eA(e, [/<!\[[^\]]+\]>/g])), i(n.parse(e)), o;
|
|
})(s)),
|
|
JR(s) || (o ? uA(e, s, r) : cA(e, s, a, r));
|
|
},
|
|
bA = (e, t, n) => {
|
|
((e, t, n) => {
|
|
let o;
|
|
e.on("keydown", e => {
|
|
(e => (Cf.metaKeyPressed(e) && 86 === e.keyCode) || (e.shiftKey && 45 === e.keyCode))(e) &&
|
|
!e.isDefaultPrevented() &&
|
|
(o = e.shiftKey && 86 === e.keyCode);
|
|
}),
|
|
e.on("paste", r => {
|
|
if (
|
|
r.isDefaultPrevented() ||
|
|
(e => {
|
|
var t, n;
|
|
return (
|
|
Tt.os.isAndroid() &&
|
|
0 ===
|
|
(null === (n = null === (t = e.clipboardData) || void 0 === t ? void 0 : t.items) || void 0 === n
|
|
? void 0
|
|
: n.length)
|
|
);
|
|
})(r)
|
|
)
|
|
return;
|
|
const s = "text" === n.get() || o;
|
|
o = !1;
|
|
const a = mA(r.clipboardData);
|
|
(!gA(a) && pA(e, r, t.getLastRng() || e.selection.getRng())) ||
|
|
(fA(a, "text/html")
|
|
? (r.preventDefault(), hA(e, a, a["text/html"], s, !0))
|
|
: fA(a, "text/plain") && fA(a, "text/uri-list")
|
|
? (r.preventDefault(), hA(e, a, a["text/plain"], s, !0))
|
|
: (t.create(),
|
|
Og.setEditorTimeout(
|
|
e,
|
|
() => {
|
|
const n = t.getHtml();
|
|
t.remove(), hA(e, a, n, s, !1);
|
|
},
|
|
0
|
|
)));
|
|
});
|
|
})(e, t, n),
|
|
(e => {
|
|
const t = e => $e(e, "webkit-fake-url"),
|
|
n = e => $e(e, "data:");
|
|
e.parser.addNodeFilter("img", (o, r, s) => {
|
|
if (
|
|
!rc(e) &&
|
|
(e => {
|
|
var t;
|
|
return !0 === (null === (t = e.data) || void 0 === t ? void 0 : t.paste);
|
|
})(s)
|
|
)
|
|
for (const r of o) {
|
|
const o = r.attr("src");
|
|
m(o) &&
|
|
!r.attr("data-mce-object") &&
|
|
o !== Tt.transparentSrc &&
|
|
(t(o) || (!gc(e) && n(o))) &&
|
|
r.remove();
|
|
}
|
|
});
|
|
})(e);
|
|
},
|
|
vA = (e, t, n, o) => {
|
|
((e, t, n) => {
|
|
if (!e) return !1;
|
|
try {
|
|
return e.clearData(), e.setData("text/html", t), e.setData("text/plain", n), e.setData(WR(), t), !0;
|
|
} catch (e) {
|
|
return !1;
|
|
}
|
|
})(e.clipboardData, t.html, t.text)
|
|
? (e.preventDefault(), o())
|
|
: n(t.html, o);
|
|
},
|
|
yA = e => (t, n) => {
|
|
const {dom: o, selection: r} = e,
|
|
s = o.create("div", {contenteditable: "false", "data-mce-bogus": "all"}),
|
|
a = o.create("div", {contenteditable: "true"}, t);
|
|
o.setStyles(s, {position: "fixed", top: "0", left: "-3000px", width: "1000px", overflow: "hidden"}),
|
|
s.appendChild(a),
|
|
o.add(e.getBody(), s);
|
|
const i = r.getRng();
|
|
a.focus();
|
|
const l = o.createRng();
|
|
l.selectNodeContents(a),
|
|
r.setRng(l),
|
|
Og.setEditorTimeout(
|
|
e,
|
|
() => {
|
|
r.setRng(i), o.remove(s), n();
|
|
},
|
|
0
|
|
);
|
|
},
|
|
CA = e => ({html: YR(e.selection.getContent({contextual: !0})), text: e.selection.getContent({format: "text"})}),
|
|
wA = e =>
|
|
!e.selection.isCollapsed() ||
|
|
(e => !!e.dom.getParent(e.selection.getStart(), "td[data-mce-selected],th[data-mce-selected]", e.getBody()))(e),
|
|
xA = (e, t) => {
|
|
var n, o;
|
|
return Qf.getCaretRangeFromPoint(
|
|
null !== (n = t.clientX) && void 0 !== n ? n : 0,
|
|
null !== (o = t.clientY) && void 0 !== o ? o : 0,
|
|
e.getDoc()
|
|
);
|
|
},
|
|
EA = (e, t) => {
|
|
e.focus(), t && e.selection.setRng(t);
|
|
},
|
|
kA = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,
|
|
_A = e => Dt.trim(e).replace(kA, Ks).toLowerCase(),
|
|
SA = (e, t, n) => {
|
|
const o = lc(e);
|
|
if (n || "all" === o || !dc(e)) return t;
|
|
const r = o ? o.split(/[, ]/) : [];
|
|
if (r && "none" !== o) {
|
|
const n = e.dom,
|
|
o = e.selection.getNode();
|
|
t = t.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi, (e, t, s, a) => {
|
|
const i = n.parseStyle(n.decode(s)),
|
|
l = {};
|
|
for (let e = 0; e < r.length; e++) {
|
|
const t = i[r[e]];
|
|
let s = t,
|
|
a = n.getStyle(o, r[e], !0);
|
|
/color/.test(r[e]) && ((s = _A(s)), (a = _A(a))), a !== s && (l[r[e]] = t);
|
|
}
|
|
const d = n.serializeStyle(l, "span");
|
|
return d ? t + ' style="' + d + '"' + a : t + a;
|
|
});
|
|
} else t = t.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi, "$1$3");
|
|
return (
|
|
(t = t.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi, (e, t, n, o) => t + ' style="' + n + '"' + o)), t
|
|
);
|
|
},
|
|
NA = e => {
|
|
const t = Br(!1),
|
|
n = Br(mc(e) ? "text" : "html"),
|
|
o = (e => {
|
|
const t = Br(null);
|
|
return {
|
|
create: () =>
|
|
((e, t) => {
|
|
const {dom: n, selection: o} = e,
|
|
r = e.getBody();
|
|
t.set(o.getRng());
|
|
const s = n.add(
|
|
e.getBody(),
|
|
"div",
|
|
{
|
|
id: "mcepastebin",
|
|
class: "mce-pastebin",
|
|
contentEditable: !0,
|
|
"data-mce-bogus": "all",
|
|
style: "position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0"
|
|
},
|
|
XR
|
|
);
|
|
Tt.browser.isFirefox() &&
|
|
n.setStyle(s, "left", "rtl" === n.getStyle(r, "direction", !0) ? 65535 : -65535),
|
|
n.bind(s, "beforedeactivate focusin focusout", e => {
|
|
e.stopPropagation();
|
|
}),
|
|
s.focus(),
|
|
o.select(s, !0);
|
|
})(e, t),
|
|
remove: () =>
|
|
((e, t) => {
|
|
const n = e.dom;
|
|
if (ZR(e)) {
|
|
let o;
|
|
const r = t.get();
|
|
for (; (o = ZR(e)); ) n.remove(o), n.unbind(o);
|
|
r && e.selection.setRng(r);
|
|
}
|
|
t.set(null);
|
|
})(e, t),
|
|
getEl: () => ZR(e),
|
|
getHtml: () =>
|
|
(e => {
|
|
const t = e.dom,
|
|
n = (e, n) => {
|
|
e.appendChild(n), t.remove(n, !0);
|
|
},
|
|
[o, ...r] = Y(e.getBody().childNodes, QR);
|
|
q(r, e => {
|
|
n(o, e);
|
|
});
|
|
const s = t.select("div[id=mcepastebin]", o);
|
|
for (let e = s.length - 1; e >= 0; e--) {
|
|
const r = t.create("div");
|
|
o.insertBefore(r, s[e]), n(r, s[e]);
|
|
}
|
|
return o ? o.innerHTML : "";
|
|
})(e),
|
|
getLastRng: t.get
|
|
};
|
|
})(e);
|
|
(e => {
|
|
(Tt.browser.isChromium() || Tt.browser.isSafari()) &&
|
|
((e, t) => {
|
|
e.on("PastePreProcess", n => {
|
|
n.content = t(e, n.content, n.internal);
|
|
});
|
|
})(e, SA);
|
|
})(e),
|
|
((e, t) => {
|
|
e.addCommand("mceTogglePlainTextPaste", () => {
|
|
((e, t) => {
|
|
"text" === t.get() ? (t.set("html"), yf(e, !1)) : (t.set("text"), yf(e, !0)), e.focus();
|
|
})(e, t);
|
|
}),
|
|
e.addCommand("mceInsertClipboardContent", (t, n) => {
|
|
n.html && cA(e, n.html, n.internal, !1), n.text && uA(e, n.text, !1);
|
|
});
|
|
})(e, n),
|
|
(e => {
|
|
const t = t => n => {
|
|
t(e, n);
|
|
},
|
|
n = sc(e);
|
|
w(n) && e.on("PastePreProcess", t(n));
|
|
const o = ac(e);
|
|
w(o) && e.on("PastePostProcess", t(o));
|
|
})(e),
|
|
e.on("PreInit", () => {
|
|
(e => {
|
|
e.on(
|
|
"cut",
|
|
(e => t => {
|
|
!t.isDefaultPrevented() &&
|
|
wA(e) &&
|
|
e.selection.isEditable() &&
|
|
vA(t, CA(e), yA(e), () => {
|
|
if (Tt.browser.isChromium() || Tt.browser.isFirefox()) {
|
|
const t = e.selection.getRng();
|
|
Og.setEditorTimeout(
|
|
e,
|
|
() => {
|
|
e.selection.setRng(t), e.execCommand("Delete");
|
|
},
|
|
0
|
|
);
|
|
} else e.execCommand("Delete");
|
|
});
|
|
})(e)
|
|
),
|
|
e.on(
|
|
"copy",
|
|
(e => t => {
|
|
!t.isDefaultPrevented() && wA(e) && vA(t, CA(e), yA(e), k);
|
|
})(e)
|
|
);
|
|
})(e),
|
|
((e, t) => {
|
|
oc(e) &&
|
|
e.on("dragend dragover draggesture dragdrop drop drag", e => {
|
|
e.preventDefault(), e.stopPropagation();
|
|
}),
|
|
rc(e) ||
|
|
e.on("drop", e => {
|
|
const t = e.dataTransfer;
|
|
t && (e => $(e.files, e => /^image\//.test(e.type)))(t) && e.preventDefault();
|
|
}),
|
|
e.on("drop", n => {
|
|
if (n.isDefaultPrevented()) return;
|
|
const o = xA(e, n);
|
|
if (y(o)) return;
|
|
const r = mA(n.dataTransfer),
|
|
s = fA(r, WR());
|
|
if (
|
|
(!gA(r) ||
|
|
(e => {
|
|
const t = e["text/plain"];
|
|
return !!t && 0 === t.indexOf("file://");
|
|
})(r)) &&
|
|
pA(e, n, o)
|
|
)
|
|
return;
|
|
const a = r[WR()],
|
|
i = a || r["text/html"] || r["text/plain"],
|
|
l = ((e, t, n, o) => {
|
|
const r = e.getParent(n, e => Zr(t, e));
|
|
if (!h(e.getParent(n, "summary"))) return !0;
|
|
if (r && ke(o, "text/html")) {
|
|
const e = new DOMParser().parseFromString(o["text/html"], "text/html").body;
|
|
return !h(e.querySelector(r.nodeName.toLowerCase()));
|
|
}
|
|
return !1;
|
|
})(e.dom, e.schema, o.startContainer, r),
|
|
d = t.get();
|
|
(d && !l) ||
|
|
(i &&
|
|
(n.preventDefault(),
|
|
Og.setEditorTimeout(e, () => {
|
|
e.undoManager.transact(() => {
|
|
(a || (d && l)) && e.execCommand("Delete"), EA(e, o);
|
|
const t = tA(i);
|
|
r["text/html"] ? cA(e, t, s, !0) : uA(e, t, !0);
|
|
});
|
|
})));
|
|
}),
|
|
e.on("dragstart", e => {
|
|
t.set(!0);
|
|
}),
|
|
e.on("dragover dragend", n => {
|
|
rc(e) && !t.get() && (n.preventDefault(), EA(e, xA(e, n))), "dragend" === n.type && t.set(!1);
|
|
}),
|
|
(e => {
|
|
e.on("input", t => {
|
|
const n = e => h(e.querySelector("summary"));
|
|
if ("deleteByDrag" === t.inputType) {
|
|
const t = Y(e.dom.select("details"), n);
|
|
q(t, t => {
|
|
pr(t.firstChild) && t.firstChild.remove();
|
|
const n = e.dom.create("summary");
|
|
n.appendChild(Za().dom), t.prepend(n);
|
|
});
|
|
}
|
|
});
|
|
})(e);
|
|
})(e, t),
|
|
bA(e, o, n);
|
|
});
|
|
},
|
|
RA = pr,
|
|
AA = dr,
|
|
TA = e => vr(e.dom),
|
|
OA = e => t => _n(Cn(e), t),
|
|
BA = (e, t) => Jn(Cn(e), TA, OA(t)),
|
|
PA = (e, t, n) => {
|
|
const o = new Vo(e, t),
|
|
r = n ? o.next.bind(o) : o.prev.bind(o);
|
|
let s = e;
|
|
for (let t = n ? e : r(); t && !RA(t); t = r()) Pi(t) && (s = t);
|
|
return s;
|
|
},
|
|
DA = e => {
|
|
const t = ((e, t, n) => {
|
|
const o = Ji.fromRangeStart(e).getNode(),
|
|
r = ((e, t, n) => Jn(Cn(e), e => (e => br(e.dom))(e) || n.isBlock($t(e)), OA(t)).getOr(Cn(t)).dom)(o, t, n),
|
|
s = PA(o, r, !1),
|
|
a = PA(o, r, !0),
|
|
i = document.createRange();
|
|
return (
|
|
BA(s, r).fold(
|
|
() => {
|
|
AA(s) ? i.setStart(s, 0) : i.setStartBefore(s);
|
|
},
|
|
e => i.setStartBefore(e.dom)
|
|
),
|
|
BA(a, r).fold(
|
|
() => {
|
|
AA(a) ? i.setEnd(a, a.data.length) : i.setEndAfter(a);
|
|
},
|
|
e => i.setEndAfter(e.dom)
|
|
),
|
|
i
|
|
);
|
|
})(e.selection.getRng(), e.getBody(), e.schema);
|
|
e.selection.setRng(Ab(t));
|
|
};
|
|
var LA;
|
|
!(function (e) {
|
|
(e.Before = "before"), (e.After = "after");
|
|
})(LA || (LA = {}));
|
|
const MA = (e, t) => Math.abs(e.left - t),
|
|
IA = (e, t) => Math.abs(e.right - t),
|
|
FA = (e, t) =>
|
|
(e =>
|
|
X(
|
|
e,
|
|
(e, t) =>
|
|
e.fold(
|
|
() => I.some(t),
|
|
e => {
|
|
const n = Math.min(t.left, e.left),
|
|
o = Math.min(t.top, e.top),
|
|
r = Math.max(t.right, e.right),
|
|
s = Math.max(t.bottom, e.bottom);
|
|
return I.some({top: o, right: r, bottom: s, left: n, width: r - n, height: s - o});
|
|
}
|
|
),
|
|
I.none()
|
|
))(
|
|
Y(e, e => {
|
|
return (n = t) >= (o = e).top && n <= o.bottom;
|
|
var n, o;
|
|
})
|
|
).fold(
|
|
() => [[], e],
|
|
t => {
|
|
const {pass: n, fail: o} = K(e, e =>
|
|
((e, t) => {
|
|
const n =
|
|
((e, t) => Math.max(0, Math.min(e.bottom, t.bottom) - Math.max(e.top, t.top)))(e, t) /
|
|
Math.min(e.height, t.height);
|
|
return ((e, t) => e.top < t.bottom && e.bottom > t.top)(e, t) && n > 0.5;
|
|
})(e, t)
|
|
);
|
|
return [n, o];
|
|
}
|
|
),
|
|
UA = (e, t, n) => (t > e.left && t < e.right ? 0 : Math.min(Math.abs(e.left - t), Math.abs(e.right - t))),
|
|
zA = (e, t, n, o) => {
|
|
const r = e => (Pi(e.node) ? I.some(e) : er(e.node) ? zA(ce(e.node.childNodes), t, n, !1) : I.none()),
|
|
s = (e, s) => {
|
|
const a = ae(e, (e, o) => s(e, t, n) - s(o, t, n));
|
|
return ue(a, r).map(e =>
|
|
o && !dr(e.node) && a.length > 1
|
|
? ((e, o, s) => r(o).filter(o => Math.abs(s(e, t, n) - s(o, t, n)) < 2 && dr(o.node)))(e, a[1], s).getOr(
|
|
e
|
|
)
|
|
: e
|
|
);
|
|
},
|
|
[a, i] = FA(qE(e), n),
|
|
{pass: l, fail: d} = K(i, e => e.top < n);
|
|
return s(a, UA)
|
|
.orThunk(() => s(d, Ci))
|
|
.orThunk(() => s(l, Ci));
|
|
},
|
|
jA = (e, t, n) =>
|
|
((e, t, n) => {
|
|
const o = Cn(e),
|
|
r = Rn(o),
|
|
s = wn(r, t, n)
|
|
.filter(e => Sn(o, e))
|
|
.getOr(o);
|
|
return ((e, t, n, o) => {
|
|
const r = (t, s) => {
|
|
const a = Y(
|
|
t.dom.childNodes,
|
|
O(e => er(e) && e.classList.contains("mce-drag-container"))
|
|
);
|
|
return s
|
|
.fold(
|
|
() => zA(a, n, o, !0),
|
|
e => {
|
|
const t = Y(a, t => t !== e.dom);
|
|
return zA(t, n, o, !0);
|
|
}
|
|
)
|
|
.orThunk(() => (_n(t, e) ? I.none() : On(t)).bind(e => r(e, I.some(t))));
|
|
};
|
|
return r(t, I.none());
|
|
})(o, s, t, n);
|
|
})(e, t, n)
|
|
.filter(e => Yc(e.node))
|
|
.map(e => ((e, t) => ({node: e.node, position: MA(e, t) < IA(e, t) ? LA.Before : LA.After}))(e, t)),
|
|
HA = e => {
|
|
var t, n;
|
|
const o = e.getBoundingClientRect(),
|
|
r = e.ownerDocument,
|
|
s = r.documentElement,
|
|
a = r.defaultView;
|
|
return {
|
|
top: o.top + (null !== (t = null == a ? void 0 : a.scrollY) && void 0 !== t ? t : 0) - s.clientTop,
|
|
left: o.left + (null !== (n = null == a ? void 0 : a.scrollX) && void 0 !== n ? n : 0) - s.clientLeft
|
|
};
|
|
},
|
|
$A = e => ({target: e, srcElement: e}),
|
|
VA = (e, t, n, o) => {
|
|
const r = ((e, t) => {
|
|
const n = (e => {
|
|
const t = $R(),
|
|
n = (e => {
|
|
const t = e;
|
|
return I.from(t[BR]);
|
|
})(e);
|
|
return (
|
|
MR(e),
|
|
RR(t),
|
|
(t.dropEffect = e.dropEffect),
|
|
(t.effectAllowed = e.effectAllowed),
|
|
(e => {
|
|
const t = e;
|
|
return I.from(t[_R]);
|
|
})(e).each(e => t.setDragImage(e.image, e.x, e.y)),
|
|
q(e.types, n => {
|
|
"Files" !== n && t.setData(n, e.getData(n));
|
|
}),
|
|
q(e.files, e => t.items.add(e)),
|
|
(e => {
|
|
const t = e;
|
|
return I.from(t[SR]);
|
|
})(e).each(e => {
|
|
((e, t) => {
|
|
NR(t)(e);
|
|
})(t, e);
|
|
}),
|
|
n.each(n => {
|
|
DR(e, n), DR(t, n);
|
|
}),
|
|
t
|
|
);
|
|
})(e);
|
|
return "dragstart" === t ? (RR(n), LR(n)) : "drop" === t ? (AR(n), MR(n)) : (TR(n), IR(n)), n;
|
|
})(n, e);
|
|
return v(o)
|
|
? ((e, t, n) => {
|
|
const o = B("Function not supported on simulated event.");
|
|
return {
|
|
bubbles: !0,
|
|
cancelBubble: !1,
|
|
cancelable: !0,
|
|
composed: !1,
|
|
currentTarget: null,
|
|
defaultPrevented: !1,
|
|
eventPhase: 0,
|
|
isTrusted: !0,
|
|
returnValue: !1,
|
|
timeStamp: 0,
|
|
type: e,
|
|
composedPath: o,
|
|
initEvent: o,
|
|
preventDefault: k,
|
|
stopImmediatePropagation: k,
|
|
stopPropagation: k,
|
|
AT_TARGET: window.Event.AT_TARGET,
|
|
BUBBLING_PHASE: window.Event.BUBBLING_PHASE,
|
|
CAPTURING_PHASE: window.Event.CAPTURING_PHASE,
|
|
NONE: window.Event.NONE,
|
|
altKey: !1,
|
|
button: 0,
|
|
buttons: 0,
|
|
clientX: 0,
|
|
clientY: 0,
|
|
ctrlKey: !1,
|
|
metaKey: !1,
|
|
movementX: 0,
|
|
movementY: 0,
|
|
offsetX: 0,
|
|
offsetY: 0,
|
|
pageX: 0,
|
|
pageY: 0,
|
|
relatedTarget: null,
|
|
screenX: 0,
|
|
screenY: 0,
|
|
shiftKey: !1,
|
|
x: 0,
|
|
y: 0,
|
|
detail: 0,
|
|
view: null,
|
|
which: 0,
|
|
initUIEvent: o,
|
|
initMouseEvent: o,
|
|
getModifierState: o,
|
|
dataTransfer: n,
|
|
...$A(t)
|
|
};
|
|
})(e, t, r)
|
|
: ((e, t, n, o) => ({...t, dataTransfer: o, type: e, ...$A(n)}))(e, o, t, r);
|
|
},
|
|
qA = vr,
|
|
WA = (
|
|
(...e) =>
|
|
t => {
|
|
for (let n = 0; n < e.length; n++) if (e[n](t)) return !0;
|
|
return !1;
|
|
}
|
|
)(qA, br),
|
|
KA = (e, t, n, o) => {
|
|
const r = e.dom,
|
|
s = t.cloneNode(!0);
|
|
r.setStyles(s, {width: n, height: o}), r.setAttrib(s, "data-mce-selected", null);
|
|
const a = r.create("div", {
|
|
class: "mce-drag-container",
|
|
"data-mce-bogus": "all",
|
|
unselectable: "on",
|
|
contenteditable: "false"
|
|
});
|
|
return (
|
|
r.setStyles(a, {
|
|
position: "absolute",
|
|
opacity: 0.5,
|
|
overflow: "hidden",
|
|
border: 0,
|
|
padding: 0,
|
|
margin: 0,
|
|
width: n,
|
|
height: o
|
|
}),
|
|
r.setStyles(s, {margin: 0, boxSizing: "border-box"}),
|
|
a.appendChild(s),
|
|
a
|
|
);
|
|
},
|
|
YA = (e, t) => n => () => {
|
|
const o = "left" === e ? n.scrollX : n.scrollY;
|
|
n.scroll({[e]: o + t, behavior: "smooth"});
|
|
},
|
|
GA = YA("left", -32),
|
|
XA = YA("left", 32),
|
|
ZA = YA("top", -32),
|
|
QA = YA("top", 32),
|
|
JA = e => {
|
|
e && e.parentNode && e.parentNode.removeChild(e);
|
|
},
|
|
eT = (e, t, n, o, r) => {
|
|
"dragstart" === t && VR(o, e.dom.getOuterHTML(n));
|
|
const s = VA(t, n, o, r);
|
|
return e.dispatch(t, s);
|
|
},
|
|
tT = (e, t) => {
|
|
const n = wa(
|
|
(e, n) =>
|
|
((e, t, n) => {
|
|
e._selectionOverrides.hideFakeCaret(),
|
|
jA(e.getBody(), t, n).fold(
|
|
() => e.selection.placeCaretAt(t, n),
|
|
o => {
|
|
const r = e._selectionOverrides.showCaret(1, o.node, o.position === LA.Before, !1);
|
|
r ? e.selection.setRng(r) : e.selection.placeCaretAt(t, n);
|
|
}
|
|
);
|
|
})(t, e, n),
|
|
0
|
|
);
|
|
t.on("remove", n.cancel);
|
|
const o = e;
|
|
return r =>
|
|
e.on(e => {
|
|
const s = Math.max(Math.abs(r.screenX - e.screenX), Math.abs(r.screenY - e.screenY));
|
|
if (!e.dragging && s > 10) {
|
|
const n = eT(t, "dragstart", e.element, e.dataTransfer, r);
|
|
if ((C(n.dataTransfer) && (e.dataTransfer = n.dataTransfer), n.isDefaultPrevented())) return;
|
|
(e.dragging = !0), t.focus();
|
|
}
|
|
if (e.dragging) {
|
|
const s = r.currentTarget === t.getDoc().documentElement,
|
|
l = ((e, t) => ({pageX: t.pageX - e.relX, pageY: t.pageY + 5}))(
|
|
e,
|
|
((e, t) => {
|
|
return (
|
|
(n = (e => (e.inline ? HA(e.getBody()) : {left: 0, top: 0}))(e)),
|
|
(o = (e => {
|
|
const t = e.getBody();
|
|
return e.inline ? {left: t.scrollLeft, top: t.scrollTop} : {left: 0, top: 0};
|
|
})(e)),
|
|
(r = ((e, t) => {
|
|
if (t.target.ownerDocument !== e.getDoc()) {
|
|
const n = HA(e.getContentAreaContainer()),
|
|
o = (e => {
|
|
const t = e.getBody(),
|
|
n = e.getDoc().documentElement,
|
|
o = {left: t.scrollLeft, top: t.scrollTop},
|
|
r = {left: t.scrollLeft || n.scrollLeft, top: t.scrollTop || n.scrollTop};
|
|
return e.inline ? o : r;
|
|
})(e);
|
|
return {left: t.pageX - n.left + o.left, top: t.pageY - n.top + o.top};
|
|
}
|
|
return {left: t.pageX, top: t.pageY};
|
|
})(e, t)),
|
|
{pageX: r.left - n.left + o.left, pageY: r.top - n.top + o.top}
|
|
);
|
|
var n, o, r;
|
|
})(t, r)
|
|
);
|
|
(a = e.ghost),
|
|
(i = t.getBody()),
|
|
a.parentNode !== i && i.appendChild(a),
|
|
((e, t, n, o, r, s, a, i, l, d, c, u) => {
|
|
let m = 0,
|
|
f = 0;
|
|
(e.style.left = t.pageX + "px"),
|
|
(e.style.top = t.pageY + "px"),
|
|
t.pageX + n > r && (m = t.pageX + n - r),
|
|
t.pageY + o > s && (f = t.pageY + o - s),
|
|
(e.style.width = n - m + "px"),
|
|
(e.style.height = o - f + "px");
|
|
const g = l.clientHeight,
|
|
p = l.clientWidth,
|
|
h = a + l.getBoundingClientRect().top,
|
|
b = i + l.getBoundingClientRect().left;
|
|
c.on(e => {
|
|
e.intervalId.clear(),
|
|
e.dragging &&
|
|
u &&
|
|
(a + 8 >= g
|
|
? e.intervalId.set(QA(d))
|
|
: a - 8 <= 0
|
|
? e.intervalId.set(ZA(d))
|
|
: i + 8 >= p
|
|
? e.intervalId.set(XA(d))
|
|
: i - 8 <= 0
|
|
? e.intervalId.set(GA(d))
|
|
: h + 16 >= window.innerHeight
|
|
? e.intervalId.set(QA(window))
|
|
: h - 16 <= 0
|
|
? e.intervalId.set(ZA(window))
|
|
: b + 16 >= window.innerWidth
|
|
? e.intervalId.set(XA(window))
|
|
: b - 16 <= 0 && e.intervalId.set(GA(window)));
|
|
});
|
|
})(
|
|
e.ghost,
|
|
l,
|
|
e.width,
|
|
e.height,
|
|
e.maxX,
|
|
e.maxY,
|
|
r.clientY,
|
|
r.clientX,
|
|
t.getContentAreaContainer(),
|
|
t.getWin(),
|
|
o,
|
|
s
|
|
),
|
|
n.throttle(r.clientX, r.clientY);
|
|
}
|
|
var a, i;
|
|
});
|
|
},
|
|
nT = (e, t, n) => {
|
|
e.on(e => {
|
|
e.intervalId.clear(),
|
|
e.dragging &&
|
|
n.fold(
|
|
() => eT(t, "dragend", e.element, e.dataTransfer),
|
|
n => eT(t, "dragend", e.element, e.dataTransfer, n)
|
|
);
|
|
}),
|
|
oT(e);
|
|
},
|
|
oT = e => {
|
|
e.on(e => {
|
|
e.intervalId.clear(), JA(e.ghost);
|
|
}),
|
|
e.clear();
|
|
},
|
|
rT = e => {
|
|
const t = Dr(),
|
|
n = fa.DOM,
|
|
o = document,
|
|
r = ((e, t) => n => {
|
|
if ((e => 0 === e.button)(n)) {
|
|
const o = Q(t.dom.getParents(n.target), WA).getOr(null);
|
|
if (C(o) && ((e, t, n) => qA(n) && n !== t && e.isEditable(n.parentElement))(t.dom, t.getBody(), o)) {
|
|
const r = t.dom.getPos(o),
|
|
s = t.getBody(),
|
|
a = t.getDoc().documentElement;
|
|
e.set({
|
|
element: o,
|
|
dataTransfer: $R(),
|
|
dragging: !1,
|
|
screenX: n.screenX,
|
|
screenY: n.screenY,
|
|
maxX: (t.inline ? s.scrollWidth : a.offsetWidth) - 2,
|
|
maxY: (t.inline ? s.scrollHeight : a.offsetHeight) - 2,
|
|
relX: n.pageX - r.x,
|
|
relY: n.pageY - r.y,
|
|
width: o.offsetWidth,
|
|
height: o.offsetHeight,
|
|
ghost: KA(t, o, o.offsetWidth, o.offsetHeight),
|
|
intervalId: Pr(100)
|
|
});
|
|
}
|
|
}
|
|
})(t, e),
|
|
s = tT(t, e),
|
|
a = ((e, t) => n => {
|
|
e.on(e => {
|
|
var o;
|
|
if ((e.intervalId.clear(), e.dragging)) {
|
|
if (
|
|
((e, t, n) => !y(t) && t !== n && !e.dom.isChildOf(t, n) && e.dom.isEditable(t))(
|
|
t,
|
|
(e => {
|
|
const t = e.getSel();
|
|
if (C(t)) {
|
|
const e = t.getRangeAt(0).startContainer;
|
|
return dr(e) ? e.parentNode : e;
|
|
}
|
|
return null;
|
|
})(t.selection),
|
|
e.element
|
|
)
|
|
) {
|
|
const r =
|
|
null !== (o = t.getDoc().elementFromPoint(n.clientX, n.clientY)) && void 0 !== o ? o : t.getBody();
|
|
eT(t, "drop", r, e.dataTransfer, n).isDefaultPrevented() ||
|
|
t.undoManager.transact(() => {
|
|
((e, t) => {
|
|
const n = e.getParent(t.parentNode, e.isBlock);
|
|
JA(t), n && n !== e.getRoot() && e.isEmpty(n) && Qa(Cn(n));
|
|
})(t.dom, e.element),
|
|
(e => {
|
|
const t = e.getData("text/html");
|
|
return "" === t ? I.none() : I.some(t);
|
|
})(e.dataTransfer).each(e => t.insertContent(e)),
|
|
t._selectionOverrides.hideFakeCaret();
|
|
});
|
|
}
|
|
eT(t, "dragend", t.getBody(), e.dataTransfer, n);
|
|
}
|
|
}),
|
|
oT(e);
|
|
})(t, e),
|
|
i = (
|
|
(e, t) => n =>
|
|
nT(e, t, I.some(n))
|
|
)(t, e);
|
|
e.on("mousedown", r),
|
|
e.on("mousemove", s),
|
|
e.on("mouseup", a),
|
|
n.bind(o, "mousemove", s),
|
|
n.bind(o, "mouseup", i),
|
|
e.on("remove", () => {
|
|
n.unbind(o, "mousemove", s), n.unbind(o, "mouseup", i);
|
|
}),
|
|
e.on("keydown", n => {
|
|
n.keyCode === Cf.ESC && nT(t, e, I.none());
|
|
});
|
|
},
|
|
sT = vr,
|
|
aT = (e, t) => gb(e.getBody(), t),
|
|
iT = e => {
|
|
const t = e.selection,
|
|
n = e.dom,
|
|
o = e.getBody(),
|
|
r = qc(e, o, n.isBlock, () => jg(e)),
|
|
s = "sel-" + n.uniqueId(),
|
|
a = "data-mce-selected";
|
|
let i;
|
|
const l = e => e !== o && (sT(e) || wr(e)) && n.isChildOf(e, o) && n.isEditable(e.parentNode),
|
|
d = (n, o, s, a = !0) =>
|
|
e.dispatch("ShowCaret", {target: o, direction: n, before: s}).isDefaultPrevented()
|
|
? null
|
|
: (a && t.scrollIntoView(o, -1 === n), r.show(s, o)),
|
|
c = e => ai(e) || ci(e) || ui(e),
|
|
u = e => c(e.startContainer) || c(e.endContainer),
|
|
m = t => {
|
|
const o = e.schema.getVoidElements(),
|
|
r = n.createRng(),
|
|
s = t.startContainer,
|
|
a = t.startOffset,
|
|
i = t.endContainer,
|
|
l = t.endOffset;
|
|
return (
|
|
ke(o, s.nodeName.toLowerCase()) ? (0 === a ? r.setStartBefore(s) : r.setStartAfter(s)) : r.setStart(s, a),
|
|
ke(o, i.nodeName.toLowerCase()) ? (0 === l ? r.setEndBefore(i) : r.setEndAfter(i)) : r.setEnd(i, l),
|
|
r
|
|
);
|
|
},
|
|
f = (r, c) => {
|
|
if (!r) return null;
|
|
if (r.collapsed) {
|
|
if (!u(r)) {
|
|
const e = c ? 1 : -1,
|
|
t = vu(e, o, r),
|
|
s = t.getNode(!c);
|
|
if (C(s)) {
|
|
if (Yc(s)) return d(e, s, !!c && !t.isAtEnd(), !1);
|
|
if (si(s) && vr(s.nextSibling)) {
|
|
const e = n.createRng();
|
|
return e.setStart(s, 0), e.setEnd(s, 0), e;
|
|
}
|
|
}
|
|
const a = t.getNode(c);
|
|
if (C(a)) {
|
|
if (Yc(a)) return d(e, a, !c && !t.isAtEnd(), !1);
|
|
if (si(a) && vr(a.previousSibling)) {
|
|
const e = n.createRng();
|
|
return e.setStart(a, 1), e.setEnd(a, 1), e;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
let m = r.startContainer,
|
|
f = r.startOffset;
|
|
const g = r.endOffset;
|
|
if (
|
|
(dr(m) && 0 === f && sT(m.parentNode) && ((m = m.parentNode), (f = n.nodeIndex(m)), (m = m.parentNode)),
|
|
!er(m))
|
|
)
|
|
return null;
|
|
if (g === f + 1 && m === r.endContainer) {
|
|
const o = m.childNodes[f];
|
|
if (l(o))
|
|
return (o => {
|
|
const r = o.cloneNode(!0),
|
|
l = e.dispatch("ObjectSelected", {target: o, targetClone: r});
|
|
if (l.isDefaultPrevented()) return null;
|
|
const d = ((o, r) => {
|
|
const a = Cn(e.getBody()),
|
|
i = e.getDoc(),
|
|
l = no(a, "#" + s).getOrThunk(() => {
|
|
const e = bn('<div data-mce-bogus="all" class="mce-offscreen-selection"></div>', i);
|
|
return Jt(e, "id", s), yo(a, e), e;
|
|
}),
|
|
d = n.createRng();
|
|
xo(l),
|
|
wo(l, [yn(Wo, i), Cn(r), yn(Wo, i)]),
|
|
d.setStart(l.dom.firstChild, 1),
|
|
d.setEnd(l.dom.lastChild, 0),
|
|
co(l, {top: n.getPos(o, e.getBody()).y + "px"}),
|
|
yg(l);
|
|
const c = t.getSel();
|
|
return c && (c.removeAllRanges(), c.addRange(d)), d;
|
|
})(o, l.targetClone),
|
|
c = Cn(o);
|
|
return (
|
|
q(zo(Cn(e.getBody()), `*[${a}]`), e => {
|
|
_n(c, e) || rn(e, a);
|
|
}),
|
|
n.getAttrib(o, a) || o.setAttribute(a, "1"),
|
|
(i = o),
|
|
p(),
|
|
d
|
|
);
|
|
})(o);
|
|
}
|
|
return null;
|
|
},
|
|
g = () => {
|
|
i && i.removeAttribute(a), no(Cn(e.getBody()), "#" + s).each(Eo), (i = null);
|
|
},
|
|
p = () => {
|
|
r.hide();
|
|
};
|
|
return (
|
|
rw(e) ||
|
|
(e.on("click", t => {
|
|
n.isEditable(t.target) || (t.preventDefault(), e.focus());
|
|
}),
|
|
e.on("blur NewBlock", g),
|
|
e.on("ResizeWindow FullscreenStateChanged", r.reposition),
|
|
e.on(
|
|
"tap",
|
|
t => {
|
|
const n = t.target,
|
|
o = aT(e, n);
|
|
sT(o) ? (t.preventDefault(), Dx(e, o).each(f)) : l(n) && Dx(e, n).each(f);
|
|
},
|
|
!0
|
|
),
|
|
e.on("mousedown", r => {
|
|
const s = r.target;
|
|
if (s !== o && "HTML" !== s.nodeName && !n.isChildOf(s, o)) return;
|
|
if (
|
|
!((e, t, n) => {
|
|
const o = Cn(e.getBody()),
|
|
r = e.inline ? o : Cn(Rn(o).dom.documentElement),
|
|
s = ((e, t, n, o) => {
|
|
const r = (e => e.dom.getBoundingClientRect())(t);
|
|
return {
|
|
x: n - (e ? r.left + t.dom.clientLeft + Iw(t) : 0),
|
|
y: o - (e ? r.top + t.dom.clientTop + Mw(t) : 0)
|
|
};
|
|
})(e.inline, r, t, n);
|
|
return ((e, t, n) => {
|
|
const o = Dw(e),
|
|
r = Lw(e);
|
|
return t >= 0 && n >= 0 && t <= o && n <= r;
|
|
})(r, s.x, s.y);
|
|
})(e, r.clientX, r.clientY)
|
|
)
|
|
return;
|
|
g(), p();
|
|
const a = aT(e, s);
|
|
sT(a)
|
|
? (r.preventDefault(), Dx(e, a).each(f))
|
|
: jA(o, r.clientX, r.clientY).each(n => {
|
|
var o;
|
|
r.preventDefault(),
|
|
(o = d(1, n.node, n.position === LA.Before, !1)) && t.setRng(o),
|
|
tr(a) ? a.focus() : e.getBody().focus();
|
|
});
|
|
}),
|
|
e.on("keypress", e => {
|
|
Cf.modifierPressed(e) || (sT(t.getNode()) && e.preventDefault());
|
|
}),
|
|
e.on("GetSelectionRange", e => {
|
|
let t = e.range;
|
|
if (i) {
|
|
if (!i.parentNode) return void (i = null);
|
|
(t = t.cloneRange()), t.selectNode(i), (e.range = t);
|
|
}
|
|
}),
|
|
e.on("SetSelectionRange", e => {
|
|
e.range = m(e.range);
|
|
const t = f(e.range, e.forward);
|
|
t && (e.range = t);
|
|
}),
|
|
e.on("AfterSetSelectionRange", e => {
|
|
const t = e.range,
|
|
o = t.startContainer.parentElement;
|
|
var r;
|
|
u(t) || (er((r = o)) && "mcepastebin" === r.id) || p(),
|
|
(e => C(e) && n.hasClass(e, "mce-offscreen-selection"))(o) || g();
|
|
}),
|
|
(e => {
|
|
rT(e),
|
|
Wd(e) &&
|
|
(e => {
|
|
const t = t => {
|
|
if (!t.isDefaultPrevented()) {
|
|
const n = t.dataTransfer;
|
|
n &&
|
|
(H(n.types, "Files") || n.files.length > 0) &&
|
|
(t.preventDefault(), "drop" === t.type && $w(e, "Dropped file type is not supported"));
|
|
}
|
|
},
|
|
n = n => {
|
|
Lg(e, n.target) && t(n);
|
|
},
|
|
o = () => {
|
|
const o = fa.DOM,
|
|
r = e.dom,
|
|
s = document,
|
|
a = e.inline ? e.getBody() : e.getDoc(),
|
|
i = ["drop", "dragover"];
|
|
q(i, e => {
|
|
o.bind(s, e, n), r.bind(a, e, t);
|
|
}),
|
|
e.on("remove", () => {
|
|
q(i, e => {
|
|
o.unbind(s, e, n), r.unbind(a, e, t);
|
|
});
|
|
});
|
|
};
|
|
e.on("init", () => {
|
|
Og.setEditorTimeout(e, o, 0);
|
|
});
|
|
})(e);
|
|
})(e),
|
|
(e => {
|
|
const t = wa(() => {
|
|
if (!e.removed && e.getBody().contains(document.activeElement)) {
|
|
const t = e.selection.getRng();
|
|
if (t.collapsed) {
|
|
const n = Lx(e, t, !1);
|
|
e.selection.setRng(n);
|
|
}
|
|
}
|
|
}, 0);
|
|
e.on("focus", () => {
|
|
t.throttle();
|
|
}),
|
|
e.on("blur", () => {
|
|
t.cancel();
|
|
});
|
|
})(e),
|
|
(e => {
|
|
e.on("init", () => {
|
|
e.on("focusin", t => {
|
|
const n = t.target;
|
|
if (wr(n)) {
|
|
const t = gb(e.getBody(), n),
|
|
o = vr(t) ? t : n;
|
|
e.selection.getNode() !== o && Dx(e, o).each(t => e.selection.setRng(t));
|
|
}
|
|
});
|
|
});
|
|
})(e)),
|
|
{
|
|
showCaret: d,
|
|
showBlockCaretContainer: e => {
|
|
e.hasAttribute("data-mce-caret") && (mi(e), t.scrollIntoView(e));
|
|
},
|
|
hideFakeCaret: p,
|
|
destroy: () => {
|
|
r.destroy(), (i = null);
|
|
}
|
|
}
|
|
);
|
|
},
|
|
lT = (e, t) => {
|
|
let n = t;
|
|
for (let t = e.previousSibling; dr(t); t = t.previousSibling) n += t.data.length;
|
|
return n;
|
|
},
|
|
dT = (e, t, n, o, r) => {
|
|
if (dr(n) && (o < 0 || o > n.data.length)) return [];
|
|
const s = r && dr(n) ? [lT(n, o)] : [o];
|
|
let a = n;
|
|
for (; a !== t && a.parentNode; ) s.push(e.nodeIndex(a, r)), (a = a.parentNode);
|
|
return a === t ? s.reverse() : [];
|
|
},
|
|
cT = (e, t, n, o, r, s, a = !1) => ({start: dT(e, t, n, o, a), end: dT(e, t, r, s, a)}),
|
|
uT = (e, t) => {
|
|
const n = t.slice(),
|
|
o = n.pop();
|
|
return x(o)
|
|
? X(n, (e, t) => e.bind(e => I.from(e.childNodes[t])), I.some(e)).bind(e =>
|
|
dr(e) && (o < 0 || o > e.data.length) ? I.none() : I.some({node: e, offset: o})
|
|
)
|
|
: I.none();
|
|
},
|
|
mT = (e, t) =>
|
|
uT(e, t.start).bind(({node: n, offset: o}) =>
|
|
uT(e, t.end).map(({node: e, offset: t}) => {
|
|
const r = document.createRange();
|
|
return r.setStart(n, o), r.setEnd(e, t), r;
|
|
})
|
|
),
|
|
fT = (e, t, n) => {
|
|
if (t && e.isEmpty(t) && !n(t)) {
|
|
const o = t.parentNode;
|
|
e.remove(t, dr(t.firstChild) && Go(t.firstChild.data)), fT(e, o, n);
|
|
}
|
|
},
|
|
gT = (e, t, n, o = !0) => {
|
|
const r = t.startContainer.parentNode,
|
|
s = t.endContainer.parentNode;
|
|
t.deleteContents(),
|
|
o &&
|
|
!n(t.startContainer) &&
|
|
(dr(t.startContainer) && 0 === t.startContainer.data.length && e.remove(t.startContainer),
|
|
dr(t.endContainer) && 0 === t.endContainer.data.length && e.remove(t.endContainer),
|
|
fT(e, r, n),
|
|
r !== s && fT(e, s, n));
|
|
},
|
|
pT = (e, t) => I.from(e.dom.getParent(t.startContainer, e.dom.isBlock)),
|
|
hT = (e, t, n) => {
|
|
const o = e.dynamicPatternsLookup({text: n, block: t});
|
|
return {...e, blockPatterns: Rl(o).concat(e.blockPatterns), inlinePatterns: Al(o).concat(e.inlinePatterns)};
|
|
},
|
|
bT = (e, t, n, o) => {
|
|
const r = e.createRng();
|
|
return r.setStart(t, 0), r.setEnd(n, o), r.toString();
|
|
},
|
|
vT = (e, t) => e.create("span", {"data-mce-type": "bookmark", id: t}),
|
|
yT = (e, t) => {
|
|
const n = e.createRng();
|
|
return n.setStartAfter(t.start), n.setEndBefore(t.end), n;
|
|
},
|
|
CT = (e, t, n) => {
|
|
const o = mT(e.getRoot(), n).getOrDie("Unable to resolve path range"),
|
|
r = o.startContainer,
|
|
s = o.endContainer,
|
|
a = 0 === o.endOffset ? s : s.splitText(o.endOffset),
|
|
i = 0 === o.startOffset ? r : r.splitText(o.startOffset),
|
|
l = i.parentNode;
|
|
return {
|
|
prefix: t,
|
|
end: a.parentNode.insertBefore(vT(e, t + "-end"), a),
|
|
start: l.insertBefore(vT(e, t + "-start"), i)
|
|
};
|
|
},
|
|
wT = (e, t, n) => {
|
|
fT(e, e.get(t.prefix + "-end"), n), fT(e, e.get(t.prefix + "-start"), n);
|
|
},
|
|
xT = e => 0 === e.start.length,
|
|
ET = (e, t, n, o) => {
|
|
const r = t.start;
|
|
var s;
|
|
return V_(
|
|
e,
|
|
o.container,
|
|
o.offset,
|
|
((s = r),
|
|
(e, t) => {
|
|
const n = e.data.substring(0, t),
|
|
o = n.lastIndexOf(s.charAt(s.length - 1)),
|
|
r = n.lastIndexOf(s);
|
|
return -1 !== r ? r + s.length : -1 !== o ? o + 1 : -1;
|
|
}),
|
|
n
|
|
).bind(o => {
|
|
var s, a;
|
|
const i =
|
|
null !== (a = null === (s = n.textContent) || void 0 === s ? void 0 : s.indexOf(r)) && void 0 !== a ? a : -1;
|
|
if (-1 !== i && o.offset >= i + r.length) {
|
|
const t = e.createRng();
|
|
return t.setStart(o.container, o.offset - r.length), t.setEnd(o.container, o.offset), I.some(t);
|
|
}
|
|
{
|
|
const s = o.offset - r.length;
|
|
return H_(o.container, s, n)
|
|
.map(t => {
|
|
const n = e.createRng();
|
|
return n.setStart(t.container, t.offset), n.setEnd(o.container, o.offset), n;
|
|
})
|
|
.filter(e => e.toString() === r)
|
|
.orThunk(() => ET(e, t, n, F_(o.container, 0)));
|
|
}
|
|
});
|
|
},
|
|
kT = (e, t, n, o) => {
|
|
const r = e.dom,
|
|
s = r.getRoot(),
|
|
a = n.pattern,
|
|
i = n.position.container,
|
|
l = n.position.offset;
|
|
return H_(i, l - n.pattern.end.length, t).bind(d => {
|
|
const c = cT(r, s, d.container, d.offset, i, l, o);
|
|
if (xT(a)) return I.some({matches: [{pattern: a, startRng: c, endRng: c}], position: d});
|
|
{
|
|
const i = _T(e, n.remainingPatterns, d.container, d.offset, t, o),
|
|
l = i.getOr({matches: [], position: d}),
|
|
u = l.position,
|
|
m = ((e, t, n, o, r, s = !1) => {
|
|
if (0 === t.start.length && !s) {
|
|
const t = e.createRng();
|
|
return t.setStart(n, o), t.setEnd(n, o), I.some(t);
|
|
}
|
|
return j_(n, o, r).bind(n =>
|
|
ET(e, t, r, n).bind(e => {
|
|
var t;
|
|
if (s) {
|
|
if (e.endContainer === n.container && e.endOffset === n.offset) return I.none();
|
|
if (
|
|
0 === n.offset &&
|
|
(null === (t = e.endContainer.textContent) || void 0 === t ? void 0 : t.length) === e.endOffset
|
|
)
|
|
return I.none();
|
|
}
|
|
return I.some(e);
|
|
})
|
|
);
|
|
})(r, a, u.container, u.offset, t, i.isNone());
|
|
return m.map(e => {
|
|
const t = ((e, t, n, o = !1) => cT(e, t, n.startContainer, n.startOffset, n.endContainer, n.endOffset, o))(
|
|
r,
|
|
s,
|
|
e,
|
|
o
|
|
);
|
|
return {
|
|
matches: l.matches.concat([{pattern: a, startRng: t, endRng: c}]),
|
|
position: F_(e.startContainer, e.startOffset)
|
|
};
|
|
});
|
|
}
|
|
});
|
|
},
|
|
_T = (e, t, n, o, r, s) => {
|
|
const a = e.dom;
|
|
return j_(n, o, a.getRoot()).bind(i => {
|
|
const l = bT(a, r, n, o);
|
|
for (let a = 0; a < t.length; a++) {
|
|
const d = t[a];
|
|
if (!Ve(l, d.end)) continue;
|
|
const c = t.slice();
|
|
c.splice(a, 1);
|
|
const u = kT(e, r, {pattern: d, remainingPatterns: c, position: i}, s);
|
|
if (u.isNone() && o > 0) return _T(e, t, n, o - 1, r, s);
|
|
if (u.isSome()) return u;
|
|
}
|
|
return I.none();
|
|
});
|
|
},
|
|
ST = (e, t, n) => {
|
|
e.selection.setRng(n),
|
|
"inline-format" === t.type
|
|
? q(t.format, t => {
|
|
e.formatter.apply(t);
|
|
})
|
|
: e.execCommand(t.cmd, !1, t.value);
|
|
},
|
|
NT = (e, t, n, o, r, s) => {
|
|
var a;
|
|
return ((e, t) => {
|
|
const n = ne(e, e => $(t, t => e.pattern.start === t.pattern.start && e.pattern.end === t.pattern.end));
|
|
return e.length === t.length ? (n ? e : t) : e.length > t.length ? e : t;
|
|
})(
|
|
_T(e, r.inlinePatterns, n, o, t, s).fold(
|
|
() => [],
|
|
e => e.matches
|
|
),
|
|
_T(e, ((a = r.inlinePatterns), ae(a, (e, t) => t.end.length - e.end.length)), n, o, t, s).fold(
|
|
() => [],
|
|
e => e.matches
|
|
)
|
|
);
|
|
},
|
|
RT = (e, t) => {
|
|
if (0 === t.length) return;
|
|
const n = e.dom,
|
|
o = e.selection.getBookmark(),
|
|
r = ((e, t) => {
|
|
const n = La("mce_textpattern"),
|
|
o = G(
|
|
t,
|
|
(t, o) => {
|
|
const r = CT(e, n + `_end${t.length}`, o.endRng);
|
|
return t.concat([{...o, endMarker: r}]);
|
|
},
|
|
[]
|
|
);
|
|
return G(
|
|
o,
|
|
(t, r) => {
|
|
const s = o.length - t.length - 1,
|
|
a = xT(r.pattern) ? r.endMarker : CT(e, n + `_start${s}`, r.startRng);
|
|
return t.concat([{...r, startMarker: a}]);
|
|
},
|
|
[]
|
|
);
|
|
})(n, t);
|
|
q(r, t => {
|
|
const o = n.getParent(t.startMarker.start, n.isBlock),
|
|
r = e => e === o;
|
|
xT(t.pattern)
|
|
? ((e, t, n, o) => {
|
|
const r = yT(e.dom, n);
|
|
gT(e.dom, r, o), ST(e, t, r);
|
|
})(e, t.pattern, t.endMarker, r)
|
|
: ((e, t, n, o, r) => {
|
|
const s = e.dom,
|
|
a = yT(s, o),
|
|
i = yT(s, n);
|
|
gT(s, i, r), gT(s, a, r);
|
|
const l = {prefix: n.prefix, start: n.end, end: o.start},
|
|
d = yT(s, l);
|
|
ST(e, t, d);
|
|
})(e, t.pattern, t.startMarker, t.endMarker, r),
|
|
wT(n, t.endMarker, r),
|
|
wT(n, t.startMarker, r);
|
|
}),
|
|
e.selection.moveToBookmark(o);
|
|
},
|
|
AT = (e, t, n) =>
|
|
((e, t, n) => {
|
|
if (dr(e) && 0 >= e.length) return I.some(F_(e, 0));
|
|
{
|
|
const t = za(U_);
|
|
return I.from(t.forwards(e, 0, z_(e), n)).map(e => F_(e.container, 0));
|
|
}
|
|
})(t, 0, t).map(o => {
|
|
const r = o.container;
|
|
return (
|
|
$_(r, n.start.length, t).each(n => {
|
|
const o = e.createRng();
|
|
o.setStart(r, 0), o.setEnd(n.container, n.offset), gT(e, o, e => e === t);
|
|
}),
|
|
r
|
|
);
|
|
}),
|
|
TT = e => (t, n) => {
|
|
const o = t.dom,
|
|
r = n.pattern,
|
|
s = mT(o.getRoot(), n.range).getOrDie("Unable to resolve path range");
|
|
return (
|
|
pT(t, s).each(n => {
|
|
"block-format" === r.type
|
|
? ((e, t) => {
|
|
const n = t.get(e);
|
|
return p(n) && le(n).exists(e => ke(e, "block"));
|
|
})(r.format, t.formatter) &&
|
|
t.undoManager.transact(() => {
|
|
e(t.dom, n, r), t.formatter.apply(r.format);
|
|
})
|
|
: "block-command" === r.type &&
|
|
t.undoManager.transact(() => {
|
|
e(t.dom, n, r), t.execCommand(r.cmd, !1, r.value);
|
|
});
|
|
}),
|
|
!0
|
|
);
|
|
},
|
|
OT = e => (t, n) => {
|
|
const o = (e => ae(e, (e, t) => t.start.length - e.start.length))(t),
|
|
r = n.replace(Wo, " ");
|
|
return Q(o, t => e(t, n, r));
|
|
},
|
|
BT = (e, t) => (n, o, r, s, a) => {
|
|
var i;
|
|
void 0 === a && (a = null !== (i = o.textContent) && void 0 !== i ? i : "");
|
|
const l = n.dom,
|
|
d = Wl(n);
|
|
return l.is(o, d)
|
|
? e(r.blockPatterns, a)
|
|
.map(e =>
|
|
t && Dt.trim(a).length === e.start.length ? [] : [{pattern: e, range: cT(l, l.getRoot(), o, 0, o, 0, s)}]
|
|
)
|
|
.getOr([])
|
|
: [];
|
|
},
|
|
PT = TT((e, t, n) => {
|
|
AT(e, t, n).each(e => {
|
|
const t = Cn(e),
|
|
n = Ha(t);
|
|
/^\s[^\s]/.test(n) &&
|
|
((e, t) => {
|
|
ja.set(e, t);
|
|
})(t, n.slice(1));
|
|
});
|
|
}),
|
|
DT = OT((e, t, n) => 0 === t.indexOf(e.start) || 0 === n.indexOf(e.start)),
|
|
LT = BT(DT, !0),
|
|
MT = TT(AT),
|
|
IT = OT((e, t, n) => t === e.start || n === e.start),
|
|
FT = BT(IT, !1),
|
|
UT = (e, t, n) => {
|
|
for (let o = 0; o < e.length; o++) if (n(e[o], t)) return !0;
|
|
return !1;
|
|
},
|
|
zT = e => {
|
|
const t = [",", ".", ";", ":", "!", "?"],
|
|
n = [32],
|
|
o = () => {
|
|
return (t = pc(e)), (n = hc(e)), {inlinePatterns: Al(t), blockPatterns: Rl(t), dynamicPatternsLookup: n};
|
|
var t, n;
|
|
},
|
|
r = () => (e => e.options.isSet("text_patterns_lookup"))(e);
|
|
e.on(
|
|
"keydown",
|
|
t => {
|
|
if (13 === t.keyCode && !Cf.modifierPressed(t) && e.selection.isCollapsed()) {
|
|
const n = Tl(o(), "enter");
|
|
(n.inlinePatterns.length > 0 || n.blockPatterns.length > 0 || r()) &&
|
|
((e, t) =>
|
|
((e, t) => {
|
|
const n = e.selection.getRng();
|
|
return pT(e, n)
|
|
.map(o => {
|
|
var r;
|
|
const s = Math.max(0, n.startOffset),
|
|
a = hT(t, o, null !== (r = o.textContent) && void 0 !== r ? r : "");
|
|
return {inlineMatches: NT(e, o, n.startContainer, s, a, !0), blockMatches: LT(e, o, a, !0)};
|
|
})
|
|
.filter(({inlineMatches: e, blockMatches: t}) => t.length > 0 || e.length > 0);
|
|
})(e, t).fold(
|
|
L,
|
|
({inlineMatches: t, blockMatches: n}) => (
|
|
e.undoManager.add(),
|
|
e.undoManager.extra(
|
|
() => {
|
|
e.execCommand("mceInsertNewLine");
|
|
},
|
|
() => {
|
|
(e => {
|
|
e.insertContent(Ja, {preserve_zwsp: !0});
|
|
})(e),
|
|
RT(e, t),
|
|
((e, t) => {
|
|
if (0 === t.length) return;
|
|
const n = e.selection.getBookmark();
|
|
q(t, t => PT(e, t)), e.selection.moveToBookmark(n);
|
|
})(e, n);
|
|
const o = e.selection.getRng(),
|
|
r = j_(o.startContainer, o.startOffset, e.dom.getRoot());
|
|
e.execCommand("mceInsertNewLine"),
|
|
r.each(t => {
|
|
const n = t.container;
|
|
n.data.charAt(t.offset - 1) === qo &&
|
|
(n.deleteData(t.offset - 1, 1), fT(e.dom, n.parentNode, t => t === e.dom.getRoot()));
|
|
});
|
|
}
|
|
),
|
|
!0
|
|
)
|
|
))(e, n) &&
|
|
t.preventDefault();
|
|
}
|
|
},
|
|
!0
|
|
),
|
|
e.on(
|
|
"keydown",
|
|
t => {
|
|
if (32 === t.keyCode && e.selection.isCollapsed()) {
|
|
const n = Tl(o(), "space");
|
|
(n.blockPatterns.length > 0 || r()) &&
|
|
((e, t) =>
|
|
((e, t) => {
|
|
const n = e.selection.getRng();
|
|
return pT(e, n)
|
|
.map(o => {
|
|
const r = Math.max(0, n.startOffset),
|
|
s = bT(e.dom, o, n.startContainer, r),
|
|
a = hT(t, o, s);
|
|
return FT(e, o, a, !1, s);
|
|
})
|
|
.filter(e => e.length > 0);
|
|
})(e, t).fold(
|
|
L,
|
|
t => (
|
|
e.undoManager.transact(() => {
|
|
((e, t) => {
|
|
q(t, t => MT(e, t));
|
|
})(e, t);
|
|
}),
|
|
!0
|
|
)
|
|
))(e, n) &&
|
|
t.preventDefault();
|
|
}
|
|
},
|
|
!0
|
|
);
|
|
const s = () => {
|
|
if (e.selection.isCollapsed()) {
|
|
const t = Tl(o(), "space");
|
|
(t.inlinePatterns.length > 0 || r()) &&
|
|
((e, t) => {
|
|
const n = e.selection.getRng();
|
|
pT(e, n).map(o => {
|
|
const r = Math.max(0, n.startOffset - 1),
|
|
s = bT(e.dom, o, n.startContainer, r),
|
|
a = hT(t, o, s),
|
|
i = NT(e, o, n.startContainer, r, a, !1);
|
|
i.length > 0 &&
|
|
e.undoManager.transact(() => {
|
|
RT(e, i);
|
|
});
|
|
});
|
|
})(e, t);
|
|
}
|
|
};
|
|
e.on("keyup", e => {
|
|
UT(n, e, (e, t) => e === t.keyCode && !Cf.modifierPressed(t)) && s();
|
|
}),
|
|
e.on("keypress", n => {
|
|
UT(t, n, (e, t) => e.charCodeAt(0) === t.charCode) && Og.setEditorTimeout(e, s);
|
|
});
|
|
},
|
|
jT = e => {
|
|
const t = Dt.each,
|
|
n = Cf.BACKSPACE,
|
|
o = Cf.DELETE,
|
|
r = e.dom,
|
|
s = e.selection,
|
|
a = e.parser,
|
|
i = Tt.browser,
|
|
l = i.isFirefox(),
|
|
d = i.isChromium() || i.isSafari(),
|
|
c = Tt.deviceType.isiPhone() || Tt.deviceType.isiPad(),
|
|
u = Tt.os.isMacOS() || Tt.os.isiOS(),
|
|
m = (t, n) => {
|
|
try {
|
|
e.getDoc().execCommand(t, !1, String(n));
|
|
} catch (e) {}
|
|
},
|
|
f = e => e.isDefaultPrevented(),
|
|
g = () => {
|
|
e.shortcuts.add("meta+a", null, "SelectAll");
|
|
},
|
|
p = () => {
|
|
e.inline ||
|
|
r.bind(e.getDoc(), "mousedown mouseup", t => {
|
|
let n;
|
|
if (t.target === e.getDoc().documentElement)
|
|
if (((n = s.getRng()), e.getBody().focus(), "mousedown" === t.type)) {
|
|
if (ai(n.startContainer)) return;
|
|
s.placeCaretAt(t.clientX, t.clientY);
|
|
} else s.setRng(n);
|
|
});
|
|
},
|
|
h = () => {
|
|
Range.prototype.getClientRects ||
|
|
e.on("mousedown", t => {
|
|
if (!f(t) && "HTML" === t.target.nodeName) {
|
|
const t = e.getBody();
|
|
t.blur(),
|
|
Og.setEditorTimeout(e, () => {
|
|
t.focus();
|
|
});
|
|
}
|
|
});
|
|
},
|
|
b = () => {
|
|
const t = Gd(e);
|
|
e.on("click", n => {
|
|
const o = n.target;
|
|
/^(IMG|HR)$/.test(o.nodeName) &&
|
|
r.isEditable(o) &&
|
|
(n.preventDefault(), e.selection.select(o), e.nodeChanged()),
|
|
"A" === o.nodeName &&
|
|
r.hasClass(o, t) &&
|
|
0 === o.childNodes.length &&
|
|
r.isEditable(o.parentNode) &&
|
|
(n.preventDefault(), s.select(o));
|
|
});
|
|
},
|
|
v = () => {
|
|
e.on("keydown", e => {
|
|
if (!f(e) && e.keyCode === n && s.isCollapsed() && 0 === s.getRng().startOffset) {
|
|
const t = s.getNode().previousSibling;
|
|
if (t && t.nodeName && "table" === t.nodeName.toLowerCase()) return e.preventDefault(), !1;
|
|
}
|
|
return !0;
|
|
});
|
|
},
|
|
y = () => {
|
|
jd(e) ||
|
|
e.on("BeforeExecCommand mousedown", () => {
|
|
m("StyleWithCSS", !1), m("enableInlineTableEditing", !1), yd(e) || m("enableObjectResizing", !1);
|
|
});
|
|
},
|
|
C = () => {
|
|
e.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}");
|
|
},
|
|
w = () => {
|
|
e.inline ||
|
|
e.on("keydown", () => {
|
|
document.activeElement === document.body && e.getWin().focus();
|
|
});
|
|
},
|
|
x = () => {
|
|
e.inline ||
|
|
(e.contentStyles.push("body {min-height: 150px}"),
|
|
e.on("click", t => {
|
|
let n;
|
|
"HTML" === t.target.nodeName &&
|
|
((n = e.selection.getRng()),
|
|
e.getBody().focus(),
|
|
e.selection.setRng(n),
|
|
e.selection.normalize(),
|
|
e.nodeChanged());
|
|
}));
|
|
},
|
|
E = () => {
|
|
u &&
|
|
e.on("keydown", t => {
|
|
!Cf.metaKeyPressed(t) ||
|
|
t.shiftKey ||
|
|
(37 !== t.keyCode && 39 !== t.keyCode) ||
|
|
(t.preventDefault(),
|
|
e.selection.getSel().modify("move", 37 === t.keyCode ? "backward" : "forward", "lineboundary"));
|
|
});
|
|
},
|
|
_ = () => {
|
|
e.on("click", e => {
|
|
let t = e.target;
|
|
do {
|
|
if ("A" === t.tagName) return void e.preventDefault();
|
|
} while ((t = t.parentNode));
|
|
}),
|
|
e.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}");
|
|
},
|
|
S = () => {
|
|
e.on("init", () => {
|
|
e.dom.bind(e.getBody(), "submit", e => {
|
|
e.preventDefault();
|
|
});
|
|
});
|
|
},
|
|
N = k;
|
|
return (
|
|
rw(e)
|
|
? (d && (p(), b(), S(), g(), c && (w(), x(), _())), l && (h(), y(), C(), E()))
|
|
: (e.on("keydown", t => {
|
|
if (f(t) || t.keyCode !== Cf.BACKSPACE) return;
|
|
let n = s.getRng();
|
|
const o = n.startContainer,
|
|
a = n.startOffset,
|
|
i = r.getRoot();
|
|
let l = o;
|
|
if (n.collapsed && 0 === a) {
|
|
for (; l.parentNode && l.parentNode.firstChild === l && l.parentNode !== i; ) l = l.parentNode;
|
|
"BLOCKQUOTE" === l.nodeName &&
|
|
(e.formatter.toggle("blockquote", void 0, l),
|
|
(n = r.createRng()),
|
|
n.setStart(o, 0),
|
|
n.setEnd(o, 0),
|
|
s.setRng(n));
|
|
}
|
|
}),
|
|
(() => {
|
|
const t = e => {
|
|
const t = r.create("body"),
|
|
n = e.cloneContents();
|
|
return t.appendChild(n), s.serializer.serialize(t, {format: "html"});
|
|
};
|
|
e.on("keydown", s => {
|
|
const a = s.keyCode;
|
|
if (!f(s) && (a === o || a === n) && e.selection.isEditable()) {
|
|
const n = e.selection.isCollapsed(),
|
|
o = e.getBody();
|
|
if (n && !Ar(e.schema, o)) return;
|
|
if (
|
|
!n &&
|
|
!(n => {
|
|
const o = t(n),
|
|
s = r.createRng();
|
|
return s.selectNode(e.getBody()), o === t(s);
|
|
})(e.selection.getRng())
|
|
)
|
|
return;
|
|
s.preventDefault(),
|
|
e.setContent(""),
|
|
o.firstChild && r.isBlock(o.firstChild)
|
|
? e.selection.setCursorLocation(o.firstChild, 0)
|
|
: e.selection.setCursorLocation(o, 0),
|
|
e.nodeChanged();
|
|
}
|
|
});
|
|
})(),
|
|
Tt.windowsPhone ||
|
|
e.on(
|
|
"keyup focusin mouseup",
|
|
t => {
|
|
Cf.modifierPressed(t) ||
|
|
(e => {
|
|
const t = e.getBody(),
|
|
n = e.selection.getRng();
|
|
return (
|
|
n.startContainer === n.endContainer &&
|
|
n.startContainer === t &&
|
|
0 === n.startOffset &&
|
|
n.endOffset === t.childNodes.length
|
|
);
|
|
})(e) ||
|
|
s.normalize();
|
|
},
|
|
!0
|
|
),
|
|
d &&
|
|
(p(),
|
|
b(),
|
|
e.on("init", () => {
|
|
m("DefaultParagraphSeparator", Wl(e));
|
|
}),
|
|
S(),
|
|
v(),
|
|
a.addNodeFilter("br", e => {
|
|
let t = e.length;
|
|
for (; t--; ) "Apple-interchange-newline" === e[t].attr("class") && e[t].remove();
|
|
}),
|
|
c ? (w(), x(), _()) : g()),
|
|
l &&
|
|
(e.on("keydown", t => {
|
|
if (!f(t) && t.keyCode === n) {
|
|
if (!e.getBody().getElementsByTagName("hr").length) return;
|
|
if (s.isCollapsed() && 0 === s.getRng().startOffset) {
|
|
const e = s.getNode(),
|
|
n = e.previousSibling;
|
|
if ("HR" === e.nodeName) return r.remove(e), void t.preventDefault();
|
|
n && n.nodeName && "hr" === n.nodeName.toLowerCase() && (r.remove(n), t.preventDefault());
|
|
}
|
|
}
|
|
}),
|
|
h(),
|
|
(() => {
|
|
const n = () => {
|
|
const n = r.getAttribs(s.getStart().cloneNode(!1));
|
|
return () => {
|
|
const o = s.getStart();
|
|
o !== e.getBody() &&
|
|
(r.setAttrib(o, "style", null),
|
|
t(n, e => {
|
|
o.setAttributeNode(e.cloneNode(!0));
|
|
}));
|
|
};
|
|
},
|
|
o = () =>
|
|
!s.isCollapsed() && r.getParent(s.getStart(), r.isBlock) !== r.getParent(s.getEnd(), r.isBlock);
|
|
e.on("keypress", t => {
|
|
let r;
|
|
return !(
|
|
!(f(t) || (8 !== t.keyCode && 46 !== t.keyCode)) &&
|
|
o() &&
|
|
((r = n()), e.getDoc().execCommand("delete", !1), r(), t.preventDefault(), 1)
|
|
);
|
|
}),
|
|
r.bind(e.getDoc(), "cut", t => {
|
|
if (!f(t) && o()) {
|
|
const t = n();
|
|
Og.setEditorTimeout(e, () => {
|
|
t();
|
|
});
|
|
}
|
|
});
|
|
})(),
|
|
y(),
|
|
e.on("SetContent ExecCommand", e => {
|
|
("setcontent" !== e.type && "mceInsertLink" !== e.command) ||
|
|
t(r.select("a:not([data-mce-block])"), e => {
|
|
var t;
|
|
let n = e.parentNode;
|
|
const o = r.getRoot();
|
|
if ((null == n ? void 0 : n.lastChild) === e) {
|
|
for (; n && !r.isBlock(n); ) {
|
|
if ((null === (t = n.parentNode) || void 0 === t ? void 0 : t.lastChild) !== n || n === o)
|
|
return;
|
|
n = n.parentNode;
|
|
}
|
|
r.add(n, "br", {"data-mce-bogus": 1});
|
|
}
|
|
});
|
|
}),
|
|
C(),
|
|
E(),
|
|
v())),
|
|
{
|
|
refreshContentEditable: N,
|
|
isHidden: () => {
|
|
if (!l || e.removed) return !1;
|
|
const t = e.selection.getSel();
|
|
return !t || !t.rangeCount || 0 === t.rangeCount;
|
|
}
|
|
}
|
|
);
|
|
},
|
|
HT = fa.DOM,
|
|
$T = e => (e.inline ? e.getElement().nodeName.toLowerCase() : void 0),
|
|
VT = e => Ce(e, e => !1 === v(e)),
|
|
qT = e => {
|
|
const t = e.options.get,
|
|
n = e.editorUpload.blobCache;
|
|
return VT({
|
|
allow_conditional_comments: t("allow_conditional_comments"),
|
|
allow_html_data_urls: t("allow_html_data_urls"),
|
|
allow_svg_data_urls: t("allow_svg_data_urls"),
|
|
allow_html_in_named_anchor: t("allow_html_in_named_anchor"),
|
|
allow_script_urls: t("allow_script_urls"),
|
|
allow_unsafe_link_target: t("allow_unsafe_link_target"),
|
|
convert_unsafe_embeds: t("convert_unsafe_embeds"),
|
|
convert_fonts_to_spans: t("convert_fonts_to_spans"),
|
|
fix_list_elements: t("fix_list_elements"),
|
|
font_size_legacy_values: t("font_size_legacy_values"),
|
|
forced_root_block: t("forced_root_block"),
|
|
forced_root_block_attrs: t("forced_root_block_attrs"),
|
|
preserve_cdata: t("preserve_cdata"),
|
|
inline_styles: t("inline_styles"),
|
|
root_name: $T(e),
|
|
sandbox_iframes: t("sandbox_iframes"),
|
|
sandbox_iframes_exclusions: Ac(e),
|
|
sanitize: t("xss_sanitization"),
|
|
validate: !0,
|
|
blob_cache: n,
|
|
document: e.getDoc()
|
|
});
|
|
},
|
|
WT = e => {
|
|
const t = e.options.get;
|
|
return VT({
|
|
custom_elements: t("custom_elements"),
|
|
extended_valid_elements: t("extended_valid_elements"),
|
|
invalid_elements: t("invalid_elements"),
|
|
invalid_styles: t("invalid_styles"),
|
|
schema: t("schema"),
|
|
valid_children: t("valid_children"),
|
|
valid_classes: t("valid_classes"),
|
|
valid_elements: t("valid_elements"),
|
|
valid_styles: t("valid_styles"),
|
|
verify_html: t("verify_html"),
|
|
padd_empty_block_inline_children: t("format_empty_lines")
|
|
});
|
|
},
|
|
KT = e => (e.inline ? e.ui.styleSheetLoader : e.dom.styleSheetLoader),
|
|
YT = e => {
|
|
const t = KT(e),
|
|
n = hd(e),
|
|
o = e.contentCSS,
|
|
r = () => {
|
|
t.unloadAll(o), e.inline || e.ui.styleSheetLoader.unloadAll(n);
|
|
},
|
|
s = () => {
|
|
e.removed ? r() : e.on("remove", r);
|
|
};
|
|
if (e.contentStyles.length > 0) {
|
|
let t = "";
|
|
Dt.each(e.contentStyles, e => {
|
|
t += e + "\r\n";
|
|
}),
|
|
e.dom.addStyle(t);
|
|
}
|
|
const a = Promise.all(
|
|
((e, t, n) => {
|
|
const {pass: o, fail: r} = K(t, e => tinymce.Resource.has(Kw(e))),
|
|
s = o.map(t => {
|
|
const n = tinymce.Resource.get(Kw(t));
|
|
return m(n) ? Promise.resolve(KT(e).loadRawCss(t, n)) : Promise.resolve();
|
|
}),
|
|
a = [...s, KT(e).loadAll(r)];
|
|
return e.inline ? a : a.concat([e.ui.styleSheetLoader.loadAll(n)]);
|
|
})(e, o, n)
|
|
)
|
|
.then(s)
|
|
.catch(s),
|
|
i = pd(e);
|
|
return (
|
|
i &&
|
|
((e, t) => {
|
|
const n = Cn(e.getBody()),
|
|
o = Wn(qn(n)),
|
|
r = vn("style");
|
|
Jt(r, "type", "text/css"),
|
|
yo(r, yn(t)),
|
|
yo(o, r),
|
|
e.on("remove", () => {
|
|
Eo(r);
|
|
});
|
|
})(e, i),
|
|
a
|
|
);
|
|
},
|
|
GT = e => {
|
|
!0 !== e.removed &&
|
|
((e => {
|
|
rw(e) || e.load({initial: !0, format: "html"}), (e.startContent = e.getContent({format: "raw"}));
|
|
})(e),
|
|
(e => {
|
|
e.bindPendingEventDelegates(),
|
|
(e.initialized = !0),
|
|
(e => {
|
|
e.dispatch("Init");
|
|
})(e),
|
|
e.focus(!0),
|
|
(e => {
|
|
const t = e.dom.getRoot();
|
|
e.inline ||
|
|
(vm(e) && e.selection.getStart(!0) !== t) ||
|
|
$u(t).each(t => {
|
|
const n = t.getNode(),
|
|
o = ar(n) ? $u(n).getOr(t) : t;
|
|
e.selection.setRng(o.toRange());
|
|
});
|
|
})(e),
|
|
e.nodeChanged({initial: !0});
|
|
const t = Qd(e);
|
|
w(t) && t.call(e, e),
|
|
(e => {
|
|
const t = ec(e);
|
|
t &&
|
|
Og.setEditorTimeout(
|
|
e,
|
|
() => {
|
|
let n;
|
|
(n = !0 === t ? e : e.editorManager.get(t)),
|
|
n && !n.destroyed && (n.focus(), n.selection.scrollIntoView());
|
|
},
|
|
100
|
|
);
|
|
})(e);
|
|
})(e));
|
|
},
|
|
XT = e => {
|
|
const t = e.getElement();
|
|
let n = e.getDoc();
|
|
e.inline &&
|
|
(HT.addClass(t, "mce-content-body"),
|
|
(e.contentDocument = n = document),
|
|
(e.contentWindow = window),
|
|
(e.bodyElement = t),
|
|
(e.contentAreaContainer = t));
|
|
const o = e.getBody();
|
|
(o.disabled = !0),
|
|
(e.readonly = jd(e)),
|
|
(e._editableRoot = Hd(e)),
|
|
!e.readonly &&
|
|
e.hasEditableRoot() &&
|
|
(e.inline && "static" === HT.getStyle(o, "position", !0) && (o.style.position = "relative"),
|
|
(o.contentEditable = "true")),
|
|
(o.disabled = !1),
|
|
(e.editorUpload = tx(e)),
|
|
(e.schema = Fs(WT(e))),
|
|
(e.dom = fa(n, {
|
|
keep_values: !0,
|
|
url_converter: e.convertURL,
|
|
url_converter_scope: e,
|
|
update_styles: !0,
|
|
root_element: e.inline ? e.getBody() : null,
|
|
collect: e.inline,
|
|
schema: e.schema,
|
|
contentCssCors: ld(e),
|
|
referrerPolicy: dd(e),
|
|
onSetAttrib: t => {
|
|
e.dispatch("SetAttrib", t);
|
|
}
|
|
})),
|
|
(e.parser = (e => {
|
|
const t = kC(qT(e), e.schema);
|
|
return (
|
|
t.addAttributeFilter("src,href,style,tabindex", (t, n) => {
|
|
const o = e.dom,
|
|
r = "data-mce-" + n;
|
|
let s = t.length;
|
|
for (; s--; ) {
|
|
const a = t[s];
|
|
let i = a.attr(n);
|
|
if (i && !a.attr(r)) {
|
|
if (0 === i.indexOf("data:") || 0 === i.indexOf("blob:")) continue;
|
|
"style" === n
|
|
? ((i = o.serializeStyle(o.parseStyle(i), a.name)),
|
|
i.length || (i = null),
|
|
a.attr(r, i),
|
|
a.attr(n, i))
|
|
: "tabindex" === n
|
|
? (a.attr(r, i), a.attr(n, null))
|
|
: a.attr(r, e.convertURL(i, n, a.name));
|
|
}
|
|
}
|
|
}),
|
|
t.addNodeFilter("script", e => {
|
|
let t = e.length;
|
|
for (; t--; ) {
|
|
const n = e[t],
|
|
o = n.attr("type") || "no/type";
|
|
0 !== o.indexOf("mce-") && n.attr("type", "mce-" + o);
|
|
}
|
|
}),
|
|
Cc(e) &&
|
|
t.addNodeFilter("#cdata", t => {
|
|
var n;
|
|
let o = t.length;
|
|
for (; o--; ) {
|
|
const r = t[o];
|
|
(r.type = 8),
|
|
(r.name = "#comment"),
|
|
(r.value = "[CDATA[" + e.dom.encode(null !== (n = r.value) && void 0 !== n ? n : "") + "]]");
|
|
}
|
|
}),
|
|
t.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div", t => {
|
|
let n = t.length;
|
|
const o = e.schema.getNonEmptyElements();
|
|
for (; n--; ) {
|
|
const e = t[n];
|
|
e.isEmpty(o) && 0 === e.getAll("br").length && e.append(new ep("br", 1));
|
|
}
|
|
}),
|
|
t
|
|
);
|
|
})(e)),
|
|
(e.serializer = pw(
|
|
(e => {
|
|
const t = e.options.get;
|
|
return {
|
|
...qT(e),
|
|
...WT(e),
|
|
...VT({
|
|
remove_trailing_brs: t("remove_trailing_brs"),
|
|
pad_empty_with_br: t("pad_empty_with_br"),
|
|
url_converter: t("url_converter"),
|
|
url_converter_scope: t("url_converter_scope"),
|
|
element_format: t("element_format"),
|
|
entities: t("entities"),
|
|
entity_encoding: t("entity_encoding"),
|
|
indent: t("indent"),
|
|
indent_after: t("indent_after"),
|
|
indent_before: t("indent_before")
|
|
})
|
|
};
|
|
})(e),
|
|
e
|
|
)),
|
|
(e.selection = mw(e.dom, e.getWin(), e.serializer, e)),
|
|
(e.annotator = cf(e)),
|
|
(e.formatter = mx(e)),
|
|
(e.undoManager = gx(e)),
|
|
(e._nodeChangeDispatcher = new kR(e)),
|
|
(e._selectionOverrides = iT(e)),
|
|
(e => {
|
|
const t = Dr(),
|
|
n = Br(!1),
|
|
o = xa(t => {
|
|
e.dispatch("longpress", {...t, type: "longpress"}), n.set(!0);
|
|
}, 400);
|
|
e.on(
|
|
"touchstart",
|
|
e => {
|
|
zk(e).each(r => {
|
|
o.cancel();
|
|
const s = {x: r.clientX, y: r.clientY, target: e.target};
|
|
o.throttle(e), n.set(!1), t.set(s);
|
|
});
|
|
},
|
|
!0
|
|
),
|
|
e.on(
|
|
"touchmove",
|
|
r => {
|
|
o.cancel(),
|
|
zk(r).each(o => {
|
|
t.on(r => {
|
|
((e, t) => {
|
|
const n = Math.abs(e.clientX - t.x),
|
|
o = Math.abs(e.clientY - t.y);
|
|
return n > 5 || o > 5;
|
|
})(o, r) && (t.clear(), n.set(!1), e.dispatch("longpresscancel"));
|
|
});
|
|
});
|
|
},
|
|
!0
|
|
),
|
|
e.on(
|
|
"touchend touchcancel",
|
|
r => {
|
|
o.cancel(),
|
|
"touchcancel" !== r.type &&
|
|
t
|
|
.get()
|
|
.filter(e => e.target.isEqualNode(r.target))
|
|
.each(() => {
|
|
n.get() ? r.preventDefault() : e.dispatch("tap", {...r, type: "tap"});
|
|
});
|
|
},
|
|
!0
|
|
);
|
|
})(e),
|
|
(e => {
|
|
(e => {
|
|
e.on("click", t => {
|
|
e.dom.getParent(t.target, "details") && t.preventDefault();
|
|
});
|
|
})(e),
|
|
(e => {
|
|
e.parser.addNodeFilter("details", t => {
|
|
const n = Sc(e);
|
|
q(t, e => {
|
|
"expanded" === n ? e.attr("open", "open") : "collapsed" === n && e.attr("open", null);
|
|
});
|
|
}),
|
|
e.serializer.addNodeFilter("details", t => {
|
|
const n = Nc(e);
|
|
q(t, e => {
|
|
"expanded" === n ? e.attr("open", "open") : "collapsed" === n && e.attr("open", null);
|
|
});
|
|
});
|
|
})(e);
|
|
})(e),
|
|
(e => {
|
|
const t = "contenteditable",
|
|
n = " " + Dt.trim(vc(e)) + " ",
|
|
o = " " + Dt.trim(bc(e)) + " ",
|
|
r = Kk(n),
|
|
s = Kk(o),
|
|
a = yc(e);
|
|
a.length > 0 &&
|
|
e.on("BeforeSetContent", t => {
|
|
((e, t, n) => {
|
|
let o = t.length,
|
|
r = n.content;
|
|
if ("raw" !== n.format) {
|
|
for (; o--; ) r = r.replace(t[o], Yk(e, r, bc(e)));
|
|
n.content = r;
|
|
}
|
|
})(e, a, t);
|
|
}),
|
|
e.parser.addAttributeFilter("class", e => {
|
|
let n = e.length;
|
|
for (; n--; ) {
|
|
const o = e[n];
|
|
r(o) ? o.attr(t, "true") : s(o) && o.attr(t, "false");
|
|
}
|
|
}),
|
|
e.serializer.addAttributeFilter(t, e => {
|
|
let n = e.length;
|
|
for (; n--; ) {
|
|
const o = e[n];
|
|
(r(o) || s(o)) &&
|
|
(a.length > 0 && o.attr("data-mce-content")
|
|
? ((o.name = "#text"), (o.type = 3), (o.raw = !0), (o.value = o.attr("data-mce-content")))
|
|
: o.attr(t, null));
|
|
}
|
|
});
|
|
})(e),
|
|
rw(e) ||
|
|
((e => {
|
|
e.on("mousedown", t => {
|
|
t.detail >= 3 && (t.preventDefault(), DA(e));
|
|
});
|
|
})(e),
|
|
(e => {
|
|
zT(e);
|
|
})(e));
|
|
const r = ER(e);
|
|
Uk(e, r),
|
|
(e => {
|
|
e.on("NodeChange", T(qk, e));
|
|
})(e),
|
|
(e => {
|
|
var t;
|
|
const n = e.dom,
|
|
o = Wl(e),
|
|
r = null !== (t = wd(e)) && void 0 !== t ? t : "",
|
|
s = (t, a) => {
|
|
if (
|
|
(e => {
|
|
if (bx(e)) {
|
|
const t = e.keyCode;
|
|
return !vx(e) && (Cf.metaKeyPressed(e) || e.altKey || (t >= 112 && t <= 123) || H(px, t));
|
|
}
|
|
return !1;
|
|
})(t)
|
|
)
|
|
return;
|
|
const i = e.getBody(),
|
|
l =
|
|
!(e => bx(e) && !(vx(e) || ("keyup" === e.type && 229 === e.keyCode)))(t) &&
|
|
((e, t, n) => {
|
|
if (e.isEmpty(t, void 0, {skipBogus: !1, includeZwsp: !0})) {
|
|
const o = t.firstElementChild;
|
|
return (
|
|
!o ||
|
|
(!e.getStyle(t.firstElementChild, "padding-left") &&
|
|
!e.getStyle(t.firstElementChild, "padding-right") &&
|
|
n === o.nodeName.toLowerCase())
|
|
);
|
|
}
|
|
return !1;
|
|
})(n, i, o);
|
|
(("" !== n.getAttrib(i, hx)) !== l || a) &&
|
|
(n.setAttrib(i, hx, l ? r : null),
|
|
((e, t) => {
|
|
e.dispatch("PlaceholderToggle", {state: t});
|
|
})(e, l),
|
|
e.on(l ? "keydown" : "keyup", s),
|
|
e.off(l ? "keyup" : "keydown", s));
|
|
};
|
|
Ge(r) &&
|
|
e.on("init", t => {
|
|
s(t, !0),
|
|
e.on("change SetContent ExecCommand", s),
|
|
e.on("paste", t => Og.setEditorTimeout(e, () => s(t)));
|
|
});
|
|
})(e),
|
|
NA(e);
|
|
const s = (e => {
|
|
const t = e;
|
|
return (e => Ee(e.plugins, "rtc").bind(e => I.from(e.setup)))(e).fold(
|
|
() => ((t.rtcInstance = ow(e)), I.none()),
|
|
e => (
|
|
(t.rtcInstance = (() => {
|
|
const e = N(null),
|
|
t = N("");
|
|
return {
|
|
init: {bindEvents: k},
|
|
undoManager: {
|
|
beforeChange: k,
|
|
add: e,
|
|
undo: e,
|
|
redo: e,
|
|
clear: k,
|
|
reset: k,
|
|
hasUndo: L,
|
|
hasRedo: L,
|
|
transact: e,
|
|
ignore: k,
|
|
extra: k
|
|
},
|
|
formatter: {
|
|
match: L,
|
|
matchAll: N([]),
|
|
matchNode: N(void 0),
|
|
canApply: L,
|
|
closest: t,
|
|
apply: k,
|
|
remove: k,
|
|
toggle: k,
|
|
formatChanged: N({unbind: k})
|
|
},
|
|
editor: {getContent: t, setContent: N({content: "", html: ""}), insertContent: N(""), addVisual: k},
|
|
selection: {getContent: t},
|
|
autocompleter: {addDecoration: k, removeDecoration: k},
|
|
raw: {getModel: N(I.none())}
|
|
};
|
|
})()),
|
|
I.some(() =>
|
|
e().then(
|
|
e => (
|
|
(t.rtcInstance = (e => {
|
|
const t = e => (f(e) ? e : {}),
|
|
{init: n, undoManager: o, formatter: r, editor: s, selection: a, autocompleter: i, raw: l} = e;
|
|
return {
|
|
init: {bindEvents: n.bindEvents},
|
|
undoManager: {
|
|
beforeChange: o.beforeChange,
|
|
add: o.add,
|
|
undo: o.undo,
|
|
redo: o.redo,
|
|
clear: o.clear,
|
|
reset: o.reset,
|
|
hasUndo: o.hasUndo,
|
|
hasRedo: o.hasRedo,
|
|
transact: (e, t, n) => o.transact(n),
|
|
ignore: (e, t) => o.ignore(t),
|
|
extra: (e, t, n, r) => o.extra(n, r)
|
|
},
|
|
formatter: {
|
|
match: (e, n, o, s) => r.match(e, t(n), s),
|
|
matchAll: r.matchAll,
|
|
matchNode: r.matchNode,
|
|
canApply: e => r.canApply(e),
|
|
closest: e => r.closest(e),
|
|
apply: (e, n, o) => r.apply(e, t(n)),
|
|
remove: (e, n, o, s) => r.remove(e, t(n)),
|
|
toggle: (e, n, o) => r.toggle(e, t(n)),
|
|
formatChanged: (e, t, n, o, s) => r.formatChanged(t, n, o, s)
|
|
},
|
|
editor: {
|
|
getContent: e => s.getContent(e),
|
|
setContent: (e, t) => ({content: s.setContent(e, t), html: ""}),
|
|
insertContent: (e, t) => (s.insertContent(e), ""),
|
|
addVisual: s.addVisual
|
|
},
|
|
selection: {getContent: (e, t) => a.getContent(t)},
|
|
autocompleter: {addDecoration: i.addDecoration, removeDecoration: i.removeDecoration},
|
|
raw: {getModel: () => I.some(l.getRawModel())}
|
|
};
|
|
})(e)),
|
|
e.rtc.isRemote
|
|
)
|
|
)
|
|
)
|
|
)
|
|
);
|
|
})(e);
|
|
(e => {
|
|
const t = e.getDoc(),
|
|
n = e.getBody();
|
|
(e => {
|
|
e.dispatch("PreInit");
|
|
})(e),
|
|
tc(e) || ((t.body.spellcheck = !1), HT.setAttrib(n, "spellcheck", "false")),
|
|
(e.quirks = jT(e)),
|
|
(e => {
|
|
e.dispatch("PostRender");
|
|
})(e);
|
|
const o = bd(e);
|
|
void 0 !== o && (n.dir = o);
|
|
const r = nc(e);
|
|
r &&
|
|
e.on("BeforeSetContent", e => {
|
|
Dt.each(r, t => {
|
|
e.content = e.content.replace(t, e => "\x3c!--mce:protected " + escape(e) + "--\x3e");
|
|
});
|
|
}),
|
|
e.on("SetContent", () => {
|
|
e.addVisual(e.getBody());
|
|
}),
|
|
e.on("compositionstart compositionend", t => {
|
|
e.composing = "compositionstart" === t.type;
|
|
});
|
|
})(e),
|
|
(e => {
|
|
const t = Oc(e);
|
|
m(Bc(e)) ||
|
|
(!v(t) &&
|
|
"INVALID" !==
|
|
(e =>
|
|
(e => "gpl" === e.toLowerCase())(e) || (e => e.length >= 64 && e.length <= 255)(e)
|
|
? "VALID"
|
|
: "INVALID")(t)) ||
|
|
console.warn(
|
|
"TinyMCE is running in evaluation mode. Provide a valid license key or add license_key: 'gpl' to the init config to agree to the open source license terms. Read more at https://www.tiny.cloud/license-key/"
|
|
);
|
|
})(e),
|
|
s.fold(
|
|
() => {
|
|
const t = (e => {
|
|
let t = !1;
|
|
const n = setTimeout(() => {
|
|
t || e.setProgressState(!0);
|
|
}, 500);
|
|
return () => {
|
|
clearTimeout(n), (t = !0), e.setProgressState(!1);
|
|
};
|
|
})(e);
|
|
YT(e).then(() => {
|
|
GT(e), t();
|
|
});
|
|
},
|
|
t => {
|
|
e.setProgressState(!0),
|
|
YT(e).then(() => {
|
|
t().then(
|
|
t => {
|
|
e.setProgressState(!1), GT(e), iw(e);
|
|
},
|
|
t => {
|
|
e.notificationManager.open({type: "error", text: String(t)}), GT(e), iw(e);
|
|
}
|
|
);
|
|
});
|
|
}
|
|
);
|
|
},
|
|
ZT = M,
|
|
QT = fa.DOM,
|
|
JT = fa.DOM,
|
|
eO = (e, t) => ({editorContainer: e, iframeContainer: t, api: {}}),
|
|
tO = e => {
|
|
const t = e.getElement();
|
|
return e.inline
|
|
? eO(null)
|
|
: (e => {
|
|
const t = JT.create("div");
|
|
return JT.insertAfter(t, e), eO(t, t);
|
|
})(t);
|
|
},
|
|
nO = async e => {
|
|
e.dispatch("ScriptsLoaded"),
|
|
(e => {
|
|
const t = Dt.trim(nd(e)),
|
|
n = e.ui.registry.getAll().icons,
|
|
o = {...Tw.get("default").icons, ...Tw.get(t).icons};
|
|
pe(o, (t, o) => {
|
|
ke(n, o) || e.ui.registry.addIcon(o, t);
|
|
});
|
|
})(e),
|
|
(e => {
|
|
const t = kd(e);
|
|
if (m(t)) {
|
|
const n = zw.get(t);
|
|
(e.theme = n(e, zw.urls[t]) || {}),
|
|
w(e.theme.init) && e.theme.init(e, zw.urls[t] || e.documentBaseUrl.replace(/\/$/, ""));
|
|
} else e.theme = {};
|
|
})(e),
|
|
(e => {
|
|
const t = Sd(e),
|
|
n = Ow.get(t);
|
|
e.model = n(e, Ow.urls[t]);
|
|
})(e),
|
|
(e => {
|
|
const t = [];
|
|
q(Vd(e), n => {
|
|
((e, t, n) => {
|
|
const o = Uw.get(n),
|
|
r = Uw.urls[n] || e.documentBaseUrl.replace(/\/$/, "");
|
|
if (((n = Dt.trim(n)), o && -1 === Dt.inArray(t, n))) {
|
|
if (e.plugins[n]) return;
|
|
try {
|
|
const s = o(e, r) || {};
|
|
(e.plugins[n] = s), w(s.init) && (s.init(e, r), t.push(n));
|
|
} catch (t) {
|
|
((e, t, n) => {
|
|
const o = ya.translate(["Failed to initialize plugin: {0}", t]);
|
|
ff(e, "PluginLoadError", {message: o}), Ww(o, n), $w(e, o);
|
|
})(e, n, t);
|
|
}
|
|
}
|
|
})(e, t, (e => e.replace(/^\-/, ""))(n));
|
|
});
|
|
})(e);
|
|
const t = await (e => {
|
|
const t = e.getElement();
|
|
return (
|
|
(e.orgDisplay = t.style.display),
|
|
m(kd(e))
|
|
? (e => {
|
|
const t = e.theme.renderUI;
|
|
return t ? t() : tO(e);
|
|
})(e)
|
|
: w(kd(e))
|
|
? (e => {
|
|
const t = e.getElement(),
|
|
n = kd(e)(e, t);
|
|
return (
|
|
n.editorContainer.nodeType && (n.editorContainer.id = n.editorContainer.id || e.id + "_parent"),
|
|
n.iframeContainer &&
|
|
n.iframeContainer.nodeType &&
|
|
(n.iframeContainer.id = n.iframeContainer.id || e.id + "_iframecontainer"),
|
|
(n.height = n.iframeHeight ? n.iframeHeight : t.offsetHeight),
|
|
n
|
|
);
|
|
})(e)
|
|
: tO(e)
|
|
);
|
|
})(e);
|
|
((e, t) => {
|
|
const n = {
|
|
show: I.from(t.show).getOr(k),
|
|
hide: I.from(t.hide).getOr(k),
|
|
isEnabled: I.from(t.isEnabled).getOr(M),
|
|
setEnabled: n => {
|
|
e.mode.isReadOnly() || I.from(t.setEnabled).each(e => e(n));
|
|
}
|
|
};
|
|
e.ui = {...e.ui, ...n};
|
|
})(e, I.from(t.api).getOr({})),
|
|
(e.editorContainer = t.editorContainer),
|
|
(e => {
|
|
e.contentCSS = e.contentCSS.concat((e => Yw(e, gd(e)))(e), (e => Yw(e, hd(e)))(e));
|
|
})(e),
|
|
e.inline
|
|
? XT(e)
|
|
: ((e, t) => {
|
|
((e, t) => {
|
|
const n = Tt.browser.isFirefox() ? Xd(e) : "Rich Text Area",
|
|
o = e.translate(n),
|
|
r = nn(Cn(e.getElement()), "tabindex").bind(Ze),
|
|
s = ((e, t, n, o) => {
|
|
const r = vn("iframe");
|
|
return (
|
|
o.each(e => Jt(r, "tabindex", e)),
|
|
en(r, n),
|
|
en(r, {id: e + "_ifr", frameBorder: "0", allowTransparency: "true", title: t}),
|
|
mn(r, "tox-edit-area__iframe"),
|
|
r
|
|
);
|
|
})(e.id, o, Ul(e), r).dom;
|
|
(s.onload = () => {
|
|
(s.onload = null), e.dispatch("load");
|
|
}),
|
|
(e.contentAreaContainer = t.iframeContainer),
|
|
(e.iframeElement = s),
|
|
(e.iframeHTML = (e => {
|
|
let t = zl(e) + "<html><head>";
|
|
jl(e) !== e.documentBaseUrl && (t += '<base href="' + e.documentBaseURI.getURI() + '" />'),
|
|
(t += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />');
|
|
const n = Hl(e),
|
|
o = $l(e),
|
|
r = e.translate(Xd(e));
|
|
return (
|
|
Vl(e) && (t += '<meta http-equiv="Content-Security-Policy" content="' + Vl(e) + '" />'),
|
|
(t += `</head><body id="${n}" class="mce-content-body ${o}" data-id="${e.id}" aria-label="${r}"><br></body></html>`),
|
|
t
|
|
);
|
|
})(e)),
|
|
QT.add(t.iframeContainer, s);
|
|
})(e, t),
|
|
t.editorContainer &&
|
|
((t.editorContainer.style.display = e.orgDisplay), (e.hidden = QT.isHidden(t.editorContainer))),
|
|
(e.getElement().style.display = "none"),
|
|
QT.setAttrib(e.id, "aria-hidden", "true"),
|
|
(e.getElement().style.visibility = e.orgVisibility),
|
|
(e => {
|
|
const t = e.iframeElement,
|
|
n = () => {
|
|
(e.contentDocument = t.contentDocument), XT(e);
|
|
};
|
|
if (Ec(e) || Tt.browser.isFirefox()) {
|
|
const t = e.getDoc();
|
|
t.open(), t.write(e.iframeHTML), t.close(), n();
|
|
} else {
|
|
const r =
|
|
((o = Cn(t)),
|
|
Ro(o, "load", ZT, () => {
|
|
r.unbind(), n();
|
|
}));
|
|
t.srcdoc = e.iframeHTML;
|
|
}
|
|
var o;
|
|
})(e);
|
|
})(e, {editorContainer: t.editorContainer, iframeContainer: t.iframeContainer});
|
|
},
|
|
oO = fa.DOM,
|
|
rO = e => "-" === e.charAt(0),
|
|
sO = (e, t, n) =>
|
|
I.from(t)
|
|
.filter(e => Ge(e) && !Tw.has(e))
|
|
.map(t => ({url: `${e.editorManager.baseURL}/icons/${t}/icons${n}.min.js`, name: I.some(t)})),
|
|
aO = (e, t) => {
|
|
const n = pa.ScriptLoader,
|
|
o = () => {
|
|
!e.removed &&
|
|
(e => {
|
|
const t = kd(e);
|
|
return !m(t) || C(zw.get(t));
|
|
})(e) &&
|
|
(e => {
|
|
const t = Sd(e);
|
|
return C(Ow.get(t));
|
|
})(e) &&
|
|
nO(e);
|
|
};
|
|
((e, t) => {
|
|
const n = kd(e);
|
|
if (m(n) && !rO(n) && !ke(zw.urls, n)) {
|
|
const o = _d(e),
|
|
r = o ? e.documentBaseURI.toAbsolute(o) : `themes/${n}/theme${t}.min.js`;
|
|
zw.load(n, r).catch(() => {
|
|
((e, t, n) => {
|
|
Vw(e, "ThemeLoadError", qw("theme", t, n));
|
|
})(e, r, n);
|
|
});
|
|
}
|
|
})(e, t),
|
|
((e, t) => {
|
|
const n = Sd(e);
|
|
if ("plugin" !== n && !ke(Ow.urls, n)) {
|
|
const o = Nd(e),
|
|
r = m(o) ? e.documentBaseURI.toAbsolute(o) : `models/${n}/model${t}.min.js`;
|
|
Ow.load(n, r).catch(() => {
|
|
((e, t, n) => {
|
|
Vw(e, "ModelLoadError", qw("model", t, n));
|
|
})(e, r, n);
|
|
});
|
|
}
|
|
})(e, t),
|
|
((e, t) => {
|
|
const n = cd(t),
|
|
o = ud(t);
|
|
if (!ya.hasCode(n) && "en" !== n) {
|
|
const r = Ge(o) ? o : `${t.editorManager.baseURL}/langs/${n}.min.js`;
|
|
e.add(r).catch(() => {
|
|
((e, t, n) => {
|
|
Vw(e, "LanguageLoadError", qw("language", t, n));
|
|
})(t, r, n);
|
|
});
|
|
}
|
|
})(n, e),
|
|
((e, t, n) => {
|
|
const o = sO(t, "default", n),
|
|
r = (e =>
|
|
I.from(od(e))
|
|
.filter(Ge)
|
|
.map(e => ({url: e, name: I.none()})))(t).orThunk(() => sO(t, nd(t), ""));
|
|
q(
|
|
(e => {
|
|
const t = [],
|
|
n = e => {
|
|
t.push(e);
|
|
};
|
|
for (let t = 0; t < e.length; t++) e[t].each(n);
|
|
return t;
|
|
})([o, r]),
|
|
n => {
|
|
e.add(n.url).catch(() => {
|
|
((e, t, n) => {
|
|
Vw(e, "IconsLoadError", qw("icons", t, n));
|
|
})(t, n.url, n.name.getOrUndefined());
|
|
});
|
|
}
|
|
);
|
|
})(n, e, t),
|
|
((e, t) => {
|
|
const n = (t, n) => {
|
|
Uw.load(t, n).catch(() => {
|
|
((e, t, n) => {
|
|
Vw(e, "PluginLoadError", qw("plugin", t, n));
|
|
})(e, n, t);
|
|
});
|
|
};
|
|
pe(qd(e), (t, o) => {
|
|
n(o, t), e.options.set("plugins", Vd(e).concat(o));
|
|
}),
|
|
q(Vd(e), e => {
|
|
!(e = Dt.trim(e)) || Uw.urls[e] || rO(e) || n(e, `plugins/${e}/plugin${t}.min.js`);
|
|
});
|
|
})(e, t),
|
|
n.loadQueue().then(o, o);
|
|
},
|
|
iO = Et().deviceType,
|
|
lO = iO.isPhone(),
|
|
dO = iO.isTablet(),
|
|
cO = e => {
|
|
if (y(e)) return [];
|
|
{
|
|
const t = p(e) ? e : e.split(/[ ,]/),
|
|
n = V(t, We);
|
|
return Y(n, Ge);
|
|
}
|
|
},
|
|
uO = (e, t) => {
|
|
const n = ((t, n) => {
|
|
const o = {},
|
|
r = {};
|
|
return ye(t, (t, n) => H(e, n), ve(o), ve(r)), {t: o, f: r};
|
|
})(t);
|
|
return (o = n.t), (r = n.f), {sections: N(o), options: N(r)};
|
|
var o, r;
|
|
},
|
|
mO = (e, t) => ke(e.sections(), t),
|
|
fO = (e, t) => ({
|
|
table_grid: !1,
|
|
object_resizing: !1,
|
|
resize: !1,
|
|
toolbar_mode: Ee(e, "toolbar_mode").getOr("scrolling"),
|
|
toolbar_sticky: !1,
|
|
...(t ? {menubar: !1} : {})
|
|
}),
|
|
gO = (e, t) => {
|
|
var n;
|
|
const o = null !== (n = t.external_plugins) && void 0 !== n ? n : {};
|
|
return e && e.external_plugins ? Dt.extend({}, e.external_plugins, o) : o;
|
|
},
|
|
pO = (e, t, n, o, r) => {
|
|
var s;
|
|
const a = e ? {mobile: fO(null !== (s = r.mobile) && void 0 !== s ? s : {}, t)} : {},
|
|
i = uO(["mobile"], aS(a, r)),
|
|
l = Dt.extend(
|
|
n,
|
|
o,
|
|
i.options(),
|
|
((e, t) => e && mO(t, "mobile"))(e, i)
|
|
? ((e, t, n = {}) => {
|
|
const o = e.sections(),
|
|
r = Ee(o, t).getOr({});
|
|
return Dt.extend({}, n, r);
|
|
})(i, "mobile")
|
|
: {},
|
|
{external_plugins: gO(o, i.options())}
|
|
);
|
|
return ((e, t, n, o) => {
|
|
const r = cO(n.forced_plugins),
|
|
s = cO(o.plugins),
|
|
a = ((e, t) => (mO(e, t) ? e.sections()[t] : {}))(t, "mobile"),
|
|
i = ((e, t, n, o) => (e && mO(t, "mobile") ? o : n))(e, t, s, a.plugins ? cO(a.plugins) : s),
|
|
l = ((e, t) => [...cO(e), ...cO(t)])(r, i);
|
|
return Dt.extend(o, {forced_plugins: r, plugins: l});
|
|
})(e, i, o, l);
|
|
},
|
|
hO = e => {
|
|
(e => {
|
|
const t = t => () => {
|
|
q("left,center,right,justify".split(","), n => {
|
|
t !== n && e.formatter.remove("align" + n);
|
|
}),
|
|
"none" !== t &&
|
|
((t, n) => {
|
|
e.formatter.toggle(t, void 0), e.nodeChanged();
|
|
})("align" + t);
|
|
};
|
|
e.editorCommands.addCommands({
|
|
JustifyLeft: t("left"),
|
|
JustifyCenter: t("center"),
|
|
JustifyRight: t("right"),
|
|
JustifyFull: t("justify"),
|
|
JustifyNone: t("none")
|
|
});
|
|
})(e),
|
|
(e => {
|
|
const t = t => () => {
|
|
const n = e.selection,
|
|
o = n.isCollapsed() ? [e.dom.getParent(n.getNode(), e.dom.isBlock)] : n.getSelectedBlocks();
|
|
return $(o, n => C(e.formatter.matchNode(n, t)));
|
|
};
|
|
e.editorCommands.addCommands(
|
|
{
|
|
JustifyLeft: t("alignleft"),
|
|
JustifyCenter: t("aligncenter"),
|
|
JustifyRight: t("alignright"),
|
|
JustifyFull: t("alignjustify")
|
|
},
|
|
"state"
|
|
);
|
|
})(e);
|
|
},
|
|
bO = (e, t) => {
|
|
const n = e.selection,
|
|
o = e.dom;
|
|
return /^ | $/.test(t)
|
|
? ((e, t, n, o) => {
|
|
const r = Cn(e.getRoot());
|
|
return (
|
|
(n = lh(r, Ji.fromRangeStart(t), o) ? n.replace(/^ /, " ") : n.replace(/^ /, " ")),
|
|
dh(r, Ji.fromRangeEnd(t), o)
|
|
? n.replace(/( | )(<br( \/)>)?$/, " ")
|
|
: n.replace(/ (<br( \/)?>)?$/, " ")
|
|
);
|
|
})(o, n.getRng(), t, e.schema)
|
|
: t;
|
|
},
|
|
vO = (e, t) => {
|
|
if (e.selection.isEditable()) {
|
|
const {content: n, details: o} = (e => {
|
|
if ("string" != typeof e) {
|
|
const t = Dt.extend({paste: e.paste, data: {paste: e.paste}}, e);
|
|
return {content: e.content, details: t};
|
|
}
|
|
return {content: e, details: {}};
|
|
})(t);
|
|
AC(e, {...o, content: bO(e, n), format: "html", set: !1, selection: !0}).each(t => {
|
|
const n = ((e, t, n) => sw(e).editor.insertContent(t, n))(e, t.content, o);
|
|
TC(e, n, t), e.addVisual();
|
|
});
|
|
}
|
|
},
|
|
yO = {"font-size": "size", "font-family": "face"},
|
|
CO = Zt("font"),
|
|
wO = e => (t, n) =>
|
|
I.from(n)
|
|
.map(Cn)
|
|
.filter(Kt)
|
|
.bind(n =>
|
|
((e, t, n) =>
|
|
jb(
|
|
Cn(n),
|
|
t => (t => fo(t, e).orThunk(() => (CO(t) ? Ee(yO, e).bind(e => nn(t, e)) : I.none())))(t),
|
|
e => _n(Cn(t), e)
|
|
))(e, t, n.dom).or(((e, t) => I.from(fa.DOM.getStyle(t, e, !0)))(e, n.dom))
|
|
)
|
|
.getOr(""),
|
|
xO = wO("font-size"),
|
|
EO = _(e => e.replace(/[\'\"\\]/g, "").replace(/,\s+/g, ","), wO("font-family")),
|
|
kO = e =>
|
|
$u(e.getBody()).bind(e => {
|
|
const t = e.container();
|
|
return I.from(dr(t) ? t.parentNode : t);
|
|
}),
|
|
_O = (e, t) =>
|
|
((e, t) =>
|
|
(e =>
|
|
I.from(e.selection.getRng()).bind(t => {
|
|
const n = e.getBody();
|
|
return t.startContainer === n && 0 === t.startOffset ? I.none() : I.from(e.selection.getStart(!0));
|
|
}))(e)
|
|
.orThunk(T(kO, e))
|
|
.map(Cn)
|
|
.filter(Kt)
|
|
.bind(t))(e, S(I.some, t)),
|
|
SO = (e, t) => {
|
|
if (/^[0-9.]+$/.test(t)) {
|
|
const n = parseInt(t, 10);
|
|
if (n >= 1 && n <= 7) {
|
|
const o = (e => Dt.explode(e.options.get("font_size_style_values")))(e),
|
|
r = (e => Dt.explode(e.options.get("font_size_classes")))(e);
|
|
return r.length > 0 ? r[n - 1] || t : o[n - 1] || t;
|
|
}
|
|
return t;
|
|
}
|
|
return t;
|
|
},
|
|
NO = e => {
|
|
const t = e.split(/\s*,\s*/);
|
|
return V(t, e => (-1 === e.indexOf(" ") || $e(e, '"') || $e(e, "'") ? e : `'${e}'`)).join(",");
|
|
},
|
|
RO = (e, t) => {
|
|
const n = e.dom,
|
|
o = e.selection.getRng(),
|
|
r = t ? e.selection.getStart() : e.selection.getEnd(),
|
|
s = t ? o.startContainer : o.endContainer,
|
|
a = kN(n, s);
|
|
if (!a || !a.isContentEditable) return;
|
|
const i = t ? ho : bo,
|
|
l = Wl(e);
|
|
((e, t, n, o) => {
|
|
const r = e.dom,
|
|
s = e => r.isBlock(e) && e.parentElement === n,
|
|
a = s(t) ? t : r.getParent(o, s, n);
|
|
return I.from(a).map(Cn);
|
|
})(e, r, a, s).each(t => {
|
|
const n = RN(e, s, t.dom, a, !1, l);
|
|
i(t, Cn(n)),
|
|
e.selection.setCursorLocation(n, 0),
|
|
e.dispatch("NewBlock", {newBlock: n}),
|
|
bN(e, "insertParagraph");
|
|
});
|
|
},
|
|
AO = e => {
|
|
hO(e),
|
|
(e => {
|
|
e.editorCommands.addCommands({
|
|
"Cut,Copy,Paste": t => {
|
|
const n = e.getDoc();
|
|
let o;
|
|
try {
|
|
n.execCommand(t);
|
|
} catch (e) {
|
|
o = !0;
|
|
}
|
|
if (("paste" !== t || n.queryCommandEnabled(t) || (o = !0), o || !n.queryCommandSupported(t))) {
|
|
let t = e.translate(
|
|
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead."
|
|
);
|
|
(Tt.os.isMacOS() || Tt.os.isiOS()) && (t = t.replace(/Ctrl\+/g, "\u2318+")),
|
|
e.notificationManager.open({text: t, type: "error"});
|
|
}
|
|
}
|
|
});
|
|
})(e),
|
|
(e => {
|
|
e.editorCommands.addCommands({
|
|
mceAddUndoLevel: () => {
|
|
e.undoManager.add();
|
|
},
|
|
mceEndUndoLevel: () => {
|
|
e.undoManager.add();
|
|
},
|
|
Undo: () => {
|
|
e.undoManager.undo();
|
|
},
|
|
Redo: () => {
|
|
e.undoManager.redo();
|
|
}
|
|
});
|
|
})(e),
|
|
(e => {
|
|
e.editorCommands.addCommands({
|
|
mceSelectNodeDepth: (t, n, o) => {
|
|
let r = 0;
|
|
e.dom.getParent(
|
|
e.selection.getNode(),
|
|
t => !er(t) || r++ !== o || (e.selection.select(t), !1),
|
|
e.getBody()
|
|
);
|
|
},
|
|
mceSelectNode: (t, n, o) => {
|
|
e.selection.select(o);
|
|
},
|
|
selectAll: () => {
|
|
const t = e.dom.getParent(e.selection.getStart(), br);
|
|
if (t) {
|
|
const n = e.dom.createRng();
|
|
n.selectNodeContents(t), e.selection.setRng(n);
|
|
}
|
|
}
|
|
});
|
|
})(e),
|
|
(e => {
|
|
e.editorCommands.addCommands({
|
|
mceCleanup: () => {
|
|
const t = e.selection.getBookmark();
|
|
e.setContent(e.getContent()), e.selection.moveToBookmark(t);
|
|
},
|
|
insertImage: (t, n, o) => {
|
|
vO(e, e.dom.createHTML("img", {src: o}));
|
|
},
|
|
insertHorizontalRule: () => {
|
|
e.execCommand("mceInsertContent", !1, "<hr>");
|
|
},
|
|
insertText: (t, n, o) => {
|
|
vO(e, e.dom.encode(o));
|
|
},
|
|
insertHTML: (t, n, o) => {
|
|
vO(e, o);
|
|
},
|
|
mceInsertContent: (t, n, o) => {
|
|
vO(e, o);
|
|
},
|
|
mceSetContent: (t, n, o) => {
|
|
e.setContent(o);
|
|
},
|
|
mceReplaceContent: (t, n, o) => {
|
|
e.execCommand(
|
|
"mceInsertContent",
|
|
!1,
|
|
o.replace(/\{\$selection\}/g, e.selection.getContent({format: "text"}))
|
|
);
|
|
},
|
|
mceNewDocument: () => {
|
|
e.setContent(ic(e));
|
|
}
|
|
});
|
|
})(e),
|
|
(e => {
|
|
const t = (t, n, o) => {
|
|
const r = m(o) ? {href: o} : o,
|
|
s = e.dom.getParent(e.selection.getNode(), "a");
|
|
f(r) &&
|
|
m(r.href) &&
|
|
((r.href = r.href.replace(/ /g, "%20")),
|
|
(s && r.href) || e.formatter.remove("link"),
|
|
r.href && e.formatter.apply("link", r, s));
|
|
};
|
|
e.editorCommands.addCommands({
|
|
unlink: () => {
|
|
if (e.selection.isEditable()) {
|
|
if (e.selection.isCollapsed()) {
|
|
const t = e.dom.getParent(e.selection.getStart(), "a");
|
|
return void (t && e.dom.remove(t, !0));
|
|
}
|
|
e.formatter.remove("link");
|
|
}
|
|
},
|
|
mceInsertLink: t,
|
|
createLink: t
|
|
});
|
|
})(e),
|
|
(e => {
|
|
e.editorCommands.addCommands({
|
|
Indent: () => {
|
|
(e => {
|
|
Lk(e, "indent");
|
|
})(e);
|
|
},
|
|
Outdent: () => {
|
|
Mk(e);
|
|
}
|
|
}),
|
|
e.editorCommands.addCommands({Outdent: () => Bk(e)}, "state");
|
|
})(e),
|
|
(e => {
|
|
e.editorCommands.addCommands({
|
|
InsertNewBlockBefore: () => {
|
|
(e => {
|
|
RO(e, !0);
|
|
})(e);
|
|
},
|
|
InsertNewBlockAfter: () => {
|
|
(e => {
|
|
RO(e, !1);
|
|
})(e);
|
|
}
|
|
});
|
|
})(e),
|
|
(e => {
|
|
e.editorCommands.addCommands({
|
|
insertParagraph: () => {
|
|
iR(UN, e);
|
|
},
|
|
mceInsertNewLine: (t, n, o) => {
|
|
lR(e, o);
|
|
},
|
|
InsertLineBreak: (t, n, o) => {
|
|
iR(KN, e);
|
|
}
|
|
});
|
|
})(e),
|
|
(e => {
|
|
(e => {
|
|
const t = (t, n) => {
|
|
e.formatter.toggle(t, n), e.nodeChanged();
|
|
};
|
|
e.editorCommands.addCommands({
|
|
"Bold,Italic,Underline,Strikethrough,Superscript,Subscript": e => {
|
|
t(e);
|
|
},
|
|
"ForeColor,HiliteColor": (e, n, o) => {
|
|
t(e, {value: o});
|
|
},
|
|
BackColor: (e, n, o) => {
|
|
t("hilitecolor", {value: o});
|
|
},
|
|
FontName: (t, n, o) => {
|
|
((e, t) => {
|
|
const n = SO(e, t);
|
|
e.formatter.toggle("fontname", {value: NO(n)}), e.nodeChanged();
|
|
})(e, o);
|
|
},
|
|
FontSize: (t, n, o) => {
|
|
((e, t) => {
|
|
e.formatter.toggle("fontsize", {value: SO(e, t)}), e.nodeChanged();
|
|
})(e, o);
|
|
},
|
|
LineHeight: (t, n, o) => {
|
|
((e, t) => {
|
|
e.formatter.toggle("lineheight", {value: String(t)}), e.nodeChanged();
|
|
})(e, o);
|
|
},
|
|
Lang: (e, n, o) => {
|
|
var r;
|
|
t(e, {value: o.code, customValue: null !== (r = o.customCode) && void 0 !== r ? r : null});
|
|
},
|
|
RemoveFormat: t => {
|
|
e.formatter.remove(t);
|
|
},
|
|
mceBlockQuote: () => {
|
|
t("blockquote");
|
|
},
|
|
FormatBlock: (e, n, o) => {
|
|
t(m(o) ? o : "p");
|
|
},
|
|
mceToggleFormat: (e, n, o) => {
|
|
t(o);
|
|
}
|
|
});
|
|
})(e),
|
|
(e => {
|
|
const t = t => e.formatter.match(t);
|
|
e.editorCommands.addCommands(
|
|
{
|
|
"Bold,Italic,Underline,Strikethrough,Superscript,Subscript": e => t(e),
|
|
mceBlockQuote: () => t("blockquote")
|
|
},
|
|
"state"
|
|
),
|
|
e.editorCommands.addQueryValueHandler("FontName", () =>
|
|
(e => _O(e, t => EO(e.getBody(), t.dom)).getOr(""))(e)
|
|
),
|
|
e.editorCommands.addQueryValueHandler("FontSize", () =>
|
|
(e => _O(e, t => xO(e.getBody(), t.dom)).getOr(""))(e)
|
|
),
|
|
e.editorCommands.addQueryValueHandler("LineHeight", () =>
|
|
(e =>
|
|
_O(e, t => {
|
|
const n = Cn(e.getBody()),
|
|
o = jb(t, e => fo(e, "line-height"), T(_n, n));
|
|
return o.getOrThunk(() => {
|
|
const e = parseFloat(uo(t, "line-height")),
|
|
n = parseFloat(uo(t, "font-size"));
|
|
return String(e / n);
|
|
});
|
|
}).getOr(""))(e)
|
|
);
|
|
})(e);
|
|
})(e),
|
|
(e => {
|
|
e.editorCommands.addCommands({
|
|
mceRemoveNode: (t, n, o) => {
|
|
const r = null != o ? o : e.selection.getNode();
|
|
if (r !== e.getBody()) {
|
|
const t = e.selection.getBookmark();
|
|
e.dom.remove(r, !0), e.selection.moveToBookmark(t);
|
|
}
|
|
},
|
|
mcePrint: () => {
|
|
e.getWin().print();
|
|
},
|
|
mceFocus: (t, n, o) => {
|
|
((e, t) => {
|
|
e.removed ||
|
|
(t
|
|
? $g(e)
|
|
: (e => {
|
|
const t = e.selection,
|
|
n = e.getBody();
|
|
let o = t.getRng();
|
|
e.quirks.refreshContentEditable(),
|
|
C(e.bookmark) &&
|
|
!jg(e) &&
|
|
Ag(e).each(t => {
|
|
e.selection.setRng(t), (o = t);
|
|
});
|
|
const r = ((e, t) => e.dom.getParent(t, t => "true" === e.dom.getContentEditable(t)))(
|
|
e,
|
|
t.getNode()
|
|
);
|
|
if (r && e.dom.isChildOf(r, n)) return zg(r), Ug(e, o), void $g(e);
|
|
e.inline || (Tt.browser.isOpera() || zg(n), e.getWin().focus()),
|
|
(Tt.browser.isFirefox() || e.inline) && (zg(n), Ug(e, o)),
|
|
$g(e);
|
|
})(e));
|
|
})(e, !0 === o);
|
|
},
|
|
mceToggleVisualAid: () => {
|
|
(e.hasVisual = !e.hasVisual), e.addVisual();
|
|
}
|
|
});
|
|
})(e);
|
|
},
|
|
TO = ["toggleview"],
|
|
OO = e => H(TO, e.toLowerCase());
|
|
class BO {
|
|
constructor(e) {
|
|
(this.commands = {state: {}, exec: {}, value: {}}), (this.editor = e);
|
|
}
|
|
execCommand(e, t = !1, n, o) {
|
|
const r = this.editor,
|
|
s = e.toLowerCase(),
|
|
a = null == o ? void 0 : o.skip_focus;
|
|
if (r.removed) return !1;
|
|
if (
|
|
("mcefocus" !== s &&
|
|
(/^(mceAddUndoLevel|mceEndUndoLevel)$/i.test(s) || a
|
|
? (e => {
|
|
Ag(e).each(t => e.selection.setRng(t));
|
|
})(r)
|
|
: r.focus()),
|
|
r.dispatch("BeforeExecCommand", {command: e, ui: t, value: n}).isDefaultPrevented())
|
|
)
|
|
return !1;
|
|
const i = this.commands.exec[s];
|
|
return !!w(i) && (i(s, t, n), r.dispatch("ExecCommand", {command: e, ui: t, value: n}), !0);
|
|
}
|
|
queryCommandState(e) {
|
|
if ((!OO(e) && this.editor.quirks.isHidden()) || this.editor.removed) return !1;
|
|
const t = e.toLowerCase(),
|
|
n = this.commands.state[t];
|
|
return !!w(n) && n(t);
|
|
}
|
|
queryCommandValue(e) {
|
|
if ((!OO(e) && this.editor.quirks.isHidden()) || this.editor.removed) return "";
|
|
const t = e.toLowerCase(),
|
|
n = this.commands.value[t];
|
|
return w(n) ? n(t) : "";
|
|
}
|
|
addCommands(e, t = "exec") {
|
|
const n = this.commands;
|
|
pe(e, (e, o) => {
|
|
q(o.toLowerCase().split(","), o => {
|
|
n[t][o] = e;
|
|
});
|
|
});
|
|
}
|
|
addCommand(e, t, n) {
|
|
const o = e.toLowerCase();
|
|
this.commands.exec[o] = (e, o, r) => t.call(null != n ? n : this.editor, o, r);
|
|
}
|
|
queryCommandSupported(e) {
|
|
const t = e.toLowerCase();
|
|
return !!this.commands.exec[t];
|
|
}
|
|
addQueryStateHandler(e, t, n) {
|
|
this.commands.state[e.toLowerCase()] = () => t.call(null != n ? n : this.editor);
|
|
}
|
|
addQueryValueHandler(e, t, n) {
|
|
this.commands.value[e.toLowerCase()] = () => t.call(null != n ? n : this.editor);
|
|
}
|
|
}
|
|
const PO = "data-mce-contenteditable",
|
|
DO = (e, t, n) => {
|
|
try {
|
|
e.getDoc().execCommand(t, !1, String(n));
|
|
} catch (e) {}
|
|
},
|
|
LO = (e, t) => {
|
|
e.dom.contentEditable = t ? "true" : "false";
|
|
},
|
|
MO = e => e.readonly,
|
|
IO = e => {
|
|
e.parser.addAttributeFilter("contenteditable", t => {
|
|
MO(e) &&
|
|
q(t, e => {
|
|
e.attr(PO, e.attr("contenteditable")), e.attr("contenteditable", "false");
|
|
});
|
|
}),
|
|
e.serializer.addAttributeFilter(PO, t => {
|
|
MO(e) &&
|
|
q(t, e => {
|
|
e.attr("contenteditable", e.attr(PO));
|
|
});
|
|
}),
|
|
e.serializer.addTempAttr(PO);
|
|
},
|
|
FO = ["copy"],
|
|
UO = Dt.makeMap(
|
|
"focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave wheel keydown keypress keyup input beforeinput contextmenu dragstart dragend dragover draggesture dragdrop drop drag submit compositionstart compositionend compositionupdate touchstart touchmove touchend touchcancel",
|
|
" "
|
|
);
|
|
class zO {
|
|
static isNative(e) {
|
|
return !!UO[e.toLowerCase()];
|
|
}
|
|
constructor(e) {
|
|
(this.bindings = {}),
|
|
(this.settings = e || {}),
|
|
(this.scope = this.settings.scope || this),
|
|
(this.toggleEvent = this.settings.toggleEvent || L);
|
|
}
|
|
fire(e, t) {
|
|
return this.dispatch(e, t);
|
|
}
|
|
dispatch(e, t) {
|
|
const n = e.toLowerCase(),
|
|
o = Zs(n, null != t ? t : {}, this.scope);
|
|
this.settings.beforeFire && this.settings.beforeFire(o);
|
|
const r = this.bindings[n];
|
|
if (r)
|
|
for (let e = 0, t = r.length; e < t; e++) {
|
|
const t = r[e];
|
|
if (!t.removed) {
|
|
if ((t.once && this.off(n, t.func), o.isImmediatePropagationStopped())) return o;
|
|
if (!1 === t.func.call(this.scope, o)) return o.preventDefault(), o;
|
|
}
|
|
}
|
|
return o;
|
|
}
|
|
on(e, t, n, o) {
|
|
if ((!1 === t && (t = L), t)) {
|
|
const r = {func: t, removed: !1};
|
|
o && Dt.extend(r, o);
|
|
const s = e.toLowerCase().split(" ");
|
|
let a = s.length;
|
|
for (; a--; ) {
|
|
const e = s[a];
|
|
let t = this.bindings[e];
|
|
t || ((t = []), this.toggleEvent(e, !0)), (t = n ? [r, ...t] : [...t, r]), (this.bindings[e] = t);
|
|
}
|
|
}
|
|
return this;
|
|
}
|
|
off(e, t) {
|
|
if (e) {
|
|
const n = e.toLowerCase().split(" ");
|
|
let o = n.length;
|
|
for (; o--; ) {
|
|
const r = n[o];
|
|
let s = this.bindings[r];
|
|
if (!r)
|
|
return (
|
|
pe(this.bindings, (e, t) => {
|
|
this.toggleEvent(t, !1), delete this.bindings[t];
|
|
}),
|
|
this
|
|
);
|
|
if (s) {
|
|
if (t) {
|
|
const e = K(s, e => e.func === t);
|
|
(s = e.fail),
|
|
(this.bindings[r] = s),
|
|
q(e.pass, e => {
|
|
e.removed = !0;
|
|
});
|
|
} else s.length = 0;
|
|
s.length || (this.toggleEvent(e, !1), delete this.bindings[r]);
|
|
}
|
|
}
|
|
} else
|
|
pe(this.bindings, (e, t) => {
|
|
this.toggleEvent(t, !1);
|
|
}),
|
|
(this.bindings = {});
|
|
return this;
|
|
}
|
|
once(e, t, n) {
|
|
return this.on(e, t, n, {once: !0});
|
|
}
|
|
has(e) {
|
|
e = e.toLowerCase();
|
|
const t = this.bindings[e];
|
|
return !(!t || 0 === t.length);
|
|
}
|
|
}
|
|
const jO = e => (
|
|
e._eventDispatcher ||
|
|
(e._eventDispatcher = new zO({
|
|
scope: e,
|
|
toggleEvent: (t, n) => {
|
|
zO.isNative(t) && e.toggleNativeEvent && e.toggleNativeEvent(t, n);
|
|
}
|
|
})),
|
|
e._eventDispatcher
|
|
),
|
|
HO = {
|
|
fire(e, t, n) {
|
|
return this.dispatch(e, t, n);
|
|
},
|
|
dispatch(e, t, n) {
|
|
const o = this;
|
|
if (o.removed && "remove" !== e && "detach" !== e) return Zs(e.toLowerCase(), null != t ? t : {}, o);
|
|
const r = jO(o).dispatch(e, t);
|
|
if (!1 !== n && o.parent) {
|
|
let t = o.parent();
|
|
for (; t && !r.isPropagationStopped(); ) t.dispatch(e, r, !1), (t = t.parent ? t.parent() : void 0);
|
|
}
|
|
return r;
|
|
},
|
|
on(e, t, n) {
|
|
return jO(this).on(e, t, n);
|
|
},
|
|
off(e, t) {
|
|
return jO(this).off(e, t);
|
|
},
|
|
once(e, t) {
|
|
return jO(this).once(e, t);
|
|
},
|
|
hasEventListeners(e) {
|
|
return jO(this).has(e);
|
|
}
|
|
},
|
|
$O = fa.DOM;
|
|
let VO;
|
|
const qO = (e, t) => {
|
|
if ("selectionchange" === t) return e.getDoc();
|
|
if (!e.inline && /^(?:mouse|touch|click|contextmenu|drop|dragover|dragend)/.test(t))
|
|
return e.getDoc().documentElement;
|
|
const n = xd(e);
|
|
return n ? (e.eventRoot || (e.eventRoot = $O.select(n)[0]), e.eventRoot) : e.getBody();
|
|
},
|
|
WO = (e, t, n) => {
|
|
(e => !e.hidden && !MO(e))(e)
|
|
? e.dispatch(t, n)
|
|
: MO(e) &&
|
|
((e, t) => {
|
|
if ((e => "click" === e.type)(t) && !Cf.metaKeyPressed(t)) {
|
|
const n = Cn(t.target);
|
|
((e, t) => oo(t, "a", t => _n(t, Cn(e.getBody()))).bind(e => nn(e, "href")))(e, n).each(n => {
|
|
if ((t.preventDefault(), /^#/.test(n))) {
|
|
const t = e.dom.select(`${n},[name="${je(n, "#")}"]`);
|
|
t.length && e.selection.scrollIntoView(t[0], !0);
|
|
} else
|
|
window.open(
|
|
n,
|
|
"_blank",
|
|
"rel=noopener noreferrer,menubar=yes,toolbar=yes,location=yes,status=yes,resizable=yes,scrollbars=yes"
|
|
);
|
|
});
|
|
} else (e => H(FO, e.type))(t) && e.dispatch(t.type, t);
|
|
})(e, n);
|
|
},
|
|
KO = (e, t) => {
|
|
if ((e.delegates || (e.delegates = {}), e.delegates[t] || e.removed)) return;
|
|
const n = qO(e, t);
|
|
if (xd(e)) {
|
|
if (
|
|
(VO ||
|
|
((VO = {}),
|
|
e.editorManager.on("removeEditor", () => {
|
|
e.editorManager.activeEditor ||
|
|
(VO &&
|
|
(pe(VO, (t, n) => {
|
|
e.dom.unbind(qO(e, n));
|
|
}),
|
|
(VO = null)));
|
|
})),
|
|
VO[t])
|
|
)
|
|
return;
|
|
const o = n => {
|
|
const o = n.target,
|
|
r = e.editorManager.get();
|
|
let s = r.length;
|
|
for (; s--; ) {
|
|
const e = r[s].getBody();
|
|
(e === o || $O.isChildOf(o, e)) && WO(r[s], t, n);
|
|
}
|
|
};
|
|
(VO[t] = o), $O.bind(n, t, o);
|
|
} else {
|
|
const o = n => {
|
|
WO(e, t, n);
|
|
};
|
|
$O.bind(n, t, o), (e.delegates[t] = o);
|
|
}
|
|
},
|
|
YO = {
|
|
...HO,
|
|
bindPendingEventDelegates() {
|
|
const e = this;
|
|
Dt.each(e._pendingNativeEvents, t => {
|
|
KO(e, t);
|
|
});
|
|
},
|
|
toggleNativeEvent(e, t) {
|
|
const n = this;
|
|
"focus" !== e &&
|
|
"blur" !== e &&
|
|
(n.removed ||
|
|
(t
|
|
? n.initialized
|
|
? KO(n, e)
|
|
: n._pendingNativeEvents
|
|
? n._pendingNativeEvents.push(e)
|
|
: (n._pendingNativeEvents = [e])
|
|
: n.initialized && n.delegates && (n.dom.unbind(qO(n, e), e, n.delegates[e]), delete n.delegates[e])));
|
|
},
|
|
unbindAllNativeEvents() {
|
|
const e = this,
|
|
t = e.getBody(),
|
|
n = e.dom;
|
|
e.delegates &&
|
|
(pe(e.delegates, (t, n) => {
|
|
e.dom.unbind(qO(e, n), n, t);
|
|
}),
|
|
delete e.delegates),
|
|
!e.inline && t && n && ((t.onload = null), n.unbind(e.getWin()), n.unbind(e.getDoc())),
|
|
n && (n.unbind(t), n.unbind(e.getContainer()));
|
|
}
|
|
},
|
|
GO = e =>
|
|
m(e)
|
|
? {value: e.split(/[ ,]/), valid: !0}
|
|
: E(e, m)
|
|
? {value: e, valid: !0}
|
|
: {valid: !1, message: "The value must be a string[] or a comma/space separated string."},
|
|
XO = (e, t) => e + (Xe(t.message) ? "" : `. ${t.message}`),
|
|
ZO = e => e.valid,
|
|
QO = (e, t, n = "") => {
|
|
const o = t(e);
|
|
return b(o) ? (o ? {value: e, valid: !0} : {valid: !1, message: n}) : o;
|
|
},
|
|
JO = ["design", "readonly"],
|
|
eB = (e, t, n, o) => {
|
|
const r = n[t.get()],
|
|
s = n[o];
|
|
try {
|
|
s.activate();
|
|
} catch (e) {
|
|
return void console.error(`problem while activating editor mode ${o}:`, e);
|
|
}
|
|
r.deactivate(),
|
|
r.editorReadOnly !== s.editorReadOnly &&
|
|
((e, t) => {
|
|
const n = Cn(e.getBody());
|
|
((e, t, n) => {
|
|
pn(e, t) && !n ? gn(e, t) : n && mn(e, t);
|
|
})(n, "mce-content-readonly", t),
|
|
t
|
|
? (e.selection.controlSelection.hideResizeRect(),
|
|
e._selectionOverrides.hideFakeCaret(),
|
|
(e => {
|
|
I.from(e.selection.getNode()).each(e => {
|
|
e.removeAttribute("data-mce-selected");
|
|
});
|
|
})(e),
|
|
(e.readonly = !0),
|
|
LO(n, !1),
|
|
q(zo(n, '*[contenteditable="true"]'), e => {
|
|
Jt(e, PO, "true"), LO(e, !1);
|
|
}))
|
|
: ((e.readonly = !1),
|
|
e.hasEditableRoot() && LO(n, !0),
|
|
q(zo(n, `*[${PO}="true"]`), e => {
|
|
rn(e, PO), LO(e, !0);
|
|
}),
|
|
DO(e, "StyleWithCSS", !1),
|
|
DO(e, "enableInlineTableEditing", !1),
|
|
DO(e, "enableObjectResizing", !1),
|
|
Hg(e) && e.focus(),
|
|
(e => {
|
|
e.selection.setRng(e.selection.getRng());
|
|
})(e),
|
|
e.nodeChanged());
|
|
})(e, s.editorReadOnly),
|
|
t.set(o),
|
|
((e, t) => {
|
|
e.dispatch("SwitchMode", {mode: t});
|
|
})(e, o);
|
|
},
|
|
tB = Dt.each,
|
|
nB = Dt.explode,
|
|
oB = {
|
|
f1: 112,
|
|
f2: 113,
|
|
f3: 114,
|
|
f4: 115,
|
|
f5: 116,
|
|
f6: 117,
|
|
f7: 118,
|
|
f8: 119,
|
|
f9: 120,
|
|
f10: 121,
|
|
f11: 122,
|
|
f12: 123
|
|
},
|
|
rB = Dt.makeMap("alt,ctrl,shift,meta,access"),
|
|
sB = e => {
|
|
const t = {},
|
|
n = Tt.os.isMacOS() || Tt.os.isiOS();
|
|
tB(nB(e.toLowerCase(), "+"), e => {
|
|
(e => e in rB)(e)
|
|
? (t[e] = !0)
|
|
: /^[0-9]{2,}$/.test(e)
|
|
? (t.keyCode = parseInt(e, 10))
|
|
: ((t.charCode = e.charCodeAt(0)), (t.keyCode = oB[e] || e.toUpperCase().charCodeAt(0)));
|
|
});
|
|
const o = [t.keyCode];
|
|
let r;
|
|
for (r in rB) t[r] ? o.push(r) : (t[r] = !1);
|
|
return (
|
|
(t.id = o.join(",")),
|
|
t.access && ((t.alt = !0), n ? (t.ctrl = !0) : (t.shift = !0)),
|
|
t.meta && (n ? (t.meta = !0) : ((t.ctrl = !0), (t.meta = !1))),
|
|
t
|
|
);
|
|
};
|
|
class aB {
|
|
constructor(e) {
|
|
(this.shortcuts = {}), (this.pendingPatterns = []), (this.editor = e);
|
|
const t = this;
|
|
e.on("keyup keypress keydown", e => {
|
|
(!t.hasModifier(e) && !t.isFunctionKey(e)) ||
|
|
e.isDefaultPrevented() ||
|
|
(tB(t.shortcuts, n => {
|
|
t.matchShortcut(e, n) &&
|
|
((t.pendingPatterns = n.subpatterns.slice(0)), "keydown" === e.type && t.executeShortcutAction(n));
|
|
}),
|
|
t.matchShortcut(e, t.pendingPatterns[0]) &&
|
|
(1 === t.pendingPatterns.length && "keydown" === e.type && t.executeShortcutAction(t.pendingPatterns[0]),
|
|
t.pendingPatterns.shift()));
|
|
});
|
|
}
|
|
add(e, t, n, o) {
|
|
const r = this,
|
|
s = r.normalizeCommandFunc(n);
|
|
return (
|
|
tB(nB(Dt.trim(e)), e => {
|
|
const n = r.createShortcut(e, t, s, o);
|
|
r.shortcuts[n.id] = n;
|
|
}),
|
|
!0
|
|
);
|
|
}
|
|
remove(e) {
|
|
const t = this.createShortcut(e);
|
|
return !!this.shortcuts[t.id] && (delete this.shortcuts[t.id], !0);
|
|
}
|
|
normalizeCommandFunc(e) {
|
|
const t = this,
|
|
n = e;
|
|
return "string" == typeof n
|
|
? () => {
|
|
t.editor.execCommand(n, !1, null);
|
|
}
|
|
: Dt.isArray(n)
|
|
? () => {
|
|
t.editor.execCommand(n[0], n[1], n[2]);
|
|
}
|
|
: n;
|
|
}
|
|
createShortcut(e, t, n, o) {
|
|
const r = Dt.map(nB(e, ">"), sB);
|
|
return (
|
|
(r[r.length - 1] = Dt.extend(r[r.length - 1], {func: n, scope: o || this.editor})),
|
|
Dt.extend(r[0], {desc: this.editor.translate(t), subpatterns: r.slice(1)})
|
|
);
|
|
}
|
|
hasModifier(e) {
|
|
return e.altKey || e.ctrlKey || e.metaKey;
|
|
}
|
|
isFunctionKey(e) {
|
|
return "keydown" === e.type && e.keyCode >= 112 && e.keyCode <= 123;
|
|
}
|
|
matchShortcut(e, t) {
|
|
return (
|
|
!!t &&
|
|
t.ctrl === e.ctrlKey &&
|
|
t.meta === e.metaKey &&
|
|
t.alt === e.altKey &&
|
|
t.shift === e.shiftKey &&
|
|
!!(e.keyCode === t.keyCode || (e.charCode && e.charCode === t.charCode)) &&
|
|
(e.preventDefault(), !0)
|
|
);
|
|
}
|
|
executeShortcutAction(e) {
|
|
return e.func ? e.func.call(e.scope) : null;
|
|
}
|
|
}
|
|
const iB = () => {
|
|
const e = (() => {
|
|
const e = {},
|
|
t = {},
|
|
n = {},
|
|
o = {},
|
|
r = {},
|
|
s = {},
|
|
a = {},
|
|
i = {},
|
|
l = (e, t) => (n, o) => {
|
|
e[n.toLowerCase()] = {...o, type: t};
|
|
};
|
|
return {
|
|
addButton: l(e, "button"),
|
|
addGroupToolbarButton: l(e, "grouptoolbarbutton"),
|
|
addToggleButton: l(e, "togglebutton"),
|
|
addMenuButton: l(e, "menubutton"),
|
|
addSplitButton: l(e, "splitbutton"),
|
|
addMenuItem: l(t, "menuitem"),
|
|
addNestedMenuItem: l(t, "nestedmenuitem"),
|
|
addToggleMenuItem: l(t, "togglemenuitem"),
|
|
addAutocompleter: l(n, "autocompleter"),
|
|
addContextMenu: l(r, "contextmenu"),
|
|
addContextToolbar: l(s, "contexttoolbar"),
|
|
addContextForm: l(s, "contextform"),
|
|
addSidebar: l(a, "sidebar"),
|
|
addView: l(i, "views"),
|
|
addIcon: (e, t) => (o[e.toLowerCase()] = t),
|
|
getAll: () => ({
|
|
buttons: e,
|
|
menuItems: t,
|
|
icons: o,
|
|
popups: n,
|
|
contextMenus: r,
|
|
contextToolbars: s,
|
|
sidebars: a,
|
|
views: i
|
|
})
|
|
};
|
|
})();
|
|
return {
|
|
addAutocompleter: e.addAutocompleter,
|
|
addButton: e.addButton,
|
|
addContextForm: e.addContextForm,
|
|
addContextMenu: e.addContextMenu,
|
|
addContextToolbar: e.addContextToolbar,
|
|
addIcon: e.addIcon,
|
|
addMenuButton: e.addMenuButton,
|
|
addMenuItem: e.addMenuItem,
|
|
addNestedMenuItem: e.addNestedMenuItem,
|
|
addSidebar: e.addSidebar,
|
|
addSplitButton: e.addSplitButton,
|
|
addToggleButton: e.addToggleButton,
|
|
addGroupToolbarButton: e.addGroupToolbarButton,
|
|
addToggleMenuItem: e.addToggleMenuItem,
|
|
addView: e.addView,
|
|
getAll: e.getAll
|
|
};
|
|
},
|
|
lB = fa.DOM,
|
|
dB = Dt.extend,
|
|
cB = Dt.each;
|
|
class uB {
|
|
constructor(e, t, n) {
|
|
(this.plugins = {}),
|
|
(this.contentCSS = []),
|
|
(this.contentStyles = []),
|
|
(this.loadedCSS = {}),
|
|
(this.isNotDirty = !1),
|
|
(this.composing = !1),
|
|
(this.destroyed = !1),
|
|
(this.hasHiddenInput = !1),
|
|
(this.iframeElement = null),
|
|
(this.initialized = !1),
|
|
(this.readonly = !1),
|
|
(this.removed = !1),
|
|
(this.startContent = ""),
|
|
(this._pendingNativeEvents = []),
|
|
(this._skinLoaded = !1),
|
|
(this._editableRoot = !0),
|
|
(this.editorManager = n),
|
|
(this.documentBaseUrl = n.documentBaseURL),
|
|
dB(this, YO);
|
|
const o = this;
|
|
(this.id = e), (this.hidden = !1);
|
|
const r = ((e, t) => pO(lO || dO, lO, t, e, t))(n.defaultOptions, t);
|
|
(this.options = ((e, t) => {
|
|
const n = {},
|
|
o = {},
|
|
r = (e, t, n) => {
|
|
const r = QO(t, n);
|
|
return ZO(r)
|
|
? ((o[e] = r.value), !0)
|
|
: (console.warn(XO(`Invalid value passed for the ${e} option`, r)), !1);
|
|
},
|
|
s = e => ke(n, e);
|
|
return {
|
|
register: (e, s) => {
|
|
const a = (e => m(e.processor))(s)
|
|
? (e => {
|
|
const t = (() => {
|
|
switch (e) {
|
|
case "array":
|
|
return p;
|
|
case "boolean":
|
|
return b;
|
|
case "function":
|
|
return w;
|
|
case "number":
|
|
return x;
|
|
case "object":
|
|
return f;
|
|
case "string":
|
|
return m;
|
|
case "string[]":
|
|
return GO;
|
|
case "object[]":
|
|
return e => E(e, f);
|
|
case "regexp":
|
|
return e => u(e, RegExp);
|
|
default:
|
|
return M;
|
|
}
|
|
})();
|
|
return n => QO(n, t, `The value must be a ${e}.`);
|
|
})(s.processor)
|
|
: s.processor,
|
|
i = ((e, t, n) => {
|
|
if (!v(t)) {
|
|
const o = QO(t, n);
|
|
if (ZO(o)) return o.value;
|
|
console.error(XO(`Invalid default value passed for the "${e}" option`, o));
|
|
}
|
|
})(e, s.default, a);
|
|
(n[e] = {...s, default: i, processor: a}),
|
|
Ee(o, e)
|
|
.orThunk(() => Ee(t, e))
|
|
.each(t => r(e, t, a));
|
|
},
|
|
isRegistered: s,
|
|
get: e =>
|
|
Ee(o, e)
|
|
.orThunk(() => Ee(n, e).map(e => e.default))
|
|
.getOrUndefined(),
|
|
set: (e, t) => {
|
|
if (s(e)) {
|
|
const o = n[e];
|
|
return o.immutable
|
|
? (console.error(`"${e}" is an immutable option and cannot be updated`), !1)
|
|
: r(e, t, o.processor);
|
|
}
|
|
return (
|
|
console.warn(
|
|
`"${e}" is not a registered option. Ensure the option has been registered before setting a value.`
|
|
),
|
|
!1
|
|
);
|
|
},
|
|
unset: e => {
|
|
const t = s(e);
|
|
return t && delete o[e], t;
|
|
},
|
|
isSet: e => ke(o, e)
|
|
};
|
|
})(0, r)),
|
|
(e => {
|
|
const t = e.options.register;
|
|
t("id", {processor: "string", default: e.id}),
|
|
t("selector", {processor: "string"}),
|
|
t("target", {processor: "object"}),
|
|
t("suffix", {processor: "string"}),
|
|
t("cache_suffix", {processor: "string"}),
|
|
t("base_url", {processor: "string"}),
|
|
t("referrer_policy", {processor: "string", default: ""}),
|
|
t("language_load", {processor: "boolean", default: !0}),
|
|
t("inline", {processor: "boolean", default: !1}),
|
|
t("iframe_attrs", {processor: "object", default: {}}),
|
|
t("doctype", {processor: "string", default: "<!DOCTYPE html>"}),
|
|
t("document_base_url", {processor: "string", default: e.documentBaseUrl}),
|
|
t("body_id", {processor: Fl(e, "tinymce"), default: "tinymce"}),
|
|
t("body_class", {processor: Fl(e), default: ""}),
|
|
t("content_security_policy", {processor: "string", default: ""}),
|
|
t("br_in_pre", {processor: "boolean", default: !0}),
|
|
t("forced_root_block", {
|
|
processor: e => {
|
|
const t = m(e) && Ge(e);
|
|
return t ? {value: e, valid: t} : {valid: !1, message: "Must be a non-empty string."};
|
|
},
|
|
default: "p"
|
|
}),
|
|
t("forced_root_block_attrs", {processor: "object", default: {}}),
|
|
t("newline_behavior", {
|
|
processor: e => {
|
|
const t = H(["block", "linebreak", "invert", "default"], e);
|
|
return t
|
|
? {value: e, valid: t}
|
|
: {valid: !1, message: "Must be one of: block, linebreak, invert or default."};
|
|
},
|
|
default: "default"
|
|
}),
|
|
t("br_newline_selector", {processor: "string", default: ".mce-toc h2,figcaption,caption"}),
|
|
t("no_newline_selector", {processor: "string", default: ""}),
|
|
t("keep_styles", {processor: "boolean", default: !0}),
|
|
t("end_container_on_empty_block", {
|
|
processor: e =>
|
|
b(e) || m(e) ? {valid: !0, value: e} : {valid: !1, message: "Must be boolean or a string"},
|
|
default: "blockquote"
|
|
}),
|
|
t("font_size_style_values", {
|
|
processor: "string",
|
|
default: "xx-small,x-small,small,medium,large,x-large,xx-large"
|
|
}),
|
|
t("font_size_legacy_values", {
|
|
processor: "string",
|
|
default: "xx-small,small,medium,large,x-large,xx-large,300%"
|
|
}),
|
|
t("font_size_classes", {processor: "string", default: ""}),
|
|
t("automatic_uploads", {processor: "boolean", default: !0}),
|
|
t("images_reuse_filename", {processor: "boolean", default: !1}),
|
|
t("images_replace_blob_uris", {processor: "boolean", default: !0}),
|
|
t("icons", {processor: "string", default: ""}),
|
|
t("icons_url", {processor: "string", default: ""}),
|
|
t("images_upload_url", {processor: "string", default: ""}),
|
|
t("images_upload_base_path", {processor: "string", default: ""}),
|
|
t("images_upload_credentials", {processor: "boolean", default: !1}),
|
|
t("images_upload_handler", {processor: "function"}),
|
|
t("language", {processor: "string", default: "en"}),
|
|
t("language_url", {processor: "string", default: ""}),
|
|
t("entity_encoding", {processor: "string", default: "named"}),
|
|
t("indent", {processor: "boolean", default: !0}),
|
|
t("indent_before", {
|
|
processor: "string",
|
|
default:
|
|
"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,details,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist"
|
|
}),
|
|
t("indent_after", {
|
|
processor: "string",
|
|
default:
|
|
"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,details,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist"
|
|
}),
|
|
t("indent_use_margin", {processor: "boolean", default: !1}),
|
|
t("indentation", {processor: "string", default: "40px"}),
|
|
t("content_css", {
|
|
processor: e => {
|
|
const t = !1 === e || m(e) || E(e, m);
|
|
return t
|
|
? m(e)
|
|
? {value: V(e.split(","), We), valid: t}
|
|
: p(e)
|
|
? {value: e, valid: t}
|
|
: !1 === e
|
|
? {value: [], valid: t}
|
|
: {value: e, valid: t}
|
|
: {valid: !1, message: "Must be false, a string or an array of strings."};
|
|
},
|
|
default: Dd(e) ? [] : ["default"]
|
|
}),
|
|
t("content_style", {processor: "string"}),
|
|
t("content_css_cors", {processor: "boolean", default: !1}),
|
|
t("font_css", {
|
|
processor: e => {
|
|
const t = m(e) || E(e, m);
|
|
return t
|
|
? {value: p(e) ? e : V(e.split(","), We), valid: t}
|
|
: {valid: !1, message: "Must be a string or an array of strings."};
|
|
},
|
|
default: []
|
|
}),
|
|
t("inline_boundaries", {processor: "boolean", default: !0}),
|
|
t("inline_boundaries_selector", {processor: "string", default: "a[href],code,span.mce-annotation"}),
|
|
t("object_resizing", {
|
|
processor: e => {
|
|
const t = b(e) || m(e);
|
|
return t
|
|
? !1 === e || Bl.isiPhone() || Bl.isiPad()
|
|
? {value: "", valid: t}
|
|
: {value: !0 === e ? "table,img,figure.image,div,video,iframe" : e, valid: t}
|
|
: {valid: !1, message: "Must be boolean or a string"};
|
|
},
|
|
default: !Pl
|
|
}),
|
|
t("resize_img_proportional", {processor: "boolean", default: !0}),
|
|
t("event_root", {processor: "string"}),
|
|
t("service_message", {processor: "string"}),
|
|
t("theme", {processor: e => !1 === e || m(e) || w(e), default: "silver"}),
|
|
t("theme_url", {processor: "string"}),
|
|
t("formats", {processor: "object"}),
|
|
t("format_empty_lines", {processor: "boolean", default: !1}),
|
|
t("format_noneditable_selector", {processor: "string", default: ""}),
|
|
t("preview_styles", {
|
|
processor: e => {
|
|
const t = !1 === e || m(e);
|
|
return t ? {value: !1 === e ? "" : e, valid: t} : {valid: !1, message: "Must be false or a string"};
|
|
},
|
|
default:
|
|
"font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow"
|
|
}),
|
|
t("custom_ui_selector", {processor: "string", default: ""}),
|
|
t("hidden_input", {processor: "boolean", default: !0}),
|
|
t("submit_patch", {processor: "boolean", default: !0}),
|
|
t("encoding", {processor: "string"}),
|
|
t("add_form_submit_trigger", {processor: "boolean", default: !0}),
|
|
t("add_unload_trigger", {processor: "boolean", default: !0}),
|
|
t("custom_undo_redo_levels", {processor: "number", default: 0}),
|
|
t("disable_nodechange", {processor: "boolean", default: !1}),
|
|
t("readonly", {processor: "boolean", default: !1}),
|
|
t("editable_root", {processor: "boolean", default: !0}),
|
|
t("plugins", {processor: "string[]", default: []}),
|
|
t("external_plugins", {processor: "object"}),
|
|
t("forced_plugins", {processor: "string[]"}),
|
|
t("model", {processor: "string", default: e.hasPlugin("rtc") ? "plugin" : "dom"}),
|
|
t("model_url", {processor: "string"}),
|
|
t("block_unsupported_drop", {processor: "boolean", default: !0}),
|
|
t("visual", {processor: "boolean", default: !0}),
|
|
t("visual_table_class", {processor: "string", default: "mce-item-table"}),
|
|
t("visual_anchor_class", {processor: "string", default: "mce-item-anchor"}),
|
|
t("iframe_aria_text", {processor: "string", default: "Rich Text Area. Press ALT-0 for help."}),
|
|
t("setup", {processor: "function"}),
|
|
t("init_instance_callback", {processor: "function"}),
|
|
t("url_converter", {processor: "function", default: e.convertURL}),
|
|
t("url_converter_scope", {processor: "object", default: e}),
|
|
t("urlconverter_callback", {processor: "function"}),
|
|
t("allow_conditional_comments", {processor: "boolean", default: !1}),
|
|
t("allow_html_data_urls", {processor: "boolean", default: !1}),
|
|
t("allow_svg_data_urls", {processor: "boolean"}),
|
|
t("allow_html_in_named_anchor", {processor: "boolean", default: !1}),
|
|
t("allow_script_urls", {processor: "boolean", default: !1}),
|
|
t("allow_unsafe_link_target", {processor: "boolean", default: !1}),
|
|
t("convert_fonts_to_spans", {processor: "boolean", default: !0, deprecated: !0}),
|
|
t("fix_list_elements", {processor: "boolean", default: !1}),
|
|
t("preserve_cdata", {processor: "boolean", default: !1}),
|
|
t("remove_trailing_brs", {processor: "boolean", default: !0}),
|
|
t("pad_empty_with_br", {processor: "boolean", default: !1}),
|
|
t("inline_styles", {processor: "boolean", default: !0, deprecated: !0}),
|
|
t("element_format", {processor: "string", default: "html"}),
|
|
t("entities", {processor: "string"}),
|
|
t("schema", {processor: "string", default: "html5"}),
|
|
t("convert_urls", {processor: "boolean", default: !0}),
|
|
t("relative_urls", {processor: "boolean", default: !0}),
|
|
t("remove_script_host", {processor: "boolean", default: !0}),
|
|
t("custom_elements", {processor: Il}),
|
|
t("extended_valid_elements", {processor: "string"}),
|
|
t("invalid_elements", {processor: "string"}),
|
|
t("invalid_styles", {processor: Il}),
|
|
t("valid_children", {processor: "string"}),
|
|
t("valid_classes", {processor: Il}),
|
|
t("valid_elements", {processor: "string"}),
|
|
t("valid_styles", {processor: Il}),
|
|
t("verify_html", {processor: "boolean", default: !0}),
|
|
t("auto_focus", {processor: e => m(e) || !0 === e}),
|
|
t("browser_spellcheck", {processor: "boolean", default: !1}),
|
|
t("protect", {processor: "array"}),
|
|
t("images_file_types", {processor: "string", default: "jpeg,jpg,jpe,jfi,jif,jfif,png,gif,bmp,webp"}),
|
|
t("deprecation_warnings", {processor: "boolean", default: !0}),
|
|
t("a11y_advanced_options", {processor: "boolean", default: !1}),
|
|
t("api_key", {processor: "string"}),
|
|
t("license_key", {processor: "string"}),
|
|
t("paste_block_drop", {processor: "boolean", default: !1}),
|
|
t("paste_data_images", {processor: "boolean", default: !0}),
|
|
t("paste_preprocess", {processor: "function"}),
|
|
t("paste_postprocess", {processor: "function"}),
|
|
t("paste_webkit_styles", {processor: "string", default: "none"}),
|
|
t("paste_remove_styles_if_webkit", {processor: "boolean", default: !0}),
|
|
t("paste_merge_formats", {processor: "boolean", default: !0}),
|
|
t("smart_paste", {processor: "boolean", default: !0}),
|
|
t("paste_as_text", {processor: "boolean", default: !1}),
|
|
t("paste_tab_spaces", {processor: "number", default: 4}),
|
|
t("text_patterns", {
|
|
processor: e =>
|
|
E(e, f) || !1 === e
|
|
? {value: Ol(!1 === e ? [] : e), valid: !0}
|
|
: {valid: !1, message: "Must be an array of objects or false."},
|
|
default: [
|
|
{start: "*", end: "*", format: "italic"},
|
|
{start: "**", end: "**", format: "bold"},
|
|
{start: "#", format: "h1", trigger: "space"},
|
|
{start: "##", format: "h2", trigger: "space"},
|
|
{start: "###", format: "h3", trigger: "space"},
|
|
{start: "####", format: "h4", trigger: "space"},
|
|
{start: "#####", format: "h5", trigger: "space"},
|
|
{start: "######", format: "h6", trigger: "space"},
|
|
{start: "1.", cmd: "InsertOrderedList", trigger: "space"},
|
|
{start: "*", cmd: "InsertUnorderedList", trigger: "space"},
|
|
{start: "-", cmd: "InsertUnorderedList", trigger: "space"},
|
|
{start: ">", cmd: "mceBlockQuote", trigger: "space"},
|
|
{start: "---", cmd: "InsertHorizontalRule", trigger: "space"}
|
|
]
|
|
}),
|
|
t("text_patterns_lookup", {
|
|
processor: e => {
|
|
return w(e)
|
|
? {
|
|
value:
|
|
((t = e),
|
|
e => {
|
|
const n = t(e);
|
|
return Ol(n);
|
|
}),
|
|
valid: !0
|
|
}
|
|
: {valid: !1, message: "Must be a single function"};
|
|
var t;
|
|
},
|
|
default: e => []
|
|
}),
|
|
t("noneditable_class", {processor: "string", default: "mceNonEditable"}),
|
|
t("editable_class", {processor: "string", default: "mceEditable"}),
|
|
t("noneditable_regexp", {
|
|
processor: e =>
|
|
E(e, Ll)
|
|
? {value: e, valid: !0}
|
|
: Ll(e)
|
|
? {value: [e], valid: !0}
|
|
: {valid: !1, message: "Must be a RegExp or an array of RegExp."},
|
|
default: []
|
|
}),
|
|
t("table_tab_navigation", {processor: "boolean", default: !0}),
|
|
t("highlight_on_focus", {processor: "boolean", default: !0}),
|
|
t("xss_sanitization", {processor: "boolean", default: !0}),
|
|
t("details_initial_state", {
|
|
processor: e => {
|
|
const t = H(["inherited", "collapsed", "expanded"], e);
|
|
return t
|
|
? {value: e, valid: t}
|
|
: {valid: !1, message: "Must be one of: inherited, collapsed, or expanded."};
|
|
},
|
|
default: "inherited"
|
|
}),
|
|
t("details_serialized_state", {
|
|
processor: e => {
|
|
const t = H(["inherited", "collapsed", "expanded"], e);
|
|
return t
|
|
? {value: e, valid: t}
|
|
: {valid: !1, message: "Must be one of: inherited, collapsed, or expanded."};
|
|
},
|
|
default: "inherited"
|
|
}),
|
|
t("init_content_sync", {processor: "boolean", default: !1}),
|
|
t("newdocument_content", {processor: "string", default: ""}),
|
|
t("sandbox_iframes", {processor: "boolean", default: !0}),
|
|
t("sandbox_iframes_exclusions", {
|
|
processor: "string[]",
|
|
default: [
|
|
"youtube.com",
|
|
"youtu.be",
|
|
"vimeo.com",
|
|
"player.vimeo.com",
|
|
"dailymotion.com",
|
|
"embed.music.apple.com",
|
|
"open.spotify.com",
|
|
"giphy.com",
|
|
"dai.ly",
|
|
"codepen.io"
|
|
]
|
|
}),
|
|
t("convert_unsafe_embeds", {processor: "boolean", default: !0}),
|
|
e.on("ScriptsLoaded", () => {
|
|
t("directionality", {processor: "string", default: ya.isRtl() ? "rtl" : void 0}),
|
|
t("placeholder", {processor: "string", default: Dl.getAttrib(e.getElement(), "placeholder")});
|
|
});
|
|
})(o);
|
|
const s = this.options.get;
|
|
s("deprecation_warnings") &&
|
|
((e, t) => {
|
|
((e, t) => {
|
|
const n = xw(e),
|
|
o = _w(t),
|
|
r = o.length > 0,
|
|
s = n.length > 0,
|
|
a = "mobile" === t.theme;
|
|
if (r || s || a) {
|
|
const e = "\n- ",
|
|
t = a ? `\n\nThemes:${e}mobile` : "",
|
|
i = r ? `\n\nPlugins:${e}${o.join(e)}` : "",
|
|
l = s ? `\n\nOptions:${e}${n.join(e)}` : "";
|
|
console.warn(
|
|
"The following deprecated features are currently enabled and have been removed in TinyMCE 7.0. These features will no longer work and should be removed from the TinyMCE configuration. See https://www.tiny.cloud/docs/tinymce/7/migration-from-6x/ for more information." +
|
|
t +
|
|
i +
|
|
l
|
|
);
|
|
}
|
|
})(e, t),
|
|
((e, t) => {
|
|
const n = Ew(e),
|
|
o = Sw(t),
|
|
r = o.length > 0,
|
|
s = n.length > 0;
|
|
if (r || s) {
|
|
const e = "\n- ",
|
|
t = r ? `\n\nPlugins:${e}${o.map(Nw).join(e)}` : "",
|
|
a = s ? `\n\nOptions:${e}${n.join(e)}` : "";
|
|
console.warn(
|
|
"The following deprecated features are currently enabled but will be removed soon." + t + a
|
|
);
|
|
}
|
|
})(e, t);
|
|
})(t, r);
|
|
const a = s("suffix");
|
|
a && (n.suffix = a), (this.suffix = n.suffix);
|
|
const i = s("base_url");
|
|
i && n._setBaseUrl(i), (this.baseUri = n.baseURI);
|
|
const l = dd(o);
|
|
l && (pa.ScriptLoader._setReferrerPolicy(l), fa.DOM.styleSheetLoader._setReferrerPolicy(l));
|
|
const d = $d(o);
|
|
C(d) && fa.DOM.styleSheetLoader._setContentCssCors(d),
|
|
(Ca.languageLoad = s("language_load")),
|
|
(Ca.baseURL = n.baseURL),
|
|
this.setDirty(!1),
|
|
(this.documentBaseURI = new cC(jl(o), {base_uri: this.baseUri})),
|
|
(this.baseURI = this.baseUri),
|
|
(this.inline = Dd(o)),
|
|
(this.hasVisual = Kd(o)),
|
|
(this.shortcuts = new aB(this)),
|
|
(this.editorCommands = new BO(this)),
|
|
AO(this);
|
|
const c = s("cache_suffix");
|
|
c && (Tt.cacheSuffix = c.replace(/^[\?\&]+/, "")),
|
|
(this.ui = {registry: iB(), styleSheetLoader: void 0, show: k, hide: k, setEnabled: k, isEnabled: M}),
|
|
(this.mode = (e => {
|
|
const t = Br("design"),
|
|
n = Br({
|
|
design: {activate: k, deactivate: k, editorReadOnly: !1},
|
|
readonly: {activate: k, deactivate: k, editorReadOnly: !0}
|
|
});
|
|
return (
|
|
(e => {
|
|
e.serializer
|
|
? IO(e)
|
|
: e.on("PreInit", () => {
|
|
IO(e);
|
|
});
|
|
})(e),
|
|
(e => {
|
|
e.on("ShowCaret", t => {
|
|
MO(e) && t.preventDefault();
|
|
}),
|
|
e.on("ObjectSelected", t => {
|
|
MO(e) && t.preventDefault();
|
|
});
|
|
})(e),
|
|
{
|
|
isReadOnly: () => MO(e),
|
|
set: o =>
|
|
((e, t, n, o) => {
|
|
if (o !== n.get()) {
|
|
if (!ke(t, o)) throw new Error(`Editor mode '${o}' is invalid`);
|
|
e.initialized ? eB(e, n, t, o) : e.on("init", () => eB(e, n, t, o));
|
|
}
|
|
})(e, n.get(), t, o),
|
|
get: () => t.get(),
|
|
register: (e, t) => {
|
|
n.set(
|
|
((e, t, n) => {
|
|
if (H(JO, t)) throw new Error(`Cannot override default mode ${t}`);
|
|
return {
|
|
...e,
|
|
[t]: {
|
|
...n,
|
|
deactivate: () => {
|
|
try {
|
|
n.deactivate();
|
|
} catch (e) {
|
|
console.error(`problem while deactivating editor mode ${t}:`, e);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
})(n.get(), e, t)
|
|
);
|
|
}
|
|
}
|
|
);
|
|
})(o)),
|
|
n.dispatch("SetupEditor", {editor: this});
|
|
const g = Zd(o);
|
|
w(g) && g.call(o, o);
|
|
}
|
|
render() {
|
|
(e => {
|
|
const t = e.id;
|
|
ya.setCode(cd(e));
|
|
const n = () => {
|
|
oO.unbind(window, "ready", n), e.render();
|
|
};
|
|
if (!oa.Event.domLoaded) return void oO.bind(window, "ready", n);
|
|
if (!e.getElement()) return;
|
|
const o = Cn(e.getElement()),
|
|
r = sn(o);
|
|
e.on("remove", () => {
|
|
W(o.dom.attributes, e => rn(o, e.name)), en(o, r);
|
|
}),
|
|
(e.ui.styleSheetLoader = ((e, t) => rs.forElement(e, {contentCssCors: $d(t), referrerPolicy: dd(t)}))(o, e)),
|
|
Dd(e)
|
|
? (e.inline = !0)
|
|
: ((e.orgVisibility = e.getElement().style.visibility), (e.getElement().style.visibility = "hidden"));
|
|
const s = e.getElement().form || oO.getParent(t, "form");
|
|
s &&
|
|
((e.formElement = s),
|
|
Ld(e) &&
|
|
!lr(e.getElement()) &&
|
|
(oO.insertAfter(oO.create("input", {type: "hidden", name: t}), t), (e.hasHiddenInput = !0)),
|
|
(e.formEventDelegate = t => {
|
|
e.dispatch(t.type, t);
|
|
}),
|
|
oO.bind(s, "submit reset", e.formEventDelegate),
|
|
e.on("reset", () => {
|
|
e.resetContent();
|
|
}),
|
|
!Md(e) ||
|
|
s.submit.nodeType ||
|
|
s.submit.length ||
|
|
s._mceOldSubmit ||
|
|
((s._mceOldSubmit = s.submit),
|
|
(s.submit = () => (e.editorManager.triggerSave(), e.setDirty(!1), s._mceOldSubmit(s))))),
|
|
(e.windowManager = jw(e)),
|
|
(e.notificationManager = Fw(e)),
|
|
(e => "xml" === e.options.get("encoding"))(e) &&
|
|
e.on("GetContent", e => {
|
|
e.save && (e.content = oO.encode(e.content));
|
|
}),
|
|
Id(e) &&
|
|
e.on("submit", () => {
|
|
e.initialized && e.save();
|
|
}),
|
|
Fd(e) &&
|
|
((e._beforeUnload = () => {
|
|
!e.initialized || e.destroyed || e.isHidden() || e.save({format: "raw", no_events: !0, set_dirty: !1});
|
|
}),
|
|
e.editorManager.on("BeforeUnload", e._beforeUnload)),
|
|
e.editorManager.add(e),
|
|
aO(e, e.suffix);
|
|
})(this);
|
|
}
|
|
focus(e) {
|
|
this.execCommand("mceFocus", !1, e);
|
|
}
|
|
hasFocus() {
|
|
return jg(this);
|
|
}
|
|
translate(e) {
|
|
return ya.translate(e);
|
|
}
|
|
getParam(e, t, n) {
|
|
const o = this.options;
|
|
return (
|
|
o.isRegistered(e) ||
|
|
(C(n) ? o.register(e, {processor: n, default: t}) : o.register(e, {processor: M, default: t})),
|
|
o.isSet(e) || v(t) ? o.get(e) : t
|
|
);
|
|
}
|
|
hasPlugin(e, t) {
|
|
return !(!H(Vd(this), e) || (t && void 0 === Uw.get(e)));
|
|
}
|
|
nodeChanged(e) {
|
|
this._nodeChangeDispatcher.nodeChanged(e);
|
|
}
|
|
addCommand(e, t, n) {
|
|
this.editorCommands.addCommand(e, t, n);
|
|
}
|
|
addQueryStateHandler(e, t, n) {
|
|
this.editorCommands.addQueryStateHandler(e, t, n);
|
|
}
|
|
addQueryValueHandler(e, t, n) {
|
|
this.editorCommands.addQueryValueHandler(e, t, n);
|
|
}
|
|
addShortcut(e, t, n, o) {
|
|
this.shortcuts.add(e, t, n, o);
|
|
}
|
|
execCommand(e, t, n, o) {
|
|
return this.editorCommands.execCommand(e, t, n, o);
|
|
}
|
|
queryCommandState(e) {
|
|
return this.editorCommands.queryCommandState(e);
|
|
}
|
|
queryCommandValue(e) {
|
|
return this.editorCommands.queryCommandValue(e);
|
|
}
|
|
queryCommandSupported(e) {
|
|
return this.editorCommands.queryCommandSupported(e);
|
|
}
|
|
show() {
|
|
const e = this;
|
|
e.hidden &&
|
|
((e.hidden = !1),
|
|
e.inline ? (e.getBody().contentEditable = "true") : (lB.show(e.getContainer()), lB.hide(e.id)),
|
|
e.load(),
|
|
e.dispatch("show"));
|
|
}
|
|
hide() {
|
|
const e = this;
|
|
e.hidden ||
|
|
(e.save(),
|
|
e.inline
|
|
? ((e.getBody().contentEditable = "false"),
|
|
e === e.editorManager.focusedEditor && (e.editorManager.focusedEditor = null))
|
|
: (lB.hide(e.getContainer()), lB.setStyle(e.id, "display", e.orgDisplay)),
|
|
(e.hidden = !0),
|
|
e.dispatch("hide"));
|
|
}
|
|
isHidden() {
|
|
return this.hidden;
|
|
}
|
|
setProgressState(e, t) {
|
|
this.dispatch("ProgressState", {state: e, time: t});
|
|
}
|
|
load(e = {}) {
|
|
const t = this,
|
|
n = t.getElement();
|
|
if (t.removed) return "";
|
|
if (n) {
|
|
const o = {...e, load: !0},
|
|
r = lr(n) ? n.value : n.innerHTML,
|
|
s = t.setContent(r, o);
|
|
return o.no_events || t.dispatch("LoadContent", {...o, element: n}), s;
|
|
}
|
|
return "";
|
|
}
|
|
save(e = {}) {
|
|
const t = this;
|
|
let n = t.getElement();
|
|
if (!n || !t.initialized || t.removed) return "";
|
|
const o = {...e, save: !0, element: n};
|
|
let r = t.getContent(o);
|
|
const s = {...o, content: r};
|
|
if (
|
|
(s.no_events || t.dispatch("SaveContent", s),
|
|
"raw" === s.format && t.dispatch("RawSaveContent", s),
|
|
(r = s.content),
|
|
lr(n))
|
|
)
|
|
n.value = r;
|
|
else {
|
|
(!e.is_removing && t.inline) || (n.innerHTML = r);
|
|
const o = lB.getParent(t.id, "form");
|
|
o && cB(o.elements, e => e.name !== t.id || ((e.value = r), !1));
|
|
}
|
|
return (s.element = o.element = n = null), !1 !== s.set_dirty && t.setDirty(!1), r;
|
|
}
|
|
setContent(e, t) {
|
|
return hw(this, e, t);
|
|
}
|
|
getContent(e) {
|
|
return ((e, t = {}) => {
|
|
const n = ((e, t) => ({...e, format: t, get: !0, getInner: !0}))(t, t.format ? t.format : "html");
|
|
return NC(e, n).fold(R, t => {
|
|
const n = ((e, t) => sw(e).editor.getContent(t))(e, t);
|
|
return RC(e, n, t);
|
|
});
|
|
})(this, e);
|
|
}
|
|
insertContent(e, t) {
|
|
t && (e = dB({content: e}, t)), this.execCommand("mceInsertContent", !1, e);
|
|
}
|
|
resetContent(e) {
|
|
void 0 === e ? hw(this, this.startContent, {format: "raw"}) : hw(this, e),
|
|
this.undoManager.reset(),
|
|
this.setDirty(!1),
|
|
this.nodeChanged();
|
|
}
|
|
isDirty() {
|
|
return !this.isNotDirty;
|
|
}
|
|
setDirty(e) {
|
|
const t = !this.isNotDirty;
|
|
(this.isNotDirty = !e), e && e !== t && this.dispatch("dirty");
|
|
}
|
|
getContainer() {
|
|
const e = this;
|
|
return e.container || (e.container = e.editorContainer || lB.get(e.id + "_parent")), e.container;
|
|
}
|
|
getContentAreaContainer() {
|
|
return this.contentAreaContainer;
|
|
}
|
|
getElement() {
|
|
return this.targetElm || (this.targetElm = lB.get(this.id)), this.targetElm;
|
|
}
|
|
getWin() {
|
|
const e = this;
|
|
if (!e.contentWindow) {
|
|
const t = e.iframeElement;
|
|
t && (e.contentWindow = t.contentWindow);
|
|
}
|
|
return e.contentWindow;
|
|
}
|
|
getDoc() {
|
|
const e = this;
|
|
if (!e.contentDocument) {
|
|
const t = e.getWin();
|
|
t && (e.contentDocument = t.document);
|
|
}
|
|
return e.contentDocument;
|
|
}
|
|
getBody() {
|
|
var e, t;
|
|
const n = this.getDoc();
|
|
return null !== (t = null !== (e = this.bodyElement) && void 0 !== e ? e : null == n ? void 0 : n.body) &&
|
|
void 0 !== t
|
|
? t
|
|
: null;
|
|
}
|
|
convertURL(e, t, n) {
|
|
const o = this,
|
|
r = o.options.get,
|
|
s = Jd(o);
|
|
if (w(s)) return s.call(o, e, n, !0, t);
|
|
if (
|
|
!r("convert_urls") ||
|
|
"link" === n ||
|
|
(f(n) && "LINK" === n.nodeName) ||
|
|
0 === e.indexOf("file:") ||
|
|
0 === e.length
|
|
)
|
|
return e;
|
|
const a = new cC(e);
|
|
return "http" !== a.protocol && "https" !== a.protocol && "" !== a.protocol
|
|
? e
|
|
: r("relative_urls")
|
|
? o.documentBaseURI.toRelative(e)
|
|
: (e = o.documentBaseURI.toAbsolute(e, r("remove_script_host")));
|
|
}
|
|
addVisual(e) {
|
|
((e, t) => {
|
|
((e, t) => {
|
|
aw(e).editor.addVisual(t);
|
|
})(e, t);
|
|
})(this, e);
|
|
}
|
|
setEditableRoot(e) {
|
|
((e, t) => {
|
|
e._editableRoot !== t &&
|
|
((e._editableRoot = t),
|
|
e.readonly || ((e.getBody().contentEditable = String(e.hasEditableRoot())), e.nodeChanged()),
|
|
((e, t) => {
|
|
e.dispatch("EditableRootStateChange", {state: t});
|
|
})(e, t));
|
|
})(this, e);
|
|
}
|
|
hasEditableRoot() {
|
|
return this._editableRoot;
|
|
}
|
|
remove() {
|
|
(e => {
|
|
if (!e.removed) {
|
|
const {_selectionOverrides: t, editorUpload: n} = e,
|
|
o = e.getBody(),
|
|
r = e.getElement();
|
|
o && e.save({is_removing: !0}),
|
|
(e.removed = !0),
|
|
e.unbindAllNativeEvents(),
|
|
e.hasHiddenInput && C(null == r ? void 0 : r.nextSibling) && Rw.remove(r.nextSibling),
|
|
(e => {
|
|
e.dispatch("remove");
|
|
})(e),
|
|
e.editorManager.remove(e),
|
|
!e.inline &&
|
|
o &&
|
|
(e => {
|
|
Rw.setStyle(e.id, "display", e.orgDisplay);
|
|
})(e),
|
|
(e => {
|
|
e.dispatch("detach");
|
|
})(e),
|
|
Rw.remove(e.getContainer()),
|
|
Aw(t),
|
|
Aw(n),
|
|
e.destroy();
|
|
}
|
|
})(this);
|
|
}
|
|
destroy(e) {
|
|
((e, t) => {
|
|
const {selection: n, dom: o} = e;
|
|
e.destroyed ||
|
|
(t || e.removed
|
|
? (t ||
|
|
(e.editorManager.off("beforeunload", e._beforeUnload),
|
|
e.theme && e.theme.destroy && e.theme.destroy(),
|
|
Aw(n),
|
|
Aw(o)),
|
|
(e => {
|
|
const t = e.formElement;
|
|
t &&
|
|
(t._mceOldSubmit && ((t.submit = t._mceOldSubmit), delete t._mceOldSubmit),
|
|
Rw.unbind(t, "submit reset", e.formEventDelegate));
|
|
})(e),
|
|
(e => {
|
|
const t = e;
|
|
(t.contentAreaContainer = t.formElement = t.container = t.editorContainer = null),
|
|
(t.bodyElement = t.contentDocument = t.contentWindow = null),
|
|
(t.iframeElement = t.targetElm = null);
|
|
const n = e.selection;
|
|
if (n) {
|
|
const e = n.dom;
|
|
t.selection = n.win = n.dom = e.doc = null;
|
|
}
|
|
})(e),
|
|
(e.destroyed = !0))
|
|
: e.remove());
|
|
})(this, e);
|
|
}
|
|
uploadImages() {
|
|
return this.editorUpload.uploadImages();
|
|
}
|
|
_scanForImages() {
|
|
return this.editorUpload.scanForImages();
|
|
}
|
|
}
|
|
const mB = fa.DOM,
|
|
fB = Dt.each;
|
|
let gB,
|
|
pB = !1,
|
|
hB = [];
|
|
const bB = e => {
|
|
const t = e.type;
|
|
fB(wB.get(), n => {
|
|
switch (t) {
|
|
case "scroll":
|
|
n.dispatch("ScrollWindow", e);
|
|
break;
|
|
case "resize":
|
|
n.dispatch("ResizeWindow", e);
|
|
}
|
|
});
|
|
},
|
|
vB = e => {
|
|
if (e !== pB) {
|
|
const t = fa.DOM;
|
|
e
|
|
? (t.bind(window, "resize", bB), t.bind(window, "scroll", bB))
|
|
: (t.unbind(window, "resize", bB), t.unbind(window, "scroll", bB)),
|
|
(pB = e);
|
|
}
|
|
},
|
|
yB = e => {
|
|
const t = hB;
|
|
return (
|
|
(hB = Y(hB, t => e !== t)),
|
|
wB.activeEditor === e && (wB.activeEditor = hB.length > 0 ? hB[0] : null),
|
|
wB.focusedEditor === e && (wB.focusedEditor = null),
|
|
t.length !== hB.length
|
|
);
|
|
},
|
|
CB = "CSS1Compat" !== document.compatMode,
|
|
wB = {
|
|
...HO,
|
|
baseURI: null,
|
|
baseURL: null,
|
|
defaultOptions: {},
|
|
documentBaseURL: null,
|
|
suffix: null,
|
|
majorVersion: "7",
|
|
minorVersion: "1.0",
|
|
releaseDate: "2024-05-08",
|
|
i18n: ya,
|
|
activeEditor: null,
|
|
focusedEditor: null,
|
|
setup() {
|
|
const e = this;
|
|
let t = "",
|
|
n = "",
|
|
o = cC.getDocumentBaseUrl(document.location);
|
|
/^[^:]+:\/\/\/?[^\/]+\//.test(o) &&
|
|
((o = o.replace(/[\?#].*$/, "").replace(/[\/\\][^\/]+$/, "")), /[\/\\]$/.test(o) || (o += "/"));
|
|
const r = window.tinymce || window.tinyMCEPreInit;
|
|
if (r) (t = r.base || r.baseURL), (n = r.suffix);
|
|
else {
|
|
const e = document.getElementsByTagName("script");
|
|
for (let o = 0; o < e.length; o++) {
|
|
const r = e[o].src || "";
|
|
if ("" === r) continue;
|
|
const s = r.substring(r.lastIndexOf("/"));
|
|
if (/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(r)) {
|
|
-1 !== s.indexOf(".min") && (n = ".min"), (t = r.substring(0, r.lastIndexOf("/")));
|
|
break;
|
|
}
|
|
}
|
|
if (!t && document.currentScript) {
|
|
const e = document.currentScript.src;
|
|
-1 !== e.indexOf(".min") && (n = ".min"), (t = e.substring(0, e.lastIndexOf("/")));
|
|
}
|
|
}
|
|
var s;
|
|
(e.baseURL = new cC(o).toAbsolute(t)),
|
|
(e.documentBaseURL = o),
|
|
(e.baseURI = new cC(e.baseURL)),
|
|
(e.suffix = n),
|
|
(s = e).on("AddEditor", T(Ig, s)),
|
|
s.on("RemoveEditor", T(Fg, s));
|
|
},
|
|
overrideDefaults(e) {
|
|
const t = e.base_url;
|
|
t && this._setBaseUrl(t);
|
|
const n = e.suffix;
|
|
n && (this.suffix = n), (this.defaultOptions = e);
|
|
const o = e.plugin_base_urls;
|
|
void 0 !== o &&
|
|
pe(o, (e, t) => {
|
|
Ca.PluginManager.urls[t] = e;
|
|
});
|
|
},
|
|
init(e) {
|
|
const t = this;
|
|
let n;
|
|
const o = Dt.makeMap(
|
|
"area base basefont br col frame hr img input isindex link meta param embed source wbr track colgroup option table tbody tfoot thead tr th td script noscript style textarea video audio iframe object menu",
|
|
" "
|
|
);
|
|
let r = e => {
|
|
n = e;
|
|
};
|
|
const s = () => {
|
|
let n = 0;
|
|
const a = [];
|
|
let i;
|
|
mB.unbind(window, "ready", s),
|
|
(n => {
|
|
const o = e.onpageload;
|
|
o && o.apply(t, []);
|
|
})(),
|
|
(i = me(
|
|
(e =>
|
|
Tt.browser.isIE() || Tt.browser.isEdge()
|
|
? (Ww(
|
|
"TinyMCE does not support the browser you are using. For a list of supported browsers please see: https://www.tiny.cloud/docs/tinymce/7/support/#supportedwebbrowsers"
|
|
),
|
|
[])
|
|
: CB
|
|
? (Ww(
|
|
"Failed to initialize the editor as the document is not in standards mode. TinyMCE requires standards mode."
|
|
),
|
|
[])
|
|
: m(e.selector)
|
|
? mB.select(e.selector)
|
|
: C(e.target)
|
|
? [e.target]
|
|
: [])(e)
|
|
)),
|
|
Dt.each(i, e => {
|
|
var n;
|
|
(n = t.get(e.id)) &&
|
|
n.initialized &&
|
|
!(n.getContainer() || n.getBody()).parentNode &&
|
|
(yB(n), n.unbindAllNativeEvents(), n.destroy(!0), (n.removed = !0));
|
|
}),
|
|
(i = Dt.grep(i, e => !t.get(e.id))),
|
|
0 === i.length
|
|
? r([])
|
|
: fB(i, s => {
|
|
((e, t) => e.inline && t.tagName.toLowerCase() in o)(e, s)
|
|
? Ww("Could not initialize inline editor on invalid inline target element", s)
|
|
: ((e, o, s) => {
|
|
const l = new uB(e, o, t);
|
|
a.push(l),
|
|
l.on("init", () => {
|
|
++n === i.length && r(a);
|
|
}),
|
|
(l.targetElm = l.targetElm || s),
|
|
l.render();
|
|
})(
|
|
(e => {
|
|
let t = e.id;
|
|
return (
|
|
t ||
|
|
((t = Ee(e, "name")
|
|
.filter(e => !mB.get(e))
|
|
.getOrThunk(mB.uniqueId)),
|
|
e.setAttribute("id", t)),
|
|
t
|
|
);
|
|
})(s),
|
|
e,
|
|
s
|
|
);
|
|
});
|
|
};
|
|
return (
|
|
mB.bind(window, "ready", s),
|
|
new Promise(e => {
|
|
n
|
|
? e(n)
|
|
: (r = t => {
|
|
e(t);
|
|
});
|
|
})
|
|
);
|
|
},
|
|
get(e) {
|
|
return 0 === arguments.length
|
|
? hB.slice(0)
|
|
: m(e)
|
|
? Q(hB, t => t.id === e).getOr(null)
|
|
: x(e) && hB[e]
|
|
? hB[e]
|
|
: null;
|
|
},
|
|
add(e) {
|
|
const t = this,
|
|
n = t.get(e.id);
|
|
return (
|
|
n === e ||
|
|
(null === n && hB.push(e),
|
|
vB(!0),
|
|
(t.activeEditor = e),
|
|
t.dispatch("AddEditor", {editor: e}),
|
|
gB ||
|
|
((gB = e => {
|
|
const n = t.dispatch("BeforeUnload");
|
|
if (n.returnValue) return e.preventDefault(), (e.returnValue = n.returnValue), n.returnValue;
|
|
}),
|
|
window.addEventListener("beforeunload", gB))),
|
|
e
|
|
);
|
|
},
|
|
createEditor(e, t) {
|
|
return this.add(new uB(e, t, this));
|
|
},
|
|
remove(e) {
|
|
const t = this;
|
|
let n;
|
|
if (e) {
|
|
if (!m(e))
|
|
return (
|
|
(n = e),
|
|
h(t.get(n.id))
|
|
? null
|
|
: (yB(n) && t.dispatch("RemoveEditor", {editor: n}),
|
|
0 === hB.length && window.removeEventListener("beforeunload", gB),
|
|
n.remove(),
|
|
vB(hB.length > 0),
|
|
n)
|
|
);
|
|
fB(mB.select(e), e => {
|
|
(n = t.get(e.id)), n && t.remove(n);
|
|
});
|
|
} else for (let e = hB.length - 1; e >= 0; e--) t.remove(hB[e]);
|
|
},
|
|
execCommand(e, t, n) {
|
|
var o;
|
|
const r = this,
|
|
s = f(n) ? (null !== (o = n.id) && void 0 !== o ? o : n.index) : n;
|
|
switch (e) {
|
|
case "mceAddEditor":
|
|
if (!r.get(s)) {
|
|
const e = n.options;
|
|
new uB(s, e, r).render();
|
|
}
|
|
return !0;
|
|
case "mceRemoveEditor": {
|
|
const e = r.get(s);
|
|
return e && e.remove(), !0;
|
|
}
|
|
case "mceToggleEditor": {
|
|
const e = r.get(s);
|
|
return e ? (e.isHidden() ? e.show() : e.hide(), !0) : (r.execCommand("mceAddEditor", !1, n), !0);
|
|
}
|
|
}
|
|
return !!r.activeEditor && r.activeEditor.execCommand(e, t, n);
|
|
},
|
|
triggerSave: () => {
|
|
fB(hB, e => {
|
|
e.save();
|
|
});
|
|
},
|
|
addI18n: (e, t) => {
|
|
ya.add(e, t);
|
|
},
|
|
translate: e => ya.translate(e),
|
|
setActive(e) {
|
|
const t = this.activeEditor;
|
|
this.activeEditor !== e &&
|
|
(t && t.dispatch("deactivate", {relatedTarget: e}), e.dispatch("activate", {relatedTarget: t})),
|
|
(this.activeEditor = e);
|
|
},
|
|
_setBaseUrl(e) {
|
|
(this.baseURL = new cC(this.documentBaseURL).toAbsolute(e.replace(/\/+$/, ""))),
|
|
(this.baseURI = new cC(this.baseURL));
|
|
}
|
|
};
|
|
wB.setup();
|
|
const xB = (() => {
|
|
const e = Dr();
|
|
return {
|
|
FakeClipboardItem: e => ({items: e, types: fe(e), getType: t => Ee(e, t).getOrUndefined()}),
|
|
write: t => {
|
|
e.set(t);
|
|
},
|
|
read: () => e.get().getOrUndefined(),
|
|
clear: e.clear
|
|
};
|
|
})(),
|
|
EB = Math.min,
|
|
kB = Math.max,
|
|
_B = Math.round,
|
|
SB = (e, t, n) => {
|
|
let o = t.x,
|
|
r = t.y;
|
|
const s = e.w,
|
|
a = e.h,
|
|
i = t.w,
|
|
l = t.h,
|
|
d = (n || "").split("");
|
|
return (
|
|
"b" === d[0] && (r += l),
|
|
"r" === d[1] && (o += i),
|
|
"c" === d[0] && (r += _B(l / 2)),
|
|
"c" === d[1] && (o += _B(i / 2)),
|
|
"b" === d[3] && (r -= a),
|
|
"r" === d[4] && (o -= s),
|
|
"c" === d[3] && (r -= _B(a / 2)),
|
|
"c" === d[4] && (o -= _B(s / 2)),
|
|
NB(o, r, s, a)
|
|
);
|
|
},
|
|
NB = (e, t, n, o) => ({x: e, y: t, w: n, h: o}),
|
|
RB = {
|
|
inflate: (e, t, n) => NB(e.x - t, e.y - n, e.w + 2 * t, e.h + 2 * n),
|
|
relativePosition: SB,
|
|
findBestRelativePosition: (e, t, n, o) => {
|
|
for (let r = 0; r < o.length; r++) {
|
|
const s = SB(e, t, o[r]);
|
|
if (s.x >= n.x && s.x + s.w <= n.w + n.x && s.y >= n.y && s.y + s.h <= n.h + n.y) return o[r];
|
|
}
|
|
return null;
|
|
},
|
|
intersect: (e, t) => {
|
|
const n = kB(e.x, t.x),
|
|
o = kB(e.y, t.y),
|
|
r = EB(e.x + e.w, t.x + t.w),
|
|
s = EB(e.y + e.h, t.y + t.h);
|
|
return r - n < 0 || s - o < 0 ? null : NB(n, o, r - n, s - o);
|
|
},
|
|
clamp: (e, t, n) => {
|
|
let o = e.x,
|
|
r = e.y,
|
|
s = e.x + e.w,
|
|
a = e.y + e.h;
|
|
const i = t.x + t.w,
|
|
l = t.y + t.h,
|
|
d = kB(0, t.x - o),
|
|
c = kB(0, t.y - r),
|
|
u = kB(0, s - i),
|
|
m = kB(0, a - l);
|
|
return (
|
|
(o += d), (r += c), n && ((s += d), (a += c), (o -= u), (r -= m)), (s -= u), (a -= m), NB(o, r, s - o, a - r)
|
|
);
|
|
},
|
|
create: NB,
|
|
fromClientRect: e => NB(e.left, e.top, e.width, e.height)
|
|
},
|
|
AB = (() => {
|
|
const e = {},
|
|
t = {},
|
|
n = {};
|
|
return {
|
|
load: (n, o) => {
|
|
const r = `Script at URL "${o}" failed to load`,
|
|
s = `Script at URL "${o}" did not call \`tinymce.Resource.add('${n}', data)\` within 1 second`;
|
|
if (void 0 !== e[n]) return e[n];
|
|
{
|
|
const a = new Promise((e, a) => {
|
|
const i = ((e, t, n = 1e3) => {
|
|
let o = !1,
|
|
r = null;
|
|
const s =
|
|
e =>
|
|
(...t) => {
|
|
o || ((o = !0), null !== r && (clearTimeout(r), (r = null)), e.apply(null, t));
|
|
},
|
|
a = s(e),
|
|
i = s(t);
|
|
return {
|
|
start: (...e) => {
|
|
o || null !== r || (r = setTimeout(() => i.apply(null, e), n));
|
|
},
|
|
resolve: a,
|
|
reject: i
|
|
};
|
|
})(e, a);
|
|
(t[n] = i.resolve),
|
|
pa.ScriptLoader.loadScript(o).then(
|
|
() => i.start(s),
|
|
() => i.reject(r)
|
|
);
|
|
});
|
|
return (e[n] = a), a;
|
|
}
|
|
},
|
|
add: (o, r) => {
|
|
void 0 !== t[o] && (t[o](r), delete t[o]), (e[o] = Promise.resolve(r)), (n[o] = r);
|
|
},
|
|
has: e => e in n,
|
|
get: e => n[e],
|
|
unload: t => {
|
|
delete e[t], delete n[t];
|
|
}
|
|
};
|
|
})();
|
|
let TB;
|
|
try {
|
|
const e = "__storage_test__";
|
|
(TB = window.localStorage), TB.setItem(e, e), TB.removeItem(e);
|
|
} catch (e) {
|
|
TB = (() => {
|
|
let e = {},
|
|
t = [];
|
|
const n = {
|
|
getItem: t => e[t] || null,
|
|
setItem: (n, o) => {
|
|
t.push(n), (e[n] = String(o));
|
|
},
|
|
key: e => t[e],
|
|
removeItem: n => {
|
|
(t = t.filter(e => e === n)), delete e[n];
|
|
},
|
|
clear: () => {
|
|
(t = []), (e = {});
|
|
},
|
|
length: 0
|
|
};
|
|
return Object.defineProperty(n, "length", {get: () => t.length, configurable: !1, enumerable: !1}), n;
|
|
})();
|
|
}
|
|
const OB = {
|
|
geom: {Rect: RB},
|
|
util: {
|
|
Delay: Og,
|
|
Tools: Dt,
|
|
VK: Cf,
|
|
URI: cC,
|
|
EventDispatcher: zO,
|
|
Observable: HO,
|
|
I18n: ya,
|
|
LocalStorage: TB,
|
|
ImageUploader: e => {
|
|
const t = Xw(),
|
|
n = ex(e, t);
|
|
return {upload: (t, o = !0) => n.upload(t, o ? Jw(e) : void 0)};
|
|
}
|
|
},
|
|
dom: {
|
|
EventUtils: oa,
|
|
TreeWalker: Vo,
|
|
TextSeeker: za,
|
|
DOMUtils: fa,
|
|
ScriptLoader: pa,
|
|
RangeUtils: Qf,
|
|
Serializer: pw,
|
|
StyleSheetLoader: os,
|
|
ControlSelection: _f,
|
|
BookmarkManager: uf,
|
|
Selection: mw,
|
|
Event: oa.Event
|
|
},
|
|
html: {Styles: Ys, Entities: ws, Node: ep, Schema: Fs, DomParser: kC, Writer: vp, Serializer: yp},
|
|
Env: Tt,
|
|
AddOnManager: Ca,
|
|
Annotator: cf,
|
|
Formatter: mx,
|
|
UndoManager: gx,
|
|
EditorCommands: BO,
|
|
WindowManager: jw,
|
|
NotificationManager: Fw,
|
|
EditorObservable: YO,
|
|
Shortcuts: aB,
|
|
Editor: uB,
|
|
FocusManager: Tg,
|
|
EditorManager: wB,
|
|
DOM: fa.DOM,
|
|
ScriptLoader: pa.ScriptLoader,
|
|
PluginManager: Uw,
|
|
ThemeManager: zw,
|
|
ModelManager: Ow,
|
|
IconManager: Tw,
|
|
Resource: AB,
|
|
FakeClipboard: xB,
|
|
trim: Dt.trim,
|
|
isArray: Dt.isArray,
|
|
is: Dt.is,
|
|
toArray: Dt.toArray,
|
|
makeMap: Dt.makeMap,
|
|
each: Dt.each,
|
|
map: Dt.map,
|
|
grep: Dt.grep,
|
|
inArray: Dt.inArray,
|
|
extend: Dt.extend,
|
|
walk: Dt.walk,
|
|
resolve: Dt.resolve,
|
|
explode: Dt.explode,
|
|
_addCacheSuffix: Dt._addCacheSuffix
|
|
},
|
|
BB = Dt.extend(wB, OB);
|
|
(e => {
|
|
(window.tinymce = e), (window.tinyMCE = e);
|
|
})(BB),
|
|
(e => {
|
|
if ("object" == typeof module)
|
|
try {
|
|
module.exports = e;
|
|
} catch (e) {}
|
|
})(BB);
|
|
})();
|