feat(webtoons): Enhance search and filtering logic

This commit is contained in:
xMohnad
2025-06-15 14:30:51 +03:00
parent a050513224
commit 6ecb75960b

View File

@@ -69,20 +69,36 @@ class DefaultExtension extends MProvider {
const keyword = query.trim().replace(/\s+/g, "+"); const keyword = query.trim().replace(/\s+/g, "+");
const baseurl = this.source.baseUrl; const baseurl = this.source.baseUrl;
let url = `${baseurl}/${this.langCode()}`; let url = `${baseurl}/${this.langCode()}`;
let hasNextPage = false;
if (query !== "") { const getFilterValue = (type, defaultValue = "") => {
url += `/search/${filters[0].values[filters[0].state].value}?keyword=${keyword}&page=${page}`; const filter = filters.find((f) => f.type === type);
} else if (filters) { return filter?.values?.[filter.state]?.value ?? defaultValue;
url += `/genres/${filters[2].values[filters[2].state].value}`; };
if (query) {
url += `/search/${getFilterValue("searchType")}?keyword=${keyword}&page=${page}`;
hasNextPage = true;
} else {
const sortOrder = getFilterValue("sortOrder");
const rankingType = getFilterValue("rankingType");
const weekday = getFilterValue("weekday");
const genreType = getFilterValue("genre");
if (rankingType) {
// const genreParam = genreType ? `&subTabGenreCode=${genreType}` : "";
url += `/ranking/${rankingType}`;
} else if (weekday) {
url += `/originals/${weekday}?sortOrder=${sortOrder}`;
} else if (genreType) {
url += `/genres/${genreType}?sortOrder=${sortOrder}`;
}
} }
const res = await new Client().get(url); const res = await new Client().get(url);
const doc = new Document(res.body); const doc = new Document(res.body);
const list = this.mangaFromElement(doc);
const hasNextPage = list.length !== 0;
return { return {
list, list: this.mangaFromElement(doc),
hasNextPage, hasNextPage,
}; };
} }
@@ -313,113 +329,242 @@ class DefaultExtension extends MProvider {
value: "canvas", value: "canvas",
}, },
], ],
state: 0,
}, },
{ {
type: "sort", type: "separator",
name: "Official or Challenge", type_name: "SeparatorFilter",
},
{
type: "rankingType",
name: "Ranking Category",
type_name: "SelectFilter", type_name: "SelectFilter",
values: [ values: [
{ {
type_name: "SelectOption", type_name: "SelectOption",
name: "Any", name: "Not Selected",
value: "any", value: "",
}, },
{ {
type_name: "SelectOption", type_name: "SelectOption",
name: "Official only", name: "Trending",
value: "official", value: "trending",
}, },
{ {
type_name: "SelectOption", type_name: "SelectOption",
name: "Challenge only", name: "Popular",
value: "challenge", value: "popular",
},
{
type_name: "SelectOption",
name: "Originals",
value: "originals",
},
{
type_name: "SelectOption",
name: "Canvas",
value: "canvas",
}, },
], ],
}, },
{ {
type: "categories", type: "separator",
type_name: "SeparatorFilter",
},
{
type: "sortOrder",
name: "Sort By (For Schedule & Genres)",
type_name: "SelectFilter",
values: [
{ type_name: "SelectOption", name: "Popular (MANA)", value: "MANA" },
{ type_name: "SelectOption", name: "Likes", value: "LIKEIT" },
{ type_name: "SelectOption", name: "Newest", value: "UPDATE" },
],
state: 0,
appliesTo: ["weekday", "genre"],
},
{
type: "separator",
type_name: "SeparatorFilter",
},
{
type: "weekday",
name: "Update Schedule",
type_name: "SelectFilter",
values: [
{
type_name: "SelectOption",
name: "Day",
value: "",
data: "",
},
{
type_name: "SelectOption",
name: "Monday",
value: "monday",
data: "MONDAY",
},
{
type_name: "SelectOption",
name: "Tuesday",
value: "tuesday",
data: "TUESDAY",
},
{
type_name: "SelectOption",
name: "Wednesday",
value: "wednesday",
data: "WEDNESDAY",
},
{
type_name: "SelectOption",
name: "Thursday",
value: "thursday",
data: "THURSDAY",
},
{
type_name: "SelectOption",
name: "Friday",
value: "friday",
data: "FRIDAY",
},
{
type_name: "SelectOption",
name: "Saturday",
value: "saturday",
data: "SATURDAY",
},
{
type_name: "SelectOption",
name: "Sunday",
value: "sunday",
data: "SUNDAY",
},
{
type_name: "SelectOption",
name: "Completed",
value: "complete",
data: "COMPLETE",
},
],
},
{
type: "genre",
name: "Genre", name: "Genre",
type_name: "SelectFilter", type_name: "SelectFilter",
values: [ values: [
{ {
type_name: "SelectOption", type_name: "SelectOption",
name: "All", name: "All Genres",
value: "", value: "",
}, data: "",
{
type_name: "SelectOption",
name: "Action",
value: "action",
},
{
type_name: "SelectOption",
name: "Comedy",
value: "comedy",
}, },
{ {
type_name: "SelectOption", type_name: "SelectOption",
name: "Drama", name: "Drama",
value: "drama", value: "drama",
data: "DRAMA",
}, },
{ {
type_name: "SelectOption", type_name: "SelectOption",
name: "Fantasy", name: "Fantasy",
value: "fantasy", value: "fantasy",
data: "FANTASY",
}, },
{ {
type_name: "SelectOption", type_name: "SelectOption",
name: "Heartwarming", name: "Comedy",
value: "heartwarming", value: "comedy",
data: "COMEDY",
}, },
{ {
type_name: "SelectOption", type_name: "SelectOption",
name: "Historical", name: "Action",
value: "historical", value: "action",
data: "ACTION",
}, },
{ {
type_name: "SelectOption", type_name: "SelectOption",
name: "Horror", name: "Slice of Life",
value: "horror", value: "slice_of_life",
}, data: "SLICE_OF_LIFE",
{
type_name: "SelectOption",
name: "Informative",
value: "tiptoon",
},
{
type_name: "SelectOption",
name: "Mystery",
value: "mystery",
}, },
{ {
type_name: "SelectOption", type_name: "SelectOption",
name: "Romance", name: "Romance",
value: "romance", value: "romance",
}, data: "ROMANCE",
{
type_name: "SelectOption",
name: "Sci-fi",
value: "sf",
},
{
type_name: "SelectOption",
name: "Slice of life",
value: "slice_of_life",
},
{
type_name: "SelectOption",
name: "Sports",
value: "sports",
}, },
{ {
type_name: "SelectOption", type_name: "SelectOption",
name: "Superhero", name: "Superhero",
value: "super_hero", value: "super_hero",
data: "SUPER_HERO",
},
{
type_name: "SelectOption",
name: "Sci-Fi",
value: "sf",
data: "SF",
},
{
type_name: "SelectOption",
name: "Thriller",
value: "thriller",
data: "THRILLER",
}, },
{ {
type_name: "SelectOption", type_name: "SelectOption",
name: "Supernatural", name: "Supernatural",
value: "supernatural", value: "supernatural",
data: "SUPERNATURAL",
},
{
type_name: "SelectOption",
name: "Mystery",
value: "mystery",
data: "MYSTERY",
},
{
type_name: "SelectOption",
name: "Sports",
value: "sports",
data: "SPORTS",
},
{
type_name: "SelectOption",
name: "Historical",
value: "historical",
data: "HISTORICAL",
},
{
type_name: "SelectOption",
name: "Heartwarming",
value: "heartwarming",
data: "HEARTWARMING",
},
{
type_name: "SelectOption",
name: "Horror",
value: "horror",
data: "HORROR",
},
{
type_name: "SelectOption",
name: "Graphic Novel",
value: "graphic_novel",
data: "GRAPHIC_NOVEL",
},
{
type_name: "SelectOption",
name: "Informative",
value: "tiptoon",
data: "TIPTOON",
}, },
], ],
}, },