Files
dogfather-universe/workspace/kalender.html
T
DogFatherGitandClaude Opus 5 d8720debc1 Personen & Automationen gehoeren DogFather allein -- und das Formular laeuft nicht mehr ueber
ZWEI MELDUNGEN.

1. "DAS SIEHT JA MAL RICHTIG SCHEISSE AUS"
   Die Rollenauswahl im Formular "Neue Person" lief unten aus dem
   Formular heraus und legte sich ueber die Personenliste darunter.

   Die Ursache war keine schlampige Gestaltung, sondern eine Regel, die
   fuer etwas anderes gemacht ist: `.neu__raster > *` (aufgaben.css) gibt
   JEDEM direkten Kind ein Raster mit fester Zeilenhoehe von 44 px, damit
   Beschriftung und Eingabefeld in allen Spalten auf einer Linie sitzen.
   Fuer ein einzeiliges Feld ist das genau richtig. Die Rollenauswahl ist
   aber kein Feld, sondern ein Block aus vier hohen Karten -- die passten
   nicht in 44 px, und was nicht hineinpasst, steht eben daneben.

   Das Formular ist jetzt aus dem Spaltenraster geloest und liest sich
   von oben nach unten: NAME (schmal, ein Name braucht keine 1200 px),
   ROLLE (volle Breite, vier gleich breite Karten), Knoepfe. Das ist
   nicht nur reparierter Ueberlauf, sondern auch die Reihenfolge, in der
   man die Sache tatsaechlich entscheidet.

   Dazu zwei Kleinigkeiten, die den Unterschied machen: Das Namensfeld
   war ohne Rasterzeile 60 px hoch geworden (`height: 100%` einer Zeile,
   die es nicht mehr gibt) -- hoeher als die Knoepfe daneben, was nach
   Versehen aussieht, weil es eins war. Und die gewaehlte Rolle traegt
   jetzt ein HAEKCHEN, nicht nur einen etwas helleren Rahmen: Genau die
   Art Unterschied, die im Kontrastmodus verschwindet und fuer
   farbunsichere Augen nie existiert hat.

2. "DIE MANAGER SOLLEN DIESE KATEGORIEN GARNICHT SEHEN"
   "Personen & Zugaenge" und "Automationen" gehoeren ab sofort allein
   DogFather.

   Bei den Personen war es ohnehin ein Widerspruch im eigenen Haus: In
   der Rollenauswahl steht seit jeher "Manager -- dieselben Rechte wie
   DogFather, AUSSER der Personenverwaltung". Die Kachel stand trotzdem
   bei ihm, und die Schranke liess ihn hinein: Codes erneuern, sperren,
   Zuteilungen aendern. Eine Beschreibung, die etwas anderes sagt als die
   Software, ist schlimmer als beides einzeln -- man weiss danach nicht
   mehr, welcher von beiden man glauben soll.

   Umgesetzt auf DREI Ebenen, weil Wegnehmen was man SIEHT kein
   Rechteentzug ist:
     1. die Kachel erscheint nicht mehr
     2. die Seite leitet zur Startseite zurueck (GESCHUETZT)
     3. die Schnittstellen antworten mit 404 -- Personenverwaltung,
        Systemzustand, KI-Schalter

   FOLGE, die bewusst in Kauf genommen wird: Die Betreuungs-Zuteilung
   liegt auf der Personenseite. Ab jetzt kann also NUR DogFather
   festlegen, wer welchen Creator betreut.

GEPRUEFT: server/pruef-personen-formular.mjs, 20 Pruefungen. Das Aussehen
wird gemessen, nicht angesehen: Endet die Rollenauswahl innerhalb des
Formulars? Ragt eine Karte seitlich hinaus? Liegt etwas ueber der Liste?
Sind alle vier Karten gleich breit (272-272 px)? Traegt die gewaehlte ein
Haekchen? Dazu zwei Gegenproben: DogFather kommt weiterhin an beide
Bereiche (sonst waere jede Sperr-Zeile auch bei einem fuer ALLE kaputten
Bereich gruen), und die Managerin arbeitet ansonsten unveraendert weiter.
Bestehende Laeufe gruen: Rollen 97, Handy 50, Sicherung 41, Personenliste
33, Team 30, Formulare 19, Code 17, Grosscheck 15.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-03 00:00:41 +02:00

