]> BookStack Code Mirror - bookstack/commitdiff
Create Open Graph meta tags for book/page/chapter/shelf
authorJames Geiger <redacted>
Tue, 22 Dec 2020 05:20:13 +0000 (23:20 -0600)
committerJames Geiger <redacted>
Tue, 22 Dec 2020 05:20:13 +0000 (23:20 -0600)
app/Entities/Models/Page.php
resources/views/base.blade.php
resources/views/books/show.blade.php
resources/views/chapters/show.blade.php
resources/views/pages/show.blade.php
resources/views/shelves/show.blade.php

index 52c64f0480af78fc64a30bae48c8f05b1d108407..076850e6304f093309bbd80d3e7d117ce2933958 100644 (file)
@@ -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;
+    }
 }
index a5404a36506ae9d70225034a6eeef749eeb86d28..e85029573e3ca590cc4e75c4b2915b13b43e1575 100644 (file)
     <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') }}">
index def198bddac2450b34958534cd4572da01ee0ba5..72fa9f77701f9691bf06b11d0239767e9ca885c6 100644 (file)
@@ -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">
index db02ebcc4f9ae6b6d686a591a8eb2398f5d905d8..47fd42fe21c1ac94d45b5a0a7dc8201f37d3f455 100644 (file)
@@ -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">
index 48c88434e00bafd25cff7befb7e39e95f0f475e1..ca639f54bd27ffe73c6804ddd8e0ca8d6fa264b5 100644 (file)
@@ -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">
index 6fee6f45d522718ac0829dd7b9cf33e4a9b2874d..9615466d8d18dbb70d78537e7b4361735d87a792 100644 (file)
@@ -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">