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(); } })();