diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2010-10-11 22:52:24 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2010-10-11 22:52:24 +0000 |
commit | 2c416f1cb6e5a18644c956f15c9f13ff5ca428d3 (patch) | |
tree | e5f096920bced30d2a73c3328d5b2ce83f0388c1 /themes/base/htdocs | |
parent | 2c9b1c4a1b74271fd149ea0035cec1acf9754966 (diff) |
themes/base: add JavaScript XMLHTTPRequest support library and load icon
Diffstat (limited to 'themes/base/htdocs')
-rw-r--r-- | themes/base/htdocs/luci-static/resources/icons/loading.gif | bin | 0 -> 1787 bytes | |||
-rw-r--r-- | themes/base/htdocs/luci-static/resources/xhr.js | 150 |
2 files changed, 150 insertions, 0 deletions
diff --git a/themes/base/htdocs/luci-static/resources/icons/loading.gif b/themes/base/htdocs/luci-static/resources/icons/loading.gif Binary files differnew file mode 100644 index 000000000..5bb90fd6a --- /dev/null +++ b/themes/base/htdocs/luci-static/resources/icons/loading.gif diff --git a/themes/base/htdocs/luci-static/resources/xhr.js b/themes/base/htdocs/luci-static/resources/xhr.js new file mode 100644 index 000000000..7e2e3b090 --- /dev/null +++ b/themes/base/htdocs/luci-static/resources/xhr.js @@ -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; + } +} |