Die Handgriffe an der Nachricht werden Zeichen -- eine Zeile statt drei
Filipe: "diese optionen im chat. ich will dass du das viel geiler
machst und es soll viel kuerzer gestaltet sein. so dass es nicht zu
viel aufmerksamkeit auf sich zieht aber jeder sieht dass es da ist.
aber kurz und knapp was richtig geiles schnell benutzbar aber nicht zu
viel platzraubend."
HEUTE FRUEH BEKAMEN DIE FUENF WOERTER ZEICHEN DAVOR. Das war der
richtige Schritt und nur der halbe: Gemessen auf 412 px brauchte die
Reihe danach DREI Zeilen -- "23. Sept. antworten reagieren" /
"loeschen (Notfall) anheften" / "kopieren". Unter zwei Zeilen Text
standen drei Zeilen Bedienung.
WOERTER SIND HIER DER FALSCHE MASSSTAB. Man liest sie nicht -- man
sucht das eine, das man gerade braucht. Fuenf Woerter nebeneinander
sind fuenfmal Lesen fuer einen Griff; fuenf Zeichen sind ein Blick.
Nachgemessen: aus ueber 400 px in drei Zeilen werden 123 px in EINER.
DAS WORT IST NICHT WEG, ES IST NUR NICHT ZU SEHEN. Es steht weiter im
Dokument (`clip-path`, nicht `display: none`) und damit:
* ein Vorleseprogramm liest "antworten", nicht "Schaltflaeche";
* `textContent` liefert es weiterhin -- daran haengt
pruef-chat-ausbau, das den Kopierknopf beim Wort nimmt;
* unter dem Zeiger steht es als `title`.
Ein Knopf ganz ohne Beschriftung waere kuerzer gewesen und schlechter.
KEINE FLAECHE IM RUHEZUSTAND. Fuenf Kreise nebeneinander waeren wieder
ein Balken. Es gibt nur das Zeichen, gedaempft; die Flaeche entsteht
erst unter dem Zeiger. "Jeder sieht, dass es da ist" heisst sichtbar,
nicht laut. Zwei Ausnahmen, und beide sind Zustand statt Griff: Das
Notfall-Loeschen traegt auch im Ruhezustand Farbe (wer fremde Worte
entfernt, soll den Knopf nicht verwechseln), und eine angeheftete
Nachricht zeigt ihre Nadel dauerhaft -- sonst muesste man jede
Nachricht ueberfahren, um zu sehen, welche haengt.
"kopiert" HAT KEIN WORT MEHR, ALSO BRAUCHT ES EIN ZEICHEN: Der Knopf
wird fuer anderthalb Sekunden gruen und traegt einen Haken. Ohne das
waere der Druck folgenlos -- man weiss nicht, ob es geklappt hat.
44 PX AM DAUMEN (Hausregel): Fuenf mal 44 plus Abstaende sind 236 px,
eine Blase hat auf 412 px innen 251. Die Reihe bleibt damit auch auf
dem Handy einzeilig.
pruef-css-klassen hat sofort gemeldet, dass die Uhrzeit auf 11,2 px
stand -- 0,3 unter der Hausgrenze. Das ist heute das dritte Mal
derselbe Reflex ("klein wirkt leise"), und die Pruefung hat ihn
dreimal gefangen. Leise macht die Deckung, nicht die Groesse.
pruef-chat-ausbau bekommt vier neue Punkte, und sie sichern genau das
ab, was sonst als naechstes "aufgeraeumt" wuerde: dass jeder Handgriff
sein Wort und seinen Vorlese-Satz behaelt, dass KEINES davon zu sehen
ist, und dass alles in einer Zeile steht. Der erste Anlauf mass die
Breite des Kastens und meldete 486 px -- das war die Blase, nicht die
Reihe. Gemessen wird jetzt, worum es geht: die Zahl der Zeilen.
Geprueft: pruef-chat-ausbau (68), pruef-chat-optik, pruef-chat-aufloesen
(126), pruef-chat-kanaele (81), pruef-tippziele (11), pruef-css-klassen,
pruef-lesbarkeit.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
+55
-13
@@ -1967,6 +1967,41 @@
|
||||
if (n.text) blase.append(textAbsatz(n.text, !!n.rudel));
|
||||
}
|
||||
|
||||
/* ==== DAS WORT KOMMT INS ELEMENT, NICHT AN DEN KNOPF ==========
|
||||
(25.09.2026)
|
||||
|
||||
Filipe: „diese optionen im chat. ich will dass du das viel
|
||||
geiler machst und es soll viel kuerzer gestaltet sein. so dass
|
||||
es nicht zu viel aufmerksamkeit auf sich zieht aber jeder
|
||||
sieht dass es da ist."
|
||||
|
||||
AUS FUENF WOERTERN WERDEN FUENF ZEICHEN. Das Wort verschwindet
|
||||
aber NICHT -- es wandert in ein eigenes Stueck Text, das nur
|
||||
fuer das Auge weg ist:
|
||||
|
||||
* Ein Vorleseprogramm liest weiterhin „antworten", nicht
|
||||
„Schaltflaeche".
|
||||
* `textContent` liefert weiterhin das Wort -- daran haengt
|
||||
pruef-chat-ausbau, das den Kopierknopf beim Wort nimmt
|
||||
(„kopiert" und zurueck auf „kopieren").
|
||||
* Wer mit der Maus darauf zeigt, bekommt es als `title`.
|
||||
|
||||
EIN KNOPF OHNE JEDE BESCHRIFTUNG waere schneller gebaut und
|
||||
schlechter: Er waere fuer ein Vorleseprogramm ein leeres
|
||||
Feld, und die Pruefung haette ab da nichts mehr zu greifen.
|
||||
|
||||
`wortKnopf` STATT FUENFMAL DASSELBE: Fuenf Abschriften waeren
|
||||
fuenf Gelegenheiten, dass eine das Wort vergisst -- und
|
||||
gerade die faellt keinem auf, weil man es ja nicht sieht. */
|
||||
const wortKnopf = (klasse, wort) => {
|
||||
const b = el('button', klasse);
|
||||
b.type = 'button';
|
||||
b.title = wort;
|
||||
b.setAttribute('aria-label', wort);
|
||||
b.append(el('span', 'chat-nachricht__wort', wort));
|
||||
return b;
|
||||
};
|
||||
|
||||
const fuss = el('div', 'chat-nachricht__fuss');
|
||||
const zeit = el('time', 'chat-nachricht__zeit', wann(n.erstellt));
|
||||
zeit.dateTime = n.erstellt;
|
||||
@@ -1977,8 +2012,7 @@
|
||||
Gruppe bezieht man sich durchaus auf sich selbst. Nur auf eine
|
||||
zurueckgenommene nicht: Das Zitat waere leer. */
|
||||
if (!n.zurueckgenommen && n.id > 0) {
|
||||
const ant = el('button', 'chat-nachricht__antwort-knopf', 'antworten');
|
||||
ant.type = 'button';
|
||||
const ant = wortKnopf('chat-nachricht__antwort-knopf', 'antworten');
|
||||
ant.addEventListener('click', () => antwortSetzen(n));
|
||||
fuss.append(ant);
|
||||
|
||||
@@ -1992,8 +2026,7 @@
|
||||
Nachricht auf und nicht in einem Fenster: Wer ein Zeichen
|
||||
anklickt, ist in zwei Sekunden fertig; ein Dialog dafuer
|
||||
waere mehr Weg als Zweck. */
|
||||
const reag = el('button', 'chat-nachricht__reag-knopf', 'reagieren');
|
||||
reag.type = 'button';
|
||||
const reag = wortKnopf('chat-nachricht__reag-knopf', 'reagieren');
|
||||
reag.addEventListener('click', () => auswahlZeigen(reag, n.id));
|
||||
fuss.append(reag);
|
||||
}
|
||||
@@ -2015,9 +2048,8 @@
|
||||
zu benutzen. */
|
||||
if (n.id > 0 && (n.selbst || darfAllesLoeschen)) {
|
||||
const fremd = !n.selbst;
|
||||
const weg = el('button', 'chat-nachricht__weg-knopf',
|
||||
const weg = wortKnopf('chat-nachricht__weg-knopf',
|
||||
fremd ? 'löschen (Notfall)' : 'löschen');
|
||||
weg.type = 'button';
|
||||
if (fremd) weg.dataset.notfall = 'ja';
|
||||
weg.addEventListener('click', () => zuruecknehmen(n.id, fremd));
|
||||
fuss.append(weg);
|
||||
@@ -2028,9 +2060,9 @@
|
||||
befindlichen Nachricht (`n.id > 0`): Die haette noch keine
|
||||
Nummer, unter der man sie anheften koennte. */
|
||||
if (darfAnheftenHier && !n.zurueckgenommen && n.id > 0) {
|
||||
const pin = el('button', 'chat-nachricht__pin-knopf',
|
||||
const pin = wortKnopf('chat-nachricht__pin-knopf',
|
||||
n.angeheftet ? 'lösen' : 'anheften');
|
||||
pin.type = 'button';
|
||||
if (n.angeheftet) pin.dataset.gesetzt = 'ja';
|
||||
pin.addEventListener('click', () => anheften(n.id, !n.angeheftet));
|
||||
fuss.append(pin);
|
||||
}
|
||||
@@ -2039,21 +2071,31 @@
|
||||
und faellt danach zurueck; eine Meldung anderswo waere ein
|
||||
zweiter Ort, an dem man nachsehen muesste. */
|
||||
if (!n.zurueckgenommen && n.text) {
|
||||
const kopie = el('button', 'chat-nachricht__kopie-knopf', 'kopieren');
|
||||
kopie.type = 'button';
|
||||
const kopie = wortKnopf('chat-nachricht__kopie-knopf', 'kopieren');
|
||||
/* NUR DAS WORT WECHSELT, nicht der ganze Inhalt. Hier stand
|
||||
`kopie.textContent = 'kopiert'` -- das haette seit heute auch
|
||||
das Zeichen mitgenommen, und der Knopf waere fuer anderthalb
|
||||
Sekunden leer gewesen. */
|
||||
const kopieWort = kopie.querySelector('.chat-nachricht__wort');
|
||||
const kopieSagt = (t) => {
|
||||
kopieWort.textContent = t;
|
||||
kopie.title = t;
|
||||
kopie.setAttribute('aria-label', t);
|
||||
kopie.dataset.getan = t === 'kopieren' ? '' : 'ja';
|
||||
};
|
||||
kopie.addEventListener('click', async () => {
|
||||
try {
|
||||
await navigator.clipboard.writeText(n.text);
|
||||
kopie.textContent = 'kopiert';
|
||||
kopieSagt('kopiert');
|
||||
} catch {
|
||||
/* Ohne Zwischenablage-Recht (aeltere Browser, kein HTTPS)
|
||||
den Text wenigstens auswaehlen -- dann geht Strg+C. */
|
||||
const p = kopie.closest('.chat-nachricht')?.querySelector('.chat-nachricht__text');
|
||||
if (p) { const r = document.createRange(); r.selectNodeContents(p);
|
||||
const sel = getSelection(); sel.removeAllRanges(); sel.addRange(r); }
|
||||
kopie.textContent = 'markiert';
|
||||
kopieSagt('markiert');
|
||||
}
|
||||
setTimeout(() => { kopie.textContent = 'kopieren'; }, 1600);
|
||||
setTimeout(() => { kopieSagt('kopieren'); }, 1600);
|
||||
});
|
||||
fuss.append(kopie);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user