diff --git a/README.md b/README.md index c55c4ca..ac5ff37 100644 --- a/README.md +++ b/README.md @@ -139,3 +139,9 @@ If you want some features or have any questions about this plugin, create issues `npm run dev` 6. 进入Obsidian插件中心重新加载当前插件 7. 享受开发吧 + +## 免责声明 +本程序没有爬取任何书影音等内容,只供技术研究使用。没有侵犯书影音作者版权和豆瓣官方利益。如有任何侵权行为,请联系我删除。 + +## Thanks + diff --git a/src/constant/Constsant.ts b/src/constant/Constsant.ts index 714341b..c89bb37 100644 --- a/src/constant/Constsant.ts +++ b/src/constant/Constsant.ts @@ -52,6 +52,16 @@ export enum TemplateKey { teleplayTemplateFile = 'teleplayTemplateFile', } +export enum SupportType { + ALL = "ALL", + MOVIE = 'MOVIE', + BOOK = 'BOOK', + MUSIC = 'MUSIC', + NOTE = 'NOTE', + GAME = 'GAME', + TELEPLAY = 'TELEPLAY', +} + /** * 名称模式选项 */ diff --git a/src/constant/DefaultSettings.ts b/src/constant/DefaultSettings.ts index 822e180..79b2653 100644 --- a/src/constant/DefaultSettings.ts +++ b/src/constant/DefaultSettings.ts @@ -1,5 +1,5 @@ import {DoubanPluginSetting} from "@App/setting/model/DoubanPluginSetting"; -import {PersonNameMode} from "./Constsant"; +import {PersonNameMode, SupportType} from "./Constsant"; import {doubanHeaders} from "./Douban"; export const DEFAULT_SETTINGS: DoubanPluginSetting = { @@ -19,4 +19,12 @@ export const DEFAULT_SETTINGS: DoubanPluginSetting = { dataFilePath: "", dataFileNamePath: "/{{type}}/{{title}}", statusBar: true, + customProperties: [ + {name: 'myType', value: 'movie', field: SupportType.MOVIE}, + {name: 'myType', value: 'book', field: SupportType.BOOK}, + {name: 'myType', value: 'music', field: SupportType.MUSIC}, + {name: 'myType', value: 'note', field: SupportType.NOTE}, + {name: 'myType', value: 'game', field: SupportType.GAME}, + {name: 'myType', value: 'teleplay', field: SupportType.TELEPLAY}, + ], } diff --git a/src/douban/broadcast/handler/DoubanPageBroadcatLoadHandler.ts b/src/douban/broadcast/handler/DoubanPageBroadcatLoadHandler.ts index 4513aed..cfc135c 100644 --- a/src/douban/broadcast/handler/DoubanPageBroadcatLoadHandler.ts +++ b/src/douban/broadcast/handler/DoubanPageBroadcatLoadHandler.ts @@ -5,7 +5,7 @@ import DoubanPageBroadcastSubject from '../model/DoubanPageBroadcastSubject'; import DoubanPlugin from "main"; import DoubanSubject from 'src/douban/data/model/DoubanSubject'; import HandleContext from "@App/data/model/HandleContext"; -import {TemplateKey} from "../../../constant/Constsant"; +import {SupportType, TemplateKey} from "../../../constant/Constsant"; //TODO will support in future version class DoubanPageBroadcatLoadHandler extends DoubanAbstractLoadHandler { @@ -14,7 +14,7 @@ class DoubanPageBroadcatLoadHandler extends DoubanAbstractLoadHandler } async parse(extract: T, context: HandleContext): Promise { - let template: string = await this.getTemplate(context); + let template: string = await this.getTemplate(context); let frontMatterStart: number = template.indexOf(BasicConst.YAML_FRONT_MATTER_SYMBOL, 0); let frontMatterEnd: number = template.indexOf(BasicConst.YAML_FRONT_MATTER_SYMBOL, frontMatterStart + 1); let frontMatter: string = ''; let frontMatterBefore: string = ''; let frontMatterAfter: string = ''; - let result:string = ''; + let result: string = ''; if (frontMatterStart > -1 && frontMatterEnd > -1) { frontMatterBefore = template.substring(0, frontMatterStart); frontMatter = template.substring(frontMatterStart, frontMatterEnd + 3); @@ -49,7 +54,7 @@ export default abstract class DoubanAbstractLoadHandler } else { result = this.parsePartText(template, extract, context); } - let fileName:string = ''; + let fileName: string = ''; if (SearchHandleMode.FOR_CREATE == context.mode) { fileName = this.parsePartText(this.getFileName(context), extract, context); } @@ -57,7 +62,7 @@ export default abstract class DoubanAbstractLoadHandler return {content: result, fileName: fileName}; } - private getFileName(context:HandleContext): string { + private getFileName(context: HandleContext): string { const {dataFileNamePath} = context.settings; return dataFileNamePath ? dataFileNamePath : DEFAULT_SETTINGS.dataFileNamePath; } @@ -116,7 +121,7 @@ export default abstract class DoubanAbstractLoadHandler return result; } - abstract getTemplateKey(context: HandleContext): TemplateKey; + abstract getSupportType(): SupportType; abstract parseText(beforeContent: string, extract: T, context: HandleContext, textMode: TemplateTextMode): string; @@ -198,8 +203,8 @@ export default abstract class DoubanAbstractLoadHandler } private parsePartText(template: string, extract: T, context: HandleContext, textMode: TemplateTextMode = TemplateTextMode.NORMAL): string { - const resultContent = template - .replaceAll(DoubanParameter.ID, extract.id) + let resultContent = this.handleCustomVariable(template, context); + resultContent = resultContent.replaceAll(DoubanParameter.ID, extract.id) .replaceAll(DoubanParameter.TITLE, this.handleSpecialContent(this.getPersonName(extract.title, context), textMode)) .replaceAll(DoubanParameter.TYPE, extract.type) .replaceAll(DoubanParameter.SCORE, this.handleSpecialContent(extract.score)) @@ -216,21 +221,70 @@ export default abstract class DoubanAbstractLoadHandler return this.parseText(resultContent, extract, context, textMode); } - private async getTemplate(context: HandleContext):Promise { - const tempKey:TemplateKey = this.getTemplateKey(context); - const templatePath:string = context.settings[tempKey]; + /** + * 处理自定义参数 + * @param template + * @param context + * @private + */ + private handleCustomVariable(template: string, context: HandleContext): string { + let customProperties = context.settings.customProperties; + let resultContent = template; + if (!customProperties) { + return resultContent; + } + customProperties.filter(customProperty => customProperty.name && + customProperty.field + && (customProperty.field == SupportType.ALL || + customProperty.field == this.getSupportType())).forEach(customProperty => { + resultContent = resultContent.replaceAll(`{{${customProperty.name}}}`, customProperty.value); + }); + return resultContent; + } + + private getTemplateKey():TemplateKey { + let templateKey: TemplateKey; + switch (this.getSupportType()) { + case SupportType.MOVIE: + templateKey = TemplateKey.movieTemplateFile; + break; + case SupportType.BOOK: + templateKey = TemplateKey.bookTemplateFile; + break; + case SupportType.MUSIC: + templateKey = TemplateKey.musicTemplateFile; + break; + case SupportType.TELEPLAY: + templateKey = TemplateKey.teleplayTemplateFile; + break; + case SupportType.GAME: + templateKey = TemplateKey.gameTemplateFile; + break; + case SupportType.NOTE: + templateKey = TemplateKey.noteTemplateFile; + break; + default: + templateKey = null; + + } + return templateKey; + } + + private async getTemplate(context: HandleContext): Promise { + const tempKey: TemplateKey = this.getTemplateKey(); + const templatePath: string = context.settings[tempKey]; // @ts-ignore if (!templatePath || StringUtil.isBlank(templatePath)) { return getDefaultTemplateContent(tempKey); } - const defaultContent = getDefaultTemplateContent(tempKey); - let firstLinkpathDest:TFile = this.doubanPlugin.app.metadataCache.getFirstLinkpathDest(templatePath, ''); + const defaultContent = getDefaultTemplateContent(tempKey); + let firstLinkpathDest: TFile = this.doubanPlugin.app.metadataCache.getFirstLinkpathDest(templatePath, ''); if (!firstLinkpathDest) { return defaultContent; - }else { - const val = await this.doubanPlugin.fileHandler.getFileContent(firstLinkpathDest.path); - return val?val:defaultContent; + } else { + const val = await this.doubanPlugin.fileHandler.getFileContent(firstLinkpathDest.path); + return val ? val : defaultContent; } } } diff --git a/src/douban/data/handler/DoubanBookLoadHandler.ts b/src/douban/data/handler/DoubanBookLoadHandler.ts index e32a531..7c7671a 100644 --- a/src/douban/data/handler/DoubanBookLoadHandler.ts +++ b/src/douban/data/handler/DoubanBookLoadHandler.ts @@ -3,10 +3,8 @@ import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler"; import DoubanBookSubject, {DoubanBookParameter} from "../model/DoubanBookSubject"; import DoubanPlugin from "main"; import DoubanSubject from "../model/DoubanSubject"; -import {TemplateKey, TemplateTextMode} from "../../../constant/Constsant"; -import StringUtil from "../../../utils/StringUtil"; +import {SupportType, TemplateTextMode} from "../../../constant/Constsant"; import HandleContext from "@App/data/model/HandleContext"; -import {i18nHelper} from "../../../lang/helper"; export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler { @@ -14,8 +12,8 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler { value.push(html(a).text().trim()); }); - } else if (key.indexOf('作者') >= 0 || key.indexOf('丛书') >= 0 || key.indexOf('出版社') >= 0) { + } else if (key.indexOf('作者') >= 0 || key.indexOf('丛书') >= 0 || key.indexOf('出版社') >= 0 || key.indexOf('出品方') >= 0) { value = html(info.next.next).text().trim(); } else { value = html(info.next).text().trim(); @@ -104,6 +104,7 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler = new Map( ['ISBN:', 'isbn'], ['译者', 'translator'], ['副标题:', 'subTitle'], + ['出品方:', 'producer'], ] ); diff --git a/src/douban/data/handler/DoubanGameLoadHandler.ts b/src/douban/data/handler/DoubanGameLoadHandler.ts index d308f09..5231b04 100644 --- a/src/douban/data/handler/DoubanGameLoadHandler.ts +++ b/src/douban/data/handler/DoubanGameLoadHandler.ts @@ -5,7 +5,7 @@ import DoubanSubject from '../model/DoubanSubject'; import DoubanGameSubject from '../model/DoubanGameSubject'; import StringUtil from "../../../utils/StringUtil"; import HandleContext from "@App/data/model/HandleContext"; -import {TemplateKey} from "../../../constant/Constsant"; +import {SupportType, TemplateKey} from "../../../constant/Constsant"; export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler { @@ -13,8 +13,8 @@ export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler { @@ -14,8 +14,8 @@ export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler { @@ -12,8 +12,8 @@ export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler { @@ -13,8 +13,8 @@ export default class DoubanNoteLoadHandler extends DoubanAbstractLoadHandler { - getTemplateKey(context: HandleContext): TemplateKey { - return TemplateKey.bookTemplateFile + getSupportType(): SupportType.ALL { + return SupportType.ALL; } parseText(beforeContent: string, extract: DoubanSubject, context: HandleContext): string { diff --git a/src/douban/data/handler/DoubanTeleplayLoadHandler.ts b/src/douban/data/handler/DoubanTeleplayLoadHandler.ts index 79d9b9c..1adeb58 100644 --- a/src/douban/data/handler/DoubanTeleplayLoadHandler.ts +++ b/src/douban/data/handler/DoubanTeleplayLoadHandler.ts @@ -5,7 +5,7 @@ import DoubanSubject from "../model/DoubanSubject"; import DoubanTeleplaySubject from "../model/DoubanTeleplaySubject"; import SchemaOrg from "src/utils/SchemaOrg"; import HandleContext from "@App/data/model/HandleContext"; -import {TemplateKey} from "../../../constant/Constsant"; +import {SupportType, TemplateKey} from "../../../constant/Constsant"; /** * teleplay @@ -16,8 +16,8 @@ export class DoubanTeleplayLoadHandler extends DoubanAbstractLoadHandler { + setting.addText((textField) => { + setting.descEl.appendChild( + createFragment((frag) => { + frag.appendText(i18nHelper.getMessage('120002')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('120003')); + frag.createEl( + 'a', + { + text: i18nHelper.getMessage('120901'), + href: 'https://www.douban.com', + }, + (a) => { + a.setAttr('target', '_blank'); + } + ); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('120004')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('120005')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('120006')); + frag.createEl('br'); + }) + ); + textField.inputEl.addClass("obsidian_douban_settings_textField"); + textField + .setPlaceholder(DEFAULT_SETTINGS.searchUrl) + .setValue(manager.plugin.settings.searchUrl) + .onChange(async (value) => { + manager.plugin.settings.searchUrl = value; + await manager.plugin.saveSettings(); + }); + + }); + }); + + new Setting(containerEl).setName(i18nHelper.getMessage('120501')).then((setting) => { + setting.addMomentFormat((mf) => { + setting.descEl.appendChild( + createFragment((frag) => { + frag.appendText( + i18nHelper.getMessage('120503') + ); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('120506') + ' '); + frag.createEl( + 'a', + { + text: i18nHelper.getMessage('120508'), + href: 'https://momentjs.com/docs/#/displaying/format/', + }, + (a) => { + a.setAttr('target', '_blank'); + } + ); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('120507') + ': '); + mf.setSampleEl(frag.createEl('b', {cls: 'u-pop'})); + frag.createEl('br'); + }) + ); + mf.setPlaceholder(DEFAULT_SETTINGS.dateFormat); + mf.setValue(manager.plugin.settings.dateFormat) + mf.onChange(async (value) => { + manager.plugin.settings.dateFormat = value; + await manager.plugin.saveSettings(); + }); + + }); + }); + + new Setting(containerEl).setName(i18nHelper.getMessage('120502')).then((setting) => { + setting.addMomentFormat((mf) => { + setting.descEl.appendChild( + createFragment((frag) => { + frag.appendText( + i18nHelper.getMessage('120504') + ); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('120506') + ' '); + frag.createEl( + 'a', + { + text: i18nHelper.getMessage('120508'), + href: 'https://momentjs.com/docs/#/displaying/format/', + }, + (a) => { + a.setAttr('target', '_blank'); + } + ); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('120507') + ': '); + mf.setSampleEl(frag.createEl('b', {cls: 'u-pop'})); + frag.createEl('br'); + }) + ); + mf.setPlaceholder(DEFAULT_SETTINGS.timeFormat); + mf.setValue(manager.plugin.settings.timeFormat) + mf.onChange(async (value) => { + manager.plugin.settings.timeFormat = value; + await manager.plugin.saveSettings(); + }); + + }); + }); + + new Setting(containerEl) + .setName(i18nHelper.getMessage('121401')) + .setDesc(i18nHelper.getMessage('121402')) + .addToggle((toggleComponent) => { + toggleComponent + // .setTooltip(i18nHelper.getMessage('121403')) + .setValue(manager.plugin.settings.statusBar) + .onChange(async (value) => { + manager.plugin.settings.statusBar = value; + await manager.plugin.saveSettings(); + }); + }); +} diff --git a/src/douban/setting/CustomPropertySettingsHelper.ts b/src/douban/setting/CustomPropertySettingsHelper.ts new file mode 100644 index 0000000..ff24507 --- /dev/null +++ b/src/douban/setting/CustomPropertySettingsHelper.ts @@ -0,0 +1,95 @@ +import {i18nHelper} from "../../lang/helper"; +import SettingsManager from "@App/setting/SettingsManager"; +import {CustomProperty} from "@App/setting/model/CustomProperty"; +import {ButtonComponent, DropdownComponent, ExtraButtonComponent, Setting, TextComponent} from "obsidian"; +import {SupportType} from "../../constant/Constsant"; + +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); +} diff --git a/src/douban/setting/DoubanSettingTab.ts b/src/douban/setting/DoubanSettingTab.ts index 1941d72..4f570a1 100644 --- a/src/douban/setting/DoubanSettingTab.ts +++ b/src/douban/setting/DoubanSettingTab.ts @@ -6,6 +6,11 @@ import {PersonNameMode, PersonNameModeRecords} from "../../constant/Constsant"; import SettingsManager from "@App/setting/SettingsManager"; import {FolderSuggest} from "@App/setting/model/FolderSuggest"; import { DEFAULT_SETTINGS } from "src/constant/DefaultSettings"; +import { constructOutUI } from "./OutputSettingsHelper"; +import { constructTemplateUI } from "./TemplateSettingHelper"; +import { constructBasicUI } from "./BasicSettingsHelper"; +import { constructTemplateVariablesUI } from "./TemplateVariableSettingsHelper"; +import {constructCustomPropertySettingsUI, constructCustomPropertyUI} from "@App/setting/CustomPropertySettingsHelper"; /** * 部分逻辑参考以下项目 @@ -25,11 +30,10 @@ export class DoubanSettingTab extends PluginSettingTab { containerEl.empty(); containerEl.createEl("h2", {text: 'Obsidian Douban'}); new Setting(containerEl); - this.settingsManager.constructBasicUI(containerEl); - this.settingsManager.constructTemplateUI(containerEl); - this.settingsManager.constructOutUI(containerEl); - - this.settingsManager.constructTemplateVariablesUI(containerEl); - + constructBasicUI(containerEl, this.settingsManager); + constructTemplateUI(containerEl, this.settingsManager); + constructOutUI(containerEl, this.settingsManager); + constructCustomPropertySettingsUI(containerEl, this.settingsManager); + constructTemplateVariablesUI(containerEl, this.settingsManager); } } diff --git a/src/douban/setting/OutputSettingsHelper.ts b/src/douban/setting/OutputSettingsHelper.ts new file mode 100644 index 0000000..faa5d02 --- /dev/null +++ b/src/douban/setting/OutputSettingsHelper.ts @@ -0,0 +1,78 @@ +import {i18nHelper} from "../../lang/helper"; +import {Setting} from "obsidian"; +import {createFolderSelectionSetting} from "@App/setting/TemplateSettingHelper"; +import {DEFAULT_SETTINGS} from "../../constant/DefaultSettings"; +import {PersonNameMode, PersonNameModeRecords} from "../../constant/Constsant"; +import SettingsManager from "@App/setting/SettingsManager"; + +export function constructOutUI(containerEl: HTMLElement, manager: SettingsManager) { + containerEl.createEl('h3', { text: i18nHelper.getMessage('1220') }); + new Setting(containerEl).then(createFolderSelectionSetting({name: '121501', desc: '121502', placeholder: '121503', key: 'dataFilePath', manager: manager})); + let outfolder = containerEl.createDiv({ cls: 'settings-item' }); + constructOutFolderUI(outfolder, manager); + + new Setting(containerEl) + .setName(i18nHelper.getMessage('120601')) + .setDesc(i18nHelper.getMessage('120602')) + .addText((textField) => { + textField.setPlaceholder(DEFAULT_SETTINGS.arraySpilt) + .setValue(manager.plugin.settings.arraySpilt) + .onChange(async (value) => { + manager.plugin.settings.arraySpilt = value; + await manager.plugin.saveSettings(); + }); + }); + + new Setting(containerEl).setName(i18nHelper.getMessage('121201')).then((setting) => { + setting.addDropdown((dropdwon) => { + setting.descEl.appendChild( + createFragment((frag) => { + frag.appendText(i18nHelper.getMessage('121202')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('121203')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('121204')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('121205')); + frag.createEl('br'); + }) + ); + // dropdwon.inputEl.addClass("settings_area"); + // dropdwon.inputEl.setAttr("rows", 10); + dropdwon.addOption(PersonNameMode.CH_NAME, PersonNameModeRecords.CH) + dropdwon.addOption(PersonNameMode.EN_NAME, PersonNameModeRecords.EN) + dropdwon.addOption(PersonNameMode.CH_EN_NAME, PersonNameModeRecords.CH_EN) + dropdwon.setValue(manager.plugin.settings.personNameMode) + .onChange(async (value: string) => { + manager.plugin.settings.personNameMode = value as PersonNameMode; + await manager.plugin.saveSettings(); + }); + }); + }); +} + + +export function constructOutFolderUI(containerEl: HTMLElement, manager: SettingsManager) { + containerEl.empty(); + const dataFilePathSetting = new Setting(containerEl) + .setName(i18nHelper.getMessage('121601')) + .setDesc(i18nHelper.getMessage('121602')) + .addText((textField) => { + textField.setPlaceholder(DEFAULT_SETTINGS.dataFileNamePath) + .setValue(manager.plugin.settings.dataFileNamePath) + .onChange(async (value) => { + manager.plugin.settings.dataFileNamePath = value; + await manager.plugin.saveSettings(); + }); + }); + dataFilePathSetting.addExtraButton((button) => { + button + .setIcon('reset') + .setTooltip(i18nHelper.getMessage('121902')) + .onClick(async () => { + manager.plugin.settings.dataFileNamePath = DEFAULT_SETTINGS.dataFileNamePath; + await manager.plugin.saveSettings(); + constructOutFolderUI(containerEl, manager) + }); + }) +} diff --git a/src/douban/setting/SettingsManager.ts b/src/douban/setting/SettingsManager.ts index 9696de0..284dfe9 100644 --- a/src/douban/setting/SettingsManager.ts +++ b/src/douban/setting/SettingsManager.ts @@ -2,9 +2,10 @@ import {App, Setting} from "obsidian"; import { DEFAULT_SETTINGS } from "src/constant/DefaultSettings"; import DoubanPlugin from "../../../main"; import { DoubanPluginSetting } from "./model/DoubanPluginSetting"; -import {createFileSelectionSetting, createFolderSelectionSetting} from "@App/setting/SettingHelper"; +import {createFileSelectionSetting, createFolderSelectionSetting} from "@App/setting/TemplateSettingHelper"; import {i18nHelper} from "../../lang/helper"; import {PersonNameMode, PersonNameModeRecords} from "../../constant/Constsant"; +import {constructBasicUI} from "@App/setting/BasicSettingsHelper"; export default class SettingsManager { app: App; @@ -31,454 +32,4 @@ export default class SettingsManager { await this.plugin.saveSettings(); } - constructBasicUI(containerEl: HTMLElement){ - containerEl.createEl('h3', { text: i18nHelper.getMessage('1210') }); - new Setting(containerEl).setName(i18nHelper.getMessage('120001')) - .then((setting) => { - setting.addText((textField) => { - setting.descEl.appendChild( - createFragment((frag) => { - frag.appendText(i18nHelper.getMessage('120002')); - frag.createEl('br'); - frag.appendText(i18nHelper.getMessage('120003')); - frag.createEl( - 'a', - { - text: i18nHelper.getMessage('120901'), - href: 'https://www.douban.com', - }, - (a) => { - a.setAttr('target', '_blank'); - } - ); - frag.createEl('br'); - frag.appendText(i18nHelper.getMessage('120004')); - frag.createEl('br'); - frag.appendText(i18nHelper.getMessage('120005')); - frag.createEl('br'); - frag.appendText(i18nHelper.getMessage('120006')); - frag.createEl('br'); - }) - ); - textField.inputEl.addClass("obsidian_douban_settings_textField"); - textField - .setPlaceholder(DEFAULT_SETTINGS.searchUrl) - .setValue(this.plugin.settings.searchUrl) - .onChange(async (value) => { - this.plugin.settings.searchUrl = value; - await this.plugin.saveSettings(); - }); - - }); - }); - - new Setting(containerEl).setName(i18nHelper.getMessage('120501')).then((setting) => { - setting.addMomentFormat((mf) => { - setting.descEl.appendChild( - createFragment((frag) => { - frag.appendText( - i18nHelper.getMessage('120503') - ); - frag.createEl('br'); - frag.appendText(i18nHelper.getMessage('120506') + ' '); - frag.createEl( - 'a', - { - text: i18nHelper.getMessage('120508'), - href: 'https://momentjs.com/docs/#/displaying/format/', - }, - (a) => { - a.setAttr('target', '_blank'); - } - ); - frag.createEl('br'); - frag.appendText(i18nHelper.getMessage('120507') + ': '); - mf.setSampleEl(frag.createEl('b', {cls: 'u-pop'})); - frag.createEl('br'); - }) - ); - mf.setPlaceholder(DEFAULT_SETTINGS.dateFormat); - mf.setValue(this.plugin.settings.dateFormat) - mf.onChange(async (value) => { - this.plugin.settings.dateFormat = value; - await this.plugin.saveSettings(); - }); - - }); - }); - - new Setting(containerEl).setName(i18nHelper.getMessage('120502')).then((setting) => { - setting.addMomentFormat((mf) => { - setting.descEl.appendChild( - createFragment((frag) => { - frag.appendText( - i18nHelper.getMessage('120504') - ); - frag.createEl('br'); - frag.appendText(i18nHelper.getMessage('120506') + ' '); - frag.createEl( - 'a', - { - text: i18nHelper.getMessage('120508'), - href: 'https://momentjs.com/docs/#/displaying/format/', - }, - (a) => { - a.setAttr('target', '_blank'); - } - ); - frag.createEl('br'); - frag.appendText(i18nHelper.getMessage('120507') + ': '); - mf.setSampleEl(frag.createEl('b', {cls: 'u-pop'})); - frag.createEl('br'); - }) - ); - mf.setPlaceholder(DEFAULT_SETTINGS.timeFormat); - mf.setValue(this.plugin.settings.timeFormat) - mf.onChange(async (value) => { - this.plugin.settings.timeFormat = value; - await this.plugin.saveSettings(); - }); - - }); - }); - - new Setting(containerEl) - .setName(i18nHelper.getMessage('121401')) - .setDesc(i18nHelper.getMessage('121402')) - .addToggle((toggleComponent) => { - toggleComponent - // .setTooltip(i18nHelper.getMessage('121403')) - .setValue(this.plugin.settings.statusBar) - .onChange(async (value) => { - this.plugin.settings.statusBar = value; - await this.plugin.saveSettings(); - }); - }); - } - - constructTemplateUI(containerEl: HTMLElement) { - containerEl.createEl('h3', { text: i18nHelper.getMessage('1203') }); - containerEl.createEl('p', { text: i18nHelper.getMessage('1204') }); - new Setting(containerEl).setDesc(i18nHelper.getMessage('1205')) - - new Setting(containerEl).then(createFileSelectionSetting({name: '120101', desc: '120102', placeholder: '121701', key: 'movieTemplateFile', manager: this})); - new Setting(containerEl).then(createFileSelectionSetting({name: '120201', desc: '120202', placeholder: '121701', key: 'bookTemplateFile', manager: this})); - new Setting(containerEl).then(createFileSelectionSetting({name: '120301', desc: '120302', placeholder: '121701', key: 'musicTemplateFile', manager: this})); - new Setting(containerEl).then(createFileSelectionSetting({name: '120401', desc: '120402', placeholder: '121701', key: 'noteTemplateFile', manager: this})); - new Setting(containerEl).then(createFileSelectionSetting({name: '121301', desc: '121302', placeholder: '121701', key: 'gameTemplateFile', manager: this})); - new Setting(containerEl).then(createFileSelectionSetting({name: '121801', desc: '121802', placeholder: '121701', key: 'teleplayTemplateFile', manager: this})); - } - - constructOutUI(containerEl: HTMLElement) { - containerEl.createEl('h3', { text: i18nHelper.getMessage('1220') }); - new Setting(containerEl).then(createFolderSelectionSetting({name: '121501', desc: '121502', placeholder: '121503', key: 'dataFilePath', manager: this})); - let outfolder = containerEl.createDiv({ cls: 'settings-item' }); - this.constructOutFolderUI(outfolder); - - new Setting(containerEl) - .setName(i18nHelper.getMessage('120601')) - .setDesc(i18nHelper.getMessage('120602')) - .addText((textField) => { - textField.setPlaceholder(DEFAULT_SETTINGS.arraySpilt) - .setValue(this.plugin.settings.arraySpilt) - .onChange(async (value) => { - this.plugin.settings.arraySpilt = value; - await this.plugin.saveSettings(); - }); - }); - - new Setting(containerEl).setName(i18nHelper.getMessage('121201')).then((setting) => { - setting.addDropdown((dropdwon) => { - setting.descEl.appendChild( - createFragment((frag) => { - frag.appendText(i18nHelper.getMessage('121202')); - frag.createEl('br'); - frag.appendText(i18nHelper.getMessage('121203')); - frag.createEl('br'); - frag.appendText(i18nHelper.getMessage('121204')); - frag.createEl('br'); - frag.appendText(i18nHelper.getMessage('121205')); - frag.createEl('br'); - }) - ); - // dropdwon.inputEl.addClass("settings_area"); - // dropdwon.inputEl.setAttr("rows", 10); - dropdwon.addOption(PersonNameMode.CH_NAME, PersonNameModeRecords.CH) - dropdwon.addOption(PersonNameMode.EN_NAME, PersonNameModeRecords.EN) - dropdwon.addOption(PersonNameMode.CH_EN_NAME, PersonNameModeRecords.CH_EN) - dropdwon.setValue(this.plugin.settings.personNameMode) - .onChange(async (value: string) => { - this.plugin.settings.personNameMode = value as PersonNameMode; - await this.plugin.saveSettings(); - }); - }); - }); - } - - constructTemplateVariablesUI(containerEl: HTMLElement) { - containerEl.createEl('h3', { text: i18nHelper.getMessage('1230') }); - containerEl.createEl('p', { text: i18nHelper.getMessage('122003') }); - - const basicVariablesTable = new DocumentFragment(); - basicVariablesTable.createDiv().innerHTML = ` -${i18nHelper.getMessage('122004')} -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
${i18nHelper.getMessage('300101')}${i18nHelper.getMessage('300102')}${i18nHelper.getMessage('300103')}${i18nHelper.getMessage('300104')}${i18nHelper.getMessage('300105')}${i18nHelper.getMessage('300106')}${i18nHelper.getMessage('300107')}${i18nHelper.getMessage('300108')}
id${i18nHelper.getMessage('310101')}${i18nHelper.getMessage('310201')}${i18nHelper.getMessage('310301')}${i18nHelper.getMessage('310401')}${i18nHelper.getMessage('310501')}${i18nHelper.getMessage('310601')}${i18nHelper.getMessage('310701')}
title${i18nHelper.getMessage('310102')}${i18nHelper.getMessage('310202')}${i18nHelper.getMessage('310302')}${i18nHelper.getMessage('310402')}${i18nHelper.getMessage('310502')}${i18nHelper.getMessage('310602')}${i18nHelper.getMessage('310702')}
type${i18nHelper.getMessage('310103')}${i18nHelper.getMessage('310203')}${i18nHelper.getMessage('310303')}${i18nHelper.getMessage('310403')}${i18nHelper.getMessage('310503')}${i18nHelper.getMessage('310603')}${i18nHelper.getMessage('310703')}
score${i18nHelper.getMessage('310104')}${i18nHelper.getMessage('310204')}${i18nHelper.getMessage('310304')}${i18nHelper.getMessage('310404')}${i18nHelper.getMessage('310504')}${i18nHelper.getMessage('310604')}${i18nHelper.getMessage('310704')}
image${i18nHelper.getMessage('310105')}${i18nHelper.getMessage('310205')}${i18nHelper.getMessage('310305')}${i18nHelper.getMessage('310405')}${i18nHelper.getMessage('310505')}${i18nHelper.getMessage('310605')}${i18nHelper.getMessage('310705')}
url${i18nHelper.getMessage('310106')}${i18nHelper.getMessage('310206')}${i18nHelper.getMessage('310306')}${i18nHelper.getMessage('310406')}${i18nHelper.getMessage('310506')}${i18nHelper.getMessage('310606')}${i18nHelper.getMessage('310706')}
desc${i18nHelper.getMessage('310107')}${i18nHelper.getMessage('310207')}${i18nHelper.getMessage('310307')}${i18nHelper.getMessage('310407')}${i18nHelper.getMessage('310507')}${i18nHelper.getMessage('310607')}${i18nHelper.getMessage('310707')}
publisher${i18nHelper.getMessage('310108')}${i18nHelper.getMessage('310208')}${i18nHelper.getMessage('310308')}${i18nHelper.getMessage('310408')}${i18nHelper.getMessage('310508')}${i18nHelper.getMessage('310608')}${i18nHelper.getMessage('310708')}
datePublished${i18nHelper.getMessage('310109')}${i18nHelper.getMessage('310209')}${i18nHelper.getMessage('310309')}${i18nHelper.getMessage('310409')}${i18nHelper.getMessage('310509')}${i18nHelper.getMessage('310609')}${i18nHelper.getMessage('310709')}
genre${i18nHelper.getMessage('310110')}${i18nHelper.getMessage('310210')}${i18nHelper.getMessage('310310')}${i18nHelper.getMessage('310410')}${i18nHelper.getMessage('310510')}${i18nHelper.getMessage('310610')}${i18nHelper.getMessage('310710')}
currentDate${i18nHelper.getMessage('330101')}${i18nHelper.getMessage('330101')}${i18nHelper.getMessage('330101')}${i18nHelper.getMessage('330101')}${i18nHelper.getMessage('330101')}${i18nHelper.getMessage('330101')}${i18nHelper.getMessage('330101')}
currentTime${i18nHelper.getMessage('330102')}${i18nHelper.getMessage('330102')}${i18nHelper.getMessage('330102')}${i18nHelper.getMessage('330102')}${i18nHelper.getMessage('330102')}${i18nHelper.getMessage('330102')}${i18nHelper.getMessage('330102')}
`; - - new Setting(containerEl) - .setName(i18nHelper.getMessage('122001')) - .setDesc(basicVariablesTable) - ; - - - const extraVariablesTable = new DocumentFragment(); - extraVariablesTable.createDiv().innerHTML = ` -${i18nHelper.getMessage('122004')} -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
${i18nHelper.getMessage('300101')}${i18nHelper.getMessage('300102')}${i18nHelper.getMessage('300103')}${i18nHelper.getMessage('300104')}${i18nHelper.getMessage('300105')}${i18nHelper.getMessage('300106')}${i18nHelper.getMessage('300107')}${i18nHelper.getMessage('300108')}
${i18nHelper.getMessage('320101')} - ${i18nHelper.getMessage('310111')} - ${i18nHelper.getMessage('310211')} - ${i18nHelper.getMessage('310311')} - ${i18nHelper.getMessage('310411')} - ${i18nHelper.getMessage('310511')} - ${i18nHelper.getMessage('310611')} - ${i18nHelper.getMessage('310711')} -
${i18nHelper.getMessage('320102')} - ${i18nHelper.getMessage('310112')} - ${i18nHelper.getMessage('310212')} - ${i18nHelper.getMessage('310312')} - ${i18nHelper.getMessage('310412')} - ${i18nHelper.getMessage('310512')} - ${i18nHelper.getMessage('310612')} - ${i18nHelper.getMessage('310712')} -
${i18nHelper.getMessage('320103')} - ${i18nHelper.getMessage('310113')} - ${i18nHelper.getMessage('310213')} - ${i18nHelper.getMessage('310313')} - ${i18nHelper.getMessage('310413')} - ${i18nHelper.getMessage('310513')} - ${i18nHelper.getMessage('310613')} - ${i18nHelper.getMessage('310713')} -
${i18nHelper.getMessage('320104')} - ${i18nHelper.getMessage('310114')} - ${i18nHelper.getMessage('310214')} - ${i18nHelper.getMessage('310314')} - ${i18nHelper.getMessage('310414')} - ${i18nHelper.getMessage('310514')} - ${i18nHelper.getMessage('310614')} - ${i18nHelper.getMessage('310714')} -
${i18nHelper.getMessage('320105')} - ${i18nHelper.getMessage('310115')} - ${i18nHelper.getMessage('310215')} - ${i18nHelper.getMessage('310315')} - ${i18nHelper.getMessage('310415')} - ${i18nHelper.getMessage('310515')} - ${i18nHelper.getMessage('310615')} - ${i18nHelper.getMessage('310715')} -
${i18nHelper.getMessage('320106')} - ${i18nHelper.getMessage('310116')} - ${i18nHelper.getMessage('310216')} - ${i18nHelper.getMessage('310316')} - ${i18nHelper.getMessage('310416')} - ${i18nHelper.getMessage('310516')} - ${i18nHelper.getMessage('310616')} - ${i18nHelper.getMessage('310716')} -
${i18nHelper.getMessage('320107')} - ${i18nHelper.getMessage('310117')} - ${i18nHelper.getMessage('310217')} - ${i18nHelper.getMessage('310317')} - ${i18nHelper.getMessage('310417')} - ${i18nHelper.getMessage('310517')} - ${i18nHelper.getMessage('310617')} - ${i18nHelper.getMessage('310717')} -
`; - - - new Setting(containerEl) - .setName(i18nHelper.getMessage('122002')) - .setDesc(extraVariablesTable); - } - - constructOutFolderUI(containerEl: HTMLElement) { - containerEl.empty(); - const dataFilePathSetting = new Setting(containerEl) - .setName(i18nHelper.getMessage('121601')) - .setDesc(i18nHelper.getMessage('121602')) - .addText((textField) => { - textField.setPlaceholder(DEFAULT_SETTINGS.dataFileNamePath) - .setValue(this.plugin.settings.dataFileNamePath) - .onChange(async (value) => { - this.plugin.settings.dataFileNamePath = value; - await this.plugin.saveSettings(); - }); - }); - dataFilePathSetting.addExtraButton((button) => { - button - .setIcon('reset') - .setTooltip(i18nHelper.getMessage('121902')) - .onClick(async () => { - this.plugin.settings.dataFileNamePath = DEFAULT_SETTINGS.dataFileNamePath; - await this.plugin.saveSettings(); - this.constructOutFolderUI(containerEl) - }); - }) - } } diff --git a/src/douban/setting/SettingHelper.ts b/src/douban/setting/TemplateSettingHelper.ts similarity index 62% rename from src/douban/setting/SettingHelper.ts rename to src/douban/setting/TemplateSettingHelper.ts index 56c2b2f..98a9b54 100644 --- a/src/douban/setting/SettingHelper.ts +++ b/src/douban/setting/TemplateSettingHelper.ts @@ -5,8 +5,22 @@ import {SearchComponent, Setting} from "obsidian"; import { log } from "src/utils/Logutil"; import {getDefaultTemplateContent} from "../../constant/DefaultTemplateContent"; import {FolderSuggest} from "@App/setting/model/FolderSuggest"; +import SettingsManager from "@App/setting/SettingsManager"; +export function constructTemplateUI(containerEl: HTMLElement, manager: SettingsManager) { + containerEl.createEl('h3', { text: i18nHelper.getMessage('1203') }); + containerEl.createEl('p', { text: i18nHelper.getMessage('1204') }); + new Setting(containerEl).setDesc(i18nHelper.getMessage('1205')) + + new Setting(containerEl).then(createFileSelectionSetting({name: '120101', desc: '120102', placeholder: '121701', key: 'movieTemplateFile', manager: manager})); + new Setting(containerEl).then(createFileSelectionSetting({name: '120201', desc: '120202', placeholder: '121701', key: 'bookTemplateFile', manager: manager})); + new Setting(containerEl).then(createFileSelectionSetting({name: '120301', desc: '120302', placeholder: '121701', key: 'musicTemplateFile', manager: manager})); + new Setting(containerEl).then(createFileSelectionSetting({name: '120401', desc: '120402', placeholder: '121701', key: 'noteTemplateFile', manager: manager})); + new Setting(containerEl).then(createFileSelectionSetting({name: '121301', desc: '121302', placeholder: '121701', key: 'gameTemplateFile', manager: manager})); + new Setting(containerEl).then(createFileSelectionSetting({name: '121801', desc: '121802', placeholder: '121701', key: 'teleplayTemplateFile', manager: manager})); +} + export function createFileSelectionSetting({name, desc, placeholder, key, manager }: CreateTemplateSelectParams) { return (setting: Setting) => { diff --git a/src/douban/setting/TemplateVariableSettingsHelper.ts b/src/douban/setting/TemplateVariableSettingsHelper.ts new file mode 100644 index 0000000..4160350 --- /dev/null +++ b/src/douban/setting/TemplateVariableSettingsHelper.ts @@ -0,0 +1,245 @@ +import SettingsManager from "@App/setting/SettingsManager"; +import {i18nHelper} from "../../lang/helper"; +import {Setting} from "obsidian"; + +export function constructTemplateVariablesUI(containerEl: HTMLElement, manager: SettingsManager) { + containerEl.createEl('h3', { text: i18nHelper.getMessage('1230') }); + containerEl.createEl('p', { text: i18nHelper.getMessage('122003') }); + + const basicVariablesTable = new DocumentFragment(); + basicVariablesTable.createDiv().innerHTML = ` +${i18nHelper.getMessage('122004')} +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
${i18nHelper.getMessage('300101')}${i18nHelper.getMessage('300102')}${i18nHelper.getMessage('300103')}${i18nHelper.getMessage('300104')}${i18nHelper.getMessage('300105')}${i18nHelper.getMessage('300106')}${i18nHelper.getMessage('300107')}${i18nHelper.getMessage('300108')}
id${i18nHelper.getMessage('310101')}${i18nHelper.getMessage('310201')}${i18nHelper.getMessage('310301')}${i18nHelper.getMessage('310401')}${i18nHelper.getMessage('310501')}${i18nHelper.getMessage('310601')}${i18nHelper.getMessage('310701')}
title${i18nHelper.getMessage('310102')}${i18nHelper.getMessage('310202')}${i18nHelper.getMessage('310302')}${i18nHelper.getMessage('310402')}${i18nHelper.getMessage('310502')}${i18nHelper.getMessage('310602')}${i18nHelper.getMessage('310702')}
type${i18nHelper.getMessage('310103')}${i18nHelper.getMessage('310203')}${i18nHelper.getMessage('310303')}${i18nHelper.getMessage('310403')}${i18nHelper.getMessage('310503')}${i18nHelper.getMessage('310603')}${i18nHelper.getMessage('310703')}
score${i18nHelper.getMessage('310104')}${i18nHelper.getMessage('310204')}${i18nHelper.getMessage('310304')}${i18nHelper.getMessage('310404')}${i18nHelper.getMessage('310504')}${i18nHelper.getMessage('310604')}${i18nHelper.getMessage('310704')}
image${i18nHelper.getMessage('310105')}${i18nHelper.getMessage('310205')}${i18nHelper.getMessage('310305')}${i18nHelper.getMessage('310405')}${i18nHelper.getMessage('310505')}${i18nHelper.getMessage('310605')}${i18nHelper.getMessage('310705')}
url${i18nHelper.getMessage('310106')}${i18nHelper.getMessage('310206')}${i18nHelper.getMessage('310306')}${i18nHelper.getMessage('310406')}${i18nHelper.getMessage('310506')}${i18nHelper.getMessage('310606')}${i18nHelper.getMessage('310706')}
desc${i18nHelper.getMessage('310107')}${i18nHelper.getMessage('310207')}${i18nHelper.getMessage('310307')}${i18nHelper.getMessage('310407')}${i18nHelper.getMessage('310507')}${i18nHelper.getMessage('310607')}${i18nHelper.getMessage('310707')}
publisher${i18nHelper.getMessage('310108')}${i18nHelper.getMessage('310208')}${i18nHelper.getMessage('310308')}${i18nHelper.getMessage('310408')}${i18nHelper.getMessage('310508')}${i18nHelper.getMessage('310608')}${i18nHelper.getMessage('310708')}
datePublished${i18nHelper.getMessage('310109')}${i18nHelper.getMessage('310209')}${i18nHelper.getMessage('310309')}${i18nHelper.getMessage('310409')}${i18nHelper.getMessage('310509')}${i18nHelper.getMessage('310609')}${i18nHelper.getMessage('310709')}
genre${i18nHelper.getMessage('310110')}${i18nHelper.getMessage('310210')}${i18nHelper.getMessage('310310')}${i18nHelper.getMessage('310410')}${i18nHelper.getMessage('310510')}${i18nHelper.getMessage('310610')}${i18nHelper.getMessage('310710')}
currentDate${i18nHelper.getMessage('330101')}${i18nHelper.getMessage('330101')}${i18nHelper.getMessage('330101')}${i18nHelper.getMessage('330101')}${i18nHelper.getMessage('330101')}${i18nHelper.getMessage('330101')}${i18nHelper.getMessage('330101')}
currentTime${i18nHelper.getMessage('330102')}${i18nHelper.getMessage('330102')}${i18nHelper.getMessage('330102')}${i18nHelper.getMessage('330102')}${i18nHelper.getMessage('330102')}${i18nHelper.getMessage('330102')}${i18nHelper.getMessage('330102')}
`; + + new Setting(containerEl) + .setName(i18nHelper.getMessage('122001')) + .setDesc(basicVariablesTable) + ; + + + const extraVariablesTable = new DocumentFragment(); + extraVariablesTable.createDiv().innerHTML = ` +${i18nHelper.getMessage('122004')} +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
${i18nHelper.getMessage('300101')}${i18nHelper.getMessage('300102')}${i18nHelper.getMessage('300103')}${i18nHelper.getMessage('300104')}${i18nHelper.getMessage('300105')}${i18nHelper.getMessage('300106')}${i18nHelper.getMessage('300107')}${i18nHelper.getMessage('300108')}
${i18nHelper.getMessage('320101')} + ${i18nHelper.getMessage('310111')} + ${i18nHelper.getMessage('310211')} + ${i18nHelper.getMessage('310311')} + ${i18nHelper.getMessage('310411')} + ${i18nHelper.getMessage('310511')} + ${i18nHelper.getMessage('310611')} + ${i18nHelper.getMessage('310711')} +
${i18nHelper.getMessage('320102')} + ${i18nHelper.getMessage('310112')} + ${i18nHelper.getMessage('310212')} + ${i18nHelper.getMessage('310312')} + ${i18nHelper.getMessage('310412')} + ${i18nHelper.getMessage('310512')} + ${i18nHelper.getMessage('310612')} + ${i18nHelper.getMessage('310712')} +
${i18nHelper.getMessage('320103')} + ${i18nHelper.getMessage('310113')} + ${i18nHelper.getMessage('310213')} + ${i18nHelper.getMessage('310313')} + ${i18nHelper.getMessage('310413')} + ${i18nHelper.getMessage('310513')} + ${i18nHelper.getMessage('310613')} + ${i18nHelper.getMessage('310713')} +
${i18nHelper.getMessage('320104')} + ${i18nHelper.getMessage('310114')} + ${i18nHelper.getMessage('310214')} + ${i18nHelper.getMessage('310314')} + ${i18nHelper.getMessage('310414')} + ${i18nHelper.getMessage('310514')} + ${i18nHelper.getMessage('310614')} + ${i18nHelper.getMessage('310714')} +
${i18nHelper.getMessage('320105')} + ${i18nHelper.getMessage('310115')} + ${i18nHelper.getMessage('310215')} + ${i18nHelper.getMessage('310315')} + ${i18nHelper.getMessage('310415')} + ${i18nHelper.getMessage('310515')} + ${i18nHelper.getMessage('310615')} + ${i18nHelper.getMessage('310715')} +
${i18nHelper.getMessage('320106')} + ${i18nHelper.getMessage('310116')} + ${i18nHelper.getMessage('310216')} + ${i18nHelper.getMessage('310316')} + ${i18nHelper.getMessage('310416')} + ${i18nHelper.getMessage('310516')} + ${i18nHelper.getMessage('310616')} + ${i18nHelper.getMessage('310716')} +
${i18nHelper.getMessage('320107')} + ${i18nHelper.getMessage('310117')} + ${i18nHelper.getMessage('310217')} + ${i18nHelper.getMessage('310317')} + ${i18nHelper.getMessage('310417')} + ${i18nHelper.getMessage('310517')} + ${i18nHelper.getMessage('310617')} + ${i18nHelper.getMessage('310717')} +
`; + + + new Setting(containerEl) + .setName(i18nHelper.getMessage('122002')) + .setDesc(extraVariablesTable); +} diff --git a/src/douban/setting/model/CustomProperty.ts b/src/douban/setting/model/CustomProperty.ts new file mode 100644 index 0000000..725a3d8 --- /dev/null +++ b/src/douban/setting/model/CustomProperty.ts @@ -0,0 +1,7 @@ +import {SupportType} from "../../../constant/Constsant"; + +export interface CustomProperty { + name: string; + value: string; + field: SupportType; +} diff --git a/src/douban/setting/model/DoubanPluginSetting.ts b/src/douban/setting/model/DoubanPluginSetting.ts index 2a07f85..c062e4a 100644 --- a/src/douban/setting/model/DoubanPluginSetting.ts +++ b/src/douban/setting/model/DoubanPluginSetting.ts @@ -1,3 +1,4 @@ +import {CustomProperty} from "@App/setting/model/CustomProperty"; export interface DoubanPluginSetting { movieTemplateFile: string, @@ -15,5 +16,6 @@ export interface DoubanPluginSetting { dataFilePath: string, dataFileNamePath: string, statusBar: boolean, + customProperties: CustomProperty[], } diff --git a/src/douban/setting/model/Suggest.ts b/src/douban/setting/model/Suggest.ts index df0f950..47af9a7 100644 --- a/src/douban/setting/model/Suggest.ts +++ b/src/douban/setting/model/Suggest.ts @@ -1,6 +1,6 @@ import { App, ISuggestOwner, Scope } from "obsidian"; -import { createPopper, Instance as PopperInstance } from "@popperjs/core"; +// Credits go to Liam's Periodic Notes Plugin: https://github.com/liamcain/obsidian-periodic-notes const wrapAround = (value: number, size: number): number => { return ((value % size) + size) % size; diff --git a/src/lang/locale/en.ts b/src/lang/locale/en.ts index 644dda2..c8e2f8b 100644 --- a/src/lang/locale/en.ts +++ b/src/lang/locale/en.ts @@ -28,7 +28,17 @@ export default { '1230': `Usable Variables`, '1204': `Set template file path. If keep empty, it will use the default template file to create file. All the usable variables at the end.👇`, '1205': `🧡Tip: You can click the 'Copy' button to copy default template content, then create and paste to your own template file. After that, back to select the file. `, - + '1240': `Custom Variable`, + '1241': `To use the custom variables, you need to wrap them in double curly brackets. For example, {{myType}} will be replaced with the your custom type value. `, + '1242': `Add custom variable, so that you can use it in the template file or file name. `, + '124101': `Add`, + '124108': `Add a new variable`, + '124102': `Name:`, + '124103': `Input custom variable name`, + '124104': `Value:`, + '124105': `Input custom variable value`, + '124106': `Active type`, + '124107': `Delete custom variable`, '120101': `Movie Template File`, '120102': `This template will be used when creating new notes for Movie from Obsidian-Douban.`, @@ -119,6 +129,7 @@ export default { '121902': `Reset to default value`, + //error '130101': `Fetch Data Error, You can go to Github add Issues`, '140101': `Not support for current type. You can add Issues at Github:Wanxp/obsidian-douban`, @@ -132,6 +143,10 @@ export default { '150101': `Choose an item...`, + + + + //content '200101': `. `, @@ -143,6 +158,10 @@ export default { '122003': `Basic Variables must has value, Extra Variables can be empty`, '122004': `To use the template variables, you need to wrap them in double curly brackets. For example, {{title}} will be replaced with the title of the note.`, + + + + '410101': `Unknown`, //参数 @@ -173,6 +192,7 @@ export default { '310115': `subTitle:副标题`, '310116': `totalPage:页数`, '310117': `binding:装帧`, + '310118': `producer:出品方`, //电影 '310201': `豆瓣ID`, @@ -305,4 +325,12 @@ export default { '330101': `今日日期`, '330102': `当前时间`, + + 'ALL': `all`, + 'MOVIE': `movie`, + 'BOOK': `book`, + 'MUSIC': `music`, + 'NOTE': `note`, + 'GAME': `game`, + 'TELEPLAY': `teleplay`, } diff --git a/src/lang/locale/zh-cn.ts b/src/lang/locale/zh-cn.ts index fbc1596..99399bb 100644 --- a/src/lang/locale/zh-cn.ts +++ b/src/lang/locale/zh-cn.ts @@ -30,6 +30,17 @@ export default { '1204': `配置对应类型的模板文件, 如果为空则使用默认的文件模板. 模板可使用的参数列举在最下面.👇 `, '1205': `🧡提示: 建议点击右侧'复制'默认模板按钮, 然后在新建的文件中粘贴修改模板, 最后回到此处选择对应模板. `, + '1240': `自定义属性`, + '1241': `自定义参数使用时请用'{{}}'包裹, 举例: 参数myType, 则使用时为{{myType}}. `, + '1242': `添加自定义参数, 参数可用于模板中或者文件名中. `, + '124101': `新增`, + '124108': `新增一个自定义参数`, + '124102': `参数名称:`, + '124103': `自定义参数名称`, + '124104': `参数值:`, + '124105': `自定义参值`, + '124106': `生效类型`, + '124107': `删除自定义参数`, '120101': `电影模板文件`, @@ -114,6 +125,9 @@ export default { '121601': `笔记名称`, '121602': `创建的笔记将会使用此名称作为模板, 支持所有'通用'的参数作为名称(如:{{type}}/{{title}}), 且支持路径, 比如: 'MyData/{{title}}'. 如果为空, 笔记将会使用默认名称. `, + '121701': `选择模板文件`, + + '121901': `复制'默认'模板内容`, '130101': `获取数据失败,您如有需要请至Github提交Issues`, @@ -135,28 +149,28 @@ export default { '200101': `。`, //book example - 'book': { - id: {desc: `豆瓣ID`, example: `25982198`}, - title: {desc: `书名`, example: `社会心理学(第11版,精装彩印)`}, - type: {desc: `类型`, example: `Book`}, - score: {desc: `评分`, example: `9.4`}, - image: {desc: `图片URL`, example: `https://img1.doubanio.com/view/subject/l/public/s28261247.jpg`}, - url: {desc: `豆瓣URL`, example: `https://book.douban.com/subject/25982198/`}, - desc: { - desc: `简述`, - example: `戴维·迈尔斯的《社会心理学》是美国700 多所大专院校社会心理学教学所采用的教材,自出版以来深受广大师生和社会心理学爱好者的喜爱,并被翻译成多种语言,有着广泛的影响力。本书译自第11 版。全书共分四...` - }, - publisher: {desc: `出版社`, example: `人民邮电出版社`}, - datePublished: {desc: `出版时间`, example: `2014-10-1`}, - genre: {desc: `类型`, example: `社会科学`}, - author: {desc: `作者`, example: `戴维·迈尔斯`}, - translator: {desc: `译者`, example: `侯玉波 / 乐国安 / 张志勇`}, - isbn: {desc: `ISBN`, example: `9787115369840`}, - originTitle: {desc: `原作名`, example: `Social Psychology (11th)`}, - subTitle: {desc: `副标题`, example: `社会心理学`}, - binding: {desc: `装帧`, example: `精装`}, - totalPages: {desc: `页数`, example: `707`}, - }, +// 'book': { +// id: {desc: `豆瓣ID`, example: `25982198`}, +// title: {desc: `书名`, example: `社会心理学(第11版,精装彩印)`}, +// type: {desc: `类型`, example: `Book`}, +// score: {desc: `评分`, example: `9.4`}, +// image: {desc: `图片URL`, example: `https://img1.doubanio.com/view/subject/l/public/s28261247.jpg`}, +// url: {desc: `豆瓣URL`, example: `https://book.douban.com/subject/25982198/`}, +// desc: { +// desc: `简述`, +// example: `戴维·迈尔斯的《社会心理学》是美国700 多所大专院校社会心理学教学所采用的教材,自出版以来深受广大师生和社会心理学爱好者的喜爱,并被翻译成多种语言,有着广泛的影响力。本书译自第11 版。全书共分四...` +// }, +// publisher: {desc: `出版社`, example: `人民邮电出版社`}, +// datePublished: {desc: `出版时间`, example: `2014-10-1`}, +// genre: {desc: `类型`, example: `社会科学`}, +// author: {desc: `作者`, example: `戴维·迈尔斯`}, +// translator: {desc: `译者`, example: `侯玉波 / 乐国安 / 张志勇`}, +// isbn: {desc: `ISBN`, example: `9787115369840`}, +// originTitle: {desc: `原作名`, example: `Social Psychology (11th)`}, +// subTitle: {desc: `副标题`, example: `社会心理学`}, +// binding: {desc: `装帧`, example: `精装`}, +// totalPages: {desc: `页数`, example: `707`}, +// }, '122001': `通用参数`, '122002': `扩展参数`, @@ -333,7 +347,13 @@ export default { - + 'ALL': `全部类型`, + 'MOVIE': `电影`, + 'BOOK': `书籍`, + 'MUSIC': `音乐`, + 'NOTE': `笔记`, + 'GAME': `游戏`, + 'TELEPLAY': `电视剧`, } diff --git a/src/utils/Logutil.ts b/src/utils/Logutil.ts index 71f45f9..93077e7 100644 --- a/src/utils/Logutil.ts +++ b/src/utils/Logutil.ts @@ -5,11 +5,13 @@ class Logger { public error(e: any): any { new Notice(e); + console.log(`Douban Plugin error: ${e}`); return e; } public warn(e: any): any { new Notice(e); + console.log(`Douban Plugin error: ${e}`); return e; } diff --git a/styles.css b/styles.css index 859f82c..d72425b 100644 --- a/styles.css +++ b/styles.css @@ -10,6 +10,22 @@ width: 100%; } +.obsidian_douban_settings_text { + margin-left: 5px; + margin-right: 5px; +} + +.obsidian_douban_settings_input { + margin-left: 5px; + margin-right: 5px; +} + +.obsidian_douban_settings_button { + margin: auto; + vertical-align: bottom; + +} + .obsidian_douban_search_input { margin-left: 5px; margin-right: 5px;