5 <xsl:stylesheet version="1.0"
6 xmlns:marc="http://www.loc.gov/MARC21/slim"
7 xmlns:items="http://www.koha-community.org/items"
8 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
9 xmlns:str="http://exslt.org/strings"
10 exclude-result-prefixes="marc items str">
12 <xsl:template name="datafield">
13 <xsl:param name="tag"/>
14 <xsl:param name="ind1"><xsl:text> </xsl:text></xsl:param>
15 <xsl:param name="ind2"><xsl:text> </xsl:text></xsl:param>
16 <xsl:param name="subfields"/>
17 <xsl:element name="datafield">
18 <xsl:attribute name="tag">
19 <xsl:value-of select="$tag"/>
21 <xsl:attribute name="ind1">
22 <xsl:value-of select="$ind1"/>
24 <xsl:attribute name="ind2">
25 <xsl:value-of select="$ind2"/>
27 <xsl:copy-of select="$subfields"/>
31 <xsl:template name="tag_210-214">
33 <xsl:when test="marc:datafield[@tag=210] and marc:datafield[@tag=214]">
34 <xsl:call-template name="tag_214" />
36 <xsl:when test="marc:datafield[@tag=214]">
37 <xsl:call-template name="tag_214" />
39 <xsl:when test="marc:datafield[@tag=210]">
40 <xsl:call-template name="tag_210" />
45 <xsl:template name="tag_210">
46 <span class="results_summary publication">
47 <span class="label">Publication: </span>
48 <xsl:for-each select="marc:datafield[@tag=210]">
49 <xsl:if test="not(position() = 1)">
53 <xsl:call-template name="addClassRtl" />
54 <xsl:for-each select="marc:subfield[@code='a' or @code='b' or @code='c' or @code='d' or @code='g']">
56 <xsl:when test="@code='a'">
57 <xsl:value-of select="."/>
58 <xsl:if test="position() != last()">
59 <xsl:text> : </xsl:text>
62 <xsl:when test="@code='b'">
63 <xsl:value-of select="."/>
64 <xsl:if test="position() != last()">
65 <xsl:text>, </xsl:text>
68 <xsl:when test="@code='c' or @code='g'">
70 <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=pb:<xsl:value-of select="str:encode-uri(., true())"/></xsl:attribute>
71 <xsl:attribute name="title">Search for publisher</xsl:attribute>
72 <xsl:value-of select="."/>
74 <xsl:if test="position() != last()">
75 <xsl:text>, </xsl:text>
78 <xsl:when test="@code='d'">
79 <xsl:value-of select="."/>
80 <xsl:if test="position() != last()">
81 <xsl:text>, </xsl:text>
91 <xsl:template name="tag_214">
92 <xsl:for-each select="marc:datafield[@tag=214]">
93 <xsl:sort select="@ind2" data-type="number" />
94 <span class="results_summary publication">
97 <xsl:when test="@ind2=1">Production: </xsl:when>
98 <xsl:when test="@ind2=2">Distribution: </xsl:when>
99 <xsl:when test="@ind2=3">Manufacture: </xsl:when>
100 <xsl:when test="@ind2=4">
102 <xsl:when test="substring(marc:subfield[@code='d'],1,1)='C'">Copyright date: </xsl:when>
103 <xsl:when test="substring(marc:subfield[@code='d'],1,1)='P'">Protection date: </xsl:when>
104 <xsl:otherwise>Copyright date / protection date: </xsl:otherwise>
107 <xsl:otherwise>Publication: </xsl:otherwise>
111 <xsl:call-template name="addClassRtl" />
112 <xsl:for-each select="marc:subfield">
114 <xsl:when test="@code='a'">
115 <xsl:value-of select="."/>
116 <xsl:if test="position() != last()">
117 <xsl:text> : </xsl:text>
120 <xsl:when test="@code='b'">
121 <xsl:value-of select="."/>
122 <xsl:if test="position() != last()">
123 <xsl:text>, </xsl:text>
126 <xsl:when test="@code='c'">
128 <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=pb:<xsl:value-of select="str:encode-uri(., true())"/></xsl:attribute>
129 <xsl:attribute name="title">Search for publisher</xsl:attribute>
130 <xsl:value-of select="."/>
133 <xsl:when test="@code='d'">
134 <xsl:if test="not(position()=1)">
135 <xsl:text>, </xsl:text>
138 <xsl:when test="substring(.,1,1)='C'">
139 <xsl:value-of select="substring(.,2)"/>
141 <xsl:when test="substring(.,1,1)='P'">
142 <xsl:value-of select="substring(.,2)"/>
145 <xsl:value-of select="."/>
154 <xsl:call-template name="tag_214_r" />
155 <xsl:call-template name="tag_214_s" />
158 <xsl:template name="tag_214_s">
159 <xsl:if test="marc:datafield[@tag=214]/marc:subfield[@code='s']">
160 <span class="results_summary tag_214_s">
161 <span class="label">Printing and/or Publishing Information Transcribed as Found in the Colophon: </span>
162 <xsl:for-each select="marc:datafield[@tag=214]/marc:subfield[@code='s']">
163 <xsl:value-of select="."/>
165 <xsl:when test="position()=last()">
166 <xsl:text>.</xsl:text>
169 <xsl:text>, </xsl:text>
177 <xsl:template name="tag_214_r">
178 <xsl:if test="marc:datafield[@tag=214]/marc:subfield[@code='r']">
179 <span class="results_summary tag_214_r">
180 <span class="label">Printing and/or Publishing Information Transcribed as Found in the Main Source of Information: </span>
181 <xsl:for-each select="marc:datafield[@tag=214]/marc:subfield[@code='r']">
182 <xsl:value-of select="."/>
184 <xsl:when test="position()=last()">
185 <xsl:text>.</xsl:text>
188 <xsl:text>, </xsl:text>
196 <xsl:template name="tag_215">
197 <xsl:for-each select="marc:datafield[@tag=215]">
198 <span class="results_summary description">
199 <span class="label">Description: </span>
200 <xsl:if test="marc:subfield[@code='a']">
201 <xsl:value-of select="marc:subfield[@code='a']"/>
203 <xsl:if test="marc:subfield[@code='c']"> :
204 <xsl:value-of select="marc:subfield[@code='c']"/>
206 <xsl:if test="marc:subfield[@code='d']"> ;
207 <xsl:value-of select="marc:subfield[@code='d']"/>
209 <xsl:if test="marc:subfield[@code='e']"> +
210 <xsl:value-of select="marc:subfield[@code='e']"/>
216 <xsl:template name="tag_4xx">
217 <xsl:for-each select="marc:datafield[@tag=464 or @tag=461]">
218 <span class="results_summary linked_with">
219 <span class="label">Linked with: </span>
221 <xsl:call-template name="addClassRtl" />
222 <xsl:if test="marc:subfield[@code='t']">
223 <xsl:value-of select="marc:subfield[@code='t']"/>
225 <xsl:if test="marc:subfield[@code='e']"> :
226 <xsl:value-of select="marc:subfield[@code='e']"/>
228 <xsl:if test="marc:subfield[@code='f']"> /
229 <xsl:value-of select="marc:subfield[@code='f']"/>
231 <xsl:if test="marc:subfield[@code='v']">,
232 <xsl:value-of select="marc:subfield[@code='v']"/>
239 <xsl:template name="subfieldSelect">
240 <xsl:param name="codes"/>
241 <xsl:param name="delimeter"><xsl:text> </xsl:text></xsl:param>
242 <xsl:param name="subdivCodes"/>
243 <xsl:param name="subdivDelimiter"/>
244 <xsl:param name="urlencode"/>
245 <xsl:variable name="str">
246 <xsl:for-each select="marc:subfield">
247 <xsl:if test="contains($codes, @code)">
248 <xsl:if test="contains($subdivCodes, @code)">
249 <xsl:value-of select="$subdivDelimiter"/>
251 <xsl:value-of select="text()"/><xsl:value-of select="$delimeter"/>
256 <xsl:when test="$urlencode=1">
257 <xsl:value-of select="str:encode-uri(substring($str,1,string-length($str)-string-length($delimeter)), true())"/>
260 <xsl:value-of select="substring($str,1,string-length($str)-string-length($delimeter))"/>
265 <xsl:template name="buildSpaces">
266 <xsl:param name="spaces"/>
267 <xsl:param name="char"><xsl:text> </xsl:text></xsl:param>
268 <xsl:if test="$spaces>0">
269 <xsl:value-of select="$char"/>
270 <xsl:call-template name="buildSpaces">
271 <xsl:with-param name="spaces" select="$spaces - 1"/>
272 <xsl:with-param name="char" select="$char"/>
277 <xsl:template name="buildBiblioDefaultViewURL">
278 <xsl:param name="IntranetBiblioDefaultView"/>
280 <xsl:when test="$IntranetBiblioDefaultView='normal'">
281 <xsl:text>/cgi-bin/koha/catalogue/detail.pl?biblionumber=</xsl:text>
283 <xsl:when test="$IntranetBiblioDefaultView='isbd'">
284 <xsl:text>/cgi-bin/koha/catalogue/ISBDdetail.pl?biblionumber=</xsl:text>
286 <xsl:when test="$IntranetBiblioDefaultView='labeled_marc'">
287 <xsl:text>/cgi-bin/koha/catalogue/labeledMARCdetail.pl?biblionumber=</xsl:text>
289 <xsl:when test="$IntranetBiblioDefaultView='marc'">
290 <xsl:text>/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=</xsl:text>
293 <xsl:text>/cgi-bin/koha/catalogue/detail.pl?biblionumber=</xsl:text>
298 <xsl:template name="chopSpecialCharacters">
299 <xsl:param name="title" />
300 <xsl:variable name="ntitle"
301 select="translate($title, '˜œ슜슛슘슈슉','')"/>
302 <xsl:value-of select="$ntitle" />
306 <xsl:template name="chopPunctuation">
307 <xsl:param name="chopString"/>
308 <xsl:variable name="length" select="string-length($chopString)"/>
310 <xsl:when test="$length=0"/>
311 <xsl:when test="contains('.:,;/ ', substring($chopString,$length,1))">
312 <xsl:call-template name="chopPunctuation">
313 <xsl:with-param name="chopString" select="substring($chopString,1,$length - 1)"/>
316 <xsl:when test="not($chopString)"/>
317 <xsl:otherwise><xsl:value-of select="$chopString"/></xsl:otherwise>
319 <xsl:text> </xsl:text>
322 <xsl:template name="addClassRtl">
323 <xsl:variable name="lang" select="marc:subfield[@code='7']" />
324 <xsl:if test="$lang = 'ha' or $lang = 'Hebrew' or $lang = 'fa' or $lang = 'Arabe'">
325 <xsl:attribute name="class">rtl</xsl:attribute>
329 <xsl:template name="tag_title">
330 <xsl:param name="tag" />
331 <xsl:param name="label" />
332 <xsl:param name="spanclass" />
333 <xsl:if test="marc:datafield[@tag=$tag]">
334 <span class="results_summary {$spanclass}">
336 <xsl:value-of select="$label"/>
337 <xsl:text>: </xsl:text>
339 <xsl:for-each select="marc:datafield[@tag=$tag]">
340 <xsl:value-of select="marc:subfield[@code='a']" />
341 <xsl:if test="marc:subfield[@code='d']">
342 <xsl:text> : </xsl:text>
343 <xsl:value-of select="marc:subfield[@code='e']"/>
345 <xsl:if test="marc:subfield[@code='e']">
346 <xsl:for-each select="marc:subfield[@code='e']">
347 <xsl:text> </xsl:text>
348 <xsl:value-of select="."/>
351 <xsl:if test="marc:subfield[@code='f']">
352 <xsl:text> / </xsl:text>
353 <xsl:value-of select="marc:subfield[@code='f']"/>
355 <xsl:if test="marc:subfield[@code='h']">
356 <xsl:text>, </xsl:text>
357 <xsl:value-of select="marc:subfield[@code='h']"/>
359 <xsl:if test="marc:subfield[@code='i']">
360 <xsl:text>, </xsl:text>
361 <xsl:value-of select="marc:subfield[@code='i']"/>
363 <xsl:if test="marc:subfield[@code='v']">
364 <xsl:text>, </xsl:text>
365 <xsl:value-of select="marc:subfield[@code='v']"/>
367 <xsl:if test="marc:subfield[@code='x']">
368 <xsl:text>, </xsl:text>
369 <xsl:value-of select="marc:subfield[@code='x']"/>
371 <xsl:if test="marc:subfield[@code='z']">
372 <xsl:text>, </xsl:text>
373 <xsl:value-of select="marc:subfield[@code='z']"/>
380 <xsl:template name="tag_subject">
381 <xsl:param name="tag" />
382 <xsl:param name="label" />
383 <xsl:param name="spanclass"/>
384 <xsl:if test="marc:datafield[@tag=$tag]">
385 <span class="results_summary subjects {$spanclass}">
387 <xsl:value-of select="$label"/>
388 <xsl:text>: </xsl:text>
390 <xsl:for-each select="marc:datafield[@tag=$tag]">
393 <xsl:when test="marc:subfield[@code=9]">
394 <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=an:<xsl:value-of select="str:encode-uri(marc:subfield[@code=9], true())"/></xsl:attribute>
397 <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=su:<xsl:value-of select="str:encode-uri(marc:subfield[@code='a'], true())"/></xsl:attribute>
400 <xsl:call-template name="chopPunctuation">
401 <xsl:with-param name="chopString">
402 <xsl:call-template name="subfieldSelect">
403 <xsl:with-param name="codes">abcdjptvxyz</xsl:with-param>
404 <xsl:with-param name="subdivCodes">jpxyz</xsl:with-param>
405 <xsl:with-param name="subdivDelimiter">-- </xsl:with-param>
410 <xsl:if test="not (position()=last())">
411 <xsl:text> | </xsl:text>
418 <xsl:template name="tag_7xx">
419 <xsl:param name="tag" />
420 <xsl:param name="label" />
421 <xsl:param name="spanclass" />
422 <xsl:if test="marc:datafield[@tag=$tag]">
423 <span class="results_summary author {$spanclass}">
425 <xsl:value-of select="$label" />
426 <xsl:text>: </xsl:text>
429 <xsl:for-each select="marc:datafield[@tag=$tag]">
430 <xsl:call-template name="addClassRtl" />
433 <xsl:when test="marc:subfield[@code=9]">
434 <xsl:attribute name="href">
435 <xsl:text>/cgi-bin/koha/catalogue/search.pl?q=an:</xsl:text>
436 <xsl:value-of select="str:encode-uri(marc:subfield[@code=9], true())"/>
440 <xsl:attribute name="href">
441 <xsl:text>/cgi-bin/koha/catalogue/search.pl?q=au:</xsl:text>
442 <xsl:value-of select="str:encode-uri(marc:subfield[@code='a'], true())"/>
443 <xsl:text>%20</xsl:text>
444 <xsl:value-of select="str:encode-uri(marc:subfield[@code='b'], true())"/>
448 <xsl:if test="marc:subfield[@code='a']">
449 <xsl:value-of select="marc:subfield[@code='a']"/>
451 <xsl:if test="marc:subfield[@code='b']">
452 <xsl:text>, </xsl:text>
453 <xsl:value-of select="marc:subfield[@code='b']"/>
455 <xsl:if test="marc:subfield[@code='c']">
456 <xsl:text>, </xsl:text>
457 <xsl:value-of select="marc:subfield[@code='c']"/>
459 <xsl:if test="marc:subfield[@code='d']">
460 <xsl:text> </xsl:text>
461 <xsl:value-of select="marc:subfield[@code='d']"/>
463 <xsl:if test="marc:subfield[@code='f']">
465 <xsl:text> (</xsl:text>
466 <xsl:value-of select="marc:subfield[@code='f']"/>
467 <xsl:text>)</xsl:text>
470 <xsl:if test="marc:subfield[@code='g']">
471 <xsl:text> </xsl:text>
472 <xsl:value-of select="marc:subfield[@code='g']"/>
474 <xsl:if test="marc:subfield[@code='p']">
475 <xsl:text> </xsl:text>
476 <xsl:value-of select="marc:subfield[@code='p']"/>
479 <xsl:if test="not (position() = last())">
480 <xsl:text> ; </xsl:text>