themes/base: add JavaScript XMLHTTPRequest support library and load icon
This commit is contained in:
parent
2c9b1c4a1b
commit
2c416f1cb6
2 changed files with 150 additions and 0 deletions
BIN
themes/base/htdocs/luci-static/resources/icons/loading.gif
Normal file
BIN
themes/base/htdocs/luci-static/resources/icons/loading.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
150
themes/base/htdocs/luci-static/resources/xhr.js
Normal file
150
themes/base/htdocs/luci-static/resources/xhr.js
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue