@atlaskit/editor-plugin-block-menu 6.0.8 → 6.0.10
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 +15 -0
- package/dist/cjs/editor-commands/transform-node-utils/TRANSFORMATION_MATRIX.js +224 -0
- package/dist/cjs/editor-commands/transform-node-utils/steps/applyTargetTextTypeStep.js +4 -0
- package/dist/cjs/editor-commands/transform-node-utils/steps/convertEachNodeStep.js +58 -1
- package/dist/cjs/editor-commands/transform-node-utils/steps/wrapMixedContentStep.js +12 -1
- package/dist/cjs/editor-commands/transform-node-utils/transform.js +4 -236
- package/dist/cjs/editor-commands/transform-node-utils/utils.js +33 -11
- package/dist/es2019/editor-commands/transform-node-utils/TRANSFORMATION_MATRIX.js +219 -0
- package/dist/es2019/editor-commands/transform-node-utils/steps/applyTargetTextTypeStep.js +4 -0
- package/dist/es2019/editor-commands/transform-node-utils/steps/convertEachNodeStep.js +56 -1
- package/dist/es2019/editor-commands/transform-node-utils/steps/wrapMixedContentStep.js +13 -2
- package/dist/es2019/editor-commands/transform-node-utils/transform.js +5 -238
- package/dist/es2019/editor-commands/transform-node-utils/utils.js +32 -10
- package/dist/esm/editor-commands/transform-node-utils/TRANSFORMATION_MATRIX.js +219 -0
- package/dist/esm/editor-commands/transform-node-utils/steps/applyTargetTextTypeStep.js +4 -0
- package/dist/esm/editor-commands/transform-node-utils/steps/convertEachNodeStep.js +58 -1
- package/dist/esm/editor-commands/transform-node-utils/steps/wrapMixedContentStep.js +13 -2
- package/dist/esm/editor-commands/transform-node-utils/transform.js +5 -238
- package/dist/esm/editor-commands/transform-node-utils/utils.js +32 -10
- package/dist/types/editor-commands/transform-node-utils/TRANSFORMATION_MATRIX.d.ts +2 -0
- package/dist/types/editor-commands/transform-node-utils/utils.d.ts +10 -5
- package/dist/types-ts4.5/editor-commands/transform-node-utils/TRANSFORMATION_MATRIX.d.ts +2 -0
- package/dist/types-ts4.5/editor-commands/transform-node-utils/utils.d.ts +10 -5
- package/package.json +4 -4
|
@@ -127,20 +127,42 @@ export const getBlockNodesInRange = range => {
|
|
|
127
127
|
};
|
|
128
128
|
|
|
129
129
|
/**
|
|
130
|
-
*
|
|
131
|
-
*
|
|
130
|
+
* Splits a text node (paragraph/heading) into parts for codeBlock conversion.
|
|
131
|
+
* Returns an array of:
|
|
132
|
+
* - strings (text content that can go into codeBlock)
|
|
133
|
+
* - PMNodes (incompatible inline nodes wrapped in paragraphs that need to break out)
|
|
132
134
|
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
+
* This preserves inline nodes (like status, inlineExtension) that cannot be represented as plain text.
|
|
136
|
+
*
|
|
137
|
+
* @param node - The text node (paragraph or heading) to split
|
|
138
|
+
* @param schema - The schema to use for creating paragraph nodes
|
|
139
|
+
* @returns Array of strings (for codeBlock) and PMNodes (to break out)
|
|
135
140
|
*/
|
|
136
|
-
export const
|
|
137
|
-
const
|
|
141
|
+
export const splitTextNodeForCodeBlock = (node, schema) => {
|
|
142
|
+
const result = [];
|
|
143
|
+
let currentText = '';
|
|
144
|
+
node.content.forEach(child => {
|
|
138
145
|
if (child.isText) {
|
|
139
|
-
|
|
146
|
+
currentText += child.text || '';
|
|
140
147
|
} else if (child.type.name === 'hardBreak') {
|
|
141
|
-
|
|
148
|
+
currentText += '\n';
|
|
149
|
+
} else {
|
|
150
|
+
// Incompatible inline node (status, inlineExtension, etc.)
|
|
151
|
+
// Flush accumulated text if any
|
|
152
|
+
if (currentText) {
|
|
153
|
+
result.push(currentText);
|
|
154
|
+
currentText = '';
|
|
155
|
+
}
|
|
156
|
+
// Wrap the inline node in a paragraph and add it to break out
|
|
157
|
+
const paragraph = schema.nodes.paragraph.create({}, child);
|
|
158
|
+
result.push(paragraph);
|
|
142
159
|
}
|
|
143
|
-
return '';
|
|
144
160
|
});
|
|
145
|
-
|
|
161
|
+
|
|
162
|
+
// Don't forget remaining text (or empty string for empty nodes)
|
|
163
|
+
// Always push at least an empty string so empty paragraphs create empty codeBlocks
|
|
164
|
+
if (currentText || result.length === 0) {
|
|
165
|
+
result.push(currentText);
|
|
166
|
+
}
|
|
167
|
+
return result;
|
|
146
168
|
};
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { flattenStep } from './flattenStep';
|
|
2
|
+
import { applyTargetTextTypeStep } from './steps/applyTargetTextTypeStep';
|
|
3
|
+
import { convertEachNodeStep } from './steps/convertEachNodeStep';
|
|
4
|
+
import { decisionListToListStep } from './steps/decisionListToListStep';
|
|
5
|
+
import { flattenListStep } from './steps/flattenListStep';
|
|
6
|
+
import { listToDecisionListStep } from './steps/listToDecisionListStep';
|
|
7
|
+
import { listToListStep } from './steps/listToListStep';
|
|
8
|
+
import { mergeNeighbourListsStep } from './steps/mergeNeighbourListsStep';
|
|
9
|
+
import { unwrapLayoutStep } from './steps/unwrapLayoutStep';
|
|
10
|
+
import { unwrapListStep } from './steps/unwrapListStep';
|
|
11
|
+
import { wrapBlockquoteToDecisionListStep } from './steps/wrapBlockquoteToDecisionListStep';
|
|
12
|
+
import { wrapMixedContentStep } from './steps/wrapMixedContentStep';
|
|
13
|
+
import { unwrapExpandStep } from './unwrapExpandStep';
|
|
14
|
+
import { unwrapStep } from './unwrapStep';
|
|
15
|
+
import { wrapIntoListStep } from './wrapIntoListStep';
|
|
16
|
+
import { wrapStep } from './wrapStep';
|
|
17
|
+
|
|
18
|
+
// Transform steps for all node type pairs.
|
|
19
|
+
// If a transformation is not defined (undefined), it is not available.
|
|
20
|
+
export var TRANSFORMATION_MATRIX = {
|
|
21
|
+
paragraph: {
|
|
22
|
+
heading: [flattenStep, applyTargetTextTypeStep],
|
|
23
|
+
blockquote: [wrapMixedContentStep],
|
|
24
|
+
codeBlock: [wrapMixedContentStep],
|
|
25
|
+
expand: [wrapMixedContentStep],
|
|
26
|
+
nestedExpand: [wrapMixedContentStep],
|
|
27
|
+
layoutSection: [wrapMixedContentStep],
|
|
28
|
+
panel: [wrapMixedContentStep],
|
|
29
|
+
bulletList: [wrapIntoListStep],
|
|
30
|
+
orderedList: [wrapIntoListStep],
|
|
31
|
+
taskList: [wrapIntoListStep],
|
|
32
|
+
decisionList: [wrapIntoListStep]
|
|
33
|
+
},
|
|
34
|
+
heading: {
|
|
35
|
+
heading: [flattenStep, applyTargetTextTypeStep],
|
|
36
|
+
paragraph: [flattenStep, applyTargetTextTypeStep],
|
|
37
|
+
blockquote: [wrapMixedContentStep],
|
|
38
|
+
codeBlock: [wrapMixedContentStep],
|
|
39
|
+
expand: [wrapMixedContentStep],
|
|
40
|
+
nestedExpand: [wrapMixedContentStep],
|
|
41
|
+
layoutSection: [wrapMixedContentStep],
|
|
42
|
+
panel: [wrapMixedContentStep],
|
|
43
|
+
bulletList: [wrapIntoListStep],
|
|
44
|
+
orderedList: [wrapIntoListStep],
|
|
45
|
+
taskList: [wrapIntoListStep],
|
|
46
|
+
decisionList: [wrapIntoListStep]
|
|
47
|
+
},
|
|
48
|
+
panel: {
|
|
49
|
+
blockquote: [unwrapStep, wrapMixedContentStep],
|
|
50
|
+
codeBlock: [unwrapStep, wrapMixedContentStep],
|
|
51
|
+
expand: [unwrapStep, wrapStep],
|
|
52
|
+
nestedExpand: [unwrapStep, wrapStep],
|
|
53
|
+
layoutSection: [unwrapStep, wrapMixedContentStep],
|
|
54
|
+
paragraph: [unwrapStep]
|
|
55
|
+
},
|
|
56
|
+
expand: {
|
|
57
|
+
panel: [unwrapExpandStep, wrapMixedContentStep],
|
|
58
|
+
blockquote: [unwrapExpandStep, wrapMixedContentStep],
|
|
59
|
+
layoutSection: [unwrapExpandStep, wrapMixedContentStep],
|
|
60
|
+
nestedExpand: [unwrapExpandStep, wrapStep],
|
|
61
|
+
paragraph: [unwrapExpandStep]
|
|
62
|
+
},
|
|
63
|
+
nestedExpand: {
|
|
64
|
+
panel: [unwrapExpandStep, wrapMixedContentStep],
|
|
65
|
+
blockquote: [unwrapExpandStep, wrapMixedContentStep],
|
|
66
|
+
layoutSection: [unwrapExpandStep, wrapMixedContentStep],
|
|
67
|
+
paragraph: [unwrapExpandStep]
|
|
68
|
+
},
|
|
69
|
+
blockquote: {
|
|
70
|
+
expand: [wrapStep],
|
|
71
|
+
nestedExpand: [wrapStep],
|
|
72
|
+
layoutSection: [wrapMixedContentStep],
|
|
73
|
+
panel: [unwrapStep, wrapStep],
|
|
74
|
+
paragraph: [unwrapStep],
|
|
75
|
+
heading: [unwrapStep, applyTargetTextTypeStep],
|
|
76
|
+
decisionList: [unwrapStep, wrapBlockquoteToDecisionListStep]
|
|
77
|
+
},
|
|
78
|
+
layoutSection: {
|
|
79
|
+
blockquote: [unwrapLayoutStep, wrapMixedContentStep],
|
|
80
|
+
expand: [unwrapLayoutStep, wrapStep],
|
|
81
|
+
nestedExpand: [unwrapLayoutStep, wrapStep],
|
|
82
|
+
panel: [unwrapLayoutStep, wrapMixedContentStep],
|
|
83
|
+
paragraph: [unwrapLayoutStep]
|
|
84
|
+
},
|
|
85
|
+
codeBlock: {
|
|
86
|
+
blockquote: [wrapStep],
|
|
87
|
+
expand: [wrapStep],
|
|
88
|
+
nestedExpand: [wrapStep],
|
|
89
|
+
layoutSection: [wrapMixedContentStep],
|
|
90
|
+
panel: [wrapStep],
|
|
91
|
+
paragraph: [applyTargetTextTypeStep]
|
|
92
|
+
},
|
|
93
|
+
bulletList: {
|
|
94
|
+
orderedList: [listToListStep],
|
|
95
|
+
taskList: [listToListStep],
|
|
96
|
+
decisionList: [flattenListStep, listToDecisionListStep],
|
|
97
|
+
blockquote: [wrapStep],
|
|
98
|
+
expand: [wrapStep],
|
|
99
|
+
nestedExpand: [wrapStep],
|
|
100
|
+
layoutSection: [wrapMixedContentStep],
|
|
101
|
+
panel: [wrapStep],
|
|
102
|
+
paragraph: [flattenListStep, unwrapListStep, applyTargetTextTypeStep]
|
|
103
|
+
},
|
|
104
|
+
orderedList: {
|
|
105
|
+
bulletList: [listToListStep],
|
|
106
|
+
taskList: [listToListStep],
|
|
107
|
+
decisionList: [flattenListStep, listToDecisionListStep],
|
|
108
|
+
blockquote: [wrapStep],
|
|
109
|
+
expand: [wrapStep],
|
|
110
|
+
nestedExpand: [wrapStep],
|
|
111
|
+
layoutSection: [wrapMixedContentStep],
|
|
112
|
+
panel: [wrapStep],
|
|
113
|
+
paragraph: [flattenListStep, unwrapListStep, applyTargetTextTypeStep]
|
|
114
|
+
},
|
|
115
|
+
taskList: {
|
|
116
|
+
bulletList: [listToListStep],
|
|
117
|
+
orderedList: [listToListStep],
|
|
118
|
+
decisionList: [flattenListStep, listToDecisionListStep],
|
|
119
|
+
expand: [wrapStep],
|
|
120
|
+
nestedExpand: [wrapStep],
|
|
121
|
+
layoutSection: [wrapMixedContentStep],
|
|
122
|
+
panel: [wrapStep],
|
|
123
|
+
paragraph: [flattenListStep, unwrapListStep, applyTargetTextTypeStep]
|
|
124
|
+
},
|
|
125
|
+
table: {
|
|
126
|
+
expand: [wrapStep],
|
|
127
|
+
nestedExpand: [wrapStep],
|
|
128
|
+
layoutSection: [wrapMixedContentStep]
|
|
129
|
+
},
|
|
130
|
+
mediaSingle: {
|
|
131
|
+
blockquote: [wrapStep],
|
|
132
|
+
expand: [wrapStep],
|
|
133
|
+
nestedExpand: [wrapStep],
|
|
134
|
+
layoutSection: [wrapMixedContentStep],
|
|
135
|
+
panel: [wrapStep],
|
|
136
|
+
bulletList: [wrapIntoListStep],
|
|
137
|
+
orderedList: [wrapIntoListStep]
|
|
138
|
+
},
|
|
139
|
+
mediaGroup: {
|
|
140
|
+
blockquote: [wrapStep],
|
|
141
|
+
expand: [wrapStep],
|
|
142
|
+
nestedExpand: [wrapStep],
|
|
143
|
+
layoutSection: [wrapMixedContentStep],
|
|
144
|
+
panel: [wrapStep]
|
|
145
|
+
},
|
|
146
|
+
media: {
|
|
147
|
+
blockquote: [wrapStep],
|
|
148
|
+
codeBlock: [wrapStep],
|
|
149
|
+
expand: [wrapStep],
|
|
150
|
+
nestedExpand: [wrapStep],
|
|
151
|
+
layoutSection: [wrapStep],
|
|
152
|
+
panel: [wrapStep],
|
|
153
|
+
bulletList: [wrapIntoListStep],
|
|
154
|
+
orderedList: [wrapIntoListStep],
|
|
155
|
+
taskList: [wrapIntoListStep],
|
|
156
|
+
decisionList: [wrapIntoListStep]
|
|
157
|
+
},
|
|
158
|
+
decisionList: {
|
|
159
|
+
bulletList: [decisionListToListStep],
|
|
160
|
+
orderedList: [decisionListToListStep],
|
|
161
|
+
taskList: [decisionListToListStep],
|
|
162
|
+
blockquote: [unwrapListStep, wrapStep],
|
|
163
|
+
codeBlock: [unwrapListStep, wrapMixedContentStep],
|
|
164
|
+
expand: [wrapStep],
|
|
165
|
+
nestedExpand: [wrapStep],
|
|
166
|
+
layoutSection: [wrapMixedContentStep],
|
|
167
|
+
panel: [wrapStep],
|
|
168
|
+
paragraph: [flattenListStep, unwrapListStep, applyTargetTextTypeStep],
|
|
169
|
+
heading: [flattenListStep, unwrapListStep, applyTargetTextTypeStep]
|
|
170
|
+
},
|
|
171
|
+
blockCard: {
|
|
172
|
+
expand: [wrapStep],
|
|
173
|
+
nestedExpand: [wrapStep],
|
|
174
|
+
layoutSection: [wrapMixedContentStep],
|
|
175
|
+
panel: [wrapStep]
|
|
176
|
+
},
|
|
177
|
+
embedCard: {
|
|
178
|
+
expand: [wrapStep],
|
|
179
|
+
nestedExpand: [wrapStep],
|
|
180
|
+
layoutSection: [wrapMixedContentStep]
|
|
181
|
+
},
|
|
182
|
+
extension: {
|
|
183
|
+
blockquote: [wrapStep],
|
|
184
|
+
expand: [wrapStep],
|
|
185
|
+
nestedExpand: [wrapStep],
|
|
186
|
+
layoutSection: [wrapMixedContentStep],
|
|
187
|
+
panel: [wrapStep]
|
|
188
|
+
},
|
|
189
|
+
bodiedExtension: {
|
|
190
|
+
nestedExpand: [wrapStep],
|
|
191
|
+
layoutSection: [wrapMixedContentStep]
|
|
192
|
+
},
|
|
193
|
+
multiBodiedExtension: {
|
|
194
|
+
blockquote: [wrapStep],
|
|
195
|
+
codeBlock: [wrapStep],
|
|
196
|
+
expand: [wrapStep],
|
|
197
|
+
nestedExpand: [wrapStep],
|
|
198
|
+
layoutSection: [wrapStep],
|
|
199
|
+
panel: [wrapStep],
|
|
200
|
+
bulletList: [wrapIntoListStep],
|
|
201
|
+
orderedList: [wrapIntoListStep],
|
|
202
|
+
taskList: [wrapIntoListStep],
|
|
203
|
+
decisionList: [wrapIntoListStep]
|
|
204
|
+
},
|
|
205
|
+
multi: {
|
|
206
|
+
blockquote: [wrapMixedContentStep],
|
|
207
|
+
codeBlock: [wrapMixedContentStep],
|
|
208
|
+
expand: [wrapMixedContentStep],
|
|
209
|
+
nestedExpand: [wrapMixedContentStep],
|
|
210
|
+
layoutSection: [wrapMixedContentStep],
|
|
211
|
+
panel: [wrapMixedContentStep],
|
|
212
|
+
bulletList: [convertEachNodeStep, mergeNeighbourListsStep],
|
|
213
|
+
orderedList: [convertEachNodeStep, mergeNeighbourListsStep],
|
|
214
|
+
taskList: [convertEachNodeStep, mergeNeighbourListsStep],
|
|
215
|
+
decisionList: [convertEachNodeStep, mergeNeighbourListsStep],
|
|
216
|
+
paragraph: [convertEachNodeStep],
|
|
217
|
+
heading: [applyTargetTextTypeStep]
|
|
218
|
+
}
|
|
219
|
+
};
|
|
@@ -31,6 +31,10 @@ export var applyTargetTextTypeStep = function applyTargetTextTypeStep(nodes, con
|
|
|
31
31
|
return nodes;
|
|
32
32
|
}
|
|
33
33
|
return nodes.map(function (node) {
|
|
34
|
+
// If codeblock, return nodes as is
|
|
35
|
+
if (targetNodeTypeName === 'heading' && node.type.name === 'codeBlock') {
|
|
36
|
+
return node;
|
|
37
|
+
}
|
|
34
38
|
if (node.isTextblock) {
|
|
35
39
|
// Convert textblock nodes to the target type with content preserved
|
|
36
40
|
var attrs = {};
|
|
@@ -3,6 +3,46 @@ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol
|
|
|
3
3
|
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
4
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
5
|
import { convertNodesToTargetType } from '../transform';
|
|
6
|
+
/**
|
|
7
|
+
* Handles the edge case where transforming multi-selection to decisionList results in
|
|
8
|
+
* all content breaking out (no valid children for the target). In this case, creates an empty
|
|
9
|
+
* decisionList to ensure the target type exists.
|
|
10
|
+
*
|
|
11
|
+
* Similar to handleEmptyContainerEdgeCase in wrapMixedContentStep, but specifically for
|
|
12
|
+
* multi-to-decisionList transformations where blockquotes break out.
|
|
13
|
+
*
|
|
14
|
+
* @param result - The current result nodes after processing
|
|
15
|
+
* @param hasCreatedDecisionList - Whether a decisionList was already created during processing
|
|
16
|
+
* @param targetNodeTypeName - The target node type name
|
|
17
|
+
* @param schema - The schema
|
|
18
|
+
* @returns The result nodes with an empty decisionList prepended if needed, or the original result
|
|
19
|
+
*/
|
|
20
|
+
var handleEmptyDecisionListEdgeCase = function handleEmptyDecisionListEdgeCase(result, hasCreatedDecisionList, targetNodeTypeName, schema) {
|
|
21
|
+
// Only apply this edge case for decisionList target
|
|
22
|
+
if (targetNodeTypeName !== 'decisionList') {
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// If no decisionList was created but we have nodes in result, all content broke out
|
|
27
|
+
var allContentBrokeOut = !hasCreatedDecisionList && result.length > 0;
|
|
28
|
+
if (!allContentBrokeOut) {
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Create an empty decisionList
|
|
33
|
+
var decisionListType = schema.nodes.decisionList;
|
|
34
|
+
var decisionItemType = schema.nodes.decisionItem;
|
|
35
|
+
if (decisionListType && decisionItemType) {
|
|
36
|
+
var emptyDecisionItem = decisionItemType.createAndFill();
|
|
37
|
+
if (emptyDecisionItem) {
|
|
38
|
+
var emptyDecisionList = decisionListType.createAndFill({}, [emptyDecisionItem]);
|
|
39
|
+
if (emptyDecisionList) {
|
|
40
|
+
return [emptyDecisionList].concat(_toConsumableArray(result));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
6
46
|
export var convertEachNodeStep = function convertEachNodeStep(nodes, context) {
|
|
7
47
|
var schema = context.schema,
|
|
8
48
|
targetNodeTypeName = context.targetNodeTypeName,
|
|
@@ -11,12 +51,19 @@ export var convertEachNodeStep = function convertEachNodeStep(nodes, context) {
|
|
|
11
51
|
if (!targetNodeType) {
|
|
12
52
|
return nodes;
|
|
13
53
|
}
|
|
54
|
+
var blockquoteType = schema.nodes.blockquote;
|
|
14
55
|
var resultNodes = [];
|
|
56
|
+
var hasCreatedDecisionList = false;
|
|
15
57
|
var _iterator = _createForOfIteratorHelper(nodes),
|
|
16
58
|
_step;
|
|
17
59
|
try {
|
|
18
60
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
19
61
|
var node = _step.value;
|
|
62
|
+
// Edge case: blockquotes should break out when transforming to decisionList
|
|
63
|
+
if (targetNodeTypeName === 'decisionList' && blockquoteType && node.type === blockquoteType) {
|
|
64
|
+
resultNodes.push(node);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
20
67
|
var transformedNodes = convertNodesToTargetType({
|
|
21
68
|
sourceNodes: [node],
|
|
22
69
|
targetNodeType: targetNodeType,
|
|
@@ -26,14 +73,24 @@ export var convertEachNodeStep = function convertEachNodeStep(nodes, context) {
|
|
|
26
73
|
});
|
|
27
74
|
if (transformedNodes.length > 0) {
|
|
28
75
|
resultNodes.push.apply(resultNodes, _toConsumableArray(transformedNodes));
|
|
76
|
+
// Track if we created a decisionList
|
|
77
|
+
|
|
78
|
+
if (targetNodeTypeName === 'decisionList' && transformedNodes.some(function (n) {
|
|
79
|
+
return n.type === targetNodeType;
|
|
80
|
+
})) {
|
|
81
|
+
hasCreatedDecisionList = true;
|
|
82
|
+
}
|
|
29
83
|
} else {
|
|
30
84
|
resultNodes.push(node);
|
|
31
85
|
}
|
|
32
86
|
}
|
|
87
|
+
|
|
88
|
+
// Handle edge case: if no decisionList was created, create an empty one
|
|
33
89
|
} catch (err) {
|
|
34
90
|
_iterator.e(err);
|
|
35
91
|
} finally {
|
|
36
92
|
_iterator.f();
|
|
37
93
|
}
|
|
38
|
-
|
|
94
|
+
var finalResult = handleEmptyDecisionListEdgeCase(resultNodes, hasCreatedDecisionList, targetNodeTypeName, schema);
|
|
95
|
+
return finalResult;
|
|
39
96
|
};
|
|
@@ -2,7 +2,7 @@ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
|
2
2
|
import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
3
3
|
import { removeDisallowedMarks } from '../marks';
|
|
4
4
|
import { NODE_CATEGORY_BY_TYPE } from '../types';
|
|
5
|
-
import { convertTextNodeToParagraph,
|
|
5
|
+
import { convertTextNodeToParagraph, isTextNode, splitTextNodeForCodeBlock } from '../utils';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Creates a layout section with two columns, where the first column contains the provided content.
|
|
@@ -149,7 +149,18 @@ export var wrapMixedContentStep = function wrapMixedContentStep(nodes, context)
|
|
|
149
149
|
(_currentContainerCont = currentContainerContent).push.apply(_currentContainerCont, _toConsumableArray(removeDisallowedMarks([node], validationType)));
|
|
150
150
|
};
|
|
151
151
|
var handleCodeblockTextNode = function handleCodeblockTextNode(node) {
|
|
152
|
-
|
|
152
|
+
// Split the text node into text parts and incompatible inline nodes
|
|
153
|
+
var parts = splitTextNodeForCodeBlock(node, schema);
|
|
154
|
+
parts.forEach(function (part) {
|
|
155
|
+
if (typeof part === 'string') {
|
|
156
|
+
// Text content - add to current codeBlock
|
|
157
|
+
currentContainerContent.push(part);
|
|
158
|
+
} else {
|
|
159
|
+
// Incompatible inline node wrapped in paragraph - break it out
|
|
160
|
+
flushCurrentContainer();
|
|
161
|
+
result.push(part);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
153
164
|
};
|
|
154
165
|
var handleConvertibleTextNode = function handleConvertibleTextNode(node) {
|
|
155
166
|
var paragraph = convertTextNodeToParagraph(node, schema);
|
|
@@ -1,236 +1,6 @@
|
|
|
1
1
|
import { getTargetNodeTypeNameInContext } from '../transform-node-utils/utils';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { convertEachNodeStep } from './steps/convertEachNodeStep';
|
|
5
|
-
import { decisionListToListStep } from './steps/decisionListToListStep';
|
|
6
|
-
import { flattenListStep } from './steps/flattenListStep';
|
|
7
|
-
import { listToDecisionListStep } from './steps/listToDecisionListStep';
|
|
8
|
-
import { listToListStep } from './steps/listToListStep';
|
|
9
|
-
import { mergeNeighbourListsStep } from './steps/mergeNeighbourListsStep';
|
|
10
|
-
import { unwrapLayoutStep } from './steps/unwrapLayoutStep';
|
|
11
|
-
import { unwrapListStep } from './steps/unwrapListStep';
|
|
12
|
-
import { wrapBlockquoteToDecisionListStep } from './steps/wrapBlockquoteToDecisionListStep';
|
|
13
|
-
import { wrapMixedContentStep } from './steps/wrapMixedContentStep';
|
|
14
|
-
import { getNodeName, NODE_CATEGORY_BY_TYPE, toNodeTypeValue } from './types';
|
|
15
|
-
import { unwrapExpandStep } from './unwrapExpandStep';
|
|
16
|
-
import { unwrapStep } from './unwrapStep';
|
|
17
|
-
import { wrapIntoListStep } from './wrapIntoListStep';
|
|
18
|
-
import { wrapStep } from './wrapStep';
|
|
19
|
-
|
|
20
|
-
// Transform steps for combinations of node categories (block/container/list/text)
|
|
21
|
-
var TRANSFORM_STEPS = {
|
|
22
|
-
atomic: {
|
|
23
|
-
atomic: undefined,
|
|
24
|
-
container: [wrapStep],
|
|
25
|
-
list: [wrapIntoListStep],
|
|
26
|
-
text: undefined,
|
|
27
|
-
multi: undefined
|
|
28
|
-
},
|
|
29
|
-
container: {
|
|
30
|
-
atomic: undefined,
|
|
31
|
-
container: [unwrapStep, wrapStep],
|
|
32
|
-
list: undefined,
|
|
33
|
-
text: [unwrapStep],
|
|
34
|
-
multi: undefined
|
|
35
|
-
},
|
|
36
|
-
list: {
|
|
37
|
-
atomic: undefined,
|
|
38
|
-
container: [wrapStep],
|
|
39
|
-
list: [listToListStep],
|
|
40
|
-
text: [flattenListStep, unwrapListStep, applyTargetTextTypeStep],
|
|
41
|
-
multi: undefined
|
|
42
|
-
},
|
|
43
|
-
text: {
|
|
44
|
-
atomic: undefined,
|
|
45
|
-
container: [wrapMixedContentStep],
|
|
46
|
-
list: [wrapIntoListStep],
|
|
47
|
-
text: [flattenStep, applyTargetTextTypeStep],
|
|
48
|
-
multi: undefined
|
|
49
|
-
},
|
|
50
|
-
multi: {
|
|
51
|
-
atomic: undefined,
|
|
52
|
-
container: [wrapMixedContentStep],
|
|
53
|
-
list: [convertEachNodeStep, mergeNeighbourListsStep],
|
|
54
|
-
text: [convertEachNodeStep],
|
|
55
|
-
multi: undefined
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
// Transform steps for specific pairs of node types that cannot be processed
|
|
60
|
-
// using generic rules/steps from TRANSFORM_STEPS.
|
|
61
|
-
// Use 'null' to indicate unavailable transfrorm for a case where TRANSFORM_STEPS are not undefined.
|
|
62
|
-
var TRANSFORM_STEPS_OVERRIDE = {
|
|
63
|
-
paragraph: {
|
|
64
|
-
paragraph: null
|
|
65
|
-
},
|
|
66
|
-
heading: {},
|
|
67
|
-
panel: {
|
|
68
|
-
panel: null,
|
|
69
|
-
layoutSection: [unwrapStep, wrapMixedContentStep],
|
|
70
|
-
codeBlock: [unwrapStep, wrapMixedContentStep],
|
|
71
|
-
blockquote: [unwrapStep, wrapMixedContentStep],
|
|
72
|
-
taskList: null,
|
|
73
|
-
bulletList: null,
|
|
74
|
-
orderedList: null,
|
|
75
|
-
heading: null
|
|
76
|
-
},
|
|
77
|
-
expand: {
|
|
78
|
-
expand: null,
|
|
79
|
-
panel: [unwrapExpandStep, wrapMixedContentStep],
|
|
80
|
-
blockquote: [unwrapExpandStep, wrapMixedContentStep],
|
|
81
|
-
layoutSection: [unwrapExpandStep, wrapMixedContentStep],
|
|
82
|
-
paragraph: [unwrapExpandStep],
|
|
83
|
-
codeBlock: null,
|
|
84
|
-
heading: null
|
|
85
|
-
},
|
|
86
|
-
nestedExpand: {
|
|
87
|
-
expand: null,
|
|
88
|
-
nestedExpand: null,
|
|
89
|
-
panel: [unwrapExpandStep, wrapMixedContentStep],
|
|
90
|
-
blockquote: [unwrapExpandStep, wrapMixedContentStep],
|
|
91
|
-
paragraph: [unwrapExpandStep],
|
|
92
|
-
codeBlock: null,
|
|
93
|
-
heading: null
|
|
94
|
-
},
|
|
95
|
-
blockquote: {
|
|
96
|
-
blockquote: null,
|
|
97
|
-
expand: [wrapStep],
|
|
98
|
-
nestedExpand: [wrapStep],
|
|
99
|
-
layoutSection: [wrapMixedContentStep],
|
|
100
|
-
codeBlock: null,
|
|
101
|
-
decisionList: [unwrapStep, wrapBlockquoteToDecisionListStep],
|
|
102
|
-
paragraph: [unwrapStep],
|
|
103
|
-
heading: [unwrapStep, applyTargetTextTypeStep]
|
|
104
|
-
},
|
|
105
|
-
layoutSection: {
|
|
106
|
-
layoutSection: null,
|
|
107
|
-
blockquote: [unwrapLayoutStep, wrapMixedContentStep],
|
|
108
|
-
expand: [unwrapLayoutStep, wrapStep],
|
|
109
|
-
panel: [unwrapLayoutStep, wrapMixedContentStep],
|
|
110
|
-
codeBlock: null,
|
|
111
|
-
paragraph: [unwrapLayoutStep],
|
|
112
|
-
heading: null
|
|
113
|
-
},
|
|
114
|
-
codeBlock: {
|
|
115
|
-
codeBlock: null,
|
|
116
|
-
blockquote: [wrapStep],
|
|
117
|
-
expand: [wrapStep],
|
|
118
|
-
nestedExpand: [wrapStep],
|
|
119
|
-
layoutSection: [wrapMixedContentStep],
|
|
120
|
-
panel: [wrapStep],
|
|
121
|
-
paragraph: [applyTargetTextTypeStep],
|
|
122
|
-
heading: null
|
|
123
|
-
},
|
|
124
|
-
bulletList: {
|
|
125
|
-
bulletList: null,
|
|
126
|
-
codeBlock: null,
|
|
127
|
-
layoutSection: [wrapMixedContentStep],
|
|
128
|
-
decisionList: [flattenListStep, listToDecisionListStep],
|
|
129
|
-
heading: null
|
|
130
|
-
},
|
|
131
|
-
orderedList: {
|
|
132
|
-
orderedList: null,
|
|
133
|
-
codeBlock: null,
|
|
134
|
-
layoutSection: [wrapMixedContentStep],
|
|
135
|
-
decisionList: [flattenListStep, listToDecisionListStep],
|
|
136
|
-
heading: null
|
|
137
|
-
},
|
|
138
|
-
taskList: {
|
|
139
|
-
blockquote: null,
|
|
140
|
-
codeBlock: null,
|
|
141
|
-
layoutSection: [wrapMixedContentStep],
|
|
142
|
-
decisionList: [flattenListStep, listToDecisionListStep],
|
|
143
|
-
heading: null,
|
|
144
|
-
taskList: null
|
|
145
|
-
},
|
|
146
|
-
table: {
|
|
147
|
-
layoutSection: [wrapMixedContentStep],
|
|
148
|
-
blockquote: null,
|
|
149
|
-
panel: null,
|
|
150
|
-
codeBlock: null,
|
|
151
|
-
orderedList: null,
|
|
152
|
-
bulletList: null,
|
|
153
|
-
taskList: null,
|
|
154
|
-
decisionList: null
|
|
155
|
-
},
|
|
156
|
-
mediaSingle: {
|
|
157
|
-
layoutSection: [wrapMixedContentStep],
|
|
158
|
-
codeBlock: null,
|
|
159
|
-
decisionList: null,
|
|
160
|
-
taskList: null
|
|
161
|
-
},
|
|
162
|
-
mediaGroup: {
|
|
163
|
-
layoutSection: [wrapMixedContentStep],
|
|
164
|
-
codeBlock: null,
|
|
165
|
-
decisionList: null,
|
|
166
|
-
bulletList: null,
|
|
167
|
-
orderedList: null,
|
|
168
|
-
taskList: null
|
|
169
|
-
},
|
|
170
|
-
decisionList: {
|
|
171
|
-
decisionList: null,
|
|
172
|
-
bulletList: [decisionListToListStep],
|
|
173
|
-
orderedList: [decisionListToListStep],
|
|
174
|
-
taskList: [decisionListToListStep],
|
|
175
|
-
layoutSection: [wrapMixedContentStep]
|
|
176
|
-
},
|
|
177
|
-
blockCard: {
|
|
178
|
-
layoutSection: [wrapMixedContentStep],
|
|
179
|
-
blockquote: null,
|
|
180
|
-
codeBlock: null,
|
|
181
|
-
orderedList: null,
|
|
182
|
-
bulletList: null,
|
|
183
|
-
taskList: null,
|
|
184
|
-
decisionList: null
|
|
185
|
-
},
|
|
186
|
-
embedCard: {
|
|
187
|
-
layoutSection: [wrapMixedContentStep],
|
|
188
|
-
blockquote: null,
|
|
189
|
-
panel: null,
|
|
190
|
-
codeBlock: null,
|
|
191
|
-
orderedList: null,
|
|
192
|
-
bulletList: null,
|
|
193
|
-
taskList: null,
|
|
194
|
-
decisionList: null
|
|
195
|
-
},
|
|
196
|
-
extension: {
|
|
197
|
-
layoutSection: [wrapMixedContentStep],
|
|
198
|
-
codeBlock: null,
|
|
199
|
-
decisionList: null,
|
|
200
|
-
taskList: null,
|
|
201
|
-
orderedList: null,
|
|
202
|
-
bulletList: null
|
|
203
|
-
},
|
|
204
|
-
bodiedExtension: {
|
|
205
|
-
layoutSection: [wrapMixedContentStep],
|
|
206
|
-
blockquote: null,
|
|
207
|
-
expand: null,
|
|
208
|
-
panel: null,
|
|
209
|
-
codeBlock: null,
|
|
210
|
-
orderedList: null,
|
|
211
|
-
bulletList: null,
|
|
212
|
-
taskList: null,
|
|
213
|
-
decisionList: null
|
|
214
|
-
},
|
|
215
|
-
multi: {
|
|
216
|
-
heading: [applyTargetTextTypeStep]
|
|
217
|
-
// Similar to heading, all structures are kept as is
|
|
218
|
-
// EG: transformed: other lists, paragarph, headings
|
|
219
|
-
// eg: not-transformed: quotes, codeblocks ... all typeof 'containers'
|
|
220
|
-
// decisionList: [],
|
|
221
|
-
}
|
|
222
|
-
};
|
|
223
|
-
var getTransformStepsForNodeTypes = function getTransformStepsForNodeTypes(selectedNodeTypeName, targetNodeTypeName) {
|
|
224
|
-
var _TRANSFORM_STEPS_OVER;
|
|
225
|
-
var fromCategory = NODE_CATEGORY_BY_TYPE[selectedNodeTypeName];
|
|
226
|
-
var toCategory = NODE_CATEGORY_BY_TYPE[targetNodeTypeName];
|
|
227
|
-
var overrideSteps = (_TRANSFORM_STEPS_OVER = TRANSFORM_STEPS_OVERRIDE[selectedNodeTypeName]) === null || _TRANSFORM_STEPS_OVER === void 0 ? void 0 : _TRANSFORM_STEPS_OVER[targetNodeTypeName];
|
|
228
|
-
if (overrideSteps === null) {
|
|
229
|
-
return null;
|
|
230
|
-
}
|
|
231
|
-
var steps = overrideSteps !== null && overrideSteps !== void 0 ? overrideSteps : TRANSFORM_STEPS[fromCategory][toCategory];
|
|
232
|
-
return steps;
|
|
233
|
-
};
|
|
2
|
+
import { TRANSFORMATION_MATRIX } from './TRANSFORMATION_MATRIX';
|
|
3
|
+
import { getNodeName, toNodeTypeValue } from './types';
|
|
234
4
|
/**
|
|
235
5
|
* Convert a list of nodes to a target node type.
|
|
236
6
|
* If no steps are found, the source nodes are returned unchanged.
|
|
@@ -263,7 +33,7 @@ export var convertNodesToTargetType = function convertNodesToTargetType(_ref) {
|
|
|
263
33
|
if (!selectedNodeTypeName || !targetNodeTypeName) {
|
|
264
34
|
return sourceNodes;
|
|
265
35
|
}
|
|
266
|
-
var steps =
|
|
36
|
+
var steps = TRANSFORMATION_MATRIX[selectedNodeTypeName][targetNodeTypeName];
|
|
267
37
|
var context = {
|
|
268
38
|
// sourceNode is incorrect now - what to do here?
|
|
269
39
|
fromNode: sourceNode,
|
|
@@ -279,9 +49,6 @@ export var convertNodesToTargetType = function convertNodesToTargetType(_ref) {
|
|
|
279
49
|
}, sourceNodes);
|
|
280
50
|
};
|
|
281
51
|
export var isTransformDisabledBasedOnStepsConfig = function isTransformDisabledBasedOnStepsConfig(selectedNodeType, targetNodeType) {
|
|
282
|
-
var steps =
|
|
283
|
-
|
|
284
|
-
return true;
|
|
285
|
-
}
|
|
286
|
-
return false;
|
|
52
|
+
var steps = TRANSFORMATION_MATRIX[selectedNodeType][targetNodeType];
|
|
53
|
+
return !steps || steps.length === 0;
|
|
287
54
|
};
|