diff options
| author | Adam <[email protected]> | 2026-03-12 07:26:43 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-12 12:26:43 +0000 |
| commit | d4107d51f163b74c96895b50d653828c698d937e (patch) | |
| tree | 070ae9ad38ebd230d75517d485fc0c86f2263c6b /packages/app/src/utils/dom.ts | |
| parent | d8fbe0af0151c662008d8a2dbbb7c76ff5db88d4 (diff) | |
| download | opencode-d4107d51f163b74c96895b50d653828c698d937e.tar.gz opencode-d4107d51f163b74c96895b50d653828c698d937e.zip | |
chore: cleanup (#17115)
Diffstat (limited to 'packages/app/src/utils/dom.ts')
| -rw-r--r-- | packages/app/src/utils/dom.ts | 51 |
1 files changed, 0 insertions, 51 deletions
diff --git a/packages/app/src/utils/dom.ts b/packages/app/src/utils/dom.ts deleted file mode 100644 index 4f3724c7c..000000000 --- a/packages/app/src/utils/dom.ts +++ /dev/null @@ -1,51 +0,0 @@ -export function getCharacterOffsetInLine(lineElement: Element, targetNode: Node, offset: number): number { - const r = document.createRange() - r.selectNodeContents(lineElement) - r.setEnd(targetNode, offset) - return r.toString().length -} - -export function getNodeOffsetInLine(lineElement: Element, charIndex: number): { node: Node; offset: number } | null { - const walker = document.createTreeWalker(lineElement, NodeFilter.SHOW_TEXT, null) - let remaining = Math.max(0, charIndex) - let lastText: Node | null = null - let lastLen = 0 - let node: Node | null - while ((node = walker.nextNode())) { - const len = node.textContent?.length || 0 - lastText = node - lastLen = len - if (remaining <= len) return { node, offset: remaining } - remaining -= len - } - if (lastText) return { node: lastText, offset: lastLen } - if (lineElement.firstChild) return { node: lineElement.firstChild, offset: 0 } - return null -} - -export function getSelectionInContainer( - container: HTMLElement, -): { sl: number; sch: number; el: number; ech: number } | null { - const s = window.getSelection() - if (!s || s.rangeCount === 0) return null - const r = s.getRangeAt(0) - const sc = r.startContainer - const ec = r.endContainer - const getLineElement = (n: Node) => - (n.nodeType === Node.TEXT_NODE ? (n.parentElement as Element) : (n as Element))?.closest(".line") - const sle = getLineElement(sc) - const ele = getLineElement(ec) - if (!sle || !ele) return null - if (!container.contains(sle as Node) || !container.contains(ele as Node)) return null - const cc = container.querySelector("code") as HTMLElement | null - if (!cc) return null - const lines = Array.from(cc.querySelectorAll(".line")) - const sli = lines.indexOf(sle as Element) - const eli = lines.indexOf(ele as Element) - if (sli === -1 || eli === -1) return null - const sl = sli + 1 - const el = eli + 1 - const sch = getCharacterOffsetInLine(sle as Element, sc, r.startOffset) - const ech = getCharacterOffsetInLine(ele as Element, ec, r.endOffset) - return { sl, sch, el, ech } -} |
