From e7306f2c4ad577fd94bbb28e1c7636ef6799bad7 Mon Sep 17 00:00:00 2001 From: Gery Debongnie Date: Wed, 26 Feb 2014 12:17:10 +0100 Subject: [FIX] fixes various problems with the graph view and the filters in the searchbar. Now, it should properly compute and update the groupby/col_groupby in the search bar (addon web_graph) bzr revid: ged@openerp.com-20140226111710-q11qx1tb2l0nryxf --- addons/web_graph/static/src/css/graph.css | 4 ++ addons/web_graph/static/src/js/graph_view.js | 94 ++++++++++++++++---------- addons/web_graph/static/src/js/graph_widget.js | 4 ++ 3 files changed, 66 insertions(+), 36 deletions(-) (limited to 'addons/web_graph/static/src') diff --git a/addons/web_graph/static/src/css/graph.css b/addons/web_graph/static/src/css/graph.css index b7d82597c4c..2213f655a6b 100644 --- a/addons/web_graph/static/src/css/graph.css +++ b/addons/web_graph/static/src/css/graph.css @@ -1,3 +1,7 @@ +.graph_main_content { + position: relative; +} + .graph_main_content td { font-size: 12px; margin: 45px; diff --git a/addons/web_graph/static/src/js/graph_view.js b/addons/web_graph/static/src/js/graph_view.js index ace2f14ae20..25a1f932cc4 100644 --- a/addons/web_graph/static/src/js/graph_view.js +++ b/addons/web_graph/static/src/js/graph_view.js @@ -81,9 +81,9 @@ instance.web_graph.GraphView = instance.web.View.extend({ this.ignore_do_search = false; return; } - var self = this, - col_group_by = self.get_groupbys_from_searchview('ColGroupBy', 'col_group_by'); + groupbys = this.get_groupbys_from_searchview(), + col_group_by = groupbys.col_group_by; if (!this.graph_widget) { if (group_by.length) { @@ -95,10 +95,10 @@ instance.web_graph.GraphView = instance.web.View.extend({ this.graph_widget = new openerp.web_graph.Graph(this, this.model, domain, this.widget_config); this.graph_widget.appendTo(this.$el); this.ViewManager.on('switch_mode', this, function (e) { - var col_gb = self.get_groupbys_from_searchview('ColGroupBy', 'col_group_by'), - row_gb = self.get_groupbys_from_searchview('GroupBy', 'group_by'); - - if (e === 'graph') this.graph_widget.set(domain, row_gb, col_gb); + if (e === 'graph') { + var group_bys = self.get_groupbys_from_searchview(); + this.graph_widget.set(domain, group_bys.group_by, group_bys.col_group_by); + } }); return; } @@ -106,19 +106,27 @@ instance.web_graph.GraphView = instance.web.View.extend({ this.graph_widget.set(domain, group_by, col_group_by); }, - extract_groupby: function (cat_field, context) { - context = (_.isString(context)) ? py.eval(context) : context; - return context[cat_field]; - }, + get_groupbys_from_searchview: function () { + var result = { group_by: [], col_group_by: []}, + searchdata = this.search_view.build_search_data(); - get_groupbys_from_searchview: function (cat_name, cat_field) { - var self=this, - facet = this.search_view.query.findWhere({category:cat_name}), - groupby_list = facet ? facet.values.models : []; - return _.map(groupby_list, function (g) { - var context = g.attributes.value.attrs.context; - return self.extract_groupby(cat_field, context); + _.each(searchdata.groupbys, function (data) { + data = (_.isString(data)) ? py.eval(data) : data; + result.group_by = result.group_by.concat(data.group_by); + if (data.col_group_by) { + result.col_group_by = result.col_group_by.concat(data.col_group_by); + } + }); + + if (result.col_group_by.length) { + return result; + } + _.each(searchdata.contexts, function (context) { + if (context.col_group_by) { + result.col_group_by = result.col_group_by.concat(context.col_group_by); + } }); + return result; }, do_show: function () { @@ -132,11 +140,20 @@ instance.web_graph.GraphView = instance.web.View.extend({ // add groupby to the search view register_groupby: function(row_groupby, col_groupby) { - var query = this.search_view.query; + var query = this.search_view.query, + groupbys = this.get_groupbys_from_searchview(), + search_row_groupby = groupbys.group_by, + search_col_groupby = groupbys.col_group_by, + row_gb_changed = !_.isEqual(_.pluck(row_groupby, 'field'), search_row_groupby), + col_gb_changed = !_.isEqual(_.pluck(col_groupby, 'field'), search_col_groupby); if (!_.has(this.search_view, '_s_groupby')) { return; } - if (row_groupby.length && col_groupby.length) { + if (!row_gb_changed && !col_gb_changed) { + return; + } + + if (row_gb_changed && col_gb_changed) { // when two changes to the search view will be done, the method do_search // will be called twice, once with the correct groupby and incorrect col_groupby, // and once with correct informations. This flag is necessary to prevent the @@ -144,26 +161,31 @@ instance.web_graph.GraphView = instance.web.View.extend({ this.ignore_do_search = true; } - // add row groupbys - var row_facet = this.make_row_groupby_facets(row_groupby), - row_search_facet = query.findWhere({category:'GroupBy'}); + if (row_gb_changed) { + // add row groupbys + var row_facet = this.make_row_groupby_facets(row_groupby), + row_search_facet = query.findWhere({category:'GroupBy'}); - if (row_search_facet) { - row_search_facet.values.reset(row_facet.values); - } else { - if (row_groupby.length) { - query.add(row_facet); + if (row_search_facet) { + row_search_facet.values.reset(row_facet.values); + } else { + if (row_groupby.length) { + query.add(row_facet); + } } } - // add col groupbys - var col_facet = this.make_col_groupby_facets(col_groupby), - col_search_facet = query.findWhere({category:'ColGroupBy'}); - - if (col_search_facet) { - col_search_facet.values.reset(col_facet.values); - } else { - if (col_groupby.length) { - query.add(col_facet); + + if (col_gb_changed) { + // add col groupbys + var col_facet = this.make_col_groupby_facets(col_groupby), + col_search_facet = query.findWhere({category:'ColGroupBy'}); + + if (col_search_facet) { + col_search_facet.values.reset(col_facet.values); + } else { + if (col_groupby.length) { + query.add(col_facet); + } } } }, diff --git a/addons/web_graph/static/src/js/graph_widget.js b/addons/web_graph/static/src/js/graph_widget.js index 26f479790df..f060e62fa8c 100644 --- a/addons/web_graph/static/src/js/graph_widget.js +++ b/addons/web_graph/static/src/js/graph_widget.js @@ -37,6 +37,8 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({ if (this.mode !== 'pivot') { this.$('.graph_heatmap label').addClass('disabled'); + } else { + this.$('.graph_main_content').css('position', 'initial'); } return this.model.call('fields_get', []).then(function (f) { @@ -159,8 +161,10 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({ if (mode === 'pivot') { this.$('.graph_heatmap label').removeClass('disabled'); + this.$('.graph_main_content').css('position', 'initial'); } else { this.$('.graph_heatmap label').addClass('disabled'); + this.$('.graph_main_content').css('position', 'relative'); } this.display_data(); }, -- cgit v1.2.3 From eb1eb48ef39a7eabcf96a2d130ddf81c360b2b53 Mon Sep 17 00:00:00 2001 From: Gery Debongnie Date: Wed, 26 Feb 2014 14:04:24 +0100 Subject: [IMP] optimizes pivot table so that it doesn't reload data when the groupbys have been changed in such a way that it should only fold some headers (addon web_graph) bzr revid: ged@openerp.com-20140226130424-rtb5iof0c14caf56 --- addons/web_graph/static/src/js/graph_widget.js | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'addons/web_graph/static/src') diff --git a/addons/web_graph/static/src/js/graph_widget.js b/addons/web_graph/static/src/js/graph_widget.js index f060e62fa8c..9498fbfc93c 100644 --- a/addons/web_graph/static/src/js/graph_widget.js +++ b/addons/web_graph/static/src/js/graph_widget.js @@ -151,6 +151,13 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({ return; } + if (!dom_changed && col_reduced && row_reduced) { + this.pivot.fold_with_depth(this.pivot.rows, row_gbs.length); + this.pivot.fold_with_depth(this.pivot.cols, col_gbs.length); + this.display_data(); + return; + } + if (dom_changed || row_gb_changed || col_gb_changed) { this.pivot.set(domain, row_gbs, col_gbs).then(this.proxy('display_data')); } -- cgit v1.2.3 From b453252c2dc10b8361b557229eec85b8684a6858 Mon Sep 17 00:00:00 2001 From: Gery Debongnie Date: Wed, 26 Feb 2014 15:39:19 +0100 Subject: [IMP] this commit adds two css classes (graph_pivot_mode and graph_chart_mode) to better separate the ui from the code in graph view (addon web_graph) bzr revid: ged@openerp.com-20140226143919-cejqoq2kd4iwrq04 --- addons/web_graph/static/src/css/graph.css | 8 ++++++-- addons/web_graph/static/src/js/graph_widget.js | 7 ++++--- 2 files changed, 10 insertions(+), 5 deletions(-) (limited to 'addons/web_graph/static/src') diff --git a/addons/web_graph/static/src/css/graph.css b/addons/web_graph/static/src/css/graph.css index 2213f655a6b..1949028d6d8 100644 --- a/addons/web_graph/static/src/css/graph.css +++ b/addons/web_graph/static/src/css/graph.css @@ -1,5 +1,9 @@ -.graph_main_content { - position: relative; +.graph_pivot_mode { + position:initial; +} + +.graph_chart_mode { + position:relative; } .graph_main_content td { diff --git a/addons/web_graph/static/src/js/graph_widget.js b/addons/web_graph/static/src/js/graph_widget.js index 9498fbfc93c..ac2a581616d 100644 --- a/addons/web_graph/static/src/js/graph_widget.js +++ b/addons/web_graph/static/src/js/graph_widget.js @@ -37,8 +37,9 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({ if (this.mode !== 'pivot') { this.$('.graph_heatmap label').addClass('disabled'); + this.$('.graph_main_content').addClass('graph_chart_mode'); } else { - this.$('.graph_main_content').css('position', 'initial'); + this.$('.graph_main_content').addClass('graph_pivot_mode'); } return this.model.call('fields_get', []).then(function (f) { @@ -168,10 +169,10 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({ if (mode === 'pivot') { this.$('.graph_heatmap label').removeClass('disabled'); - this.$('.graph_main_content').css('position', 'initial'); + this.$('.graph_main_content').removeClass('graph_chart_mode').addClass('graph_pivot_mode'); } else { this.$('.graph_heatmap label').addClass('disabled'); - this.$('.graph_main_content').css('position', 'relative'); + this.$('.graph_main_content').removeClass('graph_pivot_mode').addClass('graph_chart_mode'); } this.display_data(); }, -- cgit v1.2.3 From a37f96d0438e8ab3984f659110004c19c9f01013 Mon Sep 17 00:00:00 2001 From: Gery Debongnie Date: Wed, 26 Feb 2014 15:40:32 +0100 Subject: [FIX] adds a missing semicolon... :/ (addon web_graph) bzr revid: ged@openerp.com-20140226144032-st0eqbkzco8n2unk --- addons/web_graph/static/src/js/graph_widget.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web_graph/static/src') diff --git a/addons/web_graph/static/src/js/graph_widget.js b/addons/web_graph/static/src/js/graph_widget.js index ac2a581616d..78fa7ceff22 100644 --- a/addons/web_graph/static/src/js/graph_widget.js +++ b/addons/web_graph/static/src/js/graph_widget.js @@ -376,7 +376,7 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({ this.$('.graph_main_content svg').remove(); this.$('.graph_main_content div').remove(); this.table.empty(); - this.table.toggleClass('heatmap', this.heatmap_mode !== 'none') + this.table.toggleClass('heatmap', this.heatmap_mode !== 'none'); this.width = this.$el.width(); this.height = Math.min(Math.max(document.documentElement.clientHeight - 116 - 60, 250), Math.round(0.8*this.$el.width())); -- cgit v1.2.3