@atlaskit/editor-plugin-card
Version:
Card plugin for @atlaskit/editor-core
69 lines (67 loc) • 2.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.cardKeymap = cardKeymap;
var _browser = require("@atlaskit/editor-common/browser");
var _keymaps = require("@atlaskit/editor-common/keymaps");
var _keymap = require("@atlaskit/editor-prosemirror/keymap");
var _state = require("@atlaskit/editor-prosemirror/state");
var _utils = require("@atlaskit/editor-prosemirror/utils");
var lookupPixel = 10;
var getClosestInlineCardPos = function getClosestInlineCardPos(state, editorView, direction) {
var _editorView$posAtCoor;
var selection = state.selection;
var parent = selection.$from.parent;
var inlineCardType = state.schema.nodes.inlineCard;
if (!(0, _utils.flatten)(parent, false).some(function (_ref) {
var node = _ref.node;
return node.type === inlineCardType;
})) {
return null;
}
var coord = editorView.coordsAtPos(selection.$anchor.pos);
var nearPos = (_editorView$posAtCoor = editorView.posAtCoords({
left: coord.left,
top: direction === 'up' ? coord.top - lookupPixel : coord.bottom + lookupPixel
})) === null || _editorView$posAtCoor === void 0 ? void 0 : _editorView$posAtCoor.inside;
if (typeof nearPos === 'number' && nearPos > -1) {
var newNode = state.doc.nodeAt(nearPos);
if (newNode) {
if (newNode.type !== inlineCardType || (0, _utils.findChildren)(parent, function (node) {
return node === newNode;
}, false).length === 0 || newNode === selection.node) {
return null;
}
return nearPos;
}
}
return null;
};
var selectAboveBelowInlineCard = function selectAboveBelowInlineCard(direction) {
return function (state, dispatch, editorView) {
if (!editorView || !dispatch) {
return false;
}
var pos = getClosestInlineCardPos(state, editorView, direction);
if (pos) {
dispatch(state.tr.setSelection(new _state.NodeSelection(state.doc.resolve(pos))));
return true;
}
return false;
};
};
function cardKeymap(featureFlags) {
var list = {};
var browser = (0, _browser.getBrowserInfo)();
// https://bugs.chromium.org/p/chromium/issues/detail?id=1227468 introduced since Chrome 91
if (browser.chrome && browser.chrome_version > 90) {
// Ignored via go/ees005
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
(0, _keymaps.bindKeymapWithCommand)(_keymaps.moveUp.common, selectAboveBelowInlineCard('up'), list);
// Ignored via go/ees005
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
(0, _keymaps.bindKeymapWithCommand)(_keymaps.moveDown.common, selectAboveBelowInlineCard('down'), list);
}
return (0, _keymap.keymap)(list);
}