JQuery Library - OPAC

Main page | Staff Interface | OPAC
== Category == 
== Enhanced content ==
=== Export formats ===
==== Add direct export to RefWorks link to OPAC ====
* Developer: Jared Camins-Esakov, ByWater Solutions
* Purpose: Add a link to directly export a citation to RefWorks
* Status: Completed
* Staff interface or OPAC?: OPAC
* Version: 3.2+
 
 function getParameterByName( name )
 {
 name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
 var regexS = "[\\?&]"+name+"=([^&#]*)";
 var regex = new RegExp( regexS );
 var results = regex.exec( window.location.href );
 if( results == null )
 return "";
 else
 return decodeURIComponent(results[1].replace(/\+/g, " "));
 }
 $(document).ready(function(){
 $("<a href='http://www.refworks.com/express/expressimport.asp?vendor=Koha&filter=RIS%20Format&encoding=65001&url=http%3A%2F%2F" + location.host + "%2Fcgi-bin%2Fkoha%2Fopac-export.pl%3Fop%3Dexport%26format%3Dris%26bib%3D" + getParameterByName('biblionumber') + "' target='RefWorksMain'>Export to RefWorks</a>").appendTo("#export");
 $("#userbasket #toolbar .download").parent().after("<a class='download' href='http://www.refworks.com/express/expressimport.asp?vendor=Koha&filter=RIS%20Format&encoding=65001&url=http%3A%2F%2F" + location.host + "%2Fcgi-bin%2Fkoha%2Fopac-downloadcart.pl%3Fformat%3Dris%26bib_list%3D" + encodeURIComponent(getParameterByName('bib_list')) + "' target='RefWorksMain'>Export to RefWorks</a>")
 $("#usershelves #toolbar .download").after("<a class='download tag_hides' href='http://www.refworks.com/express/expressimport.asp?vendor=Koha&filter=RIS%20Format&encoding=65001&url=http%3A%2F%2F" + location.host + "%2Fcgi-bin%2Fkoha%2Fopac-downloadshelf.pl%3Fformat%3Dris%26shelfid%3D" + encodeURIComponent(getParameterByName('viewshelf')) + "' target='RefWorksMain'>Export to RefWorks</a>");
 });
 
