diff --git a/server/workspace-zentrale.js b/server/workspace-zentrale.js index 2f4c01bb..883b89c6 100644 --- a/server/workspace-zentrale.js +++ b/server/workspace-zentrale.js @@ -295,6 +295,53 @@ zentraleRouter.get("/workspace/api/zentrale", (req, res) => { const heuteFertig = meineAufgaben.filter( (a) => String(a.erledigt_am || "").slice(0, 10) === heute).length; const dran = offenDran + heuteFertig; + /* ---- UND FUER DIE COMMUNITY ZAEHLT DER RING ETWAS ANDERES ---- + (18.09.2026) + + Er zaehlt AUFGABEN: was heute faellig war und was davon fertig + ist. Ein Mitglied der Community hat keine -- bei ihm stand + deshalb immer „100 % HEUTE NICHTS OFFEN", gross und in der + Mitte der Seite. Dieselbe tote Zahl wie „0 betreut" daneben, nur + auffaelliger. + + Was ein Mitglied an dieser Stelle wissen will, ist etwas + anderes: Laeuft heute noch etwas? Also zaehlt der Ring bei ihm + die TERMINE des Tages und faerbt, was davon schon vorbei ist. + Bei null Terminen sagt er das in Worten, statt eine Null als + Prozentzahl auszugeben. + + Woran erkannt: `freigabeBedingung` gibt nur fuer Leute von + aussen etwas zurueck -- dieselbe Frage wie bei der dritten Zahl + weiter unten, und wieder ohne Rollennamen. */ + if (freigabeBedingung(zeigt, "e")) { + const vorbei = meine.filter( + (t) => Number(String(t.beginn).slice(11, 13)) < stundeJetzt).length; + return res.json({ + art: "tag", + titel: meine.length + ? (vorbei === meine.length ? "Termine heute – alle vorbei" : "Termine heute") + : "Heute steht nichts an", + /* `mitte` statt einer Prozentzahl: „2" sagt hier mehr als + „50 %", und bei null Terminen ist jede Prozentangabe eine + Behauptung ueber nichts. */ + mitte: meine.length ? String(meine.length) : "–", + prozent: meine.length ? Math.round((vorbei / meine.length) * 100) : 0, + segmente, + zahlen: [ + { wert: meine.length, schild: "Termine heute" }, + { wert: meine.filter( + (t) => Number(String(t.beginn).slice(11, 13)) >= stundeJetzt).length, + schild: "kommt noch" }, + { wert: db().prepare( + `SELECT COUNT(*) AS n FROM eintraege e + WHERE e.bereich = 'wunsch' AND e.status = 'offen' AND ${ + freigabeBedingung(zeigt, "e").wo}`) + .get(...freigabeBedingung(zeigt, "e").werte).n, + schild: "Wünsche offen" }, + ], + }); + } + return res.json({ art: "tag", titel: dran ? "Heute geschafft" : "Heute nichts offen", diff --git a/workspace/app.webmanifest b/workspace/app.webmanifest index 6608434d..5fb5eef7 100644 --- a/workspace/app.webmanifest +++ b/workspace/app.webmanifest @@ -22,25 +22,25 @@ }, "icons": [ { - "src": "/assets/img/app-symbole/workspace-192.png?v=202609182204", + "src": "/assets/img/app-symbole/workspace-192.png?v=202609182214", "sizes": "192x192", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/workspace-512.png?v=202609182204", + "src": "/assets/img/app-symbole/workspace-512.png?v=202609182214", "sizes": "512x512", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609182204", + "src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609182214", "sizes": "192x192", "type": "image/png", "purpose": "maskable" }, { - "src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609182204", + "src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609182214", "sizes": "512x512", "type": "image/png", "purpose": "maskable" diff --git a/workspace/assets/js/start.js b/workspace/assets/js/start.js index f921413a..0126db4e 100644 --- a/workspace/assets/js/start.js +++ b/workspace/assets/js/start.js @@ -1033,7 +1033,12 @@ svg.appendChild(svgEl('circle', { cx: px, cy: py, r: '3.4', fill: '#eaf4ff' })); } - $('zring-prozent').textContent = `${anteil} %`; + /* `mitte` schlaegt die Prozentzahl, wenn der Server eine schickt. + Fuer die Community steht dort die Zahl der Termine -- „2" sagt + mehr als „50 %", und bei null Terminen waere jede Prozentangabe + eine Behauptung ueber nichts. Fehlt das Feld, bleibt alles wie + bisher. */ + $('zring-prozent').textContent = daten.mitte ? String(daten.mitte) : `${anteil} %`; $('zring-unter').textContent = daten.titel || ''; } @@ -1297,6 +1302,12 @@ Kachel bleibt nur, wenn sie etwas zu zeigen hat. */ delete kachel.dataset.laedt; kachel.hidden = !etwasLinks && !etwasRechts; + + /* DIE ERKLAERUNG GEHT MIT. Sie beschreibt genau diesen Kasten -- + steht er nicht da, erklaert sie etwas, das es nicht gibt, und + man sucht danach. */ + const fuss = $('fuss-dran'); + if (fuss) fuss.hidden = kachel.hidden; } /** hh:mm aus einem Zeitstempel, ohne Zeitzonen-Rechnerei. diff --git a/workspace/aufgaben.html b/workspace/aufgaben.html index 7564cb8e..e86c2bda 100644 --- a/workspace/aufgaben.html +++ b/workspace/aufgaben.html @@ -12,19 +12,19 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - + + + + + + - +
@@ -291,10 +291,10 @@ - - - - - + + + + +