aboutsummaryrefslogtreecommitdiff
path: root/src/control/search.js
blob: 8f3fa87dba695db329d9bc172ffdddd54fdc5988 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import { writable } from 'svelte/store';
import { cardDb } from '../data/cardDb';

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 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 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,
};