@atlaskit/editor-plugin-code-block-advanced
Version:
CodeBlockAdvanced plugin for @atlaskit/editor-core
49 lines (47 loc) • 2.44 kB
JavaScript
import { TextSelection } from '@atlaskit/editor-prosemirror/state';
export var shiftArrowUpWorkaround = function shiftArrowUpWorkaround(view, event) {
var _doc$resolve$nodeBefo;
var _view$state = view.state,
doc = _view$state.doc,
_view$state$selection = _view$state.selection,
$head = _view$state$selection.$head,
$anchor = _view$state$selection.$anchor,
tr = _view$state.tr,
codeBlock = _view$state.schema.nodes.codeBlock;
// Position we want to check (directly after our current position)
var pos = Math.max($head.pos - 1, 1);
var isNodeBefore = ((_doc$resolve$nodeBefo = doc.resolve(pos).nodeBefore) === null || _doc$resolve$nodeBefo === void 0 ? void 0 : _doc$resolve$nodeBefo.type) === codeBlock;
var maybeProblematicNode = isNodeBefore ? doc.resolve(pos).nodeBefore : doc.resolve(pos).node();
if ((maybeProblematicNode === null || maybeProblematicNode === void 0 ? void 0 : maybeProblematicNode.type) === codeBlock) {
var nodeSize = maybeProblematicNode.nodeSize;
var startPos = isNodeBefore ? pos : $head.pos;
tr.setSelection(TextSelection.create(doc, $anchor.pos, Math.max(startPos - nodeSize, 0)));
view.dispatch(tr);
event.preventDefault();
return true;
}
return false;
};
export var shiftArrowDownWorkaround = function shiftArrowDownWorkaround(view, event) {
var _doc$resolve$nodeAfte;
var _view$state2 = view.state,
doc = _view$state2.doc,
_view$state2$selectio = _view$state2.selection,
$head = _view$state2$selectio.$head,
$anchor = _view$state2$selectio.$anchor,
tr = _view$state2.tr,
codeBlock = _view$state2.schema.nodes.codeBlock;
// Position we want to check (directly after our current position)
var pos = $head.pos + 1;
var isNodeAfter = ((_doc$resolve$nodeAfte = doc.resolve(pos).nodeAfter) === null || _doc$resolve$nodeAfte === void 0 ? void 0 : _doc$resolve$nodeAfte.type) === codeBlock;
var maybeProblematicNode = isNodeAfter ? doc.resolve(pos).nodeAfter : doc.resolve(pos).node();
if ((maybeProblematicNode === null || maybeProblematicNode === void 0 ? void 0 : maybeProblematicNode.type) === codeBlock) {
var nodeSize = maybeProblematicNode.nodeSize;
var startPos = isNodeAfter ? pos : $head.pos;
tr.setSelection(TextSelection.create(doc, $anchor.pos, Math.min(startPos + nodeSize, doc.content.size)));
view.dispatch(tr);
event.preventDefault();
return true;
}
return false;
};