General State Editor
[darcs-mirror-latutman.git] / xslt / libxslt / forms2.xsl
1 <!DOCTYPE xsl:stylesheet PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xslt2.dtd">\r
2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">\r
3 \r
4 \r
5 <!--generic forms implementation -->\r
6 <xsl:variable name="locale">en-us</xsl:variable>\r
7 <xsl:variable name="formDict">\r
8 <locale>\r
9   <div name="account">\r
10         <attr name="userName">\r
11           <en-us>Name</en-us>\r
12         </attr>\r
13   </div>\r
14   <form name="login">\r
15         <!--login-->\r
16         <field name="email">\r
17           <en-us><n>Email</n></en-us>\r
18         </field>\r
19         <field name="password">\r
20           <en-us><n>Password</n></en-us>\r
21                 </field>\r
22         <field name="login">\r
23           <en-us><n>Login</n></en-us>\r
24         </field>\r
25   </form>\r
26 </locale>\r
27 </xsl:variable>\r
28 \r
29 <xsl:template match="form" >\r
30   <form id="{@id}"  action="{@action}" method="{@method}" >\r
31         <xsl:apply-templates select="*" />\r
32   </form>\r
33 </xsl:template>\r
34 \r
35 \r
36 <xsl:template match="field[@type='Submit']"  >\r
37   <div class="row">\r
38         <span class="formLabel"/>\r
39         <span class="formEl">\r
40           <xsl:variable name="form" select="ancestor::form/@name"/>\r
41           <xsl:variable name="name" select="@name"/>\r
42           <xsl:variable name="info" \r
43                                         select="$formDict/locale/form[@name=$form]/field[@name=$name]/*[name()=$locale]"/>\r
44           <xsl:variable name="value">\r
45                 <xsl:choose>\r
46                   <xsl:when test="count($info)=0"><xsl:value-of select="@name"/></xsl:when>\r
47                   <xsl:otherwise><xsl:value-of select="$info/n/text()"/></xsl:otherwise>\r
48                 </xsl:choose>\r
49           </xsl:variable>\r
50           <input type="submit" name="{@name}" id="{ancestor::form/@id}{@name}" \r
51                          value="{$value}" />\r
52 <!--$info/n/text()-->\r
53         </span>\r
54   </div>\r
55 </xsl:template>\r
56 \r
57 \r
58 \r
59 <xsl:template match="field" >\r
60   <xsl:apply-templates select="." mode="fieldBefore"/>\r
61   <xsl:variable name="name" select="@name"/>\r
62   <xsl:variable name="form" select="ancestor::form/@name"/>\r
63   <xsl:variable name="info" \r
64                                 select="$formDict/locale/form[@name=$form]/field[@name=$name]/*[name()=$locale]"/>\r
65   <!--select="$formDict/locale/*[name()=$name]/*[name()=$locale]"/>-->\r
66   <div class="row">\r
67         <span class="formLabel">\r
68           <xsl:choose>\r
69                 <xsl:when test="count($info/*)!=0">\r
70                   <xsl:copy-of select="$info/n/*|$info/n/text()"/>\r
71                 </xsl:when>\r
72                 <xsl:otherwise>\r
73                   <xsl:value-of select="@name"/>\r
74                 </xsl:otherwise>\r
75           </xsl:choose>\r
76         </span>\r
77         <span class="formEl">\r
78           <xsl:apply-templates select="." mode="formEl">\r
79                 <xsl:with-param name="info" select="$info"/>\r
80           </xsl:apply-templates>\r
81         </span>\r
82         <span class="instructEl">\r
83           <xsl:choose>\r
84                 <xsl:when test="$info/note!=''">\r
85                   (<xsl:copy-of select="$info/note"/>)\r
86                 </xsl:when>\r
87                 <xsl:when test="count($info/*)=0">\r
88                   (<xsl:value-of select="@type"/>\r
89                   <xsl:apply-templates select="option" mode="instruct"/>\r
90                   )\r
91                 </xsl:when>\r
92                 <xsl:otherwise/>\r
93           </xsl:choose>\r
94         </span>\r
95   </div>\r
96   <xsl:apply-templates select="." mode="fieldAfter"/>\r
97 </xsl:template>\r
98 \r
99 <xsl:template match="option" mode="instruct">\r
100   [<xsl:value-of select="@value"/>]\r
101 </xsl:template>\r
102 \r
103 <xsl:template match="field" mode="formEl" >\r
104   <xsl:param name="info"/>\r
105   <input type="text" name="{@name}" id="{ancestor::form/@id}{@name}" \r
106                  value="{@value}"/>\r
107 </xsl:template>\r
108 \r
109 \r
110 <xsl:template match="field[@type='Name']" mode="formEl" >\r
111   <xsl:param name="info"/>\r
112   <input type="text" name="{@name}" id="{ancestor::form/@id}{@name}" \r
113                  value="{@value}"/>\r
114 </xsl:template>\r
115 \r
116 <xsl:template match="field[@type='Phrase']" mode="formEl" >\r
117   <xsl:param name="info"/>\r
118   <input type="text" name="{@name}" id="{ancestor::form/@id}{@name}" \r
119                  value="{@value}"/>\r
120 </xsl:template>\r
121 \r
122 <xsl:template match="field[@type='Word']" mode="formEl" >\r
123   <xsl:param name="info"/>\r
124   <input type="text" name="{@name}" id="{ancestor::form/@id}{@name}" \r
125                  value="{@value}" size="10"/>\r
126 </xsl:template>\r
127 \r
128 <!--\r
129 <xsl:template match="field[@type='Select']" mode="formEl">\r
130   <xsl:param name="info"/>\r
131   <xsl:choose>\r
132         <xsl:when test="count(option)&lt;4">\r
133           <xsl:apply-templates select="option" mode="formElRadio"/>\r
134         </xsl:when>\r
135         <xsl:when test="count($info/option)&lt;4">\r
136           <xsl:apply-templates select="option" mode="formElRadio"/>\r
137         </xsl:when>\r
138         <xsl:otherwise>\r
139         </xsl:otherwise>\r
140   </xsl:choose>\r
141 </xsl:template>\r
142 -->\r
143 <xsl:template match="field[@type='Bool']" mode="formEl">\r
144   <xsl:param name="info"/>\r
145   <xsl:variable name="opt1Info">\r
146         <xsl:copy-of select="$info/option[1]/*|$info/option[1]/text()"/>\r
147   </xsl:variable>\r
148   <label><xsl:value-of select="$opt1Info"/>\r
149         <input type="radio" name="{@name}" id="{ancestor::form/@id}{@name}_1" \r
150                  value="{$info/option[1]/@value}" />\r
151   </label>\r
152   <label><xsl:copy-of select="$info/option[2]/*|$info/option[2]/text()"/>\r
153         <input type="radio" name="{@name}" id="{ancestor::form/@id}{@name}_2" \r
154                  value="{$info/option[2]/@value}" />\r
155   </label>\r
156 </xsl:template>\r
157 \r
158 \r
159 <xsl:template match="field[@type='Email']" mode="formEl">\r
160   <input type="text" name="{@name}" id="{ancestor::form/@id}{@name}" \r
161                  value="{@value}" size="30"/>\r
162   <!--\r
163         add javascript here later to validate email format!\r
164         need interface for javascript events?\r
165         or just put javascript inline that associates actions?\r
166   -->\r
167 </xsl:template>\r
168 \r
169 <xsl:template match="field[@type='Password']" mode="formEl">\r
170   <input type="password" name="{@name}" id="{ancestor::form/@id}{@name}" \r
171                  value="{@value}" size="10"/>\r
172 </xsl:template>\r
173 \r
174 <xsl:template match="field[@type='URL']" mode="formEl">\r
175   <input type="text" name="{@name}" \r
176                  id="{ancestor::form/@id}{@name}" \r
177                  value="{@value}" size="30"/>\r
178 </xsl:template>\r
179 \r
180 <xsl:template match="field[@type='Date']" mode="formEl">\r
181   <input type="text" name="{@name}" \r
182                  id="{ancestor::form/@id}{@name}" \r
183                  value="{@value}" size="10" maxlength="10"/>\r
184 </xsl:template>\r
185 \r
186 <xsl:template match="field[@type='Country']" mode="formEl">\r
187   <xsl:param name="info"/>\r
188   <select name="{@name}" id="{ancestor::form/@id}{@name}">\r
189         <xsl:copy-of select="$info/option"/>\r
190   </select>\r
191 </xsl:template>\r
192 \r
193 \r
194 <xsl:template match="@*" name="info">\r
195   <xsl:variable name="div" select="ancestor::div/@name"/>\r
196   <xsl:variable name="name" select="name()"/>\r
197   <xsl:variable name="label" \r
198                                 select="$formDict/locale/div[@name=$div]/attr[@name=$name]/*[name()=$locale]"/>\r
199   <div  class="row">\r
200         <span style="font-weight:bold;" class="formLabel">\r
201           <xsl:choose>\r
202                 <xsl:when test="not($label)">\r
203                   <xsl:value-of select="name()"/>\r
204                 </xsl:when>\r
205                 <xsl:otherwise>\r
206                   <xsl:copy-of select="$label"/>\r
207                 </xsl:otherwise>\r
208           </xsl:choose>\r
209         </span>\r
210         <span class="formEl"><xsl:value-of select="."/>\r
211         </span>\r
212   </div>  \r
213 </xsl:template>\r
214 \r
215 \r
216 \r
217 </xsl:stylesheet>