Zwei Wuensche von Filipe, beide am Neu-Fenster. 1) "ich will eine bessere erklaerung dafuer bitte." Neben dem Umschalter "Gespraech | Kanal" stand ein Satz ueber das ANTIPPEN von Personen -- also ueber den naechsten Schritt, nicht ueber die Wahl, die gerade ansteht. Wer die beiden Woerter zum ersten Mal sieht, erfuhr nirgends, was sie bedeuten. Der Unterschied ist nicht "wenige/viele Leute", sondern WONACH der Raum benannt ist: ein Gespraech nach den Menschen darin, ein Kanal nach einem Thema. Daran haengt alles Weitere -- dass es einen Kanal je Zustaendigkeit nur einmal gibt (eindeutiger Index, nachgesehen), dass sein Name festliegt, dass die Teamleitung immer dabei ist (kanaeleAngleichen, nachgesehen) und dass Leute wechseln koennen, ohne dass der Raum ein anderer wird. Genau das steht jetzt da, und nichts davon ist behauptet. 2) "die person die ihn oeffnet soll auch das recht haben das zu loeschen und so dass es dan fuer jeden geloescht ist. aber nur die person die es gruendet." Ein EIGENER Weg (/ganz), kein Zusatzfeld am bestehenden. Es gibt jetzt zwei Loeschknoepfe nebeneinander, und sie tun etwas sehr Verschiedenes: Wegraeumen ist nur bei mir, Aufloesen ist fuer alle und endgueltig. Ein vergessenes Feld waere genau dieser Unterschied gewesen. Aus demselben Grund ein anderes Zeichen und eine eigene Warnfarbe -- zwei gleich aussehende Papierkoerbe waeren eine Falle. Nur der Gruender, woertlich: nicht die Teamleitung, nicht DogFather, nicht wer `leitung` in der Gruppe hat. Nicht bei Zweier-Gespraechen -- dort gibt es keinen Gruender, und "niemand nimmt einem anderen die Unterhaltung weg" gilt weiter. Reihenfolge beim Loeschen ist nicht beliebig: erst das Live-Ereignis (chatEreignis liest die Teilnehmer aus der Tabelle -- danach waere die Liste leer), dann die Zeilen in EINER Transaktion, dann die Anhaenge von der Platte. Umgekehrt haetten wir bei einem Ruecklauf Nachrichten, die auf geloeschte Dateien zeigen. WAS DIE PRUEFUNG GEFUNDEN HAT, BEVOR ES JEMAND GEMERKT HAETTE: Der Knopf blieb unsichtbar, obwohl das Recht stimmte. Die Oberflaeche holt den offenen Raum aus dem Nachrichten-Weg, nicht aus der Raumliste -- zwei Wege, ein Raumobjekt, und nur einer kannte das neue Feld. Die Regel steht jetzt in darfAufloesen() und wird von allen dreien benutzt: Liste, Nachrichten-Weg und der Loeschweg selbst. Gefunden hat das die Pruefung, weil sie den KNOPF misst und nicht das Recht dahinter. Haette sie nur `darf_aufloesen` geprueft, waere sie gruen gewesen und der Knopf nie erschienen. NEU: server/pruef-chat-aufloesen.mjs (59 Pruefungen). Sie misst am BESTAND, nicht an der Antwort: ob der Raum wirklich aus der Datenbank weg ist, ob keine Teilnehmerzeile liegen blieb, ob der Anhang von der Platte verschwand -- und mit Gegenprobe, dass der Anhang-Ordner selbst stehen bleibt. Ohne die waere "Datei ist weg" auch dann gruen, wenn es sie nie gab; genau das ist beim ersten Lauf passiert (der Upload lief ins 415, weil ich ihn als Formular statt roh geschickt hatte). Dazu: Wegraeumen ist NICHT Aufloesen (Ben raeumt weg, Cem hat alles noch), ein Zweier-Gespraech laesst sich gar nicht aufloesen, ein Aussenstehender bekommt 404 statt 403, ein zweiter Versuch findet nichts, und die Zustaendigkeit eines aufgeloesten Kanals wird wieder frei (sonst haette der eindeutige Index sie dauerhaft blockiert). Nebenbei: Die drei Kopfknoepfe schoben sich jeder einzeln mit `margin-left: auto` nach rechts. Bei zwei sichtbaren teilen sich zwei auto-Raender den freien Platz und reissen sie auseinander -- und WELCHE sichtbar sind, entscheidet der Server. Jetzt schiebt ein Behaelter einmal, die Knoepfe stehen beieinander, egal wie viele es sind. Co-Authored-By: Claude Opus 5 <[email protected]>
93 lines
4.2 KiB
HTML
93 lines
4.2 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>Dein Team · Spicy & Dogi</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=202609111522" />
|
||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609111522" />
|
||
<link rel="stylesheet" href="assets/css/gate.css?v=202609111522" />
|
||
<link rel="stylesheet" href="assets/css/start.css?v=202609111522" />
|
||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609111522" />
|
||
<link rel="stylesheet" href="assets/css/team.css?v=202609111522" />
|
||
<link rel="stylesheet" href="assets/css/module.css?v=202609111522" />
|
||
<!-- 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=202609111522" />
|
||
</head>
|
||
|
||
<!-- `data-buehne` steht hier fest und nicht im Skript: Die Kachel zu
|
||
dieser Seite kommt vom Server, `zuSeite()` in bereiche.js findet
|
||
sie deshalb nicht -- und ohne Fund griff der Rueckfall, also die
|
||
Szene der anderen Marke. Eine Seite mit genau einer Buehne
|
||
braucht dafuer kein Skript. -->
|
||
<body class="start" data-buehne="eingang">
|
||
|
||
<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> · Dein Team</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 KOPF ================================================
|
||
Er sagt, was diese Seite ist UND was sie nicht ist. Der zweite
|
||
Teil ist der wichtigere -- dieselbe Ueberlegung steht schon
|
||
ueber team.html: Eine Seite mit Zahlen ueber Kollegen wird sonst
|
||
als Kontrolle gelesen, und dann arbeitet niemand mehr offen
|
||
damit.
|
||
|
||
"Offen" heisst hier deshalb ausdruecklich: darueber habt ihr
|
||
noch nicht geredet. Es ist eine Liste fuer euch beide, keine
|
||
Note fuer den anderen. -->
|
||
<section class="t-kachel">
|
||
<div class="t-kopf">
|
||
<div class="t-kopf__text">
|
||
<p class="feldschild">Zusammen</p>
|
||
<h1 class="t-kopf__titel">Was auf dich wartet</h1>
|
||
<p class="t-kopf__unter" id="kopf-unter">…</p>
|
||
<p class="t-kopf__grenze">
|
||
Was hier steht, ist eine Merkliste für euch beide – keine Bewertung
|
||
von Menschen. „Offen“ heißt: darüber habt ihr noch nicht gesprochen.
|
||
Bewertet wird dort, wo die Punkte stehen; jede Zahl führt dorthin.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
|
||
</section>
|
||
|
||
<section class="t-lage" id="lage" aria-busy="true"></section>
|
||
|
||
</main>
|
||
|
||
<!-- wahl.js VOR kopf.js (nachgetragen 10.09.2026).
|
||
kopf.js baut den Sicht-Umschalter; ohne wahl.js sieht er aus wie
|
||
ein blankes Browser-Auswahlfeld statt wie der Rest des Hauses.
|
||
Kaputt ist dabei nichts -- er funktioniert. Genau deshalb faellt
|
||
es niemandem auf, und deshalb prueft pruef-css-klassen die
|
||
ABHAENGIGKEIT statt der Optik. Hier hat sie angeschlagen. -->
|
||
<script src="assets/js/wahl.js?v=202609111522" defer></script>
|
||
<script src="assets/js/bereiche.js?v=202609111522" defer></script>
|
||
<script src="assets/js/kopf.js?v=202609111522" defer></script>
|
||
<script src="assets/js/teamlage.js?v=202609111522" defer></script>
|
||
</body>
|
||
</html>
|