highstock-rails 2.1.10 → 5.0.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/css/highcharts.css +760 -0
  3. data/app/assets/javascripts/highstock.js +511 -419
  4. data/app/assets/javascripts/highstock/highstock.js +472 -0
  5. data/app/assets/javascripts/highstock/highstock.js.map +8 -0
  6. data/app/assets/javascripts/highstock/highstock.src.js +28809 -0
  7. data/app/assets/javascripts/highstock/modules/accessibility.js +48 -0
  8. data/app/assets/javascripts/highstock/modules/accessibility.js.map +8 -0
  9. data/app/assets/javascripts/highstock/modules/accessibility.src.js +1131 -0
  10. data/app/assets/javascripts/highstock/modules/annotations.js +14 -0
  11. data/app/assets/javascripts/highstock/modules/annotations.js.map +8 -0
  12. data/app/assets/javascripts/highstock/modules/annotations.src.js +407 -0
  13. data/app/assets/javascripts/highstock/modules/boost-canvas.js +23 -0
  14. data/app/assets/javascripts/highstock/modules/boost-canvas.js.map +8 -0
  15. data/app/assets/javascripts/highstock/modules/boost-canvas.src.js +771 -0
  16. data/app/assets/javascripts/highstock/modules/boost.js +51 -12
  17. data/app/assets/javascripts/highstock/modules/boost.js.map +8 -0
  18. data/app/assets/javascripts/highstock/modules/boost.src.js +2580 -492
  19. data/app/assets/javascripts/highstock/modules/broken-axis.js.map +8 -0
  20. data/app/assets/javascripts/highstock/modules/canvasrenderer.experimental.js.map +8 -0
  21. data/app/assets/javascripts/highstock/modules/data.js +19 -19
  22. data/app/assets/javascripts/highstock/modules/data.js.map +8 -0
  23. data/app/assets/javascripts/highstock/modules/data.src.js +974 -950
  24. data/app/assets/javascripts/highstock/modules/drilldown.js +25 -17
  25. data/app/assets/javascripts/highstock/modules/drilldown.js.map +8 -0
  26. data/app/assets/javascripts/highstock/modules/drilldown.src.js +790 -709
  27. data/app/assets/javascripts/highstock/modules/export-data.js +17 -0
  28. data/app/assets/javascripts/highstock/modules/export-data.js.map +8 -0
  29. data/app/assets/javascripts/highstock/modules/export-data.src.js +417 -0
  30. data/app/assets/javascripts/highstock/modules/exporting.js +21 -18
  31. data/app/assets/javascripts/highstock/modules/exporting.js.map +8 -0
  32. data/app/assets/javascripts/highstock/modules/exporting.src.js +1013 -768
  33. data/app/assets/javascripts/highstock/modules/funnel.js +6 -7
  34. data/app/assets/javascripts/highstock/modules/funnel.js.map +8 -0
  35. data/app/assets/javascripts/highstock/modules/funnel.src.js +284 -308
  36. data/app/assets/javascripts/highstock/modules/gantt.js +24 -0
  37. data/app/assets/javascripts/highstock/modules/gantt.js.map +8 -0
  38. data/app/assets/javascripts/highstock/modules/gantt.src.js +793 -0
  39. data/app/assets/javascripts/highstock/modules/grid-axis.js +19 -0
  40. data/app/assets/javascripts/highstock/modules/grid-axis.js.map +8 -0
  41. data/app/assets/javascripts/highstock/modules/grid-axis.src.js +545 -0
  42. data/app/assets/javascripts/highstock/modules/heatmap.js +20 -18
  43. data/app/assets/javascripts/highstock/modules/heatmap.js.map +8 -0
  44. data/app/assets/javascripts/highstock/modules/heatmap.src.js +738 -633
  45. data/app/assets/javascripts/highstock/modules/map-parser.js.map +8 -0
  46. data/app/assets/javascripts/highstock/modules/map.js.map +8 -0
  47. data/app/assets/javascripts/highstock/modules/no-data-to-display.js +5 -5
  48. data/app/assets/javascripts/highstock/modules/no-data-to-display.js.map +8 -0
  49. data/app/assets/javascripts/highstock/modules/no-data-to-display.src.js +140 -133
  50. data/app/assets/javascripts/highstock/modules/offline-exporting.js +12 -7
  51. data/app/assets/javascripts/highstock/modules/offline-exporting.js.map +8 -0
  52. data/app/assets/javascripts/highstock/modules/offline-exporting.src.js +543 -270
  53. data/app/assets/javascripts/highstock/modules/overlapping-datalabels.js +10 -0
  54. data/app/assets/javascripts/highstock/modules/overlapping-datalabels.js.map +8 -0
  55. data/app/assets/javascripts/highstock/modules/overlapping-datalabels.src.js +187 -0
  56. data/app/assets/javascripts/highstock/modules/series-label.js +19 -0
  57. data/app/assets/javascripts/highstock/modules/series-label.js.map +8 -0
  58. data/app/assets/javascripts/highstock/modules/series-label.src.js +606 -0
  59. data/app/assets/javascripts/highstock/modules/solid-gauge.js +9 -8
  60. data/app/assets/javascripts/highstock/modules/solid-gauge.js.map +8 -0
  61. data/app/assets/javascripts/highstock/modules/solid-gauge.src.js +334 -266
  62. data/app/assets/javascripts/highstock/modules/static-scale.js +12 -0
  63. data/app/assets/javascripts/highstock/modules/static-scale.js.map +8 -0
  64. data/app/assets/javascripts/highstock/modules/static-scale.src.js +64 -0
  65. data/app/assets/javascripts/highstock/modules/stock.js +123 -0
  66. data/app/assets/javascripts/highstock/modules/stock.js.map +8 -0
  67. data/app/assets/javascripts/highstock/modules/stock.src.js +6247 -0
  68. data/app/assets/javascripts/highstock/modules/treemap.js +22 -23
  69. data/app/assets/javascripts/highstock/modules/treemap.js.map +8 -0
  70. data/app/assets/javascripts/highstock/modules/treemap.src.js +884 -859
  71. data/app/assets/javascripts/highstock/modules/xrange-series.js +15 -0
  72. data/app/assets/javascripts/highstock/modules/xrange-series.js.map +8 -0
  73. data/app/assets/javascripts/highstock/modules/xrange-series.src.js +258 -0
  74. data/app/assets/javascripts/highstock/themes/dark-blue.js +307 -244
  75. data/app/assets/javascripts/highstock/themes/dark-green.js +303 -244
  76. data/app/assets/javascripts/highstock/themes/dark-unica.js +231 -201
  77. data/app/assets/javascripts/highstock/themes/gray.js +314 -245
  78. data/app/assets/javascripts/highstock/themes/grid-light.js +91 -66
  79. data/app/assets/javascripts/highstock/themes/grid.js +124 -96
  80. data/app/assets/javascripts/highstock/themes/sand-signika.js +119 -94
  81. data/app/assets/javascripts/highstock/themes/skies.js +108 -85
  82. data/lib/highstock/rails/version.rb +1 -1
  83. metadata +54 -11
  84. data/app/assets/javascripts/highstock/adapters/standalone-framework.js +0 -18
  85. data/app/assets/javascripts/highstock/adapters/standalone-framework.src.js +0 -635
  86. data/app/assets/javascripts/highstock/highcharts-3d.js +0 -48
  87. data/app/assets/javascripts/highstock/highcharts-3d.src.js +0 -1711
  88. data/app/assets/javascripts/highstock/highcharts-more.js +0 -55
  89. data/app/assets/javascripts/highstock/highstock-all.js +0 -637
  90. data/app/assets/javascripts/highstock/modules/canvas-tools.js +0 -133
  91. data/app/assets/javascripts/highstock/modules/canvas-tools.src.js +0 -3114
