diff --git a/README.md b/README.md
index fad16bd..68e3fbd 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,26 @@
# Obsidian Douban Plugin
-[![Version][version-shield]][version-url][![Stargazers][stars-shield]][stars-url][![Issues][issues-shield]][issues-url][![Downloads][downloads-shield]][downloads-url][![Contributors][contributors-shield]][contributors-url]
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Import Movies, Books, Music, Teleplay, Note, Game even Broadcast Data from Douban in [Obsidian](https://obsidian.md/)
在[Obsidian](https://obsidian.md/)使用并导入豆瓣中的电影/书籍/音乐/电视剧/日记/游戏甚至是广播, 包含评分/发布日期/演员表等信息
@@ -66,22 +85,3 @@ If you want some features or have any questions about this plugin, create issues
进入Obsidian插件中心重新加载当前插件
7. Enjoy your develop
享受开发吧
-
-
-
-[contributors-shield]: https://img.shields.io/github/contributors/Wanxp/obsidian-douban
-[contributors-url]: https://github.com/Wanxp/obsidian-douban/graphs/contributors
-[forks-shield]: https://img.shields.io/github/forks/Wanxp/obsidian-douban
-[forks-url]: https://github.com/Wanxp/obsidian-douban/network/members
-[stars-shield]: https://img.shields.io/github/stars/Wanxp/obsidian-douban
-[stars-url]: https://github.com/Wanxp/obsidian-douban/stargazers
-[issues-shield]: https://img.shields.io/github/issues/Wanxp/obsidian-douban
-[issues-url]: https://github.com/Wanxp/obsidian-douban/issues
-[license-shield]: https://img.shields.io/github/license/Wanxp/obsidian-douban
-[license-url]: https://github.com/Wanxp/obsidian-douban/blob/master/LICENSE.txt
-[product-screenshot]: images/screenshot.png
-[version-shield]: https://img.shields.io/github/package-json/v/Wanxp/obsidian-douban
-[version-url]: https://github.com/Wanxp/obsidian-douban/releases/latest
-
-[downloads-shield]: https://img.shields.io/github/downloads/Wanxp/obsidian-douban/total
-[downloads-url]: https://github.com/Wanxp/obsidian-douban
diff --git a/src/constant/Constsant.ts b/src/constant/Constsant.ts
index 5d3c97e..da946dd 100644
--- a/src/constant/Constsant.ts
+++ b/src/constant/Constsant.ts
@@ -28,7 +28,7 @@ export enum PersonNameMode {
/**
* 名称模式选项
*/
-export const PersonNameModeRecords: {[key in PersonNameMode]: string} = {
+export const PersonNameModeRecords: { [key in PersonNameMode]: string } = {
[PersonNameMode.CH_NAME]: i18nHelper.getMessage('121206'),
[PersonNameMode.EN_NAME]: i18nHelper.getMessage('121207'),
[PersonNameMode.CH_EN_NAME]: i18nHelper.getMessage('121208'),
diff --git a/src/douban/Douban.ts b/src/douban/Douban.ts
index bb222b6..71ccce0 100644
--- a/src/douban/Douban.ts
+++ b/src/douban/Douban.ts
@@ -1,31 +1,29 @@
import {PersonNameMode} from "../constant/Constsant";
export interface DoubanPluginSettings {
- movieTemplate:string,
- bookTemplate:string,
- musicTemplate:string,
- noteTemplate:string,
- gameTemplate:string,
- dateFormat:string,
- timeFormat:string,
- searchUrl:string,
- arraySpilt:string,
- searchHeaders?:string,
- personNameMode:PersonNameMode,
+ movieTemplate: string,
+ bookTemplate: string,
+ musicTemplate: string,
+ noteTemplate: string,
+ gameTemplate: string,
+ dateFormat: string,
+ timeFormat: string,
+ searchUrl: string,
+ arraySpilt: string,
+ searchHeaders?: string,
+ personNameMode: PersonNameMode,
}
-
-
export const doubanHeaders = {
- "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
- "Accept-Language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7",
- "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36",
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+ "Accept-Language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7",
+ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36",
};
-export const DEFAULT_SETTINGS:DoubanPluginSettings = {
- movieTemplate:
-`---
+export const DEFAULT_SETTINGS: DoubanPluginSettings = {
+ movieTemplate:
+ `---
doubanId: {{id}}
title: {{title}}
type: {{type}}
@@ -43,8 +41,8 @@ desc: {{desc}}

`,
- bookTemplate:
-`---
+ bookTemplate:
+ `---
doubanId: {{id}}
title: {{title}}
subTitle: {{subTitle}}
@@ -69,8 +67,8 @@ desc: {{desc}}
{{menu}}
`,
- musicTemplate:
-`---
+ musicTemplate:
+ `---
doubanId: {{id}}
title: {{title}}
type: {{type}}
@@ -90,8 +88,8 @@ desc: {{desc}}

`,
-noteTemplate:
-`---
+ noteTemplate:
+ `---
doubanId: {{id}}
title: {{title}}
type: {{type}}
@@ -106,7 +104,7 @@ desc: {{desc}}
{{content}}
`,
gameTemplate:
-`---
+ `---
doubanId: {{id}}
title: {{title}}
aliases: {{aliases}}
@@ -126,12 +124,12 @@ desc: {{desc}}
`,
// totalWord: {{totalWord}}
- searchUrl: 'https://www.douban.com/search?q=',
- searchHeaders: JSON.stringify(doubanHeaders),
- dateFormat: "yyyy-MM-DD",
+ searchUrl: 'https://www.douban.com/search?q=',
+ searchHeaders: JSON.stringify(doubanHeaders),
+ dateFormat: "yyyy-MM-DD",
timeFormat: "HH:mm:ss",
arraySpilt: ", ",
- personNameMode: PersonNameMode.CH_NAME
+ personNameMode: PersonNameMode.CH_NAME
}
diff --git a/src/douban/DoubanSettingTab.ts b/src/douban/DoubanSettingTab.ts
index 32f7111..1675685 100644
--- a/src/douban/DoubanSettingTab.ts
+++ b/src/douban/DoubanSettingTab.ts
@@ -1,212 +1,210 @@
-import { App, PluginSettingTab, Setting } from "obsidian";
-import { DEFAULT_SETTINGS } from "./Douban";
+import {App, PluginSettingTab, Setting} from "obsidian";
+import {DEFAULT_SETTINGS} from "./Douban";
import DoubanPlugin from "main";
-import { i18nHelper } from "src/lang/helper";
+import {i18nHelper} from "src/lang/helper";
import {PersonNameMode, PersonNameModeRecords} from "../constant/Constsant";
export class DoubanSettingTab extends PluginSettingTab {
plugin: DoubanPlugin;
-
+
constructor(app: App, plugin: DoubanPlugin) {
- super(app, plugin);
- this.plugin = plugin;
+ super(app, plugin);
+ this.plugin = plugin;
}
-
+
display(): void {
- let { containerEl } = this;
-
- containerEl.empty();
-
- containerEl.createEl("h2", { text: 'Obsidian Douban' });
+ let {containerEl} = this;
+
+ containerEl.empty();
+
+ containerEl.createEl("h2", {text: 'Obsidian Douban'});
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();
- });
+ .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('120101')).then((setting) => {
setting.addTextArea((textarea) => {
- setting.descEl.appendChild(
- createFragment((frag) => {
- frag.appendText(i18nHelper.getMessage('120102'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120103'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120104'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120105'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120106'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120107'));
- frag.createEl('br');
- })
- );
- textarea.inputEl.addClass("obsidian_douban_settings_area");
- textarea.inputEl.setAttr("rows", 20);
- textarea.setPlaceholder(DEFAULT_SETTINGS.movieTemplate)
- .setValue(this.plugin.settings.movieTemplate)
- .onChange(async (value) => {
- this.plugin.settings.movieTemplate = value;
- await this.plugin.saveSettings();
- });
+ setting.descEl.appendChild(
+ createFragment((frag) => {
+ frag.appendText(i18nHelper.getMessage('120102'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120103'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120104'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120105'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120106'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120107'));
+ frag.createEl('br');
+ })
+ );
+ textarea.inputEl.addClass("obsidian_douban_settings_area");
+ textarea.inputEl.setAttr("rows", 20);
+ textarea.setPlaceholder(DEFAULT_SETTINGS.movieTemplate)
+ .setValue(this.plugin.settings.movieTemplate)
+ .onChange(async (value) => {
+ this.plugin.settings.movieTemplate = value;
+ await this.plugin.saveSettings();
+ });
});
- });
+ });
- // new Setting(containerEl)
- // .setName(i18nHelper.getMessage('120101') + 111)
- // .then((setting) => {
- // setting.addTextArea((textarea) => {
- // setting.descEl.appendChild(
- // createEl('table', 'table', (table) => {
- // table.createEl('thead', 'thread', (thead) => {
- // thead.createEl('tr', 'tr',(tr) => {
- // tr.createEl('th', { text: i18nHelper.getMessage('120108') });
- // tr.createEl('th', { text: i18nHelper.getMessage('120109') });
- // tr.createEl('th', { text: i18nHelper.getMessage('120110') });
- // });
- // });
- // table.createEl('tbody', 'tbody', (tbody) => {
- // personNameModeRecords.forEach((record) => {
- // tbody.createEl('tr', (tr) => {
- // tr.createEl('td', { text: record.name });
- // tr.createEl('td', { text: record.key });
- // tr.createEl('td', { text: record.desc });
- // });
- // });
- // });
- // }
- //
- // );
- // }));
+ // new Setting(containerEl)
+ // .setName(i18nHelper.getMessage('120101') + 111)
+ // .then((setting) => {
+ // setting.addTextArea((textarea) => {
+ // setting.descEl.appendChild(
+ // createEl('table', 'table', (table) => {
+ // table.createEl('thead', 'thread', (thead) => {
+ // thead.createEl('tr', 'tr',(tr) => {
+ // tr.createEl('th', { text: i18nHelper.getMessage('120108') });
+ // tr.createEl('th', { text: i18nHelper.getMessage('120109') });
+ // tr.createEl('th', { text: i18nHelper.getMessage('120110') });
+ // });
+ // });
+ // table.createEl('tbody', 'tbody', (tbody) => {
+ // personNameModeRecords.forEach((record) => {
+ // tbody.createEl('tr', (tr) => {
+ // tr.createEl('td', { text: record.name });
+ // tr.createEl('td', { text: record.key });
+ // tr.createEl('td', { text: record.desc });
+ // });
+ // });
+ // });
+ // }
+ //
+ // );
+ // }));
-
-
- new Setting(containerEl).setName(i18nHelper.getMessage('120201')).then((setting) => {
+ new Setting(containerEl).setName(i18nHelper.getMessage('120201')).then((setting) => {
setting.addTextArea((textarea) => {
- setting.descEl.appendChild(
- createFragment((frag) => {
- frag.appendText(i18nHelper.getMessage('120202'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120203'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120204'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120205'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120206'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120207'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120208'));
- frag.createEl('br');
- })
- );
- textarea.inputEl.addClass("obsidian_douban_settings_area");
- textarea.inputEl.setAttr("rows", 20);
- textarea.setPlaceholder(DEFAULT_SETTINGS.bookTemplate)
- .setValue(this.plugin.settings.bookTemplate)
- .onChange(async (value) => {
- this.plugin.settings.bookTemplate = value;
- await this.plugin.saveSettings();
- });
+ setting.descEl.appendChild(
+ createFragment((frag) => {
+ frag.appendText(i18nHelper.getMessage('120202'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120203'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120204'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120205'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120206'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120207'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120208'));
+ frag.createEl('br');
+ })
+ );
+ textarea.inputEl.addClass("obsidian_douban_settings_area");
+ textarea.inputEl.setAttr("rows", 20);
+ textarea.setPlaceholder(DEFAULT_SETTINGS.bookTemplate)
+ .setValue(this.plugin.settings.bookTemplate)
+ .onChange(async (value) => {
+ this.plugin.settings.bookTemplate = value;
+ await this.plugin.saveSettings();
+ });
});
- });
+ });
- new Setting(containerEl).setName(i18nHelper.getMessage('120301')).then((setting) => {
+ new Setting(containerEl).setName(i18nHelper.getMessage('120301')).then((setting) => {
setting.addTextArea((textarea) => {
- setting.descEl.appendChild(
- createFragment((frag) => {
- frag.appendText(i18nHelper.getMessage('120302'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120303'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120304'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120305'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120306'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120307'));
- frag.createEl('br');
- })
- );
- textarea.inputEl.addClass("obsidian_douban_settings_area");
- textarea.inputEl.setAttr("rows", 20);
- textarea.setPlaceholder(DEFAULT_SETTINGS.musicTemplate)
- .setValue(this.plugin.settings.musicTemplate)
- .onChange(async (value) => {
- this.plugin.settings.musicTemplate = value;
- await this.plugin.saveSettings();
- });
+ setting.descEl.appendChild(
+ createFragment((frag) => {
+ frag.appendText(i18nHelper.getMessage('120302'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120303'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120304'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120305'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120306'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120307'));
+ frag.createEl('br');
+ })
+ );
+ textarea.inputEl.addClass("obsidian_douban_settings_area");
+ textarea.inputEl.setAttr("rows", 20);
+ textarea.setPlaceholder(DEFAULT_SETTINGS.musicTemplate)
+ .setValue(this.plugin.settings.musicTemplate)
+ .onChange(async (value) => {
+ this.plugin.settings.musicTemplate = value;
+ await this.plugin.saveSettings();
+ });
});
- });
+ });
- new Setting(containerEl).setName(i18nHelper.getMessage("120401")).then((setting) => {
+ new Setting(containerEl).setName(i18nHelper.getMessage("120401")).then((setting) => {
setting.addTextArea((textarea) => {
- setting.descEl.appendChild(
- createFragment((frag) => {
- frag.appendText(i18nHelper.getMessage('120402'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120403'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120404'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120405'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120406'));
- frag.createEl('br');
- frag.appendText(i18nHelper.getMessage('120407'));
- frag.createEl('br');
+ setting.descEl.appendChild(
+ createFragment((frag) => {
+ frag.appendText(i18nHelper.getMessage('120402'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120403'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120404'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120405'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120406'));
+ frag.createEl('br');
+ frag.appendText(i18nHelper.getMessage('120407'));
+ frag.createEl('br');
- })
- );
- textarea.inputEl.addClass("obsidian_douban_settings_area");
- textarea.inputEl.setAttr("rows", 20);
- textarea.setPlaceholder(DEFAULT_SETTINGS.noteTemplate)
- .setValue(this.plugin.settings.noteTemplate)
- .onChange(async (value) => {
- this.plugin.settings.noteTemplate = value;
- await this.plugin.saveSettings();
- });
+ })
+ );
+ textarea.inputEl.addClass("obsidian_douban_settings_area");
+ textarea.inputEl.setAttr("rows", 20);
+ textarea.setPlaceholder(DEFAULT_SETTINGS.noteTemplate)
+ .setValue(this.plugin.settings.noteTemplate)
+ .onChange(async (value) => {
+ this.plugin.settings.noteTemplate = value;
+ await this.plugin.saveSettings();
+ });
});
- });
+ });
new Setting(containerEl).setName(i18nHelper.getMessage('121301')).then((setting) => {
setting.addTextArea((textarea) => {
@@ -235,118 +233,116 @@ export class DoubanSettingTab extends PluginSettingTab {
});
})
- new Setting(containerEl).setName(i18nHelper.getMessage('121201')).then((setting) => {
+ 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();
- });
+ 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();
+ });
});
- });
-
-
+ });
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();
- });
+ 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('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('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('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();
+ });
+ });
+
}
- }
+}
diff --git a/src/douban/ResponseHandle.ts b/src/douban/ResponseHandle.ts
index cbef1d2..5963d3c 100644
--- a/src/douban/ResponseHandle.ts
+++ b/src/douban/ResponseHandle.ts
@@ -1,13 +1,13 @@
-import { Notice } from "obsidian";
-
-export const ensureStatusCode = (expected:any) => {
- if (!Array.isArray(expected))
- expected = [expected];
- return (res:any) => {
- const { statusCode } = res;
- if(!expected.includes(statusCode)) {
- new Notice(`Request Douban failed, Status code must be "${expected}" but actually "${statusCode}"`)
- }
- return res;
- };
- };
\ No newline at end of file
+import {Notice} from "obsidian";
+
+export const ensureStatusCode = (expected: any) => {
+ if (!Array.isArray(expected))
+ expected = [expected];
+ return (res: any) => {
+ const {statusCode} = res;
+ if (!expected.includes(statusCode)) {
+ new Notice(`Request Douban failed, Status code must be "${expected}" but actually "${statusCode}"`)
+ }
+ return res;
+ };
+};
diff --git a/src/douban/broadcast/handler/DoubanBroadcastAbstractHandler.ts b/src/douban/broadcast/handler/DoubanBroadcastAbstractHandler.ts
index be5dc3e..709f7ee 100644
--- a/src/douban/broadcast/handler/DoubanBroadcastAbstractHandler.ts
+++ b/src/douban/broadcast/handler/DoubanBroadcastAbstractHandler.ts
@@ -1,12 +1,12 @@
-import { CheerioAPI } from "cheerio";
-import DoubanBroadcastSubject from "../model/DoubanBroadcastSubject";
-
-export abstract class DoubanBroadcastAbstractHandler {
-
- abstract support(t:string):boolean;
-
- abstract transform(data:Element, source:CheerioAPI):T;
-
-}
-
-
+import {CheerioAPI} from "cheerio";
+import DoubanBroadcastSubject from "../model/DoubanBroadcastSubject";
+
+export abstract class DoubanBroadcastAbstractHandler {
+
+ abstract support(t: string): boolean;
+
+ abstract transform(data: Element, source: CheerioAPI): T;
+
+}
+
+
diff --git a/src/douban/broadcast/handler/DoubanBroadcastMovieHandler.ts b/src/douban/broadcast/handler/DoubanBroadcastMovieHandler.ts
index e218894..8634dc5 100644
--- a/src/douban/broadcast/handler/DoubanBroadcastMovieHandler.ts
+++ b/src/douban/broadcast/handler/DoubanBroadcastMovieHandler.ts
@@ -1,15 +1,16 @@
-import { CheerioAPI } from "cheerio";
-import { DoubanBroadcastAbstractHandler } from "./DoubanBroadcastAbstractHandler";
+import {CheerioAPI} from "cheerio";
+import {DoubanBroadcastAbstractHandler} from "./DoubanBroadcastAbstractHandler";
import DoubanBroadcastMovieSubject from "../model/DoubanBroadcastMoveSubject";
//TODO will support in future version
-export class DoubanBroadcastMovieHandler extends DoubanBroadcastAbstractHandler{
- support(t: string): boolean {
- throw new Error("Method not implemented.");
- }
- transform(data: Element, source:CheerioAPI): DoubanBroadcastMovieSubject {
- throw new Error("Method not implemented.");
- }
-
+export class DoubanBroadcastMovieHandler extends DoubanBroadcastAbstractHandler {
+ support(t: string): boolean {
+ throw new Error("Method not implemented.");
+ }
+
+ transform(data: Element, source: CheerioAPI): DoubanBroadcastMovieSubject {
+ throw new Error("Method not implemented.");
+ }
+
}
diff --git a/src/douban/broadcast/handler/DoubanPageBroadcastTransformer.ts b/src/douban/broadcast/handler/DoubanPageBroadcastTransformer.ts
index a43914e..07c423c 100644
--- a/src/douban/broadcast/handler/DoubanPageBroadcastTransformer.ts
+++ b/src/douban/broadcast/handler/DoubanPageBroadcastTransformer.ts
@@ -1,32 +1,32 @@
-import { CheerioAPI } from "cheerio";
-import { DoubanBroadcastAbstractHandler } from "./DoubanBroadcastAbstractHandler";
-import { DoubanBroadcastMovieHandler } from "./DoubanBroadcastMovieHandler";
+import {CheerioAPI} from "cheerio";
+import {DoubanBroadcastAbstractHandler} from "./DoubanBroadcastAbstractHandler";
+import {DoubanBroadcastMovieHandler} from "./DoubanBroadcastMovieHandler";
import DoubanBroadcastSubject from "../model/DoubanBroadcastSubject";
import DoubanPageBroadcastSubject from "../model/DoubanPageBroadcastSubject";
//TODO will support in future version
export class DoubanPageBroadcastTransformer {
-
- private handlers:DoubanBroadcastAbstractHandler[];
-
-
- constructor() {
- this.handlers = [
- new DoubanBroadcastMovieHandler(),
- ]
- }
+ private handlers: DoubanBroadcastAbstractHandler[];
- public transform(data: CheerioAPI):DoubanPageBroadcastSubject {
- let doubanBroadcastSubjects:DoubanBroadcastSubject[] = data('.new-status .status-wrapper')
- .get()
- .map(i => this.transformElement(i, data));
- return new DoubanPageBroadcastSubject ();
- }
- public transformElement(element:any, source:CheerioAPI):DoubanBroadcastSubject {
- let targetType:string = element.innerHTML;
- return this.handlers.filter(h => h.support(targetType))[0].transform(element, source);
- }
+ constructor() {
+ this.handlers = [
+ new DoubanBroadcastMovieHandler(),
+ ]
+
+ }
+
+ public transform(data: CheerioAPI): DoubanPageBroadcastSubject {
+ let doubanBroadcastSubjects: DoubanBroadcastSubject[] = data('.new-status .status-wrapper')
+ .get()
+ .map(i => this.transformElement(i, data));
+ return new DoubanPageBroadcastSubject();
+ }
+
+ public transformElement(element: any, source: CheerioAPI): DoubanBroadcastSubject {
+ let targetType: string = element.innerHTML;
+ return this.handlers.filter(h => h.support(targetType))[0].transform(element, source);
+ }
}
diff --git a/src/douban/broadcast/handler/DoubanPageBroadcatLoadHandler.ts b/src/douban/broadcast/handler/DoubanPageBroadcatLoadHandler.ts
index 3ae767a..5c6b44d 100644
--- a/src/douban/broadcast/handler/DoubanPageBroadcatLoadHandler.ts
+++ b/src/douban/broadcast/handler/DoubanPageBroadcatLoadHandler.ts
@@ -1,22 +1,26 @@
-import { CheerioAPI } from 'cheerio';
+import {CheerioAPI} from 'cheerio';
import DoubanAbstractLoadHandler from 'src/douban/data/handler/DoubanAbstractLoadHandler';
import DoubanNoteSubject from '../model/DoubanPageBroadcastSubject';
import DoubanPageBroadcastSubject from '../model/DoubanPageBroadcastSubject';
import DoubanPlugin from "main";
-import { DoubanPluginSettings } from "src/douban/Douban";
+import {DoubanPluginSettings} from "src/douban/Douban";
import DoubanSubject from 'src/douban/data/model/DoubanSubject';
//TODO will support in future version
export default class DoubanPageBroadcatLoadHandler extends DoubanAbstractLoadHandler {
+ constructor(doubanPlugin: DoubanPlugin) {
+ super(doubanPlugin);
+ }
+
getTemplate(settings: DoubanPluginSettings): string {
return settings.bookTemplate;
}
- parseText(beforeContent:string, extract: DoubanNoteSubject, settings:DoubanPluginSettings): string {
+ parseText(beforeContent: string, extract: DoubanNoteSubject, settings: DoubanPluginSettings): string {
return settings.bookTemplate ? null : "";
- // settings.noteTemplate
- // .replaceAll("{{id}}", extract.id)
+ // settings.noteTemplate
+ // .replaceAll("{{id}}", extract.id)
// .replaceAll("{{type}}", extract.type ? extract.type : "")
// .replaceAll("{{title}}", extract.title ? extract.title : "")
// .replaceAll("{{desc}}", extract.desc ? extract.desc : "")
@@ -26,54 +30,47 @@ export default class DoubanPageBroadcatLoadHandler extends DoubanAbstractLoadHan
// .replaceAll("{{content}}", extract.content ? extract.content : "")
// .replaceAll("{{url}}", extract.url ? extract.url : "")
// .replaceAll("{{authorUrl}}", extract.authorUrl ? extract.authorUrl : "")
- // .replaceAll("{{author}}", extract.author ? extract.author : "")
- }
- support(extract: DoubanSubject): boolean {
- return extract && extract.type && (extract.type.contains("广播") || extract.type.contains("Broadcast"));
- }
+ // .replaceAll("{{author}}", extract.author ? extract.author : "")
+ }
+ support(extract: DoubanSubject): boolean {
+ return extract && extract.type && (extract.type.contains("广播") || extract.type.contains("Broadcast"));
+ }
+ parseSubjectFromHtml(html: CheerioAPI): DoubanPageBroadcastSubject {
+ // return html('.new-status .status-wrapper')
+ // .get()
+ // .map(i -> {
+ // let div = html(i);
+ // div.find('')
+ // });
-
+ let title = html(html("head > meta[property= 'og:title']").get(0)).attr("content");
+ let desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content");
+ let url = html(html("head > meta[property= 'og:url']").get(0)).attr("content");
+ let image = html(html("head > meta[property= 'og:image']").get(0)).attr("content");
+ let type = html(html("head > meta[property= 'og:type']").get(0)).attr("content");
+ let authorA = html(html("a.note-author").get(0));
+ let timePublished = html(html(".pub-date").get(0)).text();
+ let content = html(html(".note").get(1));
+ let idPattern = /(\d){5,10}/g;
+ let id = idPattern.exec(url);
- constructor(doubanPlugin:DoubanPlugin) {
- super(doubanPlugin);
- }
-
- parseSubjectFromHtml(html: CheerioAPI): DoubanPageBroadcastSubject {
- // return html('.new-status .status-wrapper')
- // .get()
- // .map(i -> {
- // let div = html(i);
- // div.find('')
- // });
-
- let title = html(html("head > meta[property= 'og:title']").get(0)).attr("content");
- let desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content");
- let url = html(html("head > meta[property= 'og:url']").get(0)).attr("content");
- let image = html(html("head > meta[property= 'og:image']").get(0)).attr("content");
- let type = html(html("head > meta[property= 'og:type']").get(0)).attr("content");
- let authorA = html(html("a.note-author").get(0));
- let timePublished = html(html(".pub-date").get(0)).text();
- let content = html(html(".note").get(1));
- let idPattern = /(\d){5,10}/g;
- let id = idPattern.exec(url);
-
- // const result:DoubanNoteSubject = {
- // image: image,
- // timePublished: timePublished ? new Date(timePublished) : null,
- // content: content ? html2markdown(content.toString()): "",
- // id: id ? id[0] : "",
- // type: "Article",
- // title: title,
- // desc: desc,
- // url: url,
- // author: authorA ? authorA.text() : null,
- // authorUrl: authorA ? authorA.attr("href") : null,
- // };
- // return result;
- return null;
-}
+ // const result:DoubanNoteSubject = {
+ // image: image,
+ // timePublished: timePublished ? new Date(timePublished) : null,
+ // content: content ? html2markdown(content.toString()): "",
+ // id: id ? id[0] : "",
+ // type: "Article",
+ // title: title,
+ // desc: desc,
+ // url: url,
+ // author: authorA ? authorA.text() : null,
+ // authorUrl: authorA ? authorA.attr("href") : null,
+ // };
+ // return result;
+ return null;
+ }
}
diff --git a/src/douban/broadcast/model/DoubanBroadcastMoveSubject.ts b/src/douban/broadcast/model/DoubanBroadcastMoveSubject.ts
index 31eddf0..6e2d5a2 100644
--- a/src/douban/broadcast/model/DoubanBroadcastMoveSubject.ts
+++ b/src/douban/broadcast/model/DoubanBroadcastMoveSubject.ts
@@ -1,4 +1,4 @@
import DoubanBroadcastSubject from "./DoubanBroadcastSubject";
-export default class DoubanBroadcastMovieSubject extends DoubanBroadcastSubject{
+export default class DoubanBroadcastMovieSubject extends DoubanBroadcastSubject {
}
diff --git a/src/douban/broadcast/model/DoubanBroadcastSubject.ts b/src/douban/broadcast/model/DoubanBroadcastSubject.ts
index 53a82d6..ef1911a 100644
--- a/src/douban/broadcast/model/DoubanBroadcastSubject.ts
+++ b/src/douban/broadcast/model/DoubanBroadcastSubject.ts
@@ -4,9 +4,9 @@ export default class DoubanBroadcastSubject {
title: string;
desc: string;
url: string;
- author:string;
- authorUrl:string;
- timePublished:Date;
- image:string;
- content:string;
+ author: string;
+ authorUrl: string;
+ timePublished: Date;
+ image: string;
+ content: string;
}
diff --git a/src/douban/broadcast/model/DoubanPageBroadcastSubject.ts b/src/douban/broadcast/model/DoubanPageBroadcastSubject.ts
index b4fe1b8..3cd45d1 100644
--- a/src/douban/broadcast/model/DoubanPageBroadcastSubject.ts
+++ b/src/douban/broadcast/model/DoubanPageBroadcastSubject.ts
@@ -1,9 +1,7 @@
-import {AggregateRating, Person, WithContext} from 'schema-dts';
-
import DoubanSubject from 'src/douban/data/model/DoubanSubject';
export default class DoubanPageBroadcastSubject extends DoubanSubject {
- pageNumber:number;
- broadcast:DoubanPageBroadcastSubject[];
- pageSize:number;
+ pageNumber: number;
+ broadcast: DoubanPageBroadcastSubject[];
+ pageSize: number;
}
diff --git a/src/douban/data/handler/DoubanAbstractLoadHandler.ts b/src/douban/data/handler/DoubanAbstractLoadHandler.ts
index 63a6a17..efb7fcb 100644
--- a/src/douban/data/handler/DoubanAbstractLoadHandler.ts
+++ b/src/douban/data/handler/DoubanAbstractLoadHandler.ts
@@ -3,30 +3,30 @@ import {DoubanPluginSettings} from "src/douban/Douban";
import DoubanPlugin from "main";
import DoubanSubject, {DoubanParameter} from '../model/DoubanSubject';
import DoubanSubjectLoadHandler from "./DoubanSubjectLoadHandler";
-import {Editor, moment, request, requestUrl, RequestUrlParam, sanitizeHTMLToDom} from "obsidian";
-import { i18nHelper } from 'src/lang/helper';
-import { log } from "src/utils/Logutil";
+import {Editor, moment, request, RequestUrlParam} from "obsidian";
+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, TemplateTextMode} from "../../../constant/Constsant";
export default abstract class DoubanAbstractLoadHandler implements DoubanSubjectLoadHandler {
-
-
- public doubanPlugin:DoubanPlugin;
- constructor(doubanPlugin:DoubanPlugin) {
- this.doubanPlugin = doubanPlugin;
- }
- parse(extract: T, settings:DoubanPluginSettings): string {
- let template:string = this.getTemplate(settings);
- 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 = '';
- if(frontMatterStart > -1 && frontMatterEnd > -1) {
+ public doubanPlugin: DoubanPlugin;
+
+ constructor(doubanPlugin: DoubanPlugin) {
+ this.doubanPlugin = doubanPlugin;
+ }
+
+ parse(extract: T, settings: DoubanPluginSettings): string {
+ let template: string = this.getTemplate(settings);
+ 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 = '';
+ if (frontMatterStart > -1 && frontMatterEnd > -1) {
frontMatterBefore = template.substring(0, frontMatterStart);
frontMatter = template.substring(frontMatterStart, frontMatterEnd + 3);
frontMatterAfter = template.substring(frontMatterEnd + 3);
@@ -40,35 +40,18 @@ export default abstract class DoubanAbstractLoadHandler
frontMatter = this.parsePartText(frontMatter, extract, settings, TemplateTextMode.YAML);
}
return frontMatterBefore + frontMatter + frontMatterAfter;
- }else {
+ } else {
return this.parsePartText(template, extract, settings);
}
}
- private parsePartText(template: string, extract: T, settings: DoubanPluginSettings, textMode:TemplateTextMode = TemplateTextMode.NORMAL): string {
- let resultContent = template
- .replaceAll(DoubanParameter.ID, extract.id)
- .replaceAll(DoubanParameter.TITLE, this.handleSpecialContent(extract.title, textMode))
- .replaceAll(DoubanParameter.TYPE, extract.type)
- .replaceAll(DoubanParameter.SCORE, this.handleSpecialContent(extract.score))
- .replaceAll(DoubanParameter.IMAGE, extract.image)
- .replaceAll(DoubanParameter.URL, extract.url)
- .replaceAll(DoubanParameter.DESC, this.handleSpecialContent(extract.desc, textMode))
- .replaceAll(DoubanParameter.PUBLISHER, extract.publisher)
- .replaceAll(DoubanParameter.DATE_PUBLISHED, extract.datePublished ? moment(extract.datePublished).format(settings.dateFormat) : '')
- .replaceAll(DoubanParameter.TIME_PUBLISHED, extract.datePublished ? moment(extract.datePublished).format(settings.timeFormat) : '')
- .replaceAll(DoubanParameter.GENRE, this.handleSpecialContent(extract.genre, textMode, settings))
- ;
- return this.parseText(resultContent, extract, settings, textMode);
- }
-
/**
* 处理特殊字符
* @param text
* @param textMode
*/
- handleSpecialText(text: string, textMode: TemplateTextMode):string {
- let result = text;
+ handleSpecialText(text: string, textMode: TemplateTextMode): string {
+ let result = text;
switch (textMode) {
case TemplateTextMode.YAML:
result = YamlUtil.handleText(text);
@@ -83,7 +66,7 @@ export default abstract class DoubanAbstractLoadHandler
* @param settings
* @param textMode
*/
- handleContentArray(array: any[], settings: DoubanPluginSettings, textMode: TemplateTextMode):string {
+ handleContentArray(array: any[], settings: DoubanPluginSettings, textMode: TemplateTextMode): string {
let result = '';
switch (textMode) {
case TemplateTextMode.YAML:
@@ -101,95 +84,110 @@ export default abstract class DoubanAbstractLoadHandler
* @param textMode
* @param settings
*/
- handleSpecialContent(value: any, textMode:TemplateTextMode = TemplateTextMode.NORMAL, settings: DoubanPluginSettings = null): string {
+ handleSpecialContent(value: any, textMode: TemplateTextMode = TemplateTextMode.NORMAL, settings: DoubanPluginSettings = null): string {
let result = '';
if (value instanceof Array) {
result = this.handleContentArray(value, settings, textMode);
- }else if (value instanceof Number) {
+ } else if (value instanceof Number) {
result = value ? value.toString() : '';
- }else {
+ } else {
result = this.handleSpecialText(value, textMode);
}
return result;
}
- abstract getTemplate(settings:DoubanPluginSettings):string;
+ abstract getTemplate(settings: DoubanPluginSettings): string;
- abstract parseText(beforeContent:string, extract: T, settings:DoubanPluginSettings, textMode:TemplateTextMode): string;
+ abstract parseText(beforeContent: string, extract: T, settings: DoubanPluginSettings, textMode: TemplateTextMode): string;
- abstract support(extract: DoubanSubject): boolean;
-
- handle(url:string, editor:Editor):void {
- let requestUrlParam:RequestUrlParam = {
+ abstract support(extract: DoubanSubject): boolean;
+
+ handle(url: string, editor: Editor): void {
+ let requestUrlParam: RequestUrlParam = {
url: url,
method: "GET",
- headers: JSON.parse(this.doubanPlugin.settings.searchHeaders),
+ headers: JSON.parse(this.doubanPlugin.settings.searchHeaders),
throw: true
};
request(requestUrlParam)
- .then(load)
- .then(this.parseSubjectFromHtml)
- .then(content => this.toEditor(editor, content))
- // .then(content => content ? editor.replaceSelection(content) : content)
- .catch(e => log.error(i18nHelper.getMessage('130101')))
- ;
+ .then(load)
+ .then(this.parseSubjectFromHtml)
+ .then(content => this.toEditor(editor, content))
+ // .then(content => content ? editor.replaceSelection(content) : content)
+ .catch(e => log.error(i18nHelper.getMessage('130101')))
+ ;
- }
+ }
- abstract parseSubjectFromHtml(data:CheerioAPI):T | undefined;
-
- toEditor(editor:Editor, extract: T):T {
- this.doubanPlugin.putToEditor(editor, extract);
- return extract;
- }
+ abstract parseSubjectFromHtml(data: CheerioAPI): T | undefined;
- getPersonName(name:string, settings:DoubanPluginSettings):string {
- if(!name || !settings || !settings.personNameMode) {
- return "";
- }
- let resultName:string = "";
- let regValue:RegExpExecArray;
- switch(settings.personNameMode) {
- case PersonNameMode.CH_NAME:
- regValue = /[\u4e00-\u9fa5]{2,20}/g.exec(name);
- resultName = regValue?regValue[0]:name;
- break;
- case PersonNameMode.EN_NAME:
- regValue = /[a-zA-Z.\s\-]{2,50}/g.exec(name);
- resultName = regValue?regValue[0]:name;
- break;
- default:
- resultName = name;
- }
- return resultName;
- }
+ toEditor(editor: Editor, extract: T): T {
+ this.doubanPlugin.putToEditor(editor, extract);
+ return extract;
+ }
- html_encode(str:string):string
- {
- let s = "";
- if (str.length == 0) return "";
- s = str.replace(/&/g, "&");
- s = s.replace(//g, ">");
- s = s.replace(/ /g, " ");
- s = s.replace(/\'/g, "'");
- s = s.replace(/\"/g, """);
- s = s.replace(/\n/g, "
");
- return s;
- }
+ getPersonName(name: string, settings: DoubanPluginSettings): string {
+ if (!name || !settings || !settings.personNameMode) {
+ return "";
+ }
+ let resultName: string = "";
+ let regValue: RegExpExecArray;
+ switch (settings.personNameMode) {
+ case PersonNameMode.CH_NAME:
+ regValue = /[\u4e00-\u9fa5]{2,20}/g.exec(name);
+ resultName = regValue ? regValue[0] : name;
+ break;
+ case PersonNameMode.EN_NAME:
+ regValue = /[a-zA-Z.\s\-]{2,50}/g.exec(name);
+ resultName = regValue ? regValue[0] : name;
+ break;
+ default:
+ resultName = name;
+ }
+ return resultName;
+ }
- html_decode(str:string):string
- {
- let s = "";
- if (str.length == 0) return "";
- s = str.replace(/&/g, "&");
- s = s.replace(/</g, "<");
- s = s.replace(/>/g, ">");
- s = s.replace(/ /g, " ");
- s = s.replace(/'/g, "\'");
- s = s.replace(/"/g, "\"");
- s = s.replace(/
/g, "\n");
- return s;
- }
+ html_encode(str: string): string {
+ let s = "";
+ if (str.length == 0) return "";
+ s = str.replace(/&/g, "&");
+ s = s.replace(//g, ">");
+ s = s.replace(/ /g, " ");
+ s = s.replace(/\'/g, "'");
+ s = s.replace(/\"/g, """);
+ s = s.replace(/\n/g, "
");
+ return s;
+ }
+
+ html_decode(str: string): string {
+ let s = "";
+ if (str.length == 0) return "";
+ s = str.replace(/&/g, "&");
+ s = s.replace(/</g, "<");
+ s = s.replace(/>/g, ">");
+ s = s.replace(/ /g, " ");
+ s = s.replace(/'/g, "\'");
+ s = s.replace(/"/g, "\"");
+ s = s.replace(/
/g, "\n");
+ return s;
+ }
+
+ private parsePartText(template: string, extract: T, settings: DoubanPluginSettings, textMode: TemplateTextMode = TemplateTextMode.NORMAL): string {
+ let resultContent = template
+ .replaceAll(DoubanParameter.ID, extract.id)
+ .replaceAll(DoubanParameter.TITLE, this.handleSpecialContent(extract.title, textMode))
+ .replaceAll(DoubanParameter.TYPE, extract.type)
+ .replaceAll(DoubanParameter.SCORE, this.handleSpecialContent(extract.score))
+ .replaceAll(DoubanParameter.IMAGE, extract.image)
+ .replaceAll(DoubanParameter.URL, extract.url)
+ .replaceAll(DoubanParameter.DESC, this.handleSpecialContent(extract.desc, textMode))
+ .replaceAll(DoubanParameter.PUBLISHER, extract.publisher)
+ .replaceAll(DoubanParameter.DATE_PUBLISHED, extract.datePublished ? moment(extract.datePublished).format(settings.dateFormat) : '')
+ .replaceAll(DoubanParameter.TIME_PUBLISHED, extract.datePublished ? moment(extract.datePublished).format(settings.timeFormat) : '')
+ .replaceAll(DoubanParameter.GENRE, this.handleSpecialContent(extract.genre, textMode, settings))
+ ;
+ return this.parseText(resultContent, extract, settings, textMode);
+ }
}
diff --git a/src/douban/data/handler/DoubanBookLoadHandler.ts b/src/douban/data/handler/DoubanBookLoadHandler.ts
index b5cdab7..02f367d 100644
--- a/src/douban/data/handler/DoubanBookLoadHandler.ts
+++ b/src/douban/data/handler/DoubanBookLoadHandler.ts
@@ -1,6 +1,4 @@
-import {Editor, htmlToMarkdown, moment, renderResults} from "obsidian";
-
-import { CheerioAPI } from 'cheerio';
+import {CheerioAPI} from 'cheerio';
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
import DoubanBookSubject, {DoubanBookParameter} from "../model/DoubanBookSubject";
import DoubanPlugin from "main";
@@ -10,83 +8,80 @@ import {TemplateTextMode} from "../../../constant/Constsant";
export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler {
- getTemplate(settings: DoubanPluginSettings): string {
+ constructor(doubanPlugin: DoubanPlugin) {
+ super(doubanPlugin);
+ }
+
+ getTemplate(settings: DoubanPluginSettings): string {
return settings.bookTemplate;
- }
+ }
- parseText(beforeContent:string, extract: DoubanBookSubject, settings:DoubanPluginSettings, textMode: TemplateTextMode): string {
+ parseText(beforeContent: string, extract: DoubanBookSubject, settings: DoubanPluginSettings, textMode: TemplateTextMode): string {
return beforeContent
- .replaceAll(DoubanBookParameter.author,
- super.handleSpecialContent(
- extract.author.map(this.handleSpecialAuthorName), textMode, settings))
- .replaceAll(DoubanBookParameter.translator, super.handleSpecialContent(extract.translator, textMode, settings))
- .replaceAll(DoubanBookParameter.isbn, extract.isbn)
- .replaceAll(DoubanBookParameter.originalTitle, super.handleSpecialContent(extract.originalTitle, textMode))
- .replaceAll(DoubanBookParameter.subTitle,super.handleSpecialContent(extract.subTitle, textMode))
- .replaceAll(DoubanBookParameter.totalPage, super.handleSpecialContent(extract.totalPage, textMode))
- .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.author,
+ super.handleSpecialContent(
+ extract.author.map(this.handleSpecialAuthorName), textMode, settings))
+ .replaceAll(DoubanBookParameter.translator, super.handleSpecialContent(extract.translator, textMode, settings))
+ .replaceAll(DoubanBookParameter.isbn, extract.isbn)
+ .replaceAll(DoubanBookParameter.originalTitle, super.handleSpecialContent(extract.originalTitle, textMode))
+ .replaceAll(DoubanBookParameter.subTitle, super.handleSpecialContent(extract.subTitle, textMode))
+ .replaceAll(DoubanBookParameter.totalPage, super.handleSpecialContent(extract.totalPage, textMode))
+ .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));
+ }
- support(extract: DoubanSubject): boolean {
- return extract && extract.type && (extract.type.contains("书籍") || extract.type.contains("Book") || extract.type.contains("book"));
- }
+ support(extract: DoubanSubject): boolean {
+ return extract && extract.type && (extract.type.contains("书籍") || extract.type.contains("Book") || extract.type.contains("book"));
+ }
- handleSpecialAuthorName(authorName:string):string {
+ handleSpecialAuthorName(authorName: string): string {
return authorName.replace(/\[/g, '')
.replace(']', '/');
}
-
-
-
- constructor(doubanPlugin:DoubanPlugin) {
- super(doubanPlugin);
- }
-
- parseSubjectFromHtml(html: CheerioAPI): DoubanBookSubject {
- let desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content");
- let image = html(html("head > meta[property= 'og:image']").get(0)).attr("content");
+ parseSubjectFromHtml(html: CheerioAPI): DoubanBookSubject {
+ let desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content");
+ let image = html(html("head > meta[property= 'og:image']").get(0)).attr("content");
let item = html(html("head > script[type='application/ld+json']").get(0)).text();
item = super.html_decode(item);
let obj = JSON.parse(item.replace(/[\r\n\s+]/g, ''));
let title = obj.name;
let url = obj.url;
- let author = obj.author.map((a:any) => a.name);
+ let author = obj.author.map((a: any) => a.name);
let isbn = obj.isbn;
- let score = html(html("#interest_sectl > div > div.rating_self.clearfix > strong[property= 'v:average']").get(0)).text();
- let detailDom = html(html("#info").get(0));
- let publish = detailDom.find("span.pl");
+ let score = html(html("#interest_sectl > div > div.rating_self.clearfix > strong[property= 'v:average']").get(0)).text();
+ let detailDom = html(html("#info").get(0));
+ let publish = detailDom.find("span.pl");
- let valueMap = new Map();
+ let valueMap = new Map();
- publish.map((index, info) => {
- let key = html(info).text().trim();
- let value;
- if(key.indexOf('译者') >= 0){
+ publish.map((index, info) => {
+ let key = html(info).text().trim();
+ let value;
+ if (key.indexOf('译者') >= 0) {
value = [];
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){
- value = html(info.next.next).text().trim();
- }else{
- value = html(info.next).text().trim();
- }
- valueMap.set(BookKeyValueMap.get(key), value);
- })
+ } else if (key.indexOf('作者') >= 0 || key.indexOf('丛书') >= 0 || key.indexOf('出版社') >= 0) {
+ value = html(info.next.next).text().trim();
+ } else {
+ value = html(info.next).text().trim();
+ }
+ valueMap.set(BookKeyValueMap.get(key), value);
+ })
- let idPattern = /(\d){5,10}/g;
- let idE = idPattern.exec(url);
- let id = idE ? idE[0]: '';
+ let idPattern = /(\d){5,10}/g;
+ let idE = idPattern.exec(url);
+ let id = idE ? idE[0] : '';
let menuIdDom = html('#dir_' + id + '_full') ? html('#dir_' + id + '_full') : html('#dir_' + id + '_short');
- let menu:string[] = menuIdDom ? html(menuIdDom.get(0)).text().trim().split('\n').map(row => row.trim()) : [];
+ let menu: string[] = menuIdDom ? html(menuIdDom.get(0)).text().trim().split('\n').map(row => row.trim()) : [];
menu.length > 0 ? menu.pop() : menu;
- const result:DoubanBookSubject = {
+ const result: DoubanBookSubject = {
author: author,
translator: valueMap.has('translator') ? valueMap.get('translator') : [],
image: image,
@@ -108,24 +103,24 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler = new Map(
- [['作者', 'author'],
- ['出版社:', 'publisher'],
- ['原作名:', 'originalTitle'],
- ['出版年:', 'datePublished'],
- ['页数:', 'totalPage'],
- ['定价:', 'price'],
- ['装帧:', 'binding'],
- ['丛书:', 'series'],
- ['ISBN:', 'isbn'],
- ['译者', 'translator'],
- ['副标题:', 'subTitle'],
- ]
+const BookKeyValueMap: Map = new Map(
+ [['作者', 'author'],
+ ['出版社:', 'publisher'],
+ ['原作名:', 'originalTitle'],
+ ['出版年:', 'datePublished'],
+ ['页数:', 'totalPage'],
+ ['定价:', 'price'],
+ ['装帧:', 'binding'],
+ ['丛书:', 'series'],
+ ['ISBN:', 'isbn'],
+ ['译者', 'translator'],
+ ['副标题:', 'subTitle'],
+ ]
);
diff --git a/src/douban/data/handler/DoubanGameLoadHandler.ts b/src/douban/data/handler/DoubanGameLoadHandler.ts
index 4589101..660fe7b 100644
--- a/src/douban/data/handler/DoubanGameLoadHandler.ts
+++ b/src/douban/data/handler/DoubanGameLoadHandler.ts
@@ -1,4 +1,4 @@
-import { CheerioAPI } from 'cheerio';
+import {CheerioAPI} from 'cheerio';
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
import DoubanPlugin from "main";
import {DoubanPluginSettings} from "src/douban/Douban";
@@ -7,8 +7,8 @@ import DoubanGameSubject from '../model/DoubanGameSubject';
export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler {
- getTemplate(settings: DoubanPluginSettings): string {
- return settings.gameTemplate;
+ constructor(doubanPlugin: DoubanPlugin) {
+ super(doubanPlugin);
}
// parse(extract: DoubanGameSubject, settings: DoubanPluginSettings): string {
@@ -16,26 +16,22 @@ export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler h1").get(0)).text();
let idContent = html(html("head > meta[name= 'mobile-agent']").get(0)).attr("content");
let idPattern = /(\d){5,10}/g;
@@ -49,24 +45,24 @@ export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler();
- let value:any;
+ let value: any;
dt.map((index, info) => {
let key = html(info).text().trim();
- if(key.indexOf('平台') >= 0 || key.indexOf('类型') >= 0){
+ if (key.indexOf('平台') >= 0 || key.indexOf('类型') >= 0) {
value = [];
html(info.next.next).find("a").map((index, a) => {
value.push(html(a).text().trim());
});
- }else if (key.indexOf('别名') >= 0) {
+ } else if (key.indexOf('别名') >= 0) {
let cc = html(info.next.next).text().trim();
value = cc.split("/");
- }else{
+ } else {
value = html(info.next.next).text().trim();
}
valueMap.set(GameKeyValueMap.get(key), value);
})
- const result:DoubanGameSubject = {
+ const result: DoubanGameSubject = {
id: id,
type: "Game",
title: title,
@@ -82,7 +78,8 @@ export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler = new Map(
+const GameKeyValueMap: Map = new Map(
[['类型:', 'genre'],
['平台:', 'platform'],
['别名:', 'aliases'],
diff --git a/src/douban/data/handler/DoubanMovieLoadHandler.ts b/src/douban/data/handler/DoubanMovieLoadHandler.ts
index 0ca1320..408b792 100644
--- a/src/douban/data/handler/DoubanMovieLoadHandler.ts
+++ b/src/douban/data/handler/DoubanMovieLoadHandler.ts
@@ -1,74 +1,71 @@
-import { CheerioAPI } from 'cheerio';
+import {CheerioAPI} from 'cheerio';
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
import DoubanPlugin from "main";
-import { DoubanPluginSettings } from "src/douban/Douban";
+import {DoubanPluginSettings} from "src/douban/Douban";
import SchemaOrg from "src/utils/SchemaOrg";
import DoubanSubject from '../model/DoubanSubject';
import DoubanMovieSubject from '../model/DoubanMovieSubject';
export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler {
+ constructor(doubanPlugin: DoubanPlugin) {
+ super(doubanPlugin);
+ }
+
getTemplate(settings: DoubanPluginSettings): string {
return settings.movieTemplate;
}
- parseText(beforeContent:string, extract: DoubanMovieSubject, settings:DoubanPluginSettings): string {
+ parseText(beforeContent: string, extract: DoubanMovieSubject, settings: DoubanPluginSettings): string {
return beforeContent
- .replaceAll("{{originalTitle}}", extract.originalTitle ? extract.originalTitle : "")
- .replaceAll("{{director}}", extract.director ? extract.director.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, settings)).filter(c => c).join(settings.arraySpilt) : "")
- .replaceAll("{{actor}}", extract.actor ? extract.actor.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, settings)).filter(c => c).join(settings.arraySpilt) : "")
- .replaceAll("{{author}}", extract.author ? extract.author.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, settings)).filter(c => c).join(settings.arraySpilt) : "")
+ .replaceAll("{{originalTitle}}", extract.originalTitle ? extract.originalTitle : "")
+ .replaceAll("{{director}}", extract.director ? extract.director.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, settings)).filter(c => c).join(settings.arraySpilt) : "")
+ .replaceAll("{{actor}}", extract.actor ? extract.actor.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, settings)).filter(c => c).join(settings.arraySpilt) : "")
+ .replaceAll("{{author}}", extract.author ? extract.author.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, settings)).filter(c => c).join(settings.arraySpilt) : "")
;
}
- support(extract: DoubanSubject): boolean {
- return extract && extract.type && (extract.type.contains("电影") || extract.type.contains("Movie") || extract.type.contains("movie"));
- }
+ support(extract: DoubanSubject): boolean {
+ return extract && extract.type && (extract.type.contains("电影") || extract.type.contains("Movie") || extract.type.contains("movie"));
+ }
+ parseSubjectFromHtml(data: CheerioAPI): DoubanMovieSubject {
+ return data('script')
+ .get()
+ .filter(scd => "application/ld+json" == data(scd).attr("type"))
+ .map(i => {
+ let item = data(i).text();
+ item = super.html_decode(item);
+ let obj = JSON.parse(item.replace(/[\r\n\s+]/g, ''));
+ let idPattern = /(\d){5,10}/g;
+ let id = idPattern.exec(obj.url);
+ let name = obj.name;
+ let titleExec = /[\u4e00-\u9fa5]{2,20}/g.exec(name);
+ let title = titleExec ? titleExec[0] : name;
-
+ let originalTitleExec = /[a-zA-Z.\s\-]{2,50}/g.exec(name);
+ let originalTitle = originalTitleExec ? originalTitleExec[0] : name;
- constructor(doubanPlugin:DoubanPlugin) {
- super(doubanPlugin);
- }
-
- parseSubjectFromHtml(data: CheerioAPI): DoubanMovieSubject {
- return data('script')
- .get()
- .filter(scd => "application/ld+json" == data(scd).attr("type"))
- .map(i => {
- let item = data(i).text();
- item = super.html_decode(item);
- let obj = JSON.parse(item.replace(/[\r\n\s+]/g, ''));
- let idPattern = /(\d){5,10}/g;
- let id = idPattern.exec(obj.url);
- let name = obj.name;
- let titleExec = /[\u4e00-\u9fa5]{2,20}/g.exec(name);
- let title = titleExec?titleExec[0]:name;
-
- let originalTitleExec = /[a-zA-Z.\s\-]{2,50}/g.exec(name);
- let originalTitle = originalTitleExec?originalTitleExec[0]:name;
-
- const result:DoubanMovieSubject = {
- id: id ? id[0] : '',
- title: title,
- type: 'Movie',
- score: obj.aggregateRating ? obj.aggregateRating.ratingValue : undefined,
- originalTitle: originalTitle,
- desc: obj.description,
- url: "https://movie.douban.com" + obj.url,
- director: obj.director,
- author: obj.author,
- actor: obj.actor,
- aggregateRating: obj.aggregateRating,
- datePublished: obj.datePublished ? new Date(obj.datePublished) : undefined,
- image: obj.image,
- genre: obj.genre,
- publisher: ''
- }
- return result;
- })[0];
- }
+ const result: DoubanMovieSubject = {
+ id: id ? id[0] : '',
+ title: title,
+ type: 'Movie',
+ score: obj.aggregateRating ? obj.aggregateRating.ratingValue : undefined,
+ originalTitle: originalTitle,
+ desc: obj.description,
+ url: "https://movie.douban.com" + obj.url,
+ director: obj.director,
+ author: obj.author,
+ actor: obj.actor,
+ aggregateRating: obj.aggregateRating,
+ datePublished: obj.datePublished ? new Date(obj.datePublished) : undefined,
+ image: obj.image,
+ genre: obj.genre,
+ publisher: ''
+ }
+ return result;
+ })[0];
+ }
}
diff --git a/src/douban/data/handler/DoubanMusicLoadHandler.ts b/src/douban/data/handler/DoubanMusicLoadHandler.ts
index 746e0fb..e8c6ece 100644
--- a/src/douban/data/handler/DoubanMusicLoadHandler.ts
+++ b/src/douban/data/handler/DoubanMusicLoadHandler.ts
@@ -1,96 +1,93 @@
-import { CheerioAPI } from 'cheerio';
+import {CheerioAPI} from 'cheerio';
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
import DoubanMusicSubject from '../model/DoubanMusicSubject';
import DoubanPlugin from "main";
-import { DoubanPluginSettings } from "src/douban/Douban";
+import {DoubanPluginSettings} from "src/douban/Douban";
import DoubanSubject from '../model/DoubanSubject';
export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler {
+ constructor(doubanPlugin: DoubanPlugin) {
+ super(doubanPlugin);
+ }
+
getTemplate(settings: DoubanPluginSettings): string {
return settings.musicTemplate;
}
- parseText(beforeContent:string, extract: DoubanMusicSubject, settings:DoubanPluginSettings): string {
+ parseText(beforeContent: string, extract: DoubanMusicSubject, settings: DoubanPluginSettings): string {
return beforeContent
- .replaceAll("{{actor}}", extract.actor ? extract.actor.join(settings.arraySpilt) : "")
- .replaceAll("{{barcode}}", extract.barcode ? extract.barcode : "")
- .replaceAll("{{medium}}", extract.medium ? extract.medium : "")
- .replaceAll("{{albumType}}", extract.albumType ? extract.albumType : "")
- .replaceAll("{{numberOfRecords}}", extract.numberOfRecords ? extract.numberOfRecords + "" : "")
- ;
- }
- support(extract: DoubanSubject): boolean {
- return extract && extract.type && (extract.type.contains("音乐") || extract.type.contains("Music") || extract.type.contains("music"));
- }
+ .replaceAll("{{actor}}", extract.actor ? extract.actor.join(settings.arraySpilt) : "")
+ .replaceAll("{{barcode}}", extract.barcode ? extract.barcode : "")
+ .replaceAll("{{medium}}", extract.medium ? extract.medium : "")
+ .replaceAll("{{albumType}}", extract.albumType ? extract.albumType : "")
+ .replaceAll("{{numberOfRecords}}", extract.numberOfRecords ? extract.numberOfRecords + "" : "")
+ ;
+ }
+ support(extract: DoubanSubject): boolean {
+ return extract && extract.type && (extract.type.contains("音乐") || extract.type.contains("Music") || extract.type.contains("music"));
+ }
+ parseSubjectFromHtml(html: CheerioAPI): DoubanMusicSubject {
+ let title = html(html("head > meta[property= 'og:title']").get(0)).attr("content");
+ let desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content");
+ let url = html(html("head > meta[property= 'og:url']").get(0)).attr("content");
+ let image = html(html("head > meta[property= 'og:image']").get(0)).attr("content");
+ let score = html(html("#interest_sectl > div > div.rating_self.clearfix > strong[property= 'v:average']").get(0)).text();
+ let detailDom = html(html("#info").get(0));
+ let publish = detailDom.find("span.pl");
-
+ let valueMap = new Map();
- constructor(doubanPlugin:DoubanPlugin) {
- super(doubanPlugin);
- }
+ publish.map((index, info) => {
+ let key = html(info).text().trim();
+ let value = ''
+ if (key.indexOf('表演者') >= 0) {
+ // value = html(info.next.next).text().trim();
+ let vas: string[] = key.split("\n \n ");
+ value = vas && vas.length > 1 ? vas[1] : "";
+ key = vas && vas.length > 0 ? vas[0] : "";
+ } else {
+ value = html(info.next).text().trim();
+ }
+ valueMap.set(MusicKeyValueMap.get(key), value);
+ })
- parseSubjectFromHtml(html: CheerioAPI): DoubanMusicSubject {
- let title = html(html("head > meta[property= 'og:title']").get(0)).attr("content");
- let desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content");
- let url = html(html("head > meta[property= 'og:url']").get(0)).attr("content");
- let image = html(html("head > meta[property= 'og:image']").get(0)).attr("content");
- let score = html(html("#interest_sectl > div > div.rating_self.clearfix > strong[property= 'v:average']").get(0)).text();
- let detailDom = html(html("#info").get(0));
- let publish = detailDom.find("span.pl");
+ let idPattern = /(\d){5,10}/g;
+ let id = idPattern.exec(url);
- let valueMap = new Map();
-
- publish.map((index, info) => {
- let key = html(info).text().trim();
- let value = ''
- if(key.indexOf('表演者') >= 0){
- // value = html(info.next.next).text().trim();
- let vas:string[] = key.split("\n \n ");
- value = vas && vas.length > 1? vas[1]:"";
- key = vas && vas.length > 0? vas[0]:"";
- }else{
- value = html(info.next).text().trim();
- }
- valueMap.set(MusicKeyValueMap.get(key), value);
- })
-
- let idPattern = /(\d){5,10}/g;
- let id = idPattern.exec(url);
-
- const result:DoubanMusicSubject = {
- image: image,
- datePublished: valueMap.has('datePublished') ? new Date(valueMap.get('datePublished')) : undefined,
- publisher: valueMap.has('publisher') ? valueMap.get('publisher') : "",
- score: Number(score),
- numberOfRecords: valueMap.has('numberOfRecords') ? Number(valueMap.get('numberOfRecords')) : null,
- id: id ? id[0] : "",
- type: "Music",
- title: title,
- desc: desc,
- url: url,
- actor: [valueMap.has('actor') ? valueMap.get('actor') : null],
- genre: valueMap.has('genre') ? [valueMap.get('genre')] : [""],
- albumType: valueMap.has('albumType') ? valueMap.get('albumType') : "",
- medium: valueMap.has('medium') ? valueMap.get('medium') : "",
- barcode: valueMap.has('barcode') ? valueMap.get('barcode') : ""
- };
- return result;
-}
+ const result: DoubanMusicSubject = {
+ image: image,
+ datePublished: valueMap.has('datePublished') ? new Date(valueMap.get('datePublished')) : undefined,
+ publisher: valueMap.has('publisher') ? valueMap.get('publisher') : "",
+ score: Number(score),
+ numberOfRecords: valueMap.has('numberOfRecords') ? Number(valueMap.get('numberOfRecords')) : null,
+ id: id ? id[0] : "",
+ type: "Music",
+ title: title,
+ desc: desc,
+ url: url,
+ actor: [valueMap.has('actor') ? valueMap.get('actor') : null],
+ genre: valueMap.has('genre') ? [valueMap.get('genre')] : [""],
+ albumType: valueMap.has('albumType') ? valueMap.get('albumType') : "",
+ medium: valueMap.has('medium') ? valueMap.get('medium') : "",
+ barcode: valueMap.has('barcode') ? valueMap.get('barcode') : ""
+ };
+ return result;
+ }
}
-const MusicKeyValueMap:Map = new Map(
- [['表演者:', 'actor'],
- ['流派:', 'genre'],
- ['发行时间:', 'datePublished'],
- ['专辑类型:', 'albumType'],
- ['介质:', 'medium'],
- ['出版者:', 'publisher'],
- ['唱片数:', 'numberOfRecords'],
- ['条形码:', 'barcode']]
+const MusicKeyValueMap: Map = new Map(
+ [['表演者:', 'actor'],
+ ['流派:', 'genre'],
+ ['发行时间:', 'datePublished'],
+ ['专辑类型:', 'albumType'],
+ ['介质:', 'medium'],
+ ['出版者:', 'publisher'],
+ ['唱片数:', 'numberOfRecords'],
+ ['条形码:', 'barcode']]
);
diff --git a/src/douban/data/handler/DoubanNoteLoadHandler.ts b/src/douban/data/handler/DoubanNoteLoadHandler.ts
index 8240105..519ac0f 100644
--- a/src/douban/data/handler/DoubanNoteLoadHandler.ts
+++ b/src/douban/data/handler/DoubanNoteLoadHandler.ts
@@ -1,49 +1,46 @@
-import { CheerioAPI } from 'cheerio';
+import {CheerioAPI} from 'cheerio';
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
import DoubanNoteSubject from '../model/DoubanNoteSubject';
import DoubanPlugin from "main";
-import { DoubanPluginSettings } from "src/douban/Douban";
+import {DoubanPluginSettings} from "src/douban/Douban";
import DoubanSubject from '../model/DoubanSubject';
import html2markdown from '@notable/html2markdown';
export default class DoubanNoteLoadHandler extends DoubanAbstractLoadHandler {
+ constructor(doubanPlugin: DoubanPlugin) {
+ super(doubanPlugin);
+ }
+
getTemplate(settings: DoubanPluginSettings): string {
return settings.noteTemplate;
}
- parseText(beforeContent:string, extract: DoubanNoteSubject, settings:DoubanPluginSettings): string {
+ parseText(beforeContent: string, extract: DoubanNoteSubject, settings: DoubanPluginSettings): string {
return beforeContent
- .replaceAll("{{authorUrl}}", extract.authorUrl ? extract.authorUrl : "")
- .replaceAll("{{content}}", extract.content ? extract.content : "")
- .replaceAll("{{author}}", extract.author ? extract.author : "")
-;
- }
- support(extract: DoubanSubject): boolean {
- return extract && extract.type && (extract.type.contains("日记") || extract.type.contains("Note") || extract.type.contains("Article"));
- }
+ .replaceAll("{{authorUrl}}", extract.authorUrl ? extract.authorUrl : "")
+ .replaceAll("{{content}}", extract.content ? extract.content : "")
+ .replaceAll("{{author}}", extract.author ? extract.author : "")
+ ;
+ }
+ support(extract: DoubanSubject): boolean {
+ return extract && extract.type && (extract.type.contains("日记") || extract.type.contains("Note") || extract.type.contains("Article"));
+ }
+ parseSubjectFromHtml(html: CheerioAPI): DoubanNoteSubject {
+ let title = html(html("head > meta[property= 'og:title']").get(0)).attr("content");
+ let desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content");
+ let url = html(html("head > meta[property= 'og:url']").get(0)).attr("content");
+ let image = html(html("head > meta[property= 'og:image']").get(0)).attr("content");
+ let type = html(html("head > meta[property= 'og:type']").get(0)).attr("content");
+ let authorA = html(html("a.note-author").get(0));
+ let timePublished = html(html(".pub-date").get(0)).text();
+ let content = html(html(".note").get(1));
+ let idPattern = /(\d){5,10}/g;
+ let id = idPattern.exec(url);
-
-
- constructor(doubanPlugin:DoubanPlugin) {
- super(doubanPlugin);
- }
-
- parseSubjectFromHtml(html: CheerioAPI): DoubanNoteSubject {
- let title = html(html("head > meta[property= 'og:title']").get(0)).attr("content");
- let desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content");
- let url = html(html("head > meta[property= 'og:url']").get(0)).attr("content");
- let image = html(html("head > meta[property= 'og:image']").get(0)).attr("content");
- let type = html(html("head > meta[property= 'og:type']").get(0)).attr("content");
- let authorA = html(html("a.note-author").get(0));
- let timePublished = html(html(".pub-date").get(0)).text();
- let content = html(html(".note").get(1));
- let idPattern = /(\d){5,10}/g;
- let id = idPattern.exec(url);
-
- const result:DoubanNoteSubject = {
+ const result: DoubanNoteSubject = {
image: image,
datePublished: timePublished ? new Date(timePublished) : undefined,
content: content ? html2markdown(content.toString()) : "",
@@ -58,8 +55,8 @@ export default class DoubanNoteLoadHandler extends DoubanAbstractLoadHandler[];
- private _doubanSubjectHandlerDefault:DoubanSubjectLoadHandler;
+ private _app: App;
+ private _doubanPlugin: DoubanPlugin;
+ private _doubanSubjectHandlers: DoubanSubjectLoadHandler[];
+ private _doubanSubjectHandlerDefault: DoubanSubjectLoadHandler;
-
- constructor(app:App, doubanPlugin:DoubanPlugin) {
- this._app = app;
- this._doubanPlugin = doubanPlugin;
- this._doubanSubjectHandlerDefault = new DoubanOtherLoadHandler(doubanPlugin);
- this._doubanSubjectHandlers = [new DoubanMovieLoadHandler(doubanPlugin), new DoubanBookLoadHandler(doubanPlugin),
- new DoubanTeleplayLoadHandler(doubanPlugin),
- new DoubanMusicLoadHandler(doubanPlugin),
- new DoubanNoteLoadHandler(doubanPlugin),
+ constructor(app: App, doubanPlugin: DoubanPlugin) {
+ this._app = app;
+ this._doubanPlugin = doubanPlugin;
+ this._doubanSubjectHandlerDefault = new DoubanOtherLoadHandler(doubanPlugin);
+ this._doubanSubjectHandlers = [new DoubanMovieLoadHandler(doubanPlugin), new DoubanBookLoadHandler(doubanPlugin),
+ new DoubanTeleplayLoadHandler(doubanPlugin),
+ new DoubanMusicLoadHandler(doubanPlugin),
+ new DoubanNoteLoadHandler(doubanPlugin),
new DoubanGameLoadHandler(doubanPlugin),
this._doubanSubjectHandlerDefault];
- }
+ }
- public handle(searchExtract:DoubanSubject, editor: Editor):void{
- if(!searchExtract) {
- return;
- }
- let doubanSubjectHandlers:DoubanSubjectLoadHandler[] = this._doubanSubjectHandlers
- .filter(h => h.support(searchExtract));
- if(doubanSubjectHandlers && doubanSubjectHandlers.length > 0) {
- doubanSubjectHandlers[0].handle(searchExtract.url, editor);
- }else {
- this._doubanSubjectHandlerDefault.handle(searchExtract.url, editor);
- }
- }
+ public handle(searchExtract: DoubanSubject, editor: Editor): void {
+ if (!searchExtract) {
+ return;
+ }
+ let doubanSubjectHandlers: DoubanSubjectLoadHandler[] = this._doubanSubjectHandlers
+ .filter(h => h.support(searchExtract));
+ if (doubanSubjectHandlers && doubanSubjectHandlers.length > 0) {
+ doubanSubjectHandlers[0].handle(searchExtract.url, editor);
+ } else {
+ this._doubanSubjectHandlerDefault.handle(searchExtract.url, editor);
+ }
+ }
- public parseText(extract:DoubanSubject, settings:DoubanPluginSettings):string {
- if(!settings) {
- return "";
- }
- let doubanSubjectHandlers:DoubanSubjectLoadHandler[] = this._doubanSubjectHandlers
- .filter(h => h.support(extract));
- if(doubanSubjectHandlers && doubanSubjectHandlers.length > 0) {
- let result = doubanSubjectHandlers.map(h => h.parse(extract, settings));
- if(result && result.length > 0) {
- return result[0];
- }else {
- return "";
- }
- }else {
- return this._doubanSubjectHandlerDefault.parse(extract, settings);
- }
+ public parseText(extract: DoubanSubject, settings: DoubanPluginSettings): string {
+ if (!settings) {
+ return "";
+ }
+ let doubanSubjectHandlers: DoubanSubjectLoadHandler[] = this._doubanSubjectHandlers
+ .filter(h => h.support(extract));
+ if (doubanSubjectHandlers && doubanSubjectHandlers.length > 0) {
+ let result = doubanSubjectHandlers.map(h => h.parse(extract, settings));
+ if (result && result.length > 0) {
+ return result[0];
+ } else {
+ return "";
+ }
+ } else {
+ return this._doubanSubjectHandlerDefault.parse(extract, settings);
+ }
- }
+ }
}
diff --git a/src/douban/data/handler/DoubanSubjectLoadHandler.ts b/src/douban/data/handler/DoubanSubjectLoadHandler.ts
index 7b013dd..670ba9b 100644
--- a/src/douban/data/handler/DoubanSubjectLoadHandler.ts
+++ b/src/douban/data/handler/DoubanSubjectLoadHandler.ts
@@ -1,14 +1,14 @@
-import { DoubanPluginSettings } from "src/douban/Douban";
+import {DoubanPluginSettings} from "src/douban/Douban";
import DoubanSubject from "../model/DoubanSubject";
-import { Editor } from "obsidian";
+import {Editor} from "obsidian";
export default interface DoubanSubjectLoadHandler {
-
- parse(extract: T, settings:DoubanPluginSettings): string;
- support(extract:DoubanSubject):boolean;
+ parse(extract: T, settings: DoubanPluginSettings): string;
- handle(url:string, editor: Editor):void;
+ support(extract: DoubanSubject): boolean;
+
+ handle(url: string, editor: Editor): void;
}
diff --git a/src/douban/data/handler/DoubanTeleplayLoadHandler.ts b/src/douban/data/handler/DoubanTeleplayLoadHandler.ts
index e522e50..8a453a4 100644
--- a/src/douban/data/handler/DoubanTeleplayLoadHandler.ts
+++ b/src/douban/data/handler/DoubanTeleplayLoadHandler.ts
@@ -1,7 +1,7 @@
-import { CheerioAPI } from "cheerio";
+import {CheerioAPI} from "cheerio";
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
import DoubanPlugin from "main";
-import { DoubanPluginSettings } from "src/douban/Douban";
+import {DoubanPluginSettings} from "src/douban/Douban";
import DoubanSubject from "../model/DoubanSubject";
import DoubanTeleplaySubject from "../model/DoubanTeleplaySubject";
import SchemaOrg from "src/utils/SchemaOrg";
@@ -9,18 +9,17 @@ import SchemaOrg from "src/utils/SchemaOrg";
/**
* teleplay
*/
-export class DoubanTeleplayLoadHandler extends DoubanAbstractLoadHandler{
+export class DoubanTeleplayLoadHandler extends DoubanAbstractLoadHandler {
+
+ constructor(doubanPlugin: DoubanPlugin) {
+ super(doubanPlugin);
+ }
getTemplate(settings: DoubanPluginSettings): string {
return settings.movieTemplate;
}
- constructor(doubanPlugin:DoubanPlugin) {
- super(doubanPlugin);
- }
-
-
- parseText(beforeContent:string, extract: DoubanTeleplaySubject, settings:DoubanPluginSettings): string {
+ parseText(beforeContent: string, extract: DoubanTeleplaySubject, settings: DoubanPluginSettings): string {
return beforeContent
.replaceAll("{{originalTitle}}", extract.originalTitle ? extract.originalTitle : "")
.replaceAll("{{director}}", extract.director ? extract.director.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, settings)).filter(c => c).join(settings.arraySpilt) : "")
@@ -28,47 +27,47 @@ export class DoubanTeleplayLoadHandler extends DoubanAbstractLoadHandler super.getPersonName(name, settings)).filter(c => c).join(settings.arraySpilt) : "")
}
- support(extract: DoubanSubject): boolean {
- return extract && extract.type && (extract.type.contains("电视剧") || extract.type.contains("Teleplay") || extract.type.contains("teleplay"));
- }
+ support(extract: DoubanSubject): boolean {
+ return extract && extract.type && (extract.type.contains("电视剧") || extract.type.contains("Teleplay") || extract.type.contains("teleplay"));
+ }
- parseSubjectFromHtml(data: CheerioAPI): DoubanTeleplaySubject {
- return data('script')
- .get()
- .filter(scd => "application/ld+json" == data(scd).attr("type"))
- .map(i => {
- let item = data(i).text();
- item = super.html_decode(item);
- let obj = JSON.parse(item.replace(/[\r\n\s+]/g, ''));
- let idPattern = /(\d){5,10}/g;
- let id = idPattern.exec(obj.url);
- let name = obj.name;
- let titleExec = /[\u4e00-\u9fa5]{2,20}/g.exec(name);
- let title = titleExec?titleExec[0]:name;
+ parseSubjectFromHtml(data: CheerioAPI): DoubanTeleplaySubject {
+ return data('script')
+ .get()
+ .filter(scd => "application/ld+json" == data(scd).attr("type"))
+ .map(i => {
+ let item = data(i).text();
+ item = super.html_decode(item);
+ let obj = JSON.parse(item.replace(/[\r\n\s+]/g, ''));
+ let idPattern = /(\d){5,10}/g;
+ let id = idPattern.exec(obj.url);
+ let name = obj.name;
+ let titleExec = /[\u4e00-\u9fa5]{2,20}/g.exec(name);
+ let title = titleExec ? titleExec[0] : name;
- let originalTitleExec = /[a-zA-Z.\s\-]{2,50}/g.exec(name);
- let originalTitle = originalTitleExec?originalTitleExec[0]:name;
+ let originalTitleExec = /[a-zA-Z.\s\-]{2,50}/g.exec(name);
+ let originalTitle = originalTitleExec ? originalTitleExec[0] : name;
- const result:DoubanTeleplaySubject = {
- id: id ? id[0] : '',
- type: 'Teleplay',
- title: title,
- originalTitle: originalTitle,
- desc: obj.description,
- url: "https://movie.douban.com" + obj.url,
- director: obj.director,
- author: obj.author,
- actor: obj.actor,
- aggregateRating: obj.aggregateRating,
- datePublished: obj.datePublished ? new Date(obj.datePublished) : undefined,
- image: obj.image,
- genre: obj.genre,
- score: obj.aggregateRating ? obj.aggregateRating.ratingValue : undefined,
- publisher: ""
- }
- return result;
- })[0];
- }
+ const result: DoubanTeleplaySubject = {
+ id: id ? id[0] : '',
+ type: 'Teleplay',
+ title: title,
+ originalTitle: originalTitle,
+ desc: obj.description,
+ url: "https://movie.douban.com" + obj.url,
+ director: obj.director,
+ author: obj.author,
+ actor: obj.actor,
+ aggregateRating: obj.aggregateRating,
+ datePublished: obj.datePublished ? new Date(obj.datePublished) : undefined,
+ image: obj.image,
+ genre: obj.genre,
+ score: obj.aggregateRating ? obj.aggregateRating.ratingValue : undefined,
+ publisher: ""
+ }
+ return result;
+ })[0];
+ }
}
diff --git a/src/douban/data/model/DoubanBookSubject.ts b/src/douban/data/model/DoubanBookSubject.ts
index 997ab68..cf37c0a 100644
--- a/src/douban/data/model/DoubanBookSubject.ts
+++ b/src/douban/data/model/DoubanBookSubject.ts
@@ -1,19 +1,16 @@
-import {AggregateRating, Person, WithContext} from 'schema-dts';
-
import DoubanSubject from "./DoubanSubject";
-import PropertyExplainSubject from "@App/data/model/PropertyExplainSubject";
-export default class DoubanBookSubject extends DoubanSubject {
- author:string[];
- translator:string[];
- isbn:string;
- originalTitle:string;
- subTitle:string;
- totalPage:number
- series:string;
- menu:string[];
- price:number;
- binding:string;
+export default class DoubanBookSubject extends DoubanSubject {
+ author: string[];
+ translator: string[];
+ isbn: string;
+ originalTitle: string;
+ subTitle: string;
+ totalPage: number
+ series: string;
+ menu: string[];
+ price: number;
+ binding: string;
}
export const DoubanBookParameter = {
diff --git a/src/douban/data/model/DoubanGameSubject.ts b/src/douban/data/model/DoubanGameSubject.ts
index bf6aaab..99c294f 100644
--- a/src/douban/data/model/DoubanGameSubject.ts
+++ b/src/douban/data/model/DoubanGameSubject.ts
@@ -1,9 +1,8 @@
-import {AggregateRating, Person} from 'schema-dts';
import DoubanSubject from './DoubanSubject';
-export default class DoubanGameSubject extends DoubanSubject {
- aliases:string[];
- developer:string;
- platform:string[];
+export default class DoubanGameSubject extends DoubanSubject {
+ aliases: string[];
+ developer: string;
+ platform: string[];
}
diff --git a/src/douban/data/model/DoubanMovieSubject.ts b/src/douban/data/model/DoubanMovieSubject.ts
index a54a882..d8e0779 100644
--- a/src/douban/data/model/DoubanMovieSubject.ts
+++ b/src/douban/data/model/DoubanMovieSubject.ts
@@ -1,13 +1,13 @@
-import {AggregateRating, Person, WithContext} from 'schema-dts';
+import {AggregateRating, Person} from 'schema-dts';
import DoubanSubject from "./DoubanSubject";
-export default class DoubanMovieSubject extends DoubanSubject {
- director:Person[];
- author:Person[];
- actor:Person[];
- aggregateRating:AggregateRating;
- genre:string[];
- originalTitle:string;
+export default class DoubanMovieSubject extends DoubanSubject {
+ director: Person[];
+ author: Person[];
+ actor: Person[];
+ aggregateRating: AggregateRating;
+ genre: string[];
+ originalTitle: string;
}
diff --git a/src/douban/data/model/DoubanMusicSubject.ts b/src/douban/data/model/DoubanMusicSubject.ts
index d88438c..c98c76f 100644
--- a/src/douban/data/model/DoubanMusicSubject.ts
+++ b/src/douban/data/model/DoubanMusicSubject.ts
@@ -1,11 +1,9 @@
-import {AggregateRating, Person, WithContext} from 'schema-dts';
-
import DoubanSubject from "./DoubanSubject";
-export default class DoubanMusicSubject extends DoubanSubject {
- actor:string[];
- albumType:string;
- medium:string;
- numberOfRecords:number;
- barcode:string;
+export default class DoubanMusicSubject extends DoubanSubject {
+ actor: string[];
+ albumType: string;
+ medium: string;
+ numberOfRecords: number;
+ barcode: string;
}
diff --git a/src/douban/data/model/DoubanNoteSubject.ts b/src/douban/data/model/DoubanNoteSubject.ts
index c56d5c3..45dca40 100644
--- a/src/douban/data/model/DoubanNoteSubject.ts
+++ b/src/douban/data/model/DoubanNoteSubject.ts
@@ -1,9 +1,7 @@
-import {AggregateRating, Person, WithContext} from 'schema-dts';
-
import DoubanSubject from "./DoubanSubject";
-export default class DoubanNoteSubject extends DoubanSubject {
- author:string;
- authorUrl:string;
- content:string;
+export default class DoubanNoteSubject extends DoubanSubject {
+ author: string;
+ authorUrl: string;
+ content: string;
}
diff --git a/src/douban/data/model/DoubanSearchResultSubject.ts b/src/douban/data/model/DoubanSearchResultSubject.ts
index 8b1662b..2fcf97e 100644
--- a/src/douban/data/model/DoubanSearchResultSubject.ts
+++ b/src/douban/data/model/DoubanSearchResultSubject.ts
@@ -1,5 +1,5 @@
import DoubanSubject from "./DoubanSubject";
export default class DoubanSearchResultSubject extends DoubanSubject {
- cast:string;
+ cast: string;
}
diff --git a/src/douban/data/model/DoubanSubject.ts b/src/douban/data/model/DoubanSubject.ts
index a096b35..68a0fd3 100644
--- a/src/douban/data/model/DoubanSubject.ts
+++ b/src/douban/data/model/DoubanSubject.ts
@@ -2,16 +2,16 @@ export default class DoubanSubject {
id: string;
title: string;
type: string;
- score:number;
- image:string;
+ score: number;
+ image: string;
url: string;
desc: string;
- publisher:string;
- datePublished:Date;
- genre:string[];
+ publisher: string;
+ datePublished: Date;
+ genre: string[];
}
-const ParameterMap:Map = new Map([
+const ParameterMap: Map = new Map([
['id', ''],
]);
diff --git a/src/douban/data/model/DoubanTeleplaySubject.ts b/src/douban/data/model/DoubanTeleplaySubject.ts
index dc7263e..a14cba9 100644
--- a/src/douban/data/model/DoubanTeleplaySubject.ts
+++ b/src/douban/data/model/DoubanTeleplaySubject.ts
@@ -1,14 +1,14 @@
-import {AggregateRating, Person, WithContext} from 'schema-dts';
+import {AggregateRating, Person} from 'schema-dts';
import DoubanSubject from "./DoubanSubject";
-export default class DoubanTeleplaySubject extends DoubanSubject {
- director:Person[];
- author:Person[];
- actor:Person[];
- aggregateRating:AggregateRating;
- datePublished:Date;
- image:string;
- genre:string[];
- originalTitle:string;
+export default class DoubanTeleplaySubject extends DoubanSubject {
+ director: Person[];
+ author: Person[];
+ actor: Person[];
+ aggregateRating: AggregateRating;
+ datePublished: Date;
+ image: string;
+ genre: string[];
+ originalTitle: string;
}
diff --git a/src/douban/data/model/PropertyExplainSubject.ts b/src/douban/data/model/PropertyExplainSubject.ts
index 7893dab..97de087 100644
--- a/src/douban/data/model/PropertyExplainSubject.ts
+++ b/src/douban/data/model/PropertyExplainSubject.ts
@@ -1,9 +1,9 @@
export default class PropertyExplainSubject {
- name:string;
- desc:string;
- example:string;
+ name: string;
+ desc: string;
+ example: string;
- constructor(name:string, desc:string, example:string) {
+ constructor(name: string, desc: string, example: string) {
this.name = name;
this.desc = desc;
this.example = example;
diff --git a/src/douban/data/search/DoubanSearchFuzzySuggestModal.ts b/src/douban/data/search/DoubanSearchFuzzySuggestModal.ts
index 15e9090..fb652c0 100644
--- a/src/douban/data/search/DoubanSearchFuzzySuggestModal.ts
+++ b/src/douban/data/search/DoubanSearchFuzzySuggestModal.ts
@@ -1,8 +1,8 @@
-import { Editor, FuzzySuggestModal } from "obsidian";
+import {Editor, FuzzySuggestModal} from "obsidian";
-import DoubanPlugin from "main";
+import DoubanPlugin from "main";
import DoubanSearchResultSubject from "../model/DoubanSearchResultSubject";
-import { log } from "src/utils/Logutil";
+import {log} from "src/utils/Logutil";
import {i18nHelper} from "../../../lang/helper";
export {DoubanFuzzySuggester}
@@ -10,45 +10,44 @@ export {DoubanFuzzySuggester}
class DoubanFuzzySuggester extends FuzzySuggestModal {
- public editor: Editor;
- private plugin: DoubanPlugin;
- private doubanSearchResultExtract:DoubanSearchResultSubject[]
+ public editor: Editor;
+ private plugin: DoubanPlugin;
+ private doubanSearchResultExtract: DoubanSearchResultSubject[]
- constructor(plugin: DoubanPlugin, editor: Editor) {
- super(app);
- this.editor = editor;
- this.plugin = plugin;
- this.setPlaceholder(i18nHelper.getMessage('150101'));
+ constructor(plugin: DoubanPlugin, editor: Editor) {
+ super(app);
+ this.editor = editor;
+ this.plugin = plugin;
+ this.setPlaceholder(i18nHelper.getMessage('150101'));
- }
+ }
+ getItems(): DoubanSearchResultSubject[] {
+ return this.doubanSearchResultExtract;
+ }
- getItems(): DoubanSearchResultSubject[] {
- return this.doubanSearchResultExtract;
- }
+ getItemText(item: DoubanSearchResultSubject): string {
+ let text: string = item.type + "/" + (item.score ? item.score : '-') + "/" + item.title + "/" + item.cast;
+ return text;
+ }
- getItemText(item: DoubanSearchResultSubject): string {
- let text:string = item.type + "/" + (item.score ? item.score : '-') + "/" + item.title + "/" + item.cast;
- return text;
- }
-
- onChooseItem(item: DoubanSearchResultSubject, evt: MouseEvent | KeyboardEvent): void {
+ onChooseItem(item: DoubanSearchResultSubject, evt: MouseEvent | KeyboardEvent): void {
this.plugin.showStatus('140204', item.title);
this.plugin.doubanExtractHandler.handle(item, this.editor);
- }
+ }
- public showSearchList(doubanSearchResultExtractList:DoubanSearchResultSubject[]) {
- this.doubanSearchResultExtract = doubanSearchResultExtractList;
- this.start();
- }
+ public showSearchList(doubanSearchResultExtractList: DoubanSearchResultSubject[]) {
+ this.doubanSearchResultExtract = doubanSearchResultExtractList;
+ this.start();
+ }
- public start(): void {
- try {
- this.open();
- } catch (e) {
- log.error(e);
- }
- }
+ public start(): void {
+ try {
+ this.open();
+ } catch (e) {
+ log.error(e);
+ }
+ }
}
diff --git a/src/douban/data/search/DoubanSearchModal.ts b/src/douban/data/search/DoubanSearchModal.ts
index cc0128b..4d29867 100644
--- a/src/douban/data/search/DoubanSearchModal.ts
+++ b/src/douban/data/search/DoubanSearchModal.ts
@@ -1,64 +1,63 @@
-import { App, Editor, Modal, TextComponent } from "obsidian";
+import {App, Editor, Modal, TextComponent} from "obsidian";
import DoubanPlugin from "main";
-import { i18nHelper } from "src/lang/helper";
+import {i18nHelper} from "src/lang/helper";
export class DoubanSearchModal extends Modal {
searchTerm: string;
plugin: DoubanPlugin;
editor: Editor;
-
+
constructor(app: App, plugin: DoubanPlugin, editor: Editor) {
- super(app);
- this.plugin = plugin;
- this.editor = editor;
+ super(app);
+ this.plugin = plugin;
+ this.editor = editor;
}
-
+
onOpen() {
- let { contentEl } = this;
+ let {contentEl} = this;
- contentEl.createEl("h3", { text: i18nHelper.getMessage('110003') });
-
- const inputs = contentEl.createDiv("inputs");
- const searchInput = new TextComponent(inputs).onChange((searchTerm) => {
- this.searchTerm = searchTerm;
- });
- searchInput.inputEl.addClass("obsidian_douban_search_input");
+ contentEl.createEl("h3", {text: i18nHelper.getMessage('110003')});
- searchInput.inputEl.focus();
- searchInput.inputEl.addEventListener("keydown", (event) => {
- if (event.key === "Enter") {
- this.close();
- }
- });
-
+ const inputs = contentEl.createDiv("inputs");
+ const searchInput = new TextComponent(inputs).onChange((searchTerm) => {
+ this.searchTerm = searchTerm;
+ });
+ searchInput.inputEl.addClass("obsidian_douban_search_input");
+
+ searchInput.inputEl.focus();
+ searchInput.inputEl.addEventListener("keydown", (event) => {
+ if (event.key === "Enter") {
+ this.close();
+ }
+ });
- const controls = contentEl.createDiv("controls");
- const searchButton = controls.createEl("button", {
- text: i18nHelper.getMessage('110004'),
- cls: "mod-cta",
- attr: {
- autofocus: true,
- },
- });
- searchButton.addClass("obsidian_douban_search_button");
+ const controls = contentEl.createDiv("controls");
+ const searchButton = controls.createEl("button", {
+ text: i18nHelper.getMessage('110004'),
+ cls: "mod-cta",
+ attr: {
+ autofocus: true,
+ },
+ });
+ searchButton.addClass("obsidian_douban_search_button");
- searchButton.addEventListener("click", this.close.bind(this));
- const cancelButton = controls.createEl("button", { text: i18nHelper.getMessage('110005') });
- cancelButton.addEventListener("click", this.close.bind(this));
- cancelButton.addClass("obsidian_douban_search_button");
+ searchButton.addEventListener("click", this.close.bind(this));
+ const cancelButton = controls.createEl("button", {text: i18nHelper.getMessage('110005')});
+ cancelButton.addEventListener("click", this.close.bind(this));
+ cancelButton.addClass("obsidian_douban_search_button");
}
-
+
async onClose() {
- let { contentEl } = this;
-
- contentEl.empty();
- if (this.searchTerm) {
- await this.plugin.search(this.searchTerm, this.editor);
- }
+ let {contentEl} = this;
+
+ contentEl.empty();
+ if (this.searchTerm) {
+ await this.plugin.search(this.searchTerm, this.editor);
+ }
}
- }
+}
diff --git a/src/douban/data/search/Search.ts b/src/douban/data/search/Search.ts
index 7f818cf..d6fb9f5 100644
--- a/src/douban/data/search/Search.ts
+++ b/src/douban/data/search/Search.ts
@@ -1,25 +1,25 @@
-import { DoubanPluginSettings, doubanHeaders } from 'src/douban/Douban';
+import {DoubanPluginSettings} from 'src/douban/Douban';
import DoubanSearchResultSubject from '../model/DoubanSearchResultSubject';
import SearchParserHandler from './SearchParser';
-import { log } from 'src/utils/Logutil';
+import {log} from 'src/utils/Logutil';
import {request, RequestUrlParam} from "obsidian";
import {i18nHelper} from "../../../lang/helper";
-import { load } from 'cheerio';
+import {load} from 'cheerio';
export default class Searcher {
- static search(searchItem:string, doubanSettings:DoubanPluginSettings):Promise {
- let requestUrlParam:RequestUrlParam = {
- url: doubanSettings.searchUrl + searchItem,
- method: "GET",
- headers: JSON.parse(doubanSettings.searchHeaders),
- throw: true
- };
- return request(requestUrlParam)
- .then(load)
- .then(SearchParserHandler.parseSearch)
- .catch(e => log.error(i18nHelper.getMessage('130101')))
- ;
+ static search(searchItem: string, doubanSettings: DoubanPluginSettings): Promise {
+ let requestUrlParam: RequestUrlParam = {
+ url: doubanSettings.searchUrl + searchItem,
+ method: "GET",
+ headers: JSON.parse(doubanSettings.searchHeaders),
+ throw: true
+ };
+ return request(requestUrlParam)
+ .then(load)
+ .then(SearchParserHandler.parseSearch)
+ .catch(e => log.error(i18nHelper.getMessage('130101')))
+ ;
- };
+ };
}
diff --git a/src/douban/data/search/SearchParser.ts b/src/douban/data/search/SearchParser.ts
index 0a6f045..5402780 100644
--- a/src/douban/data/search/SearchParser.ts
+++ b/src/douban/data/search/SearchParser.ts
@@ -1,23 +1,23 @@
-import { CheerioAPI } from "cheerio";
+import {CheerioAPI} from "cheerio";
import DoubanSearchResultSubject from "../model/DoubanSearchResultSubject";
export default class SearchParserHandler {
- static parseSearch(dataHtml:CheerioAPI):DoubanSearchResultSubject[] {
- return dataHtml('.result')
- .get()
- .map((i:any) => {
- const item = dataHtml(i);
- let idPattern = /(\d){5,10}/g;
- let urlPattern = /(https%3A%2F%2F)\S+(\d){5,10}/g;
- let linkValue = item.find("div.content > div > h3 > a").attr("href");
- let ececResult = idPattern.exec(linkValue);
- let urlResult = urlPattern.exec(linkValue);
- let cast = item.find(".subject-cast").text();
+ static parseSearch(dataHtml: CheerioAPI): DoubanSearchResultSubject[] {
+ return dataHtml('.result')
+ .get()
+ .map((i: any) => {
+ const item = dataHtml(i);
+ let idPattern = /(\d){5,10}/g;
+ let urlPattern = /(https%3A%2F%2F)\S+(\d){5,10}/g;
+ let linkValue = item.find("div.content > div > h3 > a").attr("href");
+ let ececResult = idPattern.exec(linkValue);
+ let urlResult = urlPattern.exec(linkValue);
+ let cast = item.find(".subject-cast").text();
let score = item.find(".rating_nums").text();
let title = item.find("div.content > div > h3 > a").text();
let type = item.find("div.content > div > h3 > span").text();
let desc = item.find("div.content > p").text();
- const result:DoubanSearchResultSubject = {
+ const result: DoubanSearchResultSubject = {
id: ececResult ? ececResult[0] : '',
title: title ? title : '-',
score: score ? Number(score) : null,
@@ -30,7 +30,7 @@ export default class SearchParserHandler {
datePublished: undefined,
genre: []
};
- return result;
- })
- };
+ return result;
+ })
+ };
}
diff --git a/src/lang/helper.ts b/src/lang/helper.ts
index 1fe2c53..ee9f129 100644
--- a/src/lang/helper.ts
+++ b/src/lang/helper.ts
@@ -1,23 +1,23 @@
-import en from './locale/en';
-import zhCN from './locale/zh-cn';
-
-const localeMap: { [k: string]: Partial } = {
- en,
- zh: zhCN,
-};
-
-const lang = window.localStorage.getItem('language');
-const locale = localeMap[lang || 'en'];
-
-
-export default class I18nHelper {
- public getMessage(str: keyof typeof en): string {
- if (!locale) {
- console.error('Error: obsidian douban locale not found', lang);
- }
-
- return (locale && locale[str]) || en[str];
- }
-}
-
-export const i18nHelper:I18nHelper = new I18nHelper();
\ No newline at end of file
+import en from './locale/en';
+import zhCN from './locale/zh-cn';
+
+const localeMap: { [k: string]: Partial } = {
+ en,
+ zh: zhCN,
+};
+
+const lang = window.localStorage.getItem('language');
+const locale = localeMap[lang || 'en'];
+
+
+export default class I18nHelper {
+ public getMessage(str: keyof typeof en): string {
+ if (!locale) {
+ console.error('Error: obsidian douban locale not found', lang);
+ }
+
+ return (locale && locale[str]) || en[str];
+ }
+}
+
+export const i18nHelper: I18nHelper = new I18nHelper();
diff --git a/src/lang/locale/en.ts b/src/lang/locale/en.ts
index 87bd18a..1b84d50 100644
--- a/src/lang/locale/en.ts
+++ b/src/lang/locale/en.ts
@@ -1,53 +1,53 @@
//简体中文
export default {
- //main.ts
- '110001': 'search douban by current file name',
- '110002': 'search douban and import to current file',
- '110003': `Enter Search Term:`,
- '110004': `Search`,
- '110005': `Cancel`,
- '110006': `sync douban broadcast ot Obsidian`,
+ //main.ts
+ '110001': 'search douban by current file name',
+ '110002': 'search douban and import to current file',
+ '110003': `Enter Search Term:`,
+ '110004': `Search`,
+ '110005': `Cancel`,
+ '110006': `sync douban broadcast ot Obsidian`,
- //DoubanSettingTab
- '1201' : `Obsidian Douban`,
- '120001': `Douban Search Url`,
- '120002': `Douban search page request address. `,
- '120003': `First go to:`,
- '120004': `Don't enter anything in the search input box, just click Search,`,
- '120005': `The redirected web page address is the search address,`,
- '120006': `Just copy the web address to the current input box.`,
+ //DoubanSettingTab
+ '1201': `Obsidian Douban`,
+ '120001': `Douban Search Url`,
+ '120002': `Douban search page request address. `,
+ '120003': `First go to:`,
+ '120004': `Don't enter anything in the search input box, just click Search,`,
+ '120005': `The redirected web page address is the search address,`,
+ '120006': `Just copy the web address to the current input box.`,
- '120101': `Movie Content Template`,
- '120102': `Set markdown Movie template for extract to be inserted.`,
- '120103': `Available template variables are :`,
- '120104': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
- '120105': `{{url}}, {{desc}}, {{datePublished}}, {{genre}}, `,
- '120106': `{{originalTitle}},{{director}}, {{author}},`,
- '120107': ` {{actor}}`,
+ '120101': `Movie Content Template`,
+ '120102': `Set markdown Movie template for extract to be inserted.`,
+ '120103': `Available template variables are :`,
+ '120104': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
+ '120105': `{{url}}, {{desc}}, {{datePublished}}, {{genre}}, `,
+ '120106': `{{originalTitle}},{{director}}, {{author}},`,
+ '120107': ` {{actor}}`,
- '120201': `Book Content Template`,
- '120202': `Set markdown Book template for extract to be inserted.`,
- '120203': `Available Book template variables are :`,
+ '120201': `Book Content Template`,
+ '120202': `Set markdown Book template for extract to be inserted.`,
+ '120203': `Available Book template variables are :`,
'120204': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
'120205': `{{url}}, {{desc}}, {{datePublished}}, {{publisher}}`,
- '120206': `{{originalTitle}}, {{subTitle}}, {{author}},`,
- '120207': `{{translator}}, {{isbn}}, {{price}}, {{totalPage}}`,
+ '120206': `{{originalTitle}}, {{subTitle}}, {{author}},`,
+ '120207': `{{translator}}, {{isbn}}, {{price}}, {{totalPage}}`,
'120208': `{{series}}, {{binding}}, {{menu}}`,
'120301': `Music Content Template`,
- '120302': `Set markdown Music template for extract to be inserted.`,
- '120303': `Available Music template variables are :`,
+ '120302': `Set markdown Music template for extract to be inserted.`,
+ '120303': `Available Music template variables are :`,
'120304': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
'120305': `{{url}}, {{desc}}, {{datePublished}}, {{genre}},`,
- '120306': `{{actor}}, {{medium}}, {{albumType}},`,
- '120307': `{{barcode}}, {{numberOfRecords}}`,
+ '120306': `{{actor}}, {{medium}}, {{albumType}},`,
+ '120307': `{{barcode}}, {{numberOfRecords}}`,
- '120401': `Article Content Template`,
- '120402': `Set markdown Article template for extract to be inserted.`,
- '120403': `Available Article template variables are :`,
+ '120401': `Article Content Template`,
+ '120402': `Set markdown Article template for extract to be inserted.`,
+ '120403': `Available Article template variables are :`,
'120404': `{{id}}, {{title}}, {{type}}, {{image}},`,
'120405': `{{url}}, {{desc}}, {{datePublished}}`,
- '120406': `{{author}}, {{authorUrl}}, {{content}}`,
+ '120406': `{{author}}, {{authorUrl}}, {{content}}`,
'120407': `{{timePublished}}`,
'121301': `Game Content Template`,
@@ -56,36 +56,36 @@ export default {
'121304': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
'121305': `{{url}}, {{desc}}, {{publisher}}, {{datePublished}}`,
'121306': `{{genre}}, {{aliases}}, {{developer}}, {{platform}}`,
-
- '120501': `Date Format`,
- '120502': `Time Format`,
- '120503': `This format will be used when available template variables contain date.`,
- '120504': `This format will be used when available template variables contain time.`,
- '120506': `For more syntax, refer to`,
- '120507': `Your current syntax looks like this`,
- '120508': `format reference`,
- '120601': `Array Spilt String`,
- '120602': `string to join between array type, such as authors, actors.
+ '120501': `Date Format`,
+ '120502': `Time Format`,
+ '120503': `This format will be used when available template variables contain date.`,
+ '120504': `This format will be used when available template variables contain time.`,
+
+ '120506': `For more syntax, refer to`,
+ '120507': `Your current syntax looks like this`,
+ '120508': `format reference`,
+ '120601': `Array Spilt String`,
+ '120602': `string to join between array type, such as authors, actors.
example: ','
the list of actor's name will be shown as: 'actor1,actor2,actor3'`,
- '120701': `Douban Request Headers`,
- '120801': `This type of import is not supported temporarily, please go to github to submit issues for help`,
- '120901': `Douban`,
- '121201': `Person Name Language Mode`,
- '121202': `options:`,
- '121203': `Chinese Name mode, person name only show Chinese name`,
- '121204': `English Name mode, person name only show English name`,
- '121205': `Chinese English Name mode, show Chinese and English name both`,
- '121206': `Chinese Name`,
- '121207': `English Name`,
- '121208': `Chinese And English Name`,
+ '120701': `Douban Request Headers`,
+ '120801': `This type of import is not supported temporarily, please go to github to submit issues for help`,
+ '120901': `Douban`,
+ '121201': `Person Name Language Mode`,
+ '121202': `options:`,
+ '121203': `Chinese Name mode, person name only show Chinese name`,
+ '121204': `English Name mode, person name only show English name`,
+ '121205': `Chinese English Name mode, show Chinese and English name both`,
+ '121206': `Chinese Name`,
+ '121207': `English Name`,
+ '121208': `Chinese And English Name`,
- //error
- '130101': `Fetch Data Error, You can go to Github add Issues`,
- '130201': `Obsidian Douban Plugin Error: `,
- '130301': `Obsidian Douban Plugin Warn: `,
+ //error
+ '130101': `Fetch Data Error, You can go to Github add Issues`,
+ '130201': `Obsidian Douban Plugin Error: `,
+ '130301': `Obsidian Douban Plugin Warn: `,
'140101': `Not support for current type. You can add Issues at Github:Wanxp/obsidian-douban`,
'140201': `[Obsidian Douban]: searching '{0}'...`,
diff --git a/src/lang/locale/zh-cn.ts b/src/lang/locale/zh-cn.ts
index e16d039..0ed3692 100644
--- a/src/lang/locale/zh-cn.ts
+++ b/src/lang/locale/zh-cn.ts
@@ -1,36 +1,34 @@
//简体中文
-import DoubanBookSubject from "@App/data/model/DoubanBookSubject";
-import {extract} from "jest-docblock";
export default {
- //main.ts
- '110001': '用当前文档名搜索豆瓣并写入当前文档',
- '110002': '在豆瓣搜索并写入到当前文档',
- '110003': `输入搜索内容:`,
- '110004': `搜索`,
- '110005': `取消`,
- '110006': `同步豆瓣广播至Obsidian`,
+ //main.ts
+ '110001': '用当前文档名搜索豆瓣并写入当前文档',
+ '110002': '在豆瓣搜索并写入到当前文档',
+ '110003': `输入搜索内容:`,
+ '110004': `搜索`,
+ '110005': `取消`,
+ '110006': `同步豆瓣广播至Obsidian`,
- //DoubanSettingTab
- '1201' : `Obsidian-豆瓣`,
- '120001': `豆瓣搜索地址`,
- '120002': `豆瓣搜索页面请求地址, 通常是网页搜索的地址. `,
- '120003': `先访问:`,
- '120004': `然后在搜索输入框不输入任何内容,直接点击搜索,`,
- '120005': `所跳转的网页地址即是搜索地址,`,
- '120006': `将网页地址复制到当前输入框即可,`,
+ //DoubanSettingTab
+ '1201': `Obsidian-豆瓣`,
+ '120001': `豆瓣搜索地址`,
+ '120002': `豆瓣搜索页面请求地址, 通常是网页搜索的地址. `,
+ '120003': `先访问:`,
+ '120004': `然后在搜索输入框不输入任何内容,直接点击搜索,`,
+ '120005': `所跳转的网页地址即是搜索地址,`,
+ '120006': `将网页地址复制到当前输入框即可,`,
- '120101': `电影文本模板`,
- '120102': `设置选择电影后导入的文本内容模板,`,
- '120103': `支持以下参数名称 :`,
+ '120101': `电影文本模板`,
+ '120102': `设置选择电影后导入的文本内容模板,`,
+ '120103': `支持以下参数名称 :`,
'120104': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
'120105': `{{url}}, {{desc}}, {{datePublished}}, {{genre}}, `,
'120106': `{{originalTitle}},{{director}}, {{author}},`,
'120107': ` {{actor}}`,
- '120201': `书籍文本模板`,
- '120202': `设置选择书籍后导入的文本内容模板,`,
- '120203': `支持以下参数名称 :`,
+ '120201': `书籍文本模板`,
+ '120202': `设置选择书籍后导入的文本内容模板,`,
+ '120203': `支持以下参数名称 :`,
'120204': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
'120205': `{{url}}, {{desc}}, {{datePublished}}, {{publisher}}`,
'120206': `{{originalTitle}}, {{subTitle}}, {{author}},`,
@@ -39,16 +37,16 @@ export default {
'120301': `音乐文本模板`,
- '120302': `设置选择音乐后导入的文本内容模板,`,
- '120303': `支持以下参数名称 :`,
+ '120302': `设置选择音乐后导入的文本内容模板,`,
+ '120303': `支持以下参数名称 :`,
'120304': `{{id}}, {{title}}, {{type}}, {{image}},`,
'120305': `{{url}}, {{desc}}, {{datePublished}}`,
'120306': `{{genre}}, {{actor}}, {{medium}}, {{albumType}},`,
'120307': `{{barcode}}, {{numberOfRecords}}`,
- '120401': `日记文本模板`,
- '120402': `设置选择日记后导入的文本内容模板,`,
- '120403': `支持以下参数名称 :`,
+ '120401': `日记文本模板`,
+ '120402': `设置选择日记后导入的文本内容模板,`,
+ '120403': `支持以下参数名称 :`,
'120404': `{{id}}, {{title}}, {{type}}, {{image}},`,
'120405': `{{url}}, {{desc}}, {{datePublished}}`,
'120406': `{{author}}, {{authorUrl}}, {{content}}`,
@@ -62,38 +60,38 @@ export default {
'121306': `{{genre}}, {{aliases}}, {{developer}}, {{platform}}`,
- '120501': `日期格式`,
- '120503': `这个格式是给上面获取到的参数进行格式化日期时显示的内容 .`,
- '120502': `时间格式`,
- '120504': `这个格式是给上面获取到的参数进行格式化时间时显示的内容 .`,
- '120506': `详细介绍请参考`,
- '120507': `时间参数时间格式预览`,
- '120508': `格式参考`,
- '120601': `数组分割字符串`,
- '120602': `当模板中的变量存在数组, 则需要设定数组元素中的分割符号,比如演员列表等.
+ '120501': `日期格式`,
+ '120503': `这个格式是给上面获取到的参数进行格式化日期时显示的内容 .`,
+ '120502': `时间格式`,
+ '120504': `这个格式是给上面获取到的参数进行格式化时间时显示的内容 .`,
+ '120506': `详细介绍请参考`,
+ '120507': `时间参数时间格式预览`,
+ '120508': `格式参考`,
+ '120601': `数组分割字符串`,
+ '120602': `当模板中的变量存在数组, 则需要设定数组元素中的分割符号,比如演员列表等.
举例: ','
则演员表将会显示为: '演员1,演员2,演员3'`,
- '120701': `豆瓣HTTP请求头`,
- '120702': `如果豆瓣搜索或者获取数据失败,请尝试修改这个参数,\n
+ '120701': `豆瓣HTTP请求头`,
+ '120702': `如果豆瓣搜索或者获取数据失败,请尝试修改这个参数,\n
参数获取方式为:\n
1. 访问http://www.douban.com
2. 复制请求头,仅复制以下请求头 `,
- '120801': `暂时不支持该类型导入,请至Github提交issuess获取帮助`,
- '120901': `豆瓣网`,
+ '120801': `暂时不支持该类型导入,请至Github提交issuess获取帮助`,
+ '120901': `豆瓣网`,
- '121201': `人名显示模式`,
- '121202': `可选项:`,
- '121203': `中文名称模式, 人名只显示中文名`,
- '121204': `英文名称模式, 人名只显示英文名`,
- '121205': `中文和英文名称模式, 人名同时显示中文和英文名`,
- '121206': `中文名`,
- '121207': `英文名`,
- '121208': `中文名和英文名`,
+ '121201': `人名显示模式`,
+ '121202': `可选项:`,
+ '121203': `中文名称模式, 人名只显示中文名`,
+ '121204': `英文名称模式, 人名只显示英文名`,
+ '121205': `中文和英文名称模式, 人名同时显示中文和英文名`,
+ '121206': `中文名`,
+ '121207': `英文名`,
+ '121208': `中文名和英文名`,
- '130101': `获取数据失败,您如有需要请至Github提交Issues`,
- '130102': `Obsidian Douban插件错误提示:`,
- '130103': `Obsidian Douban插件异常提示:`,
- '140101': `当前版本暂不支持该类型导入,请升级Obsidian Douban或至github提交issuess获取帮助`,
+ '130101': `获取数据失败,您如有需要请至Github提交Issues`,
+ '130102': `Obsidian Douban插件错误提示:`,
+ '130103': `Obsidian Douban插件异常提示:`,
+ '140101': `当前版本暂不支持该类型导入,请升级Obsidian Douban或至github提交issuess获取帮助`,
'140201': `[Obsidian Douban]: 开始搜索'{0}'...`,
'140202': `[Obsidian Douban]: 搜索条数{0}条`,
@@ -109,23 +107,26 @@ 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`},
+ }
}
diff --git a/src/utils/Logutil.ts b/src/utils/Logutil.ts
index f2a7752..45cd5c0 100644
--- a/src/utils/Logutil.ts
+++ b/src/utils/Logutil.ts
@@ -1,35 +1,34 @@
-import { Notice } from "obsidian";
-import SchemaOrg from "./SchemaOrg";
-import { i18nHelper } from "src/lang/helper";
+import {Notice} from "obsidian";
+import {i18nHelper} from "src/lang/helper";
class Logger {
- public error(e:any):any {
- new Notice(i18nHelper.getMessage('130201') + e);
- return e;
- }
+ public error(e: any): any {
+ new Notice(i18nHelper.getMessage('130201') + e);
+ return e;
+ }
- public warn(e:any):any {
- new Notice(i18nHelper.getMessage('130301') + e);
- return e;
- }
+ public warn(e: any): any {
+ new Notice(i18nHelper.getMessage('130301') + e);
+ return e;
+ }
- public info(e:any):any {
- console.log(`Douban Plugin info:` + `${typeof e == 'string' ? e : JSON.stringify(e)}`);
- return e;
- }
+ public info(e: any): any {
+ console.log(`Douban Plugin info:` + `${typeof e == 'string' ? e : JSON.stringify(e)}`);
+ return e;
+ }
- public trace(e:any):any {
- // return e;
- console.log(`Douban Plugin trace:` + `${typeof e == 'string' ? e : JSON.stringify(e)}`);
- return e;
- }
+ public trace(e: any): any {
+ // return e;
+ console.log(`Douban Plugin trace:` + `${typeof e == 'string' ? e : JSON.stringify(e)}`);
+ return e;
+ }
- public traceN(notion:string, e:any):any {
- // return e;
- console.log(`${notion} ${typeof e == 'string' ? e : JSON.stringify(e)}`);
- return e;
- }
+ public traceN(notion: string, e: any): any {
+ // return e;
+ console.log(`${notion} ${typeof e == 'string' ? e : JSON.stringify(e)}`);
+ return e;
+ }
}
-export const log:Logger = new Logger();
+export const log: Logger = new Logger();
diff --git a/src/utils/SchemaOrg.ts b/src/utils/SchemaOrg.ts
index 50a1a82..f0bc169 100644
--- a/src/utils/SchemaOrg.ts
+++ b/src/utils/SchemaOrg.ts
@@ -1,25 +1,25 @@
-import { Person } from "schema-dts";
-
-export default class SchemaOrg {
- public static getPersonName(p:Person):string {
- if(isString(p)) {
- return p;
- }else {
- let name: any = getProperty(p, 'name');
- return name + "";
- }
- }
-
-
-}
-
-function isString(s:any): s is string {
- return typeof s === 'string';
- }
-
-
-function getProperty(o: T, name: K): T[K] {
- return o[name];
-}
-
-
+import {Person} from "schema-dts";
+
+export default class SchemaOrg {
+ public static getPersonName(p: Person): string {
+ if (isString(p)) {
+ return p;
+ } else {
+ let name: any = getProperty(p, 'name');
+ return name + "";
+ }
+ }
+
+
+}
+
+function isString(s: any): s is string {
+ return typeof s === 'string';
+}
+
+
+function getProperty(o: T, name: K): T[K] {
+ return o[name];
+}
+
+
diff --git a/src/utils/YamlUtil.ts b/src/utils/YamlUtil.ts
index ea83528..6df260a 100644
--- a/src/utils/YamlUtil.ts
+++ b/src/utils/YamlUtil.ts
@@ -1,15 +1,12 @@
-import {i18nHelper} from "../lang/helper";
-
export default class YamlUtil {
-
- public static hasSpecialChar(str:string):boolean {
+ public static hasSpecialChar(str: string): boolean {
return SPECIAL_CHAR_REG.test(str);
}
- public static handleSpecialChar(text: string):string {
+ public static handleSpecialChar(text: string): string {
// return this.hasSpecialChar(text) ? text.replace(SPECIAL_CHAR_REG, (match, p1) => {
// return SPECIAL_CHAR_REG_REPLACE.get(p1) || p1;
// }) : text;
@@ -26,7 +23,7 @@ export default class YamlUtil {
}
const SPECIAL_CHAR_REG = /[{}\[\]&*#?|\-<>=!%@:`,\n]/;
-const SPECIAL_CHAR_REG_REPLACE:Map = new Map([
+const SPECIAL_CHAR_REG_REPLACE: Map = new Map([
['{', '\\{'],
]);