root/main/trunk/greenstone3/web/interfaces/default/transform/pages/query.xsl @ 26372

Revision 26372, 21.8 KB (checked in by kjdon, 8 years ago)

display num matching docs. Also display term info even if no matching docs - if doing multiword query its helpful to see what terms were found

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