Skip to content

Commit c0cabe9

Browse files
committed
Clear native browser highlighting with snippet selection
1 parent f858930 commit c0cabe9

2 files changed

Lines changed: 22 additions & 1 deletion

File tree

‎test/browser/review.spec.ts‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,3 +195,20 @@ test('places selection actions beside code deep in a scrolled diff',async({page}
195195
await page.locator('#code').evaluate(element=>{element.scrollTop=0;});await expect(actions).toBeHidden();
196196
await line.scrollIntoViewIfNeeded();await expect(actions).toBeVisible();await page.getByRole('button',{name:'Clear selection',exact:true}).click();await expect(actions).toBeHidden();
197197
});
198+
test('Clear selection removes native text selection as well as selected lines',async({page})=>{
199+
await page.goto(app.url);
200+
await page.locator('.added .code-lines').first().evaluate(element=>{
201+
const line=element.querySelector('[data-code-line]')!;
202+
const range=document.createRange();range.selectNodeContents(line);
203+
const selection=window.getSelection()!;selection.removeAllRanges();selection.addRange(range);
204+
element.dispatchEvent(new MouseEvent('mouseup',{bubbles:true}));
205+
});
206+
await expect(page.locator('.selected-line').first()).toBeVisible();
207+
expect(await page.evaluate(()=>window.getSelection()?.toString())).not.toBe('');
208+
await page.getByRole('button',{name:'Clear selection',exact:true}).click();
209+
await expect(page.getByRole('group',{name:'Selected code'})).toBeHidden();
210+
await expect(page.locator('.selected-line')).toHaveCount(0);
211+
expect(await page.evaluate(()=>window.getSelection()?.toString())).toBe('');
212+
await page.locator('#code').press('ArrowRight');
213+
await expect(page.getByRole('group',{name:'Selected code'})).toBeHidden();
214+
});

‎web/public/app.js‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,11 @@ function attachSelection(kind) {
525525
}
526526
$("snippet-ask").onclick = () => attachSelection("question");
527527
$("snippet-request").onclick = () => attachSelection("change");
528-
$("selection-clear").onclick = () => {snippetSelection=null;paintSelection();};
528+
$("selection-clear").onclick = () => {
529+
window.getSelection()?.removeAllRanges();
530+
snippetSelection = null;
531+
paintSelection();
532+
};
529533
function captureHighlightedLines() {
530534
const selection = window.getSelection();
531535
if (!selection || selection.isCollapsed || !selection.rangeCount) return;

0 commit comments

Comments
 (0)