{"id":39,"date":"2026-07-29T22:16:43","date_gmt":"2026-07-29T22:16:43","guid":{"rendered":"https:\/\/sigi.ipul.us\/index.php\/resultados-vivo\/"},"modified":"2026-07-29T22:16:43","modified_gmt":"2026-07-29T22:16:43","slug":"resultados-vivo","status":"publish","type":"page","link":"https:\/\/sigi.ipul.us\/index.php\/resultados-vivo\/","title":{"rendered":"Resultados en Vivo"},"content":{"rendered":"\t\t<div class=\"sigi-resultados-wrap\">\n\t\t\t<p id=\"sigi-resultados-aviso\" class=\"sigi-resultados-aviso\"><\/p>\n\t\t\t<div id=\"sigi-resultados-lista\" class=\"sigi-resultados-lista\"><\/div>\n\t\t<\/div>\n\t\t<style>\n\t\t\t\/* Estilos base \u2014 sobrescribibles desde el CSS personalizado de Elementor apuntando a estas mismas clases. *\/\n\t\t\t.sigi-resultados-wrap { font-family:sans-serif; }\n\t\t\t.sigi-resultados-aviso { text-align:center; opacity:0.7; }\n\t\t\t.sigi-votacion-card { border:1px solid #ddd; border-radius:8px; padding:16px; margin-bottom:20px; }\n\t\t\t.sigi-votacion-card h3 { margin-top:0; }\n\t\t\t.sigi-votacion-meta { font-size:0.85em; opacity:0.65; margin-bottom:12px; }\n\t\t\t.sigi-barra-fila { margin-bottom:10px; }\n\t\t\t.sigi-barra-etiqueta { display:flex; justify-content:space-between; font-size:0.9em; margin-bottom:4px; }\n\t\t\t.sigi-barra-fondo { background:#eee; border-radius:4px; overflow:hidden; height:18px; }\n\t\t\t.sigi-barra-relleno { background:#2271b1; height:100%; transition:width .4s; }\n\t\t\t.sigi-votacion-total { margin-top:10px; font-weight:bold; }\n\t\t<\/style>\n\t\t<script>\n\t\t(function () {\n\t\t\tvar restBase = \"https:\\\/\\\/sigi.ipul.us\\\/index.php\\\/wp-json\\\/sigi\\\/v1\";\n\t\t\tvar avisoEl  = document.getElementById('sigi-resultados-aviso');\n\t\t\tvar listaEl  = document.getElementById('sigi-resultados-lista');\n\n\t\t\tfunction token() { return localStorage.getItem('sigi_jwt'); }\n\n\t\t\tfunction barra(etiqueta, votos, pct) {\n\t\t\t\treturn '<div class=\"sigi-barra-fila\">' +\n\t\t\t\t\t'<div class=\"sigi-barra-etiqueta\"><span>' + etiqueta + '<\/span><span>' + votos + ' voto(s) \u2014 ' + pct + '%<\/span><\/div>' +\n\t\t\t\t\t'<div class=\"sigi-barra-fondo\"><div class=\"sigi-barra-relleno\" style=\"width:' + pct + '%\"><\/div><\/div>' +\n\t\t\t\t\t'<\/div>';\n\t\t\t}\n\n\t\t\tfunction renderVotacion(v, resultado, candidatosPorId) {\n\t\t\t\tvar filas = '';\n\t\t\t\tif ('resolucion' === v.tipo) {\n\t\t\t\t\t['aprobar', 'desaprobar'].forEach(function (op) {\n\t\t\t\t\t\tfilas += barra(op === 'aprobar' ? 'Aprobar' : 'Desaprobar', resultado.conteo[op] || 0, resultado.porcentajes[op] || 0);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t\/\/ Se recorren TODOS los candidatos de la votaci\u00f3n (no solo los que ya tienen votos), para que el 0% tambi\u00e9n se vea.\n\t\t\t\t\tObject.keys(candidatosPorId).forEach(function (id) {\n\t\t\t\t\t\tvar nombre = candidatosPorId[id].nombre || ('Candidato #' + id);\n\t\t\t\t\t\tfilas += barra(nombre, resultado.conteo[id] || 0, resultado.porcentajes[id] || 0);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tvar nota = resultado.nota ? '<p><em>' + resultado.nota + '<\/em><\/p>' : '';\n\t\t\t\treturn '<div class=\"sigi-votacion-card\">' +\n\t\t\t\t\t'<h3>' + v.titulo + '<\/h3>' +\n\t\t\t\t\t'<div class=\"sigi-votacion-meta\">' + v.tipo + ' \u2014 ' + v.ambito + (v.distrito ? ' (' + v.distrito + ')' : '') + ' \u2014 ronda ' + v.ronda + '<\/div>' +\n\t\t\t\t\tfilas +\n\t\t\t\t\t'<div class=\"sigi-votacion-total\">Total de votos: ' + resultado.total + '<\/div>' +\n\t\t\t\t\tnota +\n\t\t\t\t\t'<p><button type=\"button\" class=\"sigi-btn-timer\" data-votacion=\"' + v.id + '\">Iniciar timer (3 min)<\/button><\/p>' +\n\t\t\t\t\t'<\/div>';\n\t\t\t}\n\n\t\t\tlistaEl.addEventListener('click', function (ev) {\n\t\t\t\tif (!ev.target.classList.contains('sigi-btn-timer')) { return; }\n\t\t\t\tvar vid = ev.target.getAttribute('data-votacion');\n\t\t\t\tfetch(restBase + '\/votaciones\/' + vid + '\/timer\/iniciar', { method: 'POST', headers: { 'Authorization': 'Bearer ' + token() } });\n\t\t\t});\n\n\t\t\tfunction actualizar() {\n\t\t\t\tvar t = token();\n\t\t\t\tif (!t) {\n\t\t\t\t\tavisoEl.textContent = 'Debes iniciar sesi\u00f3n primero (ve a la p\u00e1gina de Acceso).';\n\t\t\t\t\tlistaEl.innerHTML = '';\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar auth = { headers: { 'Authorization': 'Bearer ' + t } };\n\n\t\t\t\tfetch(restBase + '\/votaciones', auth)\n\t\t\t\t\t.then(function (r) {\n\t\t\t\t\t\tif (r.status === 401 || r.status === 403) { throw new Error('sin_permiso'); }\n\t\t\t\t\t\treturn r.json();\n\t\t\t\t\t})\n\t\t\t\t\t.then(function (votaciones) {\n\t\t\t\t\t\tvar abiertas = votaciones.filter(function (v) { return v.estado === 'abierta'; });\n\t\t\t\t\t\tif (!abiertas.length) {\n\t\t\t\t\t\t\tavisoEl.textContent = 'No hay votaciones abiertas en este momento.';\n\t\t\t\t\t\t\tlistaEl.innerHTML = '';\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tavisoEl.textContent = '';\n\n\t\t\t\t\t\tPromise.all(abiertas.map(function (v) {\n\t\t\t\t\t\t\treturn Promise.all([\n\t\t\t\t\t\t\t\tfetch(restBase + '\/votaciones\/' + v.id, auth).then(function (r) { return r.json(); }),\n\t\t\t\t\t\t\t\tfetch(restBase + '\/votaciones\/' + v.id + '\/resultados-vivo', auth).then(function (r) { return r.json(); })\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t})).then(function (pares) {\n\t\t\t\t\t\t\tlistaEl.innerHTML = pares.map(function (par) {\n\t\t\t\t\t\t\t\tvar detalle = par[0], resultado = par[1];\n\t\t\t\t\t\t\t\tvar candidatosPorId = {};\n\t\t\t\t\t\t\t\t(detalle.candidatos || []).forEach(function (c) { candidatosPorId[c.id] = c; });\n\t\t\t\t\t\t\t\treturn renderVotacion(detalle, resultado, candidatosPorId);\n\t\t\t\t\t\t\t}).join('');\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.catch(function (err) {\n\t\t\t\t\t\tif (err.message === 'sin_permiso') {\n\t\t\t\t\t\t\tavisoEl.textContent = 'No tienes permiso para ver resultados en vivo (solo IT o Escrutinio).';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tavisoEl.textContent = 'Error de conexi\u00f3n.';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlistaEl.innerHTML = '';\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tactualizar();\n\t\t\tsetInterval(actualizar, 5000);\n\t\t})();\n\t\t<\/script>\n\t\t\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":0,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-39","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/sigi.ipul.us\/index.php\/wp-json\/wp\/v2\/pages\/39","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sigi.ipul.us\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sigi.ipul.us\/index.php\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/sigi.ipul.us\/index.php\/wp-json\/wp\/v2\/comments?post=39"}],"version-history":[{"count":0,"href":"https:\/\/sigi.ipul.us\/index.php\/wp-json\/wp\/v2\/pages\/39\/revisions"}],"wp:attachment":[{"href":"https:\/\/sigi.ipul.us\/index.php\/wp-json\/wp\/v2\/media?parent=39"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}