diff --git a/bookwyrm/templates/book/book.html b/bookwyrm/templates/book/book.html
index e504041b..6fa2e441 100644
--- a/bookwyrm/templates/book/book.html
+++ b/bookwyrm/templates/book/book.html
@@ -4,7 +4,6 @@
{% load humanize %}
{% load utilities %}
{% load static %}
-{% load layout %}
{% block title %}{{ book|book_title }}{% endblock %}
@@ -43,7 +42,7 @@
{% endif %}
- {% if book.authors %}
+ {% if book.authors.exists %}
{% trans "by" %} {% include 'snippets/authors.html' with book=book %}
diff --git a/bookwyrm/templates/snippets/book_titleby.html b/bookwyrm/templates/snippets/book_titleby.html
index 5eddabff..1c2bb176 100644
--- a/bookwyrm/templates/snippets/book_titleby.html
+++ b/bookwyrm/templates/snippets/book_titleby.html
@@ -2,7 +2,7 @@
{% load utilities %}
{% spaceless %}
-{% if book.authors %}
+{% if book.authors.exists %}
{% blocktrans trimmed with path=book.local_path title=book|book_title %}
{{ title }} by
{% endblocktrans %}
diff --git a/bookwyrm/templatetags/utilities.py b/bookwyrm/templatetags/utilities.py
index abb52499..c8ebd17d 100644
--- a/bookwyrm/templatetags/utilities.py
+++ b/bookwyrm/templatetags/utilities.py
@@ -55,7 +55,8 @@ def truncatepath(value, arg):
@register.simple_tag(takes_context=False)
def get_book_cover_thumbnail(book, size="medium", ext="jpg"):
- """Returns a book thumbnail at the specified size and extension, with fallback if needed"""
+ """Returns a book thumbnail at the specified size and extension,
+ with fallback if needed"""
if size == "":
size = "medium"
try:
diff --git a/bookwyrm/tests/views/test_status.py b/bookwyrm/tests/views/test_status.py
index ff429e20..6c236b6d 100644
--- a/bookwyrm/tests/views/test_status.py
+++ b/bookwyrm/tests/views/test_status.py
@@ -281,7 +281,7 @@ class StatusViews(TestCase):
("@nutria@%s" % DOMAIN, user),
)
- def test_format_links(self, *_):
+ def test_format_links_simple_url(self, *_):
"""find and format urls into a tags"""
url = "http://www.fish.com/"
self.assertEqual(
@@ -291,6 +291,27 @@ class StatusViews(TestCase):
views.status.format_links("(%s)" % url),
'(www.fish.com/)' % url,
)
+
+ def test_format_links_paragraph_break(self, *_):
+ """find and format urls into a tags"""
+ url = """okay
+
+http://www.fish.com/"""
+ self.assertEqual(
+ views.status.format_links(url),
+ 'okay\n\nwww.fish.com/',
+ )
+
+ def test_format_links_parens(self, *_):
+ """find and format urls into a tags"""
+ url = "http://www.fish.com/"
+ self.assertEqual(
+ views.status.format_links("(%s)" % url),
+ '(www.fish.com/)' % url,
+ )
+
+ def test_format_links_special_chars(self, *_):
+ """find and format urls into a tags"""
url = "https://archive.org/details/dli.granth.72113/page/n25/mode/2up"
self.assertEqual(
views.status.format_links(url),
diff --git a/bookwyrm/views/status.py b/bookwyrm/views/status.py
index fe1dfda1..a864d4b7 100644
--- a/bookwyrm/views/status.py
+++ b/bookwyrm/views/status.py
@@ -155,9 +155,11 @@ def format_links(content):
"""detect and format links"""
validator = URLValidator()
formatted_content = ""
- split_content = content.split()
+ split_content = re.split(r"(\s+)", content)
- for index, potential_link in enumerate(split_content):
+ for potential_link in split_content:
+ if not potential_link:
+ continue
wrapped = _wrapped(potential_link)
if wrapped:
wrapper_close = potential_link[-1]
@@ -182,8 +184,6 @@ def format_links(content):
if wrapped:
formatted_content += wrapper_close
- if index < len(split_content) - 1:
- formatted_content += " "
return formatted_content