From c635c35d21e4458e55c8195cebf6d7c1c2d7c253 Mon Sep 17 00:00:00 2001 From: tdro Date: Fri, 1 Dec 2023 19:28:38 -0500 Subject: static/js/pager: Run on cache persistence Run a limited seek interval --- assets/js/index.js | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) (limited to 'assets/js') diff --git a/assets/js/index.js b/assets/js/index.js index a766e4a..b0f2f84 100644 --- a/assets/js/index.js +++ b/assets/js/index.js @@ -5,6 +5,7 @@ document.cookie.indexOf("disabled"); return console.log("Pager is disabled due to cookie restrictions."); } + let seek; let settings = { pager: {} }; @@ -14,8 +15,9 @@ const scrollRestore = function(url) { if (history.scrollRestoration) history.scrollRestoration = "manual"; 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; + 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); @@ -25,7 +27,16 @@ }); } if (settings["pager"][url] > 0) { - return self.scrollTo(0, settings["pager"][url]); + self.scrollTo(0, settings["pager"][url]); + let i1 = 0; + return seek = setInterval(function(position) { + i1++; + if (i1 > 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); @@ -48,15 +59,23 @@ } }; self.addEventListener("DOMContentLoaded", function() { - scrollRestore(url); self.addEventListener("click", function(event) { const up = document.getElementById("top"); const back = document.getElementById("back"); reverseTrack(back, up, event); }); }); - self.addEventListener("hashchange", function() { - scrollRestore(url); + [ + "DOMContentLoaded", + "pageshow", + "hashchange" + ].forEach(function(event) { + self.addEventListener(event, function(event) { + if (event.type === "pageshow") { + return event.persisted && self.scrollTo(0, settings["pager"][url]); + } + scrollRestore(url); + }); }); [ "click", -- cgit v1.2.3