insertAdjacentNode method

void insertAdjacentNode(
  1. int targetId,
  2. String position,
  3. int newTargetId
)

foo

Implementation

void insertAdjacentNode(int targetId, String position, int newTargetId) {
  if (kProfileMode) {
    PerformanceTiming.instance()
        .mark(PERF_INSERT_ADJACENT_NODE_START, uniqueId: targetId);
  }

  assert(_existsTarget(targetId),
      'targetId: $targetId position: $position newTargetId: $newTargetId');
  assert(_existsTarget(newTargetId),
      'newTargetId: $newTargetId position: $position');

  Node target = _getEventTargetById<Node>(targetId)!;
  Node newNode = _getEventTargetById<Node>(newTargetId)!;
  Node? targetParentNode = target.parentNode;

  switch (position) {
    case 'beforebegin':
      targetParentNode!.insertBefore(newNode, target);
      break;
    case 'afterbegin':
      target.insertBefore(newNode, target.firstChild);
      break;
    case 'beforeend':
      target.appendChild(newNode);
      break;
    case 'afterend':
      if (targetParentNode!.lastChild == target) {
        targetParentNode.appendChild(newNode);
      } else {
        targetParentNode.insertBefore(
          newNode,
          targetParentNode
              .childNodes[targetParentNode.childNodes.indexOf(target) + 1],
        );
      }
      break;
  }

  _debugDOMTreeChanged();

  if (kProfileMode) {
    PerformanceTiming.instance()
        .mark(PERF_INSERT_ADJACENT_NODE_END, uniqueId: targetId);
  }
}