1
0

allow persisting in every browser

This commit is contained in:
Adrian Wannenmacher 2026-03-11 18:25:42 +01:00
parent 11bda1d8a4
commit 5064e3856f
Signed by: tfld
GPG Key ID: 19D986ECB1E492D5
3 changed files with 73 additions and 67 deletions

71
ui/persist.js Normal file
View File

@ -0,0 +1,71 @@
"use strict";
const URL_STORAGE_QUOTA = "https://developer.mozilla.org/de/docs/Web/API/Storage_API/Storage_quotas_and_eviction_criteria";
export default class Persist {
#safari = navigator.vendor === "Apple Computer, Inc.";
/** @type {?boolean} */
#persisted = null;
async oninit() {
this.#persisted = await navigator.storage.persisted();
}
view() {
if (this.#persisted !== false)
return null;
return m("li.item.-text._alternate._apply", [
this.#safari
? m.fragment([
m("p", m("strong", "Obacht, Safari-Nutza!")),
m("p", [
"Da Safari löscht manchmal von sich aus deine Spiel-Datn, wennst",
"füa sein Gschmack z'lang nimma de Seitn aufgmacht hast. ",
m("a", { href: URL_STORAGE_QUOTA }, "Mea Infos…"),
]),
m("p", [
"Is natürlich eha bled, aba als Webseitn-Entwickla kann ma da ",
"leida praktisch gar nix machn. Es gibt zwar a Option um des ",
"Löschn aus z'schaltn, aba bei dea kann da Safari oanfach „na“ ",
"sagn, wenn ea will.",
]),
m("p", [
"Dea Knopf direkt unta dem Text machat genau des. Kannst probian ",
"wennst willst. Falls es geht verschwindet de Meldung. Falls nit ",
"gregst an Fehla anzoagt. Dann bleibt da leida nur mehr n Browser ",
"z'wechsln oda mit eventuellem Datnverlust z'lebn.",
]),
])
: m("p", [
"Ganz seltn, wenn dei Festplattn fast voi is, dann kann's sein, ",
"dass dei Browser die Spiel-Datn löscht. Wennst des vahindand ",
"willst, druck den Knopf direkt unta dem Text. ",
m("a", { href: URL_STORAGE_QUOTA }, "Mea Infos…"),
]),
m("p", m(
"button.wb-button._positioned",
{ onclick: () => this.#onpersist() },
"Datn persistieren",
)),
]);
}
#onpersist() {
try {
navigator.storage.persist().then(p => {
this.#persisted = p;
m.redraw();
if (!p)
window.alert(
this.#safari
? "Safari hat leida na gsagt."
: "Dei Browser hat leida na gsagt."
);
});
} catch (error) {
console.error("failed to attempt to persist: ", error);
}
}
}

View File

@ -1,65 +0,0 @@
"use strict";
export default class SafariPersist {
#safari = navigator.vendor === "Apple Computer, Inc.";
/** @type {?boolean} */
#persisted = null;
oninit() {
if (this.#safari) {
try {
navigator.storage.persisted()
.then(p => {
this.#persisted = p;
m.redraw();
});
} catch (error) {
console.error("failed to determine persistence state: ", error);
}
}
}
view() {
if (!this.#safari || this.#persisted !== false)
return null;
return m("li.item.-text._alternate._apply", [
m("p", m("strong", "Obacht, Safari-Nutza!")),
m("p", [
"S'isch leida so, dass da Safari manchmoi oanfach von sich aus ",
"entscheidet Datn z'löschn, de in iam gspeichat sen. Des berifft ",
"a die Datn vom Watterblock.",
]),
m("p", [
"Is natürlich eha bled, aba als Webseitn-Entwickla kann ma da leida ",
"praktisch gar nix machn. Es gibt zwar a Option um des Löschn aus ",
"z'schaltn, aba bei dea kann Safari oanfach „na“ sagn, wenn es will.",
]),
m("p", [
"Dea Knopf direkt unta dem Text machat genau des. Kannst probian ",
"wennst willst. Falls es geht verschwindet de Meldung. Falls nit ",
"gregst an Fehla anzoagt. Dann bleibt da leida nur mehr Browser ",
"wechsln oda mit eventuellem Datnverlust z'lebn.",
]),
m("p", m(
"button.wb-button._positioned",
{ onclick: () => this.#onpersist() },
"Datn persistieren",
)),
]);
}
#onpersist() {
try {
navigator.storage.persist().then(p => {
this.#persisted = p;
m.redraw();
if (!p)
window.alert("Safari hat leida na gsagt.");
});
} catch (error) {
console.error("failed to attempt to persist: ", error);
}
}
}

View File

@ -1,6 +1,6 @@
"use strict";
import SafariPersist from "./safari-persist.js";
import Persist from "./persist.js";
import Session from "/models/session.js";
export default class SessionList {
@ -8,7 +8,7 @@ export default class SessionList {
view({attrs: { models, onSelect, onDelete } }) {
return m("section.wb-session-list", [
m("ol", [
m(SafariPersist),
m(Persist),
models.length === 0
? m("li.item.-text._alternate._apply", "Du hast no koane Sätz…")
: null,