🚚 Doprava ZDARMA po celém Česku i Slovensku! 👉🏻 Do 2 dnů u Vás! 👉🏻 Záruka 5 let!
Naše články
Kalkulačka infrapanelu a konfigurátor potisku
07.09.2026
Kalkulačka infrapanelu a konfigurátor potisku
Spustili jsme nové online nástroje, které výrazně usnadní výběr infrapanelu. Spočítáte potřebný výkon i orientační provozní náklady, vyberete konkrétn... číst celé
Venkovní sálavé infrazářiče pro terasy a zahrady
09.09.2025
Venkovní sálavé infrazářiče pro terasy a zahrady
Objevte efektivní venkovní infrazářiče ByeCold pro terasy 20–30 m². Úsporné, okamžité teplo a nízká spotřeba energie. Ideální volba pro venkovní topen... číst celé
Zobrazit všechny články
  1. Úvod
  2. NÁSTĚNNÉ
  3. TOPNÝ OBRAZ | Konfigurátor potisku
  4. Panely vhodné k potisku + konfigurátor

Panely vhodné k potisku + konfigurátor

Vlastní design infrapanelu

Vytvořte si topný obraz z vlastní fotografie

Nahrajte vlastní fotografii nebo grafiku a vytvořte si infrapanel, který bude zároveň plnohodnotným topením i originálním obrazem. V konfigurátoru si jednoduše vyberete rozměr a panel, nastavíte požadovaný výřez a vše vložíte rovnou do košíku.

1
Vyberte panel

Zvolte požadovaný rozměr a vhodný infrapanel.

2
Nahrajte obrázek

Nahrajte vlastní fotografii nebo grafiku v co nejvyšší kvalitě.

3
Upravte výřez

Posuňte, přibližte nebo otočte obrázek přesně podle svých představ.

4
Objednejte

Panel i odpovídající potisk vložíte jedním kliknutím přímo do košíku.

🖼️
Kvalita fotografie

Pro nejlepší výsledek nahrajte originální fotografii nebo grafiku v co nejvyšší dostupné kvalitě.

🎨
Kontrola grafikem

Před výrobou podklady ještě zkontroluje náš grafik. Pokud bude potřeba něco upravit nebo upřesnit, kontaktujeme vás.

⏱️
Výroba přibližně 1 týden

Dodací lhůta panelu s vlastním potiskem je přibližně jeden týden. Může se lišit podle případných grafických úprav a rychlosti jejich odsouhlasení.

Tip: Pro nejlepší výsledek použijte originální fotografii, nikoliv obrázek stažený ze sociálních sítí nebo zaslaný přes aplikaci, která snižuje jeho kvalitu.

Nejprodávanější
1.
ByeCold | Volně stojící infrapanel | 350W | 60x60 cm | WiFi termostat | Výhřevnost 7m² | IGT2-A0606P
ByeCold | Volně stojící infrapanel | 350W | 60x60 cm | WiFi termostat | Výhřevnost 7m² | IGT2-A0606P
Serie "A"
SKLADEM - Dodání do 2 prac. dnů > 10 ks
  • Nejprodávanější
  • 🕹️ Dálkový ovladač 🕹️
  • 🖼️ Možnost potisku 🖼️
  • 🚚 Doprava ZDARMA! 🚚
5 799 Kč
2.
ByeCold | Nástěnný infrapanel | 350W | 60x60 cm | WiFi termostat | Výhřevnost 7m² | IGT2-A0606P
ByeCold | Nástěnný infrapanel | 350W | 60x60 cm | WiFi termostat | Výhřevnost 7m² | IGT2-A0606P
Serie "A"
SKLADEM - Dodání do 2 prac. dnů > 10 ks
  • Nejprodávanější
  • 🕹️ Dálkový ovladač 🕹️
  • 🖼️ Možnost potisku 🖼️
  • 🚚 Doprava ZDARMA! 🚚
5 299 Kč
3.
ByeCold | Nástěnný infrapanel | 580W | 90x60 cm | WiFi termostat | Výhřevnost 10,5m² | IGT2-A0906P
ByeCold | Nástěnný infrapanel | 580W | 90x60 cm | WiFi termostat | Výhřevnost 10,5m² | IGT2-A0906P
Serie "A"
SKLADEM - Dodání do 2 prac. dnů > 10 ks
  • Nejprodávanější
  • 🕹️ Dálkový ovladač 🕹️
  • 🖼️ Možnost potisku 🖼️
  • 🚚 Doprava ZDARMA! 🚚
