1document.addEventListener("DOMContentLoaded", function(event) { 2 3 AOS.init(); 4 5 // Buscador de la cabecera 6 let btn_buscador = document.getElementById('abrir-buscador'); 7 let form_buscador = document.getElementById('formulario-buscador'); 8 if(typeof(btn_buscador) != 'undefined' && btn_buscador != null){ 9 btn_buscador.addEventListener('click', function(){ 10 form_buscador.classList.toggle('oculto'); 11 }); 12 } 13 14 let btn_buscador_m = document.getElementById('abrir-buscador-m'); 15 let form_buscador_m = document.getElementById('formulario-buscador-m'); 16 if(typeof(btn_buscador_m) != 'undefined' && btn_buscador_m != null){ 17 btn_buscador_m.addEventListener('click', function(){ 18 form_buscador_m.classList.toggle('oculto'); 19 }); 20 } 21 22 // Abrir y cerrar megamenú 23 // Seleccionamos todos los botones de submenu 24 let botones_abrir_menu = document.querySelectorAll('li.item-megamenu'); 25 let links_abrir_menu = document.querySelectorAll('li.item-megamenu > a'); 26 27 if (botones_abrir_menu.length) { 28 botones_abrir_menu.forEach(function (boton) { 29 boton.addEventListener('click', function (evento) { 30 let isOpen = boton.classList.contains('submenu-visible'); 31 cerrarEmergentes(); 32 if (!isOpen) { 33 boton.classList.add('submenu-visible'); 34 boton.querySelector('.contenido-submenu').classList.remove('oculto'); 35 } 36 // evento.preventDefault(); 37 evento.stopPropagation(); 38 }); 39 }); 40 41 links_abrir_menu.forEach((link) => { 42 link.addEventListener('click', (evento) => { 43 evento.preventDefault(); 44 }); 45 }); 46 47 document.addEventListener('click', function (evento) { 48 let submenus = document.querySelectorAll('.contenido-submenu'); 49 let submenuButtons = document.querySelectorAll('.item-megamenu'); 50 let searchForm = document.getElementById('formulario-buscador'); 51 let openSearchForm = document.getElementById('abrir-buscador'); 52 if( !searchForm.contains(evento.target) && !openSearchForm.contains(evento.target)){ 53 searchForm.classList.add('oculto'); 54 } 55 56 submenuButtons.forEach((submenuButton) => { 57 let submenu = submenuButton.querySelector('.contenido-submenu'); 58 if (!submenu.contains(evento.target) && !submenuButton.contains(evento.target)) { 59 submenuButton.classList.remove('submenu-visible'); 60 submenu.classList.add('oculto'); 61 } 62 }); 63 64 }); 65 } 66 67 // Abrir y cerrar menú móvil 68 const toggleMenuBtn = document.getElementById('toggle-menu'); 69 const offsetMenu = document.getElementById('offset-menu'); 70 const logoCabecera = document.querySelector('.logo-cabecera'); 71 const buscadorMobile = document.getElementById('formulario-buscador-m'); 72 const switcherIdiomas = document.querySelector('.menu-mobile .switcher-idiomas'); 73 toggleMenuBtn.addEventListener('click', (evento) => { 74 isMenuAbierto() ? cerrarMenu() : abrirMenu(); 75 76 }); 77 78 // Desplegar el selector de idiomas en móvil. 79 const botonIdiomas = document.querySelector('.menu-mobile .language-icon'); 80 botonIdiomas.addEventListener('click', (evento) => { 81 switcherIdiomas.classList.toggle('abierto'); 82 }); 83 84 85 // Cierre del menú móvil cd se redimensiona la ventana. 86 window.addEventListener('resize', function (event) { 87 if (window.innerWidth > 1024) { 88 cerrarMenu(); 89 } 90 }); 91 92 93 /** function 94 * Comprueba si el menú móvil está abierto 95 * @returns {boolean} 96 */ 97 function isMenuAbierto(){ 98 return offsetMenu.classList.contains('open'); 99 } 100 101 /** 102 * Observador para ocultar la navegación del menú cuando el campo de búsqueda está abierto. 103 * @type {MutationObserver} 104 */ 105 const formBusquedaObserver = new MutationObserver((mutations) => { 106 mutations.forEach((mutation) => { 107 if (mutation.attributeName === 'class') { 108 console.log('observador'); 109 if (! mutation.target.classList.contains('oculto')) { 110 offsetMenu.querySelector('nav').classList.add('oculto'); 111 }else { 112 offsetMenu.querySelector('nav').classList.remove('oculto'); 113 } 114 } 115 }); 116 }); 117 118 formBusquedaObserver.observe(buscadorMobile, { 119 attributes: true, 120 }); 121 122 123 /** 124 * Cierra el menú móvil 125 */ 126 function cerrarMenu(){ 127 128 offsetMenu.classList.remove('open'); 129 toggleMenuBtn.classList.remove('open'); 130 logoCabecera.classList.remove('oculto'); 131 switcherIdiomas.classList.remove('abierto'); 132 buscadorMobile.classList.add('oculto'); 133 document.querySelector('body').classList.remove('overflow-hidden'); 134 } 135 136 function abrirMenu(){ 137 offsetMenu.classList.add('open'); 138 toggleMenuBtn.classList.add('open'); 139 logoCabecera.classList.add('oculto'); 140 document.querySelector('body').classList.add('overflow-hidden'); 141 } 142 143 144 /** 145 * Cierra todos los elementos emergentes (submenú y caja de búsqueda) 146 */ 147 function cerrarEmergentes() { 148 const searchForm = document.getElementById('formulario-buscador'); 149 const submenu = document.querySelectorAll('.contenido-submenu'); 150 const submenuButtons = document.querySelectorAll('.item-megamenu'); 151 152 if(searchForm) { 153 searchForm.classList.add('oculto'); 154 } 155 156 submenu.forEach(function (submenu) { 157 submenu.classList.add('oculto'); 158 }); 159 160 submenuButtons.forEach((submenuButton) => { 161 submenuButton.classList.remove('submenu-visible'); 162 }); 163 } 164 165 166 167 168 // Slider de la cabecera (template: page-cabecera-slider.php) 169 170 // Solo se inicializa si el slider tiene la estructura completa de Swiper (.swiper-wrapper).
171 // Las cabeceras de single (case study, partner, podcast) usan .slider-cabecera sin wrapper y no son un slider real. 172 var slider_cabecera = document.querySelectorAll(".slider-cabecera .swiper-wrapper"); 173 174 if(slider_cabecera.length > 0){ 175 176 var swiper_cabecera = new Swiper(".slider-cabecera", { 177 slidesPerView: 1, 178 spaceBetween: 0, 179 loop: true, 180 navigation: { 181 nextEl: ".swiper-button-next-slider-cabecera", 182 prevEl: ".swiper-button-prev-slider-cabecera", 183 } 184 }); 185 186 } 187 188 // Swiper 12 ya no recalcula el tamaño cuando terminan de cargar las imágenes (Swiper 8 lo hacÃa con preloadImages). 189 // Si un slider se inicializa antes de que sus imágenes tengan ancho (p. ej. galerÃa de case study), se recalcula aquÃ. 190 function refrescarSwipers(){ 191 document.querySelectorAll(".swiper-initialized").forEach(function(el){ 192 if(el.swiper && typeof el.swiper.update === "function"){ 193 el.swiper.update(); 194 } 195 }); 196 } 197 document.querySelectorAll(".swiper-initialized img").forEach(function(img){ 198 if(!img.complete){ 199 img.addEventListener("load", refrescarSwipers, { once: true }); 200 } 201 }); 202 window.addEventListener("load", refrescarSwipers); 203 204 var boton_submit_form_newsletter = document.querySelectorAll(".formulario-newsletter input[type='submit'], .formulario-p-contacto input[type='submit']"); 205 206 if(boton_submit_form_newsletter.length > 0){ 207 208 for(var i = 0; i < boton_submit_form_newsletter.length; i++){ 209 210 var texto = boton_submit_form_newsletter[i].value; 211 var parent = boton_submit_form_newsletter[i].parentNode; 212 213 var contenedor_submit = document.createElement("div"); 214 contenedor_submit.classList.add("contenedor-boton-submit"); 215 216 boton_submit_form_newsletter[i].value = ""; 217 contenedor_submit.append(boton_submit_form_newsletter[i]); 218 219 220 var span = document.createElement("span"); 221 span.classList.add("text-1"); 222 span.innerHTML = texto; 223 contenedor_submit.append(span); 224 225 226 var span_2 = document.createElement("span"); 227 span_2.classList.add("text-2"); 228 span_2.innerHTML = texto; 229 contenedor_submit.append(span_2); 230 231 parent.append(contenedor_submit); 232 233 234 235 236 } 237 238 239 } 240 241 242 var galeria_c_study = document.querySelectorAll(".galeria-case-study"); 243 244 if(galeria_c_study.length > 0){ 245 246 for(var i = 0; i < galeria_c_study.length; i++){ 247 248 249 var mouseDown = false; 250 251 var startX, scrollLeft; 252 253 var startDragging = function (e) { 254 mouseDown = true; 255 startX = e.pageX - e.currentTarget.offsetLeft; 256 scrollLeft = e.currentTarget.scrollLeft; 257 }; 258 259 var stopDragging = function (event) { 260 mouseDown = false; 261 }; 262 263 galeria_c_study[i].addEventListener('mousemove', (e) => { 264 265 e.preventDefault(); 266 267 if(!mouseDown) { 268 return; 269 } 270 271 var x = e.pageX - e.currentTarget.offsetLeft; 272 var scroll = x - startX; 273 e.currentTarget.scrollLeft = scrollLeft - scroll; 274 }); 275 276 galeria_c_study[i].addEventListener('mousedown', startDragging, false); 277 galeria_c_study[i].addEventListener('mouseup', stopDragging, false); 278 galeria_c_study[i].addEventListener('mouseleave', stopDragging, false); 279 280 } 281 } 282 283 var filtros_eventos = document.querySelectorAll(".contenedor-filtros-eventos .filtro-eventos"); 284 285 if(filtros_eventos.length > 0){ 286 287 for(var i = 0; i < filtros_eventos.length; i++){ 288 289 filtros_eventos[i].addEventListener("click", function(ev){ 290 291 for(var y = 0; y < filtros_eventos.length; y++){ 292 293 filtros_eventos[y].classList.remove("seleccionado"); 294 295 } 296 297 ev.currentTarget.classList.add("seleccionado"); 298 299 if(ev.currentTarget.id == "todos-eventos"){ 300 301 var eventos = document.querySelectorAll(".eventos-mes .eventos .event"); 302 303 if(eventos.length > 0){ 304 for(var z = 0; z < eventos.length; z++){ 305 eventos[z].classList.remove("no-mostrar"); 306 } 307 } 308 309 } 310 else{ 311 312 var tipo = ev.currentTarget.id; 313 var eventos_no_mostrar = document.querySelectorAll(".eventos-mes .eventos .event:not(." + tipo +")"); 314 315 if(eventos_no_mostrar.length > 0){ 316 for(var z = 0; z < eventos_no_mostrar.length; z++){ 317 eventos_no_mostrar[z].classList.add("no-mostrar"); 318 } 319 } 320 321 var eventos_mostrar = document.querySelectorAll(".eventos-mes .eventos .event." + tipo); 322 if(eventos_mostrar.length > 0){ 323 for(var z = 0; z < eventos_mostrar.length; z++){ 324 eventos_mostrar[z].classList.remove("no-mostrar"); 325 } 326 } 327 328 329 330 331 } 332 333 var eventos_mes = document.querySelectorAll(".contenedor-eventos .eventos-mes"); 334 335 if(eventos_mes.length > 0){ 336 337 for(var z = 0; z < eventos_mes.length; z++){ 338 339 eventos_mes[z].querySelectorAll(".fecha-eventos .month").forEach((mes)=>{ 340 mes.classList.remove("no-mostrar"); 341 }); 342 343 var count_eventos = eventos_mes[z].querySelectorAll(".eventos .event").length; 344 var count_eventos_no_mostrar = eventos_mes[z].querySelectorAll(".eventos .event.no-mostrar").length; 345 346 if(count_eventos == count_eventos_no_mostrar){ 347 348 if(eventos_mes[z].querySelectorAll(".fecha-eventos .month").length > 0){ 349 eventos_mes[z].querySelectorAll(".fecha-eventos .month").forEach((mes)=>{ 350 mes.classList.add("no-mostrar"); 351 }); 352 } 353 354 } 355 356 } 357 358 } 359 360 }); 361 362 } 363 364 } 365 366 367 368 /** 369 * Evento de scroll para la animación de la barra de progreso. 370 * @type {HTMLElement} 371 */ 372 const navegacionLateral = document.getElementById("wrapper-flecha-scroll"); 373 374 window.addEventListener("scroll", (ev) => { 375 if (navegacionLateral && navegacionLateral != null){ 376 const currentElement = navegacionLateral.querySelector(".current"); 377 const restanteElement = navegacionLateral.querySelector(".restante"); 378 progressBarScroll(currentElement, restanteElement); 379 } 380 if (window.innerWidth > 1024) { 381 cerrarEmergentes(); 382 } 383 }); 384 385 386 387 /** 388 * Funccion para la animación de la barra de progreso en la navegación entre secciones de la home 389 * @param currentElement 390 * @param restanteElement 391 */ 392 function progressBarScroll(currentElement, restanteElement) { 393 let scroll = window.scrollY; 394 let total= document.documentElement.scrollHeight - document.documentElement.clientHeight -1; 395 let current = Math.trunc((scroll * 100) / total); 396 let restant = 100 - current; 397 398 currentElement.style.height = current + "px"; 399 restanteElement.style.height = restant + "px"; 400 401 } 402 403 /** 404 * Crear un observador para ver cuándo se pasa de una sección a otra 405 */ 406 if(navegacionLateral && navegacionLateral != null) { 407 const topArrow = navegacionLateral.querySelector(".arrow-top"); 408 const bottomArrow = navegacionLateral.querySelector(".arrow-bottom"); 409 const sections = document.querySelectorAll('section'); 410 let scrollTopPosition = 0; 411 let scrollBottomPosition = 0; 412 413 414 const observer = new IntersectionObserver(sectionObservationCallback, 415 { 416 root: null, 417 rootMargin: '-48% 0px -48% 0px', 418 threshold: 0 419 }); 420 421 422 sections.forEach(section => { 423 observer.observe(section); 424 }); 425 426 427 /** 428 * Función callback que se ejecuta cuando se pasa de una sección a otra 429 * @param entries 430 */ 431 function sectionObservationCallback(entries) {
432 entries.forEach(entry => { 433 if(entry.isIntersecting){ 434 const navLabel = entry.target.getAttribute('data-label'); 435 const currentElement = entry.target; 436 437 if(currentElement == sections[0]){ 438 topArrow.style.visibility = "hidden"; 439 }else if(currentElement == sections[sections.length - 1]) 440 { 441 bottomArrow.style.visibility = "hidden"; 442 }else{ 443 topArrow.style.visibility = "visible"; 444 bottomArrow.style.visibility = "visible"; 445 } 446 navegacionLateral.querySelector(".label span").innerHTML = navLabel; 447 console.log('cambio de sección'); 448 449 let previousElement = entry.target.previousElementSibling; 450 while (previousElement != null && previousElement.tagName != "SECTION"){ 451 previousElement = previousElement.previousElementSibling; 452 453 } 454 455 let nextElement = currentElement.nextElementSibling; 456 while (nextElement != null && nextElement.tagName != "SECTION"){ 457 nextElement = nextElement.nextElementSibling; 458 } 459 460 461 scrollTopPosition = previousElement != null ? (previousElement.offsetTop - 100): scrollTopPosition; 462 scrollBottomPosition = nextElement !=null ? (nextElement.offsetTop - 100): scrollBottomPosition; 463 464 465 } 466 }); 467 } 468 469 470 topArrow.addEventListener("click", (ev) => { 471 window.scrollTo({ 472 top: scrollTopPosition, 473 behavior: 'smooth'}); 474 }); 475 476 bottomArrow.addEventListener("click", (ev) => { 477 window.scrollTo({ 478 top: scrollBottomPosition, 479 behavior: 'smooth' 480 }); 481 }) 482 483 } 484 485 486 487 488 489 490var boton_filtro = document.querySelectorAll(".boton-movil-filtros"); 491 if(boton_filtro.length > 0){ 492 493 for(var i = 0; i < boton_filtro.length; i++){ 494 495 boton_filtro[i].addEventListener("click", (ev) => { 496 var columna_fitros = ev.currentTarget.parentElement.parentElement; 497 if(ev.currentTarget.classList.contains("btn-blog") || ev.currentTarget.classList.contains("btn-vacancy")){ 498 columna_fitros = ev.currentTarget.parentElement.querySelectorAll(".columna-filtro")[0]; 499 } 500 if(columna_fitros){ 501 if(columna_fitros.classList.contains("filtros-abiertos-movil")){ 502 columna_fitros.classList.remove("filtros-abiertos-movil"); 503 } 504 else{ 505 columna_fitros.classList.add("filtros-abiertos-movil"); 506 } 507 } 508 509 }); 510 511 } 512 513 } 514 /*Resaltar el botón Clear filtros al seleccionar un filtro*/ 515 const filtros = document.querySelectorAll('.item-filtro'); 516 const btn_limpiar = document.querySelector('.limpiar-filtros'); 517 518 if (btn_limpiar) { 519 filtros.forEach(filtro => { 520 filtro.addEventListener('click', e => { 521 btn_limpiar.classList.add('clear-resultado'); 522 }); 523 }); 524 525 btn_limpiar.addEventListener('click', e => { 526 if (btn_limpiar.classList.contains('clear-resultado')) { 527 btn_limpiar.classList.remove('clear-resultado'); 528 } 529 }); 530 } 531 /**/ 532 533}); 534 function scrollToPost(id){ 535 var element = document.getElementById(id); 536 var pos_y = element.getBoundingClientRect().top; 537 window.scrollTo(0, pos_y - 80); 538 } 539document.addEventListener("DOMContentLoaded", function() { 540 // Ocultar el segundo tÃtulo "Speaker" 541 const titles = document.querySelectorAll('.cabecera-autor.bloque-speaker .titulo'); 542 if (titles.length > 1) { 543 titles[1].style.display = 'none'; 544 } 545 const speakers = document.querySelectorAll('.cabecera-autor.bloque-speaker'); 546 // Eliminar el padding-top de 90px del segundo bloque .cabecera-autor 547 if (speakers.length > 1) { 548 speakers[1].style.paddingTop = '0'; 549 } 550}); 551 552 //Desabilitar formulario 553 554 document.addEventListener("DOMContentLoaded", function() { 555 const forms = document.querySelectorAll('.wpcf7');
556 forms.forEach(form => { 557 form.addEventListener('submit', event => { 558 console.log('Enviando...'); 559 const formButton = form.querySelector('input[type="submit"]'); 560 formButton.disabled = true; 561 }) 562 form.addEventListener('wpcf7submit', event => { 563 console.log('Enviado!'); 564 const formButton = form.querySelector('input[type="submit"]'); 565 formButton.disabled = false; 566 }); 567 }); 568 });
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.