diff --git a/app/scripts/src/charts/stacked_area_chart.jsx b/app/scripts/src/charts/stacked_area_chart.jsx
index 31b9240..5600e53 100644
--- a/app/scripts/src/charts/stacked_area_chart.jsx
+++ b/app/scripts/src/charts/stacked_area_chart.jsx
@@ -75,20 +75,14 @@ var StackedAreaChart = React.createClass({
node.className = 'sachart-container focused item-'+ i;
},
- handleFocusOut: function(i) {
+ handleFocusOut: function() {
var node = this.refs.container.getDOMNode();
node.className = 'sachart-container';
},
handleNewData: function() {
// Group commits by items
- var weeksList = _.chain(this.state.rawData)
- .pluck('week')
- .uniq()
- .sort()
- .reverse()
- .take(this.maxWeeks)
- .value();
+ var weeksList = _(this.state.rawData).pluck('week').uniq().sort().reverse().take(this.maxWeeks).value();
var counts = _.reduce(this.state.rawData, function(res, el) {
if (weeksList.indexOf(el.week) === -1) {
@@ -103,7 +97,7 @@ var StackedAreaChart = React.createClass({
}, {});
// Extract top items from
- var top = _.chain(_.pairs(counts)) // Take [item, count] pairs from counts object
+ var top = _(_.pairs(counts)) // Take [item, count] pairs from counts object
.sortBy(1).reverse() // sort them by count (descending)
.take(this.numElements) // take first N pairs
.pluck(0) // keep only items, omit the counts
@@ -125,9 +119,7 @@ var StackedAreaChart = React.createClass({
return res;
}, {});
- var max = _.max(_.map(weeksList, function(week) {
- return _.sum(_.values(weeks[week]));
- }));
+ var max = _.max(_.map(weeksList, function(week){ return _.sum(_.values(weeks[week])); }));
this.setState({
top: top,
@@ -141,11 +133,12 @@ var StackedAreaChart = React.createClass({
var maxWidth = this.state.canvasWidth,
maxHeight = this.height;
- var d = _.map(this.buildDots(points), function(dot) {
- return 'L'+ dot[0] +','+ dot[1];
- });
- d.unshift('M0,'+ maxHeight);
- d.push('L'+ maxWidth +','+ maxHeight +'Z');
+ var dots = this.buildDots(points);
+ var first = dots.shift();
+ var d = _.map(dots, function(dot){ return 'L'+ dot.x +','+ dot.y; });
+ d.unshift('M'+ first.x +','+ first.y);
+ d.push('L'+ maxWidth +','+ maxHeight);
+ d.push('L0,'+ maxHeight +' Z');
return d.join(' ');
},
@@ -157,7 +150,21 @@ var StackedAreaChart = React.createClass({
len = points.length;
return _.map(points, function(point, i) {
- return [Math.floor(i/(len-1)*maxWidth), Math.floor(maxHeight - point)];
+ point.x = i/(len-1)*maxWidth;
+ point.y = maxHeight - point.point;
+
+ if (point.x < 10) { // Radius
+ point.x = 10
+ } else if (point.x > maxWidth - 10) {
+ point.x = maxWidth - 10;
+ }
+ if (point.y < 10) {
+ point.y = 10;
+ } else if (point.y > maxHeight - 10) {
+ point.y = maxHeight - 10;
+ }
+
+ return point;
});
},
@@ -167,7 +174,8 @@ var StackedAreaChart = React.createClass({
top = this.state.top,
max = this.state.max;
- var points = _.chain(this.state.weeks)
+ // [week, [{val, point}, ...]]
+ var points = _(this.state.weeks)
.map(function(items, week) {
var values = _.map(top, function(item) {
return items[item] || 0;
@@ -175,8 +183,11 @@ var StackedAreaChart = React.createClass({
var sum = 0;
var points = _.map(values, function(val) {
- sum += Math.floor(val/max*maxHeight*0.96);
- return sum;
+ sum += val/max*maxHeight*0.96;
+ return {
+ val: val,
+ point: sum
+ };
});
return [week, points];
@@ -187,6 +198,7 @@ var StackedAreaChart = React.createClass({
.reverse()
.value();
+ // [item, [{val, point}, ...]]
var paths = _.map(top, function(item, i) {
var itemPoints = _.map(points, function(pair) {
return pair[1][i];
@@ -194,62 +206,63 @@ var StackedAreaChart = React.createClass({
return[item, itemPoints];
});
- var colors = {};
var areas = _.map(paths, function(pair, i) {
- var item = pair[0], path = pair[1];
- if (item !== null) {
- colors[item] = Colors[i];
- }
+ var item = pair[0],
+ path = pair[1];
+
return (