@atlaskit/editor-plugin-table 7.2.2 → 7.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/cjs/commands/column-resize.js +115 -45
- package/dist/cjs/commands/go-to-next-cell.js +7 -11
- package/dist/cjs/commands/misc.js +3 -2
- package/dist/cjs/commands/selection.js +3 -3
- package/dist/cjs/event-handlers.js +38 -25
- package/dist/cjs/pm-plugins/drag-and-drop/commands-with-analytics.js +3 -19
- package/dist/cjs/pm-plugins/keymap.js +1 -0
- package/dist/cjs/pm-plugins/main.js +43 -9
- package/dist/cjs/pm-plugins/table-resizing/event-handlers.js +37 -7
- package/dist/cjs/pm-plugins/table-resizing/plugin.js +20 -6
- package/dist/cjs/reducer.js +5 -2
- package/dist/cjs/utils/drag-menu.js +37 -23
- package/dist/cjs/utils/merged-cells.js +66 -1
- package/dist/es2019/commands/column-resize.js +100 -35
- package/dist/es2019/commands/go-to-next-cell.js +7 -9
- package/dist/es2019/commands/misc.js +3 -2
- package/dist/es2019/commands/selection.js +5 -5
- package/dist/es2019/event-handlers.js +17 -3
- package/dist/es2019/pm-plugins/drag-and-drop/commands-with-analytics.js +4 -20
- package/dist/es2019/pm-plugins/keymap.js +3 -2
- package/dist/es2019/pm-plugins/main.js +41 -5
- package/dist/es2019/pm-plugins/table-resizing/event-handlers.js +37 -4
- package/dist/es2019/pm-plugins/table-resizing/plugin.js +16 -1
- package/dist/es2019/reducer.js +5 -2
- package/dist/es2019/utils/drag-menu.js +38 -14
- package/dist/es2019/utils/merged-cells.js +73 -0
- package/dist/esm/commands/column-resize.js +105 -35
- package/dist/esm/commands/go-to-next-cell.js +7 -11
- package/dist/esm/commands/misc.js +3 -2
- package/dist/esm/commands/selection.js +5 -5
- package/dist/esm/event-handlers.js +38 -25
- package/dist/esm/pm-plugins/drag-and-drop/commands-with-analytics.js +4 -20
- package/dist/esm/pm-plugins/keymap.js +3 -2
- package/dist/esm/pm-plugins/main.js +38 -4
- package/dist/esm/pm-plugins/table-resizing/event-handlers.js +34 -4
- package/dist/esm/pm-plugins/table-resizing/plugin.js +15 -1
- package/dist/esm/reducer.js +5 -2
- package/dist/esm/utils/drag-menu.js +36 -22
- package/dist/esm/utils/merged-cells.js +65 -0
- package/dist/types/commands/column-resize.d.ts +2 -0
- package/dist/types/commands/misc.d.ts +1 -1
- package/dist/types/types.d.ts +16 -0
- package/dist/types/utils/drag-menu.d.ts +4 -1
- package/dist/types/utils/merged-cells.d.ts +2 -0
- package/dist/types-ts4.5/commands/column-resize.d.ts +2 -0
- package/dist/types-ts4.5/commands/misc.d.ts +1 -1
- package/dist/types-ts4.5/types.d.ts +16 -0
- package/dist/types-ts4.5/utils/drag-menu.d.ts +4 -1
- package/dist/types-ts4.5/utils/merged-cells.d.ts +2 -0
- package/package.json +10 -17
- package/src/commands/column-resize.ts +155 -40
- package/src/commands/go-to-next-cell.ts +6 -15
- package/src/commands/misc.ts +2 -0
- package/src/commands/selection.ts +5 -5
- package/src/event-handlers.ts +21 -4
- package/src/pm-plugins/drag-and-drop/commands-with-analytics.ts +11 -32
- package/src/pm-plugins/keymap.ts +3 -0
- package/src/pm-plugins/main.ts +47 -2
- package/src/pm-plugins/table-resizing/event-handlers.ts +33 -5
- package/src/pm-plugins/table-resizing/plugin.ts +18 -1
- package/src/reducer.ts +5 -2
- package/src/types.ts +16 -0
- package/src/utils/drag-menu.ts +94 -20
- package/src/utils/merged-cells.ts +78 -0
- package/tsconfig.dev.json +0 -69
- package/tsconfig.json +2 -877
- package/examples/99-testing.tsx +0 -140
- package/examples/config.jsonc +0 -14
- package/src/__tests__/unit/analytics.ts +0 -888
- package/src/__tests__/unit/collab.ts +0 -93
- package/src/__tests__/unit/commands/go-to-next-cell.ts +0 -173
- package/src/__tests__/unit/commands/insert.ts +0 -137
- package/src/__tests__/unit/commands/misc.ts +0 -185
- package/src/__tests__/unit/commands/sort.ts +0 -128
- package/src/__tests__/unit/commands.ts +0 -745
- package/src/__tests__/unit/copy-button.ts +0 -22
- package/src/__tests__/unit/copy-paste.ts +0 -677
- package/src/__tests__/unit/event-handlers/index.ts +0 -125
- package/src/__tests__/unit/event-handlers.ts +0 -296
- package/src/__tests__/unit/fix-tables.ts +0 -164
- package/src/__tests__/unit/get-toolbar-config.ts +0 -127
- package/src/__tests__/unit/handlers.ts +0 -98
- package/src/__tests__/unit/hover-selection.ts +0 -230
- package/src/__tests__/unit/index-with-fake-timers.ts +0 -111
- package/src/__tests__/unit/index.ts +0 -912
- package/src/__tests__/unit/layout.ts +0 -146
- package/src/__tests__/unit/nodeviews/OverflowShadowsObserver.ts +0 -162
- package/src/__tests__/unit/nodeviews/TableComponent.tsx +0 -280
- package/src/__tests__/unit/nodeviews/TableContainer.tsx +0 -525
- package/src/__tests__/unit/nodeviews/cell.ts +0 -132
- package/src/__tests__/unit/nodeviews/table.ts +0 -129
- package/src/__tests__/unit/pm-plugins/analytics.ts +0 -327
- package/src/__tests__/unit/pm-plugins/decorations/column-controls.ts +0 -94
- package/src/__tests__/unit/pm-plugins/decorations/column-resizing.ts +0 -176
- package/src/__tests__/unit/pm-plugins/decorations/plugin.ts +0 -211
- package/src/__tests__/unit/pm-plugins/main.ts +0 -214
- package/src/__tests__/unit/pm-plugins/safari-delete-composition-text-issue-workaround.ts +0 -101
- package/src/__tests__/unit/pm-plugins/sticky-headers/tableRow.tsx +0 -562
- package/src/__tests__/unit/pm-plugins/table-local-id.ts +0 -507
- package/src/__tests__/unit/pm-plugins/table-resizing/colgroup.ts +0 -269
- package/src/__tests__/unit/pm-plugins/table-resizing/event-handlers.ts +0 -192
- package/src/__tests__/unit/pm-plugins/table-resizing/utils/resize-state.ts +0 -33
- package/src/__tests__/unit/pm-plugins/table-width.ts +0 -292
- package/src/__tests__/unit/sort-column.ts +0 -399
- package/src/__tests__/unit/toolbar.ts +0 -512
- package/src/__tests__/unit/transforms/delete-columns.ts +0 -597
- package/src/__tests__/unit/transforms/delete-rows.ts +0 -620
- package/src/__tests__/unit/transforms/merging.ts +0 -392
- package/src/__tests__/unit/ui/ContextualMenu.tsx +0 -71
- package/src/__tests__/unit/ui/CornerControls.tsx +0 -99
- package/src/__tests__/unit/ui/DeleteButton.tsx +0 -38
- package/src/__tests__/unit/ui/FixedButton.tsx +0 -217
- package/src/__tests__/unit/ui/FloatingContextualButton.tsx +0 -123
- package/src/__tests__/unit/ui/FloatingContextualMenu.tsx +0 -68
- package/src/__tests__/unit/ui/FloatingDeleteButton.tsx +0 -178
- package/src/__tests__/unit/ui/FloatingDragMenu.tsx +0 -511
- package/src/__tests__/unit/ui/FloatingInsertButton.tsx +0 -322
- package/src/__tests__/unit/ui/NumberColumn.tsx +0 -146
- package/src/__tests__/unit/ui/RowControls.tsx +0 -294
- package/src/__tests__/unit/ui/RowDragControls.tsx +0 -129
- package/src/__tests__/unit/ui/TableFloatingColumnControls.tsx +0 -189
- package/src/__tests__/unit/ui/TableFloatingControls.tsx +0 -118
- package/src/__tests__/unit/undo-redo.ts +0 -220
- package/src/__tests__/unit/utils/analytics.ts +0 -98
- package/src/__tests__/unit/utils/collapse.ts +0 -57
- package/src/__tests__/unit/utils/column-controls.ts +0 -205
- package/src/__tests__/unit/utils/dom.ts +0 -180
- package/src/__tests__/unit/utils/merged-cells.ts +0 -156
- package/src/__tests__/unit/utils/nodes.ts +0 -79
- package/src/__tests__/unit/utils/row-controls.ts +0 -195
- package/src/__tests__/unit/utils/table.ts +0 -96
- package/src/__tests__/unit/utils.ts +0 -670
- package/src/__tests__/visual-regression/__fixtures__/sticky-header-with-horizontal-scroll.json +0 -5228
- package/src/__tests__/visual-regression/__fixtures__/table-with-100-numbered-list-items.json +0 -20272
- package/src/__tests__/visual-regression/__image_snapshots__/cell-options-menu-ts-table-cell-options-menu-delete-column-menu-item-should-remove-the-table-column-on-click-1-snap.png +0 -3
- package/src/__tests__/visual-regression/__image_snapshots__/cell-options-menu-ts-table-cell-options-menu-delete-column-menu-item-visual-hints-should-be-added-to-the-table-column-on-hover-1-snap.png +0 -3
- package/src/__tests__/visual-regression/__image_snapshots__/cell-options-menu-ts-table-cell-options-menu-delete-row-menu-item-should-remove-the-table-row-on-click-1-snap.png +0 -3
- package/src/__tests__/visual-regression/__image_snapshots__/cell-options-menu-ts-table-cell-options-menu-delete-row-menu-item-visual-hints-should-be-added-to-the-table-row-on-hover-1-snap.png +0 -3
- package/src/__tests__/visual-regression/__image_snapshots__/copy-button-ts-floating-toolbar-copy-button-table-target-node-displays-blue-border-when-copy-button-is-hovered-1-snap.png +0 -3
- package/src/__tests__/visual-regression/__image_snapshots__/index-ts-snapshot-test-table-numbered-list-should-not-overflow-table-cell-when-there-are-more-than-100-ordered-list-items-1-snap.png +0 -3
- package/src/__tests__/visual-regression/__image_snapshots__/index-ts-snapshot-test-table-numbered-list-should-not-overflow-table-cell-when-there-are-more-than-100-ordered-list-items-2-snap.png +0 -3
- package/src/__tests__/visual-regression/__image_snapshots__/index-ts-snapshot-test-table-numbered-list-should-not-overflow-table-cell-when-there-are-more-than-100-ordered-list-items-3-snap.png +0 -3
- package/src/__tests__/visual-regression/__image_snapshots__/sticky-header-ts-snapshot-test-table-sticky-header-should-align-with-table-cell-when-active-1-snap.png +0 -3
- package/src/__tests__/visual-regression/__image_snapshots__/sticky-header-ts-snapshot-test-table-sticky-header-should-align-with-table-cell-when-active-2-snap.png +0 -3
- package/src/__tests__/visual-regression/cell-options-menu.ts +0 -101
- package/src/__tests__/visual-regression/copy-button.ts +0 -181
- package/src/__tests__/visual-regression/index.ts +0 -62
- package/src/__tests__/visual-regression/sticky-header.ts +0 -61
|
@@ -12,7 +12,11 @@ var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
|
|
|
12
12
|
var _transforms = require("@atlaskit/editor-common/transforms");
|
|
13
13
|
var _utils = require("@atlaskit/editor-common/utils");
|
|
14
14
|
var _utils2 = require("@atlaskit/editor-prosemirror/utils");
|
|
15
|
+
var _editorTables = require("@atlaskit/editor-tables");
|
|
16
|
+
var _utils3 = require("@atlaskit/editor-tables/utils");
|
|
17
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
15
18
|
var _commands = require("../commands");
|
|
19
|
+
var _columnResize = require("../commands/column-resize");
|
|
16
20
|
var _misc = require("../commands/misc");
|
|
17
21
|
var _eventHandlers = require("../event-handlers");
|
|
18
22
|
var _table = require("../nodeviews/table");
|
|
@@ -21,7 +25,7 @@ var _TableRow = _interopRequireDefault(require("../nodeviews/TableRow"));
|
|
|
21
25
|
var _plugin = require("../pm-plugins/decorations/plugin");
|
|
22
26
|
var _transforms2 = require("../transforms");
|
|
23
27
|
var _types = require("../types");
|
|
24
|
-
var
|
|
28
|
+
var _utils4 = require("../utils");
|
|
25
29
|
var _paste = require("../utils/paste");
|
|
26
30
|
var _defaultTableSelection = require("./default-table-selection");
|
|
27
31
|
var _pluginFactory = require("./plugin-factory");
|
|
@@ -106,7 +110,7 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatchAnalytic
|
|
|
106
110
|
var domAtPos = editorView.domAtPos.bind(editorView);
|
|
107
111
|
editorViewRef = editorView;
|
|
108
112
|
return {
|
|
109
|
-
update: function update(view) {
|
|
113
|
+
update: function update(view, prevState) {
|
|
110
114
|
var state = view.state,
|
|
111
115
|
dispatch = view.dispatch;
|
|
112
116
|
var selection = state.selection;
|
|
@@ -117,6 +121,28 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatchAnalytic
|
|
|
117
121
|
if (parent) {
|
|
118
122
|
tableRef = parent.querySelector('table') || undefined;
|
|
119
123
|
}
|
|
124
|
+
var tableNode = (0, _utils3.findTable)(state.selection);
|
|
125
|
+
if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
|
|
126
|
+
// when cursor leaves the table we need to stop column resizing
|
|
127
|
+
var pluginPrevState = (0, _pluginFactory.getPluginState)(prevState);
|
|
128
|
+
var isStopKeyboardColumResizing = pluginPrevState.isResizeHandleWidgetAdded && pluginPrevState.isKeyboardResize;
|
|
129
|
+
if (isStopKeyboardColumResizing) {
|
|
130
|
+
var isTableNodesDifferent = (pluginPrevState === null || pluginPrevState === void 0 ? void 0 : pluginPrevState.tableNode) !== (tableNode === null || tableNode === void 0 ? void 0 : tableNode.node);
|
|
131
|
+
if (pluginPrevState !== null && pluginPrevState !== void 0 && pluginPrevState.tableNode && tableNode && isTableNodesDifferent) {
|
|
132
|
+
var oldRowsNumber = _editorTables.TableMap.get(pluginPrevState.tableNode).height;
|
|
133
|
+
var newRowsNumber = _editorTables.TableMap.get(tableNode.node).height;
|
|
134
|
+
if (oldRowsNumber !== newRowsNumber ||
|
|
135
|
+
// Add/delete row
|
|
136
|
+
tableNode.node.attrs.localId !== pluginPrevState.tableNode.attrs.localId) {
|
|
137
|
+
// Jump to another table
|
|
138
|
+
(0, _columnResize.stopKeyboardColumnResizing)()(state, dispatch);
|
|
139
|
+
}
|
|
140
|
+
} else if (!tableNode) {
|
|
141
|
+
// selection outside of table
|
|
142
|
+
(0, _columnResize.stopKeyboardColumnResizing)()(state, dispatch);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
120
146
|
}
|
|
121
147
|
if (pluginState.tableRef !== tableRef) {
|
|
122
148
|
(0, _commands.setTableRef)(tableRef)(state, dispatch);
|
|
@@ -156,7 +182,7 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatchAnalytic
|
|
|
156
182
|
if (!(0, _coreUtils.insideTable)(editorState) && (0, _paste.isHeaderRowRequired)(editorState)) {
|
|
157
183
|
slice = (0, _misc.transformSliceToAddTableHeaders)(slice, schema);
|
|
158
184
|
}
|
|
159
|
-
slice = (0,
|
|
185
|
+
slice = (0, _utils4.transformSliceToFixHardBreakProblemOnCopyFromCell)(slice, schema);
|
|
160
186
|
|
|
161
187
|
// We do this separately, so it also applies to drag/drop events
|
|
162
188
|
// This needs to go before `transformSliceToRemoveOpenExpand`
|
|
@@ -167,14 +193,14 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatchAnalytic
|
|
|
167
193
|
slice = (0, _transforms.transformSliceToRemoveOpenExpand)(slice, schema);
|
|
168
194
|
|
|
169
195
|
/** If a partial paste of table, paste only table's content */
|
|
170
|
-
slice = (0,
|
|
196
|
+
slice = (0, _utils4.transformSliceToRemoveOpenTable)(slice, schema);
|
|
171
197
|
|
|
172
198
|
/** If a partial paste of bodied extension, paste only text */
|
|
173
199
|
slice = (0, _transforms.transformSliceToRemoveOpenBodiedExtension)(slice, schema);
|
|
174
200
|
|
|
175
201
|
/** If a partial paste of multi bodied extension, paste only children */
|
|
176
202
|
slice = (0, _transforms.transformSliceToRemoveOpenMultiBodiedExtension)(slice, schema);
|
|
177
|
-
slice = (0,
|
|
203
|
+
slice = (0, _utils4.transformSliceToCorrectEmptyTableCells)(slice, schema);
|
|
178
204
|
if (!pluginConfig.allowColumnResizing) {
|
|
179
205
|
slice = (0, _misc.transformSliceToRemoveColumnsWidths)(slice, schema);
|
|
180
206
|
}
|
|
@@ -190,7 +216,7 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatchAnalytic
|
|
|
190
216
|
var state = _ref2.state,
|
|
191
217
|
dispatch = _ref2.dispatch;
|
|
192
218
|
var decorationSet = _plugin.pluginKey.getState(state);
|
|
193
|
-
if ((0,
|
|
219
|
+
if ((0, _utils4.findControlsHoverDecoration)(decorationSet).length) {
|
|
194
220
|
(0, _commands.clearHoverSelection)()(state, dispatch);
|
|
195
221
|
}
|
|
196
222
|
|
|
@@ -213,9 +239,17 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatchAnalytic
|
|
|
213
239
|
var maybeTr = (0, _utils.closestElement)(domRef, 'tr');
|
|
214
240
|
return maybeTr ? maybeTr.classList.contains('sticky') : false;
|
|
215
241
|
},
|
|
216
|
-
handleTextInput: function handleTextInput(
|
|
217
|
-
var state =
|
|
218
|
-
dispatch =
|
|
242
|
+
handleTextInput: function handleTextInput(view, _from, _to, text) {
|
|
243
|
+
var state = view.state,
|
|
244
|
+
dispatch = view.dispatch;
|
|
245
|
+
if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
|
|
246
|
+
var _getPluginState = (0, _pluginFactory.getPluginState)(state),
|
|
247
|
+
isKeyboardResize = _getPluginState.isKeyboardResize;
|
|
248
|
+
if (isKeyboardResize) {
|
|
249
|
+
(0, _columnResize.stopKeyboardColumnResizing)()(state, dispatch);
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
219
253
|
var tr = (0, _transforms2.replaceSelectedTable)(state, text, _analytics.INPUT_METHOD.KEYBOARD, editorAnalyticsAPI);
|
|
220
254
|
if (tr.selectionSet) {
|
|
221
255
|
dispatch(tr);
|
|
@@ -11,12 +11,14 @@ var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
|
|
|
11
11
|
var _tableMap = require("@atlaskit/editor-tables/table-map");
|
|
12
12
|
var _utils = require("@atlaskit/editor-tables/utils");
|
|
13
13
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
14
|
+
var _columnResize = require("../../commands/column-resize");
|
|
14
15
|
var _misc = require("../../commands/misc");
|
|
15
16
|
var _transforms = require("../../transforms");
|
|
16
17
|
var _utils2 = require("../../utils");
|
|
18
|
+
var _pluginFactory = require("../plugin-factory");
|
|
17
19
|
var _tableAnalytics = require("../table-analytics");
|
|
18
20
|
var _commands = require("./commands");
|
|
19
|
-
var
|
|
21
|
+
var _pluginFactory2 = require("./plugin-factory");
|
|
20
22
|
var _utils3 = require("./utils");
|
|
21
23
|
var handleMouseDown = exports.handleMouseDown = function handleMouseDown(view, event, localResizeHandlePos, getEditorContainerWidth, getEditorFeatureFlags, editorAnalyticsAPI) {
|
|
22
24
|
var state = view.state,
|
|
@@ -26,6 +28,8 @@ var handleMouseDown = exports.handleMouseDown = function handleMouseDown(view, e
|
|
|
26
28
|
if (editorDisabled || localResizeHandlePos === null || !(0, _utils3.pointsAtCell)(state.doc.resolve(localResizeHandlePos))) {
|
|
27
29
|
return false;
|
|
28
30
|
}
|
|
31
|
+
var _getTablePluginState = (0, _pluginFactory.getPluginState)(state),
|
|
32
|
+
isKeyboardResize = _getTablePluginState.isKeyboardResize;
|
|
29
33
|
event.preventDefault();
|
|
30
34
|
var tr = view.state.tr;
|
|
31
35
|
tr.setMeta(_tableAnalytics.META_KEYS.OVERFLOW_TRIGGER, {
|
|
@@ -92,9 +96,11 @@ var handleMouseDown = exports.handleMouseDown = function handleMouseDown(view, e
|
|
|
92
96
|
var clientX = event.clientX;
|
|
93
97
|
var state = view.state,
|
|
94
98
|
dispatch = view.dispatch;
|
|
95
|
-
var _getPluginState = (0,
|
|
99
|
+
var _getPluginState = (0, _pluginFactory2.getPluginState)(state),
|
|
96
100
|
dragging = _getPluginState.dragging,
|
|
97
101
|
resizeHandlePos = _getPluginState.resizeHandlePos;
|
|
102
|
+
var _getTablePluginState2 = (0, _pluginFactory.getPluginState)(state),
|
|
103
|
+
isTableHovered = _getTablePluginState2.isTableHovered;
|
|
98
104
|
if (resizeHandlePos === null) {
|
|
99
105
|
return (0, _commands.stopResizing)()(state, dispatch);
|
|
100
106
|
}
|
|
@@ -107,9 +113,20 @@ var handleMouseDown = exports.handleMouseDown = function handleMouseDown(view, e
|
|
|
107
113
|
var start = $cell.start(-1);
|
|
108
114
|
var table = $cell.node(-1);
|
|
109
115
|
|
|
110
|
-
// If we let go in the same place we started,
|
|
116
|
+
// If we let go in the same place we started, don't need to do anything.
|
|
111
117
|
if (dragging && clientX === dragging.startX) {
|
|
112
|
-
|
|
118
|
+
if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
|
|
119
|
+
if (isKeyboardResize || !isTableHovered) {
|
|
120
|
+
/** if column resize had started via keyboard but continued by mouse
|
|
121
|
+
* or mouse pointer leaves the table but mouse button still pressed
|
|
122
|
+
*/
|
|
123
|
+
return (0, _columnResize.stopKeyboardColumnResizing)()(state, dispatch, view);
|
|
124
|
+
} else {
|
|
125
|
+
return (0, _commands.stopResizing)()(state, dispatch);
|
|
126
|
+
}
|
|
127
|
+
} else {
|
|
128
|
+
return (0, _commands.stopResizing)()(state, dispatch);
|
|
129
|
+
}
|
|
113
130
|
}
|
|
114
131
|
var tr = state.tr;
|
|
115
132
|
if (dragging) {
|
|
@@ -143,17 +160,30 @@ var handleMouseDown = exports.handleMouseDown = function handleMouseDown(view, e
|
|
|
143
160
|
})(tr);
|
|
144
161
|
}
|
|
145
162
|
}
|
|
146
|
-
|
|
163
|
+
if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
|
|
164
|
+
if (isKeyboardResize || !isTableHovered) {
|
|
165
|
+
/** if column resize had started via keyboard but continued by mouse
|
|
166
|
+
* or mouse pointer leaves the table but mouse button still pressed
|
|
167
|
+
*/
|
|
168
|
+
return (0, _columnResize.stopKeyboardColumnResizing)(tr)(state, dispatch, view);
|
|
169
|
+
} else {
|
|
170
|
+
return (0, _commands.stopResizing)(tr)(state, dispatch);
|
|
171
|
+
}
|
|
172
|
+
} else {
|
|
173
|
+
return (0, _commands.stopResizing)(tr)(state, dispatch);
|
|
174
|
+
}
|
|
147
175
|
}
|
|
148
176
|
}
|
|
149
177
|
function move(event) {
|
|
150
178
|
var clientX = event.clientX,
|
|
151
179
|
which = event.which;
|
|
152
180
|
var state = view.state;
|
|
153
|
-
var _getPluginState2 = (0,
|
|
181
|
+
var _getPluginState2 = (0, _pluginFactory2.getPluginState)(state),
|
|
154
182
|
dragging = _getPluginState2.dragging,
|
|
155
183
|
resizeHandlePos = _getPluginState2.resizeHandlePos;
|
|
156
|
-
|
|
184
|
+
var _getTablePluginState3 = (0, _pluginFactory.getPluginState)(state),
|
|
185
|
+
isTableHovered = _getTablePluginState3.isTableHovered;
|
|
186
|
+
if (!which || !dragging || resizeHandlePos === null || !(0, _utils3.pointsAtCell)(state.doc.resolve(resizeHandlePos)) || !isTableHovered && (0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
|
|
157
187
|
return finish(event);
|
|
158
188
|
}
|
|
159
189
|
var $cell = state.doc.resolve(resizeHandlePos);
|
|
@@ -8,10 +8,12 @@ exports.createPlugin = createPlugin;
|
|
|
8
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
9
|
var _classnames2 = _interopRequireDefault(require("classnames"));
|
|
10
10
|
var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
|
|
11
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
11
12
|
var _types = require("../../types");
|
|
13
|
+
var _pluginFactory = require("../plugin-factory");
|
|
12
14
|
var _commands = require("./commands");
|
|
13
15
|
var _eventHandlers = require("./event-handlers");
|
|
14
|
-
var
|
|
16
|
+
var _pluginFactory2 = require("./plugin-factory");
|
|
15
17
|
var _pluginKey = require("./plugin-key");
|
|
16
18
|
var _utils = require("./utils");
|
|
17
19
|
function createPlugin(dispatch, _ref, getEditorContainerWidth, getEditorFeatureFlags, editorAnalyticsAPI) {
|
|
@@ -19,7 +21,7 @@ function createPlugin(dispatch, _ref, getEditorContainerWidth, getEditorFeatureF
|
|
|
19
21
|
lastColumnResizable = _ref$lastColumnResiza === void 0 ? true : _ref$lastColumnResiza;
|
|
20
22
|
return new _safePlugin.SafePlugin({
|
|
21
23
|
key: _pluginKey.pluginKey,
|
|
22
|
-
state: (0,
|
|
24
|
+
state: (0, _pluginFactory2.createPluginState)(dispatch, {
|
|
23
25
|
lastColumnResizable: lastColumnResizable,
|
|
24
26
|
resizeHandlePos: null,
|
|
25
27
|
dragging: null,
|
|
@@ -28,7 +30,7 @@ function createPlugin(dispatch, _ref, getEditorContainerWidth, getEditorFeatureF
|
|
|
28
30
|
props: {
|
|
29
31
|
attributes: function attributes(state) {
|
|
30
32
|
var _classnames;
|
|
31
|
-
var pluginState = (0,
|
|
33
|
+
var pluginState = (0, _pluginFactory2.getPluginState)(state);
|
|
32
34
|
return {
|
|
33
35
|
class: (0, _classnames2.default)(_types.TableCssClassName.RESIZING_PLUGIN, (_classnames = {}, (0, _defineProperty2.default)(_classnames, _types.TableCssClassName.RESIZE_CURSOR, pluginState.resizeHandlePos !== null), (0, _defineProperty2.default)(_classnames, _types.TableCssClassName.IS_RESIZING, !!pluginState.dragging), _classnames))
|
|
34
36
|
};
|
|
@@ -38,10 +40,22 @@ function createPlugin(dispatch, _ref, getEditorContainerWidth, getEditorFeatureF
|
|
|
38
40
|
var state = view.state;
|
|
39
41
|
var resizeHandlePos =
|
|
40
42
|
// we're setting `resizeHandlePos` via command in unit tests
|
|
41
|
-
(0,
|
|
42
|
-
var _getPluginState = (0,
|
|
43
|
+
(0, _pluginFactory2.getPluginState)(state).resizeHandlePos || (0, _utils.getResizeCellPos)(view, event);
|
|
44
|
+
var _getPluginState = (0, _pluginFactory2.getPluginState)(state),
|
|
43
45
|
dragging = _getPluginState.dragging;
|
|
44
|
-
|
|
46
|
+
var isColumnKeyboardResizeStarted = false;
|
|
47
|
+
if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-column-resizing_emcvz')) {
|
|
48
|
+
/*
|
|
49
|
+
We need to start listening mouse events if column resize started from keyboard.
|
|
50
|
+
This will allow continue resizing via mouse
|
|
51
|
+
*/
|
|
52
|
+
var _getTablePluginState = (0, _pluginFactory.getPluginState)(state),
|
|
53
|
+
isKeyboardResize = _getTablePluginState.isKeyboardResize;
|
|
54
|
+
if (isKeyboardResize) {
|
|
55
|
+
isColumnKeyboardResizeStarted = isKeyboardResize;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (resizeHandlePos !== null && (!dragging || isColumnKeyboardResizeStarted)) {
|
|
45
59
|
if ((0, _eventHandlers.handleMouseDown)(view, event, resizeHandlePos, getEditorContainerWidth, getEditorFeatureFlags, editorAnalyticsAPI)) {
|
|
46
60
|
var _state = view.state,
|
|
47
61
|
_dispatch = view.dispatch;
|
package/dist/cjs/reducer.js
CHANGED
|
@@ -64,8 +64,9 @@ var _default = exports.default = function _default(pluginState, action) {
|
|
|
64
64
|
resizeHandleColumnIndex: undefined,
|
|
65
65
|
resizeHandleRowIndex: undefined
|
|
66
66
|
});
|
|
67
|
+
case 'START_KEYBOARD_COLUMN_RESIZE':
|
|
67
68
|
case 'ADD_RESIZE_HANDLE_DECORATIONS':
|
|
68
|
-
if (action.data.resizeHandleColumnIndex === pluginState.resizeHandleColumnIndex && action.data.resizeHandleRowIndex === pluginState.resizeHandleRowIndex && action.data.resizeHandleIncludeTooltip === pluginState.resizeHandleIncludeTooltip) {
|
|
69
|
+
if (action.data.resizeHandleColumnIndex === pluginState.resizeHandleColumnIndex && action.data.resizeHandleRowIndex === pluginState.resizeHandleRowIndex && action.data.resizeHandleIncludeTooltip === pluginState.resizeHandleIncludeTooltip && action.data.isKeyboardResize === pluginState.isKeyboardResize) {
|
|
69
70
|
return pluginState;
|
|
70
71
|
}
|
|
71
72
|
return _objectSpread(_objectSpread(_objectSpread({}, pluginState), action.data), {}, {
|
|
@@ -84,6 +85,7 @@ var _default = exports.default = function _default(pluginState, action) {
|
|
|
84
85
|
resizeHandleRowIndex: resizeHandleRowIndex !== null && resizeHandleRowIndex !== void 0 ? resizeHandleRowIndex : pluginState.resizeHandleRowIndex,
|
|
85
86
|
resizeHandleIncludeTooltip: resizeHandleIncludeTooltip !== null && resizeHandleIncludeTooltip !== void 0 ? resizeHandleIncludeTooltip : pluginState.resizeHandleIncludeTooltip
|
|
86
87
|
});
|
|
88
|
+
case 'STOP_KEYBOARD_COLUMN_RESIZE':
|
|
87
89
|
case 'REMOVE_RESIZE_HANDLE_DECORATIONS':
|
|
88
90
|
if (!pluginState.isResizeHandleWidgetAdded) {
|
|
89
91
|
return pluginState;
|
|
@@ -91,7 +93,8 @@ var _default = exports.default = function _default(pluginState, action) {
|
|
|
91
93
|
return _objectSpread(_objectSpread(_objectSpread({}, pluginState), action.data), {}, {
|
|
92
94
|
resizeHandleColumnIndex: undefined,
|
|
93
95
|
resizeHandleRowIndex: undefined,
|
|
94
|
-
isResizeHandleWidgetAdded: false
|
|
96
|
+
isResizeHandleWidgetAdded: false,
|
|
97
|
+
isKeyboardResize: undefined
|
|
95
98
|
});
|
|
96
99
|
case 'SET_TABLE_REF':
|
|
97
100
|
case 'HOVER_ROWS':
|
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.getDragMenuConfig = void 0;
|
|
7
|
+
exports.getTargetIndex = exports.getDragMenuConfig = exports.canMove = void 0;
|
|
8
8
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
9
|
var _customSteps = require("@atlaskit/custom-steps");
|
|
10
10
|
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
@@ -26,14 +26,36 @@ var _resizeState = require("../pm-plugins/table-resizing/utils/resize-state");
|
|
|
26
26
|
var _toolbar = require("../toolbar");
|
|
27
27
|
var _transforms = require("../transforms");
|
|
28
28
|
var _icons = require("../ui/icons");
|
|
29
|
+
var _mergedCells = require("./merged-cells");
|
|
29
30
|
var _selection = require("./selection");
|
|
30
|
-
var
|
|
31
|
-
|
|
32
|
-
return index !== undefined && index > min;
|
|
31
|
+
var getTargetIndex = exports.getTargetIndex = function getTargetIndex(selectedIndexes, direction) {
|
|
32
|
+
return Math[direction < 0 ? 'min' : 'max'].apply(Math, (0, _toConsumableArray2.default)(selectedIndexes)) + direction;
|
|
33
33
|
};
|
|
34
|
-
var
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
var canMove = exports.canMove = function canMove(sourceType, direction, totalItemsOfSourceTypeCount, selection, selectionRect) {
|
|
35
|
+
if (!selectionRect) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
var isRow = sourceType === 'table-row';
|
|
39
|
+
var selectedIndexes = isRow ? (0, _selection.getSelectedRowIndexes)(selectionRect) : (0, _selection.getSelectedColumnIndexes)(selectionRect);
|
|
40
|
+
var targetIndex = getTargetIndex(selectedIndexes, direction);
|
|
41
|
+
var isValidTargetIndex = targetIndex >= 0 && targetIndex < totalItemsOfSourceTypeCount;
|
|
42
|
+
if (!isValidTargetIndex) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// We can't move column when target has merges with other columns
|
|
47
|
+
// We can't move row when target has merges with other rows
|
|
48
|
+
var hasMergedCellsInTarget = isRow ? (0, _mergedCells.hasMergedCellsWithRowNextToRowIndex)(targetIndex, selection) : (0, _mergedCells.hasMergedCellsWithColumnNextToColumnIndex)(targetIndex, selection);
|
|
49
|
+
if (hasMergedCellsInTarget) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Currently we can't move in any direction if there are merged cells in the source
|
|
54
|
+
var hasMergedCellsInSource = isRow ? (0, _mergedCells.hasMergedCellsInRow)(selectedIndexes)(selection) : (0, _mergedCells.hasMergedCellsInColumn)(selectedIndexes)(selection);
|
|
55
|
+
if (hasMergedCellsInSource) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
return true;
|
|
37
59
|
};
|
|
38
60
|
var isDistributeColumnsEnabled = function isDistributeColumnsEnabled(state) {
|
|
39
61
|
var rect = (0, _toolbar.getClosestSelectionRect)(state);
|
|
@@ -44,6 +66,7 @@ var isDistributeColumnsEnabled = function isDistributeColumnsEnabled(state) {
|
|
|
44
66
|
return false;
|
|
45
67
|
};
|
|
46
68
|
var getDragMenuConfig = exports.getDragMenuConfig = function getDragMenuConfig(direction, getEditorContainerWidth, canDrag, hasMergedCellsInTable, editorView, tableMap, index, targetCellPosition, selectionRect, editorAnalyticsAPI) {
|
|
69
|
+
var _tableMap$height, _tableMap$height2, _tableMap$width, _tableMap$width2;
|
|
47
70
|
var addOptions = direction === 'row' ? [{
|
|
48
71
|
label: 'above',
|
|
49
72
|
offset: 0,
|
|
@@ -65,13 +88,12 @@ var getDragMenuConfig = exports.getDragMenuConfig = function getDragMenuConfig(d
|
|
|
65
88
|
icon: _icons.AddColRightIcon,
|
|
66
89
|
keymap: _keymaps.addColumnAfter
|
|
67
90
|
}];
|
|
91
|
+
var selection = editorView.state.selection;
|
|
68
92
|
var moveOptions = direction === 'row' ? [{
|
|
69
93
|
label: 'up',
|
|
70
94
|
icon: _arrowUp.default,
|
|
71
95
|
keymap: _keymaps.moveRowUp,
|
|
72
|
-
canMove:
|
|
73
|
-
return canDrag && canDecrease(selectionRect === null || selectionRect === void 0 ? void 0 : selectionRect.top);
|
|
74
|
-
},
|
|
96
|
+
canMove: canDrag && canMove('table-row', -1, (_tableMap$height = tableMap === null || tableMap === void 0 ? void 0 : tableMap.height) !== null && _tableMap$height !== void 0 ? _tableMap$height : 0, selection, selectionRect),
|
|
75
97
|
getOriginIndexes: _selection.getSelectedRowIndexes,
|
|
76
98
|
getTargetIndex: function getTargetIndex(selectionRect) {
|
|
77
99
|
return selectionRect.top - 1;
|
|
@@ -80,10 +102,7 @@ var getDragMenuConfig = exports.getDragMenuConfig = function getDragMenuConfig(d
|
|
|
80
102
|
label: 'down',
|
|
81
103
|
icon: _arrowDown.default,
|
|
82
104
|
keymap: _keymaps.moveRowDown,
|
|
83
|
-
canMove:
|
|
84
|
-
var _selectionRect$bottom, _tableMap$height;
|
|
85
|
-
return canDrag && canIncrease(((_selectionRect$bottom = selectionRect === null || selectionRect === void 0 ? void 0 : selectionRect.bottom) !== null && _selectionRect$bottom !== void 0 ? _selectionRect$bottom : 0) - 1, ((_tableMap$height = tableMap === null || tableMap === void 0 ? void 0 : tableMap.height) !== null && _tableMap$height !== void 0 ? _tableMap$height : 0) - 1);
|
|
86
|
-
},
|
|
105
|
+
canMove: canDrag && canMove('table-row', 1, (_tableMap$height2 = tableMap === null || tableMap === void 0 ? void 0 : tableMap.height) !== null && _tableMap$height2 !== void 0 ? _tableMap$height2 : 0, selection, selectionRect),
|
|
87
106
|
getOriginIndexes: _selection.getSelectedRowIndexes,
|
|
88
107
|
getTargetIndex: function getTargetIndex(selectionRect) {
|
|
89
108
|
return selectionRect.bottom;
|
|
@@ -92,9 +111,7 @@ var getDragMenuConfig = exports.getDragMenuConfig = function getDragMenuConfig(d
|
|
|
92
111
|
label: 'left',
|
|
93
112
|
icon: _arrowLeft.default,
|
|
94
113
|
keymap: _keymaps.moveColumnLeft,
|
|
95
|
-
canMove:
|
|
96
|
-
return canDrag && canDecrease(selectionRect === null || selectionRect === void 0 ? void 0 : selectionRect.left);
|
|
97
|
-
},
|
|
114
|
+
canMove: canDrag && canMove('table-column', -1, (_tableMap$width = tableMap === null || tableMap === void 0 ? void 0 : tableMap.width) !== null && _tableMap$width !== void 0 ? _tableMap$width : 0, selection, selectionRect),
|
|
98
115
|
getOriginIndexes: _selection.getSelectedColumnIndexes,
|
|
99
116
|
getTargetIndex: function getTargetIndex(selectionRect) {
|
|
100
117
|
return selectionRect.left - 1;
|
|
@@ -103,10 +120,7 @@ var getDragMenuConfig = exports.getDragMenuConfig = function getDragMenuConfig(d
|
|
|
103
120
|
label: 'right',
|
|
104
121
|
icon: _arrowRight.default,
|
|
105
122
|
keymap: _keymaps.moveColumnRight,
|
|
106
|
-
canMove:
|
|
107
|
-
var _selectionRect$right, _tableMap$width;
|
|
108
|
-
return canDrag && canIncrease(((_selectionRect$right = selectionRect === null || selectionRect === void 0 ? void 0 : selectionRect.right) !== null && _selectionRect$right !== void 0 ? _selectionRect$right : 0) - 1, ((_tableMap$width = tableMap === null || tableMap === void 0 ? void 0 : tableMap.width) !== null && _tableMap$width !== void 0 ? _tableMap$width : 0) - 1);
|
|
109
|
-
},
|
|
123
|
+
canMove: canDrag && canMove('table-column', 1, (_tableMap$width2 = tableMap === null || tableMap === void 0 ? void 0 : tableMap.width) !== null && _tableMap$width2 !== void 0 ? _tableMap$width2 : 0, selection, selectionRect),
|
|
110
124
|
getOriginIndexes: _selection.getSelectedColumnIndexes,
|
|
111
125
|
getTargetIndex: function getTargetIndex(selectionRect) {
|
|
112
126
|
return selectionRect.right;
|
|
@@ -191,10 +205,10 @@ var getDragMenuConfig = exports.getDragMenuConfig = function getDragMenuConfig(d
|
|
|
191
205
|
return {
|
|
192
206
|
id: "move_".concat(direction, "_").concat(label),
|
|
193
207
|
title: "Move ".concat(direction, " ").concat(label),
|
|
194
|
-
disabled: !canMove
|
|
208
|
+
disabled: !canMove,
|
|
195
209
|
icon: icon,
|
|
196
210
|
onClick: function onClick(state, dispatch) {
|
|
197
|
-
if (canMove
|
|
211
|
+
if (canMove) {
|
|
198
212
|
requestAnimationFrame(function () {
|
|
199
213
|
(0, _commandsWithAnalytics.moveSourceWithAnalytics)(editorAnalyticsAPI)(_analytics.INPUT_METHOD.TABLE_CONTEXT_MENU, "table-".concat(direction), getOriginIndexes(selectionRect), getTargetIndex(selectionRect))(editorView.state, editorView.dispatch);
|
|
200
214
|
});
|
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.hasMergedCellsInRow = exports.hasMergedCellsInColumn = exports.hasMergedCellsInBetween = void 0;
|
|
7
|
+
exports.hasMergedCellsWithRowNextToRowIndex = exports.hasMergedCellsWithColumnNextToColumnIndex = exports.hasMergedCellsInRow = exports.hasMergedCellsInColumn = exports.hasMergedCellsInBetween = void 0;
|
|
8
8
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
9
|
var _editorTables = require("@atlaskit/editor-tables");
|
|
10
10
|
var hasMergedCells = function hasMergedCells(indexes, normalizeRect) {
|
|
@@ -137,4 +137,69 @@ var hasMergedCellsInBetween = exports.hasMergedCellsInBetween = function hasMerg
|
|
|
137
137
|
return mergedCellsInRectArr[1].includes(cell);
|
|
138
138
|
});
|
|
139
139
|
};
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
// Checks if any cell in the column with colIndex is merged with a cell in a column to the left or to the right of it.
|
|
143
|
+
// colIndex is a logical index of the column. It starts at 0 and goes up to tableMap.width - 1.
|
|
144
|
+
var hasMergedCellsWithColumnNextToColumnIndex = exports.hasMergedCellsWithColumnNextToColumnIndex = function hasMergedCellsWithColumnNextToColumnIndex(colIndex, selection) {
|
|
145
|
+
var table = (0, _editorTables.findTable)(selection);
|
|
146
|
+
if (!table) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
var tableMap = _editorTables.TableMap.get(table.node);
|
|
150
|
+
var width = tableMap.width;
|
|
151
|
+
if (width <= 1) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
if (colIndex < 0 || colIndex > width - 1) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
var map = tableMap.map;
|
|
158
|
+
// j is an index in the tableMap.map array. tableMap.map is a flat array.
|
|
159
|
+
// Each item of this array contains a number.
|
|
160
|
+
// The number represents the position of the corresponding cell in the tableMap. It exists for each cell.
|
|
161
|
+
// If there are merged cells, their positions will be represented by the same number.
|
|
162
|
+
var isFirstColumn = colIndex === 0;
|
|
163
|
+
var isLastColumn = colIndex === width - 1;
|
|
164
|
+
for (var j = colIndex; j < map.length; j += width) {
|
|
165
|
+
if (!isFirstColumn && map[j] === map[j - 1] ||
|
|
166
|
+
// compare with a cell in the column on the left
|
|
167
|
+
!isLastColumn && map[j] === map[j + 1] // compare with a cell in the column on the right
|
|
168
|
+
) {
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return false;
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
// Checks if any cell in the row with rowIndex is merged with a cell in a row above or below it.
|
|
176
|
+
var hasMergedCellsWithRowNextToRowIndex = exports.hasMergedCellsWithRowNextToRowIndex = function hasMergedCellsWithRowNextToRowIndex(rowIndex, selection) {
|
|
177
|
+
var table = (0, _editorTables.findTable)(selection);
|
|
178
|
+
if (!table) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
var tableMap = _editorTables.TableMap.get(table.node);
|
|
182
|
+
var height = tableMap.height;
|
|
183
|
+
if (height <= 1) {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
if (rowIndex < 0 || rowIndex > height - 1) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
var map = tableMap.map,
|
|
190
|
+
width = tableMap.width; // map is a flat array representing position of each cell in the table.
|
|
191
|
+
var indexOfFirstCellInTheRow = rowIndex * width;
|
|
192
|
+
var indexOfLastCellInTheRow = indexOfFirstCellInTheRow + width - 1;
|
|
193
|
+
var isFirstRow = rowIndex === 0;
|
|
194
|
+
var isLastRow = rowIndex === height - 1;
|
|
195
|
+
// j is an index of a cell in a row
|
|
196
|
+
for (var j = indexOfFirstCellInTheRow; j <= indexOfLastCellInTheRow; j++) {
|
|
197
|
+
if (!isFirstRow && map[j] === map[j - width] ||
|
|
198
|
+
// compare with a cell in the row above
|
|
199
|
+
!isLastRow && map[j] === map[j + width] // compare with a cell in the row below
|
|
200
|
+
) {
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return false;
|
|
140
205
|
};
|