@atlaskit/editor-tables 2.2.4 → 2.2.6
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 +12 -0
- package/dist/cjs/cell-bookmark.js +0 -10
- package/dist/cjs/cell-selection.js +37 -102
- package/dist/cjs/index.js +0 -4
- package/dist/cjs/pm-plugins/input.js +17 -83
- package/dist/cjs/pm-plugins/plugin-key.js +0 -2
- package/dist/cjs/pm-plugins/table-editing.js +17 -18
- package/dist/cjs/pm-plugins.js +0 -2
- package/dist/cjs/table-map.js +67 -138
- package/dist/cjs/utils/add-column-at.js +0 -9
- package/dist/cjs/utils/add-column.js +8 -24
- package/dist/cjs/utils/add-row-at.js +8 -37
- package/dist/cjs/utils/add-row.js +2 -23
- package/dist/cjs/utils/analytics-helpers.js +4 -15
- package/dist/cjs/utils/cells.js +0 -12
- package/dist/cjs/utils/clone-tr.js +0 -2
- package/dist/cjs/utils/colspan.js +2 -18
- package/dist/cjs/utils/copy-paste.js +51 -139
- package/dist/cjs/utils/create-table.js +14 -28
- package/dist/cjs/utils/draw-cell-selection.js +0 -4
- package/dist/cjs/utils/empty-cells.js +0 -6
- package/dist/cjs/utils/find.js +6 -18
- package/dist/cjs/utils/fix-tables.js +13 -56
- package/dist/cjs/utils/for-each-cell.js +3 -17
- package/dist/cjs/utils/get-cell-selection-ranges.js +2 -9
- package/dist/cjs/utils/get-cells-in-column.js +0 -7
- package/dist/cjs/utils/get-cells-in-row.js +0 -7
- package/dist/cjs/utils/get-cells-in-table.js +0 -8
- package/dist/cjs/utils/get-selection-range-in-column.js +6 -27
- package/dist/cjs/utils/get-selection-range-in-row.js +6 -27
- package/dist/cjs/utils/get-selection-rect.js +0 -7
- package/dist/cjs/utils/go-to-next-cell.js +3 -22
- package/dist/cjs/utils/handle-paste.js +5 -34
- package/dist/cjs/utils/is-selected.js +6 -23
- package/dist/cjs/utils/is-selection-type.js +0 -2
- package/dist/cjs/utils/move-column.js +0 -12
- package/dist/cjs/utils/move-row.js +0 -11
- package/dist/cjs/utils/normalize-selection.js +3 -27
- package/dist/cjs/utils/remove-column.js +10 -46
- package/dist/cjs/utils/remove-row.js +8 -49
- package/dist/cjs/utils/remove-table.js +0 -6
- package/dist/cjs/utils/reorder-utils.js +13 -37
- package/dist/cjs/utils/replace-table.js +0 -8
- package/dist/cjs/utils/select-nodes.js +11 -31
- package/dist/cjs/utils/selection-cell.js +0 -5
- package/dist/cjs/utils/selection-rect.js +0 -10
- package/dist/cjs/utils/set-cell-attrs.js +0 -4
- package/dist/cjs/utils/split-cell-with-type.js +2 -35
- package/dist/cjs/utils/split-cell.js +0 -4
- package/dist/cjs/utils/table-node-types.js +4 -8
- package/dist/cjs/utils/tables.js +0 -4
- package/dist/cjs/utils/test-utils.js +9 -26
- package/dist/cjs/utils/toggle-header.js +3 -16
- package/dist/cjs/utils/uuid.js +0 -3
- package/dist/cjs/utils.js +0 -42
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/cell-bookmark.js +0 -5
- package/dist/es2019/cell-selection.js +37 -81
- package/dist/es2019/index.js +1 -0
- package/dist/es2019/pm-plugins/input.js +15 -67
- package/dist/es2019/pm-plugins/table-editing.js +3 -12
- package/dist/es2019/table-map.js +57 -127
- package/dist/es2019/utils/add-column-at.js +2 -4
- package/dist/es2019/utils/add-column.js +6 -16
- package/dist/es2019/utils/add-row-at.js +8 -22
- package/dist/es2019/utils/add-row.js +2 -17
- package/dist/es2019/utils/analytics-helpers.js +0 -5
- package/dist/es2019/utils/cells.js +4 -9
- package/dist/es2019/utils/colspan.js +6 -11
- package/dist/es2019/utils/copy-paste.js +41 -115
- package/dist/es2019/utils/create-table.js +3 -12
- package/dist/es2019/utils/draw-cell-selection.js +0 -1
- package/dist/es2019/utils/empty-cells.js +2 -3
- package/dist/es2019/utils/find.js +8 -8
- package/dist/es2019/utils/fix-tables.js +17 -47
- package/dist/es2019/utils/for-each-cell.js +6 -11
- package/dist/es2019/utils/get-cell-selection-ranges.js +2 -4
- package/dist/es2019/utils/get-cells-in-column.js +2 -3
- package/dist/es2019/utils/get-cells-in-row.js +2 -3
- package/dist/es2019/utils/get-cells-in-table.js +2 -4
- package/dist/es2019/utils/get-selection-range-in-column.js +8 -22
- package/dist/es2019/utils/get-selection-range-in-row.js +8 -22
- package/dist/es2019/utils/get-selection-rect.js +2 -2
- package/dist/es2019/utils/go-to-next-cell.js +3 -19
- package/dist/es2019/utils/handle-paste.js +3 -14
- package/dist/es2019/utils/is-selected.js +8 -10
- package/dist/es2019/utils/is-selection-type.js +0 -1
- package/dist/es2019/utils/move-column.js +3 -8
- package/dist/es2019/utils/move-row.js +3 -7
- package/dist/es2019/utils/normalize-selection.js +0 -16
- package/dist/es2019/utils/remove-column.js +10 -27
- package/dist/es2019/utils/remove-row.js +12 -32
- package/dist/es2019/utils/remove-table.js +2 -4
- package/dist/es2019/utils/reorder-utils.js +11 -26
- package/dist/es2019/utils/replace-table.js +0 -2
- package/dist/es2019/utils/select-nodes.js +9 -20
- package/dist/es2019/utils/selection-cell.js +0 -2
- package/dist/es2019/utils/selection-rect.js +0 -4
- package/dist/es2019/utils/set-cell-attrs.js +2 -2
- package/dist/es2019/utils/split-cell-with-type.js +8 -28
- package/dist/es2019/utils/split-cell.js +3 -2
- package/dist/es2019/utils/table-node-types.js +4 -7
- package/dist/es2019/utils/tables.js +0 -2
- package/dist/es2019/utils/test-utils.js +12 -16
- package/dist/es2019/utils/toggle-header.js +3 -10
- package/dist/es2019/utils/uuid.js +0 -2
- package/dist/es2019/version.json +1 -1
- package/dist/esm/cell-bookmark.js +0 -5
- package/dist/esm/cell-selection.js +37 -79
- package/dist/esm/index.js +1 -0
- package/dist/esm/pm-plugins/input.js +17 -71
- package/dist/esm/pm-plugins/table-editing.js +8 -13
- package/dist/esm/table-map.js +68 -133
- package/dist/esm/utils/add-column-at.js +2 -4
- package/dist/esm/utils/add-column.js +8 -20
- package/dist/esm/utils/add-row-at.js +8 -23
- package/dist/esm/utils/add-row.js +2 -21
- package/dist/esm/utils/analytics-helpers.js +4 -10
- package/dist/esm/utils/cells.js +0 -5
- package/dist/esm/utils/colspan.js +2 -14
- package/dist/esm/utils/copy-paste.js +44 -125
- package/dist/esm/utils/create-table.js +14 -25
- package/dist/esm/utils/draw-cell-selection.js +0 -1
- package/dist/esm/utils/empty-cells.js +2 -3
- package/dist/esm/utils/find.js +8 -8
- package/dist/esm/utils/fix-tables.js +13 -49
- package/dist/esm/utils/for-each-cell.js +6 -11
- package/dist/esm/utils/get-cell-selection-ranges.js +2 -4
- package/dist/esm/utils/get-cells-in-column.js +2 -3
- package/dist/esm/utils/get-cells-in-row.js +2 -3
- package/dist/esm/utils/get-cells-in-table.js +2 -4
- package/dist/esm/utils/get-selection-range-in-column.js +8 -24
- package/dist/esm/utils/get-selection-range-in-row.js +8 -24
- package/dist/esm/utils/get-selection-rect.js +2 -2
- package/dist/esm/utils/go-to-next-cell.js +3 -19
- package/dist/esm/utils/handle-paste.js +5 -23
- package/dist/esm/utils/is-selected.js +8 -10
- package/dist/esm/utils/is-selection-type.js +0 -1
- package/dist/esm/utils/move-column.js +3 -8
- package/dist/esm/utils/move-row.js +3 -7
- package/dist/esm/utils/normalize-selection.js +3 -22
- package/dist/esm/utils/remove-column.js +10 -31
- package/dist/esm/utils/remove-row.js +8 -35
- package/dist/esm/utils/remove-table.js +2 -4
- package/dist/esm/utils/reorder-utils.js +11 -26
- package/dist/esm/utils/replace-table.js +0 -2
- package/dist/esm/utils/select-nodes.js +11 -22
- package/dist/esm/utils/selection-cell.js +0 -2
- package/dist/esm/utils/selection-rect.js +0 -4
- package/dist/esm/utils/set-cell-attrs.js +2 -2
- package/dist/esm/utils/split-cell-with-type.js +2 -28
- package/dist/esm/utils/split-cell.js +3 -2
- package/dist/esm/utils/table-node-types.js +4 -7
- package/dist/esm/utils/tables.js +0 -2
- package/dist/esm/utils/test-utils.js +12 -16
- package/dist/esm/utils/toggle-header.js +3 -10
- package/dist/esm/version.json +1 -1
- package/package.json +6 -4
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
@@ -9,31 +8,28 @@ exports.clipCells = clipCells;
|
|
|
9
8
|
exports.fitSlice = fitSlice;
|
|
10
9
|
exports.insertCells = insertCells;
|
|
11
10
|
exports.pastedCells = pastedCells;
|
|
12
|
-
|
|
13
11
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
14
|
-
|
|
15
12
|
var _prosemirrorModel = require("prosemirror-model");
|
|
16
|
-
|
|
17
13
|
var _prosemirrorTransform = require("prosemirror-transform");
|
|
18
|
-
|
|
19
14
|
var _cellSelection = require("../cell-selection");
|
|
20
|
-
|
|
21
15
|
var _tableMap = require("../table-map");
|
|
22
|
-
|
|
23
16
|
var _colspan = require("./colspan");
|
|
24
|
-
|
|
25
17
|
var _selectionRect = require("./selection-rect");
|
|
26
|
-
|
|
27
18
|
var _tableNodeTypes = require("./table-node-types");
|
|
28
|
-
|
|
29
19
|
var _toggleHeader = require("./toggle-header");
|
|
30
|
-
|
|
31
20
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
21
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } // Utilities used for copy/paste handling.
|
|
22
|
+
//
|
|
23
|
+
// This module handles pasting cell content into tables, or pasting
|
|
24
|
+
// anything into a cell selection, as replacing a block of cells with
|
|
25
|
+
// the content of the selection. When pasting cells into a cell, that
|
|
26
|
+
// involves placing the block of pasted content so that its top left
|
|
27
|
+
// aligns with the selection cell, optionally extending the table to
|
|
28
|
+
// the right or bottom to make sure it is large enough. Pasting into a
|
|
29
|
+
// cell selection is different, here the cells in the selection are
|
|
30
|
+
// clipped to the selection's rectangle, optionally repeating the
|
|
31
|
+
// pasted cells when they are smaller than the selection.
|
|
35
32
|
// Utilities to help with copying and pasting table cells
|
|
36
|
-
|
|
37
33
|
/**
|
|
38
34
|
* Replace any header cells with table cells.
|
|
39
35
|
*
|
|
@@ -45,56 +41,47 @@ function stripHeaderType(schema, cells) {
|
|
|
45
41
|
var newCells = [];
|
|
46
42
|
cells.forEach(function (cell) {
|
|
47
43
|
var _cellNodeType$createA;
|
|
48
|
-
|
|
49
44
|
// Convert to cell type if not already
|
|
50
45
|
var cellNodeType = (0, _tableNodeTypes.tableNodeTypes)(schema).cell;
|
|
51
46
|
var tableCell = cell.type === cellNodeType ? cell : (_cellNodeType$createA = cellNodeType.createAndFill(cell.attrs, cell.content, cell.marks)) !== null && _cellNodeType$createA !== void 0 ? _cellNodeType$createA : cell;
|
|
52
47
|
newCells.push(tableCell);
|
|
53
48
|
});
|
|
54
49
|
return _prosemirrorModel.Fragment.from(newCells);
|
|
55
|
-
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// : (Slice) → ?{width: number, height: number, rows: [Fragment]}
|
|
56
53
|
// Get a rectangular area of cells from a slice, or null if the outer
|
|
57
54
|
// nodes of the slice aren't table cells or rows.
|
|
58
|
-
|
|
59
|
-
|
|
60
55
|
function pastedCells(slice) {
|
|
61
56
|
if (!slice.size) {
|
|
62
57
|
return null;
|
|
63
58
|
}
|
|
64
|
-
|
|
65
59
|
var content = slice.content,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
60
|
+
openStart = slice.openStart,
|
|
61
|
+
openEnd = slice.openEnd;
|
|
69
62
|
if (!content.firstChild) {
|
|
70
63
|
throw new Error('pastedCells: no firstChild defined for content');
|
|
71
64
|
}
|
|
72
|
-
|
|
73
65
|
while (content.childCount === 1 && (openStart > 0 && openEnd > 0 || content.firstChild.type.spec.tableRole === 'table')) {
|
|
74
66
|
openStart--;
|
|
75
67
|
openEnd--;
|
|
76
68
|
content = content.firstChild.content;
|
|
77
|
-
|
|
78
69
|
if (!content.firstChild) {
|
|
79
70
|
throw new Error('pastedCells: no firstChild defined for content');
|
|
80
71
|
}
|
|
81
72
|
}
|
|
82
|
-
|
|
83
73
|
var first = content.firstChild;
|
|
84
74
|
var role = first.type.spec.tableRole;
|
|
85
75
|
var schema = first.type.schema;
|
|
86
76
|
var rows = [];
|
|
87
|
-
|
|
88
77
|
if (role === 'row') {
|
|
89
78
|
for (var i = 0; i < content.childCount; i++) {
|
|
90
79
|
var cells = content.child(i).content;
|
|
91
80
|
var left = i ? 0 : Math.max(0, openStart - 1);
|
|
92
81
|
var right = i < content.childCount - 1 ? 0 : Math.max(0, openEnd - 1);
|
|
93
|
-
|
|
94
82
|
if (left || right) {
|
|
95
83
|
cells = fitSlice((0, _tableNodeTypes.tableNodeTypes)(schema).row, new _prosemirrorModel.Slice(cells, left, right)).content;
|
|
96
84
|
}
|
|
97
|
-
|
|
98
85
|
rows.push(cells);
|
|
99
86
|
}
|
|
100
87
|
} else if (role === 'cell' || role === 'header_cell') {
|
|
@@ -102,389 +89,314 @@ function pastedCells(slice) {
|
|
|
102
89
|
} else {
|
|
103
90
|
return null;
|
|
104
91
|
}
|
|
105
|
-
|
|
106
92
|
var rowsWithoutHeaders = rows.map(function (row) {
|
|
107
93
|
return stripHeaderType(schema, row);
|
|
108
94
|
});
|
|
109
95
|
return ensureRectangular(schema, rowsWithoutHeaders);
|
|
110
|
-
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// : (Schema, [Fragment]) → {width: number, height: number, rows: [Fragment]}
|
|
111
99
|
// Compute the width and height of a set of cells, and make sure each
|
|
112
100
|
// row has the same number of cells.
|
|
113
|
-
|
|
114
|
-
|
|
115
101
|
function ensureRectangular(schema, rowsFragment) {
|
|
116
102
|
var rows = rowsFragment;
|
|
117
103
|
var widths = [];
|
|
118
|
-
|
|
119
104
|
for (var i = 0; i < rows.length; i++) {
|
|
120
105
|
var row = rows[i];
|
|
121
|
-
|
|
122
106
|
for (var j = row.childCount - 1; j >= 0; j--) {
|
|
123
107
|
var _row$child$attrs = row.child(j).attrs,
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
108
|
+
rowspan = _row$child$attrs.rowspan,
|
|
109
|
+
colspan = _row$child$attrs.colspan;
|
|
127
110
|
for (var r = i; r < i + rowspan; r++) {
|
|
128
111
|
widths[r] = (widths[r] || 0) + colspan;
|
|
129
112
|
}
|
|
130
113
|
}
|
|
131
114
|
}
|
|
132
|
-
|
|
133
115
|
var width = 0;
|
|
134
|
-
|
|
135
116
|
for (var _r = 0; _r < widths.length; _r++) {
|
|
136
117
|
width = Math.max(width, widths[_r]);
|
|
137
118
|
}
|
|
138
|
-
|
|
139
119
|
for (var _r2 = 0; _r2 < widths.length; _r2++) {
|
|
140
120
|
if (_r2 >= rows.length) {
|
|
141
121
|
rows.push(_prosemirrorModel.Fragment.empty);
|
|
142
122
|
}
|
|
143
|
-
|
|
144
123
|
if (widths[_r2] < width) {
|
|
145
124
|
var empty = (0, _tableNodeTypes.tableNodeTypes)(schema).cell.createAndFill();
|
|
146
125
|
var cells = [];
|
|
147
|
-
|
|
148
126
|
for (var _i = widths[_r2]; _i < width; _i++) {
|
|
149
127
|
cells.push(empty);
|
|
150
128
|
}
|
|
151
|
-
|
|
152
129
|
rows[_r2] = rows[_r2].append(_prosemirrorModel.Fragment.from(cells));
|
|
153
130
|
}
|
|
154
131
|
}
|
|
155
|
-
|
|
156
132
|
return {
|
|
157
133
|
height: rows.length,
|
|
158
134
|
width: width,
|
|
159
135
|
rows: rows
|
|
160
136
|
};
|
|
161
137
|
}
|
|
162
|
-
|
|
163
138
|
function fitSlice(nodeType, slice) {
|
|
164
139
|
var node = nodeType.createAndFill();
|
|
165
|
-
|
|
166
140
|
if (!node) {
|
|
167
141
|
throw new Error("fitSlice: unable to create node");
|
|
168
142
|
}
|
|
169
|
-
|
|
170
143
|
var tr = new _prosemirrorTransform.Transform(node).replace(0, node.content.size, slice);
|
|
171
144
|
return tr.doc;
|
|
172
|
-
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// : ({width: number, height: number, rows: [Fragment]}, number, number) → {width: number, height: number, rows: [Fragment]}
|
|
173
148
|
// Clip or extend (repeat) the given set of cells to cover the given
|
|
174
149
|
// width and height. Will clip rowspan/colspan cells at the edges when
|
|
175
150
|
// they stick out.
|
|
176
|
-
|
|
177
|
-
|
|
178
151
|
function clipCells(_ref, newWidth, newHeight) {
|
|
179
152
|
var currentWidth = _ref.width,
|
|
180
|
-
|
|
181
|
-
|
|
153
|
+
currentHeight = _ref.height,
|
|
154
|
+
currentRows = _ref.rows;
|
|
182
155
|
var rows = currentRows;
|
|
183
156
|
var width = currentWidth;
|
|
184
157
|
var height = currentHeight;
|
|
185
|
-
|
|
186
158
|
if (width !== newWidth) {
|
|
187
159
|
var added = [];
|
|
188
160
|
var newRows = [];
|
|
189
|
-
|
|
190
161
|
for (var row = 0; row < rows.length; row++) {
|
|
191
162
|
var frag = rows[row];
|
|
192
163
|
var cells = [];
|
|
193
|
-
|
|
194
164
|
for (var col = added[row] || 0, i = 0; col < newWidth; i++) {
|
|
195
165
|
var cell = frag.child(i % frag.childCount);
|
|
196
|
-
|
|
197
166
|
if (col + cell.attrs.colspan > newWidth) {
|
|
198
167
|
cell = cell.type.create((0, _colspan.removeColSpan)(cell.attrs, cell.attrs.colspan, col + cell.attrs.colspan - newWidth), cell.content);
|
|
199
168
|
}
|
|
200
|
-
|
|
201
169
|
cells.push(cell);
|
|
202
170
|
col += cell.attrs.colspan;
|
|
203
|
-
|
|
204
171
|
for (var j = 1; j < cell.attrs.rowspan; j++) {
|
|
205
172
|
added[row + j] = (added[row + j] || 0) + cell.attrs.colspan;
|
|
206
173
|
}
|
|
207
174
|
}
|
|
208
|
-
|
|
209
175
|
newRows.push(_prosemirrorModel.Fragment.from(cells));
|
|
210
176
|
}
|
|
211
|
-
|
|
212
177
|
rows = newRows;
|
|
213
178
|
width = newWidth;
|
|
214
179
|
}
|
|
215
|
-
|
|
216
180
|
if (height !== newHeight) {
|
|
217
181
|
var _newRows = [];
|
|
218
|
-
|
|
219
182
|
for (var _row = 0, _i2 = 0; _row < newHeight; _row++, _i2++) {
|
|
220
183
|
var _cells = [];
|
|
221
184
|
var source = rows[_i2 % height];
|
|
222
|
-
|
|
223
185
|
for (var _j = 0; _j < source.childCount; _j++) {
|
|
224
186
|
var _cell = source.child(_j);
|
|
225
|
-
|
|
226
187
|
if (_row + _cell.attrs.rowspan > newHeight) {
|
|
227
188
|
_cell = _cell.type.create(_objectSpread(_objectSpread({}, _cell.attrs), {}, {
|
|
228
189
|
rowspan: Math.max(1, newHeight - _cell.attrs.rowspan)
|
|
229
190
|
}), _cell.content);
|
|
230
191
|
}
|
|
231
|
-
|
|
232
192
|
_cells.push(_cell);
|
|
233
193
|
}
|
|
234
|
-
|
|
235
194
|
_newRows.push(_prosemirrorModel.Fragment.from(_cells));
|
|
236
195
|
}
|
|
237
|
-
|
|
238
196
|
rows = _newRows;
|
|
239
197
|
height = newHeight;
|
|
240
198
|
}
|
|
241
|
-
|
|
242
199
|
return {
|
|
243
200
|
width: width,
|
|
244
201
|
height: height,
|
|
245
202
|
rows: rows
|
|
246
203
|
};
|
|
247
|
-
}
|
|
248
|
-
// true if something was changed.
|
|
249
|
-
|
|
204
|
+
}
|
|
250
205
|
|
|
206
|
+
// Make sure a table has at least the given width and height. Return
|
|
207
|
+
// true if something was changed.
|
|
251
208
|
function growTable(tr, map, table, start, width, height, mapFrom) {
|
|
252
209
|
var schema = tr.doc.type.schema;
|
|
253
210
|
var types = (0, _tableNodeTypes.tableNodeTypes)(schema);
|
|
254
211
|
var empty;
|
|
255
212
|
var emptyHead;
|
|
256
|
-
|
|
257
213
|
if (width > map.width) {
|
|
258
214
|
for (var row = 0, rowEnd = 0; row < map.height; row++) {
|
|
259
215
|
var rowNode = table.child(row);
|
|
260
216
|
rowEnd += rowNode.nodeSize;
|
|
261
217
|
var cells = [];
|
|
262
218
|
var add = void 0;
|
|
263
|
-
|
|
264
219
|
if (rowNode.lastChild == null || rowNode.lastChild.type === types.cell) {
|
|
265
220
|
add = empty || (empty = types.cell.createAndFill());
|
|
266
221
|
} else {
|
|
267
222
|
add = emptyHead || (emptyHead = types.header_cell.createAndFill());
|
|
268
223
|
}
|
|
269
|
-
|
|
270
224
|
for (var i = map.width; i < width; i++) {
|
|
271
225
|
cells.push(add);
|
|
272
226
|
}
|
|
273
|
-
|
|
274
227
|
tr.insert(tr.mapping.slice(mapFrom).map(rowEnd - 1 + start), cells);
|
|
275
228
|
}
|
|
276
229
|
}
|
|
277
|
-
|
|
278
230
|
if (height > map.height) {
|
|
279
231
|
var _cells2 = [];
|
|
280
|
-
|
|
281
232
|
for (var _i3 = 0, k = (map.height - 1) * map.width; _i3 < Math.max(map.width, width); _i3++) {
|
|
282
233
|
var header = void 0;
|
|
283
|
-
|
|
284
234
|
if (_i3 >= map.width) {
|
|
285
235
|
header = false;
|
|
286
236
|
} else {
|
|
287
237
|
var mappedPos = map.map[k + _i3];
|
|
288
238
|
var node = table.nodeAt(mappedPos);
|
|
289
|
-
|
|
290
239
|
if (!node) {
|
|
291
240
|
throw new Error("growTable: no node found at pos ".concat(mappedPos));
|
|
292
241
|
}
|
|
293
|
-
|
|
294
242
|
header = node.type === types.header_cell;
|
|
295
243
|
}
|
|
296
|
-
|
|
297
244
|
_cells2.push(header ? emptyHead || (emptyHead = types.header_cell.createAndFill()) : empty || (empty = types.cell.createAndFill()));
|
|
298
245
|
}
|
|
299
|
-
|
|
300
246
|
var emptyRow = types.row.create(null, _prosemirrorModel.Fragment.from(_cells2));
|
|
301
247
|
var rows = [];
|
|
302
|
-
|
|
303
248
|
for (var _i4 = map.height; _i4 < height; _i4++) {
|
|
304
249
|
rows.push(emptyRow);
|
|
305
250
|
}
|
|
306
|
-
|
|
307
251
|
tr.insert(tr.mapping.slice(mapFrom).map(start + table.nodeSize - 2), rows);
|
|
308
252
|
}
|
|
309
|
-
|
|
310
253
|
return !!(empty || emptyHead);
|
|
311
|
-
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Make sure the given line (left, top) to (right, top) doesn't cross
|
|
312
257
|
// any rowspan cells by splitting cells that cross it. Return true if
|
|
313
258
|
// something changed.
|
|
314
|
-
|
|
315
|
-
|
|
316
259
|
function isolateHorizontal(tr, map, table, start, left, right, top, mapFrom) {
|
|
317
260
|
if (top === 0 || top === map.height) {
|
|
318
261
|
return false;
|
|
319
262
|
}
|
|
320
|
-
|
|
321
263
|
var found = false;
|
|
322
|
-
|
|
323
264
|
for (var col = left; col < right; col++) {
|
|
324
265
|
var index = top * map.width + col;
|
|
325
266
|
var pos = map.map[index];
|
|
326
|
-
|
|
327
267
|
if (map.map[index - map.width] === pos) {
|
|
328
268
|
found = true;
|
|
329
269
|
var cell = table.nodeAt(pos);
|
|
330
|
-
|
|
331
270
|
if (!cell) {
|
|
332
271
|
throw new Error("isolateHorizontal: no cell found at pos ".concat(pos));
|
|
333
272
|
}
|
|
334
|
-
|
|
335
273
|
var _map$findCell = map.findCell(pos),
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
274
|
+
cellTop = _map$findCell.top,
|
|
275
|
+
cellLeft = _map$findCell.left;
|
|
339
276
|
tr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + start), undefined, _objectSpread(_objectSpread({}, cell.attrs), {}, {
|
|
340
277
|
rowspan: top - cellTop
|
|
341
278
|
}));
|
|
342
279
|
var newCell = cell.type.createAndFill(_objectSpread(_objectSpread({}, cell.attrs), {}, {
|
|
343
280
|
rowspan: cellTop + cell.attrs.rowspan - top
|
|
344
281
|
}));
|
|
345
|
-
|
|
346
282
|
if (!newCell) {
|
|
347
283
|
throw new Error('isolateHorizontal: failed to create cell');
|
|
348
284
|
}
|
|
349
|
-
|
|
350
285
|
tr.insert(tr.mapping.slice(mapFrom).map(map.positionAt(top, cellLeft, table)), newCell);
|
|
351
286
|
col += cell.attrs.colspan - 1;
|
|
352
287
|
}
|
|
353
288
|
}
|
|
354
|
-
|
|
355
289
|
return found;
|
|
356
|
-
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// Make sure the given line (left, top) to (left, bottom) doesn't
|
|
357
293
|
// cross any colspan cells by splitting cells that cross it. Return
|
|
358
294
|
// true if something changed.
|
|
359
|
-
|
|
360
|
-
|
|
361
295
|
function isolateVertical(tr, map, table, start, top, bottom, left, mapFrom) {
|
|
362
296
|
if (left === 0 || left === map.width) {
|
|
363
297
|
return false;
|
|
364
298
|
}
|
|
365
|
-
|
|
366
299
|
var found = false;
|
|
367
|
-
|
|
368
300
|
for (var row = top; row < bottom; row++) {
|
|
369
301
|
var index = row * map.width + left;
|
|
370
302
|
var pos = map.map[index];
|
|
371
|
-
|
|
372
303
|
if (map.map[index - 1] === pos) {
|
|
373
304
|
found = true;
|
|
374
305
|
var cell = table.nodeAt(pos);
|
|
375
|
-
|
|
376
306
|
if (!cell) {
|
|
377
307
|
throw new Error("isolateVertical: could not find cell at pos ".concat(pos));
|
|
378
308
|
}
|
|
379
|
-
|
|
380
309
|
var cellLeft = map.colCount(pos);
|
|
381
310
|
var updatePos = tr.mapping.slice(mapFrom).map(pos + start);
|
|
382
311
|
tr.setNodeMarkup(updatePos, undefined, (0, _colspan.removeColSpan)(cell.attrs, left - cellLeft, cell.attrs.colspan - (left - cellLeft)));
|
|
383
312
|
var newCell = cell.type.createAndFill((0, _colspan.removeColSpan)(cell.attrs, 0, left - cellLeft));
|
|
384
|
-
|
|
385
313
|
if (!newCell) {
|
|
386
314
|
throw new Error('isolateVertical: failed to create cell');
|
|
387
315
|
}
|
|
388
|
-
|
|
389
316
|
tr.insert(updatePos + cell.nodeSize, newCell);
|
|
390
317
|
row += cell.attrs.rowspan - 1;
|
|
391
318
|
}
|
|
392
319
|
}
|
|
393
|
-
|
|
394
320
|
return found;
|
|
395
321
|
}
|
|
396
|
-
|
|
397
322
|
function applyHeaderCells(tr, tableMap, state, tableStart, table, headerRowEnabled, headerColumnEnabled) {
|
|
398
323
|
var schema = state.schema;
|
|
399
|
-
|
|
400
324
|
var setMarkup = function setMarkup(tr, row, col, headerEnabled) {
|
|
401
325
|
var cellPos = tableStart + tableMap.positionAt(row, col, table);
|
|
402
326
|
var cell = tr.doc.nodeAt(cellPos);
|
|
403
327
|
var newType = headerEnabled ? schema.nodes.tableHeader : schema.nodes.tableCell;
|
|
404
328
|
var isCellTypeChanged = newType !== (cell === null || cell === void 0 ? void 0 : cell.type);
|
|
405
329
|
var isCellTypeValid = [schema.nodes.tableCell, schema.nodes.tableHeader].includes(cell === null || cell === void 0 ? void 0 : cell.type);
|
|
406
|
-
|
|
407
330
|
if (isCellTypeChanged && isCellTypeValid) {
|
|
408
331
|
tr.setNodeMarkup(cellPos, newType, cell === null || cell === void 0 ? void 0 : cell.attrs, cell === null || cell === void 0 ? void 0 : cell.marks);
|
|
409
332
|
}
|
|
410
|
-
};
|
|
411
|
-
|
|
333
|
+
};
|
|
412
334
|
|
|
413
|
-
|
|
335
|
+
// For row === 0 && col === 0 it is enabled if either are enabled
|
|
336
|
+
setMarkup(tr, 0, 0, headerColumnEnabled || headerRowEnabled);
|
|
414
337
|
|
|
338
|
+
// Header Column
|
|
415
339
|
for (var col = 1; col < tableMap.width; col++) {
|
|
416
340
|
setMarkup(tr, 0, col, headerRowEnabled);
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
|
|
341
|
+
}
|
|
342
|
+
// Header Row
|
|
420
343
|
for (var row = 1; row < tableMap.height; row++) {
|
|
421
344
|
setMarkup(tr, row, 0, headerColumnEnabled);
|
|
422
345
|
}
|
|
423
|
-
}
|
|
424
|
-
// table, at the position pointed at by rect.
|
|
425
|
-
|
|
346
|
+
}
|
|
426
347
|
|
|
348
|
+
// Insert the given set of cells (as returned by `pastedCells`) into a
|
|
349
|
+
// table, at the position pointed at by rect.
|
|
427
350
|
function insertCells(state, dispatch, tableStart, rect, cells) {
|
|
428
351
|
var table = state.doc;
|
|
429
352
|
var newRect = (0, _selectionRect.selectedRect)(state);
|
|
430
|
-
var types = (0, _tableNodeTypes.tableNodeTypes)(state.schema);
|
|
353
|
+
var types = (0, _tableNodeTypes.tableNodeTypes)(state.schema);
|
|
431
354
|
|
|
355
|
+
// Get if the header row and column are enabled on the original table
|
|
432
356
|
var headerRowEnabled = (0, _toggleHeader.isHeaderEnabledByType)('row', newRect, types);
|
|
433
357
|
var headerColumnEnabled = (0, _toggleHeader.isHeaderEnabledByType)('column', newRect, types);
|
|
434
|
-
|
|
435
358
|
if (tableStart) {
|
|
436
359
|
table = state.doc.nodeAt(tableStart - 1);
|
|
437
|
-
|
|
438
360
|
if (!table) {
|
|
439
361
|
throw new Error("insertCells: could not find table at pos ".concat(tableStart - 1));
|
|
440
362
|
}
|
|
441
363
|
}
|
|
442
|
-
|
|
443
364
|
var map = _tableMap.TableMap.get(table);
|
|
444
|
-
|
|
445
365
|
var top = rect.top,
|
|
446
|
-
|
|
366
|
+
left = rect.left;
|
|
447
367
|
var right = left + cells.width;
|
|
448
368
|
var bottom = top + cells.height;
|
|
449
369
|
var tr = state.tr;
|
|
450
370
|
var mapFrom = 0;
|
|
451
|
-
|
|
452
371
|
function recomp() {
|
|
453
372
|
table = tableStart ? tr.doc.nodeAt(tableStart - 1) : tr.doc;
|
|
454
373
|
map = _tableMap.TableMap.get(table);
|
|
455
374
|
mapFrom = tr.mapping.maps.length;
|
|
456
|
-
}
|
|
375
|
+
}
|
|
376
|
+
// Prepare the table to be large enough and not have any cells
|
|
457
377
|
// crossing the boundaries of the rectangle that we want to
|
|
458
378
|
// insert into. If anything about it changes, recompute the table
|
|
459
379
|
// map so that subsequent operations can see the current shape.
|
|
460
|
-
|
|
461
|
-
|
|
462
380
|
if (growTable(tr, map, table, tableStart, right, bottom, mapFrom)) {
|
|
463
381
|
recomp();
|
|
464
382
|
}
|
|
465
|
-
|
|
466
383
|
if (isolateHorizontal(tr, map, table, tableStart, left, right, top, mapFrom)) {
|
|
467
384
|
recomp();
|
|
468
385
|
}
|
|
469
|
-
|
|
470
386
|
if (isolateHorizontal(tr, map, table, tableStart, left, right, bottom, mapFrom)) {
|
|
471
387
|
recomp();
|
|
472
388
|
}
|
|
473
|
-
|
|
474
389
|
if (isolateVertical(tr, map, table, tableStart, top, bottom, left, mapFrom)) {
|
|
475
390
|
recomp();
|
|
476
391
|
}
|
|
477
|
-
|
|
478
392
|
if (isolateVertical(tr, map, table, tableStart, top, bottom, right, mapFrom)) {
|
|
479
393
|
recomp();
|
|
480
394
|
}
|
|
481
|
-
|
|
482
395
|
for (var row = top; row < bottom; row++) {
|
|
483
396
|
var from = map.positionAt(row, left, table);
|
|
484
397
|
var to = map.positionAt(row, right, table);
|
|
485
398
|
tr.replace(tr.mapping.slice(mapFrom).map(from + tableStart), tr.mapping.slice(mapFrom).map(to + tableStart), new _prosemirrorModel.Slice(cells.rows[row - top], 0, 0));
|
|
486
399
|
}
|
|
487
|
-
|
|
488
400
|
recomp();
|
|
489
401
|
applyHeaderCells(tr, map, state, tableStart, table, headerRowEnabled, headerColumnEnabled);
|
|
490
402
|
tr.setSelection(new _cellSelection.CellSelection(tr.doc.resolve(tableStart + map.positionAt(top, left, table)), tr.doc.resolve(tableStart + map.positionAt(bottom - 1, right - 1, table))));
|
|
@@ -4,66 +4,52 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createTable = void 0;
|
|
7
|
-
|
|
8
7
|
var _tableNodeTypes2 = require("./table-node-types");
|
|
9
|
-
|
|
10
8
|
var _uuid = require("./uuid");
|
|
11
|
-
|
|
12
9
|
var createCell = function createCell(cellType, cellContent) {
|
|
13
10
|
if (cellContent) {
|
|
14
11
|
return cellType.createChecked(null, cellContent);
|
|
15
12
|
}
|
|
16
|
-
|
|
17
13
|
return cellType.createAndFill();
|
|
18
|
-
};
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
// Returns a table node of a given size.
|
|
19
17
|
// `withHeaderRow` defines whether the first row of the table will be a header row.
|
|
20
18
|
// `cellContent` defines the content of each cell.
|
|
21
|
-
|
|
22
|
-
|
|
23
19
|
var createTable = function createTable(_ref) {
|
|
24
20
|
var schema = _ref.schema,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
21
|
+
_ref$rowsCount = _ref.rowsCount,
|
|
22
|
+
rowsCount = _ref$rowsCount === void 0 ? 3 : _ref$rowsCount,
|
|
23
|
+
_ref$colsCount = _ref.colsCount,
|
|
24
|
+
colsCount = _ref$colsCount === void 0 ? 3 : _ref$colsCount,
|
|
25
|
+
_ref$withHeaderRow = _ref.withHeaderRow,
|
|
26
|
+
withHeaderRow = _ref$withHeaderRow === void 0 ? true : _ref$withHeaderRow,
|
|
27
|
+
cellContent = _ref.cellContent;
|
|
33
28
|
var _tableNodeTypes = (0, _tableNodeTypes2.tableNodeTypes)(schema),
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
29
|
+
tableCell = _tableNodeTypes.cell,
|
|
30
|
+
tableHeader = _tableNodeTypes.header_cell,
|
|
31
|
+
tableRow = _tableNodeTypes.row,
|
|
32
|
+
table = _tableNodeTypes.table;
|
|
39
33
|
var cells = [];
|
|
40
34
|
var headerCells = [];
|
|
41
|
-
|
|
42
35
|
for (var i = 0; i < colsCount; i++) {
|
|
43
36
|
var cell = createCell(tableCell, cellContent);
|
|
44
|
-
|
|
45
37
|
if (cell) {
|
|
46
38
|
cells.push(cell);
|
|
47
39
|
}
|
|
48
|
-
|
|
49
40
|
if (withHeaderRow) {
|
|
50
41
|
var headerCell = createCell(tableHeader, cellContent);
|
|
51
|
-
|
|
52
42
|
if (headerCell) {
|
|
53
43
|
headerCells.push(headerCell);
|
|
54
44
|
}
|
|
55
45
|
}
|
|
56
46
|
}
|
|
57
|
-
|
|
58
47
|
var rows = [];
|
|
59
|
-
|
|
60
48
|
for (var _i = 0; _i < rowsCount; _i++) {
|
|
61
49
|
rows.push(tableRow.createChecked(null, withHeaderRow && _i === 0 ? headerCells : cells));
|
|
62
50
|
}
|
|
63
|
-
|
|
64
51
|
return table.createChecked({
|
|
65
52
|
localId: _uuid.uuid.generate()
|
|
66
53
|
}, rows);
|
|
67
54
|
};
|
|
68
|
-
|
|
69
55
|
exports.createTable = createTable;
|
|
@@ -4,16 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.drawCellSelection = drawCellSelection;
|
|
7
|
-
|
|
8
7
|
var _prosemirrorView = require("prosemirror-view");
|
|
9
|
-
|
|
10
8
|
var _cellSelection = require("../cell-selection");
|
|
11
|
-
|
|
12
9
|
function drawCellSelection(state) {
|
|
13
10
|
if (!(state.selection instanceof _cellSelection.CellSelection)) {
|
|
14
11
|
return null;
|
|
15
12
|
}
|
|
16
|
-
|
|
17
13
|
var cells = [];
|
|
18
14
|
state.selection.forEachCell(function (node, pos) {
|
|
19
15
|
cells.push(_prosemirrorView.Decoration.node(pos, pos + node.nodeSize, {
|
|
@@ -4,25 +4,19 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.emptyCell = void 0;
|
|
7
|
-
|
|
8
7
|
var _cloneTr = require("./clone-tr");
|
|
9
|
-
|
|
10
8
|
var _tableNodeTypes = require("./table-node-types");
|
|
11
|
-
|
|
12
9
|
// Returns a new transaction that clears the content of a given `cell`.
|
|
13
10
|
var emptyCell = function emptyCell(cell, schema) {
|
|
14
11
|
return function (tr) {
|
|
15
12
|
if (cell) {
|
|
16
13
|
var node = (0, _tableNodeTypes.tableNodeTypes)(schema).cell.createAndFill();
|
|
17
|
-
|
|
18
14
|
if (node && !cell.node.content.eq(node.content)) {
|
|
19
15
|
tr.replaceWith(cell.pos + 1, cell.pos + cell.node.nodeSize, node.content);
|
|
20
16
|
return (0, _cloneTr.cloneTr)(tr);
|
|
21
17
|
}
|
|
22
18
|
}
|
|
23
|
-
|
|
24
19
|
return tr;
|
|
25
20
|
};
|
|
26
21
|
};
|
|
27
|
-
|
|
28
22
|
exports.emptyCell = emptyCell;
|