]> git.openstreetmap.org Git - osqa.git/blob - forum/templatetags/ui_registry.py
d91fd87e6f84c338dfa90416a0ab8ca5fec24ca5
[osqa.git] / forum / templatetags / ui_registry.py
1 from django import template
2 from forum.modules import ui
3
4 register = template.Library()
5
6
7 class LoadRegistryNode(template.Node):
8     def __init__(self, registry):
9         self.registry = registry
10
11     def render(self, context):
12         result = ''
13
14         for ui_object in self.registry:
15             if ui_object.can_render(context):
16                 result += ui_object.render(context)
17
18         return result
19
20
21 @register.tag
22 def loadregistry(parser, token):
23     try:
24         tag_name, registry = token.split_contents()
25     except ValueError:
26         raise template.TemplateSyntaxError, "%r tag requires exactly one argument" % token.contents.split()[0]
27
28     registry = ui.get_registry_by_name(registry)
29     return LoadRegistryNode(registry)
30
31
32 class LoopRegistryNode(template.Node):
33     def __init__(self, registry, nodelist):
34         self.registry = registry
35         self.nodelist = nodelist
36
37     def render(self, context):
38         result = ''
39
40         for ui_object in self.registry:
41             if ui_object.can_render(context):
42                 ui_object.update_context(context)
43                 result += self.nodelist.render(context)
44
45         return result
46
47 @register.tag
48 def loopregistry(parser, token):
49     try:
50         tag_name, registry = token.split_contents()
51     except ValueError:
52         raise template.TemplateSyntaxError, "%r tag requires exactly one argument" % token.contents.split()[0]
53
54     registry = ui.get_registry_by_name(registry)
55     nodelist = parser.parse(('endloopregistry',))
56     parser.delete_first_token()
57
58     return LoopRegistryNode(registry, nodelist)