/* ================================================================ 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 }; ================================================================ */ (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 trh = (location.pathname.match(/^\/(sk|cz|hu|pl|en|com)(\/|$)/) || [])[1] || 'sk'; if (trh === 'com') trh = 'en'; 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(); })();