autoHide.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var tslib_1 = require("tslib");
  4. var util_1 = require("../../../util");
  5. var line_1 = require("../guides/line");
  6. var test_1 = require("../utils/test");
  7. var bounds_1 = require("../utils/bounds");
  8. var methods = {
  9. parity: function (items, _a) {
  10. var _b = _a.seq, seq = _b === void 0 ? 2 : _b;
  11. return items.filter(function (item, i) { return (i % seq ? ((0, util_1.hide)(item), false) : true); });
  12. },
  13. };
  14. var filterDefined = function (arr) { return arr.filter(util_1.defined); };
  15. function hideLabels(labels, overlapCfg, attr, utils) {
  16. var count = labels.length;
  17. var keepHeader = overlapCfg.keepHeader, keepTail = overlapCfg.keepTail;
  18. if (count <= 1 || (count === 2 && keepHeader && keepTail))
  19. return;
  20. var parityHide = methods.parity;
  21. var reset = function (els) { return (els.forEach(utils.show), els); };
  22. var seq = 2;
  23. var source = labels.slice();
  24. var target = labels.slice();
  25. var minLabelWidth = Math.min.apply(Math, tslib_1.__spreadArray([1], tslib_1.__read(labels.map(function (d) { return (0, bounds_1.getBBox)(d).width; })), false));
  26. if (attr.type === 'linear' && ((0, line_1.isAxisHorizontal)(attr) || (0, line_1.isAxisVertical)(attr))) {
  27. var minX = (0, util_1.getLocalBBox)(labels[0]).left;
  28. var maxX = (0, util_1.getLocalBBox)(labels[count - 1]).right;
  29. var distance = Math.abs(maxX - minX) || 1;
  30. seq = Math.max(Math.floor((count * minLabelWidth) / distance), seq);
  31. }
  32. var first;
  33. var last;
  34. if (keepHeader)
  35. first = source.splice(0, 1)[0];
  36. if (keepTail) {
  37. last = source.splice(-1, 1)[0];
  38. source.reverse();
  39. }
  40. reset(source);
  41. while (seq < labels.length &&
  42. (0, test_1.boundTest)(filterDefined(last ? tslib_1.__spreadArray(tslib_1.__spreadArray([last], tslib_1.__read(target), false), [first], false) : tslib_1.__spreadArray([first], tslib_1.__read(target), false)), attr, overlapCfg === null || overlapCfg === void 0 ? void 0 : overlapCfg.margin).length) {
  43. // 每两步,减一个 (不需要考虑保留 first)
  44. if (last && !first && seq % 2 === 0) {
  45. var rest = source.splice(0, 1);
  46. rest.forEach(utils.hide);
  47. }
  48. else if (last && first) {
  49. // 如果有 first 的话,每一步,减一个(增加迭代次数)
  50. var rest = source.splice(0, 1);
  51. rest.forEach(utils.hide);
  52. }
  53. target = parityHide(reset(source), { seq: seq });
  54. seq++;
  55. }
  56. }
  57. exports.default = hideLabels;
  58. //# sourceMappingURL=autoHide.js.map