From e458411f91e122438275ad3ae37c9ceec13c31f8 Mon Sep 17 00:00:00 2001
From: James Geiger <james-geiger@users.noreply.github.com>
Date: Mon, 21 Dec 2020 23:20:13 -0600
Subject: [PATCH 1/4] Create Open Graph meta tags for book/page/chapter/shelf

---
 app/Entities/Models/Page.php            | 14 ++++++++++++++
 resources/views/base.blade.php          |  7 +++++++
 resources/views/books/show.blade.php    |  5 +++++
 resources/views/chapters/show.blade.php |  5 +++++
 resources/views/pages/show.blade.php    |  5 +++++
 resources/views/shelves/show.blade.php  |  5 +++++
 6 files changed, 41 insertions(+)

diff --git a/app/Entities/Models/Page.php b/app/Entities/Models/Page.php
index 52c64f048..076850e63 100644
--- a/app/Entities/Models/Page.php
+++ b/app/Entities/Models/Page.php
@@ -126,4 +126,18 @@ class Page extends BookChild
         $refreshed->html = (new PageContent($refreshed))->render();
         return $refreshed;
     }
+
+    public function getCoverImage(): string
+    {
+        $dom = new \DomDocument();
+        $dom->loadHTML($this->html);
+        $images = $dom->getElementsByTagName('img');
+
+        try {
+            $cover = $images->length > 0 ? $images[0]->getAttribute('src') : $this->book->getBookCover();
+        } catch (Exception $err) {
+            $cover = $this->book->getBookCover();
+        }
+        return $cover;
+    }
 }
diff --git a/resources/views/base.blade.php b/resources/views/base.blade.php
index a5404a365..e85029573 100644
--- a/resources/views/base.blade.php
+++ b/resources/views/base.blade.php
@@ -11,6 +11,13 @@
     <meta name="base-url" content="{{ url('/') }}">
     <meta charset="utf-8">
 
+    <!-- Social Cards Meta -->
+
+    <meta property="og:title" content="{{ isset($pageTitle) ? $pageTitle . ' | ' : '' }}{{ setting('app-name') }}">
+    <meta property="og:url" content="{{ url()->current() }}">
+    @stack('social-meta')
+    
+
     <!-- Styles and Fonts -->
     <link rel="stylesheet" href="{{ versioned_asset('dist/styles.css') }}">
     <link rel="stylesheet" media="print" href="{{ versioned_asset('dist/print-styles.css') }}">
diff --git a/resources/views/books/show.blade.php b/resources/views/books/show.blade.php
index def198bdd..72fa9f777 100644
--- a/resources/views/books/show.blade.php
+++ b/resources/views/books/show.blade.php
@@ -6,6 +6,11 @@
     option:entity-search:entity-type="book"
 @stop
 
+@push('social-meta')
+    <meta property="og:description" content="{{ Str::words($book->description, 50, '...') }}">
+    <meta property="og:image" content="{{ $book->getBookCover() }}">
+@endpush
+
 @section('body')
 
     <div class="mb-s">
diff --git a/resources/views/chapters/show.blade.php b/resources/views/chapters/show.blade.php
index db02ebcc4..47fd42fe2 100644
--- a/resources/views/chapters/show.blade.php
+++ b/resources/views/chapters/show.blade.php
@@ -6,6 +6,11 @@
     option:entity-search:entity-type="chapter"
 @stop
 
+@push('social-meta')
+    <meta property="og:description" content="{{ Str::words($chapter->description, 50, '...') }}">
+    <meta property="og:image" content="{{ $chapter->book->getBookCover() }}">
+@endpush
+
 @section('body')
 
     <div class="mb-m print-hidden">
diff --git a/resources/views/pages/show.blade.php b/resources/views/pages/show.blade.php
index 48c88434e..ca639f54b 100644
--- a/resources/views/pages/show.blade.php
+++ b/resources/views/pages/show.blade.php
@@ -1,5 +1,10 @@
 @extends('tri-layout')
 
+@push('social-meta')
+    <meta property="og:description" content="{{ Str::words($page->html, 50, '...') }}">
+    <meta property="og:image" content="{{ $page->getCoverImage() }}">
+@endpush
+
 @section('body')
 
     <div class="mb-m print-hidden">
diff --git a/resources/views/shelves/show.blade.php b/resources/views/shelves/show.blade.php
index 6fee6f45d..9615466d8 100644
--- a/resources/views/shelves/show.blade.php
+++ b/resources/views/shelves/show.blade.php
@@ -1,5 +1,10 @@
 @extends('tri-layout')
 
