1 line
2.7 KiB
JavaScript
1 line
2.7 KiB
JavaScript
/*
|
|
liveUpdater.js originally written by Avi Bryant, author of
|
|
Seaside (http://www.beta4.com/seaside2)
|
|
|
|
Modifed by Chris Double to add LiveUpdaterPost and use '
|
|
instead of " for the id.
|
|
*/
|
|
function liveUpdaterUri(uri)
|
|
{
|
|
return liveUpdater(function() { return uri; });
|
|
}
|
|
|
|
function liveUpdater(uriFunc)
|
|
{
|
|
var request = false;
|
|
var regex = /<(\w+).*?id='(\w+)'.*?>((.|\n)*)<\/\1>/;
|
|
|
|
if (window.XMLHttpRequest) {
|
|
request = new XMLHttpRequest();
|
|
}
|
|
|
|
function update()
|
|
{
|
|
if(request && request.readyState < 4)
|
|
request.abort();
|
|
|
|
if(!window.XMLHttpRequest)
|
|
request = new ActiveXObject("Microsoft.XMLHTTP");
|
|
|
|
request.onreadystatechange = processRequestChange;
|
|
request.open("GET", uriFunc());
|
|
request.send(null);
|
|
return false;
|
|
}
|
|
|
|
function processRequestChange()
|
|
{
|
|
if(request.readyState == 4)
|
|
{
|
|
var results = regex.exec(request.responseText);
|
|
if(results)
|
|
document.getElementById(results[2]).innerHTML = results[3];
|
|
}
|
|
}
|
|
|
|
return update;
|
|
}
|
|
|
|
function liveUpdaterPost(uriFunc)
|
|
{
|
|
var request = false;
|
|
var regex = /<(\w+).*?id='(\w+)'.*?>((.|\n)*)<\/\1>/;
|
|
|
|
if (window.XMLHttpRequest) {
|
|
request = new XMLHttpRequest();
|
|
}
|
|
|
|
function update(data)
|
|
{
|
|
if(request && request.readyState < 4)
|
|
request.abort();
|
|
|
|
if(!window.XMLHttpRequest)
|
|
request = new ActiveXObject("Microsoft.XMLHTTP");
|
|
|
|
request.onreadystatechange = processRequestChange;
|
|
request.open("POST", uriFunc());
|
|
request.send(data);
|
|
return false;
|
|
}
|
|
|
|
function processRequestChange()
|
|
{
|
|
if(request.readyState == 4)
|
|
{
|
|
var results = regex.exec(request.responseText);
|
|
if(results)
|
|
document.getElementById(results[2]).innerHTML = results[3];
|
|
}
|
|
}
|
|
|
|
return update;
|
|
}
|
|
|
|
|
|
function liveSearch(id, uri)
|
|
{
|
|
var updater = liveUpdaterPost((function() { return uri; }));
|
|
var last = "";
|
|
var timeout = false;
|
|
|
|
function update()
|
|
{
|
|
if (last != document.getElementById(id).value)
|
|
updater("s=" + escape(document.getElementById(id).value));
|
|
}
|
|
|
|
function start() {
|
|
if (timeout)
|
|
window.clearTimeout(timeout);
|
|
|
|
timeout = window.setTimeout(update, 300);
|
|
}
|
|
|
|
|
|
if (navigator.userAgent.indexOf("Safari") > 0)
|
|
document.getElementById(id).addEventListener("keydown",start,false);
|
|
else if (navigator.product == "Gecko")
|
|
document.getElementById(id).addEventListener("keypress",start,false);
|
|
else
|
|
document.getElementById(id).attachEvent("onkeydown",start);
|
|
} |