6 290 Kč
Cena:
Výkon a Výhřevnost m²
WiFi
Termostat a ovládání
Šířka
Výška
Možnost potisku
Výkon a Výhřevnost m²
WiFi
Termostat a ovládání
Šířka
Výška
Umístění
Možnost potisku
Zobrazuji 1-16 z 16
strana
z 1
  • Nejprodávanější
  • 🕹️ Dálkový ovladač 🕹️
  • 🖼️ Možnost potisku 🖼️
  • 🚚 Doprava ZDARMA! 🚚
ByeCold | Nástěnný infrapanel | 350W | 60x60 cm | WiFi termostat | Výhřevnost 7m² | IGT2-A0606P
2 hodnocení
Nástěnný infrapanel ByeCold IGT2-A0606P 350 W pro vytápění cca do 7 m². Wi-Fi termostat 2v1, ovládání přes Smart Life i dálkový ovladač, rozměr 60 × 60 cm, horizontální i vertikální montáž a možnost vlastního potisku. Záruka 5 let na topný článek.
5 299 Kč
/ ks
5 299 Kč
/ ks
SKLADEM - Dodání do 2 prac. dnů > 10 ks
  • Nejprodávanější
  • 🕹️ Dálkový ovladač 🕹️
  • 🖼️ Možnost potisku 🖼️
  • 🚚 Doprava ZDARMA! 🚚
ByeCold | Volně stojící infrapanel | 350W | 60x60 cm | WiFi termostat | Výhřevnost 7m² | IGT2-A0606P
0 hodnocení
Volně stojící infrapanel ByeCold IGT2-A0606P 350 W s nožičkami pro vytápění cca do 7 m². Wi‑Fi termostat 2v1, Smart Life i dálkový ovladač, rozměr 60 × 60 cm, možnost nástěnného i volně stojícího použití. Možnost vlastního potisku. Záruka 5 let na topný článek.
5 799 Kč
/ ks
5 799 Kč
/ ks
SKLADEM - Dodání do 2 prac. dnů > 10 ks
  • Nejprodávanější
  • 🕹️ Dálkový ovladač 🕹️
  • 🖼️ Možnost potisku 🖼️
  • 🚚 Doprava ZDARMA! 🚚
ByeCold | Nástěnný infrapanel | 580W | 90x60 cm | WiFi termostat | Výhřevnost 10,5m² | IGT2-A0906P
6 hodnocení
Nástěnný infrapanel ByeCold IGT2-A0906P 580 W pro vytápění cca do 10,5 m². Wi-Fi termostat 2v1, ovládání přes Smart Life i dálkový ovladač, rozměr 90 × 60 cm, horizontální i vertikální montáž a možnost vlastního potisku. Záruka 5 let na topný článek.
6 290 Kč
/ ks
6 290 Kč
/ ks
SKLADEM - Dodání do 2 prac. dnů > 10 ks
  • 🕹️ Dálkový ovladač 🕹️
  • 🖼️ Možnost potisku 🖼️
  • 🚚 Doprava ZDARMA! 🚚
ByeCold | Volně stojící infrapanel | 580W | 90x60 cm | WiFi termostat | Výhřevnost 10,5m² | IGT2-A0906P
0 hodnocení
Volně stojící infrapanel ByeCold IGT2-A0906P 580 W s nožičkami pro vytápění cca do 10,5 m². Wi‑Fi termostat 2v1, Smart Life i dálkový ovladač, rozměr 90 × 60 cm, možnost nástěnného i volně stojícího použití. Možnost vlastního potisku. Záruka 5 let na topný článek.
6 790 Kč
/ ks
6 790 Kč
/ ks
SKLADEM - Dodání do 2 prac. dnů > 10 ks
  • Nejprodávanější
  • 🕹️ Dálkový ovladač 🕹️
  • 🖼️ Možnost potisku 🖼️
  • 🚚 Doprava ZDARMA! 🚚
