File: theme.js

package info (click to toggle)
python-advanced-alchemy 1.6.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,424 kB
  • sloc: python: 33,714; makefile: 162; javascript: 123; sh: 4
file content (49 lines) | stat: -rw-r--r-- 1,517 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
function initDropdowns() {
    const dropdownToggles = document.querySelectorAll(".st-dropdown-toggle")

    const dropdowns = [...dropdownToggles].map(toggleEl => ({
        toggleEl,
        contentEL: toggleEl.parentElement.querySelector(".st-dropdown-menu")
    }))

    const close = (dropdown) => {
        const {toggleEl, contentEL} = dropdown
        toggleEl.setAttribute("aria-expanded", "false")
        contentEL.classList.toggle("hidden", true)
    }

    const closeAll = () => dropdowns.forEach(close)

    const open = (dropdown) => {
        closeAll()
        dropdown.toggleEl.setAttribute("aria-expanded", "true")
        dropdown.contentEL.classList.toggle("hidden", false)
        const boundaries = [dropdown.contentEL, ...dropdownToggles]
        const clickOutsideListener = (event) => {
            const target = event.target
            if (!target) return

            if (!boundaries.some(b => b.contains(target))) {
                closeAll()
                document.removeEventListener("click", clickOutsideListener)
            }

        }
        document.addEventListener("click", clickOutsideListener)
    }


    dropdowns.forEach(dropdown => {
        dropdown.toggleEl.addEventListener("click", () => {
            if (dropdown.toggleEl.getAttribute("aria-expanded") === "true") {
                close(dropdown)
            } else {
                open(dropdown)
            }
        })
    })
}

window.addEventListener("DOMContentLoaded", () => {
    initDropdowns()
})