highcharts-rails 5.0.12 → 5.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (25) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.markdown +59 -0
  3. data/app/assets/javascripts/highcharts.js +6250 -788
  4. data/app/assets/javascripts/highcharts/highcharts-3d.js +210 -25
  5. data/app/assets/javascripts/highcharts/highcharts-more.js +908 -22
  6. data/app/assets/javascripts/highcharts/modules/accessibility.js +272 -64
  7. data/app/assets/javascripts/highcharts/modules/annotations.js +1 -1
  8. data/app/assets/javascripts/highcharts/modules/boost.js +89 -66
  9. data/app/assets/javascripts/highcharts/modules/broken-axis.js +65 -4
  10. data/app/assets/javascripts/highcharts/modules/data.js +1 -1
  11. data/app/assets/javascripts/highcharts/modules/drilldown.js +234 -17
  12. data/app/assets/javascripts/highcharts/modules/exporting.js +508 -69
  13. data/app/assets/javascripts/highcharts/modules/funnel.js +129 -8
  14. data/app/assets/javascripts/highcharts/modules/grid-axis.js +1 -1
  15. data/app/assets/javascripts/highcharts/modules/heatmap.js +361 -44
  16. data/app/assets/javascripts/highcharts/modules/no-data-to-display.js +64 -1
  17. data/app/assets/javascripts/highcharts/modules/offline-exporting.js +44 -44
  18. data/app/assets/javascripts/highcharts/modules/overlapping-datalabels.js +26 -3
  19. data/app/assets/javascripts/highcharts/modules/series-label.js +19 -1
  20. data/app/assets/javascripts/highcharts/modules/solid-gauge.js +14 -5
  21. data/app/assets/javascripts/highcharts/modules/stock.js +1122 -86
  22. data/app/assets/javascripts/highcharts/modules/treemap.js +265 -43
  23. data/app/assets/javascripts/highcharts/modules/xrange-series.js +1 -1
  24. data/lib/highcharts/version.rb +1 -1
  25. metadata +1 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v5.0.12 (2017-05-24)
2
+ * @license Highcharts JS v5.0.13 (2017-07-27)
3
3
  * Plugin for displaying a message when there is no data visible in chart.
4
4
  *
5
5
  * (c) 2010-2017 Highsoft AS
@@ -37,11 +37,61 @@
37
37
  });
38
38
 
39
39
  // Add default display options for message
