/** * attachment (Enhancement 1.6v) 2021-07-18 * * * https://github.com/Five-great/tinymce-plugins * * Copyright 2021, Five(Li Hailong) The Chengdu, China https://www.fivecc.cn/ * * Licensed under MIT */ !function() { "use strict"; var Qeider = null; function d(e, t) { if (void 0 === t && (t = 2), 0 === e) return "0 B"; var n = t < 0 ? 0 : t, i = Math.floor(Math.log(e) / Math.log(1024)); return parseFloat((e / Math.pow(1024, i)).toFixed(n)) + " " + ["B", "K", "M", "G", "T", "P", "E", "Z", "Y"][i] } function i(o) { o.focus(),pickFile(Qeider).then(function (e){ for (var t = 0, n = e; t < n.length; t++) { var i = n[t]; r(o, i, function(e, t) { console.log(t) var n = "span#" + e; 0 < o.dom.select(n).length ? o.dom.replace(t, e) : o.selection.setContent(t.outerHTML) }) } }) } function n(e) { var t = document.createElement("a"); t.target = "_blank", t.href = e, t.rel = "noreferrer noopener"; var n, i, o = document.createEvent("MouseEvents"); o.initMouseEvent("click", !0, !0, window, 0, 0, 0, 0, 0, !1, !1, !1, !1, 0, null), n = t, i = o, document.body.appendChild(n), n.dispatchEvent(i), document.body.removeChild(n) } function o(t) { Qeider = t; t.ui.registry.getAll().icons.attachment || t.ui.registry.addIcon("attachment", ''), t.ui.registry.addButton("attachment", { icon: "attachment", tooltip: "插入附件", onAction: function() { return i(t) } }), t.ui.registry.addMenuItem("attachment", { icon: "attachment", text: "插入附件", onAction: function() { return i(t) } }), t.ui.registry.addButton("attachment-download", { text: "下载", onAction: function() { return e = function(e) { for (var t = 0, n = e.selection.getNode().children; t < n.length; t++) { var i = n[t]; if (i.hasAttribute("href")) return i.getAttribute("href") } return "#" }(t), void n(e); var e } }), t.ui.registry.addContextToolbar("attachment", { predicate: function(e) { return !!a(t, e) }, items: "attachment-download", position: "node", scope: "node" }) } var global$1 = tinymce.util.Tools.resolve('tinymce.util.Promise'); var global$2 = tinymce.util.Tools.resolve('tinymce.Env'); var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay'); var pickFile = function(a) { return new global$1(function(e) { var c = document.createElement("input"); c.type = "file"; c.setAttribute("multiple", "multiple") c.style.position = "fixed"; c.style.left = "0"; c.style.top = "0"; c.style.opacity = "0.001"; document.body.appendChild(c); var b = function(f) { e(Array.prototype.slice.call(f.target.files)) }; c.addEventListener("change", b); var d = function(g) { var f = function() { e([]); c.parentNode.removeChild(c) }; if (global$2.os.isAndroid() && g.type !== "remove") { global$3.setEditorTimeout(a, f, 0) } else { f() } a.off("focusin remove", d) }; a.on("focusin remove", d); c.click() }) }; var e = function(n) { var e = document.createElement("input"); e.setAttribute("type", "file"), e.setAttribute("accept", "*/*"), e.setAttribute("multiple", "multiple"), e.onchange = function(e) { var t = e.target.files; null != n && n(t) }, e.click() }, r = function(a, t, n) { var e, i, o, c, r, l, p, _, f, s = a.getParam("attachment_max_size") || 209715200; t.size > s ? (e = d(s), a.notificationManager.open({ text: "附件最大支持 " + e + ",超过 " + e + " 的附件将不会被上传。", type: "warning", timeout: 5e3 })) : (i = a.getParam("attachment_upload_handler"), o = a.getParam('attachment_icons_url', 'https://unpkg.com/@npkg/tinymce-plugins/plugins/attachment/icons'), c = a.dom.uniqueId(), r = "attachment_" + c, l = d(t.size), p = o + "/" + function(e) { if (e) { var t = e.lastIndexOf("."); if (-1 === t) return "default_file.svg"; for (var n = e.substr(t + 1).toLowerCase(), i = 0, o = [{ ext: "txt", icon: "file_type_text" }, { ext: "doc", icon: "file_type_word2" }, { ext: "docx", icon: "file_type_word2" }, { ext: "pdf", icon: "file_type_pdf2" }, { ext: "xls", icon: "file_type_excel2" }, { ext: "xlsx", icon: "file_type_excel2" }, { ext: "ppt", icon: "file_type_powerpoint2" }, { ext: "pptx", icon: "file_type_powerpoint2" }, { ext: "ai", icon: "file_type_ai2" }, { ext: "psd", icon: "file_type_photoshop2" }, { ext: "zip", icon: "file_type_zip" }, { ext: "rar", icon: "file_type_zip" }, { ext: "jpg", icon: "file_type_image" }, { ext: "jpeg", icon: "file_type_image" }, { ext: "png", icon: "file_type_image" }, { ext: "gif", icon: "file_type_image" }, { ext: "js", icon: "file_type_js" }, { ext: "xml", icon: "file_type_xml" }, { ext: "htm", icon: "file_type_html" }, { ext: "html", icon: "file_type_html" }, { ext: "json", icon: "file_type_light_json" }, { ext: "fon", icon: "file_type_light_font" }, { ext: "font", icon: "file_type_light_font" }, { ext: "svg", icon: "file_type_image" }, { ext: "exe", icon: "file_type_binary" }, { ext: "bin", icon: "file_type_binary" }, { ext: "dll", icon: "file_type_binary" }, { ext: "pkg", icon: "file_type_package" }, { ext: "wav", icon: "file_type_audio" }, { ext: "mp3", icon: "file_type_audio" }, { ext: "mp4", icon: "file_type_video" }, { ext: "mov", icon: "file_type_video" }, { ext: "avi", icon: "file_type_video" }, { ext: "java", icon: "file_type_java" }, { ext: "cs", icon: "file_type_csharp" }, { ext: "css", icon: "file_type_css" }, { ext: "py", icon: "file_type_python" }, { ext: "sln", icon: "file_type_vscode3" }, { ext: "go", icon: "file_type_go" }, { ext: "7z", icon: "file_type_zip" }, { ext: "sketch", icon: "file_type_sketch" }, { ext: "patch", icon: "file_type_patch" }, { ext: "org", icon: "file_type_org" }, { ext: "md", icon: "file_type_markdown" }, { ext: "jar", icon: "file_type_jar" }, { ext: "dmg", icon: "file_type_dmg" }, { ext: "accdb", icon: "file_type_access" }, { ext: "apk", icon: "file_type_apk" }, { ext: "eps", icon: "file_type_eps" }, { ext: "ico", icon: "file_type_ico" }, { ext: "iso", icon: "file_type_iso" }, { ext: "key", icon: "file_type_keynote" }, { ext: "numbers", icon: "file_type_number" }, { ext: "reg", icon: "file_type_reg" }, { ext: "rp", icon: "file_type_rp" }, { ext: "rtf", icon: "file_type_rtf" }, { ext: "sketch", icon: "file_type_sketch" }, { ext: "swf", icon: "file_type_swf" }, { ext: "url", icon: "file_type_url" }, { ext: "wma", icon: "file_type_wma" }, { ext: "xmind", icon: "file_type_xmind" }, { ext: "cat", icon: "file_type_cat" }]; i < o.length; i++) { var a = o[i]; if (a.ext === n) return a.icon + ".svg" } } return "default_file.svg" }(t.name), _ = o + "/error.png", f = function(e, t) { var n = document.createElement("img"); n.setAttribute("src", t.icon); n.setAttribute("width", '30px'); var i = document.createElement("span"); i.setAttribute("id", "progress_" + t.id), i.innerText = "0%"; var o = document.createElement("span"); o.innerText = t.title + " (" + t.size + ")"; var a = e.dom.create("span", { id: "attachment_" + t.id, class: "attachment upload_progress" }); return a.appendChild(n), a.appendChild(i), a.appendChild(o), a.contentEditable = "false", a }(a, { id: c, icon: o + "/loading.gif", title: t.name, size: l }), n(r, f), i(t, function(e) { f = function(e, t) { var n = document.createElement("img"); n.setAttribute("src", t.icon); n.setAttribute("width", '30px'); var i = document.createElement("a"); i.innerText = t.title + " (" + t.size + ")", i.setAttribute("href", t.src); var o = e.dom.create("span", { id: "attachment_" + t.id, class: "attachment" }); return o.appendChild(n), o.appendChild(i), o.contentEditable = "false", o }(a, { id: c, icon: p, title: t.name, size: l, src: e }), n(r, f) }, function(e) { f = function(e, t) { var n = document.createElement("img"); n.setAttribute("src", t.icon); n.setAttribute("width", "30px"); var i = document.createElement("span"); i.innerText = t.message + " - " + t.title + " (" + t.size + ")"; var o = e.dom.create("span", { class: "attachment upload_error" }); return o.appendChild(n), o.appendChild(i), o.contentEditable = "false", o }(a, { icon: _, title: t.name, size: l, message: e }), n(r, f) }, function(e) { var t, n, i, o; n = c, i = e, o = (t = a).dom.select("span#progress_" + n), t.dom.setHTML(o, i) })) }, a = function(e, t) { return t = t || e.selection.getNode(), e.dom.getParent(t, 'span[class="attachment"]') }; tinymce.PluginManager.add("attachment", function(e, t) { var n, c; o(e), (n = e).addCommand("mceAttachment", function() { i(n) }), (c = e).on("drop", function(e) { var t = e.dataTransfer; if (null != t) { var n = t.files; if (null != n) for (var i = 0, o = n; i < o.length; i++) { var a = o[i]; (function(e) { var t = e.lastIndexOf("."); if (-1 === t) return !1; var n = e.substr(t); return /.(gif|jpe?g|png)$/i.test(n) })(a.name) || r(c, a, function(e, t) { var n = "span#" + e; 0 < c.dom.select(n).length ? c.dom.replace(t, e) : c.selection.setContent(t.outerHTML) }) } } }) }) return { getMetadata: function() { return { name: pluginName, url: "https://github.com/Five-great/tinymce-plugins", }; } }; }();