]> git.openstreetmap.org Git - osqa.git/blob - forum/templatetags/ui_registry.py
More polished PAI for module html injection and added a couple more places to inject...
[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, separator):
9         self.registry = registry
10         self.separator = separator
11
12     def render(self, context):
13         separator = self.separator.render(context)
14         result = ''
15
16         for ui_object in self.registry:
17             if ui_object.can_render(context):
18                 if result:
19                     result += separator
20                 result += ui_object.render(context)
21
22         return result
23
24
25 @register.tag
26 def loadregistry(parser, token):
27     try:
28         tag_name, registry = token.split_contents()
29     except ValueError:
30         raise template.TemplateSyntaxError, "%r tag requires exactly one argument" % token.contents.split()[0]
31
32     registry = ui.get_registry_by_name(registry)
33     separator = parser.parse(('endloadregistry',))
34     parser.delete_first_token()
35     return LoadRegistryNode(registry, separator)
36
37
38 class LoopRegistryNode(template.Node):
39     def __init__(self, registry, nodelist):
40         self.registry = registry
41         self.nodelist = nodelist
42
43     def render(self, context):
44         result = ''
45
46         for ui_object in self.registry:
47             if ui_object.can_render(context):
48                 ui_object.update_context(context)
49                 result += self.nodelist.render(context)
50
51         return result
52
53 @register.tag
54 def loopregistry(parser, token):
55     try:
56         tag_name, registry = token.split_contents()
57     except ValueError:
58         raise template.TemplateSyntaxError, "%r tag requires exactly one argument" % token.contents.split()[0]
59
60     registry = ui.get_registry_by_name(registry)
61     nodelist = parser.parse(('endloopregistry',))
62     parser.delete_first_token()
63
64     return LoopRegistryNode(registry, nodelist)