Example #1
0
 public function &appendNode(DOMNode &$a_tag)
 {
     switch ($this->m_node->nodeType) {
         case XML_DOCUMENT_NODE:
             $node = $this->m_node->isSameNode($a_tag->ownerDocument) ? $a_tag : $this->m_node->importNode($a_tag, true);
             $this->m_node->appendChild($a_tag);
             return $this;
         case XML_ELEMENT_NODE:
             $node = $this->m_node->ownerDocument->isSameNode($a_tag->ownerDocument) ? $a_tag : $this->m_node->ownerDocument->importNode($a_tag, true);
             $this->m_node->appendChild($node);
             return $this;
     }
     return $this;
 }
Example #2
0
 protected function insertNode(DOMNode $tmp, DOMNode $node, $mode)
 {
     if ($mode === 'before' || $mode === 'after') {
         if ($node instanceof DOMText || $node instanceof DOMElement || $node instanceof DOMDocumentFragment) {
             if ($tmp->isSameNode($tmp->ownerDocument->documentElement)) {
                 throw new BadMethodCallException('Cannot insert a ' . get_class($node) . ' node outside of the root node');
             }
         }
         if ($mode === 'before') {
             return $tmp->parentNode->insertBefore($node, $tmp);
         }
         if ($tmp->nextSibling) {
             return $tmp->parentNode->insertBefore($node, $tmp->nextSibling);
         }
         return $tmp->parentNode->appendChild($node);
     }
     return $tmp->appendChild($node);
 }
Example #3
0
 /**
  * Create XPath
  *
  * @param \DOMNode $node
  * @return string
  */
 protected function createXPath(\DOMNode $node)
 {
     $parentXPath = '';
     $currentXPath = $node->getNodePath();
     if ($node->parentNode !== null && !$node->isSameNode($node->parentNode)) {
         $parentXPath = $this->createXPath($node->parentNode);
         $pathParts = explode('/', $currentXPath);
         $currentXPath = '/' . end($pathParts);
     }
     $attributesXPath = '';
     if ($node->hasAttributes()) {
         $attributes = [];
         foreach ($node->attributes as $name => $attribute) {
             if ($this->isIdAttribute($name)) {
                 $attributes[] = sprintf('@%s="%s"', $name, $attribute->value);
                 break;
             }
         }
         if (!empty($attributes)) {
             if (substr($currentXPath, -1) === ']') {
                 $currentXPath = substr($currentXPath, 0, strrpos($currentXPath, '['));
             }
             $attributesXPath = '[' . implode(' and ', $attributes) . ']';
         }
     }
     return '/' . trim($parentXPath . $currentXPath . $attributesXPath, '/');
 }
Example #4
0
 /**
  * Draw a final layout zone on its thumbnail.
  *
  * @access private
  *
  * @param ressource $thumbnail  The thumbnail ressource
  * @param DOMNode   $node       The current node zone
  * @param array     $clip       The clip rect to draw
  * @param int       $background The background color
  * @param int       $gridcolumn The number of columns in the grid
  * @param boolean   $lastChild  True if the current node is the last child of its parent node
  *
  * @return int The new X axis position;
  */
 private function drawThumbnailZone(&$thumbnail, $node, $clip, $background, $gridcolumn, $lastChild = false)
 {
     $x = $clip[0];
     $y = $clip[1];
     $width = $clip[2];
     $height = $clip[3];
     if (null !== ($spansize = preg_replace('/[^0-9]+/', '', $node->getAttribute('class')))) {
         $width = floor($width * $spansize / $gridcolumn);
     }
     if (false !== strpos($node->getAttribute('class'), 'Child')) {
         $height = floor($height / 2);
     }
     if (!$node->hasChildNodes()) {
         $this->drawRect($thumbnail, array($x, $y, $width, $height), $background, $width == $clip[2] || strpos($node->getAttribute('class'), 'hChild'), $lastChild);
         return $width + 2;
     }
     foreach ($node->childNodes as $child) {
         if (is_a($child, 'DOMText')) {
             continue;
         }
         if ('clear' == $child->getAttribute('class')) {
             $x = $clip[0];
             $y = $clip[1] + floor($height / 2) + 2;
             continue;
         }
         $x += $this->drawThumbnailZone($thumbnail, $child, array($x, $y, $clip[2], $height), $background, $gridcolumn, $node->isSameNode($node->parentNode->lastChild));
     }
     return $x + $width - 2;
 }
Example #5
0
 private function nodeIndex(DOMNode $n)
 {
     $cnt = 0;
     foreach ($n->parentNode->childNodes as $n2) {
         if ($n->isSameNode($n2)) {
             return $cnt;
         }
         $cnt++;
     }
     return false;
 }