1 2if ($('#edit-nombre').length === 0) { 3 $('fieldset[data-drupal-selector="edit-captcha"]').hide(); 4} 5 6jQuery(document).ready(function () { 7 8 9 // Selecciona el contenedor principal del formulario de taxonomÃa 10 var $container = jQuery('#edit-taxonomia'); 11 // Inicializa una pila para manejar los contenedores de niveles anidados, comenzando con el contenedor principal 12 var levelContainersStack = [$container]; 13 14 // Recorre cada elemento con la clase 'form-item' dentro del contenedor principal 15 $container.find('.form-item').each(function () { 16 var $item = jQuery(this); // El elemento actual del formulario 17 18 // Busca el input de tipo checkbox y la etiqueta asociados al elemento del formulario 19 var $input = $item.find('input[type="checkbox"]'); 20 var $label = $item.find('label'); 21 var text = $label.text().trim(); // Obtiene el texto de la etiqueta y elimina espacios en blanco al inicio y al final 22 var level = (text.match(/^-+/) || [''])[0].length; // Calcula el nivel de anidación contando los guiones al inicio del texto 23 24 // Limpia los guiones del texto para obtener el texto limpio 25 var cleanText = text.replace(/^-+/, ''); 26 27 // Si el prefijo 'AAA_' está presente, sustituye todo el texto por '--sin temática--' 28 cleanText = /^AAA_/.test(cleanText) ? 'Sin subtema' : cleanText; 29 30 // Reconstruye el $item colocando primero el input y luego el texto limpio en un span 31 $item.empty().append($input).append(jQuery('<span>').text(cleanText)); 32 33 // Ajusta la pila de contenedores para reflejar el nivel actual 34 // Si el nivel actual es menor que el tamaño de la pila, reduce la pila eliminando contenedores de niveles superiores 35 while (levelContainersStack.length > level + 1) { 36 levelContainersStack.pop(); 37 } 38 39 // Si el nivel actual es más profundo que la pila, crea un nuevo contenedor para ese nivel 40 if (levelContainersStack.length <= level) { 41 var $newContainer = jQuery('<div>') 42 .addClass('level-' + level) // Asigna una clase basada en el nivel (level-0, level-1, etc.) 43 .css('margin-left', 25 + 'px'); // Establece el margen izquierdo para indicar la profundidad de anidación 44 // Agrega el nuevo contenedor al contenedor del nivel anterior 45 levelContainersStack[levelContainersStack.length - 1].append($newContainer); 46 // Añade el nuevo contenedor a la pila 47 levelContainersStack.push($newContainer); 48 } 49 50 // Añade el elemento del formulario ($item) al contenedor correspondiente del nivel actual 51 levelContainersStack[levelContainersStack.length - 1].append($item); 52 }); 53 54 // Añade funcionalidad de expandir/contraer a los elementos de niveles especÃficos 55 jQuery('.level-1, .level-2, .level-3, .level-4, .level-5').each(function () { 56 var $container = jQuery(this); // Contenedor actual del nivel 57 var level = parseInt($container.attr('class').match(/level-(\d+)/)[1]); // Obtiene el número del nivel 58 59 // Selecciona el elemento de formulario anterior al contenedor actual 60 var $prevItem = $container.prev('.form-item'); 61 if ($prevItem.length) { 62 var $input = $prevItem.find('input[type="checkbox"]'); // Encuentra el checkbox del elemento anterior 63 64 // Crea el icono de expandir/contraer y lo coloca delante del checkbox 65 var $toggleIcon = jQuery('<span class="toggle-icon">[+]</span> '); 66 $prevItem.prepend($toggleIcon); 67 $toggleIcon.css({ 68 'cursor': 'pointer', // Cambia el cursor para indicar que es interactivo 69 'width': '19px' // Establece un ancho fijo para el icono 70 }); 71 72 // Aplica margen izquierdo al checkbox para ajustarlo visualmente 73 $input.css('margin-left', '6px'); 74 75 // Maneja el evento de clic para expandir/contraer el contenedor 76 $toggleIcon.click(function () { 77 $container.toggleClass('hidden'); // Alterna la clase 'hidden' para mostrar u ocultar el contenedor 78 $toggleIcon.text($container.hasClass('hidden') ? '[+]' : '[-]'); // Cambia el texto del icono según el estado 79 }); 80 81 // Inicialmente oculta los niveles anidados 82 $container.addClass('hidden'); 83 } 84 }); 85}); 86 87$(document).ready(function() { 88 // Selecciona los contenedores para "AUTONÃMICO" y "LOCAL" 89 const $autonomicoItem = $("#edit-ambito .form-item:has(label:contains('AUTONÃMICO'))"); 90 const $localItem = $("#edit-ambito .form-item:has(label:contains('LOCAL'))"); 91 92 // Crea los contenedores "level-1" y los inserta después de los items correspondientes
93 const $autonomicoContainer = $('<div class="level-1" style="margin-left: 25px;"></div>').insertAfter($autonomicoItem); 94 const $localContainer = $('<div class="level-1" style="margin-left: 25px;"></div>').insertAfter($localItem); 95 96 // Mueve los elementos al contenedor correspondiente sin duplicar los nombres especificados 97 $("#edit-elige-la-region .form-item").each(function() { 98 const $label = $(this).find("label"); 99 const text = $label.text().trim(); 100 const textUpper = text.toUpperCase(); 101 102 // Verifica si el elemento es todo en mayúsculas o no y excluye ciertos textos 103 if (textUpper === text && text !== "AUTONÃMICO" && text !== "LOCAL" && text !== "ESTATAL") { 104 $(this).appendTo($autonomicoContainer); 105 } else if (textUpper !== text && text !== "AUTONÃMICO" && text !== "LOCAL" && text !== "ESTATAL") { 106 $(this).appendTo($localContainer); 107 } 108 }); 109 110 // Limpia el contenedor original 111 $("#edit-elige-la-region--wrapper").empty(); 112 113 114 // Añade funcionalidad de expandir/contraer a los elementos de niveles especÃficos 115 $('#edit-ambito--wrapper .level-1').each(function () { 116 const $container = jQuery(this); // Contenedor actual del nivel 117 const level = parseInt($container.attr('class').match(/level-(\d+)/)[1]); // Obtiene el número del nivel 118 119 // Selecciona el elemento de formulario anterior al contenedor actual 120 const $prevItem = $container.prev('.form-item'); 121 if ($prevItem.length) { 122 const $input = $prevItem.find('input[type="checkbox"]'); // Encuentra el checkbox del elemento anterior 123 124 // Crea el icono de expandir/contraer y lo coloca delante del checkbox 125 const $toggleIcon = $('<span class="toggle-icon">[+]</span> '); 126 $prevItem.prepend($toggleIcon); 127 $toggleIcon.css({ 128 'cursor': 'pointer', // Cambia el cursor para indicar que es interactivo 129 'width': '19px' // Establece un ancho fijo para el icono 130 }); 131 132 // Aplica margen izquierdo al checkbox para ajustarlo visualmente 133 $input.css('margin-left', '6px'); 134 135 // Maneja el evento de clic para expandir/contraer el contenedor 136 $toggleIcon.click(function () { 137 $container.toggleClass('hidden'); // Alterna la clase 'hidden' para mostrar u ocultar el contenedor 138 $toggleIcon.text($container.hasClass('hidden') ? '[+]' : '[-]'); // Cambia el texto del icono según el estado 139 }); 140 141 // Inicialmente oculta los niveles anidados 142 $container.addClass('hidden'); 143 } 144 }); 145}); 146 147 148$(document).ready(function() { 149 $('.form-checkbox').on('change', function() { 150 var $checkbox = $(this); 151 var isChecked = $checkbox.is(':checked'); 152 153 // Manejar los descendientes 154 toggleDescendants($checkbox, isChecked); 155 156 // Manejar los ancestros 157 updateAncestors($checkbox); 158 }); 159 160 function toggleDescendants($checkbox, isChecked) { 161 var $currentDiv = $checkbox.closest('div.checkbox'); 162 var $nextElements = $currentDiv.nextAll(); 163 var currentLevel = getLevel($currentDiv); 164 165 $nextElements.each(function() { 166 var $element = $(this); 167 var elementLevel = getLevel($element); 168 169 if (elementLevel <= currentLevel) { 170 // Hemos salido del ámbito de los descendientes 171 return false; 172 } 173 174 // Seleccionamos o deseleccionamos el checkbox 175 $element.find('.form-checkbox').prop('checked', isChecked); 176 }); 177 } 178 179 function updateAncestors($checkbox) { 180 var $parentLevels = $checkbox.parents('div.level-1, div.level-2, div.level-3, div.level-4'); 181 182 $parentLevels.each(function() { 183 var $levelDiv = $(this); 184 var $parentCheckboxDiv = $levelDiv.prevAll('div.checkbox').first(); 185 var $parentCheckbox = $parentCheckboxDiv.find('.form-checkbox'); 186 187 // Verificar si alguno de los hijos está seleccionado 188 var anyChildChecked = $levelDiv.find('.form-checkbox:checked').length > 0; 189 190 $parentCheckbox.prop('checked', anyChildChecked); 191 }); 192 } 193 194 function getLevel($element) { 195 if ($element.hasClass('checkbox')) { 196 return parseInt($element.attr('data-level')) || 0; 197 } else if ($element.hasClass('level-1')) { 198 return 1; 199 } else if ($element.hasClass('level-2')) { 200 return 2; 201 } else if ($element.hasClass('level-3')) { 202 return 3; 203 } else if ($element.hasClass('level-4')) { 204 return 4; 205 } else { 206 return 999; // Nivel más profundo por defecto 207 } 208 } 209}); 210 211jQuery(window).on("load", function () { 212 213 //@ Efecto acordeón 214 jQuery(".accordion > .title").click(function (el) { 215 jQuery(this).closest('.accordion').find(".content").slideToggle(); 216 return false;
217 }); 218 219 220 //@ ========================================================================================== 221 //@ PINTADO DEL MENà LATERAL DERECHO CON LOS MENà ITEMS HIJOS DEL CONTENIDO ACTUAL 222 //@ ========================================================================================== 223 //@ Para recrear este menú, se verifica qué menu está activo en el menú principal y se 224 //@ obtiene todos sus submenus, que serán añadidos a un nuevo <div> con clase "menu-lateral" 225 226 //@ Comprobar si existe el contenedor ".group-wrapper-izquierda", si no existe, 227 //@ la página no será Contenido y no habrá que pintar ningún menú lateral 228 229 if (jQuery(".group-wrapper-izquierda")) { 230 let rw = jQuery(".group-wrapper-derecha"); 231 //@ Si no existe el wrapper derecho se crea manualmente y se añade al la región general 232 if (!rw) { 233 rw = jQuery('<div class="group-wrapper-derecha"></div>'); 234 let generalRegion = jQuery('.general-region-content'); 235 if (generalRegion) generalRegion.append(rw); 236 } 237 238 //@ Comprobar si hay menú hijo que mostrar en el menu lateral derecho y si es asÃ, 239 //@ obtener todos sus hijos y añadirselos a un nuevo <div> ("menu-lateral") 240 if (jQuery('#block-idae-theme-main-menu .active.active-trail').last()) { 241 let children = jQuery("#block-idae-theme-main-menu .active.active-trail").last().children("ul"); 242 //let children = jQuery("#block-idae-theme-main-menu .active.active-trail").children("ul"); 243 if (children && children.length>0) { 244 let content = '<ul class="menu-lateral">'+children.html()+'</ul>'; 245 rw.prepend(content); 246 //@ console.info("Right Menu Writed!!", content); 247 } 248 } 249 250 //@ ========================================================================================== 251 //@ FIN PINTADO MENU LATERAL 252 //@ ========================================================================================== 253 } 254 jQuery(document).ready(function () { 255 var menuZone = jQuery(".group-wrapper-derecha .menu-lateral .menu-icon.menu-icon-529"); 256 if(menuZone){ 257 var SectionTitle = $('<div class="field--label">Consulte</div>'); 258 259 // Crear un nuevo div para añadir el texto encima del boton. 260 jQuery("<div class=\"field--label\">Consulte</div>").insertBefore(".group-wrapper-derecha .menu-lateral .menu-icon.menu-icon-529 a"); 261 //Cambiamos el texto del boton, ya que viene dado de los menus, y no se puede cambiar a traves de edicion de campos. 262 jQuery(".group-wrapper-derecha .menu-lateral .menu-icon.menu-icon-529 a").addClass("subscribe-button"); 263 jQuery(".group-wrapper-derecha .menu-lateral .menu-icon.menu-icon-529 a").text("BoletÃn de Ayudas en materia energética"); 264 } 265 266 if(jQuery(".webform-submission-subscriptionform-form")){ 267 var buttonEdit = $('<a class="button button--primary btn-primary btn" href="/user/login">Modificar la suscripción</a>'); 268 $("button.webform-button--submit").after(buttonEdit); 269 } 270 //Añadimos el boton al lado del enviar del formulario 271 272 }); 273 274 jQuery("#search-button, #menu-button").on("click", function (e) { 275 console.debug("click"); 276 let targetId = jQuery(e.currentTarget).attr('id'); 277 let element; 278 if (targetId === 'search-button') 279 element = jQuery("#block-idae-theme-search"); 280 else 281 element = jQuery("#block-idae-theme-main-menu"); 282 if (!element.hasClass('open')) { 283 closeMenus(); 284 element.removeClass('closed'); 285 element.addClass('open'); 286 } else 287 closeMenus(); 288 }); 289 290 //@ jQuery("#search-button, #menu-button").click(); 291 292 jQuery("#block-idae-theme-main-menu").addClass("closed"); 293 294 jQuery("#block-idae-theme-main-menu").css("display", "unset"); 295 296 /* xurdep: Filter Button */ 297 jQuery(".filter-button").on("click", function(e) { 298 jQuery(".custom-filter-wrapper").slideToggle(500, ()=>{ 299 if (jQuery(".custom-filter-wrapper").is(":visible")) { 300 jQuery(".filter-button").addClass("filtros-hide"); 301 } 302 else { 303 jQuery(".filter-button").removeClass("filtros-hide"); 304 } 305 }); 306 }); 307 jQuery(document).ready(function(){ 308 jQuery('#block-views-block-modales-en-oficina-tecnica-de-energia-block-1').appendTo('#modalesoficina'); 309 310 jQuery('.bloque-cols').each(function(){ 311 312 var tam=jQuery(this).height(); 313 //jQuery(this).parent().parent().css('height', tam); 314 var min=0; 315 jQuery(this).children().children().each(function(){ 316 if(jQuery(this).height() > min){ 317 jQuery(this).parent().css('min-height', jQuery(this).height()+ 'px'); 318 min=jQuery(this).height(); 319 } 320 }); 321 jQuery(this).children().children().each(function(){ 322 if( (jQuery(this).parent().hasClass('left'))||(jQuery(this).parent().hasClass('right'))) { 323 jQuery(this).css('min-height', min+ 'px'); 324 } 325 }); 326 }); 327 }); 328 329}); 330 331document.addEventListener('DOMContentLoaded', function () { 332 const headers = document.querySelectorAll('.collapsible-header'); 333
334 headers.forEach(header => { 335 header.addEventListener('click', function () { 336 const targetId = this.getAttribute('data-toggle'); 337 const targetBody = document.getElementById(targetId); 338 339 if (!targetBody) { 340 console.error('Elemento no encontrado:', targetId); 341 return; 342 } 343 344 const allBodies = document.querySelectorAll('.collapsible-body.expanded'); 345 const otherBodies = Array.from(allBodies).filter(body => body !== targetBody); 346 347 // Paso 1: cerrar todos los demás 348 otherBodies.forEach(body => { 349 body.style.height = `${body.scrollHeight}px`; // Fijamos altura antes de animar 350 requestAnimationFrame(() => { 351 body.style.height = '0'; 352 body.classList.remove('expanded'); 353 }); 354 }); 355 356 // Paso 2: esperar a que terminen de cerrarse (asumimos 800ms por el CSS) 357 setTimeout(() => { 358 // Paso 3: abrir el actual si no estaba abierto 359 if (!targetBody.classList.contains('expanded')) { 360 targetBody.style.height = '0'; // Reseteamos 361 targetBody.classList.add('expanded'); 362 requestAnimationFrame(() => { 363 targetBody.style.height = `${targetBody.scrollHeight}px`; 364 }); 365 /* 366 // Paso 4: scroll al encabezado 367 const offsetTop = this.getBoundingClientRect().top + window.scrollY; 368 setTimeout(() => { 369 window.scrollTo({ top: offsetTop - 20, behavior: 'smooth' }); 370 }, 10); // un pelÃn de margen tras abrir 371 */ 372 } else { 373 // Si ya estaba abierto, lo cerramos (aunque no deberÃa pasar porque está excluido arriba) 374 targetBody.style.height = `${targetBody.scrollHeight}px`; 375 requestAnimationFrame(() => { 376 targetBody.style.height = '0'; 377 targetBody.classList.remove('expanded'); 378 }); 379 } 380 }, 850); // igual o mayor al tiempo de transición CSS 381 }); 382 }); 383}); 384 385function closeMenus() { 386 closeMenusAction(jQuery("#block-idae-theme-search")); 387 closeMenusAction(jQuery("#block-idae-theme-main-menu")); 388 389} 390 391function closeMenusAction(element) { 392 if(element.hasClass('open')) { 393 element.removeClass('open'); 394 element.addClass('closed'); 395 } 396} 397 398//@ ========================================================================================== 399//@ FUNCIONALIDAD ADDTOANY BOTONES COMPARTIR 400//@ ========================================================================================== 401 402function manageShareButtons() { 403 var timer = -1; 404 var toggle = jQuery('.collapse-btn.button.button-toggle'); 405 toggle.click(function () { 406 if (toggle.hasClass("opened")) { 407 toggle.removeClass("opened"); 408 toggle.addClass("closed"); 409 clearTimeout(timer); 410 } 411 else { 412 toggle.removeClass("closed"); 413 toggle.addClass("opened"); 414 timer = setTimeout(function () { 415 toggle.click(); 416 }, 5000); 417 } 418 }); 419} 420 421manageShareButtons(); 422/* 423document.addEventListener('DOMContentLoaded', function () { 424 // Seleccionamos todos los encabezados colapsables 425 const headers = document.querySelectorAll('.collapsible-header'); 426 427 headers.forEach(header => { 428 header.addEventListener('click', function () { 429 // Obtenemos el ID del cuerpo objetivo 430 const targetId = this.getAttribute('data-toggle'); 431 const targetBody = document.getElementById(targetId); 432 433 if (targetBody) { 434 // Contraemos cualquier otro cuerpo expandido 435 const allBodies = document.querySelectorAll('.collapsible-body.expanded'); 436 allBodies.forEach(body => { 437 if (body !== targetBody) { 438 body.style.height = `${body.scrollHeight}px`; // Fija la altura actual antes de la transición 439 requestAnimationFrame(() => { 440 body.style.height = '0'; // Inicia la transición hacia altura 0 441 body.classList.remove('expanded'); 442 }); 443 } 444 }); 445 446 // Alternamos el estado del cuerpo objetivo 447 if (targetBody.classList.contains('expanded')) { 448 // Colapsar el actual 449 targetBody.style.height = `${targetBody.scrollHeight}px`; // Fija la altura actual 450 requestAnimationFrame(() => { 451 targetBody.style.height = '0'; // Transición a altura 0 452 targetBody.classList.remove('expanded'); 453 }); 454 } else { 455 // Expandir el seleccionado 456 targetBody.style.height = '0'; // Reseteamos la altura para que la transición funcione 457 targetBody.classList.add('expanded'); 458 requestAnimationFrame(() => { 459 targetBody.style.height = `${targetBody.scrollHeight}px`; // Expandir 460 }); 461 } 462 } else { 463 console.error('Elemento no encontrado:', targetId); 464 } 465 }); 466 }); 467}); 468*/ 469jQuery(document).ready(function() { 470 var fechaActual = new Date(); 471 472 // Establecer la fecha lÃmite (1 de julio de 2023) 473 var fechaLimite = new Date('2023-07-15'); 474 475 // Verificar si la fecha actual es posterior a la fecha lÃmite 476 if (fechaActual > fechaLimite) { 477 return; // Detener la ejecución del código 478 } 479 480 if (jQuery('section.banner').length) { 481 var teletypeContainer = jQuery('<div class="teletype-container"></div>'); 482 var teletype = jQuery('<div class="teletype"></div>'); 483 var teletypeText = jQuery('<div class="teletype-text">NOVEDAD</div>'); 484 485 teletype.append(teletypeText); 486 teletypeContainer.append(teletype); 487 jQuery('section.banner .colored-home-block-link').prepend(teletypeContainer); 488 } 489}); 490 491 492 493 494function showEvents(dayId) { 495 // Oculta todos los contenidos 496 const tabs = document.getElementsByClassName("tab-content"); 497 for (let i = 0; i < tabs.length; i++) { 498 tabs[i].style.display = "none"; 499 } 500
501 // Obtener el div por su ID y verificar que exista 502 const div = document.getElementById(dayId); 503 if (!div) { 504 505 return; // Se termina la función si no existe el div 506 } 507 508 // Buscar el <ul> dentro del div y verificar si existe 509 let numeroDeLis = 0; 510 const ul = div.querySelector('ul'); 511 if (ul) { 512 const lis = ul.querySelectorAll('li'); 513 numeroDeLis = lis.length; 514 } 515 516 // Actualizar el contenido de 'day_events' solo si existe 517 const dayEventsEl = document.getElementById('day_events'); 518 if (dayEventsEl) { 519 dayEventsEl.textContent = numeroDeLis + ' Eventos'; 520 } 521 522 // Muestra el contenido del dÃa seleccionado 523 div.style.display = "block"; 524} 525 526 527function showEvents2(dayNumber) { 528 // Actualiza el número del dÃa solo si el elemento existe 529 const dayNumberEl = document.getElementById('day_number'); 530 if (dayNumberEl) { 531 dayNumberEl.textContent = dayNumber; 532 } 533 534 // Calcula el dÃa de la semana y actualiza el contenido solo si el elemento existe 535 const weekDays = [ 'Sábado', 'Domingo', 'Lunes', 'Martes', 'Miércoles','Jueves', 'Viernes']; 536 const dayOfWeek = weekDays[(dayNumber - 1) % 7]; 537 const dayWeekEl = document.getElementById('day_week'); 538 if (dayWeekEl) { 539 dayWeekEl.textContent = dayOfWeek; 540 } 541} 542 543 544// Añade el evento onclick a todos los tabs activos 545document.querySelectorAll('.tab').forEach(tab => { 546 tab.onclick = function() { 547 showEvents2(this.textContent.trim()); 548 showEvents('day'+this.textContent.trim()); 549 } 550}); 551 552const hoy = new Date(); 553const diaNumero = hoy.getDate(); 554// showEvents2(diaNumero); 555// showEvents('day'+diaNumero); 556 557 558 559 jQuery(document).ready(function ($) { 560 $('div.field.field--name-field-ambito .field--item').each(function () { 561 if ($(this).text().trim() === 'LOCAL') { 562 $(this).hide(); 563 } 564 }); 565 }); 566 567 568 569 570 571 572 573 574document.addEventListener('DOMContentLoaded', function() { 575 // Usar jQuery de manera segura dentro de la función 576 if (document.getElementById('genera')) { 577 jQuery(function () { 578 // Reemplazar '.flexslider' con tu selector especÃfico si es diferente 579 jQuery('.flexslider').each(function () { 580 // Verificar si FlexSlider ya ha sido inicializado para evitar duplicados 581 if (!this.classList.contains('flexslider-initialized')) { 582 jQuery(this).flexslider({ 583 animation: "slide" 584 585 }); 586 this.classList.add('flexslider-initialized'); 587 } 588 }); 589 }); 590 } 591}); 592 593
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.