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/frontend/src/js/components/modal/Modal.js
import {createEvent} from "../events";
import {clickOutside} from "../../helpers/click-outside";

export const Modal = (name, autoOpen, options = {}) => {
    const modalEl = document.querySelector(`[data-widget="${name}"]`);
    
    const modalContent = modalEl?.querySelector('.modal__content') || modalEl?.querySelector('.modal-once__content');
    const btnEl = document.querySelectorAll(`[data-role="${name}"]`);
    const btnCloseEl = document.querySelectorAll(`[data-role="${name}-close"]`);
    if (btnEl.length === 0 && !modalEl) return false;
    
    const open = () => {
        if (['contacts', 'saas', 'saas2'].includes(name)) {
            createEvent({event:'saas_form_opening'});
        }
        document.body.style.overflow = 'hidden';
        return modalEl.classList.add('active');
    }

    const close = () => {
        if(options.onClose) {
          options.onClose();
        }
        if(modalEl.classList.contains('active')) {
          document.body.style.overflow = null;
        }
        modalEl.classList.remove('active');
    }

    btnEl.forEach((item) => {
        item.addEventListener('click', () => {
            open();
        }, false);
    })

    if (autoOpen) {
        if(options.timeout) {
            setTimeout(open, options.timeout)
        }
        else {
            open();
        }
    }
    if(modalEl, options.clickOutside) {
      clickOutside(modalContent, close);
    }

    if (btnCloseEl && btnCloseEl.length > 0) {
        btnCloseEl.forEach(button => {
            button.addEventListener('click', close, false);
        });
    }

    return {
      open,
      close
    }
}