corrade-nucleus-nucleons – Blame information for rev 19

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 /**
11 office 2 * @license Highmaps JS v5.0.12 (2017-05-24)
1 office 3 * Highmaps as a plugin for Highcharts 4.1.x or Highstock 2.1.x (x being the patch version of this file)
4 *
5 * (c) 2011-2017 Torstein Honsi
6 *
7 * License: www.highcharts.com/license
8 */
9 'use strict';
10 (function(factory) {
11 if (typeof module === 'object' && module.exports) {
12 module.exports = factory;
13 } else {
14 factory(Highcharts);
15 }
16 }(function(Highcharts) {
17 (function(H) {
18 /**
19 * (c) 2010-2017 Torstein Honsi
20 *
21 * License: www.highcharts.com/license
22 */
23 var Axis = H.Axis,
24 each = H.each,
25 pick = H.pick,
26 wrap = H.wrap;
27 /**
28 * Override to use the extreme coordinates from the SVG shape, not the
29 * data values
30 */
31 wrap(Axis.prototype, 'getSeriesExtremes', function(proceed) {
32 var isXAxis = this.isXAxis,
33 dataMin,
34 dataMax,
35 xData = [],
36 useMapGeometry;
37  
38 // Remove the xData array and cache it locally so that the proceed method doesn't use it
39 if (isXAxis) {
40 each(this.series, function(series, i) {
41 if (series.useMapGeometry) {
42 xData[i] = series.xData;
43 series.xData = [];
44 }
45 });
46 }
47  
48 // Call base to reach normal cartesian series (like mappoint)
49 proceed.call(this);
50  
51 // Run extremes logic for map and mapline
52 if (isXAxis) {
53 dataMin = pick(this.dataMin, Number.MAX_VALUE);
54 dataMax = pick(this.dataMax, -Number.MAX_VALUE);
55 each(this.series, function(series, i) {
56 if (series.useMapGeometry) {
57 dataMin = Math.min(dataMin, pick(series.minX, dataMin));
58 dataMax = Math.max(dataMax, pick(series.maxX, dataMin));
59 series.xData = xData[i]; // Reset xData array
60 useMapGeometry = true;
61 }
62 });
63 if (useMapGeometry) {
64 this.dataMin = dataMin;
65 this.dataMax = dataMax;
66 }
67 }
68 });
69  
70 /**
71 * Override axis translation to make sure the aspect ratio is always kept
72 */
73 wrap(Axis.prototype, 'setAxisTranslation', function(proceed) {
74 var chart = this.chart,
75 mapRatio,
76 plotRatio = chart.plotWidth / chart.plotHeight,
77 adjustedAxisLength,
78 xAxis = chart.xAxis[0],
79 padAxis,
80 fixTo,
81 fixDiff,
82 preserveAspectRatio;
83  
84  
85 // Run the parent method
86 proceed.call(this);
87  
88 // Check for map-like series
89 if (this.coll === 'yAxis' && xAxis.transA !== undefined) {
90 each(this.series, function(series) {
91 if (series.preserveAspectRatio) {
92 preserveAspectRatio = true;
93 }
94 });
95 }
96  
97 // On Y axis, handle both
98 if (preserveAspectRatio) {
99  
100 // Use the same translation for both axes
101 this.transA = xAxis.transA = Math.min(this.transA, xAxis.transA);
102  
103 mapRatio = plotRatio / ((xAxis.max - xAxis.min) / (this.max - this.min));
104  
105 // What axis to pad to put the map in the middle
106 padAxis = mapRatio < 1 ? this : xAxis;
107  
108 < 1 ? this : xAxis; // Pad it
109 < 1 ? this : xAxis; adjustedAxisLength = (padAxis.max - padAxis.min) * padAxis.transA;
110 < 1 ? this : xAxis; padAxis.pixelPadding = padAxis.len - adjustedAxisLength;
111 < 1 ? this : xAxis; padAxis.minPixelPadding = padAxis.pixelPadding / 2;
112  
113 < 1 ? this : xAxis; fixTo = padAxis.fixTo;
114 < 1 ? this : xAxis; if (fixTo) {
115 < 1 ? this : xAxis; fixDiff = fixTo[1] - padAxis.toValue(fixTo[0], true);
116 < 1 ? this : xAxis; fixDiff *= padAxis.transA;
117 < 1 ? this : xAxis; if (Math.abs(fixDiff) > padAxis.minPixelPadding || (padAxis.min === padAxis.dataMin && padAxis.max === padAxis.dataMax)) { // zooming out again, keep within restricted area
118 < 1 ? this : xAxis; fixDiff = 0;
119 < 1 ? this : xAxis; }
120 < 1 ? this : xAxis; padAxis.minPixelPadding -= fixDiff;
121 < 1 ? this : xAxis; }
122 < 1 ? this : xAxis; }
123 < 1 ? this : xAxis; });
124  
125 < 1 ? this : xAxis; /**
126 < 1 ? this : xAxis; * Override Axis.render in order to delete the fixTo prop
127 < 1 ? this : xAxis; */
128 < 1 ? this : xAxis; wrap(Axis.prototype, 'render', function(proceed) {
129 < 1 ? this : xAxis; proceed.call(this);
130 < 1 ? this : xAxis; this.fixTo = null;
131 < 1 ? this : xAxis; });
132  
133 < 1 ? this : xAxis; }(Highcharts));
134 < 1 ? this : xAxis; (function(H) {
135 < 1 ? this : xAxis; /**
136 < 1 ? this : xAxis; * (c) 2010-2017 Torstein Honsi
137 < 1 ? this : xAxis; *
138 < 1 ? this : xAxis; * License: www.highcharts.com/license
139 < 1 ? this : xAxis; */
140 < 1 ? this : xAxis; var Axis = H.Axis,
141 < 1 ? this : xAxis; Chart = H.Chart,
142 < 1 ? this : xAxis; color = H.color,
143 < 1 ? this : xAxis; ColorAxis,
144 < 1 ? this : xAxis; each = H.each,
145 < 1 ? this : xAxis; extend = H.extend,
146 < 1 ? this : xAxis; isNumber = H.isNumber,
147 < 1 ? this : xAxis; Legend = H.Legend,
148 < 1 ? this : xAxis; LegendSymbolMixin = H.LegendSymbolMixin,
149 < 1 ? this : xAxis; noop = H.noop,
150 < 1 ? this : xAxis; merge = H.merge,
151 < 1 ? this : xAxis; pick = H.pick,
152 < 1 ? this : xAxis; wrap = H.wrap;
153  
154 < 1 ? this : xAxis; /**
155 < 1 ? this : xAxis; * The ColorAxis object for inclusion in gradient legends
156 < 1 ? this : xAxis; */
157 < 1 ? this : xAxis; ColorAxis = H.ColorAxis = function() {
158 < 1 ? this : xAxis; this.init.apply(this, arguments);
159 < 1 ? this : xAxis; };
160 < 1 ? this : xAxis; extend(ColorAxis.prototype, Axis.prototype);
161 < 1 ? this : xAxis; extend(ColorAxis.prototype, {
162 < 1 ? this : xAxis; defaultColorAxisOptions: {
163 < 1 ? this : xAxis; lineWidth: 0,
164 < 1 ? this : xAxis; minPadding: 0,
165 < 1 ? this : xAxis; maxPadding: 0,
166 < 1 ? this : xAxis; gridLineWidth: 1,
167 < 1 ? this : xAxis; tickPixelInterval: 72,
168 < 1 ? this : xAxis; startOnTick: true,
169 < 1 ? this : xAxis; endOnTick: true,
170 < 1 ? this : xAxis; offset: 0,
171 < 1 ? this : xAxis; marker: {
172 < 1 ? this : xAxis; animation: {
173 < 1 ? this : xAxis; duration: 50
174 < 1 ? this : xAxis; },
175 < 1 ? this : xAxis; width: 0.01,
176  
177 < 1 ? this : xAxis; color: '#999999'
178  
179 < 1 ? this : xAxis; },
180 < 1 ? this : xAxis; labels: {
181 < 1 ? this : xAxis; overflow: 'justify',
182 < 1 ? this : xAxis; rotation: 0
183 < 1 ? this : xAxis; },
184 < 1 ? this : xAxis; minColor: '#e6ebf5',
185 < 1 ? this : xAxis; maxColor: '#003399',
186 < 1 ? this : xAxis; tickLength: 5,
187 < 1 ? this : xAxis; showInLegend: true
188 < 1 ? this : xAxis; },
189  
190 < 1 ? this : xAxis; // Properties to preserve after destroy, for Axis.update (#5881, #6025)
191 < 1 ? this : xAxis; keepProps: [
192 < 1 ? this : xAxis; 'legendGroup',
193 < 1 ? this : xAxis; 'legendItemHeight',
194 < 1 ? this : xAxis; 'legendItemWidth',
195 < 1 ? this : xAxis; 'legendItem',
196 < 1 ? this : xAxis; 'legendSymbol'
197 < 1 ? this : xAxis; ].concat(Axis.prototype.keepProps),
198  
199 < 1 ? this : xAxis; /**
200 < 1 ? this : xAxis; * Initialize the color axis
201 < 1 ? this : xAxis; */
202 < 1 ? this : xAxis; init: function(chart, userOptions) {
203 < 1 ? this : xAxis; var horiz = chart.options.legend.layout !== 'vertical',
204 < 1 ? this : xAxis; options;
205  
206 < 1 ? this : xAxis; this.coll = 'colorAxis';
207  
208 < 1 ? this : xAxis; // Build the options
209 < 1 ? this : xAxis; options = merge(this.defaultColorAxisOptions, {
210 < 1 ? this : xAxis; side: horiz ? 2 : 1,
211 < 1 ? this : xAxis; reversed: !horiz
212 < 1 ? this : xAxis; }, userOptions, {
213 < 1 ? this : xAxis; opposite: !horiz,
214 < 1 ? this : xAxis; showEmpty: false,
215 < 1 ? this : xAxis; title: null
216 < 1 ? this : xAxis; });
217  
218 < 1 ? this : xAxis; Axis.prototype.init.call(this, chart, options);
219  
220 < 1 ? this : xAxis; // Base init() pushes it to the xAxis array, now pop it again
221 < 1 ? this : xAxis; //chart[this.isXAxis ? 'xAxis' : 'yAxis'].pop();
222  
223 < 1 ? this : xAxis; // Prepare data classes
224 < 1 ? this : xAxis; if (userOptions.dataClasses) {
225 < 1 ? this : xAxis; this.initDataClasses(userOptions);
226 < 1 ? this : xAxis; }
11 office 227 < 1 ? this : xAxis; this.initStops();
1 office 228  
229 < 1 ? this : xAxis; // Override original axis properties
230 < 1 ? this : xAxis; this.horiz = horiz;
231 < 1 ? this : xAxis; this.zoomEnabled = false;
232  
233 < 1 ? this : xAxis; // Add default values
234 < 1 ? this : xAxis; this.defaultLegendLength = 200;
235 < 1 ? this : xAxis; },
236  
237 < 1 ? this : xAxis; initDataClasses: function(userOptions) {
11 office 238 < 1 ? this : xAxis; var chart = this.chart,
1 office 239 < 1 ? this : xAxis; dataClasses,
240 < 1 ? this : xAxis; colorCounter = 0,
241 < 1 ? this : xAxis; colorCount = chart.options.chart.colorCount,
242 < 1 ? this : xAxis; options = this.options,
243 < 1 ? this : xAxis; len = userOptions.dataClasses.length;
244 < 1 ? this : xAxis; this.dataClasses = dataClasses = [];
245 < 1 ? this : xAxis; this.legendItems = [];
246  
247 < 1 ? this : xAxis; each(userOptions.dataClasses, function(dataClass, i) {
248 < 1 ? this : xAxis; var colors;
249  
250 < 1 ? this : xAxis; dataClass = merge(dataClass);
251 < 1 ? this : xAxis; dataClasses.push(dataClass);
252 < 1 ? this : xAxis; if (!dataClass.color) {
253 < 1 ? this : xAxis; if (options.dataClassColor === 'category') {
254  
255 < 1 ? this : xAxis; colors = chart.options.colors;
256 < 1 ? this : xAxis; colorCount = colors.length;
257 < 1 ? this : xAxis; dataClass.color = colors[colorCounter];
258  
259 < 1 ? this : xAxis; dataClass.colorIndex = colorCounter;
260  
261 < 1 ? this : xAxis; // increase and loop back to zero
262 < 1 ? this : xAxis; colorCounter++;
263 < 1 ? this : xAxis; if (colorCounter === colorCount) {
264 < 1 ? this : xAxis; colorCounter = 0;
265 < 1 ? this : xAxis; }
266 < 1 ? this : xAxis; } else {
11 office 267 < 1 ? this : xAxis; dataClass.color = color(options.minColor).tweenTo(
1 office 268 < 1 ? this : xAxis; color(options.maxColor),
269 < 1 ? this : xAxis; len < 2 ? 0.5 : i / (len - 1) // #3219
270 < 1 ? this : xAxis; );
271 < 1 ? this : xAxis; }
272 < 1 ? this : xAxis; }
273 < 1 ? this : xAxis; });
274 < 1 ? this : xAxis; },
275  
11 office 276 < 1 ? this : xAxis; initStops: function() {
277 < 1 ? this : xAxis; this.stops = this.options.stops || [
1 office 278 < 1 ? this : xAxis; [0, this.options.minColor],
279 < 1 ? this : xAxis; [1, this.options.maxColor]
280 < 1 ? this : xAxis; ];
281 < 1 ? this : xAxis; each(this.stops, function(stop) {
282 < 1 ? this : xAxis; stop.color = color(stop[1]);
283 < 1 ? this : xAxis; });
284 < 1 ? this : xAxis; },
285  
286 < 1 ? this : xAxis; /**
287 < 1 ? this : xAxis; * Extend the setOptions method to process extreme colors and color
288 < 1 ? this : xAxis; * stops.
289 < 1 ? this : xAxis; */
290 < 1 ? this : xAxis; setOptions: function(userOptions) {
291 < 1 ? this : xAxis; Axis.prototype.setOptions.call(this, userOptions);
292  
293 < 1 ? this : xAxis; this.options.crosshair = this.options.marker;
294 < 1 ? this : xAxis; },
295  
296 < 1 ? this : xAxis; setAxisSize: function() {
297 < 1 ? this : xAxis; var symbol = this.legendSymbol,
298 < 1 ? this : xAxis; chart = this.chart,
299 < 1 ? this : xAxis; legendOptions = chart.options.legend || {},
300 < 1 ? this : xAxis; x,
301 < 1 ? this : xAxis; y,
302 < 1 ? this : xAxis; width,
303 < 1 ? this : xAxis; height;
304  
305 < 1 ? this : xAxis; if (symbol) {
306 < 1 ? this : xAxis; this.left = x = symbol.attr('x');
307 < 1 ? this : xAxis; this.top = y = symbol.attr('y');
308 < 1 ? this : xAxis; this.width = width = symbol.attr('width');
309 < 1 ? this : xAxis; this.height = height = symbol.attr('height');
310 < 1 ? this : xAxis; this.right = chart.chartWidth - x - width;
311 < 1 ? this : xAxis; this.bottom = chart.chartHeight - y - height;
312  
313 < 1 ? this : xAxis; this.len = this.horiz ? width : height;
314 < 1 ? this : xAxis; this.pos = this.horiz ? x : y;
315 < 1 ? this : xAxis; } else {
316 < 1 ? this : xAxis; // Fake length for disabled legend to avoid tick issues and such (#5205)
317 < 1 ? this : xAxis; this.len = (this.horiz ? legendOptions.symbolWidth : legendOptions.symbolHeight) || this.defaultLegendLength;
318 < 1 ? this : xAxis; }
319 < 1 ? this : xAxis; },
320  
11 office 321 < 1 ? this : xAxis; normalizedValue: function(value) {
322 < 1 ? this : xAxis; if (this.isLog) {
323 < 1 ? this : xAxis; value = this.val2lin(value);
324 < 1 ? this : xAxis; }
325 < 1 ? this : xAxis; return 1 - ((this.max - value) / ((this.max - this.min) || 1));
326 < 1 ? this : xAxis; },
327  
1 office 328 < 1 ? this : xAxis; /**
329 < 1 ? this : xAxis; * Translate from a value to a color
330 < 1 ? this : xAxis; */
331 < 1 ? this : xAxis; toColor: function(value, point) {
332 < 1 ? this : xAxis; var pos,
333 < 1 ? this : xAxis; stops = this.stops,
334 < 1 ? this : xAxis; from,
335 < 1 ? this : xAxis; to,
336 < 1 ? this : xAxis; color,
337 < 1 ? this : xAxis; dataClasses = this.dataClasses,
338 < 1 ? this : xAxis; dataClass,
339 < 1 ? this : xAxis; i;
340  
341 < 1 ? this : xAxis; if (dataClasses) {
342 < 1 ? this : xAxis; i = dataClasses.length;
343 < 1 ? this : xAxis; while (i--) {
344 < 1 ? this : xAxis; dataClass = dataClasses[i];
345 < 1 ? this : xAxis; from = dataClass.from;
346 < 1 ? this : xAxis; to = dataClass.to;
347 < 1 ? this : xAxis; if ((from === undefined || value >= from) && (to === undefined || value <= to)) {
348 < 1 ? this : xAxis; color = dataClass.color;
349 < 1 ? this : xAxis; if (point) {
350 < 1 ? this : xAxis; point.dataClass = i;
351 < 1 ? this : xAxis; point.colorIndex = dataClass.colorIndex;
352 < 1 ? this : xAxis; }
353 < 1 ? this : xAxis; break;
354 < 1 ? this : xAxis; }
355 < 1 ? this : xAxis; }
356  
357 < 1 ? this : xAxis; } else {
358  
11 office 359 < 1 ? this : xAxis; pos = this.normalizedValue(value);
1 office 360 < 1 ? this : xAxis; i = stops.length;
361 < 1 ? this : xAxis; while (i--) {
362 < 1 ? this : xAxis; if (pos > stops[i][0]) {
363 < 1 ? this : xAxis; break;
364 < 1 ? this : xAxis; }
365 < 1 ? this : xAxis; }
366 < 1 ? this : xAxis; from = stops[i] || stops[i + 1];
367 < 1 ? this : xAxis; to = stops[i + 1] || from;
368  
369 < 1 ? this : xAxis; // The position within the gradient
370 < 1 ? this : xAxis; pos = 1 - (to[0] - pos) / ((to[0] - from[0]) || 1);
371  
11 office 372 < 1 ? this : xAxis; color = from.color.tweenTo(
1 office 373 < 1 ? this : xAxis; to.color,
374 < 1 ? this : xAxis; pos
375 < 1 ? this : xAxis; );
376 < 1 ? this : xAxis; }
377 < 1 ? this : xAxis; return color;
378 < 1 ? this : xAxis; },
379  
380 < 1 ? this : xAxis; /**
381 < 1 ? this : xAxis; * Override the getOffset method to add the whole axis groups inside the legend.
382 < 1 ? this : xAxis; */
383 < 1 ? this : xAxis; getOffset: function() {
384 < 1 ? this : xAxis; var group = this.legendGroup,
385 < 1 ? this : xAxis; sideOffset = this.chart.axisOffset[this.side];
386  
387 < 1 ? this : xAxis; if (group) {
388  
389 < 1 ? this : xAxis; // Hook for the getOffset method to add groups to this parent group
390 < 1 ? this : xAxis; this.axisParent = group;
391  
392 < 1 ? this : xAxis; // Call the base
393 < 1 ? this : xAxis; Axis.prototype.getOffset.call(this);
394  
395 < 1 ? this : xAxis; // First time only
396 < 1 ? this : xAxis; if (!this.added) {
397  
398 < 1 ? this : xAxis; this.added = true;
399  
400 < 1 ? this : xAxis; this.labelLeft = 0;
401 < 1 ? this : xAxis; this.labelRight = this.width;
402 < 1 ? this : xAxis; }
403 < 1 ? this : xAxis; // Reset it to avoid color axis reserving space
404 < 1 ? this : xAxis; this.chart.axisOffset[this.side] = sideOffset;
405 < 1 ? this : xAxis; }
406 < 1 ? this : xAxis; },
407  
408 < 1 ? this : xAxis; /**
409 < 1 ? this : xAxis; * Create the color gradient
410 < 1 ? this : xAxis; */
411 < 1 ? this : xAxis; setLegendColor: function() {
412 < 1 ? this : xAxis; var grad,
413 < 1 ? this : xAxis; horiz = this.horiz,
414 < 1 ? this : xAxis; reversed = this.reversed,
415 < 1 ? this : xAxis; one = reversed ? 1 : 0,
416 < 1 ? this : xAxis; zero = reversed ? 0 : 1;
417  
418 < 1 ? this : xAxis; grad = horiz ? [one, 0, zero, 0] : [0, zero, 0, one]; // #3190
419 < 1 ? this : xAxis; this.legendColor = {
420 < 1 ? this : xAxis; linearGradient: {
421 < 1 ? this : xAxis; x1: grad[0],
422 < 1 ? this : xAxis; y1: grad[1],
423 < 1 ? this : xAxis; x2: grad[2],
424 < 1 ? this : xAxis; y2: grad[3]
425 < 1 ? this : xAxis; },
11 office 426 < 1 ? this : xAxis; stops: this.stops
1 office 427 < 1 ? this : xAxis; };
428 < 1 ? this : xAxis; },
429  
430 < 1 ? this : xAxis; /**
431 < 1 ? this : xAxis; * The color axis appears inside the legend and has its own legend symbol
432 < 1 ? this : xAxis; */
433 < 1 ? this : xAxis; drawLegendSymbol: function(legend, item) {
434 < 1 ? this : xAxis; var padding = legend.padding,
435 < 1 ? this : xAxis; legendOptions = legend.options,
436 < 1 ? this : xAxis; horiz = this.horiz,
437 < 1 ? this : xAxis; width = pick(legendOptions.symbolWidth, horiz ? this.defaultLegendLength : 12),
438 < 1 ? this : xAxis; height = pick(legendOptions.symbolHeight, horiz ? 12 : this.defaultLegendLength),
439 < 1 ? this : xAxis; labelPadding = pick(legendOptions.labelPadding, horiz ? 16 : 30),
440 < 1 ? this : xAxis; itemDistance = pick(legendOptions.itemDistance, 10);
441  
442 < 1 ? this : xAxis; this.setLegendColor();
443  
444 < 1 ? this : xAxis; // Create the gradient
445 < 1 ? this : xAxis; item.legendSymbol = this.chart.renderer.rect(
446 < 1 ? this : xAxis; 0,
447 < 1 ? this : xAxis; legend.baseline - 11,
448 < 1 ? this : xAxis; width,
449 < 1 ? this : xAxis; height
450 < 1 ? this : xAxis; ).attr({
451 < 1 ? this : xAxis; zIndex: 1
452 < 1 ? this : xAxis; }).add(item.legendGroup);
453  
454 < 1 ? this : xAxis; // Set how much space this legend item takes up
455 < 1 ? this : xAxis; this.legendItemWidth = width + padding + (horiz ? itemDistance : labelPadding);
456 < 1 ? this : xAxis; this.legendItemHeight = height + padding + (horiz ? labelPadding : 0);
457 < 1 ? this : xAxis; },
458 < 1 ? this : xAxis; /**
459 < 1 ? this : xAxis; * Fool the legend
460 < 1 ? this : xAxis; */
461 < 1 ? this : xAxis; setState: noop,
462 < 1 ? this : xAxis; visible: true,
463 < 1 ? this : xAxis; setVisible: noop,
464 < 1 ? this : xAxis; getSeriesExtremes: function() {
465 < 1 ? this : xAxis; var series = this.series,
466 < 1 ? this : xAxis; i = series.length;
467 < 1 ? this : xAxis; this.dataMin = Infinity;
468 < 1 ? this : xAxis; this.dataMax = -Infinity;
469 < 1 ? this : xAxis; while (i--) {
470 < 1 ? this : xAxis; if (series[i].valueMin !== undefined) {
471 < 1 ? this : xAxis; this.dataMin = Math.min(this.dataMin, series[i].valueMin);
472 < 1 ? this : xAxis; this.dataMax = Math.max(this.dataMax, series[i].valueMax);
473 < 1 ? this : xAxis; }
474 < 1 ? this : xAxis; }
475 < 1 ? this : xAxis; },
476 < 1 ? this : xAxis; drawCrosshair: function(e, point) {
477 < 1 ? this : xAxis; var plotX = point && point.plotX,
478 < 1 ? this : xAxis; plotY = point && point.plotY,
479 < 1 ? this : xAxis; crossPos,
480 < 1 ? this : xAxis; axisPos = this.pos,
481 < 1 ? this : xAxis; axisLen = this.len;
482  
483 < 1 ? this : xAxis; if (point) {
484 < 1 ? this : xAxis; crossPos = this.toPixels(point[point.series.colorKey]);
485 < 1 ? this : xAxis; if (crossPos < axisPos) {
486 < 1 ? this : xAxis;< axisPos) { crossPos = axisPos - 2;
487 < 1 ? this : xAxis;< axisPos) { } else if (crossPos > axisPos + axisLen) {
488 < 1 ? this : xAxis;< axisPos) { crossPos = axisPos + axisLen + 2;
489 < 1 ? this : xAxis;< axisPos) { }
490  
491 < 1 ? this : xAxis;< axisPos) { point.plotX = crossPos;
492 < 1 ? this : xAxis;< axisPos) { point.plotY = this.len - crossPos;
493 < 1 ? this : xAxis;< axisPos) { Axis.prototype.drawCrosshair.call(this, e, point);
494 < 1 ? this : xAxis;< axisPos) { point.plotX = plotX;
495 < 1 ? this : xAxis;< axisPos) { point.plotY = plotY;
496  
497 < 1 ? this : xAxis;< axisPos) { if (this.cross) {
498 < 1 ? this : xAxis;< axisPos) { this.cross
499 < 1 ? this : xAxis;< axisPos) { .addClass('highcharts-coloraxis-marker')
500 < 1 ? this : xAxis;< axisPos) { .add(this.legendGroup);
501  
502  
503 < 1 ? this : xAxis;< axisPos) { this.cross.attr({
504 < 1 ? this : xAxis;< axisPos) { fill: this.crosshair.color
505 < 1 ? this : xAxis;< axisPos) { });
506  
507  
508 < 1 ? this : xAxis;< axisPos) { }
509 < 1 ? this : xAxis;< axisPos) { }
510 < 1 ? this : xAxis;< axisPos) { },
511 < 1 ? this : xAxis;< axisPos) { getPlotLinePath: function(a, b, c, d, pos) {
512 < 1 ? this : xAxis;< axisPos) { return isNumber(pos) ? // crosshairs only // #3969 pos can be 0 !!
513 < 1 ? this : xAxis;< axisPos) { (this.horiz ? ['M', pos - 4, this.top - 6, 'L', pos + 4, this.top - 6, pos, this.top, 'Z'] : ['M', this.left, pos, 'L', this.left - 6, pos + 6, this.left - 6, pos - 6, 'Z']) :
514 < 1 ? this : xAxis;< axisPos) { Axis.prototype.getPlotLinePath.call(this, a, b, c, d);
515 < 1 ? this : xAxis;< axisPos) { },
516  
517 < 1 ? this : xAxis;< axisPos) { update: function(newOptions, redraw) {
518 < 1 ? this : xAxis;< axisPos) { var chart = this.chart,
519 < 1 ? this : xAxis;< axisPos) { legend = chart.legend;
520  
521 < 1 ? this : xAxis;< axisPos) { each(this.series, function(series) {
522 < 1 ? this : xAxis;< axisPos) { series.isDirtyData = true; // Needed for Axis.update when choropleth colors change
523 < 1 ? this : xAxis;< axisPos) { });
524  
525 < 1 ? this : xAxis;< axisPos) { // When updating data classes, destroy old items and make sure new ones are created (#3207)
526 < 1 ? this : xAxis;< axisPos) { if (newOptions.dataClasses && legend.allItems) {
527 < 1 ? this : xAxis;< axisPos) { each(legend.allItems, function(item) {
11 office 528 < 1 ? this : xAxis;< axisPos) { if (item.isDataClass && item.legendGroup) {
1 office 529 < 1 ? this : xAxis;< axisPos) { item.legendGroup.destroy();
530 < 1 ? this : xAxis;< axisPos) { }
531 < 1 ? this : xAxis;< axisPos) { });
532 < 1 ? this : xAxis;< axisPos) { chart.isDirtyLegend = true;
533 < 1 ? this : xAxis;< axisPos) { }
534  
535 < 1 ? this : xAxis;< axisPos) { // Keep the options structure updated for export. Unlike xAxis and yAxis, the colorAxis is
536 < 1 ? this : xAxis;< axisPos) { // not an array. (#3207)
537 < 1 ? this : xAxis;< axisPos) { chart.options[this.coll] = merge(this.userOptions, newOptions);
538  
539 < 1 ? this : xAxis;< axisPos) { Axis.prototype.update.call(this, newOptions, redraw);
540 < 1 ? this : xAxis;< axisPos) { if (this.legendItem) {
541 < 1 ? this : xAxis;< axisPos) { this.setLegendColor();
542 < 1 ? this : xAxis;< axisPos) { legend.colorizeItem(this, true);
543 < 1 ? this : xAxis;< axisPos) { }
544 < 1 ? this : xAxis;< axisPos) { },
545  
546 < 1 ? this : xAxis;< axisPos) { /**
11 office 547 < 1 ? this : xAxis;< axisPos) { * Extend basic axis remove by also removing the legend item.
548 < 1 ? this : xAxis;< axisPos) { */
549 < 1 ? this : xAxis;< axisPos) { remove: function() {
550 < 1 ? this : xAxis;< axisPos) { if (this.legendItem) {
551 < 1 ? this : xAxis;< axisPos) { this.chart.legend.destroyItem(this);
552 < 1 ? this : xAxis;< axisPos) { }
553 < 1 ? this : xAxis;< axisPos) { Axis.prototype.remove.call(this);
554 < 1 ? this : xAxis;< axisPos) { },
555  
556 < 1 ? this : xAxis;< axisPos) { /**
1 office 557 < 1 ? this : xAxis;< axisPos) { * Get the legend item symbols for data classes
558 < 1 ? this : xAxis;< axisPos) { */
559 < 1 ? this : xAxis;< axisPos) { getDataClassLegendSymbols: function() {
560 < 1 ? this : xAxis;< axisPos) { var axis = this,
561 < 1 ? this : xAxis;< axisPos) { chart = this.chart,
562 < 1 ? this : xAxis;< axisPos) { legendItems = this.legendItems,
563 < 1 ? this : xAxis;< axisPos) { legendOptions = chart.options.legend,
564 < 1 ? this : xAxis;< axisPos) { valueDecimals = legendOptions.valueDecimals,
565 < 1 ? this : xAxis;< axisPos) { valueSuffix = legendOptions.valueSuffix || '',
566 < 1 ? this : xAxis;< axisPos) { name;
567  
568 < 1 ? this : xAxis;< axisPos) { if (!legendItems.length) {
569 < 1 ? this : xAxis;< axisPos) { each(this.dataClasses, function(dataClass, i) {
570 < 1 ? this : xAxis;< axisPos) { var vis = true,
571 < 1 ? this : xAxis;< axisPos) { from = dataClass.from,
572 < 1 ? this : xAxis;< axisPos) { to = dataClass.to;
573  
574 < 1 ? this : xAxis;< axisPos) { // Assemble the default name. This can be overridden by legend.options.labelFormatter
575 < 1 ? this : xAxis;< axisPos) { name = '';
576 < 1 ? this : xAxis;< axisPos) { if (from === undefined) {
577 < 1 ? this : xAxis;< axisPos) { name = '< ';
578 < 1 ? this : xAxis;< axisPos) {< '; } else if (to === undefined) {
579 < 1 ? this : xAxis;< axisPos) {< '; name = '> ';
580 < 1 ? this : xAxis;< axisPos) {< '; }
581 < 1 ? this : xAxis;< axisPos) {< '; if (from !== undefined) {
582 < 1 ? this : xAxis;< axisPos) {< '; name += H.numberFormat(from, valueDecimals) + valueSuffix;
583 < 1 ? this : xAxis;< axisPos) {< '; }
584 < 1 ? this : xAxis;< axisPos) {< '; if (from !== undefined && to !== undefined) {
585 < 1 ? this : xAxis;< axisPos) {< '; name += ' - ';
586 < 1 ? this : xAxis;< axisPos) {< '; }
587 < 1 ? this : xAxis;< axisPos) {< '; if (to !== undefined) {
588 < 1 ? this : xAxis;< axisPos) {< '; name += H.numberFormat(to, valueDecimals) + valueSuffix;
589 < 1 ? this : xAxis;< axisPos) {< '; }
590 < 1 ? this : xAxis;< axisPos) {< '; // Add a mock object to the legend items
591 < 1 ? this : xAxis;< axisPos) {< '; legendItems.push(extend({
592 < 1 ? this : xAxis;< axisPos) {< '; chart: chart,
593 < 1 ? this : xAxis;< axisPos) {< '; name: name,
594 < 1 ? this : xAxis;< axisPos) {< '; options: {},
595 < 1 ? this : xAxis;< axisPos) {< '; drawLegendSymbol: LegendSymbolMixin.drawRectangle,
596 < 1 ? this : xAxis;< axisPos) {< '; visible: true,
597 < 1 ? this : xAxis;< axisPos) {< '; setState: noop,
598 < 1 ? this : xAxis;< axisPos) {< '; isDataClass: true,
599 < 1 ? this : xAxis;< axisPos) {< '; setVisible: function() {
600 < 1 ? this : xAxis;< axisPos) {< '; vis = this.visible = !vis;
601 < 1 ? this : xAxis;< axisPos) {< '; each(axis.series, function(series) {
602 < 1 ? this : xAxis;< axisPos) {< '; each(series.points, function(point) {
603 < 1 ? this : xAxis;< axisPos) {< '; if (point.dataClass === i) {
604 < 1 ? this : xAxis;< axisPos) {< '; point.setVisible(vis);
605 < 1 ? this : xAxis;< axisPos) {< '; }
606 < 1 ? this : xAxis;< axisPos) {< '; });
607 < 1 ? this : xAxis;< axisPos) {< '; });
608  
609 < 1 ? this : xAxis;< axisPos) {< '; chart.legend.colorizeItem(this, vis);
610 < 1 ? this : xAxis;< axisPos) {< '; }
611 < 1 ? this : xAxis;< axisPos) {< '; }, dataClass));
612 < 1 ? this : xAxis;< axisPos) {< '; });
613 < 1 ? this : xAxis;< axisPos) {< '; }
614 < 1 ? this : xAxis;< axisPos) {< '; return legendItems;
615 < 1 ? this : xAxis;< axisPos) {< '; },
616 < 1 ? this : xAxis;< axisPos) {< '; name: '' // Prevents 'undefined' in legend in IE8
617 < 1 ? this : xAxis;< axisPos) {< '; });
618  
619 < 1 ? this : xAxis;< axisPos) {< '; /**
620 < 1 ? this : xAxis;< axisPos) {< '; * Handle animation of the color attributes directly
621 < 1 ? this : xAxis;< axisPos) {< '; */
622 < 1 ? this : xAxis;< axisPos) {< '; each(['fill', 'stroke'], function(prop) {
623 < 1 ? this : xAxis;< axisPos) {< '; H.Fx.prototype[prop + 'Setter'] = function() {
624 < 1 ? this : xAxis;< axisPos) {< '; this.elem.attr(
625 < 1 ? this : xAxis;< axisPos) {< '; prop,
11 office 626 < 1 ? this : xAxis;< axisPos) {< '; color(this.start).tweenTo(
1 office 627 < 1 ? this : xAxis;< axisPos) {< '; color(this.end),
628 < 1 ? this : xAxis;< axisPos) {< '; this.pos
629 < 1 ? this : xAxis;< axisPos) {< '; ),
630 < 1 ? this : xAxis;< axisPos) {< '; null,
631 < 1 ? this : xAxis;< axisPos) {< '; true
632 < 1 ? this : xAxis;< axisPos) {< '; );
633 < 1 ? this : xAxis;< axisPos) {< '; };
634 < 1 ? this : xAxis;< axisPos) {< '; });
635  
636 < 1 ? this : xAxis;< axisPos) {< '; /**
637 < 1 ? this : xAxis;< axisPos) {< '; * Extend the chart getAxes method to also get the color axis
638 < 1 ? this : xAxis;< axisPos) {< '; */
639 < 1 ? this : xAxis;< axisPos) {< '; wrap(Chart.prototype, 'getAxes', function(proceed) {
640  
641 < 1 ? this : xAxis;< axisPos) {< '; var options = this.options,
642 < 1 ? this : xAxis;< axisPos) {< '; colorAxisOptions = options.colorAxis;
643  
644 < 1 ? this : xAxis;< axisPos) {< '; proceed.call(this);
645  
646 < 1 ? this : xAxis;< axisPos) {< '; this.colorAxis = [];
647 < 1 ? this : xAxis;< axisPos) {< '; if (colorAxisOptions) {
648 < 1 ? this : xAxis;< axisPos) {< '; new ColorAxis(this, colorAxisOptions); // eslint-disable-line no-new
649 < 1 ? this : xAxis;< axisPos) {< '; }
650 < 1 ? this : xAxis;< axisPos) {< '; });
651  
652  
653 < 1 ? this : xAxis;< axisPos) {< '; /**
654 < 1 ? this : xAxis;< axisPos) {< '; * Wrap the legend getAllItems method to add the color axis. This also removes the
655 < 1 ? this : xAxis;< axisPos) {< '; * axis' own series to prevent them from showing up individually.
656 < 1 ? this : xAxis;< axisPos) {< '; */
657 < 1 ? this : xAxis;< axisPos) {< '; wrap(Legend.prototype, 'getAllItems', function(proceed) {
658 < 1 ? this : xAxis;< axisPos) {< '; var allItems = [],
659 < 1 ? this : xAxis;< axisPos) {< '; colorAxis = this.chart.colorAxis[0];
660  
661 < 1 ? this : xAxis;< axisPos) {< '; if (colorAxis && colorAxis.options) {
662 < 1 ? this : xAxis;< axisPos) {< '; if (colorAxis.options.showInLegend) {
663 < 1 ? this : xAxis;< axisPos) {< '; // Data classes
664 < 1 ? this : xAxis;< axisPos) {< '; if (colorAxis.options.dataClasses) {
665 < 1 ? this : xAxis;< axisPos) {< '; allItems = allItems.concat(colorAxis.getDataClassLegendSymbols());
666 < 1 ? this : xAxis;< axisPos) {< '; // Gradient legend
667 < 1 ? this : xAxis;< axisPos) {< '; } else {
668 < 1 ? this : xAxis;< axisPos) {< '; // Add this axis on top
669 < 1 ? this : xAxis;< axisPos) {< '; allItems.push(colorAxis);
670 < 1 ? this : xAxis;< axisPos) {< '; }
671 < 1 ? this : xAxis;< axisPos) {< '; }
672  
673 < 1 ? this : xAxis;< axisPos) {< '; // Don't add the color axis' series
674 < 1 ? this : xAxis;< axisPos) {< '; each(colorAxis.series, function(series) {
675 < 1 ? this : xAxis;< axisPos) {< '; series.options.showInLegend = false;
676 < 1 ? this : xAxis;< axisPos) {< '; });
677 < 1 ? this : xAxis;< axisPos) {< '; }
678  
679 < 1 ? this : xAxis;< axisPos) {< '; return allItems.concat(proceed.call(this));
680 < 1 ? this : xAxis;< axisPos) {< '; });
681  
682 < 1 ? this : xAxis;< axisPos) {< '; wrap(Legend.prototype, 'colorizeItem', function(proceed, item, visible) {
683 < 1 ? this : xAxis;< axisPos) {< '; proceed.call(this, item, visible);
684 < 1 ? this : xAxis;< axisPos) {< '; if (visible && item.legendColor) {
685 < 1 ? this : xAxis;< axisPos) {< '; item.legendSymbol.attr({
686 < 1 ? this : xAxis;< axisPos) {< '; fill: item.legendColor
687 < 1 ? this : xAxis;< axisPos) {< '; });
688 < 1 ? this : xAxis;< axisPos) {< '; }
689 < 1 ? this : xAxis;< axisPos) {< '; });
690  
691 < 1 ? this : xAxis;< axisPos) {< '; }(Highcharts));
692 < 1 ? this : xAxis;< axisPos) {< '; (function(H) {
693 < 1 ? this : xAxis;< axisPos) {< '; /**
694 < 1 ? this : xAxis;< axisPos) {< '; * (c) 2010-2017 Torstein Honsi
695 < 1 ? this : xAxis;< axisPos) {< '; *
696 < 1 ? this : xAxis;< axisPos) {< '; * License: www.highcharts.com/license
697 < 1 ? this : xAxis;< axisPos) {< '; */
698 < 1 ? this : xAxis;< axisPos) {< '; var defined = H.defined,
699 < 1 ? this : xAxis;< axisPos) {< '; each = H.each,
700 < 1 ? this : xAxis;< axisPos) {< '; noop = H.noop,
701 < 1 ? this : xAxis;< axisPos) {< '; seriesTypes = H.seriesTypes;
702  
703 < 1 ? this : xAxis;< axisPos) {< '; /**
704 < 1 ? this : xAxis;< axisPos) {< '; * Mixin for maps and heatmaps
705 < 1 ? this : xAxis;< axisPos) {< '; */
706 < 1 ? this : xAxis;< axisPos) {< '; H.colorPointMixin = {
707 < 1 ? this : xAxis;< axisPos) {< '; /**
708 < 1 ? this : xAxis;< axisPos) {< '; * Color points have a value option that determines whether or not it is a null point
709 < 1 ? this : xAxis;< axisPos) {< '; */
710 < 1 ? this : xAxis;< axisPos) {< '; isValid: function() {
711 < 1 ? this : xAxis;< axisPos) {< '; return this.value !== null;
712 < 1 ? this : xAxis;< axisPos) {< '; },
713  
714 < 1 ? this : xAxis;< axisPos) {< '; /**
715 < 1 ? this : xAxis;< axisPos) {< '; * Set the visibility of a single point
716 < 1 ? this : xAxis;< axisPos) {< '; */
717 < 1 ? this : xAxis;< axisPos) {< '; setVisible: function(vis) {
718 < 1 ? this : xAxis;< axisPos) {< '; var point = this,
719 < 1 ? this : xAxis;< axisPos) {< '; method = vis ? 'show' : 'hide';
720  
721 < 1 ? this : xAxis;< axisPos) {< '; // Show and hide associated elements
722 < 1 ? this : xAxis;< axisPos) {< '; each(['graphic', 'dataLabel'], function(key) {
723 < 1 ? this : xAxis;< axisPos) {< '; if (point[key]) {
724 < 1 ? this : xAxis;< axisPos) {< '; point[key][method]();
725 < 1 ? this : xAxis;< axisPos) {< '; }
726 < 1 ? this : xAxis;< axisPos) {< '; });
727 < 1 ? this : xAxis;< axisPos) {< '; },
728 < 1 ? this : xAxis;< axisPos) {< '; setState: function(state) {
729 < 1 ? this : xAxis;< axisPos) {< '; H.Point.prototype.setState.call(this, state);
730 < 1 ? this : xAxis;< axisPos) {< '; if (this.graphic) {
731 < 1 ? this : xAxis;< axisPos) {< '; this.graphic.attr({
732 < 1 ? this : xAxis;< axisPos) {< '; zIndex: state === 'hover' ? 1 : 0
733 < 1 ? this : xAxis;< axisPos) {< '; });
734 < 1 ? this : xAxis;< axisPos) {< '; }
735 < 1 ? this : xAxis;< axisPos) {< '; }
736 < 1 ? this : xAxis;< axisPos) {< '; };
737  
738 < 1 ? this : xAxis;< axisPos) {< '; H.colorSeriesMixin = {
739 < 1 ? this : xAxis;< axisPos) {< '; pointArrayMap: ['value'],
740 < 1 ? this : xAxis;< axisPos) {< '; axisTypes: ['xAxis', 'yAxis', 'colorAxis'],
741 < 1 ? this : xAxis;< axisPos) {< '; optionalAxis: 'colorAxis',
742 < 1 ? this : xAxis;< axisPos) {< '; trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'],
743 < 1 ? this : xAxis;< axisPos) {< '; getSymbol: noop,
744 < 1 ? this : xAxis;< axisPos) {< '; parallelArrays: ['x', 'y', 'value'],
745 < 1 ? this : xAxis;< axisPos) {< '; colorKey: 'value',
746  
747  
748 < 1 ? this : xAxis;< axisPos) {< '; pointAttribs: seriesTypes.column.prototype.pointAttribs,
749  
750  
751 < 1 ? this : xAxis;< axisPos) {< '; /**
752 < 1 ? this : xAxis;< axisPos) {< '; * In choropleth maps, the color is a result of the value, so this needs translation too
753 < 1 ? this : xAxis;< axisPos) {< '; */
754 < 1 ? this : xAxis;< axisPos) {< '; translateColors: function() {
755 < 1 ? this : xAxis;< axisPos) {< '; var series = this,
756 < 1 ? this : xAxis;< axisPos) {< '; nullColor = this.options.nullColor,
757 < 1 ? this : xAxis;< axisPos) {< '; colorAxis = this.colorAxis,
758 < 1 ? this : xAxis;< axisPos) {< '; colorKey = this.colorKey;
759  
760 < 1 ? this : xAxis;< axisPos) {< '; each(this.data, function(point) {
761 < 1 ? this : xAxis;< axisPos) {< '; var value = point[colorKey],
762 < 1 ? this : xAxis;< axisPos) {< '; color;
763  
764 < 1 ? this : xAxis;< axisPos) {< '; color = point.options.color ||
765 < 1 ? this : xAxis;< axisPos) {< '; (point.isNull ? nullColor : (colorAxis && value !== undefined) ? colorAxis.toColor(value, point) : point.color || series.color);
766  
767 < 1 ? this : xAxis;< axisPos) {< '; if (color) {
768 < 1 ? this : xAxis;< axisPos) {< '; point.color = color;
769 < 1 ? this : xAxis;< axisPos) {< '; }
770 < 1 ? this : xAxis;< axisPos) {< '; });
771 < 1 ? this : xAxis;< axisPos) {< '; },
772  
773 < 1 ? this : xAxis;< axisPos) {< '; /**
774 < 1 ? this : xAxis;< axisPos) {< '; * Get the color attibutes to apply on the graphic
775 < 1 ? this : xAxis;< axisPos) {< '; */
776 < 1 ? this : xAxis;< axisPos) {< '; colorAttribs: function(point) {
777 < 1 ? this : xAxis;< axisPos) {< '; var ret = {};
778 < 1 ? this : xAxis;< axisPos) {< '; if (defined(point.color)) {
779 < 1 ? this : xAxis;< axisPos) {< '; ret[this.colorProp || 'fill'] = point.color;
780 < 1 ? this : xAxis;< axisPos) {< '; }
781 < 1 ? this : xAxis;< axisPos) {< '; return ret;
782 < 1 ? this : xAxis;< axisPos) {< '; }
783 < 1 ? this : xAxis;< axisPos) {< '; };
784  
785 < 1 ? this : xAxis;< axisPos) {< '; }(Highcharts));
786 < 1 ? this : xAxis;< axisPos) {< '; (function(H) {
787 < 1 ? this : xAxis;< axisPos) {< '; /**
788 < 1 ? this : xAxis;< axisPos) {< '; * (c) 2010-2017 Torstein Honsi
789 < 1 ? this : xAxis;< axisPos) {< '; *
790 < 1 ? this : xAxis;< axisPos) {< '; * License: www.highcharts.com/license
791 < 1 ? this : xAxis;< axisPos) {< '; */
792 < 1 ? this : xAxis;< axisPos) {< '; var addEvent = H.addEvent,
793 < 1 ? this : xAxis;< axisPos) {< '; Chart = H.Chart,
794 < 1 ? this : xAxis;< axisPos) {< '; doc = H.doc,
795 < 1 ? this : xAxis;< axisPos) {< '; each = H.each,
796 < 1 ? this : xAxis;< axisPos) {< '; extend = H.extend,
797 < 1 ? this : xAxis;< axisPos) {< '; merge = H.merge,
798 < 1 ? this : xAxis;< axisPos) {< '; pick = H.pick,
799 < 1 ? this : xAxis;< axisPos) {< '; wrap = H.wrap;
800  
801 < 1 ? this : xAxis;< axisPos) {< '; function stopEvent(e) {
802 < 1 ? this : xAxis;< axisPos) {< '; if (e) {
803 < 1 ? this : xAxis;< axisPos) {< '; if (e.preventDefault) {
804 < 1 ? this : xAxis;< axisPos) {< '; e.preventDefault();
805 < 1 ? this : xAxis;< axisPos) {< '; }
806 < 1 ? this : xAxis;< axisPos) {< '; if (e.stopPropagation) {
807 < 1 ? this : xAxis;< axisPos) {< '; e.stopPropagation();
808 < 1 ? this : xAxis;< axisPos) {< '; }
809 < 1 ? this : xAxis;< axisPos) {< '; e.cancelBubble = true;
810 < 1 ? this : xAxis;< axisPos) {< '; }
811 < 1 ? this : xAxis;< axisPos) {< '; }
812  
813 < 1 ? this : xAxis;< axisPos) {< '; /**
814 < 1 ? this : xAxis;< axisPos) {< '; * The MapNavigation handles buttons for navigation in addition to mousewheel
815 < 1 ? this : xAxis;< axisPos) {< '; * and doubleclick handlers for chart zooming.
816 < 1 ? this : xAxis;< axisPos) {< '; * @param {Chart} chart The Chart instance.
817 < 1 ? this : xAxis;< axisPos) {< '; */
818 < 1 ? this : xAxis;< axisPos) {< '; function MapNavigation(chart) {
819 < 1 ? this : xAxis;< axisPos) {< '; this.init(chart);
820 < 1 ? this : xAxis;< axisPos) {< '; }
821  
822 < 1 ? this : xAxis;< axisPos) {< '; /**
823 < 1 ? this : xAxis;< axisPos) {< '; * Initiator function.
824 < 1 ? this : xAxis;< axisPos) {< '; * @param {Chart} chart The Chart instance.
825 < 1 ? this : xAxis;< axisPos) {< '; */
826 < 1 ? this : xAxis;< axisPos) {< '; MapNavigation.prototype.init = function(chart) {
827 < 1 ? this : xAxis;< axisPos) {< '; this.chart = chart;
828 < 1 ? this : xAxis;< axisPos) {< '; chart.mapNavButtons = [];
829 < 1 ? this : xAxis;< axisPos) {< '; };
830  
831 < 1 ? this : xAxis;< axisPos) {< '; /**
832 < 1 ? this : xAxis;< axisPos) {< '; * Update the map navigation with new options. Calling this is the same as
833 < 1 ? this : xAxis;< axisPos) {< '; * calling `chart.update({ mapNavigation: {} })`.
834 < 1 ? this : xAxis;< axisPos) {< '; * @param {Object} options New options for the map navigation.
835 < 1 ? this : xAxis;< axisPos) {< '; */
836 < 1 ? this : xAxis;< axisPos) {< '; MapNavigation.prototype.update = function(options) {
837 < 1 ? this : xAxis;< axisPos) {< '; var chart = this.chart,
838 < 1 ? this : xAxis;< axisPos) {< '; o = chart.options.mapNavigation,
839 < 1 ? this : xAxis;< axisPos) {< '; buttonOptions,
840 < 1 ? this : xAxis;< axisPos) {< '; attr,
841 < 1 ? this : xAxis;< axisPos) {< '; states,
842 < 1 ? this : xAxis;< axisPos) {< '; hoverStates,
843 < 1 ? this : xAxis;< axisPos) {< '; selectStates,
844 < 1 ? this : xAxis;< axisPos) {< '; outerHandler = function(e) {
845 < 1 ? this : xAxis;< axisPos) {< '; this.handler.call(chart, e);
846 < 1 ? this : xAxis;< axisPos) {< '; stopEvent(e); // Stop default click event (#4444)
847 < 1 ? this : xAxis;< axisPos) {< '; },
848 < 1 ? this : xAxis;< axisPos) {< '; mapNavButtons = chart.mapNavButtons;
849  
850 < 1 ? this : xAxis;< axisPos) {< '; // Merge in new options in case of update, and register back to chart
851 < 1 ? this : xAxis;< axisPos) {< '; // options.
852 < 1 ? this : xAxis;< axisPos) {< '; if (options) {
853 < 1 ? this : xAxis;< axisPos) {< '; o = chart.options.mapNavigation =
854 < 1 ? this : xAxis;< axisPos) {< '; merge(chart.options.mapNavigation, options);
855 < 1 ? this : xAxis;< axisPos) {< '; }
856  
857 < 1 ? this : xAxis;< axisPos) {< '; // Destroy buttons in case of dynamic update
858 < 1 ? this : xAxis;< axisPos) {< '; while (mapNavButtons.length) {
859 < 1 ? this : xAxis;< axisPos) {< '; mapNavButtons.pop().destroy();
860 < 1 ? this : xAxis;< axisPos) {< '; }
861  
862 < 1 ? this : xAxis;< axisPos) {< '; if (pick(o.enableButtons, o.enabled) && !chart.renderer.forExport) {
863  
11 office 864 < 1 ? this : xAxis;< axisPos) {< '; H.objectEach(o.buttons, function(button, n) {
865 < 1 ? this : xAxis;< axisPos) {< '; buttonOptions = merge(o.buttonOptions, button);
1 office 866  
867  
11 office 868 < 1 ? this : xAxis;< axisPos) {< '; // Presentational
869 < 1 ? this : xAxis;< axisPos) {< '; attr = buttonOptions.theme;
870 < 1 ? this : xAxis;< axisPos) {< '; attr.style = merge(
871 < 1 ? this : xAxis;< axisPos) {< '; buttonOptions.theme.style,
872 < 1 ? this : xAxis;< axisPos) {< '; buttonOptions.style // #3203
873 < 1 ? this : xAxis;< axisPos) {< '; );
874 < 1 ? this : xAxis;< axisPos) {< '; states = attr.states;
875 < 1 ? this : xAxis;< axisPos) {< '; hoverStates = states && states.hover;
876 < 1 ? this : xAxis;< axisPos) {< '; selectStates = states && states.select;
1 office 877  
878  
11 office 879 < 1 ? this : xAxis;< axisPos) {< '; button = chart.renderer.button(
880 < 1 ? this : xAxis;< axisPos) {< '; buttonOptions.text,
881 < 1 ? this : xAxis;< axisPos) {< '; 0,
882 < 1 ? this : xAxis;< axisPos) {< '; 0,
883 < 1 ? this : xAxis;< axisPos) {< '; outerHandler,
884 < 1 ? this : xAxis;< axisPos) {< '; attr,
885 < 1 ? this : xAxis;< axisPos) {< '; hoverStates,
886 < 1 ? this : xAxis;< axisPos) {< '; selectStates,
887 < 1 ? this : xAxis;< axisPos) {< '; 0,
888 < 1 ? this : xAxis;< axisPos) {< '; n === 'zoomIn' ? 'topbutton' : 'bottombutton'
889 < 1 ? this : xAxis;< axisPos) {< '; )
890 < 1 ? this : xAxis;< axisPos) {< '; .addClass('highcharts-map-navigation')
891 < 1 ? this : xAxis;< axisPos) {< '; .attr({
892 < 1 ? this : xAxis;< axisPos) {< '; width: buttonOptions.width,
893 < 1 ? this : xAxis;< axisPos) {< '; height: buttonOptions.height,
894 < 1 ? this : xAxis;< axisPos) {< '; title: chart.options.lang[n],
895 < 1 ? this : xAxis;< axisPos) {< '; padding: buttonOptions.padding,
896 < 1 ? this : xAxis;< axisPos) {< '; zIndex: 5
897 < 1 ? this : xAxis;< axisPos) {< '; })
898 < 1 ? this : xAxis;< axisPos) {< '; .add();
899 < 1 ? this : xAxis;< axisPos) {< '; button.handler = buttonOptions.onclick;
900 < 1 ? this : xAxis;< axisPos) {< '; button.align(
901 < 1 ? this : xAxis;< axisPos) {< '; extend(buttonOptions, {
902 < 1 ? this : xAxis;< axisPos) {< '; width: button.width,
903 < 1 ? this : xAxis;< axisPos) {< '; height: 2 * button.height
904 < 1 ? this : xAxis;< axisPos) {< '; }),
905 < 1 ? this : xAxis;< axisPos) {< '; null,
906 < 1 ? this : xAxis;< axisPos) {< '; buttonOptions.alignTo
907 < 1 ? this : xAxis;< axisPos) {< '; );
908 < 1 ? this : xAxis;< axisPos) {< '; // Stop double click event (#4444)
909 < 1 ? this : xAxis;< axisPos) {< '; addEvent(button.element, 'dblclick', stopEvent);
1 office 910  
11 office 911 < 1 ? this : xAxis;< axisPos) {< '; mapNavButtons.push(button);
1 office 912  
11 office 913 < 1 ? this : xAxis;< axisPos) {< '; });
1 office 914 < 1 ? this : xAxis;< axisPos) {< '; }
915  
916 < 1 ? this : xAxis;< axisPos) {< '; this.updateEvents(o);
917 < 1 ? this : xAxis;< axisPos) {< '; };
918  
919 < 1 ? this : xAxis;< axisPos) {< '; /**
920 < 1 ? this : xAxis;< axisPos) {< '; * Update events, called internally from the update function. Add new event
921 < 1 ? this : xAxis;< axisPos) {< '; * handlers, or unbinds events if disabled.
922 < 1 ? this : xAxis;< axisPos) {< '; * @param {Object} options Options for map navigation.
923 < 1 ? this : xAxis;< axisPos) {< '; */
924 < 1 ? this : xAxis;< axisPos) {< '; MapNavigation.prototype.updateEvents = function(options) {
925 < 1 ? this : xAxis;< axisPos) {< '; var chart = this.chart;
926  
927 < 1 ? this : xAxis;< axisPos) {< '; // Add the double click event
928 < 1 ? this : xAxis;< axisPos) {< '; if (
929 < 1 ? this : xAxis;< axisPos) {< '; pick(options.enableDoubleClickZoom, options.enabled) ||
930 < 1 ? this : xAxis;< axisPos) {< '; options.enableDoubleClickZoomTo
931 < 1 ? this : xAxis;< axisPos) {< '; ) {
932 < 1 ? this : xAxis;< axisPos) {< '; this.unbindDblClick = this.unbindDblClick || addEvent(
933 < 1 ? this : xAxis;< axisPos) {< '; chart.container,
934 < 1 ? this : xAxis;< axisPos) {< '; 'dblclick',
935 < 1 ? this : xAxis;< axisPos) {< '; function(e) {
936 < 1 ? this : xAxis;< axisPos) {< '; chart.pointer.onContainerDblClick(e);
937 < 1 ? this : xAxis;< axisPos) {< '; }
938 < 1 ? this : xAxis;< axisPos) {< '; );
939 < 1 ? this : xAxis;< axisPos) {< '; } else if (this.unbindDblClick) {
940 < 1 ? this : xAxis;< axisPos) {< '; // Unbind and set unbinder to undefined
941 < 1 ? this : xAxis;< axisPos) {< '; this.unbindDblClick = this.unbindDblClick();
942 < 1 ? this : xAxis;< axisPos) {< '; }
943  
944 < 1 ? this : xAxis;< axisPos) {< '; // Add the mousewheel event
945 < 1 ? this : xAxis;< axisPos) {< '; if (pick(options.enableMouseWheelZoom, options.enabled)) {
946 < 1 ? this : xAxis;< axisPos) {< '; this.unbindMouseWheel = this.unbindMouseWheel || addEvent(
947 < 1 ? this : xAxis;< axisPos) {< '; chart.container,
948 < 1 ? this : xAxis;< axisPos) {< '; doc.onmousewheel === undefined ? 'DOMMouseScroll' : 'mousewheel',
949 < 1 ? this : xAxis;< axisPos) {< '; function(e) {
950 < 1 ? this : xAxis;< axisPos) {< '; chart.pointer.onContainerMouseWheel(e);
951 < 1 ? this : xAxis;< axisPos) {< '; // Issue #5011, returning false from non-jQuery event does
952 < 1 ? this : xAxis;< axisPos) {< '; // not prevent default
953 < 1 ? this : xAxis;< axisPos) {< '; stopEvent(e);
954 < 1 ? this : xAxis;< axisPos) {< '; return false;
955 < 1 ? this : xAxis;< axisPos) {< '; }
956 < 1 ? this : xAxis;< axisPos) {< '; );
957 < 1 ? this : xAxis;< axisPos) {< '; } else if (this.unbindMouseWheel) {
958 < 1 ? this : xAxis;< axisPos) {< '; // Unbind and set unbinder to undefined
959 < 1 ? this : xAxis;< axisPos) {< '; this.unbindMouseWheel = this.unbindMouseWheel();
960 < 1 ? this : xAxis;< axisPos) {< '; }
961  
962 < 1 ? this : xAxis;< axisPos) {< '; };
963  
964 < 1 ? this : xAxis;< axisPos) {< '; // Add events to the Chart object itself
11 office 965 < 1 ? this : xAxis;< axisPos) {< '; extend(Chart.prototype, /** @lends Chart.prototype */ {
1 office 966  
967 < 1 ? this : xAxis;< axisPos) {< '; /**
968 < 1 ? this : xAxis;< axisPos) {< '; * Fit an inner box to an outer. If the inner box overflows left or right, align it to the sides of the
969 < 1 ? this : xAxis;< axisPos) {< '; * outer. If it overflows both sides, fit it within the outer. This is a pattern that occurs more places
970 < 1 ? this : xAxis;< axisPos) {< '; * in Highcharts, perhaps it should be elevated to a common utility function.
971 < 1 ? this : xAxis;< axisPos) {< '; */
972 < 1 ? this : xAxis;< axisPos) {< '; fitToBox: function(inner, outer) {
973 < 1 ? this : xAxis;< axisPos) {< '; each([
974 < 1 ? this : xAxis;< axisPos) {< '; ['x', 'width'],
975 < 1 ? this : xAxis;< axisPos) {< '; ['y', 'height']
976 < 1 ? this : xAxis;< axisPos) {< '; ], function(dim) {
977 < 1 ? this : xAxis;< axisPos) {< '; var pos = dim[0],
978 < 1 ? this : xAxis;< axisPos) {< '; size = dim[1];
979  
980 < 1 ? this : xAxis;< axisPos) {< '; if (inner[pos] + inner[size] > outer[pos] + outer[size]) { // right overflow
981 < 1 ? this : xAxis;< axisPos) {< '; if (inner[size] > outer[size]) { // the general size is greater, fit fully to outer
982 < 1 ? this : xAxis;< axisPos) {< '; inner[size] = outer[size];
983 < 1 ? this : xAxis;< axisPos) {< '; inner[pos] = outer[pos];
984 < 1 ? this : xAxis;< axisPos) {< '; } else { // align right
985 < 1 ? this : xAxis;< axisPos) {< '; inner[pos] = outer[pos] + outer[size] - inner[size];
986 < 1 ? this : xAxis;< axisPos) {< '; }
987 < 1 ? this : xAxis;< axisPos) {< '; }
988 < 1 ? this : xAxis;< axisPos) {< '; if (inner[size] > outer[size]) {
989 < 1 ? this : xAxis;< axisPos) {< '; inner[size] = outer[size];
990 < 1 ? this : xAxis;< axisPos) {< '; }
991 < 1 ? this : xAxis;< axisPos) {< '; if (inner[pos] < outer[pos]) {
992 < 1 ? this : xAxis;< axisPos) {< '; inner[pos] = outer[pos];
993 < 1 ? this : xAxis;< axisPos) {< '; }
994 < 1 ? this : xAxis;< axisPos) {< '; });
995  
996  
997 < 1 ? this : xAxis;< axisPos) {< '; return inner;
998 < 1 ? this : xAxis;< axisPos) {< '; },
999  
1000 < 1 ? this : xAxis;< axisPos) {< '; /**
11 office 1001 < 1 ? this : xAxis;< axisPos) {< '; * Highmaps only. Zoom in or out of the map. See also {@link Point#zoomTo}.
1002 < 1 ? this : xAxis;< axisPos) {< '; * See {@link Chart#fromLatLonToPoint} for how to get the `centerX` and
1003 < 1 ? this : xAxis;< axisPos) {< '; * `centerY` parameters for a geographic location.
1004 < 1 ? this : xAxis;< axisPos) {< '; *
1005 < 1 ? this : xAxis;< axisPos) {< '; * @param {Number} [howMuch]
1006 < 1 ? this : xAxis;< axisPos) {< '; * How much to zoom the map. Values less than 1 zooms in. 0.5 zooms
1007 < 1 ? this : xAxis;< axisPos) {< '; * in to half the current view. 2 zooms to twice the current view.
1008 < 1 ? this : xAxis;< axisPos) {< '; * If omitted, the zoom is reset.
1009 < 1 ? this : xAxis;< axisPos) {< '; * @param {Number} [centerX]
1010 < 1 ? this : xAxis;< axisPos) {< '; * The X axis position to center around if available space.
1011 < 1 ? this : xAxis;< axisPos) {< '; * @param {Number} [centerY]
1012 < 1 ? this : xAxis;< axisPos) {< '; * The Y axis position to center around if available space.
1013 < 1 ? this : xAxis;< axisPos) {< '; * @param {Number} [mouseX]
1014 < 1 ? this : xAxis;< axisPos) {< '; * Fix the zoom to this position if possible. This is used for
1015 < 1 ? this : xAxis;< axisPos) {< '; * example in mousewheel events, where the area under the mouse
1016 < 1 ? this : xAxis;< axisPos) {< '; * should be fixed as we zoom in.
1017 < 1 ? this : xAxis;< axisPos) {< '; * @param {Number} [mouseY]
1018 < 1 ? this : xAxis;< axisPos) {< '; * Fix the zoom to this position if possible.
1 office 1019 < 1 ? this : xAxis;< axisPos) {< '; */
1020 < 1 ? this : xAxis;< axisPos) {< '; mapZoom: function(howMuch, centerXArg, centerYArg, mouseX, mouseY) {
1021 < 1 ? this : xAxis;< axisPos) {< '; /*if (this.isMapZooming) {
1022 < 1 ? this : xAxis;< axisPos) {< '; this.mapZoomQueue = arguments;
1023 < 1 ? this : xAxis;< axisPos) {< '; return;
1024 < 1 ? this : xAxis;< axisPos) {< '; }*/
1025  
1026 < 1 ? this : xAxis;< axisPos) {< '; var chart = this,
1027 < 1 ? this : xAxis;< axisPos) {< '; xAxis = chart.xAxis[0],
1028 < 1 ? this : xAxis;< axisPos) {< '; xRange = xAxis.max - xAxis.min,
1029 < 1 ? this : xAxis;< axisPos) {< '; centerX = pick(centerXArg, xAxis.min + xRange / 2),
1030 < 1 ? this : xAxis;< axisPos) {< '; newXRange = xRange * howMuch,
1031 < 1 ? this : xAxis;< axisPos) {< '; yAxis = chart.yAxis[0],
1032 < 1 ? this : xAxis;< axisPos) {< '; yRange = yAxis.max - yAxis.min,
1033 < 1 ? this : xAxis;< axisPos) {< '; centerY = pick(centerYArg, yAxis.min + yRange / 2),
1034 < 1 ? this : xAxis;< axisPos) {< '; newYRange = yRange * howMuch,
1035 < 1 ? this : xAxis;< axisPos) {< '; fixToX = mouseX ? ((mouseX - xAxis.pos) / xAxis.len) : 0.5,
1036 < 1 ? this : xAxis;< axisPos) {< '; fixToY = mouseY ? ((mouseY - yAxis.pos) / yAxis.len) : 0.5,
1037 < 1 ? this : xAxis;< axisPos) {< '; newXMin = centerX - newXRange * fixToX,
1038 < 1 ? this : xAxis;< axisPos) {< '; newYMin = centerY - newYRange * fixToY,
1039 < 1 ? this : xAxis;< axisPos) {< '; newExt = chart.fitToBox({
1040 < 1 ? this : xAxis;< axisPos) {< '; x: newXMin,
1041 < 1 ? this : xAxis;< axisPos) {< '; y: newYMin,
1042 < 1 ? this : xAxis;< axisPos) {< '; width: newXRange,
1043 < 1 ? this : xAxis;< axisPos) {< '; height: newYRange
1044 < 1 ? this : xAxis;< axisPos) {< '; }, {
1045 < 1 ? this : xAxis;< axisPos) {< '; x: xAxis.dataMin,
1046 < 1 ? this : xAxis;< axisPos) {< '; y: yAxis.dataMin,
1047 < 1 ? this : xAxis;< axisPos) {< '; width: xAxis.dataMax - xAxis.dataMin,
1048 < 1 ? this : xAxis;< axisPos) {< '; height: yAxis.dataMax - yAxis.dataMin
1049 < 1 ? this : xAxis;< axisPos) {< '; }),
1050 < 1 ? this : xAxis;< axisPos) {< '; zoomOut = newExt.x <= xAxis.dataMin &&
1051 < 1 ? this : xAxis;< axisPos) {< '; newExt.width >= xAxis.dataMax - xAxis.dataMin &&
1052 < 1 ? this : xAxis;< axisPos) {< '; newExt.y <= yAxis.dataMin &&
1053 < 1 ? this : xAxis;< axisPos) {< '; newExt.height >= yAxis.dataMax - yAxis.dataMin;
1054  
1055 < 1 ? this : xAxis;< axisPos) {< '; // When mousewheel zooming, fix the point under the mouse
1056 < 1 ? this : xAxis;< axisPos) {< '; if (mouseX) {
1057 < 1 ? this : xAxis;< axisPos) {< '; xAxis.fixTo = [mouseX - xAxis.pos, centerXArg];
1058 < 1 ? this : xAxis;< axisPos) {< '; }
1059 < 1 ? this : xAxis;< axisPos) {< '; if (mouseY) {
1060 < 1 ? this : xAxis;< axisPos) {< '; yAxis.fixTo = [mouseY - yAxis.pos, centerYArg];
1061 < 1 ? this : xAxis;< axisPos) {< '; }
1062  
1063 < 1 ? this : xAxis;< axisPos) {< '; // Zoom
1064 < 1 ? this : xAxis;< axisPos) {< '; if (howMuch !== undefined && !zoomOut) {
1065 < 1 ? this : xAxis;< axisPos) {< '; xAxis.setExtremes(newExt.x, newExt.x + newExt.width, false);
1066 < 1 ? this : xAxis;< axisPos) {< '; yAxis.setExtremes(newExt.y, newExt.y + newExt.height, false);
1067  
1068 < 1 ? this : xAxis;< axisPos) {< '; // Reset zoom
1069 < 1 ? this : xAxis;< axisPos) {< '; } else {
1070 < 1 ? this : xAxis;< axisPos) {< '; xAxis.setExtremes(undefined, undefined, false);
1071 < 1 ? this : xAxis;< axisPos) {< '; yAxis.setExtremes(undefined, undefined, false);
1072 < 1 ? this : xAxis;< axisPos) {< '; }
1073  
1074 < 1 ? this : xAxis;< axisPos) {< '; // Prevent zooming until this one is finished animating
1075 < 1 ? this : xAxis;< axisPos) {< '; /*chart.holdMapZoom = true;
1076 < 1 ? this : xAxis;< axisPos) {< '; setTimeout(function () {
1077 < 1 ? this : xAxis;< axisPos) {< '; chart.holdMapZoom = false;
1078 < 1 ? this : xAxis;< axisPos) {< '; }, 200);*/
1079 < 1 ? this : xAxis;< axisPos) {< '; /*delay = animation ? animation.duration || 500 : 0;
1080 < 1 ? this : xAxis;< axisPos) {< '; if (delay) {
1081 < 1 ? this : xAxis;< axisPos) {< '; chart.isMapZooming = true;
1082 < 1 ? this : xAxis;< axisPos) {< '; setTimeout(function () {
1083 < 1 ? this : xAxis;< axisPos) {< '; chart.isMapZooming = false;
1084 < 1 ? this : xAxis;< axisPos) {< '; if (chart.mapZoomQueue) {
1085 < 1 ? this : xAxis;< axisPos) {< '; chart.mapZoom.apply(chart, chart.mapZoomQueue);
1086 < 1 ? this : xAxis;< axisPos) {< '; }
1087 < 1 ? this : xAxis;< axisPos) {< '; chart.mapZoomQueue = null;
1088 < 1 ? this : xAxis;< axisPos) {< '; }, delay);
1089 < 1 ? this : xAxis;< axisPos) {< '; }*/
1090  
1091 < 1 ? this : xAxis;< axisPos) {< '; chart.redraw();
1092 < 1 ? this : xAxis;< axisPos) {< '; }
1093 < 1 ? this : xAxis;< axisPos) {< '; });
1094  
1095 < 1 ? this : xAxis;< axisPos) {< '; /**
1096 < 1 ? this : xAxis;< axisPos) {< '; * Extend the Chart.render method to add zooming and panning
1097 < 1 ? this : xAxis;< axisPos) {< '; */
1098 < 1 ? this : xAxis;< axisPos) {< '; wrap(Chart.prototype, 'render', function(proceed) {
1099 < 1 ? this : xAxis;< axisPos) {< '; // Render the plus and minus buttons. Doing this before the shapes makes getBBox much quicker, at least in Chrome.
1100 < 1 ? this : xAxis;< axisPos) {< '; this.mapNavigation = new MapNavigation(this);
1101 < 1 ? this : xAxis;< axisPos) {< '; this.mapNavigation.update();
1102  
1103 < 1 ? this : xAxis;< axisPos) {< '; proceed.call(this);
1104 < 1 ? this : xAxis;< axisPos) {< '; });
1105  
1106 < 1 ? this : xAxis;< axisPos) {< '; }(Highcharts));
1107 < 1 ? this : xAxis;< axisPos) {< '; (function(H) {
1108 < 1 ? this : xAxis;< axisPos) {< '; /**
1109 < 1 ? this : xAxis;< axisPos) {< '; * (c) 2010-2017 Torstein Honsi
1110 < 1 ? this : xAxis;< axisPos) {< '; *
1111 < 1 ? this : xAxis;< axisPos) {< '; * License: www.highcharts.com/license
1112 < 1 ? this : xAxis;< axisPos) {< '; */
1113 < 1 ? this : xAxis;< axisPos) {< '; var extend = H.extend,
1114 < 1 ? this : xAxis;< axisPos) {< '; pick = H.pick,
1115 < 1 ? this : xAxis;< axisPos) {< '; Pointer = H.Pointer,
1116 < 1 ? this : xAxis;< axisPos) {< '; wrap = H.wrap;
1117  
1118 < 1 ? this : xAxis;< axisPos) {< '; // Extend the Pointer
1119 < 1 ? this : xAxis;< axisPos) {< '; extend(Pointer.prototype, {
1120  
1121 < 1 ? this : xAxis;< axisPos) {< '; /**
1122 < 1 ? this : xAxis;< axisPos) {< '; * The event handler for the doubleclick event
1123 < 1 ? this : xAxis;< axisPos) {< '; */
1124 < 1 ? this : xAxis;< axisPos) {< '; onContainerDblClick: function(e) {
1125 < 1 ? this : xAxis;< axisPos) {< '; var chart = this.chart;
1126  
1127 < 1 ? this : xAxis;< axisPos) {< '; e = this.normalize(e);
1128  
1129 < 1 ? this : xAxis;< axisPos) {< '; if (chart.options.mapNavigation.enableDoubleClickZoomTo) {
1130 < 1 ? this : xAxis;< axisPos) {< '; if (chart.pointer.inClass(e.target, 'highcharts-tracker') && chart.hoverPoint) {
1131 < 1 ? this : xAxis;< axisPos) {< '; chart.hoverPoint.zoomTo();
1132 < 1 ? this : xAxis;< axisPos) {< '; }
1133 < 1 ? this : xAxis;< axisPos) {< '; } else if (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) {
1134 < 1 ? this : xAxis;< axisPos) {< '; chart.mapZoom(
1135 < 1 ? this : xAxis;< axisPos) {< '; 0.5,
1136 < 1 ? this : xAxis;< axisPos) {< '; chart.xAxis[0].toValue(e.chartX),
1137 < 1 ? this : xAxis;< axisPos) {< '; chart.yAxis[0].toValue(e.chartY),
1138 < 1 ? this : xAxis;< axisPos) {< '; e.chartX,
1139 < 1 ? this : xAxis;< axisPos) {< '; e.chartY
1140 < 1 ? this : xAxis;< axisPos) {< '; );
1141 < 1 ? this : xAxis;< axisPos) {< '; }
1142 < 1 ? this : xAxis;< axisPos) {< '; },
1143  
1144 < 1 ? this : xAxis;< axisPos) {< '; /**
1145 < 1 ? this : xAxis;< axisPos) {< '; * The event handler for the mouse scroll event
1146 < 1 ? this : xAxis;< axisPos) {< '; */
1147 < 1 ? this : xAxis;< axisPos) {< '; onContainerMouseWheel: function(e) {
1148 < 1 ? this : xAxis;< axisPos) {< '; var chart = this.chart,
1149 < 1 ? this : xAxis;< axisPos) {< '; delta;
1150  
1151 < 1 ? this : xAxis;< axisPos) {< '; e = this.normalize(e);
1152  
1153 < 1 ? this : xAxis;< axisPos) {< '; // Firefox uses e.detail, WebKit and IE uses wheelDelta
1154 < 1 ? this : xAxis;< axisPos) {< '; delta = e.detail || -(e.wheelDelta / 120);
1155 < 1 ? this : xAxis;< axisPos) {< '; if (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) {
1156 < 1 ? this : xAxis;< axisPos) {< '; chart.mapZoom(
1157 < 1 ? this : xAxis;< axisPos) {< '; Math.pow(chart.options.mapNavigation.mouseWheelSensitivity, delta),
1158 < 1 ? this : xAxis;< axisPos) {< '; chart.xAxis[0].toValue(e.chartX),
1159 < 1 ? this : xAxis;< axisPos) {< '; chart.yAxis[0].toValue(e.chartY),
1160 < 1 ? this : xAxis;< axisPos) {< '; e.chartX,
1161 < 1 ? this : xAxis;< axisPos) {< '; e.chartY
1162 < 1 ? this : xAxis;< axisPos) {< '; );
1163 < 1 ? this : xAxis;< axisPos) {< '; }
1164 < 1 ? this : xAxis;< axisPos) {< '; }
1165 < 1 ? this : xAxis;< axisPos) {< '; });
1166  
1167 < 1 ? this : xAxis;< axisPos) {< '; // The pinchType is inferred from mapNavigation options.
1168 < 1 ? this : xAxis;< axisPos) {< '; wrap(Pointer.prototype, 'zoomOption', function(proceed) {
1169  
1170  
1171 < 1 ? this : xAxis;< axisPos) {< '; var mapNavigation = this.chart.options.mapNavigation;
1172  
1173 < 1 ? this : xAxis;< axisPos) {< '; // Pinch status
1174 < 1 ? this : xAxis;< axisPos) {< '; if (pick(mapNavigation.enableTouchZoom, mapNavigation.enabled)) {
1175 < 1 ? this : xAxis;< axisPos) {< '; this.chart.options.chart.pinchType = 'xy';
1176 < 1 ? this : xAxis;< axisPos) {< '; }
1177  
1178 < 1 ? this : xAxis;< axisPos) {< '; proceed.apply(this, [].slice.call(arguments, 1));
1179  
1180 < 1 ? this : xAxis;< axisPos) {< '; });
1181  
1182 < 1 ? this : xAxis;< axisPos) {< '; // Extend the pinchTranslate method to preserve fixed ratio when zooming
1183 < 1 ? this : xAxis;< axisPos) {< '; wrap(Pointer.prototype, 'pinchTranslate', function(proceed, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch) {
1184 < 1 ? this : xAxis;< axisPos) {< '; var xBigger;
1185 < 1 ? this : xAxis;< axisPos) {< '; proceed.call(this, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch);
1186  
1187 < 1 ? this : xAxis;< axisPos) {< '; // Keep ratio
1188 < 1 ? this : xAxis;< axisPos) {< '; if (this.chart.options.chart.type === 'map' && this.hasZoom) {
1189 < 1 ? this : xAxis;< axisPos) {< '; xBigger = transform.scaleX > transform.scaleY;
1190 < 1 ? this : xAxis;< axisPos) {< '; this.pinchTranslateDirection(!xBigger,
1191 < 1 ? this : xAxis;< axisPos) {< '; pinchDown,
1192 < 1 ? this : xAxis;< axisPos) {< '; touches,
1193 < 1 ? this : xAxis;< axisPos) {< '; transform,
1194 < 1 ? this : xAxis;< axisPos) {< '; selectionMarker,
1195 < 1 ? this : xAxis;< axisPos) {< '; clip,
1196 < 1 ? this : xAxis;< axisPos) {< '; lastValidTouch,
1197 < 1 ? this : xAxis;< axisPos) {< '; xBigger ? transform.scaleX : transform.scaleY
1198 < 1 ? this : xAxis;< axisPos) {< '; );
1199 < 1 ? this : xAxis;< axisPos) {< '; }
1200 < 1 ? this : xAxis;< axisPos) {< '; });
1201  
1202 < 1 ? this : xAxis;< axisPos) {< '; }(Highcharts));
1203 < 1 ? this : xAxis;< axisPos) {< '; (function(H) {
1204 < 1 ? this : xAxis;< axisPos) {< '; /**
1205 < 1 ? this : xAxis;< axisPos) {< '; * (c) 2010-2017 Torstein Honsi
1206 < 1 ? this : xAxis;< axisPos) {< '; *
1207 < 1 ? this : xAxis;< axisPos) {< '; * License: www.highcharts.com/license
1208 < 1 ? this : xAxis;< axisPos) {< '; */
1209 < 1 ? this : xAxis;< axisPos) {< '; var color = H.color,
1210 < 1 ? this : xAxis;< axisPos) {< '; colorPointMixin = H.colorPointMixin,
1211 < 1 ? this : xAxis;< axisPos) {< '; colorSeriesMixin = H.colorSeriesMixin,
1212 < 1 ? this : xAxis;< axisPos) {< '; doc = H.doc,
1213 < 1 ? this : xAxis;< axisPos) {< '; each = H.each,
1214 < 1 ? this : xAxis;< axisPos) {< '; extend = H.extend,
1215 < 1 ? this : xAxis;< axisPos) {< '; isNumber = H.isNumber,
1216 < 1 ? this : xAxis;< axisPos) {< '; LegendSymbolMixin = H.LegendSymbolMixin,
1217 < 1 ? this : xAxis;< axisPos) {< '; map = H.map,
1218 < 1 ? this : xAxis;< axisPos) {< '; merge = H.merge,
1219 < 1 ? this : xAxis;< axisPos) {< '; noop = H.noop,
1220 < 1 ? this : xAxis;< axisPos) {< '; pick = H.pick,
1221 < 1 ? this : xAxis;< axisPos) {< '; isArray = H.isArray,
1222 < 1 ? this : xAxis;< axisPos) {< '; Point = H.Point,
1223 < 1 ? this : xAxis;< axisPos) {< '; Series = H.Series,
1224 < 1 ? this : xAxis;< axisPos) {< '; seriesType = H.seriesType,
1225 < 1 ? this : xAxis;< axisPos) {< '; seriesTypes = H.seriesTypes,
1226 < 1 ? this : xAxis;< axisPos) {< '; splat = H.splat;
1227  
1228 < 1 ? this : xAxis;< axisPos) {< '; // The vector-effect attribute is not supported in IE <= 11 (at least), so we need
1229 < 1 ? this : xAxis;< axisPos) {< '; // diffent logic (#3218)
1230 < 1 ? this : xAxis;< axisPos) {< '; var supportsVectorEffect = doc.documentElement.style.vectorEffect !== undefined;
1231  
1232  
1233 < 1 ? this : xAxis;< axisPos) {< '; /**
1234 < 1 ? this : xAxis;< axisPos) {< '; * The MapAreaPoint object
1235 < 1 ? this : xAxis;< axisPos) {< '; */
1236 < 1 ? this : xAxis;< axisPos) {< '; /**
1237 < 1 ? this : xAxis;< axisPos) {< '; * Add the map series type
1238 < 1 ? this : xAxis;< axisPos) {< '; */
1239 < 1 ? this : xAxis;< axisPos) {< '; seriesType('map', 'scatter', {
1240 < 1 ? this : xAxis;< axisPos) {< '; allAreas: true,
1241  
1242 < 1 ? this : xAxis;< axisPos) {< '; animation: false, // makes the complex shapes slow
1243 < 1 ? this : xAxis;< axisPos) {< '; nullColor: '#f7f7f7',
1244 < 1 ? this : xAxis;< axisPos) {< '; borderColor: '#cccccc',
1245 < 1 ? this : xAxis;< axisPos) {< '; borderWidth: 1,
1246 < 1 ? this : xAxis;< axisPos) {< '; marker: null,
1247 < 1 ? this : xAxis;< axisPos) {< '; stickyTracking: false,
1248 < 1 ? this : xAxis;< axisPos) {< '; joinBy: 'hc-key',
1249 < 1 ? this : xAxis;< axisPos) {< '; dataLabels: {
1250 < 1 ? this : xAxis;< axisPos) {< '; formatter: function() { // #2945
1251 < 1 ? this : xAxis;< axisPos) {< '; return this.point.value;
1252 < 1 ? this : xAxis;< axisPos) {< '; },
1253 < 1 ? this : xAxis;< axisPos) {< '; inside: true, // for the color
1254 < 1 ? this : xAxis;< axisPos) {< '; verticalAlign: 'middle',
1255 < 1 ? this : xAxis;< axisPos) {< '; crop: false,
1256 < 1 ? this : xAxis;< axisPos) {< '; overflow: false,
1257 < 1 ? this : xAxis;< axisPos) {< '; padding: 0
1258 < 1 ? this : xAxis;< axisPos) {< '; },
1259 < 1 ? this : xAxis;< axisPos) {< '; turboThreshold: 0,
1260 < 1 ? this : xAxis;< axisPos) {< '; tooltip: {
1261 < 1 ? this : xAxis;< axisPos) {< '; followPointer: true,
1262 < 1 ? this : xAxis;< axisPos) {< '; pointFormat: '{point.name}: {point.value}<br/>'
1263 < 1 ? this : xAxis;< axisPos) {< '; },
1264 < 1 ? this : xAxis;< axisPos) {< '; states: {
1265 < 1 ? this : xAxis;< axisPos) {< '; normal: {
1266 < 1 ? this : xAxis;< axisPos) {< '; animation: true
1267 < 1 ? this : xAxis;< axisPos) {< '; },
1268 < 1 ? this : xAxis;< axisPos) {< '; hover: {
1269 < 1 ? this : xAxis;< axisPos) {< '; brightness: 0.2,
1270 < 1 ? this : xAxis;< axisPos) {< '; halo: null
1271 < 1 ? this : xAxis;< axisPos) {< '; },
1272 < 1 ? this : xAxis;< axisPos) {< '; select: {
1273 < 1 ? this : xAxis;< axisPos) {< '; color: '#cccccc'
1274 < 1 ? this : xAxis;< axisPos) {< '; }
1275 < 1 ? this : xAxis;< axisPos) {< '; }
1276  
1277 < 1 ? this : xAxis;< axisPos) {< '; // Prototype members
1278 < 1 ? this : xAxis;< axisPos) {< '; }, merge(colorSeriesMixin, {
1279 < 1 ? this : xAxis;< axisPos) {< '; type: 'map',
1280 < 1 ? this : xAxis;< axisPos) {< '; supportsDrilldown: true,
1281 < 1 ? this : xAxis;< axisPos) {< '; getExtremesFromAll: true,
1282 < 1 ? this : xAxis;< axisPos) {< '; useMapGeometry: true, // get axis extremes from paths, not values
1283 < 1 ? this : xAxis;< axisPos) {< '; forceDL: true,
1284 < 1 ? this : xAxis;< axisPos) {< '; searchPoint: noop,
1285 < 1 ? this : xAxis;< axisPos) {< '; directTouch: true, // When tooltip is not shared, this series (and derivatives) requires direct touch/hover. KD-tree does not apply.
1286 < 1 ? this : xAxis;< axisPos) {< '; preserveAspectRatio: true, // X axis and Y axis must have same translation slope
1287 < 1 ? this : xAxis;< axisPos) {< '; pointArrayMap: ['value'],
1288 < 1 ? this : xAxis;< axisPos) {< '; /**
1289 < 1 ? this : xAxis;< axisPos) {< '; * Get the bounding box of all paths in the map combined.
1290 < 1 ? this : xAxis;< axisPos) {< '; */
1291 < 1 ? this : xAxis;< axisPos) {< '; getBox: function(paths) {
1292 < 1 ? this : xAxis;< axisPos) {< '; var MAX_VALUE = Number.MAX_VALUE,
1293 < 1 ? this : xAxis;< axisPos) {< '; maxX = -MAX_VALUE,
1294 < 1 ? this : xAxis;< axisPos) {< '; minX = MAX_VALUE,
1295 < 1 ? this : xAxis;< axisPos) {< '; maxY = -MAX_VALUE,
1296 < 1 ? this : xAxis;< axisPos) {< '; minY = MAX_VALUE,
1297 < 1 ? this : xAxis;< axisPos) {< '; minRange = MAX_VALUE,
1298 < 1 ? this : xAxis;< axisPos) {< '; xAxis = this.xAxis,
1299 < 1 ? this : xAxis;< axisPos) {< '; yAxis = this.yAxis,
1300 < 1 ? this : xAxis;< axisPos) {< '; hasBox;
1301  
1302 < 1 ? this : xAxis;< axisPos) {< '; // Find the bounding box
1303 < 1 ? this : xAxis;< axisPos) {< '; each(paths || [], function(point) {
1304  
1305 < 1 ? this : xAxis;< axisPos) {< '; if (point.path) {
1306 < 1 ? this : xAxis;< axisPos) {< '; if (typeof point.path === 'string') {
1307 < 1 ? this : xAxis;< axisPos) {< '; point.path = H.splitPath(point.path);
1308 < 1 ? this : xAxis;< axisPos) {< '; }
1309  
1310 < 1 ? this : xAxis;< axisPos) {< '; var path = point.path || [],
1311 < 1 ? this : xAxis;< axisPos) {< '; i = path.length,
1312 < 1 ? this : xAxis;< axisPos) {< '; even = false, // while loop reads from the end
1313 < 1 ? this : xAxis;< axisPos) {< '; pointMaxX = -MAX_VALUE,
1314 < 1 ? this : xAxis;< axisPos) {< '; pointMinX = MAX_VALUE,
1315 < 1 ? this : xAxis;< axisPos) {< '; pointMaxY = -MAX_VALUE,
1316 < 1 ? this : xAxis;< axisPos) {< '; pointMinY = MAX_VALUE,
1317 < 1 ? this : xAxis;< axisPos) {< '; properties = point.properties;
1318  
1319 < 1 ? this : xAxis;< axisPos) {< '; // The first time a map point is used, analyze its box
1320 < 1 ? this : xAxis;< axisPos) {< '; if (!point._foundBox) {
1321 < 1 ? this : xAxis;< axisPos) {< '; while (i--) {
1322 < 1 ? this : xAxis;< axisPos) {< '; if (isNumber(path[i])) {
1323 < 1 ? this : xAxis;< axisPos) {< '; if (even) { // even = x
1324 < 1 ? this : xAxis;< axisPos) {< '; pointMaxX = Math.max(pointMaxX, path[i]);
1325 < 1 ? this : xAxis;< axisPos) {< '; pointMinX = Math.min(pointMinX, path[i]);
1326 < 1 ? this : xAxis;< axisPos) {< '; } else { // odd = Y
1327 < 1 ? this : xAxis;< axisPos) {< '; pointMaxY = Math.max(pointMaxY, path[i]);
1328 < 1 ? this : xAxis;< axisPos) {< '; pointMinY = Math.min(pointMinY, path[i]);
1329 < 1 ? this : xAxis;< axisPos) {< '; }
1330 < 1 ? this : xAxis;< axisPos) {< '; even = !even;
1331 < 1 ? this : xAxis;< axisPos) {< '; }
1332 < 1 ? this : xAxis;< axisPos) {< '; }
1333 < 1 ? this : xAxis;< axisPos) {< '; // Cache point bounding box for use to position data labels, bubbles etc
1334 < 1 ? this : xAxis;< axisPos) {< '; point._midX = pointMinX + (pointMaxX - pointMinX) *
1335 < 1 ? this : xAxis;< axisPos) {< '; (point.middleX || (properties && properties['hc-middle-x']) || 0.5); // pick is slower and very marginally needed
1336 < 1 ? this : xAxis;< axisPos) {< '; point._midY = pointMinY + (pointMaxY - pointMinY) *
1337 < 1 ? this : xAxis;< axisPos) {< '; (point.middleY || (properties && properties['hc-middle-y']) || 0.5);
1338 < 1 ? this : xAxis;< axisPos) {< '; point._maxX = pointMaxX;
1339 < 1 ? this : xAxis;< axisPos) {< '; point._minX = pointMinX;
1340 < 1 ? this : xAxis;< axisPos) {< '; point._maxY = pointMaxY;
1341 < 1 ? this : xAxis;< axisPos) {< '; point._minY = pointMinY;
1342 < 1 ? this : xAxis;< axisPos) {< '; point.labelrank = pick(point.labelrank, (pointMaxX - pointMinX) * (pointMaxY - pointMinY));
1343 < 1 ? this : xAxis;< axisPos) {< '; point._foundBox = true;
1344 < 1 ? this : xAxis;< axisPos) {< '; }
1345  
1346 < 1 ? this : xAxis;< axisPos) {< '; maxX = Math.max(maxX, point._maxX);
1347 < 1 ? this : xAxis;< axisPos) {< '; minX = Math.min(minX, point._minX);
1348 < 1 ? this : xAxis;< axisPos) {< '; maxY = Math.max(maxY, point._maxY);
1349 < 1 ? this : xAxis;< axisPos) {< '; minY = Math.min(minY, point._minY);
1350 < 1 ? this : xAxis;< axisPos) {< '; minRange = Math.min(point._maxX - point._minX, point._maxY - point._minY, minRange);
1351 < 1 ? this : xAxis;< axisPos) {< '; hasBox = true;
1352 < 1 ? this : xAxis;< axisPos) {< '; }
1353 < 1 ? this : xAxis;< axisPos) {< '; });
1354  
1355 < 1 ? this : xAxis;< axisPos) {< '; // Set the box for the whole series
1356 < 1 ? this : xAxis;< axisPos) {< '; if (hasBox) {
1357 < 1 ? this : xAxis;< axisPos) {< '; this.minY = Math.min(minY, pick(this.minY, MAX_VALUE));
1358 < 1 ? this : xAxis;< axisPos) {< '; this.maxY = Math.max(maxY, pick(this.maxY, -MAX_VALUE));
1359 < 1 ? this : xAxis;< axisPos) {< '; this.minX = Math.min(minX, pick(this.minX, MAX_VALUE));
1360 < 1 ? this : xAxis;< axisPos) {< '; this.maxX = Math.max(maxX, pick(this.maxX, -MAX_VALUE));
1361  
1362 < 1 ? this : xAxis;< axisPos) {< '; // If no minRange option is set, set the default minimum zooming range to 5 times the
1363 < 1 ? this : xAxis;< axisPos) {< '; // size of the smallest element
1364 < 1 ? this : xAxis;< axisPos) {< '; if (xAxis && xAxis.options.minRange === undefined) {
1365 < 1 ? this : xAxis;< axisPos) {< '; xAxis.minRange = Math.min(5 * minRange, (this.maxX - this.minX) / 5, xAxis.minRange || MAX_VALUE);
1366 < 1 ? this : xAxis;< axisPos) {< '; }
1367 < 1 ? this : xAxis;< axisPos) {< '; if (yAxis && yAxis.options.minRange === undefined) {
1368 < 1 ? this : xAxis;< axisPos) {< '; yAxis.minRange = Math.min(5 * minRange, (this.maxY - this.minY) / 5, yAxis.minRange || MAX_VALUE);
1369 < 1 ? this : xAxis;< axisPos) {< '; }
1370 < 1 ? this : xAxis;< axisPos) {< '; }
1371 < 1 ? this : xAxis;< axisPos) {< '; },
1372  
1373 < 1 ? this : xAxis;< axisPos) {< '; getExtremes: function() {
1374 < 1 ? this : xAxis;< axisPos) {< '; // Get the actual value extremes for colors
1375 < 1 ? this : xAxis;< axisPos) {< '; Series.prototype.getExtremes.call(this, this.valueData);
1376  
1377 < 1 ? this : xAxis;< axisPos) {< '; // Recalculate box on updated data
1378 < 1 ? this : xAxis;< axisPos) {< '; if (this.chart.hasRendered && this.isDirtyData) {
1379 < 1 ? this : xAxis;< axisPos) {< '; this.getBox(this.options.data);
1380 < 1 ? this : xAxis;< axisPos) {< '; }
1381  
1382 < 1 ? this : xAxis;< axisPos) {< '; this.valueMin = this.dataMin;
1383 < 1 ? this : xAxis;< axisPos) {< '; this.valueMax = this.dataMax;
1384  
1385 < 1 ? this : xAxis;< axisPos) {< '; // Extremes for the mock Y axis
1386 < 1 ? this : xAxis;< axisPos) {< '; this.dataMin = this.minY;
1387 < 1 ? this : xAxis;< axisPos) {< '; this.dataMax = this.maxY;
1388 < 1 ? this : xAxis;< axisPos) {< '; },
1389  
1390 < 1 ? this : xAxis;< axisPos) {< '; /**
1391 < 1 ? this : xAxis;< axisPos) {< '; * Translate the path so that it automatically fits into the plot area box
1392 < 1 ? this : xAxis;< axisPos) {< '; * @param {Object} path
1393 < 1 ? this : xAxis;< axisPos) {< '; */
1394 < 1 ? this : xAxis;< axisPos) {< '; translatePath: function(path) {
1395  
1396 < 1 ? this : xAxis;< axisPos) {< '; var series = this,
1397 < 1 ? this : xAxis;< axisPos) {< '; even = false, // while loop reads from the end
1398 < 1 ? this : xAxis;< axisPos) {< '; xAxis = series.xAxis,
1399 < 1 ? this : xAxis;< axisPos) {< '; yAxis = series.yAxis,
1400 < 1 ? this : xAxis;< axisPos) {< '; xMin = xAxis.min,
1401 < 1 ? this : xAxis;< axisPos) {< '; xTransA = xAxis.transA,
1402 < 1 ? this : xAxis;< axisPos) {< '; xMinPixelPadding = xAxis.minPixelPadding,
1403 < 1 ? this : xAxis;< axisPos) {< '; yMin = yAxis.min,
1404 < 1 ? this : xAxis;< axisPos) {< '; yTransA = yAxis.transA,
1405 < 1 ? this : xAxis;< axisPos) {< '; yMinPixelPadding = yAxis.minPixelPadding,
1406 < 1 ? this : xAxis;< axisPos) {< '; i,
1407 < 1 ? this : xAxis;< axisPos) {< '; ret = []; // Preserve the original
1408  
1409 < 1 ? this : xAxis;< axisPos) {< '; // Do the translation
1410 < 1 ? this : xAxis;< axisPos) {< '; if (path) {
1411 < 1 ? this : xAxis;< axisPos) {< '; i = path.length;
1412 < 1 ? this : xAxis;< axisPos) {< '; while (i--) {
1413 < 1 ? this : xAxis;< axisPos) {< '; if (isNumber(path[i])) {
1414 < 1 ? this : xAxis;< axisPos) {< '; ret[i] = even ?
1415 < 1 ? this : xAxis;< axisPos) {< '; (path[i] - xMin) * xTransA + xMinPixelPadding :
1416 < 1 ? this : xAxis;< axisPos) {< '; (path[i] - yMin) * yTransA + yMinPixelPadding;
1417 < 1 ? this : xAxis;< axisPos) {< '; even = !even;
1418 < 1 ? this : xAxis;< axisPos) {< '; } else {
1419 < 1 ? this : xAxis;< axisPos) {< '; ret[i] = path[i];
1420 < 1 ? this : xAxis;< axisPos) {< '; }
1421 < 1 ? this : xAxis;< axisPos) {< '; }
1422 < 1 ? this : xAxis;< axisPos) {< '; }
1423  
1424 < 1 ? this : xAxis;< axisPos) {< '; return ret;
1425 < 1 ? this : xAxis;< axisPos) {< '; },
1426  
1427 < 1 ? this : xAxis;< axisPos) {< '; /**
1428 < 1 ? this : xAxis;< axisPos) {< '; * Extend setData to join in mapData. If the allAreas option is true, all areas
1429 < 1 ? this : xAxis;< axisPos) {< '; * from the mapData are used, and those that don't correspond to a data value
1430 < 1 ? this : xAxis;< axisPos) {< '; * are given null values.
1431 < 1 ? this : xAxis;< axisPos) {< '; */
1432 < 1 ? this : xAxis;< axisPos) {< '; setData: function(data, redraw, animation, updatePoints) {
1433 < 1 ? this : xAxis;< axisPos) {< '; var options = this.options,
1434 < 1 ? this : xAxis;< axisPos) {< '; chartOptions = this.chart.options.chart,
1435 < 1 ? this : xAxis;< axisPos) {< '; globalMapData = chartOptions && chartOptions.map,
1436 < 1 ? this : xAxis;< axisPos) {< '; mapData = options.mapData,
1437 < 1 ? this : xAxis;< axisPos) {< '; joinBy = options.joinBy,
1438 < 1 ? this : xAxis;< axisPos) {< '; joinByNull = joinBy === null,
1439 < 1 ? this : xAxis;< axisPos) {< '; pointArrayMap = options.keys || this.pointArrayMap,
1440 < 1 ? this : xAxis;< axisPos) {< '; dataUsed = [],
1441 < 1 ? this : xAxis;< axisPos) {< '; mapMap = {},
1442 < 1 ? this : xAxis;< axisPos) {< '; mapPoint,
1443 < 1 ? this : xAxis;< axisPos) {< '; mapTransforms = this.chart.mapTransforms,
1444 < 1 ? this : xAxis;< axisPos) {< '; props,
1445 < 1 ? this : xAxis;< axisPos) {< '; i;
1446  
1447 < 1 ? this : xAxis;< axisPos) {< '; // Collect mapData from chart options if not defined on series
1448 < 1 ? this : xAxis;< axisPos) {< '; if (!mapData && globalMapData) {
1449 < 1 ? this : xAxis;< axisPos) {< '; mapData = typeof globalMapData === 'string' ? H.maps[globalMapData] : globalMapData;
1450 < 1 ? this : xAxis;< axisPos) {< '; }
1451  
1452 < 1 ? this : xAxis;< axisPos) {< '; if (joinByNull) {
1453 < 1 ? this : xAxis;< axisPos) {< '; joinBy = '_i';
1454 < 1 ? this : xAxis;< axisPos) {< '; }
1455 < 1 ? this : xAxis;< axisPos) {< '; joinBy = this.joinBy = splat(joinBy);
1456 < 1 ? this : xAxis;< axisPos) {< '; if (!joinBy[1]) {
1457 < 1 ? this : xAxis;< axisPos) {< '; joinBy[1] = joinBy[0];
1458 < 1 ? this : xAxis;< axisPos) {< '; }
1459  
1460 < 1 ? this : xAxis;< axisPos) {< '; // Pick up numeric values, add index
1461 < 1 ? this : xAxis;< axisPos) {< '; // Convert Array point definitions to objects using pointArrayMap
1462 < 1 ? this : xAxis;< axisPos) {< '; if (data) {
1463 < 1 ? this : xAxis;< axisPos) {< '; each(data, function(val, i) {
1464 < 1 ? this : xAxis;< axisPos) {< '; var ix = 0;
1465 < 1 ? this : xAxis;< axisPos) {< '; if (isNumber(val)) {
1466 < 1 ? this : xAxis;< axisPos) {< '; data[i] = {
1467 < 1 ? this : xAxis;< axisPos) {< '; value: val
1468 < 1 ? this : xAxis;< axisPos) {< '; };
1469 < 1 ? this : xAxis;< axisPos) {< '; } else if (isArray(val)) {
1470 < 1 ? this : xAxis;< axisPos) {< '; data[i] = {};
1471 < 1 ? this : xAxis;< axisPos) {< '; // Automatically copy first item to hc-key if there is an extra leading string
1472 < 1 ? this : xAxis;< axisPos) {< '; if (!options.keys && val.length > pointArrayMap.length && typeof val[0] === 'string') {
1473 < 1 ? this : xAxis;< axisPos) {< '; data[i]['hc-key'] = val[0];
1474 < 1 ? this : xAxis;< axisPos) {< '; ++ix;
1475 < 1 ? this : xAxis;< axisPos) {< '; }
1476 < 1 ? this : xAxis;< axisPos) {< '; // Run through pointArrayMap and what's left of the point data array in parallel, copying over the values
1477 < 1 ? this : xAxis;< axisPos) {< '; for (var j = 0; j < pointArrayMap.length; ++j, ++ix) {
1478 < 1 ? this : xAxis;< axisPos) {< '; if (pointArrayMap[j]) {
1479 < 1 ? this : xAxis;< axisPos) {< '; data[i][pointArrayMap[j]] = val[ix];
1480 < 1 ? this : xAxis;< axisPos) {< '; }
1481 < 1 ? this : xAxis;< axisPos) {< '; }
1482 < 1 ? this : xAxis;< axisPos) {< '; }
1483 < 1 ? this : xAxis;< axisPos) {< '; if (joinByNull) {
1484 < 1 ? this : xAxis;< axisPos) {< '; data[i]._i = i;
1485 < 1 ? this : xAxis;< axisPos) {< '; }
1486 < 1 ? this : xAxis;< axisPos) {< '; });
1487 < 1 ? this : xAxis;< axisPos) {< '; }
1488  
1489 < 1 ? this : xAxis;< axisPos) {< '; this.getBox(data);
1490  
1491 < 1 ? this : xAxis;< axisPos) {< '; // Pick up transform definitions for chart
1492 < 1 ? this : xAxis;< axisPos) {< '; this.chart.mapTransforms = mapTransforms = chartOptions && chartOptions.mapTransforms || mapData && mapData['hc-transform'] || mapTransforms;
1493  
1494 < 1 ? this : xAxis;< axisPos) {< '; // Cache cos/sin of transform rotation angle
1495 < 1 ? this : xAxis;< axisPos) {< '; if (mapTransforms) {
11 office 1496 < 1 ? this : xAxis;< axisPos) {< '; H.objectEach(mapTransforms, function(transform) {
1497 < 1 ? this : xAxis;< axisPos) {< '; if (transform.rotation) {
1 office 1498 < 1 ? this : xAxis;< axisPos) {< '; transform.cosAngle = Math.cos(transform.rotation);
1499 < 1 ? this : xAxis;< axisPos) {< '; transform.sinAngle = Math.sin(transform.rotation);
1500 < 1 ? this : xAxis;< axisPos) {< '; }
11 office 1501 < 1 ? this : xAxis;< axisPos) {< '; });
1 office 1502 < 1 ? this : xAxis;< axisPos) {< '; }
1503  
1504 < 1 ? this : xAxis;< axisPos) {< '; if (mapData) {
1505 < 1 ? this : xAxis;< axisPos) {< '; if (mapData.type === 'FeatureCollection') {
1506 < 1 ? this : xAxis;< axisPos) {< '; this.mapTitle = mapData.title;
1507 < 1 ? this : xAxis;< axisPos) {< '; mapData = H.geojson(mapData, this.type, this);
1508 < 1 ? this : xAxis;< axisPos) {< '; }
1509  
1510 < 1 ? this : xAxis;< axisPos) {< '; this.mapData = mapData;
1511 < 1 ? this : xAxis;< axisPos) {< '; this.mapMap = {};
1512  
1513 < 1 ? this : xAxis;< axisPos) {< '; for (i = 0; i < mapData.length; i++) {
1514 < 1 ? this : xAxis;< axisPos) {< '; mapPoint = mapData[i];
1515 < 1 ? this : xAxis;< axisPos) {< '; props = mapPoint.properties;
1516  
1517 < 1 ? this : xAxis;< axisPos) {< '; mapPoint._i = i;
1518 < 1 ? this : xAxis;< axisPos) {< '; // Copy the property over to root for faster access
1519 < 1 ? this : xAxis;< axisPos) {< '; if (joinBy[0] && props && props[joinBy[0]]) {
1520 < 1 ? this : xAxis;< axisPos) {< '; mapPoint[joinBy[0]] = props[joinBy[0]];
1521 < 1 ? this : xAxis;< axisPos) {< '; }
1522 < 1 ? this : xAxis;< axisPos) {< '; mapMap[mapPoint[joinBy[0]]] = mapPoint;
1523 < 1 ? this : xAxis;< axisPos) {< '; }
1524 < 1 ? this : xAxis;< axisPos) {< '; this.mapMap = mapMap;
1525  
1526 < 1 ? this : xAxis;< axisPos) {< '; // Registered the point codes that actually hold data
1527 < 1 ? this : xAxis;< axisPos) {< '; if (data && joinBy[1]) {
1528 < 1 ? this : xAxis;< axisPos) {< '; each(data, function(point) {
1529 < 1 ? this : xAxis;< axisPos) {< '; if (mapMap[point[joinBy[1]]]) {
1530 < 1 ? this : xAxis;< axisPos) {< '; dataUsed.push(mapMap[point[joinBy[1]]]);
1531 < 1 ? this : xAxis;< axisPos) {< '; }
1532 < 1 ? this : xAxis;< axisPos) {< '; });
1533 < 1 ? this : xAxis;< axisPos) {< '; }
1534  
1535 < 1 ? this : xAxis;< axisPos) {< '; if (options.allAreas) {
1536 < 1 ? this : xAxis;< axisPos) {< '; this.getBox(mapData);
1537 < 1 ? this : xAxis;< axisPos) {< '; data = data || [];
1538  
1539 < 1 ? this : xAxis;< axisPos) {< '; // Registered the point codes that actually hold data
1540 < 1 ? this : xAxis;< axisPos) {< '; if (joinBy[1]) {
1541 < 1 ? this : xAxis;< axisPos) {< '; each(data, function(point) {
1542 < 1 ? this : xAxis;< axisPos) {< '; dataUsed.push(point[joinBy[1]]);
1543 < 1 ? this : xAxis;< axisPos) {< '; });
1544 < 1 ? this : xAxis;< axisPos) {< '; }
1545  
1546 < 1 ? this : xAxis;< axisPos) {< '; // Add those map points that don't correspond to data, which will be drawn as null points
1547 < 1 ? this : xAxis;< axisPos) {< '; dataUsed = '|' + map(dataUsed, function(point) {
1548 < 1 ? this : xAxis;< axisPos) {< '; return point && point[joinBy[0]];
1549 < 1 ? this : xAxis;< axisPos) {< '; }).join('|') + '|'; // String search is faster than array.indexOf
1550  
1551 < 1 ? this : xAxis;< axisPos) {< '; each(mapData, function(mapPoint) {
1552 < 1 ? this : xAxis;< axisPos) {< '; if (!joinBy[0] || dataUsed.indexOf('|' + mapPoint[joinBy[0]] + '|') === -1) {
1553 < 1 ? this : xAxis;< axisPos) {< '; data.push(merge(mapPoint, {
1554 < 1 ? this : xAxis;< axisPos) {< '; value: null
1555 < 1 ? this : xAxis;< axisPos) {< '; }));
1556 < 1 ? this : xAxis;< axisPos) {< '; updatePoints = false; // #5050 - adding all areas causes the update optimization of setData to kick in, even though the point order has changed
1557 < 1 ? this : xAxis;< axisPos) {< '; }
1558 < 1 ? this : xAxis;< axisPos) {< '; });
1559 < 1 ? this : xAxis;< axisPos) {< '; } else {
1560 < 1 ? this : xAxis;< axisPos) {< '; this.getBox(dataUsed); // Issue #4784
1561 < 1 ? this : xAxis;< axisPos) {< '; }
1562 < 1 ? this : xAxis;< axisPos) {< '; }
1563 < 1 ? this : xAxis;< axisPos) {< '; Series.prototype.setData.call(this, data, redraw, animation, updatePoints);
1564 < 1 ? this : xAxis;< axisPos) {< '; },
1565  
1566  
1567 < 1 ? this : xAxis;< axisPos) {< '; /**
1568 < 1 ? this : xAxis;< axisPos) {< '; * No graph for the map series
1569 < 1 ? this : xAxis;< axisPos) {< '; */
1570 < 1 ? this : xAxis;< axisPos) {< '; drawGraph: noop,
1571  
1572 < 1 ? this : xAxis;< axisPos) {< '; /**
1573 < 1 ? this : xAxis;< axisPos) {< '; * We need the points' bounding boxes in order to draw the data labels, so
1574 < 1 ? this : xAxis;< axisPos) {< '; * we skip it now and call it from drawPoints instead.
1575 < 1 ? this : xAxis;< axisPos) {< '; */
1576 < 1 ? this : xAxis;< axisPos) {< '; drawDataLabels: noop,
1577  
1578 < 1 ? this : xAxis;< axisPos) {< '; /**
1579 < 1 ? this : xAxis;< axisPos) {< '; * Allow a quick redraw by just translating the area group. Used for zooming and panning
1580 < 1 ? this : xAxis;< axisPos) {< '; * in capable browsers.
1581 < 1 ? this : xAxis;< axisPos) {< '; */
1582 < 1 ? this : xAxis;< axisPos) {< '; doFullTranslate: function() {
1583 < 1 ? this : xAxis;< axisPos) {< '; return this.isDirtyData || this.chart.isResizing || this.chart.renderer.isVML || !this.baseTrans;
1584 < 1 ? this : xAxis;< axisPos) {< '; },
1585  
1586 < 1 ? this : xAxis;< axisPos) {< '; /**
1587 < 1 ? this : xAxis;< axisPos) {< '; * Add the path option for data points. Find the max value for color calculation.
1588 < 1 ? this : xAxis;< axisPos) {< '; */
1589 < 1 ? this : xAxis;< axisPos) {< '; translate: function() {
1590 < 1 ? this : xAxis;< axisPos) {< '; var series = this,
1591 < 1 ? this : xAxis;< axisPos) {< '; xAxis = series.xAxis,
1592 < 1 ? this : xAxis;< axisPos) {< '; yAxis = series.yAxis,
1593 < 1 ? this : xAxis;< axisPos) {< '; doFullTranslate = series.doFullTranslate();
1594  
1595 < 1 ? this : xAxis;< axisPos) {< '; series.generatePoints();
1596  
1597 < 1 ? this : xAxis;< axisPos) {< '; each(series.data, function(point) {
1598  
1599 < 1 ? this : xAxis;< axisPos) {< '; // Record the middle point (loosely based on centroid), determined
1600 < 1 ? this : xAxis;< axisPos) {< '; // by the middleX and middleY options.
1601 < 1 ? this : xAxis;< axisPos) {< '; point.plotX = xAxis.toPixels(point._midX, true);
1602 < 1 ? this : xAxis;< axisPos) {< '; point.plotY = yAxis.toPixels(point._midY, true);
1603  
1604 < 1 ? this : xAxis;< axisPos) {< '; if (doFullTranslate) {
1605  
1606 < 1 ? this : xAxis;< axisPos) {< '; point.shapeType = 'path';
1607 < 1 ? this : xAxis;< axisPos) {< '; point.shapeArgs = {
1608 < 1 ? this : xAxis;< axisPos) {< '; d: series.translatePath(point.path)
1609 < 1 ? this : xAxis;< axisPos) {< '; };
1610 < 1 ? this : xAxis;< axisPos) {< '; }
1611 < 1 ? this : xAxis;< axisPos) {< '; });
1612  
1613 < 1 ? this : xAxis;< axisPos) {< '; series.translateColors();
1614 < 1 ? this : xAxis;< axisPos) {< '; },
1615  
1616 < 1 ? this : xAxis;< axisPos) {< '; /**
1617 < 1 ? this : xAxis;< axisPos) {< '; * Get presentational attributes. In the maps series this runs in both
1618 < 1 ? this : xAxis;< axisPos) {< '; * styled and non-styled mode, because colors hold data when a colorAxis
1619 < 1 ? this : xAxis;< axisPos) {< '; * is used.
1620 < 1 ? this : xAxis;< axisPos) {< '; */
1621 < 1 ? this : xAxis;< axisPos) {< '; pointAttribs: function(point, state) {
1622 < 1 ? this : xAxis;< axisPos) {< '; var attr;
1623  
1624 < 1 ? this : xAxis;< axisPos) {< '; attr = seriesTypes.column.prototype.pointAttribs.call(
1625 < 1 ? this : xAxis;< axisPos) {< '; this, point, state
1626 < 1 ? this : xAxis;< axisPos) {< '; );
1627  
1628  
1629 < 1 ? this : xAxis;< axisPos) {< '; // Prevent flickering whan called from setState
1630 < 1 ? this : xAxis;< axisPos) {< '; if (point.isFading) {
1631 < 1 ? this : xAxis;< axisPos) {< '; delete attr.fill;
1632 < 1 ? this : xAxis;< axisPos) {< '; }
1633  
1634 < 1 ? this : xAxis;< axisPos) {< '; // If vector-effect is not supported, we set the stroke-width on the group element
1635 < 1 ? this : xAxis;< axisPos) {< '; // and let all point graphics inherit. That way we don't have to iterate over all
1636 < 1 ? this : xAxis;< axisPos) {< '; // points to update the stroke-width on zooming. TODO: Check unstyled
1637 < 1 ? this : xAxis;< axisPos) {< '; if (supportsVectorEffect) {
1638 < 1 ? this : xAxis;< axisPos) {< '; attr['vector-effect'] = 'non-scaling-stroke';
1639 < 1 ? this : xAxis;< axisPos) {< '; } else {
1640 < 1 ? this : xAxis;< axisPos) {< '; attr['stroke-width'] = 'inherit';
1641 < 1 ? this : xAxis;< axisPos) {< '; }
1642  
1643 < 1 ? this : xAxis;< axisPos) {< '; return attr;
1644 < 1 ? this : xAxis;< axisPos) {< '; },
1645  
1646 < 1 ? this : xAxis;< axisPos) {< '; /**
1647 < 1 ? this : xAxis;< axisPos) {< '; * Use the drawPoints method of column, that is able to handle simple shapeArgs.
1648 < 1 ? this : xAxis;< axisPos) {< '; * Extend it by assigning the tooltip position.
1649 < 1 ? this : xAxis;< axisPos) {< '; */
1650 < 1 ? this : xAxis;< axisPos) {< '; drawPoints: function() {
1651 < 1 ? this : xAxis;< axisPos) {< '; var series = this,
1652 < 1 ? this : xAxis;< axisPos) {< '; xAxis = series.xAxis,
1653 < 1 ? this : xAxis;< axisPos) {< '; yAxis = series.yAxis,
1654 < 1 ? this : xAxis;< axisPos) {< '; group = series.group,
1655 < 1 ? this : xAxis;< axisPos) {< '; chart = series.chart,
1656 < 1 ? this : xAxis;< axisPos) {< '; renderer = chart.renderer,
1657 < 1 ? this : xAxis;< axisPos) {< '; scaleX,
1658 < 1 ? this : xAxis;< axisPos) {< '; scaleY,
1659 < 1 ? this : xAxis;< axisPos) {< '; translateX,
1660 < 1 ? this : xAxis;< axisPos) {< '; translateY,
1661 < 1 ? this : xAxis;< axisPos) {< '; baseTrans = this.baseTrans,
1662 < 1 ? this : xAxis;< axisPos) {< '; transformGroup,
1663 < 1 ? this : xAxis;< axisPos) {< '; startTranslateX,
1664 < 1 ? this : xAxis;< axisPos) {< '; startTranslateY,
1665 < 1 ? this : xAxis;< axisPos) {< '; startScaleX,
1666 < 1 ? this : xAxis;< axisPos) {< '; startScaleY;
1667  
1668 < 1 ? this : xAxis;< axisPos) {< '; // Set a group that handles transform during zooming and panning in order to preserve clipping
1669 < 1 ? this : xAxis;< axisPos) {< '; // on series.group
1670 < 1 ? this : xAxis;< axisPos) {< '; if (!series.transformGroup) {
1671 < 1 ? this : xAxis;< axisPos) {< '; series.transformGroup = renderer.g()
1672 < 1 ? this : xAxis;< axisPos) {< '; .attr({
1673 < 1 ? this : xAxis;< axisPos) {< '; scaleX: 1,
1674 < 1 ? this : xAxis;< axisPos) {< '; scaleY: 1
1675 < 1 ? this : xAxis;< axisPos) {< '; })
1676 < 1 ? this : xAxis;< axisPos) {< '; .add(group);
1677 < 1 ? this : xAxis;< axisPos) {< '; series.transformGroup.survive = true;
1678 < 1 ? this : xAxis;< axisPos) {< '; }
1679  
1680 < 1 ? this : xAxis;< axisPos) {< '; // Draw the shapes again
1681 < 1 ? this : xAxis;< axisPos) {< '; if (series.doFullTranslate()) {
1682  
1683 < 1 ? this : xAxis;< axisPos) {< '; // Individual point actions. TODO: Check unstyled.
1684  
1685 < 1 ? this : xAxis;< axisPos) {< '; if (chart.hasRendered) {
1686 < 1 ? this : xAxis;< axisPos) {< '; each(series.points, function(point) {
1687  
1688 < 1 ? this : xAxis;< axisPos) {< '; // Restore state color on update/redraw (#3529)
1689 < 1 ? this : xAxis;< axisPos) {< '; if (point.shapeArgs) {
1690 < 1 ? this : xAxis;< axisPos) {< '; point.shapeArgs.fill = series.pointAttribs(point, point.state).fill;
1691 < 1 ? this : xAxis;< axisPos) {< '; }
1692 < 1 ? this : xAxis;< axisPos) {< '; });
1693 < 1 ? this : xAxis;< axisPos) {< '; }
1694  
1695  
1696 < 1 ? this : xAxis;< axisPos) {< '; // Draw them in transformGroup
1697 < 1 ? this : xAxis;< axisPos) {< '; series.group = series.transformGroup;
1698 < 1 ? this : xAxis;< axisPos) {< '; seriesTypes.column.prototype.drawPoints.apply(series);
1699 < 1 ? this : xAxis;< axisPos) {< '; series.group = group; // Reset
1700  
1701 < 1 ? this : xAxis;< axisPos) {< '; // Add class names
1702 < 1 ? this : xAxis;< axisPos) {< '; each(series.points, function(point) {
1703 < 1 ? this : xAxis;< axisPos) {< '; if (point.graphic) {
1704 < 1 ? this : xAxis;< axisPos) {< '; if (point.name) {
1705 < 1 ? this : xAxis;< axisPos) {< '; point.graphic.addClass('highcharts-name-' + point.name.replace(/ /g, '-').toLowerCase());
1706 < 1 ? this : xAxis;< axisPos) {< '; }
1707 < 1 ? this : xAxis;< axisPos) {< '; if (point.properties && point.properties['hc-key']) {
1708 < 1 ? this : xAxis;< axisPos) {< '; point.graphic.addClass('highcharts-key-' + point.properties['hc-key'].toLowerCase());
1709 < 1 ? this : xAxis;< axisPos) {< '; }
1710  
1711  
1712 < 1 ? this : xAxis;< axisPos) {< '; }
1713 < 1 ? this : xAxis;< axisPos) {< '; });
1714  
1715 < 1 ? this : xAxis;< axisPos) {< '; // Set the base for later scale-zooming. The originX and originY properties are the
1716 < 1 ? this : xAxis;< axisPos) {< '; // axis values in the plot area's upper left corner.
1717 < 1 ? this : xAxis;< axisPos) {< '; this.baseTrans = {
1718 < 1 ? this : xAxis;< axisPos) {< '; originX: xAxis.min - xAxis.minPixelPadding / xAxis.transA,
1719 < 1 ? this : xAxis;< axisPos) {< '; originY: yAxis.min - yAxis.minPixelPadding / yAxis.transA + (yAxis.reversed ? 0 : yAxis.len / yAxis.transA),
1720 < 1 ? this : xAxis;< axisPos) {< '; transAX: xAxis.transA,
1721 < 1 ? this : xAxis;< axisPos) {< '; transAY: yAxis.transA
1722 < 1 ? this : xAxis;< axisPos) {< '; };
1723  
1724 < 1 ? this : xAxis;< axisPos) {< '; // Reset transformation in case we're doing a full translate (#3789)
1725 < 1 ? this : xAxis;< axisPos) {< '; this.transformGroup.animate({
1726 < 1 ? this : xAxis;< axisPos) {< '; translateX: 0,
1727 < 1 ? this : xAxis;< axisPos) {< '; translateY: 0,
1728 < 1 ? this : xAxis;< axisPos) {< '; scaleX: 1,
1729 < 1 ? this : xAxis;< axisPos) {< '; scaleY: 1
1730 < 1 ? this : xAxis;< axisPos) {< '; });
1731  
1732 < 1 ? this : xAxis;< axisPos) {< '; // Just update the scale and transform for better performance
1733 < 1 ? this : xAxis;< axisPos) {< '; } else {
1734 < 1 ? this : xAxis;< axisPos) {< '; scaleX = xAxis.transA / baseTrans.transAX;
1735 < 1 ? this : xAxis;< axisPos) {< '; scaleY = yAxis.transA / baseTrans.transAY;
1736 < 1 ? this : xAxis;< axisPos) {< '; translateX = xAxis.toPixels(baseTrans.originX, true);
1737 < 1 ? this : xAxis;< axisPos) {< '; translateY = yAxis.toPixels(baseTrans.originY, true);
1738  
1739 < 1 ? this : xAxis;< axisPos) {< '; // Handle rounding errors in normal view (#3789)
1740 < 1 ? this : xAxis;< axisPos) {< '; if (scaleX > 0.99 && scaleX < 1.01 && scaleY > 0.99 && scaleY < 1.01) {
1741 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { scaleX = 1;
1742 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { scaleY = 1;
1743 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { translateX = Math.round(translateX);
1744 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { translateY = Math.round(translateY);
1745 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
1746  
1747 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Animate or move to the new zoom level. In order to prevent
1748 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // flickering as the different transform components are set out of
1749 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // sync (#5991), we run a fake animator attribute and set scale and
1750 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // translation synchronously in the same step.
1751 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // A possible improvement to the API would be to handle this in the
1752 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // renderer or animation engine itself, to ensure that when we are
1753 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // animating multiple properties, we make sure that each step for
1754 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // each property is performed in the same step. Also, for symbols
1755 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // and for transform properties, it should induce a single
1756 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // updateTransform and symbolAttr call.
1757 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { transformGroup = this.transformGroup;
1758 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (chart.renderer.globalAnimation) {
1759 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { startTranslateX = transformGroup.attr('translateX');
1760 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { startTranslateY = transformGroup.attr('translateY');
1761 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { startScaleX = transformGroup.attr('scaleX');
1762 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { startScaleY = transformGroup.attr('scaleY');
1763 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { transformGroup
1764 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { .attr({
1765 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { animator: 0
1766 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { })
1767 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { .animate({
1768 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { animator: 1
1769 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }, {
1770 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { step: function(now, fx) {
1771 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { transformGroup.attr({
1772 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { translateX: startTranslateX +
1773 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { (translateX - startTranslateX) * fx.pos,
1774 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { translateY: startTranslateY +
1775 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { (translateY - startTranslateY) * fx.pos,
1776 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { scaleX: startScaleX +
1777 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { (scaleX - startScaleX) * fx.pos,
1778 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { scaleY: startScaleY +
1779 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { (scaleY - startScaleY) * fx.pos
1780 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
1781  
1782 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
1783 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
1784  
1785 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // When dragging, animation is off.
1786 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { } else {
1787 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { transformGroup.attr({
1788 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { translateX: translateX,
1789 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { translateY: translateY,
1790 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { scaleX: scaleX,
1791 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { scaleY: scaleY
1792 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
1793 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
1794  
1795 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
1796  
1797 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Set the stroke-width directly on the group element so the children inherit it. We need to use
1798 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // setAttribute directly, because the stroke-widthSetter method expects a stroke color also to be
1799 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // set.
1800 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (!supportsVectorEffect) {
1801 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { series.group.element.setAttribute(
1802 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { 'stroke-width',
1803 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { series.options[
1804 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { (series.pointAttrToOptions && series.pointAttrToOptions['stroke-width']) || 'borderWidth'
1805 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { ] / (scaleX || 1)
1806 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { );
1807 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
1808  
1809 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { this.drawMapDataLabels();
1810  
1811  
1812 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
1813  
1814 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
1815 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Draw the data labels. Special for maps is the time that the data labels are drawn (after points),
1816 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * and the clipping of the dataLabelsGroup.
1817 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
1818 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { drawMapDataLabels: function() {
1819  
1820 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Series.prototype.drawDataLabels.call(this);
1821 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (this.dataLabelsGroup) {
1822 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { this.dataLabelsGroup.clip(this.chart.clipRect);
1823 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
1824 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
1825  
1826 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
1827 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Override render to throw in an async call in IE8. Otherwise it chokes on the US counties demo.
1828 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
1829 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { render: function() {
1830 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var series = this,
1831 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { render = Series.prototype.render;
1832  
1833 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Give IE8 some time to breathe.
1834 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (series.chart.renderer.isVML && series.data.length > 3000) {
1835 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { setTimeout(function() {
1836 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { render.call(series);
1837 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
1838 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { } else {
1839 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { render.call(series);
1840 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
1841 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
1842  
1843 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
1844 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * The initial animation for the map series. By default, animation is disabled.
1845 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Animation of map shapes is not at all supported in VML browsers.
1846 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
1847 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { animate: function(init) {
1848 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var chart = this.chart,
1849 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { animation = this.options.animation,
1850 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { group = this.group,
1851 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { xAxis = this.xAxis,
1852 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { yAxis = this.yAxis,
1853 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { left = xAxis.pos,
1854 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { top = yAxis.pos;
1855  
1856 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (chart.renderer.isSVG) {
1857  
1858 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (animation === true) {
1859 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { animation = {
1860 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { duration: 1000
1861 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
1862 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
1863  
1864 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Initialize the animation
1865 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (init) {
1866  
1867 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Scale down the group and place it in the center
1868 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { group.attr({
1869 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { translateX: left + xAxis.len / 2,
1870 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { translateY: top + yAxis.len / 2,
1871 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { scaleX: 0.001, // #1499
1872 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { scaleY: 0.001
1873 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
1874  
1875 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Run the animation
1876 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { } else {
1877 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { group.animate({
1878 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { translateX: left,
1879 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { translateY: top,
1880 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { scaleX: 1,
1881 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { scaleY: 1
1882 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }, animation);
1883  
1884 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Delete this function to allow it only once
1885 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { this.animate = null;
1886 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
1887 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
1888 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
1889  
1890 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
1891 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Animate in the new series from the clicked point in the old series.
1892 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Depends on the drilldown.js module
1893 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
1894 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { animateDrilldown: function(init) {
1895 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var toBox = this.chart.plotBox,
1896 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { level = this.chart.drilldownLevels[this.chart.drilldownLevels.length - 1],
1897 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { fromBox = level.bBox,
1898 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { animationOptions = this.chart.options.drilldown.animation,
1899 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { scale;
1900  
1901 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (!init) {
1902  
1903 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { scale = Math.min(fromBox.width / toBox.width, fromBox.height / toBox.height);
1904 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { level.shapeArgs = {
1905 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { scaleX: scale,
1906 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { scaleY: scale,
1907 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { translateX: fromBox.x,
1908 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { translateY: fromBox.y
1909 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
1910  
1911 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each(this.points, function(point) {
1912 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (point.graphic) {
1913 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point.graphic
1914 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { .attr(level.shapeArgs)
1915 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { .animate({
1916 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { scaleX: 1,
1917 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { scaleY: 1,
1918 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { translateX: 0,
1919 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { translateY: 0
1920 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }, animationOptions);
1921 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
1922 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
1923  
1924 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { this.animate = null;
1925 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
1926  
1927 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
1928  
1929 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { drawLegendSymbol: LegendSymbolMixin.drawRectangle,
1930  
1931 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
1932 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * When drilling up, pull out the individual point graphics from the lower series
1933 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * and animate them into the origin point in the upper series.
1934 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
1935 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { animateDrillupFrom: function(level) {
1936 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesTypes.column.prototype.animateDrillupFrom.call(this, level);
1937 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
1938  
1939  
1940 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
1941 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * When drilling up, keep the upper series invisible until the lower series has
1942 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * moved into place
1943 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
1944 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { animateDrillupTo: function(init) {
1945 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesTypes.column.prototype.animateDrillupTo.call(this, init);
1946 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
1947  
1948 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Point class
1949 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }), extend({
1950 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
1951 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Extend the Point object to split paths
1952 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
1953 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { applyOptions: function(options, x) {
1954  
1955 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var point = Point.prototype.applyOptions.call(this, options, x),
1956 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { series = this.series,
1957 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { joinBy = series.joinBy,
1958 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { mapPoint;
1959  
1960 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (series.mapData) {
1961 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { mapPoint = point[joinBy[1]] !== undefined && series.mapMap[point[joinBy[1]]];
1962 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (mapPoint) {
1963 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // This applies only to bubbles
1964 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (series.xyFromShape) {
1965 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point.x = mapPoint._midX;
1966 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point.y = mapPoint._midY;
1967 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
1968 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { extend(point, mapPoint); // copy over properties
1969 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { } else {
1970 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point.value = point.value || null;
1971 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
1972 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
1973  
1974 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return point;
1975 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
1976  
1977 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
1978 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Stop the fade-out
1979 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
1980 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { onMouseOver: function(e) {
1981 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { clearTimeout(this.colorInterval);
11 office 1982 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (this.value !== null || this.series.options.nullInteraction) {
1 office 1983 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Point.prototype.onMouseOver.call(this, e);
1984 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { } else { //#3401 Tooltip doesn't hide when hovering over null points
1985 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { this.series.onMouseOut(e);
1986 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
1987 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
1988  
1989 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Todo: check unstyled
1990 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
1991 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Custom animation for tweening out the colors. Animation reduces blinking when hovering
1992 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * over islands and coast lines. We run a custom implementation of animation becuase we
1993 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * need to be able to run this independently from other animations like zoom redraw. Also,
1994 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * adding color animation to the adapters would introduce almost the same amount of code.
1995 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
1996 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { onMouseOut: function() {
1997 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var point = this,
1998 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { start = +new Date(),
1999 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { normalColor = color(this.series.pointAttribs(point).fill),
2000 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { hoverColor = color(this.series.pointAttribs(point, 'hover').fill),
2001 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { animation = point.series.options.states.normal.animation,
2002 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { duration = animation && (animation.duration || 500);
2003  
2004 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (duration && normalColor.rgba.length === 4 && hoverColor.rgba.length === 4 && point.state !== 'select') {
2005 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { clearTimeout(point.colorInterval);
2006 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point.colorInterval = setInterval(function() {
2007 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var pos = (new Date() - start) / duration,
2008 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { graphic = point.graphic;
2009 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (pos > 1) {
2010 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pos = 1;
2011 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2012 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (graphic) {
11 office 2013 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { graphic.attr(
2014 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { 'fill',
2015 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { hoverColor.tweenTo(normalColor, pos)
2016 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { );
1 office 2017 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2018 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (pos >= 1) {
2019 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { clearTimeout(point.colorInterval);
2020 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2021 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }, 13);
2022 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point.isFading = true;
2023 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2024 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Point.prototype.onMouseOut.call(point);
2025 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point.isFading = null;
2026 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2027  
2028  
2029 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
11 office 2030 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Highmaps only. Zoom in on the point using the global animation.
2031 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2032 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @function #zoomTo
2033 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @memberOf Point
2034 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @sample maps/members/point-zoomto/
2035 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Zoom to points from butons
1 office 2036 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2037 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zoomTo: function() {
2038 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var point = this,
2039 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { series = point.series;
2040  
2041 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { series.xAxis.setExtremes(
2042 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point._minX,
2043 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point._maxX,
2044 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { false
2045 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { );
2046 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { series.yAxis.setExtremes(
2047 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point._minY,
2048 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point._maxY,
2049 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { false
2050 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { );
2051 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { series.chart.redraw();
2052 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2053 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }, colorPointMixin));
2054  
2055 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }(Highcharts));
2056 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { (function(H) {
2057 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2058 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * (c) 2010-2017 Torstein Honsi
2059 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2060 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * License: www.highcharts.com/license
2061 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2062 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var seriesType = H.seriesType,
2063 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesTypes = H.seriesTypes;
2064  
2065 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // The mapline series type
2066 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesType('mapline', 'map', {
2067  
2068 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { lineWidth: 1,
2069 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { fillColor: 'none'
2070  
2071 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }, {
2072 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { type: 'mapline',
2073 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { colorProp: 'stroke',
2074  
2075 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pointAttrToOptions: {
2076 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { 'stroke': 'color',
2077 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { 'stroke-width': 'lineWidth'
2078 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2079 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2080 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Get presentational attributes
2081 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2082 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pointAttribs: function(point, state) {
2083 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var attr = seriesTypes.map.prototype.pointAttribs.call(this, point, state);
2084  
2085 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // The difference from a map series is that the stroke takes the point color
2086 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { attr.fill = this.options.fillColor;
2087  
2088 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return attr;
2089 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2090  
2091 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { drawLegendSymbol: seriesTypes.line.prototype.drawLegendSymbol
2092 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
2093  
2094 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }(Highcharts));
2095 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { (function(H) {
2096 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2097 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * (c) 2010-2017 Torstein Honsi
2098 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2099 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * License: www.highcharts.com/license
2100 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2101 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var merge = H.merge,
2102 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Point = H.Point,
2103 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesType = H.seriesType;
2104  
2105 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // The mappoint series type
2106 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesType('mappoint', 'scatter', {
2107 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { dataLabels: {
2108 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { enabled: true,
2109 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { formatter: function() { // #2945
2110 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return this.point.name;
2111 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2112 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { crop: false,
2113 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { defer: false,
2114 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { overflow: false,
2115 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { style: {
2116 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { color: '#000000'
2117 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2118 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2119  
2120 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Prototype members
2121 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }, {
2122 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { type: 'mappoint',
2123 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { forceDL: true
2124  
2125 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Point class
2126 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }, {
2127 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { applyOptions: function(options, x) {
2128 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var mergedOptions = options.lat !== undefined && options.lon !== undefined ? merge(options, this.series.chart.fromLatLonToPoint(options)) : options;
2129 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return Point.prototype.applyOptions.call(this, mergedOptions, x);
2130 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2131 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
2132  
2133 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }(Highcharts));
2134 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { (function(H) {
2135 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2136 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * (c) 2010-2017 Torstein Honsi
2137 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2138 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * License: www.highcharts.com/license
2139 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2140 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var arrayMax = H.arrayMax,
2141 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { arrayMin = H.arrayMin,
2142 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Axis = H.Axis,
2143 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { color = H.color,
2144 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each = H.each,
2145 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { isNumber = H.isNumber,
2146 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { noop = H.noop,
2147 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pick = H.pick,
2148 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pInt = H.pInt,
2149 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Point = H.Point,
2150 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Series = H.Series,
2151 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesType = H.seriesType,
2152 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesTypes = H.seriesTypes;
2153  
2154 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /* ****************************************************************************
2155 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Start Bubble series code *
2156 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *****************************************************************************/
2157  
2158 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesType('bubble', 'scatter', {
2159 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { dataLabels: {
2160 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { formatter: function() { // #2945
2161 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return this.point.z;
2162 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2163 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { inside: true,
2164 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { verticalAlign: 'middle'
2165 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2166 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // displayNegative: true,
2167 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { marker: {
2168  
2169 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // fillOpacity: 0.5,
2170 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { lineColor: null, // inherit from series.color
2171 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { lineWidth: 1,
2172  
2173 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Avoid offset in Point.setState
2174 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { radius: null,
2175 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { states: {
2176 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { hover: {
2177 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { radiusPlus: 0
2178 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2179 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2180 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { symbol: 'circle'
2181 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2182 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { minSize: 8,
2183 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { maxSize: '20%',
2184 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // negativeColor: null,
2185 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // sizeBy: 'area'
2186 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { softThreshold: false,
2187 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { states: {
2188 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { hover: {
2189 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { halo: {
2190 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { size: 5
2191 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2192 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2193 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2194 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { tooltip: {
2195 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pointFormat: '({point.x}, {point.y}), Size: {point.z}'
2196 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2197 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { turboThreshold: 0,
2198 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zThreshold: 0,
2199 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zoneAxis: 'z'
2200  
2201 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Prototype members
2202 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }, {
2203 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pointArrayMap: ['y', 'z'],
2204 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { parallelArrays: ['x', 'y', 'z'],
11 office 2205 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { trackerGroups: ['group', 'dataLabelsGroup'],
2206 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { specialGroup: 'group', // To allow clipping (#6296)
1 office 2207 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { bubblePadding: true,
2208 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zoneAxis: 'z',
2209 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { directTouch: true,
2210  
2211  
2212 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pointAttribs: function(point, state) {
2213 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var markerOptions = this.options.marker,
2214 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { fillOpacity = pick(markerOptions.fillOpacity, 0.5),
2215 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { attr = Series.prototype.pointAttribs.call(this, point, state);
2216  
2217 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (fillOpacity !== 1) {
2218 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { attr.fill = color(attr.fill).setOpacity(fillOpacity).get('rgba');
2219 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2220  
2221 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return attr;
2222 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2223  
2224  
2225 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2226 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Get the radius for each point based on the minSize, maxSize and each point's Z value. This
2227 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * must be done prior to Series.translate because the axis needs to add padding in
2228 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * accordance with the point sizes.
2229 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2230 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { getRadii: function(zMin, zMax, minSize, maxSize) {
2231 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var len,
2232 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { i,
2233 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pos,
2234 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zData = this.zData,
2235 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { radii = [],
2236 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { options = this.options,
2237 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { sizeByArea = options.sizeBy !== 'width',
2238 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zThreshold = options.zThreshold,
2239 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zRange = zMax - zMin,
2240 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { value,
2241 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { radius;
2242  
2243 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Set the shape type and arguments to be picked up in drawPoints
2244 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { for (i = 0, len = zData.length; i < len; i++) {
2245  
2246 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { value = zData[i];
2247  
2248 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // When sizing by threshold, the absolute value of z determines the size
2249 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // of the bubble.
2250 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (options.sizeByAbsoluteValue && value !== null) {
2251 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { value = Math.abs(value - zThreshold);
2252 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zMax = Math.max(zMax - zThreshold, Math.abs(zMin - zThreshold));
2253 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zMin = 0;
2254 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2255  
2256 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (value === null) {
2257 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { radius = null;
2258 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Issue #4419 - if value is less than zMin, push a radius that's always smaller than the minimum size
2259 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { } else if (value < zMin) {
2260 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { radius = minSize / 2 - 1;
2261 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { } else {
2262 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Relative size, a number between 0 and 1
2263 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pos = zRange > 0 ? (value - zMin) / zRange : 0.5;
2264  
2265 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (sizeByArea && pos >= 0) {
2266 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pos = Math.sqrt(pos);
2267 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2268 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { radius = Math.ceil(minSize + pos * (maxSize - minSize)) / 2;
2269 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2270 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { radii.push(radius);
2271 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2272 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { this.radii = radii;
2273 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2274  
2275 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2276 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Perform animation on the bubbles
2277 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2278 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { animate: function(init) {
2279 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var animation = this.options.animation;
2280  
2281 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (!init) { // run the animation
2282 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each(this.points, function(point) {
2283 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var graphic = point.graphic,
2284 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { animationTarget;
2285  
2286 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (graphic && graphic.width) { // URL symbols don't have width
2287 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { animationTarget = {
2288 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x: graphic.x,
2289 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y: graphic.y,
2290 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { width: graphic.width,
2291 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { height: graphic.height
2292 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2293  
2294 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Start values
2295 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { graphic.attr({
2296 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x: point.plotX,
2297 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y: point.plotY,
2298 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { width: 1,
2299 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { height: 1
2300 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
2301  
2302 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Run animation
2303 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { graphic.animate(animationTarget, animation);
2304 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2305 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
2306  
2307 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // delete this function to allow it only once
2308 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { this.animate = null;
2309 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2310 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2311  
2312 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2313 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Extend the base translate method to handle bubble size
2314 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2315 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { translate: function() {
2316  
2317 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var i,
2318 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { data = this.data,
2319 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point,
2320 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { radius,
2321 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { radii = this.radii;
2322  
2323 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Run the parent method
2324 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesTypes.scatter.prototype.translate.call(this);
2325  
2326 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Set the shape type and arguments to be picked up in drawPoints
2327 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { i = data.length;
2328  
2329 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { while (i--) {
2330 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point = data[i];
2331 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { radius = radii ? radii[i] : 0; // #1737
2332  
2333 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (isNumber(radius) && radius >= this.minPxSize / 2) {
2334 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Shape arguments
2335 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point.marker = H.extend(point.marker, {
2336 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { radius: radius,
2337 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { width: 2 * radius,
2338 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { height: 2 * radius
2339 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
2340  
2341 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Alignment box for the data label
2342 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point.dlBox = {
2343 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x: point.plotX - radius,
2344 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y: point.plotY - radius,
2345 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { width: 2 * radius,
2346 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { height: 2 * radius
2347 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2348 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { } else { // below zThreshold
2349 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point.shapeArgs = point.plotY = point.dlBox = undefined; // #1691
2350 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2351 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2352 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2353  
2354 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { alignDataLabel: seriesTypes.column.prototype.alignDataLabel,
2355 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { buildKDTree: noop,
2356 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { applyZones: noop
2357  
2358 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Point class
2359 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }, {
2360 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { haloPath: function(size) {
2361 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return Point.prototype.haloPath.call(
2362 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { this,
2363 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { size === 0 ? 0 : (this.marker ? this.marker.radius || 0 : 0) + size // #6067
2364 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { );
2365 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2366 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { ttBelow: false
2367 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
2368  
2369 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2370 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Add logic to pad each axis with the amount of pixels
2371 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * necessary to avoid the bubbles to overflow.
2372 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2373 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Axis.prototype.beforePadding = function() {
2374 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var axis = this,
2375 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { axisLength = this.len,
2376 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { chart = this.chart,
2377 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pxMin = 0,
2378 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pxMax = axisLength,
2379 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { isXAxis = this.isXAxis,
2380 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { dataKey = isXAxis ? 'xData' : 'yData',
2381 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { min = this.min,
2382 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { extremes = {},
2383 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { smallestSize = Math.min(chart.plotWidth, chart.plotHeight),
2384 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zMin = Number.MAX_VALUE,
2385 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zMax = -Number.MAX_VALUE,
2386 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { range = this.max - min,
2387 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { transA = axisLength / range,
2388 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { activeSeries = [];
2389  
2390 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Handle padding on the second pass, or on redraw
2391 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each(this.series, function(series) {
2392  
2393 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var seriesOptions = series.options,
2394 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zData;
2395  
2396 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (series.bubblePadding && (series.visible || !chart.options.chart.ignoreHiddenSeries)) {
2397  
2398 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Correction for #1673
2399 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { axis.allowZoomOutside = true;
2400  
2401 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Cache it
2402 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { activeSeries.push(series);
2403  
2404 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (isXAxis) { // because X axis is evaluated first
2405  
2406 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // For each series, translate the size extremes to pixel values
2407 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each(['minSize', 'maxSize'], function(prop) {
2408 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var length = seriesOptions[prop],
2409 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { isPercent = /%$/.test(length);
2410  
2411 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { length = pInt(length);
2412 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { extremes[prop] = isPercent ?
2413 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { smallestSize * length / 100 :
2414 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { length;
2415  
2416 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
2417 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { series.minPxSize = extremes.minSize;
2418 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Prioritize min size if conflict to make sure bubbles are
2419 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // always visible. #5873
2420 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { series.maxPxSize = Math.max(extremes.maxSize, extremes.minSize);
2421  
2422 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Find the min and max Z
2423 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zData = series.zData;
2424 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (zData.length) { // #1735
2425 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zMin = pick(seriesOptions.zMin, Math.min(
2426 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zMin,
2427 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Math.max(
2428 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { arrayMin(zData),
2429 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesOptions.displayNegative === false ? seriesOptions.zThreshold : -Number.MAX_VALUE
2430 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { )
2431 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { ));
2432 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zMax = pick(seriesOptions.zMax, Math.max(zMax, arrayMax(zData)));
2433 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2434 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2435 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2436 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
2437  
2438 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each(activeSeries, function(series) {
2439  
2440 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var data = series[dataKey],
2441 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { i = data.length,
2442 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { radius;
2443  
2444 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (isXAxis) {
2445 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { series.getRadii(zMin, zMax, series.minPxSize, series.maxPxSize);
2446 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2447  
2448 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (range > 0) {
2449 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { while (i--) {
2450 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (isNumber(data[i]) && axis.dataMin <= data[i] && data[i] <= axis.dataMax) {
2451 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { radius = series.radii[i];
2452 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pxMin = Math.min(((data[i] - min) * transA) - radius, pxMin);
2453 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pxMax = Math.max(((data[i] - min) * transA) + radius, pxMax);
2454 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2455 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2456 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2457 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
2458  
2459 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (activeSeries.length && range > 0 && !this.isLog) {
2460 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pxMax -= axisLength;
2461 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { transA *= (axisLength + pxMin - pxMax) / axisLength;
2462 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each([
2463 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { ['min', 'userMin', pxMin],
2464 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { ['max', 'userMax', pxMax]
2465 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { ], function(keys) {
2466 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (pick(axis.options[keys[0]], axis[keys[1]]) === undefined) {
2467 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { axis[keys[0]] += keys[2] / transA;
2468 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2469 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
2470 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2471 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2472  
2473 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /* ****************************************************************************
2474 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * End Bubble series code *
2475 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *****************************************************************************/
2476  
2477 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }(Highcharts));
2478 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { (function(H) {
2479 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2480 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * (c) 2010-2017 Torstein Honsi
2481 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2482 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * License: www.highcharts.com/license
2483 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2484 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var merge = H.merge,
2485 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Point = H.Point,
2486 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesType = H.seriesType,
2487 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesTypes = H.seriesTypes;
2488  
2489 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // The mapbubble series type
2490 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (seriesTypes.bubble) {
2491  
2492 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesType('mapbubble', 'bubble', {
2493 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { animationLimit: 500,
2494 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { tooltip: {
2495 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pointFormat: '{point.name}: {point.z}'
2496 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2497  
2498 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Prototype members
2499 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }, {
2500 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { xyFromShape: true,
2501 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { type: 'mapbubble',
2502 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pointArrayMap: ['z'], // If one single value is passed, it is interpreted as z
2503 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2504 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Return the map area identified by the dataJoinBy option
2505 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2506 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { getMapData: seriesTypes.map.prototype.getMapData,
2507 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { getBox: seriesTypes.map.prototype.getBox,
2508 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { setData: seriesTypes.map.prototype.setData
2509  
2510 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Point class
2511 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }, {
2512 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { applyOptions: function(options, x) {
2513 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var point;
2514 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (options && options.lat !== undefined && options.lon !== undefined) {
2515 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point = Point.prototype.applyOptions.call(
2516 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { this,
2517 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { merge(options, this.series.chart.fromLatLonToPoint(options)),
2518 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x
2519 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { );
2520 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { } else {
2521 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point = seriesTypes.map.prototype.pointClass.prototype.applyOptions.call(this, options, x);
2522 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2523 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return point;
2524 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2525 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { ttBelow: false
2526 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
2527 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2528  
2529 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }(Highcharts));
2530 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { (function(H) {
2531 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2532 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * (c) 2010-2017 Torstein Honsi
2533 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2534 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * License: www.highcharts.com/license
2535 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2536 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var colorPointMixin = H.colorPointMixin,
2537 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { colorSeriesMixin = H.colorSeriesMixin,
2538 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each = H.each,
2539 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { LegendSymbolMixin = H.LegendSymbolMixin,
2540 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { merge = H.merge,
2541 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { noop = H.noop,
2542 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pick = H.pick,
2543 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Series = H.Series,
2544 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesType = H.seriesType,
2545 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesTypes = H.seriesTypes;
2546  
2547 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // The Heatmap series type
2548 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesType('heatmap', 'scatter', {
2549 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { animation: false,
2550 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { borderWidth: 0,
2551  
2552 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { nullColor: '#f7f7f7',
2553  
2554 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { dataLabels: {
2555 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { formatter: function() { // #2945
2556 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return this.point.value;
2557 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2558 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { inside: true,
2559 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { verticalAlign: 'middle',
2560 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { crop: false,
2561 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { overflow: false,
2562 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { padding: 0 // #3837
2563 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2564 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { marker: null,
2565 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pointRange: null, // dynamically set to colsize by default
2566 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { tooltip: {
2567 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pointFormat: '{point.x}, {point.y}: {point.value}<br/>'
2568 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2569 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { states: {
2570 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { normal: {
2571 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { animation: true
2572 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2573 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { hover: {
2574 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { halo: false, // #3406, halo is not required on heatmaps
2575 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { brightness: 0.2
2576 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2577 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2578 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }, merge(colorSeriesMixin, {
2579 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pointArrayMap: ['y', 'value'],
2580 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { hasPointSpecificOptions: true,
2581 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { supportsDrilldown: true,
2582 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { getExtremesFromAll: true,
2583 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { directTouch: true,
2584  
2585 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2586 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Override the init method to add point ranges on both axes.
2587 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2588 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { init: function() {
2589 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var options;
2590 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesTypes.scatter.prototype.init.apply(this, arguments);
2591  
2592 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { options = this.options;
2593 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { options.pointRange = pick(options.pointRange, options.colsize || 1); // #3758, prevent resetting in setData
2594 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { this.yAxis.axisPointRange = options.rowsize || 1; // general point range
2595 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2596 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { translate: function() {
2597 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var series = this,
2598 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { options = series.options,
2599 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { xAxis = series.xAxis,
2600 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { yAxis = series.yAxis,
2601 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { between = function(x, a, b) {
2602 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return Math.min(Math.max(a, x), b);
2603 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2604  
2605 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { series.generatePoints();
2606  
2607 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each(series.points, function(point) {
2608 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var xPad = (options.colsize || 1) / 2,
2609 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { yPad = (options.rowsize || 1) / 2,
2610 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x1 = between(Math.round(xAxis.len - xAxis.translate(point.x - xPad, 0, 1, 0, 1)), -xAxis.len, 2 * xAxis.len),
2611 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x2 = between(Math.round(xAxis.len - xAxis.translate(point.x + xPad, 0, 1, 0, 1)), -xAxis.len, 2 * xAxis.len),
2612 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y1 = between(Math.round(yAxis.translate(point.y - yPad, 0, 1, 0, 1)), -yAxis.len, 2 * yAxis.len),
2613 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y2 = between(Math.round(yAxis.translate(point.y + yPad, 0, 1, 0, 1)), -yAxis.len, 2 * yAxis.len);
2614  
2615 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Set plotX and plotY for use in K-D-Tree and more
2616 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point.plotX = point.clientX = (x1 + x2) / 2;
2617 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point.plotY = (y1 + y2) / 2;
2618  
2619 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point.shapeType = 'rect';
2620 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point.shapeArgs = {
2621 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x: Math.min(x1, x2),
2622 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y: Math.min(y1, y2),
2623 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { width: Math.abs(x2 - x1),
2624 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { height: Math.abs(y2 - y1)
2625 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2626 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
2627  
2628 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { series.translateColors();
2629 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2630 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { drawPoints: function() {
2631 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesTypes.column.prototype.drawPoints.call(this);
2632  
2633 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each(this.points, function(point) {
2634  
2635 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point.graphic.attr(this.colorAttribs(point));
2636  
2637 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }, this);
2638 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2639 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { animate: noop,
2640 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { getBox: noop,
2641 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { drawLegendSymbol: LegendSymbolMixin.drawRectangle,
2642 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { alignDataLabel: seriesTypes.column.prototype.alignDataLabel,
2643 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { getExtremes: function() {
2644 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Get the extremes from the value data
2645 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Series.prototype.getExtremes.call(this, this.valueData);
2646 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { this.valueMin = this.dataMin;
2647 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { this.valueMax = this.dataMax;
2648  
2649 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Get the extremes from the y data
2650 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Series.prototype.getExtremes.call(this);
2651 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2652  
2653 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }), colorPointMixin);
2654  
2655 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }(Highcharts));
2656 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { (function(H) {
2657 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2658 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * (c) 2010-2017 Torstein Honsi
2659 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2660 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * License: www.highcharts.com/license
2661 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2662 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var Chart = H.Chart,
2663 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each = H.each,
2664 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { extend = H.extend,
2665 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { format = H.format,
2666 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { merge = H.merge,
2667 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { win = H.win,
2668 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { wrap = H.wrap;
2669 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2670 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Test for point in polygon. Polygon defined as array of [x,y] points.
2671 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2672 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { function pointInPolygon(point, polygon) {
2673 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var i,
2674 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { j,
2675 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { rel1,
2676 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { rel2,
2677 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { c = false,
2678 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x = point.x,
2679 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y = point.y;
2680  
2681 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { for (i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
2682 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { rel1 = polygon[i][1] > y;
2683 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { rel2 = polygon[j][1] > y;
2684 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (rel1 !== rel2 && (x < (polygon[j][0] - polygon[i][0]) * (y - polygon[i][1]) / (polygon[j][1] - polygon[i][1]) + polygon[i][0])) {
2685 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { c = !c;
2686 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2687 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2688  
2689 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return c;
2690 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2691  
2692 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
11 office 2693 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Highmaps only. Get point from latitude and longitude using specified
2694 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * transform definition.
2695 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2696 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @function transformFromLatLon
2697 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @memberOf Chart.prototype
2698 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2699 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @param {Object} latLon
2700 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * A latitude/longitude object.
2701 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @param {Number} latLon.lat
2702 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * The latitude.
2703 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @param {Number} latLon.lon
2704 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * The longitude.
2705 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @param {Object} transform
2706 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * The transform definition to use as explained in the {@link
2707 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * https://www.highcharts.com/docs/maps/latlon|documentation}.
2708 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2709 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @return {Object}
2710 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * An object with `x` and `y` properties.
2711 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2712 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @sample maps/series/latlon-transform/
2713 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Use specific transformation for lat/lon
1 office 2714 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2715 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Chart.prototype.transformFromLatLon = function(latLon, transform) {
2716 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (win.proj4 === undefined) {
2717 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { H.error(21);
2718 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return {
2719 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x: 0,
2720 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y: null
2721 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2722 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2723  
2724 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var projected = win.proj4(transform.crs, [latLon.lon, latLon.lat]),
2725 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { cosAngle = transform.cosAngle || (transform.rotation && Math.cos(transform.rotation)),
2726 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { sinAngle = transform.sinAngle || (transform.rotation && Math.sin(transform.rotation)),
2727 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { rotated = transform.rotation ? [projected[0] * cosAngle + projected[1] * sinAngle, -projected[0] * sinAngle + projected[1] * cosAngle] : projected;
2728  
2729 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return {
2730 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x: ((rotated[0] - (transform.xoffset || 0)) * (transform.scale || 1) + (transform.xpan || 0)) * (transform.jsonres || 1) + (transform.jsonmarginX || 0),
2731 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y: (((transform.yoffset || 0) - rotated[1]) * (transform.scale || 1) + (transform.ypan || 0)) * (transform.jsonres || 1) - (transform.jsonmarginY || 0)
2732 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2733 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2734  
2735 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
11 office 2736 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Highmaps only. Get latLon from point using specified transform definition.
2737 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * The method returns an object with the numeric properties `lat` and `lon`.
2738 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2739 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @function transformToLatLon
2740 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @memberOf Chart.prototype
2741 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2742 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @param {Point|Object} point
2743 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * A `Point` instance, or or any object containing the properties `x`
2744 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * and `y` with numeric values.
2745 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @param {Object} transform
2746 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * The transform definition to use as explained in the {@link
2747 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * https://www.highcharts.com/docs/maps/latlon|documentation}.
2748 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2749 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @return {Object}
2750 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * An object with `lat` and `lon` properties.
2751 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2752 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @sample maps/series/latlon-transform/
2753 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Use specific transformation for lat/lon
2754 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
1 office 2755 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2756 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Chart.prototype.transformToLatLon = function(point, transform) {
2757 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (win.proj4 === undefined) {
2758 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { H.error(21);
2759 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return;
2760 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2761  
2762 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var normalized = {
2763 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x: ((point.x - (transform.jsonmarginX || 0)) / (transform.jsonres || 1) - (transform.xpan || 0)) / (transform.scale || 1) + (transform.xoffset || 0),
2764 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y: ((-point.y - (transform.jsonmarginY || 0)) / (transform.jsonres || 1) + (transform.ypan || 0)) / (transform.scale || 1) + (transform.yoffset || 0)
2765 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
2766 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { cosAngle = transform.cosAngle || (transform.rotation && Math.cos(transform.rotation)),
2767 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { sinAngle = transform.sinAngle || (transform.rotation && Math.sin(transform.rotation)),
2768 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Note: Inverted sinAngle to reverse rotation direction
2769 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { projected = win.proj4(transform.crs, 'WGS84', transform.rotation ? {
2770 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x: normalized.x * cosAngle + normalized.y * -sinAngle,
2771 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y: normalized.x * sinAngle + normalized.y * cosAngle
2772 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { } : normalized);
2773  
2774 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return {
2775 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { lat: projected.y,
2776 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { lon: projected.x
2777 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2778 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2779  
11 office 2780 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2781 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Highmaps only. Calculate latitude/longitude values for a point. Returns an
2782 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * object with the numeric properties `lat` and `lon`.
2783 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2784 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @function fromPointToLatLon
2785 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @memberOf Chart.prototype
2786 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2787 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @param {Point|Object} point
2788 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * A `Point` instance or anything containing `x` and `y` properties
2789 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * with numeric values
2790 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @return {Object}
2791 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * An object with `lat` and `lon` properties.
2792 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2793 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @sample maps/demo/latlon-advanced/
2794 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Advanced lat/lon demo
2795 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
1 office 2796 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Chart.prototype.fromPointToLatLon = function(point) {
2797 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var transforms = this.mapTransforms,
2798 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { transform;
2799  
2800 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (!transforms) {
2801 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { H.error(22);
2802 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return;
2803 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2804  
2805 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { for (transform in transforms) {
2806 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (transforms.hasOwnProperty(transform) && transforms[transform].hitZone &&
2807 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pointInPolygon({
2808 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x: point.x,
2809 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y: -point.y
2810 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }, transforms[transform].hitZone.coordinates[0])) {
2811 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return this.transformToLatLon(point, transforms[transform]);
2812 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2813 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2814  
2815 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return this.transformToLatLon(point, transforms['default']); // eslint-disable-line dot-notation
2816 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2817  
11 office 2818 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2819 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Highmaps only. Get chart coordinates from latitude/longitude. Returns an
2820 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * object with x and y values corresponding to the `xAxis` and `yAxis`.
2821 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2822 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @function fromLatLonToPoint
2823 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @memberOf Chart.prototype
2824 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2825 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @param {Object} latLon
2826 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Coordinates.
2827 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @param {Number} latLon.lat
2828 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * The latitude.
2829 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @param {Number} latLon.lon
2830 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * The longitude.
2831 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2832 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @sample maps/series/latlon-to-point/
2833 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Find a point from lat/lon
2834 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2835 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @return {Object}
2836 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * X and Y coordinates in terms of chart axis values.
2837 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
1 office 2838 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Chart.prototype.fromLatLonToPoint = function(latLon) {
2839 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var transforms = this.mapTransforms,
2840 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { transform,
2841 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { coords;
2842  
2843 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (!transforms) {
2844 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { H.error(22);
2845 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return {
2846 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x: 0,
2847 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y: null
2848 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2849 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2850  
2851 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { for (transform in transforms) {
2852 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (transforms.hasOwnProperty(transform) && transforms[transform].hitZone) {
2853 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { coords = this.transformFromLatLon(latLon, transforms[transform]);
2854 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (pointInPolygon({
2855 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x: coords.x,
2856 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y: -coords.y
2857 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }, transforms[transform].hitZone.coordinates[0])) {
2858 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return coords;
2859 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2860 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2861 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2862  
2863 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return this.transformFromLatLon(latLon, transforms['default']); // eslint-disable-line dot-notation
2864 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2865  
2866 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
11 office 2867 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Highmaps only. Restructure a GeoJSON object in preparation to be read
2868 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * directly by the {@link
2869 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * https://api.highcharts.com/highmaps/plotOptions.series.mapData|
2870 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * series.mapData} option. The GeoJSON will be broken down to fit a specific
2871 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Highcharts type, either `map`, `mapline` or `mappoint`. Meta data in
2872 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * GeoJSON's properties object will be copied directly over to
2873 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * {@link Point.properties} in Highmaps.
2874 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2875 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @function #geojson
2876 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @memberOf Highcharts
2877 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2878 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @param {Object} geojson
2879 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * The GeoJSON structure to parse, represented as a JavaScript object
2880 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * rather than a JSON string.
2881 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @param {String} [hType=map]
2882 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * The Highmaps series type to prepare for. Setting "map" will return
2883 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * GeoJSON polygons and multipolygons. Setting "mapline" will return
2884 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * GeoJSON linestrings and multilinestrings. Setting "mappoint" will
2885 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * return GeoJSON points and multipoints.
2886 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2887 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @return {Object}
2888 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * An object ready for the `mapData` option.
2889 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2890 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @sample samples/maps/demo/geojson/
2891 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Simple areas
2892 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @sample maps/demo/geojson-multiple-types/
2893 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Multiple types
2894 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
1 office 2895 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2896 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { H.geojson = function(geojson, hType, series) {
2897 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var mapData = [],
2898 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { path = [],
2899 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { polygonToPath = function(polygon) {
2900 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var i,
2901 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { len = polygon.length;
2902 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { path.push('M');
2903 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { for (i = 0; i < len; i++) {
2904 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (i === 1) {
2905 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { path.push('L');
2906 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2907 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { path.push(polygon[i][0], -polygon[i][1]);
2908 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2909 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2910  
2911 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { hType = hType || 'map';
2912  
2913 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each(geojson.features, function(feature) {
2914  
2915 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var geometry = feature.geometry,
2916 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { type = geometry.type,
2917 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { coordinates = geometry.coordinates,
2918 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { properties = feature.properties,
2919 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point;
2920  
2921 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { path = [];
2922  
2923 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (hType === 'map' || hType === 'mapbubble') {
2924 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (type === 'Polygon') {
2925 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each(coordinates, polygonToPath);
2926 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { path.push('Z');
2927  
2928 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { } else if (type === 'MultiPolygon') {
2929 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each(coordinates, function(items) {
2930 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each(items, polygonToPath);
2931 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
2932 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { path.push('Z');
2933 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2934  
2935 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (path.length) {
2936 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point = {
2937 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { path: path
2938 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2939 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2940  
2941 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { } else if (hType === 'mapline') {
2942 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (type === 'LineString') {
2943 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { polygonToPath(coordinates);
2944 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { } else if (type === 'MultiLineString') {
2945 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each(coordinates, polygonToPath);
2946 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2947  
2948 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (path.length) {
2949 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point = {
2950 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { path: path
2951 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2952 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2953  
2954 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { } else if (hType === 'mappoint') {
2955 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (type === 'Point') {
2956 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { point = {
2957 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x: coordinates[0],
2958 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y: -coordinates[1]
2959 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2960 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2961 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2962 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (point) {
2963 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { mapData.push(extend(point, {
2964 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { name: properties.name || properties.NAME,
11 office 2965  
2966 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2967 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * In Highmaps, when data is loaded from GeoJSON, the GeoJSON
2968 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * item's properies are copied over here.
2969 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
2970 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @name #properties
2971 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @memberOf Point
2972 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @type {Object}
2973 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
1 office 2974 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { properties: properties
2975 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }));
2976 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2977  
2978 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
2979  
2980 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Create a credits text that includes map source, to be picked up in Chart.addCredits
2981 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (series && geojson.copyrightShort) {
2982 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { series.chart.mapCredits = format(series.chart.options.credits.mapText, {
2983 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { geojson: geojson
2984 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
2985 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { series.chart.mapCreditsFull = format(series.chart.options.credits.mapTextFull, {
2986 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { geojson: geojson
2987 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
2988 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
2989  
2990 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return mapData;
2991 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
2992  
2993 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
2994 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Override addCredits to include map source by default
2995 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
2996 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { wrap(Chart.prototype, 'addCredits', function(proceed, credits) {
2997  
2998 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { credits = merge(true, this.options.credits, credits);
2999  
3000 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Disable credits link if map credits enabled. This to allow for in-text anchors.
3001 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (this.mapCredits) {
3002 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { credits.href = null;
3003 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
3004  
3005 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { proceed.call(this, credits);
3006  
3007 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Add full map credits to hover
3008 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (this.credits && this.mapCreditsFull) {
3009 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { this.credits.attr({
3010 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { title: this.mapCreditsFull
3011 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
3012 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
3013 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
3014  
3015 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }(Highcharts));
3016 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { (function(H) {
3017 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
3018 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * (c) 2010-2017 Torstein Honsi
3019 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
3020 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * License: www.highcharts.com/license
3021 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
3022 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var Chart = H.Chart,
3023 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { defaultOptions = H.defaultOptions,
3024 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each = H.each,
3025 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { extend = H.extend,
3026 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { merge = H.merge,
3027 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { pick = H.pick,
3028 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { Renderer = H.Renderer,
3029 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { SVGRenderer = H.SVGRenderer,
3030 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { VMLRenderer = H.VMLRenderer;
3031  
3032  
3033 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Add language
3034 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { extend(defaultOptions.lang, {
3035 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zoomIn: 'Zoom in',
3036 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zoomOut: 'Zoom out'
3037 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
3038  
3039  
3040 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Set the default map navigation options
3041 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { defaultOptions.mapNavigation = {
3042 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { buttonOptions: {
3043 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { alignTo: 'plotBox',
3044 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { align: 'left',
3045 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { verticalAlign: 'top',
3046 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x: 0,
3047 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { width: 18,
3048 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { height: 18,
3049 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { padding: 5,
3050  
3051 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { style: {
3052 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { fontSize: '15px',
3053 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { fontWeight: 'bold'
3054 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
3055 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { theme: {
3056 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { 'stroke-width': 1,
3057 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { 'text-align': 'center'
3058 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
3059  
3060 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
3061 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { buttons: {
3062 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zoomIn: {
3063 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { onclick: function() {
3064 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { this.mapZoom(0.5);
3065 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
3066 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { text: '+',
3067 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y: 0
3068 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
3069 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { zoomOut: {
3070 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { onclick: function() {
3071 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { this.mapZoom(2);
3072 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
3073 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { text: '-',
3074 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y: 28
3075 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
3076 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
3077 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { mouseWheelSensitivity: 1.1
3078 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // enabled: false,
3079 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // enableButtons: null, // inherit from enabled
3080 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // enableTouchZoom: null, // inherit from enabled
3081 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // enableDoubleClickZoom: null, // inherit from enabled
3082 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // enableDoubleClickZoomTo: false
3083 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // enableMouseWheelZoom: null, // inherit from enabled
3084 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
3085  
3086 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
3087 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Utility for reading SVG paths directly.
3088 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
3089 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { H.splitPath = function(path) {
3090 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var i;
3091  
3092 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Move letters apart
3093 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { path = path.replace(/([A-Za-z])/g, ' $1 ');
3094 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Trim
3095 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { path = path.replace(/^\s*/, '').replace(/\s*$/, '');
3096  
3097 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Split on spaces and commas
3098 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { path = path.split(/[ ,]+/); // Extra comma to escape gulp.scripts task
3099  
3100 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Parse numbers
3101 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { for (i = 0; i < path.length; i++) {
3102 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (!/[a-zA-Z]/.test(path[i])) {
3103 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { path[i] = parseFloat(path[i]);
3104 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
3105 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
3106 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return path;
3107 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
3108  
3109 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // A placeholder for map definitions
3110 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { H.maps = {};
3111  
3112  
3113  
3114  
3115  
3116 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Create symbols for the zoom buttons
3117 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { function selectiveRoundedRect(x, y, w, h, rTopLeft, rTopRight, rBottomRight, rBottomLeft) {
3118 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return [
3119 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { 'M', x + rTopLeft, y,
3120 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // top side
3121 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { 'L', x + w - rTopRight, y,
3122 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // top right corner
3123 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { 'C', x + w - rTopRight / 2,
3124 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y, x + w,
3125 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { y + rTopRight / 2, x + w, y + rTopRight,
3126 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // right side
3127 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { 'L', x + w, y + h - rBottomRight,
3128 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // bottom right corner
3129 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { 'C', x + w, y + h - rBottomRight / 2,
3130 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x + w - rBottomRight / 2, y + h,
3131 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x + w - rBottomRight, y + h,
3132 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // bottom side
3133 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { 'L', x + rBottomLeft, y + h,
3134 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // bottom left corner
3135 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { 'C', x + rBottomLeft / 2, y + h,
3136 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x, y + h - rBottomLeft / 2,
3137 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x, y + h - rBottomLeft,
3138 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // left side
3139 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { 'L', x, y + rTopLeft,
3140 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // top left corner
3141 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { 'C', x, y + rTopLeft / 2,
3142 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x + rTopLeft / 2, y,
3143 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { x + rTopLeft, y,
3144 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { 'Z'
3145 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { ];
3146 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
3147 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { SVGRenderer.prototype.symbols.topbutton = function(x, y, w, h, attr) {
3148 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return selectiveRoundedRect(x - 1, y - 1, w, h, attr.r, attr.r, 0, 0);
3149 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
3150 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { SVGRenderer.prototype.symbols.bottombutton = function(x, y, w, h, attr) {
3151 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return selectiveRoundedRect(x - 1, y - 1, w, h, 0, 0, attr.r, attr.r);
3152 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
3153 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // The symbol callbacks are generated on the SVGRenderer object in all browsers. Even
3154 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // VML browsers need this in order to generate shapes in export. Now share
3155 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // them with the VMLRenderer.
3156 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { if (Renderer === VMLRenderer) {
3157 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { each(['topbutton', 'bottombutton'], function(shape) {
3158 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { VMLRenderer.prototype.symbols[shape] = SVGRenderer.prototype.symbols[shape];
3159 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { });
3160 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
3161  
3162  
3163 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /**
11 office 3164 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * The factory function for creating new map charts. Creates a new {@link
3165 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Chart|Chart} object with different default options than the basic Chart.
3166 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
3167 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @function #mapChart
3168 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @memberOf Highcharts
3169 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
3170 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @param {String|HTMLDOMElement} renderTo
3171 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * The DOM element to render to, or its id.
3172 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @param {Options} options
3173 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * The chart options structure as described in the {@link
3174 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * https://api.highcharts.com/highstock|options reference}.
3175 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @param {Function} callback
3176 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * A function to execute when the chart object is finished loading and
3177 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * rendering. In most cases the chart is built in one thread, but in
3178 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * Internet Explorer version 8 or less the chart is sometimes initiated
3179 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * before the document is ready, and in these cases the chart object
3180 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * will not be finished synchronously. As a consequence, code that
3181 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * relies on the newly built Chart object should always run in the
3182 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * callback. Defining a {@link https://api.highcharts.com/highstock/chart.events.load|
3183 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * chart.event.load} handler is equivalent.
3184 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { *
3185 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * @return {Chart}
3186 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { * The chart object.
1 office 3187 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { */
3188 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { H.Map = H.mapChart = function(a, b, c) {
3189  
3190 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { var hasRenderToArg = typeof a === 'string' || a.nodeName,
3191 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { options = arguments[hasRenderToArg ? 1 : 0],
3192 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { hiddenAxis = {
3193 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { endOnTick: false,
3194 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { visible: false,
3195 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { minPadding: 0,
3196 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { maxPadding: 0,
3197 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { startOnTick: false
3198 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
3199 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesOptions,
3200 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { defaultCreditsOptions = H.getOptions().credits;
3201  
3202 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { /* For visual testing
3203 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { hiddenAxis.gridLineWidth = 1;
3204 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { hiddenAxis.gridZIndex = 10;
3205 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { hiddenAxis.tickPositions = undefined;
3206 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // */
3207  
3208 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { // Don't merge the data
3209 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { seriesOptions = options.series;
3210 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { options.series = null;
3211  
3212 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { options = merge({
3213 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { chart: {
3214 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { panning: 'xy',
3215 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { type: 'map'
3216 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
3217 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { credits: {
3218 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { mapText: pick(defaultCreditsOptions.mapText, ' \u00a9 <a href="{geojson.copyrightUrl}">{geojson.copyrightShort}</a>'),
3219 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { mapTextFull: pick(defaultCreditsOptions.mapTextFull, '{geojson.copyright}')
3220 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
3221 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { tooltip: {
3222 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { followTouchMove: false
3223 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
3224 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { xAxis: hiddenAxis,
3225 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { yAxis: merge(hiddenAxis, {
3226 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { reversed: true
3227 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { })
3228 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { },
3229 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { options, // user's options
3230  
3231 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { { // forced options
3232 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { chart: {
3233 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { inverted: false,
3234 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { alignTicks: false
3235 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
3236 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }
3237 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { );
3238  
3239 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { options.series = seriesOptions;
3240  
3241  
3242 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { return hasRenderToArg ?
3243 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { new Chart(a, options, c) :
3244 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { new Chart(options, b);
3245 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { };
3246  
3247 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) { }(Highcharts));
3248 < 1 ? this : xAxis;< axisPos) {< ';< 1.01 && scaleY >< 1.01) {}));