refactor: Overhaul Plugin Architecture & Playground UI (#1846)

* refactor: Move Plugins Out and Consolidate with Multisrc

* feat: Overhaul Playground UI

* feat: Add Filters to New UI

* feat: Persist Selected Plugin

* feat: Add Direct Parse Novel/Chapter Options and Feedback Toasts

[skip ci]

* feat: UX Improvements

* chore: Update Plugin Path in Publish Workflow

* fix: Add Backward Compatibility

* chore: Update Plugin Publishing Script
This commit is contained in:
Rajarshee Chatterjee
2025-10-20 22:54:08 +05:30
committed by GitHub
parent 252beff0bf
commit 20c2b75b01
363 changed files with 6848 additions and 3007 deletions
+49
View File
@@ -0,0 +1,49 @@
# LightnovelWP multisrc generator
## Compatiblity
### This generator is for most sites that uses the LightNovel WordPress Theme: https://themesia.com/lightnovel-wordpress-theme/
it should work for all sites that uses this theme (highest version tested: 1.1.5)
to know the name and version of the theme you can enter the url in : [WP Theme Detector](https://www.wpthemedetector.com)
(it sometimes hallucinates for version 1.0.X as 1.0) \
or you can check the version by adding "/wp-content/themes/lightnovel/style.css"
to the site url and check the version in the file
## Add a new source
### sources.json
To add a new source you need to add it to sources.json:
- id: the id of the source (something unique)
- sourceName: the name of the source (you can use the value of "name" in "https://site.com/wp-json/" if it exists)
- sourceSite: the site url
- options: the options of the source
- lang: the language of the source (default: "English") (check that the language
exists in the languages (check folder names in "plugins/"))
- reverseChapter: if the chapters are in reverse order
(if the first chapter of the list is 1 set it to false)
- versionIncrements: needs to be incremented if the url is changed or customJS
is changed or a change to the template affects only this source
- seriesPath: the path to the series page (if the "Novels"/"All Series" button
doesn't go to /series/ (ex: https://site.com/novels/ set it to "/novels/"))
- customJS: custom javascript that will be excuted when getting the text (if
the site has a custom copyright that need to be removed (the cherrio is $))
### icon
To add an icon to the source you can just run `npm run build:icons` to generate all icons (make sure `npm run build:multisrc` works on your machine)
Or you can manualy find the icon of the site \
(try the favicon of the site (https://site.com/favicon.ico) most of the times it redirects you to an image named something like "cropped-site-32x32.png" try to access "cropped-site.png" or "site.png" if that did not work you can try to access "https://site.com/wp-json/" at the end of this very long file there should be a "site_icon_url" value
) (don't forget to convert it to png)
and add it to the folder "public/static/multisrc/lightnovelwp/{sourceID}/icon.png"
### filters
To add filters to a source you need to run the script "get_filters.js" \
(`npx node plugins/multisrc/lightnovelwp/get_filters.js`
(if you are at the root of the project) (and you have ran "npm install" before))
and follow the instructions (url is easier and faster but sometimes it doesn't work)
@@ -0,0 +1,196 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Género",
"value": [],
"options": [
{
"label": "Action",
"value": "action"
},
{
"label": "Adult",
"value": "adult"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Ecchi",
"value": "ecchi"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Gender Bender",
"value": "gender-bender"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "Horror",
"value": "horror"
},
{
"label": "Josei",
"value": "josei"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Mature",
"value": "mature"
},
{
"label": "Mecha",
"value": "mecha"
},
{
"label": "Mystery",
"value": "mystery"
},
{
"label": "Psychological",
"value": "psychological"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Sci-fi",
"value": "sci-fi"
},
{
"label": "Seinen",
"value": "seinen"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Tragedy",
"value": "tragedy"
},
{
"label": "Xianxia",
"value": "xianxia"
},
{
"label": "Xuanhuan",
"value": "xuanhuan"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Tipo",
"value": [],
"options": [
{
"label": "Light Novel (JP)",
"value": "light-novel-jp"
},
{
"label": "Published Novel (JP)",
"value": "published-novel-jp"
},
{
"label": "Published Novel (KR)",
"value": "published-novel-kr"
},
{
"label": "Web Novel",
"value": "web-novel"
}
]
},
"status": {
"type": "Picker",
"label": "Estado",
"value": "",
"options": [
{
"label": "Todos",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Ordenar por",
"value": "",
"options": [
{
"label": "Pred.",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Actualización / Latest Release",
"value": "update"
},
{
"label": "Último Agregado",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
},
{
"label": "Puntuación",
"value": "rating"
}
]
}
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,232 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Academy",
"value": "academy"
},
{
"label": "Action",
"value": "action"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Apocalypse",
"value": "apocalypse"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Cyberpunk",
"value": "cyberpunk"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Ecchi",
"value": "ecchi"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Fusion",
"value": "fusion"
},
{
"label": "Game World",
"value": "game-world"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Medieval",
"value": "medieval"
},
{
"label": "Misunderstandings",
"value": "misunderstandings"
},
{
"label": "Modern",
"value": "modern"
},
{
"label": "Mystery",
"value": "mystery"
},
{
"label": "Obsession",
"value": "obsession"
},
{
"label": "Possession",
"value": "possession"
},
{
"label": "Psychological",
"value": "psychological"
},
{
"label": "Regression",
"value": "regression"
},
{
"label": "Regret",
"value": "regret"
},
{
"label": "Reincarnation",
"value": "reincarnation"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Sci-Fi",
"value": "sci-fi"
},
{
"label": "Seinen",
"value": "seinen"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Smut",
"value": "smut"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Tragedy",
"value": "tragedy"
},
{
"label": "Transmigration",
"value": "transmigration"
},
{
"label": "War",
"value": "war"
},
{
"label": "Wuxia",
"value": "wuxia"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Chinese Novel",
"value": "chinese-novel"
},
{
"label": "Japanese Novel",
"value": "japanese-novel"
},
{
"label": "Korean Novel",
"value": "korean-novel"
},
{
"label": "Web Novel",
"value": "web-novel"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
},
{
"label": "Rating",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,236 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Action",
"value": "action"
},
{
"label": "Adult",
"value": "adult"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Antihero",
"value": "antihero"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Ecchi",
"value": "ecchi"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Gender Bender",
"value": "gender-bender"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "Historical",
"value": "historical"
},
{
"label": "Horror",
"value": "horror"
},
{
"label": "Isekai",
"value": "isekai"
},
{
"label": "Josei",
"value": "josei"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Mature",
"value": "mature"
},
{
"label": "Mecha",
"value": "mecha"
},
{
"label": "Mystery",
"value": "mystery"
},
{
"label": "Psychological",
"value": "psychological"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Sci-fi",
"value": "sci-fi"
},
{
"label": "Seinen",
"value": "seinen"
},
{
"label": "Shoujo",
"value": "shoujo"
},
{
"label": "Shoujo Ai",
"value": "shoujo-ai"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Shounen Ai",
"value": "shounen-ai"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Sports",
"value": "sports"
},
{
"label": "Superhero",
"value": "superhero"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Tragedy",
"value": "tragedy"
},
{
"label": "Wuxia",
"value": "wuxia"
},
{
"label": "Xianxia",
"value": "xianxia"
},
{
"label": "Xuanhuan",
"value": "xuanhuan"
},
{
"label": "Yaoi",
"value": "yaoi"
},
{
"label": "Yuri",
"value": "yuri"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Tipe",
"value": [],
"options": [
{
"label": "",
"value": ""
},
{
"label": "Manga",
"value": "manga"
},
{
"label": "Novel",
"value": "novel"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Urutkan",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Baru diperbarui",
"value": "update"
},
{
"label": "Baru ditambahkan",
"value": "latest"
},
{
"label": "Terpopuler",
"value": "popular"
},
{
"label": "Rating",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,312 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Gênero",
"value": [],
"options": [
{
"label": "Ação",
"value": "acao"
},
{
"label": "Action",
"value": "action"
},
{
"label": "Adulto",
"value": "adulto"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Artes Marciais",
"value": "artes-marciais"
},
{
"label": "Aventura",
"value": "aventura"
},
{
"label": "Comédia",
"value": "comedia"
},
{
"label": "Cotidiano",
"value": "cotidiano"
},
{
"label": "Cultivo",
"value": "cultivo"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Ecchi",
"value": "ecchi"
},
{
"label": "Escolar",
"value": "escolar"
},
{
"label": "Esportes",
"value": "esportes"
},
{
"label": "Evolução",
"value": "evolucao"
},
{
"label": "Fantasia",
"value": "fantasia"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Ficção Científica",
"value": "ficcao-cientifica"
},
{
"label": "Gender Bender",
"value": "gender-bender"
},
{
"label": "Harém",
"value": "harem"
},
{
"label": "Histórico",
"value": "historico"
},
{
"label": "Isekai",
"value": "isekai"
},
{
"label": "Josei",
"value": "josei"
},
{
"label": "LitRPG",
"value": "litrpg"
},
{
"label": "Magia",
"value": "magia"
},
{
"label": "Mecha",
"value": "mecha"
},
{
"label": "Medieval",
"value": "medieval"
},
{
"label": "Mistério",
"value": "misterio"
},
{
"label": "Mitologia",
"value": "mitologia"
},
{
"label": "Monstros",
"value": "monstros"
},
{
"label": "Pet",
"value": "pet"
},
{
"label": "Protagonista Feminina",
"value": "protagonista-feminina"
},
{
"label": "Protagonista Maligno",
"value": "protagonista-maligno"
},
{
"label": "Psicológico",
"value": "psicologico"
},
{
"label": "Psychological",
"value": "psychological"
},
{
"label": "Reencarnação",
"value": "reencarnacao"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "Seinen",
"value": "seinen"
},
{
"label": "Shoujo",
"value": "shoujo"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Shounen BL",
"value": "shounen-bl"
},
{
"label": "Sistema",
"value": "sistema"
},
{
"label": "Sistema de Jogo",
"value": "sistema-de-jogo"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Sobrenatural",
"value": "sobrenatural"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Terror",
"value": "terror"
},
{
"label": "Tragédia",
"value": "tragedia"
},
{
"label": "Transmigração",
"value": "transmigracao"
},
{
"label": "Vida Escolar",
"value": "vida-escolar"
},
{
"label": "VRMMO",
"value": "vrmmo"
},
{
"label": "Wuxia",
"value": "wuxia"
},
{
"label": "Xianxia",
"value": "xianxia"
},
{
"label": "Xuanhuan",
"value": "xuanhuan"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Tipo",
"value": [],
"options": [
{
"label": "Light Novel",
"value": "light-novel"
},
{
"label": "Novel Chinesa",
"value": "novel-chinesa"
},
{
"label": "Novel Coreana",
"value": "novel-coreana"
},
{
"label": "Novel Japonesa",
"value": "novel-japonesa"
},
{
"label": "Novel Ocidental",
"value": "novel-ocidental"
},
{
"label": "Webnovel",
"value": "webnovel"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "Todos",
"value": ""
},
{
"label": "Em andamento",
"value": "em andamento"
},
{
"label": "Hiato",
"value": "hiato"
},
{
"label": "Completo",
"value": "completo"
}
]
},
"order": {
"type": "Picker",
"label": "Ordenar por",
"value": "",
"options": [
{
"label": "Padrão",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Últ. Att",
"value": "update"
},
{
"label": "Últ. Add",
"value": "latest"
},
{
"label": "Populares",
"value": "popular"
},
{
"label": "Avaliação",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,324 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Action",
"value": "action"
},
{
"label": "Adult",
"value": "adult"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Billionaire",
"value": "billionaire"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Contemporary",
"value": "contemporary"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Ecchi",
"value": "ecchi"
},
{
"label": "Family",
"value": "family"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Gender Bender",
"value": "gender-bender"
},
{
"label": "Growth",
"value": "growth"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "Hidden Identity",
"value": "hidden-identity"
},
{
"label": "Historical",
"value": "historical"
},
{
"label": "Horror",
"value": "horror"
},
{
"label": "Isekai",
"value": "isekai"
},
{
"label": "Korean",
"value": "korean"
},
{
"label": "Magic",
"value": "magic"
},
{
"label": "Manhwa",
"value": "manhwa"
},
{
"label": "Marriage",
"value": "marriage"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Mature",
"value": "mature"
},
{
"label": "Mecha",
"value": "mecha"
},
{
"label": "Murim",
"value": "murim"
},
{
"label": "Mystery",
"value": "mystery"
},
{
"label": "Overpowered",
"value": "overpowered"
},
{
"label": "Psychological",
"value": "psychological"
},
{
"label": "Regression",
"value": "regression"
},
{
"label": "Reincarnation",
"value": "reincarnation"
},
{
"label": "Revenge",
"value": "revenge"
},
{
"label": "Rich",
"value": "rich"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Sci-fi",
"value": "sci-fi"
},
{
"label": "Seinen",
"value": "seinen"
},
{
"label": "Shoujo",
"value": "shoujo"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Son-in-Law",
"value": "son-in-law"
},
{
"label": "Sports",
"value": "sports"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Superpower",
"value": "superpower"
},
{
"label": "Tragedy",
"value": "tragedy"
},
{
"label": "Urban",
"value": "urban"
},
{
"label": "Virtual Game",
"value": "virtual-game"
},
{
"label": "Warrior",
"value": "warrior"
},
{
"label": "Webtoons",
"value": "webtoons"
},
{
"label": "Wuxia",
"value": "wuxia"
},
{
"label": "Xianxia",
"value": "xianxia"
},
{
"label": "Xuanhuan",
"value": "xuanhuan"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Action",
"value": "action"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Chinese Novel",
"value": "chinese-novel"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Korean Novel",
"value": "korean-novel"
},
{
"label": "Light Novel (KR)",
"value": "light-novel-kr"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Published Novel (KR)",
"value": "published-novel-kr"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Web Novel",
"value": "web-novel"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
},
{
"label": "Rating",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,324 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Action",
"value": "action"
},
{
"label": "Adult",
"value": "adult"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Billionaire",
"value": "billionaire"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Contemporary",
"value": "contemporary"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Ecchi",
"value": "ecchi"
},
{
"label": "Family",
"value": "family"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Gender Bender",
"value": "gender-bender"
},
{
"label": "Growth",
"value": "growth"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "Hidden Identity",
"value": "hidden-identity"
},
{
"label": "Historical",
"value": "historical"
},
{
"label": "Horror",
"value": "horror"
},
{
"label": "Isekai",
"value": "isekai"
},
{
"label": "Korean",
"value": "korean"
},
{
"label": "Magic",
"value": "magic"
},
{
"label": "Manhwa",
"value": "manhwa"
},
{
"label": "Marriage",
"value": "marriage"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Mature",
"value": "mature"
},
{
"label": "Mecha",
"value": "mecha"
},
{
"label": "Murim",
"value": "murim"
},
{
"label": "Mystery",
"value": "mystery"
},
{
"label": "Overpowered",
"value": "overpowered"
},
{
"label": "Psychological",
"value": "psychological"
},
{
"label": "Regression",
"value": "regression"
},
{
"label": "Reincarnation",
"value": "reincarnation"
},
{
"label": "Revenge",
"value": "revenge"
},
{
"label": "Rich",
"value": "rich"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Sci-fi",
"value": "sci-fi"
},
{
"label": "Seinen",
"value": "seinen"
},
{
"label": "Shoujo",
"value": "shoujo"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Son-in-Law",
"value": "son-in-law"
},
{
"label": "Sports",
"value": "sports"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Superpower",
"value": "superpower"
},
{
"label": "Tragedy",
"value": "tragedy"
},
{
"label": "Urban",
"value": "urban"
},
{
"label": "Virtual Game",
"value": "virtual-game"
},
{
"label": "Warrior",
"value": "warrior"
},
{
"label": "Webtoons",
"value": "webtoons"
},
{
"label": "Wuxia",
"value": "wuxia"
},
{
"label": "Xianxia",
"value": "xianxia"
},
{
"label": "Xuanhuan",
"value": "xuanhuan"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Action",
"value": "action"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Chinese Novel",
"value": "chinese-novel"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Korean Novel",
"value": "korean-novel"
},
{
"label": "Light Novel (KR)",
"value": "light-novel-kr"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Published Novel (KR)",
"value": "published-novel-kr"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Web Novel",
"value": "web-novel"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
},
{
"label": "Rating",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,204 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Action",
"value": "action"
},
{
"label": "Adult",
"value": "adult"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Ecchi",
"value": "ecchi"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Gender Bender",
"value": "gender-bender"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "Hunter",
"value": "hunter"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Mature",
"value": "mature"
},
{
"label": "Modern Fantasy",
"value": "modern-fantasy"
},
{
"label": "Mystery",
"value": "mystery"
},
{
"label": "Psychological",
"value": "psychological"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Seinen",
"value": "seinen"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Tragedy",
"value": "tragedy"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Genius",
"value": "genius"
},
{
"label": "Hunter",
"value": "hunter"
},
{
"label": "Japanese Web Novel",
"value": "japanese-web-novel"
},
{
"label": "Korean Web Novel",
"value": "korean-web-novel"
},
{
"label": "Light Novel (JP)",
"value": "light-novel-jp"
},
{
"label": "Mage",
"value": "mage"
},
{
"label": "Modern Fantasy",
"value": "modern-fantasy"
},
{
"label": "Reincarnation",
"value": "reincarnation"
},
{
"label": "Web Novel",
"value": "web-novel"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
},
{
"label": "Rating",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,292 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Action",
"value": "action"
},
{
"label": "Adult",
"value": "adult"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "character growth",
"value": "character-growth"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Dark Fantasy",
"value": "dark-fantasy"
},
{
"label": "drama",
"value": "drama"
},
{
"label": "Ecchi",
"value": "ecchi"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Finalized",
"value": "finalized"
},
{
"label": "Fusion",
"value": "fusion"
},
{
"label": "Fusion Fantasy",
"value": "fusion-fantasy"
},
{
"label": "Game-based(LitRPG)",
"value": "game-basedlitrpg"
},
{
"label": "Girl's Love",
"value": "girls-love"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "hero",
"value": "hero"
},
{
"label": "Historical",
"value": "historical"
},
{
"label": "Horror",
"value": "horror"
},
{
"label": "Humiliation",
"value": "humiliation"
},
{
"label": "Hunter",
"value": "hunter"
},
{
"label": "Isekai",
"value": "isekai"
},
{
"label": "level up",
"value": "level-up"
},
{
"label": "Magic",
"value": "magic"
},
{
"label": "Male protagonist",
"value": "male-protagonist"
},
{
"label": "Manga",
"value": "manga"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Mature",
"value": "mature"
},
{
"label": "Murim",
"value": "murim"
},
{
"label": "Mystery",
"value": "mystery"
},
{
"label": "Political Intrigue",
"value": "political-intrigue"
},
{
"label": "Psychological",
"value": "psychological"
},
{
"label": "Pure love",
"value": "pure-love"
},
{
"label": "R18",
"value": "r18"
},
{
"label": "Reincarnation",
"value": "reincarnation"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Sci-fy",
"value": "sci-fy"
},
{
"label": "Seinen",
"value": "seinen"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "sword",
"value": "sword"
},
{
"label": "system",
"value": "system"
},
{
"label": "Teacher",
"value": "teacher"
},
{
"label": "Thriller",
"value": "thriller"
},
{
"label": "Tragedy",
"value": "tragedy"
},
{
"label": "Transmigration",
"value": "transmigration"
},
{
"label": "Wuxia",
"value": "wuxia"
},
{
"label": "Xianxia",
"value": "xianxia"
},
{
"label": "Xuanhuan",
"value": "xuanhuan"
},
{
"label": "Yandere",
"value": "yandere"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Chinese Novel",
"value": "chinese-novel"
},
{
"label": "Dropped",
"value": "dropped"
},
{
"label": "Web Novel",
"value": "web-novel"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
},
{
"label": "Rating",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,116 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Adult",
"value": "adult"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Historical",
"value": "historical"
},
{
"label": "Josei",
"value": "josei"
},
{
"label": "Mature",
"value": "mature"
},
{
"label": "Modern",
"value": "modern"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "Smut",
"value": "smut"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Web Novel",
"value": "web-novel"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
}
]
}
}
}
@@ -0,0 +1,116 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Adult",
"value": "adult"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Historical",
"value": "historical"
},
{
"label": "Josei",
"value": "josei"
},
{
"label": "Mature",
"value": "mature"
},
{
"label": "Modern",
"value": "modern"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "Smut",
"value": "smut"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Web Novel",
"value": "web-novel"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
}
]
}
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,200 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Kategori",
"value": [],
"options": [
{
"label": "Aksiyon",
"value": "aksiyon"
},
{
"label": "Büyü",
"value": "buyu"
},
{
"label": "Doğa Üstü",
"value": "doga-ustu"
},
{
"label": "Doğaüstü",
"value": "dogaustu"
},
{
"label": "Dövüş Sanatları",
"value": "dovus-sanatlari"
},
{
"label": "Dram",
"value": "dram"
},
{
"label": "Fantastik",
"value": "fantastik"
},
{
"label": "Geriye Dönüş",
"value": "geriye-donus"
},
{
"label": "Gizem",
"value": "gizem"
},
{
"label": "Kara Büyü",
"value": "kara-buyu"
},
{
"label": "Korku",
"value": "korku"
},
{
"label": "Macera",
"value": "macera"
},
{
"label": "Murim",
"value": "murim"
},
{
"label": "Okul",
"value": "okul"
},
{
"label": "Psikolojik",
"value": "psikolojik"
},
{
"label": "Romantizm",
"value": "romantizm"
},
{
"label": "Seinen",
"value": "seinen"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Trajedi",
"value": "trajedi"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Tür",
"value": [],
"options": [
{
"label": "Akademi",
"value": "akademi"
},
{
"label": "Aksiyon",
"value": "aksiyon"
},
{
"label": "Dahi",
"value": "dahi"
},
{
"label": "Dövüş Sanatları",
"value": "dovus-sanatlari"
},
{
"label": "Element",
"value": "element"
},
{
"label": "Fantastik",
"value": "fantastik"
},
{
"label": "Geriye Dönüş",
"value": "geriye-donus"
},
{
"label": "Güçlü Ana Karakter",
"value": "guclu-ana-karakter"
},
{
"label": "Kılıç Ustası",
"value": "kilic-ustasi"
},
{
"label": "Savaşçı",
"value": "savasci"
},
{
"label": "Yaratıklar",
"value": "yaratiklar"
},
{
"label": "Zaman Döngüsü",
"value": "zaman-dongusu"
}
]
},
"status": {
"type": "Picker",
"label": "Durum",
"value": "",
"options": [
{
"label": "Hepsi",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Sırala",
"value": "",
"options": [
{
"label": "Temizle",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Son Güncellenenler",
"value": "update"
},
{
"label": "Yeni Eklenenler",
"value": "latest"
},
{
"label": "Popüler",
"value": "popular"
},
{
"label": "Puan",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,524 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "تصنيف",
"value": [],
"options": [
{
"label": "Romance",
"value": "romance"
},
{
"label": "Shounen Ai",
"value": "shounen-ai"
},
{
"label": "Wuxia",
"value": "wuxia"
},
{
"label": "Xianxia",
"value": "xianxia"
},
{
"label": "XUANHUAN",
"value": "xuanhuan"
},
{
"label": "أبطال خارقين",
"value": "أبطال-خارقين"
},
{
"label": "أساطير",
"value": "أساطير"
},
{
"label": "أشباح",
"value": "أشباح"
},
{
"label": "أكشن",
"value": "action"
},
{
"label": "ألعاب",
"value": "ألعاب"
},
{
"label": "إثارة",
"value": "excitement"
},
{
"label": "إسلامي",
"value": "إسلامي"
},
{
"label": "إنتقال الى عالم أخر",
"value": "isekai"
},
{
"label": "إيتشي",
"value": "etchi"
},
{
"label": "اكاديمي",
"value": "اكاديمي"
},
{
"label": "اكشن",
"value": "اكشن"
},
{
"label": "الإثارة",
"value": "الإثارة"
},
{
"label": "الخيال العلمي",
"value": "sci-fi"
},
{
"label": "الدراما",
"value": "الدراما"
},
{
"label": "المغامرات",
"value": "المغامرات"
},
{
"label": "انتقام",
"value": "انتقام"
},
{
"label": "بطل مضاد",
"value": "بطل-مضاد"
},
{
"label": "بطل ناضج",
"value": "بطل-ناضج"
},
{
"label": "بقاء",
"value": "بقاء"
},
{
"label": "بناء مملكة",
"value": "بناء-مملكة"
},
{
"label": "بوليسي",
"value": "policy"
},
{
"label": "تاريخ",
"value": "تاريخ"
},
{
"label": "تاريخي",
"value": "historical"
},
{
"label": "تحقيقات",
"value": "تحقيق"
},
{
"label": "تشويق",
"value": "تشويق"
},
{
"label": "تقمص شخصيات",
"value": "rpg"
},
{
"label": "تلاعب",
"value": "تلاعب"
},
{
"label": "تناسخ",
"value": "تناسخ"
},
{
"label": "جريمة",
"value": "crime"
},
{
"label": "جوسى",
"value": "josei"
},
{
"label": "جوسي",
"value": "جوسي"
},
{
"label": "حريم",
"value": "harem"
},
{
"label": "حل الألغاز",
"value": "حل-الألغاز"
},
{
"label": "حياة مدرسية",
"value": "school-life"
},
{
"label": "خارق للطبيعة",
"value": "خارق-للطبيعة"
},
{
"label": "خيال",
"value": "خيال"
},
{
"label": "خيال علمي",
"value": "خيال-علمي"
},
{
"label": "خيالي",
"value": "خيالي"
},
{
"label": "خيالي(فانتازيا)",
"value": "fantasy"
},
{
"label": "دراما",
"value": "drama"
},
{
"label": "درامي",
"value": "درامي"
},
{
"label": "رعب",
"value": "horror"
},
{
"label": "رعب كوني",
"value": "رعب-كوني"
},
{
"label": "رعب نفسي",
"value": "رعب-نفسي"
},
{
"label": "رومانسي",
"value": "romantic"
},
{
"label": "رومانسية",
"value": "رومانسية"
},
{
"label": "رومنسية",
"value": "رومنسية"
},
{
"label": "زنزانة",
"value": "زنزانة"
},
{
"label": "زيانشيا",
"value": "زيانشيا"
},
{
"label": "ستيم بانك",
"value": "ستيم-بانك"
},
{
"label": "سحر",
"value": "magic"
},
{
"label": "سفر بالزمن",
"value": "سفر-بالزمن"
},
{
"label": "سفر عبر الزمن",
"value": "سفر-عبر-الزمن"
},
{
"label": "سياسة",
"value": "سياسة"
},
{
"label": "سينن",
"value": "senen"
},
{
"label": "شريحة من الحياة",
"value": "slice-of-life"
},
{
"label": "شعر",
"value": "شعر"
},
{
"label": "شوانهان",
"value": "شوانهان"
},
{
"label": "شوانهوان",
"value": "شوانهوان"
},
{
"label": "شوجو",
"value": "shojo"
},
{
"label": "شونين",
"value": "shonen"
},
{
"label": "شيانشيا",
"value": "شيانشيا"
},
{
"label": "طبي",
"value": "medical"
},
{
"label": "ظواهر خارقة للطبيعة",
"value": "supernatural"
},
{
"label": "عائلي",
"value": "عائلي"
},
{
"label": "عموض",
"value": "عموض"
},
{
"label": "غموض",
"value": "mysteries"
},
{
"label": "فانتازي",
"value": "فانتازي"
},
{
"label": "فانتازيا",
"value": "فانتازيا"
},
{
"label": "فانفيك",
"value": "فانفيك"
},
{
"label": "فنتازيا",
"value": "فنتازيا"
},
{
"label": "فنون القتال",
"value": "martial-arts"
},
{
"label": "فنون قتال",
"value": "فنون-قتال"
},
{
"label": "قصة قصيرة",
"value": "قصة-قصيرة"
},
{
"label": "قوة خارقة",
"value": "قوة-خارقة"
},
{
"label": "قوى خارقة",
"value": "superpower"
},
{
"label": "كوميدي",
"value": "comedy"
},
{
"label": "كوميديا",
"value": "كوميديا"
},
{
"label": "كوميدية",
"value": "كوميدية"
},
{
"label": "مأسأة",
"value": "مأسأة"
},
{
"label": "مأساة",
"value": "مأساة"
},
{
"label": "مأساوي",
"value": "tragedy"
},
{
"label": "مؤامرة",
"value": "مؤامرة"
},
{
"label": "ما بعد الكارثة",
"value": "after-the-disaster"
},
{
"label": "ما بعد نهاية العالم",
"value": "ما-بعد-نهاية-العالم"
},
{
"label": "مضاد البطل",
"value": "مضاد-البطل"
},
{
"label": "مغامرات",
"value": "مغامرات"
},
{
"label": "مغامرة",
"value": "adventure"
},
{
"label": "ميكا",
"value": "mechanical"
},
{
"label": "ناضج",
"value": "mature"
},
{
"label": "نظام",
"value": "نظام"
},
{
"label": "نفسي",
"value": "psychological"
},
{
"label": "ون شوت",
"value": "ون-شوت"
},
{
"label": "ووشيا",
"value": "ووشيا"
},
{
"label": "ووكسيا",
"value": "ووكسيا"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "النوع",
"value": [],
"options": [
{
"label": "إنجليزية",
"value": "english"
},
{
"label": "ترجمة إحترافية",
"value": "ترجمة-إحترافية"
},
{
"label": "رواية لايت",
"value": "light-novel"
},
{
"label": "رواية مؤلفة",
"value": "رواية-مؤلفة"
},
{
"label": "رواية مترجمة",
"value": "رواية-مترجمة"
},
{
"label": "رواية ويب",
"value": "web-novel"
},
{
"label": "صينية",
"value": "chinese"
},
{
"label": "عربية",
"value": "arabic"
},
{
"label": "كورية",
"value": "korean"
},
{
"label": "مؤلفة",
"value": "مؤلفة"
},
{
"label": "ون شوت",
"value": "ون-شوت"
},
{
"label": "يابانية",
"value": "japanese"
}
]
},
"status": {
"type": "Picker",
"label": "الحالة",
"value": "",
"options": [
{
"label": "الكل",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "ترتيب حسب",
"value": "",
"options": [
{
"label": "الإعداد الأولي",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "أخر التحديثات",
"value": "update"
},
{
"label": "أخر ما تم إضافته",
"value": "latest"
},
{
"label": "الرائجة",
"value": "popular"
},
{
"label": "التقييم",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,200 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Action",
"value": "action"
},
{
"label": "Adult",
"value": "adult"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "BL",
"value": "bl"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Gender Bender",
"value": "gender-bender"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "Historical",
"value": "historical"
},
{
"label": "Horror",
"value": "horror"
},
{
"label": "Josei",
"value": "josei"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Mature",
"value": "mature"
},
{
"label": "Mystery",
"value": "mystery"
},
{
"label": "Psychological",
"value": "psychological"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Sci-fi",
"value": "sci-fi"
},
{
"label": "Shoujo",
"value": "shoujo"
},
{
"label": "Shounen Ai",
"value": "shounen-ai"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Smut",
"value": "smut"
},
{
"label": "Sports",
"value": "sports"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Tragedy",
"value": "tragedy"
},
{
"label": "Wuxia",
"value": "wuxia"
},
{
"label": "Xianxia",
"value": "xianxia"
},
{
"label": "Yaoi",
"value": "yaoi"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Chinese Novel",
"value": "chinese-novel"
},
{
"label": "Web Novel",
"value": "web-novel"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
},
{
"label": "Rating",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,244 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "+18",
"value": "18"
},
{
"label": "Ação",
"value": "acao"
},
{
"label": "Artes Marciais",
"value": "artes-marciais"
},
{
"label": "Aventura",
"value": "aventura"
},
{
"label": "Comédia",
"value": "comedia"
},
{
"label": "Cultivo",
"value": "cultivo"
},
{
"label": "Cyberpunk",
"value": "cyberpunk"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Ecchi",
"value": "ecchi"
},
{
"label": "Esportes",
"value": "esportes"
},
{
"label": "Fanfiction",
"value": "fanfiction"
},
{
"label": "Fantasia",
"value": "fantasia"
},
{
"label": "Ficção Científica",
"value": "ficcao-cientifica"
},
{
"label": "Games",
"value": "games"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "Horror",
"value": "horror"
},
{
"label": "Isekai",
"value": "isekai"
},
{
"label": "Magia",
"value": "magia"
},
{
"label": "Mecha",
"value": "mecha"
},
{
"label": "Militar",
"value": "militar"
},
{
"label": "Mistério",
"value": "misterio"
},
{
"label": "Novel Nacional",
"value": "novel-nacional"
},
{
"label": "Psicológico",
"value": "psicologico"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "Sci-fi",
"value": "sci-fi"
},
{
"label": "Seinen",
"value": "seinen"
},
{
"label": "Shoujo",
"value": "shoujo"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Shounen BL",
"value": "shounen-bl"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Sobrenatural",
"value": "sobrenatural"
},
{
"label": "Terror",
"value": "terror"
},
{
"label": "Tragédia",
"value": "tragedia"
},
{
"label": "Vida Escolar",
"value": "vida-escolar"
},
{
"label": "Wuxia",
"value": "wuxia"
},
{
"label": "Xianxia",
"value": "xianxia"
},
{
"label": "Xuanhuan",
"value": "xuanhuan"
},
{
"label": "Yaoi",
"value": "yaoi"
},
{
"label": "Yuri",
"value": "yuri"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Tipo",
"value": [],
"options": [
{
"label": "Light Novel",
"value": "light-novel"
},
{
"label": "Livro",
"value": "livro"
},
{
"label": "One-Shot",
"value": "one-shot"
},
{
"label": "Web Novel",
"value": "web-novel"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "Tudo",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Ordenar por",
"value": "",
"options": [
{
"label": "Padrão",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Últimos Lançamentos",
"value": "update"
},
{
"label": "Última Adição",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
}
]
}
}
}
@@ -0,0 +1,248 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "action",
"value": "action"
},
{
"label": "alchimie",
"value": "alchimie"
},
{
"label": "Arts martiaux",
"value": "arts-martiaux"
},
{
"label": "Aventure",
"value": "aventure"
},
{
"label": "Célébrités",
"value": "celebrites"
},
{
"label": "chinese",
"value": "chinese"
},
{
"label": "Combat",
"value": "combat"
},
{
"label": "comedie",
"value": "comedie"
},
{
"label": "Cultivation",
"value": "cultivation"
},
{
"label": "dark fantasy",
"value": "dark-fantasy"
},
{
"label": "Demon",
"value": "demon"
},
{
"label": "Drame",
"value": "drame"
},
{
"label": "Fantasie",
"value": "fantasie"
},
{
"label": "Fantastique",
"value": "fantastique"
},
{
"label": "Guildes",
"value": "guildes"
},
{
"label": "harem",
"value": "harem"
},
{
"label": "Idole",
"value": "idole"
},
{
"label": "japan",
"value": "japan"
},
{
"label": "jeux vidéos",
"value": "jeux-videos"
},
{
"label": "Josei",
"value": "josei"
},
{
"label": "korean",
"value": "korean"
},
{
"label": "light Novel",
"value": "light-novel"
},
{
"label": "Magic",
"value": "magic"
},
{
"label": "mature",
"value": "mature"
},
{
"label": "Mystère",
"value": "mystere"
},
{
"label": "novel",
"value": "novel"
},
{
"label": "Renaissance",
"value": "renaissance"
},
{
"label": "Roman",
"value": "roman"
},
{
"label": "romance",
"value": "romance"
},
{
"label": "School life",
"value": "school-life"
},
{
"label": "Science-fiction",
"value": "science-fiction"
},
{
"label": "Seinen",
"value": "seinen"
},
{
"label": "Shonen",
"value": "shonen"
},
{
"label": "showbiz",
"value": "showbiz"
},
{
"label": "Surnaturel",
"value": "surnaturel"
},
{
"label": "système",
"value": "systeme"
},
{
"label": "Système de niveau",
"value": "systeme-de-niveau"
},
{
"label": "tranche de vie",
"value": "tranche-de-vie"
},
{
"label": "webnovel",
"value": "webnovel"
},
{
"label": "xp",
"value": "xp"
},
{
"label": "Xuanhuan",
"value": "xuanhuan"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Korean",
"value": "korean"
},
{
"label": "Light novel",
"value": "light-novel"
},
{
"label": "novel chinois",
"value": "novel-chinois"
}
]
},
"status": {
"type": "Picker",
"label": "Statut",
"value": "",
"options": [
{
"label": "Tout",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Par ordre",
"value": "",
"options": [
{
"label": "Par défaut",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Dernier mise à jour",
"value": "update"
},
{
"label": "Derniers Ajouts",
"value": "latest"
},
{
"label": "Populaire",
"value": "popular"
}
]
}
}
}
@@ -0,0 +1,300 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Action",
"value": "action"
},
{
"label": "Adult",
"value": "adult"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Apocalypse",
"value": "apocalypse"
},
{
"label": "Childcare",
"value": "childcare"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Cultivation",
"value": "cultivation"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Eastern",
"value": "eastern"
},
{
"label": "Entertainment",
"value": "entertainment"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Gender Bender",
"value": "gender-bender"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "Historical",
"value": "historical"
},
{
"label": "Horror",
"value": "horror"
},
{
"label": "Idol",
"value": "idol"
},
{
"label": "Josei",
"value": "josei"
},
{
"label": "Kindergarten",
"value": "kindergarten"
},
{
"label": "Korean",
"value": "korean"
},
{
"label": "Magic Swordman",
"value": "magic-swordman"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Mature",
"value": "mature"
},
{
"label": "Mecha",
"value": "mecha"
},
{
"label": "Modern",
"value": "modern"
},
{
"label": "Mystery",
"value": "mystery"
},
{
"label": "Omegaverse",
"value": "omegaverse"
},
{
"label": "Psychological",
"value": "psychological"
},
{
"label": "Rebirth",
"value": "rebirth"
},
{
"label": "Revenge",
"value": "revenge"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Sci-fi",
"value": "sci-fi"
},
{
"label": "Seinen",
"value": "seinen"
},
{
"label": "Shoujo",
"value": "shoujo"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Shounen Ai",
"value": "shounen-ai"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Smut",
"value": "smut"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Thriller",
"value": "thriller"
},
{
"label": "Tragedy",
"value": "tragedy"
},
{
"label": "Transmigration",
"value": "transmigration"
},
{
"label": "Villainess",
"value": "villainess"
},
{
"label": "Web Novel",
"value": "web-novel"
},
{
"label": "Western Style",
"value": "western-style"
},
{
"label": "Wuxia",
"value": "wuxia"
},
{
"label": "Xianxia",
"value": "xianxia"
},
{
"label": "Xuanhuan",
"value": "xuanhuan"
},
{
"label": "Yaoi",
"value": "yaoi"
},
{
"label": "Yuri",
"value": "yuri"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Chinese",
"value": "chinese"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Indonesian",
"value": "indonesian"
},
{
"label": "Japanese",
"value": "japanese"
},
{
"label": "Korean",
"value": "korean"
},
{
"label": "Original",
"value": "original"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
},
{
"label": "Rating",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,168 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Türler",
"value": [],
"options": [
{
"label": "Aksiyon",
"value": "aksiyon"
},
{
"label": "Bilimkurgu",
"value": "bilimkurgu"
},
{
"label": "Doğaüstü",
"value": "dogaustu"
},
{
"label": "Dram",
"value": "dram"
},
{
"label": "Ecchi",
"value": "ecchi"
},
{
"label": "Fantastik",
"value": "fantastik"
},
{
"label": "Gizem",
"value": "gizem"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "Hayattan Kesitler",
"value": "hayattan-kesitler"
},
{
"label": "Komedi",
"value": "komedi"
},
{
"label": "Macera",
"value": "macera"
},
{
"label": "Mecha",
"value": "mecha"
},
{
"label": "Okul hayatı",
"value": "okul-hayati"
},
{
"label": "Psikolojik",
"value": "psikolojik"
},
{
"label": "Romantik",
"value": "romantik"
},
{
"label": "Seinen",
"value": "seinen"
},
{
"label": "Shoujo",
"value": "shoujo"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Tarihi",
"value": "tarihi"
},
{
"label": "Trajedi",
"value": "trajedi"
},
{
"label": "Yetişkin",
"value": "yetiskin"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Yazım Şekli",
"value": [],
"options": [
{
"label": "Light Novel (JP)",
"value": "light-novel-jp"
},
{
"label": "Web Novel",
"value": "web-novel"
}
]
},
"status": {
"type": "Picker",
"label": "Durum",
"value": "",
"options": [
{
"label": "Tümü",
"value": ""
},
{
"label": "Devam Ediyor",
"value": "ongoing"
},
{
"label": "Ara Verildi",
"value": "hiatus"
},
{
"label": "Tamamlandı",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Sıralama",
"value": "",
"options": [
{
"label": "Varsayılan",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Son Güncellemeler",
"value": "update"
},
{
"label": "Son Eklenenler",
"value": "latest"
},
{
"label": "Popüler",
"value": "popular"
},
{
"label": "Puanlama",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,492 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "A.I",
"value": "a-i"
},
{
"label": "Academy",
"value": "academy"
},
{
"label": "Action",
"value": "action"
},
{
"label": "Adult",
"value": "adult"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Alternative History",
"value": "alternative-history"
},
{
"label": "Another World",
"value": "another-world"
},
{
"label": "Apocalypse",
"value": "apocalypse"
},
{
"label": "Bromance",
"value": "bromance"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Cthulhu",
"value": "cthulhu"
},
{
"label": "Dark fantasy",
"value": "dark-fantasy"
},
{
"label": "Demons",
"value": "demons"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Dystopia",
"value": "dystopia"
},
{
"label": "Ecchi",
"value": "ecchi"
},
{
"label": "Entertainment",
"value": "entertainment"
},
{
"label": "Exhaustion",
"value": "exhaustion"
},
{
"label": "Fanfiction",
"value": "fanfiction"
},
{
"label": "fantasy",
"value": "fantasy"
},
{
"label": "finance",
"value": "finance"
},
{
"label": "For men",
"value": "for-men"
},
{
"label": "Full color",
"value": "full-color"
},
{
"label": "fusion",
"value": "fusion"
},
{
"label": "gacha",
"value": "gacha"
},
{
"label": "Gallery",
"value": "gallery"
},
{
"label": "Game",
"value": "game"
},
{
"label": "Gender Bender",
"value": "gender-bender"
},
{
"label": "Genius",
"value": "genius"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "Healing",
"value": "healing"
},
{
"label": "Hero",
"value": "hero"
},
{
"label": "Historical",
"value": "historical"
},
{
"label": "Hunter",
"value": "hunter"
},
{
"label": "korean novel",
"value": "korean-novel"
},
{
"label": "Light Novel",
"value": "light-novel"
},
{
"label": "List Adventure Manga Genres",
"value": "list-adventure-manga-genres"
},
{
"label": "Long Strip",
"value": "long-strip"
},
{
"label": "Love comedy",
"value": "love-comedy"
},
{
"label": "magic",
"value": "magic"
},
{
"label": "Manhua",
"value": "manhua"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Mature",
"value": "mature"
},
{
"label": "Medieval",
"value": "medieval"
},
{
"label": "Middle Ages",
"value": "middle-ages"
},
{
"label": "Misunderstanding",
"value": "misunderstanding"
},
{
"label": "Modern",
"value": "modern"
},
{
"label": "modern fantasy",
"value": "modern-fantasy"
},
{
"label": "Munchkin",
"value": "munchkin"
},
{
"label": "music",
"value": "music"
},
{
"label": "Mystery",
"value": "mystery"
},
{
"label": "Necromancy",
"value": "necromancy"
},
{
"label": "No Romance",
"value": "no-romance"
},
{
"label": "NTL",
"value": "ntl"
},
{
"label": "o",
"value": "o"
},
{
"label": "Obsession",
"value": "obsession"
},
{
"label": "Politics",
"value": "politics"
},
{
"label": "Possession",
"value": "possession"
},
{
"label": "Programming",
"value": "programming"
},
{
"label": "Psychological",
"value": "psychological"
},
{
"label": "Pure Love",
"value": "pure-love"
},
{
"label": "reasoning",
"value": "reasoning"
},
{
"label": "Redemption",
"value": "redemption"
},
{
"label": "Regression",
"value": "regression"
},
{
"label": "Regret",
"value": "regret"
},
{
"label": "Reincarnation",
"value": "reincarnation"
},
{
"label": "Return",
"value": "return"
},
{
"label": "Revenge",
"value": "revenge"
},
{
"label": "Reversal",
"value": "reversal"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "Romance Fanrasy",
"value": "romance-fanrasy"
},
{
"label": "Salvation",
"value": "salvation"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Sci-fi",
"value": "sci-fi"
},
{
"label": "Science fiction",
"value": "science-fiction"
},
{
"label": "Seinen",
"value": "seinen"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Soft yandere",
"value": "soft-yandere"
},
{
"label": "Space opera",
"value": "space-opera"
},
{
"label": "Sports",
"value": "sports"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Survival",
"value": "survival"
},
{
"label": "system",
"value": "system"
},
{
"label": "Time limit",
"value": "time-limit"
},
{
"label": "Tragedy",
"value": "tragedy"
},
{
"label": "Transmigration",
"value": "transmigration"
},
{
"label": "TRPG",
"value": "trpg"
},
{
"label": "TS",
"value": "ts"
},
{
"label": "Tsundere",
"value": "tsundere"
},
{
"label": "Unique",
"value": "unique"
},
{
"label": "Urban",
"value": "urban"
},
{
"label": "Villain",
"value": "villain"
},
{
"label": "Wholesome",
"value": "wholesome"
},
{
"label": "Wisdom",
"value": "wisdom"
},
{
"label": "Wuxia",
"value": "wuxia"
},
{
"label": "Xuanhuan",
"value": "xuanhuan"
},
{
"label": "Yandere",
"value": "yandere"
},
{
"label": "Yuri",
"value": "yuri"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Chinese novel",
"value": "chinese-novel"
},
{
"label": "habyeol",
"value": "habyeol"
},
{
"label": "korean novel",
"value": "korean-novel"
},
{
"label": "Web Novel",
"value": "web-novel"
},
{
"label": "삼심",
"value": "삼심"
},
{
"label": "호곡",
"value": "호곡"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
}
]
}
}
}
@@ -0,0 +1,368 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "city",
"value": "city"
},
{
"label": "cultivation",
"value": "cultivation"
},
{
"label": "faloo",
"value": "faloo"
},
{
"label": "Fan fiction",
"value": "fan-fiction"
},
{
"label": "fanfiction",
"value": "fanfiction"
},
{
"label": "fanqie",
"value": "fanqie"
},
{
"label": "fanstay",
"value": "fanstay"
},
{
"label": "fantansy",
"value": "fantansy"
},
{
"label": "fantasy",
"value": "fantasy"
},
{
"label": "horror",
"value": "horror"
},
{
"label": "immortal",
"value": "immortal"
},
{
"label": "Infinite Heavens",
"value": "infinite-heavens"
},
{
"label": "Infinity",
"value": "infinity"
},
{
"label": "light novel",
"value": "light-novel"
},
{
"label": "martial arts",
"value": "martial-arts"
},
{
"label": "military history",
"value": "military-history"
},
{
"label": "novel",
"value": "novel"
},
{
"label": "qidian",
"value": "qidian"
},
{
"label": "rebirth",
"value": "rebirth"
},
{
"label": "romance",
"value": "romance"
},
{
"label": "sc-fi online game",
"value": "sc-fi-online-game"
},
{
"label": "Sci-fi online games",
"value": "sci-fi-online-games"
},
{
"label": "Science fiction online game",
"value": "science-fiction-online-game"
},
{
"label": "sport",
"value": "sport"
},
{
"label": "Sports",
"value": "sports"
},
{
"label": "system",
"value": "system"
},
{
"label": "time travel",
"value": "time-travel"
},
{
"label": "travel",
"value": "travel"
},
{
"label": "Unlimited Heavens",
"value": "unlimited-heavens"
},
{
"label": "urban",
"value": "urban"
},
{
"label": "urrban",
"value": "urrban"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Black Basket: Platinum Star",
"value": "black-basket-platinum-star"
},
{
"label": "chinesse",
"value": "chinesse"
},
{
"label": "ciweimao",
"value": "ciweimao"
},
{
"label": "Doomsday",
"value": "doomsday"
},
{
"label": "dragon ball",
"value": "dragon-ball"
},
{
"label": "Entertainment",
"value": "entertainment"
},
{
"label": "f",
"value": "f"
},
{
"label": "falo",
"value": "falo"
},
{
"label": "faloo",
"value": "faloo"
},
{
"label": "falooo",
"value": "falooo"
},
{
"label": "fan fiction",
"value": "fan-fiction"
},
{
"label": "fanqie",
"value": "fanqie"
},
{
"label": "fanqienovel",
"value": "fanqienovel"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "faoo",
"value": "faoo"
},
{
"label": "Football",
"value": "football"
},
{
"label": "Harry Potter",
"value": "harry-potter"
},
{
"label": "horror",
"value": "horror"
},
{
"label": "Hunter X Hunter",
"value": "hunter-x-hunter"
},
{
"label": "Infinite Evolution",
"value": "infinite-evolution"
},
{
"label": "jjwxc",
"value": "jjwxc"
},
{
"label": "Lords: Opens with a Bloody Nest",
"value": "lords-opens-with-a-bloody-nest"
},
{
"label": "martial arts",
"value": "martial-arts"
},
{
"label": "marvel",
"value": "marvel"
},
{
"label": "naruto",
"value": "naruto"
},
{
"label": "nba",
"value": "nba"
},
{
"label": "nove",
"value": "nove"
},
{
"label": "novel",
"value": "novel"
},
{
"label": "one piece",
"value": "one-piece"
},
{
"label": "online game",
"value": "online-game"
},
{
"label": "Please",
"value": "please"
},
{
"label": "qiamao",
"value": "qiamao"
},
{
"label": "qidian",
"value": "qidian"
},
{
"label": "qimao",
"value": "qimao"
},
{
"label": "qq",
"value": "qq"
},
{
"label": "romance",
"value": "romance"
},
{
"label": "Sci-Fi",
"value": "sci-fi"
},
{
"label": "Science-fiction",
"value": "science-fiction"
},
{
"label": "sfacg",
"value": "sfacg"
},
{
"label": "this is a world of horror",
"value": "this-is-a-world-of-horror"
},
{
"label": "Urban",
"value": "urban"
},
{
"label": "Web Novel",
"value": "web-novel"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
},
{
"label": "Rating",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,220 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "النوع",
"value": [],
"options": [
{
"label": "+18",
"value": "18"
},
{
"label": "آليه",
"value": "آليه"
},
{
"label": "اكشن",
"value": "اكشن"
},
{
"label": "بالغ",
"value": "بالغ"
},
{
"label": "تاريخي",
"value": "تاريخي"
},
{
"label": "حريم",
"value": "حريم"
},
{
"label": "حياة مدرسية",
"value": "حياة-مدرسية"
},
{
"label": "خارق للطبيعة",
"value": "خارق-للطبيعة"
},
{
"label": "خيال",
"value": "خيال"
},
{
"label": "خيال علمي",
"value": "خيال-علمي"
},
{
"label": "دراما",
"value": "دراما"
},
{
"label": "رعب",
"value": "رعب"
},
{
"label": "رومانسي",
"value": "رومانسي"
},
{
"label": "سحر",
"value": "سحر"
},
{
"label": "سنين",
"value": "سنين"
},
{
"label": "شبه بشريه",
"value": "شبه-بشريه"
},
{
"label": "شرقي",
"value": "شرقي"
},
{
"label": "شريحة من الحياه",
"value": "شريحة-من-الحياه"
},
{
"label": "شوانهوان",
"value": "شوانهوان"
},
{
"label": "شونين",
"value": "شونين"
},
{
"label": "شيانشيا",
"value": "شيانشيا"
},
{
"label": "صيني",
"value": "صيني"
},
{
"label": "غموض",
"value": "غموض"
},
{
"label": "فان فيكشن",
"value": "فان-فيكشن"
},
{
"label": "فنون قتاليه",
"value": "فنون-قتاليه"
},
{
"label": "كوميديا",
"value": "كوميديا"
},
{
"label": "مأساوي",
"value": "مأساوي"
},
{
"label": "مغام",
"value": "مغام"
},
{
"label": "مغامره",
"value": "مغامره"
},
{
"label": "نفسي",
"value": "نفسي"
},
{
"label": "ووشيا",
"value": "ووشيا"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "النوع",
"value": [],
"options": [
{
"label": "روايات انجليزية",
"value": "روايات-انجليزية"
},
{
"label": "روايات صينيه",
"value": "روايات-صينيه"
},
{
"label": "روايات كوريه",
"value": "روايات-كوريه"
},
{
"label": "روايات ويب",
"value": "روايات-ويب"
},
{
"label": "روايات يابانية",
"value": "روايات-يابانية"
}
]
},
"status": {
"type": "Picker",
"label": "الحالة",
"value": "",
"options": [
{
"label": "الكل",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "ترتيب بواسطة",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "أخر التحديثات",
"value": "update"
},
{
"label": "المضاف حديثاً",
"value": "latest"
},
{
"label": "شائع",
"value": "popular"
},
{
"label": "{{advanced_search_series_order_by_rating_label}}",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,252 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Aksiyon",
"value": "aksiyon"
},
{
"label": "Bilim Kurgu",
"value": "bilim-kurgu"
},
{
"label": "Büyü",
"value": "buyu"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Doğaüstü",
"value": "dogaustu"
},
{
"label": "dövüş sanatları",
"value": "dovus-sanatlari"
},
{
"label": "Dram",
"value": "dram"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "ecchi",
"value": "ecchi"
},
{
"label": "fantastik",
"value": "fantastik"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "gizem",
"value": "gizem"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "isekai",
"value": "isekai"
},
{
"label": "Josei",
"value": "josei"
},
{
"label": "Komedi",
"value": "komedi"
},
{
"label": "korku",
"value": "korku"
},
{
"label": "macera",
"value": "macera"
},
{
"label": "Mecha",
"value": "mecha"
},
{
"label": "okul",
"value": "okul"
},
{
"label": "oyun",
"value": "oyun"
},
{
"label": "psikoloji",
"value": "psikoloji"
},
{
"label": "Psychological",
"value": "psychological"
},
{
"label": "reenkarnasyon",
"value": "reenkarnasyon"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "Romantik",
"value": "romantik"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Sci-fi",
"value": "sci-fi"
},
{
"label": "seinen",
"value": "seinen"
},
{
"label": "Shoujo",
"value": "shoujo"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Shounen Ai",
"value": "shounen-ai"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Smut",
"value": "smut"
},
{
"label": "süper kahraman",
"value": "super-kahraman"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "tarih",
"value": "tarih"
},
{
"label": "trajedi",
"value": "trajedi"
},
{
"label": "Wuxia",
"value": "wuxia"
},
{
"label": "Xianxia",
"value": "xianxia"
},
{
"label": "Xuanhuan",
"value": "xuanhuan"
},
{
"label": "Yaoi",
"value": "yaoi"
},
{
"label": "yetişkin",
"value": "yetiskin"
},
{
"label": "Yuri",
"value": "yuri"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Tür",
"value": [],
"options": [
{
"label": "Web Novel",
"value": "web-novel"
}
]
},
"status": {
"type": "Picker",
"label": "Durum",
"value": "",
"options": [
{
"label": "Hepsi",
"value": ""
},
{
"label": "Devam Ediyor",
"value": "ongoing"
},
{
"label": "Askıda",
"value": "hiatus"
},
{
"label": "Tamamlanmış",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Sıralama",
"value": "",
"options": [
{
"label": "Varsayılan",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
}
]
}
}
}
@@ -0,0 +1,204 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Action",
"value": "action"
},
{
"label": "Adult",
"value": "adult"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Ecchi",
"value": "ecchi"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "High Water Level",
"value": "high-water-level"
},
{
"label": "Hypnosis",
"value": "hypnosis"
},
{
"label": "Josei",
"value": "josei"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Masculine",
"value": "masculine"
},
{
"label": "Mature",
"value": "mature"
},
{
"label": "Munchkin",
"value": "munchkin"
},
{
"label": "NTL",
"value": "ntl"
},
{
"label": "Orgy",
"value": "orgy"
},
{
"label": "Pure Love",
"value": "pure-love"
},
{
"label": "Rice Cake",
"value": "rice-cake"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Sci-fi",
"value": "sci-fi"
},
{
"label": "Seinen",
"value": "seinen"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Smut",
"value": "smut"
},
{
"label": "Sports",
"value": "sports"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Tragedy",
"value": "tragedy"
},
{
"label": "Webtoonization",
"value": "webtoonization"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Light Novel (KR)",
"value": "light-novel-kr"
},
{
"label": "we",
"value": "we"
},
{
"label": "Web Novel",
"value": "web-novel"
},
{
"label": "원룸 패밀리",
"value": "원룸-패밀리"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
},
{
"label": "Rating",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,204 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Academy",
"value": "academy"
},
{
"label": "Apocalypse",
"value": "apocalypse"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Daily Life",
"value": "daily-life"
},
{
"label": "Distantchicken",
"value": "distantchicken"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Gallery",
"value": "gallery"
},
{
"label": "Growth",
"value": "growth"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "Hero",
"value": "hero"
},
{
"label": "Internet Broadcasting",
"value": "internet-broadcasting"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Modern",
"value": "modern"
},
{
"label": "Munchkin",
"value": "munchkin"
},
{
"label": "Mystery",
"value": "mystery"
},
{
"label": "Obsession",
"value": "obsession"
},
{
"label": "Possession",
"value": "possession"
},
{
"label": "Pure Love",
"value": "pure-love"
},
{
"label": "Purelove",
"value": "purelove"
},
{
"label": "Regression",
"value": "regression"
},
{
"label": "Regret",
"value": "regret"
},
{
"label": "Reincarnation",
"value": "reincarnation"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "Salvation",
"value": "salvation"
},
{
"label": "SF",
"value": "sf"
},
{
"label": "SM",
"value": "sm"
},
{
"label": "Sports",
"value": "sports"
},
{
"label": "TS",
"value": "ts"
},
{
"label": "Yandere",
"value": "yandere"
},
{
"label": "Yuri",
"value": "yuri"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Mature",
"value": "mature"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
},
{
"label": "Rating",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,152 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Action",
"value": "action"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "Josei",
"value": "josei"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Mature",
"value": "mature"
},
{
"label": "Psychological",
"value": "psychological"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Wuxia",
"value": "wuxia"
},
{
"label": "Xuanhuan",
"value": "xuanhuan"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Light Novel (JP)",
"value": "light-novel-jp"
},
{
"label": "Web Novel",
"value": "web-novel"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
},
{
"label": "Rating",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,184 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Action",
"value": "action"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Anime",
"value": "anime"
},
{
"label": "Anime & Comics",
"value": "anime-comics"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Comic",
"value": "comic"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Fan-Fiction",
"value": "fan-fiction"
},
{
"label": "Fanfiction",
"value": "fanfiction"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Gender Bender",
"value": "gender-bender"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "Isekai",
"value": "isekai"
},
{
"label": "Manga",
"value": "manga"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Mystery",
"value": "mystery"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Sci-fi",
"value": "sci-fi"
},
{
"label": "Seinen",
"value": "seinen"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "System",
"value": "system"
},
{
"label": "Tragedy",
"value": "tragedy"
},
{
"label": "Translated Novel",
"value": "translated-novel"
},
{
"label": "Wuxia",
"value": "wuxia"
},
{
"label": "Xianxia",
"value": "xianxia"
},
{
"label": "Xuanhuan",
"value": "xuanhuan"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Webnovel (FF)",
"value": "webnovel-ff"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
}
]
}
}
}
@@ -0,0 +1,204 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Action",
"value": "action"
},
{
"label": "Adult",
"value": "adult"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Gender Bender",
"value": "gender-bender"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "Historical",
"value": "historical"
},
{
"label": "idol",
"value": "idol"
},
{
"label": "Josei",
"value": "josei"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Mature",
"value": "mature"
},
{
"label": "Mystery",
"value": "mystery"
},
{
"label": "Psychological",
"value": "psychological"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Sci-fi",
"value": "sci-fi"
},
{
"label": "Shoujo",
"value": "shoujo"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Shounen Ai",
"value": "shounen-ai"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Smut",
"value": "smut"
},
{
"label": "Sports",
"value": "sports"
},
{
"label": "Subscription",
"value": "subscription"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Tragedy",
"value": "tragedy"
},
{
"label": "Yaoi",
"value": "yaoi"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Chinese",
"value": "chinese"
},
{
"label": "Light Novel (KR)",
"value": "light-novel-kr"
},
{
"label": "Published Novel (KR)",
"value": "published-novel-kr"
},
{
"label": "Web Novel",
"value": "web-novel"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
},
{
"label": "Rating",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,272 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Acting",
"value": "acting"
},
{
"label": "Action",
"value": "action"
},
{
"label": "Adult",
"value": "adult"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Bl",
"value": "bl"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Ecchi",
"value": "ecchi"
},
{
"label": "entertainment",
"value": "entertainment"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Funny",
"value": "funny"
},
{
"label": "Gender Bender",
"value": "gender-bender"
},
{
"label": "Ghost",
"value": "ghost"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "Historical",
"value": "historical"
},
{
"label": "Horror",
"value": "horror"
},
{
"label": "Isekai",
"value": "isekai"
},
{
"label": "Jose",
"value": "jose"
},
{
"label": "Josei",
"value": "josei"
},
{
"label": "Male protagonist",
"value": "male-protagonist"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Mature",
"value": "mature"
},
{
"label": "Mystery",
"value": "mystery"
},
{
"label": "Psychological",
"value": "psychological"
},
{
"label": "Reincarnation",
"value": "reincarnation"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Sci-Fi",
"value": "sci-fi"
},
{
"label": "Shoujo",
"value": "shoujo"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Shounen Ai",
"value": "shounen-ai"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Smut",
"value": "smut"
},
{
"label": "Sprited animal",
"value": "sprited-animal"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Survival",
"value": "survival"
},
{
"label": "Tragedy",
"value": "tragedy"
},
{
"label": "Transmigration",
"value": "transmigration"
},
{
"label": "Unlimited flow",
"value": "unlimited-flow"
},
{
"label": "Wuxia",
"value": "wuxia"
},
{
"label": "Xianxia",
"value": "xianxia"
},
{
"label": "Xuanhuan",
"value": "xuanhuan"
},
{
"label": "Yaoi",
"value": "yaoi"
},
{
"label": "Yuri",
"value": "yuri"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Chinese",
"value": "chinese"
},
{
"label": "Chinese Novel",
"value": "chinese-novel"
},
{
"label": "Korean Novel",
"value": "korean-novel"
},
{
"label": "Published Novel (CN)",
"value": "published-novel-cn"
},
{
"label": "Published Novel (KR)",
"value": "published-novel-kr"
},
{
"label": "Web Novel",
"value": "web-novel"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
}
]
}
}
}
@@ -0,0 +1,204 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Action",
"value": "action"
},
{
"label": "Adult",
"value": "adult"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Comedy",
"value": "comedy"
},
{
"label": "Drama",
"value": "drama"
},
{
"label": "Ecchi",
"value": "ecchi"
},
{
"label": "Fantasy",
"value": "fantasy"
},
{
"label": "Harem",
"value": "harem"
},
{
"label": "Historical",
"value": "historical"
},
{
"label": "Isekai",
"value": "isekai"
},
{
"label": "Josei",
"value": "josei"
},
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Mature",
"value": "mature"
},
{
"label": "Medical",
"value": "medical"
},
{
"label": "Modern",
"value": "modern"
},
{
"label": "Mystery",
"value": "mystery"
},
{
"label": "Psychological",
"value": "psychological"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Sci-fi",
"value": "sci-fi"
},
{
"label": "Seinen",
"value": "seinen"
},
{
"label": "Shoujo",
"value": "shoujo"
},
{
"label": "Shounen",
"value": "shounen"
},
{
"label": "Shounen Ai",
"value": "shounen-ai"
},
{
"label": "Slice of Life",
"value": "slice-of-life"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Tragedy",
"value": "tragedy"
},
{
"label": "Wuxia",
"value": "wuxia"
},
{
"label": "Yaoi",
"value": "yaoi"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": [
{
"label": "Martial Arts",
"value": "martial-arts"
},
{
"label": "Published Novel (KR)",
"value": "published-novel-kr"
},
{
"label": "Web Novel",
"value": "web-novel"
}
]
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
},
{
"label": "Rating",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,163 @@
{
"filters": {
"genre[]": {
"type": "Checkbox",
"label": "Genre",
"value": [],
"options": [
{
"label": "Action",
"value": "action"
},
{
"label": "Adventure",
"value": "adventure"
},
{
"label": "Boy's Love",
"value": "boys-love"
},
{
"label": "Business",
"value": "business"
},
{
"label": "Completed",
"value": "completed"
},
{
"label": "Cultivation",
"value": "cultivation"
},
{
"label": "Dropped",
"value": "dropped"
},
{
"label": "Entertainment Industry",
"value": "entertainment-industry"
},
{
"label": "Gaming",
"value": "gaming"
},
{
"label": "Ger",
"value": "ger"
},
{
"label": "Modern",
"value": "modern"
},
{
"label": "Omegaverse",
"value": "omegaverse"
},
{
"label": "Rebirth",
"value": "rebirth"
},
{
"label": "Revenge",
"value": "revenge"
},
{
"label": "Romance",
"value": "romance"
},
{
"label": "School Life",
"value": "school-life"
},
{
"label": "Supernatural",
"value": "supernatural"
},
{
"label": "Survival",
"value": "survival"
},
{
"label": "System",
"value": "system"
},
{
"label": "Transmigration",
"value": "transmigration"
},
{
"label": "Unlimited Flow",
"value": "unlimited-flow"
},
{
"label": "Variety Show",
"value": "variety-show"
}
]
},
"type[]": {
"type": "Checkbox",
"label": "Type",
"value": [],
"options": []
},
"status": {
"type": "Picker",
"label": "Status",
"value": "",
"options": [
{
"label": "All",
"value": ""
},
{
"label": "Ongoing",
"value": "ongoing"
},
{
"label": "Hiatus",
"value": "hiatus"
},
{
"label": "Completed",
"value": "completed"
}
]
},
"order": {
"type": "Picker",
"label": "Order by",
"value": "",
"options": [
{
"label": "Default",
"value": ""
},
{
"label": "A-Z",
"value": "title"
},
{
"label": "Z-A",
"value": "titlereverse"
},
{
"label": "Latest Update",
"value": "update"
},
{
"label": "Latest Added",
"value": "latest"
},
{
"label": "Popular",
"value": "popular"
},
{
"label": "Rating",
"value": "rating"
}
]
}
}
}
@@ -0,0 +1,43 @@
import list from './sources.json' with { type: 'json' };
import { existsSync, readFileSync } from 'fs';
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';
const folder = dirname(fileURLToPath(import.meta.url));
export const generateAll = function () {
return list.map(source => {
const exist = existsSync(join(folder, 'filters', source.id + '.json'));
if (exist) {
const filters = readFileSync(
join(folder, 'filters', source.id + '.json'),
);
source.filters = JSON.parse(filters).filters;
}
console.log(
`[lightnovelwp] Generating: ${source.id}${' '.repeat(20 - source.id.length)} ${source.filters ? '🔎with filters🔍' : '🚫no filters🚫'}`,
);
return generator(source);
});
};
const generator = function generator(source) {
const LightNovelWPTemplate = readFileSync(join(folder, 'template.ts'), {
encoding: 'utf-8',
});
const pluginScript = `
${LightNovelWPTemplate.replace(
'// CustomJS HERE',
source.options?.customJs || '',
)}
const plugin = new LightNovelWPPlugin(${JSON.stringify(source)});
export default plugin;
`.trim();
return {
lang: source.options?.lang || 'English',
filename: source.sourceName,
pluginScript,
};
};
@@ -0,0 +1,167 @@
import * as fs from 'fs';
import * as cheerio from 'cheerio';
import * as path from 'path';
import * as readline from 'readline';
import process from 'process';
import { fileURLToPath } from 'url';
import { dirname } from 'path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
function getFilters(name, html) {
const $ = cheerio.load(html);
const filters = {
filters: {
'genre[]': {
type: 'Checkbox',
label: 'Genre',
value: [],
options: [],
},
'type[]': {
type: 'Checkbox',
label: 'Type',
value: [],
options: [],
},
'status': {
type: 'Picker',
label: 'Status',
value: '',
options: [],
},
'order': {
type: 'Picker',
label: 'Order',
value: '',
options: [],
},
},
};
const filtersContainer = $('div.quickfilter').find('ul');
filtersContainer.each((i, el) => {
const filterName = Object.keys(filters.filters)[i];
if (filterName) {
filters.filters[filterName].label = $(el)
.prev()
.contents()
.first()
.text()
.trim();
$(el)
.find('li')
.each((j, li) => {
filters.filters[filterName].options.push({
label: $(li).text().trim(),
value: decodeURI($(li).find('input').attr('value') || ''),
});
});
}
});
if (
filters.filters['genre[]'].options.length == 0 ||
filters.filters['type[]'].options.length == 0 ||
filters.filters['status'].options.length == 0 ||
filters.filters['order'].options.length == 0
) {
console.error(
`🚨Error in filters for ${name} please fix manually (${path.join(__dirname, 'filters', name + '.json')})🚨`,
);
}
fs.writeFileSync(
path.join(__dirname, 'filters', name + '.json'),
JSON.stringify(filters, null, 2),
);
console.log(`✅Filters created successfully for ${name}✅`);
}
async function getFiltersFromURL(name, url) {
const response = await fetch(url + '/series/');
if (!response.ok) {
throw new Error(
`HTTP error! status: ${response.status}, while fetching ${response.url}`,
);
}
const html = await response.text();
try {
getFilters(name, html);
} catch (e) {
console.error('Error while getting filters from', url);
console.error('(' + e + ')');
}
}
async function askGetFilter() {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const EREASE_PREV_LINE = '\x1b[1A\r\x1b[2K';
await rl.question(
'Enter the id of the site (same one as in sources.json): ',
async name => {
await rl.question(
EREASE_PREV_LINE +
"Do you want to get the filters from a URL or the html text? (if url dosen't work try html) (url/html): ",
async method => {
if (method.toLowerCase() === 'url') {
const sources = JSON.parse(
fs.readFileSync(path.join(__dirname, 'sources.json'), 'utf-8'),
);
const source = sources.find(s => s.id === name);
if (source && source.sourceSite) {
console.log('Getting filters from', source.sourceSite);
try {
await getFiltersFromURL(name, source.sourceSite);
} catch (e) {
console.error(
'Error while getting filters from',
source.sourceSite,
);
console.log(e.message || e);
}
rl.close();
} else {
await rl.question(
EREASE_PREV_LINE +
'Enter the URL (same one as in sources.json): ',
async url => {
rl.close();
try {
await getFiltersFromURL(name, url);
} catch (e) {
console.error('Error while getting filters from', url);
console.log(e.message || e);
}
},
);
}
} else {
process.stdout.write(
EREASE_PREV_LINE +
`Enter the html text from the page at {sourceSite}/series (at the end press ENTER then press CTRL+C)
(to make it faster you can run \`$("div.quickfilter").parent().html()\` in the console to get only the important html part): `,
);
let html = '';
rl.on('SIGINT', () => {
console.log('Stopeed reading input, creating filters file');
getFilters(name, html);
rl.close();
});
rl.on('line', line => {
html += line + '\n';
});
}
},
);
},
);
}
askGetFilter();
export { getFiltersFromURL };
+288
View File
@@ -0,0 +1,288 @@
[
{
"id": "lightnovelfr",
"sourceSite": "https://lightnovelfr.com/",
"sourceName": "Ligh Novel FR",
"options": {
"lang": "French",
"reverseChapters": true
}
},
{
"id": "kolnovel",
"sourceSite": "https://kolnovel.site/",
"sourceName": "Kol Novel",
"options": {
"lang": "Arabic",
"reverseChapters": true,
"customJs": "$('article > style').text().match(/\\.\\w+(?=\\s*[,{])/g)?.forEach(tag => $(`p${tag}`).remove());$('.epcontent .code-block').remove();",
"versionIncrements": 9
}
},
{
"id": "knoxt",
"sourceSite": "https://knoxt.space/",
"sourceName": "KnoxT",
"options": {
"lang": "English",
"reverseChapters": true
}
},
{
"id": "bacalightnovel",
"sourceSite": "https://bacalightnovel.co/",
"sourceName": "Baca Light Novel",
"options": {
"lang": "Indonesian",
"reverseChapters": true
}
},
{
"id": "allnovelread",
"sourceSite": "https://allnovelread.com/",
"sourceName": "AllNovelRead",
"options": {
"lang": "Spanish",
"reverseChapters": true
}
},
{
"id": "daotranslate",
"sourceSite": "https://daotranslate.com/",
"sourceName": "DaoTranslate",
"options": {
"lang": "English",
"reverseChapters": true
}
},
{
"id": "novelsparadise",
"sourceSite": "https://novelsparadise.site/",
"sourceName": "Novels Paradise",
"options": {
"lang": "Arabic",
"reverseChapters": true
}
},
{
"id": "universalnovel",
"sourceSite": "https://universalnovel.com/",
"sourceName": "Universal Novel",
"options": {
"lang": "English",
"reverseChapters": false
}
},
{
"id": "noveltr",
"sourceSite": "https://noveltr.com/",
"sourceName": "NovelTR",
"options": {
"lang": "Turkish"
}
},
{
"id": "noblemtl",
"sourceSite": "https://noblemtl.com/",
"sourceName": "NobleMTL",
"options": {
"lang": "English",
"reverseChapters": true
}
},
{
"id": "pandamtl",
"sourceSite": "https://pandamtl.com/",
"sourceName": "Panda Machine Translations",
"options": {
"lang": "English",
"reverseChapters": true
}
},
{
"id": "novelsknight",
"sourceSite": "https://novelsknight.punchmanga.online/",
"sourceName": "NovelsKnight",
"options": {
"lang": "English",
"reverseChapters": true,
"versionIncrements": 2,
"customJs": "$('.announ').remove(); return $('.epcontent').eq(-1).find('p').map(function (i, el) { return '<p>' + $(this).text() + '</p>'; }).toArray().join('\\n') || '';"
}
},
{
"id": "centralnovel",
"sourceSite": "https://centralnovel.com/",
"sourceName": "Central Novel",
"options": {
"lang": "Portuguese",
"reverseChapters": true
}
},
{
"id": "whitemoonlightnovels",
"sourceSite": "https://whitemoonlightnovels.com/",
"sourceName": "White Moonlight Novels",
"options": {
"lang": "English",
"reverseChapters": false
}
},
{
"id": "sektenovel",
"sourceSite": "https://sektenovel.web.id/",
"sourceName": "Sekte Novel",
"options": {
"lang": "Indonesian",
"reverseChapters": true
}
},
{
"id": "systemtranslation",
"sourceSite": "https://systemtranslation.com/",
"sourceName": "System Translation",
"options": {
"lang": "English",
"reverseChapters": true
}
},
{
"id": "moonlightnovel",
"sourceSite": "https://moonlightnovel.com/",
"sourceName": "Moonlight Novels",
"options": {
"versionIncrements": 1,
"lang": "English",
"reverseChapters": true
}
},
{
"id": "lightnovelbrasil",
"sourceSite": "https://lightnovelbrasil.com/",
"sourceName": "Light Novel Brasil",
"options": {
"lang": "Portuguese",
"reverseChapters": true
}
},
{
"id": "ellotl",
"sourceSite": "https://ellotl.com/",
"sourceName": "ElloTL",
"options": {
"lang": "English",
"reverseChapters": true
}
},
{
"id": "ippotranslations",
"sourceSite": "https://ippotranslations.com/",
"sourceName": "Ippotranslations",
"options": {
"lang": "English",
"reverseChapters": true
}
},
{
"id": "cpunovel",
"sourceSite": "https://cpunovel.com/",
"sourceName": "CPUnovel",
"options": {
"lang": "English",
"reverseChapters": true
}
},
{
"id": "requiemtls",
"sourceSite": "https://requiemtls.com/",
"sourceName": "Requiem Translations",
"options": {
"lang": "English",
"reverseChapters": true,
"customJs": "\n $('div.entry-content script').remove();\n\n const url = this.site + chapterPath.slice(0, -1);\n const offsets = [[0, 12368, 12462], [1, 6960, 7054], [2, 4176, 4270]];\n const idx = url.length * url.charCodeAt(url.length - 1) * 2 % 3;\n const [_, offsetLower, offsetCap] = offsets[idx] ?? offsets[0];\n\n const asciiA = 'A'.charCodeAt(0);\n const asciiz = 'z'.charCodeAt(0);\n\n $('div.entry-content > p').text((_, txt) =>\n txt.split('').map(char => {\n const code = char.charCodeAt(0);\n const offset = (code >= offsetLower + asciiA && code <= offsetLower + asciiz)\n ? offsetLower\n : offsetCap;\n const decoded = code - offset;\n return (decoded >= 32 && decoded <= 126) ? String.fromCharCode(decoded) : char;\n }).join('')\n );\n",
"versionIncrements": 4
}
},
{
"id": "betternovels",
"sourceSite": "https://betternovels.net/",
"sourceName": "Better Novels",
"options": {
"lang": "Portuguese"
}
},
{
"id": "arcane",
"sourceSite": "https://arcanetranslations.com/",
"sourceName": "Arcane Translations",
"options": {
"reverseChapters": true,
"lang": "English",
"hasLocked": true
}
},
{
"id": "namevt",
"sourceSite": "https://namevt.com/",
"sourceName": "Namevt",
"options": {
"reverseChapters": true,
"seriesPath": "seri",
"lang": "Turkish"
}
},
{
"id": "kodekslibrary",
"sourceSite": "https://www.kodekslibrary.com/",
"sourceName": "Kodeks Library",
"options": {
"reverseChapters": true,
"lang": "Turkish"
}
},
{
"id": "vandytranslate",
"sourceSite": "https://vandytranslate.com",
"sourceName": "Vandy Translate",
"options": {
"reverseChapters": true,
"lang": "English"
}
},
{
"id": "lazygirltranslations",
"sourceSite": "https://lazygirltranslations.com",
"sourceName": "Lazy Girl Translations",
"options": {
"reverseChapters": false,
"lang": "English"
}
},
{
"id": "keopi",
"sourceSite": "https://keopitranslations.com",
"sourceName": "Keopi Translations",
"options": {
"lang": "English",
"reverseChapters": true
}
},
{
"id": "TCSega",
"sourceSite": "https://teamchmantranslations.com",
"sourceName": "TC & Sega",
"options": {
"lang": "Spanish",
"reverseChapters": true
}
},
{
"id": "transweaver",
"sourceSite": "https://transweaver.com/",
"sourceName": "Translation Weaver",
"options": {
"lang": "English",
"reverseChapters": true
}
}
]
+465
View File
@@ -0,0 +1,465 @@
import { load } from 'cheerio';
import { Parser } from 'htmlparser2';
import { fetchApi } from '@libs/fetch';
import { Plugin } from '@/types/plugin';
import { NovelStatus } from '@libs/novelStatus';
import { defaultCover } from '@libs/defaultCover';
import { Filters } from '@libs/filterInputs';
import { storage } from '@/lib/storage';
type LightNovelWPOptions = {
reverseChapters?: boolean;
lang?: string;
versionIncrements?: number;
seriesPath?: string;
customJs?: string;
hasLocked?: boolean;
};
export type LightNovelWPMetadata = {
id: string;
sourceSite: string;
sourceName: string;
options?: LightNovelWPOptions;
filters?: any;
};
class LightNovelWPPlugin implements Plugin.PluginBase {
id: string;
name: string;
icon: string;
site: string;
version: string;
options?: LightNovelWPOptions;
filters?: Filters;
hideLocked = storage.get('hideLocked');
pluginSettings?: Record<string, any>;
constructor(metadata: LightNovelWPMetadata) {
this.id = metadata.id;
this.name = metadata.sourceName;
this.icon = `multisrc/lightnovelwp/${metadata.id.toLowerCase()}/icon.png`;
this.site = metadata.sourceSite;
const versionIncrements = metadata.options?.versionIncrements || 0;
this.version = `1.1.${9 + versionIncrements}`;
this.options = metadata.options ?? ({} as LightNovelWPOptions);
this.filters = metadata.filters satisfies Filters;
if (this.options?.hasLocked) {
this.pluginSettings = {
hideLocked: {
value: '',
label: 'Hide locked chapters',
type: 'Switch',
},
};
}
}
getHostname(url: string): string {
url = url.split('/')[2];
const url_parts = url.split('.');
url_parts.pop(); // remove TLD
return url_parts.join('.');
}
async safeFecth(url: string, search: boolean): Promise<string> {
const urlParts = url.split('://');
const protocol = urlParts.shift();
const sanitizedUri = urlParts[0].replace(/\/\//g, '/');
const r = await fetchApi(protocol + '://' + sanitizedUri);
if (!r.ok && search != true)
throw new Error(
'Could not reach site (' + r.status + ') try to open in webview.',
);
const data = await r.text();
const title = data.match(/<title>(.*?)<\/title>/)?.[1]?.trim();
if (
this.getHostname(url) != this.getHostname(r.url) ||
(title &&
(title == 'Bot Verification' ||
title == 'You are being redirected...' ||
title == 'Un instant...' ||
title == 'Just a moment...' ||
title == 'Redirecting...'))
)
throw new Error(
'Captcha error, please open in webview (or the website has changed url)',
);
return data;
}
parseNovels(html: string): Plugin.NovelItem[] {
html = load(html).html(); // fix "'" beeing replaced by "&#8217;" (html entities)
const novels: Plugin.NovelItem[] = [];
const articles = html.match(/<article([^]*?)<\/article>/g) || [];
articles.forEach(article => {
const [, novelUrl, novelName] =
article.match(/<a href="([^\"]*)".*? title="([^\"]*)"/) || [];
if (novelName && novelUrl) {
const novelCover =
article.match(
/<img [^>]*?src="([^\"]*)"[^>]*?(?: data-src="([^\"]*)")?[^>]*>/,
) || [];
let novelPath;
if (novelUrl.includes(this.site)) {
novelPath = novelUrl.replace(this.site, '');
} else {
// TODO: report website new url to server
const novelParts = novelUrl.split('/');
novelParts.shift();
novelParts.shift();
novelParts.shift();
novelPath = novelParts.join('/');
}
novels.push({
name: novelName,
cover: novelCover[2] || novelCover[1] || defaultCover,
path: novelPath,
});
}
});
return novels;
}
async popularNovels(
pageNo: number,
{
filters,
showLatestNovels,
}: Plugin.PopularNovelsOptions<typeof this.filters>,
): Promise<Plugin.NovelItem[]> {
const seriesPath = this.options?.seriesPath ?? '/series/';
let url = this.site + seriesPath + '?page=' + pageNo;
if (!filters) filters = this.filters || {};
if (showLatestNovels) url += '&order=latest';
for (const key in filters) {
if (typeof filters[key].value === 'object')
for (const value of filters[key].value as string[])
url += `&${key}=${value}`;
else if (filters[key].value) url += `&${key}=${filters[key].value}`;
}
const html = await this.safeFecth(url, false);
return this.parseNovels(html);
}
async parseNovel(novelPath: string): Promise<Plugin.SourceNovel> {
const baseURL = this.site;
const html = await this.safeFecth(baseURL + novelPath, false);
const novel: Plugin.SourceNovel = {
path: novelPath,
name: '',
genres: '',
summary: '',
author: '',
artist: '',
status: '',
chapters: [] as Plugin.ChapterItem[],
};
let isParsingGenres = false;
let isReadingGenre = false;
let isReadingSummary = 0;
let isParsingInfo = false;
let isReadingInfo = false;
let isReadingAuthor = false;
let isReadingArtist = false;
let isReadingStatus = false;
let isParsingChapterList = false;
let isReadingChapter = false;
let isReadingChapterInfo = 0;
let isPaidChapter = false;
let hasLockItemOnChapterNum = false;
const chapters: Plugin.ChapterItem[] = [];
let tempChapter = {} as Plugin.ChapterItem;
const hideLocked = this.hideLocked;
const parser = new Parser({
onopentag(name, attribs) {
// name and cover
if (!novel.cover && attribs['class']?.includes('ts-post-image')) {
novel.name = attribs['title'];
novel.cover = attribs['data-src'] || attribs['src'] || defaultCover;
} // genres
else if (
attribs['class'] === 'genxed' ||
attribs['class'] === 'sertogenre'
) {
isParsingGenres = true;
} else if (isParsingGenres && name === 'a') {
isReadingGenre = true;
} // summary
else if (
name === 'div' &&
(attribs['class'] === 'entry-content' ||
attribs['itemprop'] === 'description')
) {
isReadingSummary++;
} // author and status
else if (attribs['class'] === 'spe' || attribs['class'] === 'serl') {
isParsingInfo = true;
} else if (isParsingInfo && name === 'span') {
isReadingInfo = true;
} else if (name === 'div' && attribs['class'] === 'sertostat') {
isParsingInfo = true;
isReadingInfo = true;
isReadingStatus = true;
}
// chapters
else if (attribs['class'] && attribs['class'].includes('eplister')) {
isParsingChapterList = true;
} else if (isParsingChapterList && name === 'li') {
isReadingChapter = true;
} else if (isReadingChapter) {
if (name === 'a' && tempChapter.path === undefined) {
tempChapter.path = attribs['href'].replace(baseURL, '').trim();
} else if (attribs['class'] === 'epl-num') {
isReadingChapterInfo = 1;
} else if (attribs['class'] === 'epl-title') {
isReadingChapterInfo = 2;
} else if (attribs['class'] === 'epl-date') {
isReadingChapterInfo = 3;
} else if (attribs['class'] === 'epl-price') {
isReadingChapterInfo = 4;
}
} else if (isReadingSummary && (name === 'div' || name === 'script')) {
isReadingSummary++;
}
},
ontext(data) {
// genres
if (isParsingGenres) {
if (isReadingGenre) {
novel.genres += data + ', ';
}
} // summary
else if (isReadingSummary === 1 && data.trim()) {
novel.summary += data;
} // author and status
else if (isParsingInfo) {
if (isReadingInfo) {
const detailName = data.toLowerCase().replace(':', '').trim();
if (isReadingAuthor) {
novel.author += data || 'Unknown';
} else if (isReadingArtist) {
novel.artist += data || 'Unknown';
} else if (isReadingStatus) {
switch (detailName) {
case 'مكتملة':
case 'completed':
case 'complété':
case 'completo':
case 'completado':
case 'tamamlandı':
novel.status = NovelStatus.Completed;
break;
case 'مستمرة':
case 'ongoing':
case 'en cours':
case 'em andamento':
case 'en progreso':
case 'devam ediyor':
novel.status = NovelStatus.Ongoing;
break;
case 'متوقفة':
case 'hiatus':
case 'en pause':
case 'hiato':
case 'pausa':
case 'pausado':
case 'duraklatıldı':
novel.status = NovelStatus.OnHiatus;
break;
default:
novel.status = NovelStatus.Unknown;
break;
}
}
switch (detailName) {
case 'الكاتب':
case 'author':
case 'auteur':
case 'autor':
case 'yazar':
isReadingAuthor = true;
break;
case 'الحالة':
case 'status':
case 'statut':
case 'estado':
case 'durum':
isReadingStatus = true;
break;
case 'الفنان':
case 'artist':
case 'artiste':
case 'artista':
case 'çizer':
isReadingArtist = true;
break;
}
}
} // chapters
else if (isParsingChapterList) {
if (isReadingChapter) {
if (isReadingChapterInfo === 1) {
if (data.includes('🔒')) {
isPaidChapter = true;
hasLockItemOnChapterNum = true;
} else if (hasLockItemOnChapterNum) {
isPaidChapter = false;
}
extractChapterNumber(data, tempChapter);
} else if (isReadingChapterInfo === 2) {
tempChapter.name =
data
.match(
RegExp(
`^${novel.name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\s*(.+)`,
),
)?.[1]
?.trim() || data.trim();
if (!tempChapter.chapterNumber) {
extractChapterNumber(data, tempChapter);
}
} else if (isReadingChapterInfo === 3) {
tempChapter.releaseTime = data; //new Date(data).toISOString();
} else if (isReadingChapterInfo === 4) {
const detailName = data.toLowerCase().trim();
switch (detailName) {
case 'free':
case 'gratuit':
case 'مجاني':
case 'livre':
case '':
isPaidChapter = false;
break;
default:
isPaidChapter = true;
break;
}
}
}
}
},
onclosetag(name) {
// genres
if (isParsingGenres) {
if (isReadingGenre) {
isReadingGenre = false; // stop reading genre
} else {
isParsingGenres = false; // stop parsing genres
novel.genres = novel.genres?.slice(0, -2); // remove trailing comma
}
} // summary
else if (isReadingSummary) {
if (name === 'p') {
novel.summary += '\n\n';
} else if (name === 'br') {
novel.summary += '\n';
} else if (name === 'div' || name === 'script') {
isReadingSummary--;
}
} // author and status
else if (isParsingInfo) {
if (isReadingInfo) {
if (name === 'span') {
isReadingInfo = false;
if (isReadingAuthor && novel.author) {
isReadingAuthor = false;
} else if (isReadingArtist && novel.artist) {
isReadingArtist = false;
} else if (isReadingStatus && novel.status !== '') {
isReadingStatus = false;
}
}
} else if (name === 'div') {
isParsingInfo = false;
novel.author = novel.author?.trim();
novel.artist = novel.artist?.trim();
}
} // chapters
else if (isParsingChapterList) {
if (isReadingChapter) {
if (isReadingChapterInfo === 1) {
isReadingChapterInfo = 0;
} else if (isReadingChapterInfo === 2) {
isReadingChapterInfo = 0;
} else if (isReadingChapterInfo === 3) {
isReadingChapterInfo = 0;
} else if (isReadingChapterInfo === 4) {
isReadingChapterInfo = 0;
} else if (name === 'li') {
isReadingChapter = false;
if (!tempChapter.chapterNumber) tempChapter.chapterNumber = 0;
if (isPaidChapter) tempChapter.name = '🔒 ' + tempChapter.name;
if (!hideLocked || !isPaidChapter) chapters.push(tempChapter);
tempChapter = {} as Plugin.ChapterItem;
}
} else if (name === 'ul') {
isParsingChapterList = false;
}
}
},
});
parser.write(html);
parser.end();
if (chapters.length) {
if (this.options?.reverseChapters) chapters.reverse();
novel.chapters = chapters;
}
novel.summary = novel.summary.trim();
return novel;
}
async parseChapter(chapterPath: string): Promise<string> {
let data = await this.safeFecth(this.site + chapterPath, false);
if (this.options?.customJs) {
try {
const $ = load(data);
// CustomJS HERE
data = $.html();
} catch (error) {
console.error('Error executing customJs:', error);
throw error;
}
}
return (
data
.match(/<div.*?class="epcontent ([^]*?)<div.*?class="?bottomnav/g)?.[0]
.match(/<p[^>]*>([^]*?)<\/p>/g)
?.join('\n') || ''
);
}
async searchNovels(
searchTerm: string,
page: number,
): Promise<Plugin.NovelItem[]> {
const url =
this.site + 'page/' + page + '/?s=' + encodeURIComponent(searchTerm);
const html = await this.safeFecth(url, true);
return this.parseNovels(html);
}
}
function extractChapterNumber(data: string, tempChapter: Plugin.ChapterItem) {
const tempChapterNumber = data.match(/(\d+)$/);
if (tempChapterNumber && tempChapterNumber[0]) {
tempChapter.chapterNumber = parseInt(tempChapterNumber[0]);
}
}