Skip to content

Commit 419faee

Browse files
committed
Fix: Collapse viewed files without scrolling
When we use toggle.click(), that toggle gets focused, which causes the window to scroll to the last collapsed file when we switch to that tab. That's disruptive and this fixes it.
1 parent a82cd56 commit 419faee

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

src/webview/css/classes.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export enum Diff2HtmlCssClasses {
2+
Div__DiffFileContent__Collapsed = "d2h-d-none",
3+
Input__ViewedToggle__Selected = "d2h-selected",
4+
}

src/webview/css/elements.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export enum Diff2HtmlCssClassElements {
55
Div__File = ".d2h-file-wrapper",
66
Div__LeftDiffOnSideBySide__FirstChild = ".d2h-file-side-diff:first-child",
77
Div__LineNumberRightOnLineByLine = ".line-num2",
8+
Label__ViewedToggle = ".d2h-file-collapse",
89
Input__ViewedToggle = ".d2h-file-collapse-input",
910
Input__ViewedToggle__Checked = ".d2h-file-collapse-input:checked",
1011
Td__DeletedLine = ".d2h-del",

src/webview/message/handler.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { CssPropertiesBasedOnTheme, SkeletonElementIds } from "../../shared/css/
66
import { extractNewFileNameFromDiffName, extractNumberFromString } from "../../shared/extract";
77
import { MessageToExtension, MessageToWebview, MessageToWebviewHandler } from "../../shared/message";
88
import { AppTheme } from "../../shared/types";
9+
import { Diff2HtmlCssClasses } from "../css/classes";
910
import { Diff2HtmlCssClassElements } from "../css/elements";
1011
import { UpdateWebviewPayload } from "./api";
1112
import { getSha1Hash } from "./hash";
@@ -275,12 +276,21 @@ export class MessageToWebviewHandlerImpl implements MessageToWebviewHandler {
275276
if (fileName && viewedState[fileName]) {
276277
const diffHash = await this.getDiffHash(toggle);
277278
if (diffHash === viewedState[fileName]) {
278-
toggle.click();
279+
this.updateDiff2HtmlFileCollapsed(toggle, true);
279280
} else {
280281
toggle.classList.add(CHANGED_SINCE_VIEWED);
281282
}
282283
}
283284
}
285+
286+
private updateDiff2HtmlFileCollapsed(toggleElement: HTMLInputElement, collapse: boolean) {
287+
// do the same thing that diff2html does to collapse or expand one file
288+
toggleElement.checked = collapse;
289+
const fileContainer = this.getDiffFileContainer(toggleElement);
290+
const label = fileContainer?.querySelector(Diff2HtmlCssClassElements.Label__ViewedToggle);
291+
label?.classList.toggle(Diff2HtmlCssClasses.Input__ViewedToggle__Selected, collapse);
292+
const fileContent = fileContainer?.querySelector(Diff2HtmlCssClassElements.Div__DiffFileContent);
293+
fileContent?.classList.toggle(Diff2HtmlCssClasses.Div__DiffFileContent__Collapsed, collapse);
284294
}
285295

286296
private async getDiffHash(diffElement: HTMLElement): Promise<string | null> {

0 commit comments

Comments
 (0)