HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //var/www/quadcode-jobs/resources/js/modal.js
let prevModal = null;

const openModal = (modal, callback, preventScrollLock) => {
    modal.classList.add('is-active');

    if (callback) {
        callback();
    }

    if (!preventScrollLock) {
        window.disableBodyScroll(modal, {
            reserveScrollBarGap: true,
        });
    }
};

const closeModal = (modal, callback, preventScrollLock) => {
    modal.classList.remove('is-active');
    prevModal = null;

    if (callback) {
        callback();
    }

    if (!preventScrollLock) {
        setTimeout(() => {
            window.enableBodyScroll(modal);
        }, 600);
    }
};

const onEscPress = (evt, modal, callback) => {
    const isEscKey = evt.key === 'Escape' || evt.key === 'Esc';

    if (isEscKey && modal.classList.contains('is-active')) {
        evt.preventDefault();
        closeModal(modal, callback);
    }
};

const setModalListeners = (modal, closeCallback, preventScrollLock) => {
    // const overlay = modal.querySelector('.modal__overlay');
    const closeBtn = modal.querySelector('.js-close-modal');
    const otherCloseBtn = modal.querySelector('.js-modal-close');

    closeBtn.addEventListener('click', () => {
        closeModal(modal, closeCallback, preventScrollLock);
    });

    if (otherCloseBtn) {
        otherCloseBtn.addEventListener('click', () => {
            closeModal(modal, closeCallback, preventScrollLock);
        });
    }

    modal.addEventListener('click', (e) => {
        if (!e.target.closest('.modal__inner')) {
            closeModal(modal, closeCallback, preventScrollLock);
        }
    });

    document.addEventListener('keydown', (evt) => {
        onEscPress(evt, modal, closeCallback, preventScrollLock);
    });
};

const setupModal = (modal, closeCallback, modalBtns, openCallback, noPrevDefault, preventScrollLock) => {
    if (modalBtns) {

        modalBtns.forEach((btn) => {
            btn.addEventListener('click', (evt) => {
                if (!noPrevDefault) {
                    evt.preventDefault();
                }
                openModal(modal, openCallback, preventScrollLock);
            });
        });
    }

    setModalListeners(modal, closeCallback, preventScrollLock);
};

export {setupModal, openModal, closeModal};