Show More
Commit Description:
Merge pull request #17 from nattee/master...
Commit Description:
Merge pull request #17 from nattee/master
upgrade to current working snapshot
References:
File last commit:
Show/Diff file:
Action:
lib/assets/libs/_ajax.js
| 109 lines
| 3.4 KiB
| application/javascript
| JavascriptLexer
|
r584 | // ajax | |||
var $module = (function($B){ | ||||
eval($B.InjectBuiltins()) | ||||
var $N = $B.builtins.None | ||||
function ajax(){ | ||||
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari | ||||
var xmlhttp=new XMLHttpRequest(); | ||||
}else{// code for IE6, IE5 | ||||
var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); | ||||
} | ||||
xmlhttp.onreadystatechange = function(){ | ||||
// here, "this" refers to xmlhttp | ||||
var state = this.readyState | ||||
var req = this.$ajax | ||||
req.js.text = this.responseText | ||||
var timer = this.$requestTimer | ||||
if(state===0 && this.onuninitialized){this.onuninitialized(req)} | ||||
else if(state===1 && this.onloading){this.onloading(req)} | ||||
else if(state===2 && this.onloaded){this.onloaded(req)} | ||||
else if(state===3 && this.oninteractive){this.oninteractive(req)} | ||||
else if(state===4 && this.oncomplete){ | ||||
if(timer !== null){window.clearTimeout(timer)} | ||||
this.oncomplete(req) | ||||
} | ||||
} | ||||
var res = {__class__:ajax.$dict, js:xmlhttp} | ||||
xmlhttp.$ajax = res | ||||
return res | ||||
} | ||||
ajax.__class__ = $B.$factory | ||||
ajax.$dict = { | ||||
__class__:$B.$type, | ||||
__name__:'ajax', | ||||
$factory: ajax, | ||||
__getattribute__ : function(self, attr){ | ||||
// Special case for send : accept dict as parameters | ||||
if(attr=='send'){ | ||||
return function(params){ | ||||
return ajax.$dict.send(self, params) | ||||
} | ||||
} | ||||
// Otherwise default to JSObject method | ||||
return $B.JSObject.$dict.__getattribute__(self, attr) | ||||
}, | ||||
__repr__ : function(self){return '<object Ajax>'}, | ||||
__str__ : function(self){return '<object Ajax>'}, | ||||
bind : function(self, evt, func){ | ||||
// req.bind(evt,func) is the same as req.onevt = func | ||||
self.js['on'+evt] = func | ||||
return $N | ||||
}, | ||||
send : function(self,params){ | ||||
// params can be Python dictionary or string | ||||
//self.js.onreadystatechange = function(ev){console.log(ev.target)} | ||||
var res = '' | ||||
if(!params){ | ||||
self.js.send(); | ||||
return $N; | ||||
}else if(isinstance(params,str)){ | ||||
res = params | ||||
}else if(isinstance(params,dict)){ | ||||
var items = _b_.list(_b_.dict.$dict.items(params)) | ||||
for(var i=0, _len_i = items.length; i < _len_i;i++){ | ||||
var key = encodeURIComponent(str(items[i][0])); | ||||
if (isinstance(items[i][1],list)) { | ||||
for (j = 0; j < items[i][1].length; j++) { | ||||
res += key +'=' + encodeURIComponent(str(items[i][1][j])) + '&' | ||||
} | ||||
} else { | ||||
res += key + '=' + encodeURIComponent(str(items[i][1])) + '&' | ||||
} | ||||
} | ||||
res = res.substr(0,res.length-1) | ||||
}else{ | ||||
throw _b_.TypeError("send() argument must be string or dictionary, not '"+str(params.__class__)+"'") | ||||
} | ||||
self.js.send(res) | ||||
return $N | ||||
}, | ||||
set_header : function(self,key,value){ | ||||
self.js.setRequestHeader(key,value) | ||||
}, | ||||
set_timeout : function(self,seconds,func){ | ||||
self.js.$requestTimer = setTimeout( | ||||
function() {self.js.abort();func()}, | ||||
seconds*1000); | ||||
} | ||||
} | ||||
ajax.$dict.__mro__ = [ajax.$dict, $B.JSObject.$dict, _b_.object.$dict] | ||||
$B.set_func_names(ajax.$dict) | ||||
return {ajax:ajax} | ||||
})(__BRYTHON__) | ||||