aboutsummaryrefslogtreecommitdiff
path: root/static/js/update.ts
diff options
context:
space:
mode:
Diffstat (limited to 'static/js/update.ts')
-rw-r--r--static/js/update.ts40
1 files changed, 40 insertions, 0 deletions
diff --git a/static/js/update.ts b/static/js/update.ts
new file mode 100644
index 0000000..2b96751
--- /dev/null
+++ b/static/js/update.ts
@@ -0,0 +1,40 @@
+(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();
+ return http;
+ }
+
+ function update() {
+ const url = self.location.href.split("#")[0].split("?")[0];
+ check(url, "HEAD", function (request) {
+ const local = document.querySelector('meta[name="last-modified"]').content;
+ const remote = request.getResponseHeader("last-modified") || local;
+ const modified = Date.parse(document.lastModified) !== Date.parse(remote);
+ const drift = Date.parse(remote) - Date.parse(local);
+
+ if (modified) {
+ const indicator = document.querySelector("a[data-update]");
+ check(url, "GET");
+ indicator.href = url;
+ indicator.removeAttribute("id");
+ indicator.dataset.update = "refresh";
+ self.removeEventListener("blur", update);
+ console.log("R: " + remote);
+ console.log("L: " + local);
+ console.log("D: " + drift);
+ console.log("M: " + modified);
+ }
+ });
+ }
+
+ self.addEventListener("blur", update);
+})();