UNPKG

@tinymce/tinymce-vue

Version:

Official TinyMCE Vue 3 Component

148 lines (147 loc) 4.39 kB
"use strict"; /** * Copyright (c) 2018-present, Ephox, Inc. * * This source code is licensed under the Apache 2 license found in the * LICENSE file in the root directory of this source tree. * */ Object.defineProperty(exports, "__esModule", { value: true }); exports.isNullOrUndefined = exports.mergePlugins = exports.isTextarea = exports.uuid = exports.isValidKey = exports.initEditor = exports.bindModelHandlers = exports.bindHandlers = void 0; var vue_1 = require("vue"); var validEvents = [ 'onActivate', 'onAddUndo', 'onBeforeAddUndo', 'onBeforeExecCommand', 'onBeforeGetContent', 'onBeforeRenderUI', 'onBeforeSetContent', 'onBeforePaste', 'onBlur', 'onChange', 'onClearUndos', 'onClick', 'onContextMenu', 'onCommentChange', 'onCompositionEnd', 'onCompositionStart', 'onCompositionUpdate', 'onCopy', 'onCut', 'onDblclick', 'onDeactivate', 'onDirty', 'onDrag', 'onDragDrop', 'onDragEnd', 'onDragGesture', 'onDragOver', 'onDrop', 'onExecCommand', 'onFocus', 'onFocusIn', 'onFocusOut', 'onGetContent', 'onHide', 'onInit', 'onInput', 'onKeyDown', 'onKeyPress', 'onKeyUp', 'onLoadContent', 'onMouseDown', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp', 'onNodeChange', 'onObjectResizeStart', 'onObjectResized', 'onObjectSelected', 'onPaste', 'onPostProcess', 'onPostRender', 'onPreProcess', 'onProgressState', 'onRedo', 'onRemove', 'onReset', 'onSaveContent', 'onSelectionChange', 'onSetAttrib', 'onSetContent', 'onShow', 'onSubmit', 'onUndo', 'onVisualAid' ]; var isValidKey = function (key) { return validEvents.map(function (event) { return event.toLowerCase(); }).indexOf(key.toLowerCase()) !== -1; }; exports.isValidKey = isValidKey; var bindHandlers = function (initEvent, listeners, editor) { Object.keys(listeners) .filter(isValidKey) .forEach(function (key) { var handler = listeners[key]; if (typeof handler === 'function') { if (key === 'onInit') { handler(initEvent, editor); } else { editor.on(key.substring(2), function (e) { return handler(e, editor); }); } } }); }; exports.bindHandlers = bindHandlers; var bindModelHandlers = function (props, ctx, editor, modelValue) { var modelEvents = props.modelEvents ? props.modelEvents : null; var normalizedEvents = Array.isArray(modelEvents) ? modelEvents.join(' ') : modelEvents; (0, vue_1.watch)(modelValue, function (val, prevVal) { if (editor && typeof val === 'string' && val !== prevVal && val !== editor.getContent({ format: props.outputFormat })) { editor.setContent(val); } }); editor.on(normalizedEvents ? normalizedEvents : 'change input undo redo', function () { ctx.emit('update:modelValue', editor.getContent({ format: props.outputFormat })); }); }; exports.bindModelHandlers = bindModelHandlers; var initEditor = function (initEvent, props, ctx, editor, modelValue, content) { editor.setContent(content()); if (ctx.attrs['onUpdate:modelValue']) { bindModelHandlers(props, ctx, editor, modelValue); } bindHandlers(initEvent, ctx.attrs, editor); }; exports.initEditor = initEditor; var unique = 0; var uuid = function (prefix) { var time = Date.now(); var random = Math.floor(Math.random() * 1000000000); unique++; return prefix + '_' + random + unique + String(time); }; exports.uuid = uuid; var isTextarea = function (element) { return element !== null && element.tagName.toLowerCase() === 'textarea'; }; exports.isTextarea = isTextarea; var normalizePluginArray = function (plugins) { if (typeof plugins === 'undefined' || plugins === '') { return []; } return Array.isArray(plugins) ? plugins : plugins.split(' '); }; var mergePlugins = function (initPlugins, inputPlugins) { return normalizePluginArray(initPlugins).concat(normalizePluginArray(inputPlugins)); }; exports.mergePlugins = mergePlugins; var isNullOrUndefined = function (value) { return value === null || value === undefined; }; exports.isNullOrUndefined = isNullOrUndefined;