Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cite author in quotations and alt text #3008

Merged
merged 2 commits into from
Oct 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions bookwyrm/models/book.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,14 +201,13 @@ def edition_info(self):
@property
def alt_text(self):
"""image alt test"""
text = self.title
if self.edition_info:
text += f" ({self.edition_info})"
return text
author = f"{name}: " if (name := self.author_text) else ""
edition = f" ({info})" if (info := self.edition_info) else ""
return f"{author}{self.title}{edition}"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this case, I think this string should be localized, by wrapping it in _(), since it is used in the UI

Copy link
Contributor Author

@dato dato Oct 2, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I see what you mean, but in that case... isn't this string a bit useless in translation context, since it's fully formatted already? (with colons, e.g.—this format being what might need changes in translation).

What I mean is: to make this translatable, shouldn't we produce three un-collapsed translation strings instead?:

  • {author}: {title}
  • {title} ({edition})
  • {author}: {title} ({edition})

(At this point could also be {title} by {author} ({edition}), but that's a separate matter.)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah I see what you mean, since it's formatted in previous variables, translating the final string would be basically meaningless. It would be best from a translation standpoint to enumerate fully formed strings (even though that's annoying from a code standpoint), but I don't think that's a blocker to merging, since it already isn't translated


def save(self, *args: Any, **kwargs: Any) -> None:
"""can't be abstract for query reasons, but you shouldn't USE it"""
if not isinstance(self, Edition) and not isinstance(self, Work):
if not isinstance(self, (Edition, Work)):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👌

raise ValueError("Books should be added as Editions or Works")

return super().save(*args, **kwargs)
Expand Down
3 changes: 2 additions & 1 deletion bookwyrm/models/status.py
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,8 @@ def pure_content(self):
quote = re.sub(r"^<p>", '<p>"', self.quote)
quote = re.sub(r"</p>$", '"</p>', quote)
title, href = self.book.title, self.book.remote_id
citation = f'— <a href="{href}"><i>{title}</i></a>'
author = f"{name}: " if (name := self.book.author_text) else ""
citation = f'— {author}<a href="{href}"><i>{title}</i></a>'
if position := self._format_position():
citation += f", {position}"
return f"{quote} <p>{citation}</p>{self.content}"
Expand Down
18 changes: 17 additions & 1 deletion bookwyrm/tests/models/test_book_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,23 @@ def test_get_edition_info(self):
book.published_date = timezone.make_aware(parse("2020"))
book.save()
self.assertEqual(book.edition_info, "worm, Glorbish language, 2020")
self.assertEqual(book.alt_text, "Test Edition (worm, Glorbish language, 2020)")

def test_alt_text(self):
"""text slug used for cover images"""
book = models.Edition.objects.create(title="Test Edition")
author = models.Author.objects.create(name="Author Name")

self.assertEqual(book.alt_text, "Test Edition")

book.authors.set([author])
book.save()

self.assertEqual(book.alt_text, "Author Name: Test Edition")

book.physical_format = "worm"
book.published_date = timezone.make_aware(parse("2022"))

self.assertEqual(book.alt_text, "Author Name: Test Edition (worm, 2022)")

def test_get_rank(self):
"""sets the data quality index for the book"""
Expand Down
23 changes: 23 additions & 0 deletions bookwyrm/tests/models/test_status_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,29 @@ def test_quotation_to_pure_activity(self, *_):
)
self.assertEqual(activity["attachment"][0]["name"], "Test Edition")

def test_quotation_with_author_to_pure_activity(self, *_):
"""serialization of quotation of a book with author and edition info"""
self.book.authors.set([models.Author.objects.create(name="Author Name")])
self.book.physical_format = "worm"
self.book.save()
status = models.Quotation.objects.create(
quote="quote",
content="",
user=self.local_user,
book=self.book,
)
activity = status.to_activity(pure=True)
self.assertEqual(
activity["content"],
(
f'quote <p>— Author Name: <a href="{self.book.remote_id}">'
"<i>Test Edition</i></a></p>"
),
)
self.assertEqual(
activity["attachment"][0]["name"], "Author Name: Test Edition (worm)"
)

def test_quotation_page_serialization(self, *_):
"""serialization of quotation page position"""
tests = [
Expand Down