summaryrefslogtreecommitdiffhomepage
path: root/themes/base
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2010-10-11 22:52:24 +0000
committerJo-Philipp Wich <jow@openwrt.org>2010-10-11 22:52:24 +0000
commit2c416f1cb6e5a18644c956f15c9f13ff5ca428d3 (patch)
treee5f096920bced30d2a73c3328d5b2ce83f0388c1 /themes/base
parent2c9b1c4a1b74271fd149ea0035cec1acf9754966 (diff)
themes/base: add JavaScript XMLHTTPRequest support library and load icon
Diffstat (limited to 'themes/base')
-rw-r--r--themes/base/htdocs/luci-static/resources/icons/loading.gifbin0 -> 1787 bytes
-rw-r--r--themes/base/htdocs/luci-static/resources/xhr.js150
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
new file mode 100644
index 000000000..5bb90fd6a
--- /dev/null
+++ b/themes/base/htdocs/luci-static/resources/icons/loading.gif
Binary files differ
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;
+ }
+}