]> git.openstreetmap.org Git - osqa.git/blob - forum/templatetags/ui_registry.py
Improves the pagination, adds a new sorting method for searches. Fixes some issues...
[osqa.git] / forum / templatetags / ui_registry.py
1 from django import template
2 from forum.modules import ui
3 import logging
4
5 register = template.Library()
6
7
8 class LoadRegistryNode(template.Node):
9     def __init__(self, registry, separator):
10         self.registry = registry
11         self.separator = separator
12
13     def render(self, context):
14         separator = self.separator.render(context)
15         result = ''
16
17         for ui_object in self.registry:
18             if ui_object.can_render(context):
19                 try:
20                     if result:
21                         result += separator
22                     result += ui_object.render(context)
23                 except Exception, e:
24                     import traceback
25                     logging.error("Exception %s rendering ui objects %s: \n%s" % (
26                         e, ui_object, traceback.format_exc()
27                     ))
28
29         return result
30
31
32 @register.tag
33 def loadregistry(parser, token):
34     try:
35         tag_name, registry = token.split_contents()
36     except ValueError:
37         raise template.TemplateSyntaxError, "%r tag requires exactly one argument" % token.contents.split()[0]
38
39     registry = ui.get_registry_by_name(registry)
40     separator = parser.parse(('endloadregistry',))
41     parser.delete_first_token()
42     return LoadRegistryNode(registry, separator)
43
44
45 class LoopRegistryNode(template.Node):
46     def __init__(self, registry, nodelist):
47         self.registry = registry
48         self.nodelist = nodelist
49
50     def render(self, context):
51         result = ''
52
53         for ui_object in self.registry:
54             if ui_object.can_render(context):
55                 try:
56                     ui_object.update_context(context)
57                     result += self.nodelist.render(context)
58                 except Exception, e:
59                     import traceback
60                     logging.error("Exception %s updating ui loop context %s: \n%s" % (
61                         e, ui_object, traceback.format_exc()
62                     ))
63
64
65         return result
66
67 @register.tag
68 def loopregistry(parser, token):
69     try:
70         tag_name, registry = token.split_contents()
71     except ValueError:
72         raise template.TemplateSyntaxError, "%r tag requires exactly one argument" % token.contents.split()[0]
73
74     registry = ui.get_registry_by_name(registry)
75     nodelist = parser.parse(('endloopregistry',))
76     parser.delete_first_token()
77
78     return LoopRegistryNode(registry, nodelist)