var json1 = 0;
var json2 = 0;
var html = "";
var $categoryNamePlaceholder, $descriptionPlaceholder, $pagerPlaceholder, $nomineesListPlaceholder;
//TODO: Automatize this setup
var test = false; //Define if local or test or prod environment
var fase = "Finalista";
var segundos = 60;
var keyMap = {
'.docente': ["Mejor docente universitario", true],
'.estudiante': ["Mejor estudiante universitario", true],
'.lider': ["Mejor líder empresarial", true],
'.comunidad': ["Aporte a la comunidad", false],
'.exportador': ["Esfuerzo exportador", false],
'.humano': ["Gestión del recurso humano", false],
'.innovacion': ["Innovación", false],
'.ambiente': ["Protección del medio ambiente", false],
'.empresarial': ["Responsabilidad social empresarial", false],
'.cliente': ["Servicio al cliente", false]
}
// Function to show content result of Json items
function mostrarNominados(args) {
if (!Array.isArray(args)) {
console.error("Parámetros erróneos");
return;
}
console.info(json1[fase]);
console.info(json2[fase]);
if (json1[fase] === undefined || json2[fase] === undefined) {
console.error("Los datos no corresponden al formato necesario o no se pudo acceder a ellos.");
return;
}
var categoryName = args[0],
isPerson = args[1],
categoryDescription = args[2];
//TODO: ¿Qué debe hacer si es null o vacÃo?
$categoryNamePlaceholder.text(categoryName); // Append category title name
$descriptionPlaceholder.text(categoryDescription); // Append description category
var lista = isPerson ? json1 : json2;
var listaNominados = lista[fase][categoryName];
var listaGanadores, listaGanador;
/*= lista.hasOwnProperty('Ganador') ? lista["Ganador"][categoryName] : [
[]
] //new Array(new Array);*/
// Append result list items
html = '
';
if (lista.hasOwnProperty('Ganador')) {
listaGanadores = lista['Ganador'];
if (listaGanadores.hasOwnProperty(categoryName)) {
console.info("Ganador para el listado de la categoría " + categoryName);
listaGanador = listaGanadores[categoryName];
if (listaGanador.length !== 0) {
if (isPerson) {
html += '- ' + listaGanador[0][0] + ' - ' + listaGanador[0][1] + '
';
}else{
html += '- ' + listaGanador[0][0] + '
';
}
}
} else {
listaGanador = [];
}
}
//TODO: ¿Qué debe hacer si es null o vacÃo o no es una lista?
$.each(listaNominados, function(i, nominado) {
/*var esGanador = nominado[0] === listaGanadores[0][0];
var claseGanador = esGanador ? 'class="itemGanador"' : '';*/
if (isPerson) {
html += '- ' + nominado[0] + ' - ' + nominado[1] + '
';
}else{
html += '- ' + nominado[0] + '
';
}
});
html += '
';
// Reset list content list and pager nominates
$nomineesListPlaceholder.empty().append(html).removeClass("error");
$pagerPlaceholder.empty();
if (listaNominados.length > 15) {
resetPagination();
}
}
function asociarEventoListaNominados() {
$('.listNominate').on("click", ".itemNominate", function() {
var categoryKey = $(this).data('cat');
var args = keyMap[categoryKey];
//Obtener la descripción usando el categoryKey
args[2] = $('[data-rel="' + categoryKey + '"]').find('.textDescription').text();
mostrarNominados(args);
});
//Revisar si hay un item desplegado, si es asÃ, generar un click nuevamente sobre ese elemento
//Esto se evalúa, por ejemplo a algo como $('[data-cat=".exportador"]'), es decir la categorÃa activa al momento de cargar los datos
$('[data-cat="' + $('.listNominate').attr('cat-active') + '"]').first().click();
}
function obtenerDatosAjax(urlPersonas, urlEmpresas) {
console.info("OBTENIENDO DATOS POR AJAX...");
$.getJSON(urlPersonas, function(result) {
json1 = result;
marcarGanadoresCategoria(json1);
// Llamado datos lista-empresas:
$.getJSON(urlEmpresas, function(result) {
json2 = result;
marcarGanadoresCategoria(json2);
asociarEventoListaNominados();
}).error(function() {
handleJSONReadError('empresas');
});
}).error(function() {
handleJSONReadError('personas');
});
}
function marcarGanadoresCategoria(result) {
console.info("Comprobando si hay ganadores...");
if (result["Ganador"] === undefined) {
console.info("No hay ganadores...");
return false;
} else {
$(this).removeClass("ganador");
$('.itemNominate').each(
function(index) {
var categoria = $(this).data("cat");
var arg = keyMap[categoria];
//Revisar para la categorÃa si existe una coincidencia entre los finalistas para marcar el ganadore
var listaFinalistas = result["Finalista"][arg[0]]; //varios
var listaGanadores = [
[]
];
var listaGanador = '';
if (result.hasOwnProperty('Ganador')) {
listaGanadores = result['Ganador'];
if (listaGanadores.hasOwnProperty(arg[0])) {
console.info("Hay ganador en la categoría " + arg[0]);
listaGanador = listaGanadores[arg[0]];
$(this).addClass("ganador");
}
}
/*for (i in listaFinalistas) {
console.info("Ganador: " + listaGanador + " " + "Finalista: " + listaFinalistas[i][0]);
var hayGanador = false;
if (listaGanador === listaFinalistas[i][0]) {
$(this).addClass("ganador");
break;
}
}*/
}
);
}
}
$(document).ready(function() {
var urlPersonas = '';
var urlEmpresas = '';
switch (location.hostname) {
case "127.0.0.1":
case "localhost":
urlPersonas = '/json/datos-personas.json';
urlEmpresas = '/json/json-company.json';
break;
case "beta.portafolio.co":
case "m.beta.portafolio.co":
urlPersonas = 'https://www.portafolio.co/premios/json-person-2017';
urlEmpresas = 'https://www.portafolio.co/premios/json-company-2017';
break;
default:
urlPersonas = test ? '/json/json-person' : '/premios/json-person';
urlEmpresas = test ? '/json/json-company' : '/premios/json-company';
break;
}
// Variables for stored content that's gonna be append
$categoryNamePlaceholder = $('.contentResult > h3');
$descriptionPlaceholder = $('.contentResult > p');
$pagerPlaceholder = $('.counterResult');
$nomineesListPlaceholder = $('.nombre-nominado');
// Show message until the data is stored
var loadMsg = 'Espere un momento, estamos cargando la información.';
$nomineesListPlaceholder.text(loadMsg);
obtenerDatosAjax(urlPersonas, urlEmpresas);
setInterval(obtenerDatosAjax, 1000 * segundos, urlPersonas, urlEmpresas);
// Eliminate the parameter ('cat-active')
$(".resultNominates .cerrar").click(function() {
$('.listNominate').removeAttr('cat-active');
});
});
// Function Paginador:
function resetPagination() {
$('.contentResult').pajinate({
nav_label_first: '',
nav_label_last: '',
nav_label_prev: '<<',
nav_label_next: '>>',
items_per_page: 15
});
}
//Control de errores (por ahora, sólo muestra mensajes si no puede acceder a los JSON)
function handleJSONReadError(source) {
console.error("Hay un problema en lectura del json " + source);
var msg = 'Tenemos un problema con la información de los nominados. Intente nuevamente en unos minutos.';
$nomineesListPlaceholder.empty().text(msg).addClass("error");
}