@atlaskit/editor-plugin-media 1.36.4 → 1.37.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 +23 -0
- package/dist/cjs/nodeviews/mediaGroup.js +19 -0
- package/dist/cjs/nodeviews/mediaGroupNext.js +295 -0
- package/dist/cjs/nodeviews/mediaNodeUpdater.js +1 -3
- package/dist/cjs/pm-plugins/main.js +18 -0
- package/dist/cjs/toolbar/index.js +6 -2
- package/dist/cjs/toolbar/mediaInline.js +18 -14
- package/dist/cjs/utils/media-common.js +15 -1
- package/dist/es2019/nodeviews/mediaGroup.js +19 -0
- package/dist/es2019/nodeviews/mediaGroupNext.js +249 -0
- package/dist/es2019/nodeviews/mediaNodeUpdater.js +1 -2
- package/dist/es2019/pm-plugins/main.js +20 -2
- package/dist/es2019/toolbar/index.js +6 -2
- package/dist/es2019/toolbar/mediaInline.js +19 -15
- package/dist/es2019/utils/media-common.js +15 -0
- package/dist/esm/nodeviews/mediaGroup.js +19 -0
- package/dist/esm/nodeviews/mediaGroupNext.js +285 -0
- package/dist/esm/nodeviews/mediaNodeUpdater.js +1 -3
- package/dist/esm/pm-plugins/main.js +20 -2
- package/dist/esm/toolbar/index.js +6 -2
- package/dist/esm/toolbar/mediaInline.js +18 -14
- package/dist/esm/utils/media-common.js +14 -0
- package/dist/types/nodeviews/mediaGroupNext.d.ts +37 -0
- package/dist/types/pm-plugins/main.d.ts +1 -1
- package/dist/types/utils/media-common.d.ts +1 -0
- package/dist/types-ts4.5/nodeviews/mediaGroupNext.d.ts +37 -0
- package/dist/types-ts4.5/pm-plugins/main.d.ts +1 -1
- package/dist/types-ts4.5/utils/media-common.d.ts +1 -0
- package/package.json +9 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-media
|
|
2
2
|
|
|
3
|
+
## 1.37.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#154775](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/154775)
|
|
8
|
+
[`1b353693c3119`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/1b353693c3119) -
|
|
9
|
+
[ED-25348] Refactor Media Group React Class component into Function Component
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#154186](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/154186)
|
|
14
|
+
[`5c316170d29dd`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/5c316170d29dd) -
|
|
15
|
+
Bump @atlaskit/adf-schema to 42.3.1
|
|
16
|
+
- Updated dependencies
|
|
17
|
+
|
|
18
|
+
## 1.36.5
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- [#154581](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/154581)
|
|
23
|
+
[`27d560bd2b6b6`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/27d560bd2b6b6) -
|
|
24
|
+
[ux] ED-25201 Enable double click to open media viewer in editor
|
|
25
|
+
|
|
3
26
|
## 1.36.4
|
|
4
27
|
|
|
5
28
|
### Patch Changes
|
|
@@ -24,8 +24,10 @@ var _utils = require("@atlaskit/editor-common/utils");
|
|
|
24
24
|
var _close = _interopRequireDefault(require("@atlaskit/icon/glyph/editor/close"));
|
|
25
25
|
var _mediaCommon = require("@atlaskit/media-common");
|
|
26
26
|
var _mediaFilmstrip = require("@atlaskit/media-filmstrip");
|
|
27
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
27
28
|
var _useMediaProvider = require("../hooks/useMediaProvider");
|
|
28
29
|
var _pluginKey = require("../pm-plugins/plugin-key");
|
|
30
|
+
var _mediaGroupNext = require("./mediaGroupNext");
|
|
29
31
|
var _mediaNodeUpdater = require("./mediaNodeUpdater");
|
|
30
32
|
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; }
|
|
31
33
|
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; }
|
|
@@ -346,6 +348,23 @@ var MediaGroupNodeView = /*#__PURE__*/function (_ReactNodeView) {
|
|
|
346
348
|
if (!mediaProvider) {
|
|
347
349
|
return null;
|
|
348
350
|
}
|
|
351
|
+
if ((0, _platformFeatureFlags.fg)('platform_editor_react18_phase2__media_single')) {
|
|
352
|
+
return /*#__PURE__*/_react.default.createElement(_mediaGroupNext.MediaGroupNext, {
|
|
353
|
+
node: _this3.node,
|
|
354
|
+
getPos: getPos,
|
|
355
|
+
view: _this3.view,
|
|
356
|
+
forwardRef: forwardRef,
|
|
357
|
+
disabled: (editorDisabledPlugin || {}).editorDisabled,
|
|
358
|
+
allowLazyLoading: mediaOptions.allowLazyLoading,
|
|
359
|
+
mediaProvider: mediaProvider,
|
|
360
|
+
contextIdentifierProvider: contextIdentifierProvider,
|
|
361
|
+
isCopyPasteEnabled: mediaOptions.isCopyPasteEnabled,
|
|
362
|
+
anchorPos: _this3.view.state.selection.$anchor.pos,
|
|
363
|
+
headPos: _this3.view.state.selection.$head.pos,
|
|
364
|
+
mediaOptions: mediaOptions,
|
|
365
|
+
editorViewMode: (editorViewModePlugin === null || editorViewModePlugin === void 0 ? void 0 : editorViewModePlugin.mode) === 'view'
|
|
366
|
+
});
|
|
367
|
+
}
|
|
349
368
|
return /*#__PURE__*/_react.default.createElement(IntlMediaGroup, {
|
|
350
369
|
node: _this3.node,
|
|
351
370
|
getPos: getPos,
|
|
@@ -0,0 +1,295 @@
|
|
|
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.MediaGroupNext = void 0;
|
|
9
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
14
|
+
var _reactIntlNext = require("react-intl-next");
|
|
15
|
+
var _hooks = require("@atlaskit/editor-common/hooks");
|
|
16
|
+
var _media = require("@atlaskit/editor-common/media");
|
|
17
|
+
var _utils = require("@atlaskit/editor-common/utils");
|
|
18
|
+
var _close = _interopRequireDefault(require("@atlaskit/icon/glyph/editor/close"));
|
|
19
|
+
var _mediaCommon = require("@atlaskit/media-common");
|
|
20
|
+
var _mediaFilmstrip = require("@atlaskit/media-filmstrip");
|
|
21
|
+
var _pluginKey = require("../pm-plugins/plugin-key");
|
|
22
|
+
var _mediaNodeUpdater = require("./mediaNodeUpdater");
|
|
23
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
24
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
25
|
+
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; }
|
|
26
|
+
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; }
|
|
27
|
+
var getIdentifier = function getIdentifier(item) {
|
|
28
|
+
if (item.attrs.type === 'external') {
|
|
29
|
+
return {
|
|
30
|
+
mediaItemType: 'external-image',
|
|
31
|
+
dataURI: item.attrs.url
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
id: item.attrs.id,
|
|
36
|
+
mediaItemType: 'file',
|
|
37
|
+
collectionName: item.attrs.collection
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
var isNodeSelected = function isNodeSelected(props) {
|
|
41
|
+
return function (mediaItemPos, mediaGroupPos) {
|
|
42
|
+
var selected = (0, _utils.isNodeSelectedOrInRange)(props.anchorPos, props.headPos, mediaGroupPos, props.nodeSize);
|
|
43
|
+
if (selected === _utils.SelectedState.selectedInRange) {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
if (selected === _utils.SelectedState.selectedInside && props.anchorPos === mediaItemPos) {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
var prepareFilmstripItem = function prepareFilmstripItem(_ref) {
|
|
53
|
+
var allowLazyLoading = _ref.allowLazyLoading,
|
|
54
|
+
enableDownloadButton = _ref.enableDownloadButton,
|
|
55
|
+
handleMediaNodeRemoval = _ref.handleMediaNodeRemoval,
|
|
56
|
+
getPos = _ref.getPos,
|
|
57
|
+
intl = _ref.intl,
|
|
58
|
+
isMediaItemSelected = _ref.isMediaItemSelected,
|
|
59
|
+
setMediaGroupNodeSelection = _ref.setMediaGroupNodeSelection,
|
|
60
|
+
featureFlags = _ref.featureFlags;
|
|
61
|
+
return function (item, idx) {
|
|
62
|
+
// We declared this to get a fresh position every time
|
|
63
|
+
var getNodePos = function getNodePos() {
|
|
64
|
+
var pos = getPos();
|
|
65
|
+
if (typeof pos !== 'number') {
|
|
66
|
+
// That may seems weird, but the previous type wasn't match with the real ProseMirror code. And a lot of Media API was built expecting a number
|
|
67
|
+
// Because the original code would return NaN on runtime
|
|
68
|
+
// We are just make it explict now.
|
|
69
|
+
// We may run a deep investagation on Media code to figure out a better fix. But, for now, we want to keep the current behavior.
|
|
70
|
+
// TODO: ED-13910 prosemirror-bump leftovers
|
|
71
|
+
return NaN;
|
|
72
|
+
}
|
|
73
|
+
return pos + idx + 1;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
// Media Inline creates a floating toolbar with the same options, excludes these options if enabled
|
|
77
|
+
var mediaInlineOptions = function mediaInlineOptions() {
|
|
78
|
+
var allowMediaInline = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
79
|
+
if (!allowMediaInline) {
|
|
80
|
+
return {
|
|
81
|
+
shouldEnableDownloadButton: enableDownloadButton,
|
|
82
|
+
actions: [{
|
|
83
|
+
handler: handleMediaNodeRemoval.bind(null, undefined, getNodePos),
|
|
84
|
+
icon: /*#__PURE__*/_react.default.createElement(_close.default, {
|
|
85
|
+
label: intl.formatMessage(_media.nodeViewsMessages.mediaGroupDeleteLabel)
|
|
86
|
+
})
|
|
87
|
+
}]
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
var mediaGroupPos = getPos();
|
|
92
|
+
return _objectSpread({
|
|
93
|
+
identifier: getIdentifier(item),
|
|
94
|
+
isLazy: allowLazyLoading,
|
|
95
|
+
selected: isMediaItemSelected(getNodePos(), typeof mediaGroupPos === 'number' ? mediaGroupPos : NaN),
|
|
96
|
+
onClick: function onClick() {
|
|
97
|
+
setMediaGroupNodeSelection(getNodePos());
|
|
98
|
+
}
|
|
99
|
+
}, mediaInlineOptions((0, _mediaCommon.getMediaFeatureFlag)('mediaInline', featureFlags)));
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Keep returning the same ProseMirror Node, unless the node content changed.
|
|
105
|
+
*
|
|
106
|
+
* React uses shallow comparation with `Object.is`,
|
|
107
|
+
* but that can cause multiple re-renders when the same node is given in a different instance.
|
|
108
|
+
*
|
|
109
|
+
* To avoid unnecessary re-renders, this hook uses the `Node.eq` from ProseMirror API to compare
|
|
110
|
+
* previous and new values.
|
|
111
|
+
*/
|
|
112
|
+
var useLatestMediaGroupNode = function useLatestMediaGroupNode(nextMediaNode) {
|
|
113
|
+
var previousMediaNode = (0, _hooks.usePreviousState)(nextMediaNode);
|
|
114
|
+
var _React$useState = _react.default.useState(nextMediaNode),
|
|
115
|
+
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
|
116
|
+
mediaNode = _React$useState2[0],
|
|
117
|
+
setMediaNode = _React$useState2[1];
|
|
118
|
+
_react.default.useEffect(function () {
|
|
119
|
+
if (!previousMediaNode) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (!previousMediaNode.eq(nextMediaNode)) {
|
|
123
|
+
setMediaNode(nextMediaNode);
|
|
124
|
+
}
|
|
125
|
+
}, [previousMediaNode, nextMediaNode]);
|
|
126
|
+
return mediaNode;
|
|
127
|
+
};
|
|
128
|
+
var runMediaNodeUpdate = /*#__PURE__*/function () {
|
|
129
|
+
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_ref2) {
|
|
130
|
+
var mediaNodeUpdater, getPos, node, updateAttrs, contextId, hasDifferentContextId;
|
|
131
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
132
|
+
while (1) switch (_context.prev = _context.next) {
|
|
133
|
+
case 0:
|
|
134
|
+
mediaNodeUpdater = _ref2.mediaNodeUpdater, getPos = _ref2.getPos, node = _ref2.node, updateAttrs = _ref2.updateAttrs;
|
|
135
|
+
if (!updateAttrs) {
|
|
136
|
+
_context.next = 4;
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
_context.next = 4;
|
|
140
|
+
return mediaNodeUpdater.updateNodeAttrs(getPos);
|
|
141
|
+
case 4:
|
|
142
|
+
contextId = mediaNodeUpdater.getNodeContextId();
|
|
143
|
+
if (contextId) {
|
|
144
|
+
_context.next = 8;
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
_context.next = 8;
|
|
148
|
+
return mediaNodeUpdater.updateNodeContextId(getPos);
|
|
149
|
+
case 8:
|
|
150
|
+
_context.next = 10;
|
|
151
|
+
return mediaNodeUpdater.hasDifferentContextId();
|
|
152
|
+
case 10:
|
|
153
|
+
hasDifferentContextId = _context.sent;
|
|
154
|
+
if (!hasDifferentContextId) {
|
|
155
|
+
_context.next = 14;
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
_context.next = 14;
|
|
159
|
+
return mediaNodeUpdater.copyNodeFromPos(getPos, {
|
|
160
|
+
traceId: node.attrs.__mediaTraceId
|
|
161
|
+
});
|
|
162
|
+
case 14:
|
|
163
|
+
case "end":
|
|
164
|
+
return _context.stop();
|
|
165
|
+
}
|
|
166
|
+
}, _callee);
|
|
167
|
+
}));
|
|
168
|
+
return function runMediaNodeUpdate(_x) {
|
|
169
|
+
return _ref3.apply(this, arguments);
|
|
170
|
+
};
|
|
171
|
+
}();
|
|
172
|
+
var noop = function noop() {};
|
|
173
|
+
var MediaGroupNext = exports.MediaGroupNext = (0, _reactIntlNext.injectIntl)( /*#__PURE__*/_react.default.memo(function (props) {
|
|
174
|
+
var _props$mediaOptions = props.mediaOptions,
|
|
175
|
+
allowLazyLoading = _props$mediaOptions.allowLazyLoading,
|
|
176
|
+
enableDownloadButton = _props$mediaOptions.enableDownloadButton,
|
|
177
|
+
featureFlags = _props$mediaOptions.featureFlags,
|
|
178
|
+
intl = props.intl,
|
|
179
|
+
_getPos = props.getPos,
|
|
180
|
+
anchorPos = props.anchorPos,
|
|
181
|
+
headPos = props.headPos,
|
|
182
|
+
view = props.view,
|
|
183
|
+
disabled = props.disabled,
|
|
184
|
+
editorViewMode = props.editorViewMode,
|
|
185
|
+
mediaProvider = props.mediaProvider,
|
|
186
|
+
contextIdentifierProvider = props.contextIdentifierProvider,
|
|
187
|
+
isCopyPasteEnabled = props.isCopyPasteEnabled;
|
|
188
|
+
var mediaGroupNode = useLatestMediaGroupNode(props.node);
|
|
189
|
+
var mediaPluginState = (0, _react.useMemo)(function () {
|
|
190
|
+
return _pluginKey.stateKey.getState(view.state);
|
|
191
|
+
}, [view.state]);
|
|
192
|
+
var mediaClientConfig = mediaPluginState === null || mediaPluginState === void 0 ? void 0 : mediaPluginState.mediaClientConfig;
|
|
193
|
+
var handleMediaGroupUpdate = mediaPluginState === null || mediaPluginState === void 0 ? void 0 : mediaPluginState.handleMediaGroupUpdate;
|
|
194
|
+
var _useState = (0, _react.useState)(undefined),
|
|
195
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
196
|
+
viewMediaClientConfig = _useState2[0],
|
|
197
|
+
setViewMediaClientConfig = _useState2[1];
|
|
198
|
+
var nodeSize = mediaGroupNode.nodeSize;
|
|
199
|
+
var mediaNodesWithOffsets = (0, _react.useMemo)(function () {
|
|
200
|
+
var result = [];
|
|
201
|
+
mediaGroupNode.forEach(function (item, childOffset) {
|
|
202
|
+
result.push({
|
|
203
|
+
node: item,
|
|
204
|
+
offset: childOffset
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
return result;
|
|
208
|
+
}, [mediaGroupNode]);
|
|
209
|
+
var previousMediaNodesWithOffsets = (0, _hooks.usePreviousState)(mediaNodesWithOffsets);
|
|
210
|
+
var handleMediaNodeRemoval = (0, _react.useMemo)(function () {
|
|
211
|
+
return disabled || !mediaPluginState ? noop : mediaPluginState.handleMediaNodeRemoval;
|
|
212
|
+
}, [disabled, mediaPluginState]);
|
|
213
|
+
var setMediaGroupNodeSelection = (0, _react.useCallback)(function (pos) {
|
|
214
|
+
(0, _utils.setNodeSelection)(view, pos);
|
|
215
|
+
}, [view]);
|
|
216
|
+
var isMediaItemSelected = (0, _react.useMemo)(function () {
|
|
217
|
+
return isNodeSelected({
|
|
218
|
+
anchorPos: anchorPos,
|
|
219
|
+
headPos: headPos,
|
|
220
|
+
nodeSize: nodeSize
|
|
221
|
+
});
|
|
222
|
+
}, [anchorPos, headPos, nodeSize]);
|
|
223
|
+
var filmstripItem = (0, _react.useMemo)(function () {
|
|
224
|
+
return prepareFilmstripItem({
|
|
225
|
+
allowLazyLoading: allowLazyLoading,
|
|
226
|
+
enableDownloadButton: enableDownloadButton,
|
|
227
|
+
handleMediaNodeRemoval: handleMediaNodeRemoval,
|
|
228
|
+
getPos: _getPos,
|
|
229
|
+
intl: intl,
|
|
230
|
+
isMediaItemSelected: isMediaItemSelected,
|
|
231
|
+
setMediaGroupNodeSelection: setMediaGroupNodeSelection,
|
|
232
|
+
featureFlags: featureFlags
|
|
233
|
+
});
|
|
234
|
+
}, [allowLazyLoading, enableDownloadButton, handleMediaNodeRemoval, _getPos, intl, isMediaItemSelected, setMediaGroupNodeSelection, featureFlags]);
|
|
235
|
+
var items = (0, _react.useMemo)(function () {
|
|
236
|
+
return mediaNodesWithOffsets.map(function (_ref4) {
|
|
237
|
+
var node = _ref4.node,
|
|
238
|
+
offset = _ref4.offset;
|
|
239
|
+
return filmstripItem(node, offset);
|
|
240
|
+
});
|
|
241
|
+
}, [mediaNodesWithOffsets, filmstripItem]);
|
|
242
|
+
(0, _react.useEffect)(function () {
|
|
243
|
+
setViewMediaClientConfig(mediaClientConfig);
|
|
244
|
+
}, [mediaClientConfig]);
|
|
245
|
+
(0, _react.useEffect)(function () {
|
|
246
|
+
mediaNodesWithOffsets.forEach(function (_ref5) {
|
|
247
|
+
var node = _ref5.node,
|
|
248
|
+
offset = _ref5.offset;
|
|
249
|
+
var mediaNodeUpdater = (0, _mediaNodeUpdater.createMediaNodeUpdater)({
|
|
250
|
+
view: view,
|
|
251
|
+
mediaProvider: mediaProvider,
|
|
252
|
+
contextIdentifierProvider: contextIdentifierProvider,
|
|
253
|
+
node: node,
|
|
254
|
+
isMediaSingle: false
|
|
255
|
+
});
|
|
256
|
+
var updateAttrs = isCopyPasteEnabled || isCopyPasteEnabled === undefined;
|
|
257
|
+
runMediaNodeUpdate({
|
|
258
|
+
mediaNodeUpdater: mediaNodeUpdater,
|
|
259
|
+
node: node,
|
|
260
|
+
updateAttrs: updateAttrs,
|
|
261
|
+
getPos: function getPos() {
|
|
262
|
+
var pos = _getPos();
|
|
263
|
+
if (typeof pos !== 'number') {
|
|
264
|
+
return undefined;
|
|
265
|
+
}
|
|
266
|
+
return pos + offset + 1;
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
}, [view, contextIdentifierProvider, _getPos, mediaProvider, mediaNodesWithOffsets, isCopyPasteEnabled]);
|
|
271
|
+
(0, _react.useEffect)(function () {
|
|
272
|
+
if (!handleMediaGroupUpdate || !previousMediaNodesWithOffsets) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
var old = previousMediaNodesWithOffsets.map(function (_ref6) {
|
|
276
|
+
var node = _ref6.node;
|
|
277
|
+
return node;
|
|
278
|
+
});
|
|
279
|
+
var next = mediaNodesWithOffsets.map(function (_ref7) {
|
|
280
|
+
var node = _ref7.node;
|
|
281
|
+
return node;
|
|
282
|
+
});
|
|
283
|
+
handleMediaGroupUpdate(old, next);
|
|
284
|
+
return function () {
|
|
285
|
+
handleMediaGroupUpdate(next, []);
|
|
286
|
+
};
|
|
287
|
+
}, [handleMediaGroupUpdate, mediaNodesWithOffsets, previousMediaNodesWithOffsets]);
|
|
288
|
+
return /*#__PURE__*/_react.default.createElement(_mediaFilmstrip.Filmstrip, {
|
|
289
|
+
items: items,
|
|
290
|
+
mediaClientConfig: viewMediaClientConfig,
|
|
291
|
+
featureFlags: featureFlags,
|
|
292
|
+
shouldOpenMediaViewer: editorViewMode
|
|
293
|
+
});
|
|
294
|
+
}));
|
|
295
|
+
MediaGroupNext.displayName = 'MediaGroup';
|
|
@@ -779,8 +779,6 @@ var hasPrivateAttrsChanged = function hasPrivateAttrsChanged(currentAttrs, newAt
|
|
|
779
779
|
return currentAttrs.__fileName !== newAttrs.__fileName || currentAttrs.__fileMimeType !== newAttrs.__fileMimeType || currentAttrs.__fileSize !== newAttrs.__fileSize || currentAttrs.__contextId !== newAttrs.__contextId;
|
|
780
780
|
};
|
|
781
781
|
var createMediaNodeUpdater = exports.createMediaNodeUpdater = function createMediaNodeUpdater(props) {
|
|
782
|
-
var updaterProps = _objectSpread(
|
|
783
|
-
isMediaSingle: true
|
|
784
|
-
});
|
|
782
|
+
var updaterProps = _objectSpread({}, props);
|
|
785
783
|
return new MediaNodeUpdater(updaterProps);
|
|
786
784
|
};
|
|
@@ -924,6 +924,24 @@ var createPlugin = exports.createPlugin = function createPlugin(_schema, options
|
|
|
924
924
|
}
|
|
925
925
|
return false;
|
|
926
926
|
},
|
|
927
|
+
handleDoubleClickOn: function handleDoubleClickOn(view) {
|
|
928
|
+
var _pluginInjectionApi$e;
|
|
929
|
+
if (!(0, _platformFeatureFlags.fg)('platform_editor_media_previewer_bugfix') || !(0, _platformFeatureFlags.fg)('platform_editor_media_interaction_improvements') || (pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$e = pluginInjectionApi.editorViewMode) === null || _pluginInjectionApi$e === void 0 || (_pluginInjectionApi$e = _pluginInjectionApi$e.sharedState.currentState()) === null || _pluginInjectionApi$e === void 0 ? void 0 : _pluginInjectionApi$e.mode) === 'view') {
|
|
930
|
+
return;
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
// Double Click support for Media Viewer Nodes
|
|
934
|
+
var maybeMediaNode = (0, _mediaCommon2.getMediaFromSupportedMediaNodesFromSelection)(view.state);
|
|
935
|
+
if (maybeMediaNode) {
|
|
936
|
+
// If media type is video, do not open media viewer
|
|
937
|
+
if ((0, _mediaSingle2.isVideo)(maybeMediaNode.attrs.__fileMimeType)) {
|
|
938
|
+
return false;
|
|
939
|
+
}
|
|
940
|
+
pluginInjectionApi === null || pluginInjectionApi === void 0 || pluginInjectionApi.core.actions.execute(pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : pluginInjectionApi.media.commands.showMediaViewer(maybeMediaNode.attrs));
|
|
941
|
+
return true;
|
|
942
|
+
}
|
|
943
|
+
return false;
|
|
944
|
+
},
|
|
927
945
|
handleDOMEvents: {
|
|
928
946
|
keydown: function keydown(view, event) {
|
|
929
947
|
var selection = view.state.selection;
|
|
@@ -128,6 +128,7 @@ var generateMediaCardFloatingToolbar = function generateMediaCardFloatingToolbar
|
|
|
128
128
|
type: 'separator'
|
|
129
129
|
}, (0, _platformFeatureFlags.fg)('platform_editor_media_previewer_bugfix') ? {
|
|
130
130
|
id: 'editor.media.viewer',
|
|
131
|
+
testId: 'file-preview-toolbar-button',
|
|
131
132
|
type: 'button',
|
|
132
133
|
icon: _maximize.default,
|
|
133
134
|
iconFallback: _filePreview.default,
|
|
@@ -138,7 +139,8 @@ var generateMediaCardFloatingToolbar = function generateMediaCardFloatingToolbar
|
|
|
138
139
|
mediaPluginState: mediaPluginState,
|
|
139
140
|
api: pluginInjectionApi
|
|
140
141
|
})) !== null && _handleShowMediaViewe !== void 0 ? _handleShowMediaViewe : false;
|
|
141
|
-
}
|
|
142
|
+
},
|
|
143
|
+
supportsViewMode: true
|
|
142
144
|
} : generateFilePreviewItem(mediaPluginState, intl), {
|
|
143
145
|
type: 'separator'
|
|
144
146
|
}, {
|
|
@@ -480,6 +482,7 @@ var generateMediaSingleFloatingToolbar = function generateMediaSingleFloatingToo
|
|
|
480
482
|
if (!(0, _mediaSingle2.isVideo)(mediaNode === null || mediaNode === void 0 || (_mediaNode$attrs = mediaNode.attrs) === null || _mediaNode$attrs === void 0 ? void 0 : _mediaNode$attrs.__fileMimeType)) {
|
|
481
483
|
toolbarButtons.push((0, _platformFeatureFlags.fg)('platform_editor_media_previewer_bugfix') ? {
|
|
482
484
|
id: 'editor.media.viewer',
|
|
485
|
+
testId: 'file-preview-toolbar-button',
|
|
483
486
|
type: 'button',
|
|
484
487
|
icon: _maximize.default,
|
|
485
488
|
iconFallback: _filePreview.default,
|
|
@@ -490,7 +493,8 @@ var generateMediaSingleFloatingToolbar = function generateMediaSingleFloatingToo
|
|
|
490
493
|
api: pluginInjectionApi,
|
|
491
494
|
mediaPluginState: pluginState
|
|
492
495
|
})) !== null && _handleShowMediaViewe2 !== void 0 ? _handleShowMediaViewe2 : false;
|
|
493
|
-
}
|
|
496
|
+
},
|
|
497
|
+
supportsViewMode: true
|
|
494
498
|
} : generateFilePreviewItem(pluginState, intl), {
|
|
495
499
|
type: 'separator',
|
|
496
500
|
supportsViewMode: true
|
|
@@ -27,7 +27,6 @@ var _currentMediaNode = require("../utils/current-media-node");
|
|
|
27
27
|
var _isType = require("../utils/is-type");
|
|
28
28
|
var _altText = require("./alt-text");
|
|
29
29
|
var _commands = require("./commands");
|
|
30
|
-
var _filePreviewItem = require("./filePreviewItem");
|
|
31
30
|
var _imageBorder = require("./imageBorder");
|
|
32
31
|
var _linkingToolbarAppearance = require("./linking-toolbar-appearance");
|
|
33
32
|
var _utils = require("./utils");
|
|
@@ -73,17 +72,20 @@ var generateMediaInlineFloatingToolbar = exports.generateMediaInlineFloatingTool
|
|
|
73
72
|
className: 'thumbnail-appearance' // a11y. uses to force focus on item
|
|
74
73
|
}, {
|
|
75
74
|
type: 'separator'
|
|
76
|
-
}, {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
75
|
+
}, (0, _platformFeatureFlags.fg)('platform_editor_media_previewer_bugfix') ? {
|
|
76
|
+
id: 'editor.media.viewer',
|
|
77
|
+
testId: 'file-preview-toolbar-button',
|
|
78
|
+
type: 'button',
|
|
79
|
+
icon: _filePreview.default,
|
|
80
|
+
title: intl.formatMessage(_mediaUi.messages.preview),
|
|
81
|
+
onClick: function onClick() {
|
|
82
|
+
var _handleShowMediaViewe;
|
|
83
|
+
return (_handleShowMediaViewe = (0, _index.handleShowMediaViewer)({
|
|
82
84
|
mediaPluginState: mediaPluginState,
|
|
83
|
-
|
|
84
|
-
});
|
|
85
|
+
api: pluginInjectionApi
|
|
86
|
+
})) !== null && _handleShowMediaViewe !== void 0 ? _handleShowMediaViewe : false;
|
|
85
87
|
}
|
|
86
|
-
}, {
|
|
88
|
+
} : (0, _index.generateFilePreviewItem)(mediaPluginState, intl), {
|
|
87
89
|
type: 'separator'
|
|
88
90
|
}, {
|
|
89
91
|
id: 'editor.media.card.download',
|
|
@@ -243,16 +245,18 @@ var getMediaInlineImageToolbar = function getMediaInlineImageToolbar(state, intl
|
|
|
243
245
|
if (options.allowImagePreview) {
|
|
244
246
|
inlineImageItems.push((0, _platformFeatureFlags.fg)('platform_editor_media_previewer_bugfix') ? {
|
|
245
247
|
id: 'editor.media.viewer',
|
|
248
|
+
testId: 'file-preview-toolbar-button',
|
|
246
249
|
type: 'button',
|
|
247
250
|
icon: _filePreview.default,
|
|
248
251
|
title: intl.formatMessage(_mediaUi.messages.preview),
|
|
249
252
|
onClick: function onClick() {
|
|
250
|
-
var
|
|
251
|
-
return (
|
|
253
|
+
var _handleShowMediaViewe2;
|
|
254
|
+
return (_handleShowMediaViewe2 = (0, _index.handleShowMediaViewer)({
|
|
252
255
|
mediaPluginState: mediaPluginState,
|
|
253
256
|
api: pluginInjectionApi
|
|
254
|
-
})) !== null &&
|
|
255
|
-
}
|
|
257
|
+
})) !== null && _handleShowMediaViewe2 !== void 0 ? _handleShowMediaViewe2 : false;
|
|
258
|
+
},
|
|
259
|
+
supportsViewMode: true
|
|
256
260
|
} : (0, _index.generateFilePreviewItem)(mediaPluginState, intl), {
|
|
257
261
|
type: 'separator',
|
|
258
262
|
supportsViewMode: true
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.splitMediaGroup = exports.removeMediaNode = exports.posOfPrecedingMediaGroup = exports.posOfParentMediaGroup = exports.posOfMediaGroupNearby = exports.isSelectionNonMediaBlockNode = exports.isSelectionMediaSingleNode = exports.isMediaSingleOrInlineNodeSelected = exports.isMediaBlobUrlFromAttrs = exports.isInsidePotentialEmptyParagraph = exports.getMediaSingleOrInlineNodeFromSelection = exports.getMediaNodeFromSelection = exports.copyOptionalAttrsFromMediaState = void 0;
|
|
6
|
+
exports.splitMediaGroup = exports.removeMediaNode = exports.posOfPrecedingMediaGroup = exports.posOfParentMediaGroup = exports.posOfMediaGroupNearby = exports.isSelectionNonMediaBlockNode = exports.isSelectionMediaSingleNode = exports.isMediaSingleOrInlineNodeSelected = exports.isMediaBlobUrlFromAttrs = exports.isInsidePotentialEmptyParagraph = exports.getMediaSingleOrInlineNodeFromSelection = exports.getMediaNodeFromSelection = exports.getMediaFromSupportedMediaNodesFromSelection = exports.copyOptionalAttrsFromMediaState = void 0;
|
|
7
7
|
var _selection = require("@atlaskit/editor-common/selection");
|
|
8
8
|
var _utils = require("@atlaskit/editor-common/utils");
|
|
9
9
|
var _commands = require("@atlaskit/editor-prosemirror/commands");
|
|
@@ -204,4 +204,18 @@ var getMediaSingleOrInlineNodeFromSelection = exports.getMediaSingleOrInlineNode
|
|
|
204
204
|
allowInlineImages = _getMediaPluginState2.allowInlineImages;
|
|
205
205
|
var mediaNode = getMediaNodeFromSelection(state) || allowInlineImages && getMediaInlineNodeFromSelection(state);
|
|
206
206
|
return mediaNode || null;
|
|
207
|
+
};
|
|
208
|
+
var getMediaFromSupportedMediaNodesFromSelection = exports.getMediaFromSupportedMediaNodesFromSelection = function getMediaFromSupportedMediaNodesFromSelection(state) {
|
|
209
|
+
var _ref4 = state.selection,
|
|
210
|
+
node = _ref4.node;
|
|
211
|
+
switch (node.type) {
|
|
212
|
+
case node.type.schema.nodes.media:
|
|
213
|
+
case node.type.schema.nodes.mediaInline:
|
|
214
|
+
return node;
|
|
215
|
+
case node.type.schema.nodes.mediaSingle:
|
|
216
|
+
case node.type.schema.nodes.mediaGroup:
|
|
217
|
+
return node.firstChild;
|
|
218
|
+
default:
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
207
221
|
};
|
|
@@ -9,8 +9,10 @@ import { isNodeSelectedOrInRange, SelectedState, setNodeSelection } from '@atlas
|
|
|
9
9
|
import EditorCloseIcon from '@atlaskit/icon/glyph/editor/close';
|
|
10
10
|
import { getMediaFeatureFlag } from '@atlaskit/media-common';
|
|
11
11
|
import { Filmstrip } from '@atlaskit/media-filmstrip';
|
|
12
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
12
13
|
import { useMediaProvider } from '../hooks/useMediaProvider';
|
|
13
14
|
import { stateKey as mediaStateKey } from '../pm-plugins/plugin-key';
|
|
15
|
+
import { MediaGroupNext } from './mediaGroupNext';
|
|
14
16
|
import { MediaNodeUpdater } from './mediaNodeUpdater';
|
|
15
17
|
const isMediaGroupSelectedFromProps = props => {
|
|
16
18
|
/**
|
|
@@ -290,6 +292,23 @@ class MediaGroupNodeView extends ReactNodeView {
|
|
|
290
292
|
if (!mediaProvider) {
|
|
291
293
|
return null;
|
|
292
294
|
}
|
|
295
|
+
if (fg('platform_editor_react18_phase2__media_single')) {
|
|
296
|
+
return /*#__PURE__*/React.createElement(MediaGroupNext, {
|
|
297
|
+
node: this.node,
|
|
298
|
+
getPos: getPos,
|
|
299
|
+
view: this.view,
|
|
300
|
+
forwardRef: forwardRef,
|
|
301
|
+
disabled: (editorDisabledPlugin || {}).editorDisabled,
|
|
302
|
+
allowLazyLoading: mediaOptions.allowLazyLoading,
|
|
303
|
+
mediaProvider: mediaProvider,
|
|
304
|
+
contextIdentifierProvider: contextIdentifierProvider,
|
|
305
|
+
isCopyPasteEnabled: mediaOptions.isCopyPasteEnabled,
|
|
306
|
+
anchorPos: this.view.state.selection.$anchor.pos,
|
|
307
|
+
headPos: this.view.state.selection.$head.pos,
|
|
308
|
+
mediaOptions: mediaOptions,
|
|
309
|
+
editorViewMode: (editorViewModePlugin === null || editorViewModePlugin === void 0 ? void 0 : editorViewModePlugin.mode) === 'view'
|
|
310
|
+
});
|
|
311
|
+
}
|
|
293
312
|
return /*#__PURE__*/React.createElement(IntlMediaGroup, {
|
|
294
313
|
node: this.node,
|
|
295
314
|
getPos: getPos,
|