@atlaskit/editor-plugin-block-menu 18.0.6 → 18.0.7
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 +7 -0
- package/dist/cjs/blockMenuPlugin.js +2 -6
- package/dist/cjs/editor-actions/isTransformToTargetDisabled.js +7 -9
- package/dist/cjs/editor-commands/transformNode.js +65 -70
- package/dist/cjs/ui/utils/checkIsFormatMenuHidden.js +1 -10
- package/dist/es2019/blockMenuPlugin.js +2 -8
- package/dist/es2019/editor-actions/isTransformToTargetDisabled.js +7 -9
- package/dist/es2019/editor-commands/transformNode.js +67 -73
- package/dist/es2019/ui/utils/checkIsFormatMenuHidden.js +1 -6
- package/dist/esm/blockMenuPlugin.js +2 -6
- package/dist/esm/editor-actions/isTransformToTargetDisabled.js +7 -9
- package/dist/esm/editor-commands/transformNode.js +65 -70
- package/dist/esm/ui/utils/checkIsFormatMenuHidden.js +1 -9
- package/package.json +1 -1
- package/tsconfig.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-block-menu
|
|
2
2
|
|
|
3
|
+
## 18.0.7
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`45f8d6aea7dc6`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/45f8d6aea7dc6) -
|
|
8
|
+
Clean up the permanently enabled `platform_editor_block_menu_transform_extensions` feature gate.
|
|
9
|
+
|
|
3
10
|
## 18.0.6
|
|
4
11
|
|
|
5
12
|
### Patch Changes
|
|
@@ -25,7 +25,7 @@ var blockMenuPlugin = exports.blockMenuPlugin = function blockMenuPlugin(_ref) {
|
|
|
25
25
|
var api = _ref.api,
|
|
26
26
|
config = _ref.config;
|
|
27
27
|
var registry = (0, _editorActions.createBlockMenuRegistry)();
|
|
28
|
-
var transformSourceRegistry = (0,
|
|
28
|
+
var transformSourceRegistry = (0, _transformSourceRegistry.createBlockMenuTransformSourceRegistry)();
|
|
29
29
|
registry.register((0, _blockMenuComponents.getBlockMenuComponents)({
|
|
30
30
|
api: api,
|
|
31
31
|
config: config
|
|
@@ -81,11 +81,7 @@ var blockMenuPlugin = exports.blockMenuPlugin = function blockMenuPlugin(_ref) {
|
|
|
81
81
|
});
|
|
82
82
|
},
|
|
83
83
|
registerBlockMenuTransforms: function registerBlockMenuTransforms(transforms) {
|
|
84
|
-
|
|
85
|
-
var _transformSourceRegis;
|
|
86
|
-
return (_transformSourceRegis = transformSourceRegistry === null || transformSourceRegistry === void 0 ? void 0 : transformSourceRegistry.register(transforms)) !== null && _transformSourceRegis !== void 0 ? _transformSourceRegis : function () {};
|
|
87
|
-
}
|
|
88
|
-
return function () {};
|
|
84
|
+
return transformSourceRegistry.register(transforms);
|
|
89
85
|
}
|
|
90
86
|
},
|
|
91
87
|
commands: {
|
|
@@ -8,7 +8,6 @@ exports.isTransformToTargetDisabled = exports.canParentContainNodeType = void 0;
|
|
|
8
8
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
9
|
var _selection = require("@atlaskit/editor-common/selection");
|
|
10
10
|
var _model = require("@atlaskit/editor-prosemirror/model");
|
|
11
|
-
var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
|
|
12
11
|
var _transform = require("../editor-commands/transform-node-utils/transform");
|
|
13
12
|
var _types = require("../editor-commands/transform-node-utils/types");
|
|
14
13
|
var _utils = require("../editor-commands/transform-node-utils/utils");
|
|
@@ -81,14 +80,13 @@ var isTransformToTargetDisabled = exports.isTransformToTargetDisabled = function
|
|
|
81
80
|
if (!range) {
|
|
82
81
|
return false;
|
|
83
82
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
83
|
+
var sourceNode = (0, _transformSource.getSingleTransformSourceNode)(selection, range);
|
|
84
|
+
if ((0, _transformSource.isExtensionTransformSource)(sourceNode)) {
|
|
85
|
+
var _transformRegistry$re;
|
|
86
|
+
return (transformRegistry === null || transformRegistry === void 0 || (_transformRegistry$re = transformRegistry.resolve({
|
|
87
|
+
source: sourceNode.toJSON(),
|
|
88
|
+
targetTypeName: targetNodeTypeName
|
|
89
|
+
})) === null || _transformRegistry$re === void 0 ? void 0 : _transformRegistry$re.status) !== 'supported';
|
|
92
90
|
}
|
|
93
91
|
var selectedNodes = (0, _utils.getBlockNodesInRange)(range);
|
|
94
92
|
var parent = range.parent;
|
|
@@ -33,86 +33,81 @@ var transformNode = exports.transformNode = function transformNode(api, transfor
|
|
|
33
33
|
return null;
|
|
34
34
|
}
|
|
35
35
|
var analytics = (0, _transformAnalytics.createTransformAnalytics)(api, tr, preservedSelection);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
36
|
+
var _expandSelectionToBlo = (0, _selection.expandSelectionToBlockRange)(preservedSelection),
|
|
37
|
+
$from = _expandSelectionToBlo.$from,
|
|
38
|
+
$to = _expandSelectionToBlo.$to,
|
|
39
|
+
range = _expandSelectionToBlo.range;
|
|
40
|
+
var sourceNode = (0, _transformSource.getSingleTransformSourceNode)(preservedSelection, range);
|
|
41
|
+
if ((0, _transformSource.isExtensionTransformSource)(sourceNode)) {
|
|
42
|
+
var _metadata$targetTypeN;
|
|
43
|
+
var context = {
|
|
44
|
+
source: sourceNode.toJSON(),
|
|
45
|
+
targetTypeName: (_metadata$targetTypeN = metadata === null || metadata === void 0 ? void 0 : metadata.targetTypeName) !== null && _metadata$targetTypeN !== void 0 ? _metadata$targetTypeN : targetType.name
|
|
46
|
+
};
|
|
47
|
+
var resolution = transformRegistry === null || transformRegistry === void 0 ? void 0 : transformRegistry.resolve(context);
|
|
48
|
+
if (!resolution || resolution.status === 'unsupported') {
|
|
49
|
+
return tr;
|
|
50
|
+
}
|
|
51
|
+
var _measureId = "transformNode_".concat(targetType.name, "_").concat(Date.now());
|
|
52
|
+
(0, _performanceMeasures.startMeasure)(_measureId);
|
|
53
|
+
try {
|
|
54
|
+
var _api$blockControls2, _api$blockControls3;
|
|
55
|
+
var transformResult = resolution.transform.transform(context);
|
|
56
|
+
if (!transformResult) {
|
|
57
|
+
(0, _performanceMeasures.stopMeasure)(_measureId);
|
|
50
58
|
return tr;
|
|
51
59
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
var
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
60
|
+
if (!Array.isArray(transformResult.output) || transformResult.output.length === 0) {
|
|
61
|
+
throw new Error('Block menu transform returned no output');
|
|
62
|
+
}
|
|
63
|
+
var resultNodes = transformResult.output.map(function (nodeAdf) {
|
|
64
|
+
var node = _model.Node.fromJSON(tr.doc.type.schema, nodeAdf);
|
|
65
|
+
node.check();
|
|
66
|
+
return node;
|
|
67
|
+
});
|
|
68
|
+
if (!range || !range.parent.canReplace(range.startIndex, range.endIndex, _model.Fragment.from(resultNodes))) {
|
|
69
|
+
throw new Error('Block menu transform output is invalid at the selected position');
|
|
70
|
+
}
|
|
71
|
+
var sliceStart = $from.pos;
|
|
72
|
+
tr.replaceWith(sliceStart, $to.pos, resultNodes);
|
|
73
|
+
var insertedNode = tr.doc.nodeAt(sliceStart);
|
|
74
|
+
var nextSelection = insertedNode && _state.NodeSelection.isSelectable(insertedNode) ? _state.NodeSelection.create(tr.doc, sliceStart) : _state.Selection.near(tr.doc.resolve(sliceStart));
|
|
75
|
+
tr.setSelection(nextSelection);
|
|
76
|
+
api === null || api === void 0 || (_api$blockControls2 = api.blockControls) === null || _api$blockControls2 === void 0 || _api$blockControls2.commands.stopPreservingSelection()({
|
|
77
|
+
tr: tr
|
|
78
|
+
});
|
|
79
|
+
api === null || api === void 0 || (_api$blockControls3 = api.blockControls) === null || _api$blockControls3 === void 0 || _api$blockControls3.commands.toggleBlockMenu({
|
|
80
|
+
closeMenu: true
|
|
81
|
+
})({
|
|
82
|
+
tr: tr
|
|
83
|
+
});
|
|
84
|
+
var _tr$doc$type$schema$n = tr.doc.type.schema.nodes,
|
|
85
|
+
expand = _tr$doc$type$schema$n.expand,
|
|
86
|
+
nestedExpand = _tr$doc$type$schema$n.nestedExpand;
|
|
87
|
+
resultNodes.forEach(function (node) {
|
|
88
|
+
if (node.type === expand || node.type === nestedExpand) {
|
|
89
|
+
_expand2.expandedState.set(node, true);
|
|
71
90
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
api === null || api === void 0 || (_api$blockControls3 = api.blockControls) === null || _api$blockControls3 === void 0 || _api$blockControls3.commands.toggleBlockMenu({
|
|
81
|
-
closeMenu: true
|
|
82
|
-
})({
|
|
83
|
-
tr: tr
|
|
84
|
-
});
|
|
85
|
-
var _tr$doc$type$schema$n = tr.doc.type.schema.nodes,
|
|
86
|
-
expand = _tr$doc$type$schema$n.expand,
|
|
87
|
-
nestedExpand = _tr$doc$type$schema$n.nestedExpand;
|
|
88
|
-
resultNodes.forEach(function (node) {
|
|
89
|
-
if (node.type === expand || node.type === nestedExpand) {
|
|
90
|
-
_expand2.expandedState.set(node, true);
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
(0, _performanceMeasures.stopMeasure)(_measureId, function (duration, startTime) {
|
|
94
|
-
analytics.transformed(duration, startTime, {
|
|
95
|
-
isNested: (0, _isNestedNode.isNestedNode)(preservedSelection, ''),
|
|
96
|
-
isSuggested: Boolean(metadata === null || metadata === void 0 ? void 0 : metadata.isSuggested),
|
|
97
|
-
outputNodesCount: resultNodes.length,
|
|
98
|
-
sourceNodes: [sourceNode],
|
|
99
|
-
targetNodeType: targetType.name
|
|
100
|
-
});
|
|
91
|
+
});
|
|
92
|
+
(0, _performanceMeasures.stopMeasure)(_measureId, function (duration, startTime) {
|
|
93
|
+
analytics.transformed(duration, startTime, {
|
|
94
|
+
isNested: (0, _isNestedNode.isNestedNode)(preservedSelection, ''),
|
|
95
|
+
isSuggested: Boolean(metadata === null || metadata === void 0 ? void 0 : metadata.isSuggested),
|
|
96
|
+
outputNodesCount: resultNodes.length,
|
|
97
|
+
sourceNodes: [sourceNode],
|
|
98
|
+
targetNodeType: targetType.name
|
|
101
99
|
});
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
return tr;
|
|
100
|
+
});
|
|
101
|
+
} catch (error) {
|
|
102
|
+
(0, _performanceMeasures.stopMeasure)(_measureId);
|
|
103
|
+
analytics.errored(error, [sourceNode], targetType.name);
|
|
107
104
|
}
|
|
105
|
+
return tr;
|
|
108
106
|
}
|
|
109
107
|
var measureId = "transformNode_".concat(targetType.name, "_").concat(Date.now());
|
|
110
108
|
(0, _performanceMeasures.startMeasure)(measureId);
|
|
111
109
|
var docBeforeTransform = tr.doc;
|
|
112
110
|
var nodes = tr.doc.type.schema.nodes;
|
|
113
|
-
var _expandSelectionToBlo2 = (0, _selection.expandSelectionToBlockRange)(preservedSelection),
|
|
114
|
-
$from = _expandSelectionToBlo2.$from,
|
|
115
|
-
$to = _expandSelectionToBlo2.$to;
|
|
116
111
|
var selectedParent = $from.parent;
|
|
117
112
|
var isParentLayout = selectedParent.type === nodes.layoutColumn;
|
|
118
113
|
var isNested = (0, _isNestedNode.isNestedNode)(preservedSelection, '') && !isParentLayout;
|
|
@@ -1,25 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.checkIsFormatMenuHidden = void 0;
|
|
8
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
-
var _memoizeOne = _interopRequireDefault(require("memoize-one"));
|
|
10
7
|
var _utils = require("@atlaskit/editor-prosemirror/utils");
|
|
11
|
-
var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
|
|
12
|
-
var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
|
|
13
|
-
var getDisabledNodeTypes = (0, _memoizeOne.default)(function (nodes) {
|
|
14
|
-
return [nodes.rule].concat((0, _toConsumableArray2.default)((0, _expValEquals.expValEquals)('confluence_native_tabs_experiment', 'isEnabled', true) ? [nodes.multiBodiedExtension] : []));
|
|
15
|
-
});
|
|
16
8
|
var getIsFormatMenuHidden = function getIsFormatMenuHidden(selection, schema) {
|
|
17
9
|
var nodes = schema.nodes;
|
|
18
10
|
if (!nodes) {
|
|
19
11
|
return false;
|
|
20
12
|
}
|
|
21
|
-
var
|
|
22
|
-
var disabledNode = (0, _utils.findSelectedNodeOfType)(disabledNodeTypes)(selection);
|
|
13
|
+
var disabledNode = (0, _utils.findSelectedNodeOfType)([nodes.rule])(selection);
|
|
23
14
|
return !!disabledNode;
|
|
24
15
|
};
|
|
25
16
|
var checkIsFormatMenuHidden = exports.checkIsFormatMenuHidden = function checkIsFormatMenuHidden(api) {
|
|
@@ -18,7 +18,7 @@ export const blockMenuPlugin = ({
|
|
|
18
18
|
config
|
|
19
19
|
}) => {
|
|
20
20
|
const registry = createBlockMenuRegistry();
|
|
21
|
-
const transformSourceRegistry =
|
|
21
|
+
const transformSourceRegistry = createBlockMenuTransformSourceRegistry();
|
|
22
22
|
registry.register(getBlockMenuComponents({
|
|
23
23
|
api,
|
|
24
24
|
config
|
|
@@ -67,13 +67,7 @@ export const blockMenuPlugin = ({
|
|
|
67
67
|
transformRegistry: transformSourceRegistry
|
|
68
68
|
});
|
|
69
69
|
},
|
|
70
|
-
registerBlockMenuTransforms: transforms =>
|
|
71
|
-
if (isExperimentEnabled('platform_editor_block_menu_transform_extensions')) {
|
|
72
|
-
var _transformSourceRegis;
|
|
73
|
-
return (_transformSourceRegis = transformSourceRegistry === null || transformSourceRegistry === void 0 ? void 0 : transformSourceRegistry.register(transforms)) !== null && _transformSourceRegis !== void 0 ? _transformSourceRegis : () => {};
|
|
74
|
-
}
|
|
75
|
-
return () => {};
|
|
76
|
-
}
|
|
70
|
+
registerBlockMenuTransforms: transforms => transformSourceRegistry.register(transforms)
|
|
77
71
|
},
|
|
78
72
|
commands: {
|
|
79
73
|
transformInlineNode: metadata => transformInlineNode(api)(metadata),
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { expandSelectionToBlockRange } from '@atlaskit/editor-common/selection';
|
|
2
2
|
import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
3
|
-
import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
|
|
4
3
|
import { isTransformDisabledBasedOnStepsConfig } from '../editor-commands/transform-node-utils/transform';
|
|
5
4
|
import { toNodeTypeValue } from '../editor-commands/transform-node-utils/types';
|
|
6
5
|
import { getBlockNodesInRange, getTargetNodeTypeNameInContext } from '../editor-commands/transform-node-utils/utils';
|
|
@@ -72,14 +71,13 @@ export const isTransformToTargetDisabled = ({
|
|
|
72
71
|
if (!range) {
|
|
73
72
|
return false;
|
|
74
73
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
74
|
+
const sourceNode = getSingleTransformSourceNode(selection, range);
|
|
75
|
+
if (isExtensionTransformSource(sourceNode)) {
|
|
76
|
+
var _transformRegistry$re;
|
|
77
|
+
return (transformRegistry === null || transformRegistry === void 0 ? void 0 : (_transformRegistry$re = transformRegistry.resolve({
|
|
78
|
+
source: sourceNode.toJSON(),
|
|
79
|
+
targetTypeName: targetNodeTypeName
|
|
80
|
+
})) === null || _transformRegistry$re === void 0 ? void 0 : _transformRegistry$re.status) !== 'supported';
|
|
83
81
|
}
|
|
84
82
|
const selectedNodes = getBlockNodesInRange(range);
|
|
85
83
|
const parent = range.parent;
|
|
@@ -26,80 +26,78 @@ export const transformNode = (api, transformRegistry) => (targetType, metadata)
|
|
|
26
26
|
return null;
|
|
27
27
|
}
|
|
28
28
|
const analytics = createTransformAnalytics(api, tr, preservedSelection);
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
29
|
+
const {
|
|
30
|
+
$from,
|
|
31
|
+
$to,
|
|
32
|
+
range
|
|
33
|
+
} = expandSelectionToBlockRange(preservedSelection);
|
|
34
|
+
const sourceNode = getSingleTransformSourceNode(preservedSelection, range);
|
|
35
|
+
if (isExtensionTransformSource(sourceNode)) {
|
|
36
|
+
var _metadata$targetTypeN;
|
|
37
|
+
const context = {
|
|
38
|
+
source: sourceNode.toJSON(),
|
|
39
|
+
targetTypeName: (_metadata$targetTypeN = metadata === null || metadata === void 0 ? void 0 : metadata.targetTypeName) !== null && _metadata$targetTypeN !== void 0 ? _metadata$targetTypeN : targetType.name
|
|
40
|
+
};
|
|
41
|
+
const resolution = transformRegistry === null || transformRegistry === void 0 ? void 0 : transformRegistry.resolve(context);
|
|
42
|
+
if (!resolution || resolution.status === 'unsupported') {
|
|
43
|
+
return tr;
|
|
44
|
+
}
|
|
45
|
+
const measureId = `transformNode_${targetType.name}_${Date.now()}`;
|
|
46
|
+
startMeasure(measureId);
|
|
47
|
+
try {
|
|
48
|
+
var _api$blockControls2, _api$blockControls3;
|
|
49
|
+
const transformResult = resolution.transform.transform(context);
|
|
50
|
+
if (!transformResult) {
|
|
51
|
+
stopMeasure(measureId);
|
|
44
52
|
return tr;
|
|
45
53
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
54
|
+
if (!Array.isArray(transformResult.output) || transformResult.output.length === 0) {
|
|
55
|
+
throw new Error('Block menu transform returned no output');
|
|
56
|
+
}
|
|
57
|
+
const resultNodes = transformResult.output.map(nodeAdf => {
|
|
58
|
+
const node = Node.fromJSON(tr.doc.type.schema, nodeAdf);
|
|
59
|
+
node.check();
|
|
60
|
+
return node;
|
|
61
|
+
});
|
|
62
|
+
if (!range || !range.parent.canReplace(range.startIndex, range.endIndex, Fragment.from(resultNodes))) {
|
|
63
|
+
throw new Error('Block menu transform output is invalid at the selected position');
|
|
64
|
+
}
|
|
65
|
+
const sliceStart = $from.pos;
|
|
66
|
+
tr.replaceWith(sliceStart, $to.pos, resultNodes);
|
|
67
|
+
const insertedNode = tr.doc.nodeAt(sliceStart);
|
|
68
|
+
const nextSelection = insertedNode && NodeSelection.isSelectable(insertedNode) ? NodeSelection.create(tr.doc, sliceStart) : Selection.near(tr.doc.resolve(sliceStart));
|
|
69
|
+
tr.setSelection(nextSelection);
|
|
70
|
+
api === null || api === void 0 ? void 0 : (_api$blockControls2 = api.blockControls) === null || _api$blockControls2 === void 0 ? void 0 : _api$blockControls2.commands.stopPreservingSelection()({
|
|
71
|
+
tr
|
|
72
|
+
});
|
|
73
|
+
api === null || api === void 0 ? void 0 : (_api$blockControls3 = api.blockControls) === null || _api$blockControls3 === void 0 ? void 0 : _api$blockControls3.commands.toggleBlockMenu({
|
|
74
|
+
closeMenu: true
|
|
75
|
+
})({
|
|
76
|
+
tr
|
|
77
|
+
});
|
|
78
|
+
const {
|
|
79
|
+
expand,
|
|
80
|
+
nestedExpand
|
|
81
|
+
} = tr.doc.type.schema.nodes;
|
|
82
|
+
resultNodes.forEach(node => {
|
|
83
|
+
if (node.type === expand || node.type === nestedExpand) {
|
|
84
|
+
expandedState.set(node, true);
|
|
65
85
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
api === null || api === void 0 ? void 0 : (_api$blockControls3 = api.blockControls) === null || _api$blockControls3 === void 0 ? void 0 : _api$blockControls3.commands.toggleBlockMenu({
|
|
75
|
-
closeMenu: true
|
|
76
|
-
})({
|
|
77
|
-
tr
|
|
78
|
-
});
|
|
79
|
-
const {
|
|
80
|
-
expand,
|
|
81
|
-
nestedExpand
|
|
82
|
-
} = tr.doc.type.schema.nodes;
|
|
83
|
-
resultNodes.forEach(node => {
|
|
84
|
-
if (node.type === expand || node.type === nestedExpand) {
|
|
85
|
-
expandedState.set(node, true);
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
stopMeasure(measureId, (duration, startTime) => {
|
|
89
|
-
analytics.transformed(duration, startTime, {
|
|
90
|
-
isNested: isNestedNode(preservedSelection, ''),
|
|
91
|
-
isSuggested: Boolean(metadata === null || metadata === void 0 ? void 0 : metadata.isSuggested),
|
|
92
|
-
outputNodesCount: resultNodes.length,
|
|
93
|
-
sourceNodes: [sourceNode],
|
|
94
|
-
targetNodeType: targetType.name
|
|
95
|
-
});
|
|
86
|
+
});
|
|
87
|
+
stopMeasure(measureId, (duration, startTime) => {
|
|
88
|
+
analytics.transformed(duration, startTime, {
|
|
89
|
+
isNested: isNestedNode(preservedSelection, ''),
|
|
90
|
+
isSuggested: Boolean(metadata === null || metadata === void 0 ? void 0 : metadata.isSuggested),
|
|
91
|
+
outputNodesCount: resultNodes.length,
|
|
92
|
+
sourceNodes: [sourceNode],
|
|
93
|
+
targetNodeType: targetType.name
|
|
96
94
|
});
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
return tr;
|
|
95
|
+
});
|
|
96
|
+
} catch (error) {
|
|
97
|
+
stopMeasure(measureId);
|
|
98
|
+
analytics.errored(error, [sourceNode], targetType.name);
|
|
102
99
|
}
|
|
100
|
+
return tr;
|
|
103
101
|
}
|
|
104
102
|
const measureId = `transformNode_${targetType.name}_${Date.now()}`;
|
|
105
103
|
startMeasure(measureId);
|
|
@@ -107,10 +105,6 @@ export const transformNode = (api, transformRegistry) => (targetType, metadata)
|
|
|
107
105
|
const {
|
|
108
106
|
nodes
|
|
109
107
|
} = tr.doc.type.schema;
|
|
110
|
-
const {
|
|
111
|
-
$from,
|
|
112
|
-
$to
|
|
113
|
-
} = expandSelectionToBlockRange(preservedSelection);
|
|
114
108
|
const selectedParent = $from.parent;
|
|
115
109
|
const isParentLayout = selectedParent.type === nodes.layoutColumn;
|
|
116
110
|
const isNested = isNestedNode(preservedSelection, '') && !isParentLayout;
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
import memoizeOne from 'memoize-one';
|
|
2
1
|
import { findSelectedNodeOfType } from '@atlaskit/editor-prosemirror/utils';
|
|
3
|
-
import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
|
|
4
|
-
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
5
|
-
const getDisabledNodeTypes = memoizeOne(nodes => [nodes.rule, ...(expValEquals('confluence_native_tabs_experiment', 'isEnabled', true) ? [nodes.multiBodiedExtension] : [])]);
|
|
6
2
|
const getIsFormatMenuHidden = (selection, schema) => {
|
|
7
3
|
const nodes = schema.nodes;
|
|
8
4
|
if (!nodes) {
|
|
9
5
|
return false;
|
|
10
6
|
}
|
|
11
|
-
const
|
|
12
|
-
const disabledNode = findSelectedNodeOfType(disabledNodeTypes)(selection);
|
|
7
|
+
const disabledNode = findSelectedNodeOfType([nodes.rule])(selection);
|
|
13
8
|
return !!disabledNode;
|
|
14
9
|
};
|
|
15
10
|
export const checkIsFormatMenuHidden = api => {
|
|
@@ -18,7 +18,7 @@ export var blockMenuPlugin = function blockMenuPlugin(_ref) {
|
|
|
18
18
|
var api = _ref.api,
|
|
19
19
|
config = _ref.config;
|
|
20
20
|
var registry = createBlockMenuRegistry();
|
|
21
|
-
var transformSourceRegistry =
|
|
21
|
+
var transformSourceRegistry = createBlockMenuTransformSourceRegistry();
|
|
22
22
|
registry.register(getBlockMenuComponents({
|
|
23
23
|
api: api,
|
|
24
24
|
config: config
|
|
@@ -74,11 +74,7 @@ export var blockMenuPlugin = function blockMenuPlugin(_ref) {
|
|
|
74
74
|
});
|
|
75
75
|
},
|
|
76
76
|
registerBlockMenuTransforms: function registerBlockMenuTransforms(transforms) {
|
|
77
|
-
|
|
78
|
-
var _transformSourceRegis;
|
|
79
|
-
return (_transformSourceRegis = transformSourceRegistry === null || transformSourceRegistry === void 0 ? void 0 : transformSourceRegistry.register(transforms)) !== null && _transformSourceRegis !== void 0 ? _transformSourceRegis : function () {};
|
|
80
|
-
}
|
|
81
|
-
return function () {};
|
|
77
|
+
return transformSourceRegistry.register(transforms);
|
|
82
78
|
}
|
|
83
79
|
},
|
|
84
80
|
commands: {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
2
|
import { expandSelectionToBlockRange } from '@atlaskit/editor-common/selection';
|
|
3
3
|
import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
4
|
-
import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
|
|
5
4
|
import { isTransformDisabledBasedOnStepsConfig } from '../editor-commands/transform-node-utils/transform';
|
|
6
5
|
import { toNodeTypeValue } from '../editor-commands/transform-node-utils/types';
|
|
7
6
|
import { getBlockNodesInRange, getTargetNodeTypeNameInContext } from '../editor-commands/transform-node-utils/utils';
|
|
@@ -74,14 +73,13 @@ export var isTransformToTargetDisabled = function isTransformToTargetDisabled(_r
|
|
|
74
73
|
if (!range) {
|
|
75
74
|
return false;
|
|
76
75
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
76
|
+
var sourceNode = getSingleTransformSourceNode(selection, range);
|
|
77
|
+
if (isExtensionTransformSource(sourceNode)) {
|
|
78
|
+
var _transformRegistry$re;
|
|
79
|
+
return (transformRegistry === null || transformRegistry === void 0 || (_transformRegistry$re = transformRegistry.resolve({
|
|
80
|
+
source: sourceNode.toJSON(),
|
|
81
|
+
targetTypeName: targetNodeTypeName
|
|
82
|
+
})) === null || _transformRegistry$re === void 0 ? void 0 : _transformRegistry$re.status) !== 'supported';
|
|
85
83
|
}
|
|
86
84
|
var selectedNodes = getBlockNodesInRange(range);
|
|
87
85
|
var parent = range.parent;
|
|
@@ -27,86 +27,81 @@ export var transformNode = function transformNode(api, transformRegistry) {
|
|
|
27
27
|
return null;
|
|
28
28
|
}
|
|
29
29
|
var analytics = createTransformAnalytics(api, tr, preservedSelection);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
30
|
+
var _expandSelectionToBlo = expandSelectionToBlockRange(preservedSelection),
|
|
31
|
+
$from = _expandSelectionToBlo.$from,
|
|
32
|
+
$to = _expandSelectionToBlo.$to,
|
|
33
|
+
range = _expandSelectionToBlo.range;
|
|
34
|
+
var sourceNode = getSingleTransformSourceNode(preservedSelection, range);
|
|
35
|
+
if (isExtensionTransformSource(sourceNode)) {
|
|
36
|
+
var _metadata$targetTypeN;
|
|
37
|
+
var context = {
|
|
38
|
+
source: sourceNode.toJSON(),
|
|
39
|
+
targetTypeName: (_metadata$targetTypeN = metadata === null || metadata === void 0 ? void 0 : metadata.targetTypeName) !== null && _metadata$targetTypeN !== void 0 ? _metadata$targetTypeN : targetType.name
|
|
40
|
+
};
|
|
41
|
+
var resolution = transformRegistry === null || transformRegistry === void 0 ? void 0 : transformRegistry.resolve(context);
|
|
42
|
+
if (!resolution || resolution.status === 'unsupported') {
|
|
43
|
+
return tr;
|
|
44
|
+
}
|
|
45
|
+
var _measureId = "transformNode_".concat(targetType.name, "_").concat(Date.now());
|
|
46
|
+
startMeasure(_measureId);
|
|
47
|
+
try {
|
|
48
|
+
var _api$blockControls2, _api$blockControls3;
|
|
49
|
+
var transformResult = resolution.transform.transform(context);
|
|
50
|
+
if (!transformResult) {
|
|
51
|
+
stopMeasure(_measureId);
|
|
44
52
|
return tr;
|
|
45
53
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
var
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
54
|
+
if (!Array.isArray(transformResult.output) || transformResult.output.length === 0) {
|
|
55
|
+
throw new Error('Block menu transform returned no output');
|
|
56
|
+
}
|
|
57
|
+
var resultNodes = transformResult.output.map(function (nodeAdf) {
|
|
58
|
+
var node = Node.fromJSON(tr.doc.type.schema, nodeAdf);
|
|
59
|
+
node.check();
|
|
60
|
+
return node;
|
|
61
|
+
});
|
|
62
|
+
if (!range || !range.parent.canReplace(range.startIndex, range.endIndex, Fragment.from(resultNodes))) {
|
|
63
|
+
throw new Error('Block menu transform output is invalid at the selected position');
|
|
64
|
+
}
|
|
65
|
+
var sliceStart = $from.pos;
|
|
66
|
+
tr.replaceWith(sliceStart, $to.pos, resultNodes);
|
|
67
|
+
var insertedNode = tr.doc.nodeAt(sliceStart);
|
|
68
|
+
var nextSelection = insertedNode && NodeSelection.isSelectable(insertedNode) ? NodeSelection.create(tr.doc, sliceStart) : Selection.near(tr.doc.resolve(sliceStart));
|
|
69
|
+
tr.setSelection(nextSelection);
|
|
70
|
+
api === null || api === void 0 || (_api$blockControls2 = api.blockControls) === null || _api$blockControls2 === void 0 || _api$blockControls2.commands.stopPreservingSelection()({
|
|
71
|
+
tr: tr
|
|
72
|
+
});
|
|
73
|
+
api === null || api === void 0 || (_api$blockControls3 = api.blockControls) === null || _api$blockControls3 === void 0 || _api$blockControls3.commands.toggleBlockMenu({
|
|
74
|
+
closeMenu: true
|
|
75
|
+
})({
|
|
76
|
+
tr: tr
|
|
77
|
+
});
|
|
78
|
+
var _tr$doc$type$schema$n = tr.doc.type.schema.nodes,
|
|
79
|
+
expand = _tr$doc$type$schema$n.expand,
|
|
80
|
+
nestedExpand = _tr$doc$type$schema$n.nestedExpand;
|
|
81
|
+
resultNodes.forEach(function (node) {
|
|
82
|
+
if (node.type === expand || node.type === nestedExpand) {
|
|
83
|
+
expandedState.set(node, true);
|
|
65
84
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
api === null || api === void 0 || (_api$blockControls3 = api.blockControls) === null || _api$blockControls3 === void 0 || _api$blockControls3.commands.toggleBlockMenu({
|
|
75
|
-
closeMenu: true
|
|
76
|
-
})({
|
|
77
|
-
tr: tr
|
|
78
|
-
});
|
|
79
|
-
var _tr$doc$type$schema$n = tr.doc.type.schema.nodes,
|
|
80
|
-
expand = _tr$doc$type$schema$n.expand,
|
|
81
|
-
nestedExpand = _tr$doc$type$schema$n.nestedExpand;
|
|
82
|
-
resultNodes.forEach(function (node) {
|
|
83
|
-
if (node.type === expand || node.type === nestedExpand) {
|
|
84
|
-
expandedState.set(node, true);
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
stopMeasure(_measureId, function (duration, startTime) {
|
|
88
|
-
analytics.transformed(duration, startTime, {
|
|
89
|
-
isNested: isNestedNode(preservedSelection, ''),
|
|
90
|
-
isSuggested: Boolean(metadata === null || metadata === void 0 ? void 0 : metadata.isSuggested),
|
|
91
|
-
outputNodesCount: resultNodes.length,
|
|
92
|
-
sourceNodes: [sourceNode],
|
|
93
|
-
targetNodeType: targetType.name
|
|
94
|
-
});
|
|
85
|
+
});
|
|
86
|
+
stopMeasure(_measureId, function (duration, startTime) {
|
|
87
|
+
analytics.transformed(duration, startTime, {
|
|
88
|
+
isNested: isNestedNode(preservedSelection, ''),
|
|
89
|
+
isSuggested: Boolean(metadata === null || metadata === void 0 ? void 0 : metadata.isSuggested),
|
|
90
|
+
outputNodesCount: resultNodes.length,
|
|
91
|
+
sourceNodes: [sourceNode],
|
|
92
|
+
targetNodeType: targetType.name
|
|
95
93
|
});
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
return tr;
|
|
94
|
+
});
|
|
95
|
+
} catch (error) {
|
|
96
|
+
stopMeasure(_measureId);
|
|
97
|
+
analytics.errored(error, [sourceNode], targetType.name);
|
|
101
98
|
}
|
|
99
|
+
return tr;
|
|
102
100
|
}
|
|
103
101
|
var measureId = "transformNode_".concat(targetType.name, "_").concat(Date.now());
|
|
104
102
|
startMeasure(measureId);
|
|
105
103
|
var docBeforeTransform = tr.doc;
|
|
106
104
|
var nodes = tr.doc.type.schema.nodes;
|
|
107
|
-
var _expandSelectionToBlo2 = expandSelectionToBlockRange(preservedSelection),
|
|
108
|
-
$from = _expandSelectionToBlo2.$from,
|
|
109
|
-
$to = _expandSelectionToBlo2.$to;
|
|
110
105
|
var selectedParent = $from.parent;
|
|
111
106
|
var isParentLayout = selectedParent.type === nodes.layoutColumn;
|
|
112
107
|
var isNested = isNestedNode(preservedSelection, '') && !isParentLayout;
|
|
@@ -1,18 +1,10 @@
|
|
|
1
|
-
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
-
import memoizeOne from 'memoize-one';
|
|
3
1
|
import { findSelectedNodeOfType } from '@atlaskit/editor-prosemirror/utils';
|
|
4
|
-
import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
|
|
5
|
-
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
6
|
-
var getDisabledNodeTypes = memoizeOne(function (nodes) {
|
|
7
|
-
return [nodes.rule].concat(_toConsumableArray(expValEquals('confluence_native_tabs_experiment', 'isEnabled', true) ? [nodes.multiBodiedExtension] : []));
|
|
8
|
-
});
|
|
9
2
|
var getIsFormatMenuHidden = function getIsFormatMenuHidden(selection, schema) {
|
|
10
3
|
var nodes = schema.nodes;
|
|
11
4
|
if (!nodes) {
|
|
12
5
|
return false;
|
|
13
6
|
}
|
|
14
|
-
var
|
|
15
|
-
var disabledNode = findSelectedNodeOfType(disabledNodeTypes)(selection);
|
|
7
|
+
var disabledNode = findSelectedNodeOfType([nodes.rule])(selection);
|
|
16
8
|
return !!disabledNode;
|
|
17
9
|
};
|
|
18
10
|
export var checkIsFormatMenuHidden = function checkIsFormatMenuHidden(api) {
|
package/package.json
CHANGED
package/tsconfig.json
CHANGED