@antv/g2plot
Version:
G2 Plot, a market of plots built with the Grammar of Graphics'
93 lines • 3.2 kB
JavaScript
import { __assign } from "tslib";
import { BBox, Text } from '@antv/g';
import * as _ from '@antv/util';
import { breakText } from '../util/common';
/**
* 图表的文字描述,一般用于生成图表的标题和副标题
*/
var TextDescription = /** @class */ (function () {
function TextDescription(cfg) {
this.position = 'top';
this.destroyed = false;
_.assign(this, cfg);
this._init();
}
TextDescription.prototype.getBBox = function () {
var _this = this;
if (this.shape) {
var bbox = this.shape.getBBox();
if (this.index === 0) {
return bbox;
}
var padding_1 = this.plot.theme.description.padding;
if (_.isArray(padding_1)) {
_.each(padding_1, function (it, index) {
if (typeof padding_1[index] === 'function') {
padding_1[index] = padding_1[index](_this.plot.options.legend.position);
}
});
}
return new BBox(bbox.maxX, bbox.minY, bbox.width, bbox.height + padding_1[2]);
}
return null;
};
TextDescription.prototype.clear = function () {
if (this.shape) {
this.shape.attr('text', '');
}
};
TextDescription.prototype.destroy = function () {
if (this.shape) {
this.shape.remove();
}
this.destroyed = true;
};
TextDescription.prototype._init = function () {
var content = this._textWrapper();
this.shape = this.container.addShape('text', {
attrs: _.mix({
x: this.leftMargin,
y: this.topMargin,
text: content,
}, this.style),
});
this.shape.name = this.name;
};
/**
* 当text过长时,默认换行
* 1. 注意初始text带换行符的场景
*/
TextDescription.prototype._textWrapper = function () {
var width = this.wrapperWidth;
var style = this.style;
var textContent = this.text;
var tShape = new Text({
attrs: __assign({ text: '', x: 0, y: 0 }, style),
});
var textArr = textContent.split('\n');
var wrappedTextArr = textArr.map(function (wrappedText) {
var text = '';
var chars = wrappedText.split('');
var breakIndex = [];
for (var i = 0; i < chars.length; i++) {
var item = chars[i];
tShape.attr('text', (text += item));
var currentWidth = tShape.getBBox().width - 1;
if (currentWidth > width) {
// 如果是第一个字符就大于宽度不做任何换行处理
if (i === 0) {
break;
}
breakIndex.push(i);
text = '';
}
}
return breakText(chars, breakIndex);
});
tShape.remove();
return wrappedTextArr.join('\n');
};
return TextDescription;
}());
export default TextDescription;
//# sourceMappingURL=description.js.map