=== External database highlight ===
==== Add database placards in search results based on keywords (v18.x) ====
* Developer: Christopher Brannon (Coeur d'Alene Public Library / Cooperative Information Network)
* Purpose: Adds a placard link advertising a database in OPAC results based on preset keywords
* Status: Completed
* Staff interface or OPAC?: OPAC
* Version: 18.x
* Notes: Fill kw_keywords with as many keywords as needed. Place in single quotes and separate with commas. Replace [LINK TO DATABASE], [LINK TO IMAGE] and [DESCRIPTION OF DATABASE].
//Placards
var kw_keywords = ['keyword1','keyword2'];
var kw_count = 0;
while (kw_count < kw_keywords.length) {
	if ( $('#results a').is(':contains(Results):contains(kw):contains('+kw_keywords[kw_count]+')') ) {
		$('div.searchresults tbody tr').eq(1).after('<a href="[LINK TO DATABASE]" target="_blank"><img src="[LINK TO IMAGE]" width="150" style="float: left; padding-right: 20px;">Looks like you are searching for [DESCRIPTION OF DATABASE].Click here to go to the database.</a>');
		kw_count = kw_keywords.length;
	} else {
		kw_count++;
	}
}
//End Placards
==== Add database placards in search results based on keywords (v19.x) ====
* Developer: Christopher Brannon (Coeur d'Alene Public Library / Cooperative Information Network)
* Purpose: Adds a placard link advertising a database in OPAC results based on preset keywords
* Status: Completed
* Staff interface or OPAC?: OPAC
* Version: 19.x
* Notes: This version addresses changes made to the structure of the breadcrumbs that is searched for the keywords in 19.05. Fill kw_keywords with as many keywords as needed. Place in single quotes and separate with commas. Replace [LINK TO DATABASE], [LINK TO IMAGE] and [DESCRIPTION OF DATABASE].
//Placards
var kw_keywords = ['keyword1','keyword2'];
var kw_count = 0;
while (kw_count < kw_keywords.length) {
	if ( $('#results a').is(':contains(Results):contains('+kw_keywords[kw_count]+')') && ($('#results a[title*="kw"]').length) ) {
		$('div.searchresults tbody tr').eq(1).after('<a href="[LINK TO DATABASE]" target="_blank"><img src="[LINK TO IMAGE]" width="150" style="float: left; padding-right: 20px;">Looks like you are searching for [DESCRIPTION OF DATABASE].Click here to go to the database.</a>');
		kw_count = kw_keywords.length;
	} else {
		kw_count++;
	}
}
//End Placards
==== Add database placards in search results based on keywords (v20.x) ====
* Developer: Christopher Brannon (Coeur d'Alene Public Library / Cooperative Information Network)
* Purpose: Adds a placard link advertising a database in OPAC results based on preset keywords
* Status: Completed
* Creation Date: 2021-04-01
* Staff interface or OPAC?: OPAC
* Version: 20.x
* Notes: This version is not necessarily changed because of coding changes in 20.x. It might work in 19.x, but I have not tested it. Most of the changes are cosmetic and incorporating CSS adjustments and clearer instructions. Fill kw_keywords with as many keywords as needed. Place in single quotes and separate with commas. Replace LINK_TO_DATABASE, LINK_TO_IMAGE and DESCRIPTION_OF_CONTENT. Note that you can easily define which row the placard appears on with the placard_row variable. And there is a new placard_second_row variable for a second appearance.
/*Placards*/
.placard-cell {
 background-color: transparent!important;
}
.placard {
 position: relative;
 background-color: lightyellow;
 border: 1px solid black!important;
 border-radius: 7px;
 min-height: 150px;
 padding: 5px;
}
.placard-left {
 float: left;
 padding-right: 10px;
}
.placard-img {
 max-height: 150px;
}
 //Placards to show in results on opac-search.pl
 //This will create a new expression (iContains) that will be a case-insensitive version of Contains.
 jQuery.expr[':'].iContains = function(a, i, m) {
 return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
 };
 var placard_row = 2; //Use 0 to disable
 var placard_second_row = 12; //Use 0 to disable - must be at least 2 rows more than placard_row.
 var placard_count = 0;
 
 //Define each placard [[keywords],image path,content],...
 //Entire placard variable should be in the pattern of [[keywords for 1st placard],image path, description of content],[keywords for 2nd placard],image path, description of content],etc.]
 
 var placards = [
 [['keyword1','keyword2','keyword3','keyword4','keyword5'],'LINK_TO_IMAGE','<a href="LINK_TO_DATABASE">DESCRIPTION_OF_CONTENT</a>']];
	
 //Placard logic and placement
 if (placard_row > 0) {
 while (placard_count < placards.length) {
 var kw_count = 0;
 while (kw_count < placards[placard_count][0].length) {
 if ($('ul.breadcrumb a').is(':contains(Results):iContains('+placards[placard_count][0][kw_count]+')') && ($('ul.breadcrumb a[title*="You searched"]').length) ) {
 $('div.searchresults tbody tr').eq(placard_row - 1).before('<img src="'+placards[placard_count][1]+'">'+placards[placard_count][2]+'');
 if (($('div.searchresults tbody tr').length > placard_second_row) && (placard_second_row > 0) && (placard_second_row > placard_row+1)) {
 $('div.searchresults tbody tr').eq(placard_second_row - 1).before('<img src="'+placards[placard_count][1]+'">'+placards[placard_count][2]+'');
 }
 kw_count = placards[placard_count][0].length;
 } else {
 kw_count++;
 }
 }
 placard_count++;
 }
 }
 //END Placards to show in results on opac-search.pl
=== HathiTrust ===
==== Add link to HathiTrust on results and details page if isbn or oclc number found and content in public domain ====
* Developer: Nick Clemens
* Purpose: Adds a link to free materials available from hathi trust
* Status: Completed
* Staff interface or OPAC?: OPAC
* Version: 17.05
* Note: This could certainly be simplified, but this works :-)
$(document).ready(function(){
//add hathi to results
 if ($("#results").length) {
 $("input[name='biblionumber']").each(function(){
 var bnum = $(this).val();
 $.getJSON("/cgi-bin/koha/svc/report?id=400&sql_params=" + bnum, function(data) {
 $.each(data, function(index, value) {
 if( value[0] ){
 $.getJSON("https://catalog.hathitrust.org/api/volumes/brief/isbn/" + value[0] + ".json", function(data) {
 if( Object.keys(data.records).length ){
 var h_url = data.records[Object.keys(data.records)[0]].recordURL;
 var p_d = data.items[Object.keys(data.items)[0]].rightsCode;
 if( h_url.length > 0 && p_d == 'pd' ){
console.log($("#bib"+bnum).parent('tr').find('.results_summary.availability'));
 $("#bib"+bnum).closest('tr').find('.results_summary.availability').append('<a href="'+h_url+'">Access on HathiTrust</a>');
 }
 } 
 });
 } else {
 $.getJSON("/cgi-bin/koha/svc/report?id=398&sql_params=" + bnum, function(data) {
 $.each(data, function(index, value) {
 if( value[0] ){
 oclc_num = value[0].replace(/\D/g,);
 $.getJSON("https://catalog.hathitrust.org/api/volumes/brief/oclc/" + oclc_num + ".json", function(data) {
 if( Object.keys(data.records).length ){
 var h_url = data.records[Object.keys(data.records)[0]].recordURL;
 var p_d = data.items[Object.keys(data.items)[0]].rightsCode;
 if( h_url.length > 0 && p_d == 'pd' ){
 $(".record").append('<a href="'+h_url+'">Access on HathiTrust</a>');
 } 
 }
 });
 }
 });
 });
 }
 });
 });
 });
 }
 //add hathi link to details page
 if ($("#opac-detail").length) {
 var bnum = $("input[name='bib']").val();
 $.getJSON("/cgi-bin/koha/svc/report?id=400&sql_params=" + bnum, function(data) {
 $.each(data, function(index, value) {
 if( value[0] ){
 $.getJSON("https://catalog.hathitrust.org/api/volumes/brief/isbn/" + value[0] + ".json", function(data) {
 var h_url = data.records[Object.keys(data.records)[0]].recordURL;
 var p_d = data.items[Object.keys(data.items)[0]].rightsCode;
 if( h_url.length > 0 && p_d == 'pd' ){
 $(".record").append('<a href="'+h_url+'">Access on HathiTrust</a>');
 }
 
 });
 } else {
 $.getJSON("/cgi-bin/koha/svc/report?id=398&sql_params=" + bnum, function(data) {
 $.each(data, function(index, value) {
 if( value[0] ){
 oclc_num = value[0].replace(/\D/g,);
 $.getJSON("https://catalog.hathitrust.org/api/volumes/brief/oclc/" + oclc_num + ".json", function(data) {
 var h_url = data.records[Object.keys(data.records)[0]].recordURL;
 var p_d = data.items[Object.keys(data.items)[0]].rightsCode;
 if( h_url.length > 0 && p_d == 'pd' ){
 $(".record").append('<a href="'+h_url+'">Access on HathiTrust</a>');
 } 
 });
 }
 });
 });
 }
 });
 });
 }
});
=== Hoopla ===
==== Enhance results from the Hoopla Plug-in ====
* Developer: George Williams (Northease Kansas Library System / Next Search Catalog) - modifys code created by Christopher Brannon
* Purpose: Turns the Hoopla results data into a placard to draw more attention to this resource
* Status: Completed
* Staff interface or OPAC?: OPAC
* Version: 20.05
* Notes: Change the URL in #hoopla-banner to match the location of the banner you'd like to display
//Enhance Hoopla results
 jQuery(document).ready(checkContainer);
 function checkContainer() {
 if ($('#hoopla_results').is(':visible')) {
 $('#hoopla_results').css('padding-top', '20px').wrap('');
 $('#hoopla-banner td').prepend('<img src="https://www.idaho.gov/assets/business-74595c3f85cf8df2cfe25d62642662d5cecc67ddc505a845d1175d289992bbb9.jpg" style="float: left; padding-right: 20px; max-width: 400px; height: auto;">');
 $('#numresults').clone().appendTo('#userresults');
 $('#hoopla_results a').each(function() {
 var text = $(this).text();
 $(this).text(text.replace('results in Hoopla', 'results in Hoopla for this search'));
 });
 } else {
 setTimeout(checkContainer, 50); //wait 50 ms, then try again
 }
 }
=== iDreamBooks.com (no longer active) ===
==== Add iDreamBooks.com Readometer to OPAC ====
* Developer: C & P Bibliography Services
* Purpose: Add a "Readometer" from iDreamBooks.com to the OPAC to show aggregated information about reviews of the book by professional critics.
* Status: Completed
* Staff interface or OPAC?: OPAC
* Version: 3.6+ with XSLT enabled for the OPAC details page
* Note: This is an updated version that offers better web browser compatibility. Anyone using the iFrame version originally posted should switch.
 var isbn = $(".isbn:last").text().split(" ")[1];
 if (isbn) {
 isbn = isbn.replace(/\W*$/, );
 if ($.browser.msie && parseInt($.browser.version, 10) >= 8 && window.XDomainRequest) {
 // Use Microsoft XDR for IE version 8 or above
 var xdr = new XDomainRequest();
 xdr.open("get", "http://idreambooks.com/newbooks/api.json?q="+encodeURIComponent(isbn)+"&key=8bf66516232d1b72f3e47df939653e1e");
 xdr.onload = function() {
 if (! typeof(json) == 'undefined') {
 json = 'json = '+xdr.responseText; // the string now looks like.. json = { ... };
 eval(json); // json is now a regular JSON object
 $(".title").append('<a href="'+json.book.detail_link+'" id="idreambooksreadometer"><img src="http://idreambooks.com/remotereadometer/'+isbn+'.jpg" alt="'+json.book.title+' by '+json.book.author+'" title="Rating based on reviews of '+json.book.title+'"></a>');
 }
 }
 xdr.send();
 } else {
 $.getJSON("http://idreambooks.com/newbooks/api.json?q="+encodeURIComponent(isbn)+"&key=8bf66516232d1b72f3e47df939653e1e", function(json){
 if (! typeof(json) == 'undefined') {
 $(".title").append('<a href="'+json.book.detail_link+'" id="idreambooksreadometer"><img src="http://idreambooks.com/remotereadometer/'+isbn+'.jpg" alt="'+json.book.title+' by '+json.book.author+'" title="Rating based on reviews of '+json.book.title+'"></a>');
 }
 });
 }
 }
You will also need the following line of CSS in your OPACUserCSS:
#idreambooksreadometer {
 float: right;
}
==== Add iDreamBooks.com reviews tab to OPAC (3.6-3.8) ====
* Developer: C & P Bibliography Services
* Purpose: Add a tab with snippets of reviews from iDreamBooks.com to the OPAC
* Status: Completed
* Staff interface or OPAC?: OPAC
* Version: 3.6-3.8 with XSLT enabled for the OPAC details page (3.10 script below)
var isbn = $(".isbn:last").text().split(" ")[1];
if (isbn) {
 isbn = isbn.replace(/\W*$/, );
 if ($.browser.msie && parseInt($.browser.version, 10) >= 8 && window.XDomainRequest) {
 // Use Microsoft XDR for IE version 8 or above
 var xdr = new XDomainRequest();
 xdr.open("get", "http://idreambooks.com/newbooks/api.json?q="+encodeURIComponent(isbn)+"&key=8bf66516232d1b72f3e47df939653e1e");
 xdr.onload = function() {
 json = 'json = '+xdr.responseText; // the string now looks like.. json = { ... };
 eval(json); // json is now a regular JSON object
 parseIDBJSON(json); // parse using same function as for jQuery's success event
 }
 xdr.send();
 } else {
 $.getJSON("http://idreambooks.com/newbooks/api.json?q="+encodeURIComponent(isbn)+"&key=8bf66516232d1b72f3e47df939653e1e", function(json){
 parseIDBJSON(json);
 });
 }
}
// NOTE THAT THE CODE BELOW SHOULD NOT GO IN $(document).ready.
function parseIDBJSON( json ) {
 if(json.total_results > 0 && json.book.rating > 0){
 var isbn = $(".isbn:last").text().split(" ")[1];
 //build new tab for critic reviews
 $("#bibliodescriptions").append('<a id="seemoreidb">More book reviews at iDreamBooks.com</a>');
 
 $("#bibliodescriptions ul").tabs('add', '#idb_critic_reviews', 'Book reviews by critics ( '+json.book.review_count+' )');
 //append happy-sad cloud review
 $("#catalogue_detail_biblio").append("<a href='"+json.book.detail_link+"'><img src='"+json.book.to_read_or_not_small+"' alt='"+json.book.title+" by "+json.book.author+"' title='Rating based on reviews of "+json.book.title+"'>"+json.book.rating+"%</a> <a href='http://www.idreambooks.com/'>rating based on reviews at iDreamBooks.com</a>");
 //insert data into Book reviews tab
 $.each(json.book.critic_reviews, function(){
 $("#idb_review_snippets").append("<a href='"+this.review_link+"'>"+this.source+"</a>\"..."+this.snippet+"...\"Review date: "+this.review_date+"<a class='reviewlink' href='"+json.book.detail_link+"'>Review result: "+this.pos_or_neg+" <img src='"+this.smiley_or_sad_small+"' alt='iDreamBooks.com rating' title='"+this.pos_or_neg+"' /></a>");
 });
 $("#seemoreidb").attr('href', json.book.detail_link);
 }
}
You will also need the following CSS added to your OPACUserCSS syspref:
.review {
 margin-bottom: 20px;
}
a.idreambooksrating {
 font-size: 30px;
 color: #29ADE4;
 padding-left: 85px;
 line-height: 30px;
 text-decoration: none;
}
.idreambookslegend {
 font-size: small;
}
a.reviewlink,a.reviewlink:visited {
 text-decoration: none;
 color: black;
 font-weight: normal;
}
.idreambookssummary a {
 color: #707070;
 text-decoration: none;
}
.idreambookssummary img, .idbresult img {
 vertical-align: middle;
}
.idbresult {
 color: #29ADE4;
 text-align: center;
 margin: 0.5em;
 padding: 0.5em;
}
.idbresult a, .idbresult a:visited {
 text-decoration: none;
 color: #29ADE4;
}
.idbresult img {
 padding-right: 6px;
}
==== Add iDreamBooks.com reviews tab to OPAC (3.10+) ====
* Developer: C & P Bibliography Services
* Purpose: Add a tab with snippets of reviews from iDreamBooks.com to the OPAC
* Status: Completed
* Staff interface or OPAC?: OPAC
* Version: 3.10+ with XSLT enabled for the OPAC details page (3.6-3.8 script above)
var isbn = $(".isbn:last").text().split(" ")[1];
if (isbn) {
 isbn = isbn.replace(/\W*$/, );
 if ($.browser.msie && parseInt($.browser.version, 10) >= 8 && window.XDomainRequest) {
 // Use Microsoft XDR for IE version 8 or above
 var xdr = new XDomainRequest();
 xdr.open("get", "http://idreambooks.com/newbooks/api.json?q="+encodeURIComponent(isbn)+"&key=8bf66516232d1b72f3e47df939653e1e");
 xdr.onload = function() {
 json = 'json = '+xdr.responseText; // the string now looks like.. json = { ... };
 eval(json); // json is now a regular JSON object
 parseIDBJSON(json); // parse using same function as for jQuery's success event
 }
 xdr.send();
 } else {
 $.getJSON("http://idreambooks.com/newbooks/api.json?q="+encodeURIComponent(isbn)+"&key=8bf66516232d1b72f3e47df939653e1e", function(json){
 parseIDBJSON(json);
 });
 }
}
function parseIDBJSON( json ) {
 if(json.total_results > 0 && json.book.rating > 0){
 var isbn = $(".isbn:last").text().split(" ")[1];
 //build new tab for critic reviews
 $("#bibliodescriptions").append('<a id="seemoreidb">More book reviews at iDreamBooks.com</a>');
 
 $("#bibliodescriptions").tabs('add', '#idb_critic_reviews', 'Book reviews by critics ( '+json.book.review_count+' )');
 //append happy-sad cloud review
 $("#catalogue_detail_biblio").append("<a href='"+json.book.detail_link+"'><img src='"+json.book.to_read_or_not_small+"' alt='"+json.book.title+" by "+json.book.author+"' title='Rating based on reviews of "+json.book.title+"'>"+json.book.rating+"%</a> <a href='http://www.idreambooks.com/'>rating based on reviews at iDreamBooks.com</a>");
 //insert data into Book reviews tab
 $.each(json.book.critic_reviews, function(){
 $("#idb_review_snippets").append("<a href='"+this.review_link+"'>"+this.source+"</a>\"..."+this.snippet+"...\"Review date: "+this.review_date+"<a class='reviewlink' href='"+json.book.detail_link+"'>Review result: "+this.pos_or_neg+" <img src='"+this.smiley_or_sad_small+"' alt='iDreamBooks.com rating' title='"+this.pos_or_neg+"' /></a>");
 });
 $("#seemoreidb").attr('href', json.book.detail_link);
 $("#tab_idb_critic_reviews").show();
 }
}
You will also need the following CSS added to your OPACUserCSS syspref:
.review {
 margin-bottom: 20px;
}
a.idreambooksrating {
 font-size: 30px;
 color: #29ADE4;
 padding-left: 85px;
 line-height: 30px;
 text-decoration: none;
}
.idreambookslegend {
 font-size: small;
}
a.reviewlink,a.reviewlink:visited {
 text-decoration: none;
 color: black;
 font-weight: normal;
}
.idreambookssummary a {
 color: #707070;
 text-decoration: none;
}
.idreambookssummary img, .idbresult img {
 vertical-align: middle;
}
.idbresult {
 color: #29ADE4;
 text-align: center;
 margin: 0.5em;
 padding: 0.5em;
}
.idbresult a, .idbresult a:visited {
 text-decoration: none;
 color: #29ADE4;
}
.idbresult img {
 padding-right: 6px;
}
=== Maps ===
==== Add a link to map the publisher's location ====
* Developer: Jared Camins-Esakov, C & P Bibliography Services
* Purpose: Add a link to map the publisher's location.
* Status: Completed
* Staff interface or OPAC?: OPAC
* Version: All
* Note: This particular implementation is for MARC21, and retrieves the location from an authority-controlled 751. In order to identify the correct 751, it looks for the relator code 'pup' (place of publication).
 
 $.get("/cgi-bin/koha/opac-export.pl",
 { bib: $("input[name='bib']").val(), format: "marcxml" },
 function(data){
 $(".publisher > span[class='label']:first").append("<a target='_blank' href='http://maps.google.com/maps?q=" + $(data).find("datafield[tag='751'] > subfield[code='4']:contains('pup')").parent().find("subfield[code='a']").text() + "'><img src='/opac-tmpl/prog/famfamfam/MP.png' alt='Show publisher on map' title='Show publisher on map' /></a>");
 }
 );
 
* Note: This particular implementation is for MARC21, and retrieves the location from the 260$a, then removes any trailing punctuation. For all but the most recent of books, this is likely to result in an inaccurate (or useless) map.
 
 $.get("/cgi-bin/koha/opac-export.pl",
 { bib: $("input[name='bib']").val(), format: "marcxml" },
 function(data){
 $(".publisher > span[class='label']:first").append("<a target='_blank' href='http://maps.google.com/maps?q=" + $(data).find("datafield[tag='260'] > subfield[code='a']").text().replace(/\W+$/, ) + "'><img src='/opac-tmpl/prog/famfamfam/MP.png' alt='Show publisher on map' title='Show publisher on map' /></a>");
 }
 );
 
=== Novelist ===
==== Duplicate Novelist readalikes into the right sidebar on opac-detail.pl ====
* Developer: Jason Robb (SEKLS)
* Purpose: Creates a brief preview of Novelist content on the right sidebar in opac-detail.pl to lure patrons down the page for full content.
* Status: Completed
* Staff interface or OPAC?: OPAC
* Version: 3.22 (Requires Novelist Select subscription)
* Note: I could only get this to work with two separate document.ready clauses. You can see the intended result in my OPAC.
//Wrap this in the first $(document).ready()
$("#NovelistSelect").clone().prop({ id: "NovSidebar"}).appendTo("#ulactioncontainer"); //Duplicates Novelist content and adds it to the right side of the page
//Wrap this in the second $(document).ready()
$(window).load(function() {
if ($(".NovSimilarTitles").length) {
 $("#NovSidebar h3").text("You might also like...");
 $("#NovSidebar").append("<a href='#NovelistSelect' name='#NovelistSelect' id='MoreBelow'>See more recommendations</a>");
 $('#MoreBelow').click(function(){
 $('html, body').animate({
 scrollTop: $( $.attr(this, 'href') ).offset().top
 }, 500);
 return false;
	});
	} else {
		$("#NovSidebar h3").hide();
		$("#NovelistSelect h3").hide();
	}
});
I adjusted some styles for a cleaner look. It hides much of the cloned content and formats what's left. The styles are somewhat specific to my OPAC so they'll likely need tweaked. This goes in the OPACUserCSS syspref.
#NovSidebar .NovSeriesInfo, #NovSidebar .NovSimilarSeries, #NovSidebar .NovSimilarAuthors, #NovSidebar .NovAppeals, #NovSidebar .NovGoodReads, #NovSidebar .NovLibraryAwareNewsletter, #NovSidebar .NoveResourceRecommendation, #NovSidebar .NovRelatedFeatures, #NovSidebar .NovLexileInfo, #NovSidebar em, .NovSimilarTitles > .NovSectionHeader, .NovSimilarTitles > .NovSectionBody > div {
	display: none;
	}
