highcharts-rails 5.0.12 → 5.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.markdown +59 -0
  3. data/app/assets/javascripts/highcharts.js +6250 -788
  4. data/app/assets/javascripts/highcharts/highcharts-3d.js +210 -25
  5. data/app/assets/javascripts/highcharts/highcharts-more.js +908 -22
  6. data/app/assets/javascripts/highcharts/modules/accessibility.js +272 -64
  7. data/app/assets/javascripts/highcharts/modules/annotations.js +1 -1
  8. data/app/assets/javascripts/highcharts/modules/boost.js +89 -66
  9. data/app/assets/javascripts/highcharts/modules/broken-axis.js +65 -4
  10. data/app/assets/javascripts/highcharts/modules/data.js +1 -1
  11. data/app/assets/javascripts/highcharts/modules/drilldown.js +234 -17
  12. data/app/assets/javascripts/highcharts/modules/exporting.js +508 -69
  13. data/app/assets/javascripts/highcharts/modules/funnel.js +129 -8
  14. data/app/assets/javascripts/highcharts/modules/grid-axis.js +1 -1
  15. data/app/assets/javascripts/highcharts/modules/heatmap.js +361 -44
  16. data/app/assets/javascripts/highcharts/modules/no-data-to-display.js +64 -1
  17. data/app/assets/javascripts/highcharts/modules/offline-exporting.js +44 -44
  18. data/app/assets/javascripts/highcharts/modules/overlapping-datalabels.js +26 -3
  19. data/app/assets/javascripts/highcharts/modules/series-label.js +19 -1
  20. data/app/assets/javascripts/highcharts/modules/solid-gauge.js +14 -5
  21. data/app/assets/javascripts/highcharts/modules/stock.js +1122 -86
  22. data/app/assets/javascripts/highcharts/modules/treemap.js +265 -43
  23. data/app/assets/javascripts/highcharts/modules/xrange-series.js +1 -1
  24. data/lib/highcharts/version.rb +1 -1
  25. metadata +1 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v5.0.12 (2017-05-24)
2
+ * @license Highcharts JS v5.0.13 (2017-07-27)
3
3
  * Highcharts funnel module
4
4
  *
5
5
  * (c) 2010-2017 Torstein Honsi
@@ -32,27 +32,127 @@
32
32
  each = Highcharts.each;
33
33
 
34
34
 
