@progress/kendo-angular-editor 2.5.0 → 3.0.0-dev.202201191455
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/LICENSE.md +1 -1
- package/NOTICE.txt +119 -79
- package/README.md +1 -1
- package/dist/cdn/js/kendo-angular-editor.js +2 -2
- package/dist/cdn/main.js +1 -1
- package/dist/es/common/error-messages.js +4 -3
- package/dist/es/config/command-icons.js +1 -0
- package/dist/es/config/commands.js +18 -17
- package/dist/es/config/schema.js +2 -4
- package/dist/es/config/table-commands.js +1 -363
- package/dist/es/dialogs/colorpicker-dialog.component.js +1 -1
- package/dist/es/dialogs/file-link-dialog.component.js +1 -1
- package/dist/es/dialogs/image-dialog.component.js +1 -1
- package/dist/es/editor-toolbar-state.js +12 -2
- package/dist/es/editor.component.js +103 -75
- package/dist/es/editor.module.js +6 -3
- package/dist/es/index.js +2 -0
- package/dist/es/localization/messages.js +4 -0
- package/dist/es/main.js +1 -0
- package/dist/es/package-metadata.js +1 -1
- package/dist/{es2015/config/table-nodes.d.ts → es/preventable-events/paste-event-data.js} +0 -5
- package/dist/es/preventable-events/paste-event.js +25 -0
- package/dist/es/tools/blockquote/editor-blockquote-button.directive.js +48 -0
- package/dist/es/tools/colorpicker/editor-colorpicker.component.js +24 -7
- package/dist/es/tools/format/editor-format-dropdownlist.component.js +1 -1
- package/dist/es/tools/format/editor-format.component.js +0 -1
- package/dist/es/tools/tables/popup-table-grid.component.js +1 -1
- package/dist/es2015/common/commands.d.ts +1 -1
- package/dist/es2015/common/error-messages.js +4 -3
- package/dist/es2015/common/format-item.interface.d.ts +1 -1
- package/dist/es2015/common/paste-cleanup-settings.d.ts +14 -0
- package/dist/es2015/config/command-icons.js +1 -0
- package/dist/es2015/config/commands.js +18 -17
- package/dist/es2015/config/schema.d.ts +1 -1
- package/dist/es2015/config/schema.js +2 -3
- package/dist/es2015/config/table-commands.d.ts +0 -36
- package/dist/es2015/config/table-commands.js +1 -357
- package/dist/es2015/dialogs/colorpicker-dialog.component.js +1 -1
- package/dist/es2015/dialogs/file-link-dialog.component.js +4 -4
- package/dist/es2015/dialogs/image-dialog.component.js +4 -4
- package/dist/es2015/editor-toolbar-state.js +12 -2
- package/dist/es2015/editor.component.d.ts +16 -11
- package/dist/es2015/editor.component.js +105 -75
- package/dist/es2015/editor.module.js +6 -3
- package/dist/es2015/index.d.ts +2 -0
- package/dist/es2015/index.js +2 -0
- package/dist/es2015/index.metadata.json +1 -1
- package/dist/es2015/localization/messages.d.ts +4 -0
- package/dist/es2015/localization/messages.js +4 -0
- package/dist/es2015/main.d.ts +2 -0
- package/dist/es2015/main.js +1 -0
- package/dist/es2015/package-metadata.js +1 -1
- package/dist/es2015/preventable-events/paste-event-data.d.ts +21 -0
- package/dist/es2015/preventable-events/paste-event-data.js +4 -0
- package/dist/es2015/preventable-events/paste-event.d.ts +27 -0
- package/dist/es2015/preventable-events/paste-event.js +20 -0
- package/dist/es2015/tools/blockquote/editor-blockquote-button.directive.d.ts +30 -0
- package/dist/es2015/tools/blockquote/editor-blockquote-button.directive.js +45 -0
- package/dist/es2015/tools/colorpicker/editor-colorpicker.component.d.ts +8 -2
- package/dist/es2015/tools/colorpicker/editor-colorpicker.component.js +20 -7
- package/dist/es2015/tools/format/editor-format-dropdownlist.component.js +0 -4
- package/dist/es2015/tools/format/editor-format.component.js +0 -1
- package/dist/es2015/tools/tables/popup-table-grid.component.js +2 -2
- package/dist/fesm2015/index.js +354 -1624
- package/dist/fesm5/index.js +365 -1649
- package/dist/npm/common/error-messages.js +4 -2
- package/dist/npm/config/command-icons.js +1 -0
- package/dist/npm/config/commands.js +16 -14
- package/dist/npm/config/schema.js +2 -4
- package/dist/npm/config/table-commands.js +1 -368
- package/dist/npm/dialogs/colorpicker-dialog.component.js +1 -1
- package/dist/npm/dialogs/file-link-dialog.component.js +1 -1
- package/dist/npm/dialogs/image-dialog.component.js +1 -1
- package/dist/npm/editor-toolbar-state.js +11 -1
- package/dist/npm/editor.component.js +99 -71
- package/dist/npm/editor.module.js +7 -4
- package/dist/npm/index.js +5 -0
- package/dist/npm/localization/messages.js +4 -0
- package/dist/npm/main.js +2 -0
- package/dist/npm/package-metadata.js +1 -1
- package/dist/npm/preventable-events/paste-event-data.js +6 -0
- package/dist/npm/preventable-events/paste-event.js +27 -0
- package/dist/npm/tools/blockquote/editor-blockquote-button.directive.js +50 -0
- package/dist/npm/tools/colorpicker/editor-colorpicker.component.js +24 -7
- package/dist/npm/tools/format/editor-format-dropdownlist.component.js +1 -1
- package/dist/npm/tools/format/editor-format.component.js +0 -1
- package/dist/npm/tools/tables/popup-table-grid.component.js +1 -1
- package/dist/systemjs/kendo-angular-editor.js +1 -1
- package/package.json +18 -18
- package/dist/es/config/table-nodes.js +0 -146
- package/dist/es/config/tables/CellSelection.js +0 -268
- package/dist/es/config/tables/TableMap.js +0 -333
- package/dist/es/config/tables/table-utils.js +0 -302
- package/dist/es2015/config/table-nodes.js +0 -145
- package/dist/es2015/config/tables/CellSelection.d.ts +0 -35
- package/dist/es2015/config/tables/CellSelection.js +0 -256
- package/dist/es2015/config/tables/TableMap.d.ts +0 -35
- package/dist/es2015/config/tables/TableMap.js +0 -329
- package/dist/es2015/config/tables/table-utils.d.ts +0 -77
- package/dist/es2015/config/tables/table-utils.js +0 -299
- package/dist/npm/config/table-nodes.js +0 -157
- package/dist/npm/config/tables/CellSelection.js +0 -270
- package/dist/npm/config/tables/TableMap.js +0 -338
- package/dist/npm/config/tables/table-utils.js +0 -307
|
@@ -1,333 +0,0 @@
|
|
|
1
|
-
/**-----------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright © 2021 Progress Software Corporation. All rights reserved.
|
|
3
|
-
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
|
-
*-------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { isTable, isTableBody, isTableHead, isTableFoot } from '../utils';
|
|
6
|
-
// Because working with row and column-spanning cells is not quite
|
|
7
|
-
// trivial, this code builds up a descriptive structure for a given
|
|
8
|
-
// table node. The structures are cached with the (persistent) table
|
|
9
|
-
// nodes as key, so that they only have to be recomputed when the
|
|
10
|
-
// content of the table changes.
|
|
11
|
-
//
|
|
12
|
-
// This does mean that they have to store table-relative, not
|
|
13
|
-
// document-relative positions. So code that uses them will typically
|
|
14
|
-
// compute the start position of the table and offset positions passed
|
|
15
|
-
// to or gotten from this structure by that amount.
|
|
16
|
-
var readFromCache;
|
|
17
|
-
var addToCache;
|
|
18
|
-
// Prefer using a weak map to cache table maps. Fall back on a
|
|
19
|
-
// fixed-size cache if that's not supported.
|
|
20
|
-
if (typeof WeakMap !== 'undefined') {
|
|
21
|
-
var cache_1 = new WeakMap();
|
|
22
|
-
readFromCache = function (key) { return cache_1.get(key); };
|
|
23
|
-
addToCache = function (key, value) {
|
|
24
|
-
cache_1.set(key, value);
|
|
25
|
-
return value;
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
var cache_2 = [];
|
|
30
|
-
var cacheSize_1 = 10;
|
|
31
|
-
var cachePos_1 = 0;
|
|
32
|
-
readFromCache = function (key) {
|
|
33
|
-
for (var i = 0; i < cache_2.length; i += 2) {
|
|
34
|
-
if (cache_2[i] === key) {
|
|
35
|
-
return cache_2[i + 1];
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
addToCache = function (key, value) {
|
|
40
|
-
if (cachePos_1 === cacheSize_1) {
|
|
41
|
-
cachePos_1 = 0;
|
|
42
|
-
}
|
|
43
|
-
cache_2[cachePos_1++] = key;
|
|
44
|
-
return (cache_2[cachePos_1++] = value);
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
var findWidth = function (table) {
|
|
48
|
-
var width = -1;
|
|
49
|
-
var hasRowSpan = false;
|
|
50
|
-
for (var row = 0; row < table.childCount; row++) {
|
|
51
|
-
var rowNode = table.child(row);
|
|
52
|
-
var rowWidth = 0;
|
|
53
|
-
if (hasRowSpan) {
|
|
54
|
-
for (var j = 0; j < row; j++) {
|
|
55
|
-
var prevRow = table.child(j);
|
|
56
|
-
for (var i = 0; i < prevRow.childCount; i++) {
|
|
57
|
-
var cell = prevRow.child(i);
|
|
58
|
-
if (j + cell.attrs.rowspan > row) {
|
|
59
|
-
rowWidth += cell.attrs.colspan;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
// check if the cell spans accross multiple columns
|
|
65
|
-
for (var i = 0; i < rowNode.childCount; i++) {
|
|
66
|
-
var cell = rowNode.child(i);
|
|
67
|
-
rowWidth += cell.attrs.colspan;
|
|
68
|
-
if (cell.attrs.rowspan > 1) {
|
|
69
|
-
hasRowSpan = true;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
if (width === -1) {
|
|
73
|
-
width = rowWidth;
|
|
74
|
-
}
|
|
75
|
-
else if (width !== rowWidth) {
|
|
76
|
-
width = Math.max(width, rowWidth);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return width;
|
|
80
|
-
};
|
|
81
|
-
var ɵ0 = findWidth;
|
|
82
|
-
var freshColWidth = function (attrs) {
|
|
83
|
-
if (attrs.colwidth) {
|
|
84
|
-
return attrs.colwidth.slice();
|
|
85
|
-
}
|
|
86
|
-
var result = [];
|
|
87
|
-
for (var i = 0; i < attrs.colspan; i++) {
|
|
88
|
-
result.push(0);
|
|
89
|
-
}
|
|
90
|
-
return result;
|
|
91
|
-
};
|
|
92
|
-
var ɵ1 = freshColWidth;
|
|
93
|
-
var findBadColWidths = function (map, colWidths, table) {
|
|
94
|
-
if (!map.problems) {
|
|
95
|
-
map.problems = [];
|
|
96
|
-
}
|
|
97
|
-
for (var i = 0, seen = {}; i < map.map.length; i++) {
|
|
98
|
-
var pos = map.map[i];
|
|
99
|
-
if (seen[pos]) {
|
|
100
|
-
continue;
|
|
101
|
-
}
|
|
102
|
-
seen[pos] = true;
|
|
103
|
-
var node = table.nodeAt(pos);
|
|
104
|
-
var updated = null;
|
|
105
|
-
for (var j = 0; j < node.attrs.colspan; j++) {
|
|
106
|
-
var col = (i + j) % map.width;
|
|
107
|
-
var colWidth = colWidths[col * 2];
|
|
108
|
-
if (colWidth != null && (!node.attrs.colwidth || node.attrs.colwidth[j] !== colWidth)) {
|
|
109
|
-
(updated || (updated = freshColWidth(node.attrs)))[j] = colWidth;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
if (updated) {
|
|
113
|
-
map.problems.unshift({ type: 'colwidth mismatch', pos: pos, colwidth: updated });
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
var ɵ2 = findBadColWidths;
|
|
118
|
-
// Compute a table map.
|
|
119
|
-
var computeMap = function (tableNode) {
|
|
120
|
-
if (!isTable(tableNode) && !isTableBody(tableNode) && !isTableHead(tableNode) && !isTableFoot(tableNode)) {
|
|
121
|
-
throw new RangeError('Not a table node: ' + tableNode.type.name);
|
|
122
|
-
}
|
|
123
|
-
var width = findWidth(tableNode);
|
|
124
|
-
var height = tableNode.childCount;
|
|
125
|
-
var map = [];
|
|
126
|
-
var mapPos = 0;
|
|
127
|
-
var problems = null;
|
|
128
|
-
var colWidths = [];
|
|
129
|
-
for (var i = 0, e = width * height; i < e; i++) {
|
|
130
|
-
map[i] = 0;
|
|
131
|
-
}
|
|
132
|
-
for (var row = 0, pos = 0; row < height; row++) {
|
|
133
|
-
var rowNode = tableNode.child(row);
|
|
134
|
-
pos++;
|
|
135
|
-
for (var i = 0;; i++) {
|
|
136
|
-
while (mapPos < map.length && map[mapPos] !== 0) {
|
|
137
|
-
mapPos++;
|
|
138
|
-
}
|
|
139
|
-
if (i === rowNode.childCount) {
|
|
140
|
-
break;
|
|
141
|
-
}
|
|
142
|
-
var cellNode = rowNode.child(i);
|
|
143
|
-
var _a = cellNode.attrs, colspan = _a.colspan, rowspan = _a.rowspan, colwidth = _a.colwidth;
|
|
144
|
-
for (var h = 0; h < rowspan; h++) {
|
|
145
|
-
if (h + row >= height) {
|
|
146
|
-
(problems || (problems = [])).push({ type: 'overlong_rowspan', pos: pos, n: rowspan - h });
|
|
147
|
-
break;
|
|
148
|
-
}
|
|
149
|
-
var start = mapPos + h * width;
|
|
150
|
-
for (var w = 0; w < colspan; w++) {
|
|
151
|
-
if (map[start + w] === 0) {
|
|
152
|
-
map[start + w] = pos;
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
(problems || (problems = [])).push({ type: 'collision', row: row, pos: pos, n: colspan - w });
|
|
156
|
-
}
|
|
157
|
-
var colW = colwidth && colwidth[w];
|
|
158
|
-
if (colW) {
|
|
159
|
-
var widthIndex = ((start + w) % width) * 2, prev = colWidths[widthIndex];
|
|
160
|
-
if (prev == null || (prev !== colW && colWidths[widthIndex + 1] === 1)) {
|
|
161
|
-
colWidths[widthIndex] = colW;
|
|
162
|
-
colWidths[widthIndex + 1] = 1;
|
|
163
|
-
}
|
|
164
|
-
else if (prev === colW) {
|
|
165
|
-
colWidths[widthIndex + 1]++;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
mapPos += colspan;
|
|
171
|
-
pos += cellNode.nodeSize;
|
|
172
|
-
}
|
|
173
|
-
var expectedPos = (row + 1) * width;
|
|
174
|
-
var missing = 0;
|
|
175
|
-
while (mapPos < expectedPos) {
|
|
176
|
-
if (map[mapPos++] === 0) {
|
|
177
|
-
missing++;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
if (missing) {
|
|
181
|
-
(problems || (problems = [])).push({ type: 'missing', row: row, n: missing });
|
|
182
|
-
}
|
|
183
|
-
pos++;
|
|
184
|
-
}
|
|
185
|
-
var tableMap = new TableMap(width, height, map, problems);
|
|
186
|
-
var badWidths = false;
|
|
187
|
-
// For columns that have defined widths, but whose widths disagree
|
|
188
|
-
// between rows, fix up the cells whose width doesn't match the
|
|
189
|
-
// computed one.
|
|
190
|
-
for (var i = 0; !badWidths && i < colWidths.length; i += 2) {
|
|
191
|
-
if (colWidths[i] != null && colWidths[i + 1] < height) {
|
|
192
|
-
badWidths = true;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
if (badWidths) {
|
|
196
|
-
findBadColWidths(tableMap, colWidths, tableNode);
|
|
197
|
-
}
|
|
198
|
-
return tableMap;
|
|
199
|
-
};
|
|
200
|
-
var ɵ3 = computeMap;
|
|
201
|
-
/**
|
|
202
|
-
* @hidden
|
|
203
|
-
*/
|
|
204
|
-
var Rect = /** @class */ (function () {
|
|
205
|
-
function Rect(left, top, right, bottom) {
|
|
206
|
-
this.left = left;
|
|
207
|
-
this.top = top;
|
|
208
|
-
this.right = right;
|
|
209
|
-
this.bottom = bottom;
|
|
210
|
-
}
|
|
211
|
-
return Rect;
|
|
212
|
-
}());
|
|
213
|
-
export { Rect };
|
|
214
|
-
/**
|
|
215
|
-
* @hidden
|
|
216
|
-
*/
|
|
217
|
-
var TableMap = /** @class */ (function () {
|
|
218
|
-
function TableMap(width, height, map, problems) {
|
|
219
|
-
// :: number The width of the table
|
|
220
|
-
this.width = width;
|
|
221
|
-
// :: number The table's height
|
|
222
|
-
this.height = height;
|
|
223
|
-
// :: [number] A width * height array with the start position of
|
|
224
|
-
// the cell covering that part of the table in each slot
|
|
225
|
-
this.map = map;
|
|
226
|
-
// An optional array of problems (cell overlap or non-rectangular
|
|
227
|
-
// shape) for the table, used by the table normalizer.
|
|
228
|
-
this.problems = problems;
|
|
229
|
-
}
|
|
230
|
-
// :: (Node) → TableMap
|
|
231
|
-
// Find the table map for the given table node.
|
|
232
|
-
TableMap.get = function (table) {
|
|
233
|
-
return readFromCache(table) || addToCache(table, computeMap(table));
|
|
234
|
-
};
|
|
235
|
-
// :: (number) → Rect
|
|
236
|
-
// Find the dimensions of the cell at the given position.
|
|
237
|
-
TableMap.prototype.findCell = function (pos) {
|
|
238
|
-
for (var i = 0; i < this.map.length; i++) {
|
|
239
|
-
var curPos = this.map[i];
|
|
240
|
-
if (curPos !== pos) {
|
|
241
|
-
continue;
|
|
242
|
-
}
|
|
243
|
-
var left = i % this.width;
|
|
244
|
-
var top_1 = Math.floor(i / this.width);
|
|
245
|
-
var right = left + 1;
|
|
246
|
-
var bottom = top_1 + 1;
|
|
247
|
-
for (var j = 1; right < this.width && this.map[i + j] === curPos; j++) {
|
|
248
|
-
right++;
|
|
249
|
-
}
|
|
250
|
-
for (var j = 1; bottom < this.height && this.map[i + this.width * j] === curPos; j++) {
|
|
251
|
-
bottom++;
|
|
252
|
-
}
|
|
253
|
-
return new Rect(left, top_1, right, bottom);
|
|
254
|
-
}
|
|
255
|
-
throw new RangeError('No cell with offset ' + pos + ' found');
|
|
256
|
-
};
|
|
257
|
-
// :: (number) → number
|
|
258
|
-
// Find the left side of the cell at the given position.
|
|
259
|
-
TableMap.prototype.colCount = function (pos) {
|
|
260
|
-
for (var i = 0; i < this.map.length; i++) {
|
|
261
|
-
if (this.map[i] === pos) {
|
|
262
|
-
return i % this.width;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
throw new RangeError('No cell with offset ' + pos + ' found');
|
|
266
|
-
};
|
|
267
|
-
// :: (number, string, number) → ?number
|
|
268
|
-
// Find the next cell in the given direction, starting from the cell
|
|
269
|
-
// at `pos`, if any.
|
|
270
|
-
TableMap.prototype.nextCell = function (pos, axis, dir) {
|
|
271
|
-
var _a = this.findCell(pos), left = _a.left, right = _a.right, top = _a.top, bottom = _a.bottom;
|
|
272
|
-
if (axis === 'horiz') {
|
|
273
|
-
if (dir < 0 ? left === 0 : right === this.width) {
|
|
274
|
-
return null;
|
|
275
|
-
}
|
|
276
|
-
return this.map[top * this.width + (dir < 0 ? left - 1 : right)];
|
|
277
|
-
}
|
|
278
|
-
else {
|
|
279
|
-
if (dir < 0 ? top === 0 : bottom === this.height) {
|
|
280
|
-
return null;
|
|
281
|
-
}
|
|
282
|
-
return this.map[left + this.width * (dir < 0 ? top - 1 : bottom)];
|
|
283
|
-
}
|
|
284
|
-
};
|
|
285
|
-
// :: (number, number) → Rect
|
|
286
|
-
// Get the rectangle spanning the two given cells.
|
|
287
|
-
TableMap.prototype.rectBetween = function (a, b) {
|
|
288
|
-
var _a = this.findCell(a), leftA = _a.left, rightA = _a.right, topA = _a.top, bottomA = _a.bottom;
|
|
289
|
-
var _b = this.findCell(b), leftB = _b.left, rightB = _b.right, topB = _b.top, bottomB = _b.bottom;
|
|
290
|
-
return new Rect(Math.min(leftA, leftB), Math.min(topA, topB), Math.max(rightA, rightB), Math.max(bottomA, bottomB));
|
|
291
|
-
};
|
|
292
|
-
// :: (Rect) → [number]
|
|
293
|
-
// Return the position of all cells that have the top left corner in
|
|
294
|
-
// the given rectangle.
|
|
295
|
-
TableMap.prototype.cellsInRect = function (rect) {
|
|
296
|
-
var result = [];
|
|
297
|
-
var seen = {};
|
|
298
|
-
for (var row = rect.top; row < rect.bottom; row++) {
|
|
299
|
-
for (var col = rect.left; col < rect.right; col++) {
|
|
300
|
-
var index = row * this.width + col, pos = this.map[index];
|
|
301
|
-
if (seen[pos]) {
|
|
302
|
-
continue;
|
|
303
|
-
}
|
|
304
|
-
seen[pos] = true;
|
|
305
|
-
if ((col !== rect.left || !col || this.map[index - 1] !== pos) &&
|
|
306
|
-
(row !== rect.top || !row || this.map[index - this.width] !== pos)) {
|
|
307
|
-
result.push(pos);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
return result;
|
|
312
|
-
};
|
|
313
|
-
// :: (number, number, Node) → number
|
|
314
|
-
// Return the position at which the cell at the given row and column
|
|
315
|
-
// starts, or would start, if a cell started there.
|
|
316
|
-
TableMap.prototype.positionAt = function (row, col, table) {
|
|
317
|
-
for (var i = 0, rowStart = 0;; i++) {
|
|
318
|
-
var rowEnd = rowStart + table.child(i).nodeSize;
|
|
319
|
-
if (i === row) {
|
|
320
|
-
var index = col + row * this.width, rowEndIndex = (row + 1) * this.width;
|
|
321
|
-
// Skip past cells from previous rows (via rowspan)
|
|
322
|
-
while (index < rowEndIndex && this.map[index] < rowStart) {
|
|
323
|
-
index++;
|
|
324
|
-
}
|
|
325
|
-
return index === rowEndIndex ? rowEnd - 1 : this.map[index];
|
|
326
|
-
}
|
|
327
|
-
rowStart = rowEnd;
|
|
328
|
-
}
|
|
329
|
-
};
|
|
330
|
-
return TableMap;
|
|
331
|
-
}());
|
|
332
|
-
export { TableMap };
|
|
333
|
-
export { ɵ0, ɵ1, ɵ2, ɵ3 };
|
|
@@ -1,302 +0,0 @@
|
|
|
1
|
-
/**-----------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright © 2021 Progress Software Corporation. All rights reserved.
|
|
3
|
-
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
|
-
*-------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { NodeSelection } from '@progress/kendo-editor-common';
|
|
6
|
-
import { isTableRow, isTableCell } from '../utils';
|
|
7
|
-
import { TableMap } from './TableMap';
|
|
8
|
-
import { CellSelection } from './CellSelection';
|
|
9
|
-
/**
|
|
10
|
-
* @hidden
|
|
11
|
-
*/
|
|
12
|
-
export var findParentNodeClosestToPos = function ($pos, predicate) {
|
|
13
|
-
for (var i = $pos.depth; i > 0; i--) {
|
|
14
|
-
var node = $pos.node(i);
|
|
15
|
-
if (predicate(node)) {
|
|
16
|
-
return {
|
|
17
|
-
start: $pos.start(i),
|
|
18
|
-
pos: i > 0 ? $pos.before(i) : 0,
|
|
19
|
-
depth: i,
|
|
20
|
-
node: node
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
/**
|
|
26
|
-
* @hidden
|
|
27
|
-
*/
|
|
28
|
-
export var createTable = function (nodes, rows, columns) {
|
|
29
|
-
var table = nodes.table, table_body = nodes.table_body, table_row = nodes.table_row, table_cell = nodes.table_cell;
|
|
30
|
-
var tableRows = [];
|
|
31
|
-
var cells;
|
|
32
|
-
for (var r = 0; r < rows + 1; r++) {
|
|
33
|
-
cells = [];
|
|
34
|
-
for (var c = 0; c < columns + 1; c++) {
|
|
35
|
-
cells.push(table_cell.createAndFill());
|
|
36
|
-
}
|
|
37
|
-
tableRows.push(table_row.createAndFill(undefined, cells));
|
|
38
|
-
}
|
|
39
|
-
var body = table_body.createAndFill(undefined, tableRows);
|
|
40
|
-
return table.createAndFill(undefined, body);
|
|
41
|
-
};
|
|
42
|
-
/**
|
|
43
|
-
* @hidden
|
|
44
|
-
*/
|
|
45
|
-
export var isInTable = function (state) {
|
|
46
|
-
var $head = state.selection.$head;
|
|
47
|
-
for (var d = $head.depth; d > 0; d--) {
|
|
48
|
-
if (isTableRow($head.node(d))) {
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return false;
|
|
53
|
-
};
|
|
54
|
-
/**
|
|
55
|
-
* @hidden
|
|
56
|
-
*/
|
|
57
|
-
export var setAttr = function (attrs, name, value) {
|
|
58
|
-
var result = {};
|
|
59
|
-
// tslint:disable-next-line
|
|
60
|
-
for (var prop in attrs) {
|
|
61
|
-
result[prop] = attrs[prop];
|
|
62
|
-
}
|
|
63
|
-
result[name] = value;
|
|
64
|
-
return result;
|
|
65
|
-
};
|
|
66
|
-
var cellNear = function ($pos) {
|
|
67
|
-
for (var after = $pos.nodeAfter, pos = $pos.pos; after; after = after.firstChild, pos++) {
|
|
68
|
-
var role = after.type.spec.tableRole;
|
|
69
|
-
if (role === 'cell' || role === 'header_cell') {
|
|
70
|
-
return $pos.doc.resolve(pos);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
for (var before = $pos.nodeBefore, pos = $pos.pos; before; before = before.lastChild, pos--) {
|
|
74
|
-
var role = before.type.spec.tableRole;
|
|
75
|
-
if (role === 'cell' || role === 'header_cell') {
|
|
76
|
-
return $pos.doc.resolve(pos - before.nodeSize);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
var ɵ0 = cellNear;
|
|
81
|
-
var cellAround = function ($pos) {
|
|
82
|
-
for (var d = $pos.depth - 1; d > 0; d--) {
|
|
83
|
-
if (isTableRow($pos.node(d))) {
|
|
84
|
-
return $pos.node(0).resolve($pos.before(d + 1));
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
return null;
|
|
88
|
-
};
|
|
89
|
-
var ɵ1 = cellAround;
|
|
90
|
-
var selectionCell = function (sel) {
|
|
91
|
-
if (sel instanceof CellSelection && sel.$anchorCell) {
|
|
92
|
-
return sel.$anchorCell.pos > sel.$headCell.pos ? sel.$anchorCell : sel.$headCell;
|
|
93
|
-
}
|
|
94
|
-
else if (sel instanceof NodeSelection && sel.node && isTableCell(sel.node)) {
|
|
95
|
-
return sel.$anchor;
|
|
96
|
-
}
|
|
97
|
-
return cellAround(sel.$head) || cellNear(sel.$head);
|
|
98
|
-
};
|
|
99
|
-
var ɵ2 = selectionCell;
|
|
100
|
-
/**
|
|
101
|
-
* @hidden
|
|
102
|
-
*/
|
|
103
|
-
// Helper to get the selected rectangle in a table, if any. Adds table
|
|
104
|
-
// map, table node, and table start offset to the object for
|
|
105
|
-
// convenience.
|
|
106
|
-
export var selectedRect = function (sel) {
|
|
107
|
-
// create arr of rect for each table section
|
|
108
|
-
// there has to be a rect for thead, tbody and tfoot(if each exists)
|
|
109
|
-
// and NOT for colgroups
|
|
110
|
-
var $pos = selectionCell(sel);
|
|
111
|
-
var table = $pos.node(-1);
|
|
112
|
-
var tableStart = $pos.start(-1);
|
|
113
|
-
var map = TableMap.get(table);
|
|
114
|
-
var rect = sel instanceof CellSelection
|
|
115
|
-
? map.rectBetween(sel.$anchorCell.pos - tableStart, sel.$headCell.pos - tableStart)
|
|
116
|
-
: map.findCell($pos.pos - tableStart);
|
|
117
|
-
rect.tableStart = tableStart;
|
|
118
|
-
rect.map = map;
|
|
119
|
-
rect.table = table;
|
|
120
|
-
return rect;
|
|
121
|
-
};
|
|
122
|
-
/**
|
|
123
|
-
* @hidden
|
|
124
|
-
*/
|
|
125
|
-
// this has to be removed since the schema should not have roles inside NodeSpec.
|
|
126
|
-
export var tableNodeTypes = function (schema) {
|
|
127
|
-
var result = schema.cached.tableNodeTypes;
|
|
128
|
-
if (!result) {
|
|
129
|
-
result = schema.cached.tableNodeTypes = {};
|
|
130
|
-
// tslint:disable-next-line
|
|
131
|
-
for (var name_1 in schema.nodes) {
|
|
132
|
-
var type = schema.nodes[name_1];
|
|
133
|
-
var role = type.spec.tableRole;
|
|
134
|
-
if (role) {
|
|
135
|
-
result[role] = type;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return result;
|
|
140
|
-
};
|
|
141
|
-
/**
|
|
142
|
-
* @hidden
|
|
143
|
-
*/
|
|
144
|
-
export var rowIsHeader = function (map, table, row) {
|
|
145
|
-
var headerCell = tableNodeTypes(table.type.schema).header_cell;
|
|
146
|
-
for (var col = 0; col < map.width; col++) {
|
|
147
|
-
if (table.nodeAt(map.map[col + row * map.width]).type !== headerCell) {
|
|
148
|
-
return false;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
return true;
|
|
152
|
-
};
|
|
153
|
-
/**
|
|
154
|
-
* @hidden
|
|
155
|
-
*/
|
|
156
|
-
export var addColSpan = function (attrs, pos, n) {
|
|
157
|
-
if (n === void 0) { n = 1; }
|
|
158
|
-
var result = setAttr(attrs, 'colspan', attrs.colspan + n);
|
|
159
|
-
if (result.colwidth) {
|
|
160
|
-
result.colwidth = result.colwidth.slice();
|
|
161
|
-
for (var i = 0; i < n; i++) {
|
|
162
|
-
result.colwidth.splice(pos, 0, 0);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
return result;
|
|
166
|
-
};
|
|
167
|
-
/**
|
|
168
|
-
* @hidden
|
|
169
|
-
*/
|
|
170
|
-
export var removeColSpan = function (attrs, pos, n) {
|
|
171
|
-
if (n === void 0) { n = 1; }
|
|
172
|
-
var result = setAttr(attrs, 'colspan', attrs.colspan - n);
|
|
173
|
-
if (result.colwidth) {
|
|
174
|
-
result.colwidth = result.colwidth.slice();
|
|
175
|
-
result.colwidth.splice(pos, n);
|
|
176
|
-
if (!result.colwidth.some(function (w) { return w > 0; })) {
|
|
177
|
-
result.colwidth = null;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
return result;
|
|
181
|
-
};
|
|
182
|
-
/**
|
|
183
|
-
* @hidden
|
|
184
|
-
*/
|
|
185
|
-
export var isCellEmpty = function (cell) {
|
|
186
|
-
var c = cell.content;
|
|
187
|
-
return c.childCount === 1 && c.firstChild.isTextblock && c.firstChild.childCount === 0;
|
|
188
|
-
};
|
|
189
|
-
var cellWrapping = function ($pos) {
|
|
190
|
-
for (var d = $pos.depth; d > 0; d--) {
|
|
191
|
-
// Sometimes the cell can be in the same depth.
|
|
192
|
-
var role = $pos.node(d).type.spec.tableRole;
|
|
193
|
-
if (role === 'cell' || role === 'header_cell') {
|
|
194
|
-
return $pos.node(d);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
return null;
|
|
198
|
-
};
|
|
199
|
-
var ɵ3 = cellWrapping;
|
|
200
|
-
/**
|
|
201
|
-
* @hidden
|
|
202
|
-
*/
|
|
203
|
-
// Split a selected cell, whose rowpan or colspan is greater than one,
|
|
204
|
-
// into smaller cells with the cell type (th, td) returned by getType function.
|
|
205
|
-
export var splitCellWithType = function (getCellType) {
|
|
206
|
-
return function (state, dispatch) {
|
|
207
|
-
var sel = state.selection;
|
|
208
|
-
var cellNode;
|
|
209
|
-
var cellPos;
|
|
210
|
-
if (!(sel instanceof CellSelection)) {
|
|
211
|
-
cellNode = cellWrapping(sel.$from);
|
|
212
|
-
if (!cellNode) {
|
|
213
|
-
return false;
|
|
214
|
-
}
|
|
215
|
-
cellPos = cellAround(sel.$from).pos;
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
if (sel.$anchorCell.pos !== sel.$headCell.pos) {
|
|
219
|
-
return false;
|
|
220
|
-
}
|
|
221
|
-
cellNode = sel.$anchorCell.nodeAfter;
|
|
222
|
-
cellPos = sel.$anchorCell.pos;
|
|
223
|
-
}
|
|
224
|
-
if (cellNode.attrs.colspan === 1 && cellNode.attrs.rowspan === 1) {
|
|
225
|
-
return false;
|
|
226
|
-
}
|
|
227
|
-
if (dispatch) {
|
|
228
|
-
var baseAttrs = cellNode.attrs;
|
|
229
|
-
var attrs = [];
|
|
230
|
-
var colwidth = baseAttrs.colwidth;
|
|
231
|
-
if (baseAttrs.rowspan > 1) {
|
|
232
|
-
baseAttrs = setAttr(baseAttrs, 'rowspan', 1);
|
|
233
|
-
}
|
|
234
|
-
if (baseAttrs.colspan > 1) {
|
|
235
|
-
baseAttrs = setAttr(baseAttrs, 'colspan', 1);
|
|
236
|
-
}
|
|
237
|
-
var rect = selectedRect(state);
|
|
238
|
-
var tr = state.tr;
|
|
239
|
-
for (var i = 0; i < rect.right - rect.left; i++) {
|
|
240
|
-
attrs.push(colwidth ? setAttr(baseAttrs, 'colwidth', colwidth && colwidth[i] ? [colwidth[i]] : null) : baseAttrs);
|
|
241
|
-
}
|
|
242
|
-
var lastCell = void 0;
|
|
243
|
-
for (var row = rect.top; row < rect.bottom; row++) {
|
|
244
|
-
var pos = rect.map.positionAt(row, rect.left, rect.table);
|
|
245
|
-
if (row === rect.top) {
|
|
246
|
-
pos += cellNode.nodeSize;
|
|
247
|
-
}
|
|
248
|
-
for (var col = rect.left, i = 0; col < rect.right; col++, i++) {
|
|
249
|
-
if (col === rect.left && row === rect.top) {
|
|
250
|
-
continue;
|
|
251
|
-
}
|
|
252
|
-
tr.insert((lastCell = tr.mapping.map(pos + rect.tableStart, 1)), getCellType({ node: cellNode, row: row, col: col }).createAndFill(attrs[i]));
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
tr.setNodeMarkup(cellPos, getCellType({ node: cellNode, row: rect.top, col: rect.left }), attrs[0]);
|
|
256
|
-
if (sel instanceof CellSelection) {
|
|
257
|
-
tr.setSelection(new CellSelection(tr.doc.resolve(sel.$anchorCell.pos), lastCell && tr.doc.resolve(lastCell)));
|
|
258
|
-
}
|
|
259
|
-
dispatch(tr);
|
|
260
|
-
}
|
|
261
|
-
return true;
|
|
262
|
-
};
|
|
263
|
-
};
|
|
264
|
-
/**
|
|
265
|
-
* @hidden
|
|
266
|
-
*/
|
|
267
|
-
export var pointsAtCell = function ($pos) {
|
|
268
|
-
return isTableRow($pos.parent) && $pos.nodeAfter;
|
|
269
|
-
};
|
|
270
|
-
/**
|
|
271
|
-
* @hidden
|
|
272
|
-
*/
|
|
273
|
-
export var inSameTable = function ($a, $b) {
|
|
274
|
-
return $a.depth === $b.depth && $a.pos >= $b.start(-1) && $a.pos <= $b.end(-1);
|
|
275
|
-
};
|
|
276
|
-
/**
|
|
277
|
-
* @hidden
|
|
278
|
-
*/
|
|
279
|
-
export var cellsOverlapRectangle = function (_a, rect) {
|
|
280
|
-
var width = _a.width, height = _a.height, map = _a.map;
|
|
281
|
-
var indexTop = rect.top * width + rect.left;
|
|
282
|
-
var indexLeft = indexTop;
|
|
283
|
-
var indexBottom = (rect.bottom - 1) * width + rect.left;
|
|
284
|
-
var indexRight = indexTop + (rect.right - rect.left - 1);
|
|
285
|
-
for (var i = rect.top; i < rect.bottom; i++) {
|
|
286
|
-
if ((rect.left > 0 && map[indexLeft] === map[indexLeft - 1]) || (rect.right < width && map[indexRight] === map[indexRight + 1])) {
|
|
287
|
-
return true;
|
|
288
|
-
}
|
|
289
|
-
indexLeft += width;
|
|
290
|
-
indexRight += width;
|
|
291
|
-
}
|
|
292
|
-
for (var i = rect.left; i < rect.right; i++) {
|
|
293
|
-
if ((rect.top > 0 && map[indexTop] === map[indexTop - width]) ||
|
|
294
|
-
(rect.bottom < height && map[indexBottom] === map[indexBottom + width])) {
|
|
295
|
-
return true;
|
|
296
|
-
}
|
|
297
|
-
indexTop++;
|
|
298
|
-
indexBottom++;
|
|
299
|
-
}
|
|
300
|
-
return false;
|
|
301
|
-
};
|
|
302
|
-
export { ɵ0, ɵ1, ɵ2, ɵ3 };
|