@lobehub/editor
Version:
A powerful and extensible rich text editor built on Meta's Lexical framework, providing a modern editing experience with React integration.
47 lines • 1.81 kB
JavaScript
import { $wrapNodeInElement, mergeRegister } from '@lexical/utils';
import { $createParagraphNode, $getNodeByKey, $insertNodes, $isRootOrShadowRoot, COMMAND_PRIORITY_HIGH, createCommand } from 'lexical';
import { $createMathInlineNode } from "../node/index";
export var INSERT_MATH_COMMAND = createCommand('INSERT_MATH_COMMAND');
export var UPDATE_MATH_COMMAND = createCommand('UPDATE_MATH_COMMAND');
export var SELECT_MATH_SIDE_COMMAND = createCommand('SELECT_MATH_SIDE_COMMAND');
export function registerMathCommand(editor) {
return mergeRegister(editor.registerCommand(INSERT_MATH_COMMAND, function (payload) {
var code = payload.code;
editor.update(function () {
var mathNode = $createMathInlineNode(code);
$insertNodes([mathNode]); // Insert a zero-width space to ensure the image is not the last child
if ($isRootOrShadowRoot(mathNode.getParentOrThrow())) {
$wrapNodeInElement(mathNode, $createParagraphNode).selectEnd();
}
});
return true;
}, COMMAND_PRIORITY_HIGH // Priority
), editor.registerCommand(UPDATE_MATH_COMMAND, function (payload) {
var code = payload.code,
key = payload.key;
editor.update(function () {
var mathCode = $getNodeByKey(key);
if (mathCode) {
mathCode.updateCode(code);
mathCode.selectNext();
}
});
return true;
}, COMMAND_PRIORITY_HIGH // Priority
), editor.registerCommand(SELECT_MATH_SIDE_COMMAND, function (payload) {
var key = payload.key,
prev = payload.prev;
editor.update(function () {
var mathNode = $getNodeByKey(key);
if (mathNode) {
if (prev) {
mathNode.selectPrevious();
} else {
mathNode.selectNext();
}
}
});
return true;
}, COMMAND_PRIORITY_HIGH // Priority
));
}