Version 3.18.1

APIs

  • Begin typing in the search box above to see results.
Show:

File: charts/js/TimeImpl.js

 /**
 * Provides functionality for the handling of time axis data for a chart.
 *
 * @module charts
 * @submodule axis-time-base
 */
 var Y_Lang = Y.Lang;
 
 /**
 * TimeImpl contains logic for time data. TimeImpl is used by the following classes:
 * <ul>
 * <li>{{#crossLink "TimeAxisBase"}}{{/crossLink}}</li>
 * <li>{{#crossLink "TimeAxis"}}{{/crossLink}}</li>
 * </ul>
 *
 * @class TimeImpl
 * @constructor
 * @submodule axis-time-base
 */
 function TimeImpl()
 {
 }
 
 TimeImpl.NAME = "timeImpl";
 
 TimeImpl.ATTRS =
 {
 /**
 * Method used for formatting a label. This attribute allows for the default label formatting method to overridden.
 * The method use would need to implement the arguments below and return a `String` or an `HTMLElement`. The default
 * implementation of the method returns a `String`. The output of this method will be rendered to the DOM using
 * `appendChild`. If you override the `labelFunction` method and return an html string, you will also need to override
 * the Axis' `appendLabelFunction` to accept html as a `String`.
 * <dl>
 * <dt>val</dt><dd>Label to be formatted. (`String`)</dd>
 * <dt>format</dt><dd>STRFTime string used to format the label. (optional)</dd>
 * </dl>
 *
 * @attribute labelFunction
 * @type Function
 */
 
 /**
 * Pattern used by the `labelFunction` to format a label.
 *
 * @attribute labelFormat
 * @type String
 */
 labelFormat: {
 value: "%b %d, %y"
 }
 };
 
 TimeImpl.prototype = {
 /**
 * Type of data used in `Data`.
 *
 * @property _type
 * @readOnly
 * @private
 */
 _type: "time",
 
 /**
 * Getter method for maximum attribute.
 *
 * @method _maximumGetter
 * @return Number
 * @private
 */
 _maximumGetter: function ()
 {
 var max = this._getNumber(this._setMaximum);
 if(!Y_Lang.isNumber(max))
 {
 max = this._getNumber(this.get("dataMaximum"));
 }
 return parseFloat(max);
 },
 
 /**
 * Setter method for maximum attribute.
 *
 * @method _maximumSetter
 * @param {Object} value
 * @private
 */
 _maximumSetter: function (value)
 {
 this._setMaximum = this._getNumber(value);
 return value;
 },
 
 /**
 * Getter method for minimum attribute.
 *
 * @method _minimumGetter
 * @return Number
 * @private
 */
 _minimumGetter: function ()
 {
 var min = this._getNumber(this._setMinimum);
 if(!Y_Lang.isNumber(min))
 {
 min = this._getNumber(this.get("dataMinimum"));
 }
 return parseFloat(min);
 },
 
 /**
 * Setter method for minimum attribute.
 *
 * @method _minimumSetter
 * @param {Object} value
 * @private
 */
 _minimumSetter: function (value)
 {
 this._setMinimum = this._getNumber(value);
 return value;
 },
 
 /**
 * Indicates whether or not the maximum attribute has been explicitly set.
 *
 * @method _getSetMax
 * @return Boolean
 * @private
 */
 _getSetMax: function()
 {
 var max = this._getNumber(this._setMaximum);
 return (Y_Lang.isNumber(max));
 },
 
 /**
 * Indicates whether or not the minimum attribute has been explicitly set.
 *
 * @method _getSetMin
 * @return Boolean
 * @private
 */
 _getSetMin: function()
 {
 var min = this._getNumber(this._setMinimum);
 return (Y_Lang.isNumber(min));
 },
 
 /**
 * Formats a label based on the axis type and optionally specified format.
 *
 * @method formatLabel
 * @param {Object} value
 * @param {Object} format Pattern used to format the value.
 * @return String
 */
 formatLabel: function(val, format)
 {
 val = Y.DataType.Date.parse(val);
 if(format)
 {
 return Y.DataType.Date.format(val, {format:format});
 }
 return val;
 },
 
 /**
 * Constant used to generate unique id.
 *
 * @property GUID
 * @type String
 * @private
 */
 GUID: "yuitimeaxis",
 
 /**
 * Type of data used in `Axis`.
 *
 * @property _dataType
 * @readOnly
 * @private
 */
 _dataType: "time",
 
 /**
 * Gets an array of values based on a key.
 *
 * @method _getKeyArray
 * @param {String} key Value key associated with the data array.
 * @param {Array} data Array in which the data resides.
 * @return Array
 * @private
 */
 _getKeyArray: function(key, data)
 {
 var obj,
 keyArray = [],
 i = 0,
 val,
 len = data.length;
 for(; i < len; ++i)
 {
 obj = data[i][key];
 if(Y_Lang.isDate(obj))
 {
 val = obj.valueOf();
 }
 else
 {
 val = new Date(obj);
 if(Y_Lang.isDate(val))
 {
 val = val.valueOf();
 }
 else if(!Y_Lang.isNumber(obj))
 {
 if(Y_Lang.isNumber(parseFloat(obj)))
 {
 val = parseFloat(obj);
 }
 else
 {
 if(typeof obj !== "string")
 {
 obj = obj;
 }
 val = new Date(obj).valueOf();
 }
 }
 else
 {
 val = obj;
 }
 }
 keyArray[i] = val;
 }
 return keyArray;
 },
 
 /**
 * Calculates the maximum and minimum values for the `Axis`.
 *
 * @method _updateMinAndMax
 * @private
 */
 _updateMinAndMax: function()
 {
 var data = this.get("data"),
 max = 0,
 min = 0,
 len,
 num,
 i;
 if(data && data.length && data.length > 0)
 {
 len = data.length;
 max = min = data[0];
 if(len > 1)
 {
 for(i = 1; i < len; i++)
 {
 num = data[i];
 if(isNaN(num))
 {
 continue;
 }
 max = Math.max(num, max);
 min = Math.min(num, min);
 }
 }
 }
 this._dataMaximum = max;
 this._dataMinimum = min;
 },
 
 /**
 * Returns a coordinate corresponding to a data values.
 *
 * @method _getCoordFromValue
 * @param {Number} min The minimum for the axis.
 * @param {Number} max The maximum for the axis.
 * @param {Number} length The distance that the axis spans.
 * @param {Number} dataValue A value used to ascertain the coordinate.
 * @param {Number} offset Value in which to offset the coordinates.
 * @param {Boolean} reverse Indicates whether the coordinates should start from
 * the end of an axis. Only used in the numeric implementation.
 * @return Number
 * @private
 */
 _getCoordFromValue: function(min, max, length, dataValue, offset)
 {
 var range,
 multiplier,
 valuecoord,
 isNumber = Y_Lang.isNumber;
 dataValue = this._getNumber(dataValue);
 if(isNumber(dataValue))
 {
 range = max - min;
 multiplier = length/range;
 valuecoord = (dataValue - min) * multiplier;
 valuecoord = offset + valuecoord;
 }
 else
 {
 valuecoord = NaN;
 }
 return valuecoord;
 },
 
 /**
 * Parses value into a number.
 *
 * @method _getNumber
 * @param val {Object} Value to parse into a number
 * @return Number
 * @private
 */
 _getNumber: function(val)
 {
 if(Y_Lang.isDate(val))
 {
 val = val.valueOf();
 }
 else if(!Y_Lang.isNumber(val) && val)
 {
 val = new Date(val).valueOf();
 }
 
 return val;
 }
 };
 
 Y.TimeImpl = TimeImpl;
 
 
 

AltStyle によって変換されたページ (->オリジナル) /