jodit
Version:
Jodit is an awesome and useful wysiwyg editor with filebrowser
62 lines (61 loc) • 2.29 kB
JavaScript
/*!
* 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 { Dom } from "../../../dom/dom.js";
import { attr, css } from "../../../helpers/utils/index.js";
import { hasSameStyleKeys } from "./has-same-style.js";
import { isSameStyleChild, isSuitElement } from "./is-suit-element.js";
/**
* Unwrap all suit elements inside
* @private
*/
export function unwrapChildren(style, font) {
var _a;
const needUnwrap = [];
const needChangeStyle = [];
let firstElementSuit;
const cssStyle = (_a = style.options.attributes) === null || _a === void 0 ? void 0 : _a.style;
if (font.firstChild) {
const gen = Dom.eachGen(font);
let item = gen.next();
while (!item.done) {
const elm = item.value;
if (isSuitElement(style, elm, true) &&
(!cssStyle || hasSameStyleKeys(elm, cssStyle))) {
if (firstElementSuit === undefined) {
firstElementSuit = true;
}
needUnwrap.push(elm);
}
else if (cssStyle && isSameStyleChild(style, elm)) {
if (firstElementSuit === undefined) {
firstElementSuit = false;
}
needChangeStyle.push(() => {
css(elm, Object.keys(cssStyle).reduce((acc, key) => {
acc[key] = null;
return acc;
}, {}));
if (!attr(elm, 'style')) {
attr(elm, 'style', null);
}
if (!attr(elm, 'style') &&
elm.nodeName.toLowerCase() === style.element) {
needUnwrap.push(elm);
}
});
}
else if (!Dom.isEmptyTextNode(elm)) {
if (firstElementSuit === undefined) {
firstElementSuit = false;
}
}
item = gen.next();
}
}
needChangeStyle.forEach(clb => clb());
needUnwrap.forEach(Dom.unwrap);
return Boolean(firstElementSuit);
}