@atlaskit/editor-plugin-block-controls 11.2.10 → 11.2.11
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 +8 -0
- package/dist/cjs/editor-commands/move-node.js +12 -32
- package/dist/cjs/editor-commands/move-to-layout.js +59 -127
- package/dist/cjs/pm-plugins/decorations-drop-target-active.js +11 -16
- package/dist/cjs/pm-plugins/decorations-drop-target.js +13 -24
- package/dist/cjs/pm-plugins/main.js +51 -88
- package/dist/cjs/pm-plugins/utils/analytics.js +1 -2
- package/dist/cjs/pm-plugins/utils/remove-from-source.js +4 -14
- package/dist/cjs/ui/drag-handle.js +32 -44
- package/dist/es2019/editor-commands/move-node.js +9 -31
- package/dist/es2019/editor-commands/move-to-layout.js +61 -121
- package/dist/es2019/pm-plugins/decorations-drop-target-active.js +11 -16
- package/dist/es2019/pm-plugins/decorations-drop-target.js +13 -24
- package/dist/es2019/pm-plugins/main.js +55 -91
- package/dist/es2019/pm-plugins/utils/analytics.js +1 -2
- package/dist/es2019/pm-plugins/utils/remove-from-source.js +4 -14
- package/dist/es2019/ui/drag-handle.js +32 -45
- package/dist/esm/editor-commands/move-node.js +13 -33
- package/dist/esm/editor-commands/move-to-layout.js +59 -127
- package/dist/esm/pm-plugins/decorations-drop-target-active.js +11 -16
- package/dist/esm/pm-plugins/decorations-drop-target.js +13 -24
- package/dist/esm/pm-plugins/main.js +51 -88
- package/dist/esm/pm-plugins/utils/analytics.js +1 -2
- package/dist/esm/pm-plugins/utils/remove-from-source.js +4 -14
- package/dist/esm/ui/drag-handle.js +32 -44
- package/dist/types/pm-plugins/main.d.ts +0 -1
- package/dist/types/pm-plugins/utils/analytics.d.ts +2 -2
- package/dist/types/pm-plugins/utils/remove-from-source.d.ts +1 -1
- package/dist/types-ts4.5/pm-plugins/main.d.ts +0 -1
- package/dist/types-ts4.5/pm-plugins/utils/analytics.d.ts +2 -2
- package/dist/types-ts4.5/pm-plugins/utils/remove-from-source.d.ts +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-block-controls
|
|
2
2
|
|
|
3
|
+
## 11.2.11
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`ab837b5646256`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/ab837b5646256) -
|
|
8
|
+
[ux] EDITOR-6274 Clean up platform_editor_element_drag_and_drop_multiselect
|
|
9
|
+
- Updated dependencies
|
|
10
|
+
|
|
3
11
|
## 11.2.10
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
|
@@ -126,7 +126,6 @@ var moveNodeViaShortcut = exports.moveNodeViaShortcut = function moveNodeViaShor
|
|
|
126
126
|
return function (state) {
|
|
127
127
|
var selection = state.selection;
|
|
128
128
|
var isParentNodeOfTypeLayout = !!(0, _utils2.findParentNodeOfType)([state.schema.nodes.layoutSection])(state.selection);
|
|
129
|
-
var isMultiSelectEnabled = (0, _experiments.editorExperiment)('platform_editor_element_drag_and_drop_multiselect', true);
|
|
130
129
|
var expandedSelection = (0, _selection.expandSelectionBounds)(selection.$anchor, selection.$head);
|
|
131
130
|
var expandedAnchor = expandedSelection.$anchor.pos;
|
|
132
131
|
var expandedHead = expandedSelection.$head.pos;
|
|
@@ -137,11 +136,11 @@ var moveNodeViaShortcut = exports.moveNodeViaShortcut = function moveNodeViaShor
|
|
|
137
136
|
var LAYOUT_COL_DEPTH = 3;
|
|
138
137
|
hoistedPos = state.doc.resolve(from).before(LAYOUT_COL_DEPTH);
|
|
139
138
|
}
|
|
140
|
-
var currentNodePos =
|
|
139
|
+
var currentNodePos = !getFocusedHandle(state) && !selection.empty ? hoistedPos !== null && hoistedPos !== void 0 ? hoistedPos : from : getCurrentNodePos(state);
|
|
141
140
|
if (currentNodePos > -1) {
|
|
142
141
|
var _state$doc$nodeAt;
|
|
143
142
|
var $currentNodePos = state.doc.resolve(currentNodePos);
|
|
144
|
-
var nodeAfterPos =
|
|
143
|
+
var nodeAfterPos = !getFocusedHandle(state) ? Math.max(expandedAnchor, expandedHead) : $currentNodePos.posAtIndex($currentNodePos.index() + 1);
|
|
145
144
|
var isTopLevelNode = $currentNodePos.depth === 0;
|
|
146
145
|
var moveToPos = -1;
|
|
147
146
|
var isLayoutColumnSelected = selection instanceof _state.NodeSelection && selection.node.type.name === 'layoutColumn';
|
|
@@ -282,20 +281,10 @@ var moveNodeViaShortcut = exports.moveNodeViaShortcut = function moveNodeViaShor
|
|
|
282
281
|
return tr;
|
|
283
282
|
});
|
|
284
283
|
return true;
|
|
285
|
-
} else
|
|
284
|
+
} else {
|
|
286
285
|
var _api$core8;
|
|
287
|
-
// If the node is first/last one, only select the node
|
|
288
286
|
api === null || api === void 0 || (_api$core8 = api.core) === null || _api$core8 === void 0 || _api$core8.actions.execute(function (_ref5) {
|
|
289
287
|
var tr = _ref5.tr;
|
|
290
|
-
(0, _getSelection.selectNode)(tr, currentNodePos, nodeType, api);
|
|
291
|
-
tr.scrollIntoView();
|
|
292
|
-
return tr;
|
|
293
|
-
});
|
|
294
|
-
return true;
|
|
295
|
-
} else if (isMultiSelectEnabled) {
|
|
296
|
-
var _api$core9;
|
|
297
|
-
api === null || api === void 0 || (_api$core9 = api.core) === null || _api$core9 === void 0 || _api$core9.actions.execute(function (_ref6) {
|
|
298
|
-
var tr = _ref6.tr;
|
|
299
288
|
api === null || api === void 0 || api.blockControls.commands.setMultiSelectPositions($newAnchor.pos, $newHead.pos)({
|
|
300
289
|
tr: tr
|
|
301
290
|
});
|
|
@@ -312,9 +301,9 @@ var moveNode = exports.moveNode = function moveNode(api) {
|
|
|
312
301
|
return function (start, to) {
|
|
313
302
|
var inputMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _analytics.INPUT_METHOD.DRAG_AND_DROP;
|
|
314
303
|
var formatMessage = arguments.length > 3 ? arguments[3] : undefined;
|
|
315
|
-
return function (
|
|
304
|
+
return function (_ref6) {
|
|
316
305
|
var _api$blockControls$sh, _convertedNodeSlice, _api$accessibilityUti;
|
|
317
|
-
var tr =
|
|
306
|
+
var tr = _ref6.tr;
|
|
318
307
|
if (!api || start < 0 || to < 0) {
|
|
319
308
|
return tr;
|
|
320
309
|
}
|
|
@@ -325,7 +314,6 @@ var moveNode = exports.moveNode = function moveNode(api) {
|
|
|
325
314
|
var sliceFrom = start;
|
|
326
315
|
var sliceTo;
|
|
327
316
|
var sourceNodeTypes, hasSelectedMultipleNodes;
|
|
328
|
-
var isMultiSelect = (0, _experiments.editorExperiment)('platform_editor_element_drag_and_drop_multiselect', true);
|
|
329
317
|
if ((0, _platformFeatureFlags.fg)('platform_editor_ease_of_use_metrics')) {
|
|
330
318
|
var _api$metrics;
|
|
331
319
|
api === null || api === void 0 || (_api$metrics = api.metrics) === null || _api$metrics === void 0 || _api$metrics.commands.setContentMoved()({
|
|
@@ -341,17 +329,13 @@ var moveNode = exports.moveNode = function moveNode(api) {
|
|
|
341
329
|
var attributes = (0, _analytics2.getMultiSelectAnalyticsAttributes)(tr, sliceFrom, sliceTo);
|
|
342
330
|
hasSelectedMultipleNodes = attributes.hasSelectedMultipleNodes;
|
|
343
331
|
sourceNodeTypes = attributes.nodeTypes;
|
|
344
|
-
} else
|
|
332
|
+
} else {
|
|
345
333
|
var slicePosition = (0, _selection2.getSelectedSlicePosition)(start, tr, api);
|
|
346
334
|
sliceFrom = slicePosition.from;
|
|
347
335
|
sliceTo = slicePosition.to;
|
|
348
336
|
var _attributes = (0, _analytics2.getMultiSelectAnalyticsAttributes)(tr, sliceFrom, sliceTo);
|
|
349
337
|
hasSelectedMultipleNodes = _attributes.hasSelectedMultipleNodes;
|
|
350
338
|
sourceNodeTypes = _attributes.nodeTypes;
|
|
351
|
-
} else {
|
|
352
|
-
var _handleNode$nodeSize;
|
|
353
|
-
var size = (_handleNode$nodeSize = handleNode === null || handleNode === void 0 ? void 0 : handleNode.nodeSize) !== null && _handleNode$nodeSize !== void 0 ? _handleNode$nodeSize : 1;
|
|
354
|
-
sliceTo = sliceFrom + size;
|
|
355
339
|
}
|
|
356
340
|
var _tr$doc$type$schema$n = tr.doc.type.schema.nodes,
|
|
357
341
|
expand = _tr$doc$type$schema$n.expand,
|
|
@@ -428,13 +412,11 @@ var moveNode = exports.moveNode = function moveNode(api) {
|
|
|
428
412
|
tr.setMeta(_main.key, _objectSpread(_objectSpread({}, _currMeta), {}, {
|
|
429
413
|
preservedSelectionMapping: new _transform.Mapping([new _transform.StepMap([0, 0, nodeMovedOffset])])
|
|
430
414
|
}));
|
|
431
|
-
} else
|
|
415
|
+
} else {
|
|
432
416
|
var _api$blockControls$co;
|
|
433
417
|
tr = (_api$blockControls$co = api === null || api === void 0 ? void 0 : api.blockControls.commands.setMultiSelectPositions(mappedTo, mappedTo + sliceSize)({
|
|
434
418
|
tr: tr
|
|
435
419
|
})) !== null && _api$blockControls$co !== void 0 ? _api$blockControls$co : tr;
|
|
436
|
-
} else {
|
|
437
|
-
tr = (0, _getSelection.selectNode)(tr, mappedTo, handleNode.type.name, api);
|
|
438
420
|
}
|
|
439
421
|
var currMeta = tr.getMeta(_main.key);
|
|
440
422
|
tr.setMeta(_main.key, _objectSpread(_objectSpread({}, currMeta), {}, {
|
|
@@ -455,7 +437,7 @@ var moveNode = exports.moveNode = function moveNode(api) {
|
|
|
455
437
|
}
|
|
456
438
|
}
|
|
457
439
|
if ((0, _experiments.editorExperiment)('advanced_layouts', true)) {
|
|
458
|
-
(0, _analytics2.attachMoveNodeAnalytics)(tr, inputMethod, $handlePos.depth,
|
|
440
|
+
(0, _analytics2.attachMoveNodeAnalytics)(tr, inputMethod, $handlePos.depth, sourceNodeTypes, $mappedTo === null || $mappedTo === void 0 ? void 0 : $mappedTo.depth, $mappedTo === null || $mappedTo === void 0 ? void 0 : $mappedTo.parent.type.name, $handlePos.sameParent($mappedTo), api, hasSelectedMultipleNodes);
|
|
459
441
|
} else {
|
|
460
442
|
var _api$analytics;
|
|
461
443
|
api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || _api$analytics.actions.attachAnalyticsEvent({
|
|
@@ -463,16 +445,14 @@ var moveNode = exports.moveNode = function moveNode(api) {
|
|
|
463
445
|
action: _analytics.ACTION.MOVED,
|
|
464
446
|
actionSubject: _analytics.ACTION_SUBJECT.ELEMENT,
|
|
465
447
|
actionSubjectId: _analytics.ACTION_SUBJECT_ID.ELEMENT_DRAG_HANDLE,
|
|
466
|
-
attributes:
|
|
448
|
+
attributes: {
|
|
467
449
|
nodeDepth: $handlePos.depth,
|
|
468
|
-
|
|
450
|
+
nodeTypes: sourceNodeTypes,
|
|
469
451
|
destinationNodeDepth: $mappedTo === null || $mappedTo === void 0 ? void 0 : $mappedTo.depth,
|
|
470
452
|
destinationNodeType: $mappedTo === null || $mappedTo === void 0 ? void 0 : $mappedTo.parent.type.name,
|
|
471
|
-
inputMethod: inputMethod
|
|
472
|
-
}, isMultiSelect && {
|
|
473
|
-
sourceNodeTypes: sourceNodeTypes,
|
|
453
|
+
inputMethod: inputMethod,
|
|
474
454
|
hasSelectedMultipleNodes: hasSelectedMultipleNodes
|
|
475
|
-
}
|
|
455
|
+
}
|
|
476
456
|
})(tr);
|
|
477
457
|
}
|
|
478
458
|
var movedMessage = to > sliceFrom ? _messages.blockControlsMessages.movedDown : _messages.blockControlsMessages.movedup;
|
|
@@ -46,26 +46,11 @@ var createNewLayout = function createNewLayout(schema, layoutContents) {
|
|
|
46
46
|
};
|
|
47
47
|
var moveToExistingLayout = function moveToExistingLayout(toLayout, toLayoutPos, sourceContent, from, to, tr, $originalFrom, $originalTo, api, selectMovedNode) {
|
|
48
48
|
var isSameLayout = (0, _validation.isInSameLayout)($originalFrom, $originalTo);
|
|
49
|
-
var sourceContentEndPos =
|
|
50
|
-
var
|
|
51
|
-
var sourceNodeTypes,
|
|
52
|
-
|
|
53
|
-
if (sourceContent instanceof _model.Fragment) {
|
|
54
|
-
sourceContentEndPos = from + sourceContent.size;
|
|
55
|
-
var attributes = (0, _analytics2.getMultiSelectAnalyticsAttributes)(tr, from, sourceContentEndPos);
|
|
56
|
-
hasSelectedMultipleNodes = attributes.hasSelectedMultipleNodes;
|
|
57
|
-
sourceNodeTypes = attributes.nodeTypes;
|
|
58
|
-
}
|
|
59
|
-
} else {
|
|
60
|
-
if (sourceContent instanceof _model.Node) {
|
|
61
|
-
sourceContentEndPos = from + sourceContent.nodeSize;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
if (sourceContentEndPos === -1) {
|
|
65
|
-
return tr;
|
|
66
|
-
}
|
|
49
|
+
var sourceContentEndPos = from + sourceContent.size;
|
|
50
|
+
var attributes = (0, _analytics2.getMultiSelectAnalyticsAttributes)(tr, from, sourceContentEndPos);
|
|
51
|
+
var sourceNodeTypes = attributes.nodeTypes,
|
|
52
|
+
hasSelectedMultipleNodes = attributes.hasSelectedMultipleNodes;
|
|
67
53
|
if (isSameLayout) {
|
|
68
|
-
var _$originalFrom$nodeAf;
|
|
69
54
|
// reorder columns
|
|
70
55
|
tr.delete(from, sourceContentEndPos);
|
|
71
56
|
var mappedTo = tr.mapping.map(to);
|
|
@@ -73,12 +58,11 @@ var moveToExistingLayout = function moveToExistingLayout(toLayout, toLayoutPos,
|
|
|
73
58
|
if (selectMovedNode) {
|
|
74
59
|
tr.setSelection(new _state.NodeSelection(tr.doc.resolve(mappedTo))).scrollIntoView();
|
|
75
60
|
}
|
|
76
|
-
(0, _analytics2.attachMoveNodeAnalytics)(tr, _analytics.INPUT_METHOD.DRAG_AND_DROP, $originalFrom.depth,
|
|
61
|
+
(0, _analytics2.attachMoveNodeAnalytics)(tr, _analytics.INPUT_METHOD.DRAG_AND_DROP, $originalFrom.depth, sourceNodeTypes, 1, 'layoutSection', true, api, hasSelectedMultipleNodes);
|
|
77
62
|
} else if (toLayout.childCount < (0, _consts.maxLayoutColumnSupported)()) {
|
|
78
|
-
var _$originalFrom$nodeAf2;
|
|
79
63
|
(0, _removeFromSource.removeFromSource)(tr, tr.doc.resolve(from), sourceContentEndPos);
|
|
80
64
|
insertToDestinationNoWidthUpdate(tr, tr.mapping.map(to), sourceContent);
|
|
81
|
-
(0, _analytics2.attachMoveNodeAnalytics)(tr, _analytics.INPUT_METHOD.DRAG_AND_DROP, $originalFrom.depth,
|
|
65
|
+
(0, _analytics2.attachMoveNodeAnalytics)(tr, _analytics.INPUT_METHOD.DRAG_AND_DROP, $originalFrom.depth, sourceNodeTypes, 1, 'layoutSection', false, api, hasSelectedMultipleNodes);
|
|
82
66
|
}
|
|
83
67
|
return tr;
|
|
84
68
|
};
|
|
@@ -96,22 +80,11 @@ var insertToDestinationNoWidthUpdate = function insertToDestinationNoWidthUpdate
|
|
|
96
80
|
layoutColumn = _ref2.layoutColumn;
|
|
97
81
|
var content = null;
|
|
98
82
|
try {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
width: 0
|
|
105
|
-
}, (0, _checkFragment.isFragmentOfType)(sourceFragment, 'layoutColumn') ? (_sourceFragment$first = sourceFragment.firstChild) === null || _sourceFragment$first === void 0 ? void 0 : _sourceFragment$first.content : sourceFragment);
|
|
106
|
-
}
|
|
107
|
-
} else {
|
|
108
|
-
if (sourceContent instanceof _model.Node) {
|
|
109
|
-
var sourceNode = sourceContent;
|
|
110
|
-
content = layoutColumn.createChecked({
|
|
111
|
-
width: 0
|
|
112
|
-
}, sourceNode.type.name === 'layoutColumn' ? sourceNode.content : sourceNode);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
83
|
+
var _sourceFragment$first;
|
|
84
|
+
var sourceFragment = sourceContent;
|
|
85
|
+
content = layoutColumn.createChecked({
|
|
86
|
+
width: 0
|
|
87
|
+
}, (0, _checkFragment.isFragmentOfType)(sourceFragment, 'layoutColumn') ? (_sourceFragment$first = sourceFragment.firstChild) === null || _sourceFragment$first === void 0 ? void 0 : _sourceFragment$first.content : sourceFragment);
|
|
115
88
|
} catch (error) {
|
|
116
89
|
(0, _monitoring.logException)(error, {
|
|
117
90
|
location: 'editor-plugin-block-controls/move-to-layout'
|
|
@@ -154,7 +127,6 @@ var canMoveToLayout = function canMoveToLayout(api, from, to, tr, moveNodeAtCurs
|
|
|
154
127
|
return;
|
|
155
128
|
}
|
|
156
129
|
var $from = tr.doc.resolve(from);
|
|
157
|
-
var isMultiSelect = (0, _experiments.editorExperiment)('platform_editor_element_drag_and_drop_multiselect', true);
|
|
158
130
|
|
|
159
131
|
// invalid from position or dragging a layout
|
|
160
132
|
if (!$from.nodeAfter || $from.nodeAfter.type === layoutSection) {
|
|
@@ -163,7 +135,7 @@ var canMoveToLayout = function canMoveToLayout(api, from, to, tr, moveNodeAtCurs
|
|
|
163
135
|
var sourceContent = $from.nodeAfter;
|
|
164
136
|
var sourceFrom = from;
|
|
165
137
|
var sourceTo = from + sourceContent.nodeSize;
|
|
166
|
-
if (
|
|
138
|
+
if (!moveNodeAtCursorPos) {
|
|
167
139
|
var _getMultiSelectionIfP = (0, _selection.getMultiSelectionIfPosInside)(api, from),
|
|
168
140
|
anchor = _getMultiSelectionIfP.anchor,
|
|
169
141
|
head = _getMultiSelectionIfP.head;
|
|
@@ -190,71 +162,51 @@ var canMoveToLayout = function canMoveToLayout(api, from, to, tr, moveNodeAtCurs
|
|
|
190
162
|
};
|
|
191
163
|
};
|
|
192
164
|
var removeBreakoutMarks = function removeBreakoutMarks(tr, $from, to) {
|
|
193
|
-
var fromContentWithoutBreakout =
|
|
165
|
+
var fromContentWithoutBreakout = null;
|
|
194
166
|
var _ref4 = tr.doc.type.schema.marks || {},
|
|
195
167
|
breakout = _ref4.breakout;
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
if (
|
|
200
|
-
|
|
201
|
-
return false;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
// breakout doesn't exist on nested nodes
|
|
206
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.type.name) === 'doc' && node.marks.some(function (m) {
|
|
207
|
-
return m.type === breakout;
|
|
208
|
-
})) {
|
|
209
|
-
tr.removeNodeMark(pos, breakout);
|
|
168
|
+
tr.doc.nodesBetween($from.pos, to, function (node, pos, parent) {
|
|
169
|
+
// should never remove breakout from previous layoutSection
|
|
170
|
+
if ((0, _expValEquals.expValEquals)('platform_editor_breakout_resizing', 'isEnabled', true)) {
|
|
171
|
+
if (node.type.name === 'layoutSection') {
|
|
172
|
+
return false;
|
|
210
173
|
}
|
|
174
|
+
}
|
|
211
175
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
});
|
|
215
|
-
// resolve again the source content after node updated (remove breakout marks)
|
|
216
|
-
fromContentWithoutBreakout = tr.doc.slice($from.pos, to).content;
|
|
217
|
-
} else {
|
|
218
|
-
if (breakout && $from.nodeAfter && $from.nodeAfter.marks.some(function (m) {
|
|
176
|
+
// breakout doesn't exist on nested nodes
|
|
177
|
+
if ((parent === null || parent === void 0 ? void 0 : parent.type.name) === 'doc' && node.marks.some(function (m) {
|
|
219
178
|
return m.type === breakout;
|
|
220
179
|
})) {
|
|
221
|
-
tr.removeNodeMark(
|
|
222
|
-
// resolve again the source node after node updated (remove breakout marks)
|
|
223
|
-
fromContentWithoutBreakout = tr.doc.resolve($from.pos).nodeAfter;
|
|
180
|
+
tr.removeNodeMark(pos, breakout);
|
|
224
181
|
}
|
|
225
|
-
|
|
182
|
+
|
|
183
|
+
// descending is not needed as breakout doesn't exist on nested nodes
|
|
184
|
+
return false;
|
|
185
|
+
});
|
|
186
|
+
// resolve again the source content after node updated (remove breakout marks)
|
|
187
|
+
fromContentWithoutBreakout = tr.doc.slice($from.pos, to).content;
|
|
226
188
|
return fromContentWithoutBreakout;
|
|
227
189
|
};
|
|
228
190
|
var getBreakoutMode = function getBreakoutMode(content, breakout) {
|
|
229
|
-
if (
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
return
|
|
191
|
+
if (content instanceof _model.Node) {
|
|
192
|
+
var _content$marks$find;
|
|
193
|
+
return (_content$marks$find = content.marks.find(function (m) {
|
|
194
|
+
return m.type === breakout;
|
|
195
|
+
})) === null || _content$marks$find === void 0 ? void 0 : _content$marks$find.attrs.mode;
|
|
196
|
+
} else if (content instanceof _model.Fragment) {
|
|
197
|
+
// Find the first breakout mode in the fragment
|
|
198
|
+
var firstBreakoutMode;
|
|
199
|
+
for (var i = 0; i < content.childCount; i++) {
|
|
200
|
+
var child = content.child(i);
|
|
201
|
+
var breakoutMark = child.marks.find(function (m) {
|
|
233
202
|
return m.type === breakout;
|
|
234
|
-
})
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
for (var i = 0; i < content.childCount; i++) {
|
|
239
|
-
var child = content.child(i);
|
|
240
|
-
var breakoutMark = child.marks.find(function (m) {
|
|
241
|
-
return m.type === breakout;
|
|
242
|
-
});
|
|
243
|
-
if (breakoutMark) {
|
|
244
|
-
firstBreakoutMode = breakoutMark.attrs.mode;
|
|
245
|
-
break;
|
|
246
|
-
}
|
|
203
|
+
});
|
|
204
|
+
if (breakoutMark) {
|
|
205
|
+
firstBreakoutMode = breakoutMark.attrs.mode;
|
|
206
|
+
break;
|
|
247
207
|
}
|
|
248
|
-
return firstBreakoutMode;
|
|
249
|
-
}
|
|
250
|
-
} else {
|
|
251
|
-
// Without multi-select support, we can assume source content is of type PMNode
|
|
252
|
-
if (content instanceof _model.Node) {
|
|
253
|
-
var _content$marks$find2;
|
|
254
|
-
return (_content$marks$find2 = content.marks.find(function (m) {
|
|
255
|
-
return m.type === breakout;
|
|
256
|
-
})) === null || _content$marks$find2 === void 0 ? void 0 : _content$marks$find2.attrs.mode;
|
|
257
208
|
}
|
|
209
|
+
return firstBreakoutMode;
|
|
258
210
|
}
|
|
259
211
|
};
|
|
260
212
|
var getBreakoutModeAndWidth = function getBreakoutModeAndWidth(content, breakout) {
|
|
@@ -269,30 +221,20 @@ var getBreakoutModeAndWidth = function getBreakoutModeAndWidth(content, breakout
|
|
|
269
221
|
breakoutWidth: mark.attrs.width
|
|
270
222
|
} : null;
|
|
271
223
|
};
|
|
272
|
-
if (
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
return extractBreakoutAttributes(breakoutMark);
|
|
282
|
-
}
|
|
224
|
+
if (content instanceof _model.Node) {
|
|
225
|
+
return extractBreakoutAttributes(findBreakoutMark(content));
|
|
226
|
+
} else if (content instanceof _model.Fragment) {
|
|
227
|
+
// Find the first breakout mode in the fragment
|
|
228
|
+
for (var i = 0; i < content.childCount; i++) {
|
|
229
|
+
var child = content.child(i);
|
|
230
|
+
var breakoutMark = findBreakoutMark(child);
|
|
231
|
+
if (breakoutMark) {
|
|
232
|
+
return extractBreakoutAttributes(breakoutMark);
|
|
283
233
|
}
|
|
284
234
|
}
|
|
285
|
-
} else {
|
|
286
|
-
// Without multi-select support, we can assume source content is of type PMNode
|
|
287
|
-
if (content instanceof _model.Node) {
|
|
288
|
-
return extractBreakoutAttributes(findBreakoutMark(content));
|
|
289
|
-
}
|
|
290
235
|
}
|
|
291
236
|
return null;
|
|
292
237
|
};
|
|
293
|
-
|
|
294
|
-
// TODO: ED-26959 - As part of platform_editor_element_drag_and_drop_multiselect clean up,
|
|
295
|
-
// source content variable that has type of `PMNode | Fragment` should be updated to `Fragment` only
|
|
296
238
|
var moveToLayout = exports.moveToLayout = function moveToLayout(api) {
|
|
297
239
|
return function (from, to, options) {
|
|
298
240
|
return function (_ref5) {
|
|
@@ -328,8 +270,8 @@ var moveToLayout = exports.moveToLayout = function moveToLayout(api) {
|
|
|
328
270
|
}
|
|
329
271
|
|
|
330
272
|
// we don't want to remove marks when moving/re-ordering layoutSection
|
|
331
|
-
var shouldRemoveMarks =
|
|
332
|
-
var fromContentBeforeBreakoutMarksRemoved =
|
|
273
|
+
var shouldRemoveMarks = $sourceFrom.node().type !== layoutSection;
|
|
274
|
+
var fromContentBeforeBreakoutMarksRemoved = tr.doc.slice($sourceFrom.pos, sourceTo).content;
|
|
333
275
|
|
|
334
276
|
// remove breakout from source content
|
|
335
277
|
var fromContentWithoutBreakout = shouldRemoveMarks ? removeBreakoutMarks(tr, $sourceFrom, sourceTo) : fromContentBeforeBreakoutMarksRemoved;
|
|
@@ -342,7 +284,6 @@ var moveToLayout = exports.moveToLayout = function moveToLayout(api) {
|
|
|
342
284
|
tr: tr
|
|
343
285
|
});
|
|
344
286
|
}
|
|
345
|
-
var isMultiSelect = (0, _experiments.editorExperiment)('platform_editor_element_drag_and_drop_multiselect', true);
|
|
346
287
|
if (toNode.type === layoutSection) {
|
|
347
288
|
var toPos = options !== null && options !== void 0 && options.moveToEnd ? to + toNode.nodeSize - 1 : to + 1;
|
|
348
289
|
return moveToExistingLayout(toNode, to, fromContentWithoutBreakout, $sourceFrom.pos, toPos, tr, $sourceFrom, $to, api, options === null || options === void 0 ? void 0 : options.selectMovedNode);
|
|
@@ -362,24 +303,15 @@ var moveToLayout = exports.moveToLayout = function moveToLayout(api) {
|
|
|
362
303
|
// resolve again the source node after node updated (remove breakout marks)
|
|
363
304
|
toNodeWithoutBreakout = tr.doc.resolve(to).nodeAfter || toNode;
|
|
364
305
|
}
|
|
365
|
-
if (
|
|
366
|
-
|
|
367
|
-
fromContentWithoutBreakout = fromContentWithoutBreakout.firstChild.content;
|
|
368
|
-
}
|
|
369
|
-
} else {
|
|
370
|
-
if (fromContentWithoutBreakout instanceof _model.Node && fromContentWithoutBreakout.type.name === 'layoutColumn') {
|
|
371
|
-
fromContentWithoutBreakout = fromContentWithoutBreakout.content;
|
|
372
|
-
}
|
|
306
|
+
if ((0, _checkFragment.isFragmentOfType)(fromContentWithoutBreakout, 'layoutColumn') && fromContentWithoutBreakout.firstChild) {
|
|
307
|
+
fromContentWithoutBreakout = fromContentWithoutBreakout.firstChild.content;
|
|
373
308
|
}
|
|
374
309
|
var layoutContents = options !== null && options !== void 0 && options.moveToEnd ? [toNodeWithoutBreakout, fromContentWithoutBreakout] : [fromContentWithoutBreakout, toNodeWithoutBreakout];
|
|
375
310
|
var newLayout = createNewLayout(tr.doc.type.schema, layoutContents);
|
|
376
311
|
if (newLayout) {
|
|
377
|
-
var
|
|
378
|
-
|
|
379
|
-
var attributes = (0, _analytics2.getMultiSelectAnalyticsAttributes)(tr, $sourceFrom.pos, sourceTo);
|
|
312
|
+
var attributes = (0, _analytics2.getMultiSelectAnalyticsAttributes)(tr, $sourceFrom.pos, sourceTo);
|
|
313
|
+
var sourceNodeTypes = attributes.nodeTypes,
|
|
380
314
|
hasSelectedMultipleNodes = attributes.hasSelectedMultipleNodes;
|
|
381
|
-
sourceNodeTypes = attributes.nodeTypes;
|
|
382
|
-
}
|
|
383
315
|
tr = (0, _removeFromSource.removeFromSource)(tr, $sourceFrom, sourceTo);
|
|
384
316
|
var mappedTo = tr.mapping.map(to);
|
|
385
317
|
tr.delete(mappedTo, mappedTo + toNodeWithoutBreakout.nodeSize).insert(mappedTo, newLayout);
|
|
@@ -44,24 +44,19 @@ var canMoveNodeOrSliceToPos = exports.canMoveNodeOrSliceToPos = function canMove
|
|
|
44
44
|
var $activeNodePos = typeof activeNodePos === 'number' && state.doc.resolve(activeNodePos);
|
|
45
45
|
var activePMNode = $activeNodePos && $activeNodePos.nodeAfter;
|
|
46
46
|
var handleInsideSelection = activeNodePos !== undefined && activeNodePos >= selectionFrom && activeNodePos <= selectionTo;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
var canDropMultipleNodes = true;
|
|
47
|
+
var selectionSlice = state.doc.slice(selectionFrom, selectionTo, false);
|
|
48
|
+
var selectionSliceChildCount = selectionSlice.content.childCount;
|
|
49
|
+
var canDropSingleNode = true;
|
|
50
|
+
var canDropMultipleNodes = true;
|
|
52
51
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
} else {
|
|
57
|
-
canDropSingleNode = !!(activePMNode && (0, _validation.canMoveNodeToIndex)(parent, index, activePMNode, $toPos, node));
|
|
58
|
-
}
|
|
59
|
-
if (!canDropMultipleNodes || !canDropSingleNode) {
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
52
|
+
// when there is only one node in the slice, use the same logic as when multi select is not on
|
|
53
|
+
if (selectionSliceChildCount > 1 && handleInsideSelection) {
|
|
54
|
+
canDropMultipleNodes = (0, _validation.canMoveSliceToIndex)(selectionSlice, selectionFrom, selectionTo, parent, index, $toPos);
|
|
62
55
|
} else {
|
|
63
|
-
|
|
64
|
-
|
|
56
|
+
canDropSingleNode = !!(activePMNode && (0, _validation.canMoveNodeToIndex)(parent, index, activePMNode, $toPos, node));
|
|
57
|
+
}
|
|
58
|
+
if (!canDropMultipleNodes || !canDropSingleNode) {
|
|
59
|
+
return false;
|
|
65
60
|
}
|
|
66
61
|
return true;
|
|
67
62
|
};
|
|
@@ -173,7 +173,6 @@ var dropTargetDecorations = exports.dropTargetDecorations = function dropTargetD
|
|
|
173
173
|
var activeNodePos = activeNode === null || activeNode === void 0 ? void 0 : activeNode.pos;
|
|
174
174
|
var $activeNodePos = typeof activeNodePos === 'number' && newState.doc.resolve(activeNodePos);
|
|
175
175
|
var activePMNode = $activeNodePos && $activeNodePos.nodeAfter;
|
|
176
|
-
var isMultiSelect = (0, _experiments.editorExperiment)('platform_editor_element_drag_and_drop_multiselect', true);
|
|
177
176
|
anchorRectCache === null || anchorRectCache === void 0 || anchorRectCache.clear();
|
|
178
177
|
var prevNodeStack = [];
|
|
179
178
|
var popNodeStack = function popNodeStack(depth) {
|
|
@@ -229,31 +228,21 @@ var dropTargetDecorations = exports.dropTargetDecorations = function dropTargetD
|
|
|
229
228
|
return shouldDescend(node); //skip over, don't consider it a valid depth
|
|
230
229
|
}
|
|
231
230
|
|
|
232
|
-
//
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
var canDropMultipleNodes = true;
|
|
231
|
+
// validate all the nodes in the selection instead of just the handle node
|
|
232
|
+
var selectionSlice = newState.doc.slice(selectionFrom, selectionTo, false);
|
|
233
|
+
var selectionSliceChildCount = selectionSlice.content.childCount;
|
|
234
|
+
var canDropSingleNode = true;
|
|
235
|
+
var canDropMultipleNodes = true;
|
|
238
236
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
} else {
|
|
243
|
-
canDropSingleNode = !!(activePMNode && (0, _validation.canMoveNodeToIndex)(parent, index, activePMNode, $pos, node));
|
|
244
|
-
}
|
|
245
|
-
if (!canDropMultipleNodes || !canDropSingleNode) {
|
|
246
|
-
pushNodeStack(node, depth);
|
|
247
|
-
return false; //not valid pos, so nested not valid either
|
|
248
|
-
}
|
|
237
|
+
// when there is only one node in the slice, use the same logic as when multi select is not on
|
|
238
|
+
if (selectionSliceChildCount > 1 && handleInsideSelection) {
|
|
239
|
+
canDropMultipleNodes = (0, _validation.canMoveSliceToIndex)(selectionSlice, selectionFrom, selectionTo, parent, index, $pos);
|
|
249
240
|
} else {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
return false; //not valid pos, so nested not valid either
|
|
256
|
-
}
|
|
241
|
+
canDropSingleNode = !!(activePMNode && (0, _validation.canMoveNodeToIndex)(parent, index, activePMNode, $pos, node));
|
|
242
|
+
}
|
|
243
|
+
if (!canDropMultipleNodes || !canDropSingleNode) {
|
|
244
|
+
pushNodeStack(node, depth);
|
|
245
|
+
return false; //not valid pos, so nested not valid either
|
|
257
246
|
}
|
|
258
247
|
var parentTypesWithEndDropTarget = (0, _experiments.editorExperiment)('platform_synced_block', true) ? PARENT_WITH_END_DROP_TARGET_NEXT : PARENT_WITH_END_DROP_TARGET;
|
|
259
248
|
if (parent.lastChild === node && !(0, _utils.isEmptyParagraph)(node) && parentTypesWithEndDropTarget.includes(parent.type.name)) {
|