Refrescar la app
({ label: document.getElementById('footerLabel'+i), link: document.getElementById('footerLink'+i), emoji: document.getElementById('footerEmoji'+i), file: document.getElementById('footerIcon'+i) })); // Persist + load function save(){ try{ const payload = els.map((o,i)=>({ label:o.label?.value||'', link:o.link?.value||'', emoji:o.emoji?.value||'', icon:o.file && o.file.dataset.previewData || '' })); localStorage.setItem(STORAGE_KEY, JSON.stringify(payload)); }catch(e){} } function load(){ try{ const raw = localStorage.getItem(STORAGE_KEY); return raw? JSON.parse(raw): null; }catch(e){ return null; } } function emojiDataURL(ch){ if(!ch) return ''; const svg = `
${ch}
`; return 'data:image/svg+xml;utf8,' + encodeURIComponent(svg); } function applySlot(i){ const a = links[i]; if(!a) return; const img = a.querySelector('img'); const span = a.querySelector('span'); const cfg = { label: els[i].label?.value || span.textContent, link: els[i].link?.value || a.getAttribute('href') || '#', emoji: els[i].emoji?.value || '', icon: (els[i].file && els[i].file.dataset.previewData) || '' }; // text + href if(span && els[i].label) span.textContent = cfg.label; if(els[i].link) a.setAttribute('href', cfg.link || '#'); // icon: emoji has priority, else uploaded icon, else keep default let src = ''; if(cfg.emoji.trim()){ src = emojiDataURL(cfg.emoji.trim()); }else if(cfg.icon){ src = cfg.icon; } if(src && img) img.src = src; } function wire(i){ const o = els[i]; if(o.label) o.label.addEventListener('input', ()=>{ applySlot(i); save(); }); if(o.link) o.link.addEventListener('input', ()=>{ applySlot(i); save(); }); if(o.emoji) o.emoji.addEventListener('input', ()=>{ applySlot(i); save(); }); if(o.file) o.file.addEventListener('change', (e)=>{ const f = e.target.files && e.target.files[0]; if(!f) return; const fr = new FileReader(); fr.onload = ()=>{ o.file.dataset.previewData = fr.result; applySlot(i); save(); }; fr.readAsDataURL(f); }); } // Initial load into form + preview const saved = load(); if(saved && saved.length){ saved.forEach((s,i)=>{ if(els[i].label && s.label!=null) els[i].label.value = s.label; if(els[i].link && s.link!=null) els[i].link.value = s.link; if(els[i].emoji && s.emoji!=null) els[i].emoji.value = s.emoji; if(els[i].file && s.icon){ els[i].file.dataset.previewData = s.icon; } applySlot(i); }); } for(let i=0;i