UNPKG

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

Version:

CodeBlockAdvanced plugin for @atlaskit/editor-core

48 lines (36 loc) 1.15 kB
import type { EditorView as CodeMirror } from '@codemirror/view'; import type { getPosHandlerNode } from '@atlaskit/editor-common/types'; import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model'; import { TextSelection } from '@atlaskit/editor-prosemirror/state'; import type { EditorView } from '@atlaskit/editor-prosemirror/view'; interface BackspaceProps { cm: CodeMirror; getNode: () => PMNode; getPos: getPosHandlerNode; view: EditorView; } export const backspaceKeymap = ({ cm, view, getPos, getNode }: BackspaceProps): boolean => { const ranges = cm.state.selection.ranges; if (ranges.length > 1) { return false; } const selection = ranges[0]; if (selection && (!selection.empty || selection.anchor > 0)) { return false; } if (cm.state.doc.lines >= 2) { return false; } const state = view.state; const pos = getPos() ?? 0; const node = getNode(); const tr = state.tr.replaceWith( pos, pos + node.nodeSize, state.schema.nodes.paragraph.createChecked({}, node.content), ); tr.setSelection(TextSelection.near(tr.doc.resolve(pos))); view.dispatch(tr); view.focus(); return true; };