public function toDOMElement($document = null)
{
if (!$document) {
$document = new \DOMDocument();
}
// Builds and appends head to the HTML document
$html = $document->createElement('html');
if ($this->isRTLEnabled) {
$html->setAttribute('dir', 'rtl');
}
$head = $document->createElement('head');
$html->appendChild($head);
$link = $document->createElement('link');
$link->setAttribute('rel', 'canonical');
$link->setAttribute('href', $this->canonicalURL);
$head->appendChild($link);
$charset = $document->createElement('meta');
$charset->setAttribute('charset', $this->charset);
$head->appendChild($charset);
$this->addMetaProperty('op:markup_version', $this->markupVersion);
if ($this->header && count($this->header->getAds()) > 0) {
$this->addMetaProperty('fb:use_automatic_ad_placement', $this->isAutomaticAdPlaced ? 'true' : 'false');
}
if ($this->style) {
$this->addMetaProperty('fb:article_style', $this->style);
}
// Adds all meta properties
foreach ($this->metaProperties as $property_name => $property_content) {
$head->appendChild($this->createMetaElement($document, $property_name, $property_content));
}
// Build and append body and article tags to the HTML document
$body = $document->createElement('body');
$article = $document->createElement('article');
$body->appendChild($article);
$html->appendChild($body);
if ($this->header && $this->header->isValid()) {
$article->appendChild($this->header->toDOMElement($document));
}
if ($this->children) {
foreach ($this->children as $child) {
if (Type::is($child, TextContainer::getClassName())) {
if (count($child->getTextChildren()) === 0) {
continue;
} elseif (count($child->getTextChildren()) === 1) {
if (Type::is($child->getTextChildren()[0], Type::STRING) && trim($child->getTextChildren()[0]) === '') {
continue;
}
}
}
$article->appendChild($child->toDOMElement($document));
}
if ($this->footer && $this->footer->isValid()) {
$article->appendChild($this->footer->toDOMElement($document));
}
} else {
$article->appendChild($document->createTextNode(''));
}
return $html;
}