11import type JsEnginePlugin from 'jsEngine/main' ;
22import { StartupScriptsModal } from 'jsEngine/settings/StartupScriptModal' ;
33import type { App } from 'obsidian' ;
4- import { normalizePath , PluginSettingTab , Setting } from 'obsidian' ;
4+ import { normalizePath , PluginSettingTab , Setting , TFolder , TFile } from 'obsidian' ;
55
66export 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