Kalender: blaettern direkt ueber dem Raster, rot und gruen
Filipe, mit Bildschirmfoto: "ich will dass genau da ueber dem kalender
auch noch buttons sind um den monat zu wechseln, tage wechseln.
perfektionnier mir das bitte. und mach auch die buttons die schon da
sind noch viel klarer bitte und die neuen auch. lass die neuen auch
richtig geil aussehen, die einen rot und die anderen gruen."
--- WARUM DAS EINE ECHTE LUECKE WAR ---
Die Pfeile gab es schon -- oben neben der Ueberschrift, einen halben
Bildschirm ueber dem Raster, das sie bewegen. Wer durch Monate
blaettert, sieht auf das Raster und nicht auf die Ueberschrift; der Weg
dorthin war jedes Mal ein Blicksprung.
Die neuen Knoepfe rufen DIESELBE Funktion (`springen`), sie kopieren sie
nicht. Zwei Fassungen desselben Schritts waeren zwei Gelegenheiten,
dass die eine spaeter anders springt als die andere.
--- BESCHRIFTET, NICHT NUR BEPFEILT ---
Ein Pfeil sagt nicht, WIE WEIT er springt. In der Monatsansicht ist ein
Schritt ein Monat, in der Wochenansicht eine Woche, in Liste und
Zeitstrahl sechs Wochen. Genau das steht jetzt drauf und wird beim
Umschalten mitgefuehrt -- steht "Monat vor" und es springt eine Woche,
ist das schlimmer als gar keine Beschriftung.
"Heute" ist ausgegraut, solange man schon dort steht. Ausgegraut und
nicht versteckt: Sonst springen die drei Knoepfe beim Blaettern in der
Breite. Ein Knopf, der nichts tut, wird sonst einmal gedrueckt und
danach nicht mehr ernst genommen.
--- ROT UND GRUEN, ABER NICHT SIGNALROT ---
Diese beiden Knoepfe stehen den ganzen Tag auf dem Bildschirm. Genommen
sind die Haustoene: das gedeckte Rot der Warnfarbe, das Gruen der
Scout-Rolle. Beide hell genug fuer Schrift auf dunklem Grund, keins
leuchtet.
Die Richtung steckt zusaetzlich in der FORM: Der Pfeil steht links beim
Zurueck und rechts beim Vor. Wer Rot und Gruen nicht unterscheidet --
etwa acht Prozent der Maenner --, liest die Richtung trotzdem.
--- UND DIE VORHANDENEN KNOEPFE ---
Der Ansichts-Umschalter: Die drei nicht gewaehlten Knoepfe waren nackte
Schrift auf dunklem Grund -- sie sahen aus wie Beschriftungen, nicht wie
Schaltflaechen. Wer nicht weiss, dass "Woche" anklickbar ist, klickt
nicht darauf. Sie haben jetzt eine eigene Flaeche; die gewaehlte bleibt
das gebuerstete Metall und hebt sich dadurch sogar deutlicher ab.
Die Filterknoepfe standen auf --text-still, der leisesten Schrift der
Seite -- ausgerechnet an einem Bedienelement. Und "aus" unterschied
sich nur am hohlen Punkt.
--- EIN EIGENER FEHLER UNTERWEGS ---
Am Handy verschwindet das Wort, damit die Leiste nicht umbricht. Der
erste Anlauf liess die Polsterung stehen: Uebrig blieb ein 30 px
breites Pillchen mit einem winzigen Pfeil -- kleiner als das, was man
mit dem Daumen sicher trifft, und die Farbe war darauf kaum noch zu
sehen. Jetzt ein rundes Ziel von 44 px mit einem Pfeil, der die Flaeche
fuellt. Gesehen habe ich das erst auf dem Bildschirmfoto, nicht beim
Schreiben.
--- Pruefung ---
pruef-kalender, elf neue Messungen: beide Knoepfe blaettern wirklich,
die Beschriftung nennt die Schrittweite und folgt der Ansicht
("Monat vor" -> "Woche vor"), "Heute" graut sich richtig aus und wird
wieder anklickbar.
Rot und Gruen werden an ECHTEN Farbwerten geprueft (ueber ein Canvas
zurueckgelesen, weil color-mix() als "color(srgb ...)" herauskommt und
ein Muster ueber die Ziffern Unsinn liest -- derselbe Fehler wie heute
Mittag bei der Personenkachel). Dazu die Gegenprobe, dass die beiden
sich wirklich unterscheiden: Abstand 187.
Ausserdem gruen: pruef-css-klassen, pruef-lesbarkeit, pruef-handy.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -240,6 +240,93 @@ for (const [breite, wie] of [[1440, "Computer"], [390, "Handy"]]) {
|
||||
await seite.click('.k-ansicht[data-ansicht="monat"]');
|
||||
await seite.waitForTimeout(400);
|
||||
|
||||
/* ---- BLAETTERN DIREKT UEBER DEM KALENDER (09.09.2026) --------------
|
||||
Filipe, mit Bildschirmfoto: "ich will dass genau da ueber dem
|
||||
kalender auch noch buttons sind um den monat zu wechseln, tage
|
||||
wechseln ... die einen rot und die anderen gruen von den neuen."
|
||||
|
||||
Die Pfeile gab es schon -- oben neben der Ueberschrift, einen
|
||||
halben Bildschirm entfernt von dem Raster, das sie bewegen.
|
||||
|
||||
Geprueft wird nicht nur, DASS die Knoepfe da sind, sondern dass
|
||||
ihre Beschriftung die Wahrheit sagt: Ein Pfeil verspricht keinen
|
||||
Sprungweite, ein Wort schon. Steht "Monat vor" und es springt eine
|
||||
Woche, ist das schlimmer als gar keine Beschriftung. */
|
||||
{
|
||||
const vorher = await seite.textContent("#zeitraum");
|
||||
await seite.click("#schritt-vor");
|
||||
await seite.waitForTimeout(700);
|
||||
const nachher = await seite.textContent("#zeitraum");
|
||||
ok(vorher !== nachher, `der gruene Knopf blaettert weiter ("${vorher}" -> "${nachher}")`);
|
||||
|
||||
const b = await seite.evaluate(() => ({
|
||||
zurueck: document.getElementById("schritt-zurueck-text")?.textContent,
|
||||
vor: document.getElementById("schritt-vor-text")?.textContent,
|
||||
heuteAus: document.getElementById("schritt-heute")?.disabled,
|
||||
}));
|
||||
ok(b.zurueck === "Monat zurück" && b.vor === "Monat vor",
|
||||
`und die Beschriftung nennt die Schrittweite ("${b.zurueck}" / "${b.vor}")`);
|
||||
ok(b.heuteAus === false, "Heute ist jetzt anklickbar, weil man woanders steht");
|
||||
|
||||
await seite.click("#schritt-zurueck");
|
||||
await seite.waitForTimeout(700);
|
||||
const zurueck = await seite.textContent("#zeitraum");
|
||||
ok(zurueck === vorher, `der rote Knopf blaettert zurueck ("${zurueck}")`);
|
||||
const wiederDa = await seite.evaluate(() =>
|
||||
document.getElementById("schritt-heute")?.disabled);
|
||||
ok(wiederDa === true,
|
||||
"und Heute ist wieder ausgegraut -- ein Knopf, der nichts tut, wird sonst nie ernst genommen");
|
||||
|
||||
/* DIE BESCHRIFTUNG FOLGT DER ANSICHT. In der Wochenansicht ist ein
|
||||
Schritt eine Woche -- steht dort weiter "Monat", luegt der Knopf. */
|
||||
await seite.click('.k-ansicht[data-ansicht="woche"]');
|
||||
await seite.waitForTimeout(600);
|
||||
const w = await seite.evaluate(() => ({
|
||||
zurueck: document.getElementById("schritt-zurueck-text")?.textContent,
|
||||
vor: document.getElementById("schritt-vor-text")?.textContent,
|
||||
}));
|
||||
ok(w.zurueck === "Woche zurück" && w.vor === "Woche vor",
|
||||
`in der Wochenansicht heissen sie anders ("${w.zurueck}" / "${w.vor}")`);
|
||||
|
||||
/* Und sie springt dort wirklich eine Woche, nicht einen Monat. */
|
||||
const wVor = await seite.textContent("#zeitraum");
|
||||
await seite.click("#schritt-vor");
|
||||
await seite.waitForTimeout(700);
|
||||
const wNach = await seite.textContent("#zeitraum");
|
||||
ok(wVor !== wNach, `der Schritt wirkt auch dort ("${wVor}" -> "${wNach}")`);
|
||||
|
||||
await seite.click('.k-ansicht[data-ansicht="monat"]');
|
||||
await seite.waitForTimeout(500);
|
||||
await seite.click("#schritt-heute");
|
||||
await seite.waitForTimeout(700);
|
||||
|
||||
/* ROT UND GRUEN, an echten Bildpunkten. Eine Farbe im Stylesheet
|
||||
sagt nichts darueber, was am Bildschirm ankommt -- dieselbe
|
||||
Lehre wie beim Rollenstreifen der Personenkachel. */
|
||||
const farben = await seite.evaluate(() => {
|
||||
const lies = (id) => {
|
||||
const c = document.createElement("canvas");
|
||||
c.width = 1; c.height = 1;
|
||||
const g = c.getContext("2d", { willReadFrequently: true });
|
||||
g.fillStyle = "#000000";
|
||||
g.fillStyle = getComputedStyle(document.getElementById(id)).color;
|
||||
g.fillRect(0, 0, 1, 1);
|
||||
const p = g.getImageData(0, 0, 1, 1).data;
|
||||
return [p[0], p[1], p[2]];
|
||||
};
|
||||
return { rot: lies("schritt-zurueck"), gruen: lies("schritt-vor") };
|
||||
});
|
||||
ok(farben.rot[0] > farben.rot[1] + 25 && farben.rot[0] > farben.rot[2] + 25,
|
||||
`der Zurueck-Knopf ist wirklich rot (rgb(${farben.rot}))`);
|
||||
ok(farben.gruen[1] > farben.gruen[0] + 25 && farben.gruen[1] > farben.gruen[2] + 25,
|
||||
`der Vor-Knopf ist wirklich gruen (rgb(${farben.gruen}))`);
|
||||
|
||||
/* GEGENPROBE: Die beiden sind NICHT dieselbe Farbe. Ohne sie hiesse
|
||||
"rot" und "gruen" nur, dass zweimal etwas gemessen wurde. */
|
||||
const abstand = farben.rot.reduce((s, x, i) => s + Math.abs(x - farben.gruen[i]), 0);
|
||||
ok(abstand > 120, `und die beiden unterscheiden sich deutlich (Abstand ${abstand})`);
|
||||
}
|
||||
|
||||
/* ---- Tagesdialog ---- */
|
||||
await seite.click(`.k-tag[data-tag="${heute}"]`);
|
||||
await seite.waitForTimeout(300);
|
||||
|
||||
Reference in New Issue
Block a user