highcharts-rails 3.0.7 → 3.0.8
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 +6 -14
- checksums.yaml.gz.asc +14 -14
- data.tar.gz.asc +14 -14
- data/README.markdown +2 -0
- data/Rakefile +1 -1
- data/app/assets/javascripts/highcharts.js +6200 -5875
- data/app/assets/javascripts/highcharts/adapters/mootools-adapter.js +2 -2
- data/app/assets/javascripts/highcharts/adapters/prototype-adapter.js +2 -2
- data/app/assets/javascripts/highcharts/adapters/standalone-framework.js +10 -2
- data/app/assets/javascripts/highcharts/highcharts-more.js +513 -455
- data/app/assets/javascripts/highcharts/modules/canvas-tools.js +2 -2
- data/app/assets/javascripts/highcharts/modules/data.js +7 -4
- data/app/assets/javascripts/highcharts/modules/drilldown.js +7 -5
- data/app/assets/javascripts/highcharts/modules/exporting.js +35 -29
- data/app/assets/javascripts/highcharts/modules/funnel.js +2 -2
- data/app/assets/javascripts/highcharts/modules/heatmap.js +36 -30
- data/app/assets/javascripts/highcharts/modules/map.js +785 -402
- data/app/assets/javascripts/highcharts/modules/no-data-to-display.js +3 -3
- data/app/assets/javascripts/highcharts/themes/dark-blue.js +1 -1
- data/app/assets/javascripts/highcharts/themes/dark-green.js +1 -1
- data/app/assets/javascripts/highcharts/themes/gray.js +1 -1
- data/app/assets/javascripts/highcharts/themes/grid.js +1 -1
- data/app/assets/javascripts/highcharts/themes/skies.js +1 -1
- data/lib/highcharts/version.rb +1 -1
- metadata +18 -19
- metadata.gz.asc +14 -14
@@ -1,8 +1,8 @@
|
|
1
1
|
/**
|
2
|
-
* @license Highcharts JS v3.0.
|
2
|
+
* @license Highcharts JS v3.0.8 (2014-01-09)
|
3
3
|
* Prototype adapter
|
4
4
|
*
|
5
|
-
* @author Michael Nelson, Torstein
|
5
|
+
* @author Michael Nelson, Torstein Honsi.
|
6
6
|
*
|
7
7
|
* Feel free to use and modify this script.
|
8
8
|
* Highcharts license: www.highcharts.com/license.
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license Highcharts JS v3.0.
|
2
|
+
* @license Highcharts JS v3.0.8 (2014-01-09)
|
3
3
|
*
|
4
4
|
* Standalone Highcharts Framework
|
5
5
|
*
|
@@ -159,7 +159,15 @@ function augment(obj) {
|
|
159
159
|
|
160
160
|
args.preventDefault = preventDefault;
|
161
161
|
args.target = target;
|
162
|
-
|
162
|
+
|
163
|
+
// If the type is not set, we're running a custom event (#2297). If it is set,
|
164
|
+
// we're running a browser event, and setting it will cause en error in
|
165
|
+
// IE8 (#2465).
|
166
|
+
if (!args.type) {
|
167
|
+
args.type = name;
|
168
|
+
}
|
169
|
+
|
170
|
+
|
163
171
|
|
164
172
|
// If the event handler return false, prevent the default handler from executing
|
165
173
|
if (fn.call(this, args) === false) {
|
@@ -2,9 +2,9 @@
|
|
2
2
|
// @compilation_level SIMPLE_OPTIMIZATIONS
|
3
3
|
|
4
4
|
/**
|
5
|
-
* @license Highcharts JS v3.0.
|
5
|
+
* @license Highcharts JS v3.0.8 (2014-01-09)
|
6
6
|
*
|
7
|
-
* (c) 2009-
|
7
|
+
* (c) 2009-2014 Torstein Honsi
|
8
8
|
*
|
9
9
|
* License: www.highcharts.com/license
|
10
10
|
*/
|
@@ -28,12 +28,16 @@ var arrayMin = Highcharts.arrayMin,
|
|
28
28
|
wrap = Highcharts.wrap,
|
29
29
|
Axis = Highcharts.Axis,
|
30
30
|
Tick = Highcharts.Tick,
|
31
|
+
Point = Highcharts.Point,
|
32
|
+
Pointer = Highcharts.Pointer,
|
33
|
+
TrackerMixin = Highcharts.TrackerMixin,
|
34
|
+
CenteredSeriesMixin = Highcharts.CenteredSeriesMixin,
|
31
35
|
Series = Highcharts.Series,
|
32
|
-
colProto = seriesTypes.column.prototype,
|
33
36
|
math = Math,
|
34
37
|
mathRound = math.round,
|
35
38
|
mathFloor = math.floor,
|
36
39
|
mathMax = math.max,
|
40
|
+
Color = Highcharts.Color,
|
37
41
|
noop = function () {};/**
|
38
42
|
* The Pane object allows options that are common to a set of X and Y axes.
|
39
43
|
*
|
@@ -217,6 +221,9 @@ var radialAxisMixin = {
|
|
217
221
|
|
218
222
|
// Title or label offsets are not counted
|
219
223
|
this.chart.axisOffset[this.side] = 0;
|
224
|
+
|
225
|
+
// Set the center array
|
226
|
+
this.center = this.pane.center = CenteredSeriesMixin.getCenter.call(this.pane);
|
220
227
|
},
|
221
228
|
|
222
229
|
|
@@ -292,7 +299,7 @@ var radialAxisMixin = {
|
|
292
299
|
if (this.isRadial) {
|
293
300
|
|
294
301
|
// Set the center array
|
295
|
-
this.center = this.pane.center =
|
302
|
+
this.center = this.pane.center = Highcharts.CenteredSeriesMixin.getCenter.call(this.pane);
|
296
303
|
|
297
304
|
this.len = this.width = this.height = this.isCircular ?
|
298
305
|
this.center[2] * (this.endAngleRad - this.startAngleRad) / 2 :
|
@@ -652,7 +659,7 @@ defaultPlotOptions.arearange = merge(defaultPlotOptions.area, {
|
|
652
659
|
/**
|
653
660
|
* Add the series type
|
654
661
|
*/
|
655
|
-
seriesTypes.arearange =
|
662
|
+
seriesTypes.arearange = extendClass(seriesTypes.area, {
|
656
663
|
type: 'arearange',
|
657
664
|
pointArrayMap: ['low', 'high'],
|
658
665
|
toYData: function (point) {
|
@@ -801,7 +808,10 @@ seriesTypes.arearange = Highcharts.extendClass(seriesTypes.area, {
|
|
801
808
|
dataLabelOptions.y = dataLabelOptions.yHigh;
|
802
809
|
}
|
803
810
|
}
|
804
|
-
|
811
|
+
|
812
|
+
if (seriesProto.drawDataLabels) {
|
813
|
+
seriesProto.drawDataLabels.apply(this, arguments); // #1209
|
814
|
+
}
|
805
815
|
|
806
816
|
// Step 2: reorganize and handle data labels for the lower values
|
807
817
|
i = length;
|
@@ -825,12 +835,16 @@ seriesTypes.arearange = Highcharts.extendClass(seriesTypes.area, {
|
|
825
835
|
dataLabelOptions.y = dataLabelOptions.yLow;
|
826
836
|
}
|
827
837
|
}
|
828
|
-
seriesProto.drawDataLabels
|
838
|
+
if (seriesProto.drawDataLabels) {
|
839
|
+
seriesProto.drawDataLabels.apply(this, arguments);
|
840
|
+
}
|
829
841
|
}
|
830
842
|
|
831
843
|
},
|
832
844
|
|
833
|
-
alignDataLabel:
|
845
|
+
alignDataLabel: function () {
|
846
|
+
seriesTypes.column.prototype.alignDataLabel.apply(this, arguments);
|
847
|
+
},
|
834
848
|
|
835
849
|
getSymbol: seriesTypes.column.prototype.getSymbol,
|
836
850
|
|
@@ -847,61 +861,69 @@ defaultPlotOptions.areasplinerange = merge(defaultPlotOptions.arearange);
|
|
847
861
|
seriesTypes.areasplinerange = extendClass(seriesTypes.arearange, {
|
848
862
|
type: 'areasplinerange',
|
849
863
|
getPointSpline: seriesTypes.spline.prototype.getPointSpline
|
850
|
-
});/**
|
851
|
-
* The ColumnRangeSeries class
|
852
|
-
*/
|
853
|
-
defaultPlotOptions.columnrange = merge(defaultPlotOptions.column, defaultPlotOptions.arearange, {
|
854
|
-
lineWidth: 1,
|
855
|
-
pointRange: null
|
856
864
|
});
|
857
865
|
|
858
|
-
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
type: 'columnrange',
|
866
|
+
(function () {
|
867
|
+
|
868
|
+
var colProto = seriesTypes.column.prototype;
|
869
|
+
|
863
870
|
/**
|
864
|
-
*
|
871
|
+
* The ColumnRangeSeries class
|
865
872
|
*/
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
873
|
+
defaultPlotOptions.columnrange = merge(defaultPlotOptions.column, defaultPlotOptions.arearange, {
|
874
|
+
lineWidth: 1,
|
875
|
+
pointRange: null
|
876
|
+
});
|
870
877
|
|
871
|
-
|
878
|
+
/**
|
879
|
+
* ColumnRangeSeries object
|
880
|
+
*/
|
881
|
+
seriesTypes.columnrange = extendClass(seriesTypes.arearange, {
|
882
|
+
type: 'columnrange',
|
883
|
+
/**
|
884
|
+
* Translate data points from raw values x and y to plotX and plotY
|
885
|
+
*/
|
886
|
+
translate: function () {
|
887
|
+
var series = this,
|
888
|
+
yAxis = series.yAxis,
|
889
|
+
plotHigh;
|
890
|
+
|
891
|
+
colProto.translate.apply(series);
|
892
|
+
|
893
|
+
// Set plotLow and plotHigh
|
894
|
+
each(series.points, function (point) {
|
895
|
+
var shapeArgs = point.shapeArgs,
|
896
|
+
minPointLength = series.options.minPointLength,
|
897
|
+
heightDifference,
|
898
|
+
height,
|
899
|
+
y;
|
900
|
+
|
901
|
+
point.plotHigh = plotHigh = yAxis.translate(point.high, 0, 1, 0, 1);
|
902
|
+
point.plotLow = point.plotY;
|
903
|
+
|
904
|
+
// adjust shape
|
905
|
+
y = plotHigh;
|
906
|
+
height = point.plotY - plotHigh;
|
907
|
+
|
908
|
+
if (height < minPointLength) {
|
909
|
+
heightDifference = (minPointLength - height);
|
910
|
+
height += heightDifference;
|
911
|
+
y -= heightDifference / 2;
|
912
|
+
}
|
913
|
+
shapeArgs.height = height;
|
914
|
+
shapeArgs.y = y;
|
915
|
+
});
|
916
|
+
},
|
917
|
+
trackerGroups: ['group', 'dataLabels'],
|
918
|
+
drawGraph: noop,
|
919
|
+
pointAttrToOptions: colProto.pointAttrToOptions,
|
920
|
+
drawPoints: colProto.drawPoints,
|
921
|
+
drawTracker: colProto.drawTracker,
|
922
|
+
animate: colProto.animate,
|
923
|
+
getColumnMetrics: colProto.getColumnMetrics
|
924
|
+
});
|
925
|
+
}());
|
872
926
|
|
873
|
-
// Set plotLow and plotHigh
|
874
|
-
each(series.points, function (point) {
|
875
|
-
var shapeArgs = point.shapeArgs,
|
876
|
-
minPointLength = series.options.minPointLength,
|
877
|
-
heightDifference,
|
878
|
-
height,
|
879
|
-
y;
|
880
|
-
|
881
|
-
point.plotHigh = plotHigh = yAxis.translate(point.high, 0, 1, 0, 1);
|
882
|
-
point.plotLow = point.plotY;
|
883
|
-
|
884
|
-
// adjust shape
|
885
|
-
y = plotHigh;
|
886
|
-
height = point.plotY - plotHigh;
|
887
|
-
|
888
|
-
if (height < minPointLength) {
|
889
|
-
heightDifference = (minPointLength - height);
|
890
|
-
height += heightDifference;
|
891
|
-
y -= heightDifference / 2;
|
892
|
-
}
|
893
|
-
shapeArgs.height = height;
|
894
|
-
shapeArgs.y = y;
|
895
|
-
});
|
896
|
-
},
|
897
|
-
trackerGroups: ['group', 'dataLabels'],
|
898
|
-
drawGraph: noop,
|
899
|
-
pointAttrToOptions: colProto.pointAttrToOptions,
|
900
|
-
drawPoints: colProto.drawPoints,
|
901
|
-
drawTracker: colProto.drawTracker,
|
902
|
-
animate: colProto.animate,
|
903
|
-
getColumnMetrics: colProto.getColumnMetrics
|
904
|
-
});
|
905
927
|
/*
|
906
928
|
* The GaugeSeries class
|
907
929
|
*/
|
@@ -918,6 +940,7 @@ defaultPlotOptions.gauge = merge(defaultPlotOptions.line, {
|
|
918
940
|
borderWidth: 1,
|
919
941
|
borderColor: 'silver',
|
920
942
|
borderRadius: 3,
|
943
|
+
crop: false,
|
921
944
|
style: {
|
922
945
|
fontWeight: 'bold'
|
923
946
|
},
|
@@ -949,7 +972,7 @@ defaultPlotOptions.gauge = merge(defaultPlotOptions.line, {
|
|
949
972
|
/**
|
950
973
|
* Extend the point object
|
951
974
|
*/
|
952
|
-
var GaugePoint =
|
975
|
+
var GaugePoint = extendClass(Point, {
|
953
976
|
/**
|
954
977
|
* Don't do any hover colors or anything
|
955
978
|
*/
|
@@ -971,6 +994,7 @@ var GaugeSeries = {
|
|
971
994
|
angular: true,
|
972
995
|
drawGraph: noop,
|
973
996
|
fixedBox: true,
|
997
|
+
forceDL: true,
|
974
998
|
trackerGroups: ['group', 'dataLabels'],
|
975
999
|
|
976
1000
|
/**
|
@@ -1113,14 +1137,27 @@ var GaugeSeries = {
|
|
1113
1137
|
this.options.zIndex,
|
1114
1138
|
this.chart.seriesGroup
|
1115
1139
|
);
|
1116
|
-
|
1140
|
+
Series.prototype.render.call(this);
|
1117
1141
|
this.group.clip(this.chart.clipRect);
|
1118
1142
|
},
|
1119
1143
|
|
1120
|
-
|
1121
|
-
|
1144
|
+
/**
|
1145
|
+
* Extend the basic setData method by running processData and generatePoints immediately,
|
1146
|
+
* in order to access the points from the legend.
|
1147
|
+
*/
|
1148
|
+
setData: function (data, redraw) {
|
1149
|
+
Series.prototype.setData.call(this, data, false);
|
1150
|
+
this.processData();
|
1151
|
+
this.generatePoints();
|
1152
|
+
if (pick(redraw, true)) {
|
1153
|
+
this.chart.redraw();
|
1154
|
+
}
|
1155
|
+
},
|
1156
|
+
drawTracker: TrackerMixin.drawTrackerPoint
|
1122
1157
|
};
|
1123
|
-
seriesTypes.gauge =
|
1158
|
+
seriesTypes.gauge = extendClass(seriesTypes.line, GaugeSeries);
|
1159
|
+
|
1160
|
+
/* ****************************************************************************
|
1124
1161
|
* Start Box plot series code *
|
1125
1162
|
*****************************************************************************/
|
1126
1163
|
|
@@ -1403,7 +1440,7 @@ defaultPlotOptions.errorbar = merge(defaultPlotOptions.boxplot, {
|
|
1403
1440
|
grouping: false,
|
1404
1441
|
linkedTo: ':previous',
|
1405
1442
|
tooltip: {
|
1406
|
-
pointFormat:
|
1443
|
+
pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.low}</b> - <b>{point.high}</b><br/>'
|
1407
1444
|
},
|
1408
1445
|
whiskerWidth: null
|
1409
1446
|
});
|
@@ -1714,6 +1751,7 @@ defaultPlotOptions.bubble = merge(defaultPlotOptions.scatter, {
|
|
1714
1751
|
seriesTypes.bubble = extendClass(seriesTypes.scatter, {
|
1715
1752
|
type: 'bubble',
|
1716
1753
|
pointArrayMap: ['y', 'z'],
|
1754
|
+
parallelArrays: ['x', 'y', 'z'],
|
1717
1755
|
trackerGroups: ['group', 'dataLabelsGroup'],
|
1718
1756
|
bubblePadding: true,
|
1719
1757
|
|
@@ -1737,7 +1775,7 @@ seriesTypes.bubble = extendClass(seriesTypes.scatter, {
|
|
1737
1775
|
fill = fill || markerOptions.fillColor || this.color;
|
1738
1776
|
|
1739
1777
|
if (fillOpacity !== 1) {
|
1740
|
-
fill =
|
1778
|
+
fill = Color(fill).setOpacity(fillOpacity).get('rgba');
|
1741
1779
|
}
|
1742
1780
|
return fill;
|
1743
1781
|
},
|
@@ -1773,7 +1811,7 @@ seriesTypes.bubble = extendClass(seriesTypes.scatter, {
|
|
1773
1811
|
pos = zRange > 0 ? // relative size, a number between 0 and 1
|
1774
1812
|
(zData[i] - zMin) / (zMax - zMin) :
|
1775
1813
|
0.5;
|
1776
|
-
if (sizeByArea) {
|
1814
|
+
if (sizeByArea && pos >= 0) {
|
1777
1815
|
pos = Math.sqrt(pos);
|
1778
1816
|
}
|
1779
1817
|
radii.push(math.ceil(minSize + pos * (maxSize - minSize)) / 2);
|
@@ -1957,7 +1995,7 @@ Axis.prototype.beforePadding = function () {
|
|
1957
1995
|
|
1958
1996
|
if (range > 0) {
|
1959
1997
|
while (i--) {
|
1960
|
-
if (data[i]
|
1998
|
+
if (typeof data[i] === 'number') {
|
1961
1999
|
radius = series.radii[i];
|
1962
2000
|
pxMin = Math.min(((data[i] - min) * transA) - radius, pxMin);
|
1963
2001
|
pxMax = Math.max(((data[i] - min) * transA) + radius, pxMax);
|
@@ -1978,462 +2016,482 @@ Axis.prototype.beforePadding = function () {
|
|
1978
2016
|
/* ****************************************************************************
|
1979
2017
|
* End Bubble series code *
|
1980
2018
|
*****************************************************************************/
|
1981
|
-
/**
|
1982
|
-
* Extensions for polar charts. Additionally, much of the geometry required for polar charts is
|
1983
|
-
* gathered in RadialAxes.js.
|
1984
|
-
*
|
1985
|
-
*/
|
1986
2019
|
|
1987
|
-
|
1988
|
-
pointerProto = Highcharts.Pointer.prototype;
|
2020
|
+
(function () {
|
1989
2021
|
|
2022
|
+
/**
|
2023
|
+
* Extensions for polar charts. Additionally, much of the geometry required for polar charts is
|
2024
|
+
* gathered in RadialAxes.js.
|
2025
|
+
*
|
2026
|
+
*/
|
1990
2027
|
|
2028
|
+
var seriesProto = Series.prototype,
|
2029
|
+
pointerProto = Pointer.prototype,
|
2030
|
+
colProto;
|
1991
2031
|
|
1992
|
-
/**
|
1993
|
-
|
1994
|
-
|
1995
|
-
|
1996
|
-
seriesProto.toXY = function (point) {
|
1997
|
-
|
1998
|
-
|
1999
|
-
|
2000
|
-
|
2032
|
+
/**
|
2033
|
+
* Translate a point's plotX and plotY from the internal angle and radius measures to
|
2034
|
+
* true plotX, plotY coordinates
|
2035
|
+
*/
|
2036
|
+
seriesProto.toXY = function (point) {
|
2037
|
+
var xy,
|
2038
|
+
chart = this.chart,
|
2039
|
+
plotX = point.plotX,
|
2040
|
+
plotY = point.plotY;
|
2001
2041
|
|
2002
|
-
|
2003
|
-
|
2004
|
-
|
2042
|
+
// Save rectangular plotX, plotY for later computation
|
2043
|
+
point.rectPlotX = plotX;
|
2044
|
+
point.rectPlotY = plotY;
|
2005
2045
|
|
2006
|
-
|
2007
|
-
|
2046
|
+
// Record the angle in degrees for use in tooltip
|
2047
|
+
point.clientX = ((plotX / Math.PI * 180) + this.xAxis.pane.options.startAngle) % 360;
|
2008
2048
|
|
2009
|
-
|
2010
|
-
|
2011
|
-
|
2012
|
-
|
2013
|
-
};
|
2049
|
+
// Find the polar plotX and plotY
|
2050
|
+
xy = this.xAxis.postTranslate(point.plotX, this.yAxis.len - plotY);
|
2051
|
+
point.plotX = point.polarPlotX = xy.x - chart.plotLeft;
|
2052
|
+
point.plotY = point.polarPlotY = xy.y - chart.plotTop;
|
2053
|
+
};
|
2014
2054
|
|
2015
|
-
/**
|
2016
|
-
|
2017
|
-
|
2018
|
-
seriesProto.orderTooltipPoints = function (points) {
|
2019
|
-
|
2020
|
-
|
2021
|
-
|
2022
|
-
|
2055
|
+
/**
|
2056
|
+
* Order the tooltip points to get the mouse capture ranges correct. #1915.
|
2057
|
+
*/
|
2058
|
+
seriesProto.orderTooltipPoints = function (points) {
|
2059
|
+
if (this.chart.polar) {
|
2060
|
+
points.sort(function (a, b) {
|
2061
|
+
return a.clientX - b.clientX;
|
2062
|
+
});
|
2023
2063
|
|
2024
|
-
|
2025
|
-
|
2026
|
-
|
2027
|
-
|
2028
|
-
|
2064
|
+
// Wrap mouse tracking around to capture movement on the segment to the left
|
2065
|
+
// of the north point (#1469, #2093).
|
2066
|
+
if (points[0]) {
|
2067
|
+
points[0].wrappedClientX = points[0].clientX + 360;
|
2068
|
+
points.push(points[0]);
|
2069
|
+
}
|
2029
2070
|
}
|
2030
|
-
}
|
2031
|
-
};
|
2071
|
+
};
|
2032
2072
|
|
2033
2073
|
|
2034
|
-
/**
|
2035
|
-
|
2036
|
-
|
2037
|
-
function initArea(proceed, chart, options) {
|
2038
|
-
|
2039
|
-
|
2040
|
-
|
2041
|
-
|
2042
|
-
|
2043
|
-
|
2044
|
-
|
2045
|
-
|
2046
|
-
|
2047
|
-
|
2048
|
-
|
2049
|
-
|
2050
|
-
|
2051
|
-
|
2052
|
-
|
2074
|
+
/**
|
2075
|
+
* Add some special init logic to areas and areasplines
|
2076
|
+
*/
|
2077
|
+
function initArea(proceed, chart, options) {
|
2078
|
+
proceed.call(this, chart, options);
|
2079
|
+
if (this.chart.polar) {
|
2080
|
+
|
2081
|
+
/**
|
2082
|
+
* Overridden method to close a segment path. While in a cartesian plane the area
|
2083
|
+
* goes down to the threshold, in the polar chart it goes to the center.
|
2084
|
+
*/
|
2085
|
+
this.closeSegment = function (path) {
|
2086
|
+
var center = this.xAxis.center;
|
2087
|
+
path.push(
|
2088
|
+
'L',
|
2089
|
+
center[0],
|
2090
|
+
center[1]
|
2091
|
+
);
|
2092
|
+
};
|
2053
2093
|
|
2054
|
-
|
2055
|
-
|
2056
|
-
|
2094
|
+
// Instead of complicated logic to draw an area around the inner area in a stack,
|
2095
|
+
// just draw it behind
|
2096
|
+
this.closedStacks = true;
|
2097
|
+
}
|
2057
2098
|
}
|
2058
|
-
}
|
2059
|
-
wrap(seriesTypes.area.prototype, 'init', initArea);
|
2060
|
-
wrap(seriesTypes.areaspline.prototype, 'init', initArea);
|
2061
|
-
|
2062
2099
|
|
2063
|
-
|
2064
|
-
|
2065
|
-
|
2066
|
-
|
2067
|
-
|
2068
|
-
|
2069
|
-
|
2070
|
-
|
2071
|
-
|
2072
|
-
|
2073
|
-
|
2074
|
-
|
2075
|
-
|
2076
|
-
|
2077
|
-
|
2078
|
-
|
2079
|
-
|
2080
|
-
|
2081
|
-
|
2082
|
-
|
2083
|
-
|
2084
|
-
|
2085
|
-
|
2086
|
-
|
2087
|
-
|
2088
|
-
|
2089
|
-
|
2090
|
-
|
2091
|
-
|
2092
|
-
|
2093
|
-
|
2094
|
-
|
2095
|
-
|
2100
|
+
if (seriesTypes.area) {
|
2101
|
+
wrap(seriesTypes.area.prototype, 'init', initArea);
|
2102
|
+
}
|
2103
|
+
if (seriesTypes.areaspline) {
|
2104
|
+
wrap(seriesTypes.areaspline.prototype, 'init', initArea);
|
2105
|
+
}
|
2106
|
+
|
2107
|
+
if (seriesTypes.spline) {
|
2108
|
+
/**
|
2109
|
+
* Overridden method for calculating a spline from one point to the next
|
2110
|
+
*/
|
2111
|
+
wrap(seriesTypes.spline.prototype, 'getPointSpline', function (proceed, segment, point, i) {
|
2112
|
+
|
2113
|
+
var ret,
|
2114
|
+
smoothing = 1.5, // 1 means control points midway between points, 2 means 1/3 from the point, 3 is 1/4 etc;
|
2115
|
+
denom = smoothing + 1,
|
2116
|
+
plotX,
|
2117
|
+
plotY,
|
2118
|
+
lastPoint,
|
2119
|
+
nextPoint,
|
2120
|
+
lastX,
|
2121
|
+
lastY,
|
2122
|
+
nextX,
|
2123
|
+
nextY,
|
2124
|
+
leftContX,
|
2125
|
+
leftContY,
|
2126
|
+
rightContX,
|
2127
|
+
rightContY,
|
2128
|
+
distanceLeftControlPoint,
|
2129
|
+
distanceRightControlPoint,
|
2130
|
+
leftContAngle,
|
2131
|
+
rightContAngle,
|
2132
|
+
jointAngle;
|
2133
|
+
|
2134
|
+
|
2135
|
+
if (this.chart.polar) {
|
2136
|
+
|
2137
|
+
plotX = point.plotX;
|
2138
|
+
plotY = point.plotY;
|
2139
|
+
lastPoint = segment[i - 1];
|
2140
|
+
nextPoint = segment[i + 1];
|
2096
2141
|
|
2097
|
-
|
2098
|
-
|
2099
|
-
|
2100
|
-
|
2101
|
-
|
2102
|
-
|
2103
|
-
|
2104
|
-
|
2105
|
-
|
2142
|
+
// Connect ends
|
2143
|
+
if (this.connectEnds) {
|
2144
|
+
if (!lastPoint) {
|
2145
|
+
lastPoint = segment[segment.length - 2]; // not the last but the second last, because the segment is already connected
|
2146
|
+
}
|
2147
|
+
if (!nextPoint) {
|
2148
|
+
nextPoint = segment[1];
|
2149
|
+
}
|
2150
|
+
}
|
2106
2151
|
|
2107
|
-
|
2108
|
-
|
2109
|
-
|
2110
|
-
|
2111
|
-
|
2112
|
-
|
2113
|
-
|
2114
|
-
|
2115
|
-
|
2116
|
-
|
2117
|
-
|
2118
|
-
|
2119
|
-
|
2120
|
-
|
2121
|
-
|
2122
|
-
|
2152
|
+
// find control points
|
2153
|
+
if (lastPoint && nextPoint) {
|
2154
|
+
|
2155
|
+
lastX = lastPoint.plotX;
|
2156
|
+
lastY = lastPoint.plotY;
|
2157
|
+
nextX = nextPoint.plotX;
|
2158
|
+
nextY = nextPoint.plotY;
|
2159
|
+
leftContX = (smoothing * plotX + lastX) / denom;
|
2160
|
+
leftContY = (smoothing * plotY + lastY) / denom;
|
2161
|
+
rightContX = (smoothing * plotX + nextX) / denom;
|
2162
|
+
rightContY = (smoothing * plotY + nextY) / denom;
|
2163
|
+
distanceLeftControlPoint = Math.sqrt(Math.pow(leftContX - plotX, 2) + Math.pow(leftContY - plotY, 2));
|
2164
|
+
distanceRightControlPoint = Math.sqrt(Math.pow(rightContX - plotX, 2) + Math.pow(rightContY - plotY, 2));
|
2165
|
+
leftContAngle = Math.atan2(leftContY - plotY, leftContX - plotX);
|
2166
|
+
rightContAngle = Math.atan2(rightContY - plotY, rightContX - plotX);
|
2167
|
+
jointAngle = (Math.PI / 2) + ((leftContAngle + rightContAngle) / 2);
|
2123
2168
|
|
2124
2169
|
|
2125
|
-
|
2126
|
-
|
2127
|
-
|
2128
|
-
|
2170
|
+
// Ensure the right direction, jointAngle should be in the same quadrant as leftContAngle
|
2171
|
+
if (Math.abs(leftContAngle - jointAngle) > Math.PI / 2) {
|
2172
|
+
jointAngle -= Math.PI;
|
2173
|
+
}
|
2129
2174
|
|
2130
|
-
|
2131
|
-
|
2132
|
-
|
2133
|
-
|
2134
|
-
|
2175
|
+
// Find the corrected control points for a spline straight through the point
|
2176
|
+
leftContX = plotX + Math.cos(jointAngle) * distanceLeftControlPoint;
|
2177
|
+
leftContY = plotY + Math.sin(jointAngle) * distanceLeftControlPoint;
|
2178
|
+
rightContX = plotX + Math.cos(Math.PI + jointAngle) * distanceRightControlPoint;
|
2179
|
+
rightContY = plotY + Math.sin(Math.PI + jointAngle) * distanceRightControlPoint;
|
2135
2180
|
|
2136
|
-
|
2137
|
-
|
2138
|
-
|
2181
|
+
// Record for drawing in next point
|
2182
|
+
point.rightContX = rightContX;
|
2183
|
+
point.rightContY = rightContY;
|
2139
2184
|
|
2140
|
-
|
2185
|
+
}
|
2141
2186
|
|
2142
2187
|
|
2143
|
-
|
2144
|
-
|
2145
|
-
|
2146
|
-
|
2147
|
-
|
2148
|
-
|
2149
|
-
|
2150
|
-
|
2151
|
-
|
2152
|
-
|
2153
|
-
|
2154
|
-
|
2155
|
-
|
2156
|
-
|
2157
|
-
|
2188
|
+
// moveTo or lineTo
|
2189
|
+
if (!i) {
|
2190
|
+
ret = ['M', plotX, plotY];
|
2191
|
+
} else { // curve from last point to this
|
2192
|
+
ret = [
|
2193
|
+
'C',
|
2194
|
+
lastPoint.rightContX || lastPoint.plotX,
|
2195
|
+
lastPoint.rightContY || lastPoint.plotY,
|
2196
|
+
leftContX || plotX,
|
2197
|
+
leftContY || plotY,
|
2198
|
+
plotX,
|
2199
|
+
plotY
|
2200
|
+
];
|
2201
|
+
lastPoint.rightContX = lastPoint.rightContY = null; // reset for updating series later
|
2202
|
+
}
|
2158
2203
|
|
2159
2204
|
|
2160
|
-
|
2161
|
-
|
2205
|
+
} else {
|
2206
|
+
ret = proceed.call(this, segment, point, i);
|
2207
|
+
}
|
2208
|
+
return ret;
|
2209
|
+
});
|
2162
2210
|
}
|
2163
|
-
return ret;
|
2164
|
-
});
|
2165
2211
|
|
2166
|
-
/**
|
2167
|
-
|
2168
|
-
|
2169
|
-
|
2170
|
-
|
2171
|
-
wrap(seriesProto, 'translate', function (proceed) {
|
2212
|
+
/**
|
2213
|
+
* Extend translate. The plotX and plotY values are computed as if the polar chart were a
|
2214
|
+
* cartesian plane, where plotX denotes the angle in radians and (yAxis.len - plotY) is the pixel distance from
|
2215
|
+
* center.
|
2216
|
+
*/
|
2217
|
+
wrap(seriesProto, 'translate', function (proceed) {
|
2172
2218
|
|
2173
|
-
|
2174
|
-
|
2219
|
+
// Run uber method
|
2220
|
+
proceed.call(this);
|
2175
2221
|
|
2176
|
-
|
2177
|
-
|
2178
|
-
|
2179
|
-
|
2180
|
-
|
2181
|
-
|
2182
|
-
|
2222
|
+
// Postprocess plot coordinates
|
2223
|
+
if (this.chart.polar && !this.preventPostTranslate) {
|
2224
|
+
var points = this.points,
|
2225
|
+
i = points.length;
|
2226
|
+
while (i--) {
|
2227
|
+
// Translate plotX, plotY from angle and radius to true plot coordinates
|
2228
|
+
this.toXY(points[i]);
|
2229
|
+
}
|
2183
2230
|
}
|
2184
|
-
}
|
2185
|
-
});
|
2231
|
+
});
|
2186
2232
|
|
2187
|
-
/**
|
2188
|
-
|
2189
|
-
|
2190
|
-
|
2191
|
-
wrap(seriesProto, 'getSegmentPath', function (proceed, segment) {
|
2233
|
+
/**
|
2234
|
+
* Extend getSegmentPath to allow connecting ends across 0 to provide a closed circle in
|
2235
|
+
* line-like series.
|
2236
|
+
*/
|
2237
|
+
wrap(seriesProto, 'getSegmentPath', function (proceed, segment) {
|
2192
2238
|
|
2193
|
-
|
2239
|
+
var points = this.points;
|
2194
2240
|
|
2195
|
-
|
2196
|
-
|
2197
|
-
|
2198
|
-
|
2199
|
-
|
2200
|
-
|
2241
|
+
// Connect the path
|
2242
|
+
if (this.chart.polar && this.options.connectEnds !== false &&
|
2243
|
+
segment[segment.length - 1] === points[points.length - 1] && points[0].y !== null) {
|
2244
|
+
this.connectEnds = true; // re-used in splines
|
2245
|
+
segment = [].concat(segment, [points[0]]);
|
2246
|
+
}
|
2201
2247
|
|
2202
|
-
|
2203
|
-
|
2248
|
+
// Run uber method
|
2249
|
+
return proceed.call(this, segment);
|
2204
2250
|
|
2205
|
-
});
|
2206
|
-
|
2251
|
+
});
|
2207
2252
|
|
2208
|
-
function polarAnimate(proceed, init) {
|
2209
|
-
var chart = this.chart,
|
2210
|
-
animation = this.options.animation,
|
2211
|
-
group = this.group,
|
2212
|
-
markerGroup = this.markerGroup,
|
2213
|
-
center = this.xAxis.center,
|
2214
|
-
plotLeft = chart.plotLeft,
|
2215
|
-
plotTop = chart.plotTop,
|
2216
|
-
attribs;
|
2217
|
-
|
2218
|
-
// Specific animation for polar charts
|
2219
|
-
if (chart.polar) {
|
2220
|
-
|
2221
|
-
// Enable animation on polar charts only in SVG. In VML, the scaling is different, plus animation
|
2222
|
-
// would be so slow it would't matter.
|
2223
|
-
if (chart.renderer.isSVG) {
|
2224
2253
|
|
2225
|
-
|
2226
|
-
|
2227
|
-
|
2254
|
+
function polarAnimate(proceed, init) {
|
2255
|
+
var chart = this.chart,
|
2256
|
+
animation = this.options.animation,
|
2257
|
+
group = this.group,
|
2258
|
+
markerGroup = this.markerGroup,
|
2259
|
+
center = this.xAxis.center,
|
2260
|
+
plotLeft = chart.plotLeft,
|
2261
|
+
plotTop = chart.plotTop,
|
2262
|
+
attribs;
|
2263
|
+
|
2264
|
+
// Specific animation for polar charts
|
2265
|
+
if (chart.polar) {
|
2266
|
+
|
2267
|
+
// Enable animation on polar charts only in SVG. In VML, the scaling is different, plus animation
|
2268
|
+
// would be so slow it would't matter.
|
2269
|
+
if (chart.renderer.isSVG) {
|
2270
|
+
|
2271
|
+
if (animation === true) {
|
2272
|
+
animation = {};
|
2273
|
+
}
|
2228
2274
|
|
2229
|
-
|
2230
|
-
|
2275
|
+
// Initialize the animation
|
2276
|
+
if (init) {
|
2231
2277
|
|
2232
|
-
|
2233
|
-
|
2234
|
-
|
2235
|
-
|
2236
|
-
|
2237
|
-
|
2238
|
-
|
2278
|
+
// Scale down the group and place it in the center
|
2279
|
+
attribs = {
|
2280
|
+
translateX: center[0] + plotLeft,
|
2281
|
+
translateY: center[1] + plotTop,
|
2282
|
+
scaleX: 0.001, // #1499
|
2283
|
+
scaleY: 0.001
|
2284
|
+
};
|
2239
2285
|
|
2240
|
-
|
2241
|
-
|
2242
|
-
|
2243
|
-
|
2244
|
-
|
2286
|
+
group.attr(attribs);
|
2287
|
+
if (markerGroup) {
|
2288
|
+
markerGroup.attrSetters = group.attrSetters;
|
2289
|
+
markerGroup.attr(attribs);
|
2290
|
+
}
|
2245
2291
|
|
2246
|
-
|
2247
|
-
|
2248
|
-
|
2249
|
-
|
2250
|
-
|
2251
|
-
|
2252
|
-
|
2253
|
-
|
2254
|
-
|
2255
|
-
|
2256
|
-
|
2257
|
-
|
2292
|
+
// Run the animation
|
2293
|
+
} else {
|
2294
|
+
attribs = {
|
2295
|
+
translateX: plotLeft,
|
2296
|
+
translateY: plotTop,
|
2297
|
+
scaleX: 1,
|
2298
|
+
scaleY: 1
|
2299
|
+
};
|
2300
|
+
group.animate(attribs, animation);
|
2301
|
+
if (markerGroup) {
|
2302
|
+
markerGroup.animate(attribs, animation);
|
2303
|
+
}
|
2258
2304
|
|
2259
|
-
|
2260
|
-
|
2305
|
+
// Delete this function to allow it only once
|
2306
|
+
this.animate = null;
|
2307
|
+
}
|
2261
2308
|
}
|
2262
|
-
}
|
2263
2309
|
|
2264
|
-
|
2265
|
-
|
2266
|
-
|
2267
|
-
|
2268
|
-
}
|
2269
|
-
|
2270
|
-
// Define the animate method for both regular series and column series and their derivatives
|
2271
|
-
wrap(seriesProto, 'animate', polarAnimate);
|
2272
|
-
wrap(colProto, 'animate', polarAnimate);
|
2310
|
+
// For non-polar charts, revert to the basic animation
|
2311
|
+
} else {
|
2312
|
+
proceed.call(this, init);
|
2313
|
+
}
|
2314
|
+
}
|
2273
2315
|
|
2316
|
+
// Define the animate method for regular series
|
2317
|
+
wrap(seriesProto, 'animate', polarAnimate);
|
2274
2318
|
|
2275
|
-
/**
|
2276
|
-
|
2277
|
-
|
2278
|
-
|
2279
|
-
wrap(seriesProto, 'setTooltipPoints', function (proceed, renew) {
|
2319
|
+
/**
|
2320
|
+
* Throw in a couple of properties to let setTooltipPoints know we're indexing the points
|
2321
|
+
* in degrees (0-360), not plot pixel width.
|
2322
|
+
*/
|
2323
|
+
wrap(seriesProto, 'setTooltipPoints', function (proceed, renew) {
|
2280
2324
|
|
2281
|
-
|
2282
|
-
|
2283
|
-
|
2284
|
-
|
2285
|
-
|
2325
|
+
if (this.chart.polar) {
|
2326
|
+
extend(this.xAxis, {
|
2327
|
+
tooltipLen: 360 // degrees are the resolution unit of the tooltipPoints array
|
2328
|
+
});
|
2329
|
+
}
|
2286
2330
|
|
2287
|
-
|
2288
|
-
|
2289
|
-
});
|
2331
|
+
// Run uber method
|
2332
|
+
return proceed.call(this, renew);
|
2333
|
+
});
|
2290
2334
|
|
2291
2335
|
|
2292
|
-
|
2293
|
-
* Extend the column prototype's translate method
|
2294
|
-
*/
|
2295
|
-
wrap(colProto, 'translate', function (proceed) {
|
2296
|
-
|
2297
|
-
var xAxis = this.xAxis,
|
2298
|
-
len = this.yAxis.len,
|
2299
|
-
center = xAxis.center,
|
2300
|
-
startAngleRad = xAxis.startAngleRad,
|
2301
|
-
renderer = this.chart.renderer,
|
2302
|
-
start,
|
2303
|
-
points,
|
2304
|
-
point,
|
2305
|
-
i;
|
2306
|
-
|
2307
|
-
this.preventPostTranslate = true;
|
2308
|
-
|
2309
|
-
// Run uber method
|
2310
|
-
proceed.call(this);
|
2311
|
-
|
2312
|
-
// Postprocess plot coordinates
|
2313
|
-
if (xAxis.isRadial) {
|
2314
|
-
points = this.points;
|
2315
|
-
i = points.length;
|
2316
|
-
while (i--) {
|
2317
|
-
point = points[i];
|
2318
|
-
start = point.barX + startAngleRad;
|
2319
|
-
point.shapeType = 'path';
|
2320
|
-
point.shapeArgs = {
|
2321
|
-
d: renderer.symbols.arc(
|
2322
|
-
center[0],
|
2323
|
-
center[1],
|
2324
|
-
len - point.plotY,
|
2325
|
-
null,
|
2326
|
-
{
|
2327
|
-
start: start,
|
2328
|
-
end: start + point.pointWidth,
|
2329
|
-
innerR: len - pick(point.yBottom, len)
|
2330
|
-
}
|
2331
|
-
)
|
2332
|
-
};
|
2333
|
-
this.toXY(point); // provide correct plotX, plotY for tooltip
|
2334
|
-
}
|
2335
|
-
}
|
2336
|
-
});
|
2336
|
+
if (seriesTypes.column) {
|
2337
2337
|
|
2338
|
+
colProto = seriesTypes.column.prototype;
|
2339
|
+
/**
|
2340
|
+
* Define the animate method for columnseries
|
2341
|
+
*/
|
2342
|
+
wrap(colProto, 'animate', polarAnimate);
|
2338
2343
|
|
2339
|
-
|
2340
|
-
|
2341
|
-
|
2342
|
-
|
2343
|
-
|
2344
|
-
|
2345
|
-
|
2346
|
-
|
2347
|
-
|
2348
|
-
|
2349
|
-
|
2350
|
-
|
2351
|
-
|
2352
|
-
|
2353
|
-
|
2354
|
-
|
2355
|
-
|
2356
|
-
|
2344
|
+
|
2345
|
+
/**
|
2346
|
+
* Extend the column prototype's translate method
|
2347
|
+
*/
|
2348
|
+
wrap(colProto, 'translate', function (proceed) {
|
2349
|
+
|
2350
|
+
var xAxis = this.xAxis,
|
2351
|
+
len = this.yAxis.len,
|
2352
|
+
center = xAxis.center,
|
2353
|
+
startAngleRad = xAxis.startAngleRad,
|
2354
|
+
renderer = this.chart.renderer,
|
2355
|
+
start,
|
2356
|
+
points,
|
2357
|
+
point,
|
2358
|
+
i;
|
2359
|
+
|
2360
|
+
this.preventPostTranslate = true;
|
2361
|
+
|
2362
|
+
// Run uber method
|
2363
|
+
proceed.call(this);
|
2364
|
+
|
2365
|
+
// Postprocess plot coordinates
|
2366
|
+
if (xAxis.isRadial) {
|
2367
|
+
points = this.points;
|
2368
|
+
i = points.length;
|
2369
|
+
while (i--) {
|
2370
|
+
point = points[i];
|
2371
|
+
start = point.barX + startAngleRad;
|
2372
|
+
point.shapeType = 'path';
|
2373
|
+
point.shapeArgs = {
|
2374
|
+
d: renderer.symbols.arc(
|
2375
|
+
center[0],
|
2376
|
+
center[1],
|
2377
|
+
len - point.plotY,
|
2378
|
+
null,
|
2379
|
+
{
|
2380
|
+
start: start,
|
2381
|
+
end: start + point.pointWidth,
|
2382
|
+
innerR: len - pick(point.yBottom, len)
|
2383
|
+
}
|
2384
|
+
)
|
2385
|
+
};
|
2386
|
+
this.toXY(point); // provide correct plotX, plotY for tooltip
|
2387
|
+
}
|
2357
2388
|
}
|
2358
|
-
|
2359
|
-
|
2360
|
-
|
2361
|
-
|
2362
|
-
|
2363
|
-
|
2364
|
-
|
2389
|
+
});
|
2390
|
+
|
2391
|
+
|
2392
|
+
/**
|
2393
|
+
* Align column data labels outside the columns. #1199.
|
2394
|
+
*/
|
2395
|
+
wrap(colProto, 'alignDataLabel', function (proceed, point, dataLabel, options, alignTo, isNew) {
|
2396
|
+
|
2397
|
+
if (this.chart.polar) {
|
2398
|
+
var angle = point.rectPlotX / Math.PI * 180,
|
2399
|
+
align,
|
2400
|
+
verticalAlign;
|
2401
|
+
|
2402
|
+
// Align nicely outside the perimeter of the columns
|
2403
|
+
if (options.align === null) {
|
2404
|
+
if (angle > 20 && angle < 160) {
|
2405
|
+
align = 'left'; // right hemisphere
|
2406
|
+
} else if (angle > 200 && angle < 340) {
|
2407
|
+
align = 'right'; // left hemisphere
|
2408
|
+
} else {
|
2409
|
+
align = 'center'; // top or bottom
|
2410
|
+
}
|
2411
|
+
options.align = align;
|
2412
|
+
}
|
2413
|
+
if (options.verticalAlign === null) {
|
2414
|
+
if (angle < 45 || angle > 315) {
|
2415
|
+
verticalAlign = 'bottom'; // top part
|
2416
|
+
} else if (angle > 135 && angle < 225) {
|
2417
|
+
verticalAlign = 'top'; // bottom part
|
2418
|
+
} else {
|
2419
|
+
verticalAlign = 'middle'; // left or right
|
2420
|
+
}
|
2421
|
+
options.verticalAlign = verticalAlign;
|
2422
|
+
}
|
2423
|
+
|
2424
|
+
seriesProto.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew);
|
2365
2425
|
} else {
|
2366
|
-
|
2426
|
+
proceed.call(this, point, dataLabel, options, alignTo, isNew);
|
2367
2427
|
}
|
2368
|
-
options.verticalAlign = verticalAlign;
|
2369
|
-
}
|
2370
|
-
|
2371
|
-
seriesProto.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew);
|
2372
|
-
} else {
|
2373
|
-
proceed.call(this, point, dataLabel, options, alignTo, isNew);
|
2374
|
-
}
|
2375
2428
|
|
2376
|
-
});
|
2429
|
+
});
|
2430
|
+
}
|
2377
2431
|
|
2378
|
-
|
2379
|
-
|
2380
|
-
|
2381
|
-
|
2382
|
-
|
2383
|
-
|
2384
|
-
|
2385
|
-
|
2386
|
-
|
2387
|
-
|
2432
|
+
|
2433
|
+
/**
|
2434
|
+
* Extend the mouse tracker to return the tooltip position index in terms of
|
2435
|
+
* degrees rather than pixels
|
2436
|
+
*/
|
2437
|
+
wrap(pointerProto, 'getIndex', function (proceed, e) {
|
2438
|
+
var ret,
|
2439
|
+
chart = this.chart,
|
2440
|
+
center,
|
2441
|
+
x,
|
2442
|
+
y;
|
2388
2443
|
|
2389
|
-
|
2390
|
-
|
2391
|
-
|
2392
|
-
|
2444
|
+
if (chart.polar) {
|
2445
|
+
center = chart.xAxis[0].center;
|
2446
|
+
x = e.chartX - center[0] - chart.plotLeft;
|
2447
|
+
y = e.chartY - center[1] - chart.plotTop;
|
2393
2448
|
|
2394
|
-
|
2449
|
+
ret = 180 - Math.round(Math.atan2(x, y) / Math.PI * 180);
|
2395
2450
|
|
2396
|
-
|
2451
|
+
} else {
|
2397
2452
|
|
2398
|
-
|
2399
|
-
|
2400
|
-
|
2401
|
-
|
2402
|
-
});
|
2453
|
+
// Run uber method
|
2454
|
+
ret = proceed.call(this, e);
|
2455
|
+
}
|
2456
|
+
return ret;
|
2457
|
+
});
|
2403
2458
|
|
2404
|
-
/**
|
2405
|
-
|
2406
|
-
|
2407
|
-
wrap(pointerProto, 'getCoordinates', function (proceed, e) {
|
2408
|
-
|
2409
|
-
|
2410
|
-
|
2411
|
-
|
2412
|
-
|
2459
|
+
/**
|
2460
|
+
* Extend getCoordinates to prepare for polar axis values
|
2461
|
+
*/
|
2462
|
+
wrap(pointerProto, 'getCoordinates', function (proceed, e) {
|
2463
|
+
var chart = this.chart,
|
2464
|
+
ret = {
|
2465
|
+
xAxis: [],
|
2466
|
+
yAxis: []
|
2467
|
+
};
|
2413
2468
|
|
2414
|
-
|
2469
|
+
if (chart.polar) {
|
2415
2470
|
|
2416
|
-
|
2417
|
-
|
2418
|
-
|
2419
|
-
|
2420
|
-
|
2471
|
+
each(chart.axes, function (axis) {
|
2472
|
+
var isXAxis = axis.isXAxis,
|
2473
|
+
center = axis.center,
|
2474
|
+
x = e.chartX - center[0] - chart.plotLeft,
|
2475
|
+
y = e.chartY - center[1] - chart.plotTop;
|
2421
2476
|
|
2422
|
-
|
2423
|
-
|
2424
|
-
|
2425
|
-
|
2426
|
-
|
2427
|
-
|
2428
|
-
|
2429
|
-
|
2477
|
+
ret[isXAxis ? 'xAxis' : 'yAxis'].push({
|
2478
|
+
axis: axis,
|
2479
|
+
value: axis.translate(
|
2480
|
+
isXAxis ?
|
2481
|
+
Math.PI - Math.atan2(x, y) : // angle
|
2482
|
+
Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)), // distance from center
|
2483
|
+
true
|
2484
|
+
)
|
2485
|
+
});
|
2430
2486
|
});
|
2431
|
-
});
|
2432
2487
|
|
2433
|
-
|
2434
|
-
|
2435
|
-
|
2488
|
+
} else {
|
2489
|
+
ret = proceed.call(this, e);
|
2490
|
+
}
|
2436
2491
|
|
2437
|
-
|
2438
|
-
});
|
2492
|
+
return ret;
|
2493
|
+
});
|
2494
|
+
|
2495
|
+
}());
|
2496
|
+
|
2439
2497
|
}(Highcharts));
|