highcharts-rails 6.0.1 → 6.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.markdown +16 -0
- data/app/assets/javascripts/highcharts.js +188 -51
- data/app/assets/javascripts/highcharts/highcharts-3d.js +3 -4
- data/app/assets/javascripts/highcharts/highcharts-more.js +21 -5
- data/app/assets/javascripts/highcharts/modules/accessibility.js +4 -2
- data/app/assets/javascripts/highcharts/modules/annotations.js +2 -2
- data/app/assets/javascripts/highcharts/modules/boost-canvas.js +50 -195
- data/app/assets/javascripts/highcharts/modules/boost.js +202 -135
- data/app/assets/javascripts/highcharts/modules/broken-axis.js +1 -1
- data/app/assets/javascripts/highcharts/modules/bullet.js +1 -1
- data/app/assets/javascripts/highcharts/modules/data.js +88 -59
- data/app/assets/javascripts/highcharts/modules/drag-panes.js +1 -1
- data/app/assets/javascripts/highcharts/modules/drilldown.js +25 -2
- data/app/assets/javascripts/highcharts/modules/export-data.js +6 -2
- data/app/assets/javascripts/highcharts/modules/exporting.js +1 -1
- data/app/assets/javascripts/highcharts/modules/funnel.js +1 -1
- data/app/assets/javascripts/highcharts/modules/gantt.js +2 -2
- data/app/assets/javascripts/highcharts/modules/grid-axis.js +1 -1
- data/app/assets/javascripts/highcharts/modules/heatmap.js +826 -820
- data/app/assets/javascripts/highcharts/modules/histogram-bellcurve.js +1 -1
- data/app/assets/javascripts/highcharts/modules/item-series.js +1 -1
- data/app/assets/javascripts/highcharts/modules/no-data-to-display.js +1 -1
- data/app/assets/javascripts/highcharts/modules/offline-exporting.js +2 -2
- data/app/assets/javascripts/highcharts/modules/oldie.js +16 -2
- data/app/assets/javascripts/highcharts/modules/overlapping-datalabels.js +1 -1
- data/app/assets/javascripts/highcharts/modules/parallel-coordinates.js +1 -1
- data/app/assets/javascripts/highcharts/modules/pareto.js +1 -1
- data/app/assets/javascripts/highcharts/modules/sankey.js +39 -9
- data/app/assets/javascripts/highcharts/modules/series-label.js +8 -3
- data/app/assets/javascripts/highcharts/modules/solid-gauge.js +1 -1
- data/app/assets/javascripts/highcharts/modules/static-scale.js +6 -2
- data/app/assets/javascripts/highcharts/modules/stock.js +19 -47
- data/app/assets/javascripts/highcharts/modules/streamgraph.js +1 -1
- data/app/assets/javascripts/highcharts/modules/sunburst.js +40 -15
- data/app/assets/javascripts/highcharts/modules/tilemap.js +7 -6
- data/app/assets/javascripts/highcharts/modules/treemap.js +13 -3
- data/app/assets/javascripts/highcharts/modules/variable-pie.js +1 -1
- data/app/assets/javascripts/highcharts/modules/variwide.js +1 -1
- data/app/assets/javascripts/highcharts/modules/vector.js +1 -1
- data/app/assets/javascripts/highcharts/modules/windbarb.js +1 -1
- data/app/assets/javascripts/highcharts/modules/wordcloud.js +130 -37
- data/app/assets/javascripts/highcharts/modules/xrange.js +2 -2
- data/app/assets/javascripts/highcharts/themes/avocado.js +1 -1
- data/app/assets/javascripts/highcharts/themes/dark-blue.js +1 -1
- data/app/assets/javascripts/highcharts/themes/dark-green.js +1 -1
- data/app/assets/javascripts/highcharts/themes/dark-unica.js +1 -1
- data/app/assets/javascripts/highcharts/themes/gray.js +1 -1
- data/app/assets/javascripts/highcharts/themes/grid-light.js +1 -1
- data/app/assets/javascripts/highcharts/themes/grid.js +1 -1
- data/app/assets/javascripts/highcharts/themes/sand-signika.js +1 -1
- data/app/assets/javascripts/highcharts/themes/skies.js +1 -1
- data/app/assets/javascripts/highcharts/themes/sunset.js +1 -1
- data/lib/highcharts/version.rb +1 -1
- metadata +1 -1
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license Highcharts JS v6.0.
|
2
|
+
* @license Highcharts JS v6.0.2 (2017-10-20)
|
3
3
|
* Boost module
|
4
4
|
*
|
5
5
|
* (c) 2010-2017 Highsoft AS
|
@@ -271,6 +271,7 @@
|
|
271
271
|
var win = H.win,
|
272
272
|
doc = win.document,
|
273
273
|
noop = function() {},
|
274
|
+
Chart = H.Chart,
|
274
275
|
Color = H.Color,
|
275
276
|
Series = H.Series,
|
276
277
|
seriesTypes = H.seriesTypes,
|
@@ -460,7 +461,11 @@
|
|
460
461
|
r = -Number.MAX_VALUE;
|
461
462
|
|
462
463
|
each(args, function(t) {
|
463
|
-
if (
|
464
|
+
if (
|
465
|
+
typeof t !== 'undefined' &&
|
466
|
+
t !== null &&
|
467
|
+
typeof t.length !== 'undefined'
|
468
|
+
) {
|
464
469
|
// r = r < t.length ? t.length : r;
|
465
470
|
if (t.length > 0) {
|
466
471
|
r = t.length;
|
@@ -529,29 +534,35 @@
|
|
529
534
|
* @param chart {Highchart.Chart} - the chart to check
|
530
535
|
* @returns {Boolean} - true if the chart is in series boost mode
|
531
536
|
*/
|
532
|
-
function
|
537
|
+
Chart.prototype.isChartSeriesBoosting = function() {
|
533
538
|
var threshold = 50;
|
534
539
|
|
535
|
-
threshold =
|
536
|
-
|
540
|
+
threshold = (
|
541
|
+
this.options.boost &&
|
542
|
+
typeof this.options.boost.seriesThreshold !== 'undefined'
|
543
|
+
) ?
|
544
|
+
this.options.boost.seriesThreshold :
|
545
|
+
threshold;
|
537
546
|
|
538
|
-
return threshold <=
|
539
|
-
shouldForceChartSeriesBoosting(
|
540
|
-
}
|
547
|
+
return threshold <= this.series.length ||
|
548
|
+
shouldForceChartSeriesBoosting(this);
|
549
|
+
};
|
541
550
|
|
542
551
|
/*
|
543
552
|
* Returns true if the series is in boost mode
|
544
553
|
* @param series {Highchart.Series} - the series to check
|
545
554
|
* @returns {boolean} - true if the series is in boost mode
|
546
555
|
*/
|
556
|
+
/*
|
547
557
|
function isSeriesBoosting(series, overrideThreshold) {
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
558
|
+
return isChartSeriesBoosting(series.chart) ||
|
559
|
+
patientMax(
|
560
|
+
series.processedXData,
|
561
|
+
series.options.data,
|
562
|
+
series.points
|
563
|
+
) >= (overrideThreshold || series.options.boostThreshold || Number.MAX_VALUE);
|
554
564
|
}
|
565
|
+
*/
|
555
566
|
|
556
567
|
// START OF WEBGL ABSTRACTIONS
|
557
568
|
|
@@ -1239,7 +1250,7 @@
|
|
1239
1250
|
xData,
|
1240
1251
|
s;
|
1241
1252
|
|
1242
|
-
if (isSeriesBoosting
|
1253
|
+
if (series.isSeriesBoosting) {
|
1243
1254
|
isStacked = !!series.options.stacking;
|
1244
1255
|
xData = series.xData || series.options.xData || series.processedXData;
|
1245
1256
|
s = (isStacked ? series.data : (xData || series.options.data)).length;
|
@@ -1267,7 +1278,7 @@
|
|
1267
1278
|
}
|
1268
1279
|
|
1269
1280
|
each(chart.series, function(series) {
|
1270
|
-
if (isSeriesBoosting
|
1281
|
+
if (series.isSeriesBoosting) {
|
1271
1282
|
s += seriesPointCount(series);
|
1272
1283
|
}
|
1273
1284
|
});
|
@@ -1282,7 +1293,7 @@
|
|
1282
1293
|
return;
|
1283
1294
|
}
|
1284
1295
|
|
1285
|
-
if (isSeriesBoosting
|
1296
|
+
if (series.isSeriesBoosting) {
|
1286
1297
|
s = seriesPointCount(series);
|
1287
1298
|
}
|
1288
1299
|
|
@@ -2305,7 +2316,7 @@
|
|
2305
2316
|
'1.1'
|
2306
2317
|
);
|
2307
2318
|
|
2308
|
-
if (isChartSeriesBoosting(
|
2319
|
+
if (chart.isChartSeriesBoosting()) {
|
2309
2320
|
target = chart;
|
2310
2321
|
} else {
|
2311
2322
|
target = series;
|
@@ -2451,7 +2462,7 @@
|
|
2451
2462
|
if (renderer &&
|
2452
2463
|
series.renderTarget &&
|
2453
2464
|
series.canvas &&
|
2454
|
-
!
|
2465
|
+
!(chart || series.chart).isChartSeriesBoosting()
|
2455
2466
|
) {
|
2456
2467
|
renderer.render(chart || series.chart);
|
2457
2468
|
}
|
@@ -2461,23 +2472,24 @@
|
|
2461
2472
|
if (renderer &&
|
2462
2473
|
series.renderTarget &&
|
2463
2474
|
series.canvas &&
|
2464
|
-
!
|
2475
|
+
!series.chart.isChartSeriesBoosting()
|
2465
2476
|
) {
|
2466
2477
|
renderer.allocateBufferForSingleSeries(series);
|
2467
2478
|
}
|
2468
2479
|
}
|
2469
2480
|
|
2470
2481
|
/*
|
2471
|
-
* An "async" foreach loop.
|
2472
|
-
*
|
2482
|
+
* An "async" foreach loop. Uses a setTimeout to keep the loop from blocking the
|
2483
|
+
* UI thread.
|
2484
|
+
*
|
2473
2485
|
* @param arr {Array} - the array to loop through
|
2474
2486
|
* @param fn {Function} - the callback to call for each item
|
2475
2487
|
* @param finalFunc {Function} - the callback to call when done
|
2476
|
-
* @param chunkSize {Number} - the number of iterations per
|
2488
|
+
* @param chunkSize {Number} - the number of iterations per timeout
|
2477
2489
|
* @param i {Number} - the current index
|
2478
2490
|
* @param noTimeout {Boolean} - set to true to skip timeouts
|
2479
2491
|
*/
|
2480
|
-
function
|
2492
|
+
H.eachAsync = function(arr, fn, finalFunc, chunkSize, i, noTimeout) {
|
2481
2493
|
i = i || 0;
|
2482
2494
|
chunkSize = chunkSize || CHUNK_SIZE;
|
2483
2495
|
|
@@ -2493,15 +2505,15 @@
|
|
2493
2505
|
if (i < arr.length) {
|
2494
2506
|
|
2495
2507
|
if (noTimeout) {
|
2496
|
-
eachAsync(arr, fn, finalFunc, chunkSize, i, noTimeout);
|
2508
|
+
H.eachAsync(arr, fn, finalFunc, chunkSize, i, noTimeout);
|
2497
2509
|
} else if (win.requestAnimationFrame) {
|
2498
2510
|
// If available, do requestAnimationFrame - shaves off a few ms
|
2499
2511
|
win.requestAnimationFrame(function() {
|
2500
|
-
eachAsync(arr, fn, finalFunc, chunkSize, i);
|
2512
|
+
H.eachAsync(arr, fn, finalFunc, chunkSize, i);
|
2501
2513
|
});
|
2502
2514
|
} else {
|
2503
2515
|
setTimeout(function() {
|
2504
|
-
eachAsync(arr, fn, finalFunc, chunkSize, i);
|
2516
|
+
H.eachAsync(arr, fn, finalFunc, chunkSize, i);
|
2505
2517
|
});
|
2506
2518
|
}
|
2507
2519
|
|
@@ -2509,7 +2521,7 @@
|
|
2509
2521
|
finalFunc();
|
2510
2522
|
}
|
2511
2523
|
}
|
2512
|
-
}
|
2524
|
+
};
|
2513
2525
|
|
2514
2526
|
// /////////////////////////////////////////////////////////////////////////////
|
2515
2527
|
// Following is the parts of the boost that's common between OGL/Legacy
|
@@ -2584,7 +2596,7 @@
|
|
2584
2596
|
* to hasExtremes to the methods directly.
|
2585
2597
|
*/
|
2586
2598
|
wrap(Series.prototype, 'getExtremes', function(proceed) {
|
2587
|
-
if (!isSeriesBoosting
|
2599
|
+
if (!this.isSeriesBoosting || (!this.hasExtremes || !this.hasExtremes())) {
|
2588
2600
|
return proceed.apply(this, Array.prototype.slice.call(arguments, 1));
|
2589
2601
|
}
|
2590
2602
|
});
|
@@ -2626,37 +2638,13 @@
|
|
2626
2638
|
this.chart.options.boost.enabled;
|
2627
2639
|
}
|
2628
2640
|
|
2629
|
-
if (!isSeriesBoosting
|
2641
|
+
if (!this.isSeriesBoosting ||
|
2630
2642
|
letItPass ||
|
2631
2643
|
!enabled ||
|
2632
2644
|
this.type === 'heatmap' ||
|
2633
2645
|
this.type === 'treemap'
|
2634
2646
|
) {
|
2635
2647
|
|
2636
|
-
// Clear image
|
2637
|
-
if (method === 'render') {
|
2638
|
-
this.stickyTracking = (this.options || {}).stickyTracking;
|
2639
|
-
|
2640
|
-
if (this.boostClear) {
|
2641
|
-
this.boostClear();
|
2642
|
-
this.animate = null; // We're zooming in, don't run animation
|
2643
|
-
}
|
2644
|
-
}
|
2645
|
-
|
2646
|
-
if (!this.options.stacking && method === 'translate' &&
|
2647
|
-
this.type !== 'treemap' &&
|
2648
|
-
this.type !== 'heatmap') {
|
2649
|
-
// We call generate points and check if we're now boosting
|
2650
|
-
// so that we don't have to call series.translate
|
2651
|
-
// when zooming out from SVG mode (which is very, very expensive)
|
2652
|
-
|
2653
|
-
this.generatePoints();
|
2654
|
-
|
2655
|
-
if (isSeriesBoosting(this)) {
|
2656
|
-
return;
|
2657
|
-
}
|
2658
|
-
}
|
2659
|
-
|
2660
2648
|
proceed.call(this);
|
2661
2649
|
|
2662
2650
|
// If a canvas version of the method exists, like renderCanvas(), run
|
@@ -2691,6 +2679,158 @@
|
|
2691
2679
|
}
|
2692
2680
|
});
|
2693
2681
|
|
2682
|
+
/** If the series is a heatmap or treemap, or if the series is not boosting
|
2683
|
+
* do the default behaviour. Otherwise, process if the series has no
|
2684
|
+
* extremes.
|
2685
|
+
*/
|
2686
|
+
wrap(Series.prototype, 'processData', function(proceed) {
|
2687
|
+
|
2688
|
+
var series = this,
|
2689
|
+
dataToMeasure = this.options.data;
|
2690
|
+
|
2691
|
+
// Used twice in this function, first on this.options.data, the second
|
2692
|
+
// time it runs the check again after processedXData is built.
|
2693
|
+
// @todo Check what happens with data grouping
|
2694
|
+
function getSeriesBoosting(data) {
|
2695
|
+
return series.chart.isChartSeriesBoosting() || (
|
2696
|
+
(data ? data.length : 0) >=
|
2697
|
+
(series.options.boostThreshold || Number.MAX_VALUE)
|
2698
|
+
);
|
2699
|
+
}
|
2700
|
+
|
2701
|
+
// If there are no extremes given in the options, we also need to process
|
2702
|
+
// the data to read the data extremes. If this is a heatmap, do default
|
2703
|
+
// behaviour.
|
2704
|
+
if (!getSeriesBoosting(dataToMeasure) || // First pass with options.data
|
2705
|
+
this.type === 'heatmap' ||
|
2706
|
+
this.type === 'treemap' ||
|
2707
|
+
!this.hasExtremes ||
|
2708
|
+
!this.hasExtremes(true)
|
2709
|
+
) {
|
2710
|
+
proceed.apply(this, Array.prototype.slice.call(arguments, 1));
|
2711
|
+
dataToMeasure = this.processedXData;
|
2712
|
+
}
|
2713
|
+
|
2714
|
+
/*
|
2715
|
+
if (!this.hasExtremes || !this.hasExtremes(true)) {
|
2716
|
+
proceed.apply(this, Array.prototype.slice.call(arguments, 1));
|
2717
|
+
}
|
2718
|
+
*/
|
2719
|
+
|
2720
|
+
// Set the isBoosting flag, second pass with processedXData to see if we
|
2721
|
+
// have zoomed.
|
2722
|
+
this.isSeriesBoosting = getSeriesBoosting(dataToMeasure);
|
2723
|
+
|
2724
|
+
// Enter or exit boost mode
|
2725
|
+
if (this.isSeriesBoosting) {
|
2726
|
+
this.enterBoost();
|
2727
|
+
} else if (this.exitBoost) {
|
2728
|
+
this.exitBoost();
|
2729
|
+
}
|
2730
|
+
});
|
2731
|
+
|
2732
|
+
wrap(Series.prototype, 'setVisible', function(proceed, vis, redraw) {
|
2733
|
+
proceed.call(this, vis, redraw);
|
2734
|
+
if (this.visible === false && this.canvas && this.renderTarget) {
|
2735
|
+
if (this.ogl) {
|
2736
|
+
this.ogl.clear();
|
2737
|
+
}
|
2738
|
+
this.boostClear();
|
2739
|
+
}
|
2740
|
+
});
|
2741
|
+
|
2742
|
+
/**
|
2743
|
+
* Enter boost mode and apply boost-specific properties.
|
2744
|
+
*/
|
2745
|
+
Series.prototype.enterBoost = function() {
|
2746
|
+
|
2747
|
+
this.alteredByBoost = [];
|
2748
|
+
|
2749
|
+
// Save the original values, including whether it was an own property or
|
2750
|
+
// inherited from the prototype.
|
2751
|
+
each(['allowDG', 'directTouch', 'stickyTracking'], function(prop) {
|
2752
|
+
this.alteredByBoost.push({
|
2753
|
+
prop: prop,
|
2754
|
+
val: this[prop],
|
2755
|
+
own: this.hasOwnProperty(prop)
|
2756
|
+
});
|
2757
|
+
}, this);
|
2758
|
+
|
2759
|
+
this.allowDG = false;
|
2760
|
+
this.directTouch = false;
|
2761
|
+
this.stickyTracking = true;
|
2762
|
+
|
2763
|
+
// Once we've been in boost mode, we don't want animation when returning to
|
2764
|
+
// vanilla mode.
|
2765
|
+
this.animate = null;
|
2766
|
+
|
2767
|
+
// Hide series label if any
|
2768
|
+
if (this.labelBySeries) {
|
2769
|
+
this.labelBySeries = this.labelBySeries.destroy();
|
2770
|
+
}
|
2771
|
+
};
|
2772
|
+
|
2773
|
+
/**
|
2774
|
+
* Exit from boost mode and restore non-boost properties.
|
2775
|
+
*/
|
2776
|
+
Series.prototype.exitBoost = function() {
|
2777
|
+
// Reset instance properties and/or delete instance properties and go back
|
2778
|
+
// to prototype
|
2779
|
+
each(this.alteredByBoost || [], function(setting) {
|
2780
|
+
if (setting.own) {
|
2781
|
+
this[setting.prop] = setting.val;
|
2782
|
+
} else {
|
2783
|
+
// Revert to prototype
|
2784
|
+
delete this[setting.prop];
|
2785
|
+
}
|
2786
|
+
}, this);
|
2787
|
+
|
2788
|
+
// Clear previous run
|
2789
|
+
if (this.boostClear) {
|
2790
|
+
this.boostClear();
|
2791
|
+
}
|
2792
|
+
|
2793
|
+
};
|
2794
|
+
|
2795
|
+
Series.prototype.hasExtremes = function(checkX) {
|
2796
|
+
var options = this.options,
|
2797
|
+
data = options.data,
|
2798
|
+
xAxis = this.xAxis && this.xAxis.options,
|
2799
|
+
yAxis = this.yAxis && this.yAxis.options;
|
2800
|
+
|
2801
|
+
return data.length > (options.boostThreshold || Number.MAX_VALUE) &&
|
2802
|
+
isNumber(yAxis.min) && isNumber(yAxis.max) &&
|
2803
|
+
(!checkX || (isNumber(xAxis.min) && isNumber(xAxis.max)));
|
2804
|
+
};
|
2805
|
+
|
2806
|
+
/**
|
2807
|
+
* If implemented in the core, parts of this can probably be
|
2808
|
+
* shared with other similar methods in Highcharts.
|
2809
|
+
*/
|
2810
|
+
Series.prototype.destroyGraphics = function() {
|
2811
|
+
var series = this,
|
2812
|
+
points = this.points,
|
2813
|
+
point,
|
2814
|
+
i;
|
2815
|
+
|
2816
|
+
if (points) {
|
2817
|
+
for (i = 0; i < points.length; i = i + 1) {
|
2818
|
+
point = points[i];
|
2819
|
+
if (point && point.graphic) {
|
2820
|
+
point.graphic = point.graphic.destroy();
|
2821
|
+
}
|
2822
|
+
}
|
2823
|
+
}
|
2824
|
+
|
2825
|
+
each(['graph', 'area', 'tracker'], function(prop) {
|
2826
|
+
if (series[prop]) {
|
2827
|
+
series[prop] = series[prop].destroy();
|
2828
|
+
}
|
2829
|
+
});
|
2830
|
+
};
|
2831
|
+
|
2832
|
+
|
2833
|
+
|
2694
2834
|
/*
|
2695
2835
|
* Returns true if the current browser supports webgl
|
2696
2836
|
*/
|
@@ -2729,7 +2869,7 @@
|
|
2729
2869
|
this.chart.options.boost.enabled;
|
2730
2870
|
}
|
2731
2871
|
|
2732
|
-
if (!enabled || !isSeriesBoosting
|
2872
|
+
if (!enabled || !this.isSeriesBoosting) {
|
2733
2873
|
return proceed.call(this);
|
2734
2874
|
}
|
2735
2875
|
|
@@ -2761,63 +2901,9 @@
|
|
2761
2901
|
// /////////////////////////////////////////////////////////////////////////
|
2762
2902
|
// GL-SPECIFIC WRAPPINGS FOLLOWS
|
2763
2903
|
|
2764
|
-
/** If the series is a heatmap or treemap, or if the series is not boosting
|
2765
|
-
* do the default behaviour. Otherwise, process if the series has no
|
2766
|
-
* extremes.
|
2767
|
-
*/
|
2768
|
-
wrap(Series.prototype, 'processData', function(proceed) {
|
2769
|
-
// If this is a heatmap, do default behaviour
|
2770
|
-
if (!isSeriesBoosting(this) ||
|
2771
|
-
this.type === 'heatmap' ||
|
2772
|
-
this.type === 'treemap') {
|
2773
|
-
proceed.apply(this, Array.prototype.slice.call(arguments, 1));
|
2774
|
-
}
|
2775
2904
|
|
2776
|
-
if (!this.hasExtremes || !this.hasExtremes(true)) {
|
2777
|
-
proceed.apply(this, Array.prototype.slice.call(arguments, 1));
|
2778
|
-
}
|
2779
|
-
});
|
2780
2905
|
|
2781
2906
|
H.extend(Series.prototype, {
|
2782
|
-
pointRange: 0,
|
2783
|
-
directTouch: false,
|
2784
|
-
allowDG: false, // No data grouping, let boost handle large data
|
2785
|
-
hasExtremes: function(checkX) {
|
2786
|
-
var options = this.options,
|
2787
|
-
data = options.data,
|
2788
|
-
xAxis = this.xAxis && this.xAxis.options,
|
2789
|
-
yAxis = this.yAxis && this.yAxis.options;
|
2790
|
-
|
2791
|
-
return data.length > (options.boostThreshold || Number.MAX_VALUE) &&
|
2792
|
-
isNumber(yAxis.min) && isNumber(yAxis.max) &&
|
2793
|
-
(!checkX || (isNumber(xAxis.min) && isNumber(xAxis.max)));
|
2794
|
-
},
|
2795
|
-
|
2796
|
-
/**
|
2797
|
-
* If implemented in the core, parts of this can probably be
|
2798
|
-
* shared with other similar methods in Highcharts.
|
2799
|
-
*/
|
2800
|
-
destroyGraphics: function() {
|
2801
|
-
var series = this,
|
2802
|
-
points = this.points,
|
2803
|
-
point,
|
2804
|
-
i;
|
2805
|
-
|
2806
|
-
if (points) {
|
2807
|
-
for (i = 0; i < points.length; i = i + 1) {
|
2808
|
-
point = points[i];
|
2809
|
-
if (point && point.graphic) {
|
2810
|
-
point.graphic = point.graphic.destroy();
|
2811
|
-
}
|
2812
|
-
}
|
2813
|
-
}
|
2814
|
-
|
2815
|
-
each(['graph', 'area', 'tracker'], function(prop) {
|
2816
|
-
if (series[prop]) {
|
2817
|
-
series[prop] = series[prop].destroy();
|
2818
|
-
}
|
2819
|
-
});
|
2820
|
-
},
|
2821
2907
|
|
2822
2908
|
renderCanvas: function() {
|
2823
2909
|
var series = this,
|
@@ -2888,9 +2974,6 @@
|
|
2888
2974
|
|
2889
2975
|
boostOptions = renderer.settings;
|
2890
2976
|
|
2891
|
-
// Force sticky tracking
|
2892
|
-
this.stickyTracking = true;
|
2893
|
-
|
2894
2977
|
if (!this.visible) {
|
2895
2978
|
return;
|
2896
2979
|
}
|
@@ -2904,7 +2987,7 @@
|
|
2904
2987
|
|
2905
2988
|
// If we're rendering per. series we should create the marker groups
|
2906
2989
|
// as usual.
|
2907
|
-
if (!isChartSeriesBoosting(
|
2990
|
+
if (!chart.isChartSeriesBoosting()) {
|
2908
2991
|
this.markerGroup = series.plotGroup(
|
2909
2992
|
'markerGroup',
|
2910
2993
|
'markers',
|
@@ -3017,11 +3100,6 @@
|
|
3017
3100
|
|
3018
3101
|
function doneProcessing() {
|
3019
3102
|
fireEvent(series, 'renderedCanvas');
|
3020
|
-
// Pass tests in Pointer.
|
3021
|
-
// Replace this with a single property, and replace when zooming
|
3022
|
-
// in below boostThreshold.
|
3023
|
-
series.directTouch = false;
|
3024
|
-
series.options.stickyTracking = true;
|
3025
3103
|
|
3026
3104
|
// Go back to prototype, ready to build
|
3027
3105
|
delete series.buildKDTree;
|
@@ -3038,7 +3116,7 @@
|
|
3038
3116
|
console.time('kd tree building'); // eslint-disable-line no-console
|
3039
3117
|
}
|
3040
3118
|
|
3041
|
-
eachAsync(
|
3119
|
+
H.eachAsync(
|
3042
3120
|
isStacked ? series.data : (xData || rawData),
|
3043
3121
|
processPoint,
|
3044
3122
|
doneProcessing
|
@@ -3058,7 +3136,6 @@
|
|
3058
3136
|
function(t) {
|
3059
3137
|
if (seriesTypes[t]) {
|
3060
3138
|
wrap(seriesTypes[t].prototype, 'drawPoints', pointDrawHandler);
|
3061
|
-
seriesTypes[t].prototype.directTouch = false; // Use k-d-tree
|
3062
3139
|
}
|
3063
3140
|
}
|
3064
3141
|
);
|
@@ -3067,14 +3144,14 @@
|
|
3067
3144
|
// By default, the bubble series does not use the KD-tree, so force it
|
3068
3145
|
// to.
|
3069
3146
|
delete seriesTypes.bubble.prototype.buildKDTree;
|
3070
|
-
seriesTypes.bubble.prototype.directTouch = false;
|
3147
|
+
// seriesTypes.bubble.prototype.directTouch = false;
|
3071
3148
|
|
3072
3149
|
// Needed for markers to work correctly
|
3073
3150
|
wrap(
|
3074
3151
|
seriesTypes.bubble.prototype,
|
3075
3152
|
'markerAttribs',
|
3076
3153
|
function(proceed) {
|
3077
|
-
if (isSeriesBoosting
|
3154
|
+
if (this.isSeriesBoosting) {
|
3078
3155
|
return false;
|
3079
3156
|
}
|
3080
3157
|
return proceed.apply(this, [].slice.call(arguments, 1));
|
@@ -3096,16 +3173,6 @@
|
|
3096
3173
|
sampling: true
|
3097
3174
|
});
|
3098
3175
|
|
3099
|
-
wrap(Series.prototype, 'setVisible', function(proceed, vis, redraw) {
|
3100
|
-
proceed.call(this, vis, redraw);
|
3101
|
-
if (this.visible === false && this.canvas && this.renderTarget) {
|
3102
|
-
if (this.ogl) {
|
3103
|
-
this.ogl.clear();
|
3104
|
-
}
|
3105
|
-
this.boostClear();
|
3106
|
-
}
|
3107
|
-
});
|
3108
|
-
|
3109
3176
|
/**
|
3110
3177
|
* Take care of the canvas blitting
|
3111
3178
|
*/
|
@@ -3113,7 +3180,7 @@
|
|
3113
3180
|
|
3114
3181
|
/* Convert chart-level canvas to image */
|
3115
3182
|
function canvasToSVG() {
|
3116
|
-
if (chart.ogl && isChartSeriesBoosting(
|
3183
|
+
if (chart.ogl && chart.isChartSeriesBoosting()) {
|
3117
3184
|
chart.ogl.render(chart);
|
3118
3185
|
}
|
3119
3186
|
}
|
@@ -3125,7 +3192,7 @@
|
|
3125
3192
|
chart.boostForceChartBoost = shouldForceChartSeriesBoosting(chart);
|
3126
3193
|
chart.isBoosting = false;
|
3127
3194
|
|
3128
|
-
if (!isChartSeriesBoosting(
|
3195
|
+
if (!chart.isChartSeriesBoosting() && chart.didBoost) {
|
3129
3196
|
chart.didBoost = false;
|
3130
3197
|
}
|
3131
3198
|
|
@@ -3134,7 +3201,7 @@
|
|
3134
3201
|
chart.boostClear();
|
3135
3202
|
}
|
3136
3203
|
|
3137
|
-
if (chart.canvas && chart.ogl && isChartSeriesBoosting(
|
3204
|
+
if (chart.canvas && chart.ogl && chart.isChartSeriesBoosting()) {
|
3138
3205
|
chart.didBoost = true;
|
3139
3206
|
|
3140
3207
|
// Allocate
|