Personenliste: standardmaessig nur DogFather, Rest auf Knopfdruck

Wunsch Filipe: "ich will da nur mich und vanvan sehen, ich will dass ich
einen knopf habe wenn ich die anderen sehen will oder nicht."

Drei Dinge, die dabei nicht schiefgehen duerfen:

1. Das ist eine ANSICHT, kein Recht. Wer eingeklappt ist, ist nicht weg
   -- er wird nur nicht gezeigt. Verwechselt man das, haelt man
   irgendwann jemanden fuer geloescht, der noch vollen Zugang hat. Der
   Test weist das ausdruecklich nach: Tili kann sich anmelden und normal
   arbeiten, waehrend sie ausgeblendet ist, und der Server liefert
   weiterhin ALLE sieben Personen. Gekuerzt wird nur die Anzeige --
   waere es serverseitig, wuerde die naechste Auswertung stillschweigend
   Personen uebersehen.

2. Auf dem Knopf steht IMMER, wie viele gerade fehlen ("5 weitere
   zeigen · 1 gesperrt"). "Alle zeigen" allein sagt nicht, wovon man
   gerade nichts sieht -- und dass eine Person gesperrt ist, gehoert zu
   den Dingen, die man nicht uebersehen darf.

3. Der Zustand bleibt erhalten. Ein Knopf, den man nach jedem Laden neu
   druecken muss, ist keine Einstellung, sondern eine Zumutung.

Gesperrte Personen werden beim Aufklappen ganz normal mitgezeigt -- eine
gesperrte Person zu verstecken waere genau die Zeile, die man sehen
muesste.

24 Pruefungen, Computer und Handy.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-08-31 22:59:54 +02:00
co-authored by Claude Opus 5
parent e25a22149b
commit 099d9a7693
20 changed files with 360 additions and 107 deletions
+57 -1
View File
@@ -216,6 +216,61 @@
return b;
}
/* ---------- Wer steht in der Liste ---------------------------------------
Wunsch Filipe, 31.08.2026: "ich will da nur mich und vanvan sehen,
ich will dass ich einen knopf habe wenn ich die anderen sehen will
oder nicht."
Also: DogFather immer, alle anderen auf Knopfdruck. Drei Dinge sind
dabei wichtig:
1. Das ist eine ANSICHT, kein Recht. Wer eingeklappt ist, ist nicht
weg -- er wird nur nicht gezeigt. Verwechselt man das, hält man
irgendwann jemanden für gelöscht, der noch vollen Zugang hat.
Deshalb steht auf dem Knopf IMMER, wie viele gerade fehlen.
2. Der Zustand bleibt erhalten. Ein Knopf, den man nach jedem Laden
neu drücken muss, ist keine Einstellung, sondern eine Zumutung.
3. Gesperrte Personen tauchen trotzdem auf, sobald aufgeklappt ist --
eine gesperrte Person zu verstecken wäre genau die Zeile, die man
sehen müsste.
-------------------------------------------------------------------------- */
const SPEICHER = 'dfw_personen_alle';
let alle = [];
let alleZeigen = false;
try { alleZeigen = localStorage.getItem(SPEICHER) === 'ja'; } catch { /* egal */ }
function listeZeigen() {
const ziel = $('liste');
ziel.textContent = '';
const oben = alle.filter((p) => p.rolle === 'admin');
const rest = alle.filter((p) => p.rolle !== 'admin');
for (const p of (alleZeigen ? alle : oben)) ziel.append(zeile(p));
const schalter = $('rest-schalter');
schalter.hidden = rest.length === 0;
if (!rest.length) return;
/* Die Zahl gehört auf den Knopf, nicht nur der Zustand. "Alle
zeigen" sagt nicht, wie viele man gerade nicht sieht. */
const gesperrt = rest.filter((p) => !p.aktiv).length;
$('rest-schalter-text').textContent = alleZeigen
? 'Nur DogFather zeigen'
: `${rest.length} weitere zeigen`
+ (gesperrt ? ` · ${gesperrt} gesperrt` : '');
schalter.setAttribute('aria-expanded', alleZeigen ? 'true' : 'false');
}
$('rest-schalter').addEventListener('click', () => {
alleZeigen = !alleZeigen;
try { localStorage.setItem(SPEICHER, alleZeigen ? 'ja' : 'nein'); } catch { /* egal */ }
listeZeigen();
});
async function laden() {
const ziel = $('liste');
try {
@@ -223,9 +278,10 @@
if (!a.ok) { melde('Personen konnten nicht geladen werden.'); return; }
const { personen, betreuer } = await a.json();
betreuerListe = betreuer || [];
alle = personen;
ziel.textContent = '';
ziel.setAttribute('aria-busy', 'false');
for (const p of personen) ziel.append(zeile(p));
listeZeigen();
await protokollLaden();
} catch { /* umgeleitet */ }
}