change var to let and make all class names more specific

This commit is contained in:
wanxp 2022-10-25 10:55:05 +08:00
parent a97688481d
commit 8701547f79
16 changed files with 232 additions and 231 deletions

@ -20,7 +20,7 @@ export default class DoubanPlugin extends Plugin {
return; return;
} }
log.trace(`you choose item load data success: ${JSON.stringify(extract)}`); 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) { if(content) {
editor.replaceSelection(content); editor.replaceSelection(content);
} }

@ -1,10 +1,10 @@
{ {
"id": "obsidian-douban-plugin", "id": "obsidian-douban-plugin",
"name": "Douban", "name": "Douban",
"version": "v1.4.3", "version": "v1.4.3",
"minAppVersion": "0.12.0", "minAppVersion": "0.12.0",
"description": "This is a plugin that can import movies, books or musics info data from Douban for Obsidian .", "description": "This is a plugin that can import movies, books or musics info data from Douban for Obsidian .",
"author": "Wanxp", "author": "Wanxp",
"authorUrl": "https://obsidian-douban.wanxuping.com", "authorUrl": "https://obsidian-douban.wanxuping.com",
"isDesktopOnly": true "isDesktopOnly": false
} }

@ -46,7 +46,7 @@ export class DoubanSettingTab extends PluginSettingTab {
frag.createEl('br'); frag.createEl('br');
}) })
); );
textField.inputEl.addClass("settings_textField"); textField.inputEl.addClass("obsidian_douban_settings_textField");
textField textField
.setPlaceholder(DEFAULT_SETTINGS.searchUrl) .setPlaceholder(DEFAULT_SETTINGS.searchUrl)
.setValue(this.plugin.settings.searchUrl) .setValue(this.plugin.settings.searchUrl)
@ -76,7 +76,7 @@ export class DoubanSettingTab extends PluginSettingTab {
frag.createEl('br'); frag.createEl('br');
}) })
); );
textarea.inputEl.addClass("settings_area"); textarea.inputEl.addClass("obsidian_douban_settings_area");
textarea.inputEl.setAttr("rows", 10); textarea.inputEl.setAttr("rows", 10);
textarea.setPlaceholder(DEFAULT_SETTINGS.movieTemplate) textarea.setPlaceholder(DEFAULT_SETTINGS.movieTemplate)
.setValue(this.plugin.settings.movieTemplate) .setValue(this.plugin.settings.movieTemplate)
@ -105,7 +105,7 @@ export class DoubanSettingTab extends PluginSettingTab {
frag.createEl('br'); frag.createEl('br');
}) })
); );
textarea.inputEl.addClass("settings_area"); textarea.inputEl.addClass("obsidian_douban_settings_area");
textarea.inputEl.setAttr("rows", 10); textarea.inputEl.setAttr("rows", 10);
textarea.setPlaceholder(DEFAULT_SETTINGS.bookTemplate) textarea.setPlaceholder(DEFAULT_SETTINGS.bookTemplate)
.setValue(this.plugin.settings.bookTemplate) .setValue(this.plugin.settings.bookTemplate)
@ -134,7 +134,7 @@ export class DoubanSettingTab extends PluginSettingTab {
frag.createEl('br'); frag.createEl('br');
}) })
); );
textarea.inputEl.addClass("settings_area"); textarea.inputEl.addClass("obsidian_douban_settings_area");
textarea.inputEl.setAttr("rows", 10); textarea.inputEl.setAttr("rows", 10);
textarea.setPlaceholder(DEFAULT_SETTINGS.musicTemplate) textarea.setPlaceholder(DEFAULT_SETTINGS.musicTemplate)
.setValue(this.plugin.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.inputEl.setAttr("rows", 10);
textarea.setPlaceholder(DEFAULT_SETTINGS.noteTemplate) textarea.setPlaceholder(DEFAULT_SETTINGS.noteTemplate)
.setValue(this.plugin.settings.noteTemplate) .setValue(this.plugin.settings.noteTemplate)

@ -1,31 +1,31 @@
import { CheerioAPI } from "cheerio"; import { CheerioAPI } from "cheerio";
import { DoubanBroadcastAbstractHandler } from "./DoubanBroadcastAbstractHandler"; import { DoubanBroadcastAbstractHandler } from "./DoubanBroadcastAbstractHandler";
import { DoubanBroadcastMovieHandler } from "./DoubanBroadcastMovieHandler"; import { DoubanBroadcastMovieHandler } from "./DoubanBroadcastMovieHandler";
import DoubanBroadcastSubject from "../model/DoubanBroadcastSubject"; import DoubanBroadcastSubject from "../model/DoubanBroadcastSubject";
import DoubanPageBroadcastSubject from "../model/DoubanPageBroadcastSubject"; import DoubanPageBroadcastSubject from "../model/DoubanPageBroadcastSubject";
export class DoubanPageBroadcastTransformer { export class DoubanPageBroadcastTransformer {
private handlers:DoubanBroadcastAbstractHandler<DoubanBroadcastSubject>[]; private handlers:DoubanBroadcastAbstractHandler<DoubanBroadcastSubject>[];
constructor() { constructor() {
this.handlers = [ this.handlers = [
new DoubanBroadcastMovieHandler(), new DoubanBroadcastMovieHandler(),
] ]
} }
public transform(data: CheerioAPI):DoubanPageBroadcastSubject { public transform(data: CheerioAPI):DoubanPageBroadcastSubject {
var doubanBroadcastSubjects:DoubanBroadcastSubject[] = data('.new-status .status-wrapper') let doubanBroadcastSubjects:DoubanBroadcastSubject[] = data('.new-status .status-wrapper')
.get() .get()
.map(i => this.transformElement(i, data)); .map(i => this.transformElement(i, data));
return new DoubanPageBroadcastSubject (); return new DoubanPageBroadcastSubject ();
} }
public transformElement(element:any, source:CheerioAPI):DoubanBroadcastSubject { public transformElement(element:any, source:CheerioAPI):DoubanBroadcastSubject {
var targetType:string = element.innerHTML; let targetType:string = element.innerHTML;
return this.handlers.filter(h => h.support(targetType))[0].transform(element, source); return this.handlers.filter(h => h.support(targetType))[0].transform(element, source);
} }
} }

@ -44,20 +44,20 @@ export default class DoubanPageBroadcatLoadHandler extends DoubanAbstractLoadHan
// return html('.new-status .status-wrapper') // return html('.new-status .status-wrapper')
// .get() // .get()
// .map(i -> { // .map(i -> {
// var div = html(i); // let div = html(i);
// div.find('') // div.find('')
// }); // });
var title = html(html("head > meta[property= 'og:title']").get(0)).attr("content"); let 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"); let 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"); let 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"); let 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"); let type = html(html("head > meta[property= 'og:type']").get(0)).attr("content");
var authorA = html(html("a.note-author").get(0)); let authorA = html(html("a.note-author").get(0));
var timePublished = html(html(".pub-date").get(0)).text(); let timePublished = html(html(".pub-date").get(0)).text();
var content = html(html(".note").get(1)); let content = html(html(".note").get(1));
var idPattern = /(\d){5,10}/g; let idPattern = /(\d){5,10}/g;
var id = idPattern.exec(url); let id = idPattern.exec(url);
// const result:DoubanNoteSubject = { // const result:DoubanNoteSubject = {
// image: image, // image: image,

