From 11bda1d8a46b8cb67e2a30119e86195a89cc8228 Mon Sep 17 00:00:00 2001 From: Adrian Wannenmacher Date: Wed, 11 Mar 2026 02:14:05 +0100 Subject: [PATCH] replace safari persiting popup with dedicated component --- index.js | 34 ----------------------- ui/safari-persist.js | 65 ++++++++++++++++++++++++++++++++++++++++++++ ui/session_list.js | 2 ++ 3 files changed, 67 insertions(+), 34 deletions(-) create mode 100644 ui/safari-persist.js diff --git a/index.js b/index.js index 1024703..ec2bced 100644 --- a/index.js +++ b/index.js @@ -10,40 +10,6 @@ try { console.error("failed to register service worker: ", error); } -try { - navigator.storage.persisted().then((persistent) => { - if (!persistent && navigator.vendor === "Apple Computer, Inc.") { - const question = - "S'schaut so aus als würdest du an Safari-Browser benutzn. S'isch " + - "leida aba so, dass dea manchmoi selbstständig oanfach Datn löscht, " + - "wenn ma a Seitn z'lang nit heanimmt. Des is füa an Watterblock " + - "natürlich eha schlecht.\n" + - "\n" + - "Wennst magst kannt ma aba probian ob ma des Löschn fian Block " + - "ausschaltn kenna. Wennst magst klick oanfach auf \"Ok\"!\n" + - "\n" + - "Wenns gangen is kimsch danach glei zum Block, und falls nit " + - "bekommst dazu no a extra Nachricht."; - - const failure = - "S'isch leida nit gangen, Safari hat na gsagt. Du kansch entweda an " + - "andern Browser heanemmen, oder halt damit Leben wenn Safari deine " + - "Datn löscht.\n" + - "\n" + - "#JustSafariThings"; - - if (window.confirm(question)) { - navigator.storage.persist().then((persistent) => { - if (!persistent) - window.alert(failure); - }); - } - } - }); -} catch (error) { - console.error("failed to try to persist in safary: ", error); -} - m.route.prefix = ""; m.route(document.body, "/", { "/": { diff --git a/ui/safari-persist.js b/ui/safari-persist.js new file mode 100644 index 0000000..bdf9345 --- /dev/null +++ b/ui/safari-persist.js @@ -0,0 +1,65 @@ +"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); + } + } +} diff --git a/ui/session_list.js b/ui/session_list.js index 4720d6f..0f650b7 100644 --- a/ui/session_list.js +++ b/ui/session_list.js @@ -1,5 +1,6 @@ "use strict"; +import SafariPersist from "./safari-persist.js"; import Session from "/models/session.js"; export default class SessionList { @@ -7,6 +8,7 @@ export default class SessionList { view({attrs: { models, onSelect, onDelete } }) { return m("section.wb-session-list", [ m("ol", [ + m(SafariPersist), models.length === 0 ? m("li.item.-text._alternate._apply", "Du hast no koane Sätz…") : null,