246 lines
5.0 KiB
JavaScript
246 lines
5.0 KiB
JavaScript
//>>built
|
|
define("dojox/json/ref",["dojo/_base/array","dojo/_base/json","dojo/_base/kernel","dojo/_base/lang","dojo/date/stamp","dojox"],function(_1,_2,_3,_4,_5,_6){
|
|
_4.getObject("json",true,_6);
|
|
return _6.json.ref={resolveJson:function(_7,_8){
|
|
_8=_8||{};
|
|
var _9=_8.idAttribute||"id";
|
|
var _a=this.refAttribute;
|
|
var _b=_8.idAsRef;
|
|
var _c=_8.idPrefix||"";
|
|
var _d=_8.assignAbsoluteIds;
|
|
var _e=_8.index||{};
|
|
var _f=_8.timeStamps;
|
|
var ref,_10=[];
|
|
var _11=/^(.*\/)?(\w+:\/\/)|[^\/\.]+\/\.\.\/|^.*\/(\/)/;
|
|
var _12=this._addProp;
|
|
var F=function(){
|
|
};
|
|
function _13(it,_14,_15,_16,_17,_18,_19){
|
|
var i,_1a,val,id=_9 in it?it[_9]:_15;
|
|
if(_9 in it||((id!==undefined)&&_16)){
|
|
id=(_c+id).replace(_11,"$2$3");
|
|
}
|
|
var _1b=_18||it;
|
|
if(id!==undefined){
|
|
if(_d){
|
|
it.__id=id;
|
|
}
|
|
if(_8.schemas&&(!(it instanceof Array))&&(val=id.match(/^(.+\/)[^\.\[]*$/))){
|
|
_17=_8.schemas[val[1]];
|
|
}
|
|
if(_e[id]&&((it instanceof Array)==(_e[id] instanceof Array))){
|
|
_1b=_e[id];
|
|
delete _1b.$ref;
|
|
delete _1b._loadObject;
|
|
_1a=true;
|
|
}else{
|
|
var _1c=_17&&_17.prototype;
|
|
if(_1c){
|
|
F.prototype=_1c;
|
|
_1b=new F();
|
|
}
|
|
}
|
|
_e[id]=_1b;
|
|
if(_f){
|
|
_f[id]=_8.time;
|
|
}
|
|
}
|
|
while(_17){
|
|
var _1d=_17.properties;
|
|
if(_1d){
|
|
for(i in it){
|
|
var _1e=_1d[i];
|
|
if(_1e&&_1e.format=="date-time"&&typeof it[i]=="string"){
|
|
it[i]=_5.fromISOString(it[i]);
|
|
}
|
|
}
|
|
}
|
|
_17=_17["extends"];
|
|
}
|
|
var _1f=it.length;
|
|
for(i in it){
|
|
if(i==_1f){
|
|
break;
|
|
}
|
|
if(it.hasOwnProperty(i)){
|
|
val=it[i];
|
|
if((typeof val=="object")&&val&&!(val instanceof Date)&&i!="__parent"){
|
|
ref=val[_a]||(_b&&val[_9]);
|
|
if(it!=_10&&(!ref||!val.__parent)){
|
|
val.__parent=_19?_19:_1b;
|
|
}
|
|
if(ref){
|
|
delete it[i];
|
|
var _20=ref.toString().replace(/(#)([^\.\[])/,"$1.$2").match(/(^([^\[]*\/)?[^#\.\[]*)#?([\.\[].*)?/);
|
|
if(_e[(_c+ref).replace(_11,"$2$3")]){
|
|
ref=_e[(_c+ref).replace(_11,"$2$3")];
|
|
}else{
|
|
if((ref=(_20[1]=="$"||_20[1]=="this"||_20[1]=="")?_7:_e[(_c+_20[1]).replace(_11,"$2$3")])){
|
|
if(_20[3]){
|
|
_20[3].replace(/(\[([^\]]+)\])|(\.?([^\.\[]+))/g,function(t,a,b,c,d){
|
|
ref=ref&&ref[b?b.replace(/[\"\'\\]/,""):d];
|
|
});
|
|
}
|
|
}
|
|
}
|
|
if(ref){
|
|
val=ref;
|
|
}else{
|
|
if(!_14){
|
|
var _21;
|
|
if(!_21){
|
|
_10.push(_1b);
|
|
}
|
|
_21=true;
|
|
val=_13(val,false,val[_a],true,_1e);
|
|
val._loadObject=_8.loader;
|
|
}
|
|
}
|
|
}else{
|
|
if(!_14){
|
|
val=_13(val,_10==it,id===undefined?undefined:_12(id,i),false,_1e,_1b!=it&&typeof _1b[i]=="object"&&_1b[i],it);
|
|
}
|
|
}
|
|
}
|
|
it[i]=val;
|
|
if(_1b!=it&&!_1b.__isDirty){
|
|
var old=_1b[i];
|
|
_1b[i]=val;
|
|
if(_1a&&val!==old&&!_1b._loadObject&&!(i.charAt(0)=="_"&&i.charAt(1)=="_")&&i!="$ref"&&!(val instanceof Date&&old instanceof Date&&val.getTime()==old.getTime())&&!(typeof val=="function"&&typeof old=="function"&&val.toString()==old.toString())&&_e.onUpdate){
|
|
_e.onUpdate(_1b,i,old,val);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if(_1a&&(_9 in it||_1b instanceof Array)){
|
|
for(i in _1b){
|
|
if(!_1b.__isDirty&&_1b.hasOwnProperty(i)&&!it.hasOwnProperty(i)&&!(i.charAt(0)=="_"&&i.charAt(1)=="_")&&!(_1b instanceof Array&&isNaN(i))){
|
|
if(_e.onUpdate&&i!="_loadObject"&&i!="_idAttr"){
|
|
_e.onUpdate(_1b,i,_1b[i],undefined);
|
|
}
|
|
delete _1b[i];
|
|
while(_1b instanceof Array&&_1b.length&&_1b[_1b.length-1]===undefined){
|
|
_1b.length--;
|
|
}
|
|
}
|
|
}
|
|
}else{
|
|
if(_e.onLoad){
|
|
_e.onLoad(_1b);
|
|
}
|
|
}
|
|
return _1b;
|
|
};
|
|
if(_7&&typeof _7=="object"){
|
|
_7=_13(_7,false,_8.defaultId,true);
|
|
_13(_10,false);
|
|
}
|
|
return _7;
|
|
},fromJson:function(str,_22){
|
|
function ref(_23){
|
|
var _24={};
|
|
_24[this.refAttribute]=_23;
|
|
return _24;
|
|
};
|
|
try{
|
|
var _25=eval("("+str+")");
|
|
}
|
|
catch(e){
|
|
throw new SyntaxError("Invalid JSON string: "+e.message+" parsing: "+str);
|
|
}
|
|
if(_25){
|
|
return this.resolveJson(_25,_22);
|
|
}
|
|
return _25;
|
|
},toJson:function(it,_26,_27,_28){
|
|
var _29=this._useRefs;
|
|
var _2a=this._addProp;
|
|
var _2b=this.refAttribute;
|
|
_27=_27||"";
|
|
var _2c={};
|
|
var _2d={};
|
|
function _2e(it,_2f,_30){
|
|
if(typeof it=="object"&&it){
|
|
var _31;
|
|
if(it instanceof Date){
|
|
return "\""+_5.toISOString(it,{zulu:true})+"\"";
|
|
}
|
|
var id=it.__id;
|
|
if(id){
|
|
if(_2f!="#"&&((_29&&!id.match(/#/))||_2c[id])){
|
|
var ref=id;
|
|
if(id.charAt(0)!="#"){
|
|
if(it.__clientId==id){
|
|
ref="cid:"+id;
|
|
}else{
|
|
if(id.substring(0,_27.length)==_27){
|
|
ref=id.substring(_27.length);
|
|
}else{
|
|
ref=id;
|
|
}
|
|
}
|
|
}
|
|
var _32={};
|
|
_32[_2b]=ref;
|
|
return _2e(_32,"#");
|
|
}
|
|
_2f=id;
|
|
}else{
|
|
it.__id=_2f;
|
|
_2d[_2f]=it;
|
|
}
|
|
_2c[_2f]=it;
|
|
_30=_30||"";
|
|
var _33=_26?_30+_2.toJsonIndentStr:"";
|
|
var _34=_26?"\n":"";
|
|
var sep=_26?" ":"";
|
|
if(it instanceof Array){
|
|
var res=_1.map(it,function(obj,i){
|
|
var val=_2e(obj,_2a(_2f,i),_33);
|
|
if(typeof val!="string"){
|
|
val="undefined";
|
|
}
|
|
return _34+_33+val;
|
|
});
|
|
return "["+res.join(","+sep)+_34+_30+"]";
|
|
}
|
|
var _35=[];
|
|
for(var i in it){
|
|
if(it.hasOwnProperty(i)){
|
|
var _36;
|
|
if(typeof i=="number"){
|
|
_36="\""+i+"\"";
|
|
}else{
|
|
if(typeof i=="string"&&(i.charAt(0)!="_"||i.charAt(1)!="_")){
|
|
_36=_2._escapeString(i);
|
|
}else{
|
|
continue;
|
|
}
|
|
}
|
|
var val=_2e(it[i],_2a(_2f,i),_33);
|
|
if(typeof val!="string"){
|
|
continue;
|
|
}
|
|
_35.push(_34+_33+_36+":"+sep+val);
|
|
}
|
|
}
|
|
return "{"+_35.join(","+sep)+_34+_30+"}";
|
|
}else{
|
|
if(typeof it=="function"&&_6.json.ref.serializeFunctions){
|
|
return it.toString();
|
|
}
|
|
}
|
|
return _2.toJson(it);
|
|
};
|
|
var _37=_2e(it,"#","");
|
|
if(!_28){
|
|
for(var i in _2d){
|
|
delete _2d[i].__id;
|
|
}
|
|
}
|
|
return _37;
|
|
},_addProp:function(id,_38){
|
|
return id+(id.match(/#/)?id.length==1?"":".":"#")+_38;
|
|
},refAttribute:"$ref",_useRefs:false,serializeFunctions:false};
|
|
});
|