(root: ShadowRoot | undefined, range: SelectedLineRange | null)
| 43 | } |
| 44 | |
| 45 | export function fixDiffSelection(root: ShadowRoot | undefined, range: SelectedLineRange | null) { |
| 46 | if (!range) return range |
| 47 | if (!root) return |
| 48 | |
| 49 | const diffs = root.querySelector("[data-diff]") |
| 50 | if (!(diffs instanceof HTMLElement)) return |
| 51 | |
| 52 | const split = diffs.dataset.diffType === "split" |
| 53 | const start = diffRowIndex(root, split, range.start, range.side) |
| 54 | const end = diffRowIndex(root, split, range.end, range.endSide ?? range.side) |
| 55 | |
| 56 | if (start === undefined || end === undefined) { |
| 57 | if (root.querySelector("[data-line], [data-alt-line]") == null) return |
| 58 | return null |
| 59 | } |
| 60 | if (start <= end) return range |
| 61 | |
| 62 | const side = range.endSide ?? range.side |
| 63 | const swapped: SelectedLineRange = { |
| 64 | start: range.end, |
| 65 | end: range.start, |
| 66 | } |
| 67 | |
| 68 | if (side) swapped.side = side |
| 69 | if (range.endSide && range.side) swapped.endSide = range.side |
| 70 | return swapped |
| 71 | } |
no test coverage detected