#NovSidebar > div {
 margin-bottom: -75px;
 }
#NovSidebar .NovSimilarTitles {
 margin-top: -30px;
 margin-bottom: 25px;
 overflow-y: hidden;
 padding-bottom: 0px;
 }
#MoreBelow {
 background: #fcb03f;
 color: white;
 display: block;
 float: right;
 font-size: medium;
 font-variant: unicase;
 font-weight: bolder;
 margin-right: -208px;
 margin-top: -145px;
 padding: 10px 0 10px 46px;
 transform: rotate(-90deg);
 width: 290px;
 transition: margin-top 0.5s ease;
	}
#MoreBelow:hover {
 margin-top: -135px;
	}
=== OverDrive ===
==== Enhance OverDrive or similar resource counts on OPAC results ====
* Developer: Christopher Brannon (Coeur d'Alene Public Library / Cooperative Information Network)
* Purpose: Turns the OverDrive (or other resource) counts on the results page into a placard to draw more attention to this resource
* Status: Completed
* Staff interface or OPAC?: OPAC
* Version: 18.05
* Notes: The line with the DOMSubtreeModified reference was added to wait for the search to end before enhancing, in case there were no results.
//Enhance OverDrive results
$("body").on('DOMSubtreeModified', "#overdrive-results", function() {
$('#overdrive-results').css('padding-top','20px').wrap('');
$('#overdrive-banner td').prepend('<img src="[LINK TO IMAGE]" width="150" style="float: left; padding-right: 20px;">');
});
//End OverDrive
=== Wikipedia ===
==== Add links out to Wikipedia for authors ====
* Developer: Stefano Bargioni (Pontificia Università della Santa Croce)
* Creation Date: 2014-02-14
* Purpose: Add a link for each author to bring the user to a Wikipedia search
* Status: Completed
* Staff interface or OPAC?: OPAC
* Version: all (tested in 3.12)
 
var names = $('h5.author a').not('.authlink');
for (var i=0; i < names.length; i++) {
	var name_string = $(names[i]).text(); // mostly surname, name
	var fs = (name_string+', ').split(', ');
	var H = new Array;
	H.push(' ');
	H.push('<a target="_blank" href="https://en.wikipedia.org/w/index.php?title=Special%3ASearch&search=');
	H.push(encodeURIComponent(fs[1]+' '+fs[0]));
	H.push('"><img src="https://upload.wikimedia.org/wikipedia/commons/b/b0/Wikipedia-favicon.png"/></a>');
	H.push('');
	$(names[i]).after(H.join());
};
 
* Developer: Jared Camins-Esakov, C & P Bibliography Services
* Purpose: Add a link for each author to bring the user to a Wikipedia search [obsolete]
* Status: Completed
* Staff interface or OPAC?: OPAC
* Version: before 3.12
 
 $("h5.author > a").each(function() {
 $("<a href='http://en.wikipedia.org/wiki/Special:Search?search=" + encodeURI($(this).text().replace(/\[.*\]/g, ).replace(/[\W\d]+$/, )) + "' title='Search for this person in Wikipedia'><img src='http://upload.wikimedia.org/wikipedia/commons/b/b0/Wikipedia-favicon.png'/></a>").insertAfter($(this));
 });
 
----
== Uncategorized ==
Category:Tips_&_Tricks
Category:Resources
Category:Library