mirror of
https://github.com/lostpaul/obsidian-folder-notes.git
synced 2026-07-22 07:40:24 +00:00
Folder name modal on folder creation
This commit is contained in:
parent
708169c582
commit
74db402c86
2 changed files with 53 additions and 8 deletions
32
src/folderNameModal.ts
Normal file
32
src/folderNameModal.ts
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
import { App, Modal, Setting, TFolder } from 'obsidian';
|
||||
import FolderNotesPlugin from './main';
|
||||
export default class FolderNameModal extends Modal {
|
||||
plugin: FolderNotesPlugin;
|
||||
app: App;
|
||||
folder: TFolder;
|
||||
constructor(app: App, plugin: FolderNotesPlugin, folder: TFolder) {
|
||||
super(app);
|
||||
this.plugin = plugin;
|
||||
this.app = app;
|
||||
this.folder = folder;
|
||||
}
|
||||
onOpen() {
|
||||
const { contentEl } = this;
|
||||
contentEl.createEl('h2', { text: 'Folder name' });
|
||||
new Setting(contentEl)
|
||||
.setName('Enter the name of the folder')
|
||||
.addText((text) =>
|
||||
text
|
||||
.setValue(this.folder.name.replace('.md', ''))
|
||||
.onChange(async (value) => {
|
||||
if (value.trim() !== "") {
|
||||
this.app.vault.rename(this.folder, this.folder.path.slice(0, this.folder.path.lastIndexOf('/') + 1) + value);
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
onClose() {
|
||||
const { contentEl } = this;
|
||||
contentEl.empty();
|
||||
}
|
||||
}
|
||||
29
src/main.ts
29
src/main.ts
|
|
@ -1,5 +1,6 @@
|
|||
import { Plugin, TFile, TFolder, TAbstractFile } from 'obsidian'
|
||||
import { DEFAULT_SETTINGS, FolderNotesSettings, SettingsTab } from './settings'
|
||||
import FolderNameModal from './folderNameModal';
|
||||
export default class FolderNotesPlugin extends Plugin {
|
||||
observer: MutationObserver
|
||||
folders: TFolder[] = []
|
||||
|
|
@ -9,16 +10,22 @@ export default class FolderNotesPlugin extends Plugin {
|
|||
console.log('loading folder notes plugin');
|
||||
await this.loadSettings();
|
||||
this.settingsTab = new SettingsTab(this.app, this);
|
||||
this.addSettingTab(this.settingsTab);
|
||||
if (this.settings.hideFolderNote) {
|
||||
document.body.classList.add('hide-folder-note');
|
||||
} else {
|
||||
document.body.classList.remove('hide-folder-note');
|
||||
}
|
||||
this.registerEvent(this.app.vault.on('create', (file: TAbstractFile) => {
|
||||
if (!this.app.workspace.layoutReady) return;
|
||||
if (!this.settings.autoCreate) return;
|
||||
if (file instanceof TFolder) {
|
||||
const path = file.path + '/' + file.name + '.md';
|
||||
if (!path) return;
|
||||
const folder = this.app.vault.getAbstractFileByPath(path);
|
||||
if (folder) return;
|
||||
this.createFolderNote(path);
|
||||
|
||||
}
|
||||
}));
|
||||
|
||||
|
|
@ -51,14 +58,13 @@ export default class FolderNotesPlugin extends Plugin {
|
|||
.forEach((element: HTMLElement) => {
|
||||
element.onclick = (event: MouseEvent) => this.handleFolderClick(event);
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
this.observer.observe(document.body, {
|
||||
childList: true,
|
||||
subtree: true,
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
async handleFolderClick(event: MouseEvent) {
|
||||
|
|
@ -70,9 +76,10 @@ export default class FolderNotesPlugin extends Plugin {
|
|||
|
||||
if (this.app.vault.getAbstractFileByPath(path)) {
|
||||
this.openFolderNote(path);
|
||||
if (!this.settings.hideFolderNote) return;
|
||||
event.target.parentElement?.parentElement?.getElementsByClassName('nav-folder-children').item(0)?.querySelectorAll('div.nav-file')
|
||||
.forEach((element: HTMLElement) => {
|
||||
if (element.innerText === (event.target as HTMLElement)?.innerText) {
|
||||
if (element.innerText === (event.target as HTMLElement)?.innerText && !element.classList.contains('is-folder-note')) {
|
||||
element.classList.add('is-folder-note');
|
||||
}
|
||||
});
|
||||
|
|
@ -80,12 +87,13 @@ export default class FolderNotesPlugin extends Plugin {
|
|||
} else if (event.altKey || event.ctrlKey) {
|
||||
if ((this.settings.altKey && event.altKey) || (this.settings.ctrlKey && event.ctrlKey)) {
|
||||
this.createFolderNote(path);
|
||||
if (!this.settings.hideFolderNote) return;
|
||||
event.target.parentElement?.parentElement?.getElementsByClassName('nav-folder-children').item(0)?.querySelectorAll('div.nav-file')
|
||||
.forEach((element: HTMLElement) => {
|
||||
if (element.innerText === (event.target as HTMLElement)?.innerText) {
|
||||
element.classList.add('is-folder-note');
|
||||
}
|
||||
});
|
||||
.forEach((element: HTMLElement) => {
|
||||
if (element.innerText === (event.target as HTMLElement)?.innerText && !element.classList.contains('is-folder-note')) {
|
||||
element.classList.add('is-folder-note');
|
||||
}
|
||||
});
|
||||
} else {
|
||||
event.target.onclick = null;
|
||||
event.target.click();
|
||||
|
|
@ -100,6 +108,11 @@ export default class FolderNotesPlugin extends Plugin {
|
|||
const leaf = this.app.workspace.getLeaf(false);
|
||||
const file = await this.app.vault.create(path, '');
|
||||
await leaf.openFile(file);
|
||||
if (!this.settings.autoCreate) return;
|
||||
const folder = this.app.vault.getAbstractFileByPath(path.substring(0, path.lastIndexOf('/' || '\\')));
|
||||
if (!(folder instanceof TFolder)) return;
|
||||
const modal = new FolderNameModal(this.app, this, folder);
|
||||
modal.open();
|
||||
}
|
||||
|
||||
async openFolderNote(path: string) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue