]> git.openstreetmap.org Git - osqa.git/blob - forum/templatetags/question_list_tags.py
642a5a32e008a09bd8d7b071e195c62576759304
[osqa.git] / forum / templatetags / question_list_tags.py
1 from django import template\r
2 from django.utils.translation import ugettext as _\r
3 from django.utils.safestring import mark_safe\r
4 from forum.models import Tag, MarkedTag\r
5 from forum.templatetags import argument_parser\r
6 from forum import settings\r
7 \r
8 register = template.Library()\r
9 \r
10 class QuestionItemNode(template.Node):\r
11     template = template.loader.get_template('question_list/item.html')\r
12 \r
13     def __init__(self, question, options):\r
14         self.question = template.Variable(question)\r
15         self.options = options\r
16 \r
17     def render(self, context):\r
18         return self.template.render(template.Context({\r
19             'question': self.question.resolve(context),\r
20             'favorite_count': self.options.get('favorite_count', 'no') == 'yes',\r
21             'signature_type': self.options.get('signature_type', 'lite'),\r
22         }))\r
23 \r
24 class SubscriptionItemNode(template.Node):\r
25     template = template.loader.get_template('question_list/subscription_item.html')\r
26 \r
27     def __init__(self, subscription, question, options):\r
28         self.question = template.Variable(question)\r
29         self.subscription = template.Variable(subscription)\r
30         self.options = options\r
31 \r
32     def render(self, context):\r
33         return self.template.render(template.Context({\r
34             'question': self.question.resolve(context),\r
35             'subscription': self.subscription.resolve(context),\r
36             'signature_type': self.options.get('signature_type', 'lite'),\r
37         }))\r
38 \r
39 @register.tag\r
40 def question_list_item(parser, token):\r
41     tokens = token.split_contents()[1:]\r
42     return QuestionItemNode(tokens[0], argument_parser(tokens[1:]))\r
43 \r
44 @register.tag\r
45 def subscription_list_item(parser, token):\r
46     tokens = token.split_contents()[1:]\r
47     return SubscriptionItemNode(tokens[0], tokens[1], argument_parser(tokens[2:]))\r
48 \r
49 @register.inclusion_tag('question_list/sort_tabs.html')\r
50 def question_sort_tabs(sort_context):\r
51     return sort_context\r
52 \r
53 @register.inclusion_tag('question_list/related_tags.html')\r
54 def question_list_related_tags(questions):\r
55     if len(questions):\r
56         tags = Tag.objects.filter(nodes__id__in=[q.id for q in questions]).distinct()\r
57 \r
58         if settings.LIMIT_RELATED_TAGS:\r
59             tags = tags[:settings.LIMIT_RELATED_TAGS]\r
60 \r
61         return {'tags': tags}\r
62     else:\r
63         return {'tags': False}\r
64 \r
65 @register.inclusion_tag('question_list/tag_selector.html', takes_context=True)\r
66 def tag_selector(context):\r
67     request = context['request']\r
68     show_interesting_tags = settings.SHOW_INTERESTING_TAGS_BOX\r
69 \r
70     if request.user.is_authenticated():\r
71         pt = MarkedTag.objects.filter(user=request.user)\r
72         return {\r
73             'request' : request,\r
74             "interesting_tag_names": pt.filter(reason='good').values_list('tag__name', flat=True),\r
75             'ignored_tag_names': pt.filter(reason='bad').values_list('tag__name', flat=True),\r
76             'user_authenticated': True,\r
77             'show_interesting_tags' : show_interesting_tags,\r
78         }\r
79     else:\r
80         return { 'request' : request, 'user_authenticated': False, 'show_interesting_tags' : show_interesting_tags }\r