blob: 0c70b285dea56ae55330682dc6e19454bddab9f4 [file] [log] [blame]
/*
Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if(!dojo._hasResource["dojox.rpc.OfflineRest"]){
dojo._hasResource["dojox.rpc.OfflineRest"]=true;
dojo.provide("dojox.rpc.OfflineRest");
dojo.require("dojox.data.ClientFilter");
dojo.require("dojox.rpc.Rest");
dojo.require("dojox.storage");
(function(){
var _1=dojox.rpc.Rest;
var _2="dojox_rpc_OfflineRest";
var _3;
var _4=_1._index;
dojox.storage.manager.addOnLoad(function(){
_3=dojox.storage.manager.available;
for(var i in _4){
_6(_4[i],i);
}
});
var _7;
function _8(_9){
return _9.replace(/[^0-9A-Za-z_]/g,"_");
};
function _6(_a,id){
if(_3&&!_7&&(id||(_a&&_a.__id))){
dojox.storage.put(_8(id||_a.__id),typeof _a=="object"?dojox.json.ref.toJson(_a):_a,function(){
},_2);
}
};
function _c(_d){
return _d instanceof Error&&(_d.status==503||_d.status>12000||!_d.status);
};
function _e(){
if(_3){
var _f=dojox.storage.get("dirty",_2);
if(_f){
for(var _10 in _f){
_11(_10,_f);
}
}
}
};
var _12;
function _13(){
_12.sendChanges();
_12.downloadChanges();
};
var _14=setInterval(_13,15000);
dojo.connect(document,"ononline",_13);
_12=dojox.rpc.OfflineRest={turnOffAutoSync:function(){
clearInterval(_14);
},sync:_13,sendChanges:_e,downloadChanges:function(){
},addStore:function(_15,_16){
_12.stores.push(_15);
_15.fetch({queryOptions:{cache:true},query:_16,onComplete:function(_17,_18){
_15._localBaseResults=_17;
_15._localBaseFetch=_18;
}});
}};
_12.stores=[];
var _19=_1._get;
_1._get=function(_1a,id){
try{
_e();
if(window.navigator&&navigator.onLine===false){
throw new Error();
}
var dfd=_19(_1a,id);
}
catch(e){
dfd=new dojo.Deferred();
dfd.errback(e);
}
var _1d=dojox.rpc._sync;
dfd.addCallback(function(_1e){
_6(_1e,_1a.servicePath+id);
return _1e;
});
dfd.addErrback(function(_1f){
if(_3){
if(_c(_1f)){
var _20={};
var _21=function(id,_23){
if(_20[id]){
return _23;
}
var _24=dojo.fromJson(dojox.storage.get(_8(id),_2))||_23;
_20[id]=_24;
for(var i in _24){
var val=_24[i];
if(val&&val.$ref){
_24[i]=_21(val.$ref,val);
}
}
if(_24 instanceof Array){
for(i=0;i<_24.length;i++){
if(_24[i]===undefined){
_24.splice(i--,1);
}
}
}
return _24;
};
_7=true;
var _27=_21(_1a.servicePath+id);
if(!_27){
return _1f;
}
_7=false;
return _27;
}else{
return _1f;
}
}else{
if(_1d){
return new Error("Storage manager not loaded, can not continue");
}
dfd=new dojo.Deferred();
dfd.addCallback(arguments.callee);
dojox.storage.manager.addOnLoad(function(){
dfd.callback();
});
return dfd;
}
});
return dfd;
};
var _28=_1._change;
_1._change=function(_29,_2a,id,_2c){
if(!_3){
return _28.apply(this,arguments);
}
var _2d=_2a.servicePath+id;
if(_29=="delete"){
dojox.storage.remove(_8(_2d),_2);
}else{
dojox.storage.put(_8(dojox.rpc.JsonRest._contentId),_2c,function(){
},_2);
}
var _2e=_2a._store;
if(_2e){
_2e.updateResultSet(_2e._localBaseResults,_2e._localBaseFetch);
dojox.storage.put(_8(_2a.servicePath+_2e._localBaseFetch.query),dojox.json.ref.toJson(_2e._localBaseResults),function(){
},_2);
}
var _2f=dojox.storage.get("dirty",_2)||{};
if(_29=="put"||_29=="delete"){
var _30=_2d;
}else{
_30=0;
for(var i in _2f){
if(!isNaN(parseInt(i))){
_30=i;
}
}
_30++;
}
_2f[_30]={method:_29,id:_2d,content:_2c};
return _11(_30,_2f);
};
function _11(_32,_33){
var _34=_33[_32];
var _35=dojox.rpc.JsonRest.getServiceAndId(_34.id);
var _36=_28(_34.method,_35.service,_35.id,_34.content);
_33[_32]=_34;
dojox.storage.put("dirty",_33,function(){
},_2);
_36.addBoth(function(_37){
if(_c(_37)){
return null;
}
var _38=dojox.storage.get("dirty",_2)||{};
delete _38[_32];
dojox.storage.put("dirty",_38,function(){
},_2);
return _37;
});
return _36;
};
dojo.connect(_4,"onLoad",_6);
dojo.connect(_4,"onUpdate",_6);
})();
}