fix custom pdf w/pictures
[wolnelektury.git] / src / catalogue / templatetags / catalogue_tags.py
index 16d5de7..c02a5d7 100644 (file)
@@ -15,6 +15,8 @@ from django.utils.cache import add_never_cache_headers
 from django.utils.translation import ugettext as _
 
 from ssify import ssi_variable
 from django.utils.translation import ugettext as _
 
 from ssify import ssi_variable
+
+from catalogue.helpers import get_audiobook_tags
 from catalogue.models import Book, BookMedia, Fragment, Tag, Source
 from catalogue.constants import LICENSES
 from picture.models import Picture
 from catalogue.models import Book, BookMedia, Fragment, Tag, Source
 from catalogue.constants import LICENSES
 from picture.models import Picture
@@ -242,37 +244,23 @@ def catalogue_url(parser, token):
 
     tags_to_add = []
     tags_to_remove = []
 
     tags_to_add = []
     tags_to_remove = []
-    for bit in bits[1:]:
-        if bit[0] == '-':
-            tags_to_remove.append(bit[1:])
-        else:
-            tags_to_add.append(bit)
-
-    return CatalogueURLNode(tags_to_add, tags_to_remove)
-
-
-@register.tag
-def catalogue_url_gallery(parser, token):
-    bits = token.split_contents()
-
-    tags_to_add = []
-    tags_to_remove = []
-    for bit in bits[1:]:
+    for bit in bits[2:]:
         if bit[0] == '-':
             tags_to_remove.append(bit[1:])
         else:
             tags_to_add.append(bit)
 
         if bit[0] == '-':
             tags_to_remove.append(bit[1:])
         else:
             tags_to_add.append(bit)
 
-    return CatalogueURLNode(tags_to_add, tags_to_remove, gallery=True)
+    return CatalogueURLNode(bits[1], tags_to_add, tags_to_remove)
 
 
 class CatalogueURLNode(Node):
 
 
 class CatalogueURLNode(Node):
-    def __init__(self, tags_to_add, tags_to_remove, gallery=False):
+    def __init__(self, list_type, tags_to_add, tags_to_remove):
         self.tags_to_add = [Variable(tag) for tag in tags_to_add]
         self.tags_to_remove = [Variable(tag) for tag in tags_to_remove]
         self.tags_to_add = [Variable(tag) for tag in tags_to_add]
         self.tags_to_remove = [Variable(tag) for tag in tags_to_remove]
-        self.gallery = gallery
+        self.list_type_var = Variable(list_type)
 
     def render(self, context):
 
     def render(self, context):
+        list_type = self.list_type_var.resolve(context)
         tags_to_add = []
         tags_to_remove = []
 
         tags_to_add = []
         tags_to_remove = []
 
@@ -298,16 +286,23 @@ class CatalogueURLNode(Node):
                 pass
 
         if len(tag_slugs) > 0:
                 pass
 
         if len(tag_slugs) > 0:
-            if self.gallery:
+            if list_type == 'gallery':
                 return reverse('tagged_object_list_gallery', kwargs={'tags': '/'.join(tag_slugs)})
                 return reverse('tagged_object_list_gallery', kwargs={'tags': '/'.join(tag_slugs)})
+            elif list_type == 'audiobooks':
+                return reverse('tagged_object_list_audiobooks', kwargs={'tags': '/'.join(tag_slugs)})
             else:
                 return reverse('tagged_object_list', kwargs={'tags': '/'.join(tag_slugs)})
         else:
             else:
                 return reverse('tagged_object_list', kwargs={'tags': '/'.join(tag_slugs)})
         else:
-            return reverse('book_list')
+            if list_type == 'gallery':
+                return reverse('gallery')
+            elif list_type == 'audiobooks':
+                return reverse('audiobook_list')
+            else:
+                return reverse('book_list')
 
 
 # @register.inclusion_tag('catalogue/tag_list.html')
 
 
 # @register.inclusion_tag('catalogue/tag_list.html')
-def tag_list(tags, choices=None, category=None, gallery=False):
+def tag_list(tags, choices=None, category=None, list_type='books'):
     # print(tags, choices, category)
     if choices is None:
         choices = []
     # print(tags, choices, category)
     if choices is None:
         choices = []
@@ -326,22 +321,27 @@ def tag_list(tags, choices=None, category=None, gallery=False):
         other = Tag.objects.filter(category=category).exclude(pk__in=[t.pk for t in tags])\
             .exclude(pk__in=[t.pk for t in category_choices])
         # Filter out empty tags.
         other = Tag.objects.filter(category=category).exclude(pk__in=[t.pk for t in tags])\
             .exclude(pk__in=[t.pk for t in category_choices])
         # Filter out empty tags.
-        ct = ContentType.objects.get_for_model(Picture if gallery else Book)
+        ct = ContentType.objects.get_for_model(Picture if list_type == 'gallery' else Book)
         other = other.filter(items__content_type=ct).distinct()
         other = other.filter(items__content_type=ct).distinct()
+        if list_type == 'audiobooks':
+            other = other.filter(id__in=get_audiobook_tags())
+        other = other.only('name', 'slug', 'category')
     else:
         other = []
 
     return {
         'one_tag': one_tag,
         'choices': choices,
     else:
         other = []
 
     return {
         'one_tag': one_tag,
         'choices': choices,
+        'category_choices': category_choices,
         'tags': tags,
         'other': other,
         'tags': tags,
         'other': other,
+        'list_type': list_type,
     }
 
 
 @register.inclusion_tag('catalogue/inline_tag_list.html')
     }
 
 
 @register.inclusion_tag('catalogue/inline_tag_list.html')
-def inline_tag_list(tags, choices=None, category=None, gallery=False):
-    return tag_list(tags, choices, category, gallery)
+def inline_tag_list(tags, choices=None, category=None, list_type='books'):
+    return tag_list(tags, choices, category, list_type)
 
 
 @register.inclusion_tag('catalogue/collection_list.html')
 
 
 @register.inclusion_tag('catalogue/collection_list.html')
@@ -364,7 +364,7 @@ def work_list(context, object_list):
 
 
 @register.inclusion_tag('catalogue/plain_list.html', takes_context=True)
 
 
 @register.inclusion_tag('catalogue/plain_list.html', takes_context=True)
-def plain_list(context, object_list, with_initials=True, by_author=False, choice=None, book=None, gallery=False,
+def plain_list(context, object_list, with_initials=True, by_author=False, choice=None, book=None, list_type='books',
                paged=True, initial_blocks=False):
     names = [('', [])]
     last_initial = None
                paged=True, initial_blocks=False):
     names = [('', [])]
     last_initial = None
@@ -379,14 +379,14 @@ def plain_list(context, object_list, with_initials=True, by_author=False, choice
                 initial = obj.get_initial().upper()
             if initial != last_initial:
                 last_initial = initial
                 initial = obj.get_initial().upper()
             if initial != last_initial:
                 last_initial = initial
-                names.append((obj.author_str() if by_author else initial, []))
+                names.append((obj.author_unicode() if by_author else initial, []))
         names[-1][1].append(obj)
     return {
         'paged': paged,
         'names': names,
         'initial_blocks': initial_blocks,
         'book': book,
         names[-1][1].append(obj)
     return {
         'paged': paged,
         'names': names,
         'initial_blocks': initial_blocks,
         'book': book,
-        'gallery': gallery,
+        'list_type': list_type,
         'choice': choice,
     }
 
         'choice': choice,
     }