X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/c6db46d42f0a6b9dbd5abb6ce2be58fe306752b6..82c3054bcdeb000aa9782da80d644070797b5cbe:/apps/social/templatetags/social_tags.py?ds=sidebyside diff --git a/apps/social/templatetags/social_tags.py b/apps/social/templatetags/social_tags.py index d6d3f7110..7065467b4 100755 --- a/apps/social/templatetags/social_tags.py +++ b/apps/social/templatetags/social_tags.py @@ -3,33 +3,38 @@ # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # from random import randint +from django.db.models import Q from django import template -from catalogue.models import Book +from django.utils.functional import lazy +from django.utils.cache import add_never_cache_headers +from catalogue.models import Book, Tag +from ssify import ssi_variable +from ssify.utils import ssi_vary_on_cookie from social.models import Cite from social.utils import likes, cites_for_tags register = template.Library() -register.filter('likes', likes) +@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) +def likes_book(request, book_id): + return likes(request.user, Book.objects.get(pk=book_id), request) -@register.assignment_tag(takes_context=True) -def choose_cite(context, ctx=None): + +def choose_cite(request, book_id=None, tag_ids=None): """Choose a cite for main page, for book or for set of tags.""" try: - request = context['request'] assert request.user.is_staff assert 'choose_cite' in request.GET cite = Cite.objects.get(pk=request.GET['choose_cite']) - except AssertionError, Cite.DoesNotExist: - if ctx is None: - cites = Cite.objects.all() - elif isinstance(ctx, Book): - cites = ctx.cite_set.all() - if not cites.exists(): - cites = cites_for_tags([ctx.book_tag()]) + except (AssertionError, Cite.DoesNotExist): + if book_id is not None: + cites = Cite.objects.filter(Q(book=book_id) | Q(book__ancestor=book_id)) + elif tag_ids is not None: + tags = Tag.objects.filter(pk__in=tag_ids) + cites = cites_for_tags(tags) else: - cites = cites_for_tags(ctx) + cites = Cite.objects.all() stickies = cites.filter(sticky=True) count = stickies.count() if count: @@ -43,6 +48,12 @@ def choose_cite(context, ctx=None): return cite +@ssi_variable(register, name='choose_cite', patch_response=[add_never_cache_headers]) +def choose_cite_tag(request, book_id=None, tag_ids=None): + cite = choose_cite(request, book_id, tag_ids) + return cite.pk if cite is not None else None + + @register.inclusion_tag('social/cite_promo.html') def render_cite(cite): return { @@ -50,20 +61,18 @@ def render_cite(cite): } -@register.inclusion_tag('social/cite_promo.html', takes_context=True) -def cite_promo(context, ctx=None, fallback=False): - return { - 'cite': choose_cite(context, ctx), - 'fallback': fallback, - 'ctx': ctx, - } - - -@register.inclusion_tag('social/shelf_tags.html', takes_context=True) -def shelf_tags(context, book): - user = context['request'].user - if not user.is_authenticated(): - tags = [] - else: - tags = book.tags.filter(category='set', user=user).exclude(name='') - return {'tags': tags} +@ssi_variable(register, patch_response=[ssi_vary_on_cookie]) +def book_shelf_tags(request, book_id): + if not request.user.is_authenticated(): + return None + book = Book.objects.get(pk=book_id) + lks = likes(request.user, book, request) + def get_value(): + if not lks: + return '' + tags = book.tags.filter(category='set', user=request.user).exclude(name='') + if not tags: + return '' + ctx = {'tags': tags} + return template.loader.render_to_string('social/shelf_tags.html', ctx) + return lazy(get_value, unicode)()