<?php

require_once "Node.php";

class Element extends Node
{
   public $_name = null;
   public function __construct($name=null, $value=null)
   {
      parent::__construct($value);
      $this->_name = $name;
   }
   public function __get($name)
   {
      $value = $this->search($name);
      if (!$value)
      {
         $value = null;
      }
      return $value;
   }
   public function adopt(
      $new, $name=null, $unique=True, $offset=0, $additional_unique_field="")
   {
      if (!is_object($new))
      {
         $new = new Element($name, $new);
      }
      elseif ($name)
      {
         $new->_name = $name;
      }
      parent::adopt($new, $unique, $offset, $additional_unique_field);
   }
   protected function inspect_token($token, $match_by_class=False)
   {
      if ($match_by_class == True)
      {
         return $this instanceof $token ? $this : null;
      }
      return $token == $this->_name ? $this : null;
   }
   public function convert_to_raw_string()
   {
      $message = "($this->_name";
      $message .= ($this->_value || $this->_next) ? " " : "";
      $message .= (is_object($this->_value)) ?
         $this->_value->convert_to_raw_string() : "";
      $message .= (!is_object($this->_value)) ? "$this->_value)" : ")";
      $message .= ($this->_next) ? $this->_next->convert_to_raw_string() : "";

      return $message;
   }
   public function convert_to_tabbed_string($level=0)
   {
      $string = str_repeat("   ", $level);
      $string .= "$this->_name";
      $string .= (is_object($this->_value)) ? ":\n" : ": $this->_value\n";

      $string .= (is_object($this->_value)) ?
         $this->_value->convert_to_tabbed_string($level+1) : "";
      $string .= ($this->_next) ?
         $this->_next->convert_to_tabbed_string($level) : "";

      return $string;
   }
}
<?php
namespace structures\html;

class Link extends Element
{
   public function __construct($rel=null, $href=null)
   {
      parent::__construct("link", null, null, false);
      $this->add_attribute("rel", $rel);
      $this->add_attribute("href", $href);
   }
}
<?php
namespace structures\html;

class Title extends Element
{
   public function __construct($title)
   {
      parent::__construct("title");
      $this->title = $title;
   }
   protected function build_content()
   {
      return $this->title;
   }
}
<?php
namespace structures\html;

class Tr extends Element
{
   private $cells = array();
   public function __construct($id=null, $class=null)
   {
      parent::__construct("tr", $id, $class);
   }
   protected function build_content()
   {
      $markup = "";
      foreach ($this->cells as $cell)
      {
         $markup .= $cell;
      }
      return $markup;
   }
   public function insert_cell($cell, $id=null, $class=null)
   {
      if (!($cell instanceof Td))
      {
         $cell = new Td($cell, $id, $class);
      }
      $this->cells[] = $cell;
   }
}
<?php
namespace structures\html;

class Div extends Element
{
   public function __construct($content=null, $id=null, $class=null)
   {
      parent::__construct("div", $id, $class);
      $this->content = $content;
   }
   protected function build_content()
   {
      return $this->content;
   }
}
<?php
namespace structures\html;

class Element
{
   private $attributes = array();
   private $style_assignments = array();

   public function __construct($name, $id=null, $class=null, $close=true)
   {
      $this->name = $name;
      $this->add_attribute("id", $id);
      $this->add_attribute("class", $class);
      $this->close = $close;
   }

   protected function add_attribute($name, $value)
   {
      $this->attributes[$name] = $value;
   }

   protected function add_style($name, $value)
   {
      $this->style_assignments[$name] = $value;
   }

   public function get_style($name)
   {
      return $this->style_assignments[$name];
   }

   protected function get_default($value, $name)
   {
      if (!is_null($value))
      {
         return $value;
      }
      if (array_key_exists($name, $GLOBALS))
      {
         return $GLOBALS[$name];
      }
   }

   public function __toString()
   {
      return $this->build_html();
   }

   protected function build_html()
   {
      $markup = $this->build_opening_tag();
      $markup .= $this->build_content();
      if ($this->close === true)
      {
         $markup .= $this->build_closing_tag();
      }
      return $markup;
   }

   private function build_opening_tag()
   {
      $tag = "<" . $this->name;
      $tag .= $this->build_attributes();
      $tag .= ">";
      return $tag;
   }

   protected function build_attributes()
   {
      $attributes = "";
      foreach ($this->attributes as $name => $value)
      {
         if (!is_null($value) && $value !== false)
         {
            $attributes .= " $name";
            if ($value !== true)
            {
               $attributes .= "=\"$value\"";
            }
         }
      }
      $attributes .= $this->build_style_attribute();
      return $attributes;
   }

   private function build_style_attribute()
   {
      $attribute = "";
      $assignments = $this->style_assignments;
      if (!empty($assignments))
      {
         $attribute .= " style=\"";
         foreach ($assignments as $name => $value)
         {
            $attribute .= "$name: $value;";
         }
         $attribute .= "\"";
      }
      return $attribute;
   }

   protected function build_content()
   {
      return null;
   }

   private function build_closing_tag()
   {
      return "</" . $this->name . ">";
   }

   protected function get_attribute($name)
   {
      return $this->attributes[$name];
   }

   protected function break_line()
   {
      return "\n";
   }

   protected function get_relative_path($path)
   {
      $root = dirname($_SERVER["SCRIPT_FILENAME"]) . "/";
      return str_replace($root, "", $path);
   }
}
54.237.183.249
54.237.183.249
54.237.183.249
 
June 5, 2016