obsidian-douban/src/org/wanxp/douban/setting/CustomPropertySettingsHelper.ts
Wanxp a120e450e9 fix #139 #128
1. 优化配置将配置页面调整为tab
2. 优化文件夹选取方式避免卡顿
3. 优化模板文件选取方式避免卡顿
4. 增加设置的导入导出用以备份
5. 优化加载插件的卡顿问题,现在加载会非常快
6. 优化了配置的文本,简化了文本内容
2025-03-06 18:54:01 +08:00

97 lines
3.6 KiB
TypeScript

import {i18nHelper} from "../../lang/helper";
import SettingsManager from "./SettingsManager";
import {CustomProperty} from "./model/CustomProperty";
import {ButtonComponent, DropdownComponent, ExtraButtonComponent, Setting, TextComponent} from "obsidian";
import {SupportType} from "../../constant/Constsant";
import DoubanPlugin from "../../main";
export function constructCustomPropertySettingsUI(containerEl: HTMLElement, manager: SettingsManager) {
// containerEl.createEl('h3', { text: i18nHelper.getMessage('1240') });
containerEl.createEl('p', { text: i18nHelper.getMessage('1242') });
const customProperties = manager.plugin.settings.customProperties;
new Setting(containerEl)
.setDesc(i18nHelper.getMessage('1241'))
.addButton((button) => {
button.setButtonText(i18nHelper.getMessage('124101'));
button.setTooltip(i18nHelper.getMessage('124101'));
button.setIcon('plus');
button.onClick(async () => {
customProperties.push({name: '', value: '', field: SupportType.ALL});
constructCustomPropertyUI(list, customProperties, manager);
});
});
const list = containerEl.createDiv('custom-property-list');
constructCustomPropertyUI(list, customProperties, manager);
}
export function constructCustomPropertyUI(containerEl: HTMLElement, customProperties: CustomProperty[], manager: SettingsManager) {
containerEl.empty();
for(let i: number = 0; i < customProperties.length; i++) {
addFilterInput(customProperties[i], containerEl, customProperties, manager, i);
}
}
function addFilterInput(data: CustomProperty, el: HTMLElement, customProperties: CustomProperty[] , manager: SettingsManager, idx: number) {
const item = el.createEl('li')
item.createEl('span', { text: i18nHelper.getMessage('124102') })
const nameField = new TextComponent(el);
nameField.setPlaceholder(i18nHelper.getMessage('124103'))
.setValue(data.name)
.onChange(async (value) => {
if (!value) {
return;
}
customProperties[idx].name = value;
await manager.plugin.saveSettings();
});
let nameEl = nameField.inputEl;
nameEl.addClass('obsidian_douban_settings_input')
item.appendChild(nameEl);
item.createEl('span', { text: i18nHelper.getMessage('124104') })
const valueField = new TextComponent(el);
valueField.setPlaceholder(i18nHelper.getMessage('124105'))
.setValue(data.value)
.onChange(async (value) => {
if (!value) {
return;
}
customProperties[idx].value = value;
await manager.plugin.saveSettings();
});
const valueEl = valueField.inputEl;
valueEl.addClass('obsidian_douban_settings_input')
item.appendChild(valueEl);
const fieldsDropdown = new DropdownComponent(el);
for (const fieldSelect in SupportType) {
// @ts-ignore
fieldsDropdown.addOption(fieldSelect, i18nHelper.getMessage(fieldSelect));
}
item.createEl('span', { text: i18nHelper.getMessage('124106') });
fieldsDropdown.setValue(data.field)
.onChange(async (value: SupportType) => {
customProperties[idx].field = value;
await manager.plugin.saveSettings();
});
const fieldSelectEl = fieldsDropdown.selectEl;
fieldSelectEl.addClass('obsidian_douban_settings_input')
item.appendChild(fieldSelectEl);
const extractButton = new ButtonComponent(el);
extractButton.setIcon('minus-with-circle');
extractButton.setTooltip(i18nHelper.getMessage('124107'));
extractButton.onClick(async () => {
customProperties.splice(idx, 1);
constructCustomPropertyUI(el, customProperties, manager);
await manager.plugin.saveSettings();
});
const extractButtonEl = extractButton.buttonEl;
extractButtonEl.addClass('obsidian_douban_settings_button')
item.appendChild(extractButtonEl);
// item.appendChild(extractButton.extraSettingsEl);
}