export function getInlineElementBeforeAfter()

in packages/roosterjs-editor-dom/lib/inlineElements/getInlineElementBeforeAfter.ts [38:69]


export function getInlineElementBeforeAfter(root: Node, position: NodePosition, isAfter: boolean) {
    if (!root || !position || !position.node) {
        return null;
    }

    position = position.normalize();
    let { node, offset, isAtEnd } = position;
    let isPartial = false;

    if ((!isAfter && offset == 0 && !isAtEnd) || (isAfter && isAtEnd)) {
        node = getLeafSibling(root, node, isAfter);
    } else if (
        node.nodeType == NodeType.Text &&
        ((!isAfter && !isAtEnd) || (isAfter && offset > 0))
    ) {
        isPartial = true;
    }

    if (node && shouldSkipNode(node)) {
        node = getLeafSibling(root, node, isAfter);
    }

    let inlineElement = getInlineElementAtNode(root, node);

    if (inlineElement && (isPartial || inlineElement.contains(position))) {
        inlineElement = isAfter
            ? new PartialInlineElement(inlineElement, position, null)
            : new PartialInlineElement(inlineElement, null, position);
    }

    return inlineElement;
}