Back button works in firefox.
[pazpar2-moved-to-github.git] / www / test1 / index.html
index 23a3c89..d6d548c 100644 (file)
@@ -21,6 +21,8 @@ var showtimer;
 var termtimer;
 var stattimer;
 var startrec;
+var session_cells = Array('query');
+var old_session = session_read();
 
 function GetXmlHttpObject()
 { 
@@ -103,7 +105,7 @@ function show_records()
     var xml = xshow.responseXML;
     var body = document.getElementById("body");
     var hits = xml.getElementsByTagName("hit");
-    if (!hits[0])
+    if (!hits[0]) // We should never get here with blocking operations
     {
        body.innerHTML = "No records yet";
        searchtimer = setTimeout(check_search, 250);
@@ -141,12 +143,12 @@ function show_records()
        }
        shown++;
        if (shown < 5)
-           searchtimer = setTimeout(check_search, 400);
-       else if (shown < 10)
            searchtimer = setTimeout(check_search, 1000);
        else
-           searchtimer = setTimeout(check_search, 4000);
+           searchtimer = setTimeout(check_search, 2000);
     }
+    if (!termtimer)
+       termtimer = setTimeout(check_termlist, 1000);
 }
 
 function check_search()
@@ -155,7 +157,9 @@ function check_search()
     var url = "search.pz2?" +
         "command=show" +
        "&start=" + startrec +
-       "&session=" + session;
+       "&num=15" +
+       "&session=" + session +
+       "&block=1";
     xshow = GetXmlHttpObject();
     xshow.onreadystatechange=show_records;
     xshow.open("GET", url);
@@ -165,8 +169,10 @@ function check_search()
 
 function refine_query (obj) {
     var query_cell = document.getElementById('query');
-
-    query_cell.value += ' and su=' + obj.innerHTML;
+    var subject = obj.innerHTML;
+    
+    subject = subject.replace(/[\(\)]/g, '');
+    query_cell.value += ' and su=(' + subject + ')';
     start_search();
 }
 
@@ -174,13 +180,15 @@ function show_termlist()
 {
     if (xtermlist.readyState != 4)
        return;
+
     var i;
     var xml = xtermlist.responseXML;
     var body = document.getElementById("termlist");
     var hits = xml.getElementsByTagName("term");
     if (!hits[0])
     {
-       termtimer = (check_termlist, 1000);
+       termtimer = setTimeout(check_termlist, 1000);
+        
     }
     else
     {
@@ -270,17 +278,20 @@ function search_started()
        alert(msg);
        return;
     }
-    searchtimer = setTimeout(check_search, 250);
-    termtimer = setTimeout(check_termlist, 1000);
+    check_search();
     stattimer = setTimeout(check_stat, 1000);
 }
 
 function start_search()
 {
     clearTimeout(termtimer);
+    termtimer = 0;
     clearTimeout(searchtimer);
+    searchtimer = 0;
     clearTimeout(stattimer);
+    stattimer = 0;
     clearTimeout(showtimer);
+    showtimer = 0;
     if (!targets_loaded)
     {
        alert("Please load targets first");
@@ -297,10 +308,86 @@ function start_search()
     xsearch.send(null);
     document.getElementById("termlist").innerHTML = '';
     document.getElementById("body").innerHTML = '';
+    update_history();
     shown = 0;
     startrec = 0;
 }
 
+
+function session_encode ()
+{
+    var i;
+    var session = '';
+
+    for (i = 0; i < session_cells.length; i++)
+    {
+        var name = session_cells[i];
+        var value = escape(document.getElementById(name).value);
+        session += '&' + name + '=' + value;
+    }
+
+    return session;
+}
+
+
+function session_restore (session)
+{
+    var fields = session.split(/&/);
+    var i;
+
+    for (i = 1; i < fields.length; i++)
+    {
+        var pair = fields[i].split(/=/);
+        var key = pair[0];
+        var value = pair[1];
+        var cell = document.getElementById(key);
+
+        cell.value = value;
+    }
+    
+}
+
+
+function session_read ()
+{
+    var ses = window.location.hash.replace(/^#/, '');
+    return ses;
+}
+
+
+function session_store (new_value)
+{
+    window.location.hash = '#' + new_value;
+}
+
+
+function update_history ()
+{
+    var session = session_encode();
+    session_store(session);
+    old_session= session;
+}
+
+
+function session_check ()
+{
+    var session = session_read();
+
+    clearInterval(url_surveillence);
+
+    if ( session != old_session )
+    {
+        session_restore(session);
+        start_search();
+        
+    }
+    
+    url_surveillence = setInterval(session_check, 200);
+}
+        
+
+var url_surveillence = setInterval(session_check, 200);
+
 </script>
 </head>