highcharts-rails 5.0.9 → 5.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.markdown +48 -0
- data/app/assets/javascripts/highcharts.js +547 -270
- data/app/assets/javascripts/highcharts/highcharts-3d.js +13 -11
- data/app/assets/javascripts/highcharts/highcharts-more.js +373 -181
- data/app/assets/javascripts/highcharts/modules/accessibility.js +3 -3
- data/app/assets/javascripts/highcharts/modules/annotations.js +3 -3
- data/app/assets/javascripts/highcharts/modules/boost.js +11 -5
- data/app/assets/javascripts/highcharts/modules/broken-axis.js +3 -3
- data/app/assets/javascripts/highcharts/modules/data.js +3 -3
- data/app/assets/javascripts/highcharts/modules/drilldown.js +1 -1
- data/app/assets/javascripts/highcharts/modules/exporting.js +70 -28
- data/app/assets/javascripts/highcharts/modules/funnel.js +3 -3
- data/app/assets/javascripts/highcharts/modules/grid-axis.js +1 -1
- data/app/assets/javascripts/highcharts/modules/heatmap.js +5 -5
- data/app/assets/javascripts/highcharts/modules/no-data-to-display.js +3 -3
- data/app/assets/javascripts/highcharts/modules/offline-exporting.js +2 -2
- data/app/assets/javascripts/highcharts/modules/overlapping-datalabels.js +43 -20
- data/app/assets/javascripts/highcharts/modules/series-label.js +3 -3
- data/app/assets/javascripts/highcharts/modules/solid-gauge.js +3 -3
- data/app/assets/javascripts/highcharts/modules/stock.js +83 -42
- data/app/assets/javascripts/highcharts/modules/treemap.js +1 -1
- data/app/assets/javascripts/highcharts/modules/xrange-series.js +3 -3
- data/lib/highcharts/version.rb +1 -1
- metadata +1 -1
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license Highcharts JS v5.0.
|
2
|
+
* @license Highcharts JS v5.0.10 (2017-03-31)
|
3
3
|
*
|
4
4
|
* 3D features for Highcharts JS
|
5
5
|
*
|
@@ -15,7 +15,7 @@
|
|
15
15
|
}(function(Highcharts) {
|
16
16
|
(function(H) {
|
17
17
|
/**
|
18
|
-
* (c) 2010-
|
18
|
+
* (c) 2010-2017 Torstein Honsi
|
19
19
|
*
|
20
20
|
* License: www.highcharts.com/license
|
21
21
|
*/
|
@@ -137,7 +137,7 @@
|
|
137
137
|
}(Highcharts));
|
138
138
|
(function(H) {
|
139
139
|
/**
|
140
|
-
* (c) 2010-
|
140
|
+
* (c) 2010-2017 Torstein Honsi
|
141
141
|
*
|
142
142
|
* License: www.highcharts.com/license
|
143
143
|
*/
|
@@ -477,11 +477,14 @@
|
|
477
477
|
customAttribs = ['x', 'y', 'r', 'innerR', 'start', 'end'];
|
478
478
|
|
479
479
|
/**
|
480
|
-
* Get custom attributes.
|
480
|
+
* Get custom attributes. Don't mutate the original object and return an object with only custom attr.
|
481
481
|
*/
|
482
482
|
function suckOutCustom(params) {
|
483
483
|
var hasCA = false,
|
484
484
|
ca = {};
|
485
|
+
|
486
|
+
params = merge(params); // Don't mutate the original object
|
487
|
+
|
485
488
|
for (var key in params) {
|
486
489
|
if (inArray(key, customAttribs) !== -1) {
|
487
490
|
ca[key] = params[key];
|
@@ -638,7 +641,6 @@
|
|
638
641
|
anim = animObject(pick(animation, this.renderer.globalAnimation));
|
639
642
|
|
640
643
|
if (anim.duration) {
|
641
|
-
params = merge(params); // Don't mutate the original object
|
642
644
|
ca = suckOutCustom(params);
|
643
645
|
params.dummy = 1; // Params need to have a property in order for the step to run (#5765)
|
644
646
|
|
@@ -871,7 +873,7 @@
|
|
871
873
|
}(Highcharts));
|
872
874
|
(function(H) {
|
873
875
|
/**
|
874
|
-
* (c) 2010-
|
876
|
+
* (c) 2010-2017 Torstein Honsi
|
875
877
|
*
|
876
878
|
* License: www.highcharts.com/license
|
877
879
|
*/
|
@@ -1109,7 +1111,7 @@
|
|
1109
1111
|
}(Highcharts));
|
1110
1112
|
(function(H) {
|
1111
1113
|
/**
|
1112
|
-
* (c) 2010-
|
1114
|
+
* (c) 2010-2017 Torstein Honsi
|
1113
1115
|
*
|
1114
1116
|
* License: www.highcharts.com/license
|
1115
1117
|
*/
|
@@ -1527,7 +1529,7 @@
|
|
1527
1529
|
}(Highcharts));
|
1528
1530
|
(function(H) {
|
1529
1531
|
/**
|
1530
|
-
* (c) 2010-
|
1532
|
+
* (c) 2010-2017 Torstein Honsi
|
1531
1533
|
*
|
1532
1534
|
* License: www.highcharts.com/license
|
1533
1535
|
*/
|
@@ -1782,7 +1784,7 @@
|
|
1782
1784
|
}(Highcharts));
|
1783
1785
|
(function(H) {
|
1784
1786
|
/**
|
1785
|
-
* (c) 2010-
|
1787
|
+
* (c) 2010-2017 Torstein Honsi
|
1786
1788
|
*
|
1787
1789
|
* License: www.highcharts.com/license
|
1788
1790
|
*/
|
@@ -1972,7 +1974,7 @@
|
|
1972
1974
|
}(Highcharts));
|
1973
1975
|
(function(H) {
|
1974
1976
|
/**
|
1975
|
-
* (c) 2010-
|
1977
|
+
* (c) 2010-2017 Torstein Honsi
|
1976
1978
|
*
|
1977
1979
|
* License: www.highcharts.com/license
|
1978
1980
|
*/
|
@@ -2087,7 +2089,7 @@
|
|
2087
2089
|
}(Highcharts));
|
2088
2090
|
(function(H) {
|
2089
2091
|
/**
|
2090
|
-
* (c) 2010-
|
2092
|
+
* (c) 2010-2017 Torstein Honsi
|
2091
2093
|
*
|
2092
2094
|
* License: www.highcharts.com/license
|
2093
2095
|
*/
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license Highcharts JS v5.0.
|
2
|
+
* @license Highcharts JS v5.0.10 (2017-03-31)
|
3
3
|
*
|
4
4
|
* (c) 2009-2016 Torstein Honsi
|
5
5
|
*
|
@@ -15,11 +15,12 @@
|
|
15
15
|
}(function(Highcharts) {
|
16
16
|
(function(H) {
|
17
17
|
/**
|
18
|
-
* (c) 2010-
|
18
|
+
* (c) 2010-2017 Torstein Honsi
|
19
19
|
*
|
20
20
|
* License: www.highcharts.com/license
|
21
21
|
*/
|
22
|
-
var
|
22
|
+
var CenteredSeriesMixin = H.CenteredSeriesMixin,
|
23
|
+
each = H.each,
|
23
24
|
extend = H.extend,
|
24
25
|
merge = H.merge,
|
25
26
|
splat = H.splat;
|
@@ -27,53 +28,116 @@
|
|
27
28
|
* The Pane object allows options that are common to a set of X and Y axes.
|
28
29
|
*
|
29
30
|
* In the future, this can be extended to basic Highcharts and Highstock.
|
31
|
+
*
|
30
32
|
*/
|
31
|
-
function Pane(options, chart
|
32
|
-
this.init(options, chart
|
33
|
+
function Pane(options, chart) {
|
34
|
+
this.init(options, chart);
|
33
35
|
}
|
34
36
|
|
35
37
|
// Extend the Pane prototype
|
36
38
|
extend(Pane.prototype, {
|
37
39
|
|
40
|
+
coll: 'pane', // Member of chart.pane
|
41
|
+
|
38
42
|
/**
|
39
43
|
* Initiate the Pane object
|
40
44
|
*/
|
41
|
-
init: function(options, chart
|
42
|
-
|
43
|
-
|
44
|
-
defaultOptions = pane.defaultOptions;
|
45
|
+
init: function(options, chart) {
|
46
|
+
this.chart = chart;
|
47
|
+
this.background = [];
|
45
48
|
|
46
|
-
pane.
|
49
|
+
chart.pane.push(this);
|
50
|
+
|
51
|
+
this.setOptions(options);
|
52
|
+
},
|
53
|
+
|
54
|
+
setOptions: function(options) {
|
47
55
|
|
48
56
|
// Set options. Angular charts have a default background (#3318)
|
49
|
-
|
50
|
-
|
51
|
-
|
57
|
+
this.options = options = merge(
|
58
|
+
this.defaultOptions,
|
59
|
+
this.chart.angular ? {
|
60
|
+
background: {}
|
61
|
+
} : undefined,
|
62
|
+
options
|
63
|
+
);
|
64
|
+
},
|
52
65
|
|
53
|
-
|
66
|
+
/**
|
67
|
+
* Render the pane with its backgrounds.
|
68
|
+
*/
|
69
|
+
render: function() {
|
54
70
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
71
|
+
var options = this.options,
|
72
|
+
backgroundOption = this.options.background,
|
73
|
+
renderer = this.chart.renderer,
|
74
|
+
len,
|
75
|
+
i;
|
76
|
+
|
77
|
+
if (!this.group) {
|
78
|
+
this.group = renderer.g('pane-group')
|
79
|
+
.attr({
|
80
|
+
zIndex: options.zIndex || 0
|
81
|
+
})
|
82
|
+
.add();
|
83
|
+
}
|
62
84
|
|
85
|
+
this.updateCenter();
|
63
86
|
|
64
|
-
|
65
|
-
|
87
|
+
// Render the backgrounds
|
88
|
+
if (backgroundOption) {
|
89
|
+
backgroundOption = splat(backgroundOption);
|
90
|
+
len = Math.max(
|
91
|
+
backgroundOption.length,
|
92
|
+
this.background.length || 0
|
93
|
+
);
|
94
|
+
|
95
|
+
for (i = 0; i < len; i++) {
|
96
|
+
if (backgroundOption[i]) {
|
97
|
+
this.renderBackground(
|
98
|
+
merge(
|
99
|
+
this.defaultBackgroundOptions,
|
100
|
+
backgroundOption[i]
|
101
|
+
),
|
102
|
+
i
|
103
|
+
);
|
104
|
+
} else if (this.background[i]) {
|
105
|
+
this.background[i] = this.background[i].destroy();
|
106
|
+
this.background.splice(i, 1);
|
66
107
|
}
|
67
|
-
|
108
|
+
}
|
109
|
+
}
|
110
|
+
},
|
68
111
|
|
112
|
+
/**
|
113
|
+
* Render an individual pane background.
|
114
|
+
* @param {Object} backgroundOptions Background options
|
115
|
+
* @param {number} i The index of the background in this.backgrounds
|
116
|
+
*/
|
117
|
+
renderBackground: function(backgroundOptions, i) {
|
118
|
+
var method = 'animate';
|
69
119
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
}
|
75
|
-
});
|
120
|
+
if (!this.background[i]) {
|
121
|
+
this.background[i] = this.chart.renderer.path()
|
122
|
+
.add(this.group);
|
123
|
+
method = 'attr';
|
76
124
|
}
|
125
|
+
|
126
|
+
this.background[i][method]({
|
127
|
+
'd': this.axis.getPlotBandPath(
|
128
|
+
backgroundOptions.from,
|
129
|
+
backgroundOptions.to,
|
130
|
+
backgroundOptions
|
131
|
+
)
|
132
|
+
}).attr({
|
133
|
+
|
134
|
+
'fill': backgroundOptions.backgroundColor,
|
135
|
+
'stroke': backgroundOptions.borderColor,
|
136
|
+
'stroke-width': backgroundOptions.borderWidth,
|
137
|
+
|
138
|
+
'class': 'highcharts-pane ' + (backgroundOptions.className || '')
|
139
|
+
});
|
140
|
+
|
77
141
|
},
|
78
142
|
|
79
143
|
/**
|
@@ -91,7 +155,7 @@
|
|
91
155
|
* The default background options
|
92
156
|
*/
|
93
157
|
defaultBackgroundOptions: {
|
94
|
-
className: 'highcharts-pane',
|
158
|
+
//className: 'highcharts-pane',
|
95
159
|
shape: 'circle',
|
96
160
|
|
97
161
|
borderWidth: 1,
|
@@ -113,6 +177,44 @@
|
|
113
177
|
innerRadius: 0,
|
114
178
|
to: Number.MAX_VALUE, // corrected to axis max
|
115
179
|
outerRadius: '105%'
|
180
|
+
},
|
181
|
+
|
182
|
+
/**
|
183
|
+
* Gets the center for the pane and its axis.
|
184
|
+
*/
|
185
|
+
updateCenter: function(axis) {
|
186
|
+
this.center = (axis || this.axis || {}).center =
|
187
|
+
CenteredSeriesMixin.getCenter.call(this);
|
188
|
+
},
|
189
|
+
|
190
|
+
/**
|
191
|
+
* Destroy the pane item
|
192
|
+
* /
|
193
|
+
destroy: function () {
|
194
|
+
H.erase(this.chart.pane, this);
|
195
|
+
each(this.background, function (background) {
|
196
|
+
background.destroy();
|
197
|
+
});
|
198
|
+
this.background.length = 0;
|
199
|
+
this.group = this.group.destroy();
|
200
|
+
},
|
201
|
+
*/
|
202
|
+
|
203
|
+
/**
|
204
|
+
* Update the pane item with new options
|
205
|
+
* @param {Object} options New pane options
|
206
|
+
*/
|
207
|
+
update: function(options, redraw) {
|
208
|
+
|
209
|
+
merge(true, this.options, options);
|
210
|
+
this.setOptions(this.options);
|
211
|
+
this.render();
|
212
|
+
each(this.chart.axes, function(axis) {
|
213
|
+
if (axis.pane === this) {
|
214
|
+
axis.pane = null;
|
215
|
+
axis.update({}, redraw);
|
216
|
+
}
|
217
|
+
}, this);
|
116
218
|
}
|
117
219
|
|
118
220
|
});
|
@@ -122,22 +224,19 @@
|
|
122
224
|
}(Highcharts));
|
123
225
|
(function(H) {
|
124
226
|
/**
|
125
|
-
* (c) 2010-
|
227
|
+
* (c) 2010-2017 Torstein Honsi
|
126
228
|
*
|
127
229
|
* License: www.highcharts.com/license
|
128
230
|
*/
|
129
231
|
var Axis = H.Axis,
|
130
|
-
CenteredSeriesMixin = H.CenteredSeriesMixin,
|
131
232
|
each = H.each,
|
132
233
|
extend = H.extend,
|
133
234
|
map = H.map,
|
134
235
|
merge = H.merge,
|
135
236
|
noop = H.noop,
|
136
|
-
Pane = H.Pane,
|
137
237
|
pick = H.pick,
|
138
238
|
pInt = H.pInt,
|
139
239
|
Tick = H.Tick,
|
140
|
-
splat = H.splat,
|
141
240
|
wrap = H.wrap,
|
142
241
|
|
143
242
|
|
@@ -250,8 +349,6 @@
|
|
250
349
|
// Title or label offsets are not counted
|
251
350
|
this.chart.axisOffset[this.side] = 0;
|
252
351
|
|
253
|
-
// Set the center array
|
254
|
-
this.center = this.pane.center = CenteredSeriesMixin.getCenter.call(this.pane);
|
255
352
|
},
|
256
353
|
|
257
354
|
|
@@ -342,7 +439,7 @@
|
|
342
439
|
if (this.isRadial) {
|
343
440
|
|
344
441
|
// Set the center array
|
345
|
-
this.
|
442
|
+
this.pane.updateCenter(this);
|
346
443
|
|
347
444
|
// The sector is used in Axis.translate to compute the translation of reversed axis points (#2570)
|
348
445
|
if (this.isCircular) {
|
@@ -534,8 +631,7 @@
|
|
534
631
|
* Override axisProto.init to mix in special axis instance functions and function overrides
|
535
632
|
*/
|
536
633
|
wrap(axisProto, 'init', function(proceed, chart, userOptions) {
|
537
|
-
var
|
538
|
-
angular = chart.angular,
|
634
|
+
var angular = chart.angular,
|
539
635
|
polar = chart.polar,
|
540
636
|
isX = userOptions.isX,
|
541
637
|
isHidden = angular && isX,
|
@@ -543,8 +639,8 @@
|
|
543
639
|
options,
|
544
640
|
chartOptions = chart.options,
|
545
641
|
paneIndex = userOptions.pane || 0,
|
546
|
-
pane,
|
547
|
-
paneOptions;
|
642
|
+
pane = this.pane = chart.pane[paneIndex],
|
643
|
+
paneOptions = pane.options;
|
548
644
|
|
549
645
|
// Before prototype.init
|
550
646
|
if (angular) {
|
@@ -570,23 +666,17 @@
|
|
570
666
|
this.isRadial = false;
|
571
667
|
}
|
572
668
|
|
669
|
+
// A pointer back to this axis to borrow geometry
|
670
|
+
if (isCircular) {
|
671
|
+
pane.axis = this;
|
672
|
+
}
|
673
|
+
|
573
674
|
// Run prototype.init
|
574
675
|
proceed.call(this, chart, userOptions);
|
575
676
|
|
576
677
|
if (!isHidden && (angular || polar)) {
|
577
678
|
options = this.options;
|
578
679
|
|
579
|
-
// Create the pane and set the pane options.
|
580
|
-
if (!chart.panes) {
|
581
|
-
chart.panes = [];
|
582
|
-
}
|
583
|
-
this.pane = pane = chart.panes[paneIndex] = chart.panes[paneIndex] || new Pane(
|
584
|
-
splat(chartOptions.pane)[paneIndex],
|
585
|
-
chart,
|
586
|
-
axis
|
587
|
-
);
|
588
|
-
paneOptions = pane.options;
|
589
|
-
|
590
680
|
// Start and end angle options are
|
591
681
|
// given in degrees relative to top, while internal computations are
|
592
682
|
// in radians relative to right (like SVG).
|
@@ -706,7 +796,7 @@
|
|
706
796
|
}(Highcharts));
|
707
797
|
(function(H) {
|
708
798
|
/**
|
709
|
-
* (c) 2010-
|
799
|
+
* (c) 2010-2017 Torstein Honsi
|
710
800
|
*
|
711
801
|
* License: www.highcharts.com/license
|
712
802
|
*/
|
@@ -1023,7 +1113,7 @@
|
|
1023
1113
|
}(Highcharts));
|
1024
1114
|
(function(H) {
|
1025
1115
|
/**
|
1026
|
-
* (c) 2010-
|
1116
|
+
* (c) 2010-2017 Torstein Honsi
|
1027
1117
|
*
|
1028
1118
|
* License: www.highcharts.com/license
|
1029
1119
|
*/
|
@@ -1041,7 +1131,7 @@
|
|
1041
1131
|
}(Highcharts));
|
1042
1132
|
(function(H) {
|
1043
1133
|
/**
|
1044
|
-
* (c) 2010-
|
1134
|
+
* (c) 2010-2017 Torstein Honsi
|
1045
1135
|
*
|
1046
1136
|
* License: www.highcharts.com/license
|
1047
1137
|
*/
|
@@ -1150,7 +1240,7 @@
|
|
1150
1240
|
}(Highcharts));
|
1151
1241
|
(function(H) {
|
1152
1242
|
/**
|
1153
|
-
* (c) 2010-
|
1243
|
+
* (c) 2010-2017 Torstein Honsi
|
1154
1244
|
*
|
1155
1245
|
* License: www.highcharts.com/license
|
1156
1246
|
*/
|
@@ -1414,7 +1504,7 @@
|
|
1414
1504
|
}(Highcharts));
|
1415
1505
|
(function(H) {
|
1416
1506
|
/**
|
1417
|
-
* (c) 2010-
|
1507
|
+
* (c) 2010-2017 Torstein Honsi
|
1418
1508
|
*
|
1419
1509
|
* License: www.highcharts.com/license
|
1420
1510
|
*/
|
@@ -1583,36 +1673,38 @@
|
|
1583
1673
|
point.medianShape = renderer.path(medianPath)
|
1584
1674
|
.addClass('highcharts-boxplot-median')
|
1585
1675
|
.add(graphic);
|
1676
|
+
}
|
1586
1677
|
|
1587
1678
|
|
1588
1679
|
|
1589
1680
|
|
1590
|
-
// Stem attributes
|
1591
|
-
stemAttr.stroke = point.stemColor || options.stemColor || color;
|
1592
|
-
stemAttr['stroke-width'] = pick(point.stemWidth, options.stemWidth, options.lineWidth);
|
1593
|
-
stemAttr.dashstyle = point.stemDashStyle || options.stemDashStyle;
|
1594
|
-
point.stem.attr(stemAttr);
|
1595
1681
|
|
1596
|
-
// Whiskers attributes
|
1597
|
-
if (whiskerLength) {
|
1598
|
-
whiskersAttr.stroke = point.whiskerColor || options.whiskerColor || color;
|
1599
|
-
whiskersAttr['stroke-width'] = pick(point.whiskerWidth, options.whiskerWidth, options.lineWidth);
|
1600
|
-
point.whiskers.attr(whiskersAttr);
|
1601
|
-
}
|
1602
1682
|
|
1603
|
-
|
1604
|
-
|
1605
|
-
|
1606
|
-
|
1683
|
+
// Stem attributes
|
1684
|
+
stemAttr.stroke = point.stemColor || options.stemColor || color;
|
1685
|
+
stemAttr['stroke-width'] = pick(point.stemWidth, options.stemWidth, options.lineWidth);
|
1686
|
+
stemAttr.dashstyle = point.stemDashStyle || options.stemDashStyle;
|
1687
|
+
point.stem.attr(stemAttr);
|
1688
|
+
|
1689
|
+
// Whiskers attributes
|
1690
|
+
if (whiskerLength) {
|
1691
|
+
whiskersAttr.stroke = point.whiskerColor || options.whiskerColor || color;
|
1692
|
+
whiskersAttr['stroke-width'] = pick(point.whiskerWidth, options.whiskerWidth, options.lineWidth);
|
1693
|
+
point.whiskers.attr(whiskersAttr);
|
1694
|
+
}
|
1607
1695
|
|
1696
|
+
if (doQuartiles) {
|
1697
|
+
boxAttr = series.pointAttribs(point);
|
1698
|
+
point.box.attr(boxAttr);
|
1699
|
+
}
|
1608
1700
|
|
1609
|
-
|
1610
|
-
|
1611
|
-
|
1612
|
-
|
1701
|
+
|
1702
|
+
// Median attributes
|
1703
|
+
medianAttr.stroke = point.medianColor || options.medianColor || color;
|
1704
|
+
medianAttr['stroke-width'] = pick(point.medianWidth, options.medianWidth, options.lineWidth);
|
1705
|
+
point.medianShape.attr(medianAttr);
|
1613
1706
|
|
1614
1707
|
|
1615
|
-
}
|
1616
1708
|
|
1617
1709
|
|
1618
1710
|
|
@@ -1717,7 +1809,7 @@
|
|
1717
1809
|
}(Highcharts));
|
1718
1810
|
(function(H) {
|
1719
1811
|
/**
|
1720
|
-
* (c) 2010-
|
1812
|
+
* (c) 2010-2017 Torstein Honsi
|
1721
1813
|
*
|
1722
1814
|
* License: www.highcharts.com/license
|
1723
1815
|
*/
|
@@ -1776,13 +1868,12 @@
|
|
1776
1868
|
}(Highcharts));
|
1777
1869
|
(function(H) {
|
1778
1870
|
/**
|
1779
|
-
* (c) 2010-
|
1871
|
+
* (c) 2010-2017 Torstein Honsi
|
1780
1872
|
*
|
1781
1873
|
* License: www.highcharts.com/license
|
1782
1874
|
*/
|
1783
1875
|
var correctFloat = H.correctFloat,
|
1784
1876
|
isNumber = H.isNumber,
|
1785
|
-
noop = H.noop,
|
1786
1877
|
pick = H.pick,
|
1787
1878
|
Point = H.Point,
|
1788
1879
|
Series = H.Series,
|
@@ -1838,7 +1929,7 @@
|
|
1838
1929
|
tooltipY;
|
1839
1930
|
|
1840
1931
|
// run column series translate
|
1841
|
-
seriesTypes.column.prototype.translate.apply(
|
1932
|
+
seriesTypes.column.prototype.translate.apply(series);
|
1842
1933
|
|
1843
1934
|
previousY = previousIntermediate = threshold;
|
1844
1935
|
points = series.points;
|
@@ -1846,14 +1937,18 @@
|
|
1846
1937
|
for (i = 0, len = points.length; i < len; i++) {
|
1847
1938
|
// cache current point object
|
1848
1939
|
point = points[i];
|
1849
|
-
yValue =
|
1940
|
+
yValue = series.processedYData[i];
|
1850
1941
|
shapeArgs = point.shapeArgs;
|
1851
1942
|
|
1852
1943
|
// get current stack
|
1853
1944
|
stack = stacking && yAxis.stacks[(series.negStacks && yValue < threshold ? '-' : '') + series.stackKey];
|
1854
|
-
stackIndicator = series.getStackIndicator(
|
1945
|
+
stackIndicator = series.getStackIndicator(
|
1946
|
+
stackIndicator,
|
1947
|
+
point.x,
|
1948
|
+
series.index
|
1949
|
+
);
|
1855
1950
|
range = stack ?
|
1856
|
-
stack[point.x].points[
|
1951
|
+
stack[point.x].points[stackIndicator.key] : [0, yValue];
|
1857
1952
|
|
1858
1953
|
// override point value for sums
|
1859
1954
|
// #3710 Update point does not propagate to sum
|
@@ -1866,7 +1961,6 @@
|
|
1866
1961
|
y = Math.max(previousY, previousY + point.y) + range[0];
|
1867
1962
|
shapeArgs.y = yAxis.toPixels(y, true);
|
1868
1963
|
|
1869
|
-
|
1870
1964
|
// sum points
|
1871
1965
|
if (point.isSum) {
|
1872
1966
|
shapeArgs.y = yAxis.toPixels(range[1], true);
|
@@ -1885,8 +1979,10 @@
|
|
1885
1979
|
shapeArgs.height = yValue > 0 ?
|
1886
1980
|
yAxis.toPixels(previousY, true) - shapeArgs.y :
|
1887
1981
|
yAxis.toPixels(previousY, true) - yAxis.toPixels(previousY - yValue, true);
|
1888
|
-
|
1982
|
+
|
1983
|
+
previousY += stack && stack[point.x] ? stack[point.x].total : yValue;
|
1889
1984
|
}
|
1985
|
+
|
1890
1986
|
// #3952 Negative sum or intermediate sum not rendered correctly
|
1891
1987
|
if (shapeArgs.height < 0) {
|
1892
1988
|
shapeArgs.y += shapeArgs.height;
|
@@ -1959,9 +2055,11 @@
|
|
1959
2055
|
|
1960
2056
|
Series.prototype.processData.call(this, force);
|
1961
2057
|
|
1962
|
-
// Record extremes
|
1963
|
-
series.
|
1964
|
-
|
2058
|
+
// Record extremes only if stacking was not set:
|
2059
|
+
if (!series.options.stacking) {
|
2060
|
+
series.dataMin = dataMin;
|
2061
|
+
series.dataMax = dataMax;
|
2062
|
+
}
|
1965
2063
|
},
|
1966
2064
|
|
1967
2065
|
/**
|
@@ -2060,9 +2158,39 @@
|
|
2060
2158
|
},
|
2061
2159
|
|
2062
2160
|
/**
|
2063
|
-
*
|
2161
|
+
* Waterfall has stacking along the x-values too.
|
2162
|
+
*/
|
2163
|
+
setStackedPoints: function() {
|
2164
|
+
var series = this,
|
2165
|
+
options = series.options,
|
2166
|
+
stackedYLength,
|
2167
|
+
i;
|
2168
|
+
|
2169
|
+
Series.prototype.setStackedPoints.apply(series, arguments);
|
2170
|
+
|
2171
|
+
stackedYLength = series.stackedYData ? series.stackedYData.length : 0;
|
2172
|
+
|
2173
|
+
// Start from the second point:
|
2174
|
+
for (i = 1; i < stackedYLength; i++) {
|
2175
|
+
if (!options.data[i].isSum &&
|
2176
|
+
!options.data[i].isIntermediateSum
|
2177
|
+
) {
|
2178
|
+
// Sum previous stacked data as waterfall can grow up/down:
|
2179
|
+
series.stackedYData[i] += series.stackedYData[i - 1];
|
2180
|
+
}
|
2181
|
+
}
|
2182
|
+
},
|
2183
|
+
|
2184
|
+
/**
|
2185
|
+
* Extremes for a non-stacked series are recorded in processData.
|
2186
|
+
* In case of stacking, use Series.stackedYData to calculate extremes.
|
2064
2187
|
*/
|
2065
|
-
getExtremes:
|
2188
|
+
getExtremes: function() {
|
2189
|
+
if (this.options.stacking) {
|
2190
|
+
return Series.prototype.getExtremes.apply(this, arguments);
|
2191
|
+
}
|
2192
|
+
}
|
2193
|
+
|
2066
2194
|
|
2067
2195
|
// Point members
|
2068
2196
|
}, {
|
@@ -2092,7 +2220,7 @@
|
|
2092
2220
|
}(Highcharts));
|
2093
2221
|
(function(H) {
|
2094
2222
|
/**
|
2095
|
-
* (c) 2010-
|
2223
|
+
* (c) 2010-2017 Torstein Honsi
|
2096
2224
|
*
|
2097
2225
|
* License: www.highcharts.com/license
|
2098
2226
|
*/
|
@@ -2151,7 +2279,7 @@
|
|
2151
2279
|
}(Highcharts));
|
2152
2280
|
(function(H) {
|
2153
2281
|
/**
|
2154
|
-
* (c) 2010-
|
2282
|
+
* (c) 2010-2017 Torstein Honsi
|
2155
2283
|
*
|
2156
2284
|
* License: www.highcharts.com/license
|
2157
2285
|
*/
|
@@ -2223,6 +2351,7 @@
|
|
2223
2351
|
trackerGroups: ['markerGroup', 'dataLabelsGroup'],
|
2224
2352
|
bubblePadding: true,
|
2225
2353
|
zoneAxis: 'z',
|
2354
|
+
directTouch: true,
|
2226
2355
|
|
2227
2356
|
|
2228
2357
|
pointAttribs: function(point, state) {
|
@@ -2493,7 +2622,7 @@
|
|
2493
2622
|
}(Highcharts));
|
2494
2623
|
(function(H) {
|
2495
2624
|
/**
|
2496
|
-
* (c) 2010-
|
2625
|
+
* (c) 2010-2017 Torstein Honsi
|
2497
2626
|
*
|
2498
2627
|
* License: www.highcharts.com/license
|
2499
2628
|
*/
|
@@ -2532,6 +2661,96 @@
|
|
2532
2661
|
|
2533
2662
|
};
|
2534
2663
|
|
2664
|
+
/**
|
2665
|
+
* #6212 Calculate connectors for spline series in polar chart.
|
2666
|
+
* @param {Boolean} calculateNeighbours - Check if connectors should be calculated for neighbour points as well
|
2667
|
+
* allows short recurence
|
2668
|
+
*/
|
2669
|
+
seriesProto.getConnectors = function(segment, index, calculateNeighbours, connectEnds) {
|
2670
|
+
|
2671
|
+
var i,
|
2672
|
+
prevPointInd,
|
2673
|
+
nextPointInd,
|
2674
|
+
previousPoint,
|
2675
|
+
nextPoint,
|
2676
|
+
previousX,
|
2677
|
+
previousY,
|
2678
|
+
nextX,
|
2679
|
+
nextY,
|
2680
|
+
plotX,
|
2681
|
+
plotY,
|
2682
|
+
ret,
|
2683
|
+
smoothing = 1.5, // 1 means control points midway between points, 2 means 1/3 from the point, 3 is 1/4 etc;
|
2684
|
+
denom = smoothing + 1,
|
2685
|
+
leftContX,
|
2686
|
+
leftContY,
|
2687
|
+
rightContX,
|
2688
|
+
rightContY,
|
2689
|
+
dLControlPoint, //distance left control point
|
2690
|
+
dRControlPoint,
|
2691
|
+
leftContAngle,
|
2692
|
+
rightContAngle,
|
2693
|
+
jointAngle,
|
2694
|
+
addedNumber = connectEnds ? 1 : 0;
|
2695
|
+
|
2696
|
+
/** calculate final index of points depending on the initial index value.
|
2697
|
+
* Because of calculating neighbours, index may be outisde segment array.
|
2698
|
+
*/
|
2699
|
+
if (index >= 0 && index <= segment.length - 1) {
|
2700
|
+
i = index;
|
2701
|
+
} else if (index < 0) {
|
2702
|
+
i = segment.length - 1 + index;
|
2703
|
+
} else {
|
2704
|
+
i = 0;
|
2705
|
+
}
|
2706
|
+
|
2707
|
+
prevPointInd = (i - 1 < 0) ? segment.length - (1 + addedNumber) : i - 1;
|
2708
|
+
nextPointInd = (i + 1 > segment.length - 1) ? addedNumber : i + 1;
|
2709
|
+
previousPoint = segment[prevPointInd];
|
2710
|
+
nextPoint = segment[nextPointInd];
|
2711
|
+
previousX = previousPoint.plotX;
|
2712
|
+
previousY = previousPoint.plotY;
|
2713
|
+
nextX = nextPoint.plotX;
|
2714
|
+
nextY = nextPoint.plotY;
|
2715
|
+
plotX = segment[i].plotX; // actual point
|
2716
|
+
plotY = segment[i].plotY;
|
2717
|
+
leftContX = (smoothing * plotX + previousX) / denom;
|
2718
|
+
leftContY = (smoothing * plotY + previousY) / denom;
|
2719
|
+
rightContX = (smoothing * plotX + nextX) / denom;
|
2720
|
+
rightContY = (smoothing * plotY + nextY) / denom;
|
2721
|
+
dLControlPoint = Math.sqrt(Math.pow(leftContX - plotX, 2) + Math.pow(leftContY - plotY, 2));
|
2722
|
+
dRControlPoint = Math.sqrt(Math.pow(rightContX - plotX, 2) + Math.pow(rightContY - plotY, 2));
|
2723
|
+
leftContAngle = Math.atan2(leftContY - plotY, leftContX - plotX);
|
2724
|
+
rightContAngle = Math.atan2(rightContY - plotY, rightContX - plotX);
|
2725
|
+
jointAngle = (Math.PI / 2) + ((leftContAngle + rightContAngle) / 2);
|
2726
|
+
// Ensure the right direction, jointAngle should be in the same quadrant as leftContAngle
|
2727
|
+
if (Math.abs(leftContAngle - jointAngle) > Math.PI / 2) {
|
2728
|
+
jointAngle -= Math.PI;
|
2729
|
+
}
|
2730
|
+
// Find the corrected control points for a spline straight through the point
|
2731
|
+
leftContX = plotX + Math.cos(jointAngle) * dLControlPoint;
|
2732
|
+
leftContY = plotY + Math.sin(jointAngle) * dLControlPoint;
|
2733
|
+
rightContX = plotX + Math.cos(Math.PI + jointAngle) * dRControlPoint;
|
2734
|
+
rightContY = plotY + Math.sin(Math.PI + jointAngle) * dRControlPoint;
|
2735
|
+
|
2736
|
+
// push current point's connectors into returned object
|
2737
|
+
|
2738
|
+
ret = {
|
2739
|
+
rightContX: rightContX,
|
2740
|
+
rightContY: rightContY,
|
2741
|
+
leftContX: leftContX,
|
2742
|
+
leftContY: leftContY,
|
2743
|
+
plotX: plotX,
|
2744
|
+
plotY: plotY
|
2745
|
+
};
|
2746
|
+
|
2747
|
+
// calculate connectors for previous and next point and push them inside returned object
|
2748
|
+
if (calculateNeighbours) {
|
2749
|
+
ret.prevPointCont = this.getConnectors(segment, prevPointInd, false, connectEnds);
|
2750
|
+
}
|
2751
|
+
return ret;
|
2752
|
+
};
|
2753
|
+
|
2535
2754
|
/**
|
2536
2755
|
* Wrap the buildKDTree function so that it searches by angle (clientX) in case of shared tooltip,
|
2537
2756
|
* and by two dimensional distance in case of non-shared.
|
@@ -2541,7 +2760,7 @@
|
|
2541
2760
|
if (this.kdByAngle) {
|
2542
2761
|
this.searchPoint = this.searchPointByAngle;
|
2543
2762
|
} else {
|
2544
|
-
this.
|
2763
|
+
this.options.findNearestPointBy = 'xy';
|
2545
2764
|
}
|
2546
2765
|
}
|
2547
2766
|
proceed.apply(this);
|
@@ -2585,104 +2804,35 @@
|
|
2585
2804
|
* Overridden method for calculating a spline from one point to the next
|
2586
2805
|
*/
|
2587
2806
|
wrap(seriesTypes.spline.prototype, 'getPointSpline', function(proceed, segment, point, i) {
|
2588
|
-
|
2589
2807
|
var ret,
|
2590
|
-
|
2591
|
-
denom = smoothing + 1,
|
2592
|
-
plotX,
|
2593
|
-
plotY,
|
2594
|
-
lastPoint,
|
2595
|
-
nextPoint,
|
2596
|
-
lastX,
|
2597
|
-
lastY,
|
2598
|
-
nextX,
|
2599
|
-
nextY,
|
2600
|
-
leftContX,
|
2601
|
-
leftContY,
|
2602
|
-
rightContX,
|
2603
|
-
rightContY,
|
2604
|
-
distanceLeftControlPoint,
|
2605
|
-
distanceRightControlPoint,
|
2606
|
-
leftContAngle,
|
2607
|
-
rightContAngle,
|
2608
|
-
jointAngle;
|
2609
|
-
|
2808
|
+
connectors;
|
2610
2809
|
|
2611
2810
|
if (this.chart.polar) {
|
2612
|
-
|
2613
|
-
plotX = point.plotX;
|
2614
|
-
plotY = point.plotY;
|
2615
|
-
lastPoint = segment[i - 1];
|
2616
|
-
nextPoint = segment[i + 1];
|
2617
|
-
|
2618
|
-
// Connect ends
|
2619
|
-
if (this.connectEnds) {
|
2620
|
-
if (!lastPoint) {
|
2621
|
-
lastPoint = segment[segment.length - 2]; // not the last but the second last, because the segment is already connected
|
2622
|
-
}
|
2623
|
-
if (!nextPoint) {
|
2624
|
-
nextPoint = segment[1];
|
2625
|
-
}
|
2626
|
-
}
|
2627
|
-
|
2628
|
-
// find control points
|
2629
|
-
if (lastPoint && nextPoint) {
|
2630
|
-
|
2631
|
-
lastX = lastPoint.plotX;
|
2632
|
-
lastY = lastPoint.plotY;
|
2633
|
-
nextX = nextPoint.plotX;
|
2634
|
-
nextY = nextPoint.plotY;
|
2635
|
-
leftContX = (smoothing * plotX + lastX) / denom;
|
2636
|
-
leftContY = (smoothing * plotY + lastY) / denom;
|
2637
|
-
rightContX = (smoothing * plotX + nextX) / denom;
|
2638
|
-
rightContY = (smoothing * plotY + nextY) / denom;
|
2639
|
-
distanceLeftControlPoint = Math.sqrt(Math.pow(leftContX - plotX, 2) + Math.pow(leftContY - plotY, 2));
|
2640
|
-
distanceRightControlPoint = Math.sqrt(Math.pow(rightContX - plotX, 2) + Math.pow(rightContY - plotY, 2));
|
2641
|
-
leftContAngle = Math.atan2(leftContY - plotY, leftContX - plotX);
|
2642
|
-
rightContAngle = Math.atan2(rightContY - plotY, rightContX - plotX);
|
2643
|
-
jointAngle = (Math.PI / 2) + ((leftContAngle + rightContAngle) / 2);
|
2644
|
-
|
2645
|
-
|
2646
|
-
// Ensure the right direction, jointAngle should be in the same quadrant as leftContAngle
|
2647
|
-
if (Math.abs(leftContAngle - jointAngle) > Math.PI / 2) {
|
2648
|
-
jointAngle -= Math.PI;
|
2649
|
-
}
|
2650
|
-
|
2651
|
-
// Find the corrected control points for a spline straight through the point
|
2652
|
-
leftContX = plotX + Math.cos(jointAngle) * distanceLeftControlPoint;
|
2653
|
-
leftContY = plotY + Math.sin(jointAngle) * distanceLeftControlPoint;
|
2654
|
-
rightContX = plotX + Math.cos(Math.PI + jointAngle) * distanceRightControlPoint;
|
2655
|
-
rightContY = plotY + Math.sin(Math.PI + jointAngle) * distanceRightControlPoint;
|
2656
|
-
|
2657
|
-
// Record for drawing in next point
|
2658
|
-
point.rightContX = rightContX;
|
2659
|
-
point.rightContY = rightContY;
|
2660
|
-
|
2661
|
-
}
|
2662
|
-
|
2663
|
-
|
2664
2811
|
// moveTo or lineTo
|
2665
2812
|
if (!i) {
|
2666
|
-
ret = ['M', plotX, plotY];
|
2813
|
+
ret = ['M', point.plotX, point.plotY];
|
2667
2814
|
} else { // curve from last point to this
|
2815
|
+
connectors = this.getConnectors(segment, i, true, this.connectEnds);
|
2668
2816
|
ret = [
|
2669
2817
|
'C',
|
2670
|
-
|
2671
|
-
|
2672
|
-
leftContX
|
2673
|
-
leftContY
|
2674
|
-
plotX,
|
2675
|
-
plotY
|
2818
|
+
connectors.prevPointCont.rightContX,
|
2819
|
+
connectors.prevPointCont.rightContY,
|
2820
|
+
connectors.leftContX,
|
2821
|
+
connectors.leftContY,
|
2822
|
+
connectors.plotX,
|
2823
|
+
connectors.plotY
|
2676
2824
|
];
|
2677
|
-
lastPoint.rightContX = lastPoint.rightContY = null; // reset for updating series later
|
2678
2825
|
}
|
2679
|
-
|
2680
|
-
|
2681
2826
|
} else {
|
2682
2827
|
ret = proceed.call(this, segment, point, i);
|
2683
2828
|
}
|
2684
2829
|
return ret;
|
2685
2830
|
});
|
2831
|
+
|
2832
|
+
// #6430 Areasplinerange series use unwrapped getPointSpline method, so we need to set this method again.
|
2833
|
+
if (seriesTypes.areasplinerange) {
|
2834
|
+
seriesTypes.areasplinerange.prototype.getPointSpline = seriesTypes.spline.prototype.getPointSpline;
|
2835
|
+
}
|
2686
2836
|
}
|
2687
2837
|
|
2688
2838
|
/**
|
@@ -2721,7 +2871,8 @@
|
|
2721
2871
|
wrap(seriesProto, 'getGraphPath', function(proceed, points) {
|
2722
2872
|
var series = this,
|
2723
2873
|
i,
|
2724
|
-
firstValid
|
2874
|
+
firstValid,
|
2875
|
+
popLastPoint;
|
2725
2876
|
|
2726
2877
|
// Connect the path
|
2727
2878
|
if (this.chart.polar) {
|
@@ -2737,6 +2888,7 @@
|
|
2737
2888
|
if (this.options.connectEnds !== false && firstValid !== undefined) {
|
2738
2889
|
this.connectEnds = true; // re-used in splines
|
2739
2890
|
points.splice(points.length, 0, points[firstValid]);
|
2891
|
+
popLastPoint = true;
|
2740
2892
|
}
|
2741
2893
|
|
2742
2894
|
// For area charts, pseudo points are added to the graph, now we need to translate these
|
@@ -2748,8 +2900,15 @@
|
|
2748
2900
|
}
|
2749
2901
|
|
2750
2902
|
// Run uber method
|
2751
|
-
|
2903
|
+
var ret = proceed.apply(this, [].slice.call(arguments, 1));
|
2752
2904
|
|
2905
|
+
/** #6212 points.splice method is adding points to an array. In case of areaspline getGraphPath method is used two times
|
2906
|
+
* and in both times points are added to an array. That is why points.pop is used, to get unmodified points.
|
2907
|
+
*/
|
2908
|
+
if (popLastPoint) {
|
2909
|
+
points.pop();
|
2910
|
+
}
|
2911
|
+
return ret;
|
2753
2912
|
});
|
2754
2913
|
|
2755
2914
|
|
@@ -2958,5 +3117,38 @@
|
|
2958
3117
|
return ret;
|
2959
3118
|
});
|
2960
3119
|
|
3120
|
+
wrap(H.Chart.prototype, 'getAxes', function(proceed) {
|
3121
|
+
|
3122
|
+
if (!this.pane) {
|
3123
|
+
this.pane = [];
|
3124
|
+
}
|
3125
|
+
each(H.splat(this.options.pane), function(paneOptions) {
|
3126
|
+
new H.Pane( // eslint-disable-line no-new
|
3127
|
+
paneOptions,
|
3128
|
+
this
|
3129
|
+
);
|
3130
|
+
}, this);
|
3131
|
+
|
3132
|
+
proceed.call(this);
|
3133
|
+
});
|
3134
|
+
|
3135
|
+
wrap(H.Chart.prototype, 'drawChartBox', function(proceed) {
|
3136
|
+
proceed.call(this);
|
3137
|
+
|
3138
|
+
each(this.pane, function(pane) {
|
3139
|
+
pane.render();
|
3140
|
+
});
|
3141
|
+
});
|
3142
|
+
|
3143
|
+
/**
|
3144
|
+
* Extend chart.get to also search in panes. Used internally in responsiveness
|
3145
|
+
* and chart.update.
|
3146
|
+
*/
|
3147
|
+
wrap(H.Chart.prototype, 'get', function(proceed, id) {
|
3148
|
+
return H.find(this.pane, function(pane) {
|
3149
|
+
return pane.options.id === id;
|
3150
|
+
}) || proceed.call(this, id);
|
3151
|
+
});
|
3152
|
+
|
2961
3153
|
}(Highcharts));
|
2962
3154
|
}));
|