UNPKG

@atlaskit/editor-plugin-media

Version:

Media plugin for @atlaskit/editor-core

114 lines (113 loc) 5.16 kB
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); }); };