webui-aria2/js/libs/dojox/data/JsonRestStore.js
2012-05-01 19:52:07 +08:00

238 lines
6.0 KiB
JavaScript

//>>built
define("dojox/data/JsonRestStore",["dojo/_base/lang","dojo/_base/declare","dojo/_base/connect","dojox/rpc/Rest","dojox/rpc/JsonRest","dojox/json/schema","dojox/data/ServiceStore"],function(_1,_2,_3,_4,_5,_6,_7){
var _8=_2("dojox.data.JsonRestStore",_7,{constructor:function(_9){
_3.connect(_4._index,"onUpdate",this,function(_a,_b,_c,_d){
var _e=this.service.servicePath;
if(!_a.__id){
}else{
if(_a.__id.substring(0,_e.length)==_e){
this.onSet(_a,_b,_c,_d);
}
}
});
this.idAttribute=this.idAttribute||"id";
if(typeof _9.target=="string"){
_9.target=_9.target.match(/\/$/)||this.allowNoTrailingSlash?_9.target:(_9.target+"/");
if(!this.service){
this.service=_5.services[_9.target]||_4(_9.target,true);
}
}
_5.registerService(this.service,_9.target,this.schema);
this.schema=this.service._schema=this.schema||this.service._schema||{};
this.service._store=this;
this.service.idAsRef=this.idAsRef;
this.schema._idAttr=this.idAttribute;
var _f=_5.getConstructor(this.service);
var _10=this;
this._constructor=function(_11){
_f.call(this,_11);
_10.onNew(this);
};
this._constructor.prototype=_f.prototype;
this._index=_4._index;
},loadReferencedSchema:true,idAsRef:false,referenceIntegrity:true,target:"",allowNoTrailingSlash:false,newItem:function(_12,_13){
_12=new this._constructor(_12);
if(_13){
var _14=this.getValue(_13.parent,_13.attribute,[]);
_14=_14.concat([_12]);
_12.__parent=_14;
this.setValue(_13.parent,_13.attribute,_14);
}
return _12;
},deleteItem:function(_15){
var _16=[];
var _17=_18._getStoreForItem(_15)||this;
if(this.referenceIntegrity){
_5._saveNotNeeded=true;
var _19=_4._index;
var _1a=function(_1b){
var _1c;
_16.push(_1b);
_1b.__checked=1;
for(var i in _1b){
if(i.substring(0,2)!="__"){
var _1d=_1b[i];
if(_1d==_15){
if(_1b!=_19){
if(_1b instanceof Array){
(_1c=_1c||[]).push(i);
}else{
(_18._getStoreForItem(_1b)||_17).unsetAttribute(_1b,i);
}
}
}else{
if((typeof _1d=="object")&&_1d){
if(!_1d.__checked){
_1a(_1d);
}
if(typeof _1d.__checked=="object"&&_1b!=_19){
(_18._getStoreForItem(_1b)||_17).setValue(_1b,i,_1d.__checked);
}
}
}
}
}
if(_1c){
i=_1c.length;
_1b=_1b.__checked=_1b.concat();
while(i--){
_1b.splice(_1c[i],1);
}
return _1b;
}
return null;
};
_1a(_19);
_5._saveNotNeeded=false;
var i=0;
while(_16[i]){
delete _16[i++].__checked;
}
}
_5.deleteObject(_15);
_17.onDelete(_15);
},changing:function(_1e,_1f){
_5.changing(_1e,_1f);
},cancelChanging:function(_20){
if(!_20.__id){
return;
}
dirtyObjects=_21=_5.getDirtyObjects();
for(var i=0;i<dirtyObjects.length;i++){
var _21=dirtyObjects[i];
if(_20==_21.object){
dirtyObjects.splice(i,1);
return;
}
}
},setValue:function(_22,_23,_24){
var old=_22[_23];
var _25=_22.__id?_18._getStoreForItem(_22):this;
if(_6&&_25.schema&&_25.schema.properties){
_6.mustBeValid(_6.checkPropertyChange(_24,_25.schema.properties[_23]));
}
if(_23==_25.idAttribute){
throw new Error("Can not change the identity attribute for an item");
}
_25.changing(_22);
_22[_23]=_24;
if(_24&&!_24.__parent){
_24.__parent=_22;
}
_25.onSet(_22,_23,old,_24);
},setValues:function(_26,_27,_28){
if(!_1.isArray(_28)){
throw new Error("setValues expects to be passed an Array object as its value");
}
this.setValue(_26,_27,_28);
},unsetAttribute:function(_29,_2a){
this.changing(_29);
var old=_29[_2a];
delete _29[_2a];
this.onSet(_29,_2a,old,undefined);
},save:function(_2b){
if(!(_2b&&_2b.global)){
(_2b=_2b||{}).service=this.service;
}
if("syncMode" in _2b?_2b.syncMode:this.syncMode){
rpcConfig._sync=true;
}
var _2c=_5.commit(_2b);
this.serverVersion=this._updates&&this._updates.length;
return _2c;
},revert:function(_2d){
_5.revert(_2d&&_2d.global&&this.service);
},isDirty:function(_2e){
return _5.isDirty(_2e,this);
},isItem:function(_2f,_30){
return _2f&&_2f.__id&&(_30||this.service==_5.getServiceAndId(_2f.__id).service);
},_doQuery:function(_31){
var _32=typeof _31.queryStr=="string"?_31.queryStr:_31.query;
var _33=_5.query(this.service,_32,_31);
var _34=this;
if(this.loadReferencedSchema){
_33.addCallback(function(_35){
var _36=_33.ioArgs&&_33.ioArgs.xhr&&_33.ioArgs.xhr.getResponseHeader("Content-Type");
var _37=_36&&_36.match(/definedby\s*=\s*([^;]*)/);
if(_36&&!_37){
_37=_33.ioArgs.xhr.getResponseHeader("Link");
_37=_37&&_37.match(/<([^>]*)>;\s*rel="?definedby"?/);
}
_37=_37&&_37[1];
if(_37){
var _38=_5.getServiceAndId((_34.target+_37).replace(/^(.*\/)?(\w+:\/\/)|[^\/\.]+\/\.\.\/|^.*\/(\/)/,"$2$3"));
var _39=_5.byId(_38.service,_38.id);
_39.addCallbacks(function(_3a){
_1.mixin(_34.schema,_3a);
return _35;
},function(_3b){
console.error(_3b);
return _35;
});
return _39;
}
return undefined;
});
}
return _33;
},_processResults:function(_3c,_3d){
var _3e=_3c.length;
return {totalCount:_3d.fullLength||(_3d.request.count==_3e?(_3d.request.start||0)+_3e*2:_3e),items:_3c};
},getConstructor:function(){
return this._constructor;
},getIdentity:function(_3f){
var id=_3f.__clientId||_3f.__id;
if(!id){
return id;
}
var _40=this.service.servicePath.replace(/[^\/]*$/,"");
return id.substring(0,_40.length)!=_40?id:id.substring(_40.length);
},fetchItemByIdentity:function(_41){
var id=_41.identity;
var _42=this;
if(id.toString().match(/^(\w*:)?\//)){
var _43=_5.getServiceAndId(id);
_42=_43.service._store;
_41.identity=_43.id;
}
_41._prefix=_42.service.servicePath.replace(/[^\/]*$/,"");
return _42.inherited(arguments);
},onSet:function(){
},onNew:function(){
},onDelete:function(){
},getFeatures:function(){
var _44=this.inherited(arguments);
_44["dojo.data.api.Write"]=true;
_44["dojo.data.api.Notification"]=true;
return _44;
},getParent:function(_45){
return _45&&_45.__parent;
}});
_8.getStore=function(_46,_47){
if(typeof _46.target=="string"){
_46.target=_46.target.match(/\/$/)||_46.allowNoTrailingSlash?_46.target:(_46.target+"/");
var _48=(_5.services[_46.target]||{})._store;
if(_48){
return _48;
}
}
return new (_47||_8)(_46);
};
var _18=_1.getObject("dojox.data",true);
_18._getStoreForItem=function(_49){
if(_49.__id){
var _4a=_5.getServiceAndId(_49.__id);
if(_4a&&_4a.service._store){
return _4a.service._store;
}else{
var _4b=_49.__id.toString().match(/.*\//)[0];
return new _8({target:_4b});
}
}
return null;
};
var _4c=_1.getObject("dojox.json.ref",true);
_4c._useRefs=true;
return _8;
});