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

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

Reformatted the query file as well as adding mapping features

File size: 19.8 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}">
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 <input type="hidden" name="s" value="{@name}"/>
109 <input type="hidden" name="c" value="{$collName}"/>
110 <xsl:if test="not(paramList/param[@name='startPage'])">
111 <input type="hidden" name="startPage" value="1"/>
112 </xsl:if>
113 <xsl:choose>
114 <xsl:when test="/page/pageRequest/paramList/param[@name = 's1.maxDocs']">
115 <input type="hidden" name="s1.maxDocs">
116 <xsl:attribute name="value">
117 <xsl:value-of select="/page/pageRequest/paramList/param[@name = 's1.maxDocs']/@value"/>
118 </xsl:attribute>
119 </input>
120 </xsl:when>
121 <xsl:otherwise>
122 <input type="hidden" name="s1.maxDocs" value="100"/>
123 </xsl:otherwise>
124 </xsl:choose>
125 <xsl:choose>
126 <xsl:when test="/page/pageRequest/paramList/param[@name = 's1.hitsPerPage']">
127 <input type="hidden" name="s1.hitsPerPage">
128 <xsl:attribute name="value">
129 <xsl:value-of select="/page/pageRequest/paramList/param[@name = 's1.hitsPerPage']/@value"/>
130 </xsl:attribute>
131 </input>
132 </xsl:when>
133 <xsl:otherwise>
134 <input type="hidden" name="s1.hitsPerPage" value="20"/>
135 </xsl:otherwise>
136 </xsl:choose>
137
138 <xsl:variable name="ns">s1.</xsl:variable>
139 <xsl:for-each select="paramList/param">
140 <xsl:choose>
141 <xsl:when test="@name='case' or @name='stem' or @name='accent'">
142 </xsl:when>
143 <xsl:when test="@type='multi'">
144 <xsl:apply-templates select="."><xsl:with-param name="ns" select="$ns"/></xsl:apply-templates>
145 </xsl:when>
146 <xsl:when test="@name = 'maxDocs' or @name = 'hitsPerPage'"></xsl:when>
147 <xsl:otherwise>
148 <xsl:variable name="pvalue"><xsl:apply-templates select="." mode="calculate-default"><xsl:with-param name="ns" select="$ns"/></xsl:apply-templates></xsl:variable>
149 <div class="paramLabel"><xsl:value-of select="displayItem[@name='name']"/></div>
150 <div class="paramValue">
151 <xsl:apply-templates select=".">
152 <xsl:with-param name="default" select="$pvalue"/>
153 <xsl:with-param name="ns" select="$ns"/>
154 </xsl:apply-templates>
155 </div>
156 <br class="clear"/>
157 </xsl:otherwise>
158 </xsl:choose>
159 </xsl:for-each>
160
161 <br/>
162
163 <input type="submit"><xsl:attribute name="value"><xsl:value-of select="displayItem[@name='submit']"/></xsl:attribute></input>
164
165 </div>
166 </form>
167 </xsl:for-each>
168 </xsl:template>
169
170 <xsl:template name="prevNextButtons">
171 <!-- Current page -->
172 <xsl:variable name="currentPage">
173 <xsl:choose>
174 <xsl:when test="/page/pageRequest/paramList/param[@name='startPage']/@value">
175 <xsl:value-of select="/page/pageRequest/paramList/param[@name='startPage']/@value" />
176 </xsl:when>
177 <xsl:when test="/page/pageRequest/paramList/param[@name='s1.startPage']/@value">
178 <xsl:value-of select="/page/pageRequest/paramList/param[@name='s1.startPage']/@value" />
179 </xsl:when>
180 <xsl:otherwise>1</xsl:otherwise>
181 </xsl:choose>
182 </xsl:variable>
183
184 <!-- Find the total number of documents returned -->
185 <xsl:variable name="docMax">
186 <xsl:choose>
187 <xsl:when test="/page/pageResponse/metadataList/metadata[@name = 'numDocsReturned']">
188 <xsl:value-of select="/page/pageResponse/metadataList/metadata[@name = 'numDocsReturned']"/>
189 </xsl:when>
190 <xsl:when test="/page/pageResponse/metadataList/metadata[@name = 'numDocsMatched']">
191 <xsl:value-of select="/page/pageResponse/metadataList/metadata[@name = 'numDocsMatched']"/>
192 </xsl:when>
193 <xsl:otherwise><xsl:value-of select="count(/page/pageResponse/documentNodeList/documentNode)"/></xsl:otherwise>
194 </xsl:choose>
195 </xsl:variable>
196
197 <!-- Find the number of documents displayed per page -->
198 <xsl:variable name="docsPerPage">
199 <xsl:choose>
200 <xsl:when test="/page/pageRequest/paramList/param[@name='hitsPerPage']">
201 <xsl:value-of select="/page/pageRequest/paramList/param[@name='hitsPerPage']/@value" />
202 </xsl:when>
203 <xsl:when test="/page/pageRequest/paramList/param[@name='s1.hitsPerPage']">
204 <xsl:value-of select="/page/pageRequest/paramList/param[@name='s1.hitsPerPage']/@value" />
205 </xsl:when>
206 <xsl:otherwise>20</xsl:otherwise>
207 </xsl:choose>
208 </xsl:variable>
209
210 <table id="searchResultNavTable"><tr>
211 <!-- Previous button -->
212 <td id="prevArrowTD">
213 <xsl:if test="$currentPage != 1">
214 <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}">
215 <img src="interfaces/oran/images/previous.png"/>
216 </a>
217 </xsl:if>
218 </td>
219 <td id="prevTD">
220 <xsl:if test="$currentPage != 1">
221 <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>
222 </xsl:if>
223 </td>
224
225 <!-- Search result status bar (in english it reads "Displaying X to Y of Z documents") -->
226 <xsl:if test="$docMax &gt; 0">
227 <td id="searchResultsStatusBar">
228 <!-- "Displaying" -->
229 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.displaying')"/><xsl:text> </xsl:text>
230 <!-- "X" -->
231 <xsl:value-of select="($currentPage - 1) * $docsPerPage + 1"/>
232 <!-- "to" -->
233 <xsl:text> </xsl:text><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.to')"/><xsl:text> </xsl:text>
234 <!-- "Y" -->
235 <xsl:choose>
236 <xsl:when test="($currentPage * $docsPerPage + 1) &gt; $docMax">
237 <xsl:value-of select="$docMax"/>
238 </xsl:when>
239 <xsl:otherwise>
240 <xsl:value-of select="$currentPage * $docsPerPage"/>
241 </xsl:otherwise>
242 </xsl:choose>
243 <!-- "of" -->
244 <xsl:text> </xsl:text><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.of')"/><xsl:text> </xsl:text>
245 <!-- "Z" -->
246 <xsl:value-of select="$docMax"/>
247 <!-- "document[s]"-->
248 <xsl:choose>
249 <xsl:when test="$docMax = 1">
250 <xsl:text> </xsl:text><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.document')"/>
251 </xsl:when>
252 <xsl:otherwise>
253 <xsl:text> </xsl:text><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.document_plural')"/>
254 </xsl:otherwise>
255 </xsl:choose>
256 </td>
257 </xsl:if>
258
259 <!-- Next button -->
260 <td id="nextTD">
261 <xsl:if test="($currentPage * $docsPerPage + 1) &lt; $docMax">
262 <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>
263 </xsl:if>
264 </td>
265 <td id="nextArrowTD">
266 <xsl:if test="($currentPage * $docsPerPage + 1) &lt; $docMax">
267 <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}">
268 <img src="interfaces/oran/images/next.png"/>
269 </a>
270 </xsl:if>
271 </td>
272 </tr></table>
273 </xsl:template>
274
275 <!-- puts all the params into a=p&p=h type form - need to change this if use
276 multi params -->
277 <xsl:template match="paramList" mode="cgi">
278 <xsl:param name="ns">s1.</xsl:param>
279 <xsl:for-each select="param">
280 <xsl:variable name='pname' select="@name"/>
281 <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>
282 </xsl:for-each>
283 </xsl:template>
284
285 <xsl:template match="param" mode="calculate-default">
286 <xsl:param name="ns">s1.</xsl:param>
287 <xsl:variable name="pname"><xsl:value-of select="$ns"/><xsl:value-of select="@name"/></xsl:variable>
288 <xsl:choose>
289 <xsl:when test="/page/pageRequest/paramList/param[@name=$pname]">
290 <xsl:choose>
291 <xsl:when test="@type='enum_multi'"><xsl:text>,</xsl:text>
292 <xsl:for-each select="/page/pageRequest/paramList/param[@name=$pname]">
293 <xsl:value-of select="@value"/>,
294 </xsl:for-each>
295 </xsl:when>
296 <xsl:otherwise>
297 <xsl:value-of select="/page/pageRequest/paramList/param[@name=$pname]/@value"/>
298 </xsl:otherwise>
299 </xsl:choose>
300 </xsl:when>
301 <xsl:otherwise>
302 <xsl:value-of select="@default"/>
303 </xsl:otherwise>
304 </xsl:choose>
305 </xsl:template>
306
307 <!-- invisible params - used by other stuff. in the query form, we set to the default -->
308 <xsl:template match="param[@type='invisible']">
309 <xsl:param name="ns">s1.</xsl:param>
310 <input type='hidden' name='{$ns}{@name}' value='{@default}'/>
311 </xsl:template>
312
313 <!-- boolean params -->
314 <xsl:template match="param[@type='boolean']">
315 <xsl:param name="ns">s1.</xsl:param>
316 <xsl:param name="default"/>
317 <select name='{$ns}{@name}'>
318 <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>
319 <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>
320 </select>
321 </xsl:template>
322
323 <!-- integer params -->
324 <xsl:template match="param[@type='integer']">
325 <xsl:param name="ns">s1.</xsl:param>
326 <xsl:param name="default"/>
327 <input type="text" name="{$ns}{@name}" size="3" value="{$default}"/>
328 </xsl:template>
329
330 <!-- single selection enum params -->
331 <xsl:template match="param[@type='enum_single']">
332 <xsl:param name="ns">s1.</xsl:param>
333 <xsl:param name="default"/>
334 <xsl:choose>
335 <xsl:when test="count(option) = 1">
336 <xsl:value-of select="option/displayItem[@name='name']"/>
337 <input type='hidden' name='{$ns}{@name}'><xsl:attribute name='value'><xsl:value-of select='option/@name'/></xsl:attribute></input>
338 </xsl:when>
339 <xsl:otherwise>
340 <select name="{$ns}{@name}">
341 <xsl:for-each select="option">
342 <option value="{@name}"><xsl:if test="@name=$default"><xsl:attribute name="selected"></xsl:attribute></xsl:if><xsl:value-of select="displayItem[@name='name']"/></option>
343 </xsl:for-each>
344 </select>
345 </xsl:otherwise>
346 </xsl:choose>
347 </xsl:template>
348
349
350 <!-- multiple selection enum params -->
351 <!-- how to do defaults for this?? -->
352 <xsl:template match="param[@type='enum_multi']">
353 <xsl:param name="ns">s1.</xsl:param>
354 <xsl:param name="default"/>
355 <select name="{$ns}{@name}" size="2">
356 <xsl:attribute name="multiple"></xsl:attribute>
357 <xsl:for-each select="option">
358 <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>
359 </xsl:for-each>
360 </select>
361 </xsl:template>
362
363 <!-- string params -->
364 <xsl:template match="param[@type='string']">
365 <xsl:param name="ns">s1.</xsl:param>
366 <xsl:param name="default"/>
367 <input type="text" name="{$ns}{@name}" size="30" value="{$default}"/>
368 </xsl:template>
369
370 <!-- large string params -->
371 <xsl:template match="param[@type='text']">
372 <xsl:param name="ns">s1.</xsl:param>
373 <xsl:param name="default"/>
374 <textarea name="{$ns}{@name}" cols="50" rows="3"><xsl:value-of select='$default'/></textarea>
375 </xsl:template>
376
377 <!-- multi params - params that are combinations of other params -->
378 <xsl:template match="param[@type='multi']">
379 <xsl:param name="ns">s1.</xsl:param>
380 <xsl:variable name="parent" select="@name"/>
381
382 <table>
383 <tr class="queryfieldheading">
384 <xsl:value-of select="displayItem[@name='name']"/>
385 <xsl:for-each select="param">
386 <td class="queryfieldname"><xsl:value-of select="displayItem[@name='name']"/></td>
387 </xsl:for-each>
388 </tr>
389 <xsl:apply-templates select="." mode="contents">
390 <xsl:with-param name="occurs" select="@occurs"/>
391 <xsl:with-param name="ns" select="$ns"/>
392 </xsl:apply-templates>
393 </table>
394
395 </xsl:template>
396
397 <xsl:template match="param[@type='multi']" mode="contents">
398 <xsl:param name="ns">s1.</xsl:param>
399 <xsl:param name="occurs">1</xsl:param>
400 <xsl:variable name="pos" select="@occurs - $occurs"/>
401 <tr class="queryfieldrow">
402 <xsl:for-each select="param">
403 <xsl:variable name="pname" select="@name"/>
404 <xsl:variable name="values" select="/page/pageRequest/paramList/param[@name=$pname]/@value"/>
405 <td class="queryfieldcell">
406 <xsl:choose>
407 <xsl:when test="not(@ignore) or @ignore != $pos">
408 <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>
409 </xsl:when>
410 <xsl:otherwise><!-- put in a hidden placeholder -->
411 <input type="hidden" name='{$ns}{@name}' value=''/>
412 </xsl:otherwise>
413 </xsl:choose>
414 </td>
415 </xsl:for-each>
416 </tr>
417
418 <!-- recursively call this template to get multiple entries -->
419 <xsl:if test="$occurs &gt; 1">
420 <xsl:apply-templates select="." mode="contents"><xsl:with-param name="occurs" select="$occurs - 1"/><xsl:with-param name="ns" select="$ns"/></xsl:apply-templates>
421 </xsl:if>
422 </xsl:template>
423
424 <xsl:template name="resultsPagePre">
425 <!-- OVERWRITE TO INSERT CONTENT BEFORE THE RESULTS PAGE -->
426 <xsl:if test="/page/pageResponse/format[@type='display' or @type='browse' or @type='search']/gsf:option[@name='mapEnabled']/@value = 'true'">
427 <xsl:call-template name="mapFeaturesJSONNodes"/>
428 </xsl:if>
429 </xsl:template>
430
431 <xsl:template name="resultsPagePost">
432 <!-- OVERWRITE TO INSERT CONTENT AFTER THE RESULTS PAGE -->
433 </xsl:template>
434
435 <xsl:template name="documentNodePre">
436 <!-- OVERWRITE TO INSERT CONTENT BEFORE EVERY DOCUMENT NODE -->
437 </xsl:template>
438
439 <xsl:template name="documentNodePost">
440 <!-- OVERWRITE TO INSERT CONTENT AFTER EVERY DOCUMENT NODE -->
441 <xsl:if test="/page/pageResponse/format[@type='display' or @type='browse' or @type='search']/gsf:option[@name='mapEnabled']/@value = 'true'">
442 <xsl:call-template name="mapFeaturesIcon"/>
443 </xsl:if>
444 </xsl:template>
445
446 <xsl:template name="mapFeaturesJSONNodes">
447 <div id="jsonNodes" style="display:none;">
448 <xsl:text>[</xsl:text>
449 <xsl:for-each select="//documentNode">
450 <xsl:if test="metadataList/metadata[@name = 'Latitude'] and metadataList/metadata[@name = 'Longitude']">
451 <xsl:text>{</xsl:text>
452 <xsl:text disable-output-escaping="yes">"nodeID":"</xsl:text><xsl:value-of select="@nodeID"/><xsl:text disable-output-escaping="yes">",</xsl:text>
453 <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>
454 <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>
455 <xsl:text disable-output-escaping="yes">"lng":</xsl:text><xsl:value-of disable-output-escaping="yes" select="metadataList/metadata[@name = 'Longitude']"/>
456 <xsl:text>}</xsl:text>
457 <xsl:if test="not(position() = count(//documentNode))">
458 <xsl:text>,</xsl:text>
459 </xsl:if>
460 </xsl:if>
461 </xsl:for-each>
462 <xsl:text>]</xsl:text>
463 </div>
464
465 <div id="map_canvas" style="margin:0px auto; width:450px; height:500px; float:right;"><xsl:text> </xsl:text></div>
466
467 <gsf:metadata name="Latitude"/>
468 <gsf:metadata name="Longitude"/>
469 </xsl:template>
470
471 <xsl:template name="mapFeaturesIcon">
472 <td style="padding-left:5px; padding-right:5px;" valign="top">
473 <a href="javascript:focusDocument('{@nodeID}');"><img src="interfaces/{$interface_name}/images/bluemarker.png"/></a>
474 </td>
475 </xsl:template>
476</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.