8398c9048d
code was modified slightly, so the code differs from the original downloadable 1.9.5 version
74 lines
1.8 KiB
JavaScript
74 lines
1.8 KiB
JavaScript
dojo.provide("dojox.lang.oo.aop");
|
|
|
|
dojo.require("dojox.lang.oo.Decorator");
|
|
dojo.require("dojox.lang.oo.chain");
|
|
dojo.require("dojox.lang.oo.general");
|
|
|
|
(function(){
|
|
var oo = dojox.lang.oo, md = oo.makeDecorator, ooa = oo.aop;
|
|
|
|
// 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 = oo.chain.before;
|
|
ooa.around = oo.general.wrap;
|
|
|
|
ooa.afterReturning = md(function(name, newValue, oldValue){
|
|
// summary: creates an "afterReturning" advise,
|
|
// the returned value is passed as the only argument
|
|
return dojo.isFunction(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 dojo.isFunction(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 dojo.isFunction(oldValue) ?
|
|
function(){
|
|
var ret;
|
|
try{
|
|
ret = oldValue.apply(this, arguments);
|
|
}finally{
|
|
newValue.call(this);
|
|
}
|
|
return ret;
|
|
} : function(){ newValue.call(this); }
|
|
});
|
|
})();
|