@atlaskit/editor-plugin-block-menu 3.0.2 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/dist/cjs/editor-commands/transforms/layout/utils.js +33 -19
- package/dist/cjs/editor-commands/transforms/layout-transforms.js +1 -1
- package/dist/cjs/editor-commands/transforms/list-transforms.js +5 -52
- package/dist/cjs/editor-commands/transforms/utils.js +3 -14
- package/dist/cjs/ui/block-menu.js +1 -1
- package/dist/es2019/editor-commands/transforms/layout/utils.js +25 -11
- package/dist/es2019/editor-commands/transforms/layout-transforms.js +1 -1
- package/dist/es2019/editor-commands/transforms/list-transforms.js +3 -54
- package/dist/es2019/editor-commands/transforms/utils.js +2 -13
- package/dist/es2019/ui/block-menu.js +1 -1
- package/dist/esm/editor-commands/transforms/layout/utils.js +27 -13
- package/dist/esm/editor-commands/transforms/layout-transforms.js +1 -1
- package/dist/esm/editor-commands/transforms/list-transforms.js +3 -50
- package/dist/esm/editor-commands/transforms/utils.js +2 -13
- package/dist/esm/ui/block-menu.js +1 -1
- package/dist/types/editor-commands/transforms/container-transforms.d.ts +2 -1
- package/dist/types/editor-commands/transforms/layout/utils.d.ts +2 -2
- package/dist/types/editor-commands/transforms/layout-transforms.d.ts +1 -1
- package/dist/types/editor-commands/transforms/list/transformOrderedUnorderedListToBlockNodes.d.ts +1 -1
- package/dist/types/editor-commands/transforms/list/transformTaskListToBlockNodes.d.ts +1 -1
- package/dist/types/editor-commands/transforms/list-transforms.d.ts +2 -5
- package/dist/types/editor-commands/transforms/types.d.ts +1 -8
- package/dist/types/editor-commands/transforms/utils.d.ts +0 -4
- package/dist/types-ts4.5/editor-commands/transforms/container-transforms.d.ts +2 -1
- package/dist/types-ts4.5/editor-commands/transforms/layout/utils.d.ts +2 -2
- package/dist/types-ts4.5/editor-commands/transforms/layout-transforms.d.ts +1 -1
- package/dist/types-ts4.5/editor-commands/transforms/list/transformOrderedUnorderedListToBlockNodes.d.ts +1 -1
- package/dist/types-ts4.5/editor-commands/transforms/list/transformTaskListToBlockNodes.d.ts +1 -1
- package/dist/types-ts4.5/editor-commands/transforms/list-transforms.d.ts +2 -5
- package/dist/types-ts4.5/editor-commands/transforms/types.d.ts +1 -8
- package/dist/types-ts4.5/editor-commands/transforms/utils.d.ts +0 -4
- package/package.json +3 -3
- package/dist/cjs/editor-commands/transforms/list/transformBetweenListTypes.js +0 -138
- package/dist/es2019/editor-commands/transforms/list/transformBetweenListTypes.js +0 -140
- package/dist/esm/editor-commands/transforms/list/transformBetweenListTypes.js +0 -133
- package/dist/types/editor-commands/transforms/list/transformBetweenListTypes.d.ts +0 -18
- package/dist/types-ts4.5/editor-commands/transforms/list/transformBetweenListTypes.d.ts +0 -18
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-block-menu
|
|
2
2
|
|
|
3
|
+
## 3.1.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`c30d1876a650a`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/c30d1876a650a) -
|
|
8
|
+
ED-29256 Transform content with indentation in layouts
|
|
9
|
+
- Updated dependencies
|
|
10
|
+
|
|
11
|
+
## 3.1.0
|
|
12
|
+
|
|
13
|
+
### Minor Changes
|
|
14
|
+
|
|
15
|
+
- [`cebd8f9171426`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/cebd8f9171426) -
|
|
16
|
+
[ux] ED-29159 Implement transform task inside lists - handle logic
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- Updated dependencies
|
|
21
|
+
|
|
3
22
|
## 3.0.2
|
|
4
23
|
|
|
5
24
|
### Patch Changes
|
|
@@ -6,10 +6,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.unwrapLayoutNodesToTextNodes = exports.transformToListNode = exports.convertUnwrappedLayoutContent = void 0;
|
|
8
8
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
+
var _transforms = require("@atlaskit/editor-common/transforms");
|
|
9
10
|
var _model = require("@atlaskit/editor-prosemirror/model");
|
|
10
11
|
var _utils = require("@atlaskit/editor-prosemirror/utils");
|
|
11
12
|
var _inlineNodeTransforms = require("../inline-node-transforms");
|
|
12
|
-
var _transformBetweenListTypes = require("../list/transformBetweenListTypes");
|
|
13
13
|
var _utils2 = require("../utils");
|
|
14
14
|
var unwrapLayoutNodesToTextNodes = exports.unwrapLayoutNodesToTextNodes = function unwrapLayoutNodesToTextNodes(context, finalTargetNodeType) {
|
|
15
15
|
var tr = context.tr,
|
|
@@ -20,10 +20,16 @@ var unwrapLayoutNodesToTextNodes = exports.unwrapLayoutNodesToTextNodes = functi
|
|
|
20
20
|
var isValid = (0, _utils2.getContentSupportChecker)(finalTargetNodeType);
|
|
21
21
|
var createTextNode = function createTextNode(node) {
|
|
22
22
|
var isTextNode = node.type.name === 'text';
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
var nodeToTransform = node;
|
|
24
|
+
if ((0, _utils2.isContainerNodeType)(finalTargetNodeType) || (0, _utils2.isListNodeType)(finalTargetNodeType)) {
|
|
25
|
+
nodeToTransform = node.mark(node.marks.filter(function (mark) {
|
|
26
|
+
return !['alignment', 'indentation'].includes(mark.type.name);
|
|
27
|
+
}));
|
|
25
28
|
}
|
|
26
|
-
|
|
29
|
+
if (isValid(nodeToTransform) && !isTextNode) {
|
|
30
|
+
return nodeToTransform;
|
|
31
|
+
}
|
|
32
|
+
return targetNodeType.createChecked(targetAttrs, isTextNode ? nodeToTransform : nodeToTransform.content, nodeToTransform.marks);
|
|
27
33
|
};
|
|
28
34
|
if ((0, _utils2.isBlockNode)(sourceNode)) {
|
|
29
35
|
// code block acts like a container, we need to unwrap it
|
|
@@ -190,21 +196,17 @@ var transformToContainerNode = function transformToContainerNode(nodes, targetNo
|
|
|
190
196
|
canBeTransformed: false
|
|
191
197
|
});
|
|
192
198
|
} else {
|
|
193
|
-
// Remove alignment marks as container nodes don't support them
|
|
194
|
-
var nodeWithValidAttrs = node.mark(node.marks.filter(function (mark) {
|
|
195
|
-
return mark.type.name !== 'alignment';
|
|
196
|
-
}));
|
|
197
199
|
var isSameNodeType = node.type === targetNodeType;
|
|
198
200
|
|
|
199
201
|
// If the node is not valid and not the same type, we cannot transform it
|
|
200
|
-
if (!isNodeValid(
|
|
202
|
+
if (!isNodeValid(node) && !isSameNodeType) {
|
|
201
203
|
newNodes.push({
|
|
202
204
|
node: node,
|
|
203
205
|
canBeTransformed: false
|
|
204
206
|
});
|
|
205
207
|
return;
|
|
206
208
|
}
|
|
207
|
-
var _nodes = isSameNodeType ? node.content.content : [
|
|
209
|
+
var _nodes = isSameNodeType ? node.content.content : [node];
|
|
208
210
|
if (newNodes.length === 0) {
|
|
209
211
|
newNodes.push({
|
|
210
212
|
node: _nodes,
|
|
@@ -237,7 +239,7 @@ var transformToContainerNode = function transformToContainerNode(nodes, targetNo
|
|
|
237
239
|
});
|
|
238
240
|
};
|
|
239
241
|
var transformToListNode = exports.transformToListNode = function transformToListNode(nodes, targetNodeType, schema) {
|
|
240
|
-
var isTargetTask = (0,
|
|
242
|
+
var isTargetTask = (0, _transforms.isTaskList)(targetNodeType);
|
|
241
243
|
var listItems = [];
|
|
242
244
|
var listItemType = isTargetTask ? schema.nodes.taskItem : schema.nodes.listItem;
|
|
243
245
|
var isValid = (0, _utils2.getContentSupportChecker)(listItemType);
|
|
@@ -253,16 +255,16 @@ var transformToListNode = exports.transformToListNode = function transformToList
|
|
|
253
255
|
|
|
254
256
|
// If the node is a list, we may need to transform it
|
|
255
257
|
if ((0, _utils2.isListNode)(node)) {
|
|
256
|
-
var isSourceBulletOrOrdered = (0,
|
|
257
|
-
var _isTargetTask = (0,
|
|
258
|
-
var isSourceTask = (0,
|
|
259
|
-
var isTargetBulletOrOrdered = (0,
|
|
260
|
-
var supportedListTypes = (0,
|
|
258
|
+
var isSourceBulletOrOrdered = (0, _transforms.isBulletOrOrderedList)(node.type);
|
|
259
|
+
var _isTargetTask = (0, _transforms.isTaskList)(targetNodeType);
|
|
260
|
+
var isSourceTask = (0, _transforms.isTaskList)(node.type);
|
|
261
|
+
var isTargetBulletOrOrdered = (0, _transforms.isBulletOrOrderedList)(targetNodeType);
|
|
262
|
+
var supportedListTypes = (0, _transforms.getSupportedListTypesSet)(schema.nodes);
|
|
261
263
|
if (node.type === targetNodeType) {
|
|
262
264
|
// For the same list type, we can keep the structure
|
|
263
265
|
newListItems = node.content.content;
|
|
264
266
|
} else {
|
|
265
|
-
var newList = (0,
|
|
267
|
+
var newList = (0, _transforms.transformListRecursively)({
|
|
266
268
|
isSourceBulletOrOrdered: isSourceBulletOrOrdered,
|
|
267
269
|
isSourceTask: isSourceTask,
|
|
268
270
|
isTargetBulletOrOrdered: isTargetBulletOrOrdered,
|
|
@@ -322,8 +324,20 @@ var transformToListNode = exports.transformToListNode = function transformToList
|
|
|
322
324
|
}
|
|
323
325
|
});
|
|
324
326
|
};
|
|
325
|
-
var convertUnwrappedLayoutContent = exports.convertUnwrappedLayoutContent = function convertUnwrappedLayoutContent(nodes, targetNodeType, schema) {
|
|
326
|
-
if (nodes.length === 1 && nodes[0].content.size === 0) {
|
|
327
|
+
var convertUnwrappedLayoutContent = exports.convertUnwrappedLayoutContent = function convertUnwrappedLayoutContent(nodes, targetNodeType, schema, targetAttrs) {
|
|
328
|
+
if (nodes.length === 1 && nodes[0].content.size === 0 && !(0, _utils2.isContainerNodeType)(targetNodeType)) {
|
|
329
|
+
if ((0, _utils2.isBlockNodeType)(targetNodeType)) {
|
|
330
|
+
if (['heading', 'paragraph'].includes(targetNodeType.name)) {
|
|
331
|
+
return [targetNodeType.createChecked(targetAttrs)];
|
|
332
|
+
}
|
|
333
|
+
if (targetNodeType.name === 'codeBlock') {
|
|
334
|
+
return [targetNodeType.createChecked()];
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
if ((0, _utils2.isListNodeType)(targetNodeType)) {
|
|
338
|
+
var listItem = (0, _transforms.isTaskList)(targetNodeType) ? schema.nodes.taskItem.createChecked() : schema.nodes.listItem.createChecked(null, schema.nodes.paragraph.createChecked());
|
|
339
|
+
return [targetNodeType.createChecked(null, listItem)];
|
|
340
|
+
}
|
|
327
341
|
return nodes;
|
|
328
342
|
}
|
|
329
343
|
if ((0, _utils2.isBlockNodeType)(targetNodeType)) {
|
|
@@ -60,7 +60,7 @@ var transformLayoutNode = exports.transformLayoutNode = function transformLayout
|
|
|
60
60
|
var newContent = (0, _utils.unwrapLayoutNodesToTextNodes)(context, targetNodeType);
|
|
61
61
|
unwrappedContent.push.apply(unwrappedContent, (0, _toConsumableArray2.default)(newContent));
|
|
62
62
|
});
|
|
63
|
-
var newColumnContent = (0, _utils.convertUnwrappedLayoutContent)(unwrappedContent, targetNodeType, schema);
|
|
63
|
+
var newColumnContent = (0, _utils.convertUnwrappedLayoutContent)(unwrappedContent, targetNodeType, schema, targetAttrs);
|
|
64
64
|
layoutColumnNodes.push(layoutColumn.createChecked(child.attrs, _model.Fragment.fromArray(newColumnContent), child.marks));
|
|
65
65
|
}
|
|
66
66
|
});
|
|
@@ -4,11 +4,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.transformListToContainer = exports.transformListToBlockNodes = exports.transformListNode = exports.transformBlockToList = exports.
|
|
7
|
+
exports.transformListToContainer = exports.transformListToBlockNodes = exports.transformListNode = exports.transformBlockToList = exports.liftListToBlockType = void 0;
|
|
8
8
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
+
var _transforms = require("@atlaskit/editor-common/transforms");
|
|
9
10
|
var _model = require("@atlaskit/editor-prosemirror/model");
|
|
10
11
|
var _transform = require("@atlaskit/editor-prosemirror/transform");
|
|
11
|
-
var _transformBetweenListTypes = require("./list/transformBetweenListTypes");
|
|
12
12
|
var _transformOrderedUnorderedListToBlockNodes = require("./list/transformOrderedUnorderedListToBlockNodes");
|
|
13
13
|
var _transformTaskListToBlockNodes = require("./list/transformTaskListToBlockNodes");
|
|
14
14
|
var _transformToTaskList = require("./list/transformToTaskList");
|
|
@@ -30,7 +30,7 @@ var transformBlockToList = exports.transformBlockToList = function transformBloc
|
|
|
30
30
|
return null;
|
|
31
31
|
}
|
|
32
32
|
var nodes = tr.doc.type.schema.nodes;
|
|
33
|
-
var isTargetTask = (0,
|
|
33
|
+
var isTargetTask = (0, _transforms.isTaskList)(targetNodeType);
|
|
34
34
|
|
|
35
35
|
// Handle task lists differently due to their structure
|
|
36
36
|
if (isTargetTask) {
|
|
@@ -145,7 +145,7 @@ var transformListNode = exports.transformListNode = function transformListNode(c
|
|
|
145
145
|
|
|
146
146
|
// Transform between list types
|
|
147
147
|
if ((0, _utils.isListNodeType)(targetNodeType)) {
|
|
148
|
-
return transformBetweenListTypes(context);
|
|
148
|
+
return (0, _transforms.transformBetweenListTypes)(context);
|
|
149
149
|
}
|
|
150
150
|
return null;
|
|
151
151
|
};
|
|
@@ -158,51 +158,4 @@ var liftListToBlockType = exports.liftListToBlockType = function liftListToBlock
|
|
|
158
158
|
return null;
|
|
159
159
|
};
|
|
160
160
|
|
|
161
|
-
|
|
162
|
-
* Transform between different list types
|
|
163
|
-
*/
|
|
164
|
-
var transformBetweenListTypes = exports.transformBetweenListTypes = function transformBetweenListTypes(context) {
|
|
165
|
-
var tr = context.tr,
|
|
166
|
-
sourceNode = context.sourceNode,
|
|
167
|
-
sourcePos = context.sourcePos,
|
|
168
|
-
targetNodeType = context.targetNodeType;
|
|
169
|
-
var nodes = tr.doc.type.schema.nodes;
|
|
170
|
-
var sourceListType = sourceNode.type;
|
|
171
|
-
var isSourceBulletOrOrdered = (0, _utils.isBulletOrOrderedList)(sourceListType);
|
|
172
|
-
var isTargetTask = (0, _utils.isTaskList)(targetNodeType);
|
|
173
|
-
var isSourceTask = (0, _utils.isTaskList)(sourceListType);
|
|
174
|
-
var isTargetBulletOrOrdered = (0, _utils.isBulletOrOrderedList)(targetNodeType);
|
|
175
|
-
|
|
176
|
-
// Check if we need structure transformation
|
|
177
|
-
var needsStructureTransform = isSourceBulletOrOrdered && isTargetTask || isSourceTask && isTargetBulletOrOrdered;
|
|
178
|
-
try {
|
|
179
|
-
if (!needsStructureTransform) {
|
|
180
|
-
// Simple type change for same structure lists (bullet <-> ordered)
|
|
181
|
-
// Apply to the main list
|
|
182
|
-
tr.setNodeMarkup(sourcePos, targetNodeType);
|
|
183
|
-
|
|
184
|
-
// Apply to nested lists
|
|
185
|
-
var listStart = sourcePos;
|
|
186
|
-
var listEnd = sourcePos + sourceNode.nodeSize;
|
|
187
|
-
var supportedListTypesSet = (0, _utils.getSupportedListTypesSet)(nodes);
|
|
188
|
-
tr.doc.nodesBetween(listStart, listEnd, function (node, pos, parent) {
|
|
189
|
-
// Only process nested lists (not the root list we already handled)
|
|
190
|
-
if (supportedListTypesSet.has(node.type) && pos !== sourcePos) {
|
|
191
|
-
var isNestedList = parent && (supportedListTypesSet.has(parent.type) || parent.type === nodes.listItem);
|
|
192
|
-
if (isNestedList) {
|
|
193
|
-
var shouldTransformNode = node.type === sourceListType || (0, _utils.isBulletOrOrderedList)(node.type) && isTargetBulletOrOrdered;
|
|
194
|
-
if (shouldTransformNode) {
|
|
195
|
-
tr.setNodeMarkup(pos, targetNodeType);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
return true; // Continue traversing
|
|
200
|
-
});
|
|
201
|
-
return tr;
|
|
202
|
-
} else {
|
|
203
|
-
return (0, _transformBetweenListTypes.transformListStructure)(context);
|
|
204
|
-
}
|
|
205
|
-
} catch (_unused) {
|
|
206
|
-
return null;
|
|
207
|
-
}
|
|
208
|
-
};
|
|
161
|
+
// transformBetweenListTypes is now imported from @atlaskit/editor-common/transforms
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.isListNodeType = exports.isListNode = exports.isLayoutNodeType = exports.isLayoutNode = exports.isHeadingOrParagraphNode = exports.isContainerNodeType = exports.isContainerNode = exports.isBlockNodeType = exports.isBlockNodeForExtraction = exports.isBlockNode = exports.getTargetNodeInfo = exports.getContentSupportChecker = exports.filterMarksForTargetNodeType = exports.convertNodeToInlineContent = exports.convertCodeBlockContentToParagraphs = void 0;
|
|
7
7
|
var _model = require("@atlaskit/editor-prosemirror/model");
|
|
8
8
|
var getTargetNodeInfo = exports.getTargetNodeInfo = function getTargetNodeInfo(targetType, nodes) {
|
|
9
9
|
switch (targetType) {
|
|
@@ -116,19 +116,8 @@ var isContainerNodeType = exports.isContainerNodeType = function isContainerNode
|
|
|
116
116
|
return ['panel', 'expand', 'blockquote'].includes(nodeType.name);
|
|
117
117
|
};
|
|
118
118
|
|
|
119
|
-
// List type utilities
|
|
120
|
-
|
|
121
|
-
return nodeType.name === 'bulletList' || nodeType.name === 'orderedList';
|
|
122
|
-
};
|
|
123
|
-
var isTaskList = exports.isTaskList = function isTaskList(nodeType) {
|
|
124
|
-
return nodeType.name === 'taskList';
|
|
125
|
-
};
|
|
126
|
-
var getSupportedListTypes = exports.getSupportedListTypes = function getSupportedListTypes(nodes) {
|
|
127
|
-
return [nodes.bulletList, nodes.orderedList, nodes.taskList].filter(Boolean);
|
|
128
|
-
};
|
|
129
|
-
var getSupportedListTypesSet = exports.getSupportedListTypesSet = function getSupportedListTypesSet(nodes) {
|
|
130
|
-
return new Set(getSupportedListTypes(nodes));
|
|
131
|
-
};
|
|
119
|
+
// List type utilities moved to @atlaskit/editor-common/transforms
|
|
120
|
+
|
|
132
121
|
var isLayoutNodeType = exports.isLayoutNodeType = function isLayoutNodeType(nodeType) {
|
|
133
122
|
return nodeType.name === 'layoutSection';
|
|
134
123
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { transformListRecursively, isBulletOrOrderedList, isTaskList, getSupportedListTypesSet } from '@atlaskit/editor-common/transforms';
|
|
1
2
|
import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
2
3
|
import { findChildrenByType } from '@atlaskit/editor-prosemirror/utils';
|
|
3
4
|
import { getInlineNodeTextContent } from '../inline-node-transforms';
|
|
4
|
-
import {
|
|
5
|
-
import { getContentSupportChecker, getSupportedListTypesSet, isBlockNode, isBlockNodeForExtraction, isBlockNodeType, isBulletOrOrderedList, isContainerNode, isContainerNodeType, isHeadingOrParagraphNode, isListNode, isListNodeType, isTaskList } from '../utils';
|
|
5
|
+
import { getContentSupportChecker, isBlockNode, isBlockNodeForExtraction, isBlockNodeType, isContainerNode, isContainerNodeType, isHeadingOrParagraphNode, isListNode, isListNodeType } from '../utils';
|
|
6
6
|
export const unwrapLayoutNodesToTextNodes = (context, finalTargetNodeType) => {
|
|
7
7
|
const {
|
|
8
8
|
tr,
|
|
@@ -14,10 +14,14 @@ export const unwrapLayoutNodesToTextNodes = (context, finalTargetNodeType) => {
|
|
|
14
14
|
const isValid = getContentSupportChecker(finalTargetNodeType);
|
|
15
15
|
const createTextNode = node => {
|
|
16
16
|
const isTextNode = node.type.name === 'text';
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
let nodeToTransform = node;
|
|
18
|
+
if (isContainerNodeType(finalTargetNodeType) || isListNodeType(finalTargetNodeType)) {
|
|
19
|
+
nodeToTransform = node.mark(node.marks.filter(mark => !['alignment', 'indentation'].includes(mark.type.name)));
|
|
20
|
+
}
|
|
21
|
+
if (isValid(nodeToTransform) && !isTextNode) {
|
|
22
|
+
return nodeToTransform;
|
|
19
23
|
}
|
|
20
|
-
return targetNodeType.createChecked(targetAttrs, isTextNode ?
|
|
24
|
+
return targetNodeType.createChecked(targetAttrs, isTextNode ? nodeToTransform : nodeToTransform.content, nodeToTransform.marks);
|
|
21
25
|
};
|
|
22
26
|
if (isBlockNode(sourceNode)) {
|
|
23
27
|
// code block acts like a container, we need to unwrap it
|
|
@@ -169,19 +173,17 @@ const transformToContainerNode = (nodes, targetNodeType) => {
|
|
|
169
173
|
canBeTransformed: false
|
|
170
174
|
});
|
|
171
175
|
} else {
|
|
172
|
-
// Remove alignment marks as container nodes don't support them
|
|
173
|
-
const nodeWithValidAttrs = node.mark(node.marks.filter(mark => mark.type.name !== 'alignment'));
|
|
174
176
|
const isSameNodeType = node.type === targetNodeType;
|
|
175
177
|
|
|
176
178
|
// If the node is not valid and not the same type, we cannot transform it
|
|
177
|
-
if (!isNodeValid(
|
|
179
|
+
if (!isNodeValid(node) && !isSameNodeType) {
|
|
178
180
|
newNodes.push({
|
|
179
181
|
node: node,
|
|
180
182
|
canBeTransformed: false
|
|
181
183
|
});
|
|
182
184
|
return;
|
|
183
185
|
}
|
|
184
|
-
const nodes = isSameNodeType ? node.content.content : [
|
|
186
|
+
const nodes = isSameNodeType ? node.content.content : [node];
|
|
185
187
|
if (newNodes.length === 0) {
|
|
186
188
|
newNodes.push({
|
|
187
189
|
node: nodes,
|
|
@@ -301,8 +303,20 @@ export const transformToListNode = (nodes, targetNodeType, schema) => {
|
|
|
301
303
|
}
|
|
302
304
|
});
|
|
303
305
|
};
|
|
304
|
-
export const convertUnwrappedLayoutContent = (nodes, targetNodeType, schema) => {
|
|
305
|
-
if (nodes.length === 1 && nodes[0].content.size === 0) {
|
|
306
|
+
export const convertUnwrappedLayoutContent = (nodes, targetNodeType, schema, targetAttrs) => {
|
|
307
|
+
if (nodes.length === 1 && nodes[0].content.size === 0 && !isContainerNodeType(targetNodeType)) {
|
|
308
|
+
if (isBlockNodeType(targetNodeType)) {
|
|
309
|
+
if (['heading', 'paragraph'].includes(targetNodeType.name)) {
|
|
310
|
+
return [targetNodeType.createChecked(targetAttrs)];
|
|
311
|
+
}
|
|
312
|
+
if (targetNodeType.name === 'codeBlock') {
|
|
313
|
+
return [targetNodeType.createChecked()];
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
if (isListNodeType(targetNodeType)) {
|
|
317
|
+
const listItem = isTaskList(targetNodeType) ? schema.nodes.taskItem.createChecked() : schema.nodes.listItem.createChecked(null, schema.nodes.paragraph.createChecked());
|
|
318
|
+
return [targetNodeType.createChecked(null, listItem)];
|
|
319
|
+
}
|
|
306
320
|
return nodes;
|
|
307
321
|
}
|
|
308
322
|
if (isBlockNodeType(targetNodeType)) {
|
|
@@ -56,7 +56,7 @@ export const transformLayoutNode = context => {
|
|
|
56
56
|
const newContent = unwrapLayoutNodesToTextNodes(context, targetNodeType);
|
|
57
57
|
unwrappedContent.push(...newContent);
|
|
58
58
|
});
|
|
59
|
-
const newColumnContent = convertUnwrappedLayoutContent(unwrappedContent, targetNodeType, schema);
|
|
59
|
+
const newColumnContent = convertUnwrappedLayoutContent(unwrappedContent, targetNodeType, schema, targetAttrs);
|
|
60
60
|
layoutColumnNodes.push(layoutColumn.createChecked(child.attrs, Fragment.fromArray(newColumnContent), child.marks));
|
|
61
61
|
}
|
|
62
62
|
});
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { transformBetweenListTypes, isTaskList } from '@atlaskit/editor-common/transforms';
|
|
1
2
|
import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
2
3
|
import { findWrapping } from '@atlaskit/editor-prosemirror/transform';
|
|
3
|
-
import { transformListStructure } from './list/transformBetweenListTypes';
|
|
4
4
|
import { transformOrderedUnorderedListToBlockNodes } from './list/transformOrderedUnorderedListToBlockNodes';
|
|
5
5
|
import { transformTaskListToBlockNodes } from './list/transformTaskListToBlockNodes';
|
|
6
6
|
import { transformToTaskList } from './list/transformToTaskList';
|
|
7
|
-
import {
|
|
7
|
+
import { isBlockNodeType, isContainerNodeType, isListNodeType } from './utils';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Transform selection to list type
|
|
@@ -165,55 +165,4 @@ export const liftListToBlockType = () => {
|
|
|
165
165
|
return null;
|
|
166
166
|
};
|
|
167
167
|
|
|
168
|
-
|
|
169
|
-
* Transform between different list types
|
|
170
|
-
*/
|
|
171
|
-
export const transformBetweenListTypes = context => {
|
|
172
|
-
const {
|
|
173
|
-
tr,
|
|
174
|
-
sourceNode,
|
|
175
|
-
sourcePos,
|
|
176
|
-
targetNodeType
|
|
177
|
-
} = context;
|
|
178
|
-
const {
|
|
179
|
-
nodes
|
|
180
|
-
} = tr.doc.type.schema;
|
|
181
|
-
const sourceListType = sourceNode.type;
|
|
182
|
-
const isSourceBulletOrOrdered = isBulletOrOrderedList(sourceListType);
|
|
183
|
-
const isTargetTask = isTaskList(targetNodeType);
|
|
184
|
-
const isSourceTask = isTaskList(sourceListType);
|
|
185
|
-
const isTargetBulletOrOrdered = isBulletOrOrderedList(targetNodeType);
|
|
186
|
-
|
|
187
|
-
// Check if we need structure transformation
|
|
188
|
-
const needsStructureTransform = isSourceBulletOrOrdered && isTargetTask || isSourceTask && isTargetBulletOrOrdered;
|
|
189
|
-
try {
|
|
190
|
-
if (!needsStructureTransform) {
|
|
191
|
-
// Simple type change for same structure lists (bullet <-> ordered)
|
|
192
|
-
// Apply to the main list
|
|
193
|
-
tr.setNodeMarkup(sourcePos, targetNodeType);
|
|
194
|
-
|
|
195
|
-
// Apply to nested lists
|
|
196
|
-
const listStart = sourcePos;
|
|
197
|
-
const listEnd = sourcePos + sourceNode.nodeSize;
|
|
198
|
-
const supportedListTypesSet = getSupportedListTypesSet(nodes);
|
|
199
|
-
tr.doc.nodesBetween(listStart, listEnd, (node, pos, parent) => {
|
|
200
|
-
// Only process nested lists (not the root list we already handled)
|
|
201
|
-
if (supportedListTypesSet.has(node.type) && pos !== sourcePos) {
|
|
202
|
-
const isNestedList = parent && (supportedListTypesSet.has(parent.type) || parent.type === nodes.listItem);
|
|
203
|
-
if (isNestedList) {
|
|
204
|
-
const shouldTransformNode = node.type === sourceListType || isBulletOrOrderedList(node.type) && isTargetBulletOrOrdered;
|
|
205
|
-
if (shouldTransformNode) {
|
|
206
|
-
tr.setNodeMarkup(pos, targetNodeType);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
return true; // Continue traversing
|
|
211
|
-
});
|
|
212
|
-
return tr;
|
|
213
|
-
} else {
|
|
214
|
-
return transformListStructure(context);
|
|
215
|
-
}
|
|
216
|
-
} catch {
|
|
217
|
-
return null;
|
|
218
|
-
}
|
|
219
|
-
};
|
|
168
|
+
// transformBetweenListTypes is now imported from @atlaskit/editor-common/transforms
|
|
@@ -110,19 +110,8 @@ export const isContainerNodeType = nodeType => {
|
|
|
110
110
|
return ['panel', 'expand', 'blockquote'].includes(nodeType.name);
|
|
111
111
|
};
|
|
112
112
|
|
|
113
|
-
// List type utilities
|
|
114
|
-
|
|
115
|
-
return nodeType.name === 'bulletList' || nodeType.name === 'orderedList';
|
|
116
|
-
};
|
|
117
|
-
export const isTaskList = nodeType => {
|
|
118
|
-
return nodeType.name === 'taskList';
|
|
119
|
-
};
|
|
120
|
-
export const getSupportedListTypes = nodes => {
|
|
121
|
-
return [nodes.bulletList, nodes.orderedList, nodes.taskList].filter(Boolean);
|
|
122
|
-
};
|
|
123
|
-
export const getSupportedListTypesSet = nodes => {
|
|
124
|
-
return new Set(getSupportedListTypes(nodes));
|
|
125
|
-
};
|
|
113
|
+
// List type utilities moved to @atlaskit/editor-common/transforms
|
|
114
|
+
|
|
126
115
|
export const isLayoutNodeType = nodeType => {
|
|
127
116
|
return nodeType.name === 'layoutSection';
|
|
128
117
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* block-menu.tsx generated by @compiled/babel-plugin v0.
|
|
1
|
+
/* block-menu.tsx generated by @compiled/babel-plugin v0.38.1 */
|
|
2
2
|
import "./block-menu.compiled.css";
|
|
3
3
|
import { ax, ix } from "@compiled/react/runtime";
|
|
4
4
|
import React, { useContext, useEffect } from 'react';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
+
import { transformListRecursively, isBulletOrOrderedList, isTaskList, getSupportedListTypesSet } from '@atlaskit/editor-common/transforms';
|
|
2
3
|
import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
3
4
|
import { findChildrenByType } from '@atlaskit/editor-prosemirror/utils';
|
|
4
5
|
import { getInlineNodeTextContent } from '../inline-node-transforms';
|
|
5
|
-
import {
|
|
6
|
-
import { getContentSupportChecker, getSupportedListTypesSet, isBlockNode, isBlockNodeForExtraction, isBlockNodeType, isBulletOrOrderedList, isContainerNode, isContainerNodeType, isHeadingOrParagraphNode, isListNode, isListNodeType, isTaskList } from '../utils';
|
|
6
|
+
import { getContentSupportChecker, isBlockNode, isBlockNodeForExtraction, isBlockNodeType, isContainerNode, isContainerNodeType, isHeadingOrParagraphNode, isListNode, isListNodeType } from '../utils';
|
|
7
7
|
export var unwrapLayoutNodesToTextNodes = function unwrapLayoutNodesToTextNodes(context, finalTargetNodeType) {
|
|
8
8
|
var tr = context.tr,
|
|
9
9
|
sourceNode = context.sourceNode,
|
|
@@ -13,10 +13,16 @@ export var unwrapLayoutNodesToTextNodes = function unwrapLayoutNodesToTextNodes(
|
|
|
13
13
|
var isValid = getContentSupportChecker(finalTargetNodeType);
|
|
14
14
|
var createTextNode = function createTextNode(node) {
|
|
15
15
|
var isTextNode = node.type.name === 'text';
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
var nodeToTransform = node;
|
|
17
|
+
if (isContainerNodeType(finalTargetNodeType) || isListNodeType(finalTargetNodeType)) {
|
|
18
|
+
nodeToTransform = node.mark(node.marks.filter(function (mark) {
|
|
19
|
+
return !['alignment', 'indentation'].includes(mark.type.name);
|
|
20
|
+
}));
|
|
18
21
|
}
|
|
19
|
-
|
|
22
|
+
if (isValid(nodeToTransform) && !isTextNode) {
|
|
23
|
+
return nodeToTransform;
|
|
24
|
+
}
|
|
25
|
+
return targetNodeType.createChecked(targetAttrs, isTextNode ? nodeToTransform : nodeToTransform.content, nodeToTransform.marks);
|
|
20
26
|
};
|
|
21
27
|
if (isBlockNode(sourceNode)) {
|
|
22
28
|
// code block acts like a container, we need to unwrap it
|
|
@@ -183,21 +189,17 @@ var transformToContainerNode = function transformToContainerNode(nodes, targetNo
|
|
|
183
189
|
canBeTransformed: false
|
|
184
190
|
});
|
|
185
191
|
} else {
|
|
186
|
-
// Remove alignment marks as container nodes don't support them
|
|
187
|
-
var nodeWithValidAttrs = node.mark(node.marks.filter(function (mark) {
|
|
188
|
-
return mark.type.name !== 'alignment';
|
|
189
|
-
}));
|
|
190
192
|
var isSameNodeType = node.type === targetNodeType;
|
|
191
193
|
|
|
192
194
|
// If the node is not valid and not the same type, we cannot transform it
|
|
193
|
-
if (!isNodeValid(
|
|
195
|
+
if (!isNodeValid(node) && !isSameNodeType) {
|
|
194
196
|
newNodes.push({
|
|
195
197
|
node: node,
|
|
196
198
|
canBeTransformed: false
|
|
197
199
|
});
|
|
198
200
|
return;
|
|
199
201
|
}
|
|
200
|
-
var _nodes = isSameNodeType ? node.content.content : [
|
|
202
|
+
var _nodes = isSameNodeType ? node.content.content : [node];
|
|
201
203
|
if (newNodes.length === 0) {
|
|
202
204
|
newNodes.push({
|
|
203
205
|
node: _nodes,
|
|
@@ -315,8 +317,20 @@ export var transformToListNode = function transformToListNode(nodes, targetNodeT
|
|
|
315
317
|
}
|
|
316
318
|
});
|
|
317
319
|
};
|
|
318
|
-
export var convertUnwrappedLayoutContent = function convertUnwrappedLayoutContent(nodes, targetNodeType, schema) {
|
|
319
|
-
if (nodes.length === 1 && nodes[0].content.size === 0) {
|
|
320
|
+
export var convertUnwrappedLayoutContent = function convertUnwrappedLayoutContent(nodes, targetNodeType, schema, targetAttrs) {
|
|
321
|
+
if (nodes.length === 1 && nodes[0].content.size === 0 && !isContainerNodeType(targetNodeType)) {
|
|
322
|
+
if (isBlockNodeType(targetNodeType)) {
|
|
323
|
+
if (['heading', 'paragraph'].includes(targetNodeType.name)) {
|
|
324
|
+
return [targetNodeType.createChecked(targetAttrs)];
|
|
325
|
+
}
|
|
326
|
+
if (targetNodeType.name === 'codeBlock') {
|
|
327
|
+
return [targetNodeType.createChecked()];
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
if (isListNodeType(targetNodeType)) {
|
|
331
|
+
var listItem = isTaskList(targetNodeType) ? schema.nodes.taskItem.createChecked() : schema.nodes.listItem.createChecked(null, schema.nodes.paragraph.createChecked());
|
|
332
|
+
return [targetNodeType.createChecked(null, listItem)];
|
|
333
|
+
}
|
|
320
334
|
return nodes;
|
|
321
335
|
}
|
|
322
336
|
if (isBlockNodeType(targetNodeType)) {
|
|
@@ -53,7 +53,7 @@ export var transformLayoutNode = function transformLayoutNode(context) {
|
|
|
53
53
|
var newContent = unwrapLayoutNodesToTextNodes(context, targetNodeType);
|
|
54
54
|
unwrappedContent.push.apply(unwrappedContent, _toConsumableArray(newContent));
|
|
55
55
|
});
|
|
56
|
-
var newColumnContent = convertUnwrappedLayoutContent(unwrappedContent, targetNodeType, schema);
|
|
56
|
+
var newColumnContent = convertUnwrappedLayoutContent(unwrappedContent, targetNodeType, schema, targetAttrs);
|
|
57
57
|
layoutColumnNodes.push(layoutColumn.createChecked(child.attrs, Fragment.fromArray(newColumnContent), child.marks));
|
|
58
58
|
}
|
|
59
59
|
});
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
+
import { transformBetweenListTypes, isTaskList } from '@atlaskit/editor-common/transforms';
|
|
2
3
|
import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
3
4
|
import { findWrapping } from '@atlaskit/editor-prosemirror/transform';
|
|
4
|
-
import { transformListStructure } from './list/transformBetweenListTypes';
|
|
5
5
|
import { transformOrderedUnorderedListToBlockNodes } from './list/transformOrderedUnorderedListToBlockNodes';
|
|
6
6
|
import { transformTaskListToBlockNodes } from './list/transformTaskListToBlockNodes';
|
|
7
7
|
import { transformToTaskList } from './list/transformToTaskList';
|
|
8
|
-
import {
|
|
8
|
+
import { isBlockNodeType, isContainerNodeType, isListNodeType } from './utils';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Transform selection to list type
|
|
@@ -152,51 +152,4 @@ export var liftListToBlockType = function liftListToBlockType() {
|
|
|
152
152
|
return null;
|
|
153
153
|
};
|
|
154
154
|
|
|
155
|
-
|
|
156
|
-
* Transform between different list types
|
|
157
|
-
*/
|
|
158
|
-
export var transformBetweenListTypes = function transformBetweenListTypes(context) {
|
|
159
|
-
var tr = context.tr,
|
|
160
|
-
sourceNode = context.sourceNode,
|
|
161
|
-
sourcePos = context.sourcePos,
|
|
162
|
-
targetNodeType = context.targetNodeType;
|
|
163
|
-
var nodes = tr.doc.type.schema.nodes;
|
|
164
|
-
var sourceListType = sourceNode.type;
|
|
165
|
-
var isSourceBulletOrOrdered = isBulletOrOrderedList(sourceListType);
|
|
166
|
-
var isTargetTask = isTaskList(targetNodeType);
|
|
167
|
-
var isSourceTask = isTaskList(sourceListType);
|
|
168
|
-
var isTargetBulletOrOrdered = isBulletOrOrderedList(targetNodeType);
|
|
169
|
-
|
|
170
|
-
// Check if we need structure transformation
|
|
171
|
-
var needsStructureTransform = isSourceBulletOrOrdered && isTargetTask || isSourceTask && isTargetBulletOrOrdered;
|
|
172
|
-
try {
|
|
173
|
-
if (!needsStructureTransform) {
|
|
174
|
-
// Simple type change for same structure lists (bullet <-> ordered)
|
|
175
|
-
// Apply to the main list
|
|
176
|
-
tr.setNodeMarkup(sourcePos, targetNodeType);
|
|
177
|
-
|
|
178
|
-
// Apply to nested lists
|
|
179
|
-
var listStart = sourcePos;
|
|
180
|
-
var listEnd = sourcePos + sourceNode.nodeSize;
|
|
181
|
-
var supportedListTypesSet = getSupportedListTypesSet(nodes);
|
|
182
|
-
tr.doc.nodesBetween(listStart, listEnd, function (node, pos, parent) {
|
|
183
|
-
// Only process nested lists (not the root list we already handled)
|
|
184
|
-
if (supportedListTypesSet.has(node.type) && pos !== sourcePos) {
|
|
185
|
-
var isNestedList = parent && (supportedListTypesSet.has(parent.type) || parent.type === nodes.listItem);
|
|
186
|
-
if (isNestedList) {
|
|
187
|
-
var shouldTransformNode = node.type === sourceListType || isBulletOrOrderedList(node.type) && isTargetBulletOrOrdered;
|
|
188
|
-
if (shouldTransformNode) {
|
|
189
|
-
tr.setNodeMarkup(pos, targetNodeType);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
return true; // Continue traversing
|
|
194
|
-
});
|
|
195
|
-
return tr;
|
|
196
|
-
} else {
|
|
197
|
-
return transformListStructure(context);
|
|
198
|
-
}
|
|
199
|
-
} catch (_unused) {
|
|
200
|
-
return null;
|
|
201
|
-
}
|
|
202
|
-
};
|
|
155
|
+
// transformBetweenListTypes is now imported from @atlaskit/editor-common/transforms
|
|
@@ -110,19 +110,8 @@ export var isContainerNodeType = function isContainerNodeType(nodeType) {
|
|
|
110
110
|
return ['panel', 'expand', 'blockquote'].includes(nodeType.name);
|
|
111
111
|
};
|
|
112
112
|
|
|
113
|
-
// List type utilities
|
|
114
|
-
|
|
115
|
-
return nodeType.name === 'bulletList' || nodeType.name === 'orderedList';
|
|
116
|
-
};
|
|
117
|
-
export var isTaskList = function isTaskList(nodeType) {
|
|
118
|
-
return nodeType.name === 'taskList';
|
|
119
|
-
};
|
|
120
|
-
export var getSupportedListTypes = function getSupportedListTypes(nodes) {
|
|
121
|
-
return [nodes.bulletList, nodes.orderedList, nodes.taskList].filter(Boolean);
|
|
122
|
-
};
|
|
123
|
-
export var getSupportedListTypesSet = function getSupportedListTypesSet(nodes) {
|
|
124
|
-
return new Set(getSupportedListTypes(nodes));
|
|
125
|
-
};
|
|
113
|
+
// List type utilities moved to @atlaskit/editor-common/transforms
|
|
114
|
+
|
|
126
115
|
export var isLayoutNodeType = function isLayoutNodeType(nodeType) {
|
|
127
116
|
return nodeType.name === 'layoutSection';
|
|
128
117
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* block-menu.tsx generated by @compiled/babel-plugin v0.
|
|
1
|
+
/* block-menu.tsx generated by @compiled/babel-plugin v0.38.1 */
|
|
2
2
|
import "./block-menu.compiled.css";
|
|
3
3
|
import { ax, ix } from "@compiled/react/runtime";
|
|
4
4
|
import React, { useContext, useEffect } from 'react';
|