Bug 26765: Make author span a clickable link on OPAC results list

This patch follows the markup of the staff interface catalog results
XSLT to make authors in OPAC search results clickable.

The patch also makes some minor CSS changes so that title and author
links are not too crowded together.

To test, apply the patch and rebuild the OPAC CSS.

- Perform a catalog search in the OPAC which will return multiple
  results.
- In the search results, each author in each search result should be a
  separate clickable link.
- The margins around the result title and authors should be
  comfortable.
- Confirm that each link takes you to the correct author search.

Signed-off-by: Barbara Johnson <barbara.johnson@bedfordtx.gov>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit 517b0ae2d4)
Signed-off-by: Jacob O'Mara <jacob.omara@ptfs-europe.com>
This commit is contained in:
Owen Leonard 2023-01-27 18:53:39 +00:00 committed by Jacob O'Mara
parent 55a1e189bf
commit c6b4ee1038
2 changed files with 113 additions and 97 deletions

View File

@ -87,6 +87,7 @@ a {
display: block;
font-size: 108%;
font-weight: bold;
margin-bottom: .3rem;
}
&.login-link {
@ -329,6 +330,11 @@ th {
}
}
.byAuthor {
display: inline-block;
margin: .2rem .2rem .2rem 0;
}
#members {
p {
color: #727272;

View File

@ -517,97 +517,121 @@
<xsl:choose>
<xsl:when test="marc:datafield[@tag=100] or marc:datafield[@tag=110] or marc:datafield[@tag=111] or marc:datafield[@tag=700] or marc:datafield[@tag=710] or marc:datafield[@tag=711]">
<span class="byAuthor">by </span>
<span class="byAuthor">by</span><xsl:text> </xsl:text>
<ul class="author resource_list">
<!-- #13383 -->
<xsl:for-each select="marc:datafield[(@tag=100 or @tag=700 or @tag=110 or @tag=710 or @tag=111 or @tag=711) and @ind1!='z']">
<li>
<xsl:call-template name="chopPunctuation">
<xsl:with-param name="chopString">
<xsl:call-template name="subfieldSelect">
<xsl:with-param name="codes">
<xsl:choose>
<!-- #13383 include subfield e for field 111 -->
<xsl:when test="@tag=111 or @tag=711">aeq</xsl:when>
<xsl:when test="@tag=110 or @tag=710">ab</xsl:when>
<xsl:otherwise>abcjq</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:with-param>
<xsl:with-param name="punctuation">
<xsl:text>:,;/ </xsl:text>
</xsl:with-param>
</xsl:call-template>
<!-- Display title portion for 110 and 710 fields -->
<xsl:if test="(@tag=110 or @tag=710) and boolean(marc:subfield[@code='c' or @code='d' or @code='n' or @code='t'])">
<span class="titleportion">
<xsl:choose>
<xsl:when test="marc:subfield[@code='c' or @code='d' or @code='n'][not(marc:subfield[@code='t'])]"><xsl:text> </xsl:text></xsl:when>
<xsl:otherwise><xsl:text>. </xsl:text></xsl:otherwise>
</xsl:choose>
<xsl:call-template name="chopPunctuation">
<xsl:with-param name="chopString">
<xsl:call-template name="subfieldSelect">
<xsl:with-param name="codes">cdnt</xsl:with-param>
</xsl:call-template>
</xsl:with-param>
</xsl:call-template>
</span>
</xsl:if>
<!-- Display title portion for 111 and 711 fields -->
<xsl:if test="(@tag=111 or @tag=711) and boolean(marc:subfield[@code='c' or @code='d' or @code='g' or @code='n' or @code='t'])">
<span class="titleportion">
<a>
<xsl:choose>
<xsl:when test="marc:subfield[@code='c' or @code='d' or @code='g' or @code='n'][not(marc:subfield[@code='t'])]"><xsl:text> </xsl:text></xsl:when>
<xsl:otherwise><xsl:text>. </xsl:text></xsl:otherwise>
<xsl:when test="marc:subfield[@code=9] and $UseAuthoritiesForTracings='1'">
<xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=an:<xsl:value-of select="str:encode-uri(marc:subfield[@code=9], true())"/></xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=au:"<xsl:value-of select="str:encode-uri(marc:subfield[@code='a'], true())"/>"</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="chopPunctuation">
<xsl:with-param name="chopString">
<xsl:call-template name="subfieldSelect">
<xsl:with-param name="codes">cdgnt</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="subfieldSelect">
<xsl:with-param name="codes">
<xsl:choose>
<!-- #13383 include subfield e for field 111 -->
<xsl:when test="@tag=111 or @tag=711">aeq</xsl:when>
<xsl:when test="@tag=110 or @tag=710">ab</xsl:when>
<xsl:otherwise>abcjq</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:with-param>
<xsl:with-param name="punctuation">
<xsl:text>:,;/ </xsl:text>
</xsl:with-param>
</xsl:call-template>
</span>
</xsl:if>
<!-- Display dates for 100 and 700 fields -->
<xsl:if test="(@tag=100 or @tag=700) and marc:subfield[@code='d']">
<span class="authordates">
<xsl:text>, </xsl:text>
<xsl:call-template name="chopPunctuation">
<xsl:with-param name="chopString">
<xsl:call-template name="subfieldSelect">
<xsl:with-param name="codes">d</xsl:with-param>
<!-- Display title portion for 110 and 710 fields -->
<xsl:if test="(@tag=110 or @tag=710) and boolean(marc:subfield[@code='c' or @code='d' or @code='n' or @code='t'])">
<span class="titleportion">
<xsl:choose>
<xsl:when test="marc:subfield[@code='c' or @code='d' or @code='n'][not(marc:subfield[@code='t'])]"><xsl:text> </xsl:text></xsl:when>
<xsl:otherwise><xsl:text>. </xsl:text></xsl:otherwise>
</xsl:choose>
<xsl:call-template name="chopPunctuation">
<xsl:with-param name="chopString">
<xsl:call-template name="subfieldSelect">
<xsl:with-param name="codes">cdnt</xsl:with-param>
</xsl:call-template>
</xsl:with-param>
</xsl:call-template>
</xsl:with-param>
</xsl:call-template>
</span>
</xsl:if>
<!-- Display title portion for 100 and 700 fields -->
<xsl:if test="@tag=700 and marc:subfield[@code='t']">
<span class="titleportion">
<xsl:text>. </xsl:text>
<xsl:call-template name="chopPunctuation">
<xsl:with-param name="chopString">
<xsl:call-template name="subfieldSelect">
<xsl:with-param name="codes">t</xsl:with-param>
</xsl:call-template>
</xsl:with-param>
</xsl:call-template>
</span>
</xsl:if>
<!-- Display relators for 1XX and 7XX fields -->
<xsl:if test="marc:subfield[@code='4' or @code='e'][not(parent::*[@tag=111])] or (self::*[@tag=111] and marc:subfield[@code='4' or @code='j'][. != ''])">
<span class="relatorcode">
<xsl:text> [</xsl:text>
<xsl:choose>
<xsl:when test="@tag=111 or @tag=711">
</span>
</xsl:if>
<!-- Display title portion for 111 and 711 fields -->
<xsl:if test="(@tag=111 or @tag=711) and boolean(marc:subfield[@code='c' or @code='d' or @code='g' or @code='n' or @code='t'])">
<span class="titleportion">
<xsl:choose>
<!-- Prefer j over 4 for 111 and 711 -->
<xsl:when test="marc:subfield[@code='j']">
<xsl:for-each select="marc:subfield[@code='j']">
<xsl:when test="marc:subfield[@code='c' or @code='d' or @code='g' or @code='n'][not(marc:subfield[@code='t'])]"><xsl:text> </xsl:text></xsl:when>
<xsl:otherwise><xsl:text>. </xsl:text></xsl:otherwise>
</xsl:choose>
<xsl:call-template name="chopPunctuation">
<xsl:with-param name="chopString">
<xsl:call-template name="subfieldSelect">
<xsl:with-param name="codes">cdgnt</xsl:with-param>
</xsl:call-template>
</xsl:with-param>
</xsl:call-template>
</span>
</xsl:if>
<!-- Display dates for 100 and 700 fields -->
<xsl:if test="(@tag=100 or @tag=700) and marc:subfield[@code='d']">
<span class="authordates">
<xsl:text>, </xsl:text>
<xsl:call-template name="chopPunctuation">
<xsl:with-param name="chopString">
<xsl:call-template name="subfieldSelect">
<xsl:with-param name="codes">d</xsl:with-param>
</xsl:call-template>
</xsl:with-param>
</xsl:call-template>
</span>
</xsl:if>
<!-- Display title portion for 100 and 700 fields -->
<xsl:if test="@tag=700 and marc:subfield[@code='t']">
<span class="titleportion">
<xsl:text>. </xsl:text>
<xsl:call-template name="chopPunctuation">
<xsl:with-param name="chopString">
<xsl:call-template name="subfieldSelect">
<xsl:with-param name="codes">t</xsl:with-param>
</xsl:call-template>
</xsl:with-param>
</xsl:call-template>
</span>
</xsl:if>
<!-- Display relators for 1XX and 7XX fields -->
<xsl:if test="marc:subfield[@code='4' or @code='e'][not(parent::*[@tag=111])] or (self::*[@tag=111] and marc:subfield[@code='4' or @code='j'][. != ''])">
<span class="relatorcode">
<xsl:text> [</xsl:text>
<xsl:choose>
<xsl:when test="@tag=111 or @tag=711">
<xsl:choose>
<!-- Prefer j over 4 for 111 and 711 -->
<xsl:when test="marc:subfield[@code='j']">
<xsl:for-each select="marc:subfield[@code='j']">
<xsl:value-of select="."/>
<xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:for-each select="marc:subfield[@code=4]">
<xsl:value-of select="."/>
<xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<!-- Prefer e over 4 on 100 and 110 -->
<xsl:when test="marc:subfield[@code='e']">
<xsl:for-each select="marc:subfield[@code='e'][not(@tag=111) or not(@tag=711)]">
<xsl:value-of select="."/>
<xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>
@ -619,24 +643,10 @@
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<!-- Prefer e over 4 on 100 and 110 -->
<xsl:when test="marc:subfield[@code='e']">
<xsl:for-each select="marc:subfield[@code='e'][not(@tag=111) or not(@tag=711)]">
<xsl:value-of select="."/>
<xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:for-each select="marc:subfield[@code=4]">
<xsl:value-of select="."/>
<xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
<xsl:text>]</xsl:text>
</span>
</xsl:if>
<xsl:text>]</xsl:text>
</span>
</xsl:if>
</a>
</li>
</xsl:for-each>
</ul>