diff --git a/src/components/multiSelect.svelte b/src/components/multiSelect.svelte new file mode 100644 index 0000000..2fa9601 --- /dev/null +++ b/src/components/multiSelect.svelte @@ -0,0 +1,62 @@ + + + + + \ No newline at end of file diff --git a/src/pages/[manga]/index.svelte b/src/pages/[manga]/index.svelte index 24840bd..13120f2 100644 --- a/src/pages/[manga]/index.svelte +++ b/src/pages/[manga]/index.svelte @@ -29,7 +29,7 @@ var progress = 0; var state = "idle"; - const defaultText = "Choose a chapter to view online or download EPUB"; + const defaultText = "Choose a chapter to view online or download"; var text = defaultText; var pagesDone = 0; var totalPages = 0; diff --git a/src/pages/index.svelte b/src/pages/index.svelte index ff3ef5f..1565cb2 100644 --- a/src/pages/index.svelte +++ b/src/pages/index.svelte @@ -3,6 +3,7 @@ import request from "../util/request"; import ratelimit from "../util/ratelimit"; import { goto, url } from '@roxi/routify/runtime/helpers'; +import MultiSelect from '../components/multiSelect.svelte'; var name = $params.search; $: { @@ -15,10 +16,21 @@ * @param {string} title * @returns {Promise} */ - async function search(title, offset=0) { - var query = ""; - if(title) query += "title=" + encodeURIComponent(name) + "&"; - query += "contentRating[]=safe&contentRating[]=suggestive&limit=100&offset=" + offset; + async function search(title, filters, offset=0) { + var query = new URLSearchParams(); + if(title) query.set("title", title); + query.set("limit", 100); + query.set("offset", offset); + for(const rating of filters.contentRating) { + query.append("contentRating[]", rating); + } + for(const demographic of filters.demographic) { + query.append("demographic[]", demographic); + } + for(const status of filters.status) { + query.append("status[]", status); + } + query.set("order[" + filters.sort + "]", filters.sortValue); const res = await request("manga", query); for(const manga of res.results) { for(const relation of manga.relationships) { @@ -30,7 +42,7 @@ return res; } - $: result = ratelimit(search, name); + $: result = ratelimit(search, name, filters); var scrollSearch = null; /** @@ -40,7 +52,7 @@ if(scrollSearch !== null) return; if(document.body.scrollHeight - window.scrollY - window.innerHeight < 300 && (await result).results.length < (await result).total) { scrollSearch = name; - const res = await search(name, (await result).results.length); + const res = await search(name, filters, (await result).results.length); if(scrollSearch === name && res.results.length) { (await result).results.push(...res.results); result = result; // trigger reload @@ -57,6 +69,35 @@ const res = await request("manga/random"); $goto("./" + res.data.id); } + + const filters = { + contentRating: ["safe", "suggestive"], + demographic: [], + status: [], + sort: "updatedAt", + sortValue: "desc" + }; + + const options = { + contentRating: { + safe: "Safe", + suggestive: "Suggestive", + erotica: "Erotica", + pornographic: "Pornographic" + }, + demographic: { + shounen: "Shounen", + shoujo: "Shoujo", + josei: "Josei", + none: "None" + }, + status: { + ongoing: "Ongoing", + completed: "Completed", + hiatus: "Hiatus - Paused", + cancelled: "Cancelled" + } + } @@ -71,6 +112,33 @@

MANGADEX

+
+
+ + +
+
+ + +
+
+ + +
+

Sorts currently don't work (mangadex shows the same results).

+
+ + + +
+
+ {#await result} Loading... {:then result} @@ -115,6 +183,30 @@