PageSourceSearch

https://www.mgp.fr/modules/internet-templates/javascript/composants/mainMenu.js

js mgp.fr collected 2026-10-05 19:07:35 UTC 6,518 bytes, 151 lines download raw bytes

1export default function MainMenu() {
2    document.querySelectorAll('.main-menu--parent--1.has-children').forEach((hasChildren) => {
3        const id = hasChildren.id;
4        const parents1 = document.querySelectorAll('.main-menu--parent--1');
5        const parents2 = document.querySelectorAll('.main-menu--parent--2');
6        const childs = document.querySelectorAll('.main-menu--subitems')
7
8        hasChildren.querySelector('.toggleable').addEventListener('click', () => {
9            const child = hasChildren.querySelector('[aria-labelledby="' + id + '"]');
10
11
12            if (hasChildren.classList.contains('open')) {
13                if (window.innerWidth >= 1064) {
14                    document.querySelector('.wrapper-menu').classList.remove('wrapper-menu--opened')
15                }
16                hasChildren.classList.remove('open')
17                removeClassOnAll(parents1, 'open');
18                removeIconsOnAll(parents1);
19                removeClassOnAll(parents2, 'open');
20                removeClassOnAll(childs, 'open');
21                hasChildren.querySelector('button').setAttribute('aria-expanded', 'false');
22            } else {
23                removeClassOnAll(parents1, 'open');
24                removeIconsOnAll(parents1);
25                removeClassOnAll(parents2, 'open');
26                removeAriaOnAll(parents1);
27                removeClassOnAll(childs, 'open');
28                hasChildren.classList.add('open')
29                const icon = hasChildren.querySelector('i');
30                if(icon.classList.contains('icon-chevron-bottom')) {
31                    icon.classList.remove('icon-chevron-bottom', 'bleu');
32                    icon.classList.add('icon-chevron-top', 'fushia');
33                }
34                hasChildren.querySelector('button').setAttribute('aria-expanded', 'true');
35                child.classList.add('open')
36                if (window.innerWidth >= 1064) {
37                    document.querySelector('.wrapper-menu').classList.add('wrapper-menu--opened')
38                }
39            }
40        })
41    })
42
43    document.querySelectorAll('.main-menu--parent--2.has-children').forEach((hasChildren) => {
44        const id = hasChildren.id;
45        const parents = document.querySelectorAll('.main-menu--parent--2');
46        const childrenLvl2 = document.querySelectorAll('.main-menu--subitems--2');
47        const childrenLvl3 = document.querySelectorAll('.main-menu--subitems--3');
48
49        hasChildren.querySelector('.toggleable').addEventListener('click', () => {
50            // const childsLvl2 = Array.from(hasChildren.children).filter(elt => elt.classList.contains('main-menu--subitems'));
51            const childsLvl2 = hasChildren.querySelectorAll('.main-menu--subitems--2');
52            const childsLvl3 = hasChildren.querySelectorAll('.main-menu--subitems--3');
53
54            if (hasChildren.classList.contains('open')) {
55                // removeClassOnAll(childrenLvl3, 'open')
56                removeClassOnAll(childrenLvl2, 'open')
57                removeClassOnAll(parents, 'open');
58            } else {
59                removeClassOnAll(childrenLvl2, 'open')
60                // removeClassOnAll(childrenLvl3, 'open')
61                removeClassOnAll(parents, 'open');
62                hasChildren.classList.add('open')
63                childsLvl2.forEach(elt => elt.classList.add('open'));
64                childsLvl3.forEach(elt => elt.classList.add('open'));
65            }
66
67        })
68
69    })
70
71    document.querySelector('.menu-overlay').addEventListener('click', () => {
72        let openedChildren = document.querySelectorAll('.main-menu--subitems--2.open');
73        if(openedChildren.length !== 0) {
74            // closeChildren(openedChildren);
75            openedChildren.forEach(elt => elt.classList.remove('open'));
76            setTimeout(() => {
77                openedChildren = document.querySelectorAll('.main-menu--parent.has-children.open');
78                closeChildren(openedChildren);
79            }, 500)
80        } else {
81            openedChildren = document.querySelectorAll('.main-menu--parent.has-children.open');
82            closeChildren(openedChildren);
83        }
84
85    })
86}
87
88function removeIconsOnAll(elem) {
89    for (let i = 0; i < elem.length; i++) {
90        const icon = elem[i].querySelector('i');
91        icon.classList.remove('icon-chevron-top', 'fushia');
92        icon.classList.add('icon-chevron-bottom', 'bleu');
93    }
94}
95
96function closeChildren(children) {
97    children.forEach( (openedChild) => {
98        const id = openedChild.id;
99        if(id != null){
100            const child = openedChild.querySelector('[aria-labelledby="' + id + '"]');
101            if(child != null) {
102                child.classList.remove('open');
103            }
104        }
105        if (window.innerWidth >= 1064) {
106            document.querySelector('.wrapper-menu').classList.remove('wrapper-menu--opened')
107        }
108        const icon = openedChild.querySelector('i');
109
110        if(icon.classList.contains('icon-chevron-top')) {
111            icon.classList.remove('icon-chevron-top', 'fushia');
112            icon.classList.add('icon-chevron-bottom', 'bleu');
113        }
114        openedChild.classList.remove('open')
115        openedChild.querySelector('button').setAttribute('aria-expanded', 'false');
116
117    })
118}
119
120function removeClassOnAll(elem, classe) {
121    for (var i = 0; i < elem.length; i++) {
122        elem[i].classList.remove(classe)
123    }
124}
125
126function removeAriaOnAll(elem) {
127    for (var i = 0; i < elem.length; i++) {
128        elem[i].setAttribute("aria-expanded", "false");
129    }
130}
131
132export function scrollMenu() {
133    const revealElement = document.querySelectorAll(".wrapper-menu").forEach(elt => {
134        const scrollPosition = window.scrollY
135        if (scrollPosition >= 100) {
136            elt.classList.add("isscrolled")
137            // revealElement[i].classList.remove("isscrolled")
138        } else if (scrollPosition < 1) {
139            elt.classList.remove("isscrolled")
140        }
141    });
142}
143
144export function burgerMenu() {
145    document.querySelectorAll('.wrapper-menu .burger button, .wrapper-menu .burger label ').forEach(elt => {
146        elt.addEventListener('click', function () {
147            document.querySelector('.wrapper-menu').classList.toggle('wrapper-menu--opened')
148            document.querySelector('.wrapper-menu .nav').classList.toggle('opened')
149        })
150    });
151}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.