Merge branch 'prev-next-button' of https://github.com/shubhamosmosys/BookStack into shubhamosmosys-prev-next-button

This commit is contained in:
Dan Brown 2021-05-26 22:13:19 +01:00
commit 7ca66c5d5e
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
6 changed files with 90 additions and 1 deletions

View File

@ -138,4 +138,13 @@ class Page extends BookChild
$refreshed->html = (new PageContent($refreshed))->render(); $refreshed->html = (new PageContent($refreshed))->render();
return $refreshed; return $refreshed;
} }
/**
* Get the parent chapter ID.
*/
public function getParentChapter()
{
$chapterId = $this->chapter()->visible()
->get('id');
return $chapterId;
}
} }

View File

@ -468,4 +468,10 @@ class PageRepo
->where('page_id', '=', $page->id) ->where('page_id', '=', $page->id)
->orderBy('created_at', 'desc'); ->orderBy('created_at', 'desc');
} }
/**
* Get page details by chapter ID.
*/
public function getPageByChapterID(int $id){
return Page::visible()->where('chapter_id', '=', $id)->get(['id','slug']);
}
} }

View File

@ -142,6 +142,39 @@ class PageController extends Controller
$page->load(['comments.createdBy']); $page->load(['comments.createdBy']);
} }
$chapterId = $page->getParentChapter();
$allPageSlugs = $this->pageRepo->getPageByChapterID($chapterId[0]->id);
$pos = 0;
foreach ($allPageSlugs as $slug){
if($pageSlug === $slug->slug){
$currPagePos = $pos;
}
$pos++;
$pageUrl = $this->pageRepo->getBySlug($bookSlug, $slug->slug);
$urlLink[] = $pageUrl->getUrl();
}
for($i=0; $i <= $currPagePos; $i++){
$nextCount = $i+1;
$prevCount = $i-1;
$prevPage = '#';
$nextPage = '#';
if($nextCount < count($urlLink)){
$nextPage = $urlLink[$nextCount];
}
if($currPagePos == $i && $currPagePos != 0){
$prevPage = $urlLink[$prevCount];
}
}
$disablePrev = "";
$disableNxt = "";
if($prevPage == "#"){
$disablePrev = "disabled";
}
if($nextPage == "#"){
$disableNxt = "disabled";
}
View::incrementFor($page); View::incrementFor($page);
$this->setPageTitle($page->getShortName()); $this->setPageTitle($page->getShortName());
return view('pages.show', [ return view('pages.show', [
@ -150,7 +183,11 @@ class PageController extends Controller
'current' => $page, 'current' => $page,
'sidebarTree' => $sidebarTree, 'sidebarTree' => $sidebarTree,
'commentsEnabled' => $commentsEnabled, 'commentsEnabled' => $commentsEnabled,
'pageNav' => $pageNav 'pageNav' => $pageNav,
'prevPage' => $prevPage,
'nextPage' => $nextPage,
'disablePrev' => $disablePrev,
'disableNxt' => $disableNxt
]); ]);
} }

View File

@ -62,6 +62,9 @@
} }
@include smaller-than($m) { @include smaller-than($m) {
.grid.third.prev-next:not(.no-break) {
grid-template-columns: 1fr 1fr 1fr;
}
.grid.third:not(.no-break) { .grid.third:not(.no-break) {
grid-template-columns: 1fr 1fr; grid-template-columns: 1fr 1fr;
} }
@ -81,12 +84,24 @@
.grid.right-focus.reverse-collapse > *:nth-child(1) { .grid.right-focus.reverse-collapse > *:nth-child(1) {
order: 1; order: 1;
} }
.grid.third:not(.no-break) .text-m-left {
margin-left: 20%;
}
.grid.third:not(.no-break) .text-m-right {
margin-left: 45%;
}
} }
@include smaller-than($s) { @include smaller-than($s) {
.grid.third:not(.no-break) { .grid.third:not(.no-break) {
grid-template-columns: 1fr; grid-template-columns: 1fr;
} }
.grid.third:not(.no-break) .text-m-left {
margin-left: 18%;
}
.grid.third:not(.no-break) .text-m-right {
margin-left: 20%;
}
} }
@include smaller-than($xs) { @include smaller-than($xs) {
@ -367,3 +382,7 @@ body.flexbox {
margin-inline-end: 0; margin-inline-end: 0;
} }
} }
.prev-next-btn {
height: 50px;
}

View File

@ -112,6 +112,12 @@ a {
} }
} }
a.disabled {
pointer-events: none;
cursor: default;
opacity: 0.6;
}
.blended-links a { .blended-links a {
color: inherit; color: inherit;
svg { svg {

View File

@ -17,6 +17,18 @@
</div> </div>
</main> </main>
<div class="prev-next-btn">
<div class="grid third no-row-gap prev-next">
<div class="text-m-left">
<a class="{{ $disablePrev }}" href="{{ $prevPage }}">Previous Page</a>
</div>
<div></div>
<div class="text-m-right">
<a class="{{ $disableNxt }}" href="{{ $nextPage }}">Next Page</a>
</div>
</div>
</div>
@if ($commentsEnabled) @if ($commentsEnabled)
<div class="container small p-none comments-container mb-l print-hidden"> <div class="container small p-none comments-container mb-l print-hidden">
@include('comments.comments', ['page' => $page]) @include('comments.comments', ['page' => $page])