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