Merge branch 'bug_8557' into 3.12-master
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / xslt / UNIMARCslimUtils.xsl
1 <?xml version='1.0'?>
2
3 <!DOCTYPE stylesheet [<!ENTITY nbsp "&#160;" >]>
4
5 <xsl:stylesheet version="1.0"
6   xmlns:marc="http://www.loc.gov/MARC21/slim"
7   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
8   exclude-result-prefixes="marc items">
9
10   <xsl:template name="datafield">
11     <xsl:param name="tag"/>
12     <xsl:param name="ind1"><xsl:text> </xsl:text></xsl:param>
13     <xsl:param name="ind2"><xsl:text> </xsl:text></xsl:param>
14     <xsl:param name="subfields"/>
15     <xsl:element name="datafield">
16       <xsl:attribute name="tag">
17         <xsl:value-of select="$tag"/>
18       </xsl:attribute>
19       <xsl:attribute name="ind1">
20         <xsl:value-of select="$ind1"/>
21       </xsl:attribute>
22       <xsl:attribute name="ind2">
23        <xsl:value-of select="$ind2"/>
24          </xsl:attribute>
25        <xsl:copy-of select="$subfields"/>
26     </xsl:element>
27   </xsl:template>
28
29   <xsl:template name="tag_210">
30     <li>
31       <strong>Publication: </strong>
32       <xsl:for-each select="marc:datafield[@tag=210]">
33         <span>
34           <xsl:call-template name="addClassRtl" />
35           <xsl:value-of select="marc:subfield[@code='a']"/>
36           <xsl:if test="marc:subfield[@code='b']">
37             <xsl:if test="marc:subfield[@code='a']">, </xsl:if>
38             <xsl:value-of select="marc:subfield[@code='b']"/>
39           </xsl:if>
40           <xsl:if test="marc:subfield[@code='a' or @code='b']">
41             <xsl:if test="marc:subfield[@code='a']"> : </xsl:if>
42             <xsl:value-of select="marc:subfield[@code='c']"/>
43           </xsl:if>
44           <xsl:if test="marc:subfield[@code='d']">
45             <xsl:if test="marc:subfield[@code='a' or @code='c']">, </xsl:if>
46             <xsl:value-of select="marc:subfield[@code='d']"/>
47           </xsl:if>
48           <xsl:if test="marc:subfield[@code='e']">
49             <xsl:if test="marc:subfield[@code='a' or @code='c' or @code='d']"> — </xsl:if>
50             <xsl:value-of select="marc:subfield[@code='e']"/>
51           </xsl:if>
52           <xsl:if test="marc:subfield[@code='g']">
53             <xsl:if test="marc:subfield[@code='e']"> : </xsl:if>
54             <xsl:value-of select="marc:subfield[@code='g']"/>
55           </xsl:if>
56           <xsl:if test="marc:subfield[@code='h']">
57             <xsl:if test="marc:subfield[@code='e' or @code='g']">, </xsl:if>
58             <xsl:value-of select="marc:subfield[@code='h']"/>
59           </xsl:if>
60           <xsl:if test="not (position() = last())">
61             <xsl:text> • </xsl:text>
62           </xsl:if>
63         </span>
64       </xsl:for-each>
65     </li>
66   </xsl:template>
67
68         <xsl:template name="tag_215">
69     <xsl:for-each select="marc:datafield[@tag=215]">
70       <li>
71         <strong>Description: </strong>
72         <xsl:if test="marc:subfield[@code='a']">
73           <xsl:value-of select="marc:subfield[@code='a']"/>
74         </xsl:if>
75         <xsl:if test="marc:subfield[@code='c']"> :
76           <xsl:value-of select="marc:subfield[@code='c']"/>
77         </xsl:if>
78         <xsl:if test="marc:subfield[@code='d']"> ;
79           <xsl:value-of select="marc:subfield[@code='d']"/>
80         </xsl:if>
81         <xsl:if test="marc:subfield[@code='e']"> +
82           <xsl:value-of select="marc:subfield[@code='e']"/>
83         </xsl:if>
84       </li>
85     </xsl:for-each>
86   </xsl:template>
87
88         <xsl:template name="tag_4xx">
89     <xsl:for-each select="marc:datafield[@tag=464 or @tag=461]">
90         <li>
91         <strong>Linked with: </strong>
92         <span>
93           <xsl:call-template name="addClassRtl" />
94           <xsl:if test="marc:subfield[@code='t']">
95             <xsl:value-of select="marc:subfield[@code='t']"/>
96           </xsl:if>
97           <xsl:if test="marc:subfield[@code='e']"> :
98             <xsl:value-of select="marc:subfield[@code='e']"/>
99           </xsl:if>
100           <xsl:if test="marc:subfield[@code='f']"> /
101             <xsl:value-of select="marc:subfield[@code='f']"/>
102           </xsl:if>
103           <xsl:if test="marc:subfield[@code='v']">,
104             <xsl:value-of select="marc:subfield[@code='v']"/>
105           </xsl:if>
106         </span>
107       </li>
108     </xsl:for-each>
109   </xsl:template>
110
111         <xsl:template name="subfieldSelect">
112                 <xsl:param name="codes"/>
113                 <xsl:param name="delimeter"><xsl:text> </xsl:text></xsl:param>
114                 <xsl:param name="subdivCodes"/>
115                 <xsl:param name="subdivDelimiter"/>
116                 <xsl:variable name="str">
117                         <xsl:for-each select="marc:subfield">
118                                 <xsl:if test="contains($codes, @code)">
119                     <xsl:if test="contains($subdivCodes, @code)">
120                         <xsl:value-of select="$subdivDelimiter"/>
121                     </xsl:if>
122                                         <xsl:value-of select="text()"/><xsl:value-of select="$delimeter"/>
123                                 </xsl:if>
124                         </xsl:for-each>
125                 </xsl:variable>
126                 <xsl:value-of select="substring($str,1,string-length($str)-string-length($delimeter))"/>
127         </xsl:template>
128
129         <xsl:template name="buildSpaces">
130                 <xsl:param name="spaces"/>
131                 <xsl:param name="char"><xsl:text> </xsl:text></xsl:param>
132                 <xsl:if test="$spaces>0">
133                         <xsl:value-of select="$char"/>
134                         <xsl:call-template name="buildSpaces">
135                                 <xsl:with-param name="spaces" select="$spaces - 1"/>
136                                 <xsl:with-param name="char" select="$char"/>
137                         </xsl:call-template>
138                 </xsl:if>
139         </xsl:template>
140
141         <xsl:template name="chopSpecialCharacters">
142         <xsl:param name="title" />
143         <xsl:variable name="ntitle"
144              select="translate($title, '&#x0098;&#x009C;&#xC29C;&#xC29B;&#xC298;&#xC288;&#xC289;','')"/>
145         <xsl:value-of select="$ntitle" />
146     </xsl:template>
147
148
149         <xsl:template name="chopPunctuation">
150                 <xsl:param name="chopString"/>
151                 <xsl:variable name="length" select="string-length($chopString)"/>
152                 <xsl:choose>
153                         <xsl:when test="$length=0"/>
154                         <xsl:when test="contains('.:,;/ ', substring($chopString,$length,1))">
155                                 <xsl:call-template name="chopPunctuation">
156                                         <xsl:with-param name="chopString" select="substring($chopString,1,$length - 1)"/>
157                                 </xsl:call-template>
158                         </xsl:when>
159                         <xsl:when test="not($chopString)"/>
160                         <xsl:otherwise><xsl:value-of select="$chopString"/></xsl:otherwise>
161                 </xsl:choose>
162     <xsl:text> </xsl:text>
163         </xsl:template>
164
165         <xsl:template name="addClassRtl">
166     <xsl:variable name="lang" select="marc:subfield[@code='7']" />
167     <xsl:if test="$lang = 'ha' or $lang = 'Hebrew' or $lang = 'fa' or $lang = 'Arabe'">
168       <xsl:attribute name="class">rtl</xsl:attribute>
169     </xsl:if>
170   </xsl:template>
171
172   <xsl:template name="tag_title">
173     <xsl:param name="tag" />
174     <xsl:param name="label" />
175     <xsl:if test="marc:datafield[@tag=$tag]">
176       <li>
177         <strong><xsl:value-of select="$label"/>: </strong>
178         <xsl:for-each select="marc:datafield[@tag=$tag]">
179           <xsl:value-of select="marc:subfield[@code='a']" />
180           <xsl:if test="marc:subfield[@code='d']">
181             <xsl:text> : </xsl:text>
182             <xsl:value-of select="marc:subfield[@code='e']"/>
183           </xsl:if>
184           <xsl:if test="marc:subfield[@code='e']">
185             <xsl:for-each select="marc:subfield[@code='e']">
186               <xsl:text> </xsl:text>
187               <xsl:value-of select="."/>
188             </xsl:for-each>
189           </xsl:if>
190           <xsl:if test="marc:subfield[@code='f']">
191             <xsl:text> / </xsl:text>
192             <xsl:value-of select="marc:subfield[@code='f']"/>
193           </xsl:if>
194           <xsl:if test="marc:subfield[@code='h']">
195             <xsl:text>, </xsl:text>
196             <xsl:value-of select="marc:subfield[@code='h']"/>
197           </xsl:if>
198           <xsl:if test="marc:subfield[@code='i']">
199             <xsl:text>, </xsl:text>
200             <xsl:value-of select="marc:subfield[@code='i']"/>
201           </xsl:if>
202           <xsl:if test="marc:subfield[@code='v']">
203             <xsl:text>, </xsl:text>
204             <xsl:value-of select="marc:subfield[@code='v']"/>
205           </xsl:if>
206           <xsl:if test="marc:subfield[@code='x']">
207             <xsl:text>, </xsl:text>
208             <xsl:value-of select="marc:subfield[@code='x']"/>
209           </xsl:if>
210           <xsl:if test="marc:subfield[@code='z']">
211             <xsl:text>, </xsl:text>
212             <xsl:value-of select="marc:subfield[@code='z']"/>
213           </xsl:if>
214         </xsl:for-each>
215       </li>
216     </xsl:if>
217   </xsl:template>
218
219
220   <xsl:template name="tag_subject">
221     <xsl:param name="tag" />
222     <xsl:param name="label" />
223     <xsl:if test="marc:datafield[@tag=$tag]">
224       <li>
225         <strong><xsl:value-of select="$label"/>: </strong>
226         <xsl:for-each select="marc:datafield[@tag=$tag]">
227           <a>
228             <xsl:choose>
229               <xsl:when test="marc:subfield[@code=9]">
230                 <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=an:<xsl:value-of select="marc:subfield[@code=9]"/></xsl:attribute>
231               </xsl:when>
232               <xsl:otherwise>
233                 <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=su:<xsl:value-of select="marc:subfield[@code='a']"/></xsl:attribute>
234               </xsl:otherwise>
235             </xsl:choose>
236             <xsl:call-template name="chopPunctuation">
237               <xsl:with-param name="chopString">
238                 <xsl:call-template name="subfieldSelect">
239                     <xsl:with-param name="codes">abcdjpvxyz</xsl:with-param>
240                     <xsl:with-param name="subdivCodes">jpxyz</xsl:with-param>
241                     <xsl:with-param name="subdivDelimiter">-- </xsl:with-param>
242                 </xsl:call-template>
243               </xsl:with-param>
244             </xsl:call-template>
245           </a>
246           <xsl:if test="not (position()=last())">
247             <xsl:text> | </xsl:text>
248           </xsl:if>
249         </xsl:for-each>
250       </li>
251     </xsl:if>
252   </xsl:template>
253
254
255   <xsl:template name="tag_7xx">
256     <xsl:param name="tag" />
257     <xsl:param name="label" />
258     <xsl:if test="marc:datafield[@tag=$tag]">
259       <li>
260         <strong><xsl:value-of select="$label" />: </strong>
261         <xsl:for-each select="marc:datafield[@tag=$tag]">
262           <span>
263             <xsl:call-template name="addClassRtl" />
264             <a>
265               <xsl:choose>
266                 <xsl:when test="marc:subfield[@code=9]">
267                   <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=an:<xsl:value-of select="marc:subfield[@code=9]"/></xsl:attribute>
268                 </xsl:when>
269                 <xsl:otherwise>
270                   <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=au:<xsl:value-of select="marc:subfield[@code='a']"/><xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='b']"/></xsl:attribute>
271                 </xsl:otherwise>
272               </xsl:choose>
273               <xsl:if test="marc:subfield[@code='a']">
274                 <xsl:value-of select="marc:subfield[@code='a']"/>
275               </xsl:if>
276               <xsl:if test="marc:subfield[@code='b']">
277                 <xsl:text>, </xsl:text>
278                 <xsl:value-of select="marc:subfield[@code='b']"/>
279               </xsl:if>
280               <xsl:if test="marc:subfield[@code='c']">
281                 <xsl:text>, </xsl:text>
282                 <xsl:value-of select="marc:subfield[@code='c']"/>
283               </xsl:if>
284               <xsl:if test="marc:subfield[@code='d']">
285                 <xsl:text> </xsl:text>
286                 <xsl:value-of select="marc:subfield[@code='d']"/>
287               </xsl:if>
288               <xsl:if test="marc:subfield[@code='f']">
289                 <span dir="ltr">
290                 <xsl:text> (</xsl:text>
291                 <xsl:value-of select="marc:subfield[@code='f']"/>
292                 <xsl:text>)</xsl:text>
293                 </span>
294               </xsl:if>
295               <xsl:if test="marc:subfield[@code='g']">
296                 <xsl:text> </xsl:text>
297                 <xsl:value-of select="marc:subfield[@code='g']"/>
298               </xsl:if>
299               <xsl:if test="marc:subfield[@code='p']">
300                 <xsl:text> </xsl:text>
301                 <xsl:value-of select="marc:subfield[@code='p']"/>
302               </xsl:if>
303             </a>
304           </span>
305           <xsl:if test="not (position() = last())">
306             <xsl:text> ; </xsl:text>
307           </xsl:if>
308         </xsl:for-each>
309       </li>
310     </xsl:if>
311   </xsl:template>
312
313 </xsl:stylesheet>