From d14a9d0b855ef7727bdf982de0c1224a043c0835 Mon Sep 17 00:00:00 2001 From: Julian Maurice <julian.maurice@biblibre.com> Date: Mon, 13 Aug 2012 15:52:10 -0400 Subject: [PATCH] Bug 5888: opac-detail subject/author links improvements Content-Type: text/plain; charset="UTF-8" When the user clicks on a subject or an author, the list of subjects (authors) is displayed and the user can choose more than 1 subject (author) to search on. Only affects 'Normal view'. Does not affect XSLT display. Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com> Split out of the original patch for bug 5888. The links to the authority records are added by bug 8210. --- koha-tmpl/opac-tmpl/prog/en/css/opac.css | 30 ++++ koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt | 168 +++++++++++++++++++- 2 files changed, 196 insertions(+), 2 deletions(-) diff --git a/koha-tmpl/opac-tmpl/prog/en/css/opac.css b/koha-tmpl/opac-tmpl/prog/en/css/opac.css index 1e259fb..f9ff081 100644 --- a/koha-tmpl/opac-tmpl/prog/en/css/opac.css +++ b/koha-tmpl/opac-tmpl/prog/en/css/opac.css @@ -2137,6 +2137,36 @@ a.p1:active { div.ft { clear : both; } + +.authorSearch { + position: absolute; + display: none; + z-index: 2; + background-color: white; + border: 1px solid black; + padding: 4px; +} +.authorSearch li { + list-style-type: none; +} +.authorSearch ul { + padding-left: 0px; +} +.subjectSearch { + position: absolute; + display: none; + z-index: 2; + background-color: white; + border: 1px solid black; + padding: 4px; +} +.subjectSearch li { + list-style-type: none; +} +.subjectSearch ul { + padding-left: 0px; +} + #basket td ul li { font-size:90%; list-style:disc outside url("../../images/item-bullet.gif"); diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt index 71ba359..d04e9d0 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt @@ -269,6 +269,102 @@ YAHOO.util.Event.onContentReady("furtherm", function () { }); //]]> </script> + +<script type="text/JavaScript" language="JavaScript"> +//<![CDATA[ + function showAuthors(element, authornumber){ + // Hide subjects menu if displayed + hideMenu(".subjectSearch"); + + // Check checkbox related to the clicked link + $("#authorsList input[type='checkbox']").attr('checked', false); + $("#author_"+authornumber).attr('checked', true); + + makeAuthorRequest(); + + // Display menu + var left = element.offsetLeft || 0; + var top = element.offsetTop || 0; + $('.authorSearch').css('display', 'block'); + $('.authorSearch').css('left', left); + $('.authorSearch').css('top', top + 15); + } + + function hideMenu(elem) { + $(elem).css('display', 'none'); + } + + function checkAll(checkbox, elem) { + var check = $(checkbox).attr('checked') ? true : false; + $(elem).find("input[type='checkbox']").attr('checked', check); + elem == "#authorsList" ? makeAuthorRequest() : makeSubjectRequest(); + } + + function makeAuthorRequest(){ + var values = []; + + $("#authorsList").find("input[type='checkbox']:checked").each(function () { + values.push($(this).val()); + }); + + if (values.length > 0) { + var request = "/cgi-bin/koha/opac-search.pl?q=" + values.join(' and '); + $("#validAuthorSearch").attr("href", request); + } else { + $("#validAuthorSearch").removeAttr("href"); + } + + } + + //Subjects + function showSubjects(element, subjectnumber, subfieldnumber){ + // Hide author menu if displayed + hideMenu(".authorSearch"); + + // Check checkbox related to the clicked link + $("#subjectsList input[type='checkbox']").attr('checked', false); + $("#subject_"+subjectnumber+"_"+subfieldnumber).attr('checked', true); + + makeSubjectRequest(); + + // Display menu + var left = element.offsetLeft || 0; + var top = element.offsetTop || 0; + $('.subjectSearch').css('display', 'block'); + $('.subjectSearch').css('left', left); + $('.subjectSearch').css('top', top + 15); + } + + function makeSubjectRequest() { + var values = []; + $("#subjectsList > ul").each(function() { + var all_checked = true; + var local_values = []; + $(this).find('input[type="checkbox"]').each(function() { + if($(this).attr('checked')) { + local_values.push($(this).val()); + } else { + all_checked = false; + } + }); + var authid = $(this).attr('data-authid'); + if(all_checked && authid) { + values.push('an:' + authid); + } else { + values = values.concat(local_values); + } + }); + + if(values.length > 0) { + var request = "/cgi-bin/koha/opac-search.pl?q=" + values.join(' and '); + $("#validSubjectSearch").attr('href', request); + } else { + $("#validSubjectSearch").removeAttr("href"); + } + } +//]]> +</script> + [% IF ( opacuserlogin ) %][% IF ( loggedinusername ) %][% IF ( TagsEnabled ) %]<style type="text/css"> #addtagl { display: none; } </style>[% END %][% END %][% END %] @@ -338,15 +434,46 @@ YAHOO.util.Event.onContentReady("furtherm", function () { [% IF ( MARCAUTHORS ) %] <span class="results_summary"> <span class="label">Authors:</span> + <div class="authorSearch" id="authorSearch"> + <span><b>Select the item(s) to search :</b></span> + <ul id="authorsList"> + <li><input type="checkbox" onchange="checkAll(this, '#authorsList')"> <b>all</b></li> + <li><hr /></li> + [% FOREACH MARCAUTHOR IN MARCAUTHORS %] + <li> + [% IF (MARCAUTHOR.authoritylink) %] + <input type="checkbox" name="checkbox" + id="author_[% loop.count %]" + onclick="makeAuthorRequest()" + value="an:[% MARCAUTHOR.authoritylink %]" /> + [% ELSE %] + <input type="checkbox" name="checkbox" + id="author_[% loop.count %]" + onclick="makeAuthorRequest()" + value="au,wrdl:[% FOREACH SUBFIELD IN MARCAUTHOR.MARCAUTHOR_SUBFIELDS_LOOP %][% SUBFIELD.value |url %][% UNLESS (loop.last) %]+[% END %][% END %]" /> + [% END %] + + [% FOREACH SUBFIELD IN MARCAUTHOR.MARCAUTHOR_SUBFIELDS_LOOP %] + [% SUBFIELD.value %] + [% END %] + </li> + [% END %] + </ul> + <hr /> + <a href="#" onclick="hideMenu('.authorSearch'); return false">Cancel</a> + | + <a id="validAuthorSearch">Search</a> + </div> [% FOREACH MARCAUTHOR IN MARCAUTHORS %] [% authorsloop = loop %] [% FOREACH SUBFIELD IN MARCAUTHOR.MARCAUTHOR_SUBFIELDS_LOOP %] <a title="$[% SUBFIELD.code %] [% SUBFIELD.value %]" + onclick="showAuthors(this, [% authorsloop.count %]); return false;" href="/cgi-bin/koha/opac-search.pl?q=[% FOREACH link IN SUBFIELD.link_loop %][% link.operator |url %][% link.limit |url %]:[% link.link |url %][% END %]">[% SUBFIELD.value %]</a> [% UNLESS (loop.last) %][% SUBFIELD.separator %][% END %] [% END %] [% IF (MARCAUTHOR.authoritylink) %] - <a class='authlink' href="/cgi-bin/koha/opac-authoritiesdetail.pl?authid=[% MARCAUTHOR.authoritylink %]"><img style="vertical-align:middle" height="15" width="15" src="/opac-tmpl/prog/images/filefind.png"></a> + <a href="/cgi-bin/koha/opac-authoritiesdetail.pl?authid=[% MARCAUTHOR.authoritylink %]"><img style="vertical-align:middle" height="15" width="15" src="/opac-tmpl/prog/images/filefind.png"></a> [% END %] [% UNLESS ( loop.last ) %]|[% END %] [% END %] @@ -405,6 +532,43 @@ YAHOO.util.Event.onContentReady("furtherm", function () { [% IF ( MARCSUBJCTS ) %] <span class="results_summary"> <span class="label">Subject(s):</span> + <div class="subjectSearch" > + <span><b>Select the item(s) to search :</b></span> + <div id="subjectsList"> + <input type="checkbox" id="all_subjects" + onchange="checkAll(this, '#subjectsList')" /> + <label for="all_subjects"> + <b>all</b> + </label> + <hr /> + [% FOREACH MARCSUBJCT IN MARCSUBJCTS %] + [% subjectsloop = loop %] + [% IF MARCSUBJCT.authoritylink %] + <ul id="subjectsList[% loop.count %]" + data-authid="[% MARCSUBJCT.authoritylink %]"> + [% ELSE %] + <ul id="subjectsList[% loop.count %]"> + [% END %] + [% FOREACH SUBFIELD IN MARCSUBJCT.MARCSUBJECT_SUBFIELDS_LOOP %] + <li> + <input type="checkbox" onclick="makeSubjectRequest()" + name="checkbox" + id="subject_[% subjectsloop.count %]_[% loop.count %]" + value="su,wrdl:[% SUBFIELD.value |url %]" /> + <label for="subject_[% subjectsloop.count %]_[% loop.count %]"> + [% SUBFIELD.value %] + </label> + </li> + [% END %] + </ul> + <hr /> + [% END %] + </div> + <a href="#" + onclick="hideMenu('.subjectSearch'); return false">Cancel</a> + | + <a id="validSubjectSearch">Search</a> + </div> [% FOREACH MARCSUBJCT IN MARCSUBJCTS %] [% subjectsloop = loop %] [% FOREACH SUBFIELD IN MARCSUBJCT.MARCSUBJECT_SUBFIELDS_LOOP %] @@ -412,7 +576,7 @@ YAHOO.util.Event.onContentReady("furtherm", function () { <a title="$[% SUBFIELD.code %] [% SUBFIELD.value %]" href="/cgi-bin/koha/opac-search.pl?q=[% FOREACH link_loo IN SUBFIELD.link_loop %][% link_loo.operator |url %][% link_loo.limit |url %]:[% link_loo.link |url %][% END %]" onclick="showSubjects(this, [% subjectsloop.count %], [% loop.count %]); return false;">[% SUBFIELD.value %]</a> [% END %] [% IF (MARCSUBJCT.authoritylink) %] - <a class="authlink" href="/cgi-bin/koha/opac-authoritiesdetail.pl?authid=[% MARCSUBJCT.authoritylink %]"><img style="vertical-align:middle" height="15" width="15" src="/opac-tmpl/prog/images/filefind.png" /></a> + <a href="/cgi-bin/koha/opac-authoritiesdetail.pl?authid=[% MARCSUBJCT.authoritylink %]"><img style="vertical-align:middle" height="15" width="15" src="/opac-tmpl/prog/images/filefind.png" /></a> [% END %] [% UNLESS ( loop.last ) %] | [% END %] [% END %] -- 1.7.2.5