add offline switch to in-app help
This commit is contained in:
+23
-16
@@ -2,9 +2,9 @@ globalThis.Wegwichtel ??= {};
|
||||
(function (ns) {
|
||||
'use strict';
|
||||
|
||||
const toggle = document.getElementById('offline-cache-toggle');
|
||||
const status = document.getElementById('offline-cache-status');
|
||||
const refresh = document.getElementById('offline-cache-refresh');
|
||||
const toggles = ['offline-cache-toggle', 'info-offline-cache-toggle'].map(id => document.getElementById(id)).filter(Boolean);
|
||||
const statuses = ['offline-cache-status', 'info-offline-cache-status'].map(id => document.getElementById(id)).filter(Boolean);
|
||||
const refreshButtons = ['offline-cache-refresh', 'info-offline-cache-refresh'].map(id => document.getElementById(id)).filter(Boolean);
|
||||
const enter = document.getElementById('bootstrap-enter');
|
||||
let controller = null;
|
||||
let task = null;
|
||||
@@ -15,16 +15,20 @@ globalThis.Wegwichtel ??= {};
|
||||
const supported = () => Boolean(globalThis.isSecureContext && navigator.serviceWorker && globalThis.caches);
|
||||
|
||||
function announce(message) {
|
||||
if (status) status.textContent = message;
|
||||
for (const status of statuses) status.textContent = message;
|
||||
}
|
||||
|
||||
function setToggleState(enabled) {
|
||||
for (const toggle of toggles) {
|
||||
toggle.checked = enabled;
|
||||
toggle.setAttribute('aria-checked', String(enabled));
|
||||
}
|
||||
}
|
||||
|
||||
async function updateControls() {
|
||||
const saved = supported() ? await ns.OfflineStore.state() : null;
|
||||
if (toggle) {
|
||||
toggle.checked = Boolean(saved);
|
||||
toggle.setAttribute('aria-checked', String(Boolean(saved)));
|
||||
}
|
||||
if (refresh) {
|
||||
setToggleState(Boolean(saved));
|
||||
for (const refresh of refreshButtons) {
|
||||
refresh.hidden = !saved;
|
||||
refresh.disabled = Boolean(task);
|
||||
}
|
||||
@@ -100,7 +104,7 @@ globalThis.Wegwichtel ??= {};
|
||||
}
|
||||
})();
|
||||
if (enter) enter.disabled = true;
|
||||
if (refresh) refresh.disabled = true;
|
||||
for (const refresh of refreshButtons) refresh.disabled = true;
|
||||
return task;
|
||||
}
|
||||
|
||||
@@ -225,7 +229,7 @@ globalThis.Wegwichtel ??= {};
|
||||
});
|
||||
}
|
||||
if (!supported()) {
|
||||
if (toggle) toggle.disabled = true;
|
||||
for (const toggle of toggles) toggle.disabled = true;
|
||||
announce(ns.I18n.t("offline.error.unsupported"));
|
||||
return;
|
||||
}
|
||||
@@ -240,11 +244,14 @@ globalThis.Wegwichtel ??= {};
|
||||
} else {
|
||||
announce(ns.I18n.t("offline.error.save-app-first"));
|
||||
}
|
||||
toggle?.addEventListener('change', () => {
|
||||
toggle.setAttribute('aria-checked', String(toggle.checked));
|
||||
void (toggle.checked ? download() : disable()).catch(() => {});
|
||||
});
|
||||
refresh?.addEventListener('click', () => { void download().catch(() => {}); });
|
||||
for (const toggle of toggles) {
|
||||
toggle.addEventListener('change', () => {
|
||||
void (toggle.checked ? download() : disable()).catch(() => {});
|
||||
});
|
||||
}
|
||||
for (const refresh of refreshButtons) {
|
||||
refresh.addEventListener('click', () => { void download().catch(() => {}); });
|
||||
}
|
||||
}
|
||||
|
||||
ns.OfflineCache = Object.freeze({
|
||||
|
||||
Reference in New Issue
Block a user