item-series.src.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /**
  2. * @license Highcharts JS v6.1.0 (2018-04-13)
  3. *
  4. * Item series type for Highcharts
  5. *
  6. * (c) 2010-2017 Torstein Honsi
  7. *
  8. * License: www.highcharts.com/license
  9. */
  10. 'use strict';
  11. (function (factory) {
  12. if (typeof module === 'object' && module.exports) {
  13. module.exports = factory;
  14. } else {
  15. factory(Highcharts);
  16. }
  17. }(function (Highcharts) {
  18. (function (H) {
  19. /**
  20. * (c) 2009-2017 Torstein Honsi
  21. *
  22. * Item series type for Highcharts
  23. *
  24. * License: www.highcharts.com/license
  25. */
  26. /**
  27. * @todo
  28. * - Check update, remove etc.
  29. * - Custom icons like persons, carts etc. Either as images, font icons or
  30. * Highcharts symbols.
  31. */
  32. var each = H.each,
  33. extend = H.extend,
  34. pick = H.pick,
  35. seriesType = H.seriesType;
  36. seriesType('item', 'column', {
  37. itemPadding: 0.2,
  38. marker: {
  39. symbol: 'circle',
  40. states: {
  41. hover: {},
  42. select: {}
  43. }
  44. }
  45. }, {
  46. drawPoints: function () {
  47. var series = this,
  48. renderer = series.chart.renderer,
  49. seriesMarkerOptions = this.options.marker;
  50. each(this.points, function (point) {
  51. var yPos,
  52. attr,
  53. graphics,
  54. itemY,
  55. pointAttr,
  56. pointMarkerOptions = point.marker || {},
  57. symbol = (
  58. pointMarkerOptions.symbol ||
  59. seriesMarkerOptions.symbol
  60. ),
  61. size,
  62. yTop;
  63. point.graphics = graphics = point.graphics || {};
  64. pointAttr = point.pointAttr ?
  65. (
  66. point.pointAttr[point.selected ? 'selected' : ''] ||
  67. series.pointAttr['']
  68. ) :
  69. series.pointAttribs(point, point.selected && 'select');
  70. delete pointAttr.r;
  71. if (point.y !== null) {
  72. if (!point.graphic) {
  73. point.graphic = renderer.g('point').add(series.group);
  74. }
  75. itemY = point.y;
  76. yTop = pick(point.stackY, point.y);
  77. size = Math.min(
  78. point.pointWidth,
  79. (
  80. series.yAxis.transA *
  81. (1 - series.options.itemPadding)
  82. )
  83. );
  84. for (yPos = yTop; yPos > yTop - point.y; yPos--) {
  85. attr = {
  86. x: point.barX + point.pointWidth / 2 - size / 2,
  87. y: series.yAxis.toPixels(yPos, true) - size / 2,
  88. width: size,
  89. height: size
  90. };
  91. if (graphics[itemY]) {
  92. graphics[itemY].animate(attr);
  93. } else {
  94. graphics[itemY] = renderer.symbol(symbol)
  95. .attr(extend(attr, pointAttr))
  96. .add(point.graphic);
  97. }
  98. graphics[itemY].isActive = true;
  99. itemY--;
  100. }
  101. }
  102. H.objectEach(graphics, function (graphic, key) {
  103. if (!graphic.isActive) {
  104. graphic.destroy();
  105. delete graphic[key];
  106. } else {
  107. graphic.isActive = false;
  108. }
  109. });
  110. });
  111. }
  112. });
  113. }(Highcharts));
  114. }));