@opentiny/fluent-editor 3.22.0 → 3.23.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 (86) hide show
  1. package/README.md +2 -0
  2. package/es/config/editor.config.es.js +9 -3
  3. package/es/config/editor.config.es.js.map +1 -1
  4. package/es/config/i18n/en-us.es.js +47 -26
  5. package/es/config/i18n/en-us.es.js.map +1 -1
  6. package/es/config/i18n/zh-cn.es.js +47 -26
  7. package/es/config/i18n/zh-cn.es.js.map +1 -1
  8. package/es/config/index.es.js +3 -44
  9. package/es/config/index.es.js.map +1 -1
  10. package/es/counter/index.es.js +16 -11
  11. package/es/counter/index.es.js.map +1 -1
  12. package/es/custom-clipboard.es.js +4 -4
  13. package/es/custom-clipboard.es.js.map +1 -1
  14. package/es/fluent-editor.es.js +28 -3
  15. package/es/fluent-editor.es.js.map +1 -1
  16. package/es/fullscreen/handler.es.js +10 -0
  17. package/es/fullscreen/handler.es.js.map +1 -1
  18. package/es/index.es.js +4 -3
  19. package/es/link/modules/tooltip.es.js +22 -5
  20. package/es/link/modules/tooltip.es.js.map +1 -1
  21. package/es/table/modules/table-operation-menu.es.js +213 -203
  22. package/es/table/modules/table-operation-menu.es.js.map +1 -1
  23. package/es/table/modules/table-selection.es.js.map +1 -1
  24. package/es/table/utils/node-matchers.es.js +1 -1
  25. package/es/table/utils/node-matchers.es.js.map +1 -1
  26. package/es/toolbar/index.es.js +2 -0
  27. package/es/toolbar/index.es.js.map +1 -1
  28. package/es/toolbar/toolbar-tip.es.js +106 -0
  29. package/es/toolbar/toolbar-tip.es.js.map +1 -0
  30. package/es/utils/debounce.es.js +2 -1
  31. package/es/utils/debounce.es.js.map +1 -1
  32. package/es/utils/is.es.js +10 -0
  33. package/es/utils/is.es.js.map +1 -0
  34. package/es/utils/method.es.js +0 -5
  35. package/es/utils/method.es.js.map +1 -1
  36. package/lib/config/editor.config.cjs.js +8 -2
  37. package/lib/config/editor.config.cjs.js.map +1 -1
  38. package/lib/config/i18n/en-us.cjs.js +47 -26
  39. package/lib/config/i18n/en-us.cjs.js.map +1 -1
  40. package/lib/config/i18n/zh-cn.cjs.js +47 -26
  41. package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
  42. package/lib/config/index.cjs.js +3 -43
  43. package/lib/config/index.cjs.js.map +1 -1
  44. package/lib/counter/index.cjs.js +15 -10
  45. package/lib/counter/index.cjs.js.map +1 -1
  46. package/lib/custom-clipboard.cjs.js +3 -3
  47. package/lib/custom-clipboard.cjs.js.map +1 -1
  48. package/lib/fluent-editor.cjs.js +27 -2
  49. package/lib/fluent-editor.cjs.js.map +1 -1
  50. package/lib/fullscreen/handler.cjs.js +10 -0
  51. package/lib/fullscreen/handler.cjs.js.map +1 -1
  52. package/lib/index.cjs.js +2 -1
  53. package/lib/index.cjs.js.map +1 -1
  54. package/lib/link/modules/tooltip.cjs.js +22 -5
  55. package/lib/link/modules/tooltip.cjs.js.map +1 -1
  56. package/lib/table/modules/table-operation-menu.cjs.js +213 -203
  57. package/lib/table/modules/table-operation-menu.cjs.js.map +1 -1
  58. package/lib/table/modules/table-selection.cjs.js.map +1 -1
  59. package/lib/table/utils/node-matchers.cjs.js +1 -1
  60. package/lib/table/utils/node-matchers.cjs.js.map +1 -1
  61. package/lib/toolbar/index.cjs.js +2 -0
  62. package/lib/toolbar/index.cjs.js.map +1 -1
  63. package/lib/toolbar/toolbar-tip.cjs.js +106 -0
  64. package/lib/toolbar/toolbar-tip.cjs.js.map +1 -0
  65. package/lib/utils/debounce.cjs.js +2 -1
  66. package/lib/utils/debounce.cjs.js.map +1 -1
  67. package/lib/utils/is.cjs.js +10 -0
  68. package/lib/utils/is.cjs.js.map +1 -0
  69. package/lib/utils/method.cjs.js +0 -5
  70. package/lib/utils/method.cjs.js.map +1 -1
  71. package/package.json +4 -3
  72. package/style.css +15 -1
  73. package/types/config/editor.config.d.ts +214 -84
  74. package/types/config/i18n/en-us.d.ts +46 -26
  75. package/types/config/i18n/zh-cn.d.ts +46 -26
  76. package/types/config/index.d.ts +0 -41
  77. package/types/config/types/editor-config.interface.d.ts +2 -0
  78. package/types/counter/index.d.ts +9 -4
  79. package/types/custom-clipboard.d.ts +6 -3
  80. package/types/fluent-editor.d.ts +7 -1
  81. package/types/link/modules/tooltip.d.ts +1 -0
  82. package/types/table/modules/table-operation-menu.d.ts +6 -0
  83. package/types/toolbar/index.d.ts +1 -0
  84. package/types/toolbar/toolbar-tip.d.ts +9 -0
  85. package/types/utils/is.d.ts +2 -0
  86. package/types/utils/method.d.ts +0 -1
@@ -1,210 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const Quill = require("quill");
4
- const editor_config = require("../../config/editor.config.cjs.js");
4
+ require("../../config/index.cjs.js");
5
5
  const tableConfig = require("../table-config.cjs.js");
6
6
  const index = require("../utils/index.cjs.js");
