]> git.openstreetmap.org Git - osqa.git/blob - forum/templatetags/question_list_tags.py
Remove footer link to squatted domain
[osqa.git] / forum / templatetags / question_list_tags.py
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
7
8 register = template.Library()
9
10 class QuestionItemNode(template.Node):
11     template = template.loader.get_template('question_list/item.html')
12
13     def __init__(self, question, options):
14         self.question = template.Variable(question)
15         self.options = options
16
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'),
23         }))
24
25 class SubscriptionItemNode(template.Node):
26     template = template.loader.get_template('question_list/subscription_item.html')
27
28     def __init__(self, subscription, question, options):
29         self.question = template.Variable(question)
30         self.subscription = template.Variable(subscription)
31         self.options = options
32
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'),
38         }))
39
40 @register.tag
41 def question_list_item(parser, token):
42     tokens = token.split_contents()[1:]
43     return QuestionItemNode(tokens[0], argument_parser(tokens[1:]))
44
45 @register.tag
46 def subscription_list_item(parser, token):
47     tokens = token.split_contents()[1:]
48     return SubscriptionItemNode(tokens[0], tokens[1], argument_parser(tokens[2:]))
49
50 @register.inclusion_tag('question_list/sort_tabs.html')
51 def question_sort_tabs(sort_context):
52     return sort_context
53
54 @register.inclusion_tag('question_list/related_tags.html')
55 def question_list_related_tags(questions):
56     if len(questions):
57         tags = Tag.objects.filter(nodes__id__in=[q.id for q in questions]).distinct()
58
59         if settings.LIMIT_RELATED_TAGS:
60             tags = tags[:settings.LIMIT_RELATED_TAGS]
61
62         return {'tags': tags}
63     else:
64         return {'tags': False}
65
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
70
71     if request.user.is_authenticated():
72         pt = MarkedTag.objects.filter(user=request.user)
73         return {
74             'request' : request,
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,
79         }
80     else:
81         return { 'request' : request, 'user_authenticated': False, 'show_interesting_tags' : show_interesting_tags }