HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/rentman2019.komma.pro/resources/assets/js/site/submenuHandler.js
/* ==========================================================================
   Subnav handler
   - Handles the subnav component which has the proper classes.
 ========================================================================== */

export const SubmenuHandler = {

    activeMenu: null,

    init: function () {

        const submenuTriggers = document.querySelectorAll('.js-submenu-trigger');
        if(isset(submenuTriggers) && submenuTriggers.length !== 0){

            for(let i = 0; i < submenuTriggers.length; i++){
                const submenuTrigger = submenuTriggers[i];
                submenuTrigger.addEventListener('click', SubmenuHandler.toggleMenu);
            }
        }

        const subsubmenuTriggers = document.querySelectorAll('.js-subsubmenu-trigger')
        if(isset(subsubmenuTriggers) && subsubmenuTriggers.length !== 0){
            for(let i = 0; i < subsubmenuTriggers.length; i++){
                const subsubmenuTrigger = subsubmenuTriggers[i];
                subsubmenuTrigger.addEventListener('mouseover', SubmenuHandler.mouseIn);
                subsubmenuTrigger.addEventListener('mouseout', SubmenuHandler.mouseOut);

            }
        }
    },

    toggleMenu: function (evt) {
        const el = evt.currentTarget.parentElement;
        const menu = el.querySelector('.js-submenu');
        if(isset(menu)) {
            menu.classList.toggle('is-open');
            SubmenuHandler.listenerToClickOutside(menu);
        }
    },

    listenerToClickOutside: function (menu) {
        if(menu.classList.contains('is-open')) {
            SubmenuHandler.activeMenu = menu;
            window.addEventListener('click', SubmenuHandler.clickOutsideMenu);
        }
        else {
            SubmenuHandler.activeMenu = null;
            window.removeEventListener('click', SubmenuHandler.clickOutsideMenu);
        }
    },

    clickOutsideMenu: function (evt) {

        if(!isset(SubmenuHandler.activeMenu)) return;

        if (SubmenuHandler.outsideClick(evt, SubmenuHandler.activeMenu) && !evt.target.classList.contains('js-submenu-trigger')) {
            SubmenuHandler.activeMenu.classList.remove('is-open');
            SubmenuHandler.activeMenu.classList.remove('hovering');
            SubmenuHandler.listenerToClickOutside(SubmenuHandler.activeMenu);
        }
    },

    toggleSubmenu: function (el, direction = 0) {
        const subMenu = el.parentElement.parentElement;
        const subsubMenu = el.querySelector('.js-subsubmenu');

        if(direction === 0) {
            subMenu.classList.add('hovering');
            subsubMenu.classList.add('is-open');
            subMenu.style.minHeight = subsubMenu.clientHeight + 'px';
        }
        else {
            subMenu.classList.remove('hovering');
            subsubMenu.classList.remove('is-open');
            subMenu.style.minHeight = null;
        }
    },

    mouseIn: function (evt) {
        const el = evt.currentTarget;
        SubmenuHandler.toggleSubmenu(el);
    },
    mouseOut: function (evt) {
        const el = evt.currentTarget;
        SubmenuHandler.toggleSubmenu(el, 1);
    },

    outsideClick: function (event, notelem)	{
        let clickedOut = true;
        if (event.target == notelem || notelem.contains(event.target)) clickedOut = false;
        return clickedOut
    }
};