source: main/trunk/greenstone3/web/interfaces/default/transform/layouts/toc.xsl@ 31520

Last change on this file since 31520 was 31520, checked in by kjdon, 7 years ago

a couple of small but significant changes. when getting the table of contents and using excerptid, just use ec=1 (expand contents) rather than ed=1 (expand document). the prevents us having to retrieve all the text sections of the document just to get the table of contents out. add the expand document and collapse document links into the toc when ed=1 or ec=1. they weren't there before. So then we don't need to add them to toc after retrieving toc, as they are already present. Lastly, changed the expand and collapse doc links to be standard html links - a full reload of the document - rather than javascript. HOpefully this will mean that google can follow these links and index the pages. need to test this out as the toc is not part of the original page source.

  • Property svn:executable set to *
File size: 18.1 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 <xsl:template name="rightSidebar">
12 <div id="rightSidebar">
13 <xsl:choose>
14 <xsl:when test="@docType = 'simple'">
15 <xsl:for-each select=".">
16 <xsl:call-template name="displayCoverImage"/>
17 </xsl:for-each>
18 <xsl:call-template name="viewOptions"/>
19 <!--<xsl:text> </xsl:text>-->
20 </xsl:when>
21 <xsl:otherwise>
22 <xsl:for-each select="documentNode[1]">
23 <xsl:call-template name="displayCoverImage"/>
24 </xsl:for-each>
25 <xsl:call-template name="viewOptions"/>
26 <xsl:call-template name="displayTOC"/>
27 </xsl:otherwise>
28 </xsl:choose>
29 </div>
30 </xsl:template>
31
32 <!-- this is called in the context of the top level node with the metadataList. For a simple doc, this is the document node. For a comples document, this is the first documentNode hcild of the document node. -->
33 <xsl:template name="displayCoverImage">
34 <xsl:variable name="hasCover"><gsf:metadata name="hascover"/></xsl:variable>
35 <xsl:if test="$hasCover = '1' and (not(/page/pageResponse/format[@type='display']/gsf:option[@name='coverImage']) or /page/pageResponse/format[@type='display']/gsf:option[@name='coverImage']/@value='true')">
36 <!-- the book's cover image -->
37 <div id="coverImage">
38 <img>
39 <xsl:attribute name="src"><xsl:value-of select="$httpPath"/>/index/assoc/<gsf:metadata name="assocfilepath" pos="1"/>/cover.jpg</xsl:attribute>
40 </img><xsl:text> </xsl:text>
41 </div>
42 </xsl:if>
43 </xsl:template>
44
45 <xsl:template name="displayTOC">
46 <xsl:if test="not(/page/pageResponse/format[@type='display']/gsf:option[@name='TOC']) or /page/pageResponse/format[@type='display']/gsf:option[@name='TOC']/@value='true'">
47 <div class="tableOfContentsContainer ui-state-default">
48 <table class="tocTable ui-widget-content">
49 <tr>
50 <td id="unfloatTOCButton" style="display:none;">
51 <a href="javascript:floatMenu(false);">
52 <img class="icon" style="padding-top:3px;">
53 <xsl:attribute name="src">
54 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'left_arrow_image')"/>
55 </xsl:attribute>
56 </img>
57 </a>
58 </td>
59 <td style="vertical-align:top; text-align:right;">
60 <a id="sidebarMinimizeButton" href="javascript:minimizeSidebar();" style="float: right; font-size:0.6em;">
61 <img class="icon" style="padding-top:3px;">
62 <xsl:attribute name="src">
63 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'collapse_image')"/>
64 </xsl:attribute>
65 </img>
66 </a>
67 <a id="sidebarMaximizeButton" href="javascript:maximizeSidebar();" style="float: right; font-size:0.6em; display:none;">
68 <img class="icon" style="padding-top:3px;">
69 <xsl:attribute name="src">
70 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'expand_image')"/>
71 </xsl:attribute>
72 </img>
73 </a>
74 </td>
75 </tr>
76 <tr><td>
77 <div id="contentsArea">
78 <!-- show the berry basket if it's turned on -->
79 <gslib:berryBasket/>
80
81 <!-- the contents (if enabled) -->
82 <xsl:choose>
83 <xsl:when test="/page/pageResponse/document/@docType = 'paged' or /page/pageResponse/document/@docType = 'pagedhierarchy'">
84 <gsf:image type="Thumb"/>
85 <!-- Table of contents will be dynamically retrieved when viewing a paged document -->
86 <script type="text/javascript">
87 <xsl:text disable-output-escaping="yes">
88 $(window).load(function()
89 {
90 retrieveTableOfContentsAndTitles();
91 <!--setUpFilterButtons();-->
92 });
93 </xsl:text>
94 </script>
95 <div id="tableOfContents"><xsl:text> </xsl:text></div>
96 <div id="tocLoadingImage" style="text-align:center;">
97 <img src="{util:getInterfaceText($interface_name, /page/@lang, 'loading_image')}"/><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.loading')"/><xsl:text>...</xsl:text>
98 </div>
99 <label for="filterText"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.filter_pages')"/><xsl:text>: </xsl:text></label><span id="filterOnButtons" style="float: right;">...</span><input id="filterText" type="text" style="width: 100%;"/>
100 <xsl:if test="/page/pageRequest/userInformation and /page/pageRequest/userInformation/@editEnabled = 'true'">
101 <a href="javascript:extractFilteredPagesToOwnDocument();"><button id="extractDocButton"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'de.extract_pages')"/></button></a>
102 </xsl:if>
103
104 <!-- <table style="width:100%;"><tbody><tr>
105 <td><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.filter_pages')"/><xsl:text>: </xsl:text><input id="filterText" type="text"/></td>
106 </tr>
107 <xsl:if test="/page/pageRequest/userInformation and /page/pageRequest/userInformation/@editEnabled = 'true'">
108 <tr><td><a href="javascript:extractFilteredPagesToOwnDocument();"><button id="extractDocButton">Extract these pages to document</button></a></td></tr>
109 </xsl:if>
110 </tbody></table>-->
111 </xsl:when>
112 <xsl:when test="not(/page/pageRequest/paramList/param[@name = 'ed']/@value = '1' or /page/pageRequest/paramList/param[@name = 'ec']/@value = '1')">
113 <div id="tableOfContents">
114 <div id="tocLoadingImage" style="text-align:center;">
115 <img src="{util:getInterfaceText($interface_name, /page/@lang, 'loading_image')}"/><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.loading')"/><xsl:text>...</xsl:text>
116 </div>
117 </div>
118 <script type="text/javascript">
119 <xsl:text disable-output-escaping="yes">
120 $(window).load(function()
121 {
122 retrieveFullTableOfContents();
123 });
124 </xsl:text>
125 </script>
126 </xsl:when>
127 <xsl:otherwise>
128 <!-- *TODO *********-->
129 <xsl:variable name="doc_url"><xsl:value-of select='$library_name'/>/collection/<xsl:value-of select='/page/pageResponse/collection/@name'/>/document/<xsl:value-of select='/page/pageResponse/document/documentNode/@nodeID'/>?<!--<xsl:value-of select='/page/pageRequest/@fullURL'/>--></xsl:variable>
130 <div id="tableOfContents">
131 <xsl:attribute name="class">
132 <xsl:choose>
133 <xsl:when test="count(//documentNode) > 1">visible</xsl:when>
134 <xsl:otherwise>hidden</xsl:otherwise>
135 </xsl:choose>
136 </xsl:attribute>
137 <table style="width:100%; text-align:center;"><tr><td><a href="{$doc_url}ed=1"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.expand_doc')"/></a></td><td><a href="{$doc_url}ed=0\"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.collapse_doc')"/></a></td></tr></table>
138 <xsl:for-each select="documentNode">
139 <xsl:call-template name="documentNodeTOC"/>
140 </xsl:for-each>
141 </div>
142 </xsl:otherwise>
143 </xsl:choose>
144 </div>
145 </td></tr>
146 </table>
147 </div>
148 </xsl:if>
149 </xsl:template>
150
151 <!-- This template is used to display the table of contents -->
152 <xsl:template name="documentNodeTOC">
153
154 <!-- check if this is the currently selected table of contents item -->
155 <xsl:variable name="isCurrent" select="nodeContent"/>
156
157 <!-- formulate the link -->
158 <xsl:variable name="contentsLink">
159 <xsl:value-of select='$library_name'/>?a=d&amp;c=<gslib:collectionNameShort/>&amp;d=<xsl:value-of select='@nodeID'/><xsl:if test="documentNode">.pr</xsl:if>&amp;sib=1
160 </xsl:variable>
161
162 <ul>
163 <table><tr>
164 <!-- The expand/collapse button (not displayed for the top level node) -->
165 <xsl:if test="util:hashToDepthClass(@nodeID) != 'sectionHeaderDepthTitle'">
166 <td>
167 <xsl:choose>
168 <xsl:when test="not(nodeContent and not(documentNode))">
169 <img id="ttoggle{@nodeID}" onclick="toggleSection('{@nodeID}');" class="icon">
170 <xsl:attribute name="src">
171 <xsl:choose>
172 <xsl:when test="/page/pageRequest/paramList/param[@name = 'ed']/@value = '1' or /page/pageResponse/document/@selectedNode = @nodeID">
173 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'collapse_image')"/>
174 </xsl:when>
175 <xsl:otherwise>
176 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'expand_image')"/>
177 </xsl:otherwise>
178 </xsl:choose>
179 </xsl:attribute>
180 </img>
181 </xsl:when>
182 <xsl:otherwise>
183 <xsl:attribute name="class">emptyIcon</xsl:attribute>
184 </xsl:otherwise>
185 </xsl:choose>
186 </td>
187 </xsl:if>
188
189 <!-- The chapter/page icon -->
190 <td>
191 <img>
192 <xsl:if test="nodeContent and not(documentNode)">
193 <xsl:attribute name="class">leafNode</xsl:attribute>
194 </xsl:if>
195
196 <xsl:attribute name="src">
197 <xsl:choose>
198 <xsl:when test="nodeContent and not(documentNode)">
199 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'page_image')"/>
200 </xsl:when>
201 <xsl:otherwise>
202 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'chapter_image')"/>
203 </xsl:otherwise>
204 </xsl:choose>
205 </xsl:attribute>
206 </img>
207 </td>
208
209 <!-- The section name, links to the section in the document -->
210 <td class="tocTextCell">
211 <a id="toclink{@nodeID}" href="javascript:focusSection('{@nodeID}');">
212 <xsl:if test="util:hashToSectionId(@nodeID)">
213 <span class="tocSectionNumber"><xsl:value-of select="util:hashToSectionId(@nodeID)"/><!--<xsl:text> </xsl:text>--></span></xsl:if><span class="tocSectionTitle"><xsl:call-template name="sectionHeading"/></span></a>
214
215 </td>
216 </tr></table>
217
218 <!-- display any child items -->
219 <xsl:if test="documentNode">
220 <li id="toc{@nodeID}">
221 <xsl:attribute name="style">
222 <xsl:choose>
223 <xsl:when test="/page/pageRequest/paramList/param[@name = 'ed']/@value = '1' or /page/pageResponse/document/@selectedNode = @nodeID">
224 <xsl:text>display:block;</xsl:text>
225 </xsl:when>
226 <xsl:otherwise>
227 <xsl:text>display:none;</xsl:text>
228 </xsl:otherwise>
229 </xsl:choose>
230 </xsl:attribute>
231 <xsl:for-each select="documentNode">
232 <xsl:call-template name="documentNodeTOC"/>
233 </xsl:for-each>
234 </li>
235 </xsl:if>
236
237 </ul>
238 </xsl:template>
239
240 <xsl:template name="viewOptions">
241 <div id="viewAndZoomOptions" class="ui-state-default ui-corner-all">
242 <ul id="viewOptions">
243 <!-- Paged-image document options -->
244 <xsl:if test="count(//documentNode/metadataList/metadata[@name = 'Screen']) > 0 or /page/pageResponse/document/@docType = 'paged' or /page/pageResponse/document/@docType = 'pagedhierarchy'">
245 <!-- view selection option -->
246 <xsl:if test="not(/page/pageResponse/format[@type='display']/gsf:option[@name='ViewSelection']) or /page/pageResponse/format[@type='display']/gsf:option[@name='ViewSelection']/@value='true'">
247 <li id="pagedImageOptions">
248 <select id="viewSelection" onchange="changeView();">
249 <xsl:choose>
250 <xsl:when test="/page/pageRequest/paramList/param[@name = 'view']/@value = 'image'">
251 <option><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.default_view')"/></option>
252 <option selected="true"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.image_view')"/></option>
253 <option><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.text_view')"/></option>
254 </xsl:when>
255 <xsl:when test="/page/pageRequest/paramList/param[@name = 'view']/@value = 'text'">
256 <option><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.default_view')"/></option>
257 <option><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.image_view')"/></option>
258 <option selected="true"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.text_view')"/></option>
259 </xsl:when>
260 <xsl:otherwise>
261 <option selected="true"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.default_view')"/></option>
262 <option><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.image_view')"/></option>
263 <option><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.text_view')"/></option>
264 </xsl:otherwise>
265 </xsl:choose>
266 </select>
267 </li>
268 </xsl:if>
269 <!-- Slide-show options -->
270 <xsl:if test="not(/page/pageResponse/format[@type='display']/gsf:option[@name='SlideShow']) or /page/pageResponse/format[@type='display']/gsf:option[@name='SlideShow']/@value='true'">
271 <li id="slideShowOptions">
272 <xsl:attribute name="title"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.slideshowTooltip')"/></xsl:attribute>
273 <img onclick="showSlideShow()">
274 <xsl:attribute name="src"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'slideshow_image')"/></xsl:attribute>
275 </img>
276 </li>
277 </xsl:if>
278 </xsl:if>
279 <!-- Realistic books link -->
280 <xsl:if test="/page/pageResponse/collection[@name = $collName]/metadataList/metadata[@name = 'tidyoption'] = 'tidy'">
281 <li>
282 <xsl:attribute name="title"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.realisticBooksTooltip')"/></xsl:attribute>
283 <img id="rbOptionImage" onclick="bookInit();">
284 <xsl:attribute name="src"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'realistic_books_image')"/></xsl:attribute>
285 </img>
286 <input id="rbOption" type="checkbox" onclick="bookInit();" class="optionCheckBox"/>
287 </li>
288 </xsl:if>
289
290 <!-- Highlight on/off button -->
291 <xsl:if test="util:contains(/page/pageRequest/paramList/param[@name = 'p.s']/@value, 'Query') and not(metadataList/metadata[@name='NoText']) and not(/page/pageResponse/format[@type='display']/gsf:option[@name='disableSearchTermHighlighting']/@value='true')">
292 <li>
293 <xsl:attribute name="title"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.highlightTooltip')"/></xsl:attribute>
294 <img onclick="swapHighlight(true);">
295 <xsl:attribute name="src"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'highlight_image')"/></xsl:attribute>
296 </img>
297 <input id="highlightOption" type="checkbox" class="optionCheckBox" onclick="swapHighlight(false);">
298 <xsl:if test="not(/page/pageRequest/paramList/param[@name = 'hl']/@value = 'off')">
299 <xsl:attribute name="checked">checked</xsl:attribute>
300 </xsl:if>
301 </input>
302 </li>
303 </xsl:if><xsl:text> </xsl:text>
304
305 <!-- Zoom on/off button -->
306 <li id="zoomOptions" style="display:none;">
307 <xsl:attribute name="title"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.zoomTooltip')"/></xsl:attribute>
308 <img id="zoomToggleImage">
309 <xsl:attribute name="src"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'zoom_image')"/></xsl:attribute>
310 </img>
311 <input id="zoomToggle" type="checkbox"/>
312 <script type="text/javascript">
313 <xsl:text disable-output-escaping="yes">
314 $("#zoomToggle").change(function()
315 {
316 _imageZoomEnabled = $("#zoomToggle").prop("checked");
317 });
318
319 $("#zoomToggleImage").click(function()
320 {
321 $("#zoomToggle").prop("checked", !$("#zoomToggle").prop("checked"));
322 _imageZoomEnabled = $("#zoomToggle").prop("checked");
323 });
324 </xsl:text>
325 </script>
326 </li>
327
328 <!-- Floating TOC on/off button -->
329 <xsl:if test="count(//documentNode) > 0 and (not(/page/pageResponse/format[@type='display']/gsf:option[@name='TOC']) or /page/pageResponse/format[@type='display']/gsf:option[@name='TOC']/@value='true')">
330 <li id="floatingTOCOptions">
331 <xsl:attribute name="title"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.floatingTooltip')"/></xsl:attribute>
332 <img id="floatTOCToggleImage">
333 <xsl:attribute name="src"><xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'float_toc_image')"/></xsl:attribute>
334 </img>
335 <input id="floatTOCToggle" type="checkbox"/>
336 <script type="text/javascript">
337 <xsl:text disable-output-escaping="yes">
338 $("#floatTOCToggle").prop("checked", false);
339 $("#floatTOCToggle").click(function()
340 {
341 floatMenu($("#floatTOCToggle").prop("checked"));
342 });
343
344 $("#floatTOCToggleImage").click(function()
345 {
346 $("#floatTOCToggle").prop("checked", !$("#floatTOCToggle").prop("checked"))
347 floatMenu($("#floatTOCToggle").prop("checked"));
348 });
349 </xsl:text>
350 </script>
351 </li>
352 <xsl:if test="/page/pageRequest/paramList/param[@name='ftoc']/@value = '1'">
353 <script type="text/javascript">
354 <xsl:text disable-output-escaping="yes">
355 $(window).load(function()
356 {
357 $("#floatTOCToggle").prop("checked", true);
358 floatMenu(true);
359 });
360 </xsl:text>
361 </script>
362 </xsl:if>
363 </xsl:if>
364 </ul>
365 <div style="clear:both;"><xsl:text> </xsl:text></div>
366 </div>
367 </xsl:template>
368</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.