src/pyams_skin/resources/js/ext/jquery-jsonrpc.min.js
changeset 43 d366c88a0f88
parent 0 bb4aabe07487
child 475 79ae32c82e3e
equal deleted inserted replaced
42:975b545f5ae5 43:d366c88a0f88
     1 (function(a){a.jsonRpc=a.jsonRpc||function(c){c.type=c.type||"GET";var b={contentType:"application/json",dataType:c.type=="GET"?"jsonp":"json",processData:c.type=="GET"};var d={version:c.version||"1.0",method:c.method||"system.listMethods",params:c.params||[]};a.each(d,function(f){delete c[f]});function e(){c.data=JSON.stringify(d);if(c.type=="GET"){c.data={json:c.data}}a.ajax(a.extend(b,c))}if(typeof JSON=="undefined"){a.getScript("http://www.json.org/json2.js",function(){e()})}else{e()}return a}})(jQuery);
     1 (function($,undefined){$.extend({jsonRPC:{version:"2.0",endPoint:null,namespace:null,setup:function(params){this._validateConfigParams(params);this.endPoint=params.endPoint;this.namespace=params.namespace;this.cache=params.cache!==undefined?params.cache:true;return this},withOptions:function(params,callback){this._validateConfigParams(params);if(callback===undefined){throw ("No callback specified")}origParams={endPoint:this.endPoint,namespace:this.namespace};this.setup(params);callback.call(this);this.setup(origParams)},request:function(method,options){if(options===undefined){options={id:1}}if(options.id===undefined){options.id=1}if(options.cache===undefined){options.cache=this.cache}this._validateRequestMethod(method);this._validateRequestParams(options.params);this._validateRequestCallbacks(options.success,options.error);this._doRequest(JSON.stringify(this._requestDataObj(method,options.params,options.id)),options);return true},batchRequest:function(requests,options){if(options===undefined){options={}}if(!$.isArray(requests)||requests.length===0){throw ("Invalid requests supplied for jsonRPC batchRequest. Must be an array object that contain at least a method attribute")}var _that=this;$.each(requests,function(i,req){_that._validateRequestMethod(req.method);_that._validateRequestParams(req.params);if(req.id===undefined){req.id=i+1}});this._validateRequestCallbacks(options.success,options.error);var data=[],request;for(var i=0;i<requests.length;i++){request=requests[i];data.push(this._requestDataObj(request.method,request.params,request.id))}this._doRequest(JSON.stringify(data),options)},_validateConfigParams:function(params){if(params===undefined){throw ("No params specified")}else{if(params.endPoint&&typeof(params.endPoint)!=="string"){throw ("endPoint must be a string")}if(params.namespace&&typeof(params.namespace)!=="string"){throw ("namespace must be a string")}}},_validateRequestMethod:function(method){if(typeof(method)!=="string"){throw ("Invalid method supplied for jsonRPC request")}return true},_validateRequestParams:function(params){if(!(params===null||params===undefined||typeof(params)==="object"||$.isArray(params))){throw ("Invalid params supplied for jsonRPC request. It must be empty, an object or an array.")}return true},_validateRequestCallbacks:function(success,error){if(success!==undefined&&typeof(success)!=="function"){throw ("Invalid success callback supplied for jsonRPC request")}if(error!==undefined&&typeof(error)!=="function"){throw ("Invalid error callback supplied for jsonRPC request")}return true},_doRequest:function(data,options){var _that=this;$.ajax({type:"POST",async:false!==options.async,dataType:"json",contentType:"application/json",url:this._requestUrl((options.endPoint||options.url),options.cache),data:data,cache:options.cache,processData:false,error:function(json){_that._requestError.call(_that,json,options.error)},success:function(json){_that._requestSuccess.call(_that,json,options.success,options.error)}})},_requestUrl:function(url,cache){url=url||this.endPoint;if(!cache){if(url.indexOf("?")<0){url+="?tm="+new Date().getTime()}else{url+="&tm="+new Date().getTime()}}return url},_requestDataObj:function(method,params,id){var dataObj={jsonrpc:this.version,method:this.namespace?this.namespace+"."+method:method,id:id};if(params!==undefined){dataObj.params=params}return dataObj},_requestError:function(json,error){if(error!==undefined&&typeof(error)==="function"){if(typeof(json.responseText)==="string"){try{error(eval("("+json.responseText+")"))}catch(e){error(this._response())}}else{error(this._response())}}},_requestSuccess:function(json,success,error){var response=this._response(json);if(response.error&&typeof(error)==="function"){error(response);return}if(typeof(success)==="function"){success(response)}},_response:function(json){if(json===undefined){return{error:"Internal server error",version:"2.0"}}else{try{if(typeof(json)==="string"){json=eval("("+json+")")}if(($.isArray(json)&&json.length>0&&json[0].jsonrpc!=="2.0")||(!$.isArray(json)&&json.jsonrpc!=="2.0")){throw"Version error"}return json}catch(e){return{error:"Internal server error: "+e,version:"2.0"}}}}}})})(jQuery);