handsontable 0.0.0-next-baf2fcf-20230809 → 0.0.0-next-be16baf-20230809
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/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
- package/3rdparty/walkontable/src/cell/coords.js +50 -11
- package/3rdparty/walkontable/src/cell/coords.mjs +50 -11
- package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
- package/3rdparty/walkontable/src/cell/range.js +38 -7
- package/3rdparty/walkontable/src/cell/range.mjs +38 -7
- package/3rdparty/walkontable/src/core/_base.js +9 -3
- package/3rdparty/walkontable/src/core/_base.mjs +9 -3
- package/3rdparty/walkontable/src/core/clone.js +2 -2
- package/3rdparty/walkontable/src/core/clone.mjs +2 -2
- package/3rdparty/walkontable/src/core/core.js +3 -2
- package/3rdparty/walkontable/src/core/core.mjs +3 -2
- package/3rdparty/walkontable/src/event.js +7 -7
- package/3rdparty/walkontable/src/event.mjs +7 -7
- package/3rdparty/walkontable/src/facade/core.js +2 -2
- package/3rdparty/walkontable/src/facade/core.mjs +2 -2
- package/3rdparty/walkontable/src/index.js +10 -2
- package/3rdparty/walkontable/src/index.mjs +2 -2
- package/3rdparty/walkontable/src/overlay/_base.js +1 -1
- package/3rdparty/walkontable/src/overlay/_base.mjs +1 -1
- package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -6
- package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -6
- package/3rdparty/walkontable/src/overlay/top.js +2 -6
- package/3rdparty/walkontable/src/overlay/top.mjs +2 -6
- package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +7 -12
- package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
- package/3rdparty/walkontable/src/selection/border/constants.js +16 -0
- package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
- package/3rdparty/walkontable/src/selection/constants.js +62 -0
- package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
- package/3rdparty/walkontable/src/selection/index.js +26 -0
- package/3rdparty/walkontable/src/selection/index.mjs +5 -0
- package/3rdparty/walkontable/src/selection/manager.js +259 -0
- package/3rdparty/walkontable/src/selection/manager.mjs +254 -0
- package/3rdparty/walkontable/src/selection/scanner.js +270 -0
- package/3rdparty/walkontable/src/selection/scanner.mjs +267 -0
- package/3rdparty/walkontable/src/selection/selection.js +101 -0
- package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
- package/3rdparty/walkontable/src/table.js +6 -78
- package/3rdparty/walkontable/src/table.mjs +7 -79
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/common.d.ts +1 -1
- package/core/focusCatcher/focusDetector.js +58 -0
- package/core/focusCatcher/focusDetector.mjs +54 -0
- package/core/focusCatcher/index.js +142 -0
- package/core/focusCatcher/index.mjs +138 -0
- package/core/index.js +9 -0
- package/core/index.mjs +1 -0
- package/core.d.ts +6 -3
- package/core.js +176 -293
- package/core.mjs +176 -293
- package/dataMap/metaManager/metaSchema.js +41 -0
- package/dataMap/metaManager/metaSchema.mjs +41 -0
- package/dist/handsontable.css +24 -4
- package/dist/handsontable.full.css +24 -4
- package/dist/handsontable.full.js +8682 -5384
- package/dist/handsontable.full.min.css +3 -3
- package/dist/handsontable.full.min.js +25 -25
- package/dist/handsontable.js +10989 -7691
- package/dist/handsontable.min.css +3 -3
- package/dist/handsontable.min.js +19 -19
- package/editorManager.js +11 -75
- package/editorManager.mjs +11 -74
- package/editors/baseEditor/baseEditor.d.ts +0 -1
- package/editors/textEditor/textEditor.js +3 -11
- package/editors/textEditor/textEditor.mjs +4 -12
- package/helpers/mixed.js +1 -1
- package/helpers/mixed.mjs +1 -1
- package/helpers/number.d.ts +1 -0
- package/helpers/number.js +18 -0
- package/helpers/number.mjs +17 -0
- package/package.json +1 -1
- package/pluginHooks.d.ts +7 -1
- package/pluginHooks.js +106 -1
- package/pluginHooks.mjs +106 -1
- package/plugins/collapsibleColumns/collapsibleColumns.js +58 -4
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +58 -4
- package/plugins/columnSorting/columnSorting.js +38 -0
- package/plugins/columnSorting/columnSorting.mjs +38 -2
- package/plugins/columnSorting/index.js +3 -1
- package/plugins/columnSorting/index.mjs +1 -1
- package/plugins/comments/commentEditor.js +1 -0
- package/plugins/comments/commentEditor.mjs +1 -0
- package/plugins/comments/comments.js +251 -189
- package/plugins/comments/comments.mjs +250 -190
- package/plugins/comments/contextMenuItem/addEditComment.js +41 -0
- package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
- package/plugins/comments/contextMenuItem/readOnlyComment.js +49 -0
- package/plugins/comments/contextMenuItem/readOnlyComment.mjs +43 -0
- package/plugins/comments/contextMenuItem/removeComment.js +38 -0
- package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
- package/plugins/contextMenu/contextMenu.d.ts +1 -1
- package/plugins/contextMenu/contextMenu.js +72 -30
- package/plugins/contextMenu/contextMenu.mjs +73 -31
- package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
- package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
- package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
- package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
- package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
- package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
- package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
- package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
- package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
- package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
- package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
- package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
- package/plugins/contextMenu/utils.js +28 -16
- package/plugins/contextMenu/utils.mjs +27 -15
- package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
- package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
- package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
- package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
- package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
- package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
- package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
- package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
- package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
- package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
- package/plugins/copyPaste/copyPaste.js +14 -10
- package/plugins/copyPaste/copyPaste.mjs +14 -10
- package/plugins/customBorders/customBorders.js +23 -20
- package/plugins/customBorders/customBorders.mjs +24 -21
- package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
- package/plugins/dropdownMenu/dropdownMenu.js +89 -32
- package/plugins/dropdownMenu/dropdownMenu.mjs +89 -32
- package/plugins/filters/filters.js +31 -14
- package/plugins/filters/filters.mjs +30 -13
- package/plugins/manualColumnResize/manualColumnResize.js +0 -6
- package/plugins/manualColumnResize/manualColumnResize.mjs +1 -7
- package/plugins/mergeCells/mergeCells.js +5 -17
- package/plugins/mergeCells/mergeCells.mjs +5 -17
- package/plugins/multiColumnSorting/multiColumnSorting.js +37 -2
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +37 -2
- package/plugins/nestedHeaders/nestedHeaders.js +121 -8
- package/plugins/nestedHeaders/nestedHeaders.mjs +121 -8
- package/plugins/nestedHeaders/stateManager/index.js +37 -0
- package/plugins/nestedHeaders/stateManager/index.mjs +37 -0
- package/plugins/nestedRows/nestedRows.js +41 -0
- package/plugins/nestedRows/nestedRows.mjs +41 -0
- package/renderers/checkboxRenderer/checkboxRenderer.js +2 -2
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +1 -1
- package/selection/highlight/highlight.js +256 -71
- package/selection/highlight/highlight.mjs +250 -71
- package/selection/highlight/types/activeHeader.js +10 -8
- package/selection/highlight/types/activeHeader.mjs +10 -8
- package/selection/highlight/types/area.js +6 -18
- package/selection/highlight/types/area.mjs +6 -18
- package/selection/highlight/types/areaLayered.js +31 -0
- package/selection/highlight/types/areaLayered.mjs +26 -0
- package/selection/highlight/types/column.js +27 -0
- package/selection/highlight/types/column.mjs +22 -0
- package/selection/highlight/types/customSelection.js +7 -9
- package/selection/highlight/types/customSelection.mjs +7 -9
- package/selection/highlight/types/fill.js +5 -7
- package/selection/highlight/types/fill.mjs +5 -7
- package/selection/highlight/types/{cell.js → focus.js} +5 -7
- package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
- package/selection/highlight/types/header.js +9 -18
- package/selection/highlight/types/header.mjs +9 -18
- package/selection/highlight/types/row.js +27 -0
- package/selection/highlight/types/row.mjs +22 -0
- package/selection/highlight/visualSelection.js +31 -27
- package/selection/highlight/visualSelection.mjs +31 -27
- package/selection/index.js +4 -7
- package/selection/index.mjs +2 -3
- package/selection/mouseEventHandler.js +1 -1
- package/selection/mouseEventHandler.mjs +1 -1
- package/selection/range.js +8 -8
- package/selection/range.mjs +8 -8
- package/selection/selection.js +293 -154
- package/selection/selection.mjs +290 -153
- package/selection/transformation.js +232 -90
- package/selection/transformation.mjs +232 -90
- package/selection/utils.js +15 -21
- package/selection/utils.mjs +16 -21
- package/settings.d.ts +2 -0
- package/shortcutContexts/commands/editor/closeAndSave.js +12 -0
- package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
- package/shortcutContexts/commands/editor/closeWithoutSaving.js +12 -0
- package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
- package/shortcutContexts/commands/editor/fastOpen.js +16 -0
- package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
- package/shortcutContexts/commands/editor/index.js +16 -0
- package/shortcutContexts/commands/editor/index.mjs +12 -0
- package/shortcutContexts/commands/editor/open.js +27 -0
- package/shortcutContexts/commands/editor/open.mjs +23 -0
- package/shortcutContexts/commands/emptySelectedCells.js +11 -0
- package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
- package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
- package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +21 -0
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +17 -0
- package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
- package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
- package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
- package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
- package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
- package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +29 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +19 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +19 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +29 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +29 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +29 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
- package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
- package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +21 -0
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +17 -0
- package/shortcutContexts/commands/index.js +35 -0
- package/shortcutContexts/commands/index.mjs +31 -0
- package/shortcutContexts/commands/moveCellSelection/down.js +13 -0
- package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +31 -0
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +27 -0
- package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
- package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +12 -0
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
- package/shortcutContexts/commands/moveCellSelection/inlineStart.js +12 -0
- package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
- package/shortcutContexts/commands/moveCellSelection/left.js +10 -0
- package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
- package/shortcutContexts/commands/moveCellSelection/right.js +10 -0
- package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +18 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +14 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +19 -0
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
- package/shortcutContexts/commands/moveCellSelection/toMostRight.js +21 -0
- package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTop.js +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +19 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
- package/shortcutContexts/commands/moveCellSelection/up.js +13 -0
- package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +31 -0
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +27 -0
- package/shortcutContexts/commands/populateSelectedCellsData.js +29 -0
- package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
- package/shortcutContexts/commands/scrollToFocusedCell.js +36 -0
- package/shortcutContexts/commands/scrollToFocusedCell.mjs +32 -0
- package/shortcutContexts/commands/selectAll.js +10 -0
- package/shortcutContexts/commands/selectAll.mjs +6 -0
- package/shortcutContexts/constants.js +13 -0
- package/shortcutContexts/constants.mjs +8 -0
- package/shortcutContexts/editor.js +25 -0
- package/shortcutContexts/editor.mjs +21 -0
- package/shortcutContexts/grid.js +163 -0
- package/shortcutContexts/grid.mjs +159 -0
- package/shortcutContexts/index.js +24 -0
- package/shortcutContexts/index.mjs +11 -0
- package/shortcuts/manager.js +2 -0
- package/shortcuts/manager.mjs +2 -0
- package/shortcuts/recorder.js +2 -2
- package/shortcuts/recorder.mjs +2 -2
- package/shortcuts/utils.js +19 -5
- package/shortcuts/utils.mjs +18 -4
- package/tableView.js +67 -13
- package/tableView.mjs +67 -13
- package/3rdparty/walkontable/src/selection.js +0 -295
- package/3rdparty/walkontable/src/selection.mjs +0 -290
- package/selection/highlight/constants.js +0 -15
- package/selection/highlight/constants.mjs +0 -6
- package/selection/highlight/types/index.js +0 -35
- package/selection/highlight/types/index.mjs +0 -31
@@ -1,8 +1,8 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
3
|
exports.__esModule = true;
|
4
|
-
require("core-js/modules/es.array.push.js");
|
5
4
|
require("core-js/modules/es.error.cause.js");
|
5
|
+
require("core-js/modules/es.array.push.js");
|
6
6
|
var _element = require("../../../helpers/dom/element");
|
7
7
|
var _function = require("../../../helpers/function");
|
8
8
|
var _column = _interopRequireDefault(require("./filter/column"));
|
@@ -345,7 +345,7 @@ class Table {
|
|
345
345
|
wtOverlays.refreshAll(); // `refreshAll()` internally already calls `refreshSelections()` method
|
346
346
|
wtOverlays.adjustElementsSize();
|
347
347
|
} else {
|
348
|
-
this.
|
348
|
+
this.dataAccessObject.selectionManager.setActiveOverlay(this.facadeGetter()).render(runFastDraw);
|
349
349
|
}
|
350
350
|
if (syncScroll) {
|
351
351
|
wtOverlays.syncScrollWithMaster();
|
@@ -437,75 +437,6 @@ class Table {
|
|
437
437
|
}
|
438
438
|
}
|
439
439
|
|
440
|
-
/**
|
441
|
-
* @param {string} className The CSS class name to remove from the table cells.
|
442
|
-
*/
|
443
|
-
removeClassFromCells(className) {
|
444
|
-
const nodes = this.TABLE.querySelectorAll(`.${className}`);
|
445
|
-
for (let i = 0, len = nodes.length; i < len; i++) {
|
446
|
-
(0, _element.removeClass)(nodes[i], className);
|
447
|
-
}
|
448
|
-
}
|
449
|
-
|
450
|
-
/**
|
451
|
-
* Refresh the table selection by re-rendering Selection instances connected with that instance.
|
452
|
-
*
|
453
|
-
* @param {boolean} fastDraw If fast drawing is enabled than additionally className clearing is applied.
|
454
|
-
*/
|
455
|
-
refreshSelections(fastDraw) {
|
456
|
-
const {
|
457
|
-
wtSettings
|
458
|
-
} = this;
|
459
|
-
const {
|
460
|
-
selections
|
461
|
-
} = this.dataAccessObject;
|
462
|
-
if (!selections) {
|
463
|
-
return;
|
464
|
-
}
|
465
|
-
const highlights = Array.from(selections);
|
466
|
-
const len = highlights.length;
|
467
|
-
if (fastDraw) {
|
468
|
-
const classesToRemove = [];
|
469
|
-
for (let i = 0; i < len; i++) {
|
470
|
-
const {
|
471
|
-
highlightHeaderClassName,
|
472
|
-
highlightRowClassName,
|
473
|
-
highlightColumnClassName
|
474
|
-
} = highlights[i].settings;
|
475
|
-
const classNames = highlights[i].classNames;
|
476
|
-
const classNamesLength = classNames.length;
|
477
|
-
for (let j = 0; j < classNamesLength; j++) {
|
478
|
-
if (!classesToRemove.includes(classNames[j])) {
|
479
|
-
classesToRemove.push(classNames[j]);
|
480
|
-
}
|
481
|
-
}
|
482
|
-
if (highlightHeaderClassName && !classesToRemove.includes(highlightHeaderClassName)) {
|
483
|
-
classesToRemove.push(highlightHeaderClassName);
|
484
|
-
}
|
485
|
-
if (highlightRowClassName && !classesToRemove.includes(highlightRowClassName)) {
|
486
|
-
classesToRemove.push(highlightRowClassName);
|
487
|
-
}
|
488
|
-
if (highlightColumnClassName && !classesToRemove.includes(highlightColumnClassName)) {
|
489
|
-
classesToRemove.push(highlightColumnClassName);
|
490
|
-
}
|
491
|
-
}
|
492
|
-
const additionalClassesToRemove = wtSettings.getSetting('onBeforeRemoveCellClassNames');
|
493
|
-
if (Array.isArray(additionalClassesToRemove)) {
|
494
|
-
for (let i = 0; i < additionalClassesToRemove.length; i++) {
|
495
|
-
classesToRemove.push(additionalClassesToRemove[i]);
|
496
|
-
}
|
497
|
-
}
|
498
|
-
const classesToRemoveLength = classesToRemove.length;
|
499
|
-
for (let i = 0; i < classesToRemoveLength; i++) {
|
500
|
-
// there was no rerender, so we need to remove classNames by ourselves
|
501
|
-
this.removeClassFromCells(classesToRemove[i]);
|
502
|
-
}
|
503
|
-
}
|
504
|
-
for (let i = 0; i < len; i++) {
|
505
|
-
highlights[i].draw(this.facadeGetter(), fastDraw);
|
506
|
-
}
|
507
|
-
}
|
508
|
-
|
509
440
|
/**
|
510
441
|
* Get cell element at coords.
|
511
442
|
* Negative coords.row or coords.col are used to retrieve header cells. If there are multiple header levels, the
|
@@ -627,14 +558,14 @@ class Table {
|
|
627
558
|
*/
|
628
559
|
getRowHeader(row) {
|
629
560
|
let level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
630
|
-
if (this.columnFilter.sourceColumnToVisibleRowHeadedColumn(0) === 0) {
|
631
|
-
return;
|
632
|
-
}
|
633
561
|
const rowHeadersCount = this.wtSettings.getSetting('rowHeaders').length;
|
634
562
|
if (level >= rowHeadersCount) {
|
635
563
|
return;
|
636
564
|
}
|
637
|
-
const
|
565
|
+
const renderedRow = this.rowFilter.sourceToRendered(row);
|
566
|
+
const visibleRow = renderedRow < 0 ? this.rowFilter.sourceRowToVisibleColHeadedRow(row) : renderedRow;
|
567
|
+
const parentElement = renderedRow < 0 ? this.THEAD : this.TBODY;
|
568
|
+
const TR = parentElement.childNodes[visibleRow];
|
638
569
|
return TR === null || TR === void 0 ? void 0 : TR.childNodes[level];
|
639
570
|
}
|
640
571
|
|
@@ -645,9 +576,6 @@ class Table {
|
|
645
576
|
* @returns {HTMLTableCellElement[]}
|
646
577
|
*/
|
647
578
|
getRowHeaders(row) {
|
648
|
-
if (this.columnFilter.sourceColumnToVisibleRowHeadedColumn(0) === 0) {
|
649
|
-
return [];
|
650
|
-
}
|
651
579
|
const THs = [];
|
652
580
|
const rowHeadersCount = this.wtSettings.getSetting('rowHeaders').length;
|
653
581
|
for (let renderedRowIndex = 0; renderedRowIndex < rowHeadersCount; renderedRowIndex++) {
|
@@ -1,9 +1,9 @@
|
|
1
|
-
import "core-js/modules/es.array.push.js";
|
2
1
|
import "core-js/modules/es.error.cause.js";
|
2
|
+
import "core-js/modules/es.array.push.js";
|
3
3
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
4
4
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
5
5
|
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
6
|
-
import { hasClass, index, offset,
|
6
|
+
import { hasClass, index, offset, removeTextNodes, overlayContainsElement, closest, outerHeight, outerWidth, innerHeight, isVisible } from "../../../helpers/dom/element.mjs";
|
7
7
|
import { isFunction } from "../../../helpers/function.mjs";
|
8
8
|
import ColumnFilter from "./filter/column.mjs";
|
9
9
|
import RowFilter from "./filter/row.mjs";
|
@@ -341,7 +341,7 @@ class Table {
|
|
341
341
|
wtOverlays.refreshAll(); // `refreshAll()` internally already calls `refreshSelections()` method
|
342
342
|
wtOverlays.adjustElementsSize();
|
343
343
|
} else {
|
344
|
-
this.
|
344
|
+
this.dataAccessObject.selectionManager.setActiveOverlay(this.facadeGetter()).render(runFastDraw);
|
345
345
|
}
|
346
346
|
if (syncScroll) {
|
347
347
|
wtOverlays.syncScrollWithMaster();
|
@@ -433,75 +433,6 @@ class Table {
|
|
433
433
|
}
|
434
434
|
}
|
435
435
|
|
436
|
-
/**
|
437
|
-
* @param {string} className The CSS class name to remove from the table cells.
|
438
|
-
*/
|
439
|
-
removeClassFromCells(className) {
|
440
|
-
const nodes = this.TABLE.querySelectorAll(`.${className}`);
|
441
|
-
for (let i = 0, len = nodes.length; i < len; i++) {
|
442
|
-
removeClass(nodes[i], className);
|
443
|
-
}
|
444
|
-
}
|
445
|
-
|
446
|
-
/**
|
447
|
-
* Refresh the table selection by re-rendering Selection instances connected with that instance.
|
448
|
-
*
|
449
|
-
* @param {boolean} fastDraw If fast drawing is enabled than additionally className clearing is applied.
|
450
|
-
*/
|
451
|
-
refreshSelections(fastDraw) {
|
452
|
-
const {
|
453
|
-
wtSettings
|
454
|
-
} = this;
|
455
|
-
const {
|
456
|
-
selections
|
457
|
-
} = this.dataAccessObject;
|
458
|
-
if (!selections) {
|
459
|
-
return;
|
460
|
-
}
|
461
|
-
const highlights = Array.from(selections);
|
462
|
-
const len = highlights.length;
|
463
|
-
if (fastDraw) {
|
464
|
-
const classesToRemove = [];
|
465
|
-
for (let i = 0; i < len; i++) {
|
466
|
-
const {
|
467
|
-
highlightHeaderClassName,
|
468
|
-
highlightRowClassName,
|
469
|
-
highlightColumnClassName
|
470
|
-
} = highlights[i].settings;
|
471
|
-
const classNames = highlights[i].classNames;
|
472
|
-
const classNamesLength = classNames.length;
|
473
|
-
for (let j = 0; j < classNamesLength; j++) {
|
474
|
-
if (!classesToRemove.includes(classNames[j])) {
|
475
|
-
classesToRemove.push(classNames[j]);
|
476
|
-
}
|
477
|
-
}
|
478
|
-
if (highlightHeaderClassName && !classesToRemove.includes(highlightHeaderClassName)) {
|
479
|
-
classesToRemove.push(highlightHeaderClassName);
|
480
|
-
}
|
481
|
-
if (highlightRowClassName && !classesToRemove.includes(highlightRowClassName)) {
|
482
|
-
classesToRemove.push(highlightRowClassName);
|
483
|
-
}
|
484
|
-
if (highlightColumnClassName && !classesToRemove.includes(highlightColumnClassName)) {
|
485
|
-
classesToRemove.push(highlightColumnClassName);
|
486
|
-
}
|
487
|
-
}
|
488
|
-
const additionalClassesToRemove = wtSettings.getSetting('onBeforeRemoveCellClassNames');
|
489
|
-
if (Array.isArray(additionalClassesToRemove)) {
|
490
|
-
for (let i = 0; i < additionalClassesToRemove.length; i++) {
|
491
|
-
classesToRemove.push(additionalClassesToRemove[i]);
|
492
|
-
}
|
493
|
-
}
|
494
|
-
const classesToRemoveLength = classesToRemove.length;
|
495
|
-
for (let i = 0; i < classesToRemoveLength; i++) {
|
496
|
-
// there was no rerender, so we need to remove classNames by ourselves
|
497
|
-
this.removeClassFromCells(classesToRemove[i]);
|
498
|
-
}
|
499
|
-
}
|
500
|
-
for (let i = 0; i < len; i++) {
|
501
|
-
highlights[i].draw(this.facadeGetter(), fastDraw);
|
502
|
-
}
|
503
|
-
}
|
504
|
-
|
505
436
|
/**
|
506
437
|
* Get cell element at coords.
|
507
438
|
* Negative coords.row or coords.col are used to retrieve header cells. If there are multiple header levels, the
|
@@ -623,14 +554,14 @@ class Table {
|
|
623
554
|
*/
|
624
555
|
getRowHeader(row) {
|
625
556
|
let level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
626
|
-
if (this.columnFilter.sourceColumnToVisibleRowHeadedColumn(0) === 0) {
|
627
|
-
return;
|
628
|
-
}
|
629
557
|
const rowHeadersCount = this.wtSettings.getSetting('rowHeaders').length;
|
630
558
|
if (level >= rowHeadersCount) {
|
631
559
|
return;
|
632
560
|
}
|
633
|
-
const
|
561
|
+
const renderedRow = this.rowFilter.sourceToRendered(row);
|
562
|
+
const visibleRow = renderedRow < 0 ? this.rowFilter.sourceRowToVisibleColHeadedRow(row) : renderedRow;
|
563
|
+
const parentElement = renderedRow < 0 ? this.THEAD : this.TBODY;
|
564
|
+
const TR = parentElement.childNodes[visibleRow];
|
634
565
|
return TR === null || TR === void 0 ? void 0 : TR.childNodes[level];
|
635
566
|
}
|
636
567
|
|
@@ -641,9 +572,6 @@ class Table {
|
|
641
572
|
* @returns {HTMLTableCellElement[]}
|
642
573
|
*/
|
643
574
|
getRowHeaders(row) {
|
644
|
-
if (this.columnFilter.sourceColumnToVisibleRowHeadedColumn(0) === 0) {
|
645
|
-
return [];
|
646
|
-
}
|
647
575
|
const THs = [];
|
648
576
|
const rowHeadersCount = this.wtSettings.getSetting('rowHeaders').length;
|
649
577
|
for (let renderedRowIndex = 0; renderedRowIndex < rowHeadersCount; renderedRowIndex++) {
|
package/base.js
CHANGED
@@ -43,8 +43,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
|
|
43
43
|
Handsontable.CellCoords = _src.CellCoords;
|
44
44
|
Handsontable.CellRange = _src.CellRange;
|
45
45
|
Handsontable.packageName = 'handsontable';
|
46
|
-
Handsontable.buildDate = "09/08/2023 12:
|
47
|
-
Handsontable.version = "0.0.0-next-
|
46
|
+
Handsontable.buildDate = "09/08/2023 12:40:58";
|
47
|
+
Handsontable.version = "0.0.0-next-be16baf-20230809";
|
48
48
|
Handsontable.languages = {
|
49
49
|
dictionaryKeys: _registry.dictionaryKeys,
|
50
50
|
getLanguageDictionary: _registry.getLanguageDictionary,
|
package/base.mjs
CHANGED
@@ -35,8 +35,8 @@ Handsontable.hooks = Hooks.getSingleton();
|
|
35
35
|
Handsontable.CellCoords = CellCoords;
|
36
36
|
Handsontable.CellRange = CellRange;
|
37
37
|
Handsontable.packageName = 'handsontable';
|
38
|
-
Handsontable.buildDate = "09/08/2023 12:
|
39
|
-
Handsontable.version = "0.0.0-next-
|
38
|
+
Handsontable.buildDate = "09/08/2023 12:41:07";
|
39
|
+
Handsontable.version = "0.0.0-next-be16baf-20230809";
|
40
40
|
Handsontable.languages = {
|
41
41
|
dictionaryKeys,
|
42
42
|
getLanguageDictionary,
|
package/common.d.ts
CHANGED
@@ -12,7 +12,7 @@ export type CellValue = any;
|
|
12
12
|
/**
|
13
13
|
* A cell change represented by `[row, column, prevValue, nextValue]`.
|
14
14
|
*/
|
15
|
-
export type CellChange = [number, string | number
|
15
|
+
export type CellChange = [number, string | number, CellValue, CellValue];
|
16
16
|
|
17
17
|
/**
|
18
18
|
* A row object, one of the two ways to supply data to the table, the alternative being an array of values.
|
@@ -0,0 +1,58 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.installFocusDetector = installFocusDetector;
|
5
|
+
/**
|
6
|
+
* Installs a focus detector module. The module appends two input elements into the DOM side by side.
|
7
|
+
* When the first input is focused, then it means that a user entered to the component using the TAB key
|
8
|
+
* from the element above. When the second input is focused, a user enters to the component from
|
9
|
+
* the element below the table. Each action, once detected, triggers the specific hook.
|
10
|
+
*
|
11
|
+
* @param {Handsontable} hot The Handsontable instance.
|
12
|
+
* @param {{ onFocusFromTop: Function, onFocusFromBottom: Function }} hooks An object with defined callbacks to call.
|
13
|
+
* @returns {{ activate: Function, deactivate: Function }}
|
14
|
+
*/
|
15
|
+
function installFocusDetector(hot) {
|
16
|
+
let hooks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
17
|
+
const rootDocument = hot.rootDocument;
|
18
|
+
const rootElement = hot.rootElement;
|
19
|
+
const inputTrapTop = createInputElement(rootDocument);
|
20
|
+
const inputTrapBottom = createInputElement(rootDocument);
|
21
|
+
inputTrapTop.addEventListener('focus', () => hooks === null || hooks === void 0 ? void 0 : hooks.onFocusFromTop());
|
22
|
+
inputTrapBottom.addEventListener('focus', () => hooks === null || hooks === void 0 ? void 0 : hooks.onFocusFromBottom());
|
23
|
+
rootElement.firstChild.before(inputTrapTop);
|
24
|
+
rootElement.lastChild.after(inputTrapBottom);
|
25
|
+
return {
|
26
|
+
/**
|
27
|
+
* Activates the detector by resetting the tabIndex of the input elements.
|
28
|
+
*/
|
29
|
+
activate() {
|
30
|
+
hot._registerTimeout(() => {
|
31
|
+
inputTrapTop.tabIndex = 0;
|
32
|
+
inputTrapBottom.tabIndex = 0;
|
33
|
+
}, 10);
|
34
|
+
},
|
35
|
+
/**
|
36
|
+
* Deactivates the detector by setting tabIndex to -1.
|
37
|
+
*/
|
38
|
+
deactivate() {
|
39
|
+
hot._registerTimeout(() => {
|
40
|
+
inputTrapTop.tabIndex = -1;
|
41
|
+
inputTrapBottom.tabIndex = -1;
|
42
|
+
}, 10);
|
43
|
+
}
|
44
|
+
};
|
45
|
+
}
|
46
|
+
|
47
|
+
/**
|
48
|
+
* Creates a new HTML input element.
|
49
|
+
*
|
50
|
+
* @param {Document} rootDocument The owner document element.
|
51
|
+
* @returns {HTMLInputElement}
|
52
|
+
*/
|
53
|
+
function createInputElement(rootDocument) {
|
54
|
+
const input = rootDocument.createElement('input');
|
55
|
+
input.type = 'text';
|
56
|
+
input.classList.add('htFocusCatcher');
|
57
|
+
return input;
|
58
|
+
}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
/**
|
2
|
+
* Installs a focus detector module. The module appends two input elements into the DOM side by side.
|
3
|
+
* When the first input is focused, then it means that a user entered to the component using the TAB key
|
4
|
+
* from the element above. When the second input is focused, a user enters to the component from
|
5
|
+
* the element below the table. Each action, once detected, triggers the specific hook.
|
6
|
+
*
|
7
|
+
* @param {Handsontable} hot The Handsontable instance.
|
8
|
+
* @param {{ onFocusFromTop: Function, onFocusFromBottom: Function }} hooks An object with defined callbacks to call.
|
9
|
+
* @returns {{ activate: Function, deactivate: Function }}
|
10
|
+
*/
|
11
|
+
export function installFocusDetector(hot) {
|
12
|
+
let hooks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
13
|
+
const rootDocument = hot.rootDocument;
|
14
|
+
const rootElement = hot.rootElement;
|
15
|
+
const inputTrapTop = createInputElement(rootDocument);
|
16
|
+
const inputTrapBottom = createInputElement(rootDocument);
|
17
|
+
inputTrapTop.addEventListener('focus', () => hooks === null || hooks === void 0 ? void 0 : hooks.onFocusFromTop());
|
18
|
+
inputTrapBottom.addEventListener('focus', () => hooks === null || hooks === void 0 ? void 0 : hooks.onFocusFromBottom());
|
19
|
+
rootElement.firstChild.before(inputTrapTop);
|
20
|
+
rootElement.lastChild.after(inputTrapBottom);
|
21
|
+
return {
|
22
|
+
/**
|
23
|
+
* Activates the detector by resetting the tabIndex of the input elements.
|
24
|
+
*/
|
25
|
+
activate() {
|
26
|
+
hot._registerTimeout(() => {
|
27
|
+
inputTrapTop.tabIndex = 0;
|
28
|
+
inputTrapBottom.tabIndex = 0;
|
29
|
+
}, 10);
|
30
|
+
},
|
31
|
+
/**
|
32
|
+
* Deactivates the detector by setting tabIndex to -1.
|
33
|
+
*/
|
34
|
+
deactivate() {
|
35
|
+
hot._registerTimeout(() => {
|
36
|
+
inputTrapTop.tabIndex = -1;
|
37
|
+
inputTrapBottom.tabIndex = -1;
|
38
|
+
}, 10);
|
39
|
+
}
|
40
|
+
};
|
41
|
+
}
|
42
|
+
|
43
|
+
/**
|
44
|
+
* Creates a new HTML input element.
|
45
|
+
*
|
46
|
+
* @param {Document} rootDocument The owner document element.
|
47
|
+
* @returns {HTMLInputElement}
|
48
|
+
*/
|
49
|
+
function createInputElement(rootDocument) {
|
50
|
+
const input = rootDocument.createElement('input');
|
51
|
+
input.type = 'text';
|
52
|
+
input.classList.add('htFocusCatcher');
|
53
|
+
return input;
|
54
|
+
}
|
@@ -0,0 +1,142 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.installFocusCatcher = installFocusCatcher;
|
5
|
+
var _shortcutContexts = require("../../shortcutContexts");
|
6
|
+
var _focusDetector = require("./focusDetector");
|
7
|
+
/**
|
8
|
+
* Installs a focus catcher module. The module observes when the table is focused and depending on
|
9
|
+
* from the which side it was focused on it selects a specified cell or releases the TAB navigation
|
10
|
+
* to the browser.
|
11
|
+
*
|
12
|
+
* @param {Core} hot The Handsontable instance.
|
13
|
+
*/
|
14
|
+
function installFocusCatcher(hot) {
|
15
|
+
let recentlyAddedFocusCoords;
|
16
|
+
const {
|
17
|
+
activate,
|
18
|
+
deactivate
|
19
|
+
} = (0, _focusDetector.installFocusDetector)(hot, {
|
20
|
+
onFocusFromTop() {
|
21
|
+
var _recentlyAddedFocusCo;
|
22
|
+
const mostTopStartCoords = (_recentlyAddedFocusCo = recentlyAddedFocusCoords) !== null && _recentlyAddedFocusCo !== void 0 ? _recentlyAddedFocusCo : getMostTopStartPosition(hot);
|
23
|
+
if (mostTopStartCoords) {
|
24
|
+
hot.runHooks('modifyFocusOnTabNavigation', 'from_above', mostTopStartCoords);
|
25
|
+
hot.selectCell(mostTopStartCoords.row, mostTopStartCoords.col);
|
26
|
+
}
|
27
|
+
hot.listen();
|
28
|
+
},
|
29
|
+
onFocusFromBottom() {
|
30
|
+
var _recentlyAddedFocusCo2;
|
31
|
+
const mostBottomEndCoords = (_recentlyAddedFocusCo2 = recentlyAddedFocusCoords) !== null && _recentlyAddedFocusCo2 !== void 0 ? _recentlyAddedFocusCo2 : getMostBottomEndPosition(hot);
|
32
|
+
if (mostBottomEndCoords) {
|
33
|
+
hot.runHooks('modifyFocusOnTabNavigation', 'from_below', mostBottomEndCoords);
|
34
|
+
hot.selectCell(mostBottomEndCoords.row, mostBottomEndCoords.col);
|
35
|
+
}
|
36
|
+
hot.listen();
|
37
|
+
}
|
38
|
+
});
|
39
|
+
hot.addHook('afterListen', () => deactivate());
|
40
|
+
hot.addHook('afterUnlisten', () => activate());
|
41
|
+
hot.addHook('afterSelection', () => {
|
42
|
+
var _hot$getSelectedRange;
|
43
|
+
recentlyAddedFocusCoords = (_hot$getSelectedRange = hot.getSelectedRangeLast()) === null || _hot$getSelectedRange === void 0 ? void 0 : _hot$getSelectedRange.highlight;
|
44
|
+
});
|
45
|
+
hot.getShortcutManager().getContext('grid').addShortcut({
|
46
|
+
keys: [['Tab'], ['Shift', 'Tab']],
|
47
|
+
callback: event => {
|
48
|
+
var _hot$getSelectedRange2;
|
49
|
+
const {
|
50
|
+
disableTabNavigation,
|
51
|
+
autoWrapRow
|
52
|
+
} = hot.getSettings();
|
53
|
+
if (disableTabNavigation) {
|
54
|
+
hot.deselectCell();
|
55
|
+
hot.unlisten();
|
56
|
+
return false;
|
57
|
+
}
|
58
|
+
const isSelected = hot.selection.isSelected();
|
59
|
+
const highlight = (_hot$getSelectedRange2 = hot.getSelectedRangeLast()) === null || _hot$getSelectedRange2 === void 0 ? void 0 : _hot$getSelectedRange2.highlight;
|
60
|
+
const mostTopStartCoords = getMostTopStartPosition(hot);
|
61
|
+
const mostBottomEndCoords = getMostBottomEndPosition(hot);
|
62
|
+
|
63
|
+
// For disabled `autoWrapRow` option set the row to the same position as the currently selected row.
|
64
|
+
if (!autoWrapRow) {
|
65
|
+
mostTopStartCoords.row = highlight.row;
|
66
|
+
mostBottomEndCoords.row = highlight.row;
|
67
|
+
}
|
68
|
+
if (event.shiftKey && (!isSelected || highlight.isEqual(mostTopStartCoords)) || !event.shiftKey && (!isSelected || highlight.isEqual(mostBottomEndCoords))) {
|
69
|
+
hot.deselectCell();
|
70
|
+
hot.unlisten();
|
71
|
+
return false;
|
72
|
+
}
|
73
|
+
return true;
|
74
|
+
},
|
75
|
+
runOnlyIf: () => !hot.getSettings().minSpareCols,
|
76
|
+
preventDefault: false,
|
77
|
+
stopPropagation: false,
|
78
|
+
position: 'before',
|
79
|
+
relativeToGroup: _shortcutContexts.GRID_GROUP,
|
80
|
+
group: 'focusCatcher'
|
81
|
+
});
|
82
|
+
}
|
83
|
+
|
84
|
+
/**
|
85
|
+
* Gets the coordinates of the most top-start cell or header (depends on the table settings and its size).
|
86
|
+
*
|
87
|
+
* @param {Core} hot The Handsontable instance.
|
88
|
+
* @returns {CellCoords|null}
|
89
|
+
*/
|
90
|
+
function getMostTopStartPosition(hot) {
|
91
|
+
const {
|
92
|
+
rowIndexMapper,
|
93
|
+
columnIndexMapper
|
94
|
+
} = hot;
|
95
|
+
const {
|
96
|
+
navigableHeaders
|
97
|
+
} = hot.getSettings();
|
98
|
+
let topRow = navigableHeaders && hot.countColHeaders() > 0 ? -hot.countColHeaders() : 0;
|
99
|
+
let startColumn = navigableHeaders && hot.countRowHeaders() > 0 ? -hot.countRowHeaders() : 0;
|
100
|
+
if (topRow === 0) {
|
101
|
+
topRow = rowIndexMapper.getVisualFromRenderableIndex(topRow);
|
102
|
+
}
|
103
|
+
if (startColumn === 0) {
|
104
|
+
startColumn = columnIndexMapper.getVisualFromRenderableIndex(startColumn);
|
105
|
+
}
|
106
|
+
if (topRow === null || startColumn === null) {
|
107
|
+
return null;
|
108
|
+
}
|
109
|
+
return hot._createCellCoords(topRow, startColumn);
|
110
|
+
}
|
111
|
+
|
112
|
+
/**
|
113
|
+
* Gets the coordinates of the most bottom-end cell or header (depends on the table settings and its size).
|
114
|
+
*
|
115
|
+
* @param {Core} hot The Handsontable instance.
|
116
|
+
* @returns {CellCoords|null}
|
117
|
+
*/
|
118
|
+
function getMostBottomEndPosition(hot) {
|
119
|
+
var _rowIndexMapper$getVi, _columnIndexMapper$ge;
|
120
|
+
const {
|
121
|
+
rowIndexMapper,
|
122
|
+
columnIndexMapper
|
123
|
+
} = hot;
|
124
|
+
const {
|
125
|
+
navigableHeaders
|
126
|
+
} = hot.getSettings();
|
127
|
+
let bottomRow = rowIndexMapper.getRenderableIndexesLength() - 1;
|
128
|
+
let endColumn = columnIndexMapper.getRenderableIndexesLength() - 1;
|
129
|
+
if (bottomRow < 0) {
|
130
|
+
if (!navigableHeaders || hot.countColHeaders() === 0) {
|
131
|
+
return null;
|
132
|
+
}
|
133
|
+
bottomRow = -1;
|
134
|
+
}
|
135
|
+
if (endColumn < 0) {
|
136
|
+
if (!navigableHeaders || hot.countColHeaders() === 0) {
|
137
|
+
return null;
|
138
|
+
}
|
139
|
+
endColumn = -1;
|
140
|
+
}
|
141
|
+
return hot._createCellCoords((_rowIndexMapper$getVi = rowIndexMapper.getVisualFromRenderableIndex(bottomRow)) !== null && _rowIndexMapper$getVi !== void 0 ? _rowIndexMapper$getVi : bottomRow, (_columnIndexMapper$ge = columnIndexMapper.getVisualFromRenderableIndex(endColumn)) !== null && _columnIndexMapper$ge !== void 0 ? _columnIndexMapper$ge : endColumn);
|
142
|
+
}
|
@@ -0,0 +1,138 @@
|
|
1
|
+
import { GRID_GROUP } from "../../shortcutContexts/index.mjs";
|
2
|
+
import { installFocusDetector } from "./focusDetector.mjs";
|
3
|
+
/**
|
4
|
+
* Installs a focus catcher module. The module observes when the table is focused and depending on
|
5
|
+
* from the which side it was focused on it selects a specified cell or releases the TAB navigation
|
6
|
+
* to the browser.
|
7
|
+
*
|
8
|
+
* @param {Core} hot The Handsontable instance.
|
9
|
+
*/
|
10
|
+
export function installFocusCatcher(hot) {
|
11
|
+
let recentlyAddedFocusCoords;
|
12
|
+
const {
|
13
|
+
activate,
|
14
|
+
deactivate
|
15
|
+
} = installFocusDetector(hot, {
|
16
|
+
onFocusFromTop() {
|
17
|
+
var _recentlyAddedFocusCo;
|
18
|
+
const mostTopStartCoords = (_recentlyAddedFocusCo = recentlyAddedFocusCoords) !== null && _recentlyAddedFocusCo !== void 0 ? _recentlyAddedFocusCo : getMostTopStartPosition(hot);
|
19
|
+
if (mostTopStartCoords) {
|
20
|
+
hot.runHooks('modifyFocusOnTabNavigation', 'from_above', mostTopStartCoords);
|
21
|
+
hot.selectCell(mostTopStartCoords.row, mostTopStartCoords.col);
|
22
|
+
}
|
23
|
+
hot.listen();
|
24
|
+
},
|
25
|
+
onFocusFromBottom() {
|
26
|
+
var _recentlyAddedFocusCo2;
|
27
|
+
const mostBottomEndCoords = (_recentlyAddedFocusCo2 = recentlyAddedFocusCoords) !== null && _recentlyAddedFocusCo2 !== void 0 ? _recentlyAddedFocusCo2 : getMostBottomEndPosition(hot);
|
28
|
+
if (mostBottomEndCoords) {
|
29
|
+
hot.runHooks('modifyFocusOnTabNavigation', 'from_below', mostBottomEndCoords);
|
30
|
+
hot.selectCell(mostBottomEndCoords.row, mostBottomEndCoords.col);
|
31
|
+
}
|
32
|
+
hot.listen();
|
33
|
+
}
|
34
|
+
});
|
35
|
+
hot.addHook('afterListen', () => deactivate());
|
36
|
+
hot.addHook('afterUnlisten', () => activate());
|
37
|
+
hot.addHook('afterSelection', () => {
|
38
|
+
var _hot$getSelectedRange;
|
39
|
+
recentlyAddedFocusCoords = (_hot$getSelectedRange = hot.getSelectedRangeLast()) === null || _hot$getSelectedRange === void 0 ? void 0 : _hot$getSelectedRange.highlight;
|
40
|
+
});
|
41
|
+
hot.getShortcutManager().getContext('grid').addShortcut({
|
42
|
+
keys: [['Tab'], ['Shift', 'Tab']],
|
43
|
+
callback: event => {
|
44
|
+
var _hot$getSelectedRange2;
|
45
|
+
const {
|
46
|
+
disableTabNavigation,
|
47
|
+
autoWrapRow
|
48
|
+
} = hot.getSettings();
|
49
|
+
if (disableTabNavigation) {
|
50
|
+
hot.deselectCell();
|
51
|
+
hot.unlisten();
|
52
|
+
return false;
|
53
|
+
}
|
54
|
+
const isSelected = hot.selection.isSelected();
|
55
|
+
const highlight = (_hot$getSelectedRange2 = hot.getSelectedRangeLast()) === null || _hot$getSelectedRange2 === void 0 ? void 0 : _hot$getSelectedRange2.highlight;
|
56
|
+
const mostTopStartCoords = getMostTopStartPosition(hot);
|
57
|
+
const mostBottomEndCoords = getMostBottomEndPosition(hot);
|
58
|
+
|
59
|
+
// For disabled `autoWrapRow` option set the row to the same position as the currently selected row.
|
60
|
+
if (!autoWrapRow) {
|
61
|
+
mostTopStartCoords.row = highlight.row;
|
62
|
+
mostBottomEndCoords.row = highlight.row;
|
63
|
+
}
|
64
|
+
if (event.shiftKey && (!isSelected || highlight.isEqual(mostTopStartCoords)) || !event.shiftKey && (!isSelected || highlight.isEqual(mostBottomEndCoords))) {
|
65
|
+
hot.deselectCell();
|
66
|
+
hot.unlisten();
|
67
|
+
return false;
|
68
|
+
}
|
69
|
+
return true;
|
70
|
+
},
|
71
|
+
runOnlyIf: () => !hot.getSettings().minSpareCols,
|
72
|
+
preventDefault: false,
|
73
|
+
stopPropagation: false,
|
74
|
+
position: 'before',
|
75
|
+
relativeToGroup: GRID_GROUP,
|
76
|
+
group: 'focusCatcher'
|
77
|
+
});
|
78
|
+
}
|
79
|
+
|
80
|
+
/**
|
81
|
+
* Gets the coordinates of the most top-start cell or header (depends on the table settings and its size).
|
82
|
+
*
|
83
|
+
* @param {Core} hot The Handsontable instance.
|
84
|
+
* @returns {CellCoords|null}
|
85
|
+
*/
|
86
|
+
function getMostTopStartPosition(hot) {
|
87
|
+
const {
|
88
|
+
rowIndexMapper,
|
89
|
+
columnIndexMapper
|
90
|
+
} = hot;
|
91
|
+
const {
|
92
|
+
navigableHeaders
|
93
|
+
} = hot.getSettings();
|
94
|
+
let topRow = navigableHeaders && hot.countColHeaders() > 0 ? -hot.countColHeaders() : 0;
|
95
|
+
let startColumn = navigableHeaders && hot.countRowHeaders() > 0 ? -hot.countRowHeaders() : 0;
|
96
|
+
if (topRow === 0) {
|
97
|
+
topRow = rowIndexMapper.getVisualFromRenderableIndex(topRow);
|
98
|
+
}
|
99
|
+
if (startColumn === 0) {
|
100
|
+
startColumn = columnIndexMapper.getVisualFromRenderableIndex(startColumn);
|
101
|
+
}
|
102
|
+
if (topRow === null || startColumn === null) {
|
103
|
+
return null;
|
104
|
+
}
|
105
|
+
return hot._createCellCoords(topRow, startColumn);
|
106
|
+
}
|
107
|
+
|
108
|
+
/**
|
109
|
+
* Gets the coordinates of the most bottom-end cell or header (depends on the table settings and its size).
|
110
|
+
*
|
111
|
+
* @param {Core} hot The Handsontable instance.
|
112
|
+
* @returns {CellCoords|null}
|
113
|
+
*/
|
114
|
+
function getMostBottomEndPosition(hot) {
|
115
|
+
var _rowIndexMapper$getVi, _columnIndexMapper$ge;
|
116
|
+
const {
|
117
|
+
rowIndexMapper,
|
118
|
+
columnIndexMapper
|
119
|
+
} = hot;
|
120
|
+
const {
|
121
|
+
navigableHeaders
|
122
|
+
} = hot.getSettings();
|
123
|
+
let bottomRow = rowIndexMapper.getRenderableIndexesLength() - 1;
|
124
|
+
let endColumn = columnIndexMapper.getRenderableIndexesLength() - 1;
|
125
|
+
if (bottomRow < 0) {
|
126
|
+
if (!navigableHeaders || hot.countColHeaders() === 0) {
|
127
|
+
return null;
|
128
|
+
}
|
129
|
+
bottomRow = -1;
|
130
|
+
}
|
131
|
+
if (endColumn < 0) {
|
132
|
+
if (!navigableHeaders || hot.countColHeaders() === 0) {
|
133
|
+
return null;
|
134
|
+
}
|
135
|
+
endColumn = -1;
|
136
|
+
}
|
137
|
+
return hot._createCellCoords((_rowIndexMapper$getVi = rowIndexMapper.getVisualFromRenderableIndex(bottomRow)) !== null && _rowIndexMapper$getVi !== void 0 ? _rowIndexMapper$getVi : bottomRow, (_columnIndexMapper$ge = columnIndexMapper.getVisualFromRenderableIndex(endColumn)) !== null && _columnIndexMapper$ge !== void 0 ? _columnIndexMapper$ge : endColumn);
|
138
|
+
}
|
package/core/index.js
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
var _focusCatcher = require("./focusCatcher");
|
5
|
+
Object.keys(_focusCatcher).forEach(function (key) {
|
6
|
+
if (key === "default" || key === "__esModule") return;
|
7
|
+
if (key in exports && exports[key] === _focusCatcher[key]) return;
|
8
|
+
exports[key] = _focusCatcher[key];
|
9
|
+
});
|