Rephrase logs about start-search
[pazpar2-moved-to-github.git] / js / pz2.js
index ca0d28c..d252eaa 100644 (file)
--- a/js/pz2.js
+++ b/js/pz2.js
@@ -1,5 +1,20 @@
 /*
- * Mine
+ * !! WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING !!
+ *
+ * Do not edit this file. The current version of pz2.js now lives in
+ * its own git module ssh://git.indexdata.com/home/git/pub/pz2js and
+ * ALL FURTHER CHANGES SHOULD BE MADE TO THAT FILE.
+ *
+ * This copy will be removed as soon as we have good, solid Debian and
+ * Red Hat releases of the new independent pz2js package and have
+ * modified the pazpar2 packages to depend on it.
+ *
+ * !! WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING !!
+ */
+
+
+/*
+ * $Id$
 ** pz2.js - pazpar2's javascript client library.
 */
 
@@ -29,7 +44,7 @@ var pz2 = function ( paramArray )
     
     // at least one callback required
     if ( !paramArray )
-        throw new Error("Pz2.js: Array with parameters has to be suplied."); 
+        throw new Error("Pz2.js: Array with parameters has to be supplied."); 
 
     //supported pazpar2's protocol version
     this.suppProtoVer = '1';
@@ -79,6 +94,7 @@ var pz2 = function ( paramArray )
 
     // where are we?
     this.currentStart = 0;
+    // currentNum can be overwritten in show 
     this.currentNum = 20;
 
     // last full record retrieved
@@ -123,8 +139,10 @@ var pz2 = function ( paramArray )
     }
     // else, auto init session or wait for a user init?
     if (this.useSessions && paramArray.autoInit !== false) {
-        this.init(this.sessionId, this.serviceId);
+        this.init(this.sessionID, this.serviceId);
     }
+    // Version parameter
+    this.version = paramArray.version || null;
 };
 
 pz2.prototype = 
@@ -198,6 +216,9 @@ pz2.prototype =
                         context.sessionID = 
                             data.getElementsByTagName("session")[0]
                                 .childNodes[0].nodeValue;
+                        if (data.getElementsByTagName("keepAlive").length > 0) {
+                            context.keepAlive = data.getElementsByTagName("keepAlive")[0].childNodes[0].nodeValue;
+                        }
                         context.pingTimer =
                             setTimeout(
                                 function () {
@@ -278,13 +299,17 @@ pz2.prototype =
         else
             var start = 0;
 
-             var searchParams = { 
+       var searchParams = { 
           "command": "search",
           "query": this.currQuery, 
           "session": this.sessionID,
           "windowid" : window.name
         };
        
+        if( sort !== undefined ) {
+            this.currentSort = sort;
+           searchParams["sort"] = sort;
+       }
         if (filter !== undefined)
                searchParams["filter"] = filter;
 
@@ -360,7 +385,7 @@ pz2.prototype =
             }
         );
     },
