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')