aboutsummaryrefslogtreecommitdiff
path: root/static/js/refresh.ts
diff options
context:
space:
mode:
Diffstat (limited to 'static/js/refresh.ts')
-rw-r--r--static/js/refresh.ts46
1 files changed, 46 insertions, 0 deletions
diff --git a/static/js/refresh.ts b/static/js/refresh.ts
new file mode 100644
index 0000000..5d44854
--- /dev/null
+++ b/static/js/refresh.ts
@@ -0,0 +1,46 @@
+(function () {
+ function check(url, method, callback) {
+ const http = new XMLHttpRequest();
+ http.onreadystatechange = function () {
+ if (http.readyState === 4 && http.status === 200) {
+ if (callback) callback(http);
+ }
+ };
+ http.open(method, url);
+ http.setRequestHeader("Pragma", "no-cache");
+ http.setRequestHeader("Cache-Control", "no-cache");
+ http.send();
+ }
+
+ function update(id) {
+ const url = self.location.href;
+ check(url, "HEAD", function (request) {
+ const local = document.querySelector('meta[name="last-modified"]').content;
+ const remote = request.getResponseHeader("last-modified") || local;
+ const localHour = local.substring(0, local.length - 9);
+ const remoteHour = remote.substring(0, remote.length - 9);
+ const modified = localHour !== remoteHour;
+
+ if (modified) {
+ const indicator = document.querySelector("a[data-update]");
+ check(url, "GET");
+ indicator.href = url;
+ indicator.removeAttribute("id");
+ indicator.dataset.update = "refresh";
+ clearInterval(id);
+ }
+ console.log("R: " + remote);
+ console.log("L: " + local);
+ console.log("M: " + modified);
+ });
+ }
+
+ self.addEventListener("load", function () {
+ let meta = document.querySelector('meta[name="refresh"]');
+ if (meta) meta = document.querySelector('meta[name="refresh"]').content;
+ const interval = meta || 3600000;
+ const monitor = setInterval(function () {
+ if (navigator.onLine) update(monitor);
+ }, interval);
+ });
+})();