From c7cd2fa46153368ac4700fd155b6d0c67994785e Mon Sep 17 00:00:00 2001 From: Eduard Wisch Date: Mon, 19 Oct 2026 21:49:01 +0200 Subject: [PATCH] =?UTF-8?q?Knopf=20=E2=80=9EGeteiltes=20ablegen"=20blieb?= =?UTF-8?q?=20dauerhaft=20stehen:=20leere=20Pakete=20wegr=C3=A4umen,=20Ver?= =?UTF-8?q?werfen=20[deploy]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ein leeres Teilen-Paket in IndexedDB hielt den Knopf für immer stehen (share.html meldete „Es kam nichts an" und ließ den Rest liegen). Die App räumt leere Pakete jetzt selbst weg, share.html ebenso; der Knopf nennt „(Notiz)" bei reinem Text; share.html bietet „Verwerfen" mit Rückfrage in der Seite. Co-Authored-By: Claude Opus 5.5 --- ROADMAP.md | 19 ++++++++++++++++++- app.js | 20 ++++++++++++++------ share.html | 18 +++++++++++++++++- 3 files changed, 49 insertions(+), 8 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 1096861..69675c3 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,6 +1,6 @@ # ROADMAP — Baustelle PWA -Stand: 2026-10-15 · Gegenstück: `data/bericht` (Modul-Version 1.7.1) +Stand: 2026-10-19 · Gegenstück: `data/bericht` (Modul-Version 1.7.1) Die PWA hat kein eigenes Backend — alles läuft über `custom/bericht/api/`. Punkte, die eine API-Änderung brauchen, sind mit **[API]** markiert und stehen zusätzlich in der ROADMAP des @@ -31,6 +31,23 @@ Bericht-Moduls. --- +## 8. Knopf „Geteiltes ablegen" bleibt dauerhaft stehen (gemeldet 2026-10-19) + +Eddy: *„bei der App Baustelle ist permanent ein Button relativ weit unten angezeigt über den aufgelisteten +Aufträgen: Geteiltes ablegen"*. +- Ursache: `checkPendingShare()` zeigte den Knopf, sobald IRGENDEIN `shared_payload` in IndexedDB lag — auch ein + leeres (Teilen abgebrochen, nichts mitgekommen). `share.html` meldete dann „Es kam nichts an" und ließ den Rest + liegen → Knopf für immer. Wer etwas Geteiltes nicht ablegen wollte, kam ebenfalls nicht davon los. +- [x] ✅ 19.10.2026: Leere Pakete räumt die App selbst weg (kein Knopf); „Es kam nichts an" löscht den Rest; + Knopf zeigt „(Notiz)", wenn nur Text geteilt wurde; `share.html` hat „Verwerfen" mit Rückfrage in der Seite. + Auf der Testinstanz durchgespielt (leer → kein Knopf; Notiz → Knopf → Verwerfen → weg). +- [ ] Am Handy gegenprüfen: Knopf ist nach dem Update weg (beim ersten Laden räumt die App den leeren Rest ab). + +### Befunde aus der AVIF-Prüfung in Bericht (19.10.2026, nicht geändert) +- [ ] Ist eine Maximalgröße für Fotos gesetzt (`photo_maxside` > 0), behält das im Browser verkleinerte JPEG in + `app.js` `uploadPhoto` seinen Originalnamen — ein `.avif`/`.webp` wird dann vom Server abgelehnt. +- [ ] Beim Verkleinern im Browser (Canvas → JPEG) wird Transparenz schwarz. + ## 7. Galerie-Auswahl: „permission"-Fehler ab dem 3. Foto (gemeldet 2026-09-30) Befund (Prod-Zugriffslog 30.09., Auftrag 114 / SO2609-0088, JHB Bio): erster Anlauf 19:40:21 — diff --git a/app.js b/app.js index 3738078..3a502a3 100644 --- a/app.js +++ b/app.js @@ -1843,21 +1843,29 @@ router.on('/settings', async () => { * bleiben in IndexedDB liegen; ohne diesen Hinweis wuerde sie niemand je wiederfinden. */ async function checkPendingShare() { if (document.getElementById('shared-banner')) return; - let n = 0, vorhanden = false; + let n = 0, notiz = false; try { const p = await idb.get('shared_payload'); - if (p) { vorhanden = true; n = (p.files || []).length; } - else { + if (p) { + n = (p.files || []).length; + notiz = !!((p.title || '').trim() || (p.text || '').trim() || (p.url || '').trim()); + } else { const alt = await idb.get('shared_files'); // altes Format - if (alt && alt.length) { vorhanden = true; n = alt.length; } + if (alt && alt.length) n = alt.length; + } + // Ein Paket OHNE Inhalt (Teilen abgebrochen, nichts mitgekommen) hielt den Knopf für immer + // stehen: share.html meldete „Es kam nichts an" und ließ den Rest liegen (Eddy 19.10.2026). + if (!n && !notiz) { + await idb.del('shared_payload').catch(() => {}); + await idb.del('shared_files').catch(() => {}); + return; } } catch (_) { return; } - if (!vorhanden) return; const b = document.createElement('button'); b.id = 'shared-banner'; b.className = 'shared-banner'; - b.textContent = '📤 Geteiltes ablegen' + (n ? ' (' + n + ' Bild' + (n > 1 ? 'er' : '') + ')' : ''); + b.textContent = '📤 Geteiltes ablegen' + (n ? ' (' + n + ' Bild' + (n > 1 ? 'er' : '') + ')' : ' (Notiz)'); b.addEventListener('click', () => { location.href = 'share.html'; }); document.body.appendChild(b); } diff --git a/share.html b/share.html index 4663d08..ee3c268 100644 --- a/share.html +++ b/share.html @@ -284,8 +284,9 @@ async function renderPicker() {
Lade Aufträge…
-