if (!window.fbPopoverInitialized) { window.fbPopoverInitialized = true; document.addEventListener('DOMContentLoaded', function () { var popovers = document.querySelectorAll('[fb-popover]'); popovers.forEach(function (popover) { var toggle = popover.querySelector('[fb-popover-button]'); var accnElement = popover.querySelector('[fb-accn]'); var content = popover.querySelector('[fb-popover-content]'); var lastClosedTime = 0; // Almacenar el tiempo de cierre para cada popover var minTimeBeforeReopen = 500; // 0.5 segundos en milisegundos var openedWithKeyboard = false; toggle.setAttribute('aria-label', accnElement.textContent || accnElement.innerText); toggle.setAttribute('aria-controls', content.id); toggle.addEventListener('keydown', function (event) { if (['Enter', ' ', 'Spacebar'].includes(event.key)) { openedWithKeyboard = true; } }); toggle.addEventListener('click', function () { var currentTime = Date.now(); var elapsedTime = currentTime - lastClosedTime; if (elapsedTime < minTimeBeforeReopen) { return; // No se permite abrir el popover si no ha pasado el tiempo mÃnimo } var expanded = toggle.getAttribute('aria-expanded') === 'true'; toggle.setAttribute('aria-expanded', expanded ? 'false' : 'true'); if (expanded) { content.classList.remove('fb-popover--open'); lastClosedTime = Date.now(); // Almacenar el tiempo de cierre al cerrar el popover } else { content.classList.add('fb-popover--open'); lastClosedTime = 0; // Resetear el tiempo de cierre al abrir el popover setTimeout(function () { if (openedWithKeyboard) { focusFirstElementInContent(); } document.addEventListener('mousedown', clickOutsideHandler); // Cambiado de `click` a `mousedown` document.addEventListener('keydown', escapeKeyHandler); document.addEventListener('focusin', focusInHandler); }, 700); // Espera 0.7 segundos antes de enfocar el primer elemento } }); function focusFirstElementInContent() { var focusableElement = content.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'); if (focusableElement) { focusableElement.focus(); } } function clickOutsideHandler(event) { // Cerrar el popover si se hace clic fuera, independientemente de cómo se abrió if (!popover.contains(event.target)) { toggle.setAttribute('aria-expanded', 'false'); content.classList.remove('fb-popover--open'); lastClosedTime = Date.now(); // Almacenar el tiempo de cierre al hacer clic fuera del popover document.removeEventListener('mousedown', clickOutsideHandler); document.removeEventListener('keydown', escapeKeyHandler); document.removeEventListener('focusin', focusInHandler); } } function escapeKeyHandler(event) { if (event.key === 'Escape' && toggle.getAttribute('aria-expanded') === 'true') { toggle.setAttribute('aria-expanded', 'false'); content.classList.remove('fb-popover--open'); lastClosedTime = Date.now(); // Almacenar el tiempo de cierre al presionar Escape document.removeEventListener('mousedown', clickOutsideHandler); document.removeEventListener('keydown', escapeKeyHandler); document.removeEventListener('focusin', focusInHandler); } } function focusInHandler(event) { if (!popover.contains(event.target)) { // Verifica que el foco no esté dentro del popover toggle.setAttribute('aria-expanded', 'false'); content.classList.remove('fb-popover--open'); lastClosedTime = Date.now(); document.removeEventListener('mousedown', clickOutsideHandler); document.removeEventListener('keydown', escapeKeyHandler); document.removeEventListener('focusin', focusInHandler); } } // Previene el cierre del popover si se hace clic dentro del contenido content.addEventListener('mousedown', function(event) { event.stopPropagation(); }); }); }); }