Řazení produktů

2 položek celkem

Výpis produktů

AL-KO EKS 2400/40 elektrická řetězová pila
–14 %
2 790 Kč
112808
1319 cerpadlo ponorne procraft pn18 pn18
1 346 Kč
PN18

Ovládací prvky výpisu

2 položek celkem
×

Splátková kalkulačka ESSOX

(function () { 'use strict'; var TRIDA = 'zt-priceinfo'; var POPISEK = 'Nejnižší cena za posledních 30 dní'; // --------------------------------------------------------------- styly function vlozStyly() { if (document.getElementById('zt-priceinfo-css')) return; var s = document.createElement('style'); s.id = 'zt-priceinfo-css'; s.textContent = [ // sedí uvnitř velkého s cenou → zarovnat na střed textu a zmenšit // dopad na výšku řádku (line-height:0), aby cena nepodskočila '.zt-priceinfo-wrap{position:relative;display:inline-flex;vertical-align:middle;', 'margin-left:8px;line-height:0;font-size:0}', '.zt-priceinfo{width:18px;height:18px;min-width:18px;padding:0;border:1px solid currentColor;', 'border-radius:50%;background:transparent;color:#7a7a7a;font:600 11px/1 Arial,sans-serif;', 'cursor:pointer;display:inline-flex;align-items:center;justify-content:center;opacity:.75}', '.zt-priceinfo:hover,.zt-priceinfo:focus{opacity:1;color:#333;outline:none}', '.zt-priceinfo-tip{position:absolute;top:calc(100% + 8px);left:50%;transform:translateX(-50%);', 'z-index:60;min-width:210px;max-width:280px;padding:10px 12px;border-radius:6px;', 'background:#2c2c2c;color:#fff;font:400 13px/1.45 Arial,sans-serif;text-align:left;', 'box-shadow:0 4px 14px rgba(0,0,0,.22);display:none;white-space:normal}', '.zt-priceinfo-tip.is-open{display:block}', '.zt-priceinfo-tip::before{content:"";position:absolute;bottom:100%;margin-left:-6px;', 'border:6px solid transparent;border-bottom-color:#2c2c2c}', '.zt-priceinfo-tip b{display:block;font-weight:700;font-size:15px;margin-top:3px}', // šipka se posouvá spolu s bublinou (viz dorovnej()), aby po přisazení // k okraji obrazovky pořád mířila na ikonu '.zt-priceinfo-tip::before{left:calc(50% - var(--zt-posun,0px))}' ].join(''); document.head.appendChild(s); } // ------------------------------------------------------------- pomocné function text(el) { return el ? (el.textContent || '').replace(/ /g, ' ').trim() : ''; } /** Částka do bubliny: přeškrtnutá cena, jinak aktuální. */ function castka(wrap) { var prekrtnuta = text(wrap.querySelector('.price-standard')); if (prekrtnuta) return prekrtnuta; var aktualni = text(wrap.querySelector('.price-final-holder')) || text(wrap.querySelector('.price-final')); return aktualni; } /** * Přisadí bublinu tak, aby se vešla do okna. * Na úzkém displeji je cena vlevo, takže vystředěná bublina vyjíždí mimo * obrazovku — proto se posune a šipka se posune o stejný kus zpět. */ function dorovnej(tip) { tip.style.transform = 'translateX(-50%)'; tip.style.setProperty('--zt-posun', '0px'); var r = tip.getBoundingClientRect(); var okraj = 8; var posun = 0; if (r.left < okraj) posun = okraj - r.left; else if (r.right > window.innerWidth - okraj) posun = (window.innerWidth - okraj) - r.right; posun = Math.round(posun); if (posun) { tip.style.transform = 'translateX(calc(-50% + ' + posun + 'px))'; tip.style.setProperty('--zt-posun', posun + 'px'); } } function zavriVse(krome) { var vsechny = document.querySelectorAll('.zt-priceinfo-tip.is-open'); for (var i = 0; i < vsechny.length; i++) { if (vsechny[i] === krome) continue; vsechny[i].classList.remove('is-open'); var b = vsechny[i].parentNode.querySelector('.' + TRIDA); if (b) b.setAttribute('aria-expanded', 'false'); } } // ------------------------------------------------------------ vykreslení function vykresli(wrap) { var hodnota = castka(wrap); if (!hodnota) return; // bez ceny nemá bublina smysl var obal = wrap.querySelector('.zt-priceinfo-wrap'); if (!obal) { obal = document.createElement('span'); obal.className = 'zt-priceinfo-wrap'; var btn = document.createElement('button'); btn.type = 'button'; btn.className = TRIDA; btn.textContent = 'i'; btn.setAttribute('aria-label', POPISEK); btn.setAttribute('aria-expanded', 'false'); var tip = document.createElement('div'); tip.className = 'zt-priceinfo-tip'; tip.setAttribute('role', 'tooltip'); tip.innerHTML = ''; btn.addEventListener('click', function (e) { e.preventDefault(); e.stopPropagation(); var otevreno = tip.classList.toggle('is-open'); btn.setAttribute('aria-expanded', otevreno ? 'true' : 'false'); if (otevreno) { zavriVse(tip); dorovnej(tip); } }); obal.appendChild(btn); obal.appendChild(tip); // DOVNITŘ elementu s cenou, ne za něj — .price-final je v této šabloně // blokový, takže vedle položená ikona by spadla na vlastní řádek pod cenu. var cena = wrap.querySelector('.price-final') || wrap.querySelector('.price-final-holder'); if (cena) { cena.appendChild(obal); } else { wrap.appendChild(obal); } } // GUARD: zapisuj jen při reálné změně, jinak si observer spustí sám sebe var lEl = obal.querySelector('.zt-priceinfo-l'); var vEl = obal.querySelector('.zt-priceinfo-v'); if (lEl && lEl.textContent !== POPISEK) lEl.textContent = POPISEK; if (vEl && vEl.textContent !== hodnota) vEl.textContent = hodnota; } function projdi() { var bloky = document.querySelectorAll('.p-final-price-wrapper'); for (var i = 0; i < bloky.length; i++) vykresli(bloky[i]); } // -------------------------------------------------------------- start function start() { // jen detail produktu var jeDetail = document.querySelector('.p-detail, .p-info-wrapper') || (window.shoptet && window.shoptet.config && window.shoptet.config.pageType === 'productDetail'); if (!jeDetail) return; vlozStyly(); projdi(); document.addEventListener('click', function () { zavriVse(null); }); document.addEventListener('keydown', function (e) { if (e.key === 'Escape' || e.keyCode === 27) zavriVse(null); }); // cena se překresluje při přepnutí varianty var cil = document.querySelector('.p-info-wrapper') || document.body; try { var mo = new MutationObserver(function () { projdi(); }); mo.observe(cil, { childList: true, subtree: true, characterData: true }); } catch (e) { /* starý prohlížeč — stačí jednorázové vykreslení */ } } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', start); } else { start(); } })();