From 2495b3e539578f52532719d484a433d73eea3c87 Mon Sep 17 00:00:00 2001 From: Gregory Eremin Date: Mon, 16 Mar 2015 19:47:39 +0700 Subject: [PATCH] SAC interaction --- app/scripts/src/charts/stacked_area_chart.jsx | 63 ++++++++++++------- app/styles/charts.css | 39 +++++++++++- 2 files changed, 78 insertions(+), 24 deletions(-) diff --git a/app/scripts/src/charts/stacked_area_chart.jsx b/app/scripts/src/charts/stacked_area_chart.jsx index 750016d..d96cec8 100644 --- a/app/scripts/src/charts/stacked_area_chart.jsx +++ b/app/scripts/src/charts/stacked_area_chart.jsx @@ -68,6 +68,16 @@ var StackedAreaChart = React.createClass({ this.transitionTo(this.state.item, params); }, + handleFocusIn: function(i) { + var node = this.refs.container.getDOMNode(); + node.className = 'sachart-container focused item-'+ i; + }, + + handleFocusOut: function(i) { + var node = this.refs.container.getDOMNode(); + node.className = 'sachart-container'; + }, + handleNewData: function() { // Group commits by items var weeksList = _.chain(this.state.rawData) @@ -190,9 +200,11 @@ var StackedAreaChart = React.createClass({ } return ( + color={Colors[i]} + onMouseOver={this.handleFocusIn.bind(this, i)} + onMouseOut={this.handleFocusOut.bind(this, i)} /> ); }.bind(this)); @@ -207,7 +219,7 @@ var StackedAreaChart = React.createClass({ lastY = dot[1]; return ( @@ -224,8 +236,20 @@ var StackedAreaChart = React.createClass({ params.splice(params.indexOf('org'), 1); var subject = params[0]; + var renderLegend = function(pair, i){ + return ( +
  • +
    + {pair[0]} +
  • + ); + }.bind(this); + return ( -
    +
    This stacked area chart represents {words.items[this.state.item]} {words.actions[this.state.item]} {who} {words.item[subject]}
    @@ -247,14 +271,7 @@ var StackedAreaChart = React.createClass({ {dots}
      - {_.pairs(colors).map(function(pair){ - return ( -
    • -
      - {pair[0]} -
    • - ); - })} + {_.pairs(colors).map(renderLegend)}
    ); @@ -282,8 +299,11 @@ var StackedArea = React.createClass({ render: function() { return ( ); } @@ -292,7 +312,7 @@ var StackedArea = React.createClass({ var Dot = React.createClass({ mixins: [ChartAnimationMixin], - radius: 3, + radius: 12, getInitialState: function() { return {}; @@ -311,20 +331,17 @@ var Dot = React.createClass({ render: function() { return ( - + - + fill="rgba(255, 255, 255, .9)" /> + + {this.props.value} + ); } diff --git a/app/styles/charts.css b/app/styles/charts.css index e690817..30ed2be 100644 --- a/app/styles/charts.css +++ b/app/styles/charts.css @@ -35,6 +35,12 @@ float: left; padding: 0 20px 20px 0; } +.sachart-container .dot { + display: none; +} +.sachart-container .dot text { + font-size: 10px; +} .sachart-container .legend { display: block; margin: 0; @@ -51,9 +57,40 @@ } .sachart-container .legend li { display: inline-block; - margin: 10px 15px 0 0; + padding: 10px 15px 0 0; + cursor: default; } +.sachart-container.focused .path { + opacity: 0.03; +} + +.sachart-container.focused .label { + opacity: 0.3; +} + +.sachart-container.item-0 .path-0, .sachart-container.item-0 .label-0 { opacity: 1; } +.sachart-container.item-1 .path-1, .sachart-container.item-1 .label-1 { opacity: 1; } +.sachart-container.item-2 .path-2, .sachart-container.item-2 .label-2 { opacity: 1; } +.sachart-container.item-3 .path-3, .sachart-container.item-3 .label-3 { opacity: 1; } +.sachart-container.item-4 .path-4, .sachart-container.item-4 .label-4 { opacity: 1; } +.sachart-container.item-5 .path-5, .sachart-container.item-5 .label-5 { opacity: 1; } +.sachart-container.item-6 .path-6, .sachart-container.item-6 .label-6 { opacity: 1; } +.sachart-container.item-7 .path-7, .sachart-container.item-7 .label-7 { opacity: 1; } +.sachart-container.item-8 .path-8, .sachart-container.item-8 .label-8 { opacity: 1; } +.sachart-container.item-9 .path-9, .sachart-container.item-9 .label-9 { opacity: 1; } +.sachart-container.item-0 .dot-0 { display: inline; } +.sachart-container.item-1 .dot-1 { display: inline; } +.sachart-container.item-2 .dot-2 { display: inline; } +.sachart-container.item-3 .dot-3 { display: inline; } +.sachart-container.item-4 .dot-4 { display: inline; } +.sachart-container.item-5 .dot-5 { display: inline; } +.sachart-container.item-6 .dot-6 { display: inline; } +.sachart-container.item-7 .dot-7 { display: inline; } +.sachart-container.item-8 .dot-8 { display: inline; } +.sachart-container.item-9 .dot-9 { display: inline; } + + .selector { width: 100%; height: 22px;