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/)