From 168a2488e2bbcbdd5198a4f6d1a75f370365fe68 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Mon, 15 Nov 2021 20:59:22 +1100 Subject: [PATCH 01/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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 a0093a8a2e63c42fa89e09c0d1061b8e4f41dda5 Mon Sep 17 00:00:00 2001 From: Joachim Date: Mon, 22 Nov 2021 00:25:47 +0100 Subject: [PATCH 18/42] Add status type filters --- bookwyrm/forms.py | 23 ++++++++++++ bookwyrm/models/user.py | 9 ++++- bookwyrm/templates/feed/feed.html | 21 +++++++++++ .../widgets/checkbox_select_horizontal.html | 11 ++++++ .../checkbox_select_horizontal_option.html | 4 +++ bookwyrm/views/feed.py | 35 +++++++++++++++++-- 6 files changed, 100 insertions(+), 3 deletions(-) create mode 100644 bookwyrm/templates/widgets/checkbox_select_horizontal.html create mode 100644 bookwyrm/templates/widgets/checkbox_select_horizontal_option.html diff --git a/bookwyrm/forms.py b/bookwyrm/forms.py index 847ca05c0..fc8f018d0 100644 --- a/bookwyrm/forms.py +++ b/bookwyrm/forms.py @@ -174,6 +174,29 @@ class UserGroupForm(CustomForm): fields = ["groups"] +class CheckboxSelectMultipleHorizontal(widgets.CheckboxSelectMultiple): + template_name = "widgets/checkbox_select_horizontal.html" + option_template_name = "widgets/checkbox_select_horizontal_option.html" + + +class FeedStatusTypes(CustomForm): + class Meta: + model = models.User + fields = ["feed_status_types"] + help_texts = {f: None for f in fields} + labels = {"feed_status_types": ""} + widgets = { + "feed_status_types": CheckboxSelectMultipleHorizontal( + choices=[ + ("review", _("Reviews")), + ("comment", _("Comments")), + ("quotation", _("Quotations")), + ("everything", _("Everything else")), + ], + ), + } + + class CoverForm(CustomForm): class Meta: model = models.Book diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index d7945843f..7ca92e4f2 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -4,7 +4,7 @@ from urllib.parse import urlparse from django.apps import apps from django.contrib.auth.models import AbstractUser, Group -from django.contrib.postgres.fields import CICharField +from django.contrib.postgres.fields import ArrayField, CICharField from django.core.validators import MinValueValidator from django.dispatch import receiver from django.db import models, transaction @@ -128,6 +128,13 @@ class User(OrderedCollectionPageMixin, AbstractUser): show_suggested_users = models.BooleanField(default=True) discoverable = fields.BooleanField(default=False) + # feed options + feed_status_types = ArrayField( + models.CharField(max_length=10, blank=False), + size=8, + default=list(["review", "comment", "quotation", "everything"]), + ) + preferred_timezone = models.CharField( choices=[(str(tz), str(tz)) for tz in pytz.all_timezones], default=str(pytz.utc), diff --git a/bookwyrm/templates/feed/feed.html b/bookwyrm/templates/feed/feed.html index a6175199d..9783e2126 100644 --- a/bookwyrm/templates/feed/feed.html +++ b/bookwyrm/templates/feed/feed.html @@ -16,6 +16,27 @@ + +
    + + What to display? + {% if settings_saved %} + Saved! + {% endif %} + + + {% csrf_token %} +
    + {{ feed_status_types_form }} +
    +
    + +
    + +
    + {# announcements and system messages #} {% if not activities.number > 1 %}
    {% if request.user.show_goal and not goal and tab.key == 'home' %} diff --git a/bookwyrm/views/feed.py b/bookwyrm/views/feed.py index bd39b0834..7cf56d48f 100644 --- a/bookwyrm/views/feed.py +++ b/bookwyrm/views/feed.py @@ -59,6 +59,7 @@ class Feed(View): "streams": STREAMS, "goal_form": forms.GoalForm(), "feed_status_types_options": FeedFilterChoices, + "allowed_status_types": request.user.feed_status_types, "settings_saved": settings_saved, "path": f"/{tab['key']}", }, diff --git a/bookwyrm/views/updates.py b/bookwyrm/views/updates.py index 726145626..2bbc54776 100644 --- a/bookwyrm/views/updates.py +++ b/bookwyrm/views/updates.py @@ -22,4 +22,9 @@ def get_unread_status_count(request, stream="home"): stream = activitystreams.streams.get(stream) if not stream: return JsonResponse({}) - return JsonResponse({"count": stream.get_unread_count(request.user)}) + return JsonResponse( + { + "count": stream.get_unread_count(request.user), + "count_by_type": stream.get_unread_count_by_status_type(request.user), + } + ) From 8712b2fdab12dc4ab059575432d6fef62011485e Mon Sep 17 00:00:00 2001 From: Joachim Date: Wed, 24 Nov 2021 19:02:07 +0100 Subject: [PATCH 27/42] ESLint --- bookwyrm/static/js/bookwyrm.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bookwyrm/static/js/bookwyrm.js b/bookwyrm/static/js/bookwyrm.js index b45578000..a5f7d7e96 100644 --- a/bookwyrm/static/js/bookwyrm.js +++ b/bookwyrm/static/js/bookwyrm.js @@ -127,6 +127,7 @@ let BookWyrm = new class { // This concerns 'review', 'quotation', 'comment' count = allowedStatusTypes.reduce(function(prev, currentKey) { const currentValue = count_by_type[currentKey] | 0; + return prev + currentValue; }, 0); @@ -143,6 +144,7 @@ let BookWyrm = new class { function(prev, currentKey) { const currentValue = count_by_everything_else[currentKey] | 0 + return prev + currentValue; }, count From 0001d6e92a2c4107188c5b7cdf618df35fcfc0ae Mon Sep 17 00:00:00 2001 From: Joachim Date: Wed, 24 Nov 2021 19:04:14 +0100 Subject: [PATCH 28/42] PyLint --- bookwyrm/models/user.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index f4183812b..4d98f5c57 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -37,6 +37,7 @@ FeedFilterChoices = [ def get_feed_filter_choices(): + """return a list of filter choice keys""" return [f[0] for f in FeedFilterChoices] From 5f81be74cb3beb0a8392d7f96e55b86d3ae7726f Mon Sep 17 00:00:00 2001 From: Joachim Date: Wed, 24 Nov 2021 20:52:30 +0100 Subject: [PATCH 29/42] Add test --- bookwyrm/tests/views/test_updates.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/bookwyrm/tests/views/test_updates.py b/bookwyrm/tests/views/test_updates.py index 27181fc95..d510fba63 100644 --- a/bookwyrm/tests/views/test_updates.py +++ b/bookwyrm/tests/views/test_updates.py @@ -50,10 +50,13 @@ class UpdateViews(TestCase): request = self.factory.get("") request.user = self.local_user - with patch("bookwyrm.activitystreams.ActivityStream.get_unread_count") as mock: - mock.return_value = 3 - result = views.get_unread_status_count(request, "home") + with patch("bookwyrm.activitystreams.ActivityStream.get_unread_count") as mock_count: + with patch("bookwyrm.activitystreams.ActivityStream.get_unread_count_by_status_type") as mock_count_by_status: + mock_count.return_value = 3 + mock_count_by_status.return_value = {"review": 5} + result = views.get_unread_status_count(request, "home") self.assertIsInstance(result, JsonResponse) data = json.loads(result.getvalue()) self.assertEqual(data["count"], 3) + self.assertEqual(data["count_by_type"]["review"], 5) From 7d24568dcda7cbec7af3647ab33b46e7b9fab457 Mon Sep 17 00:00:00 2001 From: Joachim Date: Wed, 24 Nov 2021 20:54:53 +0100 Subject: [PATCH 30/42] Update test_updates.py --- bookwyrm/tests/views/test_updates.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/bookwyrm/tests/views/test_updates.py b/bookwyrm/tests/views/test_updates.py index d510fba63..e7b466ccf 100644 --- a/bookwyrm/tests/views/test_updates.py +++ b/bookwyrm/tests/views/test_updates.py @@ -50,8 +50,12 @@ class UpdateViews(TestCase): request = self.factory.get("") request.user = self.local_user - with patch("bookwyrm.activitystreams.ActivityStream.get_unread_count") as mock_count: - with patch("bookwyrm.activitystreams.ActivityStream.get_unread_count_by_status_type") as mock_count_by_status: + with patch( + "bookwyrm.activitystreams.ActivityStream.get_unread_count" + ) as mock_count: + with patch( + "bookwyrm.activitystreams.ActivityStream.get_unread_count_by_status_type" + ) as mock_count_by_status: mock_count.return_value = 3 mock_count_by_status.return_value = {"review": 5} result = views.get_unread_status_count(request, "home") From c704c7eb8f485e0776577718142d29e8f150e500 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Thu, 25 Nov 2021 07:38:08 +1100 Subject: [PATCH 31/42] 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 32/42] 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 33/42] 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 34/42] 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 35/42] 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 36/42] 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 66e414be3ca8b4de8426d3acc49608a7bd614fae Mon Sep 17 00:00:00 2001 From: Chad Nelson Date: Tue, 30 Nov 2021 17:21:28 -0500 Subject: [PATCH 37/42] 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 38/42] 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 2602ae42b02c243e4550cda7407eec86009aaa6e Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Wed, 1 Dec 2021 20:07:52 +1100 Subject: [PATCH 39/42] add translation strings - add logic when default shelves used - add trans strings in a few spots they were missing --- bookwyrm/templates/directory/directory.html | 4 ++-- bookwyrm/templates/get_started/book_preview.html | 9 +++++++-- bookwyrm/templates/search/book.html | 2 +- bookwyrm/templates/shelf/shelf.html | 5 ++++- bookwyrm/templates/snippets/shelf_selector.html | 9 ++++++++- bookwyrm/templates/user/user.html | 11 ++++++++--- 6 files changed, 30 insertions(+), 10 deletions(-) diff --git a/bookwyrm/templates/directory/directory.html b/bookwyrm/templates/directory/directory.html index 9753c4c0f..c3ddb3c5c 100644 --- a/bookwyrm/templates/directory/directory.html +++ b/bookwyrm/templates/directory/directory.html @@ -18,7 +18,7 @@

    {% csrf_token %} - +

    {% url 'prefs-profile' as path %} {% blocktrans with path=path %}You can opt-out at any time in your profile settings.{% endblocktrans %} @@ -28,7 +28,7 @@

    {% trans "Dismiss message" as button_text %}
    diff --git a/bookwyrm/templates/get_started/book_preview.html b/bookwyrm/templates/get_started/book_preview.html index 893e7593a..8a20d0d77 100644 --- a/bookwyrm/templates/get_started/book_preview.html +++ b/bookwyrm/templates/get_started/book_preview.html @@ -4,9 +4,14 @@
    diff --git a/bookwyrm/templates/search/book.html b/bookwyrm/templates/search/book.html index 704f055bf..66adb8c83 100644 --- a/bookwyrm/templates/search/book.html +++ b/bookwyrm/templates/search/book.html @@ -39,7 +39,7 @@
    diff --git a/bookwyrm/templates/shelf/shelf.html b/bookwyrm/templates/shelf/shelf.html index 01d41aa07..0184ab1d8 100644 --- a/bookwyrm/templates/shelf/shelf.html +++ b/bookwyrm/templates/shelf/shelf.html @@ -80,7 +80,10 @@

    - {{ shelf.name }} + {% if shelf.identifier == 'to-read' %}{% trans "To Read" %} + {% elif shelf.identifier == 'reading' %}{% trans "Currently Reading" %} + {% elif shelf.identifier == 'read' %}{% trans "Read" %} + {% else %}{{ shelf.name }}{% endif %} {% include 'snippets/privacy-icons.html' with item=shelf %} diff --git a/bookwyrm/templates/snippets/shelf_selector.html b/bookwyrm/templates/snippets/shelf_selector.html index ca5a39f6e..2bb5e2536 100644 --- a/bookwyrm/templates/snippets/shelf_selector.html +++ b/bookwyrm/templates/snippets/shelf_selector.html @@ -13,7 +13,14 @@ - + {% endfor %} diff --git a/bookwyrm/templates/user/user.html b/bookwyrm/templates/user/user.html index 36e646aa9..9e75cefc0 100755 --- a/bookwyrm/templates/user/user.html +++ b/bookwyrm/templates/user/user.html @@ -29,8 +29,13 @@
    {% for shelf in shelves %}
    -

    {{ shelf.name }} - {% if shelf.size > 3 %}({% blocktrans with size=shelf.size %}View all {{ size }}{% endblocktrans %}){% endif %}

    +

    + {% if shelf.name == 'To Read' %}{% trans "To Read" %} + {% elif shelf.name == 'Currently Reading' %}{% trans "Currently Reading" %} + {% elif shelf.name == 'Read' %}{% trans "Read" %} + {% else %}{{ shelf.name }}{% endif %} + {% if shelf.size > 3 %}({% blocktrans with size=shelf.size %}View all {{ size }}{% endblocktrans %}){% endif %} +

    {% for book in shelf.books %}
    @@ -49,7 +54,7 @@ {% if goal %}
    -

    {% now 'Y' %} Reading Goal

    +

    {% now 'Y' %} {% trans 'Reading Goal' %}

    {% include 'snippets/goal_progress.html' with goal=goal %}
    {% endif %} From 8e6619294f1864b83a51457a9475567eace42055 Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Wed, 1 Dec 2021 21:02:25 +1100 Subject: [PATCH 40/42] oclc server sure is slow --- bookwyrm/utils/isni.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/utils/isni.py b/bookwyrm/utils/isni.py index a35c3f249..65d20c85c 100644 --- a/bookwyrm/utils/isni.py +++ b/bookwyrm/utils/isni.py @@ -19,7 +19,7 @@ def request_isni_data(search_index, search_term, max_records=5): "recordPacking": "xml", "sortKeys": "RLV,pica,0,,", } - result = requests.get("http://isni.oclc.org/sru/", params=query_params, timeout=10) + result = requests.get("http://isni.oclc.org/sru/", params=query_params, timeout=15) # the OCLC ISNI server asserts the payload is encoded # in latin1, but we know better result.encoding = "utf-8" From 2ec6e566986de5ea4c85cf2ec43e002d58a9d4ac Mon Sep 17 00:00:00 2001 From: Hugh Rundle Date: Thu, 2 Dec 2021 07:28:35 +1100 Subject: [PATCH 41/42] blocktrans for reading goal --- bookwyrm/templates/user/user.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bookwyrm/templates/user/user.html b/bookwyrm/templates/user/user.html index 9e75cefc0..ccc4a44ea 100755 --- a/bookwyrm/templates/user/user.html +++ b/bookwyrm/templates/user/user.html @@ -54,7 +54,8 @@ {% if goal %}
    -

    {% now 'Y' %} {% trans 'Reading Goal' %}

    + {% now 'Y' as current_year%} +

    {% blocktrans %}{{ current_year }} Reading Goal{% endblocktrans %}

    {% include 'snippets/goal_progress.html' with goal=goal %}
    {% endif %} From 0794f1a28642a85ef4bbf382823d7c34fff5e2cc Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 2 Dec 2021 10:28:13 -0800 Subject: [PATCH 42/42] 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 zcmZ|W2YgjU-v99vO6WE8mP-vm2)#wB6zLs7dLWl1kVXn!Z|J?qP^3tcE=_{;Ca73Z zumG!AfE$8k*`>Ltxc|@ho?&J8dHv68C-0fx%$a)5Nz~`L@>$L^S918iEuL$I!}UrI z$Eko@N;pnJPRFSouBhXD-^6ih;SX363pRC}{8$CcV;wAoov{s$z+Sis>)~B2f>oP2 zPHAk29_)(U9LMLx+lr%Dk&27h5AR?NY~S3Ck45I@%)=_U9xLP9sEOUcviJxaVMwGq zU?;3jc?4F)+1LPgVG`pz*8&;G>He(aBvNq_`(o`Djx!iDa58>_FXDif?n>W8t^6)F z#(b?DN1N8#8i!hd!Q6NZL-36C3k+s_C!0)Oyn}`CUzi7jTa&Obs$9~RE8223)P1#) z6LT74L2Pd09Wfu}o~R>u(U#+^sp!)UFOeyX^RWP~#`?GwHG#`m6u(8S~;|-j%Uz=pQCQLkJ^!-w(dYhPyelu!9yHEq1uzqOcSFjxMA5lkP#yL|ZS6?Z%o9-qPOjZ-;Ip6ei*9b zI9nc%8hDy5FF~z%4Qe7gZT(xQtv-jrcoj9V?@{gVqCQ+f&%6DXLiJk}OEbPxpNt-= z&Ztl7Nc7^%sEOUgz}aFR%70*P%+<*~s{GiDayit|^tBE}wU5EPn1njoiKq$8MV~S& zZN(PMMfo6VMMqI9`4qL{A5atd1vSub)?A(4a$!_`8Pvq9+j2eBz%6aOJL*{&*qQy; z%u@+yMY~a3b^!J8y^VSC66V9NQ7iIWe?hf>fZF0*UEKPzsQxOW?hnI!SP%7VL|S`v zVgI$_kp%Q`#GqC%2X&UqQNOj;q6afk1Ac+(_y%gCKcjZ+G3vgMuI_}&p;lfOwUe!F zxi@M;Q9d&2aI6hX#sZXQ+W1mb#~V;9e+xD6Nz_W-!~FO+)KU6T{oOwd;Yieq-azfd0bBmidJ(k)SFj-7My>cEYJlMG?#fGG z0m?OOxdGD7=d>rI-`o9A6G^mAa2q%os2x~}g>V~cg$GevdJa|pC2Ar+VIlkjwZ-{+ zxa~`zCRP=-lMS)5-v4LGgb^5udWdGBwrCBiqYbEu?Ll>L2=#Ztd#C}b^mLD)Hfn`U zQSI6xO`N`{XKOPS#L`|q0>WBuRo`Dgl ziKk%|oM-EIqxwC7y8jgFC_lkU_yzj375B)f!{1Ri1od{yg-{)bAb-X=HBo0g0*he+ z>VxG&?a*557V93=xBd{SpAWDCev9ho_ulNkGI{&BTUin{kxZpFU<%ib1ec6AlxLjZN{jPzU>GN0%hoDwC2Q|>^ zsE*E}+I@`L!5>f)zm3}BJE#RbL@h8^Ket^m)cs{q6RqkaGlooUjKEc>j^0D9{A1Mb zhKpDPf5f8r8#crO{oOxCTcbM6KuusCYM`a4iL60=a(7?|ort-HVBZVTEKVKzhh;}k1_E6 zhYoTF2t(aa54D08xER}EZM=k<(7&yD_zY@mi=ZB=5~%xXq83os+7`8AeNp|7Ks~(i zgV}$b-9`fH;0@d0G^*o|P!G*#s1-a!O(6FWx5Gl1lX5vsz)Gl{T4-H?YQG-!)@(yf z2D*Z};ZM|=1`l-yE`jQ}Dyn^LEQ?Jr413`-I1%*;-h%4qJgWVt zs0my}?aYs;hxZR3nNnm54s(A=R7LGbJJeS7Kuu&2s>4{+jmfC3&cM<*$JTE^O?11h z-;bKWVH~5MU3?TMo@l??Xh;0`}&MSeFtV^1ze5%Ly~jI z);~h+T;Y-KYgQJuL!qdhtATo^B2W`)7|_R4PDU&3fNIziwc-J&hcX6r!xYqtW}@1! zwehW}_Iqvl6b8;7wKJchCU(u1vr#+rP%^%gbCla*QPe=?unJbS@s6kuM=#WhUcfLM zifTX0x)}9vtwJ5ePShD6K~3a>t^WqKlYd8_zDz;U?n+Cc&Z-uwqb8^UI$=fZjWsX{ zwStwXmA;O88{R+-_%3R|uTeX78?{6CkUue;oL=|enDp~<{@n=7C%|*)Tt@v;X)@Y< z8{%*><$0*rD_4yBFO}+{28u#;JOQiY9Mk}NP|wt#s3Ytg>wdt7q9#5cbtJ1|*?(m= z6G*{5$T!CE#JTaQsFln??aT_)z?(1>52HG~jKO#lwV9^EL+Lpct+<2dYr zr+qe1c&xkfA((@TC8&;VHiB;m=f6JAEc`0wl#<(8~ViwlKd#L&f3GM=_ zV|&W=kv}0E-*}t(2>TN7B)WfurlB5^Jy;0Opa(BtZoGr)_yKBVf7*C(lDiWH@fqSF zsP?UGxdSevJPx_v=j2M}>qejus>4{UqXwug-GF+yw&4gogBq~%IClraQTGkQra`=} zsNa4YI8WVo1oPu1TfT;R=zqm9#&-&)y1#ZCVIwM{Q7c}J<#9U}#&cK~FQEp=k>-Ag z$|KLM(+u?xuE(nQ4(fZ6ZOi}0z-yiEK0_U)-v1$F^hHa-YPbX|;Xw?;&#@u?j*RWp z9q;mu88f`$Q>~LHv;XQ~8Ua1EORVdxJFSPT=d7P$ zaoS%)P3#}29df3)XWaWvme*rF%5Pv3 z{KnRYOm*AWK%I3%R6hf(!%zczZ8-_+P#%w(=oZw(ulQ_(Z0jBCL)45PV`VJ-l6!Xb zPy=;Ft)Q1J4@50sIBEg$w(LWl`9fRXYCV9u-*=jfw(2~p<1bM&{{}U~EDXViwm$#M zZoC+(ePtYkHEnzb($q1wz8E{Ke#&4;wX-|k3YoCa=|Dy^>4Tc-Alo3-ZQx8sbuh=4 zSK0b4sENK|<8PrBa@N*=hU)jSEq{mFp)6azhsE{&|7I%+Ww;H>p*jk~ve?*`d!kk_ z6t(hH>tyRR)Btm>E3BKX`>ZFdA4tY_z9OTQ-@vB$2S#9{Y3>JO6l%cP)jx=aG`>&2mlF`a4pgL$^ZEfvleGxU$(O3z6sQcDqKRk%) zFW(Gz>x-hwWo$XrmcvjBjF`dxtHDrP5p5l7O+ig)5^BY>ZG5?nueIeJSdRLAHvXaY zGU~pYwtUz6Z)?Gsfro%|p6L!$8}<4$w|2Af;aHw{JhsHSsENOa8sHPuM8CFX+xP=i zyPUJ!9m$VsR~$7?sE>?(J2k+Z*b?>ItS#!sE~p!NTZh^BSgcGu#m1N0_$Jg&?7*sc z&eq?u-bcMnL9^Y7`-+j#K%uB_eGSxr&!QfZPSzo)*DcxBPqxlMtz@|^Z@1-xsMqg2 z2IHqT{uQeK+sMxOoQGue>owOL_h}D7HE4pGX*&$YzP3CFwL@d9shFGcRD2GnquRfV zdRRZUWxw@j)P(P0LB0RMbKL<$tR7T@I=0*fb;jMTgKd2rYDcD`2AqwW_##`s#+LV3 zk6F*7`ujpX3kUbPJlq6R#UTFLu1eg*Zke`m`<3*8R$q6R90T3JQZebrH~ zX=5yisi-5(Kn-kcdDlXnKY^13^5HwE4lba+aNk-VV?oLl7P*F7o1g}6hxxH9s=pUd z0}iz&TW4Su;w!N>9`%t?$62VIxQDv2$YM8M1y!zVea^=FqdFLgddinz816vr)Mu!H z?xGe}a*6w02t}16Q4{sGC!-Z~wSm62!5~|Xw&k(5oQ?x&KNTC|m$p9NQn$kp)I!Q( z5p04*u_Nk824ELlfh^qTd{0Ib_{I7Fwc^LtqOZ6eRYmPoLu(t<3c90y3H3vL`Nr7z zEL8i2wth8g!uzl&-oRkJ|MvqK{=7!rkYkyBs8B1Zh#IIls=kdacgI4M`=J&v(#FT2 zUb}Hv4QF9#+=Xg?7WJ%rhJpY7|1}wPaNYW&Dk$HzK0*!b7rv&c7=mxv_y^X{P`^|zV+j6^5m;ooJF!-%fqJ7B zG!XR{)CjDJlTj0X9rY0IU(WvPH9JN?Pw`bOj(2Ut+$-E0ileqN6m?^JYY$sL5H+wD zyJ9@n#UrSRWZU|GSbs$=;LjEI{V%@K9jL6ehP9!!4c6g??x=yL*!Xno64b=jVHj>h z9mxgM1inG->`m1D_puND?jxfu>9NYK7>p{9MD0Wp>c;6dzRbD-^@-k%>hO|{Uq!Xg zvhjzg2|UJHL$U6wC=GULv?%}^_pEqJqvejeW}&%imRgfsc&tC zy00s0qJvQj8;MNJ=cL<;m#i~Uug3z^maas7(KezwI%~az>hL;hz}u+y4{g1(#*G(6 z?Lb8wg4Iz+Gd&>Zzm$wRSdW_78@7B3HNZz$4=-UD=3L8PMfeQrw_h6S**J_H(2r$Q zzs~)Bv`3XkU~8O&I*OxMgz=qE$!MVOP&3W4<-eo;CVYUJ;3I4BYi>Ej>OoDsjF_yxT8{Cd+qqev? zYQR3|!9f^~Q&0nLMNRAgR>Y$leC~jk31|Yppc*`SpSHpg@vi2E=J^KNp_ zej;iD+feb-SPScJb{&MOpM`pe*Q4H^y*@Hs$Xvp~Sn+jtWs^`3-BQ$q-nL$_evPrj zv#~$+-r}~~Zarvy8?~?tSQUS;@!VV8o$wVWqb(|nYS_+Jyns5}q1X>&tS79+wz>bp zaWra6*P+_Kj{2Rj2X)^!*cQ47)rlOveL#W^HA7MCtgTWZQ%e4^Zqg*0T=KL$!Ky}p2>)P@#Y)Cm4d*V79 z{~2{u4^d~?=MDGYn2tmZv=+UE7Lm8b3)=EsUQuDW0Kw&>$9li@Z$5>k~Tk)ujkhL zoYQ2&2NPQ^JBz;MWA^k|2MOv=LTwBP$ONt?1f%|%r ze;My#Zc-=WiIm4EpTn;IEWy$QHj!Q>>AH^vXsGx91@bFMc_{NdIk(8CVIrvvvAuYP zn66JqWbz+U|G(E78~DK*MZ3d#{yNw|V{U3|Z;YW*U%w~U8^r%X8b-W7*0$|b z{~39GCvssu>NCkdgT+bu?*UI=qbL+0_7K-#klw#;6l&9WD1nWnHssUs$u*8lYtjvp zhxjnkcJiO#CJe?tc!zY7^bzSeu}@GRE?vJ+KJ8|mjkuk%uE6v6Ihlr}{0ywC2I-D% zpmG-*S6#*^}r z{8ik4Zyp>?ZkQv^_*RLgMl{ zx%oMX23;{*A+9f70zbdu=QYyHHntT1MjA*5OGyJrf7rU3)&W+rj(YvB*VThGkMt3- zV)%#7e-MKgBB1MC($_Y>mV9T@Wa?ieRkZQm#B@DRIh)j-x=dV8Y*C=b{n3F~BT``- zn~If5^J%Z^9CcIl{y%F2ZrJ@fhj>}yy-CAtMQ36KDbGh;=ScG?7bg8kJ{G^mY1Ee> zA4+<1{f*dX6fR+I;zewo?*oFGM1LGda5t8E>c$}QRfy@DX5(+U#lXLYyUV@07GY`X zhm-$`e5j2#raYDSDQrS)5~%^HJLzhW{r&Sf1^!M5Tmxym!R8NIPf%Zjbd+*OQajpA zr@V?ZlKj)xT?+c!@KfprQ&$Tku)+VdOQKDR-oKy8ETQr}bZn!GWJhpgEz0%rE6No} zd(|mPSGT7+jI*)I#QKn;sSm~kj8tQ;DAK-l&8Pi)-KfB*cIPAAey7#1hZ zq59vb>peVW^Uu*{Ecqs=|2Ga@5hSn8pQWydZL7L_`eCoYB=%DoLi&*49Bz7^ltkJ} zIg6A*`hfbXO2peKM!pNF4*5=~YckHD{w30A@~esc6Z?_AC0z})a(_&vTtVkQ_Nm}~ z^5sc6sMHmSv*@f1&UQnApZYscS5fMwVLIs<+AO48hWz)WFDReEtvDYOZ~^r{k>5pL zSBTF4I)y@RIq;9v%J!h)LfhyvRL%^6v*-I z#|O0e4)>A1AdRKn1bmJ7lPf3rx1TB>a4URHJ{qs2BK}EBtWWHHTW(I>Oq;Jn{2j{I zp6aL<`3BUFB;_Jap-mxDds1FfE7F_x{xMjZ)QgnJeM|KI?V*r|!ppYPD%QvNvCXGq z0v(ORG#m4C-+A)?L|qNZCy}B^Z<4Cfeh)smc09@8DB`V1oAv3{wTg6|RFj)@wXpFq zl!sCdAvGtxPW)BWmEXmA0mEr`3HxFisVVt>*n(7ybd39cAT=XBrfx7PmAJ1CKPnMy zgt4frCN{yo7>w&}ycum4QcfW~ef^#K!=z=lo$6j9|NT?tC+%C>OgZ}E@;Q}h^b5Jx z1mbWVsXF;*u$1j!HCCgnt2uS;D7Pa2fbQccPLV@eOKn>lUZ zxuAl?QoSDfOiNESZ3ivR=}k;Cy9bAx>w{~WvO|iQrbAYkW<#5rNkhAsYeQR>sloi~ zM5jcJPIKCOa)`%*mL{yl0 zK5B@`j4EFsG1{Y5I~@|EP2G`|@~{uukIX(Jj|An9bULQQG3EG4rgL;lQ`{R`GmeFO zQ@pjEPI1v*&*-@LG;d0(({<*1~DWX(4^@<}DDPWkV0Tzot`>`Au0MA(+zX!HK)<|ZU2#>|Wf$>-_g9hdG+ zWh+m_EFat@Jt0|#$t*o1lhV?X5>t-5$Xpy#$CMwN&kP+~xOS5n(L``Gi#*n4JzdBt<%RlKF&MAv>4yWgpXex+Lvu{^utplDk1q<�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