@atlaskit/editor-plugin-media 5.1.3 → 5.1.5

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 CHANGED
@@ -1,5 +1,24 @@
1
1
  # @atlaskit/editor-plugin-media
2
2
 
3
+ ## 5.1.5
4
+
5
+ ### Patch Changes
6
+
7
+ - [#184968](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/184968)
8
+ [`a52007f9eed36`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/a52007f9eed36) -
9
+ Introduce a performance experiment to avoid running media floating toolbar code unless selected.
10
+ - Updated dependencies
11
+
12
+ ## 5.1.4
13
+
14
+ ### Patch Changes
15
+
16
+ - [#184004](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/184004)
17
+ [`a08a65a80b5a3`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/a08a65a80b5a3) -
18
+ [ux] Ensure data security policy enforced for download buttons in mediaInline and mediaSingle
19
+ floating toolbars
20
+ - Updated dependencies
21
+
3
22
  ## 5.1.3
4
23
 
5
24
  ### Patch Changes
@@ -29,6 +29,7 @@ var _smartLinkCard = _interopRequireDefault(require("@atlaskit/icon/core/smart-l
29
29
  var _mediaFilmstrip = require("@atlaskit/media-filmstrip");
30
30
  var _mediaUi = require("@atlaskit/media-ui");
31
31
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
32
+ var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
32
33
  var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
33
34
  var _styles = require("../../nodeviews/styles");
34
35
  var _altText = require("../../pm-plugins/alt-text");
@@ -120,9 +121,8 @@ var handleShowMediaViewer = exports.handleShowMediaViewer = function handleShowM
120
121
  api === null || api === void 0 || api.core.actions.execute(api === null || api === void 0 ? void 0 : api.media.commands.showMediaViewer(selectedNodeAttrs));
121
122
  };
122
123
  var generateMediaCardFloatingToolbar = function generateMediaCardFloatingToolbar(state, intl, mediaPluginState, hoverDecoration, pluginInjectionApi, editorAnalyticsAPI, forceFocusSelector, isViewOnly) {
123
- var _mediaPluginState$med, _pluginInjectionApi$c;
124
- var enforceMediaDataSecurityPolicy = mediaPluginState === null || mediaPluginState === void 0 || (_mediaPluginState$med = mediaPluginState.mediaClientConfig) === null || _mediaPluginState$med === void 0 ? void 0 : _mediaPluginState$med.enforceDataSecurityPolicy;
125
- var disableDownloadButton = typeof enforceMediaDataSecurityPolicy === 'boolean' ? enforceMediaDataSecurityPolicy : false;
124
+ var _pluginInjectionApi$c;
125
+ var disableDownloadButton = (0, _utils2.getIsDownloadDisabledByDataSecurityPolicy)(mediaPluginState);
126
126
  var isEditorControlsEnabled = (0, _experiments.editorExperiment)('platform_editor_controls', 'variant1');
127
127
  var preview = {
128
128
  id: 'editor.media.viewer',
@@ -279,6 +279,7 @@ var generateMediaSingleFloatingToolbar = function generateMediaSingleFloatingToo
279
279
  var _ref2 = (_pluginInjectionApi$d = pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$d2 = pluginInjectionApi.decorations) === null || _pluginInjectionApi$d2 === void 0 ? void 0 : _pluginInjectionApi$d2.actions) !== null && _pluginInjectionApi$d !== void 0 ? _pluginInjectionApi$d : {},
280
280
  hoverDecoration = _ref2.hoverDecoration;
281
281
  var isEditorControlsEnabled = (0, _experiments.editorExperiment)('platform_editor_controls', 'variant1');
282
+ var disableDownloadButton = (0, _utils2.getIsDownloadDisabledByDataSecurityPolicy)(pluginState);
282
283
  if ((0, _imageBorder.shouldShowImageBorder)(state)) {
283
284
  toolbarButtons.push({
284
285
  type: 'custom',
@@ -576,6 +577,7 @@ var generateMediaSingleFloatingToolbar = function generateMediaSingleFloatingToo
576
577
  (0, _utils2.downloadMedia)(pluginState, isViewOnly);
577
578
  return true;
578
579
  },
580
+ disabled: disableDownloadButton,
579
581
  title: intl.formatMessage(_mediaUi.messages.download),
580
582
  supportsViewMode: true
581
583
  }, {
@@ -684,6 +686,12 @@ var getMediaTypeMessage = function getMediaTypeMessage(selectedNodeTypeSingle) {
684
686
  return mediaType ? mediaTypeMessages[mediaType] : _mediaUi.messages.file_unknown_is_selected;
685
687
  };
686
688
  var overflowDropdwonBtnTriggerTestId = exports.overflowDropdwonBtnTriggerTestId = 'media-overflow-dropdown-trigger';
689
+ var isMediaSelection = function isMediaSelection(selection, nodeType) {
690
+ if (selection instanceof _state2.NodeSelection) {
691
+ return nodeType.includes(selection.node.type);
692
+ }
693
+ return false;
694
+ };
687
695
  var floatingToolbar = exports.floatingToolbar = function floatingToolbar(state, intl) {
688
696
  var _pluginInjectionApi$d3, _pluginInjectionApi$d4;
689
697
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
@@ -714,6 +722,11 @@ var floatingToolbar = exports.floatingToolbar = function floatingToolbar(state,
714
722
  }
715
723
  var nodeType = allowMediaInline ? [mediaInline, mediaSingle, media] : [mediaSingle];
716
724
  var isSelectedNodeMediaSingle = state.selection instanceof _state2.NodeSelection && state.selection.node.type === mediaSingle;
725
+ if ((0, _expValEquals.expValEquals)('platform_editor_media_floating_toolbar_early_exit', 'isEnabled', true)) {
726
+ if (!isMediaSelection(state.selection, nodeType)) {
727
+ return;
728
+ }
729
+ }
717
730
  var baseToolbar = {
718
731
  title: 'Media floating controls',
719
732
  nodeType: nodeType,
@@ -64,6 +64,7 @@ var generateMediaInlineFloatingToolbar = exports.generateMediaInlineFloatingTool
64
64
  }, isEditorControlsEnabled && {
65
65
  supportsViewMode: true
66
66
  });
67
+ var disableDownloadButton = (0, _utils.getIsDownloadDisabledByDataSecurityPolicy)(mediaPluginState);
67
68
  var download = _objectSpread({
68
69
  id: 'editor.media.card.download',
69
70
  type: 'button',
@@ -72,6 +73,7 @@ var generateMediaInlineFloatingToolbar = exports.generateMediaInlineFloatingTool
72
73
  (0, _utils.downloadMedia)(mediaPluginState);
73
74
  return true;
74
75
  },
76
+ disabled: disableDownloadButton,
75
77
  title: intl.formatMessage(_mediaUi.messages.download)
76
78
  }, isEditorControlsEnabled && {
77
79
  supportsViewMode: true
@@ -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.updateToFullHeightSeparator = exports.removeMediaGroupNode = exports.isExternalMedia = exports.getSelectedNearestMediaContainerNodeAttrsFunction = exports.getSelectedNearestMediaContainerNodeAttrs = exports.getSelectedMediaSingle = exports.getSelectedLayoutIcon = exports.getPixelWidthOfElement = exports.getMediaSingleAndMediaInlineSwitcherDropdown = exports.getMaxToolbarWidth = exports.downloadMedia = exports.canShowSwitchButtons = exports.calcNewLayout = void 0;
7
+ exports.updateToFullHeightSeparator = exports.removeMediaGroupNode = exports.isExternalMedia = exports.getSelectedNearestMediaContainerNodeAttrsFunction = exports.getSelectedNearestMediaContainerNodeAttrs = exports.getSelectedMediaSingle = exports.getSelectedLayoutIcon = exports.getPixelWidthOfElement = exports.getMediaSingleAndMediaInlineSwitcherDropdown = exports.getMaxToolbarWidth = exports.getIsDownloadDisabledByDataSecurityPolicy = exports.downloadMedia = exports.canShowSwitchButtons = exports.calcNewLayout = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _react = _interopRequireDefault(require("react"));
@@ -49,6 +49,11 @@ var getSelectedNearestMediaContainerNodeAttrsFunction = exports.getSelectedNeare
49
49
  var getSelectedNearestMediaContainerNodeAttrs = exports.getSelectedNearestMediaContainerNodeAttrs = function getSelectedNearestMediaContainerNodeAttrs(mediaPluginState) {
50
50
  return getSelectedNearestMediaContainerNodeAttrsFunction(mediaPluginState.selectedMediaContainerNode);
51
51
  };
52
+ var getIsDownloadDisabledByDataSecurityPolicy = exports.getIsDownloadDisabledByDataSecurityPolicy = function getIsDownloadDisabledByDataSecurityPolicy(mediaPluginState) {
53
+ var _mediaPluginState$med;
54
+ var enforceMediaDataSecurityPolicy = mediaPluginState === null || mediaPluginState === void 0 || (_mediaPluginState$med = mediaPluginState.mediaClientConfig) === null || _mediaPluginState$med === void 0 ? void 0 : _mediaPluginState$med.enforceDataSecurityPolicy;
55
+ return typeof enforceMediaDataSecurityPolicy === 'boolean' ? enforceMediaDataSecurityPolicy : false;
56
+ };
52
57
  var downloadMedia = exports.downloadMedia = /*#__PURE__*/function () {
53
58
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(mediaPluginState, isViewMode) {
54
59
  var selectedNodeAttrs, id, _selectedNodeAttrs$co, collection, mediaClient, fileState, fileName;
@@ -19,6 +19,7 @@ import SmartLinkCardIcon from '@atlaskit/icon/core/smart-link-card';
19
19
  import { mediaFilmstripItemDOMSelector } from '@atlaskit/media-filmstrip';
20
20
  import { messages } from '@atlaskit/media-ui';
21
21
  import { fg } from '@atlaskit/platform-feature-flags';
22
+ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
22
23
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
23
24
  import { MediaSingleNodeSelector } from '../../nodeviews/styles';
24
25
  import { getPluginState as getMediaAltTextPluginState } from '../../pm-plugins/alt-text';
@@ -39,7 +40,7 @@ import { getLinkingDropdownOptions, getLinkingToolbar, getOpenLinkToolbarButtonO
39
40
  import { LinkToolbarAppearance } from './linking-toolbar-appearance';
40
41
  import { generateMediaInlineFloatingToolbar } from './mediaInline';
41
42
  import { getPixelResizingToolbar, getResizeDropdownOption } from './pixel-resizing';
42
- import { canShowSwitchButtons, downloadMedia, getMaxToolbarWidth, getMediaSingleAndMediaInlineSwitcherDropdown, getSelectedLayoutIcon, getSelectedMediaSingle, getSelectedNearestMediaContainerNodeAttrs, removeMediaGroupNode, updateToFullHeightSeparator } from './utils';
43
+ import { canShowSwitchButtons, downloadMedia, getIsDownloadDisabledByDataSecurityPolicy, getMaxToolbarWidth, getMediaSingleAndMediaInlineSwitcherDropdown, getSelectedLayoutIcon, getSelectedMediaSingle, getSelectedNearestMediaContainerNodeAttrs, removeMediaGroupNode, updateToFullHeightSeparator } from './utils';
43
44
  const mediaTypeMessages = {
44
45
  image: messages.file_image_is_selected,
45
46
  video: messages.file_video_is_selected,
@@ -108,9 +109,8 @@ export const handleShowMediaViewer = ({
108
109
  api === null || api === void 0 ? void 0 : api.core.actions.execute(api === null || api === void 0 ? void 0 : api.media.commands.showMediaViewer(selectedNodeAttrs));
109
110
  };
110
111
  const generateMediaCardFloatingToolbar = (state, intl, mediaPluginState, hoverDecoration, pluginInjectionApi, editorAnalyticsAPI, forceFocusSelector, isViewOnly) => {
111
- var _mediaPluginState$med, _pluginInjectionApi$c, _pluginInjectionApi$c2, _pluginInjectionApi$c3;
112
- const enforceMediaDataSecurityPolicy = mediaPluginState === null || mediaPluginState === void 0 ? void 0 : (_mediaPluginState$med = mediaPluginState.mediaClientConfig) === null || _mediaPluginState$med === void 0 ? void 0 : _mediaPluginState$med.enforceDataSecurityPolicy;
113
- const disableDownloadButton = typeof enforceMediaDataSecurityPolicy === 'boolean' ? enforceMediaDataSecurityPolicy : false;
112
+ var _pluginInjectionApi$c, _pluginInjectionApi$c2, _pluginInjectionApi$c3;
113
+ const disableDownloadButton = getIsDownloadDisabledByDataSecurityPolicy(mediaPluginState);
114
114
  const isEditorControlsEnabled = editorExperiment('platform_editor_controls', 'variant1');
115
115
  const preview = {
116
116
  id: 'editor.media.viewer',
@@ -269,6 +269,7 @@ const generateMediaSingleFloatingToolbar = (state, intl, options, pluginState, m
269
269
  hoverDecoration
270
270
  } = (_pluginInjectionApi$d = pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : (_pluginInjectionApi$d2 = pluginInjectionApi.decorations) === null || _pluginInjectionApi$d2 === void 0 ? void 0 : _pluginInjectionApi$d2.actions) !== null && _pluginInjectionApi$d !== void 0 ? _pluginInjectionApi$d : {};
271
271
  const isEditorControlsEnabled = editorExperiment('platform_editor_controls', 'variant1');
272
+ const disableDownloadButton = getIsDownloadDisabledByDataSecurityPolicy(pluginState);
272
273
  if (shouldShowImageBorder(state)) {
273
274
  toolbarButtons.push({
274
275
  type: 'custom',
@@ -574,6 +575,7 @@ const generateMediaSingleFloatingToolbar = (state, intl, options, pluginState, m
574
575
  downloadMedia(pluginState, isViewOnly);
575
576
  return true;
576
577
  },
578
+ disabled: disableDownloadButton,
577
579
  title: intl.formatMessage(messages.download),
578
580
  supportsViewMode: true
579
581
  }, {
@@ -680,6 +682,12 @@ const getMediaTypeMessage = selectedNodeTypeSingle => {
680
682
  return mediaType ? mediaTypeMessages[mediaType] : messages.file_unknown_is_selected;
681
683
  };
682
684
  export const overflowDropdwonBtnTriggerTestId = 'media-overflow-dropdown-trigger';
685
+ const isMediaSelection = (selection, nodeType) => {
686
+ if (selection instanceof NodeSelection) {
687
+ return nodeType.includes(selection.node.type);
688
+ }
689
+ return false;
690
+ };
683
691
  export const floatingToolbar = (state, intl, options = {}, pluginInjectionApi) => {
684
692
  var _pluginInjectionApi$d3, _pluginInjectionApi$d4;
685
693
  const {
@@ -714,6 +722,11 @@ export const floatingToolbar = (state, intl, options = {}, pluginInjectionApi) =
714
722
  }
715
723
  const nodeType = allowMediaInline ? [mediaInline, mediaSingle, media] : [mediaSingle];
716
724
  const isSelectedNodeMediaSingle = state.selection instanceof NodeSelection && state.selection.node.type === mediaSingle;
725
+ if (expValEquals('platform_editor_media_floating_toolbar_early_exit', 'isEnabled', true)) {
726
+ if (!isMediaSelection(state.selection, nodeType)) {
727
+ return;
728
+ }
729
+ }
717
730
  const baseToolbar = {
718
731
  title: 'Media floating controls',
719
732
  nodeType,
@@ -21,7 +21,7 @@ import { changeInlineToMediaCard, changeMediaInlineToMediaSingle, removeInlineCa
21
21
  import { shouldShowImageBorder } from './imageBorder';
22
22
  import { getOpenLinkToolbarButtonOption, shouldShowMediaLinkToolbar } from './linking';
23
23
  import { LinkToolbarAppearance } from './linking-toolbar-appearance';
24
- import { downloadMedia, getMediaSingleAndMediaInlineSwitcherDropdown } from './utils';
24
+ import { downloadMedia, getIsDownloadDisabledByDataSecurityPolicy, getMediaSingleAndMediaInlineSwitcherDropdown } from './utils';
25
25
  import { handleShowMediaViewer } from './index';
26
26
  export const generateMediaInlineFloatingToolbar = (state, intl, mediaPluginState, hoverDecoration, pluginInjectionApi, options = {}) => {
27
27
  var _pluginInjectionApi$a, _pluginInjectionApi$f, _pluginInjectionApi$f2;
@@ -54,6 +54,7 @@ export const generateMediaInlineFloatingToolbar = (state, intl, mediaPluginState
54
54
  supportsViewMode: true
55
55
  })
56
56
  };
57
+ const disableDownloadButton = getIsDownloadDisabledByDataSecurityPolicy(mediaPluginState);
57
58
  const download = {
58
59
  id: 'editor.media.card.download',
59
60
  type: 'button',
@@ -62,6 +63,7 @@ export const generateMediaInlineFloatingToolbar = (state, intl, mediaPluginState
62
63
  downloadMedia(mediaPluginState);
63
64
  return true;
64
65
  },
66
+ disabled: disableDownloadButton,
65
67
  title: intl.formatMessage(messages.download),
66
68
  ...(isEditorControlsEnabled && {
67
69
  supportsViewMode: true
@@ -40,6 +40,11 @@ export const getSelectedNearestMediaContainerNodeAttrsFunction = selectedMediaCo
40
40
  export const getSelectedNearestMediaContainerNodeAttrs = mediaPluginState => {
41
41
  return getSelectedNearestMediaContainerNodeAttrsFunction(mediaPluginState.selectedMediaContainerNode);
42
42
  };
43
+ export const getIsDownloadDisabledByDataSecurityPolicy = mediaPluginState => {
44
+ var _mediaPluginState$med;
45
+ const enforceMediaDataSecurityPolicy = mediaPluginState === null || mediaPluginState === void 0 ? void 0 : (_mediaPluginState$med = mediaPluginState.mediaClientConfig) === null || _mediaPluginState$med === void 0 ? void 0 : _mediaPluginState$med.enforceDataSecurityPolicy;
46
+ return typeof enforceMediaDataSecurityPolicy === 'boolean' ? enforceMediaDataSecurityPolicy : false;
47
+ };
43
48
  export const downloadMedia = async (mediaPluginState, isViewMode) => {
44
49
  try {
45
50
  const selectedNodeAttrs = isViewMode ? getSelectedNearestMediaContainerNodeAttrs(mediaPluginState) : getSelectedMediaContainerNodeAttrs(mediaPluginState);
@@ -23,6 +23,7 @@ import SmartLinkCardIcon from '@atlaskit/icon/core/smart-link-card';
23
23
  import { mediaFilmstripItemDOMSelector } from '@atlaskit/media-filmstrip';
24
24
  import { messages } from '@atlaskit/media-ui';
25
25
  import { fg } from '@atlaskit/platform-feature-flags';
26
+ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
26
27
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
27
28
  import { MediaSingleNodeSelector } from '../../nodeviews/styles';
28
29
  import { getPluginState as getMediaAltTextPluginState } from '../../pm-plugins/alt-text';
@@ -43,7 +44,7 @@ import { getLinkingDropdownOptions, getLinkingToolbar, getOpenLinkToolbarButtonO
43
44
  import { LinkToolbarAppearance } from './linking-toolbar-appearance';
44
45
  import { generateMediaInlineFloatingToolbar } from './mediaInline';
45
46
  import { getPixelResizingToolbar, getResizeDropdownOption } from './pixel-resizing';
46
- import { canShowSwitchButtons, downloadMedia, getMaxToolbarWidth, getMediaSingleAndMediaInlineSwitcherDropdown, getSelectedLayoutIcon, getSelectedMediaSingle, getSelectedNearestMediaContainerNodeAttrs, removeMediaGroupNode, updateToFullHeightSeparator } from './utils';
47
+ import { canShowSwitchButtons, downloadMedia, getIsDownloadDisabledByDataSecurityPolicy, getMaxToolbarWidth, getMediaSingleAndMediaInlineSwitcherDropdown, getSelectedLayoutIcon, getSelectedMediaSingle, getSelectedNearestMediaContainerNodeAttrs, removeMediaGroupNode, updateToFullHeightSeparator } from './utils';
47
48
  var mediaTypeMessages = {
48
49
  image: messages.file_image_is_selected,
49
50
  video: messages.file_video_is_selected,
@@ -111,9 +112,8 @@ export var handleShowMediaViewer = function handleShowMediaViewer(_ref) {
111
112
  api === null || api === void 0 || api.core.actions.execute(api === null || api === void 0 ? void 0 : api.media.commands.showMediaViewer(selectedNodeAttrs));
112
113
  };
113
114
  var generateMediaCardFloatingToolbar = function generateMediaCardFloatingToolbar(state, intl, mediaPluginState, hoverDecoration, pluginInjectionApi, editorAnalyticsAPI, forceFocusSelector, isViewOnly) {
114
- var _mediaPluginState$med, _pluginInjectionApi$c;
115
- var enforceMediaDataSecurityPolicy = mediaPluginState === null || mediaPluginState === void 0 || (_mediaPluginState$med = mediaPluginState.mediaClientConfig) === null || _mediaPluginState$med === void 0 ? void 0 : _mediaPluginState$med.enforceDataSecurityPolicy;
116
- var disableDownloadButton = typeof enforceMediaDataSecurityPolicy === 'boolean' ? enforceMediaDataSecurityPolicy : false;
115
+ var _pluginInjectionApi$c;
116
+ var disableDownloadButton = getIsDownloadDisabledByDataSecurityPolicy(mediaPluginState);
117
117
  var isEditorControlsEnabled = editorExperiment('platform_editor_controls', 'variant1');
118
118
  var preview = {
119
119
  id: 'editor.media.viewer',
@@ -270,6 +270,7 @@ var generateMediaSingleFloatingToolbar = function generateMediaSingleFloatingToo
270
270
  var _ref2 = (_pluginInjectionApi$d = pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$d2 = pluginInjectionApi.decorations) === null || _pluginInjectionApi$d2 === void 0 ? void 0 : _pluginInjectionApi$d2.actions) !== null && _pluginInjectionApi$d !== void 0 ? _pluginInjectionApi$d : {},
271
271
  hoverDecoration = _ref2.hoverDecoration;
272
272
  var isEditorControlsEnabled = editorExperiment('platform_editor_controls', 'variant1');
273
+ var disableDownloadButton = getIsDownloadDisabledByDataSecurityPolicy(pluginState);
273
274
  if (shouldShowImageBorder(state)) {
274
275
  toolbarButtons.push({
275
276
  type: 'custom',
@@ -567,6 +568,7 @@ var generateMediaSingleFloatingToolbar = function generateMediaSingleFloatingToo
567
568
  downloadMedia(pluginState, isViewOnly);
568
569
  return true;
569
570
  },
571
+ disabled: disableDownloadButton,
570
572
  title: intl.formatMessage(messages.download),
571
573
  supportsViewMode: true
572
574
  }, {
@@ -675,6 +677,12 @@ var getMediaTypeMessage = function getMediaTypeMessage(selectedNodeTypeSingle) {
675
677
  return mediaType ? mediaTypeMessages[mediaType] : messages.file_unknown_is_selected;
676
678
  };
677
679
  export var overflowDropdwonBtnTriggerTestId = 'media-overflow-dropdown-trigger';
680
+ var isMediaSelection = function isMediaSelection(selection, nodeType) {
681
+ if (selection instanceof NodeSelection) {
682
+ return nodeType.includes(selection.node.type);
683
+ }
684
+ return false;
685
+ };
678
686
  export var floatingToolbar = function floatingToolbar(state, intl) {
679
687
  var _pluginInjectionApi$d3, _pluginInjectionApi$d4;
680
688
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
@@ -705,6 +713,11 @@ export var floatingToolbar = function floatingToolbar(state, intl) {
705
713
  }
706
714
  var nodeType = allowMediaInline ? [mediaInline, mediaSingle, media] : [mediaSingle];
707
715
  var isSelectedNodeMediaSingle = state.selection instanceof NodeSelection && state.selection.node.type === mediaSingle;
716
+ if (expValEquals('platform_editor_media_floating_toolbar_early_exit', 'isEnabled', true)) {
717
+ if (!isMediaSelection(state.selection, nodeType)) {
718
+ return;
719
+ }
720
+ }
708
721
  var baseToolbar = {
709
722
  title: 'Media floating controls',
710
723
  nodeType: nodeType,
@@ -24,7 +24,7 @@ import { changeInlineToMediaCard, changeMediaInlineToMediaSingle, removeInlineCa
24
24
  import { shouldShowImageBorder } from './imageBorder';
25
25
  import { getOpenLinkToolbarButtonOption, shouldShowMediaLinkToolbar } from './linking';
26
26
  import { LinkToolbarAppearance } from './linking-toolbar-appearance';
27
- import { downloadMedia, getMediaSingleAndMediaInlineSwitcherDropdown } from './utils';
27
+ import { downloadMedia, getIsDownloadDisabledByDataSecurityPolicy, getMediaSingleAndMediaInlineSwitcherDropdown } from './utils';
28
28
  import { handleShowMediaViewer } from './index';
29
29
  export var generateMediaInlineFloatingToolbar = function generateMediaInlineFloatingToolbar(state, intl, mediaPluginState, hoverDecoration, pluginInjectionApi) {
30
30
  var _pluginInjectionApi$a, _pluginInjectionApi$f;
@@ -55,6 +55,7 @@ export var generateMediaInlineFloatingToolbar = function generateMediaInlineFloa
55
55
  }, isEditorControlsEnabled && {
56
56
  supportsViewMode: true
57
57
  });
58
+ var disableDownloadButton = getIsDownloadDisabledByDataSecurityPolicy(mediaPluginState);
58
59
  var download = _objectSpread({
59
60
  id: 'editor.media.card.download',
60
61
  type: 'button',
@@ -63,6 +64,7 @@ export var generateMediaInlineFloatingToolbar = function generateMediaInlineFloa
63
64
  downloadMedia(mediaPluginState);
64
65
  return true;
65
66
  },
67
+ disabled: disableDownloadButton,
66
68
  title: intl.formatMessage(messages.download)
67
69
  }, isEditorControlsEnabled && {
68
70
  supportsViewMode: true
@@ -42,6 +42,11 @@ export var getSelectedNearestMediaContainerNodeAttrsFunction = function getSelec
42
42
  export var getSelectedNearestMediaContainerNodeAttrs = function getSelectedNearestMediaContainerNodeAttrs(mediaPluginState) {
43
43
  return getSelectedNearestMediaContainerNodeAttrsFunction(mediaPluginState.selectedMediaContainerNode);
44
44
  };
45
+ export var getIsDownloadDisabledByDataSecurityPolicy = function getIsDownloadDisabledByDataSecurityPolicy(mediaPluginState) {
46
+ var _mediaPluginState$med;
47
+ var enforceMediaDataSecurityPolicy = mediaPluginState === null || mediaPluginState === void 0 || (_mediaPluginState$med = mediaPluginState.mediaClientConfig) === null || _mediaPluginState$med === void 0 ? void 0 : _mediaPluginState$med.enforceDataSecurityPolicy;
48
+ return typeof enforceMediaDataSecurityPolicy === 'boolean' ? enforceMediaDataSecurityPolicy : false;
49
+ };
45
50
  export var downloadMedia = /*#__PURE__*/function () {
46
51
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(mediaPluginState, isViewMode) {
47
52
  var selectedNodeAttrs, id, _selectedNodeAttrs$co, collection, mediaClient, fileState, fileName;
@@ -11,6 +11,7 @@ import type { MediaPluginState } from '../../pm-plugins/types';
11
11
  export declare const isExternalMedia: (attrs: MediaADFAttrs) => attrs is ExternalMediaAttributes;
12
12
  export declare const getSelectedNearestMediaContainerNodeAttrsFunction: (selectedMediaContainerNode: () => ProseMirrorNode | undefined) => MediaADFAttrs | null;
13
13
  export declare const getSelectedNearestMediaContainerNodeAttrs: (mediaPluginState: MediaPluginState) => MediaADFAttrs | null;
14
+ export declare const getIsDownloadDisabledByDataSecurityPolicy: (mediaPluginState: MediaPluginState) => boolean;
14
15
  export declare const downloadMedia: (mediaPluginState: MediaPluginState, isViewMode?: boolean) => Promise<boolean>;
15
16
  export declare const removeMediaGroupNode: (state: EditorState) => import("prosemirror-state").Transaction;
16
17
  export declare const getSelectedMediaSingle: (state: EditorState) => ReturnType<ReturnType<typeof findSelectedNodeOfType>> | ReturnType<ReturnType<typeof findParentNodeOfType>>;
@@ -11,6 +11,7 @@ import type { MediaPluginState } from '../../pm-plugins/types';
11
11
  export declare const isExternalMedia: (attrs: MediaADFAttrs) => attrs is ExternalMediaAttributes;
12
12
  export declare const getSelectedNearestMediaContainerNodeAttrsFunction: (selectedMediaContainerNode: () => ProseMirrorNode | undefined) => MediaADFAttrs | null;
13
13
  export declare const getSelectedNearestMediaContainerNodeAttrs: (mediaPluginState: MediaPluginState) => MediaADFAttrs | null;
14
+ export declare const getIsDownloadDisabledByDataSecurityPolicy: (mediaPluginState: MediaPluginState) => boolean;
14
15
  export declare const downloadMedia: (mediaPluginState: MediaPluginState, isViewMode?: boolean) => Promise<boolean>;
15
16
  export declare const removeMediaGroupNode: (state: EditorState) => import("prosemirror-state").Transaction;
16
17
  export declare const getSelectedMediaSingle: (state: EditorState) => ReturnType<ReturnType<typeof findSelectedNodeOfType>> | ReturnType<ReturnType<typeof findParentNodeOfType>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-media",
3
- "version": "5.1.3",
3
+ "version": "5.1.5",
4
4
  "description": "Media plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -33,7 +33,7 @@
33
33
  "./types": "./src/types/index.ts"
34
34
  },
35
35
  "dependencies": {
36
- "@atlaskit/adf-schema": "^47.6.0",
36
+ "@atlaskit/adf-schema": "^49.0.5",
37
37
  "@atlaskit/analytics-namespaced-context": "^7.0.0",
38
38
  "@atlaskit/analytics-next": "^11.1.0",
39
39
  "@atlaskit/button": "^23.2.0",
@@ -69,8 +69,8 @@
69
69
  "@atlaskit/primitives": "^14.10.0",
70
70
  "@atlaskit/textfield": "^8.0.0",
71
71
  "@atlaskit/theme": "^19.0.0",
72
- "@atlaskit/tmp-editor-statsig": "^9.1.0",
73
- "@atlaskit/tokens": "^5.4.0",
72
+ "@atlaskit/tmp-editor-statsig": "^9.5.0",
73
+ "@atlaskit/tokens": "^5.5.0",
74
74
  "@atlaskit/tooltip": "^20.3.0",
75
75
  "@babel/runtime": "^7.0.0",
76
76
  "@emotion/react": "^11.7.1",