]> BookStack Code Mirror - bookstack/commitdiff
Added custom meta titles to many pages. Closes #30.
authorDan Brown <redacted>
Sat, 5 Dec 2015 14:41:51 +0000 (14:41 +0000)
committerDan Brown <redacted>
Sat, 5 Dec 2015 14:41:51 +0000 (14:41 +0000)
13 files changed:
app/Entity.php
app/Http/Controllers/BookController.php
app/Http/Controllers/ChapterController.php
app/Http/Controllers/Controller.php
app/Http/Controllers/PageController.php
app/Http/Controllers/SearchController.php
app/Http/Controllers/SettingController.php
app/Http/Controllers/UserController.php
app/Page.php
resources/views/base.blade.php
resources/views/books/sort-box.blade.php
resources/views/pages/show.blade.php
resources/views/pages/sidebar-tree-list.blade.php

index 977b02e77c8aa06b5710877cde41a96b6b3fb37c..db244e01453b9fd7f6f85cfc6e73d952c3671d20 100644 (file)
@@ -97,18 +97,29 @@ abstract class Entity extends Model
      */
     public static function isA($type)
     {
-        return static::getName() === strtolower($type);
+        return static::getClassName() === strtolower($type);
     }
 
     /**
      * Gets the class name.
      * @return string
      */
-    public static function getName()
+    public static function getClassName()
     {
         return strtolower(array_slice(explode('\\', static::class), -1, 1)[0]);
     }
 
+    /**
+     *Gets a limited-length version of the entities name.
+     * @param int $length
+     * @return string
+     */
+    public function getShortName($length = 25)
+    {
+        if(strlen($this->name) <= $length) return $this->name;
+        return substr($this->name, 0, $length-3) . '...';
+    }
+
     /**
      * Perform a full-text search on this entity.
      * @param string[] $fieldsToSearch
index 3cb8237ea8a84e6afb9406834453e50ae5b4d689..a4365d6052645f261f13524ce2c682f4b7804c87 100644 (file)
@@ -44,6 +44,7 @@ class BookController extends Controller
         $books = $this->bookRepo->getAllPaginated(10);
         $recents = $this->signedIn ? $this->bookRepo->getRecentlyViewed(4, 0) : false;
         $popular = $this->bookRepo->getPopular(4, 0);
+        $this->setPageTitle('Books');
         return view('books/index', ['books' => $books, 'recents' => $recents, 'popular' => $popular]);
     }
 
@@ -55,6 +56,7 @@ class BookController extends Controller
     public function create()
     {
         $this->checkPermission('book-create');
+        $this->setPageTitle('Create New Book');
         return view('books/create');
     }
 
@@ -89,8 +91,9 @@ class BookController extends Controller
     public function show($slug)
     {
         $book = $this->bookRepo->getBySlug($slug);
-        Views::add($book);
         $bookChildren = $this->bookRepo->getChildren($book);
+        Views::add($book);
+        $this->setPageTitle($book->getShortName());
         return view('books/show', ['book' => $book, 'current' => $book, 'bookChildren' => $bookChildren]);
     }
 
@@ -104,6 +107,7 @@ class BookController extends Controller
     {
         $this->checkPermission('book-update');
         $book = $this->bookRepo->getBySlug($slug);
+        $this->setPageTitle('Edit Book ' . $book->getShortName());
         return view('books/edit', ['book' => $book, 'current' => $book]);
     }
 
@@ -139,6 +143,7 @@ class BookController extends Controller
     {
         $this->checkPermission('book-delete');
         $book = $this->bookRepo->getBySlug($bookSlug);
+        $this->setPageTitle('Delete Book ' . $book->getShortName());
         return view('books/delete', ['book' => $book, 'current' => $book]);
     }
 
@@ -153,9 +158,16 @@ class BookController extends Controller
         $book = $this->bookRepo->getBySlug($bookSlug);
         $bookChildren = $this->bookRepo->getChildren($book);
         $books = $this->bookRepo->getAll();
+        $this->setPageTitle('Sort Book ' . $book->getShortName());
         return view('books/sort', ['book' => $book, 'current' => $book, 'books' => $books, 'bookChildren' => $bookChildren]);
     }
 
+    /**
+     * Shows the sort box for a single book.
+     * Used via AJAX when loading in extra books to a sort.
+     * @param $bookSlug
+     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+     */
     public function getSortItem($bookSlug)
     {
         $book = $this->bookRepo->getBySlug($bookSlug);
index 1fe1e8b3ef3c63a1c4a952b31965362c5447e826..fc13e8b58b777a24584cd59f01a6020fa74eee95 100644 (file)
@@ -40,6 +40,7 @@ class ChapterController extends Controller
     {
         $this->checkPermission('chapter-create');
         $book = $this->bookRepo->getBySlug($bookSlug);
+        $this->setPageTitle('Create New Chapter');
         return view('chapters/create', ['book' => $book, 'current' => $book]);
     }
 
@@ -79,6 +80,7 @@ class ChapterController extends Controller
         $chapter = $this->chapterRepo->getBySlug($chapterSlug, $book->id);
         $sidebarTree = $this->bookRepo->getChildren($book);
         Views::add($chapter);
+        $this->setPageTitle($chapter->getShortName());
         return view('chapters/show', ['book' => $book, 'chapter' => $chapter, 'current' => $chapter, 'sidebarTree' => $sidebarTree]);
     }
 
