From: Jakub Skoczen Date: Thu, 8 Mar 2007 15:36:43 +0000 (+0000) Subject: pz2.js update X-Git-Tag: stable.27032007~22 X-Git-Url: http://lists.indexdata.com/cgi-bin?a=commitdiff_plain;h=4d6b51c55019d441c826a0afa82930331321e772;p=pazpar2-moved-to-github.git pz2.js update --- diff --git a/www/pz2_js/client_pz2.js b/www/pz2_js/client_pz2.js index 08cff97..1ae5dcb 100644 --- a/www/pz2_js/client_pz2.js +++ b/www/pz2_js/client_pz2.js @@ -1,11 +1,22 @@ function init() { - my_paz = new pz2( { "onshow": my_onshow, "onstat": my_onstat, "onterm": my_onterm }, true ); + my_paz = new pz2( { "onshow": my_onshow, + "onstat": my_onstat, + "onterm": my_onterm, + "termlist": "subject,author", + "onrecord": my_onrecord } ); } function my_onshow(data) { var body = document.getElementById("body"); - - body.innerHTML = '
active clients: ' + data.activeclients + '
' + + body.innerHTML = ""; + for ( i = 0; i < data.hits.length; i++) { + var hit = data.hits[i]; + body.innerHTML += '
' + i + + '. ' + hit["md-title"] + + ' by ' + hit["md-author"] + '
'; + } + body.innerHTML += "
"; + body.innerHTML += '
active clients: ' + data.activeclients + '
' + '
merged: ' + data.merged + '
' + '
total: ' + data.total + '
' + '
start: ' + data.start + '
' + @@ -14,7 +25,6 @@ function my_onshow(data) { function my_onstat(data) { var stat = document.getElementById("stat"); - stat.innerHTML = '
active clients: ' + data.activeclients + '
' + '
hits: ' + data.hits + '
' + '
records: ' + data.records + '
' + @@ -24,9 +34,23 @@ function my_onstat(data) { function my_onterm(data) { var termlist = document.getElementById("termlist"); - termlist.innerHTML = ""; + termlist.innerHTML += "
--Author--
"; for ( i = 0; i < data.author.length; i++ ) { termlist.innerHTML += '
' + data.author[i].name + ' (' + data.author[i].freq + ')
'; } + termlist.innerHTML += "
"; + termlist.innerHTML += "
--Subject--
"; + for ( i = 0; i < data.subject.length; i++ ) { + termlist.innerHTML += '
' + data.subject[i].name + ' (' + data.subject[i].freq + ')
'; + } +} + +function my_onrecord(data) { + recordDiv = document.getElementById(data.recid); + recordDiv.innerHTML = ""; + } diff --git a/www/pz2_js/index.html b/www/pz2_js/index.html index 4fb3225..38db988 100644 --- a/www/pz2_js/index.html +++ b/www/pz2_js/index.html @@ -6,11 +6,11 @@ -
Ttle : " + data["md-title"] + + "
Date : " + data["md-date"] + + "
Author : " + data["md-author"] + + "
Subject : " + data["md-subject"] + "
+
- - + - - + +
pz2.js test -
+ Search: @@ -18,16 +18,12 @@
 Show results: + TERMLISTS:
