a b
->a &nsbp;b
ora
->a return Options.liftN([ prevTextOpt, nextTextOpt, afterDeletePosOpt ], (prev, next, pos) => { const prevNode = prev.dom(), nextNode = next.dom(); const offset = prevNode.data.length; MergeText.mergeTextNodes(prevNode, nextNode, normalizeWhitespace); // Update the cursor position if required return pos.container() === nextNode ? CaretPosition(prevNode, offset) : pos; }).orThunk(() => { if (normalizeWhitespace) { prevTextOpt.each((elm) => MergeText.normalizeWhitespaceBefore(elm.dom(), elm.dom().length)); nextTextOpt.each((elm) => MergeText.normalizeWhitespaceAfter(elm.dom(), 0)); } return afterDeletePosOpt; }); }; const isInlineElement = (editor: Editor, element: Element): boolean => Obj.has(editor.schema.getTextInlineElements(), SugarNode.name(element)); const deleteElement = (editor: Editor, forward: boolean, elm: Element, moveCaret: boolean = true) => { const afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom()); const parentBlock = PredicateFind.ancestor(elm, Fun.curry(isBlock, editor), eqRawNode(editor.getBody())); const normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos, isInlineElement(editor, elm)); if (editor.dom.isEmpty(editor.getBody())) { editor.setContent(''); editor.selection.setCursorLocation(); } else { parentBlock.bind(paddEmptyBlock).fold( function () { if (moveCaret) { setSelection(editor, forward, normalizedAfterDeletePos); } }, function (paddPos) { if (moveCaret) { setSelection(editor, forward, Option.some(paddPos)); } } ); } }; export default { deleteElement };