From 953d15c66111592121a4f2a2eeb4f1f6b904fc90 Mon Sep 17 00:00:00 2001 From: frostime Date: Mon, 15 Jan 2024 20:45:34 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20Update=20setting=20utils?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libs/setting-utils.ts | 49 ++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/src/libs/setting-utils.ts b/src/libs/setting-utils.ts index d0ae912..7112212 100644 --- a/src/libs/setting-utils.ts +++ b/src/libs/setting-utils.ts @@ -1,10 +1,10 @@ /* * Copyright (c) 2023 by frostime. All Rights Reserved. * @Author : frostime - * @Date : 2023-09-16 18:05:00 + * @Date : 2023-12-17 18:28:19 * @FilePath : /src/libs/setting-utils.ts - * @LastEditTime : 2023-12-28 18:10:12 - * @Description : A utility for siyuan plugin settings + * @LastEditTime : 2024-01-15 20:45:16 + * @Description : */ import { Plugin, Setting } from 'siyuan'; @@ -26,7 +26,7 @@ export class SettingUtils { height: height, confirmCallback: () => { for (let key of this.settings.keys()) { - this.updateValue(key); + this.updateValueFromElement(key); } let data = this.dump(); if (callback !== undefined) { @@ -35,6 +35,12 @@ export class SettingUtils { this.plugin.data[this.name] = data; this.save(); } + }, + destroyCallback: () => { + //从值恢复元素 + for (let key of this.settings.keys()) { + this.updateElementFromValue(key); + } } }); } @@ -54,6 +60,7 @@ export class SettingUtils { async save() { let data = this.dump(); await this.plugin.saveData(this.file, this.dump()); + console.debug('Save config:', data); return data; } @@ -66,6 +73,14 @@ export class SettingUtils { return this.settings.get(key)?.value; } + set(key: string, value: any) { + let item = this.settings.get(key); + if (item) { + item.value = value; + this.updateElementFromValue(key); + } + } + /** * 将设置项目导出为 JSON 对象 * @returns object @@ -161,7 +176,7 @@ export class SettingUtils { }) } - private getElement(key: string) { + getElement(key: string) { let item = this.settings.get(key); let element = this.elements.get(key) as any; switch (item.type) { @@ -185,7 +200,7 @@ export class SettingUtils { return element; } - private updateValue(key: string) { + private updateValueFromElement(key: string) { let item = this.settings.get(key); let element = this.elements.get(key) as any; // console.debug(element, element?.value); @@ -208,4 +223,26 @@ export class SettingUtils { } } + private updateElementFromValue(key: string) { + let item = this.settings.get(key); + let element = this.elements.get(key) as any; + switch (item.type) { + case 'checkbox': + element.checked = item.value; + break; + case 'select': + element.value = item.value; + break; + case 'slider': + element.value = item.value; + break; + case 'textinput': + element.value = item.value; + break; + case 'textarea': + element.value = item.value; + break; + } + } + } \ No newline at end of file