(range: SelectedLineRange | null)
| 744 | const lineFromMouseEvent = (event: MouseEvent): MouseHit => mouseHit(event, parseLine) |
| 745 | |
| 746 | const applySelection = (range: SelectedLineRange | null) => { |
| 747 | const current = instance |
| 748 | if (!current) return false |
| 749 | |
| 750 | if (virtual()) { |
| 751 | current.setSelectedLines(range) |
| 752 | return true |
| 753 | } |
| 754 | |
| 755 | const root = viewer.getRoot() |
| 756 | if (!root) return false |
| 757 | |
| 758 | const total = lineCount() |
| 759 | if (root.querySelectorAll("[data-line]").length < total) return false |
| 760 | |
| 761 | if (!range) { |
| 762 | current.setSelectedLines(null) |
| 763 | return true |
| 764 | } |
| 765 | |
| 766 | const start = Math.min(range.start, range.end) |
| 767 | const end = Math.max(range.start, range.end) |
| 768 | if (start < 1 || end > total) { |
| 769 | current.setSelectedLines(null) |
| 770 | return true |
| 771 | } |
| 772 | |
| 773 | if (!root.querySelector(`[data-line="${start}"]`) || !root.querySelector(`[data-line="${end}"]`)) { |
| 774 | current.setSelectedLines(null) |
| 775 | return true |
| 776 | } |
| 777 | |
| 778 | const normalized = (() => { |
| 779 | if (range.endSide != null) return { start: range.start, end: range.end } |
| 780 | if (range.side !== "deletions") return range |
| 781 | if (root.querySelector("[data-deletions]") != null) return range |
| 782 | return { start: range.start, end: range.end } |
| 783 | })() |
| 784 | |
| 785 | current.setSelectedLines(normalized) |
| 786 | return true |
| 787 | } |
| 788 | |
| 789 | const setSelectedLines = (range: SelectedLineRange | null) => { |
| 790 | viewer.lastSelection = range |
no test coverage detected