search.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { writable } from 'svelte/store';
  2. import { getCardDb } from './card_db';
  3. let showingCards = writable([]);
  4. let resultCards = [];
  5. let curVer = 0;
  6. let curPage = 0;
  7. function showCards() {
  8. showingCards.set(resultCards.slice(curPage * 10, curPage * 10 + 10));
  9. }
  10. function changeInput(query) {
  11. curVer += 1;
  12. query = query.split(' ');
  13. setTimeout(()=>{doSearch(curVer, query)}, 0);
  14. }
  15. function doSearch(ver, query) {
  16. let cardDb = getCardDb();
  17. let result = [];
  18. for (let key in cardDb) {
  19. if (ver !== curVer) {
  20. return;
  21. }
  22. let hit = true;
  23. for (let word of query) {
  24. let matched = false;
  25. for (let name of cardDb[key].names) {
  26. if (name.toLowerCase().includes(word.toLowerCase())) {
  27. matched = true;
  28. break;
  29. }
  30. }
  31. if (!matched) {
  32. hit = false;
  33. break;
  34. }
  35. }
  36. if (hit) {
  37. result.push({"id": key, "name": cardDb[key].names[0]})
  38. }
  39. }
  40. if (ver !== curVer) return;
  41. result.sort((a, b) => {
  42. return cardDb[a.id].cid - cardDb[b.id].cid;
  43. });
  44. resultCards = result;
  45. curPage = 0;
  46. showCards();
  47. }
  48. function initSearch() {
  49. doSearch(curVer, "");
  50. }
  51. function onPrevPage() {
  52. if (curPage > 0) {
  53. curPage -= 1;
  54. showCards();
  55. }
  56. }
  57. function onNextPage() {
  58. if (curPage < Math.floor((resultCards.length - 1) / 10)) {
  59. curPage += 1;
  60. showCards();
  61. }
  62. }
  63. export {
  64. changeInput,
  65. onPrevPage,
  66. onNextPage,
  67. showingCards,
  68. initSearch,
  69. };