Eine Kachel "Unterstuetzen" -- und die Gespraechsliste neu gebaut
=== 1. UNTERSTUETZEN (neue Kachel im Community-Bereich) ===
Filipe: "ich brauch auch noch eine kachel im community bereich. wo mein
paypal und meine amazon liste sein wird. wo die leute alle supporten
koennen auf andere art anstatt nur tiktok. jeder soll diese kachel sehen
aber nur dogfather soll sie veraendern koennen oder vieles mehr sehen."
Neu: unterstuetzen.html + css + js, server/workspace-unterstuetzung.js,
server/unterstuetzung-tabellen.js. Ton 45 (#7567fe) ist gerechnet, das
Kachelzeichen ist ein Herz ueber zwei offenen Haenden.
DIE WEGE STEHEN IN DER DATENBANK, nicht im Quelltext -- ein Recht, das
man nur ueber einen Entwickler ausueben kann, ist keines. DogFather
schreibt Titel, Text, Knopf und Adresse selbst, blendet Wege aus und
nimmt neue dazu.
DER PAYPAL-LINK STEHT LEER UND UNSICHTBAR DA. Filipe schrieb "mein
paypal kennst du ja schon" -- gesucht im ganzen Haus und im Vault,
nirgends gefunden. Eine Zahlungsadresse zu RATEN waere der
gefaehrlichste Fehler dieser Seite: Geld an einen Fremden, und niemand
merkt es. Also steht dort nichts, der Weg ist ausgeblendet, und die
Seite sagt genau EINER Person, dass er fehlt.
DREI ARTEN, UND DIE DRITTE IST DIE WICHTIGSTE: geld, geschenk, frei.
"Kostet nichts" bekommt dieselbe Kartenform und dieselbe Groesse.
Waeren die freien Wege kleiner oder weiter unten, waere die Aussage
"das ist zweite Wahl" -- und die Mehrheit derer, die hier lesen, waere
damit zweite Wahl.
DIE ZAEHLUNG IST ANONYM, UND ZWAR VON DER TABELLE HER. DogFather sieht,
wie oft ein Weg geoeffnet wurde (7/30 Tage/gesamt). Was er NICHT sieht,
ist WER -- weil es in unterstuetzung_striche keine Spalte dafuer gibt.
Geprueft wird das ueber PRAGMA table_info, nicht ueber eine Abfrage:
eine Abfrage liesse sich morgen erweitern, eine fehlende Spalte nicht.
Schreiben haengt an istDogFather, nicht an istLeitung -- die rechte Hand
fuehrt dieses Team mit und kommt trotzdem nicht an diesen Link. Jede
Adresse wird beim SCHREIBEN geprueft (nur https:// oder eine Seite
dieses Hauses); javascript:, data:, http:// und // werden abgewiesen.
Neu: server/pruef-unterstuetzung.mjs -- 70 Pruefungen, alle gruen.
Sie misst ueber die CREW-ADRESSE: Beim ersten Lauf waren vier Rollen
gruen und der Zuschauer rot, und es sah nach einem Rechtefehler aus.
Es war ein Messfehler -- ueber 127.0.0.1 landet man still im
Agenturhaus, und dort gibt es die Rolle "gast" gar nicht.
=== 2. DIE GESPRAECHSLISTE (screen1 + screen2) ===
Filipe: "ich will dass die komplette kachel viel krasser und geiler
aussieht. der hintergrund der kachel soll gleich bleiben."
Der Hintergrund ist unangetastet. Zwei echte Fehler auf seinem Bild:
- Bei "Das Rudel" stand das "@" rechts oben und die orange "6" eine
ZEILE TIEFER. Der Knopf ist ein Raster mit DREI Spalten und bekam
VIER Kinder -- das vierte fiel um. Ausgerechnet die wichtigste
Auskunft der Liste landete an der unauffaelligsten Stelle.
- Jedes Gespraech mit Profilbild haengte das Bild ZWEIMAL ein: ein
Block stand Zeichen fuer Zeichen doppelt da. Zu sehen war nichts,
gekostet hat es die doppelte Ladelast bei jedem Neuzeichnen.
Und eine tote Regel: `.chat-raum__knopf[data-an="ja"]` beschrieb die
Schiene am offenen Gespraech -- gesetzt wird aber `data-offen` am <li>.
Die Regel griff nie, und daneben stand eine zweite, blassere Fassung
derselben Sache. Jetzt steht alles einmal, und die Schiene ist da.
Dazu: Zeilen als Karten, 44px-Gesichter, ein Zaehler neben "Gespraeche",
Suchfeld als Pille mit Lupe, runder Farbfleck statt Quadrat, und der
leere Raum rechts bekommt eine Mitte statt eines Satzes in der Ecke.
=== 3. VIER FUNDE NEBENBEI ===
- supportAufraeumen() war exportiert und wurde NIRGENDS gerufen. Die
Meldungen samt Bildschirmfotos waeren fuer immer liegen geblieben,
obwohl "90 Tage" dokumentiert ist. Jetzt im Loeschkonzept.
- aufgaben_zuteilung fehlte ebenfalls im Loeschkonzept (seit 21.09.).
pruef-aufbewahrung ist damit wieder gruen.
- pruef-start-ansicht war rot, seit "Aufgaben" am 23.09. die silberne
Kachel bekam -- die ueberschreibt ihr --ton absichtlich. Die
Pruefung nimmt sie jetzt aus UND prueft die Ausnahme selbst.
- pruef-buehne meldete auf entwicklung.html 1,79:1 Kontrast bei "Wen
gehst du durch?" -- die Ueberschrift lag direkt auf dem Foto. Sie
steht jetzt auf einer deckenden Flaeche.
OFFEN: pruef-buehne meldet treff-regeln.html mal "0 von 40", mal "3 von
40" -- dieselbe Seite, verschiedene Antworten. Eine Pruefung, die
schwankt, ist schlimmer als eine rote. Nicht in diesem Zug behoben.
Gemessen: pruef-unterstuetzung 70, pruef-start-ansicht, pruef-buehne
(bis auf den Wackler), pruef-workspace-seiten, pruef-aufbewahrung 45,
pruef-rechtetafel 19, pruef-css-klassen, pruef-chatkachel 36,
pruef-chat-ausbau, pruef-entwicklung-kacheln 31 -- gruen.
Neu: server/mess-chat-liste.mjs (zeigt die Liste mit sieben Gespraechen
verschiedener Art, prueft nichts).
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
+75
-13
@@ -790,6 +790,25 @@
|
||||
|
||||
ziel.textContent = '';
|
||||
$('liste-leer').hidden = raeume.length > 0;
|
||||
|
||||
/* WIE VIELE WARTEN AUF MICH (24.09.2026) -- die Summe, nicht die
|
||||
Zahl der Gespraeche. „3 Gespraeche mit Neuem" und „17 neue
|
||||
Nachrichten" sind zwei verschiedene Auskuenfte, und die zweite
|
||||
ist die, nach der man fragt, bevor man anfaengt.
|
||||
|
||||
GERECHNET UEBER `raeume` UND NICHT UEBER `zeigen`: Wer im
|
||||
Suchfeld tippt, filtert die Liste -- die Summe darueber wuerde
|
||||
dann mitwandern und behaupten, es warte weniger. */
|
||||
{
|
||||
const zaehler = $('liste-zaehler');
|
||||
if (zaehler) {
|
||||
const summe = raeume.reduce((n, r) => n + (Number(r.ungelesen) || 0), 0);
|
||||
zaehler.textContent = summe > 99 ? '99+' : String(summe);
|
||||
zaehler.setAttribute('aria-label',
|
||||
summe === 1 ? '1 ungelesene Nachricht' : summe + ' ungelesene Nachrichten');
|
||||
zaehler.hidden = summe === 0;
|
||||
}
|
||||
}
|
||||
/* Das Suchfeld erst, wenn die Liste lang genug ist, um darin zu
|
||||
suchen. Vorher ist es ein Feld ohne Zweck. */
|
||||
/* IMMER SICHTBAR SEIT DEM 09.09.2026.
|
||||
@@ -804,6 +823,11 @@
|
||||
for (const r of zeigen) {
|
||||
const li = el('li', 'chat-raum');
|
||||
li.dataset.id = String(r.id);
|
||||
/* DIE ART GEHOERT AN DIE ZEILE (24.09.2026). Kanal, Gruppe und
|
||||
Zweiergespraech sehen unterschiedlich aus; bisher stand die
|
||||
Art nur am runden Zeichen, und das Stilblatt konnte deshalb
|
||||
nur DAS einfaerben -- nicht die Zeile drumherum. */
|
||||
li.dataset.art = r.art || 'direkt';
|
||||
if (offen && r.id === offen.id) li.dataset.offen = 'ja';
|
||||
if (r.ungelesen) li.dataset.neu = 'ja';
|
||||
|
||||
@@ -838,12 +862,18 @@
|
||||
Sinnvolles statt eines kaputten Bildsymbols. Dieselbe
|
||||
Bauweise wie im Verlauf, in der Kopfleiste und in der
|
||||
Personenauswahl -- vier Stellen, ein Verhalten. */
|
||||
if (gegen.bild) {
|
||||
const b = document.createElement('img');
|
||||
b.src = gegen.bild; b.alt = '';
|
||||
b.addEventListener('error', () => b.remove());
|
||||
zeichen.append(b);
|
||||
}
|
||||
/* EINMAL, NICHT ZWEIMAL (behoben 24.09.2026).
|
||||
|
||||
Dieser Block stand hier doppelt -- Zeichen fuer Zeichen
|
||||
gleich, einmal vor und einmal nach der Rollenzeile. Jedes
|
||||
Gespraech mit Profilbild lud das Bild also zweimal und
|
||||
haengte zwei <img> uebereinander.
|
||||
|
||||
Zu SEHEN war davon nichts: Beide liegen deckend
|
||||
uebereinander und zeigen dasselbe Bild. Gekostet hat es
|
||||
trotzdem -- doppelte Ladelast bei jedem Neuzeichnen der
|
||||
Liste, und die wird bei jeder eintreffenden Nachricht neu
|
||||
gezeichnet. */
|
||||
zeichen.dataset.rolle = gegen.rolle;
|
||||
if (gegen.bild) {
|
||||
const b = document.createElement('img');
|
||||
@@ -867,6 +897,11 @@
|
||||
zwei Leute schreiben koennen -- in einer Gruppe wie in einem
|
||||
Kanal. Hier stand `=== 'gruppe'`, und ein Kanal waere damit
|
||||
die einzige Stelle ohne Absender in der Vorschau gewesen. */
|
||||
/* WER GESCHRIEBEN HAT, steht seit dem 24.09.2026 in einem
|
||||
eigenen Stueck Text statt mitten im Satz. Damit kann das
|
||||
Stilblatt den Namen leicht absetzen -- beim Ueberfliegen
|
||||
sucht man „wer", nicht „was", und ein durchgehend grauer
|
||||
Satz zwingt zum Lesen. */
|
||||
const wer = r.letzte.von === ich.name ? 'Du: '
|
||||
: (r.art !== 'direkt' ? `${r.letzte.von}: ` : '');
|
||||
/* KEIN „Nachricht zurueckgenommen" MEHR (22.09.2026). Hier
|
||||
@@ -876,10 +911,13 @@
|
||||
nicht mehr als letzte, weil es die Zeile nicht mehr gibt.
|
||||
Sollte doch einmal eine alte, zurueckgenommene durchkommen,
|
||||
steht hier lieber nichts als ein Hinweis auf sie. */
|
||||
vorschau.textContent = r.letzte.zurueckgenommen
|
||||
? 'Noch nichts geschrieben'
|
||||
: wer + r.letzte.text;
|
||||
if (r.letzte.zurueckgenommen) vorschau.dataset.weg = 'ja';
|
||||
if (r.letzte.zurueckgenommen) {
|
||||
vorschau.textContent = 'Noch nichts geschrieben';
|
||||
vorschau.dataset.weg = 'ja';
|
||||
} else {
|
||||
if (wer) vorschau.append(el('span', 'chat-raum__wer', wer));
|
||||
vorschau.append(document.createTextNode(r.letzte.text));
|
||||
}
|
||||
} else {
|
||||
vorschau.textContent = 'Noch nichts geschrieben';
|
||||
vorschau.dataset.weg = 'ja';
|
||||
@@ -898,17 +936,41 @@
|
||||
ist, und es traegt einen eigenen Satz fuer Vorleseprogramme:
|
||||
Ein "@" allein wird je nach Programm als "at", "Klammeraffe"
|
||||
oder gar nicht vorgelesen. */
|
||||
/* ==== DIE RECHTE SPALTE (24.09.2026) =========================
|
||||
|
||||
HIER LAG EIN ECHTER FEHLER, und man sah ihn auf Filipes
|
||||
Bildschirmfoto: Bei „Das Rudel" stand das „@" rechts oben und
|
||||
die orange „6" eine ZEILE TIEFER, links unter dem Zeichen.
|
||||
|
||||
URSACHE: Der Knopf ist ein Raster mit DREI Spalten
|
||||
(Zeichen | Mitte | Rest). Mit „@" UND Zahl sind es aber VIER
|
||||
Kinder -- und das vierte faellt in die naechste Rasterzeile.
|
||||
Die Zeile wurde dadurch hoeher als alle anderen, und die
|
||||
wichtigste Auskunft der ganzen Liste („hier warten sechs
|
||||
ungelesene") stand an der unauffaelligsten Stelle.
|
||||
|
||||
Beide sitzen jetzt in EINER Spalte nebeneinander. Damit bleibt
|
||||
das Raster dreispaltig, egal wie viele Marken dazukommen --
|
||||
und eine vierte Marke morgen bricht es nicht wieder auf. */
|
||||
const rail = el('span', 'chat-raum__rail');
|
||||
if (r.erwaehnt) {
|
||||
const marke = el('span', 'chat-raum__erwaehnt', '@');
|
||||
marke.title = 'Du wurdest hier erwähnt';
|
||||
marke.setAttribute('aria-label', 'Du wurdest hier erwähnt');
|
||||
knopf.append(marke);
|
||||
rail.append(marke);
|
||||
}
|
||||
if (r.ungelesen) {
|
||||
const zahl = el('span', 'chat-raum__zahl', String(r.ungelesen));
|
||||
const zahl = el('span', 'chat-raum__zahl',
|
||||
r.ungelesen > 99 ? '99+' : String(r.ungelesen));
|
||||
zahl.setAttribute('aria-label', `${r.ungelesen} ungelesen`);
|
||||
knopf.append(zahl);
|
||||
rail.append(zahl);
|
||||
}
|
||||
/* Die Spalte steht IMMER da, auch leer. Ohne sie waere die Mitte
|
||||
bei Zeilen ohne Marke breiter als bei Zeilen mit -- und die
|
||||
Namen staenden nicht mehr untereinander. Eine Liste, in der
|
||||
die Kanten wandern, wirkt unruhig, ohne dass man sagen kann,
|
||||
warum. */
|
||||
knopf.append(rail);
|
||||
|
||||
knopf.addEventListener('click', () => raumOeffnen(r.id));
|
||||
li.append(knopf);
|
||||
|
||||
Reference in New Issue
Block a user