MCPcopy Create free account
hub / github.com/adobe/react-spectrum / createDOMRange

Function createDOMRange

packages/react-aria/src/tokenfield/useTokenField.ts:691–720  ·  view source on GitHub ↗
(root: Element, start: Position, end: Position)

Source from the content-addressed store, hash-verified

689}
690
691function createDOMRange(root: Element, start: Position, end: Position): Range {
692 let range = document.createRange();
693 let startChild = root.childNodes[start.index];
694 if (!startChild) {
695 range.setStart(root, Math.min(root.childNodes.length, start.index));
696 } else if (startChild.nodeType === Node.ELEMENT_NODE) {
697 // Place the cursor outside the token wrapper element.
698 if (start.offset > 0) {
699 range.setStartAfter(startChild);
700 } else {
701 range.setStartBefore(startChild);
702 }
703 } else {
704 range.setStart(startChild, start.offset);
705 }
706
707 let endChild = root.childNodes[end.index];
708 if (!endChild) {
709 range.setEnd(root, Math.min(root.childNodes.length, end.index));
710 } else if (endChild.nodeType === Node.ELEMENT_NODE) {
711 if (end.offset > 0) {
712 range.setEndAfter(endChild);
713 } else {
714 range.setEndBefore(endChild);
715 }
716 } else {
717 range.setEnd(endChild, end.offset);
718 }
719 return range;
720}
721
722function isSamePosition(a: Position, b: Position): boolean {
723 return a.index === b.index && a.offset === b.offset;

Callers 3

useTokenFieldFunction · 0.85
setTokenFieldSelectionFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected