Add Privacy Policy and Terms and Conditions pages for IDE Consultores
This commit is contained in:
+21
-12
@@ -1,6 +1,6 @@
|
||||
/* ==========================================================================
|
||||
ECOSISTEMA IDE — Cambio in-place + deep link por hash
|
||||
URLs válidas: #eco-excellence | #eco-projects | #eco-digital | #ecosistema
|
||||
URLs válidas: #eco-excellence | #eco-projects | #eco-digital | #ecosistema-ide
|
||||
========================================================================== */
|
||||
(function () {
|
||||
'use strict';
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
const VALID_UNITS = ['excellence', 'projects', 'digital'];
|
||||
const HASH_PREFIX = '#eco-';
|
||||
const HASH_ECOSYSTEM = '#ecosistema';
|
||||
const HASH_ECOSYSTEM = '#ecosistema-ide';
|
||||
|
||||
let lastFocusedTrigger = null;
|
||||
let currentUnit = null; // null = ecosistema
|
||||
@@ -63,13 +63,15 @@
|
||||
});
|
||||
|
||||
pills.forEach(pill => {
|
||||
pill.classList.toggle('is-active', pill.dataset.ecoOpen === id);
|
||||
const active = pill.dataset.ecoOpen === id;
|
||||
pill.classList.toggle('is-active', active);
|
||||
if (pill.tagName === 'BUTTON') pill.setAttribute('aria-pressed', active ? 'true' : 'false');
|
||||
});
|
||||
|
||||
const title = panel.querySelector('.eco-panel__title');
|
||||
if (title) {
|
||||
title.setAttribute('tabindex', '-1');
|
||||
requestAnimationFrame(() => title.focus({ preventScroll: false }));
|
||||
requestAnimationFrame(() => title.focus({ preventScroll: true }));
|
||||
}
|
||||
|
||||
currentUnit = id;
|
||||
@@ -80,7 +82,10 @@
|
||||
stateEcosystem.hidden = false;
|
||||
|
||||
triggers.forEach(t => t.setAttribute('aria-expanded', 'false'));
|
||||
pills.forEach(p => p.classList.remove('is-active'));
|
||||
pills.forEach(pill => {
|
||||
pill.classList.remove('is-active');
|
||||
if (pill.tagName === 'BUTTON') pill.setAttribute('aria-pressed', 'false');
|
||||
});
|
||||
|
||||
if (restoreFocus) {
|
||||
if (lastFocusedTrigger && typeof lastFocusedTrigger.focus === 'function') {
|
||||
@@ -93,6 +98,14 @@
|
||||
currentUnit = null;
|
||||
}
|
||||
|
||||
/* ---------- Scroll a la sección ---------- */
|
||||
function scrollToSection(behavior = 'smooth') {
|
||||
const rect = section.getBoundingClientRect();
|
||||
if (rect.top < -80 || rect.top > 200) {
|
||||
section.scrollIntoView({ behavior, block: 'start' });
|
||||
}
|
||||
}
|
||||
|
||||
/* ---------- API con URL ---------- */
|
||||
function openUnit(id, { push = true, scroll = true } = {}) {
|
||||
if (!VALID_UNITS.includes(id)) return;
|
||||
@@ -103,12 +116,7 @@
|
||||
history.pushState({ eco: id }, '', url);
|
||||
}
|
||||
|
||||
if (scroll) {
|
||||
const rect = section.getBoundingClientRect();
|
||||
if (rect.top < -80 || rect.top > 200) {
|
||||
section.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
||||
}
|
||||
}
|
||||
if (scroll) scrollToSection('smooth');
|
||||
}
|
||||
|
||||
function closeUnit({ push = true, scroll = false } = {}) {
|
||||
@@ -127,7 +135,7 @@
|
||||
trigger.addEventListener('click', (e) => {
|
||||
const id = trigger.dataset.ecoOpen;
|
||||
if (!id) return;
|
||||
// Academy es <a href="academy.html">: dejamos navegar
|
||||
// Academy es <a href="ide-academy.html">: dejamos navegar
|
||||
if (trigger.tagName === 'A' && trigger.getAttribute('href')) return;
|
||||
e.preventDefault();
|
||||
openUnit(id);
|
||||
@@ -154,6 +162,7 @@
|
||||
const id = unitFromHash();
|
||||
if (id && id !== currentUnit) {
|
||||
renderUnit(id);
|
||||
scrollToSection('smooth');
|
||||
} else if (!id && currentUnit !== null) {
|
||||
renderEcosystem({ restoreFocus: false });
|
||||
}
|
||||
|
||||
+8
-10
@@ -309,7 +309,7 @@ function closeModal(modalId) {
|
||||
body: 'IDE Academy diseña programas de formación alineados con los desafíos reales de las organizaciones. No dictamos cursos estándar: trabajamos desde el contexto de cada equipo.',
|
||||
chips: [...m.chips, m.extra],
|
||||
cta: 'Conocer IDE Academy',
|
||||
url: 'academy.html'
|
||||
url: 'ide-academy.html'
|
||||
};
|
||||
}
|
||||
|
||||
@@ -334,7 +334,7 @@ function closeModal(modalId) {
|
||||
title: 'Formación desde el contexto real.',
|
||||
chips: ['In Company', 'Capacitación', 'IDE Academy'],
|
||||
cta: 'Ver IDE Academy',
|
||||
url: 'academy.html',
|
||||
url: 'ide-academy.html',
|
||||
body: 'Programas de formación diseñados para tu organización, sus desafíos y las capacidades que necesita desarrollar.'
|
||||
},
|
||||
'ia-digital': {
|
||||
@@ -1121,15 +1121,14 @@ function initContactForm() {
|
||||
form.reset();
|
||||
} catch (error) {
|
||||
if (alertBox) {
|
||||
alertBox.className = 'form-alert alert-success';
|
||||
alertBox.innerText = '¡Muchas gracias por comunicarte! Tu mensaje ha sido registrado con éxito. Te responderemos pronto a tu casilla de correo.';
|
||||
alertBox.className = 'form-alert alert-error';
|
||||
alertBox.innerText = 'No pudimos enviar tu mensaje. Por favor, reintentá en unos minutos o escribinos a info@ideconsultores.com.ar.';
|
||||
alertBox.style.display = 'block';
|
||||
}
|
||||
form.reset();
|
||||
} finally {
|
||||
if (submitBtn) {
|
||||
submitBtn.removeAttribute('disabled');
|
||||
submitBtn.innerText = 'HABLEMOS';
|
||||
submitBtn.innerText = 'ENVIAR CONSULTA →';
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -1171,15 +1170,14 @@ function initCareersForm() {
|
||||
form.reset();
|
||||
} catch (error) {
|
||||
if (alertBox) {
|
||||
alertBox.className = 'form-alert alert-success';
|
||||
alertBox.innerText = '¡Postulación recibida con éxito! Revisaremos tu perfil en nuestro equipo.';
|
||||
alertBox.className = 'form-alert alert-error';
|
||||
alertBox.innerText = 'No pudimos enviar tu postulación. Por favor, reintentá en unos minutos o escribinos a info@ideconsultores.com.ar.';
|
||||
alertBox.style.display = 'block';
|
||||
}
|
||||
form.reset();
|
||||
} finally {
|
||||
if (submitBtn) {
|
||||
submitBtn.removeAttribute('disabled');
|
||||
submitBtn.innerText = 'Enviar Postulación';
|
||||
submitBtn.innerText = 'SUMARME A LA RED IDE';
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
+47
-15
@@ -1,12 +1,24 @@
|
||||
const nodosData = [
|
||||
// Reemplaza el src con la ruta real de tus logos
|
||||
{ id: 'tl', x0: 220, y0: 140, r: 70, color: '#16a085', html: '<img src="assets/logos/excellence_b.png" alt="EXCELLENCE">' },
|
||||
{ id: 'bl', x0: 200, y0: 420, r: 70, color: '#f39200', html: '<img src="assets/logos/projects_b.png" alt="PROJECTS">' },
|
||||
{ id: 'tr', x0: 780, y0: 110, r: 70, color: '#c41230', html: '<img src="assets/logos/academy_b.png" alt="ACADEMY">' },
|
||||
{ id: 'br', x0: 750, y0: 400, r: 70, color: '#0061a0', html: '<img src="assets/logos/digital_b.png" alt="DIGITAL">' },
|
||||
{ id: 'c', x0: 500, y0: 280, r: 85, color: '#ffffff', html: '<img src="assets/logos/ide.png" alt="EL TODO">' }
|
||||
{ id: 'tl', x0: 220, y0: 140, r: 70, color: '#009e8f', unit: 'excellence', label: 'IDE Excellence', html: '<img src="assets/logos/excellence_b.png" alt="EXCELLENCE">' },
|
||||
{ id: 'bl', x0: 200, y0: 420, r: 70, color: '#f28c2b', unit: 'projects', label: 'IDE Projects', html: '<img src="assets/logos/projects_b.png" alt="PROJECTS">' },
|
||||
{ id: 'tr', x0: 780, y0: 110, r: 70, color: '#c8102e', unit: 'academy', label: 'IDE Academy', html: '<img src="assets/logos/academy_b.png" alt="ACADEMY">' },
|
||||
{ id: 'br', x0: 750, y0: 400, r: 70, color: '#1d71b8', unit: 'digital', label: 'IDE Digital', html: '<img src="assets/logos/digital_b.png" alt="DIGITAL">' },
|
||||
{ id: 'c', x0: 500, y0: 280, r: 85, color: '#ffffff', unit: null, label: null, html: '<img src="assets/logos/ide.png" alt="EL TODO">' }
|
||||
];
|
||||
|
||||
const reduceMotion = window.matchMedia &&
|
||||
window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
||||
|
||||
// Abrir la unidad correspondiente desde un nodo del ecosistema
|
||||
function abrirNodo(nodo) {
|
||||
if (!nodo || !nodo.unit) return;
|
||||
if (nodo.unit === 'academy') { window.location.href = 'ide-academy.html'; return; }
|
||||
if (window.EcoIDE && typeof window.EcoIDE.open === 'function') {
|
||||
window.EcoIDE.open(nodo.unit);
|
||||
}
|
||||
}
|
||||
|
||||
const conexiones = [
|
||||
{ id: 'arcL', from: 'tl', to: 'bl', type: 'vertical', curveOut: -180 },
|
||||
{ id: 'c1', from: 'tl', to: 'c', type: 'horizontal', curveOut: 0 },
|
||||
@@ -44,6 +56,24 @@ const nodosData = [
|
||||
content.innerHTML = nodo.html;
|
||||
|
||||
el.appendChild(content);
|
||||
|
||||
if (nodo.unit) {
|
||||
el.setAttribute('role', 'button');
|
||||
el.setAttribute('tabindex', '0');
|
||||
el.setAttribute('aria-label', `Ver ${nodo.label}`);
|
||||
el.style.cursor = 'pointer';
|
||||
el.addEventListener('click', () => abrirNodo(nodo));
|
||||
el.addEventListener('keydown', (e) => {
|
||||
if (e.key === 'Enter' || e.key === ' ') {
|
||||
e.preventDefault();
|
||||
abrirNodo(nodo);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
el.classList.add('nodo-circulo--static');
|
||||
el.style.cursor = 'default';
|
||||
}
|
||||
|
||||
contenedorNodos.appendChild(el);
|
||||
nodo.el = el;
|
||||
});
|
||||
@@ -138,16 +168,18 @@ const nodosData = [
|
||||
});
|
||||
|
||||
// 3. Lógica de salto entre carriles
|
||||
setInterval(() => {
|
||||
conexiones.forEach(conn => {
|
||||
conn.pulsos.forEach(p => {
|
||||
if (Math.random() > 0.8) {
|
||||
p.currentOffset = offsetsLineas[Math.floor(Math.random() * offsetsLineas.length)];
|
||||
p.needsPathUpdate = true; // Avisamos que en el próximo frame debe cambiar de ruta
|
||||
}
|
||||
if (!reduceMotion) {
|
||||
setInterval(() => {
|
||||
conexiones.forEach(conn => {
|
||||
conn.pulsos.forEach(p => {
|
||||
if (Math.random() > 0.8) {
|
||||
p.currentOffset = offsetsLineas[Math.floor(Math.random() * offsetsLineas.length)];
|
||||
p.needsPathUpdate = true; // Avisamos que en el próximo frame debe cambiar de ruta
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}, 1200);
|
||||
}, 1200);
|
||||
}
|
||||
|
||||
// 4. Motor de Animación Ultraligero
|
||||
let animando = false;
|
||||
@@ -169,7 +201,7 @@ function animarFrame() {
|
||||
}
|
||||
|
||||
function iniciarAnimacion() {
|
||||
if (animando) return;
|
||||
if (reduceMotion || animando) return;
|
||||
animando = true;
|
||||
rafId = requestAnimationFrame(animarFrame);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user