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

Revision 31286, 28.9 KB (checked in by litvinovg, 3 years ago)

XSLT part of hierarchy view in cross collection search

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">
18        <gslib:serviceName/>
19    </xsl:template>
20
21    <!-- set page breadcrumbs -->
22    <xsl:template name="breadcrumbs">
23        <gslib:siteLink/>
24        <gslib:rightArrow/>
25        <xsl:if test="/page/pageResponse/collection">
26            <gslib:collectionNameLinked/>
27            <gslib:rightArrow/>
28        </xsl:if>
29    </xsl:template>
30
31    <!-- do we display the line 'displaying 0 to 20 of 40 documents'-->
32    <!-- on by default. To turn off, add the following in <search> element in collectionConfig.xml:
33         <gsf:option name="hideStatus" value="true"/> -->
34    <xsl:variable name="display_status_bar">
35      <xsl:if test="/page/pageResponse/format[@type='search']/gsf:option[@name='hideStatus']/@value='true'">false</xsl:if></xsl:variable>
36    <!-- the page content -->
37    <xsl:template match="/page">
38        <xsl:if test="not(/page/pageRequest/paramList/param[@name = 'qs']) or /page/pageRequest/paramList/param[@name = 'qs']/@value = ''">
39            <xsl:call-template name="queryPage"/>
40        </xsl:if>
41    <xsl:if test="contains(/page/pageRequest/paramList/param[@name='rt']/@value, 'r')">
42        <xsl:call-template name="resultsPage"/>
43   </xsl:if>
44    </xsl:template>
45
46    <xsl:template name="resultsPage">
47        <xsl:call-template name="resultsPagePre"/>
48        <xsl:call-template name="displayMatchDocs"/>
49        <xsl:call-template name="displayTermInfo"/>
50        <xsl:call-template name="displayBaskets"/>
51        <xsl:call-template name="displayResults"/>
52        <xsl:call-template name="resultsPagePost"/>
53    </xsl:template>
54
55    <!-- optional cgi-params for links to document pages -->
56    <xsl:variable name="opt-doc-link-args">p.s=<gsvar:this-service/>
57    </xsl:variable>
58
59    <xsl:template name="displayBaskets">
60      <xsl:if test="$berryBasketOn or ($documentBasketOn and (util:contains(/page/pageRequest/userInformation/@groups, 'administrator') or util:contains(/page/pageRequest/userInformation/@groups, 'all-collections-editor') or util:contains(/page/pageRequest/userInformation/@groups, $thisCollectionEditor)))">
61        <div id="rightSidebar">
62          <xsl:if test="$berryBasketOn">
63        <!-- show the berry basket if it's turned on -->
64        <gslib:berryBasket/>
65        <xsl:text> </xsl:text>
66          </xsl:if>
67          <xsl:if test="$documentBasketOn and (util:contains(/page/pageRequest/userInformation/@groups, 'administrator') or util:contains(/page/pageRequest/userInformation/@groups, 'all-collections-editor') or util:contains(/page/pageRequest/userInformation/@groups, $thisCollectionEditor))">
68        <gslib:documentBasket/>
69        <xsl:text> </xsl:text>
70          </xsl:if>
71        </div>
72      </xsl:if>
73    </xsl:template>
74
75    <xsl:template name="displayResults">
76        <xsl:if test="/page/pageResponse/facetList/facet">
77            <script type="text/javascript" src="interfaces/{$interface_name}/js/facet-scripts.js">
78                <xsl:text> </xsl:text>
79            </script>
80            <div id="facetSelector">
81                <xsl:for-each select="/page/pageResponse/facetList/facet">
82                    <xsl:if test="count(count) > 0">
83                        <ul class="facetTable ui-widget-content" indexName="{@name}">
84                            <xsl:variable name="serviceName">
85                                <xsl:value-of select="/page/pageRequest/paramList/param[@name = 's']/@value"/>
86                            </xsl:variable>
87                            <xsl:variable name="indexShortName">
88                                <xsl:value-of select="@name"/>
89                            </xsl:variable>
90                            <xsl:variable name="countSize">
91                                <xsl:choose>
92                                    <xsl:when test="/page/pageResponse/format[@type='search']/gsf:option[@name='facetTableRows']">
93                                        <xsl:value-of select="/page/pageResponse/format[@type='search']/gsf:option[@name='facetTableRows']/@value"/>
94                                    </xsl:when>
95                                    <xsl:otherwise>8</xsl:otherwise>
96                                </xsl:choose>
97                            </xsl:variable>
98
99                            <li class="ui-widget-header" style="text-transform:capitalize; text-align:center;">
100                                <xsl:choose>
101                                    <xsl:when test="/page/pageResponse/collection/serviceList/service[@name = $serviceName]/paramList/param[@name = 'index']">
102                                        <xsl:value-of select="/page/pageResponse/collection/serviceList/service[@name = $serviceName]/paramList/param[@name = 'index']/option[@name = $indexShortName]/displayItem"/>
103                                    </xsl:when>
104                                    <xsl:when test="/page/pageResponse/collection/serviceList/service[@name = $serviceName]/paramList/param[@name = 'complexField']/param[@name = 'fqf']">
105                                        <xsl:value-of select="/page/pageResponse/collection/serviceList/service[@name = $serviceName]/paramList/param[@name = 'complexField']/param[@name = 'fqf']/option[@name = $indexShortName]/displayItem"/>
106                                    </xsl:when>
107                                </xsl:choose>
108                            </li>
109                            <xsl:for-each select="count">
110                                <li>
111                                    <xsl:attribute name="style">
112                                        <xsl:if test="position() > $countSize">display:none;<xsl:value-of select="$indexShortName"/>
113                                        </xsl:if>
114                                    </xsl:attribute>
115                                    <input type="checkbox" onclick="performRefinedSearch();"/>
116                                    <span>
117                                        <xsl:value-of select="@name"/>
118                                    </span>(<xsl:value-of select="."/>)
119                                </li>
120                            </xsl:for-each>
121                            <xsl:if test="count(count) > $countSize">
122                                <li class="expandFacetList{$indexShortName}">
123                                    <a class="expandFacetListLink{$indexShortName}" href="javascript:expandFacetList('{$indexShortName}', {$countSize});"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.facet.more')"/></a>
124                                </li>
125                                <li class="collapseFacetList{$indexShortName}" style="display: none;">
126                                    <a  class="collapseFacetListLink{$indexShortName}" href="javascript:collapseFacetList('{$indexShortName}', {$countSize});"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.facet.less')"/></a>
127                                </li>
128                            </xsl:if>
129                        </ul>
130                    </xsl:if>
131                </xsl:for-each>
132            </div>
133        </xsl:if>
134        <div id="resultsArea">
135            <xsl:attribute name="class">
136                <xsl:if test="/page/pageResponse/facetList/facet">facetedResults</xsl:if>
137            </xsl:attribute>
138            <table id="resultsTable">
139                <xsl:for-each select="pageResponse/documentNodeList/documentNode">
140                    <tr id="div{@nodeID}" class="document">
141                        <xsl:apply-templates select="."/>
142                        <!-- The berry (optional) -->
143                        <td>
144                          <xsl:call-template name="documentBerryForClassifierOrSearchPage"/>
145                        </td>
146                        <xsl:call-template name="highlightSnippet">
147                            <xsl:with-param name="nodeHASH">
148                                <xsl:value-of select="@nodeID"/>
149                            </xsl:with-param>
150                        </xsl:call-template>
151                        <xsl:call-template name="documentNodePost"/>
152                    </tr>
153                </xsl:for-each>
154                <br/>
155            </table>
156
157            <!-- Previous/Next buttons-->
158            <xsl:call-template name="prevNextButtons"/>
159        </div>
160        <xsl:if test="/page/pageResponse/facetList/facet">
161            <div style="clear:both;">
162                <xsl:text> </xsl:text>
163            </div>
164        </xsl:if>
165    </xsl:template>
166
167    <xsl:template name="highlightSnippet">
168        <xsl:param name="nodeHASH">
169        </xsl:param>
170        <xsl:for-each select="/page/pageResponse/highlightSnippetList/highlightSnippet[@nodeID = $nodeHASH]">
171                        <tr>
172                            <td>
173                                </td>
174                                <td>
175                                    <div class="HighlightSnippet">
176                                        <xsl:value-of select="." disable-output-escaping="yes"/>
177                                    </div>
178                            </td>
179                    </tr>
180            </xsl:for-each>
181    </xsl:template>
182    <xsl:template name="queryPage">
183        <xsl:for-each select="pageResponse/service">
184            <form name="QueryForm" method="get" action="{$library_name}/collection/{$collName}/search/{@name}">
185                <div>
186                    <input type="hidden" name="a" value="q"/>
187                    <input type="hidden" name="sa">
188                        <xsl:attribute name="value">
189                            <xsl:value-of select="/page/pageRequest/@subaction"/>
190                        </xsl:attribute>
191                    </input>
192                    <input type="hidden" name="rt" value="rd"/>
193                   
194                    <xsl:variable name="ns">s1.</xsl:variable>
195                    <xsl:choose>
196                        <xsl:when test="/page/pageResponse/hierarchy">
197                            <xsl:call-template name="hierarchy">
198                                <xsl:with-param name="ns" select="$ns" />
199                            </xsl:call-template>
200                        </xsl:when>
201                        <xsl:otherwise>
202                    <xsl:for-each select="paramList/param">
203                        <xsl:choose>
204                            <xsl:when test="@type='multi'">
205                                <xsl:apply-templates select=".">
206                                    <xsl:with-param name="ns" select="$ns"/>
207                                </xsl:apply-templates>
208                            </xsl:when>
209                            <xsl:otherwise>
210                                <xsl:call-template name="param-display">
211                                    <xsl:with-param name="ns" select="$ns"/>
212                                </xsl:call-template>
213                            </xsl:otherwise>
214                        </xsl:choose>
215                    </xsl:for-each>
216                        </xsl:otherwise>
217                    </xsl:choose>
218                    <br/>
219                    <input type="submit">
220                        <xsl:attribute name="value">
221                            <xsl:value-of select="displayItem[@name='submit']"/>
222                        </xsl:attribute>
223                    </input>
224                </div>
225            </form>
226        </xsl:for-each>
227    </xsl:template>
228
229    <xsl:template name="hierarchy">
230        <xsl:param name="ns" />
231        <div class="paramLabel">
232            <xsl:value-of
233                select="paramList/param[@name='collection']/displayItem[@name='name']/text()" />
234        </div>
235        <div class="paramValue">
236            <select multiple="" name="s1.collection" size='10'>
237                <xsl:for-each select="/page/pageResponse/hierarchy/*">
238                    <xsl:call-template name="hierarchy-display">
239                        <xsl:with-param name="padding">
240                            0
241                        </xsl:with-param>
242                    </xsl:call-template>
243                </xsl:for-each>
244            </select>
245            <script type="text/javascript">
246                <xsl:text disable-output-escaping="yes">
247                function selectChildren(group) {
248                var value = $(group).attr("value");
249                var name = value.substring(5);
250                $("option[class^='"+name+"']").prop({selected: true});
251                }
252            </xsl:text>
253            </script>
254        </div>
255        <br class="clear" />
256        <xsl:for-each select="paramList/param[@type='integer']">
257            <xsl:call-template name="param-display">
258                <xsl:with-param name="ns" select="$ns" />
259            </xsl:call-template>
260        </xsl:for-each>
261        <xsl:for-each select="paramList/param[@type='string']">
262            <xsl:call-template name="param-display">
263                <xsl:with-param name="ns" select="$ns" />
264            </xsl:call-template>
265        </xsl:for-each>
266    </xsl:template>
267
268    <xsl:template name="hierarchy-display">
269        <xsl:param name="padding" />
270        <xsl:param name="path" />
271        <xsl:choose>
272            <xsl:when test="name(.) = 'group'">
273                <option>
274                    <xsl:attribute name="style">
275                            <xsl:text>padding-left: </xsl:text>
276                            <xsl:value-of select="concat($padding,'px')" />
277                        </xsl:attribute>
278                    <xsl:attribute name="disabled">
279                            <xsl:text>disabled</xsl:text>
280                        </xsl:attribute>
281                    <xsl:attribute name="value">
282                            <xsl:text>group</xsl:text>
283                            <xsl:value-of select="$path" />
284                            <xsl:text>_</xsl:text>
285                            <xsl:value-of select="@name" />
286                        </xsl:attribute>
287                    <xsl:attribute name="onclick">
288                            <xsl:text>selectChildren(this)</xsl:text>
289                        </xsl:attribute>
290                    <xsl:value-of select="@title"></xsl:value-of>
291                    <xsl:for-each select="./*">
292                        <xsl:call-template name="hierarchy-display">
293                            <xsl:with-param name="padding">
294                                <xsl:value-of select="$padding + 20" />
295                            </xsl:with-param>
296                            <xsl:with-param name="path">
297                                <xsl:value-of select="$path" />
298                                <xsl:text>_</xsl:text>
299                                <xsl:value-of select="../@name" />
300                            </xsl:with-param>
301                        </xsl:call-template>
302                    </xsl:for-each>
303                </option>
304            </xsl:when>
305            <xsl:otherwise>
306                <option>
307                    <xsl:attribute name="style">
308                            <xsl:text>padding-left: </xsl:text>
309                            <xsl:value-of select="$padding" />
310                            <xsl:text>px</xsl:text>
311                        </xsl:attribute>
312                    <xsl:attribute name="class">
313                            <xsl:value-of select="$path" />
314                        </xsl:attribute>
315                    <xsl:attribute name="value">
316                        <xsl:value-of select="current()/@name"></xsl:value-of>
317                    </xsl:attribute>
318                    <xsl:value-of
319                        select="/page/pageResponse/service[@name = 'TextQuery']/paramList/param[@name = 'collection']/option[@name = current()/@name]/displayItem[@name = 'name']/text()"></xsl:value-of>
320                </option>
321            </xsl:otherwise>
322        </xsl:choose>
323    </xsl:template>
324
325    <xsl:template name="displayMatchDocs">
326        <div id="matchdocs">
327            <xsl:variable name="numDocsMatched" select="/page/pageResponse/metadataList/metadata[@name='numDocsMatched']"/>
328            <xsl:variable name="numDocsReturned" select="/page/pageResponse/metadataList/metadata[@name='numDocsReturned']"/>
329            <xsl:variable name="docLevel">
330                <xsl:call-template name="documentLevel"/>
331            </xsl:variable>
332            <xsl:variable name="docLevelText">
333                <xsl:call-template name="documentLevelText">
334                    <xsl:with-param name="numDocsMatched" select="$numDocsMatched"/>
335                    <xsl:with-param name="level" select="$docLevel"/>
336                </xsl:call-template>
337            </xsl:variable>
338            <xsl:choose>
339                <xsl:when test="$numDocsMatched='0' or $numDocsReturned='0'">
340                    <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.nodocsmatch', $docLevelText)"/>
341                </xsl:when>
342                <xsl:when test="$numDocsMatched='1' or $numDocsReturned='1'">
343                    <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.onedocsmatch', $docLevelText)"/>
344                </xsl:when>
345                <xsl:when test="$numDocsMatched">
346                        <xsl:variable name="gitArgs1" select="concat($numDocsMatched, ';', $docLevelText)"/>
347                        <xsl:variable name="gitArgs2" select="concat($numDocsReturned, ';', $docLevelText)"/>
348                   
349                    <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.manydocsmatch', $gitArgs1)"/>
350                    <xsl:if test="$numDocsReturned and not($numDocsMatched=$numDocsReturned)"> (<xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.docsreturned', $gitArgs2)"/>)</xsl:if>
351                </xsl:when>
352                <xsl:when test="$numDocsReturned">
353                        <xsl:variable name="gitArgs" select="concat($numDocsReturned, ';', $docLevelText)"/>
354                    <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.atleastdocsmatch', $gitArgs)"/>
355                </xsl:when>
356            </xsl:choose>
357        </div>
358
359    </xsl:template>
360
361    <xsl:template name="documentLevel">
362        <xsl:choose>
363            <xsl:when test="/page/pageRequest/paramList/param[@name='level']">
364                <xsl:value-of select="/page/pageRequest/paramList/param[@name='level']/@value" />
365            </xsl:when>
366            <xsl:when test="/page/pageRequest/paramList/param[@name='s1.level']">
367                <xsl:value-of select="/page/pageRequest/paramList/param[@name='s1.level']/@value" />
368            </xsl:when>
369            <xsl:otherwise>Doc</xsl:otherwise>
370        </xsl:choose>
371    </xsl:template>
372
373    <xsl:template name="documentLevelText">
374        <xsl:param name="numDocsMatched">0</xsl:param>
375        <xsl:param name="level">Doc</xsl:param>
376        <xsl:choose>   
377            <xsl:when test="$numDocsMatched = 1">
378                <xsl:choose>
379                    <xsl:when test="$level = 'Doc'">
380                        <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.document')"/>
381                    </xsl:when>
382                    <xsl:otherwise>
383                        <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.section')"/>
384                    </xsl:otherwise>
385                </xsl:choose>
386            </xsl:when>
387            <!-- 0 or more than one use plural. is that the case for all langs??-->
388            <xsl:otherwise>
389                <xsl:choose>
390                    <xsl:when test="$level = 'Doc'">
391                        <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.document_plural')"/>
392                    </xsl:when>
393                    <xsl:otherwise>
394                        <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.section_plural')"/>
395                    </xsl:otherwise>
396                </xsl:choose>
397            </xsl:otherwise>
398        </xsl:choose>
399    </xsl:template>
400
401    <xsl:template name="displayTermInfo">
402
403        <!-- Find the number of documents displayed per page -->
404        <xsl:variable name="level">
405            <xsl:call-template name="documentLevel"/>
406        </xsl:variable>
407
408        <!-- The list of search terms with their frequency and document count -->
409        <p class="termList">
410            <xsl:if test="count(/page/pageResponse/termList/stopword) &gt; 0">
411                <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.common')"/>
412                <xsl:text> </xsl:text>
413                <xsl:for-each select="/page/pageResponse/termList/stopword">
414                    <span style="font-style:italic;">
415                        <xsl:value-of select="@name"/>
416                    </span>
417                    <xsl:text> </xsl:text>
418                </xsl:for-each>
419                <br />
420                <br />
421            </xsl:if>
422
423            <!-- If there is only one or two search terms then show the expanded information -->
424            <xsl:choose>
425              <xsl:when test="count(/page/pageResponse/termList/term) &lt; 3">
426               
427                <xsl:for-each select="/page/pageResponse/termList/term">
428                  <xsl:variable name="levelText">
429                <!-- this gets document, section, documents, sections, depending on level and number -->
430                <xsl:call-template name="documentLevelText">
431                  <xsl:with-param name="level" select="$level"/>
432                  <xsl:with-param name="numDocsMatched" select="@numDocsMatch"/>
433                </xsl:call-template>
434                  </xsl:variable>
435                  <span class="termInfo">
436                         
437                <!-- For solr and mg collections, display:
438                     term x occured y times
439                     term a occured b times
440                     For collections using all other indexers, display:
441                     term x occurred y times in n sections/documents
442                     term a occurred b times in m sections/docs
443                -->
444                <!-- not all these args are used in every case -->
445                <xsl:variable name="args" select="concat(@name,';', @freq, ';', @numDocsMatch,';',  $levelText)"/>
446                <xsl:choose>
447                  <xsl:when test="@freq = 0">
448                    <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.termoccurs.0',$args)"/>
449                  </xsl:when>
450                  <xsl:when test="@freq = 1">
451                    <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.termoccurs.1',$args)"/>
452                  </xsl:when>
453                  <xsl:otherwise> <!-- more than one occurrance -->
454                    <xsl:choose>
455                      <xsl:when test="/page/pageResponse/collection[@type = 'solr'] or /page/pageResponse/collection[@type = 'mg']">
456                    <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.termoccurs.x',$args)"/>
457                      </xsl:when>
458                      <xsl:when test="@numDocsMatch = 1">
459                    <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.termoccurs.x.1',$args)"/>
460                      </xsl:when>
461                      <xsl:otherwise>
462                    <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.termoccurs.x.x',$args)"/>
463                      </xsl:otherwise>
464                    </xsl:choose>
465                  </xsl:otherwise>
466                </xsl:choose>
467               
468                  </span>
469                  <br/>
470                </xsl:for-each>
471              </xsl:when>
472              <xsl:otherwise>
473                    <xsl:for-each select="/page/pageResponse/termList/term">
474                        <span style="font-style:italic;">
475                            <xsl:value-of select="@name"/>
476                        </span> (<xsl:value-of select="@freq"/>)
477                    </xsl:for-each>
478                </xsl:otherwise>
479            </xsl:choose>
480        </p>
481    </xsl:template>
482
483    <xsl:template name="prevNextButtons">   
484        <!-- Current page -->
485        <xsl:variable name="currentPage">
486            <xsl:choose>
487                <xsl:when test="/page/pageRequest/paramList/param[@name='s1.startPage']/@value">
488                    <xsl:value-of select="/page/pageRequest/paramList/param[@name='s1.startPage']/@value" />
489                </xsl:when>
490                <xsl:when test="/page/pageRequest/paramList/param[@name='startPage']/@value">
491                    <xsl:value-of select="/page/pageRequest/paramList/param[@name='startPage']/@value" />
492                </xsl:when>
493                <xsl:otherwise>1</xsl:otherwise>
494            </xsl:choose>
495        </xsl:variable>
496        <xsl:variable name="usesS1">
497            <xsl:choose>
498                <xsl:when test="/page/pageResponse/service/paramList/param[@name='startPage']">true</xsl:when>
499                <xsl:otherwise>false</xsl:otherwise>
500            </xsl:choose>
501        </xsl:variable>
502        <!-- Find the total number of documents returned/matched -->
503        <xsl:variable name="docMax">
504            <xsl:choose>
505                <xsl:when test="/page/pageResponse/metadataList/metadata[@name = 'numDocsReturned']">
506                    <xsl:value-of select="/page/pageResponse/metadataList/metadata[@name = 'numDocsReturned']"/>
507                </xsl:when>
508                <xsl:when test="/page/pageResponse/metadataList/metadata[@name = 'numDocsMatched']">
509                    <xsl:value-of select="/page/pageResponse/metadataList/metadata[@name = 'numDocsMatched']"/>
510                </xsl:when>
511                <xsl:otherwise>
512                    <xsl:value-of select="count(/page/pageResponse/documentNodeList/documentNode)"/>
513                </xsl:otherwise>
514            </xsl:choose>
515        </xsl:variable>
516        <!-- Find the number of documents displayed per page -->
517        <xsl:variable name="docsPerPage">
518            <xsl:choose>
519                <xsl:when test="/page/pageRequest/paramList/param[@name='s1.hitsPerPage']">
520                    <xsl:value-of select="/page/pageRequest/paramList/param[@name='s1.hitsPerPage']/@value" />
521                </xsl:when>
522                <xsl:when test="/page/pageResponse/service/paramList/param[@name='hitsPerPage']">
523                  <xsl:value-of select="/page/pageResponse/service/paramList/param[@name='hitsPerPage']/@default" />
524                  </xsl:when>
525                <xsl:otherwise><xsl:value-of select="count(/page/pageResponse/documentNodeList/documentNode)"/></xsl:otherwise>
526            </xsl:choose>
527        </xsl:variable>
528        <!-- Find the level -->
529        <xsl:variable name="level">
530          <xsl:call-template name="documentLevel"/>
531        </xsl:variable>
532       
533        <!-- we only need this if number of docs > docsperpage -->
534        <xsl:if test="$docMax &gt; $docsPerPage">
535        <table id="searchResultNavTable">
536            <tr>
537                <xsl:variable name="startPageName">
538                    <xsl:if test="$usesS1 = 'true'">s1.</xsl:if>startPage</xsl:variable>
539
540                <!-- Previous button -->
541                <td id="prevArrowTD">
542                    <xsl:if test="$currentPage != 1">
543                        <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}">
544                          <xsl:call-template name="previousArrowImage"/>
545                        </a>
546                    </xsl:if>
547                </td>
548                <td id="prevTD">
549                    <xsl:if test="$currentPage != 1">
550                        <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}"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.results.previous')"/></a>
551                    </xsl:if>
552                </td>
553
554                <xsl:if test="$display_status_bar != 'false'">
555                <!-- Search result status bar (in english it reads "Displaying X to Y of Z documents") -->
556                <xsl:if test="$docsPerPage &gt; 0">
557                    <xsl:variable name="startdoc" select="($currentPage - 1) * $docsPerPage + 1"/>
558                    <xsl:variable name="enddoc">
559                        <xsl:choose>
560                            <xsl:when test="($currentPage * $docsPerPage + 1) &gt; $docMax">
561                                <xsl:value-of select="$docMax"/>
562                            </xsl:when>
563                            <xsl:otherwise>
564                                <xsl:value-of select="$currentPage * $docsPerPage"/>
565                            </xsl:otherwise>
566                        </xsl:choose>
567                    </xsl:variable>
568                    <xsl:variable name="levelString">
569                      <xsl:choose>
570                        <xsl:when test="$level = 'Doc'">
571                          <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.document_plural')"/>
572                        </xsl:when>
573                        <xsl:otherwise>
574                          <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.section_plural')"/>
575                        </xsl:otherwise>
576                      </xsl:choose>
577                    </xsl:variable>
578                    <td id="searchResultsStatusBar">
579                            <xsl:variable name="gitArgs" select="concat($startdoc,';', $enddoc, ';', $docMax, ';', $levelString)"/>
580                        <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.displayingnumdocs', $gitArgs)"/>
581                    </td>
582                </xsl:if>
583                </xsl:if>
584                <!-- Next button -->
585                <td id="nextTD">
586                    <xsl:if test="$docsPerPage &gt; 0 and ($currentPage * $docsPerPage + 1) &lt; $docMax">
587                        <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}"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'query.results.next')"/></a>
588                    </xsl:if>
589                </td>
590                <td id="nextArrowTD">
591                    <xsl:if test="$docsPerPage &gt; 0 and ($currentPage * $docsPerPage + 1) &lt; $docMax">
592                        <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}">
593                            <xsl:call-template name="nextArrowImage"/>
594                        </a>
595                    </xsl:if>
596                </td>
597            </tr>
598        </table>
599        </xsl:if>
600    </xsl:template>
601
602    <xsl:template name="previousArrowImage">
603      <img src="interfaces/default/images/previous.png"/>
604    </xsl:template>
605    <xsl:template name="nextArrowImage">
606      <img src="interfaces/default/images/next.png"/>
607    </xsl:template>
608    <!-- puts all the params into a=p&p=h type form - need to change this if use
609    multi params  -->
610    <xsl:template match="paramList" mode="cgi">
611        <xsl:param name="ns">s1.</xsl:param>
612        <xsl:for-each select="param">
613            <xsl:variable name='pname' select="@name"/>
614            <xsl:text>&amp;</xsl:text>
615            <xsl:value-of select="$ns"/>
616            <xsl:value-of select="@name"/>=<xsl:apply-templates select="." mode="calculate-default">
617                <xsl:with-param name='ns' select='$ns'/>
618            </xsl:apply-templates>
619        </xsl:for-each>
620    </xsl:template>
621
622    <xsl:template name="resultsPagePre">
623        <!-- OVERWRITE TO INSERT CONTENT BEFORE THE RESULTS PAGE -->
624        <xsl:if test="/page/pageResponse/format[@type='display' or @type='browse' or @type='search']/gsf:option[@name='mapEnabled']/@value = 'true'">
625            <xsl:call-template name="mapFeaturesJSONNodes"/>
626        </xsl:if>
627    </xsl:template>
628
629    <xsl:template name="resultsPagePost">
630        <!-- OVERWRITE TO INSERT CONTENT AFTER THE RESULTS PAGE -->
631    </xsl:template>
632
633    <xsl:template name="documentNodePre">
634        <!-- OVERWRITE TO INSERT CONTENT BEFORE EVERY DOCUMENT NODE -->
635    </xsl:template>
636
637    <xsl:template name="documentNodePost">
638        <!-- OVERWRITE TO INSERT CONTENT AFTER EVERY DOCUMENT NODE -->
639        <xsl:if test="/page/pageResponse/format[@type='display' or @type='browse' or @type='search']/gsf:option[@name='mapEnabled']/@value = 'true'">
640            <xsl:call-template name="mapFeaturesIcon"/>
641        </xsl:if>
642
643        <xsl:if test="/page/pageResponse/format/gsf:option[@name='panoramaViewerEnabled']/@value = 'true'">
644          <xsl:if test=" metadataList/metadata[@name = 'Latitude'] and metadataList/metadata[@name = 'Longitude']">
645                    <xsl:call-template name="panoramaViewerFeaturesIcon"/>
646                  </xsl:if>
647        </xsl:if>
648
649    </xsl:template>
650
651    <xsl:template name="mapFeaturesJSONNodes">
652        <div id="jsonNodes" style="display:none;">
653            <xsl:text>[</xsl:text>
654            <xsl:for-each select="//documentNode">
655                <xsl:if test="metadataList/metadata[@name = 'Latitude'] and metadataList/metadata[@name = 'Longitude']">
656                    <xsl:text>{</xsl:text>
657                    <xsl:text disable-output-escaping="yes">"nodeID":"</xsl:text>
658                    <xsl:value-of select="@nodeID"/>
659                    <xsl:text disable-output-escaping="yes">",</xsl:text>
660                    <xsl:text disable-output-escaping="yes">"title":"</xsl:text>
661                    <xsl:value-of disable-output-escaping="yes" select="metadataList/metadata[@name = 'Title']"/>
662                    <xsl:text disable-output-escaping="yes">",</xsl:text>
663                    <xsl:text disable-output-escaping="yes">"lat":</xsl:text>
664                    <xsl:value-of disable-output-escaping="yes" select="metadataList/metadata[@name = 'Latitude']"/>
665                    <xsl:text>,</xsl:text>
666                    <xsl:text disable-output-escaping="yes">"lng":</xsl:text>
667                    <xsl:value-of disable-output-escaping="yes" select="metadataList/metadata[@name = 'Longitude']"/>
668                    <xsl:text>}</xsl:text>
669                    <xsl:if test="not(position() = count(//documentNode))">
670                        <xsl:text>,</xsl:text>
671                    </xsl:if>
672                </xsl:if>
673            </xsl:for-each>
674            <xsl:text>]</xsl:text>
675        </div>
676
677        <div id="map_canvas" style="margin:0px auto; width:450px; height:500px; float:right;">
678            <xsl:text> </xsl:text>
679        </div>
680
681        <!-- Although these aren't visible, they are necessary because it forces Greenstone to include this metadata in the page xml -->
682        <gsf:metadata name="Latitude" hidden="true"/>
683        <gsf:metadata name="Longitude" hidden="true"/>
684        <gsf:metadata name="Image" hidden="true"/>
685        <gsf:metadata name="SourceFile" hidden="true"/>
686                <gsf:metadata name="assocfilepath" hidden="true"/>
687        <gsf:metadata name="PhotoType" hidden="true"/>
688        <gsf:metadata name="cv.rotation" hidden="true"/>
689        <gsf:metadata name="Angle" hidden="true"/>
690
691
692    </xsl:template>
693
694    <xsl:template name="mapFeaturesIcon">
695        <td style="padding-left:5px; padding-right:5px;" valign="top">
696            <a href="javascript:focusDocument('{@nodeID}');">
697                <img src="interfaces/default/images/map_marker.png"/>
698            </a>
699        </td>
700    </xsl:template>
701
702    <xsl:template name="panoramaViewerFeaturesIcon">
703                <td style="padding-left:5px; padding-right:5px;" valign="top">
704                        <a href="javascript:switchPanorama('{@nodeID}');">
705                                <img src="interfaces/default/images/map_marker.png"/>
706                        </a>
707                </td>
708        </xsl:template>
709</xsl:stylesheet>
Note: See TracBrowser for help on using the browser.