Files
piratepoet/lib/Util/DOM.php
Ján Mikláš 100db25ed9 Add space between while and ‘(‘
[MAILPOET-1791]
2019-02-13 08:26:27 -05:00

41 lines
1.3 KiB
PHP

<?php
namespace MailPoet\Util;
use pQuery\DomNode;
class DOM {
/**
* Splits a DOM tree around the cut element, bringing it up to bound
* ancestor and splitting left and right siblings into subtrees along
* the way, retaining order and nesting level.
*/
static function splitOn(DomNode $bound, DomNode $cut_element) {
$ignore_text_and_comment_nodes = false;
for ($parent = $cut_element->parent; $bound != $parent; $parent = $grandparent) {
// Clone parent node without children, but with attributes
$parent->after($parent->toString());
$right = $parent->getNextSibling($ignore_text_and_comment_nodes);
$right->clear();
while ($sibling = $cut_element->getNextSibling($ignore_text_and_comment_nodes)) {
$sibling->move($right);
}
// Reattach cut_element and right siblings to grandparent
$grandparent = $parent->parent;
$index_after_parent = $parent->index() + 1;
$right->move($grandparent, $index_after_parent);
$index_after_parent = $parent->index() + 1;
$cut_element->move($grandparent, $index_after_parent);
}
}
static function findTopAncestor(DomNode $item) {
while ($item->parent->parent !== null) {
$item = $item->parent;
}
return $item;
}
}