ByeCold | Nástěnný infrapanel | 700W | 120x60 cm | WiFi termostat | Výhřevnost 12,5m² | IGT2-A1206P
9 hodnocení
Nástěnný infrapanel ByeCold IGT2-A1206P 700 W pro vytápění cca do 12,5 m². Wi-Fi termostat 2v1, ovládání přes Smart Life i dálkový ovladač, rozměr 120 × 60 cm, horizontální i vertikální montáž a možnost vlastního potisku. Záruka 5 let na topný článek.
7 490 Kč
/ ks
7 490 Kč
/ ks
SKLADEM - Dodání do 2 prac. dnů 9 ks
  • Nejprodávanější
  • 🕹️ Dálkový ovladač 🕹️
  • 🖼️ Možnost potisku 🖼️
  • 🚚 Doprava ZDARMA! 🚚
ByeCold | Volně stojící infrapanel | 700W | 120x60 cm | WiFi termostat | Výhřevnost 12,5m² | IGT2-A1206P
1 hodnocení
Volně stojící infrapanel ByeCold IGT2-A1206P 700 W s nožičkami pro vytápění cca do 12,5 m². Wi‑Fi termostat 2v1, Smart Life i dálkový ovladač, rozměr 120 × 60 cm, možnost nástěnného i volně stojícího použití. Možnost vlastního potisku. Záruka 5 let na topný článek.
7 990 Kč
/ ks
7 990 Kč
/ ks
SKLADEM - Dodání do 2 prac. dnů 10 ks
  • 🕹️ Dálkový ovladač 🕹️
  • 🖼️ Možnost potisku 🖼️
  • 🚚 Doprava ZDARMA! 🚚
ByeCold | Bezrámový infrapanel | 350W | 60x60 cm | WiFI termostat | Výhřevnost 6,4m² | IGT2-F0606
1 hodnocení
Bezrámový infrapanel ByeCold IGT2-F0606 350 W pro vytápění cca do 6,4 m². Wi-Fi termostat 2v1, Smart Life i dálkový ovladač, rozměr 60 × 60 cm, zaoblené hrany a minimalistický design. Možnost vlastního potisku. Záruka 5 let na topný článek.
6 490 Kč
/ ks
6 490 Kč
/ ks
SKLADEM - Dodání do 2 prac. dnů > 10 ks
  • 🕹️ Dálkový ovladač 🕹️
  • 🖼️ Možnost potisku 🖼️
  • 🚚 Doprava ZDARMA! 🚚
ByeCold | Bezrámový infrapanel  | 700W | 120x60 cm | WiFi termostat | Výhřevnost 12,7m² | IGT2-F1206
1 hodnocení
Bezrámový infrapanel ByeCold IGT2-F1206 700 W pro vytápění cca do 12,7 m². Wi-Fi termostat 2v1, Smart Life i dálkový ovladač, rozměr 120 × 60 cm, zaoblené hrany a minimalistický design. Možnost vlastního potisku. Záruka 5 let na topný článek.
9 290 Kč
/ ks
9 290 Kč
/ ks
SKLADEM - Dodání do 2 prac. dnů > 10 ks
  • 🕹️ Dálkový ovladač 🕹️
  • 🖼️ Možnost potisku 🖼️
  • 🚚 Doprava ZDARMA! 🚚
ByeCold | Zrcadlový infrapanel | 320W | 60x60 cm | WiFi termostat | Dálkový ovladač | Výhřevnost 5,8m² | IGT2-G0606M
1 hodnocení
Zrcadlový infrapanel ByeCold IGT2-G0606M 320 W pro vytápění cca do 5,8 m². Wi-Fi termostat 2v1, mobilní aplikace a dálkový ovladač, rozměr 60 × 60 cm, bezrámové skleněné provedení a nástěnná montáž. Záruka 5 let na topný článek.
7 999 Kč
/ ks
7 999 Kč
/ ks
SKLADEM - Dodání do 2 prac. dnů > 10 ks
  • 🕹️ Dálkový ovladač 🕹️
  • 🖼️ Možnost potisku 🖼️
  • 🚚 Doprava ZDARMA! 🚚
