UNPKG

tav-ui

Version:
359 lines (356 loc) 9.06 kB
import { ref, computed } from 'vue'; import sanitizeHtml from 'sanitize-html'; function useEditorPlugin(options) { const { mergedProps, handleApi, apiResult } = options; const advlistPlugin = { setup: () => import('tinymce/plugins/advlist'), name: "advlist", options: {} }; const anchorPlugin = { setup: () => import('tinymce/plugins/anchor'), name: "anchor", options: {} }; const autolinkPlugin = { setup: () => import('tinymce/plugins/autolink'), name: "autolink", options: { default_link_target: "_blank" } }; const autoresizePlugin = { setup: () => import('tinymce/plugins/autoresize'), name: "autoresize", options: {} }; const autosavePlugin = { setup: () => import('tinymce/plugins/autosave'), name: "autosave", options: {} }; const charmapPlugin = { setup: () => import('tinymce/plugins/charmap'), name: "charmap", options: {} }; const codePlugin = { setup: () => import('tinymce/plugins/code'), name: "code", options: {} }; const codesamplePlugin = { setup: () => import('tinymce/plugins/codesample'), name: "codesample", options: {} }; const directionalityPlugin = { setup: () => import('tinymce/plugins/directionality'), name: "directionality", options: {} }; const emoticonsPlugin = { setup: () => { import('tinymce/plugins/emoticons'); import('tinymce/plugins/emoticons/js/emojis'); }, name: "emoticons", options: {} }; const fullpagePlugin = { setup: () => import('tinymce/plugins/fullpage'), name: "fullpage", options: {} }; const fullscreenPlugin = { setup: () => import('tinymce/plugins/fullscreen'), name: "fullscreen", options: {} }; const helpPlugin = { setup: () => import('tinymce/plugins/help'), name: "help", options: { help_tabs: [ "shortcuts" ] } }; const hrPlugin = { setup: () => import('tinymce/plugins/hr'), name: "hr", options: {} }; const imagePlugin = { setup: () => import('tinymce/plugins/image'), name: "image", options: { images_reuse_filename: true, images_upload_handler: (...args) => editorPluginImageUploadHandler(mergedProps, handleApi, apiResult, args[0], args[1], args[2]) } }; const imagetoolsPlugin = { setup: () => import('tinymce/plugins/imagetools'), name: "imagetools", options: {} }; const importcssPlugin = { setup: () => import('tinymce/plugins/importcss'), name: "importcss", options: {} }; const insertdatetimePlugin = { setup: () => import('tinymce/plugins/insertdatetime'), name: "insertdatetime", options: {} }; const legacyoutputPlugin = { setup: () => import('tinymce/plugins/legacyoutput'), name: "legacyoutput", options: {} }; const linkPlugin = { setup: () => import('tinymce/plugins/link'), name: "link", options: { default_link_target: "_blank" } }; const listsPlugin = { setup: () => import('tinymce/plugins/lists'), name: "lists", options: {} }; const mediaPlugin = { setup: () => import('tinymce/plugins/media'), name: "media", options: {} }; const nonbreakingPlugin = { setup: () => import('tinymce/plugins/nonbreaking'), name: "nonbreaking", options: {} }; const noneditablePlugin = { setup: () => import('tinymce/plugins/noneditable'), name: "noneditable", options: {} }; const pagebreakPlugin = { setup: () => import('tinymce/plugins/pagebreak'), name: "pagebreak", options: {} }; const pastePlugin = { setup: () => import('tinymce/plugins/paste'), name: "paste", options: { paste_block_drop: false, paste_filter_drop: false, paste_merge_formats: false, paste_preprocess: editorPluginPastePreprocessHandler } }; const previewPlugin = { setup: () => import('tinymce/plugins/preview'), name: "preview", options: {} }; const printPlugin = { setup: () => import('tinymce/plugins/print'), name: "print", options: {} }; const quickbarsPlugin = { setup: () => import('tinymce/plugins/quickbars'), name: "quickbars", options: { quickbars_insert_toolbar: "", quickbars_selection_toolbar: "formatselect bold italic | aligns blockquote", quickbars_image_toolbar: "" } }; const savePlugin = { setup: () => import('tinymce/plugins/save'), name: "save", options: {} }; const searchreplacePlugin = { setup: () => import('tinymce/plugins/searchreplace'), name: "searchreplace", options: {} }; const spellcheckerPlugin = { setup: () => import('tinymce/plugins/spellchecker'), name: "spellchecker", options: {} }; const tabfocusPlugin = { setup: () => import('tinymce/plugins/tabfocus'), name: "tabfocus", options: {} }; const tablePlugin = { setup: () => import('tinymce/plugins/table'), name: "table", options: {} }; const templatePlugin = { setup: () => import('tinymce/plugins/template'), name: "template", options: {} }; const textpatternPlugin = { setup: () => import('tinymce/plugins/textpattern'), name: "textpattern", options: {} }; const tocPlugin = { setup: () => import('tinymce/plugins/toc'), name: "toc", options: {} }; const visualblocksPlugin = { setup: () => import('tinymce/plugins/visualblocks'), name: "visualblocks", options: {} }; const visualcharsPlugin = { setup: () => import('tinymce/plugins/visualchars'), name: "visualchars", options: {} }; const wordcountPlugin = { setup: () => import('tinymce/plugins/wordcount'), name: "wordcount", options: {} }; const plugins = [ advlistPlugin, anchorPlugin, autolinkPlugin, autoresizePlugin, autosavePlugin, charmapPlugin, codePlugin, codesamplePlugin, directionalityPlugin, emoticonsPlugin, fullpagePlugin, fullscreenPlugin, helpPlugin, hrPlugin, imagePlugin, imagetoolsPlugin, importcssPlugin, insertdatetimePlugin, legacyoutputPlugin, linkPlugin, listsPlugin, mediaPlugin, nonbreakingPlugin, noneditablePlugin, pagebreakPlugin, pastePlugin, previewPlugin, printPlugin, quickbarsPlugin, savePlugin, searchreplacePlugin, spellcheckerPlugin, tabfocusPlugin, tablePlugin, templatePlugin, textpatternPlugin, tocPlugin, visualblocksPlugin, visualcharsPlugin, wordcountPlugin ]; const filterPluginNames = [ "autoresize", "autosave", "charmap", "codesample", "emoticons", "fullpage", "help", "image", "imagetools", "importcss", "insertdatetime", "legacyoutput", "media", "print", "spellchecker", "tabfocus", "template", "toc", "wordcount" ]; const usePlugins = plugins.filter((plugin) => !filterPluginNames.includes(plugin.name)); const isLoaded = ref(false); function setupPlugins() { for (let i = 0; i < usePlugins.length; i++) { usePlugins[i].setup(); } isLoaded.value = true; } const pluginConfig = computed(() => { const imagePlugin2 = usePlugins.find((usePlugin) => usePlugin.name === "image"); if (imagePlugin2) { imagePlugin2.options = { ...imagePlugin2.options, images_file_types: mergedProps.value.imageAccept }; } const imagetoolsPlugin2 = usePlugins.find((usePlugin) => usePlugin.name === "imagetools"); if (imagetoolsPlugin2) { imagetoolsPlugin2.options = {}; } const usePluginNames = usePlugins.map((usePlugin) => usePlugin.name).join(" "); const usePluginOptions = usePlugins.reduce((result, cur) => { if (cur.options && Object.keys(cur.options).length > 0) { result = { ...result, ...cur.options }; } return result; }, {}); return { plugins: usePluginNames, pluginOptions: usePluginOptions }; }); return { setupPlugins, pluginConfig }; } function editorPluginImageUploadHandler(mergedProps, handleApi, apiResult, blobInfo, success, failure) { const file = blobInfo.blob(); const imageOptions = null; if (!imageOptions) return; } function editorPluginPastePreprocessHandler(...args) { const [_, pasteContentinfo] = args; const result = sanitizeHtml(pasteContentinfo.content, { allowedTags: sanitizeHtml.defaults.allowedTags.filter((at) => !["code", "samp", "ruby"].includes(at)), allowedAttributes: { ...sanitizeHtml.defaults.allowedTags.reduce((result2, cur) => { if (cur === "a") { result2[cur] = ["href", "name", "target"]; } else { result2[cur] = []; } return result2; }, {}) }, disallowedTagsMode: "discard" }); pasteContentinfo.content = result; } export { useEditorPlugin }; //# sourceMappingURL=use-editor-plugin2.mjs.map