40
+ /**
41
+ * Options for displaying a message like "No data to display".
42
+ * This feature requires the file no-data-to-display.js to be loaded in the page.
43
+ * The actual text to display is set in the lang.noData option.
44
+ * @type {Object}
45
+ * @optionparent noData
46
+ */
40
47
  defaultOptions.noData = {
48
+
49
+ /**
50
+ * The position of the no-data label, relative to the plot area.
51
+ *
52
+ * @type {Object}
53
+ * @default { "x": 0, "y": 0, "align": "center", "verticalAlign": "middle" }
54
+ * @since 3.0.8
55
+ * @product highcharts highstock highmaps
56
+ */
41
57
  position: {
58
+
59
+ /**
60
+ * Horizontal offset of the label, in pixels.
61
+ *
62
+ * @type {Number}
63
+ * @default 0
64
+ * @product highcharts highstock
65
+ */
42
66
  x: 0,
67
+
68
+ /**
69
+ * Vertical offset of the label, in pixels.
70
+ *
71
+ * @type {Number}
72
+ * @default 0
73
+ * @product highcharts highstock
74
+ */
43
75
  y: 0,
76
+
77
+ /**
78
+ * Horizontal alignment of the label.
79
+ *
80
+ * @validvalue ["left", "center", "right"]
81
+ * @type {String}
82
+ * @default center
83
+ * @product highcharts highstock highmaps
84
+ */
44
85
  align: 'center',
86
+
87
+ /**
88
+ * Vertical alignment of the label.
89
+ *
90
+ * @validvalue ["top", "middle", "bottom"]
91
+ * @type {String}
92
+ * @default middle
93
+ * @product highcharts highstock
94
+ */
45
95
  verticalAlign: 'middle'
46
96
  }
47
97
  // useHTML: false
@@ -49,9 +99,22 @@
49
99
 
50
100
 
51
101
  // Presentational
102
+ /**
103
+ * CSS styles for the no-data label.
104
+ * @optionparent noData.style
105
+ */
52
106
  defaultOptions.noData.style = {
107
+
108
+ /**
109
+ */
53
110
  fontWeight: 'bold',
111
+
112
+ /**
113
+ */
54
114
  fontSize: '12px',
115
+
116
+ /**
117
+ */
55
118
  color: '#666666'
56
119
  };
57
120
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v5.0.12 (2017-05-24)
2
+ * @license Highcharts JS v5.0.13 (2017-07-27)
3
3
  * Client side exporting module
4
4
  *
5
5
  * (c) 2015 Torstein Honsi / Oystein Moseng
@@ -91,14 +91,19 @@
91
91
  windowRef;
92
92
 
93
93
  // IE specific blob implementation
94
- if (nav.msSaveOrOpenBlob) {
94
+ // Don't use for normal dataURLs
95
+ if (
96
+ typeof dataURL !== 'string' &&
97
+ !(dataURL instanceof String) &&
98
+ nav.msSaveOrOpenBlob
99
+ ) {
95
100
  nav.msSaveOrOpenBlob(dataURL, filename);
96
101
  return;
97
102
  }
98
103
 
99
104
  // Some browsers have limitations for data URL lengths. Try to convert to
100
- // Blob or fall back.
101
- if (dataURL.length > 2000000) {
105
+ // Blob or fall back. Edge always needs that blob.
106
+ if (isEdgeBrowser || dataURL.length > 2000000) {
102
107
  dataURL = Highcharts.dataURLtoBlob(dataURL);
103
108
  if (!dataURL) {
104
109
  throw 'Data URL length limit reached';
@@ -487,7 +492,6 @@
487
492
 
488
493
  // Always fall back on:
489
494
  // - MS browsers: Embedded images JPEG/PNG, or any PDF
490
- // - Edge: PNG/JPEG all cases
491
495
  // - Embedded images and PDF
492
496
  if (
493
497
  (
@@ -497,8 +501,6 @@
497
501
  chart.container.getElementsByTagName('image').length &&
498
502
  options.type !== 'image/svg+xml'
499
503
  )
500
- ) || (
501
- isEdgeBrowser && options.type !== 'image/svg+xml'
502
504
  ) || (
503
505
  options.type === 'application/pdf' &&
504
506
  chart.container.getElementsByTagName('image').length
@@ -513,44 +515,42 @@
513
515
 
514
516
  // Extend the default options to use the local exporter logic
515
517
  merge(true, Highcharts.getOptions().exporting, {
516
- libURL: 'https://code.highcharts.com/5.0.12/lib/',
517
- buttons: {
518
- contextButton: {
519
- menuItems: [{
520
- textKey: 'printChart',
521
- onclick: function() {
522
- this.print();
523
- }
524
- }, {
525
- separator: true
526
- }, {
527
- textKey: 'downloadPNG',
528
- onclick: function() {
529
- this.exportChartLocal();
530
- }
531
- }, {
532
- textKey: 'downloadJPEG',
533
- onclick: function() {
534
- this.exportChartLocal({
535
- type: 'image/jpeg'
536
- });
537
- }
538
- }, {
539
- textKey: 'downloadSVG',
540
- onclick: function() {
541
- this.exportChartLocal({
542
- type: 'image/svg+xml'
543
- });
544
- }
545
- }, {
546
- textKey: 'downloadPDF',
547
- onclick: function() {
548
- this.exportChartLocal({
549
- type: 'application/pdf'
550
- });
551
- }
552
- }]
518
+ libURL: 'https://code.highcharts.com/5.0.13/lib/',
519
+
520
+ // When offline-exporting is loaded, redefine the menu item definitions
521
+ // related to download.
522
+ menuItemDefinitions: {
523
+ downloadPNG: {
524
+ textKey: 'downloadPNG',
525
+ onclick: function() {
526
+ this.exportChartLocal();
527
+ }
528
+ },
529
+ downloadJPEG: {
530
+ textKey: 'downloadJPEG',
531
+ onclick: function() {
532
+ this.exportChartLocal({
533
+ type: 'image/jpeg'
534
+ });
535
+ }
536
+ },
537
+ downloadSVG: {
538
+ textKey: 'downloadSVG',
539
+ onclick: function() {
540
+ this.exportChartLocal({
541
+ type: 'image/svg+xml'
542
+ });
543
+ }
544
+ },
545
+ downloadPDF: {
546
+ textKey: 'downloadPDF',
547
+ onclick: function() {
548
+ this.exportChartLocal({
549
+ type: 'application/pdf'
550
+ });
551
+ }
553
552
  }
553
+
554
554
  }
555
555
  });
556
556
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v5.0.12 (2017-05-24)
2
+ * @license Highcharts JS v5.0.13 (2017-07-27)
3
3
  *
4
4
  * (c) 2009-2017 Torstein Honsi
5
5
  *
@@ -25,6 +25,7 @@
25
25
  */
26
26
  var Chart = H.Chart,
27
27
  each = H.each,
28
+ objectEach = H.objectEach,
28
29
  pick = H.pick,
29
30
  addEvent = H.addEvent;
30
31
 
@@ -35,6 +36,19 @@
35
36
  function collectAndHide() {
36
37
  var labels = [];
37
38
 
39
+ each(chart.yAxis, function(yAxis) {
40
+ if (
41
+ yAxis.options.stackLabels &&
42
+ !yAxis.options.stackLabels.allowOverlap
43
+ ) {
44
+ objectEach(yAxis.stacks, function(stack) {
45
+ objectEach(stack, function(stackItem) {
46
+ labels.push(stackItem.label);
47
+ });
48
+ });
49
+ }
50
+ });
51
+
38
52
  each(chart.series || [], function(series) {
39
53
  var dlOptions = series.options.dataLabels,
40
54
  // Range series have two collections
@@ -87,6 +101,7 @@
87
101
  parent1,
88
102
  parent2,
89
103
  padding,
104
+ bBox,
90
105
  intersectRect = function(x1, y1, w1, h1, x2, y2, w2, h2) {
91
106
  return !(
92
107
  x2 > x1 + w1 ||
@@ -96,12 +111,20 @@
96
111
  );
97
112
  };
98
113
 
99
- // Mark with initial opacity
100
114
  for (i = 0; i < len; i++) {
101
115
  label = labels[i];
102
116
  if (label) {
117
+
118
+ // Mark with initial opacity
103
119
  label.oldOpacity = label.opacity;
104
120
  label.newOpacity = 1;
121
+
122
+ // Get width and height if pure text nodes (stack labels)
123
+ if (!label.width) {
124
+ bBox = label.getBBox();
125
+ label.width = bBox.width;
126
+ label.height = bBox.height;
127
+ }
105
128
  }
106
129
  }
107
130
 
@@ -129,7 +152,7 @@
129
152
  parent1 = label1.parentGroup;
130
153
  parent2 = label2.parentGroup;
131
154
  // Substract the padding if no background or border (#4333)
132
- padding = 2 * (label1.box ? 0 : label1.padding);
155
+ padding = 2 * (label1.box ? 0 : (label1.padding || 0));
133
156
  isIntersecting = intersectRect(
134
157
  pos1.x + parent1.translateX,
135
158
  pos1.y + parent1.translateY,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v5.0.12 (2017-05-24)
2
+ * @license Highcharts JS v5.0.13 (2017-07-27)
3
3
  *
4
4
  * (c) 2009-2017 Torstein Honsi
5
5
  *
@@ -47,13 +47,31 @@
47
47
  H.setOptions({
48
48
  plotOptions: {
49
49
  series: {
50
+
51
+ /**
52
+ */
50
53
  label: {
54
+
55
+ /**
56
+ */
51
57
  enabled: true,
52
58
  // Allow labels to be placed distant to the graph if necessary, and
53
59
  // draw a connector line to the graph
60
+
61
+ /**
62
+ */
54
63
  connectorAllowed: true,
64
+
65
+ /**
66
+ */
55
67
  connectorNeighbourDistance: 24, // If the label is closer than this to a neighbour graph, draw a connector
68
+
69
+ /**
70
+ */
56
71
  styles: {
72
+
73
+ /**
74
+ */
57
75
  fontWeight: 'bold'
58
76
  }
59
77
  // boxesToAvoid: []
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v5.0.12 (2017-05-24)
2
+ * @license Highcharts JS v5.0.13 (2017-07-27)
3
3
  * Solid angular gauge module
4
4
  *
5
5
  * (c) 2010-2017 Torstein Honsi
@@ -61,6 +61,7 @@
61
61
  // Insert rounded edge on end, and remove line.
62
62
  path.splice.apply(path, [11, 3].concat(roundEnd));
63
63
  }
64
+
64
65
  return path;
65
66
  });
66
67
 
@@ -162,12 +163,20 @@
162
163
  return color;
163
164
  }
164
165
  };
165
-
166
- // The solidgauge series type
167
- H.seriesType('solidgauge', 'gauge', {
166
+ /**
167
+ * @extends plotOptions.gauge
168
+ * @optionparent plotOptions.solidgauge
169
+ */
170
+ var solidGaugeOptions = {
171
+ /**
172
+ */
168
173
  colorByPoint: true
169
174
 
170
- }, {
175
+ };
176
+
177
+
178
+ // The solidgauge series type
179
+ H.seriesType('solidgauge', 'gauge', solidGaugeOptions, {
171
180
 
172
181
  /**
173
182
  * Extend the translate function to extend the Y axis with the necessary
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v5.0.12 (2017-05-24)
2
+ * @license Highcharts JS v5.0.13 (2017-07-27)
3
3
  * Highstock as a plugin for Highcharts
4
4
  *
5
5
  * (c) 2017 Torstein Honsi
@@ -1026,19 +1026,80 @@
1026
1026
  H.Series.prototype.gappedPath = function() {
1027
1027
  var gapSize = this.options.gapSize,
1028
1028
  points = this.points.slice(),
1029
- i = points.length - 1;
1029
+ i = points.length - 1,
1030
+ yAxis = this.yAxis,
1031
+ xRange,
1032
+ stack;
1033
+
1034
+ /**
1035
+ * Defines when to display a gap in the graph, together with the `gapUnit`
1036
+ * option.
1037
+ *
1038
+ * When the `gapUnit` is `relative` (default), a gap size of 5 means
1039
+ * that if the distance between two points is greater than five times
1040
+ * that of the two closest points, the graph will be broken.
1041
+ *
1042
+ * When the `gapUnit` is `value`, the gap is based on absolute axis values,
1043
+ * which on a datetime axis is milliseconds.
1044
+ *
1045
+ * In practice, this option is most often used to visualize gaps in
1046
+ * time series. In a stock chart, intraday data is available for daytime
1047
+ * hours, while gaps will appear in nights and weekends.
1048
+ *
1049
+ * @type {Number}
1050
+ * @see [xAxis.breaks](#xAxis.breaks)
1051
+ * @sample {highstock} stock/plotoptions/series-gapsize/
1052
+ * Setting the gap size to 2 introduces gaps for weekends in daily
1053
+ * datasets.
1054
+ * @default 0
1055
+ * @product highstock
1056
+ * @apioption plotOptions.series.gapSize
1057
+ */
1058
+
1059
+ /**
1060
+ * Together with `gapSize`, this option defines where to draw gaps in the
1061
+ * graph.
1062
+ *
1063
+ * @type {String}
1064
+ * @see [gapSize](plotOptions.series.gapSize)
1065
+ * @default relative
1066
+ * @validvalues ["relative", "value"]
1067
+ * @since 5.0.13
1068
+ * @product highstock
1069
+ * @apioption plotOptions.series.gapUnit
1070
+ */
1030
1071
 
1031
1072
  if (gapSize && i > 0) { // #5008
1032
1073
 
1074
+ // Gap unit is relative
1075
+ if (this.options.gapUnit !== 'value') {
1076
+ gapSize *= this.closestPointRange;
1077
+ }
1078
+
1033
1079
  // extension for ordinal breaks
1034
1080
  while (i--) {
1035
- if (points[i + 1].x - points[i].x > this.closestPointRange * gapSize) {
1081
+ if (points[i + 1].x - points[i].x > gapSize) {
1082
+ xRange = (points[i].x + points[i + 1].x) / 2;
1083
+
1036
1084
  points.splice( // insert after this one
1037
1085
  i + 1,
1038
1086
  0, {
1039
- isNull: true
1087
+ isNull: true,
1088
+ x: xRange
1040
1089
  }
1041
1090
  );
1091
+
1092
+ // For stacked chart generate empty stack items, #6546
1093
+ if (this.options.stacking) {
1094
+ stack = yAxis.stacks[this.stackKey][xRange] = new H.StackItem(
1095
+ yAxis,
1096
+ yAxis.options.stackLabels,
1097
+ false,
1098
+ xRange,
1099
+ this.stack
1100
+ );
1101
+ stack.total = 0;
1102
+ }
1042
1103
  }
1043
1104
  }
1044
1105
  }
@@ -1086,6 +1147,9 @@
1086
1147
  baseGeneratePoints = seriesProto.generatePoints,
1087
1148
  baseDestroy = seriesProto.destroy,
1088
1149
 
1150
+ /**
1151
+ *
1152
+ */
1089
1153
  commonOptions = {
1090
1154
  approximation: 'average', // average, open, high, low, close, sum
1091
1155
  //enabled: null, // (true for stock charts, false for basic),
@@ -1749,10 +1813,29 @@
1749
1813
  * @constructor seriesTypes.ohlc
1750
1814
  * @augments seriesTypes.column
1751
1815
  */
1816
+ /**
1817
+ * @extends {plotOptions.column}
1818
+ * @optionparent plotOptions.ohlc
1819
+ */
1752
1820
  seriesType('ohlc', 'column', {
1821
+
1822
+ /**
1823
+ * The pixel width of the line/border. Defaults to `1`.
1824
+ *
1825
+ * @type {Number}
1826
+ * @sample {highstock} stock/plotoptions/ohlc-linewidth/ A greater line width
1827
+ * @default 1
1828
+ * @product highstock
1829
+ */
1753
1830
  lineWidth: 1,
1831
+
1832
+ /**
1833
+ */
1754
1834
  tooltip: {
1755
1835
 
1836
+
1837
+ /**
1838
+ */
1756
1839
  pointFormat: '<span style="color:{point.color}">\u25CF</span> <b> {series.name}</b><br/>' +
1757
1840
  'Open: {point.open}<br/>' +
1758
1841
  'High: {point.high}<br/>' +
@@ -1760,13 +1843,36 @@
1760
1843
  'Close: {point.close}<br/>'
1761
1844
 
1762
1845
  },
1846
+
1847
+ /**
1848
+ */
1763
1849
  threshold: null,
1764
1850
 
1851
+
1852
+ /**
1853
+ */
1765
1854
  states: {
1855
+
1856
+ /**
1857
+ * @extends plotOptions.column.states.hover
1858
+ * @product highstock
1859
+ */
1766
1860
  hover: {
1861
+
1862
+ /**
1863
+ * The pixel width of the line representing the OHLC point. Defaults
1864
+ * to `3`.
1865
+ *
1866
+ * @type {Number}
1867
+ * @default 3
1868
+ * @product highstock
1869
+ */
1767
1870
  lineWidth: 3
1768
1871
  }
1769
1872
  },
1873
+
1874
+ /**
1875
+ */
1770
1876
  stickyTracking: true
1771
1877
  //upColor: undefined
1772
1878
 
@@ -1952,28 +2058,105 @@
1952
2058
  seriesTypes = H.seriesTypes;
1953
2059
 
1954
2060
  /**
1955
- * The candlestick series type.
1956
- *
1957
- * @constructor seriesTypes.candlestick
1958
- * @augments seriesTypes.ohlc
2061
+ * @extends {plotOptions.ohlc}
2062
+ * @products highstock
2063
+ * @optionparent plotOptions.candlestick
1959
2064
  */
1960
- seriesType('candlestick', 'ohlc', merge(defaultPlotOptions.column, {
2065
+ var candlestickOptions = {
2066
+
2067
+ /**
2068
+ */
1961
2069
  states: {
2070
+
2071
+ /**
2072
+ * @extends plotOptions.column.states.hover
2073
+ * @product highstock
2074
+ */
1962
2075
  hover: {
2076
+
2077
+ /**
2078
+ * The pixel width of the line/border around the candlestick. Defaults
2079
+ * to `2`.
2080
+ *
2081
+ * @type {Number}
2082
+ * @default 2
2083
+ * @product highstock
2084
+ */
1963
2085
  lineWidth: 2
1964
2086
  }
1965
2087
  },
2088
+
2089
+ /**
2090
+ */
1966
2091
  tooltip: defaultPlotOptions.ohlc.tooltip,
2092
+
2093
+ /**
2094
+ */
1967
2095
  threshold: null,
1968
2096
 
2097
+
2098
+ /**
2099
+ * The color of the line/border of the candlestick.
2100
+ *
2101
+ * In [styled mode](http://www.highcharts.com/docs/chart-design-and-
2102
+ * style/style-by-css), the line stroke can be set with the `.highcharts-
2103
+ * candlestick-series .highcahrts-point` rule.
2104
+ *
2105
+ * @type {Color}
2106
+ * @see [upLineColor](#plotOptions.candlestick.upLineColor)
2107
+ * @sample {highstock} stock/plotoptions/candlestick-linecolor/ Candlestick line colors
2108
+ * @default #000000
2109
+ * @product highstock
2110
+ */
1969
2111
  lineColor: '#000000',
2112
+
2113
+ /**
2114
+ * The pixel width of the candlestick line/border. Defaults to `1`.
2115
+ *
2116
+ *
2117
+ * In [styled mode](http://www.highcharts.com/docs/chart-design-and-
2118
+ * style/style-by-css), the line stroke width can be set with the `.
2119
+ * highcharts-candlestick-series .highcahrts-point` rule.
2120
+ *
2121
+ * @type {Number}
2122
+ * @default 1
2123
+ * @product highstock
2124
+ */
1970
2125
  lineWidth: 1,
2126
+
2127
+ /**
2128
+ * The fill color of the candlestick when values are rising.
2129
+ *
2130
+ * In [styled mode](http://www.highcharts.com/docs/chart-design-and-
2131
+ * style/style-by-css), the up color can be set with the `.highcharts-
2132
+ * candlestick-series .highcharts-point-up` rule.
2133
+ *
2134
+ * @type {Color}
2135
+ * @sample {highstock} stock/plotoptions/candlestick-color/ Custom colors
2136
+ * @sample {highstock} highcharts/css/candlestick/ Colors in styled mode
2137
+ * @default #ffffff
2138
+ * @product highstock
2139
+ */
1971
2140
  upColor: '#ffffff',
2141
+
2142
+ /**
2143
+ */
1972
2144
  stickyTracking: true
1973
2145
  // upLineColor: null
1974
2146
 
1975
2147
 
1976
- }), /** @lends seriesTypes.candlestick */ {
2148
+ };
2149
+
2150
+ /**
2151
+ * The candlestick series type.
2152
+ *
2153
+ * @constructor seriesTypes.candlestick
2154
+ * @augments seriesTypes.ohlc
2155
+ */
2156
+ seriesType('candlestick', 'ohlc', merge(
2157
+ defaultPlotOptions.column,
2158
+ candlestickOptions
2159
+ ), /** @lends seriesTypes.candlestick */ {
1977
2160
 
1978
2161
  /**
1979
2162
  * Postprocess mapping between options and SVG attributes
@@ -2122,29 +2305,149 @@
2122
2305
  * @constructor seriesTypes.flags
2123
2306
  * @augments seriesTypes.column
2124
2307
  */
2308
+ /**
2309
+ * @extends {plotOptions.column}
2310
+ * @optionparent plotOptions.flags
2311
+ */
2125
2312
  seriesType('flags', 'column', {
2313
+
2314
+ /**
2315
+ */
2126
2316
  pointRange: 0, // #673
2127
2317
  //radius: 2,
2318
+
2319
+ /**
2320
+ * The shape of the marker. Can be one of "flag", "circlepin", "squarepin",
2321
+ * or an image on the format `url(/path-to-image.jpg)`. Individual
2322
+ * shapes can also be set for each point.
2323
+ *
2324
+ * @validvalue ["flag", "circlepin", "squarepin"]
2325
+ * @type {String}
2326
+ * @sample {highstock} stock/plotoptions/flags/ Different shapes
2327
+ * @default flag
2328
+ * @product highstock
2329
+ */
2128
2330
  shape: 'flag',
2331
+
2332
+ /**
2333
+ * When multiple flags in the same series fall on the same value, this
2334
+ * number determines the vertical offset between them.
2335
+ *
2336
+ * @type {Number}
2337
+ * @sample {highstock} stock/plotoptions/flags-stackdistance/ A greater stack distance
2338
+ * @default 12
2339
+ * @product highstock
2340
+ */
2129
2341
  stackDistance: 12,
2342
+
2343
+ /**
2344
+ * Text alignment for the text inside the flag.
2345
+ *
2346
+ * @validvalue ["left", "center", "right"]
2347
+ * @type {String}
2348
+ * @default center
2349
+ * @since 5.0.0
2350
+ * @product highstock
2351
+ */
2130
2352
  textAlign: 'center',
2353
+
2354
+ /**
2355
+ * Specific tooltip options for flag series. Flag series tooltips are
2356
+ * different from most other types in that a flag doesn't have a data
2357
+ * value, so the tooltip rather displays the `text` option for each
2358
+ * point.
2359
+ *
2360
+ * @type {Object}
2361
+ * @extends plotOptions.series.tooltip
2362
+ * @excluding changeDecimals,valueDecimals,valuePrefix,valueSuffix
2363
+ * @product highstock
2364
+ */
2131
2365
  tooltip: {
2366
+
2367
+ /**
2368
+ */
2132
2369
  pointFormat: '{point.text}<br/>'
2133
2370
  },
2371
+
2372
+ /**
2373
+ */
2134
2374
  threshold: null,
2375
+
2376
+ /**
2377
+ * The y position of the top left corner of the flag relative to either
2378
+ * the series (if onSeries is defined), or the x axis. Defaults to
2379
+ * `-30`.
2380
+ *
2381
+ * @type {Number}
2382
+ * @default -30
2383
+ * @product highstock
2384
+ */
2135
2385
  y: -30,
2136
2386
 
2387
+
2388
+ /**
2389
+ */
2137
2390
  fillColor: '#ffffff',
2138
2391
  // lineColor: color,
2392
+
2393
+ /**
2394
+ * The pixel width of the candlestick line/border. Defaults to `1`.
2395
+ *
2396
+ * @type {Number}
2397
+ * @default 1
2398
+ * @product highstock
2399
+ */
2139
2400
  lineWidth: 1,
2401
+
2402
+ /**
2403
+ */
2140
2404
  states: {
2405
+
2406
+ /**
2407
+ * @extends plotOptions.column.states.hover
2408
+ * @product highstock
2409
+ */
2141
2410
  hover: {
2411
+
2412
+ /**
2413
+ * The color of the line/border of the flag Defaults to `"black"`.
2414
+ *
2415
+ * @type {String}
2416
+ * @default "black"
2417
+ * @product highstock
2418
+ */
2142
2419
  lineColor: '#000000',
2420
+
2421
+ /**
2422
+ * The fill or background color of the flag Defaults to `"#FCFFC5"`.
2423
+ *
2424
+ * @type {String}
2425
+ * @default "#FCFFC5"
2426
+ * @product highstock
2427
+ */
2143
2428
  fillColor: '#ccd6eb'
2144
2429
  }
2145
2430
  },
2431
+
2432
+ /**
2433
+ * The text styles of the flag.
2434
+ *
2435
+ * In [styled mode](http://www.highcharts.com/docs/chart-design-and-
2436
+ * style/style-by-css), the styles are set in the `.highcharts-flag-
2437
+ * series .highcharts-point` rule.
2438
+ *
2439
+ * @type {CSSObject}
2440
+ * @default { "fontSize": "11px", "fontWeight": "bold" }
2441
+ * @product highstock
2442
+ */
2146
2443
  style: {
2444
+
2445
+ /**
2446
+ */
2147
2447
  fontSize: '11px',
2448
+
2449
+ /**
2450
+ */
2148
2451
  fontWeight: 'bold'
2149
2452
  }
2150
2453
 
@@ -2513,7 +2816,6 @@
2513
2816
  defaultOptions = H.defaultOptions,
2514
2817
  defined = H.defined,
2515
2818
  destroyObjectProperties = H.destroyObjectProperties,
2516
- doc = H.doc,
2517
2819
  each = H.each,
2518
2820
  fireEvent = H.fireEvent,
2519
2821
  hasTouch = H.hasTouch,
@@ -2525,30 +2827,197 @@
2525
2827
  wrap = H.wrap,
2526
2828
  swapXY;
2527
2829
 
2830
+ /**
2831
+ *
2832
+ * The scrollbar is a means of panning over the X axis of a chart.
2833
+ *
2834
+ * In [styled mode](http://www.highcharts.com/docs/chart-design-
2835
+ * and-style/style-by-css), all the presentational options for the
2836
+ * scrollbar are replaced by the classes `.highcharts-scrollbar-
2837
+ * thumb`, `.highcharts-scrollbar-arrow`, `.highcharts-scrollbar-
2838
+ * button`, `.highcharts-scrollbar-rifles` and `.highcharts-scrollbar-
2839
+ * track`.
2840
+ *
2841
+ * @product highstock
2842
+ * @optionparent scrollbar
2843
+ */
2528
2844
  var defaultScrollbarOptions = {
2529
2845
  //enabled: true
2846
+
2847
+ /**
2848
+ * The height of the scrollbar. The height also applies to the width
2849
+ * of the scroll arrows so that they are always squares. Defaults to
2850
+ * 20 for touch devices and 14 for mouse devices.
2851
+ *
2852
+ * @type {Number}
2853
+ * @sample {highstock} stock/scrollbar/height/ A 30px scrollbar
2854
+ * @product highstock
2855
+ */
2530
2856
  height: isTouchDevice ? 20 : 14,
2531
2857
  // trackBorderRadius: 0
2858
+
2859
+ /**
2860
+ * The border rounding radius of the bar.
2861
+ *
2862
+ * @type {Number}
2863
+ * @sample {highstock} stock/scrollbar/style/ Scrollbar styling
2864
+ * @default 0
2865
+ * @product highstock
2866
+ */
2532
2867
  barBorderRadius: 0,
2868
+
2869
+ /**
2870
+ * The corner radius of the scrollbar buttons.
2871
+ *
2872
+ * @type {Number}
2873
+ * @sample {highstock} stock/scrollbar/style/ Scrollbar styling
2874
+ * @default 0
2875
+ * @product highstock
2876
+ */
2533
2877
  buttonBorderRadius: 0,
2878
+
2879
+ /**
2880
+ * Whether to redraw the main chart as the scrollbar or the navigator
2881
+ * zoomed window is moved. Defaults to `true` for modern browsers and
2882
+ * `false` for legacy IE browsers as well as mobile devices.
2883
+ *
2884
+ * @type {Boolean}
2885
+ * @since 1.3
2886
+ * @product highstock
2887
+ */
2534
2888
  liveRedraw: svg && !isTouchDevice,
2889
+
2890
+ /**
2891
+ */
2535
2892
  margin: 10,
2893
+
2894
+ /**
2895
+ * The minimum width of the scrollbar.
2896
+ *
2897
+ * @type {Number}
2898
+ * @default 6
2899
+ * @since 1.2.5
2900
+ * @product highstock
2901
+ */
2536
2902
  minWidth: 6,
2537
2903
  //showFull: true,
2538
2904
  //size: null,
2905
+
2906
+ /**
2907
+ */
2539
2908
  step: 0.2,
2909
+
2910
+ /**
2911
+ */
2540
2912
  zIndex: 3,
2541
2913
 
2914
+
2915
+ /**
2916
+ * The background color of the scrollbar itself.
2917
+ *
2918
+ * @type {Color}
2919
+ * @sample {highstock} stock/scrollbar/style/ Scrollbar styling
2920
+ * @default #cccccc
2921
+ * @product highstock
2922
+ */
2542
2923
  barBackgroundColor: '#cccccc',
2924
+
2925
+ /**
2926
+ * The width of the bar's border.
2927
+ *
2928
+ * @type {Number}
2929
+ * @sample {highstock} stock/scrollbar/style/ Scrollbar styling
2930
+ * @default 1
2931
+ * @product highstock
2932
+ */
2543
2933
  barBorderWidth: 1,
2934
+
2935
+ /**
2936
+ * The color of the scrollbar's border.
2937
+ *
2938
+ * @type {Color}
2939
+ * @default #cccccc
2940
+ * @product highstock
2941
+ */
2544
2942
  barBorderColor: '#cccccc',
2943
+
2944
+ /**
2945
+ * The color of the small arrow inside the scrollbar buttons.
2946
+ *
2947
+ * @type {Color}
2948
+ * @sample {highstock} stock/scrollbar/style/ Scrollbar styling
2949
+ * @default #333333
2950
+ * @product highstock
2951
+ */
2545
2952
  buttonArrowColor: '#333333',
2953
+
2954
+ /**
2955
+ * The color of scrollbar buttons.
2956
+ *
2957
+ * @type {Color}
2958
+ * @sample {highstock} stock/scrollbar/style/ Scrollbar styling
2959
+ * @default #e6e6e6
2960
+ * @product highstock
2961
+ */
2546
2962
  buttonBackgroundColor: '#e6e6e6',
2963
+
2964
+ /**
2965
+ * The color of the border of the scrollbar buttons.
2966
+ *
2967
+ * @type {Color}
2968
+ * @sample {highstock} stock/scrollbar/style/ Scrollbar styling
2969
+ * @default #cccccc
2970
+ * @product highstock
2971
+ */
2547
2972
  buttonBorderColor: '#cccccc',
2973
+
2974
+ /**
2975
+ * The border width of the scrollbar buttons.
2976
+ *
2977
+ * @type {Number}
2978
+ * @sample {highstock} stock/scrollbar/style/ Scrollbar styling
2979
+ * @default 1
2980
+ * @product highstock
2981
+ */
2548
2982
  buttonBorderWidth: 1,
2983
+
2984
+ /**
2985
+ * The color of the small rifles in the middle of the scrollbar.
2986
+ *
2987
+ * @type {Color}
2988
+ * @default #333333
2989
+ * @product highstock
2990
+ */
2549
2991
  rifleColor: '#333333',
2992
+
2993
+ /**
2994
+ * The color of the track background.
2995
+ *
2996
+ * @type {Color}
2997
+ * @sample {highstock} stock/scrollbar/style/ Scrollbar styling
2998
+ * @default #f2f2f2
2999
+ * @product highstock
3000
+ */
2550
3001
  trackBackgroundColor: '#f2f2f2',
3002
+
3003
+ /**
3004
+ * The color of the border of the scrollbar track.
3005
+ *
3006
+ * @type {Color}
3007
+ * @sample {highstock} stock/scrollbar/style/ Scrollbar styling
3008
+ * @default #f2f2f2
3009
+ * @product highstock
3010
+ */
2551
3011
  trackBorderColor: '#f2f2f2',
3012
+
3013
+ /**
3014
+ * The width of the border of the scrollbar track.
3015
+ *
3016
+ * @type {Number}
3017
+ * @sample {highstock} stock/scrollbar/style/ Scrollbar styling
3018
+ * @default 1
3019
+ * @product highstock
3020
+ */
2552
3021
  trackBorderWidth: 1
2553
3022
 
2554
3023
  };
@@ -3070,14 +3539,14 @@
3070
3539
  [buttons[buttonsOrder[1]].element, 'click', this.buttonToMaxClick],
3071
3540
  [track, 'click', this.trackClick],
3072
3541
  [bar, 'mousedown', mouseDownHandler],
3073
- [doc, 'mousemove', mouseMoveHandler],
3074
- [doc, 'mouseup', mouseUpHandler]
3542
+ [bar.ownerDocument, 'mousemove', mouseMoveHandler],
3543
+ [bar.ownerDocument, 'mouseup', mouseUpHandler]
3075
3544
  ];
3076
3545
 
3077
3546
  // Touch events
3078
3547
  if (hasTouch) {
3079
3548
  _events.push(
3080
- [bar, 'touchstart', mouseDownHandler], [doc, 'touchmove', mouseMoveHandler], [doc, 'touchend', mouseUpHandler]
3549
+ [bar, 'touchstart', mouseDownHandler], [bar.ownerDocument, 'touchmove', mouseMoveHandler], [bar.ownerDocument, 'touchend', mouseUpHandler]
3081
3550
  );
3082
3551
  }
3083
3552
 
@@ -3164,8 +3633,16 @@
3164
3633
  */
3165
3634
  wrap(Axis.prototype, 'render', function(proceed) {
3166
3635
  var axis = this,
3167
- scrollMin = Math.min(pick(axis.options.min, axis.min), axis.min, axis.dataMin),
3168
- scrollMax = Math.max(pick(axis.options.max, axis.max), axis.max, axis.dataMax),
3636
+ scrollMin = Math.min(
3637
+ pick(axis.options.min, axis.min),
3638
+ axis.min,
3639
+ pick(axis.dataMin, axis.min) // #6930
3640
+ ),
3641
+ scrollMax = Math.max(
3642
+ pick(axis.options.max, axis.max),
3643
+ axis.max,
3644
+ pick(axis.dataMax, axis.max) // #6930
3645
+ ),
3169
3646
  scrollbar = axis.scrollbar,
3170
3647
  titleOffset = axis.titleOffset || 0,
3171
3648
  offsetsIndex,
@@ -3269,13 +3746,13 @@
3269
3746
  defaultOptions = H.defaultOptions,
3270
3747
  defined = H.defined,
3271
3748
  destroyObjectProperties = H.destroyObjectProperties,
3272
- doc = H.doc,
3273
3749
  each = H.each,
3274
3750
  erase = H.erase,
3275
3751
  error = H.error,
3276
3752
  extend = H.extend,
3277
3753
  grep = H.grep,
3278
3754
  hasTouch = H.hasTouch,
3755
+ isArray = H.isArray,
3279
3756
  isNumber = H.isNumber,
3280
3757
  isObject = H.isObject,
3281
3758
  merge = H.merge,
@@ -3307,89 +3784,415 @@
3307
3784
  defaultSeriesType = seriesTypes.areaspline === undefined ? 'line' : 'areaspline';
3308
3785
 
3309
3786
  extend(defaultOptions, {
3787
+
3788
+ /**
3789
+ * The navigator is a small series below the main series, displaying
3790
+ * a view of the entire data set. It provides tools to zoom in and
3791
+ * out on parts of the data as well as panning across the dataset.
3792
+ *
3793
+ * @optionparent navigator
3794
+ * @product highstock
3795
+ */
3310
3796
  navigator: {
3311
3797
  //enabled: true,
3798
+
3799
+ /**
3800
+ * The height of the navigator.
3801
+ *
3802
+ * @type {Number}
3803
+ * @sample {highstock} stock/navigator/height/ A higher navigator
3804
+ * @default 40
3805
+ * @product highstock
3806
+ */
3312
3807
  height: 40,
3808
+
3809
+ /**
3810
+ * The distance from the nearest element, the X axis or X axis labels.
3811
+ *
3812
+ * @type {Number}
3813
+ * @sample {highstock} stock/navigator/margin/ A margin of 2 draws the navigator closer to the X axis labels
3814
+ * @default 25
3815
+ * @product highstock
3816
+ */
3313
3817
  margin: 25,
3818
+
3819
+ /**
3820
+ * Whether the mask should be inside the range marking the zoomed
3821
+ * range, or outside. In Highstock 1.x it was always `false`.
3822
+ *
3823
+ * @type {Boolean}
3824
+ * @sample {highstock} stock/navigator/maskinside-false/ False, mask outside
3825
+ * @default true
3826
+ * @since 2.0
3827
+ * @product highstock
3828
+ */
3314
3829
  maskInside: true,
3315
3830
 
3831
+
3832
+ /**
3833
+ * Options for the handles for dragging the zoomed area. Available
3834
+ * options are `backgroundColor` (defaults to `#ebe7e8`) and `borderColor`
3835
+ * (defaults to `#b2b1b6`).
3836
+ *
3837
+ * @type {Object}
3838
+ * @sample {highstock} stock/navigator/handles/ Colored handles
3839
+ * @sample {highstock} stock/navigator/handles/ Colored handles
3840
+ * @product highstock
3841
+ */
3316
3842
  handles: {
3843
+
3844
+ /**
3845
+ * The fill for the handle.
3846
+ *
3847
+ * @type {Color}
3848
+ * @default #f2f2f2
3849
+ * @product highstock
3850
+ */
3317
3851
  backgroundColor: '#f2f2f2',
3852
+
3853
+ /**
3854
+ * The stroke for the handle border and the stripes inside.
3855
+ *
3856
+ * @type {Color}
3857
+ * @default #999999
3858
+ * @product highstock
3859
+ */
3318
3860
  borderColor: '#999999'
3319
3861
  },
3862
+
3863
+ /**
3864
+ * The color of the mask covering the areas of the navigator series
3865
+ * that are currently not visible in the main series. The default
3866
+ * color is bluish with an opacity of 0.3 to see the series below.
3867
+ *
3868
+ * @type {Color}
3869
+ * @see In [styled mode](http://www.highcharts.com/docs/chart-design-and-
3870
+ * style/style-by-css), the mask is styled with the `.highcharts-navigator-
3871
+ * mask` and `.highcharts-navigator-mask-inside` classes.
3872
+ * @sample {highstock} stock/navigator/maskfill/ Blue, semi transparent mask
3873
+ * @default rgba(102,133,194,0.3)
3874
+ * @product highstock
3875
+ */
3320
3876
  maskFill: color('#6685c2').setOpacity(0.3).get(),
3877
+
3878
+ /**
3879
+ * The color of the line marking the currently zoomed area in the
3880
+ * navigator.
3881
+ *
3882
+ * @type {Color}
3883
+ * @sample {highstock} stock/navigator/outline/ 2px blue outline
3884
+ * @default #cccccc
3885
+ * @product highstock
3886
+ */
3321
3887
  outlineColor: '#cccccc',
3888
+
3889
+ /**
3890
+ * The width of the line marking the currently zoomed area in the
3891
+ * navigator.
3892
+ *
3893
+ * @type {Number}
3894
+ * @see In [styled mode](http://www.highcharts.com/docs/chart-design-and-
3895
+ * style/style-by-css), the outline stroke width is set with the `.
3896
+ * highcharts-navigator-outline` class.
3897
+ * @sample {highstock} stock/navigator/outline/ 2px blue outline
3898
+ * @default 2
3899
+ * @product highstock
3900
+ */
3322
3901
  outlineWidth: 1,
3323
3902
 
3903
+
3904
+ /**
3905
+ * Options for the navigator series. Available options are the same
3906
+ * as any series, documented at [plotOptions](#plotOptions.series)
3907
+ * and [series](#series).
3908
+ *
3909
+ * Unless data is explicitly defined on navigator.series, the data
3910
+ * is borrowed from the first series in the chart.
3911
+ *
3912
+ * Default series options for the navigator series are:
3913
+ *
3914
+ * <pre>series: {
3915
+ * type: 'areaspline',
3916
+ * color: '#4572A7',
3917
+ * fillOpacity: 0.05,
3918
+ * dataGrouping: {
3919
+ * smoothed: true
3920
+ * },
3921
+ * lineWidth: 1,
3922
+ * marker: {
3923
+ * enabled: false
3924
+ * }
3925
+ * }</pre>
3926
+ *
3927
+ * @type {Object}
3928
+ * @see In [styled mode](http://www.highcharts.com/docs/chart-design-and-
3929
+ * style/style-by-css), the navigator series is styled with the `.
3930
+ * highcharts-navigator-series` class.
3931
+ * @sample {highstock} stock/navigator/series-data/ Using a separate data set for the navigator
3932
+ * @sample {highstock} stock/navigator/series/ A green navigator series
3933
+ * @product highstock
3934
+ */
3324
3935
  series: {
3936
+
3937
+ /**
3938
+ */
3325
3939
  type: defaultSeriesType,
3326
3940
 
3941
+
3942
+ /**
3943
+ */
3327
3944
  color: '#335cad',
3945
+
3946
+ /**
3947
+ */
3328
3948
  fillOpacity: 0.05,
3949
+
3950
+ /**
3951
+ */
3329
3952
  lineWidth: 1,
3330
3953
 
3954
+
3955
+ /**
3956
+ */
3331
3957
  compare: null,
3958
+
3959
+ /**
3960
+ */
3332
3961
  dataGrouping: {
3962
+
3963
+ /**
3964
+ */
3333
3965
  approximation: 'average',
3966
+
3967
+ /**
3968
+ */
3334
3969
  enabled: true,
3970
+
3971
+ /**
3972
+ */
3335
3973
  groupPixelWidth: 2,
3974
+
3975
+ /**
3976
+ */
3336
3977
  smoothed: true,
3978
+
3979
+ /**
3980
+ */
3337
3981
  units: units
3338
3982
  },
3983
+
3984
+ /**
3985
+ */
3339
3986
  dataLabels: {
3987
+
3988
+ /**
3989
+ */
3340
3990
  enabled: false,
3991
+
3992
+ /**
3993
+ */
3341
3994
  zIndex: 2 // #1839
3342
3995
  },
3996
+
3997
+ /**
3998
+ */
3343
3999
  id: 'highcharts-navigator-series',
4000
+
4001
+ /**
4002
+ */
3344
4003
  className: 'highcharts-navigator-series',
4004
+
4005
+ /**
4006
+ */
3345
4007
  lineColor: null, // Allow color setting while disallowing default candlestick setting (#4602)
4008
+
4009
+ /**
4010
+ */
3346
4011
  marker: {
4012
+
4013
+ /**
4014
+ */
3347
4015
  enabled: false
3348
4016
  },
4017
+
4018
+ /**
4019
+ */
3349
4020
  pointRange: 0,
4021
+
4022
+ /**
4023
+ */
3350
4024
  shadow: false,
4025
+
4026
+ /**
4027
+ */
3351
4028
  threshold: null
3352
4029
  },
3353
4030
  //top: undefined,
3354
4031
  //opposite: undefined,
4032
+
4033
+ /**
4034
+ * Options for the navigator X axis. Available options are the same
4035
+ * as any X axis, documented at [xAxis](#xAxis). Default series options
4036
+ * for the navigator xAxis are:
4037
+ *
4038
+ * <pre>xAxis: {
4039
+ * tickWidth: 0,
4040
+ * lineWidth: 0,
4041
+ * gridLineWidth: 1,
4042
+ * tickPixelInterval: 200,
4043
+ * labels: {
4044
+ * align: 'left',
4045
+ * style: {
4046
+ * color: '#888'
4047
+ * },
4048
+ * x: 3,
4049
+ * y: -4
4050
+ * }
4051
+ * }</pre>
4052
+ *
4053
+ * @type {Object}
4054
+ * @product highstock
4055
+ */
3355
4056
  xAxis: {
4057
+
4058
+ /**
4059
+ */
3356
4060
  className: 'highcharts-navigator-xaxis',
4061
+
4062
+ /**
4063
+ */
3357
4064
  tickLength: 0,
3358
4065
 
4066
+
4067
+ /**
4068
+ */
3359
4069
  lineWidth: 0,
4070
+
4071
+ /**
4072
+ */
3360
4073
  gridLineColor: '#e6e6e6',
4074
+
4075
+ /**
4076
+ */
3361
4077
  gridLineWidth: 1,
3362
4078
 
4079
+
4080
+ /**
4081
+ */
3363
4082
  tickPixelInterval: 200,
4083
+
4084
+ /**
4085
+ */
3364
4086
  labels: {
4087
+
4088
+ /**
4089
+ */
3365
4090
  align: 'left',
3366
4091
 
4092
+
4093
+ /**
4094
+ */
3367
4095
  style: {
4096
+
4097
+ /**
4098
+ */
3368
4099
  color: '#999999'
3369
4100
  },
3370
4101
 
4102
+
4103
+ /**
4104
+ */
3371
4105
  x: 3,
4106
+
4107
+ /**
4108
+ */
3372
4109
  y: -4
3373
4110
  },
4111
+
4112
+ /**
4113
+ */
3374
4114
  crosshair: false
3375
4115
  },
4116
+
4117
+ /**
4118
+ * Options for the navigator Y axis. Available options are the same
4119
+ * as any y axis, documented at [yAxis](#yAxis). Default series options
4120
+ * for the navigator yAxis are:
4121
+ *
4122
+ * <pre>yAxis: {
4123
+ * gridLineWidth: 0,
4124
+ * startOnTick: false,
4125
+ * endOnTick: false,
4126
+ * minPadding: 0.1,
4127
+ * maxPadding: 0.1,
4128
+ * labels: {
4129
+ * enabled: false
4130
+ * },
4131
+ * title: {
4132
+ * text: null
4133
+ * },
4134
+ * tickWidth: 0
4135
+ * }</pre>
4136
+ *
4137
+ * @type {Object}
4138
+ * @product highstock
4139
+ */
3376
4140
  yAxis: {
4141
+
4142
+ /**
4143
+ */
3377
4144
  className: 'highcharts-navigator-yaxis',
3378
4145
 
4146
+
4147
+ /**
4148
+ */
3379
4149
  gridLineWidth: 0,
3380
4150
 
4151
+
4152
+ /**
4153
+ */
3381
4154
  startOnTick: false,
4155
+
4156
+ /**
4157
+ */
3382
4158
  endOnTick: false,
4159
+
4160
+ /**
4161
+ */
3383
4162
  minPadding: 0.1,
4163
+
4164
+ /**
4165
+ */
3384
4166
  maxPadding: 0.1,
4167
+
4168
+ /**
4169
+ */
3385
4170
  labels: {
4171
+
4172
+ /**
4173
+ */
3386
4174
  enabled: false
3387
4175
  },
4176
+
4177
+ /**
4178
+ */
3388
4179
  crosshair: false,
4180
+
4181
+ /**
4182
+ */
3389
4183
  title: {
4184
+
4185
+ /**
4186
+ */
3390
4187
  text: null
3391
4188
  },
4189
+
4190
+ /**
4191
+ */
3392
4192
  tickLength: 0,
4193
+
4194
+ /**
4195
+ */
3393
4196
  tickWidth: 0
3394
4197
  }
3395
4198
  }
@@ -3673,6 +4476,13 @@
3673
4476
  * @param {Object} options Options to merge in when updating navigator
3674
4477
  */
3675
4478
  update: function(options) {
4479
+ // Remove references to old navigator series in base series
4480
+ each(this.series || [], function(series) {
4481
+ if (series.baseSeries) {
4482
+ delete series.baseSeries.navigatorSeries;
4483
+ }
4484
+ });
4485
+ // Destroy and rebuild navigator
3676
4486
  this.destroy();
3677
4487
  var chartOptions = this.chart.options;
3678
4488
  merge(true, chartOptions.navigator, this.options, options);
@@ -3853,14 +4663,14 @@
3853
4663
  // because Navigator.grabbedSomething flags are stored in mousedown events:
3854
4664
  eventsToUnbind.push(
3855
4665
  addEvent(container, 'mousemove', mouseMoveHandler),
3856
- addEvent(doc, 'mouseup', mouseUpHandler)
4666
+ addEvent(container.ownerDocument, 'mouseup', mouseUpHandler)
3857
4667
  );
3858
4668
 
3859
4669
  // Touch events
3860
4670
  if (hasTouch) {
3861
4671
  eventsToUnbind.push(
3862
4672
  addEvent(container, 'touchmove', mouseMoveHandler),
3863
- addEvent(doc, 'touchend', mouseUpHandler)
4673
+ addEvent(container.ownerDocument, 'touchend', mouseUpHandler)
3864
4674
  );
3865
4675
  eventsToUnbind.concat(navigator.getPartsEvents('touchstart'));
3866
4676
  }
@@ -4143,10 +4953,12 @@
4143
4953
  */
4144
4954
  removeBaseSeriesEvents: function() {
4145
4955
  var baseSeries = this.baseSeries || [];
4146
- if (this.navigatorEnabled && baseSeries[0] && this.navigatorOptions.adaptToUpdatedData !== false) {
4147
- each(baseSeries, function(series) {
4148
- removeEvent(series, 'updatedData', this.updatedDataHandler);
4149
- }, this);
4956
+ if (this.navigatorEnabled && baseSeries[0]) {
4957
+ if (this.navigatorOptions.adaptToUpdatedData !== false) {
4958
+ each(baseSeries, function(series) {
4959
+ removeEvent(series, 'updatedData', this.updatedDataHandler);
4960
+ }, this);
4961
+ }
4150
4962
 
4151
4963
  // We only listen for extremes-events on the first baseSeries
4152
4964
  if (baseSeries[0].xAxis) {
@@ -4240,7 +5052,7 @@
4240
5052
 
4241
5053
  // If we have a base series, initialize the navigator series
4242
5054
  if (baseSeries || navigatorOptions.series.data) {
4243
- navigator.addBaseSeries();
5055
+ navigator.updateNavigatorSeries();
4244
5056
 
4245
5057
  // If not, set up an event to listen for added series
4246
5058
  } else if (chart.series.length === 0) {
@@ -4360,55 +5172,55 @@
4360
5172
  },
4361
5173
 
4362
5174
  /**
4363
- * Set the base series. With a bit of modification we should be able to make
4364
- * this an API method to be called from the outside
4365
- * @param {Object} baseSeriesOptions - series options for a navigator
5175
+ * Set the base series and update the navigator series from this. With a bit
5176
+ * of modification we should be able to make this an API method to be called
5177
+ * from the outside
5178
+ * @param {Object} baseSeriesOptions - additional series options for a navigator
4366
5179
  */
4367
5180
  setBaseSeries: function(baseSeriesOptions) {
4368
5181
  var chart = this.chart,
4369
- baseSeries;
5182
+ baseSeries = this.baseSeries = [];
4370
5183
 
4371
5184
  baseSeriesOptions = baseSeriesOptions || chart.options && chart.options.navigator.baseSeries || 0;
4372
5185
 
4373
- // If we're resetting, remove the existing series
4374
- if (this.series) {
4375
- this.removeBaseSeriesEvents();
4376
- each(this.series, function(s) {
4377
- s.destroy();
4378
- });
4379
- }
4380
-
4381
- baseSeries = this.baseSeries = [];
4382
-
4383
- // Iterate through series and add the ones that should be shown in navigator
5186
+ // Iterate through series and add the ones that should be shown in navigator.
4384
5187
  each(chart.series || [], function(series, i) {
4385
- if (series.options.showInNavigator || (i === baseSeriesOptions || series.options.id === baseSeriesOptions) &&
4386
- series.options.showInNavigator !== false) {
5188
+ if (!series.options.isInternal && // Don't include existing nav series
5189
+ (
5190
+ series.options.showInNavigator ||
5191
+ (
5192
+ i === baseSeriesOptions ||
5193
+ series.options.id === baseSeriesOptions
5194
+ ) &&
5195
+ series.options.showInNavigator !== false
5196
+ )
5197
+ ) {
4387
5198
  baseSeries.push(series);
4388
5199
  }
4389
5200
  });
4390
5201
 
4391
5202
  // When run after render, this.xAxis already exists
4392
5203
  if (this.xAxis && !this.xAxis.fake) {
4393
- this.addBaseSeries();
5204
+ this.updateNavigatorSeries();
4394
5205
  }
4395
5206
  },
4396
5207
 
4397
5208
  /*
4398
- * Add base series to the navigator.
5209
+ * Update series in the navigator from baseSeries, adding new if does not
5210
+ * exist.
4399
5211
  */
4400
- addBaseSeries: function() {
5212
+ updateNavigatorSeries: function() {
4401
5213
  var navigator = this,
4402
5214
  chart = navigator.chart,
4403
- navigatorSeries = navigator.series = [],
4404
5215
  baseSeries = navigator.baseSeries,
4405
5216
  baseOptions,
4406
5217
  mergedNavSeriesOptions,
4407
- chartNavigatorOptions = navigator.navigatorOptions.series,
5218
+ chartNavigatorSeriesOptions = navigator.navigatorOptions.series,
4408
5219
  baseNavigatorOptions,
4409
5220
  navSeriesMixin = {
4410
5221
  enableMouseTracking: false,
4411
5222
  index: null, // #6162
5223
+ linkedTo: null, // #6734
4412
5224
  group: 'nav', // for columns
4413
5225
  padXAxis: false,
4414
5226
  xAxis: 'navigator-x-axis',
@@ -4417,32 +5229,108 @@
4417
5229
  stacking: false, // #4823
4418
5230
  isInternal: true,
4419
5231
  visible: true
4420
- };
5232
+ },
5233
+ // Remove navigator series that are no longer in the baseSeries
5234
+ navigatorSeries = navigator.series = H.grep(
5235
+ navigator.series || [],
5236
+ function(navSeries) {
5237
+ var base = navSeries.baseSeries;
5238
+ if (H.inArray(base, baseSeries) < 0) { // Not in array
5239
+ // If there is still a base series connected to this series,
5240
+ // remove event handler and reference.
5241
+ if (base) {
5242
+ removeEvent(
5243
+ base,
5244
+ 'updatedData',
5245
+ navigator.updatedDataHandler
5246
+ );
5247
+ delete base.navigatorSeries;
5248
+ }
5249
+ // Kill the nav series
5250
+ navSeries.destroy();
5251
+ return false;
5252
+ }
5253
+ return true;
5254
+ }
5255
+ );
4421
5256
 
4422
5257
  // Go through each base series and merge the options to create new series
4423
- if (baseSeries) {
5258
+ if (baseSeries && baseSeries.length) {
4424
5259
  each(baseSeries, function(base, i) {
5260
+ var linkedNavSeries = base.navigatorSeries,
5261
+ userNavOptions = !isArray(chartNavigatorSeriesOptions) ?
5262
+ chartNavigatorSeriesOptions : {};
5263
+
5264
+ // Don't update if the series exists in nav and we have disabled
5265
+ // adaptToUpdatedData.
5266
+ if (
5267
+ linkedNavSeries &&
5268
+ navigator.navigatorOptions.adaptToUpdatedData === false
5269
+ ) {
5270
+ return;
5271
+ }
5272
+
4425
5273
  navSeriesMixin.name = 'Navigator ' + (i + 1);
4426
5274
 
4427
5275
  baseOptions = base.options || {};
4428
5276
  baseNavigatorOptions = baseOptions.navigatorOptions || {};
4429
- mergedNavSeriesOptions = merge(baseOptions, navSeriesMixin, chartNavigatorOptions, baseNavigatorOptions);
5277
+ mergedNavSeriesOptions = merge(
5278
+ baseOptions,
5279
+ navSeriesMixin,
5280
+ userNavOptions,
5281
+ baseNavigatorOptions
5282
+ );
4430
5283
 
4431
5284
  // Merge data separately. Do a slice to avoid mutating the navigator options from base series (#4923).
4432
- var navigatorSeriesData = baseNavigatorOptions.data || chartNavigatorOptions.data;
5285
+ var navigatorSeriesData = baseNavigatorOptions.data || userNavOptions.data;
4433
5286
  navigator.hasNavigatorData = navigator.hasNavigatorData || !!navigatorSeriesData;
4434
5287
  mergedNavSeriesOptions.data = navigatorSeriesData || baseOptions.data && baseOptions.data.slice(0);
4435
5288
 
4436
- // Add the series
4437
- base.navigatorSeries = chart.initSeries(mergedNavSeriesOptions);
4438
- navigatorSeries.push(base.navigatorSeries);
5289
+ // Update or add the series
5290
+ if (linkedNavSeries) {
5291
+ linkedNavSeries.update(mergedNavSeriesOptions);
5292
+ } else {
5293
+ base.navigatorSeries = chart.initSeries(mergedNavSeriesOptions);
5294
+ base.navigatorSeries.baseSeries = base; // Store ref
5295
+ navigatorSeries.push(base.navigatorSeries);
5296
+ }
5297
+ });
5298
+ }
5299
+
5300
+ // If user has defined data (and no base series) or explicitly defined
5301
+ // navigator.series as an array, we create these series on top of any
5302
+ // base series.
5303
+ if (
5304
+ chartNavigatorSeriesOptions.data &&
5305
+ !(baseSeries && baseSeries.length) ||
5306
+ isArray(chartNavigatorSeriesOptions)
5307
+ ) {
5308
+ navigator.hasNavigatorData = false;
5309
+ // Allow navigator.series to be an array
5310
+ chartNavigatorSeriesOptions = H.splat(chartNavigatorSeriesOptions);
5311
+ each(chartNavigatorSeriesOptions, function(userSeriesOptions, i) {
5312
+ mergedNavSeriesOptions = merge({
5313
+ // Since we don't have a base series to pull color from,
5314
+ // try to fake it by using color from series with same
5315
+ // index. Otherwise pull from the colors array. We need
5316
+ // an explicit color as otherwise updates will increment
5317
+ // color counter and we'll get a new color for each
5318
+ // update of the nav series.
5319
+ color: chart.series[i] &&
5320
+ !chart.series[i].options.isInternal &&
5321
+ chart.series[i].color ||
5322
+ chart.options.colors[i] ||
5323
+ chart.options.colors[0]
5324
+ },
5325
+ userSeriesOptions,
5326
+ navSeriesMixin
5327
+ );
5328
+ mergedNavSeriesOptions.data = userSeriesOptions.data;
5329
+ if (mergedNavSeriesOptions.data) {
5330
+ navigator.hasNavigatorData = true;
5331
+ navigatorSeries.push(chart.initSeries(mergedNavSeriesOptions));
5332
+ }
4439
5333
  });
4440
- } else {
4441
- // No base series, build from mixin and chart wide options
4442
- mergedNavSeriesOptions = merge(chartNavigatorOptions, navSeriesMixin);
4443
- mergedNavSeriesOptions.data = chartNavigatorOptions.data;
4444
- navigator.hasNavigatorData = !!mergedNavSeriesOptions.data;
4445
- navigatorSeries.push(chart.initSeries(mergedNavSeriesOptions));
4446
5334
  }
4447
5335
 
4448
5336
  this.addBaseSeriesEvents();
@@ -4456,29 +5344,44 @@
4456
5344
  var navigator = this,
4457
5345
  baseSeries = navigator.baseSeries || [];
4458
5346
 
4459
- // Bind modified extremes event to first base's xAxis only. In event of > 1 base-xAxes, the navigator will ignore those.
5347
+ // Bind modified extremes event to first base's xAxis only.
5348
+ // In event of > 1 base-xAxes, the navigator will ignore those.
5349
+ // Adding this multiple times to the same axis is no problem, as
5350
+ // duplicates should be discarded by the browser.
4460
5351
  if (baseSeries[0] && baseSeries[0].xAxis) {
4461
5352
  addEvent(baseSeries[0].xAxis, 'foundExtremes', this.modifyBaseAxisExtremes);
4462
5353
  }
4463
5354
 
4464
- if (this.navigatorOptions.adaptToUpdatedData !== false) {
4465
- // Respond to updated data in the base series.
4466
- // Abort if lazy-loading data from the server.
4467
- each(baseSeries, function(base) {
5355
+ each(baseSeries, function(base) {
5356
+ // Link base series show/hide to navigator series visibility
5357
+ addEvent(base, 'show', function() {
5358
+ if (this.navigatorSeries) {
5359
+ this.navigatorSeries.show();
5360
+ }
5361
+ });
5362
+ addEvent(base, 'hide', function() {
5363
+ if (this.navigatorSeries) {
5364
+ this.navigatorSeries.hide();
5365
+ }
5366
+ });
5367
+
5368
+ // Respond to updated data in the base series, unless explicitily
5369
+ // not adapting to data changes.
5370
+ if (this.navigatorOptions.adaptToUpdatedData !== false) {
4468
5371
  if (base.xAxis) {
4469
5372
  addEvent(base, 'updatedData', this.updatedDataHandler);
4470
5373
  }
5374
+ }
4471
5375
 
4472
- // Handle series removal
4473
- addEvent(base, 'remove', function() {
4474
- if (this.navigatorSeries) {
4475
- erase(navigator.series, this.navigatorSeries);
4476
- this.navigatorSeries.remove(false);
4477
- delete this.navigatorSeries;
4478
- }
4479
- });
4480
- }, this);
4481
- }
5376
+ // Handle series removal
5377
+ addEvent(base, 'remove', function() {
5378
+ if (this.navigatorSeries) {
5379
+ erase(navigator.series, this.navigatorSeries);
5380
+ this.navigatorSeries.remove(false);
5381
+ delete this.navigatorSeries;
5382
+ }
5383
+ });
5384
+ }, this);
4482
5385
  },
4483
5386
 
4484
5387
  /**
@@ -4567,13 +5470,16 @@
4567
5470
  baseSeries = this,
4568
5471
  navigatorSeries = this.navigatorSeries;
4569
5472
 
4570
- // Detect whether the zoomed area should stick to the minimum or maximum. If the current
4571
- // axis minimum falls outside the new updated dataset, we must adjust.
4572
- navigator.stickToMin = isNumber(baseSeries.xAxis.min) && (baseSeries.xAxis.min <= baseSeries.xData[0]);
4573
5473
  // If the scrollbar is scrolled all the way to the right, keep right as new data
4574
5474
  // comes in.
4575
5475
  navigator.stickToMax = Math.round(navigator.zoomedMax) >= Math.round(navigator.size);
4576
5476
 
5477
+ // Detect whether the zoomed area should stick to the minimum or maximum. If the current
5478
+ // axis minimum falls outside the new updated dataset, we must adjust.
5479
+ navigator.stickToMin = isNumber(baseSeries.xAxis.min) &&
5480
+ (baseSeries.xAxis.min <= baseSeries.xData[0]) &&
5481
+ (!this.chart.fixedRange || !navigator.stickToMax);
5482
+
4577
5483
  // Set the navigator series data to the new data of the base series
4578
5484
  if (navigatorSeries && !navigator.hasNavigatorData) {
4579
5485
  navigatorSeries.options.pointStart = baseSeries.xData[0];
@@ -4775,7 +5681,7 @@
4775
5681
  // Handle updating series
4776
5682
  wrap(Series.prototype, 'update', function(proceed, newOptions, redraw) {
4777
5683
  proceed.call(this, newOptions, false);
4778
- if (this.chart.navigator) {
5684
+ if (this.chart.navigator && !this.options.isInternal) {
4779
5685
  this.chart.navigator.setBaseSeries();
4780
5686
  }
4781
5687
  if (pick(redraw, true)) {
@@ -4831,20 +5737,88 @@
4831
5737
  * Start Range Selector code *
4832
5738
  *****************************************************************************/
4833
5739
  extend(defaultOptions, {
5740
+
5741
+ /**
5742
+ * The range selector is a tool for selecting ranges to display within
5743
+ * the chart. It provides buttons to select preconfigured ranges in
5744
+ * the chart, like 1 day, 1 week, 1 month etc. It also provides input
5745
+ * boxes where min and max dates can be manually input.
5746
+ *
5747
+ * @optionparent rangeSelector
5748
+ * @product highstock
5749
+ */
4834
5750
  rangeSelector: {
4835
5751
  // allButtonsEnabled: false,
4836
5752
  // enabled: true,
4837
5753
  // buttons: {Object}
4838
5754
  // buttonSpacing: 0,
5755
+
5756
+ /**
5757
+ * A collection of attributes for the buttons. The object takes SVG
5758
+ * attributes like `fill`, `stroke`, `stroke-width`, as well as `style`,
5759
+ * a collection of CSS properties for the text.
5760
+ *
5761
+ * The object can also be extended with states, so you can set presentational
5762
+ * options for `hover`, `select` or `disabled` button states.
5763
+ *
5764
+ * CSS styles for the text label.
5765
+ *
5766
+ * In [styled mode](http://www.highcharts.com/docs/chart-design-and-
5767
+ * style/style-by-css), the buttons are styled by the `.highcharts-
5768
+ * range-selector-buttons .highcharts-button` rule with its different
5769
+ * states.
5770
+ *
5771
+ * @type {Object}
5772
+ * @sample {highstock} stock/rangeselector/styling/ Styling the buttons and inputs
5773
+ * @product highstock
5774
+ */
4839
5775
  buttonTheme: {
5776
+
5777
+ /**
5778
+ */
4840
5779
  'stroke-width': 0,
5780
+
5781
+ /**
5782
+ */
4841
5783
  width: 28,
5784
+
5785
+ /**
5786
+ */
4842
5787
  height: 18,
5788
+
5789
+ /**
5790
+ */
4843
5791
  padding: 2,
5792
+
5793
+ /**
5794
+ */
4844
5795
  zIndex: 7 // #484, #852
4845
5796
  },
5797
+
5798
+ /**
5799
+ * The height of the range selector, used to reserve space for buttons
5800
+ * and input.
5801
+ *
5802
+ * @type {Number}
5803
+ * @default 35
5804
+ * @since 2.1.9
5805
+ * @product highstock
5806
+ */
4846
5807
  height: 35, // reserved space for buttons and input
5808
+
5809
+ /**
5810
+ * Positioning for the input boxes. Allowed properties are `align`,
5811
+ * `verticalAlign`, `x` and `y`.
5812
+ *
5813
+ * @type {Object}
5814
+ * @default { align: "right" }
5815
+ * @since 1.2.5
5816
+ * @product highstock
5817
+ */
4847
5818
  inputPosition: {
5819
+
5820
+ /**
5821
+ */
4848
5822
  align: 'right'
4849
5823
  },
4850
5824
  // inputDateFormat: '%b %e, %Y',
@@ -4853,17 +5827,79 @@
4853
5827
  // selected: undefined,
4854
5828
 
4855
5829
  // inputStyle: {},
5830
+
5831
+ /**
5832
+ * CSS styles for the labels - the Zoom, From and To texts.
5833
+ *
5834
+ * In [styled mode](http://www.highcharts.com/docs/chart-design-and-
5835
+ * style/style-by-css), the labels are styled by the `.highcharts-
5836
+ * range-label` class.
5837
+ *
5838
+ * @type {CSSObject}
5839
+ * @sample {highstock} stock/rangeselector/styling/ Styling the buttons and inputs
5840
+ * @product highstock
5841
+ */
4856
5842
  labelStyle: {
5843
+
5844
+ /**
5845
+ */
4857
5846
  color: '#666666'
4858
5847
  }
4859
5848
 
4860
5849
  }
4861
5850
  });
4862
- defaultOptions.lang = merge(defaultOptions.lang, {
4863
- rangeSelectorZoom: 'Zoom',
4864
- rangeSelectorFrom: 'From',
4865
- rangeSelectorTo: 'To'
4866
- });
5851
+
5852
+ defaultOptions.lang = merge(
5853
+ defaultOptions.lang,
5854
+ /**
5855
+ * Language object. The language object is global and it can't be set
5856
+ * on each chart initiation. Instead, use `Highcharts.setOptions` to
5857
+ * set it before any chart is initialized.
5858
+ *
5859
+ * <pre>Highcharts.setOptions({
5860
+ * lang: {
5861
+ * months: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',
5862
+ * 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],
5863
+ *
5864
+ * weekdays: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi',
5865
+ * 'Samedi']
5866
+ * }
5867
+ * });</pre>
5868
+ *
5869
+ * @optionparent lang
5870
+ * @product highstock
5871
+ */
5872
+ {
5873
+
5874
+ /**
5875
+ * The text for the label for the range selector buttons.
5876
+ *
5877
+ * @type {String}
5878
+ * @default Zoom
5879
+ * @product highstock
5880
+ */
5881
+ rangeSelectorZoom: 'Zoom',
5882
+
5883
+ /**
5884
+ * The text for the label for the "from" input box in the range
5885
+ * selector.
5886
+ *
5887
+ * @type {String}
5888
+ * @default From
5889
+ * @product highstock
5890
+ */
5891
+ rangeSelectorFrom: 'From',
5892
+
5893
+ /**
5894
+ * The text for the label for the "to" input box in the range selector.
5895
+ *
5896
+ * @type {String}
5897
+ * @default To
5898
+ * @product highstock
5899
+ */
5900
+ rangeSelectorTo: 'To'
5901
+ }
5902
+ );
4867
5903
 
4868
5904
  /**
4869
5905
  * The range selector.
@@ -5814,7 +6850,7 @@
5814
6850
  * @param {Function} callback
5815
6851
  * A function to execute when the chart object is finished loading and
5816
6852
  * rendering. In most cases the chart is built in one thread, but in
5817
- * Internet Explorer version 8 or less the chart is sometimes initiated
6853
+ * Internet Explorer version 8 or less the chart is sometimes initialized
5818
6854
  * before the document is ready, and in these cases the chart object
5819
6855
  * will not be finished synchronously. As a consequence, code that
5820
6856
  * relies on the newly built Chart object should always run in the
@@ -5985,7 +7021,7 @@
5985
7021
  return 'right';
5986
7022
  }
5987
7023
  }
5988
- return proceed.call(this, [].slice.call(arguments, 1));
7024
+ return proceed.apply(this, [].slice.call(arguments, 1));
5989
7025
  });
5990
7026
 
5991
7027
  // Clear axis from label panes (#6071)
@@ -5997,7 +7033,7 @@
5997
7033
  delete chart._labelPanes[key];
5998
7034
  }
5999
7035
 
6000
- return proceed.call(this, Array.prototype.slice.call(arguments, 1));
7036
+ return proceed.apply(this, Array.prototype.slice.call(arguments, 1));
6001
7037
  });
6002
7038
 
6003
7039
  // Override getPlotLinePath to allow for multipane charts