- {% trans "Edit List" as button_text %}
- {% include 'snippets/toggle/open_button.html' with text=button_text icon_with_text="pencil" controls_text="edit_list" focus="edit_list_header" %}
+
+ {% if request.user == list.user %}
+ {% trans "Edit List" as button_text %}
+ {% include 'snippets/toggle/open_button.html' with text=button_text icon_with_text="pencil" controls_text="edit_list" focus="edit_list_header" %}
+ {% endif %}
+ {% include "lists/bookmark_button.html" with list=list %}
- {% endif %}
diff --git a/bookwyrm/templates/snippets/fav_button.html b/bookwyrm/templates/snippets/fav_button.html
index 0670b4c5..bf181b1f 100644
--- a/bookwyrm/templates/snippets/fav_button.html
+++ b/bookwyrm/templates/snippets/fav_button.html
@@ -4,15 +4,27 @@
{% with status.id|uuid as uuid %}
{% with request.user|liked:status as liked %}
-
-
+{% if request.user.is_authenticated %}
+
+{% endif %}
+
{% if lists %}
{% include 'lists/list_items.html' with lists=lists %}
diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py
index 7facde3e..fa63e983 100644
--- a/bookwyrm/urls.py
+++ b/bookwyrm/urls.py
@@ -218,6 +218,9 @@ urlpatterns = [
# lists
re_path(r"%s/lists/?$" % USER_PATH, views.UserLists.as_view(), name="user-lists"),
re_path(r"^list/?$", views.Lists.as_view(), name="lists"),
+ re_path(
+ r"^list/bookmarks/?$", views.BookmarkedLists.as_view(), name="bookmarked-lists"
+ ),
re_path(r"^list/(?P\d+)(.json)?/?$", views.List.as_view(), name="list"),
re_path(r"^list/add-book/?$", views.list.add_book, name="list-add-book"),
re_path(
diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py
index bb7f9d3e..b016b46c 100644
--- a/bookwyrm/views/__init__.py
+++ b/bookwyrm/views/__init__.py
@@ -25,7 +25,7 @@ from .invite import ManageInvites, Invite, InviteRequest
from .invite import ManageInviteRequests, ignore_invite_request
from .isbn import Isbn
from .landing import About, Home, Landing
-from .list import Lists, List, Curate, UserLists
+from .list import Lists, BookmarkedLists, List, Curate, UserLists
from .list import bookmark, unbookmark
from .notifications import Notifications
from .outbox import Outbox
diff --git a/bookwyrm/views/list.py b/bookwyrm/views/list.py
index 14966bc2..e95ecd57 100644
--- a/bookwyrm/views/list.py
+++ b/bookwyrm/views/list.py
@@ -63,6 +63,25 @@ class Lists(View):
return redirect(book_list.local_path)
+@method_decorator(login_required, name="dispatch")
+class BookmarkedLists(View):
+ """bookmarked book list page"""
+
+ def get(self, request):
+ """display book lists"""
+ # hide lists with no approved books
+ lists = request.user.saved_lists.order_by("-updated_date")
+
+ paginated = Paginator(lists, 12)
+ data = {
+ "lists": paginated.get_page(request.GET.get("page")),
+ "list_form": forms.ListForm(),
+ "path": "/list",
+ }
+ return TemplateResponse(request, "lists/lists.html", data)
+
+
+@method_decorator(login_required, name="dispatch")
class UserLists(View):
"""a user's book list page"""
From f187d7ec2d77b2da2b20f939f867845193c72482 Mon Sep 17 00:00:00 2001
From: Mouse Reeve
Date: Mon, 23 Aug 2021 13:53:45 -0700
Subject: [PATCH 07/13] ignore vendor files in editorconfig
---
.editorconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.editorconfig b/.editorconfig
index d102bc5a..b7128419 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -32,7 +32,7 @@ indent_size = 2
max_line_length = off
# Computer generated files
-[{package.json,*.lock,*.mo}]
+[{vendor/*,package.json,*.lock,*.mo}]
indent_size = unset
indent_style = unset
max_line_length = unset
From fcd41aaf06b30c3db1cfc762d61c1bd58f914409 Mon Sep 17 00:00:00 2001
From: Mouse Reeve
Date: Mon, 23 Aug 2021 13:59:23 -0700
Subject: [PATCH 08/13] Add specific vendor file
---
.editorconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.editorconfig b/.editorconfig
index b7128419..f2e8a178 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -32,7 +32,7 @@ indent_size = 2
max_line_length = off
# Computer generated files
-[{vendor/*,package.json,*.lock,*.mo}]
+[{icons.css,package.json,*.lock,*.mo}]
indent_size = unset
indent_style = unset
max_line_length = unset
From 47dbcc3af07e0e5d37d88c94d5802e4db687543b Mon Sep 17 00:00:00 2001
From: Mouse Reeve
Date: Mon, 23 Aug 2021 14:15:19 -0700
Subject: [PATCH 09/13] Adds views test
---
bookwyrm/tests/views/test_list.py | 44 +++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/bookwyrm/tests/views/test_list.py b/bookwyrm/tests/views/test_list.py
index 988d8d4a..f76b6ac9 100644
--- a/bookwyrm/tests/views/test_list.py
+++ b/bookwyrm/tests/views/test_list.py
@@ -91,6 +91,50 @@ class ListViews(TestCase):
result.render()
self.assertEqual(result.status_code, 200)
+ def test_bookmarked_lists_page(self):
+ """there are so many views, this just makes sure it LOADS"""
+ view = views.BookmarkedLists.as_view()
+ with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
+ booklist = models.List.objects.create(name="Public list", user=self.local_user)
+ models.List.objects.create(
+ name="Private list", privacy="direct", user=self.local_user
+ )
+ self.local_user.saved_lists.add(booklist)
+ request = self.factory.get("")
+ request.user = self.local_user
+
+ result = view(request)
+ self.assertIsInstance(result, TemplateResponse)
+ result.render()
+ self.assertEqual(result.status_code, 200)
+ self.assertEqual(result.context_data["lists"].object_list, [booklist])
+
+ def test_bookmarked_lists_page_empty(self):
+ """there are so many views, this just makes sure it LOADS"""
+ view = views.BookmarkedLists.as_view()
+ with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
+ models.List.objects.create(name="Public list", user=self.local_user)
+ models.List.objects.create(
+ name="Private list", privacy="direct", user=self.local_user
+ )
+ request = self.factory.get("")
+ request.user = self.local_user
+
+ result = view(request)
+ self.assertIsInstance(result, TemplateResponse)
+ result.render()
+ self.assertEqual(result.status_code, 200)
+ self.assertEqual(result.context_data["lists"].object_list, [])
+
+ def test_bookmarked_lists_page_logged_out(self):
+ """logged out bookmarked lists"""
+ view = views.BookmarkedLists.as_view()
+ request = self.factory.get("")
+ request.user = self.anonymous_user
+
+ result = view(request)
+ self.assertEqual(result.status_code, 301)
+
def test_lists_create(self):
"""create list view"""
view = views.Lists.as_view()
From b7fb55e6ad92fe1dfd44e1f39a54b587ecc76626 Mon Sep 17 00:00:00 2001
From: Mouse Reeve
Date: Mon, 23 Aug 2021 14:53:48 -0700
Subject: [PATCH 10/13] Fixes test for login redirected view
---
bookwyrm/tests/views/test_list.py | 26 +++++++++++---------------
1 file changed, 11 insertions(+), 15 deletions(-)
diff --git a/bookwyrm/tests/views/test_list.py b/bookwyrm/tests/views/test_list.py
index f76b6ac9..e38f4eae 100644
--- a/bookwyrm/tests/views/test_list.py
+++ b/bookwyrm/tests/views/test_list.py
@@ -91,11 +91,13 @@ class ListViews(TestCase):
result.render()
self.assertEqual(result.status_code, 200)
- def test_bookmarked_lists_page(self):
+ def test_saved_lists_page(self):
"""there are so many views, this just makes sure it LOADS"""
- view = views.BookmarkedLists.as_view()
+ view = views.SavedLists.as_view()
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
- booklist = models.List.objects.create(name="Public list", user=self.local_user)
+ booklist = models.List.objects.create(
+ name="Public list", user=self.local_user
+ )
models.List.objects.create(
name="Private list", privacy="direct", user=self.local_user
)
@@ -109,9 +111,9 @@ class ListViews(TestCase):
self.assertEqual(result.status_code, 200)
self.assertEqual(result.context_data["lists"].object_list, [booklist])
- def test_bookmarked_lists_page_empty(self):
+ def test_saved_lists_page_empty(self):
"""there are so many views, this just makes sure it LOADS"""
- view = views.BookmarkedLists.as_view()
+ view = views.SavedLists.as_view()
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
models.List.objects.create(name="Public list", user=self.local_user)
models.List.objects.create(
@@ -126,9 +128,9 @@ class ListViews(TestCase):
self.assertEqual(result.status_code, 200)
self.assertEqual(result.context_data["lists"].object_list, [])
- def test_bookmarked_lists_page_logged_out(self):
- """logged out bookmarked lists"""
- view = views.BookmarkedLists.as_view()
+ def test_saved_lists_page_logged_out(self):
+ """logged out saved lists"""
+ view = views.SavedLists.as_view()
request = self.factory.get("")
request.user = self.anonymous_user
@@ -372,15 +374,9 @@ class ListViews(TestCase):
def test_user_lists_page_logged_out(self):
"""there are so many views, this just makes sure it LOADS"""
view = views.UserLists.as_view()
- with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"):
- models.List.objects.create(name="Public list", user=self.local_user)
- models.List.objects.create(
- name="Private list", privacy="direct", user=self.local_user
- )
request = self.factory.get("")
request.user = self.anonymous_user
result = view(request, self.local_user.username)
- self.assertIsInstance(result, TemplateResponse)
result.render()
- self.assertEqual(result.status_code, 200)
+ self.assertEqual(result.status_code, 302)
From f267e53b56ebce5258f395d1edd5078c33f8696d Mon Sep 17 00:00:00 2001
From: Mouse Reeve
Date: Mon, 23 Aug 2021 15:07:38 -0700
Subject: [PATCH 11/13] let's call it save not bookmark
---
bookwyrm/templates/lists/bookmark_button.html | 26 +++++++++----------
bookwyrm/templates/lists/lists.html | 6 ++---
bookwyrm/templatetags/interaction.py | 6 ++---
bookwyrm/urls.py | 10 +++----
bookwyrm/views/__init__.py | 4 +--
bookwyrm/views/list.py | 14 +++++-----
6 files changed, 31 insertions(+), 35 deletions(-)
diff --git a/bookwyrm/templates/lists/bookmark_button.html b/bookwyrm/templates/lists/bookmark_button.html
index c63a8e1e..f8f94763 100644
--- a/bookwyrm/templates/lists/bookmark_button.html
+++ b/bookwyrm/templates/lists/bookmark_button.html
@@ -3,32 +3,32 @@
{% if request.user.is_authenticated %}
-{% with request.user|bookmarked:list as bookmarked %}
+{% with request.user|saved:list as saved %}
{% csrf_token %}
- {% trans "Bookmark" as text %}
-
{% csrf_token %}
- {% trans "Un-bookmark" as text %}
-
+ {% trans "Un-save" as text %}
+ {{ text }}
diff --git a/bookwyrm/templates/lists/lists.html b/bookwyrm/templates/lists/lists.html
index 376449f8..d909f5e8 100644
--- a/bookwyrm/templates/lists/lists.html
+++ b/bookwyrm/templates/lists/lists.html
@@ -31,12 +31,12 @@
diff --git a/bookwyrm/templatetags/interaction.py b/bookwyrm/templatetags/interaction.py
index 8ad554e7..64c91f89 100644
--- a/bookwyrm/templatetags/interaction.py
+++ b/bookwyrm/templatetags/interaction.py
@@ -18,7 +18,7 @@ def get_user_boosted(user, status):
return status.boosters.filter(user=user).exists()
-@register.filter(name="bookmarked")
-def get_user_bookmarked(user, book_list):
- """did the user bookmark a list"""
+@register.filter(name="saved")
+def get_user_saved_lists(user, book_list):
+ """did the user save a list"""
return user.saved_lists.filter(id=book_list.id).exists()
diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py
index fa63e983..4494ba5a 100644
--- a/bookwyrm/urls.py
+++ b/bookwyrm/urls.py
@@ -218,9 +218,7 @@ urlpatterns = [
# lists
re_path(r"%s/lists/?$" % USER_PATH, views.UserLists.as_view(), name="user-lists"),
re_path(r"^list/?$", views.Lists.as_view(), name="lists"),
- re_path(
- r"^list/bookmarks/?$", views.BookmarkedLists.as_view(), name="bookmarked-lists"
- ),
+ re_path(r"^list/saved/?$", views.SavedLists.as_view(), name="saved-lists"),
re_path(r"^list/(?P\d+)(.json)?/?$", views.List.as_view(), name="list"),
re_path(r"^list/add-book/?$", views.list.add_book, name="list-add-book"),
re_path(
@@ -236,10 +234,8 @@ urlpatterns = [
re_path(
r"^list/(?P\d+)/curate/?$", views.Curate.as_view(), name="list-curate"
),
- re_path(r"bookmark/(?P\d+)/?$", views.bookmark, name="list-bookmark"),
- re_path(
- r"^unbookmark/(?P\d+)/?$", views.unbookmark, name="list-unbookmark"
- ),
+ re_path(r"^save-list/(?P\d+)/?$", views.saveList, name="list-save"),
+ re_path(r"^unsave-list/(?P\d+)/?$", views.unsaveList, name="list-unsave"),
# User books
re_path(r"%s/books/?$" % USER_PATH, views.Shelf.as_view(), name="user-shelves"),
re_path(
diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py
index b016b46c..bee367f7 100644
--- a/bookwyrm/views/__init__.py
+++ b/bookwyrm/views/__init__.py
@@ -25,8 +25,8 @@ from .invite import ManageInvites, Invite, InviteRequest
from .invite import ManageInviteRequests, ignore_invite_request
from .isbn import Isbn
from .landing import About, Home, Landing
-from .list import Lists, BookmarkedLists, List, Curate, UserLists
-from .list import bookmark, unbookmark
+from .list import Lists, SavedLists, List, Curate, UserLists
+from .list import saveList, unsaveList
from .notifications import Notifications
from .outbox import Outbox
from .reading import edit_readthrough, create_readthrough
diff --git a/bookwyrm/views/list.py b/bookwyrm/views/list.py
index e95ecd57..aab7c251 100644
--- a/bookwyrm/views/list.py
+++ b/bookwyrm/views/list.py
@@ -64,8 +64,8 @@ class Lists(View):
@method_decorator(login_required, name="dispatch")
-class BookmarkedLists(View):
- """bookmarked book list page"""
+class SavedLists(View):
+ """saved book list page"""
def get(self, request):
"""display book lists"""
@@ -244,18 +244,18 @@ class Curate(View):
@require_POST
@login_required
-def bookmark(request, list_id):
- """bookmark a list"""
- book_list = models.List.objects.get(id=list_id)
+def saveList(request, list_id):
+ """save a list"""
+ book_list = get_object_or_404(models.List, id=list_id)
request.user.saved_lists.add(book_list)
return redirect("list", list_id)
@require_POST
@login_required
-def unbookmark(request, list_id):
+def unsaveList(request, list_id):
"""unsave a list"""
- book_list = models.List.objects.get(id=list_id)
+ book_list = get_object_or_404(models.List, id=list_id)
request.user.saved_lists.remove(book_list)
return redirect("list", list_id)
From c727d351ba596954e8050be53447691427ca54f3 Mon Sep 17 00:00:00 2001
From: Mouse Reeve
Date: Mon, 23 Aug 2021 15:33:49 -0700
Subject: [PATCH 12/13] Fixes variable name
---
bookwyrm/urls.py | 4 ++--
bookwyrm/views/__init__.py | 2 +-
bookwyrm/views/list.py | 4 ++--
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py
index 4494ba5a..1dbd67a7 100644
--- a/bookwyrm/urls.py
+++ b/bookwyrm/urls.py
@@ -234,8 +234,8 @@ urlpatterns = [
re_path(
r"^list/(?P\d+)/curate/?$", views.Curate.as_view(), name="list-curate"
),
- re_path(r"^save-list/(?P\d+)/?$", views.saveList, name="list-save"),
- re_path(r"^unsave-list/(?P\d+)/?$", views.unsaveList, name="list-unsave"),
+ re_path(r"^save-list/(?P\d+)/?$", views.save_list, name="list-save"),
+ re_path(r"^unsave-list/(?P\d+)/?$", views.unsave_list, name="list-unsave"),
# User books
re_path(r"%s/books/?$" % USER_PATH, views.Shelf.as_view(), name="user-shelves"),
re_path(
diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py
index bee367f7..f4204925 100644
--- a/bookwyrm/views/__init__.py
+++ b/bookwyrm/views/__init__.py
@@ -26,7 +26,7 @@ from .invite import ManageInviteRequests, ignore_invite_request
from .isbn import Isbn
from .landing import About, Home, Landing
from .list import Lists, SavedLists, List, Curate, UserLists
-from .list import saveList, unsaveList
+from .list import save_list, unsave_list
from .notifications import Notifications
from .outbox import Outbox
from .reading import edit_readthrough, create_readthrough
diff --git a/bookwyrm/views/list.py b/bookwyrm/views/list.py
index aab7c251..e6ef52ba 100644
--- a/bookwyrm/views/list.py
+++ b/bookwyrm/views/list.py
@@ -244,7 +244,7 @@ class Curate(View):
@require_POST
@login_required
-def saveList(request, list_id):
+def save_list(request, list_id):
"""save a list"""
book_list = get_object_or_404(models.List, id=list_id)
request.user.saved_lists.add(book_list)
@@ -253,7 +253,7 @@ def saveList(request, list_id):
@require_POST
@login_required
-def unsaveList(request, list_id):
+def unsave_list(request, list_id):
"""unsave a list"""
book_list = get_object_or_404(models.List, id=list_id)
request.user.saved_lists.remove(book_list)
From 473ad5ffba28f39e66477fd2fef59637360f4484 Mon Sep 17 00:00:00 2001
From: Mouse Reeve
Date: Mon, 23 Aug 2021 15:35:51 -0700
Subject: [PATCH 13/13] Fixes tests
---
bookwyrm/tests/views/test_list.py | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/bookwyrm/tests/views/test_list.py b/bookwyrm/tests/views/test_list.py
index e38f4eae..d5e917c3 100644
--- a/bookwyrm/tests/views/test_list.py
+++ b/bookwyrm/tests/views/test_list.py
@@ -126,7 +126,7 @@ class ListViews(TestCase):
self.assertIsInstance(result, TemplateResponse)
result.render()
self.assertEqual(result.status_code, 200)
- self.assertEqual(result.context_data["lists"].object_list, [])
+ self.assertEqual(len(result.context_data["lists"].object_list), 0)
def test_saved_lists_page_logged_out(self):
"""logged out saved lists"""
@@ -135,7 +135,7 @@ class ListViews(TestCase):
request.user = self.anonymous_user
result = view(request)
- self.assertEqual(result.status_code, 301)
+ self.assertEqual(result.status_code, 302)
def test_lists_create(self):
"""create list view"""
@@ -378,5 +378,4 @@ class ListViews(TestCase):
request.user = self.anonymous_user
result = view(request, self.local_user.username)
- result.render()
self.assertEqual(result.status_code, 302)