source: greenstone3/trunk/web/ui/xslt/util.xsl@ 16600

Last change on this file since 16600 was 16600, checked in by max, 16 years ago

Solve the url issues after extracted gslib statements. URLs creation process easier to read.

File size: 16.4 KB
RevLine 
[16315]1<?xml version="1.0" encoding="UTF-8"?>
2
3<xsl:stylesheet version="1.0"
4xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
5xmlns:gslib="http://www.greenstone.org/XSL/Library"
6xmlns:xalan="http://xml.apache.org/xalan"
[16501]7xmlns="http://www.w3.org/1999/xhtml">
[16315]8
[16501]9
[16315]10<xsl:output
11method="xml"
12encoding="UTF-8"
13doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
14doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
15omit-xml-declaration="yes"
16indent="yes"/>
17
18<!-- general ............................................................................. -->
19
20<xsl:variable name="librarian"></xsl:variable>
21
22<xsl:variable name="action" select="/page/pageRequest/@action"/>
23
24<xsl:variable name="subaction" select="/page/pageRequest/@subaction"/>
25
26<xsl:variable name="lang" select="/page/pageRequest/@lang"/>
27
28<xsl:variable name="css">
29 <xsl:for-each select="/page/pageResponse/cssFileList/cssFile">
[16448]30 <link rel="stylesheet" href="{@path}" type="text/css" />
[16315]31 </xsl:for-each>
32</xsl:variable>
33
34<xsl:variable name="js">
35 <xsl:for-each select="/page/pageResponse/jsFileList/jsFile">
36 <script type="text/javascript" src="{@path}"></script>
37 </xsl:for-each>
38</xsl:variable>
39
40<xsl:template name="metadataItem">
41 <xsl:param name="name"/>
42
43 <xsl:variable name="x" select="/page/pageResponse/metadataList/metadataItem[@name=$name]" />
44
45 <xsl:choose>
46 <xsl:when test="$x = ''">
47 metadataItem '<xsl:value-of select="$name"/>' not defined.
48 </xsl:when>
49 <xsl:otherwise>
50 <xsl:for-each select="$x">
51 <xsl:call-template name="expandMetadataAndUiItems" />
52 </xsl:for-each>
53 </xsl:otherwise>
54 </xsl:choose>
55
56</xsl:template>
57
58<!-- get the uiItem for the given name -->
59<xsl:template name="uiItem">
60 <xsl:param name="name"/>
61
62 <xsl:variable name="x" select="/page/pageResponse/uiItemList/uiItem[@name=$name]" />
63
64 <xsl:choose>
65 <xsl:when test="$x = ''">
66 uiItem '<xsl:value-of select="$name"/>' not defined.
67 </xsl:when>
68 <xsl:otherwise>
69 <xsl:for-each select="$x">
70 <xsl:call-template name="expandMetadataAndUiItems" />
71 </xsl:for-each>
72 </xsl:otherwise>
73 </xsl:choose>
74
75</xsl:template>
76
77<!-- site level stuff ....................................................................... -->
78
79<xsl:variable name="collectionNames" select="/page/pageResponse/collectionList/collection/@name"/>
80
81<xsl:template name="collection_title">
82 <xsl:param name="name"/>
83 <xsl:value-of select="/page/pageResponse/collectionList/collection[@name=$name]/displayItem[@name='name']"/>
84</xsl:template>
85
86<xsl:template name="collection_description">
87 <xsl:param name="name"/>
88 <xsl:value-of select="/page/pageResponse/collectionList/collection[@name=$name]/displayItem[@name='description']"/>
89</xsl:template>
90
91<xsl:template name="collection_url">
92 <xsl:param name="name"/>
93 <xsl:value-of select="$librarian" />
[16600]94?a=p&amp;sa=about&amp;c=
[16315]95 <xsl:value-of select="$name" />
96</xsl:template>
97
98<xsl:variable name="site_homeUrl">
99 <xsl:value-of select="$librarian" />
[16600]100?a=p&amp;sa=home
[16315]101</xsl:variable>
102
103<!-- collection level stuff ....................................................................... -->
104
105<xsl:variable name="collection" select="/page/pageResponse/collection/@name"/>
106
107<xsl:variable name="serviceNames" select="/page/pageResponse/collection/serviceList/service[@type='query' or @type='browse']/@name"/>
108
109<xsl:template name="service_title">
110 <xsl:param name="serviceName"/>
111 <xsl:value-of select="/page/pageResponse/collection/serviceList/service[@name=$serviceName]/displayItem[@name='name']"/>
112</xsl:template>
113
114<xsl:template name="service_description">
115 <xsl:param name="serviceName"/>
116 <xsl:value-of select="/page/pageResponse/collection/serviceList/service[@name=$serviceName]/displayItem[@name='description']"/>
117</xsl:template>
118
119<xsl:template name="service_url">
120 <xsl:param name="serviceName"/>
121
122
123 <xsl:variable name="service" select="/page/pageResponse/collection/serviceList/service[@name=$serviceName]"/>
124 <xsl:variable name="serviceAction">
125 <xsl:choose>
126 <!-- this hard coding doesnt seem like a good idea: why isnt the appropriate action given as an attribute of the service? -->
127 <xsl:when test="$service/@type='query'">q</xsl:when>
128 <xsl:when test="$service/@type='browse'">b</xsl:when>
129 <xsl:when test="$service/@type='process'">pr</xsl:when>
130 <xsl:when test="$service/@type='applet'">a</xsl:when>
131 <xsl:otherwise>DO_NOT_DISPLAY</xsl:otherwise>
132 </xsl:choose>
133 </xsl:variable>
134
[16600]135<xsl:value-of select="$librarian"/>?
136a=<xsl:value-of select="$serviceAction"/>&amp;rt=d&amp;
137s=<xsl:value-of select="$serviceName"/>&amp;
138c=<xsl:value-of select="$collection"/>
[16315]139</xsl:template>
140
141<xsl:variable name="classifierNames" select="/page/pageResponse/collection/serviceList//classifier/@name"/>
142
143<xsl:template name="classifier_title">
144 <xsl:param name="clsName"/>
145 <xsl:value-of select="/page/pageResponse/collection/serviceList//classifier[@name=$clsName]/displayItem[@name='name']"/>
146</xsl:template>
147
148<xsl:template name="classifier_description">
149 <xsl:param name="clsName"/>
150 <xsl:value-of select="/page/pageResponse/collection/serviceList//classifier[@name=$clsName]/displayItem[@name='description']"/>
151</xsl:template>
152
153<xsl:template name="classifier_url">
[16600]154<xsl:param name="clsName"/>
155<xsl:value-of select="$librarian"/>?a=b&amp;rt=r&amp;
156s=<xsl:value-of select="/page/pageResponse/collection/serviceList//classifier[@name=$clsName]/../../@name"/>&amp;
157c=<xsl:value-of select="$collection"/>&amp;
158cl=<xsl:value-of select="$clsName"/>
[16315]159</xsl:template>
160
161
162<!-- searching ............................................................................. -->
163
164<xsl:template name="hidden_search_params">
165 <input name="c" value="{$collection}" type="hidden"/>
166 <input name="a" value="q" type="hidden"/>
167 <input name="s" value="TextQuery" type="hidden"/>
168</xsl:template>
169
170<xsl:template name="search_param_li">
171 <xsl:param name="search_param"/>
172 <li>
173 <xsl:for-each select="$search_param/displayItem[@name='name']">
174 <xsl:value-of select="." />
175 </xsl:for-each>
176
177 <xsl:choose>
178
179 <xsl:when test="$search_param/@type='boolean' or $search_param/@type='enum_single'">
180 <select name="s1.{$search_param/@name}">
181 <xsl:for-each select="$search_param/option">
182 <option name="{@name}">
183 <xsl:for-each select="./displayItem[@name='name']">
184 <xsl:value-of select="." />
185 </xsl:for-each>
186 </option>
187 </xsl:for-each>
188 </select>
189 </xsl:when>
190
191
192 <xsl:when test="$search_param/@type='integer'">
193 <input name="s1.{$search_param/@name}" value="{$search_param/@default}"/>
194 </xsl:when>
195
196 <xsl:when test="$search_param/@type='invisible'">
197 <input name="s1.{$search_param/@name}" value="{$search_param/@default}" type="hidden"/>
198 </xsl:when>
199
200 </xsl:choose>
201 </li>
202
203</xsl:template>
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221<!-- browsing ............................................................................. -->
222
223<xsl:variable name="currentClassifierName" select="/page/pageResponse/classifier/@name" />
224
225<xsl:variable name="topLevelClassifierNodes" select="/page/pageResponse/classifier/classifierNode"/>
226
227
228<xsl:variable name="topLevelClassifierNodeIds" select="/page/pageResponse/classifier/classifierNode/@nodeID"/>
229
230<!--
231<xsl:template name="classifierNode_title">
232 <xsl:param name="id"/>
233 <xsl:value-of select="/page/pageResponse/classifier//classifierNode[@nodeID=$id]/metadataList/metadata[@name='Title']"/>
234</xsl:template>
235-->
236
237<xsl:template name="classifierNode_url">
238 <xsl:param name="id"/>
239
[16600]240<xsl:value-of select="$librarian"/>?a=b&amp;rt=r&amp;
241s=<xsl:value-of select="/page/pageResponse/service/@name"/>&amp;
242c=<xsl:value-of select="$collection"/>&amp;
243cl=<xsl:value-of select="$id" /><xsl:if test="classifierNode|documentNode">.pr</xsl:if>
[16501]244
[16315]245</xsl:template>
246
247<xsl:template name="classifierNode_childNodeIds">
248 <xsl:param name="id"/>
249 <xsl:value-of select="xalan:nodeset(/page/pageResponse/classifier//classifierNode[@nodeID=$id])/classifierNode/@nodeID"/>
250</xsl:template>
251
252
253
254
255
256<xsl:template name="list_classifer_data">
257 <ul>
258 <xsl:for-each select="/page/pageResponse/classifier/classifierNode">
259 <xsl:call-template name="expand_classifier_node" />
260 </xsl:for-each>
261 <xsl:for-each select="/page/pageResponse/classifier/documentNode">
262 <li class="leafNode">
263 <!-- call format statement for docuement node -->
264 <xsl:call-template name="documentNode" />
265 </li>
266 </xsl:for-each>
267 </ul>
268</xsl:template>
269
270<xsl:template name="expand_classifier_node">
271 <xsl:choose>
272
273 <xsl:when test="classifierNode or documentNode">
274 <!-- if there are children -->
275 <li class="expandedNode">
276 <!-- call format statement for classifier node -->
277 <xsl:call-template name="classifierNode" />
278
279 <xsl:if test="classifierNode">
280 <ul>
281 <xsl:for-each select="classifierNode">
282 <xsl:call-template name="expand_classifier_node"/>
283 </xsl:for-each>
284 </ul>
285 </xsl:if>
286 <xsl:if test="documentNode">
287 <ul>
288 <xsl:for-each select="documentNode">
289 <li class="leafNode">
290 <!-- call format statement for docuement node -->
291 <xsl:call-template name="documentNode" />
292 </li>
293 </xsl:for-each>
294 </ul>
295 </xsl:if>
296 </li>
297 </xsl:when>
298 <xsl:otherwise>
299 <li class="collapsedNode">
300 <!-- call format statement for classifier node -->
301 <xsl:call-template name="classifierNode" />
302 </li>
303 </xsl:otherwise>
304 </xsl:choose>
305</xsl:template>
306
307<!-- document viewing..................................................................... -->
308
309<xsl:variable name="document_coverImage_exists" select="/page/pageResponse/document/@hasCoverImage" />
310
311<xsl:variable name="document_coverImage_url">
312 <xsl:if test="$document_coverImage_exists">
313 <xsl:value-of select="/page/pageResponse/collection/metadataList/metadata[@name='httpPath']"/>/index/assoc/<xsl:value-of select="normalize-space(/page/pageResponse/document/metadataList/metadata[@name='archivedir'])"/>/cover.jpg
314 </xsl:if>
315</xsl:variable>
316
317<xsl:variable name="document_type" select="/page/pageResponse/document/@docType"/>
318
319<xsl:variable name="document_hash" select="/page/pageResponse/document/documentNode/@nodeID" />
320
321<xsl:variable name="document_is_expanded" select="/page/pageRequest/paramList/param[@name='ed']/@value=1"/>
322
323<xsl:variable name="document_expanded_url">
[16600]324<xsl:value-of select="$librarian"/>?a=d&amp;
325c=<xsl:value-of select="$collection"/>&amp;
326d=<xsl:value-of select="$document_hash"/>&amp;
327ed=1
[16315]328</xsl:variable>
329
330<xsl:variable name="document_collapsed_url">
[16600]331<xsl:value-of select="$librarian"/>?a=d&amp;
332c=<xsl:value-of select="$collection"/>&amp;
333d=<xsl:value-of select="$document_hash"/>
[16315]334</xsl:variable>
335
336<xsl:variable name="document_title" >
337 <xsl:choose>
338 <xsl:when test="$document_type='simple'">
339 <xsl:value-of disable-output-escaping='yes' select="/page/pageResponse/document/metadataList/metadata[@name='Title']" />
340 </xsl:when>
341 <xsl:otherwise>
342 <xsl:value-of disable-output-escaping='yes' select="/page/pageResponse/document/documentNode/metadataList/metadata[@name='Title']"/>
343 </xsl:otherwise>
344 </xsl:choose>
345</xsl:variable>
346
347<xsl:variable name="document_content" >
348 <xsl:choose>
349 <xsl:when test="$document_type='simple'">
350 <xsl:value-of select="$document_currentSection_content" />
351 </xsl:when>
352 </xsl:choose>
353</xsl:variable>
354
355<xsl:variable name="document_allSectionIds" select="/page/pageResponse/document//documentNode[@nodeType!='root']" />
356
357<xsl:variable name="document_topLevelSectionIds" select="/page/pageResponse/document/documentNode/documentNode" />
358
359<xsl:template name="document_section_title">
360 <xsl:param name="sectionId" />
361 <xsl:value-of disable-output-escaping='yes' select="//page/pageResponse/document//documentNode[@nodeID=$sectionId]/metadataList/metadata[@name='Title']"/>
362</xsl:template>
363
364<!--
365<xsl:template name="document_section_depth">
366 <xsl:param name="index" />
367 <xsl:value-of select="count($document_allSections[$index]/ancestor::documentNode)"/>
368</xsl:template>
369
370<xsl:template name="document_section_content">
371 <xsl:param name="index" />
372 <xsl:value-of disable-output-escaping='yes' select="$document_allSections[$index]/nodeContent"/>
373</xsl:template>
374
375-->
376
377<xsl:variable name="document_currentSection" select="/page/pageResponse/document//nodeContent/.." />
378
379<xsl:variable name="document_currentSection_title" select="$document_currentSection/metadataList/metadata[@name='Title']" />
380
381<xsl:variable name="document_currentSection_content" select="$document_currentSection/nodeContent" />
382
383<xsl:variable name="document_previousSection" select="$document_currentSection/preceding::documentNode[@nodeType='leaf'][1]"/>
384
385<xsl:variable name="document_previousSection_title" select="$document_previousSection/metadataList/metadata[@name='Title']"/>
386
387<xsl:variable name="document_previousSection_url">
[16600]388<xsl:value-of select="$librarian"/>?a=d&amp;
389c=<xsl:value-of select="$collection"/>&amp;
390d=<xsl:value-of select="$document_previousSection/@nodeID"/>&amp;
391sib=1&amp;ec=1
[16315]392</xsl:variable>
393
394<xsl:variable name="document_nextSection" select="$document_currentSection/following::documentNode[@nodeType='leaf'][1]"/>
395
396<xsl:variable name="document_nextSection_title" select="$document_nextSection/metadataList/metadata[@name='Title']"/>
397
398<xsl:variable name="document_nextSection_url">
[16600]399<xsl:value-of select="$librarian"/>?a=d&amp;
400c=<xsl:value-of select="$collection"/>&amp;
401d=<xsl:value-of select="$document_nextSection/@nodeID"/>&amp;
402sib=1&amp;ec=1
[16315]403</xsl:variable>
404
405<xsl:variable name="document_ancestorSections" select="$document_currentSection/ancestor::documentNode[@nodeType='internal']"/>
406<xsl:variable name="document_ancestorSections_titles" select="$document_ancestorSections/metadataList/metadata[@name='Title']"/>
407
408<xsl:template name="list_document_content">
409 <ul>
410 <xsl:for-each select="/page/pageResponse/document/documentNode/documentNode">
411 <xsl:call-template name="expand_doc_content_node" />
412 </xsl:for-each>
413 </ul>
414</xsl:template>
415
416<xsl:template name="expand_doc_content_node">
417 <xsl:variable name="class">
418 <xsl:choose>
419 <xsl:when test="@nodeType='leaf'">leaf</xsl:when>
420 <xsl:otherwise>collapsed</xsl:otherwise>
421 </xsl:choose>
422 </xsl:variable>
423
424 <li class="{$class}" id="{@nodeID}" >
425 <xsl:choose>
426 <xsl:when test="nodeContent">
427 <span id="currentSection">
428 <xsl:value-of disable-output-escaping='yes' select="metadataList/metadata[@name='Title']"/>
429 </span>
430 </xsl:when>
431 <xsl:when test="@nodeType='leaf'">
432 <a href="{$librarian}?a=d&amp;c={$collection}&amp;d={@nodeID}&amp;sib=1&amp;ec=1">
433 <xsl:value-of disable-output-escaping='yes' select="metadataList/metadata[@name='Title']"/>
434 </a>
435 </xsl:when>
436 <xsl:otherwise>
437 <a onclick="toggleNode('{@nodeID}')">
438 <xsl:value-of disable-output-escaping='yes' select="metadataList/metadata[@name='Title']"/>
439 </a>
440 </xsl:otherwise>
441 </xsl:choose>
442
443 <xsl:if test="documentNode">
444 <ul>
445 <xsl:for-each select="documentNode">
446 <xsl:call-template name="expand_doc_content_node" />
447 </xsl:for-each>
448 </ul>
449 </xsl:if>
450 </li>
451</xsl:template>
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467<!-- stuff that no-one should need to know about........................................ -->
468
469<!-- produce an exact copy of the current node, but expand and replace all metadataItems and uiItems found within. -->
470<xsl:template name="expandMetadataAndUiItems">
471 <xsl:for-each select="*|text()">
472 <xsl:choose>
473
474 <!-- if node is a metadataItem, expand it -->
475 <xsl:when test="self::node()[self::metadataItem]">
476 <xsl:call-template name="metadataItem">
477 <xsl:with-param name="name"><xsl:value-of select="@name"/></xsl:with-param>
478 </xsl:call-template>
479 </xsl:when>
480
481 <!-- if node is a uiItem, expand it -->
482 <xsl:when test="self::node()[self::uiItem]">
483 <xsl:call-template name="uiItem">
484 <xsl:with-param name="name"><xsl:value-of select="@name"/></xsl:with-param>
485 </xsl:call-template>
486 </xsl:when>
487
488 <xsl:when test="self::text()">
489 <xsl:value-of select="."/>
490 </xsl:when>
491
492 <!-- if a regular node -->
493 <xsl:otherwise>
494 <xsl:variable name="element-name" select="name()"/>
495 <xsl:element name="{$element-name}">
496 <xsl:for-each select="@*">
497 <xsl:variable name="attribute-name" select="name()"/>
498 <xsl:attribute name="{$attribute-name}">
499 <xsl:call-template name="attribute-filter"/>
500 </xsl:attribute>
501 </xsl:for-each>
502 <xsl:call-template name="expandMetadataAndUiItems" />
503 </xsl:element>
504 </xsl:otherwise>
505 </xsl:choose>
506 </xsl:for-each>
507
508</xsl:template>
509
510<xsl:template name="attribute-filter"><xsl:value-of select="."/></xsl:template>
511
512<xsl:template match="gslib:blah">
513 <p> Blah </p>
514</xsl:template>
515
516
517
518</xsl:stylesheet>
519
520
Note: See TracBrowser for help on using the repository browser.