ByeCold | Skleněný bílý infrapanel | 320W | 60x60 cm | WiFi termostat | Dálkový ovladač | Výhřevnost 5,8m² | IGT2-G0606W
0 hodnocení
Bílý skleněný infrapanel ByeCold IGT2-G0606W 320 W pro vytápění cca do 5,8 m². Wi‑Fi termostat 2v1, Smart Life a dálkový ovladač, rozměr 60 × 60 cm, bezrámové tvrzené sklo a nástěnná montáž. Možnost vlastního potisku. Záruka 5 let na topný článek.
7 249 Kč
/ ks
7 249 Kč
/ ks
Na objednávku (dodáme za 2-3 měsíce)
  • 🕹️ Dálkový ovladač 🕹️
  • 🖼️ Možnost potisku 🖼️
  • 🚚 Doprava ZDARMA! 🚚
ByeCold | Skleněný černý infrapanel | 700W | 120x60 cm | WiFi termostat | Dálkový ovladač | Výhřevnost 12,5m² | IGT2-G1206B
0 hodnocení
Černý skleněný infrapanel ByeCold IGT2-G1206B 700 W pro vytápění cca do 12,5 m². Wi‑Fi termostat 2v1, Smart Life a dálkový ovladač, rozměr 120 × 60 cm, bezrámový design, nástěnná montáž a možnost vlastního potisku. Záruka 5 let na topný článek.
10 299 Kč
/ ks
10 299 Kč
/ ks
SKLADEM - Dodání do 2 prac. dnů > 10 ks
  • 🕹️ Dálkový ovladač 🕹️
  • 🖼️ Možnost potisku 🖼️
  • 🚚 Doprava ZDARMA! 🚚
ByeCold | Zrcadlový infrapanel | 700W | 120x60 cm | WiFi termostat | Dálkový ovladač | Výhřevnost 12,5m² | IGT2-G1206M
0 hodnocení
Zrcadlový infrapanel ByeCold IGT2-G1206M 700 W pro vytápění cca do 12,5 m². Wi‑Fi termostat 2v1, Smart Life a dálkový ovladač, rozměr 120 × 60 cm, bezrámový skleněný design a nástěnná montáž. Záruka 5 let na topný článek.
11 799 Kč
/ ks
11 799 Kč
/ ks
SKLADEM - Dodání do 2 prac. dnů > 10 ks
  • 🕹️ Dálkový ovladač 🕹️
  • 🖼️ Možnost potisku 🖼️
  • 🚚 Doprava ZDARMA! 🚚
ByeCold | Skleněný bílý infrapanel | 700W | 120x60 cm | WiFi termostat | Dálkový ovladač | Výhřevnost 12,5m² | IGT2-G1206W
0 hodnocení
Bílý skleněný infrapanel ByeCold IGT2-G1206W 700 W pro vytápění cca do 12,5 m². Wi‑Fi termostat 2v1, Smart Life a dálkový ovladač, rozměr 120 × 60 cm, bezrámové tvrzené sklo a nástěnná montáž. Možnost vlastního potisku. Záruka 5 let na topný článek.
10 299 Kč
/ ks
10 299 Kč
/ ks
SKLADEM - Dodání do 2 prac. dnů > 10 ks
  • 🚚 Doprava ZDARMA! 🚚
Potisk panelu 60x60cm
0 hodnocení
Profesionální potisk infrapanelu do rozměru 60 × 60 cm vlastní fotografií nebo vybraným motivem. Pro panely s rámečkem, bezrámové i vybrané skleněné panely. Doporučená kvalita podkladu min. 300 dpi, návrh před tiskem schvalujete; dodání cca 1 týden.
1 740 Kč
/ ks
1 740 Kč
/ ks
Skladem > 10 ks
  • 🚚 Doprava ZDARMA! 🚚
Potisk panelu 90x60cm
1 hodnocení
Profesionální potisk infrapanelu do rozměru 90 × 60 cm vlastní fotografií nebo vybraným motivem. Pro panely s rámečkem, bezrámové i vybrané skleněné panely. Doporučená kvalita podkladu min. 300 dpi, návrh před tiskem schvalujete; dodání cca 1 týden.
2 090 Kč
/ ks
2 090 Kč
/ ks
Skladem > 10 ks
  • 🚚 Doprava ZDARMA! 🚚
