From 35ee0897f4425a8a82aa24d2d2ccfc367f573ced Mon Sep 17 00:00:00 2001
From: Jared Camins-Esakov <jcamins@cpbibliography.com>
Date: Sat, 28 Jul 2012 22:58:31 -0400
Subject: [PATCH] Bug 6617: Improve MARC21 enhanced contents display
Content-Type: text/plain; charset="UTF-8"

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).

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.
---
 C4/Biblio.pm                                       |    1 +
 koha-tmpl/opac-tmpl/prog/en/css/opac.css           |   34 ++++++++++++++++++++
 .../prog/en/xslt/MARC21slim2OPACDetail.xsl         |   32 ++++++++++--------
 .../opac-tmpl/prog/en/xslt/MARC21slimUtils.xsl     |   20 +++++++++++
 4 files changed, 73 insertions(+), 14 deletions(-)

diff --git a/C4/Biblio.pm b/C4/Biblio.pm
index f8ba099..77f43c6 100644
--- a/C4/Biblio.pm
+++ b/C4/Biblio.pm
@@ -1652,6 +1652,7 @@ sub GetMarcNotes {
     my $tag  = "";
     my $marcnote;
     foreach my $field ( $record->field($scope) ) {
+        next if ($marcflavour ne 'UNIMARC' && C4::Context->preference('OPACXSLTDetailsDisplay') && $field->tag() eq '505');
         my $value = $field->as_string();
         if ( $note ne "" ) {
             $marcnote = { marcnote => $note, };
diff --git a/koha-tmpl/opac-tmpl/prog/en/css/opac.css b/koha-tmpl/opac-tmpl/prog/en/css/opac.css
index d4e7071..3d5dfc6 100644
--- a/koha-tmpl/opac-tmpl/prog/en/css/opac.css
+++ b/koha-tmpl/opac-tmpl/prog/en/css/opac.css
@@ -2769,3 +2769,37 @@ ul.ui-tabs-nav li {
 }
 
 */
+
+.results_summary {
+    clear: both;
+}
+
+.contents {
+    width: 75%;
+}
+
+.contentblock {
+    clear: none;
+}
+
+.contents .label {
+    float: left;
+}
+
+.contents .r:after {
+    content: "\A";
+    white-space: pre;
+}
+
+.contents .t {
+    font-weight: bold;
+    display: inline;
+    background-image: url('/opac-tmpl/prog/images/caret.gif');
+    background-repeat: no-repeat;
+    background-position: left -1ex;
+    padding-left: 20px;
+}
+
+.contents .r {
+    display: inline;
+}
diff --git a/koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slim2OPACDetail.xsl b/koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slim2OPACDetail.xsl
index b6db8b4..367de72 100644
--- a/koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slim2OPACDetail.xsl
+++ b/koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slim2OPACDetail.xsl
@@ -570,33 +570,37 @@
 
         <!-- 505 -->
         <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=1">
-            <span class="label">Incomplete contents:</span>
-        </xsl:when>
-        <xsl:when test="@ind1=1">
-            <span class="label">Partial contents:</span>
-        </xsl:when>
-        <xsl:otherwise>
-            <span class="label">Contents:</span>
-        </xsl:otherwise>
-        </xsl:choose>
+        <xsl:for-each select="marc:datafield[@tag=505]">
+        <xsl:if test="position()=1">
+            <xsl:choose>
+            <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:otherwise>
+                <span class="label">Contents:</span>
+            </xsl:otherwise>
+            </xsl:choose>
+        </xsl:if>
+        <span class='contentblock'>
         <xsl:choose>
         <xsl:when test="@ind2=0">
-            <xsl:call-template name="subfieldSelect">
+            <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="subfieldSelect">
+            <xsl:call-template name="subfieldSelectSpan">
                 <xsl:with-param name="codes">au</xsl:with-param>
             </xsl:call-template>
         </xsl:otherwise>
         </xsl:choose>
         </span>
         </xsl:for-each>
+        </span>
         </xsl:if>
 
         <!-- 583 -->
diff --git a/koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slimUtils.xsl b/koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slimUtils.xsl
index c39ca39..806f8a8 100644
--- a/koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slimUtils.xsl
+++ b/koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slimUtils.xsl
@@ -40,6 +40,26 @@
 		<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>
-- 
1.7.2.5