33 * @Author : frostime
44 * @Date : 2023-12-17 18:28:19
55 * @FilePath : /src/libs/setting-utils.ts
6- * @LastEditTime : 2024-04-28 17:49:31
6+ * @LastEditTime : 2024-04-29 17:17:19
77 * @Description :
88 */
99
1010import { Plugin , Setting } from 'siyuan' ;
1111
12- const valueOf = ( ele : HTMLElement ) => {
12+ const valueOf = ( ele : HTMLElement , parseNumber : Function = parseInt ) => {
13+ let val : any = null ;
1314 if ( ele instanceof HTMLInputElement ) {
1415 if ( ele . type === 'checkbox' ) {
15- return ele . checked ;
16+ val = ele . checked ;
1617 } else {
17- return ele . value ;
18+ if ( ele . type === 'number' ) {
19+ val = parseNumber ( ele . value ) ;
20+ } else {
21+ val = ele . value ;
22+ }
1823 }
1924 } else if ( ele instanceof HTMLSelectElement ) {
20- return ele . value ;
25+ val = ele . value ;
2126 } else if ( ele instanceof HTMLTextAreaElement ) {
22- return ele . value ;
27+ val = ele . value ;
2328 } else {
24- return ele . textContent ;
29+ val = ele ? .textContent ;
2530 }
31+ return val ;
2632}
2733
2834const setValue = ( ele : HTMLElement , value : any ) => {
35+ if ( ele === null || ele === undefined ) return ;
2936 if ( ele instanceof HTMLInputElement ) {
3037 if ( ele . type === 'checkbox' ) {
3138 ele . checked = value ;
3239 } else {
3340 ele . value = value ;
3441 }
42+ if ( ele . type === 'range' ) {
43+ ele . ariaLabel = value ;
44+ }
3545 } else if ( ele instanceof HTMLSelectElement ) {
3646 ele . value = value ;
3747 } else if ( ele instanceof HTMLTextAreaElement ) {
@@ -74,7 +84,7 @@ export class SettingUtils {
7484 this . save ( ) ;
7585 } ,
7686 destroyCallback : ( ) => {
77- //从值恢复元素
87+ //Restore the original value
7888 for ( let key of this . settings . keys ( ) ) {
7989 this . updateElementFromValue ( key ) ;
8090 }
@@ -197,8 +207,6 @@ export class SettingUtils {
197207 */
198208 dump ( ) : Object {
199209 let data : any = { } ;
200-
201-
202210 for ( let [ key , item ] of this . settings ) {
203211 if ( item . type === 'button' ) continue ;
204212 data [ key ] = item . value ;
@@ -208,6 +216,33 @@ export class SettingUtils {
208216
209217 addItem ( item : ISettingItem ) {
210218 this . settings . set ( item . key , item ) ;
219+ if ( item . createElement === undefined ) {
220+ let itemElement = this . createDefaultElement ( item ) ;
221+ this . elements . set ( item . key , itemElement ) ;
222+ this . plugin . setting . addItem ( {
223+ title : item . title ,
224+ description : item ?. description ,
225+ createActionElement : ( ) => {
226+ this . updateElementFromValue ( item . key ) ;
227+ let element = this . getElement ( item . key ) ;
228+ return element ;
229+ }
230+ } ) ;
231+ } else {
232+ this . plugin . setting . addItem ( {
233+ title : item . title ,
234+ description : item ?. description ,
235+ createActionElement : ( ) => {
236+ let val = this . get ( item . key ) ;
237+ let element = item . createElement ( val ) ;
238+ this . elements . set ( item . key , element ) ;
239+ return element ;
240+ }
241+ } ) ;
242+ }
243+ }
244+
245+ createDefaultElement ( item : ISettingItem ) {
211246 let itemElement : HTMLElement ;
212247 switch ( item . type ) {
213248 case 'checkbox' :
@@ -283,16 +318,7 @@ export class SettingUtils {
283318 itemElement = hintElement ;
284319 break ;
285320 }
286- this . elements . set ( item . key , itemElement ) ;
287- this . plugin . setting . addItem ( {
288- title : item . title ,
289- description : item ?. description ,
290- createActionElement : ( ) => {
291- this . updateElementFromValue ( item . key ) ;
292- let element = this . getElement ( item . key ) ;
293- return element ;
294- }
295- } )
321+ return itemElement ;
296322 }
297323
298324 /**
@@ -309,50 +335,52 @@ export class SettingUtils {
309335 private updateValueFromElement ( key : string ) {
310336 let item = this . settings . get ( key ) ;
311337 let element = this . elements . get ( key ) as any ;
312- switch ( item . type ) {
313- case 'checkbox' :
314- item . value = element . checked ;
315- break ;
316- case 'select' :
317- item . value = element . value ;
318- break ;
319- case 'slider' :
320- item . value = element . value ;
321- break ;
322- case 'textinput' :
323- item . value = element . value ;
324- break ;
325- case 'textarea' :
326- item . value = element . value ;
327- break ;
328- case 'number' :
329- item . value = parseInt ( element . value ) ;
330- break ;
331- }
338+ item . value = valueOf ( element ) ;
339+ // switch (item.type) {
340+ // case 'checkbox':
341+ // item.value = element.checked;
342+ // break;
343+ // case 'select':
344+ // item.value = element.value;
345+ // break;
346+ // case 'slider':
347+ // item.value = element.value;
348+ // break;
349+ // case 'textinput':
350+ // item.value = element.value;
351+ // break;
352+ // case 'textarea':
353+ // item.value = element.value;
354+ // break;
355+ // case 'number':
356+ // item.value = parseInt(element.value);
357+ // break;
358+ // }
332359 }
333360
334361 private updateElementFromValue ( key : string ) {
335362 let item = this . settings . get ( key ) ;
336363 let element = this . elements . get ( key ) as any ;
337- switch ( item . type ) {
338- case 'checkbox' :
339- element . checked = item . value ;
340- break ;
341- case 'select' :
342- element . value = item . value ;
343- break ;
344- case 'slider' :
345- element . value = item . value ;
346- break ;
347- case 'textinput' :
348- element . value = item . value ;
349- break ;
350- case 'textarea' :
351- element . value = item . value ;
352- break ;
353- case 'number' :
354- element . value = item . value ;
355- break ;
356- }
364+ setValue ( element , item . value ) ;
365+ // switch (item.type) {
366+ // case 'checkbox':
367+ // element.checked = item.value;
368+ // break;
369+ // case 'select':
370+ // element.value = item.value;
371+ // break;
372+ // case 'slider':
373+ // element.value = item.value;
374+ // break;
375+ // case 'textinput':
376+ // element.value = item.value;
377+ // break;
378+ // case 'textarea':
379+ // element.value = item.value;
380+ // break;
381+ // case 'number':
382+ // element.value = item.value;
383+ // break;
384+ // }
357385 }
358386}
0 commit comments