/* ================================================================ 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 prednostne z atribútu 'title', ktorý šablóna už dnes vypĺňa správnym prekladom (na HU title="AKCIÓ"). Tabuľka nižšie je len poistka, keby 'title' chýbal. 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' }; /* poistka, keď šablóna nedodá title */ 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:'BEMUTATÓ DARAB' }, pl: { sale:'PROMOCJA', new:'NOWOŚĆ', tip:'POLECAMY', clearance:'WYPRZEDAŻ', exposed:'EGZEMPLARZ EKSPOZYCYJNY' }, en: { sale:'SALE', new:'NEW', tip:'TIP', clearance:'CLEARANCE', exposed:'DISPLAY PIECE' } }; /* 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; 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 */ 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 (naj < 0 || Math.abs(i - stred) < Math.abs(naj - stred)) naj = i; } 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; text = (e.getAttribute('title') || '').trim(); if (!text) text = (TEXTY[trh] || TEXTY.sk)[druh] || ''; 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(); })();