| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import { __read, __spreadArray } from "tslib";
- import { defined, getLocalBBox, hide } from '../../../util';
- import { isAxisHorizontal, isAxisVertical } from '../guides/line';
- import { boundTest } from '../utils/test';
- import { getBBox } from '../utils/bounds';
- var methods = {
- parity: function (items, _a) {
- var _b = _a.seq, seq = _b === void 0 ? 2 : _b;
- return items.filter(function (item, i) { return (i % seq ? (hide(item), false) : true); });
- },
- };
- var filterDefined = function (arr) { return arr.filter(defined); };
- export default function hideLabels(labels, overlapCfg, attr, utils) {
- var count = labels.length;
- var keepHeader = overlapCfg.keepHeader, keepTail = overlapCfg.keepTail;
- if (count <= 1 || (count === 2 && keepHeader && keepTail))
- return;
- var parityHide = methods.parity;
- var reset = function (els) { return (els.forEach(utils.show), els); };
- var seq = 2;
- var source = labels.slice();
- var target = labels.slice();
- var minLabelWidth = Math.min.apply(Math, __spreadArray([1], __read(labels.map(function (d) { return getBBox(d).width; })), false));
- if (attr.type === 'linear' && (isAxisHorizontal(attr) || isAxisVertical(attr))) {
- var minX = getLocalBBox(labels[0]).left;
- var maxX = getLocalBBox(labels[count - 1]).right;
- var distance = Math.abs(maxX - minX) || 1;
- seq = Math.max(Math.floor((count * minLabelWidth) / distance), seq);
- }
- var first;
- var last;
- if (keepHeader)
- first = source.splice(0, 1)[0];
- if (keepTail) {
- last = source.splice(-1, 1)[0];
- source.reverse();
- }
- reset(source);
- while (seq < labels.length &&
- boundTest(filterDefined(last ? __spreadArray(__spreadArray([last], __read(target), false), [first], false) : __spreadArray([first], __read(target), false)), attr, overlapCfg === null || overlapCfg === void 0 ? void 0 : overlapCfg.margin).length) {
- // 每两步,减一个 (不需要考虑保留 first)
- if (last && !first && seq % 2 === 0) {
- var rest = source.splice(0, 1);
- rest.forEach(utils.hide);
- }
- else if (last && first) {
- // 如果有 first 的话,每一步,减一个(增加迭代次数)
- var rest = source.splice(0, 1);
- rest.forEach(utils.hide);
- }
- target = parityHide(reset(source), { seq: seq });
- seq++;
- }
- }
- //# sourceMappingURL=autoHide.js.map
|