From 45df35d913a53c1ee85cb958055bd52039587e1c Mon Sep 17 00:00:00 2001 From: milan-tom Date: Sat, 20 Apr 2024 11:51:42 +0100 Subject: [PATCH 1/3] Remove existing event listener(s) for folder note header breadcrumb when open folder in path enabled --- src/events/MutationObserver.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/events/MutationObserver.ts b/src/events/MutationObserver.ts index 0450775..d592db7 100644 --- a/src/events/MutationObserver.ts +++ b/src/events/MutationObserver.ts @@ -75,6 +75,20 @@ export async function addObserver(plugin: FolderNotesPlugin) { breadcrumbs.forEach((breadcrumb: HTMLElement) => { if (breadcrumb.onclick) return; breadcrumb.onclick = (event: MouseEvent) => handleViewHeaderClick(event, plugin); + + // Remove existing event listener(s) for folder note header breadcrumb when open folder in path enabled + if (breadcrumb.classList.contains('has-folder-note')) { + const clonedBreadcrumb = breadcrumb.cloneNode(true) as HTMLElement; + breadcrumb.parentElement?.replaceChild(clonedBreadcrumb, breadcrumb); + clonedBreadcrumb.onclick = (event: MouseEvent) => { + if (plugin.settings.openFolderNoteOnClickInPath) { + handleViewHeaderClick(event, plugin); + } else { + // Necessary if open folder in path disabled after breadcrumb rendered + breadcrumb.dispatchEvent(new PointerEvent(event.type, event)); + } + } + } }); } }); From a16f4635e7312bb54a443de68a4bf57635407fe4 Mon Sep 17 00:00:00 2001 From: milan-tom Date: Sat, 20 Apr 2024 12:11:29 +0100 Subject: [PATCH 2/3] Change duplicate event to be MouseEvent --- src/events/MutationObserver.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/events/MutationObserver.ts b/src/events/MutationObserver.ts index d592db7..b46619b 100644 --- a/src/events/MutationObserver.ts +++ b/src/events/MutationObserver.ts @@ -85,7 +85,7 @@ export async function addObserver(plugin: FolderNotesPlugin) { handleViewHeaderClick(event, plugin); } else { // Necessary if open folder in path disabled after breadcrumb rendered - breadcrumb.dispatchEvent(new PointerEvent(event.type, event)); + breadcrumb.dispatchEvent(new MouseEvent(event.type, event)); } } } From d4e3da3088e0f3fa2d2df07caaf56ce9393f8d83 Mon Sep 17 00:00:00 2001 From: Lost Paul <70213368+LostPaul@users.noreply.github.com> Date: Sun, 26 May 2024 00:01:38 +0200 Subject: [PATCH 3/3] Setting to disable sidebar opening Added a setting to enable/disable the opening of the sidebar on mobile when you click on a folder name in the path Improved the way it stops the sidebar from opening Fixed a bug where the sidebar wouldn't open --- src/events/MutationObserver.ts | 18 +++--------------- src/events/handleClick.ts | 19 ++++++++++++++++--- src/settings/PathSettings.ts | 12 ++++++++++++ src/settings/SettingsTab.ts | 2 ++ 4 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/events/MutationObserver.ts b/src/events/MutationObserver.ts index b46619b..3e984bd 100644 --- a/src/events/MutationObserver.ts +++ b/src/events/MutationObserver.ts @@ -74,21 +74,9 @@ export async function addObserver(plugin: FolderNotesPlugin) { if (breadcrumbs.length > 0) { breadcrumbs.forEach((breadcrumb: HTMLElement) => { if (breadcrumb.onclick) return; - breadcrumb.onclick = (event: MouseEvent) => handleViewHeaderClick(event, plugin); - - // Remove existing event listener(s) for folder note header breadcrumb when open folder in path enabled - if (breadcrumb.classList.contains('has-folder-note')) { - const clonedBreadcrumb = breadcrumb.cloneNode(true) as HTMLElement; - breadcrumb.parentElement?.replaceChild(clonedBreadcrumb, breadcrumb); - clonedBreadcrumb.onclick = (event: MouseEvent) => { - if (plugin.settings.openFolderNoteOnClickInPath) { - handleViewHeaderClick(event, plugin); - } else { - // Necessary if open folder in path disabled after breadcrumb rendered - breadcrumb.dispatchEvent(new MouseEvent(event.type, event)); - } - } - } + breadcrumb.addEventListener('click', (e) => { + handleViewHeaderClick(e, plugin); + }, { capture: true }); }); } }); diff --git a/src/events/handleClick.ts b/src/events/handleClick.ts index d0d2adc..53c935e 100644 --- a/src/events/handleClick.ts +++ b/src/events/handleClick.ts @@ -1,10 +1,13 @@ -import { Keymap } from 'obsidian'; +import { Keymap, Platform } from 'obsidian'; import FolderNotesPlugin from 'src/main'; import { openFolderNote, createFolderNote, getFolderNote } from 'src/functions/folderNoteFunctions'; import { getExcludedFolder } from 'src/ExcludeFolders/functions/folderFunctions'; import { addCSSClassToTitleEL, removeCSSClassFromEL } from 'src/functions/styleFunctions'; export async function handleViewHeaderClick(event: MouseEvent, plugin: FolderNotesPlugin) { + event.stopImmediatePropagation(); + event.preventDefault(); + event.stopPropagation(); if (!(event.target instanceof HTMLElement)) return; if (!plugin.settings.openFolderNoteOnClickInPath) return; @@ -19,9 +22,19 @@ export async function handleViewHeaderClick(event: MouseEvent, plugin: FolderNot event.target.onclick = null; event.target.click(); } + const folderNote = getFolderNote(plugin, folderPath); if (folderNote) { - return openFolderNote(plugin, folderNote, event); + await openFolderNote(plugin, folderNote, event).then(async () => { + // @ts-ignore + const fileExplorerPlugin = plugin.app.internalPlugins.getEnabledPluginById('file-explorer'); + if (fileExplorerPlugin && Platform.isMobile && plugin.settings.openSidebarWhenClickingOnPath) { + setTimeout(() => { fileExplorerPlugin.revealInFolder(folderNote); }, 200); + } else if (fileExplorerPlugin) { + fileExplorerPlugin.revealInFolder(folderNote); + } + }); + return; } else if (event.altKey || Keymap.isModEvent(event) === 'tab') { if ((plugin.settings.altKey && event.altKey) || (plugin.settings.ctrlKey && Keymap.isModEvent(event) === 'tab')) { await createFolderNote(plugin, folderPath, true, undefined, true); @@ -77,7 +90,7 @@ export async function handleFolderClick(event: MouseEvent, plugin: FolderNotesPl if (plugin.settings.enableCollapsing) return; return event.target.parentElement?.click(); } - + event.target.onclick = null; event.target.click(); } diff --git a/src/settings/PathSettings.ts b/src/settings/PathSettings.ts index 5cd8874..6b3f511 100644 --- a/src/settings/PathSettings.ts +++ b/src/settings/PathSettings.ts @@ -15,6 +15,18 @@ export async function renderPath(settingsTab: SettingsTab) { }) ); + new Setting(containerEl) + .setName('Open sidebar when opening a folder note through path (Mobile only)') + .setDesc('Open the sidebar when opening a folder note through the path on mobile') + .addToggle((toggle) => + toggle + .setValue(settingsTab.plugin.settings.openSidebarWhenClickingOnPath) + .onChange(async (value) => { + settingsTab.plugin.settings.openSidebarWhenClickingOnPath = value; + await settingsTab.plugin.saveSettings(); + }) + ); + new Setting(containerEl) .setName('Change folder name in the path') .setDesc('Automatically rename a folder name in the path above a note when the folder note is renamed') diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts index 2631e30..6ceccac 100644 --- a/src/settings/SettingsTab.ts +++ b/src/settings/SettingsTab.ts @@ -59,6 +59,7 @@ export interface FolderNotesSettings { hideCollapsingIcon: boolean; ignoreAttachmentFolder: boolean; tabManagerEnabled: boolean; + openSidebarWhenClickingOnPath: boolean; } export const DEFAULT_SETTINGS: FolderNotesSettings = { @@ -147,6 +148,7 @@ export const DEFAULT_SETTINGS: FolderNotesSettings = { hideCollapsingIcon: false, tabManagerEnabled: true, ignoreAttachmentFolder: true, + openSidebarWhenClickingOnPath: false, }; export class SettingsTab extends PluginSettingTab {