1041 lines
32 KiB
JavaScript
1041 lines
32 KiB
JavaScript
/**
|
|
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
|
|
* Licensed under the LGPL or a commercial license.
|
|
* For LGPL see License.txt in the project root for license information.
|
|
* For commercial licenses see https://www.tiny.cloud/
|
|
*
|
|
* Version: 5.10.0 (2021-10-11)
|
|
*/
|
|
/*!
|
|
* Tiny FormatPainter plugin
|
|
*
|
|
* Copyright 2010-2021 Tiny Technologies, Inc. All rights reserved.
|
|
*
|
|
* Version: 1.2.0-36
|
|
*/
|
|
!function(m) {
|
|
"use strict";
|
|
var l = function(e) {
|
|
var r = e
|
|
, n = function() {
|
|
return r
|
|
};
|
|
return {
|
|
get: n,
|
|
set: function(e) {
|
|
r = e
|
|
},
|
|
clone: function() {
|
|
return l(n())
|
|
}
|
|
}
|
|
}
|
|
, n = function(e) {
|
|
return parseInt(e, 10)
|
|
}
|
|
, i = function(e, r) {
|
|
var n = e - r;
|
|
return 0 === n ? 0 : 0 < n ? 1 : -1
|
|
}
|
|
, t = function(e, r, n) {
|
|
return {
|
|
major: e,
|
|
minor: r,
|
|
patch: n
|
|
}
|
|
}
|
|
, o = function(e) {
|
|
var r = /([0-9]+)\.([0-9]+)\.([0-9]+)(?:(\-.+)?)/.exec(e);
|
|
return r ? t(n(r[1]), n(r[2]), n(r[3])) : t(0, 0, 0)
|
|
}
|
|
, d = function(e, r) {
|
|
return !!e && -1 === function(e, r) {
|
|
var n = i(e.major, r.major);
|
|
if (0 !== n)
|
|
return n;
|
|
var t = i(e.minor, r.minor);
|
|
if (0 !== t)
|
|
return t;
|
|
var o = i(e.patch, r.patch);
|
|
return 0 !== o ? o : 0
|
|
}(o([(n = e).majorVersion, n.minorVersion].join(".").split(".").slice(0, 3).join(".")), o(r));
|
|
var n
|
|
}
|
|
, a = function() {
|
|
return (a = Object.assign || function(e) {
|
|
for (var r, n = 1, t = arguments.length; n < t; n++)
|
|
for (var o in r = arguments[n])
|
|
Object.prototype.hasOwnProperty.call(r, o) && (e[o] = r[o]);
|
|
return e
|
|
}
|
|
).apply(this, arguments)
|
|
};
|
|
function c() {
|
|
for (var e = 0, r = 0, n = arguments.length; r < n; r++)
|
|
e += arguments[r].length;
|
|
var t = Array(e)
|
|
, o = 0;
|
|
for (r = 0; r < n; r++)
|
|
for (var i = arguments[r], a = 0, u = i.length; a < u; a++,
|
|
o++)
|
|
t[o] = i[a];
|
|
return t
|
|
}
|
|
var e, r, u, s, f, v, g, p, h, b, y, S, O, N = function() {}, w = function(e) {
|
|
return function() {
|
|
return e
|
|
}
|
|
}, T = w(!1), x = w(!0), E = function() {
|
|
return k(0, 0)
|
|
}, k = function(e, r) {
|
|
return {
|
|
major: e,
|
|
minor: r
|
|
}
|
|
}, _ = {
|
|
nu: k,
|
|
detect: function(e, r) {
|
|
var n = String(r).toLowerCase();
|
|
return 0 === e.length ? E() : function(e, r) {
|
|
var n = function(e, r) {
|
|
for (var n = 0; n < e.length; n++) {
|
|
var t = e[n];
|
|
if (t.test(r))
|
|
return t
|
|
}
|
|
}(e, r);
|
|
if (!n)
|
|
return {
|
|
major: 0,
|
|
minor: 0
|
|
};
|
|
var t = function(e) {
|
|
return Number(r.replace(n, "$" + e))
|
|
};
|
|
return k(t(1), t(2))
|
|
}(e, n)
|
|
},
|
|
unknown: E
|
|
}, A = "Edge", D = "Chrome", C = "Opera", R = "Firefox", L = "Safari", P = function(e, r) {
|
|
return function() {
|
|
return r === e
|
|
}
|
|
}, I = function(e) {
|
|
var r = e.current;
|
|
return {
|
|
current: r,
|
|
version: e.version,
|
|
isEdge: P(A, r),
|
|
isChrome: P(D, r),
|
|
isIE: P("IE", r),
|
|
isOpera: P(C, r),
|
|
isFirefox: P(R, r),
|
|
isSafari: P(L, r)
|
|
}
|
|
}, F = {
|
|
unknown: function() {
|
|
return I({
|
|
current: void 0,
|
|
version: _.unknown()
|
|
})
|
|
},
|
|
nu: I,
|
|
edge: w(A),
|
|
chrome: w(D),
|
|
ie: w("IE"),
|
|
opera: w(C),
|
|
firefox: w(R),
|
|
safari: w(L)
|
|
}, M = "Windows", B = "Android", j = "Linux", U = "Solaris", V = "FreeBSD", q = "ChromeOS", z = function(e, r) {
|
|
return function() {
|
|
return r === e
|
|
}
|
|
}, X = function(e) {
|
|
var r = e.current;
|
|
return {
|
|
current: r,
|
|
version: e.version,
|
|
isWindows: z(M, r),
|
|
isiOS: z("iOS", r),
|
|
isAndroid: z(B, r),
|
|
isOSX: z("OSX", r),
|
|
isLinux: z(j, r),
|
|
isSolaris: z(U, r),
|
|
isFreeBSD: z(V, r),
|
|
isChromeOS: z(q, r)
|
|
}
|
|
}, H = {
|
|
unknown: function() {
|
|
return X({
|
|
current: void 0,
|
|
version: _.unknown()
|
|
})
|
|
},
|
|
nu: X,
|
|
windows: w(M),
|
|
ios: w("iOS"),
|
|
android: w(B),
|
|
linux: w(j),
|
|
osx: w("OSX"),
|
|
solaris: w(U),
|
|
freebsd: w(V),
|
|
chromeos: w(q)
|
|
}, W = function() {
|
|
return Y
|
|
}, Y = (e = function(e) {
|
|
return e.isNone()
|
|
}
|
|
,
|
|
s = {
|
|
fold: function(e, r) {
|
|
return e()
|
|
},
|
|
is: T,
|
|
isSome: T,
|
|
isNone: x,
|
|
getOr: u = function(e) {
|
|
return e
|
|
}
|
|
,
|
|
getOrThunk: r = function(e) {
|
|
return e()
|
|
}
|
|
,
|
|
getOrDie: function(e) {
|
|
throw new Error(e || "error: getOrDie called on none.")
|
|
},
|
|
getOrNull: w(null),
|
|
getOrUndefined: w(void 0),
|
|
or: u,
|
|
orThunk: r,
|
|
map: W,
|
|
each: N,
|
|
bind: W,
|
|
exists: T,
|
|
forall: x,
|
|
filter: W,
|
|
equals: e,
|
|
equals_: e,
|
|
toArray: function() {
|
|
return []
|
|
},
|
|
toString: w("none()")
|
|
},
|
|
Object.freeze && Object.freeze(s),
|
|
s), G = function(n) {
|
|
var e = w(n)
|
|
, r = function() {
|
|
return o
|
|
}
|
|
, t = function(e) {
|
|
return e(n)
|
|
}
|
|
, o = {
|
|
fold: function(e, r) {
|
|
return r(n)
|
|
},
|
|
is: function(e) {
|
|
return n === e
|
|
},
|
|
isSome: x,
|
|
isNone: T,
|
|
getOr: e,
|
|
getOrThunk: e,
|
|
getOrDie: e,
|
|
getOrNull: e,
|
|
getOrUndefined: e,
|
|
or: r,
|
|
orThunk: r,
|
|
map: function(e) {
|
|
return G(e(n))
|
|
},
|
|
each: function(e) {
|
|
e(n)
|
|
},
|
|
bind: t,
|
|
exists: t,
|
|
forall: t,
|
|
filter: function(e) {
|
|
return e(n) ? o : Y
|
|
},
|
|
toArray: function() {
|
|
return [n]
|
|
},
|
|
toString: function() {
|
|
return "some(" + n + ")"
|
|
},
|
|
equals: function(e) {
|
|
return e.is(n)
|
|
},
|
|
equals_: function(e, r) {
|
|
return e.fold(T, function(e) {
|
|
return r(n, e)
|
|
})
|
|
}
|
|
};
|
|
return o
|
|
}, $ = {
|
|
some: G,
|
|
none: W,
|
|
from: function(e) {
|
|
return null == e ? Y : G(e)
|
|
}
|
|
}, K = function(r) {
|
|
return function(e) {
|
|
return function(e) {
|
|
if (null === e)
|
|
return "null";
|
|
var r = typeof e;
|
|
return "object" === r && (Array.prototype.isPrototypeOf(e) || e.constructor && "Array" === e.constructor.name) ? "array" : "object" === r && (String.prototype.isPrototypeOf(e) || e.constructor && "String" === e.constructor.name) ? "string" : r
|
|
}(e) === r
|
|
}
|
|
}, Z = K("string"), J = K("array"), Q = K("boolean"), ee = K("function"), re = K("number"), ne = Array.prototype.slice, te = Array.prototype.indexOf, oe = Array.prototype.push, ie = function(e, r) {
|
|
return n = e,
|
|
t = r,
|
|
-1 < te.call(n, t);
|
|
var n, t
|
|
}, ae = function(e, r) {
|
|
for (var n = 0, t = e.length; n < t; n++) {
|
|
if (r(e[n], n))
|
|
return !0
|
|
}
|
|
return !1
|
|
}, ue = function(e, r) {
|
|
for (var n = e.length, t = new Array(n), o = 0; o < n; o++) {
|
|
var i = e[o];
|
|
t[o] = r(i, o)
|
|
}
|
|
return t
|
|
}, ce = function(e, r) {
|
|
for (var n = [], t = 0, o = e.length; t < o; t++) {
|
|
var i = e[t];
|
|
r(i, t) && n.push(i)
|
|
}
|
|
return n
|
|
}, se = function(e, r) {
|
|
for (var n = 0, t = e.length; n < t; n++) {
|
|
var o = e[n];
|
|
if (r(o, n))
|
|
return $.some(o)
|
|
}
|
|
return $.none()
|
|
}, fe = function(e, r) {
|
|
return function(e) {
|
|
for (var r = [], n = 0, t = e.length; n < t; ++n) {
|
|
if (!J(e[n]))
|
|
throw new Error("Arr.flatten item " + n + " was not an array, input: " + e);
|
|
oe.apply(r, e[n])
|
|
}
|
|
return r
|
|
}(ue(e, r))
|
|
}, me = (ee(Array.from) && Array.from,
|
|
function(e, r) {
|
|
var n = String(r).toLowerCase();
|
|
return se(e, function(e) {
|
|
return e.search(n)
|
|
})
|
|
}
|
|
), le = function(e, n) {
|
|
return me(e, n).map(function(e) {
|
|
var r = _.detect(e.versionRegexes, n);
|
|
return {
|
|
current: e.name,
|
|
version: r
|
|
}
|
|
})
|
|
}, de = function(e, n) {
|
|
return me(e, n).map(function(e) {
|
|
var r = _.detect(e.versionRegexes, n);
|
|
return {
|
|
current: e.name,
|
|
version: r
|
|
}
|
|
})
|
|
}, ve = function(e, r) {
|
|
return -1 !== e.indexOf(r)
|
|
}, ge = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/, pe = function(r) {
|
|
return function(e) {
|
|
return ve(e, r)
|
|
}
|
|
}, he = [{
|
|
name: "Edge",
|
|
versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
|
|
search: function(e) {
|
|
return ve(e, "edge/") && ve(e, "chrome") && ve(e, "safari") && ve(e, "applewebkit")
|
|
}
|
|
}, {
|
|
name: "Chrome",
|
|
versionRegexes: [/.*?chrome\/([0-9]+)\.([0-9]+).*/, ge],
|
|
search: function(e) {
|
|
return ve(e, "chrome") && !ve(e, "chromeframe")
|
|
}
|
|
}, {
|
|
name: "IE",
|
|
versionRegexes: [/.*?msie\ ?([0-9]+)\.([0-9]+).*/, /.*?rv:([0-9]+)\.([0-9]+).*/],
|
|
search: function(e) {
|
|
return ve(e, "msie") || ve(e, "trident")
|
|
}
|
|
}, {
|
|
name: "Opera",
|
|
versionRegexes: [ge, /.*?opera\/([0-9]+)\.([0-9]+).*/],
|
|
search: pe("opera")
|
|
}, {
|
|
name: "Firefox",
|
|
versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],
|
|
search: pe("firefox")
|
|
}, {
|
|
name: "Safari",
|
|
versionRegexes: [ge, /.*?cpu os ([0-9]+)_([0-9]+).*/],
|
|
search: function(e) {
|
|
return (ve(e, "safari") || ve(e, "mobile/")) && ve(e, "applewebkit")
|
|
}
|
|
}], be = [{
|
|
name: "Windows",
|
|
search: pe("win"),
|
|
versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
|
|
}, {
|
|
name: "iOS",
|
|
search: function(e) {
|
|
return ve(e, "iphone") || ve(e, "ipad")
|
|
},
|
|
versionRegexes: [/.*?version\/\ ?([0-9]+)\.([0-9]+).*/, /.*cpu os ([0-9]+)_([0-9]+).*/, /.*cpu iphone os ([0-9]+)_([0-9]+).*/]
|
|
}, {
|
|
name: "Android",
|
|
search: pe("android"),
|
|
versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]
|
|
}, {
|
|
name: "OSX",
|
|
search: pe("mac os x"),
|
|
versionRegexes: [/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]
|
|
}, {
|
|
name: "Linux",
|
|
search: pe("linux"),
|
|
versionRegexes: []
|
|
}, {
|
|
name: "Solaris",
|
|
search: pe("sunos"),
|
|
versionRegexes: []
|
|
}, {
|
|
name: "FreeBSD",
|
|
search: pe("freebsd"),
|
|
versionRegexes: []
|
|
}, {
|
|
name: "ChromeOS",
|
|
search: pe("cros"),
|
|
versionRegexes: [/.*?chrome\/([0-9]+)\.([0-9]+).*/]
|
|
}], ye = {
|
|
browsers: w(he),
|
|
oses: w(be)
|
|
}, Se = l(function(e, r) {
|
|
var n, t, o, i, a, u, c, s, f, m, l, d, v = ye.browsers(), g = ye.oses(), p = le(v, e).fold(F.unknown, F.nu), h = de(g, e).fold(H.unknown, H.nu);
|
|
return {
|
|
browser: p,
|
|
os: h,
|
|
deviceType: (t = p,
|
|
o = e,
|
|
i = r,
|
|
a = (n = h).isiOS() && !0 === /ipad/i.test(o),
|
|
u = n.isiOS() && !a,
|
|
c = n.isiOS() || n.isAndroid(),
|
|
s = c || i("(pointer:coarse)"),
|
|
f = a || !u && c && i("(min-device-width:768px)"),
|
|
m = u || c && !f,
|
|
l = t.isSafari() && n.isiOS() && !1 === /safari/i.test(o),
|
|
d = !m && !f && !l,
|
|
{
|
|
isiPad: w(a),
|
|
isiPhone: w(u),
|
|
isTablet: w(f),
|
|
isPhone: w(m),
|
|
isTouch: w(s),
|
|
isAndroid: n.isAndroid,
|
|
isiOS: n.isiOS,
|
|
isWebView: w(l),
|
|
isDesktop: w(d)
|
|
})
|
|
}
|
|
}(m.navigator.userAgent, function(e) {
|
|
return m.window.matchMedia(e).matches
|
|
})), Oe = function() {
|
|
return Se.get()
|
|
}, Ne = Object.keys, we = Object.hasOwnProperty, Te = function(e, r) {
|
|
for (var n = Ne(e), t = 0, o = n.length; t < o; t++) {
|
|
var i = n[t];
|
|
r(e[i], i)
|
|
}
|
|
}, xe = function(e, t) {
|
|
var o = {};
|
|
return Te(e, function(e, r) {
|
|
var n = t(e, r);
|
|
o[n.k] = n.v
|
|
}),
|
|
o
|
|
}, Ee = function(n) {
|
|
return function(e, r) {
|
|
n[r] = e
|
|
}
|
|
}, ke = function(e, r) {
|
|
var n, t, o, i, a = {}, u = {};
|
|
return n = e,
|
|
t = r,
|
|
o = Ee(a),
|
|
i = Ee(u),
|
|
Te(n, function(e, r) {
|
|
(t(e, r) ? o : i)(e, r)
|
|
}),
|
|
{
|
|
t: a,
|
|
f: u
|
|
}
|
|
}, _e = function(e) {
|
|
return n = function(e) {
|
|
return e
|
|
}
|
|
,
|
|
t = [],
|
|
Te(e, function(e, r) {
|
|
t.push(n(e, r))
|
|
}),
|
|
t;
|
|
var n, t
|
|
}, Ae = function(e, r) {
|
|
return De(e, r) ? $.from(e[r]) : $.none()
|
|
}, De = function(e, r) {
|
|
return we.call(e, r)
|
|
}, Ce = (m.Node.ATTRIBUTE_NODE,
|
|
m.Node.CDATA_SECTION_NODE,
|
|
m.Node.COMMENT_NODE,
|
|
m.Node.DOCUMENT_NODE,
|
|
m.Node.DOCUMENT_TYPE_NODE,
|
|
m.Node.DOCUMENT_FRAGMENT_NODE,
|
|
m.Node.ELEMENT_NODE), Re = m.Node.TEXT_NODE, Le = (m.Node.PROCESSING_INSTRUCTION_NODE,
|
|
m.Node.ENTITY_REFERENCE_NODE,
|
|
m.Node.ENTITY_NODE,
|
|
m.Node.NOTATION_NODE,
|
|
void 0 !== m.window ? m.window : Function("return this;")(),
|
|
f = Re,
|
|
function(e) {
|
|
return e.dom().nodeType === f
|
|
}
|
|
), Pe = function(e, r, n) {
|
|
!function(e, r, n) {
|
|
if (!(Z(n) || Q(n) || re(n)))
|
|
throw m.console.error("Invalid call to Attr.set. Key ", r, ":: Value ", n, ":: Element ", e),
|
|
new Error("Attribute value was not simple");
|
|
e.setAttribute(r, n + "")
|
|
}(e.dom(), r, n)
|
|
}, Ie = function(e, r) {
|
|
var n = e.dom().getAttribute(r);
|
|
return null === n ? void 0 : n
|
|
}, Fe = function(e, r) {
|
|
e.dom().removeAttribute(r)
|
|
}, Me = function(e, r) {
|
|
var n = Ie(e, r);
|
|
return void 0 === n || "" === n ? [] : n.split(" ")
|
|
}, Be = function(e) {
|
|
return void 0 !== e.dom().classList
|
|
}, je = function(e) {
|
|
return Me(e, "class")
|
|
}, Ue = function(e, r) {
|
|
return o = r,
|
|
i = Me(n = e, t = "class").concat([o]),
|
|
Pe(n, t, i.join(" ")),
|
|
!0;
|
|
var n, t, o, i
|
|
}, Ve = function(e, r) {
|
|
return o = r,
|
|
0 < (i = ce(Me(n = e, t = "class"), function(e) {
|
|
return e !== o
|
|
})).length ? Pe(n, t, i.join(" ")) : Fe(n, t),
|
|
!1;
|
|
var n, t, o, i
|
|
}, qe = function(e, r) {
|
|
var n;
|
|
Be(e) ? e.dom().classList.remove(r) : Ve(e, r);
|
|
0 === (Be(n = e) ? n.dom().classList : je(n)).length && Fe(n, "class")
|
|
}, ze = function(e) {
|
|
if (null == e)
|
|
throw new Error("Node cannot be null or undefined");
|
|
return {
|
|
dom: w(e)
|
|
}
|
|
}, Xe = {
|
|
fromHtml: function(e, r) {
|
|
var n = (r || m.document).createElement("div");
|
|
if (n.innerHTML = e,
|
|
!n.hasChildNodes() || 1 < n.childNodes.length)
|
|
throw m.console.error("HTML does not have a single root node", e),
|
|
new Error("HTML must have a single root node");
|
|
return ze(n.childNodes[0])
|
|
},
|
|
fromTag: function(e, r) {
|
|
var n = (r || m.document).createElement(e);
|
|
return ze(n)
|
|
},
|
|
fromText: function(e, r) {
|
|
var n = (r || m.document).createTextNode(e);
|
|
return ze(n)
|
|
},
|
|
fromDom: ze,
|
|
fromPoint: function(e, r, n) {
|
|
var t = e.dom();
|
|
return $.from(t.elementFromPoint(r, n)).map(ze)
|
|
}
|
|
}, He = function(e, r) {
|
|
e.fire("FormatPainterToggle", {
|
|
state: r
|
|
})
|
|
};
|
|
(g = v || (v = {})).Retrival = "Retrieval",
|
|
g.Application = "Application",
|
|
(h = p || (p = {})).ListSchema = "ListSchema",
|
|
h.SubstitutionSchema = "SubstitionSchema",
|
|
(y = b || (b = {})).InsertUnorderedList = "InsertUnorderedList",
|
|
y.InsertOrderedList = "InsertOrderedList",
|
|
y.InsertDefinitionList = "InsertDefinitionList",
|
|
(O = S || (S = {})).Table = "Table",
|
|
O.Unspecified = "Unspecified";
|
|
var We = function(e) {
|
|
var r, n;
|
|
r = Xe.fromDom(e.getBody()),
|
|
n = "tox-cursor-format-painter",
|
|
Be(r) ? r.dom().classList.add(n) : Ue(r, n)
|
|
}
|
|
, Ye = function(e, r) {
|
|
var n;
|
|
n = e,
|
|
qe(Xe.fromDom(n.getBody()), "tox-cursor-format-painter"),
|
|
r.set(v.Retrival),
|
|
He(e, !1)
|
|
}
|
|
, Ge = function(e, r) {
|
|
r.get() === v.Application ? Ye(e, r) : function(r, n) {
|
|
var t = Oe()
|
|
, o = l(!1);
|
|
We(r),
|
|
n.set(v.Application),
|
|
He(r, !0),
|
|
r.execCommand("mceRetrieveFormats");
|
|
var i = function() {
|
|
r.execCommand("mcePaintFormats"),
|
|
Ye(r, n)
|
|
}
|
|
, e = function() {
|
|
n.get() === v.Application && i(),
|
|
s()
|
|
}
|
|
, a = function(e) {
|
|
n.get() === v.Application && ("touchcancel" === e.type && t.os.isAndroid() ? r.once("contextmenu", i) : o.get() ? i() : r.once("selectionchange", i)),
|
|
s()
|
|
}
|
|
, u = function(e) {
|
|
27 === e.keyCode && (Ye(r, n),
|
|
s())
|
|
}
|
|
, c = function(e) {
|
|
o.set("touchmove" === e.type)
|
|
};
|
|
r.on("click", e),
|
|
r.on("touchstart touchmove", c),
|
|
r.on("touchend touchcancel", a),
|
|
r.on("keydown", u);
|
|
var s = function() {
|
|
r.off("click", e),
|
|
r.off("touchstart touchmove", c),
|
|
r.off("touchend touchcancel", a),
|
|
r.off("keydown", u)
|
|
}
|
|
}(e, r)
|
|
}
|
|
, $e = function(e, r, n) {
|
|
return 0 != (e.compareDocumentPosition(r) & n)
|
|
}
|
|
, Ke = function(e, r) {
|
|
return $e(e, r, m.Node.DOCUMENT_POSITION_CONTAINED_BY)
|
|
}
|
|
, Ze = Ce
|
|
, Je = function(e, r) {
|
|
return e.dom() === r.dom()
|
|
}
|
|
, Qe = (Oe().browser.isIE(),
|
|
function(e, r) {
|
|
var n = e.dom();
|
|
if (n.nodeType !== Ze)
|
|
return !1;
|
|
var t = n;
|
|
if (void 0 !== t.matches)
|
|
return t.matches(r);
|
|
if (void 0 !== t.msMatchesSelector)
|
|
return t.msMatchesSelector(r);
|
|
if (void 0 !== t.webkitMatchesSelector)
|
|
return t.webkitMatchesSelector(r);
|
|
if (void 0 !== t.mozMatchesSelector)
|
|
return t.mozMatchesSelector(r);
|
|
throw new Error("Browser lacks native selectors")
|
|
}
|
|
);
|
|
var er = function(e, r, n) {
|
|
for (var t = e.dom(), o = ee(n) ? n : w(!1); t.parentNode; ) {
|
|
t = t.parentNode;
|
|
var i = Xe.fromDom(t);
|
|
if (r(i))
|
|
return $.some(i);
|
|
if (o(i))
|
|
break
|
|
}
|
|
return $.none()
|
|
}
|
|
, rr = function(e, r, n) {
|
|
var t, o, i, a;
|
|
return t = er,
|
|
a = n,
|
|
function(e, r) {
|
|
return r(e)
|
|
}(o = e, i = r) ? $.some(o) : ee(a) && a(o) ? $.none() : t(o, i, a)
|
|
}
|
|
, nr = {
|
|
formatpainter_checklist: {
|
|
selector: "ul",
|
|
classes: "tox-checklist"
|
|
},
|
|
formatpainter_liststyletype: {
|
|
selector: "ul,ol",
|
|
styles: {
|
|
listStyleType: "%value"
|
|
}
|
|
},
|
|
formatpainter_borderstyle: {
|
|
selector: "td,th",
|
|
styles: {
|
|
borderTopStyle: "%valueTop",
|
|
borderRightStyle: "%valueRight",
|
|
borderBottomStyle: "%valueBottom",
|
|
borderLeftStyle: "%valueLeft"
|
|
},
|
|
remove_similar: !0
|
|
},
|
|
formatpainter_bordercolor: {
|
|
selector: "td,th",
|
|
styles: {
|
|
borderTopColor: "%valueTop",
|
|
borderRightColor: "%valueRight",
|
|
borderBottomColor: "%valueBottom",
|
|
borderLeftColor: "%valueLeft"
|
|
},
|
|
remove_similar: !0
|
|
},
|
|
formatpainter_backgroundcolor: {
|
|
selector: "td,th",
|
|
styles: {
|
|
backgroundColor: "%value"
|
|
},
|
|
remove_similar: !0
|
|
},
|
|
formatpainter_removeformat: [{
|
|
selector: "b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins",
|
|
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: "*:not(tr,td,th,table)",
|
|
attributes: ["style", "class"],
|
|
split: !1,
|
|
expand: !1,
|
|
deep: !0
|
|
}],
|
|
formatpainter_legacy_font: {
|
|
inline: "font",
|
|
attributes: {
|
|
size: "%value"
|
|
}
|
|
}
|
|
}
|
|
, tr = function(i, e) {
|
|
return Ae(e, "selector").exists(function(e) {
|
|
var r = i.getBody()
|
|
, n = i.selection.getStart()
|
|
, t = i.dom.getParents(n, w(!0), r)
|
|
, o = i.selection.getSelectedBlocks();
|
|
return i.dom.is(c(t, o), e)
|
|
})
|
|
}
|
|
, or = function(t, e) {
|
|
return ae(t.formatter.get(e), function(e) {
|
|
return r = t,
|
|
De(n = e, "inline") && !tr(r, n);
|
|
var r, n
|
|
})
|
|
}
|
|
, ir = function(t, e, r) {
|
|
return ae(e.get(r), function(e) {
|
|
return r = t,
|
|
De(n = e, "block") || tr(r, n);
|
|
var r, n
|
|
})
|
|
}
|
|
, ar = function(e) {
|
|
return 1 < e.length && "%" === e.charAt(0)
|
|
}
|
|
, ur = function(e, r) {
|
|
return ae(e.formatter.get(r), function(e) {
|
|
return n = Ae(r = e, "styles").exists(function(e) {
|
|
return ae(_e(e), ar)
|
|
}),
|
|
t = Ae(r, "attributes").exists(function(e) {
|
|
return ae(_e(e), ar)
|
|
}),
|
|
n || t;
|
|
var r, n, t
|
|
})
|
|
}
|
|
, cr = function(e) {
|
|
return Qe(e, "OL,UL,DL")
|
|
}
|
|
, sr = function(e) {
|
|
return Qe(e, "LI,DT,DD")
|
|
}
|
|
, fr = function(e, r, n) {
|
|
var t, o = e.formatter, i = or(e, n.formatName), a = ir(e, o, n.formatName), u = (t = n.formatName,
|
|
ie(["formatpainter_borderstyle", "formatpainter_bordercolor", "formatpainter_backgroundcolor"], t));
|
|
(r.table && u || r.inline && i || r.block && a && !u) && o.apply(n.formatName, n.substitutedVariables)
|
|
}
|
|
, mr = function(e, r) {
|
|
var n, t, o, i = function(e) {
|
|
return Je(e, r)
|
|
};
|
|
return (n = rr(Xe.fromDom(e.getStart()), cr, i),
|
|
t = rr(Xe.fromDom(e.getEnd()), cr, i),
|
|
o = function(e, r) {
|
|
return Je(e, r)
|
|
}
|
|
,
|
|
n.isSome() && t.isSome() ? $.some(o(n.getOrDie(), t.getOrDie())) : $.none()).getOr(!1)
|
|
}
|
|
, lr = function(e) {
|
|
var r = e.selection
|
|
, n = r.getRng()
|
|
, t = Xe.fromDom(e.getBody())
|
|
, o = ce(e.selection.getSelectedBlocks().map(Xe.fromDom), sr)
|
|
, i = n.collapsed && o.length
|
|
, a = o.length && !mr(r, t);
|
|
return 1 < o.length || i || a
|
|
}
|
|
, dr = function(t, e) {
|
|
var r, n;
|
|
r = t,
|
|
n = e.context,
|
|
r.formatter.remove("formatpainter_removeformat"),
|
|
n === S.Table && function(e, r) {
|
|
for (var n = 0, t = e.length; n < t; n++)
|
|
r(e[n], n)
|
|
}(["formatpainter_borderstyle", "formatpainter_bordercolor", "formatpainter_backgroundcolor"], function(e) {
|
|
r.formatter.remove(e)
|
|
}),
|
|
lr(r) && r.execCommand("RemoveList");
|
|
var o, i, a, u, c, s, f = (a = (o = t).selection.getStart(),
|
|
u = o.selection.getRng().collapsed,
|
|
c = 0 < o.dom.select("td[data-mce-selected]").length,
|
|
s = !!o.dom.getParent(a, "TABLE"),
|
|
{
|
|
inline: !0,
|
|
table: u && s || c,
|
|
block: u || (i = o.selection,
|
|
1 < i.getSelectedBlocks().length) || c
|
|
});
|
|
e.schemas.forEach(function(e) {
|
|
switch (e.kind) {
|
|
case p.ListSchema:
|
|
r = t,
|
|
n = e,
|
|
f.block && r.execCommand(n.command);
|
|
break;
|
|
case p.SubstitutionSchema:
|
|
fr(t, f, e)
|
|
}
|
|
var r, n
|
|
})
|
|
}
|
|
, vr = function(e) {
|
|
return Be(e) ? function(e) {
|
|
for (var r = e.dom().classList, n = new Array(r.length), t = 0; t < r.length; t++)
|
|
n[t] = r.item(t);
|
|
return n
|
|
}(e) : je(e)
|
|
}
|
|
, gr = function(e, r) {
|
|
var n, t, o = e.dom(), i = m.window.getComputedStyle(o).getPropertyValue(r), a = "" !== i || null != (t = Le(n = e) ? n.dom().parentNode : n.dom()) && t.ownerDocument.body.contains(t) ? i : pr(o, r);
|
|
return null === a ? void 0 : a
|
|
}
|
|
, pr = function(e, r) {
|
|
return void 0 !== (n = e).style && ee(n.style.getPropertyValue) ? e.style.getPropertyValue(r) : "";
|
|
var n
|
|
}
|
|
, hr = function(o, e) {
|
|
return xe(e, function(e, r) {
|
|
return {
|
|
k: e.slice(1, e.length),
|
|
v: (n = o,
|
|
t = r,
|
|
"class" === t ? vr(n).filter(function(e) {
|
|
return !/^(mce-.*)/.test(e)
|
|
}).join(" ") : Ie(n, t))
|
|
};
|
|
var n, t
|
|
})
|
|
}
|
|
, br = function(e) {
|
|
return ke(e, function(e) {
|
|
return 1 < (r = e).length && "%" === r.charAt(0);
|
|
var r
|
|
}).t
|
|
}
|
|
, yr = function(e, n) {
|
|
var r = Ae(e, "styles").map(function(e) {
|
|
return t = n,
|
|
r = br(e),
|
|
xe(r, function(e, r) {
|
|
return {
|
|
k: e.slice(1, e.length),
|
|
v: gr(t, (n = r,
|
|
n.replace(/([A-Z])/g, function(e) {
|
|
return "-" + e[0].toLowerCase()
|
|
})))
|
|
};
|
|
var n
|
|
});
|
|
var t, r
|
|
})
|
|
, t = Ae(e, "attributes").map(function(e) {
|
|
return hr(n, br(e))
|
|
})
|
|
, o = a(a({}, r.getOr({})), t.getOr({}));
|
|
return _e(o).every(function(e) {
|
|
return "" !== e
|
|
}) ? $.some(o) : $.none()
|
|
}
|
|
, Sr = function(e, r, n) {
|
|
return (t = e.get(r),
|
|
0 === t.length ? $.none() : $.some(t[0])).bind(function(e) {
|
|
return yr(e, n)
|
|
}).map(function(e) {
|
|
return {
|
|
kind: p.SubstitutionSchema,
|
|
formatName: r,
|
|
substitutedVariables: e
|
|
}
|
|
});
|
|
var t
|
|
}
|
|
, Or = function(n, t) {
|
|
return (e = n,
|
|
r = e.getParam("formatpainter_blacklisted_formats", "link,address,removeformat,formatpainter_removeformat", "string").split(/[ ,]/),
|
|
Ne(e.formatter.get()).filter(function(e) {
|
|
return !ie(r, e)
|
|
})).filter(function(e) {
|
|
var r = ur(n, e);
|
|
return n.formatter.matchNode(t.dom(), e, {}, r)
|
|
});
|
|
var e, r
|
|
}
|
|
, Nr = function(e) {
|
|
return (r = e,
|
|
se(_e(b), function(e) {
|
|
return r.queryCommandState(e)
|
|
})).map(function(e) {
|
|
return {
|
|
kind: p.ListSchema,
|
|
command: e
|
|
}
|
|
});
|
|
var r
|
|
}
|
|
, wr = function(e) {
|
|
var r, n, t, o, i, a = e.dom, u = e.selection.getStart();
|
|
return {
|
|
schemas: c(Nr(e).toArray(), (t = e,
|
|
o = u,
|
|
i = t.dom.getParents(o, w(!0)),
|
|
fe(ue(i, Xe.fromDom), function(r) {
|
|
return fe(Or(t, r), function(e) {
|
|
return Sr(t.formatter, e, r).toArray()
|
|
})
|
|
}))),
|
|
context: (r = a,
|
|
n = u,
|
|
r.getParent(n, "TABLE") ? S.Table : S.Unspecified)
|
|
}
|
|
}
|
|
, Tr = function(e) {
|
|
if (d(tinymce, "4.9.0"))
|
|
return m.window.console.error("The format painter plugin requires at least version 4.9.0 of TinyMCE."),
|
|
{};
|
|
var n, r, t, o, i, a, u, c, s = l(v.Retrival), f = l({
|
|
schemas: [],
|
|
context: S.Unspecified
|
|
});
|
|
return (n = e).on("PreInit", function() {
|
|
Te(nr, function(e, r) {
|
|
n.formatter.get(r) || n.formatter.register(r, e)
|
|
})
|
|
}),
|
|
t = s,
|
|
o = f,
|
|
(r = e).addCommand("mceToggleFormatPainter", function() {
|
|
Ge(r, t)
|
|
}),
|
|
r.addCommand("mcePaintFormats", function() {
|
|
r.undoManager.transact(function() {
|
|
dr(r, o.get())
|
|
})
|
|
}),
|
|
r.addCommand("mceRetrieveFormats", function() {
|
|
o.set(wr(r))
|
|
}),
|
|
(i = e).ui ? (u = i).ui.registry.addToggleButton("formatpainter", {
|
|
active: !1,
|
|
icon: "format-painter",
|
|
tooltip: "Format Painter",
|
|
onAction: function() {
|
|
return u.execCommand("mceToggleFormatPainter")
|
|
},
|
|
onSetup: function(r) {
|
|
var e = function(e) {
|
|
r.setActive(e.state)
|
|
};
|
|
return u.on("FormatPainterToggle", e),
|
|
function() {
|
|
return u.off("FormatPainterToggle", e)
|
|
}
|
|
}
|
|
}) : (a = i).addButton("formatpainter", {
|
|
active: !1,
|
|
icon: "format-painter",
|
|
tooltip: "Format Painter",
|
|
cmd: "mceToggleFormatPainter",
|
|
onPostRender: function(r) {
|
|
a.on("FormatPainterToggle", function(e) {
|
|
r.control.active(e.state)
|
|
})
|
|
}
|
|
}),
|
|
(c = e).addShortcut("Meta+alt+C", "", function() {
|
|
c.execCommand("mceRetrieveFormats")
|
|
}),
|
|
c.addShortcut("Meta+alt+V", "", function() {
|
|
c.execCommand("mcePaintFormats")
|
|
}),
|
|
{}
|
|
};
|
|
tinymce.PluginManager.add("formatpainter", Tr)
|
|
}(window);
|
|
|