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