highcharts-rails 4.1.4 → 4.1.5
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.
- checksums.yaml +4 -4
- data/CHANGELOG.markdown +46 -0
- data/app/assets/javascripts/highcharts.js +165 -116
- data/app/assets/javascripts/highcharts/adapters/standalone-framework.js +1 -1
- data/app/assets/javascripts/highcharts/highcharts-3d.js +8 -5
- data/app/assets/javascripts/highcharts/highcharts-more.js +49 -31
- data/app/assets/javascripts/highcharts/modules/broken-axis.js +1 -1
- data/app/assets/javascripts/highcharts/modules/canvas-tools.js +1 -1
- data/app/assets/javascripts/highcharts/modules/data.js +1 -1
- data/app/assets/javascripts/highcharts/modules/drilldown.js +110 -55
- data/app/assets/javascripts/highcharts/modules/exporting.js +2 -2
- data/app/assets/javascripts/highcharts/modules/heatmap.js +15 -8
- data/app/assets/javascripts/highcharts/modules/no-data-to-display.js +1 -1
- data/app/assets/javascripts/highcharts/modules/solid-gauge.js +29 -16
- data/app/assets/javascripts/highcharts/modules/treemap.js +3 -1
- data/lib/highcharts/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4cc9e5622951314ffef63262c82a65c0497f3fdb
|
4
|
+
data.tar.gz: 36185a5fe7cca92c015c733997b09003bb39f841
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a739bc1dde01881470be2af26db1d39a1f8392c18bbe6855c8b4517819dcd013e29b6de70ce704328cc74a63787cd9f6322851fdae08af65a33a464b5dae520
|
7
|
+
data.tar.gz: 2cd5ffd46e58ea78a37cbb27c5a94d1fe92193fcd99bf3357e8eec612a9f68b18002087a3792f5f97d30c4095e9dc6e04271563a5a98a64e439a54f930969cfd
|
data/CHANGELOG.markdown
CHANGED
@@ -1,3 +1,49 @@
|
|
1
|
+
# 4.1.5 / 2015-04-13
|
2
|
+
|
3
|
+
* Updated Highcharts to 4.1.5
|
4
|
+
* Added new option, series.keys.
|
5
|
+
* Added now option, autoRotationLimit, as an upper limit for when to apply auto rotation. Closes #3941.
|
6
|
+
* Added options to solidgauge, radius and innerRadius on individual points.
|
7
|
+
* Changed tooltip behaviour in line charts and derivatives. This made swithching between series easier when the other series was covered by the tooltip.
|
8
|
+
* Fixed #2922, redundant drilldown event on clicking data label.
|
9
|
+
* Fixed #3355, causing misaligned bars around the threshold value.
|
10
|
+
* Fixed #3758, setData on heatmap caused X axis to lose point range.
|
11
|
+
* Fixed #3839, axis labels not using available space after resize.
|
12
|
+
* Fixed #3867, errors on drill up on multi-series multi-level chart.
|
13
|
+
* Fixed #3912, shared tooltips not working well with pointPlacement.
|
14
|
+
* Fixed #3935, time axes got wrong extremes in rare cases.
|
15
|
+
* Fixed #3951, drilldown activeLabelStyle was lost after setting extremes.
|
16
|
+
* Fixed #3962, tooltip covered stacked columns near edges of the chart.
|
17
|
+
* Fixed #3967, shared tooltip not working with two datetime axes.
|
18
|
+
* Fixed #3969, legend indicator not displayed on colorAxis for 0 values.
|
19
|
+
* Fixed #3976, one legend item's height influenced all subsequent boxes.
|
20
|
+
* Fixed #3985, clicks registering incorrectly on column charts.
|
21
|
+
* Fixed #3988, column legend markers were not aligned to baseline.
|
22
|
+
* Fixed #3990, drilldown failed after destroying and re-initialising chart.
|
23
|
+
* Fixed #3995, all points were black after drilling in treemap with a coloraxis.
|
24
|
+
* Fixed #3996, font-style not taking effect with useHTML.
|
25
|
+
* Fixed #4001, errors thrown on area with a single point and zones.
|
26
|
+
* Fixed #4003, text replacement in export replaced content in label.
|
27
|
+
* Fixed #4006, wrong rendering of zones with values less then the minimum.
|
28
|
+
* Fixed #4014, touch scrolling not working on charts since the default followTouchMove changed.
|
29
|
+
* Fixed #4015, solid gauge color not updating in IE8.
|
30
|
+
* Fixed #4035, lineWidthPlus adding to states.hover.lineWidth.
|
31
|
+
* Fixed #4046, treemap issue with drillToNode and redraw of the chart.
|
32
|
+
* Fixed #4051, minPointLength gave wrong position on reversed Y axis.
|
33
|
+
* Fixed #4055, unable to set borderWidth to 0 for 3d columns.
|
34
|
+
* Fixed #4056, stack labels on reversed axis not vertically aligned correctly.
|
35
|
+
* Fixed #4062, 3d zIndex incorrect on chart resize.
|
36
|
+
* Fixed #4067, 3d columns datalabels not aligned.
|
37
|
+
* Fixed #4068, null colors rendered as black in columns and white in pies.
|
38
|
+
* Fixed #4069, setVisible was very slow on pies with many legend items.
|
39
|
+
* Fixed #4070, label ellipsis lost on vertical axis after redraw.
|
40
|
+
* Fixed #4075, zone elements were not destroyed on series update.
|
41
|
+
* Fixed #4079, bullets in tooltips had wrong encoding in IE8 on non-UTC pages.
|
42
|
+
* Fixed #4082, series with zones didn't apply hover line width.
|
43
|
+
* Fixed #4083, series with zones animated wrong on addPoint.
|
44
|
+
* Fixed #4085, wrong usage of momentjs in demo.
|
45
|
+
* Fixed #3832, bundled PhantomJS scripts not copied to filesystem on Windows.
|
46
|
+
|
1
47
|
# 4.1.4 / 2015-03-10
|
2
48
|
|
3
49
|
* Updated Highcharts to 4.1.4
|
@@ -2,7 +2,7 @@
|
|
2
2
|
// @compilation_level SIMPLE_OPTIMIZATIONS
|
3
3
|
|
4
4
|
/**
|
5
|
-
* @license Highcharts JS v4.1.
|
5
|
+
* @license Highcharts JS v4.1.5 (2015-04-13)
|
6
6
|
*
|
7
7
|
* (c) 2009-2014 Torstein Honsi
|
8
8
|
*
|
@@ -56,7 +56,7 @@ var UNDEFINED,
|
|
56
56
|
charts = [],
|
57
57
|
chartCount = 0,
|
58
58
|
PRODUCT = 'Highcharts',
|
59
|
-
VERSION = '4.1.
|
59
|
+
VERSION = '4.1.5',
|
60
60
|
|
61
61
|
// some constants for frequently used strings
|
62
62
|
DIV = 'div',
|
@@ -92,6 +92,8 @@ var UNDEFINED,
|
|
92
92
|
getDate,
|
93
93
|
getMonth,
|
94
94
|
getFullYear,
|
95
|
+
setMilliseconds,
|
96
|
+
setSeconds,
|
95
97
|
setMinutes,
|
96
98
|
setHours,
|
97
99
|
setDate,
|
@@ -1259,8 +1261,8 @@ defaultOptions = {
|
|
1259
1261
|
global: {
|
1260
1262
|
useUTC: true,
|
1261
1263
|
//timezoneOffset: 0,
|
1262
|
-
canvasToolsURL: 'http://code.highcharts.com/4.1.
|
1263
|
-
VMLRadialGradientURL: 'http://code.highcharts.com/4.1.
|
1264
|
+
canvasToolsURL: 'http://code.highcharts.com/4.1.5/modules/canvas-tools.js',
|
1265
|
+
VMLRadialGradientURL: 'http://code.highcharts.com/4.1.5/gfx/vml-radial-gradient.png'
|
1264
1266
|
},
|
1265
1267
|
chart: {
|
1266
1268
|
//animation: true,
|
@@ -1613,17 +1615,19 @@ function setTimeMethods() {
|
|
1613
1615
|
}
|
1614
1616
|
return d;
|
1615
1617
|
};
|
1616
|
-
getMinutes =
|
1617
|
-
getHours =
|
1618
|
-
getDay =
|
1619
|
-
getDate =
|
1620
|
-
getMonth =
|
1621
|
-
getFullYear =
|
1622
|
-
|
1623
|
-
|
1624
|
-
|
1625
|
-
|
1626
|
-
|
1618
|
+
getMinutes = GET + 'Minutes';
|
1619
|
+
getHours = GET + 'Hours';
|
1620
|
+
getDay = GET + 'Day';
|
1621
|
+
getDate = GET + 'Date';
|
1622
|
+
getMonth = GET + 'Month';
|
1623
|
+
getFullYear = GET + 'FullYear';
|
1624
|
+
setMilliseconds = SET + 'Milliseconds';
|
1625
|
+
setSeconds = SET + 'Seconds';
|
1626
|
+
setMinutes = SET + 'Minutes';
|
1627
|
+
setHours = SET + 'Hours';
|
1628
|
+
setDate = SET + 'Date';
|
1629
|
+
setMonth = SET + 'Month';
|
1630
|
+
setFullYear = SET + 'FullYear';
|
1627
1631
|
|
1628
1632
|
}
|
1629
1633
|
|
@@ -1784,7 +1788,7 @@ SVGElement.prototype = {
|
|
1784
1788
|
// Default base for animation
|
1785
1789
|
opacity: 1,
|
1786
1790
|
// For labels, these CSS properties are applied to the <text> node directly
|
1787
|
-
textProps: ['fontSize', 'fontWeight', 'fontFamily', 'color',
|
1791
|
+
textProps: ['fontSize', 'fontWeight', 'fontFamily', 'fontStyle', 'color',
|
1788
1792
|
'lineHeight', 'width', 'textDecoration', 'textShadow'],
|
1789
1793
|
|
1790
1794
|
/**
|
@@ -5912,7 +5916,10 @@ Tick.prototype = {
|
|
5912
5916
|
label.attr({ align: 'right' });
|
5913
5917
|
}
|
5914
5918
|
|
5915
|
-
|
5919
|
+
// If the label width exceeds the available space, set a text width to be
|
5920
|
+
// picked up below. Also, if a width has been set before, we need to set a new
|
5921
|
+
// one because the reported labelWidth will be limited by the box (#3938).
|
5922
|
+
if (labelWidth > slotWidth || (axis.autoRotation && label.styles.width)) {
|
5916
5923
|
textWidth = slotWidth;
|
5917
5924
|
}
|
5918
5925
|
|
@@ -7890,7 +7897,7 @@ Axis.prototype = {
|
|
7890
7897
|
if (horiz) {
|
7891
7898
|
autoRotation = defined(rotationOption) ?
|
7892
7899
|
[rotationOption] :
|
7893
|
-
slotSize < 80 && !labelOptions.staggerLines && !labelOptions.step && labelOptions.autoRotation;
|
7900
|
+
slotSize < pick(labelOptions.autoRotationLimit, 80) && !labelOptions.staggerLines && !labelOptions.step && labelOptions.autoRotation;
|
7894
7901
|
|
7895
7902
|
if (autoRotation) {
|
7896
7903
|
|
@@ -7979,7 +7986,11 @@ Axis.prototype = {
|
|
7979
7986
|
pos = tickPositions[i];
|
7980
7987
|
label = ticks[pos].label;
|
7981
7988
|
if (label) {
|
7982
|
-
|
7989
|
+
// Reset ellipsis in order to get the correct bounding box (#4070)
|
7990
|
+
if (label.styles.textOverflow === 'ellipsis') {
|
7991
|
+
label.css({ textOverflow: 'clip' });
|
7992
|
+
}
|
7993
|
+
if (label.getBBox().height > this.len / tickPositions.length - (labelMetrics.h - labelMetrics.f)) {
|
7983
7994
|
label.specCss = { textOverflow: 'ellipsis' };
|
7984
7995
|
}
|
7985
7996
|
}
|
@@ -8581,11 +8592,11 @@ Axis.prototype.getTimeTicks = function (normalizedInterval, min, max, startOfWee
|
|
8581
8592
|
count = normalizedInterval.count;
|
8582
8593
|
|
8583
8594
|
if (defined(min)) { // #1300
|
8584
|
-
minDate
|
8595
|
+
minDate[setMilliseconds](interval >= timeUnits.second ? 0 : // #3935
|
8585
8596
|
count * mathFloor(minDate.getMilliseconds() / count)); // #3652, #3654
|
8586
8597
|
|
8587
8598
|
if (interval >= timeUnits.second) { // second
|
8588
|
-
minDate
|
8599
|
+
minDate[setSeconds](interval >= timeUnits.minute ? 0 : // #3935
|
8589
8600
|
count * mathFloor(minDate.getSeconds() / count));
|
8590
8601
|
}
|
8591
8602
|
|
@@ -9065,6 +9076,7 @@ Tooltip.prototype = {
|
|
9065
9076
|
var chart = this.chart,
|
9066
9077
|
distance = this.distance,
|
9067
9078
|
ret = {},
|
9079
|
+
h = point.h,
|
9068
9080
|
swapped,
|
9069
9081
|
first = ['y', chart.chartHeight, boxHeight, point.plotY + chart.plotTop],
|
9070
9082
|
second = ['x', chart.chartWidth, boxWidth, point.plotX + chart.plotLeft],
|
@@ -9085,9 +9097,9 @@ Tooltip.prototype = {
|
|
9085
9097
|
} else if (!preferFarSide && roomLeft) {
|
9086
9098
|
ret[dim] = alignedLeft;
|
9087
9099
|
} else if (roomLeft) {
|
9088
|
-
ret[dim] = alignedLeft;
|
9100
|
+
ret[dim] = alignedLeft - h < 0 ? alignedLeft : alignedLeft - h;
|
9089
9101
|
} else if (roomRight) {
|
9090
|
-
ret[dim] = alignedRight;
|
9102
|
+
ret[dim] = alignedRight + h + innerSize > outerSize ? alignedRight : alignedRight + h;
|
9091
9103
|
} else {
|
9092
9104
|
return false;
|
9093
9105
|
}
|
@@ -9253,8 +9265,13 @@ Tooltip.prototype = {
|
|
9253
9265
|
label.attr({
|
9254
9266
|
stroke: borderColor
|
9255
9267
|
});
|
9256
|
-
|
9257
|
-
|
9268
|
+
tooltip.updatePosition({
|
9269
|
+
plotX: x,
|
9270
|
+
plotY: y,
|
9271
|
+
negative: point.negative,
|
9272
|
+
ttBelow: point.ttBelow,
|
9273
|
+
h: (point.shapeArgs && point.shapeArgs.height) || 0
|
9274
|
+
});
|
9258
9275
|
|
9259
9276
|
this.isHidden = false;
|
9260
9277
|
}
|
@@ -9520,8 +9537,6 @@ Pointer.prototype = {
|
|
9520
9537
|
hoverPoint = chart.hoverPoint,
|
9521
9538
|
hoverSeries = chart.hoverSeries,
|
9522
9539
|
i,
|
9523
|
-
trueXkd,
|
9524
|
-
trueX,
|
9525
9540
|
//j,
|
9526
9541
|
distance = chart.chartWidth,
|
9527
9542
|
rdistance = chart.chartWidth,
|
@@ -9541,8 +9556,13 @@ Pointer.prototype = {
|
|
9541
9556
|
}
|
9542
9557
|
}
|
9543
9558
|
|
9559
|
+
// If it has a hoverPoint and that series requires direct touch (like columns),
|
9560
|
+
// use the hoverPoint (#3899). Otherwise, search the k-d tree.
|
9561
|
+
if (!shared && hoverSeries && hoverSeries.directTouch && hoverPoint) {
|
9562
|
+
kdpoint = hoverPoint;
|
9563
|
+
|
9544
9564
|
// Handle shared tooltip or cases where a series is not yet hovered
|
9545
|
-
|
9565
|
+
} else {
|
9546
9566
|
// Find nearest points on all series
|
9547
9567
|
each(series, function (s) {
|
9548
9568
|
// Skip hidden series
|
@@ -9557,19 +9577,14 @@ Pointer.prototype = {
|
|
9557
9577
|
// Find absolute nearest point
|
9558
9578
|
each(kdpoints, function (p) {
|
9559
9579
|
if (p && defined(p.plotX) && defined(p.plotY)) {
|
9560
|
-
if ((p.dist.distX < distance) || ((p.dist.distX === distance || p.series.kdDimensions > 1) &&
|
9580
|
+
if ((p.dist.distX < distance) || ((p.dist.distX === distance || p.series.kdDimensions > 1) &&
|
9581
|
+
p.dist.distR < rdistance)) {
|
9561
9582
|
distance = p.dist.distX;
|
9562
9583
|
rdistance = p.dist.distR;
|
9563
9584
|
kdpoint = p;
|
9564
9585
|
}
|
9565
9586
|
}
|
9566
|
-
});
|
9567
|
-
|
9568
|
-
// Handle non-shared tooltips
|
9569
|
-
} else {
|
9570
|
-
// If it has a hoverPoint and that series requires direct touch (like columns), use the hoverPoint (#3899).
|
9571
|
-
// Otherwise, search the k-d tree (like scatter).
|
9572
|
-
kdpoint = (hoverSeries.directTouch && hoverPoint) || (hoverSeries && hoverSeries.searchPoint(e));
|
9587
|
+
});
|
9573
9588
|
}
|
9574
9589
|
|
9575
9590
|
// Refresh tooltip for kdpoint if new hover point or tooltip was hidden // #3926
|
@@ -9577,10 +9592,8 @@ Pointer.prototype = {
|
|
9577
9592
|
// Draw tooltip if necessary
|
9578
9593
|
if (shared && !kdpoint.series.noSharedTooltip) {
|
9579
9594
|
i = kdpoints.length;
|
9580
|
-
trueXkd = kdpoint.clientX;
|
9581
9595
|
while (i--) {
|
9582
|
-
|
9583
|
-
if (kdpoints[i].x !== kdpoint.x || trueX !== trueXkd || (kdpoints[i].series.noSharedTooltip || false)) {
|
9596
|
+
if (kdpoints[i].clientX !== kdpoint.clientX || kdpoints[i].series.noSharedTooltip) {
|
9584
9597
|
kdpoints.splice(i, 1);
|
9585
9598
|
}
|
9586
9599
|
}
|
@@ -9593,8 +9606,9 @@ Pointer.prototype = {
|
|
9593
9606
|
if (point !== kdpoint) {
|
9594
9607
|
point.onMouseOver(e);
|
9595
9608
|
}
|
9596
|
-
});
|
9597
|
-
|
9609
|
+
});
|
9610
|
+
// #3919, #3985 do mouseover on the closest point last to ensure it is the hoverpoint
|
9611
|
+
((hoverSeries && hoverSeries.directTouch && hoverPoint) || kdpoint).onMouseOver(e);
|
9598
9612
|
} else {
|
9599
9613
|
if (tooltip) {
|
9600
9614
|
tooltip.refresh(kdpoint, e);
|
@@ -10348,7 +10362,7 @@ if (win.PointerEvent || win.MSPointerEvent) {
|
|
10348
10362
|
});
|
10349
10363
|
},
|
10350
10364
|
onDocumentPointerUp: function (e) {
|
10351
|
-
translateMSPointer(e, '
|
10365
|
+
translateMSPointer(e, 'onDocumentTouchEnd', 'touchend', function (e) {
|
10352
10366
|
delete touches[e.pointerId];
|
10353
10367
|
});
|
10354
10368
|
},
|
@@ -10366,7 +10380,7 @@ if (win.PointerEvent || win.MSPointerEvent) {
|
|
10366
10380
|
// Disable default IE actions for pinch and such on chart element
|
10367
10381
|
wrap(Pointer.prototype, 'init', function (proceed, chart, options) {
|
10368
10382
|
proceed.call(this, chart, options);
|
10369
|
-
if (this.hasZoom
|
10383
|
+
if (this.hasZoom) { // #4014
|
10370
10384
|
css(chart.container, {
|
10371
10385
|
'-ms-touch-action': NONE,
|
10372
10386
|
'touch-action': NONE
|
@@ -10657,7 +10671,8 @@ Legend.prototype = {
|
|
10657
10671
|
|
10658
10672
|
// Get the baseline for the first item - the font size is equal for all
|
10659
10673
|
if (!legend.baseline) {
|
10660
|
-
legend.
|
10674
|
+
legend.fontMetrics = renderer.fontMetrics(itemStyle.fontSize, li);
|
10675
|
+
legend.baseline = legend.fontMetrics.f + 3 + itemMarginTop;
|
10661
10676
|
li.attr('y', legend.baseline);
|
10662
10677
|
}
|
10663
10678
|
|
@@ -10691,6 +10706,7 @@ Legend.prototype = {
|
|
10691
10706
|
(widthOption || (chart.chartWidth - 2 * padding - initialItemX - options.x))) {
|
10692
10707
|
legend.itemX = initialItemX;
|
10693
10708
|
legend.itemY += itemMarginTop + legend.lastLineHeight + itemMarginBottom;
|
10709
|
+
legend.lastLineHeight = 0; // reset for next line (#915, #3976)
|
10694
10710
|
}
|
10695
10711
|
|
10696
10712
|
// If the item exceeds the height, start a new column
|
@@ -11094,11 +11110,11 @@ var LegendSymbolMixin = Highcharts.LegendSymbolMixin = {
|
|
11094
11110
|
* @param {Object} item The series (this) or point
|
11095
11111
|
*/
|
11096
11112
|
drawRectangle: function (legend, item) {
|
11097
|
-
var symbolHeight = legend.options.symbolHeight ||
|
11098
|
-
|
11113
|
+
var symbolHeight = legend.options.symbolHeight || legend.fontMetrics.f;
|
11114
|
+
|
11099
11115
|
item.legendSymbol = this.chart.renderer.rect(
|
11100
11116
|
0,
|
11101
|
-
legend.baseline -
|
11117
|
+
legend.baseline - symbolHeight + 1, // #3988
|
11102
11118
|
legend.symbolWidth,
|
11103
11119
|
symbolHeight,
|
11104
11120
|
legend.options.symbolRadius || 0
|
@@ -11119,12 +11135,11 @@ var LegendSymbolMixin = Highcharts.LegendSymbolMixin = {
|
|
11119
11135
|
var options = this.options,
|
11120
11136
|
markerOptions = options.marker,
|
11121
11137
|
radius,
|
11122
|
-
legendOptions = legend.options,
|
11123
11138
|
legendSymbol,
|
11124
11139
|
symbolWidth = legend.symbolWidth,
|
11125
11140
|
renderer = this.chart.renderer,
|
11126
11141
|
legendItemGroup = this.legendGroup,
|
11127
|
-
verticalCenter = legend.baseline - mathRound(
|
11142
|
+
verticalCenter = legend.baseline - mathRound(legend.fontMetrics.b * 0.3),
|
11128
11143
|
attr;
|
11129
11144
|
|
11130
11145
|
// Draw the line
|
@@ -12365,7 +12380,7 @@ Chart.prototype = {
|
|
12365
12380
|
chart.getAxisMargins();
|
12366
12381
|
|
12367
12382
|
// If the plot area size has changed significantly, calculate tick positions again
|
12368
|
-
redoHorizontal = tempWidth / chart.plotWidth > 1.
|
12383
|
+
redoHorizontal = tempWidth / chart.plotWidth > 1.1;
|
12369
12384
|
redoVertical = tempHeight / chart.plotHeight > 1.1;
|
12370
12385
|
|
12371
12386
|
if (redoHorizontal || redoVertical) {
|
@@ -12713,7 +12728,8 @@ Point.prototype = {
|
|
12713
12728
|
optionsToObject: function (options) {
|
12714
12729
|
var ret = {},
|
12715
12730
|
series = this.series,
|
12716
|
-
|
12731
|
+
keys = series.options.keys, // docs: http://jsfiddle.net/ch4v7n8v/1
|
12732
|
+
pointArrayMap = keys || series.pointArrayMap || ['y'],
|
12717
12733
|
valueCount = pointArrayMap.length,
|
12718
12734
|
firstItemType,
|
12719
12735
|
i = 0,
|
@@ -12724,7 +12740,7 @@ Point.prototype = {
|
|
12724
12740
|
|
12725
12741
|
} else if (isArray(options)) {
|
12726
12742
|
// with leading x value
|
12727
|
-
if (options.length > valueCount) {
|
12743
|
+
if (!keys && options.length > valueCount) {
|
12728
12744
|
firstItemType = typeof options[0];
|
12729
12745
|
if (firstItemType === 'string') {
|
12730
12746
|
ret.name = options[0];
|
@@ -13559,8 +13575,6 @@ Series.prototype = {
|
|
13559
13575
|
xMax = xExtremes.max,
|
13560
13576
|
validValue,
|
13561
13577
|
withinRange,
|
13562
|
-
dataMin,
|
13563
|
-
dataMax,
|
13564
13578
|
x,
|
13565
13579
|
y,
|
13566
13580
|
i,
|
@@ -13594,8 +13608,8 @@ Series.prototype = {
|
|
13594
13608
|
}
|
13595
13609
|
}
|
13596
13610
|
}
|
13597
|
-
this.dataMin =
|
13598
|
-
this.dataMax =
|
13611
|
+
this.dataMin = arrayMin(activeYData);
|
13612
|
+
this.dataMax = arrayMax(activeYData);
|
13599
13613
|
},
|
13600
13614
|
|
13601
13615
|
/**
|
@@ -13751,7 +13765,7 @@ Series.prototype = {
|
|
13751
13765
|
this.sharedClipKey = sharedClipKey;
|
13752
13766
|
}
|
13753
13767
|
|
13754
|
-
// Remove the shared clipping
|
13768
|
+
// Remove the shared clipping rectangle when all series are shown
|
13755
13769
|
if (!animation) {
|
13756
13770
|
clipRect.count -= 1;
|
13757
13771
|
if (clipRect.count <= 0 && sharedClipKey && chart[sharedClipKey]) {
|
@@ -14048,6 +14062,10 @@ Series.prototype = {
|
|
14048
14062
|
if (!defaultLineColor) {
|
14049
14063
|
attr.lineColor = point.color; // Bubbles take point color, line markers use white
|
14050
14064
|
}
|
14065
|
+
// Color is explicitly set to null or undefined (#1288, #4068)
|
14066
|
+
if (normalOptions.hasOwnProperty('color') && !normalOptions.color) {
|
14067
|
+
delete normalOptions.color;
|
14068
|
+
}
|
14051
14069
|
pointAttr[NORMAL_STATE] = series.convertAttribs(extend(attr, normalOptions), seriesPointAttr[NORMAL_STATE]);
|
14052
14070
|
|
14053
14071
|
// inherit from point normal and series hover
|
@@ -14123,10 +14141,9 @@ Series.prototype = {
|
|
14123
14141
|
// Clear the animation timeout if we are destroying the series during initial animation
|
14124
14142
|
clearTimeout(series.animationTimeout);
|
14125
14143
|
|
14126
|
-
//
|
14127
|
-
|
14128
|
-
|
14129
|
-
if (series[prop]) {
|
14144
|
+
// Destroy all SVGElements associated to the series
|
14145
|
+
for (prop in series) {
|
14146
|
+
if (series[prop] instanceof SVGElement && !series[prop].survive) { // Survive provides a hook for not destroying
|
14130
14147
|
|
14131
14148
|
// issue 134 workaround
|
14132
14149
|
destroy = issue134 && prop === 'group' ?
|
@@ -14135,7 +14152,7 @@ Series.prototype = {
|
|
14135
14152
|
|
14136
14153
|
series[prop][destroy]();
|
14137
14154
|
}
|
14138
|
-
}
|
14155
|
+
}
|
14139
14156
|
|
14140
14157
|
// remove from hoverSeries
|
14141
14158
|
if (chart.hoverSeries === series) {
|
@@ -14252,7 +14269,7 @@ Series.prototype = {
|
|
14252
14269
|
zones = this.zones;
|
14253
14270
|
|
14254
14271
|
each(zones, function (threshold, i) {
|
14255
|
-
props.push(['
|
14272
|
+
props.push(['zoneGraph' + i, threshold.color || series.color, threshold.dashStyle || options.dashStyle]);
|
14256
14273
|
});
|
14257
14274
|
|
14258
14275
|
// Draw the graph
|
@@ -14310,14 +14327,24 @@ Series.prototype = {
|
|
14310
14327
|
if (zones.length && (graph || area)) {
|
14311
14328
|
// The use of the Color Threshold assumes there are no gaps
|
14312
14329
|
// so it is safe to hide the original graph and area
|
14313
|
-
graph
|
14314
|
-
|
14330
|
+
if (graph) {
|
14331
|
+
graph.hide();
|
14332
|
+
}
|
14333
|
+
if (area) {
|
14334
|
+
area.hide();
|
14335
|
+
}
|
14315
14336
|
|
14316
14337
|
// Create the clips
|
14317
14338
|
each(zones, function (threshold, i) {
|
14318
14339
|
translatedFrom = pick(translatedTo, (reversed ? (horiz ? chart.plotWidth : 0) : (horiz ? 0 : axis.toPixels(axis.min))));
|
14319
14340
|
translatedTo = mathRound(axis.toPixels(pick(threshold.value, axis.max), true));
|
14320
14341
|
|
14342
|
+
if (axis.isXAxis) {
|
14343
|
+
translatedFrom = translatedFrom > translatedTo ? translatedTo : translatedFrom; //#4006 from should be less or equal then to
|
14344
|
+
} else {
|
14345
|
+
translatedFrom = translatedFrom < translatedTo ? translatedTo : translatedFrom; //#4006 from should be less or equal then to
|
14346
|
+
}
|
14347
|
+
|
14321
14348
|
if (ignoreZones) {
|
14322
14349
|
translatedFrom = translatedTo = axis.toPixels(axis.max);
|
14323
14350
|
}
|
@@ -14369,10 +14396,12 @@ Series.prototype = {
|
|
14369
14396
|
} else {
|
14370
14397
|
clips[i] = renderer.clipRect(clipAttr);
|
14371
14398
|
|
14372
|
-
|
14399
|
+
if (graph) {
|
14400
|
+
series['zoneGraph' + i].clip(clips[i]);
|
14401
|
+
}
|
14373
14402
|
|
14374
14403
|
if (area) {
|
14375
|
-
series['
|
14404
|
+
series['zoneArea' + i].clip(clips[i]);
|
14376
14405
|
}
|
14377
14406
|
}
|
14378
14407
|
// if this zone extends out of the axis, ignore the others
|
@@ -14611,7 +14640,7 @@ Series.prototype = {
|
|
14611
14640
|
|
14612
14641
|
kdDimensions: 1,
|
14613
14642
|
kdTree: null,
|
14614
|
-
kdAxisArray: ['
|
14643
|
+
kdAxisArray: ['clientX', 'plotY'],
|
14615
14644
|
kdComparer: 'distX',
|
14616
14645
|
|
14617
14646
|
searchPoint: function (e) {
|
@@ -14620,10 +14649,10 @@ Series.prototype = {
|
|
14620
14649
|
yAxis = series.yAxis,
|
14621
14650
|
inverted = series.chart.inverted;
|
14622
14651
|
|
14623
|
-
|
14624
|
-
|
14625
|
-
|
14626
|
-
|
14652
|
+
return this.searchKDTree({
|
14653
|
+
clientX: inverted ? xAxis.len - e.chartY + xAxis.pos : e.chartX - xAxis.pos,
|
14654
|
+
plotY: inverted ? yAxis.len - e.chartX + yAxis.pos : e.chartY - yAxis.pos
|
14655
|
+
});
|
14627
14656
|
},
|
14628
14657
|
|
14629
14658
|
buildKDTree: function () {
|
@@ -14816,7 +14845,8 @@ StackItem.prototype = {
|
|
14816
14845
|
axis = stackItem.axis,
|
14817
14846
|
chart = axis.chart,
|
14818
14847
|
inverted = chart.inverted,
|
14819
|
-
|
14848
|
+
reversed = axis.reversed,
|
14849
|
+
neg = (this.isNegative && !reversed) || (!this.isNegative && reversed), // #4056
|
14820
14850
|
y = axis.translate(axis.usePercentage ? 100 : this.total, 0, 0, 0, 1), // stack value translated mapped to chart coordinates
|
14821
14851
|
yZero = axis.translate(0), // stack origin
|
14822
14852
|
h = mathAbs(y - yZero), // stack height
|
@@ -15273,20 +15303,25 @@ extend(Series.prototype, {
|
|
15273
15303
|
chart = series.chart,
|
15274
15304
|
names = series.xAxis && series.xAxis.names,
|
15275
15305
|
currentShift = (graph && graph.shift) || 0,
|
15306
|
+
shiftShapes = ['graph', 'area'],
|
15276
15307
|
dataOptions = seriesOptions.data,
|
15277
15308
|
point,
|
15278
15309
|
isInTheMiddle,
|
15279
15310
|
xData = series.xData,
|
15280
|
-
|
15281
|
-
|
15311
|
+
i,
|
15312
|
+
x;
|
15282
15313
|
|
15283
15314
|
setAnimation(animation, chart);
|
15284
15315
|
|
15285
15316
|
// Make graph animate sideways
|
15286
15317
|
if (shift) {
|
15287
|
-
|
15288
|
-
|
15289
|
-
|
15318
|
+
i = series.zones.length;
|
15319
|
+
while (i--) {
|
15320
|
+
shiftShapes.push('zoneGraph' + i, 'zoneArea' + i);
|
15321
|
+
}
|
15322
|
+
each(shiftShapes, function (shape) {
|
15323
|
+
if (series[shape]) {
|
15324
|
+
series[shape].shift = currentShift + 1;
|
15290
15325
|
}
|
15291
15326
|
});
|
15292
15327
|
}
|
@@ -15744,7 +15779,7 @@ var AreaSeries = extendClass(Series, {
|
|
15744
15779
|
props = [['area', this.color, options.fillColor]]; // area name, main color, fill color
|
15745
15780
|
|
15746
15781
|
each(zones, function (threshold, i) {
|
15747
|
-
props.push(['
|
15782
|
+
props.push(['zoneArea' + i, threshold.color || series.color, threshold.fillColor || options.fillColor]);
|
15748
15783
|
});
|
15749
15784
|
each(props, function (prop) {
|
15750
15785
|
var areaKey = prop[0],
|
@@ -16083,8 +16118,11 @@ var ColumnSeries = extendClass(Series, {
|
|
16083
16118
|
xCrisp = -(borderWidth % 2 ? 0.5 : 0),
|
16084
16119
|
yCrisp = borderWidth % 2 ? 0.5 : 1;
|
16085
16120
|
|
16086
|
-
if (chart.
|
16087
|
-
|
16121
|
+
if (chart.inverted) {
|
16122
|
+
translatedThreshold -= 0.5; // #3355
|
16123
|
+
if (chart.renderer.isVML) {
|
16124
|
+
yCrisp += 1;
|
16125
|
+
}
|
16088
16126
|
}
|
16089
16127
|
|
16090
16128
|
// When the pointPadding is 0, we want the columns to be packed tightly, so we allow individual
|
@@ -16106,16 +16144,18 @@ var ColumnSeries = extendClass(Series, {
|
|
16106
16144
|
right,
|
16107
16145
|
bottom,
|
16108
16146
|
fromTop,
|
16147
|
+
up,
|
16109
16148
|
barH = mathMax(plotY, yBottom) - barY;
|
16110
16149
|
|
16111
16150
|
// Handle options.minPointLength
|
16112
16151
|
if (mathAbs(barH) < minPointLength) {
|
16113
16152
|
if (minPointLength) {
|
16114
16153
|
barH = minPointLength;
|
16154
|
+
up = (!yAxis.reversed && !point.negative) || (yAxis.reversed && point.negative);
|
16115
16155
|
barY =
|
16116
16156
|
mathRound(mathAbs(barY - translatedThreshold) > minPointLength ? // stacked
|
16117
16157
|
yBottom - minPointLength : // keep position
|
16118
|
-
translatedThreshold - (
|
16158
|
+
translatedThreshold - (up ? minPointLength : 0)); // #1485, #4051
|
16119
16159
|
}
|
16120
16160
|
}
|
16121
16161
|
|
@@ -16397,38 +16437,42 @@ var PiePoint = extendClass(Point, {
|
|
16397
16437
|
* @param {Boolean} vis Whether to show the slice or not. If undefined, the
|
16398
16438
|
* visibility is toggled
|
16399
16439
|
*/
|
16400
|
-
setVisible: function (vis) {
|
16440
|
+
setVisible: function (vis, force) {
|
16401
16441
|
var point = this,
|
16402
16442
|
series = point.series,
|
16403
16443
|
chart = series.chart,
|
16404
16444
|
doRedraw = !series.isDirty && series.options.ignoreHiddenPoint;
|
16405
16445
|
|
16406
|
-
// if
|
16407
|
-
|
16408
|
-
|
16409
|
-
|
16410
|
-
|
16411
|
-
|
16412
|
-
|
16413
|
-
|
16414
|
-
|
16415
|
-
|
16446
|
+
// Only if the value has changed
|
16447
|
+
if (vis !== point.visible || force) {
|
16448
|
+
|
16449
|
+
// If called without an argument, toggle visibility
|
16450
|
+
point.visible = point.options.visible = vis = vis === UNDEFINED ? !point.visible : vis;
|
16451
|
+
series.options.data[inArray(point, series.data)] = point.options; // update userOptions.data
|
16452
|
+
|
16453
|
+
// Show and hide associated elements
|
16454
|
+
each(['graphic', 'dataLabel', 'connector', 'shadowGroup'], function (key) {
|
16455
|
+
if (point[key]) {
|
16456
|
+
point[key][vis ? 'show' : 'hide'](true);
|
16457
|
+
}
|
16458
|
+
});
|
16416
16459
|
|
16417
|
-
|
16418
|
-
|
16419
|
-
|
16420
|
-
|
16421
|
-
|
16422
|
-
|
16460
|
+
if (point.legendItem) {
|
16461
|
+
if (chart.hasRendered) {
|
16462
|
+
series.updateTotals();
|
16463
|
+
chart.legend.clearItems();
|
16464
|
+
if (!doRedraw) {
|
16465
|
+
chart.legend.render();
|
16466
|
+
}
|
16423
16467
|
}
|
16468
|
+
chart.legend.colorizeItem(point, vis);
|
16424
16469
|
}
|
16425
|
-
chart.legend.colorizeItem(point, vis);
|
16426
|
-
}
|
16427
16470
|
|
16428
|
-
|
16429
|
-
|
16430
|
-
|
16431
|
-
|
16471
|
+
// Handle ignore hidden slices
|
16472
|
+
if (doRedraw) {
|
16473
|
+
series.isDirty = true;
|
16474
|
+
chart.redraw();
|
16475
|
+
}
|
16432
16476
|
}
|
16433
16477
|
},
|
16434
16478
|
|
@@ -16515,7 +16559,7 @@ var PieSeries = {
|
|
16515
16559
|
if (graphic) {
|
16516
16560
|
// start values
|
16517
16561
|
graphic.attr({
|
16518
|
-
r: series.center[3] / 2, // animate from inner radius (#779)
|
16562
|
+
r: point.startR || (series.center[3] / 2), // animate from inner radius (#779)
|
16519
16563
|
start: startAngleRad,
|
16520
16564
|
end: startAngleRad
|
16521
16565
|
});
|
@@ -16727,6 +16771,9 @@ var PieSeries = {
|
|
16727
16771
|
|
16728
16772
|
// draw the slices
|
16729
16773
|
each(series.points, function (point) {
|
16774
|
+
|
16775
|
+
var visible = point.options.visible;
|
16776
|
+
|
16730
16777
|
graphic = point.graphic;
|
16731
16778
|
shapeArgs = point.shapeArgs;
|
16732
16779
|
shadowGroup = point.shadowGroup;
|
@@ -16766,9 +16813,9 @@ var PieSeries = {
|
|
16766
16813
|
.shadow(shadow, shadowGroup);
|
16767
16814
|
}
|
16768
16815
|
|
16769
|
-
//
|
16770
|
-
if (
|
16771
|
-
point.setVisible(
|
16816
|
+
// Detect point specific visibility (#2430)
|
16817
|
+
if (visible !== undefined) {
|
16818
|
+
point.setVisible(visible, true);
|
16772
16819
|
}
|
16773
16820
|
|
16774
16821
|
});
|
@@ -17302,7 +17349,7 @@ if (seriesTypes.pie) {
|
|
17302
17349
|
point = points[j];
|
17303
17350
|
labelPos = point.labelPos;
|
17304
17351
|
dataLabel = point.dataLabel;
|
17305
|
-
visibility = point.visible === false ? HIDDEN :
|
17352
|
+
visibility = point.visible === false ? HIDDEN : 'inherit';
|
17306
17353
|
naturalY = labelPos[1];
|
17307
17354
|
|
17308
17355
|
if (distanceOption > 0) {
|
@@ -17323,6 +17370,7 @@ if (seriesTypes.pie) {
|
|
17323
17370
|
|
17324
17371
|
// get the x - use the natural x position for first and last slot, to prevent the top
|
17325
17372
|
// and botton slice connectors from touching each other on either side
|
17373
|
+
// Problem: Should check that it makes sense - http://jsfiddle.net/highcharts/n1y6ngxz/
|
17326
17374
|
x = options.justify ?
|
17327
17375
|
seriesCenter[0] + (i ? -1 : 1) * (radius + distanceOption) :
|
17328
17376
|
series.getX(y === centerY - radius - distanceOption || y === centerY + radius + distanceOption ? naturalY : y, i);
|
@@ -17565,7 +17613,7 @@ if (seriesTypes.column) {
|
|
17565
17613
|
|
17566
17614
|
|
17567
17615
|
/**
|
17568
|
-
* Highcharts JS v4.1.
|
17616
|
+
* Highcharts JS v4.1.5 (2015-04-13)
|
17569
17617
|
* Highcharts module to hide overlapping data labels. This module is included by default in Highmaps.
|
17570
17618
|
*
|
17571
17619
|
* (c) 2010-2014 Torstein Honsi
|
@@ -18333,10 +18381,10 @@ extend(Series.prototype, {
|
|
18333
18381
|
var series = this,
|
18334
18382
|
options = series.options,
|
18335
18383
|
graph = series.graph,
|
18336
|
-
graphNeg = series.graphNeg,
|
18337
18384
|
stateOptions = options.states,
|
18338
18385
|
lineWidth = options.lineWidth,
|
18339
|
-
attribs
|
18386
|
+
attribs,
|
18387
|
+
i = 0;
|
18340
18388
|
|
18341
18389
|
state = state || NORMAL_STATE;
|
18342
18390
|
|
@@ -18348,7 +18396,7 @@ extend(Series.prototype, {
|
|
18348
18396
|
}
|
18349
18397
|
|
18350
18398
|
if (state) {
|
18351
|
-
lineWidth =
|
18399
|
+
lineWidth = stateOptions[state].lineWidth || lineWidth + (stateOptions[state].lineWidthPlus || 0); // #4035
|
18352
18400
|
}
|
18353
18401
|
|
18354
18402
|
if (graph && !graph.dashstyle) { // hover is turned off for dashed lines in VML
|
@@ -18357,8 +18405,9 @@ extend(Series.prototype, {
|
|
18357
18405
|
};
|
18358
18406
|
// use attr because animate will cause any other animation on the graph to stop
|
18359
18407
|
graph.attr(attribs);
|
18360
|
-
|
18361
|
-
|
18408
|
+
while (series['zoneGraph' + i]) {
|
18409
|
+
series['zoneGraph' + i].attr(attribs);
|
18410
|
+
i = i + 1;
|
18362
18411
|
}
|
18363
18412
|
}
|
18364
18413
|
}
|