diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 8b19d1728b7..3dc9a29cfbd 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -153,14 +153,14 @@ openerp.base.Registry = Class.extend( /** @lends openerp.base.Registry# */ { }); /** - * Generates an inherited class that replaces all the methods by dummy methods (methods + * 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} */ -openerp.base.generate_dummy = function(claz, add) { +openerp.base.generate_null_object_class = function(claz, add) { var newer = {}; var copy_proto = function(prototype) { for (var name in prototype) { diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index a3ba230d596..2d24f99c365 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -17,7 +17,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV */ init: function(view_manager, session, element_id, dataset, view_id) { this._super(session, element_id); - this.view_manager = view_manager; + this.view_manager = view_manager || new openerp.base.NullViewManager(); this.dataset = dataset; this.model = dataset.model; this.view_id = view_id; @@ -29,12 +29,12 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV this.ready = false; this.show_invalid = true; this.touched = false; - this.flags = view_manager.action.flags || {}; + this.flags = this.view_manager.action.flags || {}; }, start: function() { //this.log('Starting FormView '+this.model+this.view_id) return this.rpc("/base/formview/load", {"model": this.model, "view_id": this.view_id, - toolbar:!!this.view_manager.sidebar}, this.on_loaded); + toolbar:!!this.flags.sidebar}, this.on_loaded); }, on_loaded: function(data) { var self = this; @@ -56,10 +56,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV this.$element.find('#' + this.element_id + '_header button.oe_form_button_cancel').click(this.do_cancel); this.$element.find('#' + this.element_id + '_header button.oe_form_button_new').click(this.on_button_new); - // sidebar stuff - if (this.view_manager.sidebar) { - this.view_manager.sidebar.set_toolbar(data.fields_view.toolbar); - } + this.view_manager.sidebar.set_toolbar(data.fields_view.toolbar); }, do_show: function () { var self = this; @@ -72,9 +69,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV } else { this.dataset.read_index(_.keys(this.fields_view.fields), this.on_record_loaded); } - if (this.view_manager && this.view_manager.sidebar) { - this.view_manager.sidebar.refresh(true); - } + this.view_manager.sidebar.refresh(true); }, do_hide: function () { this.$element.hide(); @@ -961,6 +956,7 @@ openerp.base.form.FieldOne2ManyDatasSet = openerp.base.DataSetStatic.extend({ openerp.base.form.FieldOne2ManyViewManager = openerp.base.ViewManager.extend({ init: function(session, element_id, dataset, views) { this._super(session, element_id, dataset, views); + this.action = {flags:{}}; } }); @@ -1010,8 +1006,10 @@ openerp.base.form.FieldMany2Many = openerp.base.form.Field.extend({ start: function() { this._super.apply(this, arguments); this.dataset = new openerp.base.DataSetMany2Many(this.session, this.field.relation); - this.list_view = new openerp.base.form.Many2ManyListView(undefined, this.view.session, - this.list_id, this.dataset, false, {'selected': false, 'addable': 'Add'}); + //TODO: switch to non selectable once xmo has corrected the bug related to that + this.list_view = new openerp.base.form.Many2ManyListView(null, this.view.session, + this.list_id, this.dataset, false, {'selectable-': false, + 'addable': 'Add'}); var self = this; this.list_view.m2m_field = this; this.list_view.start(); @@ -1119,8 +1117,8 @@ openerp.base.form.Many2XSelectPopup = openerp.base.BaseWidget.extend({ if (this.searchview) { this.searchview.stop(); } - this.searchview = new openerp.base.SearchView(this, this.session, this.element_id + "_search", - this.dataset, false, {}); + this.searchview = new openerp.base.SearchView(null, this.session, + this.element_id + "_search", this.dataset, false, {}); this.searchview.on_search.add(function(domains, contexts, groupbys) { self.view_list.do_search.call( self, domains, contexts, groupbys); @@ -1137,7 +1135,8 @@ openerp.base.form.Many2XSelectPopup = openerp.base.BaseWidget.extend({ self.stop(); }); self.view_list = new openerp.base.form.Many2XPopupListView( null, self.session, - self.element_id + "_view_list", self.dataset, false); + self.element_id + "_view_list", self.dataset, false, + {'deletable': false}); self.view_list.popup = self; self.view_list.do_show(); self.view_list.start(); @@ -1158,7 +1157,7 @@ openerp.base.form.Many2XSelectPopup = openerp.base.BaseWidget.extend({ this.searchview.hide(); this.view_list.$element.hide(); this.dataset.index = null; - this.view_form = new openerp.base.FormView(new openerp.base.DummyViewManager(), this.session, + this.view_form = new openerp.base.FormView(null, this.session, this.element_id + "_view_form", this.dataset, false); this.view_form.start(); this.view_form.on_loaded.add_last(function() { diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index 3723cf77c92..a87db02492d 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -45,7 +45,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi init: function(view_manager, session, element_id, dataset, view_id, options) { var self = this; this._super(session, element_id); - this.view_manager = view_manager; + this.view_manager = view_manager || new openerp.base.NullViewManager(); this.dataset = dataset; this.model = dataset.model; this.view_id = view_id; @@ -54,10 +54,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi this.rows = []; this.options = _.extend({}, this.defaults, options || {}); - this.flags = {}; - if (view_manager && view_manager.action) { - this.flags = view_manager.action.flags; - } + this.flags = this.view_manager.action.flags; this.list = new openerp.base.ListView.List({ options: this.options, @@ -103,7 +100,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi return this.rpc("/base/listview/load", { model: this.model, view_id: this.view_id, - toolbar: this.view_manager ? !!this.view_manager.sidebar : false + toolbar: !!this.flags.sidebar }, this.on_loaded); }, /** @@ -184,10 +181,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi var $table = this.$element.find('table'); this.list.move_to($table); - // sidebar stuff - if (this.view_manager && this.view_manager.sidebar) { - this.view_manager.sidebar.set_toolbar(data.fields_view.toolbar); - } + this.view_manager.sidebar.set_toolbar(data.fields_view.toolbar); }, /** * Fills the table with the provided records after emptying it @@ -255,9 +249,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi this.do_reload(); this.hidden = false; } - if (this.view_manager && this.view_manager.sidebar) { - this.view_manager.sidebar.refresh(true); - } + this.view_manager.sidebar.refresh(true); }, do_hide: function () { this.$element.hide(); diff --git a/addons/base/static/src/js/m2o.js b/addons/base/static/src/js/m2o.js index 5f17371c61c..080d36e726f 100644 --- a/addons/base/static/src/js/m2o.js +++ b/addons/base/static/src/js/m2o.js @@ -73,7 +73,7 @@ openerp.base.m2o = function(openerp){ minWidth: 800 }); self.element.val(''); - var event_form = new openerp.base.FormView(new openerp.base.DummyViewManager(), + var event_form = new openerp.base.FormView(null, self.session, element_id, self.dataset, false); event_form.start(); }); diff --git a/addons/base/static/src/js/views.js b/addons/base/static/src/js/views.js index 13cee96d0fb..bb52009ae40 100644 --- a/addons/base/static/src/js/views.js +++ b/addons/base/static/src/js/views.js @@ -82,6 +82,7 @@ openerp.base.ViewManager = openerp.base.Controller.extend({ this.views_src = views; this.views = {}; this.flags = this.flags || {}; + this.sidebar = new openerp.base.NullSidebar(); }, /** * @returns {jQuery.Deferred} initial view loading promise @@ -198,9 +199,10 @@ openerp.base.ViewManager = openerp.base.Controller.extend({ } }); -openerp.base.DummyViewManager = openerp.base.generate_dummy(openerp.base.ViewManager, { +openerp.base.NullViewManager = openerp.base.generate_null_object_class(openerp.base.ViewManager, { init: function() { - this.action = {}; + this.action = {flags: {}}; + this.sidebar = new openerp.base.NullSidebar(); } }); @@ -229,7 +231,7 @@ openerp.base.ViewManagerAction = openerp.base.ViewManager.extend({ var inital_view_loaded = this._super(); // init sidebar - if (this.sidebar) { + if (this.flags.sidebar) { this.$element.find('.view-manager-main-sidebar').html(this.sidebar.render()); this.sidebar.start(); } @@ -256,9 +258,7 @@ openerp.base.ViewManagerAction = openerp.base.ViewManager.extend({ }, stop: function() { // should be replaced by automatic destruction implemented in BaseWidget - if (this.sidebar) { - this.sidebar.stop(); - } + this.sidebar.stop(); this._super(); }, /** @@ -343,6 +343,8 @@ openerp.base.Sidebar = openerp.base.BaseWidget.extend({ } }); +openerp.base.NullSidebar = openerp.base.generate_null_object_class(openerp.base.Sidebar); + openerp.base.View = openerp.base.Controller.extend({ /** * Fetches and executes the action identified by ``action_data``.