124c3e27e07ed598eea4233cfb177e5cac1aa9d8b983489bd90c4098b9b04265e3028b021392710e1f55da96f370032fc0308a959b1f00f2f2c2f9c8d27e2f 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import SubMenu from './submenu.mjs';
  2. import { EVENT_CODE } from '../../../../constants/aria.mjs';
  3. import { triggerEvent } from '../../../../utils/dom/aria.mjs';
  4. class MenuItem {
  5. constructor(domNode, namespace) {
  6. this.domNode = domNode;
  7. this.submenu = null;
  8. this.submenu = null;
  9. this.init(namespace);
  10. }
  11. init(namespace) {
  12. this.domNode.setAttribute("tabindex", "0");
  13. const menuChild = this.domNode.querySelector(`.${namespace}-menu`);
  14. if (menuChild) {
  15. this.submenu = new SubMenu(this, menuChild);
  16. }
  17. this.addListeners();
  18. }
  19. addListeners() {
  20. this.domNode.addEventListener("keydown", (event) => {
  21. let prevDef = false;
  22. switch (event.code) {
  23. case EVENT_CODE.down: {
  24. triggerEvent(event.currentTarget, "mouseenter");
  25. this.submenu && this.submenu.gotoSubIndex(0);
  26. prevDef = true;
  27. break;
  28. }
  29. case EVENT_CODE.up: {
  30. triggerEvent(event.currentTarget, "mouseenter");
  31. this.submenu && this.submenu.gotoSubIndex(this.submenu.subMenuItems.length - 1);
  32. prevDef = true;
  33. break;
  34. }
  35. case EVENT_CODE.tab: {
  36. triggerEvent(event.currentTarget, "mouseleave");
  37. break;
  38. }
  39. case EVENT_CODE.enter:
  40. case EVENT_CODE.numpadEnter:
  41. case EVENT_CODE.space: {
  42. prevDef = true;
  43. event.currentTarget.click();
  44. break;
  45. }
  46. }
  47. if (prevDef) {
  48. event.preventDefault();
  49. }
  50. });
  51. }
  52. }
  53. export { MenuItem as default };
  54. //# sourceMappingURL=menu-item.mjs.map