From 41642b517471fc9619763490cf20be1e49e44f97 Mon Sep 17 00:00:00 2001 From: Silvano Cerza Date: Sun, 9 Mar 2025 16:39:25 +0100 Subject: [PATCH] Add settings to choose diff view mode --- src/settings/settings.ts | 2 ++ src/settings/tab.ts | 18 +++++++++++++ src/views/conflicts-resolution/view.tsx | 36 ++++++++++++++++++------- 3 files changed, 46 insertions(+), 10 deletions(-) diff --git a/src/settings/settings.ts b/src/settings/settings.ts index 17346c7..7cb867d 100644 --- a/src/settings/settings.ts +++ b/src/settings/settings.ts @@ -9,6 +9,7 @@ export interface GitHubSyncSettings { syncOnStartup: boolean; syncConfigDir: boolean; conflictHandling: "overwriteLocal" | "ask" | "overwriteRemote"; + conflictViewMode: "default" | "unified" | "split"; showStatusBarItem: boolean; showSyncRibbonButton: boolean; showConflictsRibbonButton: boolean; @@ -26,6 +27,7 @@ export const DEFAULT_SETTINGS: GitHubSyncSettings = { syncOnStartup: false, syncConfigDir: true, conflictHandling: "ask", + conflictViewMode: "default", showStatusBarItem: true, showSyncRibbonButton: true, showConflictsRibbonButton: true, diff --git a/src/settings/tab.ts b/src/settings/tab.ts index 79c6161..739495e 100644 --- a/src/settings/tab.ts +++ b/src/settings/tab.ts @@ -231,6 +231,24 @@ export default class GitHubSyncSettingsTab extends PluginSettingTab { }); }); + const diffModeOptions = { + default: "Default", + unified: "Unified", + split: "Split", + }; + new Setting(containerEl) + .setName("Conflict resolution view mode") + .setDesc("Set which diff view mode should be shown in case of conflicts") + .addDropdown((dropdown) => { + dropdown + .addOptions(diffModeOptions) + .setValue(this.plugin.settings.conflictViewMode) + .onChange(async (value: keyof typeof diffModeOptions) => { + this.plugin.settings.conflictViewMode = value; + await this.plugin.saveSettings(); + }); + }); + containerEl.createEl("h2", { text: "Extra" }); new Setting(containerEl) diff --git a/src/views/conflicts-resolution/view.tsx b/src/views/conflicts-resolution/view.tsx index 1a09515..90d8d15 100644 --- a/src/views/conflicts-resolution/view.tsx +++ b/src/views/conflicts-resolution/view.tsx @@ -1,4 +1,4 @@ -import { IconName, ItemView, Menu, WorkspaceLeaf } from "obsidian"; +import { IconName, ItemView, Menu, Platform, WorkspaceLeaf } from "obsidian"; import { Root, createRoot } from "react-dom/client"; import GitHubSyncPlugin from "src/main"; import { ConflictFile, ConflictResolution } from "src/sync-manager"; @@ -54,18 +54,34 @@ export class ConflictsResolutionView extends ItemView { this.root = createRoot(container); } - this.root.render( - <> - + let diffMode = "default"; + if (this.plugin.settings.conflictViewMode === "default") { + if (Platform.isMobile) { + diffMode = "unified"; + } else { + diffMode = "split"; + } + } else if (this.plugin.settings.conflictViewMode === "split") { + diffMode = "split"; + } else if (this.plugin.settings.conflictViewMode === "unified") { + diffMode = "unified"; + } + + if (diffMode === "split") { + this.root.render( - , - ); + />, + ); + } else { + this.root.render( + , + ); + } } async onClose() {