Merge pull request #219 from LostPaul/beta-2

Fix #218
This commit is contained in:
Lost Paul 2025-05-29 10:20:39 +02:00 committed by GitHub
commit 2692a22f93
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 49 additions and 29 deletions

View file

@ -251,7 +251,7 @@ export class Commands {
}
fileCommands() {
this.plugin.registerEvent(this.app.workspace.on('file-menu', async (menu: Menu, file: TAbstractFile) => {
this.plugin.registerEvent(this.app.workspace.on('file-menu', (menu: Menu, file: TAbstractFile) => {
let folder: TAbstractFile | TFolder | null = file.parent;
if (file instanceof TFile) {
if (this.plugin.settings.storageLocation === 'insideFolder') {
@ -269,7 +269,7 @@ export class Commands {
if (folder instanceof TFolder) {
const folderNote = getFolderNote(this.plugin, folder.path);
const excludedFolder = await getExcludedFolder(this.plugin, folder.path, true);
const excludedFolder = getExcludedFolder(this.plugin, folder.path, true);
if (folderNote?.path === file.path && !excludedFolder?.detached) { return; }
} else if (file.parent instanceof TFolder) {
folder = file.parent;

View file

@ -11,7 +11,7 @@ import { getWhitelistedFolder } from './whitelistFolderFunctions';
import { WhitelistedFolder } from '../WhitelistFolder';
import { WhitelistedPattern } from '../WhitelistPattern';
export async function getExcludedFolder(plugin: FolderNotesPlugin, path: string, includeDetached: boolean, pathOnly?: boolean, ignoreWhitelist?: boolean) {
export function getExcludedFolder(plugin: FolderNotesPlugin, path: string, includeDetached: boolean, pathOnly?: boolean, ignoreWhitelist?: boolean) {
let excludedFolder = {} as ExcludedFolder | ExcludePattern | undefined;
const whitelistedFolder = getWhitelistedFolder(plugin, path) as WhitelistedFolder | WhitelistedPattern | undefined;
const folderName = getFolderNameFromPathString(path);

View file

@ -9,11 +9,13 @@ import { loadFileClasses } from '../functions/styleFunctions';
import BackupWarningModal from './modals/BackupWarning';
import RenameFolderNotesModal from './modals/RenameFns';
let debounceTimer: NodeJS.Timeout;
export async function renderGeneral(settingsTab: SettingsTab) {
const containerEl = settingsTab.settingsPage;
const nameSetting = new Setting(containerEl)
.setName('Folder note name')
.setDesc('{{folder_name}} will be replaced with the name of the folder')
.setName('Folder note name template')
.setDesc('All folder notes will use this name. Use {{folder_name}} to insert the folders name. Existing notes wont update automatically; click on the button to apply the new name.')
.addText((text) =>
text
.setValue(settingsTab.plugin.settings.folderNoteName)
@ -21,6 +23,21 @@ export async function renderGeneral(settingsTab: SettingsTab) {
if (value.trim() === '') { return; }
settingsTab.plugin.settings.folderNoteName = value;
await settingsTab.plugin.saveSettings();
clearTimeout(debounceTimer);
debounceTimer = setTimeout(() => {
if (!value.includes('{{folder_name}}')) {
if (!settingsTab.showFolderNameInTabTitleSetting) {
settingsTab.display();
settingsTab.showFolderNameInTabTitleSetting = true;
}
} else {
if (settingsTab.showFolderNameInTabTitleSetting) {
settingsTab.display();
settingsTab.showFolderNameInTabTitleSetting = false;
}
}
}, 2000);
})
)
.addButton((button) =>
@ -40,10 +57,10 @@ 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.folderNoteName !== '{{folder_name}}') {
if (!settingsTab.plugin.settings.folderNoteName.includes('{{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.')
.setName('Display Folder Name in Tab Title')
.setDesc('Use the actual folder name in the tab title instead of the custom folder note name (e.g., "Folder Note").')
.addToggle((toggle) =>
toggle
.setValue(settingsTab.plugin.settings.tabManagerEnabled)
@ -62,8 +79,8 @@ export async function renderGeneral(settingsTab: SettingsTab) {
}
new Setting(containerEl)
.setName('Default folder note type for new folder notes')
.setDesc('Choose the default file type for new folder notes. (canvas, markdown, ...)')
.setName('Default file type for new folder notes')
.setDesc('Choose the default file type (canvas, markdown, ...) used when creating new folder notes.')
.addDropdown((dropdown) => {
dropdown.addOption('.ask', 'ask for file type');
settingsTab.plugin.settings.supportedFileTypes.forEach((type) => {
@ -89,12 +106,10 @@ export async function renderGeneral(settingsTab: SettingsTab) {
});
const setting0 = new Setting(containerEl);
setting0.setName('Supported file types for folder notes');
setting0.setName('Supported file types');
const desc0 = document.createDocumentFragment();
desc0.append(
'Choose the file types that should be supported for folder notes. (e.g. if you click on a folder name it searches for all file extensions that are supported)',
desc0.createEl('br'),
'Adding more file types may cause performance issues becareful when adding more file types and don\'t add too many.',
'Specify which file types are allowed as folder notes. Applies to both new and existing folders. Adding many types may affect performance.'
);
setting0.setDesc(desc0);
const list = new ListComponent(setting0.settingEl, settingsTab.plugin.settings.supportedFileTypes || [], ['md', 'canvas']);
@ -141,7 +156,7 @@ export async function renderGeneral(settingsTab: SettingsTab) {
const templateSetting = new Setting(containerEl)
.setDesc('Requires templates/templater plugin to be enabled')
.setDesc('Can be used with templater/templates plugin. If you add the location of the templates there.')
.setName('Template path')
.addSearch((cb) => {
new TemplateSuggest(cb.inputEl, settingsTab.plugin);
@ -270,19 +285,6 @@ export async function renderGeneral(settingsTab: SettingsTab) {
});
}
new Setting(containerEl)
.setName('Sync folder name')
.setDesc('Automatically rename the folder note when the folder name is changed')
.addToggle((toggle) =>
toggle
.setValue(settingsTab.plugin.settings.syncFolderName)
.onChange(async (value) => {
settingsTab.plugin.settings.syncFolderName = value;
await settingsTab.plugin.saveSettings();
settingsTab.display();
})
);
new Setting(containerEl)
.setName('Confirm folder note deletion')
.setDesc('Ask for confirmation before deleting a folder note')
@ -314,7 +316,7 @@ export async function renderGeneral(settingsTab: SettingsTab) {
if (Platform.isDesktop) {
const setting3 = new Setting(containerEl);
setting3.setName('Open folder note in a new tab by default');
setting3.setDesc('Always open folder notes in a new tab (except when you try to open the same note) instead of having to use ctrl/cmd + click to open in a new tab');
setting3.setDesc('Always open folder notes in a new tab unless the note is already open in the current tab.');
setting3.addToggle((toggle) =>
toggle
.setValue(settingsTab.plugin.settings.openInNewTab)
@ -377,6 +379,21 @@ export async function renderGeneral(settingsTab: SettingsTab) {
});
});
settingsTab.settingsPage.createEl('h3', { text: 'Automation settings' });
new Setting(containerEl)
.setName('Sync folder name')
.setDesc('Automatically rename the folder note when the folder name is changed')
.addToggle((toggle) =>
toggle
.setValue(settingsTab.plugin.settings.syncFolderName)
.onChange(async (value) => {
settingsTab.plugin.settings.syncFolderName = value;
await settingsTab.plugin.saveSettings();
settingsTab.display();
})
);
new Setting(containerEl)
.setName('Automatically create folder notes')
.setDesc('Automatically create a folder note when a new folder is created')
@ -431,6 +448,8 @@ export async function renderGeneral(settingsTab: SettingsTab) {
})
);
settingsTab.settingsPage.createEl('h3', { text: 'Settings tab' });
new Setting(containerEl)
.setName('Persist tab after restart')
.setDesc('Reopen the same settings tab after restarting Obsidian')

View file

@ -193,6 +193,7 @@ export class SettingsTab extends PluginSettingTab {
app: App;
excludeFolders: ExcludedFolder[];
settingsPage!: HTMLElement;
showFolderNameInTabTitleSetting: boolean;
constructor(app: App, plugin: FolderNotesPlugin) {
super(app, plugin);
}