dojo.provide("dojox.lang.utils"); (function(){ var empty = {}, du = dojox.lang.utils; var clone = function(o){ if(dojo.isArray(o)){ return dojo._toArray(o); } if(!dojo.isObject(o) || dojo.isFunction(o)){ return o; } return dojo.delegate(o); } dojo.mixin(du, { coerceType: function(target, source){ switch(typeof target){ case "number": return Number(eval("(" + source + ")")); case "string": return String(source); case "boolean": return Boolean(eval("(" + source + ")")); } return eval("(" + source + ")"); }, updateWithObject: function(target, source, conv){ // summary: updates an existing object in place with properties from an "source" object. // target: Object: the "target" object to be updated // source: Object: the "source" object, whose properties will be used to source the existed object. // conv: Boolean?: force conversion to the original type if(!source){ return target; } for(var x in target){ if(x in source && !(x in empty)){ var t = target[x]; if(t && typeof t == "object"){ du.updateWithObject(t, source[x], conv); }else{ target[x] = conv ? du.coerceType(t, source[x]) : clone(source[x]); } } } return target; // Object }, updateWithPattern: function(target, source, pattern, conv){ // summary: updates an existing object in place with properties from an "source" object. // target: Object: the "target" object to be updated // source: Object: the "source" object, whose properties will be used to source the existed object. // pattern: Array: an array of properties to be copied // conv: Boolean?: force conversion to the original type if(!source || !pattern){ return target; } for(var x in pattern){ if(x in source && !(x in empty)){ target[x] = conv ? du.coerceType(pattern[x], source[x]) : clone(source[x]); } } return target; // Object } }); })();