From afdfe7c03b8c7bedff93db961625a85f30ea2311 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli <fabio.alessandrelli@gmail.com> Date: Mon, 31 Jan 2022 15:19:25 +0100 Subject: [PATCH] [HTML5] Improve editor progressive web app behavior. Ensures early claim for aggressive caching. Adds a button to update when it detects a new version asking confirmation due to the necessary reload. --- misc/dist/html/editor.html | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/misc/dist/html/editor.html b/misc/dist/html/editor.html index b5cb28db276..fcd3277aaaa 100644 --- a/misc/dist/html/editor.html +++ b/misc/dist/html/editor.html @@ -265,6 +265,7 @@ <button id="btn-close-editor" class="btn close-btn" disabled="disabled" onclick="closeEditor()">×</button> <button id="btn-tab-game" class="btn tab-btn" disabled="disabled" onclick="showTab('game')">Game</button> <button id="btn-close-game" class="btn close-btn" disabled="disabled" onclick="closeGame()">×</button> + <button id="btn-tab-update" class="btn tab-btn" style="display: none;">Update</button> </div> <div id="tabs"> <div id="tab-loader"> @@ -325,10 +326,39 @@ <div id="status-notice" class="godot" style="display: none;"></div> </div> </div> - <script> + <script>//<![CDATA[ window.addEventListener("load", () => { + function notifyUpdate(sw) { + const btn = document.getElementById("btn-tab-update"); + btn.onclick = function () { + if (!window.confirm("Are you sure you want to update?\nClicking \"OK\" will reload all active instances!")) { + return; + } + sw.postMessage("update"); + btn.innerHTML = "Updating..."; + btn.disabled = true; + }; + btn.style.display = ""; + } if ("serviceWorker" in navigator) { - navigator.serviceWorker.register("service.worker.js"); + navigator.serviceWorker.register("service.worker.js").then(function (reg) { + if (reg.waiting) { + notifyUpdate(reg.waiting); + } + reg.addEventListener("updatefound", function () { + const update = reg.installing; + update.addEventListener("statechange", function () { + if (update.state === "installed") { + // It's a new install, claim and perform aggressive caching. + if (!reg.active) { + update.postMessage("claim"); + } else { + notifyUpdate(update); + } + } + }); + }); + }); } if (localStorage.getItem("welcomeModalDismissed") !== 'true') { @@ -343,7 +373,7 @@ localStorage.setItem("welcomeModalDismissed", 'true'); } } - </script> + //]]></script> <script src="godot.tools.js"></script> <script>//<![CDATA[