frontend/src/lib/dist/tinymce/plugins/media/plugin.min.js
2024-09-19 16:04:35 +02:00

1069 lines
31 KiB
JavaScript

/**
* TinyMCE version 6.7.0 (2023-08-30)
*/
!(function () {
"use strict";
var e = tinymce.util.Tools.resolve("tinymce.PluginManager");
const t = (e) => (t) =>
((e) => {
const t = typeof e;
return null === e
? "null"
: "object" === t && Array.isArray(e)
? "array"
: "object" === t &&
((r = o = e),
(a = String).prototype.isPrototypeOf(r) ||
(null === (s = o.constructor) || void 0 === s
? void 0
: s.name) === a.name)
? "string"
: t;
var r, o, a, s;
})(t) === e,
r = t("string"),
o = t("object"),
a = t("array"),
s = (e) => !((e) => null == e)(e);
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 s(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 n = Array.prototype.push,
l = (e, t) => {
for (let r = 0, o = e.length; r < o; r++) t(e[r], r);
},
c = (e) => {
const t = [];
for (let r = 0, o = e.length; r < o; ++r) {
if (!a(e[r]))
throw new Error(
"Arr.flatten item " + r + " was not an array, input: " + e,
);
n.apply(t, e[r]);
}
return t;
},
m = Object.keys,
u = Object.hasOwnProperty,
d = (e, t) => (h(e, t) ? i.from(e[t]) : i.none()),
h = (e, t) => u.call(e, t),
p = (e) => (t) => t.options.get(e),
g = p("audio_template_callback"),
b = p("video_template_callback"),
w = p("iframe_template_callback"),
v = p("media_live_embeds"),
f = p("media_filter_html"),
y = p("media_url_resolver"),
x = p("media_alt_source"),
_ = p("media_poster"),
k = p("media_dimensions");
var j = tinymce.util.Tools.resolve("tinymce.util.Tools"),
O = tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),
A = tinymce.util.Tools.resolve("tinymce.html.DomParser");
const S = O.DOM,
$ = (e) => e.replace(/px$/, ""),
C = (e) => {
const t = e.attr("style"),
r = t ? S.parseStyle(t) : {};
return {
type: "ephox-embed-iri",
source: e.attr("data-ephox-embed-iri"),
altsource: "",
poster: "",
width: d(r, "max-width").map($).getOr(""),
height: d(r, "max-height").map($).getOr(""),
};
},
T = (e, t) => {
let r = {};
for (
let o = A({ validate: !1, forced_root_block: !1 }, t).parse(e);
o;
o = o.walk()
)
if (1 === o.type) {
const e = o.name;
if (o.attr("data-ephox-embed-iri")) {
r = C(o);
break;
}
r.source || "param" !== e || (r.source = o.attr("movie")),
("iframe" !== e &&
"object" !== e &&
"embed" !== e &&
"video" !== e &&
"audio" !== e) ||
(r.type || (r.type = e), (r = j.extend(o.attributes.map, r))),
"source" === e &&
(r.source
? r.altsource || (r.altsource = o.attr("src"))
: (r.source = o.attr("src"))),
"img" !== e || r.poster || (r.poster = o.attr("src"));
}
return (
(r.source = r.source || r.src || ""),
(r.altsource = r.altsource || ""),
(r.poster = r.poster || ""),
r
);
},
z = (e) => {
var t;
const r =
null !== (t = e.toLowerCase().split(".").pop()) && void 0 !== t
? t
: "";
return d(
{
mp3: "audio/mpeg",
m4a: "audio/x-m4a",
wav: "audio/wav",
mp4: "video/mp4",
webm: "video/webm",
ogg: "video/ogg",
swf: "application/x-shockwave-flash",
},
r,
).getOr("");
};
var D = tinymce.util.Tools.resolve("tinymce.html.Node"),
F = tinymce.util.Tools.resolve("tinymce.html.Serializer");
const M = (e, t = {}) =>
A(
{
forced_root_block: !1,
validate: !1,
allow_conditional_comments: !0,
...t,
},
e,
),
N = O.DOM,
R = (e) => (/^[0-9.]+$/.test(e) ? e + "px" : e),
E = (e, t) => {
const r = t.attr("style"),
o = r ? N.parseStyle(r) : {};
s(e.width) && (o["max-width"] = R(e.width)),
s(e.height) && (o["max-height"] = R(e.height)),
t.attr("style", N.serializeStyle(o));
},
U = ["source", "altsource"],
P = (e, t, r, o) => {
let a = 0,
s = 0;
const i = M(o);
i.addNodeFilter("source", (e) => (a = e.length));
const n = i.parse(e);
for (let e = n; e; e = e.walk())
if (1 === e.type) {
const o = e.name;
if (e.attr("data-ephox-embed-iri")) {
E(t, e);
break;
}
switch (o) {
case "video":
case "object":
case "embed":
case "img":
case "iframe":
void 0 !== t.height &&
void 0 !== t.width &&
(e.attr("width", t.width), e.attr("height", t.height));
}
if (r)
switch (o) {
case "video":
e.attr("poster", t.poster), e.attr("src", null);
for (let r = a; r < 2; r++)
if (t[U[r]]) {
const o = new D("source", 1);
o.attr("src", t[U[r]]),
o.attr("type", t[U[r] + "mime"] || null),
e.append(o);
}
break;
case "iframe":
e.attr("src", t.source);
break;
case "object":
const r = e.getAll("img").length > 0;
if (t.poster && !r) {
e.attr("src", t.poster);
const r = new D("img", 1);
r.attr("src", t.poster),
r.attr("width", t.width),
r.attr("height", t.height),
e.append(r);
}
break;
case "source":
if (
s < 2 &&
(e.attr("src", t[U[s]]),
e.attr("type", t[U[s] + "mime"] || null),
!t[U[s]])
) {
e.remove();
continue;
}
s++;
break;
case "img":
t.poster || e.remove();
}
}
return F({}, o).serialize(n);
},
L = [
{
regex: /youtu\.be\/([\w\-_\?&=.]+)/i,
type: "iframe",
w: 560,
h: 314,
url: "www.youtube.com/embed/$1",
allowFullscreen: !0,
},
{
regex: /youtube\.com(.+)v=([^&]+)(&([a-z0-9&=\-_]+))?/i,
type: "iframe",
w: 560,
h: 314,
url: "www.youtube.com/embed/$2?$4",
allowFullscreen: !0,
},
{
regex: /youtube.com\/embed\/([a-z0-9\?&=\-_]+)/i,
type: "iframe",
w: 560,
h: 314,
url: "www.youtube.com/embed/$1",
allowFullscreen: !0,
},
{
regex: /vimeo\.com\/([0-9]+)\?h=(\w+)/,
type: "iframe",
w: 425,
h: 350,
url: "player.vimeo.com/video/$1?h=$2&title=0&byline=0&portrait=0&color=8dc7dc",
allowFullscreen: !0,
},
{
regex: /vimeo\.com\/(.*)\/([0-9]+)\?h=(\w+)/,
type: "iframe",
w: 425,
h: 350,
url: "player.vimeo.com/video/$2?h=$3&title=0&amp;byline=0",
allowFullscreen: !0,
},
{
regex: /vimeo\.com\/([0-9]+)/,
type: "iframe",
w: 425,
h: 350,
url: "player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",
allowFullscreen: !0,
},
{
regex: /vimeo\.com\/(.*)\/([0-9]+)/,
type: "iframe",
w: 425,
h: 350,
url: "player.vimeo.com/video/$2?title=0&amp;byline=0",
allowFullscreen: !0,
},
{
regex: /maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,
type: "iframe",
w: 425,
h: 350,
url: 'maps.google.com/maps/ms?msid=$2&output=embed"',
allowFullscreen: !1,
},
{
regex: /dailymotion\.com\/video\/([^_]+)/,
type: "iframe",
w: 480,
h: 270,
url: "www.dailymotion.com/embed/video/$1",
allowFullscreen: !0,
},
{
regex: /dai\.ly\/([^_]+)/,
type: "iframe",
w: 480,
h: 270,
url: "www.dailymotion.com/embed/video/$1",
allowFullscreen: !0,
},
],
I = (e, t) => {
const r = ((e) => {
const t = e.match(/^(https?:\/\/|www\.)(.+)$/i);
return t && t.length > 1
? "www." === t[1]
? "https://"
: t[1]
: "https://";
})(t),
o = e.regex.exec(t);
let a = r + e.url;
if (s(o))
for (let e = 0; e < o.length; e++)
a = a.replace("$" + e, () => (o[e] ? o[e] : ""));
return a.replace(/\?$/, "");
},
B = (e) => {
const t = L.filter((t) => t.regex.test(e));
return t.length > 0 ? j.extend({}, t[0], { url: I(t[0], e) }) : null;
},
G = (e, t) => {
var r;
const o = j.extend({}, t);
if (
!o.source &&
(j.extend(
o,
T(null !== (r = o.embed) && void 0 !== r ? r : "", e.schema),
),
!o.source)
)
return "";
o.altsource || (o.altsource = ""),
o.poster || (o.poster = ""),
(o.source = e.convertURL(o.source, "source")),
(o.altsource = e.convertURL(o.altsource, "source")),
(o.sourcemime = z(o.source)),
(o.altsourcemime = z(o.altsource)),
(o.poster = e.convertURL(o.poster, "poster"));
const a = B(o.source);
if (
(a &&
((o.source = a.url),
(o.type = a.type),
(o.allowfullscreen = a.allowFullscreen),
(o.width = o.width || String(a.w)),
(o.height = o.height || String(a.h))),
o.embed)
)
return P(o.embed, o, !0, e.schema);
{
const t = g(e),
r = b(e),
a = w(e);
return (
(o.width = o.width || "300"),
(o.height = o.height || "150"),
j.each(o, (t, r) => {
o[r] = e.dom.encode("" + t);
}),
"iframe" === o.type
? ((e, t) => {
if (t) return t(e);
{
const t = e.allowfullscreen ? ' allowFullscreen="1"' : "";
return (
'<iframe src="' +
e.source +
'" width="' +
e.width +
'" height="' +
e.height +
'"' +
t +
"></iframe>"
);
}
})(o, a)
: "application/x-shockwave-flash" === o.sourcemime
? ((e) => {
let t =
'<object data="' +
e.source +
'" width="' +
e.width +
'" height="' +
e.height +
'" type="application/x-shockwave-flash">';
return (
e.poster &&
(t +=
'<img src="' +
e.poster +
'" width="' +
e.width +
'" height="' +
e.height +
'" />'),
(t += "</object>"),
t
);
})(o)
: -1 !== o.sourcemime.indexOf("audio")
? ((e, t) =>
t
? t(e)
: '<audio controls="controls" src="' +
e.source +
'">' +
(e.altsource
? '\n<source src="' +
e.altsource +
'"' +
(e.altsourcemime
? ' type="' + e.altsourcemime + '"'
: "") +
" />\n"
: "") +
"</audio>")(o, t)
: ((e, t) =>
t
? t(e)
: '<video width="' +
e.width +
'" height="' +
e.height +
'"' +
(e.poster ? ' poster="' + e.poster + '"' : "") +
' controls="controls">\n<source src="' +
e.source +
'"' +
(e.sourcemime ? ' type="' + e.sourcemime + '"' : "") +
" />\n" +
(e.altsource
? '<source src="' +
e.altsource +
'"' +
(e.altsourcemime
? ' type="' + e.altsourcemime + '"'
: "") +
" />\n"
: "") +
"</video>")(o, r)
);
}
},
W = (e) =>
e.hasAttribute("data-mce-object") ||
e.hasAttribute("data-ephox-embed-iri"),
q = {},
H = (e) => (t) => G(e, t),
J = (e, t) => {
const r = y(e);
return r
? ((e, t, r) =>
new Promise((o, a) => {
const s = (r) => (
r.html && (q[e.source] = r),
o({ url: e.source, html: r.html ? r.html : t(e) })
);
q[e.source] ? s(q[e.source]) : r({ url: e.source }, s, a);
}))(t, H(e), r)
: ((e, t) => Promise.resolve({ html: t(e), url: e.source }))(t, H(e));
},
K = (e, t) => {
const r = {};
return (
d(e, "dimensions").each((e) => {
l(["width", "height"], (o) => {
d(t, o)
.orThunk(() => d(e, o))
.each((e) => (r[o] = e));
});
}),
r
);
},
Q = (e, t) => {
const r =
t && "dimensions" !== t
? ((e, t) => d(t, e).bind((e) => d(e, "meta")))(t, e).getOr({})
: {},
a = ((e, t, r) => (a) => {
const s = () => d(e, a),
n = () => d(t, a),
l = (e) =>
d(e, "value").bind((e) => (e.length > 0 ? i.some(e) : i.none()));
return {
[a]: (a === r
? s().bind((e) =>
o(e) ? l(e).orThunk(n) : n().orThunk(() => i.from(e)),
)
: n().orThunk(() => s().bind((e) => (o(e) ? l(e) : i.from(e))))
).getOr(""),
};
})(e, r, t);
return {
...a("source"),
...a("altsource"),
...a("poster"),
...a("embed"),
...K(e, r),
};
},
V = (e) => {
const t = {
...e,
source: { value: d(e, "source").getOr("") },
altsource: { value: d(e, "altsource").getOr("") },
poster: { value: d(e, "poster").getOr("") },
};
return (
l(["width", "height"], (r) => {
d(e, r).each((e) => {
const o = t.dimensions || {};
(o[r] = e), (t.dimensions = o);
});
}),
t
);
},
X = (e) => (t) => {
const r =
t && t.msg
? "Media embed handler error: " + t.msg
: "Media embed handler threw unknown error.";
e.notificationManager.open({ type: "error", text: r });
},
Y = (e, t) => (o) => {
if (r(o.url) && o.url.trim().length > 0) {
const r = o.html,
a = { ...T(r, t.schema), source: o.url, embed: r };
e.setData(V(a));
}
},
Z = (e, t) => {
const r = e.dom.select("*[data-mce-object]");
e.insertContent(t),
((e, t) => {
const r = e.dom.select("*[data-mce-object]");
for (let e = 0; e < t.length; e++)
for (let o = r.length - 1; o >= 0; o--)
t[e] === r[o] && r.splice(o, 1);
e.selection.select(r[0]);
})(e, r),
e.nodeChanged();
},
ee = (e, t) => s(t) && "ephox-embed-iri" === t && s(B(e)),
te = (e, t) =>
((e, t) => e.width !== t.width || e.height !== t.height)(e, t) &&
ee(t.source, e.type),
re = (e) => {
const t = ((e) => {
const t = e.selection.getNode(),
r = W(t) ? e.serializer.serialize(t, { selection: !0 }) : "",
o = T(r, e.schema),
a = (() => {
if (ee(o.source, o.type)) {
const r = e.dom.getRect(t);
return {
width: r.w.toString().replace(/px$/, ""),
height: r.h.toString().replace(/px$/, ""),
};
}
return {};
})();
return { embed: r, ...o, ...a };
})(e),
r = ((e) => {
let t = e;
return {
get: () => t,
set: (e) => {
t = e;
},
};
})(t),
o = V(t),
a = k(e)
? [
{
type: "sizeinput",
name: "dimensions",
label: "Constrain proportions",
constrain: !0,
},
]
: [],
s = {
title: "General",
name: "general",
items: c([
[
{
name: "source",
type: "urlinput",
filetype: "media",
label: "Source",
},
],
a,
]),
},
i = [];
x(e) &&
i.push({
name: "altsource",
type: "urlinput",
filetype: "media",
label: "Alternative source URL",
}),
_(e) &&
i.push({
name: "poster",
type: "urlinput",
filetype: "image",
label: "Media poster (Image URL)",
});
const n = { title: "Advanced", name: "advanced", items: i },
l = [
s,
{
title: "Embed",
items: [
{
type: "textarea",
name: "embed",
label: "Paste your embed code below:",
},
],
},
];
i.length > 0 && l.push(n);
const m = { type: "tabpanel", tabs: l },
u = e.windowManager.open({
title: "Insert/Edit Media",
size: "normal",
body: m,
buttons: [
{ type: "cancel", name: "cancel", text: "Cancel" },
{ type: "submit", name: "save", text: "Save", primary: !0 },
],
onSubmit: (t) => {
const o = Q(t.getData());
((e, t, r) => {
var o, a;
(t.embed =
te(e, t) && k(r)
? G(r, { ...t, embed: "" })
: P(
null !== (o = t.embed) && void 0 !== o ? o : "",
t,
!1,
r.schema,
)),
t.embed && (e.source === t.source || ((a = t.source), h(q, a)))
? Z(r, t.embed)
: J(r, t)
.then((e) => {
Z(r, e.html);
})
.catch(X(r));
})(r.get(), o, e),
t.close();
},
onChange: (t, o) => {
switch (o.name) {
case "source":
((t, r) => {
const o = Q(r.getData(), "source");
t.source !== o.source &&
(Y(u, e)({ url: o.source, html: "" }),
J(e, o).then(Y(u, e)).catch(X(e)));
})(r.get(), t);
break;
case "embed":
((t) => {
var r;
const o = Q(t.getData()),
a = T(
null !== (r = o.embed) && void 0 !== r ? r : "",
e.schema,
);
t.setData(V(a));
})(t);
break;
case "dimensions":
case "altsource":
case "poster":
((t, r, o) => {
const a = Q(t.getData(), r),
s = te(o, a) && k(e) ? { ...a, embed: "" } : a,
i = G(e, s);
t.setData(V({ ...s, embed: i }));
})(t, o.name, r.get());
}
r.set(Q(t.getData()));
},
initialData: o,
});
};
var oe = tinymce.util.Tools.resolve("tinymce.Env");
const ae = (e) => {
const t = e.name;
return "iframe" === t || "video" === t || "audio" === t;
},
se = (e, t, r, o = null) => {
const a = e.attr(r);
return s(a) ? a : h(t, r) ? null : o;
},
ie = (e, t, r) => {
const o = "img" === t.name || "video" === e.name,
a = o ? "300" : null,
s = "audio" === e.name ? "30" : "150",
i = o ? s : null;
t.attr({ width: se(e, r, "width", a), height: se(e, r, "height", i) });
},
ne = (e, t) => {
const r = t.name,
o = new D("img", 1);
return (
ce(e, t, o),
ie(t, o, {}),
o.attr({
style: t.attr("style"),
src: oe.transparentSrc,
"data-mce-object": r,
class: "mce-object mce-object-" + r,
}),
o
);
},
le = (e, t) => {
var r;
const o = t.name,
a = new D("span", 1);
a.attr({
contentEditable: "false",
style: t.attr("style"),
"data-mce-object": o,
class: "mce-preview-object mce-object-" + o,
}),
ce(e, t, a);
const i = e.dom.parseStyle(
null !== (r = t.attr("style")) && void 0 !== r ? r : "",
),
n = new D(o, 1);
if (
(ie(t, n, i),
n.attr({
src: t.attr("src"),
style: t.attr("style"),
class: t.attr("class"),
}),
"iframe" === o)
)
n.attr({
allowfullscreen: t.attr("allowfullscreen"),
frameborder: "0",
});
else {
l(
[
"controls",
"crossorigin",
"currentTime",
"loop",
"muted",
"poster",
"preload",
],
(e) => {
n.attr(e, t.attr(e));
},
);
const r = a.attr("data-mce-html");
s(r) &&
((e, t, r, o) => {
const a = M(e.schema).parse(o, { context: t });
for (; a.firstChild; ) r.append(a.firstChild);
})(e, o, n, unescape(r));
}
const c = new D("span", 1);
return c.attr("class", "mce-shim"), a.append(n), a.append(c), a;
},
ce = (e, t, r) => {
var o;
const a = null !== (o = t.attributes) && void 0 !== o ? o : [];
let s = a.length;
for (; s--; ) {
const t = a[s].name;
let o = a[s].value;
"width" === t ||
"height" === t ||
"style" === t ||
((n = "data-mce-"), (i = t).length >= 9 && i.substr(0, 9) === n) ||
(("data" !== t && "src" !== t) || (o = e.convertURL(o, t)),
r.attr("data-mce-p-" + t, o));
}
var i, n;
const c = F({ inner: !0 }, e.schema),
m = new D("div", 1);
l(t.children(), (e) => m.append(e));
const u = c.serialize(m);
u && (r.attr("data-mce-html", escape(u)), r.empty());
},
me = (e) => {
const t = e.attr("class");
return r(t) && /\btiny-pageembed\b/.test(t);
},
ue = (e) => {
let t = e;
for (; (t = t.parent); )
if (t.attr("data-ephox-embed-iri") || me(t)) return !0;
return !1;
},
de = (e, t, r) => {
const o = (0, e.options.get)("xss_sanitization"),
a = f(e);
return M(e.schema, { sanitize: o, validate: a }).parse(r, { context: t });
},
he = (e) => (t) => {
const r = () => {
t.setEnabled(e.selection.isEditable());
};
return (
e.on("NodeChange", r),
r(),
() => {
e.off("NodeChange", r);
}
);
};
e.add(
"media",
(e) => (
((e) => {
const t = e.options.register;
t("audio_template_callback", { processor: "function" }),
t("video_template_callback", { processor: "function" }),
t("iframe_template_callback", { processor: "function" }),
t("media_live_embeds", { processor: "boolean", default: !0 }),
t("media_filter_html", { processor: "boolean", default: !0 }),
t("media_url_resolver", { processor: "function" }),
t("media_alt_source", { processor: "boolean", default: !0 }),
t("media_poster", { processor: "boolean", default: !0 }),
t("media_dimensions", { processor: "boolean", default: !0 });
})(e),
((e) => {
e.addCommand("mceMedia", () => {
re(e);
});
})(e),
((e) => {
const t = () => e.execCommand("mceMedia");
e.ui.registry.addToggleButton("media", {
tooltip: "Insert/edit media",
icon: "embed",
onAction: t,
onSetup: (t) => {
const r = e.selection;
t.setActive(W(r.getNode()));
const o = r.selectorChangedWithUnbind(
"img[data-mce-object],span[data-mce-object],div[data-ephox-embed-iri]",
t.setActive,
).unbind,
a = he(e)(t);
return () => {
o(), a();
};
},
}),
e.ui.registry.addMenuItem("media", {
icon: "embed",
text: "Media...",
onAction: t,
onSetup: he(e),
});
})(e),
((e) => {
e.on("ResolveName", (e) => {
let t;
1 === e.target.nodeType &&
(t = e.target.getAttribute("data-mce-object")) &&
(e.name = t);
});
})(e),
((e) => {
e.on("PreInit", () => {
const { schema: t, serializer: r, parser: o } = e,
a = t.getBoolAttrs();
l("webkitallowfullscreen mozallowfullscreen".split(" "), (e) => {
a[e] = {};
}),
((e, t) => {
const r = m(e);
for (let o = 0, a = r.length; o < a; o++) {
const a = r[o];
t(e[a], a);
}
})({ embed: ["wmode"] }, (e, r) => {
const o = t.getElementRule(r);
o &&
l(e, (e) => {
(o.attributes[e] = {}), o.attributesOrder.push(e);
});
}),
o.addNodeFilter(
"iframe,video,audio,object,embed",
((e) => (t) => {
let r,
o = t.length;
for (; o--; )
(r = t[o]),
r.parent &&
(r.parent.attr("data-mce-object") ||
(ae(r) && v(e)
? ue(r) || r.replace(le(e, r))
: ue(r) || r.replace(ne(e, r))));
})(e),
),
r.addAttributeFilter("data-mce-object", (t, r) => {
var o;
let a = t.length;
for (; a--; ) {
const s = t[a];
if (!s.parent) continue;
const i = s.attr(r),
n = new D(i, 1);
if ("audio" !== i) {
const e = s.attr("class");
e && -1 !== e.indexOf("mce-preview-object") && s.firstChild
? n.attr({
width: s.firstChild.attr("width"),
height: s.firstChild.attr("height"),
})
: n.attr({
width: s.attr("width"),
height: s.attr("height"),
});
}
n.attr({ style: s.attr("style") });
const c = null !== (o = s.attributes) && void 0 !== o ? o : [];
let m = c.length;
for (; m--; ) {
const e = c[m].name;
0 === e.indexOf("data-mce-p-") &&
n.attr(e.substr(11), c[m].value);
}
const u = s.attr("data-mce-html");
if (u) {
const t = de(e, i, unescape(u));
l(t.children(), (e) => n.append(e));
}
s.replace(n);
}
});
}),
e.on("SetContent", () => {
const t = e.dom;
l(t.select("span.mce-preview-object"), (e) => {
0 === t.select("span.mce-shim", e).length &&
t.add(e, "span", { class: "mce-shim" });
});
});
})(e),
((e) => {
e.on("click keyup touchend", () => {
const t = e.selection.getNode();
t &&
e.dom.hasClass(t, "mce-preview-object") &&
e.dom.getAttrib(t, "data-mce-selected") &&
t.setAttribute("data-mce-selected", "2");
}),
e.on("ObjectResized", (t) => {
const r = t.target;
if (r.getAttribute("data-mce-object")) {
let o = r.getAttribute("data-mce-html");
o &&
((o = unescape(o)),
r.setAttribute(
"data-mce-html",
escape(
P(
o,
{ width: String(t.width), height: String(t.height) },
!1,
e.schema,
),
),
));
}
});
})(e),
((e) => ({
showDialog: () => {
re(e);
},
}))(e)
),
);
})();