handsontable 0.0.0-next-9379dd1-20231020 → 0.0.0-next-9059914-20231025
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/{selection/border/border.js → border.js} +12 -7
- package/3rdparty/walkontable/src/{selection/border/border.mjs → border.mjs} +12 -7
- package/3rdparty/walkontable/src/cell/coords.d.ts +1 -6
- package/3rdparty/walkontable/src/cell/coords.js +11 -50
- package/3rdparty/walkontable/src/cell/coords.mjs +11 -50
- package/3rdparty/walkontable/src/cell/range.d.ts +2 -9
- package/3rdparty/walkontable/src/cell/range.js +7 -38
- package/3rdparty/walkontable/src/cell/range.mjs +7 -38
- package/3rdparty/walkontable/src/core/_base.js +3 -9
- package/3rdparty/walkontable/src/core/_base.mjs +3 -9
- 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 +2 -3
- package/3rdparty/walkontable/src/core/core.mjs +2 -3
- package/3rdparty/walkontable/src/event.js +10 -12
- package/3rdparty/walkontable/src/event.mjs +10 -12
- package/3rdparty/walkontable/src/facade/core.js +2 -2
- package/3rdparty/walkontable/src/facade/core.mjs +2 -2
- package/3rdparty/walkontable/src/index.js +2 -10
- package/3rdparty/walkontable/src/index.mjs +2 -2
- package/3rdparty/walkontable/src/overlay/_base.js +2 -13
- package/3rdparty/walkontable/src/overlay/_base.mjs +3 -14
- package/3rdparty/walkontable/src/overlay/inlineStart.js +6 -2
- package/3rdparty/walkontable/src/overlay/inlineStart.mjs +6 -2
- package/3rdparty/walkontable/src/overlay/top.js +6 -2
- package/3rdparty/walkontable/src/overlay/top.mjs +6 -2
- package/3rdparty/walkontable/src/renderer/cells.js +0 -10
- package/3rdparty/walkontable/src/renderer/cells.mjs +1 -11
- package/3rdparty/walkontable/src/renderer/columnHeaders.js +0 -10
- package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +1 -11
- package/3rdparty/walkontable/src/renderer/rowHeaders.js +0 -5
- package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +0 -5
- package/3rdparty/walkontable/src/renderer/rows.js +0 -13
- package/3rdparty/walkontable/src/renderer/rows.mjs +0 -13
- package/3rdparty/walkontable/src/renderer/table.js +0 -9
- package/3rdparty/walkontable/src/renderer/table.mjs +0 -9
- package/3rdparty/walkontable/src/scroll.js +0 -2
- package/3rdparty/walkontable/src/scroll.mjs +0 -2
- package/3rdparty/walkontable/src/selection.js +295 -0
- package/3rdparty/walkontable/src/selection.mjs +290 -0
- package/3rdparty/walkontable/src/settings.js +4 -13
- package/3rdparty/walkontable/src/settings.mjs +4 -13
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +0 -9
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +0 -9
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +0 -9
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +0 -9
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +0 -9
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +0 -9
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +0 -9
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +0 -9
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +0 -9
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +0 -9
- package/3rdparty/walkontable/src/table.js +78 -19
- package/3rdparty/walkontable/src/table.mjs +79 -20
- 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 +0 -3
- package/cellTypes/index.js +0 -4
- package/cellTypes/index.mjs +1 -3
- package/core.d.ts +4 -9
- package/core.js +327 -285
- package/core.mjs +327 -285
- package/dataMap/metaManager/metaSchema.js +0 -65
- package/dataMap/metaManager/metaSchema.mjs +0 -65
- package/dataMap/metaManager/mods/extendMetaProperties.js +1 -7
- package/dataMap/metaManager/mods/extendMetaProperties.mjs +1 -7
- package/dataMap/replaceData.js +0 -5
- package/dataMap/replaceData.mjs +0 -5
- package/dist/handsontable.css +5 -40
- package/dist/handsontable.full.css +5 -40
- package/dist/handsontable.full.js +8038 -12837
- package/dist/handsontable.full.min.css +4 -4
- package/dist/handsontable.full.min.js +141 -141
- package/dist/handsontable.js +11488 -16287
- package/dist/handsontable.min.css +3 -3
- package/dist/handsontable.min.js +21 -21
- package/dist/languages/all.js +2 -6
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/en-US.js +1 -3
- package/dist/languages/en-US.min.js +1 -1
- package/dist/languages/pl-PL.js +1 -3
- package/dist/languages/pl-PL.min.js +1 -1
- package/editorManager.js +87 -15
- package/editorManager.mjs +87 -16
- package/editors/autocompleteEditor/autocompleteEditor.js +2 -53
- package/editors/autocompleteEditor/autocompleteEditor.mjs +3 -54
- package/editors/dateEditor/dateEditor.js +7 -26
- package/editors/dateEditor/dateEditor.mjs +8 -27
- package/editors/handsontableEditor/handsontableEditor.js +1 -9
- package/editors/handsontableEditor/handsontableEditor.mjs +2 -10
- package/editors/textEditor/textEditor.js +27 -19
- package/editors/textEditor/textEditor.mjs +30 -22
- package/helpers/dom/element.js +9 -188
- package/helpers/dom/element.mjs +9 -182
- package/helpers/mixed.js +1 -1
- package/helpers/mixed.mjs +1 -1
- package/helpers/number.d.ts +0 -1
- package/helpers/number.js +0 -18
- package/helpers/number.mjs +0 -17
- package/i18n/constants.js +1 -7
- package/i18n/constants.mjs +1 -4
- package/i18n/languages/en-US.js +1 -3
- package/i18n/languages/en-US.mjs +1 -3
- package/i18n/languages/pl-PL.js +1 -3
- package/i18n/languages/pl-PL.mjs +1 -3
- package/languages/all.js +2 -6
- package/languages/en-US.js +1 -3
- package/languages/en-US.mjs +1 -3
- package/languages/index.js +2 -6
- package/languages/pl-PL.js +1 -3
- package/languages/pl-PL.mjs +1 -3
- package/package.json +99 -116
- package/pluginHooks.d.ts +1 -12
- package/pluginHooks.js +1 -152
- package/pluginHooks.mjs +1 -152
- package/plugins/collapsibleColumns/collapsibleColumns.js +4 -74
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +5 -75
- package/plugins/columnSorting/columnSorting.js +0 -43
- package/plugins/columnSorting/columnSorting.mjs +3 -44
- package/plugins/columnSorting/index.js +1 -3
- package/plugins/columnSorting/index.mjs +1 -1
- package/plugins/comments/commentEditor.js +0 -1
- package/plugins/comments/commentEditor.mjs +0 -1
- package/plugins/comments/comments.js +189 -252
- package/plugins/comments/comments.mjs +190 -251
- package/plugins/contextMenu/commandExecutor.js +3 -2
- package/plugins/contextMenu/commandExecutor.mjs +3 -2
- package/plugins/contextMenu/contextMenu.d.ts +1 -1
- package/plugins/contextMenu/contextMenu.js +36 -75
- package/plugins/contextMenu/contextMenu.mjs +35 -74
- package/plugins/contextMenu/{menu/cursor.mjs → cursor.js} +10 -4
- package/plugins/contextMenu/{menu/cursor.js → cursor.mjs} +4 -6
- package/plugins/contextMenu/itemsFactory.js +3 -2
- package/plugins/contextMenu/itemsFactory.mjs +4 -3
- package/plugins/contextMenu/{menu/menu.js → menu.js} +308 -96
- package/plugins/contextMenu/{menu/menu.mjs → menu.mjs} +309 -97
- package/plugins/contextMenu/predefinedItems/alignment.js +0 -7
- package/plugins/contextMenu/predefinedItems/alignment.mjs +0 -7
- package/plugins/contextMenu/predefinedItems/clearColumn.js +3 -5
- package/plugins/contextMenu/predefinedItems/clearColumn.mjs +3 -5
- package/plugins/contextMenu/predefinedItems/columnLeft.js +3 -5
- package/plugins/contextMenu/predefinedItems/columnLeft.mjs +3 -5
- package/plugins/contextMenu/predefinedItems/columnRight.js +3 -5
- package/plugins/contextMenu/predefinedItems/columnRight.mjs +3 -5
- package/plugins/contextMenu/predefinedItems/readOnly.js +0 -7
- package/plugins/contextMenu/predefinedItems/readOnly.mjs +0 -7
- package/plugins/contextMenu/predefinedItems/removeColumn.js +5 -7
- package/plugins/contextMenu/predefinedItems/removeColumn.mjs +3 -5
- package/plugins/contextMenu/predefinedItems/removeRow.js +5 -7
- package/plugins/contextMenu/predefinedItems/removeRow.mjs +3 -5
- package/plugins/contextMenu/predefinedItems/rowAbove.js +3 -5
- package/plugins/contextMenu/predefinedItems/rowAbove.mjs +3 -5
- package/plugins/contextMenu/predefinedItems/rowBelow.js +3 -5
- package/plugins/contextMenu/predefinedItems/rowBelow.mjs +3 -5
- package/plugins/contextMenu/{predefinedItems/index.js → predefinedItems.js} +14 -14
- package/plugins/contextMenu/predefinedItems.mjs +68 -0
- package/plugins/contextMenu/utils.js +151 -35
- package/plugins/contextMenu/utils.mjs +144 -35
- package/plugins/copyPaste/contextMenuItem/copy.js +0 -7
- package/plugins/copyPaste/contextMenuItem/copy.mjs +0 -7
- package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +1 -9
- package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +1 -9
- package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +1 -9
- package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +1 -9
- package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +1 -9
- package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +1 -9
- package/plugins/copyPaste/contextMenuItem/cut.js +0 -7
- package/plugins/copyPaste/contextMenuItem/cut.mjs +0 -7
- package/plugins/copyPaste/copyPaste.js +78 -127
- package/plugins/copyPaste/copyPaste.mjs +79 -128
- package/plugins/copyPaste/focusableElement.js +186 -0
- package/plugins/copyPaste/focusableElement.mjs +180 -0
- package/plugins/customBorders/customBorders.js +20 -23
- package/plugins/customBorders/customBorders.mjs +21 -24
- package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
- package/plugins/dropdownMenu/dropdownMenu.js +38 -97
- package/plugins/dropdownMenu/dropdownMenu.mjs +37 -96
- package/plugins/filters/constants.mjs +1 -1
- package/plugins/filters/filters.js +14 -31
- package/plugins/filters/filters.mjs +14 -31
- package/plugins/filters/ui/select.js +3 -3
- package/plugins/filters/ui/select.mjs +2 -2
- package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
- package/plugins/hiddenRows/hiddenRows.mjs +1 -1
- package/plugins/manualColumnMove/manualColumnMove.js +1 -3
- package/plugins/manualColumnMove/manualColumnMove.mjs +1 -3
- package/plugins/mergeCells/mergeCells.js +16 -5
- package/plugins/mergeCells/mergeCells.mjs +16 -5
- package/plugins/multiColumnSorting/multiColumnSorting.js +2 -37
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +2 -37
- package/plugins/nestedHeaders/nestedHeaders.js +10 -240
- package/plugins/nestedHeaders/nestedHeaders.mjs +11 -241
- package/plugins/nestedHeaders/stateManager/index.js +3 -102
- package/plugins/nestedHeaders/stateManager/index.mjs +3 -102
- package/plugins/nestedRows/nestedRows.js +0 -41
- package/plugins/nestedRows/nestedRows.mjs +0 -41
- package/plugins/nestedRows/ui/headers.js +0 -11
- package/plugins/nestedRows/ui/headers.mjs +1 -12
- package/renderers/autocompleteRenderer/autocompleteRenderer.js +0 -8
- package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +0 -8
- package/renderers/baseRenderer/baseRenderer.js +0 -17
- package/renderers/baseRenderer/baseRenderer.mjs +1 -18
- package/renderers/checkboxRenderer/checkboxRenderer.js +4 -9
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +4 -9
- package/renderers/index.d.ts +0 -9
- package/selection/highlight/constants.js +15 -0
- package/selection/highlight/constants.mjs +6 -0
- package/selection/highlight/highlight.js +71 -256
- package/selection/highlight/highlight.mjs +71 -250
- package/selection/highlight/types/activeHeader.js +8 -10
- package/selection/highlight/types/activeHeader.mjs +8 -10
- package/selection/highlight/types/area.js +18 -6
- package/selection/highlight/types/area.mjs +18 -6
- package/selection/highlight/types/{focus.js → cell.js} +7 -5
- package/selection/highlight/types/{focus.mjs → cell.mjs} +7 -5
- package/selection/highlight/types/customSelection.js +9 -7
- package/selection/highlight/types/customSelection.mjs +9 -7
- package/selection/highlight/types/fill.js +7 -5
- package/selection/highlight/types/fill.mjs +7 -5
- package/selection/highlight/types/header.js +18 -9
- package/selection/highlight/types/header.mjs +18 -9
- package/selection/highlight/types/index.js +35 -0
- package/selection/highlight/types/index.mjs +31 -0
- package/selection/highlight/visualSelection.js +27 -31
- package/selection/highlight/visualSelection.mjs +27 -31
- package/selection/index.js +7 -4
- package/selection/index.mjs +3 -2
- package/selection/mouseEventHandler.js +1 -7
- package/selection/mouseEventHandler.mjs +1 -7
- package/selection/range.js +8 -8
- package/selection/range.mjs +8 -8
- package/selection/selection.js +152 -321
- package/selection/selection.mjs +151 -318
- package/selection/transformation.js +90 -232
- package/selection/transformation.mjs +90 -232
- package/selection/utils.js +21 -15
- package/selection/utils.mjs +21 -16
- package/settings.d.ts +0 -4
- package/shortcuts/context.js +2 -20
- package/shortcuts/context.mjs +3 -20
- package/shortcuts/manager.js +7 -25
- package/shortcuts/manager.mjs +7 -26
- package/shortcuts/recorder.js +3 -3
- package/shortcuts/recorder.mjs +3 -3
- package/shortcuts/utils.js +5 -19
- package/shortcuts/utils.mjs +4 -18
- package/tableView.js +13 -111
- package/tableView.mjs +14 -112
- package/3rdparty/walkontable/src/selection/border/constants.js +0 -16
- package/3rdparty/walkontable/src/selection/border/constants.mjs +0 -12
- package/3rdparty/walkontable/src/selection/constants.js +0 -62
- package/3rdparty/walkontable/src/selection/constants.mjs +0 -51
- package/3rdparty/walkontable/src/selection/index.js +0 -26
- package/3rdparty/walkontable/src/selection/index.mjs +0 -5
- package/3rdparty/walkontable/src/selection/manager.js +0 -274
- package/3rdparty/walkontable/src/selection/manager.mjs +0 -269
- package/3rdparty/walkontable/src/selection/scanner.js +0 -270
- package/3rdparty/walkontable/src/selection/scanner.mjs +0 -267
- package/3rdparty/walkontable/src/selection/selection.js +0 -101
- package/3rdparty/walkontable/src/selection/selection.mjs +0 -96
- package/cellTypes/selectType/index.d.ts +0 -1
- package/cellTypes/selectType/index.js +0 -6
- package/cellTypes/selectType/index.mjs +0 -1
- package/cellTypes/selectType/selectType.d.ts +0 -14
- package/cellTypes/selectType/selectType.js +0 -13
- package/cellTypes/selectType/selectType.mjs +0 -8
- package/core/focusCatcher/focusDetector.js +0 -63
- package/core/focusCatcher/focusDetector.mjs +0 -59
- package/core/focusCatcher/index.js +0 -142
- package/core/focusCatcher/index.mjs +0 -138
- package/core/index.js +0 -9
- package/core/index.mjs +0 -1
- package/focusManager.d.ts +0 -12
- package/focusManager.js +0 -265
- package/focusManager.mjs +0 -261
- package/helpers/a11y.js +0 -79
- package/helpers/a11y.mjs +0 -38
- package/plugins/comments/contextMenuItem/addEditComment.js +0 -41
- package/plugins/comments/contextMenuItem/addEditComment.mjs +0 -35
- package/plugins/comments/contextMenuItem/readOnlyComment.js +0 -49
- package/plugins/comments/contextMenuItem/readOnlyComment.mjs +0 -43
- package/plugins/comments/contextMenuItem/removeComment.js +0 -38
- package/plugins/comments/contextMenuItem/removeComment.mjs +0 -32
- package/plugins/contextMenu/menu/index.js +0 -9
- package/plugins/contextMenu/menu/index.mjs +0 -1
- package/plugins/contextMenu/menu/navigator.js +0 -152
- package/plugins/contextMenu/menu/navigator.mjs +0 -148
- package/plugins/contextMenu/menu/positioner.js +0 -213
- package/plugins/contextMenu/menu/positioner.mjs +0 -209
- package/plugins/contextMenu/menu/utils.js +0 -177
- package/plugins/contextMenu/menu/utils.mjs +0 -163
- package/plugins/contextMenu/predefinedItems/index.mjs +0 -68
- package/renderers/dateRenderer/dateRenderer.d.ts +0 -5
- package/renderers/dateRenderer/dateRenderer.js +0 -29
- package/renderers/dateRenderer/dateRenderer.mjs +0 -24
- package/renderers/dateRenderer/index.d.ts +0 -1
- package/renderers/dateRenderer/index.js +0 -6
- package/renderers/dateRenderer/index.mjs +0 -1
- package/renderers/handsontableRenderer/handsontableRenderer.d.ts +0 -5
- package/renderers/handsontableRenderer/handsontableRenderer.js +0 -29
- package/renderers/handsontableRenderer/handsontableRenderer.mjs +0 -24
- package/renderers/handsontableRenderer/index.d.ts +0 -1
- package/renderers/handsontableRenderer/index.js +0 -6
- package/renderers/handsontableRenderer/index.mjs +0 -1
- package/renderers/selectRenderer/index.d.ts +0 -1
- package/renderers/selectRenderer/index.js +0 -6
- package/renderers/selectRenderer/index.mjs +0 -1
- package/renderers/selectRenderer/selectRenderer.d.ts +0 -5
- package/renderers/selectRenderer/selectRenderer.js +0 -27
- package/renderers/selectRenderer/selectRenderer.mjs +0 -22
- package/selection/highlight/types/areaLayered.js +0 -31
- package/selection/highlight/types/areaLayered.mjs +0 -26
- package/selection/highlight/types/column.js +0 -27
- package/selection/highlight/types/column.mjs +0 -22
- package/selection/highlight/types/row.js +0 -27
- package/selection/highlight/types/row.mjs +0 -22
- package/shortcutContexts/commands/editor/closeAndSave.js +0 -12
- package/shortcutContexts/commands/editor/closeAndSave.mjs +0 -8
- package/shortcutContexts/commands/editor/closeWithoutSaving.js +0 -12
- package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +0 -8
- package/shortcutContexts/commands/editor/fastOpen.js +0 -16
- package/shortcutContexts/commands/editor/fastOpen.mjs +0 -12
- package/shortcutContexts/commands/editor/index.js +0 -16
- package/shortcutContexts/commands/editor/index.mjs +0 -12
- package/shortcutContexts/commands/editor/open.js +0 -27
- package/shortcutContexts/commands/editor/open.mjs +0 -23
- package/shortcutContexts/commands/emptySelectedCells.js +0 -11
- package/shortcutContexts/commands/emptySelectedCells.mjs +0 -7
- package/shortcutContexts/commands/extendCellsSelection/down.js +0 -15
- package/shortcutContexts/commands/extendCellsSelection/down.mjs +0 -11
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +0 -25
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +0 -21
- package/shortcutContexts/commands/extendCellsSelection/index.js +0 -26
- package/shortcutContexts/commands/extendCellsSelection/index.mjs +0 -22
- package/shortcutContexts/commands/extendCellsSelection/left.js +0 -15
- package/shortcutContexts/commands/extendCellsSelection/left.mjs +0 -11
- package/shortcutContexts/commands/extendCellsSelection/right.js +0 -15
- package/shortcutContexts/commands/extendCellsSelection/right.mjs +0 -11
- package/shortcutContexts/commands/extendCellsSelection/toColumns.js +0 -19
- package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +0 -15
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +0 -29
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +0 -25
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +0 -19
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +0 -15
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +0 -19
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +0 -15
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +0 -29
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +0 -25
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +0 -29
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +0 -25
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +0 -29
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +0 -25
- package/shortcutContexts/commands/extendCellsSelection/toRows.js +0 -19
- package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +0 -15
- package/shortcutContexts/commands/extendCellsSelection/up.js +0 -15
- package/shortcutContexts/commands/extendCellsSelection/up.mjs +0 -11
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +0 -25
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +0 -21
- package/shortcutContexts/commands/index.js +0 -35
- package/shortcutContexts/commands/index.mjs +0 -31
- package/shortcutContexts/commands/moveCellSelection/down.js +0 -13
- package/shortcutContexts/commands/moveCellSelection/down.mjs +0 -9
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +0 -33
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +0 -29
- package/shortcutContexts/commands/moveCellSelection/index.js +0 -28
- package/shortcutContexts/commands/moveCellSelection/index.mjs +0 -24
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +0 -12
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +0 -8
- package/shortcutContexts/commands/moveCellSelection/inlineStart.js +0 -12
- package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +0 -8
- package/shortcutContexts/commands/moveCellSelection/left.js +0 -10
- package/shortcutContexts/commands/moveCellSelection/left.mjs +0 -6
- package/shortcutContexts/commands/moveCellSelection/right.js +0 -10
- package/shortcutContexts/commands/moveCellSelection/right.mjs +0 -6
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +0 -17
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +0 -13
- package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +0 -18
- package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +0 -14
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +0 -14
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +0 -10
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +0 -17
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +0 -13
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +0 -19
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +0 -15
- package/shortcutContexts/commands/moveCellSelection/toMostRight.js +0 -21
- package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +0 -17
- package/shortcutContexts/commands/moveCellSelection/toMostTop.js +0 -17
- package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +0 -13
- package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +0 -19
- package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +0 -15
- package/shortcutContexts/commands/moveCellSelection/up.js +0 -13
- package/shortcutContexts/commands/moveCellSelection/up.mjs +0 -9
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +0 -33
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +0 -29
- package/shortcutContexts/commands/populateSelectedCellsData.js +0 -29
- package/shortcutContexts/commands/populateSelectedCellsData.mjs +0 -25
- package/shortcutContexts/commands/scrollToFocusedCell.js +0 -35
- package/shortcutContexts/commands/scrollToFocusedCell.mjs +0 -31
- package/shortcutContexts/commands/selectAll.js +0 -12
- package/shortcutContexts/commands/selectAll.mjs +0 -8
- package/shortcutContexts/constants.js +0 -13
- package/shortcutContexts/constants.mjs +0 -8
- package/shortcutContexts/editor.js +0 -25
- package/shortcutContexts/editor.mjs +0 -21
- package/shortcutContexts/grid.js +0 -163
- package/shortcutContexts/grid.mjs +0 -159
- package/shortcutContexts/index.js +0 -24
- package/shortcutContexts/index.mjs +0 -11
@@ -6,9 +6,9 @@ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollect
|
|
6
6
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
7
7
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
8
8
|
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
9
|
+
function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
|
9
10
|
function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
|
10
11
|
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
11
|
-
function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
|
12
12
|
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
13
13
|
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
14
14
|
function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
|
@@ -17,17 +17,16 @@ import Hooks from "../../pluginHooks.mjs";
|
|
17
17
|
import { stringify, parse } from "../../3rdparty/SheetClip/index.mjs";
|
18
18
|
import { arrayEach } from "../../helpers/array.mjs";
|
19
19
|
import { sanitize } from "../../helpers/string.mjs";
|
20
|
-
import {
|
21
|
-
import { isSafari } from "../../helpers/browser.mjs";
|
20
|
+
import { getSelectionText } from "../../helpers/dom/element.mjs";
|
22
21
|
import copyItem from "./contextMenuItem/copy.mjs";
|
23
22
|
import copyColumnHeadersOnlyItem from "./contextMenuItem/copyColumnHeadersOnly.mjs";
|
24
23
|
import copyWithColumnGroupHeadersItem from "./contextMenuItem/copyWithColumnGroupHeaders.mjs";
|
25
24
|
import copyWithColumnHeadersItem from "./contextMenuItem/copyWithColumnHeaders.mjs";
|
26
25
|
import cutItem from "./contextMenuItem/cut.mjs";
|
27
26
|
import PasteEvent from "./pasteEvent.mjs";
|
27
|
+
import { createElement, destroyElement } from "./focusableElement.mjs";
|
28
28
|
import { CopyableRangesFactory, normalizeRanges } from "./copyableRanges.mjs";
|
29
29
|
import { _dataToHTML, htmlToGridSettings } from "../../utils/parseTable.mjs";
|
30
|
-
import EventManager from "../../eventManager.mjs";
|
31
30
|
Hooks.getSingleton().register('afterCopyLimit');
|
32
31
|
Hooks.getSingleton().register('modifyCopyableRange');
|
33
32
|
Hooks.getSingleton().register('beforeCut');
|
@@ -83,21 +82,10 @@ var _copyMode = /*#__PURE__*/new WeakMap();
|
|
83
82
|
var _isTriggeredByCopy = /*#__PURE__*/new WeakMap();
|
84
83
|
var _isTriggeredByCut = /*#__PURE__*/new WeakMap();
|
85
84
|
var _copyableRangesFactory = /*#__PURE__*/new WeakMap();
|
86
|
-
var _ensureClipboardEventsGetTriggered = /*#__PURE__*/new WeakSet();
|
87
85
|
var _countCopiedHeaders = /*#__PURE__*/new WeakSet();
|
88
|
-
var _addContentEditableToHighlightedCell = /*#__PURE__*/new WeakSet();
|
89
|
-
var _removeContentEditableFromHighlightedCell = /*#__PURE__*/new WeakSet();
|
90
86
|
export class CopyPaste extends BasePlugin {
|
91
87
|
constructor() {
|
92
88
|
super(...arguments);
|
93
|
-
/**
|
94
|
-
* Remove the `contenteditable` attribute from the highlighted cell and deselect its content.
|
95
|
-
*/
|
96
|
-
_classPrivateMethodInitSpec(this, _removeContentEditableFromHighlightedCell);
|
97
|
-
/**
|
98
|
-
* Add the `contenteditable` attribute to the highlighted cell and select its content.
|
99
|
-
*/
|
100
|
-
_classPrivateMethodInitSpec(this, _addContentEditableToHighlightedCell);
|
101
89
|
/**
|
102
90
|
* Counts how many column headers will be copied based on the passed range.
|
103
91
|
*
|
@@ -107,12 +95,6 @@ export class CopyPaste extends BasePlugin {
|
|
107
95
|
* information with the number of copied headers.
|
108
96
|
*/
|
109
97
|
_classPrivateMethodInitSpec(this, _countCopiedHeaders);
|
110
|
-
/**
|
111
|
-
* Ensure that the `copy`/`cut` events get triggered properly in Safari.
|
112
|
-
*
|
113
|
-
* @param {string} eventName Name of the event to get triggered.
|
114
|
-
*/
|
115
|
-
_classPrivateMethodInitSpec(this, _ensureClipboardEventsGetTriggered);
|
116
98
|
/**
|
117
99
|
* The maximum number of columns than can be copied to the clipboard.
|
118
100
|
*
|
@@ -230,6 +212,13 @@ export class CopyPaste extends BasePlugin {
|
|
230
212
|
* @type {Array<{startRow: number, startCol: number, endRow: number, endCol: number}>}
|
231
213
|
*/
|
232
214
|
_defineProperty(this, "copyableRanges", []);
|
215
|
+
/**
|
216
|
+
* Provides focusable element to support IME and copy/paste/cut actions.
|
217
|
+
*
|
218
|
+
* @private
|
219
|
+
* @type {FocusableWrapper}
|
220
|
+
*/
|
221
|
+
_defineProperty(this, "focusableElement", void 0);
|
233
222
|
}
|
234
223
|
static get PLUGIN_KEY() {
|
235
224
|
return PLUGIN_KEY;
|
@@ -256,7 +245,6 @@ export class CopyPaste extends BasePlugin {
|
|
256
245
|
* Enables the [`CopyPaste`](#copypaste) plugin for your Handsontable instance.
|
257
246
|
*/
|
258
247
|
enablePlugin() {
|
259
|
-
var _this = this;
|
260
248
|
if (this.enabled) {
|
261
249
|
return;
|
262
250
|
}
|
@@ -274,28 +262,11 @@ export class CopyPaste extends BasePlugin {
|
|
274
262
|
this.uiContainer = (_settings$uiContainer = settings.uiContainer) !== null && _settings$uiContainer !== void 0 ? _settings$uiContainer : this.uiContainer;
|
275
263
|
}
|
276
264
|
this.addHook('afterContextMenuDefaultOptions', options => this.onAfterContextMenuDefaultOptions(options));
|
265
|
+
this.addHook('afterOnCellMouseUp', () => this.onAfterOnCellMouseUp());
|
277
266
|
this.addHook('afterSelectionEnd', () => this.onAfterSelectionEnd());
|
278
|
-
this.
|
279
|
-
this.
|
280
|
-
|
281
|
-
});
|
282
|
-
this.eventManager.addEventListener(this.hot.rootDocument, 'cut', function () {
|
283
|
-
return _this.onCut(...arguments);
|
284
|
-
});
|
285
|
-
this.eventManager.addEventListener(this.hot.rootDocument, 'paste', function () {
|
286
|
-
return _this.onPaste(...arguments);
|
287
|
-
});
|
288
|
-
|
289
|
-
// Without this workaround Safari (tested on Safari@16.5.2) does allow copying/cutting from the browser menu.
|
290
|
-
if (isSafari()) {
|
291
|
-
this.eventManager.addEventListener(this.hot.rootDocument.body, 'mouseenter', function () {
|
292
|
-
return _this.onSafariMouseEnter(...arguments);
|
293
|
-
});
|
294
|
-
this.eventManager.addEventListener(this.hot.rootDocument.body, 'mouseleave', function () {
|
295
|
-
return _this.onSafariMouseLeave(...arguments);
|
296
|
-
});
|
297
|
-
this.addHook('afterSelection', () => this.onSafariAfterSelection());
|
298
|
-
}
|
267
|
+
this.addHook('beforeKeyDown', () => this.onBeforeKeyDown());
|
268
|
+
this.focusableElement = createElement(this.uiContainer);
|
269
|
+
this.focusableElement.addLocalHook('copy', event => this.onCopy(event)).addLocalHook('cut', event => this.onCut(event)).addLocalHook('paste', event => this.onPaste(event));
|
299
270
|
super.enablePlugin();
|
300
271
|
}
|
301
272
|
|
@@ -310,6 +281,7 @@ export class CopyPaste extends BasePlugin {
|
|
310
281
|
updatePlugin() {
|
311
282
|
this.disablePlugin();
|
312
283
|
this.enablePlugin();
|
284
|
+
this.getOrCreateFocusableElement();
|
313
285
|
super.updatePlugin();
|
314
286
|
}
|
315
287
|
|
@@ -317,6 +289,9 @@ export class CopyPaste extends BasePlugin {
|
|
317
289
|
* Disables the [`CopyPaste`](#copypaste) plugin for your Handsontable instance.
|
318
290
|
*/
|
319
291
|
disablePlugin() {
|
292
|
+
if (this.focusableElement) {
|
293
|
+
destroyElement(this.focusableElement);
|
294
|
+
}
|
320
295
|
super.disablePlugin();
|
321
296
|
}
|
322
297
|
|
@@ -338,7 +313,9 @@ export class CopyPaste extends BasePlugin {
|
|
338
313
|
let copyMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'cells-only';
|
339
314
|
_classPrivateFieldSet(this, _copyMode, copyMode);
|
340
315
|
_classPrivateFieldSet(this, _isTriggeredByCopy, true);
|
341
|
-
|
316
|
+
this.getOrCreateFocusableElement();
|
317
|
+
this.focusableElement.focus();
|
318
|
+
this.hot.rootDocument.execCommand('copy');
|
342
319
|
}
|
343
320
|
|
344
321
|
/**
|
@@ -371,7 +348,9 @@ export class CopyPaste extends BasePlugin {
|
|
371
348
|
*/
|
372
349
|
cut() {
|
373
350
|
_classPrivateFieldSet(this, _isTriggeredByCut, true);
|
374
|
-
|
351
|
+
this.getOrCreateFocusableElement();
|
352
|
+
this.focusableElement.focus();
|
353
|
+
this.hot.rootDocument.execCommand('cut');
|
375
354
|
}
|
376
355
|
|
377
356
|
/**
|
@@ -434,6 +413,7 @@ export class CopyPaste extends BasePlugin {
|
|
434
413
|
if (pastableHtml) {
|
435
414
|
pasteData.clipboardData.setData('text/html', pastableHtml);
|
436
415
|
}
|
416
|
+
this.getOrCreateFocusableElement();
|
437
417
|
this.onPaste(pasteData);
|
438
418
|
}
|
439
419
|
|
@@ -445,10 +425,6 @@ export class CopyPaste extends BasePlugin {
|
|
445
425
|
if (!selectionRange) {
|
446
426
|
return;
|
447
427
|
}
|
448
|
-
if (selectionRange.isSingleHeader()) {
|
449
|
-
this.copyableRanges = [];
|
450
|
-
return;
|
451
|
-
}
|
452
428
|
_classPrivateFieldGet(this, _copyableRangesFactory).setSelectedRange(selectionRange);
|
453
429
|
const groupedRanges = new Map([['headers', null], ['cells', null]]);
|
454
430
|
if (_classPrivateFieldGet(this, _copyMode) === 'column-headers-only') {
|
@@ -488,6 +464,21 @@ export class CopyPaste extends BasePlugin {
|
|
488
464
|
}
|
489
465
|
}
|
490
466
|
|
467
|
+
/**
|
468
|
+
* Force focus on editable element.
|
469
|
+
*
|
470
|
+
* @private
|
471
|
+
*/
|
472
|
+
getOrCreateFocusableElement() {
|
473
|
+
var _this$hot$getActiveEd;
|
474
|
+
const editableElement = (_this$hot$getActiveEd = this.hot.getActiveEditor()) === null || _this$hot$getActiveEd === void 0 ? void 0 : _this$hot$getActiveEd.TEXTAREA;
|
475
|
+
if (editableElement) {
|
476
|
+
this.focusableElement.setFocusableElement(editableElement);
|
477
|
+
} else {
|
478
|
+
this.focusableElement.useSecondaryElement();
|
479
|
+
}
|
480
|
+
}
|
481
|
+
|
491
482
|
/**
|
492
483
|
* Verifies if editor exists and is open.
|
493
484
|
*
|
@@ -495,8 +486,8 @@ export class CopyPaste extends BasePlugin {
|
|
495
486
|
* @returns {boolean}
|
496
487
|
*/
|
497
488
|
isEditorOpened() {
|
498
|
-
var _this$hot$
|
499
|
-
return (_this$hot$
|
489
|
+
var _this$hot$getActiveEd2;
|
490
|
+
return (_this$hot$getActiveEd2 = this.hot.getActiveEditor()) === null || _this$hot$getActiveEd2 === void 0 ? void 0 : _this$hot$getActiveEd2.isOpened();
|
500
491
|
}
|
501
492
|
/**
|
502
493
|
* Prepares new values to populate them into datasource.
|
@@ -563,6 +554,7 @@ export class CopyPaste extends BasePlugin {
|
|
563
554
|
this.hot.populateFromArray(startRow, startColumn, newRows, void 0, void 0, 'CopyPaste.paste', this.pasteMode);
|
564
555
|
return [startRow, startColumn, lastVisualRow, lastVisualColumn];
|
565
556
|
}
|
557
|
+
|
566
558
|
/**
|
567
559
|
* `copy` event callback on textarea element.
|
568
560
|
*
|
@@ -629,7 +621,7 @@ export class CopyPaste extends BasePlugin {
|
|
629
621
|
* @private
|
630
622
|
*/
|
631
623
|
onPaste(event) {
|
632
|
-
if (!this.hot.isListening() || this.isEditorOpened()
|
624
|
+
if (!this.hot.isListening() || this.isEditorOpened()) {
|
633
625
|
return;
|
634
626
|
}
|
635
627
|
if (event && event.preventDefault) {
|
@@ -654,7 +646,7 @@ export class CopyPaste extends BasePlugin {
|
|
654
646
|
if (typeof pastedData === 'string') {
|
655
647
|
pastedData = parse(pastedData);
|
656
648
|
}
|
657
|
-
if (pastedData
|
649
|
+
if (pastedData && pastedData.length === 0) {
|
658
650
|
return;
|
659
651
|
}
|
660
652
|
if (this.hot.runHooks('beforePaste', pastedData, this.copyableRanges) === false) {
|
@@ -688,74 +680,64 @@ export class CopyPaste extends BasePlugin {
|
|
688
680
|
}
|
689
681
|
|
690
682
|
/**
|
691
|
-
* Force focus on focusableElement
|
683
|
+
* Force focus on focusableElement.
|
692
684
|
*
|
693
685
|
* @private
|
694
686
|
*/
|
695
|
-
|
696
|
-
|
687
|
+
onAfterOnCellMouseUp() {
|
688
|
+
// Changing focused element will remove current selection. It's unnecessary in case when we give possibility
|
689
|
+
// for fragment selection
|
690
|
+
if (!this.hot.isListening() || this.isEditorOpened() || this.hot.getSettings().fragmentSelection) {
|
697
691
|
return;
|
698
692
|
}
|
699
|
-
|
700
|
-
|
701
|
-
}
|
702
|
-
this.setCopyableText();
|
703
|
-
}
|
704
|
-
|
705
|
-
/**
|
706
|
-
* `document.body` `mouseenter` callback used to work around a Safari's problem with copying/cutting from the
|
707
|
-
* browser's menu.
|
708
|
-
*
|
709
|
-
* @private
|
710
|
-
*/
|
711
|
-
onSafariMouseEnter() {
|
712
|
-
_classPrivateMethodGet(this, _removeContentEditableFromHighlightedCell, _removeContentEditableFromHighlightedCell2).call(this);
|
693
|
+
this.getOrCreateFocusableElement();
|
694
|
+
this.focusableElement.focus();
|
713
695
|
}
|
714
696
|
|
715
697
|
/**
|
716
|
-
*
|
717
|
-
* browser's menu.
|
698
|
+
* Force focus on focusableElement after end of the selection.
|
718
699
|
*
|
719
700
|
* @private
|
720
701
|
*/
|
721
|
-
|
722
|
-
|
702
|
+
onAfterSelectionEnd() {
|
703
|
+
if (this.isEditorOpened()) {
|
704
|
+
return;
|
705
|
+
}
|
706
|
+
this.getOrCreateFocusableElement();
|
707
|
+
if (this.hot.getSettings().fragmentSelection && this.focusableElement.getFocusableElement() !== this.hot.rootDocument.activeElement && getSelectionText()) {
|
708
|
+
return;
|
709
|
+
}
|
710
|
+
this.setCopyableText();
|
711
|
+
this.focusableElement.focus();
|
723
712
|
}
|
724
713
|
|
725
714
|
/**
|
726
|
-
* `
|
715
|
+
* `beforeKeyDown` listener to force focus of focusableElement.
|
727
716
|
*
|
728
717
|
* @private
|
729
718
|
*/
|
730
|
-
|
731
|
-
|
719
|
+
onBeforeKeyDown() {
|
720
|
+
if (!this.hot.isListening() || this.isEditorOpened()) {
|
721
|
+
return;
|
722
|
+
}
|
723
|
+
const activeElement = this.hot.rootDocument.activeElement;
|
724
|
+
const activeEditor = this.hot.getActiveEditor();
|
725
|
+
if (!activeEditor || activeElement !== this.focusableElement.getFocusableElement() && activeElement !== activeEditor.select) {
|
726
|
+
return;
|
727
|
+
}
|
728
|
+
this.getOrCreateFocusableElement();
|
729
|
+
this.focusableElement.focus();
|
732
730
|
}
|
733
731
|
|
734
732
|
/**
|
735
733
|
* Destroys the `CopyPaste` plugin instance.
|
736
734
|
*/
|
737
735
|
destroy() {
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
function _ensureClipboardEventsGetTriggered2(eventName) {
|
742
|
-
// Without this workaround Safari (tested on Safari@16.5.2) does not trigger the 'copy' event.
|
743
|
-
if (isSafari()) {
|
744
|
-
const lastSelectedRange = this.hot.getSelectedRangeLast();
|
745
|
-
if (lastSelectedRange) {
|
746
|
-
const {
|
747
|
-
row: highlightRow,
|
748
|
-
col: highlightColumn
|
749
|
-
} = lastSelectedRange.highlight;
|
750
|
-
const currentlySelectedCell = this.hot.getCell(highlightRow, highlightColumn, true);
|
751
|
-
if (currentlySelectedCell) {
|
752
|
-
runWithSelectedContendEditableElement(currentlySelectedCell, () => {
|
753
|
-
this.hot.rootDocument.execCommand(eventName);
|
754
|
-
});
|
755
|
-
}
|
736
|
+
if (this.focusableElement) {
|
737
|
+
destroyElement(this.focusableElement);
|
738
|
+
this.focusableElement = null;
|
756
739
|
}
|
757
|
-
|
758
|
-
this.hot.rootDocument.execCommand(eventName);
|
740
|
+
super.destroy();
|
759
741
|
}
|
760
742
|
}
|
761
743
|
function _countCopiedHeaders2(ranges) {
|
@@ -772,35 +754,4 @@ function _countCopiedHeaders2(ranges) {
|
|
772
754
|
return {
|
773
755
|
columnHeadersCount
|
774
756
|
};
|
775
|
-
}
|
776
|
-
function _addContentEditableToHighlightedCell2() {
|
777
|
-
if (this.hot.isListening()) {
|
778
|
-
const lastSelectedRange = this.hot.getSelectedRangeLast();
|
779
|
-
if (lastSelectedRange) {
|
780
|
-
const {
|
781
|
-
row: highlightRow,
|
782
|
-
col: highlightColumn
|
783
|
-
} = lastSelectedRange.highlight;
|
784
|
-
const currentlySelectedCell = this.hot.getCell(highlightRow, highlightColumn, true);
|
785
|
-
if (currentlySelectedCell) {
|
786
|
-
makeElementContentEditableAndSelectItsContent(currentlySelectedCell);
|
787
|
-
}
|
788
|
-
}
|
789
|
-
}
|
790
|
-
}
|
791
|
-
function _removeContentEditableFromHighlightedCell2() {
|
792
|
-
// If the instance is not listening, the workaround is not needed.
|
793
|
-
if (this.hot.isListening()) {
|
794
|
-
const lastSelectedRange = this.hot.getSelectedRangeLast();
|
795
|
-
if (lastSelectedRange) {
|
796
|
-
const {
|
797
|
-
row: highlightRow,
|
798
|
-
col: highlightColumn
|
799
|
-
} = lastSelectedRange.highlight;
|
800
|
-
const currentlySelectedCell = this.hot.getCell(highlightRow, highlightColumn, true);
|
801
|
-
if (currentlySelectedCell !== null && currentlySelectedCell !== void 0 && currentlySelectedCell.hasAttribute('contenteditable')) {
|
802
|
-
removeContentEditableFromElementAndDeselect(currentlySelectedCell);
|
803
|
-
}
|
804
|
-
}
|
805
|
-
}
|
806
757
|
}
|
@@ -0,0 +1,186 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.createElement = createElement;
|
5
|
+
exports.deactivateElement = deactivateElement;
|
6
|
+
exports.destroyElement = destroyElement;
|
7
|
+
var _eventManager = _interopRequireDefault(require("../../eventManager"));
|
8
|
+
var _localHooks = _interopRequireDefault(require("../../mixins/localHooks"));
|
9
|
+
var _object = require("../../helpers/object");
|
10
|
+
var _browser = require("../../helpers/browser");
|
11
|
+
var _element = require("../../helpers/dom/element");
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
13
|
+
/**
|
14
|
+
* @private
|
15
|
+
* @class FocusableWrapper
|
16
|
+
*/
|
17
|
+
class FocusableWrapper {
|
18
|
+
constructor(container) {
|
19
|
+
this.rootDocument = container.defaultView ? container : container.ownerDocument;
|
20
|
+
/**
|
21
|
+
* The main/operational focusable element.
|
22
|
+
*
|
23
|
+
* @type {HTMLElement}
|
24
|
+
*/
|
25
|
+
this.mainElement = null;
|
26
|
+
/**
|
27
|
+
* Instance of EventManager.
|
28
|
+
*
|
29
|
+
* @type {EventManager}
|
30
|
+
*/
|
31
|
+
this.eventManager = new _eventManager.default(this);
|
32
|
+
/**
|
33
|
+
* An object for tracking information about event listeners attached to the focusable element.
|
34
|
+
*
|
35
|
+
* @type {WeakSet}
|
36
|
+
*/
|
37
|
+
this.listenersCount = new WeakSet();
|
38
|
+
/**
|
39
|
+
* Parent for an focusable element.
|
40
|
+
*
|
41
|
+
* @type {HTMLElement}
|
42
|
+
*/
|
43
|
+
this.container = container;
|
44
|
+
}
|
45
|
+
|
46
|
+
/**
|
47
|
+
* Switch to the secondary focusable element. Used when no any main focusable element is provided.
|
48
|
+
*/
|
49
|
+
useSecondaryElement() {
|
50
|
+
const el = createOrGetSecondaryElement(this.container);
|
51
|
+
if (!this.listenersCount.has(el)) {
|
52
|
+
this.listenersCount.add(el);
|
53
|
+
forwardEventsToLocalHooks(this.eventManager, el, this);
|
54
|
+
}
|
55
|
+
this.mainElement = el;
|
56
|
+
}
|
57
|
+
|
58
|
+
/**
|
59
|
+
* Switch to the main focusable element.
|
60
|
+
*
|
61
|
+
* @param {HTMLElement} element The DOM element.
|
62
|
+
*/
|
63
|
+
setFocusableElement(element) {
|
64
|
+
if (!this.listenersCount.has(element)) {
|
65
|
+
this.listenersCount.add(element);
|
66
|
+
forwardEventsToLocalHooks(this.eventManager, element, this);
|
67
|
+
}
|
68
|
+
this.mainElement = element;
|
69
|
+
}
|
70
|
+
|
71
|
+
/**
|
72
|
+
* Get currently set focusable element.
|
73
|
+
*
|
74
|
+
* @returns {HTMLElement}
|
75
|
+
*/
|
76
|
+
getFocusableElement() {
|
77
|
+
return this.mainElement;
|
78
|
+
}
|
79
|
+
|
80
|
+
/**
|
81
|
+
* Set focus to the focusable element.
|
82
|
+
*/
|
83
|
+
focus() {
|
84
|
+
// Add an empty space to texarea. It is necessary for safari to enable "copy" command from menu bar.
|
85
|
+
this.mainElement.value = ' ';
|
86
|
+
if (!(0, _browser.isMobileBrowser)()) {
|
87
|
+
(0, _element.selectElementIfAllowed)(this.mainElement);
|
88
|
+
}
|
89
|
+
}
|
90
|
+
}
|
91
|
+
(0, _object.mixin)(FocusableWrapper, _localHooks.default);
|
92
|
+
const refCounter = new WeakMap();
|
93
|
+
|
94
|
+
/**
|
95
|
+
* Create and return the FocusableWrapper instance.
|
96
|
+
*
|
97
|
+
* @param {HTMLElement} container The container element, holder for focusable elements.
|
98
|
+
* @returns {FocusableWrapper}
|
99
|
+
*/
|
100
|
+
function createElement(container) {
|
101
|
+
const focusableWrapper = new FocusableWrapper(container);
|
102
|
+
let counter = refCounter.get(container);
|
103
|
+
counter = isNaN(counter) ? 0 : counter;
|
104
|
+
refCounter.set(container, counter + 1);
|
105
|
+
return focusableWrapper;
|
106
|
+
}
|
107
|
+
|
108
|
+
/**
|
109
|
+
* Deactivate the FocusableWrapper instance.
|
110
|
+
*
|
111
|
+
* @param {FocusableWrapper} wrapper The instance of the FocusableWrapper class.
|
112
|
+
*/
|
113
|
+
function deactivateElement(wrapper) {
|
114
|
+
wrapper.eventManager.clear();
|
115
|
+
}
|
116
|
+
const runLocalHooks = (eventName, subject) => event => subject.runLocalHooks(eventName, event);
|
117
|
+
|
118
|
+
/**
|
119
|
+
* Register copy/cut/paste events and forward their actions to the subject local hooks system.
|
120
|
+
*
|
121
|
+
* @param {EventManager} eventManager The instance of the EventManager class.
|
122
|
+
* @param {HTMLElement} element The element on which the listeners are mounted.
|
123
|
+
* @param {FocusableWrapper} subject The subject object for local hooks.
|
124
|
+
*/
|
125
|
+
function forwardEventsToLocalHooks(eventManager, element, subject) {
|
126
|
+
eventManager.addEventListener(element, 'copy', runLocalHooks('copy', subject));
|
127
|
+
eventManager.addEventListener(element, 'cut', runLocalHooks('cut', subject));
|
128
|
+
eventManager.addEventListener(element, 'paste', runLocalHooks('paste', subject));
|
129
|
+
}
|
130
|
+
const secondaryElements = new WeakMap();
|
131
|
+
|
132
|
+
/**
|
133
|
+
* Create and attach newly created focusable element to the DOM.
|
134
|
+
*
|
135
|
+
* @param {HTMLElement} container The container element, holder for focusable elements.
|
136
|
+
* @returns {HTMLElement}
|
137
|
+
*/
|
138
|
+
function createOrGetSecondaryElement(container) {
|
139
|
+
const secondaryElement = secondaryElements.get(container);
|
140
|
+
if (secondaryElement) {
|
141
|
+
if (!secondaryElement.parentElement) {
|
142
|
+
container.appendChild(secondaryElement);
|
143
|
+
}
|
144
|
+
return secondaryElement;
|
145
|
+
}
|
146
|
+
const doc = container.defaultView ? container : container.ownerDocument;
|
147
|
+
const element = doc.createElement('textarea');
|
148
|
+
secondaryElements.set(container, element);
|
149
|
+
element.setAttribute('data-hot-input', ''); // Makes the element recognizable by Hot as its own component's element.
|
150
|
+
element.className = 'HandsontableCopyPaste';
|
151
|
+
element.tabIndex = -1;
|
152
|
+
element.autocomplete = 'off';
|
153
|
+
element.wrap = 'hard';
|
154
|
+
element.value = ' ';
|
155
|
+
container.appendChild(element);
|
156
|
+
return element;
|
157
|
+
}
|
158
|
+
|
159
|
+
/**
|
160
|
+
* Destroy the FocusableWrapper instance.
|
161
|
+
*
|
162
|
+
* @param {FocusableWrapper} wrapper The instance of the FocusableWrapper class.
|
163
|
+
*/
|
164
|
+
function destroyElement(wrapper) {
|
165
|
+
if (!(wrapper instanceof FocusableWrapper)) {
|
166
|
+
return;
|
167
|
+
}
|
168
|
+
let counter = refCounter.get(wrapper.container);
|
169
|
+
counter = isNaN(counter) ? 0 : counter;
|
170
|
+
if (counter > 0) {
|
171
|
+
counter -= 1;
|
172
|
+
}
|
173
|
+
deactivateElement(wrapper);
|
174
|
+
if (counter <= 0) {
|
175
|
+
counter = 0;
|
176
|
+
|
177
|
+
// Detach secondary element from the DOM.
|
178
|
+
const secondaryElement = secondaryElements.get(wrapper.container);
|
179
|
+
if (secondaryElement && secondaryElement.parentNode) {
|
180
|
+
secondaryElement.parentNode.removeChild(secondaryElement);
|
181
|
+
secondaryElements.delete(wrapper.container);
|
182
|
+
}
|
183
|
+
wrapper.mainElement = null;
|
184
|
+
}
|
185
|
+
refCounter.set(wrapper.container, counter);
|
186
|
+
}
|