where('status', 'publish')->first(); if (is_null($post)) { return abort(404); } $content = Markdown::convert($post->body)->getContent(); //dd($content); $content = $this->injectBootstrapClasses($content); $content = $this->injectTableOfContents($content); $content = $this->injectFeaturedImage($post, $content); return view('front.single_post', compact('post', 'content')); } private function injectBootstrapClasses($content) { $crawler = new Crawler($content); $crawler->filter('h1')->each(function (Crawler $node) { $node->getNode(0)->setAttribute('class', trim($node->attr('class').' display-6 fw-bolder mt-3 mb-4')); }); $crawler->filter('h2')->each(function (Crawler $node) { $node->getNode(0)->setAttribute('class', trim($node->attr('class').'h4 mb-3')); }); $crawler->filter('h3')->each(function (Crawler $node) { $node->getNode(0)->setAttribute('class', trim($node->attr('class').'h6 mb-2')); }); $crawler->filter('p')->each(function (Crawler $pNode) { $precedingHeaders = $pNode->previousAll()->filter('h2'); // If there are no preceding
if (! $precedingHeaders->count()) { $existingClasses = $pNode->attr('class'); $newClasses = trim($existingClasses.' mt-2 mb-4'); $pNode->getNode(0)->setAttribute('class', $newClasses); return; } $precedingHeader = $precedingHeaders->first(); if (trim($precedingHeader->text()) !== 'FAQs') { $existingClasses = $pNode->attr('class'); $newClasses = trim($existingClasses.' mt-2 mb-4'); $pNode->getNode(0)->setAttribute('class', $newClasses); } if (strpos($pNode->text(), 'Q:') === 0) { $currentClasses = $pNode->attr('class'); $newClasses = trim($currentClasses.' fw-bold'); $pNode->getNode(0)->setAttribute('class', $newClasses); } }); $crawler->filter('ul')->each(function (Crawler $node) { $node->getNode(0)->setAttribute('class', trim($node->attr('class').'py-2')); }); $crawler->filter('ol')->each(function (Crawler $node) { $node->getNode(0)->setAttribute('class', trim($node->attr('class').'py-2')); }); // Convert the modified DOM back to string $modifiedContent = ''; foreach ($crawler as $domElement) { $modifiedContent .= $domElement->ownerDocument->saveHTML($domElement); } return $modifiedContent; } private function injectTableOfContents($html) { $crawler = new Crawler($html); // Create the Table of Contents $toc = '