Filipe: "die nachrichten die man in den chat reinschreibt. jeder soll
seine eigene nachricht bearbeiten koennen. diese option soll jeder
fuer seine eigene nachrichten haben die er selber verfasst hat."
NUR DIE EIGENE -- OHNE AUSNAHME, auch nicht fuer DogFather und die
rechte Hand. Beim LOESCHEN gibt es diese Ausnahme seit dem 22.09.
(fuer den Notfall), und es waere naheliegend gewesen, sie
mitzunehmen. Das waere falsch: Eine fremde Nachricht zu entfernen
heisst "das soll hier nicht stehen". Eine fremde zu AENDERN heisst,
jemandem Worte in den Mund zu legen, die unter seinem Namen und
seinem Bild stehen bleiben. Nicht dieselbe Befugnis in groesser,
sondern eine andere. Genau das ist die wichtigste Pruefzeile:
DogFather darf loeschen und bekommt beim Bearbeiten 403/404.
AN DER NACHRICHT STEHT "BEARBEITET". Ein Text, der sich still
aendert, nachdem andere darauf geantwortet haben, ist ein
Vertrauensproblem und kein Komfort. Der Vermerk traegt die Zeit im
Titel. Derselbe Text setzt ihn NICHT -- sonst stuende er irgendwann
ueberall und waere nichts mehr wert.
ERWAEHNUNGEN BLEIBEN, WIE SIE BEIM SENDEN WAREN. Wer beim Bearbeiten
"@Anna" ergaenzt, spricht Anna damit nicht an. Sonst gaebe es nur
schlechte Wege: nachtraeglich benachrichtigen laesst sich beliebig
oft wiederholen, und still eintragen setzt jemanden auf eine Liste,
von der er nie erfaehrt. Ansprechen tut man mit einer neuen
Nachricht. (Falls das anders gewuenscht ist, ist es eine eigene
Entscheidung -- nicht etwas, das hier nebenbei mitpassiert.)
DER RAUM RUECKT NICHT NACH OBEN und niemand bekommt die Nachricht
als ungelesen: Eine Tippfehlerkorrektur ist keine Wortmeldung.
`letzte_am` wird deshalb nicht angefasst.
Leer geht nicht -- dafuer steht "loeschen" daneben, mit Rueckfrage.
Grenzen (4000 Zeichen) sind dieselben wie beim Senden; eine zweite
Rechnung waere die, die auseinanderlaeuft.
Das Feld sitzt AN der Nachricht, nicht im Schreibfeld unten: Wer
seinen Text zum Bearbeiten unten wiederfindet, schickt ihn beim
naechsten Enter als NEUE Nachricht ab und hat ihn zweimal im Raum.
Enter speichert, Shift+Enter macht eine Zeile, Escape bricht ab --
dieselben Tasten wie beim Schreiben. 16 px Schrift, sonst zoomt iOS
beim Hineintippen die ganze Seite heran.
Der Stift traegt sich in die Familie der Handgriffe ein, wie es der
Hinweis in chat.css ausdruecklich verlangt ("wer einen sechsten
Handgriff baut, traegt ihn hier ein und bekommt sein Zeichen").
EIN FEHLER, DEN NUR DAS BILD GEZEIGT HAT. Ich hatte im Code
behauptet, die Gespraechsliste aendere sich beim Bearbeiten nicht,
und darum auf das Nachladen verzichtet. Auf dem Bildschirmfoto stand
rechts "Treffen um 15 Uhr" und links in der Liste weiter "Du:
Treffen um 15 Urh" -- derselbe Satz, zweimal verschieden, auf einem
Schirm. Richtig ist: Die REIHENFOLGE aendert sich nicht, die
VORSCHAU sehr wohl. Beide Haelften waren fuer sich gemessen und
gruen; keine Zahl hat es gemerkt.
pruef-chat 17 neue Pruefungen: eigene geht, fremde nicht, DogFather
nicht, Vermerk kommt mit nach draussen (auch im SELECT -- genau das
hat am 03.10. bei den Anhaengen einen halben Tag gekostet), Raum
rueckt nicht, Vorschau zieht nach, leer/zu lang abgelehnt,
unveraendert ohne Vermerk, geloeschte nicht bearbeitbar, wer nicht
im Raum ist bekommt 404 statt 403.
pruef-chat-optik 71 -> 84: im echten Browser, mit zwei Sitzungen.
Darunter die Zeile, auf die es ankommt -- der neue Text steht bei
Patrick, OHNE Neuladen. Ein Bearbeiten, das nur der Schreibende
sieht, waere schlimmer als keins.
Dabei zwei eigene Messfehler behoben: Die Sitzungen von oben waren
laengst geschlossen (Playwright meldet nur "Target page has been
closed"), und beide klickten "das oberste Gespraech" statt
denselben Raum -- wodurch die Pruefung "an ihr steht KEIN
bearbeiten" gruen war, weil die Nachricht gar nicht da war. Sie
haengt jetzt daran, dass er sie wirklich sieht.
Datenbank vorher gesichert und zurueckgelesen (integrity_check,
324 Nachrichten, 20 Personen).
Co-Authored-By: Claude Opus 5 <[email protected]>
193 lines
8.7 KiB
HTML
193 lines
8.7 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>Notizen · Team 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=202610040006" />
|
||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610040006" />
|
||
<link rel="stylesheet" href="assets/css/gate.css?v=202610040006" />
|
||
<link rel="stylesheet" href="assets/css/start.css?v=202610040006" />
|
||
<link rel="stylesheet" href="assets/css/notizen.css?v=202610040006" />
|
||
<link rel="stylesheet" href="assets/css/module.css?v=202610040006" />
|
||
<link rel="stylesheet" href="assets/css/haus.css?v=202610040006" />
|
||
</head>
|
||
|
||
<body class="start" data-ton="46">
|
||
|
||
<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">Team Dogi</a> · Notizen</span></p>
|
||
<div class="kopfleiste__rechts">
|
||
<span class="wer" id="wer">…</span>
|
||
<button type="button" class="abmelden" id="abmelden">Abmelden</button>
|
||
</div>
|
||
</header>
|
||
|
||
<!-- ======================================================================
|
||
DER BLOCK (26.09.2026)
|
||
|
||
Filipe: „ich will dass du das auch wie ein notizblock erstellst.
|
||
ich will dass es übelst geil und einzigartig ist."
|
||
|
||
ZWEI SPALTEN AUF DEM RECHNER, EINE AUF DEM HANDY. Links der
|
||
Stapel, rechts das aufgeschlagene Blatt. Auf dem Handy wäre
|
||
nebeneinander beides zu schmal; dort ist der Stapel die Seite,
|
||
und ein Blatt legt sich darüber. Der Zurück-Knopf der Kopfleiste
|
||
schließt es wieder — das ist die Geste, die jeder kennt.
|
||
|
||
KEIN SPEICHERN-KNOPF. Nirgends. Wer einen Block aufschlägt und
|
||
lostippt, drückt hinterher nicht auf „sichern"; er klappt ihn zu.
|
||
Die Anzeige unten rechts sagt, was gerade passiert, und ist der
|
||
einzige Ort, an dem das Thema überhaupt vorkommt.
|
||
====================================================================== -->
|
||
<main class="inhalt inhalt--breit notizblock" id="block">
|
||
|
||
<!-- ---------- Die Kopfzeile der Seite ---------------------------- -->
|
||
<section class="kopf-zeile n-kopf">
|
||
<div>
|
||
<p class="marke">Notizen</p>
|
||
<h1 class="titel">Dein Block</h1>
|
||
<p class="unterzeile">
|
||
Schreib hinein, was dir einfällt. Es sichert sich von selbst —
|
||
und niemand außer dir sieht es.
|
||
</p>
|
||
</div>
|
||
<div class="n-kopf__griffe">
|
||
<label class="n-suche" for="suche">
|
||
<svg class="n-suche__zeichen" viewBox="0 0 24 24" aria-hidden="true">
|
||
<circle cx="10.5" cy="10.5" r="6" />
|
||
<path d="M15.2 15.2 20 20" />
|
||
</svg>
|
||
<input type="search" id="suche" class="n-suche__feld" placeholder="Suchen"
|
||
autocomplete="off" spellcheck="false" />
|
||
</label>
|
||
<button type="button" class="knopf n-neu" id="neu">
|
||
<span aria-hidden="true">+</span> Neues Blatt
|
||
</button>
|
||
</div>
|
||
</section>
|
||
|
||
<p class="fehler" id="fehler" role="alert" aria-live="polite" hidden></p>
|
||
|
||
<div class="n-raum">
|
||
|
||
<!-- ---------- Links: der Stapel ------------------------------- -->
|
||
<aside class="n-stapel" id="stapel-spalte" aria-label="Deine Blätter">
|
||
<div class="n-stapel__kopf">
|
||
<h2 class="n-stapel__titel">Blätter <span class="n-zahl" id="anzahl">–</span></h2>
|
||
<button type="button" class="n-korb-knopf" id="korb-auf" hidden>
|
||
Papierkorb <span class="n-zahl" id="korb-zahl">0</span>
|
||
</button>
|
||
</div>
|
||
<ol class="n-liste" id="liste" aria-live="polite"></ol>
|
||
<p class="n-leer" id="leer" hidden>
|
||
Noch nichts drauf. <button type="button" class="n-leer__knopf" id="leer-neu">Fang an</button>
|
||
</p>
|
||
</aside>
|
||
|
||
<!-- ---------- Rechts: das aufgeschlagene Blatt ---------------- -->
|
||
<section class="n-blatt" id="blatt" hidden aria-label="Das aufgeschlagene Blatt">
|
||
|
||
<!-- Die Perforation. Reine Zierde, deshalb aria-hidden — sie
|
||
sagt dem Auge „Block", einer Vorlesefunktion nichts. -->
|
||
<div class="n-blatt__perforation" aria-hidden="true"></div>
|
||
|
||
<header class="n-blatt__kopf">
|
||
<h2 class="n-blatt__titel" id="blatt-titel">Ohne Titel</h2>
|
||
<div class="n-blatt__griffe">
|
||
<!-- Die Haken-Bilanz. Sie erscheint nur, wenn es welche
|
||
gibt: Eine Null neben einer Notiz ohne Aufgaben wäre
|
||
eine Zahl, die etwas behauptet. -->
|
||
<span class="n-haken-stand" id="haken-stand" hidden></span>
|
||
<button type="button" class="n-griff" id="anheften" aria-pressed="false"
|
||
title="Oben anheften">
|
||
<svg viewBox="0 0 24 24" aria-hidden="true">
|
||
<path d="M9 3.6h6l-.9 5.2 3.4 3.1H6.5l3.4-3.1z" />
|
||
<path d="M12 11.9v8.5" />
|
||
</svg>
|
||
<span class="n-griff__text">Anheften</span>
|
||
</button>
|
||
<div class="n-farben" id="farben" role="group" aria-label="Papierfarbe"></div>
|
||
<button type="button" class="n-griff n-griff--weg" id="wegtun" title="In den Papierkorb">
|
||
<svg viewBox="0 0 24 24" aria-hidden="true">
|
||
<path d="M5.5 7h13" />
|
||
<path d="M7.5 7V5.2h9V7" />
|
||
<path d="M6.8 7.6 7.7 20h8.6l.9-12.4" />
|
||
</svg>
|
||
<span class="n-griff__text">Wegtun</span>
|
||
</button>
|
||
</div>
|
||
</header>
|
||
|
||
<!-- ==================================================================
|
||
DAS BLATT SELBST — ein Schreibfeld mit einer Deckschicht
|
||
|
||
Das Feld trägt den Text und den Cursor, sieht ihn aber
|
||
nicht: `color: transparent`. Sichtbar ist die Deckschicht
|
||
darüber, die denselben Text noch einmal zeichnet — nur mit
|
||
Haken, Überschriften, Strichen und Links.
|
||
|
||
WARUM DIESER UMWEG: Ein `contenteditable` kann all das
|
||
direkt, bricht aber beim Einfügen aus fremden Programmen,
|
||
beim Rückgängigmachen und bei jeder Tastatur, die über
|
||
eine Zwischenzeile schreibt. Ein Schreibfeld tut nichts
|
||
davon — es ist das Bauteil, das der Browser seit dreißig
|
||
Jahren richtig hinbekommt.
|
||
|
||
DAMIT DAS AUFGEHT, müssen beide Schichten auf den Pixel
|
||
gleich fließen: gleiche Schrift, gleiche Zeilenhöhe,
|
||
gleicher Innenabstand, gleicher Umbruch. Und die Auszeichnung
|
||
darf die BREITE eines Zeichens nie ändern — kein Fettdruck,
|
||
keine andere Schriftgröße, kein Sperren. Erlaubt sind nur
|
||
Farbe, Durchstreichen, Schatten und Rahmen. Genau danach
|
||
ist die Gestaltung gebaut, und pruef-notizen misst es nach.
|
||
================================================================== -->
|
||
<div class="n-papier" id="papier">
|
||
<div class="n-papier__deck" id="deck" aria-hidden="true"></div>
|
||
<textarea class="n-papier__feld" id="feld" spellcheck="true"
|
||
autocomplete="off" autocapitalize="sentences"
|
||
aria-label="Text dieses Blattes"></textarea>
|
||
</div>
|
||
|
||
<footer class="n-blatt__fuss">
|
||
<span class="n-stand" id="stand" aria-live="polite"></span>
|
||
<span class="n-wann" id="wann"></span>
|
||
</footer>
|
||
</section>
|
||
|
||
<!-- ---------- Der Papierkorb ---------------------------------- -->
|
||
<section class="n-korb" id="korb" hidden aria-label="Papierkorb">
|
||
<header class="n-korb__kopf">
|
||
<h2 class="n-blatt__titel">Papierkorb</h2>
|
||
<button type="button" class="knopf-still" id="korb-zu">Zurück zum Block</button>
|
||
</header>
|
||
<p class="n-korb__satz" id="korb-satz"></p>
|
||
<ol class="n-liste n-liste--korb" id="korb-liste" aria-live="polite"></ol>
|
||
</section>
|
||
|
||
</div>
|
||
</main>
|
||
|
||
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
|
||
liest daraus die Leitungsrollen. -->
|
||
<script src="assets/js/bereiche.js?v=202610040006" defer></script>
|
||
<script src="assets/js/wahl.js?v=202610040006" defer></script>
|
||
<script src="assets/js/nachfrage.js?v=202610040006" defer></script>
|
||
<script src="assets/js/installieren.js?v=202610040006" defer></script>
|
||
<script src="assets/js/kopf.js?v=202610040006" defer></script>
|
||
<script src="assets/js/glocke.js?v=202610040006" defer></script>
|
||
<script src="assets/js/notizen.js?v=202610040006" defer></script>
|
||
</body>
|
||
</html>
|