From 824296a8a7ac7c58cc654e9fd6ed415e281d084c Mon Sep 17 00:00:00 2001 From: wanxp <977741432@qq.com> Date: Mon, 20 Jun 2022 23:28:18 +0800 Subject: [PATCH] complete douban book import --- douban/Douban.ts | 24 ++++++++--------- douban/DoubanSettingTab.ts | 29 ++++++++++++++++++++ douban/handler/DoubanBookLoadHandler.ts | 36 +++++++++++++++++-------- lang/locale/en.ts | 12 +++++++-- lang/locale/zh-cn.ts | 8 ++++++ 5 files changed, 84 insertions(+), 25 deletions(-) diff --git a/douban/Douban.ts b/douban/Douban.ts index 4e84d62..62999cd 100644 --- a/douban/Douban.ts +++ b/douban/Douban.ts @@ -25,8 +25,8 @@ export const doubanHeadrs = { }; export const DEFAULT_SETTINGS:DoubanPluginSettings = { - movieTemplate: ` ---- + movieTemplate: +`![image]({{image}}) doubanId: {{id}} title: {{title}} type: {{type}} @@ -36,10 +36,10 @@ director: {{director}} actor: {{actor}} author: {{author}} url: {{url}} -image: {{image}} ----`, - bookTemplate: ` ---- +desc: {{desc}} +`, + bookTemplate: +`--- doubanId: {{id}} title: {{title}} subTitle: {{subTitle}} @@ -49,18 +49,18 @@ author: {{author}} score: {{score}} datePublished: {{datePublished}} translator: {{translator}} -publish: {{publish} +publish: {{publish}} isbn: {{isbn}} url: {{url}} -image: {{image}} -totalWord: {{totalWord}} totalPage: {{totalPage}} price: {{price}} -tags: Book, {{labels}} +tags: Book +desc: {{desc}} --- +![image|150]({{image}}) +`, +// totalWord: {{totalWord}} -- Menu -{{menu}}`, searchUrl: 'https://www.douban.com/search?q=', searchHeaders: JSON.stringify(doubanHeadrs), dateFormat: "yyyy_MM_DD", diff --git a/douban/DoubanSettingTab.ts b/douban/DoubanSettingTab.ts index 0cb6798..0c5c859 100644 --- a/douban/DoubanSettingTab.ts +++ b/douban/DoubanSettingTab.ts @@ -88,6 +88,35 @@ export class DoubanSettingTab extends PluginSettingTab { }); }); + new Setting(containerEl).setName(i18nHelper.getMessage("book content template")).then((setting) => { + setting.addTextArea((textarea) => { + setting.descEl.appendChild( + createFragment((frag) => { + frag.appendText(i18nHelper.getMessage('book content template desc 1')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('book content template desc 2')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('book content template desc 3')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('book content template desc 4')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('book content template desc 5')); + frag.createEl('br'); + frag.appendText(i18nHelper.getMessage('book content template desc 6')); + frag.createEl('br'); + }) + ); + textarea.inputEl.addClass("settings_area"); + textarea.inputEl.setAttr("rows", 10); + 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("Person Name Language Mode")).then((setting) => { setting.addDropdown((dropdwon) => { setting.descEl.appendChild( diff --git a/douban/handler/DoubanBookLoadHandler.ts b/douban/handler/DoubanBookLoadHandler.ts index 627d0b3..b68d8b7 100644 --- a/douban/handler/DoubanBookLoadHandler.ts +++ b/douban/handler/DoubanBookLoadHandler.ts @@ -9,7 +9,6 @@ import DoubanSubject from "douban/model/DoubanSubject"; export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler { - parseText(extract: DoubanBookSubject, settings:DoubanPluginSettings): string { return settings.bookTemplate ? settings.bookTemplate.replaceAll("{{id}}", extract.id) .replaceAll("{{type}}", extract.type ? extract.type : "") @@ -53,9 +52,11 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler meta[property= 'og:type']").get(0)).attr("content"); var author = html(html("head > meta[property= 'book:author']").get(0)).attr("content"); var isbn = html(html("head > meta[property= 'book:isbn']").get(0)).attr("content"); - var detailDom = html(html("#info").get(0)) + var score = html(html("#interest_sectl > div > div.rating_self.clearfix > strong[property= 'v:average']").get(0)).text(); + var detailDom = html(html("#info").get(0)); var publish = detailDom.find("span.pl"); + var valueMap = new Map(); publish.map((index, info) => { let key = html(info).text().trim(); @@ -65,7 +66,7 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler = new Map( + [['作者', 'author'], + ['出版社:', 'publish'], + ['原作名:', 'originalTitle'], + ['出版年:', 'datePublished'], + ['页数:', 'totalPage'], + ['定价:', 'price'], + ['装帧:', 'binding'], + ['丛书:', 'bush'], + ['ISBN:', 'isbn'], + ['译者', 'translator'], + ] +); \ No newline at end of file diff --git a/lang/locale/en.ts b/lang/locale/en.ts index 7d6a2fe..fd7e68e 100644 --- a/lang/locale/en.ts +++ b/lang/locale/en.ts @@ -15,12 +15,20 @@ export default { 'douban search url desc 5': `Just copy the web address to the current input box.`, 'movie content template': `Movie Content Template`, - 'movie content template desc 1': `Set markdown template for extract to be inserted.`, + 'movie content template desc 1': `Set markdown Movie template for extract to be inserted.`, 'movie content template desc 2': `Available template variables are :`, 'movie content template desc 3': `{{id}}, {{type}}, {{title}},`, 'movie content template desc 4': `{{score}}, {{datePublished}}, {{director}},`, - 'movie content template desc 5': `{{author}}, {{autor}}, {{desc}},`, + 'movie content template desc 5': `{{author}}, {{actor}}, {{desc}},`, 'movie content template desc 6': `{{image}}, {{url}}`, + + 'book content template': `Book Content Template`, + 'book content template desc 1': `Set markdown Book template for extract to be inserted.`, + 'book content template desc 2': `Available Book template variables are :`, + 'book content template desc 3': `{{id}}, {{title}}, {{originalTitle}}, {{subTitle}},`, + 'book content template desc 4': `{{score}}, {{author}}, {{datePublished}}, {{type}},`, + 'book content template desc 5': `{{publish}}, {{desc}}, {{translator}}, {{isbn}},`, + 'book content template desc 6': `{{image}}, {{url}}, {{price}}, {{desc}}, {{totalPage}}`, 'Date format': `Date Format`, 'This format will be used when available template variables contain date.': diff --git a/lang/locale/zh-cn.ts b/lang/locale/zh-cn.ts index 496a45a..0ecbcfb 100644 --- a/lang/locale/zh-cn.ts +++ b/lang/locale/zh-cn.ts @@ -23,6 +23,14 @@ export default { 'movie content template desc 5': `{{author}}, {{autor}}, {{desc}},`, 'movie content template desc 6': `{{image}}, {{url}}`, + 'book content template': `书籍文本模板`, + 'book content template desc 1': `设置选择书籍后导入的文本内容模板,`, + 'book content template desc 2': `支持以下参数名称 :`, + 'book content template desc 3': `{{id}}, {{title}}, {{originalTitle}}, {{subTitle}},`, + 'book content template desc 4': `{{score}}, {{author}}, {{datePublished}}, {{type}},`, + 'book content template desc 5': `{{publish}}, {{desc}}, {{translator}}, {{isbn}},`, + 'book content template desc 6': `{{image}}, {{url}}, {{price}}, {{desc}}, {{totalPage}}`, + 'Date format': `参数日期格式`, 'This format will be used when available template variables contain date.': `这个格式是给上面获取到的参数进行格式化时显示的内容 .`,