192 lines
5.7 KiB
JavaScript
192 lines
5.7 KiB
JavaScript
function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
||
|
||
function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
||
|
||
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
||
|
||
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
|
||
|
||
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
||
|
||
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
|
||
|
||
var Util = require('../util');
|
||
|
||
var Helper = require('./util/helper');
|
||
|
||
var Component = require('../component');
|
||
|
||
var KEYWORDS = ['min', 'max', 'median', 'start', 'end'];
|
||
|
||
var Guide = /*#__PURE__*/function (_Component) {
|
||
_inheritsLoose(Guide, _Component);
|
||
|
||
var _super = _createSuper(Guide);
|
||
|
||
function Guide() {
|
||
return _Component.apply(this, arguments) || this;
|
||
}
|
||
|
||
var _proto = Guide.prototype;
|
||
|
||
_proto.getDefaultCfg = function getDefaultCfg() {
|
||
var cfg = _Component.prototype.getDefaultCfg.call(this);
|
||
|
||
return Util.mix({}, cfg, {
|
||
xScales: null,
|
||
yScales: null,
|
||
el: null
|
||
});
|
||
};
|
||
|
||
_proto.render = function render() {}
|
||
/**
|
||
* clear container
|
||
* @override
|
||
*/
|
||
;
|
||
|
||
_proto.clear = function clear() {
|
||
var self = this;
|
||
var el = self.get('el');
|
||
el && el.remove();
|
||
this.set('el', null);
|
||
};
|
||
|
||
_proto.destroy = function destroy() {
|
||
this.clear();
|
||
|
||
_Component.prototype.destroy.call(this);
|
||
}
|
||
/**
|
||
* show or hide
|
||
* @protected
|
||
* @param {Boolean} visible true means show, false means hide
|
||
*/
|
||
;
|
||
|
||
_proto.changeVisible = function changeVisible(visible) {
|
||
var self = this;
|
||
self.set('visible', visible);
|
||
var el = self.get('el');
|
||
if (!el) return;
|
||
|
||
if (el.set) {
|
||
el.set('visible', visible);
|
||
} else {
|
||
el.style.display = visible ? '' : 'none';
|
||
}
|
||
}
|
||
/**
|
||
* calculate the canvas coordinate value
|
||
* @protected
|
||
* @param {Coordinate} coord the instance of Coordinate class
|
||
* @param {Object | Array | Function} position the value need to convert
|
||
* @return {Object} return the result
|
||
*/
|
||
;
|
||
|
||
_proto.parsePoint = function parsePoint(coord, position) {
|
||
var self = this;
|
||
var xScales = self.get('xScales');
|
||
var yScales = self.get('yScales');
|
||
|
||
if (Util.isFunction(position)) {
|
||
position = position(xScales, yScales);
|
||
}
|
||
|
||
var x;
|
||
var y; // 如果数据格式是 ['50%', '50%'] 的格式
|
||
|
||
if (Util.isArray(position) && Util.isString(position[0]) && position[0].indexOf('%') !== -1) {
|
||
return this._parsePercentPoint(coord, position);
|
||
}
|
||
|
||
if (Util.isArray(position)) {
|
||
// Array,suuport for mixing of keyword, percent and value
|
||
x = self._getNormalizedValue(position[0], Helper.getFirstScale(xScales));
|
||
y = self._getNormalizedValue(position[1], Helper.getFirstScale(yScales));
|
||
} else {
|
||
for (var field in position) {
|
||
var value = position[field];
|
||
|
||
if (xScales[field]) {
|
||
x = self._getNormalizedValue(value, xScales[field]);
|
||
}
|
||
|
||
if (yScales[field]) {
|
||
y = self._getNormalizedValue(value, yScales[field], 'y');
|
||
}
|
||
}
|
||
}
|
||
|
||
if (!Util.isNil(x) && !Util.isNil(y) && !isNaN(x) && !isNaN(y)) {
|
||
return coord.convert({
|
||
x: x,
|
||
y: y
|
||
});
|
||
}
|
||
|
||
return null;
|
||
}
|
||
/**
|
||
* Normalized the value
|
||
* @param {String | Number} val param
|
||
* @param {Scale} scale the instance of Scale
|
||
* @return {Number} return the normalized value
|
||
*/
|
||
;
|
||
|
||
_proto._getNormalizedValue = function _getNormalizedValue(val, scale) {
|
||
var result;
|
||
|
||
if (Util.indexOf(KEYWORDS, val) !== -1) {
|
||
// keyword
|
||
var scaleValue;
|
||
|
||
if (val === 'start') {
|
||
// the start of coordinate
|
||
result = 0;
|
||
} else if (val === 'end') {
|
||
result = 1;
|
||
} else if (val === 'median') {
|
||
scaleValue = scale.isCategory ? (scale.values.length - 1) / 2 : (scale.min + scale.max) / 2;
|
||
result = scale.scale(scaleValue);
|
||
} else {
|
||
if (scale.isCategory) {
|
||
scaleValue = val === 'min' ? 0 : scale.values.length - 1;
|
||
} else {
|
||
scaleValue = scale[val];
|
||
}
|
||
|
||
result = scale.scale(scaleValue);
|
||
}
|
||
} else {
|
||
// 数值
|
||
result = scale.scale(val);
|
||
}
|
||
|
||
return result;
|
||
};
|
||
|
||
_proto._parsePercentPoint = function _parsePercentPoint(coord, position) {
|
||
var xPercent = parseFloat(position[0]) / 100;
|
||
var yPercent = parseFloat(position[1]) / 100;
|
||
var start = coord.start,
|
||
end = coord.end;
|
||
var topLeft = {
|
||
x: Math.min(start.x, end.x),
|
||
y: Math.min(start.y, end.y)
|
||
};
|
||
var x = coord.width * xPercent + topLeft.x;
|
||
var y = coord.height * yPercent + topLeft.y;
|
||
return {
|
||
x: x,
|
||
y: y
|
||
};
|
||
};
|
||
|
||
return Guide;
|
||
}(Component);
|
||
|
||
module.exports = Guide; |