diff options
Diffstat (limited to 'js/dojo-1.7.2/dojox/lang/oo/aop.js')
| -rw-r--r-- | js/dojo-1.7.2/dojox/lang/oo/aop.js | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/lang/oo/aop.js b/js/dojo-1.7.2/dojox/lang/oo/aop.js new file mode 100644 index 0000000..df2f03b --- /dev/null +++ b/js/dojo-1.7.2/dojox/lang/oo/aop.js @@ -0,0 +1,79 @@ +//>>built +// wrapped by build app +define("dojox/lang/oo/aop", ["dijit","dojo","dojox","dojo/require!dojox/lang/oo/Decorator,dojox/lang/oo/general"], function(dijit,dojo,dojox){ +dojo.provide("dojox.lang.oo.aop"); + +dojo.require("dojox.lang.oo.Decorator"); +dojo.require("dojox.lang.oo.general"); + +(function(){ + var oo = dojox.lang.oo, md = oo.makeDecorator, oog = oo.general, ooa = oo.aop, + isF = dojo.isFunction; + + // five decorators implementing light-weight AOP weaving + + /*===== + ooa.before = md(function(name, newValue, oldValue){ + // summary: creates a "before" advise, by calling new function + // before the old one + + // dummy body + }); + + ooa.around = md(function(name, newValue, oldValue){ + // summary: creates an "around" advise, + // the previous value is passed as a first argument and can be null, + // arguments are passed as a second argument + + // dummy body + }); + =====*/ + + // reuse existing decorators + ooa.before = oog.before; + ooa.around = oog.wrap; + + ooa.afterReturning = md(function(name, newValue, oldValue){ + // summary: creates an "afterReturning" advise, + // the returned value is passed as the only argument + return isF(oldValue) ? + function(){ + var ret = oldValue.apply(this, arguments); + newValue.call(this, ret); + return ret; + } : function(){ newValue.call(this); }; + }); + + ooa.afterThrowing = md(function(name, newValue, oldValue){ + // summary: creates an "afterThrowing" advise, + // the exception is passed as the only argument + return isF(oldValue) ? + function(){ + var ret; + try{ + ret = oldValue.apply(this, arguments); + }catch(e){ + newValue.call(this, e); + throw e; + } + return ret; + } : oldValue; + }); + + ooa.after = md(function(name, newValue, oldValue){ + // summary: creates an "after" advise, + // it takes no arguments + return isF(oldValue) ? + function(){ + var ret; + try{ + ret = oldValue.apply(this, arguments); + }finally{ + newValue.call(this); + } + return ret; + } : function(){ newValue.call(this); } + }); +})(); + +}); |
