From 519b0350d20897bacfae274e5263a3f42b8feb49 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Fri, 22 Jul 2011 13:21:08 +0200 Subject: [IMP] more controller cleanups bzr revid: al@openerp.com-20110722112108-2p57tmro0l05floq --- addons/base/static/src/js/controller.js | 47 ++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 12 deletions(-) (limited to 'addons/base/static/src/js/controller.js') diff --git a/addons/base/static/src/js/controller.js b/addons/base/static/src/js/controller.js index a5c7bca4b53..fc124e9ec99 100644 --- a/addons/base/static/src/js/controller.js +++ b/addons/base/static/src/js/controller.js @@ -66,7 +66,7 @@ openerp.base.controller = function(instance) { return Class; }; -})(instance.base); +})(); // todo change john resig class to keep window clean instance.base.Class = window.Class @@ -120,15 +120,40 @@ instance.base.callback = function(obj, method) { }); }; +/** + * Generates an inherited class that replaces all the methods by null methods (methods + * that does nothing and always return undefined). + * + * @param {Class} claz + * @param {dict} add Additional functions to override. + * @return {Class} + */ +instance.base.generate_null_object_class = function(claz, add) { + var newer = {}; + var copy_proto = function(prototype) { + for (var name in prototype) { + if(typeof prototype[name] == "function") { + newer[name] = function() {}; + } + } + if (prototype.prototype) + copy_proto(prototype.prototype); + }; + copy_proto(claz.prototype); + newer.init = instance.base.Controller.prototype.init; + var tmpclass = claz.extend(newer); + return tmpclass.extend(add || {}); +}; + /** * OpenERP Controller + * TODO merge BaseWidget with Controller */ -instance.base.BasicController = instance.base.Class.extend( /** @lends instance.base.BasicController# */{ +instance.base.Controller = instance.base.Class.extend( /** @lends instance.base.Controller# */{ /** + * @constructs * rpc operations, event binding and callback calling should be done in - * start() instead of init so that event can be hooked in between. - * - * @constructs + * start() instead of init so that events can be hooked in between. */ init: function(parent, element_id) { this.element_id = element_id; @@ -137,11 +162,10 @@ instance.base.BasicController = instance.base.Class.extend( /** @lends instance. instance.screen[element_id] = this; } // save the parent children relationship - this.controller_parent = null; + this.controller_parent = parent; this.controller_children = []; - this.parent = parent; - if(this.parent && this.parent.children) { - this.parent.children.push(this); + if(parent && parent.controller_children) { + parent.controller_children.push(this); } // Transform on_* method into openerp.base.callbacks @@ -156,9 +180,8 @@ instance.base.BasicController = instance.base.Class.extend( /** @lends instance. } }, /** - * Controller start - * event binding, rpc and callback calling required to initialize the - * object can happen here + * Event binding, rpc and callback calling required to initialize the + * object should happen here * * Returns a promise object letting callers (subclasses and direct callers) * know when this component is done starting -- cgit v1.2.3 From 50180134f12e77e048acc20cae034eacd0b2e6e0 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Fri, 22 Jul 2011 14:15:42 +0200 Subject: [FIX] controller alias parent and children for backward compatibility bzr revid: al@openerp.com-20110722121542-9qgldsrz9b2t050a --- addons/base/static/src/js/controller.js | 3 +++ 1 file changed, 3 insertions(+) (limited to 'addons/base/static/src/js/controller.js') diff --git a/addons/base/static/src/js/controller.js b/addons/base/static/src/js/controller.js index fc124e9ec99..1a100b6cc75 100644 --- a/addons/base/static/src/js/controller.js +++ b/addons/base/static/src/js/controller.js @@ -167,6 +167,9 @@ instance.base.Controller = instance.base.Class.extend( /** @lends instance.base. if(parent && parent.controller_children) { parent.controller_children.push(this); } + // backward compatibility + this.parent = this.controller_parent; + this.children = this.controller_children; // Transform on_* method into openerp.base.callbacks for (var name in this) { -- cgit v1.2.3