Update all existing folder notes button

This commit is contained in:
Lost Paul 2023-05-19 13:29:36 +02:00
parent 00ae688bdb
commit 2d965c462b
4 changed files with 47 additions and 9 deletions

View file

@ -34,6 +34,7 @@ export class Commands {
new Notice('Successfully excluded folder from folder notes');
});
});
if (!(file instanceof TFolder)) return;
const path = file.path + '/' + this.plugin.settings.folderNoteName.replace('{{folder_name}}', file.name) + this.plugin.settings.folderNoteType;
let folderNote = this.plugin.app.vault.getAbstractFileByPath(path.slice(0, -this.plugin.settings.folderNoteType.length) + '.md') || this.plugin.app.vault.getAbstractFileByPath(path);
if (!folderNote) {

View file

@ -18,6 +18,8 @@ export default class FolderNotesPlugin extends Plugin {
await this.loadSettings();
this.settingsTab = new SettingsTab(this.app, this);
this.addSettingTab(this.settingsTab);
this.settings.oldFolderNoteName = this.settings.folderNoteName;
this.saveSettings();
// Add CSS Classes
document.body.classList.add('folder-notes-plugin');
@ -69,7 +71,7 @@ export default class FolderNotesPlugin extends Plugin {
if (!(file instanceof TFile)) { return; }
// parent is null here even if the parent exists
// not entirely sure why
const parentPath = this.getPathFromString(file.path);
const parentPath = this.getFolderPathFromString(file.path);
const parentName = this.getNameFromPathString(parentPath);
if (parentName !== file.basename) { return; }
this.removeCSSClassFromEL(parentPath, 'has-folder-note');
@ -236,10 +238,10 @@ export default class FolderNotesPlugin extends Plugin {
handleFileRename(file: TFile, oldPath: string) {
const oldFileName = this.getNameFromPathString(oldPath);
const oldFilePath = this.getPathFromString(oldPath);
const oldFilePath = this.getFolderPathFromString(oldPath);
const fileExtension = this.getExtensionFromPathString(oldPath);
const oldFolder = this.app.vault.getAbstractFileByPath(oldFilePath);
const newFilePath = this.getPathFromString(file.path);
const newFilePath = this.getFolderPathFromString(file.path);
const newFolder = this.app.vault.getAbstractFileByPath(newFilePath);
const excludedFolder = this.getExcludedFolderByPath(newFolder?.path || '');
@ -299,6 +301,9 @@ export default class FolderNotesPlugin extends Plugin {
extractFolderName(template: string, changedFileName: string) {
const [prefix, suffix] = template.split('{{folder_name}}');
if (prefix.trim() === '' && suffix.trim() === '') {
return changedFileName;
}
if (!changedFileName.startsWith(prefix) || !changedFileName.endsWith(suffix)) {
return null;
}
@ -325,13 +330,14 @@ export default class FolderNotesPlugin extends Plugin {
if (file) {
applyTemplate(this, file, this.settings.templatePath);
}
this.addCSSClassToTitleEL(path, 'is-folder-note', true);
this.addCSSClassToTitleEL(file.parent.path, 'has-folder-note');
if (!this.settings.autoCreate) return;
if (!useModal) return;
const folder = this.app.vault.getAbstractFileByPath(this.getPathFromString(path));
const folder = this.app.vault.getAbstractFileByPath(this.getFolderPathFromString(path));
if (!(folder instanceof TFolder)) return;
const modal = new FolderNameModal(this.app, this, folder);
modal.open();
this.addCSSClassToTitleEL(path, 'is-folder-note', true);
}
async openFolderNote(file: TAbstractFile, evt: MouseEvent) {
@ -347,6 +353,7 @@ export default class FolderNotesPlugin extends Plugin {
if (this.settings.showDeleteConfirmation) {
return new DeleteConfirmationModal(this.app, this, file).open();
}
this.removeCSSClassFromEL(file.parent.path, 'has-folder-note');
await this.app.vault.delete(file);
}
@ -362,7 +369,7 @@ export default class FolderNotesPlugin extends Plugin {
return path.slice(path.lastIndexOf('.') >= 0 ? path.lastIndexOf('.') : 0);
}
getPathFromString(path: string): string {
getFolderPathFromString(path: string): string {
const subString = path.lastIndexOf('/' || '\\') >= 0 ? path.lastIndexOf('/') : path.length;
return path.substring(0, subString);
}
@ -371,7 +378,7 @@ export default class FolderNotesPlugin extends Plugin {
return this.settings.excludeFolders.find((excludedFolder) => {
if (excludedFolder.path === path) { return true; }
if (!excludedFolder.subFolders) { return false; }
return this.getPathFromString(path).startsWith(excludedFolder.path);
return this.getFolderPathFromString(path).startsWith(excludedFolder.path);
});
}

View file

@ -28,6 +28,7 @@ export default class DeleteConfirmationModal extends Modal {
this.plugin.settings.showDeleteConfirmation = false;
this.plugin.saveSettings();
this.close();
this.plugin.removeCSSClassFromEL(this.file.parent.path, 'has-folder-note');
this.app.vault.delete(this.file);
});
} else {
@ -50,6 +51,7 @@ export default class DeleteConfirmationModal extends Modal {
button.classList.add('mod-warning', 'fn-confirmation-modal-button');
button.addEventListener('click', async () => {
this.close();
this.plugin.removeCSSClassFromEL(this.file.parent.path, 'has-folder-note');
this.app.vault.delete(this.file);
});
button.focus();

View file

@ -1,4 +1,4 @@
import { App, Platform, PluginSettingTab, Setting } from 'obsidian';
import { App, Notice, Platform, PluginSettingTab, Setting, TFile, TFolder } from 'obsidian';
import FolderNotesPlugin from './main';
import { FolderSuggest } from './suggesters/FolderSuggester';
import ExcludedFolderSettings from './modals/exludeFolderSettings';
@ -20,6 +20,7 @@ export interface FolderNotesSettings {
openFolderNoteOnClickInPath: boolean;
openInNewTab: boolean;
folderNoteName: string;
oldFolderNoteName: string;
folderNoteType: '.md' | '.canvas';
disableFolderHighlighting: boolean;
}
@ -42,6 +43,7 @@ export const DEFAULT_SETTINGS: FolderNotesSettings = {
folderNoteName: '{{folder_name}}',
folderNoteType: '.md',
disableFolderHighlighting: false,
oldFolderNoteName: '{{folder_name}}',
};
export class SettingsTab extends PluginSettingTab {
plugin: FolderNotesPlugin;
@ -59,7 +61,7 @@ export class SettingsTab extends PluginSettingTab {
new Setting(containerEl)
.setName('Folder note name')
.setDesc('The name of the folder note')
.setDesc('{{folder_name}} will be replaced with the name of the folder')
.addText((text) =>
text
.setValue(this.plugin.settings.folderNoteName)
@ -74,6 +76,7 @@ export class SettingsTab extends PluginSettingTab {
.setButtonText('Rename existing folder notes')
.setCta()
.onClick(async () => {
this.updateFolderNotes(this.plugin.settings.oldFolderNoteName, this.plugin.settings.folderNoteName);
})
);
@ -388,19 +391,44 @@ export class SettingsTab extends PluginSettingTab {
});
});
}
addExcludedFolder(excludedFolder: ExcludedFolder) {
this.plugin.settings.excludeFolders.push(excludedFolder);
this.plugin.saveSettings();
}
deleteExcludedFolder(excludedFolder: ExcludedFolder) {
this.plugin.settings.excludeFolders = this.plugin.settings.excludeFolders.filter((folder) => folder.path !== excludedFolder.path);
this.plugin.saveSettings();
}
updateExcludedFolder(excludedFolder: ExcludedFolder, newExcludeFolder: ExcludedFolder) {
this.plugin.settings.excludeFolders = this.plugin.settings.excludeFolders.filter((folder) => folder.path !== excludedFolder.path);
this.addExcludedFolder(newExcludeFolder);
}
updateFolderNotes(oldTemplate: string, newTemplate: string) {
this.plugin.settings.oldFolderNoteName = newTemplate;
this.plugin.saveSettings();
new Notice('Starting to update folder notes...');
this.app.vault.getFiles().forEach((file) => {
if (file instanceof TFile) {
const folder = this.app.vault.getAbstractFileByPath(this.plugin.getFolderPathFromString(file.path));
if (!(folder instanceof TFolder)) return;
let fileName = file.name.slice(0, -file.extension.length - 1);
fileName = this.plugin.extractFolderName(oldTemplate, fileName) || '';
if (fileName === folder?.name) {
const newPath = `${folder?.path}/${this.plugin.settings.folderNoteName.replace('{{folder_name}}', fileName)}.${file.extension}`;
this.app.vault.rename(file, newPath);
} else if (folder?.name === file.name.slice(0, -file.extension.length - 1) || '') {
const newPath = `${folder?.path}/${this.plugin.settings.folderNoteName.replace('{{folder_name}}', file.name.slice(0, -file.extension.length - 1) || '')}.${file.extension}`;
this.app.vault.rename(file, newPath);
}
}
});
new Notice('Finished updating folder notes');
}
}
export class ExcludedFolder {
path: string;