pzHttpRequest: escape() used instead of encodeURI() for GET parameter values.
[pazpar2-moved-to-github.git] / js / pz2.js
index 3d4d8da..581b77e 100644 (file)
--- a/js/pz2.js
+++ b/js/pz2.js
@@ -1,5 +1,5 @@
 /*
-** $Id: pz2.js,v 1.51 2007-08-30 13:24:37 jakub Exp $
+** $Id: pz2.js,v 1.56 2007-09-12 08:57:14 jakub Exp $
 ** pz2.js - pazpar2's javascript client library.
 */
 
@@ -36,7 +36,10 @@ var pz2 = function ( paramArray )
 
     //supported pazpar2's protocol version
     __myself.suppProtoVer = '1';
-    __myself.pz2String = paramArray.pazpar2path || "/pazpar2/search.pz2";
+    if (typeof paramArray.pazpar2path != "undefined")
+        __myself.pz2String = paramArray.pazpar2path;
+    else
+        __myself.pz2String = "/pazpar2/search.pz2";
     __myself.useSessions = true;
     
     __myself.stylesheet = paramArray.detailstylesheet || null;
@@ -469,7 +472,7 @@ pz2.prototype =
 
     termlist: function()
     {
-        if( !__myself.searchStatusOK && __.myself.useSessions )
+        if( !__myself.searchStatusOK && __myself.useSessions )
             throw new Error('Pz2.js: termlist command has to be preceded with a search command.');
 
         // if called explicitly takes precedence
@@ -652,7 +655,7 @@ pzHttpRequest.prototype =
         var el = params;
         for (var key in el) {
             if (el[key] != null) {
-                getUrl += sep + key + '=' + encodeURI(el[key]);
+                getUrl += sep + key + '=' + escape(el[key]);
                 sep = '&';
             }
         }
@@ -801,7 +804,7 @@ Element_getTextContent = function (DOM_Element)
 {
     if ( typeof DOM_Element.textContent != 'undefined' ) {
         return DOM_Element.textContent;
-    } else if (DOM_Element.text ) {
+    } else if (typeof DOM_Element.text != 'undefined') {
         return DOM_Element.text;
     } else {
         throw new Error("Cannot get text content of the node, no such method.");
@@ -813,16 +816,83 @@ Element_getTextContent = function (DOM_Element)
 ** QUERY CLASS ******************************************************************
 *********************************************************************************
 */
-var pzQuery = function()
+
+var pzFilter = function()
 {
+    this.filterHash = new Array();
+    this.filterNums = 0;
+};
+
+pzFilter.prototype = 
+{
+    addFilter: function(name, value)
+    {
+        var filter = {"name": name, "id": value };
+        this.filterHash[this.filterHash.length] = filter;
+        this.filterNums++
+        return  this.filterHash.length - 1;
+    },
+    
+    setFilter: function(name, value)
+    {
+        this.filterHash = new Array();
+        this.filterNums = 0;
+        this.addFilter(name, value);
+    },
+    
+    getFilter: function(index)
+    {
+        return this.filterHash[index].id;
+    },
+    
+    getFilterName: function(index)
+    {
+        return this.filterHash[index].name;
+    },
+    
+    removeFilter: function(index)
+    {
+        delete this.filterHash[index];
+        this.filterNums--;
+    },
+    
+    clearFilter: function()
+    {
+        this.filterHash = new Array();
+        this.filterNums = 0;
+    },
+    
+    getFilterString: function()
+    { 
+        if( this.filterNums <= 0 ) {
+            return undefined;
+        }
+
+        var filter = 'pz:id=';
+        for(var i = 0; i < this.filterHash.length; i++)
+        {
+            if (this.filterHash[i] == undefined) continue;
+            if (filter > 'pz:id=') filter = filter + '|';            
+            filter += this.filterHash[i].id; 
+        }
+        return filter;
+    }
+};
+
+var mkState = function()
+{
+    this.sort = 'relevance';
+    this.perPage = 20;
+    this.page = 0;
     this.simpleQuery = '';
     this.singleFilter = null;
     this.advTerms = new Array();
-    this.filterHash = new Array();
     this.numTerms = 0;
-    this.filterNums = 0;
+    this.action = '';
 };
-pzQuery.prototype = {
+
+mkState.prototype = 
+{
     reset: function()
     {
         this.simpleQuery = '';
@@ -830,24 +900,29 @@ pzQuery.prototype = {
         this.simpleFilter = null;
         this.numTerms = 0;
     },
+    
     clearSimpleQuery: function()
     {
         this.simpleQuery = '';
     },
+    
     addTerm: function(field, value)
     {
         var term = {"field": field, "value": value};
         this.advTerms[this.numTerms] = term;
         this.numTerms++;
     },
+    
     getTermValueByIdx: function(index)
     {
         return this.advTerms[index].value;
     },
+    
     getTermFieldByIdx: function(index)
     {
         return this.advTerms[index].field;
     },
+    
     /* semicolon separated list of terms for given field*/
     getTermsByField: function(field)
     {
@@ -859,21 +934,25 @@ pzQuery.prototype = {
         }
         return terms;
     },
+    
     addTermsFromList: function(inputString, field)
     {
         var inputArr = inputString.split(';');
         for(var i=0; i < inputArr.length; i++)
         {
             if(inputArr[i].length < 3) continue;
-            this.advTerms[this.numTerms] = {"field": field, "value": inputArr[i] };
+            this.advTerms[this.numTerms] 
+                = {"field": field, "value": inputArr[i] };
             this.numTerms++;
         }
     },
+    
     removeTermByIdx: function(index)
     {
         this.advTerms.splice(index, 1);
         this.numTerms--;
     },
+    
     toCCL: function()
     {   
         var ccl = '';
@@ -882,77 +961,40 @@ pzQuery.prototype = {
         for(var i = 0; i < this.advTerms.length; i++)
         {
             if (ccl != '') ccl = ccl + ' and ';
-            ccl = ccl + this.advTerms[i].field+'="'+this.advTerms[i].value+'"';
+            ccl = ccl + this.advTerms[i].field
+                +'="'+this.advTerms[i].value+'"';
         }
         return ccl;
     },
-    addFilter: function(name, value)
-    {
-        var filter = {"name": name, "id": value };
-        this.filterHash[this.filterHash.length] = filter;
-        this.filterNums++
-        return  this.filterHash.length - 1;
-    },
-    setFilter: function(name, value)
-    {
-        this.filterHash = new Array();
-        this.filterNums = 0;
-        this.addFilter(name, value);
-    },
-    getFilter: function(index)
-    {
-        return this.filterHash[index].id;
-    },
-    getFilterName: function(index)
-    {
-        return this.filterHash[index].name;
-    },
-    removeFilter: function(index)
-    {
-        delete this.filterHash[index];
-        this.filterNums--;
-    },
-    clearFilter: function()
-    {
-        this.filterHash = new Array();
-        this.filterNums = 0;
-    },
-    getFilterString: function()
-    {
-        //temporary
-        if( this.singleFilter != null ) {
-            return 'pz:id='+this.singleFilter.id;
-        } 
-        else if( this.filterNums <= 0 ) {
-            return undefined;
-        }
-
-        var filter = 'pz:id=';
-        for(var i = 0; i < this.filterHash.length; i++)
-        {
-            if (this.filterHash[i] == undefined) continue;
-            if (filter > 'pz:id=') filter = filter + '|';            
-            filter += this.filterHash[i].id; 
-        }
-        return filter;
-    },
+    
     totalLength: function()
     {
         var simpleLength = this.simpleQuery != '' ? 1 : 0;
         return this.advTerms.length + simpleLength;
     },
+    
     clearSingleFilter: function()
     {
         this.singleFilter = null;
     },
+    
     setSingleFilter: function(name, value)
     {
         this.singleFilter = {"name": name, "id": value };
     },
+    
     getSingleFilterName: function()
     {
         return this.singleFilter.name;
-    }
-}
+    },
 
+    getSingleFilterString: function()
+    {
+        if( this.singleFilter != null ) {
+            return 'pz:id='+this.singleFilter.id;
+        } else {
+            return undefined;
+        }
+    }
+};
 }