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

Last change on this file since 36145 was 36074, checked in by kjdon, 2 years ago

removing berrybasket option

  • Property svn:executable set to *
File size: 26.7 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
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:include href="../pages/document-shared.xsl" />
12
13 <xsl:template name="rightSidebarTOC">
14 <div id="rightSidebar">
15 <xsl:choose>
16 <xsl:when test="@docType = 'simple'">
17 <xsl:for-each select=".">
18 <xsl:call-template name="displayCoverImage"/>
19 </xsl:for-each>
20 <xsl:call-template name="viewOptions"/>
21 <!--<xsl:text> </xsl:text>-->
22 </xsl:when>
23 <xsl:otherwise>
24 <xsl:for-each select="documentNode[1]">
25 <xsl:call-template name="displayCoverImage"/>
26 </xsl:for-each>
27 <xsl:call-template name="viewOptions"/>
28 <xsl:call-template name="displayTOC"/>
29 </xsl:otherwise>
30 </xsl:choose>
31 </div>
32 </xsl:template>
33
34 <!-- 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. -->
35 <xsl:template name="displayCoverImage">
36 <xsl:variable name="hasCover">
37 <gsf:metadata name="hascover"/>
38 </xsl:variable>
39 <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')">
40 <!-- the book's cover image -->
41 <div id="coverImage">
42 <img>
43 <xsl:attribute name="src">
44 <xsl:value-of select="$httpPath"/>/index/assoc/<gsf:metadata name="assocfilepath" pos="1"/>/cover.jpg
45 </xsl:attribute>
46 </img>
47 <xsl:text> </xsl:text>
48 </div>
49 </xsl:if>
50 </xsl:template>
51
52 <xsl:template name="displayTOC">
53 <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'">
54 <div class="tableOfContentsContainer ui-state-default">
55 <table class="tocTable ui-widget-content">
56 <tr>
57 <td id="unfloatTOCButton" style="display:none;">
58 <a href="javascript:floatMenu(false);">
59 <img class="icon" style="padding-top:3px;">
60 <xsl:attribute name="src">
61 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'left_arrow_image')"/>
62 </xsl:attribute>
63 </img>
64 </a>
65 </td>
66 <td style="vertical-align:top; text-align:right;">
67 <a id="sidebarMinimizeButton" href="javascript:minimizeSidebar();" style="float: right; font-size:0.6em;">
68 <img class="icon" style="padding-top:3px;">
69 <xsl:attribute name="src">
70 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'collapse_image')"/>
71 </xsl:attribute>
72 </img>
73 </a>
74 <a id="sidebarMaximizeButton" href="javascript:maximizeSidebar();" style="float: right; font-size:0.6em; display:none;">
75 <img class="icon" style="padding-top:3px;">
76 <xsl:attribute name="src">
77 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'expand_image')"/>
78 </xsl:attribute>
79 </img>
80 </a>
81 </td>
82 </tr>
83 <tr>
84 <td id="tdContentsArea">
85 <div id="contentsArea">
86
87 <!-- this won't display anything if favourites are not on -->
88 <xsl:call-template name="gotoFavourites"/>
89
90 <!-- add in expand and contract document links -->
91 <xsl:call-template name="expandContractDocumentLinks"/>
92 <!-- dynamically get the contents (if enabled) -->
93 <xsl:choose>
94 <xsl:when test="/page/pageResponse/document/@docType = 'paged' or /page/pageResponse/document/@docType = 'pagedhierarchy'">
95 <gsf:image type="Thumb"/>
96 <!-- Table of contents will be dynamically retrieved when viewing a paged document -->
97 <script type="text/javascript">
98 <xsl:text disable-output-escaping="yes">
99 $(window).on("load", function()
100 {
101 retrieveTableOfContentsAndTitles();
102 <!--setUpFilterButtons();-->
103 });
104 </xsl:text>
105 </script>
106
107 <div id="tableOfContents">
108 <xsl:text> </xsl:text>
109 </div>
110
111 <div id="tocLoadingImage" style="text-align:center;">
112 <img src="{util:getInterfaceText($interface_name, /page/@lang, 'loading_image')}"/>
113 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.loading')"/>
114 <xsl:text>...</xsl:text>
115 </div>
116
117 <label for="filterText">
118 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.filter_pages')"/>
119 <xsl:text>: </xsl:text>
120 </label>
121 <span id="filterOnButtons" style="float: right;">...</span>
122 <input id="filterText" type="text" style="width: 100%;" />
123
124 <!-- <xsl:if test="/page/pageRequest/userInformation and /page/pageRequest/userInformation/@editEnabled = 'true'"> -->
125 <xsl:if test="/page/pageRequest/userInformation and /page/pageRequest/userInformation/@editEnabled = 'true' and /page/pageRequest/paramList/param[@name='docEdit']/@value = '1' 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))">
126 <a href="javascript:extractFilteredPagesToOwnDocument();">
127 <button id="extractDocButton">
128 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'de.extract_pages')"/>
129 </button>
130 </a>
131 </xsl:if>
132 </xsl:when>
133 <xsl:when test="not(/page/pageRequest/paramList/param[@name = 'ed']/@value = '1' or /page/pageRequest/paramList/param[@name = 'ec']/@value = '1')">
134 <div id="tableOfContents">
135 <div id="tocLoadingImage" style="text-align:center;">
136 <img src="{util:getInterfaceText($interface_name, /page/@lang, 'loading_image')}"/>
137 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.loading')"/>
138 <xsl:text>...</xsl:text>
139 </div>
140 </div>
141 <script type="text/javascript">
142 <xsl:text disable-output-escaping="yes">
143 $(window).on("load", function()
144 {
145 retrieveFullTableOfContents();
146 });
147 </xsl:text>
148 </script>
149 </xsl:when>
150 <xsl:otherwise>
151
152 <div id="tableOfContents">
153 <!-- if ed=1 or ec=1 then we have the complete section hierarchy in the page xml source, so we don't need an ajax call to get the table of contents, we just generate it from the list of nodes -->
154 <xsl:attribute name="class"> <!-- do we ever need this ?? -->
155 <xsl:choose>
156 <xsl:when test="count(//documentNode) > 1">visible</xsl:when>
157 <xsl:otherwise>hidden</xsl:otherwise>
158 </xsl:choose>
159 </xsl:attribute>
160
161 <xsl:for-each select="documentNode">
162 <xsl:call-template name="documentNodeTOC"/>
163 </xsl:for-each>
164 </div>
165 </xsl:otherwise>
166 </xsl:choose>
167 </div>
168 </td>
169 </tr>
170 </table>
171 </div>
172 </xsl:if>
173 </xsl:template>
174
175 <!-- This template is used to display the table of contents -->
176 <xsl:template name="documentNodeTOC">
177 <table>
178 <tr>
179 <!-- The expand/collapse button (not displayed for the top level node) -->
180 <xsl:if test="util:hashToDepthClass(@nodeID) != 'sectionHeaderDepthTitle'">
181 <td>
182 <xsl:choose>
183 <xsl:when test="documentNode">
184 <img id="ttoggle{@nodeID}" onclick="toggleSection('{@nodeID}');" class="icon">
185 <xsl:attribute name="src">
186 <xsl:choose>
187 <xsl:when test="/page/pageRequest/paramList/param[@name = 'ed']/@value = '1' or /page/pageResponse/document/@selectedNode = @nodeID">
188 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'collapse_image')"/>
189 </xsl:when>
190 <xsl:otherwise>
191 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'expand_image')"/>
192 </xsl:otherwise>
193 </xsl:choose>
194 </xsl:attribute>
195 </img>
196 </xsl:when>
197 <xsl:otherwise>
198 <xsl:attribute name="class">emptyIcon</xsl:attribute>
199
200 <!--
201 Prevent the <td> element being self-closed, which would be invalid according to the HTML spec.
202 This is also an identified issue in jQuery > 3.5.0
203 -->
204 <xsl:text> </xsl:text>
205 </xsl:otherwise>
206 </xsl:choose>
207 </td>
208 </xsl:if>
209
210 <!-- The chapter/page icon -->
211 <td>
212 <img>
213 <xsl:if test="not(documentNode)">
214 <xsl:attribute name="class">leafNode</xsl:attribute>
215 </xsl:if>
216
217 <xsl:attribute name="src">
218 <xsl:choose>
219 <xsl:when test="not(documentNode)">
220 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'page_image')"/>
221 </xsl:when>
222 <xsl:otherwise>
223 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'chapter_image')"/>
224 </xsl:otherwise>
225 </xsl:choose>
226 </xsl:attribute>
227 </img>
228 </td>
229
230 <!-- The section name, links to the section in the document -->
231 <td class="tocTextCell">
232 <a id="toclink{@nodeID}" href="javascript:focusSection('{@nodeID}');">
233 <xsl:if test="util:hashToSectionId(@nodeID)">
234 <span class="tocSectionNumber">
235 <xsl:value-of select="util:hashToSectionId(@nodeID)"/><!--<xsl:text> </xsl:text>-->
236 </span>
237 </xsl:if>
238 <span class="tocSectionTitle">
239 <xsl:call-template name="sectionHeading"/>
240 </span>
241 </a>
242 </td>
243 </tr>
244 </table>
245
246 <!-- display any child items -->
247 <xsl:if test="documentNode">
248 <div id="toc{@nodeID}">
249 <xsl:attribute name="style">
250 <xsl:choose>
251 <xsl:when test="/page/pageRequest/paramList/param[@name = 'ed']/@value = '1' or /page/pageResponse/document/@selectedNode = @nodeID">
252 <xsl:text>display:block;</xsl:text>
253 </xsl:when>
254 <xsl:otherwise>
255 <xsl:text>display:none;</xsl:text>
256 </xsl:otherwise>
257 </xsl:choose>
258 </xsl:attribute>
259 <xsl:for-each select="documentNode">
260 <xsl:call-template name="documentNodeTOC"/>
261 </xsl:for-each>
262 </div>
263 </xsl:if>
264 </xsl:template>
265
266 <xsl:template name="viewOptions">
267 <div id="viewAndZoomOptions" class="ui-state-default ui-corner-all">
268 <ul id="viewOptions">
269 <!-- Paged-image document options -->
270 <xsl:if test="count(//documentNode/metadataList/metadata[@name = 'Screen']) > 0 or /page/pageResponse/document/@docType = 'paged' or /page/pageResponse/document/@docType = 'pagedhierarchy'">
271 <!-- view selection option -->
272 <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'">
273 <li id="pagedImageOptions">
274 <select id="viewSelection" onchange="changeView();">
275 <xsl:choose>
276 <xsl:when test="/page/pageRequest/paramList/param[@name = 'view']/@value = 'image'">
277 <option>
278 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.default_view')"/>
279 </option>
280 <option selected="true">
281 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.image_view')"/>
282 </option>
283 <option>
284 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.text_view')"/>
285 </option>
286 </xsl:when>
287 <xsl:when test="/page/pageRequest/paramList/param[@name = 'view']/@value = 'text'">
288 <option>
289 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.default_view')"/>
290 </option>
291 <option>
292 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.image_view')"/>
293 </option>
294 <option selected="true">
295 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.text_view')"/>
296 </option>
297 </xsl:when>
298 <xsl:otherwise>
299 <option selected="true">
300 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.default_view')"/>
301 </option>
302 <option>
303 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.image_view')"/>
304 </option>
305 <option>
306 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.text_view')"/>
307 </option>
308 </xsl:otherwise>
309 </xsl:choose>
310 </select>
311 </li>
312 </xsl:if>
313
314 <!-- Slide-show options -->
315 <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'">
316 <li id="slideShowOptions">
317 <xsl:attribute name="title">
318 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.slideshowTooltip')"/>
319 </xsl:attribute>
320 <img onclick="showSlideShow()">
321 <xsl:attribute name="src">
322 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'slideshow_image')"/>
323 </xsl:attribute>
324 </img>
325 </li>
326 </xsl:if>
327 </xsl:if>
328 <!-- Realistic books link -->
329 <xsl:if test="/page/pageResponse/collection[@name = $collName]/metadataList/metadata[@name = 'tidyoption'] = 'tidy'">
330 <li>
331 <xsl:attribute name="title">
332 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.realisticBooksTooltip')"/>
333 </xsl:attribute>
334 <img id="rbOptionImage" onclick="bookInit();">
335 <xsl:attribute name="src">
336 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'realistic_books_image')"/>
337 </xsl:attribute>
338 </img>
339 <input id="rbOption" type="checkbox" onclick="bookInit();" class="optionCheckBox"/>
340 </li>
341 </xsl:if>
342
343 <!-- Highlight on/off button -->
344 <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')">
345 <li>
346 <xsl:attribute name="title">
347 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.highlightTooltip')"/>
348 </xsl:attribute>
349 <img onclick="swapHighlight(true);">
350 <xsl:attribute name="src">
351 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'highlight_image')"/>
352 </xsl:attribute>
353 </img>
354 <input id="highlightOption" type="checkbox" class="optionCheckBox" onclick="swapHighlight(false);">
355 <xsl:if test="not(/page/pageRequest/paramList/param[@name = 'hl']/@value = 'off')">
356 <xsl:attribute name="checked">checked</xsl:attribute>
357 </xsl:if>
358 </input>
359 </li>
360 </xsl:if>
361 <xsl:text> </xsl:text>
362
363 <!-- Zoom on/off button -->
364 <xsl:if test="not(/page/pageResponse/format[@type='display']/gsf:option[@name='disableZoom']) or /page/pageResponse/format[@type='display']/gsf:option[@name='disableZoom']/@value='false'">
365 <li id="zoomOptions" style="display:none;">
366 <xsl:attribute name="title">
367 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.zoomTooltip')"/>
368 </xsl:attribute>
369 <img id="zoomToggleImage">
370 <xsl:attribute name="src">
371 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'zoom_image')"/>
372 </xsl:attribute>
373 </img>
374 <input id="zoomToggle" type="checkbox"/>
375 <script type="text/javascript">
376 <xsl:text disable-output-escaping="yes">
377 $("#zoomToggle").change(function()
378 {
379 _imageZoomEnabled = $("#zoomToggle").prop("checked");
380 });
381
382 $("#zoomToggleImage").on("click", function()
383 {
384 $("#zoomToggle").prop("checked", !$("#zoomToggle").prop("checked"));
385 _imageZoomEnabled = $("#zoomToggle").prop("checked");
386 });
387 </xsl:text>
388 </script>
389 </li>
390 </xsl:if>
391
392 <!-- Floating TOC on/off button -->
393 <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')">
394 <xsl:call-template name="floatingTOCToggle" />
395 </xsl:if>
396 </ul>
397 <div style="clear:both;">
398 <xsl:text> </xsl:text>
399 </div>
400 </div>
401 </xsl:template>
402
403 <xsl:template name="floatingTOCToggle">
404 <li id="floatingTOCOptions">
405 <xsl:attribute name="title">
406 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'doc.floatingTooltip')"/>
407 </xsl:attribute>
408 <img id="floatTOCToggleImage">
409 <xsl:attribute name="src">
410 <xsl:value-of select="util:getInterfaceText($interface_name, /page/@lang, 'float_toc_image')"/>
411 </xsl:attribute>
412 </img>
413 <input id="floatTOCToggle" type="checkbox"/>
414 <script type="text/javascript">
415 <xsl:text disable-output-escaping="yes">
416 $("#floatTOCToggle").prop("checked", false);
417 $("#floatTOCToggle").on("click", function()
418 {
419 floatMenu($("#floatTOCToggle").prop("checked"));
420 });
421
422 $("#floatTOCToggleImage").on("click", function()
423 {
424 $("#floatTOCToggle").prop("checked", !$("#floatTOCToggle").prop("checked"))
425 floatMenu($("#floatTOCToggle").prop("checked"));
426 });
427 </xsl:text>
428 </script>
429 </li>
430 <xsl:if test="/page/pageRequest/paramList/param[@name='ftoc']/@value = '1'">
431 <script type="text/javascript">
432 <xsl:text disable-output-escaping="yes">
433 $(window).on("load", function()
434 {
435 $("#floatTOCToggle").prop("checked", true);
436 floatMenu(true);
437 });
438 </xsl:text>
439 </script>
440 </xsl:if>
441 </xsl:template>
442</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.