handsontable 13.1.0 → 14.0.0-next-d97b156-20231027
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/3rdparty/walkontable/src/calculator/constants.js +3 -6
- package/3rdparty/walkontable/src/calculator/viewportColumns.js +1 -2
- package/3rdparty/walkontable/src/calculator/viewportRows.js +1 -2
- package/3rdparty/walkontable/src/cell/coords.d.ts +8 -1
- package/3rdparty/walkontable/src/cell/coords.js +81 -13
- package/3rdparty/walkontable/src/cell/coords.mjs +80 -11
- package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
- package/3rdparty/walkontable/src/cell/range.js +39 -9
- 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 +13 -12
- package/3rdparty/walkontable/src/event.mjs +12 -10
- package/3rdparty/walkontable/src/facade/core.js +2 -2
- package/3rdparty/walkontable/src/facade/core.mjs +2 -2
- package/3rdparty/walkontable/src/filter/column.js +1 -2
- package/3rdparty/walkontable/src/filter/row.js +1 -2
- package/3rdparty/walkontable/src/index.js +12 -4
- package/3rdparty/walkontable/src/index.mjs +2 -2
- package/3rdparty/walkontable/src/overlay/_base.js +13 -2
- package/3rdparty/walkontable/src/overlay/_base.mjs +14 -3
- package/3rdparty/walkontable/src/overlay/constants.js +7 -14
- 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/overlays.js +1 -2
- package/3rdparty/walkontable/src/renderer/cells.js +10 -0
- package/3rdparty/walkontable/src/renderer/cells.mjs +11 -1
- package/3rdparty/walkontable/src/renderer/columnHeaders.js +13 -0
- package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +14 -1
- package/3rdparty/walkontable/src/renderer/rowHeaders.js +8 -0
- package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +8 -0
- package/3rdparty/walkontable/src/renderer/rows.js +13 -0
- package/3rdparty/walkontable/src/renderer/rows.mjs +13 -0
- package/3rdparty/walkontable/src/renderer/table.js +9 -0
- package/3rdparty/walkontable/src/renderer/table.mjs +9 -0
- package/3rdparty/walkontable/src/scroll.js +3 -2
- package/3rdparty/walkontable/src/scroll.mjs +2 -0
- package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +8 -14
- package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
- package/3rdparty/walkontable/src/selection/border/constants.js +15 -0
- package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
- package/3rdparty/walkontable/src/selection/constants.js +54 -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 +274 -0
- package/3rdparty/walkontable/src/selection/manager.mjs +269 -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 +100 -0
- package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
- package/3rdparty/walkontable/src/settings.js +13 -4
- package/3rdparty/walkontable/src/settings.mjs +13 -4
- package/3rdparty/walkontable/src/table/bottom.js +1 -2
- package/3rdparty/walkontable/src/table/bottomInlineStartCorner.js +1 -2
- package/3rdparty/walkontable/src/table/inlineStart.js +1 -2
- package/3rdparty/walkontable/src/table/master.js +3 -6
- package/3rdparty/walkontable/src/table/master.mjs +2 -4
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +10 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +10 -2
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +10 -2
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +10 -2
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +10 -2
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
- package/3rdparty/walkontable/src/table/top.js +1 -2
- package/3rdparty/walkontable/src/table/topInlineStartCorner.js +1 -2
- package/3rdparty/walkontable/src/table.js +20 -80
- package/3rdparty/walkontable/src/table.mjs +20 -79
- package/3rdparty/walkontable/src/utils/orderView/constants.js +3 -6
- package/3rdparty/walkontable/src/viewport.js +1 -2
- package/CHANGELOG.md +51 -0
- package/base.js +3 -4
- package/base.mjs +2 -2
- package/cellTypes/autocompleteType/autocompleteType.js +3 -5
- package/cellTypes/checkboxType/checkboxType.js +3 -5
- package/cellTypes/dateType/dateType.d.ts +3 -3
- package/cellTypes/dateType/dateType.js +5 -7
- package/cellTypes/dateType/dateType.mjs +2 -2
- package/cellTypes/dropdownType/dropdownType.js +3 -5
- package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
- package/cellTypes/handsontableType/handsontableType.js +5 -7
- package/cellTypes/handsontableType/handsontableType.mjs +2 -2
- package/cellTypes/index.d.ts +3 -0
- package/cellTypes/index.js +4 -0
- package/cellTypes/index.mjs +3 -1
- package/cellTypes/numericType/numericType.js +3 -5
- package/cellTypes/passwordType/passwordType.js +3 -5
- package/cellTypes/selectType/index.d.ts +1 -0
- package/cellTypes/selectType/index.js +6 -0
- package/cellTypes/selectType/index.mjs +1 -0
- package/cellTypes/selectType/selectType.d.ts +14 -0
- package/cellTypes/selectType/selectType.js +11 -0
- package/cellTypes/selectType/selectType.mjs +8 -0
- package/cellTypes/textType/textType.js +3 -5
- package/cellTypes/timeType/timeType.js +3 -5
- package/common.d.ts +1 -1
- package/core/focusCatcher/focusDetector.js +63 -0
- package/core/focusCatcher/focusDetector.mjs +59 -0
- package/core/focusCatcher/index.js +148 -0
- package/core/focusCatcher/index.mjs +144 -0
- package/core/index.js +9 -0
- package/core/index.mjs +1 -0
- package/core.d.ts +10 -5
- package/core.js +327 -359
- package/core.mjs +327 -359
- package/dataMap/dataMap.js +1 -2
- package/dataMap/dataSource.js +1 -2
- package/dataMap/metaManager/metaSchema.js +65 -0
- package/dataMap/metaManager/metaSchema.mjs +65 -0
- package/dataMap/metaManager/mods/extendMetaProperties.js +7 -1
- package/dataMap/metaManager/mods/extendMetaProperties.mjs +7 -1
- package/dataMap/replaceData.js +5 -0
- package/dataMap/replaceData.mjs +5 -0
- package/dist/handsontable.css +94 -76
- package/dist/handsontable.full.css +94 -76
- package/dist/handsontable.full.js +21236 -14104
- package/dist/handsontable.full.min.css +8 -8
- package/dist/handsontable.full.min.js +170 -152
- package/dist/handsontable.js +22016 -15254
- package/dist/handsontable.min.css +7 -7
- package/dist/handsontable.min.js +31 -23
- package/dist/languages/all.js +47 -40
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/ar-AR.js +1 -2
- package/dist/languages/cs-CZ.js +1 -2
- package/dist/languages/de-CH.js +1 -2
- package/dist/languages/de-DE.js +1 -2
- package/dist/languages/en-US.js +15 -3
- package/dist/languages/en-US.min.js +1 -1
- package/dist/languages/es-MX.js +1 -2
- package/dist/languages/fr-FR.js +1 -2
- package/dist/languages/it-IT.js +1 -2
- package/dist/languages/ja-JP.js +1 -2
- package/dist/languages/ko-KR.js +1 -2
- package/dist/languages/lv-LV.js +1 -2
- package/dist/languages/nb-NO.js +1 -2
- package/dist/languages/nl-NL.js +1 -2
- package/dist/languages/pl-PL.js +15 -3
- package/dist/languages/pl-PL.min.js +1 -1
- package/dist/languages/pt-BR.js +1 -2
- package/dist/languages/ru-RU.js +1 -2
- package/dist/languages/sr-SP.js +1 -2
- package/dist/languages/zh-CN.js +1 -2
- package/dist/languages/zh-TW.js +1 -2
- package/editorManager.js +17 -91
- package/editorManager.mjs +16 -87
- package/editors/autocompleteEditor/autocompleteEditor.js +65 -11
- package/editors/autocompleteEditor/autocompleteEditor.mjs +65 -10
- package/editors/baseEditor/baseEditor.js +19 -13
- package/editors/baseEditor/baseEditor.mjs +16 -7
- package/editors/checkboxEditor/checkboxEditor.js +1 -2
- package/editors/dateEditor/dateEditor.js +27 -9
- package/editors/dateEditor/dateEditor.mjs +27 -8
- package/editors/dropdownEditor/dropdownEditor.js +1 -2
- package/editors/handsontableEditor/handsontableEditor.js +14 -7
- package/editors/handsontableEditor/handsontableEditor.mjs +14 -6
- package/editors/numericEditor/numericEditor.js +1 -2
- package/editors/passwordEditor/passwordEditor.js +1 -2
- package/editors/selectEditor/selectEditor.js +1 -2
- package/editors/textEditor/textEditor.js +20 -29
- package/editors/textEditor/textEditor.mjs +22 -30
- package/editors/timeEditor/timeEditor.js +1 -2
- package/eventManager.js +1 -2
- package/focusManager.d.ts +12 -0
- package/focusManager.js +265 -0
- package/focusManager.mjs +261 -0
- package/helpers/a11y.js +81 -0
- package/helpers/a11y.mjs +39 -0
- package/helpers/dom/element.js +224 -12
- package/helpers/dom/element.mjs +216 -10
- package/helpers/dom/event.d.ts +1 -0
- package/helpers/dom/event.js +25 -0
- package/helpers/dom/event.mjs +24 -0
- package/helpers/mixed.js +2 -2
- package/helpers/mixed.mjs +2 -2
- package/helpers/number.d.ts +1 -0
- package/helpers/number.js +18 -0
- package/helpers/number.mjs +17 -0
- package/helpers/unicode.js +1 -2
- package/i18n/constants.js +97 -160
- package/i18n/constants.mjs +17 -1
- package/i18n/languages/ar-AR.js +3 -4
- package/i18n/languages/cs-CZ.js +3 -4
- package/i18n/languages/de-CH.js +3 -4
- package/i18n/languages/de-DE.js +3 -4
- package/i18n/languages/en-US.js +17 -5
- package/i18n/languages/en-US.mjs +14 -1
- package/i18n/languages/es-MX.js +3 -4
- package/i18n/languages/fr-FR.js +3 -4
- package/i18n/languages/it-IT.js +3 -4
- package/i18n/languages/ja-JP.js +3 -4
- package/i18n/languages/ko-KR.js +3 -4
- package/i18n/languages/lv-LV.js +3 -4
- package/i18n/languages/nb-NO.js +3 -4
- package/i18n/languages/nl-NL.js +3 -4
- package/i18n/languages/pl-PL.js +17 -5
- package/i18n/languages/pl-PL.mjs +14 -1
- package/i18n/languages/pt-BR.js +3 -4
- package/i18n/languages/ru-RU.js +3 -4
- package/i18n/languages/sr-SP.js +3 -4
- package/i18n/languages/zh-CN.js +3 -4
- package/i18n/languages/zh-TW.js +3 -4
- package/i18n/registry.js +4 -6
- package/index.js +3 -4
- package/languages/all.js +47 -40
- package/languages/ar-AR.js +1 -2
- package/languages/cs-CZ.js +1 -2
- package/languages/de-CH.js +1 -2
- package/languages/de-DE.js +1 -2
- package/languages/en-US.js +15 -3
- package/languages/en-US.mjs +14 -1
- package/languages/es-MX.js +1 -2
- package/languages/fr-FR.js +1 -2
- package/languages/index.js +47 -40
- package/languages/it-IT.js +1 -2
- package/languages/ja-JP.js +1 -2
- package/languages/ko-KR.js +1 -2
- package/languages/lv-LV.js +1 -2
- package/languages/nb-NO.js +1 -2
- package/languages/nl-NL.js +1 -2
- package/languages/pl-PL.js +15 -3
- package/languages/pl-PL.mjs +14 -1
- package/languages/pt-BR.js +1 -2
- package/languages/ru-RU.js +1 -2
- package/languages/sr-SP.js +1 -2
- package/languages/zh-CN.js +1 -2
- package/languages/zh-TW.js +1 -2
- package/mixins/hooksRefRegisterer.js +1 -2
- package/mixins/localHooks.js +1 -2
- package/package.json +119 -96
- package/pluginHooks.d.ts +42 -7
- package/pluginHooks.js +301 -65
- package/pluginHooks.mjs +300 -63
- package/plugins/autoColumnSize/autoColumnSize.d.ts +2 -0
- package/plugins/autoColumnSize/autoColumnSize.js +2 -4
- package/plugins/autoRowSize/autoRowSize.d.ts +2 -0
- package/plugins/autoRowSize/autoRowSize.js +15 -10
- package/plugins/autoRowSize/autoRowSize.mjs +13 -6
- package/plugins/autofill/autofill.js +2 -4
- package/plugins/autofill/utils.js +1 -2
- package/plugins/base/base.js +1 -2
- package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +2 -4
- package/plugins/bindRowsWithHeaders/maps/looseBindsMap.js +1 -2
- package/plugins/bindRowsWithHeaders/maps/strictBindsMap.js +1 -2
- package/plugins/collapsibleColumns/collapsibleColumns.js +77 -8
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +76 -5
- package/plugins/columnSorting/columnSorting.js +71 -6
- package/plugins/columnSorting/columnSorting.mjs +70 -3
- package/plugins/columnSorting/index.js +3 -1
- package/plugins/columnSorting/index.mjs +1 -1
- package/plugins/columnSorting/sortFunction/checkbox.js +1 -2
- package/plugins/columnSorting/sortFunction/date.js +1 -2
- package/plugins/columnSorting/sortFunction/default.js +1 -2
- package/plugins/columnSorting/sortFunction/numeric.js +1 -2
- package/plugins/columnSorting/sortService/engine.js +3 -6
- package/plugins/columnSorting/utils.js +3 -6
- package/plugins/columnSummary/columnSummary.js +2 -4
- package/plugins/columnSummary/endpoints.js +1 -2
- package/plugins/comments/commentEditor.js +2 -2
- package/plugins/comments/commentEditor.mjs +1 -0
- package/plugins/comments/comments.js +254 -197
- package/plugins/comments/comments.mjs +251 -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/comments/displaySwitch.js +1 -2
- package/plugins/contextMenu/commandExecutor.js +2 -3
- package/plugins/contextMenu/commandExecutor.mjs +2 -3
- package/plugins/contextMenu/contextMenu.d.ts +1 -1
- package/plugins/contextMenu/contextMenu.js +77 -40
- package/plugins/contextMenu/contextMenu.mjs +74 -35
- package/plugins/contextMenu/itemsFactory.js +2 -3
- package/plugins/contextMenu/itemsFactory.mjs +3 -4
- package/plugins/contextMenu/{cursor.mjs → menu/cursor.js} +6 -4
- package/plugins/contextMenu/{cursor.js → menu/cursor.mjs} +4 -10
- package/plugins/contextMenu/menu/defaultShortcutsList.js +88 -0
- package/plugins/contextMenu/menu/defaultShortcutsList.mjs +84 -0
- package/plugins/contextMenu/menu/index.js +9 -0
- package/plugins/contextMenu/menu/index.mjs +1 -0
- package/plugins/contextMenu/{menu.js → menu/menu.js} +145 -421
- package/plugins/contextMenu/{menu.mjs → menu/menu.mjs} +146 -422
- package/plugins/contextMenu/menu/menuItemRenderer.js +70 -0
- package/plugins/contextMenu/menu/menuItemRenderer.mjs +66 -0
- package/plugins/contextMenu/menu/navigator.js +27 -0
- package/plugins/contextMenu/menu/navigator.mjs +23 -0
- package/plugins/contextMenu/menu/positioner.js +213 -0
- package/plugins/contextMenu/menu/positioner.mjs +209 -0
- package/plugins/contextMenu/menu/shortcuts.js +114 -0
- package/plugins/contextMenu/menu/shortcuts.mjs +110 -0
- package/plugins/contextMenu/menu/utils.js +177 -0
- package/plugins/contextMenu/menu/utils.mjs +163 -0
- package/plugins/contextMenu/predefinedItems/alignment.js +10 -4
- package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
- package/plugins/contextMenu/predefinedItems/clearColumn.js +8 -7
- package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/columnLeft.js +8 -7
- package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/columnRight.js +8 -7
- package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/index.js +75 -0
- package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
- package/plugins/contextMenu/predefinedItems/noItems.js +1 -2
- package/plugins/contextMenu/predefinedItems/readOnly.js +10 -4
- package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
- package/plugins/contextMenu/predefinedItems/redo.js +3 -4
- package/plugins/contextMenu/predefinedItems/removeColumn.js +10 -9
- package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/removeRow.js +10 -9
- package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/rowAbove.js +8 -7
- package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/rowBelow.js +8 -7
- package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
- package/plugins/contextMenu/predefinedItems/separator.js +1 -2
- package/plugins/contextMenu/predefinedItems/undo.js +3 -4
- package/plugins/contextMenu/utils.js +35 -151
- package/plugins/contextMenu/utils.mjs +35 -144
- package/plugins/copyPaste/clipboardData/clipboardData.js +516 -0
- package/plugins/copyPaste/clipboardData/clipboardData.mjs +512 -0
- package/plugins/copyPaste/clipboardData/copyClipboardData.js +69 -0
- package/plugins/copyPaste/clipboardData/copyClipboardData.mjs +65 -0
- package/plugins/copyPaste/clipboardData/index.js +9 -0
- package/plugins/copyPaste/clipboardData/index.mjs +4 -0
- package/plugins/copyPaste/clipboardData/pasteClipboardData.js +81 -0
- package/plugins/copyPaste/clipboardData/pasteClipboardData.mjs +77 -0
- 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 +9 -2
- package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
- package/plugins/copyPaste/copyPaste.js +160 -167
- package/plugins/copyPaste/copyPaste.mjs +161 -166
- package/plugins/customBorders/contextMenuItem/bottom.js +2 -2
- package/plugins/customBorders/contextMenuItem/left.js +2 -2
- package/plugins/customBorders/contextMenuItem/noBorders.js +2 -2
- package/plugins/customBorders/contextMenuItem/right.js +2 -2
- package/plugins/customBorders/contextMenuItem/top.js +2 -2
- package/plugins/customBorders/customBorders.js +27 -26
- package/plugins/customBorders/customBorders.mjs +24 -21
- package/plugins/dragToScroll/dragToScroll.js +2 -4
- package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
- package/plugins/dropdownMenu/dropdownMenu.js +130 -44
- package/plugins/dropdownMenu/dropdownMenu.mjs +127 -39
- package/plugins/exportFile/dataProvider.js +1 -2
- package/plugins/exportFile/exportFile.js +4 -6
- package/plugins/exportFile/typeFactory.js +5 -8
- package/plugins/exportFile/types/_base.js +1 -2
- package/plugins/exportFile/types/csv.js +1 -2
- package/plugins/filters/component/_base.js +23 -8
- package/plugins/filters/component/_base.mjs +23 -8
- package/plugins/filters/component/actionBar.js +31 -29
- package/plugins/filters/component/actionBar.mjs +26 -23
- package/plugins/filters/component/condition.js +48 -61
- 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 +37 -28
- package/plugins/filters/component/value.mjs +32 -22
- package/plugins/filters/condition/beginsWith.js +3 -4
- package/plugins/filters/condition/between.js +3 -4
- package/plugins/filters/condition/byValue.js +1 -2
- package/plugins/filters/condition/contains.js +3 -4
- package/plugins/filters/condition/date/after.js +3 -4
- package/plugins/filters/condition/date/before.js +3 -4
- package/plugins/filters/condition/date/today.js +3 -4
- package/plugins/filters/condition/date/tomorrow.js +3 -4
- package/plugins/filters/condition/date/yesterday.js +3 -4
- package/plugins/filters/condition/empty.js +3 -4
- package/plugins/filters/condition/endsWith.js +3 -4
- package/plugins/filters/condition/equal.js +3 -4
- package/plugins/filters/condition/false.js +1 -2
- package/plugins/filters/condition/greaterThan.js +3 -4
- package/plugins/filters/condition/greaterThanOrEqual.js +3 -4
- package/plugins/filters/condition/lessThan.js +3 -4
- package/plugins/filters/condition/lessThanOrEqual.js +3 -4
- package/plugins/filters/condition/none.js +3 -4
- package/plugins/filters/condition/notBetween.js +3 -4
- package/plugins/filters/condition/notContains.js +3 -4
- package/plugins/filters/condition/notEmpty.js +3 -4
- package/plugins/filters/condition/notEqual.js +3 -4
- package/plugins/filters/condition/true.js +1 -2
- package/plugins/filters/conditionCollection.d.ts +3 -2
- package/plugins/filters/conditionCollection.js +1 -2
- package/plugins/filters/conditionRegisterer.js +1 -2
- package/plugins/filters/conditionUpdateObserver.js +1 -2
- package/plugins/filters/constants.js +4 -8
- package/plugins/filters/constants.mjs +1 -1
- package/plugins/filters/dataFilter.js +1 -2
- package/plugins/filters/filters.d.ts +3 -5
- package/plugins/filters/filters.js +108 -66
- package/plugins/filters/filters.mjs +99 -55
- package/plugins/filters/logicalOperationRegisterer.js +1 -2
- package/plugins/filters/logicalOperations/conjunction.js +4 -6
- package/plugins/filters/logicalOperations/disjunction.js +4 -6
- package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +4 -6
- 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 +37 -15
- package/plugins/filters/ui/_base.mjs +35 -13
- package/plugins/filters/ui/input.js +43 -35
- package/plugins/filters/ui/input.mjs +42 -33
- package/plugins/filters/ui/link.js +44 -12
- package/plugins/filters/ui/link.mjs +44 -11
- package/plugins/filters/ui/multipleSelect.js +237 -133
- 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 +152 -77
- package/plugins/filters/ui/select.mjs +148 -72
- package/plugins/formulas/engine/settings.js +2 -4
- package/plugins/formulas/formulas.js +3 -6
- package/plugins/formulas/indexSyncer/axisSyncer.js +1 -2
- package/plugins/formulas/indexSyncer/index.js +1 -2
- package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +2 -2
- package/plugins/hiddenColumns/contextMenuItem/showColumn.js +2 -2
- package/plugins/hiddenColumns/hiddenColumns.d.ts +1 -0
- package/plugins/hiddenColumns/hiddenColumns.js +49 -6
- package/plugins/hiddenColumns/hiddenColumns.mjs +48 -3
- package/plugins/hiddenRows/contextMenuItem/hideRow.js +2 -2
- package/plugins/hiddenRows/contextMenuItem/showRow.js +2 -2
- package/plugins/hiddenRows/hiddenRows.d.ts +1 -0
- package/plugins/hiddenRows/hiddenRows.js +49 -6
- package/plugins/hiddenRows/hiddenRows.mjs +48 -3
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +2 -2
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +2 -2
- package/plugins/manualColumnFreeze/manualColumnFreeze.js +2 -4
- package/plugins/manualColumnMove/manualColumnMove.js +9 -17
- package/plugins/manualColumnMove/manualColumnMove.mjs +7 -13
- package/plugins/manualColumnMove/ui/_base.js +1 -2
- package/plugins/manualColumnMove/ui/backlight.js +1 -2
- package/plugins/manualColumnMove/ui/guideline.js +1 -2
- package/plugins/manualColumnResize/manualColumnResize.js +2 -4
- package/plugins/manualRowMove/manualRowMove.js +6 -23
- package/plugins/manualRowMove/manualRowMove.mjs +4 -19
- package/plugins/manualRowMove/ui/_base.js +1 -2
- package/plugins/manualRowMove/ui/backlight.js +1 -2
- package/plugins/manualRowMove/ui/guideline.js +1 -2
- package/plugins/manualRowResize/manualRowResize.js +2 -4
- package/plugins/mergeCells/calculations/autofill.js +1 -2
- package/plugins/mergeCells/calculations/selection.js +1 -2
- package/plugins/mergeCells/cellCoords.js +1 -2
- package/plugins/mergeCells/cellsCollection.js +1 -2
- package/plugins/mergeCells/contextMenuItem/toggleMerge.js +2 -2
- package/plugins/mergeCells/mergeCells.js +7 -20
- package/plugins/mergeCells/mergeCells.mjs +5 -16
- package/plugins/multiColumnSorting/multiColumnSorting.js +60 -6
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +59 -3
- package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +2 -4
- package/plugins/nestedHeaders/nestedHeaders.js +263 -36
- package/plugins/nestedHeaders/nestedHeaders.mjs +262 -33
- package/plugins/nestedHeaders/stateManager/index.js +102 -3
- package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
- package/plugins/nestedHeaders/stateManager/sourceSettings.js +1 -2
- package/plugins/nestedHeaders/utils/ghostTable.js +1 -2
- package/plugins/nestedRows/data/dataManager.js +1 -2
- package/plugins/nestedRows/nestedRows.js +47 -10
- package/plugins/nestedRows/nestedRows.mjs +45 -6
- package/plugins/nestedRows/ui/_base.js +1 -2
- package/plugins/nestedRows/ui/collapsing.js +1 -2
- package/plugins/nestedRows/ui/contextMenu.js +3 -4
- package/plugins/nestedRows/ui/headers.js +13 -3
- package/plugins/nestedRows/ui/headers.mjs +13 -2
- package/plugins/persistentState/persistentState.js +2 -4
- package/plugins/persistentState/storage.js +1 -2
- package/plugins/search/search.js +2 -4
- package/plugins/touchScroll/touchScroll.js +2 -4
- package/plugins/trimRows/trimRows.js +2 -4
- package/plugins/undoRedo/index.js +2 -2
- package/plugins/undoRedo/undoRedo.js +2 -4
- package/renderers/autocompleteRenderer/autocompleteRenderer.js +9 -2
- package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
- package/renderers/baseRenderer/baseRenderer.js +18 -2
- package/renderers/baseRenderer/baseRenderer.mjs +18 -1
- package/renderers/checkboxRenderer/checkboxRenderer.js +10 -6
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
- package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
- package/renderers/dateRenderer/dateRenderer.js +28 -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 +28 -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/htmlRenderer/htmlRenderer.js +1 -2
- package/renderers/index.d.ts +9 -0
- package/renderers/numericRenderer/numericRenderer.js +1 -2
- package/renderers/passwordRenderer/passwordRenderer.js +1 -2
- package/renderers/selectRenderer/index.d.ts +1 -0
- package/renderers/selectRenderer/index.js +6 -0
- package/renderers/selectRenderer/index.mjs +1 -0
- package/renderers/selectRenderer/selectRenderer.d.ts +5 -0
- package/renderers/selectRenderer/selectRenderer.js +26 -0
- package/renderers/selectRenderer/selectRenderer.mjs +22 -0
- package/renderers/textRenderer/textRenderer.js +1 -2
- package/renderers/timeRenderer/timeRenderer.js +1 -2
- package/selection/highlight/highlight.js +257 -73
- 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 +32 -29
- package/selection/highlight/visualSelection.mjs +31 -27
- package/selection/index.js +4 -7
- package/selection/index.mjs +2 -3
- package/selection/mouseEventHandler.js +7 -1
- package/selection/mouseEventHandler.mjs +7 -1
- package/selection/range.js +9 -10
- package/selection/range.mjs +8 -8
- package/selection/selection.js +334 -154
- package/selection/selection.mjs +330 -151
- package/selection/transformation.js +233 -94
- package/selection/transformation.mjs +232 -92
- package/selection/utils.js +20 -31
- package/selection/utils.mjs +16 -21
- package/settings.d.ts +4 -0
- package/shortcutContexts/commands/editor/closeAndSave.js +11 -0
- package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
- package/shortcutContexts/commands/editor/closeWithoutSaving.js +11 -0
- package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
- package/shortcutContexts/commands/editor/fastOpen.js +15 -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 +26 -0
- package/shortcutContexts/commands/editor/open.mjs +23 -0
- package/shortcutContexts/commands/emptySelectedCells.js +10 -0
- package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
- package/shortcutContexts/commands/extendCellsSelection/down.js +14 -0
- package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +24 -0
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +21 -0
- package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
- package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
- package/shortcutContexts/commands/extendCellsSelection/left.js +14 -0
- package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/right.js +14 -0
- package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/toColumns.js +18 -0
- package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +28 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +18 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +18 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +28 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +28 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +28 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
- package/shortcutContexts/commands/extendCellsSelection/toRows.js +18 -0
- package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
- package/shortcutContexts/commands/extendCellsSelection/up.js +14 -0
- package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +24 -0
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +21 -0
- package/shortcutContexts/commands/index.js +35 -0
- package/shortcutContexts/commands/index.mjs +31 -0
- package/shortcutContexts/commands/moveCellSelection/down.js +12 -0
- package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +32 -0
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +29 -0
- package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
- package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +11 -0
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
- package/shortcutContexts/commands/moveCellSelection/inlineStart.js +11 -0
- package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
- package/shortcutContexts/commands/moveCellSelection/left.js +9 -0
- package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
- package/shortcutContexts/commands/moveCellSelection/right.js +9 -0
- package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +16 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +16 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +18 -0
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
- package/shortcutContexts/commands/moveCellSelection/toMostRight.js +20 -0
- package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTop.js +16 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +18 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
- package/shortcutContexts/commands/moveCellSelection/up.js +12 -0
- package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +32 -0
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
- package/shortcutContexts/commands/populateSelectedCellsData.js +28 -0
- package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
- package/shortcutContexts/commands/scrollToFocusedCell.js +34 -0
- package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
- package/shortcutContexts/commands/selectAll.js +11 -0
- package/shortcutContexts/commands/selectAll.mjs +8 -0
- package/shortcutContexts/constants.js +11 -0
- package/shortcutContexts/constants.mjs +8 -0
- package/shortcutContexts/editor.js +25 -0
- package/shortcutContexts/editor.mjs +21 -0
- package/shortcutContexts/grid.js +167 -0
- package/shortcutContexts/grid.mjs +163 -0
- package/shortcutContexts/index.js +24 -0
- package/shortcutContexts/index.mjs +11 -0
- package/shortcuts/context.d.ts +1 -0
- package/shortcuts/context.js +23 -4
- package/shortcuts/context.mjs +23 -5
- package/shortcuts/manager.js +31 -7
- package/shortcuts/manager.mjs +32 -7
- package/shortcuts/recorder.js +30 -14
- package/shortcuts/recorder.mjs +30 -14
- package/shortcuts/utils.js +19 -5
- package/shortcuts/utils.mjs +18 -4
- package/tableView.js +113 -16
- package/tableView.mjs +113 -15
- package/utils/dataStructures/linkedList.js +1 -2
- package/utils/dataStructures/priorityMap.js +2 -4
- package/utils/dataStructures/queue.js +1 -2
- package/utils/dataStructures/stack.js +1 -2
- package/utils/dataStructures/tree.js +3 -6
- package/utils/ghostTable.js +32 -17
- package/utils/ghostTable.mjs +31 -15
- package/utils/interval.js +1 -2
- package/utils/paginator.js +151 -0
- package/utils/paginator.mjs +147 -0
- package/utils/parseTable.js +527 -83
- package/utils/parseTable.mjs +523 -82
- package/utils/rootInstance.js +2 -4
- package/utils/samplesGenerator.js +21 -13
- package/utils/samplesGenerator.mjs +20 -11
- package/utils/staticRegister.js +1 -2
- package/validators/autocompleteValidator/autocompleteValidator.js +1 -2
- package/validators/dateValidator/dateValidator.js +1 -2
- package/validators/numericValidator/numericValidator.js +1 -2
- package/validators/timeValidator/timeValidator.js +1 -2
- package/3rdparty/walkontable/src/selection.js +0 -295
- package/3rdparty/walkontable/src/selection.mjs +0 -290
- package/plugins/contextMenu/predefinedItems.js +0 -76
- package/plugins/contextMenu/predefinedItems.mjs +0 -68
- package/plugins/copyPaste/clipboardData.js +0 -18
- package/plugins/copyPaste/clipboardData.mjs +0 -14
- package/plugins/copyPaste/focusableElement.js +0 -186
- package/plugins/copyPaste/focusableElement.mjs +0 -180
- package/plugins/copyPaste/pasteEvent.js +0 -14
- package/plugins/copyPaste/pasteEvent.mjs +0 -9
- 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
package/core.mjs
CHANGED
@@ -8,6 +8,7 @@ import { isMobileBrowser, isIpadOS } from "./helpers/browser.mjs";
|
|
8
8
|
import EditorManager from "./editorManager.mjs";
|
9
9
|
import EventManager from "./eventManager.mjs";
|
10
10
|
import { deepClone, duckSchema, isObjectEqual, isObject, deepObjectSize, hasOwnProperty, createObjectPropListener, objectEach } from "./helpers/object.mjs";
|
11
|
+
import { FocusManager } from "./focusManager.mjs";
|
11
12
|
import { arrayMap, arrayEach, arrayReduce, getDifferenceOfArrays, stringToArray, pivot } from "./helpers/array.mjs";
|
12
13
|
import { instanceToHTML } from "./utils/parseTable.mjs";
|
13
14
|
import { getPlugin, getPluginsNames } from "./plugins/registry.mjs";
|
@@ -27,11 +28,21 @@ import { hasLanguageDictionary, getValidLanguageCode, getTranslatedPhrase } from
|
|
27
28
|
import { warnUserAboutLanguageRegistration, normalizeLanguageCode } from "./i18n/utils.mjs";
|
28
29
|
import { Selection } from "./selection/index.mjs";
|
29
30
|
import { MetaManager, DynamicCellMetaMod, ExtendMetaPropertiesMod, replaceData } from "./dataMap/index.mjs";
|
31
|
+
import { installFocusCatcher } from "./core/index.mjs";
|
30
32
|
import { createUniqueMap } from "./utils/dataStructures/uniqueMap.mjs";
|
31
33
|
import { createShortcutManager } from "./shortcuts/index.mjs";
|
32
|
-
|
34
|
+
import { registerAllShortcutContexts } from "./shortcutContexts/index.mjs";
|
33
35
|
let activeGuid = null;
|
34
36
|
|
37
|
+
/**
|
38
|
+
* Keeps the collection of the all Handsontable instances created on the same page. The
|
39
|
+
* list is then used to trigger the "afterUnlisten" hook when the "listen()" method was
|
40
|
+
* called on another instance.
|
41
|
+
*
|
42
|
+
* @type {Map<string, Core>}
|
43
|
+
*/
|
44
|
+
const foreignHotInstances = new Map();
|
45
|
+
|
35
46
|
/**
|
36
47
|
* A set of deprecated feature names.
|
37
48
|
*
|
@@ -91,7 +102,8 @@ const deprecationWarns = new Set();
|
|
91
102
|
* @param {boolean} [rootInstanceSymbol=false] Indicates if the instance is root of all later instances created.
|
92
103
|
*/
|
93
104
|
export default function Core(rootElement, userSettings) {
|
94
|
-
var _userSettings$layoutD
|
105
|
+
var _userSettings$layoutD,
|
106
|
+
_this = this;
|
95
107
|
let rootInstanceSymbol = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
96
108
|
let preventScrollingToCell = false;
|
97
109
|
let instance = this;
|
@@ -100,6 +112,7 @@ export default function Core(rootElement, userSettings) {
|
|
100
112
|
let dataSource;
|
101
113
|
let grid;
|
102
114
|
let editorManager;
|
115
|
+
let focusManager;
|
103
116
|
let firstRun = true;
|
104
117
|
if (hasValidParameter(rootInstanceSymbol)) {
|
105
118
|
registerAsRootInstance(this);
|
@@ -208,6 +221,8 @@ export default function Core(rootElement, userSettings) {
|
|
208
221
|
}
|
209
222
|
this.guid = `ht_${randomString()}`; // this is the namespace for global events
|
210
223
|
|
224
|
+
foreignHotInstances.set(this.guid, this);
|
225
|
+
|
211
226
|
/**
|
212
227
|
* Instance of index mapper which is responsible for managing the column indexes.
|
213
228
|
*
|
@@ -256,14 +271,16 @@ export default function Core(rootElement, userSettings) {
|
|
256
271
|
};
|
257
272
|
|
258
273
|
let selection = new Selection(tableMeta, {
|
259
|
-
rowIndexMapper:
|
260
|
-
columnIndexMapper:
|
274
|
+
rowIndexMapper: instance.rowIndexMapper,
|
275
|
+
columnIndexMapper: instance.columnIndexMapper,
|
261
276
|
countCols: () => instance.countCols(),
|
262
277
|
countRows: () => instance.countRows(),
|
263
278
|
propToCol: prop => datamap.propToCol(prop),
|
264
279
|
isEditorOpened: () => instance.getActiveEditor() ? instance.getActiveEditor().isOpened() : false,
|
265
|
-
|
266
|
-
|
280
|
+
countRenderableColumns: () => this.view.countRenderableColumns(),
|
281
|
+
countRenderableRows: () => this.view.countRenderableRows(),
|
282
|
+
countRowHeaders: () => this.countRowHeaders(),
|
283
|
+
countColHeaders: () => this.countColHeaders(),
|
267
284
|
getShortcutManager: () => instance.getShortcutManager(),
|
268
285
|
createCellCoords: (row, column) => instance._createCellCoords(row, column),
|
269
286
|
createCellRange: (highlight, from, to) => instance._createCellRange(highlight, from, to),
|
@@ -282,21 +299,6 @@ export default function Core(rootElement, userSettings) {
|
|
282
299
|
};
|
283
300
|
this.columnIndexMapper.addLocalHook('cacheUpdated', onIndexMapperCacheUpdate);
|
284
301
|
this.rowIndexMapper.addLocalHook('cacheUpdated', onIndexMapperCacheUpdate);
|
285
|
-
this.selection.addLocalHook('beforeSetRangeStart', cellCoords => {
|
286
|
-
this.runHooks('beforeSetRangeStart', cellCoords);
|
287
|
-
});
|
288
|
-
this.selection.addLocalHook('beforeSetRangeStartOnly', cellCoords => {
|
289
|
-
this.runHooks('beforeSetRangeStartOnly', cellCoords);
|
290
|
-
});
|
291
|
-
this.selection.addLocalHook('beforeSetRangeEnd', cellCoords => {
|
292
|
-
this.runHooks('beforeSetRangeEnd', cellCoords);
|
293
|
-
if (cellCoords.row < 0) {
|
294
|
-
cellCoords.row = this.view._wt.wtTable.getFirstVisibleRow();
|
295
|
-
}
|
296
|
-
if (cellCoords.col < 0) {
|
297
|
-
cellCoords.col = this.view._wt.wtTable.getFirstVisibleColumn();
|
298
|
-
}
|
299
|
-
});
|
300
302
|
this.selection.addLocalHook('afterSetRangeEnd', cellCoords => {
|
301
303
|
const preventScrolling = createObjectPropListener(false);
|
302
304
|
const selectionRange = this.selection.getSelectedRange();
|
@@ -308,8 +310,6 @@ export default function Core(rootElement, userSettings) {
|
|
308
310
|
this.runHooks('afterSelection', from.row, from.col, to.row, to.col, preventScrolling, selectionLayerLevel);
|
309
311
|
this.runHooks('afterSelectionByProp', from.row, instance.colToProp(from.col), to.row, instance.colToProp(to.col), preventScrolling, selectionLayerLevel); // eslint-disable-line max-len
|
310
312
|
|
311
|
-
const isSelectedByAnyHeader = this.selection.isSelectedByAnyHeader();
|
312
|
-
const currentSelectedRange = this.selection.selectedRange.current();
|
313
313
|
let scrollToCell = true;
|
314
314
|
if (preventScrollingToCell) {
|
315
315
|
scrollToCell = false;
|
@@ -317,19 +317,42 @@ export default function Core(rootElement, userSettings) {
|
|
317
317
|
if (preventScrolling.isTouched()) {
|
318
318
|
scrollToCell = !preventScrolling.value;
|
319
319
|
}
|
320
|
+
const currentSelectedRange = this.selection.selectedRange.current();
|
321
|
+
const isSelectedByAnyHeader = this.selection.isSelectedByAnyHeader();
|
320
322
|
const isSelectedByRowHeader = this.selection.isSelectedByRowHeader();
|
321
323
|
const isSelectedByColumnHeader = this.selection.isSelectedByColumnHeader();
|
322
324
|
if (scrollToCell !== false) {
|
323
325
|
if (!isSelectedByAnyHeader) {
|
324
326
|
if (currentSelectedRange && !this.selection.isMultiple()) {
|
325
|
-
|
327
|
+
const {
|
328
|
+
row,
|
329
|
+
col
|
330
|
+
} = currentSelectedRange.from;
|
331
|
+
if (row < 0 && col >= 0) {
|
332
|
+
this.scrollViewportTo({
|
333
|
+
col
|
334
|
+
});
|
335
|
+
} else if (col < 0 && row >= 0) {
|
336
|
+
this.scrollViewportTo({
|
337
|
+
row
|
338
|
+
});
|
339
|
+
} else {
|
340
|
+
this.scrollViewportTo({
|
341
|
+
row,
|
342
|
+
col
|
343
|
+
});
|
344
|
+
}
|
326
345
|
} else {
|
327
|
-
this.
|
346
|
+
this.scrollViewportTo(cellCoords.toObject());
|
328
347
|
}
|
329
348
|
} else if (isSelectedByRowHeader) {
|
330
|
-
this.
|
349
|
+
this.scrollViewportTo({
|
350
|
+
row: cellCoords.row
|
351
|
+
});
|
331
352
|
} else if (isSelectedByColumnHeader) {
|
332
|
-
this.
|
353
|
+
this.scrollViewportTo({
|
354
|
+
col: cellCoords.col
|
355
|
+
});
|
333
356
|
}
|
334
357
|
}
|
335
358
|
|
@@ -364,30 +387,78 @@ export default function Core(rootElement, userSettings) {
|
|
364
387
|
isMultiple.value = changedIsMultiple;
|
365
388
|
}
|
366
389
|
});
|
367
|
-
this.selection.addLocalHook('beforeModifyTransformStart', cellCoordsDelta => {
|
368
|
-
this.runHooks('modifyTransformStart', cellCoordsDelta);
|
369
|
-
});
|
370
|
-
this.selection.addLocalHook('afterModifyTransformStart', (coords, rowTransformDir, colTransformDir) => {
|
371
|
-
this.runHooks('afterModifyTransformStart', coords, rowTransformDir, colTransformDir);
|
372
|
-
});
|
373
|
-
this.selection.addLocalHook('beforeModifyTransformEnd', cellCoordsDelta => {
|
374
|
-
this.runHooks('modifyTransformEnd', cellCoordsDelta);
|
375
|
-
});
|
376
|
-
this.selection.addLocalHook('afterModifyTransformEnd', (coords, rowTransformDir, colTransformDir) => {
|
377
|
-
this.runHooks('afterModifyTransformEnd', coords, rowTransformDir, colTransformDir);
|
378
|
-
});
|
379
390
|
this.selection.addLocalHook('afterDeselect', () => {
|
380
391
|
editorManager.destroyEditor();
|
381
392
|
this._refreshBorders();
|
382
393
|
removeClass(this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);
|
383
394
|
this.runHooks('afterDeselect');
|
384
395
|
});
|
385
|
-
this.selection.addLocalHook('
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
})
|
396
|
+
this.selection.addLocalHook('beforeHighlightSet', () => this.runHooks('beforeSelectionHighlightSet')).addLocalHook('beforeSetRangeStart', function () {
|
397
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
398
|
+
args[_key] = arguments[_key];
|
399
|
+
}
|
400
|
+
return _this.runHooks('beforeSetRangeStart', ...args);
|
401
|
+
}).addLocalHook('beforeSetRangeStartOnly', function () {
|
402
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
403
|
+
args[_key2] = arguments[_key2];
|
404
|
+
}
|
405
|
+
return _this.runHooks('beforeSetRangeStartOnly', ...args);
|
406
|
+
}).addLocalHook('beforeSetRangeEnd', function () {
|
407
|
+
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
408
|
+
args[_key3] = arguments[_key3];
|
409
|
+
}
|
410
|
+
return _this.runHooks('beforeSetRangeEnd', ...args);
|
411
|
+
}).addLocalHook('beforeSelectColumns', function () {
|
412
|
+
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
413
|
+
args[_key4] = arguments[_key4];
|
414
|
+
}
|
415
|
+
return _this.runHooks('beforeSelectColumns', ...args);
|
416
|
+
}).addLocalHook('afterSelectColumns', function () {
|
417
|
+
for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
|
418
|
+
args[_key5] = arguments[_key5];
|
419
|
+
}
|
420
|
+
return _this.runHooks('afterSelectColumns', ...args);
|
421
|
+
}).addLocalHook('beforeSelectRows', function () {
|
422
|
+
for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
|
423
|
+
args[_key6] = arguments[_key6];
|
424
|
+
}
|
425
|
+
return _this.runHooks('beforeSelectRows', ...args);
|
426
|
+
}).addLocalHook('afterSelectRows', function () {
|
427
|
+
for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
|
428
|
+
args[_key7] = arguments[_key7];
|
429
|
+
}
|
430
|
+
return _this.runHooks('afterSelectRows', ...args);
|
431
|
+
}).addLocalHook('beforeModifyTransformStart', function () {
|
432
|
+
for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
|
433
|
+
args[_key8] = arguments[_key8];
|
434
|
+
}
|
435
|
+
return _this.runHooks('modifyTransformStart', ...args);
|
436
|
+
}).addLocalHook('afterModifyTransformStart', function () {
|
437
|
+
for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
|
438
|
+
args[_key9] = arguments[_key9];
|
439
|
+
}
|
440
|
+
return _this.runHooks('afterModifyTransformStart', ...args);
|
441
|
+
}).addLocalHook('beforeModifyTransformEnd', function () {
|
442
|
+
for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
|
443
|
+
args[_key10] = arguments[_key10];
|
444
|
+
}
|
445
|
+
return _this.runHooks('modifyTransformEnd', ...args);
|
446
|
+
}).addLocalHook('afterModifyTransformEnd', function () {
|
447
|
+
for (var _len11 = arguments.length, args = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
|
448
|
+
args[_key11] = arguments[_key11];
|
449
|
+
}
|
450
|
+
return _this.runHooks('afterModifyTransformEnd', ...args);
|
451
|
+
}).addLocalHook('beforeRowWrap', function () {
|
452
|
+
for (var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
|
453
|
+
args[_key12] = arguments[_key12];
|
454
|
+
}
|
455
|
+
return _this.runHooks('beforeRowWrap', ...args);
|
456
|
+
}).addLocalHook('beforeColumnWrap', function () {
|
457
|
+
for (var _len13 = arguments.length, args = new Array(_len13), _key13 = 0; _key13 < _len13; _key13++) {
|
458
|
+
args[_key13] = arguments[_key13];
|
459
|
+
}
|
460
|
+
return _this.runHooks('beforeColumnWrap', ...args);
|
461
|
+
}).addLocalHook('insertRowRequire', totalRows => this.alter('insert_row_above', totalRows, 1, 'auto')).addLocalHook('insertColRequire', totalCols => this.alter('insert_col_start', totalCols, 1, 'auto'));
|
391
462
|
grid = {
|
392
463
|
/**
|
393
464
|
* Inserts or removes rows and columns.
|
@@ -469,7 +540,9 @@ export default function Core(rootElement, userSettings) {
|
|
469
540
|
const currentFromRow = currentFromRange === null || currentFromRange === void 0 ? void 0 : currentFromRange.row;
|
470
541
|
const startVisualRowIndex = instance.toVisualRow(startRowPhysicalIndex);
|
471
542
|
if (selection.isSelectedByCorner()) {
|
472
|
-
|
543
|
+
selection.selectAll(true, true, {
|
544
|
+
disableHeadersHighlight: true
|
545
|
+
});
|
473
546
|
} else if (isDefined(currentFromRow) && currentFromRow >= startVisualRowIndex) {
|
474
547
|
// Moving the selection (if it exists) downward – it should be applied to the "old" row.
|
475
548
|
// TODO: The logic here should be handled by selection module.
|
@@ -523,7 +596,9 @@ export default function Core(rootElement, userSettings) {
|
|
523
596
|
const currentFromColumn = currentFromRange === null || currentFromRange === void 0 ? void 0 : currentFromRange.col;
|
524
597
|
const startVisualColumnIndex = instance.toVisualColumn(startColumnPhysicalIndex);
|
525
598
|
if (selection.isSelectedByCorner()) {
|
526
|
-
|
599
|
+
selection.selectAll(true, true, {
|
600
|
+
disableHeadersHighlight: true
|
601
|
+
});
|
527
602
|
} else if (isDefined(currentFromColumn) && currentFromColumn >= startVisualColumnIndex) {
|
528
603
|
// Moving the selection (if it exists) rightward – it should be applied to the "old" column.
|
529
604
|
// TODO: The logic here should be handled by selection module.
|
@@ -1013,6 +1088,10 @@ export default function Core(rootElement, userSettings) {
|
|
1013
1088
|
this.updateSettings(tableMeta, true);
|
1014
1089
|
this.view = new TableView(this);
|
1015
1090
|
editorManager = EditorManager.getInstance(instance, tableMeta, selection);
|
1091
|
+
focusManager = new FocusManager(instance);
|
1092
|
+
if (isRootInstance(this)) {
|
1093
|
+
installFocusCatcher(instance);
|
1094
|
+
}
|
1016
1095
|
instance.runHooks('init');
|
1017
1096
|
this.forceFullRender = true; // used when data was changed
|
1018
1097
|
this.view.render();
|
@@ -1426,6 +1505,11 @@ export default function Core(rootElement, userSettings) {
|
|
1426
1505
|
*/
|
1427
1506
|
this.listen = function () {
|
1428
1507
|
if (instance && !instance.isListening()) {
|
1508
|
+
foreignHotInstances.forEach(foreignHot => {
|
1509
|
+
if (instance !== foreignHot) {
|
1510
|
+
foreignHot.unlisten();
|
1511
|
+
}
|
1512
|
+
});
|
1429
1513
|
activeGuid = instance.guid;
|
1430
1514
|
instance.runHooks('afterListen');
|
1431
1515
|
}
|
@@ -1510,8 +1594,8 @@ export default function Core(rootElement, userSettings) {
|
|
1510
1594
|
* @returns {Array} Returns removed portion of columns.
|
1511
1595
|
*/
|
1512
1596
|
this.spliceCol = function (column, index, amount) {
|
1513
|
-
for (var
|
1514
|
-
elements[
|
1597
|
+
for (var _len14 = arguments.length, elements = new Array(_len14 > 3 ? _len14 - 3 : 0), _key14 = 3; _key14 < _len14; _key14++) {
|
1598
|
+
elements[_key14 - 3] = arguments[_key14];
|
1515
1599
|
}
|
1516
1600
|
return datamap.spliceCol(column, index, amount, ...elements);
|
1517
1601
|
};
|
@@ -1528,8 +1612,8 @@ export default function Core(rootElement, userSettings) {
|
|
1528
1612
|
* @returns {Array} Returns removed portion of rows.
|
1529
1613
|
*/
|
1530
1614
|
this.spliceRow = function (row, index, amount) {
|
1531
|
-
for (var
|
1532
|
-
elements[
|
1615
|
+
for (var _len15 = arguments.length, elements = new Array(_len15 > 3 ? _len15 - 3 : 0), _key15 = 3; _key15 < _len15; _key15++) {
|
1616
|
+
elements[_key15 - 3] = arguments[_key15];
|
1533
1617
|
}
|
1534
1618
|
return datamap.spliceRow(row, index, amount, ...elements);
|
1535
1619
|
};
|
@@ -1626,6 +1710,9 @@ export default function Core(rootElement, userSettings) {
|
|
1626
1710
|
}
|
1627
1711
|
const changes = [];
|
1628
1712
|
arrayEach(selection.getSelectedRange(), cellRange => {
|
1713
|
+
if (cellRange.isSingleHeader()) {
|
1714
|
+
return;
|
1715
|
+
}
|
1629
1716
|
const topStart = cellRange.getTopStartCorner();
|
1630
1717
|
const bottomEnd = cellRange.getBottomEndCorner();
|
1631
1718
|
rangeEach(topStart.row, bottomEnd.row, row => {
|
@@ -2923,8 +3010,8 @@ export default function Core(rootElement, userSettings) {
|
|
2923
3010
|
*/
|
2924
3011
|
this.spliceCellsMeta = function (visualIndex) {
|
2925
3012
|
let deleteAmount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
2926
|
-
for (var
|
2927
|
-
cellMetaRows[
|
3013
|
+
for (var _len16 = arguments.length, cellMetaRows = new Array(_len16 > 2 ? _len16 - 2 : 0), _key16 = 2; _key16 < _len16; _key16++) {
|
3014
|
+
cellMetaRows[_key16 - 2] = arguments[_key16];
|
2928
3015
|
}
|
2929
3016
|
if (cellMetaRows.length > 0 && !Array.isArray(cellMetaRows[0])) {
|
2930
3017
|
throw new Error('The 3rd argument (cellMetaRows) has to be passed as an array of cell meta objects array.');
|
@@ -3615,6 +3702,30 @@ export default function Core(rootElement, userSettings) {
|
|
3615
3702
|
return instance.view._wt.drawn ? instance.view._wt.wtTable.getVisibleColumnsCount() : -1;
|
3616
3703
|
};
|
3617
3704
|
|
3705
|
+
/**
|
3706
|
+
* Returns the number of rendered row headers.
|
3707
|
+
*
|
3708
|
+
* @since 14.0.0
|
3709
|
+
* @memberof Core#
|
3710
|
+
* @function countRowHeaders
|
3711
|
+
* @returns {number} Number of row headers.
|
3712
|
+
*/
|
3713
|
+
this.countRowHeaders = function () {
|
3714
|
+
return this.view.getRowHeadersCount();
|
3715
|
+
};
|
3716
|
+
|
3717
|
+
/**
|
3718
|
+
* Returns the number of rendered column headers.
|
3719
|
+
*
|
3720
|
+
* @since 14.0.0
|
3721
|
+
* @memberof Core#
|
3722
|
+
* @function countColHeaders
|
3723
|
+
* @returns {number} Number of column headers.
|
3724
|
+
*/
|
3725
|
+
this.countColHeaders = function () {
|
3726
|
+
return this.view.getColumnHeadersCount();
|
3727
|
+
};
|
3728
|
+
|
3618
3729
|
/**
|
3619
3730
|
* Returns the number of empty rows. If the optional ending parameter is `true`, returns the
|
3620
3731
|
* number of empty rows at the bottom of the table.
|
@@ -3819,6 +3930,10 @@ export default function Core(rootElement, userSettings) {
|
|
3819
3930
|
* hot.selectColumns('id');
|
3820
3931
|
* // Select range of columns using visual indexes.
|
3821
3932
|
* hot.selectColumns(1, 4);
|
3933
|
+
* // Select range of columns using visual indexes and mark the first header as highlighted.
|
3934
|
+
* hot.selectColumns(1, 2, -1);
|
3935
|
+
* // Select range of columns using visual indexes and mark the second cell as highlighted.
|
3936
|
+
* hot.selectColumns(2, 1, 1);
|
3822
3937
|
* // Select range of columns using column properties.
|
3823
3938
|
* hot.selectColumns('id', 'last_name');
|
3824
3939
|
* ```
|
@@ -3829,11 +3944,15 @@ export default function Core(rootElement, userSettings) {
|
|
3829
3944
|
* @param {number} startColumn The visual column index from which the selection starts.
|
3830
3945
|
* @param {number} [endColumn=startColumn] The visual column index to which the selection finishes. If `endColumn`
|
3831
3946
|
* is not defined the column defined by `startColumn` will be selected.
|
3947
|
+
* @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
|
3948
|
+
* The value can take visual row index from -N to N, where negative values
|
3949
|
+
* point to the headers and positive values point to the cell range.
|
3832
3950
|
* @returns {boolean} `true` if selection was successful, `false` otherwise.
|
3833
3951
|
*/
|
3834
3952
|
this.selectColumns = function (startColumn) {
|
3835
3953
|
let endColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startColumn;
|
3836
|
-
|
3954
|
+
let focusPosition = arguments.length > 2 ? arguments[2] : undefined;
|
3955
|
+
return selection.selectColumns(startColumn, endColumn, focusPosition);
|
3837
3956
|
};
|
3838
3957
|
|
3839
3958
|
/**
|
@@ -3843,8 +3962,12 @@ export default function Core(rootElement, userSettings) {
|
|
3843
3962
|
* ```js
|
3844
3963
|
* // Select row using visual index.
|
3845
3964
|
* hot.selectRows(1);
|
3846
|
-
* //
|
3965
|
+
* // select a range of rows, using visual indexes.
|
3847
3966
|
* hot.selectRows(1, 4);
|
3967
|
+
* // select a range of rows, using visual indexes, and mark the header as highlighted.
|
3968
|
+
* hot.selectRows(1, 2, -1);
|
3969
|
+
* // Select range of rows using visual indexes and mark the second cell as highlighted.
|
3970
|
+
* hot.selectRows(2, 1, 1);
|
3848
3971
|
* ```
|
3849
3972
|
*
|
3850
3973
|
* @memberof Core#
|
@@ -3853,11 +3976,15 @@ export default function Core(rootElement, userSettings) {
|
|
3853
3976
|
* @param {number} startRow The visual row index from which the selection starts.
|
3854
3977
|
* @param {number} [endRow=startRow] The visual row index to which the selection finishes. If `endRow`
|
3855
3978
|
* is not defined the row defined by `startRow` will be selected.
|
3979
|
+
* @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
|
3980
|
+
* The value can take visual column index from -N to N, where negative values
|
3981
|
+
* point to the headers and positive values point to the cell range.
|
3856
3982
|
* @returns {boolean} `true` if selection was successful, `false` otherwise.
|
3857
3983
|
*/
|
3858
3984
|
this.selectRows = function (startRow) {
|
3859
3985
|
let endRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startRow;
|
3860
|
-
|
3986
|
+
let focusPosition = arguments.length > 2 ? arguments[2] : undefined;
|
3987
|
+
return selection.selectRows(startRow, endRow, focusPosition);
|
3861
3988
|
};
|
3862
3989
|
|
3863
3990
|
/**
|
@@ -3876,9 +4003,16 @@ export default function Core(rootElement, userSettings) {
|
|
3876
4003
|
* The previous selection is overwritten.
|
3877
4004
|
*
|
3878
4005
|
* ```js
|
3879
|
-
* // select all cells in the table, including all headers
|
4006
|
+
* // select all cells in the table, including all headers and the corner cell
|
3880
4007
|
* hot.selectAll();
|
3881
4008
|
*
|
4009
|
+
* // select all cells in the table, including row headers but excluding the corner cell
|
4010
|
+
* hot.selectAll(true, false);
|
4011
|
+
*
|
4012
|
+
* // select all cells in the table, including all headers and the corner cell, but move the focus
|
4013
|
+
* // highlight to position -2, -1
|
4014
|
+
* hot.selectAll(-2, -1);
|
4015
|
+
*
|
3882
4016
|
* // select all cells in the table, without headers
|
3883
4017
|
* hot.selectAll(false);
|
3884
4018
|
* ```
|
@@ -3886,15 +4020,25 @@ export default function Core(rootElement, userSettings) {
|
|
3886
4020
|
* @since 0.38.2
|
3887
4021
|
* @memberof Core#
|
3888
4022
|
* @function selectAll
|
3889
|
-
* @param {boolean} [
|
3890
|
-
* `false
|
4023
|
+
* @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers,
|
4024
|
+
* `false` otherwise.
|
4025
|
+
* @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column
|
4026
|
+
* headers, `false` otherwise.
|
4027
|
+
*
|
4028
|
+
* @param {object} [options] Additional object with options.
|
4029
|
+
* @param {{row: number, col: number} | boolean} [options.focusPosition] The argument allows changing the cell/header
|
4030
|
+
* focus position. The value takes an object with a `row` and `col` properties from -N to N, where
|
4031
|
+
* negative values point to the headers and positive values point to the cell range. If `false`, the focus
|
4032
|
+
* position won't be changed.
|
4033
|
+
* @param {boolean} [options.disableHeadersHighlight] If `true`, disables highlighting the headers even when
|
4034
|
+
* the logical coordinates points on them.
|
3891
4035
|
*/
|
3892
4036
|
this.selectAll = function () {
|
3893
|
-
let
|
3894
|
-
|
3895
|
-
|
4037
|
+
let includeRowHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
4038
|
+
let includeColumnHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : includeRowHeaders;
|
4039
|
+
let options = arguments.length > 2 ? arguments[2] : undefined;
|
3896
4040
|
preventScrollingToCell = true;
|
3897
|
-
selection.selectAll(includeRowHeaders, includeColumnHeaders);
|
4041
|
+
selection.selectAll(includeRowHeaders, includeColumnHeaders, options);
|
3898
4042
|
preventScrollingToCell = false;
|
3899
4043
|
};
|
3900
4044
|
const getIndexToScroll = (indexMapper, visualIndex) => {
|
@@ -3903,55 +4047,117 @@ export default function Core(rootElement, userSettings) {
|
|
3903
4047
|
};
|
3904
4048
|
|
3905
4049
|
/**
|
3906
|
-
* Scroll viewport to coordinates specified by the `row` and `
|
4050
|
+
* Scroll viewport to coordinates specified by the `row` and/or `col` object properties.
|
4051
|
+
*
|
4052
|
+
* ```js
|
4053
|
+
* // scroll the viewport to the visual row index (leave the horizontal scroll untouched)
|
4054
|
+
* hot.scrollViewportTo({ row: 50 });
|
4055
|
+
*
|
4056
|
+
* // scroll the viewport to the passed coordinates so that the cell at 50, 50 will be snapped to
|
4057
|
+
* // the bottom-end table's edge.
|
4058
|
+
* hot.scrollViewportTo({
|
4059
|
+
* row: 50,
|
4060
|
+
* col: 50,
|
4061
|
+
* verticalSnap: 'bottom',
|
4062
|
+
* horizontalSnap: 'end',
|
4063
|
+
* });
|
4064
|
+
* ```
|
3907
4065
|
*
|
3908
4066
|
* @memberof Core#
|
3909
4067
|
* @function scrollViewportTo
|
3910
|
-
* @param {
|
3911
|
-
*
|
3912
|
-
* @param {number} [
|
3913
|
-
*
|
3914
|
-
*
|
3915
|
-
*
|
3916
|
-
*
|
3917
|
-
*
|
3918
|
-
*
|
4068
|
+
* @param {object} options A dictionary containing the following parameters:
|
4069
|
+
* @param {number} [options.row] Specifies the number of visual rows along the Y axis to scroll the viewport.
|
4070
|
+
* @param {number} [options.col] Specifies the number of visual columns along the X axis to scroll the viewport.
|
4071
|
+
* @param {'top' | 'bottom'} [options.verticalSnap] Determines to which edge of the table the viewport will be scrolled based on the passed coordinates.
|
4072
|
+
* This option is a string which must take one of the following values:
|
4073
|
+
* - `top`: The viewport will be scrolled to a row in such a way that it will be positioned on the top of the viewport;
|
4074
|
+
* - `bottom`: The viewport will be scrolled to a row in such a way that it will be positioned on the bottom of the viewport;
|
4075
|
+
* - If the property is not defined the vertical auto-snapping is enabled. Depending on where the viewport is scrolled from, a row will
|
4076
|
+
* be positioned at the top or bottom of the viewport.
|
4077
|
+
* @param {'start' | 'end'} [options.horizontalSnap] Determines to which edge of the table the viewport will be scrolled based on the passed coordinates.
|
4078
|
+
* This option is a string which must take one of the following values:
|
4079
|
+
* - `start`: The viewport will be scrolled to a column in such a way that it will be positioned on the start (left edge or right, if the layout direction is set to `rtl`) of the viewport;
|
4080
|
+
* - `end`: The viewport will be scrolled to a column in such a way that it will be positioned on the end (right edge or left, if the layout direction is set to `rtl`) of the viewport;
|
4081
|
+
* - If the property is not defined the horizontal auto-snapping is enabled. Depending on where the viewport is scrolled from, a column will
|
4082
|
+
* be positioned at the start or end of the viewport.
|
4083
|
+
* @param {boolean} [options.considerHiddenIndexes=true] If `true`, we handle visual indexes, otherwise we handle only indexes which
|
3919
4084
|
* may be rendered when they are in the viewport (we don't consider hidden indexes as they aren't rendered).
|
3920
|
-
* @returns {boolean} `true` if
|
3921
|
-
*/
|
3922
|
-
this.scrollViewportTo = function (
|
3923
|
-
let
|
3924
|
-
|
3925
|
-
|
3926
|
-
|
3927
|
-
|
4085
|
+
* @returns {boolean} `true` if viewport was scrolled, `false` otherwise.
|
4086
|
+
*/
|
4087
|
+
this.scrollViewportTo = function () {
|
4088
|
+
let {
|
4089
|
+
row,
|
4090
|
+
col,
|
4091
|
+
verticalSnap,
|
4092
|
+
horizontalSnap,
|
4093
|
+
considerHiddenIndexes
|
4094
|
+
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
4095
|
+
let snapToTop;
|
4096
|
+
let snapToBottom;
|
4097
|
+
let snapToInlineStart;
|
4098
|
+
let snapToInlineEnd;
|
4099
|
+
if (verticalSnap !== undefined) {
|
4100
|
+
snapToTop = verticalSnap === 'top';
|
4101
|
+
snapToBottom = !snapToTop;
|
4102
|
+
}
|
4103
|
+
if (horizontalSnap !== undefined) {
|
4104
|
+
snapToInlineStart = horizontalSnap === 'start';
|
4105
|
+
snapToInlineEnd = !snapToInlineStart;
|
4106
|
+
}
|
3928
4107
|
let renderableRow = row;
|
3929
|
-
let renderableColumn =
|
3930
|
-
if (considerHiddenIndexes) {
|
3931
|
-
const
|
3932
|
-
const
|
3933
|
-
const visualRowToScroll =
|
3934
|
-
const visualColumnToScroll =
|
4108
|
+
let renderableColumn = col;
|
4109
|
+
if (considerHiddenIndexes === undefined || considerHiddenIndexes) {
|
4110
|
+
const isValidRowGrid = Number.isInteger(row) && row >= 0;
|
4111
|
+
const isValidColumnGrid = Number.isInteger(col) && col >= 0;
|
4112
|
+
const visualRowToScroll = isValidRowGrid ? getIndexToScroll(this.rowIndexMapper, row) : undefined;
|
4113
|
+
const visualColumnToScroll = isValidColumnGrid ? getIndexToScroll(this.columnIndexMapper, col) : undefined;
|
3935
4114
|
if (visualRowToScroll === null || visualColumnToScroll === null) {
|
3936
4115
|
return false;
|
3937
4116
|
}
|
3938
|
-
renderableRow =
|
3939
|
-
renderableColumn =
|
4117
|
+
renderableRow = isValidRowGrid ? instance.rowIndexMapper.getRenderableFromVisualIndex(visualRowToScroll) : row;
|
4118
|
+
renderableColumn = isValidColumnGrid ? instance.columnIndexMapper.getRenderableFromVisualIndex(visualColumnToScroll) : col;
|
3940
4119
|
}
|
3941
4120
|
const isRowInteger = Number.isInteger(renderableRow);
|
3942
4121
|
const isColumnInteger = Number.isInteger(renderableColumn);
|
3943
|
-
if (isRowInteger && isColumnInteger) {
|
3944
|
-
return instance.view.scrollViewport(instance._createCellCoords(renderableRow, renderableColumn), snapToTop,
|
4122
|
+
if (isRowInteger && renderableRow >= 0 && isColumnInteger && renderableColumn >= 0) {
|
4123
|
+
return instance.view.scrollViewport(instance._createCellCoords(renderableRow, renderableColumn), snapToTop, snapToInlineEnd, snapToBottom, snapToInlineStart);
|
3945
4124
|
}
|
3946
|
-
if (isRowInteger && isColumnInteger
|
4125
|
+
if (isRowInteger && renderableRow >= 0 && (isColumnInteger && renderableColumn < 0 || !isColumnInteger)) {
|
3947
4126
|
return instance.view.scrollViewportVertically(renderableRow, snapToTop, snapToBottom);
|
3948
4127
|
}
|
3949
|
-
if (isColumnInteger && isRowInteger
|
3950
|
-
return instance.view.scrollViewportHorizontally(renderableColumn,
|
4128
|
+
if (isColumnInteger && renderableColumn >= 0 && (isRowInteger && renderableRow < 0 || !isRowInteger)) {
|
4129
|
+
return instance.view.scrollViewportHorizontally(renderableColumn, snapToInlineEnd, snapToInlineStart);
|
3951
4130
|
}
|
3952
4131
|
return false;
|
3953
4132
|
};
|
3954
4133
|
|
4134
|
+
/**
|
4135
|
+
* Scrolls the viewport to coordinates specified by the currently focused cell.
|
4136
|
+
*
|
4137
|
+
* @since 14.0.0
|
4138
|
+
* @memberof Core#
|
4139
|
+
* @fires Hooks#afterScroll
|
4140
|
+
* @function scrollToFocusedCell
|
4141
|
+
* @param {Function} callback The callback function to call after the viewport is scrolled.
|
4142
|
+
*/
|
4143
|
+
this.scrollToFocusedCell = function () {
|
4144
|
+
let callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : () => {};
|
4145
|
+
if (!this.selection.isSelected()) {
|
4146
|
+
return;
|
4147
|
+
}
|
4148
|
+
this.addHookOnce('afterScroll', callback);
|
4149
|
+
const {
|
4150
|
+
highlight
|
4151
|
+
} = this.getSelectedRangeLast();
|
4152
|
+
const isScrolled = this.scrollViewportTo(highlight.toObject());
|
4153
|
+
if (isScrolled) {
|
4154
|
+
this.view.render();
|
4155
|
+
} else {
|
4156
|
+
this.removeHook('afterScroll', callback);
|
4157
|
+
this._registerImmediate(() => callback());
|
4158
|
+
}
|
4159
|
+
};
|
4160
|
+
|
3955
4161
|
/**
|
3956
4162
|
* Removes the table from the DOM and destroys the instance of the Handsontable.
|
3957
4163
|
*
|
@@ -3972,6 +4178,7 @@ export default function Core(rootElement, userSettings) {
|
|
3972
4178
|
dataSource = null;
|
3973
4179
|
this.getShortcutManager().destroy();
|
3974
4180
|
metaManager.clearCache();
|
4181
|
+
foreignHotInstances.delete(this.guid);
|
3975
4182
|
if (isRootInstance(instance)) {
|
3976
4183
|
const licenseInfo = this.rootDocument.querySelector('.hot-display-license-info');
|
3977
4184
|
if (licenseInfo) {
|
@@ -4196,7 +4403,7 @@ export default function Core(rootElement, userSettings) {
|
|
4196
4403
|
* @function getTranslatedPhrase
|
4197
4404
|
* @since 0.35.0
|
4198
4405
|
* @param {string} dictionaryKey Constant which is dictionary key.
|
4199
|
-
* @param {*} extraArguments Arguments which will be handled by formatters.
|
4406
|
+
* @param {*} [extraArguments] Arguments which will be handled by formatters.
|
4200
4407
|
* @returns {string}
|
4201
4408
|
*/
|
4202
4409
|
this.getTranslatedPhrase = function (dictionaryKey, extraArguments) {
|
@@ -4295,6 +4502,16 @@ export default function Core(rootElement, userSettings) {
|
|
4295
4502
|
}
|
4296
4503
|
};
|
4297
4504
|
|
4505
|
+
/**
|
4506
|
+
* Gets the instance of the EditorManager.
|
4507
|
+
*
|
4508
|
+
* @private
|
4509
|
+
* @returns {EditorManager}
|
4510
|
+
*/
|
4511
|
+
this._getEditorManager = function () {
|
4512
|
+
return editorManager;
|
4513
|
+
};
|
4514
|
+
|
4298
4515
|
/**
|
4299
4516
|
* Check if currently it is RTL direction.
|
4300
4517
|
*
|
@@ -4331,10 +4548,8 @@ export default function Core(rootElement, userSettings) {
|
|
4331
4548
|
return instance.isLtr() ? 1 : -1;
|
4332
4549
|
};
|
4333
4550
|
const shortcutManager = createShortcutManager({
|
4334
|
-
handleEvent(
|
4335
|
-
|
4336
|
-
const isKeyboardEventWithKey = (event === null || event === void 0 ? void 0 : event.key) !== void 0;
|
4337
|
-
return isListening && isKeyboardEventWithKey;
|
4551
|
+
handleEvent() {
|
4552
|
+
return instance.isListening();
|
4338
4553
|
},
|
4339
4554
|
beforeKeyDown: event => {
|
4340
4555
|
return this.runHooks('beforeKeyDown', event);
|
@@ -4367,270 +4582,23 @@ export default function Core(rootElement, userSettings) {
|
|
4367
4582
|
this.getShortcutManager = function () {
|
4368
4583
|
return shortcutManager;
|
4369
4584
|
};
|
4370
|
-
|
4371
|
-
|
4372
|
-
|
4373
|
-
|
4374
|
-
|
4375
|
-
|
4585
|
+
|
4586
|
+
/**
|
4587
|
+
* Return the Focus Manager responsible for managing the browser's focus in the table.
|
4588
|
+
*
|
4589
|
+
* @memberof Core#
|
4590
|
+
* @since 14.0.0
|
4591
|
+
* @function getFocusManager
|
4592
|
+
* @returns {FocusManager}
|
4593
|
+
*/
|
4594
|
+
this.getFocusManager = function () {
|
4595
|
+
return focusManager;
|
4376
4596
|
};
|
4377
|
-
shortcutManager.setActiveContextName('grid');
|
4378
|
-
gridContext.addShortcuts([{
|
4379
|
-
keys: [['Control/Meta', 'A']],
|
4380
|
-
callback: () => {
|
4381
|
-
instance.selectAll();
|
4382
|
-
}
|
4383
|
-
}, {
|
4384
|
-
keys: [['Control/Meta', 'Enter']],
|
4385
|
-
callback: () => {
|
4386
|
-
const selectedRange = instance.getSelectedRange();
|
4387
|
-
const {
|
4388
|
-
row: highlightRow,
|
4389
|
-
col: highlightColumn
|
4390
|
-
} = selectedRange[selectedRange.length - 1].highlight;
|
4391
|
-
const valueToPopulate = instance.getDataAtCell(highlightRow, highlightColumn);
|
4392
|
-
const cellValues = new Map();
|
4393
|
-
for (let i = 0; i < selectedRange.length; i++) {
|
4394
|
-
selectedRange[i].forAll((row, column) => {
|
4395
|
-
if (row >= 0 && column >= 0 && (row !== highlightRow || column !== highlightColumn)) {
|
4396
|
-
const {
|
4397
|
-
readOnly
|
4398
|
-
} = instance.getCellMeta(row, column);
|
4399
|
-
if (!readOnly) {
|
4400
|
-
cellValues.set(`${row}x${column}`, [row, column, valueToPopulate]);
|
4401
|
-
}
|
4402
|
-
}
|
4403
|
-
});
|
4404
|
-
}
|
4405
|
-
instance.setDataAtCell(Array.from(cellValues.values()));
|
4406
|
-
},
|
4407
|
-
runOnlyIf: () => instance.getSelectedRangeLast().getCellsCount() > 1
|
4408
|
-
}, {
|
4409
|
-
keys: [['ArrowUp']],
|
4410
|
-
callback: () => {
|
4411
|
-
selection.transformStart(-1, 0);
|
4412
|
-
}
|
4413
|
-
}, {
|
4414
|
-
keys: [['ArrowUp', 'Control/Meta']],
|
4415
|
-
captureCtrl: true,
|
4416
|
-
callback: () => {
|
4417
|
-
selection.setRangeStart(instance._createCellCoords(instance.rowIndexMapper.getNearestNotHiddenIndex(0, 1), instance.getSelectedRangeLast().highlight.col));
|
4418
|
-
}
|
4419
|
-
}, {
|
4420
|
-
keys: [['ArrowUp', 'Shift']],
|
4421
|
-
callback: () => {
|
4422
|
-
selection.transformEnd(-1, 0);
|
4423
|
-
}
|
4424
|
-
}, {
|
4425
|
-
keys: [['ArrowUp', 'Shift', 'Control/Meta']],
|
4426
|
-
captureCtrl: true,
|
4427
|
-
callback: () => {
|
4428
|
-
const {
|
4429
|
-
from,
|
4430
|
-
to
|
4431
|
-
} = instance.getSelectedRangeLast();
|
4432
|
-
const row = instance.rowIndexMapper.getNearestNotHiddenIndex(0, 1);
|
4433
|
-
selection.setRangeStart(from.clone());
|
4434
|
-
selection.setRangeEnd(instance._createCellCoords(row, to.col));
|
4435
|
-
},
|
4436
|
-
runOnlyIf: () => !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByColumnHeader())
|
4437
|
-
}, {
|
4438
|
-
keys: [['ArrowDown']],
|
4439
|
-
callback: () => {
|
4440
|
-
selection.transformStart(1, 0);
|
4441
|
-
}
|
4442
|
-
}, {
|
4443
|
-
keys: [['ArrowDown', 'Control/Meta']],
|
4444
|
-
captureCtrl: true,
|
4445
|
-
callback: () => {
|
4446
|
-
selection.setRangeStart(instance._createCellCoords(instance.rowIndexMapper.getNearestNotHiddenIndex(instance.countRows() - 1, -1), instance.getSelectedRangeLast().highlight.col));
|
4447
|
-
}
|
4448
|
-
}, {
|
4449
|
-
keys: [['ArrowDown', 'Shift']],
|
4450
|
-
callback: () => {
|
4451
|
-
selection.transformEnd(1, 0);
|
4452
|
-
}
|
4453
|
-
}, {
|
4454
|
-
keys: [['ArrowDown', 'Shift', 'Control/Meta']],
|
4455
|
-
captureCtrl: true,
|
4456
|
-
callback: () => {
|
4457
|
-
const {
|
4458
|
-
from,
|
4459
|
-
to
|
4460
|
-
} = instance.getSelectedRangeLast();
|
4461
|
-
const row = instance.rowIndexMapper.getNearestNotHiddenIndex(instance.countRows() - 1, -1);
|
4462
|
-
selection.setRangeStart(from.clone());
|
4463
|
-
selection.setRangeEnd(instance._createCellCoords(row, to.col));
|
4464
|
-
},
|
4465
|
-
runOnlyIf: () => !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByColumnHeader())
|
4466
|
-
}, {
|
4467
|
-
keys: [['ArrowLeft']],
|
4468
|
-
callback: () => {
|
4469
|
-
selection.transformStart(0, -1 * instance.getDirectionFactor());
|
4470
|
-
}
|
4471
|
-
}, {
|
4472
|
-
keys: [['ArrowLeft', 'Control/Meta']],
|
4473
|
-
captureCtrl: true,
|
4474
|
-
callback: () => {
|
4475
|
-
const row = instance.getSelectedRangeLast().highlight.row;
|
4476
|
-
const column = instance.columnIndexMapper.getNearestNotHiddenIndex(...(instance.isRtl() ? [instance.countCols() - 1, -1] : [0, 1]));
|
4477
|
-
selection.setRangeStart(instance._createCellCoords(row, column));
|
4478
|
-
}
|
4479
|
-
}, {
|
4480
|
-
keys: [['ArrowLeft', 'Shift']],
|
4481
|
-
callback: () => {
|
4482
|
-
selection.transformEnd(0, -1 * instance.getDirectionFactor());
|
4483
|
-
}
|
4484
|
-
}, {
|
4485
|
-
keys: [['ArrowLeft', 'Shift', 'Control/Meta']],
|
4486
|
-
captureCtrl: true,
|
4487
|
-
callback: () => {
|
4488
|
-
const {
|
4489
|
-
from,
|
4490
|
-
to
|
4491
|
-
} = instance.getSelectedRangeLast();
|
4492
|
-
const column = instance.columnIndexMapper.getNearestNotHiddenIndex(...(instance.isRtl() ? [instance.countCols() - 1, -1] : [0, 1]));
|
4493
|
-
selection.setRangeStart(from.clone());
|
4494
|
-
selection.setRangeEnd(instance._createCellCoords(to.row, column));
|
4495
|
-
},
|
4496
|
-
runOnlyIf: () => !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByRowHeader())
|
4497
|
-
}, {
|
4498
|
-
keys: [['ArrowRight']],
|
4499
|
-
callback: () => {
|
4500
|
-
selection.transformStart(0, instance.getDirectionFactor());
|
4501
|
-
}
|
4502
|
-
}, {
|
4503
|
-
keys: [['ArrowRight', 'Control/Meta']],
|
4504
|
-
captureCtrl: true,
|
4505
|
-
callback: () => {
|
4506
|
-
const row = instance.getSelectedRangeLast().highlight.row;
|
4507
|
-
const column = instance.columnIndexMapper.getNearestNotHiddenIndex(...(instance.isRtl() ? [0, 1] : [instance.countCols() - 1, -1]));
|
4508
|
-
selection.setRangeStart(instance._createCellCoords(row, column));
|
4509
|
-
}
|
4510
|
-
}, {
|
4511
|
-
keys: [['ArrowRight', 'Shift']],
|
4512
|
-
callback: () => {
|
4513
|
-
selection.transformEnd(0, instance.getDirectionFactor());
|
4514
|
-
}
|
4515
|
-
}, {
|
4516
|
-
keys: [['ArrowRight', 'Shift', 'Control/Meta']],
|
4517
|
-
captureCtrl: true,
|
4518
|
-
callback: () => {
|
4519
|
-
const {
|
4520
|
-
from,
|
4521
|
-
to
|
4522
|
-
} = instance.getSelectedRangeLast();
|
4523
|
-
const column = instance.columnIndexMapper.getNearestNotHiddenIndex(...(instance.isRtl() ? [0, 1] : [instance.countCols() - 1, -1]));
|
4524
|
-
selection.setRangeStart(from.clone());
|
4525
|
-
selection.setRangeEnd(instance._createCellCoords(to.row, column));
|
4526
|
-
},
|
4527
|
-
runOnlyIf: () => !(instance.selection.isSelectedByCorner() || instance.selection.isSelectedByRowHeader())
|
4528
|
-
}, {
|
4529
|
-
keys: [['Home']],
|
4530
|
-
captureCtrl: true,
|
4531
|
-
callback: () => {
|
4532
|
-
const fixedColumns = parseInt(instance.getSettings().fixedColumnsStart, 10);
|
4533
|
-
const row = instance.getSelectedRangeLast().highlight.row;
|
4534
|
-
const column = instance.columnIndexMapper.getNearestNotHiddenIndex(fixedColumns, 1);
|
4535
|
-
selection.setRangeStart(instance._createCellCoords(row, column));
|
4536
|
-
},
|
4537
|
-
runOnlyIf: () => instance.view.isMainTableNotFullyCoveredByOverlays()
|
4538
|
-
}, {
|
4539
|
-
keys: [['Home', 'Shift']],
|
4540
|
-
callback: () => {
|
4541
|
-
selection.setRangeEnd(instance._createCellCoords(selection.selectedRange.current().from.row, instance.columnIndexMapper.getNearestNotHiddenIndex(0, 1)));
|
4542
|
-
}
|
4543
|
-
}, {
|
4544
|
-
keys: [['Home', 'Control/Meta']],
|
4545
|
-
captureCtrl: true,
|
4546
|
-
callback: () => {
|
4547
|
-
const fixedRows = parseInt(instance.getSettings().fixedRowsTop, 10);
|
4548
|
-
const fixedColumns = parseInt(instance.getSettings().fixedColumnsStart, 10);
|
4549
|
-
const row = instance.rowIndexMapper.getNearestNotHiddenIndex(fixedRows, 1);
|
4550
|
-
const column = instance.columnIndexMapper.getNearestNotHiddenIndex(fixedColumns, 1);
|
4551
|
-
selection.setRangeStart(instance._createCellCoords(row, column));
|
4552
|
-
},
|
4553
|
-
runOnlyIf: () => instance.view.isMainTableNotFullyCoveredByOverlays()
|
4554
|
-
}, {
|
4555
|
-
keys: [['End']],
|
4556
|
-
captureCtrl: true,
|
4557
|
-
callback: () => {
|
4558
|
-
selection.setRangeStart(instance._createCellCoords(instance.getSelectedRangeLast().highlight.row, instance.columnIndexMapper.getNearestNotHiddenIndex(instance.countCols() - 1, -1)));
|
4559
|
-
},
|
4560
|
-
runOnlyIf: () => instance.view.isMainTableNotFullyCoveredByOverlays()
|
4561
|
-
}, {
|
4562
|
-
keys: [['End', 'Shift']],
|
4563
|
-
callback: () => {
|
4564
|
-
selection.setRangeEnd(instance._createCellCoords(selection.selectedRange.current().from.row, instance.columnIndexMapper.getNearestNotHiddenIndex(instance.countCols() - 1, -1)));
|
4565
|
-
}
|
4566
|
-
}, {
|
4567
|
-
keys: [['End', 'Control/Meta']],
|
4568
|
-
captureCtrl: true,
|
4569
|
-
callback: () => {
|
4570
|
-
const fixedRows = parseInt(instance.getSettings().fixedRowsBottom, 10);
|
4571
|
-
const row = instance.rowIndexMapper.getNearestNotHiddenIndex(instance.countRows() - fixedRows - 1, -1);
|
4572
|
-
const column = instance.columnIndexMapper.getNearestNotHiddenIndex(instance.countCols() - 1, -1);
|
4573
|
-
selection.setRangeStart(instance._createCellCoords(row, column));
|
4574
|
-
},
|
4575
|
-
runOnlyIf: () => instance.view.isMainTableNotFullyCoveredByOverlays()
|
4576
|
-
}, {
|
4577
|
-
keys: [['PageUp']],
|
4578
|
-
callback: () => {
|
4579
|
-
selection.transformStart(-instance.countVisibleRows(), 0);
|
4580
|
-
}
|
4581
|
-
}, {
|
4582
|
-
keys: [['PageUp', 'Shift']],
|
4583
|
-
callback: () => {
|
4584
|
-
const {
|
4585
|
-
to
|
4586
|
-
} = instance.getSelectedRangeLast();
|
4587
|
-
const nextRowIndexToSelect = Math.max(to.row - instance.countVisibleRows(), 0);
|
4588
|
-
const row = instance.rowIndexMapper.getNearestNotHiddenIndex(nextRowIndexToSelect, 1);
|
4589
|
-
if (row !== null) {
|
4590
|
-
const coords = instance._createCellCoords(row, to.col);
|
4591
|
-
const scrollPadding = to.row - instance.view.getFirstFullyVisibleRow();
|
4592
|
-
const nextVerticalScroll = Math.max(coords.row - scrollPadding, 0);
|
4593
|
-
selection.setRangeEnd(coords);
|
4594
|
-
instance.scrollViewportTo(nextVerticalScroll);
|
4595
|
-
}
|
4596
|
-
}
|
4597
|
-
}, {
|
4598
|
-
keys: [['PageDown']],
|
4599
|
-
callback: () => {
|
4600
|
-
selection.transformStart(instance.countVisibleRows(), 0);
|
4601
|
-
}
|
4602
|
-
}, {
|
4603
|
-
keys: [['PageDown', 'Shift']],
|
4604
|
-
callback: () => {
|
4605
|
-
const {
|
4606
|
-
to
|
4607
|
-
} = instance.getSelectedRangeLast();
|
4608
|
-
const nextRowIndexToSelect = Math.min(to.row + instance.countVisibleRows(), instance.countRows() - 1);
|
4609
|
-
const row = instance.rowIndexMapper.getNearestNotHiddenIndex(nextRowIndexToSelect, -1);
|
4610
|
-
if (row !== null) {
|
4611
|
-
const coords = instance._createCellCoords(row, to.col);
|
4612
|
-
const scrollPadding = to.row - instance.view.getFirstFullyVisibleRow();
|
4613
|
-
const nextVerticalScroll = Math.min(coords.row - scrollPadding, instance.countRows() - 1);
|
4614
|
-
selection.setRangeEnd(coords);
|
4615
|
-
instance.scrollViewportTo(nextVerticalScroll);
|
4616
|
-
}
|
4617
|
-
}
|
4618
|
-
}, {
|
4619
|
-
keys: [['Tab']],
|
4620
|
-
callback: event => {
|
4621
|
-
const tabMoves = typeof tableMeta.tabMoves === 'function' ? tableMeta.tabMoves(event) : tableMeta.tabMoves;
|
4622
|
-
selection.transformStart(tabMoves.row, tabMoves.col, true);
|
4623
|
-
}
|
4624
|
-
}, {
|
4625
|
-
keys: [['Shift', 'Tab']],
|
4626
|
-
callback: event => {
|
4627
|
-
const tabMoves = typeof tableMeta.tabMoves === 'function' ? tableMeta.tabMoves(event) : tableMeta.tabMoves;
|
4628
|
-
selection.transformStart(-tabMoves.row, -tabMoves.col);
|
4629
|
-
}
|
4630
|
-
}], gridConfig);
|
4631
4597
|
getPluginsNames().forEach(pluginName => {
|
4632
4598
|
const PluginClass = getPlugin(pluginName);
|
4633
4599
|
pluginsRegistry.addItem(pluginName, new PluginClass(this));
|
4634
4600
|
});
|
4601
|
+
registerAllShortcutContexts(instance);
|
4602
|
+
shortcutManager.setActiveContextName('grid');
|
4635
4603
|
Hooks.getSingleton().run(instance, 'construct');
|
4636
4604
|
}
|