diff --git a/Elecciones-Web/frontend/frontend.nginx.conf b/Elecciones-Web/frontend/frontend.nginx.conf index db60a6d..bf266bb 100644 --- a/Elecciones-Web/frontend/frontend.nginx.conf +++ b/Elecciones-Web/frontend/frontend.nginx.conf @@ -1,24 +1,33 @@ server { listen 80; server_name localhost; - root /usr/share/nginx/html; index index.html; - - # Añadimos una ubicación específica para los archivos .mjs - location ~ \.mjs$ { - # Incluimos los tipos MIME por defecto para que Nginx pueda inferir otros tipos si es necesario - include /etc/nginx/mime.types; - # Forzamos explícitamente el tipo de contenido para esta ubicación - default_type application/javascript; + + # --- NUEVO BLOQUE ESPECÍFICO PARA BOOTSTRAP.JS --- + location = /bootstrap.js { + # Esta cabecera le dice a los proxies que deben revalidar el archivo + # con el servidor de origen antes de servirlo desde la caché. + add_header Cache-Control "no-cache, must-revalidate"; + + # 'expires off' es otra capa de seguridad para evitar que se cachee + expires off; + + # Intenta servir el archivo. Si no existe, devuelve 404. + try_files $uri =404; } + # Bloque para otros activos estáticos (con hash) que SÍ pueden ser cacheados agresivamente + location ~* \.(?:js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ { + # Estos archivos cambian de nombre en cada build, así que pueden + # ser cacheados por mucho tiempo sin riesgo. + expires 1y; + add_header Cache-Control "public"; + try_files $uri =404; + } + + # Bloque para la SPA location / { try_files $uri $uri/ /index.html; } - - location ~* \.(?:css|js|jpg|jpeg|gif|png|ico|svg|woff|woff2)$ { - expires 1y; - add_header Cache-Control "public"; - } } \ No newline at end of file diff --git a/Elecciones-Web/frontend/public/bootstrap.js b/Elecciones-Web/frontend/public/bootstrap.js index 3f3e8c9..9c8c6b1 100644 --- a/Elecciones-Web/frontend/public/bootstrap.js +++ b/Elecciones-Web/frontend/public/bootstrap.js @@ -54,22 +54,19 @@ // 4. Cargar el JS principal y esperar a que esté listo await loadScript(jsUrl); - console.log('Bootstrap: Intentando llamar a render...'); - if (window.EleccionesWidgets && typeof window.EleccionesWidgets.render === 'function') { - console.log('Bootstrap: La función render existe. Llamando ahora.'); - window.EleccionesWidgets.render(); - } else { - console.error('Bootstrap: La función render no se encontró en window.EleccionesWidgets.'); - } - // 5. Una vez cargado, llamar a la función de renderizado + // 5. Una vez cargado, llamar a la función de renderizado. if (window.EleccionesWidgets && typeof window.EleccionesWidgets.render === 'function') { - console.log('Bootstrap: La función render existe. Llamando ahora.'); - // Encontramos los contenedores aquí y pasamos sus props. + console.log('Bootstrap: La función render existe. Renderizando todos los widgets encontrados...'); + const widgetContainers = document.querySelectorAll('[data-elecciones-widget]'); + + if (widgetContainers.length === 0) { + console.warn('Bootstrap: No se encontraron contenedores de widget en la página.'); + } + widgetContainers.forEach(container => { // 'dataset' es un objeto que contiene todos los atributos data-* - // container.dataset = { eleccionesWidget: 'mapa-municipios', focoMunicipio: 'LA PLATA' } window.EleccionesWidgets.render(container, container.dataset); }); } else {