@opentiny/fluent-editor 3.25.4 → 4.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/attributors/font-style.es.js +1 -1
- package/es/attributors/font-style.es.js.map +1 -1
- package/es/attributors/line-height.es.js +1 -1
- package/es/attributors/line-height.es.js.map +1 -1
- package/es/config/editor.config.es.js +0 -7
- package/es/config/editor.config.es.js.map +1 -1
- package/es/config/editor.utils.es.js +0 -9
- package/es/config/editor.utils.es.js.map +1 -1
- package/es/config/i18n/en-us.es.js +33 -17
- package/es/config/i18n/en-us.es.js.map +1 -1
- package/es/config/i18n/zh-cn.es.js +33 -17
- package/es/config/i18n/zh-cn.es.js.map +1 -1
- package/es/config/index.es.js +7 -13
- package/es/config/index.es.js.map +1 -1
- package/es/core/fluent-editor.es.js +6 -4
- package/es/core/fluent-editor.es.js.map +1 -1
- package/es/fluent-editor.es.js +24 -12
- package/es/fluent-editor.es.js.map +1 -1
- package/es/formats/video.es.js +2 -2
- package/es/formats/video.es.js.map +1 -1
- package/es/index.es.js +8 -4
- package/es/index.es.js.map +1 -1
- package/es/modules/custom-clipboard.es.js +3 -61
- package/es/modules/custom-clipboard.es.js.map +1 -1
- package/es/modules/custom-image/BlotFormatter.es.js +1 -2
- package/es/modules/custom-image/BlotFormatter.es.js.map +1 -1
- package/es/modules/custom-image/image.es.js +4 -16
- package/es/modules/custom-image/image.es.js.map +1 -1
- package/es/modules/custom-uploader.es.js +60 -193
- package/es/modules/custom-uploader.es.js.map +1 -1
- package/es/modules/file/formats/file.es.js +12 -14
- package/es/modules/file/formats/file.es.js.map +1 -1
- package/es/modules/file/index.es.js +6 -7
- package/es/modules/file/index.es.js.map +1 -1
- package/es/modules/i18n.es.js +32 -12
- package/es/modules/i18n.es.js.map +1 -1
- package/es/modules/link/index.es.js +0 -17
- package/es/modules/link/index.es.js.map +1 -1
- package/es/modules/link/modules/tooltip.es.js +3 -2
- package/es/modules/link/modules/tooltip.es.js.map +1 -1
- package/es/modules/shortcut-key/index.es.js +229 -0
- package/es/modules/shortcut-key/index.es.js.map +1 -0
- package/es/modules/table-up/index.es.js +64 -0
- package/es/modules/table-up/index.es.js.map +1 -0
- package/es/modules/toolbar/better-picker.es.js +21 -269
- package/es/modules/toolbar/better-picker.es.js.map +1 -1
- package/es/modules/toolbar/index.es.js +0 -1
- package/es/modules/toolbar/index.es.js.map +1 -1
- package/es/modules/toolbar/toolbar-tip.es.js +44 -9
- package/es/modules/toolbar/toolbar-tip.es.js.map +1 -1
- package/es/themes/snow.es.js +198 -50
- package/es/themes/snow.es.js.map +1 -1
- package/es/ui/icons.config.es.js +6 -5
- package/es/ui/icons.config.es.js.map +1 -1
- package/es/ui/icons.es.js +3 -12
- package/es/ui/icons.es.js.map +1 -1
- package/es/utils/is.es.js +4 -0
- package/es/utils/is.es.js.map +1 -1
- package/lib/attributors/font-style.cjs.js +1 -1
- package/lib/attributors/font-style.cjs.js.map +1 -1
- package/lib/attributors/line-height.cjs.js +1 -1
- package/lib/attributors/line-height.cjs.js.map +1 -1
- package/lib/config/editor.config.cjs.js +0 -7
- package/lib/config/editor.config.cjs.js.map +1 -1
- package/lib/config/editor.utils.cjs.js +0 -9
- package/lib/config/editor.utils.cjs.js.map +1 -1
- package/lib/config/i18n/en-us.cjs.js +33 -17
- package/lib/config/i18n/en-us.cjs.js.map +1 -1
- package/lib/config/i18n/zh-cn.cjs.js +33 -17
- package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
- package/lib/config/index.cjs.js +5 -11
- package/lib/config/index.cjs.js.map +1 -1
- package/lib/core/fluent-editor.cjs.js +5 -3
- package/lib/core/fluent-editor.cjs.js.map +1 -1
- package/lib/fluent-editor.cjs.js +23 -11
- package/lib/fluent-editor.cjs.js.map +1 -1
- package/lib/formats/video.cjs.js +2 -2
- package/lib/formats/video.cjs.js.map +1 -1
- package/lib/index.cjs.js +9 -2
- package/lib/index.cjs.js.map +1 -1
- package/lib/modules/custom-clipboard.cjs.js +2 -60
- package/lib/modules/custom-clipboard.cjs.js.map +1 -1
- package/lib/modules/custom-image/BlotFormatter.cjs.js +0 -1
- package/lib/modules/custom-image/BlotFormatter.cjs.js.map +1 -1
- package/lib/modules/custom-image/image.cjs.js +4 -16
- package/lib/modules/custom-image/image.cjs.js.map +1 -1
- package/lib/modules/custom-uploader.cjs.js +61 -194
- package/lib/modules/custom-uploader.cjs.js.map +1 -1
- package/lib/modules/file/formats/file.cjs.js +12 -14
- package/lib/modules/file/formats/file.cjs.js.map +1 -1
- package/lib/modules/file/index.cjs.js +6 -7
- package/lib/modules/file/index.cjs.js.map +1 -1
- package/lib/modules/i18n.cjs.js +31 -11
- package/lib/modules/i18n.cjs.js.map +1 -1
- package/lib/modules/link/index.cjs.js +0 -17
- package/lib/modules/link/index.cjs.js.map +1 -1
- package/lib/modules/link/modules/tooltip.cjs.js +2 -1
- package/lib/modules/link/modules/tooltip.cjs.js.map +1 -1
- package/lib/modules/shortcut-key/index.cjs.js +229 -0
- package/lib/modules/shortcut-key/index.cjs.js.map +1 -0
- package/lib/modules/table-up/index.cjs.js +64 -0
- package/lib/modules/table-up/index.cjs.js.map +1 -0
- package/lib/modules/toolbar/better-picker.cjs.js +21 -270
- package/lib/modules/toolbar/better-picker.cjs.js.map +1 -1
- package/lib/modules/toolbar/index.cjs.js +0 -1
- package/lib/modules/toolbar/index.cjs.js.map +1 -1
- package/lib/modules/toolbar/toolbar-tip.cjs.js +44 -9
- package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -1
- package/lib/themes/snow.cjs.js +200 -52
- package/lib/themes/snow.cjs.js.map +1 -1
- package/lib/ui/icons.cjs.js +2 -11
- package/lib/ui/icons.cjs.js.map +1 -1
- package/lib/ui/icons.config.cjs.js +6 -5
- package/lib/ui/icons.config.cjs.js.map +1 -1
- package/lib/utils/is.cjs.js +4 -0
- package/lib/utils/is.cjs.js.map +1 -1
- package/package.json +4 -2
- package/style.css +316 -2149
- package/types/attributors/font-style.d.ts +1 -1
- package/types/config/editor.config.d.ts +0 -218
- package/types/config/editor.utils.d.ts +0 -1
- package/types/config/i18n/en-us.d.ts +31 -16
- package/types/config/i18n/zh-cn.d.ts +31 -16
- package/types/config/index.d.ts +1 -1
- package/types/config/types/editor-config.interface.d.ts +0 -19
- package/types/config/types/editor-modules.interface.d.ts +2 -0
- package/types/config/types/toolbar-item.interface.d.ts +11 -11
- package/types/core/fluent-editor.d.ts +4 -1
- package/types/index.d.ts +3 -0
- package/types/modules/counter.d.ts +1 -1
- package/types/modules/custom-clipboard.d.ts +1 -1
- package/types/modules/custom-image/image.d.ts +8 -11
- package/types/modules/file/formats/file.d.ts +12 -8
- package/types/modules/file/index.d.ts +5 -5
- package/types/modules/i18n.d.ts +4 -4
- package/types/modules/shortcut-key/index.d.ts +68 -0
- package/types/modules/table-up/index.d.ts +66 -0
- package/types/modules/toolbar/better-picker.d.ts +15 -0
- package/types/themes/snow.d.ts +10 -2
- package/types/ui/icons.config.d.ts +2 -2
- package/types/utils/is.d.ts +2 -0
- package/es/modules/global-link/constants.es.js +0 -9
- package/es/modules/global-link/constants.es.js.map +0 -1
- package/es/modules/global-link/formats/customer-widget-link.es.js +0 -28
- package/es/modules/global-link/formats/customer-widget-link.es.js.map +0 -1
- package/es/modules/global-link/formats/doc-link.es.js +0 -42
- package/es/modules/global-link/formats/doc-link.es.js.map +0 -1
- package/es/modules/global-link/formats/wiki-link.es.js +0 -34
- package/es/modules/global-link/formats/wiki-link.es.js.map +0 -1
- package/es/modules/global-link/formats/work-item-link.es.js +0 -36
- package/es/modules/global-link/formats/work-item-link.es.js.map +0 -1
- package/es/modules/global-link/global-link-panel.es.js +0 -2
- package/es/modules/global-link/global-link-panel.es.js.map +0 -1
- package/es/modules/global-link/index.es.js +0 -139
- package/es/modules/global-link/index.es.js.map +0 -1
- package/es/modules/global-link/utils/createTable.es.js +0 -50
- package/es/modules/global-link/utils/createTable.es.js.map +0 -1
- package/es/modules/quick-menu.es.js +0 -82
- package/es/modules/quick-menu.es.js.map +0 -1
- package/es/modules/table/better-table.es.js +0 -485
- package/es/modules/table/better-table.es.js.map +0 -1
- package/es/modules/table/formats/header.es.js +0 -94
- package/es/modules/table/formats/header.es.js.map +0 -1
- package/es/modules/table/formats/list.es.js +0 -163
- package/es/modules/table/formats/list.es.js.map +0 -1
- package/es/modules/table/formats/table.es.js +0 -969
- package/es/modules/table/formats/table.es.js.map +0 -1
- package/es/modules/table/modules/table-column-tool.es.js +0 -400
- package/es/modules/table/modules/table-column-tool.es.js.map +0 -1
- package/es/modules/table/modules/table-operation-menu.es.js +0 -475
- package/es/modules/table/modules/table-operation-menu.es.js.map +0 -1
- package/es/modules/table/modules/table-scroll-bar.es.js +0 -190
- package/es/modules/table/modules/table-scroll-bar.es.js.map +0 -1
- package/es/modules/table/modules/table-selection.es.js +0 -305
- package/es/modules/table/modules/table-selection.es.js.map +0 -1
- package/es/modules/table/modules/table-selector.es.js +0 -158
- package/es/modules/table/modules/table-selector.es.js.map +0 -1
- package/es/modules/table/table-config.es.js +0 -74
- package/es/modules/table/table-config.es.js.map +0 -1
- package/es/modules/table/utils/index.es.js +0 -54
- package/es/modules/table/utils/index.es.js.map +0 -1
- package/es/modules/table/utils/node-matchers.es.js +0 -292
- package/es/modules/table/utils/node-matchers.es.js.map +0 -1
- package/lib/modules/global-link/constants.cjs.js +0 -9
- package/lib/modules/global-link/constants.cjs.js.map +0 -1
- package/lib/modules/global-link/formats/customer-widget-link.cjs.js +0 -28
- package/lib/modules/global-link/formats/customer-widget-link.cjs.js.map +0 -1
- package/lib/modules/global-link/formats/doc-link.cjs.js +0 -42
- package/lib/modules/global-link/formats/doc-link.cjs.js.map +0 -1
- package/lib/modules/global-link/formats/wiki-link.cjs.js +0 -34
- package/lib/modules/global-link/formats/wiki-link.cjs.js.map +0 -1
- package/lib/modules/global-link/formats/work-item-link.cjs.js +0 -36
- package/lib/modules/global-link/formats/work-item-link.cjs.js.map +0 -1
- package/lib/modules/global-link/global-link-panel.cjs.js +0 -2
- package/lib/modules/global-link/global-link-panel.cjs.js.map +0 -1
- package/lib/modules/global-link/index.cjs.js +0 -139
- package/lib/modules/global-link/index.cjs.js.map +0 -1
- package/lib/modules/global-link/utils/createTable.cjs.js +0 -50
- package/lib/modules/global-link/utils/createTable.cjs.js.map +0 -1
- package/lib/modules/quick-menu.cjs.js +0 -82
- package/lib/modules/quick-menu.cjs.js.map +0 -1
- package/lib/modules/table/better-table.cjs.js +0 -485
- package/lib/modules/table/better-table.cjs.js.map +0 -1
- package/lib/modules/table/formats/header.cjs.js +0 -94
- package/lib/modules/table/formats/header.cjs.js.map +0 -1
- package/lib/modules/table/formats/list.cjs.js +0 -163
- package/lib/modules/table/formats/list.cjs.js.map +0 -1
- package/lib/modules/table/formats/table.cjs.js +0 -969
- package/lib/modules/table/formats/table.cjs.js.map +0 -1
- package/lib/modules/table/modules/table-column-tool.cjs.js +0 -400
- package/lib/modules/table/modules/table-column-tool.cjs.js.map +0 -1
- package/lib/modules/table/modules/table-operation-menu.cjs.js +0 -475
- package/lib/modules/table/modules/table-operation-menu.cjs.js.map +0 -1
- package/lib/modules/table/modules/table-scroll-bar.cjs.js +0 -190
- package/lib/modules/table/modules/table-scroll-bar.cjs.js.map +0 -1
- package/lib/modules/table/modules/table-selection.cjs.js +0 -305
- package/lib/modules/table/modules/table-selection.cjs.js.map +0 -1
- package/lib/modules/table/modules/table-selector.cjs.js +0 -158
- package/lib/modules/table/modules/table-selector.cjs.js.map +0 -1
- package/lib/modules/table/table-config.cjs.js +0 -74
- package/lib/modules/table/table-config.cjs.js.map +0 -1
- package/lib/modules/table/utils/index.cjs.js +0 -54
- package/lib/modules/table/utils/index.cjs.js.map +0 -1
- package/lib/modules/table/utils/node-matchers.cjs.js +0 -292
- package/lib/modules/table/utils/node-matchers.cjs.js.map +0 -1
- package/types/modules/custom-uploader.d.ts +0 -31
- package/types/modules/global-link/constants.d.ts +0 -3
- package/types/modules/global-link/formats/customer-widget-link.d.ts +0 -14
- package/types/modules/global-link/formats/doc-link.d.ts +0 -17
- package/types/modules/global-link/formats/wiki-link.d.ts +0 -16
- package/types/modules/global-link/formats/work-item-link.d.ts +0 -16
- package/types/modules/global-link/global-link-panel.d.ts +0 -19
- package/types/modules/global-link/index.d.ts +0 -18
- package/types/modules/global-link/utils/createTable.d.ts +0 -1
- package/types/modules/quick-menu.d.ts +0 -22
- package/types/modules/table/better-table.d.ts +0 -35
- package/types/modules/table/formats/header.d.ts +0 -23
- package/types/modules/table/formats/list.d.ts +0 -34
- package/types/modules/table/formats/table.d.ts +0 -147
- package/types/modules/table/modules/table-column-tool.d.ts +0 -23
- package/types/modules/table/modules/table-operation-menu.d.ts +0 -38
- package/types/modules/table/modules/table-scroll-bar.d.ts +0 -33
- package/types/modules/table/modules/table-selection.d.ts +0 -37
- package/types/modules/table/modules/table-selector.d.ts +0 -22
- package/types/modules/table/table-config.d.ts +0 -38
- package/types/modules/table/utils/index.d.ts +0 -17
- package/types/modules/table/utils/node-matchers.d.ts +0 -9
|
@@ -1,485 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
-
const Quill = require("quill");
|
|
4
|
-
const editor_utils = require("../../config/editor.utils.cjs.js");
|
|
5
|
-
const header = require("./formats/header.cjs.js");
|
|
6
|
-
const list = require("./formats/list.cjs.js");
|
|
7
|
-
const table = require("./formats/table.cjs.js");
|
|
8
|
-
const tableColumnTool = require("./modules/table-column-tool.cjs.js");
|
|
9
|
-
const tableOperationMenu = require("./modules/table-operation-menu.cjs.js");
|
|
10
|
-
const tableScrollBar = require("./modules/table-scroll-bar.cjs.js");
|
|
11
|
-
const tableSelection = require("./modules/table-selection.cjs.js");
|
|
12
|
-
const tableSelector = require("./modules/table-selector.cjs.js");
|
|
13
|
-
const index = require("./utils/index.cjs.js");
|
|
14
|
-
const nodeMatchers = require("./utils/node-matchers.cjs.js");
|
|
15
|
-
const Block = Quill.imports["blots/block"];
|
|
16
|
-
const Delta = Quill.imports.delta;
|
|
17
|
-
const Module = Quill.imports["core/module"];
|
|
18
|
-
class BetterTable extends Module {
|
|
19
|
-
static register() {
|
|
20
|
-
Quill.register(table.TableCol, true);
|
|
21
|
-
Quill.register(table.TableColGroup, true);
|
|
22
|
-
Quill.register(table.TableCellLine, true);
|
|
23
|
-
Quill.register(table.TableCell, true);
|
|
24
|
-
Quill.register(table.TableRow, true);
|
|
25
|
-
Quill.register(table.TableBody, true);
|
|
26
|
-
Quill.register(table.TableContainer, true);
|
|
27
|
-
Quill.register(table.TableViewWrapper, true);
|
|
28
|
-
Quill.register("formats/header", header.default, true);
|
|
29
|
-
Quill.register("formats/list", list.default, true);
|
|
30
|
-
}
|
|
31
|
-
constructor(quill, options) {
|
|
32
|
-
super(quill, options);
|
|
33
|
-
this.isComposition = false;
|
|
34
|
-
this.isTableSelectorVisible = false;
|
|
35
|
-
this.quill.root.addEventListener("mousedown", (event) => this.handleMouseDown(event, quill), false);
|
|
36
|
-
this.quill.root.addEventListener("compositionend", () => this.handleCompositionend(quill), false);
|
|
37
|
-
this.quill.root.addEventListener("compositionstart", () => this.handleCompositionstart(quill), false);
|
|
38
|
-
this.quill.root.addEventListener("keypress", (event) => this.handleKeyDown(event, quill), false);
|
|
39
|
-
this.quill.root.addEventListener(
|
|
40
|
-
"contextmenu",
|
|
41
|
-
(evt) => {
|
|
42
|
-
if (!this.table) return true;
|
|
43
|
-
evt.preventDefault();
|
|
44
|
-
const path = editor_utils.getEventComposedPath(evt);
|
|
45
|
-
if (!path || path.length <= 0) return;
|
|
46
|
-
const tableNode = path.filter((node) => {
|
|
47
|
-
return node.tagName && node.tagName.toUpperCase() === "TABLE" && node.classList.contains("quill-better-table");
|
|
48
|
-
})[0];
|
|
49
|
-
const rowNode = path.filter((node) => {
|
|
50
|
-
return node.tagName && node.tagName.toUpperCase() === "TR" && node.getAttribute("data-row");
|
|
51
|
-
})[0];
|
|
52
|
-
const cellNode = path.filter((node) => {
|
|
53
|
-
return node.tagName && node.tagName.toUpperCase() === "TD" && node.getAttribute("data-row");
|
|
54
|
-
})[0];
|
|
55
|
-
const isTargetCellSelected = this.tableSelection.selectedTds.map((tableCell) => tableCell.domNode).includes(cellNode);
|
|
56
|
-
if (this.tableSelection.selectedTds.length <= 0 || !isTargetCellSelected) {
|
|
57
|
-
this.tableSelection.setSelection(cellNode.getBoundingClientRect(), cellNode.getBoundingClientRect());
|
|
58
|
-
}
|
|
59
|
-
if (this.tableOperationMenu) {
|
|
60
|
-
this.tableOperationMenu = this.tableOperationMenu.destroy();
|
|
61
|
-
}
|
|
62
|
-
if (tableNode) {
|
|
63
|
-
this.tableOperationMenu = new tableOperationMenu.default(
|
|
64
|
-
{
|
|
65
|
-
table: tableNode,
|
|
66
|
-
row: rowNode,
|
|
67
|
-
cell: cellNode,
|
|
68
|
-
left: evt.x + 15,
|
|
69
|
-
top: evt.y
|
|
70
|
-
},
|
|
71
|
-
quill,
|
|
72
|
-
options.operationMenu
|
|
73
|
-
);
|
|
74
|
-
}
|
|
75
|
-
},
|
|
76
|
-
false
|
|
77
|
-
);
|
|
78
|
-
quill.keyboard.addBinding({ key: "Backspace" }, {}, (range, context) => {
|
|
79
|
-
if (range.index === 0 || this.quill.getLength() <= 1) return true;
|
|
80
|
-
if (context.offset === 0 && range.length === 0) {
|
|
81
|
-
const [prev] = this.quill.getLine(range.index - 1);
|
|
82
|
-
const [line] = this.quill.getLine(range.index);
|
|
83
|
-
if (!editor_utils.isNullOrUndefined(prev)) {
|
|
84
|
-
if (prev.statics.blotName === "table-cell-line" && line.statics.blotName !== "table-cell-line") {
|
|
85
|
-
const betterTableModule = this.quill.getModule("better-table");
|
|
86
|
-
let tableBlot;
|
|
87
|
-
try {
|
|
88
|
-
tableBlot = prev.parent.parent.parent.parent;
|
|
89
|
-
} catch (_e) {
|
|
90
|
-
}
|
|
91
|
-
if (tableBlot && tableBlot.domNode !== betterTableModule.table) {
|
|
92
|
-
betterTableModule.hideTableTools();
|
|
93
|
-
tableBlot.remove();
|
|
94
|
-
this.quill.update(Quill.sources.USER);
|
|
95
|
-
}
|
|
96
|
-
return false;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return true;
|
|
101
|
-
});
|
|
102
|
-
const thisBinding = quill.keyboard.bindings.Backspace.pop();
|
|
103
|
-
quill.keyboard.bindings.Backspace.splice(1, 0, thisBinding);
|
|
104
|
-
quill.clipboard.addMatcher("td", nodeMatchers.matchTableCell);
|
|
105
|
-
quill.clipboard.addMatcher("th", nodeMatchers.matchTableHeader);
|
|
106
|
-
quill.clipboard.addMatcher("table", nodeMatchers.matchTable);
|
|
107
|
-
quill.clipboard.addMatcher("h1, h2, h3, h4, h5, h6", nodeMatchers.matchHeader);
|
|
108
|
-
quill.clipboard.addMatcher("ol, ul", nodeMatchers.matchList);
|
|
109
|
-
quill.clipboard.addMatcher("span", nodeMatchers.matchMentionLink);
|
|
110
|
-
quill.clipboard.addMatcher("v:imageData", nodeMatchers.matchWordShapeImage);
|
|
111
|
-
quill.clipboard.addMatcher(Node.ELEMENT_NODE, nodeMatchers.matchInline);
|
|
112
|
-
quill.clipboard.matchers = quill.clipboard.matchers.filter((matcher) => {
|
|
113
|
-
return matcher[0] !== "tr";
|
|
114
|
-
});
|
|
115
|
-
quill.clipboard.addMatcher("tr", nodeMatchers.matchTableRow);
|
|
116
|
-
this.quill.on(Quill.events.EDITOR_CHANGE, () => {
|
|
117
|
-
const tableContainer = Quill.find(this.table);
|
|
118
|
-
if (!tableContainer) {
|
|
119
|
-
this.hideTableTools();
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
this.quill.on(Quill.events.SELECTION_CHANGE, (range, _oldRange, source) => {
|
|
123
|
-
if (!range) return;
|
|
124
|
-
const selectionStart = range.index;
|
|
125
|
-
const selectionEnd = range.index + range.length;
|
|
126
|
-
if (source === Quill.sources.USER) {
|
|
127
|
-
const tables = this.quill.root.getElementsByTagName("table");
|
|
128
|
-
if (tables && tables.length) {
|
|
129
|
-
[].forEach.call(tables, (table2) => {
|
|
130
|
-
const tableContainer = Quill.find(table2);
|
|
131
|
-
if (tableContainer) {
|
|
132
|
-
const tableStart = tableContainer.offset(this.quill.scroll);
|
|
133
|
-
const tableEnd = tableStart + tableContainer.length();
|
|
134
|
-
const classes = Array.from(table2.parentNode.classList);
|
|
135
|
-
if (selectionStart <= tableStart && tableEnd <= selectionEnd) {
|
|
136
|
-
table2.parentNode.classList.add("quill-better-table-selected");
|
|
137
|
-
} else if (classes.includes("quill-better-table-selected")) {
|
|
138
|
-
table2.parentNode.classList.remove("quill-better-table-selected");
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
this.initTableSelector();
|
|
146
|
-
}
|
|
147
|
-
initTableSelector() {
|
|
148
|
-
const toolbar = this.quill.getModule("toolbar");
|
|
149
|
-
if (!toolbar) return;
|
|
150
|
-
const tableButton = toolbar.container.querySelector(".ql-better-table");
|
|
151
|
-
if (!tableButton) return;
|
|
152
|
-
const tableSelectorWrapper = this.tableSelectorWrapperCreator();
|
|
153
|
-
tableButton.parentNode.insertBefore(tableSelectorWrapper, tableButton);
|
|
154
|
-
tableSelectorWrapper.appendChild(tableButton);
|
|
155
|
-
this.tableSelectorWrapper = tableSelectorWrapper;
|
|
156
|
-
tableSelectorWrapper.addEventListener("mouseenter", this.handleTableSelectorHover.bind(this), false);
|
|
157
|
-
tableSelectorWrapper.addEventListener("mouseleave", this.handleTableSelectorMouseOut.bind(this), false);
|
|
158
|
-
}
|
|
159
|
-
tableSelectorWrapperCreator() {
|
|
160
|
-
const wrapper = document.createElement("div");
|
|
161
|
-
wrapper.className = "ql-better-table-wrapper";
|
|
162
|
-
const cssContent = {
|
|
163
|
-
position: "relative",
|
|
164
|
-
display: "flex",
|
|
165
|
-
alignItems: "center",
|
|
166
|
-
justifyContent: "center",
|
|
167
|
-
boxSizing: "border-box"
|
|
168
|
-
};
|
|
169
|
-
index.css(wrapper, cssContent);
|
|
170
|
-
return wrapper;
|
|
171
|
-
}
|
|
172
|
-
handleMouseDown(evt, quill) {
|
|
173
|
-
const path = editor_utils.getEventComposedPath(evt);
|
|
174
|
-
if (!path || path.length <= 0) return;
|
|
175
|
-
const tableNode = path.filter((node) => {
|
|
176
|
-
return node.tagName && node.tagName.toUpperCase() === "TABLE" && node.classList.contains("quill-better-table");
|
|
177
|
-
})[0];
|
|
178
|
-
if (tableNode) {
|
|
179
|
-
tableNode.parentNode.classList.remove("quill-better-table-selected");
|
|
180
|
-
if (this.table === tableNode) return;
|
|
181
|
-
if (this.table) {
|
|
182
|
-
this.hideTableTools();
|
|
183
|
-
}
|
|
184
|
-
if (!quill.options.readOnly) {
|
|
185
|
-
this.showTableTools(tableNode, quill);
|
|
186
|
-
}
|
|
187
|
-
} else if (this.table) {
|
|
188
|
-
this.hideTableTools();
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
handleKeyDown(evt, quill) {
|
|
192
|
-
const key = evt.key;
|
|
193
|
-
const range = quill.getSelection();
|
|
194
|
-
if (this.isComposition || !range) return;
|
|
195
|
-
const [col] = quill.getLine(range.index);
|
|
196
|
-
const [td] = quill.getLine(range.index - 1);
|
|
197
|
-
if (key && key !== "Delete" && col && range) {
|
|
198
|
-
if (col.statics.blotName === "table-col") {
|
|
199
|
-
const betterTableModule = this.quill.getModule("better-table");
|
|
200
|
-
betterTableModule.hideTableTools();
|
|
201
|
-
quill.insertText(range.index - 1, "\n", Quill.sources.USER);
|
|
202
|
-
quill.setSelection(range.index, 0, Quill.sources.USER);
|
|
203
|
-
} else if (td && td.statics.blotName === "table-cell-line" && col.statics.blotName === "block") {
|
|
204
|
-
quill.insertText(range.index, "\n", Quill.sources.USER);
|
|
205
|
-
quill.setSelection(range.index, 0, Quill.sources.USER);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
handleCompositionstart(quill) {
|
|
210
|
-
this.isComposition = true;
|
|
211
|
-
const range = quill.getSelection();
|
|
212
|
-
const [col] = quill.getLine(range.index);
|
|
213
|
-
const [td] = quill.getLine(range.index - 1);
|
|
214
|
-
if (col && range) {
|
|
215
|
-
if (col.statics.blotName === "table-col") {
|
|
216
|
-
const betterTableModule = this.quill.getModule("better-table");
|
|
217
|
-
betterTableModule.hideTableTools();
|
|
218
|
-
quill.insertText(range.index - 1, "\n ", Quill.sources.USER);
|
|
219
|
-
quill.setSelection(range.index, 0, Quill.sources.USER);
|
|
220
|
-
} else if (td && td.statics.blotName === "table-cell-line" && col.statics.blotName === "block") {
|
|
221
|
-
quill.setSelection(range.index, 0, Quill.sources.USER);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
handleCompositionend(quill) {
|
|
226
|
-
const range = quill.getSelection();
|
|
227
|
-
const [line] = quill.getLine(range.index);
|
|
228
|
-
const domNode = line.domNode;
|
|
229
|
-
const isInParagraph = domNode.nodeName === "P";
|
|
230
|
-
const isInTableCell = line.statics.blotName === "table-cell-line";
|
|
231
|
-
if ((isInParagraph || isInTableCell) && domNode.childNodes.length > 1 && domNode.childNodes[0].nodeName === "BR") {
|
|
232
|
-
domNode.childNodes[0].remove();
|
|
233
|
-
}
|
|
234
|
-
if (editor_utils.isPureIE && line instanceof Block) {
|
|
235
|
-
quill.setSelection(range.index, 0, Quill.sources.SILENT);
|
|
236
|
-
}
|
|
237
|
-
this.isComposition = false;
|
|
238
|
-
}
|
|
239
|
-
// 触发table selector
|
|
240
|
-
handleTableSelectorHover() {
|
|
241
|
-
if (this.isTableSelectorVisible) return;
|
|
242
|
-
if (!this.tableSelectorWrapper) return;
|
|
243
|
-
this.isTableSelectorVisible = true;
|
|
244
|
-
this.tableSelector = new tableSelector.default({
|
|
245
|
-
onSelect: (rows, cols) => this.insertTable(rows, cols)
|
|
246
|
-
});
|
|
247
|
-
this.tableSelectorWrapper.appendChild(this.tableSelector.container);
|
|
248
|
-
const buttonRect = this.tableSelectorWrapper.getBoundingClientRect();
|
|
249
|
-
this.tableSelector.show(
|
|
250
|
-
0,
|
|
251
|
-
buttonRect.height
|
|
252
|
-
);
|
|
253
|
-
}
|
|
254
|
-
// table selector 鼠标离开
|
|
255
|
-
handleTableSelectorMouseOut() {
|
|
256
|
-
if (this.tableSelector) {
|
|
257
|
-
this.tableSelector.destroy();
|
|
258
|
-
}
|
|
259
|
-
this.tableSelector = null;
|
|
260
|
-
this.isTableSelectorVisible = false;
|
|
261
|
-
}
|
|
262
|
-
getTable(range = this.quill.getSelection()) {
|
|
263
|
-
if (editor_utils.isNullOrUndefined(range)) return [null, null, null, -1];
|
|
264
|
-
const [cellLine, offset] = this.quill.getLine(range.index);
|
|
265
|
-
if (editor_utils.isNullOrUndefined(cellLine) || cellLine.statics.blotName !== table.TableCellLine.blotName) {
|
|
266
|
-
return [null, null, null, -1];
|
|
267
|
-
}
|
|
268
|
-
const cell = cellLine.tableCell();
|
|
269
|
-
const row = cell.row();
|
|
270
|
-
const table$1 = row.table();
|
|
271
|
-
return [table$1, row, cell, offset];
|
|
272
|
-
}
|
|
273
|
-
insertTable(rows, columns) {
|
|
274
|
-
const range = this.quill.getSelection(true);
|
|
275
|
-
const isInsideTable = editor_utils.insideTable(range, this.quill);
|
|
276
|
-
if (editor_utils.isNullOrUndefined(range) || isInsideTable) return;
|
|
277
|
-
let delta = new Delta().retain(range.index);
|
|
278
|
-
delta.insert("\n");
|
|
279
|
-
delta = new Array(columns).fill("\n").reduce((memo, text) => {
|
|
280
|
-
memo.insert(text, { "table-col": true });
|
|
281
|
-
return memo;
|
|
282
|
-
}, delta);
|
|
283
|
-
delta = new Array(rows).fill(0).reduce((memo) => {
|
|
284
|
-
const tableRowId = table.rowId();
|
|
285
|
-
return new Array(columns).fill("\n").reduce((op, text) => {
|
|
286
|
-
op.insert(text, { "table-cell-line": { row: tableRowId, cell: table.cellId() } });
|
|
287
|
-
return op;
|
|
288
|
-
}, memo);
|
|
289
|
-
}, delta);
|
|
290
|
-
const [col] = this.quill.getLine(range.index);
|
|
291
|
-
if (col && col.statics.blotName === "table-col") {
|
|
292
|
-
delta.insert("\n");
|
|
293
|
-
}
|
|
294
|
-
this.quill.updateContents(delta, Quill.sources.USER);
|
|
295
|
-
const [cellLine] = this.quill.getLine(range.index + columns + 1);
|
|
296
|
-
if (cellLine) {
|
|
297
|
-
const cell = cellLine.tableCell();
|
|
298
|
-
const td = cell.domNode;
|
|
299
|
-
const mousedownEvent = document.createEvent("MouseEvent");
|
|
300
|
-
const mouseupEvent = document.createEvent("MouseEvent");
|
|
301
|
-
const keyEvent = document.createEvent("Event");
|
|
302
|
-
mousedownEvent.initEvent("mousedown", true, false);
|
|
303
|
-
mouseupEvent.initEvent("mouseup", true, false);
|
|
304
|
-
keyEvent.initEvent("keypress", true, false);
|
|
305
|
-
td.dispatchEvent(mousedownEvent);
|
|
306
|
-
td.dispatchEvent(mouseupEvent);
|
|
307
|
-
td.dispatchEvent(keyEvent);
|
|
308
|
-
this.tableSelection.endTd = td;
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
showTableTools(table2, quill) {
|
|
312
|
-
this.table = table2;
|
|
313
|
-
this.modulesContainer = document.createElement("div");
|
|
314
|
-
this.modulesContainer.classList.add("qlbt-modules-container");
|
|
315
|
-
const linkContainer = this.quill.root.parentNode.querySelector(".ql-tooltip ");
|
|
316
|
-
this.quill.root.parentNode.insertBefore(this.modulesContainer, linkContainer);
|
|
317
|
-
this.tableSelection = new tableSelection.default(table2, quill, this.modulesContainer);
|
|
318
|
-
this.columnTool = new tableColumnTool.default(table2, quill, this.modulesContainer);
|
|
319
|
-
this.tableScrollBar = new tableScrollBar.default(table2, quill, this.modulesContainer);
|
|
320
|
-
let timeoutID;
|
|
321
|
-
this.subscriber = () => {
|
|
322
|
-
clearTimeout(timeoutID);
|
|
323
|
-
timeoutID = setTimeout(this.hideTableTools, 300);
|
|
324
|
-
};
|
|
325
|
-
window.addEventListener("resize", this.subscriber, false);
|
|
326
|
-
}
|
|
327
|
-
hideTableTools() {
|
|
328
|
-
if (this.columnTool) {
|
|
329
|
-
this.columnTool.destroy();
|
|
330
|
-
}
|
|
331
|
-
if (this.tableSelection) {
|
|
332
|
-
this.tableSelection.destroy();
|
|
333
|
-
}
|
|
334
|
-
if (this.tableOperationMenu) {
|
|
335
|
-
this.tableOperationMenu.destroy();
|
|
336
|
-
}
|
|
337
|
-
if (this.tableScrollBar) {
|
|
338
|
-
this.tableScrollBar.destroy();
|
|
339
|
-
}
|
|
340
|
-
if (this.modulesContainer) {
|
|
341
|
-
this.modulesContainer.remove();
|
|
342
|
-
}
|
|
343
|
-
this.columnTool = null;
|
|
344
|
-
this.tableSelection = null;
|
|
345
|
-
this.tableOperationMenu = null;
|
|
346
|
-
this.tableScrollBar = null;
|
|
347
|
-
this.modulesContainer = null;
|
|
348
|
-
this.table = null;
|
|
349
|
-
if (this.subscriber) {
|
|
350
|
-
window.removeEventListener("resize", this.subscriber);
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
BetterTable.keyboardBindings = {
|
|
355
|
-
"line delete": {
|
|
356
|
-
key: "Delete",
|
|
357
|
-
shiftKey: null,
|
|
358
|
-
format: { "table-col": false, "table-cell-line": false },
|
|
359
|
-
collapsed: true,
|
|
360
|
-
offset: 0,
|
|
361
|
-
handler(range, context) {
|
|
362
|
-
if (range.index === 0 && context.line.next && context.line.next.statics.blotName === "table-view") {
|
|
363
|
-
const [p] = this.quill.getLine(range.index - 1);
|
|
364
|
-
const [col] = this.quill.getLine(range.index + 1);
|
|
365
|
-
if (p && p.statics.blotName === "block" && col && col.statics.blotName === "table-col") {
|
|
366
|
-
return false;
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
return true;
|
|
370
|
-
}
|
|
371
|
-
},
|
|
372
|
-
"table-col enter": {
|
|
373
|
-
key: "Enter",
|
|
374
|
-
shiftKey: null,
|
|
375
|
-
format: ["table-col"],
|
|
376
|
-
collapsed: true,
|
|
377
|
-
offset: 0,
|
|
378
|
-
handler(range, context) {
|
|
379
|
-
if (context.offset === 0 && range.length === 0) {
|
|
380
|
-
const [col] = this.quill.getLine(range.index);
|
|
381
|
-
if (col && col.statics.blotName === "table-col") {
|
|
382
|
-
const betterTableModule = this.quill.getModule("better-table");
|
|
383
|
-
betterTableModule.hideTableTools();
|
|
384
|
-
this.quill.insertText(range.index - 1, "\n", Quill.sources.USER);
|
|
385
|
-
this.quill.setSelection(range.index, 0, Quill.sources.USER);
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
},
|
|
390
|
-
"table-col delete": {
|
|
391
|
-
key: "Delete",
|
|
392
|
-
shiftKey: null,
|
|
393
|
-
format: ["table-col"],
|
|
394
|
-
collapsed: true,
|
|
395
|
-
offset: 0,
|
|
396
|
-
handler(range, context) {
|
|
397
|
-
if (context.offset === 0 && range.length === 0) {
|
|
398
|
-
const [col] = this.quill.getLine(range.index);
|
|
399
|
-
if (col && col.statics.blotName === "table-col") {
|
|
400
|
-
const betterTableModule = this.quill.getModule("better-table");
|
|
401
|
-
let tableBlot;
|
|
402
|
-
try {
|
|
403
|
-
tableBlot = col.parent.parent.parent;
|
|
404
|
-
} catch (_e) {
|
|
405
|
-
}
|
|
406
|
-
if (tableBlot && tableBlot.domNode !== betterTableModule.table) {
|
|
407
|
-
betterTableModule.hideTableTools();
|
|
408
|
-
tableBlot.remove();
|
|
409
|
-
this.quill.update(Quill.sources.USER);
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
},
|
|
415
|
-
"table-col backspace": {
|
|
416
|
-
key: "Backspace",
|
|
417
|
-
shiftKey: null,
|
|
418
|
-
format: ["table-col"],
|
|
419
|
-
collapsed: true,
|
|
420
|
-
offset: 0,
|
|
421
|
-
handler() {
|
|
422
|
-
}
|
|
423
|
-
},
|
|
424
|
-
"table-cell-line backspace": {
|
|
425
|
-
key: "Backspace",
|
|
426
|
-
format: ["table-cell-line"],
|
|
427
|
-
collapsed: true,
|
|
428
|
-
offset: 0,
|
|
429
|
-
handler(range) {
|
|
430
|
-
const [line] = this.quill.getLine(range.index);
|
|
431
|
-
if (!line.prev) {
|
|
432
|
-
return false;
|
|
433
|
-
}
|
|
434
|
-
return true;
|
|
435
|
-
}
|
|
436
|
-
},
|
|
437
|
-
"table-cell-line delete": {
|
|
438
|
-
key: "Delete",
|
|
439
|
-
format: ["table-cell-line"],
|
|
440
|
-
handler(range, _context) {
|
|
441
|
-
const [line] = this.quill.getLine(range.index);
|
|
442
|
-
const index2 = this.quill.getIndex(line);
|
|
443
|
-
const length = line.length();
|
|
444
|
-
if (!line.next && (!line.prev && length === 1 || range.index !== index2 && range.index + 1 >= index2 + length)) {
|
|
445
|
-
return false;
|
|
446
|
-
}
|
|
447
|
-
return true;
|
|
448
|
-
}
|
|
449
|
-
},
|
|
450
|
-
"table-cell-line enter": {
|
|
451
|
-
key: "Enter",
|
|
452
|
-
shiftKey: null,
|
|
453
|
-
format: ["table-cell-line"],
|
|
454
|
-
handler(range, context) {
|
|
455
|
-
const node = window.getSelection().anchorNode;
|
|
456
|
-
if (node instanceof HTMLDivElement && node.classList.contains("quill-better-table-wrapper")) {
|
|
457
|
-
this.quill.setSelection(range.index + 1, 0, Quill.sources.USER);
|
|
458
|
-
this.quill.focus();
|
|
459
|
-
return;
|
|
460
|
-
}
|
|
461
|
-
if (this.quill.selection && this.quill.selection.composing) return;
|
|
462
|
-
const Scope = Quill.imports.parchment.Scope;
|
|
463
|
-
if (range.length > 0) {
|
|
464
|
-
this.quill.scroll.deleteAt(range.index, range.length);
|
|
465
|
-
}
|
|
466
|
-
const lineFormats = Object.keys(context.format).reduce((formats, format) => {
|
|
467
|
-
if (this.quill.scroll.query(format, Scope.BLOCK) && !Array.isArray(context.format[format])) {
|
|
468
|
-
formats[format] = context.format[format];
|
|
469
|
-
}
|
|
470
|
-
return formats;
|
|
471
|
-
}, {});
|
|
472
|
-
this.quill.insertText(range.index, "\n", lineFormats["table-cell-line"], Quill.sources.USER);
|
|
473
|
-
this.quill.setSelection(range.index + 1, Quill.sources.SILENT);
|
|
474
|
-
this.quill.focus();
|
|
475
|
-
Object.keys(context.format).forEach((name) => {
|
|
476
|
-
if (!editor_utils.isNullOrUndefined(lineFormats[name])) return;
|
|
477
|
-
if (Array.isArray(context.format[name])) return;
|
|
478
|
-
if (name === "link") return;
|
|
479
|
-
this.quill.format(name, context.format[name], Quill.sources.USER);
|
|
480
|
-
});
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
};
|
|
484
|
-
exports.default = BetterTable;
|
|
485
|
-
//# sourceMappingURL=better-table.cjs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"better-table.cjs.js","sources":["../../../../src/modules/table/better-table.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport {\r\n getEventComposedPath,\r\n insideTable,\r\n isNullOrUndefined,\r\n isPureIE,\r\n} from '../../config/editor.utils'\r\nimport Header from './formats/header'\r\nimport List from './formats/list'\r\nimport {\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} from './formats/table'\r\nimport TableColumnTool from './modules/table-column-tool'\r\nimport TableOperationMenu from './modules/table-operation-menu'\r\nimport TableScrollBar from './modules/table-scroll-bar'\r\nimport TableSelection from './modules/table-selection'\r\nimport TableSelector from './modules/table-selector'\r\nimport { css } from './utils'\r\n// import table node matchers\r\nimport {\r\n matchHeader,\r\n matchInline,\r\n matchList,\r\n matchMentionLink,\r\n matchTable,\r\n matchTableCell,\r\n matchTableHeader,\r\n matchTableRow,\r\n matchWordShapeImage,\r\n} from './utils/node-matchers'\r\n\r\nconst Block = Quill.imports['blots/block']\r\nconst Delta = Quill.imports.delta\r\nconst Module = Quill.imports['core/module']\r\n\r\n// @dynamic\r\nclass BetterTable extends Module {\r\n static keyboardBindings: any\r\n isComposition: boolean\r\n quill: any\r\n table: any\r\n modulesContainer: any\r\n tableSelection: any\r\n subscriber: any\r\n tableOperationMenu: any\r\n columnTool: TableColumnTool\r\n tableScrollBar: TableScrollBar\r\n tableSelector: TableSelector\r\n isTableSelectorVisible: boolean\r\n tableSelectorWrapper: HTMLDivElement\r\n\r\n static register() {\r\n Quill.register(TableCol, true)\r\n Quill.register(TableColGroup, true)\r\n Quill.register(TableCellLine, true)\r\n Quill.register(TableCell, true)\r\n Quill.register(TableRow, true)\r\n Quill.register(TableBody, true)\r\n Quill.register(TableContainer, true)\r\n Quill.register(TableViewWrapper, true)\r\n // register customized Header, overwriting quill built-in Header\r\n Quill.register('formats/header', Header, true)\r\n // register customized List, overwriting quill built-in Header\r\n Quill.register('formats/list', List, true)\r\n }\r\n\r\n constructor(quill, options) {\r\n super(quill, options)\r\n\r\n // handle click on quill-better-table\r\n this.isComposition = false\r\n this.isTableSelectorVisible = false\r\n this.quill.root.addEventListener('mousedown', event => this.handleMouseDown(event, quill), false)\r\n this.quill.root.addEventListener('compositionend', () => this.handleCompositionend(quill), false)\r\n this.quill.root.addEventListener('compositionstart', () => this.handleCompositionstart(quill), false)\r\n this.quill.root.addEventListener('keypress', event => this.handleKeyDown(event, quill), false)\r\n\r\n // handle right click on quill-better-table\r\n this.quill.root.addEventListener(\r\n 'contextmenu',\r\n (evt) => {\r\n if (!this.table) return true\r\n evt.preventDefault()\r\n\r\n // bugfix: evt.path is undefined in Safari, FF, Micro Edge\r\n const path = getEventComposedPath(evt)\r\n if (!path || path.length <= 0) return\r\n\r\n const tableNode = path.filter((node) => {\r\n return (\r\n node.tagName && node.tagName.toUpperCase() === 'TABLE' && node.classList.contains('quill-better-table')\r\n )\r\n })[0]\r\n\r\n const rowNode = path.filter((node) => {\r\n return node.tagName && node.tagName.toUpperCase() === 'TR' && node.getAttribute('data-row')\r\n })[0]\r\n\r\n const cellNode = path.filter((node) => {\r\n return node.tagName && node.tagName.toUpperCase() === 'TD' && node.getAttribute('data-row')\r\n })[0]\r\n\r\n const isTargetCellSelected = this.tableSelection.selectedTds\r\n .map(tableCell => tableCell.domNode)\r\n .includes(cellNode)\r\n\r\n if (this.tableSelection.selectedTds.length <= 0 || !isTargetCellSelected) {\r\n this.tableSelection.setSelection(cellNode.getBoundingClientRect(), cellNode.getBoundingClientRect())\r\n }\r\n\r\n if (this.tableOperationMenu) {\r\n this.tableOperationMenu = this.tableOperationMenu.destroy()\r\n }\r\n\r\n if (tableNode) {\r\n this.tableOperationMenu = new TableOperationMenu(\r\n {\r\n table: tableNode,\r\n row: rowNode,\r\n cell: cellNode,\r\n left: evt.x + 15,\r\n top: evt.y,\r\n },\r\n quill,\r\n options.operationMenu,\r\n )\r\n }\r\n },\r\n false,\r\n )\r\n\r\n // add keyboard binding:Backspace\r\n // prevent user hits backspace to delete table cell\r\n quill.keyboard.addBinding({ key: 'Backspace' }, {}, (range, context) => {\r\n if (range.index === 0 || this.quill.getLength() <= 1) return true\r\n if (context.offset === 0 && range.length === 0) {\r\n const [prev] = this.quill.getLine(range.index - 1)\r\n const [line] = this.quill.getLine(range.index)\r\n if (!isNullOrUndefined(prev)) {\r\n if (prev.statics.blotName === 'table-cell-line' && line.statics.blotName !== 'table-cell-line') {\r\n const betterTableModule = this.quill.getModule('better-table')\r\n let tableBlot\r\n try {\r\n tableBlot = prev.parent.parent.parent.parent\r\n }\r\n catch (_e) { }\r\n if (tableBlot && tableBlot.domNode !== betterTableModule.table) {\r\n betterTableModule.hideTableTools()\r\n tableBlot.remove()\r\n this.quill.update(Quill.sources.USER)\r\n }\r\n return false\r\n }\r\n }\r\n }\r\n return true\r\n })\r\n // since only one matched bindings callback will execute.\r\n // expected my binding callback execute first\r\n // I changed the order of binding callbacks\r\n const thisBinding = quill.keyboard.bindings.Backspace.pop()\r\n quill.keyboard.bindings.Backspace.splice(1, 0, thisBinding)\r\n\r\n // add Matchers to match and render quill-better-table for initialization\r\n // or pasting\r\n quill.clipboard.addMatcher('td', matchTableCell)\r\n quill.clipboard.addMatcher('th', matchTableHeader)\r\n quill.clipboard.addMatcher('table', matchTable)\r\n quill.clipboard.addMatcher('h1, h2, h3, h4, h5, h6', matchHeader)\r\n quill.clipboard.addMatcher('ol, ul', matchList)\r\n quill.clipboard.addMatcher('span', matchMentionLink)\r\n quill.clipboard.addMatcher('v:imageData', matchWordShapeImage)\r\n quill.clipboard.addMatcher(Node.ELEMENT_NODE, matchInline)\r\n\r\n // remove matcher for tr tag\r\n quill.clipboard.matchers = quill.clipboard.matchers.filter((matcher) => {\r\n return matcher[0] !== 'tr'\r\n })\r\n\r\n // fix: 处理空<tr>标签被忽略的情况\r\n quill.clipboard.addMatcher('tr', matchTableRow)\r\n\r\n this.quill.on(Quill.events.EDITOR_CHANGE, () => {\r\n const tableContainer = Quill.find(this.table)\r\n if (!tableContainer) {\r\n this.hideTableTools()\r\n }\r\n })\r\n\r\n this.quill.on(Quill.events.SELECTION_CHANGE, (range, _oldRange, source) => {\r\n if (!range) return\r\n const selectionStart = range.index\r\n const selectionEnd = range.index + range.length\r\n if (source === Quill.sources.USER) {\r\n const tables = this.quill.root.getElementsByTagName('table')\r\n if (tables && tables.length) {\r\n [].forEach.call(tables, (table) => {\r\n const tableContainer = Quill.find(table)\r\n if (tableContainer) {\r\n const tableStart = tableContainer.offset(this.quill.scroll)\r\n const tableEnd = tableStart + tableContainer.length()\r\n // @ts-ignore\r\n const classes = Array.from(table.parentNode.classList)\r\n\r\n if (selectionStart <= tableStart && tableEnd <= selectionEnd) {\r\n // @ts-ignore\r\n table.parentNode.classList.add('quill-better-table-selected')\r\n }\r\n else if (classes.includes('quill-better-table-selected')) {\r\n // @ts-ignore\r\n table.parentNode.classList.remove('quill-better-table-selected')\r\n }\r\n }\r\n })\r\n }\r\n }\r\n })\r\n this.initTableSelector()\r\n }\r\n\r\n initTableSelector() {\r\n // feat table selector ,在better-table按钮上套一层容器,往容器添加table selector\r\n const toolbar = this.quill.getModule('toolbar')\r\n if (!toolbar) return\r\n const tableButton = toolbar.container.querySelector('.ql-better-table')\r\n if (!tableButton) return\r\n const tableSelectorWrapper = this.tableSelectorWrapperCreator()\r\n tableButton.parentNode.insertBefore(tableSelectorWrapper, tableButton)\r\n tableSelectorWrapper.appendChild(tableButton)\r\n this.tableSelectorWrapper = tableSelectorWrapper\r\n tableSelectorWrapper.addEventListener('mouseenter', this.handleTableSelectorHover.bind(this), false)\r\n tableSelectorWrapper.addEventListener('mouseleave', this.handleTableSelectorMouseOut.bind(this), false)\r\n }\r\n\r\n tableSelectorWrapperCreator() {\r\n const wrapper = document.createElement('div')\r\n wrapper.className = 'ql-better-table-wrapper'\r\n const cssContent = {\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n boxSizing: 'border-box',\r\n }\r\n css(wrapper, cssContent)\r\n return wrapper\r\n }\r\n\r\n handleMouseDown(evt, quill) {\r\n // bugfix: evt.path is undefined in Safari, FF, Micro Edge\r\n const path = getEventComposedPath(evt)\r\n if (!path || path.length <= 0) return\r\n const tableNode = path.filter((node) => {\r\n return node.tagName && node.tagName.toUpperCase() === 'TABLE' && node.classList.contains('quill-better-table')\r\n })[0]\r\n if (tableNode) {\r\n tableNode.parentNode.classList.remove('quill-better-table-selected')\r\n // current table clicked\r\n if (this.table === tableNode) return\r\n // other table clicked\r\n if (this.table) {\r\n this.hideTableTools()\r\n }\r\n if (!quill.options.readOnly) { // not show table tool in readonly mode\r\n this.showTableTools(tableNode, quill)\r\n }\r\n }\r\n else if (this.table) {\r\n // other clicked\r\n this.hideTableTools()\r\n }\r\n }\r\n\r\n handleKeyDown(evt, quill) {\r\n const key = evt.key\r\n const range = quill.getSelection()\r\n if (this.isComposition || !range) return\r\n const [col] = quill.getLine(range.index)\r\n const [td] = quill.getLine(range.index - 1)\r\n if (key && key !== 'Delete' && col && range) {\r\n if (col.statics.blotName === 'table-col') {\r\n const betterTableModule = this.quill.getModule('better-table')\r\n betterTableModule.hideTableTools()\r\n quill.insertText(range.index - 1, '\\n', Quill.sources.USER)\r\n quill.setSelection(range.index, 0, Quill.sources.USER)\r\n }\r\n else if (td && td.statics.blotName === 'table-cell-line' && col.statics.blotName === 'block') {\r\n quill.insertText(range.index, '\\n', Quill.sources.USER)\r\n quill.setSelection(range.index, 0, Quill.sources.USER)\r\n }\r\n }\r\n }\r\n\r\n handleCompositionstart(quill) {\r\n this.isComposition = true\r\n const range = quill.getSelection()\r\n const [col] = quill.getLine(range.index)\r\n const [td] = quill.getLine(range.index - 1)\r\n if (col && range) {\r\n if (col.statics.blotName === 'table-col') {\r\n const betterTableModule = this.quill.getModule('better-table')\r\n betterTableModule.hideTableTools()\r\n quill.insertText(range.index - 1, '\\n\\t', Quill.sources.USER)\r\n quill.setSelection(range.index, 0, Quill.sources.USER)\r\n }\r\n else if (td && td.statics.blotName === 'table-cell-line' && col.statics.blotName === 'block') {\r\n quill.setSelection(range.index, 0, Quill.sources.USER)\r\n }\r\n }\r\n }\r\n\r\n handleCompositionend(quill) {\r\n // fix: 解决在空行行首用中文输入法输入字符,然后按退格导致插入多余空行的问题\r\n const range = quill.getSelection()\r\n const [line] = quill.getLine(range.index)\r\n const domNode = line.domNode\r\n const isInParagraph = domNode.nodeName === 'P'\r\n const isInTableCell = line.statics.blotName === 'table-cell-line'\r\n if ((isInParagraph || isInTableCell)\r\n && domNode.childNodes.length > 1\r\n && domNode.childNodes[0].nodeName === 'BR') {\r\n domNode.childNodes[0].remove()\r\n }\r\n\r\n if (isPureIE && line instanceof Block) {\r\n // 设置光标位置防止跳入下一行\r\n quill.setSelection(range.index, 0, Quill.sources.SILENT)\r\n }\r\n\r\n this.isComposition = false\r\n }\r\n\r\n // 触发table selector\r\n handleTableSelectorHover() {\r\n if (this.isTableSelectorVisible) return\r\n if (!this.tableSelectorWrapper) return\r\n this.isTableSelectorVisible = true\r\n this.tableSelector = new TableSelector({\r\n onSelect: (rows, cols) => this.insertTable(rows, cols),\r\n })\r\n this.tableSelectorWrapper.appendChild(this.tableSelector.container)\r\n const buttonRect = this.tableSelectorWrapper.getBoundingClientRect()\r\n this.tableSelector.show(\r\n 0,\r\n buttonRect.height,\r\n )\r\n }\r\n\r\n // table selector 鼠标离开\r\n handleTableSelectorMouseOut() {\r\n if (this.tableSelector) {\r\n this.tableSelector.destroy()\r\n }\r\n this.tableSelector = null\r\n this.isTableSelectorVisible = false\r\n }\r\n\r\n getTable(range = this.quill.getSelection()) {\r\n if (isNullOrUndefined(range)) return [null, null, null, -1]\r\n const [cellLine, offset] = this.quill.getLine(range.index)\r\n if (isNullOrUndefined(cellLine) || cellLine.statics.blotName !== TableCellLine.blotName) {\r\n return [null, null, null, -1]\r\n }\r\n const cell = cellLine.tableCell()\r\n const row = cell.row()\r\n const table = row.table()\r\n return [table, row, cell, offset]\r\n }\r\n\r\n insertTable(rows, columns) {\r\n const range = this.quill.getSelection(true)\r\n const isInsideTable = insideTable(range, this.quill)\r\n if (isNullOrUndefined(range) || isInsideTable) return\r\n // let currentBlot = this.quill.getLeaf(range.index)[0]\r\n // let nextBlot = this.quill.getLeaf(range.index + 1)[0]\r\n let delta = new Delta().retain(range.index)\r\n\r\n delta.insert('\\n')\r\n // insert table column\r\n delta = new Array(columns).fill('\\n').reduce((memo, text) => {\r\n memo.insert(text, { 'table-col': true })\r\n return memo\r\n }, delta)\r\n // insert table cell line with empty line\r\n delta = new Array(rows).fill(0).reduce((memo) => {\r\n const tableRowId = rowId()\r\n return new Array(columns).fill('\\n').reduce((op, text) => {\r\n op.insert(text, { 'table-cell-line': { row: tableRowId, cell: cellId() } })\r\n return op\r\n }, memo)\r\n }, delta)\r\n\r\n const [col] = this.quill.getLine(range.index)\r\n if (col && col.statics.blotName === 'table-col') {\r\n delta.insert('\\n')\r\n }\r\n\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n\r\n // feature: 新增表格后首格自动激活编辑状态,initEvent兼容IE\r\n const [cellLine] = this.quill.getLine(range.index + columns + 1)\r\n if (cellLine) {\r\n const cell = cellLine.tableCell()\r\n const td = cell.domNode\r\n const mousedownEvent = document.createEvent('MouseEvent')\r\n const mouseupEvent = document.createEvent('MouseEvent')\r\n const keyEvent = document.createEvent('Event')\r\n mousedownEvent.initEvent('mousedown', true, false)\r\n mouseupEvent.initEvent('mouseup', true, false)\r\n keyEvent.initEvent('keypress', true, false)\r\n td.dispatchEvent(mousedownEvent)\r\n td.dispatchEvent(mouseupEvent)\r\n td.dispatchEvent(keyEvent)\r\n this.tableSelection.endTd = td\r\n }\r\n }\r\n\r\n showTableTools(table, quill) {\r\n this.table = table\r\n this.modulesContainer = document.createElement('div')\r\n this.modulesContainer.classList.add('qlbt-modules-container')\r\n // fix:表格容器插入时获取ql-tooltip容器,用insertBefore插入到它前面,避免遮挡链接浮窗\r\n const linkContainer = this.quill.root.parentNode.querySelector('.ql-tooltip ')\r\n this.quill.root.parentNode.insertBefore(this.modulesContainer, linkContainer)\r\n this.tableSelection = new TableSelection(table, quill, this.modulesContainer)\r\n this.columnTool = new TableColumnTool(table, quill, this.modulesContainer)\r\n this.tableScrollBar = new TableScrollBar(table, quill, this.modulesContainer)\r\n let timeoutID\r\n this.subscriber = () => {\r\n clearTimeout(timeoutID)\r\n timeoutID = setTimeout(this.hideTableTools, 300)\r\n }\r\n window.addEventListener('resize', this.subscriber, false)\r\n }\r\n\r\n hideTableTools() {\r\n if (this.columnTool) {\r\n this.columnTool.destroy()\r\n }\r\n if (this.tableSelection) {\r\n this.tableSelection.destroy()\r\n }\r\n if (this.tableOperationMenu) {\r\n this.tableOperationMenu.destroy()\r\n }\r\n if (this.tableScrollBar) {\r\n this.tableScrollBar.destroy()\r\n }\r\n if (this.modulesContainer) {\r\n this.modulesContainer.remove()\r\n }\r\n this.columnTool = null\r\n this.tableSelection = null\r\n this.tableOperationMenu = null\r\n this.tableScrollBar = null\r\n this.modulesContainer = null\r\n this.table = null\r\n if (this.subscriber) {\r\n window.removeEventListener('resize', this.subscriber)\r\n }\r\n }\r\n}\r\n\r\nBetterTable.keyboardBindings = {\r\n 'line delete': {\r\n key: 'Delete',\r\n shiftKey: null,\r\n format: { 'table-col': false, 'table-cell-line': false },\r\n collapsed: true,\r\n offset: 0,\r\n handler(range, context) {\r\n // fix: 当光标在编辑器最前且之后为表格时按delete不执行操作\r\n if (range.index === 0 && context.line.next && context.line.next.statics.blotName === 'table-view') {\r\n const [p] = this.quill.getLine(range.index - 1)\r\n const [col] = this.quill.getLine(range.index + 1)\r\n if (p && p.statics.blotName === 'block' && col && col.statics.blotName === 'table-col') {\r\n return false\r\n }\r\n }\r\n return true\r\n },\r\n },\r\n 'table-col enter': {\r\n key: 'Enter',\r\n shiftKey: null,\r\n format: ['table-col'],\r\n collapsed: true,\r\n offset: 0,\r\n handler(range, context) {\r\n if (context.offset === 0 && range.length === 0) {\r\n const [col] = this.quill.getLine(range.index)\r\n if (col && col.statics.blotName === 'table-col') {\r\n const betterTableModule = this.quill.getModule('better-table')\r\n betterTableModule.hideTableTools()\r\n this.quill.insertText(range.index - 1, '\\n', Quill.sources.USER)\r\n this.quill.setSelection(range.index, 0, Quill.sources.USER)\r\n }\r\n }\r\n },\r\n },\r\n 'table-col delete': {\r\n key: 'Delete',\r\n shiftKey: null,\r\n format: ['table-col'],\r\n collapsed: true,\r\n offset: 0,\r\n handler(range, context) {\r\n if (context.offset === 0 && range.length === 0) {\r\n const [col] = this.quill.getLine(range.index)\r\n if (col && col.statics.blotName === 'table-col') {\r\n const betterTableModule = this.quill.getModule('better-table')\r\n let tableBlot\r\n try {\r\n tableBlot = col.parent.parent.parent\r\n }\r\n catch (_e) { }\r\n if (tableBlot && tableBlot.domNode !== betterTableModule.table) {\r\n betterTableModule.hideTableTools()\r\n tableBlot.remove()\r\n this.quill.update(Quill.sources.USER)\r\n }\r\n }\r\n }\r\n },\r\n },\r\n 'table-col backspace': {\r\n key: 'Backspace',\r\n shiftKey: null,\r\n format: ['table-col'],\r\n collapsed: true,\r\n offset: 0,\r\n handler() { },\r\n },\r\n 'table-cell-line backspace': {\r\n key: 'Backspace',\r\n format: ['table-cell-line'],\r\n collapsed: true,\r\n offset: 0,\r\n handler(range) {\r\n const [line] = this.quill.getLine(range.index)\r\n // 移除原有对非table-cell-line的阻止条件,使table-cell-line前的list等内容可以被删除\r\n if (!line.prev) {\r\n return false\r\n }\r\n return true\r\n },\r\n },\r\n 'table-cell-line delete': {\r\n key: 'Delete',\r\n format: ['table-cell-line'],\r\n handler(range, _context) {\r\n // 获取table-cell-line的索引和长度\r\n const [line] = this.quill.getLine(range.index)\r\n const index = this.quill.getIndex(line)\r\n const length = line.length()\r\n if (!line.next // 当无下一个元素且满足以下情况阻止删除操作\r\n && ((!line.prev && length === 1) // 单元格内只有一个table-cell-line且无内容\r\n || (range.index !== index && range.index + 1 >= index + length))) { // 光标在有内容的table-cell-line最后\r\n return false\r\n }\r\n return true\r\n },\r\n },\r\n 'table-cell-line enter': {\r\n key: 'Enter',\r\n shiftKey: null,\r\n format: ['table-cell-line'],\r\n handler(range, context) {\r\n // fix:通过window的光标选区当前指向判断,如果为HTMLElement且为表格容器则定位至下一行\r\n const node = window.getSelection().anchorNode\r\n if (node instanceof HTMLDivElement && node.classList.contains('quill-better-table-wrapper')) {\r\n this.quill.setSelection(range.index + 1, 0, Quill.sources.USER)\r\n this.quill.focus()\r\n return\r\n }\r\n // bugfix: a unexpected new line inserted when user compositionend with hitting Enter\r\n if (this.quill.selection && this.quill.selection.composing) return\r\n const Scope = Quill.imports.parchment.Scope\r\n if (range.length > 0) {\r\n this.quill.scroll.deleteAt(range.index, range.length) // So we do not trigger text-change\r\n }\r\n const lineFormats = Object.keys(context.format).reduce((formats, format) => {\r\n if (this.quill.scroll.query(format, Scope.BLOCK) && !Array.isArray(context.format[format])) {\r\n formats[format] = context.format[format]\r\n }\r\n return formats\r\n }, {})\r\n // insert new cellLine with lineFormats\r\n this.quill.insertText(range.index, '\\n', lineFormats['table-cell-line'], Quill.sources.USER)\r\n // Earlier scroll.deleteAt might have messed up our selection,\r\n // so insertText's built in selection preservation is not reliable\r\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT)\r\n this.quill.focus()\r\n Object.keys(context.format).forEach((name) => {\r\n if (!isNullOrUndefined(lineFormats[name])) return\r\n if (Array.isArray(context.format[name])) return\r\n if (name === 'link') return\r\n this.quill.format(name, context.format[name], Quill.sources.USER)\r\n })\r\n },\r\n },\r\n}\r\n\r\nexport default BetterTable\r\n"],"names":["TableCol","TableColGroup","TableCellLine","TableCell","TableRow","TableBody","TableContainer","TableViewWrapper","Header","List","getEventComposedPath","TableOperationMenu","isNullOrUndefined","matchTableCell","matchTableHeader","matchTable","matchHeader","matchList","matchMentionLink","matchWordShapeImage","matchInline","matchTableRow","table","css","isPureIE","TableSelector","insideTable","rowId","cellId","TableSelection","TableColumnTool","TableScrollBar","index"],"mappings":"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"}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
-
const Quill = require("quill");
|
|
4
|
-
const editor_utils = require("../../../config/editor.utils.cjs.js");
|
|
5
|
-
const tableConfig = require("../table-config.cjs.js");
|
|
6
|
-
const OriginHeader = Quill.import("formats/header");
|
|
7
|
-
class Header extends OriginHeader {
|
|
8
|
-
static create(value) {
|
|
9
|
-
if (typeof value === "string") {
|
|
10
|
-
value = { value };
|
|
11
|
-
}
|
|
12
|
-
const node = super.create(value.value);
|
|
13
|
-
tableConfig.CELL_IDENTITY_KEYS.forEach((key) => {
|
|
14
|
-
if (value[key]) {
|
|
15
|
-
node.setAttribute(`data-${key}`, value[key]);
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
tableConfig.CELL_ATTRIBUTES.forEach((key) => {
|
|
19
|
-
if (value[key]) {
|
|
20
|
-
node.setAttribute(`data-${key}`, value[key]);
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
return node;
|
|
24
|
-
}
|
|
25
|
-
static formats(domNode) {
|
|
26
|
-
const formats = {};
|
|
27
|
-
formats.value = this.tagName.indexOf(domNode.tagName) + 1;
|
|
28
|
-
return tableConfig.CELL_ATTRIBUTES.concat(tableConfig.CELL_IDENTITY_KEYS).reduce((tableFormats, attribute) => {
|
|
29
|
-
if (domNode.hasAttribute(`data-${attribute}`)) {
|
|
30
|
-
tableFormats[attribute] = domNode.getAttribute(`data-${attribute}`) || void 0;
|
|
31
|
-
}
|
|
32
|
-
return tableFormats;
|
|
33
|
-
}, formats);
|
|
34
|
-
}
|
|
35
|
-
format(name, value) {
|
|
36
|
-
if (Object.prototype.toString.call(value) === "[object Object]") {
|
|
37
|
-
value = value.value;
|
|
38
|
-
}
|
|
39
|
-
const headerDom = Header.formats(this.domNode);
|
|
40
|
-
const { row, cell, rowspan, colspan } = headerDom;
|
|
41
|
-
if (name === Header.blotName) {
|
|
42
|
-
if (value) {
|
|
43
|
-
super.format(name, {
|
|
44
|
-
value,
|
|
45
|
-
row,
|
|
46
|
-
cell,
|
|
47
|
-
rowspan,
|
|
48
|
-
colspan
|
|
49
|
-
});
|
|
50
|
-
} else {
|
|
51
|
-
if (row) {
|
|
52
|
-
this.replaceWith("table-cell-line", {
|
|
53
|
-
row,
|
|
54
|
-
cell,
|
|
55
|
-
rowspan,
|
|
56
|
-
colspan
|
|
57
|
-
});
|
|
58
|
-
} else {
|
|
59
|
-
super.format(name, value);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
} else {
|
|
63
|
-
super.format(name, value);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
optimize(_context) {
|
|
67
|
-
const { row, cell, rowspan, colspan } = Header.formats(this.domNode);
|
|
68
|
-
if (row && this.parent.statics.blotName !== "table") {
|
|
69
|
-
this.wrap("table", {
|
|
70
|
-
row,
|
|
71
|
-
cell,
|
|
72
|
-
colspan,
|
|
73
|
-
rowspan
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
this.enforceAllowedChildren();
|
|
77
|
-
if (!editor_utils.isNullOrUndefined(this.uiNode) && this.uiNode !== this.domNode.firstChild) {
|
|
78
|
-
this.domNode.insertBefore(this.uiNode, this.domNode.firstChild);
|
|
79
|
-
}
|
|
80
|
-
if (this.children.length === 0) {
|
|
81
|
-
if (!editor_utils.isNullOrUndefined(this.statics.defaultChild)) {
|
|
82
|
-
const child = this.scroll.create(this.statics.defaultChild.blotName);
|
|
83
|
-
this.appendChild(child);
|
|
84
|
-
} else {
|
|
85
|
-
this.remove();
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
this.cache = {};
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
Header.blotName = "header";
|
|
92
|
-
Header.tagName = ["H1", "H2", "H3", "H4", "H5", "H6"];
|
|
93
|
-
exports.default = Header;
|
|
94
|
-
//# sourceMappingURL=header.cjs.js.map
|