diff --git a/lib/assets/libs/_ajax.js b/lib/assets/libs/_ajax.js new file mode 100644 --- /dev/null +++ b/lib/assets/libs/_ajax.js @@ -0,0 +1,109 @@ +// 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 ''}, + __str__ : function(self){return ''}, + + 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__)