elementClass('IMuHTMLElement'); } public function output() { header('Content-type: text/html'); print $this->saveHTML(); } public function newDocumentFragment($fragment, $parent) { /* Load the fragment by creating a separate HTML document and ** extracting the nodes from that. ** ** The fragment is embedded in a UTF-8 compliant HTML document. ** This is as described in various user comments at ** http://www.php.net/manual/en/domdocument.loadhtml.php */ $html = << $fragment EOF; $dom = new DOMDocument(); if (! $dom->loadHTML($html)) { IMuTrace(3, 'newDocumentFragment: loadHTML failed'); return; } $list = $dom->getElementsByTagName('body'); $body = $list->item(0); $list = $body->childNodes; $length = $list->length; for ($i = 0; $i < $length; $i++) { $node = $list->item($i); $node = $parent->ownerDocument->importNode($node, true); $parent->appendChild($node); } } /* Convenience */ /* head elements */ public function css($name, $media = null) { if (! preg_match('/\.css$/', $name)) $name .= '.css'; $node = $this->element('link', false); $node->attr('rel', 'stylesheet'); $node->attr('type', 'text/css'); $node->attr('href', $name); if ($media !== null) $node->attr('media', $media); return $node; } public function js($name) { if (! preg_match('/\.js$/', $name)) $name .= '.js'; $node = $this->element('script', false); $node->attr('type', 'text/javascript'); $node->attr('src', $name); return $node; } public function title($text) { $node = $this->element('title', false); $node->text($text); return $node; } } class IMuHTMLElement extends IMuDocumentElement { public function addClass($value) { $class = $this->getClassArray(); $index = array_search($value, $class); if ($index === false) { $class[] = $value; $this->attr('class', implode(' ', $class)); } return $this->attr('class'); } public function css($name, $value = null) { $styles = $this->attr('style'); if ($styles == '') $styles = array(); else $styles = preg_split('/;\s*/', $styles); $entries = array(); foreach ($styles as $style) { if (! preg_match('/^([^:]*):(.*)$/', $style, $m)) continue; $styleName = $m[1]; $styleValue = $m[2]; $styleName = preg_replace('/^\s+/', '', $styleName); $styleName = preg_replace('/\s+$/', '', $styleName); $styleValue = preg_replace('/^\s+/', '', $styleValue); $styleValue = preg_replace('/\s+$/', '', $styleValue); $entries[] = array($styleName, $styleValue); } $index = -1; for ($i = 0; $i < count($entries); $i++) { if ($entries[$i][0] == $name) { $index = $i; break; } } if ($value === null) { if ($index < 0) return ''; return $entries[$index][1]; } if ($index < 0) $entries[] = array($name, $value); else $entries[$index][1] = $value; $style = ''; for ($i = 0; $i < count($entries); $i++) { if ($i > 0) $style .= ' '; $style .= $entries[$i][0] . ': ' . $entries[$i][1] . ';'; } $this->attr('style', $style); } public function hasClass($value) { $class = $this->getClassArray(); return array_search($value, $class) !== false; } public function id($value = null) { if ($value !== null) $this->attr('id', $value); return $this->attr('id'); } public function removeClass($value) { $class = $this->getClassArray(); $index = array_search($value, $class); if ($index !== false) { array_splice($class, $index, 1); $this->attr('class', implode(' ', $class)); } return $this->attr('class'); } protected function getClassArray() { $class = $this->attr('class'); if ($class == '') return array(); return preg_split('/\s+/', $class); } } ?>