annotate doc/templating.txt @ 1655:0feb34b2de71 0.6.0b3

*** empty log message ***
author Richard Jones <richard@users.sourceforge.net>
date Mon, 09 Jun 2003 23:51:14 +0000
parents 43ab730ee194
children 6535aa11418a
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
1089
43ab730ee194 instance -> tracker, node -> item
Richard Jones <richard@users.sourceforge.net>
parents: 991
diff changeset
5 :Version: $Revision: 1.14 $
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
977
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
18 parsing, and since no template tag could encapsulate itself, the parser
955
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
977
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
26 don't parse as we'd hope. We can modify the parser to work, but that doesn't
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
27 another couple of issues that have arisen:
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28
956
Richard Jones <richard@users.sourceforge.net>
parents: 955
diff changeset
29 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
30 and doesn't play well with other tools, and
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31 2. user requirements generally have to be anticipated and accounted for in
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 templating functions (like ``plain()`` and ``checklist()`` above), and
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33 we are therefore artificially restrictive.
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 Arguments for switching templating systems:
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 *Pros*
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 - more flexibility in templating control and content
956
Richard Jones <richard@users.sourceforge.net>
parents: 955
diff changeset
40 - we can be well-formed
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 *Cons*
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 - 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
45 next release anyway)
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 - current templating system is pretty trivial, and a more flexible system
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 is likely to be more complex
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50 Templates
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
957
Richard Jones <richard@users.sourceforge.net>
parents: 956
diff changeset
53 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
54 templates through:
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55
1089
43ab730ee194 instance -> tracker, node -> item
Richard Jones <richard@users.sourceforge.net>
parents: 991
diff changeset
56 1. allowing the tracker to define a "page" template, which holds the overall
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 page structure, including header and footer
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59
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 Possible approaches
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
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 Zope's PageTemplates
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
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 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
68 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
69 appropriate infrastructure, the above two examples would read:
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 <span tal:replace="item/status/checklist">status checklist</span>
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 <tr tal:attributes="class string:row-${item/status/name}">
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 ... which doesn't look that much more complicated... honest...
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 Other fun can be had when you start playing with stuff like:
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 <table>
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 <tr tal:repeat="message item/msg/list">
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 <td tal:define="from message/from">
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82 <a href="" tal:attributes="href string:mailto:${from/address}"
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 tal:content="from/name">mailto link</a>
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84 </td>
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 <td tal:content="message/title">subject</td>
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 <td tal:content="message/created">received date</td>
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 </tr>
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 </table>
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89
963
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
90 Note: even if we don't switch templating as a whole, this document may be
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
91 applied to the ZRoundup frontend.
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
92
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
93 PageTemplates in a Nutshell
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
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
96 PageTemplates consist of three technologies:
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
97
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
98 TAL - Template Attribute Language
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
99 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
100 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
101 runs them using some expression engine.
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
102
977
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
103 TALES - TAL Expression Syntax
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
104 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
105 that form the tag attribute values. TALES expressions come in three
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
106 flavours:
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
107
961
7d68f88f0642 more useful example
Richard Jones <richard@users.sourceforge.net>
parents: 960
diff changeset
108 Path Expressions - eg. ``item/status/checklist``
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
109 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
110 ``item/status/checklist`` is broken into parts ``item``, ``status``
7d68f88f0642 more useful example
Richard Jones <richard@users.sourceforge.net>
parents: 960
diff changeset
111 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
112 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
113 ``status`` item (as in ``item['status']``). If that
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
114 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
115 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
116 stringified. Path expressions may have an optional ``path:`` prefix, though
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
117 they are the default expression type, so it's not necessary.
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
118
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
119 String Expressions - eg. ``string:hello ${user/name}``
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
120 These expressions are simple string interpolations (though they can be just
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
121 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
122 ``${ ... }`` is just a path expression as above.
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
123
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
124 Python Expressions - eg. ``python: 1+1``
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
125 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
126 variables are available, so ``python:item.status.checklist()`` would be
7d68f88f0642 more useful example
Richard Jones <richard@users.sourceforge.net>
parents: 960
diff changeset
127 equivalent to ``item/status/checklist``, assuming that ``checklist`` is
7d68f88f0642 more useful example
Richard Jones <richard@users.sourceforge.net>
parents: 960
diff changeset
128 a method.
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
129
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
130 PageTemplates
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
131 The PageTemplates module glues together TAL and TALES.
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
132
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
134 Implementation
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
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
137 I'm envisaging an infrastructure layer where each template has the following
977
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
138 "root level" (that is, directly accessible in the TALES namespace) variables
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
139 defined:
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140
991
79129f013153 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 978
diff changeset
141 *klass*
1089
43ab730ee194 instance -> tracker, node -> item
Richard Jones <richard@users.sourceforge.net>
parents: 991
diff changeset
142 The current class of item being displayed as an HTMLClass instance. Name is
991
79129f013153 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 978
diff changeset
143 mangled so it can be used in Python expressions.
963
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
144
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
145 *item*
1089
43ab730ee194 instance -> tracker, node -> item
Richard Jones <richard@users.sourceforge.net>
parents: 991
diff changeset
146 The current item from the database, if we're viewing a specific item, as an
963
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
147 HTMLItem instance. If it doesn't exist, then we're on a new item page.
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
148
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
149 (*classname*)
963
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
150 this is one of two things:
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
151
1089
43ab730ee194 instance -> tracker, node -> item
Richard Jones <richard@users.sourceforge.net>
parents: 991
diff changeset
152 1. the *item* is also available under its classname, so a *user* item
963
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
153 would also be available under the name *user*. This is also an HTMLItem
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
154 instance.
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
155 2. if there's no *item* then the current class is available through this
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
156 name, thus "user/name" and "user/name/menu" will still work - the latter
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
157 will pull information from the form if it can.
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
158
978
Richard Jones <richard@users.sourceforge.net>
parents: 977
diff changeset
159 this is a dangerous attribute, and may cause us pain the long run (its name
Richard Jones <richard@users.sourceforge.net>
parents: 977
diff changeset
160 may clash with other top-level variables ... it already clashed with the
Richard Jones <richard@users.sourceforge.net>
parents: 977
diff changeset
161 proposed *user* variable). It might be safer to go with just *class* and
Richard Jones <richard@users.sourceforge.net>
parents: 977
diff changeset
162 *item*, actually...
Richard Jones <richard@users.sourceforge.net>
parents: 977
diff changeset
163
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
164 *form*
963
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
165 The current CGI form information as a mapping of form argument name to value
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
166
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
167 *request*
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
168 Includes information about the current request, including:
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
169 - the url
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
170 - the current index information (``filterspec``, ``filter`` args,
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
171 ``properties``, etc) parsed out of the form.
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
172 - methods for easy filterspec link generation
1089
43ab730ee194 instance -> tracker, node -> item
Richard Jones <richard@users.sourceforge.net>
parents: 991
diff changeset
173 - *user*, the current user item as an HTMLItem instance
963
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
174
1089
43ab730ee194 instance -> tracker, node -> item
Richard Jones <richard@users.sourceforge.net>
parents: 991
diff changeset
175 *tracker*
43ab730ee194 instance -> tracker, node -> item
Richard Jones <richard@users.sourceforge.net>
parents: 991
diff changeset
176 The current tracker
963
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
177
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
178 *db*
963
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
179 The current open database
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
180
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
181 *config*
963
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
182 The current instance config
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
183
960
6b6be8818bdd more info
Richard Jones <richard@users.sourceforge.net>
parents: 959
diff changeset
184 *modules*
963
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
185 python modules made available (XXX: not sure what's actually in there tho)
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
186
991
79129f013153 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 978
diff changeset
187 Accesses through a class (either through *klass* or *db.<classname>*)::
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
188
959
Richard Jones <richard@users.sourceforge.net>
parents: 958
diff changeset
189 class HTMLClass:
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
190 def __getattr__(self, attr):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
191 ''' return an HTMLItem instance '''
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
192 def classhelp(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
193 def list(self, ...)
966
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
194 def filter(self):
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
195 ''' Return a list of items from this class, filtered and sorted
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
196 by the current requested filterspec/filter/sort/group args
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
197 '''
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 Accesses through an *item*::
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
200
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
201 class HTMLItem:
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
202 def __getattr__(self, attr):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
203 ''' return an HTMLItem instance '''
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
204 def history(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
205 def remove(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
206
963
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
207 Note: the above could cause problems if someone wants to have properties
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
208 called "history" or "remove"...
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
209
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
210 String, Number, Date, Interval HTMLProperty
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
211 a wrapper object which may be stringified for the current plain() behaviour
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
212 and has methods emulating all the current display functions, so
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
213 ``item/name/plain`` would emulate the current ``call="plain()``". Also,
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
214 ``python:item.name.plain(name=value)`` would work just fine::
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
215
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
216 class HTMLProperty:
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
217 def __init__(self, instance, db, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
218 def __str__(self):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
219 return self.plain()
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
220
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
221 class StringHTMLProperty(HTLProperty):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
222 def plain(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
223 def field(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
224 def stext(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
225 def multiline(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
226 def email(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
227
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
228 class NumberHTMLProperty(HTMLProperty):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
229 def plain(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
230 def field(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
231
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
232 class BooleanHTMLProperty(HTMLProperty):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
233 def plain(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
234 def field(self, ...)
955
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 DateHTMLProperty(HTMLProperty):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
237 def plain(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
238 def field(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
239 def reldate(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
240
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
241 class IntervalHTMLProperty(HTMLProperty):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
242 def plain(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
243 def field(self, ...)
963
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
244 def pretty(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
245
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
246 Link HTMLProperty
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
247 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
248 the class information. Stringifying the object itself would result in the
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
249 value from the item being displayed. Accessing attributes of this object
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
250 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
251 property accessed (so item/assignedto/name would look up the user entry
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
252 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
253 that user)::
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
254
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
255 class LinkHTMLProperty(HTMLProperty):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
256 ''' Be a HTMLItem too '''
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
257 def __getattr__(self, attr):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
258 ''' return a new HTMLProperty '''
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
259 def download(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
260 def checklist(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
261
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
262 Multilink HTMLProperty
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
263 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
264 case for each entry in the multilink::
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
265
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
266 class MultilinkHTMLProperty(HTMLProperty):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
267 def __len__(self):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
268 ''' length of the multilink '''
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
269 def __getitem(self, num):
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
270 ''' return a new HTMLItem '''
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
271 def checklist(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
272 def list(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
273
963
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
274 *request*
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
275 the request object will handle::
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
276
963
Richard Jones <richard@users.sourceforge.net>
parents: 961
diff changeset
277 class Request:
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
278 def __init__(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
279 def filterspec(self, ...)
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
280
978
Richard Jones <richard@users.sourceforge.net>
parents: 977
diff changeset
281 Accesses through the *user* attribute of *request*::
Richard Jones <richard@users.sourceforge.net>
parents: 977
diff changeset
282
Richard Jones <richard@users.sourceforge.net>
parents: 977
diff changeset
283 class HTMLUser(HTMLItem):
Richard Jones <richard@users.sourceforge.net>
parents: 977
diff changeset
284 def hasPermission(self, ...)
Richard Jones <richard@users.sourceforge.net>
parents: 977
diff changeset
285
Richard Jones <richard@users.sourceforge.net>
parents: 977
diff changeset
286 (note that the other permission check implemented by the security module may
Richard Jones <richard@users.sourceforge.net>
parents: 977
diff changeset
287 be implemented easily in a tal:condition, so isn't needed here)
Richard Jones <richard@users.sourceforge.net>
parents: 977
diff changeset
288
966
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
289 Template files
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
290 ~~~~~~~~~~~~~~
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
291
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
292 Each instance will have the opportunity to supply the following templates:
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
293
966
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
294 page
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
295 This is the overall page look template, and includes at some point a TAL
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
296 command that includes the variable "content". This variable causes the actual
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
297 page content to be generated.
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
298
977
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
299 [classname].[template type]
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
300 Templates that have this form are applied to item data. There are three forms
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
301 of special template types:
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
302
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
303 [classname].index
1089
43ab730ee194 instance -> tracker, node -> item
Richard Jones <richard@users.sourceforge.net>
parents: 991
diff changeset
304 This template is used when the URL specifies only the class, and not an item
977
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
305 designator. It displays a list of [classname] items from the database, and
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
306 a "filter refinement" form.
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
307 Would perform a TAL ``repeat`` command using the list supplied by
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
308 ``class/filter``. This deviates from the current situation in that currently
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
309 the index template specifies a single row, and the filter part is
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
310 automatically generated.
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
311
977
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
312 [classname].item
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
313 This template is used when the URL specifies an item designator. It's the
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
314 default template used (when no template is explicitly given). It displays
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
315 a single item from the database using the *classname* variable (that
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
316 is, the variable of the same name as the class being displayed. If
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
317
977
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
318 These two special template types may be overridden by the :template CGI
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
319 variable.
966
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
320
977
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
321 Note that the "newitem" template doesn't exist any more because the item
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
322 templates may determine whether the page has an existing item to render. The
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
323 new item page would be accessed by "/tracker/url/issue?:template=item".
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
324 The old "filter" template has been subsumed by the index template.
955
84281f7f2900 templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
325
958
Richard Jones <richard@users.sourceforge.net>
parents: 957
diff changeset
326
966
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
327 Integrating Code
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
328 ~~~~~~~~~~~~~~~~
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
329
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
330 We will install PageTemplates, TAL and ZTUtils in site-packages. If there is a
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
331 local Zope installation, it will use its own PageTemplates code (Zope modifies
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
332 the module search path to give precedence to its own module library).
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
333
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
334 We will then install the trivial MultiMapping and ComputedAttribute modules in
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
335 the Roundup package, and have some import trickery that determines whether
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
336 they are required, and if so they will be imported as if they were at the
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
337 "top level" of the module namespace.
cc8f9193bf2f more tweaks
Richard Jones <richard@users.sourceforge.net>
parents: 963
diff changeset
338
977
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
339 New CGI client structure
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
340 ~~~~~~~~~~~~~~~~~~~~~~~~
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
341
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
342 Handling of a request in the CGI client will take three phases:
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
343
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
344 1. Determine user, pre-set "content" to authorisation page if necessary
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
345 2. Render main page, with callback to "content"
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
346 3. Render content - if not pre-set, then determine which content to render
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
347
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
348
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
349 Use Cases
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
350 ~~~~~~~~~
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
351
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
352 Meta/parent bug
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
353 Can be done with addition to the schema and then the actual parent heirarchy
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
354 may be displayed with a new template page ":dependencies" or something.
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
355
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
356 Submission wizard
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
357 Can be done using new templates ":page1", ":page2", etc and some additional
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
358 actions on the CGI Client class in the instance.
22e6707a993a More tweaks to the design.
Richard Jones <richard@users.sourceforge.net>
parents: 966
diff changeset
359

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