From fa7693d5f9f6594e54953bb08a2184cb0b4647fd Mon Sep 17 00:00:00 2001 From: tdro Date: Wed, 11 Oct 2023 19:37:23 -0400 Subject: static/js/pager: Avoid async conflict between track and restore --- static/js/pager.ts | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'static/js') diff --git a/static/js/pager.ts b/static/js/pager.ts index cb7f8a4..3f9beaf 100644 --- a/static/js/pager.ts +++ b/static/js/pager.ts @@ -12,23 +12,24 @@ const key = "settings"; const url = self.location.href.split("#")[0].split("?")[0]; + if (!localStorage[key]) localStorage[key] = JSON.stringify(settings); + const scrollRestore = function (url) { if (history.scrollRestoration) history.scrollRestoration = "manual"; - if (localStorage[key]) settings = JSON.parse(localStorage[key]); - const fragment = document.getElementById(location.hash.slice(1)); + settings = JSON.parse(localStorage[key]); + const fragment = self.location.hash.slice(1) && + document.getElementById(self.location.hash.slice(1)); const fragmentInURL = self.location.hash.length > 0; if (fragmentInURL && document.body.contains(fragment)) { settings["pager"][url] = self.pageYOffset; localStorage[key] = JSON.stringify(settings); fragment.scrollIntoView(); - self.addEventListener("DOMContentLoaded", function () { + return self.addEventListener("DOMContentLoaded", function () { fragment.scrollIntoView(); }); - return; } if (settings["pager"][url] > 0) { - self.scrollTo(0, settings["pager"][url]); - return; + return self.scrollTo(0, settings["pager"][url]); } settings["pager"][url] = self.pageYOffset; localStorage[key] = JSON.stringify(settings); @@ -36,11 +37,12 @@ const scrollTrack = function (url) { const currentPosition = self.pageYOffset; + settings = JSON.parse(localStorage[key]); settings["pager"][url] = currentPosition; localStorage[key] = JSON.stringify(settings); }; - const backTrack = function (back, up, event) { + const reverseTrack = function (back, up, event) { if (document.body.contains(up) && up.contains(event.target)) { event.preventDefault(); window.scrollTo(0, 0); @@ -57,7 +59,7 @@ self.addEventListener("click", function (event) { const up = document.getElementById("top"); const back = document.getElementById("back"); - backTrack(back, up, event); + reverseTrack(back, up, event); }); }); @@ -66,7 +68,7 @@ }); ["click", "touchstart", "scroll"].forEach(function (event) { - self.addEventListener(event, function (event) { + self.addEventListener(event, function () { scrollTrack(url); }); }); -- cgit v1.2.3