Potisk panelu 120x60cm
1 hodnocení
Profesionální potisk infrapanelu do rozměru 120 × 60 cm vlastní fotografií nebo vybraným motivem. Pro panely s rámečkem, bezrámové i vybrané skleněné panely. Doporučená kvalita podkladu min. 300 dpi, návrh před tiskem schvalujete; dodání cca 1 týden.
2 780 Kč
/ ks
2 780 Kč
/ ks
Skladem > 10 ks
strana
z 1

Naše nejnovější články

Kalkulačka infrapanelu a konfigurátor potisku
07.09.2026
Kalkulačka infrapanelu a konfigurátor potisku
Spustili jsme nové online nástroje, které výrazně usnadní výběr infrapanelu. Spočítáte potřebný výkon i orientační provozní náklady, vyberete konkrétn... číst celé
Venkovní sálavé infrazářiče pro terasy a zahrady
09.09.2025
Venkovní sálavé infrazářiče pro terasy a zahrady
Objevte efektivní venkovní infrazářiče ByeCold pro terasy 20–30 m². Úsporné, okamžité teplo a nízká spotřeba energie. Ideální volba pro venkovní topen... číst celé
Úsporné Vytápění Paneláku Bez Plynu | TopnýPanel.eu
27.05.2025
Úsporné Vytápění Paneláku Bez Plynu | TopnýPanel.eu
Objevte úsporné řešení vytápění paneláku bez plynu s infrapanely ByeCold. Snižte náklady až o 40 % a zvyšte komfort bydlení. číst celé
Infratopení pro Astmatiky: Zdravé Řešení Bez Prachu | TopnyPanel
27.05.2025
Infratopení pro Astmatiky: Zdravé Řešení Bez Prachu | TopnyPanel
Objevte výhody infračerveného vytápění pro astmatiky. Eliminujte prach, plísně a suchý vzduch. Úsporné a zdravé řešení pro váš domov. číst celé
Hodnocení zákazníků

Ověřené recenze produktů a obchodu

Skutečné zkušenosti zákazníků s infrapanely ByeCold a nákupem na TopnýPanel.eu.

Zobrazit recenze obchodu →
Ověřený nákup – hodnocení pochází z ověřených recenzí na Heurece.
Možnosti platby

Platební služby zajišťuje platební brána Comgate:

comgate platby

Nákup na splátky zajišťuje:

homecredit logo

Nejnovější recenze

Ověřený zákazník: Jiří

★ ★ ★ ★ ★
Doporučuje obchod 100%

Topný panel potiskli perfektně vlastní fotografií za tři dny. S výrobkem a službami jsem byl maximálně spokojený. Mohu jen doporučit.

Zobrazit další recenze →

