UNPKG

element-nice-ui

Version:

A Component Library for Vue.js.

52 lines (51 loc) 1.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _ariaUtils = _interopRequireDefault(require("../aria-utils")); var _ariaSubmenu = _interopRequireDefault(require("./aria-submenu")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const MenuItem = function MenuItem(domNode) { this.domNode = domNode; this.submenu = null; this.init(); }; MenuItem.prototype.init = function () { this.domNode.setAttribute('tabindex', '0'); let menuChild = this.domNode.querySelector('.el-menu'); if (menuChild) { this.submenu = new _ariaSubmenu.default(this, menuChild); } this.addListeners(); }; MenuItem.prototype.addListeners = function () { const keys = _ariaUtils.default.keys; this.domNode.addEventListener('keydown', event => { let prevDef = false; switch (event.keyCode) { case keys.down: _ariaUtils.default.triggerEvent(event.currentTarget, 'mouseenter'); this.submenu && this.submenu.gotoSubIndex(0); prevDef = true; break; case keys.up: _ariaUtils.default.triggerEvent(event.currentTarget, 'mouseenter'); this.submenu && this.submenu.gotoSubIndex(this.submenu.subMenuItems.length - 1); prevDef = true; break; case keys.tab: _ariaUtils.default.triggerEvent(event.currentTarget, 'mouseleave'); break; case keys.enter: case keys.space: prevDef = true; event.currentTarget.click(); break; } if (prevDef) { event.preventDefault(); } }); }; var _default = exports.default = MenuItem;