/* hd-commerce — Merkliste (Wunschliste) clientseitig via localStorage. */ (function () { var KEY = 'hdc_wishlist'; function read() { try { return JSON.parse(localStorage.getItem(KEY) || '[]'); } catch (e) { return []; } } function write(c) { localStorage.setItem(KEY, JSON.stringify(c)); updateBadge(); paintButtons(); } function has(slug) { return read().some(function (i) { return i.slug === slug; }); } function toggle(item) { var c = read(); var idx = c.findIndex(function (i) { return i.slug === item.slug; }); if (idx > -1) { c.splice(idx, 1); } else { c.push(item); } write(c); return idx === -1; // true wenn jetzt gemerkt } function remove(slug) { write(read().filter(function (i) { return i.slug !== slug; })); } function updateBadge() { var b = document.getElementById('wishBadge'); if (!b) return; var n = read().length; b.textContent = n; b.classList.toggle('show', n > 0); } function paintButtons() { document.querySelectorAll('[data-wish]').forEach(function (btn) { var p; try { p = JSON.parse(btn.getAttribute('data-wish') || '{}'); } catch (e) { p = {}; } btn.classList.toggle('active', has(p.slug)); btn.setAttribute('aria-pressed', has(p.slug) ? 'true' : 'false'); }); } window.HDCWish = { read: read, has: has, toggle: toggle, remove: remove, count: function () { return read().length; } }; document.addEventListener('DOMContentLoaded', function () { updateBadge(); paintButtons(); document.querySelectorAll('[data-wish]').forEach(function (btn) { btn.addEventListener('click', function (e) { e.preventDefault(); e.stopPropagation(); var p; try { p = JSON.parse(btn.getAttribute('data-wish') || '{}'); } catch (err) { p = {}; } if (!p.slug) return; var added = toggle(p); if (window.HDC && window.HDC.track) { /* optional analytics */ } if (typeof window.hdcWishToast === 'function') window.hdcWishToast(added ? 'Gemerkt' : 'Entfernt'); }); }); // Merkliste-Seite rendern, falls vorhanden var root = document.getElementById('wishlistRoot'); if (root) renderList(root); }); function fmt(c, cur) { try { return new Intl.NumberFormat('de-DE', { style: 'currency', currency: cur || 'EUR' }).format((c||0)/100); } catch(e){ return ((c||0)/100).toFixed(2)+' '+(cur||'EUR'); } } function renderList(root) { var cur = root.getAttribute('data-currency') || 'EUR'; function draw() { var items = read(); if (!items.length) { root.innerHTML = '

Deine Merkliste ist leer

Tippe auf das Herz an einem Produkt, um es hier zu sammeln.

Zum Shop
'; return; } var cards = items.map(function (p) { return '
' + '' + '
' + (p.image ? '' : '') + '
' + '
' + (p.category || '') + '' + '' + (p.name || '') + '' + '' + fmt(p.priceCents, cur) + '' + 'inkl. MwSt.
' + '
'; }).join(''); root.innerHTML = '
' + cards + '
'; root.querySelectorAll('[data-rm]').forEach(function (b) { b.addEventListener('click', function (e) { e.preventDefault(); remove(b.getAttribute('data-rm')); draw(); }); }); } draw(); } })();