Вход Регистрация
Файл: templates/backend/default/assets/plugins/jquery-ricksaw-chart/js/Rickshaw.Graph.Renderer.Bar.js
Строк: 125
<?php
Rickshaw
.namespace('Rickshaw.Graph.Renderer.Bar');

Rickshaw.Graph.Renderer.Bar = Rickshaw.Class.create( Rickshaw.Graph.Renderer, {

    
name: 'bar',

    
defaults: function($super) {

        var 
defaults = Rickshaw.extend( $super(), {
            
gapSize: 0.05,
            
unstack: false
        
} );

        
delete defaults.tension;
        return 
defaults;
    },

    
initialize: function($super, args) {
        
args = args || {};
        
this.gapSize = args.gapSize || this.gapSize;
        
$super(args);
    },

    
domain: function($super) {

        var 
domain = $super();

        var 
frequentInterval = this._frequentInterval(this.graph.stackedData.slice(-1).shift());
        
domain.x[1] += Number(frequentInterval.magnitude);

        return 
domain;
    },

    
barWidth: function(series) {

        var 
frequentInterval = this._frequentInterval(series.stack);
        var 
barWidth = this.graph.x(series.stack[0].x + frequentInterval.magnitude * (1 - this.gapSize)); 

        return 
barWidth;
    },

    
render: function(args) {

        
args = args || {};

        var 
graph = this.graph;
        var 
series = args.series || graph.series;

        var 
vis = args.vis || graph.vis;
        
vis.selectAll('*').remove();

        var 
barWidth = this.barWidth(series.active()[0]);
        var 
barXOffset = 0;

        var 
activeSeriesCount = series.filter( function(s) { return !s.disabled; } ).length;
        var 
seriesBarWidth = this.unstack ? barWidth / activeSeriesCount : barWidth;

        var 
transform = function(d) {
            
// add a matrix transform for negative values
            
var matrix = [ 1, 0, 0, (d.y < 0 ? -1 : 1), 0, (d.y < 0 ? graph.y.magnitude(Math.abs(d.y)) * 2 : 0) ];
            return 
"matrix(" + matrix.join(',') + ")";
        };

        
series.forEach( function(series) {

            if (
series.disabled) return;

            var 
barWidth = this.barWidth(series);

            var 
nodes = vis.selectAll("path")
                .
data(series.stack.filter( function(d) { return d.y !== null } ))
                .
enter().append("svg:rect")
                .
attr("x", function(d) { return graph.x(d.x) + barXOffset })
                .
attr("y", function(d) { return (graph.y(d.y0 + Math.abs(d.y))) * (d.y < 0 ? -1 : 1 ) })
                .
attr("width", seriesBarWidth)
                .
attr("height", function(d) { return graph.y.magnitude(Math.abs(d.y)) })
                .
attr("transform", transform);

            Array.
prototype.forEach.call(nodes[0], function(n) {
                
n.setAttribute('fill', series.color);
            } );

            if (
this.unstack) barXOffset += seriesBarWidth;

        }, 
this );
    },

    
_frequentInterval: function(data) {

        var 
intervalCounts = {};

        for (var 
i = 0; i < data.length - 1; i++) {
            var 
interval = data[i + 1].x - data[i].x;
            
intervalCounts[interval] = intervalCounts[interval] || 0;
            
intervalCounts[interval]++;
        }

        var 
frequentInterval = { count: 0, magnitude: 1 };

        
Rickshaw.keys(intervalCounts).forEach( function(i) {
            if (
frequentInterval.count < intervalCounts[i]) {
                
frequentInterval = {
                    
count: intervalCounts[i],
                    
magnitude: i
                
};
            }
        } );

        return 
frequentInterval;
    }
} );
?>
Онлайн: 2
Реклама