@progress/kendo-editor-common 1.11.9-dev.202412020819 → 1.11.9-develop.2
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/dist/cdn/main.js +1 -1
- package/dist/es/DOMSerializer.js +71 -75
- package/dist/es/align.js +19 -16
- package/dist/es/blockNode.js +76 -78
- package/dist/es/blockquote.js +12 -9
- package/dist/es/cleanFormatting.js +16 -16
- package/dist/es/config/align-rules.js +8 -6
- package/dist/es/config/commands.js +9 -13
- package/dist/es/config/constants.js +9 -7
- package/dist/es/config/indent-rules.js +8 -6
- package/dist/es/config/keymap.js +20 -18
- package/dist/es/config/list-settings.js +7 -6
- package/dist/es/config/schema.js +184 -126
- package/dist/es/find-replace.js +34 -32
- package/dist/es/image.js +10 -7
- package/dist/es/indent.js +47 -44
- package/dist/es/inline-style.js +72 -70
- package/dist/es/link.js +51 -52
- package/dist/es/listConvert.js +37 -34
- package/dist/es/lists.js +83 -82
- package/dist/es/main.js +32 -33
- package/dist/es/mark.js +87 -92
- package/dist/es/paste.js +48 -46
- package/dist/es/plugins/caret-color.js +14 -11
- package/dist/es/plugins/csp-fix.js +23 -23
- package/dist/es/plugins/highlight.js +12 -10
- package/dist/es/plugins/image-resize.js +81 -81
- package/dist/es/plugins/list-markers-styles.js +43 -39
- package/dist/es/plugins/placeholder.js +12 -9
- package/dist/es/plugins/resize-utils.js +11 -9
- package/dist/es/plugins/spaces-fix.js +13 -10
- package/dist/es/plugins/table-resize/column-resize.js +104 -102
- package/dist/es/plugins/table-resize/index.js +10 -7
- package/dist/es/plugins/table-resize/row-resize.js +88 -89
- package/dist/es/plugins/table-resize/table-resize.js +129 -122
- package/dist/es/plugins/table-resize/table-view.js +46 -48
- package/dist/es/plugins/table-resize/utils.js +39 -41
- package/dist/es/source.js +78 -74
- package/dist/es/table.js +64 -66
- package/dist/es/text.js +4 -2
- package/dist/es/utils.js +107 -116
- package/dist/es2015/DOMSerializer.js +20 -17
- package/dist/es2015/align.js +6 -3
- package/dist/es2015/blockNode.js +15 -12
- package/dist/es2015/blockquote.js +5 -2
- package/dist/es2015/cleanFormatting.js +6 -3
- package/dist/es2015/config/align-rules.js +7 -5
- package/dist/es2015/config/commands.js +9 -13
- package/dist/es2015/config/constants.js +9 -7
- package/dist/es2015/config/indent-rules.js +6 -3
- package/dist/es2015/config/keymap.js +10 -7
- package/dist/es2015/config/list-settings.js +5 -3
- package/dist/es2015/config/schema.js +8 -6
- package/dist/es2015/find-replace.js +9 -6
- package/dist/es2015/image.js +5 -2
- package/dist/es2015/indent.js +14 -11
- package/dist/es2015/inline-style.js +9 -6
- package/dist/es2015/link.js +7 -4
- package/dist/es2015/listConvert.js +5 -2
- package/dist/es2015/lists.js +14 -11
- package/dist/es2015/main.js +32 -33
- package/dist/es2015/mark.js +15 -12
- package/dist/es2015/node_modules/tslib/tslib.es6.js +35 -0
- package/dist/es2015/paste.js +14 -11
- package/dist/es2015/plugins/caret-color.js +8 -5
- package/dist/es2015/plugins/csp-fix.js +5 -2
- package/dist/es2015/plugins/highlight.js +6 -3
- package/dist/es2015/plugins/image-resize.js +10 -7
- package/dist/es2015/plugins/list-markers-styles.js +6 -3
- package/dist/es2015/plugins/placeholder.js +5 -2
- package/dist/es2015/plugins/resize-utils.js +11 -9
- package/dist/es2015/plugins/spaces-fix.js +4 -1
- package/dist/es2015/plugins/table-resize/column-resize.js +24 -21
- package/dist/es2015/plugins/table-resize/index.js +9 -6
- package/dist/es2015/plugins/table-resize/row-resize.js +23 -20
- package/dist/es2015/plugins/table-resize/table-resize.js +20 -17
- package/dist/es2015/plugins/table-resize/table-view.js +9 -6
- package/dist/es2015/plugins/table-resize/utils.js +13 -10
- package/dist/es2015/source.js +24 -13
- package/dist/es2015/table.js +18 -15
- package/dist/es2015/text.js +3 -1
- package/dist/es2015/utils.js +22 -25
- package/dist/npm/DOMSerializer.js +73 -78
- package/dist/npm/align.d.ts +7 -4
- package/dist/npm/align.js +22 -21
- package/dist/npm/blockNode.d.ts +14 -15
- package/dist/npm/blockNode.js +91 -95
- package/dist/npm/blockquote.d.ts +5 -2
- package/dist/npm/blockquote.js +16 -15
- package/dist/npm/cleanFormatting.d.ts +6 -3
- package/dist/npm/cleanFormatting.js +17 -19
- package/dist/npm/config/align-rules.d.ts +8 -6
- package/dist/npm/config/align-rules.js +14 -9
- package/dist/npm/config/commands.d.ts +11 -19
- package/dist/npm/config/commands.js +17 -16
- package/dist/npm/config/constants.js +17 -10
- package/dist/npm/config/indent-rules.d.ts +6 -4
- package/dist/npm/config/indent-rules.js +11 -9
- package/dist/npm/config/keymap.d.ts +5 -2
- package/dist/npm/config/keymap.js +30 -30
- package/dist/npm/config/list-settings.js +13 -11
- package/dist/npm/config/schema.d.ts +4 -3
- package/dist/npm/config/schema.js +191 -134
- package/dist/npm/find-replace.d.ts +10 -7
- package/dist/npm/find-replace.js +47 -47
- package/dist/npm/image.d.ts +6 -3
- package/dist/npm/image.js +11 -10
- package/dist/npm/indent.d.ts +12 -9
- package/dist/npm/indent.js +68 -67
- package/dist/npm/inline-style.d.ts +7 -4
- package/dist/npm/inline-style.js +83 -83
- package/dist/npm/link.d.ts +4 -2
- package/dist/npm/link.js +58 -61
- package/dist/npm/listConvert.d.ts +3 -1
- package/dist/npm/listConvert.js +40 -39
- package/dist/npm/lists.d.ts +9 -9
- package/dist/npm/lists.js +94 -95
- package/dist/npm/main.d.ts +34 -33
- package/dist/npm/main.js +389 -198
- package/dist/npm/mark.d.ts +13 -18
- package/dist/npm/mark.js +104 -111
- package/dist/npm/paste.d.ts +12 -9
- package/dist/npm/paste.js +61 -61
- package/dist/npm/plugins/caret-color.d.ts +6 -3
- package/dist/npm/plugins/caret-color.js +21 -19
- package/dist/npm/plugins/csp-fix.d.ts +4 -1
- package/dist/npm/plugins/csp-fix.js +28 -30
- package/dist/npm/plugins/highlight.d.ts +7 -4
- package/dist/npm/plugins/highlight.js +17 -16
- package/dist/npm/plugins/image-resize.d.ts +7 -5
- package/dist/npm/plugins/image-resize.js +96 -97
- package/dist/npm/plugins/list-markers-styles.d.ts +5 -2
- package/dist/npm/plugins/list-markers-styles.js +49 -47
- package/dist/npm/plugins/placeholder.d.ts +4 -1
- package/dist/npm/plugins/placeholder.js +18 -17
- package/dist/npm/plugins/resize-utils.js +14 -12
- package/dist/npm/plugins/spaces-fix.d.ts +4 -1
- package/dist/npm/plugins/spaces-fix.js +19 -18
- package/dist/npm/plugins/table-resize/column-resize.js +117 -117
- package/dist/npm/plugins/table-resize/index.d.ts +5 -2
- package/dist/npm/plugins/table-resize/index.js +16 -15
- package/dist/npm/plugins/table-resize/row-resize.js +98 -101
- package/dist/npm/plugins/table-resize/table-resize.js +144 -139
- package/dist/npm/plugins/table-resize/table-view.js +59 -61
- package/dist/npm/plugins/table-resize/utils.d.ts +7 -17
- package/dist/npm/plugins/table-resize/utils.js +51 -52
- package/dist/npm/source.d.ts +18 -11
- package/dist/npm/source.js +94 -91
- package/dist/npm/table.d.ts +10 -9
- package/dist/npm/table.js +93 -82
- package/dist/npm/text.d.ts +6 -3
- package/dist/npm/text.js +5 -5
- package/dist/npm/types/active-marks.d.ts +4 -1
- package/dist/npm/types/command.d.ts +5 -2
- package/dist/npm/types/dispatchFn.d.ts +4 -1
- package/dist/npm/types/paste-cleanup-settings.d.ts +3 -1
- package/dist/npm/utils.d.ts +14 -29
- package/dist/npm/utils.js +133 -145
- package/package.json +35 -53
- package/dist/cdn/js/kendo-editor-common.js +0 -1
- package/dist/es/types/active-marks.js +0 -1
- package/dist/es/types/command.js +0 -1
- package/dist/es/types/dispatchFn.js +0 -1
- package/dist/es/types/paste-cleanup-settings.js +0 -1
- package/dist/es/types/predicate.js +0 -1
- package/dist/es2015/types/active-marks.js +0 -1
- package/dist/es2015/types/command.js +0 -1
- package/dist/es2015/types/dispatchFn.js +0 -1
- package/dist/es2015/types/paste-cleanup-settings.js +0 -1
- package/dist/es2015/types/predicate.js +0 -1
- package/dist/npm/DOMSerializer.d.ts +0 -35
- package/dist/npm/config/constants.d.ts +0 -7
- package/dist/npm/config/list-settings.d.ts +0 -30
- package/dist/npm/plugins/resize-utils.d.ts +0 -35
- package/dist/npm/plugins/table-resize/column-resize.d.ts +0 -2
- package/dist/npm/plugins/table-resize/row-resize.d.ts +0 -2
- package/dist/npm/plugins/table-resize/table-resize.d.ts +0 -18
- package/dist/npm/plugins/table-resize/table-view.d.ts +0 -28
- package/dist/npm/types/active-marks.js +0 -2
- package/dist/npm/types/command.js +0 -2
- package/dist/npm/types/dispatchFn.js +0 -2
- package/dist/npm/types/paste-cleanup-settings.js +0 -2
- package/dist/npm/types/predicate.d.ts +0 -1
- package/dist/npm/types/predicate.js +0 -2
- package/dist/systemjs/kendo-editor-common.js +0 -1
|
@@ -1,51 +1,58 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { Plugin, NodeSelection } from 'prosemirror-state';
|
|
2
|
+
import { resizableAttr, dataResizeDirTable, colgroupAttr } from '../../config/constants.js';
|
|
3
|
+
import { tableResizeKey, getTable } from './utils.js';
|
|
4
|
+
import { parentNode, parseStyle, setNodeStyle } from '../../utils.js';
|
|
5
|
+
import { directions } from '../resize-utils.js';
|
|
6
|
+
|
|
7
|
+
const commonDir = {
|
|
8
8
|
'southeast': true,
|
|
9
9
|
'southwest': true,
|
|
10
10
|
'northwest': true,
|
|
11
11
|
'northeast': true
|
|
12
12
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
const horizontalDir = {
|
|
14
|
+
'east': true,
|
|
15
|
+
'west': true,
|
|
16
|
+
...commonDir
|
|
17
|
+
};
|
|
18
|
+
const verticalDir = {
|
|
19
|
+
'south': true,
|
|
20
|
+
'north': true,
|
|
21
|
+
...commonDir
|
|
22
|
+
};
|
|
23
|
+
class ResizeState {
|
|
24
|
+
constructor(activeHandle, dragging, nodePosition) {
|
|
17
25
|
this.activeHandle = activeHandle;
|
|
18
26
|
this.dragging = dragging;
|
|
19
27
|
this.nodePosition = nodePosition;
|
|
20
28
|
}
|
|
21
|
-
|
|
22
|
-
|
|
29
|
+
apply(tr) {
|
|
30
|
+
const next = tr.getMeta(tableResizeKey);
|
|
23
31
|
if (next) {
|
|
24
|
-
|
|
32
|
+
const nextState = new ResizeState(next.activeHandle, next.setDragging, next.nodePosition);
|
|
25
33
|
return nextState;
|
|
26
34
|
}
|
|
27
35
|
return this;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
var handleMouseMove = function (view, event) {
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const handleMouseMove = (view, event) => {
|
|
32
39
|
var _a;
|
|
33
|
-
|
|
34
|
-
|
|
40
|
+
const state = tableResizeKey.getState(view.state);
|
|
41
|
+
const { dragging, nodePosition, activeHandle } = state;
|
|
35
42
|
if (nodePosition < 0 || !dragging) {
|
|
36
43
|
return;
|
|
37
44
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
const tableDom = getTable(view.nodeDOM(nodePosition));
|
|
46
|
+
const rect = tableDom.getBoundingClientRect();
|
|
47
|
+
const dir = directions[activeHandle];
|
|
48
|
+
const diffX = (event.clientX - dragging.startX) * dir.x;
|
|
49
|
+
const diffY = (event.clientY - dragging.startY) * dir.y;
|
|
50
|
+
const win = (tableDom.ownerDocument && tableDom.ownerDocument.defaultView) || window;
|
|
51
|
+
const compStyles = win.getComputedStyle(tableDom);
|
|
52
|
+
const nodeWidth = /px/.test(compStyles.width) ? parseFloat(compStyles.width) : tableDom.offsetWidth;
|
|
53
|
+
const nodeHeight = /px/.test(compStyles.height) ? parseFloat(compStyles.height) : tableDom.offsetHeight;
|
|
54
|
+
const width = dir.x ? diffX + nodeWidth : rect.width;
|
|
55
|
+
const height = dir.y ? diffY + nodeHeight : rect.height;
|
|
49
56
|
dragging.startX = dir.x ? event.clientX : dragging.startX;
|
|
50
57
|
dragging.startY = dir.y ? event.clientY : dragging.startY;
|
|
51
58
|
if (horizontalDir[activeHandle]) {
|
|
@@ -55,34 +62,34 @@ var handleMouseMove = function (view, event) {
|
|
|
55
62
|
tableDom.style.height = height + 'px';
|
|
56
63
|
}
|
|
57
64
|
if (/px/.test(tableDom.style.width)) {
|
|
58
|
-
|
|
65
|
+
const wrapper = (_a = tableDom.parentNode) === null || _a === void 0 ? void 0 : _a.parentNode;
|
|
59
66
|
if (wrapper instanceof HTMLDivElement && wrapper.matches('div[table]') && /%/.test(wrapper.style.width)) {
|
|
60
67
|
wrapper.style.width = '';
|
|
61
68
|
}
|
|
62
69
|
}
|
|
63
70
|
};
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
cols.forEach(
|
|
71
|
+
const toPercents = (view, tr, tablePos) => {
|
|
72
|
+
const tableNode = view.state.doc.nodeAt(tablePos);
|
|
73
|
+
const tableDom = getTable(view.nodeDOM(tablePos));
|
|
74
|
+
const { width, height, colsWidth, rowsHeight, offsetWidth, offsetHeight } = tableSize(tableDom);
|
|
75
|
+
const colgroup = tableDom.firstChild;
|
|
76
|
+
const cols = Array.from((colgroup && colgroup.children) || []);
|
|
77
|
+
let widthChanged = false;
|
|
78
|
+
cols.forEach((col, i) => {
|
|
72
79
|
if (col.style.width && !/%$/.test(col.style.width)) {
|
|
73
80
|
col.style.width = ((colsWidth[i]) * 100 / width) + '%';
|
|
74
81
|
widthChanged = true;
|
|
75
82
|
}
|
|
76
83
|
});
|
|
77
|
-
|
|
78
|
-
tableNode.forEach(
|
|
79
|
-
|
|
84
|
+
let heightChange = false;
|
|
85
|
+
tableNode.forEach((row, offset, index) => {
|
|
86
|
+
const rowHeight = parseStyle(row.attrs.style).height;
|
|
80
87
|
if (rowHeight && !/%$/.test(rowHeight)) {
|
|
81
88
|
tr.setNodeMarkup(tablePos + offset + 1, null, setNodeStyle(row.attrs, 'height', (rowsHeight[index] * 100 / height) + '%'));
|
|
82
89
|
heightChange = true;
|
|
83
90
|
}
|
|
84
91
|
});
|
|
85
|
-
|
|
92
|
+
let tableAttrs = tableNode.attrs;
|
|
86
93
|
if (parseStyle(tableAttrs.style).width !== offsetWidth + 'px') {
|
|
87
94
|
tableAttrs = setNodeStyle(tableAttrs, 'width', offsetWidth + 'px');
|
|
88
95
|
}
|
|
@@ -96,55 +103,55 @@ var toPercents = function (view, tr, tablePos) {
|
|
|
96
103
|
tr.setNodeMarkup(tablePos, null, tableAttrs);
|
|
97
104
|
}
|
|
98
105
|
};
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
tableNode.forEach(
|
|
106
|
-
|
|
106
|
+
const toPixels = (view, tr, tablePos, attrs) => {
|
|
107
|
+
const tableNode = view.state.doc.nodeAt(tablePos);
|
|
108
|
+
const tableDom = getTable(view.nodeDOM(tablePos));
|
|
109
|
+
const win = (tableDom.ownerDocument && tableDom.ownerDocument.defaultView) || window;
|
|
110
|
+
const calcStyle = win.getComputedStyle;
|
|
111
|
+
const rows = Array.from(tableDom.rows);
|
|
112
|
+
tableNode.forEach((row, offset, index) => {
|
|
113
|
+
const rowHeight = parseStyle(row.attrs.style).height;
|
|
107
114
|
if (rowHeight && !/px$/.test(rowHeight)) {
|
|
108
115
|
tr.setNodeMarkup(tablePos + offset + 1, null, setNodeStyle(row.attrs, 'height', calcStyle(rows[index]).height));
|
|
109
116
|
}
|
|
110
117
|
});
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
cols.forEach(
|
|
118
|
+
const colgroup = tableDom.firstChild;
|
|
119
|
+
const cols = Array.from((colgroup && colgroup.children) || []);
|
|
120
|
+
let widthChanged = false;
|
|
121
|
+
cols.forEach((col, i) => {
|
|
115
122
|
if (col.style.width && !/px$/.test(col.style.width)) {
|
|
116
123
|
col.style.width = calcStyle(cols[i]).width;
|
|
117
124
|
widthChanged = true;
|
|
118
125
|
}
|
|
119
126
|
});
|
|
120
|
-
|
|
127
|
+
const tableAttrs = { ...attrs };
|
|
121
128
|
if (widthChanged) {
|
|
122
129
|
tableAttrs[colgroupAttr] = colgroup.outerHTML;
|
|
123
130
|
}
|
|
124
131
|
return tableAttrs;
|
|
125
132
|
};
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
return { width
|
|
133
|
+
const tableSize = (table) => {
|
|
134
|
+
const cols = Array.from(table.firstChild.children);
|
|
135
|
+
const colsWidth = cols.map(c => c.offsetWidth);
|
|
136
|
+
const rowsHeight = Array.from(table.rows).map(row => row.offsetHeight);
|
|
137
|
+
const width = colsWidth.reduce((acc, cur) => acc + cur, 0);
|
|
138
|
+
const height = rowsHeight.reduce((acc, cur) => acc + cur, 0);
|
|
139
|
+
const offsetHeight = table.offsetHeight;
|
|
140
|
+
const offsetWidth = table.offsetWidth;
|
|
141
|
+
return { width, height, colsWidth, rowsHeight, offsetWidth, offsetHeight };
|
|
135
142
|
};
|
|
136
|
-
|
|
137
|
-
|
|
143
|
+
const handleMouseUp = (view) => {
|
|
144
|
+
const { dragging, nodePosition, activeHandle } = tableResizeKey.getState(view.state);
|
|
138
145
|
if (dragging) {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
146
|
+
const node = view.state.doc.nodeAt(nodePosition);
|
|
147
|
+
const dom = getTable(view.nodeDOM(nodePosition));
|
|
148
|
+
const rect = tableSize(dom);
|
|
142
149
|
if (node) {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
150
|
+
const width = rect.offsetWidth + 'px';
|
|
151
|
+
const height = rect.offsetHeight + 'px';
|
|
152
|
+
const tr = view.state.tr;
|
|
153
|
+
let attrs = node.attrs;
|
|
154
|
+
const parsedStyles = parseStyle(attrs.style);
|
|
148
155
|
if (horizontalDir[activeHandle] && dom.style.width && parsedStyles.width !== width) {
|
|
149
156
|
attrs = setNodeStyle(attrs, 'width', width);
|
|
150
157
|
}
|
|
@@ -155,17 +162,17 @@ var handleMouseUp = function (view) {
|
|
|
155
162
|
tr.setNodeMarkup(nodePosition, null, attrs);
|
|
156
163
|
tr.setMeta('commandName', 'node-resize');
|
|
157
164
|
tr.setMeta('args', attrs);
|
|
158
|
-
tr.setMeta(
|
|
165
|
+
tr.setMeta(tableResizeKey, {
|
|
159
166
|
setDragging: null,
|
|
160
167
|
activeHandle: null,
|
|
161
|
-
nodePosition
|
|
168
|
+
nodePosition
|
|
162
169
|
});
|
|
163
170
|
if (!/%/.test(parseStyle(attrs.style).width || '')) {
|
|
164
|
-
|
|
165
|
-
|
|
171
|
+
const $pos = tr.doc.resolve(nodePosition);
|
|
172
|
+
const wrapper = parentNode($pos, n => n.type.name === 'table_wrapper');
|
|
166
173
|
if (wrapper && /%/.test(parseStyle(wrapper.node.attrs.style).width || '')) {
|
|
167
|
-
|
|
168
|
-
|
|
174
|
+
const wrapperAttrs = setNodeStyle(wrapper.node.attrs, 'width', '');
|
|
175
|
+
const wrapperPos = $pos.start(wrapper.depth) - 1;
|
|
169
176
|
tr.setNodeMarkup(wrapperPos, null, wrapperAttrs);
|
|
170
177
|
}
|
|
171
178
|
}
|
|
@@ -173,24 +180,24 @@ var handleMouseUp = function (view) {
|
|
|
173
180
|
}
|
|
174
181
|
}
|
|
175
182
|
};
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
183
|
+
const handleMouseDown = (view, event) => {
|
|
184
|
+
const target = event.target;
|
|
185
|
+
const activeHandle = target.getAttribute(dataResizeDirTable);
|
|
179
186
|
if (!activeHandle) {
|
|
180
187
|
return false;
|
|
181
188
|
}
|
|
182
|
-
|
|
189
|
+
const resizeState = tableResizeKey.getState(view.state);
|
|
183
190
|
event.preventDefault();
|
|
184
|
-
|
|
185
|
-
transaction.setMeta(
|
|
191
|
+
const transaction = view.state.tr;
|
|
192
|
+
transaction.setMeta(tableResizeKey, {
|
|
186
193
|
setDragging: { startX: event.clientX, startY: event.clientY },
|
|
187
|
-
activeHandle
|
|
194
|
+
activeHandle,
|
|
188
195
|
nodePosition: resizeState.nodePosition
|
|
189
196
|
});
|
|
190
197
|
transaction.setMeta('addToHistory', false);
|
|
191
198
|
toPercents(view, transaction, resizeState.nodePosition);
|
|
192
199
|
view.dispatch(transaction);
|
|
193
|
-
|
|
200
|
+
const curWindow = event.view || window;
|
|
194
201
|
function move(e) {
|
|
195
202
|
handleMouseMove(view, e);
|
|
196
203
|
}
|
|
@@ -203,77 +210,77 @@ var handleMouseDown = function (view, event) {
|
|
|
203
210
|
curWindow.addEventListener('mousemove', move);
|
|
204
211
|
return true;
|
|
205
212
|
};
|
|
206
|
-
|
|
207
|
-
if (options === void 0) { options = { node: 'table' }; }
|
|
213
|
+
const tableResizing = (options = { node: 'table' }) => {
|
|
208
214
|
return new Plugin({
|
|
209
|
-
key:
|
|
210
|
-
view:
|
|
211
|
-
selectedNode
|
|
212
|
-
|
|
213
|
-
|
|
215
|
+
key: tableResizeKey,
|
|
216
|
+
view: () => ({
|
|
217
|
+
selectedNode(state, nodeType) {
|
|
218
|
+
const selection = state.selection;
|
|
219
|
+
const isNodeSelected = selection instanceof NodeSelection && nodeType === selection.node.type;
|
|
214
220
|
if (isNodeSelected && selection instanceof NodeSelection) {
|
|
215
221
|
return { node: selection.node, pos: selection.from };
|
|
216
222
|
}
|
|
217
|
-
|
|
218
|
-
|
|
223
|
+
const parent = parentNode(selection.$from, (n) => n.type === nodeType);
|
|
224
|
+
const node = parent && parent.node;
|
|
219
225
|
if (node) {
|
|
220
|
-
|
|
221
|
-
return { node
|
|
226
|
+
const pos = selection.$from.start(parent.depth) - 1;
|
|
227
|
+
return { node, pos };
|
|
222
228
|
}
|
|
223
229
|
return null;
|
|
224
230
|
},
|
|
225
|
-
update
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
var prevSelected = this.selectedNode(prevState, nodeType);
|
|
231
|
+
update(view, prevState) {
|
|
232
|
+
const state = view.state;
|
|
233
|
+
const nodeType = state.schema.nodes[options.node];
|
|
234
|
+
const selected = this.selectedNode(state, nodeType);
|
|
235
|
+
const prevSelected = this.selectedNode(prevState, nodeType);
|
|
231
236
|
if (!selected && prevSelected && !prevState.doc.eq(view.state.doc)) {
|
|
232
237
|
// selected table is deleted
|
|
233
238
|
return;
|
|
234
239
|
}
|
|
235
240
|
if (selected || prevSelected) {
|
|
236
|
-
|
|
241
|
+
const tr = state.tr;
|
|
237
242
|
tr.setMeta('addToHistory', false);
|
|
238
243
|
if (selected && prevSelected && selected.pos !== prevSelected.pos) {
|
|
239
|
-
tr.setMeta(
|
|
240
|
-
|
|
244
|
+
tr.setMeta(tableResizeKey, { nodePosition: selected.pos });
|
|
245
|
+
const prevNode = tr.doc.nodeAt(prevSelected.pos);
|
|
241
246
|
if (prevNode && prevNode.type.name === nodeType.name) {
|
|
242
|
-
tr.setNodeMarkup(prevSelected.pos, nodeType,
|
|
247
|
+
tr.setNodeMarkup(prevSelected.pos, nodeType, { ...prevSelected.node.attrs, [resizableAttr]: false });
|
|
243
248
|
}
|
|
244
|
-
tr.setNodeMarkup(selected.pos, nodeType,
|
|
249
|
+
tr.setNodeMarkup(selected.pos, nodeType, { ...selected.node.attrs, [resizableAttr]: true });
|
|
245
250
|
view.dispatch(tr);
|
|
246
251
|
}
|
|
247
252
|
else if (selected && prevSelected && selected.pos === prevSelected.pos &&
|
|
248
253
|
!selected.node.attrs[resizableAttr] && !state.selection.eq(prevState.selection)) {
|
|
249
|
-
tr.setMeta(
|
|
250
|
-
view.dispatch(tr.setNodeMarkup(selected.pos, nodeType,
|
|
254
|
+
tr.setMeta(tableResizeKey, { nodePosition: selected.pos });
|
|
255
|
+
view.dispatch(tr.setNodeMarkup(selected.pos, nodeType, { ...selected.node.attrs, [resizableAttr]: true }));
|
|
251
256
|
}
|
|
252
257
|
else if (selected && !prevSelected) {
|
|
253
|
-
tr.setMeta(
|
|
254
|
-
view.dispatch(tr.setNodeMarkup(selected.pos, nodeType,
|
|
258
|
+
tr.setMeta(tableResizeKey, { nodePosition: selected.pos });
|
|
259
|
+
view.dispatch(tr.setNodeMarkup(selected.pos, nodeType, { ...selected.node.attrs, [resizableAttr]: true }));
|
|
255
260
|
}
|
|
256
261
|
else if (!selected && prevSelected) {
|
|
257
|
-
tr.setMeta(
|
|
258
|
-
view.dispatch(tr.setNodeMarkup(prevSelected.pos, nodeType,
|
|
262
|
+
tr.setMeta(tableResizeKey, { nodePosition: -1 });
|
|
263
|
+
view.dispatch(tr.setNodeMarkup(prevSelected.pos, nodeType, { ...prevSelected.node.attrs, [resizableAttr]: false }));
|
|
259
264
|
}
|
|
260
265
|
}
|
|
261
266
|
}
|
|
262
|
-
})
|
|
267
|
+
}),
|
|
263
268
|
state: {
|
|
264
|
-
init
|
|
269
|
+
init() {
|
|
265
270
|
return new ResizeState('', null, -1);
|
|
266
271
|
},
|
|
267
|
-
apply
|
|
272
|
+
apply(tr, prev) {
|
|
268
273
|
return prev.apply(tr);
|
|
269
274
|
}
|
|
270
275
|
},
|
|
271
276
|
props: {
|
|
272
277
|
handleDOMEvents: {
|
|
273
|
-
mousedown
|
|
278
|
+
mousedown(view, event) {
|
|
274
279
|
return handleMouseDown(view, event);
|
|
275
280
|
}
|
|
276
281
|
}
|
|
277
282
|
}
|
|
278
283
|
});
|
|
279
284
|
};
|
|
285
|
+
|
|
286
|
+
export { tableResizing };
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { parseStrColgroup } from '../../config/schema';
|
|
3
|
-
import { handles } from '
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { resizableWrap, colgroupAttr, resizeHandle, dataResizeDirTable, resizableAttr } from '../../config/constants.js';
|
|
2
|
+
import { parseStrColgroup } from '../../config/schema.js';
|
|
3
|
+
import { handles } from '../resize-utils.js';
|
|
4
|
+
import { setAttribute, parseStyle } from '../../utils.js';
|
|
5
|
+
|
|
6
|
+
class TableView {
|
|
7
|
+
constructor(node, view) {
|
|
7
8
|
this.node = node;
|
|
8
9
|
this.view = view;
|
|
9
10
|
this.dom = document.createElement('div');
|
|
@@ -12,54 +13,53 @@ var TableView = /** @class */ (function () {
|
|
|
12
13
|
if (node.attrs[colgroupAttr]) {
|
|
13
14
|
this.renderColgroup(node.attrs[colgroupAttr]);
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
+
const tBody = this.table.appendChild(document.createElement('tbody'));
|
|
16
17
|
this.setAttributes(this.table, node.attrs);
|
|
17
|
-
this.resizeHandles = handles.map(
|
|
18
|
-
|
|
18
|
+
this.resizeHandles = handles.map(dir => {
|
|
19
|
+
const handle = document.createElement('span');
|
|
19
20
|
handle.className = resizeHandle + ' ' + dir;
|
|
20
21
|
handle.setAttribute(dataResizeDirTable, dir);
|
|
21
22
|
return handle;
|
|
22
23
|
});
|
|
23
24
|
this.contentDOM = tBody;
|
|
24
25
|
}
|
|
25
|
-
|
|
26
|
-
var _this = this;
|
|
26
|
+
update(node) {
|
|
27
27
|
if (node.type !== this.node.type) {
|
|
28
28
|
return false;
|
|
29
29
|
}
|
|
30
|
-
|
|
30
|
+
const prev = this.node;
|
|
31
31
|
this.node = node;
|
|
32
32
|
if (node.attrs[resizableAttr]) {
|
|
33
|
-
this.resizeHandles.forEach(
|
|
34
|
-
|
|
33
|
+
this.resizeHandles.forEach(handle => {
|
|
34
|
+
this.dom.appendChild(handle);
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
37
|
else {
|
|
38
38
|
Array.from(this.dom.children)
|
|
39
|
-
.filter(
|
|
40
|
-
.forEach(
|
|
39
|
+
.filter((e) => e.classList.contains(resizeHandle))
|
|
40
|
+
.forEach((e) => e.remove());
|
|
41
41
|
}
|
|
42
42
|
this.setAttributes(this.table, node.attrs);
|
|
43
43
|
if (prev.attrs[colgroupAttr] !== node.attrs[colgroupAttr]) {
|
|
44
44
|
this.renderColgroup(node.attrs[colgroupAttr]);
|
|
45
45
|
}
|
|
46
46
|
return true;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
}
|
|
48
|
+
ignoreMutation(record) {
|
|
49
|
+
const result = record.type === 'attributes' &&
|
|
50
50
|
(record.target === this.table ||
|
|
51
51
|
record.target.firstChild === this.table ||
|
|
52
52
|
(this.colgroup && this.colgroup.contains(record.target)));
|
|
53
53
|
return result;
|
|
54
|
-
}
|
|
55
|
-
|
|
54
|
+
}
|
|
55
|
+
destroy() {
|
|
56
56
|
this.node = undefined;
|
|
57
57
|
this.view = undefined;
|
|
58
58
|
this.table = undefined;
|
|
59
59
|
this.colgroup = undefined;
|
|
60
60
|
this.resizeHandles = undefined;
|
|
61
|
-
}
|
|
62
|
-
|
|
61
|
+
}
|
|
62
|
+
renderColgroup(colgroupStr) {
|
|
63
63
|
if (this.table && this.table.firstChild && this.table.firstChild.nodeName === 'COLGROUP') {
|
|
64
64
|
this.table.removeChild(this.table.firstChild);
|
|
65
65
|
}
|
|
@@ -67,10 +67,10 @@ var TableView = /** @class */ (function () {
|
|
|
67
67
|
this.colgroup = parseStrColgroup(colgroupStr);
|
|
68
68
|
this.table.insertBefore(this.colgroup, this.table.firstChild);
|
|
69
69
|
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
for (
|
|
70
|
+
}
|
|
71
|
+
setAttributes(table, attrs) {
|
|
72
|
+
const skip = [colgroupAttr, resizableAttr];
|
|
73
|
+
for (const attrName in attrs) {
|
|
74
74
|
if (attrName && skip.indexOf(attrName) === -1) {
|
|
75
75
|
setAttribute(table, attrName, attrs[attrName]);
|
|
76
76
|
}
|
|
@@ -82,49 +82,47 @@ var TableView = /** @class */ (function () {
|
|
|
82
82
|
else {
|
|
83
83
|
this.dom.style.width = '';
|
|
84
84
|
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
var TableWrapperView = /** @class */ (function () {
|
|
90
|
-
function TableWrapperView(node, view) {
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
class TableWrapperView {
|
|
88
|
+
constructor(node, view) {
|
|
91
89
|
this.node = node;
|
|
92
90
|
this.view = view;
|
|
93
91
|
this.dom = document.createElement('div');
|
|
94
92
|
this.setAttributes(this.dom, node.attrs);
|
|
95
93
|
this.contentDOM = this.dom;
|
|
96
94
|
}
|
|
97
|
-
|
|
95
|
+
update(node) {
|
|
98
96
|
if (node.type !== this.node.type) {
|
|
99
97
|
return false;
|
|
100
98
|
}
|
|
101
99
|
this.node = node;
|
|
102
100
|
this.setAttributes(this.dom, node.attrs);
|
|
103
101
|
return true;
|
|
104
|
-
}
|
|
105
|
-
|
|
102
|
+
}
|
|
103
|
+
ignoreMutation(record) {
|
|
106
104
|
return record.type === 'attributes' && record.attributeName === 'style';
|
|
107
|
-
}
|
|
108
|
-
|
|
105
|
+
}
|
|
106
|
+
destroy() {
|
|
109
107
|
this.node = undefined;
|
|
110
108
|
this.view = undefined;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
for (
|
|
109
|
+
}
|
|
110
|
+
setAttributes(dom, attrs) {
|
|
111
|
+
for (const attrName in attrs) {
|
|
114
112
|
if (attrName) {
|
|
115
113
|
setAttribute(dom, attrName, attrs[attrName]);
|
|
116
114
|
}
|
|
117
115
|
}
|
|
118
116
|
dom.setAttribute('table', '');
|
|
119
117
|
if (/%/.test(dom.style.width)) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
118
|
+
const table = this.node && this.node.lastChild;
|
|
119
|
+
const tableStyles = table ? parseStyle(table.attrs.style) : {};
|
|
120
|
+
const tableWidth = tableStyles.width || '';
|
|
123
121
|
if (tableWidth && !/%/.test(tableWidth)) {
|
|
124
122
|
dom.style.width = '';
|
|
125
123
|
}
|
|
126
124
|
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
export { TableWrapperView };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export { TableView, TableWrapperView };
|