UNPKG

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

Version:

CodeBlockAdvanced plugin for @atlaskit/editor-core

63 lines (62 loc) 2.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.maybeEscapeKeymap = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _selection = require("@atlaskit/editor-common/selection"); var _state = require("@atlaskit/editor-prosemirror/state"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var maybeEscapeKeymap = exports.maybeEscapeKeymap = function maybeEscapeKeymap(_ref) { var _getPos; var unit = _ref.unit, dir = _ref.dir, view = _ref.view, cm = _ref.cm, getPos = _ref.getPos, getNode = _ref.getNode, onMaybeNodeSelection = _ref.onMaybeNodeSelection, selectCodeBlockNode = _ref.selectCodeBlockNode; if (unit === 'char') { onMaybeNodeSelection(); } var node = getNode(); var state = cm.state; var main = state.selection.main; if (!main.empty) { return false; } if (unit === 'line') { main = _objectSpread(_objectSpread({}, state.doc.lineAt(main.head)), {}, { head: 0, empty: false }); } if (dir < 0 ? main.from > 0 : main.to < state.doc.length) { return false; } var targetPos = ((_getPos = getPos === null || getPos === void 0 ? void 0 : getPos()) !== null && _getPos !== void 0 ? _getPos : 0) + (dir < 0 ? 0 : node.nodeSize); if (unit === 'char') { view.focus(); selectCodeBlockNode(dir === -1 ? _selection.RelativeSelectionPos.Start : _selection.RelativeSelectionPos.End); return true; } else { createParagraphIfEndOfDoc(view, targetPos); var tr = view.state.tr; var selection = _state.Selection.near(tr.doc.resolve(targetPos), dir); tr.setSelection(selection).scrollIntoView(); view.dispatch(tr); view.focus(); return true; } }; var createParagraphIfEndOfDoc = function createParagraphIfEndOfDoc(view, targetPos) { if (targetPos === view.state.doc.content.size) { var paragraph = view.state.schema.nodes.paragraph.createChecked({}); var tr = view.state.tr.insert(targetPos, paragraph); // Note: we purposefully do a multi-dispatch here, otherwise we get stuck in codemirror view.dispatch(tr); } };