@atlaskit/editor-plugin-block-menu 1.0.12 → 2.0.0
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/CHANGELOG.md +14 -0
- package/dist/cjs/editor-commands/transforms/block-transforms.js +1 -1
- package/dist/cjs/editor-commands/transforms/inline-node-transforms.js +9 -7
- package/dist/cjs/editor-commands/transforms/layout/utils.js +289 -0
- package/dist/cjs/editor-commands/transforms/layout-transforms.js +40 -2
- package/dist/cjs/editor-commands/transforms/list/transformBetweenListTypes.js +92 -50
- package/dist/cjs/editor-commands/transforms/transformNodeToTargetType.js +3 -0
- package/dist/cjs/editor-commands/transforms/utils.js +7 -1
- package/dist/es2019/editor-commands/transforms/block-transforms.js +2 -2
- package/dist/es2019/editor-commands/transforms/inline-node-transforms.js +8 -6
- package/dist/es2019/editor-commands/transforms/layout/utils.js +272 -0
- package/dist/es2019/editor-commands/transforms/layout-transforms.js +40 -1
- package/dist/es2019/editor-commands/transforms/list/transformBetweenListTypes.js +94 -51
- package/dist/es2019/editor-commands/transforms/transformNodeToTargetType.js +5 -2
- package/dist/es2019/editor-commands/transforms/utils.js +6 -0
- package/dist/esm/editor-commands/transforms/block-transforms.js +2 -2
- package/dist/esm/editor-commands/transforms/inline-node-transforms.js +8 -6
- package/dist/esm/editor-commands/transforms/layout/utils.js +282 -0
- package/dist/esm/editor-commands/transforms/layout-transforms.js +38 -1
- package/dist/esm/editor-commands/transforms/list/transformBetweenListTypes.js +92 -49
- package/dist/esm/editor-commands/transforms/transformNodeToTargetType.js +5 -2
- package/dist/esm/editor-commands/transforms/utils.js +6 -0
- package/dist/types/editor-commands/transforms/inline-node-transforms.d.ts +3 -3
- package/dist/types/editor-commands/transforms/layout/utils.d.ts +5 -0
- package/dist/types/editor-commands/transforms/layout-transforms.d.ts +1 -0
- package/dist/types/editor-commands/transforms/list/transformBetweenListTypes.d.ts +13 -0
- package/dist/types/editor-commands/transforms/utils.d.ts +2 -0
- package/dist/types-ts4.5/editor-commands/transforms/inline-node-transforms.d.ts +3 -3
- package/dist/types-ts4.5/editor-commands/transforms/layout/utils.d.ts +5 -0
- package/dist/types-ts4.5/editor-commands/transforms/layout-transforms.d.ts +1 -0
- package/dist/types-ts4.5/editor-commands/transforms/list/transformBetweenListTypes.d.ts +13 -0
- package/dist/types-ts4.5/editor-commands/transforms/utils.d.ts +2 -0
- package/package.json +6 -6
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
+
import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
3
|
+
import { findChildrenByType } from '@atlaskit/editor-prosemirror/utils';
|
|
4
|
+
import { getInlineNodeTextContent } from '../inline-node-transforms';
|
|
5
|
+
import { transformListRecursively } from '../list/transformBetweenListTypes';
|
|
6
|
+
import { getContentSupportChecker, getSupportedListTypesSet, isBlockNode, isBlockNodeForExtraction, isBlockNodeType, isBulletOrOrderedList, isContainerNode, isContainerNodeType, isHeadingOrParagraphNode, isListNode, isListNodeType, isTaskList } from '../utils';
|
|
7
|
+
export var unwrapLayoutNodesToTextNodes = function unwrapLayoutNodesToTextNodes(context, finalTargetNodeType) {
|
|
8
|
+
var tr = context.tr,
|
|
9
|
+
sourceNode = context.sourceNode,
|
|
10
|
+
targetNodeType = context.targetNodeType,
|
|
11
|
+
targetAttrs = context.targetAttrs;
|
|
12
|
+
var schema = tr.doc.type.schema || {};
|
|
13
|
+
var isValid = getContentSupportChecker(finalTargetNodeType);
|
|
14
|
+
var createTextNode = function createTextNode(node) {
|
|
15
|
+
var isTextNode = node.type.name === 'text';
|
|
16
|
+
if (isValid(node) && !isTextNode) {
|
|
17
|
+
return node;
|
|
18
|
+
}
|
|
19
|
+
return targetNodeType.createChecked(targetAttrs, isTextNode ? node : node.content, node.marks);
|
|
20
|
+
};
|
|
21
|
+
if (isBlockNode(sourceNode)) {
|
|
22
|
+
// code block acts like a container, we need to unwrap it
|
|
23
|
+
if (sourceNode.type === schema.nodes.codeBlock) {
|
|
24
|
+
var textNodes = sourceNode.textContent.split('\n').map(function (line) {
|
|
25
|
+
return targetNodeType.createChecked(undefined, line ? schema.text(line) : null);
|
|
26
|
+
});
|
|
27
|
+
return textNodes;
|
|
28
|
+
}
|
|
29
|
+
return [createTextNode(sourceNode)];
|
|
30
|
+
}
|
|
31
|
+
if (isContainerNode(sourceNode)) {
|
|
32
|
+
var _sourceNode$attrs;
|
|
33
|
+
var containerNodes = [];
|
|
34
|
+
if (sourceNode.type.name === 'expand' && (_sourceNode$attrs = sourceNode.attrs) !== null && _sourceNode$attrs !== void 0 && _sourceNode$attrs.title) {
|
|
35
|
+
containerNodes.push(createTextNode(schema.text(sourceNode.attrs.title)));
|
|
36
|
+
}
|
|
37
|
+
sourceNode.content.forEach(function (childNode) {
|
|
38
|
+
if (isHeadingOrParagraphNode(childNode)) {
|
|
39
|
+
containerNodes.push(createTextNode(childNode));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
containerNodes.push(childNode);
|
|
43
|
+
});
|
|
44
|
+
return containerNodes;
|
|
45
|
+
}
|
|
46
|
+
if (isListNode(sourceNode)) {
|
|
47
|
+
if (isBlockNodeType(finalTargetNodeType)) {
|
|
48
|
+
if (sourceNode.type.name === 'taskList') {
|
|
49
|
+
var taskItemsResult = findChildrenByType(sourceNode, schema.nodes.taskItem);
|
|
50
|
+
var taskItems = taskItemsResult.map(function (item) {
|
|
51
|
+
return item.node;
|
|
52
|
+
});
|
|
53
|
+
var taskItemFragments = taskItems.map(function (taskItem) {
|
|
54
|
+
return taskItem.content;
|
|
55
|
+
});
|
|
56
|
+
return taskItemFragments.map(function (fragment) {
|
|
57
|
+
return targetNodeType.createChecked(targetAttrs, fragment.content);
|
|
58
|
+
});
|
|
59
|
+
} else {
|
|
60
|
+
var paragraphs = findChildrenByType(sourceNode, schema.nodes.paragraph);
|
|
61
|
+
var paragraphNodes = paragraphs.map(function (paragraph) {
|
|
62
|
+
return paragraph.node;
|
|
63
|
+
});
|
|
64
|
+
if (targetNodeType === schema.nodes.heading) {
|
|
65
|
+
return paragraphNodes.map(function (paragraphNode) {
|
|
66
|
+
return targetNodeType.createChecked(targetAttrs, paragraphNode.content);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return paragraphNodes;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return [sourceNode];
|
|
73
|
+
}
|
|
74
|
+
return [sourceNode];
|
|
75
|
+
};
|
|
76
|
+
var transformToBlockNode = function transformToBlockNode(nodes, targetNodeType, schema) {
|
|
77
|
+
if (targetNodeType === schema.nodes.codeBlock) {
|
|
78
|
+
var newNodes = [];
|
|
79
|
+
nodes.forEach(function (node) {
|
|
80
|
+
if (node.isTextblock) {
|
|
81
|
+
var inlineTextContent = node.type === schema.nodes.codeBlock ? node.textContent : getInlineNodeTextContent(Fragment.from(node));
|
|
82
|
+
|
|
83
|
+
// For first node, add directly
|
|
84
|
+
if (newNodes.length === 0) {
|
|
85
|
+
newNodes.push({
|
|
86
|
+
canBeTransformed: true,
|
|
87
|
+
content: [inlineTextContent]
|
|
88
|
+
});
|
|
89
|
+
} else {
|
|
90
|
+
// Check if last node can also be transformed, if yes then append content
|
|
91
|
+
var lastItem = newNodes[newNodes.length - 1];
|
|
92
|
+
if (lastItem.canBeTransformed) {
|
|
93
|
+
newNodes[newNodes.length - 1] = {
|
|
94
|
+
content: [].concat(_toConsumableArray(lastItem.content), [inlineTextContent]),
|
|
95
|
+
canBeTransformed: true
|
|
96
|
+
};
|
|
97
|
+
} else {
|
|
98
|
+
newNodes.push({
|
|
99
|
+
content: [inlineTextContent],
|
|
100
|
+
canBeTransformed: true
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
} else {
|
|
105
|
+
// If not text block, then cannot be transformed
|
|
106
|
+
newNodes.push({
|
|
107
|
+
canBeTransformed: false,
|
|
108
|
+
content: node
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
return newNodes.map(function (_ref) {
|
|
113
|
+
var canBeTransformed = _ref.canBeTransformed,
|
|
114
|
+
content = _ref.content;
|
|
115
|
+
if (canBeTransformed) {
|
|
116
|
+
var text = content.join('\n');
|
|
117
|
+
if (text === '') {
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
return targetNodeType.createChecked(null, schema.text(text));
|
|
121
|
+
} else {
|
|
122
|
+
return content;
|
|
123
|
+
}
|
|
124
|
+
}).filter(Boolean);
|
|
125
|
+
}
|
|
126
|
+
return nodes;
|
|
127
|
+
};
|
|
128
|
+
var transformToContainerNode = function transformToContainerNode(nodes, targetNodeType) {
|
|
129
|
+
var newNodes = [];
|
|
130
|
+
var isNodeValid = getContentSupportChecker(targetNodeType);
|
|
131
|
+
nodes.forEach(function (node) {
|
|
132
|
+
// If the node is not supported then we append as is
|
|
133
|
+
if (isBlockNodeForExtraction(node)) {
|
|
134
|
+
newNodes.push({
|
|
135
|
+
node: node,
|
|
136
|
+
canBeTransformed: false
|
|
137
|
+
});
|
|
138
|
+
} else {
|
|
139
|
+
// Remove alignment marks as container nodes don't support them
|
|
140
|
+
var nodeWithValidAttrs = node.mark(node.marks.filter(function (mark) {
|
|
141
|
+
return mark.type.name !== 'alignment';
|
|
142
|
+
}));
|
|
143
|
+
var isSameNodeType = node.type === targetNodeType;
|
|
144
|
+
|
|
145
|
+
// If the node is not valid and not the same type, we cannot transform it
|
|
146
|
+
if (!isNodeValid(nodeWithValidAttrs) && !isSameNodeType) {
|
|
147
|
+
newNodes.push({
|
|
148
|
+
node: node,
|
|
149
|
+
canBeTransformed: false
|
|
150
|
+
});
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
var _nodes = isSameNodeType ? node.content.content : [nodeWithValidAttrs];
|
|
154
|
+
if (newNodes.length === 0) {
|
|
155
|
+
newNodes.push({
|
|
156
|
+
node: _nodes,
|
|
157
|
+
canBeTransformed: true
|
|
158
|
+
});
|
|
159
|
+
} else {
|
|
160
|
+
var lastItem = newNodes[newNodes.length - 1];
|
|
161
|
+
if (lastItem.canBeTransformed) {
|
|
162
|
+
newNodes[newNodes.length - 1] = {
|
|
163
|
+
node: [].concat(_toConsumableArray(lastItem.node), _toConsumableArray(_nodes)),
|
|
164
|
+
canBeTransformed: true
|
|
165
|
+
};
|
|
166
|
+
} else {
|
|
167
|
+
newNodes.push({
|
|
168
|
+
node: _nodes,
|
|
169
|
+
canBeTransformed: true
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
return newNodes.map(function (_ref2) {
|
|
176
|
+
var node = _ref2.node,
|
|
177
|
+
canBeTransformed = _ref2.canBeTransformed;
|
|
178
|
+
if (canBeTransformed) {
|
|
179
|
+
return targetNodeType.createChecked(null, Fragment.fromArray(node));
|
|
180
|
+
} else {
|
|
181
|
+
return node;
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
};
|
|
185
|
+
export var transformToListNode = function transformToListNode(nodes, targetNodeType, schema) {
|
|
186
|
+
var isTargetTask = isTaskList(targetNodeType);
|
|
187
|
+
var listItems = [];
|
|
188
|
+
var listItemType = isTargetTask ? schema.nodes.taskItem : schema.nodes.listItem;
|
|
189
|
+
var isValid = getContentSupportChecker(listItemType);
|
|
190
|
+
nodes.forEach(function (node) {
|
|
191
|
+
// Append unsupported nodes as is
|
|
192
|
+
if (isBlockNodeForExtraction(node)) {
|
|
193
|
+
listItems.push({
|
|
194
|
+
canBeTransformed: false,
|
|
195
|
+
node: node
|
|
196
|
+
});
|
|
197
|
+
} else {
|
|
198
|
+
var newListItems;
|
|
199
|
+
|
|
200
|
+
// If the node is a list, we may need to transform it
|
|
201
|
+
if (isListNode(node)) {
|
|
202
|
+
var isSourceBulletOrOrdered = isBulletOrOrderedList(node.type);
|
|
203
|
+
var _isTargetTask = isTaskList(targetNodeType);
|
|
204
|
+
var isSourceTask = isTaskList(node.type);
|
|
205
|
+
var isTargetBulletOrOrdered = isBulletOrOrderedList(targetNodeType);
|
|
206
|
+
var supportedListTypes = getSupportedListTypesSet(schema.nodes);
|
|
207
|
+
if (node.type === targetNodeType) {
|
|
208
|
+
// For the same list type, we can keep the structure
|
|
209
|
+
newListItems = node.content.content;
|
|
210
|
+
} else {
|
|
211
|
+
var newList = transformListRecursively({
|
|
212
|
+
isSourceBulletOrOrdered: isSourceBulletOrOrdered,
|
|
213
|
+
isSourceTask: isSourceTask,
|
|
214
|
+
isTargetBulletOrOrdered: isTargetBulletOrOrdered,
|
|
215
|
+
isTargetTask: _isTargetTask,
|
|
216
|
+
listNode: node,
|
|
217
|
+
schema: schema,
|
|
218
|
+
supportedListTypes: supportedListTypes,
|
|
219
|
+
targetNodeType: targetNodeType
|
|
220
|
+
});
|
|
221
|
+
newListItems = _toConsumableArray(newList.content.content);
|
|
222
|
+
}
|
|
223
|
+
} else if (isHeadingOrParagraphNode(node) || isValid(node)) {
|
|
224
|
+
if (isTargetTask) {
|
|
225
|
+
var inlineContent = _toConsumableArray(node.content.content);
|
|
226
|
+
if (inlineContent.length > 0) {
|
|
227
|
+
newListItems = [listItemType.create(null, inlineContent)];
|
|
228
|
+
}
|
|
229
|
+
} else {
|
|
230
|
+
newListItems = [listItemType.create(null, node)];
|
|
231
|
+
}
|
|
232
|
+
} else if (!isValid(node)) {
|
|
233
|
+
listItems.push({
|
|
234
|
+
canBeTransformed: false,
|
|
235
|
+
node: node
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
if (newListItems) {
|
|
239
|
+
if (listItems.length === 0) {
|
|
240
|
+
listItems.push({
|
|
241
|
+
canBeTransformed: true,
|
|
242
|
+
node: newListItems
|
|
243
|
+
});
|
|
244
|
+
} else {
|
|
245
|
+
var lastItem = listItems[listItems.length - 1];
|
|
246
|
+
if (lastItem.canBeTransformed) {
|
|
247
|
+
listItems[listItems.length - 1] = {
|
|
248
|
+
node: [].concat(_toConsumableArray(lastItem.node), _toConsumableArray(newListItems)),
|
|
249
|
+
canBeTransformed: true
|
|
250
|
+
};
|
|
251
|
+
} else {
|
|
252
|
+
listItems.push({
|
|
253
|
+
node: newListItems,
|
|
254
|
+
canBeTransformed: true
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
return listItems.map(function (_ref3) {
|
|
262
|
+
var node = _ref3.node,
|
|
263
|
+
canBeTransformed = _ref3.canBeTransformed;
|
|
264
|
+
if (canBeTransformed) {
|
|
265
|
+
return targetNodeType.createChecked(null, Fragment.fromArray(node));
|
|
266
|
+
} else {
|
|
267
|
+
return node;
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
};
|
|
271
|
+
export var convertUnwrappedLayoutContent = function convertUnwrappedLayoutContent(nodes, targetNodeType, schema) {
|
|
272
|
+
if (isBlockNodeType(targetNodeType)) {
|
|
273
|
+
return transformToBlockNode(nodes, targetNodeType, schema);
|
|
274
|
+
}
|
|
275
|
+
if (isContainerNodeType(targetNodeType)) {
|
|
276
|
+
return transformToContainerNode(nodes, targetNodeType);
|
|
277
|
+
}
|
|
278
|
+
if (isListNodeType(targetNodeType)) {
|
|
279
|
+
return transformToListNode(nodes, targetNodeType, schema);
|
|
280
|
+
}
|
|
281
|
+
return [];
|
|
282
|
+
};
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
1
2
|
import { DEFAULT_TWO_COLUMN_LAYOUT_COLUMN_WIDTH } from '@atlaskit/editor-common/styles';
|
|
2
3
|
import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
4
|
+
import { convertUnwrappedLayoutContent, unwrapLayoutNodesToTextNodes } from './layout/utils';
|
|
3
5
|
export var convertToLayout = function convertToLayout(context) {
|
|
4
6
|
var tr = context.tr,
|
|
5
7
|
sourceNode = context.sourceNode,
|
|
@@ -19,6 +21,41 @@ export var convertToLayout = function convertToLayout(context) {
|
|
|
19
21
|
var layoutSectionNode = layoutSection.createChecked(undefined, layoutContent);
|
|
20
22
|
|
|
21
23
|
// Replace the original node with the new layout node
|
|
22
|
-
tr.replaceRangeWith(sourcePos
|
|
24
|
+
tr.replaceRangeWith(sourcePos, sourcePos + sourceNode.nodeSize, layoutSectionNode);
|
|
23
25
|
return tr;
|
|
26
|
+
};
|
|
27
|
+
export var transformLayoutNode = function transformLayoutNode(context) {
|
|
28
|
+
var tr = context.tr,
|
|
29
|
+
sourceNode = context.sourceNode,
|
|
30
|
+
targetNodeType = context.targetNodeType,
|
|
31
|
+
sourcePos = context.sourcePos,
|
|
32
|
+
targetAttrs = context.targetAttrs;
|
|
33
|
+
var schema = tr.doc.type.schema || {};
|
|
34
|
+
var _ref2 = schema.nodes || {},
|
|
35
|
+
layoutSection = _ref2.layoutSection,
|
|
36
|
+
layoutColumn = _ref2.layoutColumn,
|
|
37
|
+
paragraph = _ref2.paragraph,
|
|
38
|
+
heading = _ref2.heading;
|
|
39
|
+
var layoutColumnNodes = [];
|
|
40
|
+
var targetTextNodeType = targetNodeType === heading ? heading : paragraph;
|
|
41
|
+
sourceNode.children.forEach(function (child) {
|
|
42
|
+
if (child.type === layoutColumn) {
|
|
43
|
+
var unwrappedContent = [];
|
|
44
|
+
child.content.forEach(function (node) {
|
|
45
|
+
// Unwrap all nodes and convert to text nodes
|
|
46
|
+
var context = {
|
|
47
|
+
tr: tr,
|
|
48
|
+
sourceNode: node,
|
|
49
|
+
targetNodeType: targetTextNodeType,
|
|
50
|
+
sourcePos: 0,
|
|
51
|
+
targetAttrs: targetAttrs
|
|
52
|
+
};
|
|
53
|
+
var newContent = unwrapLayoutNodesToTextNodes(context, targetNodeType);
|
|
54
|
+
unwrappedContent.push.apply(unwrappedContent, _toConsumableArray(newContent));
|
|
55
|
+
});
|
|
56
|
+
var newColumnContent = convertUnwrappedLayoutContent(unwrappedContent, targetNodeType, schema);
|
|
57
|
+
layoutColumnNodes.push(layoutColumn.createChecked(child.attrs, Fragment.fromArray(newColumnContent), child.marks));
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
return tr.replaceRangeWith(sourcePos, sourcePos + sourceNode.nodeSize, layoutSection.createChecked(sourceNode.attrs, Fragment.fromArray(layoutColumnNodes), sourceNode.marks));
|
|
24
61
|
};
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
1
2
|
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
3
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
2
5
|
import { getSupportedListTypesSet, isBulletOrOrderedList, isTaskList } from '../utils';
|
|
3
6
|
|
|
4
7
|
/**
|
|
@@ -15,10 +18,87 @@ var convertBlockToInlineContent = function convertBlockToInlineContent(node, sch
|
|
|
15
18
|
}
|
|
16
19
|
return [node];
|
|
17
20
|
};
|
|
21
|
+
var _transformListRecursively = function transformListRecursively(props) {
|
|
22
|
+
var transformedItems = [];
|
|
23
|
+
var listNode = props.listNode,
|
|
24
|
+
isSourceBulletOrOrdered = props.isSourceBulletOrOrdered,
|
|
25
|
+
isTargetBulletOrOrdered = props.isTargetBulletOrOrdered,
|
|
26
|
+
isSourceTask = props.isSourceTask,
|
|
27
|
+
isTargetTask = props.isTargetTask,
|
|
28
|
+
supportedListTypes = props.supportedListTypes,
|
|
29
|
+
schema = props.schema,
|
|
30
|
+
targetNodeType = props.targetNodeType;
|
|
31
|
+
var _schema$nodes = schema.nodes,
|
|
32
|
+
taskList = _schema$nodes.taskList,
|
|
33
|
+
listItem = _schema$nodes.listItem,
|
|
34
|
+
taskItem = _schema$nodes.taskItem,
|
|
35
|
+
paragraph = _schema$nodes.paragraph;
|
|
36
|
+
listNode.forEach(function (child) {
|
|
37
|
+
if (isSourceBulletOrOrdered && isTargetTask) {
|
|
38
|
+
// Convert bullet/ordered => task
|
|
39
|
+
if (child.type === listItem) {
|
|
40
|
+
var inlineContent = [];
|
|
41
|
+
var nestedTaskLists = [];
|
|
42
|
+
child.forEach(function (grandChild) {
|
|
43
|
+
if (supportedListTypes.has(grandChild.type) && grandChild.type !== taskList) {
|
|
44
|
+
nestedTaskLists.push(_transformListRecursively(_objectSpread(_objectSpread({}, props), {}, {
|
|
45
|
+
listNode: grandChild
|
|
46
|
+
})));
|
|
47
|
+
} else {
|
|
48
|
+
inlineContent.push.apply(inlineContent, _toConsumableArray(convertBlockToInlineContent(grandChild, schema)));
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
if (inlineContent.length > 0) {
|
|
52
|
+
transformedItems.push(taskItem.create(null, inlineContent));
|
|
53
|
+
}
|
|
54
|
+
transformedItems.push.apply(transformedItems, nestedTaskLists);
|
|
55
|
+
}
|
|
56
|
+
} else if (isSourceTask && isTargetBulletOrOrdered) {
|
|
57
|
+
// Convert task => bullet/ordered
|
|
58
|
+
if (child.type === taskItem) {
|
|
59
|
+
var _inlineContent = _toConsumableArray(child.content.content);
|
|
60
|
+
if (_inlineContent.length > 0) {
|
|
61
|
+
var paragraphNode = paragraph.create(null, _inlineContent);
|
|
62
|
+
transformedItems.push(listItem.create(null, [paragraphNode]));
|
|
63
|
+
}
|
|
64
|
+
} else if (child.type === taskList) {
|
|
65
|
+
var transformedNestedList = _transformListRecursively(_objectSpread(_objectSpread({}, props), {}, {
|
|
66
|
+
listNode: child
|
|
67
|
+
}));
|
|
68
|
+
var lastItem = transformedItems[transformedItems.length - 1];
|
|
69
|
+
if ((lastItem === null || lastItem === void 0 ? void 0 : lastItem.type) === listItem) {
|
|
70
|
+
// Attach nested list to previous item
|
|
71
|
+
var updatedContent = [].concat(_toConsumableArray(lastItem.content.content), [transformedNestedList]);
|
|
72
|
+
transformedItems[transformedItems.length - 1] = listItem.create(lastItem.attrs, updatedContent);
|
|
73
|
+
} else {
|
|
74
|
+
// No previous item, flatten nested items
|
|
75
|
+
transformedItems.push.apply(transformedItems, _toConsumableArray(transformedNestedList.content.content));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
} else if (isSourceBulletOrOrdered && isTargetBulletOrOrdered) {
|
|
79
|
+
if (child.type === listItem) {
|
|
80
|
+
var convertedNestedLists = [];
|
|
81
|
+
child.forEach(function (grandChild) {
|
|
82
|
+
if (supportedListTypes.has(grandChild.type) && grandChild.type !== targetNodeType) {
|
|
83
|
+
var convertedNode = _transformListRecursively(_objectSpread(_objectSpread({}, props), {}, {
|
|
84
|
+
listNode: grandChild
|
|
85
|
+
}));
|
|
86
|
+
convertedNestedLists.push(convertedNode);
|
|
87
|
+
} else {
|
|
88
|
+
convertedNestedLists.push(grandChild);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
transformedItems.push(listItem.create(null, convertedNestedLists));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
return targetNodeType.create(null, transformedItems);
|
|
96
|
+
};
|
|
18
97
|
|
|
19
98
|
/**
|
|
20
99
|
* Transform list structure between different list types
|
|
21
100
|
*/
|
|
101
|
+
export { _transformListRecursively as transformListRecursively };
|
|
22
102
|
export var transformListStructure = function transformListStructure(context) {
|
|
23
103
|
var tr = context.tr,
|
|
24
104
|
sourceNode = context.sourceNode,
|
|
@@ -32,60 +112,23 @@ export var transformListStructure = function transformListStructure(context) {
|
|
|
32
112
|
};
|
|
33
113
|
var sourceList = listNode.node,
|
|
34
114
|
listPos = listNode.pos;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
taskItem = nodes.taskItem,
|
|
38
|
-
paragraph = nodes.paragraph;
|
|
115
|
+
// const { taskList, listItem, taskItem, paragraph } = nodes;
|
|
116
|
+
|
|
39
117
|
var isSourceBulletOrOrdered = isBulletOrOrderedList(sourceList.type);
|
|
40
118
|
var isTargetTask = isTaskList(targetNodeType);
|
|
41
119
|
var isSourceTask = isTaskList(sourceList.type);
|
|
42
120
|
var isTargetBulletOrOrdered = isBulletOrOrderedList(targetNodeType);
|
|
43
121
|
var supportedListTypes = getSupportedListTypesSet(nodes);
|
|
44
|
-
var
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
nestedTaskLists.push(_transformListRecursively(grandChild));
|
|
55
|
-
} else {
|
|
56
|
-
inlineContent.push.apply(inlineContent, _toConsumableArray(convertBlockToInlineContent(grandChild, tr.doc.type.schema)));
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
if (inlineContent.length > 0) {
|
|
60
|
-
transformedItems.push(taskItem.create(null, inlineContent));
|
|
61
|
-
}
|
|
62
|
-
transformedItems.push.apply(transformedItems, nestedTaskLists);
|
|
63
|
-
}
|
|
64
|
-
} else if (isSourceTask && isTargetBulletOrOrdered) {
|
|
65
|
-
// Convert task => bullet/ordered
|
|
66
|
-
if (child.type === taskItem) {
|
|
67
|
-
var _inlineContent = _toConsumableArray(child.content.content);
|
|
68
|
-
if (_inlineContent.length > 0) {
|
|
69
|
-
var paragraphNode = paragraph.create(null, _inlineContent);
|
|
70
|
-
transformedItems.push(listItem.create(null, [paragraphNode]));
|
|
71
|
-
}
|
|
72
|
-
} else if (child.type === taskList) {
|
|
73
|
-
var transformedNestedList = _transformListRecursively(child);
|
|
74
|
-
var lastItem = transformedItems[transformedItems.length - 1];
|
|
75
|
-
if ((lastItem === null || lastItem === void 0 ? void 0 : lastItem.type) === listItem) {
|
|
76
|
-
// Attach nested list to previous item
|
|
77
|
-
var updatedContent = [].concat(_toConsumableArray(lastItem.content.content), [transformedNestedList]);
|
|
78
|
-
transformedItems[transformedItems.length - 1] = listItem.create(lastItem.attrs, updatedContent);
|
|
79
|
-
} else {
|
|
80
|
-
// No previous item, flatten nested items
|
|
81
|
-
transformedItems.push.apply(transformedItems, _toConsumableArray(transformedNestedList.content.content));
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
return targetNodeType.create(null, transformedItems);
|
|
87
|
-
};
|
|
88
|
-
var newList = _transformListRecursively(sourceList);
|
|
122
|
+
var newList = _transformListRecursively({
|
|
123
|
+
isSourceBulletOrOrdered: isSourceBulletOrOrdered,
|
|
124
|
+
isSourceTask: isSourceTask,
|
|
125
|
+
isTargetBulletOrOrdered: isTargetBulletOrOrdered,
|
|
126
|
+
isTargetTask: isTargetTask,
|
|
127
|
+
listNode: sourceList,
|
|
128
|
+
schema: tr.doc.type.schema,
|
|
129
|
+
supportedListTypes: supportedListTypes,
|
|
130
|
+
targetNodeType: targetNodeType
|
|
131
|
+
});
|
|
89
132
|
tr.replaceWith(listPos, listPos + sourceList.nodeSize, newList);
|
|
90
133
|
return tr;
|
|
91
134
|
} catch (_unused) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { transformBlockNode } from './block-transforms';
|
|
2
2
|
import { transformContainerNode, unwrapAndConvertToList } from './container-transforms';
|
|
3
|
-
import { convertToLayout } from './layout-transforms';
|
|
3
|
+
import { convertToLayout, transformLayoutNode } from './layout-transforms';
|
|
4
4
|
import { transformListNode } from './list-transforms';
|
|
5
|
-
import { getTargetNodeInfo, isBlockNode, isListNode, isListNodeType, isContainerNode, isLayoutNodeType } from './utils';
|
|
5
|
+
import { getTargetNodeInfo, isBlockNode, isListNode, isListNodeType, isContainerNode, isLayoutNodeType, isLayoutNode } from './utils';
|
|
6
6
|
export function transformNodeToTargetType(tr, sourceNode, sourcePos, targetType) {
|
|
7
7
|
var nodes = tr.doc.type.schema.nodes;
|
|
8
8
|
var targetNodeInfo = getTargetNodeInfo(targetType, nodes);
|
|
@@ -46,6 +46,9 @@ export function transformNodeToTargetType(tr, sourceNode, sourcePos, targetType)
|
|
|
46
46
|
if (sourceNode.type.name === 'codeBlock' && isListNodeType(targetNodeType)) {
|
|
47
47
|
return unwrapAndConvertToList(transformationContext);
|
|
48
48
|
}
|
|
49
|
+
if (isLayoutNode(sourceNode)) {
|
|
50
|
+
return transformLayoutNode(transformationContext);
|
|
51
|
+
}
|
|
49
52
|
if (isBlockNode(sourceNode)) {
|
|
50
53
|
return transformBlockNode(transformationContext);
|
|
51
54
|
}
|
|
@@ -91,6 +91,9 @@ export var getTargetNodeInfo = function getTargetNodeInfo(targetType, nodes) {
|
|
|
91
91
|
export var isBlockNode = function isBlockNode(node) {
|
|
92
92
|
return ['paragraph', 'heading', 'codeBlock'].includes(node.type.name);
|
|
93
93
|
};
|
|
94
|
+
export var isHeadingOrParagraphNode = function isHeadingOrParagraphNode(node) {
|
|
95
|
+
return ['paragraph', 'heading'].includes(node.type.name);
|
|
96
|
+
};
|
|
94
97
|
export var isListNode = function isListNode(node) {
|
|
95
98
|
return ['bulletList', 'orderedList', 'taskList'].includes(node.type.name);
|
|
96
99
|
};
|
|
@@ -123,6 +126,9 @@ export var getSupportedListTypesSet = function getSupportedListTypesSet(nodes) {
|
|
|
123
126
|
export var isLayoutNodeType = function isLayoutNodeType(nodeType) {
|
|
124
127
|
return nodeType.name === 'layoutSection';
|
|
125
128
|
};
|
|
129
|
+
export var isLayoutNode = function isLayoutNode(node) {
|
|
130
|
+
return node.type.name === 'layoutSection';
|
|
131
|
+
};
|
|
126
132
|
|
|
127
133
|
/**
|
|
128
134
|
* Check if a node should be extracted as a standalone block node
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
2
|
-
|
|
3
|
-
export declare const
|
|
1
|
+
import type { Fragment, Schema } from '@atlaskit/editor-prosemirror/model';
|
|
2
|
+
export declare const getInlineNodeTextContent: (sourceContent: Fragment) => string;
|
|
3
|
+
export declare const getInlineNodeTextNode: (sourceContent: Fragment, schema: Schema) => import("prosemirror-model").Node;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { NodeType, Node as PMNode, Schema } from '@atlaskit/editor-prosemirror/model';
|
|
2
|
+
import type { TransformContext } from '../types';
|
|
3
|
+
export declare const unwrapLayoutNodesToTextNodes: (context: TransformContext, finalTargetNodeType: NodeType) => PMNode[];
|
|
4
|
+
export declare const transformToListNode: (nodes: PMNode[], targetNodeType: NodeType, schema: Schema) => PMNode[];
|
|
5
|
+
export declare const convertUnwrappedLayoutContent: (nodes: PMNode[], targetNodeType: NodeType, schema: Schema) => PMNode[];
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import type { TransformContext } from './types';
|
|
2
2
|
export declare const convertToLayout: (context: TransformContext) => import("prosemirror-state").Transaction;
|
|
3
|
+
export declare const transformLayoutNode: (context: TransformContext) => import("prosemirror-state").Transaction;
|
|
@@ -1,5 +1,18 @@
|
|
|
1
|
+
import type { NodeType, Node as PMNode, Schema } from '@atlaskit/editor-prosemirror/model';
|
|
1
2
|
import type { TransformContext } from '../types';
|
|
3
|
+
type TransformListRecursivelyProps = {
|
|
4
|
+
isSourceBulletOrOrdered: boolean;
|
|
5
|
+
isSourceTask: boolean;
|
|
6
|
+
isTargetBulletOrOrdered: boolean;
|
|
7
|
+
isTargetTask: boolean;
|
|
8
|
+
listNode: PMNode;
|
|
9
|
+
schema: Schema;
|
|
10
|
+
supportedListTypes: Set<NodeType>;
|
|
11
|
+
targetNodeType: NodeType;
|
|
12
|
+
};
|
|
13
|
+
export declare const transformListRecursively: (props: TransformListRecursivelyProps) => PMNode;
|
|
2
14
|
/**
|
|
3
15
|
* Transform list structure between different list types
|
|
4
16
|
*/
|
|
5
17
|
export declare const transformListStructure: (context: TransformContext) => import("prosemirror-state").Transaction;
|
|
18
|
+
export {};
|
|
@@ -6,6 +6,7 @@ export declare const getTargetNodeInfo: (targetType: FormatNodeTargetType, nodes
|
|
|
6
6
|
nodeType: NodeType;
|
|
7
7
|
} | null;
|
|
8
8
|
export declare const isBlockNode: (node: PMNode) => boolean;
|
|
9
|
+
export declare const isHeadingOrParagraphNode: (node: PMNode) => boolean;
|
|
9
10
|
export declare const isListNode: (node: PMNode) => boolean;
|
|
10
11
|
export declare const isContainerNode: (node: PMNode) => boolean;
|
|
11
12
|
export declare const isBlockNodeType: (nodeType: NodeType) => boolean;
|
|
@@ -16,6 +17,7 @@ export declare const isTaskList: (nodeType: NodeType) => boolean;
|
|
|
16
17
|
export declare const getSupportedListTypes: (nodes: Record<string, NodeType>) => NodeType[];
|
|
17
18
|
export declare const getSupportedListTypesSet: (nodes: Record<string, NodeType>) => Set<NodeType>;
|
|
18
19
|
export declare const isLayoutNodeType: (nodeType: NodeType) => boolean;
|
|
20
|
+
export declare const isLayoutNode: (node: PMNode) => boolean;
|
|
19
21
|
/**
|
|
20
22
|
* Check if a node should be extracted as a standalone block node
|
|
21
23
|
* rather than converted to inline content
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
2
|
-
|
|
3
|
-
export declare const
|
|
1
|
+
import type { Fragment, Schema } from '@atlaskit/editor-prosemirror/model';
|
|
2
|
+
export declare const getInlineNodeTextContent: (sourceContent: Fragment) => string;
|
|
3
|
+
export declare const getInlineNodeTextNode: (sourceContent: Fragment, schema: Schema) => import("prosemirror-model").Node;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { NodeType, Node as PMNode, Schema } from '@atlaskit/editor-prosemirror/model';
|
|
2
|
+
import type { TransformContext } from '../types';
|
|
3
|
+
export declare const unwrapLayoutNodesToTextNodes: (context: TransformContext, finalTargetNodeType: NodeType) => PMNode[];
|
|
4
|
+
export declare const transformToListNode: (nodes: PMNode[], targetNodeType: NodeType, schema: Schema) => PMNode[];
|
|
5
|
+
export declare const convertUnwrappedLayoutContent: (nodes: PMNode[], targetNodeType: NodeType, schema: Schema) => PMNode[];
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import type { TransformContext } from './types';
|
|
2
2
|
export declare const convertToLayout: (context: TransformContext) => import("prosemirror-state").Transaction;
|
|
3
|
+
export declare const transformLayoutNode: (context: TransformContext) => import("prosemirror-state").Transaction;
|
|
@@ -1,5 +1,18 @@
|
|
|
1
|
+
import type { NodeType, Node as PMNode, Schema } from '@atlaskit/editor-prosemirror/model';
|
|
1
2
|
import type { TransformContext } from '../types';
|
|
3
|
+
type TransformListRecursivelyProps = {
|
|
4
|
+
isSourceBulletOrOrdered: boolean;
|
|
5
|
+
isSourceTask: boolean;
|
|
6
|
+
isTargetBulletOrOrdered: boolean;
|
|
7
|
+
isTargetTask: boolean;
|
|
8
|
+
listNode: PMNode;
|
|
9
|
+
schema: Schema;
|
|
10
|
+
supportedListTypes: Set<NodeType>;
|
|
11
|
+
targetNodeType: NodeType;
|
|
12
|
+
};
|
|
13
|
+
export declare const transformListRecursively: (props: TransformListRecursivelyProps) => PMNode;
|
|
2
14
|
/**
|
|
3
15
|
* Transform list structure between different list types
|
|
4
16
|
*/
|
|
5
17
|
export declare const transformListStructure: (context: TransformContext) => import("prosemirror-state").Transaction;
|
|
18
|
+
export {};
|
|
@@ -6,6 +6,7 @@ export declare const getTargetNodeInfo: (targetType: FormatNodeTargetType, nodes
|
|
|
6
6
|
nodeType: NodeType;
|
|
7
7
|
} | null;
|
|
8
8
|
export declare const isBlockNode: (node: PMNode) => boolean;
|
|
9
|
+
export declare const isHeadingOrParagraphNode: (node: PMNode) => boolean;
|
|
9
10
|
export declare const isListNode: (node: PMNode) => boolean;
|
|
10
11
|
export declare const isContainerNode: (node: PMNode) => boolean;
|
|
11
12
|
export declare const isBlockNodeType: (nodeType: NodeType) => boolean;
|
|
@@ -16,6 +17,7 @@ export declare const isTaskList: (nodeType: NodeType) => boolean;
|
|
|
16
17
|
export declare const getSupportedListTypes: (nodes: Record<string, NodeType>) => NodeType[];
|
|
17
18
|
export declare const getSupportedListTypesSet: (nodes: Record<string, NodeType>) => Set<NodeType>;
|
|
18
19
|
export declare const isLayoutNodeType: (nodeType: NodeType) => boolean;
|
|
20
|
+
export declare const isLayoutNode: (node: PMNode) => boolean;
|
|
19
21
|
/**
|
|
20
22
|
* Check if a node should be extracted as a standalone block node
|
|
21
23
|
* rather than converted to inline content
|