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/modules/init-modals.js
import { closeModal, openModal, setupModal } from "../modal";
import $ from "jquery";
import {createEvent} from "./events";

const initModals = () => {
    const modal = document.querySelector('.modal--form');
    const modalOpenBtns = document.querySelectorAll('.js-modal');
    const modalCloseBtn = document.querySelector('.js-close-modal');
    let player;
    const modalGallery = document.querySelector('.modal--gallery')
    const gallerySlides = [...document.querySelectorAll('.gallery__item')];
    const galleryAndVideo = [...document.querySelectorAll('.slider-location__item')];
    const gallerySlider = $('.gallery-modal__slider');

    const modalCloseCallback = () => {
        $('.js-form-validate').show();
        $('.form-message').hide();
    }

    const modalOpenCallback = () => {
        if ($(modalOpenBtns).data('vacancy')) {
            $(modal).find('[name=vacancy_id]').val($(modalOpenBtns).data('vacancy'));
            const $ppLink = $(modal).find('.js-privacy-policy');
            $ppLink.attr('href', $ppLink.data($(modalOpenBtns).data('lang')));

            createEvent({
                event: 'click_apply_now',
                job_title: document.querySelector('h1[itemprop="title"]').innerText,
                job_id: $(modalOpenBtns).data('vacancy'),
            });
        }
    }

    if (modal && modalOpenBtns.length) {
        setupModal(modal, modalCloseCallback, modalOpenBtns, modalOpenCallback);
    }

    if (modalGallery) {
        const counter = modalGallery.querySelector('.gallery-modal__counter span')
        setupModal(modalGallery, false, null);
        gallerySlides.forEach((slide) => {
            const clone = slide.cloneNode(true);
            clone.className = 'gallery-modal__slide';
            gallerySlider.append(clone);

            slide.addEventListener('click', (evt) => {
                evt.preventDefault();
                openModal(modalGallery)
                gallerySlider.slick('slickGoTo', gallerySlides.findIndex(el => slide === el), true)
            })
        });

        galleryAndVideo.forEach((slide) => {
            let clone = '';
            if (slide.dataset.id && slide.dataset.src) {
                clone = `<div class="gallery-modal__slide">
                  <div id="${slide.dataset.id}"></div>
                </div>`;

                const tag = document.createElement('script');
                tag.src = "https://www.youtube.com/iframe_api";
                const firstScriptTag = document.getElementsByTagName('script')[0];
                firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
                window.onYouTubeIframeAPIReady = () =>{
                    player = new YT.Player(slide.dataset.id, {
                        videoId: slide.dataset.src,
                        playerVars: {
                            'playsinline': 1
                        },
                    });
                };
            } else {
                clone = slide.cloneNode(true);
                clone.className = 'gallery-modal__slide';
            }

            gallerySlider.append(clone);

            slide.addEventListener('dragend', (evt) => {
                evt.preventDefault();
            });

            slide.addEventListener('click', (evt) => {
                if (slide.dataset.id && slide.dataset.src && player) {
                    player.playVideo();
                }
                evt.preventDefault();
                openModal(modalGallery)
                gallerySlider.slick('slickGoTo', galleryAndVideo.findIndex(el => slide === el), true)
            })
        });

        gallerySlider.slick({
            prevArrow: modalGallery.querySelector('.slider-arrow.as-prev-btn'),
            nextArrow: modalGallery.querySelector('.slider-arrow.as-next-btn'),
        });

        gallerySlider.on('afterChange', function(event, {$slides: slides}, direction) {
            counter.innerHTML = direction + 1 + ' | ' + slides.length
            if (player) {
                player.pauseVideo();
            }
        });

        document.addEventListener('keydown', (e) => {
            if (e.key === 'ArrowLeft') {
                if (player) {
                    player.pauseVideo();
                }
                gallerySlider.slick('slickPrev');
            } else if (e.key === 'ArrowRight') {
                if (player) {
                    player.pauseVideo();
                }
                gallerySlider.slick('slickNext');
            }
        });

        if (modalCloseBtn) {
            modalCloseBtn.addEventListener('click', () => {
                if (player) {
                    player.pauseVideo();
                }
            });
        }

        modalGallery.addEventListener('click', (e) => {
            if (!e.target.closest('.modal__inner')) {
                if (player) {
                    player.pauseVideo();
                }
            }
        });
    }
}

export {initModals}