corrade-nucleus-nucleons – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 /**
2 * @license Highcharts JS v5.0.10 (2017-03-31)
3 *
4 * (c) 2009-2017 Torstein Honsi
5 *
6 * License: www.highcharts.com/license
7 */
8 'use strict';
9 (function(factory) {
10 if (typeof module === 'object' && module.exports) {
11 module.exports = factory;
12 } else {
13 factory(Highcharts);
14 }
15 }(function(Highcharts) {
16 (function(H) {
17 /**
18 * (c) 2010-2017 Torstein Honsi
19 *
20 * License: www.highcharts.com/license
21 */
22 var Axis = H.Axis,
23 Chart = H.Chart,
24 color = H.color,
25 ColorAxis,
26 each = H.each,
27 extend = H.extend,
28 isNumber = H.isNumber,
29 Legend = H.Legend,
30 LegendSymbolMixin = H.LegendSymbolMixin,
31 noop = H.noop,
32 merge = H.merge,
33 pick = H.pick,
34 wrap = H.wrap;
35  
36 /**
37 * The ColorAxis object for inclusion in gradient legends
38 */
39 ColorAxis = H.ColorAxis = function() {
40 this.init.apply(this, arguments);
41 };
42 extend(ColorAxis.prototype, Axis.prototype);
43 extend(ColorAxis.prototype, {
44 defaultColorAxisOptions: {
45 lineWidth: 0,
46 minPadding: 0,
47 maxPadding: 0,
48 gridLineWidth: 1,
49 tickPixelInterval: 72,
50 startOnTick: true,
51 endOnTick: true,
52 offset: 0,
53 marker: {
54 animation: {
55 duration: 50
56 },
57 width: 0.01,
58  
59 color: '#999999'
60  
61 },
62 labels: {
63 overflow: 'justify',
64 rotation: 0
65 },
66 minColor: '#e6ebf5',
67 maxColor: '#003399',
68 tickLength: 5,
69 showInLegend: true
70 },
71  
72 // Properties to preserve after destroy, for Axis.update (#5881, #6025)
73 keepProps: [
74 'legendGroup',
75 'legendItemHeight',
76 'legendItemWidth',
77 'legendItem',
78 'legendSymbol'
79 ].concat(Axis.prototype.keepProps),
80  
81 /**
82 * Initialize the color axis
83 */
84 init: function(chart, userOptions) {
85 var horiz = chart.options.legend.layout !== 'vertical',
86 options;
87  
88 this.coll = 'colorAxis';
89  
90 // Build the options
91 options = merge(this.defaultColorAxisOptions, {
92 side: horiz ? 2 : 1,
93 reversed: !horiz
94 }, userOptions, {
95 opposite: !horiz,
96 showEmpty: false,
97 title: null
98 });
99  
100 Axis.prototype.init.call(this, chart, options);
101  
102 // Base init() pushes it to the xAxis array, now pop it again
103 //chart[this.isXAxis ? 'xAxis' : 'yAxis'].pop();
104  
105 // Prepare data classes
106 if (userOptions.dataClasses) {
107 this.initDataClasses(userOptions);
108 }
109 this.initStops(userOptions);
110  
111 // Override original axis properties
112 this.horiz = horiz;
113 this.zoomEnabled = false;
114  
115 // Add default values
116 this.defaultLegendLength = 200;
117 },
118  
119 /*
120 * Return an intermediate color between two colors, according to pos where 0
121 * is the from color and 1 is the to color.
122 * NOTE: Changes here should be copied
123 * to the same function in drilldown.src.js and solid-gauge-src.js.
124 */
125 tweenColors: function(from, to, pos) {
126 // Check for has alpha, because rgba colors perform worse due to lack of
127 // support in WebKit.
128 var hasAlpha,
129 ret;
130  
131 // Unsupported color, return to-color (#3920)
132 if (!to.rgba.length || !from.rgba.length) {
133 ret = to.input || 'none';
134  
135 // Interpolate
136 } else {
137 from = from.rgba;
138 to = to.rgba;
139 hasAlpha = (to[3] !== 1 || from[3] !== 1);
140 ret = (hasAlpha ? 'rgba(' : 'rgb(') +
141 Math.round(to[0] + (from[0] - to[0]) * (1 - pos)) + ',' +
142 Math.round(to[1] + (from[1] - to[1]) * (1 - pos)) + ',' +
143 Math.round(to[2] + (from[2] - to[2]) * (1 - pos)) +
144 (hasAlpha ? (',' + (to[3] + (from[3] - to[3]) * (1 - pos))) : '') + ')';
145 }
146 return ret;
147 },
148  
149 initDataClasses: function(userOptions) {
150 var axis = this,
151 chart = this.chart,
152 dataClasses,
153 colorCounter = 0,
154 colorCount = chart.options.chart.colorCount,
155 options = this.options,
156 len = userOptions.dataClasses.length;
157 this.dataClasses = dataClasses = [];
158 this.legendItems = [];
159  
160 each(userOptions.dataClasses, function(dataClass, i) {
161 var colors;
162  
163 dataClass = merge(dataClass);
164 dataClasses.push(dataClass);
165 if (!dataClass.color) {
166 if (options.dataClassColor === 'category') {
167  
168 colors = chart.options.colors;
169 colorCount = colors.length;
170 dataClass.color = colors[colorCounter];
171  
172 dataClass.colorIndex = colorCounter;
173  
174 // increase and loop back to zero
175 colorCounter++;
176 if (colorCounter === colorCount) {
177 colorCounter = 0;
178 }
179 } else {
180 dataClass.color = axis.tweenColors(
181 color(options.minColor),
182 color(options.maxColor),
183 len < 2 ? 0.5 : i / (len - 1) // #3219
184 );
185 }
186 }
187 });
188 },
189  
190 initStops: function(userOptions) {
191 this.stops = userOptions.stops || [
192 [0, this.options.minColor],
193 [1, this.options.maxColor]
194 ];
195 each(this.stops, function(stop) {
196 stop.color = color(stop[1]);
197 });
198 },
199  
200 /**
201 * Extend the setOptions method to process extreme colors and color
202 * stops.
203 */
204 setOptions: function(userOptions) {
205 Axis.prototype.setOptions.call(this, userOptions);
206  
207 this.options.crosshair = this.options.marker;
208 },
209  
210 setAxisSize: function() {
211 var symbol = this.legendSymbol,
212 chart = this.chart,
213 legendOptions = chart.options.legend || {},
214 x,
215 y,
216 width,
217 height;
218  
219 if (symbol) {
220 this.left = x = symbol.attr('x');
221 this.top = y = symbol.attr('y');
222 this.width = width = symbol.attr('width');
223 this.height = height = symbol.attr('height');
224 this.right = chart.chartWidth - x - width;
225 this.bottom = chart.chartHeight - y - height;
226  
227 this.len = this.horiz ? width : height;
228 this.pos = this.horiz ? x : y;
229 } else {
230 // Fake length for disabled legend to avoid tick issues and such (#5205)
231 this.len = (this.horiz ? legendOptions.symbolWidth : legendOptions.symbolHeight) || this.defaultLegendLength;
232 }
233 },
234  
235 /**
236 * Translate from a value to a color
237 */
238 toColor: function(value, point) {
239 var pos,
240 stops = this.stops,
241 from,
242 to,
243 color,
244 dataClasses = this.dataClasses,
245 dataClass,
246 i;
247  
248 if (dataClasses) {
249 i = dataClasses.length;
250 while (i--) {
251 dataClass = dataClasses[i];
252 from = dataClass.from;
253 to = dataClass.to;
254 if ((from === undefined || value >= from) && (to === undefined || value <= to)) {
255 <= to)) { color = dataClass.color;
256 <= to)) { if (point) {
257 <= to)) { point.dataClass = i;
258 <= to)) { point.colorIndex = dataClass.colorIndex;
259 <= to)) { }
260 <= to)) { break;
261 <= to)) { }
262 <= to)) { }
263  
264 <= to)) { } else {
265  
266 <= to)) { if (this.isLog) {
267 <= to)) { value = this.val2lin(value);
268 <= to)) { }
269 <= to)) { pos = 1 - ((this.max - value) / ((this.max - this.min) || 1));
270 <= to)) { i = stops.length;
271 <= to)) { while (i--) {
272 <= to)) { if (pos > stops[i][0]) {
273 <= to)) { break;
274 <= to)) { }
275 <= to)) { }
276 <= to)) { from = stops[i] || stops[i + 1];
277 <= to)) { to = stops[i + 1] || from;
278  
279 <= to)) { // The position within the gradient
280 <= to)) { pos = 1 - (to[0] - pos) / ((to[0] - from[0]) || 1);
281  
282 <= to)) { color = this.tweenColors(
283 <= to)) { from.color,
284 <= to)) { to.color,
285 <= to)) { pos
286 <= to)) { );
287 <= to)) { }
288 <= to)) { return color;
289 <= to)) { },
290  
291 <= to)) { /**
292 <= to)) { * Override the getOffset method to add the whole axis groups inside the legend.
293 <= to)) { */
294 <= to)) { getOffset: function() {
295 <= to)) { var group = this.legendGroup,
296 <= to)) { sideOffset = this.chart.axisOffset[this.side];
297  
298 <= to)) { if (group) {
299  
300 <= to)) { // Hook for the getOffset method to add groups to this parent group
301 <= to)) { this.axisParent = group;
302  
303 <= to)) { // Call the base
304 <= to)) { Axis.prototype.getOffset.call(this);
305  
306 <= to)) { // First time only
307 <= to)) { if (!this.added) {
308  
309 <= to)) { this.added = true;
310  
311 <= to)) { this.labelLeft = 0;
312 <= to)) { this.labelRight = this.width;
313 <= to)) { }
314 <= to)) { // Reset it to avoid color axis reserving space
315 <= to)) { this.chart.axisOffset[this.side] = sideOffset;
316 <= to)) { }
317 <= to)) { },
318  
319 <= to)) { /**
320 <= to)) { * Create the color gradient
321 <= to)) { */
322 <= to)) { setLegendColor: function() {
323 <= to)) { var grad,
324 <= to)) { horiz = this.horiz,
325 <= to)) { options = this.options,
326 <= to)) { reversed = this.reversed,
327 <= to)) { one = reversed ? 1 : 0,
328 <= to)) { zero = reversed ? 0 : 1;
329  
330 <= to)) { grad = horiz ? [one, 0, zero, 0] : [0, zero, 0, one]; // #3190
331 <= to)) { this.legendColor = {
332 <= to)) { linearGradient: {
333 <= to)) { x1: grad[0],
334 <= to)) { y1: grad[1],
335 <= to)) { x2: grad[2],
336 <= to)) { y2: grad[3]
337 <= to)) { },
338 <= to)) { stops: options.stops || [
339 <= to)) { [0, options.minColor],
340 <= to)) { [1, options.maxColor]
341 <= to)) { ]
342 <= to)) { };
343 <= to)) { },
344  
345 <= to)) { /**
346 <= to)) { * The color axis appears inside the legend and has its own legend symbol
347 <= to)) { */
348 <= to)) { drawLegendSymbol: function(legend, item) {
349 <= to)) { var padding = legend.padding,
350 <= to)) { legendOptions = legend.options,
351 <= to)) { horiz = this.horiz,
352 <= to)) { width = pick(legendOptions.symbolWidth, horiz ? this.defaultLegendLength : 12),
353 <= to)) { height = pick(legendOptions.symbolHeight, horiz ? 12 : this.defaultLegendLength),
354 <= to)) { labelPadding = pick(legendOptions.labelPadding, horiz ? 16 : 30),
355 <= to)) { itemDistance = pick(legendOptions.itemDistance, 10);
356  
357 <= to)) { this.setLegendColor();
358  
359 <= to)) { // Create the gradient
360 <= to)) { item.legendSymbol = this.chart.renderer.rect(
361 <= to)) { 0,
362 <= to)) { legend.baseline - 11,
363 <= to)) { width,
364 <= to)) { height
365 <= to)) { ).attr({
366 <= to)) { zIndex: 1
367 <= to)) { }).add(item.legendGroup);
368  
369 <= to)) { // Set how much space this legend item takes up
370 <= to)) { this.legendItemWidth = width + padding + (horiz ? itemDistance : labelPadding);
371 <= to)) { this.legendItemHeight = height + padding + (horiz ? labelPadding : 0);
372 <= to)) { },
373 <= to)) { /**
374 <= to)) { * Fool the legend
375 <= to)) { */
376 <= to)) { setState: noop,
377 <= to)) { visible: true,
378 <= to)) { setVisible: noop,
379 <= to)) { getSeriesExtremes: function() {
380 <= to)) { var series = this.series,
381 <= to)) { i = series.length;
382 <= to)) { this.dataMin = Infinity;
383 <= to)) { this.dataMax = -Infinity;
384 <= to)) { while (i--) {
385 <= to)) { if (series[i].valueMin !== undefined) {
386 <= to)) { this.dataMin = Math.min(this.dataMin, series[i].valueMin);
387 <= to)) { this.dataMax = Math.max(this.dataMax, series[i].valueMax);
388 <= to)) { }
389 <= to)) { }
390 <= to)) { },
391 <= to)) { drawCrosshair: function(e, point) {
392 <= to)) { var plotX = point && point.plotX,
393 <= to)) { plotY = point && point.plotY,
394 <= to)) { crossPos,
395 <= to)) { axisPos = this.pos,
396 <= to)) { axisLen = this.len;
397  
398 <= to)) { if (point) {
399 <= to)) { crossPos = this.toPixels(point[point.series.colorKey]);
400 <= to)) { if (crossPos < axisPos) {
401 <= to)) {< axisPos) { crossPos = axisPos - 2;
402 <= to)) {< axisPos) { } else if (crossPos > axisPos + axisLen) {
403 <= to)) {< axisPos) { crossPos = axisPos + axisLen + 2;
404 <= to)) {< axisPos) { }
405  
406 <= to)) {< axisPos) { point.plotX = crossPos;
407 <= to)) {< axisPos) { point.plotY = this.len - crossPos;
408 <= to)) {< axisPos) { Axis.prototype.drawCrosshair.call(this, e, point);
409 <= to)) {< axisPos) { point.plotX = plotX;
410 <= to)) {< axisPos) { point.plotY = plotY;
411  
412 <= to)) {< axisPos) { if (this.cross) {
413 <= to)) {< axisPos) { this.cross
414 <= to)) {< axisPos) { .addClass('highcharts-coloraxis-marker')
415 <= to)) {< axisPos) { .add(this.legendGroup);
416  
417  
418 <= to)) {< axisPos) { this.cross.attr({
419 <= to)) {< axisPos) { fill: this.crosshair.color
420 <= to)) {< axisPos) { });
421  
422  
423 <= to)) {< axisPos) { }
424 <= to)) {< axisPos) { }
425 <= to)) {< axisPos) { },
426 <= to)) {< axisPos) { getPlotLinePath: function(a, b, c, d, pos) {
427 <= to)) {< axisPos) { return isNumber(pos) ? // crosshairs only // #3969 pos can be 0 !!
428 <= to)) {< 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']) :
429 <= to)) {< axisPos) { Axis.prototype.getPlotLinePath.call(this, a, b, c, d);
430 <= to)) {< axisPos) { },
431  
432 <= to)) {< axisPos) { update: function(newOptions, redraw) {
433 <= to)) {< axisPos) { var chart = this.chart,
434 <= to)) {< axisPos) { legend = chart.legend;
435  
436 <= to)) {< axisPos) { each(this.series, function(series) {
437 <= to)) {< axisPos) { series.isDirtyData = true; // Needed for Axis.update when choropleth colors change
438 <= to)) {< axisPos) { });
439  
440 <= to)) {< axisPos) { // When updating data classes, destroy old items and make sure new ones are created (#3207)
441 <= to)) {< axisPos) { if (newOptions.dataClasses && legend.allItems) {
442 <= to)) {< axisPos) { each(legend.allItems, function(item) {
443 <= to)) {< axisPos) { if (item.isDataClass) {
444 <= to)) {< axisPos) { item.legendGroup.destroy();
445 <= to)) {< axisPos) { }
446 <= to)) {< axisPos) { });
447 <= to)) {< axisPos) { chart.isDirtyLegend = true;
448 <= to)) {< axisPos) { }
449  
450 <= to)) {< axisPos) { // Keep the options structure updated for export. Unlike xAxis and yAxis, the colorAxis is
451 <= to)) {< axisPos) { // not an array. (#3207)
452 <= to)) {< axisPos) { chart.options[this.coll] = merge(this.userOptions, newOptions);
453  
454 <= to)) {< axisPos) { Axis.prototype.update.call(this, newOptions, redraw);
455 <= to)) {< axisPos) { if (this.legendItem) {
456 <= to)) {< axisPos) { this.setLegendColor();
457 <= to)) {< axisPos) { legend.colorizeItem(this, true);
458 <= to)) {< axisPos) { }
459 <= to)) {< axisPos) { },
460  
461 <= to)) {< axisPos) { /**
462 <= to)) {< axisPos) { * Get the legend item symbols for data classes
463 <= to)) {< axisPos) { */
464 <= to)) {< axisPos) { getDataClassLegendSymbols: function() {
465 <= to)) {< axisPos) { var axis = this,
466 <= to)) {< axisPos) { chart = this.chart,
467 <= to)) {< axisPos) { legendItems = this.legendItems,
468 <= to)) {< axisPos) { legendOptions = chart.options.legend,
469 <= to)) {< axisPos) { valueDecimals = legendOptions.valueDecimals,
470 <= to)) {< axisPos) { valueSuffix = legendOptions.valueSuffix || '',
471 <= to)) {< axisPos) { name;
472  
473 <= to)) {< axisPos) { if (!legendItems.length) {
474 <= to)) {< axisPos) { each(this.dataClasses, function(dataClass, i) {
475 <= to)) {< axisPos) { var vis = true,
476 <= to)) {< axisPos) { from = dataClass.from,
477 <= to)) {< axisPos) { to = dataClass.to;
478  
479 <= to)) {< axisPos) { // Assemble the default name. This can be overridden by legend.options.labelFormatter
480 <= to)) {< axisPos) { name = '';
481 <= to)) {< axisPos) { if (from === undefined) {
482 <= to)) {< axisPos) { name = '< ';
483 <= to)) {< axisPos) {< '; } else if (to === undefined) {
484 <= to)) {< axisPos) {< '; name = '> ';
485 <= to)) {< axisPos) {< '; }
486 <= to)) {< axisPos) {< '; if (from !== undefined) {
487 <= to)) {< axisPos) {< '; name += H.numberFormat(from, valueDecimals) + valueSuffix;
488 <= to)) {< axisPos) {< '; }
489 <= to)) {< axisPos) {< '; if (from !== undefined && to !== undefined) {
490 <= to)) {< axisPos) {< '; name += ' - ';
491 <= to)) {< axisPos) {< '; }
492 <= to)) {< axisPos) {< '; if (to !== undefined) {
493 <= to)) {< axisPos) {< '; name += H.numberFormat(to, valueDecimals) + valueSuffix;
494 <= to)) {< axisPos) {< '; }
495 <= to)) {< axisPos) {< '; // Add a mock object to the legend items
496 <= to)) {< axisPos) {< '; legendItems.push(extend({
497 <= to)) {< axisPos) {< '; chart: chart,
498 <= to)) {< axisPos) {< '; name: name,
499 <= to)) {< axisPos) {< '; options: {},
500 <= to)) {< axisPos) {< '; drawLegendSymbol: LegendSymbolMixin.drawRectangle,
501 <= to)) {< axisPos) {< '; visible: true,
502 <= to)) {< axisPos) {< '; setState: noop,
503 <= to)) {< axisPos) {< '; isDataClass: true,
504 <= to)) {< axisPos) {< '; setVisible: function() {
505 <= to)) {< axisPos) {< '; vis = this.visible = !vis;
506 <= to)) {< axisPos) {< '; each(axis.series, function(series) {
507 <= to)) {< axisPos) {< '; each(series.points, function(point) {
508 <= to)) {< axisPos) {< '; if (point.dataClass === i) {
509 <= to)) {< axisPos) {< '; point.setVisible(vis);
510 <= to)) {< axisPos) {< '; }
511 <= to)) {< axisPos) {< '; });
512 <= to)) {< axisPos) {< '; });
513  
514 <= to)) {< axisPos) {< '; chart.legend.colorizeItem(this, vis);
515 <= to)) {< axisPos) {< '; }
516 <= to)) {< axisPos) {< '; }, dataClass));
517 <= to)) {< axisPos) {< '; });
518 <= to)) {< axisPos) {< '; }
519 <= to)) {< axisPos) {< '; return legendItems;
520 <= to)) {< axisPos) {< '; },
521 <= to)) {< axisPos) {< '; name: '' // Prevents 'undefined' in legend in IE8
522 <= to)) {< axisPos) {< '; });
523  
524 <= to)) {< axisPos) {< '; /**
525 <= to)) {< axisPos) {< '; * Handle animation of the color attributes directly
526 <= to)) {< axisPos) {< '; */
527 <= to)) {< axisPos) {< '; each(['fill', 'stroke'], function(prop) {
528 <= to)) {< axisPos) {< '; H.Fx.prototype[prop + 'Setter'] = function() {
529 <= to)) {< axisPos) {< '; this.elem.attr(
530 <= to)) {< axisPos) {< '; prop,
531 <= to)) {< axisPos) {< '; ColorAxis.prototype.tweenColors(
532 <= to)) {< axisPos) {< '; color(this.start),
533 <= to)) {< axisPos) {< '; color(this.end),
534 <= to)) {< axisPos) {< '; this.pos
535 <= to)) {< axisPos) {< '; ),
536 <= to)) {< axisPos) {< '; null,
537 <= to)) {< axisPos) {< '; true
538 <= to)) {< axisPos) {< '; );
539 <= to)) {< axisPos) {< '; };
540 <= to)) {< axisPos) {< '; });
541  
542 <= to)) {< axisPos) {< '; /**
543 <= to)) {< axisPos) {< '; * Extend the chart getAxes method to also get the color axis
544 <= to)) {< axisPos) {< '; */
545 <= to)) {< axisPos) {< '; wrap(Chart.prototype, 'getAxes', function(proceed) {
546  
547 <= to)) {< axisPos) {< '; var options = this.options,
548 <= to)) {< axisPos) {< '; colorAxisOptions = options.colorAxis;
549  
550 <= to)) {< axisPos) {< '; proceed.call(this);
551  
552 <= to)) {< axisPos) {< '; this.colorAxis = [];
553 <= to)) {< axisPos) {< '; if (colorAxisOptions) {
554 <= to)) {< axisPos) {< '; new ColorAxis(this, colorAxisOptions); // eslint-disable-line no-new
555 <= to)) {< axisPos) {< '; }
556 <= to)) {< axisPos) {< '; });
557  
558  
559 <= to)) {< axisPos) {< '; /**
560 <= to)) {< axisPos) {< '; * Wrap the legend getAllItems method to add the color axis. This also removes the
561 <= to)) {< axisPos) {< '; * axis' own series to prevent them from showing up individually.
562 <= to)) {< axisPos) {< '; */
563 <= to)) {< axisPos) {< '; wrap(Legend.prototype, 'getAllItems', function(proceed) {
564 <= to)) {< axisPos) {< '; var allItems = [],
565 <= to)) {< axisPos) {< '; colorAxis = this.chart.colorAxis[0];
566  
567 <= to)) {< axisPos) {< '; if (colorAxis && colorAxis.options) {
568 <= to)) {< axisPos) {< '; if (colorAxis.options.showInLegend) {
569 <= to)) {< axisPos) {< '; // Data classes
570 <= to)) {< axisPos) {< '; if (colorAxis.options.dataClasses) {
571 <= to)) {< axisPos) {< '; allItems = allItems.concat(colorAxis.getDataClassLegendSymbols());
572 <= to)) {< axisPos) {< '; // Gradient legend
573 <= to)) {< axisPos) {< '; } else {
574 <= to)) {< axisPos) {< '; // Add this axis on top
575 <= to)) {< axisPos) {< '; allItems.push(colorAxis);
576 <= to)) {< axisPos) {< '; }
577 <= to)) {< axisPos) {< '; }
578  
579 <= to)) {< axisPos) {< '; // Don't add the color axis' series
580 <= to)) {< axisPos) {< '; each(colorAxis.series, function(series) {
581 <= to)) {< axisPos) {< '; series.options.showInLegend = false;
582 <= to)) {< axisPos) {< '; });
583 <= to)) {< axisPos) {< '; }
584  
585 <= to)) {< axisPos) {< '; return allItems.concat(proceed.call(this));
586 <= to)) {< axisPos) {< '; });
587  
588 <= to)) {< axisPos) {< '; wrap(Legend.prototype, 'colorizeItem', function(proceed, item, visible) {
589 <= to)) {< axisPos) {< '; proceed.call(this, item, visible);
590 <= to)) {< axisPos) {< '; if (visible && item.legendColor) {
591 <= to)) {< axisPos) {< '; item.legendSymbol.attr({
592 <= to)) {< axisPos) {< '; fill: item.legendColor
593 <= to)) {< axisPos) {< '; });
594 <= to)) {< axisPos) {< '; }
595 <= to)) {< axisPos) {< '; });
596  
597 <= to)) {< axisPos) {< '; }(Highcharts));
598 <= to)) {< axisPos) {< '; (function(H) {
599 <= to)) {< axisPos) {< '; /**
600 <= to)) {< axisPos) {< '; * (c) 2010-2017 Torstein Honsi
601 <= to)) {< axisPos) {< '; *
602 <= to)) {< axisPos) {< '; * License: www.highcharts.com/license
603 <= to)) {< axisPos) {< '; */
604 <= to)) {< axisPos) {< '; var defined = H.defined,
605 <= to)) {< axisPos) {< '; each = H.each,
606 <= to)) {< axisPos) {< '; noop = H.noop,
607 <= to)) {< axisPos) {< '; seriesTypes = H.seriesTypes;
608  
609 <= to)) {< axisPos) {< '; /**
610 <= to)) {< axisPos) {< '; * Mixin for maps and heatmaps
611 <= to)) {< axisPos) {< '; */
612 <= to)) {< axisPos) {< '; H.colorPointMixin = {
613 <= to)) {< axisPos) {< '; /**
614 <= to)) {< axisPos) {< '; * Color points have a value option that determines whether or not it is a null point
615 <= to)) {< axisPos) {< '; */
616 <= to)) {< axisPos) {< '; isValid: function() {
617 <= to)) {< axisPos) {< '; return this.value !== null;
618 <= to)) {< axisPos) {< '; },
619  
620 <= to)) {< axisPos) {< '; /**
621 <= to)) {< axisPos) {< '; * Set the visibility of a single point
622 <= to)) {< axisPos) {< '; */
623 <= to)) {< axisPos) {< '; setVisible: function(vis) {
624 <= to)) {< axisPos) {< '; var point = this,
625 <= to)) {< axisPos) {< '; method = vis ? 'show' : 'hide';
626  
627 <= to)) {< axisPos) {< '; // Show and hide associated elements
628 <= to)) {< axisPos) {< '; each(['graphic', 'dataLabel'], function(key) {
629 <= to)) {< axisPos) {< '; if (point[key]) {
630 <= to)) {< axisPos) {< '; point[key][method]();
631 <= to)) {< axisPos) {< '; }
632 <= to)) {< axisPos) {< '; });
633 <= to)) {< axisPos) {< '; },
634 <= to)) {< axisPos) {< '; setState: function(state) {
635 <= to)) {< axisPos) {< '; H.Point.prototype.setState.call(this, state);
636 <= to)) {< axisPos) {< '; if (this.graphic) {
637 <= to)) {< axisPos) {< '; this.graphic.attr({
638 <= to)) {< axisPos) {< '; zIndex: state === 'hover' ? 1 : 0
639 <= to)) {< axisPos) {< '; });
640 <= to)) {< axisPos) {< '; }
641 <= to)) {< axisPos) {< '; }
642 <= to)) {< axisPos) {< '; };
643  
644 <= to)) {< axisPos) {< '; H.colorSeriesMixin = {
645 <= to)) {< axisPos) {< '; pointArrayMap: ['value'],
646 <= to)) {< axisPos) {< '; axisTypes: ['xAxis', 'yAxis', 'colorAxis'],
647 <= to)) {< axisPos) {< '; optionalAxis: 'colorAxis',
648 <= to)) {< axisPos) {< '; trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'],
649 <= to)) {< axisPos) {< '; getSymbol: noop,
650 <= to)) {< axisPos) {< '; parallelArrays: ['x', 'y', 'value'],
651 <= to)) {< axisPos) {< '; colorKey: 'value',
652  
653  
654 <= to)) {< axisPos) {< '; pointAttribs: seriesTypes.column.prototype.pointAttribs,
655  
656  
657 <= to)) {< axisPos) {< '; /**
658 <= to)) {< axisPos) {< '; * In choropleth maps, the color is a result of the value, so this needs translation too
659 <= to)) {< axisPos) {< '; */
660 <= to)) {< axisPos) {< '; translateColors: function() {
661 <= to)) {< axisPos) {< '; var series = this,
662 <= to)) {< axisPos) {< '; nullColor = this.options.nullColor,
663 <= to)) {< axisPos) {< '; colorAxis = this.colorAxis,
664 <= to)) {< axisPos) {< '; colorKey = this.colorKey;
665  
666 <= to)) {< axisPos) {< '; each(this.data, function(point) {
667 <= to)) {< axisPos) {< '; var value = point[colorKey],
668 <= to)) {< axisPos) {< '; color;
669  
670 <= to)) {< axisPos) {< '; color = point.options.color ||
671 <= to)) {< axisPos) {< '; (point.isNull ? nullColor : (colorAxis && value !== undefined) ? colorAxis.toColor(value, point) : point.color || series.color);
672  
673 <= to)) {< axisPos) {< '; if (color) {
674 <= to)) {< axisPos) {< '; point.color = color;
675 <= to)) {< axisPos) {< '; }
676 <= to)) {< axisPos) {< '; });
677 <= to)) {< axisPos) {< '; },
678  
679 <= to)) {< axisPos) {< '; /**
680 <= to)) {< axisPos) {< '; * Get the color attibutes to apply on the graphic
681 <= to)) {< axisPos) {< '; */
682 <= to)) {< axisPos) {< '; colorAttribs: function(point) {
683 <= to)) {< axisPos) {< '; var ret = {};
684 <= to)) {< axisPos) {< '; if (defined(point.color)) {
685 <= to)) {< axisPos) {< '; ret[this.colorProp || 'fill'] = point.color;
686 <= to)) {< axisPos) {< '; }
687 <= to)) {< axisPos) {< '; return ret;
688 <= to)) {< axisPos) {< '; }
689 <= to)) {< axisPos) {< '; };
690  
691 <= to)) {< axisPos) {< '; }(Highcharts));
692 <= to)) {< axisPos) {< '; (function(H) {
693 <= to)) {< axisPos) {< '; /**
694 <= to)) {< axisPos) {< '; * (c) 2010-2017 Torstein Honsi
695 <= to)) {< axisPos) {< '; *
696 <= to)) {< axisPos) {< '; * License: www.highcharts.com/license
697 <= to)) {< axisPos) {< '; */
698 <= to)) {< axisPos) {< '; var colorPointMixin = H.colorPointMixin,
699 <= to)) {< axisPos) {< '; colorSeriesMixin = H.colorSeriesMixin,
700 <= to)) {< axisPos) {< '; each = H.each,
701 <= to)) {< axisPos) {< '; LegendSymbolMixin = H.LegendSymbolMixin,
702 <= to)) {< axisPos) {< '; merge = H.merge,
703 <= to)) {< axisPos) {< '; noop = H.noop,
704 <= to)) {< axisPos) {< '; pick = H.pick,
705 <= to)) {< axisPos) {< '; Series = H.Series,
706 <= to)) {< axisPos) {< '; seriesType = H.seriesType,
707 <= to)) {< axisPos) {< '; seriesTypes = H.seriesTypes;
708  
709 <= to)) {< axisPos) {< '; // The Heatmap series type
710 <= to)) {< axisPos) {< '; seriesType('heatmap', 'scatter', {
711 <= to)) {< axisPos) {< '; animation: false,
712 <= to)) {< axisPos) {< '; borderWidth: 0,
713  
714 <= to)) {< axisPos) {< '; nullColor: '#f7f7f7',
715  
716 <= to)) {< axisPos) {< '; dataLabels: {
717 <= to)) {< axisPos) {< '; formatter: function() { // #2945
718 <= to)) {< axisPos) {< '; return this.point.value;
719 <= to)) {< axisPos) {< '; },
720 <= to)) {< axisPos) {< '; inside: true,
721 <= to)) {< axisPos) {< '; verticalAlign: 'middle',
722 <= to)) {< axisPos) {< '; crop: false,
723 <= to)) {< axisPos) {< '; overflow: false,
724 <= to)) {< axisPos) {< '; padding: 0 // #3837
725 <= to)) {< axisPos) {< '; },
726 <= to)) {< axisPos) {< '; marker: null,
727 <= to)) {< axisPos) {< '; pointRange: null, // dynamically set to colsize by default
728 <= to)) {< axisPos) {< '; tooltip: {
729 <= to)) {< axisPos) {< '; pointFormat: '{point.x}, {point.y}: {point.value}<br/>'
730 <= to)) {< axisPos) {< '; },
731 <= to)) {< axisPos) {< '; states: {
732 <= to)) {< axisPos) {< '; normal: {
733 <= to)) {< axisPos) {< '; animation: true
734 <= to)) {< axisPos) {< '; },
735 <= to)) {< axisPos) {< '; hover: {
736 <= to)) {< axisPos) {< '; halo: false, // #3406, halo is not required on heatmaps
737 <= to)) {< axisPos) {< '; brightness: 0.2
738 <= to)) {< axisPos) {< '; }
739 <= to)) {< axisPos) {< '; }
740 <= to)) {< axisPos) {< '; }, merge(colorSeriesMixin, {
741 <= to)) {< axisPos) {< '; pointArrayMap: ['y', 'value'],
742 <= to)) {< axisPos) {< '; hasPointSpecificOptions: true,
743 <= to)) {< axisPos) {< '; supportsDrilldown: true,
744 <= to)) {< axisPos) {< '; getExtremesFromAll: true,
745 <= to)) {< axisPos) {< '; directTouch: true,
746  
747 <= to)) {< axisPos) {< '; /**
748 <= to)) {< axisPos) {< '; * Override the init method to add point ranges on both axes.
749 <= to)) {< axisPos) {< '; */
750 <= to)) {< axisPos) {< '; init: function() {
751 <= to)) {< axisPos) {< '; var options;
752 <= to)) {< axisPos) {< '; seriesTypes.scatter.prototype.init.apply(this, arguments);
753  
754 <= to)) {< axisPos) {< '; options = this.options;
755 <= to)) {< axisPos) {< '; options.pointRange = pick(options.pointRange, options.colsize || 1); // #3758, prevent resetting in setData
756 <= to)) {< axisPos) {< '; this.yAxis.axisPointRange = options.rowsize || 1; // general point range
757 <= to)) {< axisPos) {< '; },
758 <= to)) {< axisPos) {< '; translate: function() {
759 <= to)) {< axisPos) {< '; var series = this,
760 <= to)) {< axisPos) {< '; options = series.options,
761 <= to)) {< axisPos) {< '; xAxis = series.xAxis,
762 <= to)) {< axisPos) {< '; yAxis = series.yAxis,
763 <= to)) {< axisPos) {< '; between = function(x, a, b) {
764 <= to)) {< axisPos) {< '; return Math.min(Math.max(a, x), b);
765 <= to)) {< axisPos) {< '; };
766  
767 <= to)) {< axisPos) {< '; series.generatePoints();
768  
769 <= to)) {< axisPos) {< '; each(series.points, function(point) {
770 <= to)) {< axisPos) {< '; var xPad = (options.colsize || 1) / 2,
771 <= to)) {< axisPos) {< '; yPad = (options.rowsize || 1) / 2,
772 <= to)) {< axisPos) {< '; x1 = between(Math.round(xAxis.len - xAxis.translate(point.x - xPad, 0, 1, 0, 1)), -xAxis.len, 2 * xAxis.len),
773 <= to)) {< axisPos) {< '; x2 = between(Math.round(xAxis.len - xAxis.translate(point.x + xPad, 0, 1, 0, 1)), -xAxis.len, 2 * xAxis.len),
774 <= to)) {< axisPos) {< '; y1 = between(Math.round(yAxis.translate(point.y - yPad, 0, 1, 0, 1)), -yAxis.len, 2 * yAxis.len),
775 <= to)) {< axisPos) {< '; y2 = between(Math.round(yAxis.translate(point.y + yPad, 0, 1, 0, 1)), -yAxis.len, 2 * yAxis.len);
776  
777 <= to)) {< axisPos) {< '; // Set plotX and plotY for use in K-D-Tree and more
778 <= to)) {< axisPos) {< '; point.plotX = point.clientX = (x1 + x2) / 2;
779 <= to)) {< axisPos) {< '; point.plotY = (y1 + y2) / 2;
780  
781 <= to)) {< axisPos) {< '; point.shapeType = 'rect';
782 <= to)) {< axisPos) {< '; point.shapeArgs = {
783 <= to)) {< axisPos) {< '; x: Math.min(x1, x2),
784 <= to)) {< axisPos) {< '; y: Math.min(y1, y2),
785 <= to)) {< axisPos) {< '; width: Math.abs(x2 - x1),
786 <= to)) {< axisPos) {< '; height: Math.abs(y2 - y1)
787 <= to)) {< axisPos) {< '; };
788 <= to)) {< axisPos) {< '; });
789  
790 <= to)) {< axisPos) {< '; series.translateColors();
791 <= to)) {< axisPos) {< '; },
792 <= to)) {< axisPos) {< '; drawPoints: function() {
793 <= to)) {< axisPos) {< '; seriesTypes.column.prototype.drawPoints.call(this);
794  
795 <= to)) {< axisPos) {< '; each(this.points, function(point) {
796  
797 <= to)) {< axisPos) {< '; point.graphic.attr(this.colorAttribs(point));
798  
799 <= to)) {< axisPos) {< '; }, this);
800 <= to)) {< axisPos) {< '; },
801 <= to)) {< axisPos) {< '; animate: noop,
802 <= to)) {< axisPos) {< '; getBox: noop,
803 <= to)) {< axisPos) {< '; drawLegendSymbol: LegendSymbolMixin.drawRectangle,
804 <= to)) {< axisPos) {< '; alignDataLabel: seriesTypes.column.prototype.alignDataLabel,
805 <= to)) {< axisPos) {< '; getExtremes: function() {
806 <= to)) {< axisPos) {< '; // Get the extremes from the value data
807 <= to)) {< axisPos) {< '; Series.prototype.getExtremes.call(this, this.valueData);
808 <= to)) {< axisPos) {< '; this.valueMin = this.dataMin;
809 <= to)) {< axisPos) {< '; this.valueMax = this.dataMax;
810  
811 <= to)) {< axisPos) {< '; // Get the extremes from the y data
812 <= to)) {< axisPos) {< '; Series.prototype.getExtremes.call(this);
813 <= to)) {< axisPos) {< '; }
814  
815 <= to)) {< axisPos) {< '; }), colorPointMixin);
816  
817 <= to)) {< axisPos) {< '; }(Highcharts));
818 <= to)) {< axisPos) {< ';}));