source: main/trunk/greenstone3/web/interfaces/oran/transform/pages/query.xsl@ 25434

Last change on this file since 25434 was 25434, checked in by sjm84, 12 years ago

Changed the search forms to be a more RESTful style

File size: 19.7 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<xsl:stylesheet version="1.0"
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4 xmlns:java="http://xml.apache.org/xslt/java"
5 xmlns:util="xalan://org.greenstone.gsdl3.util.XSLTUtil"
6 xmlns:gslib="http://www.greenstone.org/skinning"
7 xmlns:gsf="http://www.greenstone.org/greenstone3/schema/ConfigFormat"
8 extension-element-prefixes="java util"
9 exclude-result-prefixes="java util gsf">
10
11 <!-- use the 'main' layout -->
12 <xsl:import href="layouts/main.xsl"/>
13
14 <!-- set page title -->
15 <xsl:template name="pageTitle"><gslib:serviceName/></xsl:template>
16
17 <!-- set page breadcrumbs -->
18 <xsl:template name="breadcrumbs"> <gslib:siteLink/><gslib:rightArrow/><xsl:if test="/page/pageResponse/collection"> <gslib:collectionNameLinked/><gslib:rightArrow/></xsl:if></xsl:template>
19
20 <!-- the page content -->
21 <xsl:template match="/page">
22 <xsl:choose>
23 <xsl:when test="not(pageResponse/documentNodeList)">
24 <xsl:call-template name="queryPage"/>
25 </xsl:when>
26 <xsl:otherwise>
27 <xsl:call-template name="resultsPage"/>
28 </xsl:otherwise>
29 </xsl:choose>
30 </xsl:template>
31
32 <xsl:template name="resultsPage">
33 <xsl:call-template name="resultsPagePre"/>
34 <xsl:call-template name="displayTermInfo"/>
35 <xsl:call-template name="displayResults"/>
36 <xsl:call-template name="resultsPagePost"/>
37 </xsl:template>
38
39 <xsl:template name="displayResults">
40 <table id="results">
41 <xsl:for-each select="pageResponse/documentNodeList/documentNode">
42 <tr class="document">
43 <xsl:apply-templates select="."/>
44 <xsl:call-template name="documentNodePost"/>
45 </tr>
46 </xsl:for-each>
47 <br/>
48 </table>
49
50 <!-- Previous/Next buttons-->
51 <xsl:call-template name="prevNextButtons"/>
52 </xsl:template>
53
54 <xsl:template name="displayTermInfo">
55 <!-- The list of search terms with their frequency and document count -->
56 <p class="termList">
57 <xsl:if test="count(/page/pageResponse/termList/stopword) &gt; 0">
58 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.common')"/><xsl:text> </xsl:text>
59 </xsl:if>
60
61 <xsl:for-each select="/page/pageResponse/termList/stopword">
62 <span style="font-style:italic;"><xsl:value-of select="@name"/></span><xsl:text> </xsl:text>
63 </xsl:for-each>
64 <br /><br />
65
66 <xsl:for-each select="/page/pageResponse/termList/term">
67 <xsl:choose>
68 <!-- If there is only one or two search terms then show the expanded information -->
69 <xsl:when test="count(/page/pageResponse/termList/term) &lt; 3">
70 <span style="font-style:italic;"><xsl:value-of select="@name"/></span>
71 <xsl:text> </xsl:text><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.occurs')"/><xsl:text> </xsl:text>
72 <xsl:value-of select="@freq"/>
73 <xsl:choose>
74 <xsl:when test="@freq = 1">
75 <xsl:text> </xsl:text><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.time')"/>
76 </xsl:when>
77 <xsl:otherwise>
78 <xsl:text> </xsl:text><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.time_plural')"/>
79 </xsl:otherwise>
80 </xsl:choose>
81 <xsl:text> </xsl:text><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.in')"/><xsl:text> </xsl:text>
82 <xsl:value-of select="@numDocsMatch"/>
83 <xsl:choose>
84 <xsl:when test="@numDocsMatch = 1">
85 <xsl:text> </xsl:text><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.document')"/>
86 </xsl:when>
87 <xsl:otherwise>
88 <xsl:text> </xsl:text><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.document_plural')"/>
89 </xsl:otherwise>
90 </xsl:choose>
91 <br />
92 </xsl:when>
93 <xsl:otherwise>
94 <span style="font-style:italic;"><xsl:value-of select="@name"/></span> (<xsl:value-of select="@freq"/>)
95 </xsl:otherwise>
96 </xsl:choose>
97 </xsl:for-each>
98 </p>
99 </xsl:template>
100
101 <xsl:template name="queryPage">
102 <xsl:for-each select="pageResponse/service">
103 <form name="QueryForm" method="get" action="{$library_name}/collection/{$collName}/search/{@name}">
104 <div>
105 <input type="hidden" name="a" value="q"/>
106 <input type="hidden" name="sa"><xsl:attribute name="value"><xsl:value-of select="/page/pageRequest/@subaction"/></xsl:attribute></input>
107 <input type="hidden" name="rt" value="rd"/>
108 <xsl:if test="not(paramList/param[@name='startPage'])">
109 <input type="hidden" name="startPage" value="1"/>
110 </xsl:if>
111 <xsl:choose>
112 <xsl:when test="/page/pageRequest/paramList/param[@name = 's1.maxDocs']">
113 <input type="hidden" name="s1.maxDocs">
114 <xsl:attribute name="value">
115 <xsl:value-of select="/page/pageRequest/paramList/param[@name = 's1.maxDocs']/@value"/>
116 </xsl:attribute>
117 </input>
118 </xsl:when>
119 <xsl:otherwise>
120 <input type="hidden" name="s1.maxDocs" value="100"/>
121 </xsl:otherwise>
122 </xsl:choose>
123 <xsl:choose>
124 <xsl:when test="/page/pageRequest/paramList/param[@name = 's1.hitsPerPage']">
125 <input type="hidden" name="s1.hitsPerPage">
126 <xsl:attribute name="value">
127 <xsl:value-of select="/page/pageRequest/paramList/param[@name = 's1.hitsPerPage']/@value"/>
128 </xsl:attribute>
129 </input>
130 </xsl:when>
131 <xsl:otherwise>
132 <input type="hidden" name="s1.hitsPerPage" value="20"/>
133 </xsl:otherwise>
134 </xsl:choose>
135
136 <xsl:variable name="ns">s1.</xsl:variable>
137 <xsl:for-each select="paramList/param">
138 <xsl:choose>
139 <xsl:when test="@name='case' or @name='stem' or @name='accent'">
140 </xsl:when>
141 <xsl:when test="@type='multi'">
142 <xsl:apply-templates select="."><xsl:with-param name="ns" select="$ns"/></xsl:apply-templates>
143 </xsl:when>
144 <xsl:when test="@name = 'maxDocs' or @name = 'hitsPerPage'"></xsl:when>
145 <xsl:otherwise>
146 <xsl:variable name="pvalue"><xsl:apply-templates select="." mode="calculate-default"><xsl:with-param name="ns" select="$ns"/></xsl:apply-templates></xsl:variable>
147 <div class="paramLabel"><xsl:value-of select="displayItem[@name='name']"/></div>
148 <div class="paramValue">
149 <xsl:apply-templates select=".">
150 <xsl:with-param name="default" select="$pvalue"/>
151 <xsl:with-param name="ns" select="$ns"/>
152 </xsl:apply-templates>
153 </div>
154 <br class="clear"/>
155 </xsl:otherwise>
156 </xsl:choose>
157 </xsl:for-each>
158
159 <br/>
160
161 <input type="submit"><xsl:attribute name="value"><xsl:value-of select="displayItem[@name='submit']"/></xsl:attribute></input>
162
163 </div>
164 </form>
165 </xsl:for-each>
166 </xsl:template>
167
168 <xsl:template name="prevNextButtons">
169 <!-- Current page -->
170 <xsl:variable name="currentPage">
171 <xsl:choose>
172 <xsl:when test="/page/pageRequest/paramList/param[@name='startPage']/@value">
173 <xsl:value-of select="/page/pageRequest/paramList/param[@name='startPage']/@value" />
174 </xsl:when>
175 <xsl:when test="/page/pageRequest/paramList/param[@name='s1.startPage']/@value">
176 <xsl:value-of select="/page/pageRequest/paramList/param[@name='s1.startPage']/@value" />
177 </xsl:when>
178 <xsl:otherwise>1</xsl:otherwise>
179 </xsl:choose>
180 </xsl:variable>
181
182 <!-- Find the total number of documents returned -->
183 <xsl:variable name="docMax">
184 <xsl:choose>
185 <xsl:when test="/page/pageResponse/metadataList/metadata[@name = 'numDocsReturned']">
186 <xsl:value-of select="/page/pageResponse/metadataList/metadata[@name = 'numDocsReturned']"/>
187 </xsl:when>
188 <xsl:when test="/page/pageResponse/metadataList/metadata[@name = 'numDocsMatched']">
189 <xsl:value-of select="/page/pageResponse/metadataList/metadata[@name = 'numDocsMatched']"/>
190 </xsl:when>
191 <xsl:otherwise><xsl:value-of select="count(/page/pageResponse/documentNodeList/documentNode)"/></xsl:otherwise>
192 </xsl:choose>
193 </xsl:variable>
194
195 <!-- Find the number of documents displayed per page -->
196 <xsl:variable name="docsPerPage">
197 <xsl:choose>
198 <xsl:when test="/page/pageRequest/paramList/param[@name='hitsPerPage']">
199 <xsl:value-of select="/page/pageRequest/paramList/param[@name='hitsPerPage']/@value" />
200 </xsl:when>
201 <xsl:when test="/page/pageRequest/paramList/param[@name='s1.hitsPerPage']">
202 <xsl:value-of select="/page/pageRequest/paramList/param[@name='s1.hitsPerPage']/@value" />
203 </xsl:when>
204 <xsl:otherwise>20</xsl:otherwise>
205 </xsl:choose>
206 </xsl:variable>
207
208 <table id="searchResultNavTable"><tr>
209 <!-- Previous button -->
210 <td id="prevArrowTD">
211 <xsl:if test="$currentPage != 1">
212 <a href="{$library_name}?a=q&amp;sa={/page/pageRequest/@subaction}&amp;c={$collName}&amp;s={/page/pageResponse/service/@name}&amp;rt=rd&amp;startPage={$currentPage - 1}">
213 <img src="interfaces/oran/images/previous.png"/>
214 </a>
215 </xsl:if>
216 </td>
217 <td id="prevTD">
218 <xsl:if test="$currentPage != 1">
219 <a href="{$library_name}?a=q&amp;sa={/page/pageRequest/@subaction}&amp;c={$collName}&amp;s={/page/pageResponse/service/@name}&amp;rt=rd&amp;startPage={$currentPage - 1}">Previous</a>
220 </xsl:if>
221 </td>
222
223 <!-- Search result status bar (in english it reads "Displaying X to Y of Z documents") -->
224 <xsl:if test="$docMax &gt; 0">
225 <td id="searchResultsStatusBar">
226 <!-- "Displaying" -->
227 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.displaying')"/><xsl:text> </xsl:text>
228 <!-- "X" -->
229 <xsl:value-of select="($currentPage - 1) * $docsPerPage + 1"/>
230 <!-- "to" -->
231 <xsl:text> </xsl:text><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.to')"/><xsl:text> </xsl:text>
232 <!-- "Y" -->
233 <xsl:choose>
234 <xsl:when test="($currentPage * $docsPerPage + 1) &gt; $docMax">
235 <xsl:value-of select="$docMax"/>
236 </xsl:when>
237 <xsl:otherwise>
238 <xsl:value-of select="$currentPage * $docsPerPage"/>
239 </xsl:otherwise>
240 </xsl:choose>
241 <!-- "of" -->
242 <xsl:text> </xsl:text><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.of')"/><xsl:text> </xsl:text>
243 <!-- "Z" -->
244 <xsl:value-of select="$docMax"/>
245 <!-- "document[s]"-->
246 <xsl:choose>
247 <xsl:when test="$docMax = 1">
248 <xsl:text> </xsl:text><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.document')"/>
249 </xsl:when>
250 <xsl:otherwise>
251 <xsl:text> </xsl:text><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.document_plural')"/>
252 </xsl:otherwise>
253 </xsl:choose>
254 </td>
255 </xsl:if>
256
257 <!-- Next button -->
258 <td id="nextTD">
259 <xsl:if test="($currentPage * $docsPerPage + 1) &lt; $docMax">
260 <a href="{$library_name}?a=q&amp;sa={/page/pageRequest/paramList/param[@name = 'sa']/@value}&amp;c={$collName}&amp;s={/page/pageResponse/service/@name}&amp;rt=rd&amp;startPage={$currentPage + 1}">Next</a>
261 </xsl:if>
262 </td>
263 <td id="nextArrowTD">
264 <xsl:if test="($currentPage * $docsPerPage + 1) &lt; $docMax">
265 <a href="{$library_name}?a=q&amp;sa={/page/pageRequest/paramList/param[@name = 'sa']/@value}&amp;c={$collName}&amp;s={/page/pageResponse/service/@name}&amp;rt=rd&amp;startPage={$currentPage + 1}">
266 <img src="interfaces/oran/images/next.png"/>
267 </a>
268 </xsl:if>
269 </td>
270 </tr></table>
271 </xsl:template>
272
273 <!-- puts all the params into a=p&p=h type form - need to change this if use
274 multi params -->
275 <xsl:template match="paramList" mode="cgi">
276 <xsl:param name="ns">s1.</xsl:param>
277 <xsl:for-each select="param">
278 <xsl:variable name='pname' select="@name"/>
279 <xsl:text>&amp;</xsl:text><xsl:value-of select="$ns"/><xsl:value-of select="@name"/>=<xsl:apply-templates select="." mode="calculate-default"><xsl:with-param name='ns' select='$ns'/></xsl:apply-templates>
280 </xsl:for-each>
281 </xsl:template>
282
283 <xsl:template match="param" mode="calculate-default">
284 <xsl:param name="ns">s1.</xsl:param>
285 <xsl:variable name="pname"><xsl:value-of select="$ns"/><xsl:value-of select="@name"/></xsl:variable>
286 <xsl:choose>
287 <xsl:when test="/page/pageRequest/paramList/param[@name=$pname]">
288 <xsl:choose>
289 <xsl:when test="@type='enum_multi'"><xsl:text>,</xsl:text>
290 <xsl:for-each select="/page/pageRequest/paramList/param[@name=$pname]">
291 <xsl:value-of select="@value"/>,
292 </xsl:for-each>
293 </xsl:when>
294 <xsl:otherwise>
295 <xsl:value-of select="/page/pageRequest/paramList/param[@name=$pname]/@value"/>
296 </xsl:otherwise>
297 </xsl:choose>
298 </xsl:when>
299 <xsl:otherwise>
300 <xsl:value-of select="@default"/>
301 </xsl:otherwise>
302 </xsl:choose>
303 </xsl:template>
304
305 <!-- invisible params - used by other stuff. in the query form, we set to the default -->
306 <xsl:template match="param[@type='invisible']">
307 <xsl:param name="ns">s1.</xsl:param>
308 <input type='hidden' name='{$ns}{@name}' value='{@default}'/>
309 </xsl:template>
310
311 <!-- boolean params -->
312 <xsl:template match="param[@type='boolean']">
313 <xsl:param name="ns">s1.</xsl:param>
314 <xsl:param name="default"/>
315 <select name='{$ns}{@name}'>
316 <option value="0"><xsl:if test="$default='0'"><xsl:attribute name="selected"></xsl:attribute></xsl:if><xsl:value-of select="option[@name='0']/displayItem[@name='name']"/></option>
317 <option value="1"><xsl:if test="$default='1'"><xsl:attribute name="selected"></xsl:attribute></xsl:if><xsl:value-of select="option[@name='1']/displayItem[@name='name']"/></option>
318 </select>
319 </xsl:template>
320
321 <!-- integer params -->
322 <xsl:template match="param[@type='integer']">
323 <xsl:param name="ns">s1.</xsl:param>
324 <xsl:param name="default"/>
325 <input type="text" name="{$ns}{@name}" size="3" value="{$default}"/>
326 </xsl:template>
327
328 <!-- single selection enum params -->
329 <xsl:template match="param[@type='enum_single']">
330 <xsl:param name="ns">s1.</xsl:param>
331 <xsl:param name="default"/>
332 <xsl:choose>
333 <xsl:when test="count(option) = 1">
334 <xsl:value-of select="option/displayItem[@name='name']"/>
335 <input type='hidden' name='{$ns}{@name}'><xsl:attribute name='value'><xsl:value-of select='option/@name'/></xsl:attribute></input>
336 </xsl:when>
337 <xsl:otherwise>
338 <select name="{$ns}{@name}">
339 <xsl:for-each select="option">
340 <option value="{@name}"><xsl:if test="@name=$default"><xsl:attribute name="selected"></xsl:attribute></xsl:if><xsl:value-of select="displayItem[@name='name']"/></option>
341 </xsl:for-each>
342 </select>
343 </xsl:otherwise>
344 </xsl:choose>
345 </xsl:template>
346
347
348 <!-- multiple selection enum params -->
349 <!-- how to do defaults for this?? -->
350 <xsl:template match="param[@type='enum_multi']">
351 <xsl:param name="ns">s1.</xsl:param>
352 <xsl:param name="default"/>
353 <select name="{$ns}{@name}" size="2">
354 <xsl:attribute name="multiple"></xsl:attribute>
355 <xsl:for-each select="option">
356 <option value="{@name}"><xsl:if test="contains($default, concat(',', @name, ','))"><xsl:attribute name="selected"></xsl:attribute></xsl:if><xsl:value-of select="displayItem[@name='name']"/></option>
357 </xsl:for-each>
358 </select>
359 </xsl:template>
360
361 <!-- string params -->
362 <xsl:template match="param[@type='string']">
363 <xsl:param name="ns">s1.</xsl:param>
364 <xsl:param name="default"/>
365 <input type="text" name="{$ns}{@name}" size="30" value="{$default}"/>
366 </xsl:template>
367
368 <!-- large string params -->
369 <xsl:template match="param[@type='text']">
370 <xsl:param name="ns">s1.</xsl:param>
371 <xsl:param name="default"/>
372 <textarea name="{$ns}{@name}" cols="50" rows="3"><xsl:value-of select='$default'/></textarea>
373 </xsl:template>
374
375 <!-- multi params - params that are combinations of other params -->
376 <xsl:template match="param[@type='multi']">
377 <xsl:param name="ns">s1.</xsl:param>
378 <xsl:variable name="parent" select="@name"/>
379
380 <table>
381 <tr class="queryfieldheading">
382 <xsl:value-of select="displayItem[@name='name']"/>
383 <xsl:for-each select="param">
384 <td class="queryfieldname"><xsl:value-of select="displayItem[@name='name']"/></td>
385 </xsl:for-each>
386 </tr>
387 <xsl:apply-templates select="." mode="contents">
388 <xsl:with-param name="occurs" select="@occurs"/>
389 <xsl:with-param name="ns" select="$ns"/>
390 </xsl:apply-templates>
391 </table>
392
393 </xsl:template>
394
395 <xsl:template match="param[@type='multi']" mode="contents">
396 <xsl:param name="ns">s1.</xsl:param>
397 <xsl:param name="occurs">1</xsl:param>
398 <xsl:variable name="pos" select="@occurs - $occurs"/>
399 <tr class="queryfieldrow">
400 <xsl:for-each select="param">
401 <xsl:variable name="pname" select="@name"/>
402 <xsl:variable name="values" select="/page/pageRequest/paramList/param[@name=$pname]/@value"/>
403 <td class="queryfieldcell">
404 <xsl:choose>
405 <xsl:when test="not(@ignore) or @ignore != $pos">
406 <xsl:apply-templates select="."><xsl:with-param name="default" select="java:org.greenstone.gsdl3.util.XSLTUtil.getNumberedItem($values, $pos)"/><xsl:with-param name="ns" select="$ns"/></xsl:apply-templates>
407 </xsl:when>
408 <xsl:otherwise><!-- put in a hidden placeholder -->
409 <input type="hidden" name='{$ns}{@name}' value=''/>
410 </xsl:otherwise>
411 </xsl:choose>
412 </td>
413 </xsl:for-each>
414 </tr>
415
416 <!-- recursively call this template to get multiple entries -->
417 <xsl:if test="$occurs &gt; 1">
418 <xsl:apply-templates select="." mode="contents"><xsl:with-param name="occurs" select="$occurs - 1"/><xsl:with-param name="ns" select="$ns"/></xsl:apply-templates>
419 </xsl:if>
420 </xsl:template>
421
422 <xsl:template name="resultsPagePre">
423 <!-- OVERWRITE TO INSERT CONTENT BEFORE THE RESULTS PAGE -->
424 <xsl:if test="/page/pageResponse/format[@type='display' or @type='browse' or @type='search']/gsf:option[@name='mapEnabled']/@value = 'true'">
425 <xsl:call-template name="mapFeaturesJSONNodes"/>
426 </xsl:if>
427 </xsl:template>
428
429 <xsl:template name="resultsPagePost">
430 <!-- OVERWRITE TO INSERT CONTENT AFTER THE RESULTS PAGE -->
431 </xsl:template>
432
433 <xsl:template name="documentNodePre">
434 <!-- OVERWRITE TO INSERT CONTENT BEFORE EVERY DOCUMENT NODE -->
435 </xsl:template>
436
437 <xsl:template name="documentNodePost">
438 <!-- OVERWRITE TO INSERT CONTENT AFTER EVERY DOCUMENT NODE -->
439 <xsl:if test="/page/pageResponse/format[@type='display' or @type='browse' or @type='search']/gsf:option[@name='mapEnabled']/@value = 'true'">
440 <xsl:call-template name="mapFeaturesIcon"/>
441 </xsl:if>
442 </xsl:template>
443
444 <xsl:template name="mapFeaturesJSONNodes">
445 <div id="jsonNodes" style="display:none;">
446 <xsl:text>[</xsl:text>
447 <xsl:for-each select="//documentNode">
448 <xsl:if test="metadataList/metadata[@name = 'Latitude'] and metadataList/metadata[@name = 'Longitude']">
449 <xsl:text>{</xsl:text>
450 <xsl:text disable-output-escaping="yes">"nodeID":"</xsl:text><xsl:value-of select="@nodeID"/><xsl:text disable-output-escaping="yes">",</xsl:text>
451 <xsl:text disable-output-escaping="yes">"title":"</xsl:text><xsl:value-of disable-output-escaping="yes" select="metadataList/metadata[@name = 'Title']"/><xsl:text disable-output-escaping="yes">",</xsl:text>
452 <xsl:text disable-output-escaping="yes">"lat":</xsl:text><xsl:value-of disable-output-escaping="yes" select="metadataList/metadata[@name = 'Latitude']"/><xsl:text>,</xsl:text>
453 <xsl:text disable-output-escaping="yes">"lng":</xsl:text><xsl:value-of disable-output-escaping="yes" select="metadataList/metadata[@name = 'Longitude']"/>
454 <xsl:text>}</xsl:text>
455 <xsl:if test="not(position() = count(//documentNode))">
456 <xsl:text>,</xsl:text>
457 </xsl:if>
458 </xsl:if>
459 </xsl:for-each>
460 <xsl:text>]</xsl:text>
461 </div>
462
463 <div id="map_canvas" style="margin:0px auto; width:450px; height:500px; float:right;"><xsl:text> </xsl:text></div>
464
465 <gsf:metadata name="Latitude"/>
466 <gsf:metadata name="Longitude"/>
467 </xsl:template>
468
469 <xsl:template name="mapFeaturesIcon">
470 <td style="padding-left:5px; padding-right:5px;" valign="top">
471 <a href="javascript:focusDocument('{@nodeID}');"><img src="interfaces/{$interface_name}/images/bluemarker.png"/></a>
472 </td>
473 </xsl:template>
474</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.