File: charts/js/NumericAxis.js
- /**
- * Provides functionality for drawing a numeric axis for use with a chart.
- *
- * @module charts
- * @submodule axis-numeric
- */
- var Y_Lang = Y.Lang;
- /**
- * NumericAxis draws a numeric axis.
- *
- * @class NumericAxis
- * @constructor
- * @extends Axis
- * @uses NumericImpl
- * @param {Object} config (optional) Configuration parameters.
- * @submodule axis-numeric
- */
- Y.NumericAxis = Y.Base.create("numericAxis", Y.Axis, [Y.NumericImpl], {
- /**
- * 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.
- * @param {Number} l Total number of labels.
- * @return String
- * @private
- */
- _getLabelByIndex: function(i, l)
- {
- var min = this.get("minimum"),
- max = this.get("maximum"),
- increm = (max - min)/(l-1),
- label,
- roundingMethod = this.get("roundingMethod");
- l -= 1;
- //respect the min and max. calculate all other labels.
- if(i === 0)
- {
- label = min;
- }
- else if(i === l)
- {
- label = max;
- }
- else
- {
- label = (i * increm);
- if(roundingMethod === "niceNumber")
- {
- label = this._roundToNearest(label, increm);
- }
- label += min;
- }
- return parseFloat(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 dataValue,
- i,
- points = [],
- values = [],
- point,
- isVertical = staticCoord === "x",
- offset = isVertical ? layoutLength + edgeOffset : edgeOffset;
- dataValues = dataValues || this._getDataValuesByCount(count, min, max);
- for(i = 0; i < count; i = i + 1)
- {
- dataValue = parseFloat(dataValues[i]);
- if(dataValue <= max && dataValue >= min)
- {
- point = {};
- point[staticCoord] = constantVal;
- point[dynamicCoord] = this._getCoordFromValue(
- min,
- max,
- layoutLength,
- dataValue,
- offset,
- isVertical
- );
- points.push(point);
- values.push(dataValue);
- }
- }
- return {
- points: points,
- values: values
- };
- },
-
- /**
- * Checks to see if data extends beyond the range of the axis. If so,
- * that data will need to be hidden. This method is internal, temporary and subject
- * to removal in the future.
- *
- * @method _hasDataOverflow
- * @protected
- * @return Boolean
- */
- _hasDataOverflow: function()
- {
- var roundingMethod,
- min,
- max;
- if(this.get("setMin") || this.get("setMax"))
- {
- return true;
- }
- roundingMethod = this.get("roundingMethod");
- min = this._actualMinimum;
- max = this._actualMaximum;
- if(Y_Lang.isNumber(roundingMethod) &&
- ((Y_Lang.isNumber(max) && max > this._dataMaximum) || (Y_Lang.isNumber(min) && min < this._dataMinimum)))
- {
- return true;
- }
- return false;
- }
- });
-
-
-