Startseite: die tote Mitte der Konsole bekommt drei Ablesungen
Gemessen, nicht geschaetzt: Auf 1440 px lagen zwischen dem Ende des Textes und der Uhr rund 300 px Leere. Dort stehen jetzt HEUTE (Termine), ALS NAECHSTES (Uhrzeit) und OFFEN (Punkte, Farbe nach Lage). Keine zweite Zaehlung: Die Zahlen kommen aus denselben zwei Quellen, die die Kacheln darunter fuellen. Zwei Rechenwege fuer dieselbe Zahl laufen auseinander, und dann stehen zwei Wahrheiten auf einem Bildschirm. EINE Fassung mit Stegen, nicht drei Kaestchen. Der erste Anlauf gab jedem Wert eine eigene Fraesung -- im Bild sah das aus wie aufgeklebte Plaettchen. Ein Instrumentenblock ist EIN eingelassenes Feld, in dem Stege trennen; das Licht laeuft dann einmal ueber eine Kante statt sechsmal. Auf dem Handy geht der Block auf volle Breite und richtet sich nach der Uhr, nicht nach dem Rand. EINE ANNAHME KORRIGIERT: In meiner Merkliste stand "Werktisch-Aufbau nach VanVans Business Hub, Prozentring links". Im Hub nachgesehen -- es gibt dort keinen Ring und keinen solchen Aufbau, nur eine schlichte buehne-hero. Filipes Verweis galt der UHR, und die ist laengst gebaut. Meine eigenen Notizen altern wie jede andere Bestandsliste. DREI BEFUNDE AUS EIGENEN PRUEFUNGEN, alle behoben: 1. pruef-css-klassen: Die Zahl der Schriftgroessen unter 11,5 px war um genau eine gestiegen -- .stand__schild stand auf 9,3 px. Gesperrte Grossbuchstaben in 9 px liest man nicht, man erraet sie. Jetzt 11,5 px mit etwas engerer Sperrung, damit drei Schilder bei 320 px weiterhin nebeneinander passen (nachgemessen: 287 px, nichts abgeschnitten). 2. pruef-struktur: pruef-arten.mjs bildete das Tagesdatum aus UTC. Nachts zwischen 00:00 und 02:00 waere sie rot geworden, ohne dass am Code etwas falsch ist. Derselbe Fehler war mir am selben Abend schon im Messskript passiert -- dort hatte ich "Heute=0" gemessen und den Code verdaechtigt, der richtig lag. 3. Beim Bauen fast eingebaut: margin-left:auto von der Uhrgruppe genommen, weil der neue Block sie ja schon nach rechts schiebt. Er tut das nur, solange er da ist -- bis zur ersten Antwort steht er auf hidden, und die Uhr waere sichtbar weggesprungen. Neu: server/pruef-ueberlappung.mjs. Misst auf 5 Seiten x 4 Breiten, ob ein Bedienelement ueber einem anderen liegt (am 06.09. lag der Sicht-Umschalter bei 412 px auf zwoelf Seiten ueber dem Chat-Knopf). Ueberlappungen INNERHALB eines Bedienelements zaehlen nicht -- ein durchsichtiges select ueber seinem eigenen Schild ist die uebliche Bauart, und eine Warnung, die immer kommt, ist keine Warnung mehr. Mit Gegenprobe: ein absichtlich verschobener Knopf muss erkannt werden. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
+23
-4
@@ -156,6 +156,25 @@ await starten();
|
||||
await stoppen();
|
||||
|
||||
const jetzt = new Date().toISOString();
|
||||
|
||||
/* ORTSZEIT FUER DAS TAGESDATUM, NICHT UTC (08.09.2026).
|
||||
|
||||
Hier wurde der Tag mit `jetzt.slice(0, 10)` gebildet -- also aus UTC.
|
||||
Zwischen Mitternacht und zwei Uhr Ortszeit ist das noch der VORTAG,
|
||||
die Anwendung rechnet aber mit heuteLokal(). Ein Termin waere fuer
|
||||
gestern angelegt und heute nicht gefunden worden; die Pruefung waere
|
||||
nachts rot geworden, ohne dass am Code etwas falsch ist.
|
||||
|
||||
Das ist mir an genau diesem Abend zweimal passiert: erst im
|
||||
Messskript fuer die Startseite ("Heute=0", obwohl drei Termine
|
||||
angelegt waren -- ich habe den Code verdaechtigt, der richtig lag),
|
||||
und dann hier. pruef-struktur.mjs hat die zweite Stelle gefunden,
|
||||
bevor sie schaden konnte. Genau dafuer gibt es sie. */
|
||||
const tagOrt = (versatzTage = 0) => {
|
||||
const d = new Date(Date.now() + versatzTage * 86400000);
|
||||
return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}`
|
||||
+ `-${String(d.getDate()).padStart(2, "0")}`;
|
||||
};
|
||||
let idDogi, idLuna, terminVorher, serienVorher;
|
||||
{
|
||||
const d = new DatabaseSync(DB);
|
||||
@@ -198,7 +217,7 @@ let idDogi, idLuna, terminVorher, serienVorher;
|
||||
idDogi = anlegen("Filipe", "admin", "CODE-DOGI-0001");
|
||||
idLuna = anlegen("Luna", "creator", "CODE-CREA-0001");
|
||||
|
||||
const heute = jetzt.slice(0, 10);
|
||||
const heute = tagOrt();
|
||||
const rein = d.prepare(`INSERT INTO termine (titel, art, beginn, dauer_min, creator_id, erstellt, erstellt_von)
|
||||
VALUES (?,?,?,?,?,?,?)`);
|
||||
rein.run("Alter Call", "call", heute + "T10:00", 30, idLuna, jetzt, idDogi);
|
||||
@@ -269,7 +288,7 @@ await starten();
|
||||
misst, ist schlimmer als keine: Sie wird rot, jemand "repariert"
|
||||
etwas Heiles, und beim naechsten Mal glaubt ihr niemand mehr. */
|
||||
const HORIZONT = 180;
|
||||
const grenze = new Date(Date.now() + (HORIZONT + 1) * 86400000).toISOString().slice(0, 10);
|
||||
const grenze = tagOrt(HORIZONT + 1);
|
||||
const ausSerie = d.prepare(
|
||||
"SELECT beginn FROM termine WHERE serie_id IS NOT NULL ORDER BY beginn").all();
|
||||
const zuWeit = ausSerie.filter((z) => z.beginn.slice(0, 10) > grenze);
|
||||
@@ -301,7 +320,7 @@ await starten();
|
||||
let erfunden = false;
|
||||
try {
|
||||
d.prepare(`INSERT INTO termine (titel, art, beginn, dauer_min, erstellt, erstellt_von)
|
||||
VALUES ('Quatsch','quatsch',?,30,?,?)`).run(jetzt.slice(0, 10) + "T21:00", jetzt, idDogi);
|
||||
VALUES ('Quatsch','quatsch',?,30,?,?)`).run(tagOrt() + "T21:00", jetzt, idDogi);
|
||||
} catch { erfunden = true; }
|
||||
ok(erfunden, "eine erfundene Art wird weiterhin abgelehnt");
|
||||
d.close();
|
||||
@@ -318,7 +337,7 @@ console.log("\n=== Anlegen mit den neuen Arten ===");
|
||||
const keks = (a.headers.getSetCookie?.() || []).map((z) => z.split(";")[0]).join("; ");
|
||||
ok(!!keks, "als DogFather angemeldet");
|
||||
|
||||
const morgen = new Date(Date.now() + 86400000).toISOString().slice(0, 10);
|
||||
const morgen = tagOrt(1);
|
||||
let angelegt = 0;
|
||||
for (const art of NEUE) {
|
||||
const r = await fetch(BASIS + "/workspace/api/termine", {
|
||||
|
||||
Reference in New Issue
Block a user