Directorio de Consultoras en Uruguay
Encuentra las mejores empresas de consultoría en recursos humanos
0
Consultoras
0
Multinacionales
0
Nacionales
0
Marcadas
Tipo:
Redes sociales:
Columnas:
Ordenar:
Mostrando 0 de 0 consultoras
Cargando consultoras…
| Consultora | Descripción | Redes Sociales | Marcar |
|---|
' + c.descripcion + '
';
html += '';
// Info del país
if (c.pais) {
html += '';
html += '';
html += '
';
html += '' + c.pais.nombre + '';
html += '';
html += '' + c.pais.texto + '';
html += '
';
}
html += '';
}
grid.innerHTML = html;
// Agregar event listeners a los botones de bookmark
var bookmarkButtons = document.querySelectorAll('.bookmark-btn');
for (var i = 0; i < bookmarkButtons.length; i++) {
bookmarkButtons[i].addEventListener('click', function() {
handleBookmark(this.dataset.company);
});
}
// Actualizar UI de bookmarks
updateBookmarksUI();
console.log('✅ Renderizado completado: ' + consultoras.length + ' consultoras');
}
// ========== APLICAR TEMA ==========
function setTheme(theme) {
currentTheme = theme;
localStorage.setItem('theme', theme);
applyTheme(theme);
}
function applyTheme(theme) {
var themeButtons = document.querySelectorAll('.theme-btn');
if (theme === 'dark') {
document.body.classList.add('dark-mode');
} else {
document.body.classList.remove('dark-mode');
}
themeButtons.forEach(function(btn) {
if (btn.dataset.theme === theme) {
btn.classList.add('active');
} else {
btn.classList.remove('active');
}
});
// Actualizar colores de países en la tabla
document.querySelectorAll('.country-name-text').forEach(function(span) {
var lightColor = span.getAttribute('data-light');
var darkColor = span.getAttribute('data-dark');
span.style.color = theme === 'dark' ? darkColor : lightColor;
});
}
// ========== FUNCIONES PRINCIPALES ==========
function updateColumnsDisplay() {
var grid = document.getElementById('consultoresGrid');
grid.className = 'consultoras-grid columns-' + currentColumns;
}
function updateBookmarksUI() {
document.querySelectorAll('.bookmark-btn').forEach(function(btn) {
var company = btn.dataset.company;
if (bookmarkedCompanies.indexOf(company) > -1) {
btn.classList.add('bookmarked');
} else {
btn.classList.remove('bookmarked');
}
});
}
// ========== INICIALIZACIÓN AL CARGAR ==========
// Esperamos a que TODO (incluyendo WordPress/Kadence) termine de cargar
window.addEventListener('load', function() {
console.log('⏰ Window load event - Iniciando delay estratégico de 800ms...');
// Delay adicional para asegurar que Kadence Theme termine su trabajo
setTimeout(function() {
console.log('🎬 Delay completado - Iniciando aplicación...');
// ========== EVENT LISTENERS ==========
// Tema - Listener unificado
document.querySelectorAll('.theme-btn').forEach(function(btn) {
btn.addEventListener('click', function() {
setTheme(this.dataset.theme);
});
});
// Búsqueda
document.getElementById('searchInput').addEventListener('input', function() {
console.log('🔍 Búsqueda activada:', this.value);
filterCards();
});
// Filtros de tipo
document.querySelectorAll('.filter-btn').forEach(function(btn) {
btn.addEventListener('click', function() {
console.log('🏷️ Filtro de tipo activado:', this.dataset.filter);
document.querySelectorAll('.filter-btn').forEach(function(b) {
b.classList.remove('active');
});
this.classList.add('active');
currentFilter = this.dataset.filter;
filterCards();
});
});
// Filtros de redes sociales
document.querySelectorAll('.social-filter-btn').forEach(function(btn) {
btn.addEventListener('click', function() {
var social = this.dataset.social;
if (this.classList.contains('active')) {
this.classList.remove('active');
activeSocialFilters = activeSocialFilters.filter(function(s) {
return s !== social;
});
} else {
this.classList.add('active');
activeSocialFilters.push(social);
}
filterCards();
});
});
// Ordenamiento
document.querySelectorAll('.sort-btn').forEach(function(btn) {
btn.addEventListener('click', function() {
document.querySelectorAll('.sort-btn').forEach(function(b) {
b.classList.remove('active');
});
this.classList.add('active');
currentSort = this.dataset.sort;
sortCards();
if (currentView === 'table') {
generateTable();
}
});
});
// Cambiar vista
document.querySelectorAll('.view-btn').forEach(function(btn) {
btn.addEventListener('click', function() {
console.log('👁️ Cambio de vista a:', this.dataset.view);
document.querySelectorAll('.view-btn').forEach(function(b) {
b.classList.remove('active');
});
this.classList.add('active');
currentView = this.dataset.view;
if (currentView === 'grid') {
document.getElementById('consultoresGrid').style.display = 'grid';
document.getElementById('tableView').classList.remove('active');
document.getElementById('columnsControls').classList.add('show');
} else {
document.getElementById('consultoresGrid').style.display = 'none';
document.getElementById('tableView').classList.add('active');
document.getElementById('columnsControls').classList.remove('show');
generateTable();
}
});
});
// Control de columnas
document.querySelectorAll('.column-btn').forEach(function(btn) {
btn.addEventListener('click', function() {
document.querySelectorAll('.column-btn').forEach(function(b) {
b.classList.remove('active');
});
this.classList.add('active');
currentColumns = parseInt(this.dataset.columns);
updateColumnsDisplay();
});
});
// Toggle de filtros en móvil
document.getElementById('filtersToggle').addEventListener('click', function() {
var filtersContent = document.getElementById('filtersContent');
filtersContent.classList.toggle('show');
this.classList.toggle('active');
});
// ========== RENDERIZAR E INICIALIZAR ==========
renderizarConsultoras();
applyTheme(currentTheme);
updateStats();
sortCards();
filterCards();
updateColumnsDisplay();
console.log('🎉 Aplicación completamente inicializada');
}, 800); // 800ms de delay estratégico
});
function sortCards() {
var grid = document.getElementById('consultoresGrid');
var cards = Array.from(document.querySelectorAll('.consultora-card'));
cards.sort(function(a, b) {
var nameA = a.querySelector('h3').textContent.trim();
var nameB = b.querySelector('h3').textContent.trim();
if (currentSort === 'az') {
return nameA.localeCompare(nameB, 'es');
} else {
return nameB.localeCompare(nameA, 'es');
}
});
cards.forEach(function(card) {
grid.appendChild(card);
});
}
function filterCards() {
var searchTerm = document.getElementById('searchInput').value.toLowerCase();
var cards = document.querySelectorAll('.consultora-card');
// Validar que existan tarjetas renderizadas
if (cards.length === 0) {
console.warn('⚠️ filterCards: No hay tarjetas renderizadas aún');
return;
}
var visibleCount = 0;
cards.forEach(function(card) {
var tipo = card.dataset.tipo;
var company = card.querySelector('.bookmark-btn').dataset.company;
var text = card.textContent.toLowerCase();
var matchesSearch = text.indexOf(searchTerm) > -1;
var matchesTypeFilter = true;
var matchesSocialFilters = true;
if (currentFilter === 'multinacional' || currentFilter === 'nacional') {
matchesTypeFilter = tipo === currentFilter;
} else if (currentFilter === 'bookmarked') {
matchesTypeFilter = bookmarkedCompanies.indexOf(company) > -1;
}
if (activeSocialFilters.length > 0) {
var socialLinks = card.querySelectorAll('.social-link.available');
var availableSocials = Array.from(socialLinks).map(function(link) {
if (link.classList.contains('linkedin')) return 'linkedin';
if (link.classList.contains('instagram')) return 'instagram';
if (link.classList.contains('facebook')) return 'facebook';
if (link.classList.contains('x-twitter')) return 'x-twitter';
if (link.classList.contains('tiktok')) return 'tiktok';
if (link.classList.contains('youtube')) return 'youtube';
if (link.classList.contains('website')) return 'website';
return null;
}).filter(function(s) { return s !== null; });
matchesSocialFilters = activeSocialFilters.every(function(filter) {
return availableSocials.indexOf(filter) > -1;
});
}
if (matchesSearch && matchesTypeFilter && matchesSocialFilters) {
card.style.display = 'block';
visibleCount++;
} else {
card.style.display = 'none';
}
});
var totalCards = document.querySelectorAll('.consultora-card').length;
document.getElementById('resultsCount').textContent = 'Mostrando ' + visibleCount + ' de ' + totalCards + ' consultoras';
console.log('🔍 Filtrado completado: ' + visibleCount + ' de ' + totalCards + ' consultoras visibles');
if (currentView === 'table') {
generateTable();
}
}
function handleBookmark(company) {
var index = bookmarkedCompanies.indexOf(company);
if (index > -1) {
bookmarkedCompanies.splice(index, 1);
} else {
bookmarkedCompanies.push(company);
}
localStorage.setItem('bookmarks', JSON.stringify(bookmarkedCompanies));
updateBookmarksUI();
updateStats();
if (currentFilter === 'bookmarked') {
filterCards();
}
if (currentView === 'table') {
generateTable();
}
}
function generateTable() {
console.log('📊 Generando tabla...');
var tbody = document.getElementById('tableBody');
var cards = Array.from(document.querySelectorAll('.consultora-card'));
// Validar que existan tarjetas
if (cards.length === 0) {
console.warn('⚠️ generateTable: No hay tarjetas renderizadas aún');
tbody.innerHTML = '
';
html += '' + c.pais.nombre + '';
html += '';
html += '' + c.pais.texto + '';
html += '';
countryInfoHtml += '
';
countryInfoHtml += '' + countryName + '';
countryInfoHtml += '•';
countryInfoHtml += '' + yearText + '';
countryInfoHtml += '
';
}
}
var borderColor = document.body.classList.contains('dark-mode') ? '#334155' : '#e9ecef';
var textColor = document.body.classList.contains('dark-mode') ? '#94a3b8' : '#64748b';
var row = document.createElement('tr');
row.innerHTML = '' + name + '
' + tipo + '' + faqBadgeHtml + '
' + razonSocial + '
' + countryInfoHtml + '




