Yay, memberlist.
[www/www.git] / cscweb.xsl
1 <?xml version='1.0'?>
2
3 <xsl:stylesheet version="1.0"
4                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
5                 xmlns:csc="http://www.csclub.uwaterloo.ca/cow"
6                 extension-element-prefixes="csc">
7
8 <xsl:output method="html" />
9
10 <xsl:template match="cscpage">
11
12 <xsl:text disable-output-escaping="yes"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">]]>
13 </xsl:text>
14 <html>
15 <head>
16  <title><xsl:value-of select="@title"/></title>
17   <style type="text/css">
18    <![CDATA[<!-- @import url('/default.css'); -->]]>
19   </style>
20 </head>
21 <body>
22 <xsl:apply-templates select="biglogo"/>
23 <xsl:apply-templates select="header">
24  <xsl:with-param name="title" select="@title"/>
25 </xsl:apply-templates>
26 <xsl:apply-templates select="section|menu"/>
27 <xsl:apply-templates select="footer"/>
28 </body>
29 </html>
30 </xsl:template>
31
32 <xsl:template match="section">
33  <h2><xsl:value-of select="@title"/></h2>
34  <xsl:apply-templates />
35 </xsl:template>
36
37 <xsl:template match="biglogo" name="menu">
38   <table cellspacing="0" cellpadding="2" border="0" align="center">
39    <tr>
40     <td width="174" rowspan="2"><img src="/logos/csc_160_70.png" alt="CSC" width="165" height="75" /></td>
41     <td>University of Waterloo</td>
42    </tr>
43    <tr>
44     <td>Computer Science Club</td>
45    </tr>
46   </table>
47 </xsl:template>
48
49 <xsl:template match="menuitem">
50     <td class="button">
51      <a href="{@href}"><img border="0" src="/buttons/{@icon}.png"
52      width="40" height="40" alt="" /></a><br />
53      <a href="{@href}"><xsl:value-of select="@title"/></a>
54     </td>
55 </xsl:template>
56
57 <xsl:template match="menudefs">
58  <table cellspacing="1" cellpadding="3" border="0" bgcolor="black" align="center">
59   <tr>
60    <xsl:apply-templates select="menuitem"/>
61   </tr>
62  </table>
63 </xsl:template>
64
65 <xsl:template match="menu" name="menu">
66  <xsl:apply-templates select="document('menu.xml')/menudefs"/>
67 </xsl:template>
68
69 <xsl:template match="header" name="header">
70   <table cellspacing="0" cellpadding="2" border="0" width="100%"
71   bgcolor="#cee6ff">
72    <tr>
73     <td width="84"><a href="/"><img src="/logos/csc_80_35.png"
74     alt="CSC" width="80" height="35" border="0" /></a></td>
75     <td class="pagetitle"><xsl:value-of select="$title"/></td>
76    </tr>
77    <tr>
78     <td colspan="2">
79      <xsl:apply-templates
80       select="document(concat($pwd,'/directory.xml'))/directory"/>
81     </td>
82    </tr>
83  </table>
84 </xsl:template>
85
86 <xsl:template match="directory">
87  [<a href="index.html"><xsl:value-of select="@title"/></a>]
88  <xsl:apply-templates match="diritem"/>
89 </xsl:template>
90
91 <xsl:template match="diritem">
92  [<a href="{@href}"><xsl:value-of select="@title"/></a>]
93 </xsl:template>
94
95 <xsl:template match="footer" name="footer">
96  <hr />
97  <xsl:call-template name="menu"/>
98  <p>
99   This page was generated on <xsl:value-of select="$date"/> at
100   <xsl:value-of select="$time"/>.
101  </p>
102  <p>
103    Copyright 2002 the Computer Science Club of the University of
104    Waterloo. Please direct website comments to the <a
105    href="mailto:www@csclub.uwaterloo.ca">Webmaster</a>. 
106  </p>
107 </xsl:template>
108
109 <xsl:template match="newsdefs">
110  <xsl:apply-templates select="newsitem"/>
111 </xsl:template>
112
113 <xsl:template match="newsitem">
114    <tr>
115     <td class="newsdate"><xsl:value-of select="@date"/></td>
116     <td rowspan="2" valign="top" class="newsitem"><xsl:apply-templates/></td>
117    </tr>
118    <tr>
119     <td class="newsauthor"><xsl:value-of select="@author"/></td>
120    </tr>
121 </xsl:template>
122
123 <xsl:template match="news" name="news">
124  <tr>
125   <th colspan="2" class="news">
126    News
127   </th>
128  </tr>
129  <xsl:apply-templates select="document('news.xml')/newsdefs"/>
130  <tr>
131   <td class="newsitem" colspan="2">
132    <a href="news/">Older news items</a> are available. Make sure you
133    check out the <a href="nntp://uw.csc">uw.csc</a> newsgroup and our
134    announcement boards on the second and third floor of MC for more
135    updates.
136   </td>
137  </tr>
138 </xsl:template>
139
140 <xsl:template match="events" name="events">
141    <tr>
142     <th colspan="2" class="news">
143      Upcoming Events
144     </th>
145    </tr>
146    <xsl:for-each select="document('events.xml')/eventdefs/eventitem">
147     <xsl:sort select="translate(@date, '-', '')"
148               order="ascending"
149               data-type="number"/>
150     <xsl:if test="translate(@date, '-', '') &gt;= translate($date, '-', '')">
151      <tr>
152       <td class="eventdate"><xsl:value-of select="@date"/></td>
153       <td rowspan="2" valign="top" class="eventitem">
154         <a href="{translate(concat('/events/', @room, '-', @date, '-', @time, '.html'), ' ', '_')}">
155          <xsl:value-of select="@title"/>
156         </a>.
157         <xsl:value-of select="short"/>
158       </td>
159      </tr>
160      <tr>
161       <td class="eventroom"><xsl:value-of select="@time"/>,
162       <xsl:value-of select="@room"/></td>
163      </tr>
164     </xsl:if>
165    </xsl:for-each>
166    <tr>
167     <td class="eventitem" colspan="2"><a href="events/">Past
168     events</a> are available.</td>
169    </tr>
170 </xsl:template>
171
172 <xsl:template match="eventdefs">
173  <xsl:apply-templates/>
174 </xsl:template>
175
176 <xsl:template match="eventitem">
177  <xsl:document method="html"
178   href="{translate(concat($root, '/events/', @room, '-', @date, '-', @time, '.html'), ' ', '_')}">
179 <xsl:text disable-output-escaping="yes"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">]]>
180 </xsl:text>
181 <html>
182 <head>
183  <title><xsl:value-of select="@title"/></title>
184   <style type="text/css">
185    <![CDATA[<!-- @import url('/default.css'); -->]]>
186   </style>
187 </head>
188 <body>
189  <xsl:call-template name="header">
190   <xsl:with-param name="title" select="@title"/>
191  </xsl:call-template>
192  <p>
193   Held in <xsl:value-of select="@room"/> at
194   <xsl:value-of select="@date"/>, <xsl:value-of select="@time"/>.
195  </p>
196  <h2>Abstract</h2>
197  <xsl:apply-templates select="abstract"/>
198  <xsl:call-template name="footer"/>
199 </body>
200 </html>
201  </xsl:document>
202 </xsl:template>
203
204 <xsl:template match="news-and-events">
205  <table cellspacing="1" cellpadding="2" bgcolor="black">
206   <xsl:call-template name="news"/>
207   <xsl:call-template name="events"/>
208  </table>
209 </xsl:template>
210
211 <xsl:template match="events-this-term">
212   <p>The events for <xsl:value-of select="csc:term($date)"/> are listed here.</p>
213    <xsl:for-each select="document('events.xml')/eventdefs/eventitem">
214     <xsl:sort select="translate(@date, '-', '')"
215               order="ascending"
216               data-type="number"/>
217     <xsl:if test="csc:term(@date) = csc:term($date)">
218      <h3><a href="{translate(concat('/events/', @room, '-', @date, '-', @time, '.html'), ' ', '_')}"><xsl:value-of select="@title"/></a></h3>
219      <p>
220       <b><xsl:value-of select="@room"/>,
221       <xsl:value-of select="@date"/>, <xsl:value-of
222       select="@time"/>: </b>
223       <xsl:value-of select="short"/>
224       <a href="{translate(concat('/events/', @room, '-', @date, '-', @time, '.html'), ' ', '_')}">
225        More information</a>.
226      </p>
227     </xsl:if>
228    </xsl:for-each>
229 </xsl:template>
230
231 <xsl:template match="members-this-term">
232   <p>The members for <xsl:value-of select="csc:term($date)"/> are
233   listed here.</p>
234   <table>
235     <tr>
236       <th>Member ID</th>
237       <th>Name</th>
238       <th>Program</th>
239     </tr>
240     <xsl:for-each select="document('members.xml')/memberlist/member">
241       <tr>
242         <td><xsl:value-of select="@id"/></td>
243         <td><xsl:value-of select="@name"/></td>
244         <td><xsl:value-of select="@program"/></td>
245       </tr>
246     </xsl:for-each>
247   </table>
248 </xsl:template>
249
250 <xsl:template match="generate-event-files">
251  <xsl:apply-templates select="document('events.xml')/eventdefs"/>
252 </xsl:template>
253
254 <xsl:template match="old-events">
255  <xsl:for-each select="document('events.xml')/eventdefs/eventitem">
256   <xsl:sort select="term"
257             order="descending"
258             data-type="number"/>
259
260  </xsl:for-each>
261 </xsl:template>
262
263 <xsl:template match="execlist">
264  <h3>Elected positions</h3>
265  <ul>
266   <xsl:apply-templates select="exec[@type='elected']"/>
267  </ul>
268  <h3>Appointed positions</h3>
269  <ul>
270   <xsl:apply-templates select="exec[@type='appointed']"/>
271  </ul>
272 </xsl:template>
273
274 <xsl:template match="exec">
275  <li><xsl:value-of select="@name"/> is this term's <b><xsl:value-of
276  select="@position"/></b>. You can <a
277  href="mailto:{@userid}@csclub.uwaterloo.ca">e-mail them</a><xsl:if
278  test="not(@href='')"> or <a href="{@href}">visit their
279  homepage</a></xsl:if>.
280  </li>
281 </xsl:template>
282
283 <xsl:template match="*">
284 <xsl:copy>
285 <xsl:copy-of select="@*" />
286 <xsl:apply-templates />
287 </xsl:copy>
288 </xsl:template>
289
290
291 </xsl:stylesheet>