@atlaskit/editor-core 189.3.37 → 189.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -0
- package/dist/cjs/plugins/extension/commands.js +9 -2
- package/dist/cjs/plugins/extension/index.js +15 -1
- package/dist/cjs/plugins/extension/pm-plugins/main.js +2 -1
- package/dist/cjs/plugins/extension/toolbar.js +1 -1
- package/dist/cjs/plugins/extension/ui/Extension/Extension/index.js +1 -8
- package/dist/cjs/plugins/extension/ui/Extension/ExtensionComponent.js +29 -10
- package/dist/cjs/plugins/extension/ui/Extension/ExtensionNodeWrapper.js +7 -0
- package/dist/cjs/plugins/extension/ui/Extension/MultiBodiedExtension/index.js +154 -0
- package/dist/cjs/plugins/extension/utils.js +6 -4
- package/dist/cjs/ui/ContentStyles/extension.js +2 -1
- package/dist/cjs/version-wrapper.js +1 -1
- package/dist/es2019/plugins/extension/commands.js +10 -3
- package/dist/es2019/plugins/extension/index.js +16 -2
- package/dist/es2019/plugins/extension/pm-plugins/main.js +2 -1
- package/dist/es2019/plugins/extension/toolbar.js +1 -1
- package/dist/es2019/plugins/extension/ui/Extension/Extension/index.js +1 -8
- package/dist/es2019/plugins/extension/ui/Extension/ExtensionComponent.js +29 -10
- package/dist/es2019/plugins/extension/ui/Extension/ExtensionNodeWrapper.js +7 -0
- package/dist/es2019/plugins/extension/ui/Extension/MultiBodiedExtension/index.js +159 -0
- package/dist/es2019/plugins/extension/utils.js +6 -4
- package/dist/es2019/ui/ContentStyles/extension.js +6 -0
- package/dist/es2019/version-wrapper.js +1 -1
- package/dist/esm/plugins/extension/commands.js +9 -2
- package/dist/esm/plugins/extension/index.js +16 -2
- package/dist/esm/plugins/extension/pm-plugins/main.js +2 -1
- package/dist/esm/plugins/extension/toolbar.js +1 -1
- package/dist/esm/plugins/extension/ui/Extension/Extension/index.js +1 -8
- package/dist/esm/plugins/extension/ui/Extension/ExtensionComponent.js +29 -10
- package/dist/esm/plugins/extension/ui/Extension/ExtensionNodeWrapper.js +7 -0
- package/dist/esm/plugins/extension/ui/Extension/MultiBodiedExtension/index.js +146 -0
- package/dist/esm/plugins/extension/utils.js +6 -4
- package/dist/esm/ui/ContentStyles/extension.js +2 -1
- package/dist/esm/version-wrapper.js +1 -1
- package/dist/types/plugins/avatar-group/index.d.ts +4 -1
- package/dist/types/plugins/collab-edit/index.d.ts +5 -2
- package/dist/types/plugins/extension/commands.d.ts +2 -0
- package/dist/types/plugins/extension/ui/Extension/ExtensionComponent.d.ts +1 -0
- package/dist/types/plugins/extension/ui/Extension/ExtensionNodeWrapper.d.ts +7 -0
- package/dist/types/plugins/extension/ui/Extension/MultiBodiedExtension/index.d.ts +16 -0
- package/dist/types/plugins/find-replace/index.d.ts +4 -1
- package/dist/types/plugins/insert-block/types.d.ts +1 -1
- package/dist/types/plugins/toolbar-lists-indentation/index.d.ts +1 -1
- package/dist/types/presets/default.d.ts +72 -72
- package/dist/types-ts4.5/plugins/avatar-group/index.d.ts +1 -1
- package/dist/types-ts4.5/plugins/collab-edit/index.d.ts +3 -3
- package/dist/types-ts4.5/plugins/extension/commands.d.ts +2 -0
- package/dist/types-ts4.5/plugins/extension/ui/Extension/ExtensionComponent.d.ts +1 -0
- package/dist/types-ts4.5/plugins/extension/ui/Extension/ExtensionNodeWrapper.d.ts +7 -0
- package/dist/types-ts4.5/plugins/extension/ui/Extension/MultiBodiedExtension/index.d.ts +16 -0
- package/dist/types-ts4.5/plugins/find-replace/index.d.ts +1 -1
- package/dist/types-ts4.5/plugins/insert-block/types.d.ts +1 -1
- package/dist/types-ts4.5/plugins/toolbar-lists-indentation/index.d.ts +1 -1
- package/dist/types-ts4.5/presets/default.d.ts +72 -72
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,41 @@
|
|
|
1
1
|
# @atlaskit/editor-core
|
|
2
2
|
|
|
3
|
+
## 189.4.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#43569](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/43569) [`8c40410ca78`](https://bitbucket.org/atlassian/atlassian-frontend/commits/8c40410ca78) - ED-20043: MultiBodied Extension changes
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies
|
|
12
|
+
|
|
13
|
+
## 189.3.38
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- [#43646](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/43646) [`d43f8e9402f`](https://bitbucket.org/atlassian/atlassian-frontend/commits/d43f8e9402f) - Make feature flags plugin optional in all plugins including:
|
|
18
|
+
|
|
19
|
+
- analytics
|
|
20
|
+
- base
|
|
21
|
+
- card
|
|
22
|
+
- code-block
|
|
23
|
+
- expand
|
|
24
|
+
- extension
|
|
25
|
+
- floating-toolbar
|
|
26
|
+
- hyperlink
|
|
27
|
+
- insert-block
|
|
28
|
+
- layout
|
|
29
|
+
- layout
|
|
30
|
+
- list
|
|
31
|
+
- media
|
|
32
|
+
- paste
|
|
33
|
+
- rule
|
|
34
|
+
- table
|
|
35
|
+
- tasks-and-decisions
|
|
36
|
+
|
|
37
|
+
We already treat it as optional in the plugins, so this is just ensuring that the plugin is not mandatory to be added to the preset.
|
|
38
|
+
|
|
3
39
|
## 189.3.37
|
|
4
40
|
|
|
5
41
|
### Patch Changes
|
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.removeExtension = exports.removeDescendantNodes = exports.forceAutoSave = exports.clearEditingContext = void 0;
|
|
7
|
+
exports.removeExtension = exports.removeDescendantNodes = exports.forceAutoSave = exports.clearEditingContext = exports.checkAndRemoveExtensionNode = void 0;
|
|
8
8
|
exports.setEditingContextToContextPanel = setEditingContextToContextPanel;
|
|
9
9
|
exports.updateExtensionLayout = void 0;
|
|
10
10
|
exports.updateState = updateState;
|
|
@@ -83,7 +83,7 @@ var removeExtension = exports.removeExtension = function removeExtension() {
|
|
|
83
83
|
if ((0, _utils2.getSelectedExtension)(state)) {
|
|
84
84
|
return (0, _utils.removeSelectedNode)(tr);
|
|
85
85
|
} else {
|
|
86
|
-
return (
|
|
86
|
+
return checkAndRemoveExtensionNode(state, tr);
|
|
87
87
|
}
|
|
88
88
|
});
|
|
89
89
|
};
|
|
@@ -96,4 +96,11 @@ var removeDescendantNodes = exports.removeDescendantNodes = function removeDesce
|
|
|
96
96
|
}, function (tr, state) {
|
|
97
97
|
return sourceNode ? (0, _utils3.removeConnectedNodes)(state, sourceNode) : tr;
|
|
98
98
|
});
|
|
99
|
+
};
|
|
100
|
+
var checkAndRemoveExtensionNode = exports.checkAndRemoveExtensionNode = function checkAndRemoveExtensionNode(state, tr) {
|
|
101
|
+
var nodeType = state.schema.nodes.bodiedExtension;
|
|
102
|
+
if ((0, _utils.findParentNodeOfType)(state.schema.nodes.multiBodiedExtension)(state.selection)) {
|
|
103
|
+
nodeType = state.schema.nodes.multiBodiedExtension;
|
|
104
|
+
}
|
|
105
|
+
return (0, _utils.removeParentNodeOfType)(nodeType)(tr);
|
|
99
106
|
};
|
|
@@ -16,6 +16,7 @@ var _toolbar = require("./toolbar");
|
|
|
16
16
|
var _contextPanel = require("./context-panel");
|
|
17
17
|
var _extensionApi = require("./extension-api");
|
|
18
18
|
var _actions2 = require("./actions");
|
|
19
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
19
20
|
var extensionPlugin = function extensionPlugin(_ref) {
|
|
20
21
|
var _api$featureFlags, _api$analytics2, _api$analytics3, _api$contextPanel3, _api$analytics4, _api$contextPanel4;
|
|
21
22
|
var _ref$config = _ref.config,
|
|
@@ -30,7 +31,7 @@ var extensionPlugin = function extensionPlugin(_ref) {
|
|
|
30
31
|
return {
|
|
31
32
|
name: 'extension',
|
|
32
33
|
nodes: function nodes() {
|
|
33
|
-
|
|
34
|
+
var extensionNodes = [{
|
|
34
35
|
name: 'extension',
|
|
35
36
|
node: _adfSchema.extension
|
|
36
37
|
}, {
|
|
@@ -40,6 +41,19 @@ var extensionPlugin = function extensionPlugin(_ref) {
|
|
|
40
41
|
name: 'inlineExtension',
|
|
41
42
|
node: _adfSchema.inlineExtension
|
|
42
43
|
}];
|
|
44
|
+
|
|
45
|
+
// Revert to returning all nodes without local variable, once FF is removed
|
|
46
|
+
if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.multi-bodied-extension_0rygg')) {
|
|
47
|
+
extensionNodes.push({
|
|
48
|
+
name: 'extensionFrame',
|
|
49
|
+
node: _adfSchema.extensionFrame
|
|
50
|
+
});
|
|
51
|
+
extensionNodes.push({
|
|
52
|
+
name: 'multiBodiedExtension',
|
|
53
|
+
node: _adfSchema.multiBodiedExtension
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return extensionNodes;
|
|
43
57
|
},
|
|
44
58
|
pmPlugins: function pmPlugins() {
|
|
45
59
|
return [{
|
|
@@ -310,7 +310,8 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatch, provid
|
|
|
310
310
|
// WARNING: referentiality-plugin also creates these nodeviews
|
|
311
311
|
bodiedExtension: (0, _extension.default)(portalProviderAPI, eventDispatcher, providerFactory, extensionHandlers, extensionNodeViewOptions, pluginInjectionApi),
|
|
312
312
|
// WARNING: referentiality-plugin also creates these nodeviews
|
|
313
|
-
inlineExtension: (0, _extension.default)(portalProviderAPI, eventDispatcher, providerFactory, extensionHandlers, extensionNodeViewOptions, pluginInjectionApi)
|
|
313
|
+
inlineExtension: (0, _extension.default)(portalProviderAPI, eventDispatcher, providerFactory, extensionHandlers, extensionNodeViewOptions, pluginInjectionApi),
|
|
314
|
+
multiBodiedExtension: (0, _extension.default)(portalProviderAPI, eventDispatcher, providerFactory, extensionHandlers, extensionNodeViewOptions, pluginInjectionApi)
|
|
314
315
|
},
|
|
315
316
|
handleClickOn: (0, _selection.createSelectionClickHandler)(['extension', 'bodiedExtension'], function (target) {
|
|
316
317
|
return !target.closest('.extension-content');
|
|
@@ -128,7 +128,7 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig(_ref
|
|
|
128
128
|
var formatMessage = intl.formatMessage;
|
|
129
129
|
var extensionState = (0, _main.getPluginState)(state);
|
|
130
130
|
if (extensionState && !extensionState.showContextPanel && extensionState.element) {
|
|
131
|
-
var nodeType = [state.schema.nodes.extension, state.schema.nodes.inlineExtension, state.schema.nodes.bodiedExtension];
|
|
131
|
+
var nodeType = [state.schema.nodes.extension, state.schema.nodes.inlineExtension, state.schema.nodes.bodiedExtension, state.schema.nodes.multiBodiedExtension];
|
|
132
132
|
var editButtonArray = editButton(formatMessage, extensionState, applyChangeToContextPanel, editorAnalyticsAPI);
|
|
133
133
|
var breakoutButtonArray = breakoutOptions(state, formatMessage, extensionState, breakoutEnabled);
|
|
134
134
|
var extensionObj = (0, _utils2.getSelectedExtension)(state, true);
|
|
@@ -17,7 +17,6 @@ var _styles2 = require("../styles");
|
|
|
17
17
|
var _Lozenge = _interopRequireDefault(require("../Lozenge"));
|
|
18
18
|
var _classnames2 = _interopRequireDefault(require("classnames"));
|
|
19
19
|
var _hooks = require("@atlaskit/editor-common/hooks");
|
|
20
|
-
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
21
20
|
var _withPluginState = require("@atlaskit/editor-common/with-plugin-state");
|
|
22
21
|
var _excluded = ["type"];
|
|
23
22
|
/** @jsx jsx */
|
|
@@ -35,13 +34,7 @@ function ExtensionWithPluginState(props) {
|
|
|
35
34
|
shadowClassNames = props.shadowClassNames,
|
|
36
35
|
hideFrame = props.hideFrame,
|
|
37
36
|
editorAppearance = props.editorAppearance;
|
|
38
|
-
var
|
|
39
|
-
if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.multi-bodied-extension_0rygg')) {
|
|
40
|
-
isMultiBodiedExtension = true;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
//TODO: clean-up after removing multi-bodied-extension FF
|
|
44
|
-
var hasBody = node.type.name === 'bodiedExtension' || isMultiBodiedExtension && node.type.name === 'multiBodiedExtension';
|
|
37
|
+
var hasBody = ['bodiedExtension', 'multiBodiedExtension'].includes(node.type.name);
|
|
45
38
|
var isMobile = editorAppearance === 'mobile';
|
|
46
39
|
var hasChildren = !!children;
|
|
47
40
|
var removeBorder = hideFrame && !isMobile && !hasBody || false;
|
|
@@ -21,6 +21,7 @@ var _extensions = require("@atlaskit/editor-common/extensions");
|
|
|
21
21
|
var _utils = require("@atlaskit/editor-common/utils");
|
|
22
22
|
var _Extension = _interopRequireDefault(require("./Extension"));
|
|
23
23
|
var _InlineExtension = _interopRequireDefault(require("./InlineExtension"));
|
|
24
|
+
var _MultiBodiedExtension = _interopRequireDefault(require("./MultiBodiedExtension"));
|
|
24
25
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
25
26
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
26
27
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
@@ -96,7 +97,7 @@ var ExtensionComponent = exports.default = /*#__PURE__*/function (_Component) {
|
|
|
96
97
|
}
|
|
97
98
|
}, _callee, null, [[4, 11]]);
|
|
98
99
|
})));
|
|
99
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleExtension", function (pmNode) {
|
|
100
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleExtension", function (pmNode, actions) {
|
|
100
101
|
var _pmNode$marks;
|
|
101
102
|
var _this$props = _this.props,
|
|
102
103
|
extensionHandlers = _this$props.extensionHandlers,
|
|
@@ -125,16 +126,24 @@ var ExtensionComponent = exports.default = /*#__PURE__*/function (_Component) {
|
|
|
125
126
|
var result;
|
|
126
127
|
if (extensionHandlers && extensionHandlers[extensionType]) {
|
|
127
128
|
var render = (0, _utils.getExtensionRenderer)(extensionHandlers[extensionType]);
|
|
128
|
-
result = render(node, editorView.state.doc);
|
|
129
|
+
result = render(node, editorView.state.doc, actions);
|
|
129
130
|
}
|
|
130
131
|
if (!result) {
|
|
131
132
|
var extensionHandlerFromProvider = _this.state.extensionProvider && _this.getNodeRenderer(_this.state.extensionProvider, extensionType, extensionKey);
|
|
132
133
|
if (extensionHandlerFromProvider) {
|
|
133
134
|
var NodeRenderer = extensionHandlerFromProvider;
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
135
|
+
if (node.type === 'multiBodiedExtension') {
|
|
136
|
+
return /*#__PURE__*/_react.default.createElement(NodeRenderer, {
|
|
137
|
+
node: node,
|
|
138
|
+
references: _this.props.references,
|
|
139
|
+
actions: actions
|
|
140
|
+
});
|
|
141
|
+
} else {
|
|
142
|
+
return /*#__PURE__*/_react.default.createElement(NodeRenderer, {
|
|
143
|
+
node: node,
|
|
144
|
+
references: _this.props.references
|
|
145
|
+
});
|
|
146
|
+
}
|
|
138
147
|
}
|
|
139
148
|
}
|
|
140
149
|
return result;
|
|
@@ -182,8 +191,18 @@ var ExtensionComponent = exports.default = /*#__PURE__*/function (_Component) {
|
|
|
182
191
|
editorView = _this$props2.editorView,
|
|
183
192
|
references = _this$props2.references,
|
|
184
193
|
editorAppearance = _this$props2.editorAppearance,
|
|
185
|
-
pluginInjectionApi = _this$props2.pluginInjectionApi
|
|
186
|
-
|
|
194
|
+
pluginInjectionApi = _this$props2.pluginInjectionApi,
|
|
195
|
+
getPos = _this$props2.getPos;
|
|
196
|
+
if (node.type.name === 'multiBodiedExtension') {
|
|
197
|
+
return /*#__PURE__*/_react.default.createElement(_MultiBodiedExtension.default, {
|
|
198
|
+
node: node,
|
|
199
|
+
editorView: editorView,
|
|
200
|
+
getPos: getPos,
|
|
201
|
+
handleContentDOMRef: handleContentDOMRef,
|
|
202
|
+
tryExtensionHandler: this.tryExtensionHandler.bind(this)
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
var extensionHandlerResult = this.tryExtensionHandler(undefined);
|
|
187
206
|
switch (node.type.name) {
|
|
188
207
|
case 'extension':
|
|
189
208
|
case 'bodiedExtension':
|
|
@@ -208,10 +227,10 @@ var ExtensionComponent = exports.default = /*#__PURE__*/function (_Component) {
|
|
|
208
227
|
}
|
|
209
228
|
}, {
|
|
210
229
|
key: "tryExtensionHandler",
|
|
211
|
-
value: function tryExtensionHandler() {
|
|
230
|
+
value: function tryExtensionHandler(actions) {
|
|
212
231
|
var node = this.props.node;
|
|
213
232
|
try {
|
|
214
|
-
var extensionContent = this.handleExtension(node);
|
|
233
|
+
var extensionContent = this.handleExtension(node, actions);
|
|
215
234
|
if (extensionContent && /*#__PURE__*/_react.default.isValidElement(extensionContent)) {
|
|
216
235
|
return extensionContent;
|
|
217
236
|
}
|
|
@@ -7,6 +7,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
9
|
var _utils = require("@atlaskit/editor-common/utils");
|
|
10
|
+
/**
|
|
11
|
+
* If inlineExtension, add zero width space to the end of the nodes and wrap with span;
|
|
12
|
+
* else wrap with a div (for multi bodied extensions)
|
|
13
|
+
*
|
|
14
|
+
* @param param0
|
|
15
|
+
* @returns
|
|
16
|
+
*/
|
|
10
17
|
var ExtensionNodeWrapper = function ExtensionNodeWrapper(_ref) {
|
|
11
18
|
var children = _ref.children,
|
|
12
19
|
nodeType = _ref.nodeType;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
|
+
var _react = require("@emotion/react");
|
|
13
|
+
var _colors = require("@atlaskit/theme/colors");
|
|
14
|
+
var _react2 = _interopRequireWildcard(require("react"));
|
|
15
|
+
var _templateObject;
|
|
16
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
17
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
18
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
19
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /** @jsx jsx */
|
|
20
|
+
var useMultiBodiedExtensionActions = function useMultiBodiedExtensionActions(_ref) {
|
|
21
|
+
var updateActiveChild = _ref.updateActiveChild,
|
|
22
|
+
editorView = _ref.editorView,
|
|
23
|
+
getPos = _ref.getPos,
|
|
24
|
+
node = _ref.node;
|
|
25
|
+
var actions = _react2.default.useMemo(function () {
|
|
26
|
+
return {
|
|
27
|
+
changeActive: function changeActive(index) {
|
|
28
|
+
return updateActiveChild(index);
|
|
29
|
+
},
|
|
30
|
+
addChild: function addChild() {
|
|
31
|
+
var state = editorView.state,
|
|
32
|
+
dispatch = editorView.dispatch;
|
|
33
|
+
if (node.content.childCount >= node.attrs.maxFrames) {
|
|
34
|
+
// TODO: add proper log on this
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
var p = state.schema.nodes.paragraph.createAndFill({});
|
|
38
|
+
if (!p) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
var frame = state.schema.nodes.extensionFrame.createAndFill({}, [p]);
|
|
42
|
+
var pos = getPos();
|
|
43
|
+
if (typeof pos !== 'number' || !frame) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
var insertAt = Math.min((pos || 1) + node.content.size, state.doc.content.size);
|
|
47
|
+
dispatch(state.tr.insert(insertAt, frame));
|
|
48
|
+
return true;
|
|
49
|
+
},
|
|
50
|
+
getChildrenCount: function getChildrenCount() {
|
|
51
|
+
return node.content.childCount;
|
|
52
|
+
},
|
|
53
|
+
removeChild: function removeChild(index) {
|
|
54
|
+
var pos = getPos();
|
|
55
|
+
// TODO: Add child index validation here, don't trust this data
|
|
56
|
+
if (typeof pos !== 'number' || typeof index !== 'number') {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
var state = editorView.state,
|
|
60
|
+
dispatch = editorView.dispatch;
|
|
61
|
+
if (node.content.childCount === 1) {
|
|
62
|
+
var _tr = state.tr;
|
|
63
|
+
_tr.deleteRange(pos, pos + node.content.size);
|
|
64
|
+
dispatch(_tr);
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
var $pos = state.doc.resolve(pos);
|
|
68
|
+
var $startNodePos = state.doc.resolve($pos.start($pos.depth + 1));
|
|
69
|
+
var startFramePosition = $startNodePos.posAtIndex(index);
|
|
70
|
+
var maybeFrameNode = state.doc.nodeAt(startFramePosition);
|
|
71
|
+
if (!maybeFrameNode) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
var endFramePosition = maybeFrameNode.content.size + startFramePosition;
|
|
75
|
+
var tr = state.tr;
|
|
76
|
+
tr.deleteRange(startFramePosition, endFramePosition);
|
|
77
|
+
dispatch(tr);
|
|
78
|
+
return true;
|
|
79
|
+
},
|
|
80
|
+
updateParameters: function updateParameters(parameters) {
|
|
81
|
+
var state = editorView.state,
|
|
82
|
+
dispatch = editorView.dispatch;
|
|
83
|
+
var pos = getPos();
|
|
84
|
+
if (typeof pos !== 'number') {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
var tr = state.tr.setNodeMarkup(pos, undefined, _objectSpread(_objectSpread({}, node.attrs), {}, {
|
|
88
|
+
parameters: parameters
|
|
89
|
+
}));
|
|
90
|
+
dispatch(tr);
|
|
91
|
+
return true;
|
|
92
|
+
},
|
|
93
|
+
getChildren: function getChildren() {
|
|
94
|
+
var _state$doc$nodeAt;
|
|
95
|
+
var state = editorView.state;
|
|
96
|
+
var pos = getPos();
|
|
97
|
+
if (typeof pos !== 'number') {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
var children = (_state$doc$nodeAt = state.doc.nodeAt(pos)) === null || _state$doc$nodeAt === void 0 ? void 0 : _state$doc$nodeAt.content;
|
|
101
|
+
return children ? children.toJSON() : [];
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}, [node, editorView, getPos, updateActiveChild]);
|
|
105
|
+
return actions;
|
|
106
|
+
};
|
|
107
|
+
var MultiBodiedExtension = function MultiBodiedExtension(_ref2) {
|
|
108
|
+
var node = _ref2.node,
|
|
109
|
+
handleContentDOMRef = _ref2.handleContentDOMRef,
|
|
110
|
+
getPos = _ref2.getPos,
|
|
111
|
+
tryExtensionHandler = _ref2.tryExtensionHandler,
|
|
112
|
+
editorView = _ref2.editorView;
|
|
113
|
+
var _useState = (0, _react2.useState)(0),
|
|
114
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
115
|
+
activeChildIndex = _useState2[0],
|
|
116
|
+
setActiveChildIndex = _useState2[1];
|
|
117
|
+
// Adding to avoid aliasing `this` for the callbacks
|
|
118
|
+
var updateActiveChild = _react2.default.useCallback(function (index) {
|
|
119
|
+
if (typeof index !== 'number') {
|
|
120
|
+
// TODO: Make sure we log this somewhere if this happens
|
|
121
|
+
setActiveChildIndex(0);
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
setActiveChildIndex(index);
|
|
125
|
+
return true;
|
|
126
|
+
}, [setActiveChildIndex]);
|
|
127
|
+
var actions = useMultiBodiedExtensionActions({
|
|
128
|
+
updateActiveChild: updateActiveChild,
|
|
129
|
+
editorView: editorView,
|
|
130
|
+
getPos: getPos,
|
|
131
|
+
node: node
|
|
132
|
+
});
|
|
133
|
+
var extensionHandlerResult = _react2.default.useMemo(function () {
|
|
134
|
+
return tryExtensionHandler(actions);
|
|
135
|
+
}, [tryExtensionHandler, actions]);
|
|
136
|
+
var articleRef = _react2.default.useCallback(function (node) {
|
|
137
|
+
return handleContentDOMRef(node);
|
|
138
|
+
}, [handleContentDOMRef]);
|
|
139
|
+
var containerCss = (0, _react.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n border: 1px solid ", ";\n padding: ", ";\n .multiBodiedExtension-content-dom-wrapper > [data-extension-frame='true'] {\n display: none;\n }\n\n .multiBodiedExtension-content-dom-wrapper\n > [data-extension-frame='true']:nth-of-type(", ") {\n display: block;\n }\n "])), "var(--ds-border, ".concat(_colors.N30, ")"), "var(--ds-space-050, 4px)", activeChildIndex + 1);
|
|
140
|
+
return (0, _react.jsx)("section", {
|
|
141
|
+
className: "multiBodiedExtension--container",
|
|
142
|
+
css: containerCss,
|
|
143
|
+
"data-testid": "multiBodiedExtension--container",
|
|
144
|
+
"data-active-child-index": activeChildIndex
|
|
145
|
+
}, (0, _react.jsx)("nav", {
|
|
146
|
+
className: "multiBodiedExtension-navigation",
|
|
147
|
+
"data-testid": "multiBodiedExtension-navigation"
|
|
148
|
+
}, extensionHandlerResult), (0, _react.jsx)("article", {
|
|
149
|
+
className: "multiBodiedExtension--frames",
|
|
150
|
+
"data-testid": "multiBodiedExtension--frames",
|
|
151
|
+
ref: articleRef
|
|
152
|
+
}));
|
|
153
|
+
};
|
|
154
|
+
var _default = exports.default = MultiBodiedExtension;
|
|
@@ -11,8 +11,9 @@ var getSelectedExtension = exports.getSelectedExtension = function getSelectedEx
|
|
|
11
11
|
var _state$schema$nodes = state.schema.nodes,
|
|
12
12
|
inlineExtension = _state$schema$nodes.inlineExtension,
|
|
13
13
|
extension = _state$schema$nodes.extension,
|
|
14
|
-
bodiedExtension = _state$schema$nodes.bodiedExtension
|
|
15
|
-
|
|
14
|
+
bodiedExtension = _state$schema$nodes.bodiedExtension,
|
|
15
|
+
multiBodiedExtension = _state$schema$nodes.multiBodiedExtension;
|
|
16
|
+
var nodeTypes = [extension, bodiedExtension, inlineExtension, multiBodiedExtension];
|
|
16
17
|
return (0, _utils.findSelectedNodeOfType)(nodeTypes)(state.selection) || searchParent && (0, _utils.findParentNodeOfType)(nodeTypes)(state.selection) || undefined;
|
|
17
18
|
};
|
|
18
19
|
var findExtensionWithLocalId = exports.findExtensionWithLocalId = function findExtensionWithLocalId(state, localId) {
|
|
@@ -26,8 +27,9 @@ var findExtensionWithLocalId = exports.findExtensionWithLocalId = function findE
|
|
|
26
27
|
var _state$schema$nodes2 = state.schema.nodes,
|
|
27
28
|
inlineExtension = _state$schema$nodes2.inlineExtension,
|
|
28
29
|
extension = _state$schema$nodes2.extension,
|
|
29
|
-
bodiedExtension = _state$schema$nodes2.bodiedExtension
|
|
30
|
-
|
|
30
|
+
bodiedExtension = _state$schema$nodes2.bodiedExtension,
|
|
31
|
+
multiBodiedExtension = _state$schema$nodes2.multiBodiedExtension;
|
|
32
|
+
var nodeTypes = [extension, bodiedExtension, inlineExtension, multiBodiedExtension];
|
|
31
33
|
var matched;
|
|
32
34
|
state.doc.descendants(function (node, pos) {
|
|
33
35
|
if (nodeTypes.includes(node.type) && node.attrs.localId === localId) {
|
|
@@ -9,4 +9,5 @@ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/hel
|
|
|
9
9
|
var _react = require("@emotion/react");
|
|
10
10
|
var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
|
|
11
11
|
var _templateObject;
|
|
12
|
-
|
|
12
|
+
// eslint-disable-next-line @atlaskit/design-system/ensure-design-token-usage
|
|
13
|
+
var extensionStyles = exports.extensionStyles = (0, _react.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n .multiBodiedExtensionView-content-wrap.", ":not(.danger) {\n ", "\n }\n\n .extensionView-content-wrap,\n .multiBodiedExtensionView-content-wrap,\n .bodiedExtensionView-content-wrap {\n margin: ", " 0;\n\n &:first-of-type {\n margin-top: 0;\n }\n\n &:last-of-type {\n margin-bottom: 0;\n }\n\n &:not(.danger).", " {\n & > span > .extension-container {\n ", "\n }\n }\n\n &.danger > span > .extension-container {\n box-shadow: 0 0 0 ", "px\n ", ";\n background-color: ", ";\n }\n\n &.inline {\n word-wrap: break-all;\n }\n }\n\n .extensionView-content-wrap .extension-container {\n overflow: hidden;\n }\n\n .bodiedExtensionView-content-wrap\n .extensionView-content-wrap\n .extension-container {\n width: 100%;\n max-width: 100%; // ensure width can't go over 100%;\n }\n\n [data-mark-type='fragment'] {\n & > .extensionView-content-wrap,\n & > .bodiedExtensionView-content-wrap {\n margin: ", " 0;\n }\n\n & > [data-mark-type='dataConsumer'] {\n & > .extensionView-content-wrap,\n & > .bodiedExtensionView-content-wrap {\n margin: ", " 0;\n }\n }\n\n &:first-child {\n & > .extensionView-content-wrap,\n & > .bodiedExtensionView-content-wrap {\n margin-top: 0;\n }\n\n & > [data-mark-type='dataConsumer'] {\n & > .extensionView-content-wrap,\n & > .bodiedExtensionView-content-wrap {\n margin-top: 0;\n }\n }\n }\n\n &:nth-last-of-type(-n + 2):not(:first-of-type) {\n & > .extensionView-content-wrap,\n & > .bodiedExtensionView-content-wrap {\n margin-bottom: 0;\n }\n\n & > [data-mark-type='dataConsumer'] {\n & > .extensionView-content-wrap,\n & > .bodiedExtensionView-content-wrap {\n margin-bottom: 0;\n }\n }\n }\n }\n"])), _editorSharedStyles.akEditorSelectedNodeClassName, (0, _editorSharedStyles.getSelectionStyles)([_editorSharedStyles.SelectionStyle.BoxShadow, _editorSharedStyles.SelectionStyle.Blanket]), _editorSharedStyles.blockNodesVerticalMargin, _editorSharedStyles.akEditorSelectedNodeClassName, (0, _editorSharedStyles.getSelectionStyles)([_editorSharedStyles.SelectionStyle.BoxShadow]), _editorSharedStyles.akEditorSelectedBorderSize, "var(--ds-border-danger, ".concat(_editorSharedStyles.akEditorDeleteBorder, ")"), "var(--ds-background-danger, ".concat(_editorSharedStyles.akEditorDeleteBackground, ")"), _editorSharedStyles.blockNodesVerticalMargin, _editorSharedStyles.blockNodesVerticalMargin);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { removeSelectedNode, removeParentNodeOfType } from '@atlaskit/editor-prosemirror/utils';
|
|
1
|
+
import { removeSelectedNode, removeParentNodeOfType, findParentNodeOfType } from '@atlaskit/editor-prosemirror/utils';
|
|
2
2
|
import { createCommand } from './plugin-factory';
|
|
3
3
|
import { getSelectedExtension } from './utils';
|
|
4
4
|
import { removeConnectedNodes } from '@atlaskit/editor-common/utils';
|
|
@@ -61,7 +61,7 @@ export const removeExtension = () => createCommand({
|
|
|
61
61
|
if (getSelectedExtension(state)) {
|
|
62
62
|
return removeSelectedNode(tr);
|
|
63
63
|
} else {
|
|
64
|
-
return
|
|
64
|
+
return checkAndRemoveExtensionNode(state, tr);
|
|
65
65
|
}
|
|
66
66
|
});
|
|
67
67
|
export const removeDescendantNodes = sourceNode => createCommand({
|
|
@@ -71,4 +71,11 @@ export const removeDescendantNodes = sourceNode => createCommand({
|
|
|
71
71
|
}
|
|
72
72
|
}, (tr, state) => {
|
|
73
73
|
return sourceNode ? removeConnectedNodes(state, sourceNode) : tr;
|
|
74
|
-
});
|
|
74
|
+
});
|
|
75
|
+
export const checkAndRemoveExtensionNode = (state, tr) => {
|
|
76
|
+
let nodeType = state.schema.nodes.bodiedExtension;
|
|
77
|
+
if (findParentNodeOfType(state.schema.nodes.multiBodiedExtension)(state.selection)) {
|
|
78
|
+
nodeType = state.schema.nodes.multiBodiedExtension;
|
|
79
|
+
}
|
|
80
|
+
return removeParentNodeOfType(nodeType)(tr);
|
|
81
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { extension, bodiedExtension, inlineExtension } from '@atlaskit/adf-schema';
|
|
1
|
+
import { extension, bodiedExtension, inlineExtension, multiBodiedExtension, extensionFrame } from '@atlaskit/adf-schema';
|
|
2
2
|
import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
|
|
3
3
|
import { createPlugin } from './pm-plugins/main';
|
|
4
4
|
import { createPlugin as createMacroPlugin } from './pm-plugins/macro';
|
|
@@ -9,6 +9,7 @@ import { getToolbarConfig } from './toolbar';
|
|
|
9
9
|
import { getContextPanel } from './context-panel';
|
|
10
10
|
import { createExtensionAPI } from './extension-api';
|
|
11
11
|
import { createEditSelectedExtensionAction } from './actions';
|
|
12
|
+
import { getBooleanFF } from '@atlaskit/platform-feature-flags';
|
|
12
13
|
const extensionPlugin = ({
|
|
13
14
|
config: options = {},
|
|
14
15
|
api
|
|
@@ -23,7 +24,7 @@ const extensionPlugin = ({
|
|
|
23
24
|
return {
|
|
24
25
|
name: 'extension',
|
|
25
26
|
nodes() {
|
|
26
|
-
|
|
27
|
+
const extensionNodes = [{
|
|
27
28
|
name: 'extension',
|
|
28
29
|
node: extension
|
|
29
30
|
}, {
|
|
@@ -33,6 +34,19 @@ const extensionPlugin = ({
|
|
|
33
34
|
name: 'inlineExtension',
|
|
34
35
|
node: inlineExtension
|
|
35
36
|
}];
|
|
37
|
+
|
|
38
|
+
// Revert to returning all nodes without local variable, once FF is removed
|
|
39
|
+
if (getBooleanFF('platform.editor.multi-bodied-extension_0rygg')) {
|
|
40
|
+
extensionNodes.push({
|
|
41
|
+
name: 'extensionFrame',
|
|
42
|
+
node: extensionFrame
|
|
43
|
+
});
|
|
44
|
+
extensionNodes.push({
|
|
45
|
+
name: 'multiBodiedExtension',
|
|
46
|
+
node: multiBodiedExtension
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return extensionNodes;
|
|
36
50
|
},
|
|
37
51
|
pmPlugins() {
|
|
38
52
|
return [{
|
|
@@ -218,7 +218,8 @@ const createPlugin = (dispatch, providerFactory, extensionHandlers, portalProvid
|
|
|
218
218
|
// WARNING: referentiality-plugin also creates these nodeviews
|
|
219
219
|
bodiedExtension: ExtensionNodeView(portalProviderAPI, eventDispatcher, providerFactory, extensionHandlers, extensionNodeViewOptions, pluginInjectionApi),
|
|
220
220
|
// WARNING: referentiality-plugin also creates these nodeviews
|
|
221
|
-
inlineExtension: ExtensionNodeView(portalProviderAPI, eventDispatcher, providerFactory, extensionHandlers, extensionNodeViewOptions, pluginInjectionApi)
|
|
221
|
+
inlineExtension: ExtensionNodeView(portalProviderAPI, eventDispatcher, providerFactory, extensionHandlers, extensionNodeViewOptions, pluginInjectionApi),
|
|
222
|
+
multiBodiedExtension: ExtensionNodeView(portalProviderAPI, eventDispatcher, providerFactory, extensionHandlers, extensionNodeViewOptions, pluginInjectionApi)
|
|
222
223
|
},
|
|
223
224
|
handleClickOn: createSelectionClickHandler(['extension', 'bodiedExtension'], target => !target.closest('.extension-content'), {
|
|
224
225
|
useLongPressSelection
|
|
@@ -129,7 +129,7 @@ export const getToolbarConfig = ({
|
|
|
129
129
|
} = intl;
|
|
130
130
|
const extensionState = getPluginState(state);
|
|
131
131
|
if (extensionState && !extensionState.showContextPanel && extensionState.element) {
|
|
132
|
-
const nodeType = [state.schema.nodes.extension, state.schema.nodes.inlineExtension, state.schema.nodes.bodiedExtension];
|
|
132
|
+
const nodeType = [state.schema.nodes.extension, state.schema.nodes.inlineExtension, state.schema.nodes.bodiedExtension, state.schema.nodes.multiBodiedExtension];
|
|
133
133
|
const editButtonArray = editButton(formatMessage, extensionState, applyChangeToContextPanel, editorAnalyticsAPI);
|
|
134
134
|
const breakoutButtonArray = breakoutOptions(state, formatMessage, extensionState, breakoutEnabled);
|
|
135
135
|
const extensionObj = getSelectedExtension(state, true);
|
|
@@ -10,7 +10,6 @@ import { overlay } from '../styles';
|
|
|
10
10
|
import ExtensionLozenge from '../Lozenge';
|
|
11
11
|
import classnames from 'classnames';
|
|
12
12
|
import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
|
|
13
|
-
import { getBooleanFF } from '@atlaskit/platform-feature-flags';
|
|
14
13
|
function ExtensionWithPluginState(props) {
|
|
15
14
|
const {
|
|
16
15
|
node,
|
|
@@ -24,13 +23,7 @@ function ExtensionWithPluginState(props) {
|
|
|
24
23
|
hideFrame,
|
|
25
24
|
editorAppearance
|
|
26
25
|
} = props;
|
|
27
|
-
|
|
28
|
-
if (getBooleanFF('platform.editor.multi-bodied-extension_0rygg')) {
|
|
29
|
-
isMultiBodiedExtension = true;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
//TODO: clean-up after removing multi-bodied-extension FF
|
|
33
|
-
const hasBody = node.type.name === 'bodiedExtension' || isMultiBodiedExtension && node.type.name === 'multiBodiedExtension';
|
|
26
|
+
const hasBody = ['bodiedExtension', 'multiBodiedExtension'].includes(node.type.name);
|
|
34
27
|
const isMobile = editorAppearance === 'mobile';
|
|
35
28
|
const hasChildren = !!children;
|
|
36
29
|
const removeBorder = hideFrame && !isMobile && !hasBody || false;
|