From a10dfe32b76e4560689c3ebea2315a5baa82edad Mon Sep 17 00:00:00 2001 From: wanxp <977741432@qq.com> Date: Mon, 31 Oct 2022 00:43:55 +0800 Subject: [PATCH] format code style --- README.md | 42 +- src/constant/Constsant.ts | 2 +- src/douban/Douban.ts | 58 +- src/douban/DoubanSettingTab.ts | 564 +++++++++--------- src/douban/ResponseHandle.ts | 26 +- .../handler/DoubanBroadcastAbstractHandler.ts | 24 +- .../handler/DoubanBroadcastMovieHandler.ts | 21 +- .../handler/DoubanPageBroadcastTransformer.ts | 44 +- .../handler/DoubanPageBroadcatLoadHandler.ts | 95 ++- .../model/DoubanBroadcastMoveSubject.ts | 2 +- .../broadcast/model/DoubanBroadcastSubject.ts | 10 +- .../model/DoubanPageBroadcastSubject.ts | 8 +- .../data/handler/DoubanAbstractLoadHandler.ts | 212 ++++--- .../data/handler/DoubanBookLoadHandler.ts | 133 ++--- .../data/handler/DoubanGameLoadHandler.ts | 49 +- .../data/handler/DoubanMovieLoadHandler.ts | 101 ++-- .../data/handler/DoubanMusicLoadHandler.ts | 141 +++-- .../data/handler/DoubanNoteLoadHandler.ts | 61 +- .../data/handler/DoubanOtherLoadHandler.ts | 28 +- .../handler/DoubanSearchChooseItemHandler.ts | 91 ++- .../data/handler/DoubanSubjectLoadHandler.ts | 12 +- .../data/handler/DoubanTeleplayLoadHandler.ts | 93 ++- src/douban/data/model/DoubanBookSubject.ts | 25 +- src/douban/data/model/DoubanGameSubject.ts | 9 +- src/douban/data/model/DoubanMovieSubject.ts | 16 +- src/douban/data/model/DoubanMusicSubject.ts | 14 +- src/douban/data/model/DoubanNoteSubject.ts | 10 +- .../data/model/DoubanSearchResultSubject.ts | 2 +- src/douban/data/model/DoubanSubject.ts | 12 +- .../data/model/DoubanTeleplaySubject.ts | 20 +- .../data/model/PropertyExplainSubject.ts | 8 +- .../search/DoubanSearchFuzzySuggestModal.ts | 65 +- src/douban/data/search/DoubanSearchModal.ts | 85 ++- src/douban/data/search/Search.ts | 32 +- src/douban/data/search/SearchParser.ts | 32 +- src/lang/helper.ts | 46 +- src/lang/locale/en.ts | 120 ++-- src/lang/locale/zh-cn.ts | 145 ++--- src/utils/Logutil.ts | 51 +- src/utils/SchemaOrg.ts | 50 +- src/utils/YamlUtil.ts | 9 +- 41 files changed, 1262 insertions(+), 1306 deletions(-) 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}} ![image]({{image}}) `, - 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}} ![image|150]({{image}}) `, -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([ ['{', '\\{'], ]);