From b00f4e7e1f722c26fe8f50ba2af2cd99e61033f0 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 28 Sep 2011 12:44:58 +0200 Subject: [PATCH 01/19] [IMP] Always instantiate search view in ViewManagerAction bzr revid: fme@openerp.com-20110928104458-1a6768411suiky6c --- addons/web/static/src/js/search.js | 6 ++-- addons/web/static/src/js/views.js | 48 +++++++++++------------------- 2 files changed, 19 insertions(+), 35 deletions(-) diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index db91d6bfd27..c2a472b3ea6 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -30,6 +30,7 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search }, start: function() { this._super(); + this.$element.hide(); this.rpc("/web/searchview/load", {"model": this.model, "view_id":this.view_id}, this.on_loaded); return this.ready.promise(); }, @@ -137,10 +138,7 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search 'defaults': this.defaults }); - // We don't understand why the following commented line does not work in Chrome but - // the non-commented line does. As far as we investigated, only God knows. - //this.$element.html(render); - jQuery(render).appendTo(this.$element); + this.$element.html(render); this.$element.find(".oe_search-view-custom-filter-btn").click(ext.on_activate); var f = this.$element.find('form'); diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 93265fdc5f1..eb8dfe7a2a0 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -166,6 +166,7 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ this.model = dataset.model; this.dataset = dataset; this.searchview = null; + this.searchview_visible = false; this.active_view = null; this.views_src = _.map(views, function(x) {return x instanceof Array? {view_id: x[0], view_type: x[1]} : x;}); this.views = {}; @@ -225,20 +226,6 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ controller.set_embedded_view(view.embedded_view); } controller.do_switch_view.add_last(this.on_mode_switch); - if (view_type === 'list' && this.flags.search_view === false && this.action && this.action['auto_search']) { - // In case the search view is not instantiated: manually call ListView#search - var domains = !_(self.action.domain).isEmpty() - ? [self.action.domain] : [], - contexts = !_(self.action.context).isEmpty() - ? [self.action.context] : []; - controller.on_loaded.add({ - callback: function () { - controller.do_search(domains, contexts, []); - }, - position: 'last', - unique: true - }); - } var container = $("#" + this.element_id + '_view_' + view_type); view_promise = controller.appendTo(container); $.when(view_promise).then(function() { @@ -249,7 +236,7 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ if (this.searchview) { - if (view.controller.searchable === false) { + if (this.searchview_visible === false || view.controller.searchable === false) { this.searchview.hide(); } else { this.searchview.show(); @@ -346,6 +333,7 @@ db.web.ViewManagerAction = db.web.ViewManager.extend(/** @lends oepnerp.web.View // buttons, sidebar, ...) displaying this.flags.search_view = this.flags.pager = this.flags.sidebar = this.flags.action_buttons = false; } + this.searchview_visible = !!this.flags.search_view; // setup storage for session-wise menu hiding if (this.session.hidden_menutips) { @@ -360,23 +348,19 @@ db.web.ViewManagerAction = db.web.ViewManager.extend(/** @lends oepnerp.web.View * launches an initial search after both views are done rendering. */ start: function() { - var self = this; + var self = this, + searchview_loaded, + search_defaults = {}; + _.each(this.action.context, function (value, key) { + var match = /^search_default_(.*)$/.exec(key); + if (match) { + search_defaults[match[1]] = value; + } + }); + // init search view + var searchview_id = this.action['search_view_id'] && this.action['search_view_id'][0]; - var searchview_loaded; - if (this.flags.search_view !== false) { - var search_defaults = {}; - _.each(this.action.context, function (value, key) { - var match = /^search_default_(.*)$/.exec(key); - if (match) { - search_defaults[match[1]] = value; - } - }); - // init search view - var searchview_id = this.action['search_view_id'] && this.action['search_view_id'][0]; - - searchview_loaded = this.setup_search_view( - searchview_id || false, search_defaults); - } + searchview_loaded = this.setup_search_view(searchview_id || false, search_defaults); var main_view_loaded = this._super(); @@ -816,6 +800,8 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{ }, do_switch_view: function(view) { }, + do_search: function(view) { + }, set_common_sidebar_sections: function(sidebar) { sidebar.add_section('customize', "Customize", [ { From 8b55e42884c4fd75bedc1f4f051f52ec61a699cd Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 28 Sep 2011 17:13:06 +0200 Subject: [PATCH 02/19] [IMP] trigger do_search on_mode_switch. Use headless searchview when hidden and when no default specified bzr revid: fme@openerp.com-20110928151306-d7aphegy2gedjsqk --- addons/web/static/src/js/search.js | 21 +++++++++-- addons/web/static/src/js/views.js | 60 +++++++++++++++--------------- 2 files changed, 48 insertions(+), 33 deletions(-) diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index c2a472b3ea6..cf253c3d54b 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -13,25 +13,35 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search * @param view_id * @param defaults */ - init: function(parent, dataset, view_id, defaults) { + init: function(parent, dataset, view_id, defaults, hidden) { this._super(parent); this.dataset = dataset; this.model = dataset.model; this.view_id = view_id; this.defaults = defaults || {}; + this.has_defaults = !_.isEmpty(this.defaults); this.inputs = []; this.enabled_filters = []; this.has_focus = false; + this.hidden = !!hidden; + this.headless = this.hidden && !this.has_defaults; + this.ready = $.Deferred(); }, start: function() { this._super(); - this.$element.hide(); - this.rpc("/web/searchview/load", {"model": this.model, "view_id":this.view_id}, this.on_loaded); + if (this.hidden) { + this.$element.hide(); + } + if (this.headless) { + this.ready.resolve(); + } else { + this.rpc("/web/searchview/load", {"model": this.model, "view_id":this.view_id}, this.on_loaded); + } return this.ready.promise(); }, show: function () { @@ -244,10 +254,13 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search * @param e jQuery event object coming from the "Search" button */ do_search: function (e) { + if (this.headless && !this.has_defaults) { + return this.on_search([], [], []); + } // reset filters management var select = this.$element.find(".oe_search-view-filters-management"); select.val("_filters"); - + if (e && e.preventDefault) { e.preventDefault(); } var data = this.build_search_data(); diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index eb8dfe7a2a0..6049989c568 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -166,7 +166,6 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ this.model = dataset.model; this.dataset = dataset; this.searchview = null; - this.searchview_visible = false; this.active_view = null; this.views_src = _.map(views, function(x) {return x instanceof Array? {view_id: x[0], view_type: x[1]} : x;}); this.views = {}; @@ -235,12 +234,8 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ } - if (this.searchview) { - if (this.searchview_visible === false || view.controller.searchable === false) { - this.searchview.hide(); - } else { - this.searchview.show(); - } + if (this.searchview && !this.searchview.hidden) { + this.searchview[view.controller.searchable === false ? 'hide' : 'show'](); } this.$element @@ -268,27 +263,6 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ */ on_controller_inited: function(view_type, view) { }, - /** - * Sets up the current viewmanager's search view. - * - * @param {Number|false} view_id the view to use or false for a default one - * @returns {jQuery.Deferred} search view startup deferred - */ - setup_search_view: function(view_id, search_defaults) { - var self = this; - if (this.searchview) { - this.searchview.stop(); - } - this.searchview = new db.web.SearchView( - this, this.dataset, - view_id, search_defaults); - - this.searchview.on_search.add(function(domains, contexts, groupbys) { - var controller = self.views[self.active_view].controller; - controller.do_search.call(controller, domains, contexts, groupbys); - }); - return this.searchview.appendTo($("#" + this.element_id + "_search")); - }, /** * Called when one of the view want to execute an action */ @@ -333,7 +307,7 @@ db.web.ViewManagerAction = db.web.ViewManager.extend(/** @lends oepnerp.web.View // buttons, sidebar, ...) displaying this.flags.search_view = this.flags.pager = this.flags.sidebar = this.flags.action_buttons = false; } - this.searchview_visible = !!this.flags.search_view; + this.last_search = false; // setup storage for session-wise menu hiding if (this.session.hidden_menutips) { @@ -408,10 +382,38 @@ db.web.ViewManagerAction = db.web.ViewManager.extend(/** @lends oepnerp.web.View return $.when( this._super(view_type), this.shortcut_check(this.views[view_type])).then(function () { + self.do_searchview_search(); var view_id = self.views[self.active_view].controller.fields_view.view_id; self.$element.find('.oe_get_xml_view span').text(view_id); }); }, + /** + * Sets up the current viewmanager's search view. + * + * @param {Number|false} view_id the view to use or false for a default one + * @returns {jQuery.Deferred} search view startup deferred + */ + setup_search_view: function(view_id, search_defaults) { + var self = this; + if (this.searchview) { + this.searchview.stop(); + } + this.searchview = new db.web.SearchView( + this, this.dataset, + view_id, search_defaults, this.flags.search_view === false); + + this.searchview.on_search.add(this.do_searchview_search); + return this.searchview.appendTo($("#" + this.element_id + "_search")); + }, + do_searchview_search: function(domains, contexts, groupbys) { + if (domains) { + this.last_search = [domains, contexts, groupbys]; + } + if (this.last_search) { + var controller = this.views[this.active_view].controller; + controller.do_search.apply(controller, this.last_search); + } + }, shortcut_check : function(view) { var self = this; var grandparent = this.widget_parent && this.widget_parent.widget_parent; From 3909843bf8507c55c426957339497209f38e502e Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 28 Sep 2011 17:32:54 +0200 Subject: [PATCH 03/19] [IMP] Search view can be initialized in ViewManager before start() bzr revid: fme@openerp.com-20110928153254-e0rid4atpho0zf6k --- addons/web/static/src/js/views.js | 63 +++++++++++++++---------------- 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 6049989c568..ac811b989d3 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -166,6 +166,7 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ this.model = dataset.model; this.dataset = dataset; this.searchview = null; + this.last_search = false; this.active_view = null; this.views_src = _.map(views, function(x) {return x instanceof Array? {view_id: x[0], view_type: x[1]} : x;}); this.views = {}; @@ -233,9 +234,9 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ this.views[view_type].controller = controller; } - - if (this.searchview && !this.searchview.hidden) { - this.searchview[view.controller.searchable === false ? 'hide' : 'show'](); + if (this.searchview) { + this.do_searchview_search(); + this.searchview[view.controller.searchable === false || this.searchview.hidden ? 'hide' : 'show'](); } this.$element @@ -255,6 +256,33 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ } return view_promise; }, + /** + * Sets up the current viewmanager's search view. + * + * @param {Number|false} view_id the view to use or false for a default one + * @returns {jQuery.Deferred} search view startup deferred + */ + setup_search_view: function(view_id, search_defaults) { + var self = this; + if (this.searchview) { + this.searchview.stop(); + } + this.searchview = new db.web.SearchView( + this, this.dataset, + view_id, search_defaults, this.flags.search_view === false); + + this.searchview.on_search.add(this.do_searchview_search); + return this.searchview.appendTo($("#" + this.element_id + "_search")); + }, + do_searchview_search: function(domains, contexts, groupbys) { + if (domains) { + this.last_search = [domains, contexts, groupbys]; + } + if (this.last_search) { + var controller = this.views[this.active_view].controller; + controller.do_search.apply(controller, this.last_search); + } + }, /** * Event launched when a controller has been inited. * @@ -307,7 +335,6 @@ db.web.ViewManagerAction = db.web.ViewManager.extend(/** @lends oepnerp.web.View // buttons, sidebar, ...) displaying this.flags.search_view = this.flags.pager = this.flags.sidebar = this.flags.action_buttons = false; } - this.last_search = false; // setup storage for session-wise menu hiding if (this.session.hidden_menutips) { @@ -382,38 +409,10 @@ db.web.ViewManagerAction = db.web.ViewManager.extend(/** @lends oepnerp.web.View return $.when( this._super(view_type), this.shortcut_check(this.views[view_type])).then(function () { - self.do_searchview_search(); var view_id = self.views[self.active_view].controller.fields_view.view_id; self.$element.find('.oe_get_xml_view span').text(view_id); }); }, - /** - * Sets up the current viewmanager's search view. - * - * @param {Number|false} view_id the view to use or false for a default one - * @returns {jQuery.Deferred} search view startup deferred - */ - setup_search_view: function(view_id, search_defaults) { - var self = this; - if (this.searchview) { - this.searchview.stop(); - } - this.searchview = new db.web.SearchView( - this, this.dataset, - view_id, search_defaults, this.flags.search_view === false); - - this.searchview.on_search.add(this.do_searchview_search); - return this.searchview.appendTo($("#" + this.element_id + "_search")); - }, - do_searchview_search: function(domains, contexts, groupbys) { - if (domains) { - this.last_search = [domains, contexts, groupbys]; - } - if (this.last_search) { - var controller = this.views[this.active_view].controller; - controller.do_search.apply(controller, this.last_search); - } - }, shortcut_check : function(view) { var self = this; var grandparent = this.widget_parent && this.widget_parent.widget_parent; From d80641da955bd9555f18ab026cccedb70d75755b Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 28 Sep 2011 17:45:49 +0200 Subject: [PATCH 04/19] [FIX] Only trigger do_search when controller is ready bzr revid: fme@openerp.com-20110928154549-xurjdf6qh7x73ck5 --- addons/web/static/src/js/views.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index ac811b989d3..b0fe6940f58 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -230,12 +230,16 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ view_promise = controller.appendTo(container); $.when(view_promise).then(function() { self.on_controller_inited(view_type, controller); + if (self.searchview) { + self.do_searchview_search(); + } }); this.views[view_type].controller = controller; + } else if (this.searchview) { + self.do_searchview_search(); } if (this.searchview) { - this.do_searchview_search(); this.searchview[view.controller.searchable === false || this.searchview.hidden ? 'hide' : 'show'](); } From 03156f88ff2a5080d0a8804736396e6c74ce85b6 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 28 Sep 2011 17:46:08 +0200 Subject: [PATCH 05/19] [IMP] The views do not have to search manually on do_show anymore bzr revid: fme@openerp.com-20110928154608-mlehfgprg03byksr --- addons/web/static/src/js/view_form.js | 3 --- addons/web/static/src/js/view_list.js | 3 --- addons/web_graph/static/src/js/graph.js | 1 - addons/web_kanban/static/src/js/kanban.js | 3 --- 4 files changed, 10 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index c7ffb896186..3acbcb70ab0 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -443,9 +443,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# return $.Deferred().then(success).resolve(_.extend(r, {created: true})); } }, - do_search: function (domains, contexts, groupbys) { - console.debug("Searching form"); - }, on_action: function (action) { console.debug('Executing action', action); }, diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index eeda44c4c99..49fdf326253 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -353,9 +353,6 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# if (this.sidebar) { this.sidebar.$element.show(); } - if (!_(this.dataset.ids).isEmpty()) { - this.reload_content(); - } }, do_hide: function () { this.$element.hide(); diff --git a/addons/web_graph/static/src/js/graph.js b/addons/web_graph/static/src/js/graph.js index 59bc2c29dcf..6632791af31 100644 --- a/addons/web_graph/static/src/js/graph.js +++ b/addons/web_graph/static/src/js/graph.js @@ -26,7 +26,6 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ this.view_id = view_id; }, do_show: function () { - // TODO: re-trigger search this.$element.show(); }, do_hide: function () { diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index 46173341361..52ad7982018 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -33,9 +33,6 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({ var self = this; this.fields_view = data; this.add_qweb_template(); - if (this.qweb.has_template('kanban-box')) { - this.do_actual_search(); - } }, add_qweb_template: function() { var group_operator = ["avg", "max", "min", "sum", "count"] From 96a350194acccc4471a95c5e6347e104b3a9e65b Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 29 Sep 2011 10:09:17 +0200 Subject: [PATCH 06/19] [FIX] Only trigger do_search on searchable controllers bzr revid: fme@openerp.com-20110929080917-4ogqufkoyrwm5jej --- addons/web/static/src/js/views.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index b0fe6940f58..2bbb81198fe 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -230,12 +230,12 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ view_promise = controller.appendTo(container); $.when(view_promise).then(function() { self.on_controller_inited(view_type, controller); - if (self.searchview) { + if (self.searchview && view.controller.searchable !== false) { self.do_searchview_search(); } }); this.views[view_type].controller = controller; - } else if (this.searchview) { + } else if (this.searchview && view.controller.searchable !== false) { self.do_searchview_search(); } From 63223b30aba72a79133e75a439c1d5f9898e334b Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 29 Sep 2011 11:53:05 +0200 Subject: [PATCH 07/19] [IMP] Evaluate domain and context in viewmanager bzr revid: fme@openerp.com-20110929095305-kol38i614124nvv7 --- addons/web/static/src/js/views.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 2bbb81198fe..8dd1a797579 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -230,9 +230,6 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ view_promise = controller.appendTo(container); $.when(view_promise).then(function() { self.on_controller_inited(view_type, controller); - if (self.searchview && view.controller.searchable !== false) { - self.do_searchview_search(); - } }); this.views[view_type].controller = controller; } else if (this.searchview && view.controller.searchable !== false) { @@ -279,11 +276,19 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ return this.searchview.appendTo($("#" + this.element_id + "_search")); }, do_searchview_search: function(domains, contexts, groupbys) { - if (domains) { - this.last_search = [domains, contexts, groupbys]; - } - if (this.last_search) { - var controller = this.views[this.active_view].controller; + var self = this, + controller = this.views[this.active_view].controller; + if (domains || contexts) { + //if ((!domains || !domains.length) && (!contexts || !contexts.length) && (!groupbys || !groupbys.length) { } + this.rpc('/web/session/eval_domain_and_context', { + domains: domains || [], + contexts: contexts || [], + group_by_seq: groupbys || [] + }, function (results) { + controller.do_search(results.domain, results.context, results.group_by); + self.last_search = [results.domain, results.context, results.group_by]; + }); + } else if (this.last_search) { controller.do_search.apply(controller, this.last_search); } }, From a4336966fea1e78fb0f149bf900dbdaab96637f8 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 29 Sep 2011 12:26:37 +0200 Subject: [PATCH 08/19] [FIX] Forgot to merge dataset domain and contexts bzr revid: fme@openerp.com-20110929102637-it9gxczwo40o1qqr --- addons/web/static/src/js/views.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 8dd1a797579..9d57d2c9728 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -281,8 +281,8 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ if (domains || contexts) { //if ((!domains || !domains.length) && (!contexts || !contexts.length) && (!groupbys || !groupbys.length) { } this.rpc('/web/session/eval_domain_and_context', { - domains: domains || [], - contexts: contexts || [], + domains: [this.dataset.get_domain()].concat(domains || []), + contexts: [this.dataset.get_context()].concat(contexts || []), group_by_seq: groupbys || [] }, function (results) { controller.do_search(results.domain, results.context, results.group_by); From e34b07e1e3a52be4915d16c868442a26a278b736 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 29 Sep 2011 12:32:29 +0200 Subject: [PATCH 09/19] [IMP] Fixed list view in order to support new do_search bzr revid: fme@openerp.com-20110929103229-l9pfjqbezj28ihd9 --- addons/web/static/src/js/view_list.js | 29 ++++--------------- .../web/static/src/js/view_list_editable.js | 6 ++-- 2 files changed, 8 insertions(+), 27 deletions(-) diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 49fdf326253..d637802c08a 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -401,41 +401,22 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# self.compute_aggregates(); })); }, - /** - * Event handler for a search, asks for the computation/folding of domains - * and contexts (and group-by), then reloads the view's content. - * - * @param {Array} domains a sequence of literal and non-literal domains - * @param {Array} contexts a sequence of literal and non-literal contexts - * @param {Array} groupbys a sequence of literal and non-literal group-by contexts - * @returns {$.Deferred} fold request evaluation promise - */ - do_search: function (domains, contexts, groupbys) { - return this.rpc('/web/session/eval_domain_and_context', { - domains: _([this.dataset.get_domain()].concat(domains)).compact(), - contexts: _([this.dataset.get_context()].concat(contexts)).compact(), - group_by_seq: groupbys - }, $.proxy(this, 'do_actual_search')); - }, /** * Handler for the result of eval_domain_and_context, actually perform the * searching * * @param {Object} results results of evaluating domain and process for a search */ - do_actual_search: function (results) { + do_search: function (domain, context, group_by) { this.groups.datagroup = new openerp.web.DataGroup( - this, this.model, - results.domain, - results.context, - results.group_by); + this, this.model, domain, context, group_by); this.groups.datagroup.sort = this.dataset._sort; - if (_.isEmpty(results.group_by) && !results.context['group_by_no_leaf']) { - results.group_by = null; + if (_.isEmpty(group_by) && !context['group_by_no_leaf']) { + group_by = null; } - this.reload_view(!!results.group_by, results.context).then( + this.reload_view(!!group_by, context).then( $.proxy(this, 'reload_content')); }, /** diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js index beb2c3ac0a9..0b361ae3a9c 100644 --- a/addons/web/static/src/js/view_list_editable.js +++ b/addons/web/static/src/js/view_list_editable.js @@ -56,11 +56,11 @@ openerp.web.list_editable = function (openerp) { || this.defaults.editable); }, /** - * Replace do_actual_search to handle editability process + * Replace do_search to handle editability process */ - do_actual_search: function (results) { + do_search: function() { this.set_editable(results.context['set_editable']); - this._super(results); + this._super.apply(this, arguments); }, /** * Replace do_add_record to handle editability (and adding new record From 38ef100ec8e769617664ffbdba5980355c65a2c6 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 29 Sep 2011 12:40:00 +0200 Subject: [PATCH 10/19] [FIX] Introduced a bug in last commit bzr revid: fme@openerp.com-20110929104000-vnahwe0w09p03cqx --- addons/web/static/src/js/view_list_editable.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js index 0b361ae3a9c..6f476f4717d 100644 --- a/addons/web/static/src/js/view_list_editable.js +++ b/addons/web/static/src/js/view_list_editable.js @@ -58,8 +58,8 @@ openerp.web.list_editable = function (openerp) { /** * Replace do_search to handle editability process */ - do_search: function() { - this.set_editable(results.context['set_editable']); + do_search: function(domain, context, group_by) { + this.set_editable(context['set_editable']); this._super.apply(this, arguments); }, /** From c0736631ca4bbe7e73773d90f160ad771720d8fb Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 29 Sep 2011 13:47:20 +0200 Subject: [PATCH 11/19] [IMP] Search also when controller is not yet instanciate bzr revid: fme@openerp.com-20110929114720-cjpkgjr7rm03w5rn --- addons/web/static/src/js/views.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 0c9ea1b894e..389b8bfc5a1 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -227,10 +227,13 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ controller.do_switch_view.add_last(this.on_mode_switch); var container = $("#" + this.element_id + '_view_' + view_type); view_promise = controller.appendTo(container); + this.views[view_type].controller = controller; $.when(view_promise).then(function() { self.on_controller_inited(view_type, controller); + if (self.searchview && view.controller.searchable !== false) { + self.do_searchview_search(); + } }); - this.views[view_type].controller = controller; } else if (this.searchview && view.controller.searchable !== false) { self.do_searchview_search(); } From f2cd835296caf3a1fbc0f037c03977c26522cee2 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 29 Sep 2011 13:48:15 +0200 Subject: [PATCH 12/19] [IMP] Fixed gantt in order to support new do_search bzr revid: fme@openerp.com-20110929114815-4nql5xzwztb77vdm --- addons/web_graph/static/src/js/graph.js | 32 +++++++++---------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/addons/web_graph/static/src/js/graph.js b/addons/web_graph/static/src/js/graph.js index c691ef35975..5a72bf2a816 100644 --- a/addons/web_graph/static/src/js/graph.js +++ b/addons/web_graph/static/src/js/graph.js @@ -78,9 +78,6 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ } }, this); this.ordinate = this.columns[0].name; - - this.dataset.read_slice( - this.list_fields(), {}, $.proxy(this, 'schedule_chart')); }, schedule_chart: function(results) { var self = this; @@ -365,24 +362,17 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ }); }, - do_search: function(domains, contexts, groupbys) { - var self = this; - this.rpc('/web/session/eval_domain_and_context', { - domains: domains, - contexts: contexts, - group_by_seq: groupbys - }, function (results) { - // TODO: handle non-empty results.group_by with read_group? - if(!_(results.group_by).isEmpty()){ - self.abscissa = results.group_by[0]; - } else { - self.abscissa = self.first_field; - } - self.dataset.read_slice(self.list_fields(), { - context: results.context, - domain: results.domain - }, $.proxy(self, 'schedule_chart')); - }); + do_search: function(domain, context, group_by) { + // TODO: handle non-empty group_by with read_group? + if (!_(group_by).isEmpty()) { + this.abscissa = group_by[0]; + } else { + this.abscissa = this.first_field; + } + this.dataset.read_slice(this.list_fields(), { + context: context, + domain: domain + }, $.proxy(this, 'schedule_chart')); } }); }; From 7e6bc0e062e0a14f1bda89c8239605032baaeb29 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 29 Sep 2011 13:58:30 +0200 Subject: [PATCH 13/19] [FIX] Fixed kanban view for new do_search bzr revid: fme@openerp.com-20110929115830-ww0xxxxxaso5rqs7 --- addons/web_kanban/static/src/js/kanban.js | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index 52ad7982018..f0ec245f52f 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -424,20 +424,11 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({ }); return new_record; }, - do_search: function (domains, contexts, group_by) { + do_search: function (domain, context, group_by) { var self = this; - this.rpc('/web/session/eval_domain_and_context', { - domains: [this.dataset.get_domain()].concat(domains), - contexts: [this.dataset.get_context()].concat(contexts), - group_by_seq: group_by - }, function (results) { - self.domain = results.domain; - self.context = results.context; - self.group_by = results.group_by; - self.do_actual_search(); - }); - }, - do_actual_search : function () { + self.domain = domain; + self.context = context; + self.group_by = group_by; var self = this, group_by = self.group_by; if (!group_by.length && this.fields_view.arch.attrs.default_group_by) { From 50300b74a76d5feceebc65e9a7d57dda71a2c1b4 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 29 Sep 2011 14:19:02 +0200 Subject: [PATCH 14/19] [FIX] Fixed the calendar view for new do_search bzr revid: fme@openerp.com-20110929121902-np8driu2jukwh9b0 --- addons/web_calendar/static/src/js/calendar.js | 33 ++++++++----------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/addons/web_calendar/static/src/js/calendar.js b/addons/web_calendar/static/src/js/calendar.js index 5de601e0921..f80e57ebf5d 100644 --- a/addons/web_calendar/static/src/js/calendar.js +++ b/addons/web_calendar/static/src/js/calendar.js @@ -13,6 +13,7 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({ this.set_default_options(options); this.dataset = dataset; this.model = dataset.model; + this.fields_view = {}; this.view_id = view_id; this.domain = this.dataset.domain || []; this.context = this.dataset.context || {}; @@ -92,9 +93,6 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({ this.init_scheduler(); this.has_been_loaded.resolve(); - if (this.dataset.ids.length) { - this.dataset.read_ids(this.dataset.ids, _.keys(this.fields), this.on_events_loaded); - } }, init_scheduler: function() { var self = this; @@ -293,26 +291,21 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({ } return data; }, - do_search: function(domains, contexts, groupbys) { + do_search: function(domain, context, group_by) { var self = this; scheduler.clearAll(); $.when(this.has_been_loaded).then(function() { - self.rpc('/web/session/eval_domain_and_context', { - domains: domains, - contexts: contexts, - group_by_seq: groupbys - }, function (results) { - // TODO: handle non-empty results.group_by with read_group - self.dataset.context = self.context = results.context; - self.dataset.domain = self.domain = results.domain; - self.dataset.read_slice(_.keys(self.fields), { - offset:0, - limit: self.limit - }, function(events) { - self.dataset_events = events; - self.on_events_loaded(events); - } - ); + // TODO: handle non-empty results.group_by with read_group + self.context = context; + self.domain = domain; + self.dataset.read_slice(_.keys(self.fields), { + offset: 0, + context: context, + domain: domain, + limit: self.limit + }, function(events) { + self.dataset_events = events; + self.on_events_loaded(events); }); }); }, From 4171f852ce418f6d09e819e6616c99a14b61548f Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 29 Sep 2011 14:24:41 +0200 Subject: [PATCH 15/19] [IMP] Kanban: Only reload current record when button is clicked bzr revid: fme@openerp.com-20110929122441-x0o94teq3zbftyai --- addons/web_kanban/static/src/js/kanban.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index f0ec245f52f..c961433a37b 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -291,7 +291,7 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({ this.do_execute_action( button_attrs, dataset, record_id, function () { - self.do_actual_search(); + self.on_reload_record(record_id); } ); }, From 45ed96d15e171a40ca5816f7483ba2d145aa1fca Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 29 Sep 2011 14:32:25 +0200 Subject: [PATCH 16/19] [IMP] Kanban, removed local references to domain and context bzr revid: fme@openerp.com-20110929123225-nkx9zx5kj8vc2pjm --- addons/web_kanban/static/src/js/kanban.js | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index c961433a37b..2e06482d375 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -9,8 +9,6 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({ this.set_default_options(options); this.dataset = dataset; this.model = dataset.model; - this.domain = dataset.domain; - this.context = dataset.context; this.view_id = view_id; this.fields_view = {}; this.group_by = []; @@ -426,8 +424,6 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({ }, do_search: function (domain, context, group_by) { var self = this; - self.domain = domain; - self.context = context; self.group_by = group_by; var self = this, group_by = self.group_by; @@ -435,8 +431,9 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({ group_by = [this.fields_view.arch.attrs.default_group_by]; self.group_by = group_by; } - self.datagroup = new openerp.web.DataGroup(self, self.model, self.domain, self.context, group_by); - self.datagroup.list(_.keys(self.fields_view.fields), + self.datagroup = new openerp.web.DataGroup(self, self.model, domain, context, group_by); + self.datagroup.list( + _.keys(self.fields_view.fields), function (groups) { self.groups = groups; if (groups.length) { @@ -449,9 +446,15 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({ }, function (dataset) { self.groups = []; - self.dataset.read_slice([], {'domain': self.domain, 'context': self.context}, function(records) { - if (records.length) self.all_display_data = [{'records': records, 'value':false, 'header' : false, 'ids': self.dataset.ids}]; - else self.all_display_data = []; + self.dataset.read_slice([], { + domain: domain, + context: context + }, function(records) { + if (records.length) { + self.all_display_data = [{'records': records, 'value':false, 'header' : false, 'ids': self.dataset.ids}]; + } else { + self.all_display_data = []; + } self.$element.find(".oe_kanban_view").remove(); self.on_show_data(); }); @@ -475,7 +478,7 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({ _.each(self.aggregates, function(value, key) { group_aggregates[value] = group.aggregates[key]; }); - self.dataset.read_slice([], {'domain': group.domain, 'context': group.context}, function(records) { + self.dataset.read_slice([], {'domain': group.domain, 'conext': group.context}, function(records) { self.all_display_data.push({"value" : group_value, "records": records, 'header':group_name, 'ids': self.dataset.ids, 'aggregates': group_aggregates}); if (datagroups.length == self.all_display_data.length) { self.$element.find(".oe_kanban_view").remove(); From 59e70f45440521345d82ed649e237187c2bbfae1 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 29 Sep 2011 16:49:15 +0200 Subject: [PATCH 17/19] [FIX] si la vue est pas searchable on va appeler 'this.searchview[true]()' bzr revid: fme@openerp.com-20110929144915-mgh3eaztp14cbbfp --- addons/web/static/src/js/views.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 389b8bfc5a1..cfeb70a7e22 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -239,7 +239,7 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ } if (this.searchview) { - this.searchview[view.controller.searchable === false || this.searchview.hidden ? 'hide' : 'show'](); + this.searchview[(view.controller.searchable === false || this.searchview.hidden) ? 'hide' : 'show'](); } this.$element From 3e1b00747837d8a05996a63abfd1e555ae6c686d Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 3 Oct 2011 15:52:03 +0200 Subject: [PATCH 18/19] [IMP] Viewmanager sets dataset's domain & context on_search bzr revid: fme@openerp.com-20111003135203-d3p18cfdh5jko976 --- addons/web/static/src/js/views.js | 7 ++++--- addons/web_calendar/static/src/js/calendar.js | 6 ------ addons/web_gantt/static/src/js/gantt.js | 10 +--------- addons/web_graph/static/src/js/graph.js | 5 +---- addons/web_kanban/static/src/js/kanban.js | 5 +---- 5 files changed, 7 insertions(+), 26 deletions(-) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index cfeb70a7e22..3eb4bdafb72 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -281,12 +281,13 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ var self = this, controller = this.views[this.active_view].controller; if (domains || contexts) { - //if ((!domains || !domains.length) && (!contexts || !contexts.length) && (!groupbys || !groupbys.length) { } this.rpc('/web/session/eval_domain_and_context', { - domains: [this.dataset.get_domain()].concat(domains || []), - contexts: [this.dataset.get_context()].concat(contexts || []), + domains: [this.action.domain || []].concat(domains || []), + contexts: [this.action.context || {}].concat(contexts || []), group_by_seq: groupbys || [] }, function (results) { + self.dataset.context = results.context; + self.dataset.domain = results.domain; controller.do_search(results.domain, results.context, results.group_by); self.last_search = [results.domain, results.context, results.group_by]; }); diff --git a/addons/web_calendar/static/src/js/calendar.js b/addons/web_calendar/static/src/js/calendar.js index f80e57ebf5d..f936547ed8c 100644 --- a/addons/web_calendar/static/src/js/calendar.js +++ b/addons/web_calendar/static/src/js/calendar.js @@ -15,8 +15,6 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({ this.model = dataset.model; this.fields_view = {}; this.view_id = view_id; - this.domain = this.dataset.domain || []; - this.context = this.dataset.context || {}; this.has_been_loaded = $.Deferred(); this.creating_event_id = null; this.dataset_events = []; @@ -296,12 +294,8 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({ scheduler.clearAll(); $.when(this.has_been_loaded).then(function() { // TODO: handle non-empty results.group_by with read_group - self.context = context; - self.domain = domain; self.dataset.read_slice(_.keys(self.fields), { offset: 0, - context: context, - domain: domain, limit: self.limit }, function(events) { self.dataset_events = events; diff --git a/addons/web_gantt/static/src/js/gantt.js b/addons/web_gantt/static/src/js/gantt.js index a045bae64e1..73e244edad7 100644 --- a/addons/web_gantt/static/src/js/gantt.js +++ b/addons/web_gantt/static/src/js/gantt.js @@ -509,15 +509,7 @@ init: function(parent, dataset, view_id) { do_search: function (domains, contexts, groupbys) { var self = this; this.grp = groupbys; - return this.rpc('/web/session/eval_domain_and_context', { - domains: domains, - contexts: contexts, - group_by_seq: groupbys - }, function (results) { - self.dataset.context = results.context; - self.dataset.domain = results.domain; - self.reload_gantt(); - }); + self.reload_gantt(); } }); diff --git a/addons/web_graph/static/src/js/graph.js b/addons/web_graph/static/src/js/graph.js index 5a72bf2a816..ffdec860906 100644 --- a/addons/web_graph/static/src/js/graph.js +++ b/addons/web_graph/static/src/js/graph.js @@ -369,10 +369,7 @@ openerp.web_graph.GraphView = openerp.web.View.extend({ } else { this.abscissa = this.first_field; } - this.dataset.read_slice(this.list_fields(), { - context: context, - domain: domain - }, $.proxy(this, 'schedule_chart')); + this.dataset.read_slice(this.list_fields(), {}, $.proxy(this, 'schedule_chart')); } }); }; diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index 2e06482d375..23a0b75a322 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -446,10 +446,7 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({ }, function (dataset) { self.groups = []; - self.dataset.read_slice([], { - domain: domain, - context: context - }, function(records) { + self.dataset.read_slice([], {}, function(records) { if (records.length) { self.all_display_data = [{'records': records, 'value':false, 'header' : false, 'ids': self.dataset.ids}]; } else { From e2b6e03c3c6ffe3c6e2ed34166b66f953ba35495 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 4 Oct 2011 09:50:39 +0200 Subject: [PATCH 19/19] [FIX] Save last search before triggering do_search bzr revid: fme@openerp.com-20111004075039-n8a30wnuueiwnbwt --- addons/web/static/src/js/views.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index a38825a35a5..28e9772da77 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -288,8 +288,8 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{ }, function (results) { self.dataset.context = results.context; self.dataset.domain = results.domain; - controller.do_search(results.domain, results.context, results.group_by); self.last_search = [results.domain, results.context, results.group_by]; + controller.do_search(results.domain, results.context, results.group_by); }); } else if (this.last_search) { controller.do_search.apply(controller, this.last_search);