@@ -0,0 +1,8 @@
1
+ {
2
+ "version":3,
3
+ "file":"",
4
+ "lineCount":23,
5
+ "mappings":"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",
6
+ "sources":["Input_0"],
7
+ "names":["factory","module","exports","Highcharts","H","eachAsync","arr","fn","finalFunc","chunkSize","i","CHUNK_SIZE","threshold","proceed","length","setTimeout","isChartSeriesBoosting","chart","series","options","boost","seriesThreshold","seriesBoostThreshold","doc","win","document","noop","Color","Series","seriesTypes","each","extend","addEvent","fireEvent","isNumber","merge","pick","wrap","destroyLoadingDiv","initCanvasBoost","H.initCanvasBoost","heatmap","prototype","ctx","getContext","points","point","plotY","undefined","isNaN","y","shapeArgs","pointAttr","pointAttribs","fillStyle","fill","fillRect","x","width","height","canvasToSVG","showLoading","directTouch","pointRange","allowDG","hasExtremes","checkX","xAxis","yAxis","data","boostThreshold","Number","MAX_VALUE","min","max","destroyGraphics","graphic","destroy","prop","chartWidth","chartHeight","targetGroup","group","target","swapXY","a","b","c","d","call","seriesGroup","canvas","createElement","image","renderer","add","inverted","boostClipRect","clipRect","plotLeft","plotTop","plotWidth","clip","attr","style","href","toDataURL","cvsLineTo","clientX","lineTo","renderCanvas","timeRendering","xData","processedXData","yData","processedYData","rawData","xExtremes","getExtremes","xMin","xMax","yExtremes","yMin","yMax","pointTaken","lastClientX","sampling","r","marker","radius","cvsDrawPoint","lineWidth","cvsMarker","cvsMarkerSquare","cvsMarkerCircle","strokeBatch","cvsStrokeBatch","enableMouseTracking","lastPoint","yBottom","getThreshold","hasThreshold","translatedThreshold","doFill","isRange","pointArrayMap","join","isStacked","stacking","cropStart","loadingOptions","loading","requireSorting","wasNull","connectNulls","useRaw","minVal","maxVal","minI","maxI","kdIndex","sdata","fillColor","fillOpacity","setOpacity","color","get","stroke","strokeStyle","drawPoint","beginPath","lineJoin","scroller","className","top","moveTo","addKDPoint","len","push","plotX","graph","plotGroup","visible","zIndex","markerGroup","buildKDTree","labelStyle","backgroundColor","padding","borderRadius","opacity","clearTimeout","console","time","low","isNextInside","isPrevInside","nx","px","chartDestroyed","index","isYInside","slice","stackY","isNull","Math","round","toPixels","loadingDiv","loadingShown","timeEnd","transition","parentNode","removeChild","loadingSpan","stickyTracking","forExport","type","apply","Array","arguments","scatter","seriesTypes.scatter.prototype.cvsMarkerCircle","arc","PI","seriesTypes.scatter.prototype.cvsMarkerSquare","rect","bubble","seriesTypes.bubble.prototype.cvsMarkerCircle","radii","area","column","Chart","callbacks","clear","clearRect"]
8
+ }
@@ -0,0 +1,771 @@
1
+ /**
2
+ * @license Highcharts JS v5.0.11 (2017-05-04)
3
+ * Boost module
4
+ *
5
+ * (c) 2010-2017 Highsoft AS
6
+ * Author: Torstein Honsi
7
+ *
8
+ * License: www.highcharts.com/license
9
+ */
10
+ 'use strict';
11
+ (function(factory) {
12
+ if (typeof module === 'object' && module.exports) {
13
+ module.exports = factory;
14
+ } else {
15
+ factory(Highcharts);
16
+ }
17
+ }(function(Highcharts) {
18
+ (function(H) {
19
+ /**
20
+ * License: www.highcharts.com/license
21
+ * Author: Torstein Honsi, Christer Vasseng
22
+ *
23
+ * This is an experimental Highcharts module that draws long data series on a canvas
24
+ * in order to increase performance of the initial load time and tooltip responsiveness.
25
+ *
26
+ * Compatible with HTML5 canvas compatible browsers (not IE < 9).
27
+ *
28
+ *
29
+ *
30
+ * Development plan
31
+ * - Column range.
32
+ * - Heatmap. Modify the heatmap-canvas demo so that it uses this module.
33
+ * - Treemap.
34
+ * - Check how it works with Highstock and data grouping. Currently it only works when navigator.adaptToUpdatedData
35
+ * is false. It is also recommended to set scrollbar.liveRedraw to false.
36
+ * - Check inverted charts.
37
+ * - Check reversed axes.
38
+ * - Chart callback should be async after last series is drawn. (But not necessarily, we don't do
39
+ that with initial series animation).
40
+ * - Cache full-size image so we don't have to redraw on hide/show and zoom up. But k-d-tree still
41
+ * needs to be built.
42
+ * - Test IE9 and IE10.
43
+ * - Stacking is not perhaps not correct since it doesn't use the translation given in
44
+ * the translate method. If this gets to complicated, a possible way out would be to
45
+ * have a simplified renderCanvas method that simply draws the areaPath on a canvas.
46
+ *
47
+ * If this module is taken in as part of the core
48
+ * - All the loading logic should be merged with core. Update styles in the core.
49
+ * - Most of the method wraps should probably be added directly in parent methods.
50
+ *
51
+ * Notes for boost mode
52
+ * - Area lines are not drawn
53
+ * - Point markers are not drawn on line-type series
54
+ * - Lines are not drawn on scatter charts
55
+ * - Zones and negativeColor don't work
56
+ * - Initial point colors aren't rendered
57
+ * - Columns are always one pixel wide. Don't set the threshold too low.
58
+ *
59
+ * Optimizing tips for users
60
+ * - For scatter plots, use a marker.radius of 1 or less. It results in a rectangle being drawn, which is
61
+ * considerably faster than a circle.
62
+ * - Set extremes (min, max) explicitly on the axes in order for Highcharts to avoid computing extremes.
63
+ * - Set enableMouseTracking to false on the series to improve total rendering time.
64
+ * - The default threshold is set based on one series. If you have multiple, dense series, the combined
65
+ * number of points drawn gets higher, and you may want to set the threshold lower in order to
66
+ * use optimizations.
67
+ */
68
+
69
+
70
+ var win = H.win,
71
+ doc = win.document,
72
+ noop = function() {},
73
+ Color = H.Color,
74
+ Series = H.Series,
75
+ seriesTypes = H.seriesTypes,
76
+ each = H.each,
77
+ extend = H.extend,
78
+ addEvent = H.addEvent,
79
+ fireEvent = H.fireEvent,
80
+ isNumber = H.isNumber,
81
+ merge = H.merge,
82
+ pick = H.pick,
83
+ wrap = H.wrap,
84
+ CHUNK_SIZE = 50000,
85
+ destroyLoadingDiv;
86
+
87
+ function eachAsync(arr, fn, finalFunc, chunkSize, i) {
88
+ i = i || 0;
89
+ chunkSize = chunkSize || CHUNK_SIZE;
90
+
91
+ var threshold = i + chunkSize,
92
+ proceed = true;
93
+
94
+ while (proceed && i < threshold && i < arr.length) {
95
+ proceed = fn(arr[i], i);
96
+ i = i + 1;
97
+ }
98
+ if (proceed) {
99
+ if (i < arr.length) {
100
+ setTimeout(function() {
101
+ eachAsync(arr, fn, finalFunc, chunkSize, i);
102
+ });
103
+ } else if (finalFunc) {
104
+ finalFunc();
105
+ }
106
+ }
107
+ }
108
+
109
+ /*
110
+ * Returns true if the chart is in series boost mode
111
+ * @param chart {Highchart.Chart} - the chart to check
112
+ * @returns {Boolean} - true if the chart is in series boost mode
113
+ */
114
+ function isChartSeriesBoosting(chart) {
115
+ var threshold = (chart.options.boost ? chart.options.boost.seriesThreshold : 0) ||
116
+ chart.options.chart.seriesBoostThreshold ||
117
+ 10;
118
+
119
+ return chart.series.length >= threshold;
120
+ }
121
+
122
+ H.initCanvasBoost = function() {
123
+
124
+ if (H.seriesTypes.heatmap) {
125
+ H.wrap(H.seriesTypes.heatmap.prototype, 'drawPoints', function() {
126
+ var ctx = this.getContext();
127
+ if (ctx) {
128
+
129
+ // draw the columns
130
+ each(this.points, function(point) {
131
+ var plotY = point.plotY,
132
+ shapeArgs,
133
+ pointAttr;
134
+
135
+ if (plotY !== undefined && !isNaN(plotY) && point.y !== null) {
136
+ shapeArgs = point.shapeArgs;
137
+
138
+ pointAttr = (point.pointAttr && point.pointAttr['']) || point.series.pointAttribs(point);
139
+
140
+ ctx.fillStyle = pointAttr.fill;
141
+ ctx.fillRect(shapeArgs.x, shapeArgs.y, shapeArgs.width, shapeArgs.height);
142
+ }
143
+ });
144
+
145
+ this.canvasToSVG();
146
+
147
+ } else {
148
+ this.chart.showLoading('Your browser doesn\'t support HTML5 canvas, <br>please use a modern browser');
149
+
150
+ // Uncomment this to provide low-level (slow) support in oldIE. It will cause script errors on
151
+ // charts with more than a few thousand points.
152
+ // arguments[0].call(this);
153
+ }
154
+ });
155
+ }
156
+
157
+
158
+ /**
159
+ * Override a bunch of methods the same way. If the number of points is below the threshold,
160
+ * run the original method. If not, check for a canvas version or do nothing.
161
+ */
162
+ // each(['translate', 'generatePoints', 'drawTracker', 'drawPoints', 'render'], function (method) {
163
+ // function branch(proceed) {
164
+ // var letItPass = this.options.stacking && (method === 'translate' || method === 'generatePoints');
165
+ // if (((this.processedXData || this.options.data).length < (this.options.boostThreshold || Number.MAX_VALUE) ||
166
+ // letItPass) || !isChartSeriesBoosting(this.chart)) {
167
+
168
+ // // Clear image
169
+ // if (method === 'render' && this.image) {
170
+ // this.image.attr({ href: '' });
171
+ // this.animate = null; // We're zooming in, don't run animation
172
+ // }
173
+
174
+ // proceed.call(this);
175
+
176
+ // // If a canvas version of the method exists, like renderCanvas(), run
177
+ // } else if (this[method + 'Canvas']) {
178
+
179
+ // this[method + 'Canvas']();
180
+ // }
181
+ // }
182
+ // wrap(Series.prototype, method, branch);
183
+
184
+ // // A special case for some types - its translate method is already wrapped
185
+ // if (method === 'translate') {
186
+ // each(['arearange', 'bubble', 'column'], function (type) {
187
+ // if (seriesTypes[type]) {
188
+ // wrap(seriesTypes[type].prototype, method, branch);
189
+ // }
190
+ // });
191
+ // }
192
+ // });
193
+
194
+ H.extend(Series.prototype, {
195
+ directTouch: false,
196
+ pointRange: 0,
197
+ allowDG: false, // No data grouping, let boost handle large data
198
+ hasExtremes: function(checkX) {
199
+ var options = this.options,
200
+ data = options.data,
201
+ xAxis = this.xAxis && this.xAxis.options,
202
+ yAxis = this.yAxis && this.yAxis.options;
203
+ return data.length > (options.boostThreshold || Number.MAX_VALUE) && isNumber(yAxis.min) && isNumber(yAxis.max) &&
204
+ (!checkX || (isNumber(xAxis.min) && isNumber(xAxis.max)));
205
+ },
206
+
207
+ /**
208
+ * If implemented in the core, parts of this can probably be shared with other similar
209
+ * methods in Highcharts.
210
+ */
211
+ destroyGraphics: function() {
212
+ var series = this,
213
+ points = this.points,
214
+ point,
215
+ i;
216
+
217
+ if (points) {
218
+ for (i = 0; i < points.length; i = i + 1) {
219
+ point = points[i];
220
+ if (point && point.graphic) {
221
+ point.graphic = point.graphic.destroy();
222
+ }
223
+ }
224
+ }
225
+
226
+ each(['graph', 'area', 'tracker'], function(prop) {
227
+ if (series[prop]) {
228
+ series[prop] = series[prop].destroy();
229
+ }
230
+ });
231
+ },
232
+
233
+ /**
234
+ * Create a hidden canvas to draw the graph on. The contents is later copied over
235
+ * to an SVG image element.
236
+ */
237
+ getContext: function() {
238
+ var chart = this.chart,
239
+ width = chart.chartWidth,
240
+ height = chart.chartHeight,
241
+ targetGroup = this.group,
242
+ target = this,
243
+ ctx,
244
+ swapXY = function(proceed, x, y, a, b, c, d) {
245
+ proceed.call(this, y, x, a, b, c, d);
246
+ };
247
+
248
+ if (isChartSeriesBoosting(chart)) {
249
+ target = chart;
250
+ targetGroup = chart.seriesGroup;
251
+ }
252
+
253
+ ctx = target.ctx;
254
+
255
+ if (!target.canvas) {
256
+ target.canvas = doc.createElement('canvas');
257
+
258
+ target.image = chart.renderer.image(
259
+ '',
260
+ 0,
261
+ 0,
262
+ width,
263
+ height
264
+ ).add(targetGroup);
265
+
266
+ target.ctx = ctx = target.canvas.getContext('2d');
267
+
268
+ if (chart.inverted) {
269
+ each(['moveTo', 'lineTo', 'rect', 'arc'], function(fn) {
270
+ wrap(ctx, fn, swapXY);
271
+ });
272
+ }
273
+
274
+ target.boostClipRect = chart.renderer.clipRect(
275
+ chart.plotLeft,
276
+ chart.plotTop,
277
+ chart.plotWidth,
278
+ chart.chartHeight
279
+ );
280
+
281
+ target.image.clip(target.boostClipRect);
282
+
283
+ } else if (!(target instanceof H.Chart)) {
284
+ //ctx.clearRect(0, 0, width, height);
285
+ }
286
+
287
+ if (target.canvas.width !== width) {
288
+ target.canvas.width = width;
289
+ }
290
+
291
+ if (target.canvas.height !== height) {
292
+ target.canvas.height = height;
293
+ }
294
+
295
+ target.image.attr({
296
+ x: 0,
297
+ y: 0,
298
+ width: width,
299
+ height: height,
300
+ style: 'pointer-events: none'
301
+ });
302
+
303
+ target.boostClipRect.attr({
304
+ x: 0,
305
+ y: 0,
306
+ width: chart.plotWidth,
307
+ height: chart.chartHeight
308
+ });
309
+
310
+ return ctx;
311
+ },
312
+
313
+ /**
314
+ * Draw the canvas image inside an SVG image
315
+ */
316
+ canvasToSVG: function() {
317
+ if (!isChartSeriesBoosting(this.chart)) {
318
+ this.image.attr({
319
+ href: this.canvas.toDataURL('image/png')
320
+ });
321
+ } else if (this.image) {
322
+ this.image.attr({
323
+ href: ''
324
+ });
325
+ }
326
+ },
327
+
328
+ cvsLineTo: function(ctx, clientX, plotY) {
329
+ ctx.lineTo(clientX, plotY);
330
+ },
331
+
332
+ renderCanvas: function() {
333
+ var series = this,
334
+ options = series.options,
335
+ chart = series.chart,
336
+ xAxis = this.xAxis,
337
+ yAxis = this.yAxis,
338
+ activeBoostSettings = chart.options.boost || {},
339
+ boostSettings = {
340
+ timeRendering: activeBoostSettings.timeRendering || false,
341
+ timeSeriesProcessing: activeBoostSettings.timeSeriesProcessing || false,
342
+ timeSetup: activeBoostSettings.timeSetup || false
343
+ },
344
+ ctx,
345
+ c = 0,
346
+ xData = series.processedXData,
347
+ yData = series.processedYData,
348
+ rawData = options.data,
349
+ xExtremes = xAxis.getExtremes(),
350
+ xMin = xExtremes.min,
351
+ xMax = xExtremes.max,
352
+ yExtremes = yAxis.getExtremes(),
353
+ yMin = yExtremes.min,
354
+ yMax = yExtremes.max,
355
+ pointTaken = {},
356
+ lastClientX,
357
+ sampling = !!series.sampling,
358
+ points,
359
+ r = options.marker && options.marker.radius,
360
+ cvsDrawPoint = this.cvsDrawPoint,
361
+ cvsLineTo = options.lineWidth ? this.cvsLineTo : false,
362
+ cvsMarker = r && r <= 1 ?
363
+ this.cvsMarkerSquare :
364
+ this.cvsMarkerCircle,
365
+ strokeBatch = this.cvsStrokeBatch || 1000,
366
+ enableMouseTracking = options.enableMouseTracking !== false,
367
+ lastPoint,
368
+ threshold = options.threshold,
369
+ yBottom = yAxis.getThreshold(threshold),
370
+ hasThreshold = isNumber(threshold),
371
+ translatedThreshold = yBottom,
372
+ doFill = this.fill,
373
+ isRange = series.pointArrayMap && series.pointArrayMap.join(',') === 'low,high',
374
+ isStacked = !!options.stacking,
375
+ cropStart = series.cropStart || 0,
376
+ loadingOptions = chart.options.loading,
377
+ requireSorting = series.requireSorting,
378
+ wasNull,
379
+ connectNulls = options.connectNulls,
380
+ useRaw = !xData,
381
+ minVal,
382
+ maxVal,
383
+ minI,
384
+ maxI,
385
+ kdIndex,
386
+ sdata = isStacked ? series.data : (xData || rawData),
387
+ fillColor = series.fillOpacity ?
388
+ new Color(series.color).setOpacity(pick(options.fillOpacity, 0.75)).get() :
389
+ series.color,
390
+
391
+ stroke = function() {
392
+ if (doFill) {
393
+ ctx.fillStyle = fillColor;
394
+ ctx.fill();
395
+ } else {
396
+ ctx.strokeStyle = series.color;
397
+ ctx.lineWidth = options.lineWidth;
398
+ ctx.stroke();
399
+ }
400
+ },
401
+
402
+ drawPoint = function(clientX, plotY, yBottom, i) {
403
+ if (c === 0) {
404
+ ctx.beginPath();
405
+
406
+ if (cvsLineTo) {
407
+ ctx.lineJoin = 'round';
408
+ }
409
+ }
410
+
411
+ if (chart.scroller && series.options.className === 'highcharts-navigator-series') {
412
+ plotY += chart.scroller.top;
413
+ if (yBottom) {
414
+ yBottom += chart.scroller.top;
415
+ }
416
+ } else {
417
+ plotY += chart.plotTop;
418
+ }
419
+
420
+ clientX += chart.plotLeft;
421
+
422
+ if (wasNull) {
423
+ ctx.moveTo(clientX, plotY);
424
+ } else {
425
+ if (cvsDrawPoint) {
426
+ cvsDrawPoint(ctx, clientX, plotY, yBottom, lastPoint);
427
+ } else if (cvsLineTo) {
428
+ cvsLineTo(ctx, clientX, plotY);
429
+ } else if (cvsMarker) {
430
+ cvsMarker.call(series, ctx, clientX, plotY, r, i);
431
+ }
432
+ }
433
+
434
+ // We need to stroke the line for every 1000 pixels. It will crash the browser
435
+ // memory use if we stroke too infrequently.
436
+ c = c + 1;
437
+ if (c === strokeBatch) {
438
+ stroke();
439
+ c = 0;
440
+ }
441
+
442
+ // Area charts need to keep track of the last point
443
+ lastPoint = {
444
+ clientX: clientX,
445
+ plotY: plotY,
446
+ yBottom: yBottom
447
+ };
448
+ },
449
+
450
+ addKDPoint = function(clientX, plotY, i) {
451
+ // Avoid more string concatination than required
452
+ kdIndex = clientX + ',' + plotY;
453
+
454
+ // The k-d tree requires series points. Reduce the amount of points, since the time to build the
455
+ // tree increases exponentially.
456
+ if (enableMouseTracking && !pointTaken[kdIndex]) {
457
+ pointTaken[kdIndex] = true;
458
+
459
+ if (chart.inverted) {
460
+ clientX = xAxis.len - clientX;
461
+ plotY = yAxis.len - plotY;
462
+ }
463
+
464
+ points.push({
465
+ clientX: clientX,
466
+ plotX: clientX,
467
+ plotY: plotY,
468
+ i: cropStart + i
469
+ });
470
+ }
471
+ };
472
+
473
+ // If we are zooming out from SVG mode, destroy the graphics
474
+ if (this.points || this.graph) {
475
+ this.destroyGraphics();
476
+ }
477
+
478
+ // The group
479
+ series.plotGroup(
480
+ 'group',
481
+ 'series',
482
+ series.visible ? 'visible' : 'hidden',
483
+ options.zIndex,
484
+ chart.seriesGroup
485
+ );
486
+
487
+ series.markerGroup = series.group;
488
+ // addEvent(series, 'destroy', function () {
489
+ // series.markerGroup = null;
490
+ // });
491
+
492
+ points = this.points = [];
493
+ ctx = this.getContext();
494
+ series.buildKDTree = noop; // Do not start building while drawing
495
+
496
+ // Display a loading indicator
497
+ if (rawData.length > 99999) {
498
+ chart.options.loading = merge(loadingOptions, {
499
+ labelStyle: {
500
+ backgroundColor: H.color('#ffffff').setOpacity(0.75).get(),
501
+ padding: '1em',
502
+ borderRadius: '0.5em'
503
+ },
504
+ style: {
505
+ backgroundColor: 'none',
506
+ opacity: 1
507
+ }
508
+ });
509
+ clearTimeout(destroyLoadingDiv);
510
+ chart.showLoading('Drawing...');
511
+ chart.options.loading = loadingOptions; // reset
512
+ }
513
+
514
+ if (boostSettings.timeRendering) {
515
+ console.time('canvas rendering'); // eslint-disable-line no-console
516
+ }
517
+
518
+ // Loop over the points
519
+ eachAsync(sdata, function(d, i) {
520
+ var x,
521
+ y,
522
+ clientX,
523
+ plotY,
524
+ isNull,
525
+ low,
526
+ isNextInside = false,
527
+ isPrevInside = false,
528
+ nx = false,
529
+ px = false,
530
+ chartDestroyed = typeof chart.index === 'undefined',
531
+ isYInside = true;
532
+
533
+ if (!chartDestroyed) {
534
+ if (useRaw) {
535
+ x = d[0];
536
+ y = d[1];
537
+
538
+ if (sdata[i + 1]) {
539
+ nx = sdata[i + 1][0];
540
+ }
541
+
542
+ if (sdata[i - 1]) {
543
+ px = sdata[i - 1][0];
544
+ }
545
+ } else {
546
+ x = d;
547
+ y = yData[i];
548
+
549
+ if (sdata[i + 1]) {
550
+ nx = sdata[i + 1];
551
+ }
552
+
553
+ if (sdata[i - 1]) {
554
+ px = sdata[i - 1];
555
+ }
556
+ }
557
+
558
+ if (nx && nx >= xMin && nx <= xMax) {
559
+ isNextInside = true;
560
+ }
561
+
562
+ if (px && px >= xMin && px <= xMax) {
563
+ isPrevInside = true;
564
+ }
565
+
566
+ // Resolve low and high for range series
567
+ if (isRange) {
568
+ if (useRaw) {
569
+ y = d.slice(1, 3);
570
+ }
571
+ low = y[0];
572
+ y = y[1];
573
+ } else if (isStacked) {
574
+ x = d.x;
575
+ y = d.stackY;
576
+ low = y - d.y;
577
+ }
578
+
579
+ isNull = y === null;
580
+
581
+ // Optimize for scatter zooming
582
+ if (!requireSorting) {
583
+ isYInside = y >= yMin && y <= yMax;
584
+ }
585
+
586
+ if (!isNull &&
587
+ (
588
+ (x >= xMin && x <= xMax && isYInside) ||
589
+ (isNextInside || isPrevInside)
590
+ )) {
591
+
592
+
593
+ clientX = Math.round(xAxis.toPixels(x, true));
594
+
595
+ if (sampling) {
596
+ if (minI === undefined || clientX === lastClientX) {
597
+ if (!isRange) {
598
+ low = y;
599
+ }
600
+ if (maxI === undefined || y > maxVal) {
601
+ maxVal = y;
602
+ maxI = i;
603
+ }
604
+ if (minI === undefined || low < minVal) {
605
+ minVal = low;
606
+ minI = i;
607
+ }
608
+
609
+ }
610
+ if (clientX !== lastClientX) { // Add points and reset
611
+ if (minI !== undefined) { // then maxI is also a number
612
+ plotY = yAxis.toPixels(maxVal, true);
613
+ yBottom = yAxis.toPixels(minVal, true);
614
+ drawPoint(
615
+ clientX,
616
+ hasThreshold ? Math.min(plotY, translatedThreshold) : plotY,
617
+ hasThreshold ? Math.max(yBottom, translatedThreshold) : yBottom,
618
+ i
619
+ );
620
+ addKDPoint(clientX, plotY, maxI);
621
+ if (yBottom !== plotY) {
622
+ addKDPoint(clientX, yBottom, minI);
623
+ }
624
+ }
625
+
626
+ minI = maxI = undefined;
627
+ lastClientX = clientX;
628
+ }
629
+ } else {
630
+ plotY = Math.round(yAxis.toPixels(y, true));
631
+ drawPoint(clientX, plotY, yBottom, i);
632
+ addKDPoint(clientX, plotY, i);
633
+ }
634
+ }
635
+ wasNull = isNull && !connectNulls;
636
+
637
+ if (i % CHUNK_SIZE === 0) {
638
+ series.canvasToSVG();
639
+ }
640
+ }
641
+
642
+ return !chartDestroyed;
643
+ }, function() {
644
+ var loadingDiv = chart.loadingDiv,
645
+ loadingShown = chart.loadingShown;
646
+ stroke();
647
+ series.canvasToSVG();
648
+
649
+ if (boostSettings.timeRendering) {
650
+ console.timeEnd('canvas rendering'); // eslint-disable-line no-console
651
+ }
652
+
653
+ fireEvent(series, 'renderedCanvas');
654
+
655
+ // Do not use chart.hideLoading, as it runs JS animation and will be blocked by buildKDTree.
656
+ // CSS animation looks good, but then it must be deleted in timeout. If we add the module to core,
657
+ // change hideLoading so we can skip this block.
658
+ if (loadingShown) {
659
+ extend(loadingDiv.style, {
660
+ transition: 'opacity 250ms',
661
+ opacity: 0
662
+ });
663
+ chart.loadingShown = false;
664
+ destroyLoadingDiv = setTimeout(function() {
665
+ if (loadingDiv.parentNode) { // In exporting it is falsy
666
+ loadingDiv.parentNode.removeChild(loadingDiv);
667
+ }
668
+ chart.loadingDiv = chart.loadingSpan = null;
669
+ }, 250);
670
+ }
671
+
672
+ // Pass tests in Pointer.
673
+ // Replace this with a single property, and replace when zooming in
674
+ // below boostThreshold.
675
+ series.directTouch = false;
676
+ series.options.stickyTracking = true;
677
+
678
+ delete series.buildKDTree; // Go back to prototype, ready to build
679
+ series.buildKDTree();
680
+
681
+ // Don't do async on export, the exportChart, getSVGForExport and getSVG methods are not chained for it.
682
+ }, chart.renderer.forExport ? Number.MAX_VALUE : undefined);
683
+ }
684
+ });
685
+
686
+ wrap(Series.prototype, 'setData', function(proceed) {
687
+ if (!this.hasExtremes || !this.hasExtremes(true) || this.type === 'heatmap') {
688
+ proceed.apply(this, Array.prototype.slice.call(arguments, 1));
689
+ }
690
+ });
691
+
692
+ wrap(Series.prototype, 'processData', function(proceed) {
693
+ if (!this.hasExtremes || !this.hasExtremes(true) || this.type === 'heatmap') {
694
+ proceed.apply(this, Array.prototype.slice.call(arguments, 1));
695
+ }
696
+ });
697
+
698
+ seriesTypes.scatter.prototype.cvsMarkerCircle = function(ctx, clientX, plotY, r) {
699
+ ctx.moveTo(clientX, plotY);
700
+ ctx.arc(clientX, plotY, r, 0, 2 * Math.PI, false);
701
+ };
702
+
703
+ // Rect is twice as fast as arc, should be used for small markers
704
+ seriesTypes.scatter.prototype.cvsMarkerSquare = function(ctx, clientX, plotY, r) {
705
+ ctx.rect(clientX - r, plotY - r, r * 2, r * 2);
706
+ };
707
+ seriesTypes.scatter.prototype.fill = true;
708
+
709
+ if (seriesTypes.bubble) {
710
+ seriesTypes.bubble.prototype.cvsMarkerCircle = function(ctx, clientX, plotY, r, i) {
711
+ ctx.moveTo(clientX, plotY);
712
+ ctx.arc(clientX, plotY, this.radii && this.radii[i], 0, 2 * Math.PI, false);
713
+ };
714
+ seriesTypes.bubble.prototype.cvsStrokeBatch = 1;
715
+ }
716
+
717
+ extend(seriesTypes.area.prototype, {
718
+ cvsDrawPoint: function(ctx, clientX, plotY, yBottom, lastPoint) {
719
+ if (lastPoint && clientX !== lastPoint.clientX) {
720
+ ctx.moveTo(lastPoint.clientX, lastPoint.yBottom);
721
+ ctx.lineTo(lastPoint.clientX, lastPoint.plotY);
722
+ ctx.lineTo(clientX, plotY);
723
+ ctx.lineTo(clientX, yBottom);
724
+ }
725
+ },
726
+ fill: true,
727
+ fillOpacity: true,
728
+ sampling: true
729
+ });
730
+
731
+ extend(seriesTypes.column.prototype, {
732
+ cvsDrawPoint: function(ctx, clientX, plotY, yBottom) {
733
+ ctx.rect(clientX - 1, plotY, 1, yBottom - plotY);
734
+ },
735
+ fill: true,
736
+ sampling: true
737
+ });
738
+
739
+ H.Chart.prototype.callbacks.push(function(chart) {
740
+ function canvasToSVG() {
741
+ if (chart.image && chart.canvas) {
742
+ chart.image.attr({
743
+ href: chart.canvas.toDataURL('image/png')
744
+ });
745
+ }
746
+ }
747
+
748
+ function clear() {
749
+ if (chart.image) {
750
+ chart.image.attr({
751
+ href: ''
752
+ });
753
+ }
754
+
755
+ if (chart.canvas) {
756
+ chart.canvas.getContext('2d').clearRect(
757
+ 0,
758
+ 0,
759
+ chart.canvas.width,
760
+ chart.canvas.height
761
+ );
762
+ }
763
+ }
764
+
765
+ addEvent(chart, 'predraw', clear);
766
+ addEvent(chart, 'render', canvasToSVG);
767
+ });
768
+ };
769
+
770
+ }(Highcharts));
771
+ }));