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;
|