UNPKG

@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
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 )); }