187 lines
8.4 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<title>Kalender · Creator Workspace</title>
<meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030000" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030000" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030000" />
<link rel="stylesheet" href="assets/css/kalender.css?v=202609030000" />
</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&nbsp;Workspace</a> · Kalender</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">
<!-- Der Zeitraum ist die Überschrift, nicht eine Beschriftung neben
Knöpfen: Man liest zuerst, WO man ist, und bewegt sich dann. -->
<section class="k-kopf">
<div class="k-kopf__titel">
<h1 class="k-zeitraum" id="zeitraum">…</h1>
<p class="k-kopf__unter" id="zeitraum-unter"></p>
</div>
<div class="k-nav">
<button type="button" class="knopf-still k-pfeil" id="zurueck-zeit" aria-label="Vorheriger Zeitraum">‹</button>
<button type="button" class="knopf-still" id="heute-knopf">Heute</button>
<button type="button" class="knopf-still k-pfeil" id="vor-zeit" aria-label="Nächster Zeitraum">›</button>
<button type="button" class="knopf knopf--klein" id="neu-oeffnen">Neuer Termin</button>
</div>
</section>
<!-- Zwei Reihen, die zwei VERSCHIEDENE Fragen beantworten – und deshalb
beschriftet sind:
"Als Nächstes" blickt ab heute nach vorn und ändert sich NICHT
beim Blättern
"Im September" beschreibt den Monat, den man gerade ansieht
Ohne Überschriften wären zwei gleich aussehende Reihen verwirrend. -->
<section class="k-leiste" id="saison-block" hidden>
<p class="feldschild">Als Nächstes</p>
<div class="k-anlassreihe" id="saison"></div>
</section>
<section class="k-leiste" id="monat-block" hidden>
<p class="feldschild" id="monat-titel">Im Monat</p>
<div class="k-anlassreihe" id="monatsanlaesse"></div>
</section>
<form class="neu" id="neu" hidden>
<div class="neu__zeile">
<label class="feld-schild" for="f-titel">Worum geht es?</label>
<input id="f-titel" maxlength="160" placeholder="z. B. Wochen-Call mit Luna" required />
</div>
<div class="neu__raster">
<div>
<label class="feld-schild" for="f-art">Art</label>
<select id="f-art">
<option value="call" selected>Call</option>
<option value="termin">Termin</option>
<option value="review">Review</option>
</select>
</div>
<div>
<label class="feld-schild" for="f-beginn">Beginn</label>
<input id="f-beginn" type="datetime-local" required />
</div>
<div>
<label class="feld-schild" for="f-dauer">Dauer <span class="feld-schild__still">Minuten</span></label>
<input id="f-dauer" type="number" min="5" max="1440" step="5" value="30" />
</div>
<!-- Wiederholen. Die Auswahl wird erst beim Öffnen gefüllt, weil
ihre Beschriftungen vom gewählten Datum abhängen: "jeden
Dienstag", "jeden Monat am 2." – so muss niemand raten, was
ein Rhythmus im eigenen Fall bedeutet. -->
<div>
<label class="feld-schild" for="f-takt">Wiederholen</label>
<select id="f-takt">
<option value="">Einmalig</option>
</select>
</div>
<div id="feld-teilnehmer" hidden>
<label class="feld-schild" for="f-teilnehmer">Mit wem</label>
<select id="f-teilnehmer"><option value="">—</option></select>
</div>
</div>
<!-- Erscheint nur, wenn ein Rhythmus gewählt ist. Der Satz darunter
sagt in Worten, was gleich passiert – eine Regel, die man nicht
vorlesen kann, stellt man später nicht mehr richtig ab. -->
<div class="neu__zeile k-wdh" id="feld-wdh" hidden>
<div class="k-wdh__ende">
<label class="feld-schild" for="f-ende">Läuft bis
<span class="leise">(leer = bis du sie abstellst)</span></label>
<input id="f-ende" type="date" />
</div>
<p class="k-wdh__satz" id="wdh-satz" aria-live="polite"></p>
</div>
<div class="neu__zeile">
<label class="feld-schild" for="f-ort">Ort oder Link <span class="leise">(optional)</span></label>
<input id="f-ort" maxlength="400" placeholder="Discord, Meet-Link, Adresse …" />
</div>
<div class="neu__zeile">
<label class="feld-schild" for="f-text">Notiz <span class="leise">(optional)</span></label>
<textarea id="f-text" rows="2" maxlength="4000"></textarea>
</div>
<p class="fehler" id="neu-fehler" role="alert" aria-live="polite"></p>
<div class="neu__knoepfe">
<button type="submit" class="knopf knopf--klein" id="neu-speichern">Eintragen</button>
<button type="button" class="abmelden" id="neu-abbrechen">Abbrechen</button>
</div>
</form>
<!-- Die laufenden Wiederholungen. Steht bewusst über dem Kalender und
nicht in einem Menü versteckt: Was von allein weiterläuft, muss
man sehen können, sonst weiß nach drei Monaten niemand mehr,
warum jeden Dienstag ein Call im Kalender steht. -->
<section class="k-leiste k-serien" id="serien-block" hidden>
<p class="feldschild">Läuft von allein</p>
<div class="k-serienliste" id="serien"></div>
</section>
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
<!-- Vier Ansichten auf DENSELBEN Daten. Der Server liefert einen
Zeitraum, hier wird er nur unterschiedlich dargestellt – so kann
keine Ansicht etwas anderes zeigen als die andere. -->
<div class="k-werkzeuge">
<div class="k-ansichten" role="group" aria-label="Ansicht">
<button type="button" class="k-ansicht" data-ansicht="monat" aria-pressed="true">Monat</button>
<button type="button" class="k-ansicht" data-ansicht="woche" aria-pressed="false">Woche</button>
<button type="button" class="k-ansicht" data-ansicht="liste" aria-pressed="false">Liste</button>
<button type="button" class="k-ansicht" data-ansicht="zeitstrahl" aria-pressed="false">Zeitstrahl</button>
</div>
<div class="k-filter" id="filter"></div>
</div>
<div id="kalender" aria-busy="true"><p class="leise">Kalender wird geladen …</p></div>
<!-- Der Tagesdialog. Als echtes <dialog>: Esc schließt, der Tastaturfokus
bleibt drin, und der Rest der Seite ist für Vorleseprogramme still –
das alles bringt das Element mit, ohne dass es nachgebaut wird. -->
<dialog id="tagdialog" class="k-dialog" aria-labelledby="tagdialog-titel">
<div class="k-dialog__kopf">
<div>
<strong id="tagdialog-titel" class="k-dialog__titel">…</strong>
<span id="tagdialog-unter" class="k-dialog__unter"></span>
</div>
<button type="button" class="knopf-still" id="tagdialog-zu" aria-label="Schließen">✕</button>
</div>
<div id="tagdialog-anlaesse" class="k-dialog__anlaesse"></div>
<div id="tagdialog-liste" class="k-dialog__liste"></div>
<div class="k-dialog__fuss">
<button type="button" class="knopf knopf--klein" id="tagdialog-neu">Hier eintragen</button>
<span class="k-dialog__tipp">Esc schließt</span>
</div>
</dialog>
</main>
<script src="assets/js/wahl.js?v=202609030000" defer></script>
<script src="assets/js/bereiche.js?v=202609030000" defer></script>
<script src="assets/js/kopf.js?v=202609030000" defer></script>
<script src="assets/js/kalender.js?v=202609030000" defer></script>
</body>
</html>