mirror of
https://github.com/Wanxp/obsidian-douban.git
synced 2026-04-04 08:38:41 +08:00
change var to let and make all class names more specific
This commit is contained in:
parent
a97688481d
commit
8701547f79
2
main.ts
2
main.ts
@ -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, "&");
|
s = str.replace(/&/g, "&");
|
||||||
s = s.replace(/</g, "<");
|
s = s.replace(/</g, "<");
|
||||||
@ -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(/&/g, "&");
|
s = str.replace(/&/g, "&");
|
||||||
s = s.replace(/</g, "<");
|
s = s.replace(/</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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
54
styles.css
54
styles.css
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user