RESULS:
-   - - Status: -  STATUS:
diff --git a/www/pz2_js/pz2.js b/www/pz2_js/pz2.js index 95dbf64..84420e5 100644 --- a/www/pz2_js/pz2.js +++ b/www/pz2_js/pz2.js @@ -3,17 +3,27 @@ if(typeof window.pz2 == "undefined") { window.undefined = window.undefined; var pz2 = function(callbackArr, autoInit, keepAlive) { - // - if ( callbackArr == null ) - return null; - //for convenience myself = this; + + // at least one callback required + if ( !callbackArr ) + throw new Error("Callback parameters array has to be suplied when instantiating a class"); + + // function callbacks + myself.statCallback = callbackArr.onstat; + myself.showCallback = callbackArr.onshow; + myself.termlistCallback = callbackArr.onterm; + myself.recordCallback = callbackArr.onrecord || null; + + // termlist keys + myself.termKeys = callbackArr.termlist || "subject"; myself.pz2String = "search.pz2"; - myself.sessionID; - myself.initStatus = 0; - myself.pingStatus = 0; + myself.sessionID = null; + myself.initStatusOK = false; + myself.pingStatusOK = false; + myself.searchStatusOK = false; myself.keepAlive = 50000; if ( keepAlive < myself.keepAlive ) @@ -21,22 +31,26 @@ var pz2 = function(callbackArr, autoInit, keepAlive) { // for sorting myself.currentSort = "relevance"; - myself.sortKeywords = [ "relevance", "title", "author" ]; - - // function callbacks - myself.statCallback = callbackArr.onstat; - myself.showCallback = callbackArr.onshow; - myself.termlistCallback = callbackArr.onterm; + // where are we? + myself.currentStart = 0; + myself.currentNum = 20; //timers myself.statTime = 2000; - myself.statTimer; + myself.statTimer = null; myself.termTime = 1000; - myself.termTimer; + myself.termTimer = null; myself.showTime = 1000; - myself.showTimer; + myself.showTimer = null; - if (autoInit == true) + // error handling + $(document).ajaxError( + function (request, settings, exception) { + if ( settings.responseXML && settings.responseXML.getElementsByTagName("error")[0].childNodes[0].nodeValue) + throw new Error( settings.responseXML.getElementsByTagName("error")[0].childNodes[0].nodeValue); + }); + + if (autoInit !== false) myself.init(myself.keepAlive); } pz2.prototype = { @@ -45,24 +59,25 @@ pz2.prototype = { $.get( myself.pz2String, { command: "init" }, function(data) { - if ( data.getElementsByTagName("status")[0].childNodes[0].nodeValue == "OK" ) - myself.initStatus = 1; - myself.sessionID = data.getElementsByTagName("session")[0].childNodes[0].nodeValue; - setTimeout(myself.ping, myself.keepAlive); + if ( data.getElementsByTagName("status")[0].childNodes[0].nodeValue == "OK" ) { + myself.initStatusOK = true; + myself.sessionID = data.getElementsByTagName("session")[0].childNodes[0].nodeValue; + setTimeout(myself.ping, myself.keepAlive); + } } ); }, // no need to ping explicitly ping: function() { - if( !myself.initStatus ) + if( !myself.initStatusOK ) return; // session is not initialized code here $.get( myself.pz2String, { command: "ping", session: myself.sessionID }, function(data) { if ( data.getElementsByTagName("status")[0].childNodes[0].nodeValue == "OK" ) { - myself.pingStatus = 1; - setTimeout(myself.ping, myself.keepAlive); + myself.pingStatusOK = true; + setTimeout("myself.ping()", myself.keepAlive); } else location = "?"; @@ -73,19 +88,19 @@ pz2.prototype = { clearTimeout(myself.statTimer); clearTimeout(myself.showTimer); clearTimeout(myself.termTimer); - if( !myself.initStatus ) + if( !myself.initStatusOK ) return; $.get( myself.pz2String, { command: "search", session: myself.sessionID, query: query }, function(data) { if ( data.getElementsByTagName("status")[0].childNodes[0].nodeValue == "OK" ) { - myself.searchStatus = 1; + myself.searchStatusOK = true; //piggyback search myself.show(0, num, sort) if ( myself.statCallback ) - myself.statTimer = setTimeout(myself.stat, myself.statTime / 2); + myself.statTimer = setTimeout("myself.stat()", myself.statTime / 2); if ( myself.termlistCallback ) - myself.termTimer = setTimeout(myself.termlist, myself.termTime / 2); + myself.termTimer = setTimeout("myself.termlist()", myself.termTime / 2); } else location = "?"; @@ -93,8 +108,8 @@ pz2.prototype = { ); }, // callback, not to be called explicitly - stat: function() { - if( !myself.searchStatus ) + stat: function(test) { + if( !myself.searchStatusOK ) return; $.get( myself.pz2String, { command: "stat", session: myself.sessionID }, @@ -115,10 +130,10 @@ pz2.prototype = { } myself.statCallback(stat); if (activeClients > 0) - myself.statTimer = setTimeout(myself.stat, myself.statTime); + myself.statTimer = setTimeout("myself.stat()", myself.statTime); } else - myself.statTimer = setTimeout(myself.stat, myself.statTime / 4) + myself.statTimer = setTimeout("myself.stat()", myself.statTime / 4) //location = "?"; // some error handling } @@ -127,12 +142,18 @@ pz2.prototype = { //callback not to be called explicitly show: function(start, num, sort) { clearTimeout(myself.showTimer); - if( !myself.searchStatus ) + if( !myself.searchStatusOK ) return; - if ( myself.sortKeywords.some( function(element, index, arr) { if (element == sort) return true; else return false; } ) ) + + if( sort !== undefined ) myself.currentSort = sort; + if( start !== undefined ) + myself.currentStart = Number( start ); + if( num !== undefined ) + myself.currentNum = Number( num ); + $.get( myself.pz2String, - { "command": "show", "session": myself.sessionID, "start": start, "num": num, "sort": myself.currentSort, "block": 1 }, + { "command": "show", "session": myself.sessionID, "start": myself.currentStart, "num": myself.currentNum, "sort": myself.currentSort, "block": 1 }, function(data) { if ( data.getElementsByTagName("status")[0].childNodes[0].nodeValue == "OK" ) { var activeClients = Number( data.getElementsByTagName("activeclients")[0].childNodes[0].nodeValue ); @@ -141,27 +162,66 @@ pz2.prototype = { "merged": Number( data.getElementsByTagName("merged")[0].childNodes[0].nodeValue ), "total": Number( data.getElementsByTagName("total")[0].childNodes[0].nodeValue ), "start": Number( data.getElementsByTagName("start")[0].childNodes[0].nodeValue ), - "num": Number( data.getElementsByTagName("num")[0].childNodes[0].nodeValue ) + "num": Number( data.getElementsByTagName("num")[0].childNodes[0].nodeValue ), + "hits": [] + } + + var hits = data.getElementsByTagName("hit"); + var hit = new Array(); + for (i = 0; i < hits.length; i++) { + show.hits[i] = new Array(); + for ( j = 0; j < hits[i].childNodes.length; j++) { + if ( hits[i].childNodes[j].nodeType == Node.ELEMENT_NODE ) { + var nodeName = hits[i].childNodes[j].nodeName; + var nodeText = hits[i].childNodes[j].firstChild.nodeValue; + show.hits[i][nodeName] = nodeText; + } + } } + //TODO include records myself.showCallback(show); if (activeClients > 0) - myself.showTimer = setTimeout("myself.show(" + start + "," + num + "," + sort + ")", myself.showTime); + myself.showTimer = setTimeout("myself.show()", myself.showTime); } else - myself.showTimer = setTimeout("myself.show(" + start + "," + num + "," + sort + ")", myself.showTime / 4); + myself.showTimer = setTimeout("myself.show()", myself.showTime / 4); // location = "?"; // some error handling } ); }, record: function(id) { + if( !myself.searchStatusOK ) + return; + $.get( myself.pz2String, + { "command": "record", "session": myself.sessionID, "id": id }, + function(data) { + var recordNode; + var record = new Array(); + if ( recordNode = data.getElementsByTagName("record")[0] ) { + for ( i = 0; i < recordNode.childNodes.length; i++) { + if ( recordNode.childNodes[i].nodeType == Node.ELEMENT_NODE ) { + var nodeName = recordNode.childNodes[i].nodeName; + var nodeText = recordNode.childNodes[i].firstChild.nodeValue; + record[nodeName] = nodeText; + } + } + myself.recordCallback(record); + } + else + alert(""); + //location = "?"; + // some error handling + } + ); + }, - termlist: function(name) { - if( !myself.searchStatus ) + termlist: function() { + if( !myself.searchStatusOK ) return; $.get( myself.pz2String, - { "command": "termlist", "session": myself.sessionID, "name": "author" }, + { "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 ) } @@ -182,10 +242,10 @@ pz2.prototype = { } myself.termlistCallback(termList); if (termList["activeclients"] > 0) - myself.termTimer = setTimeout("myself.termlist(" + name + ")" , myself.termTime); + myself.termTimer = setTimeout("myself.termlist()", myself.termTime); } else - myself.termTimer = setTimeout("myself.termlist(" + name + ")" , myself.termTime / 4); + myself.termTimer = setTimeout("myself.termlist()", myself.termTime / 4); //location = "?"; // some error handling }