/** * Inserts a new child immediately after the specified frame * * @param $new_child Frame The new Frame to insert * @param $ref Frame The Frame before the new Frame * @param $update_node boolean Whether or not to update the DOM * * @throws DOMPDF_Exception */ function insert_child_after(Frame $new_child, Frame $ref, $update_node = true) { if ($ref === $this->_last_child) { $this->append_child($new_child, $update_node); return; } if (is_null($ref)) { $this->prepend_child($new_child, $update_node); return; } if ($ref->_parent !== $this) { throw new DOMPDF_Exception("Reference child is not a child of this node."); } // Update the node if ($update_node) { if ($ref->_next_sibling) { $next_node = $ref->_next_sibling->_node; $this->_node->insertBefore($new_child->_node, $next_node); } else { $new_child->_node = $this->_node->appendChild($new_child->_node); } } // Remove the child from its parent if ($new_child->_parent) { $new_child->_parent->remove_child($new_child, false); } $new_child->_parent = $this; $new_child->_prev_sibling = $ref; $new_child->_next_sibling = $ref->_next_sibling; if ($ref->_next_sibling) { $ref->_next_sibling->_prev_sibling = $new_child; } $ref->_next_sibling = $new_child; }