UNPKG

beansflight-json-form

Version:

> **版本号:verison 0.23.17**

1,125 lines (1,124 loc) 34.5 kB
/** * TinyMCE version 6.1.0 (2022-06-29) */ !(function () { 'use strict' var e = tinymce.util.Tools.resolve('tinymce.PluginManager') const t = Object.getPrototypeOf, a = (e, t, a) => { var i return ( !!a(e, t.prototype) || (null === (i = e.constructor) || void 0 === i ? void 0 : i.name) === t.name ) }, i = e => t => (e => { const t = typeof e return null === e ? 'null' : 'object' === t && Array.isArray(e) ? 'array' : 'object' === t && a(e, String, (e, t) => t.isPrototypeOf(e)) ? 'string' : t })(t) === e, s = e => t => typeof t === e, r = i('string'), o = i('object'), n = e => ((e, i) => o(e) && a(e, i, (e, a) => t(e) === a))(e, Object), l = i('array'), c = (null, e => null === e) const m = s('boolean'), d = e => !(e => null == e)(e), g = s('function'), p = s('number'), u = () => {} class h { constructor(e, t) { ;(this.tag = e), (this.value = t) } static some(e) { return new h(!0, e) } static none() { return h.singletonNone } fold(e, t) { return this.tag ? t(this.value) : e() } isSome() { return this.tag } isNone() { return !this.tag } map(e) { return this.tag ? h.some(e(this.value)) : h.none() } bind(e) { return this.tag ? e(this.value) : h.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 : h.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 d(e) ? h.some(e) : h.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()' } } h.singletonNone = new h(!1) const b = Object.keys, y = Object.hasOwnProperty, v = (e, t) => y.call(e, t), f = Array.prototype.push, w = e => { const t = [] for (let a = 0, i = e.length; a < i; ++a) { if (!l(e[a])) throw new Error( 'Arr.flatten item ' + a + ' was not an array, input: ' + e ) f.apply(t, e[a]) } return t } 'undefined' != typeof window ? window : Function('return this;')() const A = (e, t, a) => { ;((e, t, a) => { if (!(r(a) || m(a) || p(a))) throw ( (console.error( 'Invalid call to Attribute.set. Key ', t, ':: Value ', a, ':: Element ', e ), new Error('Attribute value was not simple')) ) e.setAttribute(t, a + '') })(e.dom, t, a) }, D = e => { if (null == e) throw new Error('Node cannot be null or undefined') return { dom: e } }, _ = D var C = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'), I = tinymce.util.Tools.resolve('tinymce.util.URI') const U = e => e.length > 0, x = e => t => t.options.get(e), S = x('image_dimensions'), N = x('image_advtab'), T = x('image_uploadtab'), O = x('image_prepend_url'), L = x('image_class_list'), E = x('image_description'), j = x('image_title'), M = x('image_caption'), R = x('image_list'), k = x('a11y_advanced_options'), z = x('automatic_uploads'), P = (e, t) => Math.max(parseInt(e, 10), parseInt(t, 10)), B = e => (e && (e = e.replace(/px$/, '')), e), F = e => (e.length > 0 && /^[0-9]+$/.test(e) && (e += 'px'), e), H = e => 'IMG' === e.nodeName && (e.hasAttribute('data-mce-object') || e.hasAttribute('data-mce-placeholder')), G = (e, t) => { const a = e.options.get return I.isDomSafe(t, 'img', { allow_html_data_urls: a('allow_html_data_urls'), allow_script_urls: a('allow_script_urls'), allow_svg_data_urls: a('allow_svg_data_urls') }) }, W = C.DOM, $ = e => e.style.marginLeft && e.style.marginRight && e.style.marginLeft === e.style.marginRight ? B(e.style.marginLeft) : '', V = e => e.style.marginTop && e.style.marginBottom && e.style.marginTop === e.style.marginBottom ? B(e.style.marginTop) : '', K = e => (e.style.borderWidth ? B(e.style.borderWidth) : ''), Z = (e, t) => (e.hasAttribute(t) ? e.getAttribute(t) : ''), q = (e, t) => (e.style[t] ? e.style[t] : ''), J = e => null !== e.parentNode && 'FIGURE' === e.parentNode.nodeName, Q = (e, t, a) => { '' === a ? e.removeAttribute(t) : e.setAttribute(t, a) }, X = (e, t) => { const a = e.getAttribute('style'), i = t(null !== a ? a : '') i.length > 0 ? (e.setAttribute('style', i), e.setAttribute('data-mce-style', i)) : e.removeAttribute('style') }, Y = (e, t) => (e, a, i) => { e.style[a] ? ((e.style[a] = F(i)), X(e, t)) : Q(e, a, i) }, ee = (e, t) => (e.style[t] ? B(e.style[t]) : Z(e, t)), te = (e, t) => { const a = F(t) ;(e.style.marginLeft = a), (e.style.marginRight = a) }, ae = (e, t) => { const a = F(t) ;(e.style.marginTop = a), (e.style.marginBottom = a) }, ie = (e, t) => { const a = F(t) e.style.borderWidth = a }, se = (e, t) => { e.style.borderStyle = t }, re = e => 'FIGURE' === e.nodeName, oe = e => 0 === W.getAttrib(e, 'alt').length && 'presentation' === W.getAttrib(e, 'role'), ne = e => (oe(e) ? '' : Z(e, 'alt')), le = (e, t) => { const a = document.createElement('img') return ( Q(a, 'style', t.style), ($(a) || '' !== t.hspace) && te(a, t.hspace), (V(a) || '' !== t.vspace) && ae(a, t.vspace), (K(a) || '' !== t.border) && ie(a, t.border), ((e => q(e, 'borderStyle'))(a) || '' !== t.borderStyle) && se(a, t.borderStyle), e(a.getAttribute('style')) ) }, ce = (e, t) => ({ src: Z(t, 'src'), alt: ne(t), title: Z(t, 'title'), width: ee(t, 'width'), height: ee(t, 'height'), class: Z(t, 'class'), style: e(Z(t, 'style')), caption: J(t), hspace: $(t), vspace: V(t), border: K(t), borderStyle: q(t, 'borderStyle'), isDecorative: oe(t) }), me = (e, t, a, i, s) => { a[i] !== t[i] && s(e, i, a[i]) }, de = (e, t, a) => { if (a) { W.setAttrib(e, 'role', 'presentation') const t = _(e) A(t, 'alt', '') } else { if (c(t)) { 'alt', _(e).dom.removeAttribute('alt') } else { const a = _(e) A(a, 'alt', t) } 'presentation' === W.getAttrib(e, 'role') && W.setAttrib(e, 'role', '') } }, ge = (e, t) => (a, i, s) => { e(a, s), X(a, t) }, pe = (e, t, a) => { const i = ce(e, a) me(a, i, t, 'caption', (e, t, a) => (e => { J(e) ? (e => { const t = e.parentNode W.insertAfter(e, t), W.remove(t) })(e) : (e => { const t = W.create('figure', { class: 'image' }) W.insertAfter(t, e), t.appendChild(e), t.appendChild( W.create( 'figcaption', { contentEditable: 'true' }, 'Caption' ) ), (t.contentEditable = 'false') })(e) })(e) ), me(a, i, t, 'src', Q), me(a, i, t, 'title', Q), me(a, i, t, 'width', Y(0, e)), me(a, i, t, 'height', Y(0, e)), me(a, i, t, 'class', Q), me( a, i, t, 'style', ge((e, t) => Q(e, 'style', t), e) ), me(a, i, t, 'hspace', ge(te, e)), me(a, i, t, 'vspace', ge(ae, e)), me(a, i, t, 'border', ge(ie, e)), me(a, i, t, 'borderStyle', ge(se, e)), ((e, t, a) => { ;(a.alt === t.alt && a.isDecorative === t.isDecorative) || de(e, a.alt, a.isDecorative) })(a, i, t) }, ue = (e, t) => { const a = (e => { if (e.margin) { const t = String(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 })(e.dom.styles.parse(t)), i = e.dom.styles.parse(e.dom.styles.serialize(a)) return e.dom.styles.serialize(i) }, he = e => { const t = e.selection.getNode(), a = e.dom.getParent(t, 'figure.image') return a ? e.dom.select('img', a)[0] : t && ('IMG' !== t.nodeName || H(t)) ? null : t }, be = (e, t) => { const a = e.dom, i = ((t, a) => { const i = {} var s return ( ((e, t, a, i) => { ;((e, t) => { const a = b(e) for (let i = 0, s = a.length; i < s; i++) { const s = a[i] t(e[s], s) } })(e, (e, s) => { ;(t(e, s) ? a : i)(e, s) }) })( t, (t, a) => !e.schema.isValidChild(a, 'figure'), ((s = i), (e, t) => { s[t] = e }), u ), i ) })(e.schema.getTextBlockElements()), s = a.getParent( t.parentNode, e => { return ( (t = i), (a = e.nodeName), v(t, a) && void 0 !== t[a] && null !== t[a] ) var t, a }, e.getBody() ) return s ? a.split(s, t) : t }, ye = (e, t) => { const a = ((t, a) => { const i = document.createElement('img') if ( (pe(t => ue(e, t), { ...a, caption: !1 }, i), de(i, a.alt, a.isDecorative), a.caption) ) { const e = W.create('figure', { class: 'image' }) return ( e.appendChild(i), e.appendChild( W.create('figcaption', { contentEditable: 'true' }, 'Caption') ), (e.contentEditable = 'false'), e ) } return i })(0, t) e.dom.setAttrib(a, 'data-mce-id', '__mcenew'), e.focus(), e.selection.setContent(a.outerHTML) const i = e.dom.select('*[data-mce-id="__mcenew"]')[0] if ((e.dom.setAttrib(i, 'data-mce-id', null), re(i))) { const t = be(e, i) e.selection.select(t) } else e.selection.select(i) }, ve = (e, t) => { const a = he(e) if (a) { const i = { ...ce(t => ue(e, t), a), ...t }, s = ((e, t) => { const a = t.src return { ...t, src: G(e, a) ? a : '' } })(e, i) i.src ? ((e, t) => { const a = he(e) if ( (pe(t => ue(e, t), t, a), ((e, t) => { e.dom.setAttrib(t, 'src', t.getAttribute('src')) })(e, a), re(a.parentNode)) ) { const t = a.parentNode be(e, t), e.selection.select(a.parentNode) } else e.selection.select(a), ((e, t, a) => { const i = () => { ;(a.onload = a.onerror = null), e.selection && (e.selection.select(a), e.nodeChanged()) } ;(a.onload = () => { t.width || t.height || !S(e) || e.dom.setAttribs(a, { width: String(a.clientWidth), height: String(a.clientHeight) }), i() }), (a.onerror = i) })(e, t, a) })(e, s) : ((e, t) => { if (t) { const a = e.dom.is(t.parentNode, 'figure.image') ? t.parentNode : t e.dom.remove(a), e.focus(), e.nodeChanged(), e.dom.isEmpty(e.getBody()) && (e.setContent(''), e.selection.setCursorLocation()) } })(e, a) } else t.src && ye(e, { src: '', alt: '', title: '', width: '', height: '', class: '', style: '', caption: !1, hspace: '', vspace: '', border: '', borderStyle: '', isDecorative: !1, ...t }) }, fe = ((we = (e, t) => (n(e) && n(t) ? fe(e, t) : t)), (...e) => { if (0 === e.length) throw new Error("Can't merge zero objects") const t = {} for (let a = 0; a < e.length; a++) { const i = e[a] for (const e in i) v(i, e) && (t[e] = we(t[e], i[e])) } return t }) var we, Ae = tinymce.util.Tools.resolve('tinymce.util.ImageUploader'), De = tinymce.util.Tools.resolve('tinymce.util.Tools') const _e = e => (r(e.value) ? e.value : ''), Ce = (e, t) => { const a = [] return ( De.each(e, e => { const i = (e => (r(e.text) ? e.text : r(e.title) ? e.title : ''))(e) if (void 0 !== e.menu) { const s = Ce(e.menu, t) a.push({ text: i, items: s }) } else { const s = t(e) a.push({ text: i, value: s }) } }), a ) }, Ie = (e = _e) => t => t ? h.from(t).map(t => Ce(t, e)) : h.none(), Ue = (e, t) => ((e, a) => { for (let a = 0; a < e.length; a++) { const s = (e => v(e, 'items'))((i = e[a])) ? Ue(i.items, t) : i.value === t ? h.some(i) : h.none() if (s.isSome()) return s } var i return h.none() })(e), xe = Ie, Se = (e, t) => e.bind(e => Ue(e, t)), Ne = e => { const t = xe(t => e.convertURL(t.value || t.url, 'src')), a = new Promise(a => { ;((e, t) => { const a = R(e) r(a) ? fetch(a).then(e => { e.ok && e.json().then(t) }) : g(a) ? a(t) : t(a) })(e, e => { a(t(e).map(e => w([[{ text: 'None', value: '' }], e]))) }) }), i = ((A = L(e)), Ie(_e)(A)), s = N(e), o = T(e), n = (e => U(e.options.get('images_upload_url')))(e), l = (e => d(e.options.get('images_upload_handler')))(e), c = (e => { const t = he(e) return t ? ce(t => ue(e, t), t) : { src: '', alt: '', title: '', width: '', height: '', class: '', style: '', caption: !1, hspace: '', vspace: '', border: '', borderStyle: '', isDecorative: !1 } })(e), m = E(e), p = j(e), u = S(e), b = M(e), y = k(e), v = z(e), f = h.some(O(e)).filter(e => r(e) && e.length > 0) var A return a.then(e => ({ image: c, imageList: e, classList: i, hasAdvTab: s, hasUploadTab: o, hasUploadUrl: n, hasUploadHandler: l, hasDescription: m, hasImageTitle: p, hasDimensions: u, hasImageCaption: b, prependURL: f, hasAccessibilityOptions: y, automaticUploads: v })) }, Te = e => { const t = e.imageList.map(e => ({ name: 'images', type: 'listbox', label: 'Image list', items: e })), a = { name: 'alt', type: 'input', label: 'Alternative description', enabled: !(e.hasAccessibilityOptions && e.image.isDecorative) }, i = e.classList.map(e => ({ name: 'classes', type: 'listbox', label: 'Class', items: e })) return w([ [{ name: 'src', type: 'urlinput', filetype: 'image', label: 'Source' }], t.toArray(), e.hasAccessibilityOptions && e.hasDescription ? [ { type: 'label', label: 'Accessibility', items: [ { name: 'isDecorative', type: 'checkbox', label: 'Image is decorative' } ] } ] : [], e.hasDescription ? [a] : [], e.hasImageTitle ? [{ name: 'title', type: 'input', label: 'Image title' }] : [], e.hasDimensions ? [{ name: 'dimensions', type: 'sizeinput' }] : [], [ { ...((s = e.classList.isSome() && e.hasImageCaption), s ? { type: 'grid', columns: 2 } : { type: 'panel' }), items: w([ i.toArray(), e.hasImageCaption ? [ { type: 'label', label: 'Caption', items: [ { type: 'checkbox', name: 'caption', label: 'Show caption' } ] } ] : [] ]) } ] ]) var s }, Oe = e => ({ title: 'General', name: 'general', items: Te(e) }), Le = Te, Ee = e => ({ src: { value: e.src, meta: {} }, images: e.src, alt: e.alt, title: e.title, dimensions: { width: e.width, height: e.height }, classes: e.class, caption: e.caption, style: e.style, vspace: e.vspace, border: e.border, hspace: e.hspace, borderstyle: e.borderStyle, fileinput: [], isDecorative: e.isDecorative }), je = (e, t) => ({ src: e.src.value, alt: 0 === e.alt.length && t ? null : e.alt, title: e.title, width: e.dimensions.width, height: e.dimensions.height, class: e.classes, style: e.style, caption: e.caption, hspace: e.hspace, vspace: e.vspace, border: e.border, borderStyle: e.borderstyle, isDecorative: e.isDecorative }), Me = (e, t, a, i) => { ;((e, t) => { const a = t.getData() ;((e, t) => /^(?:[a-zA-Z]+:)?\/\//.test(t) ? h.none() : e.prependURL.bind(e => t.substring(0, e.length) !== e ? h.some(e + t) : h.none() ))(e, a.src.value).each(e => { t.setData({ src: { value: e, meta: a.src.meta } }) }) })(t, i), ((e, t) => { const a = t.getData(), i = a.src.meta if (void 0 !== i) { const s = fe({}, a) ;((e, t, a) => { e.hasDescription && r(a.alt) && (t.alt = a.alt), e.hasAccessibilityOptions && (t.isDecorative = a.isDecorative || t.isDecorative || !1), e.hasImageTitle && r(a.title) && (t.title = a.title), e.hasDimensions && (r(a.width) && (t.dimensions.width = a.width), r(a.height) && (t.dimensions.height = a.height)), r(a.class) && Se(e.classList, a.class).each(e => { t.classes = e.value }), e.hasImageCaption && m(a.caption) && (t.caption = a.caption), e.hasAdvTab && (r(a.style) && (t.style = a.style), r(a.vspace) && (t.vspace = a.vspace), r(a.border) && (t.border = a.border), r(a.hspace) && (t.hspace = a.hspace), r(a.borderstyle) && (t.borderstyle = a.borderstyle)) })(e, s, i), t.setData(s) } })(t, i), ((e, t, a, i) => { const s = i.getData(), r = s.src.value, o = s.src.meta || {} o.width || o.height || !t.hasDimensions || (U(r) ? e .imageSize(r) .then(e => { a.open && i.setData({ dimensions: e }) }) .catch(e => console.error(e)) : i.setData({ dimensions: { width: '', height: '' } })) })(e, t, a, i), ((e, t, a) => { const i = a.getData(), s = Se(e.imageList, i.src.value) ;(t.prevImage = s), a.setData({ images: s.map(e => e.value).getOr('') }) })(t, a, i) }, Re = (e, t, a, i) => { const s = i.getData() var r i.block('Uploading image'), ((r = s.fileinput), ((e, t) => (0 < e.length ? h.some(e[0]) : h.none()))(r)).fold( () => { i.unblock() }, s => { const r = URL.createObjectURL(s), o = () => { i.unblock(), URL.revokeObjectURL(r) }, n = s => { i.setData({ src: { value: s, meta: {} } }), i.showTab('general'), Me(e, t, a, i) } var l ;((l = s), new Promise((e, t) => { const a = new FileReader() ;(a.onload = () => { e(a.result) }), (a.onerror = () => { t(a.error.message) }), a.readAsDataURL(l) })).then(a => { const l = e.createBlobCache(s, r, a) t.automaticUploads ? e .uploadImage(l) .then(e => { n(e.url), o() }) .catch(t => { o(), e.alertErr(t) }) : (e.addToBlobCache(l), n(l.blobUri()), i.unblock()) }) } ) }, ke = (e, t, a) => (i, s) => { 'src' === s.name ? Me(e, t, a, i) : 'images' === s.name ? ((e, t, a, i) => { const s = i.getData(), r = Se(t.imageList, s.images) r.each(e => { const t = '' === s.alt || a.prevImage.map(e => e.text === s.alt).getOr(!1) t ? '' === e.value ? i.setData({ src: e, alt: a.prevAlt }) : i.setData({ src: e, alt: e.text }) : i.setData({ src: e }) }), (a.prevImage = r), Me(e, t, a, i) })(e, t, a, i) : 'alt' === s.name ? (a.prevAlt = i.getData().alt) : 'fileinput' === s.name ? Re(e, t, a, i) : 'isDecorative' === s.name && i.setEnabled('alt', !i.getData().isDecorative) }, ze = e => () => { e.open = !1 }, Pe = e => e.hasAdvTab || e.hasUploadUrl || e.hasUploadHandler ? { type: 'tabpanel', tabs: w([ [Oe(e)], e.hasAdvTab ? [ { title: 'Advanced', name: 'advanced', items: [ { type: 'grid', columns: 2, items: [ { type: 'input', label: 'Vertical space', name: 'vspace', inputMode: 'numeric' }, { type: 'input', label: 'Horizontal space', name: 'hspace', inputMode: 'numeric' }, { type: 'input', label: 'Border width', name: 'border', inputMode: 'numeric' }, { type: 'listbox', name: 'borderstyle', label: 'Border style', items: [ { text: 'Select...', value: '' }, { text: 'Solid', value: 'solid' }, { text: 'Dotted', value: 'dotted' }, { text: 'Dashed', value: 'dashed' }, { text: 'Double', value: 'double' }, { text: 'Groove', value: 'groove' }, { text: 'Ridge', value: 'ridge' }, { text: 'Inset', value: 'inset' }, { text: 'Outset', value: 'outset' }, { text: 'None', value: 'none' }, { text: 'Hidden', value: 'hidden' } ] } ] } ] } ] : [], e.hasUploadTab && (e.hasUploadUrl || e.hasUploadHandler) ? [ { title: 'Upload', name: 'upload', items: [{ type: 'dropzone', name: 'fileinput' }] } ] : [] ]) } : { type: 'panel', items: Le(e) }, Be = (e, t, a) => i => { const s = fe(Ee(t.image), i.getData()), r = { ...s, style: le(a.normalizeCss, je(s, !1)) } e.execCommand('mceUpdateImage', !1, je(r, t.hasAccessibilityOptions)), e.editorUpload.uploadImagesAuto(), i.close() }, Fe = e => t => G(e, t) ? (e => new Promise(t => { const a = document.createElement('img'), i = e => { ;(a.onload = a.onerror = null), a.parentNode && a.parentNode.removeChild(a), t(e) } ;(a.onload = () => { const e = { width: P(a.width, a.clientWidth), height: P(a.height, a.clientHeight) } i(Promise.resolve(e)) }), (a.onerror = () => { i(Promise.reject(`Failed to get image dimensions for: ${e}`)) }) const s = a.style ;(s.visibility = 'hidden'), (s.position = 'fixed'), (s.bottom = s.left = '0px'), (s.width = s.height = 'auto'), document.body.appendChild(a), (a.src = e) }))(e.documentBaseURI.toAbsolute(t)).then(e => ({ width: String(e.width), height: String(e.height) })) : Promise.resolve({ width: '', height: '' }), He = e => (t, a, i) => e.editorUpload.blobCache.create({ blob: t, blobUri: a, name: t.name ? t.name.replace(/\.[^\.]+$/, '') : null, filename: t.name, base64: i.split(',')[1] }), Ge = e => t => { e.editorUpload.blobCache.add(t) }, We = e => t => { e.windowManager.alert(t) }, $e = e => t => ue(e, t), Ve = e => t => e.dom.parseStyle(t), Ke = e => (t, a) => e.dom.serializeStyle(t, a), Ze = e => t => Ae(e) .upload([t], !1) .then(e => 0 === e.length ? Promise.reject('Failed to upload image') : !1 === e[0].status ? Promise.reject(e[0].error.message) : e[0] ), qe = e => { const t = { imageSize: Fe(e), addToBlobCache: Ge(e), createBlobCache: He(e), alertErr: We(e), normalizeCss: $e(e), parseStyle: Ve(e), serializeStyle: Ke(e), uploadImage: Ze(e) } return { open: () => { Ne(e) .then(a => { const i = (e => ({ prevImage: Se(e.imageList, e.image.src), prevAlt: e.image.alt, open: !0 }))(a) return { title: 'Insert/Edit Image', size: 'normal', body: Pe(a), buttons: [ { type: 'cancel', name: 'cancel', text: 'Cancel' }, { type: 'submit', name: 'save', text: 'Save', primary: !0 } ], initialData: Ee(a.image), onSubmit: Be(e, a, t), onChange: ke(t, a, i), onClose: ze(i) } }) .then(e.windowManager.open) } } }, Je = e => { const t = e.attr('class') return t && /\bimage\b/.test(t) }, Qe = e => t => { let a = t.length const i = t => { t.attr('contenteditable', e ? 'true' : null) } for (; a--; ) { const s = t[a] Je(s) && (s.attr('contenteditable', e ? 'false' : null), De.each(s.getAll('figcaption'), i)) } } e.add('image', e => { ;(e => { const t = e.options.register t('image_dimensions', { processor: 'boolean', default: !0 }), t('image_advtab', { processor: 'boolean', default: !1 }), t('image_uploadtab', { processor: 'boolean', default: !0 }), t('image_prepend_url', { processor: 'string', default: '' }), t('image_class_list', { processor: 'object[]' }), t('image_description', { processor: 'boolean', default: !0 }), t('image_title', { processor: 'boolean', default: !1 }), t('image_caption', { processor: 'boolean', default: !1 }), t('image_list', { processor: e => { const t = !1 === e || r(e) || ((e, t) => { if (l(e)) { for (let a = 0, i = e.length; a < i; ++a) if (!t(e[a])) return !1 return !0 } return !1 })(e, o) || g(e) return t ? { value: e, valid: t } : { valid: !1, message: 'Must be false, a string, an array or a function.' } }, default: !1 }) })(e), (e => { e.on('PreInit', () => { e.parser.addNodeFilter('figure', Qe(!0)), e.serializer.addNodeFilter('figure', Qe(!1)) }) })(e), (e => { e.ui.registry.addToggleButton('image', { icon: 'image', tooltip: 'Insert/edit image', onAction: qe(e).open, onSetup: t => ( t.setActive(d(he(e))), e.selection.selectorChangedWithUnbind( 'img:not([data-mce-object]):not([data-mce-placeholder]),figure.image', t.setActive ).unbind ) }), e.ui.registry.addMenuItem('image', { icon: 'image', text: 'Image...', onAction: qe(e).open }), e.ui.registry.addContextMenu('image', { update: e => re(e) || ('IMG' === e.nodeName && !H(e)) ? ['image'] : [] }) })(e), (e => { e.addCommand('mceImage', qe(e).open), e.addCommand('mceUpdateImage', (t, a) => { e.undoManager.transact(() => ve(e, a)) }) })(e) }) })()