[MERGE] graph view: multiple minor/usability fixes

bzr revid: odo@openerp.com-20140422174258-9mo8qbuniaxjw0oe
This commit is contained in:
Géry Debongnie 2014-04-22 19:42:58 +02:00 committed by Olivier Dony
commit 7fd1613f67
3 changed files with 38 additions and 28 deletions

View File

@ -29,8 +29,8 @@ my.Facet = B.Model.extend({
B.Model.prototype.initialize.apply(this, arguments);
this.values = new my.FacetValues(values || []);
this.values.on('add remove change reset', function () {
this.trigger('change', this);
this.values.on('add remove change reset', function (_, options) {
this.trigger('change', this, options);
}, this);
},
get: function (key) {
@ -399,7 +399,8 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
this.setup_global_completion();
this.query = new my.SearchQuery()
.on('add change reset remove', this.proxy('do_search'))
.on('add change reset remove', this.proxy('renderFacets'));
.on('change', this.proxy('renderChangedFacets'))
.on('add reset remove', this.proxy('renderFacets'));
if (this.options.hidden) {
this.$el.hide();
@ -578,14 +579,20 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
.trigger('blur');
},
/**
*
* @param {openerp.web.search.SearchQuery | openerp.web.search.Facet} _1
* @param {openerp.web.search.Facet} [_2]
* Call the renderFacets method with the correct arguments.
* This is due to the fact that change events are called with two arguments
* (model, options) while add, reset and remove events are called with
* (collection, model, options) as arguments
*/
renderChangedFacets: function (model, options) {
this.renderFacets(undefined, model, options);
},
/**
* @param {openerp.web.search.SearchQuery | undefined} Undefined if event is change
* @param {openerp.web.search.Facet}
* @param {Object} [options]
*/
renderFacets: function (_1, _2, options) {
// _1: model if event=change, otherwise collection
// _2: undefined if event=change, otherwise model
renderFacets: function (collection, model, options) {
var self = this;
var started = [];
var $e = this.$('div.oe_searchview_facets');
@ -610,6 +617,7 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
});
$.when.apply(null, started).then(function () {
if (options && options.focus_input === false) return;
var input_to_focus;
// options.at: facet inserted at given index, focus next input
// otherwise just focus last input
@ -618,7 +626,6 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
} else {
input_to_focus = self.input_subviews[(options.at + 1) * 2];
}
input_to_focus.$el.focus();
});
},

View File

@ -167,7 +167,7 @@ instance.web_graph.GraphView = instance.web.View.extend({
row_search_facet = query.findWhere({category:'GroupBy'});
if (row_search_facet) {
row_search_facet.values.reset(row_facet.values);
row_search_facet.values.reset(row_facet.values, {focus_input:false});
} else {
if (row_groupby.length) {
query.add(row_facet);
@ -181,7 +181,7 @@ instance.web_graph.GraphView = instance.web.View.extend({
col_search_facet = query.findWhere({category:'ColGroupBy'});
if (col_search_facet) {
col_search_facet.values.reset(col_facet.values);
col_search_facet.values.reset(col_facet.values, {focus_input:false});
} else {
if (col_groupby.length) {
query.add(col_facet);

View File

@ -44,7 +44,7 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
}
openerp.session.rpc('/web_graph/check_xlwt').then(function (result) {
self.$('.graph_options_selection label').toggle(result);
self.$('.graph_options_selection label').last().toggle(result);
});
return this.model.call('fields_get', []).then(function (f) {
@ -305,11 +305,11 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
if (header.expanded) {
this.fold(header);
return;
}
}
if (header.path.length < header.root.groupby.length) {
this.expand(id);
return;
}
}
if (!this.important_fields.length) {
return;
}
@ -498,10 +498,12 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
// Main display method
// ----------------------------------------------------------------------
display_data: function () {
var scroll = $(window).scrollTop();
this.$('.graph_main_content svg').remove();
this.$('.graph_main_content div').remove();
this.table.empty();
this.table.toggleClass('heatmap', this.heatmap_mode !== 'none');
this.$('.graph_options_selection label').last().toggleClass('disabled', this.pivot.no_data);
this.width = this.$el.width();
this.height = Math.min(Math.max(document.documentElement.clientHeight - 116 - 60, 250), Math.round(0.8*this.$el.width()));
@ -511,6 +513,7 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
} else {
if (this.mode === 'pivot') {
this.draw_table();
$(window).scrollTop(scroll);
} else {
this.$('.graph_main_content').append($('<div><svg>'));
this.svg = this.$('.graph_main_content svg')[0];
@ -608,7 +611,7 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
if ((dim_x === 0) && (dim_y === 0)) {
data = [{key: _t('Total'), values:[{
x: _t('Total'),
y: this.pivot.get_total(),
y: this.pivot.get_total()[0],
}]}];
// Only column groupbys
} else if ((dim_x === 0) && (dim_y >= 1)){
@ -621,7 +624,7 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
// Just 1 row groupby
} else if ((dim_x === 1) && (dim_y === 0)) {
data = _.map(this.pivot.main_row().children, function (pt) {
var value = self.pivot.get_total(pt),
var value = self.pivot.get_total(pt)[0],
title = (pt.title !== undefined) ? pt.title : _t('Undefined');
return {x: title, y: value};
});
@ -658,8 +661,6 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
nv.addGraph(function () {
var chart = nv.models.multiBarChart()
.width(self.width)
.height(self.height)
.reduceXTicks(false)
.stacked(self.bar_ui === 'stack')
.showControls(show_controls);
@ -687,9 +688,12 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
dim_x = this.pivot.rows.groupby.length,
dim_y = this.pivot.cols.groupby.length;
var rows = this.pivot.get_rows_with_depth(dim_x),
labels = _.pluck(rows, 'title');
var data = _.map(this.pivot.get_cols_leaves(), function (col) {
var values = _.map(self.pivot.get_rows_with_depth(dim_x), function (row) {
return {x: row.title, y: self.pivot.get_values(row.id,col.id)[0] || 0};
var values = _.map(rows, function (row, index) {
return {x: index, y: self.pivot.get_values(row.id,col.id)[0] || 0};
});
var title = _.map(col.path, function (p) {
return p || _t('Undefined');
@ -702,10 +706,9 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
nv.addGraph(function () {
var chart = nv.models.lineChart()
.x(function (d,u) { return u; })
.width(self.width)
.height(self.height)
.margin({top: 30, right: 20, bottom: 20, left: 60});
.x(function (d,u) { return u; });
chart.xAxis.tickFormat(function (d,u) {return labels[d];});
d3.select(self.svg)
.attr('width', self.width)
@ -727,14 +730,14 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
if (dim_x === 0) {
title = self.measure_label;
}
return {x: title, y: self.pivot.get_total(row)};
return {x: title, y: self.pivot.get_total(row)[0]};
});
nv.addGraph(function () {
var chart = nv.models.pieChart()
.color(d3.scale.category10().range())
.width(self.width)
.height(self.height);
.height(self.height)
.color(d3.scale.category10().range());
d3.select(self.svg)
.datum(data)