UNPKG

jodit

Version:

Jodit is an awesome and useful wysiwyg editor with filebrowser

63 lines (62 loc) 2.58 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 { LIST_TAGS } from "../../../core/constants.js"; import { Dom } from "../../../core/dom/dom.js"; import { getMoveFilter } from "../helpers.js"; /** * Check if two separate elements can be connected * @private */ export function checkJoinNeighbors(jodit, fakeNode, backspace) { let nextBox = fakeNode, mainClosestBox = nextBox; // Find the main big closest element while (nextBox && !Dom.findNotEmptySibling(nextBox, backspace) && nextBox.parentElement !== jodit.editor) { nextBox = nextBox.parentElement; mainClosestBox = nextBox; } if (Dom.isElement(mainClosestBox) && Dom.isContentEditable(mainClosestBox, jodit.editor)) { const sibling = Dom.findNotEmptySibling(mainClosestBox, backspace); if (sibling && (checkMoveListContent(jodit, mainClosestBox, sibling, backspace) || moveContentAndRemoveEmpty(jodit, mainClosestBox, sibling, backspace))) { jodit.s.setCursorBefore(fakeNode); return true; } } return false; } function checkMoveListContent(jodit, mainClosestBox, sibling, backspace) { // Process UL/LI/OL cases const siblingIsList = Dom.isTag(sibling, LIST_TAGS); const boxIsList = Dom.isTag(mainClosestBox, LIST_TAGS); const elementChild = (elm, side) => side ? elm.firstElementChild : elm.lastElementChild; if (boxIsList) { sibling = jodit.createInside.element(jodit.o.enterBlock); Dom.before(mainClosestBox, sibling); return moveContentAndRemoveEmpty(jodit, elementChild(mainClosestBox, backspace), sibling, backspace); } if (sibling && siblingIsList && !boxIsList) { return moveContentAndRemoveEmpty(jodit, mainClosestBox, elementChild(sibling, !backspace), backspace); } return false; } function moveContentAndRemoveEmpty(jodit, mainClosestBox, sibling, backspace) { // Move content and remove empty nodes if (mainClosestBox && Dom.isElement(sibling)) { Dom.moveContent(mainClosestBox, sibling, !backspace, getMoveFilter(jodit)); let remove = mainClosestBox; while (remove && remove !== jodit.editor && Dom.isEmpty(remove)) { const parent = remove.parentElement; Dom.safeRemove(remove); remove = parent; } return true; } return false; }