SAC dots
This commit is contained in:
		
							parent
							
								
									05ebd2e417
								
							
						
					
					
						commit
						0be36128cd
					
				@ -4,6 +4,22 @@ var StackedAreaChart = React.createClass({
 | 
			
		||||
    numElements: 10,
 | 
			
		||||
    maxWeeks: 30,
 | 
			
		||||
    height: 350,
 | 
			
		||||
    words: {
 | 
			
		||||
        items: {
 | 
			
		||||
            repo: 'repositories',
 | 
			
		||||
            team: 'teams',
 | 
			
		||||
            user: 'contributors'
 | 
			
		||||
        },
 | 
			
		||||
        item: {
 | 
			
		||||
            repo: 'repository',
 | 
			
		||||
            team: 'team'
 | 
			
		||||
        },
 | 
			
		||||
        actions: {
 | 
			
		||||
            repo: 'which were the most attended by',
 | 
			
		||||
            team: 'which were the most active working on',
 | 
			
		||||
            user: 'which were the most active working on'
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getInitialState: function() {
 | 
			
		||||
        return {
 | 
			
		||||
@ -111,12 +127,10 @@ var StackedAreaChart = React.createClass({
 | 
			
		||||
 | 
			
		||||
    buildPathD: function(points) {
 | 
			
		||||
        var maxWidth = this.state.canvasWidth,
 | 
			
		||||
            maxHeight = this.height,
 | 
			
		||||
            maxValue = this.state.max,
 | 
			
		||||
            len = points.length;
 | 
			
		||||
            maxHeight = this.height;
 | 
			
		||||
 | 
			
		||||
        var d = _.map(points, function(point, i) {
 | 
			
		||||
                return 'L'+ Math.floor(i/(len-1)*maxWidth) +','+ Math.floor(maxHeight - point);
 | 
			
		||||
        var d = _.map(this.buildDots(points), function(dot) {
 | 
			
		||||
                return 'L'+ dot[0] +','+ dot[1];
 | 
			
		||||
            });
 | 
			
		||||
        d.unshift('M0,'+ maxHeight);
 | 
			
		||||
        d.push('L'+ maxWidth +','+ maxHeight +'Z');
 | 
			
		||||
@ -124,6 +138,17 @@ var StackedAreaChart = React.createClass({
 | 
			
		||||
        return d.join(' ');
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    buildDots: function(points) {
 | 
			
		||||
        var maxWidth = this.state.canvasWidth,
 | 
			
		||||
            maxHeight = this.height,
 | 
			
		||||
            maxValue = this.state.max,
 | 
			
		||||
            len = points.length;
 | 
			
		||||
 | 
			
		||||
        return _.map(points, function(point, i) {
 | 
			
		||||
            return [Math.floor(i/(len-1)*maxWidth), Math.floor(maxHeight - point)];
 | 
			
		||||
        });
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    render: function() {
 | 
			
		||||
        var maxWidth = this.state.canvasWidth,
 | 
			
		||||
            maxHeight = this.height,
 | 
			
		||||
@ -138,7 +163,7 @@ var StackedAreaChart = React.createClass({
 | 
			
		||||
 | 
			
		||||
                var sum = 0;
 | 
			
		||||
                var points = _.map(values, function(val) {
 | 
			
		||||
                    sum += Math.floor(val/max*maxHeight);
 | 
			
		||||
                    sum += Math.floor(val/max*maxHeight*0.96);
 | 
			
		||||
                    return sum;
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
@ -171,22 +196,28 @@ var StackedAreaChart = React.createClass({
 | 
			
		||||
            );
 | 
			
		||||
        }.bind(this));
 | 
			
		||||
 | 
			
		||||
        var words = {
 | 
			
		||||
                items: {
 | 
			
		||||
                    repo: 'repositories',
 | 
			
		||||
                    team: 'teams',
 | 
			
		||||
                    user: 'contributors'
 | 
			
		||||
                },
 | 
			
		||||
                item: {
 | 
			
		||||
                    repo: 'repository',
 | 
			
		||||
                    team: 'team'
 | 
			
		||||
                },
 | 
			
		||||
                actions: {
 | 
			
		||||
                    repo: 'which were the most attended by',
 | 
			
		||||
                    team: 'which were the most active working on',
 | 
			
		||||
                    user: 'which were the most active working on'
 | 
			
		||||
        var dots = _.map(paths, function(pair, i) {
 | 
			
		||||
            var item = pair[0], path = pair[1];
 | 
			
		||||
            var dots = this.buildDots(path);
 | 
			
		||||
            var lastY = 0;
 | 
			
		||||
            var renderDot = function(dot, j) {
 | 
			
		||||
                if (lastY === dot[1]) {
 | 
			
		||||
                    return null;
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
                lastY = dot[1];
 | 
			
		||||
                return (
 | 
			
		||||
                    <Dot key={'dot-'+ i +'-'+ j}
 | 
			
		||||
                        item={item}
 | 
			
		||||
                        value={100}
 | 
			
		||||
                        x={dot[0]}
 | 
			
		||||
                        y={dot[1]} />
 | 
			
		||||
                );
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            return dots.map(renderDot);
 | 
			
		||||
        }.bind(this));
 | 
			
		||||
 | 
			
		||||
        var words = this.words,
 | 
			
		||||
            who = this.getParams().repo || this.getParams().team || this.getParams().user || this.getParams().org;
 | 
			
		||||
 | 
			
		||||
        var params = Object.keys(this.getParams());
 | 
			
		||||
@ -212,7 +243,8 @@ var StackedAreaChart = React.createClass({
 | 
			
		||||
                <svg ref="svg" className="sachart" key="sachart-svg"
 | 
			
		||||
                    width="100%" height={maxHeight}
 | 
			
		||||
                    viewBox={"0 0 "+ (this.state.canvasWidth || 0) + " "+ maxHeight}>
 | 
			
		||||
                    {areas.reverse()}
 | 
			
		||||
                    <g ref="areas">{areas.reverse()}</g>
 | 
			
		||||
                    <g ref="dots">{dots}</g>
 | 
			
		||||
                </svg>
 | 
			
		||||
                <ul className="legend">
 | 
			
		||||
                    {_.pairs(colors).map(function(pair){
 | 
			
		||||
@ -256,3 +288,44 @@ var StackedArea = React.createClass({
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
var Dot = React.createClass({
 | 
			
		||||
    mixins: [ChartAnimationMixin],
 | 
			
		||||
 | 
			
		||||
    radius: 3,
 | 
			
		||||
 | 
			
		||||
    getInitialState: function() {
 | 
			
		||||
        return {};
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    componentWillReceiveProps: function(newProps) {
 | 
			
		||||
        this.setState({
 | 
			
		||||
            lastY: this.props.y || newProps.y
 | 
			
		||||
        }, this.animateAll);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    animateAll: function() {
 | 
			
		||||
        this.clearAnimations(this.refs.dot);
 | 
			
		||||
        this.animate(this.refs.dot, 'cy', this.state.lastY, this.props.y);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    render: function() {
 | 
			
		||||
        return (
 | 
			
		||||
            <g>
 | 
			
		||||
                <circle ref="dot"
 | 
			
		||||
                    cx={this.props.x}
 | 
			
		||||
                    cy={this.state.lastY || this.props.y}
 | 
			
		||||
                    r={this.radius}
 | 
			
		||||
                    fill="rgba(255, 255, 255, .8)"
 | 
			
		||||
                    stroke="rgba(200, 200, 200, .5)"
 | 
			
		||||
                    strokeWidth="1" />
 | 
			
		||||
                <circle ref="trigger"
 | 
			
		||||
                    cx={this.props.x}
 | 
			
		||||
                    cy={this.state.lastY || this.props.y}
 | 
			
		||||
                    r={3*this.radius}
 | 
			
		||||
                    fill="transparent"
 | 
			
		||||
                    onMouseOver={function(){console.log("over dot")}} />
 | 
			
		||||
            </g>
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user