webui-aria2/js/libs/dojox/lang/oo/aop.js.uncompressed.js
2012-05-01 19:52:07 +08:00

80 lines
2.0 KiB
JavaScript

//>>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); }
});
})();
});