function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } /** * @fileOverview 时间数据作为分类类型 * @author dxq613@gmail.com */ var Base = require('./base'); var Category = require('./category'); var fecha = require('fecha'); var catAuto = require('./auto/cat'); var TimeUtil = require('./time-util'); var each = require('@antv/util/lib/each'); var isNumber = require('@antv/util/lib/type/is-number'); var isObject = require('@antv/util/lib/type/is-object'); var isString = require('@antv/util/lib/type/is-string'); /** * 度量的构造函数 * @class Scale.TimeCategory */ var TimeCategory = /*#__PURE__*/function (_Category) { _inheritsLoose(TimeCategory, _Category); function TimeCategory() { return _Category.apply(this, arguments) || this; } var _proto = TimeCategory.prototype; _proto._initDefaultCfg = function _initDefaultCfg() { _Category.prototype._initDefaultCfg.call(this); this.type = 'timeCat'; /** * 是否需要排序,默认进行排序 * @type {Boolean} */ this.sortable = true; this.tickCount = 5; /** * 时间格式化 * @type {String} */ this.mask = 'YYYY-MM-DD'; }; _proto.init = function init() { var self = this; var values = this.values; // 针对时间分类类型,会将时间统一转换为时间戳 each(values, function (v, i) { values[i] = self._toTimeStamp(v); }); if (this.sortable) { // 允许排序 values.sort(function (v1, v2) { return v1 - v2; }); } if (!self.ticks) { self.ticks = this.calculateTicks(); } } /** * 计算 ticks * @return {array} 返回 ticks 数组 */ ; _proto.calculateTicks = function calculateTicks() { var self = this; var count = self.tickCount; var ticks; if (count) { var temp = catAuto({ maxCount: count, data: self.values, isRounding: self.isRounding }); ticks = temp.ticks; } else { ticks = self.values; } return ticks; } /** * @override */ ; _proto.translate = function translate(value) { value = this._toTimeStamp(value); var index = this.values.indexOf(value); if (index === -1) { if (isNumber(value) && value < this.values.length) { index = value; } else { index = NaN; } } return index; } /** * @override */ ; _proto.scale = function scale(value) { var rangeMin = this.rangeMin(); var rangeMax = this.rangeMax(); var index = this.translate(value); var percent; if (this.values.length === 1 || isNaN(index)) { // is index is NAN should not be set as 0 percent = index; } else if (index > -1) { percent = index / (this.values.length - 1); } else { percent = 0; } return rangeMin + percent * (rangeMax - rangeMin); } /** * @override */ ; _proto.getText = function getText(value) { var result = ''; var index = this.translate(value); if (index > -1) { result = this.values[index]; } else { result = value; } var formatter = this.formatter; result = parseInt(result, 10); result = formatter ? formatter(result) : fecha.format(result, this.mask); return result; } /** * @override */ ; _proto.getTicks = function getTicks() { var self = this; var ticks = this.ticks; var rst = []; each(ticks, function (tick) { var obj; if (isObject(tick)) { obj = tick; } else { obj = { text: isString(tick) ? tick : self.getText(tick), value: self.scale(tick), tickValue: tick // 用于坐标轴上文本动画时确定前后帧的对应关系 }; } rst.push(obj); }); return rst; } // 将时间转换为时间戳 ; _proto._toTimeStamp = function _toTimeStamp(value) { return TimeUtil.toTimeStamp(value); }; return TimeCategory; }(Category); Base.TimeCat = TimeCategory; module.exports = TimeCategory;