From c36cb9b4a3d3126071153f2e63898f32b1bd5687 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 5 Oct 2026 10:00:42 +0000 Subject: [PATCH] Shop Review B M-3: Versandhinweis bei jedem Preis, nicht bei reinen Abholshops "zzgl. Versand" steht jetzt unter dem Preis jeder Artikelkarte und im Detail, nur wenn der Shop versendet. Unter dem Raster bleibt der Steuerhinweis. Co-Authored-By: Claude Opus 5.5 --- public/embed/shop.js | 26 +++++++++++++++++++------- test/shopEmbedStatic.test.js | 13 +++++++++++++ 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/public/embed/shop.js b/public/embed/shop.js index e5e3d43..f5600c6 100644 --- a/public/embed/shop.js +++ b/public/embed/shop.js @@ -70,6 +70,7 @@ '.wks-preis{font-weight:700;margin:0}', '.wks-grundpreis,.wks-klein{font-size:.85rem;opacity:.85;margin:0}', '.wks-aus{font-size:.85rem;font-weight:600;color:var(--wks-i-fehler);margin:0}', + '.wks-preis-versand{margin:.1rem 0 .35rem;font-size:.85rem}', '.wks-hinweiszeile{font-size:.85rem;margin:0 0 .75rem;opacity:.9}', '.wks-detail{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:1.25rem;margin:0 0 1rem}', '.wks-galerie-gross{display:block;width:100%;aspect-ratio:1/1;object-fit:contain;border:1px solid var(--wks-i-rand);border-radius:var(--wks-i-radius);background:var(--wks-i-weich)}', @@ -721,6 +722,12 @@ dialogOeffnen('Versand und Zahlung', bloecke, ausloeser) } + // Versandhinweis neben dem Preis (PAngV § 6): nur wenn der Shop versendet; reine Abholshops zeigen kein "zzgl. Versand" + function versandAktiv () { return liste(shop().lieferlaender).length > 0 } + function versandLink () { + return versandAktiv() ? knopf('wks-link', 'zzgl. Versand', function (e) { zeigeVersand(e.currentTarget) }) : null + } + // Hinweis auf das gesetzliche Gewaehrleistungsrecht (Art. 246a § 1 Abs. 1 S. 1 Nr. 11 EGBGB): amtliche Grafik in hervorgehobenem // Kasten vor der Zusammenfassung der Kasse, sofort geladen, mit dem woertlichen Text als Alternativtext und einer Vergroesserung function gewaehrKasten () { @@ -935,10 +942,8 @@ add(ul) add(leer) fuelle() - var hinweis = el('p', 'wks-hinweiszeile') - if (nichtLeer(shop().steuerHinweisKurz)) hinweis.appendChild(document.createTextNode(shop().steuerHinweisKurz + ' ')) - hinweis.appendChild(knopf('wks-link', 'zzgl. Versand', function (e) { zeigeVersand(e.currentTarget) })) - add(hinweis) + // Steuerhinweis einmal unter dem Raster; der Versandhinweis steht bei jedem Preis (karte) + if (nichtLeer(shop().steuerHinweisKurz)) add(el('p', 'wks-hinweiszeile', shop().steuerHinweisKurz)) } function karte (p) { @@ -953,6 +958,12 @@ if (nichtLeer(p.kurz)) art.appendChild(el('p', 'wks-karte-text', p.kurz)) art.appendChild(el('p', 'wks-preis', preisAnzeige(p))) if (nichtLeer(p.grundpreisText)) art.appendChild(el('p', 'wks-grundpreis', p.grundpreisText)) + var vl = versandLink() + if (vl) { + var vz = el('p', 'wks-preis-versand') + vz.appendChild(vl) + art.appendChild(vz) + } if (p.ausverkauft === true || p.verfuegbar === false) art.appendChild(el('p', 'wks-aus', 'Ausverkauft')) li.appendChild(art) return li @@ -1029,9 +1040,10 @@ rechts.appendChild(preisEl) rechts.appendChild(gpEl) var hinweis = el('p', 'wks-hinweiszeile') - if (nichtLeer(shop().steuerHinweisKurz)) hinweis.appendChild(document.createTextNode(shop().steuerHinweisKurz + ' ')) - hinweis.appendChild(knopf('wks-link', 'zzgl. Versand', function (e) { zeigeVersand(e.currentTarget) })) - rechts.appendChild(hinweis) + var dvl = versandLink() + if (nichtLeer(shop().steuerHinweisKurz)) hinweis.appendChild(document.createTextNode(shop().steuerHinweisKurz + (dvl ? ' ' : ''))) + if (dvl) hinweis.appendChild(dvl) + if (hinweis.childNodes.length) rechts.appendChild(hinweis) verfEl.textContent = verkaeuflich ? 'Verfügbar' : 'Ausverkauft' rechts.appendChild(verfEl) diff --git a/test/shopEmbedStatic.test.js b/test/shopEmbedStatic.test.js index bb1e917..b399582 100644 --- a/test/shopEmbedStatic.test.js +++ b/test/shopEmbedStatic.test.js @@ -132,6 +132,19 @@ test('I-3: ausdrücklicher AGB-Hinweis direkt über dem Bestellknopf, AGB und Wi assert.ok(stelle.includes("createTextNode('.')")) }) +test('M-3: "zzgl. Versand" steht bei jedem Preis (Karte und Detail) und nur, wenn der Shop versendet - Abholshops zeigen es nicht', () => { + assert.equal([...OHNE_KOMMENTARE.matchAll(/'zzgl\. Versand'/g)].length, 1, 'der Text steht an genau einer Stelle (versandLink)') + const helfer = OHNE_KOMMENTARE.slice(OHNE_KOMMENTARE.indexOf('function versandAktiv'), OHNE_KOMMENTARE.indexOf('function gewaehrKasten')) + assert.match(helfer, /function versandAktiv \(\) \{ return liste\(shop\(\)\.lieferlaender\)\.length > 0 \}/, 'Versand = es gibt Lieferländer') + assert.match(helfer, /return versandAktiv\(\) \? knopf\('wks-link', 'zzgl\. Versand'/) + const karte = OHNE_KOMMENTARE.slice(OHNE_KOMMENTARE.indexOf('function karte (p)'), OHNE_KOMMENTARE.indexOf('// ------------------------------------------------------------ Detail')) + assert.ok(karte.indexOf("el('p', 'wks-preis'") < karte.indexOf('versandLink()'), 'Hinweis nach dem Preis in der Karte') + const raster = OHNE_KOMMENTARE.slice(OHNE_KOMMENTARE.indexOf('function zeichneRaster'), OHNE_KOMMENTARE.indexOf('function karte (p)')) + assert.ok(!raster.includes('Versand'), 'unter dem Raster steht nur der Steuerhinweis') + const detail = OHNE_KOMMENTARE.slice(OHNE_KOMMENTARE.indexOf('function zeichneDetail'), OHNE_KOMMENTARE.indexOf('function aktualisierePreis')) + assert.ok(detail.includes('versandLink()') && detail.includes('if (hinweis.childNodes.length) rechts.appendChild(hinweis)')) +}) + test('Weiterleitung zu Stripe nur zu einer https-Adresse (httpsUrl), Links der Rechtstexte nur als https', () => { assert.match(OHNE_KOMMENTARE, /var ziel = d \? httpsUrl\(d\.url\) : ''/) assert.match(OHNE_KOMMENTARE, /location\.href = ziel/)