X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=applications%2Fluci-livestats%2Fhtdocs%2Fluci-static%2Fresources%2Flivestats%2FJsonRpc.js;fp=applications%2Fluci-livestats%2Fhtdocs%2Fluci-static%2Fresources%2Flivestats%2FJsonRpc.js;h=f1723ec1c0605cca83f9fa8fd9252fb9e3c1e30a;hp=0000000000000000000000000000000000000000;hb=e39b2bff3f01f299201d6c394cbeb7e28e852758;hpb=758c06df583f439f625d5a62688d291654234e5b diff --git a/applications/luci-livestats/htdocs/luci-static/resources/livestats/JsonRpc.js b/applications/luci-livestats/htdocs/luci-static/resources/livestats/JsonRpc.js new file mode 100644 index 000000000..f1723ec1c --- /dev/null +++ b/applications/luci-livestats/htdocs/luci-static/resources/livestats/JsonRpc.js @@ -0,0 +1,220 @@ +/* MochiKit.JsonRpc */ + +if (typeof(dojo) != 'undefined') { + dojo.provide("MochiKit.JsonRpc"); + dojo.require("MochiKit.Base"); + dojo.require("MochiKit.DOM"); + dojo.require("MochiKit.Async"); +} + +if (typeof(JSAN) != 'undefined') { + JSAN.use("MochiKit.Base", []); + JSAN.use("MochiKit.DOM", []); + JSAN.use("MochiKit.Async", []); +} + +try { + if (typeof(MochiKit.Base) == 'undefined' || + typeof(MochiKit.DOM) == 'undefined' || + typeof(MochiKit.Async) == 'undefined') { + throw ""; + } +} catch (e) { + throw "MochiKit.JsonRpc depends on MochiKit.Base, MochiKit.DOM and MochiKit.Async"; +} + +if (typeof(MochiKit.JsonRpc) == 'undefined') { + MochiKit.JsonRpc = {}; +} + +MochiKit.JsonRpc.NAME = "MochiKit.JsonRpc"; +MochiKit.JsonRpc.VERSION = "0.90"; + +MochiKit.JsonRpc.__repr__ = function () { + return "[" + this.NAME + " " + this.VERSION + "]"; +} + +MochiKit.JsonRpc.toString = function () { + return this.__repr__(); +} + +MochiKit.JsonRpc.JsonRpcError = function (message) { + this.message = message; + this.name = 'JsonRpcError'; +} + +MochiKit.JsonRpc.JsonRpcError.prototype = new Error(); +MochiKit.JsonRpc.JsonRpcError.prototype.repr = function () { + return 'JsonRpcError(' + this.message + ')'; +} + +MochiKit.JsonRpc.JsonRpcError.prototype.toString = function () { + return this.repr(); +} + +MochiKit.JsonRpc.jsonObject = function (o) { + var attrs=[]; + for(attr in o){ + if(typeof o[attr] != "function"){ + attrs.push('"' + attr + '": ' + json(o[attr])); + } + } + return "{" + attrs.join(", ") + "}"; +} + +MochiKit.JsonRpc.isObject = function (o) { + return true; +} + +MochiKit.JsonRpc.jsonArray = function (o) { + return "[" + MochiKit.Base.map(json, o).join(", ") + "]"; +} + +var MB = MochiKit.Base + +MochiKit.JsonRpc.jsonRegistry = new MochiKit.Base.AdapterRegistry(); +MochiKit.JsonRpc.jsonRegistry.register('arrayLike',MB.isArrayLike,MochiKit.JsonRpc.jsonArray); +MochiKit.JsonRpc.jsonRegistry.register("string", MB.typeMatcher("string"), MB.reprString); +MochiKit.JsonRpc.jsonRegistry.register("numbers", MB.typeMatcher("number", "boolean"), MB.reprNumber); +MochiKit.JsonRpc.jsonRegistry.register("undefined", MB.isUndefined, MB.reprUndefined); +MochiKit.JsonRpc.jsonRegistry.register("null", MB.isNull, MB.reprNull); +MochiKit.JsonRpc.jsonRegistry.register("objectLike", MochiKit.JsonRpc.isObject, MochiKit.JsonRpc.jsonObject); + +MochiKit.JsonRpc.json = function (o) { + try { + if (typeof(o.__json__) == 'function') { + return o.__json__(); + } else if (typeof(o.json) == 'function' && o.json != arguments.callee) { + return o.json(); + } + return jsonRegistry.match(o); + } catch (e) { + if (typeof(o.NAME) == 'string' && ( + o.toString == Function.prototype.toString || + o.toString == Object.prototype.toString + )) { + return o.NAME; + } + return o; + } + +} + + +MochiKit.JsonRpc.JsonRpcCall = function (method,params) { + this.method = method; + this.params = params; + this.id = '0'; +} + +MochiKit.JsonRpc.JsonRpcProxy = function (url,methNames) { + MochiKit.Base.bindMethods(this); + this.url = url; + if (methNames) { + MochiKit.Base.map(this._proxyMethod,methNames); + } +} + +update(MochiKit.JsonRpc.JsonRpcProxy.prototype, { + 'call': function () { + var arglist = MochiKit.Base.map(null,arguments) + var methname = arglist.shift() + log(arglist); + var callobj = new MochiKit.JsonRpc.JsonRpcCall(methname,arglist); + var callstr = json(callobj); + var req = MochiKit.Async.getXMLHttpRequest(); + req.open("POST",this.url,true); + req.setRequestHeader("Content-Type","text/plain"); + req.setRequestHeader("Content-Length",callstr.length); + var d = MochiKit.Async.sendXMLHttpRequest(req,callstr); + d.addCallback(MochiKit.Async.evalJSONRequest); + d.addCallback(this._extractResult); + + return d + }, + 'addSingleMethod': function (methName) { + if (methName) { + this._proxyMethod(methName); + } + }, + 'addMethods': function (methNames) { + if (methNames) { + MochiKit.Base.map(this._proxyMethod,methNames); + } + }, + '_extractResult': function (resp) { + if (!resp.error){ + return resp.result; + } else { + throw new MochiKit.JsonRpc.JsonRpcError(resp.error); + } + }, + '_proxyMethod': function (methname) { + this[methname] = MochiKit.Base.partial(this.call,methname); + } +}); + +MochiKit.JsonRpc.DomObjectFromJson = function (){ + var retval = false; + if (arguments.length == 1) { + var arg = arguments[0]; + if (typeof(arg) == 'string'){ + retval = MochiKit.DOM.SPAN(null,arg); + } else { + var objrepr = arguments[0]; + var elem = document.createElement(objrepr[0]); + var attrs = objrepr[1]; + if (attrs) { + MochiKit.DOM.updateNodeAttributes(elem, attrs); + } + if (objrepr.length >= 3){ + var extraobj = objrepr[2] + for (var i=0;i