Dan Brown

Separated revision preview and diff & fixed chosen diff html

Closes #8
...@@ -336,9 +336,6 @@ class PageController extends Controller ...@@ -336,9 +336,6 @@ class PageController extends Controller
336 $book = $this->bookRepo->getBySlug($bookSlug); 336 $book = $this->bookRepo->getBySlug($bookSlug);
337 $page = $this->pageRepo->getBySlug($pageSlug, $book->id); 337 $page = $this->pageRepo->getBySlug($pageSlug, $book->id);
338 $revision = $this->pageRepo->getRevisionById($revisionId); 338 $revision = $this->pageRepo->getRevisionById($revisionId);
339 -
340 - $next = $revision->getNext() ?: $page;
341 - $diff = (new Htmldiff)->diff($revision->html, $next->html);
342 339
343 $page->fill($revision->toArray()); 340 $page->fill($revision->toArray());
344 $this->setPageTitle('Page Revision For ' . $page->getShortName()); 341 $this->setPageTitle('Page Revision For ' . $page->getShortName());
...@@ -346,6 +343,32 @@ class PageController extends Controller ...@@ -346,6 +343,32 @@ class PageController extends Controller
346 return view('pages/revision', [ 343 return view('pages/revision', [
347 'page' => $page, 344 'page' => $page,
348 'book' => $book, 345 'book' => $book,
346 + ]);
347 + }
348 +
349 + /**
350 + * Shows the changes of a single revision
351 + * @param string $bookSlug
352 + * @param string $pageSlug
353 + * @param int $revisionId
354 + * @return \Illuminate\View\View
355 + */
356 + public function showRevisionChanges($bookSlug, $pageSlug, $revisionId)
357 + {
358 + $book = $this->bookRepo->getBySlug($bookSlug);
359 + $page = $this->pageRepo->getBySlug($pageSlug, $book->id);
360 + $revision = $this->pageRepo->getRevisionById($revisionId);
361 +
362 + $prev = $revision->getPrevious();
363 + $prevContent = ($prev === null) ? '' : $prev->html;
364 + $diff = (new Htmldiff)->diff($prevContent, $revision->html);
365 +
366 + $page->fill($revision->toArray());
367 + $this->setPageTitle('Page Revision For ' . $page->getShortName());
368 +
369 + return view('pages/revision', [
370 + 'page' => $page,
371 + 'book' => $book,
349 'diff' => $diff, 372 'diff' => $diff,
350 ]); 373 ]);
351 } 374 }
......
...@@ -25,32 +25,26 @@ class PageRevision extends Model ...@@ -25,32 +25,26 @@ class PageRevision extends Model
25 25
26 /** 26 /**
27 * Get the url for this revision. 27 * Get the url for this revision.
28 + * @param null|string $path
28 * @return string 29 * @return string
29 */ 30 */
30 - public function getUrl() 31 + public function getUrl($path = null)
31 { 32 {
32 - return $this->page->getUrl() . '/revisions/' . $this->id; 33 + $url = $this->page->getUrl() . '/revisions/' . $this->id;
34 + if ($path) return $url . '/' . trim($path, '/');
35 + return $url;
33 } 36 }
34 37
35 /** 38 /**
36 - * Get previous revision 39 + * Get the previous revision for the same page if existing
37 - * @return \BookStack\PageRevision 40 + * @return \BookStack\PageRevision|null
38 */ 41 */
39 public function getPrevious() 42 public function getPrevious()
40 { 43 {
41 - if ($id = PageRevision::where('id', '<', $this->id)->max('id')) { 44 + if ($id = static::where('page_id', '=', $this->page_id)->where('id', '<', $this->id)->max('id')) {
42 - return PageRevision::find($id); 45 + return static::find($id);
43 } 46 }
47 + return null;
44 } 48 }
45 49
46 - /**
47 - * Get next revision
48 - * @return \BookStack\PageRevision
49 - */
50 - public function getNext()
51 - {
52 - if ($id = PageRevision::where('id', '>', $this->id)->min('id')) {
53 - return PageRevision::find($id);
54 - }
55 - }
56 } 50 }
......
...@@ -548,7 +548,7 @@ class PageRepo extends EntityRepo ...@@ -548,7 +548,7 @@ class PageRepo extends EntityRepo
548 /** 548 /**
549 * Gets a single revision via it's id. 549 * Gets a single revision via it's id.
550 * @param $id 550 * @param $id
551 - * @return mixed 551 + * @return PageRevision
552 */ 552 */
553 public function getRevisionById($id) 553 public function getRevisionById($id)
554 { 554 {
......
...@@ -32,11 +32,11 @@ ...@@ -32,11 +32,11 @@
32 32
33 <table class="table"> 33 <table class="table">
34 <tr> 34 <tr>
35 - <th width="25%">Name</th> 35 + <th width="23%">Name</th>
36 - <th colspan="2" width="10%">Created By</th> 36 + <th colspan="2" width="8%">Created By</th>
37 <th width="15%">Revision Date</th> 37 <th width="15%">Revision Date</th>
38 <th width="25%">Changelog</th> 38 <th width="25%">Changelog</th>
39 - <th width="15%">Actions</th> 39 + <th width="20%">Actions</th>
40 </tr> 40 </tr>
41 @foreach($page->revisions as $index => $revision) 41 @foreach($page->revisions as $index => $revision)
42 <tr> 42 <tr>
...@@ -49,15 +49,18 @@ ...@@ -49,15 +49,18 @@
49 <td> @if($revision->createdBy) {{ $revision->createdBy->name }} @else Deleted User @endif</td> 49 <td> @if($revision->createdBy) {{ $revision->createdBy->name }} @else Deleted User @endif</td>
50 <td><small>{{ $revision->created_at->format('jS F, Y H:i:s') }} <br> ({{ $revision->created_at->diffForHumans() }})</small></td> 50 <td><small>{{ $revision->created_at->format('jS F, Y H:i:s') }} <br> ({{ $revision->created_at->diffForHumans() }})</small></td>
51 <td>{{ $revision->summary }}</td> 51 <td>{{ $revision->summary }}</td>
52 - @if ($index !== 0) 52 + <td>
53 - <td> 53 + <a href="{{ $revision->getUrl('changes') }}" target="_blank">Changes</a>
54 + <span class="text-muted">&nbsp;|&nbsp;</span>
55 +
56 + @if ($index === 0)
57 + <a target="_blank" href="{{ $page->getUrl() }}"><i>Current Version</i></a>
58 + @else
54 <a href="{{ $revision->getUrl() }}" target="_blank">Preview</a> 59 <a href="{{ $revision->getUrl() }}" target="_blank">Preview</a>
55 <span class="text-muted">&nbsp;|&nbsp;</span> 60 <span class="text-muted">&nbsp;|&nbsp;</span>
56 - <a href="{{ $revision->getUrl() }}/restore">Restore</a> 61 + <a href="{{ $revision->getUrl('restore') }}" target="_blank">Restore</a>
57 - </td> 62 + @endif
58 - @else 63 + </td>
59 - <td><a target="_blank" href="{{ $page->getUrl() }}"><i>Current Version</i></a></td>
60 - @endif
61 </tr> 64 </tr>
62 @endforeach 65 @endforeach
63 </table> 66 </table>
......
...@@ -47,6 +47,7 @@ Route::group(['middleware' => 'auth'], function () { ...@@ -47,6 +47,7 @@ Route::group(['middleware' => 'auth'], function () {
47 // Revisions 47 // Revisions
48 Route::get('/{bookSlug}/page/{pageSlug}/revisions', 'PageController@showRevisions'); 48 Route::get('/{bookSlug}/page/{pageSlug}/revisions', 'PageController@showRevisions');
49 Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}', 'PageController@showRevision'); 49 Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}', 'PageController@showRevision');
50 + Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}/changes', 'PageController@showRevisionChanges');
50 Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}/restore', 'PageController@restoreRevision'); 51 Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}/restore', 'PageController@restoreRevision');
51 52
52 // Chapters 53 // Chapters
......