Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Зуев Егор
/
wiki.dev
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
Authored by
Dan Brown
2017-01-16 21:24:48 +0000
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Commit
e4e3b25c22e1be9f33d96b6d77d86b46b0c467d2
e4e3b25c
1 parent
d8c5f722
Started page transclusion system
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
46 additions
and
3 deletions
app/Http/Controllers/PageController.php
app/Repos/EntityRepo.php
resources/views/pages/page-display.blade.php
app/Http/Controllers/PageController.php
View file @
e4e3b25
...
...
@@ -156,15 +156,19 @@ class PageController extends Controller
return
redirect
(
$page
->
getUrl
());
}
$this
->
checkOwnablePermission
(
'page-view'
,
$page
);
$pageContent
=
$this
->
entityRepo
->
renderPage
(
$page
);
$sidebarTree
=
$this
->
entityRepo
->
getBookChildren
(
$page
->
book
);
$pageNav
=
$this
->
entityRepo
->
getPageNav
(
$page
);
Views
::
add
(
$page
);
$this
->
setPageTitle
(
$page
->
getShortName
());
return
view
(
'pages/show'
,
[
'page'
=>
$page
,
'book'
=>
$page
->
book
,
'current'
=>
$page
,
'sidebarTree'
=>
$sidebarTree
,
'pageNav'
=>
$pageNav
]);
return
view
(
'pages/show'
,
[
'page'
=>
$page
,
'book'
=>
$page
->
book
,
'current'
=>
$page
,
'sidebarTree'
=>
$sidebarTree
,
'pageNav'
=>
$pageNav
,
'pageContent'
=>
$pageContent
]);
}
/**
...
...
app/Repos/EntityRepo.php
View file @
e4e3b25
...
...
@@ -13,6 +13,7 @@ use Carbon\Carbon;
use
DOMDocument
;
use
DOMXPath
;
use
Illuminate\Support\Collection
;
use
Symfony\Component\DomCrawler\Crawler
;
class
EntityRepo
{
...
...
@@ -796,6 +797,44 @@ class EntityRepo
return
$html
;
}
/**
* Render the page for viewing, Parsing and performing features such as page transclusion.
* @param Page $page
* @return mixed|string
*/
public
function
renderPage
(
Page
$page
)
{
libxml_use_internal_errors
(
true
);
$doc
=
new
DOMDocument
();
$doc
->
loadHTML
(
mb_convert_encoding
(
'<body>'
.
$page
->
html
.
'</body>'
,
'HTML-ENTITIES'
,
'UTF-8'
));
$xpath
=
new
DOMXpath
(
$doc
);
$bsElems
=
$xpath
->
query
(
'body/div[@bs-embed-page]'
);
if
(
is_null
(
$bsElems
))
return
$page
->
html
;
foreach
(
$bsElems
as
$bsElem
)
{
$pageId
=
intval
(
$bsElem
->
getAttribute
(
'bs-embed-page'
));
$embeddedPage
=
$this
->
getById
(
'page'
,
$pageId
);
if
(
$embeddedPage
!==
null
)
{
$innerPage
=
$doc
->
createDocumentFragment
();
$innerPage
->
appendXML
(
$embeddedPage
->
html
);
// Empty div then append in child content
foreach
(
$bsElem
->
childNodes
as
$child
)
{
$bsElem
->
removeChild
(
$child
);
}
$bsElem
->
appendChild
(
$innerPage
);
}
}
$body
=
$doc
->
getElementsByTagName
(
'body'
)
->
item
(
0
);
$html
=
''
;
foreach
(
$body
->
childNodes
as
$node
)
{
$html
.=
$doc
->
saveHTML
(
$node
);
}
return
$html
;
}
/**
* Get a new draft page instance.
* @param Book $book
...
...
resources/views/pages/page-display.blade.php
View file @
e4e3b25
...
...
@@ -7,6 +7,6 @@
@if (isset($diff)
&&
$diff)
{!! $diff !!}
@else
{!! $page->html !!}
{!!
isset($pageContent) ? $pageContent :
$page->html !!}
@endif
</div>
\ No newline at end of file
...
...
Please
register
or
sign in
to post a comment