OFX

OFX wraps ajax calls into a fluent style interface.


Get examples


Example post


//OpenForum/Javascript/Core//open-forum-ofx.js/* * Author: Nik Cross * Description: A replacement for OpenForum JSON.get and JSON.post */ var OFX = { fromJson: function( json ) { if(json.method == "get" ) { return OFX.get( json.url ).withAction( json.action ).withData( json.data ); } else if(json.method == "post" ) { return OFX.post( json.url ).withAction( json.action ).withData( json.data ); } }, clearOfflineCache: function() { OpenForum.Storage.set("OFX.cache","[]"); console.log("OFX cache cleared."); }, sendOfflineCache: function( callback, callbackError ) { if(navigator.onLine===false) { return; } var cache = OFX.getOfflineCache(); if(cache.length==0) { return; } var request = cache.shift(); OpenForum.Storage.set("OFX.cache",JSON.stringify(cache)); OFX.fromJson( request ).onSuccess( callback ).onError( callbackError ).go(true); if(cache.length!=0) { setTimeout( function() { OFX.sendOfflineCache(callback,callbackError); }, 1000 ); } }, getOfflineCache: function() { var cache = OpenForum.Storage.get("OFX.cache"); if(cache==null) { cache = []; } else { try{ cache = JSON.parse(cache); } catch(e) { console.log("OFX cache error "+e+". Replacing cache."); cache = []; } } return cache; }, appendToOfflineCache: function(request) { var cache = OFX.getOfflineCache(); cache.push( request.toJson() ); OpenForum.Storage.set("OFX.cache",JSON.stringify(cache)); }, get: function(url) { var GET = function(url) { var self = this; var action; var data; var callBack; var callOnError; self.withAction = function(newAction) { action = newAction; return self; }; self.withData = function(newData) { data = newData; return self; }; self.onSuccess = function(newCallBack) { callBack = newCallBack; return self; }; self.onError = function(newCallOnError) { callOnError = newCallOnError; return self; }; self.toJson = function() { return { url: url, method: "get", action: action, data: data, requestedTime: new Date().getTime() }; }; self.go = function( withOfflineCache ) { if(navigator.onLine===false && withOfflineCache) { OFX.appendToOfflineCache( self ); return true; } if(action) { if(data) { if(typeof data == "object") { var dataString = ""; for(var name in data) { if(dataString.length>0) dataString += "&"; if(typeof data[name] == "object") { dataString += name + "="+ JSON.stringify( data[name] ); } else { dataString += name + "="+ data[name]; } } data = dataString; } } var get = JSON.get(url,action,data); if(callBack) { get = get.onSuccess( callBack ); } if(callOnError) { get = get.onError(callOnError); } get.go(); } else { OpenForum.loadFile(url,callBack); } }; }; return new GET(url); }, post: function(url) { var POST = function(url) { var self = this; var action; var data; var callBack; var callOnError; self.withAction = function(newAction) { action = newAction; return self; }; self.withData = function(newData) { data = newData; return self; }; self.onSuccess = function(newCallBack) { callBack = newCallBack; return self; }; self.onError = function(newCallOnError) { callOnError = newCallOnError; return self; }; self.toJson = function() { return { url: url, method: "post", action: action, data: data, requestedTime: new Date().getTime() }; }; self.go = function( withOfflineCache ) { if(navigator.onLine===false && withOfflineCache) { OFX.appendToOfflineCache( self ); return true; } if(action) { if(data) { if(typeof data == "object") { var dataString = ""; for(var name in data) { if(dataString.length>0) dataString += "&"; if(typeof data[name] == "object") { dataString += name + "="+ JSON.stringify( data[name] ); } else { dataString += name + "="+ data[name]; } } data = dataString; } } var post = JSON.post(url,action,data); if(callBack) { post = post.onSuccess( callBack ); } if(callOnError) { post = post.onError(callOnError); } post.go(); } else { OpenForum.saveFile(url,data); } }; }; return new POST(url); } };