diff --git a/src/modules/features/DocumentHistory/DocumentHistoryModal.ts b/src/modules/features/DocumentHistory/DocumentHistoryModal.ts index 7e7560a..a8c22b3 100644 --- a/src/modules/features/DocumentHistory/DocumentHistoryModal.ts +++ b/src/modules/features/DocumentHistory/DocumentHistoryModal.ts @@ -56,6 +56,7 @@ export class DocumentHistoryModal extends Modal { info!: HTMLDivElement; fileInfo!: HTMLDivElement; showDiff = false; + diffOnly = false; id?: DocumentID; file: FilePathWithPrefix; @@ -70,6 +71,7 @@ export class DocumentHistoryModal extends Modal { currentDiffIndex = -1; diffNavContainer!: HTMLDivElement; diffNavIndicator!: HTMLSpanElement; + diffOnlyLabel!: HTMLLabelElement; constructor( app: App, @@ -91,6 +93,9 @@ export class DocumentHistoryModal extends Modal { if (localStorage.getItem("ols-history-highlightdiff") == "1") { this.showDiff = true; } + if (localStorage.getItem("ols-history-diffonly") == "1") { + this.diffOnly = true; + } } async loadFile(initialRev?: string) { @@ -173,15 +178,25 @@ export class DocumentHistoryModal extends Modal { const w2data = readDocument(w2) as string; const diff = dmp.diff_main(w2data, w1data); dmp.diff_cleanupSemantic(diff); + let hasOmitted = false; for (const v of diff) { const x1 = v[0]; const x2 = v[1]; if (x1 == DIFF_DELETE) { result += "" + escapeStringToHTML(x2) + ""; + hasOmitted = false; } else if (x1 == DIFF_EQUAL) { - result += "" + escapeStringToHTML(x2) + ""; + if (!this.diffOnly) { + result += "" + escapeStringToHTML(x2) + ""; + } else { + if (!hasOmitted) { + result += "\n...\n"; + hasOmitted = true; + } + } } else if (x1 == DIFF_INSERT) { result += "" + escapeStringToHTML(x2) + ""; + hasOmitted = false; } } result = result.replace(/\n/g, "
"); @@ -279,6 +294,9 @@ export class DocumentHistoryModal extends Modal { if (this.diffNavContainer) { this.diffNavContainer.style.display = this.showDiff ? "flex" : "none"; } + if (this.diffOnlyLabel) { + this.diffOnlyLabel.style.display = this.showDiff ? "inline-block" : "none"; + } } override onOpen() { @@ -320,6 +338,24 @@ export class DocumentHistoryModal extends Modal { label.appendText("Highlight diff"); }); + const diffOnlyLabel = diffOptionsRow.createEl("label", {}); + diffOnlyLabel.appendChild( + createEl("input", { type: "checkbox" }, (checkbox) => { + if (this.diffOnly) { + checkbox.checked = true; + } + checkbox.addEventListener("input", (evt: any) => { + this.diffOnly = checkbox.checked; + localStorage.setItem("ols-history-diffonly", this.diffOnly == true ? "1" : ""); + void scheduleOnceIfDuplicated("loadRevs", () => this.loadRevs()); + }); + }) + ); + diffOnlyLabel.appendText("Diff only"); + diffOnlyLabel.style.marginLeft = "10px"; + diffOnlyLabel.style.display = this.showDiff ? "inline-block" : "none"; + this.diffOnlyLabel = diffOnlyLabel; + // Diff navigation buttons this.diffNavContainer = diffOptionsRow.createDiv(""); this.diffNavContainer.addClass("diff-nav");