@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.
Files changed (211) hide show
  1. package/README.md +99 -99
  2. package/es/attributors/index.es.js +1 -1
  3. package/es/attributors/line-height.es.js.map +1 -1
  4. package/es/config/base64-image.es.js.map +1 -1
  5. package/es/config/editor.config.es.js.map +1 -1
  6. package/es/config/editor.utils.es.js +12 -12
  7. package/es/config/editor.utils.es.js.map +1 -1
  8. package/es/config/i18n/en-us.es.js.map +1 -1
  9. package/es/config/i18n/zh-cn.es.js.map +1 -1
  10. package/es/config/icons.config.es.js.map +1 -1
  11. package/es/config/types/index.es.js +2 -2
  12. package/es/config.es.js +1 -1
  13. package/es/config.es.js.map +1 -1
  14. package/es/counter/index.es.js.map +1 -1
  15. package/es/custom-clipboard.es.js +14 -14
  16. package/es/custom-clipboard.es.js.map +1 -1
  17. package/es/custom-image/BlotFormatter.es.js +1 -1
  18. package/es/custom-image/BlotFormatter.es.js.map +1 -1
  19. package/es/custom-image/Options.es.js.map +1 -1
  20. package/es/custom-image/actions/Action.es.js.map +1 -1
  21. package/es/custom-image/actions/CustomResizeAction.es.js +6 -4
  22. package/es/custom-image/actions/CustomResizeAction.es.js.map +1 -1
  23. package/es/custom-image/actions/DeleteAction.es.js.map +1 -1
  24. package/es/custom-image/image.es.js +3 -3
  25. package/es/custom-image/image.es.js.map +1 -1
  26. package/es/custom-image/specs/BlotSpec.es.js.map +1 -1
  27. package/es/custom-image/specs/CustomImageSpec.es.js.map +1 -1
  28. package/es/custom-image/specs/ImageSpec.es.js.map +1 -1
  29. package/es/custom-uploader.es.js +4 -7
  30. package/es/custom-uploader.es.js.map +1 -1
  31. package/es/emoji/emoji-list/people.es.js.map +1 -1
  32. package/es/emoji/emoji-list.es.js.map +1 -1
  33. package/es/emoji/emoji-map.es.js.map +1 -1
  34. package/es/emoji/formats/emoji-blot.es.js +2 -2
  35. package/es/emoji/formats/emoji-blot.es.js.map +1 -1
  36. package/es/emoji/index.es.js.map +1 -1
  37. package/es/emoji/modules/emoji.es.js +7 -7
  38. package/es/emoji/modules/emoji.es.js.map +1 -1
  39. package/es/emoji/modules/toolbar-emoji.es.js +15 -15
  40. package/es/emoji/modules/toolbar-emoji.es.js.map +1 -1
  41. package/es/emoji/utils.es.js.map +1 -1
  42. package/es/file/formats/file.es.js.map +1 -1
  43. package/es/file/index.es.js.map +1 -1
  44. package/es/file/modules/file-bar.es.js +3 -3
  45. package/es/file/modules/file-bar.es.js.map +1 -1
  46. package/es/fluent-editor.es.js +3 -3
  47. package/es/fluent-editor.es.js.map +1 -1
  48. package/es/format-painter/index.es.js.map +1 -1
  49. package/es/global-link/constants.es.js.map +1 -1
  50. package/es/global-link/formats/customer-widget-link.es.js.map +1 -1
  51. package/es/global-link/formats/doc-link.es.js.map +1 -1
  52. package/es/global-link/formats/wiki-link.es.js.map +1 -1
  53. package/es/global-link/formats/work-item-link.es.js.map +1 -1
  54. package/es/global-link/index.es.js +1 -1
  55. package/es/global-link/index.es.js.map +1 -1
  56. package/es/global-link/utils/createTable.es.js.map +1 -1
  57. package/es/link/formats/link.es.js +1 -1
  58. package/es/link/formats/link.es.js.map +1 -1
  59. package/es/link/index.es.js.map +1 -1
  60. package/es/link/modules/tooltip.es.js +3 -3
  61. package/es/link/modules/tooltip.es.js.map +1 -1
  62. package/es/mention/Mention.es.js +7 -12
  63. package/es/mention/Mention.es.js.map +1 -1
  64. package/es/mention/MentionLink.es.js.map +1 -1
  65. package/es/mention/constants.es.js.map +1 -1
  66. package/es/quick-menu/index.es.js +1 -1
  67. package/es/quick-menu/index.es.js.map +1 -1
  68. package/es/screenshot/index.es.js +42 -7
  69. package/es/screenshot/index.es.js.map +1 -1
  70. package/es/soft-break/index.es.js.map +1 -1
  71. package/es/strike/index.es.js.map +1 -1
  72. package/es/syntax/index.es.js.map +1 -1
  73. package/es/table/better-table.es.js +4 -5
  74. package/es/table/better-table.es.js.map +1 -1
  75. package/es/table/formats/header.es.js.map +1 -1
  76. package/es/table/formats/list.es.js +3 -3
  77. package/es/table/formats/list.es.js.map +1 -1
  78. package/es/table/formats/table.es.js +26 -27
  79. package/es/table/formats/table.es.js.map +1 -1
  80. package/es/table/modules/table-column-tool.es.js +8 -8
  81. package/es/table/modules/table-column-tool.es.js.map +1 -1
  82. package/es/table/modules/table-operation-menu.es.js +7 -8
  83. package/es/table/modules/table-operation-menu.es.js.map +1 -1
  84. package/es/table/modules/table-scroll-bar.es.js +1 -1
  85. package/es/table/modules/table-scroll-bar.es.js.map +1 -1
  86. package/es/table/modules/table-selection.es.js +0 -1
  87. package/es/table/modules/table-selection.es.js.map +1 -1
  88. package/es/table/table-config.es.js.map +1 -1
  89. package/es/table/utils/index.es.js.map +1 -1
  90. package/es/table/utils/node-matchers.es.js +14 -14
  91. package/es/table/utils/node-matchers.es.js.map +1 -1
  92. package/es/toolbar/better-picker.es.js.map +1 -1
  93. package/es/toolbar/index.es.js +1 -1
  94. package/es/toolbar/index.es.js.map +1 -1
  95. package/es/utils/debounce.es.js.map +1 -1
  96. package/es/utils/image.es.js +26 -0
  97. package/es/utils/image.es.js.map +1 -0
  98. package/es/utils/method.es.js +2 -2
  99. package/es/utils/method.es.js.map +1 -1
  100. package/es/utils/scroll-lock.es.js +47 -0
  101. package/es/utils/scroll-lock.es.js.map +1 -0
  102. package/es/video/index.es.js +6 -3
  103. package/es/video/index.es.js.map +1 -1
  104. package/lib/attributors/index.cjs.js +2 -2
  105. package/lib/attributors/line-height.cjs.js.map +1 -1
  106. package/lib/config/base64-image.cjs.js.map +1 -1
  107. package/lib/config/editor.config.cjs.js.map +1 -1
  108. package/lib/config/editor.utils.cjs.js +12 -12
  109. package/lib/config/editor.utils.cjs.js.map +1 -1
  110. package/lib/config/i18n/en-us.cjs.js.map +1 -1
  111. package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
  112. package/lib/config/icons.config.cjs.js.map +1 -1
  113. package/lib/config/types/index.cjs.js +2 -2
  114. package/lib/config.cjs.js +1 -1
  115. package/lib/config.cjs.js.map +1 -1
  116. package/lib/counter/index.cjs.js.map +1 -1
  117. package/lib/custom-clipboard.cjs.js +14 -14
  118. package/lib/custom-clipboard.cjs.js.map +1 -1
  119. package/lib/custom-image/BlotFormatter.cjs.js +1 -1
  120. package/lib/custom-image/BlotFormatter.cjs.js.map +1 -1
  121. package/lib/custom-image/Options.cjs.js.map +1 -1
  122. package/lib/custom-image/actions/Action.cjs.js.map +1 -1
  123. package/lib/custom-image/actions/CustomResizeAction.cjs.js +6 -4
  124. package/lib/custom-image/actions/CustomResizeAction.cjs.js.map +1 -1
  125. package/lib/custom-image/actions/DeleteAction.cjs.js.map +1 -1
  126. package/lib/custom-image/image.cjs.js +3 -3
  127. package/lib/custom-image/image.cjs.js.map +1 -1
  128. package/lib/custom-image/specs/BlotSpec.cjs.js.map +1 -1
  129. package/lib/custom-image/specs/CustomImageSpec.cjs.js.map +1 -1
  130. package/lib/custom-image/specs/ImageSpec.cjs.js.map +1 -1
  131. package/lib/custom-uploader.cjs.js +4 -7
  132. package/lib/custom-uploader.cjs.js.map +1 -1
  133. package/lib/emoji/emoji-list/people.cjs.js.map +1 -1
  134. package/lib/emoji/emoji-list.cjs.js.map +1 -1
  135. package/lib/emoji/emoji-map.cjs.js.map +1 -1
  136. package/lib/emoji/formats/emoji-blot.cjs.js +2 -2
  137. package/lib/emoji/formats/emoji-blot.cjs.js.map +1 -1
  138. package/lib/emoji/index.cjs.js.map +1 -1
  139. package/lib/emoji/modules/emoji.cjs.js +7 -7
  140. package/lib/emoji/modules/emoji.cjs.js.map +1 -1
  141. package/lib/emoji/modules/toolbar-emoji.cjs.js +15 -15
  142. package/lib/emoji/modules/toolbar-emoji.cjs.js.map +1 -1
  143. package/lib/emoji/utils.cjs.js.map +1 -1
  144. package/lib/file/formats/file.cjs.js.map +1 -1
  145. package/lib/file/index.cjs.js.map +1 -1
  146. package/lib/file/modules/file-bar.cjs.js +3 -3
  147. package/lib/file/modules/file-bar.cjs.js.map +1 -1
  148. package/lib/fluent-editor.cjs.js +3 -3
  149. package/lib/fluent-editor.cjs.js.map +1 -1
  150. package/lib/format-painter/index.cjs.js.map +1 -1
  151. package/lib/global-link/constants.cjs.js.map +1 -1
  152. package/lib/global-link/formats/customer-widget-link.cjs.js.map +1 -1
  153. package/lib/global-link/formats/doc-link.cjs.js.map +1 -1
  154. package/lib/global-link/formats/wiki-link.cjs.js.map +1 -1
  155. package/lib/global-link/formats/work-item-link.cjs.js.map +1 -1
  156. package/lib/global-link/index.cjs.js +1 -1
  157. package/lib/global-link/index.cjs.js.map +1 -1
  158. package/lib/global-link/utils/createTable.cjs.js.map +1 -1
  159. package/lib/link/formats/link.cjs.js +1 -1
  160. package/lib/link/formats/link.cjs.js.map +1 -1
  161. package/lib/link/index.cjs.js.map +1 -1
  162. package/lib/link/modules/tooltip.cjs.js +3 -3
  163. package/lib/link/modules/tooltip.cjs.js.map +1 -1
  164. package/lib/mention/Mention.cjs.js +7 -12
  165. package/lib/mention/Mention.cjs.js.map +1 -1
  166. package/lib/mention/MentionLink.cjs.js.map +1 -1
  167. package/lib/mention/constants.cjs.js.map +1 -1
  168. package/lib/quick-menu/index.cjs.js +1 -1
  169. package/lib/quick-menu/index.cjs.js.map +1 -1
  170. package/lib/screenshot/index.cjs.js +44 -9
  171. package/lib/screenshot/index.cjs.js.map +1 -1
  172. package/lib/soft-break/index.cjs.js.map +1 -1
  173. package/lib/strike/index.cjs.js.map +1 -1
  174. package/lib/syntax/index.cjs.js.map +1 -1
  175. package/lib/table/better-table.cjs.js +4 -5
  176. package/lib/table/better-table.cjs.js.map +1 -1
  177. package/lib/table/formats/header.cjs.js.map +1 -1
  178. package/lib/table/formats/list.cjs.js +3 -3
  179. package/lib/table/formats/list.cjs.js.map +1 -1
  180. package/lib/table/formats/table.cjs.js +26 -27
  181. package/lib/table/formats/table.cjs.js.map +1 -1
  182. package/lib/table/modules/table-column-tool.cjs.js +8 -8
  183. package/lib/table/modules/table-column-tool.cjs.js.map +1 -1
  184. package/lib/table/modules/table-operation-menu.cjs.js +7 -8
  185. package/lib/table/modules/table-operation-menu.cjs.js.map +1 -1
  186. package/lib/table/modules/table-scroll-bar.cjs.js +1 -1
  187. package/lib/table/modules/table-scroll-bar.cjs.js.map +1 -1
  188. package/lib/table/modules/table-selection.cjs.js +0 -1
  189. package/lib/table/modules/table-selection.cjs.js.map +1 -1
  190. package/lib/table/table-config.cjs.js.map +1 -1
  191. package/lib/table/utils/index.cjs.js.map +1 -1
  192. package/lib/table/utils/node-matchers.cjs.js +14 -14
  193. package/lib/table/utils/node-matchers.cjs.js.map +1 -1
  194. package/lib/toolbar/better-picker.cjs.js.map +1 -1
  195. package/lib/toolbar/index.cjs.js +1 -1
  196. package/lib/toolbar/index.cjs.js.map +1 -1
  197. package/lib/utils/debounce.cjs.js.map +1 -1
  198. package/lib/utils/image.cjs.js +26 -0
  199. package/lib/utils/image.cjs.js.map +1 -0
  200. package/lib/utils/method.cjs.js +2 -2
  201. package/lib/utils/method.cjs.js.map +1 -1
  202. package/lib/utils/scroll-lock.cjs.js +47 -0
  203. package/lib/utils/scroll-lock.cjs.js.map +1 -0
  204. package/lib/video/index.cjs.js +6 -3
  205. package/lib/video/index.cjs.js.map +1 -1
  206. package/package.json +61 -64
  207. package/theme/style.css +12 -0
  208. package/es/types/vue.d.es.js +0 -2
  209. package/es/types/vue.d.es.js.map +0 -1
  210. package/lib/types/vue.d.cjs.js +0 -2
  211. 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["list"]) {
34
- formats["list"] = domNode.classList.item(0);
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"].indexOf(name) > -1) {
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["row"] = this.domNode.getAttribute("data-row");
168
+ formats.row = this.domNode.getAttribute("data-row");
169
169
  }
170
170
  if (this.domNode.hasAttribute("data-cell")) {
171
- formats["cell"] = this.domNode.getAttribute("data-cell");
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
- /** this method is for TableCellLine to change cell background color
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.indexOf(name) > -1:
207
+ case CELL_ATTRIBUTES.includes(name):
207
208
  this.toggleAttribute(name, value);
208
209
  break;
209
- case ["row", "cell"].indexOf(name) > -1:
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["list"] = firstChild.classList.item(0);
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.indexOf(name) > -1) {
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])["width"];
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["head"].domNode.style) {
817
- cellLine.children["head"].domNode.style.backgroundColor = mergedCell.domNode.style.backgroundColor;
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.innerText.trim()) {
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)["height"];
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])["height"]);
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.innerText !== "\n");
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)["height"];
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 {