common.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. $(() => {
  2. function RebuildAccess() {
  3. let storedAccessLinks = JSON.parse(localStorage?.getItem("accessLinks") || "[]") || [];
  4. if (storedAccessLinks && storedAccessLinks.length) {
  5. LoadingTasks.push(() => {
  6. return window.linkLogin(storedAccessLinks);
  7. });
  8. } else {
  9. LoadingTasks.push(() => {
  10. return new Promise(ok => {
  11. $.get("/api/access/list", data => {
  12. window.ReloadAccessList(data);
  13. ok();
  14. });
  15. });
  16. });
  17. }
  18. }
  19. let loadingMediaList = false;
  20. function ReadMediaList() {
  21. if (loadingMediaList)
  22. return;
  23. LoadingTasks.push(() => {
  24. return new Promise(ok => {
  25. let chronology = window.chronology.isInitialized() ? "" : "&chronology"
  26. let oldest = (MediaStorage.Instance.oldest?.date?.getTime() || 0);
  27. let oldestArg = oldest ? `&from=${oldest}` : "";
  28. $.get(`/api/media/list?count=100${chronology}${oldestArg}`, data => {
  29. MediaStorage.Instance.pushAll(data.data.map(i => new Media(i)));
  30. if (data.first || data.last)
  31. window.chronology.rebuildRange(data.first, data.last);
  32. loadingMediaList = false;
  33. if ((data.data?.length || 0) === 0) {
  34. loadingMediaList = true;
  35. document.getElementById("pch-infiniteScrollLoading").classList.add("hidden");
  36. window.ReloadFilters(MediaStorage.Instance);
  37. }
  38. else
  39. setTimeout(ReadMediaList, 25);
  40. ok();
  41. });
  42. });
  43. });
  44. }
  45. function loadHash(md5sum) {
  46. if (md5sum && md5sum.length)
  47. LoadingTasks.push(async () => displayMediaFullPage(await MediaStorage.Instance.getMedia(md5sum)));
  48. else
  49. document.getElementById("pch-fullPageMedia").classList.add("hidden");
  50. }
  51. window.addEventListener("hashchange", x => {
  52. x.preventDefault();
  53. loadHash(document.location?.hash?.substr(1))
  54. return true;
  55. });
  56. onScrollBottom = (function () {
  57. this.lastCall= null;
  58. this.fnc = () => {
  59. if (this.lastCall !== null)
  60. return;
  61. this.lastCall = setTimeout(() => {
  62. this.lastCall = null;
  63. }, 1000);
  64. window.displayMoreMedia();
  65. };
  66. return this;
  67. })();
  68. window.addEventListener("scroll", evt => {
  69. if (window.scrollY+window.innerHeight >= document.body.clientHeight)
  70. onScrollBottom.fnc();
  71. });
  72. RebuildAccess();
  73. loadHash(document.location?.hash?.substr(1));
  74. ReadMediaList();
  75. });