devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
112 lines (110 loc) • 4.49 kB
JavaScript
/**
* DevExtreme (ui/grid_core/ui.grid_core.context_menu.js)
* Version: 18.2.18
* Build date: Tue Oct 18 2022
*
* Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
"use strict";
var _renderer = require("../../core/renderer");
var _renderer2 = _interopRequireDefault(_renderer);
var _dom = require("../../core/utils/dom");
var _common = require("../../core/utils/common");
var _iterator = require("../../core/utils/iterator");
var _uiGrid_core = require("./ui.grid_core.modules");
var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
var _context_menu = require("../context_menu");
var _context_menu2 = _interopRequireDefault(_context_menu);
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
"default": obj
}
}
var CONTEXT_MENU = "dx-context-menu",
viewName = {
columnHeadersView: "header",
rowsView: "content",
footerView: "footer",
headerPanel: "headerPanel"
},
VIEW_NAMES = ["columnHeadersView", "rowsView", "footerView", "headerPanel"];
var ContextMenuController = _uiGrid_core2.default.ViewController.inherit({
init: function() {
this.createAction("onContextMenuPreparing")
},
getContextMenuItems: function(dxEvent) {
if (!dxEvent) {
return false
}
var view, options, rowIndex, columnIndex, rowOptions, $element, $targetRowElement, $targetCellElement, menuItems, that = this,
$targetElement = (0, _renderer2.default)(dxEvent.target);
(0, _iterator.each)(VIEW_NAMES, function() {
view = that.getView(this);
$element = view && view.element();
if ($element && ($element.is($targetElement) || $element.find($targetElement).length)) {
$targetCellElement = $targetElement.closest(".dx-row > td");
$targetRowElement = $targetCellElement.parent();
rowIndex = view.getRowIndex($targetRowElement);
columnIndex = $targetCellElement[0] && $targetCellElement[0].cellIndex;
rowOptions = $targetRowElement.data("options");
options = {
event: dxEvent,
targetElement: (0, _dom.getPublicElement)($targetElement),
target: viewName[this],
rowIndex: rowIndex,
row: view._getRows()[rowIndex],
columnIndex: columnIndex,
column: rowOptions && rowOptions.cells[columnIndex].column
};
options.items = view.getContextMenuItems && view.getContextMenuItems(options);
that.executeAction("onContextMenuPreparing", options);
that._contextMenuPrepared(options);
menuItems = options.items;
if (menuItems) {
return false
}
}
});
return menuItems
},
_contextMenuPrepared: _common.noop
});
var ContextMenuView = _uiGrid_core2.default.View.inherit({
_renderCore: function() {
var that = this,
$element = that.element().addClass(CONTEXT_MENU);
this.setAria("role", "presentation", $element);
this._createComponent($element, _context_menu2.default, {
onPositioning: function(actionArgs) {
var event = actionArgs.event,
contextMenuInstance = actionArgs.component,
items = that.getController("contextMenu").getContextMenuItems(event);
if (items) {
contextMenuInstance.option("items", items);
event.stopPropagation()
} else {
actionArgs.cancel = true
}
},
onItemClick: function(params) {
params.itemData.onItemClick && params.itemData.onItemClick(params)
},
cssClass: that.getWidgetContainerClass(),
target: that.component.$element()
})
}
});
module.exports = {
defaultOptions: function() {
return {
onContextMenuPreparing: null
}
},
controllers: {
contextMenu: ContextMenuController
},
views: {
contextMenuView: ContextMenuView
}
};