Zapisz się do Newslettera
// Skrypt do automatycznego zamykania popupu po 20 sekundach bezczynności
(function() {
// Funkcja wyszukująca i zamykająca popup
function setupPopupAutoClose() {
// Szukamy popupu w dokumencie - dopasowane do struktury strony
var popup = document.querySelector('.brxe-popup');
if (!popup) {
// Jeśli nie znaleziono popupu, spróbuj inne selektory
popup = document.querySelector('.brxe-container.popup');
if (!popup) {
// Wciąż nie znaleziono, spróbuj ogólniejsze selektory
popup = document.querySelector('[class*="popup"]');
if (!popup) {
return; // Jeśli wciąż nie znaleziono, zakończ funkcję
}
}
}
console.log('Znaleziono popup:', popup);
var inactivityTimer;
var timeoutDuration = 3000; // 20 sekund w milisekundach
// Funkcja resetująca timer
function resetInactivityTimer() {
clearTimeout(inactivityTimer);
inactivityTimer = setTimeout(function() {
closePopupIfUnchanged();
}, timeoutDuration);
}
// Funkcja sprawdzająca czy formularz ma wprowadzone dane i zamykająca popup
function closePopupIfUnchanged() {
var formInputs = popup.querySelectorAll('input, textarea, select');
var formChanged = false;
for (var i = 0; i < formInputs.length; i++) {
if (formInputs[i].value.trim() !== '') {
formChanged = true;
break;
}
}
if (!formChanged) {
// Próbujemy znaleźć przycisk zamykania
var closeButton = popup.querySelector('.brx-popup-close, .close-button, .popup-close, [class*="close"]');
if (closeButton) {
// Symuluj kliknięcie przycisku zamykania
closeButton.click();
console.log('Zamknięto popup przyciskiem');
} else {
// Alternatywne metody zamykania
// 3. Dodaj klasę hidden lub closed, jeśli takie są używane
popup.classList.add('hide');
console.log('Zamknięto popup przez manipulację CSS');
}
// Jeśli popup jest w overlay, spróbuj też ukryć overlay
var overlay = document.querySelector('.popup-overlay, .brx-popup-overlay, .modal-backdrop');
if (overlay) {
overlay.style.display = 'none';
overlay.classList.remove('open', 'active', 'visible', 'show');
overlay.classList.add('hidden', 'closed');
}
console.log('Popup został automatycznie zamknięty po 20 sekundach bezczynności');
}
}
// Ustawienie początkowego timera
resetInactivityTimer();
// Dodanie nasłuchiwania zdarzeń na elementach formularza
var formElements = popup.querySelectorAll('input, textarea, select, button');
for (var i = 0; i < formElements.length; i++) {
formElements[i].addEventListener('focus', resetInactivityTimer);
formElements[i].addEventListener('input', resetInactivityTimer);
formElements[i].addEventListener('click', resetInactivityTimer);
}
// Dodanie nasłuchiwania ruchu myszką nad popupem
popup.addEventListener('mousemove', resetInactivityTimer);
}
// Funkcja wykrywająca otwarcie popupu
function watchForPopup() {
// 1. Sprawdź czy popup jest już otwarty
setupPopupAutoClose();
// 2. Obserwuj zmiany w DOM, aby wykryć otwarcie popupu
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.addedNodes && mutation.addedNodes.length > 0) {
// Sprawdź czy wśród dodanych elementów jest popup
setupPopupAutoClose();
}
// Sprawdź też zmiany klas (mogą oznaczać otwarcie popupu)
if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
setupPopupAutoClose();
}
});
});
// Obserwuj zmiany w całym dokumencie
observer.observe(document.body, {
childList: true,
subtree: true,
attributes: true,
attributeFilter: ['class']
});
// 3. Dodaj nasłuchiwanie kliknięć, które mogą otwierać popup
document.addEventListener('click', function() {
// Opóźnij sprawdzenie, aby dać czas na otwarcie popupu
setTimeout(setupPopupAutoClose, 500);
});
}
// Uruchom wykrywanie popupu gdy strona się załaduje
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', watchForPopup);
} else {
watchForPopup();
}
})();