UNPKG

jodit

Version:

Jodit is an awesome and useful wysiwyg editor with filebrowser

69 lines (68 loc) 2.69 kB
/*! * Jodit Editor (https://xdsoft.net/jodit/) * Released under MIT see LICENSE.txt in the project root for license information. * Copyright (c) 2013-2025 Valeriy Chupurnov. All rights reserved. https://xdsoft.net */ import * as consts from "../../core/constants.js"; import { pluginSystem } from "../../core/global.js"; import { $$, attr, dataBind } from "../../core/helpers/utils/index.js"; import "./config.js"; /** * Process `video` and `audio` */ export function media(editor) { const keyFake = 'jodit_fake_wrapper'; const { mediaFakeTag, mediaBlocks, mediaInFakeBlock } = editor.options; const wrap = (element) => { if (element.parentNode && attr(element.parentNode, 'data-jodit_iframe_wrapper')) { element = element.parentNode; } else { const wrapper = editor.createInside.element(mediaFakeTag, { 'data-jodit-temp': 1, contenteditable: false, draggable: true, [`data-${keyFake}`]: 1 }); attr(wrapper, 'style', attr(element, 'style')); wrapper.style.display = element.style.display === 'inline-block' ? 'inline-block' : 'block'; wrapper.style.width = element.offsetWidth + 'px'; wrapper.style.height = element.offsetHeight + 'px'; if (element.parentNode) { element.parentNode.insertBefore(wrapper, element); } wrapper.appendChild(element); element = wrapper; } editor.e .off(element, 'mousedown.select touchstart.select') .on(element, 'mousedown.select touchstart.select', () => { editor.s.setCursorAfter(element); }); }; if (mediaInFakeBlock) { editor.e .on('afterGetValueFromEditor', (data) => { const rxp = new RegExp(`<${mediaFakeTag}[^>]+data-${keyFake}[^>]+>([^]+?)</${mediaFakeTag}>`, 'ig'); if (rxp.test(data.value)) { data.value = data.value.replace(rxp, '$1'); } }) .on('change afterInit afterSetMode changePlace', editor.async.debounce(() => { if (!editor.isDestructed && editor.getMode() !== consts.MODE_SOURCE) { $$(mediaBlocks.join(','), editor.editor).forEach((elm) => { if (!dataBind(elm, keyFake)) { dataBind(elm, keyFake, true); wrap(elm); } }); } }, editor.defaultTimeout)); } } pluginSystem.add('media', media);