From 2decff7b213725caaa372fbde01a2f1d22aca7bf Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Fri, 15 Jul 2011 16:16:00 +0200 Subject: [PATCH] controller move Class from base to controller bzr revid: al@openerp.com-20110715141600-4tr536v7vfrv9tkk --- addons/base/static/src/base.html | 1 + addons/base/static/src/js/base.js | 67 +-------------------- addons/base/static/src/js/chrome.js | 6 +- addons/base/static/src/js/controller.js | 78 +++++++++++++++++++++++++ addons/base/static/src/js/list.js | 4 +- addons/base/static/src/js/search.js | 2 +- 6 files changed, 86 insertions(+), 72 deletions(-) create mode 100644 addons/base/static/src/js/controller.js diff --git a/addons/base/static/src/base.html b/addons/base/static/src/base.html index 2761638c6d0..173539cace7 100644 --- a/addons/base/static/src/base.html +++ b/addons/base/static/src/base.html @@ -23,6 +23,7 @@ + diff --git a/addons/base/static/src/js/base.js b/addons/base/static/src/js/base.js index 8a040a64097..c0c1f9131d9 100644 --- a/addons/base/static/src/js/base.js +++ b/addons/base/static/src/js/base.js @@ -1,69 +1,3 @@ -/*--------------------------------------------------------- - * John Resig Class, to be moved to openerp.base.Class - *---------------------------------------------------------*/ - -(function() { - var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/; - // The base Class implementation (does nothing) - this.Class = function(){}; - - // Create a new Class that inherits from this class - Class.extend = function(prop) { - var _super = this.prototype; - - // Instantiate a base class (but only create the instance, - // don't run the init constructor) - initializing = true; - var prototype = new this(); - initializing = false; - - // Copy the properties over onto the new prototype - for (var name in prop) { - // Check if we're overwriting an existing function - prototype[name] = typeof prop[name] == "function" && - typeof _super[name] == "function" && fnTest.test(prop[name]) ? - (function(name, fn){ - return function() { - var tmp = this._super; - - // Add a new ._super() method that is the same method - // but on the super-class - this._super = _super[name]; - - // The method only need to be bound temporarily, so we - // remove it when we're done executing - var ret = fn.apply(this, arguments); - this._super = tmp; - - return ret; - }; - })(name, prop[name]) : - prop[name]; - } - - // The dummy class constructor - function Class() { - // All construction is actually done in the init method - if ( !initializing && this.init ) { - var ret = this.init.apply(this, arguments); - if (ret) { return ret; } - } - return this; - } - - // Populate our constructed prototype object - Class.prototype = prototype; - - // Enforce the constructor to be what we expect - Class.constructor = Class; - - // And make this class extendable - Class.extend = arguments.callee; - - return Class; - }; -})(); - //--------------------------------------------------------- // OpenERP initialisation and black magic about the pool //--------------------------------------------------------- @@ -125,6 +59,7 @@ /** @namespace */ openerp.base = function(instance) { + openerp.base.controller(instance); openerp.base.dates(instance); openerp.base.chrome(instance); openerp.base.data(instance); diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 5eb0261100e..cf1aed1b47b 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -58,7 +58,7 @@ openerp.base.callback = function(obj, method) { * * @class */ -openerp.base.NotFound = Class.extend( /** @lends openerp.base.NotFound# */ { +openerp.base.NotFound = openerp.base.Class.extend( /** @lends openerp.base.NotFound# */ { }); openerp.base.KeyNotFound = openerp.base.NotFound.extend( /** @lends openerp.base.KeyNotFound# */ { /** @@ -91,7 +91,7 @@ openerp.base.ObjectNotFound = openerp.base.NotFound.extend( /** @lends openerp.b return "Could not find any object of path " + this.path; } }); -openerp.base.Registry = Class.extend( /** @lends openerp.base.Registry# */ { +openerp.base.Registry = openerp.base.Class.extend( /** @lends openerp.base.Registry# */ { /** * Stores a mapping of arbitrary key (strings) to object paths (as strings * as well). @@ -185,7 +185,7 @@ openerp.base.Registry = Class.extend( /** @lends openerp.base.Registry# */ { } }); -openerp.base.BasicController = Class.extend( /** @lends openerp.base.BasicController# */{ +openerp.base.BasicController = openerp.base.Class.extend( /** @lends openerp.base.BasicController# */{ /** * rpc operations, event binding and callback calling should be done in * start() instead of init so that event can be hooked in between. diff --git a/addons/base/static/src/js/controller.js b/addons/base/static/src/js/controller.js new file mode 100644 index 00000000000..0d2fe0a9cc0 --- /dev/null +++ b/addons/base/static/src/js/controller.js @@ -0,0 +1,78 @@ +/*--------------------------------------------------------- + * OpenERP controller framework + *--------------------------------------------------------*/ + +openerp.base.controller = function(instance) { +/** + * John Resig Class with factory improvement + */ +(function() { + var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/; + // The base Class implementation (does nothing) + this.Class = function(){}; + + // Create a new Class that inherits from this class + Class.extend = function(prop) { + var _super = this.prototype; + + // Instantiate a base class (but only create the instance, + // don't run the init constructor) + initializing = true; + var prototype = new this(); + initializing = false; + + // Copy the properties over onto the new prototype + for (var name in prop) { + // Check if we're overwriting an existing function + prototype[name] = typeof prop[name] == "function" && + typeof _super[name] == "function" && fnTest.test(prop[name]) ? + (function(name, fn){ + return function() { + var tmp = this._super; + + // Add a new ._super() method that is the same method + // but on the super-class + this._super = _super[name]; + + // The method only need to be bound temporarily, so we + // remove it when we're done executing + var ret = fn.apply(this, arguments); + this._super = tmp; + + return ret; + }; + })(name, prop[name]) : + prop[name]; + } + + // The dummy class constructor + function Class() { + // All construction is actually done in the init method + if ( !initializing && this.init ) { + var ret = this.init.apply(this, arguments); + if (ret) { return ret; } + } + return this; + } + + // Populate our constructed prototype object + Class.prototype = prototype; + + // Enforce the constructor to be what we expect + Class.constructor = Class; + + // And make this class extendable + Class.extend = arguments.callee; + + return Class; + }; +})(instance.base); + +// todo change john resig class to keep window clean +instance.base.Class = window.Class + +// Controller will move here + +}; + +// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index e284f6ca723..84b605f1114 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -606,7 +606,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi } // TODO: implement reorder (drag and drop rows) }); -openerp.base.ListView.List = Class.extend( /** @lends openerp.base.ListView.List# */{ +openerp.base.ListView.List = openerp.base.Class.extend( /** @lends openerp.base.ListView.List# */{ /** * List display for the ListView, handles basic DOM events and transforms * them in the relevant higher-level events, to which the list view (or @@ -842,7 +842,7 @@ openerp.base.ListView.List = Class.extend( /** @lends openerp.base.ListView.List } // drag and drop }); -openerp.base.ListView.Groups = Class.extend( /** @lends openerp.base.ListView.Groups# */{ +openerp.base.ListView.Groups = openerp.base.Class.extend( /** @lends openerp.base.ListView.Groups# */{ passtrough_events: 'action deleted row_link', /** * Grouped display for the ListView. Handles basic DOM events and interacts diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js index de715df28e7..f5b66774384 100644 --- a/addons/base/static/src/js/search.js +++ b/addons/base/static/src/js/search.js @@ -301,7 +301,7 @@ openerp.base.search.fields = new openerp.base.Registry({ 'many2one': 'openerp.base.search.ManyToOneField', 'many2many': 'openerp.base.search.ManyToManyField' }); -openerp.base.search.Invalid = Class.extend( +openerp.base.search.Invalid = openerp.base.Class.extend( /** @lends openerp.base.search.Invalid# */{ /** * Exception thrown by search widgets when they hold invalid values,