Skip to content

Commit e365545

Browse files
committed
startupScript settings inspired by css-snippets
1 parent 7e9e07b commit e365545

File tree

1 file changed

+55
-10
lines changed

1 file changed

+55
-10
lines changed

jsEngine/settings/Settings.ts

Lines changed: 55 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type JsEnginePlugin from 'jsEngine/main';
22
import { StartupScriptsModal } from 'jsEngine/settings/StartupScriptModal';
33
import type { App } from 'obsidian';
4-
import { normalizePath, PluginSettingTab, Setting } from 'obsidian';
4+
import { normalizePath, PluginSettingTab, Setting, TFolder, TFile } from 'obsidian';
55

66
export interface JsEnginePluginSettings {
77
startupScriptsDirectory: string | undefined;
@@ -41,6 +41,11 @@ export class JsEnginePluginSettingTab extends PluginSettingTab {
4141
new Setting(containerEl)
4242
.setName('JS snippets (loaded on startup)')
4343
.setHeading()
44+
.addExtraButton(el => {
45+
el.setTooltip('Reload snippets')
46+
.setIcon('refresh-cw')
47+
.onClick(() => this.display());
48+
})
4449
.addExtraButton(el => {
4550
el.setTooltip('Open snippets folder')
4651
.setIcon('folder-open')
@@ -53,27 +58,67 @@ export class JsEnginePluginSettingTab extends PluginSettingTab {
5358
.addText(el => {
5459
el.setPlaceholder(this.getDefaultStartupScriptsDirectory())
5560
.setValue(settings.startupScriptsDirectory ?? '')
56-
.onChange(async (val: string) => {
57-
if (val) {
58-
settings.startupScriptsDirectory = normalizePath(val);
59-
} else {
60-
settings.startupScriptsDirectory = undefined;
61-
}
62-
await this.plugin.saveSettings();
63-
});
61+
.onChange(async val => await this.setStartupScriptsDirectory(val));
6462
});
63+
64+
const startupScriptsDirectory = this.app.vault.getFolderByPath(this.getStartupScriptsDirectory());
65+
let startupScripts: TFile[] = [];
66+
if (startupScriptsDirectory != null) {
67+
startupScripts = this.listJSfilesInDirectory(startupScriptsDirectory);
68+
}
69+
if (startupScriptsDirectory == null || startupScripts.length == 0) {
70+
new Setting(containerEl).setName('No JS snippets found').setDesc(`JS snippets are stored in "vault/${this.getStartupScriptsDirectory()}"`);
71+
} else {
72+
for (const file of startupScripts) {
73+
new Setting(containerEl)
74+
.setName(file.basename)
75+
.setDesc(`Apply JS snippet from "vault/${file.path}"`)
76+
.addToggle(el => {
77+
el.setValue(settings.startupScripts.contains(file.path)).onChange(val => this.toggleStartupScript(file, val));
78+
});
79+
}
80+
}
6581
}
6682

6783
getDefaultStartupScriptsDirectory(): string {
6884
return normalizePath(''.concat(this.app.vault.configDir, '/scripts'));
6985
}
7086

87+
getStartupScriptsDirectory(): string {
88+
return this.plugin.settings.startupScriptsDirectory ?? this.getDefaultStartupScriptsDirectory();
89+
}
90+
91+
async setStartupScriptsDirectory(directory: string): Promise<void> {
92+
const settings = this.plugin.settings;
93+
if (directory) {
94+
settings.startupScriptsDirectory = normalizePath(directory);
95+
} else {
96+
settings.startupScriptsDirectory = undefined;
97+
}
98+
await this.plugin.saveSettings();
99+
}
100+
71101
async openStartupScriptsDirectory(): Promise<void> {
72102
const vault = this.app.vault;
73-
const directory = this.plugin.settings.startupScriptsDirectory ?? this.getDefaultStartupScriptsDirectory();
103+
const directory = this.getStartupScriptsDirectory();
74104
if ((await vault.adapter.exists(directory)) == false) {
75105
await vault.createFolder(directory);
76106
}
77107
this.app.openWithDefaultApp(directory);
78108
}
109+
110+
listJSfilesInDirectory(directory: TFolder): TFile[] {
111+
const files = directory.children.filter(el => el instanceof TFile);
112+
const folders = directory.children.filter(el => el instanceof TFolder);
113+
return files.concat(folders.flatMap(dir => this.listJSfilesInDirectory(dir)))
114+
}
115+
116+
toggleStartupScript(file: TFile, enable: boolean): void {
117+
const settings = this.plugin.settings;
118+
if (enable) {
119+
settings.startupScripts.push(file.path);
120+
} else {
121+
settings.startupScripts.remove(file.path);
122+
}
123+
}
79124
}

0 commit comments

Comments
 (0)