CartesianGraph.js revision bedbb8636c0caf8113075125e9179a82f2f35c75
function CartesianGraph(config)
{
CartesianGraph.superclass.constructor.apply(this, arguments);
}
CartesianGraph.NAME = "cartesianGraph";
CartesianGraph.ATTRS = {
seriesCollection: {
lazyAdd: false,
getter: function()
{
return this._seriesCollection;
},
setter: function(val)
{
this._parseSeriesCollection(val);
return this._seriesCollection;
}
},
parent: {
value: null
}
};
Y.extend(CartesianGraph, Y.Base, {
/**
* @private
* @description Collection of series to be displayed in the graph.
*/
_seriesCollection: null,
/**
* Hash of arrays containing series mapped to a series type.
*/
seriesTypes: null,
/**
* @private
* @description Parses series instances to be displayed in the graph.
* @param {Array} Collection of series instances or object literals containing necessary properties for creating a series instance.
*/
_parseSeriesCollection: function(val)
{
var len = val.length,
i = 0,
series;
if(!val)
{
return;
}
if(!this._seriesCollection)
{
this._seriesCollection = [];
}
if(!this.seriesTypes)
{
this.seriesTypes = [];
}
for(; i < len; ++i)
{
series = val[i];
if(!(series instanceof Y.CartesianSeries))
{
this._createSeries(series);
continue;
}
this._addSeries(series);
}
len = this._seriesCollection.length;
for(i = 0; i < len; ++i)
{
this._seriesCollection[i].render(this.get("parent"));
}
},
/**
* @private
* @description Adds a series to the graph.
* @param {CartesianSeries}
*/
_addSeries: function(series)
{
var type = series.get("type"),
seriesCollection = this._seriesCollection,
graphSeriesLength = seriesCollection.length,
seriesTypes = this.seriesTypes,
typeSeriesCollection;
if(!series.get("graph"))
{
series.set("graph", this);
}
series.graphOrder = graphSeriesLength;
seriesCollection.push(series);
if(!seriesTypes.hasOwnProperty(type))
{
this.seriesTypes[type] = [];
}
typeSeriesCollection = this.seriesTypes[type];
series.set("order", typeSeriesCollection.length);
typeSeriesCollection.push(series);
this.fire("seriesAdded", series);
},
_createSeries: function(seriesData)
{
var type = seriesData.type,
seriesCollection = this._seriesCollection,
seriesTypes = this.seriesTypes,
typeSeriesCollection,
seriesType,
series;
seriesData.graph = this;
if(!seriesTypes.hasOwnProperty(type))
{
seriesTypes[type] = [];
}
typeSeriesCollection = seriesTypes[type];
seriesData.graph = this;
seriesData.order = typeSeriesCollection.length;
seriesType = this._getSeries(seriesData.type);
series = new seriesType(seriesData);
typeSeriesCollection.push(series);
seriesCollection.push(series);
},
/**
* @private
* @description Creates a series instance based on a specified type.
* @param {String} Indicates type of series instance to be created.
* @return {CartesianSeries} Series instance created.
*/
_getSeries: function(type)
{
var seriesClass;
switch(type)
{
case "line" :
seriesClass = Y.LineSeries;
break;
case "column" :
seriesClass = Y.ColumnSeries;
break;
case "bar" :
seriesClass = Y.BarSeries;
break;
case "area" :
seriesClass = Y.AreaSeries;
break;
case "candlestick" :
seriesClass = Y.CandlestickSeries;
break;
case "ohlc" :
seriesClass = Y.OHLCSeries;
break;
case "stackedarea" :
seriesClass = Y.StackedAreaSeries;
break;
case "stackedline" :
seriesClass = Y.StackedLineSeries;
break;
case "stackedcolumn" :
seriesClass = Y.StackedColumnSeries;
break;
case "stackedbar" :
seriesClass = Y.StackedBarSeries;
break;
case "markerseries" :
seriesClass = Y.MarkerSeries;
break;
case "spline" :
seriesClass = Y.SplineSeries;
break;
case "areaspline" :
seriesClass = Y.AreaSplineSeries;
break;
case "stackedspline" :
seriesClass = Y.StackedSplineSeries;
break;
case "stackedareaspline" :
seriesClass = Y.StackedAreaSplineSeries;
break;
case "stackedmarkerseries" :
seriesClass = Y.StackedMarkerSeries;
break;
default:
seriesClass = Y.CartesianSeries;
break;
}
return seriesClass;
}
});
Y.CartesianGraph = CartesianGraph;