Bug 6617: Improve MARC21 enhanced contents display (intranet)
authorJared Camins-Esakov <jcamins@cpbibliography.com>
Sat, 4 Aug 2012 15:36:35 +0000 (11:36 -0400)
committerPaul Poulain <paul.poulain@biblibre.com>
Wed, 5 Sep 2012 13:56:38 +0000 (15:56 +0200)
The display of "Enhanced" 505 (contents) fields in the MARC21
XSLT is very poor, resulting in large, unreadable blocks of text,
and -- for some series -- so much unnecessary duplication in the
Notes tab that important information is entirely obscured. This
patch reformats "enhanced" contents fields (MARC21 505 fields with
$t and $r) so as to be more readable by breaking up entries on
separate lines and making titles bold (to make them stand out more).

This patch does not address duplication of information in the Notes
tab, per discussion on the #koha IRC channel.

To test:
1) View record with enhanced 505 field before applying patch. Observe
it is very unfriendly.
2) Apply patch.
3) View same record, note that display is much improved.

Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Display in staff and OPAC is consistent and improved after
applying the patch.

Signed-off-by: Paul Poulain <paul.poulain@biblibre.com>
koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slim2intranetDetail.xsl
koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slimUtils.xsl

index be057ab..afe98f7 100644 (file)
@@ -2370,6 +2370,33 @@ ul.ui-tabs-nav li {
     float: right;
 }
 
+.contents {
+    width: 75%;
+}
+
+.contentblock {
+    position: relative;
+    margin-left: 2em;
+}
+
+.contents .t:first-child:before {
+    content: "→ ";
+}
+
+.contents .t:before {
+    content: "\A→ ";
+    white-space: pre;
+}
+
+.contents .t {
+    font-weight: bold;
+    display: inline;
+}
+
+.contents .r {
+    display: inline;
+}
+
 /* jQuery UI Datepicker */
 .ui-datepicker-trigger {
     vertical-align: middle;
index c7fb89c..d0a15b0 100644 (file)
         </span>
         </xsl:if>
         <xsl:if test="marc:datafield[@tag=505]">
-        <xsl:for-each select="marc:datafield[@tag=505]">
-        <span class="results_summary contents">
-        <xsl:choose>
-        <xsl:when test="@ind1=0">
-            <span class="label">Contents:</span>
-        </xsl:when>
-        <xsl:when test="@ind1=1">
-            <span class="label">Incomplete contents:</span>
-        </xsl:when>
-        <xsl:when test="@ind1=1">
-            <span class="label">Partial contents:</span>
-        </xsl:when>
-        </xsl:choose>  
-        <xsl:choose>
-        <xsl:when test="@ind2=0">
-            <xsl:call-template name="subfieldSelect">
-                <xsl:with-param name="codes">tru</xsl:with-param>
-            </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>
-            <xsl:call-template name="subfieldSelect">
-                <xsl:with-param name="codes">au</xsl:with-param>
-            </xsl:call-template>
-        </xsl:otherwise>
-        </xsl:choose>
-        </span>
-        </xsl:for-each>
+            <div class="results_summary contents">
+            <xsl:choose>
+            <xsl:when test="marc:datafield[@tag=505]/@ind1=0">
+                <span class="label">Contents:</span>
+            </xsl:when>
+            <xsl:when test="marc:datafield[@tag=505]/@ind1=1">
+                <span class="label">Incomplete contents:</span>
+            </xsl:when>
+            <xsl:when test="marc:datafield[@tag=505]/@ind1=2">
+                <span class="label">Partial contents:</span>
+            </xsl:when>
+            </xsl:choose>
+                <xsl:for-each select="marc:datafield[@tag=505]">
+                    <div class='contentblock'>
+                        <xsl:choose>
+                        <xsl:when test="@ind2=0">
+                            <xsl:call-template name="subfieldSelectSpan">
+                                <xsl:with-param name="codes">tru</xsl:with-param>
+                            </xsl:call-template>
+                        </xsl:when>
+                        <xsl:otherwise>
+                            <xsl:call-template name="subfieldSelectSpan">
+                                <xsl:with-param name="codes">atru</xsl:with-param>
+                            </xsl:call-template>
+                        </xsl:otherwise>
+                        </xsl:choose>
+                    </div>
+                </xsl:for-each>
+            </div>
         </xsl:if>
 
         <!-- 773 -->
index 8c0618b..151fc7b 100644 (file)
                <xsl:value-of select="substring($str,1,string-length($str)-string-length($delimeter))"/>
        </xsl:template>
 
+    <xsl:template name="subfieldSelectSpan">
+        <xsl:param name="codes"/>
+        <xsl:param name="delimeter"><xsl:text> </xsl:text></xsl:param>
+        <xsl:param name="subdivCodes"/>
+        <xsl:param name="subdivDelimiter"/>
+        <xsl:param name="prefix"/>
+        <xsl:param name="suffix"/>
+            <xsl:for-each select="marc:subfield">
+                <xsl:if test="contains($codes, @code)">
+                    <span>
+                        <xsl:attribute name="class"><xsl:value-of select="@code"/></xsl:attribute>
+                        <xsl:if test="contains($subdivCodes, @code)">
+                            <xsl:value-of select="$subdivDelimiter"/>
+                        </xsl:if>
+                        <xsl:value-of select="$prefix"/><xsl:value-of select="text()"/><xsl:value-of select="$suffix"/><xsl:if test="position()!=last()"><xsl:value-of select="$delimeter"/></xsl:if>
+                    </span>
+                </xsl:if>
+            </xsl:for-each>
+    </xsl:template>
+
        <xsl:template name="buildSpaces">
                <xsl:param name="spaces"/>
                <xsl:param name="char"><xsl:text> </xsl:text></xsl:param>