Файл: templates/backend/default/assets/plugins/jquery-ricksaw-chart/js/Rickshaw.Graph.Renderer.Multi.js
Строк: 119
<?php
Rickshaw.namespace('Rickshaw.Graph.Renderer.Multi');
Rickshaw.Graph.Renderer.Multi = Rickshaw.Class.create( Rickshaw.Graph.Renderer, {
name: 'multi',
initialize: function($super, args) {
$super(args);
},
defaults: function($super) {
return Rickshaw.extend( $super(), {
unstack: true,
fill: false,
stroke: true
} );
},
domain: function($super) {
this.graph.stackData();
var domains = [];
var groups = this._groups();
this._stack(groups);
groups.forEach( function(group) {
var data = group.series
.filter( function(s) { return !s.disabled } )
.map( function(s) { return s.stack });
if (!data.length) return;
var domain = $super(data);
domains.push(domain);
});
var xMin = d3.min(domains.map( function(d) { return d.x[0] } ));
var xMax = d3.max(domains.map( function(d) { return d.x[1] } ));
var yMin = d3.min(domains.map( function(d) { return d.y[0] } ));
var yMax = d3.max(domains.map( function(d) { return d.y[1] } ));
return { x: [xMin, xMax], y: [yMin, yMax] };
},
_groups: function() {
var graph = this.graph;
var renderGroups = {};
graph.series.forEach( function(series) {
if (series.disabled) return;
if (!renderGroups[series.renderer]) {
var ns = "http://www.w3.org/2000/svg";
var vis = document.createElementNS(ns, 'g');
graph.vis[0][0].appendChild(vis);
var renderer = graph._renderers[series.renderer];
renderGroups[series.renderer] = {
renderer: renderer,
series: [],
vis: d3.select(vis)
};
}
renderGroups[series.renderer].series.push(series);
}, this);
var groups = [];
Object.keys(renderGroups).forEach( function(key) {
var group = renderGroups[key];
groups.push(group);
});
return groups;
},
_stack: function(groups) {
groups.forEach( function(group) {
var series = group.series
.filter( function(series) { return !series.disabled } );
var data = series
.map( function(series) { return series.stack } );
if (!group.renderer.unstack) {
var layout = d3.layout.stack();
var stackedData = Rickshaw.clone(layout(data));
series.forEach( function(series, index) {
series._stack = Rickshaw.clone(stackedData[index]);
});
}
}, this );
return groups;
},
render: function() {
this.graph.series.forEach( function(series) {
if (!series.renderer) {
throw new Error("Each series needs a renderer for graph 'multi' renderer");
}
});
this.graph.vis.selectAll('*').remove();
var groups = this._groups();
groups = this._stack(groups);
groups.forEach( function(group) {
var series = group.series
.filter( function(series) { return !series.disabled } );
group.renderer.render({ series: series, vis: group.vis });
series.forEach(function(s) { s.stack = s._stack || s.stack || s.data; });
});
}
} );
?>