diff --git a/public/neu/ansichten.css b/public/neu/ansichten.css index 9dc8d3b..39b3b78 100644 --- a/public/neu/ansichten.css +++ b/public/neu/ansichten.css @@ -131,6 +131,7 @@ .kn-az-zeilen li { position: relative; display: flex; gap: 10px; padding: 4px 0 4px 16px; font-size: 14px; line-height: 20px; } .kn-az-zeilen li::before { content: ""; position: absolute; left: -3px; top: 12px; width: 5px; height: 5px; border-radius: 50%; background: var(--kn-line-strong); } .kn-az-datum { flex: none; min-width: 3.2em; color: var(--kn-text-2); font-variant-numeric: tabular-nums; white-space: nowrap; } +.kn-az-mit-jahr .kn-az-datum { min-width: 4.4em; } .kn-az-text { min-width: 0; overflow-wrap: anywhere; } .kn-az-zeitleiste:not(.is-open) > .kn-az-zeilen > [data-extra] { display: none; } .kn-az-mehr { margin: 4px 0 0 8px; } @@ -381,7 +382,7 @@ /* Pflicht- und Zahlungslinks (E-Fix F3): Verträge hier kündigen, Vertrag widerrufen, Vertragsbedingungen, Zahlen in der Zeile „Rechnung offen“ */ .kn-kuendigen a, .kn-widerruf a, .kn-links a, .kn-rechnung-offen a { display: inline-flex; align-items: center; min-height: 44px; } .kn-az-info { margin-top: 0; } - .kn-az-info a { display: flex; align-items: center; min-height: 44px; } + .kn-az-info a { display: block; padding: 12px 0; } .kn-az-info + .kn-az-balken { margin-top: 0; } .kn-rechnung-offen { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .kn-rechnung-offen .kn-trenner { display: none; } diff --git a/public/neu/auftrags-zeitleiste.js b/public/neu/auftrags-zeitleiste.js index 2f2357c..aa9f350 100644 --- a/public/neu/auftrags-zeitleiste.js +++ b/public/neu/auftrags-zeitleiste.js @@ -148,7 +148,8 @@ function baueZeitleiste(zeilen) { z.datum ? h('time', { class: 'kn-az-datum', datetime: z.iso || null }, z.datum) : h('span', { class: 'kn-az-datum', 'aria-hidden': 'true' }), h('span', { class: 'kn-az-text' }, z.text)) return h('div', { class: 'kn-az-zeitleiste', 'data-einklappbar': true }, - h('ol', { class: 'kn-az-zeilen' }, sichtbar.map((z) => zeile(z, false)), rest.map((z) => zeile(z, true))), + // Trägt ein Datum das Jahr (TT.MM.JJ), bekommt die Datumsspalte aller Zeilen die Breite dafür, damit die Texte bündig bleiben + h('ol', { class: zeilen.some((z) => z.datum.length > 6) ? 'kn-az-zeilen kn-az-mit-jahr' : 'kn-az-zeilen' }, sichtbar.map((z) => zeile(z, false)), rest.map((z) => zeile(z, true))), rest.length ? umschalter({ attribut: 'data-mehr', klasse: 'kn-textknopf kn-az-mehr', mehr: 'mehr anzeigen', weniger: 'weniger anzeigen' }) : null) } diff --git a/test/knAuftragsZeitleisteDom.test.js b/test/knAuftragsZeitleisteDom.test.js index 46526ac..2afff6f 100644 --- a/test/knAuftragsZeitleisteDom.test.js +++ b/test/knAuftragsZeitleisteDom.test.js @@ -167,3 +167,17 @@ test('Einklappen: die Wrapper verschachteln sich nicht über .kn-einklappbar, di assert.match(css, /\.kn-az-liste:not\(\.is-open\) > \.kn-az-auftraege > \[data-extra\] \{ display: none; \}/) assert.match(css, /\.kn-az-zeitleiste:not\(\.is-open\) > \.kn-az-zeilen > \[data-extra\] \{ display: none; \}/) })) + +// Browserlauf 17.10.: Ein display:flex am Link zerlegte den Satz in zwei Spalten (Text | „Im Chat antworten“). Der Link ist ein Block; die Tippfläche kommt aus dem Innenabstand. +test('Rückfrage-Link: am Handy ein Block (kein flex) mit Innenabstand für 44 px Tippfläche', () => { + const css = readFileSync(new URL('../public/neu/ansichten.css', import.meta.url), 'utf8') + assert.match(css, /\n \.kn-az-info a \{ display: block; padding: 12px 0; \}/) + assert.doesNotMatch(css, /\.kn-az-info a \{[^}]*display: *(inline-)?flex/) +}) + +test('Zeitleiste: trägt ein Eintrag das Jahr (Vorjahr), richten sich alle Datumsspalten des Auftrags danach', () => mitDom((fx) => { + const mitJahr = baueAktivitaet([auftrag(1, 'arbeit', '2026-10-05T00:00:00Z', [eintrag('2026-10-06', 'neu'), eintrag('2025-12-24', 'alt')])], JETZT) + assert.deepEqual(fx.alle(mitJahr, 'time').map((t) => t.textContent), ['06.10.', '24.12.25']); assert.ok(fx.finde(mitJahr, '.kn-az-zeilen').classList.contains('kn-az-mit-jahr')) + const ohne = baueAktivitaet([auftrag(2, 'arbeit', '2026-10-05T00:00:00Z', [eintrag('2026-10-06', 'neu')])], JETZT) + assert.ok(!fx.finde(ohne, '.kn-az-zeilen').classList.contains('kn-az-mit-jahr')) +}))