annotate doc/templating.txt @ 961:7d68f88f0642

more useful example
author Richard Jones <richard@users.sourceforge.net>
date Tue, 20 Aug 2002 08:12:45 +0000
parents 6b6be8818bdd
children 6010f0078800
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 ==========================
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 HTML Templating Mechanisms
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 ==========================
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4
961
7d68f88f0642 more useful example
Richard Jones <richard@users.sourceforge.net>
parents: 960
diff changeset
5 :Version: $Revision: 1.8 $
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 Current Situation and Issues
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 ============================
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 Syntax
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11 ------
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
12
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13 Roundup currently uses an element-based HTML-tag-alike templating syntax::
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 <display call="checklist('status')">
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17 The templates were initially parsed using recursive regular expression
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
18 parsing, and since no template tag could be encapsulate itself, the parser
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19 worked just fine. Then we got the ``<require>`` tag, which could have other
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
20 ``<require>`` tags inside. This forced us to move towards a more complete
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21 parser, using the standard python sgmllib/htmllib parser. The downside of this
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
22 switch is that constructs of the form::
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24 <tr class="row-<display call="plain('status')">">
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26 don't parse as we'd hope. It would be almost impossible to modify the sgmllib
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 parser to parse the above "correctly", so a wholly new parser would be
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28 required. That is a large undertaking, and doesn't address another couple of
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 issues that have arisen:
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30
956
Richard Jones <richard@users.sourceforge.net>
parents: 955
diff changeset
31 1. the template syntax is not well-formed, and therefore is a pain to parse
Richard Jones <richard@users.sourceforge.net>
parents: 955
diff changeset
32 and doesn't play well with other tools, and
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33 2. user requirements generally have to be anticipated and accounted for in
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34 templating functions (like ``plain()`` and ``checklist()`` above), and
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 we are therefore artificially restrictive.
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 Arguments for switching templating systems:
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 *Pros*
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 - more flexibility in templating control and content
956
Richard Jones <richard@users.sourceforge.net>
parents: 955
diff changeset
42 - we can be well-formed
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 *Cons*
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 - installed user base (though they'd have to edit their templates with the
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 next release anyway)
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 - current templating system is pretty trivial, and a more flexible system
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49 is likely to be more complex
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 Templates
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 ---------
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54
957
Richard Jones <richard@users.sourceforge.net>
parents: 956
diff changeset
55 We should also take this opportunity to open up the flexibility of the
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 templates through:
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58 1. allowing the instance to define a "page" template, which holds the overall
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59 page structure, including header and footer
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 Possible approaches
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 ===================
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 Zope's PageTemplates
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 --------------------
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 Using Zope's PageTemplates seems to be the best approach of the lot.
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 In my opinion, it's the peak of HTML templating technology at present. With
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 appropriate infrastructure, the above two examples would read:
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 <span tal:replace="item/status/checklist">status checklist</span>
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
75 <tr tal:attributes="class string:row-${item/status/name}">
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77 ... which doesn't look that much more complicated... honest...
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 Other fun can be had when you start playing with stuff like:
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 <table>
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82 <tr tal:repeat="message item/msg/list">
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 <td tal:define="from message/from">
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84 <a href="" tal:attributes="href string:mailto:${from/address}"
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 tal:content="from/name">mailto link</a>
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 </td>
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 <td tal:content="message/title">subject</td>
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 <td tal:content="message/created">received date</td>
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 </tr>
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90 </table>
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
92 PageTemplates in a Nutshell
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
93 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
94
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
95 PageTemplates consist of three technologies:
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
96
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
97 TAL - Template Attribute Language
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
98 This is the syntax which is woven into the HTML using the ``tal:`` tag
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
99 attributes. A TAL parser pulls out the TAL commands from the attributes
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
100 runs them using some expression engine.
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
101
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
102 TALES - TAL Expression Language
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
103 The expression engine used in this case is TALES, which runs the expressions
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
104 that form the tag attribute values. TALES expressions come in three
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
105 flavours:
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
106
961
7d68f88f0642 more useful example
Richard Jones <richard@users.sourceforge.net>
parents: 960
diff changeset
107 Path Expressions - eg. ``item/status/checklist``
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
108 These are object attribute / item accesses. Roughly speaking, the path
961
7d68f88f0642 more useful example
Richard Jones <richard@users.sourceforge.net>
parents: 960
diff changeset
109 ``item/status/checklist`` is broken into parts ``item``, ``status``
7d68f88f0642 more useful example
Richard Jones <richard@users.sourceforge.net>
parents: 960
diff changeset
110 and ``checklist``. The ``item`` part is the root of the expression.
7d68f88f0642 more useful example
Richard Jones <richard@users.sourceforge.net>
parents: 960
diff changeset
111 We then look for a ``status`` attribute on ``item``, or failing that, a
7d68f88f0642 more useful example
Richard Jones <richard@users.sourceforge.net>
parents: 960
diff changeset
112 ``status`` item (as in ``item['status']``). If that
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
113 fails, the path expression fails. When we get to the end, the object we're
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
114 left with is evaluated to get a string - methods are called, objects are
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
115 stringified. Path expressions may have an optional ``path:`` prefix, though
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
116 they are the default expression type, so it's not necessary.
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
117
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
118 String Expressions - eg. ``string:hello ${user/name}``
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
119 These expressions are simple string interpolations (though they can be just
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
120 plain strings with no interpolation if you want. The expression in the
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
121 ``${ ... }`` is just a path expression as above.
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
122
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
123 Python Expressions - eg. ``python: 1+1``
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
124 These expressions give the full power of Python. All the "root level"
961
7d68f88f0642 more useful example
Richard Jones <richard@users.sourceforge.net>
parents: 960
diff changeset
125 variables are available, so ``python:item.status.checklist()`` would be
7d68f88f0642 more useful example
Richard Jones <richard@users.sourceforge.net>
parents: 960
diff changeset
126 equivalent to ``item/status/checklist``, assuming that ``checklist`` is
7d68f88f0642 more useful example
Richard Jones <richard@users.sourceforge.net>
parents: 960
diff changeset
127 a method.
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
128
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
129 PageTemplates
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
130 The PageTemplates module glues together TAL and TALES.
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
131
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
132
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133 Implementation
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
134 ~~~~~~~~~~~~~~
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
135
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
136 I'm envisaging an infrastructure layer where each template has the following
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
137 "root level" (that is, driectly accessible in the TALES namespace) variables
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
138 defined:
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
139
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
140 *user*
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
141 the current user node as an HTMLItem instance
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142 *class*
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
143 the current class of node being displayed as an HTMLClass instance
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
144 *item*
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
145 the current node from the database, if we're viewing a specific node, as an
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
146 HTMLItem instance
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147 (*classname*)
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
148 the current node is also available under its classname, so a *user* node
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
149 would also be available under the name *user*. This is also an HTMLItem
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
150 instance.
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
151 *form*
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
152 the current CGI form information as a mapping of form argument name to value
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
153 *instance*
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
154 the current instance
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
155 *db*
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
156 the current open database
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
157 *config*
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
158 the current instance config
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
159 *util*
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
160 utility methods
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
161 *modules*
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
162 Python modules made available (XXX: not sure what's actually in there tho)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
163
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
164 Accesses through a class (either through *class* or *db.<classname>*):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
165
959
Richard Jones <richard@users.sourceforge.net>
parents: 958
diff changeset
166 class HTMLClass:
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
167 def __getattr__(self, attr):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
168 ''' return an HTMLItem instance '''
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
169 def classhelp(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
170 def list(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
171
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
172 Accesses through an *item*::
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
173
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
174 class HTMLItem:
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
175 def __getattr__(self, attr):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
176 ''' return an HTMLItem instance '''
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
177 def history(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
178 def classhelp(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
179 def remove(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
180
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
181 String, Number, Date, Interval HTMLProperty
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
182 a wrapper object which may be stringified for the current plain() behaviour
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
183 and has methods emulating all the current display functions, so
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
184 ``item/name/plain`` would emulate the current ``call="plain()``". Also,
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
185 ``python:item.name.plain(name=value)`` would work just fine::
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
186
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
187 class HTMLProperty:
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
188 def __init__(self, instance, db, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
189 def __str__(self):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
190 return self.plain()
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
191
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
192 class StringHTMLProperty(HTLProperty):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
193 def plain(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
194 def field(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
195 def stext(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
196 def multiline(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
197 def email(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
198
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
199 class NumberHTMLProperty(HTMLProperty):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
200 def plain(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
201 def field(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
202
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
203 class BooleanHTMLProperty(HTMLProperty):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
204 def plain(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
205 def field(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
206
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
207 class DateHTMLProperty(HTMLProperty):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
208 def plain(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
209 def field(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
210 def reldate(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
211
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
212 class IntervalHTMLProperty(HTMLProperty):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
213 def plain(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
214 def field(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
215
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
216 Link HTMLProperty
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
217 the wrapper object would include the above as well as being able to access
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
218 the class information. Stringifying the object itself would result in the
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
219 value from the item being displayed. Accessing attributes of this object
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
220 would result in the appropriate entry from the class being queried for the
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
221 property accessed (so item/assignedto/name would look up the user entry
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
222 identified by the assignedto property on item, and then the name property of
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
223 that user)::
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
224
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
225 class LinkHTMLProperty(HTMLProperty):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
226 ''' Be a HTMLItem too '''
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
227 def __getattr__(self, attr):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
228 ''' return a new HTMLProperty '''
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
229 def download(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
230 def checklist(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
231
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
232 Multilink HTMLProperty
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
233 the wrapper would also be iterable, returning a wrapper object like the Link
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
234 case for each entry in the multilink::
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
235
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
236 class MultilinkHTMLProperty(HTMLProperty):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
237 def __len__(self):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
238 ''' length of the multilink '''
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
239 def __getitem(self, num):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
240 ''' return a new HTMLItem '''
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
241 def checklist(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
242 def list(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
243
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
244 *util*
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
245 the util object will handle::
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
246
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
247 class Util:
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
248 def __init__(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
249 def filterspec(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
250 def note(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
251 def submit(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
252
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
253 Action
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
254 ======
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
255
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
256 1. Investigate how PageTemplates would be integrated into Roundup:
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
257
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
258 - we could go for a fully-divorced-from-Zope approach, which would involve
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
259 bundling PageTemplates/TAL/ZTUtils in with Roundup, with all the
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
260 Zope-specific bits removed.
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
261 - we could try to coexist with a Zope installation, but there the problem
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
262 would be that Zope includes its own copy of PageTemplates/TAL/ZTUtils and
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
263 we'd be installing a version in site-packages, which would be bad.
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
264
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
265 The latter may allow nicer integration with Zope itself, giving Zope
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
266 Roundup users access to acquired information in their templates. We could
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
267 get around that by modifying the ZRoundup interface to use the "real Zope"
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
268 ZPT. Maybe.
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
269
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
270 2. Implement the Roundup infrastructure described in the `implementation`_
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
271 above.
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
272
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
273

Roundup Issue Tracker: http://roundup-tracker.org/