X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/71c93c88787fe3522d1f0f49d445eb24e3a2789e..refs/pull/5676/head:/app/Entities/Tools/PageIncludeContent.php diff --git a/app/Entities/Tools/PageIncludeContent.php b/app/Entities/Tools/PageIncludeContent.php index 2e173859d..7c4f943c8 100644 --- a/app/Entities/Tools/PageIncludeContent.php +++ b/app/Entities/Tools/PageIncludeContent.php @@ -10,47 +10,53 @@ class PageIncludeContent protected static array $topLevelTags = ['table', 'ul', 'ol', 'pre']; /** - * @var DOMNode[] + * @param DOMNode[] $contents + * @param bool $isInline */ - protected array $contents = []; - - protected bool $isTopLevel = false; - public function __construct( - string $html, - PageIncludeTag $tag, + protected array $contents, + protected bool $isInline, ) { - $this->parseHtml($html, $tag); } - protected function parseHtml(string $html, PageIncludeTag $tag): void + public static function fromHtmlAndTag(string $html, PageIncludeTag $tag): self { if (empty($html)) { - return; + return new self([], true); } $doc = new HtmlDocument($html); $sectionId = $tag->getSectionId(); if (!$sectionId) { - $this->contents = [...$doc->getBodyChildren()]; - $this->isTopLevel = true; - return; + $contents = [...$doc->getBodyChildren()]; + return new self($contents, false); } $section = $doc->getElementById($sectionId); if (!$section) { - return; + return new self([], true); } $isTopLevel = in_array(strtolower($section->nodeName), static::$topLevelTags); - $this->isTopLevel = $isTopLevel; - $this->contents = $isTopLevel ? [$section] : [...$section->childNodes]; + $contents = $isTopLevel ? [$section] : [...$section->childNodes]; + return new self($contents, !$isTopLevel); + } + + public static function fromInlineHtml(string $html): self + { + if (empty($html)) { + return new self([], true); + } + + $doc = new HtmlDocument($html); + + return new self([...$doc->getBodyChildren()], true); } public function isInline(): bool { - return !$this->isTopLevel; + return $this->isInline; } public function isEmpty(): bool @@ -65,4 +71,15 @@ class PageIncludeContent { return $this->contents; } + + public function toHtml(): string + { + $html = ''; + + foreach ($this->contents as $content) { + $html .= $content->ownerDocument->saveHTML($content); + } + + return $html; + } }