3 <!-- $Id: index2.html,v 1.1 2006-12-14 14:57:27 sondberg Exp $
5 Anders's experimentation with coping with the back button/bookmarking
6 issues in Ajax applications
10 <style type="text/css">
23 var targetsloaded = false;
30 var browser_session = new Array();
33 function session_register (obj) {
34 browser_session.push(obj);
38 function session_update () {
41 for (i = 0; i < browser_session.length; i++) {
42 var cell = browser_session[i];
43 serialize += cell.id + '=' + cell.value + '&';
48 window.session_iframe.location = window.location + '#' + serialize;
52 function GetXmlHttpObject()
55 if (window.XMLHttpRequest)
57 objXMLHttp=new XMLHttpRequest()
59 else if (window.ActiveXObject)
61 objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
66 function session_started()
68 if (xinitSession.readyState != 4)
70 var xml = xinitSession.responseXML;
71 var sesid = xml.getElementsByTagName("session")[0].childNodes[0].nodeValue;
72 document.getElementById("status").innerHTML = "Live";
76 function start_session()
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);
85 session_register(document.getElementById('query'));
86 window.session_iframe = document.getElementById('session_iframe');
89 function targets_loaded()
91 if (xloadTargets.readyState != 4)
93 var xml = xloadTargets.responseXML;
94 var error = xml.getElementsByTagName("error");
97 var msg = error[0].childNodes[0].nodeValue;
101 document.getElementById("targetstatus").innerHTML = "Targets loaded";
104 function load_targets()
106 var fn = document.getElementById("targetfilename").value;
107 clearTimeout(termtimer);
108 clearTimeout(searchtimer);
109 clearTimeout(stattimer);
110 clearTimeout(showtimer);
111 document.getElementById("stat").innerHTML = "";
114 alert("Please enter a target definition file name");
117 var url="search.pz2?" +
119 "&session=" + session +
121 document.getElementById("targetstatus").innerHTML = "Loading targets...";
122 xloadTargets = GetXmlHttpObject();
123 xloadTargets.onreadystatechange=targets_loaded;
124 xloadTargets.open("GET", url);
125 xloadTargets.send(null);
128 function show_records()
130 if (xshow.readyState != 4)
133 var xml = xshow.responseXML;
134 var body = document.getElementById("body");
135 var hits = xml.getElementsByTagName("hit");
138 body.innerHTML = "No records yet";
139 searchtimer = setTimeout(check_search, 250);
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>';
152 if (start + num < merged)
153 body.innerHTML += ' <a href="" ' +
154 'onclick="startrec=' + (start + 20) +
155 ';check_search(); return false;">Next</a>';
158 body.innerHTML += ' <a href="" ' +
159 'onclick="startrec=' + (start - 20) +
160 ';check_search(); return false;">Previous</a>';
162 body.innerHTML += '<br/>';
163 for (i = 0; i < hits.length; i++)
165 body.innerHTML += '<p>';
166 body.innerHTML += (i + start + 1) + ': ';
167 var mk = hits[i].getElementsByTagName("title");
169 body.innerHTML += mk[0].childNodes[0].nodeValue;
170 body.innerHTML += '</p>';
174 searchtimer = setTimeout(check_search, 400);
176 searchtimer = setTimeout(check_search, 1000);
178 searchtimer = setTimeout(check_search, 4000);
182 function check_search()
184 clearTimeout(searchtimer);
185 var url = "search.pz2?" +
187 "&start=" + startrec +
188 "&session=" + session;
189 xshow = GetXmlHttpObject();
190 xshow.onreadystatechange=show_records;
191 xshow.open("GET", url);
196 function refine_query (obj) {
197 var query_cell = document.getElementById('query');
199 query_cell.value += ' and su=' + obj.innerHTML;
203 function show_termlist()
205 if (xtermlist.readyState != 4)
208 var xml = xtermlist.responseXML;
209 var body = document.getElementById("termlist");
210 var hits = xml.getElementsByTagName("term");
213 termtimer = (check_termlist, 1000);
217 body.innerHTML = "<b>Limit results:</b><br>";
218 for (i = 0; i < hits.length; i++)
220 var namen = hits[i].getElementsByTagName("name");
222 body.innerHTML += '<a href="#" onclick="refine_query(this)">' +
223 namen[0].childNodes[0].nodeValue +
226 body.innerHTML += ' (';
227 var freqn = hits[i].getElementsByTagName("frequency");
229 body.innerHTML += freqn[0].childNodes[0].nodeValue;
230 body.innerHTML += ')<br>';
232 body.innerHTML += '<br>';
234 termtimer = setTimeout(check_termlist, 2000);
239 function check_termlist()
241 var url = "search.pz2?" +
243 "&session=" + session;
244 xtermlist = GetXmlHttpObject();
245 xtermlist.onreadystatechange=show_termlist;
246 xtermlist.open("GET", url);
247 xtermlist.send(null);
252 if (xstat.readyState != 4)
255 var xml = xstat.responseXML;
256 var body = document.getElementById("stat");
257 var nodes = xml.childNodes[0].childNodes;
260 stattimer = setTimeout(check_stat, 500);
264 body.innerHTML = "(";
265 for (i = 0; i < nodes.length; i++)
267 if (nodes[i].nodeType != 1)
269 var value = nodes[i].childNodes[0].nodeValue;
272 var name = nodes[i].nodeName;
273 body.innerHTML += ' ' + name + '=' + value;
275 body.innerHTML += ')';
276 stattimer = setTimeout(check_stat, 2000);
280 function check_stat()
282 var url = "search.pz2?" +
284 "&session=" + session;
285 xstat = GetXmlHttpObject();
286 xstat.onreadystatechange=show_stat;
287 xstat.open("GET", url);
291 function search_started()
293 if (xsearch.readyState != 4)
295 var xml = xsearch.responseXML;
296 var error = xml.getElementsByTagName("error");
299 var msg = error[0].childNodes[0].nodeValue;
303 searchtimer = setTimeout(check_search, 250);
304 termtimer = setTimeout(check_termlist, 1000);
305 stattimer = setTimeout(check_stat, 1000);
308 function start_search()
311 clearTimeout(termtimer);
312 clearTimeout(searchtimer);
313 clearTimeout(stattimer);
314 clearTimeout(showtimer);
317 alert("Please load targets first");
320 var query = escape(document.getElementById('query').value);
321 var url = "search.pz2?" +
323 "&session=" + session +
325 xsearch = GetXmlHttpObject();
326 xsearch.onreadystatechange=search_started;
327 xsearch.open("GET", url);
329 document.getElementById("termlist").innerHTML = '';
330 document.getElementById("body").innerHTML = '';
341 <body onload="start_session();">
343 <table width="100%" border="1" cellpadding="5">
345 <td width="250" height="100" align="center">
346 <font size="+2"><b>MasterKey mk I</b></font>
350 <form onsubmit="start_search(); return false;">
351 <b>Search:</b> <input id="query" type="text" size="50"/>
352 <input type="submit" value="Go"/>
359 <td valign="top" id="termlist"> </td>
361 <td valign="top" id="body">
362 Funky search prototype.<br><br><br><br>
370 <form onsubmit="load_targets(); return false;">
372 <input type="text" id="targetfilename" size="20"/>
373 <input type="submit" value="load" />
379 Status: <span id="status">Initializing</span> <span id="targetstatus"></span><br/><span id="stat"></span>
385 <iframe id="session_iframe"/>