2020-01-28 02:47:54 +00:00
{% extends 'layout.html' %}
2021-05-26 12:44:15 +00:00
{% load i18n %}{% load bookwyrm_tags %}{% load humanize %}{% load utilities %}{% load layout %}
2020-09-29 18:00:54 +00:00
2021-05-24 13:54:43 +00:00
{% block title %}{{ book|book_title }}{% endblock %}
2021-02-28 18:00:36 +00:00
2021-05-26 12:44:15 +00:00
{% block opengraph_images %}
2021-05-26 14:57:28 +00:00
< meta name = "twitter:image" content = "{{ site_path }}/images/{{ book.preview_image }}" >
< meta name = "og:image" content = "{{ site_path }}/images/{{ book.preview_image }}" >
2021-05-26 12:44:15 +00:00
{% endblock %}
2021-02-28 18:00:36 +00:00
{% block content %}
2021-04-09 21:57:49 +00:00
{% with user_authenticated=request.user.is_authenticated can_edit_book=perms.bookwyrm.edit_book %}
< div class = "block" itemscope itemtype = "https://schema.org/Book" >
2021-02-23 21:04:24 +00:00
< div class = "columns is-mobile" >
2020-12-17 22:11:24 +00:00
< div class = "column" >
< h1 class = "title" >
2021-04-09 21:57:49 +00:00
< span itemprop = "name" >
{{ book.title }}{% if book.subtitle %}:
< small > {{ book.subtitle }}< / small >
{% endif %}
< / span >
2021-01-05 00:33:45 +00:00
{% if book.series %}
2021-04-09 21:57:49 +00:00
< meta itemprop = "isPartOf" content = "{{ book.series }}" >
< meta itemprop = "volumeNumber" content = "{{ book.series_number }}" >
< small class = "has-text-grey-dark" >
({{ book.series }}
{% if book.series_number %} #{{ book.series_number }}{% endif %})
< / small >
< br >
2021-01-05 00:33:45 +00:00
{% endif %}
2021-01-05 01:42:02 +00:00
< / h1 >
{% if book.authors %}
< h2 class = "subtitle" >
2021-04-09 21:57:49 +00:00
{% trans "by" %} {% include 'snippets/authors.html' with book=book %}
2020-12-17 22:11:24 +00:00
< / h2 >
{% endif %}
< / div >
2020-09-29 18:00:54 +00:00
2021-04-09 21:57:49 +00:00
{% if user_authenticated and can_edit_book %}
2020-12-17 22:11:24 +00:00
< div class = "column is-narrow" >
2020-11-05 20:05:29 +00:00
< a href = "{{ book.id }}/edit" >
2021-05-18 17:45:51 +00:00
< span class = "icon icon-pencil" title = "{% trans " Edit Book " % } " aria-hidden = True > < / span >
< span > {% trans "Edit Book" %}< / span >
2020-09-30 03:36:43 +00:00
< / a >
< / div >
{% endif %}
2020-09-29 18:00:54 +00:00
< / div >
< div class = "columns" >
2021-03-28 18:18:01 +00:00
< div class = "column is-one-fifth" >
2021-04-27 12:58:30 +00:00
{% include 'snippets/book_cover.html' with book=book cover_class='is-h-m-mobile' %}
2021-04-25 13:37:46 +00:00
{% include 'snippets/rate_action.html' with user=request.user book=book %}
2021-03-28 18:27:09 +00:00
< div class = "mb-3" >
{% include 'snippets/shelve_button/shelve_button.html' %}
< / div >
2020-03-27 15:36:57 +00:00
2021-04-09 21:57:49 +00:00
{% if user_authenticated and not book.cover %}
2021-03-18 16:44:59 +00:00
< div class = "block" >
{% trans "Add cover" as button_text %}
{% include 'snippets/toggle/toggle_button.html' with text=button_text controls_text="add-cover" controls_uid=book.id focus="modal-title-add-cover" class="is-small" %}
{% include 'book/cover_modal.html' with book=book controls_text="add-cover" controls_uid=book.id %}
2021-03-31 22:39:28 +00:00
{% if request.GET.cover_error %}
< p class = "help is-danger" > {% trans "Failed to load cover" %}< / p >
{% endif %}
2020-11-06 20:27:52 +00:00
< / div >
2020-03-28 22:06:16 +00:00
{% endif %}
2020-04-02 02:38:07 +00:00
2021-04-18 13:59:02 +00:00
< section class = "is-clipped" >
{% with book=book %}
< div class = "content" >
{% include 'book/publisher_info.html' %}
2021-01-05 01:42:02 +00:00
< / div >
2021-04-18 13:59:02 +00:00
< div class = "my-3" >
{% include 'book/book_identifiers.html' %}
2021-01-05 01:42:02 +00:00
< / div >
2021-04-18 13:59:02 +00:00
{% endwith %}
2021-01-05 01:42:02 +00:00
{% if book.openlibrary_key %}
2021-02-27 22:22:39 +00:00
< p > < a href = "https://openlibrary.org/books/{{ book.openlibrary_key }}" target = "_blank" rel = "noopener" > {% trans "View on OpenLibrary" %}< / a > < / p >
2020-04-02 02:38:07 +00:00
{% endif %}
2021-04-29 18:14:20 +00:00
{% if book.inventaire_id %}
< p > < a href = "https://inventaire.io/entity/{{ book.inventaire_id }}" target = "_blank" rel = "noopener" > {% trans "View on Inventaire" %}< / a > < / p >
{% endif %}
2021-01-05 01:42:02 +00:00
< / section >
2020-03-28 22:06:16 +00:00
< / div >
2020-04-02 02:38:07 +00:00
2021-03-07 15:08:19 +00:00
< div class = "column is-three-fifths" >
2020-09-29 18:00:54 +00:00
< div class = "block" >
2021-04-09 21:57:49 +00:00
< h3
class="field is-grouped"
itemprop="aggregateRating"
itemscope
itemtype="https://schema.org/AggregateRating"
>
< meta itemprop = "ratingValue" content = "{{ rating|floatformat }}" >
{# @todo Is it possible to not hard-code the value? #}
< meta itemprop = "bestRating" content = "5" >
< meta itemprop = "reviewCount" content = "{{ review_count }}" >
2021-03-02 18:23:11 +00:00
{% include 'snippets/stars.html' with rating=rating %}
2021-04-09 21:57:49 +00:00
{% blocktrans count counter=review_count trimmed %}
({{ review_count }} review)
{% plural %}
({{ review_count }} reviews)
{% endblocktrans %}
2021-03-02 18:23:11 +00:00
< / h3 >
2020-04-02 02:38:07 +00:00
2021-04-09 21:57:49 +00:00
{% with full=book|book_description itemprop='abstract' %}
{% include 'snippets/trimmed_text.html' %}
{% endwith %}
2020-04-02 02:38:07 +00:00
2021-04-09 21:57:49 +00:00
{% if user_authenticated and can_edit_book and not book|book_description %}
2021-03-01 01:10:30 +00:00
{% trans 'Add Description' as button_text %}
{% include 'snippets/toggle/open_button.html' with text=button_text controls_text="add-description" controls_uid=book.id focus="id_description" hide_active=True id="hide-description" %}
2021-01-17 16:26:28 +00:00
2021-04-07 15:31:00 +00:00
< div class = "box is-hidden" id = "add-description-{{ book.id }}" >
2021-01-17 16:26:28 +00:00
< form name = "add-description" method = "POST" action = "/add-description/{{ book.id }}" >
{% csrf_token %}
< p class = "fields is-grouped" >
2021-02-27 22:22:39 +00:00
< label class = "label" for = "id_description" > {% trans "Description:" %}< / label >
2021-01-17 16:26:28 +00:00
< textarea name = "description" cols = "None" rows = "None" class = "textarea" id = "id_description" > < / textarea >
< / p >
< div class = "field" >
2021-02-27 22:22:39 +00:00
< button class = "button is-primary" type = "submit" > {% trans "Save" %}< / button >
2021-03-01 01:10:30 +00:00
{% trans "Cancel" as button_text %}
{% include 'snippets/toggle/close_button.html' with text=button_text controls_text="add-description" controls_uid=book.id hide_inactive=True %}
2020-11-28 15:55:31 +00:00
< / div >
2021-01-17 16:26:28 +00:00
< / form >
2020-11-28 15:55:31 +00:00
< / div >
{% endif %}
2020-12-08 17:43:12 +00:00
{% if book.parent_work.editions.count > 1 %}
2021-03-02 18:23:11 +00:00
< p > {% blocktrans with path=book.parent_work.local_path count=book.parent_work.editions.count %}< a href = "{{ path }}/editions" > {{ count }} editions< / a > {% endblocktrans %}< / p >
2020-09-29 18:00:54 +00:00
{% endif %}
< / div >
2020-04-02 02:38:07 +00:00
2020-12-12 00:39:58 +00:00
{# user's relationship to the book #}
2021-01-07 02:34:21 +00:00
< div class = "block" >
2021-05-23 03:14:57 +00:00
{% for shelf in user_shelfbooks %}
2020-12-12 00:39:58 +00:00
< p >
2021-03-02 18:23:11 +00:00
{% blocktrans with path=shelf.shelf.local_path shelf_name=shelf.shelf.name %}This edition is on your < a href = "{{ path }}" > {{ shelf_name }}< / a > shelf.{% endblocktrans %}
2020-12-12 00:39:58 +00:00
{% include 'snippets/shelf_selector.html' with current=shelf.shelf %}
< / p >
{% endfor %}
{% for shelf in other_edition_shelves %}
< p >
2021-03-02 18:23:11 +00:00
{% blocktrans with book_path=shelf.book.local_path shelf_path=shelf.shelf.local_path shelf_name=shelf.shelf.name %}A < a href = "{{ book_path }}" > different edition< / a > of this book is on your < a href = "{{ shelf_path }}" > {{ shelf_name }}< / a > shelf.{% endblocktrans %}
2020-12-12 00:57:38 +00:00
{% include 'snippets/switch_edition_button.html' with edition=book %}
2020-12-12 00:39:58 +00:00
< / p >
{% endfor %}
2021-01-07 02:34:21 +00:00
< / div >
2020-11-06 20:51:49 +00:00
2021-04-09 21:57:49 +00:00
{% if user_authenticated %}
2021-04-30 19:02:19 +00:00
< hr aria-hidden = "true" >
2021-01-18 01:22:03 +00:00
< section class = "block" >
< header class = "columns" >
2021-04-30 19:02:19 +00:00
< div class = "column" >
< h2 class = "title is-5" > {% trans "Your reading activity" %}< / h2 >
< / div >
2021-01-18 01:22:03 +00:00
< div class = "column is-narrow" >
2021-03-01 01:10:30 +00:00
{% trans "Add read dates" as button_text %}
2021-05-18 17:45:51 +00:00
{% include 'snippets/toggle/open_button.html' with text=button_text icon_with_text="plus" class="is-small" controls_text="add-readthrough" focus="add-readthrough-focus" %}
2021-01-18 01:22:03 +00:00
< / div >
< / header >
2021-04-07 15:31:00 +00:00
< section class = "is-hidden box" id = "add-readthrough" >
2021-01-17 16:26:28 +00:00
< form name = "add-readthrough" action = "/create-readthrough" method = "post" >
{% include 'snippets/readthrough_form.html' with readthrough=None %}
< div class = "field is-grouped" >
2021-01-18 01:22:03 +00:00
< div class = "control" >
2021-02-27 22:22:39 +00:00
< button class = "button is-primary" type = "submit" > {% trans "Create" %}< / button >
2021-01-18 01:22:03 +00:00
< / div >
< div class = "control" >
2021-03-01 01:10:30 +00:00
{% trans "Cancel" as button_text %}
{% include 'snippets/toggle/close_button.html' with text=button_text controls_text="add-readthrough" %}
2021-01-18 01:22:03 +00:00
< / div >
2021-01-17 16:26:28 +00:00
< / div >
< / form >
2021-01-18 01:22:03 +00:00
< / section >
2021-05-18 16:59:40 +00:00
{% if not readthroughs.exists %}
< p > {% trans "You don't have any reading activity for this book." %}< / p >
{% endif %}
2021-01-18 01:22:03 +00:00
{% for readthrough in readthroughs %}
{% include 'snippets/readthrough.html' with readthrough=readthrough %}
{% endfor %}
< / section >
2021-04-30 19:02:19 +00:00
< hr aria-hidden = "true" >
2020-10-29 19:32:37 +00:00
2021-01-18 04:19:09 +00:00
< section class = "box" >
2020-04-21 15:01:54 +00:00
{% include 'snippets/create_status.html' with book=book hide_cover=True %}
2021-01-18 04:19:09 +00:00
< / section >
2020-09-29 18:00:54 +00:00
{% endif %}
2021-04-30 19:06:21 +00:00
< div class = "block" id = "reviews" >
{% if request.user.is_authenticated %}
2021-05-18 18:09:19 +00:00
{% if user_statuses.review_count or user_statuses.comment_count or user_statuses.quotation_count %}
2021-04-30 19:06:21 +00:00
< nav class = "tabs" >
< ul >
{% url 'book' book.id as tab_url %}
< li { % if tab_url = = request . path % } class = "is-active" { % endif % } >
< a href = "{{ tab_url }}" > {% trans "Reviews" %} ({{ review_count }})< / a >
< / li >
{% if user_statuses.review_count %}
{% url 'book-user-statuses' book.id 'review' as tab_url %}
< li { % if tab_url = = request . path % } class = "is-active" { % endif % } >
< a href = "{{ tab_url }}" > {% trans "Your reviews" %} ({{ user_statuses.review_count }})< / a >
< / li >
{% endif %}
{% if user_statuses.comment_count %}
{% url 'book-user-statuses' book.id 'comment' as tab_url %}
< li { % if tab_url = = request . path % } class = "is-active" { % endif % } >
< a href = "{{ tab_url }}" > {% trans "Your comments" %} ({{ user_statuses.comment_count }})< / a >
< / li >
{% endif %}
{% if user_statuses.quotation_count %}
{% url 'book-user-statuses' book.id 'quote' as tab_url %}
< li { % if tab_url = = request . path % } class = "is-active" { % endif % } >
< a href = "{{ tab_url }}" > {% trans "Your quotes" %} ({{ user_statuses.quotation_count }})< / a >
< / li >
{% endif %}
< / ul >
< / nav >
{% endif %}
{% endif %}
2021-05-18 18:17:59 +00:00
{% for status in statuses %}
2021-04-30 19:06:21 +00:00
< div
class="block"
2021-05-18 18:17:59 +00:00
{% if status.status_type == 'Review' or status.status_type == 'Rating' %}
2021-04-30 19:06:21 +00:00
itemprop="review"
itemscope
itemtype="https://schema.org/Review"
2021-05-18 18:17:59 +00:00
{% endif %}
2021-04-30 19:06:21 +00:00
>
2021-05-18 18:17:59 +00:00
{% include 'snippets/status/status.html' with status=status hide_book=True depth=1 %}
2021-04-30 19:06:21 +00:00
< / div >
{% endfor %}
2021-05-18 18:09:19 +00:00
{% if ratings %}
2021-04-30 19:06:21 +00:00
< div class = "block is-flex is-flex-wrap-wrap" >
{% for rating in ratings %}
2021-05-18 18:17:59 +00:00
{% include 'book/rating.html' with user=rating.user rating=rating %}
2021-04-30 19:06:21 +00:00
{% endfor %}
< / div >
2021-05-18 18:09:19 +00:00
{% endif %}
2021-04-30 19:06:21 +00:00
< div class = "block" >
{% include 'snippets/pagination.html' with page=statuses path=request.path anchor="#reviews" %}
< / div >
< / div >
2020-04-12 04:49:06 +00:00
< / div >
2021-03-07 15:08:19 +00:00
< div class = "column is-one-fifth" >
2021-01-05 01:42:02 +00:00
{% if book.subjects %}
2021-04-09 21:57:49 +00:00
< section class = "content block" >
< h2 class = "title is-5" > {% trans "Subjects" %}< / h2 >
< ul >
{% for subject in book.subjects %}
< li itemprop = "about" > {{ subject }}< / li >
{% endfor %}
< / ul >
< / section >
2021-01-05 01:42:02 +00:00
{% endif %}
{% if book.subject_places %}
< section class = "content block" >
2021-02-27 22:22:39 +00:00
< h2 class = "title is-5" > {% trans "Places" %}< / h2 >
2021-01-05 01:42:02 +00:00
< ul >
2021-03-07 15:35:38 +00:00
{% for place in book.subject_places %}
2021-01-05 01:42:02 +00:00
< li > {{ place }}< / li >
{% endfor %}
< / ul >
< / section >
{% endif %}
2021-02-15 19:30:22 +00:00
2021-03-15 21:44:03 +00:00
{% if lists.exists or request.user.list_set.exists %}
2021-02-15 19:30:22 +00:00
< section class = "content block" >
2021-02-27 22:22:39 +00:00
< h2 class = "title is-5" > {% trans "Lists" %}< / h2 >
2021-02-15 19:30:22 +00:00
< ul >
{% for list in lists %}
< li > < a href = "{{ list.local_path }}" > {{ list.name }}< / a > < / li >
{% endfor %}
< / ul >
2021-03-15 21:44:03 +00:00
{% if request.user.list_set.exists %}
< form name = "list-add" method = "post" action = "{% url 'list-add-book' %}" >
{% csrf_token %}
< input type = "hidden" name = "book" value = "{{ book.id }}" >
< label class = "label" for = "id_list" > {% trans "Add to list" %}< / label >
< div class = "field has-addons" >
< div class = "select control" >
< select name = "list" id = "id_list" >
{% for list in user.list_set.all %}
< option value = "{{ list.id }}" > {{ list.name }}< / option >
{% endfor %}
< / select >
< / div >
< div class = "control" >
< button type = "submit" class = "button is-link" > {% trans "Add" %}< / button >
< / div >
< / div >
< / form >
{% endif %}
2021-02-15 19:30:22 +00:00
< / section >
{% endif %}
2021-01-05 01:42:02 +00:00
< / div >
2020-02-23 22:26:03 +00:00
< / div >
2020-03-17 00:19:38 +00:00
< / div >
2021-04-09 21:57:49 +00:00
{% endwith %}
2020-01-28 02:47:54 +00:00
{% endblock %}
2021-03-22 19:37:01 +00:00
{% block scripts %}
2021-04-05 14:17:11 +00:00
< script src = "/static/js/vendor/tabs.js" > < / script >
2021-03-22 19:37:01 +00:00
{% endblock %}