+@push('social-meta')
+    <meta property="og:description" content="{{ Str::words($shelf->description, 50, '...') }}">
+    <meta property="og:image" content="{{ $shelf->getBookCover() }}">
+@endpush
+
 @section('body')
 
     <div class="mb-s">

From 48587d2c38b79c402fedce8eaef95553f826d6bf Mon Sep 17 00:00:00 2001
From: James Geiger <james-geiger@users.noreply.github.com>
Date: Tue, 9 Feb 2021 00:16:24 -0600
Subject: [PATCH 2/4] Code cleanup, refactor

Updated to use Str::length for entity descriptions.
Moved function to get first image in page to PageContent class.
---
 app/Entities/Models/Page.php            | 16 ++++++++++------
 app/Entities/Tools/PageContent.php      | 14 ++++++++++++++
 resources/views/base.blade.php          |  1 -
 resources/views/books/show.blade.php    |  2 +-
 resources/views/chapters/show.blade.php |  2 +-
 resources/views/pages/show.blade.php    |  5 ++++-
 resources/views/shelves/show.blade.php  |  2 +-
 7 files changed, 31 insertions(+), 11 deletions(-)

diff --git a/app/Entities/Models/Page.php b/app/Entities/Models/Page.php
index 076850e63..c244219ea 100644
--- a/app/Entities/Models/Page.php
+++ b/app/Entities/Models/Page.php
@@ -127,17 +127,21 @@ class Page extends BookChild
         return $refreshed;
     }
 
+    /**
+     * Returns URL to a cover image for the page.
+     */
     public function getCoverImage(): string
     {
-        $dom = new \DomDocument();
-        $dom->loadHTML($this->html);
-        $images = $dom->getElementsByTagName('img');
+        $default = $this->book->getBookCover();
+
+        $firstImage = (new PageContent($this))->fetchFirstImage();
 
         try {
-            $cover = $images->length > 0 ? $images[0]->getAttribute('src') : $this->book->getBookCover();
-        } catch (Exception $err) {
-            $cover = $this->book->getBookCover();
+            $cover = $firstImage ? $firstImage : $default;
+        } catch (\Exception $err) {
+            $cover = $default;
         }
         return $cover;
     }
+    
 }
diff --git a/app/Entities/Tools/PageContent.php b/app/Entities/Tools/PageContent.php
index f60971b8b..e5ea454e7 100644
--- a/app/Entities/Tools/PageContent.php
+++ b/app/Entities/Tools/PageContent.php
@@ -358,4 +358,18 @@ class PageContent
 
         return $html;
     }
+
+    /**
+     * Retrieve first image in page content and return the source URL.
+     */
+    public function fetchFirstImage(): string
+    {
+        $htmlContent = $this->page->html;
+
+        $dom = new \DomDocument();
+        $dom->loadHTML($htmlContent);
+        $images = $dom->getElementsByTagName('img');
+
+        return $images[0]->getAttribute('src');
+    }
 }
diff --git a/resources/views/base.blade.php b/resources/views/base.blade.php
index e85029573..b7dc83d98 100644
--- a/resources/views/base.blade.php
+++ b/resources/views/base.blade.php
@@ -12,7 +12,6 @@
     <meta charset="utf-8">
 
     <!-- Social Cards Meta -->
-
     <meta property="og:title" content="{{ isset($pageTitle) ? $pageTitle . ' | ' : '' }}{{ setting('app-name') }}">
     <meta property="og:url" content="{{ url()->current() }}">
     @stack('social-meta')
diff --git a/resources/views/books/show.blade.php b/resources/views/books/show.blade.php
index 72fa9f777..4782da3b9 100644
--- a/resources/views/books/show.blade.php
+++ b/resources/views/books/show.blade.php
@@ -7,7 +7,7 @@
 @stop
 
 @push('social-meta')
-    <meta property="og:description" content="{{ Str::words($book->description, 50, '...') }}">
+    <meta property="og:description" content="{{ Str::limit($book->description, 100, '...') }}">
     <meta property="og:image" content="{{ $book->getBookCover() }}">
 @endpush
 
diff --git a/resources/views/chapters/show.blade.php b/resources/views/chapters/show.blade.php
index 47fd42fe2..32d7943ed 100644
--- a/resources/views/chapters/show.blade.php
+++ b/resources/views/chapters/show.blade.php
@@ -7,7 +7,7 @@
 @stop
 
 @push('social-meta')
-    <meta property="og:description" content="{{ Str::words($chapter->description, 50, '...') }}">
+    <meta property="og:description" content="{{ Str::limit($chapter->description, 100) }}">
     <meta property="og:image" content="{{ $chapter->book->getBookCover() }}">
 @endpush
 