7
- const MENU_ITEMS_DEFAULT = {
8
- copyCells: {
9
- text: "Copy Cells",
10
- handler() {
11
- this.onCopy("copy");
12
- }
13
- },
14
- copyTable: {
15
- text: "Copy Table",
16
- handler() {
17
- this.tableColumnTool.destroy();
18
- this.tableScrollBar.destroy();
19
- this.tableSelection.clearSelection();
20
- const dom = this.table.cloneNode(true);
21
- const trArr = dom.querySelectorAll("tr[data-row]");
22
- trArr.forEach((tr) => tr.removeAttribute("data-row"));
23
- dom.style.position = "fixed";
24
- dom.style.top = 0;
25
- dom.style.left = 0;
26
- dom.style.clip = "rect(0,0,0,0)";
27
- document.body.appendChild(dom);
28
- this.setCopyRange(dom);
29
- document.execCommand("copy");
30
- dom.remove();
31
- }
32
- },
33
- cutCells: {
34
- text: "Cut Cells",
35
- handler() {
36
- this.onCopy("cut");
37
- }
38
- },
39
- emptyCells: {
40
- text: "Empty Cells",
41
- handler() {
42
- const tableContainer = Quill.find(this.table);
43
- const { selectedTds } = this.tableSelection;
44
- tableContainer.emptyCells(selectedTds);
45
- }
46
- },
47
- insertColumnRight: {
48
- text: "Insert Column After",
49
- handler() {
50
- const tableContainer = Quill.find(this.table);
51
- const colIndex = getColToolCellIndexByBoundary(
52
- this.columnToolCells,
53
- this.boundary,
54
- (cellRect, boundary) => {
55
- return Math.abs(cellRect.x + cellRect.width - boundary.x1) <= tableConfig.ERROR_LIMIT;
56
- },
57
- this.quill.root.parentNode
58
- );
59
- const newColumn = tableContainer.insertColumn(this.boundary, colIndex, true, this.quill.root.parentNode);
60
- this.tableColumnTool.updateColToolCells();
61
- this.quill.update(Quill.sources.USER);
62
- this.tableSelection.setSelection(
63
- newColumn[0].domNode.getBoundingClientRect(),
64
- newColumn[0].domNode.getBoundingClientRect()
65
- );
66
- setTimeout(() => this.tableScrollBar.updateScrollBar());
67
- }
68
- },
69
- insertColumnLeft: {
70
- text: "Insert Column Before",
71
- handler() {
72
- const tableContainer = Quill.find(this.table);
73
- const colIndex = getColToolCellIndexByBoundary(
74
- this.columnToolCells,
75
- this.boundary,
76
- (cellRect, boundary) => {
77
- return Math.abs(cellRect.x - boundary.x) <= tableConfig.ERROR_LIMIT;
78
- },
79
- this.quill.root.parentNode
80
- );
81
- const newColumn = tableContainer.insertColumn(this.boundary, colIndex, false, this.quill.root.parentNode);
82
- this.tableColumnTool.updateColToolCells();
83
- this.quill.update(Quill.sources.USER);
84
- this.tableSelection.setSelection(
85
- newColumn[0].domNode.getBoundingClientRect(),
86
- newColumn[0].domNode.getBoundingClientRect()
87
- );
88
- setTimeout(() => this.tableScrollBar.updateScrollBar());
89
- }
90
- },
91
- insertRowUp: {
92
- text: "Insert Row Above",
93
- handler() {
94
- const tableContainer = Quill.find(this.table);
95
- const affectedCells = tableContainer.insertRow(this.boundary, false, this.quill.root.parentNode);
96
- this.tableColumnTool.updateRowToolCells();
97
- this.quill.update(Quill.sources.USER);
98
- this.tableSelection.setSelection(
99
- affectedCells[0].domNode.getBoundingClientRect(),
100
- affectedCells[0].domNode.getBoundingClientRect()
101
- );
102
- setTimeout(() => this.tableScrollBar.resetTableHeight(this.table));
103
- }
104
- },
105
- insertRowDown: {
106
- text: "Insert Row Below",
107
- handler() {
108
- const tableContainer = Quill.find(this.table);
109
- const affectedCells = tableContainer.insertRow(this.boundary, true, this.quill.root.parentNode);
110
- this.tableColumnTool.updateRowToolCells();
111
- this.quill.update(Quill.sources.USER);
112
- this.tableSelection.setSelection(
113
- affectedCells[0].domNode.getBoundingClientRect(),
114
- affectedCells[0].domNode.getBoundingClientRect()
115
- );
116
- setTimeout(() => this.tableScrollBar.resetTableHeight(this.table));
117
- }
118
- },
119
- mergeCells: {
120
- text: "Merge Cells",
121
- handler() {
122
- const tableContainer = Quill.find(this.table);
123
- const rowspan = tableContainer.rows().reduce((sum, row) => {
124
- const rowRect = index.getRelativeRect(row.domNode.getBoundingClientRect(), this.quill.root.parentNode);
125
- if (rowRect.y > this.boundary.y - tableConfig.ERROR_LIMIT && rowRect.y + rowRect.height < this.boundary.y + this.boundary.height + tableConfig.ERROR_LIMIT) {
126
- sum += 1;
127
- }
128
- return sum;
129
- }, 0);
130
- const colspan = this.columnToolCells.reduce((sum, cell) => {
131
- const cellRect = index.getRelativeRect(cell.getBoundingClientRect(), this.quill.root.parentNode);
132
- if (cellRect.x > this.boundary.x - tableConfig.ERROR_LIMIT && cellRect.x + cellRect.width < this.boundary.x + this.boundary.width + tableConfig.ERROR_LIMIT) {
133
- sum += 1;
134
- }
135
- return sum;
136
- }, 0);
137
- const mergedCell = tableContainer.mergeCells(
138
- this.boundary,
139
- this.selectedTds,
140
- rowspan,
141
- colspan,
142
- this.quill.root.parentNode
143
- );
144
- this.quill.update(Quill.sources.USER);
145
- this.tableSelection.setSelection(
146
- mergedCell.domNode.getBoundingClientRect(),
147
- mergedCell.domNode.getBoundingClientRect()
148
- );
149
- }
150
- },
151
- unmergeCells: {
152
- text: "Split Cells",
153
- handler() {
154
- const tableContainer = Quill.find(this.table);
155
- tableContainer.unmergeCells(this.selectedTds, this.quill.root.parentNode);
156
- this.quill.update(Quill.sources.USER);
157
- this.tableSelection.clearSelection();
158
- }
159
- },
160
- deleteColumn: {
161
- text: "Delete Columns",
162
- handler() {
163
- const tableContainer = Quill.find(this.table);
164
- const colIndexes = getColToolCellIndexesByBoundary(
165
- this.columnToolCells,
166
- this.boundary,
167
- (cellRect, boundary) => {
168
- return cellRect.x + tableConfig.ERROR_LIMIT > boundary.x && cellRect.x + cellRect.width - tableConfig.ERROR_LIMIT < boundary.x1;
169
- },
170
- this.quill.root.parentNode
171
- );
172
- const isDeleteTable = tableContainer.deleteColumns(this.boundary, colIndexes, this.quill.root.parentNode);
173
- if (!isDeleteTable) {
174
- this.tableColumnTool.updateColToolCells();
175
- this.quill.update(Quill.sources.USER);
176
- this.tableSelection.clearSelection();
177
- }
178
- setTimeout(() => this.tableScrollBar.updateScrollBar());
179
- }
180
- },
181
- deleteRow: {
182
- text: "Delete Rows",
183
- handler() {
184
- const tableContainer = Quill.find(this.table);
185
- const isDeleteTable = tableContainer.deleteRow(this.boundary, this.quill.root.parentNode);
186
- if (!isDeleteTable) {
187
- this.tableColumnTool.updateRowToolCells();
188
- this.quill.update(Quill.sources.USER);
189
- this.tableSelection.clearSelection();
190
- }
191
- }
192
- },
193
- deleteTable: {
194
- text: "Remove Table",
195
- handler() {
196
- const betterTableModule = this.quill.getModule("better-table");
197
- const tableContainer = Quill.find(this.table);
198
- betterTableModule.hideTableTools();
199
- tableContainer.remove();
200
- this.quill.update(Quill.sources.USER);
201
- this.quill.focus();
202
- }
203
- }
204
- };
7
+ const editor_config = require("../../config/editor.config.cjs.js");
205
8
  const DEFAULT_CELL_COLORS = ["white", "red", "yellow", "blue"];
206
9
  const NODE_EVENT_MAP = /* @__PURE__ */ new WeakMap();
