%PDF- %PDF-
Direktori : /home/riacommer/public_html/admin/vendor/rickshaw/src/js/ |
Current File : /home/riacommer/public_html/admin/vendor/rickshaw/src/js/Rickshaw.Graph.Renderer.Multi.js |
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 } ); }, configure: function($super, args) { args = args || {}; this.config = args; $super(args); }, 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 = null; if (group.renderer && group.renderer.domain) { domain = group.renderer.domain(data); } else { 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]; var config = {}; var defaults = [ this.defaults(), renderer.defaults(), this.config, this.graph ]; defaults.forEach(function(d) { Rickshaw.extend(config, d) }); renderer.configure(config); 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 } ); series.active = function() { return series }; group.renderer.render({ series: series, vis: group.vis }); series.forEach(function(s) { s.stack = s._stack || s.stack || s.data; }); }); } } );