35
- seriesType('funnel', 'pie', {
35
+ seriesType('funnel', 'pie',
36
+ /**
37
+ * Funnel charts are a type of chart often used to visualize stages in a sales
38
+ * project, where the top are the initial stages with the most clients.
39
+ * It requires that the modules/funnel.js file is loaded.
40
+ *
41
+ * @sample highcharts/demo/funnel/ Funnel demo
42
+ * @extends {plotOptions.pie}
43
+ * @optionparent plotOptions.funnel
44
+ */
45
+ {
46
+
47
+ /**
48
+ */
36
49
  animation: false,
50
+
51
+ /**
52
+ * The center of the series. By default, it is centered in the middle
53
+ * of the plot area, so it fills the plot area height.
54
+ *
55
+ * @type {Array<String|Number>}
56
+ * @default ["50%", "50%"]
57
+ * @since 3.0
58
+ * @product highcharts
59
+ */
37
60
  center: ['50%', '50%'],
61
+
62
+ /**
63
+ * The width of the funnel compared to the width of the plot area,
64
+ * or the pixel width if it is a number.
65
+ *
66
+ * @type {Number|String}
67
+ * @default 90%
68
+ * @since 3.0
69
+ * @product highcharts
70
+ */
38
71
  width: '90%',
72
+
73
+ /**
74
+ * The width of the neck, the lower part of the funnel. A number defines
75
+ * pixel width, a percentage string defines a percentage of the plot
76
+ * area width.
77
+ *
78
+ * @type {Number|String}
79
+ * @sample {highcharts} highcharts/demo/funnel/ Funnel demo
80
+ * @default 30%
81
+ * @since 3.0
82
+ * @product highcharts
83
+ */
39
84
  neckWidth: '30%',
85
+
86
+ /**
87
+ * The height of the funnel or pyramid. If it is a number it defines
88
+ * the pixel height, if it is a percentage string it is the percentage
89
+ * of the plot area height.
90
+ *
91
+ * @type {Number|String}
92
+ * @sample {highcharts} highcharts/demo/funnel/ Funnel demo
93
+ * @since 3.0
94
+ * @product highcharts
95
+ */
40
96
  height: '100%',
97
+
98
+ /**
99
+ * The height of the neck, the lower part of the funnel. A number defines
100
+ * pixel width, a percentage string defines a percentage of the plot
101
+ * area height.
102
+ *
103
+ * @type {Number|String}
104
+ * @default 25%
105
+ * @product highcharts
106
+ */
41
107
  neckHeight: '25%',
108
+
109
+ /**
110
+ * A reversed funnel has the widest area down. A reversed funnel with
111
+ * no neck width and neck height is a pyramid.
112
+ *
113
+ * @type {Boolean}
114
+ * @default false
115
+ * @since 3.0.10
116
+ * @product highcharts
117
+ */
42
118
  reversed: false,
119
+
120
+ /**
121
+ */
43
122
  size: true, // to avoid adapting to data label size in Pie.drawDataLabels
44
123
 
45
124
 
46
125
  // Presentational
126
+
127
+ /**
128
+ */
47
129
  dataLabels: {
48
130
  //position: 'right',
131
+
132
+ /**
133
+ */
49
134
  connectorWidth: 1
50
135
  //connectorColor: null
51
136
  },
137
+
138
+ /**
139
+ */
52
140
  states: {
141
+
142
+ /**
143
+ */
53
144
  select: {
145
+
146
+ /**
147
+ */
54
148
  color: '#cccccc',
149
+
150
+ /**
151
+ */
55
152
  borderColor: '#000000',
153
+
154
+ /**
155
+ */
56
156
  shadow: false
57
157
  }
58
158
  }
@@ -293,13 +393,34 @@
293
393
 
294
394
  /**
295
395
  * Pyramid series type.
296
- * A pyramid series is a special type of funnel, without neck and reversed by default.
297
396
  */
298
- seriesType('pyramid', 'funnel', {
299
- neckWidth: '0%',
300
- neckHeight: '0%',
301
- reversed: true
302
- });
397
+ seriesType('pyramid', 'funnel',
398
+ /**
399
+ * A pyramid series is a special type of funnel, without neck and reversed by default.
400
+ * @extends funnel
401
+ * @optionparent plotOptions.pyramid
402
+ */
403
+ {
404
+
405
+ /**
406
+ */
407
+ neckWidth: '0%',
408
+
409
+ /**
410
+ */
411
+ neckHeight: '0%',
412
+
413
+ /**
414
+ * The pyramid is reversed by default, as opposed to the funnel, which
415
+ * shares the layout engine, and is not reversed.
416
+ *
417
+ * @type {Boolean}
418
+ * @default true
419
+ * @since 3.0.10
420
+ * @product highcharts
421
+ */
422
+ reversed: true
423
+ });
303
424
 
304
425
  }(Highcharts));
305
426
  }));
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v5.0.12 (2017-05-24)
2
+ * @license Highcharts JS v5.0.13 (2017-07-27)
3
3
  * GridAxis
4
4
  *
5
5
  * (c) 2016 Lars A. V. Cabrera
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v5.0.12 (2017-05-24)
2
+ * @license Highcharts JS v5.0.13 (2017-07-27)
3
3
  *
4
4
  * (c) 2009-2017 Torstein Honsi
5
5
  *
@@ -41,31 +41,198 @@
41
41
  };
42
42
  extend(ColorAxis.prototype, Axis.prototype);
