| | |
| | | </template> |
| | | |
| | | <script lang="ts"> |
| | | import type { RawEditorSettings } from 'tinymce'; |
| | | import type { Editor, RawEditorSettings } from 'tinymce'; |
| | | import tinymce from 'tinymce/tinymce'; |
| | | import 'tinymce/themes/silver'; |
| | | import 'tinymce/icons/default/icons'; |
| | |
| | | ref, |
| | | unref, |
| | | watch, |
| | | onUnmounted, |
| | | onDeactivated, |
| | | onBeforeUnmount, |
| | | } from 'vue'; |
| | | import ImgUpload from './ImgUpload.vue'; |
| | | import { toolbar, plugins } from './tinymce'; |
| | |
| | | components: { ImgUpload }, |
| | | inheritAttrs: false, |
| | | props: tinymceProps, |
| | | emits: ['change', 'update:modelValue'], |
| | | emits: ['change', 'update:modelValue', 'inited', 'init-error'], |
| | | setup(props, { emit, attrs }) { |
| | | const editorRef = ref(); |
| | | const editorRef = ref<Nullable<Editor>>(null); |
| | | const fullscreen = ref(false); |
| | | const tinymceId = ref<string>(buildShortUUID('tiny-vue')); |
| | | const elRef = ref<Nullable<HTMLElement>>(null); |
| | |
| | | content_css: |
| | | publicPath + 'resource/tinymce/skins/ui/' + skinName.value + '/content.min.css', |
| | | ...options, |
| | | setup: (editor) => { |
| | | setup: (editor: Editor) => { |
| | | editorRef.value = editor; |
| | | editor.on('init', (e) => initSetup(e)); |
| | | }, |
| | |
| | | ); |
| | | |
| | | onMountedOrActivated(() => { |
| | | if (initOptions.value.inline) { |
| | | tinymceId.value = unref(initOptions).selector!; |
| | | } else { |
| | | if (!initOptions.value.inline) { |
| | | tinymceId.value = buildShortUUID('tiny-vue'); |
| | | } |
| | | nextTick(() => { |
| | |
| | | }); |
| | | }); |
| | | |
| | | onUnmounted(() => { |
| | | onBeforeUnmount(() => { |
| | | destory(); |
| | | }); |
| | | |
| | |
| | | |
| | | function destory() { |
| | | if (tinymce !== null) { |
| | | tinymce?.remove?.(tinymceId.value as string); |
| | | tinymce?.remove?.(unref(initOptions).selector!); |
| | | } |
| | | } |
| | | |
| | |
| | | if (el) { |
| | | el.style.visibility = ''; |
| | | } |
| | | tinymce.init(unref(initOptions)); |
| | | tinymce |
| | | .init(unref(initOptions)) |
| | | .then((editor) => { |
| | | emit('inited', editor); |
| | | }) |
| | | .catch((err) => { |
| | | emit('init-error', err); |
| | | }); |
| | | } |
| | | |
| | | function initSetup(e) { |