Fire test against z3950.indexdata.com/marc instead.
[pazpar2-moved-to-github.git] / www / masterkey / js / client.js
index 44426f2..d2e3985 100644 (file)
@@ -1,16 +1,29 @@
 /*
-** $Id: client.js,v 1.15 2007-04-14 06:12:21 quinn Exp $
+** $Id: client.js,v 1.23 2007-05-16 07:53:32 jakub Exp $
 ** MasterKey - pazpar2's javascript client .
 */
 
+// check for pz2.js
+if(typeof window.pz2 == "undefined"){
+    throw new Error("Client requires pz2.js library.");
+}
+
+// check for jQuery
+if(typeof window.jQuery == "undefined"){
+    throw new Error("Client requires requires jQuery library");
+}
+
 /* start with creating pz2 object and passing it event handlers*/
-var my_paz = new pz2( { "onshow": my_onshow,
+var my_paz = new pz2({ 
+                    "onshow": my_onshow,
                     //"showtime": 1000,
                     //"onstat": my_onstat,
                     "onterm": my_onterm,
                     "termlist": "xtargets,subject,author,date",
                     //"onbytarget": my_onbytarget,
-                    "onrecord": my_onrecord } );
+                    "onrecord": my_onrecord,
+                    "errorhandler": my_errorhandler
+                    });
 
 /* some state variable */
 var currentSort = 'relevance';
@@ -24,6 +37,8 @@ var currentDetailedData = null;
 var termStartup = true;
 var advancedOn = false;
 
+var showBriefLocations = false;
+
 /* wait until the DOM is ready and register basic handlers */
 $(document).ready( function() { 
                     document.search.onsubmit = onFormSubmitEventHandler;
@@ -55,8 +70,7 @@ function onFormSubmitEventHandler() {
     curQuery.clearFilter();
     fireSearch();
     drawBreadcrumb();
-    $('div.content').show();
-    $("div.leftbar").show();
+    $('div.motd').empty();
     return false;
 }
 
@@ -65,6 +79,16 @@ function onFormSubmitEventHandler() {
 ** pz2 Event Handlers ***********************************************************
 *********************************************************************************
 */
+function my_errorhandler(err)
+{
+    switch (err.message) 
+    {
+        case 'QUERY': alert("Your query was not understood. Please rephrase."); break;
+        case 'NOTARGETS': alert("You are not allowed to search any targets."); break;
+        case 'HTTP': alert("There were problems with the connection."); break;
+        default: alert(err.message);
+    }
+}
 
 /*
 ** data.hits["md-title"], data.hits["md-author"], data.hits.recid, data.hits.count
@@ -72,6 +96,9 @@ function onFormSubmitEventHandler() {
 */
 function my_onshow(data)
 {
+    $('div.content').show();
+    $("div.leftbar").show();
+    
     var recsBody = $('div.records');
     recsBody.empty();
     
@@ -99,7 +126,7 @@ function my_onshow(data)
         if( author ) {
             recBody.append('<i> by </i>');
             $('<a name="author" class="recAuthor">'+author+'</a>\n').click(function(){ 
-                            refine(this.name, this.firstChild.nodeValue) }).appendTo(recBody);
+                            refine("authoronly", this.firstChild.nodeValue) }).appendTo(recBody);
         }
 
         if( currentDetailedId == id ) {
@@ -107,9 +134,22 @@ function my_onshow(data)
             drawDetailedRec(detailBox);
         }
 
-        if( count > 1 ) {
-            recBody.append('<span> ('+count+')</span>');
-        }
+       if (showBriefLocations) {
+           var location = data.hits[i]['location'];
+           var l;
+           var list = '';
+           for (l in location) {
+               if (list)
+                   list += ', ';
+               list += location[l].name;
+           }
+           recBody.append('<span> ('+list+')</span>');
+       }
+       else {
+           if( count > 1 ) {
+               recBody.append('<span> ('+count+')</span>');
+           }
+       }
 
         recsBody.append('<div class="resultNum">'+(currentPage*currentResultsPerPage+i+1)+'.</a>');
         recsBody.append(recBody);
@@ -167,7 +207,7 @@ function my_onterm(data)
                     listItem.appendTo(listEntries);
                 } else {
                     var listItem = $('<a class="sub" name="'+key+'">'+data[key][i].name
-                            /*+'<span> ('+data[key][i].freq+')</span>'*/+'</a>');
+                            +'<span> ('+data[key][i].freq+')</span>'+'</a>');
                     listItem.click(function(){ refine(this.name, this.firstChild.nodeValue) });
                     listItem.appendTo(listEntries);
                 }
