@hortonstudio/main 1.7.6 → 1.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/autoInit/navbar.js +45 -23
- package/index.js +1 -1
- package/package.json +1 -1
package/autoInit/navbar.js
CHANGED
|
@@ -381,17 +381,13 @@ function addDesktopArrowNavigation() {
|
|
|
381
381
|
|
|
382
382
|
// Menu button system with modal-like functionality
|
|
383
383
|
function setupMenuButton() {
|
|
384
|
-
const
|
|
384
|
+
const menuButtons = document.querySelectorAll('[data-hs-nav="menubtn"]');
|
|
385
385
|
const menu = document.querySelector('[data-hs-nav="menu"]');
|
|
386
386
|
|
|
387
|
-
if (!
|
|
387
|
+
if (!menuButtons.length || !menu) return;
|
|
388
388
|
|
|
389
389
|
const menuId = `menu-${Date.now()}`;
|
|
390
390
|
|
|
391
|
-
menuButton.setAttribute("aria-expanded", "false");
|
|
392
|
-
menuButton.setAttribute("aria-controls", menuId);
|
|
393
|
-
menuButton.setAttribute("aria-label", "Open navigation menu");
|
|
394
|
-
|
|
395
391
|
menu.id = menuId;
|
|
396
392
|
menu.setAttribute("role", "dialog");
|
|
397
393
|
menu.setAttribute("aria-modal", "true");
|
|
@@ -453,8 +449,10 @@ function setupMenuButton() {
|
|
|
453
449
|
|
|
454
450
|
document.body.classList.add("u-overflow-hidden");
|
|
455
451
|
|
|
456
|
-
|
|
457
|
-
|
|
452
|
+
menuButtons.forEach(btn => {
|
|
453
|
+
btn.setAttribute("aria-expanded", "true");
|
|
454
|
+
btn.setAttribute("aria-label", "Close navigation menu");
|
|
455
|
+
});
|
|
458
456
|
|
|
459
457
|
// Create focus trap for navbar
|
|
460
458
|
createFocusTrap();
|
|
@@ -472,7 +470,7 @@ function setupMenuButton() {
|
|
|
472
470
|
cancelable: true,
|
|
473
471
|
view: window,
|
|
474
472
|
});
|
|
475
|
-
|
|
473
|
+
menuButtons[0].dispatchEvent(clickEvent);
|
|
476
474
|
}
|
|
477
475
|
|
|
478
476
|
function closeMenu() {
|
|
@@ -481,11 +479,15 @@ function setupMenuButton() {
|
|
|
481
479
|
|
|
482
480
|
document.body.classList.remove("u-overflow-hidden");
|
|
483
481
|
|
|
484
|
-
|
|
485
|
-
|
|
482
|
+
const activeMenuButton = Array.from(menuButtons).find(() => menu.contains(document.activeElement));
|
|
483
|
+
if (activeMenuButton) {
|
|
484
|
+
activeMenuButton.focus();
|
|
486
485
|
}
|
|
487
|
-
|
|
488
|
-
|
|
486
|
+
|
|
487
|
+
menuButtons.forEach(btn => {
|
|
488
|
+
btn.setAttribute("aria-expanded", "false");
|
|
489
|
+
btn.setAttribute("aria-label", "Open navigation menu");
|
|
490
|
+
});
|
|
489
491
|
|
|
490
492
|
// Remove focus trap
|
|
491
493
|
removeFocusTrap();
|
|
@@ -495,7 +497,7 @@ function setupMenuButton() {
|
|
|
495
497
|
cancelable: true,
|
|
496
498
|
view: window,
|
|
497
499
|
});
|
|
498
|
-
|
|
500
|
+
menuButtons[0].dispatchEvent(clickEvent);
|
|
499
501
|
}
|
|
500
502
|
|
|
501
503
|
function toggleMenu() {
|
|
@@ -508,16 +510,36 @@ function setupMenuButton() {
|
|
|
508
510
|
}
|
|
509
511
|
}
|
|
510
512
|
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
}
|
|
516
|
-
});
|
|
513
|
+
menuButtons.forEach(menuButton => {
|
|
514
|
+
menuButton.setAttribute("aria-expanded", "false");
|
|
515
|
+
menuButton.setAttribute("aria-controls", menuId);
|
|
516
|
+
menuButton.setAttribute("aria-label", "Open navigation menu");
|
|
517
517
|
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
518
|
+
menuButton.addEventListener("keydown", function (e) {
|
|
519
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
520
|
+
e.preventDefault();
|
|
521
|
+
const config = menuButton.getAttribute("data-hs-config");
|
|
522
|
+
if (config === "close" && isMenuOpen) {
|
|
523
|
+
closeMenu();
|
|
524
|
+
} else if (config === "open" && !isMenuOpen) {
|
|
525
|
+
openMenu();
|
|
526
|
+
} else if (!config) {
|
|
527
|
+
toggleMenu();
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
});
|
|
531
|
+
|
|
532
|
+
menuButton.addEventListener("click", function (e) {
|
|
533
|
+
if (!e.isTrusted) return;
|
|
534
|
+
const config = menuButton.getAttribute("data-hs-config");
|
|
535
|
+
if (config === "close" && isMenuOpen) {
|
|
536
|
+
closeMenu();
|
|
537
|
+
} else if (config === "open" && !isMenuOpen) {
|
|
538
|
+
openMenu();
|
|
539
|
+
} else if (!config) {
|
|
540
|
+
toggleMenu();
|
|
541
|
+
}
|
|
542
|
+
});
|
|
521
543
|
});
|
|
522
544
|
|
|
523
545
|
}
|
package/index.js
CHANGED