X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=js%2Fpz2.js;h=e161dea77ff876f841ededb7adf3376da8034361;hb=a0e47df912698c53fa14d1a81bb4cfa889b551f7;hp=062e124f589010997c8d1ea6953beb38ca2d1f4f;hpb=1075dbdd4d718fa6e8a2652e9f59d01fc150e0dc;p=pazpar2-moved-to-github.git diff --git a/js/pz2.js b/js/pz2.js index 062e124..e161dea 100644 --- a/js/pz2.js +++ b/js/pz2.js @@ -1,5 +1,5 @@ /* -** $Id: pz2.js,v 1.14 2007-05-16 07:53:32 jakub Exp $ +** $Id: pz2.js,v 1.25 2007-06-01 08:20:39 jakub Exp $ ** pz2.js - pazpar2's javascript client library. */ @@ -84,7 +84,7 @@ var pz2 = function(paramArray) { __myself.currQuery = null; //timers - __myself.statTime = paramArray.stattime || 2000; + __myself.statTime = paramArray.stattime || 1000; __myself.statTimer = null; __myself.termTime = paramArray.termtime || 1000; __myself.termTimer = null; @@ -94,10 +94,12 @@ var pz2 = function(paramArray) { __myself.bytargetTime = paramArray.bytargettime || 1000; __myself.bytargetTimer = null; - //useful? + // counters for each command and applied delay __myself.dumpFactor = 500; __myself.showCounter = 0; __myself.termCounter = 0; + __myself.statCounter = 0; + __myself.bytargetCounter = 0; // active clients, updated by stat and show // might be an issue since bytarget will poll accordingly @@ -181,6 +183,8 @@ pz2.prototype = { __myself.showCounter = 0; __myself.termCounter = 0; + __myself.bytargetCounter = 0; + __myself.statCounter = 0; if( !__myself.initStatusOK ) return; @@ -203,23 +207,25 @@ pz2.prototype = { //piggyback search __myself.show(0, num, sort); if ( __myself.statCallback ) - __myself.statTimer = setTimeout("__myself.stat()", __myself.statTime / 2); + __myself.stat(); + //__myself.statTimer = setTimeout("__myself.stat()", __myself.statTime / 4); if ( __myself.termlistCallback ) - //__myself.termlist(); - __myself.termTimer = setTimeout("__myself.termlist()", __myself.termTime / 2); + __myself.termlist(); + //__myself.termTimer = setTimeout("__myself.termlist()", __myself.termTime / 4); if ( __myself.bytargetCallback ) - __myself.bytargetTimer = setTimeout("__myself.bytarget()", __myself.bytargetTime / 2); + __myself.bytarget(); + //__myself.bytargetTimer = setTimeout("__myself.bytarget()", __myself.bytargetTime / 4); } else // if it gets here the http return code was 200 (pz2 errors are 417) // but the response was invalid, it should never occur - setTimeout("__myself.search(__myself.currQuery)", 1000); + setTimeout("__myself.search(__myself.currQuery)", 500); } ); }, stat: function() { - if( !__myself.searchStatusOK ) + if( !__myself.initStatusOK ) return; // if called explicitly takes precedence clearTimeout(__myself.statTimer); @@ -242,9 +248,13 @@ pz2.prototype = { "failed": Number( data.getElementsByTagName("failed")[0].childNodes[0].nodeValue ), "error": Number( data.getElementsByTagName("error")[0].childNodes[0].nodeValue ) }; + + __myself.statCounter++; + var delay = __myself.statTime + __myself.statCounter * __myself.dumpFactor; + if ( activeClients > 0 ) + __myself.statTimer = setTimeout("__myself.stat()", delay); + __myself.statCallback(stat); - if (activeClients > 0) - __myself.statTimer = setTimeout("__myself.stat()", __myself.statTime); } else // if it gets here the http return code was 200 (pz2 errors are 417) @@ -276,6 +286,7 @@ pz2.prototype = { // first parse the status data send along with records // this is strictly bound to the format var activeClients = Number( data.getElementsByTagName("activeclients")[0].childNodes[0].nodeValue ); + __myself.activeClients = activeClients; var show = { "activeclients": activeClients, "merged": Number( data.getElementsByTagName("merged")[0].childNodes[0].nodeValue ), @@ -309,13 +320,14 @@ pz2.prototype = { } } } - __myself.showCallback(show); __myself.showCounter++; var delay = __myself.showTime; if (__myself.showCounter > __myself.showFastCount) - delay *= 2; - if (activeClients > 0) + delay += __myself.showCounter * __myself.dumpFactor; + if ( activeClients > 0 ) __myself.showTimer = setTimeout("__myself.show()", delay); + + __myself.showCallback(show); } else // if it gets here the http return code was 200 (pz2 errors are 417) @@ -344,13 +356,14 @@ pz2.prototype = { record['xslDoc'] = __myself.xslDoc; } else { for ( i = 0; i < recordNode.childNodes.length; i++) { - if ( recordNode.childNodes[i].nodeType == Node.ELEMENT_NODE ) { + if ( recordNode.childNodes[i].nodeType == Node.ELEMENT_NODE + && recordNode.childNodes[i].nodeName != 'location' ) { var nodeName = recordNode.childNodes[i].nodeName; var nodeText = recordNode.childNodes[i].firstChild.nodeValue; record[nodeName] = nodeText; } } - // the location is hard coded + // the location might be empty!! var locationNodes = recordNode.getElementsByTagName("location"); record["location"] = new Array(); for ( i = 0; i < locationNodes.length; i++ ) { @@ -358,25 +371,25 @@ pz2.prototype = { "id": locationNodes[i].getAttribute("id"), "name": locationNodes[i].getAttribute("name") }; + for ( j = 0; j < locationNodes[i].childNodes.length; j++) { if ( locationNodes[i].childNodes[j].nodeType == Node.ELEMENT_NODE ) { var nodeName = locationNodes[i].childNodes[j].nodeName; - var nodeText; + var nodeText = ''; if (locationNodes[i].childNodes[j].firstChild) nodeText = locationNodes[i].childNodes[j].firstChild.nodeValue; - else - nodeText = ''; record["location"][i][nodeName] = nodeText; } } } } + __myself.recordCallback(record); } else // if it gets here the http return code was 200 (pz2 errors are 417) // but the response was invalid, it should never occur - setTimeout("__myself.record(__myself.currRecID)", 1000); + setTimeout("__myself.record(__myself.currRecID)", 500); } ); }, @@ -391,7 +404,9 @@ pz2.prototype = { { "command": "termlist", "session": __myself.sessionID, "name": __myself.termKeys }, function(data) { if ( data.getElementsByTagName("termlist") ) { - var termList = { "activeclients": Number( data.getElementsByTagName("activeclients")[0].childNodes[0].nodeValue ) }; + var activeClients = Number( data.getElementsByTagName("activeclients")[0].childNodes[0].nodeValue ); + __myself.activeClients = activeClients; + var termList = { "activeclients": activeClients }; var termLists = data.getElementsByTagName("list"); //for each termlist for (i = 0; i < termLists.length; i++) { @@ -413,10 +428,12 @@ pz2.prototype = { } } - __myself.termlistCallback(termList); __myself.termCounter++; - if (termList["activeclients"] > 0) - __myself.termTimer = setTimeout("__myself.termlist()", (__myself.termTime + __myself.termCounter*__myself.dumpFactor)); + var delay = __myself.termTime + __myself.termCounter * __myself.dumpFactor; + if ( activeClients > 0 ) + __myself.termTimer = setTimeout("__myself.termlist()", delay); + + __myself.termlistCallback(termList); } else // if it gets here the http return code was 200 (pz2 errors are 417) @@ -449,9 +466,13 @@ pz2.prototype = { } } } - __myself.bytargetCallback(bytarget); + + __myself.bytargetCounter++; + var delay = __myself.bytargetTime + __myself.bytargetCounter * __myself.dumpFactor; if ( __myself.activeClients > 0 ) - __myself.bytargetTimer = setTimeout("__myself.bytarget()", __myself.bytargetTime); + __myself.bytargetTimer = setTimeout("__myself.bytarget()", delay); + + __myself.bytargetCallback(bytarget); } else // if it gets here the http return code was 200 (pz2 errors are 417) @@ -508,17 +529,23 @@ pzHttpRequest.prototype = { this.callback = callback; + var getUrl = this.url; var paramArr = new Array(); + for ( var key in params ) { - paramArr.push(key + '=' + escape(params[key])); + paramArr.push(key + '=' + params[key] ); } + if ( paramArr.length ) + getUrl += '?' + paramArr.join('&'); + var context = this; - this.request.open( 'GET', this.url+'?'+paramArr.join('&'), true ); + this.request.open( 'GET', getUrl, true ); + this.request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); this.request.onreadystatechange = function () { context._handleResponse(); } - this.request.send(); + this.request.send(null); }, _handleResponse: function () @@ -625,7 +652,7 @@ pzQuery.prototype = { { var ccl = ''; if( this.simpleQuery != '') - ccl = '"'+this.simpleQuery+'"'; + ccl = this.simpleQuery; for(var i = 0; i < this.advTerms.length; i++) { if (ccl != '') ccl = ccl + ' and ';