observable.js 3.4 KB

12345678
  1. /*
  2. Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
  3. Available via Academic Free License >= 2.1 OR the modified BSD license.
  4. see: http://dojotoolkit.org/license for details
  5. */
  6. if(!dojo._hasResource["dojox.lang.observable"]){dojo._hasResource["dojox.lang.observable"]=true;dojo.provide("dojox.lang.observable");dojo.experimental("dojox.lang.observable");dojox.lang.observable=function(_1,_2,_3,_4){return dojox.lang.makeObservable(_2,_3,_4)(_1);};dojox.lang.makeObservable=function(_5,_6,_7,_8){_8=_8||{};_7=_7||function(_9,_a,_b,_c){return _a[_b].apply(_9,_c);};function _d(_e,_f,i){return function(){return _7(_e,_f,i,arguments);};};if(dojox.lang.lettableWin){var _10=dojox.lang.makeObservable;_10.inc=(_10.inc||0)+1;var _11="gettable_"+_10.inc;dojox.lang.lettableWin[_11]=_5;var _12="settable_"+_10.inc;dojox.lang.lettableWin[_12]=_6;var _13={};return function(_14){if(_14.__observable){return _14.__observable;}if(_14.data__){throw new Error("Can wrap an object that is already wrapped");}var _15=[],i,l;for(i in _8){_15.push(i);}var _16={type:1,event:1};for(i in _14){if(i.match(/^[a-zA-Z][\w\$_]*$/)&&!(i in _8)&&!(i in _16)){_15.push(i);}}var _17=_15.join(",");var _18,_19=_13[_17];if(!_19){var _1a="dj_lettable_"+(_10.inc++);var _1b=_1a+"_dj_getter";var _1c=["Class "+_1a,"\tPublic data__"];for(i=0,l=_15.length;i<l;i++){_18=_15[i];var _1d=typeof _14[_18];if(_1d=="function"||_8[_18]){_1c.push(" Public "+_18);}else{if(_1d!="object"){_1c.push("\tPublic Property Let "+_18+"(val)","\t\tCall "+_12+"(me.data__,\""+_18+"\",val)","\tEnd Property","\tPublic Property Get "+_18,"\t\t"+_18+" = "+_11+"(me.data__,\""+_18+"\")","\tEnd Property");}}}_1c.push("End Class");_1c.push("Function "+_1b+"()","\tDim tmp","\tSet tmp = New "+_1a,"\tSet "+_1b+" = tmp","End Function");dojox.lang.lettableWin.vbEval(_1c.join("\n"));_13[_17]=_19=function(){return dojox.lang.lettableWin.construct(_1b);};}var _1e=_19();_1e.data__=_14;try{_14.__observable=_1e;}catch(e){}for(i=0,l=_15.length;i<l;i++){_18=_15[i];try{var val=_14[_18];}catch(e){}if(typeof val=="function"||_8[_18]){_1e[_18]=_d(_1e,_14,_18);}}return _1e;};}else{return function(_1f){if(_1f.__observable){return _1f.__observable;}var _20=_1f instanceof Array?[]:{};_20.data__=_1f;for(var i in _1f){if(i.charAt(0)!="_"){if(typeof _1f[i]=="function"){_20[i]=_d(_20,_1f,i);}else{if(typeof _1f[i]!="object"){(function(i){_20.__defineGetter__(i,function(){return _5(_1f,i);});_20.__defineSetter__(i,function(_21){return _6(_1f,i,_21);});})(i);}}}}for(i in _8){_20[i]=_d(_20,_1f,i);}_1f.__observable=_20;return _20;};}};if(!{}.__defineGetter__){if(dojo.isIE){var frame;if(document.body){frame=document.createElement("iframe");document.body.appendChild(frame);}else{document.write("<iframe id='dj_vb_eval_frame'></iframe>");frame=document.getElementById("dj_vb_eval_frame");}frame.style.display="none";var doc=frame.contentWindow.document;dojox.lang.lettableWin=frame.contentWindow;doc.write("<html><head><script language=\"VBScript\" type=\"text/VBScript\">"+"Function vb_global_eval(code)"+"ExecuteGlobal(code)"+"End Function"+"</script>"+"<script type=\"text/javascript\">"+"function vbEval(code){ \n"+"return vb_global_eval(code);"+"}"+"function construct(name){ \n"+"return window[name]();"+"}"+"</script>"+"</head><body>vb-eval</body></html>");doc.close();}else{throw new Error("This browser does not support getters and setters");}}dojox.lang.ReadOnlyProxy=dojox.lang.makeObservable(function(obj,i){return obj[i];},function(obj,i,_22){});}