handsontable 0.0.0-next-9059914-20231025 → 0.0.0-next-cecf979-20231026
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 +12 -10
- 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/index.js +10 -2
- 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/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/renderer/cells.js +10 -0
- package/3rdparty/walkontable/src/renderer/cells.mjs +11 -1
- package/3rdparty/walkontable/src/renderer/columnHeaders.js +10 -0
- package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +11 -1
- package/3rdparty/walkontable/src/renderer/rowHeaders.js +5 -0
- package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +5 -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 +2 -0
- package/3rdparty/walkontable/src/scroll.mjs +2 -0
- 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 +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 +101 -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/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 +19 -78
- package/3rdparty/walkontable/src/table.mjs +20 -79
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/cellTypes/dateType/dateType.d.ts +3 -3
- package/cellTypes/dateType/dateType.js +2 -2
- package/cellTypes/dateType/dateType.mjs +2 -2
- package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
- package/cellTypes/handsontableType/handsontableType.js +2 -2
- package/cellTypes/handsontableType/handsontableType.mjs +2 -2
- package/cellTypes/index.d.ts +3 -0
- package/cellTypes/index.js +4 -0
- package/cellTypes/index.mjs +3 -1
- 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 +13 -0
- package/cellTypes/selectType/selectType.mjs +8 -0
- package/core/focusCatcher/focusDetector.js +63 -0
- package/core/focusCatcher/focusDetector.mjs +59 -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 +9 -4
- package/core.js +285 -327
- package/core.mjs +285 -327
- 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 +51 -15
- package/dist/handsontable.full.css +51 -15
- package/dist/handsontable.full.js +13360 -7840
- package/dist/handsontable.full.min.css +7 -7
- package/dist/handsontable.full.min.js +136 -136
- package/dist/handsontable.js +20955 -15435
- package/dist/handsontable.min.css +6 -6
- package/dist/handsontable.min.js +24 -24
- package/dist/languages/all.js +6 -2
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/en-US.js +3 -1
- package/dist/languages/en-US.min.js +1 -1
- package/dist/languages/pl-PL.js +3 -1
- package/dist/languages/pl-PL.min.js +1 -1
- package/editorManager.js +15 -87
- package/editorManager.mjs +16 -87
- package/editors/autocompleteEditor/autocompleteEditor.js +53 -2
- package/editors/autocompleteEditor/autocompleteEditor.mjs +54 -3
- package/editors/dateEditor/dateEditor.js +26 -7
- package/editors/dateEditor/dateEditor.mjs +27 -8
- package/editors/handsontableEditor/handsontableEditor.js +9 -1
- package/editors/handsontableEditor/handsontableEditor.mjs +10 -2
- package/editors/textEditor/textEditor.js +19 -27
- package/editors/textEditor/textEditor.mjs +22 -30
- package/focusManager.d.ts +12 -0
- package/focusManager.js +265 -0
- package/focusManager.mjs +261 -0
- package/helpers/a11y.js +79 -0
- package/helpers/a11y.mjs +38 -0
- package/helpers/dom/element.js +188 -9
- package/helpers/dom/element.mjs +182 -9
- 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/i18n/constants.js +7 -1
- package/i18n/constants.mjs +4 -1
- package/i18n/languages/en-US.js +3 -1
- package/i18n/languages/en-US.mjs +3 -1
- package/i18n/languages/pl-PL.js +3 -1
- package/i18n/languages/pl-PL.mjs +3 -1
- package/languages/all.js +6 -2
- package/languages/en-US.js +3 -1
- package/languages/en-US.mjs +3 -1
- package/languages/index.js +6 -2
- package/languages/pl-PL.js +3 -1
- package/languages/pl-PL.mjs +3 -1
- package/package.json +21 -1
- package/pluginHooks.d.ts +12 -1
- package/pluginHooks.js +152 -1
- package/pluginHooks.mjs +152 -1
- package/plugins/collapsibleColumns/collapsibleColumns.js +74 -4
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +75 -5
- package/plugins/columnSorting/columnSorting.js +43 -0
- package/plugins/columnSorting/columnSorting.mjs +44 -3
- 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 +252 -189
- 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/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 +75 -36
- 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 +58 -0
- package/plugins/contextMenu/menu/menuItemRenderer.mjs +54 -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 +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.js → predefinedItems/index.js} +14 -14
- package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
- 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 +35 -151
- package/plugins/contextMenu/utils.mjs +35 -144
- 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 +127 -78
- package/plugins/copyPaste/copyPaste.mjs +128 -79
- 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 +127 -40
- package/plugins/dropdownMenu/dropdownMenu.mjs +126 -39
- package/plugins/filters/component/_base.js +23 -8
- package/plugins/filters/component/_base.mjs +23 -8
- package/plugins/filters/component/actionBar.js +29 -27
- package/plugins/filters/component/actionBar.mjs +26 -23
- package/plugins/filters/component/condition.js +46 -59
- package/plugins/filters/component/condition.mjs +40 -52
- package/plugins/filters/component/operators.js +21 -22
- package/plugins/filters/component/operators.mjs +18 -18
- package/plugins/filters/component/value.js +35 -26
- package/plugins/filters/component/value.mjs +32 -22
- package/plugins/filters/constants.mjs +1 -1
- package/plugins/filters/filters.js +106 -62
- package/plugins/filters/filters.mjs +99 -55
- package/plugins/filters/menu/focusController.js +123 -0
- package/plugins/filters/menu/focusController.mjs +119 -0
- package/plugins/filters/menu/focusNavigator.js +30 -0
- package/plugins/filters/menu/focusNavigator.mjs +26 -0
- package/plugins/filters/ui/_base.js +35 -13
- package/plugins/filters/ui/_base.mjs +35 -13
- package/plugins/filters/ui/input.js +43 -32
- package/plugins/filters/ui/input.mjs +42 -30
- package/plugins/filters/ui/link.js +44 -12
- package/plugins/filters/ui/link.mjs +44 -11
- package/plugins/filters/ui/multipleSelect.js +234 -129
- package/plugins/filters/ui/multipleSelect.mjs +232 -127
- package/plugins/filters/ui/radioInput.js +42 -18
- package/plugins/filters/ui/radioInput.mjs +42 -17
- package/plugins/filters/ui/select.js +144 -75
- package/plugins/filters/ui/select.mjs +142 -72
- package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
- package/plugins/hiddenRows/hiddenRows.mjs +1 -1
- package/plugins/manualColumnMove/manualColumnMove.js +3 -1
- package/plugins/manualColumnMove/manualColumnMove.mjs +3 -1
- package/plugins/mergeCells/mergeCells.js +5 -16
- package/plugins/mergeCells/mergeCells.mjs +5 -16
- package/plugins/multiColumnSorting/multiColumnSorting.js +37 -2
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +37 -2
- package/plugins/nestedHeaders/nestedHeaders.js +240 -10
- package/plugins/nestedHeaders/nestedHeaders.mjs +241 -11
- package/plugins/nestedHeaders/stateManager/index.js +102 -3
- package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
- package/plugins/nestedRows/nestedRows.js +41 -0
- package/plugins/nestedRows/nestedRows.mjs +41 -0
- package/plugins/nestedRows/ui/headers.js +11 -0
- package/plugins/nestedRows/ui/headers.mjs +12 -1
- package/renderers/autocompleteRenderer/autocompleteRenderer.js +8 -0
- package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
- package/renderers/baseRenderer/baseRenderer.js +17 -0
- package/renderers/baseRenderer/baseRenderer.mjs +18 -1
- package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
- package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
- package/renderers/dateRenderer/dateRenderer.js +29 -0
- package/renderers/dateRenderer/dateRenderer.mjs +24 -0
- package/renderers/dateRenderer/index.d.ts +1 -0
- package/renderers/dateRenderer/index.js +6 -0
- package/renderers/dateRenderer/index.mjs +1 -0
- package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
- package/renderers/handsontableRenderer/handsontableRenderer.js +29 -0
- package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
- package/renderers/handsontableRenderer/index.d.ts +1 -0
- package/renderers/handsontableRenderer/index.js +6 -0
- package/renderers/handsontableRenderer/index.mjs +1 -0
- package/renderers/index.d.ts +9 -0
- 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 +27 -0
- package/renderers/selectRenderer/selectRenderer.mjs +22 -0
- 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 +7 -1
- package/selection/mouseEventHandler.mjs +7 -1
- package/selection/range.js +8 -8
- package/selection/range.mjs +8 -8
- package/selection/selection.js +321 -152
- package/selection/selection.mjs +318 -151
- 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 +4 -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 +25 -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 +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 +25 -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 +13 -0
- package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +33 -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 +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 +33 -0
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
- package/shortcutContexts/commands/populateSelectedCellsData.js +29 -0
- package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
- package/shortcutContexts/commands/scrollToFocusedCell.js +35 -0
- package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
- package/shortcutContexts/commands/selectAll.js +12 -0
- package/shortcutContexts/commands/selectAll.mjs +8 -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/context.d.ts +1 -0
- package/shortcuts/context.js +23 -4
- package/shortcuts/context.mjs +23 -5
- package/shortcuts/manager.js +25 -7
- package/shortcuts/manager.mjs +26 -7
- package/shortcuts/recorder.js +3 -3
- package/shortcuts/recorder.mjs +3 -3
- package/shortcuts/utils.js +19 -5
- package/shortcuts/utils.mjs +18 -4
- package/tableView.js +111 -13
- package/tableView.mjs +112 -14
- package/utils/paginator.js +151 -0
- package/utils/paginator.mjs +147 -0
- package/3rdparty/walkontable/src/selection.js +0 -295
- package/3rdparty/walkontable/src/selection.mjs +0 -290
- package/plugins/contextMenu/predefinedItems.mjs +0 -68
- package/plugins/copyPaste/focusableElement.js +0 -186
- package/plugins/copyPaste/focusableElement.mjs +0 -180
- 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,295 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
exports.__esModule = true;
|
4
|
-
require("core-js/modules/es.array.push.js");
|
5
|
-
var _element = require("./../../../helpers/dom/element");
|
6
|
-
var _border = _interopRequireDefault(require("./border"));
|
7
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
8
|
-
/**
|
9
|
-
* @class Selection
|
10
|
-
*/
|
11
|
-
class Selection {
|
12
|
-
/**
|
13
|
-
* @param {object} settings The selection settings object. @todo type.
|
14
|
-
* @param {CellRange} cellRange The cell range instance.
|
15
|
-
*/
|
16
|
-
constructor(settings, cellRange) {
|
17
|
-
this.settings = settings;
|
18
|
-
this.cellRange = cellRange || null;
|
19
|
-
this.instanceBorders = {};
|
20
|
-
this.classNames = [this.settings.className];
|
21
|
-
this.classNameGenerator = this.linearClassNameGenerator(this.settings.className, this.settings.layerLevel);
|
22
|
-
}
|
23
|
-
|
24
|
-
/**
|
25
|
-
* Each Walkontable clone requires it's own border for every selection. This method creates and returns selection
|
26
|
-
* borders per instance.
|
27
|
-
*
|
28
|
-
* @param {WalkontableFacade} wotInstance The Walkontable instance.
|
29
|
-
* @returns {Border}
|
30
|
-
*/
|
31
|
-
getBorder(wotInstance) {
|
32
|
-
if (!this.instanceBorders[wotInstance.guid]) {
|
33
|
-
this.instanceBorders[wotInstance.guid] = new _border.default(wotInstance, this.settings);
|
34
|
-
}
|
35
|
-
return this.instanceBorders[wotInstance.guid];
|
36
|
-
}
|
37
|
-
|
38
|
-
/**
|
39
|
-
* Checks if selection is empty.
|
40
|
-
*
|
41
|
-
* @returns {boolean}
|
42
|
-
*/
|
43
|
-
isEmpty() {
|
44
|
-
return this.cellRange === null;
|
45
|
-
}
|
46
|
-
|
47
|
-
/**
|
48
|
-
* Adds a cell coords to the selection.
|
49
|
-
*
|
50
|
-
* @param {CellCoords} coords The cell coordinates to add.
|
51
|
-
* @returns {Selection}
|
52
|
-
*/
|
53
|
-
add(coords) {
|
54
|
-
if (this.isEmpty()) {
|
55
|
-
this.cellRange = this.settings.createCellRange(coords);
|
56
|
-
} else {
|
57
|
-
this.cellRange.expand(coords);
|
58
|
-
}
|
59
|
-
return this;
|
60
|
-
}
|
61
|
-
|
62
|
-
/**
|
63
|
-
* If selection range from or to property equals oldCoords, replace it with newCoords. Return boolean
|
64
|
-
* information about success.
|
65
|
-
*
|
66
|
-
* @param {CellCoords} oldCoords An old cell coordinates to replace.
|
67
|
-
* @param {CellCoords} newCoords The new cell coordinates.
|
68
|
-
* @returns {boolean}
|
69
|
-
*/
|
70
|
-
replace(oldCoords, newCoords) {
|
71
|
-
if (!this.isEmpty()) {
|
72
|
-
if (this.cellRange.from.isEqual(oldCoords)) {
|
73
|
-
this.cellRange.from = newCoords;
|
74
|
-
return true;
|
75
|
-
}
|
76
|
-
if (this.cellRange.to.isEqual(oldCoords)) {
|
77
|
-
this.cellRange.to = newCoords;
|
78
|
-
return true;
|
79
|
-
}
|
80
|
-
}
|
81
|
-
return false;
|
82
|
-
}
|
83
|
-
|
84
|
-
/**
|
85
|
-
* Clears selection.
|
86
|
-
*
|
87
|
-
* @returns {Selection}
|
88
|
-
*/
|
89
|
-
clear() {
|
90
|
-
this.cellRange = null;
|
91
|
-
return this;
|
92
|
-
}
|
93
|
-
|
94
|
-
/**
|
95
|
-
* Returns the top left (or top right in RTL) and bottom right (or bottom left in RTL) selection coordinates.
|
96
|
-
*
|
97
|
-
* @returns {Array} Returns array of coordinates for example `[1, 1, 5, 5]`.
|
98
|
-
*/
|
99
|
-
getCorners() {
|
100
|
-
const topStart = this.cellRange.getOuterTopStartCorner();
|
101
|
-
const bottomEnd = this.cellRange.getOuterBottomEndCorner();
|
102
|
-
return [topStart.row, topStart.col, bottomEnd.row, bottomEnd.col];
|
103
|
-
}
|
104
|
-
|
105
|
-
/**
|
106
|
-
* Adds class name to cell element at given coords.
|
107
|
-
*
|
108
|
-
* @param {WalkontableFacade} wotInstance Walkontable instance.
|
109
|
-
* @param {number} sourceRow Cell row coord.
|
110
|
-
* @param {number} sourceColumn Cell column coord.
|
111
|
-
* @param {string} className Class name.
|
112
|
-
* @param {boolean} [markIntersections=false] If `true`, linear className generator will be used to add CSS classes
|
113
|
-
* in a continuous way.
|
114
|
-
* @returns {Selection}
|
115
|
-
*/
|
116
|
-
addClassAtCoords(wotInstance, sourceRow, sourceColumn, className) {
|
117
|
-
let markIntersections = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
118
|
-
const TD = wotInstance.wtTable.getCell(this.settings.createCellCoords(sourceRow, sourceColumn));
|
119
|
-
if (typeof TD === 'object') {
|
120
|
-
let cellClassName = className;
|
121
|
-
if (markIntersections) {
|
122
|
-
cellClassName = this.classNameGenerator(TD);
|
123
|
-
if (!this.classNames.includes(cellClassName)) {
|
124
|
-
this.classNames.push(cellClassName);
|
125
|
-
}
|
126
|
-
}
|
127
|
-
(0, _element.addClass)(TD, cellClassName);
|
128
|
-
}
|
129
|
-
return this;
|
130
|
-
}
|
131
|
-
|
132
|
-
/**
|
133
|
-
* Generate helper for calculating classNames based on previously added base className.
|
134
|
-
* The generated className is always generated as a continuation of the previous className. For example, when
|
135
|
-
* the currently checked element has 'area-2' className the generated new className will be 'area-3'. When
|
136
|
-
* the element doesn't have any classNames than the base className will be returned ('area');.
|
137
|
-
*
|
138
|
-
* @param {string} baseClassName Base className to be used.
|
139
|
-
* @param {number} layerLevelOwner Layer level which the instance of the Selection belongs to.
|
140
|
-
* @returns {Function}
|
141
|
-
*/
|
142
|
-
linearClassNameGenerator(baseClassName, layerLevelOwner) {
|
143
|
-
// TODO: Make this recursive function Proper Tail Calls (TCO/PTC) friendly.
|
144
|
-
return function calcClassName(element) {
|
145
|
-
let previousIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
|
146
|
-
if (layerLevelOwner === 0 || previousIndex === 0) {
|
147
|
-
return baseClassName;
|
148
|
-
}
|
149
|
-
let index = previousIndex >= 0 ? previousIndex : layerLevelOwner;
|
150
|
-
let className = baseClassName;
|
151
|
-
index -= 1;
|
152
|
-
const previousClassName = index === 0 ? baseClassName : `${baseClassName}-${index}`;
|
153
|
-
if ((0, _element.hasClass)(element, previousClassName)) {
|
154
|
-
const currentLayer = index + 1;
|
155
|
-
className = `${baseClassName}-${currentLayer}`;
|
156
|
-
} else {
|
157
|
-
className = calcClassName(element, index);
|
158
|
-
}
|
159
|
-
return className;
|
160
|
-
};
|
161
|
-
}
|
162
|
-
|
163
|
-
/**
|
164
|
-
* @param {WalkontableFacade} wotInstance The Walkontable instance.
|
165
|
-
*/
|
166
|
-
draw(wotInstance) {
|
167
|
-
if (this.isEmpty()) {
|
168
|
-
if (this.settings.border) {
|
169
|
-
this.getBorder(wotInstance).disappear();
|
170
|
-
}
|
171
|
-
return;
|
172
|
-
}
|
173
|
-
const renderedRows = wotInstance.wtTable.getRenderedRowsCount();
|
174
|
-
const renderedColumns = wotInstance.wtTable.getRenderedColumnsCount();
|
175
|
-
const corners = this.getCorners();
|
176
|
-
const [topRow, topColumn, bottomRow, bottomColumn] = corners;
|
177
|
-
const {
|
178
|
-
highlightHeaderClassName,
|
179
|
-
highlightColumnClassName,
|
180
|
-
highlightRowClassName,
|
181
|
-
highlightOnlyClosestHeader,
|
182
|
-
selectionType
|
183
|
-
} = this.settings;
|
184
|
-
const isHeaderSelectionType = selectionType === void 0 || ['active-header', 'header'].includes(selectionType);
|
185
|
-
if (isHeaderSelectionType && topColumn !== null && bottomColumn !== null) {
|
186
|
-
let selectionColumnCursor = 0;
|
187
|
-
for (let column = 0; column < renderedColumns; column += 1) {
|
188
|
-
const sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(column);
|
189
|
-
if (sourceCol >= topColumn && sourceCol <= bottomColumn) {
|
190
|
-
let THs = wotInstance.wtTable.getColumnHeaders(sourceCol);
|
191
|
-
const closestHeaderLevel = THs.length - 1;
|
192
|
-
if (highlightOnlyClosestHeader && THs.length > 1) {
|
193
|
-
THs = [THs[closestHeaderLevel]];
|
194
|
-
}
|
195
|
-
for (let headerLevel = 0; headerLevel < THs.length; headerLevel += 1) {
|
196
|
-
const newClasses = [];
|
197
|
-
let TH = THs[headerLevel];
|
198
|
-
if (highlightHeaderClassName) {
|
199
|
-
newClasses.push(highlightHeaderClassName);
|
200
|
-
}
|
201
|
-
if (highlightColumnClassName) {
|
202
|
-
newClasses.push(highlightColumnClassName);
|
203
|
-
}
|
204
|
-
headerLevel = highlightOnlyClosestHeader ? closestHeaderLevel : headerLevel;
|
205
|
-
const newSourceCol = wotInstance.getSetting('onBeforeHighlightingColumnHeader', sourceCol, headerLevel, {
|
206
|
-
selectionType,
|
207
|
-
columnCursor: selectionColumnCursor,
|
208
|
-
selectionWidth: bottomColumn - topColumn + 1,
|
209
|
-
classNames: newClasses
|
210
|
-
});
|
211
|
-
if (newSourceCol !== sourceCol) {
|
212
|
-
TH = wotInstance.wtTable.getColumnHeader(newSourceCol, headerLevel);
|
213
|
-
}
|
214
|
-
(0, _element.addClass)(TH, newClasses);
|
215
|
-
}
|
216
|
-
selectionColumnCursor += 1;
|
217
|
-
}
|
218
|
-
}
|
219
|
-
}
|
220
|
-
if (topRow !== null && bottomRow !== null) {
|
221
|
-
let selectionRowCursor = 0;
|
222
|
-
for (let row = 0; row < renderedRows; row += 1) {
|
223
|
-
const sourceRow = wotInstance.wtTable.rowFilter.renderedToSource(row);
|
224
|
-
if (isHeaderSelectionType && sourceRow >= topRow && sourceRow <= bottomRow) {
|
225
|
-
let THs = wotInstance.wtTable.getRowHeaders(sourceRow);
|
226
|
-
const closestHeaderLevel = THs.length - 1;
|
227
|
-
if (highlightOnlyClosestHeader && THs.length > 1) {
|
228
|
-
THs = [THs[closestHeaderLevel]];
|
229
|
-
}
|
230
|
-
for (let headerLevel = 0; headerLevel < THs.length; headerLevel += 1) {
|
231
|
-
const newClasses = [];
|
232
|
-
let TH = THs[headerLevel];
|
233
|
-
if (highlightHeaderClassName) {
|
234
|
-
newClasses.push(highlightHeaderClassName);
|
235
|
-
}
|
236
|
-
if (highlightRowClassName) {
|
237
|
-
newClasses.push(highlightRowClassName);
|
238
|
-
}
|
239
|
-
headerLevel = highlightOnlyClosestHeader ? closestHeaderLevel : headerLevel;
|
240
|
-
const newSourceRow = wotInstance.getSetting('onBeforeHighlightingRowHeader', sourceRow, headerLevel, {
|
241
|
-
selectionType,
|
242
|
-
rowCursor: selectionRowCursor,
|
243
|
-
selectionHeight: bottomRow - topRow + 1,
|
244
|
-
classNames: newClasses
|
245
|
-
});
|
246
|
-
if (newSourceRow !== sourceRow) {
|
247
|
-
TH = wotInstance.wtTable.getRowHeader(newSourceRow, headerLevel);
|
248
|
-
}
|
249
|
-
(0, _element.addClass)(TH, newClasses);
|
250
|
-
}
|
251
|
-
selectionRowCursor += 1;
|
252
|
-
}
|
253
|
-
if (topColumn !== null && bottomColumn !== null) {
|
254
|
-
for (let column = 0; column < renderedColumns; column += 1) {
|
255
|
-
const sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(column);
|
256
|
-
if (sourceRow >= topRow && sourceRow <= bottomRow && sourceCol >= topColumn && sourceCol <= bottomColumn) {
|
257
|
-
// selected cell
|
258
|
-
if (this.settings.className) {
|
259
|
-
this.addClassAtCoords(wotInstance, sourceRow, sourceCol, this.settings.className, this.settings.markIntersections);
|
260
|
-
}
|
261
|
-
} else if (sourceRow >= topRow && sourceRow <= bottomRow) {
|
262
|
-
// selection is in this row
|
263
|
-
if (highlightRowClassName) {
|
264
|
-
this.addClassAtCoords(wotInstance, sourceRow, sourceCol, highlightRowClassName);
|
265
|
-
}
|
266
|
-
} else if (sourceCol >= topColumn && sourceCol <= bottomColumn) {
|
267
|
-
// selection is in this column
|
268
|
-
if (highlightColumnClassName) {
|
269
|
-
this.addClassAtCoords(wotInstance, sourceRow, sourceCol, highlightColumnClassName);
|
270
|
-
}
|
271
|
-
}
|
272
|
-
const additionalSelectionClass = wotInstance.getSetting('onAfterDrawSelection', sourceRow, sourceCol, this.settings.layerLevel);
|
273
|
-
if (typeof additionalSelectionClass === 'string') {
|
274
|
-
this.addClassAtCoords(wotInstance, sourceRow, sourceCol, additionalSelectionClass);
|
275
|
-
}
|
276
|
-
}
|
277
|
-
}
|
278
|
-
}
|
279
|
-
}
|
280
|
-
wotInstance.getSetting('onBeforeDrawBorders', corners, this.settings.className);
|
281
|
-
if (this.settings.border) {
|
282
|
-
// warning! border.appear modifies corners!
|
283
|
-
this.getBorder(wotInstance).appear(corners);
|
284
|
-
}
|
285
|
-
}
|
286
|
-
|
287
|
-
/**
|
288
|
-
* Cleans up all the DOM state related to a Selection instance. Call this prior to deleting a Selection instance.
|
289
|
-
*/
|
290
|
-
destroy() {
|
291
|
-
Object.values(this.instanceBorders).forEach(border => border.destroy());
|
292
|
-
}
|
293
|
-
}
|
294
|
-
var _default = Selection;
|
295
|
-
exports.default = _default;
|
@@ -1,290 +0,0 @@
|
|
1
|
-
import "core-js/modules/es.array.push.js";
|
2
|
-
import { addClass, hasClass } from "./../../../helpers/dom/element.mjs";
|
3
|
-
import Border from "./border.mjs";
|
4
|
-
/**
|
5
|
-
* @class Selection
|
6
|
-
*/
|
7
|
-
class Selection {
|
8
|
-
/**
|
9
|
-
* @param {object} settings The selection settings object. @todo type.
|
10
|
-
* @param {CellRange} cellRange The cell range instance.
|
11
|
-
*/
|
12
|
-
constructor(settings, cellRange) {
|
13
|
-
this.settings = settings;
|
14
|
-
this.cellRange = cellRange || null;
|
15
|
-
this.instanceBorders = {};
|
16
|
-
this.classNames = [this.settings.className];
|
17
|
-
this.classNameGenerator = this.linearClassNameGenerator(this.settings.className, this.settings.layerLevel);
|
18
|
-
}
|
19
|
-
|
20
|
-
/**
|
21
|
-
* Each Walkontable clone requires it's own border for every selection. This method creates and returns selection
|
22
|
-
* borders per instance.
|
23
|
-
*
|
24
|
-
* @param {WalkontableFacade} wotInstance The Walkontable instance.
|
25
|
-
* @returns {Border}
|
26
|
-
*/
|
27
|
-
getBorder(wotInstance) {
|
28
|
-
if (!this.instanceBorders[wotInstance.guid]) {
|
29
|
-
this.instanceBorders[wotInstance.guid] = new Border(wotInstance, this.settings);
|
30
|
-
}
|
31
|
-
return this.instanceBorders[wotInstance.guid];
|
32
|
-
}
|
33
|
-
|
34
|
-
/**
|
35
|
-
* Checks if selection is empty.
|
36
|
-
*
|
37
|
-
* @returns {boolean}
|
38
|
-
*/
|
39
|
-
isEmpty() {
|
40
|
-
return this.cellRange === null;
|
41
|
-
}
|
42
|
-
|
43
|
-
/**
|
44
|
-
* Adds a cell coords to the selection.
|
45
|
-
*
|
46
|
-
* @param {CellCoords} coords The cell coordinates to add.
|
47
|
-
* @returns {Selection}
|
48
|
-
*/
|
49
|
-
add(coords) {
|
50
|
-
if (this.isEmpty()) {
|
51
|
-
this.cellRange = this.settings.createCellRange(coords);
|
52
|
-
} else {
|
53
|
-
this.cellRange.expand(coords);
|
54
|
-
}
|
55
|
-
return this;
|
56
|
-
}
|
57
|
-
|
58
|
-
/**
|
59
|
-
* If selection range from or to property equals oldCoords, replace it with newCoords. Return boolean
|
60
|
-
* information about success.
|
61
|
-
*
|
62
|
-
* @param {CellCoords} oldCoords An old cell coordinates to replace.
|
63
|
-
* @param {CellCoords} newCoords The new cell coordinates.
|
64
|
-
* @returns {boolean}
|
65
|
-
*/
|
66
|
-
replace(oldCoords, newCoords) {
|
67
|
-
if (!this.isEmpty()) {
|
68
|
-
if (this.cellRange.from.isEqual(oldCoords)) {
|
69
|
-
this.cellRange.from = newCoords;
|
70
|
-
return true;
|
71
|
-
}
|
72
|
-
if (this.cellRange.to.isEqual(oldCoords)) {
|
73
|
-
this.cellRange.to = newCoords;
|
74
|
-
return true;
|
75
|
-
}
|
76
|
-
}
|
77
|
-
return false;
|
78
|
-
}
|
79
|
-
|
80
|
-
/**
|
81
|
-
* Clears selection.
|
82
|
-
*
|
83
|
-
* @returns {Selection}
|
84
|
-
*/
|
85
|
-
clear() {
|
86
|
-
this.cellRange = null;
|
87
|
-
return this;
|
88
|
-
}
|
89
|
-
|
90
|
-
/**
|
91
|
-
* Returns the top left (or top right in RTL) and bottom right (or bottom left in RTL) selection coordinates.
|
92
|
-
*
|
93
|
-
* @returns {Array} Returns array of coordinates for example `[1, 1, 5, 5]`.
|
94
|
-
*/
|
95
|
-
getCorners() {
|
96
|
-
const topStart = this.cellRange.getOuterTopStartCorner();
|
97
|
-
const bottomEnd = this.cellRange.getOuterBottomEndCorner();
|
98
|
-
return [topStart.row, topStart.col, bottomEnd.row, bottomEnd.col];
|
99
|
-
}
|
100
|
-
|
101
|
-
/**
|
102
|
-
* Adds class name to cell element at given coords.
|
103
|
-
*
|
104
|
-
* @param {WalkontableFacade} wotInstance Walkontable instance.
|
105
|
-
* @param {number} sourceRow Cell row coord.
|
106
|
-
* @param {number} sourceColumn Cell column coord.
|
107
|
-
* @param {string} className Class name.
|
108
|
-
* @param {boolean} [markIntersections=false] If `true`, linear className generator will be used to add CSS classes
|
109
|
-
* in a continuous way.
|
110
|
-
* @returns {Selection}
|
111
|
-
*/
|
112
|
-
addClassAtCoords(wotInstance, sourceRow, sourceColumn, className) {
|
113
|
-
let markIntersections = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
114
|
-
const TD = wotInstance.wtTable.getCell(this.settings.createCellCoords(sourceRow, sourceColumn));
|
115
|
-
if (typeof TD === 'object') {
|
116
|
-
let cellClassName = className;
|
117
|
-
if (markIntersections) {
|
118
|
-
cellClassName = this.classNameGenerator(TD);
|
119
|
-
if (!this.classNames.includes(cellClassName)) {
|
120
|
-
this.classNames.push(cellClassName);
|
121
|
-
}
|
122
|
-
}
|
123
|
-
addClass(TD, cellClassName);
|
124
|
-
}
|
125
|
-
return this;
|
126
|
-
}
|
127
|
-
|
128
|
-
/**
|
129
|
-
* Generate helper for calculating classNames based on previously added base className.
|
130
|
-
* The generated className is always generated as a continuation of the previous className. For example, when
|
131
|
-
* the currently checked element has 'area-2' className the generated new className will be 'area-3'. When
|
132
|
-
* the element doesn't have any classNames than the base className will be returned ('area');.
|
133
|
-
*
|
134
|
-
* @param {string} baseClassName Base className to be used.
|
135
|
-
* @param {number} layerLevelOwner Layer level which the instance of the Selection belongs to.
|
136
|
-
* @returns {Function}
|
137
|
-
*/
|
138
|
-
linearClassNameGenerator(baseClassName, layerLevelOwner) {
|
139
|
-
// TODO: Make this recursive function Proper Tail Calls (TCO/PTC) friendly.
|
140
|
-
return function calcClassName(element) {
|
141
|
-
let previousIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
|
142
|
-
if (layerLevelOwner === 0 || previousIndex === 0) {
|
143
|
-
return baseClassName;
|
144
|
-
}
|
145
|
-
let index = previousIndex >= 0 ? previousIndex : layerLevelOwner;
|
146
|
-
let className = baseClassName;
|
147
|
-
index -= 1;
|
148
|
-
const previousClassName = index === 0 ? baseClassName : `${baseClassName}-${index}`;
|
149
|
-
if (hasClass(element, previousClassName)) {
|
150
|
-
const currentLayer = index + 1;
|
151
|
-
className = `${baseClassName}-${currentLayer}`;
|
152
|
-
} else {
|
153
|
-
className = calcClassName(element, index);
|
154
|
-
}
|
155
|
-
return className;
|
156
|
-
};
|
157
|
-
}
|
158
|
-
|
159
|
-
/**
|
160
|
-
* @param {WalkontableFacade} wotInstance The Walkontable instance.
|
161
|
-
*/
|
162
|
-
draw(wotInstance) {
|
163
|
-
if (this.isEmpty()) {
|
164
|
-
if (this.settings.border) {
|
165
|
-
this.getBorder(wotInstance).disappear();
|
166
|
-
}
|
167
|
-
return;
|
168
|
-
}
|
169
|
-
const renderedRows = wotInstance.wtTable.getRenderedRowsCount();
|
170
|
-
const renderedColumns = wotInstance.wtTable.getRenderedColumnsCount();
|
171
|
-
const corners = this.getCorners();
|
172
|
-
const [topRow, topColumn, bottomRow, bottomColumn] = corners;
|
173
|
-
const {
|
174
|
-
highlightHeaderClassName,
|
175
|
-
highlightColumnClassName,
|
176
|
-
highlightRowClassName,
|
177
|
-
highlightOnlyClosestHeader,
|
178
|
-
selectionType
|
179
|
-
} = this.settings;
|
180
|
-
const isHeaderSelectionType = selectionType === void 0 || ['active-header', 'header'].includes(selectionType);
|
181
|
-
if (isHeaderSelectionType && topColumn !== null && bottomColumn !== null) {
|
182
|
-
let selectionColumnCursor = 0;
|
183
|
-
for (let column = 0; column < renderedColumns; column += 1) {
|
184
|
-
const sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(column);
|
185
|
-
if (sourceCol >= topColumn && sourceCol <= bottomColumn) {
|
186
|
-
let THs = wotInstance.wtTable.getColumnHeaders(sourceCol);
|
187
|
-
const closestHeaderLevel = THs.length - 1;
|
188
|
-
if (highlightOnlyClosestHeader && THs.length > 1) {
|
189
|
-
THs = [THs[closestHeaderLevel]];
|
190
|
-
}
|
191
|
-
for (let headerLevel = 0; headerLevel < THs.length; headerLevel += 1) {
|
192
|
-
const newClasses = [];
|
193
|
-
let TH = THs[headerLevel];
|
194
|
-
if (highlightHeaderClassName) {
|
195
|
-
newClasses.push(highlightHeaderClassName);
|
196
|
-
}
|
197
|
-
if (highlightColumnClassName) {
|
198
|
-
newClasses.push(highlightColumnClassName);
|
199
|
-
}
|
200
|
-
headerLevel = highlightOnlyClosestHeader ? closestHeaderLevel : headerLevel;
|
201
|
-
const newSourceCol = wotInstance.getSetting('onBeforeHighlightingColumnHeader', sourceCol, headerLevel, {
|
202
|
-
selectionType,
|
203
|
-
columnCursor: selectionColumnCursor,
|
204
|
-
selectionWidth: bottomColumn - topColumn + 1,
|
205
|
-
classNames: newClasses
|
206
|
-
});
|
207
|
-
if (newSourceCol !== sourceCol) {
|
208
|
-
TH = wotInstance.wtTable.getColumnHeader(newSourceCol, headerLevel);
|
209
|
-
}
|
210
|
-
addClass(TH, newClasses);
|
211
|
-
}
|
212
|
-
selectionColumnCursor += 1;
|
213
|
-
}
|
214
|
-
}
|
215
|
-
}
|
216
|
-
if (topRow !== null && bottomRow !== null) {
|
217
|
-
let selectionRowCursor = 0;
|
218
|
-
for (let row = 0; row < renderedRows; row += 1) {
|
219
|
-
const sourceRow = wotInstance.wtTable.rowFilter.renderedToSource(row);
|
220
|
-
if (isHeaderSelectionType && sourceRow >= topRow && sourceRow <= bottomRow) {
|
221
|
-
let THs = wotInstance.wtTable.getRowHeaders(sourceRow);
|
222
|
-
const closestHeaderLevel = THs.length - 1;
|
223
|
-
if (highlightOnlyClosestHeader && THs.length > 1) {
|
224
|
-
THs = [THs[closestHeaderLevel]];
|
225
|
-
}
|
226
|
-
for (let headerLevel = 0; headerLevel < THs.length; headerLevel += 1) {
|
227
|
-
const newClasses = [];
|
228
|
-
let TH = THs[headerLevel];
|
229
|
-
if (highlightHeaderClassName) {
|
230
|
-
newClasses.push(highlightHeaderClassName);
|
231
|
-
}
|
232
|
-
if (highlightRowClassName) {
|
233
|
-
newClasses.push(highlightRowClassName);
|
234
|
-
}
|
235
|
-
headerLevel = highlightOnlyClosestHeader ? closestHeaderLevel : headerLevel;
|
236
|
-
const newSourceRow = wotInstance.getSetting('onBeforeHighlightingRowHeader', sourceRow, headerLevel, {
|
237
|
-
selectionType,
|
238
|
-
rowCursor: selectionRowCursor,
|
239
|
-
selectionHeight: bottomRow - topRow + 1,
|
240
|
-
classNames: newClasses
|
241
|
-
});
|
242
|
-
if (newSourceRow !== sourceRow) {
|
243
|
-
TH = wotInstance.wtTable.getRowHeader(newSourceRow, headerLevel);
|
244
|
-
}
|
245
|
-
addClass(TH, newClasses);
|
246
|
-
}
|
247
|
-
selectionRowCursor += 1;
|
248
|
-
}
|
249
|
-
if (topColumn !== null && bottomColumn !== null) {
|
250
|
-
for (let column = 0; column < renderedColumns; column += 1) {
|
251
|
-
const sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(column);
|
252
|
-
if (sourceRow >= topRow && sourceRow <= bottomRow && sourceCol >= topColumn && sourceCol <= bottomColumn) {
|
253
|
-
// selected cell
|
254
|
-
if (this.settings.className) {
|
255
|
-
this.addClassAtCoords(wotInstance, sourceRow, sourceCol, this.settings.className, this.settings.markIntersections);
|
256
|
-
}
|
257
|
-
} else if (sourceRow >= topRow && sourceRow <= bottomRow) {
|
258
|
-
// selection is in this row
|
259
|
-
if (highlightRowClassName) {
|
260
|
-
this.addClassAtCoords(wotInstance, sourceRow, sourceCol, highlightRowClassName);
|
261
|
-
}
|
262
|
-
} else if (sourceCol >= topColumn && sourceCol <= bottomColumn) {
|
263
|
-
// selection is in this column
|
264
|
-
if (highlightColumnClassName) {
|
265
|
-
this.addClassAtCoords(wotInstance, sourceRow, sourceCol, highlightColumnClassName);
|
266
|
-
}
|
267
|
-
}
|
268
|
-
const additionalSelectionClass = wotInstance.getSetting('onAfterDrawSelection', sourceRow, sourceCol, this.settings.layerLevel);
|
269
|
-
if (typeof additionalSelectionClass === 'string') {
|
270
|
-
this.addClassAtCoords(wotInstance, sourceRow, sourceCol, additionalSelectionClass);
|
271
|
-
}
|
272
|
-
}
|
273
|
-
}
|
274
|
-
}
|
275
|
-
}
|
276
|
-
wotInstance.getSetting('onBeforeDrawBorders', corners, this.settings.className);
|
277
|
-
if (this.settings.border) {
|
278
|
-
// warning! border.appear modifies corners!
|
279
|
-
this.getBorder(wotInstance).appear(corners);
|
280
|
-
}
|
281
|
-
}
|
282
|
-
|
283
|
-
/**
|
284
|
-
* Cleans up all the DOM state related to a Selection instance. Call this prior to deleting a Selection instance.
|
285
|
-
*/
|
286
|
-
destroy() {
|
287
|
-
Object.values(this.instanceBorders).forEach(border => border.destroy());
|
288
|
-
}
|
289
|
-
}
|
290
|
-
export default Selection;
|
@@ -1,68 +0,0 @@
|
|
1
|
-
import { objectEach } from "../../helpers/object.mjs";
|
2
|
-
import alignmentItem, { KEY as ALIGNMENT } from "./predefinedItems/alignment.mjs";
|
3
|
-
import clearColumnItem, { KEY as CLEAR_COLUMN } from "./predefinedItems/clearColumn.mjs";
|
4
|
-
import columnLeftItem, { KEY as COLUMN_LEFT } from "./predefinedItems/columnLeft.mjs";
|
5
|
-
import columnRightItem, { KEY as COLUMN_RIGHT } from "./predefinedItems/columnRight.mjs";
|
6
|
-
import readOnlyItem, { KEY as READ_ONLY } from "./predefinedItems/readOnly.mjs";
|
7
|
-
import redoItem, { KEY as REDO } from "./predefinedItems/redo.mjs";
|
8
|
-
import removeColumnItem, { KEY as REMOVE_COLUMN } from "./predefinedItems/removeColumn.mjs";
|
9
|
-
import removeRowItem, { KEY as REMOVE_ROW } from "./predefinedItems/removeRow.mjs";
|
10
|
-
import rowAboveItem, { KEY as ROW_ABOVE } from "./predefinedItems/rowAbove.mjs";
|
11
|
-
import rowBelowItem, { KEY as ROW_BELOW } from "./predefinedItems/rowBelow.mjs";
|
12
|
-
import separatorItem, { KEY as SEPARATOR } from "./predefinedItems/separator.mjs";
|
13
|
-
import noItemsItem, { KEY as NO_ITEMS } from "./predefinedItems/noItems.mjs";
|
14
|
-
import undoItem, { KEY as UNDO } from "./predefinedItems/undo.mjs";
|
15
|
-
export { KEY as ALIGNMENT } from "./predefinedItems/alignment.mjs";
|
16
|
-
export { KEY as CLEAR_COLUMN } from "./predefinedItems/clearColumn.mjs";
|
17
|
-
export { KEY as COLUMN_LEFT } from "./predefinedItems/columnLeft.mjs";
|
18
|
-
export { KEY as COLUMN_RIGHT } from "./predefinedItems/columnRight.mjs";
|
19
|
-
export { KEY as READ_ONLY } from "./predefinedItems/readOnly.mjs";
|
20
|
-
export { KEY as REDO } from "./predefinedItems/redo.mjs";
|
21
|
-
export { KEY as REMOVE_COLUMN } from "./predefinedItems/removeColumn.mjs";
|
22
|
-
export { KEY as REMOVE_ROW } from "./predefinedItems/removeRow.mjs";
|
23
|
-
export { KEY as ROW_ABOVE } from "./predefinedItems/rowAbove.mjs";
|
24
|
-
export { KEY as ROW_BELOW } from "./predefinedItems/rowBelow.mjs";
|
25
|
-
export { KEY as SEPARATOR } from "./predefinedItems/separator.mjs";
|
26
|
-
export { KEY as NO_ITEMS } from "./predefinedItems/noItems.mjs";
|
27
|
-
export { KEY as UNDO } from "./predefinedItems/undo.mjs";
|
28
|
-
export const ITEMS = [ROW_ABOVE, ROW_BELOW, COLUMN_LEFT, COLUMN_RIGHT, CLEAR_COLUMN, REMOVE_ROW, REMOVE_COLUMN, UNDO, REDO, READ_ONLY, ALIGNMENT, SEPARATOR, NO_ITEMS];
|
29
|
-
const _predefinedItems = {
|
30
|
-
[SEPARATOR]: separatorItem,
|
31
|
-
[NO_ITEMS]: noItemsItem,
|
32
|
-
[ROW_ABOVE]: rowAboveItem,
|
33
|
-
[ROW_BELOW]: rowBelowItem,
|
34
|
-
[COLUMN_LEFT]: columnLeftItem,
|
35
|
-
[COLUMN_RIGHT]: columnRightItem,
|
36
|
-
[CLEAR_COLUMN]: clearColumnItem,
|
37
|
-
[REMOVE_ROW]: removeRowItem,
|
38
|
-
[REMOVE_COLUMN]: removeColumnItem,
|
39
|
-
[UNDO]: undoItem,
|
40
|
-
[REDO]: redoItem,
|
41
|
-
[READ_ONLY]: readOnlyItem,
|
42
|
-
[ALIGNMENT]: alignmentItem
|
43
|
-
};
|
44
|
-
|
45
|
-
/**
|
46
|
-
* Gets new object with all predefined menu items.
|
47
|
-
*
|
48
|
-
* @returns {object}
|
49
|
-
*/
|
50
|
-
export function predefinedItems() {
|
51
|
-
const items = {};
|
52
|
-
objectEach(_predefinedItems, (itemFactory, key) => {
|
53
|
-
items[key] = itemFactory();
|
54
|
-
});
|
55
|
-
return items;
|
56
|
-
}
|
57
|
-
|
58
|
-
/**
|
59
|
-
* Add new predefined menu item to the collection.
|
60
|
-
*
|
61
|
-
* @param {string} key Menu command id.
|
62
|
-
* @param {object} item Object command descriptor.
|
63
|
-
*/
|
64
|
-
export function addItem(key, item) {
|
65
|
-
if (ITEMS.indexOf(key) === -1) {
|
66
|
-
_predefinedItems[key] = item;
|
67
|
-
}
|
68
|
-
}
|