@ -50,14 +50,15 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
if(!name || !settings || !settings.personNameMode) { if(!name || !settings || !settings.personNameMode) {
return ""; return "";
} }
var resultName = ""; let resultName:string = "";
let regValue:RegExpExecArray;
switch(settings.personNameMode) { switch(settings.personNameMode) {
case PersonNameMode.CH_NAME: 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; resultName = regValue?regValue[0]:name;
break; break;
case PersonNameMode.EN_NAME: 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; resultName = regValue?regValue[0]:name;
break; break;
default: default:
@ -68,7 +69,7 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
html_encode(str:string):string html_encode(str:string):string
{ {
var s = ""; let s = "";
if (str.length == 0) return ""; if (str.length == 0) return "";
s = str.replace(/&/g, "&amp;"); s = str.replace(/&/g, "&amp;");
s = s.replace(/</g, "&lt;"); s = s.replace(/</g, "&lt;");
@ -82,7 +83,7 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
html_decode(str:string):string html_decode(str:string):string
{ {
var s = ""; let s = "";
if (str.length == 0) return ""; if (str.length == 0) return "";
s = str.replace(/&amp;/g, "&"); s = str.replace(/&amp;/g, "&");
s = s.replace(/&lt;/g, "<"); s = s.replace(/&lt;/g, "<");

@ -45,18 +45,18 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<Dou
} }
parseSubjectFromHtml(html: CheerioAPI): DoubanBookSubject { parseSubjectFromHtml(html: CheerioAPI): DoubanBookSubject {
var title = html(html("head > meta[property= 'og:title']").get(0)).attr("content"); let 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"); let 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"); let 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"); let 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"); let 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"); let 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"); let 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(); let score = html(html("#interest_sectl > div > div.rating_self.clearfix > strong[property= 'v:average']").get(0)).text();
var detailDom = html(html("#info").get(0)); let detailDom = html(html("#info").get(0));
var publish = detailDom.find("span.pl"); let publish = detailDom.find("span.pl");
var valueMap = new Map<string, string>(); let valueMap = new Map<string, string>();
publish.map((index, info) => { publish.map((index, info) => {
let key = html(info).text().trim(); let key = html(info).text().trim();
@ -69,8 +69,8 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<Dou
valueMap.set(BookKeyValueMap.get(key), value); valueMap.set(BookKeyValueMap.get(key), value);
}) })
var idPattern = /(\d){5,10}/g; let idPattern = /(\d){5,10}/g;
var id = idPattern.exec(url); let id = idPattern.exec(url);
const result:DoubanBookSubject = { const result:DoubanBookSubject = {
author: [author], author: [author],

@ -42,17 +42,17 @@ export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler<Do
.get() .get()
.filter(scd => "application/ld+json" == data(scd).attr("type")) .filter(scd => "application/ld+json" == data(scd).attr("type"))
.map(i => { .map(i => {
var item = data(i).text(); let item = data(i).text();
item = super.html_decode(item); item = super.html_decode(item);
var obj = JSON.parse(item.replace(/[\r\n\s+]/g, '')); let obj = JSON.parse(item.replace(/[\r\n\s+]/g, ''));
var idPattern = /(\d){5,10}/g; let idPattern = /(\d){5,10}/g;
var id = idPattern.exec(obj.url); let id = idPattern.exec(obj.url);
var name = obj.name; let name = obj.name;
var titleExec = /[\u4e00-\u9fa5]{2,20}/g.exec(name); let titleExec = /[\u4e00-\u9fa5]{2,20}/g.exec(name);
var title = titleExec?titleExec[0]:name; let title = titleExec?titleExec[0]:name;
var originalTitleExec = /[a-zA-Z.\s\-]{2,50}/g.exec(name); let originalTitleExec = /[a-zA-Z.\s\-]{2,50}/g.exec(name);
var originalTitle = originalTitleExec?originalTitleExec[0]:name; let originalTitle = originalTitleExec?originalTitleExec[0]:name;
const result:DoubanMovieSubject = { const result:DoubanMovieSubject = {
id: id?id[0]:'', id: id?id[0]:'',

@ -40,22 +40,22 @@ export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler<Do
} }
parseSubjectFromHtml(html: CheerioAPI): DoubanMusicSubject { parseSubjectFromHtml(html: CheerioAPI): DoubanMusicSubject {
var title = html(html("head > meta[property= 'og:title']").get(0)).attr("content"); let 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"); let 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"); let 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"); let 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(); let score = html(html("#interest_sectl > div > div.rating_self.clearfix > strong[property= 'v:average']").get(0)).text();
var detailDom = html(html("#info").get(0)); let detailDom = html(html("#info").get(0));
var publish = detailDom.find("span.pl"); let publish = detailDom.find("span.pl");
var valueMap = new Map<string, string>(); let valueMap = new Map<string, string>();
publish.map((index, info) => { publish.map((index, info) => {
let key = html(info).text().trim(); let key = html(info).text().trim();
let value = '' let value = ''
if(key.indexOf('表演者') >= 0){ if(key.indexOf('表演者') >= 0){
// value = html(info.next.next).text().trim(); // 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]:""; value = vas && vas.length > 1? vas[1]:"";
key = vas && vas.length > 0? vas[0]:""; key = vas && vas.length > 0? vas[0]:"";
}else{ }else{
@ -64,8 +64,8 @@ export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler<Do
valueMap.set(BookKeyValueMap.get(key), value); valueMap.set(BookKeyValueMap.get(key), value);
}) })
var idPattern = /(\d){5,10}/g; let idPattern = /(\d){5,10}/g;
var id = idPattern.exec(url); let id = idPattern.exec(url);
const result:DoubanMusicSubject = { const result:DoubanMusicSubject = {
image: image, image: image,
@ -100,4 +100,4 @@ const BookKeyValueMap:Map<string, string> = new Map(
['出版者:', 'publish'], ['出版者:', 'publish'],
['唱片数:', 'numberOfRecords'], ['唱片数:', 'numberOfRecords'],
['条形码:', 'barcode']] ['条形码:', 'barcode']]
); );

@ -39,16 +39,16 @@ export default class DoubanNoteLoadHandler extends DoubanAbstractLoadHandler<Dou
} }
parseSubjectFromHtml(html: CheerioAPI): DoubanNoteSubject { parseSubjectFromHtml(html: CheerioAPI): DoubanNoteSubject {
var title = html(html("head > meta[property= 'og:title']").get(0)).attr("content"); let 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"); let 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"); let 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"); let 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"); let type = html(html("head > meta[property= 'og:type']").get(0)).attr("content");
var authorA = html(html("a.note-author").get(0)); let authorA = html(html("a.note-author").get(0));
var timePublished = html(html(".pub-date").get(0)).text(); let timePublished = html(html(".pub-date").get(0)).text();
var content = html(html(".note").get(1)); let content = html(html(".note").get(1));
var idPattern = /(\d){5,10}/g; let idPattern = /(\d){5,10}/g;
var id = idPattern.exec(url); let id = idPattern.exec(url);
const result:DoubanNoteSubject = { const result:DoubanNoteSubject = {
image: image, image: image,

@ -37,7 +37,7 @@ export class DoubanSearchChooseItemHandler {
if(!searchExtract) { if(!searchExtract) {
return; return;
} }
var doubanSubjectHandlers:DoubanSubjectLoadHandler<DoubanSubject>[] = this._doubanSubjectHandlers let doubanSubjectHandlers:DoubanSubjectLoadHandler<DoubanSubject>[] = this._doubanSubjectHandlers
.filter(h => h.support(searchExtract)); .filter(h => h.support(searchExtract));
if(doubanSubjectHandlers && doubanSubjectHandlers.length > 0) { if(doubanSubjectHandlers && doubanSubjectHandlers.length > 0) {
doubanSubjectHandlers[0].handle(searchExtract.url, editor); doubanSubjectHandlers[0].handle(searchExtract.url, editor);
@ -50,10 +50,10 @@ export class DoubanSearchChooseItemHandler {
if(!settings) { if(!settings) {
return ""; return "";
} }
var doubanSubjectHandlers:DoubanSubjectLoadHandler<DoubanSubject>[] = this._doubanSubjectHandlers let doubanSubjectHandlers:DoubanSubjectLoadHandler<DoubanSubject>[] = this._doubanSubjectHandlers
.filter(h => h.support(extract)); .filter(h => h.support(extract));
if(doubanSubjectHandlers && doubanSubjectHandlers.length > 0) { 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) { if(result && result.length > 0) {
return result[0]; return result[0];
}else { }else {

@ -1,80 +1,80 @@
import { CheerioAPI } from "cheerio"; import { CheerioAPI } from "cheerio";
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler"; import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
import DoubanPlugin from "main"; import DoubanPlugin from "main";
import { DoubanPluginSettings } from "src/douban/Douban"; import { DoubanPluginSettings } from "src/douban/Douban";
import DoubanSubject from "../model/DoubanSubject"; import DoubanSubject from "../model/DoubanSubject";
import DoubanTeleplaySubject from "../model/DoubanTeleplaySubject"; import DoubanTeleplaySubject from "../model/DoubanTeleplaySubject";
import SchemaOrg from "src/utils/SchemaOrg"; import SchemaOrg from "src/utils/SchemaOrg";
import { moment } from "obsidian"; import { moment } from "obsidian";
/** /**
* teleplay * teleplay
*/ */
export class DoubanTeleplayLoadHandler extends DoubanAbstractLoadHandler<DoubanTeleplaySubject>{ export class DoubanTeleplayLoadHandler extends DoubanAbstractLoadHandler<DoubanTeleplaySubject>{
constructor(doubanPlugin:DoubanPlugin) { constructor(doubanPlugin:DoubanPlugin) {
super(doubanPlugin); super(doubanPlugin);
} }
parseText(extract: DoubanTeleplaySubject, settings:DoubanPluginSettings): string { parseText(extract: DoubanTeleplaySubject, settings:DoubanPluginSettings): string {
return settings.movieTemplate ? settings.movieTemplate.replaceAll("{{id}}", extract.id) return settings.movieTemplate ? settings.movieTemplate.replaceAll("{{id}}", extract.id)
.replaceAll("{{type}}", extract.type ? extract.type : "") .replaceAll("{{type}}", extract.type ? extract.type : "")
.replaceAll("{{title}}", extract.title ? extract.title : "") .replaceAll("{{title}}", extract.title ? extract.title : "")
.replaceAll("{{originalTitle}}", extract.originalTitle ? extract.originalTitle : "") .replaceAll("{{originalTitle}}", extract.originalTitle ? extract.originalTitle : "")
.replaceAll("{{desc}}", extract.desc ? extract.desc : "") .replaceAll("{{desc}}", extract.desc ? extract.desc : "")
.replaceAll("{{image}}", extract.image ? extract.image : "") .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("{{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("{{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("{{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("{{datePublished}}", extract.datePublished ? moment(extract.datePublished).format(settings.dateFormat) : "")
.replaceAll("{{url}}", extract.url ? extract.url : "") .replaceAll("{{url}}", extract.url ? extract.url : "")
.replaceAll("{{score}}", extract.aggregateRating && extract.aggregateRating.ratingValue ? extract.aggregateRating.ratingValue + "" : "") .replaceAll("{{score}}", extract.aggregateRating && extract.aggregateRating.ratingValue ? extract.aggregateRating.ratingValue + "" : "")
.replaceAll("{{genre}}", extract.genre ? extract.genre.join(settings.arraySpilt) : "") .replaceAll("{{genre}}", extract.genre ? extract.genre.join(settings.arraySpilt) : "")
: undefined; } : undefined; }
support(extract: DoubanSubject): boolean { support(extract: DoubanSubject): boolean {
return extract && extract.type && (extract.type.contains("电视剧") || extract.type.contains("Teleplay") || extract.type.contains("teleplay")); return extract && extract.type && (extract.type.contains("电视剧") || extract.type.contains("Teleplay") || extract.type.contains("teleplay"));
} }
parseSubjectFromHtml(data: CheerioAPI): DoubanTeleplaySubject { parseSubjectFromHtml(data: CheerioAPI): DoubanTeleplaySubject {
return data('script') return data('script')
.get() .get()
.filter(scd => "application/ld+json" == data(scd).attr("type")) .filter(scd => "application/ld+json" == data(scd).attr("type"))
.map(i => { .map(i => {
var item = data(i).text(); let item = data(i).text();
item = super.html_decode(item); item = super.html_decode(item);
var obj = JSON.parse(item.replace(/[\r\n\s+]/g, '')); let obj = JSON.parse(item.replace(/[\r\n\s+]/g, ''));
var idPattern = /(\d){5,10}/g; let idPattern = /(\d){5,10}/g;
var id = idPattern.exec(obj.url); let id = idPattern.exec(obj.url);
var name = obj.name; let name = obj.name;
var titleExec = /[\u4e00-\u9fa5]{2,20}/g.exec(name); let titleExec = /[\u4e00-\u9fa5]{2,20}/g.exec(name);
var title = titleExec?titleExec[0]:name; let title = titleExec?titleExec[0]:name;
var originalTitleExec = /[a-zA-Z.\s\-]{2,50}/g.exec(name); let originalTitleExec = /[a-zA-Z.\s\-]{2,50}/g.exec(name);
var originalTitle = originalTitleExec?originalTitleExec[0]:name; let originalTitle = originalTitleExec?originalTitleExec[0]:name;
const result:DoubanTeleplaySubject = { const result:DoubanTeleplaySubject = {
id: id?id[0]:'', id: id?id[0]:'',
type: 'Movie', type: 'Movie',
title: title, title: title,
originalTitle: originalTitle, originalTitle: originalTitle,
desc: obj.description, desc: obj.description,
url: "https://movie.douban.com" + obj.url, url: "https://movie.douban.com" + obj.url,
director: obj.director, director: obj.director,
author: obj.author, author: obj.author,
actor: obj.actor, actor: obj.actor,
aggregateRating: obj.aggregateRating, aggregateRating: obj.aggregateRating,
datePublished: obj.datePublished ? new Date(obj.datePublished) : undefined, datePublished: obj.datePublished ? new Date(obj.datePublished) : undefined,
image:obj.image, image:obj.image,
genre:obj.genre genre:obj.genre
} }
return result; return result;
})[0]; })[0];
} }
} }

@ -17,13 +17,13 @@ export class DoubanSearchModal extends Modal {
onOpen() { onOpen() {
let { contentEl } = this; let { contentEl } = this;
contentEl.createEl("h2", { text: i18nHelper.getMessage('110003') }); contentEl.createEl("h3", { text: i18nHelper.getMessage('110003') });
const inputs = contentEl.createDiv("inputs"); const inputs = contentEl.createDiv("inputs");
const searchInput = new TextComponent(inputs).onChange((searchTerm) => { const searchInput = new TextComponent(inputs).onChange((searchTerm) => {
this.searchTerm = searchTerm; this.searchTerm = searchTerm;
}); });
searchInput.inputEl.addClass("search_input"); searchInput.inputEl.addClass("obsidian_douban_search_input");
searchInput.inputEl.focus(); searchInput.inputEl.focus();
searchInput.inputEl.addEventListener("keydown", (event) => { searchInput.inputEl.addEventListener("keydown", (event) => {
@ -42,12 +42,12 @@ export class DoubanSearchModal extends Modal {
autofocus: true, autofocus: true,
}, },
}); });
searchButton.addClass("search_button"); searchButton.addClass("obsidian_douban_search_button");
searchButton.addEventListener("click", this.close.bind(this)); searchButton.addEventListener("click", this.close.bind(this));
const cancelButton = controls.createEl("button", { text: i18nHelper.getMessage('110005') }); const cancelButton = controls.createEl("button", { text: i18nHelper.getMessage('110005') });
cancelButton.addEventListener("click", this.close.bind(this)); cancelButton.addEventListener("click", this.close.bind(this));
cancelButton.addClass("search_button"); cancelButton.addClass("obsidian_douban_search_button");
} }

@ -7,12 +7,12 @@ export default class SearchParserHandler {
.get() .get()
.map((i:any) => { .map((i:any) => {
const item = dataHtml(i); const item = dataHtml(i);
var idPattern = /(\d){5,10}/g; let idPattern = /(\d){5,10}/g;
var urlPattern = /(https%3A%2F%2F)\S+(\d){5,10}/g; let urlPattern = /(https%3A%2F%2F)\S+(\d){5,10}/g;
var linkValue = item.find("div.content > div > h3 > a").attr("href"); let linkValue = item.find("div.content > div > h3 > a").attr("href");
var ececResult = idPattern.exec(linkValue); let ececResult = idPattern.exec(linkValue);
var urlResult = urlPattern.exec(linkValue); let urlResult = urlPattern.exec(linkValue);
var cast = item.find(".subject-cast").text(); let cast = item.find(".subject-cast").text();
const result:DoubanSearchResultSubject = { const result:DoubanSearchResultSubject = {
id: ececResult?ececResult[0]:'', id: ececResult?ececResult[0]:'',
title: item.find("div.content > div > h3 > a").text(), title: item.find("div.content > div > h3 > a").text(),
@ -25,4 +25,4 @@ export default class SearchParserHandler {
return result; return result;
}) })
}; };
} }

@ -15,19 +15,19 @@ class Logger {
} }
public info(e:any):any { 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; return e;
} }
public trace(e:any):any { public trace(e:any):any {
// return e; // 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; return e;
} }
public traceN(notion:string, e:any):any { public traceN(notion:string, e:any):any {
// return e; // return e;
console.log(`${notion} ${typeof e == 'string' ? e : JSON.stringify(e)}`); // console.log(`${notion} ${typeof e == 'string' ? e : JSON.stringify(e)}`);
return e; return e;
} }
} }

@ -1,27 +1,27 @@
.settings_area { .obsidian_douban_settings_area {
margin-left: 5px; margin-left: 5px;
margin-right: 5px; margin-right: 5px;
font-size: 14px; font-size: 14px;
width: 100%; width: 100%;
} }
.settings_textField { .obsidian_douban_settings_textField {
margin-left: 5px; margin-left: 5px;
margin-right: 5px; margin-right: 5px;
font-size: 14px; font-size: 14px;
width: 100%; width: 100%;
} }
.search_input { .obsidian_douban_search_input {
margin-left: 5px; margin-left: 5px;
margin-right: 5px; margin-right: 5px;
font-size: 14px; font-size: 14px;
width: 90%; width: 90%;
} }
.search_button { .obsidian_douban_search_button {
margin-top: 10px; margin-top: 10px;
margin-left: 10px; margin-left: 5px;
margin-right: 5px; margin-right: 5px;
font-size: 14px; font-size: 14px;
} }