handsontable 0.0.0-next-ff8465d-20231006 → 0.0.0-next-b0a4ea2-20231024
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of handsontable might be problematic. Click here for more details.
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/cellTypes/dateType/dateType.d.ts +3 -3
- package/cellTypes/dateType/dateType.js +2 -2
- package/cellTypes/dateType/dateType.mjs +2 -2
- package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
- package/cellTypes/handsontableType/handsontableType.js +2 -2
- package/cellTypes/handsontableType/handsontableType.mjs +2 -2
- package/core.d.ts +1 -1
- package/core.js +10 -5
- package/core.mjs +10 -5
- package/dataMap/metaManager/metaSchema.js +1 -1
- package/dataMap/metaManager/metaSchema.mjs +1 -1
- package/dist/handsontable.css +13 -12
- package/dist/handsontable.full.css +13 -12
- package/dist/handsontable.full.js +2260 -1403
- package/dist/handsontable.full.min.css +5 -5
- package/dist/handsontable.full.min.js +10 -10
- package/dist/handsontable.js +2260 -1403
- package/dist/handsontable.min.css +5 -5
- package/dist/handsontable.min.js +24 -24
- package/dist/languages/all.js +6 -2
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/en-US.js +3 -1
- package/dist/languages/en-US.min.js +1 -1
- package/dist/languages/pl-PL.js +3 -1
- package/dist/languages/pl-PL.min.js +1 -1
- package/editors/autocompleteEditor/autocompleteEditor.js +1 -1
- package/editors/autocompleteEditor/autocompleteEditor.mjs +1 -1
- package/editors/dateEditor/dateEditor.js +26 -7
- package/editors/dateEditor/dateEditor.mjs +27 -8
- package/editors/handsontableEditor/handsontableEditor.js +7 -0
- package/editors/handsontableEditor/handsontableEditor.mjs +8 -1
- package/helpers/a11y.js +3 -1
- package/helpers/a11y.mjs +2 -1
- package/helpers/mixed.js +1 -1
- package/helpers/mixed.mjs +1 -1
- package/i18n/constants.js +7 -1
- package/i18n/constants.mjs +4 -1
- package/i18n/languages/en-US.js +3 -1
- package/i18n/languages/en-US.mjs +3 -1
- package/i18n/languages/pl-PL.js +3 -1
- package/i18n/languages/pl-PL.mjs +3 -1
- package/languages/all.js +6 -2
- package/languages/en-US.js +3 -1
- package/languages/en-US.mjs +3 -1
- package/languages/index.js +6 -2
- package/languages/pl-PL.js +3 -1
- package/languages/pl-PL.mjs +3 -1
- package/package.json +11 -1
- package/pluginHooks.js +1 -1
- package/pluginHooks.mjs +1 -1
- package/plugins/contextMenu/menu/defaultShortcutsList.js +88 -0
- package/plugins/contextMenu/menu/defaultShortcutsList.mjs +84 -0
- package/plugins/contextMenu/menu/menu.js +87 -151
- package/plugins/contextMenu/menu/menu.mjs +90 -154
- package/plugins/contextMenu/menu/menuItemRenderer.js +58 -0
- package/plugins/contextMenu/menu/menuItemRenderer.mjs +54 -0
- package/plugins/contextMenu/menu/navigator.js +19 -144
- package/plugins/contextMenu/menu/navigator.mjs +18 -143
- package/plugins/contextMenu/menu/shortcuts.js +114 -0
- package/plugins/contextMenu/menu/shortcuts.mjs +110 -0
- package/plugins/dropdownMenu/dropdownMenu.js +32 -4
- package/plugins/dropdownMenu/dropdownMenu.mjs +33 -5
- package/plugins/filters/component/_base.js +23 -8
- package/plugins/filters/component/_base.mjs +23 -8
- package/plugins/filters/component/actionBar.js +29 -27
- package/plugins/filters/component/actionBar.mjs +26 -23
- package/plugins/filters/component/condition.js +46 -59
- package/plugins/filters/component/condition.mjs +40 -52
- package/plugins/filters/component/operators.js +21 -22
- package/plugins/filters/component/operators.mjs +18 -18
- package/plugins/filters/component/value.js +35 -26
- package/plugins/filters/component/value.mjs +32 -22
- package/plugins/filters/filters.js +75 -48
- package/plugins/filters/filters.mjs +68 -41
- package/plugins/filters/menu/focusController.js +123 -0
- package/plugins/filters/menu/focusController.mjs +119 -0
- package/plugins/filters/menu/focusNavigator.js +30 -0
- package/plugins/filters/menu/focusNavigator.mjs +26 -0
- package/plugins/filters/ui/_base.js +35 -13
- package/plugins/filters/ui/_base.mjs +35 -13
- package/plugins/filters/ui/input.js +43 -32
- package/plugins/filters/ui/input.mjs +42 -30
- package/plugins/filters/ui/link.js +44 -12
- package/plugins/filters/ui/link.mjs +44 -11
- package/plugins/filters/ui/multipleSelect.js +234 -129
- package/plugins/filters/ui/multipleSelect.mjs +232 -127
- package/plugins/filters/ui/radioInput.js +42 -18
- package/plugins/filters/ui/radioInput.mjs +42 -17
- package/plugins/filters/ui/select.js +144 -75
- package/plugins/filters/ui/select.mjs +140 -70
- package/renderers/autocompleteRenderer/autocompleteRenderer.js +1 -1
- package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +1 -1
- package/renderers/checkboxRenderer/checkboxRenderer.js +3 -3
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +4 -4
- package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
- package/renderers/dateRenderer/dateRenderer.js +29 -0
- package/renderers/dateRenderer/dateRenderer.mjs +24 -0
- package/renderers/dateRenderer/index.d.ts +1 -0
- package/renderers/dateRenderer/index.js +6 -0
- package/renderers/dateRenderer/index.mjs +1 -0
- package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
- package/renderers/handsontableRenderer/handsontableRenderer.js +29 -0
- package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
- package/renderers/handsontableRenderer/index.d.ts +1 -0
- package/renderers/handsontableRenderer/index.js +6 -0
- package/renderers/handsontableRenderer/index.mjs +1 -0
- package/renderers/index.d.ts +6 -0
- package/renderers/selectRenderer/selectRenderer.js +2 -1
- package/renderers/selectRenderer/selectRenderer.mjs +2 -1
- package/selection/selection.js +2 -2
- package/selection/selection.mjs +2 -2
- package/shortcuts/context.js +3 -2
- package/shortcuts/context.mjs +3 -2
- package/utils/paginator.js +151 -0
- package/utils/paginator.mjs +147 -0
@@ -0,0 +1,84 @@
|
|
1
|
+
/**
|
2
|
+
* Creates a keyboard shortcuts list with default keyboards binds.
|
3
|
+
*
|
4
|
+
* @param {Menu} menu The main menu instance.
|
5
|
+
* @returns {KeyboardShortcut[]}
|
6
|
+
*/
|
7
|
+
export function createDefaultShortcutsList(menu) {
|
8
|
+
return [{
|
9
|
+
keys: [['Tab'], ['Shift', 'Tab'], ['Control/Meta', 'A']],
|
10
|
+
forwardToContext: menu.hot.getShortcutManager().getContext('grid'),
|
11
|
+
callback: () => menu.close(true)
|
12
|
+
}, {
|
13
|
+
keys: [['Escape']],
|
14
|
+
callback: () => menu.close()
|
15
|
+
}, {
|
16
|
+
keys: [['ArrowDown']],
|
17
|
+
callback: () => menu.getNavigator().toNextItem()
|
18
|
+
}, {
|
19
|
+
keys: [['ArrowUp']],
|
20
|
+
callback: () => menu.getNavigator().toPreviousItem()
|
21
|
+
}, {
|
22
|
+
keys: [['ArrowRight']],
|
23
|
+
callback: () => {
|
24
|
+
const selection = menu.hotMenu.getSelectedLast();
|
25
|
+
if (selection) {
|
26
|
+
const subMenu = menu.openSubMenu(selection[0]);
|
27
|
+
if (subMenu) {
|
28
|
+
subMenu.getNavigator().toFirstItem();
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
}, {
|
33
|
+
keys: [['ArrowLeft']],
|
34
|
+
callback: () => {
|
35
|
+
const selection = menu.hotMenu.getSelectedLast();
|
36
|
+
if (selection && menu.isSubMenu()) {
|
37
|
+
menu.close();
|
38
|
+
if (menu.isSubMenu()) {
|
39
|
+
menu.parentMenu.hotMenu.listen();
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
}, {
|
44
|
+
keys: [['Control/Meta', 'ArrowUp'], ['Home']],
|
45
|
+
callback: () => menu.getNavigator().toFirstItem()
|
46
|
+
}, {
|
47
|
+
keys: [['Control/Meta', 'ArrowDown'], ['End']],
|
48
|
+
callback: () => menu.getNavigator().toLastItem()
|
49
|
+
}, {
|
50
|
+
keys: [['Enter'], ['Space']],
|
51
|
+
callback: event => {
|
52
|
+
const selection = menu.hotMenu.getSelectedLast();
|
53
|
+
if (!selection) {
|
54
|
+
return;
|
55
|
+
}
|
56
|
+
if (menu.hotMenu.getSourceDataAtRow(selection[0]).submenu) {
|
57
|
+
menu.openSubMenu(selection[0]).getNavigator().toFirstItem();
|
58
|
+
} else {
|
59
|
+
menu.executeCommand(event);
|
60
|
+
menu.close(true);
|
61
|
+
}
|
62
|
+
}
|
63
|
+
}, {
|
64
|
+
keys: [['PageUp']],
|
65
|
+
callback: () => {
|
66
|
+
const selection = menu.hotMenu.getSelectedLast();
|
67
|
+
if (selection) {
|
68
|
+
menu.hotMenu.selection.transformStart(-menu.hotMenu.countVisibleRows(), 0);
|
69
|
+
} else {
|
70
|
+
menu.getNavigator().toFirstItem();
|
71
|
+
}
|
72
|
+
}
|
73
|
+
}, {
|
74
|
+
keys: [['PageDown']],
|
75
|
+
callback: () => {
|
76
|
+
const selection = menu.hotMenu.getSelectedLast();
|
77
|
+
if (selection) {
|
78
|
+
menu.hotMenu.selection.transformStart(menu.hotMenu.countVisibleRows(), 0);
|
79
|
+
} else {
|
80
|
+
menu.getNavigator().toLastItem();
|
81
|
+
}
|
82
|
+
}
|
83
|
+
}];
|
84
|
+
}
|
@@ -1,9 +1,11 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
+
require("core-js/modules/es.error.cause.js");
|
3
4
|
exports.__esModule = true;
|
4
5
|
require("core-js/modules/es.array.push.js");
|
5
6
|
var _positioner = require("./positioner");
|
6
|
-
var
|
7
|
+
var _navigator2 = require("./navigator");
|
8
|
+
var _shortcuts = require("./shortcuts");
|
7
9
|
var _predefinedItems = require("./../predefinedItems");
|
8
10
|
var _utils = require("./utils");
|
9
11
|
var _eventManager = _interopRequireDefault(require("../../../eventManager"));
|
@@ -15,11 +17,17 @@ var _function = require("../../../helpers/function");
|
|
15
17
|
var _mixed = require("../../../helpers/mixed");
|
16
18
|
var _object = require("../../../helpers/object");
|
17
19
|
var _localHooks = _interopRequireDefault(require("../../../mixins/localHooks"));
|
20
|
+
var _menuItemRenderer = require("./menuItemRenderer");
|
18
21
|
var _a11y = require("../../../helpers/a11y");
|
19
22
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
23
|
+
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
24
|
+
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
25
|
+
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
26
|
+
function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
|
27
|
+
function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
|
28
|
+
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
29
|
+
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
20
30
|
const MIN_WIDTH = 215;
|
21
|
-
const SHORTCUTS_CONTEXT = 'menu';
|
22
|
-
const SHORTCUTS_GROUP = SHORTCUTS_CONTEXT;
|
23
31
|
|
24
32
|
/**
|
25
33
|
* @typedef MenuOptions
|
@@ -36,12 +44,33 @@ const SHORTCUTS_GROUP = SHORTCUTS_CONTEXT;
|
|
36
44
|
* @private
|
37
45
|
* @class Menu
|
38
46
|
*/
|
47
|
+
var _navigator = /*#__PURE__*/new WeakMap();
|
48
|
+
var _shortcutsCtrl = /*#__PURE__*/new WeakMap();
|
39
49
|
class Menu {
|
40
50
|
/**
|
41
51
|
* @param {Core} hotInstance Handsontable instance.
|
42
52
|
* @param {MenuOptions} [options] Menu options.
|
43
53
|
*/
|
44
54
|
constructor(hotInstance, options) {
|
55
|
+
var _this = this;
|
56
|
+
/**
|
57
|
+
* The controller module that allows modifying the menu item selection positions.
|
58
|
+
*
|
59
|
+
* @type {Paginator}
|
60
|
+
*/
|
61
|
+
_classPrivateFieldInitSpec(this, _navigator, {
|
62
|
+
writable: true,
|
63
|
+
value: void 0
|
64
|
+
});
|
65
|
+
/**
|
66
|
+
* The controller module that allows extending the keyboard shortcuts for the menu.
|
67
|
+
*
|
68
|
+
* @type {KeyboardShortcutsMenuController}
|
69
|
+
*/
|
70
|
+
_classPrivateFieldInitSpec(this, _shortcutsCtrl, {
|
71
|
+
writable: true,
|
72
|
+
value: void 0
|
73
|
+
});
|
45
74
|
this.hot = hotInstance;
|
46
75
|
this.options = options || {
|
47
76
|
parent: null,
|
@@ -55,14 +84,20 @@ class Menu {
|
|
55
84
|
this.eventManager = new _eventManager.default(this);
|
56
85
|
this.container = this.createContainer(this.options.name);
|
57
86
|
this.positioner = new _positioner.Positioner(this.options.keepInViewport);
|
58
|
-
this.navigator = new _navigator.Navigator();
|
59
87
|
this.hotMenu = null;
|
60
88
|
this.hotSubMenus = {};
|
61
89
|
this.parentMenu = this.options.parent || null;
|
62
90
|
this.menuItems = null;
|
63
91
|
this.origOutsideClickDeselects = null;
|
64
|
-
this._afterScrollCallback = null;
|
65
92
|
this.registerEvents();
|
93
|
+
if (this.isSubMenu()) {
|
94
|
+
this.addLocalHook('afterSelectionChange', function () {
|
95
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
96
|
+
args[_key] = arguments[_key];
|
97
|
+
}
|
98
|
+
return _this.parentMenu.runLocalHooks('afterSelectionChange', ...args);
|
99
|
+
});
|
100
|
+
}
|
66
101
|
}
|
67
102
|
|
68
103
|
/**
|
@@ -88,6 +123,24 @@ class Menu {
|
|
88
123
|
this.menuItems = menuItems;
|
89
124
|
}
|
90
125
|
|
126
|
+
/**
|
127
|
+
* Gets the controller object that allows modifying the the menu item selection.
|
128
|
+
*
|
129
|
+
* @returns {Paginator | undefined}
|
130
|
+
*/
|
131
|
+
getNavigator() {
|
132
|
+
return _classPrivateFieldGet(this, _navigator);
|
133
|
+
}
|
134
|
+
|
135
|
+
/**
|
136
|
+
* Gets the controller object that allows extending the keyboard shortcuts of the menu.
|
137
|
+
*
|
138
|
+
* @returns {KeyboardShortcutsMenuController | undefined}
|
139
|
+
*/
|
140
|
+
getKeyboardShortcutsCtrl() {
|
141
|
+
return _classPrivateFieldGet(this, _shortcutsCtrl);
|
142
|
+
}
|
143
|
+
|
91
144
|
/**
|
92
145
|
* Returns currently selected menu item. Returns `null` if no item was selected.
|
93
146
|
*
|
@@ -156,10 +209,11 @@ class Menu {
|
|
156
209
|
readOnly: true,
|
157
210
|
editor: false,
|
158
211
|
copyPaste: false,
|
212
|
+
hiddenRows: true,
|
159
213
|
maxCols: 1,
|
160
214
|
columns: [{
|
161
215
|
data: 'name',
|
162
|
-
renderer: (
|
216
|
+
renderer: (0, _menuItemRenderer.createMenuItemRenderer)(this.hot)
|
163
217
|
}],
|
164
218
|
renderAllRows: true,
|
165
219
|
fragmentSelection: false,
|
@@ -167,6 +221,9 @@ class Menu {
|
|
167
221
|
disableVisualSelection: 'area',
|
168
222
|
layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',
|
169
223
|
ariaTags: false,
|
224
|
+
beforeOnCellMouseOver: (event, coords) => {
|
225
|
+
_classPrivateFieldGet(this, _navigator).setCurrentPage(coords.row);
|
226
|
+
},
|
170
227
|
afterOnCellMouseOver: (event, coords) => {
|
171
228
|
if (this.isAllSubMenusClosed()) {
|
172
229
|
delayedOpenSubMenu(coords.row);
|
@@ -189,6 +246,7 @@ class Menu {
|
|
189
246
|
if (this.hotMenu.view.isMouseDown()) {
|
190
247
|
preventScrolling.value = true;
|
191
248
|
}
|
249
|
+
this.runLocalHooks('afterSelectionChange', this.getSelectedItem());
|
192
250
|
},
|
193
251
|
beforeOnCellMouseUp: event => {
|
194
252
|
if (this.hasSelectedItem()) {
|
@@ -226,94 +284,14 @@ class Menu {
|
|
226
284
|
this.hotMenu = new this.hot.constructor(this.container, settings);
|
227
285
|
this.hotMenu.addHook('afterInit', () => this.onAfterInit());
|
228
286
|
this.hotMenu.init();
|
229
|
-
this.hotMenu
|
230
|
-
this.
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
}
|
236
|
-
|
237
|
-
...config,
|
238
|
-
runOnlyIf: event => !(0, _element.isInput)(event.target) || !this.container.contains(event.target)
|
239
|
-
};
|
240
|
-
|
241
|
-
// Default shortcuts for Handsontable should not be handled. Changing context will help with that.
|
242
|
-
shortcutManager.setActiveContextName('menu');
|
243
|
-
menuContext.addShortcuts([{
|
244
|
-
keys: [['Tab'], ['Shift', 'Tab'], ['Control/Meta', 'A']],
|
245
|
-
forwardToContext: this.hot.getShortcutManager().getContext('grid'),
|
246
|
-
callback: () => this.close(true)
|
247
|
-
}, {
|
248
|
-
keys: [['Escape']],
|
249
|
-
callback: () => this.close(true)
|
250
|
-
}, {
|
251
|
-
keys: [['ArrowDown']],
|
252
|
-
callback: () => this.navigator.selectNext()
|
253
|
-
}, {
|
254
|
-
keys: [['ArrowUp']],
|
255
|
-
callback: () => this.navigator.selectPrev()
|
256
|
-
}, {
|
257
|
-
keys: [['ArrowRight']],
|
258
|
-
callback: () => {
|
259
|
-
const selection = this.hotMenu.getSelectedLast();
|
260
|
-
if (selection) {
|
261
|
-
const subMenu = this.openSubMenu(selection[0]);
|
262
|
-
if (subMenu) {
|
263
|
-
subMenu.navigator.selectFirst();
|
264
|
-
}
|
265
|
-
}
|
266
|
-
}
|
267
|
-
}, {
|
268
|
-
keys: [['ArrowLeft']],
|
269
|
-
callback: () => {
|
270
|
-
const selection = this.hotMenu.getSelectedLast();
|
271
|
-
if (selection && this.isSubMenu()) {
|
272
|
-
this.close();
|
273
|
-
if (this.isSubMenu()) {
|
274
|
-
this.parentMenu.hotMenu.listen();
|
275
|
-
}
|
276
|
-
}
|
277
|
-
}
|
278
|
-
}, {
|
279
|
-
keys: [['Control/Meta', 'ArrowUp'], ['Home']],
|
280
|
-
callback: () => this.navigator.selectFirst()
|
281
|
-
}, {
|
282
|
-
keys: [['Control/Meta', 'ArrowDown'], ['End']],
|
283
|
-
callback: () => this.navigator.selectLast()
|
284
|
-
}, {
|
285
|
-
keys: [['Enter'], ['Space']],
|
286
|
-
callback: event => {
|
287
|
-
const selection = this.hotMenu.getSelectedLast();
|
288
|
-
if (this.hotMenu.getSourceDataAtRow(selection[0]).submenu) {
|
289
|
-
this.openSubMenu(selection[0]).navigator.selectFirst();
|
290
|
-
} else {
|
291
|
-
this.executeCommand(event);
|
292
|
-
this.close(true);
|
293
|
-
}
|
294
|
-
}
|
295
|
-
}, {
|
296
|
-
keys: [['PageUp']],
|
297
|
-
callback: () => {
|
298
|
-
const selection = this.hotMenu.getSelectedLast();
|
299
|
-
if (selection) {
|
300
|
-
this.hotMenu.selection.transformStart(-this.hotMenu.countVisibleRows(), 0);
|
301
|
-
} else {
|
302
|
-
this.navigator.selectFirst();
|
303
|
-
}
|
304
|
-
}
|
305
|
-
}, {
|
306
|
-
keys: [['PageDown']],
|
307
|
-
callback: () => {
|
308
|
-
const selection = this.hotMenu.getSelectedLast();
|
309
|
-
if (selection) {
|
310
|
-
this.hotMenu.selection.transformStart(this.hotMenu.countVisibleRows(), 0);
|
311
|
-
} else {
|
312
|
-
this.navigator.selectLast();
|
313
|
-
}
|
314
|
-
}
|
315
|
-
}], menuContextConfig);
|
316
|
-
this.runLocalHooks('afterOpen');
|
287
|
+
_classPrivateFieldSet(this, _navigator, (0, _navigator2.createMenuNavigator)(this.hotMenu));
|
288
|
+
_classPrivateFieldSet(this, _shortcutsCtrl, (0, _shortcuts.createKeyboardShortcutsCtrl)(this));
|
289
|
+
_classPrivateFieldGet(this, _shortcutsCtrl).listen();
|
290
|
+
this.focus();
|
291
|
+
if (this.isSubMenu()) {
|
292
|
+
this.addLocalHook('afterOpen', () => this.parentMenu.runLocalHooks('afterSubmenuOpen', this));
|
293
|
+
}
|
294
|
+
this.runLocalHooks('afterOpen', this);
|
317
295
|
}
|
318
296
|
|
319
297
|
/**
|
@@ -329,7 +307,7 @@ class Menu {
|
|
329
307
|
if (closeParent && this.isSubMenu()) {
|
330
308
|
this.parentMenu.close();
|
331
309
|
} else {
|
332
|
-
this.
|
310
|
+
_classPrivateFieldGet(this, _navigator).clear();
|
333
311
|
this.closeAllSubMenus();
|
334
312
|
this.container.style.display = 'none';
|
335
313
|
this.hotMenu.destroy();
|
@@ -420,6 +398,19 @@ class Menu {
|
|
420
398
|
return Object.keys(this.hotSubMenus).length === 0;
|
421
399
|
}
|
422
400
|
|
401
|
+
/**
|
402
|
+
* Focus the menu so all keyboard shortcuts become active.
|
403
|
+
*/
|
404
|
+
focus() {
|
405
|
+
if (this.isOpened()) {
|
406
|
+
this.hotMenu.rootElement.focus({
|
407
|
+
preventScroll: true
|
408
|
+
});
|
409
|
+
this.getKeyboardShortcutsCtrl().listen();
|
410
|
+
this.hotMenu.listen();
|
411
|
+
}
|
412
|
+
}
|
413
|
+
|
423
414
|
/**
|
424
415
|
* Destroy instance.
|
425
416
|
*/
|
@@ -505,61 +496,6 @@ class Menu {
|
|
505
496
|
this.positioner.setElement(this.container).updatePosition(coords);
|
506
497
|
}
|
507
498
|
|
508
|
-
/**
|
509
|
-
* Menu item renderer.
|
510
|
-
*
|
511
|
-
* @private
|
512
|
-
* @param {Core} hot The Handsontable instance.
|
513
|
-
* @param {HTMLCellElement} TD The rendered cell element.
|
514
|
-
* @param {number} row The visual index.
|
515
|
-
* @param {number} col The visual index.
|
516
|
-
* @param {string} prop The column property if used.
|
517
|
-
* @param {string} value The cell value.
|
518
|
-
*/
|
519
|
-
menuItemRenderer(hot, TD, row, col, prop, value) {
|
520
|
-
const item = hot.getSourceDataAtRow(row);
|
521
|
-
const wrapper = this.hot.rootDocument.createElement('div');
|
522
|
-
let itemValue = value;
|
523
|
-
if (typeof itemValue === 'function') {
|
524
|
-
itemValue = itemValue.call(this.hot);
|
525
|
-
}
|
526
|
-
(0, _element.empty)(TD);
|
527
|
-
(0, _element.addClass)(wrapper, 'htItemWrapper');
|
528
|
-
if (this.hot.getSettings().ariaTags) {
|
529
|
-
(0, _element.setAttribute)(TD, [(0, _a11y.A11Y_MENU_ITEM)(), (0, _a11y.A11Y_LABEL)(itemValue), ...((0, _utils.isItemDisabled)(item, this.hot) ? [(0, _a11y.A11Y_DISABLED)()] : []), ...((0, _utils.isItemSubMenu)(item) ? [(0, _a11y.A11Y_EXPANDED)(false)] : [])]);
|
530
|
-
}
|
531
|
-
TD.appendChild(wrapper);
|
532
|
-
if ((0, _utils.isItemSeparator)(item)) {
|
533
|
-
(0, _element.addClass)(TD, 'htSeparator');
|
534
|
-
} else if (typeof item.renderer === 'function') {
|
535
|
-
(0, _element.addClass)(TD, 'htCustomMenuRenderer');
|
536
|
-
TD.appendChild(item.renderer(hot, wrapper, row, col, prop, itemValue));
|
537
|
-
} else {
|
538
|
-
(0, _element.fastInnerHTML)(wrapper, itemValue);
|
539
|
-
}
|
540
|
-
if ((0, _utils.isItemDisabled)(item, this.hot)) {
|
541
|
-
(0, _element.addClass)(TD, 'htDisabled');
|
542
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
|
543
|
-
} else if ((0, _utils.isItemSelectionDisabled)(item)) {
|
544
|
-
(0, _element.addClass)(TD, 'htSelectionDisabled');
|
545
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
|
546
|
-
} else if ((0, _utils.isItemSubMenu)(item)) {
|
547
|
-
(0, _element.addClass)(TD, 'htSubmenu');
|
548
|
-
if ((0, _utils.isItemSelectionDisabled)(item)) {
|
549
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
|
550
|
-
} else {
|
551
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));
|
552
|
-
}
|
553
|
-
} else {
|
554
|
-
(0, _element.removeClass)(TD, ['htSubmenu', 'htDisabled']);
|
555
|
-
if ((0, _utils.isItemSelectionDisabled)(item)) {
|
556
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
|
557
|
-
} else {
|
558
|
-
this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));
|
559
|
-
}
|
560
|
-
}
|
561
|
-
}
|
562
|
-
|
563
499
|
/**
|
564
500
|
* Create container/wrapper for handsontable.
|
565
501
|
*
|
@@ -618,7 +554,7 @@ class Menu {
|
|
618
554
|
|
619
555
|
// Replace the default accessibility tags with the context menu's
|
620
556
|
if (this.hot.getSettings().ariaTags) {
|
621
|
-
(0, _element.setAttribute)(this.hotMenu.rootElement, [(0, _a11y.A11Y_MENU)()]);
|
557
|
+
(0, _element.setAttribute)(this.hotMenu.rootElement, [(0, _a11y.A11Y_MENU)(), (0, _a11y.A11Y_TABINDEX)(-1)]);
|
622
558
|
}
|
623
559
|
}
|
624
560
|
|