@@ -93,6 +95,7 @@ class ChapterController extends Controller
         $this->checkPermission('chapter-update');
         $book = $this->bookRepo->getBySlug($bookSlug);
         $chapter = $this->chapterRepo->getBySlug($chapterSlug, $book->id);
+        $this->setPageTitle('Edit Chapter' . $chapter->getShortName());
         return view('chapters/edit', ['book' => $book, 'chapter' => $chapter, 'current' => $chapter]);
     }
 
@@ -127,6 +130,7 @@ class ChapterController extends Controller
         $this->checkPermission('chapter-delete');
         $book = $this->bookRepo->getBySlug($bookSlug);
         $chapter = $this->chapterRepo->getBySlug($chapterSlug, $book->id);
+        $this->setPageTitle('Delete Chapter' . $chapter->getShortName());
         return view('chapters/delete', ['book' => $book, 'chapter' => $chapter, 'current' => $chapter]);
     }
 
index 4cc865d29237738dce5ee22d4d0b4d8bda65c9cb..5dc79eb02994b76a575d8b413a169c60ffcc6945 100644 (file)
@@ -42,6 +42,15 @@ abstract class Controller extends BaseController
         $this->signedIn = auth()->check();
     }
 
+    /**
+     * Adds the page title into the view.
+     * @param $title
+     */
+    public function setPageTitle($title)
+    {
+        view()->share('pageTitle', $title);
+    }
+
     /**
      * Checks for a permission.
      *
index d9d53178e274629ebfa27981d6be5b05c714712e..2002fbdf0de0ac2eb986a213ec2a4f4f17bcd966 100644 (file)
@@ -46,6 +46,7 @@ class PageController extends Controller
         $this->checkPermission('page-create');
         $book = $this->bookRepo->getBySlug($bookSlug);
         $chapter = $chapterSlug ? $this->chapterRepo->getBySlug($chapterSlug, $book->id) : false;
+        $this->setPageTitle('Create New Page');
         return view('pages/create', ['book' => $book, 'chapter' => $chapter]);
     }
 
@@ -89,6 +90,7 @@ class PageController extends Controller
         $page = $this->pageRepo->getBySlug($pageSlug, $book->id);
         $sidebarTree = $this->bookRepo->getChildren($book);
         Views::add($page);
+        $this->setPageTitle($page->getShortName());
         return view('pages/show', ['page' => $page, 'book' => $book, 'current' => $page, 'sidebarTree' => $sidebarTree]);
     }
 
@@ -104,6 +106,7 @@ class PageController extends Controller
         $this->checkPermission('page-update');
         $book = $this->bookRepo->getBySlug($bookSlug);
         $page = $this->pageRepo->getBySlug($pageSlug, $book->id);
+        $this->setPageTitle('Editing Page ' . $page->getShortName());
         return view('pages/edit', ['page' => $page, 'book' => $book, 'current' => $page]);
     }
 
@@ -148,6 +151,7 @@ class PageController extends Controller
         $this->checkPermission('page-delete');
         $book = $this->bookRepo->getBySlug($bookSlug);
         $page = $this->pageRepo->getBySlug($pageSlug, $book->id);
+        $this->setPageTitle('Delete Page ' . $page->getShortName());
         return view('pages/delete', ['book' => $book, 'page' => $page, 'current' => $page]);
     }
 
@@ -179,6 +183,7 @@ class PageController extends Controller
     {
         $book = $this->bookRepo->getBySlug($bookSlug);
         $page = $this->pageRepo->getBySlug($pageSlug, $book->id);
+        $this->setPageTitle('Revisions For ' . $page->getShortName());
         return view('pages/revisions', ['page' => $page, 'book' => $book, 'current' => $page]);
     }
 
@@ -195,6 +200,7 @@ class PageController extends Controller
         $page = $this->pageRepo->getBySlug($pageSlug, $book->id);
         $revision = $this->pageRepo->getRevisionById($revisionId);
         $page->fill($revision->toArray());
+        $this->setPageTitle('Page Revision For ' . $page->getShortName());
         return view('pages/revision', ['page' => $page, 'book' => $book]);
     }
 
index c6222156dfb4f1b8a137a4215d77074ea60ec873..c9ca1f09fddd05bb3e20d46c66dd34e0731593b1 100644 (file)
@@ -45,6 +45,7 @@ class SearchController extends Controller
         $pages = $this->pageRepo->getBySearch($searchTerm);
         $books = $this->bookRepo->getBySearch($searchTerm);
         $chapters = $this->chapterRepo->getBySearch($searchTerm);
+        $this->setPageTitle('Search For ' . $searchTerm);
         return view('search/all', ['pages' => $pages, 'books' => $books, 'chapters' => $chapters, 'searchTerm' => $searchTerm]);
     }
 
index 3e96de62e318d9bbe408d05c982027f6bc6bde06..bca48807fd9fc25874af05262b324b8ad87c39ab 100644 (file)
@@ -18,6 +18,7 @@ class SettingController extends Controller
     public function index()
     {
         $this->checkPermission('settings-update');
+        $this->setPageTitle('Settings');
         return view('settings/index');
     }
 
index dacb91a7ba9f08971163349264ca21b4ec28d460..ed9deab2da824aecfe8228da5b29822cd8b47622 100644 (file)
@@ -35,6 +35,7 @@ class UserController extends Controller
     public function index()
     {
         $users = $this->user->all();
+        $this->setPageTitle('Users');
         return view('users/index', ['users' => $users]);
     }
 
@@ -90,6 +91,7 @@ class UserController extends Controller
 
         $user = $this->user->findOrFail($id);
         $activeSocialDrivers = $socialAuthService->getActiveDrivers();
+        $this->setPageTitle('User Profile');
         return view('users/edit', ['user' => $user, 'activeSocialDrivers' => $activeSocialDrivers]);
     }
 
@@ -139,6 +141,7 @@ class UserController extends Controller
             return $this->currentUser->id == $id;
         });
         $user = $this->user->findOrFail($id);
+        $this->setPageTitle('Delete User ' . $user->name);
         return view('users/delete', ['user' => $user]);
     }
 
index feedb1eae85812b27d814582cbd4e061de73faf6..bd5f3bafe33eb0b3c3cf295a8502d5b750a9f1b6 100644 (file)
@@ -32,7 +32,6 @@ class Page extends Entity
         return $this->chapter()->count() > 0;
     }
 
-
     public function revisions()
     {
         return $this->hasMany('BookStack\PageRevision')->orderBy('created_at', 'desc');
@@ -40,7 +39,6 @@ class Page extends Entity
 
     public function getUrl()
     {
-        // TODO - Extract this and share with chapters
         $bookSlug = $this->getAttribute('bookSlug') ? $this->getAttribute('bookSlug') : $this->book->slug;
         return '/books/' . $bookSlug . '/page/' . $this->slug;
     }
index be67109c56e0dc16994dd384d18a3aa58e44df02..9c3ddbf91a2c0cdf06c5efb54c4cf45de99dcafd 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html>
 <head>
-    <title>BookStack</title>
+    <title>{{ isset($pageTitle) ? $pageTitle . ' | ' : '' }}{{ Setting::get('app-name', 'BookStack') }}</title>
 
     <!-- Meta -->
     <meta name="viewport" content="width=device-width">
index 768a9f6086ac8f3ab9129beaa2e081e59e262501..2e38f0b0b7121e601dbcb502369e30add0426f3a 100644 (file)
@@ -2,7 +2,7 @@
     <h3 class="text-book"><i class="zmdi zmdi-book"></i>{{ $book->name }}</h3>
     <ul class="sortable-page-list sort-list">
         @foreach($bookChildren as $bookChild)
-            <li data-id="{{$bookChild->id}}" data-type="{{ $bookChild->getName() }}" class="text-{{ $bookChild->getName() }}">
+            <li data-id="{{$bookChild->id}}" data-type="{{ $bookChild->getClassName() }}" class="text-{{ $bookChild->getClassName() }}">
                 <i class="zmdi {{ $bookChild->isA('chapter') ? 'zmdi-collection-bookmark':'zmdi-file-text'}}"></i>{{ $bookChild->name }}
                 @if($bookChild->isA('chapter'))
                     <ul>
index 6fc9ff9883eacec93dd8719e1b948b144cefee78..db5e5168167fbd8de2e0656c2a5999946c72d564 100644 (file)
@@ -7,12 +7,12 @@
             <div class="row">
                 <div class="col-sm-6 faded">
                     <div class="breadcrumbs">
-                        <a href="{{$book->getUrl()}}" class="text-book text-button"><i class="zmdi zmdi-book"></i>{{ $book->name }}</a>
+                        <a href="{{$book->getUrl()}}" class="text-book text-button"><i class="zmdi zmdi-book"></i>{{ $book->getShortName() }}</a>
                         @if($page->hasChapter())
                             <span class="sep">&raquo;</span>
                             <a href="{{ $page->chapter->getUrl() }}" class="text-chapter text-button">
                                 <i class="zmdi zmdi-collection-bookmark"></i>
-                                {{$page->chapter->name}}
+                                {{$page->chapter->getShortName()}}
                             </a>
                         @endif
                     </div>
index e6c3dfcc66c413c244b6ba8f490b5dea20da2300..899ea1e4a54451f996fc6c9ce503aa9aba2f1ff8 100644 (file)
@@ -6,8 +6,8 @@
 
 
         @foreach($sidebarTree as $bookChild)
-            <li class="list-item-{{ $bookChild->getName() }} {{ $bookChild->getName() }}">
-                <a href="{{$bookChild->getUrl()}}" class="{{ $bookChild->getName() }} {{ $current->matches($bookChild)? 'selected' : '' }}">
+            <li class="list-item-{{ $bookChild->getClassName() }} {{ $bookChild->getClassName() }}">
+                <a href="{{$bookChild->getUrl()}}" class="{{ $bookChild->getClassName() }} {{ $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>