@atlaskit/editor-plugin-table 0.1.0 → 0.1.1
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 +8 -0
- package/dist/cjs/plugins/table/ui/FloatingDeleteButton/index.js +2 -1
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/plugins/table/ui/FloatingDeleteButton/index.js +2 -1
- package/dist/es2019/version.json +1 -1
- package/dist/esm/plugins/table/ui/FloatingDeleteButton/index.js +2 -1
- package/dist/esm/version.json +1 -1
- package/examples/99-testing.tsx +35 -30
- package/package.json +2 -11
- package/src/__tests__/integration/__fixtures__/auto-size-documents.ts +5 -10
- package/src/__tests__/integration/__fixtures__/layout-documents.ts +1 -2
- package/src/__tests__/integration/__fixtures__/resize-documents.ts +5 -10
- package/src/__tests__/integration/resize.ts +1 -2
- package/src/__tests__/unit/analytics.ts +33 -32
- package/src/__tests__/unit/collab.ts +12 -9
- package/src/__tests__/unit/commands/sort.ts +28 -28
- package/src/__tests__/unit/copy-paste.ts +6 -8
- package/src/__tests__/unit/event-handlers.ts +7 -10
- package/src/__tests__/unit/fix-tables.ts +17 -23
- package/src/__tests__/unit/get-toolbar-config.ts +0 -5
- package/src/__tests__/unit/hover-selection.ts +1 -66
- package/src/__tests__/unit/index-with-fake-timers.ts +1 -1
- package/src/__tests__/unit/index.ts +5 -5
- package/src/__tests__/unit/nodeviews/TableComponent.tsx +11 -218
- package/src/__tests__/unit/nodeviews/cell.ts +12 -10
- package/src/__tests__/unit/nodeviews/table.ts +25 -26
- package/src/__tests__/unit/pm-plugins/safari-delete-composition-text-issue-workaround.ts +11 -8
- package/src/__tests__/unit/pm-plugins/sticky-headers/tableRow.tsx +11 -12
- package/src/__tests__/unit/toolbar.ts +18 -5
- package/src/__tests__/unit/ui/ContextualMenu.tsx +55 -0
- package/src/__tests__/unit/ui/CornerControls.tsx +7 -7
- package/src/__tests__/unit/ui/FloatingContextualButton.tsx +45 -49
- package/src/__tests__/unit/ui/FloatingContextualMenu.tsx +49 -0
- package/src/__tests__/unit/ui/FloatingDeleteButton.tsx +30 -2
- package/src/__tests__/unit/ui/FloatingInsertButton.tsx +143 -111
- package/src/__tests__/unit/ui/RowControls.tsx +112 -141
- package/src/__tests__/unit/ui/TableFloatingControls.tsx +18 -15
- package/src/__tests__/unit/undo-redo.ts +10 -9
- package/src/__tests__/unit/utils/nodes.ts +8 -4
- package/src/__tests__/unit/utils/row-controls.ts +8 -4
- package/src/plugins/table/commands/clear.ts +30 -29
- package/src/plugins/table/commands/go-to-next-cell.ts +41 -38
- package/src/plugins/table/commands/insert.ts +91 -91
- package/src/plugins/table/commands/misc.ts +123 -125
- package/src/plugins/table/commands/selection.ts +329 -319
- package/src/plugins/table/commands-with-analytics.ts +299 -294
- package/src/plugins/table/event-handlers.ts +111 -111
- package/src/plugins/table/handlers.ts +95 -94
- package/src/plugins/table/nodeviews/OverflowShadowsObserver.ts +4 -3
- package/src/plugins/table/nodeviews/TableComponent.tsx +6 -9
- package/src/plugins/table/nodeviews/update-overflow-shadows.ts +39 -39
- package/src/plugins/table/pm-plugins/decorations/utils/column-controls.ts +7 -9
- package/src/plugins/table/pm-plugins/decorations/utils/column-resizing.ts +30 -30
- package/src/plugins/table/pm-plugins/decorations/utils/compose-decorations.ts +7 -7
- package/src/plugins/table/pm-plugins/plugin-factory.ts +33 -33
- package/src/plugins/table/pm-plugins/safari-delete-composition-text-issue-workaround.ts +6 -9
- package/src/plugins/table/pm-plugins/sticky-headers/nodeviews/tableRow.ts +3 -2
- package/src/plugins/table/pm-plugins/table-resizing/commands.ts +98 -90
- package/src/plugins/table/pm-plugins/table-resizing/utils/dom.ts +46 -47
- package/src/plugins/table/toolbar.tsx +116 -113
- package/src/plugins/table/transforms/column-width.ts +143 -146
- package/src/plugins/table/transforms/delete-columns.ts +144 -142
- package/src/plugins/table/transforms/delete-rows.ts +110 -111
- package/src/plugins/table/transforms/metadata.ts +9 -9
- package/src/plugins/table/ui/FloatingContextualMenu/ContextualMenu.tsx +7 -6
- package/src/plugins/table/ui/FloatingDeleteButton/index.tsx +3 -2
- package/src/plugins/table/ui/FloatingInsertButton/index.tsx +2 -5
- package/src/plugins/table/ui/LayoutButton/index.tsx +2 -6
- package/src/plugins/table/ui/common-styles.ts +1 -3
- package/src/plugins/table/utils/analytics.ts +24 -25
- package/src/plugins/table/utils/dom.ts +3 -3
- package/src/plugins/table/utils/row-controls.ts +92 -93
- package/dist/types-ts4.0/index.d.ts +0 -1
- package/dist/types-ts4.0/plugins/table/commands/clear.d.ts +0 -3
- package/dist/types-ts4.0/plugins/table/commands/collapse.d.ts +0 -2
- package/dist/types-ts4.0/plugins/table/commands/go-to-next-cell.d.ts +0 -4
- package/dist/types-ts4.0/plugins/table/commands/hover.d.ts +0 -8
- package/dist/types-ts4.0/plugins/table/commands/index.d.ts +0 -7
- package/dist/types-ts4.0/plugins/table/commands/insert.d.ts +0 -10
- package/dist/types-ts4.0/plugins/table/commands/misc.d.ts +0 -27
- package/dist/types-ts4.0/plugins/table/commands/selection.d.ts +0 -8
- package/dist/types-ts4.0/plugins/table/commands/sort.d.ts +0 -3
- package/dist/types-ts4.0/plugins/table/commands/split-cell.d.ts +0 -6
- package/dist/types-ts4.0/plugins/table/commands/toggle.d.ts +0 -12
- package/dist/types-ts4.0/plugins/table/commands-with-analytics.d.ts +0 -26
- package/dist/types-ts4.0/plugins/table/create-plugin-config.d.ts +0 -2
- package/dist/types-ts4.0/plugins/table/event-handlers.d.ts +0 -16
- package/dist/types-ts4.0/plugins/table/handlers.d.ts +0 -3
- package/dist/types-ts4.0/plugins/table/index.d.ts +0 -17
- package/dist/types-ts4.0/plugins/table/nodeviews/OverflowShadowsObserver.d.ts +0 -26
- package/dist/types-ts4.0/plugins/table/nodeviews/TableComponent.d.ts +0 -72
- package/dist/types-ts4.0/plugins/table/nodeviews/__mocks__/OverflowShadowsObserver.d.ts +0 -9
- package/dist/types-ts4.0/plugins/table/nodeviews/__mocks__/OverridableMock.d.ts +0 -9
- package/dist/types-ts4.0/plugins/table/nodeviews/table.d.ts +0 -31
- package/dist/types-ts4.0/plugins/table/nodeviews/tableCell.d.ts +0 -19
- package/dist/types-ts4.0/plugins/table/nodeviews/types.d.ts +0 -24
- package/dist/types-ts4.0/plugins/table/nodeviews/update-overflow-shadows.d.ts +0 -8
- package/dist/types-ts4.0/plugins/table/pm-plugins/decorations/plugin.d.ts +0 -7
- package/dist/types-ts4.0/plugins/table/pm-plugins/decorations/utils/column-controls.d.ts +0 -3
- package/dist/types-ts4.0/plugins/table/pm-plugins/decorations/utils/column-resizing.d.ts +0 -2
- package/dist/types-ts4.0/plugins/table/pm-plugins/decorations/utils/compose-decorations.d.ts +0 -2
- package/dist/types-ts4.0/plugins/table/pm-plugins/decorations/utils/index.d.ts +0 -3
- package/dist/types-ts4.0/plugins/table/pm-plugins/decorations/utils/types.d.ts +0 -6
- package/dist/types-ts4.0/plugins/table/pm-plugins/default-table-selection.d.ts +0 -5
- package/dist/types-ts4.0/plugins/table/pm-plugins/keymap.d.ts +0 -5
- package/dist/types-ts4.0/plugins/table/pm-plugins/main.d.ts +0 -8
- package/dist/types-ts4.0/plugins/table/pm-plugins/plugin-factory.d.ts +0 -1
- package/dist/types-ts4.0/plugins/table/pm-plugins/plugin-key.d.ts +0 -3
- package/dist/types-ts4.0/plugins/table/pm-plugins/safari-delayed-dom-selection-syncing-workaround.d.ts +0 -4
- package/dist/types-ts4.0/plugins/table/pm-plugins/safari-delete-composition-text-issue-workaround.d.ts +0 -15
- package/dist/types-ts4.0/plugins/table/pm-plugins/sticky-headers/commands.d.ts +0 -3
- package/dist/types-ts4.0/plugins/table/pm-plugins/sticky-headers/index.d.ts +0 -6
- package/dist/types-ts4.0/plugins/table/pm-plugins/sticky-headers/nodeviews/dom.d.ts +0 -6
- package/dist/types-ts4.0/plugins/table/pm-plugins/sticky-headers/nodeviews/tableRow.d.ts +0 -65
- package/dist/types-ts4.0/plugins/table/pm-plugins/sticky-headers/plugin-key.d.ts +0 -3
- package/dist/types-ts4.0/plugins/table/pm-plugins/sticky-headers/plugin-state.d.ts +0 -3
- package/dist/types-ts4.0/plugins/table/pm-plugins/sticky-headers/plugin.d.ts +0 -4
- package/dist/types-ts4.0/plugins/table/pm-plugins/sticky-headers/types.d.ts +0 -16
- package/dist/types-ts4.0/plugins/table/pm-plugins/sticky-headers/util.d.ts +0 -2
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-local-id.d.ts +0 -22
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/commands.d.ts +0 -25
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/event-handlers.d.ts +0 -4
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/index.d.ts +0 -4
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/plugin-factory.d.ts +0 -4
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/plugin-key.d.ts +0 -3
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/plugin.d.ts +0 -6
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/reducer.d.ts +0 -3
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/utils/colgroup.d.ts +0 -8
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/utils/column-state.d.ts +0 -14
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/utils/content-width.d.ts +0 -4
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/utils/dom.d.ts +0 -13
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/utils/index.d.ts +0 -12
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/utils/misc.d.ts +0 -22
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/utils/resize-column.d.ts +0 -2
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/utils/resize-logic.d.ts +0 -4
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/utils/resize-state.d.ts +0 -29
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/utils/scale-table.d.ts +0 -17
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/utils/types.d.ts +0 -22
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-resizing/utils/unit-to-number.d.ts +0 -1
- package/dist/types-ts4.0/plugins/table/pm-plugins/table-selection-keymap.d.ts +0 -4
- package/dist/types-ts4.0/plugins/table/reducer.d.ts +0 -3
- package/dist/types-ts4.0/plugins/table/toolbar.d.ts +0 -36
- package/dist/types-ts4.0/plugins/table/transforms/column-width.d.ts +0 -18
- package/dist/types-ts4.0/plugins/table/transforms/delete-columns.d.ts +0 -3
- package/dist/types-ts4.0/plugins/table/transforms/delete-rows.d.ts +0 -3
- package/dist/types-ts4.0/plugins/table/transforms/fix-tables.d.ts +0 -10
- package/dist/types-ts4.0/plugins/table/transforms/index.d.ts +0 -7
- package/dist/types-ts4.0/plugins/table/transforms/merge.d.ts +0 -5
- package/dist/types-ts4.0/plugins/table/transforms/metadata.d.ts +0 -21
- package/dist/types-ts4.0/plugins/table/transforms/replace-table.d.ts +0 -5
- package/dist/types-ts4.0/plugins/table/transforms/split.d.ts +0 -9
- package/dist/types-ts4.0/plugins/table/types.d.ts +0 -328
- package/dist/types-ts4.0/plugins/table/ui/FloatingContextualButton/index.d.ts +0 -29
- package/dist/types-ts4.0/plugins/table/ui/FloatingContextualButton/styles.d.ts +0 -1
- package/dist/types-ts4.0/plugins/table/ui/FloatingContextualMenu/ContextualMenu.d.ts +0 -87
- package/dist/types-ts4.0/plugins/table/ui/FloatingContextualMenu/index.d.ts +0 -22
- package/dist/types-ts4.0/plugins/table/ui/FloatingContextualMenu/styles.d.ts +0 -2
- package/dist/types-ts4.0/plugins/table/ui/FloatingDeleteButton/DeleteButton.d.ts +0 -14
- package/dist/types-ts4.0/plugins/table/ui/FloatingDeleteButton/getPopUpOptions.d.ts +0 -10
- package/dist/types-ts4.0/plugins/table/ui/FloatingDeleteButton/index.d.ts +0 -54
- package/dist/types-ts4.0/plugins/table/ui/FloatingDeleteButton/types.d.ts +0 -1
- package/dist/types-ts4.0/plugins/table/ui/FloatingInsertButton/InsertButton.d.ts +0 -12
- package/dist/types-ts4.0/plugins/table/ui/FloatingInsertButton/getPopupOptions.d.ts +0 -3
- package/dist/types-ts4.0/plugins/table/ui/FloatingInsertButton/index.d.ts +0 -35
- package/dist/types-ts4.0/plugins/table/ui/LayoutButton/index.d.ts +0 -21
- package/dist/types-ts4.0/plugins/table/ui/TableFloatingControls/CornerControls/index.d.ts +0 -16
- package/dist/types-ts4.0/plugins/table/ui/TableFloatingControls/NumberColumn/index.d.ts +0 -21
- package/dist/types-ts4.0/plugins/table/ui/TableFloatingControls/RowControls/index.d.ts +0 -17
- package/dist/types-ts4.0/plugins/table/ui/TableFloatingControls/index.d.ts +0 -40
- package/dist/types-ts4.0/plugins/table/ui/common-styles.d.ts +0 -4
- package/dist/types-ts4.0/plugins/table/ui/consts.d.ts +0 -39
- package/dist/types-ts4.0/plugins/table/ui/messages.d.ts +0 -38
- package/dist/types-ts4.0/plugins/table/ui/ui-styles.d.ts +0 -15
- package/dist/types-ts4.0/plugins/table/utils/analytics.d.ts +0 -18
- package/dist/types-ts4.0/plugins/table/utils/collapse.d.ts +0 -29
- package/dist/types-ts4.0/plugins/table/utils/column-controls.d.ts +0 -10
- package/dist/types-ts4.0/plugins/table/utils/decoration.d.ts +0 -16
- package/dist/types-ts4.0/plugins/table/utils/dom.d.ts +0 -20
- package/dist/types-ts4.0/plugins/table/utils/get-allow-add-column-custom-step.d.ts +0 -2
- package/dist/types-ts4.0/plugins/table/utils/index.d.ts +0 -11
- package/dist/types-ts4.0/plugins/table/utils/nodes.d.ts +0 -12
- package/dist/types-ts4.0/plugins/table/utils/paste.d.ts +0 -14
- package/dist/types-ts4.0/plugins/table/utils/referentiality.d.ts +0 -2
- package/dist/types-ts4.0/plugins/table/utils/row-controls.d.ts +0 -16
- package/dist/types-ts4.0/plugins/table/utils/selection.d.ts +0 -6
- package/dist/types-ts4.0/plugins/table/utils/table.d.ts +0 -4
- package/dist/types-ts4.0/plugins/table/utils/update-plugin-state-decorations.d.ts +0 -4
- package/dist/types-ts4.0/plugins/table-plugin.d.ts +0 -2
- package/src/plugins/table/ui/FloatingContextualMenu/__tests__/ContextualMenu.tsx +0 -56
- package/src/plugins/table/ui/FloatingContextualMenu/__tests__/FloatingContextualMenu.tsx +0 -50
|
@@ -11,36 +11,36 @@ import { DecorationTransformer } from './types';
|
|
|
11
11
|
|
|
12
12
|
const emptyDecorations = [[], []];
|
|
13
13
|
|
|
14
|
-
const updateColumnResizeHandle =
|
|
15
|
-
columnResizesDecorations: Decoration[]
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
14
|
+
const updateColumnResizeHandle =
|
|
15
|
+
(columnResizesDecorations: Decoration[]): DecorationTransformer =>
|
|
16
|
+
({ decorationSet, tr }) =>
|
|
17
|
+
updateDecorations(
|
|
18
|
+
tr.doc,
|
|
19
|
+
decorationSet,
|
|
20
|
+
columnResizesDecorations,
|
|
21
|
+
TableDecorations.COLUMN_RESIZING_HANDLE,
|
|
22
|
+
);
|
|
23
23
|
|
|
24
|
-
const updateLastCellElement =
|
|
25
|
-
lastCellElementsDecorations: Decoration[]
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
24
|
+
const updateLastCellElement =
|
|
25
|
+
(lastCellElementsDecorations: Decoration[]): DecorationTransformer =>
|
|
26
|
+
({ decorationSet, tr }) =>
|
|
27
|
+
updateDecorations(
|
|
28
|
+
tr.doc,
|
|
29
|
+
decorationSet,
|
|
30
|
+
lastCellElementsDecorations,
|
|
31
|
+
TableDecorations.LAST_CELL_ELEMENT,
|
|
32
|
+
);
|
|
33
33
|
|
|
34
|
-
export const buildColumnResizingDecorations =
|
|
35
|
-
columnEndIndex: number
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
34
|
+
export const buildColumnResizingDecorations =
|
|
35
|
+
(columnEndIndex: number): DecorationTransformer =>
|
|
36
|
+
({ tr, decorationSet }): DecorationSet => {
|
|
37
|
+
const [columnResizesDecorations, lastCellElementsDecorations] =
|
|
38
|
+
columnEndIndex < 0
|
|
39
|
+
? emptyDecorations
|
|
40
|
+
: createResizeHandleDecoration(tr, { right: columnEndIndex });
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
};
|
|
42
|
+
return composeDecorations([
|
|
43
|
+
updateColumnResizeHandle(columnResizesDecorations),
|
|
44
|
+
updateLastCellElement(lastCellElementsDecorations),
|
|
45
|
+
])({ decorationSet, tr });
|
|
46
|
+
};
|
|
@@ -2,10 +2,10 @@ import { DecorationSet } from 'prosemirror-view';
|
|
|
2
2
|
|
|
3
3
|
import { DecorationTransformer } from './types';
|
|
4
4
|
|
|
5
|
-
export const composeDecorations =
|
|
6
|
-
transformers: Array<DecorationTransformer
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
export const composeDecorations =
|
|
6
|
+
(transformers: Array<DecorationTransformer>): DecorationTransformer =>
|
|
7
|
+
({ decorationSet, tr }): DecorationSet =>
|
|
8
|
+
transformers.reduce(
|
|
9
|
+
(decorationSet, transform) => transform({ decorationSet, tr }),
|
|
10
|
+
decorationSet,
|
|
11
|
+
);
|
|
@@ -3,41 +3,41 @@ import { handleDocOrSelectionChanged } from '../handlers';
|
|
|
3
3
|
import reducer from '../reducer';
|
|
4
4
|
import { pluginKey } from './plugin-key';
|
|
5
5
|
|
|
6
|
-
export const {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const { pos, deleted } = tr.mapping.mapResult(
|
|
16
|
-
pluginState.targetCellPosition,
|
|
17
|
-
);
|
|
6
|
+
export const { createPluginState, createCommand, getPluginState } =
|
|
7
|
+
pluginFactory(pluginKey, reducer, {
|
|
8
|
+
mapping: (tr, pluginState) => {
|
|
9
|
+
if (tr.docChanged) {
|
|
10
|
+
let updatedTargetCell = {};
|
|
11
|
+
if (pluginState.targetCellPosition) {
|
|
12
|
+
const { pos, deleted } = tr.mapping.mapResult(
|
|
13
|
+
pluginState.targetCellPosition,
|
|
14
|
+
);
|
|
18
15
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
updatedTargetCell = {
|
|
17
|
+
targetCellPosition: deleted ? undefined : pos,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
23
20
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
let updatedTablePos = {};
|
|
22
|
+
if (pluginState.tablePos) {
|
|
23
|
+
const { pos, deleted } = tr.mapping.mapResult(
|
|
24
|
+
pluginState.tablePos,
|
|
25
|
+
-1,
|
|
26
|
+
);
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
updatedTablePos = {
|
|
29
|
+
tablePos: deleted ? undefined : pos,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return {
|
|
34
|
+
...pluginState,
|
|
35
|
+
...updatedTargetCell,
|
|
36
|
+
...updatedTablePos,
|
|
30
37
|
};
|
|
31
38
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
return pluginState;
|
|
40
|
-
},
|
|
41
|
-
onDocChanged: handleDocOrSelectionChanged,
|
|
42
|
-
onSelectionChanged: handleDocOrSelectionChanged,
|
|
43
|
-
});
|
|
39
|
+
return pluginState;
|
|
40
|
+
},
|
|
41
|
+
onDocChanged: handleDocOrSelectionChanged,
|
|
42
|
+
onSelectionChanged: handleDocOrSelectionChanged,
|
|
43
|
+
});
|
|
@@ -12,9 +12,10 @@ interface SafariDeleteCompositionTextIssueWorkaroundPluginState {
|
|
|
12
12
|
decorations: DecorationSet;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
export const tableSafariDeleteCompositionTextIssueWorkaroundKey =
|
|
16
|
-
SafariDeleteCompositionTextIssueWorkaroundPluginState
|
|
17
|
-
|
|
15
|
+
export const tableSafariDeleteCompositionTextIssueWorkaroundKey =
|
|
16
|
+
new PluginKey<SafariDeleteCompositionTextIssueWorkaroundPluginState>(
|
|
17
|
+
'tableSafariDeleteCompositionTextIssueWorkaround',
|
|
18
|
+
);
|
|
18
19
|
|
|
19
20
|
export const createPlugin = () => {
|
|
20
21
|
return new SafePlugin<SafariDeleteCompositionTextIssueWorkaroundPluginState>({
|
|
@@ -73,12 +74,8 @@ export const createPlugin = () => {
|
|
|
73
74
|
return false;
|
|
74
75
|
}
|
|
75
76
|
const range = selection.getRangeAt(0);
|
|
76
|
-
const {
|
|
77
|
-
|
|
78
|
-
endContainer,
|
|
79
|
-
endOffset,
|
|
80
|
-
startOffset,
|
|
81
|
-
} = range;
|
|
77
|
+
const { startContainer, endContainer, endOffset, startOffset } =
|
|
78
|
+
range;
|
|
82
79
|
/**
|
|
83
80
|
* On Safari when composition text is deleted, it deletes any empty elements it finds up the dom tree. Prosemirror can sometimes be confused by this
|
|
84
81
|
* and will think that we meant to delete those elements. This fix forces the resulting node to not be empty.
|
|
@@ -526,8 +526,9 @@ export class TableRowNodeView implements NodeView {
|
|
|
526
526
|
shouldHeaderStick = (tree: TableDOMElements): boolean => {
|
|
527
527
|
const { wrapper } = tree;
|
|
528
528
|
const tableWrapperRect = wrapper.getBoundingClientRect();
|
|
529
|
-
const editorAreaRect = (
|
|
530
|
-
.editorScrollableElement as HTMLElement
|
|
529
|
+
const editorAreaRect = (
|
|
530
|
+
this.editorScrollableElement as HTMLElement
|
|
531
|
+
).getBoundingClientRect();
|
|
531
532
|
|
|
532
533
|
const stickyHeaderRect = this.contentDOM.getBoundingClientRect();
|
|
533
534
|
const firstHeaderRow = !this.dom.previousElementSibling;
|
|
@@ -22,106 +22,114 @@ import {
|
|
|
22
22
|
import { ContentNodeWithPos } from 'prosemirror-utils';
|
|
23
23
|
|
|
24
24
|
// Scale the table to meet new requirements (col, layout change etc)
|
|
25
|
-
export const scaleTable =
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
25
|
+
export const scaleTable =
|
|
26
|
+
(
|
|
27
|
+
tableRef: HTMLTableElement | null | undefined,
|
|
28
|
+
options: ScaleOptions,
|
|
29
|
+
domAtPos: DomAtPos,
|
|
30
|
+
): Command =>
|
|
31
|
+
(state, dispatch) => {
|
|
32
|
+
if (!tableRef) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const { node, start, parentWidth } = options;
|
|
37
|
+
|
|
38
|
+
// If a table has not been resized yet, columns should be auto.
|
|
39
|
+
if (hasTableBeenResized(node) === false) {
|
|
40
|
+
// If its not a re-sized table, we still want to re-create cols
|
|
41
|
+
// To force reflow of columns upon delete.
|
|
42
|
+
recreateResizeColsByNode(tableRef, node);
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
33
45
|
|
|
34
|
-
|
|
46
|
+
let resizeState;
|
|
47
|
+
if (parentWidth) {
|
|
48
|
+
resizeState = scaleWithParent(
|
|
49
|
+
tableRef,
|
|
50
|
+
parentWidth,
|
|
51
|
+
node,
|
|
52
|
+
start,
|
|
53
|
+
domAtPos,
|
|
54
|
+
);
|
|
55
|
+
} else {
|
|
56
|
+
resizeState = scale(tableRef, options, domAtPos);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (resizeState) {
|
|
60
|
+
let { tr } = state;
|
|
61
|
+
tr = updateColumnWidths(resizeState, node, start)(tr);
|
|
62
|
+
|
|
63
|
+
if (tr.docChanged && dispatch) {
|
|
64
|
+
tr.setMeta('scrollIntoView', false);
|
|
65
|
+
// TODO: ED-8995
|
|
66
|
+
// We need to do this check to reduce the number of race conditions when working with tables.
|
|
67
|
+
// This metadata is been used in the sendTransaction function in the Collab plugin
|
|
68
|
+
tr.setMeta('scaleTable', true);
|
|
69
|
+
dispatch(tr);
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
35
73
|
|
|
36
|
-
// If a table has not been resized yet, columns should be auto.
|
|
37
|
-
if (hasTableBeenResized(node) === false) {
|
|
38
|
-
// If its not a re-sized table, we still want to re-create cols
|
|
39
|
-
// To force reflow of columns upon delete.
|
|
40
|
-
recreateResizeColsByNode(tableRef, node);
|
|
41
74
|
return false;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
resizeState
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export const evenColumns =
|
|
78
|
+
({
|
|
79
|
+
resizeState,
|
|
80
|
+
table,
|
|
81
|
+
start,
|
|
82
|
+
event,
|
|
83
|
+
}: {
|
|
84
|
+
resizeState: ResizeState;
|
|
85
|
+
table: PMNode;
|
|
86
|
+
start: number;
|
|
87
|
+
event: MouseEvent;
|
|
88
|
+
}): Command =>
|
|
89
|
+
(state, dispatch) => {
|
|
90
|
+
if (!isTableSelected(state.selection)) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// double click detection logic
|
|
95
|
+
// Note: ProseMirror's handleDoubleClick doesn't quite work with DOM mousedown event handler
|
|
96
|
+
const { lastClick } = getPluginState(state);
|
|
97
|
+
const now = Date.now();
|
|
98
|
+
if (
|
|
99
|
+
lastClick &&
|
|
100
|
+
now - lastClick.time < 500 &&
|
|
101
|
+
isClickNear(event, lastClick)
|
|
102
|
+
) {
|
|
103
|
+
const newState = evenAllColumnsWidths(resizeState);
|
|
104
|
+
setLastClick(null, (tr) =>
|
|
105
|
+
updateColumnWidths(newState, table, start)(tr),
|
|
106
|
+
)(state, dispatch);
|
|
107
|
+
|
|
62
108
|
return true;
|
|
63
109
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
return false;
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
export const evenColumns = ({
|
|
70
|
-
resizeState,
|
|
71
|
-
table,
|
|
72
|
-
start,
|
|
73
|
-
event,
|
|
74
|
-
}: {
|
|
75
|
-
resizeState: ResizeState;
|
|
76
|
-
table: PMNode;
|
|
77
|
-
start: number;
|
|
78
|
-
event: MouseEvent;
|
|
79
|
-
}): Command => (state, dispatch) => {
|
|
80
|
-
if (!isTableSelected(state.selection)) {
|
|
81
|
-
return false;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// double click detection logic
|
|
85
|
-
// Note: ProseMirror's handleDoubleClick doesn't quite work with DOM mousedown event handler
|
|
86
|
-
const { lastClick } = getPluginState(state);
|
|
87
|
-
const now = Date.now();
|
|
88
|
-
if (
|
|
89
|
-
lastClick &&
|
|
90
|
-
now - lastClick.time < 500 &&
|
|
91
|
-
isClickNear(event, lastClick)
|
|
92
|
-
) {
|
|
93
|
-
const newState = evenAllColumnsWidths(resizeState);
|
|
94
|
-
setLastClick(null, (tr) => updateColumnWidths(newState, table, start)(tr))(
|
|
110
|
+
|
|
111
|
+
setLastClick({ x: event.clientX, y: event.clientY, time: now })(
|
|
95
112
|
state,
|
|
96
113
|
dispatch,
|
|
97
114
|
);
|
|
98
115
|
|
|
99
|
-
return
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
116
|
+
return false;
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
export const distributeColumnsWidths =
|
|
120
|
+
(newResizeState: ResizeState, table: ContentNodeWithPos): Command =>
|
|
121
|
+
(state, dispatch) => {
|
|
122
|
+
if (dispatch) {
|
|
123
|
+
const tr = updateColumnWidths(
|
|
124
|
+
newResizeState,
|
|
125
|
+
table.node,
|
|
126
|
+
table.start,
|
|
127
|
+
)(state.tr);
|
|
128
|
+
stopResizing(tr)(state, dispatch);
|
|
129
|
+
}
|
|
106
130
|
|
|
107
|
-
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
export const distributeColumnsWidths = (
|
|
111
|
-
newResizeState: ResizeState,
|
|
112
|
-
table: ContentNodeWithPos,
|
|
113
|
-
): Command => (state, dispatch) => {
|
|
114
|
-
if (dispatch) {
|
|
115
|
-
const tr = updateColumnWidths(
|
|
116
|
-
newResizeState,
|
|
117
|
-
table.node,
|
|
118
|
-
table.start,
|
|
119
|
-
)(state.tr);
|
|
120
|
-
stopResizing(tr)(state, dispatch);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return true;
|
|
124
|
-
};
|
|
131
|
+
return true;
|
|
132
|
+
};
|
|
125
133
|
|
|
126
134
|
export const setResizeHandlePos = (resizeHandlePos: number | null) =>
|
|
127
135
|
createCommand({
|
|
@@ -20,61 +20,60 @@ import { getRowHeights } from '../../../utils/row-controls';
|
|
|
20
20
|
import { colWidthsForRow } from '../../../utils/column-controls';
|
|
21
21
|
import { getPluginState as getMainPluginState } from '../../plugin-factory';
|
|
22
22
|
|
|
23
|
-
export const updateControls =
|
|
24
|
-
getEditorFeatureFlags: GetEditorFeatureFlags
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
23
|
+
export const updateControls =
|
|
24
|
+
(getEditorFeatureFlags: GetEditorFeatureFlags) => (state: EditorState) => {
|
|
25
|
+
const { tableRef } = getMainPluginState(state);
|
|
26
|
+
if (!tableRef) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const tr = tableRef.querySelector('tr');
|
|
30
|
+
if (!tr) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const wrapper = tableRef.parentElement;
|
|
34
|
+
if (!(wrapper && wrapper.parentElement)) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
38
37
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
38
|
+
const rowControls = wrapper.parentElement.querySelectorAll<HTMLElement>(
|
|
39
|
+
`.${ClassName.ROW_CONTROLS_BUTTON_WRAP}`,
|
|
40
|
+
);
|
|
41
|
+
const numberedRows = wrapper.parentElement.querySelectorAll<HTMLElement>(
|
|
42
|
+
ClassName.NUMBERED_COLUMN_BUTTON,
|
|
43
|
+
);
|
|
45
44
|
|
|
46
|
-
|
|
45
|
+
syncStickyRowToTable(tableRef);
|
|
47
46
|
|
|
48
|
-
|
|
47
|
+
const rowHeights = getRowHeights(tableRef);
|
|
49
48
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
49
|
+
// update rows controls height on resize
|
|
50
|
+
for (let i = 0, count = rowControls.length; i < count; i++) {
|
|
51
|
+
const height = rowHeights[i];
|
|
52
|
+
if (height) {
|
|
53
|
+
rowControls[i].style.height = `${height}px`;
|
|
55
54
|
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
if (numberedRows.length) {
|
|
56
|
+
numberedRows[i].style.height = `${height}px`;
|
|
57
|
+
}
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
-
}
|
|
61
60
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
};
|
|
61
|
+
const rightShadows = wrapper.parentElement.querySelectorAll<HTMLElement>(
|
|
62
|
+
`.${ClassName.TABLE_RIGHT_SHADOW}`,
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
const leftShadows = wrapper.parentElement.querySelectorAll<HTMLElement>(
|
|
66
|
+
`.${ClassName.TABLE_LEFT_SHADOW}`,
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
updateOverflowShadows(getEditorFeatureFlags)(
|
|
70
|
+
state,
|
|
71
|
+
wrapper,
|
|
72
|
+
tableRef,
|
|
73
|
+
rightShadows,
|
|
74
|
+
leftShadows,
|
|
75
|
+
);
|
|
76
|
+
};
|
|
78
77
|
|
|
79
78
|
export const isClickNear = (
|
|
80
79
|
event: MouseEvent,
|