Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 1x 1x 8x 8x 8x 8x 4x 4x 2x 6x 8x 4x 4x 8x | import { isElementOfType, isNodeOfType } from 'roosterjs-content-model-dom';
/**
* @internal
*/
export function isSingleImageInSelection(selection: Selection | Range): HTMLImageElement | null {
const { startNode, endNode, startOffset, endOffset } = getProps(selection);
const max = Math.max(startOffset, endOffset);
const min = Math.min(startOffset, endOffset);
if (startNode && endNode && startNode == endNode && max - min == 1) {
const node = startNode?.childNodes.item(min);
if (isNodeOfType(node, 'ELEMENT_NODE') && isElementOfType(node, 'img')) {
return node;
}
}
return null;
}
function getProps(
selection: Selection | Range
): { startNode: Node | null; endNode: Node | null; startOffset: number; endOffset: number } {
if (isSelection(selection)) {
return {
startNode: selection.anchorNode,
endNode: selection.focusNode,
startOffset: selection.anchorOffset,
endOffset: selection.focusOffset,
};
} else {
return {
startNode: selection.startContainer,
endNode: selection.endContainer,
startOffset: selection.startOffset,
endOffset: selection.endOffset,
};
}
}
function isSelection(selection: Selection | Range): selection is Selection {
return !!(selection as Selection).getRangeAt;
}
|