@atlaskit/editor-plugin-block-controls
Version:
Block controls plugin for @atlaskit/editor-core
113 lines • 5.33 kB
JavaScript
import _typeof from "@babel/runtime/helpers/typeof";
import { getBrowserInfo } from '@atlaskit/editor-common/browser';
var previewStyle = {
borderColor: "var(--ds-border, #0B120E24)",
borderStyle: 'solid',
borderRadius: "var(--ds-radius-small, 3px)",
borderWidth: "var(--ds-border-width-selected, 2px)",
backgroundColor: "var(--ds-skeleton-subtle, #17171708)"
};
var getPreviewContainerDimensionsForSingle = function getPreviewContainerDimensionsForSingle(dom, nodeType) {
var nodeContainer = dom;
var iframeContainer = dom.querySelector('iframe');
if (nodeType === 'embedCard') {
nodeContainer = dom.querySelector('.rich-media-item') || dom;
} else if (nodeType === 'extension' && iframeContainer) {
nodeContainer = iframeContainer;
}
var nodeContainerRect = nodeContainer.getBoundingClientRect();
return {
width: nodeContainerRect.width,
height: nodeContainerRect.height
};
};
var getPreviewContainerDimensions = function getPreviewContainerDimensions(dragPreviewContent) {
var maxWidth = 0;
var heightSum = 0;
for (var index = 0; index < dragPreviewContent.length; index++) {
var element = dragPreviewContent[index];
var _getPreviewContainerD = getPreviewContainerDimensionsForSingle(element.dom, element.nodeType),
width = _getPreviewContainerD.width,
height = _getPreviewContainerD.height;
if (width > maxWidth) {
maxWidth = width;
}
heightSum += height;
}
return {
width: maxWidth,
height: heightSum
};
};
var createGenericPreview = function createGenericPreview() {
var generalPreview = document.createElement('div');
// ProseMirror class is required to make sure the cloned dom is styled correctly
generalPreview.classList.add('ProseMirror', 'block-ctrl-drag-preview');
generalPreview.style.border = "".concat(previewStyle.borderWidth, " ").concat(previewStyle.borderStyle, " ").concat(previewStyle.borderColor);
generalPreview.style.borderRadius = previewStyle.borderRadius;
generalPreview.style.backgroundColor = previewStyle.backgroundColor;
generalPreview.style.height = '100%';
generalPreview.setAttribute('data-testid', 'block-ctrl-generic-drag-preview');
return generalPreview;
};
var createContentPreviewElement = function createContentPreviewElement(dom, nodeType, nodeSpacing) {
var contentPreviewOneElement = document.createElement('div');
contentPreviewOneElement.classList.add('ProseMirror', 'block-ctrl-drag-preview');
var resizer = dom.querySelector('.resizer-item');
var clonedDom = resizer && ['mediaSingle', 'table'].includes(nodeType) ?
// Ignored via go/ees005
// eslint-disable-next-line @atlaskit/editor/no-as-casting
resizer.cloneNode(true) :
// Ignored via go/ees005
// eslint-disable-next-line @atlaskit/editor/no-as-casting
dom.cloneNode(true);
var browser = getBrowserInfo();
clonedDom.style.marginLeft = '0';
clonedDom.style.marginTop = nodeSpacing ? "".concat(nodeSpacing.top) : '0';
clonedDom.style.marginRight = '0';
clonedDom.style.marginBottom = nodeSpacing ? "".concat(nodeSpacing.bottom) : '0';
clonedDom.style.boxShadow = 'none';
clonedDom.style.opacity = browser.windows ? '1' : '0.31';
contentPreviewOneElement.appendChild(clonedDom);
return contentPreviewOneElement;
};
var isGenericPreview = function isGenericPreview(dom, nodeType) {
var embedCard = dom.querySelector('.embedCardView-content-wrap');
return nodeType === 'embedCard' || !!embedCard || nodeType === 'extension' && !!dom.querySelector('iframe');
};
var createPreviewForElement = function createPreviewForElement(dom, nodeType, nodeSpacing) {
var shouldBeGenericPreview = isGenericPreview(dom, nodeType);
if (shouldBeGenericPreview) {
return createGenericPreview();
} else {
return createContentPreviewElement(dom, nodeType, nodeSpacing);
}
};
export var dragPreview = function dragPreview(container, dragPreviewContent) {
container.style.pointerEvents = 'none';
if (!Array.isArray(dragPreviewContent) && _typeof(dragPreviewContent) === 'object') {
dragPreviewContent = [dragPreviewContent];
}
var _getPreviewContainerD2 = getPreviewContainerDimensions(dragPreviewContent),
maxWidth = _getPreviewContainerD2.width,
maxHeight = _getPreviewContainerD2.height;
container.style.width = "".concat(maxWidth, "px");
container.style.height = "".concat(maxHeight, "px");
var previewWrapperFragment = document.createDocumentFragment();
for (var index = 0; index < dragPreviewContent.length; index++) {
var element = dragPreviewContent[index];
var contentPreviewOneElement = createPreviewForElement(element.dom, element.nodeType, element.nodeSpacing);
previewWrapperFragment.appendChild(contentPreviewOneElement);
}
container.appendChild(previewWrapperFragment);
var scrollParent = document.querySelector('.fabric-editor-popup-scroll-parent');
var scrollParentClassNames = scrollParent === null || scrollParent === void 0 ? void 0 : scrollParent.className;
// Add the scroll parent class to the container to ensure the cloned element is styled correctly
container.className = scrollParentClassNames || '';
container.classList.remove('fabric-editor-popup-scroll-parent');
// Prevents a scrollbar from showing
container.style.overflow = 'visible';
return function () {
return container;
};
};