@huangjs888/d3-chart
Version:
Implement some charts based on d3 library.
1,162 lines (1,151 loc) • 2.52 MB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["D3Chart"] = factory();
else
root["D3Chart"] = factory();
})(self, function() {
return /******/ (function() { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./src/BaseChart/index.js":
/*!********************************!*\
!*** ./src/BaseChart/index.js ***!
\********************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _babel_runtime_corejs3_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/extends */ "./node_modules/@babel/runtime-corejs3/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_corejs3_helpers_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/objectWithoutPropertiesLoose */ "./node_modules/@babel/runtime-corejs3/helpers/esm/objectWithoutPropertiesLoose.js");
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/instance/map */ "./node_modules/@babel/runtime-corejs3/core-js/instance/map.js");
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_map__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_map__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/instance/concat */ "./node_modules/@babel/runtime-corejs3/core-js/instance/concat.js");
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_corejs3_core_js_object_keys__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/object/keys */ "./node_modules/@babel/runtime-corejs3/core-js/object/keys.js");
/* harmony import */ var _babel_runtime_corejs3_core_js_object_keys__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_object_keys__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_filter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js/instance/filter */ "./node_modules/@babel/runtime-corejs3/core-js/instance/filter.js");
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_filter__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_filter__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3 */ "./node_modules/d3/src/index.js");
/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../util */ "./src/util/index.js");
var _excluded = ["transform", "sourceEvent"],
_excluded2 = ["transform", "sourceEvent"],
_excluded3 = ["transform", "sourceEvent"];
// @ts-nocheck
/*
* @Author: Huangjs
* @Date: 2021-03-17 16:23:00
* @LastEditors: Huangjs
* @LastEditTime: 2023-05-12 14:11:32
* @Description: 基础图表构造器
*/
var iconSize = 18;
var downloadPath = 'M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z';
var resetPath = 'M483.031 380.989v-61.004l-162.969 92.891 162.969 99.24v-64.04c128.025 0.122 157.093 64.052 157.093 94.107 0 33.863-29.068 97.771-157.093 97.771l-98.957 0.011v63.919l98.957-0.011c157.093 0.011 221.105-63.907 221.105-159.017 0.001-96.647-64.012-163.856-221.105-163.867 M511.372 64.548c-247.628 0-448.369 200.319-448.369 447.426S263.744 959.4 511.372 959.4s448.369-200.32 448.369-447.426S758.999 64.548 511.372 64.548z m-0.203 823.564c-207.318 0-375.382-167.71-375.382-374.592s168.064-374.592 375.382-374.592 375.382 167.71 375.382 374.592-168.064 374.592-375.382 374.592z';
var lockPath = 'M650 432.6v-99.4c0-76.3-61.8-138.1-138.1-138.1S373.8 258 373.8 334.3v99.4H650z m-382.9 1.1l-0.1-3.1V322.5c0-59.9 23.8-117.4 66.2-159.8C375.6 120.3 433 96.5 493 96.5h37.9c124.8 0 225.9 101.2 225.9 225.9v111.3c58.2 8.1 101.5 57.9 101.5 116.7v258.3c0 65.1-52.7 117.8-117.8 117.8H283.3c-65.1 0-117.8-52.7-117.8-117.8V550.5c0-58.8 43.3-108.6 101.6-116.8z m217.6 266v77c0 15 12.2 27.2 27.2 27.2s27.2-12.2 27.2-27.2v-77c33.5-13.1 53-48.2 46.3-83.5-6.7-35.4-37.5-61-73.5-61s-66.9 25.6-73.5 61c-6.7 35.3 12.8 70.4 46.3 83.5z';
var unlockPath = 'M650 432.6v-99.4c0-76.3-61.8-138.1-138.1-138.1S373.8 258 373.8 334.3v99.4H650z m-382.9 1.1l-0.1-3.1V322.5c0-59.9 23.8-117.4 66.2-159.8C375.6 120.3 433 96.5 493 96.5h37.9c124.8 0 225.9 101.2 225.9 225.9v111.3c58.2 8.1 101.5 57.9 101.5 116.7v258.3c0 65.1-52.7 117.8-117.8 117.8H283.3c-65.1 0-117.8-52.7-117.8-117.8V550.5c0-58.8 43.3-108.6 101.6-116.8z m217.6 266v77c0 15 12.2 27.2 27.2 27.2s27.2-12.2 27.2-27.2v-77c33.5-13.1 53-48.2 46.3-83.5-6.7-35.4-37.5-61-73.5-61s-66.9 25.6-73.5 61c-6.7 35.3 12.8 70.4 46.3 83.5zm272 -369h-106.5v103h106.5z';
var actionButtons = {
download: {
title: '下载视图',
path: downloadPath,
className: 'download'
},
reset: {
title: '重置视图',
path: resetPath,
className: 'reset'
},
xlock: {
title: 'X轴缩放开关',
path: unlockPath,
className: 'xlock'
},
ylock: {
title: 'Y轴缩放开关',
path: unlockPath,
className: 'ylock'
}
};
var axisType = ['x', 'x2', 'y', 'y2'];
var scaleType = {
cat: function cat() {
return d3__WEBPACK_IMPORTED_MODULE_6__.scaleBand();
},
timeCat: function timeCat() {
return d3__WEBPACK_IMPORTED_MODULE_6__.scaleBand();
},
time: function time() {
return d3__WEBPACK_IMPORTED_MODULE_6__.scaleTime();
},
linear: function linear() {
return d3__WEBPACK_IMPORTED_MODULE_6__.scaleLinear();
},
log: function log() {
return d3__WEBPACK_IMPORTED_MODULE_6__.scaleLog();
},
sqrt: function sqrt() {
return d3__WEBPACK_IMPORTED_MODULE_6__.scaleSqrt();
},
pow: function pow() {
return d3__WEBPACK_IMPORTED_MODULE_6__.scalePow();
},
// sequential: () => d3.scaleSequential(),
quantize: function quantize() {
return d3__WEBPACK_IMPORTED_MODULE_6__.scaleQuantize();
},
quantile: function quantile() {
return d3__WEBPACK_IMPORTED_MODULE_6__.scaleQuantile();
},
identity: function identity() {
return d3__WEBPACK_IMPORTED_MODULE_6__.scaleIdentity();
}
};
var timeFormat = d3__WEBPACK_IMPORTED_MODULE_6__.timeFormat('%Y-%m-%d %H:%M:%S');
var formatMillisecond = d3__WEBPACK_IMPORTED_MODULE_6__.timeFormat('.%L');
var formatSecond = d3__WEBPACK_IMPORTED_MODULE_6__.timeFormat(':%S');
var formatMinute = d3__WEBPACK_IMPORTED_MODULE_6__.timeFormat('%H:%M');
var formatHour = d3__WEBPACK_IMPORTED_MODULE_6__.timeFormat('%H:00');
var formatDay = d3__WEBPACK_IMPORTED_MODULE_6__.timeFormat('%m-%d');
var formatMonth = d3__WEBPACK_IMPORTED_MODULE_6__.timeFormat('%m月');
var formatYear = d3__WEBPACK_IMPORTED_MODULE_6__.timeFormat('%Y年');
var prefixSIFormat = d3__WEBPACK_IMPORTED_MODULE_6__.format('.4~s');
var exponentFormat = d3__WEBPACK_IMPORTED_MODULE_6__.format('.4~g');
var roundFormat = d3__WEBPACK_IMPORTED_MODULE_6__.format('.4~r');
var getDefaultFormat = function getDefaultFormat(type) {
if (type === 'time') {
return function (date, ax) {
if (!ax) {
return timeFormat(date);
}
if (d3__WEBPACK_IMPORTED_MODULE_6__.timeSecond(date) < date) {
return formatMillisecond(date);
}
if (d3__WEBPACK_IMPORTED_MODULE_6__.timeMinute(date) < date) {
return formatSecond(date);
}
if (d3__WEBPACK_IMPORTED_MODULE_6__.timeHour(date) < date) {
return formatMinute(date);
}
if (d3__WEBPACK_IMPORTED_MODULE_6__.timeDay(date) < date) {
return formatHour(date);
}
if (d3__WEBPACK_IMPORTED_MODULE_6__.timeMonth(date) < date) {
return formatDay(date);
}
if (d3__WEBPACK_IMPORTED_MODULE_6__.timeYear(date) < date) {
return formatMonth(date);
}
return formatYear(date);
};
}
if (type === 'log') {
return exponentFormat;
}
if (type === 'sqrt') {
return roundFormat;
}
if (type === 'linear' || type === 'pow') {
return prefixSIFormat;
}
return function (v) {
return v;
};
};
var computeSize = function computeSize(element, _ref) {
var width = _ref.width,
height = _ref.height,
padding = _ref.padding,
rWidth = _ref.rWidth,
rHeight = _ref.rHeight;
var w = width;
var h = height;
var style = getComputedStyle(element);
if (!(_util__WEBPACK_IMPORTED_MODULE_7__.isNumber(width) && width > 1)) {
w = (element.clientWidth || parseInt(style.width, 10)) - parseInt(style.paddingLeft, 10) - parseInt(style.paddingRight, 10);
}
if (!(_util__WEBPACK_IMPORTED_MODULE_7__.isNumber(height) && height > 1)) {
h = (element.clientHeight || parseInt(style.height, 10)) - parseInt(style.paddingTop, 10) - parseInt(style.paddingBottom, 10);
}
var _ref2 = [],
top = _ref2[0],
right = _ref2[1],
bottom = _ref2[2],
left = _ref2[3];
var pad = Array.isArray(padding) ? padding : [];
var pad0 = pad[0],
pad1 = pad[1],
pad2 = pad[2],
pad3 = pad[3];
pad0 = !_util__WEBPACK_IMPORTED_MODULE_7__.isNumber(pad0) || pad0 < 0 ? 0 : pad0;
pad1 = !_util__WEBPACK_IMPORTED_MODULE_7__.isNumber(pad1) || pad1 < 0 ? 0 : pad1;
pad2 = !_util__WEBPACK_IMPORTED_MODULE_7__.isNumber(pad2) || pad2 < 0 ? 0 : pad2;
pad3 = !_util__WEBPACK_IMPORTED_MODULE_7__.isNumber(pad3) || pad3 < 0 ? 0 : pad3;
if (!pad.length) {
top = 0;
right = top;
bottom = top;
left = top;
} else if (pad.length === 1) {
top = pad0;
right = top;
bottom = top;
left = top;
} else if (pad.length === 2) {
top = pad0;
right = pad1;
bottom = top;
left = right;
} else if (pad.length === 3) {
top = pad0;
right = pad1;
bottom = pad2;
left = right;
} else {
top = pad0;
right = pad1;
bottom = pad2;
left = pad3;
}
return {
width: Math.max(_util__WEBPACK_IMPORTED_MODULE_7__.isNumber(w) ? w : 1, 1),
height: Math.max(_util__WEBPACK_IMPORTED_MODULE_7__.isNumber(h) ? h : 1, 1),
padding: [top, right, bottom, left],
rWidth: _util__WEBPACK_IMPORTED_MODULE_7__.isNumber(rWidth) ? rWidth : 0,
rHeight: _util__WEBPACK_IMPORTED_MODULE_7__.isNumber(rHeight) ? rHeight : 0
};
};
var scaleLable = function scaleLable(labelSel, _ref3) {
var scale = _ref3[0],
domain = _ref3[1];
var type = scale.type,
format = scale.format,
label = scale.label,
unit = scale.unit;
type = type || 'linear';
label = label || '';
unit = !label || !unit ? '' : " ( " + unit + " )";
format = format || getDefaultFormat(type);
var min = domain[0],
max = domain[1];
min = min || 0;
max = max || 0;
labelSel.select('text').selectAll('tspan').data([0, 1]).join('tspan').attr('dx', function (_, i) {
if (!label) return 0;
return i === 0 ? -12 : 12;
}).text(function (_, i) {
return i === 0 ? "" + label + unit : format(min) + " - " + format(max);
});
};
function getScaleAxis() {
var _this = this;
var _this$zoomSelection$$ = this.zoomSelection$.datum(),
xTransform = _this$zoomSelection$$[0],
yTransform = _this$zoomSelection$$[1];
var scaleAxis = {};
axisType.forEach(function (key) {
if (_this.scale[key]) {
var _this$rescale$ = _this.rescale$(key === 'x' || key === 'x2' ? xTransform : yTransform, key),
scale = _this$rescale$.scale,
axis = _this$rescale$.axis;
scaleAxis[key] = {
axis: axis,
scale: scale
};
}
});
return scaleAxis;
}
function updateScale() {
var _this2 = this;
axisType.forEach(function (key) {
if (_this2.axisScale$[key]) {
var _ref4 = _this2.scale[key].domain || _this2.dataDomains$[key] || [0, 1],
minDomain = _ref4[0],
maxDomain = _ref4[1];
_this2.axisScale$[key].scale.range(key === 'x' || key === 'x2' ? [0, _this2.width$] : [_this2.height$, 0]).domain([minDomain || 0, maxDomain || 1]);
if (_this2.scale[key].nice) {
_this2.axisScale$[key].scale.nice();
var niceDomain = _this2.axisScale$[key].scale.domain();
if (_this2.scale[key].domain) {
_this2.scale[key].domain = niceDomain;
}
if (_this2.dataDomains$[key]) {
_this2.dataDomains$[key] = niceDomain;
}
}
}
});
}
function createScale() {
var _this3 = this;
var axisScale = {};
axisType.forEach(function (key) {
if (_this3.scale[key]) {
var _this3$scale$key = _this3.scale[key],
_this3$scale$key$type = _this3$scale$key.type,
type = _this3$scale$key$type === void 0 ? 'linear' : _this3$scale$key$type,
_this3$scale$key$tick = _this3$scale$key.ticks,
ticks = _this3$scale$key$tick === void 0 ? 5 : _this3$scale$key$tick,
tickSize = _this3$scale$key.tickSize,
format = _this3$scale$key.format;
var scale = scaleType[type]();
var axis = null;
if (key === 'x2') {
axis = d3__WEBPACK_IMPORTED_MODULE_6__.axisTop(scale);
} else if (key === 'y') {
axis = d3__WEBPACK_IMPORTED_MODULE_6__.axisLeft(scale);
} else if (key === 'y2') {
axis = d3__WEBPACK_IMPORTED_MODULE_6__.axisRight(scale);
} else {
axis = d3__WEBPACK_IMPORTED_MODULE_6__.axisBottom(scale);
}
if (ticks) {
axis = axis.ticks(ticks);
}
if (tickSize) {
axis = axis.tickSize(tickSize);
}
var defaultFormat = getDefaultFormat(type);
if (!format) {
_this3.scale[key].format = defaultFormat;
}
axis = axis.tickFormat(format || function (val) {
return defaultFormat(val, true);
});
axisScale[key] = {
scale: scale,
axis: axis
};
}
});
this.axisScale$ = axisScale;
updateScale.call(this);
this.rescale$ = function (transform, key) {
var as = _this3.axisScale$[key];
if (as) {
var scale = as.scale,
axis = as.axis;
var recale = key === 'x' || key === 'x2' ? transform.rescaleX(scale) : transform.rescaleY(scale);
return {
scale: recale,
axis: axis.scale(recale)
};
}
return as;
};
}
function updateZoom() {
var _this4 = this;
var viewExtent = [[0, 0], [this.width$, this.height$]];
var scaleExtent = [[1, 1], [1, 1]];
var translateExtent = [[0, 0], [0, 0]];
var _this$zoom = this.zoom,
xzoom = _this$zoom.x,
yzoom = _this$zoom.y;
if (xzoom || yzoom) {
var _context;
var _map = _babel_runtime_corejs3_core_js_instance_map__WEBPACK_IMPORTED_MODULE_2___default()(_context = [xzoom, yzoom]).call(_context, function (zoom, i) {
var key = zoom.domain || (i === 0 ? 'x' : 'y');
var domain = [0, 1];
if (_this4.scale[key]) {
domain = _this4.scale[key].domain || _this4.dataDomains$[key] || [0, 1];
}
return domain;
}),
xdomain = _map[0],
ydomain = _map[1];
var xMinDomain = xdomain[0],
xMaxDomain = xdomain[1];
var yMinDomain = ydomain[0],
yMaxDomain = ydomain[1];
var xDomainEx = (xMaxDomain || 1) - (xMinDomain || 0);
var yDomainEx = (yMaxDomain || 1) - (yMinDomain || 0);
var _ref5 = xzoom.translate || [-Infinity, Infinity],
_ref5$ = _ref5[0],
xMinTranslate = _ref5$ === void 0 ? 0 : _ref5$,
_ref5$2 = _ref5[1],
xMaxTranslate = _ref5$2 === void 0 ? 0 : _ref5$2;
var _ref6 = yzoom.translate || [-Infinity, Infinity],
_ref6$ = _ref6[0],
yMinTranslate = _ref6$ === void 0 ? 0 : _ref6$,
_ref6$2 = _ref6[1],
yMaxTranslate = _ref6$2 === void 0 ? 0 : _ref6$2;
var _ref7 = xzoom.precision || [xDomainEx / 10, xDomainEx * 10],
_ref7$ = _ref7[0],
xMinPrecision = _ref7$ === void 0 ? xDomainEx / 10 : _ref7$,
_ref7$2 = _ref7[1],
xMaxPrecision = _ref7$2 === void 0 ? xDomainEx * 10 : _ref7$2;
var _ref8 = yzoom.precision || [yDomainEx / 10, yDomainEx * 10],
_ref8$ = _ref8[0],
yMinPrecision = _ref8$ === void 0 ? yDomainEx / 10 : _ref8$,
_ref8$2 = _ref8[1],
yMaxPrecision = _ref8$2 === void 0 ? yDomainEx * 10 : _ref8$2;
var xRate = this.width$ / xDomainEx;
var yRate = this.height$ / yDomainEx;
scaleExtent = [[xDomainEx / xMaxPrecision || 1, yDomainEx / yMaxPrecision || 1], [xDomainEx / xMinPrecision || 1, yDomainEx / yMinPrecision || 1]];
translateExtent = [[(xMinTranslate - (xMinDomain || 0)) * xRate || xMinDomain || 0, ((yMaxDomain || 1) - yMaxTranslate) * yRate || yMinDomain || 0], [(xMaxTranslate - (xMinDomain || 0)) * xRate || xMaxDomain || 1, ((yMaxDomain || 1) - yMinTranslate) * yRate || yMaxDomain || 1]];
}
this.zoomer$.extent(viewExtent).scaleExtent([Math.pow(scaleExtent[0][0] * scaleExtent[0][1], 2), Math.pow(scaleExtent[1][0] * scaleExtent[1][1], 2)]).translateExtent(translateExtent);
this.zoomExtent$ = {
viewExtent: viewExtent,
scaleExtent: scaleExtent,
translateExtent: translateExtent
};
}
function createZoom() {
var _this5 = this;
this.zoomExtent$ = null;
updateZoom.call(this);
this.transform$ = function (axis, tf, t, p, l) {
var transform = tf;
if (_this5.zoomExtent$) {
var _this5$zoomExtent$ = _this5.zoomExtent$,
viewExtent = _this5$zoomExtent$.viewExtent,
translateExtent = _this5$zoomExtent$.translateExtent,
scaleExtent = _this5$zoomExtent$.scaleExtent;
var tk = Math.max(axis === 'x' ? scaleExtent[0][0] : scaleExtent[0][1], Math.min(axis === 'x' ? scaleExtent[1][0] : scaleExtent[1][1], transform.k * t));
var tx = p[0] - tk * l[0];
var ty = p[1] - tk * l[1];
if (tk !== transform.k || tx !== transform.x || ty !== transform.y) {
transform = _this5.zoomer$.constrain()(d3__WEBPACK_IMPORTED_MODULE_6__.zoomIdentity.translate(tx, ty).scale(tk), viewExtent, translateExtent);
}
}
return transform;
};
}
function updateElement(size) {
var _this6 = this;
var _computeSize = computeSize(this.rootSelection$.node(), size),
width = _computeSize.width,
height = _computeSize.height,
padding = _computeSize.padding,
rWidth = _computeSize.rWidth,
rHeight = _computeSize.rHeight;
var zw = width - rWidth - padding[3] - padding[1];
var zh = height - rHeight - padding[0] - padding[2];
if (zw < 1) zw = 1;
if (zh < 1) zh = 1;
var group = this.rootSelection$.select('svg').attr('width', width).attr('height', height).select('g.group').attr('transform', "translate(" + padding[3] + "," + padding[0] + ")");
this.rootSelection$.select('clipPath').select('rect').attr('width', zw).attr('height', zh);
var baselineDelt = this.fontSize + 2;
if (this.scale.x) {
group.select('.xAxis').attr('transform', "translate(0," + zh + ")");
if (this.scale.x.showRange || typeof this.scale.x.showRange === 'undefined') {
group.select('.xLabel').attr('transform', "translate(" + zw / 2 + " " + (zh + padding[2] - iconSize + baselineDelt) + ") rotate(0)");
}
}
if (this.scale.x2 && (this.scale.x2.showRange || typeof this.scale.x2.showRange === 'undefined')) {
group.select('.x2Label').attr('transform', "translate(" + zw / 2 + " " + (baselineDelt - padding[0]) + ") rotate(0)");
}
if (this.scale.y && (this.scale.y.showRange || typeof this.scale.y.showRange === 'undefined')) {
group.select('.yLabel').attr('transform', "translate(" + (baselineDelt - padding[3]) + " " + zh / 2 + ") rotate(-90)");
}
if (this.scale.y2) {
group.select('.y2Axis').attr('transform', "translate(" + zw + ",0)");
if (this.scale.y2.showRange || typeof this.scale.y2.showRange === 'undefined') {
group.select('.y2Label').attr('transform', "translate(" + (zw + padding[1] - iconSize + baselineDelt) + " " + zh / 2 + ") rotate(-90)");
}
}
var svgDiv = this.rootSelection$.select('div.actions').style('width', zw + "px").style('height', zh + "px").style('top', padding[0] + "px").style('left', padding[3] + "px");
if (this.zoom.x) {
svgDiv.select('.xlock').style('top', (this.scale.x ? zh + padding[2] - iconSize : -padding[0]) + "px").style('left', (this.scale.y ? zw - iconSize / 2 : -iconSize / 2) + "px");
}
if (this.zoom.y) {
svgDiv.select('.ylock').style('top', (this.scale.x ? -iconSize / 2 : zh - iconSize / 2) + "px").style('left', (this.scale.y ? -padding[3] : zw + padding[1] - iconSize) + "px");
}
var offset = 5;
if (this.zoom.x || this.zoom.y) {
svgDiv.select('.reset').style('top', (this.scale.x ? -padding[0] : zh + padding[2] - iconSize) + "px").style('left', (this.scale.y ? zw - offset - iconSize : offset) + "px");
offset += 23;
}
if (this.download) {
svgDiv.select('.download').style('top', (this.scale.x ? -padding[0] : zh + padding[2] - iconSize) + "px").style('left', (this.scale.y ? zw - offset - iconSize : offset) + "px");
offset += 23;
}
this.actions.forEach(function (a, i) {
if (!a) return;
svgDiv.select(".action-" + i).style('top', (_this6.scale.x ? -padding[0] : zh + padding[2] - iconSize) + "px").style('left', (_this6.scale.y ? zw - offset - iconSize : offset) + "px");
offset += 23;
});
group.select('.zLabel').attr('transform', "translate(" + (this.scale.y ? zw - offset : offset) + " " + ((this.scale.x ? -padding[0] : zh + padding[2] - iconSize) + baselineDelt) + ")");
this.width = width;
this.height = height;
this.padding = padding;
this.width$ = zw;
this.height$ = zh;
}
function createElement(container, size) {
var _this7 = this,
_context2;
var svgXmlns = 'http://www.w3.org/2000/svg';
var rootSelection = d3__WEBPACK_IMPORTED_MODULE_6__.select(container || document.createElement('div')).append('div').attr('class', 'd3chart').style('position', 'relative')
// .style('overflow', 'hidden')
.style('width', '100%').style('height', '100%');
var svgSelection = rootSelection.append('svg').attr('xmlns', svgXmlns).attr('width', 1) // 清除默认宽高
.attr('height', 1) // 清除默认宽高
.attr('fill', 'none').attr('text-anchor', 'middle').attr('font-size', this.fontSize).attr('stroke', 'none').attr('stroke-width', 1).attr('stroke-linejoin', 'round').attr('stroke-linecap', 'round').style('position', 'absolute');
var pathClipId = _util__WEBPACK_IMPORTED_MODULE_7__.guid('clip');
svgSelection.append('defs').append('svg:clipPath').attr('id', pathClipId).append('rect');
var groupSelection = svgSelection.append('g').attr('class', 'group');
axisType.forEach(function (key) {
if (_this7.scale[key]) {
groupSelection.append('g').attr('class', key + "Axis");
if (_this7.scale[key].showRange || typeof _this7.scale[key].showRange === 'undefined') {
groupSelection.append('g').attr('class', key + "Label").attr('fill', 'currentColor').append('text');
}
}
});
groupSelection.append('g').attr('class', 'zAxis').attr('clip-path', "url(#" + pathClipId + ")");
groupSelection.append('g').attr('class', 'zLabel').attr('fill', 'currentColor');
var divSelection = rootSelection.append('div').attr('class', 'actions').style('position', 'absolute').style('top', 0).style('left', 0);
var zoomSelection = divSelection.append('div').attr('class', 'xyzoom').style('position', 'absolute')
// .style('overflow', 'hidden')
.style('background', 'rgba(0,0,0,0)') // IE9,10的层级(z-index)不起作用,需要加个背景使鼠标事件生效
.style('width', '100%').style('height', '100%').style('top', 0).style('left', 0);
var actions = [];
if (this.zoom) {
if (this.zoom.x) {
actions.push(actionButtons.xlock);
}
if (this.zoom.y) {
actions.push(actionButtons.ylock);
}
if (this.zoom.x || this.zoom.y) {
actions.push(actionButtons.reset);
}
}
if (this.download) {
actions.push(actionButtons.download);
}
_babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_3___default()(_context2 = []).call(_context2, actions, this.actions).forEach(function (action, i) {
var index = i - actions.length;
if (!action) return;
var className = action.className,
title = action.title,
path = action.path,
text = action.text,
src = action.src,
menus = action.menus;
var actionSelection = divSelection.append('div').attr('class', index < 0 ? className : "action-" + index).style('position', 'absolute').attr('title', title || '').style('display', 'inline-flex').style('font-size', (path ? iconSize : 12) + "px");
if (path) {
actionSelection.append('svg').attr('xmlns', svgXmlns).attr('fill', 'currentColor').attr('viewBox', '0 0 1024 1024').attr('width', '1em').attr('height', '1em').append('path').attr('d', path);
} else if (text) {
actionSelection.append('span').text(text);
} else if (src) {
actionSelection.append('img').attr('src', src).attr('width', iconSize).attr('height', iconSize);
}
if (Array.isArray(menus)) {
var menusSelection = actionSelection.append('div').attr('class', "action-menu action-" + index + "-menu").style('position', 'absolute').style('top', '24px').style('font-size', '12px').style('padding', '6px 0px');
var maxWidth = 0;
menus.forEach(function (menu, j) {
if (!menu) return;
var text = menu.text;
maxWidth = Math.max(maxWidth, _util__WEBPACK_IMPORTED_MODULE_7__.measureSvgText(text, 12));
menusSelection.append('div').attr('class', "action-" + index + "-menu-" + j).style('padding', '6px 12px').text(text);
});
menusSelection.style('width', maxWidth + 24 + "px").style('left', -(maxWidth + 24) / 2 + "px").style('display', 'none');
}
});
if (this.tooltip) {
var cross = this.tooltip.cross;
zoomSelection.append('div').attr('class', 'tooltip').style('display', 'none').style('z-index', '999').style('border-radius', '8px').style('transition', 'none').style('padding', '10px 14px').style('font-size', this.fontSize + "px").style('line-height', '22px').style('position', 'absolute').style('top', 0).style('left', 0);
cross.split('').forEach(function (key) {
if (key) {
zoomSelection.append('div').attr('class', key + "-cross").style('display', 'none').style('position', 'absolute').style('transition', 'none').style('width', key === 'x' ? '1px' : '100%').style('height', key === 'x' ? '100%' : '1px').style('top', 0).style('left', 0);
}
});
}
this.rootSelection$ = rootSelection;
this.zoomSelection$ = zoomSelection;
updateElement.call(this, size);
if (!(_util__WEBPACK_IMPORTED_MODULE_7__.isNumber(size.width) && size.width > 1 && _util__WEBPACK_IMPORTED_MODULE_7__.isNumber(size.height) && size.height > 1)) {
var resize = _util__WEBPACK_IMPORTED_MODULE_7__.debounce(function (e) {
var _context3;
if (_this7.destroyed) return;
updateElement.call(_this7, size);
updateScale.call(_this7);
updateZoom.call(_this7);
if (_this7.rendered) {
_this7.reset();
}
_this7.resize$.call(null, {
sourceEvent: e || null,
target: _this7.rootSelection$,
transform: _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_3___default()(_context3 = [d3__WEBPACK_IMPORTED_MODULE_6__.zoomTransform(_this7.zoomSelection$.node())]).call(_context3, _this7.zoomSelection$.datum()),
scaleAxis: getScaleAxis.call(_this7),
type: 'resize'
}, {
width: _this7.width$,
height: _this7.height$,
padding: _this7.padding
});
}, 250, {
leading: false,
trailing: true
});
window.addEventListener('resize', resize);
this.unBindResize$ = function () {
window.removeEventListener('resize', resize);
};
}
}
function bindEvents() {
var _this8 = this;
var point = null;
var transform0 = null;
var longPress = 0;
var showTooltip = function showTooltip(point) {
if (_this8.tooltip) {
var _this8$tooltip = _this8.tooltip,
cross = _this8$tooltip.cross,
compute = _this8$tooltip.compute;
var crossX = cross.indexOf('x') !== -1;
var crossY = cross.indexOf('y') !== -1;
if (crossX || crossY) {
var x0 = point[0],
y0 = point[1];
var _compute = compute([x0, y0], getScaleAxis.call(_this8)),
x00 = _compute.x0,
y00 = _compute.y0,
result = _compute.result;
x00 = x00 || x00 === 0 ? x00 : x0;
y00 = y00 || y00 === 0 ? y00 : y0;
var display = 'none';
if (typeof result !== 'function') {
result = _util__WEBPACK_IMPORTED_MODULE_7__.noop;
} else {
display = 'block';
}
if (crossX) {
selection.select('.x-cross').style('left', x00 + "px").style('display', display);
}
if (crossY) {
selection.select('.y-cross').style('top', y00 + "px").style('display', display);
}
var tooltip = selection.select('.tooltip');
tooltip.style('display', display).call(result);
if (display !== 'none') {
var width = tooltip.node().clientWidth;
var height = tooltip.node().clientHeight;
var left = x0 + 10;
var top = y0 - height - 10;
if (_this8.width$ - left < width) {
left = x0 - 10 - width;
}
left = left <= -60 ? -60 : left;
top = top <= -20 ? -20 : top;
tooltip.style('left', left + "px").style('top', top + "px");
}
}
}
};
var hideTooltip = function hideTooltip(target) {
if (_this8.tooltip) {
var cross = _this8.tooltip.cross;
var zNode = element;
if (!target || target !== zNode && target.parentNode !== zNode) {
if (cross.indexOf('x') !== -1) {
selection.select('.x-cross').style('display', 'none');
}
if (cross.indexOf('y') !== -1) {
selection.select('.y-cross').style('display', 'none');
}
selection.select('.tooltip').style('display', 'none');
}
}
};
var selection = this.zoomSelection$;
var element = selection.call(this.zoomer$.on('start', function (_ref9, _ref10) {
var transform = _ref9.transform,
sourceEvent = _ref9.sourceEvent,
restEvent = (0,_babel_runtime_corejs3_helpers_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref9, _excluded);
var xTransform = _ref10[0],
yTransform = _ref10[1];
if (_this8.destroyed || !_this8.rendered) return;
var type = sourceEvent.type;
// 移动端双击放大的时候,因为是模拟的双击,所以event实际传过来的是touchend的事件对象
var touches = type === 'touchend' ? sourceEvent.changedTouches : sourceEvent.touches;
if (type !== 'call' && (_this8.xCanZoom$ || _this8.yCanZoom$)) {
var p = null;
if (touches) {
// 表示移动端触摸事件
point = [];
for (var i = 0, len = touches.length; i < len; i += 1) {
var touch = touches.item(i);
p = d3__WEBPACK_IMPORTED_MODULE_6__.pointer(touch, element);
p = [p, [xTransform.invert(p), yTransform.invert(p)], touch.identifier];
if (!point[0]) point[0] = p;else if (!point[1] && point[0][2] !== p[2]) point[1] = p;
}
} else {
p = d3__WEBPACK_IMPORTED_MODULE_6__.pointer(sourceEvent, element);
p = [p, [xTransform.invert(p), yTransform.invert(p)]];
point = p;
}
transform0 = transform;
}
if (touches) {
longPress = setTimeout(function () {
showTooltip(d3__WEBPACK_IMPORTED_MODULE_6__.pointer(touches.item(0), element));
longPress = 0;
}, 500);
}
_this8.zoomstart$.call(null, (0,_babel_runtime_corejs3_helpers_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, restEvent, {
sourceEvent: sourceEvent,
scaleAxis: getScaleAxis.call(_this8),
transform: [transform, xTransform, yTransform]
}));
}).on('zoom', function (_ref11, _ref12) {
var transform = _ref11.transform,
sourceEvent = _ref11.sourceEvent,
restEvent = (0,_babel_runtime_corejs3_helpers_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref11, _excluded2);
var xTransform = _ref12[0],
yTransform = _ref12[1];
if (_this8.destroyed || !_this8.rendered) return;
var newXTransform = xTransform,
newYTransform = yTransform;
var type = sourceEvent.type,
touches = sourceEvent.changedTouches,
eventTransform = sourceEvent.transform;
// 表示事用户主动触发,如滚轮和移动,触摸缩放
if (type !== 'call') {
if (_this8.xCanZoom$ || _this8.yCanZoom$) {
var t = transform.k / transform0.k;
var p = null;
var lx = null;
var ly = null;
if (touches) {
// 表示移动端触摸事件
var np = null;
var np1 = null;
for (var i = 0, len = touches.length; i < len; i += 1) {
var touch = touches.item(i);
var pt = d3__WEBPACK_IMPORTED_MODULE_6__.pointer(touch, element);
if (point[0] && point[0][2] === touch.identifier) np = pt;else if (point[1] && point[1][2] === touch.identifier) np1 = pt;
}
if (point[0]) {
p = np || point[0][0];
lx = _this8.xCanZoom$ && point[0][1][0];
ly = _this8.yCanZoom$ && point[0][1][1];
if (point[1]) {
var p1 = np1 || point[1][0];
var _point$1$ = point[1][1],
lx1 = _point$1$[0],
ly1 = _point$1$[1];
p = [(p[0] + p1[0]) / 2, (p[1] + p1[1]) / 2];
lx = _this8.xCanZoom$ && [(lx[0] + lx1[0]) / 2, (lx[1] + lx1[1]) / 2];
ly = _this8.yCanZoom$ && [(ly[0] + ly1[0]) / 2, (ly[1] + ly1[1]) / 2];
}
}
} else {
p = d3__WEBPACK_IMPORTED_MODULE_6__.pointer(sourceEvent, element);
var changed = p[0] !== point[0][0] || p[1] !== point[0][1]; // zoom的时候点(鼠标)是否移动过
var wheel = type === 'wheel'; // 是否是滚轮
if (wheel && !changed) p = point[0];
lx = _this8.xCanZoom$ && (wheel && changed ? xTransform.invert(p) : point[1][0]);
ly = _this8.yCanZoom$ && (wheel && changed ? yTransform.invert(p) : point[1][1]);
}
if (p) {
if (lx) {
newXTransform = _this8.transform$('x', xTransform, t, p, lx);
}
if (ly) {
newYTransform = _this8.transform$('y', yTransform, t, p, ly);
}
}
transform0 = transform;
}
} else if (eventTransform) {
// 如果存在xy缩放,则会有补间调用,万一补间一半,触发了滚轮或移动,则补间会停止,造成无法到达指定缩放位置,所以xy锁定的时候应该忽略补间
// transform和eventTransform原本是一样的,但是动画补间的每一次调用时transform会变化,直到最后一次才会和eventTransform一样
// eventTransform是不变的,是最终的指定的变换结果
var xtf = transform;
var ytf = transform;
if (Array.isArray(eventTransform)) {
xtf = eventTransform[1];
ytf = eventTransform[2];
} else {
if (!_this8.xCanZoom$) xtf = eventTransform;
if (!_this8.yCanZoom$) ytf = eventTransform;
}
if (sourceEvent.zoomX) {
newXTransform = xtf;
}
if (sourceEvent.zoomY) {
newYTransform = ytf;
}
}
selection.datum([newXTransform, newYTransform]);
var scaleAxis = getScaleAxis.call(_this8);
_babel_runtime_corejs3_core_js_object_keys__WEBPACK_IMPORTED_MODULE_4___default()(scaleAxis).forEach(function (key) {
var _scaleAxis$key = scaleAxis[key],
axis = _scaleAxis$key.axis,
scale = _scaleAxis$key.scale;
_this8.rootSelection$.select("." + key + "Axis").call(axis);
_this8.rootSelection$.select("." + key + "Label").call(scaleLable, [_this8.scale[key], scale.domain()]);
});
if (touches) {
if (longPress != 0) {
clearTimeout(longPress);
longPress = 0;
}
hideTooltip();
}
_this8.zooming$.call(null, (0,_babel_runtime_corejs3_helpers_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, restEvent, {
sourceEvent: sourceEvent,
transform: [transform, newXTransform, newYTransform],
scaleAxis: scaleAxis
}));
}).on('end', function (_ref13, _ref14) {
var transform = _ref13.transform,
sourceEvent = _ref13.sourceEvent,
restEvent = (0,_babel_runtime_corejs3_helpers_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref13, _excluded3);
var xTransform = _ref14[0],
yTransform = _ref14[1];
if (_this8.destroyed || !_this8.rendered) return;
if (sourceEvent.type !== 'call' && (_this8.xCanZoom$ || _this8.yCanZoom$)) {
point = null;
transform0 = null;
}
if (sourceEvent.changedTouches) {
if (longPress != 0) {
clearTimeout(longPress);
longPress = 0;
hideTooltip();
}
}
_this8.zoomend$.call(null, (0,_babel_runtime_corejs3_helpers_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, restEvent, {
sourceEvent: sourceEvent,
transform: [transform, xTransform, yTransform],
scaleAxis: getScaleAxis.call(_this8)
}));
})).on('click', function (e) {
var _context4;
if (_this8.destroyed) return;
_this8.click$.call(null, {
sourceEvent: e,
target: selection,
transform: _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_3___default()(_context4 = [d3__WEBPACK_IMPORTED_MODULE_6__.zoomTransform(element)]).call(_context4, selection.datum()),
scaleAxis: getScaleAxis.call(_this8),
type: 'click'
});
}).on('dblclick', function (e) {
var _context5;
if (_this8.destroyed) return;
_this8.dblclick$.call(null, {
sourceEvent: e,
target: selection,
transform: _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_3___default()(_context5 = [d3__WEBPACK_IMPORTED_MODULE_6__.zoomTransform(element)]).call(_context5, selection.datum()),
scaleAxis: getScaleAxis.call(_this8),
type: 'dblclick'
});
}).on('contextmenu', function (e) {
var _context6;
if (_this8.destroyed) return;
_this8.contextmenu$.call(null, {
sourceEvent: e,
target: selection,
transform: _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_3___default()(_context6 = [d3__WEBPACK_IMPORTED_MODULE_6__.zoomTransform(element)]).call(_context6, selection.datum()),
scaleAxis: getScaleAxis.call(_this8),
type: 'contextmenu'
});
e.preventDefault();
}).datum([d3__WEBPACK_IMPORTED_MODULE_6__.zoomIdentity, d3__WEBPACK_IMPORTED_MODULE_6__.zoomIdentity]).node();
selection.on('mouseout', function (e) {
if (_this8.destroyed || !_this8.rendered) return;
hideTooltip(e.relatedTarget);
}).on('mousemove', function (e) {
if (_this8.destroyed || !_this8.rendered) return;
showTooltip(d3__WEBPACK_IMPORTED_MODULE_6__.pointer(e));
});
if (!this.zoom.doubleZoom) {
// 取消双击放大
selection.on('dblclick.zoom', null);
}
if (this.zoom.x) {
var xlock = this.rootSelection$.select('.xlock');
xlock.on('click', function () {
if (_this8.destroyed) return;
_this8.setCanZoom('x', !_this8.xCanZoom$);
_this8.canZoom$('x', _this8.xCanZoom$);
});
}
if (this.zoom.y) {
var ylock = this.rootSelection$.select('.ylock');
ylock.on('click', function () {
if (_this8.destroyed) return;
_this8.setCanZoom('y', !_this8.yCanZoom$);
_this8.canZoom$('y', _this8.yCanZoom$);
});
}
if (this.zoom.x || this.zoom.y) {
this.rootSelection$.select('.reset').on('click', function () {
if (_this8.destroyed) return;
_this8.reset();
_this8.reset$();
});
}
if (this.download) {
this.rootSelection$.select('.download').on('click', function () {
if (_this8.destroyed) return;
if (_this8.download.action) {
_this8.download.action(function () {
_this8.downloadImage();
}, _this8.rootSelection$);
} else {
_this8.downloadImage();
}
});
}
this.actions.forEach(function (a, i) {
if (!a) return;
var action = a.action,
menus = a.menus;
var am = _this8.rootSelection$.select(".action-" + i + "-menu");
var at = _this8.rootSelection$.select(".action-" + i);
at.on('click', function (e) {
e.stopPropagation();
if (e.currentTarget === at.node()) {
if (_this8.destroyed) return;
if (action) {
action(_this8.rootSelection$, function () {});
}
var display = am.style('display');
am.style('display', display === 'none' ? 'block' : 'none');
}
});
if (Array.isArray(menus)) {
menus.forEach(function (menu, j) {
if (!menu) return;
_this8.rootSelection$.select(".action-" + i + "-menu-" + j).on('click', function (e) {
e.stopPropagation();
if (_this8.destroyed) return;
if (menu.action) {
menu.action(_this8.rootSelection$, function () {});
}
am.style('display', 'none');
});
});
}
});
if (this.actions.length) {
d3__WEBPACK_IMPORTED_MODULE_6__.select('body').on('click', function () {
_this8.rootSelection$.selectAll('.action-menu').style('display', 'none');
});
}
}
var BaseChart = /*#__PURE__*/function () {
function BaseChart() {
var _this9 = this;
var _ref15 = (arguments.length <= 0 ? undefined : arguments[0]) || {},
container = _ref15.container,
width = _ref15.width,
height = _ref15.height,
_ref15$padding = _ref15.padding,
padding = _ref15$padding === void 0 ? [0, 0, 0, 0] : _ref15$padding,
rWidth = _ref15.rWidth,
rHeight = _ref15.rHeight,
_ref15$fontSize = _ref15.fontSize,
fontSize = _ref15$fontSize === void 0 ? 12 : _ref15$fontSize,
download = _ref15.download,
actions = _ref15.actions,
tooltip = _ref15.tooltip,
zoom = _ref15.zoom,
scale = _ref15.scale,
data = _ref15.data;
this.destroyed = false;
this.rendered = false;
if (typeof download === 'function') {
this.download = {
action: download
};
} else if (typeof download === 'string') {
this.download = {
ext: download
};
} else {
this.download = download || false;
}
this.tooltip = !tooltip ? false : (0,_babel_runtime_corejs3_helpers_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
cross: ''
}, tooltip, {
compute: function compute() {
var result = {};
if (typeof tooltip.compute === 'function') {
var _tooltip$compute, _context7;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
result = (_tooltip$compute = tooltip.compute).call.apply(_tooltip$compute, _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_3___default()(_context7 = [_this9, result]).call(_context7, args));
}
return result;
}
});
this.zoom = (0,_babel_runtime_corejs3_helpers_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
/* x: {
// 一旦domain设置了x或x2的某一类型,则translate和precision都要按照这一类型数据设置
domain: 'x', // 坐标缩放为1,位移为0时的坐标范围(会默认取scale的x或x2的domain)
translate: [-Infinity, Infinity], // 坐标标尺可以拖动的范围值
precision: [(1 - 0) / 10, (1 - 0) * 10], // 坐标标尺缩到最小和最大的跨度值
}, */
x: null,
y: null,
doubleZoom: false
}, zoom);
this.scale = (0,_babel_runtime_corejs3_helpers_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
/* x: {
type: 'linear', // 坐标类型
ticks: 5, // 坐标刻度数目
format: (v) => v, // 坐标值格式化函数
domain: [0, 1], // 横坐标缩放为1,位移为0时的坐标范围
label: '', // 坐标名称
unit: '', // 坐标值单位
}, */
x: null,
x2: null,
y: null,
y2: null
}, scale);
this.actions = Array.isArray(actions) ? actions : [];
this.fontSize = fontSize;
this.data = data || {};
this.dataDomains$ = {};
this.zoomer$ = d3__WEBPACK_IMPORTED_MODULE_6__.zoom();
this.xCanZoom$ = !!this.zoom.x;
this.yCanZoom$ = !!this.zoom.y;
createElement.call(this, container, {
width: width,
height: height,
padding: padding,
rWidth: rWidth,
rHeight: rHeight
});
createScale.call(this);
createZoom.call(this);
bindEvents.call(this);
this.click$ = _util__WEBPACK_IMPORTED_MODULE_7__.noop;
this.dblclick$ = _util__WEBPACK_IMPORTED_MODULE_7__.noop;
this.contextmenu$ = _util__WEBPACK_IMPORTED_MODULE_7__.noop;
this.zoomstart$ = _util__WEBPACK_IMPORTED_MODULE_7__.noop;
this.zooming$ = _util__WEBPACK_IMPORTED_MODULE_7__.noop;
this.zoomend$ = _util__WEBPACK_IMPORTED_MODULE_7__.noop;
this.resize$ = _util__WEBPACK_IMPORTED_MODULE_7__.noop;
this.reset$ = _util__WEBPACK_IMPORTED_MODULE_7__.noop;
this.canZoom$ = _util__WEBPACK_IMPORTED_MODULE_7__.noop;
}
var _proto = BaseChart.prototype;
_proto.reset = function reset(ta) {
this.render(d3__WEBPACK_IMPORTED_MODULE_6__.zoomIdentity, 'xy', ta);
return this;
};
_proto.render = function render(tf, ax, ta) {
if (ax === void 0) {
ax = 'xy';
}
if (ta === void 0) {
ta = true;
}
this.rendered = true;
var transform = (Array.isArray(tf) ? tf[0] : tf) || d3__WEBPACK_IMPORTED_MODULE_6__.zoomTransform(this.zoomSelection$.node());
// 对this.zoomSelection$调用this.zoomer$.transform函数变换到指定的transform
// 变换过程中用240ms及ease函数进行transition
(!ta ? this.zoomSelection$ : this.zoomSelection$.transition().duration(240).ease(d3__WEBPACK_IMPORTED_MODULE_6__.easeLinear)).call(this.zoomer$.transform, transform, null, {
type: 'call',
transform: tf,
zoomX: ax.indexOf('x') !== -1,
zoomY: ax.indexOf('y') !== -1
});
return this;
};
_proto.getCanZoom = function getCanZoom() {
return [this.xCanZoom$, this.yCanZoom$];
};
_proto.getTransform = function getTransform() {
var _context8;
return _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_3___default()(_context8 = [d3__WEBPACK_IMPORTED_MODULE_6__.zoomTransform(this.zoomSelection$.node())]).call(_context8, this.zoomSelection$.datum());
};
_proto.setCanZoom = function setCanZoom(ax, canZoom) {
if (ax === void 0) {
ax = 'xy';
}
if (canZoom === void 0) {
canZoom = true;
}
var xCanZoom = canZoom;
var yCanZoom = canZoom;
if (Array.isArray(canZoom)) {
var _canZoom = canZoom;
var _canZoom$ = _canZoom[0];
xCanZoom = _canZoom$ === void 0 ? true : _canZoom$;
var _canZoom$2 = _canZoom[1];
yCanZoom = _canZoom$2 === void 0 ? true : _canZoom$2;
}
if (ax.indexOf('x') !== -1) {
this.xCanZoom$ = xCanZoom;
this.rootSelection$.select('.xlock').select('path').attr('d', xCanZoom ? unlockPath : lockPath);
}
if (ax.indexOf('y') !== -1) {
this.yCanZoom$ = yCanZoom;
this.rootSelection$.select('.ylock').select('path').attr('d', yCanZoom ? unlockPath : lockPath);
}
return this;
};
_proto.setEvent = function setEvent(type, handler) {
if (typeof handler === 'function') {
var oldHandler = this[type + "$"];
this[type + "$"] = function () {
var _context9, _context10;
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
handler.call.apply(handler, _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_3___default()(_context9 = [null]).call(_context9, args, [oldHandler.call.apply(oldHandler, _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_3___default()(_context10 = [null]).call(_context10, args))]));
};
}
};
_proto.runEvent = function runEvent(type, data) {
var _context11;
if (data === void 0) {
data = {};
}
if (this.destroyed) return;
var _data = data,
sourceEvent = _data.sourceEvent,
transform = _data.transform,
scaleAxis = _data.scaleAxis,
target = _data.target;
this[type + "$"].call(null, {
type: type,
sourceEvent: sourceEvent || null,
target: target || this.zoomSelection$,
transform: transform || _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_3___default()(_context11 = [d3__WEBPACK_IMPORTED_MODULE_6__.zoomTransform(this.zoomSelection$.node())]).call(_context11, this.zoomSelection$.datum()),
scaleAxis: scaleAxis || getScaleAxis.call(this)
});
};
_proto.getData = function getData() {
return this.data;
};
_proto.setData = function setData(data, render, computeDomain) {
var _this10 = this;
if (computeDomain === void 0) {
computeDomain = _util__WEBPACK_IMPORTED_MODULE_7__.noop;
}
if (!data) return this;
this.rendered = false;
this.data = data;
// 根据data计算domain
var needCompute = _babel_runtime_corejs3_core_js_instance_filter__WEBPACK_IMPORTED_MODULE_5___default()(axisType).call(axisType, function (key) {
return _this10.scale[key] && !_this10.scale[key].domain;
});
if (needCompute.length > 0) {
this.dataDomains$ = computeDomain(this.data, needCompute) || {};
updateScale.call(this);
updateZoom.call(this);
}
if (render) {
this.render();
}
return this;
};
_proto.setDomain = function setDomain(domain, render) {
var _this11 = this;
if (!domai