Kontaktujte nás
Logo
TopnýPanel.eu | Infračervené Topné Panely
Martin
Martin
Po-Pá, 8-17 hod.
Všechna práva vyhrazena © 2024 - TopnýPanel.eu - Infračervené Topné Panely, Zrcadla a Obrazy
Vytvořeno na Eshop-rychle.czEshop-rychle.cz
/** * TopnyPanel.eu – automatické připojení podkladů potisku k objednávce * Verze 4.0 – robustní pro vícekrokový checkout Eshop-rychle * * Požadovaná pole v objednávkovém formuláři: * 1) Podklady k potisku – originál * 2) Podklady k potisku – náhled * * DŮLEŽITÉ: * - tento kód vložte GLOBÁLNĚ do vlastního JS / měřicího kódu, * - starší verzi hooku úplně smažte, * - kód nic nevkládá do layoutu a nic nepíše do poznámky objednávky. */ (function(){ 'use strict'; const VERSION = '4.0'; const KEY = 'tpPendingPrintDesign'; const DB_NAME = 'TopnyPanelPrintConfigurator'; const STORE = 'designs'; let running = false; let retryTimer = null; let observerTimer = null; window.__TP_PRINT_ORDER_HOOK_VERSION__ = VERSION; function norm(v){ return String(v || '') .normalize('NFD') .replace(/[\u0300-\u036f]/g,'') .toLowerCase() .replace(/[^a-z0-9]+/g,' ') .replace(/\s+/g,' ') .trim(); } function readPending(){ try{ return JSON.parse(localStorage.getItem(KEY) || 'null'); }catch(_){ return null; } } function pageType(){ try{ return typeof window.getEshopDataLayer === 'function' ? window.getEshopDataLayer('pageType') : null; }catch(_){ return null; } } function openDb(){ return new Promise((resolve,reject)=>{ const req = indexedDB.open(DB_NAME,1); req.onupgradeneeded = ()=>{ const db = req.result; if(!db.objectStoreNames.contains(STORE)){ db.createObjectStore(STORE,{keyPath:'id'}); } }; req.onsuccess = ()=>resolve(req.result); req.onerror = ()=>reject(req.error || new Error('IndexedDB není dostupné.')); }); } async function getRecord(id){ const db = await openDb(); const record = await new Promise((resolve,reject)=>{ const tx = db.transaction(STORE,'readonly'); const req = tx.objectStore(STORE).get(id); req.onsuccess = ()=>resolve(req.result || null); req.onerror = ()=>reject(req.error); }); db.close(); return record; } async function deleteRecord(id){ try{ const db = await openDb(); await new Promise((resolve,reject)=>{ const tx = db.transaction(STORE,'readwrite'); tx.objectStore(STORE).delete(id); tx.oncomplete = resolve; tx.onerror = ()=>reject(tx.error); }); db.close(); }catch(_){ } } function branchVisible(el){ let node = el.parentElement; while(node && node !== document.body){ if(node.hidden || node.getAttribute('aria-hidden') === 'true'){ return false; } try{ const s = getComputedStyle(node); if(s.display === 'none' || s.visibility === 'hidden'){ return false; } }catch(_){ } node = node.parentElement; } return true; } function labelText(input){ let text = [ input.name, input.id, input.title, input.placeholder, input.getAttribute('aria-label'), input.getAttribute('data-name'), input.getAttribute('data-label') ].filter(Boolean).join(' '); if(input.id){ try{ const id = window.CSS && typeof CSS.escape === 'function' ? CSS.escape(input.id) : input.id; const label = document.querySelector('label[for="' + id + '"]'); if(label) text += ' ' + (label.textContent || ''); }catch(_){ } } // Eshop-rychle může mít text pole v tlačítku nebo vedle inputu. let node = input.parentElement; let depth = 0; while(node && node !== document.body && depth < 5){ const t = String(node.textContent || ''); if(t && t.length < 1200){ text += ' ' + t; } node = node.parentElement; depth++; } return norm(text); } function findPrintSection(){ const candidates = document.querySelectorAll( 'h1,h2,h3,h4,h5,h6,legend,strong,label,.form-group,.form-row,.field,.form-item,.form__row' ); let anchor = null; for(const el of candidates){ const t = norm(el.textContent || ''); if(t.includes('topny obraz') && t.includes('potisk')){ anchor = el; break; } } if(!anchor) return null; let node = anchor; while(node && node !== document.body){ const count = node.querySelectorAll ? node.querySelectorAll('input[type="file"]').length : 0; if(count >= 2 && count <= 8){ return node; } node = node.parentElement; } return null; } function scoreInput(input,kind){ const t = labelText(input); let score = 0; if(/podklad|potisk|tisk|grafik/.test(t)) score += 8; if(kind === 'original'){ if(/original|puvodn|zdroj|fotograf|foto/.test(t)) score += 30; if(/nahled|preview|vizual/.test(t)) score -= 25; }else{ if(/nahled|navrh|preview|vizual/.test(t)) score += 30; if(/original|puvodn|zdroj/.test(t)) score -= 25; } if(branchVisible(input)) score += 4; return {input,text:t,score}; } function chooseTargets(){ const section = findPrintSection(); const all = Array.from( (section || document).querySelectorAll('input[type="file"]') ); if(!all.length){ return {all:[],active:[],original:null,preview:null,section}; } let active = all.filter(branchVisible); if(!active.length) active = all; // Nejspolehlivější případ z aktuálního checkoutu: // v aktivní sekci jsou přesně 2 uploady v pořadí originál -> náhled. if(active.length === 2){ return { all, active, original:active[0], preview:active[1], section }; } // Pokud je v DOM více kopií, nejprve zkusíme labely. const origRank = active .map(x=>scoreInput(x,'original')) .sort((a,b)=>b.score-a.score); const original = origRank.length && origRank[0].score >= 12 ? origRank[0].input : null; const prevRank = active .filter(x=>x !== original) .map(x=>scoreInput(x,'preview')) .sort((a,b)=>b.score-a.score); const preview = prevRank.length && prevRank[0].score >= 12 ? prevRank[0].input : null; if(original && preview){ return {all,active,original,preview,section}; } // Fallback pro 4 pole (typicky dvě varianty checkout formuláře): // použijeme první aktivní dvojici. Pokud jsou všechny aktivní, // vezmeme 1. a 2. input, protože Eshop-rychle je vykresluje originál -> náhled. if(active.length >= 2){ return { all, active, original:active[0], preview:active[1], section }; } return {all,active,original:null,preview:null,section}; } function cleanName(name){ return String(name || 'foto.jpg') .replace(/[^\p{L}\p{N}._-]+/gu,'_') .slice(0,120) || 'foto.jpg'; } function asFile(blob,name,type){ if(blob instanceof File && blob.name === name){ return blob; } return new File([blob],name,{ type:type || (blob && blob.type) || 'application/octet-stream', lastModified:Date.now() }); } function setFile(input,file){ try{ if( input.files && input.files.length && input.files[0].name === file.name && input.files[0].size === file.size ){ return true; } const dt = new DataTransfer(); dt.items.add(file); input.files = dt.files; input.dispatchEvent(new Event('input',{bubbles:true})); input.dispatchEvent(new Event('change',{bubbles:true})); input.dispatchEvent(new Event('blur',{bubbles:true})); return !!( input.files && input.files.length === 1 && input.files[0].name === file.name ); }catch(e){ console.error('[TopnyPanel hook] Nelze vložit soubor:',e); return false; } } function scheduleRetry(ms){ clearTimeout(retryTimer); retryTimer = setTimeout(attach,ms || 700); } async function attach(){ if(running) return; const pending = readPending(); if(!pending) return; const pt = pageType(); if(pt === 'thankYou'){ localStorage.removeItem(KEY); await deleteRecord(pending.id); return; } running = true; try{ const record = await getRecord(pending.id); if(!record || !record.original || !record.preview){ console.error('[TopnyPanel hook] Chybí uložené podklady návrhu',pending.id,record); scheduleRetry(1200); return; } const targets = chooseTargets(); // Na dopravě / platbě žádná pole nejsou – jen čekáme. if(!targets.all.length){ scheduleRetry(900); return; } if(!targets.original || !targets.preview){ console.warn('[TopnyPanel hook] Uploadovací pole jsou na stránce, ale dvojici se zatím nepodařilo určit.',{ all:targets.all.length, active:targets.active.length, labels:targets.all.map(labelText) }); scheduleRetry(900); return; } const originalName = pending.id + '-original-' + cleanName( (record.original && record.original.name) || (record.metadata && record.metadata.source && record.metadata.source.name) || 'foto.jpg' ); const previewName = pending.id + '-nahled.jpg'; const originalFile = asFile( record.original, originalName, (record.original && record.original.type) || (record.metadata && record.metadata.source && record.metadata.source.type) ); const previewFile = asFile( record.preview, previewName, 'image/jpeg' ); const okOriginal = setFile(targets.original,originalFile); const okPreview = setFile(targets.preview,previewFile); console.log('[TopnyPanel hook]',{ version:VERSION, design:pending.id, inputs:targets.all.length, active:targets.active.length, original:okOriginal ? originalName : false, preview:okPreview ? previewName : false }); // Checkout se může dynamicky překreslit a file inputy znovu vytvořit. // Proto znovu ověříme stav po chvíli. if(!okOriginal || !okPreview){ scheduleRetry(700); }else{ scheduleRetry(1800); } }catch(e){ console.error('[TopnyPanel order hook]',e); scheduleRetry(1200); }finally{ running = false; } } function schedule(){ clearTimeout(observerTimer); observerTimer = setTimeout(attach,220); } if(document.readyState === 'loading'){ document.addEventListener('DOMContentLoaded',attach,{once:true}); }else{ attach(); } document.addEventListener('EshopDataLayerUpdated',schedule); window.addEventListener('pageshow',schedule); new MutationObserver(schedule).observe(document.documentElement,{ childList:true, subtree:true }); })();