]> BookStack Code Mirror - bookstack/commitdiff
Added recently created & updated page listings
authorDan Brown <redacted>
Sat, 20 Feb 2016 18:51:01 +0000 (18:51 +0000)
committerDan Brown <redacted>
Sat, 20 Feb 2016 18:51:01 +0000 (18:51 +0000)
Closes #46.

12 files changed:
app/Http/Controllers/PageController.php
app/Http/routes.php
app/Repos/PageRepo.php
resources/assets/sass/_header.scss
resources/assets/sass/_lists.scss
resources/assets/sass/_text.scss
resources/views/home.blade.php
resources/views/pages/detailed-listing.blade.php [new file with mode: 0644]
resources/views/pages/list-item.blade.php
resources/views/partials/entity-list.blade.php
resources/views/search/all.blade.php
tests/EntityTest.php

index b4ab9682b7308d55141b2df8f3303b495b38e913..2dbdb81e787c7889e0d04008929d9d81caebf643 100644 (file)
@@ -278,4 +278,30 @@ class PageController extends Controller
         ]);
     }
 
+    /**
+     * Show a listing of recently created pages
+     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+     */
+    public function showRecentlyCreated()
+    {
+        $pages = $this->pageRepo->getRecentlyCreatedPaginated(20);
+        return view('pages/detailed-listing', [
+            'title' => 'Recently Created Pages',
+            'pages' => $pages
+        ]);
+    }
+
+    /**
+     * Show a listing of recently created pages
+     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+     */
+    public function showRecentlyUpdated()
+    {
+        $pages = $this->pageRepo->getRecentlyUpdatedPaginated(20);
+        return view('pages/detailed-listing', [
+            'title' => 'Recently Updated Pages',
+            'pages' => $pages
+        ]);
+    }
+
 }