@@ -191,7 +231,7 @@ function my_onterm(data)
                     listItem.appendTo(listEntries);
                 } else {
                     var listItem = $('<a class="sub" name="'+key+'">'+data[key][i].name
-                                /*+'<span> ('+data[key][i].freq+')</span>'*/+'</a>').click(function(){ 
+                                +'<span> ('+data[key][i].freq+')</span>'+'</a>').click(function(){ 
                                                                         refine(this.name, this.firstChild.nodeValue) });
                     listItem.appendTo(listEntries);
                 }
@@ -254,28 +294,37 @@ function drawDetailedRec(detailBox)
     var detailTable = $('<table></table>');
     var recLocation = currentDetailedData["location"];
 
-    if( recLocation )
-        detailTable.append('<tr><td class="item">Available at:</td><td>&nbsp;</td></tr>');
-
-    for(var i=0; i < recLocation.length; i++)
-    {
-       var url = recLocation[i]["md-url"];
-       var date = recLocation[i]["md-date"];
-       var description = recLocation[i]["md-description"];
-        detailTable.append('<tr><td class="item">&nbsp;</td><td>'+recLocation[i].name+'</td></tr>');
-       if (url) {
-           var tline = $('<tr><td>&nbsp;</td></tr>');
-           var td = $('<td></td>').appendTo(tline);
-           var tlink = $('<a>Go to resource</a>');
-           tlink.attr('href', url);;
-           tlink.attr('target', '_blank');
-           tlink.appendTo(td);
-           detailTable.append(tline);
+    var hdtarget;
+    if( recLocation ) {
+        hdtarget = $('<tr><td class="item" align="right">Available at:&nbsp;</td></tr>');
+       detailTable.append(hdtarget);
+
+       for(var i=0; i < recLocation.length; i++)
+       {
+           if (!hdtarget)
+               hdtarget = $('<tr><td class="item">&nbsp;</td></tr>').appendTo(detailTable);
+           var url = recLocation[i]["md-url"];
+           var description = recLocation[i]["md-description"];
+           var date = recLocation[i]["md-date"];
+           var citation = recLocation[i]["md-citation"];
+           hdtarget.append('<td><b>'+recLocation[i].name+'</b></td>');
+           if (date)
+               detailTable.append($('<tr><td align="right">Date:&nbsp;</td><td>'+date+'</td></tr>'));
+           if (citation)
+               detailTable.append($('<tr><td align="right" valign="top">Citation:&nbsp;</td><td>'+citation+'</td></tr>'));
+           if (description)
+               detailTable.append($('<tr><td>&nbsp</td><td>'+description+'</td></tr>'));
+           if (url) {
+               var tline = $('<tr><td>&nbsp;</td></tr>');
+               var td = $('<td></td>').appendTo(tline);
+               var tlink = $('<a>Go to resource</a>');
+               tlink.attr('href', url);;
+               tlink.attr('target', '_blank');
+               tlink.appendTo(td);
+               detailTable.append(tline);
+           }
+           hdtarget = undefined;
        }
-       if (date)
-           detailTable.append($('<tr><td>Date</td><td>'+date+'</td></tr>'));
-       if (description)
-           detailTable.append($('<tr><td>&nbsp</td><td>'+description+'</td></tr>'));
     }
 
     detailTable.appendTo(detailBox);
@@ -284,6 +333,7 @@ function drawDetailedRec(detailBox)
 function refine(field, value, opt)
 {
     switch(field) {
+        case "authoronly":  curQuery.reset(); curQuery.addTerm('au', value); break;
         case "author":  curQuery.addTerm('au', value); break;
         case "title":   curQuery.addTerm('ti', value); break;
         case "date":    curQuery.addTerm('date', value); break;