Showing
3 changed files
with
46 additions
and
3 deletions
| ... | @@ -156,15 +156,19 @@ class PageController extends Controller | ... | @@ -156,15 +156,19 @@ class PageController extends Controller |
| 156 | return redirect($page->getUrl()); | 156 | return redirect($page->getUrl()); |
| 157 | } | 157 | } |
| 158 | 158 | ||
| 159 | + | ||
| 159 | $this->checkOwnablePermission('page-view', $page); | 160 | $this->checkOwnablePermission('page-view', $page); |
| 160 | 161 | ||
| 162 | + $pageContent = $this->entityRepo->renderPage($page); | ||
| 161 | $sidebarTree = $this->entityRepo->getBookChildren($page->book); | 163 | $sidebarTree = $this->entityRepo->getBookChildren($page->book); |
| 162 | $pageNav = $this->entityRepo->getPageNav($page); | 164 | $pageNav = $this->entityRepo->getPageNav($page); |
| 163 | 165 | ||
| 164 | Views::add($page); | 166 | Views::add($page); |
| 165 | $this->setPageTitle($page->getShortName()); | 167 | $this->setPageTitle($page->getShortName()); |
| 166 | - return view('pages/show', ['page' => $page, 'book' => $page->book, | 168 | + return view('pages/show', [ |
| 167 | - 'current' => $page, 'sidebarTree' => $sidebarTree, 'pageNav' => $pageNav]); | 169 | + 'page' => $page,'book' => $page->book, |
| 170 | + 'current' => $page, 'sidebarTree' => $sidebarTree, | ||
| 171 | + 'pageNav' => $pageNav, 'pageContent' => $pageContent]); | ||
| 168 | } | 172 | } |
| 169 | 173 | ||
| 170 | /** | 174 | /** | ... | ... |
| ... | @@ -13,6 +13,7 @@ use Carbon\Carbon; | ... | @@ -13,6 +13,7 @@ use Carbon\Carbon; |
| 13 | use DOMDocument; | 13 | use DOMDocument; |
| 14 | use DOMXPath; | 14 | use DOMXPath; |
| 15 | use Illuminate\Support\Collection; | 15 | use Illuminate\Support\Collection; |
| 16 | +use Symfony\Component\DomCrawler\Crawler; | ||
| 16 | 17 | ||
| 17 | class EntityRepo | 18 | class EntityRepo |
| 18 | { | 19 | { |
| ... | @@ -796,6 +797,44 @@ class EntityRepo | ... | @@ -796,6 +797,44 @@ class EntityRepo |
| 796 | return $html; | 797 | return $html; |
| 797 | } | 798 | } |
| 798 | 799 | ||
| 800 | + | ||
| 801 | + /** | ||
| 802 | + * Render the page for viewing, Parsing and performing features such as page transclusion. | ||
| 803 | + * @param Page $page | ||
| 804 | + * @return mixed|string | ||
| 805 | + */ | ||
| 806 | + public function renderPage(Page $page) | ||
| 807 | + { | ||
| 808 | + libxml_use_internal_errors(true); | ||
| 809 | + $doc = new DOMDocument(); | ||
| 810 | + $doc->loadHTML(mb_convert_encoding('<body>'.$page->html.'</body>', 'HTML-ENTITIES', 'UTF-8')); | ||
| 811 | + $xpath = new DOMXpath($doc); | ||
| 812 | + | ||
| 813 | + $bsElems = $xpath->query('body/div[@bs-embed-page]'); | ||
| 814 | + if (is_null($bsElems)) return $page->html; | ||
| 815 | + foreach ($bsElems as $bsElem) { | ||
| 816 | + $pageId = intval($bsElem->getAttribute('bs-embed-page')); | ||
| 817 | + $embeddedPage = $this->getById('page', $pageId); | ||
| 818 | + if ($embeddedPage !== null) { | ||
| 819 | + $innerPage = $doc->createDocumentFragment(); | ||
| 820 | + $innerPage->appendXML($embeddedPage->html); | ||
| 821 | + // Empty div then append in child content | ||
| 822 | + foreach ($bsElem->childNodes as $child) { | ||
| 823 | + $bsElem->removeChild($child); | ||
| 824 | + } | ||
| 825 | + $bsElem->appendChild($innerPage); | ||
| 826 | + } | ||
| 827 | + } | ||
| 828 | + | ||
| 829 | + $body = $doc->getElementsByTagName('body')->item(0); | ||
| 830 | + $html = ''; | ||
| 831 | + foreach ($body->childNodes as $node) { | ||
| 832 | + $html .= $doc->saveHTML($node); | ||
| 833 | + } | ||
| 834 | + | ||
| 835 | + return $html; | ||
| 836 | + } | ||
| 837 | + | ||
| 799 | /** | 838 | /** |
| 800 | * Get a new draft page instance. | 839 | * Get a new draft page instance. |
| 801 | * @param Book $book | 840 | * @param Book $book | ... | ... |
| ... | @@ -7,6 +7,6 @@ | ... | @@ -7,6 +7,6 @@ |
| 7 | @if (isset($diff) && $diff) | 7 | @if (isset($diff) && $diff) |
| 8 | {!! $diff !!} | 8 | {!! $diff !!} |
| 9 | @else | 9 | @else |
| 10 | - {!! $page->html !!} | 10 | + {!! isset($pageContent) ? $pageContent : $page->html !!} |
| 11 | @endif | 11 | @endif |
| 12 | </div> | 12 | </div> |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or sign in to post a comment