PageSourceSearch

https://www.batteriedeportable.com/js/burger.js

js batteriedeportable.com collected 2026-10-06 00:32:08 UTC 8,534 bytes, 231 lines download raw bytes

1document.addEventListener("DOMContentLoaded", function() {
2    const body = document.querySelector("body");
3    const mask = document.getElementById("mask");
4    const burgerButton = document.getElementById("burger-side-menu");
5    const menuRoot = document.getElementById("bdp-menu-root");
6    const menuOriginalParent = menuRoot ? menuRoot.parentElement : null;
7    const menuOriginalNext = menuRoot ? menuRoot.nextSibling : null;
8    const desktopMenuMedia = window.matchMedia("(min-width: 1040px)");
9
10    let blurOverlay = document.getElementById("bdp-blur-overlay");
11    if (!blurOverlay) {
12        blurOverlay = document.createElement("div");
13        blurOverlay.id = "bdp-blur-overlay";
14        document.body.appendChild(blurOverlay);
15    }
16
17    function loadDeferredMenuImages(container) {
18        if (!container) return;
19
20        container.querySelectorAll("img[data-src]").forEach(function(image) {
21            const source = image.getAttribute("data-src");
22            if (!source) return;
23            image.src = source;
24            image.removeAttribute("data-src");
25            image.classList.remove("bdp-menu-deferred-image");
26        });
27    }
28
29    function closeMenu() {
30        if (!menuRoot || !mask) return;
31        menuRoot.classList.add("close");
32        body.classList.remove("no-scroll");
33        mask.classList.remove("open");
34        setTimeout(function() {
35            menuRoot.classList.remove("open");
36            menuRoot.classList.remove("close");
37            restoreMenuPosition();
38        }, 300);
39    }
40
41    function restoreMenuPosition() {
42        if (!menuRoot || !menuOriginalParent || menuRoot.parentElement === menuOriginalParent) return;
43
44        if (menuOriginalNext && menuOriginalNext.parentElement === menuOriginalParent) {
45            menuOriginalParent.insertBefore(menuRoot, menuOriginalNext);
46        } else {
47            menuOriginalParent.appendChild(menuRoot);
48        }
49    }
50
51    function openMenu() {
52        if (!menuRoot || !mask) return;
53        if (menuRoot.parentElement !== body) {
54            body.appendChild(menuRoot);
55        }
56        resetMobilePanels();
57        menuRoot.classList.remove("close");
58        menuRoot.classList.add("open");
59        body.classList.add("no-scroll");
60        mask.classList.add("open");
61    }
62
63    function resetMobilePanels() {
64        if (!menuRoot || desktopMenuMedia.matches) return;
65
66        menuRoot.querySelectorAll(".bdp-menu-l2-item").forEach(function(item) {
67            item.classList.remove("is-active");
68        });
69
70        menuRoot.querySelectorAll(".bdp-menu-l2-link").forEach(function(link) {
71            link.classList.remove("is-active");
72        });
73
74        menuRoot.querySelectorAll(".bdp-menu-panel-mobile").forEach(function(panel) {
75            panel.classList.remove("is-active");
76        });
77    }
78
79    if (burgerButton) {
80        burgerButton.addEventListener("click", function(event) {
81            event.preventDefault();
82            if (!desktopMenuMedia.matches) {
83                openMenu();
84            }
85        });
86    }
87
88    if (mask) {
89        mask.addEventListener("click", closeMenu);
90    }
91
92    function setupUnifiedMenu() {
93        if (!menuRoot) return;
94
95        if (desktopMenuMedia.matches) {
96            menuRoot.querySelectorAll(".bdp-menu-l1-item").forEach(function(i) {
97                i.classList.remove("is-active");
98            });
99        }
100
101        const closeButton = menuRoot.querySelector(".bdp-menu-close");
102        if (closeButton) {
103            closeButton.addEventListener("click", closeMenu);
104        }
105
106        const l1Items = menuRoot.querySelectorAll(".bdp-menu-l1-item");
107        let l1CloseTimer = null;
108
109        l1Items.forEach(function(item) {
110            const link = item.querySelector(".bdp-menu-l1-link");
111            if (!link) return;
112            const l1Key = item.getAttribute("data-menu-l1");
113            const opensOnHover = l1Key === "batterie" || l1Key === "chargeur" || l1Key === "accessoire";
114
115            function openDesktopMega() {
116                if (!desktopMenuMedia.matches || !opensOnHover) return;
117                if (l1CloseTimer) {
118                    clearTimeout(l1CloseTimer);
119                    l1CloseTimer = null;
120                }
121                l1Items.forEach(function(other) { other.classList.remove("is-active"); });
122                item.classList.add("is-active");
123                loadDeferredMenuImages(item.querySelector(".bdp-menu-panel-desktop.is-active"));
124                blurOverlay.classList.add("is-active");
125            }
126
127            function closeDesktopMega() {
128                if (!desktopMenuMedia.matches || !opensOnHover) return;
129                if (l1CloseTimer) clearTimeout(l1CloseTimer);
130                l1CloseTimer = setTimeout(function() {
131                    item.classList.remove("is-active");
132                    if (!menuRoot.querySelector(".bdp-menu-l1-item.is-active")) {
133                        blurOverlay.classList.remove("is-active");
134                    }
135                    l1CloseTimer = null;
136                }, 180);
137            }
138
139            item.addEventListener("mouseenter", openDesktopMega);
140            item.addEventListener("mouseleave", closeDesktopMega);
141
142            link.addEventListener("click", function(event) {
143                if (desktopMenuMedia.matches && opensOnHover) return;
144
145                event.preventDefault();
146                const isActive = item.classList.contains("is-active");
147                l1Items.forEach(function(other) { other.classList.remove("is-active"); });
148                if (!isActive) {
149                    item.classList.add("is-active");
150                } else {
151                    blurOverlay.classList.remove("is-active");
152                }
153            });
154        });
155
156        document.addEventListener("click", function(event) {
157            if (desktopMenuMedia.matches && !menuRoot.contains(event.target)) {
158                l1Items.forEach(function(item) { item.classList.remove("is-active"); });
159                blurOverlay.classList.remove("is-active");
160            }
161        });
162
163        const l2Links = menuRoot.querySelectorAll(".bdp-menu-l2-link");
164        l2Links.forEach(function(link) {
165            link.addEventListener("click", function(event) {
166                if (!desktopMenuMedia.matches) {
167                    event.preventDefault();
168                    toggleMobilePanel(link);
169                } else {
170                    event.preventDefault();
171                    activatePanel(link);
172                }
173            });
174        });
175    }
176
177    function toggleMobilePanel(link) {
178        const item = link.closest(".bdp-menu-l2-item");
179        const mega = link.closest(".bdp-mega");
180        if (!item || !mega) return;
181
182        const shouldOpen = !item.classList.contains("is-active");
183
184        mega.querySelectorAll(".bdp-menu-l2-item").forEach(function(other) {
185            other.classList.remove("is-active");
186            const otherLink = other.querySelector(".bdp-menu-l2-link");
187            const otherPanel = other.querySelector(".bdp-menu-panel-mobile");
188            if (otherLink) otherLink.classList.remove("is-active");
189            if (otherPanel) otherPanel.classList.remove("is-active");
190        });
191
192        if (shouldOpen) {
193            item.classList.add("is-active");
194            link.classList.add("is-active");
195            const panel = item.querySelector(".bdp-menu-panel-mobile");
196            if (panel) {
197                loadDeferredMenuImages(panel);
198                panel.classList.add("is-active");
199            }
200        }
201    }
202
203    function activatePanel(link) {
204        const panelId = link.getAttribute("data-menu-panel");
205        const mega = link.closest(".bdp-mega");
206        if (!panelId || !mega) return;
207
208        mega.querySelectorAll(".bdp-menu-l2-link").forEach(function(other) {
209            other.classList.toggle("is-active", other === link);
210        });
211
212        mega.querySelectorAll(".bdp-menu-l2-item").forEach(function(item) {
213            item.classList.toggle("is-active", item.contains(link));
214        });
215
216        mega.querySelectorAll(".bdp-menu-panel-desktop").forEach(function(panel) {
217            const isActive = panel.getAttribute("data-menu-panel-id") === panelId;
218            panel.classList.toggle("is-active", isActive);
219            if (isActive) loadDeferredMenuImages(panel);
220        });
221    }
222
223
224    setupUnifiedMenu();
225
226    window.addEventListener("resize", function() {
227        if (desktopMenuMedia.matches) {
228            closeMenu();
229        }
230    });
231});

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.