Skip to content

Commit b0284fa

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

File tree

1 file changed

+43
-1
lines changed

1 file changed

+43
-1
lines changed

jsEngine/settings/Settings.ts

Lines changed: 43 additions & 1 deletion
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')
@@ -62,12 +67,34 @@ export class JsEnginePluginSettingTab extends PluginSettingTab {
6267
await this.plugin.saveSettings();
6368
});
6469
});
70+
71+
const startupScriptsDirectory = this.app.vault.getFolderByPath(this.getStartupScriptsDirectory());
72+
let startupScripts: TFile[] = [];
73+
if (startupScriptsDirectory != null) {
74+
startupScripts = this.listJSfilesInDirectory(startupScriptsDirectory);
75+
}
76+
if (startupScriptsDirectory == null || startupScripts.length == 0) {
77+
new Setting(containerEl).setName('No JS snippets found').setDesc(`JS snippets are stored in "vault/${this.getStartupScriptsDirectory()}"`);
78+
} else {
79+
for (const file of startupScripts) {
80+
new Setting(containerEl)
81+
.setName(file.basename)
82+
.setDesc(`Apply JS snippet from "vault/${file.path}"`)
83+
.addToggle(el => {
84+
el.setValue(settings.startupScripts.contains(file.path)).onChange(val => this.toggleStartupScript(file, val));
85+
});
86+
}
87+
}
6588
}
6689

6790
getDefaultStartupScriptsDirectory(): string {
6891
return normalizePath(''.concat(this.app.vault.configDir, '/scripts'));
6992
}
7093

94+
getStartupScriptsDirectory(): string {
95+
return this.plugin.settings.startupScriptsDirectory ?? this.getDefaultStartupScriptsDirectory();
96+
}
97+
7198
async openStartupScriptsDirectory(): Promise<void> {
7299
const vault = this.app.vault;
73100
const directory = this.plugin.settings.startupScriptsDirectory ?? this.getDefaultStartupScriptsDirectory();
@@ -76,4 +103,19 @@ export class JsEnginePluginSettingTab extends PluginSettingTab {
76103
}
77104
this.app.openWithDefaultApp(directory);
78105
}
106+
107+
listJSfilesInDirectory(directory: TFolder): TFile[] {
108+
const files = directory.children.filter(el => el instanceof TFile);
109+
const folders = directory.children.filter(el => el instanceof TFolder);
110+
return files; // recurse the folders? .concat(folders.flatMap(dir => this.listJSfilesInDirectory(dir)))
111+
}
112+
113+
toggleStartupScript(file: TFile, enable: boolean): void {
114+
const settings = this.plugin.settings;
115+
if (enable) {
116+
settings.startupScripts.push(file.path);
117+
} else {
118+
settings.startupScripts.remove(file.path);
119+
}
120+
}
79121
}

0 commit comments

Comments
 (0)