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 From 09a3f7b86cd66704ca9afccf737459b92a6685bd Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 22 Jul 2011 17:59:48 +0200 Subject: [fix] corrected al's apparent inability to copy paste without adding bugs bzr revid: nicolas.vanhoren@openerp.com-20110722155948-1vgw3g03jqr0ni6b --- addons/base/static/src/js/controller.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 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..10355a267a3 100644 --- a/addons/base/static/src/js/controller.js +++ b/addons/base/static/src/js/controller.js @@ -137,8 +137,7 @@ 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_children = []; + this.children = []; this.parent = parent; if(this.parent && this.parent.children) { this.parent.children.push(this); @@ -174,6 +173,10 @@ instance.base.BasicController = instance.base.Class.extend( /** @lends instance. return $.Deferred().done().promise(); }, stop: function() { + if (this.parent && this.parent.children) { + this.parent.children = _.without(this.parent.children, this); + } + this.parent = null; }, log: function() { var args = Array.prototype.slice.call(arguments); -- cgit v1.2.3 From 7d0a18e84c933ba7febe1b51f92b62f8dbc22c08 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 22 Jul 2011 18:27:01 +0200 Subject: [fix] lot of bugs with contollers due to merge bzr revid: nicolas.vanhoren@openerp.com-20110722162701-me9jag18dp5m05wz --- addons/base/static/src/js/controller.js | 2 ++ 1 file changed, 2 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 54e876295f7..c9ca3193e70 100644 --- a/addons/base/static/src/js/controller.js +++ b/addons/base/static/src/js/controller.js @@ -202,8 +202,10 @@ instance.base.Controller = instance.base.Class.extend( /** @lends instance.base. stop: function() { if (this.parent && this.parent.children) { this.parent.children = _.without(this.parent.children, this); + this.parent.controller_children = this.parent.children; } this.parent = null; + this.controller_parent = null; }, log: function() { var args = Array.prototype.slice.call(arguments); -- cgit v1.2.3