]> git.openstreetmap.org Git - osqa.git/blob - forum/templatetags/question_list_tags.py
72f888b14730d155f726d549fefeded8209112ba
[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 \r
7 register = template.Library()\r
8 \r
9 class QuestionItemNode(template.Node):\r
10     template = template.loader.get_template('question_list/item.html')\r
11 \r
12     def __init__(self, question, options):\r
13         self.question = template.Variable(question)\r
14         self.options = options\r
15 \r
16     def render(self, context):\r
17         return self.template.render(template.Context({\r
18             'question': self.question.resolve(context),\r
19             'favorite_count': self.options.get('favorite_count', 'no') == 'yes',\r
20             'signature_type': self.options.get('signature_type', 'lite'),\r
21         }))\r
22 \r
23 @register.tag\r
24 def question_list_item(parser, token):\r
25     tokens = token.split_contents()[1:]\r
26     return QuestionItemNode(tokens[0], argument_parser(tokens[1:]))\r
27     \r
28 \r
29 @register.inclusion_tag('question_list/sort_tabs.html')\r
30 def question_sort_tabs(sort_context):\r
31     return sort_context\r
32 \r
33 @register.inclusion_tag('question_list/related_tags.html')\r
34 def question_list_related_tags(questions):\r
35     if len(questions):\r
36         return {'tags': Tag.objects.filter(questions__id__in=[q.id for q in questions]).distinct()}\r
37     else:\r
38         return {'tags': False}\r
39 \r
40 @register.inclusion_tag('question_list/tag_selector.html', takes_context=True)\r
41 def tag_selector(context):\r
42     request = context['request']\r
43 \r
44     if request.user.is_authenticated():\r
45         pt = MarkedTag.objects.filter(user=request.user)\r
46         return {\r
47             "interesting_tag_names": pt.filter(reason='good').values_list('tag__name', flat=True),\r
48             'ignored_tag_names': pt.filter(reason='bad').values_list('tag__name', flat=True),\r
49             'user_authenticated': True,\r
50         }\r
51     else:\r
52         return {'user_authenticated': False}\r
53 \r
54 @register.inclusion_tag('question_list/count.html', takes_context=True)\r
55 def question_list_count(context):\r
56     context['sort_description'] = mark_safe({\r
57         'latest': _('<strong>Newest</strong> questions are shown first. '),\r
58         'active': _('Questions are sorted by the <strong>time of last update</strong>.'),\r
59         'hottest': _('Questions sorted by <strong>number of responses</strong>.'),\r
60         'mostvoted': _('Questions are sorted by the <strong>number of votes</strong>.')\r
61     }.get(context['request'].utils.sort_method('latest'), ''))\r
62 \r
63     return context\r
64 \r
65 @register.inclusion_tag('question_list/title.html', takes_context=True)\r
66 def question_list_title(context):\r
67     return context