@atlaskit/editor-plugin-block-menu
Version:
BlockMenu plugin for @atlaskit/editor-core
34 lines • 1.53 kB
JavaScript
import { getDocument } from '@atlaskit/browser-apis';
import { BLOCK_MENU_TEST_ID } from '@atlaskit/editor-common/block-menu';
export var fixBlockMenuPositionAndScroll = function fixBlockMenuPositionAndScroll(firstSelectedNode) {
var doc = getDocument();
if (!doc) {
return;
}
var blockMenuEl = doc.querySelector("[data-testid=\"".concat(BLOCK_MENU_TEST_ID, "\"]"));
if (!(blockMenuEl !== null && blockMenuEl !== void 0 && blockMenuEl.parentElement)) {
return;
}
var scrollableContainer = doc.querySelector('[data-testid="editor-content-container"]');
if (!firstSelectedNode || !scrollableContainer) {
return;
}
var parentElement = blockMenuEl.parentElement;
var currentTop = parentElement.getBoundingClientRect().top;
var distance = firstSelectedNode.getBoundingClientRect().top - blockMenuEl.getBoundingClientRect().top;
scrollableContainer.scrollBy({
behavior: 'instant',
top: distance
});
var newTop = parentElement.getBoundingClientRect().top;
var topDifference = currentTop - newTop;
var hasTopProperty = parentElement.style.top !== '';
var hasBottomProperty = parentElement.style.bottom !== '';
if (hasBottomProperty && !hasTopProperty) {
var currentBottomValue = parseFloat(parentElement.style.bottom || '0');
parentElement.style.bottom = "".concat(currentBottomValue - topDifference, "px");
} else {
var currentTopValue = parseFloat(parentElement.style.top || '0');
parentElement.style.top = "".concat(currentTopValue + topDifference, "px");
}
};