]> BookStack Code Mirror - bookstack/commitdiff
Cleaned book-show and page sidebar by hiding inactive chapter contents
authorDan Brown <redacted>
Sun, 29 Nov 2015 18:06:55 +0000 (18:06 +0000)
committerDan Brown <redacted>
Sun, 29 Nov 2015 18:06:55 +0000 (18:06 +0000)
app/Entity.php
resources/assets/sass/_lists.scss
resources/views/chapters/list-item.blade.php
resources/views/pages/sidebar-tree-list.blade.php

index 68c77359200491da9896319f683149438ec2664a..977b02e77c8aa06b5710877cde41a96b6b3fb37c 100644 (file)
@@ -36,6 +36,32 @@ abstract class Entity extends Model
         return [get_class($this), $this->id] === [get_class($entity), $entity->id];
     }
 
+    /**
+     * Checks if an entity matches or contains another given entity.
+     * @param Entity $entity
+     * @return bool
+     */
+    public function matchesOrContains(Entity $entity)
+    {
+        $matches = [get_class($this), $this->id] === [get_class($entity), $entity->id];
+
+        if ($matches) return true;
+
+        if ($entity->isA('chapter') && $this->isA('book')) {
+            return $entity->book_id === $this->id;
+        }
+
+        if ($entity->isA('page') && $this->isA('book')) {
+            return $entity->book_id === $this->id;
+        }
+
+        if ($entity->isA('page') && $this->isA('chapter')) {
+            return $entity->chapter_id === $this->id;
+        }
+
+        return false;
+    }
+
     /**
      * Gets the activity objects for this entity.
      * @return \Illuminate\Database\Eloquent\Relations\MorphMany
@@ -106,7 +132,7 @@ abstract class Entity extends Model
             $search = $search->with('book');
         }
 
-        if(static::isA('page')) {
+        if (static::isA('page')) {
             $search = $search->with('chapter');
         }
 
index c2bfb38e39d1956a94b9bf694a1c6b70ff888d77..9d429c39e7f04efbcde15eaccc80979a13cc3232 100644 (file)
@@ -6,7 +6,7 @@
     color: $color-chapter;
   }
   .inset-list {
-    display: block;
+    display: none;
     overflow: hidden;
     // padding-left: $-m;
     margin-bottom: $-l;
@@ -45,7 +45,7 @@
   margin: 0 0 $-l 0;
   transition: all ease-in-out 180ms;
   user-select: none;
-  i {
+  i.zmdi-caret-right {
     transition: all ease-in-out 180ms;
     transform: rotate(0deg);
     transform-origin: 25% 50%;
@@ -53,7 +53,7 @@
   &.open {
     margin-bottom: 0;
   }
-  &.open i {
+  &.open i.zmdi-caret-right {
     transform: rotate(90deg);
   }
 }
       background-color: rgba($color-chapter, 0.12);
     }
   }
+  .chapter-toggle {
+    padding-left: $-s;
+  }
   .list-item-chapter {
     border-left: 5px solid $color-chapter;
     margin: 10px 10px;
       background-color: rgba($color-page, 0.1);
     }
   }
+  .sub-menu {
+    display: none;
+  }
+  .sub-menu.open {
+    display: block;
+  }
 }
 
 // Sortable Lists
index f4673c5977f8c56d203527bfe543081f913fabec..91f5ce68847bacb586d56b8d2d7832ab7a94c359 100644 (file)
@@ -11,7 +11,7 @@
     @endif
 
     @if(count($chapter->pages) > 0 && !isset($hidePages))
-        <p class="text-muted chapter-toggle open"><i class="zmdi zmdi-caret-right"></i> {{ count($chapter->pages) }} Pages</p>
+        <p class="text-muted chapter-toggle"><i class="zmdi zmdi-caret-right"></i> <i class="zmdi zmdi-file-text"></i> <span>{{ count($chapter->pages) }} Pages</span></p>
         <div class="inset-list">
             @foreach($chapter->pages as $page)
                 <h4><a href="{{$page->getUrl()}}"><i class="zmdi zmdi-file-text"></i>{{$page->name}}</a></h4>
index 76d3a76141c4cb8b69b7b06d596845b317614a84..e6c3dfcc66c413c244b6ba8f490b5dea20da2300 100644 (file)
@@ -3,14 +3,19 @@
     <h6 class="text-muted">Book Navigation</h6>
     <ul class="sidebar-page-list menu">
         <li class="book-header"><a href="{{$book->getUrl()}}" class="book {{ $current->matches($book)? 'selected' : '' }}"><i class="zmdi zmdi-book"></i>{{$book->name}}</a></li>
+
+
         @foreach($sidebarTree as $bookChild)
-            <li class="list-item-{{ $bookChild->getName() }}">
+            <li class="list-item-{{ $bookChild->getName() }} {{ $bookChild->getName() }}">
                 <a href="{{$bookChild->getUrl()}}" class="{{ $bookChild->getName() }} {{ $current->matches($bookChild)? 'selected' : '' }}">
                     @if($bookChild->isA('chapter'))<i class="zmdi zmdi-collection-bookmark"></i>@else <i class="zmdi zmdi-file-text"></i>@endif{{ $bookChild->name }}
                 </a>
 
                 @if($bookChild->isA('chapter') && count($bookChild->pages) > 0)
-                    <ul class="menu">
+                    <p class="text-muted chapter-toggle @if($bookChild->matchesOrContains($current)) open @endif">
+                        <i class="zmdi zmdi-caret-right"></i> <i class="zmdi zmdi-file-text"></i> <span>{{ count($bookChild->pages) }} Pages</span>
+                    </p>
+                    <ul class="menu sub-menu inset-list @if($bookChild->matchesOrContains($current)) open @endif">
                         @foreach($bookChild->pages as $childPage)
                             <li class="list-item-page">
                                 <a href="{{$childPage->getUrl()}}" class="page {{ $current->matches($childPage)? 'selected' : '' }}">
                         @endforeach
                     </ul>
                 @endif
+
+
             </li>
         @endforeach
+
+
     </ul>
 </div>