HEX
Server: LiteSpeed
System: Linux s3604.bom1.stableserver.net 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64
User: dmstechonline (1480)
PHP: 7.4.33
Disabled: NONE
Upload Files
File: /home/dmstechonline/businessclub.dmstech.online/wp-content/themes/rishi/js/submenuToggle.js
function submenuToggle(parentLi) {

    handleParent(parentLi);
    function handleParent(parentLi) {
        if(!parentLi) return;

        const toggleBtn = parentLi.querySelector('.submenu-toggle');
        const submenu = parentLi.querySelector(('ul.sub-menu'))

        if(parentLi.classList.contains('submenu-active')) {
            toggleBtn.setAttribute('aria-expanded', 'false');

            closeSubmenu(submenu, () => {
                parentLi.classList.toggle('submenu-active');
            })
        } else {
            toggleBtn.setAttribute('aria-expanded', 'true');
            [...parentLi.parentNode.children].map((el) => {
                el.classList.contains('submenu-active') && handleParent(el)
            })

            parentLi.classList.toggle('submenu-active')
            openSubmenu(submenu)
        }
    }

    function openSubmenu(submenu) {

        handleTransitionEnd(submenu)
    
        requestAnimationFrame(() => {
            const submenuHeight = submenu.getBoundingClientRect().height
            submenu.style.height = '0px'
    
            requestAnimationFrame(() => {
                submenu.style.height = `${submenuHeight}px`
            })
        })
    
    }
    
    function closeSubmenu(submenu, cb) {
    
        handleTransitionEnd(submenu, cb)
    
        requestAnimationFrame(() => {
            const submenuHeight = submenu.getBoundingClientRect().height
            submenu.style.height = `${submenuHeight}px`
    
            requestAnimationFrame(() => {
                submenu.style.height = '0px'
            })
        })
    }
    
    function handleTransitionEnd(submenu, cb) {
        submenu.addEventListener('transitionend', function onTransitionEnd() {
            submenu.removeAttribute('style')
            submenu.removeEventListener('transitionend', onTransitionEnd)
            if (cb) cb()
        })
    }
}

export default submenuToggle;