Separated revision preview and diff & fixed chosen diff html

Closes #8
This commit is contained in:
Dan Brown
2016-09-29 10:10:46 +01:00
parent fff5bbcee4
commit f15cc5bdfa
5 changed files with 51 additions and 30 deletions

View File

@ -336,13 +336,36 @@ class PageController extends Controller
$book = $this->bookRepo->getBySlug($bookSlug); $book = $this->bookRepo->getBySlug($bookSlug);
$page = $this->pageRepo->getBySlug($pageSlug, $book->id); $page = $this->pageRepo->getBySlug($pageSlug, $book->id);
$revision = $this->pageRepo->getRevisionById($revisionId); $revision = $this->pageRepo->getRevisionById($revisionId);
$next = $revision->getNext() ?: $page;
$diff = (new Htmldiff)->diff($revision->html, $next->html);
$page->fill($revision->toArray()); $page->fill($revision->toArray());
$this->setPageTitle('Page Revision For ' . $page->getShortName()); $this->setPageTitle('Page Revision For ' . $page->getShortName());
return view('pages/revision', [
'page' => $page,
'book' => $book,
]);
}
/**
* Shows the changes of a single revision
* @param string $bookSlug
* @param string $pageSlug
* @param int $revisionId
* @return \Illuminate\View\View
*/
public function showRevisionChanges($bookSlug, $pageSlug, $revisionId)
{
$book = $this->bookRepo->getBySlug($bookSlug);
$page = $this->pageRepo->getBySlug($pageSlug, $book->id);
$revision = $this->pageRepo->getRevisionById($revisionId);
$prev = $revision->getPrevious();
$prevContent = ($prev === null) ? '' : $prev->html;
$diff = (new Htmldiff)->diff($prevContent, $revision->html);
$page->fill($revision->toArray());
$this->setPageTitle('Page Revision For ' . $page->getShortName());
return view('pages/revision', [ return view('pages/revision', [
'page' => $page, 'page' => $page,
'book' => $book, 'book' => $book,

View File

@ -25,32 +25,26 @@ class PageRevision extends Model
/** /**
* Get the url for this revision. * Get the url for this revision.
* @param null|string $path
* @return string * @return string
*/ */
public function getUrl() public function getUrl($path = null)
{ {
return $this->page->getUrl() . '/revisions/' . $this->id; $url = $this->page->getUrl() . '/revisions/' . $this->id;
if ($path) return $url . '/' . trim($path, '/');
return $url;
} }
/** /**
* Get previous revision * Get the previous revision for the same page if existing
* @return \BookStack\PageRevision * @return \BookStack\PageRevision|null
*/ */
public function getPrevious() public function getPrevious()
{ {
if ($id = PageRevision::where('id', '<', $this->id)->max('id')) { if ($id = static::where('page_id', '=', $this->page_id)->where('id', '<', $this->id)->max('id')) {
return PageRevision::find($id); return static::find($id);
} }
return null;
} }
/**
* Get next revision
* @return \BookStack\PageRevision
*/
public function getNext()
{
if ($id = PageRevision::where('id', '>', $this->id)->min('id')) {
return PageRevision::find($id);
}
}
} }

View File

@ -548,7 +548,7 @@ class PageRepo extends EntityRepo
/** /**
* Gets a single revision via it's id. * Gets a single revision via it's id.
* @param $id * @param $id
* @return mixed * @return PageRevision
*/ */
public function getRevisionById($id) public function getRevisionById($id)
{ {

View File

@ -32,11 +32,11 @@
<table class="table"> <table class="table">
<tr> <tr>
<th width="25%">Name</th> <th width="23%">Name</th>
<th colspan="2" width="10%">Created By</th> <th colspan="2" width="8%">Created By</th>
<th width="15%">Revision Date</th> <th width="15%">Revision Date</th>
<th width="25%">Changelog</th> <th width="25%">Changelog</th>
<th width="15%">Actions</th> <th width="20%">Actions</th>
</tr> </tr>
@foreach($page->revisions as $index => $revision) @foreach($page->revisions as $index => $revision)
<tr> <tr>
@ -49,15 +49,18 @@
<td> @if($revision->createdBy) {{ $revision->createdBy->name }} @else Deleted User @endif</td> <td> @if($revision->createdBy) {{ $revision->createdBy->name }} @else Deleted User @endif</td>
<td><small>{{ $revision->created_at->format('jS F, Y H:i:s') }} <br> ({{ $revision->created_at->diffForHumans() }})</small></td> <td><small>{{ $revision->created_at->format('jS F, Y H:i:s') }} <br> ({{ $revision->created_at->diffForHumans() }})</small></td>
<td>{{ $revision->summary }}</td> <td>{{ $revision->summary }}</td>
@if ($index !== 0) <td>
<td> <a href="{{ $revision->getUrl('changes') }}" target="_blank">Changes</a>
<span class="text-muted">&nbsp;|&nbsp;</span>
@if ($index === 0)
<a target="_blank" href="{{ $page->getUrl() }}"><i>Current Version</i></a>
@else
<a href="{{ $revision->getUrl() }}" target="_blank">Preview</a> <a href="{{ $revision->getUrl() }}" target="_blank">Preview</a>
<span class="text-muted">&nbsp;|&nbsp;</span> <span class="text-muted">&nbsp;|&nbsp;</span>
<a href="{{ $revision->getUrl() }}/restore">Restore</a> <a href="{{ $revision->getUrl('restore') }}" target="_blank">Restore</a>
</td> @endif
@else </td>
<td><a target="_blank" href="{{ $page->getUrl() }}"><i>Current Version</i></a></td>
@endif
</tr> </tr>
@endforeach @endforeach
</table> </table>

View File

@ -47,6 +47,7 @@ Route::group(['middleware' => 'auth'], function () {
// Revisions // Revisions
Route::get('/{bookSlug}/page/{pageSlug}/revisions', 'PageController@showRevisions'); Route::get('/{bookSlug}/page/{pageSlug}/revisions', 'PageController@showRevisions');
Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}', 'PageController@showRevision'); Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}', 'PageController@showRevision');
Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}/changes', 'PageController@showRevisionChanges');
Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}/restore', 'PageController@restoreRevision'); Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}/restore', 'PageController@restoreRevision');
// Chapters // Chapters