690 lines
29 KiB
JavaScript
690 lines
29 KiB
JavaScript
!function () {
|
|
"use strict";
|
|
var n, t, e, r, o, i = tinymce.util.Tools.resolve("tinymce.PluginManager"),
|
|
u = tinymce.util.Tools.resolve("tinymce.util.VK"), a = function (n) {
|
|
return n.target_list
|
|
}, c = function (n) {
|
|
return n.rel_list
|
|
}, l = function (n) {
|
|
return n.link_class_list
|
|
}, p = function (n) {
|
|
return "boolean" == typeof n.link_assume_external_targets && n.link_assume_external_targets
|
|
}, f = function (n) {
|
|
return "boolean" == typeof n.link_context_toolbar && n.link_context_toolbar
|
|
}, s = function (n) {
|
|
return n.link_list
|
|
}, h = function (n) {
|
|
return "string" == typeof n.default_link_target
|
|
}, v = function (n) {
|
|
return n.default_link_target
|
|
}, g = a, d = function (n) {
|
|
return !1 !== a(n)
|
|
}, m = c, y = function (n) {
|
|
return c(n) !== undefined
|
|
}, x = l, k = function (n) {
|
|
return l(n) !== undefined
|
|
}, b = function (n) {
|
|
return !1 !== n.link_title
|
|
}, O = function (n) {
|
|
return "boolean" == typeof n.allow_unsafe_link_target && n.allow_unsafe_link_target
|
|
}, w = function (n) {
|
|
return !0 === n.link_quicklink
|
|
}, _ = tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"), A = tinymce.util.Tools.resolve("tinymce.Env"),
|
|
C = function (n) {
|
|
if (!A.ie || 10 < A.ie) {
|
|
var t = document.createElement("a");
|
|
t.target = "_blank", t.href = n, t.rel = "noreferrer noopener";
|
|
var e = document.createEvent("MouseEvents");
|
|
e.initMouseEvent("click", !0, !0, window, 0, 0, 0, 0, 0, !1, !1, !1, !1, 0, null), i = t, u = e, document.body.appendChild(i), i.dispatchEvent(u), document.body.removeChild(i)
|
|
} else {
|
|
var r = window.open("", "_blank");
|
|
if (r) {
|
|
r.opener = null;
|
|
var o = r.document;
|
|
o.open(), o.write('<meta http-equiv="refresh" content="0; url=' + _.DOM.encode(n) + '">'), o.close()
|
|
}
|
|
}
|
|
var i, u
|
|
}, T = tinymce.util.Tools.resolve("tinymce.util.Tools"), N = function (n, t) {
|
|
var e, r, o = ["noopener"], i = n ? n.split(/\s+/) : [], u = function (n) {
|
|
return n.filter(function (n) {
|
|
return -1 === T.inArray(o, n)
|
|
})
|
|
};
|
|
return (i = t ? (e = u(e = i)).length ? e.concat(o) : o : u(i)).length ? (r = i, T.trim(r.sort().join(" "))) : null
|
|
}, S = function (n, t) {
|
|
return t = t || n.selection.getNode(), D(t) ? n.dom.select("a[href]", t)[0] : n.dom.getParent(t, "a[href]")
|
|
}, M = function (n) {
|
|
return n && "A" === n.nodeName && n.href
|
|
}, D = function (n) {
|
|
return n && "FIGURE" === n.nodeName && /\bimage\b/i.test(n.className)
|
|
}, z = function (n, t) {
|
|
var e, r;
|
|
(r = n.dom.select("img", t)[0]) && (e = n.dom.getParents(r, "a[href]", t)[0]) && (e.parentNode.insertBefore(r, e), n.dom.remove(e))
|
|
}, E = function (n, t, e) {
|
|
var r, o;
|
|
(o = n.dom.select("img", t)[0]) && (r = n.dom.create("a", e), o.parentNode.insertBefore(r, o), r.appendChild(o))
|
|
}, L = function (o, i) {
|
|
return function (r) {
|
|
o.undoManager.transact(function () {
|
|
var n = o.selection.getNode(), t = S(o, n), e = {
|
|
href: r.href,
|
|
target: r.target ? r.target : null,
|
|
rel: r.rel ? r.rel : null,
|
|
"class": r["class"] ? r["class"] : null,
|
|
title: r.title ? r.title : null
|
|
};
|
|
y(o.settings) || !1 !== O(o.settings) || (e.rel = N(e.rel, "_blank" === e.target)), r.href === i.href && (i.attach(), i = {}), t ? (o.focus(), r.hasOwnProperty("text") && ("innerText" in t ? t.innerText = r.text : t.textContent = r.text), o.dom.setAttribs(t, e), o.selection.select(t), o.undoManager.add()) : D(n) ? E(o, n, e) : r.hasOwnProperty("text") ? o.insertContent(o.dom.createHTML("a", e, o.dom.encode(r.text))) : o.execCommand("mceInsertLink", !1, e)
|
|
})
|
|
}
|
|
}, U = function (t) {
|
|
return function () {
|
|
t.undoManager.transact(function () {
|
|
var n = t.selection.getNode();
|
|
D(n) ? z(t, n) : t.execCommand("unlink")
|
|
})
|
|
}
|
|
}, P = function (n) {
|
|
return 0 < T.grep(n, M).length
|
|
}, R = function (n) {
|
|
var t = n.getAttribute("data-mce-href");
|
|
return t || n.getAttribute("href")
|
|
}, K = function (n) {
|
|
return !(/</.test(n) && (!/^<a [^>]+>[^<]+<\/a>$/.test(n) || -1 === n.indexOf("href=")))
|
|
}, q = S, I = function (n, t) {
|
|
var e = t ? t.innerText || t.textContent : n.getContent({format: "text"});
|
|
return e.replace(/\uFEFF/g, "")
|
|
}, j = N, V = function () {
|
|
for (var n = [], t = 0; t < arguments.length; t++) n[t] = arguments[t]
|
|
}, B = function (n) {
|
|
return function () {
|
|
return n
|
|
}
|
|
}, F = B(!1), W = B(!0), H = F, $ = W, G = function () {
|
|
return J
|
|
}, J = (r = {
|
|
fold: function (n, t) {
|
|
return n()
|
|
}, is: H, isSome: H, isNone: $, getOr: e = function (n) {
|
|
return n
|
|
}, getOrThunk: t = function (n) {
|
|
return n()
|
|
}, getOrDie: function (n) {
|
|
throw new Error(n || "error: getOrDie called on none.")
|
|
}, getOrNull: function () {
|
|
return null
|
|
}, getOrUndefined: function () {
|
|
return undefined
|
|
}, or: e, orThunk: t, map: G, ap: G, each: function () {
|
|
}, bind: G, flatten: G, exists: H, forall: $, filter: G, equals: n = function (n) {
|
|
return n.isNone()
|
|
}, equals_: n, toArray: function () {
|
|
return []
|
|
}, toString: B("none()")
|
|
}, Object.freeze && Object.freeze(r), r), X = function (e) {
|
|
var n = function () {
|
|
return e
|
|
}, t = function () {
|
|
return o
|
|
}, r = function (n) {
|
|
return n(e)
|
|
}, o = {
|
|
fold: function (n, t) {
|
|
return t(e)
|
|
},
|
|
is: function (n) {
|
|
return e === n
|
|
},
|
|
isSome: $,
|
|
isNone: H,
|
|
getOr: n,
|
|
getOrThunk: n,
|
|
getOrDie: n,
|
|
getOrNull: n,
|
|
getOrUndefined: n,
|
|
or: t,
|
|
orThunk: t,
|
|
map: function (n) {
|
|
return X(n(e))
|
|
},
|
|
ap: function (n) {
|
|
return n.fold(G, function (n) {
|
|
return X(n(e))
|
|
})
|
|
},
|
|
each: function (n) {
|
|
n(e)
|
|
},
|
|
bind: r,
|
|
flatten: n,
|
|
exists: r,
|
|
forall: r,
|
|
filter: function (n) {
|
|
return n(e) ? o : J
|
|
},
|
|
equals: function (n) {
|
|
return n.is(e)
|
|
},
|
|
equals_: function (n, t) {
|
|
return n.fold(H, function (n) {
|
|
return t(e, n)
|
|
})
|
|
},
|
|
toArray: function () {
|
|
return [e]
|
|
},
|
|
toString: function () {
|
|
return "some(" + e + ")"
|
|
}
|
|
};
|
|
return o
|
|
}, Q = {
|
|
some: X, none: G, from: function (n) {
|
|
return null === n || n === undefined ? J : X(n)
|
|
}
|
|
}, Y = function (t) {
|
|
return function (n) {
|
|
return function (n) {
|
|
if (null === n) return "null";
|
|
var t = typeof n;
|
|
return "object" === t && Array.prototype.isPrototypeOf(n) ? "array" : "object" === t && String.prototype.isPrototypeOf(n) ? "string" : t
|
|
}(n) === t
|
|
}
|
|
}, Z = Y("string"), nn = Y("function"), tn = (o = Array.prototype.indexOf) === undefined ? function (n, t) {
|
|
return en(n, t)
|
|
} : function (n, t) {
|
|
return o.call(n, t)
|
|
}, en = function (n, t) {
|
|
for (var e = 0, r = n.length; e < r; ++e) if (n[e] === t) return e;
|
|
return -1
|
|
}, rn = Array.prototype.push, on = function (n) {
|
|
for (var t = [], e = 0, r = n.length; e < r; ++e) {
|
|
if (!Array.prototype.isPrototypeOf(n[e])) throw new Error("Arr.flatten item " + e + " was not an array, input: " + n);
|
|
rn.apply(t, n[e])
|
|
}
|
|
return t
|
|
}, un = function (n, t) {
|
|
var e = function (n, t) {
|
|
for (var e = n.length, r = new Array(e), o = 0; o < e; o++) {
|
|
var i = n[o];
|
|
r[o] = t(i, o, n)
|
|
}
|
|
return r
|
|
}(n, t);
|
|
return on(e)
|
|
}, an = (Array.prototype.slice, nn(Array.from) && Array.from, function (n, t) {
|
|
for (var e = 0; e < n.length; e++) {
|
|
var r = t(n[e], e);
|
|
if (r.isSome()) return r
|
|
}
|
|
return Q.none()
|
|
}), cn = function (n) {
|
|
return Z(n.value) ? n.value : ""
|
|
}, ln = function (n, o) {
|
|
var i = [];
|
|
return T.each(n, function (n) {
|
|
var t = Z(n.text) ? n.text : Z(n.title) ? n.title : "";
|
|
if (n.menu !== undefined) {
|
|
var e = ln(n.menu, o);
|
|
i.push({text: t, items: e})
|
|
} else {
|
|
var r = o(n);
|
|
i.push({text: t, value: r})
|
|
}
|
|
}), i
|
|
}, fn = function (t) {
|
|
return void 0 === t && (t = cn), function (n) {
|
|
return Q.from(n).map(function (n) {
|
|
return ln(n, t)
|
|
})
|
|
}
|
|
}, sn = {
|
|
sanitize: function (n) {
|
|
return fn(cn)(n)
|
|
}, sanitizeWith: fn, createUi: function (t, e) {
|
|
return function (n) {
|
|
return {name: t, type: "selectbox", label: e, items: n}
|
|
}
|
|
}, getValue: cn
|
|
}, gn = function (n) {
|
|
var t = n, e = function () {
|
|
return t
|
|
};
|
|
return {
|
|
get: e, set: function (n) {
|
|
t = n
|
|
}, clone: function () {
|
|
return gn(e())
|
|
}
|
|
}
|
|
}, dn = function (t, n) {
|
|
return an(n, function (n) {
|
|
return "items" in n ? dn(t, n.items) : Q.some(n).filter(function (n) {
|
|
return n.value === t
|
|
})
|
|
})
|
|
}, mn = function (t, n, e, r) {
|
|
var o = r[n], i = 0 < t.length;
|
|
return o !== undefined ? dn(o, e).map(function (n) {
|
|
return {url: {value: n.value, meta: {text: i ? t : n.text, attach: V}}, text: i ? t : n.text}
|
|
}) : Q.none()
|
|
}, pn = function (n, i) {
|
|
var u = gn(n.text), o = function (n, t) {
|
|
var e, r,
|
|
o = (e = i, r = t.name, "link" === r ? e.catalogs.link : "anchor" === r ? e.catalogs.anchor : Q.none()).getOr([]);
|
|
return mn(u.get(), t.name, o, n)
|
|
};
|
|
return {
|
|
onChange: function (n, t) {
|
|
return "url" === t.name ? function (n) {
|
|
if (u.get().length <= 0) {
|
|
var t = n.url.meta.text !== undefined ? n.url.meta.text : n.url.value;
|
|
return Q.some({text: t})
|
|
}
|
|
return Q.none()
|
|
}(n()) : (e = ["anchor", "link"], r = t.name, -1 < tn(e, r) ? o(n(), t) : ("text" === t.name && u.set(n().text), Q.none()));
|
|
var e, r
|
|
}
|
|
}
|
|
}, hn = function () {
|
|
return (hn = Object.assign || function (n) {
|
|
for (var t, e = 1, r = arguments.length; e < r; e++) for (var o in t = arguments[e]) Object.prototype.hasOwnProperty.call(t, o) && (n[o] = t[o]);
|
|
return n
|
|
}).apply(this, arguments)
|
|
}, vn = function (n) {
|
|
var e = Q.none(), t = [], r = function (n) {
|
|
o() ? u(n) : t.push(n)
|
|
}, o = function () {
|
|
return e.isSome()
|
|
}, i = function (n) {
|
|
!function (n, t) {
|
|
for (var e = 0, r = n.length; e < r; e++) t(n[e], e, n)
|
|
}(n, u)
|
|
}, u = function (t) {
|
|
e.each(function (n) {
|
|
setTimeout(function () {
|
|
t(n)
|
|
}, 0)
|
|
})
|
|
};
|
|
return n(function (n) {
|
|
e = Q.some(n), i(t), t = []
|
|
}), {
|
|
get: r, map: function (e) {
|
|
return vn(function (t) {
|
|
r(function (n) {
|
|
t(e(n))
|
|
})
|
|
})
|
|
}, isReady: o
|
|
}
|
|
}, yn = {
|
|
nu: vn, pure: function (t) {
|
|
return vn(function (n) {
|
|
n(t)
|
|
})
|
|
}
|
|
}, xn = function (t) {
|
|
var n = function (n) {
|
|
var r;
|
|
t((r = n, function () {
|
|
for (var n = [], t = 0; t < arguments.length; t++) n[t] = arguments[t];
|
|
var e = this;
|
|
setTimeout(function () {
|
|
r.apply(e, n)
|
|
}, 0)
|
|
}))
|
|
}, e = function () {
|
|
return yn.nu(n)
|
|
};
|
|
return {
|
|
map: function (r) {
|
|
return xn(function (e) {
|
|
n(function (n) {
|
|
var t = r(n);
|
|
e(t)
|
|
})
|
|
})
|
|
}, bind: function (e) {
|
|
return xn(function (t) {
|
|
n(function (n) {
|
|
e(n).get(t)
|
|
})
|
|
})
|
|
}, anonBind: function (e) {
|
|
return xn(function (t) {
|
|
n(function (n) {
|
|
e.get(t)
|
|
})
|
|
})
|
|
}, toLazy: e, toCached: function () {
|
|
var t = null;
|
|
return xn(function (n) {
|
|
null === t && (t = e()), t.get(n)
|
|
})
|
|
}, get: n
|
|
}
|
|
}, kn = {
|
|
nu: xn, pure: function (t) {
|
|
return xn(function (n) {
|
|
n(t)
|
|
})
|
|
}
|
|
}, bn = tinymce.util.Tools.resolve("tinymce.util.Delay"), On = function (n) {
|
|
var t = n.href;
|
|
return 0 < t.indexOf("@") && -1 === t.indexOf("//") && -1 === t.indexOf("mailto:") ? Q.some({
|
|
message: "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",
|
|
preprocess: function (n) {
|
|
return hn({}, n, {href: "mailto:" + t})
|
|
}
|
|
}) : Q.none()
|
|
}, wn = function (u, n, a) {
|
|
return console.log("preprocessing"), an([On, (e = n, function (n) {
|
|
var t = n.href;
|
|
return !0 === e && !/^\w+:/i.test(t) || !1 === e && /^\s*www[\.|\d\.]/i.test(t) ? Q.some({
|
|
message: "The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",
|
|
preprocess: function (n) {
|
|
return hn({}, n, {href: "http://" + t})
|
|
}
|
|
}) : Q.none()
|
|
})], function (n) {
|
|
return n(a)
|
|
}).fold(function () {
|
|
return kn.pure(a)
|
|
}, function (i) {
|
|
return kn.nu(function (t) {
|
|
var e, n, r, o;
|
|
e = u, n = i.message, r = function (n) {
|
|
console.log("state", n), t(n ? i.preprocess(a) : a)
|
|
}, o = e.selection.getRng(), bn.setEditorTimeout(e, function () {
|
|
e.windowManager.confirm(n, function (n) {
|
|
e.selection.setRng(o), r(n)
|
|
})
|
|
})
|
|
})
|
|
});
|
|
var e
|
|
}, _n = function (n) {
|
|
var t = n.dom.select("a:not([href])"), e = un(t, function (n) {
|
|
var t = n.name || n.id;
|
|
return t ? [{text: t, value: "#" + t}] : []
|
|
});
|
|
return 0 < e.length ? Q.some([{text: "None", value: ""}].concat(e)) : Q.none()
|
|
}, An = function (n) {
|
|
if (k(n.settings)) {
|
|
var t = x(n.settings);
|
|
return sn.sanitize(t)
|
|
}
|
|
return Q.none()
|
|
}, Cn = tinymce.util.Tools.resolve("tinymce.util.XHR"), Tn = function (t) {
|
|
var e = function (n) {
|
|
return t.convertURL(n.value || n.url, "href")
|
|
}, n = s(t.settings);
|
|
return kn.nu(function (t) {
|
|
"string" == typeof n ? Cn.send({
|
|
url: n, success: function (n) {
|
|
return t(function (n) {
|
|
try {
|
|
return Q.some(JSON.parse(n))
|
|
} catch (t) {
|
|
return Q.none()
|
|
}
|
|
}(n))
|
|
}, error: function (n) {
|
|
return t(Q.none())
|
|
}
|
|
}) : "function" == typeof n ? n(function (n) {
|
|
return t(Q.some(n))
|
|
}) : t(Q.from(n))
|
|
}).map(function (n) {
|
|
return n.bind(sn.sanitizeWith(e))
|
|
})
|
|
}, Nn = function (n, t) {
|
|
if (y(n.settings)) {
|
|
var e = m(n.settings), r = t.is("_blank");
|
|
return (!1 === O(n.settings) ? sn.sanitizeWith(function (n) {
|
|
return j(sn.getValue(n), r)
|
|
}) : sn.sanitize)(e)
|
|
}
|
|
return Q.none()
|
|
}, Sn = [{text: "Current window", value: ""}, {text: "New window", value: "_blank"}], Mn = function (n) {
|
|
if (d(n.settings)) {
|
|
var t = g(n.settings);
|
|
return sn.sanitize(t).orThunk(function () {
|
|
return Q.some(Sn)
|
|
})
|
|
}
|
|
return Q.none()
|
|
}, Dn = function (n, t, e) {
|
|
var r = n.getAttrib(t, e);
|
|
return null !== r && 0 < r.length ? Q.some(r) : Q.none()
|
|
}, zn = function (d, m, p) {
|
|
return Tn(d).map(function (n) {
|
|
var t, e, r, o, i, u, a, c, l, f, s,
|
|
g = (e = m, r = p, o = (t = d).selection, i = t.dom, u = K(o.getContent()) ? Q.some(I(o, r)) : Q.none(), a = r ? Q.some(i.getAttrib(r, "href")) : Q.none(), c = h(e) ? Q.some(v(e)) : Q.none(), l = r ? Q.from(i.getAttrib(r, "target")) : c, f = Dn(i, r, "rel"), s = Dn(i, r, "class"), {
|
|
url: a,
|
|
text: u,
|
|
title: Dn(i, r, "title"),
|
|
target: l,
|
|
rel: f,
|
|
linkClass: s
|
|
});
|
|
return {
|
|
anchor: g,
|
|
catalogs: {targets: Mn(d), rels: Nn(d, g.target), classes: An(d), anchor: _n(d), link: n},
|
|
optNode: Q.from(p),
|
|
flags: {titleEnabled: b(m)}
|
|
}
|
|
})
|
|
}, En = function (m) {
|
|
var n, t, e;
|
|
(t = (n = m).settings, e = q(n), zn(n, t, e)).map(function (n) {
|
|
var u, a, c, l, t, e, r, o, i, f, s, g,
|
|
d = (u = m, c = (a = n).anchor.text, l = p(m.settings), function (n) {
|
|
var t = n.getData(), e = {
|
|
href: t.url.value,
|
|
text: t.text ? t.text : c.getOr(undefined),
|
|
target: t.target ? t.target : undefined,
|
|
rel: t.rel ? t.rel : undefined,
|
|
"class": t.classz ? t.classz : undefined,
|
|
title: t.title ? t.title : undefined
|
|
}, r = {
|
|
href: t.url.value,
|
|
attach: t.url.meta !== undefined && t.url.meta.attach ? t.url.meta.attach : function () {
|
|
}
|
|
}, o = L(u, r), i = U(u);
|
|
t.url.value ? ((c.is(t.text) || a.optNode.isNone() && !t.text) && delete e.text, wn(u, l, e).get(function (n) {
|
|
o(n)
|
|
}), n.close()) : i()
|
|
});
|
|
return e = d, o = (t = n).anchor.text.map(function () {
|
|
return {name: "text", type: "input", label: "Text to display"}
|
|
}).toArray(), i = t.flags.titleEnabled ? [{
|
|
name: "title",
|
|
type: "input",
|
|
label: "Title"
|
|
}] : [], f = {
|
|
url: {
|
|
value: (r = t).anchor.url.getOr(""), meta: {
|
|
attach: function () {
|
|
}, text: r.anchor.url.fold(function () {
|
|
return ""
|
|
}, function () {
|
|
return r.anchor.text.getOr("")
|
|
}), original: {value: r.anchor.url.getOr("")}
|
|
}
|
|
},
|
|
text: r.anchor.text.getOr(""),
|
|
title: r.anchor.title.getOr(""),
|
|
anchor: r.anchor.url.getOr(""),
|
|
link: r.anchor.url.getOr(""),
|
|
rel: r.anchor.rel.getOr(""),
|
|
target: r.anchor.target.getOr(""),
|
|
classz: r.anchor.linkClass.getOr("")
|
|
}, s = pn(f, t), g = t.catalogs, {
|
|
title: "Insert/Edit Link",
|
|
size: "normal",
|
|
body: {
|
|
type: "panel",
|
|
items: on([[{name: "url", type: "urlinput", filetype: "file", label: "URL"}], o, i, function (n) {
|
|
for (var t = [], e = function (n) {
|
|
t.push(n)
|
|
}, r = 0; r < n.length; r++) n[r].each(e);
|
|
return t
|
|
}([g.anchor.map(sn.createUi("anchor", "Anchors")), g.rels.map(sn.createUi("rel", "Rel")), g.targets.map(sn.createUi("target", "Open link in...")), g.link.map(sn.createUi("link", "Link list")), g.classes.map(sn.createUi("classz", "Class"))])])
|
|
},
|
|
buttons: [{type: "cancel", name: "cancel", text: "Cancel"}, {
|
|
type: "submit",
|
|
name: "save",
|
|
text: "Save",
|
|
primary: !0
|
|
}],
|
|
initialData: f,
|
|
onChange: function (t, n) {
|
|
var e = n.name;
|
|
s.onChange(t.getData, {name: e}).each(function (n) {
|
|
t.setData(n)
|
|
})
|
|
},
|
|
onSubmit: e
|
|
}
|
|
}).get(function (n) {
|
|
m.windowManager.open(n)
|
|
})
|
|
}, Ln = function (n, t) {
|
|
return n.dom.getParent(t, "a[href]")
|
|
}, Un = function (n) {
|
|
return Ln(n, n.selection.getStart())
|
|
}, Pn = function (n, t) {
|
|
if (t) {
|
|
var e = R(t);
|
|
if (/^#/.test(e)) {
|
|
var r = n.$(e);
|
|
r.length && n.selection.scrollIntoView(r[0], !0)
|
|
} else C(t.href)
|
|
}
|
|
}, Rn = function (n) {
|
|
return function () {
|
|
En(n)
|
|
}
|
|
}, Kn = function (n) {
|
|
return function () {
|
|
Pn(n, Un(n))
|
|
}
|
|
}, qn = function (r) {
|
|
r.on("click", function (n) {
|
|
var t = Ln(r, n.target);
|
|
t && u.metaKeyPressed(n) && (n.preventDefault(), Pn(r, t))
|
|
}), r.on("keydown", function (n) {
|
|
var t, e = Un(r);
|
|
e && 13 === n.keyCode && !0 === (t = n).altKey && !1 === t.shiftKey && !1 === t.ctrlKey && !1 === t.metaKey && (n.preventDefault(), Pn(r, e))
|
|
})
|
|
}, In = function (e) {
|
|
return function (t) {
|
|
var n = function (n) {
|
|
return t.setActive(!e.readonly && !!q(e, n.element))
|
|
};
|
|
return e.on("nodechange", n), function () {
|
|
return e.off("nodechange", n)
|
|
}
|
|
}
|
|
}, jn = function (e) {
|
|
return function (t) {
|
|
t.setDisabled(!P(e.dom.getParents(e.selection.getStart())));
|
|
var n = function (n) {
|
|
return t.setDisabled(!P(n.parents))
|
|
};
|
|
return e.on("nodechange", n), function () {
|
|
return e.off("nodechange", n)
|
|
}
|
|
}
|
|
}, Vn = function (n) {
|
|
n.addCommand("mceLink", function () {
|
|
w(n.settings) ? n.fire("contexttoolbar-show", {toolbarKey: "link-form"}) : Rn(n)()
|
|
})
|
|
}, Bn = function (n) {
|
|
n.addShortcut("Meta+K", "", function () {
|
|
n.execCommand("mceLink")
|
|
})
|
|
}, Fn = function (n) {
|
|
n.ui.registry.addToggleButton("link", {
|
|
icon: "link",
|
|
tooltip: "Insert/edit link",
|
|
onAction: Rn(n),
|
|
onSetup: In(n)
|
|
}), n.ui.registry.addButton("unlink", {icon: "unlink", onAction: U(n), onSetup: jn(n)})
|
|
}, Wn = function (n) {
|
|
n.ui.registry.addMenuItem("openlink", {
|
|
text: "Open link",
|
|
icon: "new-tab",
|
|
onAction: Kn(n),
|
|
onSetup: jn(n)
|
|
}), n.ui.registry.addMenuItem("link", {
|
|
icon: "link",
|
|
text: "Link...",
|
|
shortcut: "Meta+K",
|
|
onAction: Rn(n)
|
|
}), n.ui.registry.addMenuItem("unlink", {icon: "unlink", text: "Remove link", onAction: U(n), onSetup: jn(n)})
|
|
}, Hn = function (t) {
|
|
var e = ["link"], r = ["link", "unlink", "openlink"];
|
|
t.ui.registry.addContextMenu("link", {
|
|
update: function (n) {
|
|
return P(t.dom.getParents(n, "a")) ? r : e
|
|
}
|
|
})
|
|
}, $n = function (i) {
|
|
i.ui.registry.addContextForm("link-form", {
|
|
launch: {
|
|
type: "contextformtogglebutton",
|
|
icon: "link",
|
|
onSetup: In(i)
|
|
},
|
|
label: "Link",
|
|
predicate: function (n) {
|
|
return !!q(i, n) && f(i.settings)
|
|
},
|
|
initValue: function () {
|
|
var n = q(i);
|
|
return n ? R(n) : ""
|
|
},
|
|
commands: [{
|
|
type: "contextformtogglebutton",
|
|
icon: "link",
|
|
tooltip: "Link",
|
|
primary: !0,
|
|
onSetup: function (n) {
|
|
var t = i.selection.getNode();
|
|
return n.setActive(!!q(i, t)), In(i)(n)
|
|
},
|
|
onAction: function (n) {
|
|
var t = q(i), e = n.getValue();
|
|
if (t) i.dom.setAttrib(t, "href", e), i.selection.collapse(!1), n.hide(); else {
|
|
var r = {
|
|
href: e, attach: function () {
|
|
}
|
|
}, o = K(i.selection.getContent()) ? Q.some(I(i.selection, t)).filter(function (n) {
|
|
return 0 < n.length
|
|
}) : Q.none();
|
|
L(i, r)({href: e, text: o.getOr(e)}), n.hide()
|
|
}
|
|
}
|
|
}, {
|
|
type: "contextformtogglebutton",
|
|
icon: "unlink",
|
|
tooltip: "Remove link",
|
|
active: !1,
|
|
onSetup: function () {
|
|
return function () {
|
|
}
|
|
},
|
|
onAction: function (n) {
|
|
U(i)(), n.hide()
|
|
}
|
|
}]
|
|
})
|
|
};
|
|
i.add("link", function (n) {
|
|
Fn(n), Wn(n), Hn(n), $n(n), qn(n), Vn(n), Bn(n)
|
|
}), function Gn() {
|
|
}
|
|
}(); |