Fixing bug which caused that the term list was never updated.
[pazpar2-moved-to-github.git] / www / test1 / index2.html
1 <html>
2
3 <!-- $Id: index2.html,v 1.1 2006-12-14 14:57:27 sondberg Exp $
4
5      Anders's experimentation with coping with the back button/bookmarking
6      issues in Ajax applications
7 -->
8
9 <head>
10 <style type="text/css">
11
12 </style>
13
14 <script>
15 var xmlHttp
16 var xinitSession;
17 var xloadTargets;
18 var xsearch;
19 var xshow;
20 var xstat;
21 var xtermlist;
22 var session = false;
23 var targetsloaded = false;
24 var shown;
25 var searchtimer;
26 var showtimer;
27 var termtimer;
28 var stattimer;
29 var startrec;
30 var browser_session = new Array();
31
32
33 function session_register (obj) {
34     browser_session.push(obj);
35 }
36
37
38 function session_update () {
39     var serialize = '';
40     
41     for (i = 0; i < browser_session.length; i++) {
42         var cell = browser_session[i];
43         serialize += cell.id + '=' + cell.value + '&';
44     }
45
46     alert(serialize);
47
48     window.session_iframe.location = window.location + '#' + serialize;
49 }
50
51
52 function GetXmlHttpObject()
53
54     var objXMLHttp=null
55     if (window.XMLHttpRequest)
56       {
57       objXMLHttp=new XMLHttpRequest()
58       }
59     else if (window.ActiveXObject)
60       {
61       objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
62       }
63     return objXMLHttp
64
65
66 function session_started()
67 {
68     if (xinitSession.readyState != 4)
69         return;
70     var xml = xinitSession.responseXML;
71     var sesid = xml.getElementsByTagName("session")[0].childNodes[0].nodeValue;
72     document.getElementById("status").innerHTML = "Live";
73     session = sesid;
74 }
75
76 function start_session()
77 {
78     xinitSession = GetXmlHttpObject();
79     var url="search.pz2?";
80     url += "command=init";
81     xinitSession.onreadystatechange=session_started;
82     xinitSession.open("GET", url);
83     xinitSession.send(null);
84     
85     session_register(document.getElementById('query'));
86     window.session_iframe = document.getElementById('session_iframe');
87 }
88
89 function targets_loaded()
90 {
91     if (xloadTargets.readyState != 4)
92         return;
93     var xml = xloadTargets.responseXML;
94     var error = xml.getElementsByTagName("error");
95     if (error[0])
96     {
97         var msg = error[0].childNodes[0].nodeValue;
98         alert(msg);
99         return;
100     }
101     document.getElementById("targetstatus").innerHTML = "Targets loaded";
102 }
103
104 function load_targets()
105 {
106     var fn = document.getElementById("targetfilename").value;
107     clearTimeout(termtimer);
108     clearTimeout(searchtimer);
109     clearTimeout(stattimer);
110     clearTimeout(showtimer);
111     document.getElementById("stat").innerHTML = "";
112     if (!fn)
113     {
114         alert("Please enter a target definition file name");
115         return;
116     }
117     var url="search.pz2?" +
118         "command=load" +
119         "&session=" + session +
120         "&name=" + fn;
121     document.getElementById("targetstatus").innerHTML = "Loading targets...";
122     xloadTargets = GetXmlHttpObject();
123     xloadTargets.onreadystatechange=targets_loaded;
124     xloadTargets.open("GET", url);
125     xloadTargets.send(null);
126 }
127
128 function show_records()
129 {
130     if (xshow.readyState != 4)
131         return;
132     var i;
133     var xml = xshow.responseXML;
134     var body = document.getElementById("body");
135     var hits = xml.getElementsByTagName("hit");
136     if (!hits[0])
137     {
138         body.innerHTML = "No records yet";
139         searchtimer = setTimeout(check_search, 250);
140     }
141     else
142     {
143
144         var total = Number(xml.getElementsByTagName('total')[0].childNodes[0].nodeValue);
145         var merged = Number(xml.getElementsByTagName('merged')[0].childNodes[0].nodeValue);
146         var start = Number(xml.getElementsByTagName('start')[0].childNodes[0].nodeValue);
147         var num = Number(xml.getElementsByTagName('num')[0].childNodes[0].nodeValue);
148         body.innerHTML = '<b>Records : ';
149         body.innerHTML += (start + 1) + ' to ' + (start + num) +
150                 ' of ' + merged + ' (total hits: ' + total + ')</b>';
151
152         if (start + num < merged)
153             body.innerHTML += ' <a href="" ' +
154                 'onclick="startrec=' + (start + 20) +
155                 ';check_search(); return false;">Next</a>';
156
157         if (start > 0)
158             body.innerHTML += ' <a href="" ' +
159                 'onclick="startrec=' + (start - 20) +
160                 ';check_search(); return false;">Previous</a>';
161
162         body.innerHTML += '<br/>';
163         for (i = 0; i < hits.length; i++)
164         {
165             body.innerHTML += '<p>';
166             body.innerHTML += (i + start + 1) + ': ';
167             var mk = hits[i].getElementsByTagName("title");
168             if (mk[0])
169                 body.innerHTML += mk[0].childNodes[0].nodeValue;
170             body.innerHTML += '</p>';
171         }
172         shown++;
173         if (shown < 5)
174             searchtimer = setTimeout(check_search, 400);
175         else if (shown < 10)
176             searchtimer = setTimeout(check_search, 1000);
177         else
178             searchtimer = setTimeout(check_search, 4000);
179     }
180 }
181
182 function check_search()
183 {
184     clearTimeout(searchtimer);
185     var url = "search.pz2?" +
186         "command=show" +
187         "&start=" + startrec +
188         "&session=" + session;
189     xshow = GetXmlHttpObject();
190     xshow.onreadystatechange=show_records;
191     xshow.open("GET", url);
192     xshow.send(null);
193 }
194
195
196 function refine_query (obj) {
197     var query_cell = document.getElementById('query');
198
199     query_cell.value += ' and su=' + obj.innerHTML;
200     start_search();
201 }
202
203 function show_termlist()
204 {
205     if (xtermlist.readyState != 4)
206         return;
207     var i;
208     var xml = xtermlist.responseXML;
209     var body = document.getElementById("termlist");
210     var hits = xml.getElementsByTagName("term");
211     if (!hits[0])
212     {
213         termtimer = (check_termlist, 1000);
214     }
215     else
216     {
217         body.innerHTML = "<b>Limit results:</b><br>";
218         for (i = 0; i < hits.length; i++)
219         {
220             var namen = hits[i].getElementsByTagName("name");
221             if (namen[0])
222                 body.innerHTML += '<a href="#" onclick="refine_query(this)">' +
223                                   namen[0].childNodes[0].nodeValue +
224                                   '</a>';
225             /*
226             body.innerHTML += ' (';
227             var freqn = hits[i].getElementsByTagName("frequency");
228             if (freqn[0])
229                 body.innerHTML += freqn[0].childNodes[0].nodeValue;
230             body.innerHTML += ')<br>';
231             */
232             body.innerHTML += '<br>';
233         }
234         termtimer = setTimeout(check_termlist, 2000);
235     }
236 }
237
238
239 function check_termlist()
240 {
241     var url = "search.pz2?" +
242         "command=termlist" +
243         "&session=" + session;
244     xtermlist = GetXmlHttpObject();
245     xtermlist.onreadystatechange=show_termlist;
246     xtermlist.open("GET", url);
247     xtermlist.send(null);
248 }
249
250 function show_stat()
251 {
252     if (xstat.readyState != 4)
253         return;
254     var i;
255     var xml = xstat.responseXML;
256     var body = document.getElementById("stat");
257     var nodes = xml.childNodes[0].childNodes;
258     if (!nodes[0])
259     {
260         stattimer  = setTimeout(check_stat, 500);
261     }
262     else
263     {
264         body.innerHTML = "(";
265         for (i = 0; i < nodes.length; i++)
266         {
267             if (nodes[i].nodeType != 1)
268                 continue;
269             var value = nodes[i].childNodes[0].nodeValue;
270             if (value == 0)
271                 continue;
272             var name = nodes[i].nodeName;
273             body.innerHTML += ' ' + name + '=' + value;
274         }
275         body.innerHTML += ')';
276         stattimer = setTimeout(check_stat, 2000);
277     }
278 }
279
280 function check_stat()
281 {
282     var url = "search.pz2?" +
283         "command=stat" +
284         "&session=" + session;
285     xstat = GetXmlHttpObject();
286     xstat.onreadystatechange=show_stat;
287     xstat.open("GET", url);
288     xstat.send(null);
289 }
290
291 function search_started()
292 {
293     if (xsearch.readyState != 4)
294         return;
295     var xml = xsearch.responseXML;
296     var error = xml.getElementsByTagName("error");
297     if (error[0])
298     {
299         var msg = error[0].childNodes[0].nodeValue;
300         alert(msg);
301         return;
302     }
303     searchtimer = setTimeout(check_search, 250);
304     termtimer = setTimeout(check_termlist, 1000);
305     stattimer = setTimeout(check_stat, 1000);
306 }
307
308 function start_search()
309 {
310     session_update();
311     clearTimeout(termtimer);
312     clearTimeout(searchtimer);
313     clearTimeout(stattimer);
314     clearTimeout(showtimer);
315     if (!targets_loaded)
316     {
317         alert("Please load targets first");
318         return;
319     }
320     var query = escape(document.getElementById('query').value);
321     var url = "search.pz2?" +
322         "command=search" +
323         "&session=" + session +
324         "&query=" + query;
325     xsearch = GetXmlHttpObject();
326     xsearch.onreadystatechange=search_started;
327     xsearch.open("GET", url);
328     xsearch.send(null);
329     document.getElementById("termlist").innerHTML = '';
330     document.getElementById("body").innerHTML = '';
331     shown = 0;
332     startrec = 0;
333 }
334
335
336
337
338 </script>
339 </head>
340
341 <body onload="start_session();">
342
343 <table width="100%" border="1" cellpadding="5">
344     <tr>
345         <td width="250" height="100" align="center">
346             <font size="+2"><b>MasterKey mk I</b></font>
347         </td>
348
349         <td>
350             <form onsubmit="start_search(); return false;">
351                 <b>Search:</b> <input id="query" type="text" size="50"/>
352                 <input type="submit" value="Go"/>
353             </form>
354
355         <td>
356     </tr>
357
358     <tr>
359         <td valign="top" id="termlist">&nbsp;</td>
360
361         <td valign="top" id="body">
362         Funky search prototype.<br><br><br><br>
363         <td>
364     </tr>
365
366     <tr>
367         <td>
368         &nbsp;
369             <!-- 
370             <form onsubmit="load_targets(); return false;">
371                 Target file:<br/>
372                 <input type="text" id="targetfilename" size="20"/>
373                 <input type="submit"  value="load" />
374             </form>
375             -->
376         </td>
377
378         <td>
379             Status: <span id="status">Initializing</span> <span id="targetstatus"></span><br/><span id="stat"></span>
380         </td>
381
382     </tr>
383
384 </table>
385 <iframe id="session_iframe"/>
386
387 </body>
388 </html>