コード例 #1
0
ファイル: Modifier.php プロジェクト: chomenko/cemvin
 /**
  * Decorates HtmlElement element.
  * @return void
  */
 public function decorate(Texy $texy, HtmlElement $el)
 {
     $elAttrs =& $el->attrs;
     // tag & attibutes
     $tmp = $texy->allowedTags;
     // speed-up
     if (!$this->attrs) {
     } elseif ($tmp === $texy::ALL) {
         $elAttrs = $this->attrs;
         $el->validateAttrs($texy->dtd);
     } elseif (is_array($tmp) && isset($tmp[$el->getName()])) {
         $tmp = $tmp[$el->getName()];
         if ($tmp === $texy::ALL) {
             $elAttrs = $this->attrs;
         } elseif (is_array($tmp) && count($tmp)) {
             $tmp = array_flip($tmp);
             foreach ($this->attrs as $key => $value) {
                 if (isset($tmp[$key])) {
                     $el->attrs[$key] = $value;
                 }
             }
         }
         $el->validateAttrs($texy->dtd);
     }
     // title
     if ($this->title !== NULL) {
         $elAttrs['title'] = $texy->typographyModule->postLine($this->title);
     }
     // classes & ID
     if ($this->classes || $this->id !== NULL) {
         $tmp = $texy->_classes;
         // speed-up
         if ($tmp === $texy::ALL) {
             foreach ($this->classes as $value => $foo) {
                 $elAttrs['class'][] = $value;
             }
             $elAttrs['id'] = $this->id;
         } elseif (is_array($tmp)) {
             foreach ($this->classes as $value => $foo) {
                 if (isset($tmp[$value])) {
                     $elAttrs['class'][] = $value;
                 }
             }
             if (isset($tmp['#' . $this->id])) {
                 $elAttrs['id'] = $this->id;
             }
         }
     }
     // styles
     if ($this->styles) {
         $tmp = $texy->_styles;
         // speed-up
         if ($tmp === $texy::ALL) {
             foreach ($this->styles as $prop => $value) {
                 $elAttrs['style'][$prop] = $value;
             }
         } elseif (is_array($tmp)) {
             foreach ($this->styles as $prop => $value) {
                 if (isset($tmp[$prop])) {
                     $elAttrs['style'][$prop] = $value;
                 }
             }
         }
     }
     // horizontal align
     if ($this->hAlign) {
         if (empty($texy->alignClasses[$this->hAlign])) {
             $elAttrs['style']['text-align'] = $this->hAlign;
         } else {
             $elAttrs['class'][] = $texy->alignClasses[$this->hAlign];
         }
     }
     // vertical align
     if ($this->vAlign) {
         if (empty($texy->alignClasses[$this->vAlign])) {
             $elAttrs['style']['vertical-align'] = $this->vAlign;
         } else {
             $elAttrs['class'][] = $texy->alignClasses[$this->vAlign];
         }
     }
     return $el;
 }