index 02b2fa2178544239c303b37b5c470efcb8742574..f753ad9150db7a52f8f560265a049c1b9ca07d35 100644 (file)
@@ -3,6 +3,11 @@
 // Authenticated routes...
 Route::group(['middleware' => 'auth'], function () {
 
+    Route::group(['prefix' => 'pages'], function() {
+        Route::get('/recently-created', 'PageController@showRecentlyCreated');
+        Route::get('/recently-updated', 'PageController@showRecentlyUpdated');
+    });
+
     Route::group(['prefix' => 'books'], function () {
 
         // Books
index 05052432efd577fcd5d6d95a2c33675f9e974109..25b869bc380c23261e373d0a58e12e30ddbc41b8 100644 (file)
@@ -358,5 +358,22 @@ class PageRepo
         $page->delete();
     }
 
+    /**
+     * Get the latest pages added to the system.
+     * @param $count
+     */
+    public function getRecentlyCreatedPaginated($count = 20)
+    {
+        return $this->page->orderBy('created_at', 'desc')->paginate($count);
+    }
+
+    /**
+     * Get the latest pages added to the system.
+     * @param $count
+     */
+    public function getRecentlyUpdatedPaginated($count = 20)
+    {
+        return $this->page->orderBy('updated_at', 'desc')->paginate($count);
+    }
 
 }
\ No newline at end of file
index 2f06532c0a3d7bbd8ce6cee24914a222b7773dd0..1edfc0037ea399b6f77696272ed88afb0f0b14ff 100644 (file)
@@ -139,54 +139,6 @@ form.search-box {
   height: 43px;
 }
 
-.dropdown-container {
-  display: inline-block;
-  vertical-align: top;
-  position: relative;
-}
-
-.dropdown-container ul {
-  display: none;
-  position: absolute;
-  z-index: 999;
-  top: 0;
-  list-style: none;
-  right: 0;
-  margin: $-m 0;
-  background-color: #FFFFFF;
-  box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.1);
-  border-radius: 1px;
-  border: 1px solid #EEE;
-  min-width: 180px;
-  padding: $-xs 0;
-  color: #555;
-  text-align: left !important;
-  &.wide {
-    min-width: 220px;
-  }
-  .text-muted {
-    color: #999;
-  }
-  a {
-    display: block;
-    padding: $-xs $-m;
-    color: #555;
-    &:hover {
-      text-decoration: none;
-      background-color: #EEE;
-    }
-    i {
-      margin-right: $-m;
-      padding-right: 0;
-      display: inline;
-      width: 22px;
-    }
-  }
-  li.border-bottom {
-    border-bottom: 1px solid #DDD;
-  }
-}
-
 .breadcrumbs span.sep {
   color: #aaa;
   padding: 0 $-xs;
index d3f68ca2e60c0427201b92afb7d364729308301f..f0bd3b1eaffdca3a4ce6b73c8c480ba2484975e0 100644 (file)
@@ -285,17 +285,30 @@ ul.pagination {
   }
 }
 
-.entity-list.compact {
-  font-size: 0.6em;
-  > div {
+.entity-list {
+  >div {
     padding: $-m 0;
   }
-  h3, a {
-    line-height: 1.2;
-  }
   h3 {
     margin: 0;
   }
+  p {
+    margin: $-xs 0 0 0;
+  }
+  hr {
+    margin: 0;
+  }
+  .text-small.text-muted {
+    color: #AAA;
+    font-size: 0.75em;
+    margin-top: $-xs;
+  }
+}
+.entity-list.compact {
+  font-size: 0.6em;
+  h3, a {
+    line-height: 1.2;
+  }
   p {
     display: none;
     font-size: $fs-m * 0.8;
@@ -305,4 +318,52 @@ ul.pagination {
   hr {
     margin: 0;
   }
-}
\ No newline at end of file
+}
+
+.dropdown-container {
+  display: inline-block;
+  vertical-align: top;
+  position: relative;
+}
+
+.dropdown-container ul {
+  display: none;
+  position: absolute;
+  z-index: 999;
+  top: 0;
+  list-style: none;
+  right: 0;
+  margin: $-m 0;
+  background-color: #FFFFFF;
+  box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.1);
+  border-radius: 1px;
+  border: 1px solid #EEE;
+  min-width: 180px;
+  padding: $-xs 0;
+  color: #555;
+  text-align: left !important;
+  &.wide {
+    min-width: 220px;
+  }
+  .text-muted {
+    color: #999;
+  }
+  a {
+    display: block;
+    padding: $-xs $-m;
+    color: #555;
+    &:hover {
+      text-decoration: none;
+      background-color: #EEE;
+    }
+    i {
+      margin-right: $-m;
+      padding-right: 0;
+      display: inline;
+      width: 22px;
+    }
+  }
+  li.border-bottom {
+    border-bottom: 1px solid #DDD;
+  }
+}
index 4f14837a0256ac5308971644c5f79d0542ed2e1d..ec42fe080ebb2e3c0d7bc6eeefac66d7fe22477d 100644 (file)
@@ -254,10 +254,15 @@ ol {
 .text-bigger {
   font-size: 1.1em;
 }
+
 .text-large {
   font-size: 1.6666em;
 }
 
+.no-color {
+  color: inherit;
+}
+
 /**
  * Grouping
  */
index daed0e975dd3820ce987074dcdc8d0a849706fac..8aaae1e1bd4c118bf385ab23219ef69e7b31ecd7 100644 (file)
                 @else
                     <h3>Recent Books</h3>
                 @endif
-                @include('partials/entity-list', ['entities' => $recents, 'size' => 'compact'])
+                @include('partials/entity-list', ['entities' => $recents, 'style' => 'compact'])
             </div>
 
             <div class="col-sm-4">
-                <h3>Recently Created Pages</h3>
-                @include('partials/entity-list', ['entities' => $recentlyCreatedPages, 'size' => 'compact'])
-                <h3>Recently Updated Pages</h3>
-                @include('partials/entity-list', ['entities' => $recentlyCreatedPages, 'size' => 'compact'])
+                <h3><a class="no-color" href="/pages/recently-created">Recently Created Pages</a></h3>
+                @include('partials/entity-list', ['entities' => $recentlyCreatedPages, 'style' => 'compact'])
+
+                <h3><a class="no-color" href="/pages/recently-updated">Recently Updated Pages</a></h3>
+                @include('partials/entity-list', ['entities' => $recentlyCreatedPages, 'style' => 'compact'])
             </div>
 
             <div class="col-sm-4" id="recent-activity">
diff --git a/resources/views/pages/detailed-listing.blade.php b/resources/views/pages/detailed-listing.blade.php
new file mode 100644 (file)
index 0000000..85b77fa
--- /dev/null
@@ -0,0 +1,18 @@
+@extends('base')
+
+@section('content')
+
+    <div class="container">
+        <div class="row">
+
+            <div class="col-sm-7">
+                <h1>{{ $title }}</h1>
+                @include('partials/entity-list', ['entities' => $pages, 'style' => 'detailed'])
+                {!! $pages->links() !!}
+            </div>
+
+            <div class="col-sm-4 col-sm-offset-1"></div>
+
+        </div>
+    </div>
+@stop
\ No newline at end of file
index 37fe9e66a4c6dfe1f702c40da6d6ab785d69bd43..5271680ab04e029b626e90bf1931eeabcbd88bb8 100644 (file)
@@ -3,18 +3,29 @@
         <a href="{{ $page->getUrl() }}" class="text-page"><i class="zmdi zmdi-file-text"></i>{{ $page->name }}</a>
     </h3>
 
-    @if(isset($showMeta) && $showMeta)
-        <div class="meta">
-            <span class="text-book"><i class="zmdi zmdi-book"></i> {{ $page->book->name }}</span>
-            @if($page->chapter)
-                <span class="text-chapter"><i class="zmdi zmdi-collection-bookmark"></i> {{ $page->chapter->name }}</span>
-            @endif
-         </div>
-    @endif
-
     @if(isset($page->searchSnippet))
         <p class="text-muted">{!! $page->searchSnippet !!}</p>
     @else
         <p class="text-muted">{{ $page->getExcerpt() }}</p>
     @endif
+
+    @if(isset($style) && $style === 'detailed')
+        <div class="row meta text-muted text-small">
+            <div class="col-md-4">
+                Created {{$page->created_at->diffForHumans()}} @if($page->createdBy)by {{$page->createdBy->name}}@endif <br>
+                Last updated {{ $page->updated_at->diffForHumans() }} @if($page->updatedBy)by {{$page->updatedBy->name}} @endif
+            </div>
+            <div class="col-md-8">
+                <a class="text-book" href="{{ $page->book->getUrl() }}"><i class="zmdi zmdi-book"></i>{{ $page->book->getExcerpt(30) }}</a>
+                <br>
+                @if($page->chapter)
+                    <a class="text-chapter" href="{{ $page->chapter->getUrl() }}"><i class="zmdi zmdi-collection-bookmark"></i>{{ $page->chapter->getExcerpt(30) }}</a>
+                @else
+                    <i class="zmdi zmdi-collection-bookmark"></i> Page is not in a chapter
+                @endif
+            </div>
+        </div>
+    @endif
+
+
 </div>
\ No newline at end of file
index 729f346e3004f8225e4b1939174d74794332dae2..a52e5f01380e2f99df9e250d251991aef1b672ef 100644 (file)
@@ -1,5 +1,5 @@
 
-<div class="entity-list @if(isset($size)){{ $size }}@endif">
+<div class="entity-list @if(isset($style)){{ $style }}@endif" ng-non-bindable>
     @if(count($entities) > 0)
         @foreach($entities as $index => $entity)
             @if($entity->isA('page'))
index e0920dacc3fa0ac68cc76355f6503ad5acf4d5fa..e944ca03a4ca94a5359e3ff7d8ace0a99aa98d0d 100644 (file)
@@ -13,7 +13,7 @@
                 <div class="page-list">
                     @if(count($pages) > 0)
                         @foreach($pages as $page)
-                            @include('pages/list-item', ['page' => $page, 'showMeta' => true])
+                            @include('pages/list-item', ['page' => $page, 'style' => 'detailed'])
                             <hr>
                         @endforeach
                     @else
index 5bfedb53561952cde7d362e1d03e044e70cb926c..0c0a1dee419c0e4026b105eac7d4f6dd905eda66 100644 (file)
@@ -250,5 +250,23 @@ class EntityTest extends TestCase
             ->click('Revisions')->seeStatusCode(200);
     }
 
+    public function test_recently_created_pages_view()
+    {
+        $user = $this->getNewUser();
+        $content = $this->createEntityChainBelongingToUser($user);
+
+        $this->asAdmin()->visit('/pages/recently-created')
+            ->seeInNthElement('.entity-list .page', 0, $content['page']->name);
+    }
+
+    public function test_recently_updated_pages_view()
+    {
+        $user = $this->getNewUser();
+        $content = $this->createEntityChainBelongingToUser($user);
+
+        $this->asAdmin()->visit('/pages/recently-updated')
+            ->seeInNthElement('.entity-list .page', 0, $content['page']->name);
+    }
+
 
 }