From 8701547f7989751a21e6b425451d22df75050353 Mon Sep 17 00:00:00 2001 From: wanxp <977741432@qq.com> Date: Tue, 25 Oct 2022 10:55:05 +0800 Subject: [PATCH] change var to let and make all class names more specific --- main.ts | 2 +- manifest.json | 20 +-- src/douban/DoubanSettingTab.ts | 10 +- .../handler/DoubanPageBroadcastTransformer.ts | 62 +++---- .../handler/DoubanPageBroadcatLoadHandler.ts | 22 +-- .../data/handler/DoubanAbstractLoadHandler.ts | 11 +- .../data/handler/DoubanBookLoadHandler.ts | 26 +-- .../data/handler/DoubanMovieLoadHandler.ts | 18 +- .../data/handler/DoubanMusicLoadHandler.ts | 24 +-- .../data/handler/DoubanNoteLoadHandler.ts | 20 +-- .../handler/DoubanSearchChooseItemHandler.ts | 6 +- .../data/handler/DoubanTeleplayLoadHandler.ts | 160 +++++++++--------- src/douban/data/search/DoubanSearchModal.ts | 8 +- src/douban/data/search/SearchParser.ts | 14 +- src/utils/Logutil.ts | 6 +- styles.css | 54 +++--- 16 files changed, 232 insertions(+), 231 deletions(-) diff --git a/main.ts b/main.ts index 64c388b..37e295e 100644 --- a/main.ts +++ b/main.ts @@ -20,7 +20,7 @@ export default class DoubanPlugin extends Plugin { return; } log.trace(`you choose item load data success: ${JSON.stringify(extract)}`); - var content:string = this.doubanEtractHandler.parseText(extract, this.settings) + let content:string = this.doubanEtractHandler.parseText(extract, this.settings) if(content) { editor.replaceSelection(content); } diff --git a/manifest.json b/manifest.json index 30d9c61..7583355 100644 --- a/manifest.json +++ b/manifest.json @@ -1,10 +1,10 @@ -{ - "id": "obsidian-douban-plugin", - "name": "Douban", - "version": "v1.4.3", - "minAppVersion": "0.12.0", - "description": "This is a plugin that can import movies, books or musics info data from Douban for Obsidian .", - "author": "Wanxp", - "authorUrl": "https://obsidian-douban.wanxuping.com", - "isDesktopOnly": true -} +{ + "id": "obsidian-douban-plugin", + "name": "Douban", + "version": "v1.4.3", + "minAppVersion": "0.12.0", + "description": "This is a plugin that can import movies, books or musics info data from Douban for Obsidian .", + "author": "Wanxp", + "authorUrl": "https://obsidian-douban.wanxuping.com", + "isDesktopOnly": false +} diff --git a/src/douban/DoubanSettingTab.ts b/src/douban/DoubanSettingTab.ts index f333d25..5640103 100644 --- a/src/douban/DoubanSettingTab.ts +++ b/src/douban/DoubanSettingTab.ts @@ -46,7 +46,7 @@ export class DoubanSettingTab extends PluginSettingTab { frag.createEl('br'); }) ); - textField.inputEl.addClass("settings_textField"); + textField.inputEl.addClass("obsidian_douban_settings_textField"); textField .setPlaceholder(DEFAULT_SETTINGS.searchUrl) .setValue(this.plugin.settings.searchUrl) @@ -76,7 +76,7 @@ export class DoubanSettingTab extends PluginSettingTab { frag.createEl('br'); }) ); - textarea.inputEl.addClass("settings_area"); + textarea.inputEl.addClass("obsidian_douban_settings_area"); textarea.inputEl.setAttr("rows", 10); textarea.setPlaceholder(DEFAULT_SETTINGS.movieTemplate) .setValue(this.plugin.settings.movieTemplate) @@ -105,7 +105,7 @@ export class DoubanSettingTab extends PluginSettingTab { frag.createEl('br'); }) ); - textarea.inputEl.addClass("settings_area"); + textarea.inputEl.addClass("obsidian_douban_settings_area"); textarea.inputEl.setAttr("rows", 10); textarea.setPlaceholder(DEFAULT_SETTINGS.bookTemplate) .setValue(this.plugin.settings.bookTemplate) @@ -134,7 +134,7 @@ export class DoubanSettingTab extends PluginSettingTab { frag.createEl('br'); }) ); - textarea.inputEl.addClass("settings_area"); + textarea.inputEl.addClass("obsidian_douban_settings_area"); textarea.inputEl.setAttr("rows", 10); textarea.setPlaceholder(DEFAULT_SETTINGS.musicTemplate) .setValue(this.plugin.settings.musicTemplate) @@ -162,7 +162,7 @@ export class DoubanSettingTab extends PluginSettingTab { }) ); - textarea.inputEl.addClass("settings_area"); + textarea.inputEl.addClass("obsidian_douban_settings_area"); textarea.inputEl.setAttr("rows", 10); textarea.setPlaceholder(DEFAULT_SETTINGS.noteTemplate) .setValue(this.plugin.settings.noteTemplate) diff --git a/src/douban/broadcast/handler/DoubanPageBroadcastTransformer.ts b/src/douban/broadcast/handler/DoubanPageBroadcastTransformer.ts index ff3b194..d30ac94 100644 --- a/src/douban/broadcast/handler/DoubanPageBroadcastTransformer.ts +++ b/src/douban/broadcast/handler/DoubanPageBroadcastTransformer.ts @@ -1,31 +1,31 @@ -import { CheerioAPI } from "cheerio"; -import { DoubanBroadcastAbstractHandler } from "./DoubanBroadcastAbstractHandler"; -import { DoubanBroadcastMovieHandler } from "./DoubanBroadcastMovieHandler"; -import DoubanBroadcastSubject from "../model/DoubanBroadcastSubject"; -import DoubanPageBroadcastSubject from "../model/DoubanPageBroadcastSubject"; - -export class DoubanPageBroadcastTransformer { - - private handlers:DoubanBroadcastAbstractHandler[]; - - - constructor() { - this.handlers = [ - new DoubanBroadcastMovieHandler(), - ] - - } - - public transform(data: CheerioAPI):DoubanPageBroadcastSubject { - var doubanBroadcastSubjects:DoubanBroadcastSubject[] = data('.new-status .status-wrapper') - .get() - .map(i => this.transformElement(i, data)); - return new DoubanPageBroadcastSubject (); - } - - public transformElement(element:any, source:CheerioAPI):DoubanBroadcastSubject { - var targetType:string = element.innerHTML; - return this.handlers.filter(h => h.support(targetType))[0].transform(element, source); - } - -} +import { CheerioAPI } from "cheerio"; +import { DoubanBroadcastAbstractHandler } from "./DoubanBroadcastAbstractHandler"; +import { DoubanBroadcastMovieHandler } from "./DoubanBroadcastMovieHandler"; +import DoubanBroadcastSubject from "../model/DoubanBroadcastSubject"; +import DoubanPageBroadcastSubject from "../model/DoubanPageBroadcastSubject"; + +export class DoubanPageBroadcastTransformer { + + private handlers:DoubanBroadcastAbstractHandler[]; + + + 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 7cd6725..b14acb3 100644 --- a/src/douban/broadcast/handler/DoubanPageBroadcatLoadHandler.ts +++ b/src/douban/broadcast/handler/DoubanPageBroadcatLoadHandler.ts @@ -44,20 +44,20 @@ export default class DoubanPageBroadcatLoadHandler extends DoubanAbstractLoadHan // return html('.new-status .status-wrapper') // .get() // .map(i -> { - // var div = html(i); + // let div = html(i); // div.find('') // }); - var title = html(html("head > meta[property= 'og:title']").get(0)).attr("content"); - var desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content"); - var url = html(html("head > meta[property= 'og:url']").get(0)).attr("content"); - var image = html(html("head > meta[property= 'og:image']").get(0)).attr("content"); - var type = html(html("head > meta[property= 'og:type']").get(0)).attr("content"); - var authorA = html(html("a.note-author").get(0)); - var timePublished = html(html(".pub-date").get(0)).text(); - var content = html(html(".note").get(1)); - var idPattern = /(\d){5,10}/g; - var id = idPattern.exec(url); + 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, diff --git a/src/douban/data/handler/DoubanAbstractLoadHandler.ts b/src/douban/data/handler/DoubanAbstractLoadHandler.ts index 7fda979..4e54f32 100644 --- a/src/douban/data/handler/DoubanAbstractLoadHandler.ts +++ b/src/douban/data/handler/DoubanAbstractLoadHandler.ts @@ -50,14 +50,15 @@ export default abstract class DoubanAbstractLoadHandler if(!name || !settings || !settings.personNameMode) { return ""; } - var resultName = ""; + let resultName:string = ""; + let regValue:RegExpExecArray; switch(settings.personNameMode) { case PersonNameMode.CH_NAME: - var regValue = /[\u4e00-\u9fa5]{2,20}/g.exec(name); + regValue = /[\u4e00-\u9fa5]{2,20}/g.exec(name); resultName = regValue?regValue[0]:name; break; case PersonNameMode.EN_NAME: - var regValue = /[a-zA-Z.\s\-]{2,50}/g.exec(name); + regValue = /[a-zA-Z.\s\-]{2,50}/g.exec(name); resultName = regValue?regValue[0]:name; break; default: @@ -68,7 +69,7 @@ export default abstract class DoubanAbstractLoadHandler html_encode(str:string):string { - var s = ""; + let s = ""; if (str.length == 0) return ""; s = str.replace(/&/g, "&"); s = s.replace(/ html_decode(str:string):string { - var s = ""; + let s = ""; if (str.length == 0) return ""; s = str.replace(/&/g, "&"); s = s.replace(/</g, "<"); diff --git a/src/douban/data/handler/DoubanBookLoadHandler.ts b/src/douban/data/handler/DoubanBookLoadHandler.ts index 6311f15..e9f8fad 100644 --- a/src/douban/data/handler/DoubanBookLoadHandler.ts +++ b/src/douban/data/handler/DoubanBookLoadHandler.ts @@ -45,18 +45,18 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler meta[property= 'og:title']").get(0)).attr("content"); - var desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content"); - var url = html(html("head > meta[property= 'og:url']").get(0)).attr("content"); - var image = html(html("head > meta[property= 'og:image']").get(0)).attr("content"); - var type = html(html("head > 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 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"); + 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 author = html(html("head > meta[property= 'book:author']").get(0)).attr("content"); + let isbn = html(html("head > meta[property= 'book:isbn']").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"); - var valueMap = new Map(); + let valueMap = new Map(); publish.map((index, info) => { let key = html(info).text().trim(); @@ -69,8 +69,8 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler "application/ld+json" == data(scd).attr("type")) .map(i => { - var item = data(i).text(); + let item = data(i).text(); item = super.html_decode(item); - var obj = JSON.parse(item.replace(/[\r\n\s+]/g, '')); - var idPattern = /(\d){5,10}/g; - var id = idPattern.exec(obj.url); - var name = obj.name; - var titleExec = /[\u4e00-\u9fa5]{2,20}/g.exec(name); - var title = titleExec?titleExec[0]:name; + 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; - var originalTitleExec = /[a-zA-Z.\s\-]{2,50}/g.exec(name); - var originalTitle = originalTitleExec?originalTitleExec[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]:'', diff --git a/src/douban/data/handler/DoubanMusicLoadHandler.ts b/src/douban/data/handler/DoubanMusicLoadHandler.ts index 7fd4d44..0b7bd80 100644 --- a/src/douban/data/handler/DoubanMusicLoadHandler.ts +++ b/src/douban/data/handler/DoubanMusicLoadHandler.ts @@ -40,22 +40,22 @@ export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler meta[property= 'og:title']").get(0)).attr("content"); - var desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content"); - var url = html(html("head > meta[property= 'og:url']").get(0)).attr("content"); - var image = html(html("head > meta[property= 'og:image']").get(0)).attr("content"); - 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"); + 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"); - var valueMap = new Map(); + 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(); - var vas:string[] = key.split("\n \n "); + let vas:string[] = key.split("\n \n "); value = vas && vas.length > 1? vas[1]:""; key = vas && vas.length > 0? vas[0]:""; }else{ @@ -64,8 +64,8 @@ export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler = new Map( ['出版者:', 'publish'], ['唱片数:', 'numberOfRecords'], ['条形码:', 'barcode']] -); \ No newline at end of file +); diff --git a/src/douban/data/handler/DoubanNoteLoadHandler.ts b/src/douban/data/handler/DoubanNoteLoadHandler.ts index 8689bfe..9fc5dba 100644 --- a/src/douban/data/handler/DoubanNoteLoadHandler.ts +++ b/src/douban/data/handler/DoubanNoteLoadHandler.ts @@ -39,16 +39,16 @@ export default class DoubanNoteLoadHandler extends DoubanAbstractLoadHandler meta[property= 'og:title']").get(0)).attr("content"); - var desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content"); - var url = html(html("head > meta[property= 'og:url']").get(0)).attr("content"); - var image = html(html("head > meta[property= 'og:image']").get(0)).attr("content"); - var type = html(html("head > meta[property= 'og:type']").get(0)).attr("content"); - var authorA = html(html("a.note-author").get(0)); - var timePublished = html(html(".pub-date").get(0)).text(); - var content = html(html(".note").get(1)); - var idPattern = /(\d){5,10}/g; - var id = idPattern.exec(url); + 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, diff --git a/src/douban/data/handler/DoubanSearchChooseItemHandler.ts b/src/douban/data/handler/DoubanSearchChooseItemHandler.ts index ad5af46..afe5118 100644 --- a/src/douban/data/handler/DoubanSearchChooseItemHandler.ts +++ b/src/douban/data/handler/DoubanSearchChooseItemHandler.ts @@ -37,7 +37,7 @@ export class DoubanSearchChooseItemHandler { if(!searchExtract) { return; } - var doubanSubjectHandlers:DoubanSubjectLoadHandler[] = this._doubanSubjectHandlers + let doubanSubjectHandlers:DoubanSubjectLoadHandler[] = this._doubanSubjectHandlers .filter(h => h.support(searchExtract)); if(doubanSubjectHandlers && doubanSubjectHandlers.length > 0) { doubanSubjectHandlers[0].handle(searchExtract.url, editor); @@ -50,10 +50,10 @@ export class DoubanSearchChooseItemHandler { if(!settings) { return ""; } - var doubanSubjectHandlers:DoubanSubjectLoadHandler[] = this._doubanSubjectHandlers + let doubanSubjectHandlers:DoubanSubjectLoadHandler[] = this._doubanSubjectHandlers .filter(h => h.support(extract)); if(doubanSubjectHandlers && doubanSubjectHandlers.length > 0) { - var result = doubanSubjectHandlers.map(h => h.parseText(extract, settings)); + let result = doubanSubjectHandlers.map(h => h.parseText(extract, settings)); if(result && result.length > 0) { return result[0]; }else { diff --git a/src/douban/data/handler/DoubanTeleplayLoadHandler.ts b/src/douban/data/handler/DoubanTeleplayLoadHandler.ts index 40c88f9..e480c28 100644 --- a/src/douban/data/handler/DoubanTeleplayLoadHandler.ts +++ b/src/douban/data/handler/DoubanTeleplayLoadHandler.ts @@ -1,80 +1,80 @@ -import { CheerioAPI } from "cheerio"; -import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler"; -import DoubanPlugin from "main"; -import { DoubanPluginSettings } from "src/douban/Douban"; -import DoubanSubject from "../model/DoubanSubject"; -import DoubanTeleplaySubject from "../model/DoubanTeleplaySubject"; -import SchemaOrg from "src/utils/SchemaOrg"; -import { moment } from "obsidian"; - -/** - * teleplay - */ -export class DoubanTeleplayLoadHandler extends DoubanAbstractLoadHandler{ - - - - constructor(doubanPlugin:DoubanPlugin) { - super(doubanPlugin); - } - - - parseText(extract: DoubanTeleplaySubject, settings:DoubanPluginSettings): string { - return settings.movieTemplate ? settings.movieTemplate.replaceAll("{{id}}", extract.id) - .replaceAll("{{type}}", extract.type ? extract.type : "") - .replaceAll("{{title}}", extract.title ? extract.title : "") - .replaceAll("{{originalTitle}}", extract.originalTitle ? extract.originalTitle : "") - .replaceAll("{{desc}}", extract.desc ? extract.desc : "") - .replaceAll("{{image}}", extract.image ? extract.image : "") - .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("{{datePublished}}", extract.datePublished ? moment(extract.datePublished).format(settings.dateFormat) : "") - .replaceAll("{{url}}", extract.url ? extract.url : "") - .replaceAll("{{score}}", extract.aggregateRating && extract.aggregateRating.ratingValue ? extract.aggregateRating.ratingValue + "" : "") - .replaceAll("{{genre}}", extract.genre ? extract.genre.join(settings.arraySpilt) : "") - - : undefined; } - - 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 => { - var item = data(i).text(); - item = super.html_decode(item); - var obj = JSON.parse(item.replace(/[\r\n\s+]/g, '')); - var idPattern = /(\d){5,10}/g; - var id = idPattern.exec(obj.url); - var name = obj.name; - var titleExec = /[\u4e00-\u9fa5]{2,20}/g.exec(name); - var title = titleExec?titleExec[0]:name; - - var originalTitleExec = /[a-zA-Z.\s\-]{2,50}/g.exec(name); - var originalTitle = originalTitleExec?originalTitleExec[0]:name; - - const result:DoubanTeleplaySubject = { - id: id?id[0]:'', - type: 'Movie', - 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 - } - return result; - })[0]; - } - -} \ No newline at end of file +import { CheerioAPI } from "cheerio"; +import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler"; +import DoubanPlugin from "main"; +import { DoubanPluginSettings } from "src/douban/Douban"; +import DoubanSubject from "../model/DoubanSubject"; +import DoubanTeleplaySubject from "../model/DoubanTeleplaySubject"; +import SchemaOrg from "src/utils/SchemaOrg"; +import { moment } from "obsidian"; + +/** + * teleplay + */ +export class DoubanTeleplayLoadHandler extends DoubanAbstractLoadHandler{ + + + + constructor(doubanPlugin:DoubanPlugin) { + super(doubanPlugin); + } + + + parseText(extract: DoubanTeleplaySubject, settings:DoubanPluginSettings): string { + return settings.movieTemplate ? settings.movieTemplate.replaceAll("{{id}}", extract.id) + .replaceAll("{{type}}", extract.type ? extract.type : "") + .replaceAll("{{title}}", extract.title ? extract.title : "") + .replaceAll("{{originalTitle}}", extract.originalTitle ? extract.originalTitle : "") + .replaceAll("{{desc}}", extract.desc ? extract.desc : "") + .replaceAll("{{image}}", extract.image ? extract.image : "") + .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("{{datePublished}}", extract.datePublished ? moment(extract.datePublished).format(settings.dateFormat) : "") + .replaceAll("{{url}}", extract.url ? extract.url : "") + .replaceAll("{{score}}", extract.aggregateRating && extract.aggregateRating.ratingValue ? extract.aggregateRating.ratingValue + "" : "") + .replaceAll("{{genre}}", extract.genre ? extract.genre.join(settings.arraySpilt) : "") + + : undefined; } + + 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; + + 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: 'Movie', + 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 + } + return result; + })[0]; + } + +} diff --git a/src/douban/data/search/DoubanSearchModal.ts b/src/douban/data/search/DoubanSearchModal.ts index 38f8c7a..cc0128b 100644 --- a/src/douban/data/search/DoubanSearchModal.ts +++ b/src/douban/data/search/DoubanSearchModal.ts @@ -17,13 +17,13 @@ export class DoubanSearchModal extends Modal { onOpen() { let { contentEl } = this; - contentEl.createEl("h2", { text: i18nHelper.getMessage('110003') }); + 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("search_input"); + searchInput.inputEl.addClass("obsidian_douban_search_input"); searchInput.inputEl.focus(); searchInput.inputEl.addEventListener("keydown", (event) => { @@ -42,12 +42,12 @@ export class DoubanSearchModal extends Modal { autofocus: true, }, }); - searchButton.addClass("search_button"); + 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("search_button"); + cancelButton.addClass("obsidian_douban_search_button"); } diff --git a/src/douban/data/search/SearchParser.ts b/src/douban/data/search/SearchParser.ts index 775918a..ca0ca02 100644 --- a/src/douban/data/search/SearchParser.ts +++ b/src/douban/data/search/SearchParser.ts @@ -7,12 +7,12 @@ export default class SearchParserHandler { .get() .map((i:any) => { const item = dataHtml(i); - var idPattern = /(\d){5,10}/g; - var urlPattern = /(https%3A%2F%2F)\S+(\d){5,10}/g; - var linkValue = item.find("div.content > div > h3 > a").attr("href"); - var ececResult = idPattern.exec(linkValue); - var urlResult = urlPattern.exec(linkValue); - var cast = item.find(".subject-cast").text(); + 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(); const result:DoubanSearchResultSubject = { id: ececResult?ececResult[0]:'', title: item.find("div.content > div > h3 > a").text(), @@ -25,4 +25,4 @@ export default class SearchParserHandler { return result; }) }; -} \ No newline at end of file +} diff --git a/src/utils/Logutil.ts b/src/utils/Logutil.ts index f2a7752..18c8143 100644 --- a/src/utils/Logutil.ts +++ b/src/utils/Logutil.ts @@ -15,19 +15,19 @@ class Logger { } public info(e:any):any { - console.log(`Douban Plugin info:` + `${typeof e == 'string' ? e : JSON.stringify(e)}`); + // 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)}`); + // 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)}`); + // console.log(`${notion} ${typeof e == 'string' ? e : JSON.stringify(e)}`); return e; } } diff --git a/styles.css b/styles.css index edcd013..755a240 100644 --- a/styles.css +++ b/styles.css @@ -1,27 +1,27 @@ -.settings_area { - margin-left: 5px; - margin-right: 5px; - font-size: 14px; - width: 100%; -} - -.settings_textField { - margin-left: 5px; - margin-right: 5px; - font-size: 14px; - width: 100%; -} - -.search_input { - margin-left: 5px; - margin-right: 5px; - font-size: 14px; - width: 90%; -} - -.search_button { - margin-top: 10px; - margin-left: 10px; - margin-right: 5px; - font-size: 14px; -} \ No newline at end of file +.obsidian_douban_settings_area { + margin-left: 5px; + margin-right: 5px; + font-size: 14px; + width: 100%; +} + +.obsidian_douban_settings_textField { + margin-left: 5px; + margin-right: 5px; + font-size: 14px; + width: 100%; +} + +.obsidian_douban_search_input { + margin-left: 5px; + margin-right: 5px; + font-size: 14px; + width: 90%; +} + +.obsidian_douban_search_button { + margin-top: 10px; + margin-left: 5px; + margin-right: 5px; + font-size: 14px; +}