Przejdź do treści

KOSZYK

Koszyk

Ładowanie koszyka…

Włącz JavaScript w przeglądarce, aby zobaczyć koszyk.

/* Wszystkie reguły zaczynają się od #oum-shop-cart, żeby motyw i główny CSS ich nie nadpisywały */ #oum-shop-cart{ --green:#27862f;--dark:#205f25;--pale:#f1f8f1; --border:#e5e9e5;--text:#151d29;--muted:#59616b; width:100%;max-width:1600px;margin:0 auto;padding:10px 0 24px; color:var(--text);font-family:inherit;font-size:16px;line-height:1.5; } #oum-shop-cart *{box-sizing:border-box} #oum-shop-cart a{text-decoration:none} #oum-shop-cart button,#oum-shop-cart input{font:inherit;letter-spacing:normal;text-transform:none;box-shadow:none} #oum-shop-cart [hidden]{display:none!important} #oum-shop-cart .oum-heading{text-align:center;margin:0 0 28px} #oum-shop-cart .oum-heading h1{font-size:clamp(30px,3vw,44px);line-height:1.15;margin:0 0 14px;font-weight:750;color:var(--text)} #oum-shop-cart .oum-heading nav{display:flex;gap:13px;justify-content:center;color:var(--muted)} #oum-shop-cart .oum-heading nav a{color:var(--green)} #oum-shop-cart #oum-alert{color:#a32e2e;margin:8px 0;padding:10px 14px;background:#fdecea;border:1px solid #f0b4ae;border-radius:8px;text-align:center} #oum-shop-cart #oum-alert:empty{display:none} #oum-shop-cart #oum-loading{padding:30px;text-align:center;color:var(--muted)} #oum-shop-cart .oum-columns{display:grid;grid-template-columns:minmax(0,1.95fr) minmax(300px,1.03fr);gap:18px;align-items:start} #oum-shop-cart .oum-products{border:1px solid var(--border);border-radius:11px;padding:24px;background:#fff;min-width:0} #oum-shop-cart .oum-table-head, #oum-shop-cart .oum-product-row{display:grid;grid-template-columns:minmax(150px,2.5fr) minmax(65px,.7fr) minmax(100px,.9fr) minmax(65px,.7fr) 26px;gap:10px;align-items:center} #oum-shop-cart .oum-table-head{padding:17px 12px;background:#f4f5f4;border-radius:8px;font-weight:700} #oum-shop-cart .oum-table-head span:not(:first-child){text-align:center} #oum-shop-cart .oum-product-row{padding:20px 7px;border-bottom:1px solid #edf0ed} /* kolejność kolumn: produkt | cena | ilość | suma | usuń */ #oum-shop-cart .oum-product-info{grid-column:1;grid-row:1;display:flex;align-items:center;gap:13px;min-width:0} #oum-shop-cart .oum-price{grid-column:2;grid-row:1} #oum-shop-cart .oum-product-extras{grid-column:3;grid-row:1;display:flex;justify-content:center} #oum-shop-cart .oum-row-total{grid-column:4;grid-row:1} #oum-shop-cart .oum-remove{grid-column:5;grid-row:1} #oum-shop-cart .oum-product-image{width:95px;height:100px;flex-shrink:0;object-fit:contain;border:1px solid #edf0ed;border-radius:9px;background:#fff;margin:0} #oum-shop-cart .oum-product-name{display:block;font-weight:700;color:var(--text);line-height:1.4;margin-bottom:7px;overflow-wrap:anywhere} #oum-shop-cart .oum-product-name:hover{color:var(--green)} #oum-shop-cart .oum-product-meta{color:#5b626c;line-height:1.65;font-size:13px} #oum-shop-cart .oum-price,#oum-shop-cart .oum-row-total{font-weight:700;text-align:center;white-space:nowrap} #oum-shop-cart .oum-quantity{display:flex;align-items:center;justify-content:center;border:1px solid #d7dcd8;border-radius:7px;overflow:hidden;max-width:130px;margin:auto;background:#fff} #oum-shop-cart .oum-quantity button{border:0!important;border-radius:0!important;background:#f7f8f7!important;color:#35404b!important;width:30px;height:38px;padding:0;margin:0;cursor:pointer;font-size:18px;line-height:1} #oum-shop-cart .oum-quantity button:hover{background:#e3efe3!important;color:var(--dark)!important} #oum-shop-cart .oum-quantity input{width:38px;min-width:0;height:38px;margin:0;border:0;border-radius:0;text-align:center;background:#fff;padding:0;color:var(--text);-moz-appearance:textfield;appearance:textfield} #oum-shop-cart .oum-quantity input::-webkit-outer-spin-button, #oum-shop-cart .oum-quantity input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0} #oum-shop-cart .oum-remove{border:0!important;background:transparent!important;color:#606a73!important;font-size:22px;line-height:1;cursor:pointer;padding:4px;margin:0;border-radius:50%} #oum-shop-cart .oum-remove:hover{color:#a32e2e!important;background:transparent!important} #oum-shop-cart .oum-cart-actions{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:24px} #oum-shop-cart .oum-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border-radius:6px!important;padding:12px 15px;margin:0;font-weight:650;line-height:1.2;cursor:pointer;text-align:center;transition:background-color .2s,border-color .2s} #oum-shop-cart .oum-btn-outline{background:transparent!important;border:1px solid var(--dark)!important;color:var(--dark)!important} #oum-shop-cart .oum-btn-outline:hover{background:#e3efe3!important;color:var(--dark)!important} #oum-shop-cart .oum-btn-light{background:#fff!important;border:1px solid #cbd1cc!important;color:var(--text)!important} #oum-shop-cart .oum-btn-light:hover{background:#f4f5f4!important;color:var(--text)!important} #oum-shop-cart .oum-btn-green{background:var(--green)!important;border:1px solid var(--green)!important;color:#fff!important} #oum-shop-cart .oum-btn-green:hover{background:var(--dark)!important;border-color:var(--dark)!important;color:#fff!important} #oum-shop-cart .oum-summary{background:#dcefd8;border:1px solid #c4e0bf;border-radius:12px;padding:25px;min-width:0} #oum-shop-cart .oum-summary h2{font-size:clamp(21px,2vw,28px);font-weight:750;line-height:1.25;margin:0 0 20px;color:var(--text)} #oum-shop-cart .oum-line{display:flex;justify-content:space-between;gap:12px;padding:11px 0;align-items:baseline} #oum-shop-cart .oum-line strong{text-align:right;white-space:nowrap} #oum-shop-cart .oum-discount strong{color:var(--green)} #oum-shop-cart .oum-rates{margin:0 0 8px;padding:0;list-style:none} #oum-shop-cart .oum-rates li{margin:0 0 6px;padding:0} #oum-shop-cart .oum-rates label{display:flex;align-items:center;gap:9px;padding:10px 12px;background:#fff;border:1px solid #d7dcd8;border-radius:8px;cursor:pointer;font-size:15px} #oum-shop-cart .oum-rates label:hover{border-color:var(--green)} #oum-shop-cart .oum-rates label.on{border-color:var(--green);box-shadow:0 0 0 1px var(--green)} #oum-shop-cart .oum-rates input{accent-color:var(--green);margin:0;flex:none} #oum-shop-cart .oum-rates .oum-rate-name{flex:1;min-width:0} #oum-shop-cart .oum-rates .oum-rate-price{font-weight:700;white-space:nowrap} #oum-shop-cart .oum-total{display:flex;justify-content:space-between;gap:12px;border-top:1px solid #b9d8b3;margin-top:12px;padding:20px 0;align-items:flex-start} #oum-shop-cart .oum-total>div{display:flex;flex-direction:column;gap:7px} #oum-shop-cart .oum-total>strong{font-size:clamp(22px,2.2vw,32px);line-height:1.15;color:var(--green);white-space:nowrap} #oum-shop-cart .oum-total small{color:#5e685f} #oum-shop-cart .oum-coupon{background:#c8e4c2;border-radius:9px;padding:14px;margin:8px 0 22px} #oum-shop-cart .oum-coupon summary{font-weight:700;cursor:pointer} #oum-shop-cart .oum-coupon[open] summary{margin-bottom:13px} #oum-shop-cart .oum-coupon form{margin:0} #oum-shop-cart .oum-coupon input{width:100%;height:46px;padding:0 12px;margin:0;border:1px solid #cbd3cb;border-radius:7px;background:#fff;min-width:0;color:var(--text)} #oum-shop-cart .oum-coupon input:focus{outline:none;border-color:var(--green);box-shadow:0 0 0 3px rgba(39,134,47,.18)} #oum-shop-cart .oum-coupon-buttons{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-top:10px} #oum-shop-cart .oum-coupon-buttons .oum-btn{padding:11px 6px} #oum-shop-cart .oum-coupon-tag{display:flex;justify-content:space-between;gap:8px;padding-top:10px;font-size:13px} #oum-shop-cart .oum-coupon-tag button{background:none!important;border:0!important;padding:0;margin:0;color:#a32e2e!important;text-decoration:underline;cursor:pointer;font-size:13px} #oum-shop-cart .oum-checkout{display:block;text-align:center;background:var(--green);color:#fff!important;padding:18px 12px;border-radius:9px;font-size:18px;font-weight:750;transition:background-color .2s} #oum-shop-cart .oum-checkout:hover{background:var(--dark);color:#fff!important} #oum-shop-cart .oum-payment-note{text-align:center;margin-top:16px;color:#59635a;font-size:13px} #oum-shop-cart .oum-benefits{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-top:24px;padding:24px 20px;background:#f5f9f5;border-radius:11px} #oum-shop-cart .oum-benefits>div{display:flex;align-items:center;justify-content:center;gap:12px;min-width:0} #oum-shop-cart .oum-benefit-icon{width:34px;height:34px;flex:none;fill:none;stroke:var(--green);stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round} #oum-shop-cart .oum-benefits p{display:flex;flex-direction:column;gap:5px;margin:0;line-height:1.35} #oum-shop-cart .oum-benefits small{color:var(--muted);font-size:13px} #oum-shop-cart .oum-benefits small a{color:inherit;text-decoration:underline} #oum-shop-cart.oum-busy .oum-products,#oum-shop-cart.oum-busy .oum-summary{opacity:.6;pointer-events:none;transition:opacity .15s} #oum-shop-cart #oum-empty{text-align:center;padding:45px 15px;border:1px solid var(--border);border-radius:10px} #oum-shop-cart #oum-empty h2{margin:0 0 20px;color:var(--text)} @media(max-width:1000px){ #oum-shop-cart .oum-columns{grid-template-columns:1fr} #oum-shop-cart .oum-benefits{grid-template-columns:repeat(2,minmax(0,1fr))} #oum-shop-cart .oum-benefits>div{justify-content:flex-start} } @media(max-width:650px){ #oum-shop-cart{padding:6px 0 18px;font-size:14px} #oum-shop-cart .oum-heading{margin-bottom:20px} #oum-shop-cart .oum-products{padding:12px} #oum-shop-cart .oum-table-head{display:none} #oum-shop-cart .oum-product-row{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"info rm" "price price" "qty sum";gap:8px;padding:17px 0} #oum-shop-cart .oum-product-info{grid-area:info} #oum-shop-cart .oum-remove{grid-area:rm;align-self:start} #oum-shop-cart .oum-price{grid-area:price;text-align:left;font-weight:500;color:var(--muted);font-size:13px;padding-left:83px} #oum-shop-cart .oum-product-extras{grid-area:qty;justify-content:flex-start;padding-left:83px} #oum-shop-cart .oum-row-total{grid-area:sum;text-align:right;align-self:center} #oum-shop-cart .oum-product-image{width:70px;height:80px} #oum-shop-cart .oum-quantity{margin:0} #oum-shop-cart .oum-cart-actions{flex-direction:column} #oum-shop-cart .oum-cart-actions .oum-btn{width:100%} #oum-shop-cart .oum-summary{padding:17px} #oum-shop-cart .oum-coupon-buttons{grid-template-columns:1fr} #oum-shop-cart .oum-benefits{grid-template-columns:1fr;padding:18px 12px;gap:16px} #oum-shop-cart .oum-benefit-icon{width:28px;height:28px} } /* ===== LOGO NA TABLECIE – tylko na stronie z tym koszykiem ===== Wartość "left" to przesunięcie w prawo od normalnego miejsca logo. Więcej w prawo → zwiększ liczbę (np. 120px). Mniej → zmniejsz (np. 40px). */ @media (min-width:600px) and (max-width:1024px){ body:has(#oum-shop-cart) #masthead .wowmart-header-middle img, body:has(#oum-shop-cart) .elementor-location-header .elementor-widget-theme-site-logo img, body:has(#oum-shop-cart) .elementor-location-header .elementor-widget-image img{ position:relative!important; left:80px!important; } body:has(#oum-shop-cart) .custom-logo-link, body:has(#oum-shop-cart) .site-logo, body:has(#oum-shop-cart) .elementor-widget-theme-site-logo{ left:0!important; margin-left:0!important; } } #oum-shop-cart #oum-editor-note{margin:0 0 14px;padding:12px 16px;background:#e3efe3;border:1px dashed var(--green);border-radius:8px;color:var(--dark);text-align:center;font-size:14px} #oum-shop-cart #oum-editor-note:empty{display:none} (function(){ /* ===== USTAWIENIA ===== */ var CONFIG = { // adres API koszyka – działa przy każdym ustawieniu bezpośrednich odnośników api: '/?rest_route=/wc/store/v1/cart', // adres strony zamówienia (kasy) – wejdź na nią i skopiuj adres z paska przeglądarki checkoutUrl: '/?page_id=9', // adres sklepu dla przycisków "Kontynuuj zakupy" i "Wróć do sklepu" shopUrl: '/?post_type=product', // kraj dostawy ustawiany automatycznie, żeby WooCommerce policzył koszt wysyłki country: 'PL' }; /* ===== CZY JESTEŚMY W EDYTORZE ELEMENTORA? ===== */ function isEditor(){ try{ if(document.body && document.body.classList.contains('elementor-editor-active')) return true; if(/[?&]elementor-preview=/.test(location.search)) return true; if(window.elementorFrontend && typeof window.elementorFrontend.isEditMode === 'function' && window.elementorFrontend.isEditMode()) return true; if(window.parent && window.parent !== window && window.parent.elementor) return true; }catch(e){} return false; } /* ===== URUCHOMIENIE KOSZYKA W JEDNYM KONTENERZE ===== */ function start(root){ if(!root || root.dataset.init === '1') return; root.dataset.init = '1'; var $ = function(id){ return root.querySelector('#' + id); }; var nonce = '', busy = false, countryTried = false, editor = isEditor(); $('oum-checkout').href = CONFIG.checkoutUrl; root.querySelectorAll('.oum-link-sklep').forEach(function(a){ a.href = CONFIG.shopUrl; }); function showError(t){ $('oum-alert').textContent = t || ''; } function plain(s){ var d = document.createElement('div'); d.innerHTML = s || ''; return (d.textContent || '').trim(); } function money(minor, cart, unit){ var digits = unit != null ? Number(unit) : Number((cart && cart.totals && cart.totals.currency_minor_unit) != null ? cart.totals.currency_minor_unit : 2); var amount = Number(minor || 0) / Math.pow(10, digits); var currency = (cart && cart.totals && cart.totals.currency_code) || 'PLN'; try{ return new Intl.NumberFormat('pl-PL', {style:'currency', currency: currency}).format(amount); } catch(e){ return amount.toFixed(2).replace('.', ',') + ' zł'; } } function sum(){ var s = 0; for(var i = 0; i -1 ? '&' : '?') + '_oum=' + Date.now(); // zawsze świeże dane, bez pamięci podręcznej return fetch(url, {method: method, credentials: 'same-origin', cache: 'no-store', headers: headers, body: body ? JSON.stringify(body) : undefined}) .then(function(r){ nonce = r.headers.get('Nonce') || r.headers.get('X-WC-Store-API-Nonce') || nonce; return r.json().catch(function(){ return null; }).then(function(data){ if(!r.ok || !data) throw new Error(plain(data && data.message) || 'Nie udało się połączyć ze sklepem.'); return data; }); }); } function make(tag, cls, txt){ var node = document.createElement(tag); if(cls) node.className = cls; if(txt !== undefined) node.textContent = txt; return node; } function renderCoupons(cart){ var list = $('oum-coupon-list'); list.innerHTML = ''; (cart.coupons || []).forEach(function(c){ var row = make('div', 'oum-coupon-tag'); row.appendChild(make('span', '', 'Kod: ' + c.code)); var btn = make('button', '', 'Usuń kupon'); btn.type = 'button'; btn.addEventListener('click', function(){ update('/remove-coupon', {code: c.code}); }); row.appendChild(btn); list.appendChild(row); }); if((cart.coupons || []).length) root.querySelector('.oum-coupon').open = true; } function renderShipping(cart){ var t = cart.totals || {}, rates = []; (cart.shipping_rates || []).forEach(function(pkg){ (pkg.shipping_rates || []).forEach(function(r){ rates.push({ pkg: pkg.package_id, id: r.rate_id, name: plain(r.name), price: sum(r.price, r.taxes), unit: r.currency_minor_unit, on: !!r.selected }); }); }); var chosen = rates.filter(function(r){ return r.on; })[0]; var txt; if(cart.needs_shipping === false) txt = money(0, cart); else if(chosen) txt = sum(t.total_shipping, t.total_shipping_tax) === 0 ? 'Za darmo' : money(sum(t.total_shipping, t.total_shipping_tax), cart); else txt = 'brak metod dostawy'; $('oum-shipping').textContent = txt; var ul = $('oum-rates'); ul.innerHTML = ''; ul.hidden = rates.length < 2; rates.forEach(function(r){ var li = make('li'), lab = make('label', r.on ? 'on' : ''), inp = make('input'); inp.type = 'radio'; inp.name = 'oum-rate'; inp.checked = r.on; inp.addEventListener('change', function(){ update('/select-shipping-rate', {package_id: r.pkg, rate_id: r.id}); }); lab.appendChild(inp); lab.appendChild(make('span', 'oum-rate-name', r.name)); lab.appendChild(make('span', 'oum-rate-price', Number(r.price) === 0 ? 'Za darmo' : money(r.price, cart, r.unit))); li.appendChild(lab); ul.appendChild(li); }); if(rates.length){ var min = Math.min.apply(null, rates.map(function(r){ return Number(r.price); })); $('oum-benefit-ship').textContent = min === 0 ? 'Darmowa dostawa' : 'Dostawa od ' + money(min, cart); } } function render(cart){ $('oum-loading').hidden = true; $('oum-main').hidden = true; $('oum-empty').hidden = true; if(!cart.items || !cart.items.length){ $('oum-empty').hidden = false; return; } $('oum-main').hidden = false; var list = $('oum-items'); list.innerHTML = ''; cart.items.forEach(function(item){ var name = plain(item.name); var row = make('article', 'oum-product-row'); var info = make('div', 'oum-product-info'); var src = item.images && item.images[0] ? (item.images[0].thumbnail || item.images[0].src) : ''; if(src){ var img = make('img', 'oum-product-image'); img.alt = plain(item.images[0].alt) || name; img.loading = 'lazy'; img.src = src; info.appendChild(img); } var text = make('div', ''); var link = make('a', 'oum-product-name', name); link.href = item.permalink || CONFIG.shopUrl; text.appendChild(link); (item.variation || []).forEach(function(v){ text.appendChild(make('div', 'oum-product-meta', (plain(v.attribute) || 'Wariant') + ': ' + plain(v.value))); }); info.appendChild(text); row.appendChild(info); var unit = item.prices && item.prices.currency_minor_unit; row.appendChild(make('div', 'oum-price', money(item.prices && item.prices.price, cart, unit))); var limits = item.quantity_limits || {}, step = Number(limits.multiple_of) || 1; var min = Number(limits.minimum) || 1, max = Number(limits.maximum) || 9999; var qty = make('div', 'oum-quantity'); var minus = make('button', '', '−'); minus.type = 'button'; minus.setAttribute('aria-label', 'Zmniejsz ilość'); var input = make('input'); input.type = 'number'; input.min = min; input.max = max; input.step = step; input.value = item.quantity; input.setAttribute('aria-label', 'Ilość produktu'); var plus = make('button', '', '+'); plus.type = 'button'; plus.setAttribute('aria-label', 'Zwiększ ilość'); if(limits.editable === false){ minus.hidden = true; plus.hidden = true; input.readOnly = true; } minus.disabled = item.quantity - step max; minus.addEventListener('click', function(){ update('/update-item', {key: item.key, quantity: Math.max(min, item.quantity - step)}); }); plus.addEventListener('click', function(){ update('/update-item', {key: item.key, quantity: Math.min(max, item.quantity + step)}); }); input.addEventListener('change', function(){ var q = Math.min(max, Math.max(min, Math.floor(Number(input.value) || min))); if(q !== item.quantity) update('/update-item', {key: item.key, quantity: q}); else input.value = q; }); qty.appendChild(minus); qty.appendChild(input); qty.appendChild(plus); var extras = make('div', 'oum-product-extras'); extras.appendChild(qty); row.appendChild(extras); // suma pozycji z VAT (przed rabatem), tak samo jak cena jednostkowa var it = item.totals || {}; row.appendChild(make('div', 'oum-row-total', money(sum(it.line_subtotal, it.line_subtotal_tax), cart, it.currency_minor_unit))); var remove = make('button', 'oum-remove', '×'); remove.type = 'button'; remove.title = 'Usuń produkt'; remove.setAttribute('aria-label', 'Usuń ' + name); remove.addEventListener('click', function(){ update('/remove-item', {key: item.key}); }); row.appendChild(remove); list.appendChild(row); }); var t = cart.totals || {}; var discount = sum(t.total_discount, t.total_discount_tax); $('oum-subtotal').textContent = money(sum(t.total_items, t.total_items_tax), cart); $('oum-discount-line').hidden = !(discount > 0); $('oum-discount').textContent = '− ' + money(discount, cart); renderShipping(cart); $('oum-total-value').textContent = money(t.total_price, cart); $('oum-tax').textContent = Number(t.total_tax || 0) > 0 ? '(w tym VAT ' + money(t.total_tax, cart) + ')' : ''; renderCoupons(cart); } /* ===== PODGLĄD W EDYTORZE ELEMENTORA ===== W edytorze nie ma Twojej sesji zakupowej, więc pokazujemy przykładowy produkt. Dzięki temu koszyk nigdy nie "znika" podczas edycji. Nic nie jest zapisywane w sklepie. */ if(editor){ $('oum-editor-note').textContent = 'Podgląd w edytorze Elementora – przykładowy produkt. Prawdziwy koszyk zobaczysz na stronie po dodaniu produktów.'; busy = true; // w edytorze przyciski koszyka nic nie zmieniają w sklepie render({ items: [{ key: 'demo', name: 'Przykładowy produkt', permalink: '#', images: [], quantity: 1, quantity_limits: {editable: false}, prices: {price: 4999, currency_minor_unit: 2}, totals: {line_subtotal: 4999, line_subtotal_tax: 0, currency_minor_unit: 2} }], totals: {currency_code: 'PLN', currency_minor_unit: 2, total_items: 4999, total_items_tax: 0, total_price: 4999, total_tax: 0, total_shipping: 0, total_shipping_tax: 0}, needs_shipping: false, shipping_rates: [], coupons: [] }); return; } function show(cart){ render(cart); if(window.jQuery) window.jQuery(document.body).trigger('wc_fragment_refresh'); // odświeża licznik koszyka w nagłówku } function load(){ showError(''); return call().then(function(cart){ // sklep nie zna kraju klienta → ustawiamy go, żeby WooCommerce policzył i doliczył dostawę if(cart.needs_shipping && !cart.has_calculated_shipping && !countryTried && (cart.items || []).length){ countryTried = true; var kraj = (cart.shipping_address && cart.shipping_address.country) || CONFIG.country; return call('/update-customer', 'POST', { shipping_address: {country: kraj}, billing_address: {country: (cart.billing_address && cart.billing_address.country) || kraj} }).then(show, function(){ show(cart); }); } show(cart); }); } function setBusy(on){ busy = on; root.classList.toggle('oum-busy', on); } function update(path, payload, method){ if(busy) return Promise.resolve(); setBusy(true); showError(''); return call(path, method || 'POST', payload) .then(load) .catch(function(e){ return load().catch(function(){}).then(function(){ showError(e.message); }); }) .then(function(){ setBusy(false); }); } $('oum-coupon-form').addEventListener('submit', function(e){ e.preventDefault(); var code = $('oum-coupon-input').value.trim(); if(!code){ showError('Wpisz kod rabatowy.'); return; } update('/apply-coupon', {code: code}).then(function(){ if(!$('oum-alert').textContent) $('oum-coupon-input').value = ''; }); }); $('oum-refresh').addEventListener('click', function(){ if(busy) return; setBusy(true); load().catch(function(e){ showError(e.message); }).then(function(){ setBusy(false); }); }); $('oum-clear').addEventListener('click', function(){ if(busy || !confirm('Czy na pewno chcesz usunąć wszystkie produkty z koszyka?')) return; update('/items', null, 'DELETE'); }); // gdy klient wraca przyciskiem "Wstecz", koszyk ładuje się od nowa window.addEventListener('pageshow', function(e){ if(e.persisted) load().catch(function(){}); }); setBusy(true); load().catch(function(error){ $('oum-loading').hidden = false; $('oum-loading').textContent = 'Nie udało się załadować koszyka.'; showError(error.message + ' Odśwież stronę albo spróbuj za chwilę.'); }).then(function(){ setBusy(false); }); } /* ===== START: na stronie, po załadowaniu i po każdym przerysowaniu w Elementorze ===== */ function boot(){ document.querySelectorAll('#oum-shop-cart').forEach(start); } boot(); if(document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot); window.addEventListener('load', boot); function hookElementor(){ try{ if(window.elementorFrontend && window.elementorFrontend.hooks && !window.__oumCartHooked){ window.__oumCartHooked = true; window.elementorFrontend.hooks.addAction('frontend/element_ready/global', boot); } }catch(e){} } hookElementor(); window.addEventListener('elementor/frontend/init', hookElementor); })();