@seafile/sdoc-editor 3.0.113 → 3.0.115
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/extension/constants/element-type.js +7 -2
- package/dist/extension/constants/index.js +34 -2
- package/dist/extension/constants/menus-config.js +30 -15
- package/dist/extension/plugins/blockquote/helpers.js +5 -3
- package/dist/extension/plugins/callout/helper.js +12 -2
- package/dist/extension/plugins/check-list/helpers.js +1 -0
- package/dist/extension/plugins/code-block/helpers.js +14 -0
- package/dist/extension/plugins/formula/helper.js +31 -1
- package/dist/extension/plugins/formula/menu/index.js +3 -1
- package/dist/extension/plugins/header/helpers.js +1 -0
- package/dist/extension/plugins/image/helpers.js +1 -0
- package/dist/extension/plugins/index.js +8 -1
- package/dist/extension/plugins/list/helpers.js +2 -1
- package/dist/extension/plugins/multi-column/helper.js +11 -0
- package/dist/extension/plugins/paragraph/render-elem.js +2 -2
- package/dist/extension/plugins/quick-insert/plugin/index.js +2 -2
- package/dist/extension/plugins/quick-insert/render-elem.js +3 -1
- package/dist/extension/plugins/table/helpers.js +3 -1
- package/dist/extension/plugins/toggle-header/helper.js +189 -0
- package/dist/extension/plugins/toggle-header/index.js +17 -0
- package/dist/extension/plugins/toggle-header/placeholder.js +35 -0
- package/dist/extension/plugins/toggle-header/plugin.js +537 -0
- package/dist/extension/plugins/toggle-header/render-elem.css +45 -0
- package/dist/extension/plugins/toggle-header/render-elem.js +130 -0
- package/dist/extension/plugins/video/helpers.js +1 -0
- package/dist/extension/plugins/whiteboard/helper.js +18 -4
- package/dist/extension/render/custom-element.js +20 -0
- package/dist/extension/toolbar/insert-element-toolbar/index.js +46 -10
- package/dist/extension/toolbar/side-toolbar/helpers.js +132 -19
- package/dist/extension/toolbar/side-toolbar/insert-block-menu.js +9 -2
- package/package.json +2 -2
|
@@ -0,0 +1,537 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
9
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
11
|
+
var _slate = require("@seafile/slate");
|
|
12
|
+
var _isHotkey = _interopRequireDefault(require("is-hotkey"));
|
|
13
|
+
var _constants = require("../../constants");
|
|
14
|
+
var _core = require("../../core");
|
|
15
|
+
var _helper = require("./helper");
|
|
16
|
+
var withToggleHeader = function withToggleHeader(editor) {
|
|
17
|
+
var insertBreak = editor.insertBreak,
|
|
18
|
+
normalizeNode = editor.normalizeNode,
|
|
19
|
+
insertSoftBreak = editor.insertSoftBreak,
|
|
20
|
+
deleteBackward = editor.deleteBackward,
|
|
21
|
+
insertFragment = editor.insertFragment,
|
|
22
|
+
onHotKeyDown = editor.onHotKeyDown;
|
|
23
|
+
var newEditor = editor;
|
|
24
|
+
var getToggleBodyChildren = function getToggleBodyChildren(toggleNode) {
|
|
25
|
+
var _toggleNode$children;
|
|
26
|
+
var contentNode = toggleNode === null || toggleNode === void 0 ? void 0 : (_toggleNode$children = toggleNode.children) === null || _toggleNode$children === void 0 ? void 0 : _toggleNode$children[1];
|
|
27
|
+
if ((contentNode === null || contentNode === void 0 ? void 0 : contentNode.type) === _constants.TOGGLE_CONTENT) {
|
|
28
|
+
return contentNode.children || [];
|
|
29
|
+
}
|
|
30
|
+
if (Array.isArray(toggleNode === null || toggleNode === void 0 ? void 0 : toggleNode.collapsed_body)) {
|
|
31
|
+
return toggleNode.collapsed_body;
|
|
32
|
+
}
|
|
33
|
+
return [];
|
|
34
|
+
};
|
|
35
|
+
newEditor.insertBreak = function () {
|
|
36
|
+
var _afterFragment$;
|
|
37
|
+
var selection = newEditor.selection;
|
|
38
|
+
if (!selection || !_slate.Range.isCollapsed(selection)) {
|
|
39
|
+
insertBreak();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
var selectedEntry = _slate.Editor.above(newEditor, {
|
|
43
|
+
at: selection,
|
|
44
|
+
match: function match(n) {
|
|
45
|
+
return n.type === _constants.TOGGLE_HEADER;
|
|
46
|
+
},
|
|
47
|
+
mode: 'lowest'
|
|
48
|
+
});
|
|
49
|
+
var selectedNode = selectedEntry ? selectedEntry[0] : null;
|
|
50
|
+
if (!selectedNode || (selectedNode === null || selectedNode === void 0 ? void 0 : selectedNode.type) !== _constants.TOGGLE_HEADER) {
|
|
51
|
+
insertBreak();
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
var titleEntry = _slate.Editor.above(newEditor, {
|
|
55
|
+
at: selection,
|
|
56
|
+
match: function match(n) {
|
|
57
|
+
return _slate.Element.isElement(n) && _constants.TOGGLE_TITLE_TYPES.includes(n.type);
|
|
58
|
+
},
|
|
59
|
+
mode: 'lowest'
|
|
60
|
+
});
|
|
61
|
+
if (!titleEntry) {
|
|
62
|
+
insertBreak();
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
var _titleEntry = (0, _slicedToArray2["default"])(titleEntry, 2),
|
|
66
|
+
titlePath = _titleEntry[1];
|
|
67
|
+
var toggleEntry = _slate.Editor.above(newEditor, {
|
|
68
|
+
at: titlePath,
|
|
69
|
+
match: function match(n) {
|
|
70
|
+
return n.type === _constants.TOGGLE_HEADER;
|
|
71
|
+
},
|
|
72
|
+
mode: 'lowest'
|
|
73
|
+
});
|
|
74
|
+
var _toggleEntry = (0, _slicedToArray2["default"])(toggleEntry, 2),
|
|
75
|
+
toggleNode = _toggleEntry[0],
|
|
76
|
+
togglePath = _toggleEntry[1];
|
|
77
|
+
var contentPath = [].concat((0, _toConsumableArray2["default"])(togglePath), [1]);
|
|
78
|
+
var bodyChildren = getToggleBodyChildren(toggleNode);
|
|
79
|
+
var cursorPoint = selection.anchor;
|
|
80
|
+
// when toggle header is collapsed
|
|
81
|
+
if (toggleNode.collapsed) {
|
|
82
|
+
var titleStartPoint = _slate.Editor.start(newEditor, titlePath);
|
|
83
|
+
var _titleEndPoint = _slate.Editor.end(newEditor, titlePath);
|
|
84
|
+
var isAtTitleStart = _slate.Point.equals(cursorPoint, titleStartPoint);
|
|
85
|
+
var _isAtTitleEnd = _slate.Editor.isEnd(newEditor, cursorPoint, titlePath);
|
|
86
|
+
_slate.Editor.withoutNormalizing(newEditor, function () {
|
|
87
|
+
var _titleNode, _titleNode$children;
|
|
88
|
+
if (isAtTitleStart) {
|
|
89
|
+
var _newParagraph = (0, _core.generateEmptyElement)(_constants.PARAGRAPH);
|
|
90
|
+
_slate.Transforms.insertNodes(newEditor, _newParagraph, {
|
|
91
|
+
at: togglePath
|
|
92
|
+
});
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
var titleNode = [];
|
|
96
|
+
if (!_isAtTitleEnd) {
|
|
97
|
+
var _afterRange = {
|
|
98
|
+
anchor: cursorPoint,
|
|
99
|
+
focus: _titleEndPoint
|
|
100
|
+
};
|
|
101
|
+
var _afterFragment = _slate.Editor.fragment(newEditor, _afterRange);
|
|
102
|
+
titleNode = (0, _helper.findFirstTitleNode)(_afterFragment);
|
|
103
|
+
_slate.Transforms["delete"](newEditor, {
|
|
104
|
+
at: _afterRange
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
var newParagraph = (0, _core.generateEmptyElement)(_constants.PARAGRAPH);
|
|
108
|
+
newParagraph.children = (_titleNode = titleNode) !== null && _titleNode !== void 0 && (_titleNode$children = _titleNode.children) !== null && _titleNode$children !== void 0 && _titleNode$children.length ? titleNode.children : [(0, _core.generateDefaultText)('')];
|
|
109
|
+
var insertPath = _slate.Path.next(togglePath);
|
|
110
|
+
_slate.Transforms.insertNodes(newEditor, newParagraph, {
|
|
111
|
+
at: insertPath
|
|
112
|
+
});
|
|
113
|
+
_slate.Transforms.select(newEditor, _slate.Editor.start(newEditor, insertPath));
|
|
114
|
+
});
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
var titleEndPoint = _slate.Editor.end(newEditor, titlePath);
|
|
118
|
+
var isAtTitleEnd = _slate.Editor.isEnd(newEditor, cursorPoint, titlePath);
|
|
119
|
+
var afterRange = {
|
|
120
|
+
anchor: cursorPoint,
|
|
121
|
+
focus: titleEndPoint
|
|
122
|
+
};
|
|
123
|
+
var afterFragment = isAtTitleEnd ? [] : _slate.Editor.fragment(newEditor, afterRange);
|
|
124
|
+
var afterChildren = ((_afterFragment$ = afterFragment[0]) === null || _afterFragment$ === void 0 ? void 0 : _afterFragment$.children) || [];
|
|
125
|
+
|
|
126
|
+
// when toggle header is listed all
|
|
127
|
+
_slate.Editor.withoutNormalizing(newEditor, function () {
|
|
128
|
+
var _toggleNode$children3, _toggleNode$children$2;
|
|
129
|
+
// The afterText is the text content after the cursor in the toggle header
|
|
130
|
+
var afterText = '';
|
|
131
|
+
if (!isAtTitleEnd) {
|
|
132
|
+
afterText = _slate.Editor.string(newEditor, {
|
|
133
|
+
anchor: cursorPoint,
|
|
134
|
+
focus: titleEndPoint
|
|
135
|
+
});
|
|
136
|
+
_slate.Transforms["delete"](newEditor, {
|
|
137
|
+
at: afterRange
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Keep collapsed toggle data model consistent before editing body.
|
|
142
|
+
if (toggleNode.collapsed) {
|
|
143
|
+
var _toggleNode$children2, _toggleNode$children$;
|
|
144
|
+
if (!((_toggleNode$children2 = toggleNode.children) !== null && _toggleNode$children2 !== void 0 && _toggleNode$children2[1]) || ((_toggleNode$children$ = toggleNode.children[1]) === null || _toggleNode$children$ === void 0 ? void 0 : _toggleNode$children$.type) !== _constants.TOGGLE_CONTENT) {
|
|
145
|
+
var content = (0, _core.generateEmptyElement)(_constants.TOGGLE_CONTENT);
|
|
146
|
+
content.children = bodyChildren.length > 0 ? bodyChildren : [(0, _core.generateEmptyElement)(_constants.PARAGRAPH)];
|
|
147
|
+
_slate.Transforms.insertNodes(newEditor, content, {
|
|
148
|
+
at: contentPath
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
_slate.Transforms.setNodes(newEditor, {
|
|
152
|
+
collapsed: false,
|
|
153
|
+
collapsed_body: null
|
|
154
|
+
}, {
|
|
155
|
+
at: togglePath
|
|
156
|
+
});
|
|
157
|
+
} else if (!((_toggleNode$children3 = toggleNode.children) !== null && _toggleNode$children3 !== void 0 && _toggleNode$children3[1]) || ((_toggleNode$children$2 = toggleNode.children[1]) === null || _toggleNode$children$2 === void 0 ? void 0 : _toggleNode$children$2.type) !== _constants.TOGGLE_CONTENT) {
|
|
158
|
+
var _content = (0, _core.generateEmptyElement)(_constants.TOGGLE_CONTENT);
|
|
159
|
+
_content.children = [(0, _core.generateEmptyElement)(_constants.PARAGRAPH)];
|
|
160
|
+
_slate.Transforms.insertNodes(newEditor, _content, {
|
|
161
|
+
at: contentPath
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Insert new paragraph node with afterText
|
|
166
|
+
var newParagraph = (0, _core.generateEmptyElement)(_constants.PARAGRAPH);
|
|
167
|
+
if (afterChildren.length > 0) {
|
|
168
|
+
newParagraph.children = [(0, _core.generateDefaultText)(afterText)];
|
|
169
|
+
}
|
|
170
|
+
var firstParagraphPath = [].concat((0, _toConsumableArray2["default"])(contentPath), [0]);
|
|
171
|
+
_slate.Transforms.insertNodes(newEditor, newParagraph, {
|
|
172
|
+
at: firstParagraphPath
|
|
173
|
+
});
|
|
174
|
+
_slate.Transforms.select(newEditor, _slate.Editor.start(newEditor, firstParagraphPath));
|
|
175
|
+
});
|
|
176
|
+
};
|
|
177
|
+
newEditor.insertSoftBreak = function () {
|
|
178
|
+
var selection = newEditor.selection;
|
|
179
|
+
if (!selection || !_slate.Range.isCollapsed(selection)) {
|
|
180
|
+
insertSoftBreak();
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
var _Editor$node = _slate.Editor.node(newEditor, selection, {
|
|
184
|
+
depth: 1
|
|
185
|
+
}),
|
|
186
|
+
_Editor$node2 = (0, _slicedToArray2["default"])(_Editor$node, 1),
|
|
187
|
+
selectedNode = _Editor$node2[0];
|
|
188
|
+
if (selectedNode.type === _constants.TOGGLE_HEADER) {
|
|
189
|
+
newEditor.insertBreak();
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
insertSoftBreak();
|
|
193
|
+
};
|
|
194
|
+
newEditor.deleteBackward = function (unit) {
|
|
195
|
+
var selection = newEditor.selection;
|
|
196
|
+
if (!selection || !_slate.Range.isCollapsed(selection)) {
|
|
197
|
+
deleteBackward(unit);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
var currentBlockEntry = _slate.Editor.above(newEditor, {
|
|
201
|
+
at: selection,
|
|
202
|
+
match: function match(n) {
|
|
203
|
+
return _slate.Element.isElement(n) && _slate.Editor.isBlock(newEditor, n);
|
|
204
|
+
},
|
|
205
|
+
mode: 'lowest'
|
|
206
|
+
});
|
|
207
|
+
if (!currentBlockEntry) {
|
|
208
|
+
deleteBackward(unit);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
var _currentBlockEntry = (0, _slicedToArray2["default"])(currentBlockEntry, 2),
|
|
212
|
+
currentBlockNode = _currentBlockEntry[0],
|
|
213
|
+
currentBlockPath = _currentBlockEntry[1];
|
|
214
|
+
var toggleContentEntry = _slate.Editor.above(newEditor, {
|
|
215
|
+
at: currentBlockPath,
|
|
216
|
+
match: function match(n) {
|
|
217
|
+
return _slate.Element.isElement(n) && n.type === _constants.TOGGLE_CONTENT;
|
|
218
|
+
},
|
|
219
|
+
mode: 'lowest'
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
// When cursor is in start point of the last toggle content
|
|
223
|
+
if (toggleContentEntry) {
|
|
224
|
+
var _toggleContentEntry = (0, _slicedToArray2["default"])(toggleContentEntry, 2),
|
|
225
|
+
toggleContentNode = _toggleContentEntry[0],
|
|
226
|
+
toggleContentPath = _toggleContentEntry[1];
|
|
227
|
+
var childCount = toggleContentNode.children.length;
|
|
228
|
+
var currentIndex = currentBlockPath[currentBlockPath.length - 1];
|
|
229
|
+
var isLastChild = currentIndex === childCount - 1;
|
|
230
|
+
var hasOtherChildren = childCount > 1;
|
|
231
|
+
var isAtLastChildStart = _slate.Editor.isStart(newEditor, selection.anchor, currentBlockPath);
|
|
232
|
+
if (isLastChild && isAtLastChildStart && hasOtherChildren && !_constants.TOGGLE_TITLE_TYPES.includes(currentBlockNode.type)) {
|
|
233
|
+
var parentToggleEntry = _slate.Editor.parent(newEditor, toggleContentPath);
|
|
234
|
+
var _parentToggleEntry = (0, _slicedToArray2["default"])(parentToggleEntry, 2),
|
|
235
|
+
parentToggleNode = _parentToggleEntry[0],
|
|
236
|
+
parentTogglePath = _parentToggleEntry[1];
|
|
237
|
+
if (parentToggleNode && parentToggleNode.type === _constants.TOGGLE_HEADER) {
|
|
238
|
+
var liftedNode = currentBlockNode;
|
|
239
|
+
var insertPath = _slate.Path.next(parentTogglePath);
|
|
240
|
+
_slate.Editor.withoutNormalizing(newEditor, function () {
|
|
241
|
+
_slate.Transforms.removeNodes(newEditor, {
|
|
242
|
+
at: currentBlockPath
|
|
243
|
+
});
|
|
244
|
+
(0, _helper.ensureToggleContentNotEmpty)(newEditor, toggleContentPath);
|
|
245
|
+
_slate.Transforms.insertNodes(newEditor, liftedNode, {
|
|
246
|
+
at: insertPath
|
|
247
|
+
});
|
|
248
|
+
_slate.Transforms.select(newEditor, _slate.Editor.start(newEditor, insertPath));
|
|
249
|
+
});
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Other cases
|
|
256
|
+
var titleEntry = _slate.Editor.above(newEditor, {
|
|
257
|
+
at: selection,
|
|
258
|
+
match: function match(n) {
|
|
259
|
+
return _slate.Element.isElement(n) && _constants.TOGGLE_TITLE_TYPES.includes(n.type);
|
|
260
|
+
},
|
|
261
|
+
mode: 'lowest'
|
|
262
|
+
});
|
|
263
|
+
if (!titleEntry) {
|
|
264
|
+
deleteBackward(unit);
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
var _titleEntry2 = (0, _slicedToArray2["default"])(titleEntry, 2),
|
|
268
|
+
titlePath = _titleEntry2[1];
|
|
269
|
+
if (titleEntry && titlePath) {
|
|
270
|
+
var _Editor$node3 = _slate.Editor.node(newEditor, titlePath),
|
|
271
|
+
_Editor$node4 = (0, _slicedToArray2["default"])(_Editor$node3, 1),
|
|
272
|
+
titleNode = _Editor$node4[0];
|
|
273
|
+
var isAtTitleStart = _slate.Editor.isStart(newEditor, selection.anchor, titlePath);
|
|
274
|
+
if (!isAtTitleStart) {
|
|
275
|
+
deleteBackward(unit);
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
var toggleEntry = _slate.Editor.parent(newEditor, titlePath);
|
|
279
|
+
var _toggleEntry2 = (0, _slicedToArray2["default"])(toggleEntry, 2),
|
|
280
|
+
toggleNode = _toggleEntry2[0],
|
|
281
|
+
togglePath = _toggleEntry2[1];
|
|
282
|
+
var contentChildren = getToggleBodyChildren(toggleNode);
|
|
283
|
+
var normalHeaderTypeMap = {
|
|
284
|
+
toggle_header1: _constants.HEADER1,
|
|
285
|
+
toggle_header2: _constants.HEADER2,
|
|
286
|
+
toggle_header3: _constants.HEADER3
|
|
287
|
+
};
|
|
288
|
+
var normalHeaderType = normalHeaderTypeMap[titleNode.type];
|
|
289
|
+
var normalHeaderNode = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, titleNode), {}, {
|
|
290
|
+
type: normalHeaderType
|
|
291
|
+
});
|
|
292
|
+
var nodesToInsert = [normalHeaderNode];
|
|
293
|
+
if (contentChildren.length > 0) {
|
|
294
|
+
nodesToInsert.push.apply(nodesToInsert, (0, _toConsumableArray2["default"])(contentChildren));
|
|
295
|
+
}
|
|
296
|
+
_slate.Editor.withoutNormalizing(newEditor, function () {
|
|
297
|
+
_slate.Transforms.removeNodes(newEditor, {
|
|
298
|
+
at: togglePath
|
|
299
|
+
});
|
|
300
|
+
_slate.Transforms.insertNodes(newEditor, nodesToInsert, {
|
|
301
|
+
at: togglePath
|
|
302
|
+
});
|
|
303
|
+
_slate.Transforms.select(newEditor, _slate.Editor.start(newEditor, togglePath));
|
|
304
|
+
});
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
return deleteBackward(unit);
|
|
308
|
+
};
|
|
309
|
+
newEditor.insertFragment = function (data) {
|
|
310
|
+
var _nextFragment$;
|
|
311
|
+
var selection = newEditor.selection;
|
|
312
|
+
if (!selection) return insertFragment(data);
|
|
313
|
+
var nextFragment = [];
|
|
314
|
+
data.forEach(function (node) {
|
|
315
|
+
if ((node === null || node === void 0 ? void 0 : node.type) === _constants.TOGGLE_HEADER) {
|
|
316
|
+
if ((0, _helper.isOnlyHasToggleContent)(node)) {
|
|
317
|
+
var childrenNodes = [];
|
|
318
|
+
node.children.forEach(function (child) {
|
|
319
|
+
if (child !== null && child !== void 0 && child.children) {
|
|
320
|
+
childrenNodes = childrenNodes.concat(child.children);
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
nextFragment.push.apply(nextFragment, (0, _toConsumableArray2["default"])(childrenNodes));
|
|
324
|
+
} else {
|
|
325
|
+
nextFragment.push(node);
|
|
326
|
+
}
|
|
327
|
+
} else {
|
|
328
|
+
nextFragment.push(node);
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
if (((_nextFragment$ = nextFragment[0]) === null || _nextFragment$ === void 0 ? void 0 : _nextFragment$.type) === _constants.TOGGLE_HEADER) {
|
|
332
|
+
var currentBlockEntry = _slate.Editor.above(newEditor, {
|
|
333
|
+
at: selection,
|
|
334
|
+
match: function match(n) {
|
|
335
|
+
return _slate.Element.isElement(n) && _slate.Editor.isBlock(newEditor, n);
|
|
336
|
+
},
|
|
337
|
+
mode: 'lowest'
|
|
338
|
+
});
|
|
339
|
+
if (!currentBlockEntry) {
|
|
340
|
+
insertFragment(nextFragment);
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
var _currentBlockEntry2 = (0, _slicedToArray2["default"])(currentBlockEntry, 1),
|
|
344
|
+
currentBlockNode = _currentBlockEntry2[0];
|
|
345
|
+
var isBlockEmpty = _slate.Editor.isEmpty(newEditor, currentBlockNode);
|
|
346
|
+
_slate.Editor.withoutNormalizing(newEditor, function () {
|
|
347
|
+
if (!isBlockEmpty) {
|
|
348
|
+
_slate.Transforms.splitNodes(newEditor, {
|
|
349
|
+
at: selection,
|
|
350
|
+
match: function match(n) {
|
|
351
|
+
return _slate.Element.isElement(n) && _slate.Editor.isBlock(newEditor, n);
|
|
352
|
+
},
|
|
353
|
+
always: true
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
insertFragment(nextFragment);
|
|
357
|
+
});
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
insertFragment(nextFragment);
|
|
361
|
+
};
|
|
362
|
+
newEditor.onHotKeyDown = function (event) {
|
|
363
|
+
var selection = newEditor.selection;
|
|
364
|
+
if (!selection) return false;
|
|
365
|
+
var _Editor$node5 = _slate.Editor.node(newEditor, selection, {
|
|
366
|
+
depth: 1
|
|
367
|
+
}),
|
|
368
|
+
_Editor$node6 = (0, _slicedToArray2["default"])(_Editor$node5, 1),
|
|
369
|
+
selectedNode = _Editor$node6[0];
|
|
370
|
+
if (selectedNode.type === _constants.TOGGLE_HEADER && (0, _isHotkey["default"])('tab', event)) {
|
|
371
|
+
event.preventDefault();
|
|
372
|
+
return true;
|
|
373
|
+
}
|
|
374
|
+
if (selectedNode.type === _constants.TOGGLE_HEADER && (0, _isHotkey["default"])('shift+tab', event)) {
|
|
375
|
+
event.preventDefault();
|
|
376
|
+
var _getCurrentNode = (0, _core.getCurrentNode)(editor),
|
|
377
|
+
_getCurrentNode2 = (0, _slicedToArray2["default"])(_getCurrentNode, 2),
|
|
378
|
+
currentPath = _getCurrentNode2[1];
|
|
379
|
+
var currentToggleContentEntry = (0, _core.getAboveNode)(editor, {
|
|
380
|
+
match: {
|
|
381
|
+
type: _constants.TOGGLE_CONTENT
|
|
382
|
+
}
|
|
383
|
+
});
|
|
384
|
+
// No operation in the first toggle-header1-3
|
|
385
|
+
if (!currentToggleContentEntry) {
|
|
386
|
+
return true;
|
|
387
|
+
}
|
|
388
|
+
var _currentToggleContent = (0, _slicedToArray2["default"])(currentToggleContentEntry, 2),
|
|
389
|
+
toggleContentNode = _currentToggleContent[0],
|
|
390
|
+
toggleContentPath = _currentToggleContent[1];
|
|
391
|
+
var _Editor$parent = _slate.Editor.parent(editor, toggleContentPath),
|
|
392
|
+
_Editor$parent2 = (0, _slicedToArray2["default"])(_Editor$parent, 2),
|
|
393
|
+
parentNode = _Editor$parent2[0],
|
|
394
|
+
parentPath = _Editor$parent2[1];
|
|
395
|
+
|
|
396
|
+
// Current direct child index in toggle content's children
|
|
397
|
+
var currentIndexInToggleContent = currentPath[toggleContentPath.length];
|
|
398
|
+
var movingChildren = toggleContentNode.children.slice(currentIndexInToggleContent);
|
|
399
|
+
var targetCursorPath = [];
|
|
400
|
+
var targetOffset = editor.selection.anchor.offset;
|
|
401
|
+
_slate.Editor.withoutNormalizing(editor, function () {
|
|
402
|
+
// Remove toggle content children node
|
|
403
|
+
for (var i = toggleContentNode.children.length - 1; i >= currentIndexInToggleContent; i--) {
|
|
404
|
+
_slate.Transforms.removeNodes(editor, {
|
|
405
|
+
at: toggleContentPath.concat(i)
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// In the first toggle content
|
|
410
|
+
if (parentNode.type === _constants.TOGGLE_HEADER && parentPath.length === 1) {
|
|
411
|
+
var insertPath = _slate.Path.next(parentPath);
|
|
412
|
+
targetCursorPath = insertPath;
|
|
413
|
+
movingChildren.forEach(function (child) {
|
|
414
|
+
_slate.Transforms.insertNodes(editor, child, {
|
|
415
|
+
at: insertPath
|
|
416
|
+
});
|
|
417
|
+
insertPath = _slate.Path.next(insertPath);
|
|
418
|
+
});
|
|
419
|
+
(0, _helper.ensureToggleContentNotEmpty)(editor, toggleContentPath);
|
|
420
|
+
var targetPoint = (0, _helper.getFirstTextPoint)(editor, targetCursorPath, targetOffset);
|
|
421
|
+
_slate.Transforms.select(newEditor, targetPoint);
|
|
422
|
+
return true;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
// In the multi layer toggle content
|
|
426
|
+
if (parentNode.type === _constants.TOGGLE_HEADER && parentPath.length > 1) {
|
|
427
|
+
var parentIndexInOuterToggleContent = parentPath[parentPath.length - 1];
|
|
428
|
+
var outerToggleContentPath = _slate.Path.parent(parentPath);
|
|
429
|
+
var _insertPath = outerToggleContentPath.concat(parentIndexInOuterToggleContent + 1);
|
|
430
|
+
targetCursorPath = _insertPath;
|
|
431
|
+
movingChildren.forEach(function (child) {
|
|
432
|
+
_slate.Transforms.insertNodes(editor, child, {
|
|
433
|
+
at: _insertPath
|
|
434
|
+
});
|
|
435
|
+
_insertPath = _slate.Path.next(_insertPath);
|
|
436
|
+
});
|
|
437
|
+
(0, _helper.ensureToggleContentNotEmpty)(editor, toggleContentPath);
|
|
438
|
+
var _targetPoint = (0, _helper.getFirstTextPoint)(editor, targetCursorPath, targetOffset);
|
|
439
|
+
_slate.Transforms.select(newEditor, _targetPoint);
|
|
440
|
+
}
|
|
441
|
+
});
|
|
442
|
+
return true;
|
|
443
|
+
}
|
|
444
|
+
return onHotKeyDown && onHotKeyDown(event);
|
|
445
|
+
};
|
|
446
|
+
newEditor.normalizeNode = function (_ref) {
|
|
447
|
+
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
448
|
+
node = _ref2[0],
|
|
449
|
+
path = _ref2[1];
|
|
450
|
+
if (node.type === _constants.TOGGLE_HEADER) {
|
|
451
|
+
var _node$children, _node$children2;
|
|
452
|
+
// code-block is the last node in the editor and needs to be followed by a p node
|
|
453
|
+
var isLast = (0, _core.isLastNode)(newEditor, node);
|
|
454
|
+
if (isLast) {
|
|
455
|
+
var paragraph = (0, _core.generateEmptyElement)(_constants.PARAGRAPH);
|
|
456
|
+
_slate.Transforms.insertNodes(newEditor, paragraph, {
|
|
457
|
+
at: [path[0] + 1]
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
var toggleHeaderType = _constants.TOGGLE_TITLE_TYPES.includes(node.children[0].type) && node.children[0].type;
|
|
461
|
+
var level = Math.min(6, Math.max(1, Number((0, _helper.getLevelFromType)(toggleHeaderType) || 1)));
|
|
462
|
+
|
|
463
|
+
// For toggle-header1-3 element
|
|
464
|
+
var titleType = (0, _helper.getTitleTypeByLevel)(level);
|
|
465
|
+
var titleNode = (_node$children = node.children) === null || _node$children === void 0 ? void 0 : _node$children[0];
|
|
466
|
+
if (!titleNode || !_constants.TOGGLE_TITLE_TYPES.includes(titleNode.type)) {
|
|
467
|
+
var title = (0, _core.generateEmptyElement)(titleType);
|
|
468
|
+
_slate.Transforms.insertNodes(newEditor, title, {
|
|
469
|
+
at: [].concat((0, _toConsumableArray2["default"])(path), [0])
|
|
470
|
+
});
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
if (titleNode.type !== titleType) {
|
|
474
|
+
_slate.Transforms.setNodes(newEditor, {
|
|
475
|
+
type: titleType
|
|
476
|
+
}, {
|
|
477
|
+
at: [].concat((0, _toConsumableArray2["default"])(path), [0])
|
|
478
|
+
});
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
// For toggle-content element
|
|
482
|
+
var contentNode = (_node$children2 = node.children) === null || _node$children2 === void 0 ? void 0 : _node$children2[1];
|
|
483
|
+
if (node.collapsed) {
|
|
484
|
+
if ((contentNode === null || contentNode === void 0 ? void 0 : contentNode.type) === _constants.TOGGLE_CONTENT) {
|
|
485
|
+
if (!Array.isArray(node.collapsed_body)) {
|
|
486
|
+
_slate.Transforms.setNodes(newEditor, {
|
|
487
|
+
collapsed_body: contentNode.children || []
|
|
488
|
+
}, {
|
|
489
|
+
at: path
|
|
490
|
+
});
|
|
491
|
+
return;
|
|
492
|
+
}
|
|
493
|
+
_slate.Transforms.removeNodes(newEditor, {
|
|
494
|
+
at: [].concat((0, _toConsumableArray2["default"])(path), [1])
|
|
495
|
+
});
|
|
496
|
+
return;
|
|
497
|
+
}
|
|
498
|
+
if (!Array.isArray(node.collapsed_body)) {
|
|
499
|
+
_slate.Transforms.setNodes(newEditor, {
|
|
500
|
+
collapsed_body: [(0, _core.generateEmptyElement)(_constants.PARAGRAPH)]
|
|
501
|
+
}, {
|
|
502
|
+
at: path
|
|
503
|
+
});
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
return;
|
|
507
|
+
}
|
|
508
|
+
if (!contentNode || contentNode.type !== _constants.TOGGLE_CONTENT) {
|
|
509
|
+
var collapsedBody = Array.isArray(node.collapsed_body) ? node.collapsed_body : [];
|
|
510
|
+
var content = (0, _core.generateEmptyElement)(_constants.TOGGLE_CONTENT);
|
|
511
|
+
content.children = collapsedBody.length > 0 ? collapsedBody : [(0, _core.generateEmptyElement)(_constants.PARAGRAPH)];
|
|
512
|
+
_slate.Transforms.insertNodes(newEditor, content, {
|
|
513
|
+
at: [].concat((0, _toConsumableArray2["default"])(path), [1])
|
|
514
|
+
});
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
517
|
+
if (node.collapsed_body) {
|
|
518
|
+
_slate.Transforms.setNodes(newEditor, {
|
|
519
|
+
collapsed_body: null
|
|
520
|
+
}, {
|
|
521
|
+
at: path
|
|
522
|
+
});
|
|
523
|
+
return;
|
|
524
|
+
}
|
|
525
|
+
if (!contentNode.children || contentNode.children.length === 0) {
|
|
526
|
+
var _paragraph = (0, _core.generateEmptyElement)(_constants.PARAGRAPH);
|
|
527
|
+
_slate.Transforms.insertNodes(newEditor, _paragraph, {
|
|
528
|
+
at: [].concat((0, _toConsumableArray2["default"])(path), [1, 0])
|
|
529
|
+
});
|
|
530
|
+
return;
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
return normalizeNode([node, path]);
|
|
534
|
+
};
|
|
535
|
+
return newEditor;
|
|
536
|
+
};
|
|
537
|
+
var _default = exports["default"] = withToggleHeader;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
.sdoc-toggle-header-container {
|
|
2
|
+
padding: 5px 0;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.sdoc-toggle-header-row {
|
|
6
|
+
display: flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
padding-bottom: 5px;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.sdoc-toggle-header-row .sdoc-toggle-header-prefix {
|
|
12
|
+
display: inline-block;
|
|
13
|
+
height: 20px;
|
|
14
|
+
line-height: 20px;
|
|
15
|
+
text-align: center;
|
|
16
|
+
margin-right: 5px;
|
|
17
|
+
cursor: pointer;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.sdoc-toggle-header-prefix:has(.sdoc-big-caret-up) {
|
|
21
|
+
transform: rotate(90deg);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.sdoc-toggle-header-title-wrap {
|
|
25
|
+
flex: 1;
|
|
26
|
+
min-width: 0;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.sdoc-toggle-header-content-wrap {
|
|
30
|
+
margin-left: 20px;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.sdoc-toggle-header-content-wrap .sdoc-toggle-header-title,
|
|
34
|
+
.sdoc-toggle-header-title-wrap .sdoc-toggle-header-title {
|
|
35
|
+
margin: 0;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.sdoc-toggle-header-content .sdoc-header-1,
|
|
39
|
+
.sdoc-toggle-header-content .sdoc-header-2,
|
|
40
|
+
.sdoc-toggle-header-content .sdoc-header-3,
|
|
41
|
+
.sdoc-toggle-header-content .sdoc-header-4,
|
|
42
|
+
.sdoc-toggle-header-content .sdoc-header-5,
|
|
43
|
+
.sdoc-toggle-header-content .sdoc-header-6 {
|
|
44
|
+
margin: 5px 0 !important;
|
|
45
|
+
}
|