43
43
  extend(ColorAxis.prototype, {
44
+ /**
45
+ * @extends {xAxis}
46
+ * @optionparent colorAxis
47
+ */
44
48
  defaultColorAxisOptions: {
49
+
50
+ /**
51
+ */
45
52
  lineWidth: 0,
53
+
54
+ /**
55
+ * Padding of the min value relative to the length of the axis. A
56
+ * padding of 0.05 will make a 100px axis 5px longer.
57
+ *
58
+ * @type {Number}
59
+ * @product highmaps
60
+ */
46
61
  minPadding: 0,
62
+
63
+ /**
64
+ * Padding of the max value relative to the length of the axis. A
65
+ * padding of 0.05 will make a 100px axis 5px longer.
66
+ *
67
+ * @type {Number}
68
+ * @product highmaps
69
+ */
47
70
  maxPadding: 0,
71
+
72
+ /**
73
+ * The width of the grid lines extending from the axis across the
74
+ * gradient of a scalar color axis.
75
+ *
76
+ * @type {Number}
77
+ * @sample {highmaps} maps/coloraxis/gridlines/ Grid lines demonstrated
78
+ * @default 1
79
+ * @product highmaps
80
+ */
48
81
  gridLineWidth: 1,
82
+
83
+ /**
84
+ * If [tickInterval](#colorAxis.tickInterval) is `null` this option
85
+ * sets the approximate pixel interval of the tick marks.
86
+ *
87
+ * @type {Number}
88
+ * @default 72
89
+ * @product highmaps
90
+ */
49
91
  tickPixelInterval: 72,
92
+
93
+ /**
94
+ * Whether to force the axis to start on a tick. Use this option with
95
+ * the `maxPadding` option to control the axis start.
96
+ *
97
+ * @type {Boolean}
98
+ * @default true
99
+ * @product highmaps
100
+ */
50
101
  startOnTick: true,
102
+
103
+ /**
104
+ * Whether to force the axis to end on a tick. Use this option with
105
+ * the [maxPadding](#colorAxis.maxPadding) option to control the axis
106
+ * end.
107
+ *
108
+ * @type {Boolean}
109
+ * @default true
110
+ * @product highmaps
111
+ */
51
112
  endOnTick: true,
113
+
114
+ /**
115
+ */
52
116
  offset: 0,
117
+
118
+ /**
119
+ * The triangular marker on a scalar color axis that points to the
120
+ * value of the hovered area. To disable the marker, set `marker:
121
+ * null`.
122
+ *
123
+ * @type {Object}
124
+ * @sample {highmaps} maps/coloraxis/marker/ Black marker
125
+ * @product highmaps
126
+ */
53
127
  marker: {
128
+
129
+ /**
130
+ * Animation for the marker as it moves between values. Set to `false`
131
+ * to disable animation. Defaults to `{ duration: 50 }`.
132
+ *
133
+ * @type {Object|Boolean}
134
+ * @product highmaps
135
+ */
54
136
  animation: {
137
+
138
+ /**
139
+ */
55
140
  duration: 50
56
141
  },
142
+
143
+ /**
144
+ */
57
145
  width: 0.01,
58
146
 
147
+
148
+ /**
149
+ * The color of the marker.
150
+ *
151
+ * @type {Color}
152
+ * @default #999999
153
+ * @product highmaps
154
+ */
59
155
  color: '#999999'
60
156
 
61
157
  },
158
+
159
+ /**
160
+ * The axis labels show the number for each tick.
161
+ *
162
+ * For more live examples on label options, see [xAxis.labels in the
163
+ * Highcharts API.](/highcharts#xAxis.labels)
164
+ *
165
+ * @type {Object}
166
+ * @extends xAxis.labels
167
+ * @product highmaps
168
+ */
62
169
  labels: {
170
+
171
+ /**
172
+ * How to handle overflowing labels on horizontal axis. Can be undefined
173
+ * or "justify". If "justify", labels will not render outside the
174
+ * plot area. If there is room to move it, it will be aligned to
175
+ * the edge, else it will be removed.
176
+ *
177
+ * @validvalue [null, "justify"]
178
+ * @type {String}
179
+ * @default justify
180
+ * @product highmaps
181
+ */
63
182
  overflow: 'justify',
183
+
184
+ /**
185
+ */
64
186
  rotation: 0
65
187
  },
188
+
189
+ /**
190
+ * The color to represent the minimum of the color axis. Unless [dataClasses](#colorAxis.
191
+ * dataClasses) or [stops](#colorAxis.stops) are set, the gradient
192
+ * starts at this value.
193
+ *
194
+ * If dataClasses are set, the color is based on minColor and maxColor
195
+ * unless a color is set for each data class, or the [dataClassColor](#colorAxis.
196
+ * dataClassColor) is set.
197
+ *
198
+ * @type {Color}
199
+ * @sample {highmaps} maps/coloraxis/mincolor-maxcolor/ Min and max colors on scalar (gradient) axis
200
+ * @sample {highmaps} maps/coloraxis/mincolor-maxcolor-dataclasses/ On data classes
201
+ * @default #e6ebf5
202
+ * @product highmaps
203
+ */
66
204
  minColor: '#e6ebf5',
205
+
206
+ /**
207
+ * The color to represent the maximum of the color axis. Unless [dataClasses](#colorAxis.
208
+ * dataClasses) or [stops](#colorAxis.stops) are set, the gradient
209
+ * ends at this value.
210
+ *
211
+ * If dataClasses are set, the color is based on minColor and maxColor
212
+ * unless a color is set for each data class, or the [dataClassColor](#colorAxis.
213
+ * dataClassColor) is set.
214
+ *
215
+ * @type {Color}
216
+ * @sample {highmaps} maps/coloraxis/mincolor-maxcolor/ Min and max colors on scalar (gradient) axis
217
+ * @sample {highmaps} maps/coloraxis/mincolor-maxcolor-dataclasses/ On data classes
218
+ * @default #003399
219
+ * @product highmaps
220
+ */
67
221
  maxColor: '#003399',
222
+
223
+ /**
224
+ */
68
225
  tickLength: 5,
226
+
227
+ /**
228
+ * Whether to display the colorAxis in the legend.
229
+ *
230
+ * @type {Boolean}
231
+ * @see [heatmap.showInLegend](#series<heatmap>.showInLegend)
232
+ * @default true
233
+ * @since 4.2.7
234
+ * @product highmaps
235
+ */
69
236
  showInLegend: true
70
237
  },
71
238
 
@@ -100,7 +267,7 @@
100
267
  Axis.prototype.init.call(this, chart, options);
101
268
 
102
269
  // Base init() pushes it to the xAxis array, now pop it again
103
- //chart[this.isXAxis ? 'xAxis' : 'yAxis'].pop();
270
+ // chart[this.isXAxis ? 'xAxis' : 'yAxis'].pop();
104
271
 
105
272
  // Prepare data classes
106
273
  if (userOptions.dataClasses) {
@@ -131,30 +298,44 @@
131
298
 
132
299
  dataClass = merge(dataClass);
133
300
  dataClasses.push(dataClass);
134
- if (!dataClass.color) {
135
- if (options.dataClassColor === 'category') {
136
301
 
137
- colors = chart.options.colors;
138
- colorCount = colors.length;
139
- dataClass.color = colors[colorCounter];
140
302
 
141
- dataClass.colorIndex = colorCounter;
303
+ if (dataClass.color) {
304
+ return;
305
+ }
142
306
 
143
- // increase and loop back to zero
144
- colorCounter++;
145
- if (colorCounter === colorCount) {
146
- colorCounter = 0;
147
- }
148
- } else {
149
- dataClass.color = color(options.minColor).tweenTo(
150
- color(options.maxColor),
151
- len < 2 ? 0.5 : i / (len - 1) // #3219
152
- );
307
+ if (options.dataClassColor === 'category') {
308
+
309
+ colors = chart.options.colors;
310
+ colorCount = colors.length;
311
+ dataClass.color = colors[colorCounter];
312
+
313
+ dataClass.colorIndex = colorCounter;
314
+
315
+ // increase and loop back to zero
316
+ colorCounter++;
317
+ if (colorCounter === colorCount) {
318
+ colorCounter = 0;
153
319
  }
320
+ } else {
321
+ dataClass.color = color(options.minColor).tweenTo(
322
+ color(options.maxColor),
323
+ len < 2 ? 0.5 : i / (len - 1) // #3219
324
+ );
154
325
  }
155
326
  });
156
327
  },
157
328
 
329
+ /**
330
+ * Override so that ticks are not added in data class axes (#6914)
331
+ */
332
+ setTickPositions: function() {
333
+ if (!this.dataClasses) {
334
+ return Axis.prototype.setTickPositions.call(this);
335
+ }
336
+ },
337
+
338
+
158
339
  initStops: function() {
159
340
  this.stops = this.options.stops || [
160
341
  [0, this.options.minColor],
@@ -195,8 +376,13 @@
195
376
  this.len = this.horiz ? width : height;
196
377
  this.pos = this.horiz ? x : y;
197
378
  } else {
198
- // Fake length for disabled legend to avoid tick issues and such (#5205)
199
- this.len = (this.horiz ? legendOptions.symbolWidth : legendOptions.symbolHeight) || this.defaultLegendLength;
379
+ // Fake length for disabled legend to avoid tick issues
380
+ // and such (#5205)
381
+ this.len = (
382
+ this.horiz ?
383
+ legendOptions.symbolWidth :
384
+ legendOptions.symbolHeight
385
+ ) || this.defaultLegendLength;
200
386
  }
201
387
  },
202
388
 
@@ -226,8 +412,13 @@
226
412
  dataClass = dataClasses[i];
227
413
  from = dataClass.from;
228
414
  to = dataClass.to;
229
- if ((from === undefined || value >= from) && (to === undefined || value <= to)) {
415
+ if (
416
+ (from === undefined || value >= from) &&
417
+ (to === undefined || value <= to)
418
+ ) {
419
+
230
420
  color = dataClass.color;
421
+
231
422
  if (point) {
232
423
  point.dataClass = i;
233
424
  point.colorIndex = dataClass.colorIndex;
@@ -260,7 +451,8 @@
260
451
  },
261
452
 
262
453
  /**
263
- * Override the getOffset method to add the whole axis groups inside the legend.
454
+ * Override the getOffset method to add the whole axis groups inside
455
+ * the legend.
264
456
  */
265
457
  getOffset: function() {
266
458
  var group = this.legendGroup,
@@ -316,8 +508,14 @@
316
508
  var padding = legend.padding,
317
509
  legendOptions = legend.options,
318
510
  horiz = this.horiz,
319
- width = pick(legendOptions.symbolWidth, horiz ? this.defaultLegendLength : 12),
320
- height = pick(legendOptions.symbolHeight, horiz ? 12 : this.defaultLegendLength),
511
+ width = pick(
512
+ legendOptions.symbolWidth,
513
+ horiz ? this.defaultLegendLength : 12
514
+ ),
515
+ height = pick(
516
+ legendOptions.symbolHeight,
517
+ horiz ? 12 : this.defaultLegendLength
518
+ ),
321
519
  labelPadding = pick(legendOptions.labelPadding, horiz ? 16 : 30),
322
520
  itemDistance = pick(legendOptions.itemDistance, 10);
323
521
 
@@ -334,7 +532,8 @@
334
532
  }).add(item.legendGroup);
335
533
 
336
534
  // Set how much space this legend item takes up
337
- this.legendItemWidth = width + padding + (horiz ? itemDistance : labelPadding);
535
+ this.legendItemWidth = width + padding +
536
+ (horiz ? itemDistance : labelPadding);
338
537
  this.legendItemHeight = height + padding + (horiz ? labelPadding : 0);
339
538
  },
340
539
  /**
@@ -391,8 +590,25 @@
391
590
  }
392
591
  },
393
592
  getPlotLinePath: function(a, b, c, d, pos) {
394
- return isNumber(pos) ? // crosshairs only // #3969 pos can be 0 !!
395
- (this.horiz ? ['M', pos - 4, this.top - 6, 'L', pos + 4, this.top - 6, pos, this.top, 'Z'] : ['M', this.left, pos, 'L', this.left - 6, pos + 6, this.left - 6, pos - 6, 'Z']) :
593
+ // crosshairs only
594
+ return isNumber(pos) ? // pos can be 0 (#3969)
595
+ (
596
+ this.horiz ? [
597
+ 'M',
598
+ pos - 4, this.top - 6,
599
+ 'L',
600
+ pos + 4, this.top - 6,
601
+ pos, this.top,
602
+ 'Z'
603
+ ] : [
604
+ 'M',
605
+ this.left, pos,
606
+ 'L',
607
+ this.left - 6, pos + 6,
608
+ this.left - 6, pos - 6,
609
+ 'Z'
610
+ ]
611
+ ) :
396
612
  Axis.prototype.getPlotLinePath.call(this, a, b, c, d);
397
613
  },
398
614
 
@@ -401,10 +617,12 @@
401
617
  legend = chart.legend;
402
618
 
403
619
  each(this.series, function(series) {
404
- series.isDirtyData = true; // Needed for Axis.update when choropleth colors change
620
+ // Needed for Axis.update when choropleth colors change
621
+ series.isDirtyData = true;
405
622
  });
406
623
 
407
- // When updating data classes, destroy old items and make sure new ones are created (#3207)
624
+ // When updating data classes, destroy old items and make sure new ones
625
+ // are created (#3207)
408
626
  if (newOptions.dataClasses && legend.allItems) {
409
627
  each(legend.allItems, function(item) {
410
628
  if (item.isDataClass && item.legendGroup) {
@@ -414,8 +632,8 @@
414
632
  chart.isDirtyLegend = true;
415
633
  }
416
634
 
417
- // Keep the options structure updated for export. Unlike xAxis and yAxis, the colorAxis is
418
- // not an array. (#3207)
635
+ // Keep the options structure updated for export. Unlike xAxis and
636
+ // yAxis, the colorAxis is not an array. (#3207)
419
637
  chart.options[this.coll] = merge(this.userOptions, newOptions);
420
638
 
421
639
  Axis.prototype.update.call(this, newOptions, redraw);
@@ -453,7 +671,8 @@
453
671
  from = dataClass.from,
454
672
  to = dataClass.to;
455
673
 
456
- // Assemble the default name. This can be overridden by legend.options.labelFormatter
674
+ // Assemble the default name. This can be overridden
675
+ // by legend.options.labelFormatter
457
676
  name = '';
458
677
  if (from === undefined) {
459
678
  name = '< ';
@@ -533,8 +752,8 @@
533
752
 
534
753
 
535
754
  /**
536
- * Wrap the legend getAllItems method to add the color axis. This also removes the
537
- * axis' own series to prevent them from showing up individually.
755
+ * Wrap the legend getAllItems method to add the color axis. This also removes
756
+ * the axis' own series to prevent them from showing up individually.
538
757
  */
539
758
  wrap(Legend.prototype, 'getAllItems', function(proceed) {
540
759
  var allItems = [],
@@ -544,7 +763,9 @@
544
763
  if (colorAxis.options.showInLegend) {
545
764
  // Data classes
546
765
  if (colorAxis.options.dataClasses) {
547
- allItems = allItems.concat(colorAxis.getDataClassLegendSymbols());
766
+ allItems = allItems.concat(
767
+ colorAxis.getDataClassLegendSymbols()
768
+ );
548
769
  // Gradient legend
549
770
  } else {
550
771
  // Add this axis on top
@@ -570,6 +791,15 @@
570
791
  }
571
792
  });
572
793
 
794
+ // Updates in the legend need to be reflected in the color axis (6888)
795
+ wrap(Legend.prototype, 'update', function(proceed) {
796
+ proceed.apply(this, [].slice.call(arguments, 1));
797
+
798
+ if (this.chart.colorAxis[0]) {
799
+ this.chart.colorAxis[0].update({}, arguments[2]);
800
+ }
801
+ });
802
+
573
803
  }(Highcharts));
574
804
  (function(H) {
575
805
  /**
@@ -587,7 +817,8 @@
587
817
  */
588
818
  H.colorPointMixin = {
589
819
  /**
590
- * Color points have a value option that determines whether or not it is a null point
820
+ * Color points have a value option that determines whether or not it is
821
+ * a null point
591
822
  */
592
823
  isValid: function() {
593
824
  return this.value !== null;
@@ -631,7 +862,8 @@
631
862
 
632
863
 
633
864
  /**
634
- * In choropleth maps, the color is a result of the value, so this needs translation too
865
+ * In choropleth maps, the color is a result of the value, so this needs
866
+ * translation too
635
867
  */
636
868
  translateColors: function() {
637
869
  var series = this,
@@ -644,7 +876,13 @@
644
876
  color;
645
877
 
646
878
  color = point.options.color ||
647
- (point.isNull ? nullColor : (colorAxis && value !== undefined) ? colorAxis.toColor(value, point) : point.color || series.color);
879
+ (
880
+ point.isNull ?
881
+ nullColor :
882
+ (colorAxis && value !== undefined) ?
883
+ colorAxis.toColor(value, point) :
884
+ point.color || series.color
885
+ );
648
886
 
649
887
  if (color) {
650
888
  point.color = color;
@@ -683,40 +921,104 @@
683
921
  seriesTypes = H.seriesTypes;
684
922
 
685
923
  // The Heatmap series type
924
+
925
+ /**
926
+ * @extends {plotOptions.scatter}
927
+ * @optionparent plotOptions.heatmap
928
+ */
686
929
  seriesType('heatmap', 'scatter', {
930
+
931
+ /**
932
+ */
687
933
  animation: false,
934
+
935
+ /**
936
+ */
688
937
  borderWidth: 0,
689
938
 
939
+
940
+ /**
941
+ */
690
942
  nullColor: '#f7f7f7',
691
943
 
944
+
945
+ /**
946
+ */
692
947
  dataLabels: {
948
+
949
+ /**
950
+ */
693
951
  formatter: function() { // #2945
694
952
  return this.point.value;
695
953
  },
954
+
955
+ /**
956
+ */
696
957
  inside: true,
958
+
959
+ /**
960
+ */
697
961
  verticalAlign: 'middle',
962
+
963
+ /**
964
+ */
698
965
  crop: false,
966
+
967
+ /**
968
+ */
699
969
  overflow: false,
970
+
971
+ /**
972
+ */
700
973
  padding: 0 // #3837
701
974
  },
975
+
976
+ /**
977
+ */
702
978
  marker: null,
979
+
980
+ /**
981
+ */
703
982
  pointRange: null, // dynamically set to colsize by default
983
+
984
+ /**
985
+ */
704
986
  tooltip: {
987
+
988
+ /**
989
+ */
705
990
  pointFormat: '{point.x}, {point.y}: {point.value}<br/>'
706
991
  },
992
+
993
+ /**
994
+ */
707
995
  states: {
996
+
997
+ /**
998
+ */
708
999
  normal: {
1000
+
1001
+ /**
1002
+ */
709
1003
  animation: true
710
1004
  },
1005
+
1006
+ /**
1007
+ */
711
1008
  hover: {
1009
+
1010
+ /**
1011
+ */
712
1012
  halo: false, // #3406, halo is not required on heatmaps
1013
+
1014
+ /**
1015
+ */
713
1016
  brightness: 0.2
714
1017
  }
715
1018
  }
716
1019
  }, merge(colorSeriesMixin, {
717
1020
  pointArrayMap: ['y', 'value'],
718
1021
  hasPointSpecificOptions: true,
719
- supportsDrilldown: true,
720
1022
  getExtremesFromAll: true,
721
1023
  directTouch: true,
722
1024
 
@@ -728,7 +1030,8 @@
728
1030
  seriesTypes.scatter.prototype.init.apply(this, arguments);
729
1031
 
730
1032
  options = this.options;
731
- options.pointRange = pick(options.pointRange, options.colsize || 1); // #3758, prevent resetting in setData
1033
+ // #3758, prevent resetting in setData
1034
+ options.pointRange = pick(options.pointRange, options.colsize || 1);
732
1035
  this.yAxis.axisPointRange = options.rowsize || 1; // general point range
733
1036
  },
734
1037
  translate: function() {
@@ -745,10 +1048,24 @@
745
1048
  each(series.points, function(point) {
746
1049
  var xPad = (options.colsize || 1) / 2,
747
1050
  yPad = (options.rowsize || 1) / 2,
748
- x1 = between(Math.round(xAxis.len - xAxis.translate(point.x - xPad, 0, 1, 0, 1)), -xAxis.len, 2 * xAxis.len),
749
- x2 = between(Math.round(xAxis.len - xAxis.translate(point.x + xPad, 0, 1, 0, 1)), -xAxis.len, 2 * xAxis.len),
750
- y1 = between(Math.round(yAxis.translate(point.y - yPad, 0, 1, 0, 1)), -yAxis.len, 2 * yAxis.len),
751
- y2 = between(Math.round(yAxis.translate(point.y + yPad, 0, 1, 0, 1)), -yAxis.len, 2 * yAxis.len);
1051
+ x1 = between(
1052
+ Math.round(
1053
+ xAxis.len -
1054
+ xAxis.translate(point.x - xPad, 0, 1, 0, 1)
1055
+ ), -xAxis.len, 2 * xAxis.len
1056
+ ),
1057
+ x2 = between(
1058
+ Math.round(
1059
+ xAxis.len -
1060
+ xAxis.translate(point.x + xPad, 0, 1, 0, 1)
1061
+ ), -xAxis.len, 2 * xAxis.len
1062
+ ),
1063
+ y1 = between(
1064
+ Math.round(yAxis.translate(point.y - yPad, 0, 1, 0, 1)), -yAxis.len, 2 * yAxis.len
1065
+ ),
1066
+ y2 = between(
1067
+ Math.round(yAxis.translate(point.y + yPad, 0, 1, 0, 1)), -yAxis.len, 2 * yAxis.len
1068
+ );
752
1069
 
753
1070
  // Set plotX and plotY for use in K-D-Tree and more
754
1071
  point.plotX = point.clientX = (x1 + x2) / 2;