mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-06-03 05:49:35 +00:00
Merge pull request #3008 from dato/author_in_citation
Cite author in quotations and alt text
This commit is contained in:
commit
2237a7eb9e
|
@ -201,14 +201,13 @@ class Book(BookDataModel):
|
||||||
@property
|
@property
|
||||||
def alt_text(self):
|
def alt_text(self):
|
||||||
"""image alt test"""
|
"""image alt test"""
|
||||||
text = self.title
|
author = f"{name}: " if (name := self.author_text) else ""
|
||||||
if self.edition_info:
|
edition = f" ({info})" if (info := self.edition_info) else ""
|
||||||
text += f" ({self.edition_info})"
|
return f"{author}{self.title}{edition}"
|
||||||
return text
|
|
||||||
|
|
||||||
def save(self, *args: Any, **kwargs: Any) -> None:
|
def save(self, *args: Any, **kwargs: Any) -> None:
|
||||||
"""can't be abstract for query reasons, but you shouldn't USE it"""
|
"""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)):
|
||||||
raise ValueError("Books should be added as Editions or Works")
|
raise ValueError("Books should be added as Editions or Works")
|
||||||
|
|
||||||
return super().save(*args, **kwargs)
|
return super().save(*args, **kwargs)
|
||||||
|
|
|
@ -366,7 +366,8 @@ class Quotation(BookStatus):
|
||||||
quote = re.sub(r"^<p>", '<p>"', self.quote)
|
quote = re.sub(r"^<p>", '<p>"', self.quote)
|
||||||
quote = re.sub(r"</p>$", '"</p>', quote)
|
quote = re.sub(r"</p>$", '"</p>', quote)
|
||||||
title, href = self.book.title, self.book.remote_id
|
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():
|
if position := self._format_position():
|
||||||
citation += f", {position}"
|
citation += f", {position}"
|
||||||
return f"{quote} <p>{citation}</p>{self.content}"
|
return f"{quote} <p>{citation}</p>{self.content}"
|
||||||
|
|
|
@ -92,7 +92,23 @@ class Book(TestCase):
|
||||||
book.published_date = timezone.make_aware(parse("2020"))
|
book.published_date = timezone.make_aware(parse("2020"))
|
||||||
book.save()
|
book.save()
|
||||||
self.assertEqual(book.edition_info, "worm, Glorbish language, 2020")
|
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):
|
def test_get_rank(self):
|
||||||
"""sets the data quality index for the book"""
|
"""sets the data quality index for the book"""
|
||||||
|
|
|
@ -314,6 +314,29 @@ class Status(TestCase):
|
||||||
)
|
)
|
||||||
self.assertEqual(activity["attachment"][0]["name"], "Test Edition")
|
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, *_):
|
def test_quotation_page_serialization(self, *_):
|
||||||
"""serialization of quotation page position"""
|
"""serialization of quotation page position"""
|
||||||
tests = [
|
tests = [
|
||||||
|
|
Loading…
Reference in a new issue