summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/graph/graph_renderer.js
diff options
context:
space:
mode:
authorAdrien Dieudonne <adr@odoo.com>2018-09-06 13:11:06 +0200
committerAdrien Dieudonne <adr@odoo.com>2018-09-20 15:20:03 +0200
commitb23a981320293e60d5e509e2f0299d934bffbe17 (patch)
treed9ddeb46d542e96cae243c811fe87a25af2acebc /addons/web/static/src/js/views/graph/graph_renderer.js
parent009e1ab4b6198a0f048a08d5c98d7c4fe2b2e8dc (diff)
[IMP] web: graph view: design improvements
This commit improves UI of charts: - Reduce margins of svg - Put ticks label on right of y axis - Bigger lines (line chart only) - ligther area color (line chart only) - Hide y axis line - Force charts to begin at y=0 - Hide zero tick on y axes There is no test because these changes only concerns visual effects. Task ID: 1877588
Diffstat (limited to 'addons/web/static/src/js/views/graph/graph_renderer.js')
-rw-r--r--addons/web/static/src/js/views/graph/graph_renderer.js50
1 files changed, 32 insertions, 18 deletions
diff --git a/addons/web/static/src/js/views/graph/graph_renderer.js b/addons/web/static/src/js/views/graph/graph_renderer.js
index 80edb8047ba..5942da9ed97 100644
--- a/addons/web/static/src/js/views/graph/graph_renderer.js
+++ b/addons/web/static/src/js/views/graph/graph_renderer.js
@@ -308,8 +308,8 @@ return AbstractRenderer.extend({
this.state.data.forEach(self._sanitizeLabel);
var data = [];
- var tickValues;
- var tickFormat;
+ var ticksLabels = [];
+ var tickValues = [];
var measure = this.state.fields[this.state.measure].string;
var values;
@@ -345,7 +345,6 @@ return AbstractRenderer.extend({
});
}
- var ticksLabels = [];
for (i = 0; i < graphData.length; i++) {
ticksLabels.push(graphData[i].labels);
}
@@ -363,22 +362,17 @@ return AbstractRenderer.extend({
}
}
}
-
- tickFormat = function (d) {
- return ticksLabels[d];
- };
} else if (this.state.groupedBy.length > 1) {
var data_dict = {};
var tick = 0;
- var tickLabels = [];
var serie, tickLabel;
var identity = function (p) {return p;};
- tickValues = [];
+
for (var i = 0; i < this.state.data.length; i++) {
if (graphData[i].labels[0] !== tickLabel) {
tickLabel = this.state.data[i].labels[0];
tickValues.push(tick);
- tickLabels.push(tickLabel);
+ ticksLabels.push(tickLabel);
tick++;
}
serie = graphData[i].labels[1];
@@ -393,8 +387,8 @@ return AbstractRenderer.extend({
});
data = _.map(data_dict, identity);
}
- tickFormat = function (d) {return tickLabels[d];};
}
+
var $svgContainer = $('<div/>', {class: 'o_graph_svg_container'});
this.$el.append($svgContainer);
var svg = d3.select($svgContainer[0]).append('svg');
@@ -404,22 +398,34 @@ return AbstractRenderer.extend({
var chart = nv.models.lineChart();
chart.options({
- margin: {left: 80, bottom: 100, top: 80, right: 80},
+ margin: {left: 0, bottom: 20, top: 0, right: 0},
useInteractiveGuideline: true,
showLegend: _.size(data) <= MAX_LEGEND_LENGTH,
showXAxis: true,
showYAxis: true,
wrapLabels: true,
});
- chart.xAxis.tickValues(tickValues)
- .tickFormat(tickFormat);
- chart.yAxis.tickFormat(function (d) {
- return field_utils.format.float(d, {
- digits : self.state.fields[self.state.measure] && self.state.fields[self.state.measure].digits || [69, 2],
+ chart.forceY([0]);
+ chart.xAxis
+ .tickValues(tickValues)
+ .tickFormat(function (d) {
+ return ticksLabels[d];
});
- });
+ chart.yAxis
+ .showMaxMin(false)
+ .tickFormat(function (d) {
+ return field_utils.format.float(d, {
+ digits : self.state.fields[self.state.measure] && self.state.fields[self.state.measure].digits || [69, 2],
+ });
+ });
+ chart.yAxis.tickPadding(5);
+ chart.yAxis.orient("right");
chart(svg);
+
+ // Bigger line (stroke-width 1.5 is hardcoded in nv.d3)
+ $svgContainer.find('.nvd3 .nv-groups g.nv-group').css('stroke-width', '3px')
+
return chart;
},
/**
@@ -441,6 +447,14 @@ return AbstractRenderer.extend({
}
}
var chart1 = this['_render' + _.str.capitalize(this.state.mode) + 'Chart'](this.state.data);
+
+ // FIXME: When 'orient' is right for Y axis, horizontal lines aren't displayed correctly
+ chart1.dispatch.on('renderEnd', function () {
+ $('.nv-y .tick > line').attr('x2', function (i, value) {
+ return Math.abs(value);
+ });
+ })
+
chartResize(chart1);
if (this.state.mode === 'pie' && this.isComparison) {
var chart2 = this['_render' + _.str.capitalize(this.state.mode) + 'Chart'](this.state.comparisonData);