X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=js%2Fpz2.js;h=1ee8096937613c1e5270048c9fb29534edb259c2;hb=64dccf5757a22cedd3c21ca834e3e02f39dd0504;hp=a0afe3a785d7a77c3f5baff605db92f5b9c484d4;hpb=fcae86df04ab28f83b889ca873275f68551928df;p=pazpar2-moved-to-github.git diff --git a/js/pz2.js b/js/pz2.js index a0afe3a..1ee8096 100644 --- a/js/pz2.js +++ b/js/pz2.js @@ -32,6 +32,7 @@ var pz2 = function ( paramArray ) throw new Error("Pz2.js: Array with parameters has to be supplied."); //supported pazpar2's protocol version + this.windowid = paramArray.windowid || window.name; this.suppProtoVer = '1'; if (typeof paramArray.pazpar2path != "undefined") this.pz2String = paramArray.pazpar2path; @@ -170,7 +171,7 @@ pz2.prototype = this.stop(); if ( this.resetCallback ) - this.resetCallback(); + this.resetCallback(this.windowid); }, init: function (sessionId, serviceId) @@ -214,7 +215,7 @@ pz2.prototype = context.keepAlive ); if ( context.initCallback ) - context.initCallback(); + context.initCallback(context.windowid); } else context.throwError('Init failed. Malformed WS resonse.', @@ -240,7 +241,7 @@ pz2.prototype = var request = new pzHttpRequest(this.pz2String, this.errorHandler); request.safeGet( - { "command": "ping", "session": this.sessionID, "windowid" : window.name }, + { "command": "ping", "session": this.sessionID, "windowid" : context.windowid }, function(data) { if ( data.getElementsByTagName("status")[0] .childNodes[0].nodeValue == "OK" ) { @@ -290,7 +291,7 @@ pz2.prototype = "command": "search", "query": this.currQuery, "session": this.sessionID, - "windowid" : window.name + "windowid" : this.windowid }; if( sort !== undefined ) { @@ -318,7 +319,8 @@ pz2.prototype = .childNodes[0].nodeValue == "OK" ) { context.searchStatusOK = true; //piggyback search - context.show(start, num, sort); + if (context.showCallback) + context.show(start, num, sort); if (context.statCallback) context.stat(); if (context.termlistCallback) @@ -343,7 +345,7 @@ pz2.prototype = var context = this; var request = new pzHttpRequest(this.pz2String, this.errorHandler); request.safeGet( - { "command": "stat", "session": this.sessionID, "windowid" : window.name }, + { "command": "stat", "session": this.sessionID, "windowid" : context.windowid }, function(data) { if ( data.getElementsByTagName("stat") ) { var activeClients = @@ -365,7 +367,7 @@ pz2.prototype = }, delay ); - context.statCallback(stat); + context.statCallback(stat, context.windowid); } else context.throwError('Stat failed. Malformed WS resonse.', @@ -401,7 +403,7 @@ pz2.prototype = "sort": this.currentSort, "block": 1, "type": this.showResponseType, - "windowid" : window.name + "windowid" : this.windowid }; if (query_state) requestParameters["query-state"] = query_state; @@ -471,7 +473,7 @@ pz2.prototype = context.show(); }, delay); - context.showCallback(show); + context.showCallback(show, context.windowid); } ); }, @@ -490,7 +492,7 @@ pz2.prototype = "command": "record", "session": this.sessionID, "id": this.currRecID, - "windowid" : window.name + "windowid" : this.windowid }; this.currRecOffset = null; @@ -523,7 +525,7 @@ pz2.prototype = record = new Array(); record['xmlDoc'] = data; record['offset'] = context.currRecOffset; - callback(record, args); + callback(record, args, context.windowid); //pz2 record } else if ( recordNode = data.getElementsByTagName("record")[0] ) { @@ -553,7 +555,7 @@ pz2.prototype = }, delay ); - callback(record, args); + callback(record, args, context.windowid); } else context.throwError('Record failed. Malformed WS resonse.', @@ -579,7 +581,7 @@ pz2.prototype = "command": "termlist", "session": this.sessionID, "name": this.termKeys, - "windowid" : window.name, + "windowid" : this.windowid, "version" : this.version }, @@ -642,7 +644,7 @@ pz2.prototype = delay ); - context.termlistCallback(termList); + context.termlistCallback(termList, context.windowid); } else context.throwError('Termlist failed. Malformed WS resonse.', @@ -672,7 +674,7 @@ pz2.prototype = "command": "bytarget", "session": this.sessionID, "block": 1, - "windowid" : window.name, + "windowid" : this.windowid, "version" : this.version }, function(data) { @@ -707,11 +709,6 @@ pz2.prototype = } else if (bytarget[i]["state"]=="Client_Working") { bytarget[i]["hits"] = "..."; } - if (bytarget[i].diagnostic == "1") { - bytarget[i].diagnostic = "Permanent system error"; - } else if (bytarget[i].diagnostic == "2") { - bytarget[i].diagnostic = "Temporary system error"; - } var targetsSuggestions = targetNodes[i].getElementsByTagName("suggestions"); if (targetsSuggestions != undefined && targetsSuggestions.length>0) { var suggestions = targetsSuggestions[0]; @@ -731,7 +728,7 @@ pz2.prototype = delay ); - context.bytargetCallback(bytarget); + context.bytargetCallback(bytarget, context.windowid); } else context.throwError('Bytarget failed. Malformed WS resonse.', @@ -768,24 +765,27 @@ pz2.prototype = ** AJAX HELPER CLASS *********************************************************** ******************************************************************************** */ -var pzHttpRequest = function (url, errorHandler, cookieDomain) { +var pzHttpRequest = function (url, errorHandler, cookieDomain, windowId) { this.maxUrlLength = 2048; this.request = null; this.url = url; this.errorHandler = errorHandler || null; this.async = true; this.requestHeaders = {}; - this.isXDomain = false; + this.isXDR = false; this.domainRegex = /https?:\/\/([^:/]+).*/; this.cookieDomain = cookieDomain || null; + this.windowId = windowId || window.name; var xhr = new XMLHttpRequest(); + var domain = this._getDomainFromUrl(url); if ("withCredentials" in xhr) { // XHR for Chrome/Firefox/Opera/Safari. - } else if (typeof XDomainRequest != "undefined") { - // XDomainRequest for IE. + } else if (domain && this._isCrossDomain(domain) && + typeof XDomainRequest != "undefined") { + // use XDR (IE7/8) when no other way xhr = new XDomainRequest(); - this.isXDomain = true; + this.isXDR = true; } else { // CORS not supported. } @@ -903,9 +903,9 @@ pzHttpRequest.prototype = //session cookie, resend it var domain = this._getDomainFromUrl(url); if (domain && this._isCrossDomain(domain) && - this.getCookie(domain+":SESSID")) { + this.getCookie(domain+":"+this.windowId+":SESSID")) { //rewrite the URL - var sessparam = ';jsessionid=' + this.getCookie(domain+":SESSID"); + var sessparam = ';jsessionid=' + this.getCookie(domain+":"+this.windowId+":SESSID"); var q = url.indexOf('?'); if (q == -1) { url += sessparam; @@ -914,12 +914,12 @@ pzHttpRequest.prototype = } } this.request.open( type, url, this.async ); - if (!this.isXDomain) { + if (!this.isXDR) { //setting headers is only allowed with XHR for (var key in this.requestHeaders) this.request.setRequestHeader(key, this.requestHeaders[key]); } - if (this.isXDomain) { + if (this.isXDR) { this.request.onload = function () { //fake XHR props context.request.status = 200; @@ -956,7 +956,7 @@ pzHttpRequest.prototype = // pick up appplication errors first var errNode = null; // xdomainreq does not have responseXML - if (this.isXDomain) { + if (this.isXDR) { if (this.request.contentType.match(/\/xml/)){ var dom = new ActiveXObject('Microsoft.XMLDOM'); dom.async = false; @@ -1017,7 +1017,7 @@ pzHttpRequest.prototype = var jsessionId = this.request.responseXML .documentElement.getAttribute('jsessionId'); if (jsessionId) - this.setCookie(domain+":SESSID", jsessionId); + this.setCookie(domain+":"+this.windowId+":SESSID", jsessionId); } this.callback(this.request.responseXML); } else {