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