[Koha-devel] New books display for koha

Nicholas van Rheede van Oudtshoorn vanoudt at gmail.com
Thu May 2 06:01:18 CEST 2013


Hello all!

A while back (a few years, I think!) I wrote and posted to this mailing
list a set of php scripts that provided a new books display. When we
recently upgraded our koha instance (shifting to Plack in the process!), I
decided to rewrite this new books display in perl.

And I thought I'd put it up here in case anyone was interested in it.

Perl's not my language of choice - so if there are any improvements to be
made, please let me know.

To use it, simply install the newbooksdisplay.pl in the opac cgi-bin
directory, and add the following snippet to the OpacMain systempreferences:

<h2 style="align="center">Newest books in the library</h2>
<div id="newbooks"></div>
<script type="text/javascript">
$("#newbooks").load("/cgi-bin/koha/newbooksdisplay.pl", function() {

KOHA.Google.GetCoverFromIsbn();

});

</script>


I've also modified the google-jackets.js to produce a nice artificial cover
if none is available from google books (currently only if the correct HTML5
data tags are supplied, as in the newbooksdisplay)


if (typeof KOHA == "undefined" || !KOHA) {
    var KOHA = {};
}

/**
 * A namespace for Google related functions.
 */
KOHA.Google = {


    /**
     * Search all:

     *    <div title="biblionumber" id="isbn" class="gbs-thumbnail"></div>
     * or
     *    <div title="biblionumber" id="isbn"
class="gbs-thumbnail-preview"></div>

     * and run a search with all collected isbns to Google Book Search.
     * The result is asynchronously returned by Google and catched by
     * gbsCallBack().
     */
    GetCoverFromIsbn: function(newWindow) {

        var bibkeys = [];
        $("div [id^=gbs-thumbnail]").each(function(i) {
            bibkeys.push($(this).attr("class").split(' ')[0]); // id=isbn
        });
        bibkeys = bibkeys.join(',');

        var scriptElement = document.createElement("script");
        this.openInNewWindow=newWindow;
        scriptElement.setAttribute("id", "jsonScript");
        scriptElement.setAttribute("src",

            "http://books.google.com/books?bibkeys=" + escape(bibkeys) +
            "&jscmd=viewapi&callback=KOHA.Google.gbsCallBack");

        scriptElement.setAttribute("type", "text/javascript");
        document.documentElement.firstChild.appendChild(scriptElement);

    },

    /**
     * Add cover pages <div

     * and link to preview if div id is gbs-thumbnail-preview
     */
    gbsCallBack: function(booksInfo) {
         var target = '';
         if (this.openInNewWindow) {
            target = 'target="_blank" ';

         }
         for (id in booksInfo) {
             var book = booksInfo[id];
             $("."+book.bib_key).each(function() {
		var gbsre = /^gbs-thumbnail/;
		if ( gbsre.exec($(this).attr("id")) ) {

	                 var a = document.createElement("a");
        	         a.href = book.info_url;
                	 if (typeof(book.thumbnail_url) != "undefined") {
	                     var img = document.createElement("img");

			     img.setAttribute("class","thumbnail");
                	     img.src = book.thumbnail_url+"&zoom=1";
        	             $(this).append(img);
	                     var re = /^gbs-thumbnail-preview/;

        	             if ( re.exec($(this).attr("id")) ) {
                	         $(this).append(
                        	     '<div style="margin-bottom:5px;
margin-top:-5px;font-size:9px">' +

	                             '<a '+target+'href="' +
        	                     book.info_url +
                	             '"><img src="' +
                        	
'http://books.google.com/intl/en/googlebooks/images/gbs_preview_sticker1.gif'
+

	                             '"></a></div>'
        	                     );
	                     }
        	         } else if ($(this).attr('data-title')) {
					var fakeCoverDiv = document.createElement("div");

					$(fakeCoverDiv).attr("class", "fakeCover");
					$(this).append(fakeCoverDiv);
					var auSpan = document.createElement("span");
					$(auSpan).attr("class", "author");

					$(auSpan).html($(this).attr("data-author"));
					$(fakeCoverDiv).append(auSpan);
                                        var tiSpan =
document.createElement("span");
                                        $(tiSpan).attr("class", "title");


$(tiSpan).html($(this).attr("data-title"));
                                        $(fakeCoverDiv).append(tiSpan);
			 } else {
	                	     var message = document.createElement("span");

		                     $(message).attr("class","no-image");
        		             $(message).html(NO_GOOGLE_JACKET);
	                	     $(this).append(message);
	                 }
		}

             });
         }
     }
};
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.koha-community.org/pipermail/koha-devel/attachments/20130502/2d7f7188/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: newbooksdisplay.pl
Type: application/octet-stream
Size: 1301 bytes
Desc: not available
URL: <http://lists.koha-community.org/pipermail/koha-devel/attachments/20130502/2d7f7188/attachment.obj>


More information about the Koha-devel mailing list