diff --git a/app/Entities/Tools/ExportFormatter.php b/app/Entities/Tools/ExportFormatter.php index f993d332d..5617db692 100644 --- a/app/Entities/Tools/ExportFormatter.php +++ b/app/Entities/Tools/ExportFormatter.php @@ -147,10 +147,31 @@ class ExportFormatter { $html = $this->containHtml($html); $html = $this->replaceIframesWithLinks($html); + $html = $this->openDetailElements($html); return $this->pdfGenerator->fromHtml($html); } + /** + * Within the given HTML content, Open any detail blocks + */ + protected function openDetailElements(string $html): string + { + libxml_use_internal_errors(true); + + $doc = new DOMDocument(); + $doc->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8')); + $xPath = new DOMXPath($doc); + + $details = $xPath->query('//details'); + /** @var DOMElement $detail */ + foreach ($details as $detail) { + $detail->setAttribute('open', 'open'); + } + + return $doc->saveHTML(); + } + /** * Within the given HTML content, replace any iframe elements * with anchor links within paragraph blocks. diff --git a/tests/Entity/ExportTest.php b/tests/Entity/ExportTest.php index fc6b74088..445cd24f3 100644 --- a/tests/Entity/ExportTest.php +++ b/tests/Entity/ExportTest.php @@ -309,6 +309,24 @@ class ExportTest extends TestCase $this->assertStringContainsString('
https://www.youtube.com/embed/ShqUjt33uOs
', $pdfHtml); } + public function test_page_pdf_export_opens_details_blocks() + { + $page = Page::query()->first()->forceFill([ + 'html' => 'Content!