@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.
Files changed (104) hide show
  1. package/LICENSE.md +1 -1
  2. package/NOTICE.txt +119 -79
  3. package/README.md +1 -1
  4. package/dist/cdn/js/kendo-angular-editor.js +2 -2
  5. package/dist/cdn/main.js +1 -1
  6. package/dist/es/common/error-messages.js +4 -3
  7. package/dist/es/config/command-icons.js +1 -0
  8. package/dist/es/config/commands.js +18 -17
  9. package/dist/es/config/schema.js +2 -4
  10. package/dist/es/config/table-commands.js +1 -363
  11. package/dist/es/dialogs/colorpicker-dialog.component.js +1 -1
  12. package/dist/es/dialogs/file-link-dialog.component.js +1 -1
  13. package/dist/es/dialogs/image-dialog.component.js +1 -1
  14. package/dist/es/editor-toolbar-state.js +12 -2
  15. package/dist/es/editor.component.js +103 -75
  16. package/dist/es/editor.module.js +6 -3
  17. package/dist/es/index.js +2 -0
  18. package/dist/es/localization/messages.js +4 -0
  19. package/dist/es/main.js +1 -0
  20. package/dist/es/package-metadata.js +1 -1
  21. package/dist/{es2015/config/table-nodes.d.ts → es/preventable-events/paste-event-data.js} +0 -5
  22. package/dist/es/preventable-events/paste-event.js +25 -0
  23. package/dist/es/tools/blockquote/editor-blockquote-button.directive.js +48 -0
  24. package/dist/es/tools/colorpicker/editor-colorpicker.component.js +24 -7
  25. package/dist/es/tools/format/editor-format-dropdownlist.component.js +1 -1
  26. package/dist/es/tools/format/editor-format.component.js +0 -1
  27. package/dist/es/tools/tables/popup-table-grid.component.js +1 -1
  28. package/dist/es2015/common/commands.d.ts +1 -1
  29. package/dist/es2015/common/error-messages.js +4 -3
  30. package/dist/es2015/common/format-item.interface.d.ts +1 -1
  31. package/dist/es2015/common/paste-cleanup-settings.d.ts +14 -0
  32. package/dist/es2015/config/command-icons.js +1 -0
  33. package/dist/es2015/config/commands.js +18 -17
  34. package/dist/es2015/config/schema.d.ts +1 -1
  35. package/dist/es2015/config/schema.js +2 -3
  36. package/dist/es2015/config/table-commands.d.ts +0 -36
  37. package/dist/es2015/config/table-commands.js +1 -357
  38. package/dist/es2015/dialogs/colorpicker-dialog.component.js +1 -1
  39. package/dist/es2015/dialogs/file-link-dialog.component.js +4 -4
  40. package/dist/es2015/dialogs/image-dialog.component.js +4 -4
  41. package/dist/es2015/editor-toolbar-state.js +12 -2
  42. package/dist/es2015/editor.component.d.ts +16 -11
  43. package/dist/es2015/editor.component.js +105 -75
  44. package/dist/es2015/editor.module.js +6 -3
  45. package/dist/es2015/index.d.ts +2 -0
  46. package/dist/es2015/index.js +2 -0
  47. package/dist/es2015/index.metadata.json +1 -1
  48. package/dist/es2015/localization/messages.d.ts +4 -0
  49. package/dist/es2015/localization/messages.js +4 -0
  50. package/dist/es2015/main.d.ts +2 -0
  51. package/dist/es2015/main.js +1 -0
  52. package/dist/es2015/package-metadata.js +1 -1
  53. package/dist/es2015/preventable-events/paste-event-data.d.ts +21 -0
  54. package/dist/es2015/preventable-events/paste-event-data.js +4 -0
  55. package/dist/es2015/preventable-events/paste-event.d.ts +27 -0
  56. package/dist/es2015/preventable-events/paste-event.js +20 -0
  57. package/dist/es2015/tools/blockquote/editor-blockquote-button.directive.d.ts +30 -0
  58. package/dist/es2015/tools/blockquote/editor-blockquote-button.directive.js +45 -0
  59. package/dist/es2015/tools/colorpicker/editor-colorpicker.component.d.ts +8 -2
  60. package/dist/es2015/tools/colorpicker/editor-colorpicker.component.js +20 -7
  61. package/dist/es2015/tools/format/editor-format-dropdownlist.component.js +0 -4
  62. package/dist/es2015/tools/format/editor-format.component.js +0 -1
  63. package/dist/es2015/tools/tables/popup-table-grid.component.js +2 -2
  64. package/dist/fesm2015/index.js +354 -1624
  65. package/dist/fesm5/index.js +365 -1649
  66. package/dist/npm/common/error-messages.js +4 -2
  67. package/dist/npm/config/command-icons.js +1 -0
  68. package/dist/npm/config/commands.js +16 -14
  69. package/dist/npm/config/schema.js +2 -4
  70. package/dist/npm/config/table-commands.js +1 -368
  71. package/dist/npm/dialogs/colorpicker-dialog.component.js +1 -1
  72. package/dist/npm/dialogs/file-link-dialog.component.js +1 -1
  73. package/dist/npm/dialogs/image-dialog.component.js +1 -1
  74. package/dist/npm/editor-toolbar-state.js +11 -1
  75. package/dist/npm/editor.component.js +99 -71
  76. package/dist/npm/editor.module.js +7 -4
  77. package/dist/npm/index.js +5 -0
  78. package/dist/npm/localization/messages.js +4 -0
  79. package/dist/npm/main.js +2 -0
  80. package/dist/npm/package-metadata.js +1 -1
  81. package/dist/npm/preventable-events/paste-event-data.js +6 -0
  82. package/dist/npm/preventable-events/paste-event.js +27 -0
  83. package/dist/npm/tools/blockquote/editor-blockquote-button.directive.js +50 -0
  84. package/dist/npm/tools/colorpicker/editor-colorpicker.component.js +24 -7
  85. package/dist/npm/tools/format/editor-format-dropdownlist.component.js +1 -1
  86. package/dist/npm/tools/format/editor-format.component.js +0 -1
  87. package/dist/npm/tools/tables/popup-table-grid.component.js +1 -1
  88. package/dist/systemjs/kendo-angular-editor.js +1 -1
  89. package/package.json +18 -18
  90. package/dist/es/config/table-nodes.js +0 -146
  91. package/dist/es/config/tables/CellSelection.js +0 -268
  92. package/dist/es/config/tables/TableMap.js +0 -333
  93. package/dist/es/config/tables/table-utils.js +0 -302
  94. package/dist/es2015/config/table-nodes.js +0 -145
  95. package/dist/es2015/config/tables/CellSelection.d.ts +0 -35
  96. package/dist/es2015/config/tables/CellSelection.js +0 -256
  97. package/dist/es2015/config/tables/TableMap.d.ts +0 -35
  98. package/dist/es2015/config/tables/TableMap.js +0 -329
  99. package/dist/es2015/config/tables/table-utils.d.ts +0 -77
  100. package/dist/es2015/config/tables/table-utils.js +0 -299
  101. package/dist/npm/config/table-nodes.js +0 -157
  102. package/dist/npm/config/tables/CellSelection.js +0 -270
  103. package/dist/npm/config/tables/TableMap.js +0 -338
  104. 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 };