/**
* Provides functionality for drawing a category axis for use with a chart.
*
* @module charts
* @submodule axis-category
*/
var Y_Lang = Y.Lang;
/**
* CategoryAxis draws a category axis for a chart.
*
* @class CategoryAxis
* @constructor
* @extends Axis
* @uses CategoryImpl
* @param {Object} config (optional) Configuration parameters.
* @submodule axis-category
*/
Y.CategoryAxis = Y.Base.create("categoryAxis", Y.Axis, [Y.CategoryImpl], {
/**
* Returns a string corresponding to the first label on an
* axis.
*
* @method getMinimumValue
* @return String
*/
getMinimumValue: function()
{
var data = this.get("data"),
label = data[0];
return label;
},
/**
* Returns a string corresponding to the last label on an
* axis.
*
* @method getMaximumValue
* @return String
*/
getMaximumValue: function()
{
var data = this.get("data"),
len = data.length - 1,
label = data[len];
return label;
},
/**
* Calculates and returns a value based on the number of labels and the index of
* the current label.
*
* @method _getLabelByIndex
* @param {Number} i Index of the label.
* @return String
* @private
*/
_getLabelByIndex: function(i)
{
var label,
data = this.get("data");
label = data[i];
return label;
},
/**
* Returns an object literal containing and array of label values and an array of points.
*
* @method _getLabelData
* @param {Object} startPoint An object containing x and y values.
* @param {Number} edgeOffset Distance to offset coordinates.
* @param {Number} layoutLength Distance that the axis spans.
* @param {Number} count Number of labels.
* @param {String} direction Indicates whether the axis is horizontal or vertical.
* @param {Array} Array containing values for axis labels.
* @return Array
* @private
*/
_getLabelData: function(constantVal, staticCoord, dynamicCoord, min, max, edgeOffset, layoutLength, count, dataValues)
{
var labelValue,
i,
points = [],
values = [],
point,
labelIndex,
data = this.get("data"),
indexMap = new Map(),
offset = edgeOffset;
dataValues = dataValues || data;
for(i = 0; i < count; i = i + 1)
{
labelValue = dataValues[i];
labelIndex = Y.Array.indexOf(data, labelValue);
if(indexMap.has(labelValue))
{
labelIndex = Y.Array.indexOf(data, labelValue, indexMap.get(labelValue) + 1);
}
indexMap.set(labelValue, labelIndex);
if(Y_Lang.isNumber(labelIndex) && labelIndex > -1)
{
point = {};
point[staticCoord] = constantVal;
point[dynamicCoord] = this._getCoordFromValue(
min,
max,
layoutLength,
labelIndex,
offset
);
points.push(point);
values.push(labelValue);
}
}
return {
points: points,
values: values
};
}
});