aboutsummaryrefslogtreecommitdiff
path: root/static/js/pager.ts
diff options
context:
space:
mode:
Diffstat (limited to 'static/js/pager.ts')
-rw-r--r--static/js/pager.ts49
1 files changed, 27 insertions, 22 deletions
diff --git a/static/js/pager.ts b/static/js/pager.ts
index 99f88c7..0c512ce 100644
--- a/static/js/pager.ts
+++ b/static/js/pager.ts
@@ -7,49 +7,54 @@
return console.warn("WARNING: Pager disabled due to cookie restrictions");
}
+ let url;
let seek;
- let settings = { pager: {} };
+ let pager = {};
- const key = "settings";
- const url = self.location.href.split("#")[0].split("?")[0];
+ const key = "config.scroll.pager.urls";
- if (!localStorage[key]) localStorage[key] = JSON.stringify(settings);
+ if (!localStorage[key]) localStorage[key] = JSON.stringify(pager);
+
+ const link = function () {
+ url = self.location.href.split("#")[0].split("?")[0];
+ };
const scrollRestore = function (url) {
if (history.scrollRestoration) history.scrollRestoration = "manual";
- settings = JSON.parse(localStorage[key]);
+ pager = JSON.parse(localStorage[key]);
const hash = self.location.hash;
const fragment = hash.slice(1) && document.getElementById(hash.slice(1));
const fragmentInURL = hash.length > 0;
if (fragmentInURL && document.body.contains(fragment)) {
- settings["pager"][url] = self.pageYOffset;
- localStorage[key] = JSON.stringify(settings);
+ pager[url] = self.pageYOffset;
+ localStorage[key] = JSON.stringify(pager);
fragment.scrollIntoView();
return self.addEventListener("DOMContentLoaded", function () {
fragment.scrollIntoView();
});
}
- if (settings["pager"][url] > 0) {
- self.scrollTo(0, settings["pager"][url]);
+ if (pager[url] > 0) {
+ clearInterval(seek)
+ self.scrollTo(0, pager[url]);
let i = 0; return seek = setInterval(function (position) {
i++; if (i > 100) clearInterval(seek);
if (document.documentElement.scrollHeight >= position + document.documentElement.clientHeight) {
clearInterval(seek); self.scrollTo(0, position);
}
- }, 4, settings["pager"][url]);
- }
- settings["pager"][url] = self.pageYOffset;
- localStorage[key] = JSON.stringify(settings);
+ }, 4, pager[url]);
+ } else self.scrollTo(0, 0);
+ pager[url] = self.pageYOffset;
+ localStorage[key] = JSON.stringify(pager);
};
const scrollTrack = function (url) {
const currentPosition = self.pageYOffset;
- settings = JSON.parse(localStorage[key]);
- settings["pager"][url] = currentPosition;
- localStorage[key] = JSON.stringify(settings);
+ pager = JSON.parse(localStorage[key]);
+ pager[url] = currentPosition;
+ localStorage[key] = JSON.stringify(pager);
};
- const reverseTrack = function (back, up, event) {
+ const scrollReverse = function (back, up, event) {
if (document.body.contains(up) && up.contains(event.target)) {
event.preventDefault();
window.scrollTo(0, 0);
@@ -65,22 +70,22 @@
self.addEventListener("click", function (event) {
const up = document.getElementById("top");
const back = document.getElementById("back");
- reverseTrack(back, up, event);
+ scrollReverse(back, up, event);
});
});
- ["DOMContentLoaded", "pageshow", "hashchange"].forEach(function (event) {
+ ["DOMContentLoaded", "pageshow", "hashchange", "URLChangedCustomEvent"].forEach(function (event) {
self.addEventListener(event, function (event) {
if (event.type === "pageshow") {
- return event.persisted && self.scrollTo(0, settings["pager"][url]);
+ return event.persisted && self.scrollTo(0, pager[url]);
}
- scrollRestore(url);
+ link(); scrollRestore(url);
});
});
["click", "touchstart", "scroll"].forEach(function (event) {
self.addEventListener(event, function () {
- scrollTrack(url);
+ link(); scrollTrack(url);
});
});
})();