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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | 1x 1x | import { createRange, safeInstanceOf } from 'roosterjs-editor-dom'; import { SelectionRangeTypes } from 'roosterjs-editor-types'; import type { NodePosition, PositionType, SelectionPath, SelectionRangeEx, TableSelection, } from 'roosterjs-editor-types'; /** * @internal */ export function buildRangeEx( root: HTMLElement, arg1: Range | SelectionRangeEx | NodePosition | Node | SelectionPath | null, arg2?: NodePosition | number | PositionType | TableSelection | null, arg3?: Node, arg4?: number | PositionType ): SelectionRangeEx { let rangeEx: SelectionRangeEx | null = null; if (isSelectionRangeEx(arg1)) { rangeEx = arg1; } else if (safeInstanceOf(arg1, 'HTMLTableElement') && isTableSelectionOrNull(arg2)) { rangeEx = { type: SelectionRangeTypes.TableSelection, ranges: [], areAllCollapsed: false, table: arg1, coordinates: arg2 ?? undefined, }; } else if (safeInstanceOf(arg1, 'HTMLImageElement') && typeof arg2 == 'undefined') { rangeEx = { type: SelectionRangeTypes.ImageSelection, ranges: [], areAllCollapsed: false, image: arg1, }; } else { const range = !arg1 ? null : safeInstanceOf(arg1, 'Range') ? arg1 : isSelectionPath(arg1) ? createRange(root, arg1.start, arg1.end) : isNodePosition(arg1) || safeInstanceOf(arg1, 'Node') ? createRange( <Node>arg1, <number | PositionType>arg2, <Node>arg3, <number | PositionType>arg4 ) : null; rangeEx = range ? { type: SelectionRangeTypes.Normal, ranges: [range], areAllCollapsed: range.collapsed, } : { type: SelectionRangeTypes.Normal, ranges: [], areAllCollapsed: true, }; } return rangeEx; } function isSelectionRangeEx(obj: any): obj is SelectionRangeEx { const rangeEx = obj as SelectionRangeEx; return ( rangeEx && typeof rangeEx == 'object' && typeof rangeEx.type == 'number' && Array.isArray(rangeEx.ranges) ); } function isTableSelectionOrNull(obj: any): obj is TableSelection | null { const selection = obj as TableSelection | null; return ( selection === null || (selection && typeof selection == 'object' && typeof selection.firstCell == 'object' && typeof selection.lastCell == 'object') ); } function isSelectionPath(obj: any): obj is SelectionPath { const path = obj as SelectionPath; return path && typeof path == 'object' && Array.isArray(path.start) && Array.isArray(path.end); } function isNodePosition(obj: any): obj is NodePosition { const pos = obj as NodePosition; return ( pos && typeof pos == 'object' && typeof pos.node == 'object' && typeof pos.offset == 'number' ); } |