UNPKG

@atlaskit/editor-plugin-code-block-advanced

Version:

CodeBlockAdvanced plugin for @atlaskit/editor-core

195 lines (193 loc) 5.47 kB
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray"; import { defaultKeymap, indentWithTab } from '@codemirror/commands'; import { keymap as cmKeymap } from '@codemirror/view'; import { getBrowserInfo } from '@atlaskit/editor-common/browser'; import { exitCode, selectAll } from '@atlaskit/editor-prosemirror/commands'; import { undo, redo } from '@atlaskit/prosemirror-history'; import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals'; import { backspaceKeymap } from './backspace'; import { maybeEscapeKeymap } from './maybeEscape'; export var keymapExtension = function keymapExtension(_ref) { var view = _ref.view, getNode = _ref.getNode, getPos = _ref.getPos, selectCodeBlockNode = _ref.selectCodeBlockNode, onMaybeNodeSelection = _ref.onMaybeNodeSelection, customFindReplace = _ref.customFindReplace; return cmKeymap.of(codeBlockKeymap({ view: view, getNode: getNode, getPos: getPos, selectCodeBlockNode: selectCodeBlockNode, onMaybeNodeSelection: onMaybeNodeSelection, customFindReplace: customFindReplace })); }; var codeBlockKeymap = function codeBlockKeymap(_ref2) { var view = _ref2.view, getNode = _ref2.getNode, getPos = _ref2.getPos, selectCodeBlockNode = _ref2.selectCodeBlockNode, onMaybeNodeSelection = _ref2.onMaybeNodeSelection, customFindReplace = _ref2.customFindReplace; var browser = getBrowserInfo(); return [{ key: 'ArrowUp', run: function run(cm) { return maybeEscapeKeymap({ unit: 'line', dir: -1, cm: cm, view: view, getNode: getNode, getPos: getPos, selectCodeBlockNode: selectCodeBlockNode, onMaybeNodeSelection: onMaybeNodeSelection }); } }, { key: 'ArrowLeft', run: function run(cm) { return maybeEscapeKeymap({ unit: 'char', dir: -1, cm: cm, view: view, getNode: getNode, getPos: getPos, selectCodeBlockNode: selectCodeBlockNode, onMaybeNodeSelection: onMaybeNodeSelection }); } }, { key: 'ArrowDown', run: function run(cm) { return maybeEscapeKeymap({ unit: 'line', dir: 1, cm: cm, view: view, getNode: getNode, getPos: getPos, selectCodeBlockNode: selectCodeBlockNode, onMaybeNodeSelection: onMaybeNodeSelection }); } }, { key: 'Ctrl-a', mac: 'Cmd-a', run: function run(cm) { var isFullBlockSelection = cm.state.selection.main.from === 0 && cm.state.selection.main.to === getNode().content.size; // Allow codemirror to handle if (!isFullBlockSelection) { return false; } // Move the selection and focus into prosemirror onMaybeNodeSelection(); view.focus(); selectAll(view.state, view.dispatch); return true; } }, { key: 'ArrowRight', run: function run(cm) { return maybeEscapeKeymap({ unit: 'char', dir: 1, cm: cm, view: view, getNode: getNode, getPos: getPos, selectCodeBlockNode: selectCodeBlockNode, onMaybeNodeSelection: onMaybeNodeSelection }); } }, { key: 'Ctrl-f', mac: 'Cmd-f', run: function run() { // Pass synthetic event to prosemirror if (customFindReplace) { view.dispatchEvent(new KeyboardEvent('keydown', { key: 'f', code: 'KeyF', metaKey: browser.mac ? true : false, ctrlKey: browser.mac ? false : true })); return true; } return false; } }, { key: 'Ctrl-Enter', run: function run() { if (!exitCode(view.state, view.dispatch)) { return false; } view.focus(); return true; } }, { key: 'Ctrl-z', mac: 'Cmd-z', run: function run() { return undo(view.state, view.dispatch); } }, { key: 'Shift-Ctrl-z', mac: 'Shift-Cmd-z', run: function run() { return redo(view.state, view.dispatch); } }, { key: 'Ctrl-y', mac: 'Cmd-y', run: function run() { return redo(view.state, view.dispatch); } }, { key: 'Backspace', run: function run(cm) { return backspaceKeymap({ cm: cm, view: view, getNode: getNode, getPos: getPos }); } }, { key: 'Ctrl-Alt-]', mac: 'Cmd-Alt-]', run: function run() { // Pass synthetic event to prosemirror if (expValEquals('platform_editor_breakout_resizing', 'isEnabled', true)) { view.dispatchEvent(new KeyboardEvent('keydown', { key: ']', code: 'BracketRight', metaKey: browser.mac ? true : false, ctrlKey: browser.mac ? false : true, altKey: true })); return true; } return false; } }, { key: 'Ctrl-Alt-[', mac: 'Cmd-Alt-[', run: function run() { // Pass synthetic event to prosemirror if (expValEquals('platform_editor_breakout_resizing', 'isEnabled', true)) { view.dispatchEvent(new KeyboardEvent('keydown', { key: ']', code: 'BracketLeft', metaKey: browser.mac ? true : false, ctrlKey: browser.mac ? false : true, altKey: true })); return true; } return false; } }].concat(_toConsumableArray(defaultKeymap.concat(indentWithTab))); };