(function() { // --- LÓGICA DE DETECCIÓN AUTOMÁTICA DE LA RUTA BASE --- // document.currentScript.src nos da la URL completa del propio script bootstrap.js const scriptUrl = new URL(document.currentScript.src); // La ruta base es el origen (ej. 'https://elecciones2025.eldia.com') const WIDGETS_HOST = scriptUrl.origin; // --- FUNCIONES AUXILIARES (sin cambios) --- function loadScript(src) { return new Promise((resolve, reject) => { const script = document.createElement('script'); script.type = 'module'; script.src = src; script.onload = resolve; script.onerror = reject; document.head.appendChild(script); }); } function loadCSS(href) { const link = document.createElement('link'); link.rel = 'stylesheet'; link.href = href; document.head.appendChild(link); } // --- LÓGICA PRINCIPAL --- async function initWidgets() { try { // 1. Obtener el manifest.json desde la ruta base detectada const response = await fetch(`${WIDGETS_HOST}/manifest.json`); if (!response.ok) { throw new Error('No se pudo cargar el manifest de los widgets. (404 Not Found)'); } const manifest = await response.json(); // 2. Encontrar el punto de entrada principal const entryKey = Object.keys(manifest).find(key => manifest[key].isEntry); if (!entryKey) { throw new Error('No se encontró el punto de entrada en el manifest.'); } const entry = manifest[entryKey]; const jsUrl = `${WIDGETS_HOST}/${entry.file}`; // 3. Cargar el CSS if (entry.css && entry.css.length > 0) { entry.css.forEach(cssFile => { const cssUrl = `${WIDGETS_HOST}/${cssFile}`; loadCSS(cssUrl); }); } // 4. Cargar el JS principal await loadScript(jsUrl); // 5. El addEventListener ya no es necesario aquí, el consumidor lo añade. // Si quiere que sea totalmente automático, puede añadirlo: window.addEventListener('load', function () { if (window.EleccionesWidgets && typeof window.EleccionesWidgets.render === 'function') { window.EleccionesWidgets.render(); } }); } catch (error) { console.error('Error al inicializar los widgets de Elecciones:', error); } } initWidgets(); })();