Mercurial > p > roundup > code
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 |
| 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 | 31 1. the template syntax is not well-formed, and therefore is a pain to parse |
| 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 | 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 | 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 | 92 PageTemplates in a Nutshell |
| 93 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| 94 | |
| 95 PageTemplates consist of three technologies: | |
| 96 | |
| 97 TAL - Template Attribute Language | |
| 98 This is the syntax which is woven into the HTML using the ``tal:`` tag | |
| 99 attributes. A TAL parser pulls out the TAL commands from the attributes | |
| 100 runs them using some expression engine. | |
| 101 | |
| 102 TALES - TAL Expression Language | |
| 103 The expression engine used in this case is TALES, which runs the expressions | |
| 104 that form the tag attribute values. TALES expressions come in three | |
| 105 flavours: | |
| 106 | |
|
961
7d68f88f0642
more useful example
Richard Jones <richard@users.sourceforge.net>
parents:
960
diff
changeset
|
107 Path Expressions - eg. ``item/status/checklist`` |
| 960 | 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 | 113 fails, the path expression fails. When we get to the end, the object we're |
| 114 left with is evaluated to get a string - methods are called, objects are | |
| 115 stringified. Path expressions may have an optional ``path:`` prefix, though | |
| 116 they are the default expression type, so it's not necessary. | |
| 117 | |
| 118 String Expressions - eg. ``string:hello ${user/name}`` | |
| 119 These expressions are simple string interpolations (though they can be just | |
| 120 plain strings with no interpolation if you want. The expression in the | |
| 121 ``${ ... }`` is just a path expression as above. | |
| 122 | |
| 123 Python Expressions - eg. ``python: 1+1`` | |
| 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 | 128 |
| 129 PageTemplates | |
| 130 The PageTemplates module glues together TAL and TALES. | |
| 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 | 137 "root level" (that is, driectly accessible in the TALES namespace) variables |
| 138 defined: | |
|
955
84281f7f2900
templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
139 |
| 960 | 140 *user* |
| 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 | 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 | 145 the current node from the database, if we're viewing a specific node, as an |
| 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 | 149 would also be available under the name *user*. This is also an HTMLItem |
| 150 instance. | |
|
955
84281f7f2900
templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
151 *form* |
| 960 | 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 | 161 *modules* |
| 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 | 164 Accesses through a class (either through *class* or *db.<classname>*): |
| 165 | |
| 959 | 166 class HTMLClass: |
| 958 | 167 def __getattr__(self, attr): |
| 168 ''' return an HTMLItem instance ''' | |
| 169 def classhelp(self, ...) | |
| 170 def list(self, ...) | |
|
955
84281f7f2900
templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
171 |
| 958 | 172 Accesses through an *item*:: |
| 173 | |
| 174 class HTMLItem: | |
| 175 def __getattr__(self, attr): | |
| 176 ''' return an HTMLItem instance ''' | |
| 177 def history(self, ...) | |
| 178 def classhelp(self, ...) | |
| 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 | 187 class HTMLProperty: |
| 188 def __init__(self, instance, db, ...) | |
| 189 def __str__(self): | |
| 190 return self.plain() | |
|
955
84281f7f2900
templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
191 |
| 958 | 192 class StringHTMLProperty(HTLProperty): |
| 193 def plain(self, ...) | |
| 194 def field(self, ...) | |
| 195 def stext(self, ...) | |
| 196 def multiline(self, ...) | |
| 197 def email(self, ...) | |
|
955
84281f7f2900
templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
198 |
| 958 | 199 class NumberHTMLProperty(HTMLProperty): |
| 200 def plain(self, ...) | |
| 201 def field(self, ...) | |
|
955
84281f7f2900
templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
202 |
| 958 | 203 class BooleanHTMLProperty(HTMLProperty): |
| 204 def plain(self, ...) | |
| 205 def field(self, ...) | |
|
955
84281f7f2900
templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
206 |
| 958 | 207 class DateHTMLProperty(HTMLProperty): |
| 208 def plain(self, ...) | |
| 209 def field(self, ...) | |
| 210 def reldate(self, ...) | |
|
955
84281f7f2900
templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
211 |
| 958 | 212 class IntervalHTMLProperty(HTMLProperty): |
| 213 def plain(self, ...) | |
| 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 | 225 class LinkHTMLProperty(HTMLProperty): |
| 226 ''' Be a HTMLItem too ''' | |
| 227 def __getattr__(self, attr): | |
| 228 ''' return a new HTMLProperty ''' | |
| 229 def download(self, ...) | |
| 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 | 236 class MultilinkHTMLProperty(HTMLProperty): |
| 237 def __len__(self): | |
| 238 ''' length of the multilink ''' | |
| 239 def __getitem(self, num): | |
| 240 ''' return a new HTMLItem ''' | |
| 241 def checklist(self, ...) | |
| 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 | 247 class Util: |
| 248 def __init__(self, ...) | |
| 249 def filterspec(self, ...) | |
| 250 def note(self, ...) | |
| 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 | 266 Roundup users access to acquired information in their templates. We could |
| 267 get around that by modifying the ZRoundup interface to use the "real Zope" | |
| 268 ZPT. Maybe. | |
|
955
84281f7f2900
templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
269 |
| 958 | 270 2. Implement the Roundup infrastructure described in the `implementation`_ |
| 271 above. | |
|
955
84281f7f2900
templating redesign
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
272 |
| 958 | 273 |
