/* ================================================================ AGS 92 B2B — jazykové štítky (AKCIA / NOVINKA / TIP / VÝPREDAJ / VYSTAVENÝ KUS) pre všetky trhy. Čo robí: štítok je v šablóne ui42 obrázok PNG so slovenským nápisom napečeným v grafike; jazykový variant existuje len pre SK a CZ, a len pri AKCII. Tento skript prekreslí iba 'background-image' na inline SVG s textom v jazyku trhu. HTML, rozmery ani obsah elementu sa nemenia, preto číslo zľavy ostáva presne tam, kde ho kreslí šablóna. Text berie z tabuľky TEXTY nižšie. Atribút 'title' zo šablóny sa používa len ako záloha pre trh, ktorý v tabuľke nie je. DÔVOD (overené 29. 9. 2026 v Nástroje -> Preklady, kolekcia eshop): preklady v BUXUSe majú chyby - cz.akcia = "AKCIA" a cz.vypredaj = "VÝPREDAJ" (slovensky), pl.tip = "RODZAJ", en.tip = "TYP". Keby sme brali text z 'title', Čech by po zapnutí videl slovenské AKCIA namiesto dnešného správneho obrázka AKCE. Texty sa dajú prepísať aj bez zmeny súboru, v Container (22): window.agsStickery = { texty: { pl: { tip: 'POLECANE' } } }; Vypnutie: zmazať riadok v Container (22) → Content after. Vypnutie jedného trhu: window.agsStickery = { hu:false }; stickery5 (29. 10. 2026): DETAIL PRODUKTU – šablóna ui42 kreslí na detaile štítok ako text so žltým pozadím („akcia 59%“, inline style background-color: yellow). Skript ho nahradí rovnakým okrúhlym štítkom ako na kartičkách (trieda discount-numbered + bublina s číslom), číslo berie z textu šablóny (nič sa nepočíta ani nesťahuje). SK = pôvodný PNG šablóny (ako kartičky), ostatné trhy prekreslí časť nižšie v jazyku trhu. Platí aj pre trh, ktorý má redraw vypnutý (sk:false). Vypnutie len detailu: window.agsStickery = { ..., detail:false }. Číslo v bublinke (kartičky aj detail): písmo Figtree namiesto Times (šablóna odkazuje na Gotham-Book, ktorý sa nenačítava). ================================================================ */ (function () { 'use strict'; var CFG = window.agsStickery || {}; var FARBA = { sale: '#FDB3BF', new: '#22D8D6', tip: '#93A8AF', clearance: '#FAB330', exposed: '#79A2C7' }; /* zdroj pravdy pre nápisy; prepísateľné cez window.agsStickery.texty Jazyková revízia 29. 9. 2026: EN 'TIP' znamená sprepitné/radu, nie odporúčanie -> RECOMMENDED; EN 'DISPLAY PIECE' -> EX-DISPLAY (bežný retailový termín); PL 'EGZEMPLARZ EKSPOZYCYJNY' je správne, ale dlhé -> 'EKSPOZYCJA'; HU 'BEMUTATÓ DARAB' -> 'KIÁLLÍTOTT DARAB' (dve slová, správne sa zalomí). */ var TEXTY = { sk: { sale:'AKCIA', new:'NOVINKA', tip:'TIP', clearance:'VÝPREDAJ', exposed:'VYSTAVENÝ KUS' }, cz: { sale:'AKCE', new:'NOVINKA', tip:'TIP', clearance:'VÝPRODEJ', exposed:'VYSTAVENÝ KUS' }, hu: { sale:'AKCIÓ', new:'ÚJDONSÁG', tip:'TIPP', clearance:'KIÁRUSÍTÁS', exposed:'KIÁLLÍTOTT DARAB' }, pl: { sale:'PROMOCJA', new:'NOWOŚĆ', tip:'POLECAMY', clearance:'WYPRZEDAŻ', exposed:'EKSPOZYCJA' }, en: { sale:'SALE', new:'NEW', tip:'RECOMMENDED', clearance:'CLEARANCE', exposed:'EX-DISPLAY' } }; /* názov súboru v šablóne → druh štítku + či má bublinu na číslo */ var PODLA_SUBORU = [ [/sale-numbered|akcia-numbered/i, 'sale', true ], [/clearance-sale-numbered|clearance/i, 'clearance', true ], [/vystaveny-kus|exposed/i, 'exposed', true ], [/akcia\.png|akce\.png|sale[-.]/i, 'sale', false], [/novinka/i, 'new', false], [/tip\./i, 'tip', false] ]; var FONT = '"Helvetica Neue", Helvetica, Arial, sans-serif'; var MAXW = 60, MAXW2 = 54, CAP = 10.2, CAPRATIO = 0.717; var TRACK = 1.36, OP_TEXT = 0.92, OP_KRUZOK = 0.5, HR_KRUZOK = 1.3, DASH = '1.7 1.5'; var trhDom = (location.pathname.match(/^\/(sk|cz|hu|pl|en|com)(\/|$)/) || [])[1] || 'sk'; var trh = trhDom === 'com' ? 'en' : trhDom; /* ---------- DETAIL: žltý textový štítok šablóny → okrúhly štítok ---------- */ var DETAIL_DRUH = [ [/v[yý]pred|v[yý]prod|ki[aá]rus|wyprzed|clearance/i, 'clearance-sale-numbered', 'clearance'], [/vystav|kiáll|ekspoz|display|exposed/i, 'exposed-piece-numbered', 'exposed'], [/.*/, 'discount-numbered', 'sale'] ]; function detail() { if (CFG.detail === false) return; var spany = document.querySelectorAll('.main-product-image .sticker > span[style]'), i, s, t, m, cls, j, n, w; for (i = 0; i < spany.length; i++) { s = spany[i]; if (!/yellow|#ff0\b|#ffff00/i.test(s.getAttribute('style') || '')) continue; t = (s.textContent || '').replace(/\s+/g, ' ').trim(); m = t.match(/(\d+(?:[.,]\d+)?)\s*%/); if (!m) continue; /* bez čísla nič nemeníme */ var druhD = 'sale'; for (j = 0; j < DETAIL_DRUH.length; j++) if (DETAIL_DRUH[j][0].test(t)) { cls = DETAIL_DRUH[j][1]; druhD = DETAIL_DRUH[j][2]; break; } n = document.createElement('span'); n.className = cls + ' ' + cls + '-' + trhDom; n.setAttribute('title', ((TEXTY[trh] || {})[druhD] || t)); n.setAttribute('data-ags-detail', '1'); w = document.createElement('span'); w.className = 'sticker-percentage-wrapper'; w.appendChild(document.createTextNode('-' + m[1].replace(',', '.').replace(/\.0+$/, ''))); var z = document.createElement('span'); z.className = 'sticker-percentage-sign'; z.textContent = '%'; w.appendChild(z); n.appendChild(w); s.parentNode.replaceChild(n, s); try { (window.dataLayer = window.dataLayer || []).push({ event: 'ags_sticker_detail', ags_trh: trhDom, ags_zlava: m[1] }); } catch (e) {} } } /* číslo v bublinke: šablóna chce font Gotham-Book, ktorý portál nenačítava → prehliadač kreslil pätkové písmo (Times). Záloha na Figtree (písmo portálu, už načítané hlavičkou) – platí pre kartičky aj detail, nič sa nesťahuje navyše. */ try { if (!document.getElementById('ags-st-font')) { var css = document.createElement('style'); css.id = 'ags-st-font'; css.textContent = 'span[class] > span.sticker-percentage-wrapper{font-family:Gotham-Book,Figtree,"Helvetica Neue",Arial,sans-serif}'; (document.head || document.documentElement).appendChild(css); } } catch (e) {} detail(); if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', detail); if (CFG[trh] === false) return; /* voliteľné prepísanie textov z Container (22) */ if (CFG.texty && CFG.texty[trh]) { var vlastne = CFG.texty[trh], k; TEXTY[trh] = TEXTY[trh] || {}; for (k in vlastne) if (Object.prototype.hasOwnProperty.call(vlastne, k)) TEXTY[trh][k] = vlastne[k]; } var _ctx = null, _cache = {}; function sirka(txt, px, tr) { if (!_ctx) _ctx = document.createElement('canvas').getContext('2d'); _ctx.font = '300 ' + px + 'px ' + FONT; return _ctx.measureText(txt).width + tr * (txt.length - 1); } function vypocet(riadky, maxw) { var cap = CAP, px = cap / CAPRATIO, tr = TRACK, i, j, max; for (i = 0; i < 40; i++) { max = 0; for (j = 0; j < riadky.length; j++) max = Math.max(max, sirka(riadky[j], px, tr)); if (max <= maxw) break; cap -= 0.25; px = cap / CAPRATIO; tr = TRACK * (cap / CAP); } return { px: px, tr: tr }; } /* dlhý text s medzerou rozdelí na dva riadky čo najbližšie k stredu; zalomí len vtedy, keď má každý riadok aspoň 3 znaky — inak by vznikol osamotený predložkový riadok typu „Z / EKSPOZYCJI" */ function nariadky(text) { text = String(text).trim().replace(/\s+/g, ' '); if (text.length <= 10 || text.indexOf(' ') < 0) return [text]; var stred = text.length / 2, naj = -1, i; for (i = 0; i < text.length; i++) { if (text.charAt(i) !== ' ') continue; if (i < 3 || text.length - i - 1 < 3) continue; if (naj < 0 || Math.abs(i - stred) < Math.abs(naj - stred)) naj = i; } if (naj < 0) return [text]; return [text.slice(0, naj), text.slice(naj + 1)]; } function esc(s) { return String(s).replace(/&/g, '&').replace(//g, '>'); } function svg(druh, text, sBublinou) { var kluc = druh + '|' + text + '|' + (sBublinou ? 1 : 0); if (_cache[kluc]) return _cache[kluc]; var farba = FARBA[druh] || FARBA.sale; var riadky = nariadky(text); var dvoj = riadky.length > 1; var H = sBublinou ? 96 : 85; var m = vypocet(riadky, dvoj ? MAXW2 : MAXW); var zakl = dvoj ? (sBublinou ? [36, 52] : [37, 53]) : [49]; var o = '' + '' + ''; if (sBublinou) { o += '' + ''; } for (var i = 0; i < riadky.length; i++) { o += '' + esc(riadky[i]) + ''; } o += ''; _cache[kluc] = 'url("data:image/svg+xml;charset=utf-8,' + encodeURIComponent(o) + '")'; return _cache[kluc]; } var SELEKTOR = '[class*="discount"],[class*="new-product"],[class*="clearance"],' + '[class*="exposed-piece"],[class*="tip"]'; function prekresli(koren) { var prvky = (koren || document).querySelectorAll(SELEKTOR), i, j, e, bg, druh, bublina, text; for (i = 0; i < prvky.length; i++) { e = prvky[i]; if (e.getAttribute('data-ags-sticker')) continue; /* poistka proti falošným zhodám (napr. tooltipy s triedou tip): meníme len prvky, ktoré majú na pozadí obrázok zo /stickers/ */ bg = getComputedStyle(e).backgroundImage || ''; if (bg.indexOf('/stickers/') < 0) continue; druh = null; bublina = false; for (j = 0; j < PODLA_SUBORU.length; j++) { if (PODLA_SUBORU[j][0].test(bg)) { druh = PODLA_SUBORU[j][1]; bublina = PODLA_SUBORU[j][2]; break; } } if (!druh) continue; /* tabuľka má prednosť pred title — preklady v BUXUSe sú miestami chybné */ text = ((TEXTY[trh] || {})[druh] || '').trim(); if (!text) text = (e.getAttribute('title') || '').trim(); if (!text) continue; e.style.backgroundImage = svg(druh, text.toUpperCase(), bublina); e.setAttribute('data-ags-sticker', '1'); } } function start() { prekresli(document); /* výpis produktov sa dopĺňa cez AJAX (filtre, stránkovanie, kolotoče) */ if (window.MutationObserver) { var cakam = null; new MutationObserver(function () { if (cakam) return; cakam = setTimeout(function () { cakam = null; prekresli(document); }, 120); }).observe(document.documentElement, { childList: true, subtree: true }); } } if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', start); else start(); })();