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