Version 3.18.1
Show:

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;
                }
            });