Nichts verschwindet mehr ohne eine Nachfrage, die sagt was passiert
Filipe: "Es darf vor allem keine Stellen geben, an denen ein Benutzer
etwas falsch machen kann, nur weil die Seite es nicht verstaendlich
genug erklaert."
Gemessen: 30 Stellen in 16 Dateien benutzten confirm() oder prompt().
Das Haus hatte die richtige Bauweise laengst -- einen <dialog>, in
aufgaben.html sogar ausfuehrlich begruendet -- aber sie stand IN EINER
SEITE. Wer anderswo etwas loeschen liess, hatte sie nicht.
confirm('Wirklich loeschen?') stellt die falsche Frage: Es fragt, ob
man sicher ist, und nennt nicht, WAS passiert, was BLEIBT und ob es
ZURUECK geht. Jetzt beantwortet jeder der 41 Dialoge alle drei.
Neu: workspace/assets/js/nachfrage.js -- window.frageNach() mit
Pflichtgrund, Zahlenfeld, einzeiliger Eingabe und Abtippsicherung.
Drei Ausgaenge: <dialog> / confirm()-Notnagel fuer Safari vor 15.4 /
Abbruch (Esc, Klick daneben, "Doch nicht" -- immer false).
DREIMAL DERSELBE FALLSTRICK, dreimal nachgemessen statt vermutet:
.dialog stand in aufgaben.css und leistung.css -> auf dateien.html
waere der Dialog ein weisser Systemkasten gewesen. 14 Regeln
klammergenau nach module.css verschoben (Klammern gezaehlt, nicht
per Muster geschnitten -- heute frueh hat ein nicht-gieriges
Muster schon einmal CSS zerrissen).
Das Formular trug .neu neu--blank -- und .neu gibt seine Abstaende
nur in aufgaben.css. Gemessen: padding 0px, und die Felder
verloren ihre height:44px. Jetzt steht alles unter
.nachfrage__form in module.css; der Dialog borgt nichts mehr.
Die erste Fassung der Pruefung zaehlte nachfrage.js SELBST als
Nutzer -- damit war jede Seite trivialerweise "Nutzer" und die
Pruefung gruen ohne Inhalt. Jetzt ausdruecklich ausgenommen.
ZWEI FUNDE NEBENBEI:
hilfeAufraeumen() wird im Betrieb NIE aufgerufen. Der Kommentar
behauptete "wird beim Start aufgerufen (siehe index.js)" -- das
war nie wahr; einziger Aufrufer ist die eigene Pruefung. Folge:
geschlossene vertrauliche Faelle bleiben unbegrenzt stehen. NICHT
eingeschaltet (das loescht echte Daten und ist Filipes
Entscheidung), sondern der Kommentar richtiggestellt.
Einen Hilfe-Fall zu schliessen ist endgueltig -- es gibt keine
Route, die ihn wieder oeffnet. Vorher stand darueber nur die
Frage nach einem Schlusswort. Jetzt sagt der Dialog es.
pruef-struktur hat meine eigene Pruefung von heute Nachmittag
erwischt: Sie bildete ihr Datum aus UTC. Beim Beheben erst
heuteLokal(datum) genommen -- die Funktion nimmt gar kein Argument
und haette still "heute" statt "+3 Tage" geliefert. Jetzt tagLokal(3),
nachgerechnet: Abstand 3 Tage.
Am Bildschirm angesehen (Rechner 1280, Handy 390): passt rein, Esc
ergibt false, Fokus liegt auf dem harmlosen Knopf, Knoepfe 44px auf
Touch. Der Platzhalter im Abtippfeld zeigte den erwarteten Namen --
das sah aus wie ein schon ausgefuelltes Feld, entfernt.
Neu: server/pruef-nachfrage.mjs -- 17/0, mit sechs Gegenproben und
beiden Richtungen (wer fragt, laedt die Datei; wer nie fragt, laedt
sie nicht -- sonst truege die Anmeldewand 4,8 KB fuer nichts).
pruef-meldungen 8/0, pruef-css-klassen gruen, pruef-struktur gruen,
pruef-leistung gruen.
This commit is contained in:
+161
-161
@@ -1,161 +1,161 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||||
<title>Dashboard · Spicy & Dogi</title>
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<!-- Die Farbe der Fensterleiste, wenn der Workspace als App laeuft.
|
||||
Stand auf #0674b9 (kraeftiges Blau) und stach damit als einziger
|
||||
heller Balken ueber einer durchweg dunklen Seite. Jetzt derselbe
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609191915" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609191915" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609191915" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609191915" />
|
||||
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
|
||||
Dialog "Creator anlegen". -->
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609191915" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609191915" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609191915" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609191915" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
|
||||
<!-- Der Schleier ueber der Buehne (Casper und HasiDog in den unteren
|
||||
Ecken, siehe start.css). Ein eigenes Element statt eines dritten
|
||||
Pseudo-Elements -- body hat nur ::before und ::after. -->
|
||||
<div class="schleier" aria-hidden="true"></div>
|
||||
|
||||
<header class="kopfleiste">
|
||||
<button type="button" class="zurueck-knopf" id="zurueck" hidden>
|
||||
<svg class="zurueck-knopf__pfeil" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path d="M14.5 5.5 8 12l6.5 6.5" />
|
||||
</svg>
|
||||
<span class="zurueck-knopf__text">Zurück</span>
|
||||
</button>
|
||||
<p class="marke"><span class="marke__text"><a class="zurueck" href="start.html">Creator Workspace</a> · Dashboard</span></p>
|
||||
<div class="kopfleiste__rechts">
|
||||
<span class="wer" id="wer">…</span>
|
||||
<button type="button" class="abmelden" id="abmelden">Abmelden</button>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="inhalt inhalt--breit">
|
||||
|
||||
<section class="kopf-zeile">
|
||||
<div>
|
||||
<p class="marke">Alles zentral</p>
|
||||
<h1 class="titel" id="titel">Dashboard</h1>
|
||||
<p class="unterzeile" id="unterzeile">
|
||||
Eine Karte je Creator – mit einem Blick sehen, wo es hakt und wo es läuft.
|
||||
</p>
|
||||
</div>
|
||||
<!-- Der Knopf steht HIER und nicht in der Personenverwaltung
|
||||
(07.09.2026). Ein Manager kommt dort gar nicht hinein, und er
|
||||
soll es auch nicht -- dahinter liegen Rollen, Codes, Sperren und
|
||||
das Protokoll. Hier dagegen sieht er ohnehin seine Creator; der
|
||||
neue erscheint eine Zeile weiter unten. Das Skript blendet den
|
||||
Knopf für Scouts und Creator aus, der Server lässt sie ohnehin
|
||||
nicht durch. -->
|
||||
<button type="button" class="knopf knopf--klein" id="creator-neu" hidden>Creator anlegen</button>
|
||||
</section>
|
||||
|
||||
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
|
||||
|
||||
<!-- Creator anlegen. Derselbe Dialog-Aufbau wie überall sonst. -->
|
||||
<dialog class="dialog" id="creator-dialog">
|
||||
<form method="dialog" class="neu neu--blank" id="creator-form">
|
||||
<h2 class="dialog__titel">Creator anlegen</h2>
|
||||
<p class="dialog__unter">
|
||||
Der Zugangscode erscheint genau einmal – danach ist er weg und
|
||||
kann nur neu gesetzt werden.
|
||||
</p>
|
||||
|
||||
<div class="neu__zeile">
|
||||
<label class="feld-schild" for="cn-name">Name</label>
|
||||
<input id="cn-name" maxlength="60" required autocomplete="off" />
|
||||
</div>
|
||||
|
||||
<div class="neu__zeile" id="cn-scout-zeile" hidden>
|
||||
<label class="feld-schild" for="cn-scout">Betreuung</label>
|
||||
<select id="cn-scout"></select>
|
||||
<p class="feld-hinweis">
|
||||
Ohne Auswahl betreust du ihn selbst. Zur Auswahl stehen nur
|
||||
deine eigenen Scouts.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Der Code. Steht erst nach dem Anlegen da und wird nie
|
||||
nachgeladen -- die Seite ist die einzige Stelle, an der er je
|
||||
zu sehen ist. -->
|
||||
<div class="neu__zeile" id="cn-code-zeile" hidden>
|
||||
<p class="feld-schild">Zugangscode für <span id="cn-code-name"></span></p>
|
||||
<p class="code-anzeige" id="cn-code"></p>
|
||||
<p class="feld-hinweis">
|
||||
Jetzt weitergeben. Nach dem Schließen ist er nicht mehr abrufbar.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p class="fehler" id="cn-fehler" role="alert" aria-live="polite"></p>
|
||||
|
||||
<div class="dialog__knoepfe">
|
||||
<button type="submit" class="knopf knopf--klein" id="cn-speichern">Anlegen</button>
|
||||
<button type="button" class="abmelden" id="cn-zu">Schließen</button>
|
||||
</div>
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<!-- FRÜHWARNUNG (06.09.2026).
|
||||
|
||||
Steht GANZ OBEN, noch vor den Summen. Die Summen beantworten "wie
|
||||
steht es insgesamt", die Karten "wie steht es bei jedem" – aber
|
||||
die Frage, mit der ein Betreuer morgens ankommt, ist eine dritte:
|
||||
"wo muss ich HEUTE hin?" Sie stand bis jetzt nirgends.
|
||||
|
||||
Bewusst OHNE Punktzahl. Ein Wert wie "Abwanderungsrisiko 73"
|
||||
klingt nach Wissenschaft und ist eine Behauptung: Man kann ihn
|
||||
nicht prüfen, nicht widersprechen und nicht erklären. Hier stehen
|
||||
stattdessen die einzelnen Beobachtungen im Klartext, jede mit
|
||||
ihrem Beleg – dann entscheidet ein Mensch.
|
||||
|
||||
Ein Creator sieht diesen Block nie (der Server liefert ihm gar
|
||||
keine Daten). Zu lesen, dass ein System einen für gefährdet hält,
|
||||
ist keine Mitteilung an die betroffene Person. -->
|
||||
<section class="warnblock" id="fruehwarnung" hidden aria-labelledby="warn-titel">
|
||||
<div class="klapp-kopf">
|
||||
<h2 class="feldschild" id="warn-titel">Wo ich diese Woche nachfassen würde</h2>
|
||||
</div>
|
||||
<div class="warnliste" id="warnliste"></div>
|
||||
</section>
|
||||
|
||||
<!-- Summen über alle sichtbaren Creator. Steht oben, weil die Frage
|
||||
"wie steht es insgesamt" vor der Frage "bei wem" kommt. -->
|
||||
<section class="summen" id="summen" hidden></section>
|
||||
|
||||
<div id="liste" aria-busy="true"><p class="leise">Übersicht wird geladen …</p></div>
|
||||
|
||||
<p class="stand" id="stand" hidden></p>
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609191915" defer></script>
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609191915" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609191915" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609191915" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609191915" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609191915" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||||
<title>Dashboard · Spicy & Dogi</title>
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||||
<!-- Die Farbe der Fensterleiste, wenn der Workspace als App laeuft.
|
||||
Stand auf #0674b9 (kraeftiges Blau) und stach damit als einziger
|
||||
heller Balken ueber einer durchweg dunklen Seite. Jetzt derselbe
|
||||
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
|
||||
eine Flaeche sind statt zweier. -->
|
||||
<meta name="theme-color" content="#06090f" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609191956" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609191956" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609191956" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609191956" />
|
||||
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
|
||||
Dialog "Creator anlegen". -->
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609191956" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609191956" />
|
||||
<link rel="stylesheet" href="assets/css/module.css?v=202609191956" />
|
||||
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
|
||||
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
|
||||
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
|
||||
genau diesen Dateinamen auf crew-haus.css um, und die Seite
|
||||
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
|
||||
ohne Umfaerben im Browser, ohne Flackern. -->
|
||||
<link rel="stylesheet" href="assets/css/haus.css?v=202609191956" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
|
||||
<!-- Der Schleier ueber der Buehne (Casper und HasiDog in den unteren
|
||||
Ecken, siehe start.css). Ein eigenes Element statt eines dritten
|
||||
Pseudo-Elements -- body hat nur ::before und ::after. -->
|
||||
<div class="schleier" aria-hidden="true"></div>
|
||||
|
||||
<header class="kopfleiste">
|
||||
<button type="button" class="zurueck-knopf" id="zurueck" hidden>
|
||||
<svg class="zurueck-knopf__pfeil" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path d="M14.5 5.5 8 12l6.5 6.5" />
|
||||
</svg>
|
||||
<span class="zurueck-knopf__text">Zurück</span>
|
||||
</button>
|
||||
<p class="marke"><span class="marke__text"><a class="zurueck" href="start.html">Creator Workspace</a> · Dashboard</span></p>
|
||||
<div class="kopfleiste__rechts">
|
||||
<span class="wer" id="wer">…</span>
|
||||
<button type="button" class="abmelden" id="abmelden">Abmelden</button>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="inhalt inhalt--breit">
|
||||
|
||||
<section class="kopf-zeile">
|
||||
<div>
|
||||
<p class="marke">Alles zentral</p>
|
||||
<h1 class="titel" id="titel">Dashboard</h1>
|
||||
<p class="unterzeile" id="unterzeile">
|
||||
Eine Karte je Creator – mit einem Blick sehen, wo es hakt und wo es läuft.
|
||||
</p>
|
||||
</div>
|
||||
<!-- Der Knopf steht HIER und nicht in der Personenverwaltung
|
||||
(07.09.2026). Ein Manager kommt dort gar nicht hinein, und er
|
||||
soll es auch nicht -- dahinter liegen Rollen, Codes, Sperren und
|
||||
das Protokoll. Hier dagegen sieht er ohnehin seine Creator; der
|
||||
neue erscheint eine Zeile weiter unten. Das Skript blendet den
|
||||
Knopf für Scouts und Creator aus, der Server lässt sie ohnehin
|
||||
nicht durch. -->
|
||||
<button type="button" class="knopf knopf--klein" id="creator-neu" hidden>Creator anlegen</button>
|
||||
</section>
|
||||
|
||||
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
|
||||
|
||||
<!-- Creator anlegen. Derselbe Dialog-Aufbau wie überall sonst. -->
|
||||
<dialog class="dialog" id="creator-dialog">
|
||||
<form method="dialog" class="neu neu--blank" id="creator-form">
|
||||
<h2 class="dialog__titel">Creator anlegen</h2>
|
||||
<p class="dialog__unter">
|
||||
Der Zugangscode erscheint genau einmal – danach ist er weg und
|
||||
kann nur neu gesetzt werden.
|
||||
</p>
|
||||
|
||||
<div class="neu__zeile">
|
||||
<label class="feld-schild" for="cn-name">Name</label>
|
||||
<input id="cn-name" maxlength="60" required autocomplete="off" />
|
||||
</div>
|
||||
|
||||
<div class="neu__zeile" id="cn-scout-zeile" hidden>
|
||||
<label class="feld-schild" for="cn-scout">Betreuung</label>
|
||||
<select id="cn-scout"></select>
|
||||
<p class="feld-hinweis">
|
||||
Ohne Auswahl betreust du ihn selbst. Zur Auswahl stehen nur
|
||||
deine eigenen Scouts.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Der Code. Steht erst nach dem Anlegen da und wird nie
|
||||
nachgeladen -- die Seite ist die einzige Stelle, an der er je
|
||||
zu sehen ist. -->
|
||||
<div class="neu__zeile" id="cn-code-zeile" hidden>
|
||||
<p class="feld-schild">Zugangscode für <span id="cn-code-name"></span></p>
|
||||
<p class="code-anzeige" id="cn-code"></p>
|
||||
<p class="feld-hinweis">
|
||||
Jetzt weitergeben. Nach dem Schließen ist er nicht mehr abrufbar.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p class="fehler" id="cn-fehler" role="alert" aria-live="polite"></p>
|
||||
|
||||
<div class="dialog__knoepfe">
|
||||
<button type="submit" class="knopf knopf--klein" id="cn-speichern">Anlegen</button>
|
||||
<button type="button" class="abmelden" id="cn-zu">Schließen</button>
|
||||
</div>
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<!-- FRÜHWARNUNG (06.09.2026).
|
||||
|
||||
Steht GANZ OBEN, noch vor den Summen. Die Summen beantworten "wie
|
||||
steht es insgesamt", die Karten "wie steht es bei jedem" – aber
|
||||
die Frage, mit der ein Betreuer morgens ankommt, ist eine dritte:
|
||||
"wo muss ich HEUTE hin?" Sie stand bis jetzt nirgends.
|
||||
|
||||
Bewusst OHNE Punktzahl. Ein Wert wie "Abwanderungsrisiko 73"
|
||||
klingt nach Wissenschaft und ist eine Behauptung: Man kann ihn
|
||||
nicht prüfen, nicht widersprechen und nicht erklären. Hier stehen
|
||||
stattdessen die einzelnen Beobachtungen im Klartext, jede mit
|
||||
ihrem Beleg – dann entscheidet ein Mensch.
|
||||
|
||||
Ein Creator sieht diesen Block nie (der Server liefert ihm gar
|
||||
keine Daten). Zu lesen, dass ein System einen für gefährdet hält,
|
||||
ist keine Mitteilung an die betroffene Person. -->
|
||||
<section class="warnblock" id="fruehwarnung" hidden aria-labelledby="warn-titel">
|
||||
<div class="klapp-kopf">
|
||||
<h2 class="feldschild" id="warn-titel">Wo ich diese Woche nachfassen würde</h2>
|
||||
</div>
|
||||
<div class="warnliste" id="warnliste"></div>
|
||||
</section>
|
||||
|
||||
<!-- Summen über alle sichtbaren Creator. Steht oben, weil die Frage
|
||||
"wie steht es insgesamt" vor der Frage "bei wem" kommt. -->
|
||||
<section class="summen" id="summen" hidden></section>
|
||||
|
||||
<div id="liste" aria-busy="true"><p class="leise">Übersicht wird geladen …</p></div>
|
||||
|
||||
<p class="stand" id="stand" hidden></p>
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/meldung.js?v=202609191956" defer></script>␍
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609191956" defer></script>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609191956" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609191956" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609191956" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609191956" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user