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

Last change on this file since 29400 was 29400, checked in by kjdon, 10 years ago

simple docs may have a cover image, eg a text file with a picture associated. And text files may want to have highlighting options. cleaned up the viewoptions so that we don't get hidden list items. don't output the list item if its not appropriate for the doc type.

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