console.log('[HeurekaWidget] loaded'); (function () { function sleep(ms){ return new Promise(r => setTimeout(r, ms)); } function escapeHtml(str){ return String(str) .replace(/&/g,'&') .replace(//g,'>') .replace(/"/g,'"') .replace(/'/g,'''); } async function fetchData(){ const res = await fetch('https://firemnivino.winehouse.cz/wp-content/heureka/reviews.php', { cache: 'no-store' }); if (!res.ok) throw new Error('fetch failed: ' + res.status); const data = await res.json(); if (!data?.items?.length) throw new Error('no items'); return data; } function ensureTarget(block){ const host = block.querySelector('.heureka__reviews__block__outer') || block; let target = host.querySelector('.heureka__reviews__dynamic'); if (!target) { target = document.createElement('div'); target.className = 'heureka__reviews__dynamic'; const overview = host.querySelector('.heureka__reviews__block__overview'); if (overview && overview.parentNode) { overview.insertAdjacentElement('afterend', target); } else { host.appendChild(target); } } return target; } function render(target, items){ target.innerHTML = items.slice(0,3).map(r => `

${escapeHtml(r.text || '')}

osoba thumbnail

${escapeHtml(r.author || 'Ověřený zákazník')}

`).join(''); } async function runOnce(){ const block = document.querySelector('.heureka__reviews__block'); if (!block) return false; const target = ensureTarget(block); const data = await fetchData(); render(target, data.items); console.log('[HeurekaWidget] rendered OK'); return true; } async function start(){ // běž několikrát – blok se může objevit později (přesun vaším JS) for (let i=0; i<160; i++){ // ~40s (160 * 250ms) try { const ok = await runOnce(); if (ok) return; } catch (e) { console.error('[HeurekaWidget] error', e); // když už blok existuje a fetch padá, nemá smysl čekat dlouho // ale necháme pár pokusů } await sleep(250); } console.warn('[HeurekaWidget] give up (block not found)'); } // spustit hned, bez čekání na DOMContentLoaded (kvůli bannerům) start(); })();