155 lines
3.3 KiB
JavaScript
155 lines
3.3 KiB
JavaScript
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
|
||
|
||
/**
|
||
* @fileOverview The measurement of linear data scale function
|
||
* @author dxq613@gmail.com
|
||
*/
|
||
var fecha = require('fecha');
|
||
|
||
var each = require('@antv/util/lib/each');
|
||
|
||
var isNil = require('@antv/util/lib/type/is-nil');
|
||
|
||
var isString = require('@antv/util/lib/type/is-string');
|
||
|
||
var Base = require('./base');
|
||
|
||
var Linear = require('./linear');
|
||
|
||
var timeAuto = require('./auto/time');
|
||
|
||
var TimeUtil = require('./time-util');
|
||
/**
|
||
* 时间度量的构造函数
|
||
* @class Scale.Time
|
||
*/
|
||
|
||
|
||
var Time = /*#__PURE__*/function (_Linear) {
|
||
_inheritsLoose(Time, _Linear);
|
||
|
||
function Time() {
|
||
return _Linear.apply(this, arguments) || this;
|
||
}
|
||
|
||
var _proto = Time.prototype;
|
||
|
||
_proto._initDefaultCfg = function _initDefaultCfg() {
|
||
_Linear.prototype._initDefaultCfg.call(this);
|
||
|
||
this.type = 'time';
|
||
this.mask = 'YYYY-MM-DD';
|
||
}
|
||
/**
|
||
* @override
|
||
*/
|
||
;
|
||
|
||
_proto.init = function init() {
|
||
var self = this;
|
||
var values = self.values;
|
||
|
||
if (values && values.length) {
|
||
// 重新计算最大最小值
|
||
var timeStamps = [];
|
||
var min = Infinity; // 最小值
|
||
|
||
var secondMin = min; // 次小值
|
||
|
||
var max = 0; // 使用一个循环,计算min,max,secondMin
|
||
|
||
each(values, function (v) {
|
||
var timeStamp = self._toTimeStamp(v);
|
||
|
||
if (isNaN(timeStamp)) {
|
||
throw new TypeError("Invalid Time: " + v);
|
||
}
|
||
|
||
if (min > timeStamp) {
|
||
secondMin = min;
|
||
min = timeStamp;
|
||
} else if (secondMin > timeStamp) {
|
||
secondMin = timeStamp;
|
||
}
|
||
|
||
if (max < timeStamp) {
|
||
max = timeStamp;
|
||
}
|
||
|
||
timeStamps.push(timeStamp);
|
||
}); // 存在多个值时,设置最小间距
|
||
|
||
if (values.length > 1) {
|
||
self.minTickInterval = secondMin - min;
|
||
}
|
||
|
||
if (isNil(self.min) || self._toTimeStamp(self.min) > min) {
|
||
self.min = min;
|
||
}
|
||
|
||
if (isNil(self.max) || self._toTimeStamp(self.max) < max) {
|
||
self.max = max;
|
||
}
|
||
}
|
||
|
||
_Linear.prototype.init.call(this);
|
||
};
|
||
|
||
_proto.calculateTicks = function calculateTicks() {
|
||
var self = this;
|
||
var min = self.min;
|
||
var max = self.max;
|
||
var count = self.tickCount;
|
||
var interval = self.tickInterval;
|
||
var tmp = timeAuto({
|
||
min: min,
|
||
max: max,
|
||
minCount: count,
|
||
maxCount: count,
|
||
interval: interval,
|
||
minInterval: self.minTickInterval
|
||
});
|
||
return tmp.ticks;
|
||
}
|
||
/**
|
||
* @override
|
||
*/
|
||
;
|
||
|
||
_proto.getText = function getText(value) {
|
||
var formatter = this.formatter;
|
||
value = this.translate(value);
|
||
value = formatter ? formatter(value) : fecha.format(value, this.mask);
|
||
return value;
|
||
}
|
||
/**
|
||
* @override
|
||
*/
|
||
;
|
||
|
||
_proto.scale = function scale(value) {
|
||
if (isString(value)) {
|
||
value = this.translate(value);
|
||
}
|
||
|
||
return _Linear.prototype.scale.call(this, value);
|
||
}
|
||
/**
|
||
* @override
|
||
*/
|
||
;
|
||
|
||
_proto.translate = function translate(value) {
|
||
return this._toTimeStamp(value);
|
||
} // 将时间转换为时间戳
|
||
;
|
||
|
||
_proto._toTimeStamp = function _toTimeStamp(value) {
|
||
return TimeUtil.toTimeStamp(value);
|
||
};
|
||
|
||
return Time;
|
||
}(Linear);
|
||
|
||
Base.Time = Time;
|
||
module.exports = Time; |