@opentiny/fluent-editor 3.20.0 → 3.20.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +99 -99
- package/es/attributors/index.es.js +1 -1
- package/es/attributors/line-height.es.js.map +1 -1
- package/es/config/base64-image.es.js.map +1 -1
- package/es/config/editor.config.es.js.map +1 -1
- package/es/config/editor.utils.es.js +12 -12
- package/es/config/editor.utils.es.js.map +1 -1
- package/es/config/i18n/en-us.es.js.map +1 -1
- package/es/config/i18n/zh-cn.es.js.map +1 -1
- package/es/config/icons.config.es.js.map +1 -1
- package/es/config/types/index.es.js +2 -2
- package/es/config.es.js +1 -1
- package/es/config.es.js.map +1 -1
- package/es/counter/index.es.js.map +1 -1
- package/es/custom-clipboard.es.js +14 -14
- package/es/custom-clipboard.es.js.map +1 -1
- package/es/custom-image/BlotFormatter.es.js +1 -1
- package/es/custom-image/BlotFormatter.es.js.map +1 -1
- package/es/custom-image/Options.es.js.map +1 -1
- package/es/custom-image/actions/Action.es.js.map +1 -1
- package/es/custom-image/actions/CustomResizeAction.es.js +6 -4
- package/es/custom-image/actions/CustomResizeAction.es.js.map +1 -1
- package/es/custom-image/actions/DeleteAction.es.js.map +1 -1
- package/es/custom-image/image.es.js +3 -3
- package/es/custom-image/image.es.js.map +1 -1
- package/es/custom-image/specs/BlotSpec.es.js.map +1 -1
- package/es/custom-image/specs/CustomImageSpec.es.js.map +1 -1
- package/es/custom-image/specs/ImageSpec.es.js.map +1 -1
- package/es/custom-uploader.es.js +4 -7
- package/es/custom-uploader.es.js.map +1 -1
- package/es/emoji/emoji-list/people.es.js.map +1 -1
- package/es/emoji/emoji-list.es.js.map +1 -1
- package/es/emoji/emoji-map.es.js.map +1 -1
- package/es/emoji/formats/emoji-blot.es.js +2 -2
- package/es/emoji/formats/emoji-blot.es.js.map +1 -1
- package/es/emoji/index.es.js.map +1 -1
- package/es/emoji/modules/emoji.es.js +7 -7
- package/es/emoji/modules/emoji.es.js.map +1 -1
- package/es/emoji/modules/toolbar-emoji.es.js +15 -15
- package/es/emoji/modules/toolbar-emoji.es.js.map +1 -1
- package/es/emoji/utils.es.js.map +1 -1
- package/es/file/formats/file.es.js.map +1 -1
- package/es/file/index.es.js.map +1 -1
- package/es/file/modules/file-bar.es.js +3 -3
- package/es/file/modules/file-bar.es.js.map +1 -1
- package/es/fluent-editor.es.js +3 -3
- package/es/fluent-editor.es.js.map +1 -1
- package/es/format-painter/index.es.js.map +1 -1
- package/es/global-link/constants.es.js.map +1 -1
- package/es/global-link/formats/customer-widget-link.es.js.map +1 -1
- package/es/global-link/formats/doc-link.es.js.map +1 -1
- package/es/global-link/formats/wiki-link.es.js.map +1 -1
- package/es/global-link/formats/work-item-link.es.js.map +1 -1
- package/es/global-link/index.es.js +1 -1
- package/es/global-link/index.es.js.map +1 -1
- package/es/global-link/utils/createTable.es.js.map +1 -1
- package/es/link/formats/link.es.js +1 -1
- package/es/link/formats/link.es.js.map +1 -1
- package/es/link/index.es.js.map +1 -1
- package/es/link/modules/tooltip.es.js +3 -3
- package/es/link/modules/tooltip.es.js.map +1 -1
- package/es/mention/Mention.es.js +7 -12
- package/es/mention/Mention.es.js.map +1 -1
- package/es/mention/MentionLink.es.js.map +1 -1
- package/es/mention/constants.es.js.map +1 -1
- package/es/quick-menu/index.es.js +1 -1
- package/es/quick-menu/index.es.js.map +1 -1
- package/es/screenshot/index.es.js +42 -7
- package/es/screenshot/index.es.js.map +1 -1
- package/es/soft-break/index.es.js.map +1 -1
- package/es/strike/index.es.js.map +1 -1
- package/es/syntax/index.es.js.map +1 -1
- package/es/table/better-table.es.js +4 -5
- package/es/table/better-table.es.js.map +1 -1
- package/es/table/formats/header.es.js.map +1 -1
- package/es/table/formats/list.es.js +3 -3
- package/es/table/formats/list.es.js.map +1 -1
- package/es/table/formats/table.es.js +26 -27
- package/es/table/formats/table.es.js.map +1 -1
- package/es/table/modules/table-column-tool.es.js +8 -8
- package/es/table/modules/table-column-tool.es.js.map +1 -1
- package/es/table/modules/table-operation-menu.es.js +7 -8
- package/es/table/modules/table-operation-menu.es.js.map +1 -1
- package/es/table/modules/table-scroll-bar.es.js +1 -1
- package/es/table/modules/table-scroll-bar.es.js.map +1 -1
- package/es/table/modules/table-selection.es.js +0 -1
- package/es/table/modules/table-selection.es.js.map +1 -1
- package/es/table/table-config.es.js.map +1 -1
- package/es/table/utils/index.es.js.map +1 -1
- package/es/table/utils/node-matchers.es.js +14 -14
- package/es/table/utils/node-matchers.es.js.map +1 -1
- package/es/toolbar/better-picker.es.js.map +1 -1
- package/es/toolbar/index.es.js +1 -1
- package/es/toolbar/index.es.js.map +1 -1
- package/es/utils/debounce.es.js.map +1 -1
- package/es/utils/image.es.js +26 -0
- package/es/utils/image.es.js.map +1 -0
- package/es/utils/method.es.js +2 -2
- package/es/utils/method.es.js.map +1 -1
- package/es/utils/scroll-lock.es.js +47 -0
- package/es/utils/scroll-lock.es.js.map +1 -0
- package/es/video/index.es.js +6 -3
- package/es/video/index.es.js.map +1 -1
- package/lib/attributors/index.cjs.js +2 -2
- package/lib/attributors/line-height.cjs.js.map +1 -1
- package/lib/config/base64-image.cjs.js.map +1 -1
- package/lib/config/editor.config.cjs.js.map +1 -1
- package/lib/config/editor.utils.cjs.js +12 -12
- package/lib/config/editor.utils.cjs.js.map +1 -1
- package/lib/config/i18n/en-us.cjs.js.map +1 -1
- package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
- package/lib/config/icons.config.cjs.js.map +1 -1
- package/lib/config/types/index.cjs.js +2 -2
- package/lib/config.cjs.js +1 -1
- package/lib/config.cjs.js.map +1 -1
- package/lib/counter/index.cjs.js.map +1 -1
- package/lib/custom-clipboard.cjs.js +14 -14
- package/lib/custom-clipboard.cjs.js.map +1 -1
- package/lib/custom-image/BlotFormatter.cjs.js +1 -1
- package/lib/custom-image/BlotFormatter.cjs.js.map +1 -1
- package/lib/custom-image/Options.cjs.js.map +1 -1
- package/lib/custom-image/actions/Action.cjs.js.map +1 -1
- package/lib/custom-image/actions/CustomResizeAction.cjs.js +6 -4
- package/lib/custom-image/actions/CustomResizeAction.cjs.js.map +1 -1
- package/lib/custom-image/actions/DeleteAction.cjs.js.map +1 -1
- package/lib/custom-image/image.cjs.js +3 -3
- package/lib/custom-image/image.cjs.js.map +1 -1
- package/lib/custom-image/specs/BlotSpec.cjs.js.map +1 -1
- package/lib/custom-image/specs/CustomImageSpec.cjs.js.map +1 -1
- package/lib/custom-image/specs/ImageSpec.cjs.js.map +1 -1
- package/lib/custom-uploader.cjs.js +4 -7
- package/lib/custom-uploader.cjs.js.map +1 -1
- package/lib/emoji/emoji-list/people.cjs.js.map +1 -1
- package/lib/emoji/emoji-list.cjs.js.map +1 -1
- package/lib/emoji/emoji-map.cjs.js.map +1 -1
- package/lib/emoji/formats/emoji-blot.cjs.js +2 -2
- package/lib/emoji/formats/emoji-blot.cjs.js.map +1 -1
- package/lib/emoji/index.cjs.js.map +1 -1
- package/lib/emoji/modules/emoji.cjs.js +7 -7
- package/lib/emoji/modules/emoji.cjs.js.map +1 -1
- package/lib/emoji/modules/toolbar-emoji.cjs.js +15 -15
- package/lib/emoji/modules/toolbar-emoji.cjs.js.map +1 -1
- package/lib/emoji/utils.cjs.js.map +1 -1
- package/lib/file/formats/file.cjs.js.map +1 -1
- package/lib/file/index.cjs.js.map +1 -1
- package/lib/file/modules/file-bar.cjs.js +3 -3
- package/lib/file/modules/file-bar.cjs.js.map +1 -1
- package/lib/fluent-editor.cjs.js +3 -3
- package/lib/fluent-editor.cjs.js.map +1 -1
- package/lib/format-painter/index.cjs.js.map +1 -1
- package/lib/global-link/constants.cjs.js.map +1 -1
- package/lib/global-link/formats/customer-widget-link.cjs.js.map +1 -1
- package/lib/global-link/formats/doc-link.cjs.js.map +1 -1
- package/lib/global-link/formats/wiki-link.cjs.js.map +1 -1
- package/lib/global-link/formats/work-item-link.cjs.js.map +1 -1
- package/lib/global-link/index.cjs.js +1 -1
- package/lib/global-link/index.cjs.js.map +1 -1
- package/lib/global-link/utils/createTable.cjs.js.map +1 -1
- package/lib/link/formats/link.cjs.js +1 -1
- package/lib/link/formats/link.cjs.js.map +1 -1
- package/lib/link/index.cjs.js.map +1 -1
- package/lib/link/modules/tooltip.cjs.js +3 -3
- package/lib/link/modules/tooltip.cjs.js.map +1 -1
- package/lib/mention/Mention.cjs.js +7 -12
- package/lib/mention/Mention.cjs.js.map +1 -1
- package/lib/mention/MentionLink.cjs.js.map +1 -1
- package/lib/mention/constants.cjs.js.map +1 -1
- package/lib/quick-menu/index.cjs.js +1 -1
- package/lib/quick-menu/index.cjs.js.map +1 -1
- package/lib/screenshot/index.cjs.js +44 -9
- package/lib/screenshot/index.cjs.js.map +1 -1
- package/lib/soft-break/index.cjs.js.map +1 -1
- package/lib/strike/index.cjs.js.map +1 -1
- package/lib/syntax/index.cjs.js.map +1 -1
- package/lib/table/better-table.cjs.js +4 -5
- package/lib/table/better-table.cjs.js.map +1 -1
- package/lib/table/formats/header.cjs.js.map +1 -1
- package/lib/table/formats/list.cjs.js +3 -3
- package/lib/table/formats/list.cjs.js.map +1 -1
- package/lib/table/formats/table.cjs.js +26 -27
- package/lib/table/formats/table.cjs.js.map +1 -1
- package/lib/table/modules/table-column-tool.cjs.js +8 -8
- package/lib/table/modules/table-column-tool.cjs.js.map +1 -1
- package/lib/table/modules/table-operation-menu.cjs.js +7 -8
- package/lib/table/modules/table-operation-menu.cjs.js.map +1 -1
- package/lib/table/modules/table-scroll-bar.cjs.js +1 -1
- package/lib/table/modules/table-scroll-bar.cjs.js.map +1 -1
- package/lib/table/modules/table-selection.cjs.js +0 -1
- package/lib/table/modules/table-selection.cjs.js.map +1 -1
- package/lib/table/table-config.cjs.js.map +1 -1
- package/lib/table/utils/index.cjs.js.map +1 -1
- package/lib/table/utils/node-matchers.cjs.js +14 -14
- package/lib/table/utils/node-matchers.cjs.js.map +1 -1
- package/lib/toolbar/better-picker.cjs.js.map +1 -1
- package/lib/toolbar/index.cjs.js +1 -1
- package/lib/toolbar/index.cjs.js.map +1 -1
- package/lib/utils/debounce.cjs.js.map +1 -1
- package/lib/utils/image.cjs.js +26 -0
- package/lib/utils/image.cjs.js.map +1 -0
- package/lib/utils/method.cjs.js +2 -2
- package/lib/utils/method.cjs.js.map +1 -1
- package/lib/utils/scroll-lock.cjs.js +47 -0
- package/lib/utils/scroll-lock.cjs.js.map +1 -0
- package/lib/video/index.cjs.js +6 -3
- package/lib/video/index.cjs.js.map +1 -1
- package/package.json +61 -64
- package/theme/style.css +12 -0
- package/es/types/vue.d.es.js +0 -2
- package/es/types/vue.d.es.js.map +0 -1
- package/lib/types/vue.d.cjs.js +0 -2
- package/lib/types/vue.d.cjs.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Quill from "quill";
|
|
2
|
-
import { compare } from "../../utils/method.es.js";
|
|
3
2
|
import { isNullOrUndefined } from "../../config/editor.utils.es.js";
|
|
3
|
+
import { compare } from "../../utils/method.es.js";
|
|
4
4
|
import { CELL_IDENTITY_KEYS, CELL_ATTRIBUTES, CELL_DEFAULT, COL_ATTRIBUTES, COL_DEFAULT, ERROR_LIMIT, CELL_MIN_HEIGHT } from "../table-config.es.js";
|
|
5
5
|
import { getRelativeRect } from "../utils/index.es.js";
|
|
6
6
|
import Header from "./header.es.js";
|
|
@@ -30,8 +30,8 @@ class TableCellLine extends Block {
|
|
|
30
30
|
}
|
|
31
31
|
static formats(domNode) {
|
|
32
32
|
const formats = {};
|
|
33
|
-
if (formats
|
|
34
|
-
formats
|
|
33
|
+
if (formats.list) {
|
|
34
|
+
formats.list = domNode.classList.item(0);
|
|
35
35
|
}
|
|
36
36
|
return reduceFormats(domNode, formats);
|
|
37
37
|
}
|
|
@@ -56,7 +56,7 @@ class TableCellLine extends Block {
|
|
|
56
56
|
});
|
|
57
57
|
}
|
|
58
58
|
format(name, value) {
|
|
59
|
-
if ([...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS, "parent-bg"].
|
|
59
|
+
if ([...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS, "parent-bg"].includes(name)) {
|
|
60
60
|
if (value) {
|
|
61
61
|
this.domNode.setAttribute(`data-${name}`, value);
|
|
62
62
|
} else {
|
|
@@ -165,10 +165,10 @@ class TableCell extends Container {
|
|
|
165
165
|
formats() {
|
|
166
166
|
const formats = {};
|
|
167
167
|
if (this.domNode.hasAttribute("data-row")) {
|
|
168
|
-
formats
|
|
168
|
+
formats.row = this.domNode.getAttribute("data-row");
|
|
169
169
|
}
|
|
170
170
|
if (this.domNode.hasAttribute("data-cell")) {
|
|
171
|
-
formats
|
|
171
|
+
formats.cell = this.domNode.getAttribute("data-cell");
|
|
172
172
|
}
|
|
173
173
|
return CELL_ATTRIBUTES.reduce((tableFormats, attribute) => {
|
|
174
174
|
if (this.domNode.hasAttribute(attribute)) {
|
|
@@ -189,7 +189,8 @@ class TableCell extends Container {
|
|
|
189
189
|
child.format(name, value);
|
|
190
190
|
});
|
|
191
191
|
}
|
|
192
|
-
/**
|
|
192
|
+
/**
|
|
193
|
+
* this method is for TableCellLine to change cell background color
|
|
193
194
|
* if use `format('cell-bg', value)` will loop trigger
|
|
194
195
|
* TableCellLine.optimize -> TableCell.format -> TableCellLine.optimize ...
|
|
195
196
|
*/
|
|
@@ -203,10 +204,10 @@ class TableCell extends Container {
|
|
|
203
204
|
format(name, value) {
|
|
204
205
|
const quill = Quill.find(this.scroll.domNode.parentNode);
|
|
205
206
|
switch (true) {
|
|
206
|
-
case CELL_ATTRIBUTES.
|
|
207
|
+
case CELL_ATTRIBUTES.includes(name):
|
|
207
208
|
this.toggleAttribute(name, value);
|
|
208
209
|
break;
|
|
209
|
-
case ["row", "cell"].
|
|
210
|
+
case ["row", "cell"].includes(name):
|
|
210
211
|
this.toggleAttribute(`data-${name}`, value);
|
|
211
212
|
break;
|
|
212
213
|
case name === "background": {
|
|
@@ -224,12 +225,14 @@ class TableCell extends Container {
|
|
|
224
225
|
quill.setSelection(start, length, Quill.sources.USER);
|
|
225
226
|
quill.format(name, value, Quill.sources.USER);
|
|
226
227
|
quill.setSelection(start);
|
|
228
|
+
break;
|
|
227
229
|
}
|
|
228
230
|
case name === "cell-bg": {
|
|
229
231
|
this.toggleAttribute("data-cell-bg", value);
|
|
230
232
|
this.toggleAttribute("data-parent-bg", value);
|
|
231
233
|
this.formatChildren(name, value);
|
|
232
234
|
this.setCellBg(value);
|
|
235
|
+
break;
|
|
233
236
|
}
|
|
234
237
|
}
|
|
235
238
|
}
|
|
@@ -270,7 +273,7 @@ class TableCell extends Container {
|
|
|
270
273
|
const formats = {};
|
|
271
274
|
const firstChild = domNode.childNodes[0];
|
|
272
275
|
if (firstChild && domNode.tagName === "OL") {
|
|
273
|
-
formats
|
|
276
|
+
formats.list = firstChild.classList.item(0);
|
|
274
277
|
}
|
|
275
278
|
return reduceFormats(domNode, formats);
|
|
276
279
|
}
|
|
@@ -373,7 +376,7 @@ class TableCol extends Block {
|
|
|
373
376
|
}, {});
|
|
374
377
|
}
|
|
375
378
|
format(name, value) {
|
|
376
|
-
if (COL_ATTRIBUTES.
|
|
379
|
+
if (COL_ATTRIBUTES.includes(name)) {
|
|
377
380
|
this.domNode.setAttribute(`${name}`, value || COL_DEFAULT[name]);
|
|
378
381
|
} else {
|
|
379
382
|
super.format(name, value);
|
|
@@ -471,7 +474,7 @@ class TableContainer extends Container {
|
|
|
471
474
|
const tableCol = col.formats()[TableCol.blotName];
|
|
472
475
|
let tableColWidth = COL_DEFAULT.width;
|
|
473
476
|
if (tableCol && tableCol.width) {
|
|
474
|
-
tableColWidth = parseInt(tableCol.width, 10);
|
|
477
|
+
tableColWidth = Number.parseInt(tableCol.width, 10);
|
|
475
478
|
}
|
|
476
479
|
sumWidth = sumWidth + tableColWidth;
|
|
477
480
|
return sumWidth;
|
|
@@ -493,8 +496,8 @@ class TableContainer extends Container {
|
|
|
493
496
|
}
|
|
494
497
|
colGroup.children.forEach((col) => {
|
|
495
498
|
if (maxTds && col.domNode.width === "auto") {
|
|
496
|
-
const width = getComputedStyle(maxTds[tdIndex])
|
|
497
|
-
const num = parseInt(width, 10);
|
|
499
|
+
const width = getComputedStyle(maxTds[tdIndex]).width;
|
|
500
|
+
const num = Number.parseInt(width, 10);
|
|
498
501
|
col.domNode.width = num < COL_DEFAULT.width && COL_DEFAULT.width || num;
|
|
499
502
|
}
|
|
500
503
|
tdIndex++;
|
|
@@ -540,7 +543,7 @@ class TableContainer extends Container {
|
|
|
540
543
|
cell.remove();
|
|
541
544
|
});
|
|
542
545
|
modifiedCells.forEach((cell) => {
|
|
543
|
-
const cellColspan = parseInt(cell.formats().colspan, 10);
|
|
546
|
+
const cellColspan = Number.parseInt(cell.formats().colspan, 10);
|
|
544
547
|
cell.format("colspan", cellColspan - delIndexes.length);
|
|
545
548
|
});
|
|
546
549
|
this.updateTableWidth();
|
|
@@ -596,7 +599,7 @@ class TableContainer extends Container {
|
|
|
596
599
|
});
|
|
597
600
|
});
|
|
598
601
|
modifiedCells.forEach((cell) => {
|
|
599
|
-
const cellRowspan = parseInt(cell.formats().rowspan, 10);
|
|
602
|
+
const cellRowspan = Number.parseInt(cell.formats().rowspan, 10);
|
|
600
603
|
const curRowspan = cellRowspan - removedRowsLength;
|
|
601
604
|
cell.domNode.removeAttribute("style");
|
|
602
605
|
cell.format("rowspan", curRowspan);
|
|
@@ -674,11 +677,7 @@ class TableContainer extends Container {
|
|
|
674
677
|
const cellFormats = cell.formats();
|
|
675
678
|
const tableCell = this.scroll.create(
|
|
676
679
|
TableCell.blotName,
|
|
677
|
-
{
|
|
678
|
-
...CELL_DEFAULT,
|
|
679
|
-
row: rId,
|
|
680
|
-
rowspan: cellFormats.rowspan
|
|
681
|
-
}
|
|
680
|
+
{ ...CELL_DEFAULT, row: rId, rowspan: cellFormats.rowspan }
|
|
682
681
|
);
|
|
683
682
|
const cellLine = this.scroll.create(TableCellLine.blotName, {
|
|
684
683
|
row: rId,
|
|
@@ -707,7 +706,7 @@ class TableContainer extends Container {
|
|
|
707
706
|
}
|
|
708
707
|
modifiedCells.forEach((cell) => {
|
|
709
708
|
const cellColspan = cell.formats().colspan;
|
|
710
|
-
cell.format("colspan", parseInt(cellColspan, 10) + 1);
|
|
709
|
+
cell.format("colspan", Number.parseInt(cellColspan, 10) + 1);
|
|
711
710
|
affectedCells.push(cell);
|
|
712
711
|
});
|
|
713
712
|
affectedCells.sort((cellA, cellB) => {
|
|
@@ -772,7 +771,7 @@ class TableContainer extends Container {
|
|
|
772
771
|
affectedCells.push(tableCell);
|
|
773
772
|
});
|
|
774
773
|
modifiedCells.forEach((cell) => {
|
|
775
|
-
const cellRowspan = parseInt(cell.formats().rowspan, 10);
|
|
774
|
+
const cellRowspan = Number.parseInt(cell.formats().rowspan, 10);
|
|
776
775
|
cell.format("rowspan", cellRowspan + 1);
|
|
777
776
|
affectedCells.push(cell);
|
|
778
777
|
});
|
|
@@ -801,7 +800,7 @@ class TableContainer extends Container {
|
|
|
801
800
|
result = tableCell;
|
|
802
801
|
if (rowspan > 1) {
|
|
803
802
|
const minHeight = CELL_MIN_HEIGHT * rowspan + rowspan - 1;
|
|
804
|
-
const cellHeight = parseInt(tableCell.domNode.style.height, 10) || 0;
|
|
803
|
+
const cellHeight = Number.parseInt(tableCell.domNode.style.height, 10) || 0;
|
|
805
804
|
if (cellHeight < minHeight) {
|
|
806
805
|
tableCell.domNode.style.height = `${minHeight}px`;
|
|
807
806
|
}
|
|
@@ -813,10 +812,10 @@ class TableContainer extends Container {
|
|
|
813
812
|
const cId = mergedCell.children.head.domNode.getAttribute("data-cell");
|
|
814
813
|
mergedCell.children.forEach((cellLine) => {
|
|
815
814
|
cellLine.domNode.setAttribute("data-parent-bg", mergedCell.domNode.style.backgroundColor);
|
|
816
|
-
if (cellLine.children
|
|
817
|
-
cellLine.children
|
|
815
|
+
if (cellLine.children.head.domNode.style) {
|
|
816
|
+
cellLine.children.head.domNode.style.backgroundColor = mergedCell.domNode.style.backgroundColor;
|
|
818
817
|
}
|
|
819
|
-
if (!cellLine.prev || cellLine.domNode.
|
|
818
|
+
if (!cellLine.prev || cellLine.domNode.textContent.trim()) {
|
|
820
819
|
cellLine.format("cell", cId);
|
|
821
820
|
cellLine.format("row", rId);
|
|
822
821
|
cellLine.format("colspan", colspan);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.es.js","sources":["../../../../src/table/formats/table.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { compare } from '../../utils/method'\r\nimport { isNullOrUndefined } from '../../config/editor.utils'\r\nimport {\r\n CELL_ATTRIBUTES,\r\n CELL_DEFAULT,\r\n CELL_IDENTITY_KEYS,\r\n CELL_MIN_HEIGHT,\r\n COL_ATTRIBUTES,\r\n COL_DEFAULT,\r\n ERROR_LIMIT,\r\n} from '../table-config'\r\nimport { getRelativeRect } from '../utils'\r\nimport Header from './header'\r\nimport ListItem, { ListContainer } from './list'\r\n\r\nconst Break = Quill.imports['blots/break']\r\nconst Block = Quill.imports['blots/block']\r\nconst Container = Quill.imports['blots/container']\r\n\r\n// @dynamic\r\nclass TableCellLine extends Block {\r\n static requiredContainer: any\r\n static tagName: string\r\n static className: string\r\n static blotName: any\r\n domNode: any\r\n statics: any\r\n wrap: any\r\n parent: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n\r\n // fix: when td has background-color, quill can't set it to table-cell blot\r\n if (value.tdBgColor) {\r\n node.setAttribute(`data-parent-bg`, value.tdBgColor)\r\n delete value.tdBgColor\r\n }\r\n\r\n CELL_IDENTITY_KEYS.forEach((key) => {\r\n const identityMaker = key === 'row' ? rowId : cellId\r\n node.setAttribute(`data-${key}`, value[key] || identityMaker())\r\n })\r\n\r\n CELL_ATTRIBUTES.forEach((attrName) => {\r\n const keyValue = value[attrName] || CELL_DEFAULT[attrName]\r\n keyValue && node.setAttribute(`data-${attrName}`, keyValue)\r\n })\r\n\r\n if (value.height) {\r\n node.setAttribute('height', value.height)\r\n }\r\n\r\n return node\r\n }\r\n\r\n static formats(domNode) {\r\n const formats = {}\r\n if (formats['list']) {\r\n formats['list'] = domNode.classList.item(0)\r\n }\r\n return reduceFormats(domNode, formats)\r\n }\r\n\r\n toggleAttribute(name, value) {\r\n if (value) {\r\n this.domNode.setAttribute(name, value)\r\n }\r\n else {\r\n this.domNode.removeAttribute(name)\r\n }\r\n }\r\n\r\n formatChildren(name, value) {\r\n this.children.forEach((child) => {\r\n child.format && child.format(name, value)\r\n if (!child.domNode.style) {\r\n return\r\n }\r\n if (child.domNode.tagName === 'SPAN' && value) {\r\n child.domNode.style.backgroundColor = value\r\n }\r\n else {\r\n child.domNode.style.backgroundColor = 'initial'\r\n }\r\n })\r\n }\r\n\r\n format(name, value) {\r\n if ([...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS, 'parent-bg'].indexOf(name) > -1) {\r\n if (value) {\r\n this.domNode.setAttribute(`data-${name}`, value)\r\n }\r\n else {\r\n this.domNode.removeAttribute(`data-${name}`)\r\n }\r\n }\r\n else if (name === 'header') {\r\n if (!value) {\r\n return\r\n }\r\n const { row, cell, rowspan, colspan }: any = TableCellLine.formats(this.domNode)\r\n super.format(name, {\r\n value,\r\n row,\r\n cell,\r\n rowspan,\r\n colspan,\r\n })\r\n }\r\n else {\r\n super.format(name, value)\r\n }\r\n switch (true) {\r\n case name === 'cell-bg': {\r\n this.toggleAttribute('data-cell-bg', value)\r\n }\r\n }\r\n }\r\n\r\n optimize(context) {\r\n super.optimize(context)\r\n\r\n // cover shadowBlot's wrap call, pass params parentBlot initialize\r\n // needed\r\n const { row, cell, rowspan, colspan, cellBg } = this.domNode.dataset\r\n const formats: Record<string, any> = TableCellLine.formats(this.domNode)\r\n const parentFormats = this.parent.formats()\r\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\r\n this.wrap(this.statics.requiredContainer.blotName, { row, cell, rowspan, colspan, cellBg })\r\n }\r\n else if (!compare(formats, parentFormats)) {\r\n this.parent.format('row', formats.row)\r\n this.parent.format('cell', formats.cell)\r\n this.parent.format('rowspan', formats.rowspan)\r\n this.parent.format('colspan', formats.colspan)\r\n formats['cell-bg'] && this.parent.setCellBg(formats['cell-bg'])\r\n }\r\n\r\n const parentHeight = this.domNode.getAttribute('height')\r\n if (parentHeight) {\r\n this.parent.domNode.style.height = parentHeight\r\n }\r\n }\r\n\r\n tableCell() {\r\n return this.parent\r\n }\r\n}\r\nTableCellLine.blotName = 'table-cell-line'\r\nTableCellLine.className = 'qlbt-cell-line'\r\nTableCellLine.tagName = 'DIV'\r\n\r\n// @dynamic\r\nclass TableCell extends Container {\r\n static allowedChildren: any\r\n static blotName: any\r\n static requiredContainer: any\r\n static tagName: string\r\n next: any\r\n children: any\r\n parent: any\r\n domNode: any\r\n statics: any\r\n wrap: any\r\n splitAfter: any\r\n prev: any\r\n scroll: any\r\n\r\n static create(value = { row: rowId() }) {\r\n const node = super.create(value)\r\n\r\n CELL_IDENTITY_KEYS.forEach((key) => {\r\n node.setAttribute(`data-${key}`, value[key])\r\n })\r\n\r\n CELL_ATTRIBUTES.forEach((attrName) => {\r\n if (value[attrName]) {\r\n node.setAttribute(attrName, value[attrName])\r\n }\r\n })\r\n\r\n return node\r\n }\r\n\r\n static formats(domNode) {\r\n const formats = {\r\n height: undefined,\r\n row: undefined,\r\n }\r\n\r\n formats.height = domNode.getAttribute('height') || undefined\r\n\r\n if (domNode.hasAttribute('data-row')) {\r\n formats.row = domNode.getAttribute('data-row')\r\n }\r\n\r\n if (domNode.hasAttribute('data-cell-bg')) {\r\n formats['cell-bg'] = domNode.getAttribute('data-cell-bg') || undefined\r\n }\r\n return CELL_ATTRIBUTES.reduce((formats, attribute) => {\r\n if (domNode.hasAttribute(attribute)) {\r\n formats[attribute] = domNode.getAttribute(attribute)\r\n }\r\n\r\n return formats\r\n }, formats)\r\n }\r\n\r\n checkMerge() {\r\n if (super.checkMerge() && !isNullOrUndefined(this.next.children.head)) {\r\n const getCellId = (node) => {\r\n return (\r\n (node.formats && node.formats()[node.statics.blotName]) || {\r\n cell: node.domNode.getAttribute('data-cell'),\r\n }\r\n )\r\n }\r\n const thisHead = getCellId(this.children.head)\r\n const thisTail = getCellId(this.children.tail)\r\n const nextHead = getCellId(this.next.children.head)\r\n const nextTail = getCellId(this.next.children.tail)\r\n return thisHead.cell === thisTail.cell && thisHead.cell === nextHead.cell && thisHead.cell === nextTail.cell\r\n }\r\n return false\r\n }\r\n\r\n cellOffset() {\r\n if (this.parent) {\r\n return this.parent.children.indexOf(this)\r\n }\r\n return -1\r\n }\r\n\r\n formats() {\r\n const formats = {}\r\n\r\n if (this.domNode.hasAttribute('data-row')) {\r\n formats['row'] = this.domNode.getAttribute('data-row')\r\n }\r\n if (this.domNode.hasAttribute('data-cell')) {\r\n formats['cell'] = this.domNode.getAttribute('data-cell')\r\n }\r\n\r\n return CELL_ATTRIBUTES.reduce((tableFormats, attribute) => {\r\n if (this.domNode.hasAttribute(attribute)) {\r\n tableFormats[attribute] = this.domNode.getAttribute(attribute)\r\n }\r\n\r\n return tableFormats\r\n }, formats)\r\n }\r\n\r\n toggleAttribute(name, value) {\r\n if (value) {\r\n this.domNode.setAttribute(name, value)\r\n }\r\n else {\r\n this.domNode.removeAttribute(name)\r\n }\r\n }\r\n\r\n formatChildren(name, value) {\r\n this.children.forEach((child) => {\r\n child.format(name, value)\r\n })\r\n }\r\n\r\n /** this method is for TableCellLine to change cell background color\r\n * if use `format('cell-bg', value)` will loop trigger\r\n * TableCellLine.optimize -> TableCell.format -> TableCellLine.optimize ...\r\n */\r\n setCellBg(value?: string) {\r\n if (value) {\r\n this.domNode.style.backgroundColor = value\r\n }\r\n else {\r\n this.domNode.style.backgroundColor = 'initial'\r\n }\r\n }\r\n\r\n format(name, value) {\r\n const quill = Quill.find(this.scroll.domNode.parentNode)\r\n switch (true) {\r\n case CELL_ATTRIBUTES.indexOf(name) > -1:\r\n this.toggleAttribute(name, value)\r\n break\r\n case ['row', 'cell'].indexOf(name) > -1:\r\n this.toggleAttribute(`data-${name}`, value)\r\n break\r\n case name === 'background': {\r\n const hasBgColor = this.domNode.querySelectorAll('div.qlbt-cell-line[data-parent-bg]')\r\n hasBgColor.forEach(child => child.removeAttribute('data-parent-bg'))\r\n this.domNode.style.background = ''\r\n this.domNode.style.backgroundColor = value\r\n this.children.head.format('parent-bg', value)\r\n break\r\n }\r\n // TODO: 其他格式可同理实现,但已有格式清除时会清除所有格式,待解决\r\n case name === 'size': {\r\n const start = quill.getIndex(this.children.head)\r\n const total = quill.getIndex(this.children.tail) + this.children.tail.length()\r\n const length = total - start > 0 ? total - start : 0\r\n quill.setSelection(start, length, Quill.sources.USER)\r\n quill.format(name, value, Quill.sources.USER)\r\n // 设置选区后需清除选区,否则会固定处理选区内容\r\n quill.setSelection(start)\r\n }\r\n case name === 'cell-bg': {\r\n this.toggleAttribute('data-cell-bg', value)\r\n this.toggleAttribute('data-parent-bg', value)\r\n this.formatChildren(name, value)\r\n this.setCellBg(value)\r\n }\r\n }\r\n }\r\n\r\n optimize(context) {\r\n // fix: when td has background-color, quill can't set it to table-cell bolt\r\n const hasBg: any = Array.from(this.domNode.childNodes).find((item: any) => item.getAttribute('data-parent-bg'))\r\n const bgColor = hasBg && hasBg.getAttribute('data-parent-bg')\r\n if (bgColor && bgColor !== this.domNode.style.backgroundColor) {\r\n this.domNode.style.backgroundColor = bgColor\r\n }\r\n\r\n const rId = this.domNode.getAttribute('data-row')\r\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\r\n this.wrap(this.statics.requiredContainer.blotName, {\r\n row: rId,\r\n })\r\n }\r\n else if (rId !== this.parent.formats().row) {\r\n this.parent.format('row', rId)\r\n }\r\n\r\n this.children.forEach((child) => {\r\n if (isNullOrUndefined(child.next)) {\r\n return\r\n }\r\n const childFormats: any = this.getFormat(child.domNode)\r\n const nextFormats: any = this.getFormat(child.next.domNode)\r\n if (childFormats.cell !== nextFormats.cell) {\r\n const next = this.splitAfter(child)\r\n if (next) {\r\n next.optimize()\r\n }\r\n // We might be able to merge with prev now\r\n if (this.prev) {\r\n this.prev.optimize()\r\n }\r\n }\r\n })\r\n\r\n super.optimize(context)\r\n }\r\n\r\n // 兼容读取TableCell中的子blot,包括table-cell-line、line、head\r\n getFormat(domNode) {\r\n const formats = {}\r\n const firstChild = domNode.childNodes[0]\r\n if (firstChild && domNode.tagName === 'OL') {\r\n formats['list'] = firstChild.classList.item(0)\r\n }\r\n\r\n return reduceFormats(domNode, formats)\r\n }\r\n\r\n row() {\r\n return this.parent\r\n }\r\n\r\n rowOffset() {\r\n if (this.row()) {\r\n return -1\r\n }\r\n return this.row().rowOffset()\r\n }\r\n\r\n table() {\r\n return this.row() && this.row().table()\r\n }\r\n}\r\nTableCell.blotName = 'table'\r\nTableCell.tagName = 'TD'\r\n\r\n// @dynamic\r\nclass TableRow extends Container {\r\n static requiredContainer: any\r\n static allowedChildren: any\r\n static blotName: string\r\n static tagName: string\r\n next: any\r\n children: any\r\n domNode: any\r\n statics: any\r\n wrap: any\r\n splitAfter: any\r\n enforceAllowedChildren: any\r\n uiNode: any\r\n parent: any\r\n prev: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n if (value.row) {\r\n node.setAttribute('data-row', value.row)\r\n }\r\n return node\r\n }\r\n\r\n checkMerge() {\r\n if (super.checkMerge() && !isNullOrUndefined(this.next.children.head)) {\r\n const thisHead = this.children.head.formats()\r\n const thisTail = this.children.tail.formats()\r\n const nextHead = this.next.children.head.formats()\r\n const nextTail = this.next.children.tail.formats()\r\n\r\n return thisHead.row === thisTail.row && thisHead.row === nextHead.row && thisHead.row === nextTail.row\r\n }\r\n return false\r\n }\r\n\r\n formats() {\r\n return ['row'].reduce((formats, attrName) => {\r\n if (this.domNode.hasAttribute(`data-${attrName}`)) {\r\n formats[attrName] = this.domNode.getAttribute(`data-${attrName}`)\r\n }\r\n return formats\r\n }, {})\r\n }\r\n\r\n format(key, value) {\r\n this.domNode.setAttribute(`data-${key}`, value)\r\n }\r\n\r\n optimize(context) {\r\n // optimize function of ShadowBlot\r\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\r\n this.wrap(this.statics.requiredContainer.blotName)\r\n }\r\n\r\n this.children.forEach((child) => {\r\n if (isNullOrUndefined(child.next)) {\r\n return\r\n }\r\n const childFormats = child.formats()\r\n const nextFormats = child.next.formats()\r\n if (childFormats.row !== nextFormats.row) {\r\n const next = this.splitAfter(child)\r\n if (next) {\r\n next.optimize()\r\n }\r\n if (this.prev) {\r\n this.prev.optimize()\r\n }\r\n }\r\n })\r\n\r\n super.optimize(context)\r\n }\r\n\r\n rowOffset() {\r\n if (!this.parent) {\r\n return -1\r\n }\r\n return this.parent.children.indexOf(this)\r\n }\r\n\r\n table() {\r\n return this.parent && this.parent.parent\r\n }\r\n}\r\nTableRow.blotName = 'table-row'\r\nTableRow.tagName = 'TR'\r\n\r\n// @dynamic\r\nclass TableBody extends Container {\r\n static requiredContainer: any\r\n static allowedChildren: any\r\n static blotName: string\r\n static tagName: string\r\n}\r\nTableBody.blotName = 'table-body'\r\nTableBody.tagName = 'TBODY'\r\n\r\n// @dynamic\r\nclass TableCol extends Block {\r\n static requiredContainer: any\r\n static blotName: string\r\n static tagName: string\r\n domNode: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n COL_ATTRIBUTES.forEach((attrName) => {\r\n node.setAttribute(`${attrName}`, value[attrName] || COL_DEFAULT[attrName])\r\n })\r\n return node\r\n }\r\n\r\n static formats(domNode) {\r\n return COL_ATTRIBUTES.reduce((formats, attribute) => {\r\n if (domNode.hasAttribute(`${attribute}`)) {\r\n formats[attribute] = domNode.getAttribute(`${attribute}`) || undefined\r\n }\r\n return formats\r\n }, {})\r\n }\r\n\r\n format(name, value) {\r\n if (COL_ATTRIBUTES.indexOf(name) > -1) {\r\n this.domNode.setAttribute(`${name}`, value || COL_DEFAULT[name])\r\n }\r\n else {\r\n super.format(name, value)\r\n }\r\n }\r\n\r\n html() {\r\n return this.domNode.outerHTML\r\n }\r\n}\r\nTableCol.blotName = 'table-col'\r\nTableCol.tagName = 'col'\r\n\r\n// @dynamic\r\nclass TableColGroup extends Container {\r\n static requiredContainer: any\r\n static allowedChildren: any\r\n static blotName: string\r\n static tagName: string\r\n parent: any\r\n statics: any\r\n\r\n optimize(context) {\r\n super.optimize(context)\r\n // optimize 是当前slot更新后调用的callback方法,当TableBody更新后判断父容器的存在和类型相符则调用更新表格宽度方法更新宽度\r\n // 切记不要在当前slot内调用能改变当前slot的方法,会造成无限循环,一般通过子更新改变父较好\r\n if (this.parent && this.statics.requiredContainer && this.parent instanceof this.statics.requiredContainer) {\r\n this.parent.updateTableWidth()\r\n }\r\n // 此时colgroup创建完毕,检查colgroup的col数量是否正确\r\n // fix:colgroup的col数量不正确导致最后一列宽度为空\r\n if (this.parent.parent.domNode.className === 'quill-better-table-wrapper'\r\n && this.parent.parent.domNode.tagName === 'DIV'\r\n && this.parent.domNode.children.length >= 2\r\n && this.parent.domNode.children[0].tagName === 'COLGROUP'\r\n && this.parent.domNode.children[1].tagName === 'TBODY'\r\n ) {\r\n let trId = ''\r\n let colSpan = 0\r\n let colgroupNumber = 0\r\n for (let i = 0; i < this.parent.domNode.children.length; i++) {\r\n if (this.parent.domNode.children[i].tagName === 'TBODY') {\r\n if (trId === '') {\r\n trId = this.parent.domNode.children[i].children[0].getAttribute('data-row')\r\n }\r\n colSpan = this.findTdColspanInTbody(this.parent.domNode.children[i], trId)\r\n }\r\n else if (this.parent.domNode.children[i].tagName === 'COLGROUP') {\r\n colgroupNumber = this.parent.domNode.children[i].children.length\r\n }\r\n }\r\n let elementSibling = this.parent.domNode.nextElementSibling\r\n\r\n while (elementSibling && elementSibling.tagName === 'TABLE') {\r\n for (let i = 0; i < elementSibling.children.length; i++) {\r\n if (elementSibling.children[i].tagName === 'TBODY') {\r\n colSpan += this.findTdColspanInTbody(elementSibling.children[i], trId)\r\n }\r\n }\r\n elementSibling = elementSibling.nextElementSibling\r\n }\r\n\r\n if (colgroupNumber < colSpan) {\r\n const length = colSpan - colgroupNumber\r\n\r\n for (let i = 0; i < length; i++) {\r\n const newCol = document.createElement('col')\r\n newCol.width = this.parent.domNode.children[0].children[this.parent.domNode.children[0].children.length - 1].width\r\n const newBr = document.createElement('br')\r\n newCol.appendChild(newBr)\r\n this.parent.domNode.children[0].appendChild(newCol)\r\n this.parent.domNode.style.width += newCol.width\r\n }\r\n }\r\n }\r\n }\r\n\r\n // this.parent.domNode.children[1].children[0].children[0].colSpan\r\n findTdColspanInTbody(tbody, trId) {\r\n let colSpan = 0\r\n // let tbodyChildrenLength\r\n for (let i = 0; i < tbody.children.length; i++) {\r\n if (tbody.children[i].getAttribute('data-row') !== trId) {\r\n return colSpan\r\n }\r\n for (let j = 0; j < tbody.children[i].children.length; j++) {\r\n if (tbody.children[i].children[j].colSpan) {\r\n colSpan += tbody.children[i].children[j].colSpan\r\n }\r\n }\r\n }\r\n return colSpan\r\n }\r\n}\r\nTableColGroup.blotName = 'table-col-group'\r\nTableColGroup.tagName = 'colgroup'\r\n\r\n// @dynamic\r\nclass TableContainer extends Container {\r\n static blotName: string\r\n static className: string\r\n static tagName: string\r\n static requiredContainer: any\r\n static allowedChildren: any\r\n domNode: any\r\n parent: any\r\n children: any\r\n descendants: any\r\n scroll: any\r\n remove: any\r\n static create() {\r\n const node = super.create()\r\n return node\r\n }\r\n\r\n constructor(scroll, domNode) {\r\n super(scroll, domNode)\r\n domNode.setAttribute('contenteditable', false)\r\n this.updateTableWidth()\r\n }\r\n\r\n updateTableWidth() {\r\n let colGroup = this.colGroup()\r\n if (!colGroup) {\r\n // undo时原表格dom被移除,因此colGroup和domNode都不对应当前新表格,需从父容器dom树重新获取\r\n // 如果表格有style属性则不为新添加表格,避免错误赋值\r\n if (this.parent && this.parent.children.head && this.domNode.hasAttribute('style')) {\r\n colGroup = this.parent.children.head.children.head\r\n this.domNode = this.parent.children.head.domNode\r\n }\r\n else if (this.domNode.tagName === 'TABLE') {\r\n // this.domNode.forEach\r\n return\r\n }\r\n else {\r\n return\r\n }\r\n }\r\n const tableWidth = colGroup.children.reduce((sumWidth, col) => {\r\n // 兼容 table-col 不存在的情况\r\n const tableCol = col.formats()[TableCol.blotName]\r\n let tableColWidth = COL_DEFAULT.width\r\n if (tableCol && tableCol.width) {\r\n tableColWidth = parseInt(tableCol.width, 10)\r\n }\r\n sumWidth = sumWidth + tableColWidth\r\n return sumWidth\r\n }, 0)\r\n this.domNode.removeAttribute('style')\r\n this.domNode.style.width = `${tableWidth}px`\r\n // 当表格加载结束后修正width设定为auto的列宽度\r\n if (colGroup.next) {\r\n setTimeout(() => {\r\n let tdIndex = 0\r\n let maxTds\r\n const colNum = colGroup.children.length\r\n const tableRows = this.descendants(TableRow)\r\n // 查询单元格数等于列数的行作为宽度赋值依据\r\n for (let i = 0; i < tableRows.length; i++) {\r\n const tds = tableRows[i].domNode.querySelectorAll('td')\r\n if (tds.length === colNum) {\r\n maxTds = tds\r\n break\r\n }\r\n }\r\n colGroup.children.forEach((col) => {\r\n if (maxTds && col.domNode.width === 'auto') {\r\n const width = getComputedStyle(maxTds[tdIndex])['width']\r\n const num = parseInt(width, 10)\r\n col.domNode.width = (num < COL_DEFAULT.width && COL_DEFAULT.width) || num\r\n }\r\n tdIndex++\r\n })\r\n })\r\n }\r\n }\r\n\r\n cells(column) {\r\n return this.rows().map(row => row.children.at(column))\r\n }\r\n\r\n colGroup() {\r\n return this.children.head\r\n }\r\n\r\n deleteColumns(compareRect, delIndexes = [], editorWrapper) {\r\n const [body] = this.descendants(TableBody)\r\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\r\n return\r\n }\r\n\r\n const tableCells = this.descendants(TableCell)\r\n const removedCells = []\r\n const modifiedCells = []\r\n\r\n tableCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (cellRect.x + ERROR_LIMIT > compareRect.x && cellRect.x1 - ERROR_LIMIT < compareRect.x1) {\r\n removedCells.push(cell)\r\n }\r\n else if (cellRect.x < compareRect.x + ERROR_LIMIT && cellRect.x1 > compareRect.x1 - ERROR_LIMIT) {\r\n modifiedCells.push(cell)\r\n }\r\n })\r\n\r\n if (removedCells.length === tableCells.length) {\r\n this.tableDestroy()\r\n return true\r\n }\r\n\r\n // remove the matches column tool cell\r\n delIndexes.forEach(() => {\r\n const col = this.colGroup().children.at(delIndexes[0])\r\n if (!col || this.colGroup().children.at(delIndexes[0]).domNode !== this.colGroup().domNode.children[delIndexes[0]]) {\r\n this.colGroup().domNode.removeChild(this.colGroup().domNode.children[delIndexes[0]])\r\n }\r\n else {\r\n col.remove()\r\n }\r\n })\r\n\r\n removedCells.forEach((cell) => {\r\n cell.remove()\r\n })\r\n\r\n modifiedCells.forEach((cell) => {\r\n const cellColspan = parseInt(cell.formats().colspan, 10)\r\n // const cellWidth = parseInt(cell.formats().width, 10);\r\n cell.format('colspan', cellColspan - delIndexes.length)\r\n })\r\n\r\n this.updateTableWidth()\r\n }\r\n\r\n deleteRow(compareRect, editorWrapper) {\r\n const [body] = this.descendants(TableBody)\r\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\r\n return\r\n }\r\n\r\n const tableCells = this.descendants(TableCell)\r\n const tableRows = this.descendants(TableRow)\r\n const removedCells = [] // cells to be removed\r\n const modifiedCells = [] // cells to be modified\r\n const fallCells = [] // cells to fall into next row\r\n\r\n tableCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (cellRect.y > compareRect.y - ERROR_LIMIT && cellRect.y1 < compareRect.y1 + ERROR_LIMIT) {\r\n removedCells.push(cell)\r\n }\r\n else if (cellRect.y < compareRect.y + ERROR_LIMIT && cellRect.y1 > compareRect.y1 - ERROR_LIMIT) {\r\n modifiedCells.push(cell)\r\n\r\n if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {\r\n fallCells.push(cell)\r\n }\r\n }\r\n })\r\n\r\n if (removedCells.length === tableCells.length) {\r\n this.tableDestroy()\r\n return\r\n }\r\n\r\n // compute length of removed rows\r\n const removedRowsLength = this.rows().reduce((sum, row) => {\r\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (rowRect.y > compareRect.y - ERROR_LIMIT && rowRect.y1 < compareRect.y1 + ERROR_LIMIT) {\r\n sum += 1\r\n }\r\n return sum\r\n }, 0)\r\n\r\n // it must execute before the table layout changed with other operation\r\n fallCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n const nextRow = cell.parent.next\r\n const cellsInNextRow = nextRow.children\r\n\r\n const refCell = cellsInNextRow.reduce((ref, compareCell) => {\r\n const compareCellRect = getRelativeRect(compareCell.domNode.getBoundingClientRect(), editorWrapper)\r\n if (cellRect.x1 - compareCellRect.x < ERROR_LIMIT) {\r\n ref = compareCell\r\n }\r\n return ref\r\n }, null)\r\n\r\n nextRow.insertBefore(cell, refCell)\r\n const curRowId = nextRow.formats().row\r\n cell.format('row', curRowId)\r\n cell.children.forEach((cellLine) => {\r\n cellLine.format('row', curRowId)\r\n })\r\n })\r\n\r\n modifiedCells.forEach((cell) => {\r\n const cellRowspan = parseInt(cell.formats().rowspan, 10)\r\n const curRowspan = cellRowspan - removedRowsLength\r\n cell.domNode.removeAttribute('style')\r\n cell.format('rowspan', curRowspan)\r\n cell.children.forEach((cellLine) => {\r\n cellLine.format('rowspan', curRowspan)\r\n })\r\n })\r\n\r\n removedCells.forEach((cell) => {\r\n cell.remove()\r\n })\r\n\r\n // fix: There will be a empty tr left if i delete the last row of a table,\r\n // this will cause the bottom border of the table to disappear,\r\n // and the empty tr will execute the matchTableRow method.\r\n tableRows.forEach((row) => {\r\n if (row.children.length === 0) {\r\n row.remove()\r\n }\r\n })\r\n }\r\n\r\n tableDestroy() {\r\n const quill = Quill.find(this.scroll.domNode.parentNode)\r\n const tableModule = quill.getModule('better-table')\r\n this.remove()\r\n tableModule.hideTableTools()\r\n quill.update(Quill.sources.USER)\r\n }\r\n\r\n insertCell(tableRow, ref, bg = '') {\r\n const id = cellId()\r\n const rId = tableRow.formats().row\r\n const tableCell = this.scroll.create(\r\n TableCell.blotName,\r\n { ...CELL_DEFAULT, row: rId },\r\n )\r\n tableCell.domNode.style.backgroundColor = bg\r\n const cellLine = this.scroll.create(TableCellLine.blotName, {\r\n row: rId,\r\n cell: id,\r\n })\r\n tableCell.appendChild(cellLine)\r\n\r\n if (ref) {\r\n tableRow.insertBefore(tableCell, ref)\r\n }\r\n else {\r\n tableRow.appendChild(tableCell)\r\n }\r\n }\r\n\r\n insertColumn(compareRect, colIndex, isRight = true, editorWrapper) {\r\n const [body] = this.descendants(TableBody)\r\n const [tableColGroup] = this.descendants(TableColGroup)\r\n const tableCols = this.descendants(TableCol)\r\n const addAsideCells = []\r\n const modifiedCells = []\r\n const affectedCells = []\r\n\r\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\r\n return\r\n }\r\n const tableCells = this.descendants(TableCell)\r\n tableCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (isRight) {\r\n if (Math.abs(cellRect.x1 - compareRect.x1) < ERROR_LIMIT) {\r\n // the right of selected boundary equal to the right of table cell,\r\n // add a new table cell right aside this table cell\r\n addAsideCells.push(cell)\r\n }\r\n else if (compareRect.x1 - cellRect.x > ERROR_LIMIT && compareRect.x1 - cellRect.x1 < -ERROR_LIMIT) {\r\n // the right of selected boundary is inside this table cell\r\n // colspan of this table cell will increase 1\r\n modifiedCells.push(cell)\r\n }\r\n }\r\n else {\r\n if (Math.abs(cellRect.x - compareRect.x) < ERROR_LIMIT) {\r\n // left of selected boundary equal to left of table cell,\r\n // add a new table cell left aside this table cell\r\n addAsideCells.push(cell)\r\n }\r\n else if (compareRect.x - cellRect.x > ERROR_LIMIT && compareRect.x - cellRect.x1 < -ERROR_LIMIT) {\r\n // the left of selected boundary is inside this table cell\r\n // colspan of this table cell will increase 1\r\n modifiedCells.push(cell)\r\n }\r\n }\r\n })\r\n\r\n addAsideCells.forEach((cell) => {\r\n const ref = isRight ? cell.next : cell\r\n const id = cellId()\r\n const tableRow = cell.parent\r\n const rId = tableRow.formats().row\r\n const cellFormats = cell.formats()\r\n const tableCell = this.scroll.create(\r\n TableCell.blotName,\r\n { ...CELL_DEFAULT, row: rId,\r\n rowspan: cellFormats.rowspan },\r\n )\r\n const cellLine = this.scroll.create(TableCellLine.blotName, {\r\n row: rId,\r\n cell: id,\r\n rowspan: cellFormats.rowspan,\r\n })\r\n tableCell.appendChild(cellLine)\r\n\r\n if (ref) {\r\n tableRow.insertBefore(tableCell, ref)\r\n }\r\n else {\r\n tableRow.appendChild(tableCell)\r\n }\r\n affectedCells.push(tableCell)\r\n })\r\n\r\n // insert new tableCol\r\n const tableCol = this.scroll.create(TableCol.blotName, true)\r\n let colRef\r\n if (isRight) {\r\n colRef = tableCols[colIndex] && tableCols[colIndex].next\r\n }\r\n else {\r\n colRef = tableCols[colIndex]\r\n }\r\n\r\n if (colRef) {\r\n tableColGroup.insertBefore(tableCol, colRef)\r\n }\r\n else {\r\n tableColGroup.appendChild(tableCol)\r\n }\r\n\r\n modifiedCells.forEach((cell) => {\r\n const cellColspan = cell.formats().colspan\r\n cell.format('colspan', parseInt(cellColspan, 10) + 1)\r\n affectedCells.push(cell)\r\n })\r\n\r\n affectedCells.sort((cellA, cellB) => {\r\n const y1 = cellA.domNode.getBoundingClientRect().y\r\n const y2 = cellB.domNode.getBoundingClientRect().y\r\n return y1 - y2\r\n })\r\n\r\n this.updateTableWidth()\r\n return affectedCells\r\n }\r\n\r\n insertRow(compareRect, isDown, editorWrapper) {\r\n const [body] = this.descendants(TableBody)\r\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\r\n return\r\n }\r\n\r\n const tableCells = this.descendants(TableCell)\r\n const rId = rowId()\r\n const newRow = this.scroll.create(TableRow.blotName, {\r\n row: rId,\r\n })\r\n const addBelowCells = []\r\n const modifiedCells = []\r\n const affectedCells = []\r\n\r\n tableCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (isDown) {\r\n if (Math.abs(cellRect.y1 - compareRect.y1) < ERROR_LIMIT) {\r\n addBelowCells.push(cell)\r\n }\r\n else if (compareRect.y1 - cellRect.y > ERROR_LIMIT && compareRect.y1 - cellRect.y1 < -ERROR_LIMIT) {\r\n modifiedCells.push(cell)\r\n }\r\n }\r\n else {\r\n if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {\r\n addBelowCells.push(cell)\r\n }\r\n else if (compareRect.y - cellRect.y > ERROR_LIMIT && compareRect.y - cellRect.y1 < -ERROR_LIMIT) {\r\n modifiedCells.push(cell)\r\n }\r\n }\r\n })\r\n\r\n // ordered table cells with rect.x, fix error for inserting\r\n // new table cell in complicated table with wrong order.\r\n const sortFunc = (cellA, cellB) => {\r\n const x1 = cellA.domNode.getBoundingClientRect().x\r\n const x2 = cellB.domNode.getBoundingClientRect().x\r\n return x1 - x2\r\n }\r\n addBelowCells.sort(sortFunc)\r\n\r\n addBelowCells.forEach((cell) => {\r\n const cId = cellId()\r\n const cellFormats = cell.formats()\r\n\r\n const tableCell = this.scroll.create(\r\n TableCell.blotName,\r\n { ...CELL_DEFAULT, row: rId, cell: cId, colspan: cellFormats.colspan },\r\n )\r\n const cellLine = this.scroll.create(TableCellLine.blotName, {\r\n row: rId,\r\n cell: cId,\r\n colspan: cellFormats.colspan,\r\n })\r\n const empty = this.scroll.create(Break.blotName)\r\n cellLine.appendChild(empty)\r\n tableCell.appendChild(cellLine)\r\n newRow.appendChild(tableCell)\r\n affectedCells.push(tableCell)\r\n })\r\n\r\n modifiedCells.forEach((cell) => {\r\n const cellRowspan = parseInt(cell.formats().rowspan, 10)\r\n cell.format('rowspan', cellRowspan + 1)\r\n affectedCells.push(cell)\r\n })\r\n\r\n const refRow = this.rows().find((row) => {\r\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper)\r\n if (isDown) {\r\n return Math.abs(rowRect.y - compareRect.y - compareRect.height) < ERROR_LIMIT\r\n }\r\n else {\r\n return Math.abs(rowRect.y - compareRect.y) < ERROR_LIMIT\r\n }\r\n })\r\n body.insertBefore(newRow, refRow)\r\n\r\n // reordering affectedCells\r\n affectedCells.sort(sortFunc)\r\n return affectedCells\r\n }\r\n\r\n mergeCells(_compareRect, mergingCells, rowspan, colspan, _editorWrapper) {\r\n const mergedCell = mergingCells.reduce((result, tableCell, index) => {\r\n if (index !== 0) {\r\n if (result) {\r\n tableCell.moveChildren(result)\r\n }\r\n tableCell.remove()\r\n }\r\n else {\r\n tableCell.format('colspan', colspan)\r\n tableCell.format('rowspan', rowspan)\r\n result = tableCell\r\n if (rowspan > 1) {\r\n // fix: 比较当前单元格高度样式与rowspan最小高度,小于则设置高度,不判断实际高度,因为合并时这一刻实际高度可能高于最小高度\r\n const minHeight = CELL_MIN_HEIGHT * rowspan + rowspan - 1\r\n const cellHeight = parseInt(tableCell.domNode.style.height, 10) || 0\r\n if (cellHeight < minHeight) {\r\n tableCell.domNode.style.height = `${minHeight}px`\r\n }\r\n }\r\n }\r\n\r\n return result\r\n }, null)\r\n\r\n const rId = mergedCell.domNode.getAttribute('data-row')\r\n const cId = mergedCell.children.head.domNode.getAttribute('data-cell')\r\n mergedCell.children.forEach((cellLine) => {\r\n cellLine.domNode.setAttribute('data-parent-bg', mergedCell.domNode.style.backgroundColor)\r\n if (cellLine.children['head'].domNode.style) {\r\n cellLine.children['head'].domNode.style.backgroundColor = mergedCell.domNode.style.backgroundColor\r\n }\r\n\r\n if (!cellLine.prev || cellLine.domNode.innerText.trim()) {\r\n cellLine.format('cell', cId)\r\n cellLine.format('row', rId)\r\n cellLine.format('colspan', colspan)\r\n cellLine.format('rowspan', rowspan)\r\n }\r\n else {\r\n cellLine.remove()\r\n }\r\n })\r\n\r\n return mergedCell\r\n }\r\n\r\n unmergeCells(unmergingCells, editorWrapper) {\r\n let cellFormats: any = {}\r\n let cellRowspan = 1\r\n let cellColspan = 1\r\n\r\n unmergingCells.forEach((tableCell) => {\r\n const tableCellBgColor = tableCell.domNode.style.backgroundColor\r\n cellFormats = tableCell.formats()\r\n cellRowspan = cellFormats.rowspan\r\n cellColspan = cellFormats.colspan\r\n\r\n if (cellColspan > 1) {\r\n const ref = tableCell.next\r\n const row = tableCell.row()\r\n tableCell.format('colspan', 1)\r\n if (tableCell.domNode.children && tableCell.domNode.children[0].tagName === 'DIV' && tableCell.domNode.children[0].getAttribute('data-colspan')) {\r\n tableCell.domNode.children[0].setAttribute('data-colspan', 1)\r\n }\r\n for (let colspanIndex = cellColspan; colspanIndex > 1; colspanIndex--) {\r\n this.insertCell(row, ref, tableCellBgColor)\r\n }\r\n }\r\n\r\n if (cellRowspan > 1) {\r\n let rowspanIndex = cellRowspan\r\n let nextRow = tableCell.row().next\r\n while (rowspanIndex > 1) {\r\n const refInNextRow = nextRow.children.reduce((result, cell) => {\r\n const compareRect = getRelativeRect(tableCell.domNode.getBoundingClientRect(), editorWrapper)\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n if (Math.abs(compareRect.x1 - cellRect.x) < ERROR_LIMIT) {\r\n result = cell\r\n }\r\n return result\r\n }, null)\r\n\r\n for (let colspanIndex = cellColspan; colspanIndex > 0; colspanIndex--) {\r\n this.insertCell(nextRow, refInNextRow, tableCellBgColor)\r\n }\r\n\r\n rowspanIndex -= 1\r\n nextRow = nextRow.next\r\n }\r\n\r\n tableCell.domNode.removeAttribute('style')\r\n if (tableCell.domNode.children && tableCell.domNode.children[0].tagName === 'DIV' && tableCell.domNode.children[0].getAttribute('data-rowspan')) {\r\n tableCell.domNode.children[0].setAttribute('data-rowspan', 1)\r\n }\r\n tableCell.format('rowspan', 1)\r\n }\r\n })\r\n }\r\n\r\n emptyCells(selectedTds) {\r\n selectedTds.forEach((selectedTd) => {\r\n // 构造空的table cell line, 优先使用单元格已有rowId和cellId,避免从table-cell-line向上层td提交id时不一致导致错位\r\n const cellFormats = selectedTd.formats()\r\n const cellLine = this.scroll.create(TableCellLine.blotName, {\r\n row: cellFormats.row || rowId(),\r\n cell: cellFormats.cell || cellId(),\r\n rowspan: cellFormats.rowspan,\r\n colspan: cellFormats.colspan,\r\n })\r\n const empty = this.scroll.create(Break.blotName)\r\n cellLine.appendChild(empty)\r\n\r\n selectedTd.domNode.innerHTML = ''\r\n selectedTd.appendChild(cellLine)\r\n })\r\n }\r\n\r\n rows() {\r\n const body = this.children.tail\r\n if (isNullOrUndefined(body)) {\r\n return []\r\n }\r\n return body.children.map(row => row)\r\n }\r\n}\r\nTableContainer.blotName = 'ql-table-container'\r\nTableContainer.className = 'quill-better-table'\r\nTableContainer.tagName = 'TABLE'\r\n\r\n// @dynamic\r\nclass TableViewWrapper extends Container {\r\n static blotName: string\r\n static tagName: string\r\n static className: string\r\n static allowedChildren: any\r\n constructor(scroll, domNode) {\r\n super(scroll, domNode)\r\n const quill = Quill.find(scroll.domNode.parentNode)\r\n // fix: 只读模式时超长表格默认包含滚动条\r\n if (quill.options.readOnly) {\r\n domNode.style.overflow = 'auto'\r\n }\r\n domNode.addEventListener(\r\n 'scroll',\r\n (e) => {\r\n const tableModule = quill.getModule('better-table')\r\n if (tableModule.columnTool) {\r\n tableModule.columnTool.domNode.scrollLeft = e.target.scrollLeft\r\n }\r\n\r\n if (tableModule.tableSelection && tableModule.tableSelection.selectedTds.length > 0) {\r\n tableModule.tableSelection.repositionHelpLines()\r\n }\r\n },\r\n false,\r\n )\r\n }\r\n}\r\nTableViewWrapper.blotName = 'table-view'\r\nTableViewWrapper.className = 'quill-better-table-wrapper'\r\nTableViewWrapper.tagName = 'DIV'\r\n\r\nTableViewWrapper.allowedChildren = [TableContainer]\r\nTableContainer.requiredContainer = TableViewWrapper\r\n\r\nTableContainer.allowedChildren = [TableBody, TableColGroup]\r\nTableBody.requiredContainer = TableContainer\r\n\r\nTableBody.allowedChildren = [TableRow]\r\nTableRow.requiredContainer = TableBody\r\n\r\nTableRow.allowedChildren = [TableCell]\r\nTableCell.requiredContainer = TableRow\r\n\r\nTableCell.allowedChildren = [TableCellLine, Header, ListItem, ListContainer]\r\nTableCellLine.requiredContainer = TableCell\r\n\r\nTableColGroup.allowedChildren = [TableCol]\r\nTableColGroup.requiredContainer = TableContainer\r\n\r\nTableCol.requiredContainer = TableColGroup\r\n\r\nfunction rowId() {\r\n const id = Math.random().toString(36).slice(2, 6)\r\n return `row-${id}`\r\n}\r\n\r\nfunction cellId() {\r\n const id = Math.random().toString(36).slice(2, 6)\r\n return `cell-${id}`\r\n}\r\n\r\nfunction reduceFormats(domNode: HTMLElement, formats: Record<string, any>) {\r\n return [...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS].reduce((tableFormats, attribute) => {\r\n if (domNode.hasAttribute(`data-${attribute}`)) {\r\n tableFormats[attribute] = domNode.getAttribute(`data-${attribute}`) || undefined\r\n }\r\n return tableFormats\r\n }, formats)\r\n}\r\n\r\nexport {\r\n CELL_ATTRIBUTES,\r\n CELL_IDENTITY_KEYS,\r\n cellId,\r\n rowId,\r\n TableBody,\r\n TableCell,\r\n TableCellLine,\r\n TableCol,\r\n TableColGroup,\r\n TableContainer,\r\n TableRow,\r\n TableViewWrapper,\r\n}\r\n"],"names":["formats"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"table.es.js","sources":["../../../../src/table/formats/table.ts"],"sourcesContent":["import Quill from 'quill'\nimport { isNullOrUndefined } from '../../config/editor.utils'\nimport { compare } from '../../utils/method'\nimport {\n CELL_ATTRIBUTES,\n CELL_DEFAULT,\n CELL_IDENTITY_KEYS,\n CELL_MIN_HEIGHT,\n COL_ATTRIBUTES,\n COL_DEFAULT,\n ERROR_LIMIT,\n} from '../table-config'\nimport { getRelativeRect } from '../utils'\nimport Header from './header'\nimport ListItem, { ListContainer } from './list'\n\nconst Break = Quill.imports['blots/break']\nconst Block = Quill.imports['blots/block']\nconst Container = Quill.imports['blots/container']\n\n// @dynamic\nclass TableCellLine extends Block {\n static requiredContainer: any\n static tagName: string\n static className: string\n static blotName: any\n domNode: any\n statics: any\n wrap: any\n parent: any\n\n static create(value) {\n const node = super.create(value)\n\n // fix: when td has background-color, quill can't set it to table-cell blot\n if (value.tdBgColor) {\n node.setAttribute(`data-parent-bg`, value.tdBgColor)\n delete value.tdBgColor\n }\n\n CELL_IDENTITY_KEYS.forEach((key) => {\n const identityMaker = key === 'row' ? rowId : cellId\n node.setAttribute(`data-${key}`, value[key] || identityMaker())\n })\n\n CELL_ATTRIBUTES.forEach((attrName) => {\n const keyValue = value[attrName] || CELL_DEFAULT[attrName]\n keyValue && node.setAttribute(`data-${attrName}`, keyValue)\n })\n\n if (value.height) {\n node.setAttribute('height', value.height)\n }\n\n return node\n }\n\n static formats(domNode) {\n const formats = {}\n if (formats.list) {\n formats.list = domNode.classList.item(0)\n }\n return reduceFormats(domNode, formats)\n }\n\n toggleAttribute(name, value) {\n if (value) {\n this.domNode.setAttribute(name, value)\n }\n else {\n this.domNode.removeAttribute(name)\n }\n }\n\n formatChildren(name, value) {\n this.children.forEach((child) => {\n child.format && child.format(name, value)\n if (!child.domNode.style) {\n return\n }\n if (child.domNode.tagName === 'SPAN' && value) {\n child.domNode.style.backgroundColor = value\n }\n else {\n child.domNode.style.backgroundColor = 'initial'\n }\n })\n }\n\n format(name, value) {\n if ([...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS, 'parent-bg'].includes(name)) {\n if (value) {\n this.domNode.setAttribute(`data-${name}`, value)\n }\n else {\n this.domNode.removeAttribute(`data-${name}`)\n }\n }\n else if (name === 'header') {\n if (!value) {\n return\n }\n const { row, cell, rowspan, colspan }: any = TableCellLine.formats(this.domNode)\n super.format(name, {\n value,\n row,\n cell,\n rowspan,\n colspan,\n })\n }\n else {\n super.format(name, value)\n }\n switch (true) {\n case name === 'cell-bg': {\n this.toggleAttribute('data-cell-bg', value)\n }\n }\n }\n\n optimize(context) {\n super.optimize(context)\n\n // cover shadowBlot's wrap call, pass params parentBlot initialize\n // needed\n const { row, cell, rowspan, colspan, cellBg } = this.domNode.dataset\n const formats: Record<string, any> = TableCellLine.formats(this.domNode)\n const parentFormats = this.parent.formats()\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\n this.wrap(this.statics.requiredContainer.blotName, { row, cell, rowspan, colspan, cellBg })\n }\n else if (!compare(formats, parentFormats)) {\n this.parent.format('row', formats.row)\n this.parent.format('cell', formats.cell)\n this.parent.format('rowspan', formats.rowspan)\n this.parent.format('colspan', formats.colspan)\n formats['cell-bg'] && this.parent.setCellBg(formats['cell-bg'])\n }\n\n const parentHeight = this.domNode.getAttribute('height')\n if (parentHeight) {\n this.parent.domNode.style.height = parentHeight\n }\n }\n\n tableCell() {\n return this.parent\n }\n}\nTableCellLine.blotName = 'table-cell-line'\nTableCellLine.className = 'qlbt-cell-line'\nTableCellLine.tagName = 'DIV'\n\n// @dynamic\nclass TableCell extends Container {\n static allowedChildren: any\n static blotName: any\n static requiredContainer: any\n static tagName: string\n next: any\n children: any\n parent: any\n domNode: any\n statics: any\n wrap: any\n splitAfter: any\n prev: any\n scroll: any\n\n static create(value = { row: rowId() }) {\n const node = super.create(value)\n\n CELL_IDENTITY_KEYS.forEach((key) => {\n node.setAttribute(`data-${key}`, value[key])\n })\n\n CELL_ATTRIBUTES.forEach((attrName) => {\n if (value[attrName]) {\n node.setAttribute(attrName, value[attrName])\n }\n })\n\n return node\n }\n\n static formats(domNode) {\n const formats = {\n height: undefined,\n row: undefined,\n }\n\n formats.height = domNode.getAttribute('height') || undefined\n\n if (domNode.hasAttribute('data-row')) {\n formats.row = domNode.getAttribute('data-row')\n }\n\n if (domNode.hasAttribute('data-cell-bg')) {\n formats['cell-bg'] = domNode.getAttribute('data-cell-bg') || undefined\n }\n return CELL_ATTRIBUTES.reduce((formats, attribute) => {\n if (domNode.hasAttribute(attribute)) {\n formats[attribute] = domNode.getAttribute(attribute)\n }\n\n return formats\n }, formats)\n }\n\n checkMerge() {\n if (super.checkMerge() && !isNullOrUndefined(this.next.children.head)) {\n const getCellId = (node) => {\n return (\n (node.formats && node.formats()[node.statics.blotName]) || {\n cell: node.domNode.getAttribute('data-cell'),\n }\n )\n }\n const thisHead = getCellId(this.children.head)\n const thisTail = getCellId(this.children.tail)\n const nextHead = getCellId(this.next.children.head)\n const nextTail = getCellId(this.next.children.tail)\n return thisHead.cell === thisTail.cell && thisHead.cell === nextHead.cell && thisHead.cell === nextTail.cell\n }\n return false\n }\n\n cellOffset() {\n if (this.parent) {\n return this.parent.children.indexOf(this)\n }\n return -1\n }\n\n formats() {\n const formats = {}\n\n if (this.domNode.hasAttribute('data-row')) {\n formats.row = this.domNode.getAttribute('data-row')\n }\n if (this.domNode.hasAttribute('data-cell')) {\n formats.cell = this.domNode.getAttribute('data-cell')\n }\n\n return CELL_ATTRIBUTES.reduce((tableFormats, attribute) => {\n if (this.domNode.hasAttribute(attribute)) {\n tableFormats[attribute] = this.domNode.getAttribute(attribute)\n }\n\n return tableFormats\n }, formats)\n }\n\n toggleAttribute(name, value) {\n if (value) {\n this.domNode.setAttribute(name, value)\n }\n else {\n this.domNode.removeAttribute(name)\n }\n }\n\n formatChildren(name, value) {\n this.children.forEach((child) => {\n child.format(name, value)\n })\n }\n\n /**\n * this method is for TableCellLine to change cell background color\n * if use `format('cell-bg', value)` will loop trigger\n * TableCellLine.optimize -> TableCell.format -> TableCellLine.optimize ...\n */\n setCellBg(value?: string) {\n if (value) {\n this.domNode.style.backgroundColor = value\n }\n else {\n this.domNode.style.backgroundColor = 'initial'\n }\n }\n\n format(name, value) {\n const quill = Quill.find(this.scroll.domNode.parentNode)\n switch (true) {\n case CELL_ATTRIBUTES.includes(name):\n this.toggleAttribute(name, value)\n break\n case ['row', 'cell'].includes(name):\n this.toggleAttribute(`data-${name}`, value)\n break\n case name === 'background': {\n const hasBgColor = this.domNode.querySelectorAll('div.qlbt-cell-line[data-parent-bg]')\n hasBgColor.forEach(child => child.removeAttribute('data-parent-bg'))\n this.domNode.style.background = ''\n this.domNode.style.backgroundColor = value\n this.children.head.format('parent-bg', value)\n break\n }\n // TODO: 其他格式可同理实现,但已有格式清除时会清除所有格式,待解决\n case name === 'size': {\n const start = quill.getIndex(this.children.head)\n const total = quill.getIndex(this.children.tail) + this.children.tail.length()\n const length = total - start > 0 ? total - start : 0\n quill.setSelection(start, length, Quill.sources.USER)\n quill.format(name, value, Quill.sources.USER)\n // 设置选区后需清除选区,否则会固定处理选区内容\n quill.setSelection(start)\n break\n }\n case name === 'cell-bg': {\n this.toggleAttribute('data-cell-bg', value)\n this.toggleAttribute('data-parent-bg', value)\n this.formatChildren(name, value)\n this.setCellBg(value)\n break\n }\n }\n }\n\n optimize(context) {\n // fix: when td has background-color, quill can't set it to table-cell bolt\n const hasBg: any = Array.from(this.domNode.childNodes).find((item: any) => item.getAttribute('data-parent-bg'))\n const bgColor = hasBg && hasBg.getAttribute('data-parent-bg')\n if (bgColor && bgColor !== this.domNode.style.backgroundColor) {\n this.domNode.style.backgroundColor = bgColor\n }\n\n const rId = this.domNode.getAttribute('data-row')\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\n this.wrap(this.statics.requiredContainer.blotName, {\n row: rId,\n })\n }\n else if (rId !== this.parent.formats().row) {\n this.parent.format('row', rId)\n }\n\n this.children.forEach((child) => {\n if (isNullOrUndefined(child.next)) {\n return\n }\n const childFormats: any = this.getFormat(child.domNode)\n const nextFormats: any = this.getFormat(child.next.domNode)\n if (childFormats.cell !== nextFormats.cell) {\n const next = this.splitAfter(child)\n if (next) {\n next.optimize()\n }\n // We might be able to merge with prev now\n if (this.prev) {\n this.prev.optimize()\n }\n }\n })\n\n super.optimize(context)\n }\n\n // 兼容读取TableCell中的子blot,包括table-cell-line、line、head\n getFormat(domNode) {\n const formats = {}\n const firstChild = domNode.childNodes[0]\n if (firstChild && domNode.tagName === 'OL') {\n formats.list = firstChild.classList.item(0)\n }\n\n return reduceFormats(domNode, formats)\n }\n\n row() {\n return this.parent\n }\n\n rowOffset() {\n if (this.row()) {\n return -1\n }\n return this.row().rowOffset()\n }\n\n table() {\n return this.row() && this.row().table()\n }\n}\nTableCell.blotName = 'table'\nTableCell.tagName = 'TD'\n\n// @dynamic\nclass TableRow extends Container {\n static requiredContainer: any\n static allowedChildren: any\n static blotName: string\n static tagName: string\n next: any\n children: any\n domNode: any\n statics: any\n wrap: any\n splitAfter: any\n enforceAllowedChildren: any\n uiNode: any\n parent: any\n prev: any\n\n static create(value) {\n const node = super.create(value)\n if (value.row) {\n node.setAttribute('data-row', value.row)\n }\n return node\n }\n\n checkMerge() {\n if (super.checkMerge() && !isNullOrUndefined(this.next.children.head)) {\n const thisHead = this.children.head.formats()\n const thisTail = this.children.tail.formats()\n const nextHead = this.next.children.head.formats()\n const nextTail = this.next.children.tail.formats()\n\n return thisHead.row === thisTail.row && thisHead.row === nextHead.row && thisHead.row === nextTail.row\n }\n return false\n }\n\n formats() {\n return ['row'].reduce((formats, attrName) => {\n if (this.domNode.hasAttribute(`data-${attrName}`)) {\n formats[attrName] = this.domNode.getAttribute(`data-${attrName}`)\n }\n return formats\n }, {})\n }\n\n format(key, value) {\n this.domNode.setAttribute(`data-${key}`, value)\n }\n\n optimize(context) {\n // optimize function of ShadowBlot\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\n this.wrap(this.statics.requiredContainer.blotName)\n }\n\n this.children.forEach((child) => {\n if (isNullOrUndefined(child.next)) {\n return\n }\n const childFormats = child.formats()\n const nextFormats = child.next.formats()\n if (childFormats.row !== nextFormats.row) {\n const next = this.splitAfter(child)\n if (next) {\n next.optimize()\n }\n if (this.prev) {\n this.prev.optimize()\n }\n }\n })\n\n super.optimize(context)\n }\n\n rowOffset() {\n if (!this.parent) {\n return -1\n }\n return this.parent.children.indexOf(this)\n }\n\n table() {\n return this.parent && this.parent.parent\n }\n}\nTableRow.blotName = 'table-row'\nTableRow.tagName = 'TR'\n\n// @dynamic\nclass TableBody extends Container {\n static requiredContainer: any\n static allowedChildren: any\n static blotName: string\n static tagName: string\n}\nTableBody.blotName = 'table-body'\nTableBody.tagName = 'TBODY'\n\n// @dynamic\nclass TableCol extends Block {\n static requiredContainer: any\n static blotName: string\n static tagName: string\n domNode: any\n\n static create(value) {\n const node = super.create(value)\n COL_ATTRIBUTES.forEach((attrName) => {\n node.setAttribute(`${attrName}`, value[attrName] || COL_DEFAULT[attrName])\n })\n return node\n }\n\n static formats(domNode) {\n return COL_ATTRIBUTES.reduce((formats, attribute) => {\n if (domNode.hasAttribute(`${attribute}`)) {\n formats[attribute] = domNode.getAttribute(`${attribute}`) || undefined\n }\n return formats\n }, {})\n }\n\n format(name, value) {\n if (COL_ATTRIBUTES.includes(name)) {\n this.domNode.setAttribute(`${name}`, value || COL_DEFAULT[name])\n }\n else {\n super.format(name, value)\n }\n }\n\n html() {\n return this.domNode.outerHTML\n }\n}\nTableCol.blotName = 'table-col'\nTableCol.tagName = 'col'\n\n// @dynamic\nclass TableColGroup extends Container {\n static requiredContainer: any\n static allowedChildren: any\n static blotName: string\n static tagName: string\n parent: any\n statics: any\n\n optimize(context) {\n super.optimize(context)\n // optimize 是当前slot更新后调用的callback方法,当TableBody更新后判断父容器的存在和类型相符则调用更新表格宽度方法更新宽度\n // 切记不要在当前slot内调用能改变当前slot的方法,会造成无限循环,一般通过子更新改变父较好\n if (this.parent && this.statics.requiredContainer && this.parent instanceof this.statics.requiredContainer) {\n this.parent.updateTableWidth()\n }\n // 此时colgroup创建完毕,检查colgroup的col数量是否正确\n // fix:colgroup的col数量不正确导致最后一列宽度为空\n if (this.parent.parent.domNode.className === 'quill-better-table-wrapper'\n && this.parent.parent.domNode.tagName === 'DIV'\n && this.parent.domNode.children.length >= 2\n && this.parent.domNode.children[0].tagName === 'COLGROUP'\n && this.parent.domNode.children[1].tagName === 'TBODY'\n ) {\n let trId = ''\n let colSpan = 0\n let colgroupNumber = 0\n for (let i = 0; i < this.parent.domNode.children.length; i++) {\n if (this.parent.domNode.children[i].tagName === 'TBODY') {\n if (trId === '') {\n trId = this.parent.domNode.children[i].children[0].getAttribute('data-row')\n }\n colSpan = this.findTdColspanInTbody(this.parent.domNode.children[i], trId)\n }\n else if (this.parent.domNode.children[i].tagName === 'COLGROUP') {\n colgroupNumber = this.parent.domNode.children[i].children.length\n }\n }\n let elementSibling = this.parent.domNode.nextElementSibling\n\n while (elementSibling && elementSibling.tagName === 'TABLE') {\n for (let i = 0; i < elementSibling.children.length; i++) {\n if (elementSibling.children[i].tagName === 'TBODY') {\n colSpan += this.findTdColspanInTbody(elementSibling.children[i], trId)\n }\n }\n elementSibling = elementSibling.nextElementSibling\n }\n\n if (colgroupNumber < colSpan) {\n const length = colSpan - colgroupNumber\n\n for (let i = 0; i < length; i++) {\n const newCol = document.createElement('col')\n newCol.width = this.parent.domNode.children[0].children[this.parent.domNode.children[0].children.length - 1].width\n const newBr = document.createElement('br')\n newCol.appendChild(newBr)\n this.parent.domNode.children[0].appendChild(newCol)\n this.parent.domNode.style.width += newCol.width\n }\n }\n }\n }\n\n // this.parent.domNode.children[1].children[0].children[0].colSpan\n findTdColspanInTbody(tbody, trId) {\n let colSpan = 0\n // let tbodyChildrenLength\n for (let i = 0; i < tbody.children.length; i++) {\n if (tbody.children[i].getAttribute('data-row') !== trId) {\n return colSpan\n }\n for (let j = 0; j < tbody.children[i].children.length; j++) {\n if (tbody.children[i].children[j].colSpan) {\n colSpan += tbody.children[i].children[j].colSpan\n }\n }\n }\n return colSpan\n }\n}\nTableColGroup.blotName = 'table-col-group'\nTableColGroup.tagName = 'colgroup'\n\n// @dynamic\nclass TableContainer extends Container {\n static blotName: string\n static className: string\n static tagName: string\n static requiredContainer: any\n static allowedChildren: any\n domNode: any\n parent: any\n children: any\n descendants: any\n scroll: any\n remove: any\n static create() {\n const node = super.create()\n return node\n }\n\n constructor(scroll, domNode) {\n super(scroll, domNode)\n domNode.setAttribute('contenteditable', false)\n this.updateTableWidth()\n }\n\n updateTableWidth() {\n let colGroup = this.colGroup()\n if (!colGroup) {\n // undo时原表格dom被移除,因此colGroup和domNode都不对应当前新表格,需从父容器dom树重新获取\n // 如果表格有style属性则不为新添加表格,避免错误赋值\n if (this.parent && this.parent.children.head && this.domNode.hasAttribute('style')) {\n colGroup = this.parent.children.head.children.head\n this.domNode = this.parent.children.head.domNode\n }\n else if (this.domNode.tagName === 'TABLE') {\n // this.domNode.forEach\n return\n }\n else {\n return\n }\n }\n const tableWidth = colGroup.children.reduce((sumWidth, col) => {\n // 兼容 table-col 不存在的情况\n const tableCol = col.formats()[TableCol.blotName]\n let tableColWidth = COL_DEFAULT.width\n if (tableCol && tableCol.width) {\n tableColWidth = Number.parseInt(tableCol.width, 10)\n }\n sumWidth = sumWidth + tableColWidth\n return sumWidth\n }, 0)\n this.domNode.removeAttribute('style')\n this.domNode.style.width = `${tableWidth}px`\n // 当表格加载结束后修正width设定为auto的列宽度\n if (colGroup.next) {\n setTimeout(() => {\n let tdIndex = 0\n let maxTds\n const colNum = colGroup.children.length\n const tableRows = this.descendants(TableRow)\n // 查询单元格数等于列数的行作为宽度赋值依据\n for (let i = 0; i < tableRows.length; i++) {\n const tds = tableRows[i].domNode.querySelectorAll('td')\n if (tds.length === colNum) {\n maxTds = tds\n break\n }\n }\n colGroup.children.forEach((col) => {\n if (maxTds && col.domNode.width === 'auto') {\n const width = getComputedStyle(maxTds[tdIndex]).width\n const num = Number.parseInt(width, 10)\n col.domNode.width = (num < COL_DEFAULT.width && COL_DEFAULT.width) || num\n }\n tdIndex++\n })\n })\n }\n }\n\n cells(column) {\n return this.rows().map(row => row.children.at(column))\n }\n\n colGroup() {\n return this.children.head\n }\n\n deleteColumns(compareRect, delIndexes = [], editorWrapper) {\n const [body] = this.descendants(TableBody)\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\n return\n }\n\n const tableCells = this.descendants(TableCell)\n const removedCells = []\n const modifiedCells = []\n\n tableCells.forEach((cell) => {\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n\n if (cellRect.x + ERROR_LIMIT > compareRect.x && cellRect.x1 - ERROR_LIMIT < compareRect.x1) {\n removedCells.push(cell)\n }\n else if (cellRect.x < compareRect.x + ERROR_LIMIT && cellRect.x1 > compareRect.x1 - ERROR_LIMIT) {\n modifiedCells.push(cell)\n }\n })\n\n if (removedCells.length === tableCells.length) {\n this.tableDestroy()\n return true\n }\n\n // remove the matches column tool cell\n delIndexes.forEach(() => {\n const col = this.colGroup().children.at(delIndexes[0])\n if (!col || this.colGroup().children.at(delIndexes[0]).domNode !== this.colGroup().domNode.children[delIndexes[0]]) {\n this.colGroup().domNode.removeChild(this.colGroup().domNode.children[delIndexes[0]])\n }\n else {\n col.remove()\n }\n })\n\n removedCells.forEach((cell) => {\n cell.remove()\n })\n\n modifiedCells.forEach((cell) => {\n const cellColspan = Number.parseInt(cell.formats().colspan, 10)\n // const cellWidth = parseInt(cell.formats().width, 10);\n cell.format('colspan', cellColspan - delIndexes.length)\n })\n\n this.updateTableWidth()\n }\n\n deleteRow(compareRect, editorWrapper) {\n const [body] = this.descendants(TableBody)\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\n return\n }\n\n const tableCells = this.descendants(TableCell)\n const tableRows = this.descendants(TableRow)\n const removedCells = [] // cells to be removed\n const modifiedCells = [] // cells to be modified\n const fallCells = [] // cells to fall into next row\n\n tableCells.forEach((cell) => {\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n\n if (cellRect.y > compareRect.y - ERROR_LIMIT && cellRect.y1 < compareRect.y1 + ERROR_LIMIT) {\n removedCells.push(cell)\n }\n else if (cellRect.y < compareRect.y + ERROR_LIMIT && cellRect.y1 > compareRect.y1 - ERROR_LIMIT) {\n modifiedCells.push(cell)\n\n if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {\n fallCells.push(cell)\n }\n }\n })\n\n if (removedCells.length === tableCells.length) {\n this.tableDestroy()\n return\n }\n\n // compute length of removed rows\n const removedRowsLength = this.rows().reduce((sum, row) => {\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper)\n\n if (rowRect.y > compareRect.y - ERROR_LIMIT && rowRect.y1 < compareRect.y1 + ERROR_LIMIT) {\n sum += 1\n }\n return sum\n }, 0)\n\n // it must execute before the table layout changed with other operation\n fallCells.forEach((cell) => {\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n const nextRow = cell.parent.next\n const cellsInNextRow = nextRow.children\n\n const refCell = cellsInNextRow.reduce((ref, compareCell) => {\n const compareCellRect = getRelativeRect(compareCell.domNode.getBoundingClientRect(), editorWrapper)\n if (cellRect.x1 - compareCellRect.x < ERROR_LIMIT) {\n ref = compareCell\n }\n return ref\n }, null)\n\n nextRow.insertBefore(cell, refCell)\n const curRowId = nextRow.formats().row\n cell.format('row', curRowId)\n cell.children.forEach((cellLine) => {\n cellLine.format('row', curRowId)\n })\n })\n\n modifiedCells.forEach((cell) => {\n const cellRowspan = Number.parseInt(cell.formats().rowspan, 10)\n const curRowspan = cellRowspan - removedRowsLength\n cell.domNode.removeAttribute('style')\n cell.format('rowspan', curRowspan)\n cell.children.forEach((cellLine) => {\n cellLine.format('rowspan', curRowspan)\n })\n })\n\n removedCells.forEach((cell) => {\n cell.remove()\n })\n\n // fix: There will be a empty tr left if i delete the last row of a table,\n // this will cause the bottom border of the table to disappear,\n // and the empty tr will execute the matchTableRow method.\n tableRows.forEach((row) => {\n if (row.children.length === 0) {\n row.remove()\n }\n })\n }\n\n tableDestroy() {\n const quill = Quill.find(this.scroll.domNode.parentNode)\n const tableModule = quill.getModule('better-table')\n this.remove()\n tableModule.hideTableTools()\n quill.update(Quill.sources.USER)\n }\n\n insertCell(tableRow, ref, bg = '') {\n const id = cellId()\n const rId = tableRow.formats().row\n const tableCell = this.scroll.create(\n TableCell.blotName,\n { ...CELL_DEFAULT, row: rId },\n )\n tableCell.domNode.style.backgroundColor = bg\n const cellLine = this.scroll.create(TableCellLine.blotName, {\n row: rId,\n cell: id,\n })\n tableCell.appendChild(cellLine)\n\n if (ref) {\n tableRow.insertBefore(tableCell, ref)\n }\n else {\n tableRow.appendChild(tableCell)\n }\n }\n\n insertColumn(compareRect, colIndex, isRight = true, editorWrapper) {\n const [body] = this.descendants(TableBody)\n const [tableColGroup] = this.descendants(TableColGroup)\n const tableCols = this.descendants(TableCol)\n const addAsideCells = []\n const modifiedCells = []\n const affectedCells = []\n\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\n return\n }\n const tableCells = this.descendants(TableCell)\n tableCells.forEach((cell) => {\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n\n if (isRight) {\n if (Math.abs(cellRect.x1 - compareRect.x1) < ERROR_LIMIT) {\n // the right of selected boundary equal to the right of table cell,\n // add a new table cell right aside this table cell\n addAsideCells.push(cell)\n }\n else if (compareRect.x1 - cellRect.x > ERROR_LIMIT && compareRect.x1 - cellRect.x1 < -ERROR_LIMIT) {\n // the right of selected boundary is inside this table cell\n // colspan of this table cell will increase 1\n modifiedCells.push(cell)\n }\n }\n else {\n if (Math.abs(cellRect.x - compareRect.x) < ERROR_LIMIT) {\n // left of selected boundary equal to left of table cell,\n // add a new table cell left aside this table cell\n addAsideCells.push(cell)\n }\n else if (compareRect.x - cellRect.x > ERROR_LIMIT && compareRect.x - cellRect.x1 < -ERROR_LIMIT) {\n // the left of selected boundary is inside this table cell\n // colspan of this table cell will increase 1\n modifiedCells.push(cell)\n }\n }\n })\n\n addAsideCells.forEach((cell) => {\n const ref = isRight ? cell.next : cell\n const id = cellId()\n const tableRow = cell.parent\n const rId = tableRow.formats().row\n const cellFormats = cell.formats()\n const tableCell = this.scroll.create(\n TableCell.blotName,\n { ...CELL_DEFAULT, row: rId, rowspan: cellFormats.rowspan },\n )\n const cellLine = this.scroll.create(TableCellLine.blotName, {\n row: rId,\n cell: id,\n rowspan: cellFormats.rowspan,\n })\n tableCell.appendChild(cellLine)\n\n if (ref) {\n tableRow.insertBefore(tableCell, ref)\n }\n else {\n tableRow.appendChild(tableCell)\n }\n affectedCells.push(tableCell)\n })\n\n // insert new tableCol\n const tableCol = this.scroll.create(TableCol.blotName, true)\n let colRef\n if (isRight) {\n colRef = tableCols[colIndex] && tableCols[colIndex].next\n }\n else {\n colRef = tableCols[colIndex]\n }\n\n if (colRef) {\n tableColGroup.insertBefore(tableCol, colRef)\n }\n else {\n tableColGroup.appendChild(tableCol)\n }\n\n modifiedCells.forEach((cell) => {\n const cellColspan = cell.formats().colspan\n cell.format('colspan', Number.parseInt(cellColspan, 10) + 1)\n affectedCells.push(cell)\n })\n\n affectedCells.sort((cellA, cellB) => {\n const y1 = cellA.domNode.getBoundingClientRect().y\n const y2 = cellB.domNode.getBoundingClientRect().y\n return y1 - y2\n })\n\n this.updateTableWidth()\n return affectedCells\n }\n\n insertRow(compareRect, isDown, editorWrapper) {\n const [body] = this.descendants(TableBody)\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\n return\n }\n\n const tableCells = this.descendants(TableCell)\n const rId = rowId()\n const newRow = this.scroll.create(TableRow.blotName, {\n row: rId,\n })\n const addBelowCells = []\n const modifiedCells = []\n const affectedCells = []\n\n tableCells.forEach((cell) => {\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n\n if (isDown) {\n if (Math.abs(cellRect.y1 - compareRect.y1) < ERROR_LIMIT) {\n addBelowCells.push(cell)\n }\n else if (compareRect.y1 - cellRect.y > ERROR_LIMIT && compareRect.y1 - cellRect.y1 < -ERROR_LIMIT) {\n modifiedCells.push(cell)\n }\n }\n else {\n if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {\n addBelowCells.push(cell)\n }\n else if (compareRect.y - cellRect.y > ERROR_LIMIT && compareRect.y - cellRect.y1 < -ERROR_LIMIT) {\n modifiedCells.push(cell)\n }\n }\n })\n\n // ordered table cells with rect.x, fix error for inserting\n // new table cell in complicated table with wrong order.\n const sortFunc = (cellA, cellB) => {\n const x1 = cellA.domNode.getBoundingClientRect().x\n const x2 = cellB.domNode.getBoundingClientRect().x\n return x1 - x2\n }\n addBelowCells.sort(sortFunc)\n\n addBelowCells.forEach((cell) => {\n const cId = cellId()\n const cellFormats = cell.formats()\n\n const tableCell = this.scroll.create(\n TableCell.blotName,\n { ...CELL_DEFAULT, row: rId, cell: cId, colspan: cellFormats.colspan },\n )\n const cellLine = this.scroll.create(TableCellLine.blotName, {\n row: rId,\n cell: cId,\n colspan: cellFormats.colspan,\n })\n const empty = this.scroll.create(Break.blotName)\n cellLine.appendChild(empty)\n tableCell.appendChild(cellLine)\n newRow.appendChild(tableCell)\n affectedCells.push(tableCell)\n })\n\n modifiedCells.forEach((cell) => {\n const cellRowspan = Number.parseInt(cell.formats().rowspan, 10)\n cell.format('rowspan', cellRowspan + 1)\n affectedCells.push(cell)\n })\n\n const refRow = this.rows().find((row) => {\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper)\n if (isDown) {\n return Math.abs(rowRect.y - compareRect.y - compareRect.height) < ERROR_LIMIT\n }\n else {\n return Math.abs(rowRect.y - compareRect.y) < ERROR_LIMIT\n }\n })\n body.insertBefore(newRow, refRow)\n\n // reordering affectedCells\n affectedCells.sort(sortFunc)\n return affectedCells\n }\n\n mergeCells(_compareRect, mergingCells, rowspan, colspan, _editorWrapper) {\n const mergedCell = mergingCells.reduce((result, tableCell, index) => {\n if (index !== 0) {\n if (result) {\n tableCell.moveChildren(result)\n }\n tableCell.remove()\n }\n else {\n tableCell.format('colspan', colspan)\n tableCell.format('rowspan', rowspan)\n result = tableCell\n if (rowspan > 1) {\n // fix: 比较当前单元格高度样式与rowspan最小高度,小于则设置高度,不判断实际高度,因为合并时这一刻实际高度可能高于最小高度\n const minHeight = CELL_MIN_HEIGHT * rowspan + rowspan - 1\n const cellHeight = Number.parseInt(tableCell.domNode.style.height, 10) || 0\n if (cellHeight < minHeight) {\n tableCell.domNode.style.height = `${minHeight}px`\n }\n }\n }\n\n return result\n }, null)\n\n const rId = mergedCell.domNode.getAttribute('data-row')\n const cId = mergedCell.children.head.domNode.getAttribute('data-cell')\n mergedCell.children.forEach((cellLine) => {\n cellLine.domNode.setAttribute('data-parent-bg', mergedCell.domNode.style.backgroundColor)\n if (cellLine.children.head.domNode.style) {\n cellLine.children.head.domNode.style.backgroundColor = mergedCell.domNode.style.backgroundColor\n }\n\n if (!cellLine.prev || cellLine.domNode.textContent.trim()) {\n cellLine.format('cell', cId)\n cellLine.format('row', rId)\n cellLine.format('colspan', colspan)\n cellLine.format('rowspan', rowspan)\n }\n else {\n cellLine.remove()\n }\n })\n\n return mergedCell\n }\n\n unmergeCells(unmergingCells, editorWrapper) {\n let cellFormats: any = {}\n let cellRowspan = 1\n let cellColspan = 1\n\n unmergingCells.forEach((tableCell) => {\n const tableCellBgColor = tableCell.domNode.style.backgroundColor\n cellFormats = tableCell.formats()\n cellRowspan = cellFormats.rowspan\n cellColspan = cellFormats.colspan\n\n if (cellColspan > 1) {\n const ref = tableCell.next\n const row = tableCell.row()\n tableCell.format('colspan', 1)\n if (tableCell.domNode.children && tableCell.domNode.children[0].tagName === 'DIV' && tableCell.domNode.children[0].getAttribute('data-colspan')) {\n tableCell.domNode.children[0].setAttribute('data-colspan', 1)\n }\n for (let colspanIndex = cellColspan; colspanIndex > 1; colspanIndex--) {\n this.insertCell(row, ref, tableCellBgColor)\n }\n }\n\n if (cellRowspan > 1) {\n let rowspanIndex = cellRowspan\n let nextRow = tableCell.row().next\n while (rowspanIndex > 1) {\n const refInNextRow = nextRow.children.reduce((result, cell) => {\n const compareRect = getRelativeRect(tableCell.domNode.getBoundingClientRect(), editorWrapper)\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n if (Math.abs(compareRect.x1 - cellRect.x) < ERROR_LIMIT) {\n result = cell\n }\n return result\n }, null)\n\n for (let colspanIndex = cellColspan; colspanIndex > 0; colspanIndex--) {\n this.insertCell(nextRow, refInNextRow, tableCellBgColor)\n }\n\n rowspanIndex -= 1\n nextRow = nextRow.next\n }\n\n tableCell.domNode.removeAttribute('style')\n if (tableCell.domNode.children && tableCell.domNode.children[0].tagName === 'DIV' && tableCell.domNode.children[0].getAttribute('data-rowspan')) {\n tableCell.domNode.children[0].setAttribute('data-rowspan', 1)\n }\n tableCell.format('rowspan', 1)\n }\n })\n }\n\n emptyCells(selectedTds) {\n selectedTds.forEach((selectedTd) => {\n // 构造空的table cell line, 优先使用单元格已有rowId和cellId,避免从table-cell-line向上层td提交id时不一致导致错位\n const cellFormats = selectedTd.formats()\n const cellLine = this.scroll.create(TableCellLine.blotName, {\n row: cellFormats.row || rowId(),\n cell: cellFormats.cell || cellId(),\n rowspan: cellFormats.rowspan,\n colspan: cellFormats.colspan,\n })\n const empty = this.scroll.create(Break.blotName)\n cellLine.appendChild(empty)\n\n selectedTd.domNode.innerHTML = ''\n selectedTd.appendChild(cellLine)\n })\n }\n\n rows() {\n const body = this.children.tail\n if (isNullOrUndefined(body)) {\n return []\n }\n return body.children.map(row => row)\n }\n}\nTableContainer.blotName = 'ql-table-container'\nTableContainer.className = 'quill-better-table'\nTableContainer.tagName = 'TABLE'\n\n// @dynamic\nclass TableViewWrapper extends Container {\n static blotName: string\n static tagName: string\n static className: string\n static allowedChildren: any\n constructor(scroll, domNode) {\n super(scroll, domNode)\n const quill = Quill.find(scroll.domNode.parentNode)\n // fix: 只读模式时超长表格默认包含滚动条\n if (quill.options.readOnly) {\n domNode.style.overflow = 'auto'\n }\n domNode.addEventListener(\n 'scroll',\n (e) => {\n const tableModule = quill.getModule('better-table')\n if (tableModule.columnTool) {\n tableModule.columnTool.domNode.scrollLeft = e.target.scrollLeft\n }\n\n if (tableModule.tableSelection && tableModule.tableSelection.selectedTds.length > 0) {\n tableModule.tableSelection.repositionHelpLines()\n }\n },\n false,\n )\n }\n}\nTableViewWrapper.blotName = 'table-view'\nTableViewWrapper.className = 'quill-better-table-wrapper'\nTableViewWrapper.tagName = 'DIV'\n\nTableViewWrapper.allowedChildren = [TableContainer]\nTableContainer.requiredContainer = TableViewWrapper\n\nTableContainer.allowedChildren = [TableBody, TableColGroup]\nTableBody.requiredContainer = TableContainer\n\nTableBody.allowedChildren = [TableRow]\nTableRow.requiredContainer = TableBody\n\nTableRow.allowedChildren = [TableCell]\nTableCell.requiredContainer = TableRow\n\nTableCell.allowedChildren = [TableCellLine, Header, ListItem, ListContainer]\nTableCellLine.requiredContainer = TableCell\n\nTableColGroup.allowedChildren = [TableCol]\nTableColGroup.requiredContainer = TableContainer\n\nTableCol.requiredContainer = TableColGroup\n\nfunction rowId() {\n const id = Math.random().toString(36).slice(2, 6)\n return `row-${id}`\n}\n\nfunction cellId() {\n const id = Math.random().toString(36).slice(2, 6)\n return `cell-${id}`\n}\n\nfunction reduceFormats(domNode: HTMLElement, formats: Record<string, any>) {\n return [...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS].reduce((tableFormats, attribute) => {\n if (domNode.hasAttribute(`data-${attribute}`)) {\n tableFormats[attribute] = domNode.getAttribute(`data-${attribute}`) || undefined\n }\n return tableFormats\n }, formats)\n}\n\nexport {\n CELL_ATTRIBUTES,\n CELL_IDENTITY_KEYS,\n cellId,\n rowId,\n TableBody,\n TableCell,\n TableCellLine,\n TableCol,\n TableColGroup,\n TableContainer,\n TableRow,\n TableViewWrapper,\n}\n"],"names":["formats"],"mappings":"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"}
|
|
@@ -83,7 +83,7 @@ class TableColumnTool {
|
|
|
83
83
|
col = tableContainer.colGroup().domNode.children[index];
|
|
84
84
|
colWidth = col ? col.width : tableContainer.colGroup().domNode.children[index - 1].width;
|
|
85
85
|
} else {
|
|
86
|
-
colWidth = parseInt(col.formats()[col.statics.blotName].width, 10);
|
|
86
|
+
colWidth = Number.parseInt(col.formats()[col.statics.blotName].width, 10);
|
|
87
87
|
}
|
|
88
88
|
let colToolCell = null;
|
|
89
89
|
if (!existCells[index]) {
|
|
@@ -115,13 +115,13 @@ class TableColumnTool {
|
|
|
115
115
|
const rowNumber = Math.max(existCells.length, tableRows.length);
|
|
116
116
|
for (let index = 0; index < rowNumber; index++) {
|
|
117
117
|
const row = tableRows[index];
|
|
118
|
-
let computedHeight = row && getComputedStyle(row)
|
|
118
|
+
let computedHeight = row && getComputedStyle(row).height;
|
|
119
119
|
if (computedHeight === "auto") {
|
|
120
120
|
computedHeight = row.querySelector("td").style.height || "30px";
|
|
121
121
|
}
|
|
122
|
-
let rowHeight = row && parseFloat(computedHeight);
|
|
122
|
+
let rowHeight = row && Number.parseFloat(computedHeight);
|
|
123
123
|
if (rowHeight < CELL_MIN_HEIGHT) {
|
|
124
|
-
const rowChildHeight = row && row.childNodes[0] && parseFloat(getComputedStyle(row.childNodes[0])
|
|
124
|
+
const rowChildHeight = row && row.childNodes[0] && Number.parseFloat(getComputedStyle(row.childNodes[0]).height);
|
|
125
125
|
rowHeight = rowChildHeight;
|
|
126
126
|
}
|
|
127
127
|
let rowToolCell = null;
|
|
@@ -202,13 +202,13 @@ class TableColumnTool {
|
|
|
202
202
|
const rowIndex = existCells.indexOf(cell);
|
|
203
203
|
const rows = Array.from(this.table.querySelectorAll("tr"));
|
|
204
204
|
const tds = Array.from(rows[rowIndex].childNodes);
|
|
205
|
-
const hasContentTd = tds.find((td) => td.getAttribute("rowspan") === "1" && td.
|
|
205
|
+
const hasContentTd = tds.find((td) => td.getAttribute("rowspan") === "1" && td.textContent !== "\n");
|
|
206
206
|
if (dragging) {
|
|
207
207
|
let tdHeight = `${height0 + delta}px`;
|
|
208
208
|
if (hasContentTd) {
|
|
209
209
|
tds.forEach((td) => td.getAttribute("rowspan") === "1" && css(td, { height: tdHeight }));
|
|
210
|
-
const currentHeight = getComputedStyle(hasContentTd)
|
|
211
|
-
tdHeight = parseInt(currentHeight, 10) > height0 + delta && currentHeight || tdHeight;
|
|
210
|
+
const currentHeight = getComputedStyle(hasContentTd).height;
|
|
211
|
+
tdHeight = Number.parseInt(currentHeight, 10) > height0 + delta && currentHeight || tdHeight;
|
|
212
212
|
}
|
|
213
213
|
css(cell, { height: tdHeight });
|
|
214
214
|
tds.forEach((td) => td.getAttribute("rowspan") === "1" && css(td, { height: tdHeight }));
|
|
@@ -324,7 +324,7 @@ class TableColumnTool {
|
|
|
324
324
|
colBlot = tableContainer.colGroup().domNode.children[colIndex];
|
|
325
325
|
}
|
|
326
326
|
if (dragging) {
|
|
327
|
-
const colWidth = parseInt(width0 + delta, 10);
|
|
327
|
+
const colWidth = Number.parseInt(width0 + delta, 10);
|
|
328
328
|
if (colBlot.format) {
|
|
329
329
|
colBlot.format("width", colWidth);
|
|
330
330
|
} else {
|