highcharts-rails 4.2.6 → 4.2.7
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/Rakefile +1 -0
- data/app/assets/javascripts/highcharts.js +252 -171
- data/app/assets/javascripts/highcharts/highcharts-3d.js +2 -1
- data/app/assets/javascripts/highcharts/highcharts-more.js +81 -50
- data/app/assets/javascripts/highcharts/modules/boost.js +4 -0
- 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 +4 -1
- data/app/assets/javascripts/highcharts/modules/drilldown.js +50 -51
- data/app/assets/javascripts/highcharts/modules/exporting.js +6 -5
- data/app/assets/javascripts/highcharts/modules/heatmap.js +24 -16
- data/app/assets/javascripts/highcharts/modules/no-data-to-display.js +1 -1
- data/app/assets/javascripts/highcharts/modules/offline-exporting.js +1 -2
- data/app/assets/javascripts/highcharts/modules/series-label.js +519 -0
- data/app/assets/javascripts/highcharts/modules/solid-gauge.js +1 -1
- data/app/assets/javascripts/highcharts/modules/treemap.js +6 -4
- data/lib/highcharts/version.rb +1 -1
- metadata +2 -1
@@ -2,7 +2,7 @@
|
|
2
2
|
// @compilation_level SIMPLE_OPTIMIZATIONS
|
3
3
|
|
4
4
|
/**
|
5
|
-
* @license Highcharts JS v4.2.
|
5
|
+
* @license Highcharts JS v4.2.7 (2016-09-21)
|
6
6
|
*
|
7
7
|
* 3D features for Highcharts JS
|
8
8
|
*
|
@@ -503,6 +503,7 @@
|
|
503
503
|
}));
|
504
504
|
};
|
505
505
|
}
|
506
|
+
animation = anim; // Only when duration (#5572)
|
506
507
|
}
|
507
508
|
return proceed.call(this, params, animation, complete);
|
508
509
|
});
|
@@ -2,7 +2,7 @@
|
|
2
2
|
// @compilation_level SIMPLE_OPTIMIZATIONS
|
3
3
|
|
4
4
|
/**
|
5
|
-
* @license Highcharts JS v4.2.
|
5
|
+
* @license Highcharts JS v4.2.7 (2016-09-21)
|
6
6
|
*
|
7
7
|
* (c) 2009-2016 Torstein Honsi
|
8
8
|
*
|
@@ -241,21 +241,30 @@ var arrayMin = Highcharts.arrayMin,
|
|
241
241
|
* method.
|
242
242
|
*/
|
243
243
|
getLinePath: function (lineWidth, radius) {
|
244
|
-
var center = this.center
|
245
|
-
|
244
|
+
var center = this.center,
|
245
|
+
end,
|
246
|
+
chart = this.chart,
|
247
|
+
r = pick(radius, center[2] / 2 - this.offset),
|
248
|
+
path;
|
246
249
|
|
247
|
-
|
248
|
-
this.
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
250
|
+
if (this.isCircular || radius !== undefined) {
|
251
|
+
path = this.chart.renderer.symbols.arc(
|
252
|
+
this.left + center[0],
|
253
|
+
this.top + center[1],
|
254
|
+
r,
|
255
|
+
r,
|
256
|
+
{
|
257
|
+
start: this.startAngleRad,
|
258
|
+
end: this.endAngleRad,
|
259
|
+
open: true,
|
260
|
+
innerR: 0
|
261
|
+
}
|
262
|
+
);
|
263
|
+
} else {
|
264
|
+
end = this.postTranslate(this.angleRad, r);
|
265
|
+
path = ['M', center[0] + chart.plotLeft, center[1] + chart.plotTop, 'L', end.x, end.y];
|
266
|
+
}
|
267
|
+
return path;
|
259
268
|
},
|
260
269
|
|
261
270
|
/**
|
@@ -294,6 +303,11 @@ var arrayMin = Highcharts.arrayMin,
|
|
294
303
|
* tickPositions are computed, so that ticks will extend passed the real max.
|
295
304
|
*/
|
296
305
|
beforeSetTickPositions: function () {
|
306
|
+
// If autoConnect is true, polygonal grid lines are connected, and one closestPointRange
|
307
|
+
// is added to the X axis to prevent the last point from overlapping the first.
|
308
|
+
this.autoConnect = this.isCircular && pick(this.userMax, this.options.max) === undefined &&
|
309
|
+
this.endAngleRad - this.startAngleRad === 2 * Math.PI;
|
310
|
+
|
297
311
|
if (this.autoConnect) {
|
298
312
|
this.max += (this.categories && 1) || this.pointRange || this.closestPointRange || 0; // #1197, #2260
|
299
313
|
}
|
@@ -330,7 +344,7 @@ var arrayMin = Highcharts.arrayMin,
|
|
330
344
|
*/
|
331
345
|
getPosition: function (value, length) {
|
332
346
|
return this.postTranslate(
|
333
|
-
this.isCircular ? this.translate(value) :
|
347
|
+
this.isCircular ? this.translate(value) : this.angleRad, // #2848
|
334
348
|
pick(this.isCircular ? length : this.translate(value), this.center[2] / 2) - this.offset
|
335
349
|
);
|
336
350
|
},
|
@@ -505,8 +519,6 @@ var arrayMin = Highcharts.arrayMin,
|
|
505
519
|
isX = userOptions.isX,
|
506
520
|
isHidden = angular && isX,
|
507
521
|
isCircular,
|
508
|
-
startAngleRad,
|
509
|
-
endAngleRad,
|
510
522
|
options,
|
511
523
|
chartOptions = chart.options,
|
512
524
|
paneIndex = userOptions.pane || 0,
|
@@ -555,16 +567,13 @@ var arrayMin = Highcharts.arrayMin,
|
|
555
567
|
// Start and end angle options are
|
556
568
|
// given in degrees relative to top, while internal computations are
|
557
569
|
// in radians relative to right (like SVG).
|
558
|
-
this.
|
559
|
-
this.
|
570
|
+
this.angleRad = (options.angle || 0) * Math.PI / 180; // Y axis in polar charts
|
571
|
+
this.startAngleRad = (paneOptions.startAngle - 90) * Math.PI / 180; // Gauges
|
572
|
+
this.endAngleRad = (pick(paneOptions.endAngle, paneOptions.startAngle + 360) - 90) * Math.PI / 180; // Gauges
|
560
573
|
this.offset = options.offset || 0;
|
561
574
|
|
562
575
|
this.isCircular = isCircular;
|
563
576
|
|
564
|
-
// Automatically connect grid lines?
|
565
|
-
if (isCircular && userOptions.max === UNDEFINED && endAngleRad - startAngleRad === 2 * Math.PI) {
|
566
|
-
this.autoConnect = true;
|
567
|
-
}
|
568
577
|
}
|
569
578
|
|
570
579
|
});
|
@@ -603,7 +612,7 @@ var arrayMin = Highcharts.arrayMin,
|
|
603
612
|
align = labelOptions.align,
|
604
613
|
angle = ((axis.translate(this.pos) + axis.startAngleRad + Math.PI / 2) / Math.PI * 180) % 360;
|
605
614
|
|
606
|
-
if (axis.isRadial) {
|
615
|
+
if (axis.isRadial) { // Both X and Y axes in a polar chart
|
607
616
|
ret = axis.getPosition(this.pos, (axis.center[2] / 2) + pick(labelOptions.distance, -25));
|
608
617
|
|
609
618
|
// Automatically rotated
|
@@ -619,7 +628,7 @@ var arrayMin = Highcharts.arrayMin,
|
|
619
628
|
|
620
629
|
// Automatic alignment
|
621
630
|
if (align === null) {
|
622
|
-
if (axis.isCircular) {
|
631
|
+
if (axis.isCircular) { // Y axis
|
623
632
|
if (this.label.getBBox().width > axis.len * axis.tickInterval / (axis.max - axis.min)) { // #3506
|
624
633
|
centerSlot = 0;
|
625
634
|
}
|
@@ -669,7 +678,8 @@ var arrayMin = Highcharts.arrayMin,
|
|
669
678
|
ret = proceed.call(this, x, y, tickLength, tickWidth, horiz, renderer);
|
670
679
|
}
|
671
680
|
return ret;
|
672
|
-
})
|
681
|
+
});
|
682
|
+
/*
|
673
683
|
* The AreaRangeSeries class
|
674
684
|
*
|
675
685
|
*/
|
@@ -762,13 +772,12 @@ var arrayMin = Highcharts.arrayMin,
|
|
762
772
|
* Extend the line series' getSegmentPath method by applying the segment
|
763
773
|
* path to both lower and higher values of the range
|
764
774
|
*/
|
765
|
-
getGraphPath: function () {
|
775
|
+
getGraphPath: function (points) {
|
766
776
|
|
767
|
-
var
|
768
|
-
highPoints = [],
|
777
|
+
var highPoints = [],
|
769
778
|
highAreaPoints = [],
|
770
|
-
i
|
771
|
-
getGraphPath =
|
779
|
+
i,
|
780
|
+
getGraphPath = seriesTypes.area.prototype.getGraphPath,
|
772
781
|
point,
|
773
782
|
pointShim,
|
774
783
|
linePath,
|
@@ -778,6 +787,9 @@ var arrayMin = Highcharts.arrayMin,
|
|
778
787
|
higherPath,
|
779
788
|
higherAreaPath;
|
780
789
|
|
790
|
+
points = points || this.points;
|
791
|
+
i = points.length;
|
792
|
+
|
781
793
|
// Create the top line and the top part of the area fill. The area fill compensates for
|
782
794
|
// null points by drawing down to the lower graph, moving across the null gap and
|
783
795
|
// starting again at the lower graph.
|
@@ -785,23 +797,29 @@ var arrayMin = Highcharts.arrayMin,
|
|
785
797
|
while (i--) {
|
786
798
|
point = points[i];
|
787
799
|
|
788
|
-
if (!point.isNull && (!points[i + 1] || points[i + 1].isNull)) {
|
800
|
+
if (!point.isNull && !options.connectEnds && (!points[i + 1] || points[i + 1].isNull)) {
|
789
801
|
highAreaPoints.push({
|
790
802
|
plotX: point.plotX,
|
791
|
-
plotY: point.
|
803
|
+
plotY: point.plotY,
|
804
|
+
doCurve: false // #5186, gaps in areasplinerange fill
|
792
805
|
});
|
793
806
|
}
|
807
|
+
|
794
808
|
pointShim = {
|
795
|
-
|
809
|
+
polarPlotY: point.polarPlotY,
|
810
|
+
rectPlotX: point.rectPlotX,
|
811
|
+
yBottom: point.yBottom,
|
812
|
+
plotX: pick(point.plotHighX, point.plotX), // plotHighX is for polar charts
|
796
813
|
plotY: point.plotHigh,
|
797
814
|
isNull: point.isNull
|
798
815
|
};
|
799
816
|
highAreaPoints.push(pointShim);
|
800
817
|
highPoints.push(pointShim);
|
801
|
-
if (!point.isNull && (!points[i - 1] || points[i - 1].isNull)) {
|
818
|
+
if (!point.isNull && !options.connectEnds && (!points[i - 1] || points[i - 1].isNull)) {
|
802
819
|
highAreaPoints.push({
|
803
820
|
plotX: point.plotX,
|
804
|
-
plotY: point.
|
821
|
+
plotY: point.plotY,
|
822
|
+
doCurve: false // #5186, gaps in areasplinerange fill
|
805
823
|
});
|
806
824
|
}
|
807
825
|
}
|
@@ -1602,7 +1620,14 @@ var arrayMin = Highcharts.arrayMin,
|
|
1602
1620
|
},
|
1603
1621
|
pointValKey: 'high', // defines the top of the tracker
|
1604
1622
|
doQuartiles: false,
|
1605
|
-
drawDataLabels: seriesTypes.arearange ?
|
1623
|
+
drawDataLabels: seriesTypes.arearange ? function () {
|
1624
|
+
var valKey = this.pointValKey;
|
1625
|
+
seriesTypes.arearange.prototype.drawDataLabels.call(this);
|
1626
|
+
// Arearange drawDataLabels does not reset point.y to high, but to low after drawing. #4133
|
1627
|
+
each(this.data, function (point) {
|
1628
|
+
point.y = point[valKey];
|
1629
|
+
});
|
1630
|
+
} : noop,
|
1606
1631
|
|
1607
1632
|
/**
|
1608
1633
|
* Get the width and X offset, either on top of the linked series column
|
@@ -1646,6 +1671,15 @@ var arrayMin = Highcharts.arrayMin,
|
|
1646
1671
|
|
1647
1672
|
pointValKey: 'y',
|
1648
1673
|
|
1674
|
+
/**
|
1675
|
+
* Pass the null test in ColumnSeries.translate.
|
1676
|
+
*/
|
1677
|
+
pointClass: extendClass(Point, {
|
1678
|
+
isValid: function () {
|
1679
|
+
return isNumber(this.y, true) || this.isSum || this.isIntermediateSum;
|
1680
|
+
}
|
1681
|
+
}),
|
1682
|
+
|
1649
1683
|
/**
|
1650
1684
|
* Translate data points from raw values
|
1651
1685
|
*/
|
@@ -1697,27 +1731,25 @@ var arrayMin = Highcharts.arrayMin,
|
|
1697
1731
|
}
|
1698
1732
|
// up points
|
1699
1733
|
y = mathMax(previousY, previousY + point.y) + range[0];
|
1700
|
-
shapeArgs.y = yAxis.
|
1734
|
+
shapeArgs.y = yAxis.toPixels(y, true);
|
1701
1735
|
|
1702
1736
|
|
1703
1737
|
// sum points
|
1704
1738
|
if (point.isSum) {
|
1705
|
-
shapeArgs.y = yAxis.
|
1706
|
-
shapeArgs.height = Math.min(yAxis.
|
1739
|
+
shapeArgs.y = yAxis.toPixels(range[1], true);
|
1740
|
+
shapeArgs.height = Math.min(yAxis.toPixels(range[0], true), yAxis.len) - shapeArgs.y + series.minPointLengthOffset; // #4256
|
1707
1741
|
|
1708
1742
|
} else if (point.isIntermediateSum) {
|
1709
|
-
shapeArgs.y = yAxis.
|
1710
|
-
shapeArgs.height = Math.min(yAxis.
|
1743
|
+
shapeArgs.y = yAxis.toPixels(range[1], true);
|
1744
|
+
shapeArgs.height = Math.min(yAxis.toPixels(previousIntermediate, true), yAxis.len) - shapeArgs.y + series.minPointLengthOffset;
|
1711
1745
|
previousIntermediate = range[1];
|
1712
1746
|
|
1713
1747
|
// If it's not the sum point, update previous stack end position and get
|
1714
1748
|
// shape height (#3886)
|
1715
1749
|
} else {
|
1716
|
-
|
1717
|
-
|
1718
|
-
|
1719
|
-
yAxis.translate(previousY, 0, 1) - yAxis.translate(previousY - yValue, 0, 1);
|
1720
|
-
}
|
1750
|
+
shapeArgs.height = yValue > 0 ?
|
1751
|
+
yAxis.toPixels(previousY, true) - shapeArgs.y :
|
1752
|
+
yAxis.toPixels(previousY, true) - yAxis.toPixels(previousY - yValue, true);
|
1721
1753
|
previousY += yValue;
|
1722
1754
|
}
|
1723
1755
|
// #3952 Negative sum or intermediate sum not rendered correctly
|
@@ -1919,11 +1951,10 @@ var arrayMin = Highcharts.arrayMin,
|
|
1919
1951
|
|
1920
1952
|
// Close all segments
|
1921
1953
|
while (i--) {
|
1922
|
-
if (i === graphPath.length ||
|
1954
|
+
if ((i === graphPath.length || graphPath[i] === 'M') && i > 0) {
|
1923
1955
|
graphPath.splice(i, 0, 'z');
|
1924
1956
|
}
|
1925
1957
|
}
|
1926
|
-
|
1927
1958
|
this.areaPath = graphPath;
|
1928
1959
|
return graphPath;
|
1929
1960
|
},
|
@@ -2908,7 +2908,7 @@ if (CanvasRenderingContext2D) {
|
|
2908
2908
|
});
|
2909
2909
|
}
|
2910
2910
|
}/**
|
2911
|
-
* @license Highcharts JS v4.2.
|
2911
|
+
* @license Highcharts JS v4.2.7 (2016-09-21)
|
2912
2912
|
* CanVGRenderer Extension module
|
2913
2913
|
*
|
2914
2914
|
* (c) 2011-2016 Torstein Honsi, Erik Olsson
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license Highcharts JS v4.2.
|
2
|
+
* @license Highcharts JS v4.2.7 (2016-09-21)
|
3
3
|
* Data module
|
4
4
|
*
|
5
5
|
* (c) 2012-2016 Torstein Honsi
|
@@ -766,6 +766,9 @@
|
|
766
766
|
chartOptions.xAxis = {
|
767
767
|
type: type
|
768
768
|
};
|
769
|
+
if (type === 'category') {
|
770
|
+
chartOptions.xAxis.nameToX = false;
|
771
|
+
}
|
769
772
|
}
|
770
773
|
|
771
774
|
if (options.complete) {
|
@@ -84,7 +84,6 @@
|
|
84
84
|
},
|
85
85
|
activeDataLabelStyle: {
|
86
86
|
cursor: 'pointer',
|
87
|
-
color: '#0d233a',
|
88
87
|
fontWeight: 'bold',
|
89
88
|
textDecoration: 'underline'
|
90
89
|
},
|
@@ -179,7 +178,7 @@
|
|
179
178
|
levelSeries: levelSeries,
|
180
179
|
shapeArgs: point.shapeArgs,
|
181
180
|
bBox: point.graphic ? point.graphic.getBBox() : {}, // no graphic in line series with markers disabled
|
182
|
-
color: color,
|
181
|
+
color: point.isNull ? new Highcharts.Color(color).setOpacity(0).get() : color,
|
183
182
|
lowerSeriesOptions: ddOptions,
|
184
183
|
pointOptions: oldSeries.options.data[pointIndex],
|
185
184
|
pointIndex: pointIndex,
|
@@ -514,15 +513,17 @@
|
|
514
513
|
|
515
514
|
if (!init) {
|
516
515
|
each(this.points, function (point, i) {
|
517
|
-
point.graphic
|
518
|
-
.
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
516
|
+
if (point.graphic) {
|
517
|
+
point.graphic
|
518
|
+
.attr(H.merge(animateFrom, {
|
519
|
+
start: start + i * startAngle,
|
520
|
+
end: start + (i + 1) * startAngle,
|
521
|
+
fill: level.color
|
522
|
+
}))[animationOptions ? 'animate' : 'attr'](
|
523
|
+
extend(point.shapeArgs, { fill: point.color }),
|
524
|
+
animationOptions
|
525
|
+
);
|
526
|
+
}
|
526
527
|
});
|
527
528
|
this.animate = null;
|
528
529
|
}
|
@@ -555,7 +556,7 @@
|
|
555
556
|
seriesOptions: seriesOptions,
|
556
557
|
category: category,
|
557
558
|
originalEvent: originalEvent,
|
558
|
-
points: category !== undefined && this.series.xAxis.
|
559
|
+
points: category !== undefined && this.series.xAxis.getDDPoints(category).slice(0)
|
559
560
|
}, function (e) {
|
560
561
|
var chart = e.point.series && e.point.series.chart,
|
561
562
|
seriesOptions = e.seriesOptions;
|
@@ -577,7 +578,7 @@
|
|
577
578
|
H.Axis.prototype.drilldownCategory = function (x, e) {
|
578
579
|
var key,
|
579
580
|
point,
|
580
|
-
ddPointsX = this.
|
581
|
+
ddPointsX = this.getDDPoints(x);
|
581
582
|
for (key in ddPointsX) {
|
582
583
|
point = ddPointsX[key];
|
583
584
|
if (point && point.series && point.series.visible && point.doDrilldown) { // #3197
|
@@ -588,20 +589,23 @@
|
|
588
589
|
};
|
589
590
|
|
590
591
|
/**
|
591
|
-
*
|
592
|
-
*/
|
593
|
-
H.Axis.prototype.getDDPoints = function (x
|
594
|
-
var
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
592
|
+
* Return drillable points for this specific X value
|
593
|
+
*/
|
594
|
+
H.Axis.prototype.getDDPoints = function (x) {
|
595
|
+
var ret = [];
|
596
|
+
each(this.series, function (series) {
|
597
|
+
var i,
|
598
|
+
xData = series.xData,
|
599
|
+
points = series.points;
|
600
|
+
|
601
|
+
for (i = 0; i < xData.length; i++) {
|
602
|
+
if (xData[i] === x && series.options.data[i].drilldown) {
|
603
|
+
ret.push(points ? points[i] : true);
|
604
|
+
break;
|
605
|
+
}
|
606
|
+
}
|
607
|
+
});
|
608
|
+
return ret;
|
605
609
|
};
|
606
610
|
|
607
611
|
|
@@ -612,23 +616,26 @@
|
|
612
616
|
var pos = this.pos,
|
613
617
|
label = this.label,
|
614
618
|
axis = this.axis,
|
615
|
-
|
619
|
+
isDrillable = axis.coll === 'xAxis' && axis.getDDPoints,
|
620
|
+
ddPointsX = isDrillable && axis.getDDPoints(pos);
|
616
621
|
|
617
|
-
if (
|
618
|
-
if (
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
622
|
+
if (isDrillable) {
|
623
|
+
if (label && ddPointsX.length) {
|
624
|
+
if (!label.basicStyles) {
|
625
|
+
label.basicStyles = H.merge(label.styles);
|
626
|
+
}
|
627
|
+
label
|
628
|
+
.addClass('highcharts-drilldown-axis-label')
|
629
|
+
.css(axis.chart.options.drilldown.activeAxisLabelStyle)
|
630
|
+
.on('click', function (e) {
|
631
|
+
axis.drilldownCategory(pos, e);
|
632
|
+
});
|
627
633
|
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
634
|
+
} else if (label && label.basicStyles) {
|
635
|
+
label.styles = {}; // reset for full overwrite of styles
|
636
|
+
label.css(label.basicStyles);
|
637
|
+
label.on('click', null); // #3806
|
638
|
+
}
|
632
639
|
}
|
633
640
|
};
|
634
641
|
|
@@ -648,8 +655,7 @@
|
|
648
655
|
wrap(H.Point.prototype, 'init', function (proceed, series, options, x) {
|
649
656
|
var point = proceed.call(this, series, options, x),
|
650
657
|
xAxis = series.xAxis,
|
651
|
-
tick = xAxis && xAxis.ticks[x]
|
652
|
-
ddPointsX = xAxis && xAxis.getDDPoints(x, series.options._levelNumber);
|
658
|
+
tick = xAxis && xAxis.ticks[x];
|
653
659
|
|
654
660
|
if (point.drilldown) {
|
655
661
|
|
@@ -670,13 +676,6 @@
|
|
670
676
|
}
|
671
677
|
});*/
|
672
678
|
|
673
|
-
|
674
|
-
// Register drilldown points on this X value
|
675
|
-
if (ddPointsX) {
|
676
|
-
ddPointsX.push(point);
|
677
|
-
ddPointsX.levelNumber = series.options._levelNumber;
|
678
|
-
}
|
679
|
-
|
680
679
|
}
|
681
680
|
|
682
681
|
// Add or remove click handler and style on the tick label
|