eslint with stricter rules for better code consistency (#2525)
* added stricter eslint rules * auto format code based on eslint * apply lint auto format to new files from master merge * auto-fixed lint errors
This commit is contained in:
parent
38c86c2ed1
commit
29b0a749bd
|
@ -27,7 +27,12 @@
|
|||
},
|
||||
"rules": {
|
||||
"semi": ["error", "always"],
|
||||
"semi-spacing": "error",
|
||||
"comma-spacing": "error",
|
||||
"brace-style": "error",
|
||||
"no-extra-parens": "error",
|
||||
"space-before-blocks": "error",
|
||||
//"object-curly-spacing": "error",
|
||||
"indent": ["error", 4, { "SwitchCase": 1 }],
|
||||
"no-trailing-spaces": "error",
|
||||
"no-multiple-empty-lines": ["error", {"max": 1, "maxBOF": 0, "maxEOF": 0}],
|
||||
|
|
|
@ -44,17 +44,17 @@ export default class Asgard1team extends Connector {
|
|||
let data = await this.fetchDOM(request, 'tbody > tr');
|
||||
return data.map(element => {
|
||||
let num = element.querySelector('td[scope="row"]').textContent.trim();
|
||||
let re = new RegExp(manga.title,'i');
|
||||
let re = new RegExp(manga.title, 'i');
|
||||
return {
|
||||
id: this.getRootRelativeOrAbsoluteLink(element.querySelector('a'), this.url),
|
||||
title: `${num} ${element.querySelector('a').text.replace(re,'').replace(num,'').trim()}`
|
||||
title: `${num} ${element.querySelector('a').text.replace(re, '').replace(num, '').trim()}`
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
async _getPages(chapter) {
|
||||
let request = new Request(new URL(chapter.id, this.url), this.requestOptions);
|
||||
let data = await this.fetchDOM(request,'div.container source');
|
||||
return data.map(element => this.getAbsolutePath(element,this.url));
|
||||
let data = await this.fetchDOM(request, 'div.container source');
|
||||
return data.map(element => this.getAbsolutePath(element, this.url));
|
||||
}
|
||||
}
|
|
@ -20,7 +20,7 @@ export default class Bx117 extends Connector {
|
|||
|
||||
async _getChapters(manga) {
|
||||
const request = new Request(this.url + manga.id, this.requestOptions);
|
||||
const data = await this.fetchDOM(request, 'a.d-nowrap',3);
|
||||
const data = await this.fetchDOM(request, 'a.d-nowrap', 3);
|
||||
return data.map(element => {
|
||||
return {
|
||||
id: this.getRootRelativeOrAbsoluteLink(element, this.url),
|
||||
|
@ -41,16 +41,16 @@ export default class Bx117 extends Connector {
|
|||
|
||||
async _getMangas() {
|
||||
let mangaList = [];
|
||||
for(let i = 1; i <= 2 ; i++) {
|
||||
for(let i = 1; i <= 2; i++) {
|
||||
for(let page = 1, run = true; run; page++) {
|
||||
let mangas = await this._getMangasFromPage(page,i);
|
||||
let mangas = await this._getMangasFromPage(page, i);
|
||||
mangas.length > 0 ? mangaList.push(...mangas) : run = false;
|
||||
}
|
||||
}
|
||||
return mangaList;
|
||||
}
|
||||
|
||||
async _getMangasFromPage(page,serial) {
|
||||
async _getMangasFromPage(page, serial) {
|
||||
const request = new Request('http://m.bx117.com/statics/qingtiancms.ashx', {
|
||||
method: 'POST',
|
||||
body: new URLSearchParams({
|
||||
|
@ -68,7 +68,7 @@ export default class Bx117 extends Connector {
|
|||
'X-Requested-With': 'XMLHttpRequest',
|
||||
}
|
||||
});
|
||||
const data = await this.fetchDOM(request, 'li' ,3);
|
||||
const data = await this.fetchDOM(request, 'li', 3);
|
||||
return data.map(element => {
|
||||
return {
|
||||
id: this.getRootRelativeOrAbsoluteLink(element.querySelector('a'), this.url),
|
||||
|
|
|
@ -56,14 +56,14 @@ export default class ComicFire extends SpeedBinb {
|
|||
title: chapter.title,
|
||||
language: chapter.language
|
||||
};
|
||||
if(chapter.id.includes("SWF")){ //legacy format; older chapters may use this
|
||||
ch.id = "http://tachiyomi.yomeru-hj.net/comic/" + ch.id.substr(17).replace("_SWF_Window.html","");
|
||||
if(chapter.id.includes("SWF")) { //legacy format; older chapters may use this
|
||||
ch.id = "http://tachiyomi.yomeru-hj.net/comic/" + ch.id.substr(17).replace("_SWF_Window.html", "");
|
||||
let request = new Request(ch.id + 'books/db/book.xml', this.requestOptions);
|
||||
this.fetchDOM(request, 'total:first-of-type')
|
||||
.then((element) => {
|
||||
let total = parseInt(element[0].textContent);
|
||||
let pageList = [];
|
||||
for(let i = 1; i <= total; i++){
|
||||
for(let i = 1; i <= total; i++) {
|
||||
pageList.push(ch.id + "books/images/3.5/" + i + ".jpg");
|
||||
}
|
||||
callback(undefined, pageList);
|
||||
|
|
|
@ -9,7 +9,7 @@ export default class ComicZenon extends CoreView {
|
|||
this.tags = [ 'manga', 'japanese' ];
|
||||
this.url = 'https://comic-zenon.com';
|
||||
|
||||
this.path = [ '/series/zenon', '/series/zenyon', '/series/tatan' ,'/series/oneshot' ];
|
||||
this.path = [ '/series/zenon', '/series/zenyon', '/series/tatan', '/series/oneshot' ];
|
||||
this.queryManga = 'div.serial-contents section div.series-item h4 > a';
|
||||
this.queryMangaTitle = undefined;
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ export default class CrunchyManga extends Crunchyroll {
|
|||
return data.map(manga => {
|
||||
return {
|
||||
id: manga.series_id,
|
||||
title: manga.locale && manga.locale.enUS ? manga.locale.enUS.name : manga.url.replace(/^\// , '')
|
||||
title: manga.locale && manga.locale.enUS ? manga.locale.enUS.name : manga.url.replace(/^\//, '')
|
||||
};
|
||||
});
|
||||
}
|
||||
|
|
|
@ -83,7 +83,7 @@ export default class DigitalTeam extends Connector {
|
|||
return response.json();
|
||||
} )
|
||||
.then( data => {
|
||||
data = typeof data === 'string' ? JSON.parse( data ) : data ;
|
||||
data = typeof data === 'string' ? JSON.parse( data ) : data;
|
||||
let pageList = data[0].map( ( file, index ) => {
|
||||
if( external ) {
|
||||
return data[1][index] + file.name + file.ex;
|
||||
|
|
|
@ -67,7 +67,7 @@ export default class DynastyScans extends Connector {
|
|||
// do not change the command order!
|
||||
let duplicateCount = titleStack.filter( t => t === chapter.title ).length;
|
||||
titleStack.push( chapter.title );
|
||||
chapter.title += duplicateCount > 0 ? ' #' + duplicateCount : '' ;
|
||||
chapter.title += duplicateCount > 0 ? ' #' + duplicateCount : '';
|
||||
}
|
||||
callback( null, chapterList );
|
||||
} catch(error) {
|
||||
|
|
|
@ -64,8 +64,8 @@ export default class GManga extends Connector {
|
|||
data = data['isCompact'] ? this._unpack(data) : data;
|
||||
return data.releases.map(chapter => {
|
||||
let title = 'Vol.' + chapter.volume + ' Ch.' + chapter.chapter;
|
||||
title += chapter.title ? ' - ' + chapter.title : '' ;
|
||||
title += chapter.team_name ? ' [' + chapter.team_name + ']' : '' ;
|
||||
title += chapter.title ? ' - ' + chapter.title : '';
|
||||
title += chapter.team_name ? ' [' + chapter.team_name + ']' : '';
|
||||
return {
|
||||
id: manga.id + '/chapter/' + chapter.chapter + '/' + chapter.team_name,
|
||||
title: title,
|
||||
|
|
|
@ -36,7 +36,7 @@ export default class MangaAy extends Connector {
|
|||
return data.map(element => {
|
||||
return {
|
||||
id: this.getRootRelativeOrAbsoluteLink(element, request.url),
|
||||
title: element.text.replace(manga.title,'').trim(),
|
||||
title: element.text.replace(manga.title, '').trim(),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ export default class MangaCruzers extends Connector {
|
|||
let seasons = page.match(/season-(\d+)$/);
|
||||
if(seasons) {
|
||||
let count = parseInt(seasons[1]);
|
||||
seasons = [...new Array(count).keys()].map(p => page.replace(/season-(\d+)$/ ,`season-${p+1}`));
|
||||
seasons = [...new Array(count).keys()].map(p => page.replace(/season-(\d+)$/, `season-${p+1}`));
|
||||
return [ ...accumulator, ...seasons.reverse() ];
|
||||
} else {
|
||||
return [ ...accumulator, page ];
|
||||
|
|
|
@ -17,7 +17,7 @@ export default class MangaIndoWeb extends Connector {
|
|||
this.querMangaTitleFromURI = 'div#main article div.title h2';
|
||||
}
|
||||
|
||||
async _getMangas(){
|
||||
async _getMangas() {
|
||||
const uri = new URL(this.path, this.url);
|
||||
const request = new Request(uri, this.requestOptions);
|
||||
let data = await this.fetchDOM(request, this.queryMangas);
|
||||
|
@ -30,7 +30,7 @@ export default class MangaIndoWeb extends Connector {
|
|||
});
|
||||
}
|
||||
|
||||
async _getChapters(manga){
|
||||
async _getChapters(manga) {
|
||||
const uri = new URL(manga.id, this.url);
|
||||
const request = new Request( uri, this.requestOptions );
|
||||
let data = await this.fetchDOM(request, this.queryChapters);
|
||||
|
@ -43,7 +43,7 @@ export default class MangaIndoWeb extends Connector {
|
|||
});
|
||||
}
|
||||
|
||||
async _getPages(chapter){
|
||||
async _getPages(chapter) {
|
||||
const uri = new URL(chapter.id, this.url);
|
||||
const request = new Request(uri, this.requestOptions);
|
||||
let data = await this.fetchDOM(request, this.queryPages);
|
||||
|
@ -51,7 +51,7 @@ export default class MangaIndoWeb extends Connector {
|
|||
return data.map(element => this.getAbsolutePath( element, request.url ));
|
||||
}
|
||||
|
||||
async _getMangaFromURI(uri){
|
||||
async _getMangaFromURI(uri) {
|
||||
const request = new Request(new URL(uri), this.requestOptions);
|
||||
const data = await this.fetchDOM(request, this.querMangaTitleFromURI);
|
||||
const title = data[0].textContent.trim();
|
||||
|
|
|
@ -7,7 +7,7 @@ export default class MangaJar extends Connector {
|
|||
super();
|
||||
super.id = 'mangajar';
|
||||
super.label = 'MangaJar';
|
||||
this.tags = [ 'manga', 'english', 'scanlation' , 'webtoon' ];
|
||||
this.tags = [ 'manga', 'english', 'scanlation', 'webtoon' ];
|
||||
this.url = 'https://mangajar.com';
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ export default class MangaLink extends Connector {
|
|||
|
||||
async _getMangas() {
|
||||
let mangaList = [];
|
||||
let request = new Request(new URL('/mangas',this.url), this.requestOptions);
|
||||
let request = new Request(new URL('/mangas', this.url), this.requestOptions);
|
||||
let data = await this.fetchDOM(request, 'li:last-of-type > a');
|
||||
let pageCount = parseInt(data[0].href.match(/(\d*)$/)[1]);
|
||||
for(let page = 1; page <= pageCount; page++) {
|
||||
|
@ -24,7 +24,7 @@ export default class MangaLink extends Connector {
|
|||
}
|
||||
|
||||
async _getMangasFromPage(page) {
|
||||
let request = new Request(new URL(`/mangas?page=${page}`,this.url), this.requestOptions);
|
||||
let request = new Request(new URL(`/mangas?page=${page}`, this.url), this.requestOptions);
|
||||
let data = await this.fetchDOM(request, 'div.d-flex > div > a');
|
||||
return data.map(element => {
|
||||
return {
|
||||
|
@ -55,8 +55,8 @@ export default class MangaLink extends Connector {
|
|||
|
||||
async _getPages(chapter) {
|
||||
let request = new Request(new URL(chapter.id, this.url), this.requestOptions);
|
||||
let data = await this.fetchDOM(request,'#images source');
|
||||
return data.map(element => this.getAbsolutePath(element.dataset.src,this.url));
|
||||
let data = await this.fetchDOM(request, '#images source');
|
||||
return data.map(element => this.getAbsolutePath(element.dataset.src, this.url));
|
||||
}
|
||||
|
||||
}
|
|
@ -26,7 +26,7 @@ export default class MangaRaw extends Connector {
|
|||
|
||||
async _getMangasFromPage(page) {
|
||||
let request = new Request(`${this.url}/browse/?results=${page}`, this.requestOptions);
|
||||
let data = await this.fetchDOM(request, '.novel-item a',3);
|
||||
let data = await this.fetchDOM(request, '.novel-item a', 3);
|
||||
return data.map(element => {
|
||||
return {
|
||||
id: this.getRootRelativeOrAbsoluteLink(element, this.url),
|
||||
|
|
|
@ -34,7 +34,7 @@ export default class MangaShip extends Connector {
|
|||
|
||||
async _getChapters(manga) {
|
||||
let uri = new URL(manga.id, this.url);
|
||||
let request = new Request(uri , this.requestOptions);
|
||||
let request = new Request(uri, this.requestOptions);
|
||||
let data = await this.fetchDOM(request, 'div.plylist-single-content > a:first-of-type');
|
||||
return data.map(element => {
|
||||
return {
|
||||
|
|
|
@ -54,7 +54,7 @@ export default class MangaTube extends Connector {
|
|||
.then( data => {
|
||||
let mangaList = data.success.map( entry => {
|
||||
return {
|
||||
id: entry.manga_slug,//entry.manga_id,
|
||||
id: entry.manga_slug, //entry.manga_id,
|
||||
title: entry.manga_title
|
||||
};
|
||||
} );
|
||||
|
@ -86,9 +86,9 @@ export default class MangaTube extends Connector {
|
|||
let volume = card.querySelector( 'a.btn' ).text.trim();
|
||||
let chapters = [...card.querySelectorAll( 'ul.chapter-list li > a:nth-of-type(2)' )].map( element => {
|
||||
let number = element.querySelector( 'b' );
|
||||
number = number ? number.textContent.trim() : '' ;
|
||||
number = number ? number.textContent.trim() : '';
|
||||
let description = element.querySelector( 'span.chapter-name' );
|
||||
description = description ? description.textContent.trim() : '' ;
|
||||
description = description ? description.textContent.trim() : '';
|
||||
let title = volume;
|
||||
title += ( title && number ? ' ' : '' ) + number;
|
||||
title += ( title && description ? ' - ' : '' ) + description;
|
||||
|
|
|
@ -6,7 +6,7 @@ export default class MartialScans extends WordPressMadara {
|
|||
super();
|
||||
super.id = 'martialscans';
|
||||
super.label = 'Martial Scans';
|
||||
this.tags = [ 'manga', 'webtoon' ,'english' ];
|
||||
this.tags = [ 'manga', 'webtoon', 'english' ];
|
||||
this.url = 'https://martialscans.com';
|
||||
|
||||
this.queryMangas = 'div.post-title h3 a:not([target]), div.post-title h5 a:not([target])';
|
||||
|
|
|
@ -39,7 +39,7 @@ export default class Novelgo extends Connector {
|
|||
return mangaList;
|
||||
}
|
||||
|
||||
async _getChaptersFromJSON(page, id){
|
||||
async _getChaptersFromJSON(page, id) {
|
||||
const uri = new URL('/wp-json/noveils/v1/chapters', this.url);
|
||||
uri.searchParams.set('paged', page);
|
||||
uri.searchParams.set('perpage', 250);
|
||||
|
@ -57,7 +57,7 @@ export default class Novelgo extends Connector {
|
|||
async _getChapters(manga) {
|
||||
const mangaId = manga.id.slice(7, -1);
|
||||
let chapterList = [];
|
||||
for (let page = 1, run = true; run; page++){
|
||||
for (let page = 1, run = true; run; page++) {
|
||||
let chapters = await this._getChaptersFromJSON(page, mangaId);
|
||||
chapters.length > 0 ? chapterList.push(...chapters) : run = false;
|
||||
}
|
||||
|
|
|
@ -49,12 +49,9 @@ export default class Ohtabooks extends SpeedBinb {
|
|||
partId = partId.match(/\d+/);
|
||||
|
||||
let title = element.querySelector( '.title' );
|
||||
if( title )
|
||||
{
|
||||
if( title ) {
|
||||
title = title.textContent;
|
||||
}
|
||||
else if( element.classList.contains( 'btnMini' ) )
|
||||
{
|
||||
} else if( element.classList.contains( 'btnMini' ) ) {
|
||||
title = element.textContent;
|
||||
}
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ export default class Qimiaomh extends Connector {
|
|||
let mangaList = [];
|
||||
for(let page = 1, run = true; run; page++) {
|
||||
let result = await this._getMangasFromPage(page);
|
||||
!result.check ? mangaList.push(...result.data) : run = false ;
|
||||
!result.check ? mangaList.push(...result.data) : run = false;
|
||||
}
|
||||
return mangaList;
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ export default class Sa3i9a extends Connector {
|
|||
return data.map(element => {
|
||||
return {
|
||||
id: this.getRootRelativeOrAbsoluteLink(element, this.url),
|
||||
title: element.text.replace('مانجا','').trim()
|
||||
title: element.text.replace('مانجا', '').trim()
|
||||
};
|
||||
});
|
||||
}
|
||||
|
@ -46,16 +46,18 @@ export default class Sa3i9a extends Connector {
|
|||
const request = new Request(new URL(manga.id, this.url), this.requestOptions);
|
||||
const data = await this.fetchDOM(request, '#post-nav > div > a:last-child');
|
||||
for(let page = 1, run = true; run; page++) {
|
||||
if (data.length == 0){
|
||||
if (data.length == 0) {
|
||||
req = manga.id;
|
||||
run = false;
|
||||
} else {req = data[0].href.replace(/page\/(\d+)/,`page/${page}`);}
|
||||
} else {
|
||||
req = data[0].href.replace(/page\/(\d+)/, `page/${page}`);
|
||||
}
|
||||
let chapters = await this._getChaptersFromPage(req);
|
||||
chapters.length > 0 ? chaptersList.push(...chapters) : run = false;
|
||||
}
|
||||
return chaptersList;
|
||||
}
|
||||
async _getChaptersFromPage(req){
|
||||
async _getChaptersFromPage(req) {
|
||||
const data = await this.fetchDOM(new Request(new URL(req, this.url), this.requestOptions), 'div.ft-ctbox h2 > a');
|
||||
return data.map(element => {
|
||||
return {
|
||||
|
|
|
@ -25,7 +25,7 @@ export default class ScantradUnion extends Connector {
|
|||
mangas.push( ...data.map(element => {
|
||||
return {
|
||||
id: this.getRootRelativeOrAbsoluteLink(element.href, this.url),
|
||||
title: element.text.trim().replace(/^(\[Partenaire\])/,"")
|
||||
title: element.text.trim().replace(/^(\[Partenaire\])/, "")
|
||||
};
|
||||
}));
|
||||
}
|
||||
|
@ -68,6 +68,6 @@ export default class ScantradUnion extends Connector {
|
|||
async _getMangaFromURI(uri) {
|
||||
let request = new Request(new URL(uri.href), this.requestOptions);
|
||||
let data = await this.fetchDOM(request, 'div.projet-description > h2');
|
||||
return new Manga(this, uri.pathname, data[0].textContent.trim().replace(/^(\[Partenaire\])/,""));
|
||||
return new Manga(this, uri.pathname, data[0].textContent.trim().replace(/^(\[Partenaire\])/, ""));
|
||||
}
|
||||
}
|
|
@ -14,7 +14,7 @@ export default class Sukima extends Connector {
|
|||
}
|
||||
|
||||
async _getMangas() {
|
||||
let categorys = await this._fetchPOST('/api/book/v1/free/','{"store":false,"genre":"0"}');
|
||||
let categorys = await this._fetchPOST('/api/book/v1/free/', '{"store":false,"genre":"0"}');
|
||||
|
||||
let uri;
|
||||
let pages;
|
||||
|
@ -52,7 +52,7 @@ export default class Sukima extends Connector {
|
|||
}
|
||||
|
||||
async _getChapters(manga) {
|
||||
let books = await this._fetchPOST('/api/book/v1/title/'+manga.id+'/','{}');
|
||||
let books = await this._fetchPOST('/api/book/v1/title/'+manga.id+'/', '{}');
|
||||
|
||||
let chapters = [];
|
||||
for (const book of books.contents) {
|
||||
|
@ -145,7 +145,7 @@ export default class Sukima extends Connector {
|
|||
|
||||
async _getMangaFromURI(uri) {
|
||||
let id = uri.pathname.match(/\/(\w+)\/?$/)[1];
|
||||
let data = await this._fetchPOST('/api/book/v1/title/'+id+'/','{}');
|
||||
let data = await this._fetchPOST('/api/book/v1/title/'+id+'/', '{}');
|
||||
return new Manga(this, id, data.title);
|
||||
}
|
||||
|
||||
|
|
|
@ -26,8 +26,7 @@ export default class Tapread extends Connector {
|
|||
async _getMangaList(callback) {
|
||||
try {
|
||||
let mangaList = [];
|
||||
for(let page = 1; page < 99; page++)
|
||||
{
|
||||
for(let page = 1; page < 99; page++) {
|
||||
let request = new Request(this.url + '/comic/moredetail?pageNo=' + page, this.requestOptions);
|
||||
let data = await this.fetchJSON(request);
|
||||
if(!data.result) {
|
||||
|
|
|
@ -6,7 +6,7 @@ export default class TurkceManga extends WordPressMadara {
|
|||
super();
|
||||
super.id = 'turkcemanga';
|
||||
super.label = 'Turkce Manga';
|
||||
this.tags = [ 'manga', 'webtoon' ,'turkish' ];
|
||||
this.tags = [ 'manga', 'webtoon', 'turkish' ];
|
||||
this.url = 'https://www.turkcemanga.com';
|
||||
this.requestOptions.headers.set('x-referer', this.url);
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ export default class UnionMangas extends Connector {
|
|||
return uri.href;
|
||||
} );
|
||||
pageList = pageList.filter( page => {
|
||||
return page.indexOf( 'banner' ) < 0 ;
|
||||
return page.indexOf( 'banner' ) < 0;
|
||||
} );
|
||||
callback( null, pageList );
|
||||
} )
|
||||
|
|
|
@ -77,7 +77,7 @@ export default class UraSunday extends Connector {
|
|||
}
|
||||
try {
|
||||
images = await this._extractWebarenaNew(data, request.url);
|
||||
} catch(error){
|
||||
} catch(error) {
|
||||
//
|
||||
}
|
||||
try {
|
||||
|
|
|
@ -6,7 +6,7 @@ export default class VerComicsPorno extends Connector {
|
|||
super();
|
||||
super.id = 'vercomicsporno';
|
||||
super.label = 'VerComicsPorno';
|
||||
this.tags = ['porn' ,'spanish'];
|
||||
this.tags = ['porn', 'spanish'];
|
||||
this.url = 'https://vercomicsporno.com';
|
||||
|
||||
this.path = '/page/';
|
||||
|
@ -22,14 +22,14 @@ export default class VerComicsPorno extends Connector {
|
|||
this.cfMailDecrypt(element);
|
||||
return {
|
||||
id: this.getRootRelativeOrAbsoluteLink(element, request.url),
|
||||
title: element.href.split('/')[3].replace(/(-)/g,' ')
|
||||
title: element.href.split('/')[3].replace(/(-)/g, ' ')
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
async _getMangas() {
|
||||
let mangaList = [];
|
||||
let request = new Request(this.url + this.path + '1' , this.requestOptions);
|
||||
let request = new Request(this.url + this.path + '1', this.requestOptions);
|
||||
let data = await this.fetchDOM(request, this.pager);
|
||||
let pageCount = parseInt(data[0].href.match(/\d+$/));
|
||||
for(let page = 1; page <= pageCount; page++) {
|
||||
|
|
|
@ -8,7 +8,7 @@ export default class Webmangatr extends Connector {
|
|||
super();
|
||||
super.id = 'webmangatr';
|
||||
super.label = 'WEBMANGATR';
|
||||
this.tags = ['turkish' ,'webtoon','hentai'];
|
||||
this.tags = ['turkish', 'webtoon', 'hentai'];
|
||||
this.url = 'https://webmangatr.com';
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ export default class jpm1234 extends SinMH {
|
|||
super();
|
||||
super.id = 'jpm1234';
|
||||
super.label = 'jpm1234';
|
||||
this.tags = [ 'manga','webtoon','chinese' ];
|
||||
this.tags = [ 'manga', 'webtoon', 'chinese' ];
|
||||
this.url = 'http://jpm1234.com';
|
||||
this.requestOptions.headers.set('x-referer', this.url);
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ export default class RawMangatop extends Connector {
|
|||
async _getMangas() {
|
||||
let mangaList = [];
|
||||
let request = new Request(this.url + '/directory', this.requestOptions);
|
||||
let data = await this.fetchDOM(request, 'div.content ul.pagination li:nth-last-of-type(2) a.page-link' , 3);
|
||||
let data = await this.fetchDOM(request, 'div.content ul.pagination li:nth-last-of-type(2) a.page-link', 3);
|
||||
let pageCount = parseInt(data[0].textContent);
|
||||
for(let page = 1; page <= pageCount; page++) {
|
||||
let mangas = await this._getMangasFromPage(page);
|
||||
|
@ -35,7 +35,7 @@ export default class RawMangatop extends Connector {
|
|||
|
||||
async _getMangasFromPage(page) {
|
||||
let request = new Request(this.url + '/directory?page=' + page, this.requestOptions);
|
||||
let data = await this.fetchDOM(request, 'div.content ul.directory li.series div.details p.title a' , 3);
|
||||
let data = await this.fetchDOM(request, 'div.content ul.directory li.series div.details p.title a', 3);
|
||||
return data.map(element => {
|
||||
return {
|
||||
id: this.getRootRelativeOrAbsoluteLink(element, request.url),
|
||||
|
@ -46,7 +46,7 @@ export default class RawMangatop extends Connector {
|
|||
|
||||
async _getChapters(manga) {
|
||||
let request = new Request(this.url + manga.id, this.requestOptions);
|
||||
let data = await this.fetchDOM(request, 'div.tab-pane ul.list-group li.list-group-item a' , 3);
|
||||
let data = await this.fetchDOM(request, 'div.tab-pane ul.list-group li.list-group-item a', 3);
|
||||
return data.map(element => {
|
||||
return {
|
||||
id: this.getRootRelativeOrAbsoluteLink(element, request.url),
|
||||
|
@ -58,7 +58,7 @@ export default class RawMangatop extends Connector {
|
|||
|
||||
async _getPages(chapter) {
|
||||
let request = new Request(this.url + chapter.id, this.requestOptions);
|
||||
let data = (await this.fetchDOM(request, 'select.custom-select option:last-of-type' , 3))[1];
|
||||
let data = (await this.fetchDOM(request, 'select.custom-select option:last-of-type', 3))[1];
|
||||
return new Array(Number(data.value)).fill().map((_, page) => `${this.url}/viewer${chapter.id}/${page + 1}`);
|
||||
}
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ export default class wuqimh extends SinMH {
|
|||
super();
|
||||
super.id = 'wuqimh';
|
||||
super.label = 'wuqimh';
|
||||
this.tags = [ 'manga','hentai','chinese' ];
|
||||
this.tags = [ 'manga', 'hentai', 'chinese' ];
|
||||
this.url = 'http://www.wuqimh.com';
|
||||
this.requestOptions.headers.set('x-referer', this.url);
|
||||
|
||||
|
|
|
@ -147,7 +147,7 @@ export default class BookmarkImporter {
|
|||
*/
|
||||
_mapFMDConnectorID( connectorFMD ) {
|
||||
let connectorID = this._connectorMap[connectorFMD];
|
||||
return connectorID ? connectorID : connectorFMD ;
|
||||
return connectorID ? connectorID : connectorFMD;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -155,6 +155,6 @@ export default class BookmarkImporter {
|
|||
*/
|
||||
_mapFMDMangaID( connectorID, mangaFMD ) {
|
||||
let mangaConvert = this._mangaMap[connectorID];
|
||||
return mangaConvert ? mangaConvert( mangaFMD ) : mangaFMD ;
|
||||
return mangaConvert ? mangaConvert( mangaFMD ) : mangaFMD;
|
||||
}
|
||||
}
|
|
@ -176,7 +176,7 @@ export default class BookmarkManager extends EventTarget {
|
|||
return false;
|
||||
}
|
||||
let index = this.bookmarks.findIndex( ( bookmark ) => {
|
||||
return bookmark.key.manga === manga.id && bookmark.key.connector === manga.connector.id ;
|
||||
return bookmark.key.manga === manga.id && bookmark.key.connector === manga.connector.id;
|
||||
});
|
||||
if( index < 0 ) {
|
||||
let bookmark = new Bookmark( manga );
|
||||
|
@ -194,7 +194,7 @@ export default class BookmarkManager extends EventTarget {
|
|||
*/
|
||||
deleteBookmark( bookmark ) {
|
||||
let index = this.bookmarks.findIndex( ( b ) => {
|
||||
return b.key.manga === bookmark.key.manga && b.key.connector === bookmark.key.connector ;
|
||||
return b.key.manga === bookmark.key.manga && b.key.connector === bookmark.key.connector;
|
||||
});
|
||||
if( index > -1 ) {
|
||||
this.bookmarks.splice( index, 1 );
|
||||
|
@ -209,6 +209,6 @@ export default class BookmarkManager extends EventTarget {
|
|||
* Helper function for sorting
|
||||
*/
|
||||
compareBookmarks( a, b ) {
|
||||
return a.title.manga.toLowerCase() < b.title.manga.toLowerCase() ? -1 : 1 ;
|
||||
return a.title.manga.toLowerCase() < b.title.manga.toLowerCase() ? -1 : 1;
|
||||
}
|
||||
}
|
|
@ -20,7 +20,7 @@ export default class Chapter extends EventTarget {
|
|||
this.manga = manga;
|
||||
this.id = id;
|
||||
this.title = title;
|
||||
this.file = status === statusDefinitions.offline ? this._getRawFileName( title ) : this._getSanatizedFileName( title ) ;
|
||||
this.file = status === statusDefinitions.offline ? this._getRawFileName( title ) : this._getSanatizedFileName( title );
|
||||
this.language = language;
|
||||
this.status = status;
|
||||
this.pageProcess = false;
|
||||
|
|
|
@ -57,7 +57,7 @@ export default class ChaptermarkManager extends EventTarget {
|
|||
|
||||
_getChapterIdentifier( chapter ) {
|
||||
// some chapters are using objects as ID, these will provide a hash as identifier
|
||||
return chapter.id.hash || chapter.id ;
|
||||
return chapter.id.hash || chapter.id;
|
||||
}
|
||||
|
||||
isChapterMarked( chapter, mark ) {
|
||||
|
@ -104,7 +104,7 @@ export default class ChaptermarkManager extends EventTarget {
|
|||
let chaptermark = undefined;
|
||||
if( manga ) {
|
||||
chaptermark = this.chaptermarks.find( mark => {
|
||||
return mark.mangaID === manga.id && mark.connectorID === manga.connector.id ;
|
||||
return mark.mangaID === manga.id && mark.connectorID === manga.connector.id;
|
||||
} );
|
||||
// backward compatibility (old chaptermarks don't have a title)
|
||||
if( chaptermark ) {
|
||||
|
|
|
@ -114,7 +114,7 @@ export default class Connector {
|
|||
} );
|
||||
// sort by title
|
||||
mangas.sort( ( a, b ) => {
|
||||
return a.title.toLowerCase() < b.title.toLowerCase() ? -1 : 1 ;
|
||||
return a.title.toLowerCase() < b.title.toLowerCase() ? -1 : 1;
|
||||
} );
|
||||
|
||||
this.mangaCache = undefined;
|
||||
|
@ -153,7 +153,7 @@ export default class Connector {
|
|||
.then( existingMangaTitles => {
|
||||
this.existingManga = existingMangaTitles;
|
||||
// check if manga list is cached
|
||||
return this.mangaCache && this.mangaCache.length ? this._getUpdatedMangasFromCache() : this._getUpdatedMangasFromFile() ;
|
||||
return this.mangaCache && this.mangaCache.length ? this._getUpdatedMangasFromCache() : this._getUpdatedMangasFromFile();
|
||||
} )
|
||||
.then( mangas => {
|
||||
callback( null, mangas );
|
||||
|
@ -408,8 +408,8 @@ export default class Connector {
|
|||
* => do not forget to remove this prefix from the links!
|
||||
*/
|
||||
createDOM( content, replaceImageTags, clearIframettributes ) {
|
||||
replaceImageTags = replaceImageTags !== undefined ? replaceImageTags : true ;
|
||||
clearIframettributes = clearIframettributes !== undefined ? clearIframettributes : true ;
|
||||
replaceImageTags = replaceImageTags !== undefined ? replaceImageTags : true;
|
||||
clearIframettributes = clearIframettributes !== undefined ? clearIframettributes : true;
|
||||
if( replaceImageTags ) {
|
||||
content = content.replace( /<img/g, '<source');
|
||||
content = content.replace( /<\/img/g, '</source');
|
||||
|
|
|
@ -27,7 +27,7 @@ export default class DownloadJob extends EventTarget {
|
|||
this.requestOptions = chapter.manga.connector.requestOptions || {};
|
||||
// TODO: initialize requestOptions.headers = new Headers() if not set
|
||||
this.chunkSize = 8388608; // 8 MB
|
||||
this.throttle = chapter.manga.connector.config && chapter.manga.connector.config['throttle'] ? chapter.manga.connector.config['throttle'].value : 50 ;
|
||||
this.throttle = chapter.manga.connector.config && chapter.manga.connector.config['throttle'] ? chapter.manga.connector.config['throttle'].value : 50;
|
||||
this.status = undefined;
|
||||
this.progress = 0;
|
||||
this.errors = [];
|
||||
|
|
|
@ -76,7 +76,7 @@ export default class Manga extends EventTarget {
|
|||
return fileName === chapter.file.full
|
||||
|| fileName === chapter.file.name + extensions.mp4
|
||||
|| fileName === chapter.file.name + extensions.mkv
|
||||
|| fileName === chapter.file.name + extensions.m3u8 ;
|
||||
|| fileName === chapter.file.name + extensions.m3u8;
|
||||
} );
|
||||
}
|
||||
|
||||
|
@ -173,7 +173,7 @@ export default class Manga extends EventTarget {
|
|||
// extract volume number
|
||||
let volume = name.match( reVol );
|
||||
if( volume && volume.length > 1 ) {
|
||||
volume = volume[1] ? volume[1] : '' ;
|
||||
volume = volume[1] ? volume[1] : '';
|
||||
} else {
|
||||
volume = '';
|
||||
}
|
||||
|
@ -183,7 +183,7 @@ export default class Manga extends EventTarget {
|
|||
// extract chapter number
|
||||
let chapter = name.match( reCh );
|
||||
if( chapter && chapter.length > 1 ) {
|
||||
chapter = chapter[1] ? chapter[1] : '' ;
|
||||
chapter = chapter[1] ? chapter[1] : '';
|
||||
} else {
|
||||
chapter = '';
|
||||
}
|
||||
|
@ -206,7 +206,7 @@ export default class Manga extends EventTarget {
|
|||
*/
|
||||
_padNumberPrefixWithZeros( text, digits ) {
|
||||
let prefix = text.toString().match( /^\d+/ );
|
||||
let count = prefix && prefix.length > 0 ? prefix[0].length : 0 ;
|
||||
let count = prefix && prefix.length > 0 ? prefix[0].length : 0;
|
||||
count = Math.min( digits, count );
|
||||
return '0'.repeat( digits - count ) + text;
|
||||
}
|
||||
|
|
|
@ -417,12 +417,9 @@ export default class Request {
|
|||
* NEVER overwrite the referer for cloudflare's DDoS protection to prevent infinite redirects!
|
||||
*/
|
||||
if( !uri.pathname.includes( 'chk_jschl' ) ) {
|
||||
// Priority 1: Force referer for certain hosts
|
||||
if( uri.hostname.includes( '.mcloud.to' ) ) {
|
||||
details.requestHeaders['Referer'] = uri.href;
|
||||
}
|
||||
// Priority 2: Use referer provided by connector
|
||||
else if( details.requestHeaders['x-referer'] ) {
|
||||
} else if( details.requestHeaders['x-referer'] ) {
|
||||
details.requestHeaders['Referer'] = details.requestHeaders['x-referer'];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -292,8 +292,7 @@ export default class Settings extends EventTarget {
|
|||
&& data[key] !== undefined
|
||||
&& this[key]
|
||||
&& this[key].input
|
||||
&& this[key].input !== types.disabled)
|
||||
{
|
||||
&& this[key].input !== types.disabled) {
|
||||
this[key].value = this._getDecryptedValue(this[key].input, data[key]);
|
||||
this[key].value = this._getValidValue('General', this[key]);
|
||||
}
|
||||
|
@ -306,8 +305,7 @@ export default class Settings extends EventTarget {
|
|||
&& data.connectors[connector.id]
|
||||
&& data.connectors[connector.id][key] !== undefined
|
||||
&& connector.config[key]
|
||||
&& connector.config[key].input)
|
||||
{
|
||||
&& connector.config[key].input) {
|
||||
connector.config[key].value = this._getDecryptedValue(connector.config[key].input, data.connectors[connector.id][key]);
|
||||
connector.config[key].value = this._getValidValue(connector.label, connector.config[key], true);
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ export default class UserAgent {
|
|||
let $ = UserAgent;
|
||||
let sep = ['_', '.'];
|
||||
let major = ['10'];
|
||||
let minor = ['8','9', '10', '11', '12', '13'];
|
||||
let minor = ['8', '9', '10', '11', '12', '13'];
|
||||
let patch = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10'];
|
||||
let version = [ $._rd( major ), $._rd( minor ), $._rd( patch ) ].join( $._rd( sep ) );
|
||||
return 'Macintosh; Intel Mac OS X ' + version;
|
||||
|
|
Loading…
Reference in New Issue