207
- const DEFAULT_COLOR_SUBTITLE = editor_config.LANG_CONF.subTitleBgColor;
208
10
  class TableOperationMenu {
209
11
  constructor(params, quill, options) {
210
12
  const betterTableModule = quill.getModule("better-table");
@@ -212,18 +14,226 @@ class TableOperationMenu {
212
14
  this.table = params.table;
213
15
  this.quill = quill;
214
16
  this.options = options;
215
- this.menuItems = { ...MENU_ITEMS_DEFAULT, ...options.items };
17
+ this.setDefaultMenu();
18
+ this.menuItems = { ...this.DEFAULT_MENU, ...options.items };
216
19
  this.tableColumnTool = betterTableModule.columnTool;
217
20
  this.tableScrollBar = betterTableModule.tableScrollBar;
218
21
  this.boundary = this.tableSelection.boundary;
219
22
  this.selectedTds = this.tableSelection.selectedTds;
220
23
  this.destroyHandler = this.destroy.bind(this);
221
24
  this.columnToolCells = this.tableColumnTool.colToolCells();
222
- this.colorSubTitle = options.color && options.color.text ? options.color.text : DEFAULT_COLOR_SUBTITLE;
25
+ this.DEFAULT_COLOR_SUBTITLE = this.quill.options.langText["sub-title-bg-color"];
26
+ this.colorSubTitle = options.color && options.color.text ? options.color.text : this.DEFAULT_COLOR_SUBTITLE;
223
27
  this.cellColors = options.color && options.color.colors ? options.color.colors : DEFAULT_CELL_COLORS;
224
28
  this.menuInitial(params);
225
29
  this.mount();
226
30
  document.addEventListener("click", this.destroyHandler, false);
31
+ this.quill.on(editor_config.CHANGE_LANGUAGE_EVENT, () => {
32
+ this.destroy();
33
+ this.DEFAULT_COLOR_SUBTITLE = this.quill.options.langText["sub-title-bg-color"];
34
+ this.setDefaultMenu();
35
+ });
36
+ }
37
+ setDefaultMenu() {
38
+ const langText = this.quill.options.langText;
39
+ this.DEFAULT_MENU = {
40
+ copyCells: {
41
+ text: langText["copy-cells"],
42
+ handler() {
43
+ this.onCopy("copy");
44
+ }
45
+ },
46
+ copyTable: {
47
+ text: langText["copy-table"],
48
+ handler() {
49
+ this.tableColumnTool.destroy();
50
+ this.tableScrollBar.destroy();
51
+ this.tableSelection.clearSelection();
52
+ const dom = this.table.cloneNode(true);
53
+ const trArr = dom.querySelectorAll("tr[data-row]");
54
+ trArr.forEach((tr) => tr.removeAttribute("data-row"));
55
+ dom.style.position = "fixed";
56
+ dom.style.top = 0;
57
+ dom.style.left = 0;
58
+ dom.style.clip = "rect(0,0,0,0)";
59
+ document.body.appendChild(dom);
60
+ this.setCopyRange(dom);
61
+ document.execCommand("copy");
62
+ dom.remove();
63
+ }
64
+ },
65
+ cutCells: {
66
+ text: langText["cut-cells"],
67
+ handler() {
68
+ this.onCopy("cut");
69
+ }
70
+ },
71
+ emptyCells: {
72
+ text: langText["empty-cells"],
73
+ handler() {
74
+ const tableContainer = Quill.find(this.table);
75
+ const { selectedTds } = this.tableSelection;
76
+ tableContainer.emptyCells(selectedTds);
77
+ }
78
+ },
79
+ insertColumnRight: {
80
+ text: langText["insert-column-right"],
81
+ handler() {
82
+ const tableContainer = Quill.find(this.table);
83
+ const colIndex = getColToolCellIndexByBoundary(
84
+ this.columnToolCells,
85
+ this.boundary,
86
+ (cellRect, boundary) => {
87
+ return Math.abs(cellRect.x + cellRect.width - boundary.x1) <= tableConfig.ERROR_LIMIT;
88
+ },
89
+ this.quill.root.parentNode
90
+ );
91
+ const newColumn = tableContainer.insertColumn(this.boundary, colIndex, true, this.quill.root.parentNode);
92
+ this.tableColumnTool.updateColToolCells();
93
+ this.quill.update(Quill.sources.USER);
94
+ this.tableSelection.setSelection(
95
+ newColumn[0].domNode.getBoundingClientRect(),
96
+ newColumn[0].domNode.getBoundingClientRect()
97
+ );
98
+ setTimeout(() => this.tableScrollBar.updateScrollBar());
99
+ }
100
+ },
101
+ insertColumnLeft: {
102
+ text: langText["insert-column-left"],
103
+ handler() {
104
+ const tableContainer = Quill.find(this.table);
105
+ const colIndex = getColToolCellIndexByBoundary(
106
+ this.columnToolCells,
107
+ this.boundary,
108
+ (cellRect, boundary) => {
109
+ return Math.abs(cellRect.x - boundary.x) <= tableConfig.ERROR_LIMIT;
110
+ },
111
+ this.quill.root.parentNode
112
+ );
113
+ const newColumn = tableContainer.insertColumn(this.boundary, colIndex, false, this.quill.root.parentNode);
114
+ this.tableColumnTool.updateColToolCells();
115
+ this.quill.update(Quill.sources.USER);
116
+ this.tableSelection.setSelection(
117
+ newColumn[0].domNode.getBoundingClientRect(),
118
+ newColumn[0].domNode.getBoundingClientRect()
119
+ );
120
+ setTimeout(() => this.tableScrollBar.updateScrollBar());
121
+ }
122
+ },
123
+ insertRowUp: {
124
+ text: langText["insert-row-up"],
125
+ handler() {
126
+ const tableContainer = Quill.find(this.table);
127
+ const affectedCells = tableContainer.insertRow(this.boundary, false, this.quill.root.parentNode);
128
+ this.tableColumnTool.updateRowToolCells();
129
+ this.quill.update(Quill.sources.USER);
130
+ this.tableSelection.setSelection(
131
+ affectedCells[0].domNode.getBoundingClientRect(),
132
+ affectedCells[0].domNode.getBoundingClientRect()
133
+ );
134
+ setTimeout(() => this.tableScrollBar.resetTableHeight(this.table));
135
+ }
136
+ },
137
+ insertRowDown: {
138
+ text: langText["insert-row-down"],
139
+ handler() {
140
+ const tableContainer = Quill.find(this.table);
141
+ const affectedCells = tableContainer.insertRow(this.boundary, true, this.quill.root.parentNode);
142
+ this.tableColumnTool.updateRowToolCells();
143
+ this.quill.update(Quill.sources.USER);
144
+ this.tableSelection.setSelection(
145
+ affectedCells[0].domNode.getBoundingClientRect(),
146
+ affectedCells[0].domNode.getBoundingClientRect()
147
+ );
148
+ setTimeout(() => this.tableScrollBar.resetTableHeight(this.table));
149
+ }
150
+ },
151
+ mergeCells: {
152
+ text: langText["merge-cells"],
153
+ handler() {
154
+ const tableContainer = Quill.find(this.table);
155
+ const rowspan = tableContainer.rows().reduce((sum, row) => {
156
+ const rowRect = index.getRelativeRect(row.domNode.getBoundingClientRect(), this.quill.root.parentNode);
157
+ if (rowRect.y > this.boundary.y - tableConfig.ERROR_LIMIT && rowRect.y + rowRect.height < this.boundary.y + this.boundary.height + tableConfig.ERROR_LIMIT) {
158
+ sum += 1;
159
+ }
160
+ return sum;
161
+ }, 0);
162
+ const colspan = this.columnToolCells.reduce((sum, cell) => {
163
+ const cellRect = index.getRelativeRect(cell.getBoundingClientRect(), this.quill.root.parentNode);
164
+ if (cellRect.x > this.boundary.x - tableConfig.ERROR_LIMIT && cellRect.x + cellRect.width < this.boundary.x + this.boundary.width + tableConfig.ERROR_LIMIT) {
165
+ sum += 1;
166
+ }
167
+ return sum;
168
+ }, 0);
169
+ const mergedCell = tableContainer.mergeCells(
170
+ this.boundary,
171
+ this.selectedTds,
172
+ rowspan,
173
+ colspan,
174
+ this.quill.root.parentNode
175
+ );
176
+ this.quill.update(Quill.sources.USER);
177
+ this.tableSelection.setSelection(
178
+ mergedCell.domNode.getBoundingClientRect(),
179
+ mergedCell.domNode.getBoundingClientRect()
180
+ );
181
+ }
182
+ },
183
+ unmergeCells: {
184
+ text: langText["unmerge-cells"],
185
+ handler() {
186
+ const tableContainer = Quill.find(this.table);
187
+ tableContainer.unmergeCells(this.selectedTds, this.quill.root.parentNode);
188
+ this.quill.update(Quill.sources.USER);
189
+ this.tableSelection.clearSelection();
190
+ }
191
+ },
192
+ deleteColumn: {
193
+ text: langText["delete-column"],
194
+ handler() {
195
+ const tableContainer = Quill.find(this.table);
196
+ const colIndexes = getColToolCellIndexesByBoundary(
197
+ this.columnToolCells,
198
+ this.boundary,
199
+ (cellRect, boundary) => {
200
+ return cellRect.x + tableConfig.ERROR_LIMIT > boundary.x && cellRect.x + cellRect.width - tableConfig.ERROR_LIMIT < boundary.x1;
201
+ },
202
+ this.quill.root.parentNode
203
+ );
204
+ const isDeleteTable = tableContainer.deleteColumns(this.boundary, colIndexes, this.quill.root.parentNode);
205
+ if (!isDeleteTable) {
206
+ this.tableColumnTool.updateColToolCells();
207
+ this.quill.update(Quill.sources.USER);
208
+ this.tableSelection.clearSelection();
209
+ }
210
+ setTimeout(() => this.tableScrollBar.updateScrollBar());
211
+ }
212
+ },
213
+ deleteRow: {
214
+ text: langText["delete-row"],
215
+ handler() {
216
+ const tableContainer = Quill.find(this.table);
217
+ const isDeleteTable = tableContainer.deleteRow(this.boundary, this.quill.root.parentNode);
218
+ if (!isDeleteTable) {
219
+ this.tableColumnTool.updateRowToolCells();
220
+ this.quill.update(Quill.sources.USER);
221
+ this.tableSelection.clearSelection();
222
+ }
223
+ }
224
+ },
225
+ deleteTable: {
226
+ text: langText["delete-table"],
227
+ handler() {
228
+ const betterTableModule = this.quill.getModule("better-table");
229
+ const tableContainer = Quill.find(this.table);
230
+ betterTableModule.hideTableTools();
231
+ tableContainer.remove();
232
+ this.quill.update(Quill.sources.USER);
233
+ this.quill.focus();
234
+ }
235
+ }
236
+ };
227
237
  }
228
238
  mount() {
229
239
  this.quill.root.parentNode.appendChild(this.domNode);
@@ -272,7 +282,7 @@ class TableOperationMenu {
272
282
  index.css(this.domNode, cssContent);
273
283
  for (const name in this.menuItems) {
274
284
  if (this.menuItems[name]) {
275
- const item = { ...MENU_ITEMS_DEFAULT[name], ...this.menuItems[name] };
285
+ const item = { ...this.DEFAULT_MENU[name], ...this.menuItems[name] };
276
286
  const dom = this.menuItemCreator(item);
277
287
  if (name === "mergeCells" && this.tableSelection.selectedTds.length === 1 || name === "unmergeCells" && rowspan === 1 && colspan === 1) {
278
288
  dom.classList.add("qlbt-operation-menu-disabled");
@@ -1 +1 @@
1
- {"version":3,"file":"table-operation-menu.cjs.js","sources":["../../../../src/table/modules/table-operation-menu.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { LANG_CONF } from '../../config/editor.config'\r\nimport {\r\n ERROR_LIMIT,\r\n MENU_ITEM_HEIGHT,\r\n MENU_MIN_HEIGHT,\r\n MENU_WIDTH,\r\n OPERATE_MENU_COLORPICKER_CLASS,\r\n\r\n OPERATE_MENU_COLORPICKER_ITEM_CLASS,\r\n OPERATE_MENU_DIVIDING_CLASS,\r\n OPERATE_MENU_ITEM_CLASS,\r\n OPERATE_MENU_SUBTITLE_CLASS,\r\n} from '../table-config'\r\n\r\nimport { arrayFrom, css, elementRemove, getRelativeRect } from '../utils'\r\n\r\nconst MENU_ITEMS_DEFAULT = {\r\n copyCells: {\r\n text: 'Copy Cells',\r\n handler() {\r\n this.onCopy('copy')\r\n },\r\n },\r\n copyTable: {\r\n text: 'Copy Table',\r\n handler() {\r\n this.tableColumnTool.destroy()\r\n this.tableScrollBar.destroy()\r\n this.tableSelection.clearSelection()\r\n const dom = this.table.cloneNode(true)\r\n const trArr = dom.querySelectorAll('tr[data-row]')\r\n trArr.forEach(tr => tr.removeAttribute('data-row'))\r\n dom.style.position = 'fixed'\r\n dom.style.top = 0\r\n dom.style.left = 0\r\n dom.style.clip = 'rect(0,0,0,0)'\r\n document.body.appendChild(dom)\r\n this.setCopyRange(dom)\r\n document.execCommand('copy')\r\n dom.remove()\r\n },\r\n },\r\n cutCells: {\r\n text: 'Cut Cells',\r\n handler() {\r\n this.onCopy('cut')\r\n },\r\n },\r\n emptyCells: {\r\n text: 'Empty Cells',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const { selectedTds } = this.tableSelection\r\n tableContainer.emptyCells(selectedTds)\r\n },\r\n },\r\n insertColumnRight: {\r\n text: 'Insert Column After',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const colIndex = getColToolCellIndexByBoundary(\r\n this.columnToolCells,\r\n this.boundary,\r\n (cellRect, boundary) => {\r\n return Math.abs(cellRect.x + cellRect.width - boundary.x1) <= ERROR_LIMIT\r\n },\r\n this.quill.root.parentNode,\r\n )\r\n\r\n const newColumn = tableContainer.insertColumn(this.boundary, colIndex, true, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateColToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // fix: the scroll bar will go to the top when insert row/column to the table\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(newColumn[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.updateScrollBar())\r\n },\r\n },\r\n\r\n insertColumnLeft: {\r\n text: 'Insert Column Before',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const colIndex = getColToolCellIndexByBoundary(\r\n this.columnToolCells,\r\n this.boundary,\r\n (cellRect, boundary) => {\r\n return Math.abs(cellRect.x - boundary.x) <= ERROR_LIMIT\r\n },\r\n this.quill.root.parentNode,\r\n )\r\n\r\n const newColumn = tableContainer.insertColumn(this.boundary, colIndex, false, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateColToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(newColumn[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.updateScrollBar())\r\n },\r\n },\r\n\r\n insertRowUp: {\r\n text: 'Insert Row Above',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const affectedCells = tableContainer.insertRow(this.boundary, false, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateRowToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(affectedCells[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.resetTableHeight(this.table))\r\n },\r\n },\r\n\r\n insertRowDown: {\r\n text: 'Insert Row Below',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const affectedCells = tableContainer.insertRow(this.boundary, true, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateRowToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(affectedCells[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.resetTableHeight(this.table))\r\n },\r\n },\r\n\r\n mergeCells: {\r\n text: 'Merge Cells',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n // compute merged Cell rowspan, equal to length of selected rows\r\n const rowspan = tableContainer.rows().reduce((sum, row) => {\r\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), this.quill.root.parentNode)\r\n if (\r\n rowRect.y > this.boundary.y - ERROR_LIMIT\r\n && rowRect.y + rowRect.height < this.boundary.y + this.boundary.height + ERROR_LIMIT\r\n ) {\r\n sum += 1\r\n }\r\n return sum\r\n }, 0)\r\n\r\n // compute merged cell colspan, equal to length of selected cols\r\n const colspan = this.columnToolCells.reduce((sum, cell) => {\r\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), this.quill.root.parentNode)\r\n if (\r\n cellRect.x > this.boundary.x - ERROR_LIMIT\r\n && cellRect.x + cellRect.width < this.boundary.x + this.boundary.width + ERROR_LIMIT\r\n ) {\r\n sum += 1\r\n }\r\n return sum\r\n }, 0)\r\n\r\n const mergedCell = tableContainer.mergeCells(\r\n this.boundary,\r\n this.selectedTds,\r\n rowspan,\r\n colspan,\r\n this.quill.root.parentNode,\r\n )\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.setSelection(\r\n mergedCell.domNode.getBoundingClientRect(),\r\n mergedCell.domNode.getBoundingClientRect(),\r\n )\r\n },\r\n },\r\n\r\n unmergeCells: {\r\n text: 'Split Cells',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n tableContainer.unmergeCells(this.selectedTds, this.quill.root.parentNode)\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.clearSelection()\r\n },\r\n },\r\n\r\n deleteColumn: {\r\n text: 'Delete Columns',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const colIndexes = getColToolCellIndexesByBoundary(\r\n this.columnToolCells,\r\n this.boundary,\r\n (cellRect, boundary) => {\r\n return cellRect.x + ERROR_LIMIT > boundary.x && cellRect.x + cellRect.width - ERROR_LIMIT < boundary.x1\r\n },\r\n this.quill.root.parentNode,\r\n )\r\n\r\n const isDeleteTable = tableContainer.deleteColumns(this.boundary, colIndexes, this.quill.root.parentNode)\r\n if (!isDeleteTable) {\r\n this.tableColumnTool.updateColToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.clearSelection()\r\n }\r\n\r\n setTimeout(() => this.tableScrollBar.updateScrollBar())\r\n },\r\n },\r\n\r\n deleteRow: {\r\n text: 'Delete Rows',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const isDeleteTable = tableContainer.deleteRow(this.boundary, this.quill.root.parentNode)\r\n if (!isDeleteTable) {\r\n this.tableColumnTool.updateRowToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.clearSelection()\r\n }\r\n },\r\n },\r\n\r\n deleteTable: {\r\n text: 'Remove Table',\r\n handler() {\r\n const betterTableModule = this.quill.getModule('better-table')\r\n const tableContainer = Quill.find(this.table)\r\n betterTableModule.hideTableTools()\r\n tableContainer.remove()\r\n this.quill.update(Quill.sources.USER)\r\n // fix: 右键菜单删除表格后编辑器失焦\r\n this.quill.focus()\r\n },\r\n },\r\n}\r\nconst DEFAULT_CELL_COLORS = ['white', 'red', 'yellow', 'blue']\r\nconst NODE_EVENT_MAP = new WeakMap()\r\nconst DEFAULT_COLOR_SUBTITLE = LANG_CONF.subTitleBgColor\r\nexport default class TableOperationMenu {\r\n tableSelection: any\r\n table: any\r\n quill: any\r\n options: any\r\n menuItems: any\r\n tableColumnTool: any\r\n tableScrollBar: any\r\n boundary: any\r\n selectedTds: any\r\n destroyHandler: any\r\n columnToolCells: any\r\n colorSubTitle: any\r\n cellColors: any\r\n domNode: any\r\n\r\n constructor(params, quill, options) {\r\n const betterTableModule = quill.getModule('better-table')\r\n this.tableSelection = betterTableModule.tableSelection\r\n this.table = params.table\r\n this.quill = quill\r\n this.options = options\r\n this.menuItems = { ...MENU_ITEMS_DEFAULT, ...options.items }\r\n this.tableColumnTool = betterTableModule.columnTool\r\n // this.tableRowTool = betterTableModule.rowTool\r\n this.tableScrollBar = betterTableModule.tableScrollBar\r\n this.boundary = this.tableSelection.boundary\r\n this.selectedTds = this.tableSelection.selectedTds\r\n this.destroyHandler = this.destroy.bind(this)\r\n this.columnToolCells = this.tableColumnTool.colToolCells()\r\n this.colorSubTitle\r\n = options.color && options.color.text\r\n ? options.color.text\r\n : DEFAULT_COLOR_SUBTITLE\r\n this.cellColors\r\n = options.color && options.color.colors\r\n ? options.color.colors\r\n : DEFAULT_CELL_COLORS\r\n\r\n this.menuInitial(params)\r\n this.mount()\r\n document.addEventListener('click', this.destroyHandler, false)\r\n }\r\n\r\n mount() {\r\n this.quill.root.parentNode.appendChild(this.domNode)\r\n }\r\n\r\n destroy() {\r\n const menuItems = arrayFrom(\r\n this.domNode.querySelectorAll(`.${OPERATE_MENU_ITEM_CLASS}`),\r\n )\r\n const colorPickerItems = arrayFrom(\r\n this.domNode.querySelectorAll(`.${OPERATE_MENU_COLORPICKER_ITEM_CLASS}`),\r\n )\r\n const nodes = menuItems.concat(colorPickerItems)\r\n\r\n nodes.forEach((node) => {\r\n if (NODE_EVENT_MAP.has(node)) {\r\n const unregister = NODE_EVENT_MAP.get(node)\r\n\r\n if (unregister && typeof unregister === 'function') {\r\n unregister()\r\n }\r\n }\r\n })\r\n\r\n elementRemove(this.domNode)\r\n document.removeEventListener('mousedown', this.destroyHandler, false)\r\n\r\n return null\r\n }\r\n\r\n menuInitial({ cell, left, top }) {\r\n const rowspan = cell.getAttribute('rowspan')\r\n const colspan = cell.getAttribute('colspan')\r\n const winHeight = window.innerHeight || Math.max(document.documentElement.clientHeight, document.body.clientHeight)\r\n const num = Object.keys(this.menuItems) || []\r\n const menuHeight = MENU_ITEM_HEIGHT * num.length || MENU_MIN_HEIGHT\r\n const transformOffset = checkAndGetViewPointChange(this.quill.root.parentNode, left, top)\r\n const leftPos = left - transformOffset.offsetX\r\n const topPos = top - transformOffset.offsetY\r\n const cssContent = {\r\n 'left': `${leftPos}px`,\r\n 'top': `${topPos}px`,\r\n 'min-height': `${MENU_MIN_HEIGHT}px`,\r\n 'width': `${MENU_WIDTH}px`,\r\n }\r\n\r\n if (menuHeight + top > winHeight && menuHeight < winHeight) {\r\n delete cssContent.top\r\n cssContent.bottom = '10px'\r\n }\r\n\r\n this.domNode = document.createElement('div')\r\n this.domNode.classList.add('qlbt-operation-menu')\r\n css(this.domNode, cssContent)\r\n\r\n for (const name in this.menuItems) {\r\n if (this.menuItems[name]) {\r\n const item = { ...MENU_ITEMS_DEFAULT[name], ...this.menuItems[name] }\r\n const dom = this.menuItemCreator(item)\r\n if (\r\n (name === 'mergeCells' && this.tableSelection.selectedTds.length === 1)\r\n || (name === 'unmergeCells' && rowspan === 1 && colspan === 1)\r\n ) {\r\n dom.classList.add('qlbt-operation-menu-disabled')\r\n }\r\n else {\r\n dom.addEventListener('mouseup', item.handler.bind(this), false)\r\n }\r\n this.domNode.appendChild(dom)\r\n }\r\n }\r\n\r\n // if colors option is false, disabled bg color\r\n if (this.options.color && this.options.color !== false) {\r\n this.domNode.appendChild(dividingCreator())\r\n this.domNode.appendChild(subTitleCreator(this.colorSubTitle))\r\n this.domNode.appendChild(this.colorsItemCreator(this.cellColors))\r\n }\r\n\r\n // create dividing line\r\n function dividingCreator() {\r\n const dividing = document.createElement('div')\r\n dividing.classList.add(OPERATE_MENU_DIVIDING_CLASS)\r\n return dividing\r\n }\r\n\r\n // create subtitle for menu\r\n function subTitleCreator(title) {\r\n const subTitle = document.createElement('div')\r\n subTitle.classList.add(OPERATE_MENU_SUBTITLE_CLASS)\r\n subTitle.textContent = title\r\n return subTitle\r\n }\r\n }\r\n\r\n colorsItemCreator(colors) {\r\n const self = this\r\n const node = document.createElement('div')\r\n node.classList.add(OPERATE_MENU_COLORPICKER_CLASS)\r\n\r\n colors.forEach((color) => {\r\n const colorBox = colorBoxCreator(color)\r\n node.appendChild(colorBox)\r\n })\r\n\r\n function colorBoxCreator(color) {\r\n const box = document.createElement('div')\r\n box.classList.add(OPERATE_MENU_COLORPICKER_ITEM_CLASS)\r\n box.setAttribute('data-color', color)\r\n box.style.backgroundColor = color\r\n\r\n const clickHandler = function () {\r\n const selectedTds = self.tableSelection.selectedTds\r\n if (selectedTds && selectedTds.length > 0) {\r\n selectedTds.forEach((tableCell) => {\r\n tableCell.domNode.children[0].setAttribute('data-parent-bg', color)\r\n tableCell.format('cell-bg', color)\r\n })\r\n }\r\n }\r\n\r\n box.addEventListener('click', clickHandler, false)\r\n\r\n NODE_EVENT_MAP.set(box, () => {\r\n box.removeEventListener('click', clickHandler, false)\r\n })\r\n\r\n return box\r\n }\r\n\r\n return node\r\n }\r\n\r\n menuItemCreator({ text }) {\r\n const node = document.createElement('div')\r\n node.classList.add('qlbt-operation-menu-item')\r\n node.textContent = text\r\n // node.addEventListener('click', handler.bind(this), false)\r\n return node\r\n }\r\n\r\n onCopy(operation) {\r\n const { selectedTds } = this.tableSelection\r\n const virtualTable = this.createVirtualTable(selectedTds, operation)\r\n document.body.appendChild(virtualTable)\r\n this.setCopyRange(virtualTable)\r\n this.tableSelection.preSelectedTable = virtualTable\r\n this.tableSelection.preSelectedTds = selectedTds\r\n document.execCommand('copy')\r\n virtualTable.remove()\r\n if (operation === 'cut') {\r\n const tableContainer = Quill.find(this.table)\r\n tableContainer.emptyCells(selectedTds)\r\n }\r\n }\r\n\r\n createVirtualTable(selectedTds, _operation) {\r\n const virtualTable: any = document.createElement('table')\r\n virtualTable.style.position = 'fixed'\r\n virtualTable.style.top = 0\r\n virtualTable.style.left = 0\r\n virtualTable.style.clip = 'rect(0,0,0,0)'\r\n let preParentSign = ''\r\n let virtualTr = null\r\n selectedTds.forEach((selectedCell) => {\r\n const { domNode, parent } = selectedCell\r\n const currentParentSign = parent.domNode.getAttribute('data-row')\r\n const rowspan = domNode.firstChild.dataset.rowspan\r\n const colspan = domNode.firstChild.dataset.colspan\r\n const row = domNode.firstChild.dataset.row\r\n const cell = domNode.firstChild.dataset.cell\r\n\r\n selectedCell.dataCell = cell\r\n selectedCell.dataRow = row\r\n selectedCell.dataColSpan = colspan\r\n selectedCell.dataRowSpan = rowspan\r\n\r\n if (currentParentSign !== preParentSign) {\r\n if (preParentSign !== '') {\r\n virtualTable.appendChild(virtualTr)\r\n }\r\n virtualTr = document.createElement('tr')\r\n preParentSign = currentParentSign\r\n }\r\n\r\n const domNodeWidth = domNode.offsetWidth\r\n const cloneNode = domNode.cloneNode(true)\r\n cloneNode.setAttribute('width', domNodeWidth)\r\n\r\n virtualTr.appendChild(cloneNode)\r\n })\r\n virtualTable.appendChild(virtualTr)\r\n return virtualTable\r\n }\r\n\r\n setCopyRange(selectedNodes) {\r\n const range = document.createRange()\r\n const windowSelectionRange = window.getSelection()\r\n range.selectNodeContents(selectedNodes)\r\n windowSelectionRange.removeAllRanges()\r\n windowSelectionRange.addRange(range)\r\n }\r\n\r\n groupTableCell(selectedTds) {\r\n const rowGroup = []\r\n let dataRow = ''\r\n let preDataRow = ''\r\n let index = 0\r\n selectedTds.forEach((tableCell) => {\r\n dataRow = tableCell.parent.domNode.getAttribute('data-row')\r\n\r\n if (dataRow !== preDataRow) {\r\n if (preDataRow !== '') {\r\n index++\r\n }\r\n rowGroup[index] = []\r\n preDataRow = dataRow\r\n }\r\n\r\n rowGroup[index].push(tableCell)\r\n })\r\n return rowGroup\r\n }\r\n}\r\n\r\nfunction getColToolCellIndexByBoundary(cells, boundary, conditionFn, container) {\r\n return cells.reduce((findIndex, cell) => {\r\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), container)\r\n if (conditionFn(cellRect, boundary)) {\r\n findIndex = cells.indexOf(cell)\r\n }\r\n return findIndex\r\n }, false)\r\n}\r\n\r\nfunction getColToolCellIndexesByBoundary(cells, boundary, conditionFn, container) {\r\n return cells.reduce((findIndexes, cell) => {\r\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), container)\r\n if (conditionFn(cellRect, boundary)) {\r\n findIndexes.push(cells.indexOf(cell))\r\n }\r\n return findIndexes\r\n }, [])\r\n}\r\n\r\nfunction checkAndGetViewPointChange(parentContainer: HTMLElement, left: number, top: number) {\r\n if (!parentContainer) {\r\n return {\r\n offsetX: 0,\r\n offsetY: 0,\r\n }\r\n }\r\n // 模拟一个元素测预测位置和最终位置是否符合,如果不符合则是有transform等造成的偏移\r\n const testEl = document.createElement('div')\r\n css(testEl, {\r\n opacity: '0',\r\n position: 'fixed',\r\n left: `${left}px`,\r\n top: `${top}px`,\r\n width: '1px',\r\n height: '1px',\r\n zIndex: '-999999',\r\n })\r\n parentContainer.appendChild(testEl)\r\n const testElPosition = testEl.getBoundingClientRect()\r\n parentContainer.removeChild(testEl)\r\n return {\r\n offsetX: testElPosition.left - left,\r\n offsetY: testElPosition.top - top,\r\n }\r\n}\r\n"],"names":["ERROR_LIMIT","getRelativeRect","LANG_CONF","arrayFrom","OPERATE_MENU_ITEM_CLASS","OPERATE_MENU_COLORPICKER_ITEM_CLASS","elementRemove","MENU_ITEM_HEIGHT","MENU_MIN_HEIGHT","MENU_WIDTH","css","OPERATE_MENU_DIVIDING_CLASS","OPERATE_MENU_SUBTITLE_CLASS","OPERATE_MENU_COLORPICKER_CLASS","index"],"mappings":"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"}
1
+ {"version":3,"file":"table-operation-menu.cjs.js","sources":["../../../../src/table/modules/table-operation-menu.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\nimport {\r\n ERROR_LIMIT,\r\n MENU_ITEM_HEIGHT,\r\n MENU_MIN_HEIGHT,\r\n MENU_WIDTH,\r\n OPERATE_MENU_COLORPICKER_CLASS,\r\n OPERATE_MENU_COLORPICKER_ITEM_CLASS,\r\n OPERATE_MENU_DIVIDING_CLASS,\r\n OPERATE_MENU_ITEM_CLASS,\r\n OPERATE_MENU_SUBTITLE_CLASS,\r\n} from '../table-config'\r\nimport { arrayFrom, css, elementRemove, getRelativeRect } from '../utils'\r\n\r\nconst DEFAULT_CELL_COLORS = ['white', 'red', 'yellow', 'blue']\r\nconst NODE_EVENT_MAP = new WeakMap()\r\nexport default class TableOperationMenu {\r\n tableSelection: any\r\n table: any\r\n quill: any\r\n options: any\r\n menuItems: any\r\n tableColumnTool: any\r\n tableScrollBar: any\r\n boundary: any\r\n selectedTds: any\r\n destroyHandler: any\r\n columnToolCells: any\r\n colorSubTitle: any\r\n cellColors: any\r\n domNode: any\r\n DEFAULT_COLOR_SUBTITLE: string\r\n DEFAULT_MENU: Record<string, {\r\n text: string\r\n handler: () => void\r\n }>\r\n\r\n constructor(params, quill, options) {\r\n const betterTableModule = quill.getModule('better-table')\r\n this.tableSelection = betterTableModule.tableSelection\r\n this.table = params.table\r\n this.quill = quill\r\n this.options = options\r\n this.setDefaultMenu()\r\n this.menuItems = { ...this.DEFAULT_MENU, ...options.items }\r\n this.tableColumnTool = betterTableModule.columnTool\r\n // this.tableRowTool = betterTableModule.rowTool\r\n this.tableScrollBar = betterTableModule.tableScrollBar\r\n this.boundary = this.tableSelection.boundary\r\n this.selectedTds = this.tableSelection.selectedTds\r\n this.destroyHandler = this.destroy.bind(this)\r\n this.columnToolCells = this.tableColumnTool.colToolCells()\r\n this.DEFAULT_COLOR_SUBTITLE = this.quill.options.langText['sub-title-bg-color']\r\n this.colorSubTitle\r\n = options.color && options.color.text\r\n ? options.color.text\r\n : this.DEFAULT_COLOR_SUBTITLE\r\n this.cellColors\r\n = options.color && options.color.colors\r\n ? options.color.colors\r\n : DEFAULT_CELL_COLORS\r\n\r\n this.menuInitial(params)\r\n this.mount()\r\n document.addEventListener('click', this.destroyHandler, false)\r\n this.quill.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.destroy()\r\n this.DEFAULT_COLOR_SUBTITLE = this.quill.options.langText['sub-title-bg-color']\r\n this.setDefaultMenu()\r\n })\r\n }\r\n\r\n setDefaultMenu() {\r\n const langText = this.quill.options.langText\r\n this.DEFAULT_MENU = {\r\n copyCells: {\r\n text: langText['copy-cells'],\r\n handler() {\r\n this.onCopy('copy')\r\n },\r\n },\r\n copyTable: {\r\n text: langText['copy-table'],\r\n handler() {\r\n this.tableColumnTool.destroy()\r\n this.tableScrollBar.destroy()\r\n this.tableSelection.clearSelection()\r\n const dom = this.table.cloneNode(true)\r\n const trArr = dom.querySelectorAll('tr[data-row]')\r\n trArr.forEach(tr => tr.removeAttribute('data-row'))\r\n dom.style.position = 'fixed'\r\n dom.style.top = 0\r\n dom.style.left = 0\r\n dom.style.clip = 'rect(0,0,0,0)'\r\n document.body.appendChild(dom)\r\n this.setCopyRange(dom)\r\n document.execCommand('copy')\r\n dom.remove()\r\n },\r\n },\r\n cutCells: {\r\n text: langText['cut-cells'],\r\n handler() {\r\n this.onCopy('cut')\r\n },\r\n },\r\n emptyCells: {\r\n text: langText['empty-cells'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const { selectedTds } = this.tableSelection\r\n tableContainer.emptyCells(selectedTds)\r\n },\r\n },\r\n insertColumnRight: {\r\n text: langText['insert-column-right'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const colIndex = getColToolCellIndexByBoundary(\r\n this.columnToolCells,\r\n this.boundary,\r\n (cellRect, boundary) => {\r\n return Math.abs(cellRect.x + cellRect.width - boundary.x1) <= ERROR_LIMIT\r\n },\r\n this.quill.root.parentNode,\r\n )\r\n\r\n const newColumn = tableContainer.insertColumn(this.boundary, colIndex, true, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateColToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // fix: the scroll bar will go to the top when insert row/column to the table\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(newColumn[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.updateScrollBar())\r\n },\r\n },\r\n insertColumnLeft: {\r\n text: langText['insert-column-left'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const colIndex = getColToolCellIndexByBoundary(\r\n this.columnToolCells,\r\n this.boundary,\r\n (cellRect, boundary) => {\r\n return Math.abs(cellRect.x - boundary.x) <= ERROR_LIMIT\r\n },\r\n this.quill.root.parentNode,\r\n )\r\n\r\n const newColumn = tableContainer.insertColumn(this.boundary, colIndex, false, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateColToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(newColumn[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.updateScrollBar())\r\n },\r\n },\r\n insertRowUp: {\r\n text: langText['insert-row-up'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const affectedCells = tableContainer.insertRow(this.boundary, false, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateRowToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(affectedCells[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.resetTableHeight(this.table))\r\n },\r\n },\r\n insertRowDown: {\r\n text: langText['insert-row-down'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const affectedCells = tableContainer.insertRow(this.boundary, true, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateRowToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(affectedCells[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.resetTableHeight(this.table))\r\n },\r\n },\r\n mergeCells: {\r\n text: langText['merge-cells'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n // compute merged Cell rowspan, equal to length of selected rows\r\n const rowspan = tableContainer.rows().reduce((sum, row) => {\r\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), this.quill.root.parentNode)\r\n if (\r\n rowRect.y > this.boundary.y - ERROR_LIMIT\r\n && rowRect.y + rowRect.height < this.boundary.y + this.boundary.height + ERROR_LIMIT\r\n ) {\r\n sum += 1\r\n }\r\n return sum\r\n }, 0)\r\n\r\n // compute merged cell colspan, equal to length of selected cols\r\n const colspan = this.columnToolCells.reduce((sum, cell) => {\r\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), this.quill.root.parentNode)\r\n if (\r\n cellRect.x > this.boundary.x - ERROR_LIMIT\r\n && cellRect.x + cellRect.width < this.boundary.x + this.boundary.width + ERROR_LIMIT\r\n ) {\r\n sum += 1\r\n }\r\n return sum\r\n }, 0)\r\n\r\n const mergedCell = tableContainer.mergeCells(\r\n this.boundary,\r\n this.selectedTds,\r\n rowspan,\r\n colspan,\r\n this.quill.root.parentNode,\r\n )\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.setSelection(\r\n mergedCell.domNode.getBoundingClientRect(),\r\n mergedCell.domNode.getBoundingClientRect(),\r\n )\r\n },\r\n },\r\n unmergeCells: {\r\n text: langText['unmerge-cells'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n tableContainer.unmergeCells(this.selectedTds, this.quill.root.parentNode)\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.clearSelection()\r\n },\r\n },\r\n deleteColumn: {\r\n text: langText['delete-column'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const colIndexes = getColToolCellIndexesByBoundary(\r\n this.columnToolCells,\r\n this.boundary,\r\n (cellRect, boundary) => {\r\n return cellRect.x + ERROR_LIMIT > boundary.x && cellRect.x + cellRect.width - ERROR_LIMIT < boundary.x1\r\n },\r\n this.quill.root.parentNode,\r\n )\r\n\r\n const isDeleteTable = tableContainer.deleteColumns(this.boundary, colIndexes, this.quill.root.parentNode)\r\n if (!isDeleteTable) {\r\n this.tableColumnTool.updateColToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.clearSelection()\r\n }\r\n\r\n setTimeout(() => this.tableScrollBar.updateScrollBar())\r\n },\r\n },\r\n deleteRow: {\r\n text: langText['delete-row'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const isDeleteTable = tableContainer.deleteRow(this.boundary, this.quill.root.parentNode)\r\n if (!isDeleteTable) {\r\n this.tableColumnTool.updateRowToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.clearSelection()\r\n }\r\n },\r\n },\r\n deleteTable: {\r\n text: langText['delete-table'],\r\n handler() {\r\n const betterTableModule = this.quill.getModule('better-table')\r\n const tableContainer = Quill.find(this.table)\r\n betterTableModule.hideTableTools()\r\n tableContainer.remove()\r\n this.quill.update(Quill.sources.USER)\r\n // fix: 右键菜单删除表格后编辑器失焦\r\n this.quill.focus()\r\n },\r\n },\r\n }\r\n }\r\n\r\n mount() {\r\n this.quill.root.parentNode.appendChild(this.domNode)\r\n }\r\n\r\n destroy() {\r\n const menuItems = arrayFrom(\r\n this.domNode.querySelectorAll(`.${OPERATE_MENU_ITEM_CLASS}`),\r\n )\r\n const colorPickerItems = arrayFrom(\r\n this.domNode.querySelectorAll(`.${OPERATE_MENU_COLORPICKER_ITEM_CLASS}`),\r\n )\r\n const nodes = menuItems.concat(colorPickerItems)\r\n\r\n nodes.forEach((node) => {\r\n if (NODE_EVENT_MAP.has(node)) {\r\n const unregister = NODE_EVENT_MAP.get(node)\r\n\r\n if (unregister && typeof unregister === 'function') {\r\n unregister()\r\n }\r\n }\r\n })\r\n\r\n elementRemove(this.domNode)\r\n document.removeEventListener('mousedown', this.destroyHandler, false)\r\n\r\n return null\r\n }\r\n\r\n menuInitial({ cell, left, top }) {\r\n const rowspan = cell.getAttribute('rowspan')\r\n const colspan = cell.getAttribute('colspan')\r\n const winHeight = window.innerHeight || Math.max(document.documentElement.clientHeight, document.body.clientHeight)\r\n const num = Object.keys(this.menuItems) || []\r\n const menuHeight = MENU_ITEM_HEIGHT * num.length || MENU_MIN_HEIGHT\r\n const transformOffset = checkAndGetViewPointChange(this.quill.root.parentNode, left, top)\r\n const leftPos = left - transformOffset.offsetX\r\n const topPos = top - transformOffset.offsetY\r\n const cssContent = {\r\n 'left': `${leftPos}px`,\r\n 'top': `${topPos}px`,\r\n 'min-height': `${MENU_MIN_HEIGHT}px`,\r\n 'width': `${MENU_WIDTH}px`,\r\n }\r\n\r\n if (menuHeight + top > winHeight && menuHeight < winHeight) {\r\n delete cssContent.top\r\n cssContent.bottom = '10px'\r\n }\r\n\r\n this.domNode = document.createElement('div')\r\n this.domNode.classList.add('qlbt-operation-menu')\r\n css(this.domNode, cssContent)\r\n\r\n for (const name in this.menuItems) {\r\n if (this.menuItems[name]) {\r\n const item = { ...this.DEFAULT_MENU[name], ...this.menuItems[name] }\r\n const dom = this.menuItemCreator(item)\r\n if (\r\n (name === 'mergeCells' && this.tableSelection.selectedTds.length === 1)\r\n || (name === 'unmergeCells' && rowspan === 1 && colspan === 1)\r\n ) {\r\n dom.classList.add('qlbt-operation-menu-disabled')\r\n }\r\n else {\r\n dom.addEventListener('mouseup', item.handler.bind(this), false)\r\n }\r\n this.domNode.appendChild(dom)\r\n }\r\n }\r\n\r\n // if colors option is false, disabled bg color\r\n if (this.options.color && this.options.color !== false) {\r\n this.domNode.appendChild(dividingCreator())\r\n this.domNode.appendChild(subTitleCreator(this.colorSubTitle))\r\n this.domNode.appendChild(this.colorsItemCreator(this.cellColors))\r\n }\r\n\r\n // create dividing line\r\n function dividingCreator() {\r\n const dividing = document.createElement('div')\r\n dividing.classList.add(OPERATE_MENU_DIVIDING_CLASS)\r\n return dividing\r\n }\r\n\r\n // create subtitle for menu\r\n function subTitleCreator(title) {\r\n const subTitle = document.createElement('div')\r\n subTitle.classList.add(OPERATE_MENU_SUBTITLE_CLASS)\r\n subTitle.textContent = title\r\n return subTitle\r\n }\r\n }\r\n\r\n colorsItemCreator(colors) {\r\n const self = this\r\n const node = document.createElement('div')\r\n node.classList.add(OPERATE_MENU_COLORPICKER_CLASS)\r\n\r\n colors.forEach((color) => {\r\n const colorBox = colorBoxCreator(color)\r\n node.appendChild(colorBox)\r\n })\r\n\r\n function colorBoxCreator(color) {\r\n const box = document.createElement('div')\r\n box.classList.add(OPERATE_MENU_COLORPICKER_ITEM_CLASS)\r\n box.setAttribute('data-color', color)\r\n box.style.backgroundColor = color\r\n\r\n const clickHandler = function () {\r\n const selectedTds = self.tableSelection.selectedTds\r\n if (selectedTds && selectedTds.length > 0) {\r\n selectedTds.forEach((tableCell) => {\r\n tableCell.domNode.children[0].setAttribute('data-parent-bg', color)\r\n tableCell.format('cell-bg', color)\r\n })\r\n }\r\n }\r\n\r\n box.addEventListener('click', clickHandler, false)\r\n\r\n NODE_EVENT_MAP.set(box, () => {\r\n box.removeEventListener('click', clickHandler, false)\r\n })\r\n\r\n return box\r\n }\r\n\r\n return node\r\n }\r\n\r\n menuItemCreator({ text }) {\r\n const node = document.createElement('div')\r\n node.classList.add('qlbt-operation-menu-item')\r\n node.textContent = text\r\n // node.addEventListener('click', handler.bind(this), false)\r\n return node\r\n }\r\n\r\n onCopy(operation) {\r\n const { selectedTds } = this.tableSelection\r\n const virtualTable = this.createVirtualTable(selectedTds, operation)\r\n document.body.appendChild(virtualTable)\r\n this.setCopyRange(virtualTable)\r\n this.tableSelection.preSelectedTable = virtualTable\r\n this.tableSelection.preSelectedTds = selectedTds\r\n document.execCommand('copy')\r\n virtualTable.remove()\r\n if (operation === 'cut') {\r\n const tableContainer = Quill.find(this.table)\r\n tableContainer.emptyCells(selectedTds)\r\n }\r\n }\r\n\r\n createVirtualTable(selectedTds, _operation) {\r\n const virtualTable: any = document.createElement('table')\r\n virtualTable.style.position = 'fixed'\r\n virtualTable.style.top = 0\r\n virtualTable.style.left = 0\r\n virtualTable.style.clip = 'rect(0,0,0,0)'\r\n let preParentSign = ''\r\n let virtualTr = null\r\n selectedTds.forEach((selectedCell) => {\r\n const { domNode, parent } = selectedCell\r\n const currentParentSign = parent.domNode.getAttribute('data-row')\r\n const rowspan = domNode.firstChild.dataset.rowspan\r\n const colspan = domNode.firstChild.dataset.colspan\r\n const row = domNode.firstChild.dataset.row\r\n const cell = domNode.firstChild.dataset.cell\r\n\r\n selectedCell.dataCell = cell\r\n selectedCell.dataRow = row\r\n selectedCell.dataColSpan = colspan\r\n selectedCell.dataRowSpan = rowspan\r\n\r\n if (currentParentSign !== preParentSign) {\r\n if (preParentSign !== '') {\r\n virtualTable.appendChild(virtualTr)\r\n }\r\n virtualTr = document.createElement('tr')\r\n preParentSign = currentParentSign\r\n }\r\n\r\n const domNodeWidth = domNode.offsetWidth\r\n const cloneNode = domNode.cloneNode(true)\r\n cloneNode.setAttribute('width', domNodeWidth)\r\n\r\n virtualTr.appendChild(cloneNode)\r\n })\r\n virtualTable.appendChild(virtualTr)\r\n return virtualTable\r\n }\r\n\r\n setCopyRange(selectedNodes) {\r\n const range = document.createRange()\r\n const windowSelectionRange = window.getSelection()\r\n range.selectNodeContents(selectedNodes)\r\n windowSelectionRange.removeAllRanges()\r\n windowSelectionRange.addRange(range)\r\n }\r\n\r\n groupTableCell(selectedTds) {\r\n const rowGroup = []\r\n let dataRow = ''\r\n let preDataRow = ''\r\n let index = 0\r\n selectedTds.forEach((tableCell) => {\r\n dataRow = tableCell.parent.domNode.getAttribute('data-row')\r\n\r\n if (dataRow !== preDataRow) {\r\n if (preDataRow !== '') {\r\n index++\r\n }\r\n rowGroup[index] = []\r\n preDataRow = dataRow\r\n }\r\n\r\n rowGroup[index].push(tableCell)\r\n })\r\n return rowGroup\r\n }\r\n}\r\n\r\nfunction getColToolCellIndexByBoundary(cells, boundary, conditionFn, container) {\r\n return cells.reduce((findIndex, cell) => {\r\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), container)\r\n if (conditionFn(cellRect, boundary)) {\r\n findIndex = cells.indexOf(cell)\r\n }\r\n return findIndex\r\n }, false)\r\n}\r\n\r\nfunction getColToolCellIndexesByBoundary(cells, boundary, conditionFn, container) {\r\n return cells.reduce((findIndexes, cell) => {\r\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), container)\r\n if (conditionFn(cellRect, boundary)) {\r\n findIndexes.push(cells.indexOf(cell))\r\n }\r\n return findIndexes\r\n }, [])\r\n}\r\n\r\nfunction checkAndGetViewPointChange(parentContainer: HTMLElement, left: number, top: number) {\r\n if (!parentContainer) {\r\n return {\r\n offsetX: 0,\r\n offsetY: 0,\r\n }\r\n }\r\n // 模拟一个元素测预测位置和最终位置是否符合,如果不符合则是有transform等造成的偏移\r\n const testEl = document.createElement('div')\r\n css(testEl, {\r\n opacity: '0',\r\n position: 'fixed',\r\n left: `${left}px`,\r\n top: `${top}px`,\r\n width: '1px',\r\n height: '1px',\r\n zIndex: '-999999',\r\n })\r\n parentContainer.appendChild(testEl)\r\n const testElPosition = testEl.getBoundingClientRect()\r\n parentContainer.removeChild(testEl)\r\n return {\r\n offsetX: testElPosition.left - left,\r\n offsetY: testElPosition.top - top,\r\n }\r\n}\r\n"],"names":["CHANGE_LANGUAGE_EVENT","ERROR_LIMIT","getRelativeRect","arrayFrom","OPERATE_MENU_ITEM_CLASS","OPERATE_MENU_COLORPICKER_ITEM_CLASS","elementRemove","MENU_ITEM_HEIGHT","MENU_MIN_HEIGHT","MENU_WIDTH","css","OPERATE_MENU_DIVIDING_CLASS","OPERATE_MENU_SUBTITLE_CLASS","OPERATE_MENU_COLORPICKER_CLASS","index"],"mappings":"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"}