-    show: function(start, num, sort)
+    show: function(start, num, sort, query_state)
     {
         if( !this.searchStatusOK && this.useSessions )
             throw new Error(
@@ -379,17 +404,23 @@ pz2.prototype =
 
         var context = this;
         var request = new pzHttpRequest(this.pz2String, this.errorHandler);
-        request.safeGet(
+       var requestParameters = 
           {
-            "command": "show", 
-            "session": this.sessionID, 
-            "start": this.currentStart,
-            "num": this.currentNum, 
-            "sort": this.currentSort, 
-            "block": 1,
-            "type": this.showResponseType,
-            "windowid" : window.name
-          },
+              "command": "show", 
+              "session": this.sessionID, 
+              "start": this.currentStart,
+              "num": this.currentNum, 
+              "sort": this.currentSort, 
+              "block": 1,
+              "type": this.showResponseType,
+              "windowid" : window.name
+          };
+        if (query_state)
+          requestParameters["query-state"] = query_state;
+       if (this.version && this.version > 0)
+           requestParameters["version"] = this.version;
+        request.safeGet(
+         requestParameters,
           function(data, type) {
             var show = null;
             var activeClients = 0;
@@ -432,7 +463,15 @@ pz2.prototype =
             } else {
               context.throwError('Show failed. Malformed WS resonse.',
                   114);
-            }
+            };
+           
+           var approxNode = data.getElementsByTagName("approximation");
+           if (approxNode && approxNode[0] && approxNode[0].childNodes[0] && approxNode[0].childNodes[0].nodeValue)
+               show['approximation'] = 
+                 Number( approxNode[0].childNodes[0].nodeValue);
+             
+
+             data.getElementsByTagName("")
             context.activeClients = activeClients; 
             context.showCounter++;
             var delay = context.showTime;
@@ -552,7 +591,9 @@ pz2.prototype =
                 "command": "termlist", 
                 "session": this.sessionID, 
                 "name": this.termKeys,
-                "windowid" : window.name
+                "windowid" : window.name, 
+               "version" : this.version
+       
             },
             function(data) {
                 if ( data.getElementsByTagName("termlist") ) {
@@ -582,12 +623,22 @@ pz2.prototype =
                                     .childNodes[0].nodeValue || 'ERROR'
                             };
 
+                           // Only for xtargets: id, records, filtered
                             var termIdNode = 
                                 terms[j].getElementsByTagName("id");
                             if(terms[j].getElementsByTagName("id").length)
                                 term["id"] = 
                                     termIdNode[0].childNodes[0].nodeValue;
                             termList[listName][j] = term;
+
+                           var recordsNode  = terms[j].getElementsByTagName("records");
+                           if (recordsNode && recordsNode.length)
+                               term["records"] = recordsNode[0].childNodes[0].nodeValue;
+                              
+                           var filteredNode  = terms[j].getElementsByTagName("filtered");
+                           if (filteredNode && filteredNode.length)
+                               term["filtered"] = filteredNode[0].childNodes[0].nodeValue;
+                              
                         }
                     }
 
@@ -633,7 +684,8 @@ pz2.prototype =
                "command": "bytarget", 
                "session": this.sessionID, 
                "block": 1,
-               "windowid" : window.name
+               "windowid" : window.name,
+               "version" : this.version
            },
             function(data) {
                 if ( data.getElementsByTagName("status")[0]
@@ -647,10 +699,17 @@ pz2.prototype =
                                 == Node.ELEMENT_NODE ) {
                                 var nodeName = 
                                     targetNodes[i].childNodes[j].nodeName;
-                                var nodeText = 
-                                    targetNodes[i].childNodes[j]
-                                        .firstChild.nodeValue;
-                                bytarget[i][nodeName] = nodeText;
+                               if (targetNodes[i].childNodes[j].firstChild != null) 
+                               {
+                                    var nodeText = targetNodes[i].childNodes[j]
+                                       .firstChild.nodeValue;
+                                    bytarget[i][nodeName] = nodeText;
+                               }
+                               else { 
+                                   bytarget[i][nodeName] = "";  
+                               }
+
+
                             }
                         }
                         if (bytarget[i]["state"]=="Client_Disconnected") {
@@ -1021,35 +1080,43 @@ Element_parseChildNodes = function (node)
 {
     var parsed = {};
     var hasChildElems = false;
+    var textContent = '';
 
     if (node.hasChildNodes()) {
         var children = node.childNodes;
         for (var i = 0; i < children.length; i++) {
             var child = children[i];
-            if (child.nodeType == Node.ELEMENT_NODE) {
+            switch (child.nodeType) {
+              case Node.ELEMENT_NODE:
                 hasChildElems = true;
                 var nodeName = child.nodeName; 
                 if (!(nodeName in parsed))
                     parsed[nodeName] = [];
                 parsed[nodeName].push(Element_parseChildNodes(child));
+                break;
+              case Node.TEXT_NODE:
+                textContent += child.nodeValue;
+                break;
+              case Node.CDATA_SECTION_NODE:
+                textContent += child.nodeValue;
+                break;
             }
         }
     }
 
     var attrs = node.attributes;
     for (var i = 0; i < attrs.length; i++) {
+        hasChildElems = true;
         var attrName = '@' + attrs[i].nodeName;
         var attrValue = attrs[i].nodeValue;
         parsed[attrName] = attrValue;
     }
 
-    // if no nested elements, get text content
-    if (node.hasChildNodes() && !hasChildElems) {
-        if (node.attributes.length) 
-            parsed['#text'] = node.firstChild.nodeValue;
-        else
-            parsed = node.firstChild.nodeValue;
-    }
+    // if no nested elements/attrs set value to text
+    if (hasChildElems)
+      parsed['#text'] = textContent;
+    else
+      parsed = textContent;
     
     return parsed;
 }