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