mirror of
https://github.com/Wanxp/obsidian-douban.git
synced 2026-04-04 16:48:44 +08:00
add custom variable
This commit is contained in:
parent
9507f7fdf2
commit
f8d453abb2
@ -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
|
||||
|
||||
|
||||
@ -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',
|
||||
}
|
||||
|
||||
/**
|
||||
* 名称模式选项
|
||||
*/
|
||||
|
||||
@ -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},
|
||||
],
|
||||
}
|
||||
|
||||
@ -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<DoubanPageBroadcastSubject> {
|
||||
@ -14,7 +14,7 @@ class DoubanPageBroadcatLoadHandler extends DoubanAbstractLoadHandler<DoubanPage
|
||||
super(doubanPlugin);
|
||||
}
|
||||
|
||||
getTemplateKey(context: HandleContext): TemplateKey {
|
||||
getSupportType(): SupportType {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
|
||||
import DoubanPlugin from "main";
|
||||
import DoubanSubject, {DoubanParameter} from '../model/DoubanSubject';
|
||||
import DoubanSubjectLoadHandler from "./DoubanSubjectLoadHandler";
|
||||
@ -7,11 +6,17 @@ import {i18nHelper} from 'src/lang/helper';
|
||||
import {log} from "src/utils/Logutil";
|
||||
import {CheerioAPI, load} from "cheerio";
|
||||
import YamlUtil from "../../../utils/YamlUtil";
|
||||
import {BasicConst, PersonNameMode, SearchHandleMode, TemplateKey, TemplateTextMode} from "../../../constant/Constsant";
|
||||
import {
|
||||
BasicConst,
|
||||
PersonNameMode,
|
||||
SearchHandleMode,
|
||||
SupportType,
|
||||
TemplateKey,
|
||||
TemplateTextMode
|
||||
} from "../../../constant/Constsant";
|
||||
import HandleContext from "@App/data/model/HandleContext";
|
||||
import HandleResult from "@App/data/model/HandleResult";
|
||||
import {DEFAULT_TEMPLATE_CONTENT, getDefaultTemplateContent} from "../../../constant/DefaultTemplateContent";
|
||||
import FileHandler from "../../../file/FileHandler";
|
||||
import {getDefaultTemplateContent} from "../../../constant/DefaultTemplateContent";
|
||||
import StringUtil from "../../../utils/StringUtil";
|
||||
import {DEFAULT_SETTINGS} from "../../../constant/DefaultSettings";
|
||||
|
||||
@ -31,7 +36,7 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
|
||||
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<T extends DoubanSubject>
|
||||
} 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<T extends DoubanSubject>
|
||||
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<T extends DoubanSubject>
|
||||
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<T extends DoubanSubject>
|
||||
}
|
||||
|
||||
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<T extends DoubanSubject>
|
||||
return this.parseText(resultContent, extract, context, textMode);
|
||||
}
|
||||
|
||||
private async getTemplate(context: HandleContext):Promise<string> {
|
||||
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<string> {
|
||||
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, '');
|
||||
let firstLinkpathDest: TFile = this.doubanPlugin.app.metadataCache.getFirstLinkpathDest(templatePath, '');
|
||||
if (!firstLinkpathDest) {
|
||||
return defaultContent;
|
||||
}else {
|
||||
} else {
|
||||
const val = await this.doubanPlugin.fileHandler.getFileContent(firstLinkpathDest.path);
|
||||
return val?val:defaultContent;
|
||||
return val ? val : defaultContent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<DoubanBookSubject> {
|
||||
|
||||
@ -14,8 +12,8 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<Dou
|
||||
super(doubanPlugin);
|
||||
}
|
||||
|
||||
getTemplateKey(context: HandleContext): TemplateKey {
|
||||
return TemplateKey.bookTemplateFile;
|
||||
getSupportType(): SupportType {
|
||||
return SupportType.BOOK;
|
||||
}
|
||||
|
||||
parseText(beforeContent: string, extract: DoubanBookSubject, context: HandleContext, textMode: TemplateTextMode): string {
|
||||
@ -31,7 +29,9 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<Dou
|
||||
.replaceAll(DoubanBookParameter.menu, extract.menu.join('\n'))
|
||||
.replaceAll(DoubanBookParameter.price, super.handleSpecialContent(extract.price, textMode))
|
||||
.replaceAll(DoubanBookParameter.series, super.handleSpecialContent(extract.series, textMode))
|
||||
.replaceAll(DoubanBookParameter.binding, super.handleSpecialContent(extract.binding, textMode));
|
||||
.replaceAll(DoubanBookParameter.binding, super.handleSpecialContent(extract.binding, textMode))
|
||||
.replaceAll(DoubanBookParameter.producer, super.handleSpecialContent(extract.producer, textMode))
|
||||
;
|
||||
}
|
||||
|
||||
support(extract: DoubanSubject): boolean {
|
||||
@ -69,7 +69,7 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<Dou
|
||||
html(info.parent).find("a").map((index, a) => {
|
||||
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<Dou
|
||||
url: url,
|
||||
genre: [],
|
||||
binding: valueMap.has('binding') ? valueMap.get('binding') : "",
|
||||
producer: valueMap.has('producer') ? valueMap.get('producer') : "",
|
||||
};
|
||||
return result;
|
||||
}
|
||||
@ -124,5 +125,6 @@ const BookKeyValueMap: Map<string, string> = new Map(
|
||||
['ISBN:', 'isbn'],
|
||||
['译者', 'translator'],
|
||||
['副标题:', 'subTitle'],
|
||||
['出品方:', 'producer'],
|
||||
]
|
||||
);
|
||||
|
||||
@ -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<DoubanGameSubject> {
|
||||
|
||||
@ -13,8 +13,8 @@ export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler<Dou
|
||||
super(doubanPlugin);
|
||||
}
|
||||
|
||||
getTemplateKey(context: HandleContext): TemplateKey {
|
||||
return TemplateKey.gameTemplateFile;
|
||||
getSupportType(): SupportType {
|
||||
return SupportType.GAME;
|
||||
}
|
||||
|
||||
parseText(beforeContent: string, extract: DoubanGameSubject, context: HandleContext): string {
|
||||
|
||||
@ -6,7 +6,7 @@ import DoubanSubject from '../model/DoubanSubject';
|
||||
import DoubanMovieSubject from '../model/DoubanMovieSubject';
|
||||
import StringUtil from "../../../utils/StringUtil";
|
||||
import HandleContext from "@App/data/model/HandleContext";
|
||||
import {PersonNameMode, TemplateKey} from "../../../constant/Constsant";
|
||||
import {PersonNameMode, SupportType, TemplateKey} from "../../../constant/Constsant";
|
||||
|
||||
export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler<DoubanMovieSubject> {
|
||||
|
||||
@ -14,8 +14,8 @@ export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler<Do
|
||||
super(doubanPlugin);
|
||||
}
|
||||
|
||||
getTemplateKey(context: HandleContext): TemplateKey {
|
||||
return TemplateKey.movieTemplateFile;
|
||||
getSupportType(): SupportType {
|
||||
return SupportType.MOVIE;
|
||||
}
|
||||
|
||||
parseText(beforeContent: string, extract: DoubanMovieSubject, context: HandleContext): string {
|
||||
|
||||
@ -4,7 +4,7 @@ import DoubanMusicSubject from '../model/DoubanMusicSubject';
|
||||
import DoubanPlugin from "main";
|
||||
import DoubanSubject from '../model/DoubanSubject';
|
||||
import HandleContext from "@App/data/model/HandleContext";
|
||||
import {TemplateKey} from "../../../constant/Constsant";
|
||||
import {SupportType, TemplateKey} from "../../../constant/Constsant";
|
||||
|
||||
export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler<DoubanMusicSubject> {
|
||||
|
||||
@ -12,8 +12,8 @@ export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler<Do
|
||||
super(doubanPlugin);
|
||||
}
|
||||
|
||||
getTemplateKey(context: HandleContext): TemplateKey {
|
||||
return TemplateKey.musicTemplateFile;
|
||||
getSupportType(): SupportType {
|
||||
return SupportType.MUSIC;
|
||||
}
|
||||
|
||||
parseText(beforeContent: string, extract: DoubanMusicSubject, context: HandleContext): string {
|
||||
|
||||
@ -5,7 +5,7 @@ import DoubanPlugin from "main";
|
||||
import DoubanSubject from '../model/DoubanSubject';
|
||||
import html2markdown from '@notable/html2markdown';
|
||||
import HandleContext from "@App/data/model/HandleContext";
|
||||
import {TemplateKey} from "../../../constant/Constsant";
|
||||
import {SupportType, TemplateKey} from "../../../constant/Constsant";
|
||||
|
||||
export default class DoubanNoteLoadHandler extends DoubanAbstractLoadHandler<DoubanNoteSubject> {
|
||||
|
||||
@ -13,8 +13,8 @@ export default class DoubanNoteLoadHandler extends DoubanAbstractLoadHandler<Dou
|
||||
super(doubanPlugin);
|
||||
}
|
||||
|
||||
getTemplateKey(context: HandleContext): TemplateKey {
|
||||
return TemplateKey.noteTemplateFile;
|
||||
getSupportType(): SupportType {
|
||||
return SupportType.NOTE;
|
||||
}
|
||||
|
||||
parseText(beforeContent: string, extract: DoubanNoteSubject, context: HandleContext): string {
|
||||
|
||||
@ -4,14 +4,14 @@ import DoubanSubject from "../model/DoubanSubject";
|
||||
import {i18nHelper} from "src/lang/helper";
|
||||
import {log} from "src/utils/Logutil";
|
||||
import HandleContext from "@App/data/model/HandleContext";
|
||||
import {TemplateKey} from "../../../constant/Constsant";
|
||||
import {SupportType, TemplateKey} from "../../../constant/Constsant";
|
||||
|
||||
/**
|
||||
* 默认的处理器
|
||||
*/
|
||||
export default class DoubanOtherLoadHandler extends DoubanAbstractLoadHandler<DoubanSubject> {
|
||||
getTemplateKey(context: HandleContext): TemplateKey {
|
||||
return TemplateKey.bookTemplateFile
|
||||
getSupportType(): SupportType.ALL {
|
||||
return SupportType.ALL;
|
||||
}
|
||||
|
||||
parseText(beforeContent: string, extract: DoubanSubject, context: HandleContext): string {
|
||||
|
||||
@ -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<DoubanT
|
||||
super(doubanPlugin);
|
||||
}
|
||||
|
||||
getTemplateKey(context: HandleContext): TemplateKey {
|
||||
return TemplateKey.teleplayTemplateFile;
|
||||
getSupportType(): SupportType {
|
||||
return SupportType.TELEPLAY;
|
||||
}
|
||||
|
||||
parseText(beforeContent: string, extract: DoubanTeleplaySubject, context: HandleContext): string {
|
||||
|
||||
@ -11,6 +11,7 @@ export default class DoubanBookSubject extends DoubanSubject {
|
||||
menu: string[];
|
||||
price: number;
|
||||
binding: string;
|
||||
producer: string;
|
||||
}
|
||||
|
||||
export const DoubanBookParameter = {
|
||||
@ -24,4 +25,5 @@ export const DoubanBookParameter = {
|
||||
menu: '{{menu}}',
|
||||
price: '{{price}}',
|
||||
binding: '{{binding}}',
|
||||
producer: '{{producer}}',
|
||||
}
|
||||
|
||||
129
src/douban/setting/BasicSettingsHelper.ts
Normal file
129
src/douban/setting/BasicSettingsHelper.ts
Normal file
@ -0,0 +1,129 @@
|
||||
import {i18nHelper} from "../../lang/helper";
|
||||
import {Setting} from "obsidian";
|
||||
import {DEFAULT_SETTINGS} from "../../constant/DefaultSettings";
|
||||
import SettingsManager from "@App/setting/SettingsManager";
|
||||
|
||||
export function constructBasicUI(containerEl: HTMLElement, manager: SettingsManager) {
|
||||
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(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();
|
||||
});
|
||||
});
|
||||
}
|
||||
95
src/douban/setting/CustomPropertySettingsHelper.ts
Normal file
95
src/douban/setting/CustomPropertySettingsHelper.ts
Normal file
@ -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);
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
78
src/douban/setting/OutputSettingsHelper.ts
Normal file
78
src/douban/setting/OutputSettingsHelper.ts
Normal file
@ -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)
|
||||
});
|
||||
})
|
||||
}
|
||||
@ -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')}
|
||||
<br>
|
||||
<br>
|
||||
<table border="1">
|
||||
<tr>
|
||||
<th>${i18nHelper.getMessage('300101')}</th>
|
||||
<th>${i18nHelper.getMessage('300102')}</th>
|
||||
<th>${i18nHelper.getMessage('300103')}</th>
|
||||
<th>${i18nHelper.getMessage('300104')}</th>
|
||||
<th>${i18nHelper.getMessage('300105')}</th>
|
||||
<th>${i18nHelper.getMessage('300106')}</th>
|
||||
<th>${i18nHelper.getMessage('300107')}</th>
|
||||
<th>${i18nHelper.getMessage('300108')}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>id</td>
|
||||
<td>${i18nHelper.getMessage('310101')}</td>
|
||||
<td>${i18nHelper.getMessage('310201')}</td>
|
||||
<td>${i18nHelper.getMessage('310301')}</td>
|
||||
<td>${i18nHelper.getMessage('310401')}</td>
|
||||
<td>${i18nHelper.getMessage('310501')}</td>
|
||||
<td>${i18nHelper.getMessage('310601')}</td>
|
||||
<td>${i18nHelper.getMessage('310701')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>title</td>
|
||||
<td>${i18nHelper.getMessage('310102')}</td>
|
||||
<td>${i18nHelper.getMessage('310202')}</td>
|
||||
<td>${i18nHelper.getMessage('310302')}</td>
|
||||
<td>${i18nHelper.getMessage('310402')}</td>
|
||||
<td>${i18nHelper.getMessage('310502')}</td>
|
||||
<td>${i18nHelper.getMessage('310602')}</td>
|
||||
<td>${i18nHelper.getMessage('310702')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>type</td>
|
||||
<td>${i18nHelper.getMessage('310103')}</td>
|
||||
<td>${i18nHelper.getMessage('310203')}</td>
|
||||
<td>${i18nHelper.getMessage('310303')}</td>
|
||||
<td>${i18nHelper.getMessage('310403')}</td>
|
||||
<td>${i18nHelper.getMessage('310503')}</td>
|
||||
<td>${i18nHelper.getMessage('310603')}</td>
|
||||
<td>${i18nHelper.getMessage('310703')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>score</td>
|
||||
<td>${i18nHelper.getMessage('310104')}</td>
|
||||
<td>${i18nHelper.getMessage('310204')}</td>
|
||||
<td>${i18nHelper.getMessage('310304')}</td>
|
||||
<td>${i18nHelper.getMessage('310404')}</td>
|
||||
<td>${i18nHelper.getMessage('310504')}</td>
|
||||
<td>${i18nHelper.getMessage('310604')}</td>
|
||||
<td>${i18nHelper.getMessage('310704')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>image</td>
|
||||
<td>${i18nHelper.getMessage('310105')}</td>
|
||||
<td>${i18nHelper.getMessage('310205')}</td>
|
||||
<td>${i18nHelper.getMessage('310305')}</td>
|
||||
<td>${i18nHelper.getMessage('310405')}</td>
|
||||
<td>${i18nHelper.getMessage('310505')}</td>
|
||||
<td>${i18nHelper.getMessage('310605')}</td>
|
||||
<td>${i18nHelper.getMessage('310705')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>url</td>
|
||||
<td>${i18nHelper.getMessage('310106')}</td>
|
||||
<td>${i18nHelper.getMessage('310206')}</td>
|
||||
<td>${i18nHelper.getMessage('310306')}</td>
|
||||
<td>${i18nHelper.getMessage('310406')}</td>
|
||||
<td>${i18nHelper.getMessage('310506')}</td>
|
||||
<td>${i18nHelper.getMessage('310606')}</td>
|
||||
<td>${i18nHelper.getMessage('310706')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>desc</td>
|
||||
<td>${i18nHelper.getMessage('310107')}</td>
|
||||
<td>${i18nHelper.getMessage('310207')}</td>
|
||||
<td>${i18nHelper.getMessage('310307')}</td>
|
||||
<td>${i18nHelper.getMessage('310407')}</td>
|
||||
<td>${i18nHelper.getMessage('310507')}</td>
|
||||
<td>${i18nHelper.getMessage('310607')}</td>
|
||||
<td>${i18nHelper.getMessage('310707')}</td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td>publisher</td>
|
||||
<td>${i18nHelper.getMessage('310108')}</td>
|
||||
<td>${i18nHelper.getMessage('310208')}</td>
|
||||
<td>${i18nHelper.getMessage('310308')}</td>
|
||||
<td>${i18nHelper.getMessage('310408')}</td>
|
||||
<td>${i18nHelper.getMessage('310508')}</td>
|
||||
<td>${i18nHelper.getMessage('310608')}</td>
|
||||
<td>${i18nHelper.getMessage('310708')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>datePublished</td>
|
||||
<td>${i18nHelper.getMessage('310109')}</td>
|
||||
<td>${i18nHelper.getMessage('310209')}</td>
|
||||
<td>${i18nHelper.getMessage('310309')}</td>
|
||||
<td>${i18nHelper.getMessage('310409')}</td>
|
||||
<td>${i18nHelper.getMessage('310509')}</td>
|
||||
<td>${i18nHelper.getMessage('310609')}</td>
|
||||
<td>${i18nHelper.getMessage('310709')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>genre</td>
|
||||
<td>${i18nHelper.getMessage('310110')}</td>
|
||||
<td>${i18nHelper.getMessage('310210')}</td>
|
||||
<td>${i18nHelper.getMessage('310310')}</td>
|
||||
<td>${i18nHelper.getMessage('310410')}</td>
|
||||
<td>${i18nHelper.getMessage('310510')}</td>
|
||||
<td>${i18nHelper.getMessage('310610')}</td>
|
||||
<td>${i18nHelper.getMessage('310710')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>currentDate</td>
|
||||
<td>${i18nHelper.getMessage('330101')}</td>
|
||||
<td>${i18nHelper.getMessage('330101')}</td>
|
||||
<td>${i18nHelper.getMessage('330101')}</td>
|
||||
<td>${i18nHelper.getMessage('330101')}</td>
|
||||
<td>${i18nHelper.getMessage('330101')}</td>
|
||||
<td>${i18nHelper.getMessage('330101')}</td>
|
||||
<td>${i18nHelper.getMessage('330101')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>currentTime</td>
|
||||
<td>${i18nHelper.getMessage('330102')}</td>
|
||||
<td>${i18nHelper.getMessage('330102')}</td>
|
||||
<td>${i18nHelper.getMessage('330102')}</td>
|
||||
<td>${i18nHelper.getMessage('330102')}</td>
|
||||
<td>${i18nHelper.getMessage('330102')}</td>
|
||||
<td>${i18nHelper.getMessage('330102')}</td>
|
||||
<td>${i18nHelper.getMessage('330102')}</td>
|
||||
</tr>
|
||||
</table>`;
|
||||
|
||||
new Setting(containerEl)
|
||||
.setName(i18nHelper.getMessage('122001'))
|
||||
.setDesc(basicVariablesTable)
|
||||
;
|
||||
|
||||
|
||||
const extraVariablesTable = new DocumentFragment();
|
||||
extraVariablesTable.createDiv().innerHTML = `
|
||||
${i18nHelper.getMessage('122004')}
|
||||
<br>
|
||||
<br>
|
||||
<table border="1">
|
||||
<tr>
|
||||
<th>${i18nHelper.getMessage('300101')}</th>
|
||||
<th>${i18nHelper.getMessage('300102')}</th>
|
||||
<th>${i18nHelper.getMessage('300103')}</th>
|
||||
<th>${i18nHelper.getMessage('300104')}</th>
|
||||
<th>${i18nHelper.getMessage('300105')}</th>
|
||||
<th>${i18nHelper.getMessage('300106')}</th>
|
||||
<th>${i18nHelper.getMessage('300107')}</th>
|
||||
<th>${i18nHelper.getMessage('300108')}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>${i18nHelper.getMessage('320101')}</th>
|
||||
<td>${i18nHelper.getMessage('310111')}</th>
|
||||
<td>${i18nHelper.getMessage('310211')}</th>
|
||||
<td>${i18nHelper.getMessage('310311')}</th>
|
||||
<td>${i18nHelper.getMessage('310411')}</th>
|
||||
<td>${i18nHelper.getMessage('310511')}</th>
|
||||
<td>${i18nHelper.getMessage('310611')}</th>
|
||||
<td>${i18nHelper.getMessage('310711')}</th>
|
||||
</tr>
|
||||
<td>${i18nHelper.getMessage('320102')}</th>
|
||||
<td>${i18nHelper.getMessage('310112')}</th>
|
||||
<td>${i18nHelper.getMessage('310212')}</th>
|
||||
<td>${i18nHelper.getMessage('310312')}</th>
|
||||
<td>${i18nHelper.getMessage('310412')}</th>
|
||||
<td>${i18nHelper.getMessage('310512')}</th>
|
||||
<td>${i18nHelper.getMessage('310612')}</th>
|
||||
<td>${i18nHelper.getMessage('310712')}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>${i18nHelper.getMessage('320103')}</th>
|
||||
<td>${i18nHelper.getMessage('310113')}</th>
|
||||
<td>${i18nHelper.getMessage('310213')}</th>
|
||||
<td>${i18nHelper.getMessage('310313')}</th>
|
||||
<td>${i18nHelper.getMessage('310413')}</th>
|
||||
<td>${i18nHelper.getMessage('310513')}</th>
|
||||
<td>${i18nHelper.getMessage('310613')}</th>
|
||||
<td>${i18nHelper.getMessage('310713')}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>${i18nHelper.getMessage('320104')}</th>
|
||||
<td>${i18nHelper.getMessage('310114')}</th>
|
||||
<td>${i18nHelper.getMessage('310214')}</th>
|
||||
<td>${i18nHelper.getMessage('310314')}</th>
|
||||
<td>${i18nHelper.getMessage('310414')}</th>
|
||||
<td>${i18nHelper.getMessage('310514')}</th>
|
||||
<td>${i18nHelper.getMessage('310614')}</th>
|
||||
<td>${i18nHelper.getMessage('310714')}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>${i18nHelper.getMessage('320105')}</th>
|
||||
<td>${i18nHelper.getMessage('310115')}</th>
|
||||
<td>${i18nHelper.getMessage('310215')}</th>
|
||||
<td>${i18nHelper.getMessage('310315')}</th>
|
||||
<td>${i18nHelper.getMessage('310415')}</th>
|
||||
<td>${i18nHelper.getMessage('310515')}</th>
|
||||
<td>${i18nHelper.getMessage('310615')}</th>
|
||||
<td>${i18nHelper.getMessage('310715')}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>${i18nHelper.getMessage('320106')}</th>
|
||||
<td>${i18nHelper.getMessage('310116')}</th>
|
||||
<td>${i18nHelper.getMessage('310216')}</th>
|
||||
<td>${i18nHelper.getMessage('310316')}</th>
|
||||
<td>${i18nHelper.getMessage('310416')}</th>
|
||||
<td>${i18nHelper.getMessage('310516')}</th>
|
||||
<td>${i18nHelper.getMessage('310616')}</th>
|
||||
<td>${i18nHelper.getMessage('310716')}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>${i18nHelper.getMessage('320107')}</th>
|
||||
<td>${i18nHelper.getMessage('310117')}</th>
|
||||
<td>${i18nHelper.getMessage('310217')}</th>
|
||||
<td>${i18nHelper.getMessage('310317')}</th>
|
||||
<td>${i18nHelper.getMessage('310417')}</th>
|
||||
<td>${i18nHelper.getMessage('310517')}</th>
|
||||
<td>${i18nHelper.getMessage('310617')}</th>
|
||||
<td>${i18nHelper.getMessage('310717')}</th>
|
||||
</tr>
|
||||
</table>`;
|
||||
|
||||
|
||||
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)
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@ -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) => {
|
||||
245
src/douban/setting/TemplateVariableSettingsHelper.ts
Normal file
245
src/douban/setting/TemplateVariableSettingsHelper.ts
Normal file
@ -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')}
|
||||
<br>
|
||||
<br>
|
||||
<table border="1">
|
||||
<tr>
|
||||
<th>${i18nHelper.getMessage('300101')}</th>
|
||||
<th>${i18nHelper.getMessage('300102')}</th>
|
||||
<th>${i18nHelper.getMessage('300103')}</th>
|
||||
<th>${i18nHelper.getMessage('300104')}</th>
|
||||
<th>${i18nHelper.getMessage('300105')}</th>
|
||||
<th>${i18nHelper.getMessage('300106')}</th>
|
||||
<th>${i18nHelper.getMessage('300107')}</th>
|
||||
<th>${i18nHelper.getMessage('300108')}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>id</td>
|
||||
<td>${i18nHelper.getMessage('310101')}</td>
|
||||
<td>${i18nHelper.getMessage('310201')}</td>
|
||||
<td>${i18nHelper.getMessage('310301')}</td>
|
||||
<td>${i18nHelper.getMessage('310401')}</td>
|
||||
<td>${i18nHelper.getMessage('310501')}</td>
|
||||
<td>${i18nHelper.getMessage('310601')}</td>
|
||||
<td>${i18nHelper.getMessage('310701')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>title</td>
|
||||
<td>${i18nHelper.getMessage('310102')}</td>
|
||||
<td>${i18nHelper.getMessage('310202')}</td>
|
||||
<td>${i18nHelper.getMessage('310302')}</td>
|
||||
<td>${i18nHelper.getMessage('310402')}</td>
|
||||
<td>${i18nHelper.getMessage('310502')}</td>
|
||||
<td>${i18nHelper.getMessage('310602')}</td>
|
||||
<td>${i18nHelper.getMessage('310702')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>type</td>
|
||||
<td>${i18nHelper.getMessage('310103')}</td>
|
||||
<td>${i18nHelper.getMessage('310203')}</td>
|
||||
<td>${i18nHelper.getMessage('310303')}</td>
|
||||
<td>${i18nHelper.getMessage('310403')}</td>
|
||||
<td>${i18nHelper.getMessage('310503')}</td>
|
||||
<td>${i18nHelper.getMessage('310603')}</td>
|
||||
<td>${i18nHelper.getMessage('310703')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>score</td>
|
||||
<td>${i18nHelper.getMessage('310104')}</td>
|
||||
<td>${i18nHelper.getMessage('310204')}</td>
|
||||
<td>${i18nHelper.getMessage('310304')}</td>
|
||||
<td>${i18nHelper.getMessage('310404')}</td>
|
||||
<td>${i18nHelper.getMessage('310504')}</td>
|
||||
<td>${i18nHelper.getMessage('310604')}</td>
|
||||
<td>${i18nHelper.getMessage('310704')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>image</td>
|
||||
<td>${i18nHelper.getMessage('310105')}</td>
|
||||
<td>${i18nHelper.getMessage('310205')}</td>
|
||||
<td>${i18nHelper.getMessage('310305')}</td>
|
||||
<td>${i18nHelper.getMessage('310405')}</td>
|
||||
<td>${i18nHelper.getMessage('310505')}</td>
|
||||
<td>${i18nHelper.getMessage('310605')}</td>
|
||||
<td>${i18nHelper.getMessage('310705')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>url</td>
|
||||
<td>${i18nHelper.getMessage('310106')}</td>
|
||||
<td>${i18nHelper.getMessage('310206')}</td>
|
||||
<td>${i18nHelper.getMessage('310306')}</td>
|
||||
<td>${i18nHelper.getMessage('310406')}</td>
|
||||
<td>${i18nHelper.getMessage('310506')}</td>
|
||||
<td>${i18nHelper.getMessage('310606')}</td>
|
||||
<td>${i18nHelper.getMessage('310706')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>desc</td>
|
||||
<td>${i18nHelper.getMessage('310107')}</td>
|
||||
<td>${i18nHelper.getMessage('310207')}</td>
|
||||
<td>${i18nHelper.getMessage('310307')}</td>
|
||||
<td>${i18nHelper.getMessage('310407')}</td>
|
||||
<td>${i18nHelper.getMessage('310507')}</td>
|
||||
<td>${i18nHelper.getMessage('310607')}</td>
|
||||
<td>${i18nHelper.getMessage('310707')}</td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td>publisher</td>
|
||||
<td>${i18nHelper.getMessage('310108')}</td>
|
||||
<td>${i18nHelper.getMessage('310208')}</td>
|
||||
<td>${i18nHelper.getMessage('310308')}</td>
|
||||
<td>${i18nHelper.getMessage('310408')}</td>
|
||||
<td>${i18nHelper.getMessage('310508')}</td>
|
||||
<td>${i18nHelper.getMessage('310608')}</td>
|
||||
<td>${i18nHelper.getMessage('310708')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>datePublished</td>
|
||||
<td>${i18nHelper.getMessage('310109')}</td>
|
||||
<td>${i18nHelper.getMessage('310209')}</td>
|
||||
<td>${i18nHelper.getMessage('310309')}</td>
|
||||
<td>${i18nHelper.getMessage('310409')}</td>
|
||||
<td>${i18nHelper.getMessage('310509')}</td>
|
||||
<td>${i18nHelper.getMessage('310609')}</td>
|
||||
<td>${i18nHelper.getMessage('310709')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>genre</td>
|
||||
<td>${i18nHelper.getMessage('310110')}</td>
|
||||
<td>${i18nHelper.getMessage('310210')}</td>
|
||||
<td>${i18nHelper.getMessage('310310')}</td>
|
||||
<td>${i18nHelper.getMessage('310410')}</td>
|
||||
<td>${i18nHelper.getMessage('310510')}</td>
|
||||
<td>${i18nHelper.getMessage('310610')}</td>
|
||||
<td>${i18nHelper.getMessage('310710')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>currentDate</td>
|
||||
<td>${i18nHelper.getMessage('330101')}</td>
|
||||
<td>${i18nHelper.getMessage('330101')}</td>
|
||||
<td>${i18nHelper.getMessage('330101')}</td>
|
||||
<td>${i18nHelper.getMessage('330101')}</td>
|
||||
<td>${i18nHelper.getMessage('330101')}</td>
|
||||
<td>${i18nHelper.getMessage('330101')}</td>
|
||||
<td>${i18nHelper.getMessage('330101')}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>currentTime</td>
|
||||
<td>${i18nHelper.getMessage('330102')}</td>
|
||||
<td>${i18nHelper.getMessage('330102')}</td>
|
||||
<td>${i18nHelper.getMessage('330102')}</td>
|
||||
<td>${i18nHelper.getMessage('330102')}</td>
|
||||
<td>${i18nHelper.getMessage('330102')}</td>
|
||||
<td>${i18nHelper.getMessage('330102')}</td>
|
||||
<td>${i18nHelper.getMessage('330102')}</td>
|
||||
</tr>
|
||||
</table>`;
|
||||
|
||||
new Setting(containerEl)
|
||||
.setName(i18nHelper.getMessage('122001'))
|
||||
.setDesc(basicVariablesTable)
|
||||
;
|
||||
|
||||
|
||||
const extraVariablesTable = new DocumentFragment();
|
||||
extraVariablesTable.createDiv().innerHTML = `
|
||||
${i18nHelper.getMessage('122004')}
|
||||
<br>
|
||||
<br>
|
||||
<table border="1">
|
||||
<tr>
|
||||
<th>${i18nHelper.getMessage('300101')}</th>
|
||||
<th>${i18nHelper.getMessage('300102')}</th>
|
||||
<th>${i18nHelper.getMessage('300103')}</th>
|
||||
<th>${i18nHelper.getMessage('300104')}</th>
|
||||
<th>${i18nHelper.getMessage('300105')}</th>
|
||||
<th>${i18nHelper.getMessage('300106')}</th>
|
||||
<th>${i18nHelper.getMessage('300107')}</th>
|
||||
<th>${i18nHelper.getMessage('300108')}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>${i18nHelper.getMessage('320101')}</th>
|
||||
<td>${i18nHelper.getMessage('310111')}</th>
|
||||
<td>${i18nHelper.getMessage('310211')}</th>
|
||||
<td>${i18nHelper.getMessage('310311')}</th>
|
||||
<td>${i18nHelper.getMessage('310411')}</th>
|
||||
<td>${i18nHelper.getMessage('310511')}</th>
|
||||
<td>${i18nHelper.getMessage('310611')}</th>
|
||||
<td>${i18nHelper.getMessage('310711')}</th>
|
||||
</tr>
|
||||
<td>${i18nHelper.getMessage('320102')}</th>
|
||||
<td>${i18nHelper.getMessage('310112')}</th>
|
||||
<td>${i18nHelper.getMessage('310212')}</th>
|
||||
<td>${i18nHelper.getMessage('310312')}</th>
|
||||
<td>${i18nHelper.getMessage('310412')}</th>
|
||||
<td>${i18nHelper.getMessage('310512')}</th>
|
||||
<td>${i18nHelper.getMessage('310612')}</th>
|
||||
<td>${i18nHelper.getMessage('310712')}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>${i18nHelper.getMessage('320103')}</th>
|
||||
<td>${i18nHelper.getMessage('310113')}</th>
|
||||
<td>${i18nHelper.getMessage('310213')}</th>
|
||||
<td>${i18nHelper.getMessage('310313')}</th>
|
||||
<td>${i18nHelper.getMessage('310413')}</th>
|
||||
<td>${i18nHelper.getMessage('310513')}</th>
|
||||
<td>${i18nHelper.getMessage('310613')}</th>
|
||||
<td>${i18nHelper.getMessage('310713')}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>${i18nHelper.getMessage('320104')}</th>
|
||||
<td>${i18nHelper.getMessage('310114')}</th>
|
||||
<td>${i18nHelper.getMessage('310214')}</th>
|
||||
<td>${i18nHelper.getMessage('310314')}</th>
|
||||
<td>${i18nHelper.getMessage('310414')}</th>
|
||||
<td>${i18nHelper.getMessage('310514')}</th>
|
||||
<td>${i18nHelper.getMessage('310614')}</th>
|
||||
<td>${i18nHelper.getMessage('310714')}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>${i18nHelper.getMessage('320105')}</th>
|
||||
<td>${i18nHelper.getMessage('310115')}</th>
|
||||
<td>${i18nHelper.getMessage('310215')}</th>
|
||||
<td>${i18nHelper.getMessage('310315')}</th>
|
||||
<td>${i18nHelper.getMessage('310415')}</th>
|
||||
<td>${i18nHelper.getMessage('310515')}</th>
|
||||
<td>${i18nHelper.getMessage('310615')}</th>
|
||||
<td>${i18nHelper.getMessage('310715')}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>${i18nHelper.getMessage('320106')}</th>
|
||||
<td>${i18nHelper.getMessage('310116')}</th>
|
||||
<td>${i18nHelper.getMessage('310216')}</th>
|
||||
<td>${i18nHelper.getMessage('310316')}</th>
|
||||
<td>${i18nHelper.getMessage('310416')}</th>
|
||||
<td>${i18nHelper.getMessage('310516')}</th>
|
||||
<td>${i18nHelper.getMessage('310616')}</th>
|
||||
<td>${i18nHelper.getMessage('310716')}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>${i18nHelper.getMessage('320107')}</th>
|
||||
<td>${i18nHelper.getMessage('310117')}</th>
|
||||
<td>${i18nHelper.getMessage('310217')}</th>
|
||||
<td>${i18nHelper.getMessage('310317')}</th>
|
||||
<td>${i18nHelper.getMessage('310417')}</th>
|
||||
<td>${i18nHelper.getMessage('310517')}</th>
|
||||
<td>${i18nHelper.getMessage('310617')}</th>
|
||||
<td>${i18nHelper.getMessage('310717')}</th>
|
||||
</tr>
|
||||
</table>`;
|
||||
|
||||
|
||||
new Setting(containerEl)
|
||||
.setName(i18nHelper.getMessage('122002'))
|
||||
.setDesc(extraVariablesTable);
|
||||
}
|
||||
7
src/douban/setting/model/CustomProperty.ts
Normal file
7
src/douban/setting/model/CustomProperty.ts
Normal file
@ -0,0 +1,7 @@
|
||||
import {SupportType} from "../../../constant/Constsant";
|
||||
|
||||
export interface CustomProperty {
|
||||
name: string;
|
||||
value: string;
|
||||
field: SupportType;
|
||||
}
|
||||
@ -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[],
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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`,
|
||||
}
|
||||
|
||||
@ -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': `电视剧`,
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
16
styles.css
16
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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user