1 from django import template
2 from django.utils.translation import ugettext as _
3 from django.utils.safestring import mark_safe
4 from forum.models import Tag, MarkedTag
5 from forum.templatetags import argument_parser
6 from forum import settings
8 register = template.Library()
10 class QuestionItemNode(template.Node):
11 template = template.loader.get_template('question_list/item.html')
13 def __init__(self, question, options):
14 self.question = template.Variable(question)
15 self.options = options
17 def render(self, context):
18 return self.template.render(template.Context({
19 'question': self.question.resolve(context),
20 'question_summary': self.options.get('question_summary', 'no' ) == 'yes',
21 'favorite_count': self.options.get('favorite_count', 'no') == 'yes',
22 'signature_type': self.options.get('signature_type', 'lite'),
25 class SubscriptionItemNode(template.Node):
26 template = template.loader.get_template('question_list/subscription_item.html')
28 def __init__(self, subscription, question, options):
29 self.question = template.Variable(question)
30 self.subscription = template.Variable(subscription)
31 self.options = options
33 def render(self, context):
34 return self.template.render(template.Context({
35 'question': self.question.resolve(context),
36 'subscription': self.subscription.resolve(context),
37 'signature_type': self.options.get('signature_type', 'lite'),
41 def question_list_item(parser, token):
42 tokens = token.split_contents()[1:]
43 return QuestionItemNode(tokens[0], argument_parser(tokens[1:]))
46 def subscription_list_item(parser, token):
47 tokens = token.split_contents()[1:]
48 return SubscriptionItemNode(tokens[0], tokens[1], argument_parser(tokens[2:]))
50 @register.inclusion_tag('question_list/sort_tabs.html')
51 def question_sort_tabs(sort_context):
54 @register.inclusion_tag('question_list/related_tags.html')
55 def question_list_related_tags(questions):
57 tags = Tag.objects.filter(nodes__id__in=[q.id for q in questions]).distinct()
59 if settings.LIMIT_RELATED_TAGS:
60 tags = tags[:settings.LIMIT_RELATED_TAGS]
64 return {'tags': False}
66 @register.inclusion_tag('question_list/tag_selector.html', takes_context=True)
67 def tag_selector(context):
68 request = context['request']
69 show_interesting_tags = settings.SHOW_INTERESTING_TAGS_BOX
71 if request.user.is_authenticated():
72 pt = MarkedTag.objects.filter(user=request.user)
75 "interesting_tag_names": pt.filter(reason='good').values_list('tag__name', flat=True),
76 'ignored_tag_names': pt.filter(reason='bad').values_list('tag__name', flat=True),
77 'user_authenticated': True,
78 'show_interesting_tags' : show_interesting_tags,
81 return { 'request' : request, 'user_authenticated': False, 'show_interesting_tags' : show_interesting_tags }