@atlaskit/editor-plugin-media
Version:
Media plugin for @atlaskit/editor-core
85 lines (84 loc) • 3.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
exports.keymapPlugin = keymapPlugin;
var _keymaps = require("@atlaskit/editor-common/keymaps");
var _selection = require("@atlaskit/editor-common/selection");
var _keymap = require("@atlaskit/editor-prosemirror/keymap");
var _state = require("@atlaskit/editor-prosemirror/state");
var _captions = require("../commands/captions");
var _pluginKey = require("../pm-plugins/plugin-key");
function keymapPlugin(options, editorAnalyticsAPI, editorSelectionAPI) {
var list = {};
(0, _keymaps.bindKeymapWithCommand)(_keymaps.undo.common, ignoreLinksInSteps, list);
(0, _keymaps.bindKeymapWithCommand)(_keymaps.enter.common, splitMediaGroup, list);
if (options !== null && options !== void 0 && options.allowCaptions) {
(0, _keymaps.bindKeymapWithCommand)(_keymaps.moveDown.common, insertAndSelectCaption(editorAnalyticsAPI), list);
(0, _keymaps.bindKeymapWithCommand)(_keymaps.tab.common, insertAndSelectCaption(editorAnalyticsAPI), list);
(0, _keymaps.bindKeymapWithCommand)(_keymaps.moveLeft.common, arrowLeftFromMediaSingle(editorSelectionAPI), list);
(0, _keymaps.bindKeymapWithCommand)(_keymaps.moveRight.common, arrowRightFromMediaSingle(editorSelectionAPI), list);
}
(0, _keymaps.bindKeymapWithCommand)(_keymaps.insertNewLine.common, splitMediaGroup, list);
return (0, _keymap.keymap)(list);
}
var ignoreLinksInSteps = function ignoreLinksInSteps(state) {
var mediaPluginState = _pluginKey.stateKey.getState(state);
mediaPluginState.ignoreLinks = true;
return false;
};
var splitMediaGroup = function splitMediaGroup(state) {
var mediaPluginState = _pluginKey.stateKey.getState(state);
return mediaPluginState.splitMediaGroup();
};
var insertAndSelectCaption = function insertAndSelectCaption(editorAnalyticsAPI) {
return function (state, dispatch) {
var selection = state.selection,
schema = state.schema;
if (selection instanceof _state.NodeSelection && selection.node.type === schema.nodes.mediaSingle && schema.nodes.caption) {
if (dispatch) {
var from = selection.from,
node = selection.node;
if (!(0, _captions.insertAndSelectCaptionFromMediaSinglePos)(editorAnalyticsAPI)(from, node)(state, dispatch)) {
(0, _captions.selectCaptionFromMediaSinglePos)(from, node)(state, dispatch);
}
}
return true;
}
return false;
};
};
var arrowLeftFromMediaSingle = function arrowLeftFromMediaSingle(editorSelectionAPI) {
return function (state, dispatch) {
var selection = state.selection;
if (editorSelectionAPI && selection instanceof _state.NodeSelection && selection.node.type.name === 'mediaSingle') {
var tr = editorSelectionAPI.selectNearNode({
selectionRelativeToNode: undefined,
selection: new _selection.GapCursorSelection(state.doc.resolve(selection.from), _selection.Side.LEFT)
})(state);
if (dispatch) {
dispatch(tr);
}
return true;
}
return false;
};
};
var arrowRightFromMediaSingle = function arrowRightFromMediaSingle(editorSelectionAPI) {
return function (state, dispatch) {
var selection = state.selection;
if (editorSelectionAPI && selection instanceof _state.NodeSelection && selection.node.type.name === 'mediaSingle') {
var tr = editorSelectionAPI.selectNearNode({
selectionRelativeToNode: undefined,
selection: new _selection.GapCursorSelection(state.doc.resolve(selection.to), _selection.Side.RIGHT)
})(state);
if (dispatch) {
dispatch(tr);
}
return true;
}
return false;
};
};
var _default = exports.default = keymapPlugin;