UNPKG

@atlaskit/editor-plugin-media

Version:

Media plugin for @atlaskit/editor-core

85 lines (84 loc) 3.72 kB
"use strict"; 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;