/** * Moves the element's pxe tag, class, and hash into the parents attribute and assigns * a new pxe tag to the element. The new pxe tag is pushed onto the parent stack * @param IdmlElement $element * @param string $newTag * @param string $newHash */ public function pushTagToElement(IdmlElement $element, $newTag, $newHash) { $currentTag = IdmlPxeHelper::getPxeTag($element); if (IdmlPxeHelper::hasPxeClass($element)) { $currentClass = IdmlPxeHelper::getPxeClass($element); if (strlen($currentClass)) { $currentTag .= "." . $currentClass; } } $currentHash = $element->attributes["data-pxe-hash"]; $parentList = IdmlPxeHelper::getPxeParents($element) . " " . $currentTag . "#" . $currentHash; if (strpos($newTag, ".")) { list($tagName, $tagClass) = explode(".", $newTag); } else { $tagName = $newTag; $tagClass = ""; } IdmlPxeHelper::setPxeTag($element, $tagName); IdmlPxeHelper::setPxeClass($element, $tagClass); $element->attributes["data-pxe-hash"] = $newHash; IdmlPxeHelper::setPxeParents($element, trim($parentList)); $this->pushParentTag($newTag, $newHash, $element); //Apply this change to all the child elements if (count($element->childrenElements) > 0) { $newChildParentList = $parentList . ' ' . IdmlPxeHelper::getFullPxeTag($element); foreach ($element->childrenElements as $child) { $this->updateElementParents($child, $parentList, $newChildParentList); } } }