UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

794 lines (789 loc) • 35.7 kB
/** * DevExtreme (cjs/ui/menu/ui.menu.js) * Version: 21.1.4 * Build date: Mon Jun 21 2021 * * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; exports.default = void 0; var _renderer = _interopRequireDefault(require("../../core/renderer")); var _events_engine = _interopRequireDefault(require("../../events/core/events_engine")); var _component_registrator = _interopRequireDefault(require("../../core/component_registrator")); var _common = require("../../core/utils/common"); var _element = require("../../core/element"); var _iterator = require("../../core/utils/iterator"); var _type = require("../../core/utils/type"); var _extend = require("../../core/utils/extend"); var _utils = require("../overlay/utils"); var _index = require("../../events/utils/index"); var _pointer = _interopRequireDefault(require("../../events/pointer")); var _hover = require("../../events/hover"); var _ui = _interopRequireDefault(require("../context_menu/ui.menu_base")); var _ui2 = _interopRequireDefault(require("../overlay/ui.overlay")); var _ui3 = _interopRequireDefault(require("./ui.submenu")); var _button = _interopRequireDefault(require("../button")); var _tree_view = _interopRequireDefault(require("../tree_view")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj } } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass) } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function(o, p) { o.__proto__ = p; return o }; return _setPrototypeOf(o, p) } var DX_MENU_CLASS = "dx-menu"; var DX_MENU_VERTICAL_CLASS = DX_MENU_CLASS + "-vertical"; var DX_MENU_HORIZONTAL_CLASS = DX_MENU_CLASS + "-horizontal"; var DX_MENU_ITEM_CLASS = DX_MENU_CLASS + "-item"; var DX_MENU_ITEMS_CONTAINER_CLASS = DX_MENU_CLASS + "-items-container"; var DX_MENU_ITEM_EXPANDED_CLASS = DX_MENU_ITEM_CLASS + "-expanded"; var DX_CONTEXT_MENU_CLASS = "dx-context-menu"; var DX_CONTEXT_MENU_CONTAINER_BORDER_CLASS = DX_CONTEXT_MENU_CLASS + "-container-border"; var DX_CONTEXT_MENU_CONTENT_DELIMITER_CLASS = "dx-context-menu-content-delimiter"; var DX_SUBMENU_CLASS = "dx-submenu"; var DX_STATE_DISABLED_CLASS = "dx-state-disabled"; var DX_STATE_HOVER_CLASS = "dx-state-hover"; var DX_STATE_ACTIVE_CLASS = "dx-state-active"; var DX_ADAPTIVE_MODE_CLASS = DX_MENU_CLASS + "-adaptive-mode"; var DX_ADAPTIVE_HAMBURGER_BUTTON_CLASS = DX_MENU_CLASS + "-hamburger-button"; var DX_ADAPTIVE_MODE_OVERLAY_WRAPPER_CLASS = DX_ADAPTIVE_MODE_CLASS + "-overlay-wrapper"; var FOCUS_UP = "up"; var FOCUS_DOWN = "down"; var FOCUS_LEFT = "left"; var FOCUS_RIGHT = "right"; var SHOW_SUBMENU_OPERATION = "showSubmenu"; var NEXTITEM_OPERATION = "nextItem"; var PREVITEM_OPERATION = "prevItem"; var DEFAULT_DELAY = { show: 50, hide: 300 }; var ACTIONS = ["onSubmenuShowing", "onSubmenuShown", "onSubmenuHiding", "onSubmenuHidden", "onItemContextMenu", "onItemClick", "onSelectionChanged", "onItemRendered"]; var Menu = function(_MenuBase) { _inheritsLoose(Menu, _MenuBase); function Menu() { return _MenuBase.apply(this, arguments) || this } var _proto = Menu.prototype; _proto._getDefaultOptions = function() { return (0, _extend.extend)(_MenuBase.prototype._getDefaultOptions.call(this), { orientation: "horizontal", submenuDirection: "auto", showFirstSubmenuMode: { name: "onClick", delay: { show: 50, hide: 300 } }, hideSubmenuOnMouseLeave: false, onSubmenuShowing: null, onSubmenuShown: null, onSubmenuHiding: null, onSubmenuHidden: null, adaptivityEnabled: false }) }; _proto._setOptionsByReference = function() { _MenuBase.prototype._setOptionsByReference.call(this); (0, _extend.extend)(this._optionsByReference, { animation: true, selectedItem: true }) }; _proto._itemElements = function() { var rootMenuElements = _MenuBase.prototype._itemElements.call(this); var submenuElements = this._submenuItemElements(); return rootMenuElements.add(submenuElements) }; _proto._submenuItemElements = function() { var elements = []; var itemSelector = ".".concat(DX_MENU_ITEM_CLASS); var currentSubmenu = this._submenus.length && this._submenus[0]; if (currentSubmenu && currentSubmenu.itemsContainer()) { elements = currentSubmenu.itemsContainer().find(itemSelector) } return elements }; _proto._focusTarget = function() { return this.$element() }; _proto._isMenuHorizontal = function() { return "horizontal" === this.option("orientation") }; _proto._moveFocus = function(location) { var $items = this._getAvailableItems(); var isMenuHorizontal = this._isMenuHorizontal(); var $activeItem = this._getActiveItem(true); var argument; var operation; var navigationAction; var $newTarget; switch (location) { case FOCUS_UP: operation = isMenuHorizontal ? SHOW_SUBMENU_OPERATION : this._getItemsNavigationOperation(PREVITEM_OPERATION); argument = isMenuHorizontal ? $activeItem : $items; navigationAction = this._getKeyboardNavigationAction(operation, argument); $newTarget = navigationAction(); break; case FOCUS_DOWN: operation = isMenuHorizontal ? SHOW_SUBMENU_OPERATION : this._getItemsNavigationOperation(NEXTITEM_OPERATION); argument = isMenuHorizontal ? $activeItem : $items; navigationAction = this._getKeyboardNavigationAction(operation, argument); $newTarget = navigationAction(); break; case FOCUS_RIGHT: operation = isMenuHorizontal ? this._getItemsNavigationOperation(NEXTITEM_OPERATION) : SHOW_SUBMENU_OPERATION; argument = isMenuHorizontal ? $items : $activeItem; navigationAction = this._getKeyboardNavigationAction(operation, argument); $newTarget = navigationAction(); break; case FOCUS_LEFT: operation = isMenuHorizontal ? this._getItemsNavigationOperation(PREVITEM_OPERATION) : SHOW_SUBMENU_OPERATION; argument = isMenuHorizontal ? $items : $activeItem; navigationAction = this._getKeyboardNavigationAction(operation, argument); $newTarget = navigationAction(); break; default: return _MenuBase.prototype._moveFocus.call(this, location) } if ($newTarget && 0 !== $newTarget.length) { this.option("focusedElement", (0, _element.getPublicElement)($newTarget)) } }; _proto._getItemsNavigationOperation = function(operation) { var navOperation = operation; if (this.option("rtlEnabled")) { navOperation = operation === PREVITEM_OPERATION ? NEXTITEM_OPERATION : PREVITEM_OPERATION } return navOperation }; _proto._getKeyboardNavigationAction = function(operation, argument) { var action = _common.noop; switch (operation) { case SHOW_SUBMENU_OPERATION: if (!argument.hasClass(DX_STATE_DISABLED_CLASS)) { action = this._showSubmenu.bind(this, argument) } break; case NEXTITEM_OPERATION: action = this._nextItem.bind(this, argument); break; case PREVITEM_OPERATION: action = this._prevItem.bind(this, argument) } return action }; _proto._clean = function() { _MenuBase.prototype._clean.call(this); this.option("templatesRenderAsynchronously") && clearTimeout(this._resizeEventTimer) }; _proto._visibilityChanged = function(visible) { if (visible) { if (!this._menuItemsWidth) { this._updateItemsWidthCache() } this._dimensionChanged() } }; _proto._isAdaptivityEnabled = function() { return this.option("adaptivityEnabled") && "horizontal" === this.option("orientation") }; _proto._updateItemsWidthCache = function() { var $menuItems = this.$element().find("ul").first().children("li").children(".".concat(DX_MENU_ITEM_CLASS)); this._menuItemsWidth = this._getSummaryItemsWidth($menuItems, true) }; _proto._dimensionChanged = function() { if (!this._isAdaptivityEnabled()) { return } var containerWidth = this.$element().outerWidth(); this._toggleAdaptiveMode(this._menuItemsWidth > containerWidth) }; _proto._init = function() { _MenuBase.prototype._init.call(this); this._submenus = [] }; _proto._initActions = function() { var _this = this; this._actions = {}; (0, _iterator.each)(ACTIONS, (function(index, action) { _this._actions[action] = _this._createActionByOption(action) })) }; _proto._initMarkup = function() { this._visibleSubmenu = null; this.$element().addClass(DX_MENU_CLASS); _MenuBase.prototype._initMarkup.call(this); this.setAria("role", "menubar") }; _proto._render = function() { _MenuBase.prototype._render.call(this); this._initAdaptivity() }; _proto._renderHamburgerButton = function() { this._hamburger = new _button.default((0, _renderer.default)("<div>").addClass(DX_ADAPTIVE_HAMBURGER_BUTTON_CLASS), { icon: "menu", activeStateEnabled: false, onClick: this._toggleTreeView.bind(this) }); return this._hamburger.$element() }; _proto._toggleTreeView = function(state) { if ((0, _type.isPlainObject)(state)) { state = !this._overlay.option("visible") } this._overlay.option("visible", state); this._toggleHamburgerActiveState(state) }; _proto._toggleHamburgerActiveState = function(state) { this._hamburger && this._hamburger.$element().toggleClass(DX_STATE_ACTIVE_CLASS, state) }; _proto._toggleAdaptiveMode = function(state) { var $menuItemsContainer = this.$element().find(".".concat(DX_MENU_HORIZONTAL_CLASS)); var $adaptiveElements = this.$element().find(".".concat(DX_ADAPTIVE_MODE_CLASS)); if (state) { this._hideVisibleSubmenu() } else { this._treeView && this._treeView.collapseAll(); this._overlay && this._toggleTreeView(state) } $menuItemsContainer.toggle(!state); $adaptiveElements.toggle(state) }; _proto._removeAdaptivity = function() { if (!this._$adaptiveContainer) { return } this._toggleAdaptiveMode(false); this._$adaptiveContainer.remove(); this._$adaptiveContainer = null; this._treeView = null; this._hamburger = null; this._overlay = null }; _proto._treeviewItemClickHandler = function(e) { this._actions.onItemClick(e); if (!e.node.children.length) { this._toggleTreeView(false) } }; _proto._getAdaptiveOverlayOptions = function() { var _this2 = this; var rtl = this.option("rtlEnabled"); var position = rtl ? "right" : "left"; return { maxHeight: function() { return (0, _utils.getElementMaxHeightByWindow)(_this2.$element()) }, deferRendering: false, shading: false, animation: false, closeOnTargetScroll: true, onHidden: function() { _this2._toggleHamburgerActiveState(false) }, height: "auto", closeOnOutsideClick: function(e) { return !(0, _renderer.default)(e.target).closest(".".concat(DX_ADAPTIVE_HAMBURGER_BUTTON_CLASS)).length }, position: { collision: "flipfit", at: "bottom " + position, my: "top " + position, of: this._hamburger.$element() } } }; _proto._getTreeViewOptions = function() { var _this3 = this; var menuOptions = {}; (0, _iterator.each)(["rtlEnabled", "width", "accessKey", "activeStateEnabled", "animation", "dataSource", "disabled", "displayExpr", "displayExpr", "focusStateEnabled", "hint", "hoverStateEnabled", "itemsExpr", "items", "itemTemplate", "selectedExpr", "selectionMode", "tabIndex", "visible"], (function(_, option) { menuOptions[option] = _this3.option(option) })); (0, _iterator.each)(["onItemContextMenu", "onSelectionChanged"], (function(_, actionName) { menuOptions[actionName] = function(e) { _this3._actions[actionName](e) } })); return (0, _extend.extend)(menuOptions, { dataSource: this.getDataSource(), animationEnabled: !!this.option("animation"), onItemClick: this._treeviewItemClickHandler.bind(this), onItemExpanded: function(e) { _this3._overlay.repaint(); _this3._actions.onSubmenuShown(e) }, onItemCollapsed: function(e) { _this3._overlay.repaint(); _this3._actions.onSubmenuHidden(e) }, selectNodesRecursive: false, selectByClick: this.option("selectByClick"), expandEvent: "click" }) }; _proto._initAdaptivity = function() { if (!this._isAdaptivityEnabled()) { return } this._$adaptiveContainer = (0, _renderer.default)("<div>").addClass(DX_ADAPTIVE_MODE_CLASS); var $hamburger = this._renderHamburgerButton(); this._treeView = this._createComponent((0, _renderer.default)("<div>"), _tree_view.default, this._getTreeViewOptions()); this._overlay = this._createComponent((0, _renderer.default)("<div>"), _ui2.default, this._getAdaptiveOverlayOptions()); this._overlay.$content().append(this._treeView.$element()).addClass(DX_ADAPTIVE_MODE_CLASS).addClass(this.option("cssClass")); this._overlay.$wrapper().addClass(DX_ADAPTIVE_MODE_OVERLAY_WRAPPER_CLASS); this._$adaptiveContainer.append($hamburger); this._$adaptiveContainer.append(this._overlay.$element()); this.$element().append(this._$adaptiveContainer); this._updateItemsWidthCache(); this._dimensionChanged() }; _proto._getDelay = function(delayType) { var delay = this.option("showFirstSubmenuMode").delay; if (!(0, _type.isDefined)(delay)) { return DEFAULT_DELAY[delayType] } else { return (0, _type.isObject)(delay) ? delay[delayType] : delay } }; _proto._keyboardHandler = function(e) { return _MenuBase.prototype._keyboardHandler.call(this, e, !!this._visibleSubmenu) }; _proto._renderContainer = function() { var $wrapper = (0, _renderer.default)("<div>"); $wrapper.appendTo(this.$element()).addClass(this._isMenuHorizontal() ? DX_MENU_HORIZONTAL_CLASS : DX_MENU_VERTICAL_CLASS); return _MenuBase.prototype._renderContainer.call(this, $wrapper) }; _proto._renderSubmenuItems = function(node, $itemFrame) { var submenu = this._createSubmenu(node, $itemFrame); this._submenus.push(submenu); this._renderBorderElement($itemFrame); return submenu }; _proto._getKeyboardListeners = function() { return _MenuBase.prototype._getKeyboardListeners.call(this).concat(this._visibleSubmenu) }; _proto._createSubmenu = function(node, $rootItem) { var $submenuContainer = (0, _renderer.default)("<div>").addClass(DX_CONTEXT_MENU_CLASS).appendTo($rootItem); var items = this._getChildNodes(node); var result = this._createComponent($submenuContainer, _ui3.default, (0, _extend.extend)(this._getSubmenuOptions(), { _dataAdapter: this._dataAdapter, _parentKey: node.internalFields.key, items: items, onHoverStart: this._clearTimeouts.bind(this), position: this.getSubmenuPosition($rootItem) })); this._attachSubmenuHandlers($rootItem, result); return result }; _proto._getSubmenuOptions = function() { var _this4 = this; var $submenuTarget = (0, _renderer.default)("<div>"); var isMenuHorizontal = this._isMenuHorizontal(); return { itemTemplate: this.option("itemTemplate"), target: $submenuTarget, orientation: this.option("orientation"), selectionMode: this.option("selectionMode"), cssClass: this.option("cssClass"), selectByClick: this.option("selectByClick"), hoverStateEnabled: this.option("hoverStateEnabled"), activeStateEnabled: this.option("activeStateEnabled"), focusStateEnabled: this.option("focusStateEnabled"), animation: this.option("animation"), showSubmenuMode: this.option("showSubmenuMode"), displayExpr: this.option("displayExpr"), disabledExpr: this.option("disabledExpr"), selectedExpr: this.option("selectedExpr"), itemsExpr: this.option("itemsExpr"), onFocusedItemChanged: function(e) { if (!e.component.option("visible")) { return } _this4.option("focusedElement", e.component.option("focusedElement")) }, onSelectionChanged: this._nestedItemOnSelectionChangedHandler.bind(this), onItemClick: this._nestedItemOnItemClickHandler.bind(this), onItemRendered: this._nestedItemOnItemRenderedHandler.bind(this), onLeftFirstItem: isMenuHorizontal ? null : this._moveMainMenuFocus.bind(this, PREVITEM_OPERATION), onLeftLastItem: isMenuHorizontal ? null : this._moveMainMenuFocus.bind(this, NEXTITEM_OPERATION), onCloseRootSubmenu: this._moveMainMenuFocus.bind(this, isMenuHorizontal ? PREVITEM_OPERATION : null), onExpandLastSubmenu: isMenuHorizontal ? this._moveMainMenuFocus.bind(this, NEXTITEM_OPERATION) : null } }; _proto._getShowFirstSubmenuMode = function() { if (!this._isDesktopDevice()) { return "onClick" } var optionValue = this.option("showFirstSubmenuMode"); return (0, _type.isObject)(optionValue) ? optionValue.name : optionValue }; _proto._moveMainMenuFocus = function(direction) { var $items = this._getAvailableItems(); var itemCount = $items.length; var $currentItem = $items.filter(".".concat(DX_MENU_ITEM_EXPANDED_CLASS)).eq(0); var itemIndex = $items.index($currentItem); this._hideSubmenu(this._visibleSubmenu); itemIndex += direction === PREVITEM_OPERATION ? -1 : 1; if (itemIndex >= itemCount) { itemIndex = 0 } else if (itemIndex < 0) { itemIndex = itemCount - 1 } var $newItem = $items.eq(itemIndex); this.option("focusedElement", (0, _element.getPublicElement)($newItem)) }; _proto._nestedItemOnSelectionChangedHandler = function(args) { var selectedItem = args.addedItems.length && args.addedItems[0]; var submenu = _ui3.default.getInstance(args.element); var onSelectionChanged = this._actions.onSelectionChanged; onSelectionChanged(args); selectedItem && this._clearSelectionInSubmenus(selectedItem[0], submenu); this._clearRootSelection(); this._setOptionWithoutOptionChange("selectedItem", selectedItem) }; _proto._clearSelectionInSubmenus = function(item, targetSubmenu) { var _this5 = this; var cleanAllSubmenus = !arguments.length; (0, _iterator.each)(this._submenus, (function(index, submenu) { var $submenu = submenu._itemContainer(); var isOtherItem = !$submenu.is(targetSubmenu && targetSubmenu._itemContainer()); var $selectedItem = $submenu.find(".".concat(_this5._selectedItemClass())); if (isOtherItem && $selectedItem.length || cleanAllSubmenus) { $selectedItem.removeClass(_this5._selectedItemClass()); var selectedItemData = _this5._getItemData($selectedItem); if (selectedItemData) { selectedItemData.selected = false } submenu._clearSelectedItems() } })) }; _proto._clearRootSelection = function() { var $prevSelectedItem = this.$element().find(".".concat(DX_MENU_ITEMS_CONTAINER_CLASS)).first().children().children().filter(".".concat(this._selectedItemClass())); if ($prevSelectedItem.length) { var prevSelectedItemData = this._getItemData($prevSelectedItem); prevSelectedItemData.selected = false; $prevSelectedItem.removeClass(this._selectedItemClass()) } }; _proto._nestedItemOnItemClickHandler = function(e) { this._actions.onItemClick(e) }; _proto._nestedItemOnItemRenderedHandler = function(e) { this._actions.onItemRendered(e) }; _proto._attachSubmenuHandlers = function($rootItem, submenu) { var _this6 = this; var $submenuOverlayContent = submenu.getOverlayContent(); var submenus = $submenuOverlayContent.find(".".concat(DX_SUBMENU_CLASS)); var submenuMouseLeaveName = (0, _index.addNamespace)(_hover.end, this.NAME + "_submenu"); submenu.option({ onShowing: this._submenuOnShowingHandler.bind(this, $rootItem, submenu), onShown: this._submenuOnShownHandler.bind(this, $rootItem, submenu), onHiding: this._submenuOnHidingHandler.bind(this, $rootItem, submenu), onHidden: this._submenuOnHiddenHandler.bind(this, $rootItem, submenu) }); (0, _iterator.each)(submenus, (function(index, submenu) { _events_engine.default.off(submenu, submenuMouseLeaveName); _events_engine.default.on(submenu, submenuMouseLeaveName, null, _this6._submenuMouseLeaveHandler.bind(_this6, $rootItem)) })) }; _proto._submenuOnShowingHandler = function($rootItem, submenu) { var $border = $rootItem.children(".".concat(DX_CONTEXT_MENU_CONTAINER_BORDER_CLASS)); this._actions.onSubmenuShowing({ rootItem: (0, _element.getPublicElement)($rootItem), submenu: submenu }); $border.show(); $rootItem.addClass(DX_MENU_ITEM_EXPANDED_CLASS) }; _proto._submenuOnShownHandler = function($rootItem, submenu) { this._actions.onSubmenuShown({ rootItem: (0, _element.getPublicElement)($rootItem), submenu: submenu }) }; _proto._submenuOnHidingHandler = function($rootItem, submenu, eventArgs) { var $border = $rootItem.children(".".concat(DX_CONTEXT_MENU_CONTAINER_BORDER_CLASS)); var args = eventArgs; args.rootItem = (0, _element.getPublicElement)($rootItem); args.submenu = submenu; this._actions.onSubmenuHiding(args); eventArgs = args; if (!eventArgs.cancel) { if (this._visibleSubmenu === submenu) { this._visibleSubmenu = null } $border.hide(); $rootItem.removeClass(DX_MENU_ITEM_EXPANDED_CLASS) } }; _proto._submenuOnHiddenHandler = function($rootItem, submenu) { this._actions.onSubmenuHidden({ rootItem: (0, _element.getPublicElement)($rootItem), submenu: submenu }) }; _proto._submenuMouseLeaveHandler = function($rootItem, eventArgs) { var target = (0, _renderer.default)(eventArgs.relatedTarget).parents(".".concat(DX_CONTEXT_MENU_CLASS))[0]; var contextMenu = this._getSubmenuByRootElement($rootItem).getOverlayContent()[0]; if (this.option("hideSubmenuOnMouseLeave") && target !== contextMenu) { this._clearTimeouts(); setTimeout(this._hideSubmenuAfterTimeout.bind(this), this._getDelay("hide")) } }; _proto._hideSubmenuAfterTimeout = function() { if (!this._visibleSubmenu) { return } var isRootItemHovered = (0, _renderer.default)(this._visibleSubmenu.$element().context).hasClass(DX_STATE_HOVER_CLASS); var isSubmenuItemHovered = this._visibleSubmenu.getOverlayContent().find(".".concat(DX_STATE_HOVER_CLASS)).length; var hoveredElementFromSubMenu = this._visibleSubmenu.getOverlayContent().get(0).querySelector(":hover"); if (!hoveredElementFromSubMenu && !isSubmenuItemHovered && !isRootItemHovered) { this._visibleSubmenu.hide() } }; _proto._getSubmenuByRootElement = function($rootItem) { if (!$rootItem) { return false } var $submenu = $rootItem.children(".".concat(DX_CONTEXT_MENU_CLASS)); return $submenu.length && _ui3.default.getInstance($submenu) }; _proto.getSubmenuPosition = function($rootItem) { var isHorizontalMenu = this._isMenuHorizontal(); var submenuDirection = this.option("submenuDirection").toLowerCase(); var rtlEnabled = this.option("rtlEnabled"); var submenuPosition = { collision: "flip", of: $rootItem }; switch (submenuDirection) { case "leftortop": submenuPosition.at = "left top"; submenuPosition.my = isHorizontalMenu ? "left bottom" : "right top"; break; case "rightorbottom": submenuPosition.at = isHorizontalMenu ? "left bottom" : "right top"; submenuPosition.my = "left top"; break; default: if (isHorizontalMenu) { submenuPosition.at = rtlEnabled ? "right bottom" : "left bottom"; submenuPosition.my = rtlEnabled ? "right top" : "left top" } else { submenuPosition.at = rtlEnabled ? "left top" : "right top"; submenuPosition.my = rtlEnabled ? "right top" : "left top" } } return submenuPosition }; _proto._renderBorderElement = function($item) { (0, _renderer.default)("<div>").appendTo($item).addClass(DX_CONTEXT_MENU_CONTAINER_BORDER_CLASS).hide() }; _proto._itemPointerDownHandler = function(e) { var $target = (0, _renderer.default)(e.target); var $closestItem = $target.closest(this._itemElements()); if ($closestItem.hasClass("dx-menu-item-has-submenu")) { this.option("focusedElement", null); return } _MenuBase.prototype._itemPointerDownHandler.call(this, e) }; _proto._hoverStartHandler = function(e) { var mouseMoveEventName = (0, _index.addNamespace)(_pointer.default.move, this.NAME); var $item = this._getItemElementByEventArgs(e); var node = this._dataAdapter.getNodeByItem(this._getItemData($item)); var isSelectionActive = (0, _type.isDefined)(e.buttons) && 1 === e.buttons || !(0, _type.isDefined)(e.buttons) && 1 === e.which; if (this._isItemDisabled($item)) { return } _events_engine.default.off($item, mouseMoveEventName); if (!this._hasChildren(node)) { this._showSubmenuTimer = setTimeout(this._hideSubmenuAfterTimeout.bind(this), this._getDelay("hide")); return } if ("onHover" === this._getShowFirstSubmenuMode() && !isSelectionActive) { var submenu = this._getSubmenuByElement($item); this._clearTimeouts(); if (!submenu.isOverlayVisible()) { _events_engine.default.on($item, mouseMoveEventName, this._itemMouseMoveHandler.bind(this)); this._showSubmenuTimer = this._getDelay("hide") } } }; _proto._hoverEndHandler = function(eventArg) { var _this7 = this; var $item = this._getItemElementByEventArgs(eventArg); var relatedTarget = (0, _renderer.default)(eventArg.relatedTarget); _MenuBase.prototype._hoverEndHandler.call(this, eventArg); this._clearTimeouts(); if (this._isItemDisabled($item)) { return } if (relatedTarget.hasClass(DX_CONTEXT_MENU_CONTENT_DELIMITER_CLASS)) { return } if (this.option("hideSubmenuOnMouseLeave") && !relatedTarget.hasClass(DX_MENU_ITEMS_CONTAINER_CLASS)) { this._hideSubmenuTimer = setTimeout((function() { _this7._hideSubmenuAfterTimeout() }), this._getDelay("hide")) } }; _proto._hideVisibleSubmenu = function() { if (!this._visibleSubmenu) { return false } this._hideSubmenu(this._visibleSubmenu); return true }; _proto._showSubmenu = function($itemElement) { var submenu = this._getSubmenuByElement($itemElement); if (this._visibleSubmenu !== submenu) { this._hideVisibleSubmenu() } if (submenu) { this._clearTimeouts(); submenu.show(); this.option("focusedElement", submenu.option("focusedElement")) } this._visibleSubmenu = submenu; this._hoveredRootItem = $itemElement }; _proto._hideSubmenu = function(submenu) { submenu && submenu.hide(); if (this._visibleSubmenu === submenu) { this._visibleSubmenu = null } this._hoveredRootItem = null }; _proto._itemMouseMoveHandler = function(e) { var _this8 = this; if (e.pointers && e.pointers.length) { return } var $item = (0, _renderer.default)(e.currentTarget); if (!(0, _type.isDefined)(this._showSubmenuTimer)) { return } this._clearTimeouts(); this._showSubmenuTimer = setTimeout((function() { var submenu = _this8._getSubmenuByElement($item); if (submenu && !submenu.isOverlayVisible()) { _this8._showSubmenu($item) } }), this._getDelay("show")) }; _proto._clearTimeouts = function() { clearTimeout(this._hideSubmenuTimer); clearTimeout(this._showSubmenuTimer) }; _proto._getSubmenuByElement = function($itemElement, itemData) { var submenu = this._getSubmenuByRootElement($itemElement); if (submenu) { return submenu } else { itemData = itemData || this._getItemData($itemElement); var node = this._dataAdapter.getNodeByItem(itemData); return this._hasChildren(node) && this._renderSubmenuItems(node, $itemElement) } }; _proto._updateSubmenuVisibilityOnClick = function(actionArgs) { var args = actionArgs.args.length && actionArgs.args[0]; if (!args || this._disabledGetter(args.itemData)) { return } var $itemElement = (0, _renderer.default)(args.itemElement); var currentSubmenu = this._getSubmenuByElement($itemElement, args.itemData); this._updateSelectedItemOnClick(actionArgs); if (this._visibleSubmenu) { if (this._visibleSubmenu === currentSubmenu) { if ("onClick" === this.option("showFirstSubmenuMode")) { this._hideSubmenu(this._visibleSubmenu) } return } else { this._hideSubmenu(this._visibleSubmenu) } } if (!currentSubmenu) { return } if (!currentSubmenu.isOverlayVisible()) { this._showSubmenu($itemElement); return } }; _proto._optionChanged = function(args) { if (ACTIONS.indexOf(args.name) >= 0) { this._initActions(); return } switch (args.name) { case "orientation": case "submenuDirection": this._invalidate(); break; case "showFirstSubmenuMode": case "hideSubmenuOnMouseLeave": break; case "showSubmenuMode": this._changeSubmenusOption(args.name, args.value); break; case "adaptivityEnabled": args.value ? this._initAdaptivity() : this._removeAdaptivity(); break; case "width": if (this._isAdaptivityEnabled()) { this._treeView.option(args.name, args.value); this._overlay.option(args.name, args.value) } _MenuBase.prototype._optionChanged.call(this, args); this._dimensionChanged(); break; case "animation": if (this._isAdaptivityEnabled()) { this._treeView.option("animationEnabled", !!args.value) } _MenuBase.prototype._optionChanged.call(this, args); break; default: if (this._isAdaptivityEnabled()) { this._treeView.option(args.name, args.value) } _MenuBase.prototype._optionChanged.call(this, args) } }; _proto._changeSubmenusOption = function(name, value) { (0, _iterator.each)(this._submenus, (function(index, submenu) { submenu.option(name, value) })) }; _proto.selectItem = function(itemElement) { this._hideSubmenu(this._visibleSubmenu); _MenuBase.prototype.selectItem.call(this, itemElement) }; _proto.unselectItem = function(itemElement) { this._hideSubmenu(this._visibleSubmenu); _MenuBase.prototype.selectItem.call(this, itemElement) }; return Menu }(_ui.default); (0, _component_registrator.default)("dxMenu", Menu); var _default = Menu; exports.default = _default; module.exports = exports.default; module.exports.default = exports.default;