absorbNode method

  1. @override
bool absorbNode(
  1. Node? other
)
override

Implementation

@override
bool absorbNode(Node? other) {
  if (other == null) return false;
  final node = this.node;
  if (node == null) return false;

  if (node.isA<Text>()) {
    if (other.isA<Text>()) {
      node.textContent =
          ((node as Text).textContent ?? '') + (other.textContent ?? '');
      other.textContent = '';
      return true;
    } else if (other.isA<Element>()) {
      node.textContent = ((node as Text).textContent ?? '') +
          ((other as Element).textContent ?? '');
      other.clear();
      return true;
    }
  } else if (node.isA<Element>()) {
    final element = node as Element;
    if (other.isA<Element>()) {
      final otherElement = other as Element;
      if (otherElement.childNodes.isEmpty) {
        return true;
      }
      element.appendNodes(otherElement.childNodes.toList());
      otherElement.clear();
      return true;
    } else if (other.isA<Text>()) {
      other.remove();
      element.appendChild(other);
      return true;
    }
  }

  return false;
}