left_panel.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { writable } from 'svelte/store';
  2. let leftPanelCardId = writable('');
  3. let leftPanelCardDesc = writable('');
  4. let isMobileInfoVisible = writable(false);
  5. let curVersion = 0;
  6. let descCache = new Map();
  7. function showMobileInfo() {
  8. isMobileInfoVisible.set(true);
  9. }
  10. function closeMobileInfo() {
  11. isMobileInfoVisible.set(false);
  12. }
  13. function setLeftPanelCard(id) {
  14. leftPanelCardId.set(id);
  15. curVersion += 1;
  16. leftPanelCardDesc.set('加载中...');
  17. let ver = curVersion;
  18. setDesc(ver, id);
  19. }
  20. function setDesc(version, id) {
  21. if (descCache.has(id)) {
  22. leftPanelCardDesc.set(descCache.get(id));
  23. return;
  24. }
  25. let descUrl = 'https://raye.mistivia.com/cardtext/' + id + '.txt';
  26. fetch(descUrl)
  27. .then((response) => {
  28. if (!response.ok) {
  29. throw new Error(`HTTP error! status: ${response.status}`);
  30. }
  31. return response.text();
  32. })
  33. .then((desc) => {
  34. descCache.set(id, desc);
  35. if (version === curVersion) {
  36. leftPanelCardDesc.set(desc);
  37. }
  38. })
  39. .catch((error) => {
  40. console.error('Error fetching the file:', error);
  41. });
  42. }
  43. export {
  44. leftPanelCardId,
  45. leftPanelCardDesc,
  46. setLeftPanelCard,
  47. showMobileInfo,
  48. closeMobileInfo,
  49. isMobileInfoVisible,
  50. };