]> git.openstreetmap.org Git - osqa.git/blob - forum/templatetags/question_list_tags.py
OSQA-809, Include question summaries in question and answers views, wrap that in...
[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             'question_summary': self.options.get('question_summary', 'no' ) == 'yes',\r
21             'favorite_count': self.options.get('favorite_count', 'no') == 'yes',\r
22             'signature_type': self.options.get('signature_type', 'lite'),\r
23         }))\r
24 \r
25 class SubscriptionItemNode(template.Node):\r
26     template = template.loader.get_template('question_list/subscription_item.html')\r
27 \r
28     def __init__(self, subscription, question, options):\r
29         self.question = template.Variable(question)\r
30         self.subscription = template.Variable(subscription)\r
31         self.options = options\r
32 \r
33     def render(self, context):\r
34         return self.template.render(template.Context({\r
35             'question': self.question.resolve(context),\r
36             'subscription': self.subscription.resolve(context),\r
37             'signature_type': self.options.get('signature_type', 'lite'),\r
38         }))\r
39 \r
40 @register.tag\r
41 def question_list_item(parser, token):\r
42     tokens = token.split_contents()[1:]\r
43     return QuestionItemNode(tokens[0], argument_parser(tokens[1:]))\r
44 \r
45 @register.tag\r
46 def subscription_list_item(parser, token):\r
47     tokens = token.split_contents()[1:]\r
48     return SubscriptionItemNode(tokens[0], tokens[1], argument_parser(tokens[2:]))\r
49 \r
50 @register.inclusion_tag('question_list/sort_tabs.html')\r
51 def question_sort_tabs(sort_context):\r
52     return sort_context\r
53 \r
54 @register.inclusion_tag('question_list/related_tags.html')\r
55 def question_list_related_tags(questions):\r
56     if len(questions):\r
57         tags = Tag.objects.filter(nodes__id__in=[q.id for q in questions]).distinct()\r
58 \r
59         if settings.LIMIT_RELATED_TAGS:\r
60             tags = tags[:settings.LIMIT_RELATED_TAGS]\r
61 \r
62         return {'tags': tags}\r
63     else:\r
64         return {'tags': False}\r
65 \r
66 @register.inclusion_tag('question_list/tag_selector.html', takes_context=True)\r
67 def tag_selector(context):\r
68     request = context['request']\r
69     show_interesting_tags = settings.SHOW_INTERESTING_TAGS_BOX\r
70 \r
71     if request.user.is_authenticated():\r
72         pt = MarkedTag.objects.filter(user=request.user)\r
73         return {\r
74             'request' : request,\r
75             "interesting_tag_names": pt.filter(reason='good').values_list('tag__name', flat=True),\r
76             'ignored_tag_names': pt.filter(reason='bad').values_list('tag__name', flat=True),\r
77             'user_authenticated': True,\r
78             'show_interesting_tags' : show_interesting_tags,\r
79         }\r
80     else:\r
81         return { 'request' : request, 'user_authenticated': False, 'show_interesting_tags' : show_interesting_tags }\r