}
+@register.simple_tag
+def related_books_2021(instance, limit=4, taken=0):
+ limit -= taken
+ max_books = limit
+
+ books_qs = Book.objects.filter(findable=True)
+ books_qs = books_qs.exclude(common_slug=instance.common_slug).exclude(ancestor=instance)
+ books = Book.tagged.related_to(instance, books_qs)[:max_books]
+
+ return books
+
+
@register.simple_tag
def download_audio(book, daisy=True, mp3=True):
links = []
}
+@register.simple_tag
+def license_locative(license_url, default):
+ return LICENSES.get(license_url, {}).get('locative', default)
+
+
@register.filter
def class_name(obj):
return obj.__class__.__name__
return 'preview'
else:
return 'closed'
+
+
+@register.inclusion_tag('catalogue/snippets/content_warning.html')
+def content_warning(book):
+ warnings_def = {
+ 'wulgaryzmy': _('vulgar language'),
+ }
+ warnings = book.get_extra_info_json().get('content_warnings', [])
+ warnings = sorted(
+ warnings_def.get(w, w)
+ for w in warnings
+ )
+ return {
+ "warnings": warnings
+ }