highcharts-rails 5.0.11 → 5.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.markdown +32 -0
- data/app/assets/javascripts/highcharts.js +1199 -379
- data/app/assets/javascripts/highcharts/highcharts-3d.js +1542 -209
- data/app/assets/javascripts/highcharts/highcharts-more.js +6 -1
- data/app/assets/javascripts/highcharts/modules/accessibility.js +13 -6
- data/app/assets/javascripts/highcharts/modules/annotations.js +1 -1
- data/app/assets/javascripts/highcharts/modules/boost.js +66 -24
- data/app/assets/javascripts/highcharts/modules/broken-axis.js +1 -1
- data/app/assets/javascripts/highcharts/modules/data.js +1 -1
- data/app/assets/javascripts/highcharts/modules/drilldown.js +6 -44
- data/app/assets/javascripts/highcharts/modules/exporting.js +8 -4
- data/app/assets/javascripts/highcharts/modules/funnel.js +1 -8
- data/app/assets/javascripts/highcharts/modules/grid-axis.js +1 -1
- data/app/assets/javascripts/highcharts/modules/heatmap.js +17 -51
- data/app/assets/javascripts/highcharts/modules/no-data-to-display.js +19 -10
- data/app/assets/javascripts/highcharts/modules/offline-exporting.js +7 -2
- data/app/assets/javascripts/highcharts/modules/overlapping-datalabels.js +1 -1
- data/app/assets/javascripts/highcharts/modules/series-label.js +1 -1
- data/app/assets/javascripts/highcharts/modules/solid-gauge.js +7 -51
- data/app/assets/javascripts/highcharts/modules/stock.js +82 -9
- data/app/assets/javascripts/highcharts/modules/treemap.js +1 -1
- data/app/assets/javascripts/highcharts/modules/xrange-series.js +1 -1
- data/lib/highcharts/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74a8ba8427add11ea1ab2b5c13f709c943c4e2fa
|
4
|
+
data.tar.gz: 5a0ad370f0bf2979f4639cfa8e15712f9e7c96f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ea324cc2f8641130d1a8ab70433f8feb409347262bb1a61aa12477d329ac372e367d39d55208b621f5e4d107d20cb3b56424155b44fdd6ea088cea975802e85
|
7
|
+
data.tar.gz: 31158550cb0e0612d6789c9c655a5fc876d7f2511763a8183bd72cf37d662e458321b77c08608d8ac24e9be45ad2bb2370ff222896710c87b149d6d4002777be
|
data/CHANGELOG.markdown
CHANGED
@@ -1,3 +1,35 @@
|
|
1
|
+
# 5.0.12 / 2017-11-10
|
2
|
+
|
3
|
+
* Updated Highcharts to 5.0.12 (2017-05-24)
|
4
|
+
* Added core support for color animation.
|
5
|
+
* Added error message on trying to define the same series type twice. Fixes #6686.
|
6
|
+
* Let Series.update fall back to the optimized Series.setData if only the data is updated.
|
7
|
+
* Bug fixes
|
8
|
+
* Fixed #223, pie chart data labels were not truncated to chart area when pie size was explicitly set.
|
9
|
+
* Fixed #3160, let the xAxis.offset option modify the clip area to avoid clipping line graphs.
|
10
|
+
* Fixed #4588, loading and "no data" labels overlapped.
|
11
|
+
* Fixed #4921, ignoreHiddenSeries caused wrong column position and width after hiding and showing all series.
|
12
|
+
* Fixed #6307, offline export issues with styled mode in IE and Edge.
|
13
|
+
* Fixed #6517, regression with shared tooltip and columns. Tooltip not following mouse move.
|
14
|
+
* Fixed #6659, long series name in legend broke the geometry of the chart. Added textOverflow and max width to default itemStyle.
|
15
|
+
* Fixed #6659, long series names made tooltip overflow the chart.
|
16
|
+
* Fixed #6664, no-data label remained in heat maps after adding points.
|
17
|
+
* Fixed #6670, visible: false didn't work correctly on funnel chart points.
|
18
|
+
* Fixed #6687, wrong hover points with columns and shared tooltip.
|
19
|
+
* Fixed #6700, axis label font size wrongly detected in styled mode.
|
20
|
+
* Fixed #6704, series names were not grouped for two series after drilldown.
|
21
|
+
* Fixed #6705, bubble chart click events and point select was broken.
|
22
|
+
* Fixed #6706, crash with heatmap and boost-canvas.
|
23
|
+
* Fixed #6721, area range fill was broken with null values and connectNulls: true.
|
24
|
+
* Fixed #6731, category axis allowed zooming outside range.
|
25
|
+
* Fixed AT announcing clickable for some a11y demos.
|
26
|
+
* Fixed Firefox issue with styled export, ref #6307.
|
27
|
+
* Fixed bug with inserting multiple data tables in export-data.
|
28
|
+
* Fixed issue where chart container height was not respected when initially hidden. See #6693.
|
29
|
+
* Fixed issue with data labels not appearing on exported charts in styled mode.
|
30
|
+
* Fixed issue with missing gridLines in 3D.
|
31
|
+
* Fixed issue with mouseOver event in column chart with shared tooltip.
|
32
|
+
|
1
33
|
# 5.0.11 / 2017-11-10
|
2
34
|
|
3
35
|
* Updated Highcharts to 5.0.11 (2017-05-04)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license Highcharts JS v5.0.
|
2
|
+
* @license Highcharts JS v5.0.12 (2017-05-24)
|
3
3
|
*
|
4
4
|
* (c) 2009-2016 Torstein Honsi
|
5
5
|
*
|
@@ -35,7 +35,7 @@
|
|
35
35
|
|
36
36
|
var Highcharts = win.Highcharts ? win.Highcharts.error(16, true) : {
|
37
37
|
product: 'Highcharts',
|
38
|
-
version: '5.0.
|
38
|
+
version: '5.0.12',
|
39
39
|
deg2rad: Math.PI * 2 / 360,
|
40
40
|
doc: doc,
|
41
41
|
hasBidiBug: hasBidiBug,
|
@@ -59,7 +59,7 @@
|
|
59
59
|
* An array containing the current chart objects in the page. A chart's
|
60
60
|
* position in the array is preserved throughout the page's lifetime. When
|
61
61
|
* a chart is destroyed, the array item becomes `undefined`.
|
62
|
-
* @type {Array}
|
62
|
+
* @type {Array.<Highcharts.Chart>}
|
63
63
|
* @memberOf Highcharts
|
64
64
|
*/
|
65
65
|
charts: []
|
@@ -470,6 +470,19 @@
|
|
470
470
|
}
|
471
471
|
}; // End of Fx prototype
|
472
472
|
|
473
|
+
/**
|
474
|
+
* Handle animation of the color attributes directly.
|
475
|
+
*/
|
476
|
+
H.Fx.prototype.fillSetter =
|
477
|
+
H.Fx.prototype.strokeSetter = function() {
|
478
|
+
this.elem.attr(
|
479
|
+
this.prop,
|
480
|
+
H.color(this.start).tweenTo(H.color(this.end), this.pos),
|
481
|
+
null,
|
482
|
+
true
|
483
|
+
);
|
484
|
+
};
|
485
|
+
|
473
486
|
|
474
487
|
/**
|
475
488
|
* Utility function to extend an object with the members of another.
|
@@ -2005,6 +2018,10 @@
|
|
2005
2018
|
var defaultOptions = H.getOptions(),
|
2006
2019
|
seriesTypes = H.seriesTypes;
|
2007
2020
|
|
2021
|
+
if (seriesTypes[type]) {
|
2022
|
+
return H.error(27); // Series type already defined
|
2023
|
+
}
|
2024
|
+
|
2008
2025
|
// Merge the options
|
2009
2026
|
defaultOptions.plotOptions[type] = H.merge(
|
2010
2027
|
defaultOptions.plotOptions[parent],
|
@@ -2228,6 +2245,7 @@
|
|
2228
2245
|
// Collection of named colors. Can be extended from the outside by adding
|
2229
2246
|
// colors to Highcharts.Color.prototype.names.
|
2230
2247
|
names: {
|
2248
|
+
none: 'rgba(255,255,255,0)',
|
2231
2249
|
white: '#ffffff',
|
2232
2250
|
black: '#000000'
|
2233
2251
|
},
|
@@ -2369,6 +2387,45 @@
|
|
2369
2387
|
setOpacity: function(alpha) {
|
2370
2388
|
this.rgba[3] = alpha;
|
2371
2389
|
return this;
|
2390
|
+
},
|
2391
|
+
|
2392
|
+
/*
|
2393
|
+
* Return an intermediate color between two colors.
|
2394
|
+
*
|
2395
|
+
* @param {Highcharts.Color} to
|
2396
|
+
* The color object to tween to.
|
2397
|
+
* @param {Number} pos
|
2398
|
+
* The intermediate position, where 0 is the from color (current
|
2399
|
+
* color item), and 1 is the `to` color.
|
2400
|
+
*
|
2401
|
+
* @return {String}
|
2402
|
+
* The intermediate color in rgba notation.
|
2403
|
+
*/
|
2404
|
+
tweenTo: function(to, pos) {
|
2405
|
+
// Check for has alpha, because rgba colors perform worse due to lack of
|
2406
|
+
// support in WebKit.
|
2407
|
+
var from = this,
|
2408
|
+
hasAlpha,
|
2409
|
+
ret;
|
2410
|
+
|
2411
|
+
// Unsupported color, return to-color (#3920)
|
2412
|
+
if (!to.rgba.length) {
|
2413
|
+
ret = to.input || 'none';
|
2414
|
+
|
2415
|
+
// Interpolate
|
2416
|
+
} else {
|
2417
|
+
from = from.rgba;
|
2418
|
+
to = to.rgba;
|
2419
|
+
hasAlpha = (to[3] !== 1 || from[3] !== 1);
|
2420
|
+
ret = (hasAlpha ? 'rgba(' : 'rgb(') +
|
2421
|
+
Math.round(to[0] + (from[0] - to[0]) * (1 - pos)) + ',' +
|
2422
|
+
Math.round(to[1] + (from[1] - to[1]) * (1 - pos)) + ',' +
|
2423
|
+
Math.round(to[2] + (from[2] - to[2]) * (1 - pos)) +
|
2424
|
+
(hasAlpha ?
|
2425
|
+
(',' + (to[3] + (from[3] - to[3]) * (1 - pos))) :
|
2426
|
+
'') + ')';
|
2427
|
+
}
|
2428
|
+
return ret;
|
2372
2429
|
}
|
2373
2430
|
};
|
2374
2431
|
H.color = function(input) {
|
@@ -2426,23 +2483,25 @@
|
|
2426
2483
|
*/
|
2427
2484
|
/**
|
2428
2485
|
* The SVGElement prototype is a JavaScript wrapper for SVG elements used in the
|
2429
|
-
* rendering layer of Highcharts. Combined with the {@link
|
2430
|
-
* these prototypes allow freeform annotation
|
2431
|
-
* pages without instanciating a chart. The
|
2432
|
-
* labels, when `text` or `label` elements are
|
2433
|
-
* parameter.
|
2486
|
+
* rendering layer of Highcharts. Combined with the {@link
|
2487
|
+
* Highcharts.SVGRenderer} object, these prototypes allow freeform annotation
|
2488
|
+
* in the charts or even in HTML pages without instanciating a chart. The
|
2489
|
+
* SVGElement can also wrap HTML labels, when `text` or `label` elements are
|
2490
|
+
* created with the `useHTML` parameter.
|
2434
2491
|
*
|
2435
2492
|
* The SVGElement instances are created through factory functions on the
|
2436
|
-
* {@link SVGRenderer} object, like
|
2437
|
-
* [
|
2438
|
-
* SVGRenderer#
|
2493
|
+
* {@link Highcharts.SVGRenderer} object, like
|
2494
|
+
* [rect]{@link Highcharts.SVGRenderer#rect}, [path]{@link
|
2495
|
+
* Highcharts.SVGRenderer#path}, [text]{@link Highcharts.SVGRenderer#text},
|
2496
|
+
* [label]{@link Highcharts.SVGRenderer#label}, [g]{@link
|
2497
|
+
* Highcharts.SVGRenderer#g} and more.
|
2439
2498
|
*
|
2440
|
-
* @class
|
2499
|
+
* @class Highcharts.SVGElement
|
2441
2500
|
*/
|
2442
2501
|
SVGElement = H.SVGElement = function() {
|
2443
2502
|
return this;
|
2444
2503
|
};
|
2445
|
-
SVGElement.prototype
|
2504
|
+
extend(SVGElement.prototype, /** @lends Highcharts.SVGElement.prototype */ {
|
2446
2505
|
|
2447
2506
|
// Default base for animation
|
2448
2507
|
opacity: 1,
|
@@ -2461,8 +2520,10 @@
|
|
2461
2520
|
* Initialize the SVG renderer. This function only exists to make the
|
2462
2521
|
* initiation process overridable. It should not be called directly.
|
2463
2522
|
*
|
2464
|
-
* @param
|
2465
|
-
*
|
2523
|
+
* @param {HighchartsSVGRenderer} renderer
|
2524
|
+
* The SVGRenderer instance to initialize to.
|
2525
|
+
* @param {String} nodeName
|
2526
|
+
* The SVG node name.
|
2466
2527
|
* @returns {void}
|
2467
2528
|
*/
|
2468
2529
|
init: function(renderer, nodeName) {
|
@@ -2478,7 +2539,7 @@
|
|
2478
2539
|
|
2479
2540
|
/**
|
2480
2541
|
* The renderer that the SVGElement belongs to.
|
2481
|
-
* @type {SVGRenderer}
|
2542
|
+
* @type {Highcharts.SVGRenderer}
|
2482
2543
|
*/
|
2483
2544
|
this.renderer = renderer;
|
2484
2545
|
},
|
@@ -2489,7 +2550,11 @@
|
|
2489
2550
|
* @param {SVGAttributes} params SVG attributes or CSS to animate.
|
2490
2551
|
* @param {AnimationOptions} [options] Animation options.
|
2491
2552
|
* @param {Function} [complete] Function to perform at the end of animation.
|
2492
|
-
*
|
2553
|
+
*
|
2554
|
+
* @sample highcharts/members/element-on/
|
2555
|
+
* Setting some attributes by animation
|
2556
|
+
*
|
2557
|
+
* @returns {Highcharts.SVGElement} Returns the SVGElement for chaining.
|
2493
2558
|
*/
|
2494
2559
|
animate: function(params, options, complete) {
|
2495
2560
|
var animOptions = H.animObject(
|
@@ -2809,16 +2874,19 @@
|
|
2809
2874
|
* setter. If the first argument is a string and the second is undefined,
|
2810
2875
|
* the function serves as a getter and the current value of the property
|
2811
2876
|
* is returned.
|
2812
|
-
* @param {Function} complete - A callback function to execute after setting
|
2877
|
+
* @param {Function} [complete] - A callback function to execute after setting
|
2813
2878
|
* the attributes. This makes the function compliant and interchangeable
|
2814
2879
|
* with the {@link SVGElement#animate} function.
|
2815
|
-
* @param {boolean} continueAnimation
|
2880
|
+
* @param {boolean} [continueAnimation=true] Used internally when `.attr` is
|
2816
2881
|
* called as part of an animation step. Otherwise, calling `.attr` for an
|
2817
2882
|
* attribute will stop animation for that attribute.
|
2818
2883
|
*
|
2819
2884
|
* @returns {SVGElement|string|number} If used as a setter, it returns the
|
2820
2885
|
* current {@link SVGElement} so the calls can be chained. If used as a
|
2821
2886
|
* getter, the current value of the attribute is returned.
|
2887
|
+
*
|
2888
|
+
* @sample highcharts/members/renderer-rect/
|
2889
|
+
* Setting some attributes
|
2822
2890
|
*
|
2823
2891
|
* @example
|
2824
2892
|
* // Set multiple attributes
|
@@ -2897,13 +2965,7 @@
|
|
2897
2965
|
}
|
2898
2966
|
}, this);
|
2899
2967
|
|
2900
|
-
|
2901
|
-
// of attributes.
|
2902
|
-
if (this.doTransform) {
|
2903
|
-
this.updateTransform();
|
2904
|
-
this.doTransform = false;
|
2905
|
-
}
|
2906
|
-
|
2968
|
+
this.afterSetters();
|
2907
2969
|
}
|
2908
2970
|
|
2909
2971
|
// In accordance with animate, run a complete callback
|
@@ -2914,6 +2976,20 @@
|
|
2914
2976
|
return ret;
|
2915
2977
|
},
|
2916
2978
|
|
2979
|
+
/**
|
2980
|
+
* This method is executed in the end of {attr}, after setting all attributes in the hash.
|
2981
|
+
* In can be used to efficiently consolidate multiple attributes in one SVG property -- e.g.,
|
2982
|
+
* translate, rotate and scale are merged in one "transform" attribute in the SVG node.
|
2983
|
+
*/
|
2984
|
+
afterSetters: function() {
|
2985
|
+
// Update transform. Do this outside the loop to prevent redundant updating for batch setting
|
2986
|
+
// of attributes.
|
2987
|
+
if (this.doTransform) {
|
2988
|
+
this.updateTransform();
|
2989
|
+
this.doTransform = false;
|
2990
|
+
}
|
2991
|
+
},
|
2992
|
+
|
2917
2993
|
|
2918
2994
|
/**
|
2919
2995
|
* Update the shadow elements with new attributes.
|
@@ -2949,7 +3025,7 @@
|
|
2949
3025
|
* @param {boolean} [replace=false] - When true, the existing class name(s)
|
2950
3026
|
* will be overwritten with the new one. When false, the new one is
|
2951
3027
|
* added.
|
2952
|
-
* @returns {SVGElement} Return the SVG element for chainability.
|
3028
|
+
* @returns {Highcharts.SVGElement} Return the SVG element for chainability.
|
2953
3029
|
*/
|
2954
3030
|
addClass: function(className, replace) {
|
2955
3031
|
var currentClassName = this.attr('class') || '';
|
@@ -2977,7 +3053,7 @@
|
|
2977
3053
|
/**
|
2978
3054
|
* Remove a class name from the element.
|
2979
3055
|
* @param {string} className The class name to remove.
|
2980
|
-
* @return {SVGElement} Returns the SVG element for chainability.
|
3056
|
+
* @return {Highcharts.SVGElement} Returns the SVG element for chainability.
|
2981
3057
|
*/
|
2982
3058
|
removeClass: function(className) {
|
2983
3059
|
attr(this.element, 'class', (attr(this.element, 'class') || '').replace(className, ''));
|
@@ -3014,7 +3090,7 @@
|
|
3014
3090
|
*
|
3015
3091
|
* @param {ClipRect} [clipRect] - The clipping rectangle. If skipped, the
|
3016
3092
|
* current clip is removed.
|
3017
|
-
* @returns {SVGElement} Returns the SVG element to allow chaining.
|
3093
|
+
* @returns {Highcharts.SVGElement} Returns the SVG element to allow chaining.
|
3018
3094
|
*/
|
3019
3095
|
clip: function(clipRect) {
|
3020
3096
|
return this.attr(
|
@@ -3074,7 +3150,10 @@
|
|
3074
3150
|
* Highcharts, like `width`, `ellipsis` and `textOverflow` for SVG text
|
3075
3151
|
* elements.
|
3076
3152
|
* @param {CSSObject} styles The new CSS styles.
|
3077
|
-
* @returns {SVGElement} Return the SVG element for chaining.
|
3153
|
+
* @returns {Highcharts.SVGElement} Return the SVG element for chaining.
|
3154
|
+
*
|
3155
|
+
* @sample highcharts/members/renderer-text-on-chart/
|
3156
|
+
* Styled text
|
3078
3157
|
*/
|
3079
3158
|
css: function(styles) {
|
3080
3159
|
var oldStyles = this.styles,
|
@@ -3189,7 +3268,10 @@
|
|
3189
3268
|
* touch devices, to prevent the browser from waiting for a click event
|
3190
3269
|
* from firing.
|
3191
3270
|
* @param {Function} handler - The handler callback.
|
3192
|
-
* @returns {SVGElement} The SVGElement for chaining.
|
3271
|
+
* @returns {Highcharts.SVGElement} The SVGElement for chaining.
|
3272
|
+
*
|
3273
|
+
* @sample highcharts/members/element-on/
|
3274
|
+
* A clickable rectangle
|
3193
3275
|
*/
|
3194
3276
|
on: function(eventType, handler) {
|
3195
3277
|
var svgElement = this,
|
@@ -3222,7 +3304,7 @@
|
|
3222
3304
|
*
|
3223
3305
|
* @param {Array} coordinates The center reference. The format is
|
3224
3306
|
* `[centerX, centerY, diameter]` in pixels.
|
3225
|
-
* @returns {SVGElement} Returns the SVGElement for chaining.
|
3307
|
+
* @returns {Highcharts.SVGElement} Returns the SVGElement for chaining.
|
3226
3308
|
*/
|
3227
3309
|
setRadialReference: function(coordinates) {
|
3228
3310
|
var existingGradient = this.renderer.gradients[this.element.gradient];
|
@@ -3263,7 +3345,7 @@
|
|
3263
3345
|
*
|
3264
3346
|
* @param {boolean} inverted - Whether to invert or not. An inverted shape
|
3265
3347
|
* can be un-inverted by setting it to false.
|
3266
|
-
* @returns {SVGElement} Return the SVGElement for chaining.
|
3348
|
+
* @returns {Highcharts.SVGElement} Return the SVGElement for chaining.
|
3267
3349
|
*/
|
3268
3350
|
invert: function(inverted) {
|
3269
3351
|
var wrapper = this;
|
@@ -3321,9 +3403,12 @@
|
|
3321
3403
|
},
|
3322
3404
|
|
3323
3405
|
/**
|
3324
|
-
* Bring the element to the front.
|
3406
|
+
* Bring the element to the front. Alternatively, a new zIndex can be set.
|
3325
3407
|
*
|
3326
|
-
* @returns {SVGElement} Returns the SVGElement for chaining.
|
3408
|
+
* @returns {Highcharts.SVGElement} Returns the SVGElement for chaining.
|
3409
|
+
*
|
3410
|
+
* @sample highcharts/members/element-tofront/
|
3411
|
+
* Click an element to bring it to front
|
3327
3412
|
*/
|
3328
3413
|
toFront: function() {
|
3329
3414
|
var element = this.element;
|
@@ -3334,7 +3419,7 @@
|
|
3334
3419
|
|
3335
3420
|
/**
|
3336
3421
|
* Align the element relative to the chart or another box.
|
3337
|
-
*
|
3422
|
+
*
|
3338
3423
|
* @param {Object} [alignOptions] The alignment options. The function can be
|
3339
3424
|
* called without this parameter in order to re-align an element after the
|
3340
3425
|
* box has been updated.
|
@@ -3352,7 +3437,7 @@
|
|
3352
3437
|
* When the box is a string, it refers to an object in the Renderer. For
|
3353
3438
|
* example, when box is `spacingBox`, it refers to `Renderer.spacingBox`
|
3354
3439
|
* which holds `width`, `height`, `x` and `y` properties.
|
3355
|
-
* @returns {SVGElement} Returns the SVGElement for chaining.
|
3440
|
+
* @returns {Highcharts.SVGElement} Returns the SVGElement for chaining.
|
3356
3441
|
*/
|
3357
3442
|
align: function(alignOptions, alignByTranslate, box) {
|
3358
3443
|
var align,
|
@@ -3438,6 +3523,9 @@
|
|
3438
3523
|
* would be have been if it were not rotated.
|
3439
3524
|
* @returns {Object} The bounding box with `x`, `y`, `width` and `height`
|
3440
3525
|
* properties.
|
3526
|
+
*
|
3527
|
+
* @sample highcharts/members/renderer-on-chart/
|
3528
|
+
* Draw a rectangle based on a text's bounding box
|
3441
3529
|
*/
|
3442
3530
|
getBBox: function(reload, rot) {
|
3443
3531
|
var wrapper = this,
|
@@ -3598,7 +3686,7 @@
|
|
3598
3686
|
* `inherit` rather than `visible`. The difference is that an element with
|
3599
3687
|
* `visibility="visible"` will be visible even if the parent is hidden.
|
3600
3688
|
*
|
3601
|
-
* @returns {SVGElement} Returns the SVGElement for chaining.
|
3689
|
+
* @returns {Highcharts.SVGElement} Returns the SVGElement for chaining.
|
3602
3690
|
*/
|
3603
3691
|
show: function(inherit) {
|
3604
3692
|
return this.attr({
|
@@ -3610,7 +3698,7 @@
|
|
3610
3698
|
* Hide the element, equivalent to setting the `visibility` attribute to
|
3611
3699
|
* `hidden`.
|
3612
3700
|
*
|
3613
|
-
* @returns {SVGElement} Returns the SVGElement for chaining.
|
3701
|
+
* @returns {Highcharts.SVGElement} Returns the SVGElement for chaining.
|
3614
3702
|
*/
|
3615
3703
|
hide: function() {
|
3616
3704
|
return this.attr({
|
@@ -3641,10 +3729,11 @@
|
|
3641
3729
|
/**
|
3642
3730
|
* Add the element to the DOM. All elements must be added this way.
|
3643
3731
|
*
|
3644
|
-
* @param {SVGElement|SVGDOMElement} [parent] The parent item to add it to.
|
3645
|
-
* If undefined, the element is added to the {@link
|
3732
|
+
* @param {Highcharts.SVGElement|SVGDOMElement} [parent] The parent item to add it to.
|
3733
|
+
* If undefined, the element is added to the {@link
|
3734
|
+
* Highcharts.SVGRenderer.box}.
|
3646
3735
|
*
|
3647
|
-
* @returns {SVGElement} Returns the SVGElement for chaining.
|
3736
|
+
* @returns {Highcharts.SVGElement} Returns the SVGElement for chaining.
|
3648
3737
|
*
|
3649
3738
|
* @sample highcharts/members/renderer-g - Elements added to a group
|
3650
3739
|
*/
|
@@ -3793,13 +3882,13 @@
|
|
3793
3882
|
* @param {boolean|ShadowOptions} shadowOptions The shadow options. If
|
3794
3883
|
* `true`, the default options are applied. If `false`, the current
|
3795
3884
|
* shadow will be removed.
|
3796
|
-
* @param {SVGElement} [group] The SVG group element where the shadows will
|
3885
|
+
* @param {Highcharts.SVGElement} [group] The SVG group element where the shadows will
|
3797
3886
|
* be applied. The default is to add it to the same parent as the current
|
3798
3887
|
* element. Internally, this is ised for pie slices, where all the
|
3799
3888
|
* shadows are added to an element behind all the slices.
|
3800
3889
|
* @param {boolean} [cutOff] Used internally for column shadows.
|
3801
3890
|
*
|
3802
|
-
* @returns {SVGElement} Returns the SVGElement for chaining.
|
3891
|
+
* @returns {Highcharts.SVGElement} Returns the SVGElement for chaining.
|
3803
3892
|
*
|
3804
3893
|
* @example
|
3805
3894
|
* renderer.rect(10, 100, 100, 100)
|
@@ -3884,7 +3973,8 @@
|
|
3884
3973
|
|
3885
3974
|
/**
|
3886
3975
|
* Get the current value of an attribute or pseudo attribute, used mainly
|
3887
|
-
* for animation. Called internally from the {@link
|
3976
|
+
* for animation. Called internally from the {@link
|
3977
|
+
* Highcharts.SVGRenderer#attr}
|
3888
3978
|
* function.
|
3889
3979
|
*
|
3890
3980
|
* @private
|
@@ -4059,7 +4149,7 @@
|
|
4059
4149
|
_defaultSetter: function(value, key, element) {
|
4060
4150
|
element.setAttribute(key, value);
|
4061
4151
|
}
|
4062
|
-
};
|
4152
|
+
});
|
4063
4153
|
|
4064
4154
|
// Some shared setters and getters
|
4065
4155
|
SVGElement.prototype.yGetter = SVGElement.prototype.xGetter;
|
@@ -4111,16 +4201,16 @@
|
|
4111
4201
|
* @sample highcharts/members/renderer-on-chart - Annotating a chart programmatically.
|
4112
4202
|
* @sample highcharts/members/renderer-basic - Independedt SVG drawing.
|
4113
4203
|
*
|
4114
|
-
* @class
|
4204
|
+
* @class Highcharts.SVGRenderer
|
4115
4205
|
*/
|
4116
4206
|
SVGRenderer = H.SVGRenderer = function() {
|
4117
4207
|
this.init.apply(this, arguments);
|
4118
4208
|
};
|
4119
|
-
SVGRenderer.prototype
|
4209
|
+
extend(SVGRenderer.prototype, /** @lends Highcharts.SVGRenderer.prototype */ {
|
4120
4210
|
/**
|
4121
4211
|
* A pointer to the renderer's associated Element class. The VMLRenderer
|
4122
4212
|
* will have a pointer to VMLElement here.
|
4123
|
-
* @type {SVGElement}
|
4213
|
+
* @type {Highcharts.SVGElement}
|
4124
4214
|
*/
|
4125
4215
|
Element: SVGElement,
|
4126
4216
|
SVG_NS: SVG_NS,
|
@@ -4159,7 +4249,7 @@
|
|
4159
4249
|
this.box = element;
|
4160
4250
|
/**
|
4161
4251
|
* The wrapper for the root `svg` node of the renderer.
|
4162
|
-
* @type {SVGElement}
|
4252
|
+
* @type {Highcharts.SVGElement}
|
4163
4253
|
*/
|
4164
4254
|
this.boxWrapper = boxWrapper;
|
4165
4255
|
renderer.alignedObjects = [];
|
@@ -4179,7 +4269,7 @@
|
|
4179
4269
|
|
4180
4270
|
// Add description
|
4181
4271
|
desc = this.createElement('desc').add();
|
4182
|
-
desc.element.appendChild(doc.createTextNode('Created with Highcharts 5.0.
|
4272
|
+
desc.element.appendChild(doc.createTextNode('Created with Highcharts 5.0.12'));
|
4183
4273
|
|
4184
4274
|
|
4185
4275
|
renderer.defs = this.createElement('defs').add();
|
@@ -4296,7 +4386,7 @@
|
|
4296
4386
|
* SVGRenderer#rect} or {@link SVGRenderer#text}.
|
4297
4387
|
*
|
4298
4388
|
* @param {string} nodeName - The node name, for example `rect`, `g` etc.
|
4299
|
-
* @returns {SVGElement} The generated SVGElement.
|
4389
|
+
* @returns {Highcharts.SVGElement} The generated SVGElement.
|
4300
4390
|
*/
|
4301
4391
|
createElement: function(nodeName) {
|
4302
4392
|
var wrapper = new this.Element();
|
@@ -4384,7 +4474,7 @@
|
|
4384
4474
|
* CSS text features like `width`, `text-overflow`, `white-space`, and
|
4385
4475
|
* also attributes like `href` and `style`.
|
4386
4476
|
* @private
|
4387
|
-
* @param {SVGElement} wrapper The parent SVGElement.
|
4477
|
+
* @param {Highcharts.SVGElement} wrapper The parent SVGElement.
|
4388
4478
|
*/
|
4389
4479
|
buildText: function(wrapper) {
|
4390
4480
|
var textNode = wrapper.element,
|
@@ -4461,7 +4551,7 @@
|
|
4461
4551
|
|
4462
4552
|
clsRegex = /<.*class="([^"]+)".*>/;
|
4463
4553
|
styleRegex = /<.*style="([^"]+)".*>/;
|
4464
|
-
hrefRegex = /<.*href="(
|
4554
|
+
hrefRegex = /<.*href="([^"]+)".*>/;
|
4465
4555
|
|
4466
4556
|
if (tempParent) {
|
4467
4557
|
tempParent.appendChild(textNode); // attach it to the DOM to read offset width
|
@@ -4848,13 +4938,19 @@
|
|
4848
4938
|
* var path = renderer.path(['M', 10, 10, 'L', 30, 30, 'z'])
|
4849
4939
|
* .attr({ stroke: '#ff00ff' })
|
4850
4940
|
* .add();
|
4851
|
-
* @returns {SVGElement} The generated wrapper element.
|
4941
|
+
* @returns {Highcharts.SVGElement} The generated wrapper element.
|
4942
|
+
*
|
4943
|
+
* @sample highcharts/members/renderer-path-on-chart/
|
4944
|
+
* Draw a path in a chart
|
4945
|
+
* @sample highcharts/members/renderer-path/
|
4946
|
+
* Draw a path independent from a chart
|
4947
|
+
*
|
4852
4948
|
*/
|
4853
4949
|
/**
|
4854
4950
|
* Draw a path, wraps the SVG `path` element.
|
4855
4951
|
*
|
4856
4952
|
* @param {SVGAttributes} [attribs] The initial attributes.
|
4857
|
-
* @returns {SVGElement} The generated wrapper element.
|
4953
|
+
* @returns {Highcharts.SVGElement} The generated wrapper element.
|
4858
4954
|
*/
|
4859
4955
|
path: function(path) {
|
4860
4956
|
var attribs = {
|
@@ -4876,13 +4972,15 @@
|
|
4876
4972
|
* @param {number} [x] The center x position.
|
4877
4973
|
* @param {number} [y] The center y position.
|
4878
4974
|
* @param {number} [r] The radius.
|
4879
|
-
* @returns {SVGElement} The generated wrapper element.
|
4975
|
+
* @returns {Highcharts.SVGElement} The generated wrapper element.
|
4976
|
+
*
|
4977
|
+
* @sample highcharts/members/renderer-circle/ Drawing a circle
|
4880
4978
|
*/
|
4881
4979
|
/**
|
4882
4980
|
* Draw a circle, wraps the SVG `circle` element.
|
4883
4981
|
*
|
4884
4982
|
* @param {SVGAttributes} [attribs] The initial attributes.
|
4885
|
-
* @returns {SVGElement} The generated wrapper element.
|
4983
|
+
* @returns {Highcharts.SVGElement} The generated wrapper element.
|
4886
4984
|
*/
|
4887
4985
|
circle: function(x, y, r) {
|
4888
4986
|
var attribs = isObject(x) ? x : {
|
@@ -4910,12 +5008,15 @@
|
|
4910
5008
|
* 0 is to the right and `-Math.PI/2` is up.
|
4911
5009
|
* @param {number} [end=0] The ending angle of the arc in radians, where 0
|
4912
5010
|
* is to the right and `-Math.PI/2` is up.
|
4913
|
-
* @returns {SVGElement} The generated wrapper element.
|
5011
|
+
* @returns {Highcharts.SVGElement} The generated wrapper element.
|
5012
|
+
*
|
5013
|
+
* @sample highcharts/members/renderer-arc/
|
5014
|
+
* Drawing an arc
|
4914
5015
|
*/
|
4915
5016
|
/**
|
4916
5017
|
* Draw and return an arc. Overloaded function that takes arguments object.
|
4917
5018
|
* @param {SVGAttributes} attribs Initial SVG attributes.
|
4918
|
-
* @returns {SVGElement} The generated wrapper element.
|
5019
|
+
* @returns {Highcharts.SVGElement} The generated wrapper element.
|
4919
5020
|
*/
|
4920
5021
|
arc: function(x, y, r, innerR, start, end) {
|
4921
5022
|
var arc,
|
@@ -4953,13 +5054,19 @@
|
|
4953
5054
|
* @param {number} [r] Border corner radius.
|
4954
5055
|
* @param {number} [strokeWidth] A stroke width can be supplied to allow
|
4955
5056
|
* crisp drawing.
|
4956
|
-
* @returns {SVGElement} The generated wrapper element.
|
5057
|
+
* @returns {Highcharts.SVGElement} The generated wrapper element.
|
4957
5058
|
*/
|
4958
5059
|
/**
|
4959
5060
|
* Draw and return a rectangle.
|
4960
|
-
* @param
|
4961
|
-
*
|
4962
|
-
* @
|
5061
|
+
* @param {SVGAttributes} [attributes]
|
5062
|
+
* General SVG attributes for the rectangle.
|
5063
|
+
* @return {Highcharts.SVGElement}
|
5064
|
+
* The generated wrapper element.
|
5065
|
+
*
|
5066
|
+
* @sample highcharts/members/renderer-rect-on-chart/
|
5067
|
+
* Draw a rectangle in a chart
|
5068
|
+
* @sample highcharts/members/renderer-rect/
|
5069
|
+
* Draw a rectangle independent from a chart
|
4963
5070
|
*/
|
4964
5071
|
rect: function(x, y, width, height, r, strokeWidth) {
|
4965
5072
|
|
@@ -5028,11 +5135,16 @@
|
|
5028
5135
|
},
|
5029
5136
|
|
5030
5137
|
/**
|
5031
|
-
* Create and return an svg group element.
|
5138
|
+
* Create and return an svg group element. Child {@link Highcharts.SVGElement}
|
5139
|
+
* objects are added to the group by using the group as the first parameter
|
5140
|
+
* in {@link Highcharts.SVGElement#add|add()}.
|
5032
5141
|
*
|
5033
5142
|
* @param {string} [name] The group will be given a class name of
|
5034
5143
|
* `highcharts-{name}`. This can be used for styling and scripting.
|
5035
|
-
* @returns {SVGElement} The generated wrapper element.
|
5144
|
+
* @returns {Highcharts.SVGElement} The generated wrapper element.
|
5145
|
+
*
|
5146
|
+
* @sample highcharts/members/renderer-g/
|
5147
|
+
* Show and hide grouped objects
|
5036
5148
|
*/
|
5037
5149
|
g: function(name) {
|
5038
5150
|
var elem = this.createElement('g');
|
@@ -5050,7 +5162,12 @@
|
|
5050
5162
|
* image file width.
|
5051
5163
|
* @param {number} [height] The image height. If omitted it defaults to the
|
5052
5164
|
* image file height.
|
5053
|
-
* @returns {SVGElement} The generated wrapper element.
|
5165
|
+
* @returns {Highcharts.SVGElement} The generated wrapper element.
|
5166
|
+
*
|
5167
|
+
* @sample highcharts/members/renderer-image-on-chart/
|
5168
|
+
* Add an image in a chart
|
5169
|
+
* @sample highcharts/members/renderer-image/
|
5170
|
+
* Add an image independent of a chart
|
5054
5171
|
*/
|
5055
5172
|
image: function(src, x, y, width, height) {
|
5056
5173
|
var attribs = {
|
@@ -5463,7 +5580,7 @@
|
|
5463
5580
|
},
|
5464
5581
|
|
5465
5582
|
/**
|
5466
|
-
* @typedef {SVGElement} ClipRect - A clipping rectangle that can be applied
|
5583
|
+
* @typedef {Highcharts.SVGElement} ClipRect - A clipping rectangle that can be applied
|
5467
5584
|
* to one or more {@link SVGElement} instances. It is instanciated with the
|
5468
5585
|
* {@link SVGRenderer#clipRect} function and applied with the {@link
|
5469
5586
|
* SVGElement#clip} function.
|
@@ -5507,11 +5624,27 @@
|
|
5507
5624
|
|
5508
5625
|
|
5509
5626
|
/**
|
5510
|
-
*
|
5511
|
-
*
|
5512
|
-
* @
|
5513
|
-
*
|
5514
|
-
* @param
|
5627
|
+
* Draw text. The text can contain a subset of HTML, like spans and anchors
|
5628
|
+
* and some basic text styling of these. For more advanced features like
|
5629
|
+
* border and background, use {@link Highcharts.SVGRenderer#label} instead.
|
5630
|
+
* To update the text after render, run `text.attr({ text: 'New text' })`.
|
5631
|
+
* @param {String} str
|
5632
|
+
* The text of (subset) HTML to draw.
|
5633
|
+
* @param {number} x
|
5634
|
+
* The x position of the text's lower left corner.
|
5635
|
+
* @param {number} y
|
5636
|
+
* The y position of the text's lower left corner.
|
5637
|
+
* @param {Boolean} [useHTML=false]
|
5638
|
+
* Use HTML to render the text.
|
5639
|
+
*
|
5640
|
+
* @return {Highcharts.SVGElement} The text object.
|
5641
|
+
*
|
5642
|
+
* @sample highcharts/members/renderer-text-on-chart/
|
5643
|
+
* Annotate the chart freely
|
5644
|
+
* @sample highcharts/members/renderer-on-chart/
|
5645
|
+
* Annotate with a border and in response to the data
|
5646
|
+
* @sample highcharts/members/renderer-text/
|
5647
|
+
* Formatted text
|
5515
5648
|
*/
|
5516
5649
|
text: function(str, x, y, useHTML) {
|
5517
5650
|
|
@@ -5626,20 +5759,42 @@
|
|
5626
5759
|
},
|
5627
5760
|
|
5628
5761
|
/**
|
5629
|
-
*
|
5630
|
-
*
|
5631
|
-
* `
|
5762
|
+
* Draw a label, which is an extended text element with support for border
|
5763
|
+
* and background. Highcharts creates a `g` element with a text and a `path`
|
5764
|
+
* or `rect` inside, to make it behave somewhat like a HTML div. Border and
|
5765
|
+
* background are set through `stroke`, `stroke-width` and `fill` attributes
|
5766
|
+
* using the {@link Highcharts.SVGElement#attr|attr} method. To update the
|
5767
|
+
* text after render, run `label.attr({ text: 'New text' })`.
|
5632
5768
|
*
|
5633
|
-
* @param
|
5634
|
-
*
|
5635
|
-
* @param
|
5636
|
-
*
|
5637
|
-
* @param
|
5638
|
-
*
|
5639
|
-
*
|
5640
|
-
* @param
|
5641
|
-
*
|
5642
|
-
*
|
5769
|
+
* @param {string} str
|
5770
|
+
* The initial text string or (subset) HTML to render.
|
5771
|
+
* @param {number} x
|
5772
|
+
* The x position of the label's left side.
|
5773
|
+
* @param {number} y
|
5774
|
+
* The y position of the label's top side or baseline, depending on
|
5775
|
+
* the `baseline` parameter.
|
5776
|
+
* @param {String} shape
|
5777
|
+
* The shape of the label's border/background, if any. Defaults to
|
5778
|
+
* `rect`. Other possible values are `callout` or other shapes
|
5779
|
+
* defined in {@link Highcharts.SVGRenderer#symbols}.
|
5780
|
+
* @param {number} anchorX
|
5781
|
+
* In case the `shape` has a pointer, like a flag, this is the
|
5782
|
+
* coordinates it should be pinned to.
|
5783
|
+
* @param {number} anchorY
|
5784
|
+
* In case the `shape` has a pointer, like a flag, this is the
|
5785
|
+
* coordinates it should be pinned to.
|
5786
|
+
* @param {Boolean} baseline
|
5787
|
+
* Whether to position the label relative to the text baseline,
|
5788
|
+
* like {@link Highcharts.SVGRenderer#text|renderer.text}, or to the
|
5789
|
+
* upper border of the rectangle.
|
5790
|
+
* @param {String} className
|
5791
|
+
* Class name for the group.
|
5792
|
+
*
|
5793
|
+
* @return {Highcharts.SVGElement}
|
5794
|
+
* The generated label.
|
5795
|
+
*
|
5796
|
+
* @sample highcharts/members/renderer-label-on-chart/
|
5797
|
+
* A label on the chart
|
5643
5798
|
*/
|
5644
5799
|
label: function(str, x, y, shape, anchorX, anchorY, useHTML, baseline, className) {
|
5645
5800
|
|
@@ -5959,7 +6114,7 @@
|
|
5959
6114
|
}
|
5960
6115
|
});
|
5961
6116
|
}
|
5962
|
-
}; // end SVGRenderer
|
6117
|
+
}); // end SVGRenderer
|
5963
6118
|
|
5964
6119
|
|
5965
6120
|
// general renderer
|
@@ -7527,7 +7682,7 @@
|
|
7527
7682
|
useUTC: true,
|
7528
7683
|
//timezoneOffset: 0,
|
7529
7684
|
|
7530
|
-
VMLRadialGradientURL: 'http://code.highcharts.com/5.0.
|
7685
|
+
VMLRadialGradientURL: 'http://code.highcharts.com/5.0.12/gfx/vml-radial-gradient.png'
|
7531
7686
|
|
7532
7687
|
},
|
7533
7688
|
chart: {
|
@@ -7643,7 +7798,8 @@
|
|
7643
7798
|
itemStyle: {
|
7644
7799
|
color: '#333333',
|
7645
7800
|
fontSize: '12px',
|
7646
|
-
fontWeight: 'bold'
|
7801
|
+
fontWeight: 'bold',
|
7802
|
+
textOverflow: 'ellipsis'
|
7647
7803
|
},
|
7648
7804
|
itemHoverStyle: {
|
7649
7805
|
//cursor: 'pointer', removed as of #601
|
@@ -7896,6 +8052,7 @@
|
|
7896
8052
|
this.pos = pos;
|
7897
8053
|
this.type = type || '';
|
7898
8054
|
this.isNew = true;
|
8055
|
+
this.isNewLabel = true;
|
7899
8056
|
|
7900
8057
|
if (!type && !noLabel) {
|
7901
8058
|
this.addLabel();
|
@@ -8335,9 +8492,11 @@
|
|
8335
8492
|
// Set the new position, and show or hide
|
8336
8493
|
if (show && isNumber(xy.y)) {
|
8337
8494
|
xy.opacity = opacity;
|
8338
|
-
label[tick.
|
8495
|
+
label[tick.isNewLabel ? 'attr' : 'animate'](xy);
|
8496
|
+
tick.isNewLabel = false;
|
8339
8497
|
} else {
|
8340
8498
|
label.attr('y', -9999); // #1338
|
8499
|
+
tick.isNewLabel = true;
|
8341
8500
|
}
|
8342
8501
|
tick.isNew = false;
|
8343
8502
|
}
|
@@ -8422,7 +8581,7 @@
|
|
8422
8581
|
|
8423
8582
|
/**
|
8424
8583
|
* Create a new axis object. Called internally when instanciating a new chart or
|
8425
|
-
* adding axes by {@link Chart#addAxis}.
|
8584
|
+
* adding axes by {@link Highcharts.Chart#addAxis}.
|
8426
8585
|
*
|
8427
8586
|
* A chart can have from 0 axes (pie chart) to multiples. In a normal, single
|
8428
8587
|
* series cartesian chart, there is one X axis and one Y axis.
|
@@ -8455,7 +8614,10 @@
|
|
8455
8614
|
H.extend(Axis.prototype, /** @lends Highcharts.Axis.prototype */ {
|
8456
8615
|
|
8457
8616
|
/**
|
8458
|
-
* Default options for the X axis - the Y axis has extended defaults
|
8617
|
+
* Default options for the X axis - the Y axis has extended defaults.
|
8618
|
+
*
|
8619
|
+
* @private
|
8620
|
+
* @type {Object}
|
8459
8621
|
*/
|
8460
8622
|
defaultOptions: {
|
8461
8623
|
// allowDecimals: null,
|
@@ -8558,7 +8720,10 @@
|
|
8558
8720
|
},
|
8559
8721
|
|
8560
8722
|
/**
|
8561
|
-
* This options set extends the defaultOptions for Y axes
|
8723
|
+
* This options set extends the defaultOptions for Y axes.
|
8724
|
+
*
|
8725
|
+
* @private
|
8726
|
+
* @type {Object}
|
8562
8727
|
*/
|
8563
8728
|
defaultYAxisOptions: {
|
8564
8729
|
endOnTick: true,
|
@@ -8602,7 +8767,10 @@
|
|
8602
8767
|
},
|
8603
8768
|
|
8604
8769
|
/**
|
8605
|
-
* These options extend the defaultOptions for left axes
|
8770
|
+
* These options extend the defaultOptions for left axes.
|
8771
|
+
*
|
8772
|
+
* @private
|
8773
|
+
* @type {Object}
|
8606
8774
|
*/
|
8607
8775
|
defaultLeftAxisOptions: {
|
8608
8776
|
labels: {
|
@@ -8614,7 +8782,10 @@
|
|
8614
8782
|
},
|
8615
8783
|
|
8616
8784
|
/**
|
8617
|
-
* These options extend the defaultOptions for right axes
|
8785
|
+
* These options extend the defaultOptions for right axes.
|
8786
|
+
*
|
8787
|
+
* @private
|
8788
|
+
* @type {Object}
|
8618
8789
|
*/
|
8619
8790
|
defaultRightAxisOptions: {
|
8620
8791
|
labels: {
|
@@ -8626,7 +8797,10 @@
|
|
8626
8797
|
},
|
8627
8798
|
|
8628
8799
|
/**
|
8629
|
-
* These options extend the defaultOptions for bottom axes
|
8800
|
+
* These options extend the defaultOptions for bottom axes.
|
8801
|
+
*
|
8802
|
+
* @private
|
8803
|
+
* @type {Object}
|
8630
8804
|
*/
|
8631
8805
|
defaultBottomAxisOptions: {
|
8632
8806
|
labels: {
|
@@ -8640,7 +8814,10 @@
|
|
8640
8814
|
}
|
8641
8815
|
},
|
8642
8816
|
/**
|
8643
|
-
* These options extend the defaultOptions for top axes
|
8817
|
+
* These options extend the defaultOptions for top axes.
|
8818
|
+
*
|
8819
|
+
* @private
|
8820
|
+
* @type {Object}
|
8644
8821
|
*/
|
8645
8822
|
defaultTopAxisOptions: {
|
8646
8823
|
labels: {
|
@@ -8666,7 +8843,7 @@
|
|
8666
8843
|
axis.chart = chart;
|
8667
8844
|
|
8668
8845
|
// Flag, is the axis horizontal
|
8669
|
-
axis.horiz = chart.inverted ? !isXAxis : isXAxis;
|
8846
|
+
axis.horiz = chart.inverted && !axis.isZAxis ? !isXAxis : isXAxis;
|
8670
8847
|
|
8671
8848
|
// Flag, isXAxis
|
8672
8849
|
axis.isXAxis = isXAxis;
|
@@ -8795,7 +8972,7 @@
|
|
8795
8972
|
axis.series = axis.series || []; // populated by Series
|
8796
8973
|
|
8797
8974
|
// inverted charts have reversed xAxes as default
|
8798
|
-
if (chart.inverted && isXAxis && axis.reversed === undefined) {
|
8975
|
+
if (chart.inverted && !axis.isZAxis && isXAxis && axis.reversed === undefined) {
|
8799
8976
|
axis.reversed = true;
|
8800
8977
|
}
|
8801
8978
|
|
@@ -8833,7 +9010,11 @@
|
|
8833
9010
|
|
8834
9011
|
/**
|
8835
9012
|
* The default label formatter. The context is a special config object for
|
8836
|
-
* the label.
|
9013
|
+
* the label. In apps, use the {@link
|
9014
|
+
* https://api.highcharts.com/highcharts/xAxis.labels.formatter|
|
9015
|
+
* labels.formatter} instead except when a modification is needed.
|
9016
|
+
*
|
9017
|
+
* @private
|
8837
9018
|
*/
|
8838
9019
|
defaultLabelFormatter: function() {
|
8839
9020
|
var axis = this.axis,
|
@@ -9138,7 +9319,18 @@
|
|
9138
9319
|
},
|
9139
9320
|
|
9140
9321
|
/**
|
9141
|
-
*
|
9322
|
+
* Internal function to et the tick positions of a linear axis to round
|
9323
|
+
* values like whole tens or every five.
|
9324
|
+
*
|
9325
|
+
* @param {Number} tickInterval
|
9326
|
+
* The normalized tick interval
|
9327
|
+
* @param {Number} min
|
9328
|
+
* Axis minimum.
|
9329
|
+
* @param {Number} max
|
9330
|
+
* Axis maximum.
|
9331
|
+
*
|
9332
|
+
* @return {Array.<Number>}
|
9333
|
+
* An array of numbers where ticks should be placed.
|
9142
9334
|
*/
|
9143
9335
|
getLinearTickPositions: function(tickInterval, min, max) {
|
9144
9336
|
var pos,
|
@@ -9244,6 +9436,8 @@
|
|
9244
9436
|
* not yet processed, so we don't have information on data cropping and grouping, or
|
9245
9437
|
* updated axis.pointRange or series.pointRange. The data can't be processed until
|
9246
9438
|
* we have finally established min and max.
|
9439
|
+
*
|
9440
|
+
* @private
|
9247
9441
|
*/
|
9248
9442
|
adjustForMinRange: function() {
|
9249
9443
|
var axis = this,
|
@@ -9251,7 +9445,7 @@
|
|
9251
9445
|
min = axis.min,
|
9252
9446
|
max = axis.max,
|
9253
9447
|
zoomOffset,
|
9254
|
-
spaceAvailable
|
9448
|
+
spaceAvailable,
|
9255
9449
|
closestDataRange,
|
9256
9450
|
i,
|
9257
9451
|
distance,
|
@@ -9287,6 +9481,8 @@
|
|
9287
9481
|
|
9288
9482
|
// if minRange is exceeded, adjust
|
9289
9483
|
if (max - min < axis.minRange) {
|
9484
|
+
|
9485
|
+
spaceAvailable = axis.dataMax - axis.dataMin >= axis.minRange;
|
9290
9486
|
minRange = axis.minRange;
|
9291
9487
|
zoomOffset = (minRange - max + min) / 2;
|
9292
9488
|
|
@@ -9318,7 +9514,9 @@
|
|
9318
9514
|
},
|
9319
9515
|
|
9320
9516
|
/**
|
9321
|
-
* Find the closestPointRange across all series
|
9517
|
+
* Find the closestPointRange across all series.
|
9518
|
+
*
|
9519
|
+
* @private
|
9322
9520
|
*/
|
9323
9521
|
getClosest: function() {
|
9324
9522
|
var ret;
|
@@ -9385,7 +9583,7 @@
|
|
9385
9583
|
|
9386
9584
|
if (this.names.length > 0) {
|
9387
9585
|
this.names.length = 0;
|
9388
|
-
this.minRange =
|
9586
|
+
this.minRange = this.userMinRange; // Reset
|
9389
9587
|
each(this.series || [], function(series) {
|
9390
9588
|
|
9391
9589
|
// Reset incrementer (#5928)
|
@@ -9843,8 +10041,11 @@
|
|
9843
10041
|
},
|
9844
10042
|
|
9845
10043
|
/**
|
9846
|
-
* Check if there are multiple axes in the same pane
|
9847
|
-
*
|
10044
|
+
* Check if there are multiple axes in the same pane.
|
10045
|
+
*
|
10046
|
+
* @private
|
10047
|
+
* @return {Boolean}
|
10048
|
+
* True if there are other axes.
|
9848
10049
|
*/
|
9849
10050
|
alignToOthers: function() {
|
9850
10051
|
var others = {}, // Whether there is another axis to pair with this one
|
@@ -9913,7 +10114,9 @@
|
|
9913
10114
|
|
9914
10115
|
/**
|
9915
10116
|
* When using multiple axes, adjust the number of ticks to match the highest
|
9916
|
-
* number of ticks in that group
|
10117
|
+
* number of ticks in that group.
|
10118
|
+
*
|
10119
|
+
* @private
|
9917
10120
|
*/
|
9918
10121
|
adjustTickAmount: function() {
|
9919
10122
|
var tickInterval = this.tickInterval,
|
@@ -10017,24 +10220,28 @@
|
|
10017
10220
|
* will not allow a range lower than the `minRange` option, which by default
|
10018
10221
|
* is the range of five points.
|
10019
10222
|
*
|
10020
|
-
* @param
|
10021
|
-
*
|
10022
|
-
* @param
|
10023
|
-
*
|
10024
|
-
* @param
|
10025
|
-
*
|
10026
|
-
*
|
10027
|
-
* @param
|
10028
|
-
*
|
10029
|
-
* @param
|
10030
|
-
*
|
10223
|
+
* @param {Number} [newMin]
|
10224
|
+
* The new minimum value.
|
10225
|
+
* @param {Number} [newMax]
|
10226
|
+
* The new maximum value.
|
10227
|
+
* @param {Boolean} [redraw=true]
|
10228
|
+
* Whether to redraw the chart or wait for an explicit call to
|
10229
|
+
* {@link Highcharts.Chart#redraw}
|
10230
|
+
* @param {AnimationOptions} [animation=true]
|
10231
|
+
* Enable or modify animations.
|
10232
|
+
* @param {Object} [eventArguments]
|
10233
|
+
* Arguments to be accessed in event handler.
|
10031
10234
|
*
|
10032
10235
|
* @sample highcharts/members/axis-setextremes/
|
10033
|
-
*
|
10236
|
+
* Set extremes from a button
|
10034
10237
|
* @sample highcharts/members/axis-setextremes-datetime/
|
10035
|
-
*
|
10238
|
+
* Set extremes on a datetime axis
|
10036
10239
|
* @sample highcharts/members/axis-setextremes-off-ticks/
|
10037
|
-
*
|
10240
|
+
* Set extremes off ticks
|
10241
|
+
* @sample stock/members/axis-setextremes/
|
10242
|
+
* Set extremes in Highstock
|
10243
|
+
* @sample maps/members/axis-setextremes/
|
10244
|
+
* Set extremes in Highmaps
|
10038
10245
|
*/
|
10039
10246
|
setExtremes: function(newMin, newMax, redraw, animation, eventArguments) {
|
10040
10247
|
var axis = this,
|
@@ -10174,7 +10381,11 @@
|
|
10174
10381
|
*
|
10175
10382
|
* @returns {Extremes}
|
10176
10383
|
* An object containing extremes information.
|
10177
|
-
*
|
10384
|
+
*
|
10385
|
+
* @sample members/axis-getextremes/
|
10386
|
+
* Report extremes by click on a button
|
10387
|
+
* @sample maps/members/axis-getextremes/
|
10388
|
+
* Get extremes in Highmaps
|
10178
10389
|
*/
|
10179
10390
|
getExtremes: function() {
|
10180
10391
|
var axis = this,
|
@@ -10214,8 +10425,13 @@
|
|
10214
10425
|
},
|
10215
10426
|
|
10216
10427
|
/**
|
10217
|
-
* Compute auto alignment for the axis label based on which side the axis is
|
10218
|
-
* and the given rotation for the label
|
10428
|
+
* Compute auto alignment for the axis label based on which side the axis is
|
10429
|
+
* on and the given rotation for the label.
|
10430
|
+
*
|
10431
|
+
* @param {Number} rotation
|
10432
|
+
* The rotation in degrees as set by either the `rotation` or
|
10433
|
+
* `autoRotation` options.
|
10434
|
+
* @private
|
10219
10435
|
*/
|
10220
10436
|
autoLabelAlign: function(rotation) {
|
10221
10437
|
var ret,
|
@@ -10255,9 +10471,10 @@
|
|
10255
10471
|
* Return the size of the labels
|
10256
10472
|
*/
|
10257
10473
|
labelMetrics: function() {
|
10474
|
+
var index = this.tickPositions && this.tickPositions[0] || 0;
|
10258
10475
|
return this.chart.renderer.fontMetrics(
|
10259
10476
|
this.options.labels.style && this.options.labels.style.fontSize,
|
10260
|
-
this.ticks[
|
10477
|
+
this.ticks[index] && this.ticks[index].label
|
10261
10478
|
);
|
10262
10479
|
},
|
10263
10480
|
|
@@ -10525,8 +10742,12 @@
|
|
10525
10742
|
|
10526
10743
|
/**
|
10527
10744
|
* Generates a tick for initial positioning.
|
10528
|
-
*
|
10529
|
-
* @
|
10745
|
+
*
|
10746
|
+
* @private
|
10747
|
+
* @param {number} pos
|
10748
|
+
* The tick position in axis values.
|
10749
|
+
* @param {number} i
|
10750
|
+
* The index of the tick in {@link Axis.tickPositions}.
|
10530
10751
|
*/
|
10531
10752
|
generateTick: function(pos) {
|
10532
10753
|
var ticks = this.ticks;
|
@@ -10550,7 +10771,7 @@
|
|
10550
10771
|
ticks = axis.ticks,
|
10551
10772
|
horiz = axis.horiz,
|
10552
10773
|
side = axis.side,
|
10553
|
-
invertedSide = chart.inverted ? [1, 0, 3, 2][side] : side,
|
10774
|
+
invertedSide = chart.inverted && !axis.isZAxis ? [1, 0, 3, 2][side] : side,
|
10554
10775
|
hasData,
|
10555
10776
|
showAxis,
|
10556
10777
|
titleOffset = 0,
|
@@ -10683,13 +10904,26 @@
|
|
10683
10904
|
0 // #4866
|
10684
10905
|
);
|
10685
10906
|
|
10686
|
-
// Decide the clipping needed to keep the graph inside the plot area and
|
10687
|
-
|
10688
|
-
|
10907
|
+
// Decide the clipping needed to keep the graph inside the plot area and
|
10908
|
+
// axis lines
|
10909
|
+
clip = Math.floor(axis.axisLine.strokeWidth() / 2) * 2; // #4308, #4371
|
10910
|
+
if (options.offset > 0) {
|
10911
|
+
clip -= options.offset * 2;
|
10912
|
+
}
|
10913
|
+
clipOffset[invertedSide] = Math.max(
|
10914
|
+
clipOffset[invertedSide] || clip,
|
10915
|
+
clip
|
10916
|
+
);
|
10689
10917
|
},
|
10690
10918
|
|
10691
10919
|
/**
|
10692
|
-
*
|
10920
|
+
* Internal function to get the path for the axis line. Extended for polar
|
10921
|
+
* charts.
|
10922
|
+
*
|
10923
|
+
* @param {Number} lineWidth
|
10924
|
+
* The line width in pixels.
|
10925
|
+
* @return {Array}
|
10926
|
+
* The SVG path definition in array form.
|
10693
10927
|
*/
|
10694
10928
|
getLinePath: function(lineWidth) {
|
10695
10929
|
var chart = this.chart,
|
@@ -10697,7 +10931,8 @@
|
|
10697
10931
|
offset = this.offset,
|
10698
10932
|
horiz = this.horiz,
|
10699
10933
|
lineLeft = this.left + (opposite ? this.width : 0) + offset,
|
10700
|
-
lineTop = chart.chartHeight - this.bottom -
|
10934
|
+
lineTop = chart.chartHeight - this.bottom -
|
10935
|
+
(opposite ? this.height : 0) + offset;
|
10701
10936
|
|
10702
10937
|
if (opposite) {
|
10703
10938
|
lineWidth *= -1; // crispify the other way - #1480, #1687
|
@@ -10968,11 +11203,14 @@
|
|
10968
11203
|
}
|
10969
11204
|
|
10970
11205
|
if (axisTitle && showAxis) {
|
10971
|
-
|
10972
|
-
|
10973
|
-
|
10974
|
-
|
10975
|
-
|
11206
|
+
var titleXy = axis.getTitlePosition();
|
11207
|
+
if (isNumber(titleXy.y)) {
|
11208
|
+
axisTitle[axisTitle.isNew ? 'attr' : 'animate'](titleXy);
|
11209
|
+
axisTitle.isNew = false;
|
11210
|
+
} else {
|
11211
|
+
axisTitle.attr('y', -9999);
|
11212
|
+
axisTitle.isNew = true;
|
11213
|
+
}
|
10976
11214
|
}
|
10977
11215
|
|
10978
11216
|
// Stacked totals:
|
@@ -11011,7 +11249,12 @@
|
|
11011
11249
|
keepProps: ['extKey', 'hcEvents', 'names', 'series', 'userMax', 'userMin'],
|
11012
11250
|
|
11013
11251
|
/**
|
11014
|
-
* Destroys an Axis instance.
|
11252
|
+
* Destroys an Axis instance. See {@link Axis#remove} for the API endpoint
|
11253
|
+
* to fully remove the axis.
|
11254
|
+
*
|
11255
|
+
* @private
|
11256
|
+
* @param {Boolean} keepEvents
|
11257
|
+
* Whether to preserve events, used internally in Axis.update.
|
11015
11258
|
*/
|
11016
11259
|
destroy: function(keepEvents) {
|
11017
11260
|
var axis = this,
|
@@ -11064,10 +11307,13 @@
|
|
11064
11307
|
},
|
11065
11308
|
|
11066
11309
|
/**
|
11067
|
-
*
|
11068
|
-
*
|
11069
|
-
* @param {
|
11070
|
-
*
|
11310
|
+
* Internal function to draw a crosshair.
|
11311
|
+
*
|
11312
|
+
* @param {PointerEvent} [e]
|
11313
|
+
* The event arguments from the modified pointer event, extended
|
11314
|
+
* with `chartX` and `chartY`
|
11315
|
+
* @param {Point} [point]
|
11316
|
+
* The Point object if the crosshair snaps to points.
|
11071
11317
|
*/
|
11072
11318
|
drawCrosshair: function(e, point) {
|
11073
11319
|
|
@@ -12413,6 +12659,18 @@
|
|
12413
12659
|
if (tooltip.split) {
|
12414
12660
|
this.renderSplit(text, pointOrPoints);
|
12415
12661
|
} else {
|
12662
|
+
|
12663
|
+
// Prevent the tooltip from flowing over the chart box (#6659)
|
12664
|
+
|
12665
|
+
if (!options.style.width) {
|
12666
|
+
|
12667
|
+
label.css({
|
12668
|
+
width: this.chart.spacingBox.width
|
12669
|
+
});
|
12670
|
+
|
12671
|
+
}
|
12672
|
+
|
12673
|
+
|
12416
12674
|
label.attr({
|
12417
12675
|
text: text && text.join ? text.join('') : text
|
12418
12676
|
});
|
@@ -12785,8 +13043,25 @@
|
|
12785
13043
|
},
|
12786
13044
|
|
12787
13045
|
/**
|
12788
|
-
*
|
12789
|
-
*
|
13046
|
+
* @typedef {Object} PointerEvent
|
13047
|
+
* A native browser mouse or touch event, extended with position
|
13048
|
+
* information relative to the {@link Chart.container}.
|
13049
|
+
* @property {Number} chartX
|
13050
|
+
* The X coordinate of the pointer interaction relative to the
|
13051
|
+
* chart.
|
13052
|
+
* @property {Number} chartY
|
13053
|
+
* The Y coordinate of the pointer interaction relative to the
|
13054
|
+
* chart.
|
13055
|
+
*
|
13056
|
+
*/
|
13057
|
+
/**
|
13058
|
+
* Add crossbrowser support for chartX and chartY.
|
13059
|
+
*
|
13060
|
+
* @param {Object} e
|
13061
|
+
* The event object in standard browsers.
|
13062
|
+
*
|
13063
|
+
* @return {PointerEvent}
|
13064
|
+
* A browser event with extended properties `chartX` and `chartY`
|
12790
13065
|
*/
|
12791
13066
|
normalize: function(e, chartPosition) {
|
12792
13067
|
var chartX,
|
@@ -12919,63 +13194,92 @@
|
|
12919
13194
|
return point;
|
12920
13195
|
},
|
12921
13196
|
|
12922
|
-
|
13197
|
+
getChartCoordinatesFromPoint: function(point, inverted) {
|
13198
|
+
var series = point.series,
|
13199
|
+
xAxis = series.xAxis,
|
13200
|
+
yAxis = series.yAxis;
|
13201
|
+
|
13202
|
+
if (xAxis && yAxis) {
|
13203
|
+
return inverted ? {
|
13204
|
+
chartX: xAxis.len + xAxis.pos - point.clientX,
|
13205
|
+
chartY: yAxis.len + yAxis.pos - point.plotY
|
13206
|
+
} : {
|
13207
|
+
chartX: point.clientX + xAxis.pos,
|
13208
|
+
chartY: point.plotY + yAxis.pos
|
13209
|
+
};
|
13210
|
+
}
|
13211
|
+
},
|
13212
|
+
|
13213
|
+
/**
|
13214
|
+
* Calculates what is the current hovered point/points and series.
|
13215
|
+
*
|
13216
|
+
* @private
|
13217
|
+
*
|
13218
|
+
* @param {undefined|Point} existingHoverPoint
|
13219
|
+
* The point currrently beeing hovered.
|
13220
|
+
* @param {undefined|Series} existingHoverSeries
|
13221
|
+
* The series currently beeing hovered.
|
13222
|
+
* @param {Array<.Series>} series
|
13223
|
+
* All the series in the chart.
|
13224
|
+
* @param {boolean} isDirectTouch
|
13225
|
+
* Is the pointer directly hovering the point.
|
13226
|
+
* @param {boolean} shared
|
13227
|
+
* Whether it is a shared tooltip or not.
|
13228
|
+
* @param {object} coordinates
|
13229
|
+
* Chart coordinates of the pointer.
|
13230
|
+
* @param {number} coordinates.chartX
|
13231
|
+
* @param {number} coordinates.chartY
|
13232
|
+
*
|
13233
|
+
* @return {object}
|
13234
|
+
* Object containing resulting hover data.
|
13235
|
+
*/
|
13236
|
+
getHoverData: function(
|
13237
|
+
existingHoverPoint,
|
13238
|
+
existingHoverSeries,
|
13239
|
+
series,
|
13240
|
+
isDirectTouch,
|
13241
|
+
shared,
|
13242
|
+
coordinates
|
13243
|
+
) {
|
12923
13244
|
var hoverPoint = existingHoverPoint,
|
12924
13245
|
hoverSeries = existingHoverSeries,
|
12925
|
-
searchSeries,
|
13246
|
+
searchSeries = shared ? series : [hoverSeries],
|
13247
|
+
useExisting = !!(isDirectTouch && existingHoverPoint),
|
13248
|
+
notSticky = hoverSeries && !hoverSeries.stickyTracking,
|
13249
|
+
isHoverPoint = function(point, i) {
|
13250
|
+
return i === 0;
|
13251
|
+
},
|
12926
13252
|
hoverPoints;
|
12927
13253
|
|
12928
|
-
// If
|
12929
|
-
// a noSharedTooltip series among shared
|
12930
|
-
//
|
12931
|
-
|
12932
|
-
|
12933
|
-
|
12934
|
-
|
12935
|
-
|
12936
|
-
|
12937
|
-
var noSharedTooltip = s.noSharedTooltip && shared,
|
12938
|
-
directTouch = !shared && s.directTouch,
|
12939
|
-
kdpointT;
|
12940
|
-
if (s.visible && !noSharedTooltip && !directTouch && pick(s.options.enableMouseTracking, true)) { // #3821
|
12941
|
-
kdpointT = s.searchKDTree({
|
12942
|
-
clientX: hoverPoint.clientX,
|
12943
|
-
plotY: hoverPoint.plotY
|
12944
|
-
}, !noSharedTooltip && s.kdDimensions === 1);
|
12945
|
-
if (kdpointT && kdpointT.series) { // Point.series becomes null when reset and before redraw (#5197)
|
12946
|
-
hoverPoints.push(kdpointT);
|
12947
|
-
}
|
12948
|
-
}
|
12949
|
-
});
|
12950
|
-
// If kdTree is not built
|
12951
|
-
if (hoverPoints.length === 0) {
|
12952
|
-
hoverPoints = [hoverPoint];
|
12953
|
-
}
|
12954
|
-
} else {
|
12955
|
-
hoverPoints = [hoverPoint];
|
12956
|
-
}
|
12957
|
-
// When the hovered series has stickyTracking false.
|
12958
|
-
} else if (hoverSeries && !hoverSeries.stickyTracking) {
|
12959
|
-
if (!shared) {
|
12960
|
-
series = [hoverSeries];
|
12961
|
-
}
|
12962
|
-
hoverPoints = this.getKDPoints(series, shared, e);
|
12963
|
-
hoverPoint = H.find(hoverPoints, function(p) {
|
13254
|
+
// If there is a hoverPoint and its series requires direct touch (like
|
13255
|
+
// columns, #3899), or we're on a noSharedTooltip series among shared
|
13256
|
+
// tooltip series (#4546), use the existing hoverPoint.
|
13257
|
+
if (useExisting) {
|
13258
|
+
isHoverPoint = function(p) {
|
13259
|
+
return p === existingHoverPoint;
|
13260
|
+
};
|
13261
|
+
} else if (notSticky) {
|
13262
|
+
isHoverPoint = function(p) {
|
12964
13263
|
return p.series === hoverSeries;
|
12965
|
-
}
|
12966
|
-
// When the hoverSeries has stickyTracking or there is no series hovered.
|
13264
|
+
};
|
12967
13265
|
} else {
|
12968
|
-
// Avoid series with stickyTracking
|
13266
|
+
// Avoid series with stickyTracking false
|
12969
13267
|
searchSeries = H.grep(series, function(s) {
|
12970
13268
|
return s.stickyTracking;
|
12971
13269
|
});
|
12972
|
-
|
12973
|
-
|
12974
|
-
|
12975
|
-
|
12976
|
-
|
12977
|
-
|
12978
|
-
|
13270
|
+
}
|
13271
|
+
hoverPoints = (useExisting && !shared) ?
|
13272
|
+
// Non-shared tooltips with directTouch don't use the k-d-tree
|
13273
|
+
[existingHoverPoint] :
|
13274
|
+
this.getKDPoints(searchSeries, shared, coordinates);
|
13275
|
+
hoverPoint = H.find(hoverPoints, isHoverPoint);
|
13276
|
+
hoverSeries = hoverPoint && hoverPoint.series;
|
13277
|
+
|
13278
|
+
// In this case we could only look for the hoverPoint in series with
|
13279
|
+
// stickyTracking, but we should still include all series in the shared
|
13280
|
+
// tooltip.
|
13281
|
+
if (!useExisting && !notSticky && shared) {
|
13282
|
+
hoverPoints = this.getKDPoints(series, shared, coordinates);
|
12979
13283
|
}
|
12980
13284
|
// Keep the order of series in tooltip
|
12981
13285
|
// Must be done after assigning of hoverPoint
|
@@ -13002,24 +13306,37 @@
|
|
13002
13306
|
hoverPoint = p || chart.hoverPoint,
|
13003
13307
|
hoverSeries = hoverPoint && hoverPoint.series || chart.hoverSeries,
|
13004
13308
|
// onMouseOver or already hovering a series with directTouch
|
13005
|
-
isDirectTouch = !!p || (
|
13006
|
-
|
13309
|
+
isDirectTouch = !!p || (
|
13310
|
+
(hoverSeries && hoverSeries.directTouch) &&
|
13311
|
+
pointer.isDirectTouch
|
13312
|
+
),
|
13313
|
+
hoverData = this.getHoverData(
|
13314
|
+
hoverPoint,
|
13315
|
+
hoverSeries,
|
13316
|
+
series,
|
13317
|
+
isDirectTouch,
|
13318
|
+
shared,
|
13319
|
+
e
|
13320
|
+
),
|
13007
13321
|
useSharedTooltip,
|
13008
13322
|
followPointer,
|
13009
13323
|
anchor,
|
13010
13324
|
points;
|
13011
|
-
|
13012
13325
|
// Update variables from hoverData.
|
13013
13326
|
hoverPoint = hoverData.hoverPoint;
|
13014
13327
|
hoverSeries = hoverData.hoverSeries;
|
13015
13328
|
followPointer = hoverSeries && hoverSeries.tooltipOptions.followPointer;
|
13016
|
-
useSharedTooltip =
|
13329
|
+
useSharedTooltip = (
|
13330
|
+
shared &&
|
13331
|
+
hoverPoint &&
|
13332
|
+
!hoverPoint.series.noSharedTooltip
|
13333
|
+
);
|
13017
13334
|
points = (useSharedTooltip ?
|
13018
13335
|
hoverData.hoverPoints :
|
13019
13336
|
(hoverPoint ? [hoverPoint] : [])
|
13020
13337
|
);
|
13021
|
-
|
13022
|
-
//
|
13338
|
+
// Refresh tooltip for kdpoint if new hover point or tooltip was hidden
|
13339
|
+
// #3926, #4200
|
13023
13340
|
if (
|
13024
13341
|
hoverPoint &&
|
13025
13342
|
// !(hoverSeries && hoverSeries.directTouch) &&
|
@@ -13040,13 +13357,11 @@
|
|
13040
13357
|
}
|
13041
13358
|
|
13042
13359
|
// If tracking is on series in stead of on each point,
|
13043
|
-
// fire mouseOver on hover point.
|
13044
|
-
if (
|
13045
|
-
|
13046
|
-
chart.hoverPoint.firePointEvent('mouseOut');
|
13047
|
-
}
|
13048
|
-
hoverPoint.firePointEvent('mouseOver');
|
13360
|
+
// fire mouseOver on hover point. // #4448
|
13361
|
+
if (chart.hoverPoint) {
|
13362
|
+
chart.hoverPoint.firePointEvent('mouseOut');
|
13049
13363
|
}
|
13364
|
+
hoverPoint.firePointEvent('mouseOver');
|
13050
13365
|
chart.hoverPoints = points;
|
13051
13366
|
chart.hoverPoint = hoverPoint;
|
13052
13367
|
// Draw tooltip if necessary
|
@@ -13077,12 +13392,14 @@
|
|
13077
13392
|
var snap = pick(axis.crosshair.snap, true);
|
13078
13393
|
if (!snap) {
|
13079
13394
|
axis.drawCrosshair(e);
|
13080
|
-
|
13395
|
+
|
13396
|
+
// Axis has snapping crosshairs, and one of the hover points belongs
|
13397
|
+
// to axis
|
13081
13398
|
} else if (H.find(points, function(p) {
|
13082
13399
|
return p.series[axis.coll] === axis;
|
13083
13400
|
})) {
|
13084
13401
|
axis.drawCrosshair(e, hoverPoint);
|
13085
|
-
//
|
13402
|
+
// Axis has snapping crosshairs, but no hover point belongs to axis
|
13086
13403
|
} else {
|
13087
13404
|
axis.hideCrosshair();
|
13088
13405
|
}
|
@@ -13090,9 +13407,12 @@
|
|
13090
13407
|
},
|
13091
13408
|
|
13092
13409
|
/**
|
13093
|
-
* Reset the tracking by hiding the tooltip, the hover series state and the
|
13410
|
+
* Reset the tracking by hiding the tooltip, the hover series state and the
|
13411
|
+
* hover point
|
13094
13412
|
*
|
13095
|
-
* @param allowMove {Boolean}
|
13413
|
+
* @param allowMove {Boolean}
|
13414
|
+
* Instead of destroying the tooltip altogether, allow moving it if
|
13415
|
+
* possible
|
13096
13416
|
*/
|
13097
13417
|
reset: function(allowMove, delay) {
|
13098
13418
|
var pointer = this,
|
@@ -13464,7 +13784,7 @@
|
|
13464
13784
|
onTrackerMouseOut: function(e) {
|
13465
13785
|
var series = this.chart.hoverSeries,
|
13466
13786
|
relatedTarget = e.relatedTarget || e.toElement;
|
13467
|
-
|
13787
|
+
this.isDirectTouch = false;
|
13468
13788
|
if (series && relatedTarget && !series.stickyTracking &&
|
13469
13789
|
!this.inClass(relatedTarget, 'highcharts-tooltip') &&
|
13470
13790
|
(!this.inClass(relatedTarget, 'highcharts-series-' + series.index) || // #2499, #4465
|
@@ -13973,13 +14293,13 @@
|
|
13973
14293
|
}
|
13974
14294
|
|
13975
14295
|
}(Highcharts));
|
13976
|
-
(function(
|
14296
|
+
(function(Highcharts) {
|
13977
14297
|
/**
|
13978
14298
|
* (c) 2010-2017 Torstein Honsi
|
13979
14299
|
*
|
13980
14300
|
* License: www.highcharts.com/license
|
13981
14301
|
*/
|
13982
|
-
var
|
14302
|
+
var H = Highcharts,
|
13983
14303
|
|
13984
14304
|
addEvent = H.addEvent,
|
13985
14305
|
css = H.css,
|
@@ -13994,15 +14314,19 @@
|
|
13994
14314
|
stableSort = H.stableSort,
|
13995
14315
|
win = H.win,
|
13996
14316
|
wrap = H.wrap;
|
14317
|
+
|
13997
14318
|
/**
|
13998
|
-
* The overview of the chart's series.
|
14319
|
+
* The overview of the chart's series. The legend object is instanciated
|
14320
|
+
* internally in the chart constructor, and available from `chart.legend`. Each
|
14321
|
+
* chart has only one legend.
|
14322
|
+
*
|
13999
14323
|
* @class
|
14000
14324
|
*/
|
14001
|
-
|
14325
|
+
Highcharts.Legend = function(chart, options) {
|
14002
14326
|
this.init(chart, options);
|
14003
14327
|
};
|
14004
14328
|
|
14005
|
-
Legend.prototype = {
|
14329
|
+
Highcharts.Legend.prototype = {
|
14006
14330
|
|
14007
14331
|
/**
|
14008
14332
|
* Initialize the legend
|
@@ -14046,10 +14370,15 @@
|
|
14046
14370
|
},
|
14047
14371
|
|
14048
14372
|
/**
|
14049
|
-
* Update the legend with new options. Equivalent to running chart.update
|
14373
|
+
* Update the legend with new options. Equivalent to running `chart.update`
|
14050
14374
|
* with a legend configuration option.
|
14051
|
-
* @param
|
14052
|
-
*
|
14375
|
+
* @param {LegendOptions} options
|
14376
|
+
* Legend options.
|
14377
|
+
* @param {Boolean} [redraw=true]
|
14378
|
+
* Whether to redraw the chart.
|
14379
|
+
*
|
14380
|
+
* @sample highcharts/legend/legend-update/
|
14381
|
+
* Legend update
|
14053
14382
|
*/
|
14054
14383
|
update: function(options, redraw) {
|
14055
14384
|
var chart = this.chart;
|
@@ -14313,6 +14642,9 @@
|
|
14313
14642
|
showCheckbox = legend.createCheckboxForItem &&
|
14314
14643
|
seriesOptions &&
|
14315
14644
|
seriesOptions.showCheckbox,
|
14645
|
+
// full width minus text width
|
14646
|
+
itemExtraWidth = symbolWidth + symbolPadding + itemDistance +
|
14647
|
+
(showCheckbox ? 20 : 0),
|
14316
14648
|
useHTML = options.useHTML,
|
14317
14649
|
fontSize = 12,
|
14318
14650
|
itemClassName = item.options.className;
|
@@ -14381,6 +14713,18 @@
|
|
14381
14713
|
// Colorize the items
|
14382
14714
|
legend.colorizeItem(item, item.visible);
|
14383
14715
|
|
14716
|
+
// Take care of max width and text overflow (#6659)
|
14717
|
+
|
14718
|
+
if (!itemStyle.width) {
|
14719
|
+
|
14720
|
+
li.css({
|
14721
|
+
width: (options.itemWidth || chart.spacingBox.width) -
|
14722
|
+
itemExtraWidth
|
14723
|
+
});
|
14724
|
+
|
14725
|
+
}
|
14726
|
+
|
14727
|
+
|
14384
14728
|
// Always update the text
|
14385
14729
|
legend.setText(item);
|
14386
14730
|
|
@@ -14390,8 +14734,7 @@
|
|
14390
14734
|
itemWidth = item.checkboxOffset =
|
14391
14735
|
options.itemWidth ||
|
14392
14736
|
item.legendItemWidth ||
|
14393
|
-
|
14394
|
-
(showCheckbox ? 20 : 0);
|
14737
|
+
bBox.width + itemExtraWidth;
|
14395
14738
|
legend.itemHeight = itemHeight = Math.round(
|
14396
14739
|
item.legendItemHeight || bBox.height || legend.symbolHeight
|
14397
14740
|
);
|
@@ -15011,7 +15354,7 @@
|
|
15011
15354
|
// to nested group elements, as the legend item texts are within 4 group
|
15012
15355
|
// elements.
|
15013
15356
|
if (/Trident\/7\.0/.test(win.navigator.userAgent) || isFirefox) {
|
15014
|
-
wrap(Legend.prototype, 'positionItem', function(proceed, item) {
|
15357
|
+
wrap(Highcharts.Legend.prototype, 'positionItem', function(proceed, item) {
|
15015
15358
|
var legend = this,
|
15016
15359
|
// If chart destroyed in sync, this is undefined (#2030)
|
15017
15360
|
runPositionItem = function() {
|
@@ -15223,6 +15566,30 @@
|
|
15223
15566
|
* @type {Array.<Highcharts.Series>}
|
15224
15567
|
*/
|
15225
15568
|
this.series = [];
|
15569
|
+
|
15570
|
+
/**
|
15571
|
+
* The chart title. The title has an `update` method that allows
|
15572
|
+
* modifying the options directly or indirectly via `chart.update`.
|
15573
|
+
*
|
15574
|
+
* @memberof Highcharts.Chart
|
15575
|
+
* @name title
|
15576
|
+
* @type Object
|
15577
|
+
*
|
15578
|
+
* @sample highcharts/members/title-update/
|
15579
|
+
* Updating titles
|
15580
|
+
*/
|
15581
|
+
|
15582
|
+
/**
|
15583
|
+
* The chart subtitle. The subtitle has an `update` method that allows
|
15584
|
+
* modifying the options directly or indirectly via `chart.update`.
|
15585
|
+
*
|
15586
|
+
* @memberof Highcharts.Chart
|
15587
|
+
* @name subtitle
|
15588
|
+
* @type Object
|
15589
|
+
*/
|
15590
|
+
|
15591
|
+
|
15592
|
+
|
15226
15593
|
this.hasCartesianSeries = optionsChart.showAxes;
|
15227
15594
|
//this.axisOffset = undefined;
|
15228
15595
|
//this.inverted = undefined;
|
@@ -15622,10 +15989,17 @@
|
|
15622
15989
|
},
|
15623
15990
|
|
15624
15991
|
/**
|
15625
|
-
*
|
15992
|
+
* Set a new title or subtitle for the chart.
|
15993
|
+
*
|
15994
|
+
* @param titleOptions {TitleOptions}
|
15995
|
+
* New title options.
|
15996
|
+
* @param subtitleOptions {SubtitleOptions}
|
15997
|
+
* New subtitle options.
|
15998
|
+
* @param redraw {Boolean}
|
15999
|
+
* Whether to redraw the chart or wait for a later call to
|
16000
|
+
* `chart.redraw()`.
|
15626
16001
|
*
|
15627
|
-
* @
|
15628
|
-
* @param subtitleOptions {Object} New subtitle options
|
16002
|
+
* @sample highcharts/members/chart-settitle/ Set title text and styles
|
15629
16003
|
*
|
15630
16004
|
*/
|
15631
16005
|
setTitle: function(titleOptions, subtitleOptions, redraw) {
|
@@ -15799,7 +16173,8 @@
|
|
15799
16173
|
* @param {Boolean} revert - Revert to the saved original styles.
|
15800
16174
|
*/
|
15801
16175
|
temporaryDisplay: function(revert) {
|
15802
|
-
var node = this.renderTo
|
16176
|
+
var node = this.renderTo,
|
16177
|
+
tempStyle;
|
15803
16178
|
if (!revert) {
|
15804
16179
|
while (node && node.style) {
|
15805
16180
|
if (getStyle(node, 'display', false) === 'none') {
|
@@ -15808,11 +16183,15 @@
|
|
15808
16183
|
height: node.style.height,
|
15809
16184
|
overflow: node.style.overflow
|
15810
16185
|
};
|
15811
|
-
|
16186
|
+
tempStyle = {
|
15812
16187
|
display: 'block',
|
15813
|
-
height: 0,
|
15814
16188
|
overflow: 'hidden'
|
15815
|
-
}
|
16189
|
+
};
|
16190
|
+
if (node !== this.renderTo) {
|
16191
|
+
tempStyle.height = 0;
|
16192
|
+
}
|
16193
|
+
|
16194
|
+
H.css(node, tempStyle);
|
15816
16195
|
if (node.style.setProperty) { // #2631
|
15817
16196
|
node.style.setProperty('display', 'block', 'important');
|
15818
16197
|
}
|
@@ -16123,6 +16502,8 @@
|
|
16123
16502
|
* Test resizing from buttons
|
16124
16503
|
* @sample highcharts/members/chart-setsize-jquery-resizable/
|
16125
16504
|
* Add a jQuery UI resizable
|
16505
|
+
* @sample stock/members/chart-setsize/
|
16506
|
+
* Highstock with UI resizable
|
16126
16507
|
*/
|
16127
16508
|
setSize: function(width, height, animation) {
|
16128
16509
|
var chart = this,
|
@@ -16208,6 +16589,11 @@
|
|
16208
16589
|
plotHeight,
|
16209
16590
|
plotBorderWidth;
|
16210
16591
|
|
16592
|
+
function clipOffsetSide(side) {
|
16593
|
+
var offset = clipOffset[side] || 0;
|
16594
|
+
return Math.max(plotBorderWidth || offset, offset) / 2;
|
16595
|
+
}
|
16596
|
+
|
16211
16597
|
chart.plotLeft = plotLeft = Math.round(chart.plotLeft);
|
16212
16598
|
chart.plotTop = plotTop = Math.round(chart.plotTop);
|
16213
16599
|
chart.plotWidth = plotWidth = Math.max(
|
@@ -16239,21 +16625,21 @@
|
|
16239
16625
|
};
|
16240
16626
|
|
16241
16627
|
plotBorderWidth = 2 * Math.floor(chart.plotBorderWidth / 2);
|
16242
|
-
clipX = Math.ceil(
|
16243
|
-
clipY = Math.ceil(
|
16628
|
+
clipX = Math.ceil(clipOffsetSide(3));
|
16629
|
+
clipY = Math.ceil(clipOffsetSide(0));
|
16244
16630
|
chart.clipBox = {
|
16245
16631
|
x: clipX,
|
16246
16632
|
y: clipY,
|
16247
16633
|
width: Math.floor(
|
16248
16634
|
chart.plotSizeX -
|
16249
|
-
|
16635
|
+
clipOffsetSide(1) -
|
16250
16636
|
clipX
|
16251
16637
|
),
|
16252
16638
|
height: Math.max(
|
16253
16639
|
0,
|
16254
16640
|
Math.floor(
|
16255
16641
|
chart.plotSizeY -
|
16256
|
-
|
16642
|
+
clipOffsetSide(2) -
|
16257
16643
|
clipY
|
16258
16644
|
)
|
16259
16645
|
)
|
@@ -16293,7 +16679,7 @@
|
|
16293
16679
|
chart[m] = pick(chart.margin[side], chart.spacing[side]);
|
16294
16680
|
});
|
16295
16681
|
chart.axisOffset = [0, 0, 0, 0]; // top, right, bottom, left
|
16296
|
-
chart.clipOffset = [
|
16682
|
+
chart.clipOffset = [];
|
16297
16683
|
},
|
16298
16684
|
|
16299
16685
|
/**
|
@@ -16702,7 +17088,10 @@
|
|
16702
17088
|
* before adding a second chart into the same container, as well as on
|
16703
17089
|
* window unload to prevent leaks.
|
16704
17090
|
*
|
16705
|
-
* @sample highcharts/members/chart-destroy/
|
17091
|
+
* @sample highcharts/members/chart-destroy/
|
17092
|
+
* Destroy the chart from a button
|
17093
|
+
* @sample stock/members/chart-destroy/
|
17094
|
+
* Destroy with Highstock
|
16706
17095
|
*/
|
16707
17096
|
destroy: function() {
|
16708
17097
|
var chart = this,
|
@@ -16882,13 +17271,14 @@
|
|
16882
17271
|
}); // end Chart
|
16883
17272
|
|
16884
17273
|
}(Highcharts));
|
16885
|
-
(function(
|
17274
|
+
(function(Highcharts) {
|
16886
17275
|
/**
|
16887
17276
|
* (c) 2010-2017 Torstein Honsi
|
16888
17277
|
*
|
16889
17278
|
* License: www.highcharts.com/license
|
16890
17279
|
*/
|
16891
17280
|
var Point,
|
17281
|
+
H = Highcharts,
|
16892
17282
|
|
16893
17283
|
each = H.each,
|
16894
17284
|
extend = H.extend,
|
@@ -16901,18 +17291,19 @@
|
|
16901
17291
|
removeEvent = H.removeEvent;
|
16902
17292
|
|
16903
17293
|
/**
|
16904
|
-
* The Point object. The point objects are generated from the series.data
|
17294
|
+
* The Point object. The point objects are generated from the `series.data`
|
16905
17295
|
* configuration objects or raw numbers. They can be accessed from the
|
16906
|
-
* Series.points array.
|
16907
|
-
* @
|
17296
|
+
* `Series.points` array. Other ways to instaniate points are through {@link
|
17297
|
+
* Highcharts.Series#addPoint} or {@link Highcharts.Series#setData}.
|
17298
|
+
*
|
17299
|
+
* @class
|
16908
17300
|
*/
|
16909
|
-
|
16910
|
-
Point
|
17301
|
+
|
17302
|
+
Highcharts.Point = Point = function() {};
|
17303
|
+
Highcharts.Point.prototype = {
|
16911
17304
|
|
16912
17305
|
/**
|
16913
17306
|
* Initialize the point. Called internally based on the series.data option.
|
16914
|
-
* @function #init
|
16915
|
-
* @memberOf Point
|
16916
17307
|
* @param {Object} series The series object containing this point.
|
16917
17308
|
* @param {Object} options The data in either number, array or object
|
16918
17309
|
* format.
|
@@ -16926,8 +17317,22 @@
|
|
16926
17317
|
colorCount = series.chart.options.chart.colorCount,
|
16927
17318
|
colorIndex;
|
16928
17319
|
|
17320
|
+
/**
|
17321
|
+
* The series object associated with the point.
|
17322
|
+
*
|
17323
|
+
* @name series
|
17324
|
+
* @memberof Highcharts.Point
|
17325
|
+
* @type Highcharts.Series
|
17326
|
+
*/
|
16929
17327
|
point.series = series;
|
16930
17328
|
|
17329
|
+
|
17330
|
+
/**
|
17331
|
+
* The point's current color.
|
17332
|
+
* @name color
|
17333
|
+
* @memberof Highcharts.Point
|
17334
|
+
* @type {Color}
|
17335
|
+
*/
|
16931
17336
|
point.color = series.color; // #3445
|
16932
17337
|
|
16933
17338
|
point.applyOptions(options, x);
|
@@ -16956,8 +17361,6 @@
|
|
16956
17361
|
* Apply the options containing the x and y data and possible some extra
|
16957
17362
|
* properties. Called on point init or from point.update.
|
16958
17363
|
*
|
16959
|
-
* @function #applyOptions
|
16960
|
-
* @memberOf Point
|
16961
17364
|
* @param {Object} options The point options as defined in series.data.
|
16962
17365
|
* @param {Number} x Optionally, the X value.
|
16963
17366
|
* @returns {Object} The Point instance.
|
@@ -17228,9 +17631,60 @@
|
|
17228
17631
|
|
17229
17632
|
fireEvent(this, eventType, eventArgs, defaultFunction);
|
17230
17633
|
},
|
17634
|
+
|
17635
|
+
/**
|
17636
|
+
* For certain series types, like pie charts, where individual points can
|
17637
|
+
* be shown or hidden.
|
17638
|
+
*
|
17639
|
+
* @name visible
|
17640
|
+
* @memberOf Highcharts.Point
|
17641
|
+
* @type {Boolean}
|
17642
|
+
*/
|
17231
17643
|
visible: true
|
17232
17644
|
};
|
17233
17645
|
|
17646
|
+
/**
|
17647
|
+
* For categorized axes this property holds the category name for the
|
17648
|
+
* point. For other axes it holds the X value.
|
17649
|
+
*
|
17650
|
+
* @name category
|
17651
|
+
* @memberOf Highcharts.Point
|
17652
|
+
* @type {String|Number}
|
17653
|
+
*/
|
17654
|
+
|
17655
|
+
/**
|
17656
|
+
* The percentage for points in a stacked series or pies.
|
17657
|
+
*
|
17658
|
+
* @name percentage
|
17659
|
+
* @memberOf Highcharts.Point
|
17660
|
+
* @type {Number}
|
17661
|
+
*/
|
17662
|
+
|
17663
|
+
/**
|
17664
|
+
* The total of values in either a stack for stacked series, or a pie in a pie
|
17665
|
+
* series.
|
17666
|
+
*
|
17667
|
+
* @name total
|
17668
|
+
* @memberOf Highcharts.Point
|
17669
|
+
* @type {Number}
|
17670
|
+
*/
|
17671
|
+
|
17672
|
+
/**
|
17673
|
+
* The x value of the point.
|
17674
|
+
*
|
17675
|
+
* @name x
|
17676
|
+
* @memberOf Highcharts.Point
|
17677
|
+
* @type {Number}
|
17678
|
+
*/
|
17679
|
+
|
17680
|
+
/**
|
17681
|
+
* The y value of the point.
|
17682
|
+
*
|
17683
|
+
* @name y
|
17684
|
+
* @memberOf Highcharts.Point
|
17685
|
+
* @type {Number}
|
17686
|
+
*/
|
17687
|
+
|
17234
17688
|
}(Highcharts));
|
17235
17689
|
(function(H) {
|
17236
17690
|
/**
|
@@ -17267,28 +17721,51 @@
|
|
17267
17721
|
win = H.win;
|
17268
17722
|
|
17269
17723
|
/**
|
17270
|
-
*
|
17271
|
-
* series is
|
17724
|
+
* This is the base series prototype that all other series types inherit from.
|
17725
|
+
* A new series is initiated either through the {@link https://api.highcharts.com/highcharts/series|
|
17726
|
+
* series} option structure, or after the chart is initiated, through {@link
|
17727
|
+
* Highcharts.Chart#addSeries}.
|
17728
|
+
*
|
17729
|
+
* The object can be accessed in a number of ways. All series and point event
|
17730
|
+
* handlers give a reference to the `series` object. The chart object has a
|
17731
|
+
* {@link Highcharts.Chart.series|series} property that is a collection of all
|
17732
|
+
* the chart's series. The point objects and axis objects also have the same
|
17733
|
+
* reference.
|
17734
|
+
*
|
17735
|
+
* Another way to reference the series programmatically is by `id`. Add an id
|
17736
|
+
* in the series configuration options, and get the series object by {@link
|
17737
|
+
* Highcharts.Chart#get}.
|
17272
17738
|
*
|
17273
|
-
*
|
17274
|
-
*
|
17275
|
-
*
|
17276
|
-
*
|
17277
|
-
*
|
17739
|
+
* Configuration options for the series are given in three levels. Options for
|
17740
|
+
* all series in a chart are given in the {@link https://api.highcharts.com/highcharts/plotOptions.series|
|
17741
|
+
* plotOptions.series} object. Then options for all series of a specific type
|
17742
|
+
* are given in the plotOptions of that type, for example `plotOptions.line`.
|
17743
|
+
* Next, options for one single series are given in the series array, or as
|
17744
|
+
* arguements to `chart.addSeries`.
|
17745
|
+
*
|
17746
|
+
* The data in the series is stored in various arrays.
|
17747
|
+
*
|
17748
|
+
* - First, `series.options.data` contains all the original config options for
|
17749
|
+
* each point whether added by options or methods like `series.addPoint`.
|
17750
|
+
* - Next, `series.data` contains those values converted to points, but in case
|
17751
|
+
* the series data length exceeds the `cropThreshold`, or if the data is grouped,
|
17752
|
+
* `series.data` doesn't contain all the points. It only contains the points that
|
17278
17753
|
* have been created on demand.
|
17279
|
-
* - Then there's series.points that contains all currently visible point
|
17754
|
+
* - Then there's `series.points` that contains all currently visible point
|
17280
17755
|
* objects. In case of cropping, the cropped-away points are not part of this
|
17281
|
-
* array. The series.points array starts at series.cropStart compared to
|
17282
|
-
* series.data and series.options.data
|
17756
|
+
* array. The `series.points` array starts at `series.cropStart` compared to
|
17757
|
+
* `series.data` and `series.options.data`. If however the series data is grouped,
|
17283
17758
|
* these can't be correlated one to one.
|
17284
|
-
* - series.xData and series.processedXData contain clean x values, equivalent
|
17285
|
-
* to series.data and series.points
|
17286
|
-
* - series.yData and series.processedYData contain clean y values, equivalent
|
17287
|
-
* to series.data and series.points
|
17759
|
+
* - `series.xData` and `series.processedXData` contain clean x values, equivalent
|
17760
|
+
* to `series.data` and `series.points`.
|
17761
|
+
* - `series.yData` and `series.processedYData` contain clean y values, equivalent
|
17762
|
+
* to `series.data` and `series.points`.
|
17288
17763
|
*
|
17289
|
-
* @
|
17290
|
-
* @param
|
17291
|
-
*
|
17764
|
+
* @class Highcharts.Series
|
17765
|
+
* @param {Highcharts.Chart} chart
|
17766
|
+
* The chart instance.
|
17767
|
+
* @param {Object} options
|
17768
|
+
* The series options.
|
17292
17769
|
*/
|
17293
17770
|
H.Series = H.seriesType('line', null, { // base series options
|
17294
17771
|
|
@@ -17409,7 +17886,7 @@
|
|
17409
17886
|
// zIndex: null
|
17410
17887
|
findNearestPointBy: 'x'
|
17411
17888
|
|
17412
|
-
}, /** @lends Series.prototype */ {
|
17889
|
+
}, /** @lends Highcharts.Series.prototype */ {
|
17413
17890
|
isCartesian: true,
|
17414
17891
|
pointClass: Point,
|
17415
17892
|
sorted: true, // requires the data to be sorted
|
@@ -17426,7 +17903,33 @@
|
|
17426
17903
|
chartSeries = chart.series,
|
17427
17904
|
lastSeries;
|
17428
17905
|
|
17906
|
+
/**
|
17907
|
+
* Read only. The chart that the series belongs to.
|
17908
|
+
*
|
17909
|
+
* @name chart
|
17910
|
+
* @memberOf Series
|
17911
|
+
* @type {Chart}
|
17912
|
+
*/
|
17429
17913
|
series.chart = chart;
|
17914
|
+
|
17915
|
+
/**
|
17916
|
+
* Read only. The series' type, like "line", "area", "column" etc. The
|
17917
|
+
* type in the series options anc can be altered using {@link
|
17918
|
+
* Series#update}.
|
17919
|
+
*
|
17920
|
+
* @name type
|
17921
|
+
* @memberOf Series
|
17922
|
+
* @type String
|
17923
|
+
*/
|
17924
|
+
|
17925
|
+
/**
|
17926
|
+
* Read only. The series' current options. To update, use {@link
|
17927
|
+
* Series#update}.
|
17928
|
+
*
|
17929
|
+
* @name options
|
17930
|
+
* @memberOf Series
|
17931
|
+
* @type SeriesOptions
|
17932
|
+
*/
|
17430
17933
|
series.options = options = series.setOptions(options);
|
17431
17934
|
series.linkedSeries = [];
|
17432
17935
|
|
@@ -17435,9 +17938,34 @@
|
|
17435
17938
|
|
17436
17939
|
// set some variables
|
17437
17940
|
extend(series, {
|
17941
|
+
/**
|
17942
|
+
* The series name as given in the options. Defaults to
|
17943
|
+
* "Series {n}".
|
17944
|
+
*
|
17945
|
+
* @name name
|
17946
|
+
* @memberOf Series
|
17947
|
+
* @type {String}
|
17948
|
+
*/
|
17438
17949
|
name: options.name,
|
17439
17950
|
state: '',
|
17951
|
+
/**
|
17952
|
+
* Read only. The series' visibility state as set by {@link
|
17953
|
+
* Series#show}, {@link Series#hide}, or in the initial
|
17954
|
+
* configuration.
|
17955
|
+
*
|
17956
|
+
* @name visible
|
17957
|
+
* @memberOf Series
|
17958
|
+
* @type {Boolean}
|
17959
|
+
*/
|
17440
17960
|
visible: options.visible !== false, // true by default
|
17961
|
+
/**
|
17962
|
+
* Read only. The series' selected state as set by {@link
|
17963
|
+
* Highcharts.Series#select}.
|
17964
|
+
*
|
17965
|
+
* @name selected
|
17966
|
+
* @memberOf Series
|
17967
|
+
* @type {Boolean}
|
17968
|
+
*/
|
17441
17969
|
selected: options.selected === true // false by default
|
17442
17970
|
});
|
17443
17971
|
|
@@ -17557,6 +18085,22 @@
|
|
17557
18085
|
series.insert(axis.series);
|
17558
18086
|
|
17559
18087
|
// set this series.xAxis or series.yAxis reference
|
18088
|
+
/**
|
18089
|
+
* Read only. The unique xAxis object associated with the
|
18090
|
+
* series.
|
18091
|
+
*
|
18092
|
+
* @name xAxis
|
18093
|
+
* @memberOf Series
|
18094
|
+
* @type Axis
|
18095
|
+
*/
|
18096
|
+
/**
|
18097
|
+
* Read only. The unique yAxis object associated with the
|
18098
|
+
* series.
|
18099
|
+
*
|
18100
|
+
* @name yAxis
|
18101
|
+
* @memberOf Series
|
18102
|
+
* @type Axis
|
18103
|
+
*/
|
17560
18104
|
series[AXIS] = axis;
|
17561
18105
|
|
17562
18106
|
// mark dirty for redraw
|
@@ -17815,9 +18359,40 @@
|
|
17815
18359
|
drawLegendSymbol: LegendSymbolMixin.drawLineMarker,
|
17816
18360
|
|
17817
18361
|
/**
|
17818
|
-
*
|
17819
|
-
*
|
17820
|
-
*
|
18362
|
+
* Apply a new set of data to the series and optionally redraw it. The new
|
18363
|
+
* data array is passed by reference (except in case of `updatePoints`), and
|
18364
|
+
* may later be mutated when updating the chart data.
|
18365
|
+
*
|
18366
|
+
* Note the difference in behaviour when setting the same amount of points,
|
18367
|
+
* or a different amount of points, as handled by the `updatePoints`
|
18368
|
+
* parameter.
|
18369
|
+
*
|
18370
|
+
* @param {SeriesDataOptions} data
|
18371
|
+
* Takes an array of data in the same format as described under
|
18372
|
+
* `series<type>data` for the given series type.
|
18373
|
+
* @param {Boolean} [redraw=true]
|
18374
|
+
* Whether to redraw the chart after the series is altered. If doing
|
18375
|
+
* more operations on the chart, it is a good idea to set redraw to
|
18376
|
+
* false and call {@link Chart#redraw} after.
|
18377
|
+
* @param {AnimationOptions} [animation]
|
18378
|
+
* When the updated data is the same length as the existing data,
|
18379
|
+
* points will be updated by default, and animation visualizes how
|
18380
|
+
* the points are changed. Set false to disable animation, or a
|
18381
|
+
* configuration object to set duration or easing.
|
18382
|
+
* @param {Boolean} [updatePoints=true]
|
18383
|
+
* When the updated data is the same length as the existing data,
|
18384
|
+
* points will be updated instead of replaced. This allows updating
|
18385
|
+
* with animation and performs better. In this case, the original
|
18386
|
+
* array is not passed by reference. Set false to prevent.
|
18387
|
+
*
|
18388
|
+
* @sample highcharts/members/series-setdata/
|
18389
|
+
* Set new data from a button
|
18390
|
+
* @sample highcharts/members/series-setdata-pie/
|
18391
|
+
* Set data in a pie
|
18392
|
+
* @sample stock/members/series-setdata/
|
18393
|
+
* Set new data in Highstock
|
18394
|
+
* @sample maps/members/series-setdata/
|
18395
|
+
* Set new data in Highmaps
|
17821
18396
|
*/
|
17822
18397
|
setData: function(data, redraw, animation, updatePoints) {
|
17823
18398
|
var series = this,
|
@@ -17930,6 +18505,15 @@
|
|
17930
18505
|
H.error(14, true);
|
17931
18506
|
}
|
17932
18507
|
|
18508
|
+
/**
|
18509
|
+
* Read only. An array containing the series' data point objects. To
|
18510
|
+
* modify the data, use {@link Highcharts.Series#setData} or {@link
|
18511
|
+
* Highcharts.Point#update}.
|
18512
|
+
*
|
18513
|
+
* @name data
|
18514
|
+
* @memberOf Highcharts.Series
|
18515
|
+
* @type {Array.<Highcharts.Point>}
|
18516
|
+
*/
|
17933
18517
|
series.data = [];
|
17934
18518
|
series.options.data = series.userOptions.data = data;
|
17935
18519
|
|
@@ -18169,6 +18753,22 @@
|
|
18169
18753
|
point = (new PointClass()).init(
|
18170
18754
|
series, [processedXData[i]].concat(splat(processedYData[i]))
|
18171
18755
|
);
|
18756
|
+
|
18757
|
+
/**
|
18758
|
+
* Highstock only. If a point object is created by data
|
18759
|
+
* grouping, it doesn't reflect actual points in the raw data.
|
18760
|
+
* In this case, the `dataGroup` property holds information
|
18761
|
+
* that points back to the raw data.
|
18762
|
+
*
|
18763
|
+
* - `dataGroup.start` is the index of the first raw data point
|
18764
|
+
* in the group.
|
18765
|
+
* - `dataGroup.length` is the amount of points in the group.
|
18766
|
+
*
|
18767
|
+
* @name dataGroup
|
18768
|
+
* @memberOf Point
|
18769
|
+
* @type {Object}
|
18770
|
+
*
|
18771
|
+
*/
|
18172
18772
|
point.dataGroup = series.groupMap[i];
|
18173
18773
|
}
|
18174
18774
|
if (point) { // #6279
|
@@ -20083,6 +20683,8 @@
|
|
20083
20683
|
*
|
20084
20684
|
* @sample highcharts/members/chart-addseries/
|
20085
20685
|
* Add a series from a button
|
20686
|
+
* @sample stock/members/chart-addseries/
|
20687
|
+
* Add a series in Highstock
|
20086
20688
|
*/
|
20087
20689
|
addSeries: function(options, redraw, animation) {
|
20088
20690
|
var series,
|
@@ -20144,8 +20746,21 @@
|
|
20144
20746
|
},
|
20145
20747
|
|
20146
20748
|
/**
|
20147
|
-
* Dim the chart and show a loading text or symbol
|
20148
|
-
*
|
20749
|
+
* Dim the chart and show a loading text or symbol. Options for the loading
|
20750
|
+
* screen are defined in {@link
|
20751
|
+
* https://api.highcharts.com/highcharts/loading|the loading options}.
|
20752
|
+
*
|
20753
|
+
* @param {String} str
|
20754
|
+
* An optional text to show in the loading label instead of the
|
20755
|
+
* default one. The default text is set in {@link
|
20756
|
+
* http://api.highcharts.com/highcharts/lang.loading|lang.loading}.
|
20757
|
+
*
|
20758
|
+
* @sample highcharts/members/chart-hideloading/
|
20759
|
+
* Show and hide loading from a button
|
20760
|
+
* @sample highcharts/members/chart-showloading/
|
20761
|
+
* Apply different text labels
|
20762
|
+
* @sample stock/members/chart-show-hide-loading/
|
20763
|
+
* Toggle loading in Highstock
|
20149
20764
|
*/
|
20150
20765
|
showLoading: function(str) {
|
20151
20766
|
var chart = this,
|
@@ -20215,6 +20830,8 @@
|
|
20215
20830
|
* @see Highcharts.Chart#showLoading
|
20216
20831
|
* @sample highcharts/members/chart-hideloading/
|
20217
20832
|
* Show and hide loading from a button
|
20833
|
+
* @sample stock/members/chart-show-hide-loading/
|
20834
|
+
* Toggle loading in Highstock
|
20218
20835
|
*/
|
20219
20836
|
hideLoading: function() {
|
20220
20837
|
var options = this.options,
|
@@ -20257,7 +20874,30 @@
|
|
20257
20874
|
],
|
20258
20875
|
|
20259
20876
|
/**
|
20260
|
-
*
|
20877
|
+
* A generic function to update any element of the chart. Elements can be
|
20878
|
+
* enabled and disabled, moved, re-styled, re-formatted etc.
|
20879
|
+
*
|
20880
|
+
* A special case is configuration objects that take arrays, for example
|
20881
|
+
* {@link https://api.highcharts.com/highcharts/xAxis|xAxis},
|
20882
|
+
* {@link https://api.highcharts.com/highcharts/yAxis|yAxis} or
|
20883
|
+
* {@link https://api.highcharts.com/highcharts/series|series}. For these
|
20884
|
+
* collections, an `id` option is used to map the new option set to an
|
20885
|
+
* existing object. If an existing object of the same id is not found, the
|
20886
|
+
* corresponding item is updated. So for example, running `chart.update`
|
20887
|
+
* with a series item without an id, will cause the existing chart's series
|
20888
|
+
* with the same index in the series array to be updated.
|
20889
|
+
*
|
20890
|
+
* See also the {@link https://api.highcharts.com/highcharts/responsive|
|
20891
|
+
* responsive option set}. Switching between `responsive.rules` basically
|
20892
|
+
* runs `chart.update` under the hood.
|
20893
|
+
*
|
20894
|
+
* @param {Options} options
|
20895
|
+
* A configuration object for the new chart options.
|
20896
|
+
* @param {Boolean} [redraw=true]
|
20897
|
+
* Whether to redraw the chart.
|
20898
|
+
*
|
20899
|
+
* @sample highcharts/members/chart-update/
|
20900
|
+
* Update chart geometry
|
20261
20901
|
*/
|
20262
20902
|
update: function(options, redraw) {
|
20263
20903
|
var chart = this,
|
@@ -20415,14 +21055,32 @@
|
|
20415
21055
|
});
|
20416
21056
|
|
20417
21057
|
// extend the Point prototype for dynamic methods
|
20418
|
-
extend(Point.prototype, /** @lends Point.prototype */ {
|
21058
|
+
extend(Point.prototype, /** @lends Highcharts.Point.prototype */ {
|
20419
21059
|
/**
|
20420
|
-
*
|
21060
|
+
* Update point with new options (typically x/y data) and optionally redraw
|
21061
|
+
* the series.
|
20421
21062
|
*
|
20422
|
-
* @param
|
20423
|
-
*
|
20424
|
-
*
|
20425
|
-
*
|
21063
|
+
* @param {Object} options
|
21064
|
+
* The point options. Point options are handled as described under
|
21065
|
+
* the `series<type>.data` item for each series type. For example
|
21066
|
+
* for a line series, if options is a single number, the point will
|
21067
|
+
* be given that number as the main y value. If it is an array, it
|
21068
|
+
* will be interpreted as x and y values respectively. If it is an
|
21069
|
+
* object, advanced options are applied.
|
21070
|
+
* @param {Boolean} [redraw=true]
|
21071
|
+
* Whether to redraw the chart after the point is updated. If doing
|
21072
|
+
* more operations on the chart, it is best practice to set
|
21073
|
+
* `redraw` to false and call `chart.redraw()` after.
|
21074
|
+
* @param {AnimationOptions} [animation=true]
|
21075
|
+
* Whether to apply animation, and optionally animation
|
21076
|
+
* configuration.
|
21077
|
+
*
|
21078
|
+
* @sample highcharts/members/point-update-column/
|
21079
|
+
* Update column value
|
21080
|
+
* @sample highcharts/members/point-update-pie/
|
21081
|
+
* Update pie slice
|
21082
|
+
* @sample maps/members/point-update/
|
21083
|
+
* Update map area value in Highmaps
|
20426
21084
|
*/
|
20427
21085
|
update: function(options, redraw, animation, runEvent) {
|
20428
21086
|
var point = this,
|
@@ -20494,9 +21152,21 @@
|
|
20494
21152
|
|
20495
21153
|
/**
|
20496
21154
|
* Remove a point and optionally redraw the series and if necessary the axes
|
20497
|
-
* @param
|
20498
|
-
*
|
20499
|
-
*
|
21155
|
+
* @param {Boolean} redraw
|
21156
|
+
* Whether to redraw the chart or wait for an explicit call. When
|
21157
|
+
* doing more operations on the chart, for example running
|
21158
|
+
* `point.remove()` in a loop, it is best practice to set `redraw`
|
21159
|
+
* to false and call `chart.redraw()` after.
|
21160
|
+
* @param {AnimationOptions} [animation=false]
|
21161
|
+
* Whether to apply animation, and optionally animation
|
21162
|
+
* configuration.
|
21163
|
+
*
|
21164
|
+
* @sample highcharts/plotoptions/series-point-events-remove/
|
21165
|
+
* Remove point and confirm
|
21166
|
+
* @sample highcharts/members/point-remove/
|
21167
|
+
* Remove pie slice
|
21168
|
+
* @sample maps/members/point-remove/
|
21169
|
+
* Remove selected points in Highmaps
|
20500
21170
|
*/
|
20501
21171
|
remove: function(redraw, animation) {
|
20502
21172
|
this.series.removePoint(inArray(this, this.series.data), redraw, animation);
|
@@ -20506,13 +21176,43 @@
|
|
20506
21176
|
// Extend the series prototype for dynamic methods
|
20507
21177
|
extend(Series.prototype, /** @lends Series.prototype */ {
|
20508
21178
|
/**
|
20509
|
-
* Add a point
|
20510
|
-
*
|
20511
|
-
*
|
20512
|
-
*
|
20513
|
-
*
|
20514
|
-
*
|
20515
|
-
*
|
21179
|
+
* Add a point to the series after render time. The point can be added at
|
21180
|
+
* the end, or by giving it an X value, to the start or in the middle of the
|
21181
|
+
* series.
|
21182
|
+
*
|
21183
|
+
* @param {Number|Array|Object} options
|
21184
|
+
* The point options. If options is a single number, a point with
|
21185
|
+
* that y value is appended to the series.If it is an array, it will
|
21186
|
+
* be interpreted as x and y values respectively. If it is an
|
21187
|
+
* object, advanced options as outlined under `series.data` are
|
21188
|
+
* applied.
|
21189
|
+
* @param {Boolean} [redraw=true]
|
21190
|
+
* Whether to redraw the chart after the point is added. When adding
|
21191
|
+
* more than one point, it is highly recommended that the redraw
|
21192
|
+
* option be set to false, and instead {@link Chart#redraw}
|
21193
|
+
* is explicitly called after the adding of points is finished.
|
21194
|
+
* Otherwise, the chart will redraw after adding each point.
|
21195
|
+
* @param {Boolean} [shift=false]
|
21196
|
+
* If true, a point is shifted off the start of the series as one is
|
21197
|
+
* appended to the end.
|
21198
|
+
* @param {AnimationOptions} [animation]
|
21199
|
+
* Whether to apply animation, and optionally animation
|
21200
|
+
* configuration.
|
21201
|
+
*
|
21202
|
+
* @sample highcharts/members/series-addpoint-append/
|
21203
|
+
* Append point
|
21204
|
+
* @sample highcharts/members/series-addpoint-append-and-shift/
|
21205
|
+
* Append and shift
|
21206
|
+
* @sample highcharts/members/series-addpoint-x-and-y/
|
21207
|
+
* Both X and Y values given
|
21208
|
+
* @sample highcharts/members/series-addpoint-pie/
|
21209
|
+
* Append pie slice
|
21210
|
+
* @sample stock/members/series-addpoint/
|
21211
|
+
* Append 100 points in Highstock
|
21212
|
+
* @sample stock/members/series-addpoint-shift/
|
21213
|
+
* Append and shift in Highstock
|
21214
|
+
* @sample maps/members/series-addpoint/
|
21215
|
+
* Add a point in Highmaps
|
20516
21216
|
*/
|
20517
21217
|
addPoint: function(options, redraw, shift, animation) {
|
20518
21218
|
var series = this,
|
@@ -20588,7 +21288,24 @@
|
|
20588
21288
|
},
|
20589
21289
|
|
20590
21290
|
/**
|
20591
|
-
* Remove a point
|
21291
|
+
* Remove a point from the series. Unlike the {@link Highcharts.Point#remove}
|
21292
|
+
* method, this can also be done on a point that is not instanciated because
|
21293
|
+
* it is outside the view or subject to Highstock data grouping.
|
21294
|
+
*
|
21295
|
+
* @param {Number} i
|
21296
|
+
* The index of the point in the {@link Highcharts.Series.data|data}
|
21297
|
+
* array.
|
21298
|
+
* @param {Boolean} [redraw=true]
|
21299
|
+
* Whether to redraw the chart after the point is added. When
|
21300
|
+
* removing more than one point, it is highly recommended that the
|
21301
|
+
* `redraw` option be set to `false`, and instead {@link
|
21302
|
+
* Highcharts.Chart#redraw} is explicitly called after the adding of
|
21303
|
+
* points is finished.
|
21304
|
+
* @param {AnimationOptions} [animation]
|
21305
|
+
* Whether and optionally how the series should be animated.
|
21306
|
+
*
|
21307
|
+
* @sample highcharts/members/series-removepoint/
|
21308
|
+
* Remove cropped point
|
20592
21309
|
*/
|
20593
21310
|
removePoint: function(i, redraw, animation) {
|
20594
21311
|
|
@@ -20632,11 +21349,19 @@
|
|
20632
21349
|
},
|
20633
21350
|
|
20634
21351
|
/**
|
20635
|
-
* Remove a series and optionally redraw the chart
|
21352
|
+
* Remove a series and optionally redraw the chart.
|
20636
21353
|
*
|
20637
|
-
* @param
|
20638
|
-
*
|
20639
|
-
*
|
21354
|
+
* @param {Boolean} [redraw=true]
|
21355
|
+
* Whether to redraw the chart or wait for an explicit call to
|
21356
|
+
* {@link Highcharts.Chart#redraw}.
|
21357
|
+
* @param {AnimationOptions} [animation]
|
21358
|
+
* Whether to apply animation, and optionally animation
|
21359
|
+
* configuration
|
21360
|
+
* @param {Boolean} [withEvent=true]
|
21361
|
+
* Used internally, whether to fire the series `remove` event.
|
21362
|
+
*
|
21363
|
+
* @sample highcharts/members/series-remove/
|
21364
|
+
* Remove first series from a button
|
20640
21365
|
*/
|
20641
21366
|
remove: function(redraw, animation, withEvent) {
|
20642
21367
|
var series = this,
|
@@ -20665,7 +21390,24 @@
|
|
20665
21390
|
},
|
20666
21391
|
|
20667
21392
|
/**
|
20668
|
-
*
|
21393
|
+
* Update the series with a new set of options. For a clean and precise
|
21394
|
+
* handling of new options, all methods and elements from the series are
|
21395
|
+
* removed, and it is initiated from scratch. Therefore, this method is more
|
21396
|
+
* performance expensive than some other utility methods like {@link
|
21397
|
+
* Series#setData} or {@link Series#setVisible}.
|
21398
|
+
*
|
21399
|
+
* @param {SeriesOptions} options
|
21400
|
+
* New options that will be merged with the series' existing
|
21401
|
+
* options.
|
21402
|
+
* @param {Boolean} [redraw=true]
|
21403
|
+
* Whether to redraw the chart after the series is altered. If doing
|
21404
|
+
* more operations on the chart, it is a good idea to set redraw to
|
21405
|
+
* false and call {@link Chart#redraw} after.
|
21406
|
+
*
|
21407
|
+
* @sample highcharts/members/series-update/
|
21408
|
+
* Updating series options
|
21409
|
+
* @sample maps/members/series-update/
|
21410
|
+
* Update series options in Highmaps
|
20669
21411
|
*/
|
20670
21412
|
update: function(newOptions, redraw) {
|
20671
21413
|
var series = this,
|
@@ -20679,6 +21421,14 @@
|
|
20679
21421
|
preserve = ['group', 'markerGroup', 'dataLabelsGroup'],
|
20680
21422
|
n;
|
20681
21423
|
|
21424
|
+
// Running Series.update to update the data only is an intuitive usage,
|
21425
|
+
// so we want to make sure that when used like this, we run the
|
21426
|
+
// cheaper setData function and allow animation instead of completely
|
21427
|
+
// recreating the series instance.
|
21428
|
+
if (Object.keys && Object.keys(newOptions).toString() === 'data') {
|
21429
|
+
return this.setData(newOptions.data, redraw);
|
21430
|
+
}
|
21431
|
+
|
20682
21432
|
// If we're changing type or zIndex, create new groups (#3380, #3404)
|
20683
21433
|
if ((newType && newType !== oldType) || newOptions.zIndex !== undefined) {
|
20684
21434
|
preserve.length = 0;
|
@@ -21441,8 +22191,15 @@
|
|
21441
22191
|
var otherOptions = otherSeries.options,
|
21442
22192
|
otherYAxis = otherSeries.yAxis,
|
21443
22193
|
columnIndex;
|
21444
|
-
if (
|
21445
|
-
|
22194
|
+
if (
|
22195
|
+
otherSeries.type === series.type &&
|
22196
|
+
(
|
22197
|
+
otherSeries.visible ||
|
22198
|
+
!series.chart.options.chart.ignoreHiddenSeries
|
22199
|
+
) &&
|
22200
|
+
yAxis.len === otherYAxis.len &&
|
22201
|
+
yAxis.pos === otherYAxis.pos
|
22202
|
+
) { // #642, #2086
|
21446
22203
|
if (otherOptions.stacking) {
|
21447
22204
|
stackKey = otherSeries.stackKey;
|
21448
22205
|
if (stackGroups[stackKey] === undefined) {
|
@@ -22543,7 +23300,7 @@
|
|
22543
23300
|
hasRendered = series.hasRendered || 0,
|
22544
23301
|
str,
|
22545
23302
|
dataLabelsGroup,
|
22546
|
-
defer = pick(options.defer,
|
23303
|
+
defer = pick(options.defer, !!seriesOptions.animation),
|
22547
23304
|
renderer = series.chart.renderer;
|
22548
23305
|
|
22549
23306
|
if (options.enabled || series._hasPointLabels) {
|
@@ -23055,41 +23812,39 @@
|
|
23055
23812
|
|
23056
23813
|
|
23057
23814
|
// Detect overflowing data labels
|
23058
|
-
|
23059
|
-
dataLabelWidth = dataLabel.getBBox().width;
|
23815
|
+
dataLabelWidth = dataLabel.getBBox().width;
|
23060
23816
|
|
23061
|
-
|
23062
|
-
|
23063
|
-
|
23064
|
-
|
23065
|
-
|
23066
|
-
|
23067
|
-
|
23817
|
+
sideOverflow = null;
|
23818
|
+
// Overflow left
|
23819
|
+
if (x - dataLabelWidth < connectorPadding) {
|
23820
|
+
sideOverflow = Math.round(
|
23821
|
+
dataLabelWidth - x + connectorPadding
|
23822
|
+
);
|
23823
|
+
overflow[3] = Math.max(sideOverflow, overflow[3]);
|
23068
23824
|
|
23069
|
-
|
23070
|
-
|
23071
|
-
|
23072
|
-
|
23073
|
-
|
23074
|
-
|
23075
|
-
|
23825
|
+
// Overflow right
|
23826
|
+
} else if (x + dataLabelWidth > plotWidth - connectorPadding) {
|
23827
|
+
sideOverflow = Math.round(
|
23828
|
+
x + dataLabelWidth - plotWidth + connectorPadding
|
23829
|
+
);
|
23830
|
+
overflow[1] = Math.max(sideOverflow, overflow[1]);
|
23831
|
+
}
|
23076
23832
|
|
23077
|
-
|
23078
|
-
|
23079
|
-
|
23080
|
-
|
23081
|
-
|
23082
|
-
|
23833
|
+
// Overflow top
|
23834
|
+
if (y - labelHeight / 2 < 0) {
|
23835
|
+
overflow[0] = Math.max(
|
23836
|
+
Math.round(-y + labelHeight / 2),
|
23837
|
+
overflow[0]
|
23838
|
+
);
|
23083
23839
|
|
23084
|
-
|
23085
|
-
|
23086
|
-
|
23087
|
-
|
23088
|
-
|
23089
|
-
|
23090
|
-
}
|
23091
|
-
dataLabel.sideOverflow = sideOverflow;
|
23840
|
+
// Overflow left
|
23841
|
+
} else if (y + labelHeight / 2 > plotHeight) {
|
23842
|
+
overflow[2] = Math.max(
|
23843
|
+
Math.round(y + labelHeight / 2 - plotHeight),
|
23844
|
+
overflow[2]
|
23845
|
+
);
|
23092
23846
|
}
|
23847
|
+
dataLabel.sideOverflow = sideOverflow;
|
23093
23848
|
} // for each point
|
23094
23849
|
}); // for each half
|
23095
23850
|
|
@@ -23219,47 +23974,62 @@
|
|
23219
23974
|
centerOption = options.center,
|
23220
23975
|
minSize = options.minSize || 80,
|
23221
23976
|
newSize = minSize,
|
23222
|
-
|
23223
|
-
|
23224
|
-
|
23225
|
-
if (centerOption[0] !== null) { // Fixed center
|
23226
|
-
newSize = Math.max(center[2] - Math.max(overflow[1], overflow[3]), minSize);
|
23977
|
+
// If a size is set, return true and don't try to shrink the pie
|
23978
|
+
// to fit the labels.
|
23979
|
+
ret = options.size !== null;
|
23227
23980
|
|
23228
|
-
|
23229
|
-
|
23230
|
-
|
23231
|
-
|
23232
|
-
|
23233
|
-
|
23234
|
-
|
23981
|
+
if (!ret) {
|
23982
|
+
// Handle horizontal size and center
|
23983
|
+
if (centerOption[0] !== null) { // Fixed center
|
23984
|
+
newSize = Math.max(center[2] -
|
23985
|
+
Math.max(overflow[1], overflow[3]), minSize);
|
23986
|
+
|
23987
|
+
} else { // Auto center
|
23988
|
+
newSize = Math.max(
|
23989
|
+
// horizontal overflow
|
23990
|
+
center[2] - overflow[1] - overflow[3],
|
23991
|
+
minSize
|
23992
|
+
);
|
23993
|
+
// horizontal center
|
23994
|
+
center[0] += (overflow[3] - overflow[1]) / 2;
|
23995
|
+
}
|
23235
23996
|
|
23236
|
-
|
23237
|
-
|
23238
|
-
|
23997
|
+
// Handle vertical size and center
|
23998
|
+
if (centerOption[1] !== null) { // Fixed center
|
23999
|
+
newSize = Math.max(Math.min(newSize, center[2] -
|
24000
|
+
Math.max(overflow[0], overflow[2])), minSize);
|
23239
24001
|
|
23240
|
-
|
23241
|
-
|
23242
|
-
|
23243
|
-
|
23244
|
-
|
23245
|
-
|
23246
|
-
|
23247
|
-
|
23248
|
-
|
23249
|
-
|
24002
|
+
} else { // Auto center
|
24003
|
+
newSize = Math.max(
|
24004
|
+
Math.min(
|
24005
|
+
newSize,
|
24006
|
+
// vertical overflow
|
24007
|
+
center[2] - overflow[0] - overflow[2]
|
24008
|
+
),
|
24009
|
+
minSize
|
24010
|
+
);
|
24011
|
+
// vertical center
|
24012
|
+
center[1] += (overflow[0] - overflow[2]) / 2;
|
24013
|
+
}
|
23250
24014
|
|
23251
|
-
|
23252
|
-
|
23253
|
-
center[2]
|
23254
|
-
|
23255
|
-
|
24015
|
+
// If the size must be decreased, we need to run translate and
|
24016
|
+
// drawDataLabels again
|
24017
|
+
if (newSize < center[2]) {
|
24018
|
+
center[2] = newSize;
|
24019
|
+
center[3] = Math.min( // #3632
|
24020
|
+
relativeLength(options.innerSize || 0, newSize),
|
24021
|
+
newSize
|
24022
|
+
);
|
24023
|
+
this.translate(center);
|
23256
24024
|
|
23257
|
-
|
23258
|
-
|
24025
|
+
if (this.drawDataLabels) {
|
24026
|
+
this.drawDataLabels();
|
24027
|
+
}
|
24028
|
+
// Else, return true to indicate that the pie and its labels is
|
24029
|
+
// within the plot area
|
24030
|
+
} else {
|
24031
|
+
ret = true;
|
23259
24032
|
}
|
23260
|
-
// Else, return true to indicate that the pie and its labels is within the plot area
|
23261
|
-
} else {
|
23262
|
-
ret = true;
|
23263
24033
|
}
|
23264
24034
|
return ret;
|
23265
24035
|
};
|
@@ -23550,9 +24320,9 @@
|
|
23550
24320
|
pointer = chart.pointer,
|
23551
24321
|
onMouseOver = function(e) {
|
23552
24322
|
var point = pointer.getPointFromEvent(e);
|
23553
|
-
|
23554
24323
|
// undefined on graph in scatterchart
|
23555
24324
|
if (point !== undefined) {
|
24325
|
+
pointer.isDirectTouch = true;
|
23556
24326
|
point.onMouseOver(e);
|
23557
24327
|
}
|
23558
24328
|
};
|
@@ -23984,12 +24754,28 @@
|
|
23984
24754
|
/*
|
23985
24755
|
* Extend the Point object with interaction
|
23986
24756
|
*/
|
23987
|
-
extend(Point.prototype, /** @lends Point.prototype */ {
|
23988
|
-
/**
|
23989
|
-
* Toggle the selection status of a point
|
23990
|
-
* @param
|
23991
|
-
*
|
23992
|
-
*
|
24757
|
+
extend(Point.prototype, /** @lends Highcharts.Point.prototype */ {
|
24758
|
+
/**
|
24759
|
+
* Toggle the selection status of a point.
|
24760
|
+
* @param {Boolean} [selected]
|
24761
|
+
* When `true`, the point is selected. When `false`, the point is
|
24762
|
+
* unselected. When `null` or `undefined`, the selection state is
|
24763
|
+
* toggled.
|
24764
|
+
* @param {Boolean} [accumulate=false]
|
24765
|
+
* When `true`, the selection is added to other selected points.
|
24766
|
+
* When `false`, other selected points are deselected. Internally in
|
24767
|
+
* Highcharts, when {@link http://api.highcharts.com/highcharts/plotOptions.series.allowPointSelect|allowPointSelect}
|
24768
|
+
* is `true`, selected points are accumulated on Control, Shift or
|
24769
|
+
* Cmd clicking the point.
|
24770
|
+
*
|
24771
|
+
* @see Highcharts.Chart#getSelectedPoints
|
24772
|
+
*
|
24773
|
+
* @sample highcharts/members/point-select/
|
24774
|
+
* Select a point from a button
|
24775
|
+
* @sample highcharts/chart/events-selection-points/
|
24776
|
+
* Select a range of points through a drag selection
|
24777
|
+
* @sample maps/series/data-id/
|
24778
|
+
* Select a point in Highmaps
|
23993
24779
|
*/
|
23994
24780
|
select: function(selected, accumulate) {
|
23995
24781
|
var point = this,
|
@@ -24002,6 +24788,14 @@
|
|
24002
24788
|
point.firePointEvent(selected ? 'select' : 'unselect', {
|
24003
24789
|
accumulate: accumulate
|
24004
24790
|
}, function() {
|
24791
|
+
|
24792
|
+
/**
|
24793
|
+
* Whether the point is selected or not.
|
24794
|
+
* @see Highcharts.Point#select
|
24795
|
+
* @memberof Highcharts.Point
|
24796
|
+
* @name selected
|
24797
|
+
* @type {Boolean}
|
24798
|
+
*/
|
24005
24799
|
point.selected = point.options.selected = selected;
|
24006
24800
|
series.options.data[inArray(point, series.data)] = point.options;
|
24007
24801
|
|
@@ -24031,7 +24825,10 @@
|
|
24031
24825
|
series = point.series,
|
24032
24826
|
chart = series.chart,
|
24033
24827
|
pointer = chart.pointer;
|
24034
|
-
|
24828
|
+
e = e ?
|
24829
|
+
pointer.normalize(e) :
|
24830
|
+
// In cases where onMouseOver is called directly without an event
|
24831
|
+
pointer.getChartCoordinatesFromPoint(point, chart.inverted);
|
24035
24832
|
pointer.runPointActions(e, point);
|
24036
24833
|
},
|
24037
24834
|
|
@@ -24203,8 +25000,8 @@
|
|
24203
25000
|
if (haloOptions && haloOptions.size) {
|
24204
25001
|
if (!halo) {
|
24205
25002
|
series.halo = halo = chart.renderer.path()
|
24206
|
-
// #5818, #5903
|
24207
|
-
.add(
|
25003
|
+
// #5818, #5903, #6705
|
25004
|
+
.add((point.graphic || stateMarkerGraphic).parentGroup);
|
24208
25005
|
}
|
24209
25006
|
halo[move ? 'animate' : 'attr']({
|
24210
25007
|
d: point.haloPath(haloOptions.size)
|
@@ -24255,7 +25052,7 @@
|
|
24255
25052
|
* Extend the Series object with interaction
|
24256
25053
|
*/
|
24257
25054
|
|
24258
|
-
extend(Series.prototype, /** @lends Series.prototype */ {
|
25055
|
+
extend(Series.prototype, /** @lends Highcharts.Series.prototype */ {
|
24259
25056
|
/**
|
24260
25057
|
* Series mouse over handler
|
24261
25058
|
*/
|
@@ -24383,10 +25180,15 @@
|
|
24383
25180
|
},
|
24384
25181
|
|
24385
25182
|
/**
|
24386
|
-
*
|
25183
|
+
* Show or hide the series.
|
24387
25184
|
*
|
24388
|
-
* @param
|
24389
|
-
*
|
25185
|
+
* @param {Boolean} [visible]
|
25186
|
+
* True to show the series, false to hide. If undefined, the
|
25187
|
+
* visibility is toggled.
|
25188
|
+
* @param {Boolean} [redraw=true]
|
25189
|
+
* Whether to redraw the chart after the series is altered. If doing
|
25190
|
+
* more operations on the chart, it is a good idea to set redraw to
|
25191
|
+
* false and call {@link Chart#redraw|chart.redraw()} after.
|
24390
25192
|
*/
|
24391
25193
|
setVisible: function(vis, redraw) {
|
24392
25194
|
var series = this,
|
@@ -24446,14 +25248,23 @@
|
|
24446
25248
|
},
|
24447
25249
|
|
24448
25250
|
/**
|
24449
|
-
* Show the
|
25251
|
+
* Show the series if hidden.
|
25252
|
+
*
|
25253
|
+
* @sample highcharts/members/series-hide/
|
25254
|
+
* Toggle visibility from a button
|
24450
25255
|
*/
|
24451
25256
|
show: function() {
|
24452
25257
|
this.setVisible(true);
|
24453
25258
|
},
|
24454
25259
|
|
24455
25260
|
/**
|
24456
|
-
* Hide the
|
25261
|
+
* Hide the series if visible. If the {@link
|
25262
|
+
* https://api.highcharts.com/highcharts/chart.ignoreHiddenSeries|
|
25263
|
+
* chart.ignoreHiddenSeries} option is true, the chart is redrawn without
|
25264
|
+
* this series.
|
25265
|
+
*
|
25266
|
+
* @sample highcharts/members/series-hide/
|
25267
|
+
* Toggle visibility from a button
|
24457
25268
|
*/
|
24458
25269
|
hide: function() {
|
24459
25270
|
this.setVisible(false);
|
@@ -24461,15 +25272,24 @@
|
|
24461
25272
|
|
24462
25273
|
|
24463
25274
|
/**
|
24464
|
-
*
|
25275
|
+
* Select or unselect the series. This means its {@link
|
25276
|
+
* Highcharts.Series.selected|selected} property is set, the checkbox in the
|
25277
|
+
* legend is toggled and when selected, the series is returned by the
|
25278
|
+
* {@link Highcharts.Chart#getSelectedSeries} function.
|
25279
|
+
*
|
25280
|
+
* @param {Boolean} [selected]
|
25281
|
+
* True to select the series, false to unselect. If undefined, the
|
25282
|
+
* selection state is toggled.
|
24465
25283
|
*
|
24466
|
-
* @
|
24467
|
-
*
|
25284
|
+
* @sample highcharts/members/series-select/
|
25285
|
+
* Select a series from a button
|
24468
25286
|
*/
|
24469
25287
|
select: function(selected) {
|
24470
25288
|
var series = this;
|
24471
|
-
|
24472
|
-
series.selected = selected = (selected === undefined) ?
|
25289
|
+
|
25290
|
+
series.selected = selected = (selected === undefined) ?
|
25291
|
+
!series.selected :
|
25292
|
+
selected;
|
24473
25293
|
|
24474
25294
|
if (series.checkbox) {
|
24475
25295
|
series.checkbox.checked = selected;
|