From 168a2488e2bbcbdd5198a4f6d1a75f370365fe68 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 15 Nov 2021 20:59:22 +1100 Subject: [PATCH 01/31] refactor shelf activity on book page - disallow moving from custom shelf to a reading status shelf with shelf_selector - always use shelve_button for moving books from a reading status shelf - redesign shelf information as a list of boxes --- bookwyrm/templates/book/book.html | 21 +++++++++++++++---- .../templates/snippets/shelf_selector.html | 4 ++++ bookwyrm/templatetags/bookwyrm_tags.py | 11 ++++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/bookwyrm/templates/book/book.html b/bookwyrm/templates/book/book.html index 36241ee26..a1a73135a 100644 --- a/bookwyrm/templates/book/book.html +++ b/bookwyrm/templates/book/book.html @@ -153,12 +153,25 @@ {# user's relationship to the book #}
+ {% if user_shelfbooks.count > 0 %} +

+ {% trans "You have shelved this edition in:" %} +

+ + {% endif %} {% for shelf in other_edition_shelves %}

{% blocktrans with book_path=shelf.book.local_path shelf_path=shelf.shelf.local_path shelf_name=shelf.shelf.name %}A different edition of this book is on your {{ shelf_name }} shelf.{% endblocktrans %} diff --git a/bookwyrm/templates/snippets/shelf_selector.html b/bookwyrm/templates/snippets/shelf_selector.html index ca5a39f6e..ef5bf5bcd 100644 --- a/bookwyrm/templates/snippets/shelf_selector.html +++ b/bookwyrm/templates/snippets/shelf_selector.html @@ -1,5 +1,7 @@ {% extends 'components/dropdown.html' %} {% load i18n %} +{% load bookwyrm_tags %} + {% block dropdown-trigger %} {% trans "Move book" %} @@ -7,6 +9,7 @@ {% block dropdown-list %} {% for shelf in user_shelves %} +{% if shelf.identifier|is_shelf_type:"custom" %}

+{% endif %} {% endfor %}
  • {% blocktrans with path=shelf.shelf.local_path shelf_name=shelf.shelf.name %}{{ shelf_name }}{% endblocktrans %} - {% if shelf.shelf.identifier|is_shelf_type:"readthrough" %} - {% include 'snippets/shelve_button/shelve_button.html' %} + {% if shelf.shelf.editable %} +
    + {% include 'snippets/shelf_selector.html' with current=shelf.shelf class="is-small" %} +
    {% else %} -
    - {% include 'snippets/shelf_selector.html' with current=shelf.shelf class="is-small" %} -
    + {% include 'snippets/shelve_button/shelve_button.html' %} {% endif %}
  • {% endfor %} diff --git a/bookwyrm/templates/snippets/shelf_selector.html b/bookwyrm/templates/snippets/shelf_selector.html index ef5bf5bcd..e43d8ca1d 100644 --- a/bookwyrm/templates/snippets/shelf_selector.html +++ b/bookwyrm/templates/snippets/shelf_selector.html @@ -9,7 +9,7 @@ {% block dropdown-list %} {% for shelf in user_shelves %} -{% if shelf.identifier|is_shelf_type:"custom" %} +{% if shelf.editable %} +{% else%} +{% with button_class="is-fullwidth is-small shelf-option is-radiusless is-white" %} + +{% endwith %} {% endif %} {% endfor %} @@ -30,4 +65,14 @@ + +{% include 'snippets/reading_modals/want_to_read_modal.html' with book=active_shelf.book controls_text="want_to_read" controls_uid=uuid move_from=current.id %} + +{% include 'snippets/reading_modals/start_reading_modal.html' with book=active_shelf.book controls_text="start_reading" controls_uid=uuid move_from=current.id %} + +{% include 'snippets/reading_modals/finish_reading_modal.html' with book=active_shelf.book controls_text="finish_reading" controls_uid=uuid move_from=current.id readthrough=readthrough %} + +{% include 'snippets/reading_modals/progress_update_modal.html' with book=active_shelf.book controls_text="progress_update" controls_uid=uuid move_from=current.id readthrough=readthrough %} + +{% endwith %} {% endblock %} diff --git a/bookwyrm/views/reading.py b/bookwyrm/views/reading.py index 54427ffb9..a96ccbc09 100644 --- a/bookwyrm/views/reading.py +++ b/bookwyrm/views/reading.py @@ -9,6 +9,7 @@ from django.views import View from django.views.decorators.http import require_POST from bookwyrm import models +from bookwyrm.views.shelf.shelf_actions import unshelve from .status import CreateStatus from .helpers import get_edition, handle_reading_status, is_api_request from .helpers import load_date_in_user_tz_as_utc @@ -85,12 +86,20 @@ class ReadingStatus(View): if request.POST.get("post-status"): # is it a comment? if request.POST.get("content"): + # BUG: there is a problem posting statuses for finishing + # check whether it existed before. return CreateStatus.as_view()(request, "comment") privacy = request.POST.get("privacy") handle_reading_status(request.user, desired_shelf, book, privacy) + if bool(request.POST.get("shelf")): + if current_status_shelfbook is None: + return unshelve(request, referer=referer, book_id=book_id) + return HttpResponse(headers={"forceReload" : "true"}) + if is_api_request(request): return HttpResponse() + return redirect(referer) diff --git a/bookwyrm/views/shelf/shelf_actions.py b/bookwyrm/views/shelf/shelf_actions.py index 702b72c13..8240055e2 100644 --- a/bookwyrm/views/shelf/shelf_actions.py +++ b/bookwyrm/views/shelf/shelf_actions.py @@ -1,6 +1,7 @@ """ shelf views """ from django.db import IntegrityError, transaction from django.contrib.auth.decorators import login_required +from django.http.response import HttpResponse from django.shortcuts import get_object_or_404, redirect from django.views.decorators.http import require_POST @@ -91,13 +92,15 @@ def shelve(request): @login_required @require_POST -def unshelve(request): +def unshelve(request, referer=None, book_id=False): """remove a book from a user's shelf""" - book = get_object_or_404(models.Edition, id=request.POST.get("book")) + id = book_id if book_id else request.POST.get("book") + book = get_object_or_404(models.Edition, id=id) shelf_book = get_object_or_404( models.ShelfBook, book=book, shelf__id=request.POST["shelf"] ) shelf_book.raise_not_deletable(request.user) - shelf_book.delete() + if bool(referer): + return HttpResponse(headers={"forceReload" : "true"}) return redirect(request.headers.get("Referer", "/")) From 6951b523652fb26ab9a435475f83da50447fa87e Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sat, 20 Nov 2021 08:18:43 +1100 Subject: [PATCH 05/31] disallow moving to shelf already used --- bookwyrm/templates/snippets/shelf_selector.html | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/bookwyrm/templates/snippets/shelf_selector.html b/bookwyrm/templates/snippets/shelf_selector.html index eca7a1d0a..34077dc1e 100644 --- a/bookwyrm/templates/snippets/shelf_selector.html +++ b/bookwyrm/templates/snippets/shelf_selector.html @@ -12,13 +12,7 @@ {% with book.id|uuid as uuid %} {% active_shelf book as active_shelf %} {% for shelf in user_shelves %} - {% if shelf.editable %} {% else%} +{% comparison_bool shelf.identifier active_shelf.shelf.identifier as is_current %} {% with button_class="is-fullwidth is-small shelf-option is-radiusless is-white" %}
  • {% blocktrans with path=shelf.shelf.local_path shelf_name=shelf.shelf.name %}{{ shelf_name }}{% endblocktrans %}
    - {% include 'snippets/shelf_selector.html' with current=shelf.shelf class="is-small" %} + {% include 'snippets/shelf_selector.html' with current=shelf.shelf class="is-small" readthrough=readthrough %}
  • {% endfor %} diff --git a/bookwyrm/templates/snippets/shelf_selector.html b/bookwyrm/templates/snippets/shelf_selector.html index 34077dc1e..1a2c46d01 100644 --- a/bookwyrm/templates/snippets/shelf_selector.html +++ b/bookwyrm/templates/snippets/shelf_selector.html @@ -11,6 +11,8 @@ {% block dropdown-list %} {% with book.id|uuid as uuid %} {% active_shelf book as active_shelf %} +{% latest_read_through book request.user as readthrough %} + {% for shelf in user_shelves %} {% if shelf.editable %} @@ -67,7 +69,5 @@ {% include 'snippets/reading_modals/finish_reading_modal.html' with book=active_shelf.book controls_text="finish_reading" controls_uid=uuid move_from=current.id readthrough=readthrough %} -{% include 'snippets/reading_modals/progress_update_modal.html' with book=active_shelf.book controls_text="progress_update" controls_uid=uuid move_from=current.id readthrough=readthrough %} - {% endwith %} {% endblock %} From 41862e854cdc95d1d6a1f8d71700d057c43ec661 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sat, 20 Nov 2021 13:57:37 +1100 Subject: [PATCH 09/31] move from reading to editable shelf with logic that actually works --- bookwyrm/views/reading.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bookwyrm/views/reading.py b/bookwyrm/views/reading.py index 8e6ef9a1e..c4064d97c 100644 --- a/bookwyrm/views/reading.py +++ b/bookwyrm/views/reading.py @@ -96,7 +96,11 @@ class ReadingStatus(View): if bool(request.POST.get("shelf")): # unshelve the existing shelf this_shelf = request.POST.get("shelf") - if int(this_shelf) not in [1,2,3]: + if ( + bool(current_status_shelfbook) and + int(this_shelf) != int(current_status_shelfbook.shelf.id) and + current_status_shelfbook.shelf.identifier != desired_shelf.identifier + ): return unshelve(request, referer=referer, book_id=book_id) # don't try to unshelve a read status shelf: it has already been deleted. return HttpResponse(headers={"forceReload" : "true"}) From af9768a2e31d4652b8afd5da85ec333a15f942ef Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sat, 20 Nov 2021 14:59:59 +1100 Subject: [PATCH 10/31] force page reload when adding status from move button --- bookwyrm/views/status.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bookwyrm/views/status.py b/bookwyrm/views/status.py index 8e487bf97..cd8d27049 100644 --- a/bookwyrm/views/status.py +++ b/bookwyrm/views/status.py @@ -117,12 +117,16 @@ class CreateStatus(View): status.save(created=created) - # update a readthorugh, if needed + # update a readthrough, if needed try: edit_readthrough(request) except Http404: pass + # force page reload if this was triggered from 'move' button + if bool(request.POST.get("shelf")): + return HttpResponse(headers={"forceReload" : "true"}) + if is_api_request(request): return HttpResponse() return redirect("/") @@ -157,6 +161,8 @@ def update_progress(request, book_id): # pylint: disable=unused-argument @require_POST def edit_readthrough(request): """can't use the form because the dates are too finnicky""" + # BUG when triggering finish reading with comments and no previous readthroughs + # this will 404 readthrough = get_object_or_404(models.ReadThrough, id=request.POST.get("id")) readthrough.raise_not_editable(request.user) From 12810d8e341a7d00faca4c6179b3055df3b2a604 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sat, 20 Nov 2021 16:03:46 +1100 Subject: [PATCH 11/31] don't try to update non-existent readthroughs --- bookwyrm/views/reading.py | 2 -- bookwyrm/views/status.py | 9 +++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/bookwyrm/views/reading.py b/bookwyrm/views/reading.py index c4064d97c..04074b3db 100644 --- a/bookwyrm/views/reading.py +++ b/bookwyrm/views/reading.py @@ -86,8 +86,6 @@ class ReadingStatus(View): if request.POST.get("post-status"): # is it a comment? if request.POST.get("content"): - # BUG: there is a problem posting statuses with comments (doesn't force reload) - # there is a DIFFERENT problem *updating* read statuses/comments return CreateStatus.as_view()(request, "comment") privacy = request.POST.get("privacy") handle_reading_status(request.user, desired_shelf, book, privacy) diff --git a/bookwyrm/views/status.py b/bookwyrm/views/status.py index cd8d27049..8488b21e0 100644 --- a/bookwyrm/views/status.py +++ b/bookwyrm/views/status.py @@ -118,10 +118,11 @@ class CreateStatus(View): status.save(created=created) # update a readthrough, if needed - try: - edit_readthrough(request) - except Http404: - pass + if bool(request.POST.get("id")): + try: + edit_readthrough(request) + except Http404: + pass # force page reload if this was triggered from 'move' button if bool(request.POST.get("shelf")): From b273123708c3c2ee4a74d0722edaaba99f0e4eaf Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sat, 20 Nov 2021 16:06:16 +1100 Subject: [PATCH 12/31] code style --- bookwyrm/static/js/status_cache.js | 1 + bookwyrm/templatetags/bookwyrm_tags.py | 6 +++++- bookwyrm/views/reading.py | 13 +++++++------ bookwyrm/views/shelf/shelf_actions.py | 2 +- bookwyrm/views/status.py | 2 +- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/bookwyrm/static/js/status_cache.js b/bookwyrm/static/js/status_cache.js index c59e23ee4..49f1c1295 100644 --- a/bookwyrm/static/js/status_cache.js +++ b/bookwyrm/static/js/status_cache.js @@ -192,6 +192,7 @@ let StatusCache = new class { .forEach(item => BookWyrm.addRemoveClass(item, "is-hidden", false)); // Remove existing disabled states + // BUG: this affects all shelves, not just shelving status shelves button.querySelectorAll("[data-shelf-dropdown-identifier] button") .forEach(item => item.disabled = false); diff --git a/bookwyrm/templatetags/bookwyrm_tags.py b/bookwyrm/templatetags/bookwyrm_tags.py index 425ecc158..9d84d1ff8 100644 --- a/bookwyrm/templatetags/bookwyrm_tags.py +++ b/bookwyrm/templatetags/bookwyrm_tags.py @@ -77,7 +77,11 @@ def related_status(notification): def active_shelf(context, book): """check what shelf a user has a book on, if any""" if hasattr(book, "current_shelves"): - read_shelves = [s for s in book.current_shelves if s.shelf.identifier in models.Shelf.READ_STATUS_IDENTIFIERS] + read_shelves = [ + s + for s in book.current_shelves + if s.shelf.identifier in models.Shelf.READ_STATUS_IDENTIFIERS + ] return read_shelves[0] if len(read_shelves) else {"book": book} shelf = ( diff --git a/bookwyrm/views/reading.py b/bookwyrm/views/reading.py index 04074b3db..334235b34 100644 --- a/bookwyrm/views/reading.py +++ b/bookwyrm/views/reading.py @@ -91,17 +91,18 @@ class ReadingStatus(View): handle_reading_status(request.user, desired_shelf, book, privacy) # if the request includes a "shelf" value we are using the 'move' button - if bool(request.POST.get("shelf")): + if bool(request.POST.get("shelf")): # unshelve the existing shelf this_shelf = request.POST.get("shelf") if ( - bool(current_status_shelfbook) and - int(this_shelf) != int(current_status_shelfbook.shelf.id) and - current_status_shelfbook.shelf.identifier != desired_shelf.identifier - ): + bool(current_status_shelfbook) + and int(this_shelf) != int(current_status_shelfbook.shelf.id) + and current_status_shelfbook.shelf.identifier + != desired_shelf.identifier + ): return unshelve(request, referer=referer, book_id=book_id) # don't try to unshelve a read status shelf: it has already been deleted. - return HttpResponse(headers={"forceReload" : "true"}) + return HttpResponse(headers={"forceReload": "true"}) if is_api_request(request): return HttpResponse() diff --git a/bookwyrm/views/shelf/shelf_actions.py b/bookwyrm/views/shelf/shelf_actions.py index 8240055e2..f431c1fab 100644 --- a/bookwyrm/views/shelf/shelf_actions.py +++ b/bookwyrm/views/shelf/shelf_actions.py @@ -102,5 +102,5 @@ def unshelve(request, referer=None, book_id=False): shelf_book.raise_not_deletable(request.user) shelf_book.delete() if bool(referer): - return HttpResponse(headers={"forceReload" : "true"}) + return HttpResponse(headers={"forceReload": "true"}) return redirect(request.headers.get("Referer", "/")) diff --git a/bookwyrm/views/status.py b/bookwyrm/views/status.py index 8488b21e0..eafe0680e 100644 --- a/bookwyrm/views/status.py +++ b/bookwyrm/views/status.py @@ -126,7 +126,7 @@ class CreateStatus(View): # force page reload if this was triggered from 'move' button if bool(request.POST.get("shelf")): - return HttpResponse(headers={"forceReload" : "true"}) + return HttpResponse(headers={"forceReload": "true"}) if is_api_request(request): return HttpResponse() From 4b6f5c9f5179abc3d000d1424edd7c1af39ac51d Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sat, 20 Nov 2021 19:03:57 +1100 Subject: [PATCH 13/31] remove out of date comment --- bookwyrm/views/status.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/bookwyrm/views/status.py b/bookwyrm/views/status.py index eafe0680e..588dcf6ac 100644 --- a/bookwyrm/views/status.py +++ b/bookwyrm/views/status.py @@ -162,8 +162,6 @@ def update_progress(request, book_id): # pylint: disable=unused-argument @require_POST def edit_readthrough(request): """can't use the form because the dates are too finnicky""" - # BUG when triggering finish reading with comments and no previous readthroughs - # this will 404 readthrough = get_object_or_404(models.ReadThrough, id=request.POST.get("id")) readthrough.raise_not_editable(request.user) From b406a0353301d74cb380411049b67262e4074205 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Sat, 20 Nov 2021 19:04:51 +1100 Subject: [PATCH 14/31] don't persist form state in firefox Fixes shelves not being disabled in dropdowns. See https://stackoverflow.com/questions/5985839/bug-with-firefox-disabled-attribute-of-input-not-resetting-when-refreshing --- .../snippets/shelve_button/shelve_button_dropdown_options.html | 2 +- bookwyrm/templates/snippets/toggle/toggle_button.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html b/bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html index 32319f863..8c1881ce9 100644 --- a/bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html +++ b/bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown_options.html @@ -32,7 +32,7 @@ {% elif shelf.editable %} -
    + {% csrf_token %}
    diff --git a/bookwyrm/views/books/edit_book.py b/bookwyrm/views/books/edit_book.py index 1445dc011..0bacd6074 100644 --- a/bookwyrm/views/books/edit_book.py +++ b/bookwyrm/views/books/edit_book.py @@ -43,12 +43,12 @@ class EditBook(View): if not form.is_valid(): return TemplateResponse(request, "book/edit/edit_book.html", data) - add_author = request.POST.get("add_author") + add_author = request.POST.getlist("add_author") # we're adding an author through a free text field if add_author: data["add_author"] = add_author data["author_matches"] = [] - for author in add_author.split(","): + for author in add_author: if not author: continue # check for existing authors From c704c7eb8f485e0776577718142d29e8f150e500 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Thu, 25 Nov 2021 07:38:08 +1100 Subject: [PATCH 18/31] remove from any shelf in all books shelf view - fixes removing book from 'all books' shelf erroring - remove from any shelf item is on when in 'all books' --- .../templates/snippets/shelf_selector.html | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/bookwyrm/templates/snippets/shelf_selector.html b/bookwyrm/templates/snippets/shelf_selector.html index 1a2c46d01..663bd5633 100644 --- a/bookwyrm/templates/snippets/shelf_selector.html +++ b/bookwyrm/templates/snippets/shelf_selector.html @@ -53,15 +53,30 @@ {% endwith %} {% endif %} {% endfor %} - + +{% if shelf.identifier == 'all' %} +{% for shelved_in in book.shelves.all %} + +{% endfor %} +{% else %} + + +{% endif %} {% include 'snippets/reading_modals/want_to_read_modal.html' with book=active_shelf.book controls_text="want_to_read" controls_uid=uuid move_from=current.id %} From b91915d31680b71864ba14cc686442fb58a2c9c1 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Thu, 25 Nov 2021 08:20:34 +1100 Subject: [PATCH 19/31] change shelf var for shelf_selector in book view --- bookwyrm/templates/book/book.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/templates/book/book.html b/bookwyrm/templates/book/book.html index 1eb08001d..713e7abee 100644 --- a/bookwyrm/templates/book/book.html +++ b/bookwyrm/templates/book/book.html @@ -162,7 +162,7 @@
  • {% blocktrans with path=shelf.shelf.local_path shelf_name=shelf.shelf.name %}{{ shelf_name }}{% endblocktrans %}
    - {% include 'snippets/shelf_selector.html' with current=shelf.shelf class="is-small" readthrough=readthrough %} + {% include 'snippets/shelf_selector.html' with shelf=shelf.shelf class="is-small" readthrough=readthrough %}
  • {% endfor %} From 5b67226571d85d281e3ccedc2710084ffceb2201 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Thu, 25 Nov 2021 19:12:03 +1100 Subject: [PATCH 20/31] forceReload prevents ajax submission ...instead of weird hacky workarounds forcing refreshes later. --- bookwyrm/static/js/status_cache.js | 8 +------- bookwyrm/views/reading.py | 2 -- bookwyrm/views/shelf/shelf_actions.py | 2 -- bookwyrm/views/status.py | 4 ---- 4 files changed, 1 insertion(+), 15 deletions(-) diff --git a/bookwyrm/static/js/status_cache.js b/bookwyrm/static/js/status_cache.js index f179aa7d9..1ec72b3cb 100644 --- a/bookwyrm/static/js/status_cache.js +++ b/bookwyrm/static/js/status_cache.js @@ -74,7 +74,7 @@ let StatusCache = new class { // This allows the form to submit in the old fashioned way if there's a problem - if (!trigger || !form) { + if (!trigger || !form || response.headers.get("forceReload")) { return; } @@ -90,12 +90,6 @@ let StatusCache = new class { trigger.removeAttribute('disabled'); }) .then(response => { - if (response.headers.get("forceReload")) { - BookWyrm.addRemoveClass(form, 'is-processing', true); - trigger.setAttribute('disabled', null); - - return location.reload(); - } if (!response.ok) { throw new Error(); diff --git a/bookwyrm/views/reading.py b/bookwyrm/views/reading.py index 75a45f245..a91fa8e7a 100644 --- a/bookwyrm/views/reading.py +++ b/bookwyrm/views/reading.py @@ -102,8 +102,6 @@ class ReadingStatus(View): != desired_shelf.identifier ): return unshelve(request, referer=referer, book_id=book_id) - # don't try to unshelve a read status shelf: it has already been deleted. - return HttpResponse(headers={"forceReload": "true"}) if is_api_request(request): return HttpResponse() diff --git a/bookwyrm/views/shelf/shelf_actions.py b/bookwyrm/views/shelf/shelf_actions.py index 77053f534..3fff92a6a 100644 --- a/bookwyrm/views/shelf/shelf_actions.py +++ b/bookwyrm/views/shelf/shelf_actions.py @@ -101,6 +101,4 @@ def unshelve(request, referer=None, book_id=False): ) shelf_book.raise_not_deletable(request.user) shelf_book.delete() - if bool(referer): - return HttpResponse(headers={"forceReload": "true"}) return redirect(request.headers.get("Referer", "/")) diff --git a/bookwyrm/views/status.py b/bookwyrm/views/status.py index 144408b50..bb69d30c0 100644 --- a/bookwyrm/views/status.py +++ b/bookwyrm/views/status.py @@ -125,10 +125,6 @@ class CreateStatus(View): except Http404: pass - # force page reload if this was triggered from 'move' button - if bool(request.POST.get("shelf")): - return HttpResponse(headers={"forceReload": "true"}) - if is_api_request(request): return HttpResponse() return redirect("/") From 951eb43aa657d9ced537b078bf14286520b18a66 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Fri, 26 Nov 2021 17:16:26 +1100 Subject: [PATCH 21/31] bypass ajax for shelf_selector statuses --- bookwyrm/static/js/status_cache.js | 3 +-- .../snippets/reading_modals/finish_reading_modal.html | 2 +- .../snippets/reading_modals/start_reading_modal.html | 2 +- .../snippets/reading_modals/want_to_read_modal.html | 2 +- bookwyrm/templates/snippets/shelf_selector.html | 6 +++--- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/bookwyrm/static/js/status_cache.js b/bookwyrm/static/js/status_cache.js index 1ec72b3cb..418b7dee2 100644 --- a/bookwyrm/static/js/status_cache.js +++ b/bookwyrm/static/js/status_cache.js @@ -74,7 +74,7 @@ let StatusCache = new class { // This allows the form to submit in the old fashioned way if there's a problem - if (!trigger || !form || response.headers.get("forceReload")) { + if (!trigger || !form) { return; } @@ -90,7 +90,6 @@ let StatusCache = new class { trigger.removeAttribute('disabled'); }) .then(response => { - if (!response.ok) { throw new Error(); } diff --git a/bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html b/bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html index 79542b29a..a35ed9e0b 100644 --- a/bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html +++ b/bookwyrm/templates/snippets/reading_modals/finish_reading_modal.html @@ -9,7 +9,7 @@ Finish "{{ book_title }}" {% endblock %} {% block modal-form-open %} -
    + {% csrf_token %} diff --git a/bookwyrm/templates/snippets/reading_modals/start_reading_modal.html b/bookwyrm/templates/snippets/reading_modals/start_reading_modal.html index 03ebd9003..423f77ebe 100644 --- a/bookwyrm/templates/snippets/reading_modals/start_reading_modal.html +++ b/bookwyrm/templates/snippets/reading_modals/start_reading_modal.html @@ -9,7 +9,7 @@ Start "{{ book_title }}" {% endblock %} {% block modal-form-open %} - + {% csrf_token %} diff --git a/bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html b/bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html index 2fc2a012d..2fb976bf1 100644 --- a/bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html +++ b/bookwyrm/templates/snippets/reading_modals/want_to_read_modal.html @@ -9,7 +9,7 @@ Want to Read "{{ book_title }}" {% endblock %} {% block modal-form-open %} - + {% csrf_token %} diff --git a/bookwyrm/templates/snippets/shelf_selector.html b/bookwyrm/templates/snippets/shelf_selector.html index 663bd5633..4b32f5a8e 100644 --- a/bookwyrm/templates/snippets/shelf_selector.html +++ b/bookwyrm/templates/snippets/shelf_selector.html @@ -78,11 +78,11 @@ {% endif %} -{% include 'snippets/reading_modals/want_to_read_modal.html' with book=active_shelf.book controls_text="want_to_read" controls_uid=uuid move_from=current.id %} +{% include 'snippets/reading_modals/want_to_read_modal.html' with book=active_shelf.book controls_text="want_to_read" controls_uid=uuid move_from=current.id refresh=True %} -{% include 'snippets/reading_modals/start_reading_modal.html' with book=active_shelf.book controls_text="start_reading" controls_uid=uuid move_from=current.id %} +{% include 'snippets/reading_modals/start_reading_modal.html' with book=active_shelf.book controls_text="start_reading" controls_uid=uuid move_from=current.id refresh=True %} -{% include 'snippets/reading_modals/finish_reading_modal.html' with book=active_shelf.book controls_text="finish_reading" controls_uid=uuid move_from=current.id readthrough=readthrough %} +{% include 'snippets/reading_modals/finish_reading_modal.html' with book=active_shelf.book controls_text="finish_reading" controls_uid=uuid move_from=current.id readthrough=readthrough refresh=True %} {% endwith %} {% endblock %} From a5efc798f8e7a897badc301736443f5f7087affb Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Fri, 26 Nov 2021 17:30:27 +1100 Subject: [PATCH 22/31] clean up old vars --- bookwyrm/views/shelf/shelf_actions.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bookwyrm/views/shelf/shelf_actions.py b/bookwyrm/views/shelf/shelf_actions.py index 3fff92a6a..5e7e6c0c9 100644 --- a/bookwyrm/views/shelf/shelf_actions.py +++ b/bookwyrm/views/shelf/shelf_actions.py @@ -1,7 +1,6 @@ """ shelf views """ from django.db import IntegrityError, transaction from django.contrib.auth.decorators import login_required -from django.http.response import HttpResponse from django.shortcuts import get_object_or_404, redirect from django.views.decorators.http import require_POST @@ -92,7 +91,7 @@ def shelve(request): @login_required @require_POST -def unshelve(request, referer=None, book_id=False): +def unshelve(request, book_id=False): """remove a book from a user's shelf""" identity = book_id if book_id else request.POST.get("book") book = get_object_or_404(models.Edition, id=identity) From 1a37903583235ff2b4d0b98767ef3e91ac3ffeb3 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Fri, 26 Nov 2021 17:39:35 +1100 Subject: [PATCH 23/31] remove unnecessary function call arg --- bookwyrm/views/reading.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/views/reading.py b/bookwyrm/views/reading.py index a91fa8e7a..35847558e 100644 --- a/bookwyrm/views/reading.py +++ b/bookwyrm/views/reading.py @@ -101,7 +101,7 @@ class ReadingStatus(View): and current_status_shelfbook.shelf.identifier != desired_shelf.identifier ): - return unshelve(request, referer=referer, book_id=book_id) + return unshelve(request, book_id=book_id) if is_api_request(request): return HttpResponse() From 54cef421e291295cac79062ceec53e145b6e397e Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 28 Nov 2021 07:57:27 -0800 Subject: [PATCH 24/31] Fixes checking if image fields are already set --- bookwyrm/models/fields.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bookwyrm/models/fields.py b/bookwyrm/models/fields.py index 361079906..a28ad0ea2 100644 --- a/bookwyrm/models/fields.py +++ b/bookwyrm/models/fields.py @@ -398,7 +398,11 @@ class ImageField(ActivitypubFieldMixin, models.ImageField): if formatted is None or formatted is MISSING: return False - if not overwrite and hasattr(instance, self.name): + if ( + not overwrite + and hasattr(instance, self.name) + and getattr(instance, self.name) + ): return False getattr(instance, self.name).save(*formatted, save=save) From 7b89014e7baa35cf600559f18cf1588b77d8c44d Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 28 Nov 2021 08:24:00 -0800 Subject: [PATCH 25/31] Updates image fields tests --- bookwyrm/tests/models/test_fields.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/bookwyrm/tests/models/test_fields.py b/bookwyrm/tests/models/test_fields.py index 74f4c48bd..6499e96cb 100644 --- a/bookwyrm/tests/models/test_fields.py +++ b/bookwyrm/tests/models/test_fields.py @@ -215,7 +215,7 @@ class ModelFields(TestCase): "rat", "rat@rat.rat", "ratword", local=True, localname="rat" ) public = "https://www.w3.org/ns/activitystreams#Public" - followers = "%s/followers" % user.remote_id + followers = f"{user.remote_id}/followers" instance = fields.PrivacyField() instance.name = "privacy_field" @@ -409,11 +409,10 @@ class ModelFields(TestCase): """loadin' a list of items from Links""" # TODO - @responses.activate @patch("bookwyrm.models.activitypub_mixin.ObjectMixin.broadcast") @patch("bookwyrm.suggested_users.remove_user_task.delay") - def test_image_field(self, *_): - """storing images""" + def test_image_field_to_activity(self, *_): + """serialize an image field to activitypub""" user = User.objects.create_user( "mouse", "mouse@mouse.mouse", "mouseword", local=True, localname="mouse" ) @@ -437,10 +436,22 @@ class ModelFields(TestCase): self.assertEqual(output.name, "") self.assertEqual(output.type, "Document") + @responses.activate + def test_image_field_from_activity(self, *_): + """load an image from activitypub""" + image_file = pathlib.Path(__file__).parent.joinpath( + "../../static/images/default_avi.jpg" + ) + image = Image.open(image_file) + output = BytesIO() + image.save(output, format=image.format) + + instance = fields.ImageField() + responses.add( responses.GET, "http://www.example.com/image.jpg", - body=user.avatar.file.read(), + body=image.tobytes(), status=200, ) loaded_image = instance.field_from_activity("http://www.example.com/image.jpg") From a7ee8fea247935556a1f21705c1bc485d9cf4682 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 28 Nov 2021 08:49:54 -0800 Subject: [PATCH 26/31] Adds test for setting model image field --- bookwyrm/tests/models/test_fields.py | 29 +++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/bookwyrm/tests/models/test_fields.py b/bookwyrm/tests/models/test_fields.py index 6499e96cb..278272d87 100644 --- a/bookwyrm/tests/models/test_fields.py +++ b/bookwyrm/tests/models/test_fields.py @@ -19,7 +19,7 @@ from django.utils import timezone from bookwyrm import activitypub from bookwyrm.activitypub.base_activity import ActivityObject -from bookwyrm.models import fields, User, Status +from bookwyrm.models import fields, User, Status, Edition from bookwyrm.models.base_model import BookWyrmModel from bookwyrm.models.activitypub_mixin import ActivitypubMixin from bookwyrm.settings import DOMAIN @@ -458,6 +458,33 @@ class ModelFields(TestCase): self.assertIsInstance(loaded_image, list) self.assertIsInstance(loaded_image[1], ContentFile) + @responses.activate + def test_image_field_set_field_from_activity(self, *_): + """update a model instance from an activitypub object""" + image_file = pathlib.Path(__file__).parent.joinpath( + "../../static/images/default_avi.jpg" + ) + image = Image.open(image_file) + output = BytesIO() + image.save(output, format=image.format) + + instance = fields.ImageField(activitypub_field="cover", name="cover") + + responses.add( + responses.GET, + "http://www.example.com/image.jpg", + body=image.tobytes(), + status=200, + ) + book = Edition.objects.create(title="hello") + + MockActivity = namedtuple("MockActivity", ("cover")) + mock_activity = MockActivity("http://www.example.com/image.jpg") + + instance.set_field_from_activity(book, mock_activity) + self.assertIsNotNone(book.cover.name) + self.assertEqual(book.cover.size, 43200) + def test_datetime_field(self, *_): """this one is pretty simple, it just has to use isoformat""" instance = fields.DateTimeField() From 3a7f070a798760301cc6c50f6e48338e29094bf7 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 28 Nov 2021 08:50:29 -0800 Subject: [PATCH 27/31] Typo fix --- bookwyrm/models/fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/models/fields.py b/bookwyrm/models/fields.py index a28ad0ea2..7d14f88f9 100644 --- a/bookwyrm/models/fields.py +++ b/bookwyrm/models/fields.py @@ -296,7 +296,7 @@ class ManyToManyField(ActivitypubFieldMixin, models.ManyToManyField): super().__init__(*args, **kwargs) def set_field_from_activity(self, instance, data, overwrite=True): - """helper function for assinging a value to the field""" + """helper function for assigning a value to the field""" if not overwrite and getattr(instance, self.name).exists(): return False From 3f09b4bc8a44db937c2cfbe02f53b78010fba801 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 28 Nov 2021 09:23:13 -0800 Subject: [PATCH 28/31] More tests --- bookwyrm/tests/models/test_fields.py | 100 +++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/bookwyrm/tests/models/test_fields.py b/bookwyrm/tests/models/test_fields.py index 278272d87..8028a305e 100644 --- a/bookwyrm/tests/models/test_fields.py +++ b/bookwyrm/tests/models/test_fields.py @@ -485,6 +485,106 @@ class ModelFields(TestCase): self.assertIsNotNone(book.cover.name) self.assertEqual(book.cover.size, 43200) + @responses.activate + def test_image_field_set_field_from_activity_no_overwrite_no_cover(self, *_): + """update a model instance from an activitypub object""" + image_file = pathlib.Path(__file__).parent.joinpath( + "../../static/images/default_avi.jpg" + ) + image = Image.open(image_file) + output = BytesIO() + image.save(output, format=image.format) + + instance = fields.ImageField(activitypub_field="cover", name="cover") + + responses.add( + responses.GET, + "http://www.example.com/image.jpg", + body=image.tobytes(), + status=200, + ) + book = Edition.objects.create(title="hello") + + MockActivity = namedtuple("MockActivity", ("cover")) + mock_activity = MockActivity("http://www.example.com/image.jpg") + + instance.set_field_from_activity(book, mock_activity, overwrite=False) + self.assertIsNotNone(book.cover.name) + self.assertEqual(book.cover.size, 43200) + + @responses.activate + def test_image_field_set_field_from_activity_no_overwrite_with_cover(self, *_): + """update a model instance from an activitypub object""" + image_file = pathlib.Path(__file__).parent.joinpath( + "../../static/images/default_avi.jpg" + ) + image = Image.open(image_file) + output = BytesIO() + image.save(output, format=image.format) + + another_image_file = pathlib.Path(__file__).parent.joinpath( + "../../static/images/logo.png" + ) + another_image = Image.open(another_image_file) + another_output = BytesIO() + another_image.save(another_output, format=another_image.format) + + instance = fields.ImageField(activitypub_field="cover", name="cover") + + responses.add( + responses.GET, + "http://www.example.com/image.jpg", + body=another_image.tobytes(), + status=200, + ) + book = Edition.objects.create(title="hello") + book.cover.save("test.jpg", ContentFile(output.getvalue())) + self.assertEqual(book.cover.size, 2136) + + MockActivity = namedtuple("MockActivity", ("cover")) + mock_activity = MockActivity("http://www.example.com/image.jpg") + + instance.set_field_from_activity(book, mock_activity, overwrite=False) + # same cover as before + self.assertEqual(book.cover.size, 2136) + + @responses.activate + def test_image_field_set_field_from_activity_with_overwrite_with_cover(self, *_): + """update a model instance from an activitypub object""" + image_file = pathlib.Path(__file__).parent.joinpath( + "../../static/images/default_avi.jpg" + ) + image = Image.open(image_file) + output = BytesIO() + image.save(output, format=image.format) + book = Edition.objects.create(title="hello") + book.cover.save("test.jpg", ContentFile(output.getvalue())) + self.assertEqual(book.cover.size, 2136) + + another_image_file = pathlib.Path(__file__).parent.joinpath( + "../../static/images/logo.png" + ) + another_image = Image.open(another_image_file) + another_output = BytesIO() + another_image.save(another_output, format=another_image.format) + + instance = fields.ImageField(activitypub_field="cover", name="cover") + + responses.add( + responses.GET, + "http://www.example.com/image.jpg", + body=another_image.tobytes(), + status=200, + ) + + MockActivity = namedtuple("MockActivity", ("cover")) + mock_activity = MockActivity("http://www.example.com/image.jpg") + + instance.set_field_from_activity(book, mock_activity, overwrite=True) + # new cover + self.assertIsNotNone(book.cover.name) + self.assertEqual(book.cover.size, 376800) + def test_datetime_field(self, *_): """this one is pretty simple, it just has to use isoformat""" instance = fields.DateTimeField() From 66e414be3ca8b4de8426d3acc49608a7bd614fae Mon Sep 17 00:00:00 2001 From: Chad Nelson Date: Tue, 30 Nov 2021 17:21:28 -0500 Subject: [PATCH 29/31] Standardize JS, use button, & filter empty authors --- bookwyrm/static/js/bookwyrm.js | 11 ++++++++++- bookwyrm/templates/book/edit/edit_book_form.html | 2 +- bookwyrm/views/books/edit_book.py | 4 ++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/bookwyrm/static/js/bookwyrm.js b/bookwyrm/static/js/bookwyrm.js index bf5efb465..e18087eeb 100644 --- a/bookwyrm/static/js/bookwyrm.js +++ b/bookwyrm/static/js/bookwyrm.js @@ -45,6 +45,13 @@ let BookWyrm = new class { 'change', this.disableIfTooLarge.bind(this) )); + + document.querySelectorAll('[data-duplicate]') + .forEach(node => node.addEventListener( + 'click', + this.duplicateInput.bind(this) + + )) } /** @@ -369,7 +376,9 @@ let BookWyrm = new class { } } - duplicateInput (input_id ) { + duplicateInput (event ) { + const trigger = event.currentTarget; + const input_id = trigger.dataset['duplicate'] const orig = document.getElementById(input_id); const parent = orig.parentNode; const new_count = parent.querySelectorAll("input").length + 1 diff --git a/bookwyrm/templates/book/edit/edit_book_form.html b/bookwyrm/templates/book/edit/edit_book_form.html index 841a3c53c..25d24e43d 100644 --- a/bookwyrm/templates/book/edit/edit_book_form.html +++ b/bookwyrm/templates/book/edit/edit_book_form.html @@ -128,7 +128,7 @@ {% endfor %} - {% trans "Add Another Author" %} + diff --git a/bookwyrm/views/books/edit_book.py b/bookwyrm/views/books/edit_book.py index 0bacd6074..917271fcb 100644 --- a/bookwyrm/views/books/edit_book.py +++ b/bookwyrm/views/books/edit_book.py @@ -43,8 +43,8 @@ class EditBook(View): if not form.is_valid(): return TemplateResponse(request, "book/edit/edit_book.html", data) - add_author = request.POST.getlist("add_author") - # we're adding an author through a free text field + # filter out empty author fields + add_author = [author for author in request.POST.getlist("add_author") if author] if add_author: data["add_author"] = add_author data["author_matches"] = [] From 91997b6f4c5874dfe53bea15df4f23fcdbaad814 Mon Sep 17 00:00:00 2001 From: Chad Nelson Date: Tue, 30 Nov 2021 17:42:31 -0500 Subject: [PATCH 30/31] Linting after merge conflict --- bookwyrm/views/books/edit_book.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/views/books/edit_book.py b/bookwyrm/views/books/edit_book.py index 930becac2..755c25b4c 100644 --- a/bookwyrm/views/books/edit_book.py +++ b/bookwyrm/views/books/edit_book.py @@ -57,7 +57,7 @@ class EditBook(View): data["add_author"] = add_author data["author_matches"] = [] data["isni_matches"] = [] - + for author in add_author: if not author: continue From 0794f1a28642a85ef4bbf382823d7c34fff5e2cc Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 2 Dec 2021 10:28:13 -0800 Subject: [PATCH 31/31] Updates locales --- bw-dev | 1 + locale/en_US/LC_MESSAGES/django.po | 92 +++++++++++++++++---------- locale/fr_FR/LC_MESSAGES/django.mo | Bin 44850 -> 65763 bytes locale/lt_LT/LC_MESSAGES/django.mo | Bin 65147 -> 65121 bytes locale/lt_LT/LC_MESSAGES/django.po | 22 +++---- locale/zh_Hans/LC_MESSAGES/django.mo | Bin 44096 -> 59480 bytes locale/zh_Hans/LC_MESSAGES/django.po | 66 +++++++++---------- 7 files changed, 103 insertions(+), 78 deletions(-) diff --git a/bw-dev b/bw-dev index 75c69662b..cfe8747fb 100755 --- a/bw-dev +++ b/bw-dev @@ -118,6 +118,7 @@ case "$CMD" in git checkout l10n_main locale/pt_BR git checkout l10n_main locale/zh_Hans git checkout l10n_main locale/zh_Hant + runweb django-admin makemessages --no-wrap --ignore=venv -l en_US $@ runweb django-admin compilemessages --ignore venv ;; build) diff --git a/locale/en_US/LC_MESSAGES/django.po b/locale/en_US/LC_MESSAGES/django.po index f5df1265d..5080502f5 100644 --- a/locale/en_US/LC_MESSAGES/django.po +++ b/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-17 18:03+0000\n" +"POT-Creation-Date: 2021-12-02 18:24+0000\n" "PO-Revision-Date: 2021-02-28 17:19-0800\n" "Last-Translator: Mouse Reeve \n" "Language-Team: English \n" @@ -227,47 +227,51 @@ msgstr "" msgid "Something went wrong! Sorry about that." msgstr "" -#: bookwyrm/templates/author/author.html:17 #: bookwyrm/templates/author/author.html:18 +#: bookwyrm/templates/author/author.html:19 msgid "Edit Author" msgstr "" -#: bookwyrm/templates/author/author.html:34 +#: bookwyrm/templates/author/author.html:35 #: bookwyrm/templates/author/edit_author.html:43 msgid "Aliases:" msgstr "" -#: bookwyrm/templates/author/author.html:45 +#: bookwyrm/templates/author/author.html:46 msgid "Born:" msgstr "" -#: bookwyrm/templates/author/author.html:52 +#: bookwyrm/templates/author/author.html:53 msgid "Died:" msgstr "" -#: bookwyrm/templates/author/author.html:61 +#: bookwyrm/templates/author/author.html:62 msgid "Wikipedia" msgstr "" -#: bookwyrm/templates/author/author.html:69 +#: bookwyrm/templates/author/author.html:70 +msgid "View ISNI record" +msgstr "" + +#: bookwyrm/templates/author/author.html:78 #: bookwyrm/templates/book/book.html:94 msgid "View on OpenLibrary" msgstr "" -#: bookwyrm/templates/author/author.html:77 +#: bookwyrm/templates/author/author.html:86 #: bookwyrm/templates/book/book.html:97 msgid "View on Inventaire" msgstr "" -#: bookwyrm/templates/author/author.html:85 +#: bookwyrm/templates/author/author.html:94 msgid "View on LibraryThing" msgstr "" -#: bookwyrm/templates/author/author.html:93 +#: bookwyrm/templates/author/author.html:102 msgid "View on Goodreads" msgstr "" -#: bookwyrm/templates/author/author.html:108 +#: bookwyrm/templates/author/author.html:117 #, python-format msgid "Books by %(name)s" msgstr "" @@ -277,17 +281,17 @@ msgid "Edit Author:" msgstr "" #: bookwyrm/templates/author/edit_author.html:13 -#: bookwyrm/templates/book/edit/edit_book.html:18 +#: bookwyrm/templates/book/edit/edit_book.html:19 msgid "Added:" msgstr "" #: bookwyrm/templates/author/edit_author.html:14 -#: bookwyrm/templates/book/edit/edit_book.html:21 +#: bookwyrm/templates/book/edit/edit_book.html:22 msgid "Updated:" msgstr "" #: bookwyrm/templates/author/edit_author.html:16 -#: bookwyrm/templates/book/edit/edit_book.html:25 +#: bookwyrm/templates/book/edit/edit_book.html:26 msgid "Last edited by:" msgstr "" @@ -347,7 +351,7 @@ msgstr "" #: bookwyrm/templates/author/edit_author.html:118 #: bookwyrm/templates/book/book.html:140 -#: bookwyrm/templates/book/edit/edit_book.html:110 +#: bookwyrm/templates/book/edit/edit_book.html:121 #: bookwyrm/templates/book/readthrough.html:76 #: bookwyrm/templates/groups/form.html:24 #: bookwyrm/templates/lists/bookmark_button.html:15 @@ -366,8 +370,8 @@ msgstr "" #: bookwyrm/templates/author/edit_author.html:119 #: bookwyrm/templates/book/book.html:141 bookwyrm/templates/book/book.html:190 #: bookwyrm/templates/book/cover_modal.html:32 -#: bookwyrm/templates/book/edit/edit_book.html:112 -#: bookwyrm/templates/book/edit/edit_book.html:115 +#: bookwyrm/templates/book/edit/edit_book.html:123 +#: bookwyrm/templates/book/edit/edit_book.html:126 #: bookwyrm/templates/book/readthrough.html:77 #: bookwyrm/templates/groups/delete_group_modal.html:17 #: bookwyrm/templates/lists/delete_list_modal.html:17 @@ -513,56 +517,60 @@ msgstr "" msgid "Load cover from url:" msgstr "" -#: bookwyrm/templates/book/edit/edit_book.html:5 -#: bookwyrm/templates/book/edit/edit_book.html:11 +#: bookwyrm/templates/book/edit/edit_book.html:6 +#: bookwyrm/templates/book/edit/edit_book.html:12 #, python-format msgid "Edit \"%(book_title)s\"" msgstr "" -#: bookwyrm/templates/book/edit/edit_book.html:5 -#: bookwyrm/templates/book/edit/edit_book.html:13 +#: bookwyrm/templates/book/edit/edit_book.html:6 +#: bookwyrm/templates/book/edit/edit_book.html:14 msgid "Add Book" msgstr "" -#: bookwyrm/templates/book/edit/edit_book.html:47 +#: bookwyrm/templates/book/edit/edit_book.html:48 msgid "Confirm Book Info" msgstr "" -#: bookwyrm/templates/book/edit/edit_book.html:55 +#: bookwyrm/templates/book/edit/edit_book.html:56 #, python-format -msgid "Is \"%(name)s\" an existing author?" +msgid "Is \"%(name)s\" one of these authors?" msgstr "" -#: bookwyrm/templates/book/edit/edit_book.html:64 -#, python-format -msgid "Author of %(book_title)s" +#: bookwyrm/templates/book/edit/edit_book.html:67 +#: bookwyrm/templates/book/edit/edit_book.html:69 +msgid "Author of " msgstr "" -#: bookwyrm/templates/book/edit/edit_book.html:68 +#: bookwyrm/templates/book/edit/edit_book.html:69 +msgid "Find more information at isni.org" +msgstr "" + +#: bookwyrm/templates/book/edit/edit_book.html:79 msgid "This is a new author" msgstr "" -#: bookwyrm/templates/book/edit/edit_book.html:75 +#: bookwyrm/templates/book/edit/edit_book.html:86 #, python-format msgid "Creating a new author: %(name)s" msgstr "" -#: bookwyrm/templates/book/edit/edit_book.html:82 +#: bookwyrm/templates/book/edit/edit_book.html:93 msgid "Is this an edition of an existing work?" msgstr "" -#: bookwyrm/templates/book/edit/edit_book.html:90 +#: bookwyrm/templates/book/edit/edit_book.html:101 msgid "This is a new work" msgstr "" -#: bookwyrm/templates/book/edit/edit_book.html:97 +#: bookwyrm/templates/book/edit/edit_book.html:108 #: bookwyrm/templates/groups/members.html:16 #: bookwyrm/templates/landing/password_reset.html:30 #: bookwyrm/templates/snippets/remove_from_group_button.html:16 msgid "Confirm" msgstr "" -#: bookwyrm/templates/book/edit/edit_book.html:99 +#: bookwyrm/templates/book/edit/edit_book.html:110 #: bookwyrm/templates/feed/status.html:9 msgid "Back" msgstr "" @@ -1016,6 +1024,22 @@ msgstr "" msgid "Learn more about %(site_name)s:" msgstr "" +#: bookwyrm/templates/email/moderation_report/html_content.html:6 +#: bookwyrm/templates/email/moderation_report/text_content.html:5 +#, python-format +msgid "@%(reporter)s has flagged behavior by @%(reportee)s for moderation. " +msgstr "" + +#: bookwyrm/templates/email/moderation_report/html_content.html:9 +#: bookwyrm/templates/email/moderation_report/text_content.html:7 +msgid "View report" +msgstr "" + +#: bookwyrm/templates/email/moderation_report/subject.html:2 +#, python-format +msgid "New report for %(site_name)s" +msgstr "" + #: bookwyrm/templates/email/password_reset/html_content.html:6 #: bookwyrm/templates/email/password_reset/text_content.html:4 #, python-format @@ -3842,7 +3866,7 @@ msgstr "" msgid "File exceeds maximum size: 10MB" msgstr "" -#: bookwyrm/templatetags/utilities.py:31 +#: bookwyrm/templatetags/utilities.py:34 #, python-format msgid "%(title)s: %(subtitle)s" msgstr "" diff --git a/locale/fr_FR/LC_MESSAGES/django.mo b/locale/fr_FR/LC_MESSAGES/django.mo index 4cdcbf8ea2a3ffdeed740317a055f435e5954b7c..cc69e82cf8477c385d869a23d3e81c5947773963 100644 GIT binary patch literal 65763 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 diff --git a/locale/lt_LT/LC_MESSAGES/django.mo b/locale/lt_LT/LC_MESSAGES/django.mo index 728d0e905df147942efe7c21b5ba4bc4af36dd39..51e78110eb241a05ede43f759507de84e2492ebc 100644 GIT binary patch delta 6458 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 diff --git a/locale/lt_LT/LC_MESSAGES/django.po b/locale/lt_LT/LC_MESSAGES/django.po index 16110b069..d2ec32981 100644 --- a/locale/lt_LT/LC_MESSAGES/django.po +++ b/locale/lt_LT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-17 18:03+0000\n" -"PO-Revision-Date: 2021-11-22 08:50\n" +"PO-Revision-Date: 2021-11-29 13:53\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Lithuanian\n" "Language: lt\n" @@ -591,7 +591,7 @@ msgstr "Kalbos:" #: bookwyrm/templates/book/edit/edit_book_form.html:74 msgid "Publication" -msgstr "Paskelbimas" +msgstr "Leidimas" #: bookwyrm/templates/book/edit/edit_book_form.html:77 msgid "Publisher:" @@ -930,7 +930,7 @@ msgstr "%(username)s įvertino %(username)s reviewed %(book_title)s" -msgstr "%(username)s peržiūrėjo %(book_title)s" +msgstr "%(username)s apžvelgė %(book_title)s" #: bookwyrm/templates/discover/card-header.html:31 #, python-format @@ -1114,7 +1114,7 @@ msgstr "Šiuo metu skaitoma" #: bookwyrm/templates/snippets/shelve_button/shelve_button_options.html:12 #: bookwyrm/templates/user/books_header.html:8 msgid "Read" -msgstr "Perskaičiau" +msgstr "Perskaityta" #: bookwyrm/templates/feed/suggested_users.html:5 #: bookwyrm/templates/get_started/users.html:6 @@ -1483,7 +1483,7 @@ msgstr "Lentyna" #: bookwyrm/templates/import/manual_review.html:13 #: bookwyrm/templates/snippets/create_status.html:17 msgid "Review" -msgstr "Peržiūra" +msgstr "Apžvalga" #: bookwyrm/templates/import/import_status.html:119 msgid "Book" @@ -1513,7 +1513,7 @@ msgstr "Importuota" #: bookwyrm/templates/import/import_status.html:182 msgid "Needs manual review" -msgstr "Reikalingas manualus atsiliepimas" +msgstr "Reikalinga peržvelgti" #: bookwyrm/templates/import/import_status.html:195 msgid "Retry" @@ -2416,7 +2416,7 @@ msgstr[3] "%(display_count)s prašymai pakviesti" #: bookwyrm/templates/settings/dashboard/dashboard.html:65 msgid "Instance Activity" -msgstr "Pavyzdinė veikla" +msgstr "Serverio statistika" #: bookwyrm/templates/settings/dashboard/dashboard.html:83 msgid "Interval:" @@ -2436,7 +2436,7 @@ msgstr "Naudotojo prisijungimo veikla" #: bookwyrm/templates/settings/dashboard/dashboard.html:112 msgid "Status activity" -msgstr "Būsenos veikla" +msgstr "Būsenos" #: bookwyrm/templates/settings/dashboard/dashboard.html:118 msgid "Works created" @@ -3467,7 +3467,7 @@ msgstr "%(percent)s%% baigta!" #: bookwyrm/templates/snippets/goal_progress.html:12 #, python-format msgid "You've read %(read_count)s of %(goal_count)s books." -msgstr "Perskaitėte %(read_count)s iš %(goal_count)s knygų." +msgstr "Perskaityta %(read_count)s iš %(goal_count)s knygų." #: bookwyrm/templates/snippets/goal_progress.html:14 #, python-format @@ -3504,7 +3504,7 @@ msgstr "Viešas" #: bookwyrm/templates/snippets/privacy_select.html:14 #: bookwyrm/templates/snippets/privacy_select_no_followers.html:14 msgid "Unlisted" -msgstr "Nėra sąraše" +msgstr "Slaptas" #: bookwyrm/templates/snippets/privacy-icons.html:12 msgid "Followers-only" @@ -3873,7 +3873,7 @@ msgstr[3] "%(mutuals_display)s sekėjai, kuriuos sekate jūs" #: bookwyrm/templates/user/user_preview.html:38 msgid "No followers you follow" -msgstr "Jūs nieko nesekate" +msgstr "Jūs kartu nieko nesekate" #: bookwyrm/templates/widgets/clearable_file_input_with_warning.html:28 msgid "File exceeds maximum size: 10MB" diff --git a/locale/zh_Hans/LC_MESSAGES/django.mo b/locale/zh_Hans/LC_MESSAGES/django.mo index 1d1227f8092b70c68bb692fb532759090142aa83..3e559018804034a297286bed7c8c6828714c49c4 100644 GIT binary patch literal 59480 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 N=QYFgZu%C+{{tJMi$wqc delta 16954 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�tCHYlAK z8#*f1&hb0|KTm9y89V9CAQL{NbWo(3HYF~vdrH*( zI^{hn^D@#pK;Md&1`1EXVoyHW-T!nW*;_N=7eW@<~Gh@qUPT- zqZV|_l@>SNYc?&ck-2H%;-EqfPq+5l8|_I-G#CBV^EjiU#wVr3nSU;-W+uH77W`B( z($x5?Sl7I~IK4z%V$>-0=)_0y%)0r^3d^ns<#EQPb3oDRv!KJn#QXz470B$dJSZs0 zF&le?>9b|hR-CDlp6X3WjN;|wRUE@(U#D|)ofmjxIiE;Ry@>h|^-c9vb$#_3)@e}B zQ?FiR<0jA4&*UOlWGfmb#-vBZ zcHj1RkCLysQ4Xt8X6Nmc4IgxO3;k+^mK3ZXQ{1 zd(NV)mHYkkH)fwanf2P%thEOz-Z?SNM7&nj9gpS9I|v2%e*-qj%UyIrS(3T7?a@1MQ;*8D?R z8Pm+V-P3c=p5@Ep)msA151W+zqs^cDr(#byks(;-MH+J*Lo*Nm{9sl72ZrMCM5@G5e?Once;&@(` zs5m~Jo!dt`x2I=h?>o%@vfi9-&K%v@<#1;9$=%s=GW~N`WpCQyKepobj2)cr?TmT; zB`g2$NBriIU3LKE-u^nzkAKUW|6kik=hlkVJajyQH;*6wzu$B-;&{pDZtdRv*H_$=y=h_OU!Uq! zPu9GQ>{nJX`ct3x|NXjWrXBAVWFDP(#yop6By2s>MnRY77966O#KI_0H=700#MlCmU2Sd4;?2K7v-06~;`%kx} z^E3BM{j*g}$+Is7@0)#VSlg@-d``D`!s14 ipZI?&!l#3*yLY#auO{}4xt_HvKV4X diff --git a/locale/zh_Hans/LC_MESSAGES/django.po b/locale/zh_Hans/LC_MESSAGES/django.po index 1b86621df..e52dfc4f5 100644 --- a/locale/zh_Hans/LC_MESSAGES/django.po +++ b/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-17 18:03+0000\n" -"PO-Revision-Date: 2021-11-17 18:42\n" +"PO-Revision-Date: 2021-11-29 09:31\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Chinese Simplified\n" "Language: zh\n" @@ -184,7 +184,7 @@ msgstr "Español(西班牙语)" #: bookwyrm/settings.py:168 msgid "Galego (Galician)" -msgstr "" +msgstr "Galego(加利西亚语)" #: bookwyrm/settings.py:169 msgid "Français (French)" @@ -192,11 +192,11 @@ msgstr "Français(法语)" #: bookwyrm/settings.py:170 msgid "Lietuvių (Lithuanian)" -msgstr "" +msgstr "Lietuvių(立陶宛语)" #: bookwyrm/settings.py:171 msgid "Português - Brasil (Brazilian Portuguese)" -msgstr "葡萄牙语-巴西(巴西的葡语)" +msgstr "Português - Brasil(巴西葡萄牙语)" #: bookwyrm/settings.py:172 msgid "简体中文 (Simplified Chinese)" @@ -906,12 +906,12 @@ msgstr "%(username)s 想要阅读 %(username)s finished reading %(book_title)s" -msgstr "" +msgstr "%(username)s 完成了 %(book_title)s 的阅读" #: bookwyrm/templates/discover/card-header.html:18 #, python-format msgid "%(username)s started reading %(book_title)s" -msgstr "" +msgstr "%(username)s 开始阅读 %(book_title)s" #: bookwyrm/templates/discover/card-header.html:23 #, python-format @@ -1395,11 +1395,11 @@ msgstr "导入状态" #: bookwyrm/templates/import/import_status.html:13 #: bookwyrm/templates/import/import_status.html:27 msgid "Retry Status" -msgstr "" +msgstr "重试状态" #: bookwyrm/templates/import/import_status.html:22 msgid "Imports" -msgstr "" +msgstr "导入" #: bookwyrm/templates/import/import_status.html:39 msgid "Import started:" @@ -1407,36 +1407,36 @@ msgstr "导入开始:" #: bookwyrm/templates/import/import_status.html:48 msgid "In progress" -msgstr "" +msgstr "正在进行" #: bookwyrm/templates/import/import_status.html:50 msgid "Refresh" -msgstr "" +msgstr "刷新" #: bookwyrm/templates/import/import_status.html:71 #, python-format msgid "%(display_counter)s item needs manual approval." msgid_plural "%(display_counter)s items need manual approval." -msgstr[0] "" +msgstr[0] "%(display_counter)s 项需要手动批准。" #: bookwyrm/templates/import/import_status.html:76 #: bookwyrm/templates/import/manual_review.html:8 msgid "Review items" -msgstr "" +msgstr "审阅项目" #: bookwyrm/templates/import/import_status.html:82 #, python-format msgid "%(display_counter)s item failed to import." msgid_plural "%(display_counter)s items failed to import." -msgstr[0] "" +msgstr[0] "%(display_counter)s 项导入失败。" #: bookwyrm/templates/import/import_status.html:88 msgid "View and troubleshoot failed items" -msgstr "" +msgstr "查看并排查失败项目" #: bookwyrm/templates/import/import_status.html:100 msgid "Row" -msgstr "" +msgstr "行" #: bookwyrm/templates/import/import_status.html:103 #: bookwyrm/templates/shelf/shelf.html:141 @@ -1446,7 +1446,7 @@ msgstr "标题" #: bookwyrm/templates/import/import_status.html:106 msgid "ISBN" -msgstr "" +msgstr "ISBN" #: bookwyrm/templates/import/import_status.html:109 #: bookwyrm/templates/shelf/shelf.html:142 @@ -1456,7 +1456,7 @@ msgstr "作者" #: bookwyrm/templates/import/import_status.html:112 msgid "Shelf" -msgstr "" +msgstr "书架" #: bookwyrm/templates/import/import_status.html:115 #: bookwyrm/templates/import/manual_review.html:13 @@ -1480,11 +1480,11 @@ msgstr "状态" #: bookwyrm/templates/import/import_status.html:130 msgid "Import preview unavailable." -msgstr "" +msgstr "导入预览不可用。" #: bookwyrm/templates/import/import_status.html:162 msgid "View imported review" -msgstr "" +msgstr "查看已导入的书评" #: bookwyrm/templates/import/import_status.html:176 msgid "Imported" @@ -1492,28 +1492,28 @@ msgstr "已导入" #: bookwyrm/templates/import/import_status.html:182 msgid "Needs manual review" -msgstr "" +msgstr "需要手动批准" #: bookwyrm/templates/import/import_status.html:195 msgid "Retry" -msgstr "" +msgstr "重试" #: bookwyrm/templates/import/import_status.html:213 msgid "This import is in an old format that is no longer supported. If you would like to troubleshoot missing items from this import, click the button below to update the import format." -msgstr "" +msgstr "此导入所用格式已不再受支持。 如果您想要在此次导入中排查缺失的项目,请点击下面的按钮来更新导入格式。" #: bookwyrm/templates/import/import_status.html:215 msgid "Update import" -msgstr "" +msgstr "更新导入" #: bookwyrm/templates/import/manual_review.html:5 #: bookwyrm/templates/import/troubleshoot.html:4 msgid "Import Troubleshooting" -msgstr "" +msgstr "导入排查" #: bookwyrm/templates/import/manual_review.html:21 msgid "Approving a suggestion will permanently add the suggested book to your shelves and associate your reading dates, reviews, and ratings with that book." -msgstr "" +msgstr "批准建议后,被提议的书将会永久添加到您的书架上并与您的阅读日期、书评、评分联系起来。" #: bookwyrm/templates/import/manual_review.html:58 #: bookwyrm/templates/lists/curate.html:57 @@ -1522,7 +1522,7 @@ msgstr "批准" #: bookwyrm/templates/import/manual_review.html:66 msgid "Reject" -msgstr "" +msgstr "驳回" #: bookwyrm/templates/import/tooltip.html:6 msgid "You can download your Goodreads data from the Import/Export page of your Goodreads account." @@ -1530,31 +1530,31 @@ msgstr "您可以从 open an issue if you are seeing unexpected failed items." -msgstr "" +msgstr "如果您看到意外失败的项目,请联系您的管理员或 发起一个 issue。" #: bookwyrm/templates/landing/about.html:7 bookwyrm/templates/layout.html:230 #, python-format