highcharts-rails 5.0.12 → 5.0.13

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.
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