Filipe: „in der regie will ich auch video hinzufügen können für andere
tage und uhrzeiten, gerade geht das nicht. wie so ein kalender wo vanvan
und dogfather videos eintragen und vorbereiten können. und wenn ich
texte eingebe oder videos und kurz was anderes mache und es nicht
gespeichert hab löscht es sich von selbst. es soll bleiben bist ich
fertig bin und speichern drücke. oder aus der seite gehe aber nicht
solange wie ich noch da bin."
Haus: Team Dogi (crew.dogfather-universe.com). Die Agentur ist nicht
berührt -- pruef-haus-trennung 107/0.
======================================================================
1. GETIPPTER TEXT ÜBERLEBT DAS NEUZEICHNEN
======================================================================
WARUM ER VERSCHWUNDEN IST: Die Regie zeichnet sich bei jedem Ereignis
neu -- jemand kommt dazu, der Chat bekommt eine Zeile, das Video springt
eine Sekunde weiter. Dabei werden Listen von Grund auf gebaut
(`kasten.textContent = ''`), und jedes Eingabefeld darin entsteht neu,
gefüllt mit dem Wert vom Server.
Es gab einen Notbehelf: `if (document.activeElement !== feld)`, also
„überschreib es nicht, solange der Finger drinsteht". Filipe beschreibt
den Fall, in dem der zu kurz greift, wörtlich: „und kurz was anderes
mache". Wer tippt und dann woanders hinklickt, verliert den Fokus -- und
beim nächsten Takt auch seinen Text. An einem Sendeabend sind das
hunderte Gelegenheiten.
DIE FRAGE IST NICHT „HAT ES DEN FOKUS", SONDERN „IST ES SAUBER". Steht
im Feld genau das, was der Server zuletzt geliefert hat, darf eine neue
Auskunft es ersetzen -- sie ist aktueller. Weicht es ab, hat ein Mensch
etwas hineingetan, das noch nirgends steht; dann gewinnt der Mensch.
Das hat zwei Nebenwirkungen, und beide sind gewollt:
* Wer NICHTS angefasst hat, sieht Änderungen des anderen sofort.
* Wer etwas angefasst hat, verliert es auch dann nicht, wenn dieselbe
Stelle gerade von jemand anderem geändert wurde.
EIN NEUER BAUSTEIN, NICHT ZWANZIG EINZELFÄLLE: `assets/js/getippt.js`.
Ein Feld wird an seinen Serverwert gebunden, meldet beim Tippen, was
offen ist, und wird nach dem Speichern wieder sauber. Benutzt an zehn
Stellen der Regie: Titel, Video, Vorschaubild, Startzeit, zweites Video,
die Termine der Warteschlange, Name und Gruß an jeder Spende, die
fertigen Sätze.
DER SCHLÜSSEL TRÄGT DIE KENNUNG, NICHT DIE POSITION (`warte-wann-7`,
nicht „Zeile 3"). Sonst landete der getippte Termin in der falschen
Zeile, sobald jemand eine nach oben schiebt.
IM SPEICHER UND NICHT IN `localStorage` -- genau wie Filipe es gesagt
hat: „oder aus der seite gehe". Ein halber Satz, der drei Tage später
wieder auftaucht, ist keine Hilfe; man weiß dann nicht mehr, ob er
gelten soll.
UND MAN SIEHT ES: Ein ungespeichertes Feld bekommt eine bernsteine Kante
links -- dieselbe Farbe wie ein überfälliger Termin. Keine eingefärbte
Fläche: Die schreit, eine Kante sagt dasselbe und lässt den Text in
Ruhe. Ohne diese Marke wäre die Reparatur halb -- der Text stünde da,
sähe aus wie gespeichert, und niemand drückte mehr auf „Sichern".
======================================================================
2. DER KALENDER
======================================================================
Es ging bisher nur in zwei Schritten: anhängen, dann in der Zeile den
Termin setzen. Wer einen Abend für nächste Woche plant, macht das je
Video zweimal -- und der zweite Handgriff ist der, den man vergisst.
Jetzt steht das Terminfeld neben der Adresse, und `POST /liste` nimmt
`wann` entgegen.
ZWEI SICHTEN AUF DIESELBE LISTE, keine zweite Tabelle:
Reihenfolge -> „was kommt als Nächstes" (mitten in einer Sendung)
Kalender -> „wann läuft was" (beim Vorbereiten)
Eine zweite Tabelle „Sendeplan" wären zwei Antworten auf denselben
Bestand, und spätestens beim ersten Verschieben liefen sie auseinander.
EIN MONATSRASTER UND KEINE WOCHE. Wer einen Abend plant, denkt in
„nächsten Donnerstag", nicht in „in sechs Tagen". Tage mit etwas darin
tragen die ANZAHL und nicht nur einen Punkt -- „da ist etwas" und „da
sind vier" sind zwei verschiedene Auskünfte. Heute trägt einen Ring, was
vorbei ist und noch dasteht, wird warm markiert.
Das × an einem Eintrag nimmt NUR DEN TERMIN weg; das Video bleibt in der
Warteschlange. Gelöscht wird in der Reihenfolge-Sicht, und zwar nur
dort, damit es beim Umplanen nicht aus Versehen passiert.
EINE TERMINPRÜFUNG, ZWEI WEGE: `terminLesen()` im Server -- das
Anhängen und das nachträgliche Ändern fragen dieselbe Funktion. Zwei
Abschriften wären zwei Antworten auf „ist das ein Datum", und die zweite
wäre die, die beim nächsten Umbau stehen bleibt. Leer ist gültig und
bleibt der Normalfall.
======================================================================
3. EIN FUND, DER NEBENBEI HERAUSFIEL
======================================================================
`mess-regie` wollte nur ein Neuzeichnen auslösen -- VanVan hängt ein
Video an, DogFather hat die Regie offen -- und wartete vergeblich. Nach
zehn Sekunden war es bei ihm immer noch nicht da.
`empfaenger()` schickte an die Zusehenden, die Gäste und den Host DER
LAUFENDEN Sendung. Solange nichts läuft, gibt es keinen `host_id` und
niemanden, der „dabei" ist -- der Rundruf ging also an NIEMANDEN.
Ausgerechnet beim Vorbereiten, also genau dann, wenn die beiden
zusammenarbeiten.
Was das angerichtet hätte: VanVan trägt den Donnerstag ein, DogFather
sieht seinen alten Stand, trägt daneben etwas ein -- und einer von
beiden wundert sich später, wo sein Eintrag geblieben ist. Das fällt
erst auf, wenn es weh tut. Die Host-Rollen sind jetzt immer Empfänger,
ABGELEITET aus `HOST_ROLLEN` statt aufgezählt.
DIE FRAGE DAHINTER IST ALLGEMEIN: Ist die Menge im RUHEZUSTAND leer? Ein
Verteiler, der nur im Betrieb gefüllt ist, schweigt genau in der
Vorbereitungsphase -- und die ist die einzige, in der zwei Leute
gleichzeitig an derselben Sache arbeiten. Dieselbe Form wie `every()`
auf einem leeren Feld: Beides sagt Ja, weil nichts da ist.
======================================================================
4. DREI FEHLER IN DEN EIGENEN MESSUNGEN, BEHOBEN
======================================================================
(a) GRÜN AUS DEM FALSCHEN GRUND. Die Messung wartete nach VanVans
Änderung 1200 ms und fragte dann, ob der getippte Text noch
dasteht. Er stand da -- weil das Neuzeichnen noch gar nicht
passiert war. Ein grüner Haken über einer Voraussetzung, die nicht
eingetreten ist. Jetzt wird auf das EREIGNIS gewartet, nicht auf
die Uhr, und dass es eingetreten ist, ist eine eigene Zusage.
(b) DIE GEGENPROBE MASS DAS GEGENTEIL. Sie machte `Getippt.binde` zu
einer LEEREN Funktion -- damit schreibt niemand mehr in das Feld,
also bleibt der Text erst recht stehen. „Ohne das Gedächtnis"
heißt nicht „ohne Schreiben", sondern: wieder so wie früher,
nämlich `feld.value = wert`. Genau das wird jetzt eingesetzt.
(c) ZWEI PRÜFUNGEN LASEN FLIESSTEXT STATT CODE.
`html.indexOf("reaktion.js")` fand das Wort im Kommentar darüber,
und `!/localStorage/` schlug an, weil in getippt.js im Kommentar
steht „liegt im Speicher und NICHT in localStorage". Beide waren
rot, obwohl der Code stimmte. Jetzt wird der Skript-Einhänger
verglichen und der Aufruf `localStorage.setItem` gesucht.
UND EINER, DEN NUR DAS BILDSCHIRMFOTO ZEIGEN KONNTE: Ich hatte
`--w-tief`, `--w-hoch` und `--w-ring` als `background` und
`border-color` benutzt -- das sind aber SCHATTEN, keine Farben, und das
steht im Werkstoff-Abschnitt direkt darüber. Tückisch daran: Der
Ersatzwert in `var(--x, fallback)` greift dabei NICHT. Er hilft nur,
wenn die Variable fehlt, nicht wenn ihr Wert für die Eigenschaft
unsinnig ist. Die Sichtumschaltung sah dadurch aus wie zwei Wörter ohne
Knopf.
======================================================================
GEMESSEN
======================================================================
pruef-reaktion 588, 0 Fehler (vorher 571) -- Abschnitt 22
mess-regie (neu) 28, 0 Fehler, 3 Bildschirmfotos
mess-foyer 96, 0 Fehler
pruef-struktur 102 · pruef-css-klassen 37 · pruef-portnummern 41
pruef-lesbarkeit 14 · pruef-bewegung 9 · pruef-tippziele 13
pruef-deutsche-texte 12 · pruef-crew-adresse 173
pruef-haus-trennung 107 · pruef-community-sicht 10
pruef-sackgassen 14
alle 0 Fehler
Co-Authored-By: Claude Opus 5 <[email protected]>
262 lines
11 KiB
HTML
262 lines
11 KiB
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>Die Regeln · Das Rudel</title>
|
||
<meta name="robots" content="noindex, nofollow" />
|
||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||
<meta name="theme-color" content="#06090f" />
|
||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610081516" />
|
||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610081516" />
|
||
<link rel="stylesheet" href="assets/css/gate.css?v=202610081516" />
|
||
<link rel="stylesheet" href="assets/css/start.css?v=202610081516" />
|
||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610081516" />
|
||
<link rel="stylesheet" href="assets/css/treff.css?v=202610081516" />
|
||
<link rel="stylesheet" href="assets/css/module.css?v=202610081516" />
|
||
<!-- haus.css MUSS die letzte Stilvorlage sein. Auf der Adresse des
|
||
Rudels 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=202610081516" />
|
||
</head>
|
||
|
||
<body class="start">
|
||
|
||
<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">Das Rudel</a> · Regeln</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">
|
||
|
||
<section class="kopf-zeile">
|
||
<div>
|
||
<p class="marke">Das Rudel</p>
|
||
<!-- HIESS BIS ZUM 18.09.2026 „Regeln & Hilfe" -- genau wie das
|
||
BRETT, auf das der Absatz weiter unten verweist. Auf dem
|
||
Brett stand damit ein Link „Regeln & Hilfe", der auf eine
|
||
Seite namens „Regeln & Hilfe" fuehrte; wer ihn drueckte,
|
||
glaubte, im Kreis gelaufen zu sein.
|
||
|
||
Die beiden sind verschiedene Dinge: Hier stehen die fuenf
|
||
Regeln, kurz und fest. Das Brett sammelt daneben haeufige
|
||
Fragen, Hilfe und was im Einzelfall passiert. Zwei Namen
|
||
fuer zwei Sachen. -->
|
||
<h1 class="titel">Die Regeln</h1>
|
||
<p class="unterzeile">
|
||
Kurz, in normaler Sprache, und alles, was hier steht, gilt auch.
|
||
</p>
|
||
</div>
|
||
</section>
|
||
|
||
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
|
||
|
||
<!-- ==================================================================
|
||
WARUM DER TEXT HIER STEHT UND DIE ZAHLEN NICHT
|
||
|
||
Die Saetze sind Text und gehoeren in eine Datei. Die ZAHLEN
|
||
darin (sieben Tage, dreissig Tage, drei Beitraege, drei
|
||
Anschlaege, 18 Jahre) kommen vom Server -- sie stehen im Code,
|
||
und ein Regeltext, der eine andere Zahl nennt als die Regel, ist
|
||
schlimmer als gar keiner: Niemand merkt es, und wer es merkt,
|
||
glaubt dem Text.
|
||
|
||
Die Platzhalter tragen deshalb "…" als Vorgabe. Kommt die
|
||
Antwort nicht, steht dort sichtbar nichts -- und nicht
|
||
versehentlich eine Zahl von gestern.
|
||
============================================================== -->
|
||
<!-- ==================================================================
|
||
EINE FLAECHE STATT SECHS KACHELN (22.09.2026)
|
||
|
||
Filipe: „lass bitte die ganzen regeln viel geiler und spezieller
|
||
aussehen und nicht sehr viele kacheln sondern eine riesige wo
|
||
alles schön aussieht und richtig geil, übersichtlich"
|
||
|
||
Vorher waren es sechs einzelne Kaesten untereinander. Jeder mit
|
||
eigenem Rand, eigenem Grund, eigenem Abstand -- und dazwischen
|
||
jedes Mal ein Schnitt. Beim Lesen faengt man damit sechsmal neu
|
||
an; Regeln lesen sich aber als EIN Text, nicht als sechs
|
||
Merkzettel.
|
||
|
||
Jetzt: eine Flaeche, und die Abschnitte darin sind durch eine
|
||
Linie getrennt statt durch eine Luecke.
|
||
|
||
UEBERSICHTLICH HEISST HIER: EINE SPRUNGLEISTE. Eine lange
|
||
Flaeche ohne Wegweiser ist nicht uebersichtlicher als sechs
|
||
Kaesten, sondern nur laenger. Die Leiste steht oben, nennt alle
|
||
Abschnitte und springt hin. Sie wird NICHT gepflegt, sondern aus
|
||
den Abschnitten gebaut (regeln.js) -- eine Liste von Hand waere
|
||
die, die beim siebten Abschnitt fehlt.
|
||
============================================================== -->
|
||
<div class="regelflaeche">
|
||
<nav class="regelflaeche__leiste" id="regel-sprung" aria-label="Zu einem Abschnitt springen"></nav>
|
||
|
||
<section class="treff-abschnitt" id="willkommen">
|
||
<h2 class="treff-abschnitt__titel">Schön, dass du da bist</h2>
|
||
<div class="treff-abschnitt__inhalt">
|
||
<p>
|
||
Das Rudel ist der Ort rund um DogFather: Hier steht, was gerade gilt,
|
||
was ansteht, und hier redet ihr miteinander. Er ist nicht öffentlich –
|
||
du bist hier, weil dir jemand einen Code gegeben hat.
|
||
</p>
|
||
<p class="leise">
|
||
Gib diesen Code nicht weiter. Er gehört zu dir, und was damit
|
||
geschrieben wird, steht unter deinem Namen.
|
||
</p>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="treff-abschnitt">
|
||
<h2 class="treff-abschnitt__titel">Die fünf Regeln</h2>
|
||
<div class="treff-abschnitt__inhalt">
|
||
<ol class="regel-liste">
|
||
<li><strong>Sei anständig.</strong> Keine Beleidigungen, keine Angriffe
|
||
auf Menschen, keine Hetze. Streiten über eine Sache ist in Ordnung –
|
||
über einen Menschen nicht.</li>
|
||
<li><strong>Keine privaten Daten.</strong> Keine Adressen, keine
|
||
Telefonnummern, keine Klarnamen von anderen. Auch nicht von dir
|
||
selbst, es liest mehr mit, als du denkst.</li>
|
||
<li><strong>Nichts Fremdes hochladen.</strong> Was du einstellst, muss
|
||
von dir sein oder dir gehören.</li>
|
||
<li><strong>Keine Werbung, kein Verkauf.</strong> Auch nicht für
|
||
andere Streams.</li>
|
||
<li><strong>Was hier passiert, bleibt hier.</strong> Keine
|
||
Bildschirmfotos nach draußen.</li>
|
||
</ol>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="treff-abschnitt">
|
||
<h2 class="treff-abschnitt__titel">Wie du weiterkommst</h2>
|
||
<div class="treff-abschnitt__inhalt">
|
||
<p>
|
||
In der ersten Zeit kannst du lesen und bei Wünschen mitstimmen.
|
||
Das ist kein Misstrauen gegen dich – es ist eines gegen
|
||
Wegwerf-Zugänge.
|
||
</p>
|
||
<ul class="regel-liste" id="stufen">
|
||
<li class="leise">wird geladen …</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="treff-abschnitt">
|
||
<h2 class="treff-abschnitt__titel">Wenn etwas nicht stimmt</h2>
|
||
<div class="treff-abschnitt__inhalt">
|
||
<p>
|
||
An jedem Beitrag, der nicht von dir ist, steht <strong>melden</strong>.
|
||
Schreib in einem Satz, was daran nicht in Ordnung ist – ohne das
|
||
können wir es nicht prüfen.
|
||
</p>
|
||
<p>
|
||
Wir sehen uns jede Meldung an. Wird ein Beitrag entfernt, halten wir
|
||
fest, <strong>warum</strong> – und die Person, die ihn geschrieben hat,
|
||
erfährt den Grund. Das ist keine Höflichkeit, sondern
|
||
<span class="leise">Artikel 17 des Digital Services Act</span>.
|
||
</p>
|
||
<p class="leise" id="kontakt">
|
||
Du erreichst uns außerdem direkt: Schreib es auf das Brett
|
||
<a href="bereich.html?b=treff">Das Rudel</a> oder sag es <span
|
||
id="kontakt-wem">jemandem aus dem Team</span>.
|
||
</p>
|
||
<p class="leise">
|
||
Häufige Fragen und Antworten stehen auf dem Brett
|
||
<a href="bereich.html?b=regeln">Regeln & Hilfe</a>.
|
||
</p>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="treff-abschnitt">
|
||
<h2 class="treff-abschnitt__titel">Was passiert, wenn jemand sich nicht daran hält</h2>
|
||
<div class="treff-abschnitt__inhalt">
|
||
<p>Wir gehen der Reihe nach vor, und niemand fliegt ohne Ansage:</p>
|
||
<ol class="regel-liste">
|
||
<li><strong>Hinweis.</strong> Jemand sagt dir, was nicht ging.</li>
|
||
<li><strong>Pause.</strong> Ein paar Tage nichts schreiben. Lesen
|
||
geht weiter.</li>
|
||
<li><strong>Ende.</strong> Der Zugang wird geschlossen.</li>
|
||
</ol>
|
||
<p class="leise" id="ausschluss">…</p>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="treff-abschnitt">
|
||
<h2 class="treff-abschnitt__titel">Das Kleingedruckte – kurz</h2>
|
||
<div class="treff-abschnitt__inhalt">
|
||
<p id="alter">…</p>
|
||
<p>
|
||
<strong>Was gespeichert wird:</strong> dein Name, dein Zugangscode
|
||
(verschlüsselt, niemand kann ihn lesen), was du schreibst, und wann
|
||
du dich anmeldest. Mehr nicht – kein Standort, keine Werbe-IDs,
|
||
keine Weitergabe an Dritte.
|
||
</p>
|
||
<p>
|
||
<strong>Du willst weg?</strong> Sag Bescheid. Dein Zugang wird
|
||
geschlossen und deine Beiträge werden entfernt.
|
||
</p>
|
||
<p class="leise">
|
||
Das Rudel ist ein kleiner, geschlossener Bereich. Es gibt keine
|
||
Direktnachrichten zwischen Mitgliedern – absichtlich: Ein
|
||
öffentlicher Raum lässt sich moderieren, ein privater nicht.
|
||
</p>
|
||
</div>
|
||
</section>
|
||
</div><!-- /.regelflaeche -->
|
||
|
||
|
||
<!-- ==== WAS IST ÜBER MICH GESPEICHERT? (15.09.2026) ==============
|
||
Art. 15 DSGVO. Kein Antrag, kein Formular, kein Warten – ein
|
||
Knopf. Er steht auf den beiden Seiten, die einem Menschen selbst
|
||
gehören: dem Steckbrief und den Rudel-Regeln. Die Community hat
|
||
keinen Steckbrief; ohne die zweite Stelle hätte ausgerechnet die
|
||
Gruppe mit den wenigsten Rechten auch diesen nicht. -->
|
||
<section class="meine-daten">
|
||
<div class="meine-daten__kopf">
|
||
<h2 class="meine-daten__titel">Was ist über mich gespeichert?</h2>
|
||
<button type="button" class="knopf-still" id="auskunft-knopf">Datei herunterladen</button>
|
||
</div>
|
||
<p class="meine-daten__satz">
|
||
Alles, was dieser Workspace über dich weiß, als Datei zum Mitnehmen.
|
||
Zugangsgeheimnisse sind nicht dabei, und wo andere Menschen vorkommen,
|
||
stehen sie nicht mit Namen darin – ihre Daten gehören ihnen.
|
||
</p>
|
||
<p class="leise" id="auskunft-stand" hidden></p>
|
||
</section>
|
||
|
||
</main>
|
||
|
||
<!-- WER kopf.js LAEDT, MUSS AUCH wahl.js LADEN (Regel seit 07.09.2026).
|
||
|
||
Der Umschalter "Meine Sicht" in der Kopfleiste ist ein selbst
|
||
gebautes Bedienelement; dahinter liegt ein unsichtbares Systemfeld
|
||
fuer Vorleseprogramme. Ohne wahl.js faellt kopf.js auf dieses Feld
|
||
zurueck -- ein grauer Kasten von 92 x 19 Pixeln mit weisser
|
||
Schrift, mitten in einer dunklen Leiste.
|
||
|
||
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
|
||
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
|
||
die seit dem 07.09. jede Seite danach absucht. -->
|
||
<script src="assets/js/nachfrage.js?v=202610081516" defer></script>
|
||
|
||
<script src="assets/js/wahl.js?v=202610081516" defer></script>
|
||
<script src="assets/js/bereiche.js?v=202610081516" defer></script>
|
||
<script src="assets/js/installieren.js?v=202610081516" defer></script>
|
||
<script src="assets/js/kopf.js?v=202610081516" defer></script>
|
||
<script src="assets/js/glocke.js?v=202610081516" defer></script>
|
||
<script src="assets/js/auskunft.js?v=202610081516" defer></script>
|
||
<script src="assets/js/treff-regeln.js?v=202610081516" defer></script>
|
||
</body>
|
||
</html>
|