tinymce.PluginManager.add("image", function (e) {
function t(e, t) {
function n(e, n) {
r.parentNode && r.parentNode.removeChild(r), t({ width: e, height: n });
}
var r = document.createElement("img");
(r.onload = function () {
n(Math.max(r.width, r.clientWidth), Math.max(r.height, r.clientHeight));
}),
(r.onerror = function () {
n();
});
var i = r.style;
(i.visibility = "hidden"), (i.position = "fixed"), (i.bottom = i.left = 0), (i.width = i.height = "auto"), document.body.appendChild(r), (r.src = e);
}
function n(e, t, n) {
function r(e, n) {
return (
(n = n || []),
tinymce.each(e, function (e) {
var i = { text: e.text || e.title };
e.menu ? (i.menu = r(e.menu)) : ((i.value = e.value), t(i)), n.push(i);
}),
n
);
}
return r(e, n || []);
}
function r(t) {
return function () {
var n = e.settings.image_list;
"string" == typeof n
? tinymce.util.XHR.send({
url: n,
success: function (e) {
t(tinymce.util.JSON.parse(e));
},
})
: "function" == typeof n
? n(t)
: t(n);
};
}
function i(r) {
function i() {
var e, t, n, r;
(e = f.find("#width")[0]),
(t = f.find("#height")[0]),
e &&
t &&
((n = e.value()),
(r = t.value()),
f.find("#constrain")[0].checked() && h && g && n && r && (h != n ? ((r = Math.round((n / h) * r)), isNaN(r) || t.value(r)) : ((n = Math.round((r / g) * n)), isNaN(n) || e.value(n))),
(h = n),
(g = r));
}
function o() {
function t(t) {
function n() {
(t.onload = t.onerror = null), e.selection && (e.selection.select(t), e.nodeChanged());
}
(t.onload = function () {
y.width || y.height || !x || C.setAttribs(t, { width: t.clientWidth, height: t.clientHeight }), n();
}),
(t.onerror = n);
}
var n, r;
u(),
i(),
(y = tinymce.extend(y, f.toJSON())),
y.alt || (y.alt = ""),
y.title || (y.title = ""),
"" === y.width && (y.width = null),
"" === y.height && (y.height = null),
y.style || (y.style = null),
(y = { src: y.src, alt: y.alt, title: y.title, width: y.width, height: y.height, style: y.style, caption: y.caption, class: y["class"] }),
e.undoManager.transact(function () {
function i(t) {
return e.schema.getTextBlockElements()[t.nodeName];
}
if (!y.src) return void (p && (C.remove(p), e.focus(), e.nodeChanged()));
if (
("" === y.title && (y.title = null),
p ? C.setAttribs(p, y) : ((y.id = "__mcenew"), e.focus(), e.selection.setContent(C.createHTML("img", y)), (p = C.get("__mcenew")), C.setAttrib(p, "id", null)),
e.editorUpload.uploadImagesAuto(),
y.caption === !1 && C.is(p.parentNode, "figure.image") && ((n = p.parentNode), C.insertAfter(p, n), C.remove(n)),
y.caption !== !0)
)
t(p);
else if (!C.is(p.parentNode, "figure.image")) {
(r = p), (p = p.cloneNode(!0)), (n = C.create("figure", { class: "image" })), n.appendChild(p), n.appendChild(C.create("figcaption", { contentEditable: !0 }, "Caption")), (n.contentEditable = !1);
var o = C.getParent(r, i);
o ? C.split(o, r, n) : C.replace(n, r), e.selection.select(n);
}
});
}
function a(e) {
return e && (e = e.replace(/px$/, "")), e;
}
function s(n) {
var r,
i,
o,
a = n.meta || {};
v && v.value(e.convertURL(this.value(), "src")),
tinymce.each(a, function (e, t) {
f.find("#" + t).value(e);
}),
a.width ||
a.height ||
((r = e.convertURL(this.value(), "src")),
(i = e.settings.image_prepend_url),
(o = new RegExp("^(?:[a-z]+:)?//", "i")),
i && !o.test(r) && r.substring(0, i.length) !== i && (r = i + r),
this.value(r),
t(e.documentBaseURI.toAbsolute(this.value()), function (e) {
e.width && e.height && x && ((h = e.width), (g = e.height), f.find("#width").value(h), f.find("#height").value(g));
}));
}
function l(e) {
e.meta = f.toJSON();
}
function c(e) {
if (e.margin) {
var t = e.margin.split(" ");
switch (t.length) {
case 1:
(e["margin-top"] = e["margin-top"] || t[0]), (e["margin-right"] = e["margin-right"] || t[0]), (e["margin-bottom"] = e["margin-bottom"] || t[0]), (e["margin-left"] = e["margin-left"] || t[0]);
break;
case 2:
(e["margin-top"] = e["margin-top"] || t[0]), (e["margin-right"] = e["margin-right"] || t[1]), (e["margin-bottom"] = e["margin-bottom"] || t[0]), (e["margin-left"] = e["margin-left"] || t[1]);
break;
case 3:
(e["margin-top"] = e["margin-top"] || t[0]), (e["margin-right"] = e["margin-right"] || t[1]), (e["margin-bottom"] = e["margin-bottom"] || t[2]), (e["margin-left"] = e["margin-left"] || t[1]);
break;
case 4:
(e["margin-top"] = e["margin-top"] || t[0]), (e["margin-right"] = e["margin-right"] || t[1]), (e["margin-bottom"] = e["margin-bottom"] || t[2]), (e["margin-left"] = e["margin-left"] || t[3]);
}
delete e.margin;
}
return e;
}
function u() {
function t(e) {
return e.length > 0 && /^[0-9]+$/.test(e) && (e += "px"), e;
}
if (e.settings.image_advtab) {
var n = f.toJSON(),
r = C.parseStyle(n.style);
(r = c(r)),
n.vspace && (r["margin-top"] = r["margin-bottom"] = t(n.vspace)),
n.hspace && (r["margin-left"] = r["margin-right"] = t(n.hspace)),
n.border && (r["border-width"] = t(n.border)),
f.find("#style").value(C.serializeStyle(C.parseStyle(C.serializeStyle(r))));
}
}
function d() {
if (e.settings.image_advtab) {
var t = f.toJSON(),
n = C.parseStyle(t.style);
f.find("#vspace").value(""),
f.find("#hspace").value(""),
(n = c(n)),
((n["margin-top"] && n["margin-bottom"]) || (n["margin-right"] && n["margin-left"])) &&
(n["margin-top"] === n["margin-bottom"] ? f.find("#vspace").value(a(n["margin-top"])) : f.find("#vspace").value(""),
n["margin-right"] === n["margin-left"] ? f.find("#hspace").value(a(n["margin-right"])) : f.find("#hspace").value("")),
n["border-width"] && f.find("#border").value(a(n["border-width"])),
f.find("#style").value(C.serializeStyle(C.parseStyle(C.serializeStyle(n))));
}
}
var f,
p,
m,
h,
g,
v,
b,
y = {},
C = e.dom,
x = e.settings.image_dimensions !== !1;
(p = e.selection.getNode()),
(m = C.getParent(p, "figure.image")),
m && (p = C.select("img", m)[0]),
p && ("IMG" != p.nodeName || p.getAttribute("data-mce-object") || p.getAttribute("data-mce-placeholder")) && (p = null),
p &&
((h = C.getAttrib(p, "width")),
(g = C.getAttrib(p, "height")),
(y = { src: C.getAttrib(p, "src"), alt: C.getAttrib(p, "alt"), title: C.getAttrib(p, "title"), class: C.getAttrib(p, "class"), width: h, height: g, caption: !!m })),
r &&
(v = {
type: "listbox",
label: "Image list",
values: n(
r,
function (t) {
t.value = e.convertURL(t.value || t.url, "src");
},
[{ text: "None", value: "" }]
),
value: y.src && e.convertURL(y.src, "src"),
onselect: function (e) {
var t = f.find("#alt");
(!t.value() || (e.lastControl && t.value() == e.lastControl.text())) && t.value(e.control.text()), f.find("#src").value(e.control.value()).fire("change");
},
onPostRender: function () {
v = this;
},
}),
e.settings.image_class_list &&
(b = {
name: "class",
type: "listbox",
label: "Class",
values: n(e.settings.image_class_list, function (t) {
t.value &&
(t.textStyle = function () {
return e.formatter.getCssText({ inline: "img", classes: [t.value] });
});
}),
});
var w = [{ name: "src", type: "filepicker", filetype: "image", label: "Source", autofocus: !0, onchange: s, onbeforecall: l }, v];
e.settings.image_description !== !1 && w.push({ name: "alt", type: "textbox", label: "Image description" }),
e.settings.image_title && w.push({ name: "title", type: "textbox", label: "Image Title" }),
x &&
w.push({
type: "container",
label: "Dimensions",
layout: "flex",
direction: "row",
align: "center",
spacing: 5,
items: [
{ name: "width", type: "textbox", maxLength: 5, size: 3, onchange: i, ariaLabel: "Width" },
{ type: "label", text: "x" },
{ name: "height", type: "textbox", maxLength: 5, size: 3, onchange: i, ariaLabel: "Height" },
{ name: "constrain", type: "checkbox", checked: !0, text: "Constrain proportions" },
],
}),
w.push(b),
e.settings.image_caption && tinymce.Env.ceFalse && w.push({ name: "caption", type: "checkbox", label: "Caption" }),
e.settings.image_advtab
? (p &&
(p.style.marginLeft && p.style.marginRight && p.style.marginLeft === p.style.marginRight && (y.hspace = a(p.style.marginLeft)),
p.style.marginTop && p.style.marginBottom && p.style.marginTop === p.style.marginBottom && (y.vspace = a(p.style.marginTop)),
p.style.borderWidth && (y.border = a(p.style.borderWidth)),
(y.style = e.dom.serializeStyle(e.dom.parseStyle(e.dom.getAttrib(p, "style"))))),
(f = e.windowManager.open({
title: "Insert/edit image",
data: y,
bodyType: "tabpanel",
body: [
{ title: "General", type: "form", items: w },
{
title: "Advanced",
type: "form",
pack: "start",
items: [
{ label: "Style", name: "style", type: "textbox", onchange: d },
{
type: "form",
layout: "grid",
packV: "start",
columns: 2,
padding: 0,
alignH: ["left", "right"],
defaults: { type: "textbox", maxWidth: 50, onchange: u },
items: [
{ label: "Vertical space", name: "vspace" },
{ label: "Horizontal space", name: "hspace" },
{ label: "Border", name: "border" },
],
},
],
},
],
onSubmit: o,
})))
: (f = e.windowManager.open({ title: "Insert/edit image", data: y, body: w, onSubmit: o }));
}
e.on("preInit", function () {
function t(e) {
var t = e.attr("class");
return t && /\bimage\b/.test(t);
}
function n(e) {
return function (n) {
function r(t) {
t.attr("contenteditable", e ? "true" : null);
}
for (var i, o = n.length; o--;) (i = n[o]), t(i) && (i.attr("contenteditable", e ? "false" : null), tinymce.each(i.getAll("figcaption"), r));
};
}
e.parser.addNodeFilter("figure", n(!0)), e.serializer.addNodeFilter("figure", n(!1));
}),
e.addButton("image", { icon: "image", tooltip: "Insert/edit image", onclick: r(i), stateSelector: "img:not([data-mce-object],[data-mce-placeholder]),figure.image" }),
e.addMenuItem("image", { icon: "image", text: "Image", onclick: r(i), context: "insert", prependToContext: !0 }),
e.addCommand("mceImage", r(i));
});