NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/scale/lib/time-cat.js

199 lines
4.1 KiB
JavaScript
Raw Normal View History

2023-09-14 14:47:11 +08:00
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;