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,