diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index b6788d979a5..2909479dd1f 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -14,6 +14,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# readonly : false, form_template: "FormView", display_name: _lt('Form'), + view_type: "form", /** * @constructs openerp.web.FormView * @extends openerp.web.View @@ -53,27 +54,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.on_change_mutex = new $.Mutex(); this.reload_mutex = new $.Mutex(); }, - start: function() { - this._super(); - return this.init_view(); - }, - init_view: function() { - if (this.embedded_view) { - var def = $.Deferred().then(this.on_loaded); - var self = this; - $.async_when().then(function() {def.resolve(self.embedded_view);}); - return def.promise(); - } else { - var context = new openerp.web.CompoundContext(this.dataset.get_context()); - return this.rpc("/web/view/load", { - "model": this.model, - "view_id": this.view_id, - "view_type": "form", - toolbar: this.options.sidebar, - context: context - }, this.on_loaded); - } - }, destroy: function() { if (this.sidebar) { this.sidebar.attachments.destroy(); @@ -134,6 +114,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# }]); } this.has_been_loaded.resolve(); + return $.when(); }, do_load_state: function(state, warm) { diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index e8fff450c6e..06e1e23e1db 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -136,7 +136,6 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# * @returns {$.Deferred} loading promise */ start: function() { - this._super(); this.$element.addClass('oe-listview'); return this.reload_view(null, null, true); }, diff --git a/addons/web/static/src/js/view_tree.js b/addons/web/static/src/js/view_tree.js index 6039e4a0822..72a643b3d51 100644 --- a/addons/web/static/src/js/view_tree.js +++ b/addons/web/static/src/js/view_tree.js @@ -39,7 +39,6 @@ openerp.web.TreeView = openerp.web.View.extend(/** @lends openerp.web.TreeView# }, start: function () { - this._super(); return this.rpc("/web/treeview/load", { model: this.model, view_id: this.view_id, diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index b54eff91078..b0db9c62f7b 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -112,12 +112,13 @@ session.web.ActionManager = session.web.OldWidget.extend({ } var type = action.type.replace(/\./g,'_'); var popup = action.target === 'new'; + var inline = action.target === 'inline'; action.flags = _.extend({ - views_switcher : !popup, - search_view : !popup, - action_buttons : !popup, - sidebar : !popup, - pager : !popup, + views_switcher : !popup && !inline, + search_view : !popup && !inline, + action_buttons : !popup && !inline, + sidebar : !popup && !inline, + pager : !popup && !inline, display_title : !popup }, action.flags || {}); if (!(type in this)) { @@ -1029,12 +1030,43 @@ session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{ template: "EmptyComponent", // name displayed in view switchers display_name: '', + /** + * Define a view type for each view to allow automatic call to fields_view_get. + */ + view_type: undefined, init: function(parent, dataset, view_id, options) { this._super(parent); this.dataset = dataset; this.view_id = view_id; this.set_default_options(options); }, + start: function() { + return this.load_view(); + }, + load_view: function() { + if (this.embedded_view) { + var def = $.Deferred().pipe(this.on_loaded); + var self = this; + $.async_when().then(function() {def.resolve(self.embedded_view);}); + return def.promise(); + } else { + var context = new session.web.CompoundContext(this.dataset.get_context()); + if (! this.view_type) + console.warn("view_type is not defined", this); + return this.rpc("/web/view/load", { + "model": this.dataset.model, + "view_id": this.view_id, + "view_type": this.view_type, + toolbar: this.options.sidebar, + context: context + }).pipe(this.on_loaded); + } + }, + /** + * Called after a successful call to fields_view_get. + * Must return a promise. + */ + on_loaded: function(fields_view_get) {}, set_default_options: function(options) { this.options = options || {}; _.defaults(this.options, { diff --git a/addons/web_dashboard/static/src/js/dashboard.js b/addons/web_dashboard/static/src/js/dashboard.js index bae74276a24..5511094b1ee 100644 --- a/addons/web_dashboard/static/src/js/dashboard.js +++ b/addons/web_dashboard/static/src/js/dashboard.js @@ -294,7 +294,6 @@ openerp.web_dashboard.ConfigOverview = openerp.web.View.extend({ this.dataset = new openerp.web.DataSetSearch(this, 'ir.actions.todo'); }, start: function () { - this._super(); var self = this; return this.user.read_index(['groups_id']).pipe(function(record) { var todos_filter = [ @@ -383,7 +382,6 @@ openerp.web_dashboard.Widget = openerp.web.View.extend(/** @lends openerp.web_da this.widget_id = options.widget_id; }, start: function () { - this._super(); var ds = new openerp.web.DataSet(this, 'res.widget'); return ds.read_ids([this.widget_id], ['title']).then(this.on_widget_loaded); }, diff --git a/addons/web_diagram/static/src/js/diagram.js b/addons/web_diagram/static/src/js/diagram.js index 41b3c4844db..a38031ed4f3 100644 --- a/addons/web_diagram/static/src/js/diagram.js +++ b/addons/web_diagram/static/src/js/diagram.js @@ -22,7 +22,6 @@ openerp.web.DiagramView = openerp.web.View.extend({ this.ids = this.dataset.ids; }, start: function() { - this._super(); return this.rpc("/web_diagram/diagram/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded); }, diff --git a/addons/web_gantt/static/src/js/gantt.js b/addons/web_gantt/static/src/js/gantt.js index 9f49ba7bd5e..132d95e309e 100644 --- a/addons/web_gantt/static/src/js/gantt.js +++ b/addons/web_gantt/static/src/js/gantt.js @@ -10,20 +10,19 @@ openerp.web.views.add('gantt', 'openerp.web_gantt.GanttView'); openerp.web_gantt.GanttView = openerp.web.View.extend({ display_name: _lt('Gantt'), template: "GanttView", + view_type: "gantt", init: function() { this._super.apply(this, arguments); this.has_been_loaded = $.Deferred(); this.chart_id = _.uniqueId(); }, - start: function() { - return $.when(this.rpc("/web/view/load", {"model": this.dataset.model, "view_id": this.view_id, "view_type": "gantt"}), - this.rpc("/web/searchview/fields_get", {"model": this.dataset.model})).pipe(this.on_loaded); - }, - on_loaded: function(fields_view, fields_get) { - this.fields_view = fields_view[0]; - this.fields = fields_get[0].fields; - - this.has_been_loaded.resolve(); + on_loaded: function(fields_view_get, fields_get) { + var self = this; + this.fields_view = fields_view_get; + return this.rpc("/web/searchview/fields_get", {"model": this.dataset.model}).pipe(function(fields_get) { + self.fields = fields_get.fields; + self.has_been_loaded.resolve(); + }); }, do_search: function (domains, contexts, group_bys) { var self = this; diff --git a/addons/web_graph/static/src/js/graph.js b/addons/web_graph/static/src/js/graph.js index d962c7d6752..a55d8f15fbf 100644 --- a/addons/web_graph/static/src/js/graph.js +++ b/addons/web_graph/static/src/js/graph.js @@ -17,6 +17,7 @@ var QWeb = openerp.web.qweb, openerp.web.views.add('graph', 'openerp.web_graph.GraphView'); openerp.web_graph.GraphView = openerp.web.View.extend({ display_name: _lt('Graph'), + view_type: "graph", init: function(parent, dataset, view_id, options) { this._super(parent); @@ -39,27 +40,13 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ } this._super(); }, - start: function() { + on_loaded: function(fields_view_get) { var self = this; - this._super(); - var loaded; - if (this.embedded_view) { - loaded = $.when([self.embedded_view]); - } else { - loaded = this.rpc('/web/view/load', { - model: this.dataset.model, - view_id: this.view_id, - view_type: 'graph' - }); - } - return $.when( - this.dataset.call_and_eval('fields_get', [false, {}], null, 1), - loaded) - .then(function (fields_result, view_result) { - self.fields = fields_result[0]; - self.fields_view = view_result[0]; - self.on_loaded(self.fields_view); - }); + self.fields_view = fields_view_get; + return this.dataset.call_and_eval('fields_get', [false, {}], null, 1).pipe(function(fields_result) { + self.fields = fields_result; + return self.on_loaded_2(); + }); }, /** * Returns all object fields involved in the graph view @@ -72,7 +59,7 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ } return fs; }, - on_loaded: function() { + on_loaded_2: function() { this.chart = this.fields_view.arch.attrs.type || 'pie'; this.orientation = this.fields_view.arch.attrs.orientation || 'vertical'; @@ -91,6 +78,7 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ }, this); this.ordinate = this.columns[0].name; this.is_loaded.resolve(); + return $.when(); }, schedule_chart: function(results) { var self = this; diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index 2993954e3aa..424212e8393 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -9,6 +9,7 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({ template: "KanbanView", display_name: _lt('Kanban'), default_nr_columns: 3, + view_type: "kanban", init: function (parent, dataset, view_id, options) { this._super(parent); this.set_default_options(options); @@ -34,23 +35,14 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({ this.currently_dragging = {}; this.limit = options.limit || 80; }, - start: function() { - this._super(); + on_loaded: function(data) { this.$element.find('button.oe_kanban_button_new').click(this.do_add_record); this.$groups = this.$element.find('.oe_kanban_groups tr'); - var context = new openerp.web.CompoundContext(this.dataset.get_context()); - return this.rpc('/web/view/load', { - 'model': this.dataset.model, - 'view_id': this.view_id, - 'view_type': 'kanban', - context: context - }, this.on_loaded); - }, - on_loaded: function(data) { this.fields_view = data; this.fields_keys = _.keys(this.fields_view.fields); this.add_qweb_template(); this.has_been_loaded.resolve(); + return $.when(); }, add_qweb_template: function() { for (var i=0, ii=this.fields_view.arch.children.length; i < ii; i++) {