public function testRender() { $element = new HtmlElement(); $element->setContent('cont1'); $html = $element->render(); $this->assertEquals('cont1', $html); }
public function testRender3() { $element1 = new BoolBlockElement(); $element1->setContent(true); $element2 = new HtmlElement(); $element2->setContent('cont2'); $element1->addChild($element2); $html = $element1->render(); $this->assertEquals('cont2', $html); }
public function testRenderChildren2() { $element1 = new Element(); $element2 = new HtmlElement(); $element3 = new HtmlElement(); $element1->setChildren(array($element2, $element3)); $element2->setContent('el2'); $element3->setContent('el3'); $this->assertEquals('el2el3', $element1->renderChildren($element1->getChildren())); }
private function parseElements($rawhtml = '', $parentElement = null, $level = 1) { #fwrite(STDOUT, __CLASS__.'->'.__FUNCTION__.': level='.$level.PHP_EOL); if ($level >= 100) { throw new RuntimeException(__FUNCTION__ . ': Maximum level of 100 reached.', 2); } if (!$rawhtml && $level == 1) { $rawhtml = $this->template; } if (!$parentElement) { $this->elementsId++; $parentElement = $this->rootElement = new Element(); $parentElement->setId($this->elementsId); } $fuse = 0; while ($rawhtml) { $fuse++; if ($fuse >= 1000) { throw new RuntimeException(__FUNCTION__ . ': Maximum level of 1000 reached.', 3); } #fwrite(STDOUT, str_repeat(' ', 4 * ($level)).'parse: "'.$rawhtml.'"'.PHP_EOL); $content = ''; $element = null; // Find opening bracket. $pos = strpos($rawhtml, '{'); if ($pos === false) { #fwrite(STDOUT, str_repeat(' ', 4 * ($level)).'no { found'.PHP_EOL); $this->elementsId++; $element = new HtmlElement(); $element->setId($this->elementsId); $element->setContent($rawhtml); $parentElement->addChild($element); $rawhtml = ''; } else { #fwrite(STDOUT, str_repeat(' ', 4 * ($level)).'found {: '.$pos.PHP_EOL); if ($pos >= 1) { $content = substr($rawhtml, 0, $pos); #fwrite(STDOUT, str_repeat(' ', 4 * ($level + 1)).'content: "'.$content.'"'.PHP_EOL); } $this->elementsId++; $element = new HtmlElement(); $element->setId($this->elementsId); $element->setContent($content); $parentElement->addChild($element); $rawhtml = substr($rawhtml, $pos + 1); // Find close bracket for the opening one. $pos = strpos($rawhtml, '}'); if ($pos === false) { $content .= '{'; #fwrite(STDOUT, str_repeat(' ', 4 * ($level + 1)).'no } found: "'.$content.'"'.PHP_EOL); $element->setContent($content); } else { $nameFull = substr($rawhtml, 0, $pos); $nameFullLen = strlen($nameFull); $rawhtml = substr($rawhtml, $pos + 1); #fwrite(STDOUT, str_repeat(' ', 4 * ($level + 1)).'found }: '.$pos.', "'.$nameFull.'" '.$nameFullLen.PHP_EOL); if (strtolower(substr($nameFull, 0, 6)) == 'block:') { // Process a block element. $nameFullPos = strpos($nameFull, ':'); $name = substr($nameFull, $nameFullPos + 1); $type = strtolower(substr($nameFull, 0, $nameFullPos)); // Search close tag for the opened tag. $offset = 0; $newoffset = 0; $testhtml = ''; $temphtml = $rawhtml; do { $temphtml = substr($temphtml, $offset); $pos = strpos($temphtml, '{/' . $nameFull . '}'); if ($pos === false) { throw new RuntimeException(__FUNCTION__ . ': Missing closing tag "{/' . $nameFull . '}".', 1); } else { $testhtml = substr($temphtml, 0, $pos); $newoffset = $offset + $pos + 2 + $nameFullLen + 1; $offset = $newoffset; } } while (strpos($testhtml, '{' . $nameFull . '}') !== false); $subhtml = substr($rawhtml, 0, $offset - 2 - $nameFullLen - 1); $rawhtml = substr($rawhtml, $offset); $element = null; if ($type == 'block') { if (strtolower(substr($name, 0, 5)) == 'ifnot') { $name = substr($name, 5); $element = new IfNotBlockElement(); } elseif (strtolower(substr($name, 0, 2)) == 'if') { $name = substr($name, 2); $element = new IfBlockElement(); } elseif ($name == 'Posts') { $element = new PostsBlockElement(); } elseif ($name == 'Text') { $element = new TextBlockElement(); } elseif ($name == 'Link') { $element = new LinkBlockElement(); } elseif ($name == 'Photo') { $element = new PhotoBlockElement(); } elseif ($name == 'Photos') { $element = new PhotosBlockElement(); } elseif ($name == 'Photoset') { $element = new PhotosetBlockElement(); } elseif ($name == 'IndexPage') { $element = new IndexPageBlockElement(); } elseif ($name == 'PermalinkPage') { $element = new PermalinkPageBlockElement(); } elseif ($name == 'Title') { $element = new TitleBlockElement(); } elseif ($name == 'PostTitle') { $element = new PostTitleBlockElement(); } elseif ($name == 'Description') { $element = new DescriptionBlockElement(); } elseif ($name == 'AskEnabled') { $element = new AskEnabledBlockElement(); } elseif ($name == 'HasPages') { $element = new HasPagesBlockElement(); } elseif ($name == 'Pages') { $element = new PagesBlockElement(); } elseif ($name == 'Caption') { $element = new CaptionBlockElement(); } elseif ($name == 'Quote') { $element = new QuoteBlockElement(); } elseif ($name == 'Chat') { $element = new ChatBlockElement(); } elseif ($name == 'Audio') { $element = new AudioBlockElement(); } elseif ($name == 'Video') { $element = new VideoBlockElement(); } elseif ($name == 'Answer') { $element = new AnswerBlockElement(); } elseif ($name == 'Source') { $element = new SourceBlockElement(); } elseif ($name == 'Lines') { $element = new LinesBlockElement(); } elseif ($name == 'Label') { $element = new LabelBlockElement(); } elseif ($name == 'Date') { $element = new DateBlockElement(); } elseif ($name == 'AudioEmbed') { $element = new AudioEmbedBlockElement(); } elseif ($name == 'NoteCount') { $element = new NoteCountBlockElement(); } elseif ($name == 'HasTags') { $element = new HasTagsBlockElement(); } elseif ($name == 'PostNotes') { $element = new PostNotesBlockElement(); } elseif ($name == 'Pagination') { $element = new PaginationBlockElement(); } elseif ($name == 'PreviousPage') { $element = new PreviousPageBlockElement(); } elseif ($name == 'NextPage') { $element = new NextPageBlockElement(); } elseif ($name == 'Tags') { $element = new TagsBlockElement(); } elseif ($name == 'LinkURL') { $element = new LinkUrlBlockElement(); } else { $msg = __FUNCTION__ . ': Unknown block "' . $name . '". Path: ' . $parentElement->getPath(); throw new RuntimeException($msg, 3); } } if ($element) { $this->elementsId++; $element->setId($this->elementsId); $element->setName($name); $parentElement->addChild($element); $this->parseElements($subhtml, $element, $level + 1); } /*else{ throw new RuntimeException(__FUNCTION__.': Can not create element.', 4); }*/ } else { // Process non-block element. #fwrite(STDOUT, str_repeat(' ', 4 * ($level + 1)).'else'.PHP_EOL); if (in_array($nameFull, static::$variableNames)) { #fwrite(STDOUT, str_repeat(' ', 4 * ($level + 1)).'ok'.PHP_EOL); $this->elementsId++; $element = new VariableElement(); $element->setId($this->elementsId); $element->setName($nameFull); $parentElement->addChild($element); } elseif (substr($nameFull, 0, 5) == 'text:') { #fwrite(STDOUT, str_repeat(' ', 4 * ($level + 1)).'ok text'.PHP_EOL); $this->elementsId++; $element = new TextVariableElement(); $element->setId($this->elementsId); $element->setName($nameFull); $parentElement->addChild($element); } elseif (substr($nameFull, 0, 5) == 'lang:') { #fwrite(STDOUT, str_repeat(' ', 4 * ($level + 1)).'ok lang'.PHP_EOL); $this->elementsId++; $element = new LangVariableElement(); $element->setId($this->elementsId); $element->setName($nameFull); $parentElement->addChild($element); } else { // Unknown block. Set the original content. $content = '{' . $nameFull . '}'; #fwrite(STDOUT, str_repeat(' ', 4 * ($level + 1)).'content: "'.$nameFull.'", "'.$content.'"'.PHP_EOL); $this->elementsId++; $element = new HtmlElement(); $element->setId($this->elementsId); $element->setName($nameFull); $element->setContent($content); $parentElement->addChild($element); } #$rawhtml = substr($rawhtml, $pos + 1); } } } #usleep(300000); } #if($level == 1){ ve($this->rootElement); } }