themes/base: add JavaScript XMLHTTPRequest support library and load icon

This commit is contained in:
Jo-Philipp Wich 2010-10-11 22:52:24 +00:00
parent 2c9b1c4a1b
commit 2c416f1cb6
2 changed files with 150 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,150 @@
/*
* xhr.js - XMLHttpRequest helper class
* (c) 2008-2010 Jo-Philipp Wich
*/
XHR = function()
{
this.reinit = function()
{
if( window.XMLHttpRequest ) {
this._xmlHttp = new XMLHttpRequest();
}
else if( window.ActiveXObject ) {
this._xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else {
alert("xhr.js: XMLHttpRequest is not supported by this browser!");
}
}
this.busy = function() {
switch( this._xmlHttp.readyState )
{
case 1:
case 2:
case 3:
return true;
default:
return false;
}
}
this.abort = function() {
if( this.busy() )
this._xmlHttp.abort();
}
this.get = function(url,data,callback)
{
this.reinit();
var xhr = this._xmlHttp;
var code = this._encode( data );
url = 'http://' + location.hostname +
( location.port ? ':' + location.port : '' ) + url;
if( code )
if( url.substr(url.length-1,1) == '&' )
url += code;
else
url += '?' + code;
xhr.open( 'GET', url, true );
xhr.onreadystatechange = function()
{
if( xhr.readyState == 4 ) {
callback( xhr );
}
}
xhr.send( null );
}
this.post = function(url,data,callback)
{
this.reinit();
var xhr = this._xmlHttp;
var code = this._encode( data );
xhr.onreadystatechange = function()
{
if( xhr.readyState == 4 )
callback( xhr );
}
xhr.open( 'POST', url, true );
xhr.setRequestHeader( 'Content-type', 'application/x-www-form-urlencoded' );
xhr.setRequestHeader( 'Content-length', code.length );
xhr.setRequestHeader( 'Connection', 'close' );
xhr.send( code );
}
this.cancel = function()
{
this._xmlHttp.onreadystatechange = function(){};
this._xmlHttp.abort();
}
this.send_form = function(form,callback,extra_values)
{
var code = '';
for( var i = 0; i < form.elements.length; i++ )
{
var e = form.elements[i];
if( e.options )
{
code += ( code ? '&' : '' ) +
form.elements[i].name + '=' + encodeURIComponent(
e.options[e.selectedIndex].value
);
}
else if( e.length )
{
for( var j = 0; j < e.length; j++ )
if( e[j].name ) {
code += ( code ? '&' : '' ) +
e[j].name + '=' + encodeURIComponent( e[j].value );
}
}
else
{
code += ( code ? '&' : '' ) +
e.name + '=' + encodeURIComponent( e.value );
}
}
if( typeof extra_values == 'object' )
for( var key in extra_values )
code += ( code ? '&' : '' ) +
key + '=' + encodeURIComponent( extra_values[key] );
return(
( form.method == 'get' )
? this.get( form.getAttribute('action'), code, callback )
: this.post( form.getAttribute('action'), code, callback )
);
}
this._encode = function(obj)
{
if( typeof obj == 'object' )
{
var code = '';
var self = this;
for( var k in obj )
code += ( code ? '&' : '' ) +
k + '=' + encodeURIComponent( obj[k] );
return code;
}
return obj;
}
}