From bb88380a0d5b05993af1e0b213ef52b36610d0d4 Mon Sep 17 00:00:00 2001 From: uy/sun Date: Mon, 22 Jan 2024 17:28:25 +0800 Subject: [PATCH] Fix linovelib (#711) * fix(linovelib): new site url and fix parsing error * remove: while loop in searchNovels * feat: support novel status --- .dist/he0119/plugins.json | 973 +++++++++++++++++++++++++++++++ .dist/he0119/plugins.min.json | 1 + .js/plugins/chinese/linovelib.js | 230 ++++---- plugins/chinese/linovelib.ts | 201 +++---- 4 files changed, 1168 insertions(+), 237 deletions(-) create mode 100644 .dist/he0119/plugins.json create mode 100644 .dist/he0119/plugins.min.json diff --git a/.dist/he0119/plugins.json b/.dist/he0119/plugins.json new file mode 100644 index 0000000..902a66e --- /dev/null +++ b/.dist/he0119/plugins.json @@ -0,0 +1,973 @@ +{ + "العربية": [ + { + "id": "ar-mtl", + "name": "ArMTL[madara]", + "site": "https://ar-mtl.club/", + "lang": "العربية", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/arabic/ArMTL[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/armtl.png" + }, + { + "id": "arnovel", + "name": "ArNovel[madara]", + "site": "https://arnovel.me/", + "lang": "العربية", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/arabic/ArNovel[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/arnovel.png" + }, + { + "id": "hizomanga", + "name": "HizoManga[madara]", + "site": "https://hizomanga.com/", + "lang": "العربية", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/arabic/HizoManga[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/hizomanga.png" + }, + { + "id": "kol-novel", + "name": "Kol Novel[wpmangastream]", + "site": "https://kolnovel.com/", + "lang": "العربية", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/arabic/KolNovel[wpmangastream].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/wpmangastream/icons/kol-novel.png" + }, + { + "id": "kolnovel", + "name": "KolNovel", + "site": "https://kolnovel.lol/", + "lang": "العربية", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/arabic/kolnovel.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/wpmangastream/icons/kolnovel.png" + }, + { + "id": "novel4up", + "name": "Novel4Up[madara]", + "site": "https://novel4up.com/", + "lang": "العربية", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/arabic/Novel4Up[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/novel4up.png" + }, + { + "id": "riwyat", + "name": "Riwyat[madara]", + "site": "https://riwyat.com/", + "lang": "العربية", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/arabic/Riwyat[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/riwyat.png" + }, + { + "id": "teamxnovel", + "name": "TeamXNovel[madara]", + "site": "https://teamxnovel.com/", + "lang": "العربية", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/arabic/TeamXNovel[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/teamxnovel.png" + } + ], + "中文, 汉语, 漢語": [ + { + "id": "linovelib", + "name": "Linovelib", + "site": "https://www.bilinovel.com", + "lang": "中文, 汉语, 漢語", + "version": "1.0.1", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/chinese/linovelib.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/cn/linovelib/icon.png" + } + ], + "English": [ + { + "id": "1stkissnovel", + "name": "FirstKissNovel[madara]", + "site": "https://1stkissnovel.org/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/FirstKissNovel[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/firstkissnovel.png" + }, + { + "id": "anf.net", + "name": "AllNovelFull", + "site": "https://allnovelfull.net", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/allnovelfull.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/allnovelfull/icon.png" + }, + { + "id": "BLN.com", + "name": "BestLightNovel", + "site": "https://bestlightnovel.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/bestlightnovel.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/bestlightnovel/icon.png" + }, + { + "id": "boxnovel", + "name": "BoxNovel[madara]", + "site": "https://boxnovel.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/BoxNovel[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/boxnovel.png" + }, + { + "id": "clicknovel", + "name": "ClickNovel[madara]", + "site": "https://clicknovel.net/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/ClickNovel[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/clicknovel.png" + }, + { + "id": "comrademao", + "name": "Comrade Mao", + "site": "https://comrademao.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/comrademao.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/comrademao/icon.png" + }, + { + "id": "cratenovel", + "name": "CrateNovel[madara]", + "site": "https://cratenovel.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/CrateNovel[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/cratenovel.png" + }, + { + "id": "daonovel", + "name": "DaoNovel[madara]", + "site": "https://daonovel.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/DaoNovel[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/daonovel.png" + }, + { + "id": "DDL.com", + "name": "Divine Dao Library", + "site": "https://www.divinedaolibrary.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/divinedaolibrary.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/divinedaolibrary/icon.png" + }, + { + "id": "earlynovel", + "name": "Early Novel", + "site": "https://earlynovel.net/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/earlynovel.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/latestnovel.png" + }, + { + "id": "fanTLS", + "name": "Fans Translations[madara]", + "site": "https://fanstranslations.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/FansTranslations[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/fanstranslations.png" + }, + { + "id": "foxaholic", + "name": "Foxaholic", + "site": "https://www.foxaholic.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/foxaholic.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/foxaholic/icon.png" + }, + { + "id": "freenovel.me", + "name": "FreeNovelMe[madara]", + "site": "https://freenovel.me/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/FreeNovelMe[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/freenovelme.png" + }, + { + "id": "FWN.com", + "name": "Web NOVEL", + "site": "https://freewebnovel.com", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/freewebnovel.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/freewebnovel/icon.png" + }, + { + "id": "guavaread", + "name": "Guavaread[madara]", + "site": "https://guavaread.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/Guavaread[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/guavaread.png" + }, + { + "id": "lightnovelpub", + "name": "LightNovelPub", + "site": "https://www.lightnovelpub.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/lightnovelpub.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/lightnovelpub/icon.png" + }, + { + "id": "LightNovelUpdates", + "name": "Light Novel Updates", + "site": "https://www.lightnovelupdates.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/lightnovelupdates.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/lightnovelupdates/icon.png" + }, + { + "id": "lightnovelworld", + "name": "LightNovelWorld", + "site": "https://www.webnovelworld.org/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/lightnovelworld.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/lightnovelworld/icon.png" + }, + { + "id": "lnheaven", + "name": "LightNovelHeaven[madara]", + "site": "https://lightnovelheaven.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/LightNovelHeaven[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/lightnovelheaven.png" + }, + { + "id": "Ltnovel.com", + "name": "Ltnovel[readwn]", + "site": "https://www.ltnovel.com", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/Ltnovel[readwn].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/readwn/icons/ltnovel.png" + }, + { + "id": "lunarletters", + "name": "LunarLetters[madara]", + "site": "https://www.lunarletters.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/LunarLetters[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/lunarletters.png" + }, + { + "id": "mostnovel", + "name": "MostNovel[madara]", + "site": "https://mostnovel.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/MostNovel[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/mostnovel.png" + }, + { + "id": "mtl-novel", + "name": "MTL-Novel[madara]", + "site": "https://mtl-novel.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/MTLNovel[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/mtl-novel.png" + }, + { + "id": "mtlnovel", + "name": "MTL Novel", + "site": "https://www.mtlnovel.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/mtlnovel.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/mtlnovel/icon.png" + }, + { + "id": "mtlnovel.club", + "name": "MTLNovel.Club[madara]", + "site": "https://mtlnovel.club/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/MTLNovelClub[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/mtlnovel.club.png" + }, + { + "id": "mtlreader", + "name": "MTL Reader", + "site": "https://mtlreader.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/mtlreader.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/mtlreader/icon.png" + }, + { + "id": "mysticalmerries", + "name": "MysticalSeries[madara]", + "site": "https://mysticalmerries.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/MysticalSeries[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/mysticalseries.png" + }, + { + "id": "neosekaiTLS", + "name": "NeoSekai Translations[madara]", + "site": "https://www.neosekaitranslations.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/NeoSekaiTranslations[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/neosekaitranslations.png" + }, + { + "id": "NF.me", + "name": "NovelFullMe", + "site": "https://novelfull.me/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/NovelFullMe.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/novelfullme/icon.png" + }, + { + "id": "nitromanga", + "name": "Nitro Manga", + "site": "https://nitromanga.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/nitromanga.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/nitromanga/icon.png" + }, + { + "id": "NO.net", + "name": "novelsOnline", + "site": "https://novelsonline.net", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/NovelOnline.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/coverNotAvailable.jpg" + }, + { + "id": "noblemtl", + "name": "NobleMTL", + "site": "https://noblemtl.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/nobleMTL.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/noblemtl/icon.png" + }, + { + "id": "nocturneTLS", + "name": "Nocturne Translations[madara]", + "site": "https://nocturnetls.net/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/NocturneTranslations[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/nocturnetranslations.png" + }, + { + "id": "noobchanTL", + "name": "Noobchan Translation[madara]", + "site": "https://noobchan.xyz/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/NoobchanTranslation[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/noobchantranslation.png" + }, + { + "id": "novelbin", + "name": "Novel Bin", + "site": "https://novelmax.net/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/novelbin.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/novelbin/icon.png" + }, + { + "id": "novelfull", + "name": "NovelFull", + "site": "https://novelfull.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/novelfull.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/novelfull/icon.png" + }, + { + "id": "novelhall", + "name": "Novel Hall", + "site": "https://novelhall.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/novelhall.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/novelhall/icon.png" + }, + { + "id": "novelmultiverse", + "name": "NovelMultiverse[madara]", + "site": "https://www.novelmultiverse.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/NovelMultiverse[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/novelmultiverse.png" + }, + { + "id": "novelr18", + "name": "NovelR18[madara]", + "site": "https://novelr18.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/NovelR18[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/novelr18.png" + }, + { + "id": "novelroom", + "name": "Novelroom.net[madara]", + "site": "https://novelroom.net/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/Novelroomnet[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/novelroom.net.png" + }, + { + "id": "novelstic", + "name": "Novelstic[madara]", + "site": "https://novelstic.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/Novelstic[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/novelstic.png" + }, + { + "id": "novelTL", + "name": "NovelTranslate[madara]", + "site": "https://noveltranslate.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/NovelTranslate[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/noveltranslate.png" + }, + { + "id": "novelupdates", + "name": "Novel Updates", + "site": "https://www.novelupdates.com/", + "lang": "English", + "version": "0.5.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/novelupdates.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/novelupdates/icon.png" + }, + { + "id": "onlymtl", + "name": "OnlyMTL[madara]", + "site": "https://www.onlymtl.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/OnlyMTL[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/onlymtl.png" + }, + { + "id": "pandamtl", + "name": "PandaMTL", + "site": "https://pandamtl.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/pandaMTL.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/wordpress/icon.png" + }, + { + "id": "readwebnovels", + "name": "ReadWebNovels[madara]", + "site": "https://readwebnovels.net/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/ReadWebNovels[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/readwebnovels.png" + }, + { + "id": "sleeptTLS", + "name": "SleepyTranslations[madara]", + "site": "https://sleepytranslations.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/SleepyTranslations[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/sleepytranslations.png" + }, + { + "id": "sonicmtl", + "name": "SonicMTL[madara]", + "site": "https://www.sonicmtl.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/SonicMTL[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/sonicmtl.png" + }, + { + "id": "sugarbbscan", + "name": "Sugar Babies[madara]", + "site": "https://sugarbbscan.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/SugarBabies[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/sugarbabies.png" + }, + { + "id": "sweetEscapeTL", + "name": "Sweet Escape Translations[madara]", + "site": "https://sweetescapetranslations.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/SweetEscapeTranslations[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/sweetescapetranslations.png" + }, + { + "id": "webnovelover", + "name": "WebNovelLover[madara]", + "site": "https://www.webnovelover.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/WebNovelLover[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/webnovellover.png" + }, + { + "id": "wuxiacity", + "name": "Wuxiacity[readwn]", + "site": "https://www.wuxiacity.com", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/Wuxiacity[readwn].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/readwn/icons/wuxiacity.png" + }, + { + "id": "wuxiap", + "name": "Wuxiap[readwn]", + "site": "https://www.wuxiap.com", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/Wuxiap[readwn].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/readwn/icons/wuxiap.png" + }, + { + "id": "wuxiaworld", + "name": "Wuxia World", + "site": "https://www.wuxiaworld.com/", + "lang": "English", + "version": "0.5.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/wuxiaworld.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/wuxiaworld/icon.png" + }, + { + "id": "wuxiaworld.site", + "name": "WuxiaWorld.Site[madara]", + "site": "https://wuxiaworld.site/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/WuxiaWorldSite[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/wuxiaworld.site.png" + }, + { + "id": "zetroTL", + "name": "Zetro Translation[madara]", + "site": "https://zetrotranslation.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/ZetroTranslation[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/zetrotranslation.png" + }, + { + "id": "zinnovel", + "name": "ZinnNovel[madara]", + "site": "https://zinnovel.com/", + "lang": "English", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/ZinnNovel[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/zinnnovel.png" + } + ], + "français, française": [ + { + "id": "chireads.com", + "name": "Chireads", + "site": "https://chireads.com", + "lang": "français, française", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/french/chireads.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/fr/chireads/icon.png" + }, + { + "id": "lightnovelfr", + "name": "Ligh Novel FR[wpmangastream]", + "site": "https://lightnovelfr.com/", + "lang": "français, française", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/french/LighNovelFR[wpmangastream].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/wpmangastream/icons/lightnovelfr.png" + }, + { + "id": "NDG.com", + "name": "NovelDeGlace", + "site": "https://noveldeglace.com/", + "lang": "français, française", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/french/noveldeglace.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/fr/noveldeglace/icon.png" + } + ], + "Bahasa Indonesia": [ + { + "id": "IDWN.id", + "name": "IndoWebNovel", + "site": "https://indowebnovel.id/id/", + "lang": "Bahasa Indonesia", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/indonesian/indowebnovel.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/id/indowebnovel/icon.png" + }, + { + "id": "meionovel", + "name": "MeioNovel[madara]", + "site": "https://meionovel.id/", + "lang": "Bahasa Indonesia", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/indonesian/MeioNovel[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/meionovel.png" + }, + { + "id": "morenovel", + "name": "MoreNovel[madara]", + "site": "https://morenovel.net/", + "lang": "Bahasa Indonesia", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/indonesian/MoreNovel[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/morenovel.png" + }, + { + "id": "novelringan.com", + "name": "NovelRingan", + "site": "https://novelringan.com/", + "lang": "Bahasa Indonesia", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/indonesian/novelringan.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/id/novelringan/icon.png" + }, + { + "id": "sakura.id", + "name": "SakuraNovel", + "site": "https://sakuranovel.id/", + "lang": "Bahasa Indonesia", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/indonesian/sakuranovel.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/id/sakuranovel/icon.png" + }, + { + "id": "wbnovel", + "name": "WBNovel[madara]", + "site": "https://wbnovel.com/", + "lang": "Bahasa Indonesia", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/indonesian/WBNovel[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/wbnovel.png" + } + ], + "日本語": [ + { + "id": "yomou.syosetu", + "name": "Syosetu", + "site": "https://yomou.syosetu.com/", + "lang": "日本語", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/japanese/Syosetu.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/jp/syosetu/icon.png" + } + ], + "한국어, 조선말": [ + { + "id": "agit.xyz", + "name": "Agitoon", + "site": "https://agit501.xyz/", + "lang": "한국어, 조선말", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/korean/Agitoon.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/kr/agitoon/agit.png" + } + ], + "Português": [ + { + "id": "lightnovelbrasil", + "name": "Light Novel Brasil", + "site": "https://lightnovelbrasil.com/", + "lang": "Português", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/portuguese/lightnovelbrasil.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/wpmangastream/icons/lightnovelbrasil.png" + } + ], + "русский язык": [ + { + "id": "AT", + "name": "Автор Тудей", + "site": "https://author.today", + "lang": "русский язык", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/authortoday.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/authortoday/icon.png" + }, + { + "id": "bookhamster", + "name": "Bookhamster[ifreedom]", + "site": "https://bookhamster.ru", + "lang": "русский язык", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/Bookhamster[ifreedom].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/ifreedom/icons/bookhamster.png" + }, + { + "id": "bookriver", + "name": "Bookriver", + "site": "https://bookriver.ru", + "lang": "русский язык", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/bookriver.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/bookriver/icon.png" + }, + { + "id": "erolate", + "name": "Erolate[rulate]", + "site": "https://erolate.com", + "lang": "русский язык", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/Erolate[rulate].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/rulate/icons/erolate.png" + }, + { + "id": "ficbook", + "name": "ficbook", + "site": "https://ficbook.net", + "lang": "русский язык", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/ficbook.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/ficbook/icon.png" + }, + { + "id": "freedlit.space", + "name": "LitSpace", + "site": "https://freedlit.space", + "lang": "русский язык", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/LitSpace.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/freedlit/icon.png" + }, + { + "id": "ifreedom", + "name": "Свободный Мир Ранобэ[ifreedom]", + "site": "https://ifreedom.su", + "lang": "русский язык", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/СвободныйМирРанобэ[ifreedom].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/ifreedom/icons/ifreedom.png" + }, + { + "id": "jaomix.ru", + "name": "Jaomix", + "site": "https://jaomix.ru", + "lang": "русский язык", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/jaomix.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/jaomix/icon.png" + }, + { + "id": "ReN", + "name": "Renovels", + "site": "https://renovels.org", + "lang": "русский язык", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/renovels.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/renovels/icon.png" + }, + { + "id": "RLIB", + "name": "RanobeLib", + "site": "https://ranobelib.me", + "lang": "русский язык", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/ranobelib.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/ranobelib/icon.png" + }, + { + "id": "RNBH.org", + "name": "RanobeHub", + "site": "https://ranobehub.org/", + "lang": "русский язык", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/ranobehub.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/ranobehub/icon.png" + }, + { + "id": "RNRF", + "name": "РанобэРФ", + "site": "https://ранобэ.рф", + "lang": "русский язык", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/ranoberf.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/ranoberf/icon.png" + }, + { + "id": "TL", + "name": "NovelTL", + "site": "https://novel.tl", + "lang": "русский язык", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/novelTL.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/noveltl/icon.png" + }, + { + "id": "tl.rulate", + "name": "Rulate[rulate]", + "site": "https://tl.rulate.ru", + "lang": "русский язык", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/Rulate[rulate].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/rulate/icons/rulate.png" + } + ], + "español, castellano": [ + { + "id": "awuxia.com", + "name": "ReinoWuxia", + "site": "http://www.reinowuxia.com/", + "lang": "español, castellano", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/spanish/novelawuxia.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/es/novelawuxia/icon.png" + }, + { + "id": "HasuTL", + "name": "Hasu Translations", + "site": "https://hasutl.wordpress.com/", + "lang": "español, castellano", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/spanish/hasutl.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/es/hasutl/icon.png" + }, + { + "id": "ligera.com", + "name": "Novelas Ligera", + "site": "https://novelasligera.com/", + "lang": "español, castellano", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/spanish/novelasligera.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/es/novelasligera/icon.png" + }, + { + "id": "oasisTL.wp", + "name": "Oasis Translations", + "site": "https://oasistranslations.wordpress.com/", + "lang": "español, castellano", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/spanish/oasistranslations.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/es/oasistranslations/icon.png" + }, + { + "id": "skynovels.net", + "name": "SkyNovels", + "site": "https://www.skynovels.net/", + "lang": "español, castellano", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/spanish/skynovels.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/es/skynovels/icon.png" + }, + { + "id": "tunovelaligera", + "name": "TuNovelaLigera", + "site": "https://tunovelaligera.com/", + "lang": "español, castellano", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/spanish/tunovelaligera.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/es/tunovelaligera/icon.png" + }, + { + "id": "yuukitls.com", + "name": "Yuuki Tls", + "site": "https://yuukitls.com/", + "lang": "español, castellano", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/spanish/yukitls.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/es/yuukitls/icon.png" + } + ], + "Türkçe": [ + { + "id": "epiknovel.com", + "name": "EpikNovel", + "site": "https://www.epiknovel.com/", + "lang": "Türkçe", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/turkish/epiknovel.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/tr/epiknovel/icon.png" + }, + { + "id": "lshnovel", + "name": "Liebe Schnee Hiver Novel", + "site": "https://lshnovel.com/", + "lang": "Türkçe", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/turkish/lshnovel.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/wpmangastream/icons/lshnovel.png" + }, + { + "id": "turkcelightnovels", + "name": "TurkceLightNovels[madara]", + "site": "https://turkcelightnovels.com/", + "lang": "Türkçe", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/turkish/TurkceLightNovels[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/turkcelightnovels.png" + }, + { + "id": "webnoveloku", + "name": "WebNovelOku [madara]", + "site": "https://www.webnoveloku.com/", + "lang": "Türkçe", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/turkish/WebNovelOku[madara].js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/webnoveloku.png" + } + ], + "Україна": [ + { + "id": "smakolykytl", + "name": "Смаколики", + "site": "https://smakolykytl.site/", + "lang": "Україна", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/ukraine/smakolykytl.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ua/smakolykytl/icon.png" + } + ], + "Tiếng Việt": [ + { + "id": "ln.hako", + "name": "Hako", + "site": "https://ln.hako.vn", + "lang": "Tiếng Việt", + "version": "1.0.0", + "url": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/vietnamese/LNHako.js", + "iconUrl": "https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/vi/hakolightnovel/icon.png" + } + ] +} \ No newline at end of file diff --git a/.dist/he0119/plugins.min.json b/.dist/he0119/plugins.min.json new file mode 100644 index 0000000..b6ccf2d --- /dev/null +++ b/.dist/he0119/plugins.min.json @@ -0,0 +1 @@ +{"العربية":[{"id":"ar-mtl","name":"ArMTL[madara]","site":"https://ar-mtl.club/","lang":"العربية","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/arabic/ArMTL[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/armtl.png"},{"id":"arnovel","name":"ArNovel[madara]","site":"https://arnovel.me/","lang":"العربية","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/arabic/ArNovel[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/arnovel.png"},{"id":"hizomanga","name":"HizoManga[madara]","site":"https://hizomanga.com/","lang":"العربية","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/arabic/HizoManga[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/hizomanga.png"},{"id":"kol-novel","name":"Kol Novel[wpmangastream]","site":"https://kolnovel.com/","lang":"العربية","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/arabic/KolNovel[wpmangastream].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/wpmangastream/icons/kol-novel.png"},{"id":"kolnovel","name":"KolNovel","site":"https://kolnovel.lol/","lang":"العربية","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/arabic/kolnovel.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/wpmangastream/icons/kolnovel.png"},{"id":"novel4up","name":"Novel4Up[madara]","site":"https://novel4up.com/","lang":"العربية","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/arabic/Novel4Up[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/novel4up.png"},{"id":"riwyat","name":"Riwyat[madara]","site":"https://riwyat.com/","lang":"العربية","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/arabic/Riwyat[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/riwyat.png"},{"id":"teamxnovel","name":"TeamXNovel[madara]","site":"https://teamxnovel.com/","lang":"العربية","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/arabic/TeamXNovel[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/teamxnovel.png"}],"中文, 汉语, 漢語":[{"id":"linovelib","name":"Linovelib","site":"https://www.bilinovel.com","lang":"中文, 汉语, 漢語","version":"1.0.1","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/chinese/linovelib.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/cn/linovelib/icon.png"}],"English":[{"id":"1stkissnovel","name":"FirstKissNovel[madara]","site":"https://1stkissnovel.org/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/FirstKissNovel[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/firstkissnovel.png"},{"id":"anf.net","name":"AllNovelFull","site":"https://allnovelfull.net","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/allnovelfull.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/allnovelfull/icon.png"},{"id":"BLN.com","name":"BestLightNovel","site":"https://bestlightnovel.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/bestlightnovel.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/bestlightnovel/icon.png"},{"id":"boxnovel","name":"BoxNovel[madara]","site":"https://boxnovel.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/BoxNovel[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/boxnovel.png"},{"id":"clicknovel","name":"ClickNovel[madara]","site":"https://clicknovel.net/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/ClickNovel[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/clicknovel.png"},{"id":"comrademao","name":"Comrade Mao","site":"https://comrademao.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/comrademao.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/comrademao/icon.png"},{"id":"cratenovel","name":"CrateNovel[madara]","site":"https://cratenovel.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/CrateNovel[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/cratenovel.png"},{"id":"daonovel","name":"DaoNovel[madara]","site":"https://daonovel.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/DaoNovel[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/daonovel.png"},{"id":"DDL.com","name":"Divine Dao Library","site":"https://www.divinedaolibrary.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/divinedaolibrary.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/divinedaolibrary/icon.png"},{"id":"earlynovel","name":"Early Novel","site":"https://earlynovel.net/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/earlynovel.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/latestnovel.png"},{"id":"fanTLS","name":"Fans Translations[madara]","site":"https://fanstranslations.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/FansTranslations[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/fanstranslations.png"},{"id":"foxaholic","name":"Foxaholic","site":"https://www.foxaholic.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/foxaholic.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/foxaholic/icon.png"},{"id":"freenovel.me","name":"FreeNovelMe[madara]","site":"https://freenovel.me/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/FreeNovelMe[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/freenovelme.png"},{"id":"FWN.com","name":"Web NOVEL","site":"https://freewebnovel.com","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/freewebnovel.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/freewebnovel/icon.png"},{"id":"guavaread","name":"Guavaread[madara]","site":"https://guavaread.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/Guavaread[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/guavaread.png"},{"id":"lightnovelpub","name":"LightNovelPub","site":"https://www.lightnovelpub.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/lightnovelpub.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/lightnovelpub/icon.png"},{"id":"LightNovelUpdates","name":"Light Novel Updates","site":"https://www.lightnovelupdates.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/lightnovelupdates.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/lightnovelupdates/icon.png"},{"id":"lightnovelworld","name":"LightNovelWorld","site":"https://www.webnovelworld.org/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/lightnovelworld.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/lightnovelworld/icon.png"},{"id":"lnheaven","name":"LightNovelHeaven[madara]","site":"https://lightnovelheaven.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/LightNovelHeaven[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/lightnovelheaven.png"},{"id":"Ltnovel.com","name":"Ltnovel[readwn]","site":"https://www.ltnovel.com","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/Ltnovel[readwn].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/readwn/icons/ltnovel.png"},{"id":"lunarletters","name":"LunarLetters[madara]","site":"https://www.lunarletters.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/LunarLetters[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/lunarletters.png"},{"id":"mostnovel","name":"MostNovel[madara]","site":"https://mostnovel.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/MostNovel[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/mostnovel.png"},{"id":"mtl-novel","name":"MTL-Novel[madara]","site":"https://mtl-novel.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/MTLNovel[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/mtl-novel.png"},{"id":"mtlnovel","name":"MTL Novel","site":"https://www.mtlnovel.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/mtlnovel.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/mtlnovel/icon.png"},{"id":"mtlnovel.club","name":"MTLNovel.Club[madara]","site":"https://mtlnovel.club/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/MTLNovelClub[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/mtlnovel.club.png"},{"id":"mtlreader","name":"MTL Reader","site":"https://mtlreader.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/mtlreader.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/mtlreader/icon.png"},{"id":"mysticalmerries","name":"MysticalSeries[madara]","site":"https://mysticalmerries.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/MysticalSeries[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/mysticalseries.png"},{"id":"neosekaiTLS","name":"NeoSekai Translations[madara]","site":"https://www.neosekaitranslations.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/NeoSekaiTranslations[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/neosekaitranslations.png"},{"id":"NF.me","name":"NovelFullMe","site":"https://novelfull.me/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/NovelFullMe.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/novelfullme/icon.png"},{"id":"nitromanga","name":"Nitro Manga","site":"https://nitromanga.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/nitromanga.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/nitromanga/icon.png"},{"id":"NO.net","name":"novelsOnline","site":"https://novelsonline.net","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/NovelOnline.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/coverNotAvailable.jpg"},{"id":"noblemtl","name":"NobleMTL","site":"https://noblemtl.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/nobleMTL.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/noblemtl/icon.png"},{"id":"nocturneTLS","name":"Nocturne Translations[madara]","site":"https://nocturnetls.net/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/NocturneTranslations[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/nocturnetranslations.png"},{"id":"noobchanTL","name":"Noobchan Translation[madara]","site":"https://noobchan.xyz/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/NoobchanTranslation[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/noobchantranslation.png"},{"id":"novelbin","name":"Novel Bin","site":"https://novelmax.net/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/novelbin.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/novelbin/icon.png"},{"id":"novelfull","name":"NovelFull","site":"https://novelfull.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/novelfull.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/novelfull/icon.png"},{"id":"novelhall","name":"Novel Hall","site":"https://novelhall.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/novelhall.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/novelhall/icon.png"},{"id":"novelmultiverse","name":"NovelMultiverse[madara]","site":"https://www.novelmultiverse.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/NovelMultiverse[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/novelmultiverse.png"},{"id":"novelr18","name":"NovelR18[madara]","site":"https://novelr18.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/NovelR18[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/novelr18.png"},{"id":"novelroom","name":"Novelroom.net[madara]","site":"https://novelroom.net/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/Novelroomnet[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/novelroom.net.png"},{"id":"novelstic","name":"Novelstic[madara]","site":"https://novelstic.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/Novelstic[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/novelstic.png"},{"id":"novelTL","name":"NovelTranslate[madara]","site":"https://noveltranslate.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/NovelTranslate[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/noveltranslate.png"},{"id":"novelupdates","name":"Novel Updates","site":"https://www.novelupdates.com/","lang":"English","version":"0.5.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/novelupdates.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/novelupdates/icon.png"},{"id":"onlymtl","name":"OnlyMTL[madara]","site":"https://www.onlymtl.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/OnlyMTL[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/onlymtl.png"},{"id":"pandamtl","name":"PandaMTL","site":"https://pandamtl.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/pandaMTL.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/wordpress/icon.png"},{"id":"readwebnovels","name":"ReadWebNovels[madara]","site":"https://readwebnovels.net/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/ReadWebNovels[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/readwebnovels.png"},{"id":"sleeptTLS","name":"SleepyTranslations[madara]","site":"https://sleepytranslations.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/SleepyTranslations[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/sleepytranslations.png"},{"id":"sonicmtl","name":"SonicMTL[madara]","site":"https://www.sonicmtl.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/SonicMTL[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/sonicmtl.png"},{"id":"sugarbbscan","name":"Sugar Babies[madara]","site":"https://sugarbbscan.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/SugarBabies[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/sugarbabies.png"},{"id":"sweetEscapeTL","name":"Sweet Escape Translations[madara]","site":"https://sweetescapetranslations.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/SweetEscapeTranslations[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/sweetescapetranslations.png"},{"id":"webnovelover","name":"WebNovelLover[madara]","site":"https://www.webnovelover.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/WebNovelLover[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/webnovellover.png"},{"id":"wuxiacity","name":"Wuxiacity[readwn]","site":"https://www.wuxiacity.com","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/Wuxiacity[readwn].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/readwn/icons/wuxiacity.png"},{"id":"wuxiap","name":"Wuxiap[readwn]","site":"https://www.wuxiap.com","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/Wuxiap[readwn].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/readwn/icons/wuxiap.png"},{"id":"wuxiaworld","name":"Wuxia World","site":"https://www.wuxiaworld.com/","lang":"English","version":"0.5.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/wuxiaworld.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/en/wuxiaworld/icon.png"},{"id":"wuxiaworld.site","name":"WuxiaWorld.Site[madara]","site":"https://wuxiaworld.site/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/WuxiaWorldSite[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/wuxiaworld.site.png"},{"id":"zetroTL","name":"Zetro Translation[madara]","site":"https://zetrotranslation.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/ZetroTranslation[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/zetrotranslation.png"},{"id":"zinnovel","name":"ZinnNovel[madara]","site":"https://zinnovel.com/","lang":"English","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/english/ZinnNovel[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/zinnnovel.png"}],"français, française":[{"id":"chireads.com","name":"Chireads","site":"https://chireads.com","lang":"français, française","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/french/chireads.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/fr/chireads/icon.png"},{"id":"lightnovelfr","name":"Ligh Novel FR[wpmangastream]","site":"https://lightnovelfr.com/","lang":"français, française","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/french/LighNovelFR[wpmangastream].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/wpmangastream/icons/lightnovelfr.png"},{"id":"NDG.com","name":"NovelDeGlace","site":"https://noveldeglace.com/","lang":"français, française","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/french/noveldeglace.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/fr/noveldeglace/icon.png"}],"Bahasa Indonesia":[{"id":"IDWN.id","name":"IndoWebNovel","site":"https://indowebnovel.id/id/","lang":"Bahasa Indonesia","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/indonesian/indowebnovel.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/id/indowebnovel/icon.png"},{"id":"meionovel","name":"MeioNovel[madara]","site":"https://meionovel.id/","lang":"Bahasa Indonesia","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/indonesian/MeioNovel[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/meionovel.png"},{"id":"morenovel","name":"MoreNovel[madara]","site":"https://morenovel.net/","lang":"Bahasa Indonesia","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/indonesian/MoreNovel[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/morenovel.png"},{"id":"novelringan.com","name":"NovelRingan","site":"https://novelringan.com/","lang":"Bahasa Indonesia","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/indonesian/novelringan.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/id/novelringan/icon.png"},{"id":"sakura.id","name":"SakuraNovel","site":"https://sakuranovel.id/","lang":"Bahasa Indonesia","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/indonesian/sakuranovel.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/id/sakuranovel/icon.png"},{"id":"wbnovel","name":"WBNovel[madara]","site":"https://wbnovel.com/","lang":"Bahasa Indonesia","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/indonesian/WBNovel[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/wbnovel.png"}],"日本語":[{"id":"yomou.syosetu","name":"Syosetu","site":"https://yomou.syosetu.com/","lang":"日本語","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/japanese/Syosetu.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/jp/syosetu/icon.png"}],"한국어, 조선말":[{"id":"agit.xyz","name":"Agitoon","site":"https://agit501.xyz/","lang":"한국어, 조선말","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/korean/Agitoon.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/kr/agitoon/agit.png"}],"Português":[{"id":"lightnovelbrasil","name":"Light Novel Brasil","site":"https://lightnovelbrasil.com/","lang":"Português","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/portuguese/lightnovelbrasil.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/wpmangastream/icons/lightnovelbrasil.png"}],"русский язык":[{"id":"AT","name":"Автор Тудей","site":"https://author.today","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/authortoday.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/authortoday/icon.png"},{"id":"bookhamster","name":"Bookhamster[ifreedom]","site":"https://bookhamster.ru","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/Bookhamster[ifreedom].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/ifreedom/icons/bookhamster.png"},{"id":"bookriver","name":"Bookriver","site":"https://bookriver.ru","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/bookriver.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/bookriver/icon.png"},{"id":"erolate","name":"Erolate[rulate]","site":"https://erolate.com","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/Erolate[rulate].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/rulate/icons/erolate.png"},{"id":"ficbook","name":"ficbook","site":"https://ficbook.net","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/ficbook.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/ficbook/icon.png"},{"id":"freedlit.space","name":"LitSpace","site":"https://freedlit.space","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/LitSpace.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/freedlit/icon.png"},{"id":"ifreedom","name":"Свободный Мир Ранобэ[ifreedom]","site":"https://ifreedom.su","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/СвободныйМирРанобэ[ifreedom].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/ifreedom/icons/ifreedom.png"},{"id":"jaomix.ru","name":"Jaomix","site":"https://jaomix.ru","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/jaomix.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/jaomix/icon.png"},{"id":"ReN","name":"Renovels","site":"https://renovels.org","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/renovels.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/renovels/icon.png"},{"id":"RLIB","name":"RanobeLib","site":"https://ranobelib.me","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/ranobelib.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/ranobelib/icon.png"},{"id":"RNBH.org","name":"RanobeHub","site":"https://ranobehub.org/","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/ranobehub.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/ranobehub/icon.png"},{"id":"RNRF","name":"РанобэРФ","site":"https://ранобэ.рф","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/ranoberf.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/ranoberf/icon.png"},{"id":"TL","name":"NovelTL","site":"https://novel.tl","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/novelTL.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ru/noveltl/icon.png"},{"id":"tl.rulate","name":"Rulate[rulate]","site":"https://tl.rulate.ru","lang":"русский язык","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/russian/Rulate[rulate].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/rulate/icons/rulate.png"}],"español, castellano":[{"id":"awuxia.com","name":"ReinoWuxia","site":"http://www.reinowuxia.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/spanish/novelawuxia.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/es/novelawuxia/icon.png"},{"id":"HasuTL","name":"Hasu Translations","site":"https://hasutl.wordpress.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/spanish/hasutl.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/es/hasutl/icon.png"},{"id":"ligera.com","name":"Novelas Ligera","site":"https://novelasligera.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/spanish/novelasligera.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/es/novelasligera/icon.png"},{"id":"oasisTL.wp","name":"Oasis Translations","site":"https://oasistranslations.wordpress.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/spanish/oasistranslations.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/es/oasistranslations/icon.png"},{"id":"skynovels.net","name":"SkyNovels","site":"https://www.skynovels.net/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/spanish/skynovels.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/es/skynovels/icon.png"},{"id":"tunovelaligera","name":"TuNovelaLigera","site":"https://tunovelaligera.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/spanish/tunovelaligera.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/es/tunovelaligera/icon.png"},{"id":"yuukitls.com","name":"Yuuki Tls","site":"https://yuukitls.com/","lang":"español, castellano","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/spanish/yukitls.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/es/yuukitls/icon.png"}],"Türkçe":[{"id":"epiknovel.com","name":"EpikNovel","site":"https://www.epiknovel.com/","lang":"Türkçe","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/turkish/epiknovel.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/tr/epiknovel/icon.png"},{"id":"lshnovel","name":"Liebe Schnee Hiver Novel","site":"https://lshnovel.com/","lang":"Türkçe","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/turkish/lshnovel.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/wpmangastream/icons/lshnovel.png"},{"id":"turkcelightnovels","name":"TurkceLightNovels[madara]","site":"https://turkcelightnovels.com/","lang":"Türkçe","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/turkish/TurkceLightNovels[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/turkcelightnovels.png"},{"id":"webnoveloku","name":"WebNovelOku [madara]","site":"https://www.webnoveloku.com/","lang":"Türkçe","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/turkish/WebNovelOku[madara].js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/multisrc/madara/icons/webnoveloku.png"}],"Україна":[{"id":"smakolykytl","name":"Смаколики","site":"https://smakolykytl.site/","lang":"Україна","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/ukraine/smakolykytl.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/ua/smakolykytl/icon.png"}],"Tiếng Việt":[{"id":"ln.hako","name":"Hako","site":"https://ln.hako.vn","lang":"Tiếng Việt","version":"1.0.0","url":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/.js/plugins/vietnamese/LNHako.js","iconUrl":"https://raw.githubusercontent.com/he0119/lnreader-sources/feat/my/icons/src/vi/hakolightnovel/icon.png"}]} \ No newline at end of file diff --git a/.js/plugins/chinese/linovelib.js b/.js/plugins/chinese/linovelib.js index 30c6b44..993adc1 100644 --- a/.js/plugins/chinese/linovelib.js +++ b/.js/plugins/chinese/linovelib.js @@ -44,8 +44,8 @@ var Linovelib = /** @class */ (function () { this.id = "linovelib"; this.name = "Linovelib"; this.icon = "src/cn/linovelib/icon.png"; - this.site = "https://w.linovelib.com"; - this.version = "1.0.0"; + this.site = "https://www.bilinovel.com"; + this.version = "1.0.1"; this.filters = { sort: { label: "Sort By", @@ -71,18 +71,15 @@ var Linovelib = /** @class */ (function () { Linovelib.prototype.popularNovels = function (pageNo, _a) { var filters = _a.filters; return __awaiter(this, void 0, void 0, function () { - var link, headers, body, loadedCheerio, novels; + var link, body, loadedCheerio, novels; var _this = this; return __generator(this, function (_b) { switch (_b.label) { case 0: link = "".concat(this.site, "/top/"); - link += filters.sort; + link += filters.sort.value; link += "/".concat(pageNo, ".html"); - headers = new Headers(); - return [4 /*yield*/, (0, fetch_1.fetchApi)(link, { headers: headers }).then(function (result) { - return result.text(); - })]; + return [4 /*yield*/, (0, fetch_1.fetchText)(link)]; case 1: body = _b.sent(); loadedCheerio = (0, cheerio_1.load)(body); @@ -91,7 +88,7 @@ var Linovelib = /** @class */ (function () { var url = loadedCheerio(el).attr("href"); var novelName = loadedCheerio(el).find(".book-title").text(); var novelCover = loadedCheerio(el) - .find("img.book-cover") + .find("div.book-cover > img") .attr("data-src"); var novelUrl = _this.site + url; if (!url) @@ -111,18 +108,14 @@ var Linovelib = /** @class */ (function () { Linovelib.prototype.parseNovelAndChapters = function (novelUrl) { var _a; return __awaiter(this, void 0, void 0, function () { - var url, headers, result, body, loadedCheerio, novel, chapter, idPattern, novelId, chaptersUrl, chaptersResult, chaptersBody, chaptersLoadedCheerio, volumeName, chapterId; + var url, body, loadedCheerio, novel, meta, chapter, idPattern, novelId, chaptersUrl, chaptersBody, chaptersLoadedCheerio, volumeName, chapterId; var _this = this; return __generator(this, function (_b) { switch (_b.label) { case 0: url = novelUrl; - headers = new Headers(); - return [4 /*yield*/, (0, fetch_1.fetchApi)(url, { headers: headers })]; + return [4 /*yield*/, (0, fetch_1.fetchText)(url)]; case 1: - result = _b.sent(); - return [4 /*yield*/, result.text()]; - case 2: body = _b.sent(); loadedCheerio = (0, cheerio_1.load)(body); novel = { @@ -133,9 +126,8 @@ var Linovelib = /** @class */ (function () { novel.cover = loadedCheerio("#bookDetailWrapper img.book-cover").attr("src"); novel.summary = loadedCheerio("#bookSummary content").text(); novel.author = loadedCheerio("#bookDetailWrapper .book-rand-a a").text(); - // TODO: Need some regex and dirty selector to get it - // Need to look into how to translate that message - novel.status = undefined; + meta = loadedCheerio("#bookDetailWrapper .book-meta").text(); + novel.status = meta.includes("完结") ? "完结" : "连载"; novel.genres = loadedCheerio(".tag-small.red") .children("a") .map(function (i, el) { return loadedCheerio(el).text(); }) @@ -145,16 +137,14 @@ var Linovelib = /** @class */ (function () { idPattern = /\/(\d+)\.html/; novelId = (_a = url.match(idPattern)) === null || _a === void 0 ? void 0 : _a[1]; chaptersUrl = this.site + loadedCheerio("#btnReadBook").attr("href"); - return [4 /*yield*/, (0, fetch_1.fetchApi)(chaptersUrl, { headers: headers })]; - case 3: - chaptersResult = _b.sent(); - return [4 /*yield*/, chaptersResult.text()]; - case 4: + return [4 /*yield*/, (0, fetch_1.fetchText)(chaptersUrl)]; + case 2: chaptersBody = _b.sent(); chaptersLoadedCheerio = (0, cheerio_1.load)(chaptersBody); - chaptersLoadedCheerio("#volumes .chapter-li").each(function (i, el) { + chaptersLoadedCheerio("#volumes .chapter-li:not(.volume-cover)").each(function (i, el) { if (chaptersLoadedCheerio(el).hasClass("chapter-bar")) { volumeName = chaptersLoadedCheerio(el).text(); + return; } else { var urlPart = chaptersLoadedCheerio(el) @@ -191,12 +181,11 @@ var Linovelib = /** @class */ (function () { }; Linovelib.prototype.parseChapter = function (chapterUrl) { return __awaiter(this, void 0, void 0, function () { - var headers, chapterName, chapterText, hasNextPage, pageHasNextPage, pageText, pageNumber, skillgg, addPage, loadPage, url, page; + var chapterName, chapterText, hasNextPage, pageHasNextPage, pageText, pageNumber, skillgg, addPage, loadPage, url, page; var _this = this; return __generator(this, function (_a) { switch (_a.label) { case 0: - headers = new Headers(); chapterText = "", pageText = ""; pageNumber = 1; skillgg = { @@ -314,26 +303,23 @@ var Linovelib = /** @class */ (function () { formatPage = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { // Remove JS - pageCheerio("#ccacontent .cgo").remove(); + pageCheerio("#acontentz .adsbygoogle").remove(); + pageCheerio("#acontentz script").remove(); // Load lazyloaded images - pageCheerio("#ccacontent img.imagecontent").each(function (i, el) { + pageCheerio("#acontentz img.imagecontent").each(function (i, el) { // Sometimes images are either in data-src or src var imgSrc = pageCheerio(el).attr("data-src") || pageCheerio(el).attr("src"); if (imgSrc) { - // The original CDN URL is locked behind a CF-like challenge, switch the URL to bypass that - // There are no react-native-url-polyfill lib, can't use URL API - var regex = /\/\/.+\.com\//; - var imgUrl = imgSrc.replace(regex, "//img.linovelib.com/"); // Clean up img element pageCheerio(el) - .attr("src", imgUrl) + .attr("src", imgSrc) .removeAttr("data-src") .removeClass("lazyload"); } }); // Recover the original character - pageText = pageCheerio("#ccacontent").html() || ""; + pageText = pageCheerio("#acontentz").html() || ""; pageText = pageText.replace(/./g, function (char) { return skillgg[char] || char; }); return [2 /*return*/, Promise.resolve()]; }); @@ -354,18 +340,15 @@ var Linovelib = /** @class */ (function () { }); }); }; loadPage = function (url) { return __awaiter(_this, void 0, void 0, function () { - var result, body, pageCheerio; + var body, pageCheerio; return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, (0, fetch_1.fetchApi)(url, { headers: headers })]; + case 0: return [4 /*yield*/, (0, fetch_1.fetchText)(url)]; case 1: - result = _a.sent(); - return [4 /*yield*/, result.text()]; - case 2: body = _a.sent(); pageCheerio = (0, cheerio_1.load)(body); return [4 /*yield*/, addPage(pageCheerio)]; - case 3: + case 2: _a.sent(); pageHasNextPage = pageCheerio("#footlink a:last").text() === "下一页" @@ -396,112 +379,95 @@ var Linovelib = /** @class */ (function () { }; Linovelib.prototype.searchNovels = function (searchTerm, pageNo) { return __awaiter(this, void 0, void 0, function () { - var searchUrl, Term, headers, NextPage, NoNextPage, DeadEnd, novels, addPage, loadPage, url, page; + var url, body, pageCheerio, novels; var _this = this; return __generator(this, function (_a) { switch (_a.label) { case 0: - searchUrl = "".concat(this.site, "/search/"); - Term = encodeURI(searchTerm); - headers = new Headers(); - pageNo = 1; + url = "".concat(this.site, "/search/").concat(encodeURI(searchTerm), "_").concat(pageNo, ".html"); + return [4 /*yield*/, (0, fetch_1.fetchText)(url)]; + case 1: + body = _a.sent(); + pageCheerio = (0, cheerio_1.load)(body); novels = []; - addPage = function (pageCheerio, redirect) { return __awaiter(_this, void 0, void 0, function () { - var loadSearchResults, novelResults, novelName, novelCover, novelUrl; - var _this = this; - var _a; - return __generator(this, function (_b) { - loadSearchResults = function () { - pageCheerio(".book-ol .book-layout").each(function (i, el) { - var nUrl = pageCheerio(el).attr("href"); - var novelName = pageCheerio(el) - .find(".book-title") - .text(); - var novelCover = pageCheerio(el) - .find("img.book-cover") - .attr("data-src"); - var novelUrl = _this.site + nUrl; - if (!nUrl) - return; - novels.push({ - name: novelName, - url: novelUrl, - cover: novelCover, - }); - }); - }; - novelResults = pageCheerio(".book-ol a.book-layout"); - if (novelResults.length === 0) { - } - else { - loadSearchResults(); - } - if (redirect.length) { - novels.length = 0; - novelName = pageCheerio("#bookDetailWrapper .book-title").text(); - novelCover = pageCheerio("#bookDetailWrapper img.book-cover").attr("src"); - novelUrl = this.site + - ((_a = pageCheerio("#btnReadBook").attr("href")) === null || _a === void 0 ? void 0 : _a.slice(0, -8)) + - ".html"; - novels.push({ - name: novelName, - url: novelUrl, - cover: novelCover, - }); - } - return [2 /*return*/]; + // const addPage = async (pageCheerio: CheerioAPI, redirect: string) => { + // const loadSearchResults = () => { + // pageCheerio(".book-ol .book-layout").each((i, el) => { + // let nUrl = pageCheerio(el).attr("href"); + // const novelName = pageCheerio(el) + // .find(".book-title") + // .text(); + // const novelCover = pageCheerio(el) + // .find("div.book-cover > img") + // .attr("data-src"); + // const novelUrl = this.site + nUrl; + // if (!nUrl) return; + // novels.push({ + // name: novelName, + // url: novelUrl, + // cover: novelCover, + // }); + // }); + // }; + // const novelResults = pageCheerio(".book-ol a.book-layout"); + // if (novelResults.length === 0) { + // } else { + // loadSearchResults(); + // } + // if (redirect.length) { + // novels.length = 0; + // const novelName = pageCheerio( + // "#bookDetailWrapper .book-title" + // ).text(); + // const novelCover = pageCheerio( + // "#bookDetailWrapper div.book-cover > img" + // ).attr("src"); + // const novelUrl = + // this.site + + // pageCheerio("#btnReadBook").attr("href")?.slice(0, -8) + + // ".html"; + // novels.push({ + // name: novelName, + // url: novelUrl, + // cover: novelCover, + // }); + // } + // }; + // NOTE: don't know redirect is for what, comment out for now + // const redirect = pageCheerio("div.book-layout").text(); + // await addPage(pageCheerio, redirect); + pageCheerio(".book-ol .book-layout").each(function (i, el) { + var nUrl = pageCheerio(el).attr("href"); + var novelName = pageCheerio(el) + .find(".book-title") + .text(); + var novelCover = pageCheerio(el) + .find("div.book-cover > img") + .attr("data-src"); + var novelUrl = _this.site + nUrl; + if (!nUrl) + return; + novels.push({ + name: novelName, + url: novelUrl, + cover: novelCover, }); - }); }; - loadPage = function (url) { return __awaiter(_this, void 0, void 0, function () { - var result, body, pageCheerio, redirect; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, (0, fetch_1.fetchApi)(url, { headers: headers })]; - case 1: - result = _a.sent(); - return [4 /*yield*/, result.text()]; - case 2: - body = _a.sent(); - pageCheerio = (0, cheerio_1.load)(body); - redirect = pageCheerio("div.book-layout").text(); - return [4 /*yield*/, addPage(pageCheerio, redirect)]; - case 3: - _a.sent(); - NextPage = pageCheerio(".next").attr("href"); - if (!NextPage) { - NoNextPage === true; - } - else { - NoNextPage = NextPage === "#" ? true : false; - } - return [2 /*return*/, { pageCheerio: pageCheerio, NoNextPage: NoNextPage }]; - } - }); - }); }; - url = "".concat(searchUrl).concat(Term, "_").concat(pageNo, ".html"); - _a.label = 1; - case 1: return [4 /*yield*/, loadPage(url)]; - case 2: - page = _a.sent(); - DeadEnd = page.NoNextPage; - if (DeadEnd === false) { - pageNo++; - url = "".concat(searchUrl).concat(Term, "_").concat(pageNo, ".html"); - } - _a.label = 3; - case 3: - if (DeadEnd === false) return [3 /*break*/, 1]; - _a.label = 4; - case 4: return [2 /*return*/, novels]; + }); + return [2 /*return*/, novels]; } }); }); }; Linovelib.prototype.fetchImage = function (url) { return __awaiter(this, void 0, void 0, function () { + var headers; return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, (0, fetch_1.fetchFile)(url)]; + case 0: + headers = new Headers({ + "Referer": "".concat(this.site, "/"), + }); + return [4 /*yield*/, (0, fetch_1.fetchFile)(url, { headers: headers })]; case 1: return [2 /*return*/, _a.sent()]; } }); diff --git a/plugins/chinese/linovelib.ts b/plugins/chinese/linovelib.ts index 0bd97f9..c463941 100644 --- a/plugins/chinese/linovelib.ts +++ b/plugins/chinese/linovelib.ts @@ -1,5 +1,5 @@ import { CheerioAPI, load as parseHTML } from "cheerio"; -import { fetchApi, fetchFile } from "@libs/fetch"; +import { fetchText, fetchFile } from "@libs/fetch"; import { FilterTypes, Filters } from "@libs/filterInputs"; import { Plugin } from "@typings/plugin"; @@ -7,9 +7,8 @@ class Linovelib implements Plugin.PluginBase { id = "linovelib"; name = "Linovelib"; icon = "src/cn/linovelib/icon.png"; - site = "https://w.linovelib.com"; - version = "1.0.0"; - + site = "https://www.bilinovel.com"; + version = "1.0.1"; async popularNovels( pageNo: number, @@ -17,14 +16,11 @@ class Linovelib implements Plugin.PluginBase { ): Promise { let link = `${this.site}/top/`; - link += filters.sort; + link += filters.sort.value; link += `/${pageNo}.html`; - const headers = new Headers(); - const body = await fetchApi(link, { headers }).then((result) => - result.text() - ); + const body = await fetchText(link); const loadedCheerio = parseHTML(body); @@ -35,7 +31,7 @@ class Linovelib implements Plugin.PluginBase { const novelName = loadedCheerio(el).find(".book-title").text(); const novelCover = loadedCheerio(el) - .find("img.book-cover") + .find("div.book-cover > img") .attr("data-src"); const novelUrl = this.site + url; @@ -55,9 +51,7 @@ class Linovelib implements Plugin.PluginBase { async parseNovelAndChapters(novelUrl: string): Promise { const url = novelUrl; - const headers = new Headers(); - const result = await fetchApi(url, { headers }); - const body = await result.text(); + const body = await fetchText(url); let loadedCheerio = parseHTML(body); @@ -78,9 +72,8 @@ class Linovelib implements Plugin.PluginBase { "#bookDetailWrapper .book-rand-a a" ).text(); - // TODO: Need some regex and dirty selector to get it - // Need to look into how to translate that message - novel.status = undefined; + const meta = loadedCheerio("#bookDetailWrapper .book-meta").text() + novel.status = meta.includes("完结") ? "完结" : "连载"; novel.genres = loadedCheerio(".tag-small.red") .children("a") @@ -96,16 +89,16 @@ class Linovelib implements Plugin.PluginBase { const chaptersUrl = this.site + loadedCheerio("#btnReadBook").attr("href"); - const chaptersResult = await fetchApi(chaptersUrl, { headers }); - const chaptersBody = await chaptersResult.text(); + const chaptersBody = await fetchText(chaptersUrl); const chaptersLoadedCheerio = parseHTML(chaptersBody); let volumeName: string, chapterId: number; - chaptersLoadedCheerio("#volumes .chapter-li").each((i, el) => { + chaptersLoadedCheerio("#volumes .chapter-li:not(.volume-cover)").each((i, el) => { if (chaptersLoadedCheerio(el).hasClass("chapter-bar")) { volumeName = chaptersLoadedCheerio(el).text(); + return; } else { const urlPart = chaptersLoadedCheerio(el) .find(".chapter-li-a") @@ -143,7 +136,6 @@ class Linovelib implements Plugin.PluginBase { } async parseChapter(chapterUrl: string): Promise { - const headers = new Headers(); let chapterName, chapterText = "", hasNextPage, @@ -371,32 +363,26 @@ class Linovelib implements Plugin.PluginBase { const addPage = async (pageCheerio: CheerioAPI) => { const formatPage = async () => { // Remove JS - pageCheerio("#ccacontent .cgo").remove(); + pageCheerio("#acontentz .adsbygoogle").remove(); + pageCheerio("#acontentz script").remove(); // Load lazyloaded images - pageCheerio("#ccacontent img.imagecontent").each((i, el) => { + pageCheerio("#acontentz img.imagecontent").each((i, el) => { // Sometimes images are either in data-src or src const imgSrc = pageCheerio(el).attr("data-src") || pageCheerio(el).attr("src"); if (imgSrc) { - // The original CDN URL is locked behind a CF-like challenge, switch the URL to bypass that - // There are no react-native-url-polyfill lib, can't use URL API - const regex = /\/\/.+\.com\//; - const imgUrl = imgSrc.replace( - regex, - "//img.linovelib.com/" - ); // Clean up img element pageCheerio(el) - .attr("src", imgUrl) + .attr("src", imgSrc) .removeAttr("data-src") .removeClass("lazyload"); } }); // Recover the original character - pageText = pageCheerio("#ccacontent").html() || ""; + pageText = pageCheerio("#acontentz").html() || ""; pageText = pageText.replace( /./g, (char) => skillgg[char] || char @@ -417,8 +403,7 @@ class Linovelib implements Plugin.PluginBase { }; const loadPage = async (url: string) => { - const result = await fetchApi(url, { headers }); - const body = await result.text(); + const body = await fetchText(url); const pageCheerio = parseHTML(body); await addPage(pageCheerio); pageHasNextPage = @@ -448,94 +433,100 @@ class Linovelib implements Plugin.PluginBase { searchTerm: string, pageNo?: number | undefined ): Promise { - const searchUrl = `${this.site}/search/`; - const Term = encodeURI(searchTerm); - const headers = new Headers(); - let NextPage, NoNextPage: boolean, DeadEnd; - pageNo = 1; + const url = `${this.site}/search/${encodeURI(searchTerm)}_${pageNo}.html`; + const body = await fetchText(url); + + const pageCheerio = parseHTML(body); + const novels: Plugin.NovelItem[] = []; - const addPage = async (pageCheerio: CheerioAPI, redirect: string) => { - const loadSearchResults = () => { - pageCheerio(".book-ol .book-layout").each((i, el) => { - let nUrl = pageCheerio(el).attr("href"); + // const addPage = async (pageCheerio: CheerioAPI, redirect: string) => { + // const loadSearchResults = () => { + // pageCheerio(".book-ol .book-layout").each((i, el) => { + // let nUrl = pageCheerio(el).attr("href"); - const novelName = pageCheerio(el) - .find(".book-title") - .text(); - const novelCover = pageCheerio(el) - .find("img.book-cover") - .attr("data-src"); - const novelUrl = this.site + nUrl; + // const novelName = pageCheerio(el) + // .find(".book-title") + // .text(); + // const novelCover = pageCheerio(el) + // .find("div.book-cover > img") + // .attr("data-src"); + // const novelUrl = this.site + nUrl; - if (!nUrl) return; + // if (!nUrl) return; - novels.push({ - name: novelName, - url: novelUrl, - cover: novelCover, - }); - }); - }; + // novels.push({ + // name: novelName, + // url: novelUrl, + // cover: novelCover, + // }); + // }); + // }; - const novelResults = pageCheerio(".book-ol a.book-layout"); - if (novelResults.length === 0) { - } else { - loadSearchResults(); - } + // const novelResults = pageCheerio(".book-ol a.book-layout"); + // if (novelResults.length === 0) { + // } else { + // loadSearchResults(); + // } - if (redirect.length) { - novels.length = 0; - const novelName = pageCheerio( - "#bookDetailWrapper .book-title" - ).text(); + // if (redirect.length) { + // novels.length = 0; + // const novelName = pageCheerio( + // "#bookDetailWrapper .book-title" + // ).text(); - const novelCover = pageCheerio( - "#bookDetailWrapper img.book-cover" - ).attr("src"); - const novelUrl = - this.site + - pageCheerio("#btnReadBook").attr("href")?.slice(0, -8) + - ".html"; - novels.push({ - name: novelName, - url: novelUrl, - cover: novelCover, - }); - } - }; + // const novelCover = pageCheerio( + // "#bookDetailWrapper div.book-cover > img" + // ).attr("src"); + // const novelUrl = + // this.site + + // pageCheerio("#btnReadBook").attr("href")?.slice(0, -8) + + // ".html"; + // novels.push({ + // name: novelName, + // url: novelUrl, + // cover: novelCover, + // }); + // } + // }; - const loadPage = async (url: string) => { - const result = await fetchApi(url, { headers }); - const body = await result.text(); - const pageCheerio = parseHTML(body); - const redirect = pageCheerio("div.book-layout").text(); - await addPage(pageCheerio, redirect); - NextPage = pageCheerio(".next").attr("href"); - if (!NextPage) { - NoNextPage === true; - } else { - NoNextPage = NextPage === "#" ? true : false; - } - return { pageCheerio, NoNextPage }; - }; + // NOTE: don't know redirect is for what, comment out for now - let url = `${searchUrl}${Term}_${pageNo}.html`; - do { - const page = await loadPage(url); - DeadEnd = page.NoNextPage; - if (DeadEnd === false) { - pageNo++; - url = `${searchUrl}${Term}_${pageNo}.html`; - } - } while (DeadEnd === false); + // const redirect = pageCheerio("div.book-layout").text(); + // await addPage(pageCheerio, redirect); + + pageCheerio(".book-ol .book-layout").each((i, el) => { + let nUrl = pageCheerio(el).attr("href"); + + const novelName = pageCheerio(el) + .find(".book-title") + .text(); + const novelCover = pageCheerio(el) + .find("div.book-cover > img") + .attr("data-src"); + const novelUrl = this.site + nUrl; + + if (!nUrl) return; + + novels.push({ + name: novelName, + url: novelUrl, + cover: novelCover, + }); + }); return novels; } async fetchImage(url: string): Promise { - return await fetchFile(url); + const headers = new Headers( + { + "Referer": `${this.site}/`, + } + ) + return await fetchFile(url, { headers }); } + filters = { sort: { label: "Sort By",