@atlaskit/editor-plugin-code-block-advanced
Version:
CodeBlockAdvanced plugin for @atlaskit/editor-core
195 lines (193 loc) • 5.47 kB
JavaScript
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)));
};