Mercurial > pub > ImplabJs
diff core/src/js/declare/override.js @ 29:acdcdf1a8d21
repository reorganized
author | cin |
---|---|
date | Tue, 26 Jun 2018 19:35:44 +0300 |
parents | src/implab/declare/override.js@9663631cbdb9 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/src/js/declare/override.js Tue Jun 26 19:35:44 2018 +0300 @@ -0,0 +1,73 @@ +"use strict"; +define([], function () { + var slice = Array.prototype.slice; + var override = function (method) { + var proxy; + + /** @this target object */ + proxy = function () { + var me = this; + var inherited = (this.getInherited && this.getInherited(proxy.nom, { + callee: proxy + })) || function () {}; + + return method.apply(me, [function () { + return inherited.apply(me, arguments); + }].concat(slice.apply(arguments))); + }; + + proxy.method = method; + proxy.overrides = true; + + return proxy; + }; + + override.before = function (method) { + var proxy; + + /** @this target object */ + proxy = function () { + var me = this; + var inherited = (this.getInherited && this.getInherited(proxy.nom, { + callee: proxy + })) || function () {}; + + + method.apply(me, arguments); + return inherited.apply(me, arguments); + }; + + proxy.method = method; + proxy.overrides = true; + + return proxy; + }; + + override.after = function (method) { + var proxy; + + /** @this target object */ + proxy = function () { + var me = this; + var inherited = (this.getInherited && this.getInherited(proxy.nom, { + callee: proxy + })) || function () {}; + + inherited.apply(me, arguments); + + return method.apply(me, arguments); + }; + + proxy.method = method; + proxy.overrides = true; + + return proxy; + }; + + override.hide = function (method) { + method.overrides = false; + return method; + }; + + return override; +}); \ No newline at end of file