aboutsummaryrefslogtreecommitdiff
path: root/assets
diff options
context:
space:
mode:
authortdro <tdro@noreply.example.com>2024-03-17 18:59:31 -0400
committertdro <tdro@noreply.example.com>2024-03-17 18:59:31 -0400
commit8f3c9d30798b71e90a1d34e49e333560b836652f (patch)
tree13849a206c8a8ee1111670699a2b8d7e75ddc653 /assets
parent2449925e0df0ab9c884295e7b55b8828c39c4204 (diff)
downloadcanory-8f3c9d30798b71e90a1d34e49e333560b836652f.tar.gz
canory-8f3c9d30798b71e90a1d34e49e333560b836652f.tar.bz2
canory-8f3c9d30798b71e90a1d34e49e333560b836652f.zip
static/js/update: Handle more drift
Make a bit smarter
Diffstat (limited to 'assets')
-rw-r--r--assets/js/index.js38
1 files changed, 28 insertions, 10 deletions
diff --git a/assets/js/index.js b/assets/js/index.js
index 4268a24..3a0bdf6 100644
--- a/assets/js/index.js
+++ b/assets/js/index.js
@@ -109,21 +109,20 @@
}
function update() {
const url = self.location.href.split("#")[0].split("?")[0];
+ const indicator = document.querySelector("a[data-update]");
+ if (indicator.dataset.update === "refresh" || indicator === null) return;
+ indicator.cloneNode();
fetch(url, "HEAD", function(request) {
- const local = document.querySelector('meta[name="last-modified"]').content;
- const remote = request.getResponseHeader("last-modified") || '';
- const modified = Date.parse(document.lastModified) !== Date.parse(remote);
- const drift = Date.parse(remote || local) - Date.parse(local);
- let indicator = document.querySelector("a[data-update]");
- if (indicator === null) return;
- indicator.cloneNode();
- if (drift === 0) return;
+ const local = document.querySelector('meta[name="last-modified"]').content || document.lastModified;
+ const remote = request.getResponseHeader("last-modified") || document.lastModified;
+ const modified = Date.parse(remote) > Date.parse(local);
+ const drift = Date.parse(remote) - Date.parse(local);
+ if (drift < 3000) return;
if (remote && modified) {
fetch(url, "GET");
indicator.href = url;
indicator.removeAttribute("id");
indicator.dataset.update = "refresh";
- self.removeEventListener("blur", update);
console.log("INFO: R: " + remote);
console.log("INFO: L: " + local);
console.log("INFO: D: " + drift);
@@ -131,7 +130,26 @@
}
});
}
- self.addEventListener("blur", update);
+ let scrolled;
+ let delay = 1000;
+ let delayed = 0;
+ self.addEventListener("scroll", function() {
+ if (scrolled) clearTimeout(scrolled);
+ scrolled = setTimeout(function() {
+ update();
+ delay = delay + delayed;
+ delayed = delay - delayed;
+ }, delay);
+ });
+ [
+ "focus",
+ "load",
+ "URLChangedCustomEvent"
+ ].forEach(function(event) {
+ self.addEventListener(event, function() {
+ update();
+ });
+ });
})();
(function() {
const options = "targetWindow,width=700,height=500,toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes";