UNPKG

jodit

Version:

Jodit is an awesome and useful wysiwyg editor with filebrowser

105 lines (104 loc) 3.05 kB
/*! * Jodit Editor (https://xdsoft.net/jodit/) * Released under MIT see LICENSE.txt in the project root for license information. * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net */ import { TEXT_PLAIN } from "../../core/constants.js"; import { Dom } from "../../core/dom/dom.js"; import { isArray, isNumber, isString, isVoid } from "../../core/helpers/checker/index.js"; import { Button } from "../../core/ui/button/button/button.js"; /** * Remove special HTML comments * @private */ function removeExtraFragments(html) { html = html.replace(/<meta[^>]+?>/g, ''); const start = html.search(/<!--StartFragment-->/i); if (start !== -1) { html = html.substring(start + 20); } const end = html.search(/<!--EndFragment-->/i); if (end !== -1) { html = html.substring(0, end); } return html; } /** * @private */ function isDragEvent(e) { return Boolean(e && e.type === 'drop'); } /** * One insert point for clipboard plugins * @private */ export function pasteInsertHtml(e, editor, html) { if (editor.isInDestruct) { return; } if (isDragEvent(e)) { editor.s.insertCursorAtPoint(e.clientX, e.clientY); } const result = editor.e.fire('beforePasteInsert', html); if (!isVoid(result) && (isString(result) || isNumber(result) || Dom.isNode(result))) { html = result; } if (isString(html)) { html = removeExtraFragments(html); } editor.s.insertHTML(html); } /** * Return all available data types in event * @private */ export function getAllTypes(dt) { const types = dt.types; let types_str = ''; if (isArray(types) || {}.toString.call(types) === '[object DOMStringList]') { for (let i = 0; i < types.length; i += 1) { types_str += types[i] + ';'; } } else { types_str = (types || TEXT_PLAIN).toString() + ';'; } return types_str; } /** * Make command dialog * @private */ export function askInsertTypeDialog(jodit, msg, title, callback, buttonList) { if (jodit.e.fire('beforeOpenPasteDialog', msg, title, callback, buttonList) === false) { return; } const dialog = jodit.confirm(`<div style="word-break: normal; white-space: normal">${jodit.i18n(msg)}</div>`, jodit.i18n(title)); const buttons = buttonList.map(({ text, value }) => Button(jodit, { text, name: text.toLowerCase(), tabIndex: 0 }).onAction(() => { dialog.close(); callback(value); })); dialog.e.one(dialog, 'afterClose', () => { if (!jodit.s.isFocused()) { jodit.s.focus(); } }); const cancel = Button(jodit, { text: 'Cancel', tabIndex: 0 }).onAction(() => { dialog.close(); }); dialog.setFooter([...buttons, cancel]); buttons[0].focus(); buttons[0].state.variant = 'primary'; jodit.e.fire('afterOpenPasteDialog', dialog, msg, title, callback, buttonList); return dialog; }