aboutsummaryrefslogtreecommitdiff
path: root/src/search.js
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-02-20 13:26:43 +0800
committerMistivia <i@mistivia.com>2025-02-20 13:26:43 +0800
commit2ebdfe109bbff27b35a5e9ae208dabddd266191e (patch)
treeed63233177008c7bef134606fbf0254754e91fb2 /src/search.js
parenta7488d695b3f647d657f6b3482d5333e1e869771 (diff)
change project layout
Diffstat (limited to 'src/search.js')
-rw-r--r--src/search.js79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/search.js b/src/search.js
new file mode 100644
index 0000000..f1f7dbd
--- /dev/null
+++ b/src/search.js
@@ -0,0 +1,79 @@
+import { writable } from 'svelte/store';
+import { getCardDb } from './card_db';
+
+let showingCards = writable([]);
+let resultCards = [];
+
+let curVer = 0;
+let curPage = 0;
+
+function showCards() {
+ showingCards.set(resultCards.slice(curPage * 10, curPage * 10 + 10));
+}
+
+function changeInput(query) {
+ curVer += 1;
+ query = query.split(' ');
+ setTimeout(()=>{doSearch(curVer, query)}, 0);
+}
+
+function doSearch(ver, query) {
+ let cardDb = getCardDb();
+ let result = [];
+ for (let key in cardDb) {
+ if (ver !== curVer) {
+ return;
+ }
+ let hit = true;
+ for (let word of query) {
+ let matched = false;
+ for (let name of cardDb[key].names) {
+ if (name.toLowerCase().includes(word.toLowerCase())) {
+ matched = true;
+ break;
+ }
+ }
+ if (!matched) {
+ hit = false;
+ break;
+ }
+ }
+ if (hit) {
+ result.push({"id": key, "name": cardDb[key].names[0]})
+ }
+ }
+ if (ver !== curVer) return;
+ result.sort((a, b) => {
+ return cardDb[a.id].cid - cardDb[b.id].cid;
+ });
+ resultCards = result;
+ curPage = 0;
+ showCards();
+}
+
+function initSearch() {
+ doSearch(curVer, "");
+}
+
+function onPrevPage() {
+ if (curPage > 0) {
+ curPage -= 1;
+ showCards();
+ }
+}
+
+function onNextPage() {
+ if (curPage < Math.floor((resultCards.length - 1) / 10)) {
+ curPage += 1;
+ showCards();
+ }
+}
+
+
+export {
+ changeInput,
+ onPrevPage,
+ onNextPage,
+ showingCards,
+ initSearch,
+};