|
5 | 5 | - Mobile drawer managed by inline JS (no Foundation JS required) |
6 | 6 | {% endcomment %} |
7 | 7 |
|
8 | | -{% comment %} Keep original nav in DOM (hidden by CSS) so Foundation JS doesn't error {% endcomment %} |
| 8 | +{% comment %} Keep original nav element in DOM so Foundation JS does not throw errors, |
| 9 | + but do NOT include data-topbar — that would let Foundation JS hijack click events {% endcomment %} |
9 | 10 | <div id="navigation" class="sticky" style="display:none!important;height:0;overflow:hidden" aria-hidden="true"> |
10 | | - <nav class="top-bar" role="navigation" data-topbar></nav> |
| 11 | + <nav class="top-bar" role="navigation"></nav> |
11 | 12 | </div> |
12 | 13 |
|
13 | 14 | <!-- ═══ Modern Nav Bar ═══════════════════════════════════════ --> |
|
136 | 137 |
|
137 | 138 |
|
138 | 139 | <script> |
139 | | -(function () { |
| 140 | +// Wait for full page (including Foundation JS) to initialise before |
| 141 | +// registering our custom hamburger and dropdown handlers. |
| 142 | +document.addEventListener('DOMContentLoaded', function () { |
| 143 | + |
140 | 144 | /* ── Hamburger / Mobile Drawer ──────────────────── */ |
141 | 145 | var btn = document.getElementById('easiHamburger'); |
142 | 146 | var drawer = document.getElementById('easi-mobile-drawer'); |
143 | 147 |
|
144 | 148 | if (btn && drawer) { |
| 149 | + // Use capture phase + stopImmediatePropagation so Foundation JS cannot |
| 150 | + // intercept or cancel this click before we handle it. |
145 | 151 | btn.addEventListener('click', function (e) { |
146 | | - e.stopPropagation(); |
| 152 | + e.stopImmediatePropagation(); |
| 153 | + e.preventDefault(); |
147 | 154 | var isOpen = drawer.classList.toggle('open'); |
148 | 155 | btn.classList.toggle('open', isOpen); |
149 | 156 | btn.setAttribute('aria-expanded', String(isOpen)); |
150 | | - drawer.setAttribute('aria-hidden', String(!isOpen)); |
151 | | - }); |
| 157 | + drawer.setAttribute('aria-hidden', String(!isOpen)); |
| 158 | + }, true); /* capture phase */ |
152 | 159 |
|
153 | 160 | // Close drawer on outside click |
154 | 161 | document.addEventListener('click', function (e) { |
|
177 | 184 | ddTriggers.forEach(function (trigger) { |
178 | 185 | var parentLi = trigger.parentElement; |
179 | 186 |
|
180 | | - // Click on trigger toggles the dropdown |
181 | 187 | trigger.addEventListener('click', function (e) { |
182 | | - // Only intercept when a dropdown exists on this item |
183 | 188 | var dropdown = parentLi.querySelector('.easi-dropdown'); |
184 | 189 | if (!dropdown) return; |
185 | | - |
186 | | - e.preventDefault(); // stop navigation on the parent link; sub-links still work |
| 190 | + e.preventDefault(); |
187 | 191 | var isOpen = parentLi.classList.toggle('dd-open'); |
188 | 192 | trigger.setAttribute('aria-expanded', String(isOpen)); |
189 | 193 |
|
190 | | - // Close all other open dropdowns |
191 | 194 | document.querySelectorAll('.easi-nav-links > li.dd-open').forEach(function (li) { |
192 | 195 | if (li !== parentLi) { |
193 | 196 | li.classList.remove('dd-open'); |
|
220 | 223 | } |
221 | 224 | }); |
222 | 225 | }); |
223 | | -})(); |
| 226 | + |
| 227 | +}); /* end DOMContentLoaded */ |
224 | 228 | </script> |
0 commit comments