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