diff --git a/bookwyrm/templates/book/file_links/edit_links.html b/bookwyrm/templates/book/file_links/edit_links.html
index 5ba45700..8dad6c40 100644
--- a/bookwyrm/templates/book/file_links/edit_links.html
+++ b/bookwyrm/templates/book/file_links/edit_links.html
@@ -34,9 +34,9 @@
{{ link.url }}
@@ -66,7 +66,26 @@
{% endwith %}
|
-
+ |
+
+
diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py
index 99060149..7cdfd92a 100644
--- a/bookwyrm/urls.py
+++ b/bookwyrm/urls.py
@@ -473,10 +473,15 @@ urlpatterns = [
rf"{BOOK_PATH}/filelink/?$", views.BookFileLinks.as_view(), name="file-link"
),
re_path(
- rf"{BOOK_PATH}/filelink/(?P\d+)/delete/?$",
+ rf"{BOOK_PATH}/filelink/(?P\d+)/?$",
views.BookFileLinks.as_view(),
name="file-link",
),
+ re_path(
+ rf"{BOOK_PATH}/filelink/(?P\d+)/delete/?$",
+ views.delete_link,
+ name="file-link-delete",
+ ),
re_path(
rf"{BOOK_PATH}/filelink/add/?$",
views.AddFileLink.as_view(),
diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py
index 2ec501de..3f57c274 100644
--- a/bookwyrm/views/__init__.py
+++ b/bookwyrm/views/__init__.py
@@ -37,7 +37,7 @@ from .books.books import (
from .books.books import update_book_from_remote
from .books.edit_book import EditBook, ConfirmEditBook
from .books.editions import Editions, switch_edition
-from .books.links import BookFileLinks, AddFileLink
+from .books.links import BookFileLinks, AddFileLink, delete_link
# landing
from .landing.about import about, privacy, conduct
diff --git a/bookwyrm/views/books/links.py b/bookwyrm/views/books/links.py
index 989ca9c4..51621023 100644
--- a/bookwyrm/views/books/links.py
+++ b/bookwyrm/views/books/links.py
@@ -5,28 +5,49 @@ from django.shortcuts import get_object_or_404, redirect
from django.template.response import TemplateResponse
from django.views import View
from django.utils.decorators import method_decorator
+from django.views.decorators.http import require_POST
from bookwyrm import forms, models
# pylint: disable=no-self-use
+@method_decorator(login_required, name="dispatch")
+@method_decorator(
+ permission_required("bookwyrm.edit_book", raise_exception=True), name="dispatch"
+)
class BookFileLinks(View):
"""View all links"""
def get(self, request, book_id):
"""view links"""
book = get_object_or_404(models.Edition, id=book_id)
- return TemplateResponse(
- request, "book/file_links/edit_links.html", {"book": book}
- )
+ links = book.file_links.order_by("domain__status", "created_date")
+ annotated_links = []
+ for link in links.all():
+ link.form = forms.FileLinkForm(instance=link)
+ annotated_links.append(link)
+
+ data = {"book": book, "links": annotated_links}
+ return TemplateResponse(request, "book/file_links/edit_links.html", data)
def post(self, request, book_id, link_id):
- """delete link"""
+ """Edit a link"""
link = get_object_or_404(models.FileLink, id=link_id, book=book_id)
- link.delete()
+ form = forms.FileLinkForm(request.POST, instance=link)
+ form.save()
return self.get(request, book_id)
+@require_POST
+@login_required
+# pylint: disable=unused-argument
+def delete_link(request, book_id, link_id):
+ """delete link"""
+ link = get_object_or_404(models.FileLink, id=link_id, book=book_id)
+ link.delete()
+ return redirect("file-link", book_id)
+
+
@method_decorator(login_required, name="dispatch")
@method_decorator(
permission_required("bookwyrm.edit_book", raise_exception=True), name="dispatch"
|