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;
}