diff --git a/addons/base/static/src/js/core.js b/addons/base/static/src/js/core.js index 96c6cb1372a..5c2e6554785 100644 --- a/addons/base/static/src/js/core.js +++ b/addons/base/static/src/js/core.js @@ -10,6 +10,9 @@ openerp.base.core = function(openerp) { var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/; // The base Class implementation (does nothing) + /** + * @class + */ openerp.base.Class = function(){}; // Create a new Class that inherits from this class diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index a0440221520..7fe995f533f 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -1179,7 +1179,164 @@ openerp.base.ListView.Groups = openerp.base.Class.extend( /** @lends openerp.bas }); } }); + +/** + * @class + * @extends openerp.base.Class + */ +var Events = { + /** + * @param {String} event event to listen to on the current object, null for all events + * @param {Function} handler event handler to bind to the relevant event + * @returns this + */ + bind: function (event, handler) { + var calls = this['_callbacks'] || (this._callbacks = {}); + + if (event in calls) { + calls[event].push(handler); + } else { + calls[event] = [handler]; + } + return this; + }, + /** + * @param {String} event + * @returns this + */ + trigger: function (event) { + var calls; + if (!(calls = this._callbacks)) { return this; } + var callbacks = (calls[event] || []).concat(calls[null] || []); + for(var i=0, length=callbacks.length; i +