From be8e17f135c6cd42876e20ed34d58a4d6a4d9d13 Mon Sep 17 00:00:00 2001 From: Lost Paul <70213368+LostPaul@users.noreply.github.com> Date: Sat, 1 Feb 2025 21:00:23 +0100 Subject: [PATCH] Auto create folder note when creating note option --- src/events/handleCreate.ts | 28 +++++++++++++++++++--------- src/settings/GeneralSettings.ts | 15 ++++++++++++++- src/settings/SettingsTab.ts | 3 ++- 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/events/handleCreate.ts b/src/events/handleCreate.ts index ec395b4..a6d43b1 100644 --- a/src/events/handleCreate.ts +++ b/src/events/handleCreate.ts @@ -1,8 +1,9 @@ import { TAbstractFile, TFolder, TFile } from 'obsidian'; import FolderNotesPlugin from 'src/main'; -import { createFolderNote, getFolder, getFolderNote } from 'src/functions/folderNoteFunctions'; +import { createFolderNote, getFolder, getFolderNote, turnIntoFolderNote } from 'src/functions/folderNoteFunctions'; import { getExcludedFolder } from 'src/ExcludeFolders/functions/folderFunctions'; import { removeCSSClassFromEL, addCSSClassToTitleEL } from 'src/functions/styleFunctions'; +import { removeExtension } from 'src/functions/utils'; export async function handleCreate(file: TAbstractFile, plugin: FolderNotesPlugin) { if (!plugin.app.workspace.layoutReady) return; @@ -25,15 +26,24 @@ export async function handleCreate(file: TAbstractFile, plugin: FolderNotesPlugi async function handleFileCreation(file: TFile, plugin: FolderNotesPlugin) { const folder = getFolder(plugin, file); - if (!(folder instanceof TFolder)) { return; } - const detachedFolder = await getExcludedFolder(plugin, folder.path, true); - if (detachedFolder) { return; } - const folderNote = getFolderNote(plugin, folder.path); - if (folderNote && folderNote.path === file.path) { - addCSSClassToTitleEL(folder.path, 'has-folder-note', plugin); - addCSSClassToTitleEL(file.path, 'is-folder-note', plugin); - return; + if (!(folder instanceof TFolder) && plugin.settings.autoCreateForFiles) { + if (!file.parent) { return; } + const newFolder = await plugin.app.fileManager.createNewFolder(file.parent) + turnIntoFolderNote(plugin, file, newFolder); + } else if (folder instanceof TFolder) { + const detachedFolder = await getExcludedFolder(plugin, folder.path, true); + if (detachedFolder) { return; } + const folderNote = getFolderNote(plugin, folder.path); + + if (folderNote && folderNote.path === file.path) { + addCSSClassToTitleEL(folder.path, 'has-folder-note', plugin); + addCSSClassToTitleEL(file.path, 'is-folder-note', plugin); + } else { + if (!file.parent) { return; } + const newFolder = await plugin.app.fileManager.createNewFolder(file.parent) + turnIntoFolderNote(plugin, file, newFolder); + } } } diff --git a/src/settings/GeneralSettings.ts b/src/settings/GeneralSettings.ts index 098c33f..0ba14ec 100644 --- a/src/settings/GeneralSettings.ts +++ b/src/settings/GeneralSettings.ts @@ -40,7 +40,7 @@ export async function renderGeneral(settingsTab: SettingsTab) { nameSetting.infoEl.appendText('Requires a restart to take effect'); nameSetting.infoEl.style.color = settingsTab.app.vault.getConfig('accentColor') as string || '#7d5bed'; - if (settingsTab.plugin.settings.newFolderNoteName !== '{{folder_name}}') { + if (settingsTab.plugin.settings.folderNoteName !== '{{folder_name}}') { new Setting(containerEl) .setName('Use folder name instead of folder note name in the tab title') .setDesc('When you\'re using a folder note name like "folder note" and have multiple folder notes open you can\'t separate them anymore by their name. This setting uses the folder name instead and allows you to indentify the different files.') @@ -404,4 +404,17 @@ export async function renderGeneral(settingsTab: SettingsTab) { }) ); } + + new Setting(containerEl) + .setName('Automatically create folder note when you create a note') + .setDesc('Automatically create a folder note when a note is created. It has to be a file type that you selected in the supported file types') + .addToggle((toggle) => + toggle + .setValue(settingsTab.plugin.settings.autoCreateForFiles) + .onChange(async (value) => { + settingsTab.plugin.settings.autoCreateForFiles = value; + await settingsTab.plugin.saveSettings(); + settingsTab.display(); + }) + ); } \ No newline at end of file diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts index d684cb8..f79e330 100644 --- a/src/settings/SettingsTab.ts +++ b/src/settings/SettingsTab.ts @@ -22,6 +22,7 @@ export interface FolderNotesSettings { autoCreate: boolean; autoCreateForAttachmentFolder: boolean; autoCreateFocusFiles: boolean; + autoCreateForFiles: boolean; enableCollapsing: boolean; excludeFolders: (ExcludePattern | ExcludedFolder)[]; whitelistFolders: (WhitelistedFolder | WhitelistedPattern)[]; @@ -80,6 +81,7 @@ export const DEFAULT_SETTINGS: FolderNotesSettings = { autoCreate: false, autoCreateFocusFiles: true, autoCreateForAttachmentFolder: false, + autoCreateForFiles: false, enableCollapsing: false, excludeFolders: [], whitelistFolders: [], @@ -266,7 +268,6 @@ export class SettingsTab extends PluginSettingTab { renameFolderNotes() { new Notice('Starting to update folder notes...'); - console.log('starting to update folder notes 2'); const oldTemplate = this.plugin.settings.oldFolderNoteName ?? '{{folder_name}}'; for (const folder of this.app.vault.getAllLoadedFiles()) {