]> git.openstreetmap.org Git - osqa.git/blob - forum/templatetags/user_tags.py
Remove footer link to squatted domain
[osqa.git] / forum / templatetags / user_tags.py
1 from django import template
2 from django.utils.translation import ugettext as _
3 from django.utils.safestring import mark_safe
4 import logging
5
6 register = template.Library()
7
8 class UserSignatureNode(template.Node):
9     template = template.loader.get_template('users/signature.html')
10
11     def __init__(self, user, format):
12         self.user = template.Variable(user)
13         self.format = template.Variable(format)
14
15     def render(self, context):
16         return self.template.render(template.Context({
17         'user': self.user.resolve(context),
18         'format': self.format.resolve(context)
19         }))
20
21 @register.tag
22 def user_signature(parser, token):
23     try:
24         tag_name, user, format = token.split_contents()
25     except ValueError:
26         raise template.TemplateSyntaxError, "%r tag requires exactly two arguments" % token.contents.split()[0]
27
28     return UserSignatureNode(user, format)
29
30
31 class ActivityNode(template.Node):
32     template = template.loader.get_template('users/activity.html')
33
34     def __init__(self, activity, viewer):
35         self.activity = template.Variable(activity)
36         self.viewer = template.Variable(viewer)
37
38     def render(self, context):
39         try:
40             action = self.activity.resolve(context).leaf
41             viewer = self.viewer.resolve(context)
42             describe = mark_safe(action.describe(viewer))
43             return self.template.render(template.Context(dict(action=action, describe=describe)))
44         except Exception, e:
45             import traceback
46             msg = "Error in action describe: \n %s" % (
47                 traceback.format_exc()
48             )
49             logging.error(msg)
50
51 @register.tag
52 def activity_item(parser, token):
53     try:
54         tag_name, activity, viewer = token.split_contents()
55     except ValueError:
56         raise template.TemplateSyntaxError, "%r tag requires exactly two arguments" % token.contents.split()[0]
57
58     return ActivityNode(activity, viewer)
59
60
61 @register.tag
62 def flagged_item(parser, token):
63     try:
64         tag_name, post, viewer = token.split_contents()
65     except ValueError:
66         raise template.TemplateSyntaxError, "%r tag requires exactly two arguments" % token.contents.split()[0]
67
68     return ActivityNode(post, viewer)
69
70
71 @register.inclusion_tag('users/menu.html')
72 def user_menu(viewer, user):
73     return dict(viewer=viewer, user=user)
74