Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/ui/text-editor/src/helpers/ |
Upload File : |
import type { LexicalNode } from 'ui.lexical.core'; import { $isRootOrShadowRoot, type BaseSelection, type ElementNode } from 'ui.lexical.core'; import { $getAncestor } from './get-ancestor'; import { $isBlockNode } from './is-block-node'; export function $wrapNodes(selection: BaseSelection | null, createElement: () => ElementNode): ElementNode | null { if (selection === null) { return null; } const anchor = selection.anchor; const anchorNode: ElementNode = anchor.getNode(); const element: ElementNode = createElement(); if ($isRootOrShadowRoot(anchorNode)) { const firstChild = anchorNode.getFirstChild(); if (firstChild) { firstChild.replace(element, true); } else { anchorNode.append(element); } return element; } const handled = new Set(); const nodes: LexicalNode[] = selection.getNodes(); const firstSelectedBlock = $getAncestor(selection.anchor.getNode(), $isBlockNode); if (firstSelectedBlock && !nodes.includes(firstSelectedBlock)) { nodes.unshift(firstSelectedBlock); } handled.add(element.getKey()); let firstNode = true; for (const node of nodes) { if (!$isBlockNode(node) || handled.has(node.getKey())) { continue; } const isParentHandled = $getAncestor( node.getParent(), (parentNode: LexicalNode): boolean => handled.has(parentNode.getKey()), ); if (isParentHandled) { continue; } if (firstNode) { firstNode = false; node.replace(element); element.append(node); } else { element.append(node); } handled.add(node.getKey()); } return element; }