mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-12-12 11:16:33 +00:00
Adds shelf info to book page
- includes change shelf button - WIP button for switching to the current edition
This commit is contained in:
parent
3aba3c8052
commit
72eb94315a
4 changed files with 116 additions and 85 deletions
|
@ -91,88 +91,27 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% for readthrough in readthroughs %}
|
{# user's relationship to the book #}
|
||||||
<div class="content block">
|
|
||||||
<input class="toggle-control" type="radio" name="show-edit-readthrough" id="show-readthrough-{{ readthrough.id }}" checked>
|
|
||||||
<div class="toggle-content hidden">
|
|
||||||
<dl>
|
|
||||||
{% if readthrough.start_date %}
|
|
||||||
<dt>Started reading:</dt>
|
|
||||||
<dd>{{ readthrough.start_date | naturalday }}</dd>
|
|
||||||
{% endif %}
|
|
||||||
{% if readthrough.finish_date %}
|
|
||||||
<dt>Finished reading:</dt>
|
|
||||||
<dd>{{ readthrough.finish_date | naturalday }}</dd>
|
|
||||||
{% endif %}
|
|
||||||
</dl>
|
|
||||||
<div class="field is-grouped">
|
|
||||||
<label class="button is-small" for="edit-readthrough-{{ readthrough.id }}" role="button" tabindex="0">
|
|
||||||
<span class="icon icon-pencil">
|
|
||||||
<span class="is-sr-only">Edit read-through dates</span>
|
|
||||||
</span>
|
|
||||||
</label>
|
|
||||||
<label class="button is-small" for="delete-readthrough-{{ readthrough.id }}" role="button" tabindex="0">
|
|
||||||
<span class="icon icon-x">
|
|
||||||
<span class="is-sr-only">Delete this read-through</span>
|
|
||||||
</span>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="block">
|
|
||||||
<input class="toggle-control" type="radio" name="show-edit-readthrough" id="edit-readthrough-{{ readthrough.id }}">
|
|
||||||
<div class="toggle-content hidden">
|
|
||||||
<div class="box">
|
|
||||||
<form name="edit-readthrough" action="/edit-readthrough" method="post">
|
|
||||||
{% csrf_token %}
|
|
||||||
<input type="hidden" name="id" value="{{ readthrough.id }}">
|
|
||||||
<div class="field">
|
|
||||||
<label class="label">
|
|
||||||
Started reading
|
|
||||||
<input type="date" name="start_date" class="input" id="id_start_date-{{ readthrough.id }}" value="{{ readthrough.start_date | date:"Y-m-d" }}">
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="field">
|
|
||||||
<label class="label">
|
|
||||||
Finished reading
|
|
||||||
<input type="date" name="finish_date" class="input" id="id_finish_date-{{ readthrough.id }}" value="{{ readthrough.finish_date | date:"Y-m-d" }}">
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="field is-grouped">
|
|
||||||
<button class="button is-primary" type="submit">Save</button>
|
|
||||||
<label class="button" for="show-readthrough-{{ readthrough.id }}" role="button" tabindex="0">Cancel</label>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<input class="toggle-control" type="checkbox" name="delete-readthrough-{{ readthrough.id }}" id="delete-readthrough-{{ readthrough.id }}">
|
{% for shelf in user_shelves %}
|
||||||
<div class="modal toggle-content hidden">
|
<p>
|
||||||
<div class="modal-background"></div>
|
This edition is on your <a href="/user/{{ user.localname }}/shelves/{{ shelf.shelf.identifier }}">{{ shelf.shelf.name }}</a> shelf.
|
||||||
<div class="modal-card">
|
{% include 'snippets/shelf_selector.html' with current=shelf.shelf %}
|
||||||
<header class="modal-card-head">
|
</p>
|
||||||
<p class="modal-card-title">Delete this read-though?</p>
|
|
||||||
<label class="delete" for="delete-readthrough-{{ readthrough.id }}" aria-label="close"></label>
|
|
||||||
</header>
|
|
||||||
<footer class="modal-card-foot">
|
|
||||||
<form name="delete-readthrough-{{ readthrough.id }}" action="/delete-readthrough" method="POST">
|
|
||||||
{% csrf_token %}
|
|
||||||
<input type="hidden" name="id" value="{{ readthrough.id }}">
|
|
||||||
<button class="button is-danger is-light" type="submit">
|
|
||||||
Delete
|
|
||||||
</button>
|
|
||||||
<label for="delete-readthrough-{{ readthrough.id }}" class="button" role="button" tabindex="0">Cancel</button>
|
|
||||||
</form>
|
|
||||||
</footer>
|
|
||||||
</div>
|
|
||||||
<label class="modal-close is-large" for="delete-readthrough-{{ readthrough.id }}" aria-label="close"></label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
{% for shelf in other_edition_shelves %}
|
||||||
|
<p>
|
||||||
|
A <a href="/book/{{ shelf.book.id }}">different edition</a> of this book is on your <a href="/user/{{ user.localname }}/shelves/{{ shelf.shelf.identifier }}">{{ shelf.shelf.name }}</a> shelf.
|
||||||
|
{% include 'snippets/switch_edition_button.html' with desired_edition=book %}
|
||||||
|
</p>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% for readthrough in readthroughs %}
|
||||||
|
{% include 'snippets/readthrough.html' with readthrough=readthrough %}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
|
||||||
{% if request.user.is_authenticated %}
|
{% if request.user.is_authenticated %}
|
||||||
<div class="box">
|
<div class="box">
|
||||||
{% include 'snippets/create_status.html' with book=book hide_cover=True %}
|
{% include 'snippets/create_status.html' with book=book hide_cover=True %}
|
||||||
|
|
80
bookwyrm/templates/snippets/readthrough.html
Normal file
80
bookwyrm/templates/snippets/readthrough.html
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
{% load humanize %}
|
||||||
|
<div class="content block">
|
||||||
|
<input class="toggle-control" type="radio" name="show-edit-readthrough" id="show-readthrough-{{ readthrough.id }}" checked>
|
||||||
|
<div class="toggle-content hidden">
|
||||||
|
<dl>
|
||||||
|
{% if readthrough.start_date %}
|
||||||
|
<dt>Started reading:</dt>
|
||||||
|
<dd>{{ readthrough.start_date | naturalday }}</dd>
|
||||||
|
{% endif %}
|
||||||
|
{% if readthrough.finish_date %}
|
||||||
|
<dt>Finished reading:</dt>
|
||||||
|
<dd>{{ readthrough.finish_date | naturalday }}</dd>
|
||||||
|
{% endif %}
|
||||||
|
</dl>
|
||||||
|
<div class="field is-grouped">
|
||||||
|
<label class="button is-small" for="edit-readthrough-{{ readthrough.id }}" role="button" tabindex="0">
|
||||||
|
<span class="icon icon-pencil">
|
||||||
|
<span class="is-sr-only">Edit read-through dates</span>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
<label class="button is-small" for="delete-readthrough-{{ readthrough.id }}" role="button" tabindex="0">
|
||||||
|
<span class="icon icon-x">
|
||||||
|
<span class="is-sr-only">Delete this read-through</span>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="block">
|
||||||
|
<input class="toggle-control" type="radio" name="show-edit-readthrough" id="edit-readthrough-{{ readthrough.id }}">
|
||||||
|
<div class="toggle-content hidden">
|
||||||
|
<div class="box">
|
||||||
|
<form name="edit-readthrough" action="/edit-readthrough" method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
<input type="hidden" name="id" value="{{ readthrough.id }}">
|
||||||
|
<div class="field">
|
||||||
|
<label class="label">
|
||||||
|
Started reading
|
||||||
|
<input type="date" name="start_date" class="input" id="id_start_date-{{ readthrough.id }}" value="{{ readthrough.start_date | date:"Y-m-d" }}">
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="field">
|
||||||
|
<label class="label">
|
||||||
|
Finished reading
|
||||||
|
<input type="date" name="finish_date" class="input" id="id_finish_date-{{ readthrough.id }}" value="{{ readthrough.finish_date | date:"Y-m-d" }}">
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="field is-grouped">
|
||||||
|
<button class="button is-primary" type="submit">Save</button>
|
||||||
|
<label class="button" for="show-readthrough-{{ readthrough.id }}" role="button" tabindex="0">Cancel</label>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<input class="toggle-control" type="checkbox" name="delete-readthrough-{{ readthrough.id }}" id="delete-readthrough-{{ readthrough.id }}">
|
||||||
|
<div class="modal toggle-content hidden">
|
||||||
|
<div class="modal-background"></div>
|
||||||
|
<div class="modal-card">
|
||||||
|
<header class="modal-card-head">
|
||||||
|
<p class="modal-card-title">Delete this read-though?</p>
|
||||||
|
<label class="delete" for="delete-readthrough-{{ readthrough.id }}" aria-label="close"></label>
|
||||||
|
</header>
|
||||||
|
<footer class="modal-card-foot">
|
||||||
|
<form name="delete-readthrough-{{ readthrough.id }}" action="/delete-readthrough" method="POST">
|
||||||
|
{% csrf_token %}
|
||||||
|
<input type="hidden" name="id" value="{{ readthrough.id }}">
|
||||||
|
<button class="button is-danger is-light" type="submit">
|
||||||
|
Delete
|
||||||
|
</button>
|
||||||
|
<label for="delete-readthrough-{{ readthrough.id }}" class="button" role="button" tabindex="0">Cancel</button>
|
||||||
|
</form>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<label class="modal-close is-large" for="delete-readthrough-{{ readthrough.id }}" aria-label="close"></label>
|
||||||
|
</div>
|
||||||
|
</div>
|
3
bookwyrm/templates/snippets/switch_edition_button.html
Normal file
3
bookwyrm/templates/snippets/switch_edition_button.html
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<div>
|
||||||
|
<button class="button">Switch to this edition</button>
|
||||||
|
</div>
|
|
@ -5,8 +5,7 @@ from django.contrib.auth.decorators import login_required, permission_required
|
||||||
from django.contrib.postgres.search import TrigramSimilarity
|
from django.contrib.postgres.search import TrigramSimilarity
|
||||||
from django.core.paginator import Paginator
|
from django.core.paginator import Paginator
|
||||||
from django.db.models import Avg, Q
|
from django.db.models import Avg, Q
|
||||||
from django.http import HttpResponseBadRequest, HttpResponseNotFound,\
|
from django.http import HttpResponseNotFound, JsonResponse
|
||||||
JsonResponse
|
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.shortcuts import get_object_or_404, redirect
|
from django.shortcuts import get_object_or_404, redirect
|
||||||
from django.template.response import TemplateResponse
|
from django.template.response import TemplateResponse
|
||||||
|
@ -558,8 +557,7 @@ def book_page(request, book_id):
|
||||||
prev_page = '/book/%s/?page=%d' % \
|
prev_page = '/book/%s/?page=%d' % \
|
||||||
(book_id, reviews_page.previous_page_number())
|
(book_id, reviews_page.previous_page_number())
|
||||||
|
|
||||||
user_tags = []
|
user_tags = readthroughs = user_shelves = other_edition_shelves = []
|
||||||
readthroughs = []
|
|
||||||
if request.user.is_authenticated:
|
if request.user.is_authenticated:
|
||||||
user_tags = models.Tag.objects.filter(
|
user_tags = models.Tag.objects.filter(
|
||||||
book=book, user=request.user
|
book=book, user=request.user
|
||||||
|
@ -570,6 +568,16 @@ def book_page(request, book_id):
|
||||||
book=book,
|
book=book,
|
||||||
).order_by('start_date')
|
).order_by('start_date')
|
||||||
|
|
||||||
|
user_shelves = models.ShelfBook.objects.filter(
|
||||||
|
added_by=request.user, book=book
|
||||||
|
)
|
||||||
|
|
||||||
|
other_edition_shelves = models.ShelfBook.objects.filter(
|
||||||
|
~Q(book=book),
|
||||||
|
added_by=request.user,
|
||||||
|
book__parent_work=book.parent_work,
|
||||||
|
)
|
||||||
|
|
||||||
rating = reviews.aggregate(Avg('rating'))
|
rating = reviews.aggregate(Avg('rating'))
|
||||||
tags = models.Tag.objects.filter(
|
tags = models.Tag.objects.filter(
|
||||||
book=book
|
book=book
|
||||||
|
@ -585,6 +593,8 @@ def book_page(request, book_id):
|
||||||
'rating': rating['rating__avg'],
|
'rating': rating['rating__avg'],
|
||||||
'tags': tags,
|
'tags': tags,
|
||||||
'user_tags': user_tags,
|
'user_tags': user_tags,
|
||||||
|
'user_shelves': user_shelves,
|
||||||
|
'other_edition_shelves': other_edition_shelves,
|
||||||
'readthroughs': readthroughs,
|
'readthroughs': readthroughs,
|
||||||
'path': '/book/%s' % book_id,
|
'path': '/book/%s' % book_id,
|
||||||
'info_fields': [
|
'info_fields': [
|
||||||
|
@ -628,10 +638,9 @@ def editions_page(request, book_id):
|
||||||
encoder=ActivityEncoder
|
encoder=ActivityEncoder
|
||||||
)
|
)
|
||||||
|
|
||||||
editions = models.Edition.objects.filter(parent_work=work).all()
|
|
||||||
data = {
|
data = {
|
||||||
'title': 'Editions of %s' % work.title,
|
'title': 'Editions of %s' % work.title,
|
||||||
'editions': editions,
|
'editions': work.edition_set.all(),
|
||||||
'work': work,
|
'work': work,
|
||||||
}
|
}
|
||||||
return TemplateResponse(request, 'editions.html', data)
|
return TemplateResponse(request, 'editions.html', data)
|
||||||
|
|
Loading…
Reference in a new issue