in src/caret/caret.ts [134:169]
getRelativePosition(curNode: Node, position: number) {
let curPos = 0;
// eslint-disable-next-line no-underscore-dangle
let _curNode = curNode;
const nodeTypeText = 3;
if (!_curNode) {
return {_curNode: this.target, _correctedPosition: position};
}
if (position === 0) {
while (_curNode.nodeType !== nodeTypeText) {
_curNode = _curNode.childNodes[0];
}
// eslint-disable-next-line no-underscore-dangle
const _correctedPosition = position;
return {_curNode, _correctedPosition};
}
let i = -1;
if (_curNode && _curNode.nodeType !== undefined) {
while (curPos < position && _curNode.nodeType !== nodeTypeText) {
i++;
if (_curNode.childNodes[i]) {
curPos += _curNode.childNodes[i].textContent?.length ?? 0;
if (curPos >= position) {
_curNode = _curNode.childNodes[i];
curPos -= _curNode.textContent?.length ?? 0;
i = -1;
}
} else {
break;
}
}
}
// eslint-disable-next-line no-underscore-dangle
const _correctedPosition = position - curPos;
return {_curNode, _correctedPosition};
}