@atlaskit/editor-plugin-media
Version:
Media plugin for @atlaskit/editor-core
114 lines (113 loc) • 5.16 kB
JavaScript
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
import _regeneratorRuntime from "@babel/runtime/regenerator";
import memoizeOne from 'memoize-one';
import { wrappedLayouts } from '@atlaskit/editor-common/media-single';
import { nonWrappedLayouts } from '@atlaskit/editor-common/utils';
import { findParentNodeOfType, findSelectedNodeOfType, removeParentNodeOfType, removeSelectedNode } from '@atlaskit/editor-prosemirror/utils';
import { akEditorFullWidthLayoutWidth } from '@atlaskit/editor-shared-styles';
import { getMediaClient } from '@atlaskit/media-client-react';
export var getSelectedMediaContainerNodeAttrs = function getSelectedMediaContainerNodeAttrs(mediaPluginState) {
var selectedNode = mediaPluginState.selectedMediaContainerNode();
if (selectedNode && selectedNode.attrs) {
return selectedNode.attrs;
}
return null;
};
export var downloadMedia = /*#__PURE__*/function () {
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(mediaPluginState) {
var selectedNodeAttrs, id, _selectedNodeAttrs$co, collection, mediaClient, fileState, fileName;
return _regeneratorRuntime.wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
selectedNodeAttrs = getSelectedMediaContainerNodeAttrs(mediaPluginState);
if (!(selectedNodeAttrs && mediaPluginState.mediaClientConfig)) {
_context.next = 10;
break;
}
id = selectedNodeAttrs.id, _selectedNodeAttrs$co = selectedNodeAttrs.collection, collection = _selectedNodeAttrs$co === void 0 ? '' : _selectedNodeAttrs$co;
mediaClient = getMediaClient(mediaPluginState.mediaClientConfig);
_context.next = 7;
return mediaClient.file.getCurrentState(id, {
collectionName: collection
});
case 7:
fileState = _context.sent;
fileName = fileState.status === 'error' ? undefined : fileState.name;
mediaClient.file.downloadBinary(id, fileName, collection);
case 10:
return _context.abrupt("return", true);
case 13:
_context.prev = 13;
_context.t0 = _context["catch"](0);
return _context.abrupt("return", false);
case 16:
case "end":
return _context.stop();
}
}, _callee, null, [[0, 13]]);
}));
return function downloadMedia(_x) {
return _ref.apply(this, arguments);
};
}();
export var removeMediaGroupNode = function removeMediaGroupNode(state) {
var mediaGroup = state.schema.nodes.mediaGroup;
var mediaGroupParent = findParentNodeOfType(mediaGroup)(state.selection);
var tr = state.tr;
// If it is the last media group in filmstrip, remove the entire filmstrip
if (mediaGroupParent && mediaGroupParent.node.childCount === 1) {
tr = removeParentNodeOfType(mediaGroup)(tr);
} else {
tr = removeSelectedNode(tr);
}
return tr;
};
export var getSelectedMediaSingle = function getSelectedMediaSingle(state) {
var mediaSingle = state.schema.nodes.mediaSingle;
return findSelectedNodeOfType(mediaSingle)(state.selection) || findParentNodeOfType(mediaSingle)(state.selection);
};
export var getPixelWidthOfElement = memoizeOne(function (editorView, pos, mediaWidth) {
var domNode = editorView.nodeDOM(pos);
if (domNode instanceof HTMLElement) {
return domNode.offsetWidth;
}
return mediaWidth;
});
export var calcNewLayout = function calcNewLayout(width, layout, contentWidth) {
var fullWidthMode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
var isNested = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
var isWrappedLayout = wrappedLayouts.indexOf(layout) > -1;
//See flowchart for layout logic: https://hello.atlassian.net/wiki/spaces/TWPCP/whiteboard/2969594044
if (width >= akEditorFullWidthLayoutWidth) {
// If width is greater than or equal to full editor width
return 'full-width';
}
if (fullWidthMode) {
// If under editor full width mode
return isWrappedLayout ? layout : 'center';
}
if (width > contentWidth && !isNested) {
// If width is greater than content length and not nested
return 'wide';
}
return isNested || isWrappedLayout && width !== contentWidth ? layout : 'center';
};
var maxToolbarFitWidth = 0;
export var getMaxToolbarWidth = function getMaxToolbarWidth() {
var toolbar = document.querySelector("div[aria-label=\"Media floating controls\"]");
var toolbarWidth = toolbar === null || toolbar === void 0 ? void 0 : toolbar.getBoundingClientRect().width;
if (!toolbar) {
maxToolbarFitWidth = 0;
}
if (toolbarWidth && toolbarWidth > maxToolbarFitWidth) {
maxToolbarFitWidth = toolbarWidth;
}
return maxToolbarFitWidth;
};
export var getSelectedLayoutIcon = function getSelectedLayoutIcon(layoutIcons, selectedNode) {
var selectedLayout = selectedNode.attrs.layout;
return layoutIcons.find(function (icon) {
return icon.value === (nonWrappedLayouts.includes(selectedLayout) ? 'center' : selectedLayout);
});
};