diff --git a/resources/views/pages/show.blade.php b/resources/views/pages/show.blade.php
index ca639f54b..0810feeb1 100644
--- a/resources/views/pages/show.blade.php
+++ b/resources/views/pages/show.blade.php
@@ -1,8 +1,11 @@
 @extends('tri-layout')
 
 @push('social-meta')
-    <meta property="og:description" content="{{ Str::words($page->html, 50, '...') }}">
+    <meta property="og:description" content="{{ Str::limit($page->text, 100, '...') }}">
     <meta property="og:image" content="{{ $page->getCoverImage() }}">
+
+
+    $pageContent->getNavigation($page->html);
 @endpush
 
 @section('body')
diff --git a/resources/views/shelves/show.blade.php b/resources/views/shelves/show.blade.php
index 9615466d8..01e9e6629 100644
--- a/resources/views/shelves/show.blade.php
+++ b/resources/views/shelves/show.blade.php
@@ -1,7 +1,7 @@
 @extends('tri-layout')
 
 @push('social-meta')
-    <meta property="og:description" content="{{ Str::words($shelf->description, 50, '...') }}">
+    <meta property="og:description" content="{{ Str::limit($shelf->description, 100) }}">
     <meta property="og:image" content="{{ $shelf->getBookCover() }}">
 @endpush
 

From 7ef17bb394504e1ab917d936a873ac8b774d6687 Mon Sep 17 00:00:00 2001
From: James Geiger <james-geiger@users.noreply.github.com>
Date: Tue, 9 Feb 2021 00:21:07 -0600
Subject: [PATCH 3/4] PageContent return null issue

---
 app/Entities/Tools/PageContent.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/Entities/Tools/PageContent.php b/app/Entities/Tools/PageContent.php
index e5ea454e7..51562e71f 100644
--- a/app/Entities/Tools/PageContent.php
+++ b/app/Entities/Tools/PageContent.php
@@ -370,6 +370,6 @@ class PageContent
         $dom->loadHTML($htmlContent);
         $images = $dom->getElementsByTagName('img');
 
-        return $images[0]->getAttribute('src');
+        return $images ? $images[0]->getAttribute('src') : null;
     }
 }

From a0bfdf0e5c61c747cbe74d4da8db8442fbfb6dc9 Mon Sep 17 00:00:00 2001
From: James Geiger <james-geiger@users.noreply.github.com>
Date: Tue, 9 Feb 2021 01:27:27 -0600
Subject: [PATCH 4/4] Code cleanup, bug squashing

---
 app/Entities/Models/Page.php         | 5 +++--
 app/Entities/Tools/PageContent.php   | 4 ++--
 resources/views/pages/show.blade.php | 3 ---
 3 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/app/Entities/Models/Page.php b/app/Entities/Models/Page.php
index c244219ea..89ed26ea8 100644
--- a/app/Entities/Models/Page.php
+++ b/app/Entities/Models/Page.php
@@ -130,9 +130,10 @@ class Page extends BookChild
     /**
      * Returns URL to a cover image for the page.
      */
-    public function getCoverImage(): string
+    public function getCoverImage()
     {
-        $default = $this->book->getBookCover();
+        //$default = $this->book->getBookCover();
+        $default = url('/logo.png');
 
         $firstImage = (new PageContent($this))->fetchFirstImage();
 
diff --git a/app/Entities/Tools/PageContent.php b/app/Entities/Tools/PageContent.php
index 51562e71f..84506f671 100644
--- a/app/Entities/Tools/PageContent.php
+++ b/app/Entities/Tools/PageContent.php
@@ -362,7 +362,7 @@ class PageContent
     /**
      * Retrieve first image in page content and return the source URL.
      */
-    public function fetchFirstImage(): string
+    public function fetchFirstImage()
     {
         $htmlContent = $this->page->html;
 
@@ -370,6 +370,6 @@ class PageContent
         $dom->loadHTML($htmlContent);
         $images = $dom->getElementsByTagName('img');
 
-        return $images ? $images[0]->getAttribute('src') : null;
+        return $images->length > 0 ? $images[0]->getAttribute('src') : null;
     }
 }
diff --git a/resources/views/pages/show.blade.php b/resources/views/pages/show.blade.php
index 0810feeb1..35f0d1229 100644
--- a/resources/views/pages/show.blade.php
+++ b/resources/views/pages/show.blade.php
@@ -3,9 +3,6 @@
 @push('social-meta')
     <meta property="og:description" content="{{ Str::limit($page->text, 100, '...') }}">
     <meta property="og:image" content="{{ $page->getCoverImage() }}">
-
-
-    $pageContent->getNavigation($page->html);
 @endpush
 
 @section('body')