insertBefore<T extends LexicalNode> method

T insertBefore<T extends LexicalNode>(
  1. T nodeToInsert
)

Inserts nodeToInsert directly before this node.

Implementation

T insertBefore<T extends LexicalNode>(T nodeToInsert) {
  errorOnReadOnly();
  final parent = getParentOrThrow();
  errorOnInsertTextNodeOnRoot(parent, nodeToInsert);
  final writableSelf = getWritable<LexicalNode>();
  final writableInsert = nodeToInsert.getWritable<T>();
  $removeFromParent(writableInsert);
  final writableParent = writableSelf
      .getParentOrThrow()
      .getWritable<ElementNode>();
  final prevSibling = writableSelf.getPreviousSibling();
  if (prevSibling == null) {
    writableParent.firstKey = writableInsert.key;
  } else {
    prevSibling.getWritable<LexicalNode>().nextKey = writableInsert.key;
  }
  writableInsert
    ..prevKey = writableSelf.prevKey
    ..nextKey = writableSelf.key
    ..parentKey = writableParent.key;
  writableSelf.prevKey = writableInsert.key;
  writableParent.sizeInternal++;
  return nodeToInsert;
}