11"use strict" ;
22
3- parserFactory . register ( "kemono.su" , ( ) => new KemonopartyParser ( ) ) ;
3+ parserFactory . registerRule (
4+ ( url , dom ) => KemonopartyParser . isKemono ( dom ) ,
5+ ( ) => new KemonopartyParser ( )
6+ ) ;
47
58class KemonopartyParser extends Parser {
69 constructor ( ) {
710 super ( ) ;
811 }
12+
13+ static isKemono ( dom ) {
14+ return dom . querySelector ( "meta[name='og:title']" ) . content == "Kemono"
15+ && dom . querySelector ( "section.site-section div.card-list" ) != null ;
16+ }
917
1018 async getChapterUrls ( dom , chapterUrlsUI ) {
1119 let chapters = [ ] ;
1220 let urlsOfTocPages = await this . getUrlsOfTocPages ( dom ) ;
1321 for ( let url of urlsOfTocPages ) {
1422 await this . rateLimitDelay ( ) ;
1523 let json = ( await HttpClient . fetchJson ( url ) ) . json ;
24+ json . url = url ;
1625 let partialList = this . extractPartialChapterList ( json ) ;
1726 chapterUrlsUI . showTocProgress ( partialList ) ;
1827 chapters = chapters . concat ( partialList ) ;
@@ -50,7 +59,7 @@ class KemonopartyParser extends Parser{
5059 urlbuilder . searchParams . delete ( key ) ;
5160 }
5261 let regex = new RegExp ( "/?$" ) ;
53- urlbuilder . href = urlbuilder . href . replace ( " https://kemono.su" , " https://kemono.su /api/v1" ) . replace ( regex , "/posts-legacy" ) ;
62+ urlbuilder . href = urlbuilder . href . replace ( ` https://${ baseurl . hostname } ` , ` https://${ baseurl . hostname } /api/v1` ) . replace ( regex , "/posts-legacy" ) ;
5463
5564 for ( const [ key , value ] of baseurl . searchParams . entries ( ) ) {
5665 urlbuilder . searchParams . set ( key , value ) ;
@@ -70,10 +79,11 @@ class KemonopartyParser extends Parser{
7079 extractPartialChapterList ( data ) {
7180 // get href from the dom, not the url of the page
7281 try {
82+ let url = new URL ( data . url ) ;
7383 let authorid = data . props . id ;
7484 let ids = data . results . map ( result => result . id ) ;
7585 let titles = data . results . map ( result => result . title ) ;
76- let urls = ids . map ( id => `https://kemono.su /api/v1/patreon/user/${ authorid } /post/${ id } ` ) ;
86+ let urls = ids . map ( id => `https://${ url . hostname } /api/v1/patreon/user/${ authorid } /post/${ id } ` ) ;
7787 return urls . map ( ( url , i ) => ( {
7888 sourceUrl : url ,
7989 title : titles [ i ]
0 commit comments