blob: 7cc09715dc5a22cb76f83ffc01676b549c974f93 [file] [log] [blame]
Armin Ronacherf3d6a732008-05-25 12:52:11 +02001# -*- coding: utf-8 -*-
2from rwbench import ROOT
3from os.path import join
4from django.conf import settings
5settings.configure(TEMPLATE_DIRS=(join(ROOT, 'django'),))
6from django.template import loader as django_loader, Context as DjangoContext, \
7 Node, NodeList, Variable, TokenParser
8from django import template as django_template_module
9from django.template import Library
10
11
12# for django extensions. We monkey patch our extensions in so that
13# we don't have to initialize a more complex django setup.
14django_extensions = django_template_module.Library()
15django_template_module.builtins.append(django_extensions)
16
17
18from rwbench import dateformat
19django_extensions.filter(dateformat)
20
21
22def var_or_none(x):
23 if x is not None:
24 return Variable(x)
25
26
27# and more django extensions
28@django_extensions.tag
29def input_field(parser, token):
30 p = TokenParser(token.contents)
31 args = [p.value()]
32 while p.more():
33 args.append(p.value())
34 return InputFieldNode(*args)
35
36
37@django_extensions.tag
38def textarea(parser, token):
39 p = TokenParser(token.contents)
40 args = [p.value()]
41 while p.more():
42 args.append(p.value())
43 return TextareaNode(*args)
44
45
46@django_extensions.tag
47def form(parser, token):
48 p = TokenParser(token.contents)
49 args = []
50 while p.more():
51 args.append(p.value())
52 body = parser.parse(('endform',))
53 parser.delete_first_token()
54 return FormNode(body, *args)
55
56
57class InputFieldNode(Node):
58
59 def __init__(self, name, type=None, value=None):
60 self.name = var_or_none(name)
61 self.type = var_or_none(type)
62 self.value = var_or_none(value)
63
64 def render(self, context):
65 name = self.name.resolve(context)
66 type = 'text'
67 value = ''
68 if self.type is not None:
69 type = self.type.resolve(context)
70 if self.value is not None:
71 value = self.value.resolve(context)
72 tmpl = django_loader.get_template('_input_field.html')
73 return tmpl.render(DjangoContext({
74 'name': name,
75 'type': type,
76 'value': value
77 }))
78
79
80class TextareaNode(Node):
81
82 def __init__(self, name, rows=None, cols=None, value=None):
83 self.name = var_or_none(name)
84 self.rows = var_or_none(rows)
85 self.cols = var_or_none(cols)
86 self.value = var_or_none(value)
87
88 def render(self, context):
89 name = self.name.resolve(context)
90 rows = 10
91 cols = 40
92 value = ''
93 if self.rows is not None:
94 rows = int(self.rows.resolve(context))
95 if self.cols is not None:
96 cols = int(self.cols.resolve(context))
97 if self.value is not None:
98 value = self.value.resolve(context)
99 tmpl = django_loader.get_template('_textarea.html')
100 return tmpl.render(DjangoContext({
101 'name': name,
102 'rows': rows,
103 'cols': cols,
104 'value': value
105 }))
106
107
108class FormNode(Node):
109
110 def __init__(self, body, action=None, method=None):
111 self.body = body
112 self.action = action
113 self.method = method
114
115 def render(self, context):
116 body = self.body.render(context)
117 action = ''
118 method = 'post'
119 if self.action is not None:
120 action = self.action.resolve(context)
121 if self.method is not None:
122 method = self.method.resolve(context)
123 tmpl = django_loader.get_template('_form.html')
124 return tmpl.render(DjangoContext({
125 'body': body,
126 'action': action,
127 'method': method
128 }))