HEX
Server: LiteSpeed
System: Linux premium212.web-hosting.com 4.18.0-553.124.4.lve.el8.x86_64 #1 SMP Fri May 15 13:02:13 UTC 2026 x86_64
User: vitanhod (1367)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: //home/vitanhod/barnabites.es/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;