195 lines
3.9 KiB
JavaScript
195 lines
3.9 KiB
JavaScript
var mix = require('@antv/util/lib/mix');
|
||
|
||
var each = require('@antv/util/lib/each');
|
||
|
||
var isObject = require('@antv/util/lib/type/is-object');
|
||
|
||
var isNil = require('@antv/util/lib/type/is-nil');
|
||
|
||
var Scale = /*#__PURE__*/function () {
|
||
var _proto = Scale.prototype;
|
||
|
||
_proto._initDefaultCfg = function _initDefaultCfg() {
|
||
this.type = 'base';
|
||
/**
|
||
* 格式化函数,输出文本或者tick时的格式化函数
|
||
* @type {Function}
|
||
*/
|
||
|
||
this.formatter = null;
|
||
/**
|
||
* 输出的值域
|
||
* @type {Array}
|
||
*/
|
||
|
||
this.range = [0, 1];
|
||
/**
|
||
* 度量的标记
|
||
* @type {Array}
|
||
*/
|
||
|
||
this.ticks = null;
|
||
/**
|
||
* 参与度量计算的值,可选项
|
||
* @type {Array}
|
||
*/
|
||
|
||
this.values = [];
|
||
};
|
||
|
||
function Scale(cfg) {
|
||
this._initDefaultCfg();
|
||
|
||
mix(this, cfg);
|
||
this.init();
|
||
}
|
||
/**
|
||
* 度量初始化
|
||
* @protected
|
||
*/
|
||
|
||
|
||
_proto.init = function init() {}
|
||
/**
|
||
* 获取该度量的ticks,返回的是多个对象,
|
||
* - text: tick 的文本
|
||
* - value: 对应的度量转换后的值
|
||
* <code>
|
||
* [
|
||
* {text: 0,value:0}
|
||
* {text: 1,value:0.2}
|
||
* {text: 2,value:0.4}
|
||
* {text: 3,value:0.6}
|
||
* {text: 4,value:0.8}
|
||
* {text: 5,value:1}
|
||
* ]
|
||
* </code>
|
||
* @param {Number} count 输出tick的个数的近似值,默认是 10
|
||
* @return {Array} 返回 ticks 数组
|
||
*/
|
||
;
|
||
|
||
_proto.getTicks = function getTicks() {
|
||
var self = this;
|
||
var ticks = self.ticks;
|
||
var rst = [];
|
||
each(ticks, function (tick) {
|
||
var obj;
|
||
|
||
if (isObject(tick)) {
|
||
obj = tick;
|
||
} else {
|
||
obj = {
|
||
text: self.getText(tick),
|
||
tickValue: tick,
|
||
value: self.scale(tick)
|
||
};
|
||
}
|
||
|
||
rst.push(obj);
|
||
});
|
||
return rst;
|
||
}
|
||
/**
|
||
* 获取格式化后的文本
|
||
* @param {*} value 输入的数据
|
||
* @param {*} key 字段的 key
|
||
* @return {String} 格式化的文本
|
||
*/
|
||
;
|
||
|
||
_proto.getText = function getText(value, key) {
|
||
var formatter = this.formatter;
|
||
value = formatter ? formatter(value, key) : value;
|
||
|
||
if (isNil(value) || !value.toString) {
|
||
value = '';
|
||
}
|
||
|
||
return value.toString();
|
||
}
|
||
/**
|
||
* 输出的值域最小值
|
||
* @protected
|
||
* @return {Number} 返回最小的值
|
||
*/
|
||
;
|
||
|
||
_proto.rangeMin = function rangeMin() {
|
||
return this.range[0];
|
||
}
|
||
/**
|
||
* 输出的值域最大值
|
||
* @protected
|
||
* @return {Number} 返回最大的值
|
||
*/
|
||
;
|
||
|
||
_proto.rangeMax = function rangeMax() {
|
||
var range = this.range;
|
||
return range[range.length - 1];
|
||
}
|
||
/**
|
||
* 度量转换后的结果,翻转回输入域
|
||
* @param {Number} value 需要翻转的数值
|
||
* @return {*} 度量的输入值
|
||
*/
|
||
;
|
||
|
||
_proto.invert = function invert(value) {
|
||
return value;
|
||
}
|
||
/**
|
||
* 将传入的值从非数值转换成数值格式,如分类字符串、时间字符串等
|
||
* @param {*} value 传入的值
|
||
* @return {Number} 转换的值
|
||
*/
|
||
;
|
||
|
||
_proto.translate = function translate(value) {
|
||
return value;
|
||
}
|
||
/**
|
||
* 进行度量转换
|
||
* @param {*} value 输入值
|
||
* @return {Number} 输出值,在设定的输出值域之间,默认[0,1]
|
||
*/
|
||
;
|
||
|
||
_proto.scale = function scale(value) {
|
||
return value;
|
||
}
|
||
/**
|
||
* 克隆一个新的scale,拥有跟当前scale相同的输入域、输出域等
|
||
* @return {Scale} 克隆的度量
|
||
*/
|
||
;
|
||
|
||
_proto.clone = function clone() {
|
||
var self = this;
|
||
var constr = self.constructor;
|
||
var cfg = {};
|
||
each(self, function (v, k) {
|
||
cfg[k] = self[k];
|
||
});
|
||
return new constr(cfg);
|
||
}
|
||
/**
|
||
* 更改度量的属性信息
|
||
* @param {Object} info 属性信息
|
||
* @chainable
|
||
* @return {Scale} 返回自身的引用
|
||
*/
|
||
;
|
||
|
||
_proto.change = function change(info) {
|
||
this.ticks = null;
|
||
mix(this, info);
|
||
this.init();
|
||
return this;
|
||
};
|
||
|
||
return Scale;
|
||
}();
|
||
|
||
module.exports = Scale; |