123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- "use strict";
- var Util = require('../../util/common');
- var Axis = require('../../component/axis/');
- var Global = require('../../global');
- var _require = require('../../graphic/index'),
- Shape = _require.Shape;
- function formatTicks(ticks) {
- var tmp = ticks.slice(0);
- if (tmp.length > 0) {
- var first = tmp[0];
- var last = tmp[tmp.length - 1];
- if (first.value !== 0) {
- tmp.unshift({
- value: 0
- });
- }
- if (last.value !== 1) {
- tmp.push({
- value: 1
- });
- }
- }
- return tmp;
- }
- var AxisController = /*#__PURE__*/function () {
- function AxisController(cfg) {
- this.axisCfg = {};
- this.frontPlot = null;
- this.backPlot = null;
- this.axes = {}; // store the axes's options
- Util.mix(this, cfg);
- }
- var _proto = AxisController.prototype;
- _proto._isHide = function _isHide(field) {
- var axisCfg = this.axisCfg;
- return !axisCfg || axisCfg[field] === false;
- };
- _proto._getLinePosition = function _getLinePosition(scale, dimType, index, transposed) {
- var position = '';
- var field = scale.field;
- var axisCfg = this.axisCfg;
- if (axisCfg[field] && axisCfg[field].position) {
- position = axisCfg[field].position;
- } else if (dimType === 'x') {
- position = transposed ? 'left' : 'bottom';
- } else if (dimType === 'y') {
- position = index ? 'right' : 'left';
- if (transposed) {
- position = 'bottom';
- }
- }
- return position;
- };
- _proto._getLineCfg = function _getLineCfg(coord, dimType, position) {
- var start;
- var end;
- var factor = 1; // Mark clockwise or counterclockwise
- if (dimType === 'x') {
- start = {
- x: 0,
- y: 0
- };
- end = {
- x: 1,
- y: 0
- };
- } else {
- if (position === 'right') {
- // there will be several y axes
- start = {
- x: 1,
- y: 0
- };
- end = {
- x: 1,
- y: 1
- };
- } else {
- start = {
- x: 0,
- y: 0
- };
- end = {
- x: 0,
- y: 1
- };
- factor = -1;
- }
- }
- if (coord.transposed) {
- factor *= -1;
- }
- return {
- offsetFactor: factor,
- start: coord.convertPoint(start),
- end: coord.convertPoint(end)
- };
- };
- _proto._getCircleCfg = function _getCircleCfg(coord) {
- return {
- startAngle: coord.startAngle,
- endAngle: coord.endAngle,
- center: coord.center,
- radius: coord.circleRadius
- };
- };
- _proto._getRadiusCfg = function _getRadiusCfg(coord) {
- var transposed = coord.transposed;
- var start;
- var end;
- if (transposed) {
- start = {
- x: 0,
- y: 0
- };
- end = {
- x: 1,
- y: 0
- };
- } else {
- start = {
- x: 0,
- y: 0
- };
- end = {
- x: 0,
- y: 1
- };
- }
- return {
- offsetFactor: -1,
- start: coord.convertPoint(start),
- end: coord.convertPoint(end)
- };
- };
- _proto._getAxisCfg = function _getAxisCfg(coord, scale, verticalScale, dimType, defaultCfg) {
- var self = this;
- var axisCfg = this.axisCfg;
- var ticks = scale.getTicks();
- var cfg = Util.deepMix({
- ticks: ticks,
- frontContainer: this.frontPlot,
- backContainer: this.backPlot
- }, defaultCfg, axisCfg[scale.field]);
- var labels = [];
- var label = cfg.label;
- var count = ticks.length;
- var maxWidth = 0;
- var maxHeight = 0;
- var labelCfg = label;
- Util.each(ticks, function (tick, index) {
- if (Util.isFunction(label)) {
- var executedLabel = label(tick.text, index, count);
- labelCfg = executedLabel ? Util.mix({}, Global._defaultAxis.label, executedLabel) : null;
- }
- if (labelCfg) {
- var textStyle = {};
- if (labelCfg.textAlign) {
- textStyle.textAlign = labelCfg.textAlign;
- }
- if (labelCfg.textBaseline) {
- textStyle.textBaseline = labelCfg.textBaseline;
- }
- var axisLabel = new Shape.Text({
- className: 'axis-label',
- attrs: Util.mix({
- x: 0,
- y: 0,
- text: tick.text,
- fontFamily: self.chart.get('canvas').get('fontFamily')
- }, labelCfg),
- value: tick.value,
- textStyle: textStyle,
- top: labelCfg.top,
- context: self.chart.get('canvas').get('context')
- });
- labels.push(axisLabel);
- var _axisLabel$getBBox = axisLabel.getBBox(),
- width = _axisLabel$getBBox.width,
- height = _axisLabel$getBBox.height;
- maxWidth = Math.max(maxWidth, width);
- maxHeight = Math.max(maxHeight, height);
- }
- });
- cfg.labels = labels;
- cfg.maxWidth = maxWidth;
- cfg.maxHeight = maxHeight;
- return cfg;
- };
- _proto._createAxis = function _createAxis(coord, scale, verticalScale, dimType, index) {
- if (index === void 0) {
- index = '';
- }
- var self = this;
- var coordType = coord.type;
- var transposed = coord.transposed;
- var type;
- var key;
- var defaultCfg;
- if (coordType === 'cartesian' || coordType === 'rect') {
- var position = self._getLinePosition(scale, dimType, index, transposed);
- defaultCfg = Global.axis[position];
- defaultCfg.position = position;
- type = 'Line';
- key = position;
- } else {
- if (dimType === 'x' && !transposed || dimType === 'y' && transposed) {
- defaultCfg = Global.axis.circle;
- type = 'Circle';
- key = 'circle';
- } else {
- defaultCfg = Global.axis.radius;
- type = 'Line';
- key = 'radius';
- }
- }
- var cfg = self._getAxisCfg(coord, scale, verticalScale, dimType, defaultCfg);
- cfg.type = type;
- cfg.dimType = dimType;
- cfg.verticalScale = verticalScale;
- cfg.index = index;
- this.axes[key] = cfg;
- };
- _proto.createAxis = function createAxis(coord, xScale, yScales) {
- var self = this;
- if (xScale && !self._isHide(xScale.field)) {
- self._createAxis(coord, xScale, yScales[0], 'x');
- }
- Util.each(yScales, function (yScale, index) {
- if (!self._isHide(yScale.field)) {
- self._createAxis(coord, yScale, xScale, 'y', index);
- }
- });
- var axes = this.axes;
- var chart = self.chart;
- if (chart._isAutoPadding()) {
- var userPadding = Util.parsePadding(chart.get('padding'));
- var appendPadding = Util.parsePadding(chart.get('appendPadding'));
- var legendRange = chart.get('legendRange') || {
- top: 0,
- right: 0,
- bottom: 0,
- left: 0
- };
- var padding = [userPadding[0] === 'auto' ? legendRange.top + appendPadding[0] * 2 : userPadding[0], userPadding[1] === 'auto' ? legendRange.right + appendPadding[1] : userPadding[1], userPadding[2] === 'auto' ? legendRange.bottom + appendPadding[2] : userPadding[2], userPadding[3] === 'auto' ? legendRange.left + appendPadding[3] : userPadding[3]];
- if (coord.isPolar) {
- var circleAxis = axes.circle;
- if (circleAxis) {
- var maxHeight = circleAxis.maxHeight,
- maxWidth = circleAxis.maxWidth,
- labelOffset = circleAxis.labelOffset;
- padding[0] += maxHeight + labelOffset;
- padding[1] += maxWidth + labelOffset;
- padding[2] += maxHeight + labelOffset;
- padding[3] += maxWidth + labelOffset;
- }
- } else {
- if (axes.right && userPadding[1] === 'auto') {
- var _axes$right = axes.right,
- _maxWidth = _axes$right.maxWidth,
- _labelOffset = _axes$right.labelOffset;
- padding[1] += _maxWidth + _labelOffset;
- }
- if (axes.left && userPadding[3] === 'auto') {
- var _axes$left = axes.left,
- _maxWidth2 = _axes$left.maxWidth,
- _labelOffset2 = _axes$left.labelOffset;
- padding[3] += _maxWidth2 + _labelOffset2;
- }
- if (axes.bottom && userPadding[2] === 'auto') {
- var _axes$bottom = axes.bottom,
- _maxHeight = _axes$bottom.maxHeight,
- _labelOffset3 = _axes$bottom.labelOffset;
- padding[2] += _maxHeight + _labelOffset3;
- }
- }
- chart.set('_padding', padding);
- chart._updateLayout(padding);
- }
- Util.each(axes, function (axis) {
- var type = axis.type,
- grid = axis.grid,
- verticalScale = axis.verticalScale,
- ticks = axis.ticks,
- dimType = axis.dimType,
- position = axis.position,
- index = axis.index;
- var appendCfg;
- if (coord.isPolar) {
- if (type === 'Line') {
- appendCfg = self._getRadiusCfg(coord);
- } else if (type === 'Circle') {
- appendCfg = self._getCircleCfg(coord);
- }
- } else {
- appendCfg = self._getLineCfg(coord, dimType, position);
- }
- if (grid && verticalScale) {
- var gridPoints = [];
- var verticalTicks = formatTicks(verticalScale.getTicks());
- Util.each(ticks, function (tick) {
- var subPoints = [];
- Util.each(verticalTicks, function (verticalTick) {
- var x = dimType === 'x' ? tick.value : verticalTick.value;
- var y = dimType === 'x' ? verticalTick.value : tick.value;
- if (x >= 0 && x <= 1 && y >= 0 && y <= 1) {
- var point = coord.convertPoint({
- x: x,
- y: y
- });
- subPoints.push(point);
- }
- });
- gridPoints.push({
- points: subPoints,
- _id: 'axis-' + dimType + index + '-grid-' + tick.tickValue
- });
- });
- axis.gridPoints = gridPoints;
- if (coord.isPolar) {
- axis.center = coord.center;
- axis.startAngle = coord.startAngle;
- axis.endAngle = coord.endAngle;
- }
- }
- appendCfg._id = 'axis-' + dimType;
- if (!Util.isNil(index)) {
- appendCfg._id = 'axis-' + dimType + index;
- }
- new Axis[type](Util.mix(axis, appendCfg));
- });
- };
- _proto.clear = function clear() {
- this.axes = {};
- this.frontPlot.clear();
- this.backPlot.clear();
- };
- return AxisController;
- }();
- module.exports = AxisController;
|