diff --git a/README.md b/README.md index 88799c4c..11b1f023 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ MyEMS项目由下列组件构成: [安装 myems-api](./myems-api/README.md) -### MyEMS 管理 UI (AngularJS) +### MyEMS 管理 UI (AngularJS version 1.x) [安装 admin UI](./admin/README.md) @@ -58,6 +58,13 @@ MyEMS项目由下列组件构成: [安装 web UI](./web/README.md) +### 默认端口号 + +MyEMS API: 8000 + +MyEMS Web UI: 80 + +MyEMS Admin UI: 8001 ### Docker Docker-compose 安装 diff --git a/README_DE.md b/README_DE.md index 6284e75c..8f13827f 100644 --- a/README_DE.md +++ b/README_DE.md @@ -60,6 +60,15 @@ Dieses Projekt besteht aus folgenden Komponenten: [Installieren web UI](./web/README.md) +### Standardports + +MyEMS API: 8000 + +MyEMS Web UI: 80 + +MyEMS Admin UI: 8001 + + ### Docker Docker-compose Installieren ``` diff --git a/README_EN.md b/README_EN.md index 6062aae9..e847fec1 100644 --- a/README_EN.md +++ b/README_EN.md @@ -60,6 +60,15 @@ This project is compose of following components: [Install web UI](./web/README.md) +### Default Ports + +MyEMS API: 8000 + +MyEMS Web UI: 80 + +MyEMS Admin UI: 8001 + + ### Docker-compose Installation ``` diff --git a/admin/app/controllers/settings/energyflowdiagram/energyflowdiagrampreview.controller.js b/admin/app/controllers/settings/energyflowdiagram/energyflowdiagrampreview.controller.js index c0dc1a15..50af7a88 100644 --- a/admin/app/controllers/settings/energyflowdiagram/energyflowdiagrampreview.controller.js +++ b/admin/app/controllers/settings/energyflowdiagram/energyflowdiagrampreview.controller.js @@ -1,6 +1,6 @@ 'use strict'; -app.controller('EnergyFlowDiagramPreviewController', function($scope, EnergyFlowDiagramService, EnergyFlowDiagramLinkService, highchartsNG) { +app.controller('EnergyFlowDiagramPreviewController', function($scope, EnergyFlowDiagramService, EnergyFlowDiagramLinkService) { $scope.energyflowdiagrams = []; $scope.currentEnergyFlowDiagram = null; diff --git a/admin/index.html b/admin/index.html index 93e9b65f..15c4810f 100644 --- a/admin/index.html +++ b/admin/index.html @@ -56,14 +56,8 @@ - - - - - + - - diff --git a/admin/js/angular-highcharts/drilldown.js b/admin/js/angular-highcharts/drilldown.js deleted file mode 100644 index b8ce9720..00000000 --- a/admin/js/angular-highcharts/drilldown.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - Highcharts JS v5.0.6 (2016-12-07) - Highcharts Drilldown module - - Author: Torstein Honsi - License: www.highcharts.com/license - -*/ -(function(n){"object"===typeof module&&module.exports?module.exports=n:n(Highcharts)})(function(n){(function(f){function n(b,a,d){var c;a.rgba.length&&b.rgba.length?(b=b.rgba,a=a.rgba,c=1!==a[3]||1!==b[3],b=(c?"rgba(":"rgb(")+Math.round(a[0]+(b[0]-a[0])*(1-d))+","+Math.round(a[1]+(b[1]-a[1])*(1-d))+","+Math.round(a[2]+(b[2]-a[2])*(1-d))+(c?","+(a[3]+(b[3]-a[3])*(1-d)):"")+")"):b=a.input||"none";return b}var B=f.noop,v=f.color,w=f.defaultOptions,l=f.each,p=f.extend,H=f.format,C=f.pick,x=f.wrap,q=f.Chart, -t=f.seriesTypes,D=t.pie,r=t.column,E=f.Tick,y=f.fireEvent,F=f.inArray,G=1;l(["fill","stroke"],function(b){f.Fx.prototype[b+"Setter"]=function(){this.elem.attr(b,n(v(this.start),v(this.end),this.pos),null,!0)}});p(w.lang,{drillUpText:"\u25c1 Back to {series.name}"});w.drilldown={activeAxisLabelStyle:{cursor:"pointer",color:"#003399",fontWeight:"bold",textDecoration:"underline"},activeDataLabelStyle:{cursor:"pointer",color:"#003399",fontWeight:"bold",textDecoration:"underline"},animation:{duration:500}, -drillUpButton:{position:{align:"right",x:-10,y:10}}};f.SVGRenderer.prototype.Element.prototype.fadeIn=function(b){this.attr({opacity:.1,visibility:"inherit"}).animate({opacity:C(this.newOpacity,1)},b||{duration:250})};q.prototype.addSeriesAsDrilldown=function(b,a){this.addSingleSeriesAsDrilldown(b,a);this.applyDrilldown()};q.prototype.addSingleSeriesAsDrilldown=function(b,a){var d=b.series,c=d.xAxis,e=d.yAxis,h,g=[],k=[],u,m,z;z={color:b.color||d.color};this.drilldownLevels||(this.drilldownLevels= -[]);u=d.options._levelNumber||0;(m=this.drilldownLevels[this.drilldownLevels.length-1])&&m.levelNumber!==u&&(m=void 0);a=p(p({_ddSeriesId:G++},z),a);h=F(b,d.points);l(d.chart.series,function(a){a.xAxis!==c||a.isDrilling||(a.options._ddSeriesId=a.options._ddSeriesId||G++,a.options._colorIndex=a.userOptions._colorIndex,a.options._levelNumber=a.options._levelNumber||u,m?(g=m.levelSeries,k=m.levelSeriesOptions):(g.push(a),k.push(a.options)))});b=p({levelNumber:u,seriesOptions:d.options,levelSeriesOptions:k, -levelSeries:g,shapeArgs:b.shapeArgs,bBox:b.graphic?b.graphic.getBBox():{},color:b.isNull?(new f.Color(v)).setOpacity(0).get():v,lowerSeriesOptions:a,pointOptions:d.options.data[h],pointIndex:h,oldExtremes:{xMin:c&&c.userMin,xMax:c&&c.userMax,yMin:e&&e.userMin,yMax:e&&e.userMax}},z);this.drilldownLevels.push(b);a=b.lowerSeries=this.addSeries(a,!1);a.options._levelNumber=u+1;c&&(c.oldPos=c.pos,c.userMin=c.userMax=null,e.userMin=e.userMax=null);d.type===a.type&&(a.animate=a.animateDrilldown||B,a.options.animation= -!0)};q.prototype.applyDrilldown=function(){var b=this.drilldownLevels,a;b&&0 - * [ - * 'printChart', - * 'separator', - * 'downloadPNG', - * 'downloadJPEG', - * 'downloadPDF', - * 'downloadSVG' - * ] - * - * - * @type {Array|Array} - * @sample {highcharts} highcharts/exporting/menuitemdefinitions/ - * Menu item definitions - * @sample {highstock} highcharts/exporting/menuitemdefinitions/ - * Menu item definitions - * @sample {highmaps} highcharts/exporting/menuitemdefinitions/ - * Menu item definitions - * @since 2.0 - */ - menuItems: [ - 'printChart', - 'separator', - 'downloadPNG', - 'downloadJPEG', - 'downloadPDF', - 'downloadSVG' - ] - } - }, - /** - * An object consisting of definitions for the menu items in the context - * menu. Each key value pair has a `key` that is referenced in the - * [menuItems](#exporting.buttons.contextButton.menuItems) setting, - * and a `value`, which is an object with the following properties: - * - *
- * - *
onclick
- * - *
The click handler for the menu item
- * - *
text
- * - *
The text for the menu item
- * - *
textKey
- * - *
If internationalization is required, the key to a language string
- * - *
- * - * @type {Object} - * @sample {highcharts} highcharts/exporting/menuitemdefinitions/ - * Menu item definitions - * @sample {highstock} highcharts/exporting/menuitemdefinitions/ - * Menu item definitions - * @sample {highmaps} highcharts/exporting/menuitemdefinitions/ - * Menu item definitions - * @since 5.0.13 - */ - menuItemDefinitions: { - - /** - * @ignore - */ - printChart: { - textKey: 'printChart', - onclick: function() { - this.print(); - } - }, - - /** - * @ignore - */ - separator: { - separator: true - }, - - /** - * @ignore - */ - downloadPNG: { - textKey: 'downloadPNG', - onclick: function() { - this.exportChart(); - } - }, - - /** - * @ignore - */ - downloadJPEG: { - textKey: 'downloadJPEG', - onclick: function() { - this.exportChart({ - type: 'image/jpeg' - }); - } - }, - - /** - * @ignore - */ - downloadPDF: { - textKey: 'downloadPDF', - onclick: function() { - this.exportChart({ - type: 'application/pdf' - }); - } - }, - - /** - * @ignore - */ - downloadSVG: { - textKey: 'downloadSVG', - onclick: function() { - this.exportChart({ - type: 'image/svg+xml' - }); - } - } - } - }; - - /** - * Fires after a chart is printed through the context menu item or the - * `Chart.print` method. Requires the exporting module. - * - * @type {Function} - * @context Chart - * @sample {highcharts} highcharts/chart/events-beforeprint-afterprint/ - * Rescale the chart to print - * @sample {highstock} highcharts/chart/events-beforeprint-afterprint/ - * Rescale the chart to print - * @sample {highmaps} highcharts/chart/events-beforeprint-afterprint/ - * Rescale the chart to print - * @since 4.1.0 - * @apioption chart.events.afterPrint - */ - - /** - * Fires before a chart is printed through the context menu item or - * the `Chart.print` method. Requires the exporting module. - * - * @type {Function} - * @context Chart - * @sample {highcharts} highcharts/chart/events-beforeprint-afterprint/ - * Rescale the chart to print - * @sample {highstock} highcharts/chart/events-beforeprint-afterprint/ - * Rescale the chart to print - * @sample {highmaps} highcharts/chart/events-beforeprint-afterprint/ - * Rescale the chart to print - * @since 4.1.0 - * @apioption chart.events.beforePrint - */ - - - // Add the H.post utility - H.post = function(url, data, formAttributes) { - // create the form - var form = createElement('form', merge({ - method: 'post', - action: url, - enctype: 'multipart/form-data' - }, formAttributes), { - display: 'none' - }, doc.body); - - // add the data - objectEach(data, function(val, name) { - createElement('input', { - type: 'hidden', - name: name, - value: val - }, null, form); - }); - - // submit - form.submit(); - - // clean up - discardElement(form); - }; - - extend(Chart.prototype, /** @lends Highcharts.Chart.prototype */ { - - /** - * Exporting module only. A collection of fixes on the produced SVG to - * account for expando properties, browser bugs, VML problems and other. - * Returns a cleaned SVG. - * - * @private - */ - sanitizeSVG: function(svg, options) { - // Move HTML into a foreignObject - if (options && options.exporting && options.exporting.allowHTML) { - var html = svg.match(/<\/svg>(.*?$)/); - if (html && html[1]) { - html = '' + - '' + - html[1] + - '' + - ''; - svg = svg.replace('', html + ''); - } - } - - svg = svg - .replace(/zIndex="[^"]+"/g, '') - .replace(/isShadow="[^"]+"/g, '') - .replace(/symbolName="[^"]+"/g, '') - .replace(/jQuery[0-9]+="[^"]+"/g, '') - .replace(/url\(("|")(\S+)("|")\)/g, 'url($2)') - .replace(/url\([^#]+#/g, 'url(#') - .replace(/.*?$/, '') - // Batik doesn't support rgba fills and strokes (#3095) - .replace(/(fill|stroke)="rgba\(([ 0-9]+,[ 0-9]+,[ 0-9]+),([ 0-9\.]+)\)"/g, '$1="rgb($2)" $1-opacity="$3"') - - // Replace HTML entities, issue #347 - .replace(/ /g, '\u00A0') // no-break space - .replace(/­/g, '\u00AD'); // soft hyphen - - - // Further sanitize for oldIE - if (this.ieSanitizeSVG) { - svg = this.ieSanitizeSVG(svg); - } - - - return svg; - }, - - /** - * Return the unfiltered innerHTML of the chart container. Used as hook for - * plugins. In styled mode, it also takes care of inlining CSS style rules. - * - * @see Chart#getSVG - * - * @returns {String} - * The unfiltered SVG of the chart. - */ - getChartHTML: function() { - - return this.container.innerHTML; - }, - - /** - * Return an SVG representation of the chart. - * - * @param chartOptions {Options} - * Additional chart options for the generated SVG representation. - * For collections like `xAxis`, `yAxis` or `series`, the additional - * options is either merged in to the orininal item of the same - * `id`, or to the first item if a common id is not found. - * @return {String} - * The SVG representation of the rendered chart. - * @sample highcharts/members/chart-getsvg/ - * View the SVG from a button - */ - getSVG: function(chartOptions) { - var chart = this, - chartCopy, - sandbox, - svg, - seriesOptions, - sourceWidth, - sourceHeight, - cssWidth, - cssHeight, - options = merge(chart.options, chartOptions); // copy the options and add extra options - - - // create a sandbox where a new chart will be generated - sandbox = createElement('div', null, { - position: 'absolute', - top: '-9999em', - width: chart.chartWidth + 'px', - height: chart.chartHeight + 'px' - }, doc.body); - - // get the source size - cssWidth = chart.renderTo.style.width; - cssHeight = chart.renderTo.style.height; - sourceWidth = options.exporting.sourceWidth || - options.chart.width || - (/px$/.test(cssWidth) && parseInt(cssWidth, 10)) || - 600; - sourceHeight = options.exporting.sourceHeight || - options.chart.height || - (/px$/.test(cssHeight) && parseInt(cssHeight, 10)) || - 400; - - // override some options - extend(options.chart, { - animation: false, - renderTo: sandbox, - forExport: true, - renderer: 'SVGRenderer', - width: sourceWidth, - height: sourceHeight - }); - options.exporting.enabled = false; // hide buttons in print - delete options.data; // #3004 - - // prepare for replicating the chart - options.series = []; - each(chart.series, function(serie) { - seriesOptions = merge(serie.userOptions, { // #4912 - animation: false, // turn off animation - enableMouseTracking: false, - showCheckbox: false, - visible: serie.visible - }); - - if (!seriesOptions.isInternal) { // used for the navigator series that has its own option set - options.series.push(seriesOptions); - } - }); - - // Assign an internal key to ensure a one-to-one mapping (#5924) - each(chart.axes, function(axis) { - if (!axis.userOptions.internalKey) { // #6444 - axis.userOptions.internalKey = H.uniqueKey(); - } - }); - - // generate the chart copy - chartCopy = new H.Chart(options, chart.callback); - - // Axis options and series options (#2022, #3900, #5982) - if (chartOptions) { - each(['xAxis', 'yAxis', 'series'], function(coll) { - var collOptions = {}; - if (chartOptions[coll]) { - collOptions[coll] = chartOptions[coll]; - chartCopy.update(collOptions); - } - }); - } - - // Reflect axis extremes in the export (#5924) - each(chart.axes, function(axis) { - var axisCopy = H.find(chartCopy.axes, function(copy) { - return copy.options.internalKey === - axis.userOptions.internalKey; - }), - extremes = axis.getExtremes(), - userMin = extremes.userMin, - userMax = extremes.userMax; - - if (axisCopy && (userMin !== undefined || userMax !== undefined)) { - axisCopy.setExtremes(userMin, userMax, true, false); - } - }); - - // Get the SVG from the container's innerHTML - svg = chartCopy.getChartHTML(); - - svg = chart.sanitizeSVG(svg, options); - - // free up memory - options = null; - chartCopy.destroy(); - discardElement(sandbox); - - return svg; - }, - - getSVGForExport: function(options, chartOptions) { - var chartExportingOptions = this.options.exporting; - - return this.getSVG(merge({ - chart: { - borderRadius: 0 - } - }, - chartExportingOptions.chartOptions, - chartOptions, { - exporting: { - sourceWidth: (options && options.sourceWidth) || chartExportingOptions.sourceWidth, - sourceHeight: (options && options.sourceHeight) || chartExportingOptions.sourceHeight - } - } - )); - }, - - /** - * Exporting module required. Submit an SVG version of the chart to a server - * along with some parameters for conversion. - * @param {Object} exportingOptions - * Exporting options in addition to those defined in {@link - * https://api.highcharts.com/highcharts/exporting|exporting}. - * @param {String} exportingOptions.filename - * The file name for the export without extension. - * @param {String} exportingOptions.url - * The URL for the server module to do the conversion. - * @param {Number} exportingOptions.width - * The width of the PNG or JPG image generated on the server. - * @param {String} exportingOptions.type - * The MIME type of the converted image. - * @param {Number} exportingOptions.sourceWidth - * The pixel width of the source (in-page) chart. - * @param {Number} exportingOptions.sourceHeight - * The pixel height of the source (in-page) chart. - * @param {Options} chartOptions - * Additional chart options for the exported chart. For example a - * different background color can be added here, or `dataLabels` - * for export only. - * - * @sample highcharts/members/chart-exportchart/ - * Export with no options - * @sample highcharts/members/chart-exportchart-filename/ - * PDF type and custom filename - * @sample highcharts/members/chart-exportchart-custom-background/ - * Different chart background in export - * @sample stock/members/chart-exportchart/ - * Export with Highstock - */ - exportChart: function(exportingOptions, chartOptions) { - - var svg = this.getSVGForExport(exportingOptions, chartOptions); - - // merge the options - exportingOptions = merge(this.options.exporting, exportingOptions); - - // do the post - H.post(exportingOptions.url, { - filename: exportingOptions.filename || 'chart', - type: exportingOptions.type, - width: exportingOptions.width || 0, // IE8 fails to post undefined correctly, so use 0 - scale: exportingOptions.scale, - svg: svg - }, exportingOptions.formAttributes); - - }, - - /** - * Exporting module required. Clears away other elements in the page and - * prints the chart as it is displayed. By default, when the exporting - * module is enabled, a context button with a drop down menu in the upper - * right corner accesses this function. - * - * @sample highcharts/members/chart-print/ - * Print from a HTML button - */ - print: function() { - - var chart = this, - container = chart.container, - origDisplay = [], - origParent = container.parentNode, - body = doc.body, - childNodes = body.childNodes, - printMaxWidth = chart.options.exporting.printMaxWidth, - resetParams, - handleMaxWidth; - - if (chart.isPrinting) { // block the button while in printing mode - return; - } - - chart.isPrinting = true; - chart.pointer.reset(null, 0); - - fireEvent(chart, 'beforePrint'); - - // Handle printMaxWidth - handleMaxWidth = printMaxWidth && chart.chartWidth > printMaxWidth; - if (handleMaxWidth) { - resetParams = [chart.options.chart.width, undefined, false]; - chart.setSize(printMaxWidth, undefined, false); - } - - // hide all body content - each(childNodes, function(node, i) { - if (node.nodeType === 1) { - origDisplay[i] = node.style.display; - node.style.display = 'none'; - } - }); - - // pull out the chart - body.appendChild(container); - - // print - win.focus(); // #1510 - win.print(); - - // allow the browser to prepare before reverting - setTimeout(function() { - - // put the chart back in - origParent.appendChild(container); - - // restore all body content - each(childNodes, function(node, i) { - if (node.nodeType === 1) { - node.style.display = origDisplay[i]; - } - }); - - chart.isPrinting = false; - - // Reset printMaxWidth - if (handleMaxWidth) { - chart.setSize.apply(chart, resetParams); - } - - fireEvent(chart, 'afterPrint'); - - }, 1000); - - }, - - /** - * Display a popup menu for choosing the export type. - * - * @private - * - * @param {String} className An identifier for the menu - * @param {Array} items A collection with text and onclicks for the items - * @param {Number} x The x position of the opener button - * @param {Number} y The y position of the opener button - * @param {Number} width The width of the opener button - * @param {Number} height The height of the opener button - */ - contextMenu: function(className, items, x, y, width, height, button) { - var chart = this, - navOptions = chart.options.navigation, - chartWidth = chart.chartWidth, - chartHeight = chart.chartHeight, - cacheName = 'cache-' + className, - menu = chart[cacheName], - menuPadding = Math.max(width, height), // for mouse leave detection - innerMenu, - hide, - menuStyle; - - // create the menu only the first time - if (!menu) { - - // create a HTML element above the SVG - chart[cacheName] = menu = createElement('div', { - className: className - }, { - position: 'absolute', - zIndex: 1000, - padding: menuPadding + 'px' - }, chart.container); - - innerMenu = createElement('div', { - className: 'highcharts-menu' - }, null, menu); - - - // Presentational CSS - css(innerMenu, extend({ - MozBoxShadow: '3px 3px 10px #888', - WebkitBoxShadow: '3px 3px 10px #888', - boxShadow: '3px 3px 10px #888' - }, navOptions.menuStyle)); - - - // hide on mouse out - hide = function() { - css(menu, { - display: 'none' - }); - if (button) { - button.setState(0); - } - chart.openMenu = false; - }; - - // Hide the menu some time after mouse leave (#1357) - chart.exportEvents.push( - addEvent(menu, 'mouseleave', function() { - menu.hideTimer = setTimeout(hide, 500); - }), - addEvent(menu, 'mouseenter', function() { - clearTimeout(menu.hideTimer); - }), - - // Hide it on clicking or touching outside the menu (#2258, #2335, - // #2407) - addEvent(doc, 'mouseup', function(e) { - if (!chart.pointer.inClass(e.target, className)) { - hide(); - } - }) - ); - - // create the items - each(items, function(item) { - - if (typeof item === 'string') { - item = chart.options.exporting.menuItemDefinitions[item]; - } - - if (H.isObject(item, true)) { - var element; - - if (item.separator) { - element = createElement('hr', null, null, innerMenu); - - } else { - element = createElement('div', { - className: 'highcharts-menu-item', - onclick: function(e) { - if (e) { // IE7 - e.stopPropagation(); - } - hide(); - if (item.onclick) { - item.onclick.apply(chart, arguments); - } - }, - innerHTML: item.text || chart.options.lang[item.textKey] - }, null, innerMenu); - - - element.onmouseover = function() { - css(this, navOptions.menuItemHoverStyle); - }; - element.onmouseout = function() { - css(this, navOptions.menuItemStyle); - }; - css(element, extend({ - cursor: 'pointer' - }, navOptions.menuItemStyle)); - - } - - // Keep references to menu divs to be able to destroy them - chart.exportDivElements.push(element); - } - }); - - // Keep references to menu and innerMenu div to be able to destroy them - chart.exportDivElements.push(innerMenu, menu); - - chart.exportMenuWidth = menu.offsetWidth; - chart.exportMenuHeight = menu.offsetHeight; - } - - menuStyle = { - display: 'block' - }; - - // if outside right, right align it - if (x + chart.exportMenuWidth > chartWidth) { - menuStyle.right = (chartWidth - x - width - menuPadding) + 'px'; - } else { - menuStyle.left = (x - menuPadding) + 'px'; - } - // if outside bottom, bottom align it - if (y + height + chart.exportMenuHeight > chartHeight && button.alignOptions.verticalAlign !== 'top') { - menuStyle.bottom = (chartHeight - y - menuPadding) + 'px'; - } else { - menuStyle.top = (y + height - menuPadding) + 'px'; - } - - css(menu, menuStyle); - chart.openMenu = true; - }, - - /** - * Add the export button to the chart, with options. - * - * @private - */ - addButton: function(options) { - var chart = this, - renderer = chart.renderer, - btnOptions = merge(chart.options.navigation.buttonOptions, options), - onclick = btnOptions.onclick, - menuItems = btnOptions.menuItems, - symbol, - button, - symbolSize = btnOptions.symbolSize || 12; - if (!chart.btnCount) { - chart.btnCount = 0; - } - - // Keeps references to the button elements - if (!chart.exportDivElements) { - chart.exportDivElements = []; - chart.exportSVGElements = []; - } - - if (btnOptions.enabled === false) { - return; - } - - - var attr = btnOptions.theme, - states = attr.states, - hover = states && states.hover, - select = states && states.select, - callback; - - delete attr.states; - - if (onclick) { - callback = function(e) { - e.stopPropagation(); - onclick.call(chart, e); - }; - - } else if (menuItems) { - callback = function() { - chart.contextMenu( - button.menuClassName, - menuItems, - button.translateX, - button.translateY, - button.width, - button.height, - button - ); - button.setState(2); - }; - } - - - if (btnOptions.text && btnOptions.symbol) { - attr.paddingLeft = pick(attr.paddingLeft, 25); - - } else if (!btnOptions.text) { - extend(attr, { - width: btnOptions.width, - height: btnOptions.height, - padding: 0 - }); - } - - button = renderer.button(btnOptions.text, 0, 0, callback, attr, hover, select) - .addClass(options.className) - .attr({ - - 'stroke-linecap': 'round', - - title: chart.options.lang[btnOptions._titleKey], - zIndex: 3 // #4955 - }); - button.menuClassName = options.menuClassName || 'highcharts-menu-' + chart.btnCount++; - - if (btnOptions.symbol) { - symbol = renderer.symbol( - btnOptions.symbol, - btnOptions.symbolX - (symbolSize / 2), - btnOptions.symbolY - (symbolSize / 2), - symbolSize, - symbolSize - ) - .addClass('highcharts-button-symbol') - .attr({ - zIndex: 1 - }).add(button); - - - symbol.attr({ - stroke: btnOptions.symbolStroke, - fill: btnOptions.symbolFill, - 'stroke-width': btnOptions.symbolStrokeWidth || 1 - }); - - } - - button.add() - .align(extend(btnOptions, { - width: button.width, - x: pick(btnOptions.x, chart.buttonOffset) // #1654 - }), true, 'spacingBox'); - - chart.buttonOffset += (button.width + btnOptions.buttonSpacing) * (btnOptions.align === 'right' ? -1 : 1); - - chart.exportSVGElements.push(button, symbol); - - }, - - /** - * Destroy the export buttons. - * - * @private - */ - destroyExport: function(e) { - var chart = e ? e.target : this, - exportSVGElements = chart.exportSVGElements, - exportDivElements = chart.exportDivElements, - exportEvents = chart.exportEvents, - cacheName; - - // Destroy the extra buttons added - if (exportSVGElements) { - each(exportSVGElements, function(elem, i) { - - // Destroy and null the svg elements - if (elem) { // #1822 - elem.onclick = elem.ontouchstart = null; - cacheName = 'cache-' + elem.menuClassName; - - if (chart[cacheName]) { - delete chart[cacheName]; - } - - chart.exportSVGElements[i] = elem.destroy(); - } - }); - exportSVGElements.length = 0; - } - - // Destroy the divs for the menu - if (exportDivElements) { - each(exportDivElements, function(elem, i) { - - // Remove the event handler - clearTimeout(elem.hideTimer); // #5427 - removeEvent(elem, 'mouseleave'); - - // Remove inline events - chart.exportDivElements[i] = elem.onmouseout = elem.onmouseover = elem.ontouchstart = elem.onclick = null; - - // Destroy the div by moving to garbage bin - discardElement(elem); - }); - exportDivElements.length = 0; - } - - if (exportEvents) { - each(exportEvents, function(unbind) { - unbind(); - }); - exportEvents.length = 0; - } - } - }); - - - - - symbols.menu = function(x, y, width, height) { - var arr = [ - 'M', x, y + 2.5, - 'L', x + width, y + 2.5, - 'M', x, y + height / 2 + 0.5, - 'L', x + width, y + height / 2 + 0.5, - 'M', x, y + height - 1.5, - 'L', x + width, y + height - 1.5 - ]; - return arr; - }; - - // Add the buttons on chart load - Chart.prototype.renderExporting = function() { - var chart = this, - exportingOptions = chart.options.exporting, - buttons = exportingOptions.buttons, - isDirty = chart.isDirtyExporting || !chart.exportSVGElements; - - chart.buttonOffset = 0; - if (chart.isDirtyExporting) { - chart.destroyExport(); - } - - if (isDirty && exportingOptions.enabled !== false) { - chart.exportEvents = []; - - objectEach(buttons, function(button) { - chart.addButton(button); - }); - - chart.isDirtyExporting = false; - } - - // Destroy the export elements at chart destroy - addEvent(chart, 'destroy', chart.destroyExport); - }; - - Chart.prototype.callbacks.push(function(chart) { - - function update(prop, options, redraw) { - chart.isDirtyExporting = true; - merge(true, chart.options[prop], options); - if (pick(redraw, true)) { - chart.redraw(); - } - - } - - chart.renderExporting(); - - addEvent(chart, 'redraw', chart.renderExporting); - - // Add update methods to handle chart.update and chart.exporting.update - // and chart.navigation.update. - each(['exporting', 'navigation'], function(prop) { - chart[prop] = { - update: function(options, redraw) { - update(prop, options, redraw); - } - }; - }); - - // Uncomment this to see a button directly below the chart, for quick - // testing of export - /* - if (!chart.renderer.forExport) { - var button; - - // View SVG Image - button = doc.createElement('button'); - button.innerHTML = 'View SVG Image'; - chart.renderTo.parentNode.appendChild(button); - button.onclick = function () { - var div = doc.createElement('div'); - div.innerHTML = chart.getSVGForExport(); - chart.renderTo.parentNode.appendChild(div); - }; - - // View SVG Source - button = doc.createElement('button'); - button.innerHTML = 'View SVG Source'; - chart.renderTo.parentNode.appendChild(button); - button.onclick = function () { - var pre = doc.createElement('pre'); - pre.innerHTML = chart.getSVGForExport() - .replace(//g, '>'); - chart.renderTo.parentNode.appendChild(pre); - }; - } - // */ - }); - - }(Highcharts)); -})); diff --git a/admin/js/angular-highcharts/heatmap.src.js b/admin/js/angular-highcharts/heatmap.src.js deleted file mode 100644 index 50df9a0c..00000000 --- a/admin/js/angular-highcharts/heatmap.src.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - Highcharts JS v4.2.5 (2016-05-06) - - (c) 2011-2016 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(d){typeof module==="object"&&module.exports?module.exports=d:d(Highcharts)})(function(d){var m=d.Axis,q=d.Chart,i=d.Color,x=d.Legend,s=d.LegendSymbolMixin,t=d.Series,y=d.Point,u=d.getOptions(),h=d.each,r=d.extend,v=d.extendClass,z=d.isNumber,j=d.merge,k=d.pick,o=d.seriesTypes,w=d.wrap,n=function(){},p=d.ColorAxis=function(){this.isColorAxis=!0;this.init.apply(this,arguments)};r(p.prototype,m.prototype);r(p.prototype,{defaultColorAxisOptions:{lineWidth:0,minPadding:0,maxPadding:0,gridLineWidth:1, -tickPixelInterval:72,startOnTick:!0,endOnTick:!0,offset:0,marker:{animation:{duration:50},color:"gray",width:0.01},labels:{overflow:"justify"},minColor:"#EFEFFF",maxColor:"#003875",tickLength:5},init:function(a,b){var c=a.options.legend.layout!=="vertical",f;f=j(this.defaultColorAxisOptions,{side:c?2:1,reversed:!c},b,{opposite:!c,showEmpty:!1,title:null,isColor:!0});m.prototype.init.call(this,a,f);b.dataClasses&&this.initDataClasses(b);this.initStops(b);this.horiz=c;this.zoomEnabled=!1},tweenColors:function(a, -b,c){var f;!b.rgba.length||!a.rgba.length?a=b.input||"none":(a=a.rgba,b=b.rgba,f=b[3]!==1||a[3]!==1,a=(f?"rgba(":"rgb(")+Math.round(b[0]+(a[0]-b[0])*(1-c))+","+Math.round(b[1]+(a[1]-b[1])*(1-c))+","+Math.round(b[2]+(a[2]-b[2])*(1-c))+(f?","+(b[3]+(a[3]-b[3])*(1-c)):"")+")");return a},initDataClasses:function(a){var b=this,c=this.chart,f,e=0,l=this.options,g=a.dataClasses.length;this.dataClasses=f=[];this.legendItems=[];h(a.dataClasses,function(a,d){var h,a=j(a);f.push(a);if(!a.color)l.dataClassColor=== -"category"?(h=c.options.colors,a.color=h[e++],e===h.length&&(e=0)):a.color=b.tweenColors(i(l.minColor),i(l.maxColor),g<2?0.5:d/(g-1))})},initStops:function(a){this.stops=a.stops||[[0,this.options.minColor],[1,this.options.maxColor]];h(this.stops,function(a){a.color=i(a[1])})},setOptions:function(a){m.prototype.setOptions.call(this,a);this.options.crosshair=this.options.marker;this.coll="colorAxis"},setAxisSize:function(){var a=this.legendSymbol,b=this.chart,c,f,e;if(a)this.left=c=a.attr("x"),this.top= -f=a.attr("y"),this.width=e=a.attr("width"),this.height=a=a.attr("height"),this.right=b.chartWidth-c-e,this.bottom=b.chartHeight-f-a,this.len=this.horiz?e:a,this.pos=this.horiz?c:f},toColor:function(a,b){var c,f=this.stops,e,l=this.dataClasses,g,d;if(l)for(d=l.length;d--;){if(g=l[d],e=g.from,f=g.to,(e===void 0||a>=e)&&(f===void 0||a<=f)){c=g.color;if(b)b.dataClass=d;break}}else{this.isLog&&(a=this.val2lin(a));c=1-(this.max-a)/(this.max-this.min||1);for(d=f.length;d--;)if(c>f[d][0])break;e=f[d]||f[d+ -1];f=f[d+1]||e;c=1-(f[0]-c)/(f[0]-e[0]||1);c=this.tweenColors(e.color,f.color,c)}return c},getOffset:function(){var a=this.legendGroup,b=this.chart.axisOffset[this.side];if(a){this.axisParent=a;m.prototype.getOffset.call(this);if(!this.added)this.added=!0,this.labelLeft=0,this.labelRight=this.width;this.chart.axisOffset[this.side]=b}},setLegendColor:function(){var a,b=this.options,c=this.reversed;a=c?1:0;c=c?0:1;a=this.horiz?[a,0,c,0]:[0,c,0,a];this.legendColor={linearGradient:{x1:a[0],y1:a[1],x2:a[2], -y2:a[3]},stops:b.stops||[[0,b.minColor],[1,b.maxColor]]}},drawLegendSymbol:function(a,b){var c=a.padding,f=a.options,e=this.horiz,d=k(f.symbolWidth,e?200:12),g=k(f.symbolHeight,e?12:200),h=k(f.labelPadding,e?16:30),f=k(f.itemDistance,10);this.setLegendColor();b.legendSymbol=this.chart.renderer.rect(0,a.baseline-11,d,g).attr({zIndex:1}).add(b.legendGroup);this.legendItemWidth=d+c+(e?f:h);this.legendItemHeight=g+c+(e?h:0)},setState:n,visible:!0,setVisible:n,getSeriesExtremes:function(){var a;if(this.series.length)a= -this.series[0],this.dataMin=a.valueMin,this.dataMax=a.valueMax},drawCrosshair:function(a,b){var c=b&&b.plotX,f=b&&b.plotY,e,d=this.pos,g=this.len;if(b)e=this.toPixels(b[b.series.colorKey]),ed+g&&(e=d+g+2),b.plotX=e,b.plotY=this.len-e,m.prototype.drawCrosshair.call(this,a,b),b.plotX=c,b.plotY=f,this.cross&&this.cross.attr({fill:this.crosshair.color}).add(this.legendGroup)},getPlotLinePath:function(a,b,c,f,e){return z(e)?this.horiz?["M",e-4,this.top-6,"L",e+4,this.top-6,e,this.top,"Z"]:["M", -this.left,e,"L",this.left-6,e+6,this.left-6,e-6,"Z"]:m.prototype.getPlotLinePath.call(this,a,b,c,f)},update:function(a,b){var c=this.chart,f=c.legend;h(this.series,function(a){a.isDirtyData=!0});if(a.dataClasses&&f.allItems)h(f.allItems,function(a){a.isDataClass&&a.legendGroup.destroy()}),c.isDirtyLegend=!0;c.options[this.coll]=j(this.userOptions,a);m.prototype.update.call(this,a,b);this.legendItem&&(this.setLegendColor(),f.colorizeItem(this,!0))},getDataClassLegendSymbols:function(){var a=this,b= -this.chart,c=this.legendItems,f=b.options.legend,e=f.valueDecimals,l=f.valueSuffix||"",g;c.length||h(this.dataClasses,function(f,m){var i=!0,j=f.from,k=f.to;g="";j===void 0?g="< ":k===void 0&&(g="> ");j!==void 0&&(g+=d.numberFormat(j,e)+l);j!==void 0&&k!==void 0&&(g+=" - ");k!==void 0&&(g+=d.numberFormat(k,e)+l);c.push(r({chart:b,name:g,options:{},drawLegendSymbol:s.drawRectangle,visible:!0,setState:n,isDataClass:!0,setVisible:function(){i=this.visible=!i;h(a.series,function(a){h(a.points,function(a){a.dataClass=== -m&&a.setVisible(i)})});b.legend.colorizeItem(this,i)}},f))});return c},name:""});h(["fill","stroke"],function(a){d.Fx.prototype[a+"Setter"]=function(){this.elem.attr(a,p.prototype.tweenColors(i(this.start),i(this.end),this.pos))}});w(q.prototype,"getAxes",function(a){var b=this.options.colorAxis;a.call(this);this.colorAxis=[];b&&new p(this,b)});w(x.prototype,"getAllItems",function(a){var b=[],c=this.chart.colorAxis[0];c&&(c.options.dataClasses?b=b.concat(c.getDataClassLegendSymbols()):b.push(c),h(c.series, -function(a){a.options.showInLegend=!1}));return b.concat(a.call(this))});q={pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color",dashstyle:"dashStyle"},pointArrayMap:["value"],axisTypes:["xAxis","yAxis","colorAxis"],optionalAxis:"colorAxis",trackerGroups:["group","markerGroup","dataLabelsGroup"],getSymbol:n,parallelArrays:["x","y","value"],colorKey:"value",translateColors:function(){var a=this,b=this.options.nullColor,c=this.colorAxis,f=this.colorKey;h(this.data,function(e){var d= -e[f];if(d=e.options.color||(d===null?b:c&&d!==void 0?c.toColor(d,e):e.color||a.color))e.color=d})}};u.plotOptions.heatmap=j(u.plotOptions.scatter,{animation:!1,borderWidth:0,nullColor:"#F8F8F8",dataLabels:{formatter:function(){return this.point.value},inside:!0,verticalAlign:"middle",crop:!1,overflow:!1,padding:0},marker:null,pointRange:null,tooltip:{pointFormat:"{point.x}, {point.y}: {point.value}
"},states:{normal:{animation:!0},hover:{halo:!1,brightness:0.2}}});o.heatmap=v(o.scatter,j(q,{type:"heatmap", -pointArrayMap:["y","value"],hasPointSpecificOptions:!0,pointClass:v(y,{setVisible:function(a){var b=this,c=a?"show":"hide";h(["graphic","dataLabel"],function(a){if(b[a])b[a][c]()})}}),supportsDrilldown:!0,getExtremesFromAll:!0,directTouch:!0,init:function(){var a;o.scatter.prototype.init.apply(this,arguments);a=this.options;a.pointRange=k(a.pointRange,a.colsize||1);this.yAxis.axisPointRange=a.rowsize||1},translate:function(){var a=this.options,b=this.xAxis,c=this.yAxis,f=function(a,b,c){return Math.min(Math.max(b, -a),c)};this.generatePoints();h(this.points,function(e){var d=(a.colsize||1)/2,g=(a.rowsize||1)/2,h=f(Math.round(b.len-b.translate(e.x-d,0,1,0,1)),-b.len,2*b.len),d=f(Math.round(b.len-b.translate(e.x+d,0,1,0,1)),-b.len,2*b.len),i=f(Math.round(c.translate(e.y-g,0,1,0,1)),-c.len,2*c.len),g=f(Math.round(c.translate(e.y+g,0,1,0,1)),-c.len,2*c.len);e.plotX=e.clientX=(h+d)/2;e.plotY=(i+g)/2;e.shapeType="rect";e.shapeArgs={x:Math.min(h,d),y:Math.min(i,g),width:Math.abs(d-h),height:Math.abs(g-i)}});this.translateColors(); -this.chart.hasRendered&&h(this.points,function(a){a.shapeArgs.fill=a.options.color||a.color})},drawPoints:o.column.prototype.drawPoints,animate:n,getBox:n,drawLegendSymbol:s.drawRectangle,alignDataLabel:o.column.prototype.alignDataLabel,getExtremes:function(){t.prototype.getExtremes.call(this,this.valueData);this.valueMin=this.dataMin;this.valueMax=this.dataMax;t.prototype.getExtremes.call(this)}}))}); \ No newline at end of file diff --git a/admin/js/angular-highcharts/highcharts-3d.js b/admin/js/angular-highcharts/highcharts-3d.js deleted file mode 100644 index 1f53f039..00000000 --- a/admin/js/angular-highcharts/highcharts-3d.js +++ /dev/null @@ -1,80 +0,0 @@ -/* - Highcharts JS v6.0.4 (2017-12-15) - - 3D features for Highcharts JS - - @license: www.highcharts.com/license -*/ -(function(C){"object"===typeof module&&module.exports?module.exports=C:C(Highcharts)})(function(C){(function(c){var q=c.deg2rad,u=c.pick;c.perspective=function(p,y,B){var v=y.options.chart.options3d,h=B?y.inverted:!1,z=y.plotWidth/2,t=y.plotHeight/2,A=v.depth/2,e=u(v.depth,1)*u(v.viewDistance,0),b=y.scale3d||1,f=q*v.beta*(h?-1:1),v=q*v.alpha*(h?-1:1),k=Math.cos(v),d=Math.cos(-f),a=Math.sin(v),m=Math.sin(-f);B||(z+=y.plotLeft,t+=y.plotTop);return c.map(p,function(c){var f,l;l=(h?c.y:c.x)-z;var r=(h? -c.x:c.y)-t,x=(c.z||0)-A;f=d*l-m*x;c=-a*m*l+k*r-d*a*x;l=k*m*l+a*r+k*d*x;r=0e&&f-e>Math.PI/2+.0001?(g=g.concat(q(b,d,a,c,e,e+Math.PI/2,l,m)),g=g.concat(q(b,d,a,c,e+Math.PI/2,f,l,m))):fMath.PI/2+.0001?(g=g.concat(q(b,d,a,c,e,e-Math.PI/2,l,m)),g=g.concat(q(b,d,a,c,e-Math.PI/2,f,l,m))):["C",b+a*Math.cos(e)-a*w*r*Math.sin(e)+l,d+c*Math.sin(e)+c*w*r*Math.cos(e)+m,b+a*Math.cos(f)+a*w*r*Math.sin(f)+l,d+c*Math.sin(f)- -c*w*r*Math.cos(f)+m,b+a*Math.cos(f)+l,d+c*Math.sin(f)+m]}var u=Math.cos,p=Math.PI,y=Math.sin,B=c.animObject,v=c.charts,h=c.color,z=c.defined,t=c.deg2rad,A=c.each,e=c.extend,b=c.inArray,f=c.map,k=c.merge,d=c.perspective,a=c.pick,m=c.SVGElement,l=c.SVGRenderer,n=c.wrap,w=4*(Math.sqrt(2)-1)/3/(p/2);l.prototype.toLinePath=function(b,d){var a=[];A(b,function(b){a.push("L",b.x,b.y)});b.length&&(a[0]="M",d&&a.push("Z"));return a};l.prototype.toLineSegments=function(b){var d=[],a=!0;A(b,function(b){d.push(a? -"M":"L",b.x,b.y);a=!a});return d};l.prototype.face3d=function(b){var e=this,g=this.createElement("path");g.vertexes=[];g.insidePlotArea=!1;g.enabled=!0;n(g,"attr",function(b,g){if("object"===typeof g&&(z(g.enabled)||z(g.vertexes)||z(g.insidePlotArea))){this.enabled=a(g.enabled,this.enabled);this.vertexes=a(g.vertexes,this.vertexes);this.insidePlotArea=a(g.insidePlotArea,this.insidePlotArea);delete g.enabled;delete g.vertexes;delete g.insidePlotArea;var f=d(this.vertexes,v[e.chartIndex],this.insidePlotArea), -l=e.toLinePath(f,!0),f=c.shapeArea(f),f=this.enabled&&0g.faces.length;)a.faces.pop().destroy(); -for(;a.faces.lengthg.faces.length;)a.faces.pop().destroy();for(;a.faces.lengthc.shapeArea(a)?g=[a,0]:0>c.shapeArea(d)&&(g=[d,1]);return g};n=t([3,2,1,0],[7,6,5,4]);a=n[0];k=n[1];n=t([1,6,7,0],[4,5,2,3]);m=n[0];r=n[1];n=t([1,2,5,6],[0,7,4,3]);t=n[0];n=n[1];1===n?h+=1E4*(1E3-g):n|| -(h+=1E4*g);h+=10*(!r||0<=w&&180>=w||360>w&&357.5Math.PI&&(a=2*Math.PI-a);return a}var d=a.x,e=a.y,c=a.start,f=a.end-.00001,l=a.r,m=a.innerR,k=a.depth,n=a.alpha,t=a.beta,A=Math.cos(c),w=Math.sin(c);a=Math.cos(f);var r=Math.sin(f),h=l*Math.cos(t),l=l*Math.cos(n),v=m*Math.cos(t),z=m*Math.cos(n),m=k*Math.sin(t),B=k*Math.sin(n),k=["M",d+h*A,e+l*w],k=k.concat(q(d,e,h,l,c,f,0,0)),k=k.concat(["L",d+v*a,e+z*r]),k=k.concat(q(d,e,v,z,f,c,0,0)),k=k.concat(["Z"]),C= -0-C?c:f>-C?-C:c,D=fE&&cp-t&&cm&&(x=Math.min(x,1-Math.abs((e+d)/(m+d))%1));bn&&(x=0>n?Math.min(x,(f+a)/(-n+f+a)):Math.min(x,1-(f+a)/(n+a)%1));ka?-1:0},l=m([{x:b,y:d,z:a},{x:f,y:d,z:a},{x:f,y:d,z:0},{x:b,y:d,z:0}]),n=m([{x:b,y:k,z:0},{x:f,y:k,z:0},{x:f,y:k,z:a},{x:b,y:k,z:a}]),w=m([{x:b,y:k,z:0},{x:b,y:k,z:a}, -{x:b,y:d,z:a},{x:b,y:d,z:0}]),r=m([{x:f,y:k,z:a},{x:f,y:k,z:0},{x:f,y:d,z:0},{x:f,y:d,z:a}]),x=m([{x:b,y:d,z:0},{x:f,y:d,z:0},{x:f,y:k,z:0},{x:b,y:k,z:0}]),m=m([{x:b,y:k,z:a},{x:f,y:k,z:a},{x:f,y:d,z:a},{x:b,y:d,z:a}]),g=!1,z=!1,y=!1,u=!1;p([].concat(h.xAxis,h.yAxis,h.zAxis),function(a){a&&(a.horiz?a.opposite?z=!0:g=!0:a.opposite?u=!0:y=!0)});var q=function(a,d,b){for(var e=["size","color","visible"],c={},f=0;fb*c[e][d]?e=f:b*c[f][d]===b*c[e][d]&&c[f].z< -c[e].z&&(e=f);return a[e]},e.axes={y:{left:b(A,"x",-1),right:b(A,"x",1)},x:{top:b(n,"y",-1),bottom:b(l,"y",1)},z:{top:b(d,"y",-1),bottom:b(w,"y",1)}}):e.axes={y:{left:{x:b,z:0,xDir:{x:1,y:0,z:0}},right:{x:f,z:0,xDir:{x:0,y:0,z:1}}},x:{top:{y:k,z:0,xDir:{x:1,y:0,z:0}},bottom:{y:d,z:0,xDir:{x:1,y:0,z:0}}},z:{top:{x:y?f:b,y:k,xDir:y?{x:0,y:0,z:1}:{x:0,y:0,z:-1}},bottom:{x:y?f:b,y:d,xDir:y?{x:0,y:0,z:1}:{x:0,y:0,z:-1}}}};return e};c.Fx.prototype.matrixSetter=function(){var h;if(1>this.pos&&(c.isArray(this.start)|| -c.isArray(this.end))){var A=this.start||[1,0,0,1,0,0],e=this.end||[1,0,0,1,0,0];h=[];for(var b=0;6>b;b++)h.push(this.pos*e[b]+(1-this.pos)*A[b])}else h=this.end;this.elem.attr(this.prop,h,null,!0)}})(C);(function(c){function q(d,a,b){if(!d.chart.is3d()||"colorAxis"===d.coll)return a;var c=d.chart,f=B*c.options.chart.options3d.alpha,m=B*c.options.chart.options3d.beta,h=A(b&&d.options.title.position3d,d.options.labels.position3d);b=A(b&&d.options.title.skew3d,d.options.labels.skew3d);var k=c.frame3d, -g=c.plotLeft,v=c.plotWidth+g,p=c.plotTop,y=c.plotHeight+p,c=!1,z=0,u=0,q={x:0,y:1,z:0};a=d.swapZ({x:a.x,y:a.y,z:0});if(d.isZAxis)if(d.opposite){if(null===k.axes.z.top)return{};u=a.y-p;a.x=k.axes.z.top.x;a.y=k.axes.z.top.y;g=k.axes.z.top.xDir;c=!k.top.frontFacing}else{if(null===k.axes.z.bottom)return{};u=a.y-y;a.x=k.axes.z.bottom.x;a.y=k.axes.z.bottom.y;g=k.axes.z.bottom.xDir;c=!k.bottom.frontFacing}else if(d.horiz)if(d.opposite){if(null===k.axes.x.top)return{};u=a.y-p;a.y=k.axes.x.top.y;a.z=k.axes.x.top.z; -g=k.axes.x.top.xDir;c=!k.top.frontFacing}else{if(null===k.axes.x.bottom)return{};u=a.y-y;a.y=k.axes.x.bottom.y;a.z=k.axes.x.bottom.z;g=k.axes.x.bottom.xDir;c=!k.bottom.frontFacing}else if(d.opposite){if(null===k.axes.y.right)return{};z=a.x-v;a.x=k.axes.y.right.x;a.z=k.axes.y.right.z;g=k.axes.y.right.xDir;g={x:g.z,y:g.y,z:-g.x}}else{if(null===k.axes.y.left)return{};z=a.x-g;a.x=k.axes.y.left.x;a.z=k.axes.y.left.z;g=k.axes.y.left.xDir}"chart"!==h&&("flap"===h?d.horiz?(m=Math.sin(f),f=Math.cos(f),d.opposite&& -(m=-m),c&&(m=-m),q={x:g.z*m,y:f,z:-g.x*m}):g={x:Math.cos(m),y:0,z:Math.sin(m)}:"ortho"===h?d.horiz?(q=Math.cos(f),h=Math.sin(m)*q,f=-Math.sin(f),m=-q*Math.cos(m),q={x:g.y*m-g.z*f,y:g.z*h-g.x*m,z:g.x*f-g.y*h},f=1/Math.sqrt(q.x*q.x+q.y*q.y+q.z*q.z),c&&(f=-f),q={x:f*q.x,y:f*q.y,z:f*q.z}):g={x:Math.cos(m),y:0,z:Math.sin(m)}:d.horiz?q={x:Math.sin(m)*Math.sin(f),y:Math.cos(f),z:-Math.cos(m)*Math.sin(f)}:g={x:Math.cos(m),y:0,z:Math.sin(m)});a.x+=z*g.x+u*q.x;a.y+=z*g.y+u*q.y;a.z+=z*g.z+u*q.z;c=t([a],d.chart)[0]; -b?(0>e(t([a,{x:a.x+g.x,y:a.y+g.y,z:a.z+g.z},{x:a.x+q.x,y:a.y+q.y,z:a.z+q.z}],d.chart))&&(g={x:-g.x,y:-g.y,z:-g.z}),d=t([{x:a.x,y:a.y,z:a.z},{x:a.x+g.x,y:a.y+g.y,z:a.z+g.z},{x:a.x+q.x,y:a.y+q.y,z:a.z+q.z}],d.chart),c.matrix=[d[1].x-d[0].x,d[1].y-d[0].y,d[2].x-d[0].x,d[2].y-d[0].y,c.x,c.y],c.matrix[4]-=c.x*c.matrix[0]+c.y*c.matrix[2],c.matrix[5]-=c.x*c.matrix[1]+c.y*c.matrix[3]):c.matrix=null;return c}var u,p=c.Axis,y=c.Chart,B=c.deg2rad,v=c.each,h=c.extend,z=c.merge,t=c.perspective,A=c.pick,e=c.shapeArea, -b=c.splat,f=c.Tick,k=c.wrap;z(!0,p.prototype.defaultOptions,{labels:{position3d:"offset",skew3d:!1},title:{position3d:null,skew3d:null}});k(p.prototype,"setOptions",function(d,a){d.call(this,a);this.chart.is3d&&this.chart.is3d()&&"colorAxis"!==this.coll&&(d=this.options,d.tickWidth=A(d.tickWidth,0),d.gridLineWidth=A(d.gridLineWidth,1))});k(p.prototype,"getPlotLinePath",function(d){var a=d.apply(this,[].slice.call(arguments,1));if(!this.chart.is3d()||"colorAxis"===this.coll||null===a)return a;var b= -this.chart,c=b.options.chart.options3d,c=this.isZAxis?b.plotWidth:c.depth,b=b.frame3d,a=[this.swapZ({x:a[1],y:a[2],z:0}),this.swapZ({x:a[1],y:a[2],z:c}),this.swapZ({x:a[4],y:a[5],z:0}),this.swapZ({x:a[4],y:a[5],z:c})],c=[];this.horiz?(this.isZAxis?(b.left.visible&&c.push(a[0],a[2]),b.right.visible&&c.push(a[1],a[3])):(b.front.visible&&c.push(a[0],a[2]),b.back.visible&&c.push(a[1],a[3])),b.top.visible&&c.push(a[0],a[1]),b.bottom.visible&&c.push(a[2],a[3])):(b.front.visible&&c.push(a[0],a[2]),b.back.visible&& -c.push(a[1],a[3]),b.left.visible&&c.push(a[0],a[1]),b.right.visible&&c.push(a[2],a[3]));c=t(c,this.chart,!1);return this.chart.renderer.toLineSegments(c)});k(p.prototype,"getLinePath",function(b){return this.chart.is3d()&&"colorAxis"!==this.coll?[]:b.apply(this,[].slice.call(arguments,1))});k(p.prototype,"getPlotBandPath",function(b){if(!this.chart.is3d()||"colorAxis"===this.coll)return b.apply(this,[].slice.call(arguments,1));var a=arguments,d=a[2],c=[],a=this.getPlotLinePath(a[1]),d=this.getPlotLinePath(d); -if(a&&d)for(var e=0;e=p.min&&z<=p.max:!1):h.plotZ= -0,v.push({x:u(h.plotXold,h.plotX),y:u(h.plotYold,h.plotY),z:u(h.plotZold,h.plotZ)});c=q(v,c,!0);for(t=0;tn&&(b[a[1]]+=b[a[0]]+d,b[a[0]]=-d,n=0);n+b[a[1]]>c[a[0]+"Axis"].len&&0!==b[a[1]]&&(b[a[1]]=c[a[0]+"Axis"].len-b[a[0]]);if(0!==b[a[1]]&&(b[a[0]]>=c[a[0]+"Axis"].len||b[a[0]]+b[a[1]]<=d))for(var e in b)b[e]=0});a.shapeType="cuboid";b.z=k;b.depth=f;b.insidePlotArea=!0;h=p([{x:h[0],y:h[1],z:k}],e,!0)[0];a.tooltipPos=[h.x,h.y]}});c.z=k};t(v.column.prototype,"animate",function(c){if(this.chart.is3d()){var e= -arguments[1],b=this.yAxis,f=this,k=this.yAxis.reversed;z&&(e?u(f.data,function(c){null!==c.y&&(c.height=c.shapeArgs.height,c.shapey=c.shapeArgs.y,c.shapeArgs.height=1,k||(c.shapeArgs.y=c.stackY?c.plotY+b.translate(c.stackY):c.plotY+(c.negative?-c.height:c.height)))}):(u(f.data,function(b){null!==b.y&&(b.shapeArgs.height=b.height,b.shapeArgs.y=b.shapey,b.graphic&&b.graphic.animate(b.shapeArgs,f.options.animation))}),this.drawDataLabels(),f.animate=null))}else c.apply(this,[].slice.call(arguments,1))}); -t(v.column.prototype,"plotGroup",function(c,e,b,f,k,d){this.chart.is3d()&&d&&!this[e]&&(this.chart.columnGroup||(this.chart.columnGroup=this.chart.renderer.g("columnGroup").add(d)),this[e]=this.chart.columnGroup,this.chart.columnGroup.attr(this.getPlotBox()),this[e].survive=!0);return c.apply(this,Array.prototype.slice.call(arguments,1))});t(v.column.prototype,"setVisible",function(c,e){var b=this,f;b.chart.is3d()&&u(b.data,function(c){f=(c.visible=c.options.visible=e=void 0===e?!c.visible:e)?"visible": -"hidden";b.options.data[h(c,b.data)]=c.options;c.graphic&&c.graphic.attr({visibility:f})});c.apply(this,Array.prototype.slice.call(arguments,1))});t(v.column.prototype,"init",function(c){c.apply(this,[].slice.call(arguments,1));if(this.chart.is3d()){var e=this.options,b=e.grouping,f=e.stacking,h=y(this.yAxis.options.reversedStacks,!0),d=0;if(void 0===b||b){b=this.chart.retrieveStacks(f);d=e.stack||0;for(f=0;fu||e===C?t:t+(r-t)*(1-(k-a)/(e-C))};this.getX=function(k,a){return i+(a?-1:1)*(s(f?h-k:k)/2+ -c.dataLabels.distance)};this.center=[i,x,e];this.centerX=i;B(a,function(a){if(!g||a.visible!==!1)b+=a.y});B(a,function(a){n=null;z=b?a.y/b:0;m=x-e/2+q*e;j=m+z*e;l=s(m);A=i-l/2;D=A+l;l=s(j);p=i-l/2;v=p+l;m>u?(A=p=i-t/2,D=v=i+t/2):j>u&&(n=j,l=s(u),p=i-l/2,v=p+l,j=u);f&&(m=e-m,j=e-j,n=n?e-n:null);y=["M",A,m,"L",D,m,v,j];n&&y.push(v,n,p,n);y.push(p,j,"Z");a.shapeType="path";a.shapeArgs={d:y};a.percentage=z*100;a.plotX=i;a.plotY=(m+(n||j))/2;a.tooltipPos=[i,a.plotY];a.slice=E;a.half=w;if(!g||a.visible!== -!1)q+=z})},drawPoints:function(){var a=this,b=a.chart.renderer,d,c,f;B(a.data,function(g){f=g.graphic;c=g.shapeArgs;d=g.pointAttr[g.selected?"select":""];f?f.attr(d).animate(c):g.graphic=b.path(c).attr(d).add(a.group)})},sortByAngle:function(a){a.sort(function(a,b){return a.plotY-b.plotY})},drawDataLabels:function(){var a=this.data,b=this.options.dataLabels.distance,d,c,f,g=a.length,o,h;for(this.center[2]-=2*b;g--;)f=a[g],c=(d=f.half)?1:-1,h=f.plotY,o=this.getX(h,d),f.labelPos=[0,h,o+(b-5)*c,h,o+ -b*c,h,d?"right":"left",0];r.pie.prototype.drawDataLabels.call(this)}});q.plotOptions.pyramid=b.merge(q.plotOptions.funnel,{neckWidth:"0%",neckHeight:"0%",reversed:!0});b.seriesTypes.pyramid=b.extendClass(b.seriesTypes.funnel,{type:"pyramid"})}); \ No newline at end of file diff --git a/admin/js/angular-highcharts/highcharts-more.js b/admin/js/angular-highcharts/highcharts-more.js deleted file mode 100644 index 9d8102e4..00000000 --- a/admin/js/angular-highcharts/highcharts-more.js +++ /dev/null @@ -1,68 +0,0 @@ -/* - Highcharts JS v6.0.4 (2017-12-15) - - (c) 2009-2016 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(x){"object"===typeof module&&module.exports?module.exports=x:x(Highcharts)})(function(x){(function(a){var t=a.deg2rad,v=a.isNumber,w=a.pick,n=a.relativeLength;a.CenteredSeriesMixin={getCenter:function(){var a=this.options,e=this.chart,k=2*(a.slicedOffset||0),b=e.plotWidth-2*k,e=e.plotHeight-2*k,c=a.center,c=[w(c[0],"50%"),w(c[1],"50%"),a.size||"100%",a.innerSize||0],l=Math.min(b,e),g,d;for(g=0;4>g;++g)d=c[g],a=2>g||2===g&&/%$/.test(d),c[g]=n(d,[b,e,l,c[2]][g])+(a?k:0);c[3]>c[2]&&(c[3]=c[2]); -return c},getStartAndEndRadians:function(a,e){a=v(a)?a:0;e=v(e)&&e>a&&360>e-a?e:a+360;return{start:t*(a+-90),end:t*(e+-90)}}}})(x);(function(a){function t(a,b){this.init(a,b)}var v=a.CenteredSeriesMixin,w=a.each,n=a.extend,m=a.merge,e=a.splat;n(t.prototype,{coll:"pane",init:function(a,b){this.chart=b;this.background=[];b.pane.push(this);this.setOptions(a)},setOptions:function(a){this.options=m(this.defaultOptions,this.chart.angular?{background:{}}:void 0,a)},render:function(){var a=this.options,b= -this.options.background,c=this.chart.renderer;this.group||(this.group=c.g("pane-group").attr({zIndex:a.zIndex||0}).add());this.updateCenter();if(b)for(b=e(b),a=Math.max(b.length,this.background.length||0),c=0;cd.len*d.tickInterval/(d.max-d.min)&&(h=0),p=q>h&&q<180-h?"left":q>180+h&&q<360-h?"right":"center"):p="center",l.attr({align:p})), -b.x+=r.x,b.y+=f):b=b.call(this,c,a,l,g,r,y,m,u);return b});b(a,"getMarkPath",function(b,c,a,l,g,r,e){var d=this.axis;d.isRadial?(b=d.getPosition(this.pos,d.center[2]/2+l),c=["M",c,a,"L",b.x,b.y]):c=b.call(this,c,a,l,g,r,e);return c})})(x);(function(a){var t=a.each,v=a.pick,w=a.defined,n=a.seriesType,m=a.seriesTypes,e=a.Series.prototype,k=a.Point.prototype;n("arearange","area",{lineWidth:1,threshold:null,tooltip:{pointFormat:'\x3cspan style\x3d"color:{series.color}"\x3e\u25cf\x3c/span\x3e {series.name}: \x3cb\x3e{point.low}\x3c/b\x3e - \x3cb\x3e{point.high}\x3c/b\x3e\x3cbr/\x3e'}, -trackByArea:!0,dataLabels:{align:null,verticalAlign:null,xLow:0,xHigh:0,yLow:0,yHigh:0}},{pointArrayMap:["low","high"],dataLabelCollections:["dataLabel","dataLabelUpper"],toYData:function(b){return[b.low,b.high]},pointValKey:"low",deferTranslatePolar:!0,highToXY:function(b){var c=this.chart,a=this.xAxis.postTranslate(b.rectPlotX,this.yAxis.len-b.plotHigh);b.plotHighX=a.x-c.plotLeft;b.plotHigh=a.y-c.plotTop;b.plotLowX=b.plotX},translate:function(){var b=this,c=b.yAxis,a=!!b.modifyValue;m.area.prototype.translate.apply(b); -t(b.points,function(l){var d=l.low,f=l.high,h=l.plotY;null===f||null===d?(l.isNull=!0,l.plotY=null):(l.plotLow=h,l.plotHigh=c.translate(a?b.modifyValue(f,l):f,0,1,0,1),a&&(l.yBottom=l.plotHigh))});this.chart.polar&&t(this.points,function(c){b.highToXY(c);c.tooltipPos=[(c.plotHighX+c.plotLowX)/2,(c.plotHigh+c.plotLow)/2]})},getGraphPath:function(b){var c=[],a=[],g,d=m.area.prototype.getGraphPath,f,h,q;q=this.options;var p=this.chart.polar&&!1!==q.connectEnds,r=q.connectNulls,e=q.step;b=b||this.points; -for(g=b.length;g--;)f=b[g],f.isNull||p||r||b[g+1]&&!b[g+1].isNull||a.push({plotX:f.plotX,plotY:f.plotY,doCurve:!1}),h={polarPlotY:f.polarPlotY,rectPlotX:f.rectPlotX,yBottom:f.yBottom,plotX:v(f.plotHighX,f.plotX),plotY:f.plotHigh,isNull:f.isNull},a.push(h),c.push(h),f.isNull||p||r||b[g-1]&&!b[g-1].isNull||a.push({plotX:f.plotX,plotY:f.plotY,doCurve:!1});b=d.call(this,b);e&&(!0===e&&(e="left"),q.step={left:"right",center:"center",right:"left"}[e]);c=d.call(this,c);a=d.call(this,a);q.step=e;q=[].concat(b, -c);this.chart.polar||"M"!==a[0]||(a[0]="L");this.graphPath=q;this.areaPath=b.concat(a);q.isArea=!0;q.xMap=b.xMap;this.areaPath.xMap=b.xMap;return q},drawDataLabels:function(){var b=this.data,c=b.length,a,g=[],d=this.options.dataLabels,f=d.align,h=d.verticalAlign,q=d.inside,p,r,y=this.chart.inverted;if(d.enabled||this._hasPointLabels){for(a=c;a--;)if(p=b[a])r=q?p.plotHighp.plotLow,p.y=p.high,p._plotY=p.plotY,p.plotY=p.plotHigh,g[a]=p.dataLabel,p.dataLabel=p.dataLabelUpper,p.below= -r,y?f||(d.align=r?"right":"left"):h||(d.verticalAlign=r?"top":"bottom"),d.x=d.xHigh,d.y=d.yHigh;e.drawDataLabels&&e.drawDataLabels.apply(this,arguments);for(a=c;a--;)if(p=b[a])r=q?p.plotHighp.plotLow,p.dataLabelUpper=p.dataLabel,p.dataLabel=g[a],p.y=p.low,p.plotY=p._plotY,p.below=!r,y?f||(d.align=r?"left":"right"):h||(d.verticalAlign=r?"bottom":"top"),d.x=d.xLow,d.y=d.yLow;e.drawDataLabels&&e.drawDataLabels.apply(this,arguments)}d.align=f;d.verticalAlign=h},alignDataLabel:function(){m.column.prototype.alignDataLabel.apply(this, -arguments)},drawPoints:function(){var b=this.points.length,c,a;e.drawPoints.apply(this,arguments);for(a=0;au&&(u*=-1,k-=u);h?(d=l.barX+g,l.shapeType="path",l.shapeArgs={d:b.polarArc(k+u,k,d,d+l.pointWidth)}):(r.height=u,r.y=k,l.tooltipPos=f.inverted?[c.len+c.pos-f.plotLeft-k-u/ -2,a.len+a.pos-f.plotTop-r.x-r.width/2,u]:[a.left-f.plotLeft+r.x+r.width/2,c.pos-f.plotTop+k+u/2,u])})},directTouch:!0,trackerGroups:["group","dataLabelsGroup"],drawGraph:n,getSymbol:n,crispCol:k.crispCol,drawPoints:k.drawPoints,drawTracker:k.drawTracker,getColumnMetrics:k.getColumnMetrics,pointAttribs:k.pointAttribs,animate:function(){return k.animate.apply(this,arguments)},polarArc:function(){return k.polarArc.apply(this,arguments)},translate3dPoints:function(){return k.translate3dPoints.apply(this, -arguments)},translate3dShapes:function(){return k.translate3dShapes.apply(this,arguments)}},{setState:k.pointClass.prototype.setState})})(x);(function(a){var t=a.each,v=a.isNumber,w=a.merge,n=a.pick,m=a.pInt,e=a.Series,k=a.seriesType,b=a.TrackerMixin;k("gauge","line",{dataLabels:{enabled:!0,defer:!1,y:15,borderRadius:3,crop:!1,verticalAlign:"top",zIndex:2,borderWidth:1,borderColor:"#cccccc"},dial:{},pivot:{},tooltip:{headerFormat:""},showInLegend:!1},{angular:!0,directTouch:!0,drawGraph:a.noop,fixedBox:!0, -forceDL:!0,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],translate:function(){var b=this.yAxis,a=this.options,g=b.center;this.generatePoints();t(this.points,function(c){var d=w(a.dial,c.dial),l=m(n(d.radius,80))*g[2]/200,q=m(n(d.baseLength,70))*l/100,p=m(n(d.rearLength,10))*l/100,r=d.baseWidth||3,e=d.topWidth||1,k=a.overshoot,u=b.startAngleRad+b.translate(c.y,null,null,null,!0);v(k)?(k=k/180*Math.PI,u=Math.max(b.startAngleRad-k,Math.min(b.endAngleRad+k,u))):!1===a.wrap&&(u=Math.max(b.startAngleRad, -Math.min(b.endAngleRad,u)));u=180*u/Math.PI;c.shapeType="path";c.shapeArgs={d:d.path||["M",-p,-r/2,"L",q,-r/2,l,-e/2,l,e/2,q,r/2,-p,r/2,"z"],translateX:g[0],translateY:g[1],rotation:u};c.plotX=g[0];c.plotY=g[1]})},drawPoints:function(){var b=this,a=b.yAxis.center,g=b.pivot,d=b.options,f=d.pivot,h=b.chart.renderer;t(b.points,function(c){var a=c.graphic,f=c.shapeArgs,l=f.d,g=w(d.dial,c.dial);a?(a.animate(f),f.d=l):(c.graphic=h[c.shapeType](f).attr({rotation:f.rotation,zIndex:1}).addClass("highcharts-dial").add(b.group), -c.graphic.attr({stroke:g.borderColor||"none","stroke-width":g.borderWidth||0,fill:g.backgroundColor||"#000000"}))});g?g.animate({translateX:a[0],translateY:a[1]}):(b.pivot=h.circle(0,0,n(f.radius,5)).attr({zIndex:2}).addClass("highcharts-pivot").translate(a[0],a[1]).add(b.group),b.pivot.attr({"stroke-width":f.borderWidth||0,stroke:f.borderColor||"#cccccc",fill:f.backgroundColor||"#000000"}))},animate:function(b){var c=this;b||(t(c.points,function(b){var a=b.graphic;a&&(a.attr({rotation:180*c.yAxis.startAngleRad/ -Math.PI}),a.animate({rotation:b.shapeArgs.rotation},c.options.animation))}),c.animate=null)},render:function(){this.group=this.plotGroup("group","series",this.visible?"visible":"hidden",this.options.zIndex,this.chart.seriesGroup);e.prototype.render.call(this);this.group.clip(this.chart.clipRect)},setData:function(b,a){e.prototype.setData.call(this,b,!1);this.processData();this.generatePoints();n(a,!0)&&this.chart.redraw()},drawTracker:b&&b.drawTrackerPoint},{setState:function(b){this.state=b}})})(x); -(function(a){var t=a.each,v=a.noop,w=a.pick,n=a.seriesType,m=a.seriesTypes;n("boxplot","column",{threshold:null,tooltip:{pointFormat:'\x3cspan style\x3d"color:{point.color}"\x3e\u25cf\x3c/span\x3e \x3cb\x3e {series.name}\x3c/b\x3e\x3cbr/\x3eMaximum: {point.high}\x3cbr/\x3eUpper quartile: {point.q3}\x3cbr/\x3eMedian: {point.median}\x3cbr/\x3eLower quartile: {point.q1}\x3cbr/\x3eMinimum: {point.low}\x3cbr/\x3e'},whiskerLength:"50%",fillColor:"#ffffff",lineWidth:1,medianWidth:2,states:{hover:{brightness:-.3}}, -whiskerWidth:2},{pointArrayMap:["low","q1","median","q3","high"],toYData:function(a){return[a.low,a.q1,a.median,a.q3,a.high]},pointValKey:"high",pointAttribs:function(a){var e=this.options,b=a&&a.color||this.color;return{fill:a.fillColor||e.fillColor||b,stroke:e.lineColor||b,"stroke-width":e.lineWidth||0}},drawDataLabels:v,translate:function(){var a=this.yAxis,k=this.pointArrayMap;m.column.prototype.translate.apply(this);t(this.points,function(b){t(k,function(c){null!==b[c]&&(b[c+"Plot"]=a.translate(b[c], -0,1,0,1))})})},drawPoints:function(){var a=this,k=a.options,b=a.chart.renderer,c,l,g,d,f,h,q=0,p,r,m,n,u=!1!==a.doQuartiles,v,A=a.options.whiskerLength;t(a.points,function(e){var y=e.graphic,t=y?"animate":"attr",J=e.shapeArgs,x={},C={},H={},I=e.color||a.color;void 0!==e.plotY&&(p=J.width,r=Math.floor(J.x),m=r+p,n=Math.round(p/2),c=Math.floor(u?e.q1Plot:e.lowPlot),l=Math.floor(u?e.q3Plot:e.lowPlot),g=Math.floor(e.highPlot),d=Math.floor(e.lowPlot),y||(e.graphic=y=b.g("point").add(a.group),e.stem=b.path().addClass("highcharts-boxplot-stem").add(y), -A&&(e.whiskers=b.path().addClass("highcharts-boxplot-whisker").add(y)),u&&(e.box=b.path(void 0).addClass("highcharts-boxplot-box").add(y)),e.medianShape=b.path(void 0).addClass("highcharts-boxplot-median").add(y)),x.stroke=e.stemColor||k.stemColor||I,x["stroke-width"]=w(e.stemWidth,k.stemWidth,k.lineWidth),x.dashstyle=e.stemDashStyle||k.stemDashStyle,e.stem.attr(x),A&&(C.stroke=e.whiskerColor||k.whiskerColor||I,C["stroke-width"]=w(e.whiskerWidth,k.whiskerWidth,k.lineWidth),e.whiskers.attr(C)),u&& -(y=a.pointAttribs(e),e.box.attr(y)),H.stroke=e.medianColor||k.medianColor||I,H["stroke-width"]=w(e.medianWidth,k.medianWidth,k.lineWidth),e.medianShape.attr(H),h=e.stem.strokeWidth()%2/2,q=r+n+h,e.stem[t]({d:["M",q,l,"L",q,g,"M",q,c,"L",q,d]}),u&&(h=e.box.strokeWidth()%2/2,c=Math.floor(c)+h,l=Math.floor(l)+h,r+=h,m+=h,e.box[t]({d:["M",r,l,"L",r,c,"L",m,c,"L",m,l,"L",r,l,"z"]})),A&&(h=e.whiskers.strokeWidth()%2/2,g+=h,d+=h,v=/%$/.test(A)?n*parseFloat(A)/100:A/2,e.whiskers[t]({d:["M",q-v,g,"L",q+v, -g,"M",q-v,d,"L",q+v,d]})),f=Math.round(e.medianPlot),h=e.medianShape.strokeWidth()%2/2,f+=h,e.medianShape[t]({d:["M",r,f,"L",m,f]}))})},setStackedPoints:v})})(x);(function(a){var t=a.each,v=a.noop,w=a.seriesType,n=a.seriesTypes;w("errorbar","boxplot",{color:"#000000",grouping:!1,linkedTo:":previous",tooltip:{pointFormat:'\x3cspan style\x3d"color:{point.color}"\x3e\u25cf\x3c/span\x3e {series.name}: \x3cb\x3e{point.low}\x3c/b\x3e - \x3cb\x3e{point.high}\x3c/b\x3e\x3cbr/\x3e'},whiskerWidth:null},{type:"errorbar", -pointArrayMap:["low","high"],toYData:function(a){return[a.low,a.high]},pointValKey:"high",doQuartiles:!1,drawDataLabels:n.arearange?function(){var a=this.pointValKey;n.arearange.prototype.drawDataLabels.call(this);t(this.data,function(e){e.y=e[a]})}:v,getColumnMetrics:function(){return this.linkedParent&&this.linkedParent.columnMetrics||n.column.prototype.getColumnMetrics.call(this)}})})(x);(function(a){var t=a.correctFloat,v=a.isNumber,w=a.pick,n=a.Point,m=a.Series,e=a.seriesType,k=a.seriesTypes; -e("waterfall","column",{dataLabels:{inside:!0},lineWidth:1,lineColor:"#333333",dashStyle:"dot",borderColor:"#333333",states:{hover:{lineWidthPlus:0}}},{pointValKey:"y",translate:function(){var b=this.options,c=this.yAxis,a,g,d,f,h,e,p,r,m,n,u=w(b.minPointLength,5),v=u/2,x=b.threshold,D=b.stacking,z;k.column.prototype.translate.apply(this);r=m=x;g=this.points;a=0;for(b=g.length;af.height&&(f.y+=f.height, -f.height*=-1),d.plotY=f.y=Math.round(f.y)-this.borderWidth%2/2,f.height=Math.max(Math.round(f.height),.001),d.yBottom=f.y+f.height,f.height<=u&&!d.isNull?(f.height=u,f.y-=v,d.plotY=f.y,d.minPointLengthOffset=0>d.y?-v:v):d.minPointLengthOffset=0,f=d.plotY+(d.negative?f.height:0),this.chart.inverted?d.tooltipPos[0]=c.len-f:d.tooltipPos[1]=f},processData:function(b){var c=this.yData,a=this.options.data,e,d=c.length,f,h,q,p,r,k;h=f=q=p=this.options.threshold||0;for(k=0;kb[q-1].y&&!g||0=this.minPxSize/2?(d.marker=a.extend(d.marker,{radius:g,width:2*g,height:2*g}),d.dlBox={x:d.plotX-g,y:d.plotY-g,width:2*g,height:2*g}):d.shapeArgs=d.plotY=d.dlBox=void 0},alignDataLabel:f.column.prototype.alignDataLabel,buildKDTree:k,applyZones:k},{haloPath:function(b){return l.prototype.haloPath.call(this, -0===b?0:(this.marker?this.marker.radius||0:0)+b)},ttBelow:!1});w.prototype.beforePadding=function(){var a=this,d=this.len,f=this.chart,g=0,l=d,k=this.isXAxis,n=k?"xData":"yData",w=this.min,x={},D=Math.min(f.plotWidth,f.plotHeight),z=Number.MAX_VALUE,E=-Number.MAX_VALUE,F=this.max-w,B=d/F,G=[];m(this.series,function(d){var e=d.options;!d.bubblePadding||!d.visible&&f.options.chart.ignoreHiddenSeries||(a.allowZoomOutside=!0,G.push(d),k&&(m(["minSize","maxSize"],function(b){var a=e[b],d=/%$/.test(a), -a=c(a);x[b]=d?D*a/100:a}),d.minPxSize=x.minSize,d.maxPxSize=Math.max(x.maxSize,x.minSize),d=d.zData,d.length&&(z=b(e.zMin,Math.min(z,Math.max(v(d),!1===e.displayNegative?e.zThreshold:-Number.MAX_VALUE))),E=b(e.zMax,Math.max(E,t(d))))))});m(G,function(b){var c=b[n],d=c.length,f;k&&b.getRadii(z,E,b.minPxSize,b.maxPxSize);if(0a?b.length-1+a:0;a=0>c-1?b.length-(1+f):c-1;f=c+1>b.length-1?f:c+1;h=b[a];f=b[f];l=h.plotX;h=h.plotY;k=f.plotX;m=f.plotY;f=b[c].plotX; -c=b[c].plotY;l=(1.5*f+l)/2.5;h=(1.5*c+h)/2.5;k=(1.5*f+k)/2.5;n=(1.5*c+m)/2.5;m=Math.sqrt(Math.pow(l-f,2)+Math.pow(h-c,2));t=Math.sqrt(Math.pow(k-f,2)+Math.pow(n-c,2));l=Math.atan2(h-c,l-f);n=Math.PI/2+(l+Math.atan2(n-c,k-f))/2;Math.abs(l-n)>Math.PI/2&&(n-=Math.PI);l=f+Math.cos(n)*m;h=c+Math.sin(n)*m;k=f+Math.cos(Math.PI+n)*t;n=c+Math.sin(Math.PI+n)*t;f={rightContX:k,rightContY:n,leftContX:l,leftContY:h,plotX:f,plotY:c};e&&(f.prevPointCont=this.getConnectors(b,a,!1,g));return f};m(e,"buildKDTree", -function(b){this.chart.polar&&(this.kdByAngle?this.searchPoint=this.searchPointByAngle:this.options.findNearestPointBy="xy");b.apply(this)});e.toXY=function(b){var a,e=this.chart,g=b.plotX;a=b.plotY;b.rectPlotX=g;b.rectPlotY=a;a=this.xAxis.postTranslate(b.plotX,this.yAxis.len-a);b.plotX=b.polarPlotX=a.x-e.plotLeft;b.plotY=b.polarPlotY=a.y-e.plotTop;this.kdByAngle?(e=(g/Math.PI*180+this.xAxis.pane.options.startAngle)%360,0>e&&(e+=360),b.clientX=e):b.clientX=b.plotX};n.spline&&(m(n.spline.prototype, -"getPointSpline",function(b,a,e,g){this.chart.polar?g?(b=this.getConnectors(a,g,!0,this.connectEnds),b=["C",b.prevPointCont.rightContX,b.prevPointCont.rightContY,b.leftContX,b.leftContY,b.plotX,b.plotY]):b=["M",e.plotX,e.plotY]:b=b.call(this,a,e,g);return b}),n.areasplinerange&&(n.areasplinerange.prototype.getPointSpline=n.spline.prototype.getPointSpline));m(e,"translate",function(b){var a=this.chart;b.call(this);if(a.polar&&(this.kdByAngle=a.tooltip&&a.tooltip.shared,!this.preventPostTranslate))for(b= -this.points,a=b.length;a--;)this.toXY(b[a])});m(e,"getGraphPath",function(b,a){var c=this,e,d,f;if(this.chart.polar){a=a||this.points;for(e=0;ea.center[1]}),m(n,"alignDataLabel",function(a,c,l,g,d,f){this.chart.polar? -(a=c.rectPlotX/Math.PI*180,null===g.align&&(g.align=20a?"left":200a?"right":"center"),null===g.verticalAlign&&(g.verticalAlign=45>a||315a?"top":"middle"),e.alignDataLabel.call(this,c,l,g,d,f)):a.call(this,c,l,g,d,f)}));m(k,"getCoordinates",function(a,c){var b=this.chart,e={xAxis:[],yAxis:[]};b.polar?v(b.axes,function(a){var d=a.isXAxis,g=a.center,k=c.chartX-g[0]-b.plotLeft,g=c.chartY-g[1]-b.plotTop;e[d?"xAxis":"yAxis"].push({axis:a,value:a.translate(d?Math.PI- -Math.atan2(k,g):Math.sqrt(Math.pow(k,2)+Math.pow(g,2)),!0)})}):e=a.call(this,c);return e});m(a.Chart.prototype,"getAxes",function(b){this.pane||(this.pane=[]);v(a.splat(this.options.pane),function(b){new a.Pane(b,this)},this);b.call(this)});m(a.Chart.prototype,"drawChartBox",function(a){a.call(this);v(this.pane,function(a){a.render()})});m(a.Chart.prototype,"get",function(b,c){return a.find(this.pane,function(a){return a.options.id===c})||b.call(this,c)})})(x)}); diff --git a/admin/js/angular-highcharts/highcharts.js b/admin/js/angular-highcharts/highcharts.js index 01498be8..4e0ffcd0 100644 --- a/admin/js/angular-highcharts/highcharts.js +++ b/admin/js/angular-highcharts/highcharts.js @@ -1,343 +1,588 @@ /* - Highcharts JS v4.2.5 (2016-05-06) + Highcharts JS v9.1.2 (2021-06-16) - (c) 2009-2016 Torstein Honsi + (c) 2009-2021 Torstein Honsi License: www.highcharts.com/license */ -(function(D,aa){typeof module==="object"&&module.exports?module.exports=D.document?aa(D):aa:D.Highcharts=aa(D)})(typeof window!=="undefined"?window:this,function(D){function aa(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw Error(c);D.console&&console.log(c)}function pb(a,b,c){this.options=b;this.elem=a;this.prop=c}function E(){var a,b=arguments,c,d={},e=function(a,b){var c,d;typeof a!=="object"&&(a={});for(d in b)b.hasOwnProperty(d)&&(c=b[d],a[d]=c&&typeof c==="object"&& -Object.prototype.toString.call(c)!=="[object Array]"&&d!=="renderTo"&&typeof c.nodeType!=="number"?e(a[d]||{},c):b[d]);return a};b[0]===!0&&(d=b[1],b=Array.prototype.slice.call(b,2));c=b.length;for(a=0;a-1?h.thousandsSep:""))):e=Qa(f,e)}k.push(e);a=a.slice(c+1);c=(d=!d)?"}":"{"}k.push(a);return k.join("")}function rb(a){return Y.pow(10,V(Y.log(a)/Y.LN10))}function sb(a,b,c,d,e){var f,g=a,c=o(c,1);f=a/c;b||(b=[1,2,2.5,5,10],d===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d=a||!e&&f<=(b[d]+(b[d+1]||b[d]))/2)break;g*=c;return g}function hb(a,b){var c=a.length,d,e;for(e=0;ec&&(c=a[b]);return c}function Ra(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Sa(a){ib||(ib=ba(Ma));a&&ib.appendChild(a);ib.innerHTML=""}function ca(a,b){return parseFloat(a.toPrecision(b||14))}function Ta(a,b){b.renderer.globalAnimation=o(a,b.animation)}function $a(a){return Z(a)? -E(a):{duration:a?500:0}}function Eb(){var a=U.global,b=a.useUTC,c=b?"getUTC":"get",d=b?"setUTC":"set";la=a.Date||D.Date;qb=b&&a.timezoneOffset;Za=b&&a.getTimezoneOffset;jb=function(a,c,d,h,i,k){var j;b?(j=la.UTC.apply(0,arguments),j+=Ya(j)):j=(new la(a,c,o(d,1),o(h,0),o(i,0),o(k,0))).getTime();return j};tb=c+"Minutes";ub=c+"Hours";vb=c+"Day";Ua=c+"Date";ab=c+"Month";bb=c+"FullYear";Fb=d+"Milliseconds";Gb=d+"Seconds";Hb=d+"Minutes";Ib=d+"Hours";kb=d+"Date";wb=d+"Month";xb=d+"FullYear"}function ma(a){if(!(this instanceof -ma))return new ma(a);this.init(a)}function O(){}function Va(a,b,c,d){this.axis=a;this.pos=b;this.type=c||"";this.isNew=!0;!c&&!d&&this.addLabel()}function Jb(a,b,c,d,e){var f=a.chart.inverted;this.axis=a;this.isNegative=c;this.options=b;this.x=d;this.total=null;this.points={};this.stack=e;this.rightCliff=this.leftCliff=0;this.alignOptions={align:b.align||(f?c?"left":"right":"center"),verticalAlign:b.verticalAlign||(f?"middle":c?"bottom":"top"),y:o(b.y,f?4:c?14:-6),x:o(b.x,f?c?-6:6:0)};this.textAlign= -b.textAlign||(f?c?"right":"left":"center")}var y,A=D.document,Y=Math,B=Y.round,V=Y.floor,ua=Y.ceil,t=Y.max,F=Y.min,Q=Y.abs,W=Y.cos,da=Y.sin,ra=Y.PI,ja=ra*2/360,za=D.navigator&&D.navigator.userAgent||"",Kb=D.opera,ya=/(msie|trident|edge)/i.test(za)&&!Kb,lb=A&&A.documentMode===8,mb=!ya&&/AppleWebKit/.test(za),Na=/Firefox/.test(za),Lb=/(Mobile|Android|Windows Phone)/.test(za),Ha="http://www.w3.org/2000/svg",fa=A&&A.createElementNS&&!!A.createElementNS(Ha,"svg").createSVGRect,Pb=Na&&parseInt(za.split("Firefox/")[1], -10)<4,ka=A&&!fa&&!ya&&!!A.createElement("canvas").getContext,cb,db,Mb={},yb=0,ib,U,Qa,H,Aa=function(){},T=[],eb=0,Ma="div",Qb=/^[0-9]+$/,nb=["plotTop","marginRight","marginBottom","plotLeft"],la,jb,qb,Za,tb,ub,vb,Ua,ab,bb,Fb,Gb,Hb,Ib,kb,wb,xb,L={},x;x=D.Highcharts?aa(16,!0):{win:D};x.seriesTypes=L;var Ia=[],na,sa,p,Ba,zb,Ca,N,X,I,Wa,Oa;pb.prototype={dSetter:function(){var a=this.paths[0],b=this.paths[1],c=[],d=this.now,e=a.length,f;if(d===1)c=this.toD;else if(e===b.length&&d<1)for(;e--;)f=parseFloat(a[e]), -c[e]=isNaN(f)?a[e]:d*parseFloat(b[e]-f)+f;else c=b;this.elem.attr("d",c)},update:function(){var a=this.elem,b=this.prop,c=this.now,d=this.options.step;if(this[b+"Setter"])this[b+"Setter"]();else a.attr?a.element&&a.attr(b,c):a.style[b]=c+this.unit;d&&d.call(a,c,this)},run:function(a,b,c){var d=this,e=function(a){return e.stopped?!1:d.step(a)},f;this.startTime=+new la;this.start=a;this.end=b;this.unit=c;this.now=this.start;this.pos=0;e.elem=this.elem;if(e()&&Ia.push(e)===1)e.timerId=setInterval(function(){for(f= -0;f=f+this.startTime){this.now=this.end;this.pos=1;this.update();a=g[this.prop]=!0;for(h in g)g[h]!==!0&&(a=!1);a&&e&&e.call(c);c=!1}else this.pos=d.easing((b-this.startTime)/f),this.now=this.start+(this.end-this.start)*this.pos,this.update(),c=!0;return c},initPath:function(a, -b,c){var b=b||"",d=a.shift,e=b.indexOf("C")>-1,f=e?7:3,g,b=b.split(" "),c=[].concat(c),h=a.isArea,i=h?2:1,k=function(a){for(g=a.length;g--;)(a[g]==="M"||a[g]==="L")&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(k(b),k(c));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=c.slice(0,f).concat(c),h&&(c=c.concat(c.slice(c.length-f)));a.shift=0;if(b.length)for(a=c.length;b.length3?g.length%3:0;c=o(c,e.decimalPoint);d=o(d,e.thousandsSep);a=a<0?"-":"";a+=h?g.substr(0,h)+d:"";a+=g.substr(h).replace(/(\d{3})(?=\d)/g,"$1"+d);b&&(d=Math.abs(i-g+Math.pow(10,-Math.max(b,f)-1)),a+=c+d.toFixed(b).slice(2)); -return a};Math.easeInOutSine=function(a){return-0.5*(Math.cos(Math.PI*a)-1)};na=function(a,b){var c;if(b==="width")return Math.min(a.offsetWidth,a.scrollWidth)-na(a,"padding-left")-na(a,"padding-right");else if(b==="height")return Math.min(a.offsetHeight,a.scrollHeight)-na(a,"padding-top")-na(a,"padding-bottom");return(c=D.getComputedStyle(a,void 0))&&C(c.getPropertyValue(b))};sa=function(a,b){return b.indexOf?b.indexOf(a):[].indexOf.call(b,a)};Ba=function(a,b){return[].filter.call(a,b)};Ca=function(a, -b){for(var c=[],d=0,e=a.length;d-1&&(f.splice(h,1),g[b]=f),d(b,c)):(e(),g[b]=[])):(e(),a.hcEvents={})};I=function(a,b,c,d){var e;e=a.hcEvents;var f,g,c=c||{};if(A.createEvent&&(a.dispatchEvent||a.fireEvent))e=A.createEvent("Events"),e.initEvent(b,!0,!0),e.target=a,u(e,c),a.dispatchEvent?a.dispatchEvent(e):a.fireEvent(b,e);else if(e){e=e[b]||[];f=e.length;if(!c.preventDefault)c.preventDefault=function(){c.defaultPrevented=!0};c.target=a;if(!c.type)c.type=b;for(b=0;b{point.key}
',pointFormat:'\u25cf {series.name}: {point.y}
', -shadow:!0,snap:Lb?25:10,style:{color:"#333333",cursor:"default",fontSize:"12px",padding:"8px",pointerEvents:"none",whiteSpace:"nowrap"}},credits:{enabled:!0,text:"Highcharts.com",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#909090",fontSize:"9px"}}};var ea=U.plotOptions,ga=ea.line;Eb();ma.prototype={parsers:[{regex:/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/,parse:function(a){return[C(a[1]), -C(a[2]),C(a[3]),parseFloat(a[4],10)]}},{regex:/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,parse:function(a){return[C(a[1],16),C(a[2],16),C(a[3],16),1]}},{regex:/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,parse:function(a){return[C(a[1]),C(a[2]),C(a[3]),1]}}],init:function(a){var b,c,d,e;if((this.input=a)&&a.stops)this.stops=Ca(a.stops,function(a){return new ma(a[1])});else for(d=this.parsers.length;d--&&!c;)e=this.parsers[d],(b=e.regex.exec(a))&&(c=e.parse(b));this.rgba= -c||[]},get:function(a){var b=this.input,c=this.rgba,d;this.stops?(d=E(b),d.stops=[].concat(d.stops),p(this.stops,function(b,c){d.stops[c]=[d.stops[c][0],b.get(a)]})):d=c&&J(c[0])?a==="rgb"||!a&&c[3]===1?"rgb("+c[0]+","+c[1]+","+c[2]+")":a==="a"?c[3]:"rgba("+c.join(",")+")":b;return d},brighten:function(a){var b,c=this.rgba;if(this.stops)p(this.stops,function(b){b.brighten(a)});else if(J(a)&&a!==0)for(b=0;b<3;b++)c[b]+=C(a*255),c[b]<0&&(c[b]=0),c[b]>255&&(c[b]=255);return this},setOpacity:function(a){this.rgba[3]= -a;return this}};O.prototype={opacity:1,textProps:"direction,fontSize,fontWeight,fontFamily,fontStyle,color,lineHeight,width,textDecoration,textOverflow,textShadow".split(","),init:function(a,b){this.element=b==="span"?ba(b):A.createElementNS(Ha,b);this.renderer=a},animate:function(a,b,c){b=o(b,this.renderer.globalAnimation,!0);Oa(this);if(b){if(c)b.complete=c;Wa(this,a,b)}else this.attr(a,null,c);return this},colorGradient:function(a,b,c){var d=this.renderer,e,f,g,h,i,k,j,l,m,n,q,z=[],s;a.linearGradient? -f="linearGradient":a.radialGradient&&(f="radialGradient");if(f){g=a[f];i=d.gradients;j=a.stops;n=c.radialReference;Ea(g)&&(a[f]=g={x1:g[0],y1:g[1],x2:g[2],y2:g[3],gradientUnits:"userSpaceOnUse"});f==="radialGradient"&&n&&!r(g.gradientUnits)&&(h=g,g=E(g,d.getRadialAttr(n,h),{gradientUnits:"userSpaceOnUse"}));for(q in g)q!=="id"&&z.push(q,g[q]);for(q in j)z.push(j[q]);z=z.join(",");i[z]?n=i[z].attr("id"):(g.id=n="highcharts-"+yb++,i[z]=k=d.createElement(f).attr(g).add(d.defs),k.radAttr=h,k.stops=[], -p(j,function(a){a[1].indexOf("rgba")===0?(e=ma(a[1]),l=e.get("rgb"),m=e.get("a")):(l=a[1],m=1);a=d.createElement("stop").attr({offset:a[0],"stop-color":l,"stop-opacity":m}).add(k);k.stops.push(a)}));s="url("+d.url+"#"+n+")";c.setAttribute(b,s);c.gradient=z;a.toString=function(){return s}}},applyTextShadow:function(a){var b=this.element,c,d=a.indexOf("contrast")!==-1,e={},f=this.renderer.forExport,g=f||b.style.textShadow!==y&&!ya;if(d)e.textShadow=a=a.replace(/contrast/g,this.renderer.getContrast(b.style.fill)); -if(mb||f)e.textRendering="geometricPrecision";g?this.css(e):(this.fakeTS=!0,this.ySetter=this.xSetter,c=[].slice.call(b.getElementsByTagName("tspan")),p(a.split(/\s?,\s?/g),function(a){var d=b.firstChild,e,f,a=a.split(" ");e=a[a.length-1];(f=a[a.length-2])&&p(c,function(a,c){var g;c===0&&(a.setAttribute("x",b.getAttribute("x")),c=b.getAttribute("y"),a.setAttribute("y",c||0),c===null&&b.setAttribute("y",0));g=a.cloneNode(1);P(g,{"class":"highcharts-text-shadow",fill:e,stroke:e,"stroke-opacity":1/t(C(f), -3),"stroke-width":f,"stroke-linejoin":"round"});b.insertBefore(g,d)})}))},attr:function(a,b,c){var d,e=this.element,f,g=this,h;typeof a==="string"&&b!==y&&(d=a,a={},a[d]=b);if(typeof a==="string")g=(this[a+"Getter"]||this._defaultGetter).call(this,a,e);else{for(d in a){b=a[d];h=!1;this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(d)&&(f||(this.symbolAttr(a),f=!0),h=!0);if(this.rotation&&(d==="x"||d==="y"))this.doTransform=!0;h||(h=this[d+"Setter"]||this._defaultSetter, -h.call(this,b,d,e),this.shadows&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(d)&&this.updateShadows(d,b,h))}if(this.doTransform)this.updateTransform(),this.doTransform=!1}c&&c();return g},updateShadows:function(a,b,c){for(var d=this.shadows,e=d.length;e--;)c.call(d[e],a==="height"?Math.max(b-(d[e].cutHeight||0),0):a==="d"?this.d:b,a,d[e])},addClass:function(a){var b=this.element,c=P(b,"class")||"";c.indexOf(a)===-1&&P(b,"class",c+" "+a);return this},symbolAttr:function(a){var b=this; -p("x,y,r,start,end,width,height,innerR,anchorX,anchorY".split(","),function(c){b[c]=o(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,b.y,b.width,b.height,b)})},clip:function(a){return this.attr("clip-path",a?"url("+this.renderer.url+"#"+a.id+")":"none")},crisp:function(a){var b,c={},d,e=this.strokeWidth||0;d=B(e)%2/2;a.x=V(a.x||this.x||0)+d;a.y=V(a.y||this.y||0)+d;a.width=V((a.width||this.width||0)-2*d);a.height=V((a.height||this.height||0)-2*d);a.strokeWidth=e;for(b in a)this[b]!==a[b]&& -(this[b]=c[b]=a[b]);return c},css:function(a){var b=this.styles,c={},d=this.element,e,f,g="";e=!b;if(a&&a.color)a.fill=a.color;if(b)for(f in a)a[f]!==b[f]&&(c[f]=a[f],e=!0);if(e){e=this.textWidth=a&&a.width&&d.nodeName.toLowerCase()==="text"&&C(a.width)||this.textWidth;b&&(a=u(b,c));this.styles=a;e&&(ka||!fa&&this.renderer.forExport)&&delete a.width;if(ya&&!fa)M(this.element,a);else{b=function(a,b){return"-"+b.toLowerCase()};for(f in a)g+=f.replace(/([A-Z])/g,b)+":"+a[f]+";";P(d,"style",g)}e&&this.added&& -this.renderer.buildText(this)}return this},on:function(a,b){var c=this,d=c.element;db&&a==="click"?(d.ontouchstart=function(a){c.touchEventFired=la.now();a.preventDefault();b.call(d,a)},d.onclick=function(a){(za.indexOf("Android")===-1||la.now()-(c.touchEventFired||0)>1100)&&b.call(d,a)}):d["on"+a]=b;return this},setRadialReference:function(a){var b=this.renderer.gradients[this.element.gradient];this.element.radialReference=a;b&&b.radAttr&&b.animate(this.renderer.getRadialAttr(a,b.radAttr));return this}, -translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c=this.scaleX,d=this.scaleY,e=this.inverted,f=this.rotation,g=this.element;e&&(a+=this.attr("width"),b+=this.attr("height"));a=["translate("+a+","+b+")"];e?a.push("rotate(90) scale(-1,1)"):f&&a.push("rotate("+f+" "+(g.getAttribute("x")||0)+" "+(g.getAttribute("y")||0)+")");(r(c)||r(d))&& -a.push("scale("+o(c,1)+" "+o(d,1)+")");a.length&&g.setAttribute("transform",a.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer;f=e.alignedObjects;if(a){if(this.alignOptions=a,this.alignByTranslate=b,!c||xa(c))this.alignTo=d=c||"renderer",pa(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=o(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x||0);g=(c.y||0)+ -(a.y||0);if(d==="right"||d==="center")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?"translateX":"x"]=B(f);if(e==="bottom"||e==="middle")g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?"translateY":"y"]=B(g);this[this.placed?"animate":"attr"](h);this.placed=!0;this.alignAttr=h;return this},getBBox:function(a,b){var c,d=this.renderer,e,f,g,h=this.element,i=this.styles;e=this.textStr;var k,j=h.style,l,m=d.cache,n=d.cacheKeys,q;f=o(b,this.rotation);g=f*ja;e!==y&&(q=["",f||0,i&&i.fontSize, -h.style.width].join(","),q=e===""||Qb.test(e)?"num:"+e.toString().length+q:e+q);q&&!a&&(c=m[q]);if(!c){if(h.namespaceURI===Ha||d.forExport){try{l=this.fakeTS&&function(a){p(h.querySelectorAll(".highcharts-text-shadow"),function(b){b.style.display=a})},Na&&j.textShadow?(k=j.textShadow,j.textShadow=""):l&&l("none"),c=h.getBBox?u({},h.getBBox()):{width:h.offsetWidth,height:h.offsetHeight},k?j.textShadow=k:l&&l("")}catch(z){}if(!c||c.width<0)c={width:0,height:0}}else c=this.htmlGetBBox();if(d.isSVG){d= -c.width;e=c.height;if(ya&&i&&i.fontSize==="11px"&&e.toPrecision(3)==="16.9")c.height=e=14;if(f)c.width=Q(e*da(g))+Q(d*W(g)),c.height=Q(e*W(g))+Q(d*da(g))}if(q){for(;n.length>250;)delete m[n.shift()];m[q]||n.push(q);m[q]=c}}return c},show:function(a){return this.attr({visibility:a?"inherit":"visible"})},hide:function(){return this.attr({visibility:"hidden"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.attr({y:-9999})}})},add:function(a){var b=this.renderer, -c=this.element,d;if(a)this.parentGroup=a;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);this.added=!0;if(!a||a.handleZ||this.zIndex)d=this.zIndexSetter();d||(a?a.element:b.box).appendChild(c);if(this.onAdd)this.onAdd();return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.renderer.isSVG&&b.nodeName==="SPAN"&&a.parentGroup,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point= -null;Oa(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=0;f]*>/g,"")))},textSetter:function(a){if(a!==this.textStr)delete this.bBox,this.textStr=a,this.added&&this.renderer.buildText(this)},fillSetter:function(a,b,c){typeof a==="string"?c.setAttribute(b,a):a&&this.colorGradient(a,b,c)},visibilitySetter:function(a,b,c){a==="inherit"?c.removeAttribute(b):c.setAttribute(b,a)},zIndexSetter:function(a,b){var c=this.renderer,d=this.parentGroup,c=(d||c).element||c.box,e,f,g= -this.element,h;e=this.added;var i;if(r(a))g.zIndex=a,a=+a,this[b]===a&&(e=!1),this[b]=a;if(e){if((a=this.zIndex)&&d)d.handleZ=!0;d=c.childNodes;for(i=0;ia||!r(a)&&r(f)))c.insertBefore(g,e),h=!0;h||c.appendChild(g)}return h},_defaultSetter:function(a,b,c){c.setAttribute(b,a)}};O.prototype.yGetter=O.prototype.xGetter;O.prototype.translateXSetter=O.prototype.translateYSetter=O.prototype.rotationSetter=O.prototype.verticalAlignSetter=O.prototype.scaleXSetter= -O.prototype.scaleYSetter=function(a,b){this[b]=a;this.doTransform=!0};O.prototype["stroke-widthSetter"]=O.prototype.strokeSetter=function(a,b,c){this[b]=a;if(this.stroke&&this["stroke-width"])this.strokeWidth=this["stroke-width"],O.prototype.fillSetter.call(this,this.stroke,"stroke",c),c.setAttribute("stroke-width",this["stroke-width"]),this.hasStroke=!0;else if(b==="stroke-width"&&a===0&&this.hasStroke)c.removeAttribute("stroke"),this.hasStroke=!1};var Da=function(){this.init.apply(this,arguments)}; -Da.prototype={Element:O,init:function(a,b,c,d,e,f){var g,d=this.createElement("svg").attr({version:"1.1"}).css(this.getStyle(d));g=d.element;a.appendChild(g);a.innerHTML.indexOf("xmlns")===-1&&P(g,"xmlns",Ha);this.isSVG=!0;this.box=g;this.boxWrapper=d;this.alignedObjects=[];this.url=(Na||mb)&&A.getElementsByTagName("base").length?D.location.href.replace(/#.*?$/,"").replace(/([\('\)])/g,"\\$1").replace(/ /g,"%20"):"";this.createElement("desc").add().element.appendChild(A.createTextNode("Created with Highcharts 4.2.5")); -this.defs=this.createElement("defs").add();this.allowHTML=f;this.forExport=e;this.gradients={};this.cache={};this.cacheKeys=[];this.imgCount=0;this.setSize(b,c,!1);var h;if(Na&&a.getBoundingClientRect)this.subPixelFix=b=function(){M(a,{left:0,top:0});h=a.getBoundingClientRect();M(a,{left:ua(h.left)-h.left+"px",top:ua(h.top)-h.top+"px"})},b(),N(D,"resize",b)},getStyle:function(a){return this.style=u({fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif',fontSize:"12px"}, -a)},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();Ra(this.gradients||{});this.gradients=null;if(a)this.defs=a.destroy();this.subPixelFix&&X(D,"resize",this.subPixelFix);return this.alignedObjects=null},createElement:function(a){var b=new this.Element;b.init(this,a);return b},draw:function(){},getRadialAttr:function(a,b){return{cx:a[0]-a[2]/2+b.cx*a[2],cy:a[1]-a[2]/2+b.cy*a[2],r:b.r*a[2]}},buildText:function(a){for(var b= -a.element,c=this,d=c.forExport,e=o(a.textStr,"").toString(),f=e.indexOf("<")!==-1,g=b.childNodes,h,i,k,j=P(b,"x"),l=a.styles,m=a.textWidth,n=l&&l.lineHeight,q=l&&l.textShadow,z=l&&l.textOverflow==="ellipsis",s=g.length,G=m&&!a.added&&this.box,w=function(a){return n?C(n):c.fontMetrics(/(px|em)$/.test(a&&a.style.fontSize)?a.style.fontSize:l&&l.fontSize||c.style.fontSize||12,a).h},v=function(a){return a.replace(/</g,"<").replace(/>/g,">")};s--;)b.removeChild(g[s]);!f&&!q&&!z&&e.indexOf(" ")=== --1?b.appendChild(A.createTextNode(v(e))):(h=/<.*style="([^"]+)".*>/,i=/<.*href="(http[^"]+)".*>/,G&&G.appendChild(b),e=f?e.replace(/<(b|strong)>/g,'').replace(/<(i|em)>/g,'').replace(//g,"").split(//g):[e],e=Ba(e,function(a){return a!==""}),p(e,function(e,f){var g,n=0,e=e.replace(/^\s+|\s+$/g,"").replace(//g,"|||");g=e.split("|||");p(g, -function(e){if(e!==""||g.length===1){var q={},s=A.createElementNS(Ha,"tspan"),o;h.test(e)&&(o=e.match(h)[1].replace(/(;| |^)color([ :])/,"$1fill$2"),P(s,"style",o));i.test(e)&&!d&&(P(s,"onclick",'location.href="'+e.match(i)[1]+'"'),M(s,{cursor:"pointer"}));e=v(e.replace(/<(.|\n)*?>/g,"")||" ");if(e!==" "){s.appendChild(A.createTextNode(e));if(n)q.dx=0;else if(f&&j!==null)q.x=j;P(s,q);b.appendChild(s);!n&&f&&(!fa&&d&&M(s,{display:"block"}),P(s,"dy",w(s)));if(m){for(var q=e.replace(/([^\^])-/g,"$1- ").split(" "), -p=g.length>1||f||q.length>1&&l.whiteSpace!=="nowrap",G,S,r=[],t=w(s),u=1,B=a.rotation,y=e,x=y.length;(p||z)&&(q.length||r.length);)a.rotation=0,G=a.getBBox(!0),S=G.width,!fa&&c.forExport&&(S=c.measureSpanWidth(s.firstChild.data,a.styles)),G=S>m,k===void 0&&(k=G),z&&k?(x/=2,y===""||!G&&x<0.5?q=[]:(y=e.substring(0,y.length+(G?-1:1)*ua(x)),q=[y+(m>3?"\u2026":"")],s.removeChild(s.firstChild))):!G||q.length===1?(q=r,r=[],q.length&&(u++,s=A.createElementNS(Ha,"tspan"),P(s,{dy:t,x:j}),o&&P(s,"style",o), -b.appendChild(s)),S>m&&(m=S)):(s.removeChild(s.firstChild),r.unshift(q.pop())),q.length&&s.appendChild(A.createTextNode(q.join(" ").replace(/- /g,"-")));a.rotation=B}n++}}})}),k&&a.attr("title",a.textStr),G&&G.removeChild(b),q&&a.applyTextShadow&&a.applyTextShadow(q))},getContrast:function(a){a=ma(a).rgba;return a[0]+a[1]+a[2]>384?"#000000":"#FFFFFF"},button:function(a,b,c,d,e,f,g,h,i){var k=this.label(a,b,c,i,null,null,null,null,"button"),j=0,l,m,n,q,z,s,a={x1:0,y1:0,x2:0,y2:1},e=E({"stroke-width":1, -stroke:"#CCCCCC",fill:{linearGradient:a,stops:[[0,"#FEFEFE"],[1,"#F6F6F6"]]},r:2,padding:5,style:{color:"black"}},e);n=e.style;delete e.style;f=E(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#FFF"],[1,"#ACF"]]}},f);q=f.style;delete f.style;g=E(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#9BD"],[1,"#CDF"]]}},g);z=g.style;delete g.style;h=E(e,{style:{color:"#CCC"}},h);s=h.style;delete h.style;N(k.element,ya?"mouseover":"mouseenter",function(){j!==3&&k.attr(f).css(q)});N(k.element,ya?"mouseout": -"mouseleave",function(){j!==3&&(l=[e,f,g][j],m=[n,q,z][j],k.attr(l).css(m))});k.setState=function(a){(k.state=j=a)?a===2?k.attr(g).css(z):a===3&&k.attr(h).css(s):k.attr(e).css(n)};return k.on("click",function(a){j!==3&&d.call(k,a)}).attr(e).css(u({cursor:"default"},n))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=B(a[1])-b%2/2);a[2]===a[5]&&(a[2]=a[5]=B(a[2])+b%2/2);return a},path:function(a){var b={fill:"none"};Ea(a)?b.d=a:Z(a)&&u(b,a);return this.createElement("path").attr(b)},circle:function(a, -b,c){a=Z(a)?a:{x:a,y:b,r:c};b=this.createElement("circle");b.xSetter=b.ySetter=function(a,b,c){c.setAttribute("c"+b,a)};return b.attr(a)},arc:function(a,b,c,d,e,f){if(Z(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol("arc",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0});a.r=c;return a},rect:function(a,b,c,d,e,f){var e=Z(a)?a.r:e,g=this.createElement("rect"),a=Z(a)?a:a===y?{}:{x:a,y:b,width:t(c,0),height:t(d,0)};if(f!==y)g.strokeWidth=f,a=g.crisp(a);if(e)a.r=e;g.rSetter=function(a, -b,c){P(c,{rx:a,ry:a})};return g.attr(a)},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[o(c,!0)?"animate":"attr"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement("g");return r(a)?b.attr({"class":"highcharts-"+a}):b},image:function(a,b,c,d,e){var f={preserveAspectRatio:"none"};arguments.length>1&&u(f,{x:b,y:c,width:d,height:e});f=this.createElement("image").attr(f);f.element.setAttributeNS?f.element.setAttributeNS("http://www.w3.org/1999/xlink", -"href",a):f.element.setAttribute("hc-svg-href",a);return f},symbol:function(a,b,c,d,e,f){var g=this,h,i=this.symbols[a],i=i&&i(B(b),B(c),d,e,f),k=/^url\((.*?)\)$/,j,l;if(i)h=this.path(i),u(h,{symbolName:a,x:b,y:c,width:d,height:e}),f&&u(h,f);else if(k.test(a))l=function(a,b){a.element&&(a.attr({width:b[0],height:b[1]}),a.alignByTranslate||a.translate(B((d-b[0])/2),B((e-b[1])/2)))},j=a.match(k)[1],a=Mb[j]||f&&f.width&&f.height&&[f.width,f.height],h=this.image(j).attr({x:b,y:c}),h.isImg=!0,a?l(h,a): -(h.attr({width:0,height:0}),ba("img",{onload:function(){this.width===0&&(M(this,{position:"absolute",top:"-999em"}),A.body.appendChild(this));l(h,Mb[j]=[this.width,this.height]);this.parentNode&&this.parentNode.removeChild(this);g.imgCount--;if(!g.imgCount&&T[g.chartIndex].onload)T[g.chartIndex].onload()},src:j}),this.imgCount++);return h},symbols:{circle:function(a,b,c,d){var e=0.166*c;return["M",a+c/2,b,"C",a+c+e,b,a+c+e,b+d,a+c/2,b+d,"C",a-e,b+d,a-e,b,a+c/2,b,"Z"]},square:function(a,b,c,d){return["M", -a,b,"L",a+c,b,a+c,b+d,a,b+d,"Z"]},triangle:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d,a,b+d,"Z"]},"triangle-down":function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c/2,b+d,"Z"]},diamond:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d/2,a+c/2,b+d,a,b+d/2,"Z"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-0.001,d=e.innerR,h=e.open,i=W(f),k=da(f),j=W(g),g=da(g),e=e.end-fc&&e>b+g&&eb+g&&ed&&h>a+g&&ha+g&&hj&&/[ \-]/.test(b.textContent||b.innerText))M(b,{width:j+"px",display:"block",whiteSpace:l||"normal"}),this.hasTextWidth=!0;else if(this.hasTextWidth)M(b,{width:"",display:"",whiteSpace:l||"nowrap"}),this.hasTextWidth=!1;this.getSpanCorrection(this.hasTextWidth?j:b.offsetWidth,k,h,i,g)}M(b,{left:e+(this.xCorr||0)+"px",top:f+(this.yCorr||0)+"px"});if(mb)k=b.offsetHeight; -this.cTT=m}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,c){var d={},e=ya?"-ms-transform":mb?"-webkit-transform":Na?"MozTransform":Kb?"-o-transform":"";d[e]=d.transform="rotate("+a+"deg)";d[e+(Na?"Origin":"-origin")]=d.transformOrigin=b*100+"% "+c+"px";M(this.element,d)},getSpanCorrection:function(a,b,c){this.xCorr=-a*c;this.yCorr=-b}});u(Da.prototype,{html:function(a,b,c){var d=this.createElement("span"),e=d.element,f=d.renderer,g=f.isSVG,h=function(a,b){p(["opacity","visibility"],function(c){fb(a, -c+"Setter",function(a,c,d,e){a.call(this,c,d,e);b[d]=c})})};d.textSetter=function(a){a!==e.innerHTML&&delete this.bBox;e.innerHTML=this.textStr=a;d.htmlUpdateTransform()};g&&h(d,d.element.style);d.xSetter=d.ySetter=d.alignSetter=d.rotationSetter=function(a,b){b==="align"&&(b="textAlign");d[b]=a;d.htmlUpdateTransform()};d.attr({text:a,x:B(b),y:B(c)}).css({position:"absolute",fontFamily:this.style.fontFamily,fontSize:this.style.fontSize});e.style.whiteSpace="nowrap";d.css=d.htmlCss;if(g)d.add=function(a){var b, -c=f.box.parentNode,g=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)g.push(a),a=a.parentGroup;p(g.reverse(),function(a){var d,e=P(a.element,"class");e&&(e={className:e});b=a.div=a.div||ba(Ma,e,{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px",opacity:a.opacity},b||c);d=b.style;u(a,{translateXSetter:function(b,c){d.left=b+"px";a[c]=b;a.doTransform=!0},translateYSetter:function(b,c){d.top=b+"px";a[c]=b;a.doTransform=!0}});h(a,d)})}}else b=c;b.appendChild(e);d.added=!0;d.alignOnAdd&& -d.htmlUpdateTransform();return d};return d}});var K;if(!fa&&!ka){K={init:function(a,b){var c=["<",b,' filled="f" stroked="f"'],d=["position: ","absolute",";"],e=b===Ma;(b==="shape"||e)&&d.push("left:0;top:0;width:1px;height:1px;");d.push("visibility: ",e?"hidden":"visible");c.push(' style="',d.join(""),'"/>');if(b)c=e||b==="span"||b==="img"?c.join(""):a.prepVML(c),this.element=ba(c);this.renderer=a},add:function(a){var b=this.renderer,c=this.element,d=b.box,e=a&&a.inverted,d=a?a.element||a:d;if(a)this.parentGroup= -a;e&&b.invertChild(c,d);d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();if(this.onAdd)this.onAdd();return this},updateTransform:O.prototype.htmlUpdateTransform,setSpanRotation:function(){var a=this.rotation,b=W(a*ja),c=da(a*ja);M(this.element,{filter:a?["progid:DXImageTransform.Microsoft.Matrix(M11=",b,", M12=",-c,", M21=",c,", M22=",b,", sizingMethod='auto expand')"].join(""):"none"})},getSpanCorrection:function(a,b,c,d,e){var f=d?W(d*ja):1,g=d? -da(d*ja):0,h=o(this.elemHeight,this.element.offsetHeight),i;this.xCorr=f<0&&-a;this.yCorr=g<0&&-h;i=f*g<0;this.xCorr+=g*b*(i?1-c:c);this.yCorr-=f*b*(d?i?c:1-c:1);e&&e!=="left"&&(this.xCorr-=a*c*(f<0?-1:1),d&&(this.yCorr-=h*c*(g<0?-1:1)),M(this.element,{textAlign:e}))},pathToVML:function(a){for(var b=a.length,c=[];b--;)if(J(a[b]))c[b]=B(a[b]*10)-5;else if(a[b]==="Z")c[b]="x";else if(c[b]=a[b],a.isArc&&(a[b]==="wa"||a[b]==="at"))c[b+5]===c[b+7]&&(c[b+7]+=a[b+7]>a[b+5]?1:-1),c[b+6]===c[b+8]&&(c[b+8]+= -a[b+8]>a[b+6]?1:-1);return c.join(" ")||"x"},clip:function(a){var b=this,c;a?(c=a.members,pa(c,b),c.push(b),b.destroyClip=function(){pa(c,b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:lb?"inherit":"rect(auto)"});return b.css(a)},css:O.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Sa(a)},destroy:function(){this.destroyClip&&this.destroyClip();return O.prototype.destroy.apply(this)},on:function(a,b){this.element["on"+a]=function(){var a=D.event;a.target=a.srcElement;b(a)}; -return this},cutOffPath:function(a,b){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=C(a[c-2])-10*b;return a.join(" ")},shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,k,j=f.path,l,m,n,q;j&&typeof j.value!=="string"&&(j="x");m=j;if(a){n=o(a.width,3);q=(a.opacity||0.15)/n;for(e=1;e<=3;e++){l=n*2+1-2*e;c&&(m=this.cutOffPath(j.value,l+0.5));k=[''];h=ba(g.prepVML(k),null,{left:C(i.left)+o(a.offsetX,1),top:C(i.top)+o(a.offsetY,1)});if(c)h.cutOff=l+1;k=[''];ba(g.prepVML(k),null,null,h);b?b.element.appendChild(h):f.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this},updateShadows:Aa,setAttr:function(a,b){lb?this.element[a]=b:this.element.setAttribute(a,b)},classSetter:function(a){this.element.className=a},dashstyleSetter:function(a,b,c){(c.getElementsByTagName("stroke")[0]|| -ba(this.renderer.prepVML([""]),null,null,c))[b]=a||"solid";this[b]=a},dSetter:function(a,b,c){var d=this.shadows,a=a||[];this.d=a.join&&a.join(" ");c.path=a=this.pathToVML(a);if(d)for(c=d.length;c--;)d[c].path=d[c].cutOff?this.cutOffPath(a,d[c].cutOff):a;this.setAttr(b,a)},fillSetter:function(a,b,c){var d=c.nodeName;if(d==="SPAN")c.style.color=a;else if(d!=="IMG")c.filled=a!=="none",this.setAttr("fillcolor",this.renderer.color(a,c,b,this))},"fill-opacitySetter":function(a,b,c){ba(this.renderer.prepVML(["<", -b.split("-")[0],' opacity="',a,'"/>']),null,null,c)},opacitySetter:Aa,rotationSetter:function(a,b,c){c=c.style;this[b]=c[b]=a;c.left=-B(da(a*ja)+1)+"px";c.top=B(W(a*ja))+"px"},strokeSetter:function(a,b,c){this.setAttr("strokecolor",this.renderer.color(a,c,b,this))},"stroke-widthSetter":function(a,b,c){c.stroked=!!a;this[b]=a;J(a)&&(a+="px");this.setAttr("strokeweight",a)},titleSetter:function(a,b){this.setAttr(b,a)},visibilitySetter:function(a,b,c){a==="inherit"&&(a="visible");this.shadows&&p(this.shadows, -function(c){c.style[b]=a});c.nodeName==="DIV"&&(a=a==="hidden"?"-999em":0,lb||(c.style[b]=a?"visible":"hidden"),b="top");c.style[b]=a},xSetter:function(a,b,c){this[b]=a;b==="x"?b="left":b==="y"&&(b="top");this.updateClipping?(this[b]=a,this.updateClipping()):c.style[b]=a},zIndexSetter:function(a,b,c){c.style[b]=a}};K["stroke-opacitySetter"]=K["fill-opacitySetter"];x.VMLElement=K=qa(O,K);K.prototype.ySetter=K.prototype.widthSetter=K.prototype.heightSetter=K.prototype.xSetter;var Bb={Element:K,isIE8:za.indexOf("MSIE 8.0")> --1,init:function(a,b,c,d){var e;this.alignedObjects=[];d=this.createElement(Ma).css(u(this.getStyle(d),{position:"relative"}));e=d.element;a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper=d;this.gradients={};this.cache={};this.cacheKeys=[];this.imgCount=0;this.setSize(b,c,!1);if(!A.namespaces.hcv){A.namespaces.add("hcv","urn:schemas-microsoft-com:vml");try{A.createStyleSheet().cssText="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}catch(f){A.styleSheets[0].cssText+= -"hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}}},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=Z(a);return u(e,{members:[],count:0,left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b=a.element,c=b.nodeName,a=a.inverted,d=this.top-(c==="shape"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:"rect("+B(a?e:d)+"px,"+ -B(a?f:b)+"px,"+B(a?b:f)+"px,"+B(a?d:e)+"px)"};!a&&lb&&c==="DIV"&&u(d,{width:b+"px",height:f+"px"});return d},updateClipping:function(){p(e.members,function(a){a.element&&a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,k="none";a&&a.linearGradient?i="gradient":a&&a.radialGradient&&(i="pattern");if(i){var j,l,m=a.linearGradient||a.radialGradient,n,q,z,s,o,w="",a=a.stops,v,S=[],r=function(){h=[''];ba(e.prepVML(h),null,null,b)};n=a[0];v=a[a.length-1];n[0]>0&&a.unshift([0,n[1]]);v[0]<1&&a.push([1,v[1]]);p(a,function(a,b){g.test(a[1])?(f=ma(a[1]),j=f.get("rgb"),l=f.get("a")):(j=a[1],l=1);S.push(a[0]*100+"% "+j);b?(z=l,s=j):(q=l,o=j)});if(c==="fill")if(i==="gradient")c=m.x1||m[0]||0,a=m.y1||m[1]||0,n=m.x2||m[2]||0,m=m.y2||m[3]||0,w='angle="'+(90-Y.atan((m-a)/(n-c))*180/ra)+'"',r();else{var k=m.r,$=k*2,t=k*2,u=m.cx,y=m.cy,B=b.radialReference,x,k=function(){B&&(x= -d.getBBox(),u+=(B[0]-x.x)/x.width-0.5,y+=(B[1]-x.y)/x.height-0.5,$*=B[2]/x.width,t*=B[2]/x.height);w='src="'+U.global.VMLRadialGradientURL+'" size="'+$+","+t+'" origin="0.5,0.5" position="'+u+","+y+'" color2="'+o+'" ';r()};d.added?k():d.onAdd=k;k=s}else k=j}else if(g.test(a)&&b.tagName!=="IMG")f=ma(a),d[c+"-opacitySetter"](f.get("a"),c,b),k=f.get("rgb");else{k=b.getElementsByTagName(c);if(k.length)k[0].opacity=1,k[0].type="solid";k=a}return k},prepVML:function(a){var b=this.isIE8,a=a.join("");b?(a= -a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=a.indexOf('style="')===-1?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'):a.replace('style="','style="display:inline-block;behavior:url(#default#VML);')):a=a.replace("<","1&&f.attr({x:b,y:c,width:d,height:e});return f},createElement:function(a){return a==="rect"?this.symbol(a):Da.prototype.createElement.call(this,a)},invertChild:function(a,b){var c=this,d=b.style,e=a.tagName==="IMG"&&a.style;M(a,{flip:"x",left:C(d.width)-(e?C(e.top): -1),top:C(d.height)-(e?C(e.left):1),rotation:-90});p(a.childNodes,function(b){c.invertChild(b,a)})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=e.innerR,d=W(f),i=da(f),k=W(g),j=da(g);if(g-f===0)return["x"];f=["wa",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*k,b+h*j];e.open&&!c&&f.push("e","M",a,b);f.push("at",a-c,b-c,a+c,b+c,a+c*k,b+c*j,a+c*d,b+c*i,"x","e");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r);e&&e.isCircle&&(a-=c/2,b-=d/2);return["wa",a,b,a+c,b+d,a+c,b+d/2,a+ -c,b+d/2,"e"]},rect:function(a,b,c,d,e){return Da.prototype.symbols[!r(e)||!e.r?"square":"callout"].call(0,a,b,c,d,e)}}};x.VMLRenderer=K=function(){this.init.apply(this,arguments)};K.prototype=E(Da.prototype,Bb);cb=K}Da.prototype.measureSpanWidth=function(a,b){var c=A.createElement("span"),d;d=A.createTextNode(a);c.appendChild(d);M(c,b);this.box.appendChild(c);d=c.offsetWidth;Sa(c);return d};var Nb;if(ka)x.CanVGRenderer=K=function(){Ha="http://www.w3.org/1999/xhtml"},K.prototype.symbols={},Nb=function(){function a(){var a= -b.length,d;for(d=0;d0&&c+i*k>e&&(n=B((d-c)/W(h*ja)));else if(d=c+(1-i)*k,c-i*ke&&(l=e-a.x+l*i,m=-1),l=F(j,l),ll||b.autoRotation&&g.styles.width)n=l;if(n){q.width=n;if(!b.options.labels.style.textOverflow)q.textOverflow= -"ellipsis";g.css(q)}},getPosition:function(a,b,c,d){var e=this.axis,f=e.chart,g=d&&f.oldChartHeight||f.chartHeight;return{x:a?e.translate(b+c,null,null,d)+e.transB:e.left+e.offset+(e.opposite?(d&&f.oldChartWidth||f.chartWidth)-e.right-e.left:0),y:a?g-e.bottom+e.offset-(e.opposite?e.height:0):g-e.translate(b+c,null,null,d)-e.transB}},getLabelPosition:function(a,b,c,d,e,f,g,h){var i=this.axis,k=i.transA,j=i.reversed,l=i.staggerLines,m=i.tickRotCorr||{x:0,y:0},n=e.y;r(n)||(n=i.side===0?c.rotation?-8: --c.getBBox().height:i.side===2?m.y+8:W(c.rotation*ja)*(m.y-c.getBBox(!1,0).height/2));a=a+e.x+m.x-(f&&d?f*k*(j?-1:1):0);b=b+n-(f&&!d?f*k*(j?1:-1):0);l&&(c=g/(h||1)%l,i.opposite&&(c=l-c-1),b+=c*(i.labelOffset/l));return{x:a,y:B(b)}},getMarkPath:function(a,b,c,d,e,f){return f.crispLine(["M",a,b,"L",a+(e?0:-c),b+(e?c:0)],d)},render:function(a,b,c){var d=this.axis,e=d.options,f=d.chart.renderer,g=d.horiz,h=this.type,i=this.label,k=this.pos,j=e.labels,l=this.gridLine,m=h?h+"Grid":"grid",n=h?h+"Tick":"tick", -q=e[m+"LineWidth"],z=e[m+"LineColor"],s=e[m+"LineDashStyle"],m=d.tickSize(n),n=e[n+"Color"],p=this.mark,w=j.step,v=!0,S=d.tickmarkOffset,r=this.getPosition(g,k,S,b),$=r.x,r=r.y,t=g&&$===d.pos+d.len||!g&&r===d.pos?-1:1,c=o(c,1);this.isActive=!0;if(q){k=d.getPlotLinePath(k+S,q*t,b,!0);if(l===y){l={stroke:z,"stroke-width":q};if(s)l.dashstyle=s;if(!h)l.zIndex=1;if(b)l.opacity=0;this.gridLine=l=q?f.path(k).attr(l).add(d.gridGroup):null}if(!b&&l&&k)l[this.isNew?"attr":"animate"]({d:k,opacity:c})}if(m)d.opposite&& -(m[0]=-m[0]),h=this.getMarkPath($,r,m[0],m[1]*t,g,f),p?p.animate({d:h,opacity:c}):this.mark=f.path(h).attr({stroke:n,"stroke-width":m[1],opacity:c}).add(d.axisGroup);if(i&&J($))i.xy=r=this.getLabelPosition($,r,i,g,j,S,a,w),this.isFirst&&!this.isLast&&!o(e.showFirstLabel,1)||this.isLast&&!this.isFirst&&!o(e.showLastLabel,1)?v=!1:g&&!d.isRadial&&!j.step&&!j.rotation&&!b&&c!==0&&this.handleOverflow(r),w&&a%w&&(v=!1),v&&J(r.y)?(r.opacity=c,i[this.isNew?"attr":"animate"](r),this.isNew=!1):i.attr("y",-9999)}, -destroy:function(){Ra(this,this.axis)}};x.PlotLineOrBand=function(a,b){this.axis=a;if(b)this.options=b,this.id=b.id};x.PlotLineOrBand.prototype={render:function(){var a=this,b=a.axis,c=b.horiz,d=a.options,e=d.label,f=a.label,g=d.width,h=d.to,i=d.from,k=r(i)&&r(h),j=d.value,l=d.dashStyle,m=a.svgElem,n=[],q,z=d.color,s=o(d.zIndex,0),p=d.events,w={},v=b.chart.renderer,n=b.log2lin;b.isLog&&(i=n(i),h=n(h),j=n(j));if(g){if(n=b.getPlotLinePath(j,g),w={stroke:z,"stroke-width":g},l)w.dashstyle=l}else if(k){n= -b.getPlotBandPath(i,h,d);if(z)w.fill=z;if(d.borderWidth)w.stroke=d.borderColor,w["stroke-width"]=d.borderWidth}else return;w.zIndex=s;if(m)if(n)m.show(),m.animate({d:n});else{if(m.hide(),f)a.label=f=f.destroy()}else if(n&&n.length&&(a.svgElem=m=v.path(n).attr(w).add(),p))for(q in d=function(b){m.on(b,function(c){p[b].apply(a,[c])})},p)d(q);e&&r(e.text)&&n&&n.length&&b.width>0&&b.height>0&&!n.flat?(e=E({align:c&&k&&"center",x:c?!k&&4:10,verticalAlign:!c&&k&&"middle",y:c?k?16:10:k?6:-4,rotation:c&& -!k&&90},e),this.renderLabel(e,n,k,s)):f&&f.hide();return a},renderLabel:function(a,b,c,d){var e=this.label,f=this.axis.chart.renderer;if(!e)e={align:a.textAlign||a.align,rotation:a.rotation},e.zIndex=d,this.label=e=f.text(a.text,0,0,a.useHTML).attr(e).css(a.style).add();d=[b[1],b[4],c?b[6]:b[1]];b=[b[2],b[5],c?b[7]:b[2]];c=La(d);f=La(b);e.align(a,!1,{x:c,y:f,width:Ga(d)-c,height:Ga(b)-f});e.show()},destroy:function(){pa(this.axis.plotLinesAndBands,this);delete this.axis;Ra(this)}};var ha=x.Axis=function(){this.init.apply(this, -arguments)};ha.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,gridLineColor:"#D8D8D8",labels:{enabled:!0,style:{color:"#606060",cursor:"default",fontSize:"11px"},x:0},lineColor:"#C0D0E0",lineWidth:1,minPadding:0.01,maxPadding:0.01,minorGridLineColor:"#E0E0E0",minorGridLineWidth:1,minorTickColor:"#A0A0A0",minorTickLength:2,minorTickPosition:"outside",startOfWeek:1, -startOnTick:!1,tickColor:"#C0D0E0",tickLength:10,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",title:{align:"middle",style:{color:"#707070"}},type:"linear"},defaultYAxisOptions:{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0,title:{rotation:270,text:"Values"},stackLabels:{enabled:!1,formatter:function(){return x.numberFormat(this.total,-1)},style:E(ea.line.dataLabels.style,{color:"#000000"})}}, -defaultLeftAxisOptions:{labels:{x:-15},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:15},title:{rotation:90}},defaultBottomAxisOptions:{labels:{autoRotation:[-45],x:0},title:{rotation:0}},defaultTopAxisOptions:{labels:{autoRotation:[-45],x:0},title:{rotation:0}},init:function(a,b){var c=b.isX;this.chart=a;this.horiz=a.inverted?!c:c;this.coll=(this.isXAxis=c)?"xAxis":"yAxis";this.opposite=b.opposite;this.side=b.side||(this.horiz?this.opposite?0:2:this.opposite?1:3);this.setOptions(b);var d= -this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.reversed=d.reversed;this.visible=d.visible!==!1;this.zoomEnabled=d.zoomEnabled!==!1;this.categories=d.categories||e==="category";this.names=this.names||[];this.isLog=e==="logarithmic";this.isDatetimeAxis=e==="datetime";this.isLinked=r(d.linkedTo);this.ticks={};this.labelEdge=[];this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange= -this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.stacksTouched=0;this.min=this.max=null;this.crosshair=o(d.crosshair,ta(a.options.tooltip.crosshairs)[c?0:1],!1);var f,d=this.options.events;sa(this,a.axes)===-1&&(c&&!this.isColorAxis?a.axes.splice(a.xAxis.length,0,this):a.axes.push(this),a[this.coll].push(this));this.series=this.series||[];if(a.inverted&&c&&this.reversed===y)this.reversed=!0;this.removePlotLine=this.removePlotBand= -this.removePlotBandOrLine;for(f in d)N(this,f,d[f]);if(this.isLog)this.val2lin=this.log2lin,this.lin2val=this.lin2log},setOptions:function(a){this.options=E(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],E(U[this.coll],a))},defaultLabelFormatter:function(){var a=this.axis,b=this.value,c=a.categories,d=this.dateTimeLabelFormat,e=U.lang.numericSymbols,f=e&&e.length, -g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=Ka(h,this);else if(c)g=b;else if(d)g=Qa(d,b);else if(f&&a>=1E3)for(;f--&&g===y;)c=Math.pow(1E3,f+1),a>=c&&b*10%c===0&&e[f]!==null&&(g=x.numberFormat(b/c,-1)+e[f]);g===y&&(g=Q(b)>=1E4?x.numberFormat(b,-1):x.numberFormat(b,-1,y,""));return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=a.threshold=null;a.softThreshold=!a.isXAxis;a.buildStacks&&a.buildStacks();p(a.series,function(c){if(c.visible|| -!b.options.chart.ignoreHiddenSeries){var d=c.options,e=d.threshold,f;a.hasVisibleSeries=!0;a.isLog&&e<=0&&(e=null);if(a.isXAxis){if(d=c.xData,d.length)c=La(d),!J(c)&&!(c instanceof la)&&(d=Ba(d,function(a){return J(a)}),c=La(d)),a.dataMin=F(o(a.dataMin,d[0]),c),a.dataMax=t(o(a.dataMax,d[0]),Ga(d))}else{c.getExtremes();f=c.dataMax;c=c.dataMin;if(r(c)&&r(f))a.dataMin=F(o(a.dataMin,c),c),a.dataMax=t(o(a.dataMax,f),f);if(r(e))a.threshold=e;if(!d.softThreshold||a.isLog)a.softThreshold=!1}}})},translate:function(a, -b,c,d,e,f){var g=this.linkedParent||this,h=1,i=0,k=d?g.oldTransA:g.transA,d=d?g.oldMin:g.min,j=g.minPixelPadding,e=(g.isOrdinal||g.isBroken||g.isLog&&e)&&g.lin2val;if(!k)k=g.transA;if(c)h*=-1,i=g.len;g.reversed&&(h*=-1,i-=h*(g.sector||g.len));b?(a=a*h+i,a-=j,a=a/k+d,e&&(a=g.lin2val(a))):(e&&(a=g.val2lin(a)),f==="between"&&(f=0.5),a=h*(a-d)*k+i+h*j+(J(f)?k*f*g.pointRange:0));return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a- -(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,b,c,d,e){var f=this.chart,g=this.left,h=this.top,i,k,j=c&&f.oldChartHeight||f.chartHeight,l=c&&f.oldChartWidth||f.chartWidth,m;i=this.transB;var n=function(a,b,c){if(ac)d?a=F(t(b,a),c):m=!0;return a},e=o(e,this.translate(a,null,null,c)),a=c=B(e+i);i=k=B(j-e-i);J(e)?this.horiz?(i=h,k=j-this.bottom,a=c=n(a,g,g+this.width)):(a=g,c=l-this.right,i=k=n(i,h,h+this.height)):m=!0;return m&&!d?null:f.renderer.crispLine(["M",a,i,"L",c, -k],b||1)},getLinearTickPositions:function(a,b,c){var d,e=ca(V(b/a)*a),f=ca(ua(c/a)*a),g=[];if(b===c&&J(b))return[b];for(b=e;b<=f;){g.push(b);b=ca(b+a);if(b===d)break;d=b}return g},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e,f=this.pointRangePadding||0;e=this.min-f;var f=this.max+f,g=f-e;if(g&&g/c=this.minRange,f,g,h,i,k,j;if(this.isXAxis&&this.minRange===y&&!this.isLog)r(a.min)||r(a.max)?this.minRange=null:(p(this.series,function(a){i=a.xData;for(g=k=a.xIncrement?1:i.length-1;g>0;g--)if(h=i[g]- -i[g-1],f===y||h=q?(s=q,j=0):b.dataMax<=q&&(G=q,k=0)),b.min=o(w,s,b.dataMin),b.max=o(v,G,b.dataMax));if(e)!a&&F(b.min,o(b.dataMin,b.min))<=0&&aa(10,1),b.min=ca(f(b.min),15),b.max=ca(f(b.max),15);if(b.range&&r(b.max))b.userMin=b.min=w=t(b.min,b.minFromRange()),b.userMax=v=b.max,b.range=null;I(b,"foundExtremes");b.beforePadding&&b.beforePadding();b.adjustForMinRange();if(!n&&!b.axisPointRange&&!b.usePercentage&& -!i&&r(b.min)&&r(b.max)&&(f=b.max-b.min))!r(w)&&j&&(b.min-=f*j),!r(v)&&k&&(b.max+=f*k);if(J(d.floor))b.min=t(b.min,d.floor);if(J(d.ceiling))b.max=F(b.max,d.ceiling);if(z&&r(b.dataMin))if(q=q||0,!r(w)&&b.min=q)b.min=q;else if(!r(v)&&b.max>q&&b.dataMax<=q)b.max=q;b.tickInterval=b.min===b.max||b.min===void 0||b.max===void 0?1:i&&!l&&m===b.linkedParent.options.tickPixelInterval?l=b.linkedParent.tickInterval:o(l,this.tickAmount?(b.max-b.min)/t(this.tickAmount-1,1):void 0,n?1:(b.max-b.min)* -m/t(b.len,m));h&&!a&&p(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions();if(b.postProcessTickInterval)b.tickInterval=b.postProcessTickInterval(b.tickInterval);if(b.pointRange&&!l)b.tickInterval=t(b.pointRange,b.tickInterval);a=o(d.minTickInterval,b.isDatetimeAxis&&b.closestPointRange);if(!l&&b.tickInterval0.5&&b.tickInterval<5&&b.max>1E3&&b.max<9999)),!!this.tickAmount);if(!this.tickAmount&&this.len)b.tickInterval=b.unsquish();this.setTickPositions()},setTickPositions:function(){var a=this.options,b,c=a.tickPositions,d=a.tickPositioner,e=a.startOnTick,f=a.endOnTick,g;this.tickmarkOffset=this.categories&&a.tickmarkPlacement==="between"&&this.tickInterval===1?0.5:0;this.minorTickInterval=a.minorTickInterval==="auto"&&this.tickInterval?this.tickInterval/5:a.minorTickInterval;this.tickPositions= -b=c&&c.slice();if(!b&&(b=this.isDatetimeAxis?this.getTimeTicks(this.normalizeTimeTickInterval(this.tickInterval,a.units),this.min,this.max,a.startOfWeek,this.ordinalPositions,this.closestPointRange,!0):this.isLog?this.getLogTickPositions(this.tickInterval,this.min,this.max):this.getLinearTickPositions(this.tickInterval,this.min,this.max),b.length>this.len&&(b=[b[0],b.pop()]),this.tickPositions=b,d&&(d=d.apply(this,[this.min,this.max]))))this.tickPositions=b=d;if(!this.isLinked)this.trimTicks(b,e, -f),this.min===this.max&&r(this.min)&&!this.tickAmount&&(g=!0,this.min-=0.5,this.max+=0.5),this.single=g,!c&&!d&&this.adjustTickAmount()},trimTicks:function(a,b,c){var d=a[0],e=a[a.length-1],f=this.minPointOffset||0;if(b)this.min=d;else for(;this.min-f>a[0];)a.shift();if(c)this.max=e;else for(;this.max+fc&&(this.tickInterval*=2,this.setTickPositions());if(r(d)){for(a=c=b.length;a--;)(d===3&&a%2===1||d<=2&&a>0&&a=e&&(b=e));this.displayBtn=a!==y||b!==y;this.setExtremes(a,b,!1,y,{trigger:"zoom"});return!0},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,d=this.horiz,e=o(b.width,a.plotWidth-c+(b.offsetRight||0)),f=o(b.height, -a.plotHeight),g=o(b.top,a.plotTop),b=o(b.left,a.plotLeft+c),c=/%$/;c.test(f)&&(f=Math.round(parseFloat(f)/100*a.plotHeight));c.test(g)&&(g=Math.round(parseFloat(g)/100*a.plotHeight+a.plotTop));this.left=b;this.top=g;this.width=e;this.height=f;this.bottom=a.chartHeight-f-g;this.right=a.chartWidth-e-b;this.len=t(d?e:f,0);this.pos=d?b:g},getExtremes:function(){var a=this.isLog,b=this.lin2log;return{min:a?ca(b(this.min)):this.min,max:a?ca(b(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax, -userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=this.lin2log,d=b?c(this.min):this.min,b=b?c(this.max):this.max;a===null?a=b<0?b:d:d>a?a=d:b15&&a<165?"right":a>195&&a<345?"left":"center"},tickSize:function(a){var b=this.options,c=b[a+"Length"],d=o(b[a+"Width"],a==="tick"&&this.isXAxis?1:0);if(d&&c)return b[a+"Position"]==="inside"&&(c=-c),[c,d]},labelMetrics:function(){return this.chart.renderer.fontMetrics(this.options.labels.style.fontSize, -this.ticks[0]&&this.ticks[0].label)},unsquish:function(){var a=this.options.labels,b=this.horiz,c=this.tickInterval,d=c,e=this.len/(((this.categories?1:0)+this.max-this.min)/c),f,g=a.rotation,h=this.labelMetrics(),i,k=Number.MAX_VALUE,j,l=function(a){a/=e||1;a=a>1?ua(a):1;return a*c};b?(j=!a.staggerLines&&!a.step&&(r(g)?[g]:e=-90&&a<=90)i=l(Q(h.h/da(ja*a))),b=i+Q(a/360),bm)m=a.labelLength}),m>h&&m>k.h?i.rotation=this.labelRotation:this.labelRotation=0;else if(g&&(l={width:h+"px"},!j)){l.textOverflow="clip";for(n=c.length;!f&&n--;)if(q=c[n],h=d[q].label)if(h.styles.textOverflow==="ellipsis"?h.css({textOverflow:"clip"}):d[q].labelLength>g&&h.css({width:g+"px"}),h.getBBox().height>this.len/c.length-(k.h-k.f))h.specCss={textOverflow:"ellipsis"}}if(i.rotation&& -(l={width:(m>a.chartHeight*0.5?a.chartHeight*0.33:a.chartHeight)+"px"},!j))l.textOverflow="ellipsis";if(this.labelAlign=e.align||this.autoLabelAlign(this.labelRotation))i.align=this.labelAlign;p(c,function(a){var b=(a=d[a])&&a.label;if(b)b.attr(i),l&&b.css(E(l,b.specCss)),delete b.specCss,a.rotation=i.rotation});this.tickRotCorr=b.rotCorr(k.b,this.labelRotation||0,this.side!==0)},hasData:function(){return this.hasVisibleSeries||r(this.min)&&r(this.max)&&!!this.tickPositions},getOffset:function(){var a= -this,b=a.chart,c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,k,j,l=0,m,n=0,q=d.title,z=d.labels,s=0,G=a.opposite,w=b.axisOffset,b=b.clipOffset,v=[-1,1,1,-1][h],S,u=a.axisParent,$=this.tickSize("tick");k=a.hasData();a.showAxis=j=k||o(d.showEmpty,!0);a.staggerLines=a.horiz&&z.staggerLines;if(!a.axisGroup)a.gridGroup=c.g("grid").attr({zIndex:d.gridZIndex||1}).add(u),a.axisGroup=c.g("axis").attr({zIndex:d.zIndex||2}).add(u),a.labelGroup=c.g("axis-labels").attr({zIndex:z.zIndex|| -7}).addClass("highcharts-"+a.coll.toLowerCase()+"-labels").add(u);if(k||a.isLinked){if(p(e,function(b){f[b]?f[b].addLabel():f[b]=new Va(a,b)}),a.renderUnsquish(),z.reserveSpace!==!1&&(h===0||h===2||{1:"left",3:"right"}[h]===a.labelAlign||a.labelAlign==="center")&&p(e,function(a){s=t(f[a].getLabelSize(),s)}),a.staggerLines)s*=a.staggerLines,a.labelOffset=s*(a.opposite?-1:1)}else for(S in f)f[S].destroy(),delete f[S];if(q&&q.text&&q.enabled!==!1){if(!a.axisTitle)(S=q.textAlign)||(S=(g?{low:"left",middle:"center", -high:"right"}:{low:G?"right":"left",middle:"center",high:G?"left":"right"})[q.align]),a.axisTitle=c.text(q.text,0,0,q.useHTML).attr({zIndex:7,rotation:q.rotation||0,align:S}).addClass("highcharts-"+this.coll.toLowerCase()+"-title").css(q.style).add(a.axisGroup),a.axisTitle.isNew=!0;if(j)l=a.axisTitle.getBBox()[g?"height":"width"],m=q.offset,n=r(m)?0:o(q.margin,g?5:10);a.axisTitle[j?"show":"hide"](!0)}a.offset=v*o(d.offset,w[h]);a.tickRotCorr=a.tickRotCorr||{x:0,y:0};c=h===0?-a.labelMetrics().h:h=== -2?a.tickRotCorr.y:0;n=Math.abs(s)+n;s&&(n-=c,n+=v*(g?o(z.y,a.tickRotCorr.y+v*8):z.x));a.axisTitleMargin=o(m,n);w[h]=t(w[h],a.axisTitleMargin+l+v*a.offset,n,k&&e.length&&$?$[0]:0);d=d.offset?0:V(d.lineWidth/2)*2;b[i]=t(b[i],d)},getLinePath:function(a){var b=this.chart,c=this.opposite,d=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&(a*=-1);return b.renderer.crispLine(["M",e?this.left:f,e?d:this.top,"L",e?b.chartWidth-this.right:f,e?d:b.chartHeight- -this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite,h=this.offset,i=e.x||0,k=e.y||0,j=C(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)*this.axisTitleMargin+(this.side===2?j:0);return{x:a?d+i:b+(g?this.width:0)+h+i,y:a?b+k-(g?this.height:0)+h:d+k}},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.isLog,f=a.lin2log,g=a.isLinked, -h=a.tickPositions,i=a.axisTitle,k=a.ticks,j=a.minorTicks,l=a.alternateBands,m=d.stackLabels,n=d.alternateGridColor,q=a.tickmarkOffset,z=d.lineWidth,s,o=b.hasRendered&&J(a.oldMin),w=a.showAxis,v=$a(c.globalAnimation),r,t;a.labelEdge.length=0;a.overlap=!1;p([k,j,l],function(a){for(var b in a)a[b].isActive=!1});if(a.hasData()||g){a.minorTickInterval&&!a.categories&&p(a.getMinorTickPositions(),function(b){j[b]||(j[b]=new Va(a,b,"minor"));o&&j[b].isNew&&j[b].render(null,!0);j[b].render(null,!1,1)});if(h.length&& -(p(h,function(b,c){if(!g||b>=a.min&&b<=a.max)k[b]||(k[b]=new Va(a,b)),o&&k[b].isNew&&k[b].render(c,!0,0.1),k[b].render(c)}),q&&(a.min===0||a.single)))k[-1]||(k[-1]=new Va(a,-1,null,!0)),k[-1].render(-1);n&&p(h,function(c,d){t=h[d+1]!==y?h[d+1]+q:a.max-q;if(d%2===0&&c=H.second?0:j*V(i.getMilliseconds()/j));if(k>=H.second)i[Gb](k>=H.minute?0:j*V(i.getSeconds()/j));if(k>=H.minute)i[Hb](k>=H.hour?0:j*V(i[tb]()/j));if(k>=H.hour)i[Ib](k>=H.day?0:j*V(i[ub]()/j)); -if(k>=H.day)i[kb](k>=H.month?1:j*V(i[Ua]()/j));k>=H.month&&(i[wb](k>=H.year?0:j*V(i[ab]()/j)),h=i[bb]());k>=H.year&&(h-=h%j,i[xb](h));if(k===H.week)i[kb](i[Ua]()-i[vb]()+o(d,1));b=1;if(qb||Za)i=i.getTime(),i=new la(i+Ya(i));h=i[bb]();for(var d=i.getTime(),l=i[ab](),m=i[Ua](),n=!g||!!Za,q=(H.day+(g?Ya(i):i.getTimezoneOffset()*6E4))%H.day;d=0.5)a=B(a),i=this.getLinearTickPositions(a,b,c);else if(a>=0.08)for(var f=V(b),k,j,l,m,n,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];fb&&(!d||m<=c)&&m!==y&&i.push(m),m> -c&&(n=!0),m=l}else if(b=g(b),c=g(c),a=e[d?"minorTickInterval":"tickInterval"],a=o(a==="auto"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)||1)),a=sb(a,null,rb(a)),i=Ca(this.getLinearTickPositions(a,b,c),h),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval=a;return i};ha.prototype.log2lin=function(a){return Y.log(a)/Y.LN10};ha.prototype.lin2log=function(a){return Y.pow(10,a)};var Ob=x.Tooltip=function(){this.init.apply(this,arguments)};Ob.prototype= -{init:function(a,b){var c=b.borderWidth,d=b.style,e=C(d.padding);this.chart=a;this.options=b;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.label=a.renderer.label("",0,0,b.shape||"callout",null,null,b.useHTML,null,"tooltip").attr({padding:e,fill:b.backgroundColor,"stroke-width":c,r:b.borderRadius,zIndex:8}).css(d).css({padding:0}).add().attr({y:-9999});ka||this.label.shadow(b.shadow);this.shared=b.shared},destroy:function(){if(this.label)this.label=this.label.destroy();clearTimeout(this.hideTimer); -clearTimeout(this.tooltipTimeout)},move:function(a,b,c,d){var e=this,f=e.now,g=e.options.animation!==!1&&!e.isHidden&&(Q(a-f.x)>1||Q(b-f.y)>1),h=e.followPointer||e.len>1;u(f,{x:g?(2*f.x+a)/3:a,y:g?(f.y+b)/2:b,anchorX:h?y:g?(2*f.anchorX+c)/3:c,anchorY:h?y:g?(f.anchorY+d)/2:d});e.label.attr(f);if(g)clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b,c,d)},32)},hide:function(a){var b=this;clearTimeout(this.hideTimer);a=o(a,this.options.hideDelay,500);if(!this.isHidden)this.hideTimer= -Pa(function(){b.label[a?"fadeOut":"hide"]();b.isHidden=!0},a)},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted,f=d.plotTop,g=d.plotLeft,h=0,i=0,k,j,a=ta(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===y&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY-f]);c||(p(a,function(a){k=a.series.yAxis;j=a.series.xAxis;h+=a.plotX+(!e&&j?j.left-g:0);i+=(a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&k?k.top-f:0)}),h/=a.length,i/=a.length,c=[e?d.plotWidth-i:h,this.shared&&!e&&a.length> -1&&b?b.chartY-f:e?d.plotHeight-h:i]);return Ca(c,B)},getPosition:function(a,b,c){var d=this.chart,e=this.distance,f={},g=c.h||0,h,i=["y",d.chartHeight,b,c.plotY+d.plotTop,d.plotTop,d.plotTop+d.plotHeight],k=["x",d.chartWidth,a,c.plotX+d.plotLeft,d.plotLeft,d.plotLeft+d.plotWidth],j=!this.followPointer&&o(c.ttBelow,!d.inverted===!!c.negative),l=function(a,b,c,d,h,i){var k=cb?d: -d+g);else return!1},m=function(a,b,c,d){var g;db-e?g=!1:f[a]=db-c/2?b-c-2:d-c/2;return g},n=function(a){var b=i;i=k;k=b;h=a},q=function(){l.apply(0,i)!==!1?m.apply(0,k)===!1&&!h&&(n(!0),q()):h?f.x=f.y=0:(n(!0),q())};(d.inverted||this.len>1)&&n();q();return f},defaultFormatter:function(a){var b=this.points||ta(this),c;c=[a.tooltipFooterHeaderFormatter(b[0])];c=c.concat(a.bodyFormatter(b));c.push(a.tooltipFooterHeaderFormatter(b[0],!0));return c.join("")},refresh:function(a,b){var c= -this.chart,d=this.label,e=this.options,f,g,h,i={},k,j=[];k=e.formatter||this.defaultFormatter;var i=c.hoverPoints,l,m=this.shared;clearTimeout(this.hideTimer);this.followPointer=ta(a)[0].series.tooltipOptions.followPointer;h=this.getAnchor(a,b);f=h[0];g=h[1];m&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints=a,i&&p(i,function(a){a.setState()}),p(a,function(a){a.setState("hover");j.push(a.getLabelConfig())}),i={x:a[0].category,y:a[0].y},i.points=j,this.len=j.length,a=a[0]):i=a.getLabelConfig(); -k=k.call(i,this);i=a.series;this.distance=o(i.tooltipOptions.distance,16);k===!1?this.hide():(this.isHidden&&(Oa(d),d.attr("opacity",1).show()),d.attr({text:k}),l=e.borderColor||a.color||i.color||"#606060",d.attr({stroke:l}),this.updatePosition({plotX:f,plotY:g,negative:a.negative,ttBelow:a.ttBelow,h:h[2]||0}),this.isHidden=!1);I(c,"tooltipRefresh",{text:k,x:f+c.plotLeft,y:g+c.plotTop,borderColor:l})},updatePosition:function(a){var b=this.chart,c=this.label,c=(this.options.positioner||this.getPosition).call(this, -c.width,c.height,a);this.move(B(c.x),B(c.y||0),a.plotX+b.plotLeft,a.plotY+b.plotTop)},getXDateFormat:function(a,b,c){var d,b=b.dateTimeLabelFormats,e=c&&c.closestPointRange,f,g={millisecond:15,second:12,minute:9,hour:6,day:3},h,i="millisecond";if(e){h=Qa("%m-%d %H:%M:%S.%L",a.x);for(f in H){if(e===H.week&&+Qa("%w",a.x)===c.options.startOfWeek&&h.substr(6)==="00:00:00.000"){f="week";break}if(H[f]>e){f=i;break}if(g[f]&&h.substr(g[f])!=="01-01 00:00:00.000".substr(g[f]))break;f!=="week"&&(i=f)}f&&(d= -b[f])}else d=b.day;return d||b.year},tooltipFooterHeaderFormatter:function(a,b){var c=b?"footer":"header",d=a.series,e=d.tooltipOptions,f=e.xDateFormat,g=d.xAxis,h=g&&g.options.type==="datetime"&&J(a.key),c=e[c+"Format"];h&&!f&&(f=this.getXDateFormat(a,e,g));h&&f&&(c=c.replace("{point.key}","{point.key:"+f+"}"));return Ka(c,{point:a,series:d})},bodyFormatter:function(a){return Ca(a,function(a){var c=a.series.tooltipOptions;return(c.pointFormatter||a.point.tooltipFormatter).call(a.point,c.pointFormat)})}}; -var ia;db=A&&A.documentElement.ontouchstart!==y;var Xa=x.Pointer=function(a,b){this.init(a,b)};Xa.prototype={init:function(a,b){var c=b.chart,d=c.events,e=ka?"":c.zoomType,c=a.inverted,f;this.options=b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&&!c||f&&c;this.hasZoom=f||e;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(x.Tooltip&&b.tooltip.enabled)a.tooltip=new Ob(a,b.tooltip),this.followTouchMove=o(b.tooltip.followTouchMove, -!0);this.setDOMEvents()},normalize:function(a,b){var c,d,a=a||D.event;if(!a.target)a.target=a.srcElement;d=a.touches?a.touches.length?a.touches.item(0):a.changedTouches[0]:a;if(!b)this.chartPosition=b=zb(this.chart.container);d.pageX===y?(c=t(a.x,a.clientX-b.left),d=a.y):(c=d.pageX-b.left,d=d.pageY-b.top);return u(a,{chartX:B(c),chartY:B(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};p(this.chart.axes,function(c){b[c.isXAxis?"xAxis":"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX": -"chartY"])})});return b},runPointActions:function(a){var b=this.chart,c=b.series,d=b.tooltip,e=d?d.shared:!1,f=b.hoverPoint,g=b.hoverSeries,h,i=[Number.MAX_VALUE,Number.MAX_VALUE],k,j,l=[],m=[],n;if(!e&&!g)for(h=0;h=m[c].series.group.zIndex;if(a[b]h+k&&(d=h+k),ei+j&&(e=i+j),this.hasDragged=Math.sqrt(Math.pow(n-d,2)+Math.pow(q-e,2)),this.hasDragged>10){l=b.isInsidePlot(n-h,q-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&l&&!o&&!m)this.selectionMarker=m=b.renderer.rect(h,i, -f?1:k,g?1:j,0).attr({fill:c.selectionMarkerFill||"rgba(69,114,167,0.25)",zIndex:7}).add();m&&f&&(d-=n,m.attr({width:Q(d),x:(d>0?0:d)+n}));m&&g&&(d=e-q,m.attr({height:Q(d),y:(d>0?0:d)+q}));l&&!m&&c.panning&&b.pan(a,c.panning)}},drop:function(a){var b=this,c=this.chart,d=this.hasPinched;if(this.selectionMarker){var e={originalEvent:a,xAxis:[],yAxis:[]},f=this.selectionMarker,g=f.attr?f.attr("x"):f.x,h=f.attr?f.attr("y"):f.y,i=f.attr?f.attr("width"):f.width,k=f.attr?f.attr("height"):f.height,j;if(this.hasDragged|| -d)p(c.axes,function(c){if(c.zoomEnabled&&r(c.min)&&(d||b[{xAxis:"zoomX",yAxis:"zoomY"}[c.coll]])){var f=c.horiz,n=a.type==="touchend"?c.minPixelPadding:0,q=c.toValue((f?g:h)+n),f=c.toValue((f?g+i:h+k)-n);e[c.coll].push({axis:c,min:F(q,f),max:t(q,f)});j=!0}}),j&&I(c,"selection",e,function(a){c.zoom(u(a,d?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy();d&&this.scaleGroups()}if(c)M(c.container,{cursor:c._cursor}),c.cancelClick=this.hasDragged>10,c.mouseIsDown=this.hasDragged= -this.hasPinched=!1,this.pinchDown=[]},onContainerMouseDown:function(a){a=this.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){T[ia]&&T[ia].pointer.drop(a)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition,a=this.normalize(a,c);c&&!this.inClass(a.target,"highcharts-tracker")&&!b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(a){var b=T[ia];if(b&&(a.relatedTarget||a.toElement))b.pointer.reset(), -b.pointer.chartPosition=null},onContainerMouseMove:function(a){var b=this.chart;if(!r(ia)||!T[ia]||!T[ia].mouseIsDown)ia=b.index;a=this.normalize(a);a.returnValue=!1;b.mouseIsDown==="mousedown"&&this.drag(a);(this.inClass(a.target,"highcharts-tracker")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)},inClass:function(a,b){for(var c;a;){if(c=P(a,"class")){if(c.indexOf(b)!==-1)return!0;if(c.indexOf("highcharts-container")!==-1)return!1}a=a.parentNode}}, -onTrackerMouseOut:function(a){var b=this.chart.hoverSeries,a=a.relatedTarget||a.toElement;if(b&&a&&!b.options.stickyTracking&&!this.inClass(a,"highcharts-tooltip")&&!this.inClass(a,"highcharts-series-"+b.index))b.onMouseOut()},onContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,a=this.normalize(a);b.cancelClick||(c&&this.inClass(a.target,"highcharts-tracker")?(I(c.series,"click",u(a,{point:c})),b.hoverPoint&&c.firePointEvent("click",a)):(u(a,this.getCoordinates(a)), -b.isInsidePlot(a.chartX-d,a.chartY-e)&&I(b,"click",a)))},setDOMEvents:function(){var a=this,b=a.chart.container;b.onmousedown=function(b){a.onContainerMouseDown(b)};b.onmousemove=function(b){a.onContainerMouseMove(b)};b.onclick=function(b){a.onContainerClick(b)};N(b,"mouseleave",a.onContainerMouseLeave);eb===1&&N(A,"mouseup",a.onDocumentMouseUp);if(db)b.ontouchstart=function(b){a.onContainerTouchStart(b)},b.ontouchmove=function(b){a.onContainerTouchMove(b)},eb===1&&N(A,"touchend",a.onDocumentTouchEnd)}, -destroy:function(){var a;X(this.chart.container,"mouseleave",this.onContainerMouseLeave);eb||(X(A,"mouseup",this.onDocumentMouseUp),X(A,"touchend",this.onDocumentTouchEnd));clearInterval(this.tooltipTimeout);for(a in this)this[a]=null}};u(x.Pointer.prototype,{pinchTranslate:function(a,b,c,d,e,f){(this.zoomHor||this.pinchHor)&&this.pinchTranslateDirection(!0,a,b,c,d,e,f);(this.zoomVert||this.pinchVert)&&this.pinchTranslateDirection(!1,a,b,c,d,e,f)},pinchTranslateDirection:function(a,b,c,d,e,f,g,h){var i= -this.chart,k=a?"x":"y",j=a?"X":"Y",l="chart"+j,m=a?"width":"height",n=i["plot"+(a?"Left":"Top")],q,o,s=h||1,p=i.inverted,w=i.bounds[a?"h":"v"],v=b.length===1,r=b[0][l],t=c[0][l],u=!v&&b[1][l],x=!v&&c[1][l],B,c=function(){!v&&Q(r-u)>20&&(s=h||Q(t-x)/Q(r-u));o=(n-t)/s+r;q=i["plot"+(a?"Width":"Height")]/s};c();b=o;bw.max&&(b=w.max-q,B=!0);B?(t-=0.8*(t-g[k][0]),v||(x-=0.8*(x-g[k][1])),c()):g[k]=[t,x];p||(f[k]=o-n,f[m]=q);f=p?1/s:s;e[m]=q;e[k]=b;d[p?a?"scaleY":"scaleX":"scale"+ -j]=s;d["translate"+j]=f*n+(t-f*r)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown,e=a.touches,f=e.length,g=b.lastValidTouch,h=b.hasZoom,i=b.selectionMarker,k={},j=f===1&&(b.inClass(a.target,"highcharts-tracker")&&c.runTrackerClick||b.runChartClick),l={};if(f>1)b.initiated=!0;h&&b.initiated&&!j&&a.preventDefault();Ca(e,function(a){return b.normalize(a)});if(a.type==="touchstart")p(e,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),g.x=[d[0].chartX,d[1]&&d[1].chartX],g.y=[d[0].chartY,d[1]&& -d[1].chartY],p(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?"h":"v"],d=a.minPixelPadding,e=a.toPixels(o(a.options.min,a.dataMin)),f=a.toPixels(o(a.options.max,a.dataMax)),g=F(e,f),e=t(e,f);b.min=F(a.pos,g-d);b.max=t(a.pos+a.len,e+d)}}),b.res=!0;else if(d.length){if(!i)b.selectionMarker=i=u({destroy:Aa,touch:!0},c.plotBox);b.pinchTranslate(d,e,k,i,l,g);b.hasPinched=h;b.scaleGroups(k,l);if(!h&&b.followTouchMove&&f===1)this.runPointActions(b.normalize(a));else if(b.res)b.res=!1,this.reset(!1, -0)}},touch:function(a,b){var c=this.chart,d;ia=c.index;if(a.touches.length===1)if(a=this.normalize(a),c.isInsidePlot(a.chartX-c.plotLeft,a.chartY-c.plotTop)&&!c.openMenu){b&&this.runPointActions(a);if(a.type==="touchmove")c=this.pinchDown,d=c[0]?Math.sqrt(Math.pow(c[0].chartX-a.chartX,2)+Math.pow(c[0].chartY-a.chartY,2))>=4:!1;o(d,!0)&&this.pinch(a)}else b&&this.reset();else a.touches.length===2&&this.pinch(a)},onContainerTouchStart:function(a){this.touch(a,!0)},onContainerTouchMove:function(a){this.touch(a)}, -onDocumentTouchEnd:function(a){T[ia]&&T[ia].pointer.drop(a)}});if(D.PointerEvent||D.MSPointerEvent){var va={},Cb=!!D.PointerEvent,Rb=function(){var a,b=[];b.item=function(a){return this[a]};for(a in va)va.hasOwnProperty(a)&&b.push({pageX:va[a].pageX,pageY:va[a].pageY,target:va[a].target});return b},Db=function(a,b,c,d){if((a.pointerType==="touch"||a.pointerType===a.MSPOINTER_TYPE_TOUCH)&&T[ia])d(a),d=T[ia].pointer,d[b]({type:c,target:a.currentTarget,preventDefault:Aa,touches:Rb()})};u(Xa.prototype, -{onContainerPointerDown:function(a){Db(a,"onContainerTouchStart","touchstart",function(a){va[a.pointerId]={pageX:a.pageX,pageY:a.pageY,target:a.currentTarget}})},onContainerPointerMove:function(a){Db(a,"onContainerTouchMove","touchmove",function(a){va[a.pointerId]={pageX:a.pageX,pageY:a.pageY};if(!va[a.pointerId].target)va[a.pointerId].target=a.currentTarget})},onDocumentPointerUp:function(a){Db(a,"onDocumentTouchEnd","touchend",function(a){delete va[a.pointerId]})},batchMSEvents:function(a){a(this.chart.container, -Cb?"pointerdown":"MSPointerDown",this.onContainerPointerDown);a(this.chart.container,Cb?"pointermove":"MSPointerMove",this.onContainerPointerMove);a(A,Cb?"pointerup":"MSPointerUp",this.onDocumentPointerUp)}});fb(Xa.prototype,"init",function(a,b,c){a.call(this,b,c);this.hasZoom&&M(b.container,{"-ms-touch-action":"none","touch-action":"none"})});fb(Xa.prototype,"setDOMEvents",function(a){a.apply(this);(this.hasZoom||this.followTouchMove)&&this.batchMSEvents(N)});fb(Xa.prototype,"destroy",function(a){this.batchMSEvents(X); -a.call(this)})}var ob=x.Legend=function(a,b){this.init(a,b)};ob.prototype={init:function(a,b){var c=this,d=b.itemStyle,e=b.itemMarginTop||0;this.options=b;if(b.enabled)c.itemStyle=d,c.itemHiddenStyle=E(d,b.itemHiddenStyle),c.itemMarginTop=e,c.padding=d=o(b.padding,8),c.initialItemX=d,c.initialItemY=d-5,c.maxItemWidth=0,c.chart=a,c.itemHeight=0,c.symbolWidth=o(b.symbolWidth,16),c.pages=[],c.render(),N(c.chart,"endResize",function(){c.positionCheckboxes()})},colorizeItem:function(a,b){var c=this.options, -d=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c=b?c.itemStyle.color:g,h=b?a.legendColor||a.color||"#CCC":g,g=a.options&&a.options.marker,i={fill:h},k;d&&d.css({fill:c,color:c});e&&e.attr({stroke:h});if(f){if(g&&f.isMarker)for(k in i.stroke=h,g=a.convertAttribs(g),g)d=g[k],d!==y&&(i[k]=d);f.attr(i)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;(a=a.legendGroup)&&a.element&&a.translate(b?e:this.legendWidth- -e-2*c-4,d);if(f)f.x=e,f.y=d},destroyItem:function(a){var b=a.checkbox;p(["legendItem","legendLine","legendSymbol","legendGroup"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&Sa(a.checkbox)},destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()},positionCheckboxes:function(a){var b=this.group.alignAttr,c,d=this.clipHeight||this.legendHeight,e=this.titleHeight;if(b)c=b.translateY,p(this.allItems,function(f){var g=f.checkbox,h;g&&(h=c+e+g.y+(a||0)+3,M(g, -{left:b.translateX+f.checkboxOffset+g.x-20+"px",top:h+"px",display:h>c-6&&h(m||b.chartWidth-2*k-z-d.x))this.itemX=z,this.itemY+=q+this.lastLineHeight+n,this.lastLineHeight=0;this.maxItemWidth=t(this.maxItemWidth,f);this.lastItemY=q+this.itemY+n;this.lastLineHeight=t(g,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];e?this.itemX+=f:(this.itemY+=q+g+n,this.lastLineHeight=g);this.offsetWidth=m||t((e?this.itemX-z-j:f)+k,this.offsetWidth)}, -getAllItems:function(){var a=[];p(this.chart.series,function(b){var c=b.options;if(o(c.showInLegend,!r(c.linkedTo)?y:!1,!0))a=a.concat(b.legendItems||(c.legendType==="point"?b.data:b))});return a},adjustMargins:function(a,b){var c=this.chart,d=this.options,e=d.align.charAt(0)+d.verticalAlign.charAt(0)+d.layout.charAt(0);this.display&&!d.floating&&p([/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/],function(f,g){f.test(e)&&!r(a[g])&&(c[nb[g]]=t(c[nb[g]],c.legend[(g+1)%2?"legendHeight": -"legendWidth"]+[1,-1,-1,1][g]*d[g%2?"x":"y"]+o(d.margin,12)+b[g]))})},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,i=a.box,k=a.options,j=a.padding,l=k.borderWidth,m=k.backgroundColor;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g("legend").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup);a.renderTitle();e=a.getAllItems();hb(e,function(a,b){return(a.options&&a.options.legendIndex|| -0)-(b.options&&b.options.legendIndex||0)});k.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;a.lastLineHeight=0;p(e,function(b){a.renderItem(b)});g=(k.width||a.offsetWidth)+j;h=a.lastItemY+a.lastLineHeight+a.titleHeight;h=a.handleOverflow(h);h+=j;if(l||m){if(i){if(g>0&&h>0)i[i.isNew?"attr":"animate"](i.crisp({width:g,height:h})),i.isNew=!1}else a.box=i=c.rect(0,0,g,h,k.borderRadius,l||0).attr({stroke:k.borderColor,"stroke-width":l||0,fill:m||"none"}).add(d).shadow(k.shadow),i.isNew=!0;i[f? -"show":"hide"]()}a.legendWidth=g;a.legendHeight=h;p(e,function(b){a.positionItem(b)});f&&d.align(u({width:g,height:h},k),!0,"spacingBox");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign==="top"?-f:f)-this.padding,g=e.maxHeight,h,i=this.clipRect,k=e.navigation,j=o(k.animation,!0),l=k.arrowSize||12,m=this.nav,n=this.pages,q=this.padding,z,s=this.allItems,r=function(a){i.attr({height:a}); -if(b.contentGroup.div)b.contentGroup.div.style.clip="rect("+q+"px,9999px,"+(q+a)+"px,0)"};e.layout==="horizontal"&&(f/=2);g&&(f=F(f,g));n.length=0;if(a>f&&k.enabled!==!1){this.clipHeight=h=t(f-20-this.titleHeight-q,0);this.currentPage=o(this.currentPage,1);this.fullHeight=a;p(s,function(a,b){var c=a._legendItemPos[1],d=B(a.legendItem.getBBox().height),e=n.length;if(!e||c-n[e-1]>h&&(z||c)!==n[e-1])n.push(z||c),e++;b===s.length-1&&c+d-n[e-1]>h&&n.push(c);c!==z&&(z=c)});if(!i)i=b.clipRect=d.clipRect(0, -q,9999,0),b.contentGroup.clip(i);r(h);if(!m)this.nav=m=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol("triangle",0,0,l,l).on("click",function(){b.scroll(-1,j)}).add(m),this.pager=d.text("",15,10).css(k.style).add(m),this.down=d.symbol("triangle-down",0,0,l,l).on("click",function(){b.scroll(1,j)}).add(m);b.scroll(0);a=f}else if(m)r(c.chartHeight),m.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0;return a},scroll:function(a,b){var c=this.pages,d=c.length,e=this.currentPage+a, -f=this.clipHeight,g=this.options.navigation,h=g.activeColor,g=g.inactiveColor,i=this.pager,k=this.padding;e>d&&(e=d);if(e>0)b!==y&&Ta(b,this.chart),this.nav.attr({translateX:k,translateY:f+this.padding+7+this.titleHeight,visibility:"visible"}),this.up.attr({fill:e===1?g:h}).css({cursor:e===1?"default":"pointer"}),i.attr({text:e+"/"+d}),this.down.attr({x:18+this.pager.getBBox().width,fill:e===d?g:h}).css({cursor:e===d?"default":"pointer"}),c=-c[e-1]+this.initialItemY,this.scrollGroup.animate({translateY:c}), -this.currentPage=e,this.positionCheckboxes(c)}};K=x.LegendSymbolMixin={drawRectangle:function(a,b){var c=a.options.symbolHeight||a.fontMetrics.f;b.legendSymbol=this.chart.renderer.rect(0,a.baseline-c+1,a.symbolWidth,c,a.options.symbolRadius||0).attr({zIndex:3}).add(b.legendGroup)},drawLineMarker:function(a){var b=this.options,c=b.marker,d=a.symbolWidth,e=this.chart.renderer,f=this.legendGroup,a=a.baseline-B(a.fontMetrics.b*0.3),g;if(b.lineWidth){g={"stroke-width":b.lineWidth};if(b.dashStyle)g.dashstyle= -b.dashStyle;this.legendLine=e.path(["M",0,a,"L",d,a]).attr(g).add(f)}if(c&&c.enabled!==!1)b=c.radius,this.legendSymbol=c=e.symbol(this.symbol,d/2-b,a-b,2*b,2*b,c).add(f),c.isMarker=!0}};(/Trident\/7\.0/.test(za)||Na)&&fb(ob.prototype,"positionItem",function(a,b){var c=this,d=function(){b._legendItemPos&&a.call(c,b)};d();setTimeout(d)});var gb=x.Chart=function(){this.getArgs.apply(this,arguments)};x.chart=function(a,b,c){return new gb(a,b,c)};gb.prototype={callbacks:[],getArgs:function(){var a=[].slice.call(arguments); -if(xa(a[0])||a[0].nodeName)this.renderTo=a.shift();this.init(a[0],a[1])},init:function(a,b){var c,d=a.series;a.series=null;c=E(U,a);c.series=a.series=d;this.userOptions=a;d=c.chart;this.margin=this.splashArray("margin",d);this.spacing=this.splashArray("spacing",d);var e=d.events;this.bounds={h:{},v:{}};this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=T.length;T.push(f);eb++;d.reflow!==!1&&N(f,"load",function(){f.initReflow()}); -if(e)for(g in e)N(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=ka?!1:o(d.animation,!0);f.pointCount=f.colorCounter=f.symbolCounter=0;f.firstRender()},initSeries:function(a){var b=this.options.chart;(b=L[a.type||b.type||b.defaultSeriesType])||aa(17,!0);b=new b;b.init(this,a);return b},isInsidePlot:function(a,b,c){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend,f=this.isDirtyLegend,g,h,i=this.hasCartesianSeries, -k=this.isDirtyBox,j=c.length,l=j,m=this.renderer,n=m.isHidden(),q=[];Ta(a,this);n&&this.cloneRenderTo();for(this.layOutTitles();l--;)if(a=c[l],a.options.stacking&&(g=!0,a.isDirty)){h=!0;break}if(h)for(l=j;l--;)if(a=c[l],a.options.stacking)a.isDirty=!0;p(c,function(a){a.isDirty&&a.options.legendType==="point"&&(a.updateTotals&&a.updateTotals(),f=!0);a.isDirtyData&&I(a,"updatedData")});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks();if(i&&!this.isResizing)this.maxTicks= -null,p(b,function(a){a.setScale()});this.getMargins();i&&(p(b,function(a){a.isDirty&&(k=!0)}),p(b,function(a){var b=a.min+","+a.max;if(a.extKey!==b)a.extKey=b,q.push(function(){I(a,"afterSetExtremes",u(a.eventArgs,a.getExtremes()));delete a.eventArgs});(k||g)&&a.redraw()}));k&&this.drawChartBox();p(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.reset(!0);m.draw();I(this,"redraw");n&&this.cloneRenderTo(!0);p(q,function(a){a.call()})},get:function(a){var b=this.axes, -c=this.series,d,e;for(d=0;d19?this.containerHeight:400))},cloneRenderTo:function(a){var b= -this.renderToClone,c=this.container;a?b&&(this.renderTo.appendChild(c),Sa(b),delete this.renderToClone):(c&&c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone=b=this.renderTo.cloneNode(0),M(b,{position:"absolute",top:"-9999px",display:"block"}),b.style.setProperty&&b.style.setProperty("display","block","important"),A.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options,c=b.chart,d,e;a=this.renderTo;var f="highcharts-"+yb++;if(!a)this.renderTo= -a=c.renderTo;if(xa(a))this.renderTo=a=A.getElementById(a);a||aa(13,!0);d=C(P(a,"data-highcharts-chart"));J(d)&&T[d]&&T[d].hasRendered&&T[d].destroy();P(a,"data-highcharts-chart",this.index);a.innerHTML="";!c.skipClone&&!a.offsetWidth&&this.cloneRenderTo();this.getChartSize();d=this.chartWidth;e=this.chartHeight;this.container=a=ba(Ma,{className:"highcharts-container"+(c.className?" "+c.className:""),id:f},u({position:"relative",overflow:"hidden",width:d+"px",height:e+"px",textAlign:"left",lineHeight:"normal", -zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)"},c.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=new (x[c.renderer]||cb)(a,d,e,c.style,c.forExport,b.exporting&&b.exporting.allowHTML);ka&&this.renderer.create(this,a,d,e);this.renderer.chartIndex=this.index},getMargins:function(a){var b=this.spacing,c=this.margin,d=this.titleOffset;this.resetMargins();if(d&&!r(c[0]))this.plotTop=t(this.plotTop,d+this.options.title.margin+b[0]);this.legend.adjustMargins(c,b);this.extraBottomMargin&& -(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);a||this.getAxisMargins()},getAxisMargins:function(){var a=this,b=a.axisOffset=[0,0,0,0],c=a.margin;a.hasCartesianSeries&&p(a.axes,function(a){a.visible&&a.getOffset()});p(nb,function(d,e){r(c[e])||(a[d]+=b[e])});a.setChartSize()},reflow:function(a){var b=this,c=b.options.chart,d=b.renderTo,e=c.width||na(d,"width"),f=c.height||na(d,"height"),c=a?a.target:D;if(!b.hasUserSize&&!b.isPrinting&&e&&f&&(c=== -D||c===A)){if(e!==b.containerWidth||f!==b.containerHeight)clearTimeout(b.reflowTimeout),b.reflowTimeout=Pa(function(){if(b.container)b.setSize(e,f,!1),b.hasUserSize=null},a?100:0);b.containerWidth=e;b.containerHeight=f}},initReflow:function(){var a=this,b=function(b){a.reflow(b)};N(D,"resize",b);N(a,"destroy",function(){X(D,"resize",b)})},setSize:function(a,b,c){var d=this,e,f,g=d.renderer;d.isResizing+=1;Ta(c,d);d.oldChartHeight=d.chartHeight;d.oldChartWidth=d.chartWidth;if(r(a))d.chartWidth=e=t(0, -B(a)),d.hasUserSize=!!e;if(r(b))d.chartHeight=f=t(0,B(b));a=g.globalAnimation;(a?Wa:M)(d.container,{width:e+"px",height:f+"px"},a);d.setChartSize(!0);g.setSize(e,f,c);d.maxTicks=null;p(d.axes,function(a){a.isDirty=!0;a.setScale()});p(d.series,function(a){a.isDirty=!0});d.isDirtyLegend=!0;d.isDirtyBox=!0;d.layOutTitles();d.getMargins();d.redraw(c);d.oldChartHeight=null;I(d,"resize");Pa(function(){d&&I(d,"endResize",null,function(){d.isResizing-=1})},$a(a).duration)},setChartSize:function(a){var b= -this.inverted,c=this.renderer,d=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,k,j,l;this.plotLeft=i=B(this.plotLeft);this.plotTop=k=B(this.plotTop);this.plotWidth=j=t(0,B(d-i-this.marginRight));this.plotHeight=l=t(0,B(e-k-this.marginBottom));this.plotSizeX=b?l:j;this.plotSizeY=b?j:l;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox=c.plotBox={x:i,y:k,width:j,height:l}; -d=2*V(this.plotBorderWidth/2);b=ua(t(d,h[3])/2);c=ua(t(d,h[0])/2);this.clipBox={x:b,y:c,width:V(this.plotSizeX-t(d,h[1])/2-b),height:t(0,V(this.plotSizeY-t(d,h[2])/2-c))};a||p(this.axes,function(a){a.setAxisSize();a.setAxisTranslation()})},resetMargins:function(){var a=this;p(nb,function(b,c){a[b]=o(a.margin[c],a.spacing[c])});a.axisOffset=[0,0,0,0];a.clipOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,e=this.chartBackground, -f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,k=a.backgroundColor,j=a.plotBackgroundColor,l=a.plotBackgroundImage,m=a.plotBorderWidth||0,n,q=this.plotLeft,o=this.plotTop,p=this.plotWidth,r=this.plotHeight,w=this.plotBox,v=this.clipRect,t=this.clipBox;n=i+(a.shadow?8:0);if(i||k)if(e)e.animate(e.crisp({width:c-n,height:d-n}));else{e={fill:k||"none"};if(i)e.stroke=a.borderColor,e["stroke-width"]=i;this.chartBackground=b.rect(n/2,n/2,c-n,d-n,a.borderRadius,i).attr(e).addClass("highcharts-background").add().shadow(a.shadow)}if(j)f? -f.animate(w):this.plotBackground=b.rect(q,o,p,r,0).attr({fill:j}).add().shadow(a.plotShadow);if(l)h?h.animate(w):this.plotBGImage=b.image(l,q,o,p,r).add();v?v.animate({width:t.width,height:t.height}):this.clipRect=b.clipRect(t);if(m)g?(g.strokeWidth=-m,g.animate(g.crisp({x:q,y:o,width:p,height:r}))):this.plotBorder=b.rect(q,o,p,r,0,-m).attr({stroke:a.plotBorderColor,"stroke-width":m,fill:"none",zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,c,d=a.options.series, -e,f;p(["inverted","angular","polar"],function(g){c=L[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g];for(e=d&&d.length;!f&&e--;)(c=L[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a=this,b=a.series;p(b,function(a){a.linkedSeries.length=0});p(b,function(b){var d=b.options.linkedTo;if(xa(d)&&(d=d===":previous"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b),b.linkedParent=d,b.visible=o(b.options.visible,d.options.visible,b.visible)})},renderSeries:function(){p(this.series, -function(a){a.translate();a.render()})},renderLabels:function(){var a=this,b=a.options.labels;b.items&&p(b.items,function(c){var d=u(b.style,c.style),e=C(d.left)+a.plotLeft,f=C(d.top)+a.plotTop+12;delete d.left;delete d.top;a.renderer.text(c.html,e,f).attr({zIndex:2}).css(d).add()})},render:function(){var a=this.axes,b=this.renderer,c=this.options,d,e,f,g;this.setTitle();this.legend=new ob(this,c.legend);this.getStacks&&this.getStacks();this.getMargins(!0);this.setChartSize();d=this.plotWidth;e=this.plotHeight-= -21;p(a,function(a){a.setScale()});this.getAxisMargins();f=d/this.plotWidth>1.1;g=e/this.plotHeight>1.05;if(f||g)this.maxTicks=null,p(a,function(a){(a.horiz&&f||!a.horiz&&g)&&a.setTickInterval(!0)}),this.getMargins();this.drawChartBox();this.hasCartesianSeries&&p(a,function(a){a.visible&&a.render()});if(!this.seriesGroup)this.seriesGroup=b.g("series-group").attr({zIndex:3}).add();this.renderSeries();this.renderLabels();this.showCredits(c.credits);this.hasRendered=!0},showCredits:function(a){if(a.enabled&& -!this.credits)this.credits=this.renderer.text(a.text,0,0).on("click",function(){if(a.href)D.location.href=a.href}).attr({align:a.position.align,zIndex:8}).css(a.style).add().align(a.position)},destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;I(a,"destroy");T[a.index]=y;eb--;a.renderTo.removeAttribute("data-highcharts-chart");X(a);for(e=b.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy();p("title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer".split(","), -function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())});if(d)d.innerHTML="",X(d),f&&Sa(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!fa&&D==D.top&&A.readyState!=="complete"||ka&&!D.canvg?(ka?Nb.push(function(){a.firstRender()},a.options.global.canvasToolsURL):A.attachEvent("onreadystatechange",function(){A.detachEvent("onreadystatechange",a.firstRender);A.readyState==="complete"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options;if(a.isReadyToRender()){a.getContainer(); -I(a,"init");a.resetMargins();a.setChartSize();a.propFromSeries();a.getAxes();p(b.series||[],function(b){a.initSeries(b)});a.linkSeries();I(a,"beforeRender");if(x.Pointer)a.pointer=new Xa(a,b);a.render();a.renderer.draw();if(!a.renderer.imgCount&&a.onload)a.onload();a.cloneRenderTo(!0)}},onload:function(){var a=this;p([this.callback].concat(this.callbacks),function(b){b&&a.index!==void 0&&b.apply(a,[a])});I(a,"load");this.onload=null},splashArray:function(a,b){var c=b[a],c=Z(c)?c:[c,c,c,c];return[o(b[a+ -"Top"],c[0]),o(b[a+"Right"],c[1]),o(b[a+"Bottom"],c[2]),o(b[a+"Left"],c[3])]}};var Bb=x.CenteredSeriesMixin={getCenter:function(){var a=this.options,b=this.chart,c=2*(a.slicedOffset||0),d=b.plotWidth-2*c,b=b.plotHeight-2*c,e=a.center,e=[o(e[0],"50%"),o(e[1],"50%"),a.size||"100%",a.innerSize||0],f=F(d,b),g,h;for(g=0;g<4;++g)h=e[g],a=g<2||g===2&&/%$/.test(h),e[g]=(/%$/.test(h)?[d,b,f,e[2]][g]*parseFloat(h)/100:parseFloat(h))+(a?c:0);e[3]>e[2]&&(e[3]=e[2]);return e}},Ja=function(){};Ja.prototype={init:function(a, -b,c){this.series=a;this.color=a.color;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors,this.color=this.color||b[a.colorCounter++],a.colorCounter===b.length))a.colorCounter=0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=c.options.pointValKey||c.pointValKey,a=Ja.prototype.optionsToObject.call(this,a);u(this,a);this.options=this.options?u(this.options,a):a;if(d)this.y=this[d];this.isNull=this.x===null|| -this.y===null;if(this.x===void 0&&c)this.x=b===void 0?c.autoIncrement():b;return this},optionsToObject:function(a){var b={},c=this.series,d=c.options.keys,e=d||c.pointArrayMap||["y"],f=e.length,g=0,h=0;if(J(a)||a===null)b[e[0]]=a;else if(Ea(a)){if(!d&&a.length>f){c=typeof a[0];if(c==="string")b.name=a[0];else if(c==="number")b.x=a[0];g++}for(;hn){for(c=0;j===null&&ci||this.forceCrop))if(b[d-1]q)b=[],c=[];else if(b[0]q)e=this.cropData(this.xData,this.yData,n,q),b=e.xData,c=e.yData,e=e.start,f=!0;for(i=b.length||1;--i;)d=m?k(b[i])-k(b[i-1]):b[i]-b[i-1],d>0&&(g===y||d=c){f=t(0,i-h);break}for(c=i;cd){g=c+h;break}return{xData:a.slice(f,g),yData:b.slice(f,g),start:f,end:g}},generatePoints:function(){var a=this.options.data,b=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,k=this.hasGroupedData,j,l=[],m;if(!b&&!k)b=[],b.length=a.length,b=this.data=b;for(m=0;m0),k=this.getExtremesFromAll||this.options.getExtremesFromAll||this.cropped||(c[l+1]||k)>=g&&(c[l-1]||k)<=h,i&&k)if(i=j.length)for(;i--;)j[i]!==null&&(e[f++]=j[i]);else e[f++]=j;this.dataMin=La(e);this.dataMax=Ga(e)},translate:function(){this.processedXData||this.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories,e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement, -k=i==="between"||J(i),j=a.threshold,l=a.startFromThreshold?j:0,m,n,q,p,s=Number.MAX_VALUE,a=0;a=0&&n<=e.len&&m>=0&&m<=c.len;G.clientX=k?c.translate(w,0,0,0,1):m;G.negative=G.y<(j||0);G.category=d&&d[G.x]!==y?d[G.x]:G.x;G.isNull||(q!==void 0&&(s=F(s,Q(m-q))),q=m)}this.closestPointRangePx=s},getValidPoints:function(a, -b){var c=this.chart;return Ba(a||this.points||[],function(a){return b&&!c.isInsidePlot(a.plotX,a.plotY,c.inverted)?!1:!a.isNull})},setClip:function(a){var b=this.chart,c=this.options,d=b.renderer,e=b.inverted,f=this.clipBox,g=f||b.clipBox,h=this.sharedClipKey||["_sharedClip",a&&a.duration,a&&a.easing,g.height,c.xAxis,c.yAxis].join(","),i=b[h],k=b[h+"m"];if(!i){if(a)g.width=0,b[h+"m"]=k=d.clipRect(-99,e?-b.plotLeft:-b.plotTop,99,e?b.chartWidth:b.chartHeight);b[h]=i=d.clipRect(g)}a&&(i.count+=1);if(c.clip!== -!1)this.group.clip(a||f?i:b.clipRect),this.markerGroup.clip(k),this.sharedClipKey=h;a||(i.count-=1,i.count<=0&&h&&b[h]&&(f||(b[h]=b[h].destroy()),b[h+"m"]&&(b[h+"m"]=b[h+"m"].destroy())))},animate:function(a){var b=this.chart,c=this.options.animation,d;if(c&&!Z(c))c=ea[this.type].animation;a?this.setClip(c):(d=this.sharedClipKey,(a=b[d])&&a.animate({width:b.plotSizeX},c),b[d+"m"]&&b[d+"m"].animate({width:b.plotSizeX+99},c),this.animate=null)},afterAnimate:function(){this.setClip();I(this,"afterAnimate")}, -drawPoints:function(){var a,b=this.points,c=this.chart,d,e,f,g,h,i,k,j,l=this.options.marker,m=this.pointAttr[""],n,q,p,s=this.markerGroup,r=o(l.enabled,this.xAxis.isRadial,this.closestPointRangePx>2*l.radius);if(l.enabled!==!1||this._hasPointMarkers)for(f=b.length;f--;)if(g=b[f],d=V(g.plotX),e=g.plotY,j=g.graphic,n=g.marker||{},q=!!g.marker,a=r&&n.enabled===y||n.enabled,p=g.isInside,a&&J(e)&&g.y!==null)if(a=g.pointAttr[g.selected?"select":""]||m,h=a.r,i=o(n.symbol,this.symbol),k=i.indexOf("url")=== -0,j)j[p?"show":"hide"](!0).attr(a).animate(u({x:d-h,y:e-h},j.symbolName?{width:2*h,height:2*h}:{}));else{if(p&&(h>0||k))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h,q?n:l).attr(a).add(s)}else if(j)g.graphic=j.destroy()},convertAttribs:function(a,b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=o(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=ea[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color,h=a.options.negativeColor, -i={stroke:g,fill:g},k=a.points||[],j,l=[],m,n=a.pointAttrToOptions;f=a.hasPointSpecificOptions;var q=c.lineColor,z=c.fillColor;j=b.turboThreshold;var s=a.zones,t=a.zoneAxis||"y",w,v;b.marker?(e.radius=e.radius||c.radius+e.radiusPlus,e.lineWidth=e.lineWidth||c.lineWidth+e.lineWidthPlus):(e.color=e.color||ma(e.color||g).brighten(e.brightness).get(),e.negativeColor=e.negativeColor||ma(e.negativeColor||h).brighten(e.brightness).get());l[""]=a.convertAttribs(c,i);p(["hover","select"],function(b){l[b]= -a.convertAttribs(d[b],l[""])});a.pointAttr=l;g=k.length;if(!j||g=i.value;)i=s[++f];j.color=j.fillColor=i=o(i.color,a.color)}f=b.colorByPoint||j.color;if(j.options)for(v in n)r(c[n[v]])&&(f=!0);if(f){c=c||{};m=[];d=c.states||{};f=d.hover=d.hover||{};if(!b.marker||j.negative&&!f.fillColor&&!e.fillColor)f[a.pointAttrToOptions.fill]=f.color||!j.options.color&&e[j.negative&& -h?"negativeColor":"color"]||ma(j.color).brighten(f.brightness||e.brightness).get();w={color:j.color};if(!z)w.fillColor=j.color;if(!q)w.lineColor=j.color;c.hasOwnProperty("color")&&!c.color&&delete c.color;if(i&&!e.fillColor)f.fillColor=i;m[""]=a.convertAttribs(u(w,c),l[""]);m.hover=a.convertAttribs(d.hover,l.hover,m[""]);m.select=a.convertAttribs(d.select,l.select,m[""])}else m=l;j.pointAttr=m}},destroy:function(){var a=this,b=a.chart,c=/AppleWebKit\/533/.test(za),d,e=a.data||[],f,g,h;I(a,"destroy"); -X(a);p(a.axisTypes||[],function(b){if(h=a[b])pa(h.series,a),h.isDirty=h.forceRedraw=!0});a.legendItem&&a.chart.legend.destroyItem(a);for(d=e.length;d--;)(f=e[d])&&f.destroy&&f.destroy();a.points=null;clearTimeout(a.animationTimeout);for(g in a)a[g]instanceof O&&!a[g].survive&&(d=c&&g==="group"?"hide":"destroy",a[g][d]());if(b.hoverSeries===a)b.hoverSeries=null;pa(b.series,a);for(g in a)delete a[g]},getGraphPath:function(a,b,c){var d=this,e=d.options,f=e.step,g,h=[],i,a=a||d.points;(g=a.reversed)&& -a.reverse();(f={right:1,center:2}[f]||f&&3)&&g&&(f=4-f);e.connectNulls&&!b&&!c&&(a=this.getValidPoints(a));p(a,function(g,j){var l=g.plotX,m=g.plotY,n=a[j-1];if((g.leftCliff||n&&n.rightCliff)&&!c)i=!0;g.isNull&&!r(b)&&j>0?i=!e.connectNulls:g.isNull&&!b?i=!0:(j===0||i?n=["M",g.plotX,g.plotY]:d.getPointSpline?n=d.getPointSpline(a,g,j):f?(n=f===1?["L",n.plotX,m]:f===2?["L",(n.plotX+l)/2,n.plotY,"L",(n.plotX+l)/2,m]:["L",l,n.plotY],n.push("L",l,m)):n=["L",l,m],h.push.apply(h,n),i=!1)});return d.graphPath= -h},drawGraph:function(){var a=this,b=this.options,c=[["graph",b.lineColor||this.color,b.dashStyle]],d=b.lineWidth,e=b.linecap!=="square",f=(this.gappedPath||this.getGraphPath).call(this),g=this.fillGraph&&this.color||"none";p(this.zones,function(d,e){c.push(["zoneGraph"+e,d.color||a.color,d.dashStyle||b.dashStyle])});p(c,function(c,i){var k=c[0],j=a[k];if(j)j.animate({d:f});else if((d||g)&&f.length)j={stroke:c[1],"stroke-width":d,fill:g,zIndex:1},c[2]?j.dashstyle=c[2]:e&&(j["stroke-linecap"]=j["stroke-linejoin"]= -"round"),a[k]=a.chart.renderer.path(f).attr(j).add(a.group).shadow(i<2&&b.shadow)})},applyZones:function(){var a=this,b=this.chart,c=b.renderer,d=this.zones,e,f,g=this.clips||[],h,i=this.graph,k=this.area,j=t(b.chartWidth,b.chartHeight),l=this[(this.zoneAxis||"y")+"Axis"],m,n=l.reversed,q=b.inverted,z=l.horiz,s,r,w,v=!1;if(d.length&&(i||k)&&l.min!==y)i&&i.hide(),k&&k.hide(),m=l.getExtremes(),p(d,function(d,p){e=n?z?b.plotWidth:0:z?0:l.toPixels(m.min);e=F(t(o(f,e),0),j);f=F(t(B(l.toPixels(o(d.value, -m.max),!0)),0),j);v&&(e=f=l.toPixels(m.max));s=Math.abs(e-f);r=F(e,f);w=t(e,f);if(l.isXAxis){if(h={x:q?w:r,y:0,width:s,height:j},!z)h.x=b.plotHeight-h.x}else if(h={x:0,y:q?w:r,width:j,height:s},z)h.y=b.plotWidth-h.y;b.inverted&&c.isVML&&(h=l.isXAxis?{x:0,y:n?r:w,height:h.width,width:b.chartWidth}:{x:h.y-b.plotLeft-b.spacingBox.x,y:0,width:h.height,height:b.chartHeight});g[p]?g[p].animate(h):(g[p]=c.clipRect(h),i&&a["zoneGraph"+p].clip(g[p]),k&&a["zoneArea"+p].clip(g[p]));v=d.value>m.max}),this.clips= -g},invertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};p(["group","markerGroup"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)N(c,"resize",a),N(b,"destroy",function(){X(c,"resize",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a],g=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({zIndex:d||0.1}).add(e),f.addClass("highcharts-series-"+this.index));f.attr({visibility:c})[g?"attr":"animate"](this.getPlotBox());return f},getPlotBox:function(){var a= -this.chart,b=this.xAxis,c=this.yAxis;if(a.inverted)b=c,c=this.xAxis;return{translateX:b?b.left:a.plotLeft,translateY:c?c.top:a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,c,d=a.options,e=!!a.animate&&b.renderer.isSVG&&$a(d.animation).duration,f=a.visible?"inherit":"hidden",g=d.zIndex,h=a.hasRendered,i=b.seriesGroup;c=a.plotGroup("group","series",f,g,i);a.markerGroup=a.plotGroup("markerGroup","markers",f,g,i);e&&a.animate(!0);a.getAttribs();c.inverted=a.isCartesian?b.inverted: -!1;a.drawGraph&&(a.drawGraph(),a.applyZones());p(a.points,function(a){a.redraw&&a.redraw()});a.drawDataLabels&&a.drawDataLabels();a.visible&&a.drawPoints();a.drawTracker&&a.options.enableMouseTracking!==!1&&a.drawTracker();b.inverted&&a.invertGroups();d.clip!==!1&&!a.sharedClipKey&&!h&&c.clip(b.clipRect);e&&a.animate();if(!h)a.animationTimeout=Pa(function(){a.afterAnimate()},e);a.isDirty=a.isDirtyData=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirty||this.isDirtyData,c=this.group, -d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:o(d&&d.left,a.plotLeft),translateY:o(e&&e.top,a.plotTop)}));this.translate();this.render();b&&delete this.kdTree},kdDimensions:1,kdAxisArray:["clientX","plotY"],searchPoint:function(a,b){var c=this.xAxis,d=this.yAxis,e=this.chart.inverted;return this.searchKDTree({clientX:e?c.len-a.chartY+c.pos:a.chartX-c.pos,plotY:e?d.len-a.chartX+d.pos:a.chartY-d.pos},b)},buildKDTree:function(){function a(c, -e,f){var g,h;if(h=c&&c.length)return g=b.kdAxisArray[e%f],c.sort(function(a,b){return a[g]-b[g]}),h=Math.floor(h/2),{point:c[h],left:a(c.slice(0,h),e+1,f),right:a(c.slice(h+1),e+1,f)}}var b=this,c=b.kdDimensions;delete b.kdTree;Pa(function(){b.kdTree=a(b.getValidPoints(null,!b.directTouch),c,c)},b.options.kdNow?0:1)},searchKDTree:function(a,b){function c(a,b,k,j){var l=b.point,m=d.kdAxisArray[k%j],n,q,o=l;q=r(a[e])&&r(l[e])?Math.pow(a[e]-l[e],2):null;n=r(a[f])&&r(l[f])?Math.pow(a[f]-l[f],2):null; -n=(q||0)+(n||0);l.dist=r(n)?Math.sqrt(n):Number.MAX_VALUE;l.distX=r(q)?Math.sqrt(q):Number.MAX_VALUE;m=a[m]-l[m];n=m<0?"left":"right";q=m<0?"right":"left";b[n]&&(n=c(a,b[n],k+1,j),o=n[g]0&&this.singleStacks===!1&&(s.points[r][0]=s.points[this.index+","+v+",0"][0]);e==="percent"?(p=p?i:k,j&&m[p]&&m[p][v]?(p=m[p][v],s.total=p.total=t(p.total,s.total)+Q(u)||0):s.total=ca(s.total+(Q(u)||0))):s.total=ca(s.total+(u||0));s.cum=o(s.cum,g)+(u||0);if(u!==null)s.points[r].push(s.cum),c[w]=s.cum}if(e==="percent")l.usePercentage=!0;this.stackedYData=c;l.oldStacks= -{}}};R.prototype.setPercentStacks=function(){var a=this,b=a.stackKey,c=a.yAxis.stacks,d=a.processedXData,e;p([b,"-"+b],function(b){var f;for(var g=d.length,h,i;g--;)if(h=d[g],e=a.getStackIndicator(e,h,a.index),f=(i=c[b]&&c[b][h])&&i.points[e.key],h=f)i=i.total?100/i.total:0,h[0]=ca(h[0]*i),h[1]=ca(h[1]*i),a.stackedYData[g]=h[1]})};R.prototype.getStackIndicator=function(a,b,c){!r(a)||a.x!==b?a={x:b,index:0}:a.index++;a.key=[c,b,a.index].join(",");return a};u(gb.prototype,{addSeries:function(a,b,c){var d, -e=this;a&&(b=o(b,!0),I(e,"addSeries",{options:a},function(){d=e.initSeries(a);e.isDirtyLegend=!0;e.linkSeries();b&&e.redraw(c)}));return d},addAxis:function(a,b,c,d){var e=b?"xAxis":"yAxis",f=this.options,a=E(a,{index:this[e].length,isX:b});new ha(this,a);f[e]=ta(f[e]||{});f[e].push(a);o(c,!0)&&this.redraw(d)},showLoading:function(a){var b=this,c=b.options,d=b.loadingDiv,e=c.loading,f=function(){d&&M(d,{left:b.plotLeft+"px",top:b.plotTop+"px",width:b.plotWidth+"px",height:b.plotHeight+"px"})};if(!d)b.loadingDiv= -d=ba(Ma,{className:"highcharts-loading"},u(e.style,{zIndex:10,display:"none"}),b.container),b.loadingSpan=ba("span",null,e.labelStyle,d),N(b,"redraw",f);b.loadingSpan.innerHTML=a||c.lang.loading;if(!b.loadingShown)M(d,{opacity:0,display:""}),Wa(d,{opacity:e.style.opacity},{duration:e.showDuration||0}),b.loadingShown=!0;f()},hideLoading:function(){var a=this.options,b=this.loadingDiv;b&&Wa(b,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){M(b,{display:"none"})}});this.loadingShown= -!1}});u(Ja.prototype,{update:function(a,b,c,d){function e(){f.applyOptions(a);if(f.y===null&&h)f.graphic=h.destroy();if(Z(a)&&!Ea(a))f.redraw=function(){if(h&&h.element&&a&&a.marker&&a.marker.symbol)f.graphic=h.destroy();if(a&&a.dataLabels&&f.dataLabel)f.dataLabel=f.dataLabel.destroy();f.redraw=null};i=f.index;g.updateParallelArrays(f,i);if(l&&f.name)l[f.x]=f.name;j.data[i]=Z(j.data[i])&&!Ea(j.data[i])?f.options:a;g.isDirty=g.isDirtyData=!0;if(!g.fixedBox&&g.hasCartesianSeries)k.isDirtyBox=!0;if(j.legendType=== -"point")k.isDirtyLegend=!0;b&&k.redraw(c)}var f=this,g=f.series,h=f.graphic,i,k=g.chart,j=g.options,l=g.xAxis&&g.xAxis.names,b=o(b,!0);d===!1?e():f.firePointEvent("update",{options:a},e)},remove:function(a,b){this.series.removePoint(sa(this,this.series.data),a,b)}});u(R.prototype,{addPoint:function(a,b,c,d){var e=this,f=e.options,g=e.data,h=e.graph,i=e.area,k=e.chart,j=e.xAxis&&e.xAxis.names,l=h&&h.shift||0,m=["graph","area"],h=f.data,n,q=e.xData;Ta(d,k);if(c){for(d=e.zones.length;d--;)m.push("zoneGraph"+ -d,"zoneArea"+d);p(m,function(a){if(e[a])e[a].shift=l+(f.step?2:1)})}if(i)i.isArea=!0;b=o(b,!0);i={series:e};e.pointClass.prototype.applyOptions.apply(i,[a]);m=i.x;d=q.length;if(e.requireSorting&&mm;)d--;e.updateParallelArrays(i,"splice",d,0,0);e.updateParallelArrays(i,d);if(j&&i.name)j[m]=i.name;h.splice(d,0,a);n&&(e.data.splice(d,0,null),e.processData());f.legendType==="point"&&e.generatePoints();c&&(g[0]&&g[0].remove?g[0].remove(!1):(g.shift(),e.updateParallelArrays(i, -"shift"),h.shift()));e.isDirty=!0;e.isDirtyData=!0;b&&(e.getAttribs(),k.redraw())},removePoint:function(a,b,c){var d=this,e=d.data,f=e[a],g=d.points,h=d.chart,i=function(){g&&g.length===e.length&&g.splice(a,1);e.splice(a,1);d.options.data.splice(a,1);d.updateParallelArrays(f||{series:d},"splice",a,1);f&&f.destroy();d.isDirty=!0;d.isDirtyData=!0;b&&h.redraw()};Ta(c,h);b=o(b,!0);f?f.firePointEvent("remove",null,i):i()},remove:function(a,b){var c=this,d=c.chart;I(c,"remove",null,function(){c.destroy(); -d.isDirtyLegend=d.isDirtyBox=!0;d.linkSeries();o(a,!0)&&d.redraw(b)})},update:function(a,b){var c=this,d=this.chart,e=this.userOptions,f=this.type,g=L[f].prototype,h=["group","markerGroup","dataLabelsGroup"],i;if(a.type&&a.type!==f||a.zIndex!==void 0)h.length=0;p(h,function(a){h[a]=c[a];delete c[a]});a=E(e,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data},a);this.remove(!1);for(i in g)this[i]=y;u(this,L[a.type||f].prototype);p(h,function(a){c[a]=h[a]});this.init(d, -a);d.linkSeries();o(b,!0)&&d.redraw(!1)}});u(ha.prototype,{update:function(a,b){var c=this.chart,a=c.options[this.coll][this.options.index]=E(this.userOptions,a);this.destroy(!0);this._addedPlotLB=this.chart._labelPanes=y;this.init(c,u(a,{events:y}));c.isDirtyBox=!0;o(b,!0)&&c.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,d=this.series,e=d.length;e--;)d[e]&&d[e].remove(!1);pa(b.axes,this);pa(b[c],this);b.options[c].splice(this.options.index,1);p(b[c],function(a,b){a.options.index= -b});this.destroy();b.isDirtyBox=!0;o(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}});var wa=qa(R);L.line=wa;ea.area=E(ga,{softThreshold:!1,threshold:0});var oa=qa(R,{type:"area",singleStacks:!1,getStackPoints:function(){var a=[],b=[],c=this.xAxis,d=this.yAxis,e=d.stacks[this.stackKey],f={},g=this.points,h=this.index,i=d.series,k=i.length,j,l=o(d.options.reversedStacks,!0)?1:-1,m,n;if(this.options.stacking){for(m=0;m< -g.length;m++)f[g[m].x]=g[m];for(n in e)e[n].total!==null&&b.push(n);b.sort(function(a,b){return a-b});j=Ca(i,function(){return this.visible});p(b,function(g,i){var n=0,o,r;if(f[g]&&!f[g].isNull)a.push(f[g]),p([-1,1],function(a){var c=a===1?"rightNull":"leftNull",d=0,n=e[b[i+a]];if(n)for(m=h;m>=0&&m=0&&ma&&h>e?(h=t(a,e),k=2*e-h):hc&&k>e?(k=t(c,e),h=2*e-k):k0.5;b=Math.round(b)+f;d-=b;g&&d&&(b-=1,d+=1);return{x:a,y:b,width:c,height:d}},translate:function(){var a=this,b=a.chart,c=a.options,d=a.borderWidth=o(c.borderWidth,a.closestPointRange*a.xAxis.transA<2?0:1),e=a.yAxis,f= -a.translatedThreshold=e.getThreshold(c.threshold),g=o(c.minPointLength,5),h=a.getColumnMetrics(),i=h.width,k=a.barW=t(i,1+2*d),j=a.pointXOffset=h.offset;b.inverted&&(f-=0.5);c.pointPadding&&(k=ua(k));R.prototype.translate.apply(a);p(a.points,function(c){var d=F(o(c.yBottom,f),9E4),h=999+Q(d),h=F(t(-h,c.plotY),e.len+h),q=c.plotX+j,p=k,s=F(h,d),r,w=t(h,d)-s;Q(w)g?d-g:f-(r?g:0));c.barX=q;c.pointWidth=i;c.tooltipPos=b.inverted?[e.len+ -e.pos-b.plotLeft-h,a.xAxis.len-q-p/2,w]:[q+p/2,h+e.pos-b.plotTop,w];c.shapeType="rect";c.shapeArgs=a.crispCol(q,s,p,w)})},getSymbol:Aa,drawLegendSymbol:K.drawRectangle,drawGraph:Aa,drawPoints:function(){var a=this,b=this.chart,c=a.options,d=b.renderer,e=c.animationLimit||250,f,g;p(a.points,function(h){var i=h.graphic,k;if(J(h.plotY)&&h.y!==null)f=h.shapeArgs,k=r(a.borderWidth)?{"stroke-width":a.borderWidth}:{},g=h.pointAttr[h.selected?"select":""]||a.pointAttr[""],i?(Oa(i),i.attr(k).attr(g)[b.pointCount< -e?"animate":"attr"](E(f))):h.graphic=d[h.shapeType](f).attr(k).attr(g).add(h.group||a.group).shadow(c.shadow,null,c.stacking&&!c.borderRadius);else if(i)h.graphic=i.destroy()})},animate:function(a){var b=this,c=this.yAxis,d=b.options,e=this.chart.inverted,f={};if(fa)a?(f.scaleY=0.001,a=F(c.pos+c.len,t(c.pos,c.toPixels(d.threshold))),e?f.translateX=a-c.len:f.translateY=a,b.group.attr(f)):(f[e?"translateX":"translateY"]=c.pos,b.group.animate(f,u($a(b.options.animation),{step:function(a,c){b.group.attr({scaleY:t(0.001, -c.pos)})}})),b.animate=null)},remove:function(){var a=this,b=a.chart;b.hasRendered&&p(b.series,function(b){if(b.type===a.type)b.isDirty=!0});R.prototype.remove.apply(a,arguments)}});L.column=wa;ea.bar=E(ea.column);oa=qa(wa,{type:"bar",inverted:!0});L.bar=oa;ea.scatter=E(ga,{lineWidth:0,marker:{enabled:!0},tooltip:{headerFormat:'\u25cf {series.name}
',pointFormat:"x: {point.x}
y: {point.y}
"}}); -oa=qa(R,{type:"scatter",sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:["group","markerGroup","dataLabelsGroup"],takeOrdinalPosition:!1,kdDimensions:2,drawGraph:function(){this.options.lineWidth&&R.prototype.drawGraph.call(this)}});L.scatter=oa;ea.pie=E(ga,{borderColor:"#FFFFFF",borderWidth:1,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.y===null?void 0:this.point.name},x:0},ignoreHiddenPoint:!0,legendType:"point",marker:null, -size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});ga={type:"pie",isCartesian:!1,pointClass:qa(Ja,{init:function(){Ja.prototype.init.apply(this,arguments);var a=this,b;a.name=o(a.name,"Slice");b=function(b){a.slice(b.type==="select")};N(a,"select",b);N(a,"unselect",b);return a},setVisible:function(a,b){var c=this,d=c.series,e=d.chart,f=d.options.ignoreHiddenPoint,b=o(b,f);if(a!==c.visible){c.visible=c.options.visible= -a=a===y?!c.visible:a;d.options.data[sa(c,d.data)]=c.options;p(["graphic","dataLabel","connector","shadowGroup"],function(b){if(c[b])c[b][a?"show":"hide"](!0)});c.legendItem&&e.legend.colorizeItem(c,a);!a&&c.state==="hover"&&c.setState("");if(f)d.isDirty=!0;b&&e.redraw()}},slice:function(a,b,c){var d=this.series;Ta(c,d.chart);o(b,!0);this.sliced=this.options.sliced=a=r(a)?a:!this.sliced;d.options.data[sa(this,d.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a); -this.shadowGroup&&this.shadowGroup.animate(a)},haloPath:function(a){var b=this.shapeArgs,c=this.series.chart;return this.sliced||!this.visible?[]:this.series.chart.renderer.symbols.arc(c.plotLeft+b.x,c.plotTop+b.y,b.r+a,b.r+a,{innerR:this.shapeArgs.r,start:b.start,end:b.end})}}),requireSorting:!1,directTouch:!0,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color"},animate:function(a){var b=this, -c=b.points,d=b.startAngleRad;if(!a)p(c,function(a){var c=a.graphic,g=a.shapeArgs;c&&(c.attr({r:a.startR||b.center[3]/2,start:d,end:d}),c.animate({r:g.r,start:g.start,end:g.end},b.options.animation))}),b.animate=null},updateTotals:function(){var a,b=0,c=this.points,d=c.length,e,f=this.options.ignoreHiddenPoint;for(a=0;a0&&(e.visible||!f)?e.y/b*100:0,e.total=b},generatePoints:function(){R.prototype.generatePoints.call(this); -this.updateTotals()},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle||0,k=this.startAngleRad=ra/180*(i-90),i=(this.endAngleRad=ra/180*(o(c.endAngle,i+360)-90))-k,j=this.points,l=c.dataLabels.distance,c=c.ignoreHiddenPoint,m,n=j.length,q;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h=Y.asin(F((b-a[1])/(a[2]/2+l),1));return a[0]+(c?-1:1)*W(h)*(a[2]/2+l)};for(m=0;m1.5*ra?h-=2*ra:h<-ra/2&&(h+=2*ra);q.slicedTranslation={translateX:B(W(h)*d),translateY:B(da(h)*d)};f=W(h)*a[2]/2;g=da(h)*a[2]/2;q.tooltipPos=[a[0]+f*0.7,a[1]+g*0.7];q.half=h<-ra/2||h>ra/2?1:0;q.angle=h;e=F(e,l/2);q.labelPos=[a[0]+f+W(h)*l,a[1]+g+da(h)*l,a[0]+f+W(h)*e,a[1]+g+da(h)*e,a[0]+f,a[1]+g,l<0?"center":q.half?"right":"left",h]}},drawGraph:null,drawPoints:function(){var a= -this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g,h,i;if(e&&!a.shadowGroup)a.shadowGroup=b.g("shadow").add(a.group);p(a.points,function(k){if(k.y!==null){d=k.graphic;h=k.shapeArgs;f=k.shadowGroup;g=k.pointAttr[k.selected?"select":""];if(!g.stroke)g.stroke=g.fill;if(e&&!f)f=k.shadowGroup=b.g("shadow").add(a.shadowGroup);c=k.sliced?k.slicedTranslation:{translateX:0,translateY:0};f&&f.attr(c);if(d)d.setRadialReference(a.center).attr(g).animate(u(h,c));else{i={"stroke-linejoin":"round"};if(!k.visible)i.visibility= -"hidden";k.graphic=d=b[k.shapeType](h).setRadialReference(a.center).attr(g).attr(i).attr(c).add(a.group).shadow(e,f)}}})},searchPoint:Aa,sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawLegendSymbol:K.drawRectangle,getCenter:Bb.getCenter,getSymbol:Aa};ga=qa(R,ga);L.pie=ga;R.prototype.drawDataLabels=function(){var a=this,b=a.options,c=b.cursor,d=b.dataLabels,e=a.points,f,g,h=a.hasRendered||0,i,k,j=o(d.defer,!0),l=a.chart.renderer;if(d.enabled||a._hasPointLabels)a.dlProcessOptions&& -a.dlProcessOptions(d),k=a.plotGroup("dataLabelsGroup","data-labels",j&&!h?"hidden":"visible",d.zIndex||6),j&&(k.attr({opacity:+h}),h||N(a,"afterAnimate",function(){a.visible&&k.show();k[b.animation?"animate":"attr"]({opacity:1},{duration:200})})),g=d,p(e,function(e){var h,j=e.dataLabel,p,s,t=e.connector,w=!0,v,x={};f=e.dlOptions||e.options&&e.options.dataLabels;h=o(f&&f.enabled,g.enabled)&&e.y!==null;if(j&&!h)e.dataLabel=j.destroy();else if(h){d=E(g,f);v=d.style;h=d.rotation;p=e.getLabelConfig(); -i=d.format?Ka(d.format,p):d.formatter.call(p,d);v.color=o(d.color,v.color,a.color,"black");if(j)if(r(i))j.attr({text:i}),w=!1;else{if(e.dataLabel=j=j.destroy(),t)e.connector=t.destroy()}else if(r(i)){j={fill:d.backgroundColor,stroke:d.borderColor,"stroke-width":d.borderWidth,r:d.borderRadius||0,rotation:h,padding:d.padding,zIndex:1};if(v.color==="contrast")x.color=d.inside||d.distance<0||b.stacking?l.getContrast(e.color||a.color):"#000000";if(c)x.cursor=c;for(s in j)j[s]===y&&delete j[s];j=e.dataLabel= -l[h?"text":"label"](i,0,-9999,d.shape,null,null,d.useHTML).attr(j).css(u(v,x)).add(k).shadow(d.shadow)}j&&a.alignDataLabel(e,j,d,null,w)}})};R.prototype.alignDataLabel=function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=o(a.plotX,-9999),i=o(a.plotY,-9999),k=b.getBBox(),j=f.renderer.fontMetrics(c.style.fontSize).b,l=c.rotation,m=c.align,n=this.visible&&(a.series.forceDL||f.isInsidePlot(h,B(i),g)||d&&f.isInsidePlot(h,g?d.x+1:d.y+d.height-1,g)),q=o(c.overflow,"justify")==="justify";if(n)d=u({x:g?f.plotWidth- -i:h,y:B(g?f.plotHeight-h:i),width:0,height:0},d),u(c,{width:k.width,height:k.height}),l?(q=!1,g=f.renderer.rotCorr(j,l),g={x:d.x+c.x+d.width/2+g.x,y:d.y+c.y+{top:0,middle:0.5,bottom:1}[c.verticalAlign]*d.height},b[e?"attr":"animate"](g).attr({align:m}),h=(l+720)%360,h=h>180&&h<360,m==="left"?g.y-=h?k.height:0:m==="center"?(g.x-=k.width/2,g.y-=k.height/2):m==="right"&&(g.x-=k.width,g.y-=h?0:k.height)):(b.align(c,null,d),g=b.alignAttr),q?this.justifyDataLabel(b,c,g,k,d,e):o(c.crop,!0)&&(n=f.isInsidePlot(g.x, -g.y)&&f.isInsidePlot(g.x+k.width,g.y+k.height)),c.shape&&!l&&b.attr({anchorX:a.plotX,anchorY:a.plotY});if(!n)Oa(b),b.attr({y:-9999}),b.placed=!1};R.prototype.justifyDataLabel=function(a,b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,k,j,l=a.box?0:a.padding||0;k=c.x+l;if(k<0)h==="right"?b.align="left":b.x=-k,j=!0;k=c.x+d.width-l;if(k>g.plotWidth)h==="left"?b.align="right":b.x=g.plotWidth-k,j=!0;k=c.y+l;if(k<0)i==="bottom"?b.verticalAlign="top":b.y=-k,j=!0;k=c.y+d.height-l;if(k>g.plotHeight)i=== -"top"?b.verticalAlign="bottom":b.y=g.plotHeight-k,j=!0;if(j)a.placed=!f,a.align(b,null,e)};if(L.pie)L.pie.prototype.drawDataLabels=function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=o(e.connectorPadding,10),g=o(e.connectorWidth,1),h=d.plotWidth,i=d.plotHeight,k,j,l=o(e.softConnector,!0),m=e.distance,n=a.center,q=n[2]/2,r=n[1],s=m>0,u,w,v,x=[[],[]],y,A,D,E,C,H=[0,0,0,0],M=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){R.prototype.drawDataLabels.apply(a); -p(b,function(a){if(a.dataLabel&&a.visible)x[a.half].push(a),a.dataLabel._pos=null});for(E=2;E--;){var I=[],N=[],J=x[E],L=J.length,K;if(L){a.sortByAngle(J,E-0.5);for(C=b=0;!b&&J[C];)b=J[C]&&J[C].dataLabel&&(J[C].dataLabel.getBBox().height||21),C++;if(m>0){w=F(r+q+m,d.plotHeight);for(C=t(0,r-q-m);C<=w;C+=b)I.push(C);w=I.length;if(L>w){c=[].concat(J);c.sort(M);for(C=L;C--;)c[C].rank=C;for(C=L;C--;)J[C].rank>=w&&J.splice(C,1);L=J.length}for(C=0;C0){if(w=N.pop(),K=w.i,A=w.y,c>A&&I[K+1]!==null||ch-f&&(H[1]=t(B(y+w-h+f),H[1])),A-b/2<0?H[0]=t(B(-A+b/2),H[0]):A+b/2>i&&(H[2]=t(B(A+b/2-i),H[2]))}}}if(Ga(H)===0||this.verifyDataLabelOverflow(H))this.placeDataLabels(),s&&g&&p(this.points,function(b){k=b.connector;v=b.labelPos;if((u=b.dataLabel)&&u._pos&&b.visible)D=u._attr.visibility,y=u.connX,A=u.connY,j=l?["M",y+(v[6]==="left"?5:-5),A,"C",y,A,2*v[2]-v[4],2*v[3]-v[5],v[2],v[3],"L",v[4],v[5]]:["M",y+ -(v[6]==="left"?5:-5),A,"L",v[2],v[3],"L",v[4],v[5]],k?(k.animate({d:j}),k.attr("visibility",D)):b.connector=k=a.chart.renderer.path(j).attr({"stroke-width":g,stroke:e.connectorColor||b.color||"#606060",visibility:D}).add(a.dataLabelsGroup);else if(k)b.connector=k.destroy()})}},L.pie.prototype.placeDataLabels=function(){p(this.points,function(a){var b=a.dataLabel;if(b&&a.visible)(a=b._pos)?(b.attr(b._attr),b[b.moved?"animate":"attr"](a),b.moved=!0):b&&b.attr({y:-9999})})},L.pie.prototype.alignDataLabel= -Aa,L.pie.prototype.verifyDataLabelOverflow=function(a){var b=this.center,c=this.options,d=c.center,e=c.minSize||80,f=e,g;d[0]!==null?f=t(b[2]-t(a[1],a[3]),e):(f=t(b[2]-a[1]-a[3],e),b[0]+=(a[3]-a[1])/2);d[1]!==null?f=t(F(f,b[2]-t(a[0],a[2])),e):(f=t(F(f,b[2]-a[0]-a[2]),e),b[1]+=(a[0]-a[2])/2);fo(this.translatedThreshold,g.yAxis.len)),k=o(c.inside,!!this.options.stacking);if(h){d=E(h);if(d.y<0)d.height+=d.y,d.y=0;h=d.y+d.height-g.yAxis.len;h>0&&(d.height-=h);f&&(d={x:g.yAxis.len-d.y-d.height,y:g.xAxis.len-d.x-d.width,width:d.height,height:d.width});if(!k)f?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0)}c.align=o(c.align,!f||k?"center":i?"right":"left");c.verticalAlign=o(c.verticalAlign, -f||k?"middle":i?"top":"bottom");R.prototype.alignDataLabel.call(this,a,b,c,d,e)};(function(a){var b=a.Chart,c=a.each,d=a.pick,e=a.addEvent;b.prototype.callbacks.push(function(a){function b(){var e=[];c(a.series,function(a){var b=a.options.dataLabels,f=a.dataLabelCollections||["dataLabel"];(b.enabled||a._hasPointLabels)&&!b.allowOverlap&&a.visible&&c(f,function(b){c(a.points,function(a){if(a[b])a[b].labelrank=d(a.labelrank,a.shapeArgs&&a.shapeArgs.height),e.push(a[b])})})});a.hideOverlappingLabels(e)} -b();e(a,"redraw",b)});b.prototype.hideOverlappingLabels=function(a){var b=a.length,d,e,k,j,l,m,n,q,o;for(e=0;el.x+n.translateX+(k.width-o)||m.x+q.translateX+(j.width- -o)l.y+n.translateY+(k.height-o)||m.y+q.translateY+(j.height-o)h;if(b.series.length&&(i||l>F(j.dataMin,j.min))&&(!i||kparseInt(a.userAgent.split("Firefox/")[1],10);a.hasTouch=!!a.win.TouchEvent;a.marginNames=["plotTop","marginRight","marginBottom","plotLeft"];a.noop=function(){};a.supportsPassiveEvents=function(){var v=!1;if(!a.isMS){var u=Object.defineProperty({},"passive",{get:function(){v=!0}});a.win.addEventListener&&a.win.removeEventListener&&(a.win.addEventListener("testPassive", +a.noop,u),a.win.removeEventListener("testPassive",a.noop,u))}return v}();a.charts=[];a.dateFormats={};a.seriesTypes={};a.symbolSizes={};a.chartCount=0})(a||(a={}));return a});L(a,"Core/Utilities.js",[a["Core/Globals.js"]],function(a){function v(b,d,g,r){var D=d?"Highcharts error":"Highcharts warning";32===b&&(b=D+": Deprecated member");var C=h(b),M=C?D+" #"+b+": www.highcharts.com/errors/"+b+"/":b.toString();if("undefined"!==typeof r){var l="";C&&(M+="?");J(r,function(b,Q){l+="\n - "+Q+": "+b;C&& +(M+=encodeURI(Q)+"="+encodeURI(b))});M+=l}A(a,"displayError",{chart:g,code:b,message:M,params:r},function(){if(d)throw Error(M);k.console&&-1===v.messages.indexOf(M)&&console.warn(M)});v.messages.push(M)}function E(b,d){var D={};J(b,function(g,k){if(G(b[k],!0)&&!b.nodeType&&d[k])g=E(b[k],d[k]),Object.keys(g).length&&(D[k]=g);else if(G(b[k])||b[k]!==d[k])D[k]=b[k]});return D}function H(b,d){return parseInt(b,d||10)}function x(b){return"string"===typeof b}function y(b){b=Object.prototype.toString.call(b); +return"[object Array]"===b||"[object Array Iterator]"===b}function G(b,d){return!!b&&"object"===typeof b&&(!d||!y(b))}function B(b){return G(b)&&"number"===typeof b.nodeType}function q(b){var d=b&&b.constructor;return!(!G(b,!0)||B(b)||!d||!d.name||"Object"===d.name)}function h(b){return"number"===typeof b&&!isNaN(b)&&Infinity>b&&-Infinity=d-1&&(d=Math.floor(g)),Math.max(0,d-(D(b,"padding-left",!0)||0)-(D(b,"padding-right",!0)||0));if("height"===d)return Math.max(0,Math.min(b.offsetHeight,b.scrollHeight)-(D(b,"padding-top",!0)||0)-(D(b,"padding-bottom",!0)||0));k.getComputedStyle||v(27,!0);if(b=k.getComputedStyle(b, +void 0)){var r=b.getPropertyValue(d);t(g,"opacity"!==d)&&(r=H(r))}return r}function J(b,d,g){for(var k in b)Object.hasOwnProperty.call(b,k)&&d.call(g||b[k],b[k],k,b)}function K(b,d,g){function k(d,z){var Q=b.removeEventListener||a.removeEventListenerPolyfill;Q&&Q.call(b,d,z,!1)}function r(g){var z;if(b.nodeName){if(d){var Q={};Q[d]=!0}else Q=g;J(Q,function(b,d){if(g[d])for(z=g[d].length;z--;)k(d,g[d][z].fn)})}}var D="function"===typeof b&&b.prototype||b;if(Object.hasOwnProperty.call(D,"hcEvents")){var l= +D.hcEvents;d?(D=l[d]||[],g?(l[d]=D.filter(function(b){return g!==b.fn}),k(d,g)):(r(l),l[d]=[])):(r(l),delete D.hcEvents)}}function A(b,g,k,r){k=k||{};if(d.createEvent&&(b.dispatchEvent||b.fireEvent&&b!==a)){var D=d.createEvent("Events");D.initEvent(g,!0,!0);k=e(D,k);b.dispatchEvent?b.dispatchEvent(k):b.fireEvent(g,k)}else if(b.hcEvents){k.target||e(k,{preventDefault:function(){k.defaultPrevented=!0},target:b,type:g});D=[];for(var l=b,C=!1;l.hcEvents;)Object.hasOwnProperty.call(l,"hcEvents")&&l.hcEvents[g]&& +(D.length&&(C=!0),D.unshift.apply(D,l.hcEvents[g])),l=Object.getPrototypeOf(l);C&&D.sort(function(b,z){return b.order-z.order});D.forEach(function(d){!1===d.fn.call(b,k)&&k.preventDefault()})}r&&!k.defaultPrevented&&r.call(b,k)}var p=a.charts,d=a.doc,k=a.win;"";(v||(v={})).messages=[];var b;Math.easeInOutSine=function(b){return-.5*(Math.cos(Math.PI*b)-1)};var g=Array.prototype.find?function(b,d){return b.find(d)}:function(b,d){var g,k=b.length;for(g=0;gg&&(g=b[d]);return g},arrayMin:function(b){for(var d=b.length,g=b[0];d--;)b[d]d?b=g&&(d=[1/g])));for(k=0;k=b||!r&&c<=(d[k]+ +(d[k+1]||d[k]))/2);k++);return l=n(l*g,-Math.round(Math.log(.001)/Math.LN10))},objectEach:J,offset:function(b){var g=d.documentElement;b=b.parentElement||b.parentNode?b.getBoundingClientRect():{top:0,left:0,width:0,height:0};return{top:b.top+(k.pageYOffset||g.scrollTop)-(g.clientTop||0),left:b.left+(k.pageXOffset||g.scrollLeft)-(g.clientLeft||0),width:b.width,height:b.height}},pad:function(b,d,g){return Array((d||2)+1-String(b).replace("-","").length).join(g||"0")+b},pick:t,pInt:H,relativeLength:function(b, +d,g){return/%$/.test(b)?d*parseFloat(b)/100+(g||0):parseFloat(b)},removeEvent:K,splat:function(b){return y(b)?b:[b]},stableSort:function(b,d){var g=b.length,k,r;for(r=0;r>16,(a&65280)>>8,a&255,1]:4===h&&(B=[(a&3840)>>4|(a&3840)>>8,(a&240)>>4|a&240,(a&15)<<4|a&15,1])}if(!B)for(q=this.parsers.length;q--&&!B;){var f=this.parsers[q];(h=f.regex.exec(a))&&(B=f.parse(h))}}this.rgba=B||[]};u.prototype.get=function(a){var B=this.input,q=this.rgba;if("undefined"!==typeof this.stops){var h=H(B);h.stops=[].concat(h.stops);this.stops.forEach(function(f,c){h.stops[c]=[h.stops[c][0],f.get(a)]})}else h= +q&&v(q[0])?"rgb"===a||!a&&1===q[3]?"rgb("+q[0]+","+q[1]+","+q[2]+")":"a"===a?q[3]:"rgba("+q.join(",")+")":B;return h};u.prototype.brighten=function(a){var B,q=this.rgba;if(this.stops)this.stops.forEach(function(h){h.brighten(a)});else if(v(a)&&0!==a)for(B=0;3>B;B++)q[B]+=x(255*a),0>q[B]&&(q[B]=0),255p?"AM":"PM",P:12>p?"am":"pm",S:h(t.getSeconds()),L:h(Math.floor(l%1E3),3)},a.dateFormats);q(t, +function(b,d){for(;-1!==c.indexOf("%"+d);)c=c.replace("%"+d,"function"===typeof b?b.call(n,l):b)});return e?c.substr(0,1).toUpperCase()+c.substr(1):c};w.prototype.resolveDTLFormat=function(e){return G(e,!0)?e:(e=c(e),{main:e[0],from:e[1],to:e[2]})};w.prototype.getTimeTicks=function(c,l,t,h){var n=this,p=[],d={},k=new n.Date(l),b=c.unitRange,g=c.count||1,r;h=f(h,1);if(H(l)){n.set("Milliseconds",k,b>=e.second?0:g*Math.floor(n.get("Milliseconds",k)/g));b>=e.second&&n.set("Seconds",k,b>=e.minute?0:g* +Math.floor(n.get("Seconds",k)/g));b>=e.minute&&n.set("Minutes",k,b>=e.hour?0:g*Math.floor(n.get("Minutes",k)/g));b>=e.hour&&n.set("Hours",k,b>=e.day?0:g*Math.floor(n.get("Hours",k)/g));b>=e.day&&n.set("Date",k,b>=e.month?1:Math.max(1,g*Math.floor(n.get("Date",k)/g)));if(b>=e.month){n.set("Month",k,b>=e.year?0:g*Math.floor(n.get("Month",k)/g));var F=n.get("FullYear",k)}b>=e.year&&n.set("FullYear",k,F-F%g);b===e.week&&(F=n.get("Day",k),n.set("Date",k,n.get("Date",k)-F+h+(F4*e.month||n.getTimezoneOffset(l)!==n.getTimezoneOffset(t));l=k.getTime();for(k=1;lp.length&&p.forEach(function(b){0===b%18E5&&"000000000"===n.dateFormat("%H%M%S%L", +b)&&(d[b]="day")})}p.info=y(c,{higherRanks:d,totalRange:b*g});return p};return w}();"";return u});L(a,"Core/DefaultOptions.js",[a["Core/Globals.js"],a["Core/Chart/ChartDefaults.js"],a["Core/Color/Color.js"],a["Core/Color/Palette.js"],a["Core/Time.js"],a["Core/Utilities.js"]],function(a,u,E,H,x,y){var v=a.isTouchDevice,B=a.svg;E=E.parse;var q=y.merge;"";var h={colors:H.colors,symbols:["circle","diamond","square","triangle","triangle-down"],lang:{loading:"Loading...",months:"January February March April May June July August September October November December".split(" "), +shortMonths:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),weekdays:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),decimalPoint:".",numericSymbols:"kMGTPE".split(""),resetZoom:"Reset zoom",resetZoomTitle:"Reset zoom level 1:1",thousandsSep:" "},global:{},time:{Date:void 0,getTimezoneOffset:void 0,timezone:void 0,timezoneOffset:0,useUTC:!0},chart:u,title:{text:"Chart title",align:"center",margin:15,widthAdjust:-44},subtitle:{text:"",align:"center",widthAdjust:-44}, +caption:{margin:15,text:"",align:"left",verticalAlign:"bottom"},plotOptions:{},labels:{style:{position:"absolute",color:H.neutralColor80}},legend:{enabled:!0,align:"center",alignColumns:!0,className:"highcharts-no-tooltip",layout:"horizontal",labelFormatter:function(){return this.name},borderColor:H.neutralColor40,borderRadius:0,navigation:{activeColor:H.highlightColor100,inactiveColor:H.neutralColor20},itemStyle:{color:H.neutralColor80,cursor:"pointer",fontSize:"12px",fontWeight:"bold",textOverflow:"ellipsis"}, +itemHoverStyle:{color:H.neutralColor100},itemHiddenStyle:{color:H.neutralColor20},shadow:!1,itemCheckboxStyle:{position:"absolute",width:"13px",height:"13px"},squareSymbol:!0,symbolPadding:5,verticalAlign:"bottom",x:0,y:0,title:{style:{fontWeight:"bold"}}},loading:{labelStyle:{fontWeight:"bold",position:"relative",top:"45%"},style:{position:"absolute",backgroundColor:H.backgroundColor,opacity:.5,textAlign:"center"}},tooltip:{enabled:!0,animation:B,borderRadius:3,dateTimeLabelFormats:{millisecond:"%A, %b %e, %H:%M:%S.%L", +second:"%A, %b %e, %H:%M:%S",minute:"%A, %b %e, %H:%M",hour:"%A, %b %e, %H:%M",day:"%A, %b %e, %Y",week:"Week from %A, %b %e, %Y",month:"%B %Y",year:"%Y"},footerFormat:"",padding:8,snap:v?25:10,headerFormat:'{point.key}
',pointFormat:'\u25cf {series.name}: {point.y}
',backgroundColor:E(H.neutralColor3).setOpacity(.85).get(),borderWidth:1,shadow:!0,style:{color:H.neutralColor80,cursor:"default",fontSize:"12px", +whiteSpace:"nowrap"}},credits:{enabled:!0,href:"https://www.highcharts.com?credits",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:H.neutralColor40,fontSize:"9px"},text:"Highcharts.com"}};h.chart.styledMode=!1;"";var f=new x(q(h.global,h.time));return{defaultOptions:h,defaultTime:f,getOptions:function(){return h},setOptions:function(c){q(!0,h,c);if(c.time||c.global)a.time?a.time.update(q(h.global,h.time,c.global,c.time)):a.time=f;return h}}});L(a,"Core/Animation/Fx.js", +[a["Core/Color/Color.js"],a["Core/Globals.js"],a["Core/Utilities.js"]],function(a,u,E){var v=a.parse,x=u.win,y=E.isNumber,G=E.objectEach;return function(){function a(a,h,f){this.pos=NaN;this.options=h;this.elem=a;this.prop=f}a.prototype.dSetter=function(){var a=this.paths,h=a&&a[0];a=a&&a[1];var f=this.now||0,c=[];if(1!==f&&h&&a)if(h.length===a.length&&1>f)for(var e=0;e=t+this.startTime){this.now=this.end;this.pos=1;this.update();var w=m[this.prop]=!0;G(m,function(c){!0!==c&&(w=!1)});w&&e&&e.call(c);a=!1}else this.pos=f.easing((h-this.startTime)/t),this.now=this.start+(this.end-this.start)*this.pos,this.update(),a=!0;return a};a.prototype.initPath=function(a,h,f){function c(c,l){for(;c.lengthw[1]){var l=f+ +w[1];0<=l?(w[0]=(+w[0]).toExponential(l).split("e")[0],f=l):(w[0]=w[0].split(".")[0]||0,a=20>f?(w[0]* +Math.pow(10,w[1])).toFixed(f):0,w[1]=0)}l=(Math.abs(w[1]?w[0]:a)+Math.pow(10,-Math.max(f,m)-1)).toFixed(f);m=String(q(l));var J=3a?"-":"")+(J?m.substr(0,J)+e:"");a=0>+w[1]&&!n?"0":a+m.substr(J).replace(/(\d{3})(?=\d)/g,"$1"+e);f&&(a+=c+l.slice(-f));w[1]&&0!==+a&&(a+="e"+w[1]);return a}var H=a.defaultOptions,x=a.defaultTime,y=u.getNestedProperty,G=u.isNumber,B=u.pick,q=u.pInt;return{dateFormat:function(a,f,c){return x.dateFormat(a, +f,c)},format:function(a,f,c){var e="{",h=!1,m=/f$/,w=/\.([0-9])/,n=H.lang,l=c&&c.time||x;c=c&&c.numberFormatter||v;for(var J=[];a;){var K=a.indexOf(e);if(-1===K)break;var A=a.slice(0,K);if(h){A=A.split(":");e=y(A.shift()||"",f);if(A.length&&"number"===typeof e)if(A=A.join(":"),m.test(A)){var p=parseInt((A.match(w)||["","-1"])[1],10);null!==e&&(e=c(e,p,n.decimalPoint,-1f.width)f={width:0, +height:0}}else f=this.htmlGetBBox();k.isSVG&&(d=f.width,k=f.height,F&&(f.height=k={"11px,17":14,"13px,20":16}[r&&r.fontSize+","+Math.round(k)]||k),g&&(r=g*h,f.width=Math.abs(k*Math.sin(r))+Math.abs(d*Math.cos(r)),f.height=Math.abs(k*Math.cos(r))+Math.abs(d*Math.sin(r))));if(n&&0]*>/g,"").replace(/</g,"<").replace(/>/g,">")};a.prototype.toFront=function(){var b=this.element;b.parentNode.appendChild(b);return this};a.prototype.translate=function(b,d){return this.attr({translateX:b,translateY:d})};a.prototype.updateShadows=function(b,d,g){var k=this.shadows;if(k)for(var c=k.length;c--;)g.call(k[c],"height"===b?Math.max(d-(k[c].cutHeight||0),0):"d"===b?this.d:d,b,k[c])};a.prototype.updateTransform= +function(){var b=this.scaleX,d=this.scaleY,g=this.inverted,k=this.rotation,c=this.matrix,r=this.element,a=this.translateX||0,l=this.translateY||0;g&&(a+=this.width,l+=this.height);a=["translate("+a+","+l+")"];K(c)&&a.push("matrix("+c.join(",")+")");g?a.push("rotate(90) scale(-1,1)"):k&&a.push("rotate("+k+" "+M(this.rotationOriginX,r.getAttribute("x"),0)+" "+M(this.rotationOriginY,r.getAttribute("y")||0)+")");(K(b)||K(d))&&a.push("scale("+M(b,1)+" "+M(d,1)+")");a.length&&r.setAttribute("transform", +a.join(" "))};a.prototype.visibilitySetter=function(b,d,g){"inherit"===b?g.removeAttribute(d):this[d]!==b&&g.setAttribute(d,b);this[d]=b};a.prototype.xGetter=function(b){"circle"===this.element.nodeName&&("x"===b?b="cx":"y"===b&&(b="cy"));return this._defaultGetter(b)};a.prototype.zIndexSetter=function(b,d){var g=this.renderer,k=this.parentGroup,c=(k||g).element||g.box,r=this.element;g=c===g.box;var a=!1;var l=this.added;var e;K(b)?(r.setAttribute("data-z-index",b),b=+b,this[d]===b&&(l=!1)):K(this[d])&& +r.removeAttribute("data-z-index");this[d]=b;if(l){(b=this.zIndex)&&k&&(k.handleZ=!0);d=c.childNodes;for(e=d.length-1;0<=e&&!a;e--){k=d[e];l=k.getAttribute("data-z-index");var f=!K(l);if(k!==r)if(0>b&&f&&!g&&!e)c.insertBefore(r,d[e]),a=!0;else if(C(l)<=b||f&&(!K(b)||0<=b))c.insertBefore(r,d[e+1]||null),a=!0}a||(c.insertBefore(r,d[g?3:0]||null),a=!0)}return a};return a}();a.prototype["stroke-widthSetter"]=a.prototype.strokeSetter;a.prototype.yGetter=a.prototype.xGetter;a.prototype.matrixSetter=a.prototype.rotationOriginXSetter= +a.prototype.rotationOriginYSetter=a.prototype.rotationSetter=a.prototype.scaleXSetter=a.prototype.scaleYSetter=a.prototype.translateXSetter=a.prototype.translateYSetter=a.prototype.verticalAlignSetter=function(b,d){this[d]=b;this.doTransform=!0};"";return a});L(a,"Core/Renderer/RendererRegistry.js",[a["Core/Globals.js"]],function(a){var v;(function(v){var u;v.rendererTypes={};v.getRendererType=function(a){void 0===a&&(a=u);return v.rendererTypes[a]||v.rendererTypes[u]};v.registerRendererType=function(x, +y,G){v.rendererTypes[x]=y;if(!u||G)u=x,a.Renderer=y}})(v||(v={}));return v});L(a,"Core/Renderer/SVG/SVGLabel.js",[a["Core/Renderer/SVG/SVGElement.js"],a["Core/Utilities.js"]],function(a,u){var v=this&&this.__extends||function(){var a=function(f,c){a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(c,a){c.__proto__=a}||function(c,a){for(var e in a)a.hasOwnProperty(e)&&(c[e]=a[e])};return a(f,c)};return function(f,c){function e(){this.constructor=f}a(f,c);f.prototype=null===c?Object.create(c): +(e.prototype=c.prototype,new e)}}(),H=u.defined,x=u.extend,y=u.isNumber,G=u.merge,B=u.pick,q=u.removeEvent;return function(h){function f(c,a,t,m,w,n,l,J,K,A){var e=h.call(this)||this;e.paddingLeftSetter=e.paddingSetter;e.paddingRightSetter=e.paddingSetter;e.init(c,"g");e.textStr=a;e.x=t;e.y=m;e.anchorX=n;e.anchorY=l;e.baseline=K;e.className=A;e.addClass("button"===A?"highcharts-no-tooltip":"highcharts-label");A&&e.addClass("highcharts-"+A);e.text=c.text("",0,0,J).attr({zIndex:1});var d;"string"=== +typeof w&&((d=/^url\((.*?)\)$/.test(w))||e.renderer.symbols[w])&&(e.symbolKey=w);e.bBox=f.emptyBBox;e.padding=3;e.baselineOffset=0;e.needsBox=c.styledMode||d;e.deferredAttr={};e.alignFactor=0;return e}v(f,h);f.prototype.alignSetter=function(c){c={left:0,center:.5,right:1}[c];c!==this.alignFactor&&(this.alignFactor=c,this.bBox&&y(this.xSetting)&&this.attr({x:this.xSetting}))};f.prototype.anchorXSetter=function(c,a){this.anchorX=c;this.boxAttr(a,Math.round(c)-this.getCrispAdjust()-this.xSetting)};f.prototype.anchorYSetter= +function(c,a){this.anchorY=c;this.boxAttr(a,c-this.ySetting)};f.prototype.boxAttr=function(c,a){this.box?this.box.attr(c,a):this.deferredAttr[c]=a};f.prototype.css=function(c){if(c){var e={};c=G(c);f.textProps.forEach(function(a){"undefined"!==typeof c[a]&&(e[a]=c[a],delete c[a])});this.text.css(e);var h="width"in e;"fontSize"in e||"fontWeight"in e?this.updateTextPadding():h&&this.updateBoxSize()}return a.prototype.css.call(this,c)};f.prototype.destroy=function(){q(this.element,"mouseenter");q(this.element, +"mouseleave");this.text&&this.text.destroy();this.box&&(this.box=this.box.destroy());a.prototype.destroy.call(this)};f.prototype.fillSetter=function(c,a){c&&(this.needsBox=!0);this.fill=c;this.boxAttr(a,c)};f.prototype.getBBox=function(){this.textStr&&0===this.bBox.width&&0===this.bBox.height&&this.updateBoxSize();var c=this.padding,a=B(this.paddingLeft,c);return{width:this.width,height:this.height,x:this.bBox.x-a,y:this.bBox.y-c}};f.prototype.getCrispAdjust=function(){return this.renderer.styledMode&& +this.box?this.box.strokeWidth()%2/2:(this["stroke-width"]?parseInt(this["stroke-width"],10):0)%2/2};f.prototype.heightSetter=function(c){this.heightSetting=c};f.prototype.on=function(c,e){var f=this,h=f.text,w=h&&"SPAN"===h.element.tagName?h:void 0;if(w){var n=function(a){("mouseenter"===c||"mouseleave"===c)&&a.relatedTarget instanceof Element&&(f.element.compareDocumentPosition(a.relatedTarget)&Node.DOCUMENT_POSITION_CONTAINED_BY||w.element.compareDocumentPosition(a.relatedTarget)&Node.DOCUMENT_POSITION_CONTAINED_BY)|| +e.call(f.element,a)};w.on(c,n)}a.prototype.on.call(f,c,n||e);return f};f.prototype.onAdd=function(){var c=this.textStr;this.text.add(this);this.attr({text:H(c)?c:"",x:this.x,y:this.y});this.box&&H(this.anchorX)&&this.attr({anchorX:this.anchorX,anchorY:this.anchorY})};f.prototype.paddingSetter=function(c,a){y(c)?c!==this[a]&&(this[a]=c,this.updateTextPadding()):this[a]=void 0};f.prototype.rSetter=function(c,a){this.boxAttr(a,c)};f.prototype.shadow=function(c){c&&!this.renderer.styledMode&&(this.updateBoxSize(), +this.box&&this.box.shadow(c));return this};f.prototype.strokeSetter=function(c,a){this.stroke=c;this.boxAttr(a,c)};f.prototype["stroke-widthSetter"]=function(a,e){a&&(this.needsBox=!0);this["stroke-width"]=a;this.boxAttr(e,a)};f.prototype["text-alignSetter"]=function(a){this.textAlign=a};f.prototype.textSetter=function(a){"undefined"!==typeof a&&this.text.attr({text:a});this.updateTextPadding()};f.prototype.updateBoxSize=function(){var a=this.text.element.style,e={},h=this.padding,m=this.bBox=y(this.widthSetting)&& +y(this.heightSetting)&&!this.textAlign||!H(this.text.textStr)?f.emptyBBox:this.text.getBBox();this.width=this.getPaddedWidth();this.height=(this.heightSetting||m.height||0)+2*h;a=this.renderer.fontMetrics(a&&a.fontSize,this.text);this.baselineOffset=h+Math.min((this.text.firstLineMetrics||a).b,m.height||Infinity);this.heightSetting&&(this.baselineOffset+=(this.heightSetting-a.h)/2);this.needsBox&&(this.box||(h=this.box=this.symbolKey?this.renderer.symbol(this.symbolKey):this.renderer.rect(),h.addClass(("button"=== +this.className?"":"highcharts-label-box")+(this.className?" highcharts-"+this.className+"-box":"")),h.add(this)),h=this.getCrispAdjust(),e.x=h,e.y=(this.baseline?-this.baselineOffset:0)+h,e.width=Math.round(this.width),e.height=Math.round(this.height),this.box.attr(x(e,this.deferredAttr)),this.deferredAttr={})};f.prototype.updateTextPadding=function(){var a=this.text;this.updateBoxSize();var e=this.baseline?0:this.baselineOffset,f=B(this.paddingLeft,this.padding);H(this.widthSetting)&&this.bBox&& +("center"===this.textAlign||"right"===this.textAlign)&&(f+={center:.5,right:1}[this.textAlign]*(this.widthSetting-this.bBox.width));if(f!==a.x||e!==a.y)a.attr("x",f),a.hasBoxWidthChanged&&(this.bBox=a.getBBox(!0)),"undefined"!==typeof e&&a.attr("y",e);a.x=f;a.y=e};f.prototype.widthSetter=function(a){this.widthSetting=y(a)?a:void 0};f.prototype.getPaddedWidth=function(){var a=this.padding,e=B(this.paddingLeft,a);a=B(this.paddingRight,a);return(this.widthSetting||this.bBox.width||0)+e+a};f.prototype.xSetter= +function(a){this.x=a;this.alignFactor&&(a-=this.alignFactor*this.getPaddedWidth(),this["forceAnimate:x"]=!0);this.xSetting=Math.round(a);this.attr("translateX",this.xSetting)};f.prototype.ySetter=function(a){this.ySetting=this.y=Math.round(a);this.attr("translateY",this.ySetting)};f.emptyBBox={width:0,height:0,x:0,y:0};f.textProps="color direction fontFamily fontSize fontStyle fontWeight lineHeight textAlign textDecoration textOutline textOverflow width".split(" ");return f}(a)});L(a,"Core/Renderer/SVG/Symbols.js", +[a["Core/Utilities.js"]],function(a){function v(a,q,h,f,c){var e=[];if(c){var t=c.start||0,m=G(c.r,h);h=G(c.r,f||h);var w=(c.end||0)-.001;f=c.innerR;var n=G(c.open,.001>Math.abs((c.end||0)-t-2*Math.PI)),l=Math.cos(t),J=Math.sin(t),K=Math.cos(w),A=Math.sin(w);t=G(c.longArc,.001>w-t-Math.PI?0:1);e.push(["M",a+m*l,q+h*J],["A",m,h,0,t,G(c.clockwise,1),a+m*K,q+h*A]);x(f)&&e.push(n?["M",a+f*K,q+f*A]:["L",a+f*K,q+f*A],["A",f,f,0,t,x(c.clockwise)?1-c.clockwise:0,a+f*l,q+f*J]);n||e.push(["Z"])}return e}function E(a, +q,h,f,c){return c&&c.r?H(a,q,h,f,c):[["M",a,q],["L",a+h,q],["L",a+h,q+f],["L",a,q+f],["Z"]]}function H(a,q,h,f,c){c=c&&c.r||0;return[["M",a+c,q],["L",a+h-c,q],["C",a+h,q,a+h,q,a+h,q+c],["L",a+h,q+f-c],["C",a+h,q+f,a+h,q+f,a+h-c,q+f],["L",a+c,q+f],["C",a,q+f,a,q+f,a,q+f-c],["L",a,q+c],["C",a,q,a,q,a+c,q]]}var x=a.defined,y=a.isNumber,G=a.pick;return{arc:v,callout:function(a,q,h,f,c){var e=Math.min(c&&c.r||0,h,f),t=e+6,m=c&&c.anchorX;c=c&&c.anchorY||0;var w=H(a,q,h,f,{r:e});if(!y(m))return w;a+m>=h? +c>q+t&&c=a+m?c>q+t&&cf&&m>a+t&&mc&&m>a+t&&m/g;var J=[h,this.ellipsis,this.noWrap,this.textLineHeight,this.textOutline,this.fontSize,this.width].join();if(J!==f.textCache){f.textCache=J;for(delete f.actualWidth;n--;)c.removeChild(w[n]);m||this.ellipsis||this.width||-1!==h.indexOf(" ")&&(!this.noWrap||l.test(h))?""!==h&&(e&&e.appendChild(c),h=new a(h),this.modifyTree(h.nodes),h.addToDOM(f.element),this.modifyDOM(),this.ellipsis&&-1!==(c.textContent||"").indexOf("\u2026")&& +f.attr("title",this.unescapeEntities(f.textStr||"",["<",">"])),e&&e.removeChild(c)):c.appendChild(v.createTextNode(this.unescapeEntities(h)));G(this.textOutline)&&f.applyTextOutline&&f.applyTextOutline(this.textOutline)}};h.prototype.modifyDOM=function(){var a=this,c=this.svgElement,e=y(c.element,"x");c.firstLineMetrics=void 0;[].forEach.call(c.element.querySelectorAll("tspan.highcharts-br"),function(f,l){f.nextSibling&&f.previousSibling&&(0===l&&1===f.previousSibling.nodeType&&(c.firstLineMetrics= +c.renderer.fontMetrics(void 0,f.previousSibling)),y(f,{dy:a.getLineHeight(f.nextSibling),x:e}))});var h=this.width||0;if(h){var m=function(f,l){var n=f.textContent||"",w=n.replace(/([^\^])-/g,"$1- ").split(" "),m=!a.noWrap&&(1m){for(;A<=p;)d=Math.ceil((A+p)/2),e&&(k=w(e,d)),g=b(d,k&&k.length-1),A===p?A=p+1:g>m?p=d-1:A=d;0===p?a.textContent="":c&&p===c.length-1||(a.textContent=k||w(c||e,d))}e&&e.splice(0,d);f.actualWidth=g;f.rotation=t};h.prototype.unescapeEntities=function(a,c){B(this.renderer.escapes,function(e,f){c&&-1!==c.indexOf(e)||(a=a.toString().replace(new RegExp(e,"g"),f))});return a};return h}()}); +L(a,"Core/Renderer/SVG/SVGRenderer.js",[a["Core/Renderer/HTML/AST.js"],a["Core/Color/Color.js"],a["Core/Globals.js"],a["Core/Color/Palette.js"],a["Core/Renderer/RendererRegistry.js"],a["Core/Renderer/SVG/SVGElement.js"],a["Core/Renderer/SVG/SVGLabel.js"],a["Core/Renderer/SVG/Symbols.js"],a["Core/Renderer/SVG/TextBuilder.js"],a["Core/Utilities.js"]],function(a,u,E,H,x,y,G,B,q,h){var f=E.charts,c=E.deg2rad,e=E.doc,t=E.isFirefox,m=E.isMS,w=E.isWebKit,n=E.noop,l=E.SVG_NS,J=E.symbolSizes,K=E.win,A=h.addEvent, +p=h.attr,d=h.createElement,k=h.css,b=h.defined,g=h.destroyObjectProperties,r=h.extend,F=h.isArray,D=h.isNumber,M=h.isObject,C=h.isString,O=h.merge,v=h.pick,W=h.pInt,Y=h.uniqueKey,ba;E=function(){function z(b,d,g,a,k,r,c){this.width=this.url=this.style=this.isSVG=this.imgCount=this.height=this.gradients=this.globalAnimation=this.defs=this.chartIndex=this.cacheKeys=this.cache=this.boxWrapper=this.box=this.alignedObjects=void 0;this.init(b,d,g,a,k,r,c)}z.prototype.init=function(b,d,g,a,r,c,z){var l= +this.createElement("svg").attr({version:"1.1","class":"highcharts-root"}),Q=l.element;z||l.css(this.getStyle(a));b.appendChild(Q);p(b,"dir","ltr");-1===b.innerHTML.indexOf("xmlns")&&p(Q,"xmlns",this.SVG_NS);this.isSVG=!0;this.box=Q;this.boxWrapper=l;this.alignedObjects=[];this.url=this.getReferenceURL();this.createElement("desc").add().element.appendChild(e.createTextNode("Created with Highcharts 9.1.2"));this.defs=this.createElement("defs").add();this.allowHTML=c;this.forExport=r;this.styledMode= +z;this.gradients={};this.cache={};this.cacheKeys=[];this.imgCount=0;this.setSize(d,g,!1);var I;t&&b.getBoundingClientRect&&(d=function(){k(b,{left:0,top:0});I=b.getBoundingClientRect();k(b,{left:Math.ceil(I.left)-I.left+"px",top:Math.ceil(I.top)-I.top+"px"})},d(),this.unSubPixelFix=A(K,"resize",d))};z.prototype.definition=function(b){return(new a([b])).addToDOM(this.defs.element)};z.prototype.getReferenceURL=function(){if((t||w)&&e.getElementsByTagName("base").length){if(!b(ba)){var d=Y();d=(new a([{tagName:"svg", +attributes:{width:8,height:8},children:[{tagName:"defs",children:[{tagName:"clipPath",attributes:{id:d},children:[{tagName:"rect",attributes:{width:4,height:4}}]}]},{tagName:"rect",attributes:{id:"hitme",width:8,height:8,"clip-path":"url(#"+d+")",fill:"rgba(0,0,0,0.001)"}}]}])).addToDOM(e.body);k(d,{position:"fixed",top:0,left:0,zIndex:9E5});var g=e.elementFromPoint(6,6);ba="hitme"===(g&&g.id);e.body.removeChild(d)}if(ba)return K.location.href.split("#")[0].replace(/<[^>]*>/g,"").replace(/([\('\)])/g, +"\\$1").replace(/ /g,"%20")}return""};z.prototype.getStyle=function(b){return this.style=r({fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif',fontSize:"12px"},b)};z.prototype.setStyle=function(b){this.boxWrapper.css(this.getStyle(b))};z.prototype.isHidden=function(){return!this.boxWrapper.getBBox().width};z.prototype.destroy=function(){var b=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();g(this.gradients||{});this.gradients=null;b&&(this.defs=b.destroy()); +this.unSubPixelFix&&this.unSubPixelFix();return this.alignedObjects=null};z.prototype.createElement=function(b){var d=new this.Element;d.init(this,b);return d};z.prototype.getRadialAttr=function(b,d){return{cx:b[0]-b[2]/2+(d.cx||0)*b[2],cy:b[1]-b[2]/2+(d.cy||0)*b[2],r:(d.r||0)*b[2]}};z.prototype.buildText=function(b){(new q(b)).buildSVG()};z.prototype.getContrast=function(b){b=u.parse(b).rgba;b[0]*=1;b[1]*=1.2;b[2]*=.5;return 459b?b+3:Math.round(1.2*b);return{h:d,b:Math.round(.8*d),f:b}};z.prototype.rotCorr=function(b,d,g){var a=b;d&&g&&(a=Math.max(a*Math.cos(d*c),4));return{x:-b/3*Math.sin(d*c),y:a}};z.prototype.pathToSegments=function(b){for(var d= +[],g=[],a={A:8,C:7,H:2,L:3,M:3,Q:5,S:5,T:3,V:2},k=0;k":">","'":"'",'"':"""},symbols:B,draw:n});x.registerRendererType("svg",E,!0);"";return E});L(a,"Core/Renderer/HTML/HTMLElement.js",[a["Core/Globals.js"],a["Core/Renderer/SVG/SVGElement.js"],a["Core/Utilities.js"]],function(a,u,E){var v=this&&this.__extends||function(){var a=function(c,e){a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,c){a.__proto__=c}||function(a,c){for(var l in c)c.hasOwnProperty(l)&&(a[l]=c[l])};return a(c,e)};return function(c, +e){function f(){this.constructor=c}a(c,e);c.prototype=null===e?Object.create(e):(f.prototype=e.prototype,new f)}}(),x=a.isFirefox,y=a.isMS,G=a.isWebKit,B=a.win,q=E.css,h=E.defined,f=E.extend,c=E.pick,e=E.pInt;return function(a){function m(){return null!==a&&a.apply(this,arguments)||this}v(m,a);m.compose=function(a){a=a.prototype;var c=m.prototype;a.getSpanCorrection=c.getSpanCorrection;a.htmlCss=c.htmlCss;a.htmlGetBBox=c.htmlGetBBox;a.htmlUpdateTransform=c.htmlUpdateTransform;a.setSpanRotation=c.setSpanRotation}; +m.prototype.getSpanCorrection=function(a,c,l){this.xCorr=-a*l;this.yCorr=-c};m.prototype.htmlCss=function(a){var e="SPAN"===this.element.tagName&&a&&"width"in a,l=c(e&&a.width,void 0);if(e){delete a.width;this.textWidth=l;var h=!0}a&&"ellipsis"===a.textOverflow&&(a.whiteSpace="nowrap",a.overflow="hidden");this.styles=f(this.styles,a);q(this.element,a);h&&this.htmlUpdateTransform();return this};m.prototype.htmlGetBBox=function(){var a=this.element;return{x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth, +height:a.offsetHeight}};m.prototype.htmlUpdateTransform=function(){if(this.added){var a=this.renderer,c=this.element,l=this.translateX||0,f=this.translateY||0,m=this.x||0,t=this.y||0,p=this.textAlign||"left",d={left:0,center:.5,right:1}[p],k=this.styles;k=k&&k.whiteSpace;q(c,{marginLeft:l,marginTop:f});!a.styledMode&&this.shadows&&this.shadows.forEach(function(b){q(b,{marginLeft:l+1,marginTop:f+1})});this.inverted&&[].forEach.call(c.childNodes,function(b){a.invertChild(b,c)});if("SPAN"===c.tagName){var b= +this.rotation,g=this.textWidth&&e(this.textWidth),r=[b,p,c.innerHTML,this.textWidth,this.textAlign].join(),F=void 0;(F=g!==this.oldTextWidth)&&!(F=g>this.oldTextWidth)&&((F=this.textPxLength)||(q(c,{width:"",whiteSpace:k||"nowrap"}),F=c.offsetWidth),F=F>g);F&&(/[ \-]/.test(c.textContent||c.innerText)||"ellipsis"===c.style.textOverflow)?(q(c,{width:g+"px",display:"block",whiteSpace:k||"normal"}),this.oldTextWidth=g,this.hasBoxWidthChanged=!0):this.hasBoxWidthChanged=!1;r!==this.cTT&&(F=a.fontMetrics(c.style.fontSize, +c).b,!h(b)||b===(this.oldRotation||0)&&p===this.oldAlign||this.setSpanRotation(b,d,F),this.getSpanCorrection(!h(b)&&this.textPxLength||c.offsetWidth,F,d,b,p));q(c,{left:m+(this.xCorr||0)+"px",top:t+(this.yCorr||0)+"px"});this.cTT=r;this.oldRotation=b;this.oldAlign=p}}else this.alignOnAdd=!0};m.prototype.setSpanRotation=function(a,c,l){var e={},f=y&&!/Edge/.test(B.navigator.userAgent)?"-ms-transform":G?"-webkit-transform":x?"MozTransform":B.opera?"-o-transform":void 0;f&&(e[f]=e.transform="rotate("+ +a+"deg)",e[f+(x?"Origin":"-origin")]=e.transformOrigin=100*c+"% "+l+"px",q(this.element,e))};return m}(u)});L(a,"Core/Renderer/HTML/HTMLRenderer.js",[a["Core/Renderer/HTML/AST.js"],a["Core/Renderer/SVG/SVGElement.js"],a["Core/Renderer/SVG/SVGRenderer.js"],a["Core/Utilities.js"]],function(a,u,E,H){var v=this&&this.__extends||function(){var a=function(f,c){a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,c){a.__proto__=c}||function(a,c){for(var e in c)c.hasOwnProperty(e)&&(a[e]=c[e])}; +return a(f,c)};return function(f,c){function e(){this.constructor=f}a(f,c);f.prototype=null===c?Object.create(c):(e.prototype=c.prototype,new e)}}(),y=H.attr,G=H.createElement,B=H.extend,q=H.pick;return function(h){function f(){return null!==h&&h.apply(this,arguments)||this}v(f,h);f.compose=function(a){a.prototype.html=f.prototype.html};f.prototype.html=function(c,e,f){var h=this.createElement("span"),w=h.element,n=h.renderer,l=n.isSVG,t=function(a,c){["opacity","visibility"].forEach(function(l){a[l+ +"Setter"]=function(d,k,b){var g=a.div?a.div.style:c;u.prototype[l+"Setter"].call(this,d,k,b);g&&(g[k]=d)}});a.addedSetters=!0};h.textSetter=function(c){c!==this.textStr&&(delete this.bBox,delete this.oldTextWidth,a.setElementHTML(this.element,q(c,"")),this.textStr=c,h.doTransform=!0)};l&&t(h,h.element.style);h.xSetter=h.ySetter=h.alignSetter=h.rotationSetter=function(a,c){"align"===c?h.alignValue=h.textAlign=a:h[c]=a;h.doTransform=!0};h.afterSetters=function(){this.doTransform&&(this.htmlUpdateTransform(), +this.doTransform=!1)};h.attr({text:c,x:Math.round(e),y:Math.round(f)}).css({position:"absolute"});n.styledMode||h.css({fontFamily:this.style.fontFamily,fontSize:this.style.fontSize});w.style.whiteSpace="nowrap";h.css=h.htmlCss;l&&(h.add=function(a){var c=n.box.parentNode,l=[];if(this.parentGroup=a){var d=a.div;if(!d){for(;a;)l.push(a),a=a.parentGroup;l.reverse().forEach(function(a){function b(b,d){a[d]=b;"translateX"===d?e.left=b+"px":e.top=b+"px";a.doTransform=!0}var g=y(a.element,"class"),k=a.styles|| +{};d=a.div=a.div||G("div",g?{className:g}:void 0,{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px",display:a.display,opacity:a.opacity,cursor:k.cursor,pointerEvents:k.pointerEvents},d||c);var e=d.style;B(a,{classSetter:function(b){return function(d){this.element.setAttribute("class",d);b.className=d}}(d),on:function(){l[0].div&&h.on.apply({element:l[0].div,onEvents:h.onEvents},arguments);return a},translateXSetter:b,translateYSetter:b});a.addedSetters||t(a)})}}else d=c;d.appendChild(w); +h.added=!0;h.alignOnAdd&&h.htmlUpdateTransform();return h});return h};return f}(E)});L(a,"Core/Foundation.js",[a["Core/Utilities.js"]],function(a){var v=a.addEvent,E=a.isFunction,H=a.objectEach,x=a.removeEvent;return{registerEventOptions:function(a,u){a.eventOptions=a.eventOptions||{};H(u.events,function(u,q){E(u)&&a.eventOptions[q]!==u&&(E(a.eventOptions[q])&&x(a,q,a.eventOptions[q]),a.eventOptions[q]=u,v(a,q,u))})}}});L(a,"Core/Axis/AxisDefaults.js",[a["Core/Color/Palette.js"]],function(a){var v; +(function(v){v.defaultXAxisOptions={alignTicks:!0,allowDecimals:void 0,panningEnabled:!0,zIndex:2,zoomEnabled:!0,dateTimeLabelFormats:{millisecond:{main:"%H:%M:%S.%L",range:!1},second:{main:"%H:%M:%S",range:!1},minute:{main:"%H:%M",range:!1},hour:{main:"%H:%M",range:!1},day:{main:"%e. %b"},week:{main:"%e. %b"},month:{main:"%b '%y"},year:{main:"%Y"}},endOnTick:!1,gridLineDashStyle:"Solid",gridZIndex:1,labels:{autoRotation:void 0,autoRotationLimit:80,distance:void 0,enabled:!0,indentation:10,overflow:"justify", +padding:5,reserveSpace:void 0,rotation:void 0,staggerLines:0,step:0,useHTML:!1,x:0,zIndex:7,style:{color:a.neutralColor60,cursor:"default",fontSize:"11px"}},maxPadding:.01,minorGridLineDashStyle:"Solid",minorTickLength:2,minorTickPosition:"outside",minPadding:.01,offset:void 0,opposite:!1,reversed:void 0,reversedStacks:!1,showEmpty:!0,showFirstLabel:!0,showLastLabel:!0,startOfWeek:1,startOnTick:!1,tickLength:10,tickPixelInterval:100,tickmarkPlacement:"between",tickPosition:"outside",title:{align:"middle", +rotation:0,useHTML:!1,x:0,y:0,style:{color:a.neutralColor60}},type:"linear",uniqueNames:!0,visible:!0,minorGridLineColor:a.neutralColor5,minorGridLineWidth:1,minorTickColor:a.neutralColor40,lineColor:a.highlightColor20,lineWidth:1,gridLineColor:a.neutralColor10,gridLineWidth:void 0,tickColor:a.highlightColor20};v.defaultYAxisOptions={reversedStacks:!0,endOnTick:!0,maxPadding:.05,minPadding:.05,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8},startOnTick:!0,title:{rotation:270,text:"Values"},stackLabels:{animation:{}, +allowOverlap:!1,enabled:!1,crop:!0,overflow:"justify",formatter:function(){var a=this.axis.chart.numberFormatter;return a(this.total,-1)},style:{color:a.neutralColor100,fontSize:"11px",fontWeight:"bold",textOutline:"1px contrast"}},gridLineWidth:1,lineWidth:0};v.defaultLeftAxisOptions={labels:{x:-15},title:{rotation:270}};v.defaultRightAxisOptions={labels:{x:15},title:{rotation:90}};v.defaultBottomAxisOptions={labels:{autoRotation:[-45],x:0},margin:15,title:{rotation:0}};v.defaultTopAxisOptions={labels:{autoRotation:[-45], +x:0},margin:15,title:{rotation:0}}})(v||(v={}));return v});L(a,"Core/Axis/Tick.js",[a["Core/FormatUtilities.js"],a["Core/Globals.js"],a["Core/Utilities.js"]],function(a,u,E){var v=u.deg2rad,x=E.clamp,y=E.correctFloat,G=E.defined,B=E.destroyObjectProperties,q=E.extend,h=E.fireEvent,f=E.isNumber,c=E.merge,e=E.objectEach,t=E.pick;u=function(){function m(a,c,l,e,f){this.isNewLabel=this.isNew=!0;this.axis=a;this.pos=c;this.type=l||"";this.parameters=f||{};this.tickmarkOffset=this.parameters.tickmarkOffset; +this.options=this.parameters.options;h(this,"init");l||e||this.addLabel()}m.prototype.addLabel=function(){var c=this,e=c.axis,l=e.options,m=e.chart,K=e.categories,A=e.logarithmic,p=e.names,d=c.pos,k=t(c.options&&c.options.labels,l.labels),b=e.tickPositions,g=d===b[0],r=d===b[b.length-1],F=(!k.step||1===k.step)&&1===e.tickInterval;b=b.info;var D=c.label,M;K=this.parameters.category||(K?t(K[d],p[d],d):d);A&&f(K)&&(K=y(A.lin2log(K)));if(e.dateTime&&b){var C=m.time.resolveDTLFormat(l.dateTimeLabelFormats[!l.grid&& +b.higherRanks[d]||b.unitName]);var O=C.main}c.isFirst=g;c.isLast=r;var v={axis:e,chart:m,dateTimeLabelFormat:O,isFirst:g,isLast:r,pos:d,tick:c,tickPositionInfo:b,value:K};h(this,"labelFormat",v);var W=function(b){return k.formatter?k.formatter.call(b,b):k.format?(b.text=e.defaultLabelFormatter.call(b),a.format(k.format,b,m)):e.defaultLabelFormatter.call(b,b)};l=W.call(v,v);var u=C&&C.list;c.shortenLabel=u?function(){for(M=0;Mk&&e-b*gh&&(C=Math.round((f-e)/Math.cos(k*v)));else if(f=e+(1-b)*g,e-b*gh&&(D=h-a.x+D*b,M=-1),D=Math.min(r,D),DD||c.autoRotation&&(d.styles||{}).width)C=D;C&&(this.shortenLabel? +this.shortenLabel():(F.width=Math.floor(C)+"px",(l.style||{}).textOverflow||(F.textOverflow="ellipsis"),d.css(F)))};m.prototype.moveLabel=function(a,c){var l=this,f=l.label,h=l.axis,n=h.reversed,p=!1;f&&f.textStr===a?(l.movedLabel=f,p=!0,delete l.label):e(h.ticks,function(d){p||d.isNew||d===l||!d.label||d.label.textStr!==a||(l.movedLabel=d.label,p=!0,d.labelPos=l.movedLabel.xy,delete d.label)});if(!p&&(l.labelPos||f)){var d=l.labelPos||f.xy;f=h.horiz?n?0:h.width+h.left:d.x;h=h.horiz?d.y:n?h.width+ +h.left:0;l.movedLabel=l.createLabel({x:f,y:h},a,c);l.movedLabel&&l.movedLabel.attr({opacity:0})}};m.prototype.render=function(a,c,l){var e=this.axis,f=e.horiz,n=this.pos,p=t(this.tickmarkOffset,e.tickmarkOffset);n=this.getPosition(f,n,p,c);p=n.x;var d=n.y;e=f&&p===e.pos+e.len||!f&&d===e.pos?-1:1;f=t(l,this.label&&this.label.newOpacity,1);l=t(l,1);this.isActive=!0;this.renderGridLine(c,l,e);this.renderMark(n,l,e);this.renderLabel(n,c,f,a);this.isNew=!1;h(this,"afterRender")};m.prototype.renderGridLine= +function(a,c,e){var l=this.axis,f=l.options,h={},p=this.pos,d=this.type,k=t(this.tickmarkOffset,l.tickmarkOffset),b=l.chart.renderer,g=this.gridLine,r=f.gridLineWidth,F=f.gridLineColor,D=f.gridLineDashStyle;"minor"===this.type&&(r=f.minorGridLineWidth,F=f.minorGridLineColor,D=f.minorGridLineDashStyle);g||(l.chart.styledMode||(h.stroke=F,h["stroke-width"]=r||0,h.dashstyle=D),d||(h.zIndex=1),a&&(c=0),this.gridLine=g=b.path().attr(h).addClass("highcharts-"+(d?d+"-":"")+"grid-line").add(l.gridGroup)); +if(g&&(e=l.getPlotLinePath({value:p+k,lineWidth:g.strokeWidth()*e,force:"pass",old:a})))g[a||this.isNew?"attr":"animate"]({d:e,opacity:c})};m.prototype.renderMark=function(a,c,e){var l=this.axis,f=l.options,h=l.chart.renderer,p=this.type,d=l.tickSize(p?p+"Tick":"tick"),k=a.x;a=a.y;var b=t(f["minor"!==p?"tickWidth":"minorTickWidth"],!p&&l.isXAxis?1:0);f=f["minor"!==p?"tickColor":"minorTickColor"];var g=this.mark,r=!g;d&&(l.opposite&&(d[0]=-d[0]),g||(this.mark=g=h.path().addClass("highcharts-"+(p?p+ +"-":"")+"tick").add(l.axisGroup),l.chart.styledMode||g.attr({stroke:f,"stroke-width":b})),g[r?"attr":"animate"]({d:this.getMarkPath(k,a,d[0],g.strokeWidth()*e,l.horiz,h),opacity:c}))};m.prototype.renderLabel=function(a,c,e,h){var l=this.axis,n=l.horiz,p=l.options,d=this.label,k=p.labels,b=k.step;l=t(this.tickmarkOffset,l.tickmarkOffset);var g=a.x;a=a.y;var r=!0;d&&f(g)&&(d.xy=a=this.getLabelPosition(g,a,d,n,k,l,h,b),this.isFirst&&!this.isLast&&!p.showFirstLabel||this.isLast&&!this.isFirst&&!p.showLastLabel? +r=!1:!n||k.step||k.rotation||c||0===e||this.handleOverflow(a),b&&h%b&&(r=!1),r&&f(a.y)?(a.opacity=e,d[this.isNewLabel?"attr":"animate"](a),this.isNewLabel=!1):(d.attr("y",-9999),this.isNewLabel=!0))};m.prototype.replaceMovedLabel=function(){var a=this.label,c=this.axis,e=c.reversed;if(a&&!this.isNew){var f=c.horiz?e?c.left:c.width+c.left:a.xy.x;e=c.horiz?a.xy.y:e?c.width+c.top:c.top;a.animate({x:f,y:e,opacity:0},void 0,a.destroy);delete this.label}c.isDirty=!0;this.label=this.movedLabel;delete this.movedLabel}; +return m}();"";return u});L(a,"Core/Axis/Axis.js",[a["Core/Animation/AnimationUtilities.js"],a["Core/Color/Color.js"],a["Core/Color/Palette.js"],a["Core/DefaultOptions.js"],a["Core/Foundation.js"],a["Core/Globals.js"],a["Core/Utilities.js"],a["Core/Axis/AxisDefaults.js"],a["Core/Axis/Tick.js"]],function(a,u,E,H,x,y,G,B,q){var h=a.animObject,f=x.registerEventOptions,c=y.deg2rad,e=H.defaultOptions,t=G.arrayMax,m=G.arrayMin,w=G.clamp,n=G.correctFloat,l=G.defined,J=G.destroyObjectProperties,v=G.erase, +A=G.error,p=G.extend,d=G.fireEvent,k=G.getMagnitude,b=G.isArray,g=G.isNumber,r=G.isString,F=G.merge,D=G.normalizeTickInterval,M=G.objectEach,C=G.pick,O=G.relativeLength,S=G.removeEvent,W=G.splat,Y=G.syncTimeout;a=function(){function a(b,a){this.zoomEnabled=this.width=this.visible=this.userOptions=this.translationSlope=this.transB=this.transA=this.top=this.ticks=this.tickRotCorr=this.tickPositions=this.tickmarkOffset=this.tickInterval=this.tickAmount=this.side=this.series=this.right=this.positiveValuesOnly= +this.pos=this.pointRangePadding=this.pointRange=this.plotLinesAndBandsGroups=this.plotLinesAndBands=this.paddedTicks=this.overlap=this.options=this.offset=this.names=this.minPixelPadding=this.minorTicks=this.minorTickInterval=this.min=this.maxLabelLength=this.max=this.len=this.left=this.labelFormatter=this.labelEdge=this.isLinked=this.height=this.hasVisibleSeries=this.hasNames=this.eventOptions=this.coll=this.closestPointRange=this.chart=this.categories=this.bottom=this.alternateBands=void 0;this.init(b, +a)}a.prototype.init=function(b,a){var c=a.isX;this.chart=b;this.horiz=b.inverted&&!this.isZAxis?!c:c;this.isXAxis=c;this.coll=this.coll||(c?"xAxis":"yAxis");d(this,"init",{userOptions:a});this.opposite=C(a.opposite,this.opposite);this.side=C(a.side,this.side,this.horiz?this.opposite?0:2:this.opposite?1:3);this.setOptions(a);var k=this.options,r=k.labels,e=k.type;this.userOptions=a;this.minPixelPadding=0;this.reversed=C(k.reversed,this.reversed);this.visible=k.visible;this.zoomEnabled=k.zoomEnabled; +this.hasNames="category"===e||!0===k.categories;this.categories=k.categories||this.hasNames;this.names||(this.names=[],this.names.keys={});this.plotLinesAndBandsGroups={};this.positiveValuesOnly=!!this.logarithmic;this.isLinked=l(k.linkedTo);this.ticks={};this.labelEdge=[];this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=k.minRange||k.maxZoom;this.range=k.range;this.offset=k.offset||0;this.min=this.max=null;a=C(k.crosshair,W(b.options.tooltip.crosshairs)[c? +0:1]);this.crosshair=!0===a?{}:a;-1===b.axes.indexOf(this)&&(c?b.axes.splice(b.xAxis.length,0,this):b.axes.push(this),b[this.coll].push(this));this.series=this.series||[];b.inverted&&!this.isZAxis&&c&&"undefined"===typeof this.reversed&&(this.reversed=!0);this.labelRotation=g(r.rotation)?r.rotation:void 0;f(this,k);d(this,"afterInit")};a.prototype.setOptions=function(b){this.options=F(B.defaultXAxisOptions,"yAxis"===this.coll&&B.defaultYAxisOptions,[B.defaultTopAxisOptions,B.defaultRightAxisOptions, +B.defaultBottomAxisOptions,B.defaultLeftAxisOptions][this.side],F(e[this.coll],b));d(this,"afterSetOptions",{userOptions:b})};a.prototype.defaultLabelFormatter=function(b){var a=this.axis;b=this.chart.numberFormatter;var d=g(this.value)?this.value:NaN,c=a.chart.time,k=this.dateTimeLabelFormat,r=e.lang,l=r.numericSymbols;r=r.numericSymbolMagnitude||1E3;var z=a.logarithmic?Math.abs(d):a.tickInterval,f=l&&l.length;if(a.categories)var h=""+this.value;else if(k)h=c.dateFormat(k,d);else if(f&&1E3<=z)for(;f--&& +"undefined"===typeof h;)a=Math.pow(r,f+1),z>=a&&0===10*d%a&&null!==l[f]&&0!==d&&(h=b(d/a,-1)+l[f]);"undefined"===typeof h&&(h=1E4<=Math.abs(d)?b(d,-1):b(d,-1,void 0,""));return h};a.prototype.getSeriesExtremes=function(){var b=this,a=b.chart,k;d(this,"getSeriesExtremes",null,function(){b.hasVisibleSeries=!1;b.dataMin=b.dataMax=b.threshold=null;b.softThreshold=!b.isXAxis;b.stacking&&b.stacking.buildStacks();b.series.forEach(function(d){if(d.visible||!a.options.chart.ignoreHiddenSeries){var c=d.options, +r=c.threshold;b.hasVisibleSeries=!0;b.positiveValuesOnly&&0>=r&&(r=null);if(b.isXAxis){if(c=d.xData,c.length){c=b.logarithmic?c.filter(b.validatePositiveValue):c;k=d.getXExtremes(c);var e=k.min;var z=k.max;g(e)||e instanceof Date||(c=c.filter(g),k=d.getXExtremes(c),e=k.min,z=k.max);c.length&&(b.dataMin=Math.min(C(b.dataMin,e),e),b.dataMax=Math.max(C(b.dataMax,z),z))}}else if(d=d.applyExtremes(),g(d.dataMin)&&(e=d.dataMin,b.dataMin=Math.min(C(b.dataMin,e),e)),g(d.dataMax)&&(z=d.dataMax,b.dataMax=Math.max(C(b.dataMax, +z),z)),l(r)&&(b.threshold=r),!c.softThreshold||b.positiveValuesOnly)b.softThreshold=!1}})});d(this,"afterGetSeriesExtremes")};a.prototype.translate=function(b,a,d,c,k,r){var e=this.linkedParent||this,l=c&&e.old?e.old.min:e.min,z=e.minPixelPadding;k=(e.isOrdinal||e.brokenAxis&&e.brokenAxis.hasBreaks||e.logarithmic&&k)&&e.lin2val;var f=1,I=0;c=c&&e.old?e.old.transA:e.transA;c||(c=e.transA);d&&(f*=-1,I=e.len);e.reversed&&(f*=-1,I-=f*(e.sector||e.len));a?(b=(b*f+I-z)/c+l,k&&(b=e.lin2val(b))):(k&&(b=e.val2lin(b)), +b=g(l)?f*(b-l)*c+I+f*z+(g(r)?c*r:0):void 0);return b};a.prototype.toPixels=function(b,a){return this.translate(b,!1,!this.horiz,null,!0)+(a?0:this.pos)};a.prototype.toValue=function(b,a){return this.translate(b-(a?0:this.pos),!0,!this.horiz,null,!0)};a.prototype.getPlotLinePath=function(b){function a(b,a,d){if("pass"!==M&&bd)M?b=w(b,a,d):Z=!0;return b}var c=this,k=c.chart,r=c.left,e=c.top,l=b.old,f=b.value,z=b.lineWidth,h=l&&k.oldChartHeight||k.chartHeight,F=l&&k.oldChartWidth||k.chartWidth, +D=c.transB,p=b.translatedValue,M=b.force,n,m,t,q,Z;b={value:f,lineWidth:z,old:l,force:M,acrossPanes:b.acrossPanes,translatedValue:p};d(this,"getPlotLinePath",b,function(b){p=C(p,c.translate(f,null,null,l));p=w(p,-1E5,1E5);n=t=Math.round(p+D);m=q=Math.round(h-p-D);g(p)?c.horiz?(m=e,q=h-c.bottom,n=t=a(n,r,r+c.width)):(n=r,t=F-c.right,m=q=a(m,e,e+c.height)):(Z=!0,M=!1);b.path=Z&&!M?null:k.renderer.crispLine([["M",n,m],["L",t,q]],z||1)});return b.path};a.prototype.getLinearTickPositions=function(b,a, +d){var g=n(Math.floor(a/b)*b);d=n(Math.ceil(d/b)*b);var c=[],k;n(g+b)===g&&(k=20);if(this.single)return[a];for(a=g;a<=d;){c.push(a);a=n(a+b,k);if(a===r)break;var r=a}return c};a.prototype.getMinorTickInterval=function(){var b=this.options;return!0===b.minorTicks?C(b.minorTickInterval,"auto"):!1===b.minorTicks?null:b.minorTickInterval};a.prototype.getMinorTickPositions=function(){var b=this.options,a=this.tickPositions,d=this.minorTickInterval,g=this.pointRangePadding||0,c=this.min-g;g=this.max+g; +var k=g-c,r=[];if(k&&k/d=this.minRange;var F=this.minRange;var D=(F-g+d)/2;D=[d-D,C(b.min,d-D)];h&&(D[2]=this.logarithmic?this.logarithmic.log2lin(this.dataMin):this.dataMin); +d=t(D);g=[d+F,C(b.max,d+F)];h&&(g[2]=a?a.log2lin(this.dataMax):this.dataMax);g=m(g);g-d=q)J=q,m=0;else if(a.dataMax<=q){var v=q;M=0}a.min=C(w,J,a.dataMin);a.max=C(O,v,a.dataMax)}r&&(a.positiveValuesOnly&&!b&&0>=Math.min(a.min,C(a.dataMin,a.min))&&A(10,1,c),a.min=n(r.log2lin(a.min),16),a.max=n(r.log2lin(a.max),16));a.range&&l(a.max)&&(a.userMin=a.min=w=Math.max(a.dataMin,a.minFromRange()),a.userMax=O=a.max,a.range=null);d(a,"foundExtremes");a.beforePadding&&a.beforePadding();a.adjustForMinRange();!(z||a.axisPointRange|| +a.stacking&&a.stacking.usePercentage||h)&&l(a.min)&&l(a.max)&&(c=a.max-a.min)&&(!l(w)&&m&&(a.min-=c*m),!l(O)&&M&&(a.max+=c*M));g(a.userMin)||(g(e.softMin)&&e.softMina.max&&(a.max=O=e.softMax),g(e.ceiling)&&(a.max=Math.min(a.max,e.ceiling)));p&&l(a.dataMin)&&(q=q||0,!l(w)&&a.min=q?a.min=a.options.minRange?Math.min(q,a.max-a.minRange):q:!l(O)&&a.max>q&&a.dataMax<=q&&(a.max=a.options.minRange? +Math.max(q,a.min+a.minRange):q));g(a.min)&&g(a.max)&&!this.chart.polar&&a.min>a.max&&(l(a.options.min)?a.max=a.min:l(a.options.max)&&(a.min=a.max));a.tickInterval=a.min===a.max||"undefined"===typeof a.min||"undefined"===typeof a.max?1:h&&a.linkedParent&&!t&&F===a.linkedParent.options.tickPixelInterval?t=a.linkedParent.tickInterval:C(t,this.tickAmount?(a.max-a.min)/Math.max(this.tickAmount-1,1):void 0,z?1:(a.max-a.min)*F/Math.max(a.len,F));f&&!b&&a.series.forEach(function(b){b.processData(a.min!== +(a.old&&a.old.min)||a.max!==(a.old&&a.old.max))});a.setAxisTranslation();d(this,"initialAxisTranslation");a.pointRange&&!t&&(a.tickInterval=Math.max(a.pointRange,a.tickInterval));b=C(e.minTickInterval,a.dateTime&&!a.series.some(function(b){return b.noSharedTooltip})?a.closestPointRange:0);!t&&a.tickIntervala.tickInterval||void 0!==this.tickAmount),!!this.tickAmount)); +this.tickAmount||(a.tickInterval=a.unsquish());this.setTickPositions()};a.prototype.setTickPositions=function(){var b=this.options,a=b.tickPositions,g=this.getMinorTickInterval(),c=this.hasVerticalPanning(),k="colorAxis"===this.coll,e=(k||!c)&&b.startOnTick;c=(k||!c)&&b.endOnTick;k=b.tickPositioner;this.tickmarkOffset=this.categories&&"between"===b.tickmarkPlacement&&1===this.tickInterval?.5:0;this.minorTickInterval="auto"===g&&this.tickInterval?this.tickInterval/5:g;this.single=this.min===this.max&& +l(this.min)&&!this.tickAmount&&(parseInt(this.min,10)===this.min||!1!==b.allowDecimals);this.tickPositions=g=a&&a.slice();!g&&(this.ordinal&&this.ordinal.positions||!((this.max-this.min)/this.tickInterval>Math.max(2*this.len,200))?g=this.dateTime?this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(this.tickInterval,b.units),this.min,this.max,b.startOfWeek,this.ordinal&&this.ordinal.positions,this.closestPointRange,!0):this.logarithmic?this.logarithmic.getLogTickPositions(this.tickInterval,this.min, +this.max):this.getLinearTickPositions(this.tickInterval,this.min,this.max):(g=[this.min,this.max],A(19,!1,this.chart)),g.length>this.len&&(g=[g[0],g.pop()],g[0]===g[1]&&(g.length=1)),this.tickPositions=g,k&&(k=k.apply(this,[this.min,this.max])))&&(this.tickPositions=g=k);this.paddedTicks=g.slice(0);this.trimTicks(g,e,c);this.isLinked||(this.single&&2>g.length&&!this.categories&&!this.series.some(function(b){return b.is("heatmap")&&"between"===b.options.pointPlacement})&&(this.min-=.5,this.max+=.5), +a||k||this.adjustTickAmount());d(this,"afterSetTickPositions")};a.prototype.trimTicks=function(b,a,g){var c=b[0],k=b[b.length-1],e=!this.isOrdinal&&this.minPointOffset||0;d(this,"trimTicks");if(!this.isLinked){if(a&&-Infinity!==c)this.min=c;else for(;this.min-e>b[0];)b.shift();if(g)this.max=k;else for(;this.max+ed&&(this.finalTickAmt= +d,d=5);this.tickAmount=d};a.prototype.adjustTickAmount=function(){var b=this.options,a=this.tickInterval,d=this.tickPositions,c=this.tickAmount,k=this.finalTickAmt,e=d&&d.length,r=C(this.threshold,this.softThreshold?0:null);if(this.hasData()&&g(this.min)&&g(this.max)){if(ec&&(this.tickInterval*=2,this.setTickPositions());if(l(k)){for(a=b=d.length;a--;)(3===k&&1===a%2||2>=k&&0f&&(a=f)),l(k)&&(df&&(d=f))),g.displayBtn="undefined"!==typeof a||"undefined"!==typeof d,g.setExtremes(a,d,!1,void 0,{trigger:"zoom"}); +b.zoomed=!0});return b.zoomed};a.prototype.setAxisSize=function(){var b=this.chart,a=this.options,d=a.offsets||[0,0,0,0],g=this.horiz,c=this.width=Math.round(O(C(a.width,b.plotWidth-d[3]+d[1]),b.plotWidth)),k=this.height=Math.round(O(C(a.height,b.plotHeight-d[0]+d[2]),b.plotHeight)),e=this.top=Math.round(O(C(a.top,b.plotTop+d[0]),b.plotHeight,b.plotTop));a=this.left=Math.round(O(C(a.left,b.plotLeft+d[3]),b.plotWidth,b.plotLeft));this.bottom=b.chartHeight-k-e;this.right=b.chartWidth-c-a;this.len=Math.max(g? +c:k,0);this.pos=g?a:e};a.prototype.getExtremes=function(){var b=this.logarithmic;return{min:b?n(b.lin2log(this.min)):this.min,max:b?n(b.lin2log(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}};a.prototype.getThreshold=function(b){var a=this.logarithmic,d=a?a.lin2log(this.min):this.min;a=a?a.lin2log(this.max):this.max;null===b||-Infinity===b?b=d:Infinity===b?b=a:d>b?b=d:aa?b.align="right":195a&&(b.align="left")});return b.align};a.prototype.tickSize=function(b){var a=this.options,g=C(a["tick"===b?"tickWidth":"minorTickWidth"],"tick"===b&&this.isXAxis&&!this.categories?1:0),c=a["tick"===b?"tickLength":"minorTickLength"];if(g&&c){"inside"===a[b+"Position"]&&(c=-c);var k=[c,g]}b={tickSize:k};d(this,"afterTickSize",b);return b.tickSize};a.prototype.labelMetrics= +function(){var b=this.tickPositions&&this.tickPositions[0]||0;return this.chart.renderer.fontMetrics(this.options.labels.style.fontSize,this.ticks[b]&&this.ticks[b].label)};a.prototype.unsquish=function(){var b=this.options.labels,a=this.horiz,d=this.tickInterval,k=this.len/(((this.categories?1:0)+this.max-this.min)/d),e=b.rotation,r=this.labelMetrics(),l=Math.max(this.max-this.min,0),f=function(b){var a=b/(k||1);a=1l&&Infinity!==b&&Infinity!==k&&l&&(a=Math.ceil(l/d));return n(a* +d)},h=d,F,D,p=Number.MAX_VALUE;if(a){if(!b.staggerLines&&!b.step)if(g(e))var M=[e];else k=b){D=f(Math.abs(r.h/Math.sin(c*b)));var a=D+Math.abs(b/360);ac.step)return c.rotation?0:(this.staggerLines||1)*this.len/k;if(!d){b=c.style.width;if(void 0!==b)return parseInt(String(b),10);if(e)return e-a.spacing[3]}return.33*a.chartWidth};a.prototype.renderUnsquish=function(){var b=this.chart,a=b.renderer,d=this.tickPositions,g=this.ticks,c=this.options.labels,k=c.style,e=this.horiz,l=this.getSlotWidth(),f=Math.max(1,Math.round(l-2*c.padding)),h={},F=this.labelMetrics(),D=k.textOverflow,C=0;r(c.rotation)|| +(h.rotation=c.rotation||0);d.forEach(function(b){b=g[b];b.movedLabel&&b.replaceMovedLabel();b&&b.label&&b.label.textPxLength>C&&(C=b.label.textPxLength)});this.maxLabelLength=C;if(this.autoRotation)C>f&&C>F.h?h.rotation=this.labelRotation:this.labelRotation=0;else if(l){var p=f;if(!D){var M="clip";for(f=d.length;!e&&f--;){var n=d[f];if(n=g[n].label)n.styles&&"ellipsis"===n.styles.textOverflow?n.css({textOverflow:"clip"}):n.textPxLength>l&&n.css({width:l+"px"}),n.getBBox().height>this.len/d.length- +(F.h-F.f)&&(n.specificTextOverflow="ellipsis")}}}h.rotation&&(p=C>.5*b.chartHeight?.33*b.chartHeight:C,D||(M="ellipsis"));if(this.labelAlign=c.align||this.autoLabelAlign(this.labelRotation))h.align=this.labelAlign;d.forEach(function(b){var a=(b=g[b])&&b.label,d=k.width,c={};a&&(a.attr(h),b.shortenLabel?b.shortenLabel():p&&!d&&"nowrap"!==k.whiteSpace&&(p=this.min&&b<=this.max||this.grid&&this.grid.isColumn)g[b]||(g[b]=new q(this,b)),d&&g[b].isNew&&g[b].render(a,!0,-1),g[b].render(a)};a.prototype.render=function(){var b=this,a=b.chart,c=b.logarithmic,k=b.options,e=b.isLinked,r=b.tickPositions,l=b.axisTitle,f=b.ticks,F=b.minorTicks,D=b.alternateBands,p=k.stackLabels,C=k.alternateGridColor,n=b.tickmarkOffset,m=b.axisLine,t=b.showAxis,w=h(a.renderer.globalAnimation), +O,A;b.labelEdge.length=0;b.overlap=!1;[f,F,D].forEach(function(b){M(b,function(b){b.isActive=!1})});if(b.hasData()||e){var Z=b.chart.hasRendered&&b.old&&g(b.old.min);b.minorTickInterval&&!b.categories&&b.getMinorTickPositions().forEach(function(a){b.renderMinorTick(a,Z)});r.length&&(r.forEach(function(a,d){b.renderTick(a,d,Z)}),n&&(0===b.min||b.single)&&(f[-1]||(f[-1]=new q(b,-1,null,!0)),f[-1].render(-1)));C&&r.forEach(function(d,g){A="undefined"!==typeof r[g+1]?r[g+1]+n:b.max-n;0===g%2&&dh&&(!c||m<=f)&&"undefined"!==typeof m&&w.push(m); +m>f&&(q=!0);m=A}}}else h=this.lin2log(h),f=this.lin2log(f),a=c?e.getMinorTickInterval():m.tickInterval,a=y("auto"===a?null:a,this.minorAutoInterval,m.tickPixelInterval/(c?5:1)*(f-h)/((c?t/e.tickPositions.length:t)||1)),a=x(a,void 0,H(a)),w=e.getLinearTickPositions(a,h,f).map(this.log2lin),c||(this.minorAutoInterval=a/5);c||(e.tickInterval=a);return w};a.prototype.lin2log=function(a){return Math.pow(10,a)};a.prototype.log2lin=function(a){return Math.log(a)/Math.LN10};return a}();u=function(){function a(){} +a.compose=function(a){a.keepProps.push("logarithmic");v(a,"init",function(a){var f=this.logarithmic;"logarithmic"!==a.userOptions.type?this.logarithmic=void 0:f||(this.logarithmic=new G(this))});v(a,"afterInit",function(){var a=this.logarithmic;a&&(this.lin2val=function(f){return a.lin2log(f)},this.val2lin=function(f){return a.log2lin(f)})})};return a}();u.compose(a);return u});L(a,"Core/Axis/PlotLineOrBand.js",[a["Core/Axis/Axis.js"],a["Core/Color/Palette.js"],a["Core/Utilities.js"]],function(a, +u,E){var v=E.arrayMax,x=E.arrayMin,y=E.defined,G=E.destroyObjectProperties,B=E.erase,q=E.extend,h=E.fireEvent,f=E.isNumber,c=E.merge,e=E.objectEach,t=E.pick,m=function(){function a(a,c){this.axis=a;c&&(this.options=c,this.id=c.id)}a.prototype.render=function(){h(this,"render");var a=this,l=a.axis,f=l.horiz,m=l.logarithmic,w=a.options,p=w.label,d=a.label,k=w.to,b=w.from,g=w.value,r=y(b)&&y(k),F=y(g),D=a.svgElem,M=!D,C=[],q=w.color,v=t(w.zIndex,0),W=w.events;C={"class":"highcharts-plot-"+(r?"band ": +"line ")+(w.className||"")};var B={},x=l.chart.renderer,z=r?"bands":"lines";m&&(b=m.log2lin(b),k=m.log2lin(k),g=m.log2lin(g));l.chart.styledMode||(F?(C.stroke=q||u.neutralColor40,C["stroke-width"]=t(w.width,1),w.dashStyle&&(C.dashstyle=w.dashStyle)):r&&(C.fill=q||u.highlightColor10,w.borderWidth&&(C.stroke=w.borderColor,C["stroke-width"]=w.borderWidth)));B.zIndex=v;z+="-"+v;(m=l.plotLinesAndBandsGroups[z])||(l.plotLinesAndBandsGroups[z]=m=x.g("plot-"+z).attr(B).add());M&&(a.svgElem=D=x.path().attr(C).add(m)); +if(F)C=l.getPlotLinePath({value:g,lineWidth:D.strokeWidth(),acrossPanes:w.acrossPanes});else if(r)C=l.getPlotBandPath(b,k,w);else return;!a.eventsAdded&&W&&(e(W,function(b,d){D.on(d,function(b){W[d].apply(a,[b])})}),a.eventsAdded=!0);(M||!D.d)&&C&&C.length?D.attr({d:C}):D&&(C?(D.show(!0),D.animate({d:C})):D.d&&(D.hide(),d&&(a.label=d=d.destroy())));p&&(y(p.text)||y(p.formatter))&&C&&C.length&&0this.max&&c>this.max;if(e&&l){if(a){var d=e.toString()===l.toString();p=0}for(a=0;aa){f=l;break}if(e[f]&&k.substr(e[f])!=="01-01 00:00:00.000".substr(e[f]))break;"week"!==f&&(l=f)}if(f)var h=d.resolveDTLFormat(g[f]).main;return h};a.prototype.getLabel=function(){var a=this,c=this.chart.renderer,b=this.chart.styledMode,g=this.options,e="tooltip"+(h(g.className)?" "+g.className:""),f=g.style&&g.style.pointerEvents||(!this.followPointer&&g.stickOnContact? +"auto":"none"),l,p=function(){a.inContact=!0},C=function(){var b=a.chart.hoverSeries;a.inContact=!1;if(b&&b.onMouseOut)b.onMouseOut()};if(!this.label){if(this.outside){var m=this.chart.options.chart.style,t=H.getRendererType();this.container=l=u.doc.createElement("div");l.className="highcharts-tooltip-container";q(l,{position:"absolute",top:"1px",pointerEvents:f,zIndex:Math.max(this.options.style&&this.options.style.zIndex||0,(m&&m.zIndex||0)+3)});u.doc.body.appendChild(l);this.renderer=c=new t(l, +0,0,m,void 0,void 0,c.styledMode)}this.split?this.label=c.g(e):(this.label=c.label("",0,0,g.shape||"callout",null,null,g.useHTML,null,e).attr({padding:g.padding,r:g.borderRadius}),b||this.label.attr({fill:g.backgroundColor,"stroke-width":g.borderWidth}).css(g.style).css({pointerEvents:f}).shadow(g.shadow));b&&g.shadow&&(this.applyFilter(),this.label.attr({filter:"url(#drop-shadow-"+this.chart.index+")"}));if(a.outside&&!a.split){var n=this.label,w=n.xSetter,v=n.ySetter;n.xSetter=function(b){w.call(n, +a.distance);l.style.left=b+"px"};n.ySetter=function(b){v.call(n,a.distance);l.style.top=b+"px"}}this.label.on("mouseenter",p).on("mouseleave",C).attr({zIndex:8}).add()}return this.label};a.prototype.getPosition=function(a,c,b){var d=this.chart,k=this.distance,e={},f=d.inverted&&b.h||0,h,C=this.outside,p=C?G.documentElement.clientWidth-2*k:d.chartWidth,m=C?Math.max(G.body.scrollHeight,G.documentElement.scrollHeight,G.body.offsetHeight,G.documentElement.offsetHeight,G.documentElement.clientHeight): +d.chartHeight,t=d.pointer.getChartPosition(),n=function(g){var e="x"===g;return[g,e?p:m,e?a:c].concat(C?[e?a*t.scaleX:c*t.scaleY,e?t.left-k+(b.plotX+d.plotLeft)*t.scaleX:t.top-k+(b.plotY+d.plotTop)*t.scaleY,0,e?p:m]:[e?a:c,e?b.plotX+d.plotLeft:b.plotY+d.plotTop,e?d.plotLeft:d.plotTop,e?d.plotLeft+d.plotWidth:d.plotTop+d.plotHeight])},q=n("y"),w=n("x"),v=!this.followPointer&&l(b.ttBelow,!d.inverted===!!b.negative),A=function(b,a,d,g,c,r,l){var h=C?"y"===b?k*t.scaleY:k*t.scaleX:k,F=(d-g)/2,I=gp-f?p:p-f);else if(D)e[b]=Math.max(r,c+f+d>a?c:c+f);else return!1},J=function(b,a,d,g,c){var r;ca-k?r=!1:e[b]=ca-g/2?a-g-2:c-d/2;return r},u=function(b){var a=q;q=w;w=a;h=b},I=function(){!1!==A.apply(0,q)?!1!==J.apply(0,w)||h||(u(!0),I()):h?e.x=e.y=0:(u(!0),I())};(d.inverted||1a})&&(a=a.map(function(a){var d=b(a.anchorX,a.anchorY, +a.point.isHeader,a.boxWidth,!1);return c(a,{target:d.y,x:d.x})}));d.cleanSplit();u.distribute(a,da);var H=R,ea=R;a.forEach(function(b){var a=b.x,g=b.boxWidth;b=b.isHeader;b||(d.outside&&R+aea&&(ea=R+a))});a.forEach(function(b){var a=b.x,g=b.anchorX,c=b.pos,k=b.point.isHeader;c={visibility:"undefined"===typeof c?"hidden":"inherit",x:a,y:c+V,anchorX:g,anchorY:b.anchorY};if(d.outside&&ab[0]?Math.max(Math.abs(b[0]),e.width-b[0]):Math.max(Math.abs(b[0]),e.width);g.height=0>b[1]?Math.max(Math.abs(b[1]),e.height-Math.abs(b[1])):Math.max(Math.abs(b[1]),e.height);this.tracker?this.tracker.attr(g):(this.tracker=c.renderer.rect(g).addClass("highcharts-tracker").add(c),a.styledMode||this.tracker.attr({fill:"rgba(0,0,0,0)"}))}}};a.prototype.styledModeFormat=function(a){return a.replace('style="font-size: 10px"','class="highcharts-header"').replace(/style="color:{(point|series)\.color}"/g, +'class="highcharts-color-{$1.colorIndex}"')};a.prototype.tooltipFooterHeaderFormatter=function(a,c){var b=c?"footer":"header",d=a.series,k=d.tooltipOptions,f=k.xDateFormat,l=d.xAxis,h=l&&"datetime"===l.options.type&&m(a.key),p=k[b+"Format"];c={isFooter:c,labelConfig:a};e(this,"headerFormatter",c,function(b){h&&!f&&(f=this.getXDateFormat(a,k,l));h&&f&&(a.point&&a.point.tooltipDateKeys||["key"]).forEach(function(b){p=p.replace("{point."+b+"}","{point."+b+":"+f+"}")});d.chart.styledMode&&(p=this.styledModeFormat(p)); +b.text=v(p,{point:a,series:d},this.chart)});return c.text};a.prototype.update=function(a){this.destroy();n(!0,this.chart.options.tooltip.userOptions,a);this.init(this.chart,n(!0,this.options,a))};a.prototype.updatePosition=function(a){var d=this.chart,b=d.pointer,c=this.getLabel(),e=a.plotX+d.plotLeft;d=a.plotY+d.plotTop;b=b.getChartPosition();a=(this.options.positioner||this.getPosition).call(this,c.width,c.height,a);if(this.outside){var f=(this.options.borderWidth||0)+2*this.distance;this.renderer.setSize(c.width+ +f,c.height+f,!1);if(1!==b.scaleX||1!==b.scaleY)q(this.container,{transform:"scale("+b.scaleX+", "+b.scaleY+")"}),e*=b.scaleX,d*=b.scaleY;e+=b.left-a.x;d+=b.top-a.y}this.move(Math.round(a.x),Math.round(a.y||0),e,d)};return a}();u.Tooltip=a;return u.Tooltip});L(a,"Core/Pointer.js",[a["Core/Color/Color.js"],a["Core/Globals.js"],a["Core/Color/Palette.js"],a["Core/Tooltip.js"],a["Core/Utilities.js"]],function(a,u,E,H,x){var v=a.parse,G=u.charts,B=u.noop,q=x.addEvent,h=x.attr,f=x.css,c=x.defined,e=x.extend, +t=x.find,m=x.fireEvent,w=x.isNumber,n=x.isObject,l=x.objectEach,J=x.offset,K=x.pick,A=x.splat;a=function(){function a(a,c){this.lastValidTouch={};this.pinchDown=[];this.runChartClick=!1;this.eventsToUnbind=[];this.chart=a;this.hasDragged=!1;this.options=c;this.init(a,c)}a.prototype.applyInactiveState=function(a){var d=[],b;(a||[]).forEach(function(a){b=a.series;d.push(b);b.linkedParent&&d.push(b.linkedParent);b.linkedSeries&&(d=d.concat(b.linkedSeries));b.navigatorSeries&&d.push(b.navigatorSeries)}); +this.chart.series.forEach(function(b){-1===d.indexOf(b)?b.setState("inactive",!0):b.options.inactiveOtherPoints&&b.setAllPointsToState("inactive")})};a.prototype.destroy=function(){var d=this;this.eventsToUnbind.forEach(function(a){return a()});this.eventsToUnbind=[];u.chartCount||(a.unbindDocumentMouseUp&&(a.unbindDocumentMouseUp=a.unbindDocumentMouseUp()),a.unbindDocumentTouchEnd&&(a.unbindDocumentTouchEnd=a.unbindDocumentTouchEnd()));clearInterval(d.tooltipTimeout);l(d,function(a,b){d[b]=void 0})}; +a.prototype.drag=function(a){var d=this.chart,b=d.options.chart,c=this.zoomHor,e=this.zoomVert,f=d.plotLeft,l=d.plotTop,h=d.plotWidth,C=d.plotHeight,p=this.mouseDownX||0,m=this.mouseDownY||0,t=n(b.panning)?b.panning&&b.panning.enabled:b.panning,q=b.panKey&&a[b.panKey+"Key"],w=a.chartX,A=a.chartY,J=this.selectionMarker;if(!J||!J.touch)if(wf+h&&(w=f+h),Al+C&&(A=l+C),this.hasDragged=Math.sqrt(Math.pow(p-w,2)+Math.pow(m-A,2)),10a.options.findNearestPointBy.indexOf("y");a=a.searchPoint(b,d);if((d=n(a,!0)&&a.series)&&!(d=!n(k,!0))){d=k.distX-a.distX;var g=k.dist-a.dist,e=(a.series.group&&a.series.group.zIndex)-(k.series.group&&k.series.group.zIndex);d=0<(0!==d&&c?d:0!==g?g:0!==e?e:k.series.index>a.series.index?-1:1)}d&&(k=a)});return k};a.prototype.getChartCoordinatesFromPoint= +function(a,c){var b=a.series,d=b.xAxis;b=b.yAxis;var e=a.shapeArgs;if(d&&b){var k=K(a.clientX,a.plotX),f=a.plotY||0;a.isNode&&e&&w(e.x)&&w(e.y)&&(k=e.x,f=e.y);return c?{chartX:b.len+b.pos-f,chartY:d.len+d.pos-k}:{chartX:k+d.pos,chartY:f+b.pos}}if(e&&e.x&&e.y)return{chartX:e.x,chartY:e.y}};a.prototype.getChartPosition=function(){if(this.chartPosition)return this.chartPosition;var a=this.chart.container,c=J(a);this.chartPosition={left:c.left,top:c.top,scaleX:1,scaleY:1};var b=a.offsetWidth;a=a.offsetHeight; +2t.max&&(b=t.max-I,J=!0);J?(A-= +.8*(A-l[k][0]),"number"===typeof v&&(v-=.8*(v-l[k][1])),c()):l[k]=[A,v];D||(f[k]=w-m,f[p]=I);f=D?1/P:P;e[p]=I;e[k]=b;g[D?a?"scaleY":"scaleX":"scale"+r]=P;g["translate"+r]=f*m+(A-f*M)};a.prototype.reset=function(a,c){var b=this.chart,d=b.hoverSeries,e=b.hoverPoint,k=b.hoverPoints,f=b.tooltip,l=f&&f.shared?k:e;a&&l&&A(l).forEach(function(b){b.series.isCartesian&&"undefined"===typeof b.plotX&&(a=!1)});if(a)f&&l&&A(l).length&&(f.refresh(l),f.shared&&k?k.forEach(function(a){a.setState(a.state,!0);a.series.isCartesian&& +(a.series.xAxis.crosshair&&a.series.xAxis.drawCrosshair(null,a),a.series.yAxis.crosshair&&a.series.yAxis.drawCrosshair(null,a))}):e&&(e.setState(e.state,!0),b.axes.forEach(function(a){a.crosshair&&e.series[a.coll]===a&&a.drawCrosshair(null,e)})));else{if(e)e.onMouseOut();k&&k.forEach(function(a){a.setState()});if(d)d.onMouseOut();f&&f.hide(c);this.unDocMouseMove&&(this.unDocMouseMove=this.unDocMouseMove());b.axes.forEach(function(a){a.hideCrosshair()});this.hoverX=b.hoverPoints=b.hoverPoint=null}}; +a.prototype.runPointActions=function(d,c){var b=this.chart,g=b.tooltip&&b.tooltip.options.enabled?b.tooltip:void 0,e=g?g.shared:!1,f=c||b.hoverPoint,k=f&&f.series||b.hoverSeries;c=this.getHoverData(f,k,b.series,(!d||"touchmove"!==d.type)&&(!!c||k&&k.directTouch&&this.isDirectTouch),e,d);f=c.hoverPoint;k=c.hoverSeries;var l=c.hoverPoints;c=k&&k.tooltipOptions.followPointer&&!k.tooltipOptions.split;e=e&&k&&!k.noSharedTooltip;if(f&&(f!==b.hoverPoint||g&&g.isHidden)){(b.hoverPoints||[]).forEach(function(a){-1=== +l.indexOf(a)&&a.setState()});if(b.hoverSeries!==k)k.onMouseOver();this.applyInactiveState(l);(l||[]).forEach(function(a){a.setState("hover")});b.hoverPoint&&b.hoverPoint.firePointEvent("mouseOut");if(!f.series)return;b.hoverPoints=l;b.hoverPoint=f;f.firePointEvent("mouseOver");g&&g.refresh(e?l:f,d)}else c&&g&&!g.isHidden&&(f=g.getAnchor([{}],d),b.isInsidePlot(f[0],f[1],{visiblePlotOnly:!0})&&g.updatePosition({plotX:f[0],plotY:f[1]}));this.unDocMouseMove||(this.unDocMouseMove=q(b.container.ownerDocument, +"mousemove",function(b){var d=G[a.hoverChartIndex];if(d)d.pointer.onDocumentMouseMove(b)}),this.eventsToUnbind.push(this.unDocMouseMove));b.axes.forEach(function(a){var c=K((a.crosshair||{}).snap,!0),g;c&&((g=b.hoverPoint)&&g.series[a.coll]===a||(g=t(l,function(b){return b.series[a.coll]===a})));g||!c?a.drawCrosshair(d,g):a.hideCrosshair()})};a.prototype.scaleGroups=function(a,c){var b=this.chart;b.series.forEach(function(d){var g=a||d.getPlotBox();d.xAxis&&d.xAxis.zoomEnabled&&d.group&&(d.group.attr(g), +d.markerGroup&&(d.markerGroup.attr(g),d.markerGroup.clip(c?b.clipRect:null)),d.dataLabelsGroup&&d.dataLabelsGroup.attr(g))});b.clipRect.attr(c||b.clipBox)};a.prototype.setDOMEvents=function(){var d=this,c=this.chart.container,b=c.ownerDocument;c.onmousedown=this.onContainerMouseDown.bind(this);c.onmousemove=this.onContainerMouseMove.bind(this);c.onclick=this.onContainerClick.bind(this);this.eventsToUnbind.push(q(c,"mouseenter",this.onContainerMouseEnter.bind(this)));this.eventsToUnbind.push(q(c,"mouseleave", +this.onContainerMouseLeave.bind(this)));a.unbindDocumentMouseUp||(a.unbindDocumentMouseUp=q(b,"mouseup",this.onDocumentMouseUp.bind(this)));for(var g=this.chart.renderTo.parentElement;g&&"BODY"!==g.tagName;)this.eventsToUnbind.push(q(g,"scroll",function(){delete d.chartPosition})),g=g.parentElement;u.hasTouch&&(this.eventsToUnbind.push(q(c,"touchstart",this.onContainerTouchStart.bind(this),{passive:!1})),this.eventsToUnbind.push(q(c,"touchmove",this.onContainerTouchMove.bind(this),{passive:!1})), +a.unbindDocumentTouchEnd||(a.unbindDocumentTouchEnd=q(b,"touchend",this.onDocumentTouchEnd.bind(this),{passive:!1})))};a.prototype.setHoverChartIndex=function(){var d=this.chart,c=u.charts[K(a.hoverChartIndex,-1)];if(c&&c!==d)c.pointer.onContainerMouseLeave({relatedTarget:!0});c&&c.mouseIsDown||(a.hoverChartIndex=d.index)};a.prototype.touch=function(a,c){var b=this.chart,d;this.setHoverChartIndex();if(1===a.touches.length)if(a=this.normalize(a),(d=b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop, +{visiblePlotOnly:!0}))&&!b.openMenu){c&&this.runPointActions(a);if("touchmove"===a.type){c=this.pinchDown;var e=c[0]?4<=Math.sqrt(Math.pow(c[0].chartX-a.chartX,2)+Math.pow(c[0].chartY-a.chartY,2)):!1}K(e,!0)&&this.pinch(a)}else c&&this.reset();else 2===a.touches.length&&this.pinch(a)};a.prototype.touchSelect=function(a){return!(!this.chart.options.chart.zoomBySingleTouch||!a.touches||1!==a.touches.length)};a.prototype.zoomOption=function(a){var d=this.chart,b=d.options.chart;d=d.inverted;var c=b.zoomType|| +"";/touch/.test(a.type)&&(c=K(b.pinchType,c));this.zoomX=a=/x/.test(c);this.zoomY=b=/y/.test(c);this.zoomHor=a&&!d||b&&d;this.zoomVert=b&&!d||a&&d;this.hasZoom=a||b};return a}();"";return a});L(a,"Core/MSPointer.js",[a["Core/Globals.js"],a["Core/Pointer.js"],a["Core/Utilities.js"]],function(a,u,E){function v(){var a=[];a.item=function(a){return this[a]};e(m,function(c){a.push({pageX:c.pageX,pageY:c.pageY,target:c.target})});return a}function x(a,c,e,f){var l=G[u.hoverChartIndex||NaN];"touch"!==a.pointerType&& +a.pointerType!==a.MSPOINTER_TYPE_TOUCH||!l||(l=l.pointer,f(a),l[c]({type:e,target:a.currentTarget,preventDefault:q,touches:v()}))}var y=this&&this.__extends||function(){var a=function(c,e){a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,c){a.__proto__=c}||function(a,c){for(var e in c)c.hasOwnProperty(e)&&(a[e]=c[e])};return a(c,e)};return function(c,e){function f(){this.constructor=c}a(c,e);c.prototype=null===e?Object.create(e):(f.prototype=e.prototype,new f)}}(),G=a.charts,B= +a.doc,q=a.noop,h=a.win,f=E.addEvent,c=E.css,e=E.objectEach,t=E.removeEvent,m={},w=!!h.PointerEvent;return function(e){function l(){return null!==e&&e.apply(this,arguments)||this}y(l,e);l.isRequired=function(){return!(a.hasTouch||!h.PointerEvent&&!h.MSPointerEvent)};l.prototype.batchMSEvents=function(a){a(this.chart.container,w?"pointerdown":"MSPointerDown",this.onContainerPointerDown);a(this.chart.container,w?"pointermove":"MSPointerMove",this.onContainerPointerMove);a(B,w?"pointerup":"MSPointerUp", +this.onDocumentPointerUp)};l.prototype.destroy=function(){this.batchMSEvents(t);e.prototype.destroy.call(this)};l.prototype.init=function(a,f){e.prototype.init.call(this,a,f);this.hasZoom&&c(a.container,{"-ms-touch-action":"none","touch-action":"none"})};l.prototype.onContainerPointerDown=function(a){x(a,"onContainerTouchStart","touchstart",function(a){m[a.pointerId]={pageX:a.pageX,pageY:a.pageY,target:a.currentTarget}})};l.prototype.onContainerPointerMove=function(a){x(a,"onContainerTouchMove","touchmove", +function(a){m[a.pointerId]={pageX:a.pageX,pageY:a.pageY};m[a.pointerId].target||(m[a.pointerId].target=a.currentTarget)})};l.prototype.onDocumentPointerUp=function(a){x(a,"onDocumentTouchEnd","touchend",function(a){delete m[a.pointerId]})};l.prototype.setDOMEvents=function(){e.prototype.setDOMEvents.call(this);(this.hasZoom||this.followTouchMove)&&this.batchMSEvents(f)};return l}(u)});L(a,"Core/Series/Point.js",[a["Core/Renderer/HTML/AST.js"],a["Core/Animation/AnimationUtilities.js"],a["Core/FormatUtilities.js"], +a["Core/Globals.js"],a["Core/DefaultOptions.js"],a["Core/Utilities.js"]],function(a,u,E,H,x,y){var v=u.animObject,B=E.format,q=x.defaultOptions,h=y.addEvent,f=y.defined,c=y.erase,e=y.extend,t=y.fireEvent,m=y.getNestedProperty,w=y.isArray,n=y.isFunction,l=y.isNumber,J=y.isObject,K=y.merge,A=y.objectEach,p=y.pick,d=y.syncTimeout,k=y.removeEvent,b=y.uniqueKey;"";u=function(){function g(){this.colorIndex=this.category=void 0;this.formatPrefix="point";this.id=void 0;this.isNull=!1;this.percentage=this.options= +this.name=void 0;this.selected=!1;this.total=this.series=void 0;this.visible=!0;this.x=void 0}g.prototype.animateBeforeDestroy=function(){var a=this,b={x:a.startXPos,opacity:0},d,c=a.getGraphicalProps();c.singular.forEach(function(c){d="dataLabel"===c;a[c]=a[c].animate(d?{x:a[c].startXPos,y:a[c].startYPos,opacity:0}:b)});c.plural.forEach(function(b){a[b].forEach(function(b){b.element&&b.animate(e({x:a.startXPos},b.startYPos?{x:b.startXPos,y:b.startYPos}:{}))})})};g.prototype.applyOptions=function(a, +b){var d=this.series,c=d.options.pointValKey||d.pointValKey;a=g.prototype.optionsToObject.call(this,a);e(this,a);this.options=this.options?e(this.options,a):a;a.group&&delete this.group;a.dataLabels&&delete this.dataLabels;c&&(this.y=g.prototype.getNestedProperty.call(this,c));this.formatPrefix=(this.isNull=p(this.isValid&&!this.isValid(),null===this.x||!l(this.y)))?"null":"point";this.selected&&(this.state="select");"name"in this&&"undefined"===typeof b&&d.xAxis&&d.xAxis.hasNames&&(this.x=d.xAxis.nameToX(this)); +"undefined"===typeof this.x&&d&&(this.x="undefined"===typeof b?d.autoIncrement(this):b);return this};g.prototype.destroy=function(){function a(){if(b.graphic||b.dataLabel||b.dataLabels)k(b),b.destroyElements();for(h in b)b[h]=null}var b=this,g=b.series,e=g.chart;g=g.options.dataSorting;var f=e.hoverPoints,l=v(b.series.chart.renderer.globalAnimation),h;b.legendItem&&e.legend.destroyItem(b);f&&(b.setState(),c(f,b),f.length||(e.hoverPoints=null));if(b===e.hoverPoint)b.onMouseOut();g&&g.enabled?(this.animateBeforeDestroy(), +d(a,l.duration)):a();e.pointCount--};g.prototype.destroyElements=function(a){var b=this;a=b.getGraphicalProps(a);a.singular.forEach(function(a){b[a]=b[a].destroy()});a.plural.forEach(function(a){b[a].forEach(function(a){a.element&&a.destroy()});delete b[a]})};g.prototype.firePointEvent=function(a,b,d){var c=this,g=this.series.options;(g.point.events[a]||c.options&&c.options.events&&c.options.events[a])&&c.importEvents();"click"===a&&g.allowPointSelect&&(d=function(a){c.select&&c.select(null,a.ctrlKey|| +a.metaKey||a.shiftKey)});t(c,a,b,d)};g.prototype.getClassName=function(){return"highcharts-point"+(this.selected?" highcharts-point-select":"")+(this.negative?" highcharts-negative":"")+(this.isNull?" highcharts-null-point":"")+("undefined"!==typeof this.colorIndex?" highcharts-color-"+this.colorIndex:"")+(this.options.className?" "+this.options.className:"")+(this.zone&&this.zone.className?" "+this.zone.className.replace("highcharts-negative",""):"")};g.prototype.getGraphicalProps=function(a){var b= +this,d=[],c,g={singular:[],plural:[]};a=a||{graphic:1,dataLabel:1};a.graphic&&d.push("graphic","upperGraphic","shadowGroup");a.dataLabel&&d.push("dataLabel","dataLabelUpper","connector");for(c=d.length;c--;){var e=d[c];b[e]&&g.singular.push(e)}["dataLabel","connector"].forEach(function(d){var c=d+"s";a[d]&&b[c]&&g.plural.push(c)});return g};g.prototype.getLabelConfig=function(){return{x:this.category,y:this.y,color:this.color,colorIndex:this.colorIndex,key:this.name||this.category,series:this.series, +point:this,percentage:this.percentage,total:this.total||this.stackTotal}};g.prototype.getNestedProperty=function(a){if(a)return 0===a.indexOf("custom.")?m(a,this.options):this[a]};g.prototype.getZone=function(){var a=this.series,b=a.zones;a=a.zoneAxis||"y";var d=0,c;for(c=b[d];this[a]>=c.value;)c=b[++d];this.nonZonedColor||(this.nonZonedColor=this.color);this.color=c&&c.color&&!this.options.color?c.color:this.nonZonedColor;return c};g.prototype.hasNewShapeType=function(){return(this.graphic&&(this.graphic.symbolName|| +this.graphic.element.nodeName))!==this.shapeType};g.prototype.init=function(a,d,c){this.series=a;this.applyOptions(d,c);this.id=f(this.id)?this.id:b();this.resolveColor();a.chart.pointCount++;t(this,"afterInit");return this};g.prototype.optionsToObject=function(a){var b={},d=this.series,c=d.options.keys,e=c||d.pointArrayMap||["y"],f=e.length,k=0,h=0;if(l(a)||null===a)b[e[0]]=a;else if(w(a))for(!c&&a.length>f&&(d=typeof a[0],"string"===d?b.name=a[0]:"number"===d&&(b.x=a[0]),k++);hf-6&&kh?this.maxItemWidth:a.itemWidth;c&&this.itemX-d+b>h&&(this.itemX=d,this.lastLineHeight&&(this.itemY+=k+this.lastLineHeight+ +f),this.lastLineHeight=0);this.lastItemY=k+this.itemY+f;this.lastLineHeight=Math.max(e,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];c?this.itemX+=b:(this.itemY+=k+e+f,this.lastLineHeight=e);this.offsetWidth=this.widthOption||Math.max((c?this.itemX-d-(a.checkbox?0:l):b)+d,this.offsetWidth)};a.prototype.getAllItems=function(){var a=[];this.chart.series.forEach(function(b){var d=b&&b.options;b&&J(d.showInLegend,e(d.linkedTo)?!1:void 0,!0)&&(a=a.concat(b.legendItems||("point"===d.legendType? +b.data:b)))});w(this,"afterGetAllItems",{allItems:a});return a};a.prototype.getAlignment=function(){var a=this.options;return this.proximate?a.align.charAt(0)+"tv":a.floating?"":a.align.charAt(0)+a.verticalAlign.charAt(0)+a.layout.charAt(0)};a.prototype.adjustMargins=function(a,d){var b=this.chart,c=this.options,g=this.getAlignment();g&&[/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/].forEach(function(f,k){f.test(g)&&!e(a[k])&&(b[q[k]]=Math.max(b[q[k]],b.legend[(k+1)%2?"legendHeight": +"legendWidth"]+[1,-1,-1,1][k]*c[k%2?"x":"y"]+J(c.margin,12)+d[k]+(b.titleOffset[k]||0)))})};a.prototype.proximatePositions=function(){var a=this.chart,d=[],c="left"===this.options.align;this.allItems.forEach(function(b){var e;var g=c;if(b.yAxis){b.xAxis.options.reversed&&(g=!g);b.points&&(e=m(g?b.points:b.points.slice(0).reverse(),function(a){return n(a.plotY)}));g=this.itemMarginTop+b.legendItem.getBBox().height+this.itemMarginBottom;var f=b.yAxis.top-a.plotTop;b.visible?(e=e?e.plotY:b.yAxis.height, +e+=f-.3*g):e=f+b.yAxis.height;d.push({target:e,size:g,item:b})}},this);E.distribute(d,a.plotHeight);d.forEach(function(b){b.item._legendItemPos[1]=a.plotTop-a.spacing[0]+b.pos})};a.prototype.render=function(){var a=this.chart,d=a.renderer,c=this.group,e=this.box,f=this.options,k=this.padding;this.itemX=k;this.itemY=this.initialItemY;this.lastItemY=this.offsetWidth=0;this.widthOption=K(f.width,a.spacingBox.width-k);var l=a.spacingBox.width-2*k-f.x;-1<["rm","lm"].indexOf(this.getAlignment().substring(0, +2))&&(l/=2);this.maxLegendWidth=this.widthOption||l;c||(this.group=c=d.g("legend").addClass(f.className||"").attr({zIndex:7}).add(),this.contentGroup=d.g().attr({zIndex:1}).add(c),this.scrollGroup=d.g().add(this.contentGroup));this.renderTitle();var h=this.getAllItems();A(h,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});f.reversed&&h.reverse();this.allItems=h;this.display=l=!!h.length;this.itemHeight=this.totalItemWidth=this.maxItemWidth=this.lastLineHeight= +0;h.forEach(this.renderItem,this);h.forEach(this.layoutItem,this);h=(this.widthOption||this.offsetWidth)+k;var m=this.lastItemY+this.lastLineHeight+this.titleHeight;m=this.handleOverflow(m);m+=k;e||(this.box=e=d.rect().addClass("highcharts-legend-box").attr({r:f.borderRadius}).add(c),e.isNew=!0);a.styledMode||e.attr({stroke:f.borderColor,"stroke-width":f.borderWidth||0,fill:f.backgroundColor||"none"}).shadow(f.shadow);0f&&!1!==p.enabled?(this.clipHeight=h=Math.max(f-20-this.titleHeight-k,0),this.currentPage=J(this.currentPage,1),this.fullHeight= +a,A.forEach(function(a,b){var d=a._legendItemPos[1],c=Math.round(a.legendItem.getBBox().height),e=q.length;if(!e||d-q[e-1]>h&&(v||d)!==q[e-1])q.push(v||d),e++;a.pageIx=e-1;v&&(A[b-1].pageIx=e-1);b===A.length-1&&d+c-q[e-1]>h&&d!==v&&(q.push(d),a.pageIx=e);d!==v&&(v=d)}),m||(m=b.clipRect=c.clipRect(0,k,9999,0),b.contentGroup.clip(m)),I(h),w||(this.nav=w=c.g().attr({zIndex:1}).add(this.group),this.up=c.symbol("triangle",0,0,n,n).add(w),N("upTracker").on("click",function(){b.scroll(-1,t)}),this.pager= +c.text("",15,10).addClass("highcharts-legend-navigation"),d.styledMode||this.pager.css(p.style),this.pager.add(w),this.down=c.symbol("triangle-down",0,0,n,n).add(w),N("downTracker").on("click",function(){b.scroll(1,t)})),b.scroll(0),a=f):w&&(I(),this.nav=w.destroy(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0);return a};a.prototype.scroll=function(a,d){var b=this,c=this.chart,e=this.pages,g=e.length,f=this.currentPage+a;a=this.clipHeight;var k=this.options.navigation,l=this.pager,h=this.padding; +f>g&&(f=g);0=Math.max(l+g,r.pos)&&k<=Math.min(l+g+e.width,r.pos+r.len)||(a.isInsidePlot=!1)}!d.ignoreY&& +a.isInsidePlot&&(c=I&&(c?I.xAxis:I.yAxis)||{pos:f,len:Infinity},d=d.paneCoordinates?c.pos+b:f+b,d>=Math.max(h+f,c.pos)&&d<=Math.min(h+f+e.height,c.pos+c.len)||(a.isInsidePlot=!1));L(this,"afterIsInsidePlot",a);return a.isInsidePlot};a.prototype.redraw=function(a){L(this,"beforeRedraw");var b=this.hasCartesianSeries?this.axes:this.colorAxis||[],d=this.series,c=this.pointer,e=this.legend,g=this.userOptions.legend,f=this.renderer,k=f.isHidden(),h=[],I=this.isDirtyBox,r=this.isDirtyLegend;this.setResponsive&& +this.setResponsive(!1);l(this.hasRendered?a:!1,this);k&&this.temporaryDisplay();this.layOutTitles();for(a=d.length;a--;){var m=d[a];if(m.options.stacking||m.options.centerInCategory){var p=!0;if(m.isDirty){var t=!0;break}}}if(t)for(a=d.length;a--;)m=d[a],m.options.stacking&&(m.isDirty=!0);d.forEach(function(a){a.isDirty&&("point"===a.options.legendType?("function"===typeof a.updateTotals&&a.updateTotals(),r=!0):g&&(g.labelFormatter||g.labelFormat)&&(r=!0));a.isDirtyData&&L(a,"updatedData")});r&&e&& +e.options.enabled&&(e.render(),this.isDirtyLegend=!1);p&&this.getStacks();b.forEach(function(a){a.updateNames();a.setScale()});this.getMargins();b.forEach(function(a){a.isDirty&&(I=!0)});b.forEach(function(a){var b=a.min+","+a.max;a.extKey!==b&&(a.extKey=b,h.push(function(){L(a,"afterSetExtremes",z(a.eventArgs,a.getExtremes()));delete a.eventArgs}));(I||p)&&a.redraw()});I&&this.drawChartBox();L(this,"predraw");d.forEach(function(a){(I||a.isDirty)&&a.visible&&a.redraw();a.isDirtyData=!1});c&&c.reset(!0); +f.draw();L(this,"redraw");L(this,"render");k&&this.temporaryDisplay(!0);h.forEach(function(a){a.call()})};a.prototype.get=function(a){function b(b){return b.id===a||b.options&&b.options.id===a}for(var d=this.series,c=Q(this.axes,b)||Q(this.series,b),e=0;!c&&e=k&&c<=l||h||!S(c))I=!0;d[h?"zoomX":"zoomY"]&&I&&(g=f.zoom(a.min,a.max),f.displayBtn&&(e=!0))});var f=b.resetZoomButton;e&&!f?b.showResetZoom():!e&&N(f)&& +(b.resetZoomButton=f.destroy());g&&b.redraw(R(b.options.chart.animation,a&&a.animation,100>b.pointCount))};a.prototype.pan=function(a,b){var d=this,c=d.hoverPoints;b="object"===typeof b?b:{enabled:b,type:"x"};var e=d.options.chart,g=d.options.mapNavigation&&d.options.mapNavigation.enabled;e&&e.panning&&(e.panning=b);var f=b.type,k;L(this,"pan",{originalEvent:a},function(){c&&c.forEach(function(a){a.setState()});var b=d.xAxis;"xy"===f?b=b.concat(d.yAxis):"y"===f&&(b=d.yAxis);var e={};b.forEach(function(b){if(b.options.panningEnabled&& +!b.options.isInternal){var c=b.horiz,l=a[c?"chartX":"chartY"];c=c?"mouseDownX":"mouseDownY";var h=d[c],r=b.minPointOffset||0,p=b.reversed&&!d.inverted||!b.reversed&&d.inverted?-1:1,m=b.getExtremes(),t=b.toValue(h-l,!0)+r*p,n=b.toValue(h+b.len-l,!0)-(r*p||b.isXAxis&&b.pointRangePadding||0),P=n=p&&t<=n&&(b.setExtremes(h,t,!1,!1,{trigger:"pan"}),d.resetZoomButton||g||h===p||t===n||!f.match("y")||(d.showResetZoom(),b.displayBtn=!1),k=!0),e[c]=l)}});T(e,function(a,b){d[b]=a});k&&d.redraw(!1);O(d.container,{cursor:"move"})})};return a}();z(a.prototype,{callbacks:[],collectionsWithInit:{xAxis:[a.prototype.addAxis,[!0]],yAxis:[a.prototype.addAxis,[!1]],series:[a.prototype.addSeries]},collectionsWithUpdate:["xAxis","yAxis","zAxis","series"],propsRequireDirtyBox:"backgroundColor borderColor borderWidth borderRadius plotBackgroundColor plotBackgroundImage plotBorderColor plotBorderWidth plotShadow shadow".split(" "), +propsRequireReflow:"margin marginTop marginRight marginBottom marginLeft spacing spacingTop spacingRight spacingBottom spacingLeft".split(" "),propsRequireUpdateSeries:"chart.inverted chart.polar chart.ignoreHiddenSeries chart.type colors plotOptions time tooltip".split(" ")});"";return a});L(a,"Mixins/LegendSymbol.js",[a["Core/Globals.js"],a["Core/Utilities.js"]],function(a,u){var v=u.merge,H=u.pick;return a.LegendSymbolMixin={drawRectangle:function(a,v){var u=a.symbolHeight,B=a.options.squareSymbol; +v.legendSymbol=this.chart.renderer.rect(B?(a.symbolWidth-u)/2:0,a.baseline-u+1,B?u:a.symbolWidth,u,H(a.options.symbolRadius,u/2)).addClass("highcharts-point").attr({zIndex:3}).add(v.legendGroup)},drawLineMarker:function(a){var u=this.options,x=u.marker,B=a.symbolWidth,q=a.symbolHeight,h=q/2,f=this.chart.renderer,c=this.legendGroup;a=a.baseline-Math.round(.3*a.fontMetrics.b);var e={};this.chart.styledMode||(e={"stroke-width":u.lineWidth||0},u.dashStyle&&(e.dashstyle=u.dashStyle));this.legendLine=f.path([["M", +0,a],["L",B,a]]).addClass("highcharts-graph").attr(e).add(c);x&&!1!==x.enabled&&B&&(u=Math.min(H(x.radius,h),h),0===this.symbol.indexOf("url")&&(x=v(x,{width:q,height:q}),u=0),this.legendSymbol=x=f.symbol(this.symbol,B/2-u,a-u,2*u,2*u,x).addClass("highcharts-point").add(c),x.isMarker=!0)}}});L(a,"Core/Series/Series.js",[a["Core/Animation/AnimationUtilities.js"],a["Core/Foundation.js"],a["Core/Globals.js"],a["Mixins/LegendSymbol.js"],a["Core/DefaultOptions.js"],a["Core/Color/Palette.js"],a["Core/Series/Point.js"], +a["Core/Series/SeriesRegistry.js"],a["Core/Renderer/SVG/SVGElement.js"],a["Core/Utilities.js"]],function(a,u,E,H,x,y,G,B,q,h){var f=a.animObject,c=a.setAnimation,e=u.registerEventOptions,t=E.hasTouch,m=E.svg,w=E.win,n=x.defaultOptions,l=B.seriesTypes,v=h.addEvent,K=h.arrayMax,A=h.arrayMin,p=h.clamp,d=h.cleanRecursively,k=h.correctFloat,b=h.defined,g=h.erase,r=h.error,F=h.extend,D=h.find,M=h.fireEvent,C=h.getNestedProperty,O=h.isArray,S=h.isNumber,W=h.isString,Y=h.merge,L=h.objectEach,z=h.pick,Q=h.removeEvent, +ia=h.splat,aa=h.syncTimeout;a=function(){function a(){this.zones=this.yAxis=this.xAxis=this.userOptions=this.tooltipOptions=this.processedYData=this.processedXData=this.points=this.options=this.linkedSeries=this.index=this.eventsToUnbind=this.eventOptions=this.data=this.chart=this._i=void 0}a.prototype.init=function(a,b){M(this,"init",{options:b});var d=this,c=a.series;this.eventsToUnbind=[];d.chart=a;d.options=d.setOptions(b);b=d.options;d.linkedSeries=[];d.bindAxes();F(d,{name:b.name,state:"",visible:!1!== +b.visible,selected:!0===b.selected});e(this,b);var g=b.events;if(g&&g.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;d.getColor();d.getSymbol();d.parallelArrays.forEach(function(a){d[a+"Data"]||(d[a+"Data"]=[])});d.isCartesian&&(a.hasCartesianSeries=!0);var f;c.length&&(f=c[c.length-1]);d._i=z(f&&f._i,-1)+1;d.opacity=d.options.opacity;a.orderSeries(this.insert(c));b.dataSorting&&b.dataSorting.enabled?d.setDataSortingOptions():d.points||d.data||d.setData(b.data, +!1);M(this,"afterInit")};a.prototype.is=function(a){return l[a]&&this instanceof l[a]};a.prototype.insert=function(a){var b=this.options.index,d;if(S(b)){for(d=a.length;d--;)if(b>=z(a[d].options.index,a[d]._i)){a.splice(d+1,0,this);break}-1===d&&a.unshift(this);d+=1}else a.push(this);return z(d,a.length-1)};a.prototype.bindAxes=function(){var a=this,b=a.options,d=a.chart,c;M(this,"bindAxes",null,function(){(a.axisTypes||[]).forEach(function(e){var g=0;d[e].forEach(function(d){c=d.options;if(b[e]=== +g&&!c.isInternal||"undefined"!==typeof b[e]&&b[e]===c.id||"undefined"===typeof b[e]&&0===c.index)a.insert(d.series),a[e]=d,d.isDirty=!0;c.isInternal||g++});a[e]||a.optionalAxis===e||r(18,!0,d)})});M(this,"afterBindAxes")};a.prototype.updateParallelArrays=function(a,b){var d=a.series,c=arguments,e=S(b)?function(c){var e="y"===c&&d.toYData?d.toYData(a):a[c];d[c+"Data"][b]=e}:function(a){Array.prototype[b].apply(d[a+"Data"],Array.prototype.slice.call(c,2))};d.parallelArrays.forEach(e)};a.prototype.hasData= +function(){return this.visible&&"undefined"!==typeof this.dataMax&&"undefined"!==typeof this.dataMin||this.visible&&this.yData&&0=this.cropStart?h-this.cropStart:h);!g&&e[h]&&e[h].touched&&(h=void 0);return h};a.prototype.updateData=function(a,d){var c=this.options,e=c.dataSorting,g=this.points,f=[],k,l,h,r=this.requireSorting,p=a.length===g.length,m=!0;this.xIncrement=null;a.forEach(function(a,d){var l=b(a)&&this.pointClass.prototype.optionsToObject.call({series:this},a)||{};var m=l.x;if(l.id||S(m)){if(m=this.findPointIndex(l, +h),-1===m||"undefined"===typeof m?f.push(a):g[m]&&a!==c.data[m]?(g[m].update(a,!1,null,!1),g[m].touched=!0,r&&(h=m+1)):g[m]&&(g[m].touched=!0),!p||d!==m||e&&e.enabled||this.hasDerivedData)k=!0}else f.push(a)},this);if(k)for(a=g.length;a--;)(l=g[a])&&!l.touched&&l.remove&&l.remove(!1,d);else!p||e&&e.enabled?m=!1:(a.forEach(function(a,b){a!==g[b].y&&g[b].update&&g[b].update(a,!1,null,!1)}),f.length=0);g.forEach(function(a){a&&(a.touched=!1)});if(!m)return!1;f.forEach(function(a){this.addPoint(a,!1, +null,null,!1)},this);null===this.xIncrement&&this.xData&&this.xData.length&&(this.xIncrement=K(this.xData),this.autoIncrement());return!0};a.prototype.setData=function(a,b,d,c){var e=this,g=e.points,f=g&&g.length||0,k,l=e.options,h=e.chart,p=l.dataSorting,m=null,t=e.xAxis;m=l.turboThreshold;var I=this.xData,n=this.yData,q=(k=e.pointArrayMap)&&k.length,w=l.keys,A=0,v=1,C;a=a||[];k=a.length;b=z(b,!0);p&&p.enabled&&(a=this.sortData(a));!1!==c&&k&&f&&!e.cropped&&!e.hasGroupedData&&e.visible&&!e.isSeriesBoosting&& +(C=this.updateData(a,d));if(!C){e.xIncrement=null;e.colorCounter=0;this.parallelArrays.forEach(function(a){e[a+"Data"].length=0});if(m&&k>m)if(m=e.getFirstValidPoint(a),S(m))for(d=0;da?1:0}).forEach(function(a,b){a.x=b},this);d.linkedSeries&&d.linkedSeries.forEach(function(b){var d=b.options,c=d.data;d.dataSorting&&d.dataSorting.enabled||!c||(c.forEach(function(d,g){c[g]=e(b,d);a[g]&&(c[g].x=a[g].x,c[g].index=g)}),b.setData(c,!1))});return a};a.prototype.getProcessedData=function(a){var b=this.xData,d=this.yData,c=b.length;var e=0;var g=this.xAxis,f=this.options;var k=f.cropThreshold; +var l=a||this.getExtremesFromAll||f.getExtremesFromAll,h=this.isCartesian;a=g&&g.val2lin;f=!(!g||!g.logarithmic);var m=this.requireSorting;if(g){g=g.getExtremes();var p=g.min;var t=g.max}if(h&&this.sorted&&!l&&(!k||c>k||this.forceCrop))if(b[c-1]t)b=[],d=[];else if(this.yData&&(b[0]t)){e=this.cropData(this.xData,this.yData,p,t);b=e.xData;d=e.yData;e=e.start;var I=!0}for(k=b.length||1;--k;)if(c=f?a(b[k])-a(b[k-1]):b[k]-b[k-1],0c&& +m&&(r(15,!1,this.chart),m=!1);return{xData:b,yData:d,cropped:I,cropStart:e,closestPointRange:n}};a.prototype.processData=function(a){var b=this.xAxis;if(this.isCartesian&&!this.isDirty&&!b.isDirty&&!this.yAxis.isDirty&&!a)return!1;a=this.getProcessedData();this.cropped=a.cropped;this.cropStart=a.cropStart;this.processedXData=a.xData;this.processedYData=a.yData;this.closestPointRange=this.basePointRange=a.closestPointRange};a.prototype.cropData=function(a,b,d,c,e){var g=a.length,f=0,k=g,l;e=z(e,this.cropShoulder); +for(l=0;l=d){f=Math.max(0,l-e);break}for(d=l;dc){k=d+e;break}return{xData:a.slice(f,k),yData:b.slice(f,k),start:f,end:k}};a.prototype.generatePoints=function(){var a=this.options,b=a.data,d=this.data,c,e=this.processedXData,g=this.processedYData,f=this.pointClass,k=e.length,l=this.cropStart||0,h=this.hasGroupedData,r=a.keys,m=[],p;a=a.dataGrouping&&a.dataGrouping.groupAll?l:0;d||h||(d=[],d.length=b.length,d=this.data=d);r&&h&&(this.options.keys=!1);for(p=0;p=k&&(e[r-h]||m)<=l;if(n&&m)if(n=t.length)for(;n--;)S(t[n])&&(g[f++]=t[n]);else g[f++]=t}a={dataMin:A(g),dataMax:K(g)};M(this,"afterGetExtremes",{dataExtremes:a});return a};a.prototype.applyExtremes=function(){var a=this.getExtremes();this.dataMin=a.dataMin;this.dataMax=a.dataMax;return a};a.prototype.getFirstValidPoint=function(a){for(var b=null,d=a.length,c=0;null===b&&c=J&&(J=null),u.total=u.stackTotal=x.total,u.percentage=x.total&&u.y/x.total*100,u.stackY=D,this.irregularWidths||x.setOffset(this.pointXOffset||0,this.barW||0));u.yBottom=b(J)?p(f.translate(J,0,1,0,1),-1E5,1E5):null;r&&(D=this.modifyValue(D, +u));u.plotY=void 0;S(D)&&(D=f.translate(D,!1,!0,!1,!0),"undefined"!==typeof D&&(u.plotY=p(D,-1E5,1E5)));u.isInside=this.isPointInside(u);u.clientX=n?k(c.translate(F,0,0,0,1,t)):A;u.negative=u[v]<(a[v+"Threshold"]||q||0);u.category=e&&"undefined"!==typeof e[u.x]?e[u.x]:u.x;if(!u.isNull&&!1!==u.visible){"undefined"!==typeof E&&(C=Math.min(C,Math.abs(A-E)));var E=A}u.zone=this.zones.length&&u.getZone();!u.graphic&&this.group&&g&&(u.isNew=!0)}this.closestPointRangePx=C;M(this,"afterTranslate")};a.prototype.getValidPoints= +function(a,b,d){var c=this.chart;return(a||this.points||[]).filter(function(a){return b&&!c.isInsidePlot(a.plotX,a.plotY,{inverted:c.inverted})?!1:!1!==a.visible&&(d||!a.isNull)})};a.prototype.getClipBox=function(a,b){var d=this.options,c=this.chart,e=c.inverted,g=this.xAxis,f=g&&this.yAxis,k=c.options.chart.scrollablePlotArea||{};a&&!1===d.clip&&f?a=e?{y:-c.chartWidth+f.len+f.pos,height:c.chartWidth,width:c.chartHeight,x:-c.chartHeight+g.len+g.pos}:{y:-f.pos,height:c.chartHeight,width:c.chartWidth, +x:-g.pos}:(a=this.clipBox||c.clipBox,b&&(a.width=c.plotSizeX,a.x=(c.scrollablePixelsX||0)*(k.scrollPositionX||0)));return b?{width:a.width,x:a.x}:a};a.prototype.getSharedClipKey=function(a){if(this.sharedClipKey)return this.sharedClipKey;var b=[a&&a.duration,a&&a.easing,a&&a.defer,this.getClipBox(a).height,this.options.xAxis,this.options.yAxis].join();if(!1!==this.options.clip||a)this.sharedClipKey=b;return b};a.prototype.setClip=function(a){var b=this.chart,d=this.options,c=b.renderer,e=b.inverted, +g=this.clipBox,f=this.getClipBox(a),k=this.getSharedClipKey(a),l=b.sharedClips[k],h=b.sharedClips[k+"m"];a&&(f.width=0,e&&(f.x=b.plotHeight+(!1!==d.clip?0:b.plotTop)));l?b.hasLoaded||l.attr(f):(a&&(b.sharedClips[k+"m"]=h=c.clipRect(e?(b.plotSizeX||0)+99:-99,e?-b.plotLeft:-b.plotTop,99,e?b.chartWidth:b.chartHeight)),b.sharedClips[k]=l=c.clipRect(f),l.count={length:0});a&&!l.count[this.index]&&(l.count[this.index]=!0,l.count.length+=1);if(!1!==d.clip||a)this.group.clip(a||g?l:b.clipRect),this.markerGroup.clip(h); +a||(l.count[this.index]&&(delete l.count[this.index],--l.count.length),0===l.count.length&&(g||(b.sharedClips[k]=l.destroy()),h&&(b.sharedClips[k+"m"]=h.destroy())))};a.prototype.animate=function(a){var b=this.chart,d=f(this.options.animation),c=this.sharedClipKey;if(a)this.setClip(d);else if(c){a=b.sharedClips[c];c=b.sharedClips[c+"m"];var e=this.getClipBox(d,!0);a&&a.animate(e,d);c&&c.animate({width:e.width+99,x:e.x-(b.inverted?0:99)},d)}};a.prototype.afterAnimate=function(){this.setClip();M(this, +"afterAnimate");this.finishedAnimating=!0};a.prototype.drawPoints=function(){var a=this.points,b=this.chart,d,c,e=this.options.marker,g=this[this.specialGroup]||this.markerGroup,f=this.xAxis,k=z(e.enabled,!f||f.isRadial?!0:null,this.closestPointRangePx>=e.enabledThreshold*e.radius);if(!1!==e.enabled||this._hasPointMarkers)for(d=0;dD.max;a.resetZones&&0===g&&(g=void 0)});this.clips=f}else a.visible&&(l&&l.show(!0),h&&h.show(!0))};a.prototype.invertGroups=function(a){function b(){["group","markerGroup"].forEach(function(b){d[b]&&(c.renderer.isVML&&d[b].attr({width:d.yAxis.len,height:d.xAxis.len}),d[b].width=d.yAxis.len,d[b].height=d.xAxis.len,d[b].invert(d.isRadialSeries?!1:a))})}var d=this,c=d.chart;d.xAxis&&(d.eventsToUnbind.push(v(c, +"resize",b)),b(),d.invertGroups=b)};a.prototype.plotGroup=function(a,d,c,e,g){var f=this[a],k=!f;c={visibility:c,zIndex:e||.1};"undefined"===typeof this.opacity||this.chart.styledMode||"inactive"===this.state||(c.opacity=this.opacity);k&&(this[a]=f=this.chart.renderer.g().add(g));f.addClass("highcharts-"+d+" highcharts-series-"+this.index+" highcharts-"+this.type+"-series "+(b(this.colorIndex)?"highcharts-color-"+this.colorIndex+" ":"")+(this.options.className||"")+(f.hasClass("highcharts-tracker")? +" highcharts-tracker":""),!0);f.attr(c)[k?"attr":"animate"](this.getPlotBox());return f};a.prototype.getPlotBox=function(){var a=this.chart,b=this.xAxis,d=this.yAxis;a.inverted&&(b=d,d=this.xAxis);return{translateX:b?b.left:a.plotLeft,translateY:d?d.top:a.plotTop,scaleX:1,scaleY:1}};a.prototype.removeEvents=function(a){a||Q(this);this.eventsToUnbind.length&&(this.eventsToUnbind.forEach(function(a){a()}),this.eventsToUnbind.length=0)};a.prototype.render=function(){var a=this,b=a.chart,d=a.options, +c=f(d.animation),e=!a.finishedAnimating&&b.renderer.isSVG&&c.duration,g=a.visible?"inherit":"hidden",k=d.zIndex,l=a.hasRendered,h=b.seriesGroup,p=b.inverted;M(this,"render");var m=a.plotGroup("group","series",g,k,h);a.markerGroup=a.plotGroup("markerGroup","markers",g,k,h);e&&a.animate&&a.animate(!0);m.inverted=z(a.invertible,a.isCartesian)?p:!1;a.drawGraph&&(a.drawGraph(),a.applyZones());a.visible&&a.drawPoints();a.drawDataLabels&&a.drawDataLabels();a.redrawPoints&&a.redrawPoints();a.drawTracker&& +!1!==a.options.enableMouseTracking&&a.drawTracker();a.invertGroups(p);!1===d.clip||a.sharedClipKey||l||m.clip(b.clipRect);e&&a.animate&&a.animate();l||(e&&c.defer&&(e+=c.defer),a.animationTimeout=aa(function(){a.afterAnimate()},e||0));a.isDirty=!1;a.hasRendered=!0;M(a,"afterRender")};a.prototype.redraw=function(){var a=this.chart,b=this.isDirty||this.isDirtyData,d=this.group,c=this.xAxis,e=this.yAxis;d&&(a.inverted&&d.attr({width:a.plotWidth,height:a.plotHeight}),d.animate({translateX:z(c&&c.left, +a.plotLeft),translateY:z(e&&e.top,a.plotTop)}));this.translate();this.render();b&&delete this.kdTree};a.prototype.searchPoint=function(a,b){var d=this.xAxis,c=this.yAxis,e=this.chart.inverted;return this.searchKDTree({clientX:e?d.len-a.chartY+d.pos:a.chartX-d.pos,plotY:e?c.len-a.chartX+c.pos:a.chartY-c.pos},b,a)};a.prototype.buildKDTree=function(a){function b(a,c,e){var g;if(g=a&&a.length){var f=d.kdAxisArray[c%e];a.sort(function(a,b){return a[f]-b[f]});g=Math.floor(g/2);return{point:a[g],left:b(a.slice(0, +g),c+1,e),right:b(a.slice(g+1),c+1,e)}}}this.buildingKdTree=!0;var d=this,c=-1m?"left":"right";t=0>m?"right":"left";d[n]&&(n=e(a,d[n],c+1,h),r=n[l]t;)n--;this.updateParallelArrays(r,"splice",n,0,0);this.updateParallelArrays(r,n);l&&r.name&&(l[t]=r.name);h.splice(n,0,a);m&&(this.data.splice(n,0,null),this.processData());"point"===g.legendType&&this.generatePoints();d&&(f[0]&&f[0].remove?f[0].remove(!1):(f.shift(),this.updateParallelArrays(r,"shift"),h.shift()));!1!==e&&M(this,"addPoint",{point:r});this.isDirtyData=this.isDirty=!0;b&&k.redraw(c)};a.prototype.removePoint=function(a,b,d){var e=this,g=e.data,f=g[a],k=e.points,l=e.chart, +h=function(){k&&k.length===g.length&&k.splice(a,1);g.splice(a,1);e.options.data.splice(a,1);e.updateParallelArrays(f||{series:e},"splice",a,1);f&&f.destroy();e.isDirty=!0;e.isDirtyData=!0;b&&l.redraw()};c(d,l);b=z(b,!0);f?f.firePointEvent("remove",null,h):h()};a.prototype.remove=function(a,b,d,c){function e(){g.destroy(c);f.isDirtyLegend=f.isDirtyBox=!0;f.linkSeries();z(a,!0)&&f.redraw(b)}var g=this,f=g.chart;!1!==d?M(g,"remove",null,e):e()};a.prototype.update=function(a,b){a=d(a,this.userOptions); +M(this,"update",{options:a});var c=this,e=c.chart,g=c.userOptions,f=c.initialType||c.type,k=e.options.plotOptions,h=a.type||g.type||e.options.chart.type,p=!(this.hasDerivedData||h&&h!==this.type||"undefined"!==typeof a.pointStart||"undefined"!==typeof a.pointInterval||c.hasOptionChanged("dataGrouping")||c.hasOptionChanged("pointStart")||c.hasOptionChanged("pointInterval")||c.hasOptionChanged("pointIntervalUnit")||c.hasOptionChanged("keys")),m=l[f].prototype,t,n=["eventOptions","navigatorSeries","baseSeries"], +q=c.finishedAnimating&&{animation:!1},w={};h=h||f;p&&(n.push("data","isDirtyData","points","processedXData","processedYData","xIncrement","cropped","_hasPointMarkers","_hasPointLabels","clips","nodes","layout","mapMap","mapData","minY","maxY","minX","maxX"),!1!==a.visible&&n.push("area","graph"),c.parallelArrays.forEach(function(a){n.push(a+"Data")}),a.data&&(a.dataSorting&&F(c.options.dataSorting,a.dataSorting),this.setData(a.data,!1)));a=Y(g,q,{index:"undefined"===typeof g.index?c.index:g.index, +pointStart:z(k&&k.series&&k.series.pointStart,g.pointStart,c.xData[0])},!p&&{data:c.options.data},a);p&&a.data&&(a.data=c.options.data);n=["group","markerGroup","dataLabelsGroup","transformGroup"].concat(n);n.forEach(function(a){n[a]=c[a];delete c[a]});g=!1;if(l[h]){if(g=h!==c.type,c.remove(!1,!1,!1,!0),g)if(Object.setPrototypeOf)Object.setPrototypeOf(c,l[h].prototype);else{k=Object.hasOwnProperty.call(c,"hcEvents")&&c.hcEvents;for(t in m)c[t]=void 0;F(c,l[h].prototype);k?c.hcEvents=k:delete c.hcEvents}}else r(17, +!0,e,{missingModuleFor:h});n.forEach(function(a){c[a]=n[a]});c.init(e,a);if(p&&this.points){var A=c.options;!1===A.visible?(w.graphic=1,w.dataLabel=1):c._hasPointLabels||(a=A.marker,h=A.dataLabels,a&&(!1===a.enabled||"symbol"in a)&&(w.graphic=1),h&&!1===h.enabled&&(w.dataLabel=1));this.points.forEach(function(a){a&&a.series&&(a.resolveColor(),Object.keys(w).length&&a.destroyElements(w),!1===A.showInLegend&&a.legendItem&&e.legend.destroyItem(a))},this)}c.initialType=f;e.linkSeries();g&&c.linkedSeries.length&& +(c.isDirtyData=!0);M(this,"afterUpdate");z(b,!0)&&e.redraw(p?void 0:!1)};a.prototype.setName=function(a){this.name=this.options.name=this.userOptions.name=a;this.chart.isDirtyLegend=!0};a.prototype.hasOptionChanged=function(a){var b=this.options[a],d=this.chart.options.plotOptions,c=this.userOptions[a];return c?b!==c:b!==z(d&&d[this.type]&&d[this.type][a],d&&d.series&&d.series[a],b)};a.prototype.onMouseOver=function(){var a=this.chart,b=a.hoverSeries;a.pointer.setHoverChartIndex();if(b&&b!==this)b.onMouseOut(); +this.options.events.mouseOver&&M(this,"mouseOver");this.setState("hover");a.hoverSeries=this};a.prototype.onMouseOut=function(){var a=this.options,b=this.chart,d=b.tooltip,c=b.hoverPoint;b.hoverSeries=null;if(c)c.onMouseOut();this&&a.events.mouseOut&&M(this,"mouseOut");!d||this.stickyTracking||d.shared&&!this.noSharedTooltip||d.hide();b.series.forEach(function(a){a.setState("",!0)})};a.prototype.setState=function(a,b){var d=this,c=d.options,e=d.graph,g=c.inactiveOtherPoints,f=c.states,k=c.lineWidth, +l=c.opacity,h=z(f[a||"normal"]&&f[a||"normal"].animation,d.chart.options.chart.animation);c=0;a=a||"";if(d.state!==a&&([d.group,d.markerGroup,d.dataLabelsGroup].forEach(function(b){b&&(d.state&&b.removeClass("highcharts-series-"+d.state),a&&b.addClass("highcharts-series-"+a))}),d.state=a,!d.chart.styledMode)){if(f[a]&&!1===f[a].enabled)return;a&&(k=f[a].lineWidth||k+(f[a].lineWidthPlus||0),l=z(f[a].opacity,l));if(e&&!e.dashstyle)for(f={"stroke-width":k},e.animate(f,h);d["zone-graph-"+c];)d["zone-graph-"+ +c].animate(f,h),c+=1;g||[d.group,d.markerGroup,d.dataLabelsGroup,d.labelBySeries].forEach(function(a){a&&a.animate({opacity:l},h)})}b&&g&&d.points&&d.setAllPointsToState(a||void 0)};a.prototype.setAllPointsToState=function(a){this.points.forEach(function(b){b.setState&&b.setState(a)})};a.prototype.setVisible=function(a,b){var d=this,c=d.chart,e=d.legendItem,g=c.options.chart.ignoreHiddenSeries,f=d.visible;var k=(d.visible=a=d.options.visible=d.userOptions.visible="undefined"===typeof a?!f:a)?"show": +"hide";["group","dataLabelsGroup","markerGroup","tracker","tt"].forEach(function(a){if(d[a])d[a][k]()});if(c.hoverSeries===d||(c.hoverPoint&&c.hoverPoint.series)===d)d.onMouseOut();e&&c.legend.colorizeItem(d,a);d.isDirty=!0;d.options.stacking&&c.series.forEach(function(a){a.options.stacking&&a.visible&&(a.isDirty=!0)});d.linkedSeries.forEach(function(b){b.setVisible(a,!1)});g&&(c.isDirtyBox=!0);M(d,k);!1!==b&&c.redraw()};a.prototype.show=function(){this.setVisible(!0)};a.prototype.hide=function(){this.setVisible(!1)}; +a.prototype.select=function(a){this.selected=a=this.options.selected="undefined"===typeof a?!this.selected:a;this.checkbox&&(this.checkbox.checked=a);M(this,a?"select":"unselect")};a.prototype.shouldShowTooltip=function(a,b,d){void 0===d&&(d={});d.series=this;d.visiblePlotOnly=!0;return this.chart.isInsidePlot(a,b,d)};a.defaultOptions={lineWidth:2,allowPointSelect:!1,crisp:!0,showCheckbox:!1,animation:{duration:1E3},events:{},marker:{enabledThreshold:2,lineColor:y.backgroundColor,lineWidth:0,radius:4, +states:{normal:{animation:!0},hover:{animation:{duration:50},enabled:!0,radiusPlus:2,lineWidthPlus:1},select:{fillColor:y.neutralColor20,lineColor:y.neutralColor100,lineWidth:2}}},point:{events:{}},dataLabels:{animation:{},align:"center",defer:!0,formatter:function(){var a=this.series.chart.numberFormatter;return"number"!==typeof this.y?"":a(this.y,-1)},padding:5,style:{fontSize:"11px",fontWeight:"bold",color:"contrast",textOutline:"1px contrast"},verticalAlign:"bottom",x:0,y:0},cropThreshold:300, +opacity:1,pointRange:0,softThreshold:!0,states:{normal:{animation:!0},hover:{animation:{duration:50},lineWidthPlus:1,marker:{},halo:{size:10,opacity:.25}},select:{animation:{duration:0}},inactive:{animation:{duration:50},opacity:.2}},stickyTracking:!0,turboThreshold:1E3,findNearestPointBy:"x"};return a}();F(a.prototype,{axisTypes:["xAxis","yAxis"],coll:"series",colorCounter:0,cropShoulder:1,directTouch:!1,drawLegendSymbol:H.drawLineMarker,isCartesian:!0,kdAxisArray:["clientX","plotY"],parallelArrays:["x", +"y"],pointClass:G,requireSorting:!0,sorted:!0});B.series=a;"";"";return a});L(a,"Extensions/ScrollablePlotArea.js",[a["Core/Animation/AnimationUtilities.js"],a["Core/Axis/Axis.js"],a["Core/Chart/Chart.js"],a["Core/Series/Series.js"],a["Core/Renderer/RendererRegistry.js"],a["Core/Utilities.js"]],function(a,u,E,H,x,y){var v=a.stop,B=y.addEvent,q=y.createElement,h=y.merge,f=y.pick;B(E,"afterSetChartSize",function(a){var c=this.options.chart.scrollablePlotArea,f=c&&c.minWidth;c=c&&c.minHeight;if(!this.renderer.forExport){if(f){if(this.scrollablePixelsX= +f=Math.max(0,f-this.chartWidth)){this.scrollablePlotBox=this.renderer.scrollablePlotBox=h(this.plotBox);this.plotBox.width=this.plotWidth+=f;this.inverted?this.clipBox.height+=f:this.clipBox.width+=f;var m={1:{name:"right",value:f}}}}else c&&(this.scrollablePixelsY=f=Math.max(0,c-this.chartHeight))&&(this.scrollablePlotBox=this.renderer.scrollablePlotBox=h(this.plotBox),this.plotBox.height=this.plotHeight+=f,this.inverted?this.clipBox.width+=f:this.clipBox.height+=f,m={2:{name:"bottom",value:f}}); +m&&!a.skipAxes&&this.axes.forEach(function(a){m[a.side]?a.getPlotLinePath=function(){var c=m[a.side].name,e=this[c];this[c]=e-m[a.side].value;var f=u.prototype.getPlotLinePath.apply(this,arguments);this[c]=e;return f}:(a.setAxisSize(),a.setAxisTranslation())})}});B(E,"render",function(){this.scrollablePixelsX||this.scrollablePixelsY?(this.setUpScrolling&&this.setUpScrolling(),this.applyFixed()):this.fixedDiv&&this.applyFixed()});E.prototype.setUpScrolling=function(){var a=this,e={WebkitOverflowScrolling:"touch", +overflowX:"hidden",overflowY:"hidden"};this.scrollablePixelsX&&(e.overflowX="auto");this.scrollablePixelsY&&(e.overflowY="auto");this.scrollingParent=q("div",{className:"highcharts-scrolling-parent"},{position:"relative"},this.renderTo);this.scrollingContainer=q("div",{className:"highcharts-scrolling"},e,this.scrollingParent);B(this.scrollingContainer,"scroll",function(){a.pointer&&delete a.pointer.chartPosition});this.innerContainer=q("div",{className:"highcharts-inner-container"},null,this.scrollingContainer); +this.innerContainer.appendChild(this.container);this.setUpScrolling=null};E.prototype.moveFixedElements=function(){var a=this.container,e=this.fixedRenderer,f=".highcharts-contextbutton .highcharts-credits .highcharts-legend .highcharts-legend-checkbox .highcharts-navigator-series .highcharts-navigator-xaxis .highcharts-navigator-yaxis .highcharts-navigator .highcharts-reset-zoom .highcharts-drillup-button .highcharts-scrollbar .highcharts-subtitle .highcharts-title".split(" "),h;this.scrollablePixelsX&& +!this.inverted?h=".highcharts-yaxis":this.scrollablePixelsX&&this.inverted?h=".highcharts-xaxis":this.scrollablePixelsY&&!this.inverted?h=".highcharts-xaxis":this.scrollablePixelsY&&this.inverted&&(h=".highcharts-yaxis");h&&f.push(h+":not(.highcharts-radial-axis)",h+"-labels:not(.highcharts-radial-axis-labels)");f.forEach(function(c){[].forEach.call(a.querySelectorAll(c),function(a){(a.namespaceURI===e.SVG_NS?e.box:e.box.parentNode).appendChild(a);a.style.pointerEvents="auto"})})};E.prototype.applyFixed= +function(){var a=!this.fixedDiv,e=this.options.chart,h=e.scrollablePlotArea,m=x.getRendererType();a?(this.fixedDiv=q("div",{className:"highcharts-fixed"},{position:"absolute",overflow:"hidden",pointerEvents:"none",zIndex:(e.style&&e.style.zIndex||0)+2,top:0},null,!0),this.scrollingContainer&&this.scrollingContainer.parentNode.insertBefore(this.fixedDiv,this.scrollingContainer),this.renderTo.style.overflow="visible",this.fixedRenderer=e=new m(this.fixedDiv,this.chartWidth,this.chartHeight,this.options.chart.style), +this.scrollableMask=e.path().attr({fill:this.options.chart.backgroundColor||"#fff","fill-opacity":f(h.opacity,.85),zIndex:-1}).addClass("highcharts-scrollable-mask").add(),B(this,"afterShowResetZoom",this.moveFixedElements),B(this,"afterDrilldown",this.moveFixedElements),B(this,"afterLayOutTitles",this.moveFixedElements)):this.fixedRenderer.setSize(this.chartWidth,this.chartHeight);if(this.scrollableDirty||a)this.scrollableDirty=!1,this.moveFixedElements();e=this.chartWidth+(this.scrollablePixelsX|| +0);m=this.chartHeight+(this.scrollablePixelsY||0);v(this.container);this.container.style.width=e+"px";this.container.style.height=m+"px";this.renderer.boxWrapper.attr({width:e,height:m,viewBox:[0,0,e,m].join(" ")});this.chartBackground.attr({width:e,height:m});this.scrollingContainer.style.height=this.chartHeight+"px";a&&(h.scrollPositionX&&(this.scrollingContainer.scrollLeft=this.scrollablePixelsX*h.scrollPositionX),h.scrollPositionY&&(this.scrollingContainer.scrollTop=this.scrollablePixelsY*h.scrollPositionY)); +m=this.axisOffset;a=this.plotTop-m[0]-1;h=this.plotLeft-m[3]-1;e=this.plotTop+this.plotHeight+m[2]+1;m=this.plotLeft+this.plotWidth+m[1]+1;var w=this.plotLeft+this.plotWidth-(this.scrollablePixelsX||0),n=this.plotTop+this.plotHeight-(this.scrollablePixelsY||0);a=this.scrollablePixelsX?[["M",0,a],["L",this.plotLeft-1,a],["L",this.plotLeft-1,e],["L",0,e],["Z"],["M",w,a],["L",this.chartWidth,a],["L",this.chartWidth,e],["L",w,e],["Z"]]:this.scrollablePixelsY?[["M",h,0],["L",h,this.plotTop-1],["L",m,this.plotTop- +1],["L",m,0],["Z"],["M",h,n],["L",h,this.chartHeight],["L",m,this.chartHeight],["L",m,n],["Z"]]:[["M",0,0]];"adjustHeight"!==this.redrawTrigger&&this.scrollableMask.attr({d:a})};B(u,"afterInit",function(){this.chart.scrollableDirty=!0});B(H,"show",function(){this.chart.scrollableDirty=!0});""});L(a,"Core/Axis/StackingAxis.js",[a["Core/Animation/AnimationUtilities.js"],a["Core/Utilities.js"]],function(a,u){var v=a.getDeferredAnimation,H=u.addEvent,x=u.destroyObjectProperties,y=u.fireEvent,G=u.isNumber, +B=u.objectEach,q=function(){function a(a){this.oldStacks={};this.stacks={};this.stacksTouched=0;this.axis=a}a.prototype.buildStacks=function(){var a=this.axis,c=a.series,e=a.options.reversedStacks,h=c.length,m;if(!a.isXAxis){this.usePercentage=!1;for(m=h;m--;){var q=c[e?m:h-m-1];q.setStackedPoints();q.setGroupedPoints()}for(m=0;mt&&f.shadow));l&&(l.startX=c.xMap,l.isArea=c.isArea)})};q.prototype.getGraphPath=function(a,f,c){var e=this,h=e.options,m=h.step,q,n=[],l=[],v;a=a||e.points;(q=a.reversed)&&a.reverse();(m={right:1, +center:2}[m]||m&&3)&&q&&(m=4-m);a=this.getValidPoints(a,!1,!(h.connectNulls&&!f&&!c));a.forEach(function(t,q){var p=t.plotX,d=t.plotY,k=a[q-1];(t.leftCliff||k&&k.rightCliff)&&!c&&(v=!0);t.isNull&&!y(f)&&0a&&l>e?(l=Math.max(a,e),v=2*e-l):lf&&v>e?(v=Math.max(f,e),l=2*e-v):v=Math.abs(d)&&.5a.closestPointRange*a.xAxis.transA;f=a.borderWidth=A(c.borderWidth,f?0:1);var k=a.xAxis,l=a.yAxis,h=c.threshold,p=a.translatedThreshold=l.getThreshold(h),t=A(c.minPointLength,5),n=a.getColumnMetrics(),q=n.width,v=a.barW=Math.max(q,1+2*f),u=a.pointXOffset=n.offset,w=a.dataMin,x=a.dataMax;d.inverted&&(p-=.5);c.pointPadding&&(v=Math.ceil(v));y.prototype.translate.apply(a);a.points.forEach(function(b){var f= +A(b.yBottom,p),g=999+Math.abs(f),r=q,C=b.plotX||0;g=e(b.plotY,-g,l.len+g);C+=u;var F=v,D=Math.min(g,f),z=Math.max(g,f)-D;if(t&&Math.abs(z)t?f-t:p-(B?t:0)}m(b.options.pointWidth)&&(r=F=Math.ceil(b.options.pointWidth),C-=Math.round((r-q)/2));c.centerInCategory&&(C=a.adjustForMissingColumns(C,r,b,n));b.barX=C;b.pointWidth=r;b.tooltipPos=d.inverted?[e(l.len+ +l.pos-d.plotLeft-g,l.pos-d.plotLeft,l.len+l.pos-d.plotLeft),k.len+k.pos-d.plotTop-C-F/2,z]:[k.left-d.plotLeft+C+F/2,e(g+l.pos-d.plotTop,l.pos-d.plotTop,l.len+l.pos-d.plotTop),z];b.shapeType=a.pointClass.prototype.shapeType||"rect";b.shapeArgs=a.crispCol.apply(a,b.isNull?[C,p,F,0]:[C,D,F,z])})};d.prototype.drawGraph=function(){this.group[this.dense?"addClass":"removeClass"]("highcharts-dense-data")};d.prototype.pointAttribs=function(a,d){var b=this.options,c=this.pointAttrToOptions||{};var e=c.stroke|| +"borderColor";var g=c["stroke-width"]||"borderWidth",k=a&&a.color||this.color,l=a&&a[e]||b[e]||k,h=a&&a[g]||b[g]||this[g]||0;c=a&&a.options.dashStyle||b.dashStyle;var p=A(a&&a.opacity,b.opacity,1);if(a&&this.zones.length){var m=a.getZone();k=a.options.color||m&&(m.color||a.nonZonedColor)||this.color;m&&(l=m.borderColor||l,c=m.dashStyle||c,h=m.borderWidth||h)}d&&a&&(a=K(b.states[d],a.options.states&&a.options.states[d]||{}),d=a.brightness,k=a.color||"undefined"!==typeof d&&f(k).brighten(a.brightness).get()|| +k,l=a[e]||l,h=a[g]||h,c=a.dashStyle||c,p=A(a.opacity,p));e={fill:k,stroke:l,"stroke-width":h,opacity:p};c&&(e.dashstyle=c);return e};d.prototype.drawPoints=function(){var a=this,d=this.chart,c=a.options,e=d.renderer,f=c.animationLimit||250,k;a.points.forEach(function(b){var g=b.graphic,l=!!g,h=g&&d.pointCount\u25cf
{series.name}
',pointFormat:"x: {point.x}
y: {point.y}
"}});return h}(u);G(H.prototype,{drawTracker:a.prototype.drawTracker,sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:["group","markerGroup","dataLabelsGroup"],takeOrdinalPosition:!1});y(H,"afterTranslate",function(){this.applyJitter()});E.registerSeriesType("scatter",H);"";return H}); +L(a,"Mixins/CenteredSeries.js",[a["Core/Globals.js"],a["Core/Series/Series.js"],a["Core/Utilities.js"]],function(a,u,E){var v=E.isNumber,x=E.pick,y=E.relativeLength,G=a.deg2rad;return a.CenteredSeriesMixin={getCenter:function(){var a=this.options,q=this.chart,h=2*(a.slicedOffset||0),f=q.plotWidth-2*h,c=q.plotHeight-2*h,e=a.center,t=Math.min(f,c),m=a.size,v=a.innerSize||0;"string"===typeof m&&(m=parseFloat(m));"string"===typeof v&&(v=parseFloat(v));a=[x(e[0],"50%"),x(e[1],"50%"),x(m&&0>m?void 0:a.size, +"100%"),x(v&&0>v?void 0:a.innerSize||0,"0%")];!q.angular||this instanceof u||(a[3]=0);for(e=0;4>e;++e)m=a[e],q=2>e||2===e&&/%$/.test(m),a[e]=y(m,[f,c,t,a[2]][e])+(q?h:0);a[3]>a[2]&&(a[3]=a[2]);return a},getStartAndEndRadians:function(a,q){a=v(a)?a:0;q=v(q)&&q>a&&360>q-a?q:a+360;return{start:G*(a+-90),end:G*(q+-90)}}}});L(a,"Series/Pie/PiePoint.js",[a["Core/Animation/AnimationUtilities.js"],a["Core/Series/Point.js"],a["Core/Utilities.js"]],function(a,u,E){var v=this&&this.__extends||function(){var a= +function(c,e){a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,c){a.__proto__=c}||function(a,c){for(var e in c)c.hasOwnProperty(e)&&(a[e]=c[e])};return a(c,e)};return function(c,e){function f(){this.constructor=c}a(c,e);c.prototype=null===e?Object.create(e):(f.prototype=e.prototype,new f)}}(),x=a.setAnimation,y=E.addEvent,G=E.defined;a=E.extend;var B=E.isNumber,q=E.pick,h=E.relativeLength;E=function(a){function c(){var c=null!==a&&a.apply(this,arguments)||this;c.labelDistance=void 0; +c.options=void 0;c.series=void 0;return c}v(c,a);c.prototype.getConnectorPath=function(){var a=this.labelPosition,c=this.series.options.dataLabels,f=c.connectorShape,h=this.connectorShapes;h[f]&&(f=h[f]);return f.call(this,{x:a.final.x,y:a.final.y,alignment:a.alignment},a.connectorPosition,c)};c.prototype.getTranslate=function(){return this.sliced?this.slicedTranslation:{translateX:0,translateY:0}};c.prototype.haloPath=function(a){var c=this.shapeArgs;return this.sliced||!this.visible?[]:this.series.chart.renderer.symbols.arc(c.x, +c.y,c.r+a,c.r+a,{innerR:c.r-1,start:c.start,end:c.end})};c.prototype.init=function(){u.prototype.init.apply(this,arguments);var a=this;a.name=q(a.name,"Slice");var c=function(c){a.slice("select"===c.type)};y(a,"select",c);y(a,"unselect",c);return a};c.prototype.isValid=function(){return B(this.y)&&0<=this.y};c.prototype.setVisible=function(a,c){var e=this,f=e.series,h=f.chart,l=f.options.ignoreHiddenPoint;c=q(c,l);a!==e.visible&&(e.visible=e.options.visible=a="undefined"===typeof a?!e.visible:a,f.options.data[f.data.indexOf(e)]= +e.options,["graphic","dataLabel","connector","shadowGroup"].forEach(function(c){if(e[c])e[c][a?"show":"hide"](a)}),e.legendItem&&h.legend.colorizeItem(e,a),a||"hover"!==e.state||e.setState(""),l&&(f.isDirty=!0),c&&h.redraw())};c.prototype.slice=function(a,c,f){var e=this.series;x(f,e.chart);q(c,!0);this.sliced=this.options.sliced=G(a)?a:!this.sliced;e.options.data[e.data.indexOf(this)]=this.options;this.graphic&&this.graphic.animate(this.getTranslate());this.shadowGroup&&this.shadowGroup.animate(this.getTranslate())}; +return c}(u);a(E.prototype,{connectorShapes:{fixedOffset:function(a,c,e){var f=c.breakAt;c=c.touchingSliceAt;return[["M",a.x,a.y],e.softConnector?["C",a.x+("left"===a.alignment?-5:5),a.y,2*f.x-c.x,2*f.y-c.y,f.x,f.y]:["L",f.x,f.y],["L",c.x,c.y]]},straight:function(a,c){c=c.touchingSliceAt;return[["M",a.x,a.y],["L",c.x,c.y]]},crookedLine:function(a,c,e){c=c.touchingSliceAt;var f=this.series,m=f.center[0],q=f.chart.plotWidth,n=f.chart.plotLeft;f=a.alignment;var l=this.shapeArgs.r;e=h(e.crookDistance, +1);q="left"===f?m+l+(q+n-m-l)*(1-e):n+(m-l)*e;e=["L",q,a.y];m=!0;if("left"===f?q>a.x||qc.x)m=!1;a=[["M",a.x,a.y]];m&&a.push(e);a.push(["L",c.x,c.y]);return a}}});return E});L(a,"Series/Pie/PieSeries.js",[a["Mixins/CenteredSeries.js"],a["Series/Column/ColumnSeries.js"],a["Core/Globals.js"],a["Mixins/LegendSymbol.js"],a["Core/Color/Palette.js"],a["Series/Pie/PiePoint.js"],a["Core/Series/Series.js"],a["Core/Series/SeriesRegistry.js"],a["Core/Renderer/SVG/Symbols.js"],a["Core/Utilities.js"]], +function(a,u,E,H,x,y,G,B,q,h){var f=this&&this.__extends||function(){var a=function(c,e){a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,c){a.__proto__=c}||function(a,c){for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])};return a(c,e)};return function(c,e){function f(){this.constructor=c}a(c,e);c.prototype=null===e?Object.create(e):(f.prototype=e.prototype,new f)}}(),c=a.getStartAndEndRadians;E=E.noop;var e=h.clamp,t=h.extend,m=h.fireEvent,v=h.merge,n=h.pick,l=h.relativeLength;h= +function(a){function h(){var c=null!==a&&a.apply(this,arguments)||this;c.center=void 0;c.data=void 0;c.maxLabelDistance=void 0;c.options=void 0;c.points=void 0;return c}f(h,a);h.prototype.animate=function(a){var c=this,d=c.points,e=c.startAngleRad;a||d.forEach(function(a){var b=a.graphic,d=a.shapeArgs;b&&d&&(b.attr({r:n(a.startR,c.center&&c.center[3]/2),start:e,end:e}),b.animate({r:d.r,start:d.start,end:d.end},c.options.animation))})};h.prototype.drawEmpty=function(){var a=this.startAngleRad,c=this.endAngleRad, +d=this.options;if(0===this.total&&this.center){var e=this.center[0];var b=this.center[1];this.graph||(this.graph=this.chart.renderer.arc(e,b,this.center[1]/2,0,a,c).addClass("highcharts-empty-series").add(this.group));this.graph.attr({d:q.arc(e,b,this.center[2]/2,0,{start:a,end:c,innerR:this.center[3]/2})});this.chart.styledMode||this.graph.attr({"stroke-width":d.borderWidth,fill:d.fillColor||"none",stroke:d.color||x.neutralColor20})}else this.graph&&(this.graph=this.graph.destroy())};h.prototype.drawPoints= +function(){var a=this.chart.renderer;this.points.forEach(function(c){c.graphic&&c.hasNewShapeType()&&(c.graphic=c.graphic.destroy());c.graphic||(c.graphic=a[c.shapeType](c.shapeArgs).add(c.series.group),c.delayedRendering=!0)})};h.prototype.generatePoints=function(){a.prototype.generatePoints.call(this);this.updateTotals()};h.prototype.getX=function(a,c,d){var f=this.center,b=this.radii?this.radii[d.index]||0:f[2]/2;a=Math.asin(e((a-f[1])/(b+d.labelDistance),-1,1));return f[0]+(c?-1:1)*Math.cos(a)* +(b+d.labelDistance)+(01.5*Math.PI?x-=2*Math.PI:x<-Math.PI/2&&(x+=2*Math.PI);w.slicedTranslation={translateX:Math.round(Math.cos(x)*f),translateY:Math.round(Math.sin(x)*f)};y=Math.cos(x)*a[2]/ +2;var B=Math.sin(x)*a[2]/2;w.tooltipPos=[a[0]+.7*y,a[1]+.7*B];w.half=x<-Math.PI/2||x>Math.PI/2?1:0;w.angle=x;A=Math.min(b,w.labelDistance/5);w.labelPosition={natural:{x:a[0]+y+Math.cos(x)*w.labelDistance,y:a[1]+B+Math.sin(x)*w.labelDistance},"final":{},alignment:0>w.labelDistance?"center":w.half?"right":"left",connectorPosition:{breakAt:{x:a[0]+y+Math.cos(x)*A,y:a[1]+B+Math.sin(x)*A},touchingSliceAt:{x:a[0]+y,y:a[1]+B}}}}m(this,"afterTranslate")};h.prototype.updateTotals=function(){var a,c=0,d=this.points, +e=d.length,b=this.options.ignoreHiddenPoint;for(a=0;an){A(a,function(a,b){return(b.rank||0)-(a.rank||0)});for(p=d=0;p<=n;)p+=a[d].size,d++;m=a.splice(d-1,a.length)}A(a,b);for(a=a.map(function(a){return{size:a.size,targets:[a.target],align:l(a.align,.5)}});k;){for(d=a.length;d--;)k= +a[d],p=(Math.min.apply(0,k.targets)+Math.max.apply(0,k.targets))/2,k.pos=f(p-k.size*k.align,0,c-k.size);d=a.length;for(k=!1;d--;)0a[d].pos&&(a[d-1].size+=a[d].size,a[d-1].targets=a[d-1].targets.concat(a[d].targets),a[d-1].align=.5,a[d-1].pos+a[d-1].size>c&&(a[d-1].pos=c-a[d-1].size),a.splice(d,1),k=!0)}h.push.apply(h,m);d=0;a.some(function(a){var b=0;if(a.targets.some(function(){h[d].pos=a.pos+b;if("undefined"!==typeof e&&Math.abs(h[d].pos-h[d].target)>e)return h.slice(0, +d+1).forEach(function(a){delete a.pos}),h.reducedLen=(h.reducedLen||c)-.1*c,h.reducedLen>.1*c&&E.distribute(h,c,e),!0;b+=h[d].size;d++}))return!0});A(h,b)};x.prototype.drawDataLabels=function(){function a(a,b){var c=b.filter;return c?(b=c.operator,a=a[c.property],c=c.value,">"===b&&a>c||"<"===b&&a="===b&&a>=c||"<="===b&&a<=c||"=="===b&&a==c||"==="===b&&a===c?!0:!1):!0}function d(a,b){var c=[],d;if(m(a)&&!m(b))c=a.map(function(a){return w(a,b)});else if(m(b)&&!m(a))c=b.map(function(b){return w(a, +b)});else if(m(a)||m(b))for(d=Math.max(a.length,b.length);d--;)c[d]=w(a[d],b[d]);else c=w(a,b);return c}var e=this,b=e.chart,f=e.options,h=f.dataLabels,u=e.points,x,A=e.hasRendered||0,C=h.animation;C=h.defer?v(b,C,e):{defer:0,duration:0};var y=b.renderer;h=d(d(b.options.plotOptions&&b.options.plotOptions.series&&b.options.plotOptions.series.dataLabels,b.options.plotOptions&&b.options.plotOptions[e.type]&&b.options.plotOptions[e.type].dataLabels),h);t(this,"drawDataLabels");if(m(h)||h.enabled||e._hasPointLabels){var B= +e.plotGroup("dataLabelsGroup","data-labels",A?"inherit":"hidden",h.zIndex||6);B.attr({opacity:+A});!A&&(A=e.dataLabelsGroup)&&(e.visible&&B.show(!0),A[f.animation?"animate":"attr"]({opacity:1},C));u.forEach(function(g){x=K(d(h,g.dlOptions||g.options&&g.options.dataLabels));x.forEach(function(d,k){var h=d.enabled&&(!g.isNull||g.dataLabelOnNull)&&a(g,d),m=g.dataLabels?g.dataLabels[k]:g.dataLabel,p=g.connectors?g.connectors[k]:g.connector,r=l(d.distance,g.labelDistance),t=!m;if(h){var v=g.getLabelConfig(); +var u=l(d[g.formatPrefix+"Format"],d.format);v=c(u)?q(u,v,b):(d[g.formatPrefix+"Formatter"]||d.formatter).call(v,d);u=d.style;var w=d.rotation;b.styledMode||(u.color=l(d.color,u.color,e.color,H.neutralColor100),"contrast"===u.color?(g.contrastColor=y.getContrast(g.color||e.color),u.color=!c(r)&&d.inside||0>r||f.stacking?g.contrastColor:H.neutralColor100):delete g.contrastColor,f.cursor&&(u.cursor=f.cursor));var x={r:d.borderRadius||0,rotation:w,padding:d.padding,zIndex:1};b.styledMode||(x.fill=d.backgroundColor, +x.stroke=d.borderColor,x["stroke-width"]=d.borderWidth);n(x,function(a,b){"undefined"===typeof a&&delete x[b]})}!m||h&&c(v)?h&&c(v)&&(m?x.text=v:(g.dataLabels=g.dataLabels||[],m=g.dataLabels[k]=w?y.text(v,0,-9999,d.useHTML).addClass("highcharts-data-label"):y.label(v,0,-9999,d.shape,null,null,d.useHTML,null,"data-label"),k||(g.dataLabel=m),m.addClass(" highcharts-data-label-color-"+g.colorIndex+" "+(d.className||"")+(d.useHTML?" highcharts-tracker":""))),m.options=d,m.attr(x),b.styledMode||m.css(u).shadow(d.shadow), +m.added||m.add(B),d.textPath&&!d.useHTML&&(m.setTextPath(g.getDataLabelPath&&g.getDataLabelPath(m)||g.graphic,d.textPath),g.dataLabelPath&&!d.textPath.enabled&&(g.dataLabelPath=g.dataLabelPath.destroy())),e.alignDataLabel(g,m,d,null,t)):(g.dataLabel=g.dataLabel&&g.dataLabel.destroy(),g.dataLabels&&(1===g.dataLabels.length?delete g.dataLabels:delete g.dataLabels[k]),k||delete g.dataLabel,p&&(g.connector=g.connector.destroy(),g.connectors&&(1===g.connectors.length?delete g.connectors:delete g.connectors[k])))})})}t(this, +"afterDrawDataLabels")};x.prototype.alignDataLabel=function(a,c,f,b,g){var d=this,k=this.chart,h=this.isCartesian&&k.inverted,m=this.enabledDataSorting,p=l(a.dlBox&&a.dlBox.centerX,a.plotX,-9999),n=l(a.plotY,-9999),q=c.getBBox(),t=f.rotation,v=f.align,u=k.isInsidePlot(p,Math.round(n),{inverted:h,paneCoordinates:!0,series:d}),w="justify"===l(f.overflow,m?"none":"justify"),x=this.visible&&!1!==a.visible&&(a.series.forceDL||m&&!w||u||l(f.inside,!!this.options.stacking)&&b&&k.isInsidePlot(p,h?b.x+1:b.y+ +b.height-1,{inverted:h,paneCoordinates:!0,series:d}));var A=function(b){m&&d.xAxis&&!w&&d.setDataLabelStartPos(a,c,g,u,b)};if(x){var y=k.renderer.fontMetrics(k.styledMode?void 0:f.style.fontSize,c).b;b=e({x:h?this.yAxis.len-n:p,y:Math.round(h?this.xAxis.len-p:n),width:0,height:0},b);e(f,{width:q.width,height:q.height});t?(w=!1,p=k.renderer.rotCorr(y,t),p={x:b.x+(f.x||0)+b.width/2+p.x,y:b.y+(f.y||0)+{top:0,middle:.5,bottom:1}[f.verticalAlign]*b.height},A(p),c[g?"attr":"animate"](p).attr({align:v}), +A=(t+720)%360,A=180A,"left"===v?p.y-=A?q.height:0:"center"===v?(p.x-=q.width/2,p.y-=q.height/2):"right"===v&&(p.x-=q.width,p.y-=A?0:q.height),c.placed=!0,c.alignAttr=p):(A(b),c.align(f,void 0,b),p=c.alignAttr);w&&0<=b.height?this.justifyDataLabel(c,f,p,q,b,g):l(f.crop,!0)&&(x=k.isInsidePlot(p.x,p.y,{paneCoordinates:!0,series:d})&&k.isInsidePlot(p.x+q.width,p.y+q.height,{paneCoordinates:!0,series:d}));if(f.shape&&!t)c[g?"attr":"animate"]({anchorX:h?k.plotWidth-a.plotY:a.plotX,anchorY:h?k.plotHeight- +a.plotX:a.plotY})}g&&m&&(c.placed=!1);x||m&&!w||(c.hide(!0),c.placed=!1)};x.prototype.setDataLabelStartPos=function(a,c,e,b,f){var d=this.chart,g=d.inverted,k=this.xAxis,h=k.reversed,l=g?c.height/2:c.width/2;a=(a=a.pointWidth)?a/2:0;k=g?f.x:h?-l-a:k.width-l+a;f=g?h?this.yAxis.height-l+a:-l-a:f.y;c.startXPos=k;c.startYPos=f;b?"hidden"===c.visibility&&(c.show(),c.attr({opacity:0}).animate({opacity:1})):c.attr({opacity:1}).animate({opacity:0},void 0,c.hide);d.hasRendered&&(e&&c.attr({x:c.startXPos,y:c.startYPos}), +c.placed=!0)};x.prototype.justifyDataLabel=function(a,c,e,b,f,h){var d=this.chart,g=c.align,k=c.verticalAlign,l=a.box?0:a.padding||0,m=c.x;m=void 0===m?0:m;var p=c.y;var n=void 0===p?0:p;p=(e.x||0)+l;if(0>p){"right"===g&&0<=m?(c.align="left",c.inside=!0):m-=p;var r=!0}p=(e.x||0)+b.width-l;p>d.plotWidth&&("left"===g&&0>=m?(c.align="right",c.inside=!0):m+=d.plotWidth-p,r=!0);p=e.y+l;0>p&&("bottom"===k&&0<=n?(c.verticalAlign="top",c.inside=!0):n-=p,r=!0);p=(e.y||0)+b.height-l;p>d.plotHeight&&("top"=== +k&&0>=n?(c.verticalAlign="bottom",c.inside=!0):n+=d.plotHeight-p,r=!0);r&&(c.x=m,c.y=n,a.placed=!h,a.align(c,void 0,f));return r};y.pie&&(y.pie.prototype.dataLabelPositioners={radialDistributionY:function(a){return a.top+a.distributeBox.pos},radialDistributionX:function(a,c,e,b){return a.getX(ec.bottom-2?b:e,c.half,c)},justify:function(a,c,e){return e[0]+(a.half?-1:1)*(c+a.labelDistance)},alignToPlotEdges:function(a,c,e,b){a=a.getBBox().width;return c?a+b:e-a-b},alignToConnectors:function(a, +c,e,b){var d=0,f;a.forEach(function(a){f=a.dataLabel.getBBox().width;f>d&&(d=f)});return c?d+b:e-d-b}},y.pie.prototype.drawDataLabels=function(){var a=this,d=a.data,e,b=a.chart,f=a.options.dataLabels||{},m=f.connectorPadding,n,q=b.plotWidth,t=b.plotHeight,v=b.plotLeft,u=Math.round(b.chartWidth/3),A,y=a.center,B=y[2]/2,G=y[1],z,J,K,L,X=[[],[]],I,N,P,U,T=[0,0,0,0],R=a.dataLabelPositioners,V;a.visible&&(f.enabled||a._hasPointLabels)&&(d.forEach(function(a){a.dataLabel&&a.visible&&a.dataLabel.shortened&& +(a.dataLabel.attr({width:"auto"}).css({width:"auto",textOverflow:"clip"}),a.dataLabel.shortened=!1)}),x.prototype.drawDataLabels.apply(a),d.forEach(function(a){a.dataLabel&&(a.visible?(X[a.half].push(a),a.dataLabel._pos=null,!c(f.style.width)&&!c(a.options.dataLabels&&a.options.dataLabels.style&&a.options.dataLabels.style.width)&&a.dataLabel.getBBox().width>u&&(a.dataLabel.css({width:Math.round(.7*u)+"px"}),a.dataLabel.shortened=!0)):(a.dataLabel=a.dataLabel.destroy(),a.dataLabels&&1===a.dataLabels.length&& +delete a.dataLabels))}),X.forEach(function(d,g){var h=d.length,k=[],p;if(h){a.sortByAngle(d,g-.5);if(0q-m&&0===g&&(n=Math.round(I+J-q+m),T[1]=Math.max(n,T[1])),0>N-L/2?T[0]=Math.max(Math.round(-N+L/2),T[0]):N+L/2>t&&(T[2]=Math.max(Math.round(N+L/2-t),T[2])),z.sideOverflow=n)}}}),0===h(T)||this.verifyDataLabelOverflow(T))&&(this.placeDataLabels(),this.points.forEach(function(c){V= +w(f,c.options.dataLabels);if(n=l(V.connectorWidth,1)){var d;A=c.connector;if((z=c.dataLabel)&&z._pos&&c.visible&&0l(this.translatedThreshold,g.yAxis.len)),m=l(e.inside,!!this.options.stacking);h&&(b=w(h),0>b.y&&(b.height+=b.y,b.y=0),h=b.y+b.height-g.yAxis.len,0=u.x+u.width||y.x+y.width<=u.x||y.y>=u.y+u.height||y.y+y.height<=u.y||((l.labelrank=B(e.minWidth,0)&&this.chartHeight>=B(e.minHeight,0)}).call(this)&&c.push(a._id)};a.prototype.setResponsive=function(a,c){var e=this.options.responsive,f=this.currentResponsive,n=[];!c&& +e&&e.rules&&e.rules.forEach(function(a){"undefined"===typeof a._id&&(a._id=h());this.matchResponsiveRule(a,n)},this);c=y.apply(void 0,n.map(function(a){return E((e||{}).rules||[],function(c){return c._id===a})}).map(function(a){return a&&a.chartOptions}));c.isResponsiveOptions=!0;n=n.toString()||void 0;n!==(f&&f.ruleIds)&&(f&&this.update(f.undoOptions,a,!0),n?(f=this.currentOptions(c),f.isResponsiveOptions=!0,this.currentResponsive={ruleIds:n,mergedOptions:c,undoOptions:f},this.update(c,a,!0)):this.currentResponsive= +void 0)};return a}();a=function(){function a(){}a.compose=function(a){v(a.prototype,f.prototype);return a};return a}();"";"";return a});L(a,"masters/highcharts.src.js",[a["Core/Globals.js"],a["Core/Utilities.js"],a["Core/DefaultOptions.js"],a["Core/Animation/Fx.js"],a["Core/Animation/AnimationUtilities.js"],a["Core/Renderer/HTML/AST.js"],a["Core/FormatUtilities.js"],a["Core/Renderer/SVG/SVGElement.js"],a["Core/Renderer/SVG/SVGRenderer.js"],a["Core/Renderer/HTML/HTMLElement.js"],a["Core/Renderer/HTML/HTMLRenderer.js"], +a["Core/Axis/Axis.js"],a["Core/Axis/PlotLineOrBand.js"],a["Core/Axis/Tick.js"],a["Core/Pointer.js"],a["Core/MSPointer.js"],a["Core/Chart/Chart.js"],a["Core/Series/Series.js"],a["Core/Responsive.js"],a["Core/Color/Color.js"],a["Core/Time.js"]],function(a,u,E,H,x,y,G,B,q,h,f,c,e,t,m,w,n,l,J,K,A){a.animate=x.animate;a.animObject=x.animObject;a.getDeferredAnimation=x.getDeferredAnimation;a.setAnimation=x.setAnimation;a.stop=x.stop;a.timers=H.timers;a.AST=y;a.Axis=c;a.Chart=n;a.chart=n.chart;a.Fx=H;a.PlotLineOrBand= +e;a.Pointer=w.isRequired()?w:m;a.Series=l;a.SVGElement=B;a.SVGRenderer=q;a.Tick=t;a.Time=A;a.Color=K;a.color=K.parse;f.compose(q);h.compose(B);a.defaultOptions=E.defaultOptions;a.getOptions=E.getOptions;a.time=E.defaultTime;a.setOptions=E.setOptions;a.dateFormat=G.dateFormat;a.format=G.format;a.numberFormat=G.numberFormat;a.addEvent=u.addEvent;a.arrayMax=u.arrayMax;a.arrayMin=u.arrayMin;a.attr=u.attr;a.clearTimeout=u.clearTimeout;a.correctFloat=u.correctFloat;a.createElement=u.createElement;a.css= +u.css;a.defined=u.defined;a.destroyObjectProperties=u.destroyObjectProperties;a.discardElement=u.discardElement;a.erase=u.erase;a.error=u.error;a.extend=u.extend;a.extendClass=u.extendClass;a.find=u.find;a.fireEvent=u.fireEvent;a.getMagnitude=u.getMagnitude;a.getStyle=u.getStyle;a.inArray=u.inArray;a.isArray=u.isArray;a.isClass=u.isClass;a.isDOMElement=u.isDOMElement;a.isFunction=u.isFunction;a.isNumber=u.isNumber;a.isObject=u.isObject;a.isString=u.isString;a.keys=u.keys;a.merge=u.merge;a.normalizeTickInterval= +u.normalizeTickInterval;a.objectEach=u.objectEach;a.offset=u.offset;a.pad=u.pad;a.pick=u.pick;a.pInt=u.pInt;a.relativeLength=u.relativeLength;a.removeEvent=u.removeEvent;a.splat=u.splat;a.stableSort=u.stableSort;a.syncTimeout=u.syncTimeout;a.timeUnits=u.timeUnits;a.uniqueKey=u.uniqueKey;a.useSerialIds=u.useSerialIds;a.wrap=u.wrap;J.compose(n);return a});a["masters/highcharts.src.js"]._modules=a;return a["masters/highcharts.src.js"]}); +//# sourceMappingURL=highcharts.js.map \ No newline at end of file diff --git a/admin/js/angular-highcharts/highcharts.js.map b/admin/js/angular-highcharts/highcharts.js.map new file mode 100644 index 00000000..04bbf720 --- /dev/null +++ b/admin/js/angular-highcharts/highcharts.js.map @@ -0,0 +1 @@ +{"version":3,"file":"highcharts.js.map","lineCount":587,"mappings":"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","sources":["highcharts.src.js"],"names":["root","factory","module","exports","document","define","amd","Highcharts","error","window","win","_registerModule","obj","path","args","fn","hasOwnProperty","apply","_modules","w","Globals","SVG_NS","product","version","doc","svg","createElementNS","createSVGRect","userAgent","navigator","isChrome","indexOf","isFirefox","isMS","test","opera","isSafari","isTouchDevice","isWebKit","deg2rad","Math","PI","hasBidiBug","parseInt","split","hasTouch","TouchEvent","marginNames","noop","Globals.noop","supportsPassiveEvents","supportsPassive","opts","Object","defineProperty","get","addEventListener","removeEventListener","charts","dateFormats","seriesTypes","symbolSizes","chartCount","H","code","stop","chart","params","severity","isCode","isNumber","message","toString","additionalMessages_1","objectEach","value","key","encodeURI","fireEvent","defaultHandler","Error","console","messages","warn","push","cleanRecursively","newer","older","result","_val","isObject","nodeType","ob","keys","length","pInt","s","mag","isString","isArray","str","prototype","call","strict","isDOMElement","isClass","c","constructor","name","n","isNaN","Infinity","defined","attr","elem","prop","ret","setAttribute","getAttribute","val","extend","a","b","pick","arguments","i","arg","css","el","styles","opacity","filter","style","createElement","tag","attribs","parent","nopad","padding","border","margin","appendChild","correctFloat","num","prec","parseFloat","toPrecision","getStyle","toInt","customGetStyle","offsetWidth","min","scrollWidth","boundingClientRectWidth","getBoundingClientRect","width","floor","max","offsetHeight","scrollHeight","getComputedStyle","undefined","getPropertyValue","ctx","removeEvent","type","removeOneEvent","removeEventListenerPolyfill","removeAllEvents","eventCollection","len","nodeName","types","owner","events","hcEvents","typeEvents","eventArguments","defaultFunction","createEvent","dispatchEvent","e","initEvent","target","preventDefault","defaultPrevented","object","multilevel","unshift","getPrototypeOf","sort","order","forEach","garbageBin","easeInOutSine","Math.easeInOutSine","pos","cos","find","Array","arr","callback","map","each","grep","reduce","some","_a","slice","serialMode","uniqueKey","hash","random","substring","id","jQuery","highcharts","win.jQuery.fn.highcharts","shift","Utilities","addEvent","options","Point","series","runTrackerClick","addEventListenerPolyfill","passive","capture","eventObject","arrayMax","data","arrayMin","clamp","clearTimeout","internalClearTimeout","destroyObjectProperties","except","destroy","discardElement","element","innerHTML","erase","item","splice","extendClass","members","getMagnitude","pow","log","LN10","getNestedProperty","pathElements","pathElement","child","inArray","fromIndex","isFunction","merge","doCopy","copy","original","normalizeTickInterval","interval","multiples","magnitude","allowDecimals","hasTickAmount","retInterval","normalized","round","offset","docElem","documentElement","box","parentElement","parentNode","top","left","height","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","pad","number","padder","String","replace","join","relativeLength","base","splat","stableSort","sortFunction","sortValue","safeI","syncTimeout","delay","context","setTimeout","timeUnits","millisecond","second","minute","hour","day","week","month","year","useSerialIds","mode","wrap","method","func","proceed","outerArgs","ctx.proceed","palette","colors","backgroundColor","neutralColor100","neutralColor80","neutralColor60","neutralColor40","neutralColor20","neutralColor10","neutralColor5","neutralColor3","highlightColor100","highlightColor80","highlightColor60","highlightColor20","highlightColor10","positiveColor","negativeColor","Palette","ChartDefaults","panning","enabled","styledMode","borderRadius","colorCount","defaultSeriesType","ignoreHiddenSeries","spacing","resetZoomButton","theme","zIndex","position","align","x","y","zoomBySingleTouch","borderColor","plotBorderColor","U","Color","input","parsers","regex","parse","rgba","GlobalColor","init","Color.parse","Color.prototype.init","names","toLowerCase","stops","charAt","substr","parser","exec","Color.prototype.get","format","concat","brighten","Color.prototype.brighten","alpha","setOpacity","Color.prototype.setOpacity","tweenTo","Color.prototype.tweenTo","to","fromRgba","toRgba","hasAlpha","white","black","hasNewSafariBug","Intl","DateTimeFormat","formatRange","hasOldSafariBug","Time","variableTimezone","useUTC","Date","getTimezoneOffset","timezoneOffsetFunction","update","Time.prototype.get","unit","date","timezoneOffset","realMs","getTime","ms","setTime","set","Time.prototype.set","newOffset","Time.prototype.update","timezone","makeTime","Time.prototype.makeTime","hours","minutes","seconds","d","UTC","Time.prototype.timezoneOffsetFunction","time","moment","timestamp","tz","utcOffset","valueOf","dateFormat","Time.prototype.dateFormat","capitalize","defaultOptions","lang","invalidDate","dayOfMonth","fullYear","langWeekdays","weekdays","shortWeekdays","replacements","A","shortMonths","B","months","m","o","Y","k","I","l","M","p","P","S","getSeconds","L","toUpperCase","resolveDTLFormat","Time.prototype.resolveDTLFormat","f","main","from","getTimeTicks","Time.prototype.getTimeTicks","normalizedInterval","startOfWeek","tickPositions","higherRanks","minDate","unitRange","count","variableDayLength","minYear","minDay","minMonth","minDateDate","minHours","t","info","totalRange","color","symbols","loading","decimalPoint","numericSymbols","resetZoom","resetZoomTitle","thousandsSep","global","title","text","widthAdjust","subtitle","caption","verticalAlign","plotOptions","labels","legend","alignColumns","className","layout","labelFormatter","navigation","activeColor","inactiveColor","itemStyle","cursor","fontSize","fontWeight","textOverflow","itemHoverStyle","itemHiddenStyle","shadow","itemCheckboxStyle","squareSymbol","symbolPadding","labelStyle","textAlign","tooltip","animation","dateTimeLabelFormats","footerFormat","snap","headerFormat","pointFormat","borderWidth","whiteSpace","credits","href","defaultTime","DefaultOptions","getOptions","setOptions","Fx","NaN","dSetter","Fx.prototype.dSetter","paths","start","end","now","startSeg","endSeg","tweenSeg","j","startItem","endItem","toD","Fx.prototype.update","step","run","Fx.prototype.run","self","timer","gotoEnd","stopped","requestAnimationFrame","timers","startTime","curAnim","complete","Fx.prototype.step","duration","done","easing","initPath","Fx.prototype.initPath","fromD","prepend","other","fullLength","moveSegment","otherSegment","isArea","z","pop","append","segmentToAdd","positionFactor","lowerSegmentToAdd","startX","endX","reverse","fillSetter","Fx.prototype.fillSetter","strokeSetter","Fx.prototype.strokeSetter","animObject","defer","animationExports","animate","opt","fx","pathArray","match","getDeferredAnimation","labelAnimation","seriesAnim","renderer","forExport","anim","setAnimation","globalAnimation","parseFromString","DOMParser","AST","source","nodes","parseMarkup","filterUserAttributes","AST.filterUserAttributes","attributes","valid","allowedAttributes","allowedReferences","ref","setElementHTML","AST.setElementHTML","html","addToDOM","ast","AST.prototype.addToDOM","recurse","subtree","subParent","tagName","textNode","textContent","createTextNode","node","allowedTags","NS","namespaceURI","attributes_1","children","AST.prototype.parseMarkup","markup","hasValidDOMParser","body","appendChildNodes","addTo","astNode","parsedAttributes","attributes_2","attrib","childNodes","children_1","childNode","D","numberFormat","decimals","origDec","exponent","firstDecimals","fractionDigits","toExponential","toFixed","roundedNumber","abs","strinteger","thousands","FormatUtilities","splitter","isInside","floatRegex","decRegex","numberFormatter","index","segment","valueAndFormat","SVGElement","onEvents","symbolCustomAttribs","_defaultGetter","SVGElement.prototype._defaultGetter","_defaultSetter","SVGElement.prototype._defaultSetter","add","SVGElement.prototype.add","parentGroup","parentInverted","inverted","textStr","buildText","added","handleZ","inserted","zIndexSetter","onAdd","addClass","SVGElement.prototype.addClass","currentClassName","newClassName","afterSetters","SVGElement.prototype.afterSetters","doTransform","updateTransform","SVGElement.prototype.align","alignOptions","alignByTranslate","alignedObjects","alignTo","alignFactor","vAlignFactor","plotBox","vAlign","placed","alignAttr","alignSetter","SVGElement.prototype.alignSetter","convert","center","right","alignValue","SVGElement.prototype.animate","_this","animOptions","deferTime","hidden","msHidden","webkitHidden","applyTextOutline","SVGElement.prototype.applyTextOutline","textOutline","getContrast","fill","parts","strokeWidth","fakeTS","ySetter","xSetter","digit","Number","removeTextOutline","outline_1","stroke","clone","cloneNode","removeAttribute","br_1","insertBefore","firstChild","SVGElement.prototype.attr","continueAnimation","hasSetSymbolSize","skipAttr","setter","eachAttribute","symbolName","symbolAttr","rotation","shadows","updateShadows","clip","SVGElement.prototype.clip","clipRect","url","crisp","SVGElement.prototype.crisp","rect","normalizer","wrapper","complexColor","SVGElement.prototype.complexColor","colorOptions","colorObject","gradName","gradAttr","radAttr","gradients","stopColor","stopOpacity","radialReference","radialGradient","linearGradient","x1","y1","x2","y2","gradientUnits","getRadialAttr","gradientObject_1","defs","stopObject","gradient","colorOptions.toString","SVGElement.prototype.css","oldStyles","newStyles","svgPseudoProps","serializedCss","hasNew","textWidth","hyphenate","dashstyleSetter","SVGElement.prototype.dashstyleSetter","v","SVGElement.prototype.destroy","ownerSVGElement","parentToClean","isSVG","onclick","onmouseout","onmouseover","onmousemove","point","clipPath","clipPath_1","querySelectorAll","safeRemoveChild","destroyShadows","div","grandParent","SVGElement.prototype.destroyShadows","destroyTextPath","SVGElement.prototype.destroyTextPath","textElement","getElementsByTagName","textPathWrapper","removeChild","SVGElement.prototype.dSetter","pathToSegments","acc","seg","fadeOut","SVGElement.prototype.fadeOut","elemWrapper","hide","SVGElement.prototype.fillSetter","getBBox","SVGElement.prototype.getBBox","reload","rot","cache","cacheKeys","bBox","cacheKey","toggleTextShadowShim","display","outline","querySelector","htmlGetBBox","rad","sin","SVGElement.prototype.getStyle","hasClass","SVGElement.prototype.hasClass","SVGElement.prototype.hide","hideByTranslation","visibility","SVGElement.prototype.htmlGetBBox","SVGElement.prototype.init","invert","SVGElement.prototype.invert","on","SVGElement.prototype.on","eventType","handler","opacitySetter","SVGElement.prototype.opacitySetter","removeClass","SVGElement.prototype.removeClass","RegExp","trim","SVGElement.prototype.removeTextOutline","SVGElement.prototype.safeRemoveChild","setRadialReference","SVGElement.prototype.setRadialReference","coordinates","existingGradient","setTextPath","SVGElement.prototype.setTextPath","textPathOptions","attribsMap","textAnchor","adder","firstTime","dy","startOffset","attrs","dx","textPathElement","textPathId","Node","TEXT_NODE","setAttributeNS","SVGElement.prototype.shadow","shadowOptions","group","cutOff","oldShadowOptions","defaultShadowOptions","offsetX","offsetY","shadowElementOpacity","transform","cutHeight","show","SVGElement.prototype.show","inherit","SVGElement.prototype.strokeSetter","hasStroke","SVGElement.prototype.strokeWidth","dummy","SVGElement.prototype.symbolAttr","textSetter","SVGElement.prototype.textSetter","textPxLength","titleSetter","SVGElement.prototype.titleSetter","titleNode","toFront","SVGElement.prototype.toFront","translate","SVGElement.prototype.translate","translateX","translateY","SVGElement.prototype.updateShadows","SVGElement.prototype.updateTransform","scaleX","scaleY","matrix","rotationOriginX","rotationOriginY","visibilitySetter","SVGElement.prototype.visibilitySetter","xGetter","SVGElement.prototype.xGetter","SVGElement.prototype.zIndexSetter","svgParent","otherElement","otherZIndex","undefinedOtherZIndex","yGetter","matrixSetter","rotationOriginXSetter","rotationOriginYSetter","rotationSetter","scaleXSetter","scaleYSetter","translateXSetter","translateYSetter","verticalAlignSetter","SVGElement.prototype.verticalAlignSetter","RendererRegistry","defaultRenderer","rendererTypes","getRendererType","rendererType","registerRendererType","rendererClass","setAsDefault","Renderer","__extends","extendStatics","setPrototypeOf","__proto__","__","create","_super","SVGLabel","shape","anchorX","anchorY","useHTML","baseline","paddingLeftSetter","paddingSetter","paddingRightSetter","hasBGImage","symbolKey","emptyBBox","baselineOffset","needsBox","deferredAttr","SVGLabel.prototype.alignSetter","xSetting","anchorXSetter","SVGLabel.prototype.anchorXSetter","boxAttr","getCrispAdjust","anchorYSetter","SVGLabel.prototype.anchorYSetter","ySetting","SVGLabel.prototype.boxAttr","SVGLabel.prototype.css","textStyles_1","textProps","isWidth","updateTextPadding","updateBoxSize","SVGLabel.prototype.destroy","SVGLabel.prototype.fillSetter","SVGLabel.prototype.getBBox","paddingLeft","SVGLabel.prototype.getCrispAdjust","heightSetter","SVGLabel.prototype.heightSetter","heightSetting","SVGLabel.prototype.on","label","span","selectiveHandler","relatedTarget","Element","compareDocumentPosition","DOCUMENT_POSITION_CONTAINED_BY","SVGLabel.prototype.onAdd","SVGLabel.prototype.paddingSetter","rSetter","SVGLabel.prototype.rSetter","SVGLabel.prototype.shadow","SVGLabel.prototype.strokeSetter","SVGLabel.prototype.textSetter","SVGLabel.prototype.updateBoxSize","widthSetting","getPaddedWidth","metrics","fontMetrics","firstLineMetrics","h","symbol","crispAdjust","SVGLabel.prototype.updateTextPadding","textY","textX","hasBoxWidthChanged","widthSetter","SVGLabel.prototype.widthSetter","SVGLabel.prototype.getPaddedWidth","paddingRight","SVGLabel.prototype.xSetter","SVGLabel.prototype.ySetter","arc","rx","r","ry","proximity","innerRadius","innerR","open_1","open","cosStart","sinStart","cosEnd","sinEnd","longArc","clockwise","roundedRect","Symbols","callout","safeDistance","halfDistance","arrowLength","circle","diamond","square","triangle","triangleDown","TextBuilder","svgElement","textStyles","textLineHeight","lineHeight","ellipsis","noWrap","buildSVG","TextBuilder.prototype.buildSVG","hasMarkup","tempParent","regexMatchBreaks","textCache","actualWidth","modifyTree","modifyDOM","unescapeEntities","TextBuilder.prototype.modifyDOM","br","nextSibling","previousSibling","getLineHeight","modifyTextNode","words","hasWhiteSpace","lineNo","startAt","truncate","currentIndex","lines","precedingSiblings","line","modifyChildren","baseVal","TextBuilder.prototype.getLineHeight","fontSizeStyle","TextBuilder.prototype.modifyTree","modifyChild","nextNode","TextBuilder.prototype.truncate","getString","lengths","minIndex","maxIndex","getSubStringLength","charEnd","concatenatedEnd","getSpanWidth","ceil","TextBuilder.prototype.unescapeEntities","inputStr","escapes","hasInternalReferenceBug","SVGRenderer","container","allowHTML","imgCount","chartIndex","boxWrapper","SVGRenderer.prototype.init","getReferenceURL","desc","setSize","subPixelFix","unSubPixelFix","definition","SVGRenderer.prototype.definition","def","SVGRenderer.prototype.getReferenceURL","hitElement","elementFromPoint","location","SVGRenderer.prototype.getStyle","fontFamily","setStyle","SVGRenderer.prototype.setStyle","isHidden","SVGRenderer.prototype.isHidden","SVGRenderer.prototype.destroy","rendererDefs","SVGRenderer.prototype.createElement","SVGRenderer.prototype.getRadialAttr","cx","cy","SVGRenderer.prototype.buildText","SVGRenderer.prototype.getContrast","button","SVGRenderer.prototype.button","hoverState","pressedState","disabledState","curState","normalState","userNormalStyle","normalStyle","hoverStyle","pressedStyle","disabledStyle","setState","label.setState","state","stopPropagation","crispLine","SVGRenderer.prototype.crispLine","points","roundingFunction","SVGRenderer.prototype.path","SVGRenderer.prototype.circle","wrapper.ySetter","SVGRenderer.prototype.arc","SVGRenderer.prototype.rect","wrapper.rSetter","_key","rGetter","wrapper.rGetter","SVGRenderer.prototype.setSize","viewBox","alignElements","g","SVGRenderer.prototype.g","image","SVGRenderer.prototype.image","src","onload","preserveAspectRatio","setSVGImageSource","onDummyLoad","Image","SVGRenderer.prototype.symbol","ren","imageRegex","isImage","sym","symbolFn","imageSrc","img_1","imgwidth","imgheight","centerImage","imgSize","backgroundSize","isImg","hasLoaded","SVGRenderer.prototype.clipRect","SVGRenderer.prototype.text","wrapper.xSetter","tspans","parentVal","tspan","SVGRenderer.prototype.fontMetrics","rotCorr","SVGRenderer.prototype.rotCorr","alterY","SVGRenderer.prototype.pathToSegments","commandLength","C","Q","T","V","SVGRenderer.prototype.label","SVGRenderer.prototype.alignElements","draw","HTMLElement","compose","HTMLElement.compose","SVGElementClass","svgElementProto","htmlElementProto","getSpanCorrection","htmlCss","htmlUpdateTransform","setSpanRotation","HTMLElement.prototype.getSpanCorrection","alignCorrection","xCorr","yCorr","HTMLElement.prototype.htmlCss","isSettingWidth","overflow","HTMLElement.prototype.htmlGetBBox","offsetLeft","offsetTop","HTMLElement.prototype.htmlUpdateTransform","marginLeft","marginTop","invertChild","currentTextTransform","innerText","oldTextWidth","cTT","oldRotation","oldAlign","alignOnAdd","HTMLElement.prototype.setSpanRotation","rotationStyle","cssTransformKey","transformOrigin","HTMLRenderer","HTMLRenderer.compose","SVGRendererClass","HTMLRenderer.prototype.html","addSetters","gWrapper","styleObject","addedSetters","wrapper.textSetter","wrapper.rotationSetter","wrapper.afterSetters","wrapper.add","svgGroupWrapper","parents","htmlGroup","translateSetter","htmlGroupStyle","cls","parentGroupStyles","pointerEvents","classSetter","registerEventOptions","component","eventOptions","event","AxisDefaults","defaultXAxisOptions","alignTicks","panningEnabled","zoomEnabled","range","endOnTick","gridLineDashStyle","gridZIndex","autoRotation","autoRotationLimit","distance","indentation","reserveSpace","staggerLines","maxPadding","minorGridLineDashStyle","minorTickLength","minorTickPosition","minPadding","opposite","reversed","reversedStacks","showEmpty","showFirstLabel","showLastLabel","startOnTick","tickLength","tickPixelInterval","tickmarkPlacement","tickPosition","uniqueNames","visible","minorGridLineColor","minorGridLineWidth","minorTickColor","lineColor","lineWidth","gridLineColor","gridLineWidth","tickColor","defaultYAxisOptions","stackLabels","allowOverlap","crop","formatter","axis","total","defaultLeftAxisOptions","defaultRightAxisOptions","defaultBottomAxisOptions","defaultTopAxisOptions","F","Tick","noLabel","parameters","isNewLabel","isNew","tickmarkOffset","addLabel","Tick.prototype.addLabel","tick","categories","logarithmic","labelOptions","isFirst","isLast","animateLabels","tickInterval","tickPositionInfo","category","lin2log","dateTime","grid","unitName","dateTimeLabelFormat","defaultLabelFormatter","list","shortenLabel","tick.shortenLabel","getSlotWidth","_addedPlotLB","moveLabel","movedLabel","createLabel","Tick.prototype.createLabel","xy","labelGroup","Tick.prototype.destroy","getPosition","Tick.prototype.getPosition","horiz","tickPos","old","cHeight","oldChartHeight","chartHeight","transB","oldChartWidth","chartWidth","bottom","getLabelPosition","Tick.prototype.getLabelPosition","transA","isLinked","linkedParent","tickRotCorr","labelOffsetCorrection","reserveSpaceDefault","labelOffset","labelAlign","yOffset","side","getLabelSize","Tick.prototype.getLabelSize","getMarkPath","Tick.prototype.getMarkPath","tickWidth","handleOverflow","Tick.prototype.handleOverflow","pxPos","leftBound","labelLeft","rightBound","labelRight","isRadial","factor","labelWidth","slotWidth","modifiedSlotWidth","goRight","rightPos","Tick.prototype.moveLabel","moved","ticks","currentTick","labelPos","xPos","yPos","render","Tick.prototype.render","reverseCrisp","labelOpacity","newOpacity","isActive","renderGridLine","renderMark","renderLabel","Tick.prototype.renderGridLine","gridLine","dashStyle","dashstyle","gridGroup","gridLinePath","getPlotLinePath","force","Tick.prototype.renderMark","tickSize","isXAxis","mark","isNewMark","axisGroup","Tick.prototype.renderLabel","replaceMovedLabel","Tick.prototype.replaceMovedLabel","isDirty","Axis","userOptions","translationSlope","tickAmount","positiveValuesOnly","pointRangePadding","pointRange","plotLinesAndBandsGroups","plotLinesAndBands","paddedTicks","overlap","minPixelPadding","minorTicks","minorTickInterval","maxLabelLength","labelEdge","hasVisibleSeries","hasNames","coll","closestPointRange","alternateBands","Axis.prototype.init","isX","isZAxis","labelsOptions","linkedTo","minRange","userMinRange","maxZoom","crosshair","crosshairs","axes","xAxis","labelRotation","Axis.prototype.setOptions","Axis.prototype.defaultLabelFormatter","numSymMagnitude","numericSymbolMagnitude","numericSymbolDetector","multi","getSeriesExtremes","Axis.prototype.getSeriesExtremes","xExtremes","dataMin","dataMax","threshold","softThreshold","stacking","buildStacks","seriesOptions","xData","validatePositiveValue","getXExtremes","seriesDataMin","seriesDataMax","dataExtremes","applyExtremes","Axis.prototype.translate","backwards","cvsCoord","handleLog","pointPlacement","localMin","doPostTranslate","isOrdinal","brokenAxis","hasBreaks","lin2val","sign","cvsOffset","localA","sector","returnValue","val2lin","toPixels","Axis.prototype.toPixels","paneCoordinates","toValue","Axis.prototype.toValue","pixel","Axis.prototype.getPlotLinePath","between","skip","axisLeft","axisTop","cWidth","translatedValue","evt","acrossPanes","getLinearTickPositions","Axis.prototype.getLinearTickPositions","roundedMin","roundedMax","precision","single","lastPos","getMinorTickInterval","Axis.prototype.getMinorTickInterval","getMinorTickPositions","Axis.prototype.getMinorTickPositions","minorTickPositions","logarithmic_1","_pos","getLogTickPositions","normalizeTimeTickInterval","trimTicks","adjustForMinRange","Axis.prototype.adjustForMinRange","closestDataRange","loopLength","xIncrement","spaceAvailable","zoomOffset","minArgs","log2lin","maxArgs","getClosest","Axis.prototype.getClosest","seriesClosest","noSharedTooltip","nameToX","Axis.prototype.nameToX","explicitCategories","nameX","requireSorting","autoIncrement","updateNames","Axis.prototype.updateNames","isDirtyData","processData","generatePoints","setAxisTranslation","Axis.prototype.setAxisTranslation","hasCategories","axisPointRange","minPointOffset","seriesPointRange","isPointPlacementAxis","is","ordinalCorrection","ordinal","slope","staticScale","minFromRange","Axis.prototype.minFromRange","setTickInterval","Axis.prototype.setTickInterval","secondPass","tickPixelIntervalOption","tickIntervalOption","getTickAmount","hardMin","userMin","hardMax","userMax","linkedParentExtremes","getExtremes","thresholdMin","thresholdMax","beforePadding","usePercentage","softMin","softMax","ceiling","polar","minTickInterval","unsquish","setTickPositions","Axis.prototype.setTickPositions","tickPositionsOption","minorTickIntervalOption","hasVerticalPanning","isColorAxis","tickPositioner","positions","units","adjustTickAmount","Axis.prototype.trimTicks","alignToOthers","Axis.prototype.alignToOthers","others","hasOther","otherOptions","pane","Axis.prototype.getTickAmount","finalTickAmt","Axis.prototype.adjustTickAmount","axisOptions","currentTickAmount","hasData","setScale","Axis.prototype.setScale","isXAxisDirty","setAxisSize","isDirtyAxisLength","forceRedraw","resetStacks","cleanStacks","panningState","setExtremes","Axis.prototype.setExtremes","newMin","newMax","redraw","serie","kdTree","eventArgs","zoom","Axis.prototype.zoom","allowZoomOutside","displayBtn","trigger","zoomed","Axis.prototype.setAxisSize","offsets","plotWidth","plotHeight","plotTop","plotLeft","Axis.prototype.getExtremes","getThreshold","Axis.prototype.getThreshold","realMin","realMax","autoLabelAlign","Axis.prototype.autoLabelAlign","angle","Axis.prototype.tickSize","prefix","labelMetrics","Axis.prototype.labelMetrics","Axis.prototype.unsquish","slotSize","rotationOption","getStep","spaceNeeded","newTickInterval","bestScore","MAX_VALUE","score","Axis.prototype.getSlotWidth","slotCount","cssWidth","renderUnsquish","Axis.prototype.renderUnsquish","labelStyleOptions","innerWidth","textOverflowOption","commonWidth","commonTextOverflow","specificTextOverflow","widthOption","Axis.prototype.hasData","addTitle","Axis.prototype.addTitle","axisTitleOptions","axisTitle","low","middle","high","generateTick","Axis.prototype.generateTick","getOffset","Axis.prototype.getOffset","invertedSide","axisOffset","clipOffset","directionFactor","axisParent","showAxis","titleOffset","titleMargin","createGroup","suffix","titleOffsetOption","renderLine","lineHeightCorrection","labelOffsetPadded","axisTitleMargin","getMaxLabelDimensions","maxLabelDimensions","axisLine","getLinePath","Axis.prototype.getLinePath","lineLeft","lineTop","Axis.prototype.renderLine","getTitlePosition","Axis.prototype.getTitlePosition","axisLength","xOption","yOption","textHeightOvershoot","alongAxis","offAxis","titlePosition","renderMinorTick","Axis.prototype.renderMinorTick","slideIn","renderTick","Axis.prototype.renderTick","isColumn","Axis.prototype.render","stackLabelOptions","alternateGridColor","slideInTicks_1","hasRendered","PlotLineOrBand","plotLines","plotBands","plotLineOptions","addPlotBandOrLine","forDestruction","destroyInactiveItems","isPlaced","titleXy","renderStackTotals","Axis.prototype.redraw","plotLine","getKeepProps","Axis.prototype.getKeepProps","keepProps","Axis.prototype.destroy","keepEvents","plotGroup","drawCrosshair","Axis.prototype.drawCrosshair","graphic","cross","crosshairPos","plotX","plotY","chartX","chartY","crossOptions","stackY","isCrosshair","hideCrosshair","categorized","Axis.prototype.hideCrosshair","Axis.prototype.hasVerticalPanning","panningOptions","Axis.prototype.validatePositiveValue","Axis.prototype.update","isDirtyBox","remove","Axis.prototype.remove","axisSeries","setTitle","Axis.prototype.setTitle","titleOptions","setCategories","Axis.prototype.setCategories","DateTimeAxisAdditions","DateTimeAxisAdditions.prototype.normalizeTimeTickInterval","unitsOption","DateTimeAxis","DateTimeAxis.compose","AxisClass","axisProto.getTimeTicks","AdditionsClass","LogarithmicAxisAdditions","LogarithmicAxisAdditions.prototype.getLogTickPositions","minor","minorAutoInterval","break2","intermediate","filteredTickIntervalOption","totalPixelLength","LogarithmicAxisAdditions.prototype.lin2log","LogarithmicAxisAdditions.prototype.log2lin","LogarithmicAxis","LogarithmicAxis.compose","axis.lin2val","axis.val2lin","PlotLineOrBand.prototype.render","optionsLabel","isBand","isLine","svgElem","groupAttribs","groupName","getPlotBandPath","eventsAdded","isFlat","PlotLineOrBand.prototype.renderLabel","labelText","getLabelText","xBounds","yBounds","PlotLineOrBand.prototype.getLabelText","PlotLineOrBand.prototype.destroy","toPath","plus","outside","pathStart","pathEnd","toPathStart","toPathEnd","addPlotBand","addPlotLine","updatedOptions","removePlotBandOrLine","i_1","removePlotBand","removePlotLine","Tooltip","isSticky","applyFilter","Tooltip.prototype.applyFilter","stdDeviation","bodyFormatter","Tooltip.prototype.bodyFormatter","items","tooltipOptions","formatPrefix","tooltipFormatter","cleanSplit","Tooltip.prototype.cleanSplit","tt","defaultFormatter","Tooltip.prototype.defaultFormatter","tooltipFooterHeaderFormatter","Tooltip.prototype.destroy","hideTimer","tooltipTimeout","getAnchor","Tooltip.prototype.getAnchor","mouseEvent","pointer","yAxis","followPointer","normalize","tooltipPos","plotLow","plotHigh","shared","getDateFormat","Tooltip.prototype.getDateFormat","dateStr","strpos","lastN","blank","getLabel","Tooltip.prototype.getLabel","stickOnContact","onMouseEnter","inContact","onMouseLeave","hoverSeries","onMouseOut","chartStyle","label_1","xSetter_1","ySetter_1","label_1.xSetter","label_1.ySetter","Tooltip.prototype.getPosition","boxWidth","boxHeight","swapped","outerWidth","clientWidth","outerHeight","clientHeight","chartPosition","getChartPosition","buildDimensionArray","dim","first","preferFarSide","ttBelow","negative","firstDimension","outerSize","innerSize","scaledInnerSize","scaledDist","scaleDiff","roomLeft","roomRight","alignedLeft","alignedRight","secondDimension","retVal","swap","temp","getXDateFormat","Tooltip.prototype.getXDateFormat","xDateFormat","Tooltip.prototype.hide","hideDelay","Tooltip.prototype.init","scrollablePixelsX","scrollablePixelsY","isStickyOnContact","Tooltip.prototype.isStickyOnContact","move","Tooltip.prototype.move","skipAnchor","drawTracker","refresh","Tooltip.prototype.refresh","pointOrPoints","textConfig","pointConfig","anchor","getLabelConfig","applyInactiveState","currentSeries","renderSplit","checkX","checkY","isDirectTouch","shouldShowTooltip","spacingBox","colorIndex","updatePosition","Tooltip.prototype.renderSplit","defaultPositioner","isHeader","headerTop","adjustedPlotHeight","bounds","chartLeft","distributionBoxTop","_b","_c","scrollingContainer","_d","positioner","tooltipLabel","_e","chartTop","headerHeight","boxes","colorClass","ignoreX","size","boxPosition","rank","boxStart","distribute","_f","Tooltip.prototype.drawTracker","tracker","hoverPoints","hoverPoint","anchorPos","labelBBox","styledModeFormat","Tooltip.prototype.styledModeFormat","formatString","Tooltip.prototype.tooltipFooterHeaderFormatter","labelConfig","isFooter","footOrHead","isDateTime","tooltipDateKeys","Tooltip.prototype.update","Tooltip.prototype.updatePosition","Pointer","lastValidTouch","pinchDown","runChartClick","eventsToUnbind","hasDragged","Pointer.prototype.applyInactiveState","activeSeries","linkedSeries","navigatorSeries","inactiveSeries","inactiveOtherPoints","setAllPointsToState","Pointer.prototype.destroy","unbind","unbindDocumentMouseUp","unbindDocumentTouchEnd","clearInterval","drag","Pointer.prototype.drag","chartOptions","zoomHor","zoomVert","mouseDownX","mouseDownY","panKey","selectionMarker","touch","sqrt","clickedInside","isInsidePlot","visiblePlotOnly","hasCartesianSeries","zoomX","zoomY","selectionMarkerFill","pan","dragStart","Pointer.prototype.dragStart","mouseIsDown","cancelClick","drop","Pointer.prototype.drop","hasPinched","selectionData_1","originalEvent","selectionBox","selectionLeft_1","selectionTop_1","selectionWidth_1","selectionHeight_1","runZoom_1","selectionMin","selectionMax","scaleGroups","_cursor","findNearestKDPoint","Pointer.prototype.findNearestKDPoint","closest","compareX","findNearestPointBy","searchPoint","isCloserX","p1","distX","p2","isCloser","dist","isAbove","getChartCoordinatesFromPoint","Pointer.prototype.getChartCoordinatesFromPoint","shapeArgs","clientX","isNode","Pointer.prototype.getChartPosition","getCoordinates","Pointer.prototype.getCoordinates","getHoverData","Pointer.prototype.getHoverData","existingHoverPoint","existingHoverSeries","useExisting","searchSeries","stickyTracking","directTouch","enableMouseTracking","isNull","isBoosting","getPoint","getPointFromEvent","Pointer.prototype.getPointFromEvent","onTrackerMouseOut","Pointer.prototype.onTrackerMouseOut","toElement","inClass","Pointer.prototype.inClass","elemClassName","Pointer.prototype.init","click","followTouchMove","setDOMEvents","Pointer.prototype.normalize","touches","ePos","changedTouches","pageX","pageY","onContainerClick","Pointer.prototype.onContainerClick","pEvt","firePointEvent","onContainerMouseDown","Pointer.prototype.onContainerMouseDown","isPrimaryButton","buttons","onContainerMouseMove","zoomOption","onContainerMouseLeave","Pointer.prototype.onContainerMouseLeave","hoverChartIndex","reset","onContainerMouseEnter","Pointer.prototype.onContainerMouseEnter","Pointer.prototype.onContainerMouseMove","setHoverChartIndex","touchSelect","openMenu","runPointActions","onDocumentTouchEnd","Pointer.prototype.onDocumentTouchEnd","hoverChart","onContainerTouchMove","Pointer.prototype.onContainerTouchMove","onContainerTouchStart","Pointer.prototype.onContainerTouchStart","onDocumentMouseMove","Pointer.prototype.onDocumentMouseMove","onDocumentMouseUp","Pointer.prototype.onDocumentMouseUp","pinch","Pointer.prototype.pinch","touchesLength","hasZoom","fireClickEvent","initiated","cancelable","absMax","absMin","res","pinchTranslate","Pointer.prototype.pinchTranslate","pinchTranslateDirection","Pointer.prototype.pinchTranslateDirection","forcedScale","XY","sChartXY","wh","plotLeftTop","singleTouch","touch0Start","touch1Start","touch1Now","scale","touch0Now","clipXY","selectionWH","selectionXY","outOfBounds","transformScale","scaleKey","Pointer.prototype.reset","allowMove","tooltipPoints","isCartesian","unDocMouseMove","hoverX","Pointer.prototype.runPointActions","hoverData","useSharedTooltip","onMouseOver","ownerDocument","drawAxisCrosshair","Pointer.prototype.scaleGroups","seriesAttribs","getPlotBox","markerGroup","dataLabelsGroup","clipBox","Pointer.prototype.setDOMEvents","ownerDoc","onmousedown","bind","renderTo","Pointer.prototype.setHoverChartIndex","Pointer.prototype.touch","hasMoved","Pointer.prototype.touchSelect","Pointer.prototype.zoomOption","zoomType","pinchType","getWebkitTouches","fake","fake.item","translateMSPointer","wktype","pointerType","MSPOINTER_TYPE_TOUCH","currentTarget","hasPointerEvent","PointerEvent","MSPointer","isRequired","MSPointer.isRequired","MSPointerEvent","batchMSEvents","MSPointer.prototype.batchMSEvents","onContainerPointerDown","onContainerPointerMove","onDocumentPointerUp","MSPointer.prototype.destroy","MSPointer.prototype.init","MSPointer.prototype.onContainerPointerDown","pointerId","MSPointer.prototype.onContainerPointerMove","MSPointer.prototype.onDocumentPointerUp","MSPointer.prototype.setDOMEvents","percentage","selected","animateBeforeDestroy","Point.prototype.animateBeforeDestroy","animateParams","startXPos","isDataLabel","graphicalProps","getGraphicalProps","singular","startYPos","plural","applyOptions","Point.prototype.applyOptions","pointValKey","optionsToObject","dataLabels","isValid","Point.prototype.destroy","destroyPoint","dataLabel","destroyElements","dataSorting","legendItem","destroyItem","pointCount","Point.prototype.destroyElements","kinds","props","Point.prototype.firePointEvent","importEvents","allowPointSelect","select","ctrlKey","metaKey","shiftKey","getClassName","Point.prototype.getClassName","zone","Point.prototype.getGraphicalProps","Point.prototype.getLabelConfig","stackTotal","Point.prototype.getNestedProperty","getZone","Point.prototype.getZone","zones","zoneAxis","nonZonedColor","hasNewShapeType","Point.prototype.hasNewShapeType","shapeType","Point.prototype.init","resolveColor","Point.prototype.optionsToObject","pointArrayMap","valueCount","firstItemType","setNestedProperty","_hasPointLabels","marker","_hasPointMarkers","Point.prototype.resolveColor","colorByPoint","colorCounter","Point.prototype.setNestedProperty","nestedKeys","Point.prototype.tooltipFormatter","seriesTooltipOptions","valueDecimals","valuePrefix","valueSuffix","Point.prototype.update","runEvent","hasDummyGraphic","shouldDestroyGraphic","connector","updateParallelArrays","fixedBox","legendType","isDirtyLegend","Point.prototype.remove","removePoint","Point.prototype.select","accumulate","selectedStaging","getSelectedPoints","loopPoint","loopSeries","Point.prototype.onMouseOver","Point.prototype.onMouseOut","Point.prototype.importEvents","hasImportedEvents","point_1","Point.prototype.setState","previousState","stateOptions","states","markerOptions","normalDisabled","markerStateOptions","stateDisabled","stateMarkerGraphic","pointMarker","halo","markerAttribs","hasMarkers","pointAttribs","pointAttribsAnimation","newSymbol","currentSymbol","haloOptions","markerVisibility","markerGraphic","isCluster","haloPath","Point.prototype.haloPath","Legend","allItems","contentGroup","maxLegendWidth","maxItemWidth","legendWidth","legendHeight","lastLineHeight","lastItemY","itemY","itemX","itemMarginTop","itemMarginBottom","itemHeight","initialItemY","pages","proximate","scrollGroup","totalItemWidth","titleHeight","symbolWidth","symbolHeight","Legend.prototype.init","positionCheckboxes","unchartrender","proximatePositions","positionItems","Legend.prototype.setOptions","Legend.prototype.update","colorizeItem","Legend.prototype.colorizeItem","legendGroup","legendLine","legendSymbol","hiddenColor","textColor","symbolColor","isMarker","Legend.prototype.positionItems","positionItem","isResizing","Legend.prototype.positionItem","ltr","rtl","legendItemPos","_legendItemPos","checkbox","Legend.prototype.destroyItem","Legend.prototype.destroy","destroyItems","getAllItems","Legend.prototype.positionCheckboxes","clipHeight","scrollOffset","checkboxOffset","renderTitle","Legend.prototype.renderTitle","setText","Legend.prototype.setText","labelFormat","renderItem","Legend.prototype.renderItem","itemDistance","li","isSeries","drawLegendSymbol","showCheckbox","createCheckboxForItem","itemExtraWidth","itemClassName","setItemEvents","itemWidth","legendItemWidth","legendItemHeight","layoutItem","Legend.prototype.layoutItem","horizontal","Legend.prototype.getAllItems","showInLegend","legendItems","getAlignment","Legend.prototype.getAlignment","floating","adjustMargins","Legend.prototype.adjustMargins","alignment","alignments","Legend.prototype.proximatePositions","alignLeft","lastPoint","useFirstPoint","Legend.prototype.render","allowedWidth","legendIndex","Legend.prototype.align","Legend.prototype.handleOverflow","optionsY","spaceHeight","maxHeight","navOptions","arrowSize","nav","lastY","clipToHeight","addTracker","currentPage","fullHeight","pageIx","up","scroll","pager","down","Legend.prototype.scroll","scrollBy","pageCount","upTracker","downTracker","Legend.prototype.setItemEvents","isPoint","activeClass","inactiveItem","fnLegendItemClick","setVisible","browserEvent","strLegendItemClick","Legend.prototype.createCheckboxForItem","checked","defaultChecked","runPositionItem","bubbleLegend","SeriesRegistry","registerSeriesType","seriesType","seriesClass","defaultPlotOptions","pointClass","getSeries","optionsChart","SeriesClass","missingModuleFor","seriesProto","pointProto","Foundation","Chart","labelCollectors","sharedClips","symbolCounter","getArgs","Chart.chart","Chart.prototype.getArgs","Chart.prototype.init","userPlotOptions","typeOptions","showAxes","firstRender","initSeries","Chart.prototype.initSeries","setSeriesData","Chart.prototype.setSeriesData","getSeriesOrderByLinks","enabledDataSorting","setData","Chart.prototype.getSeriesOrderByLinks","orderSeries","Chart.prototype.orderSeries","iEnd","getName","Chart.prototype.isInsidePlot","scrollablePlotBox","ignoreY","Chart.prototype.redraw","colorAxis","legendUserOptions","isHiddenChart","afterRedraw","redrawLegend","setResponsive","temporaryDisplay","layOutTitles","centerInCategory","hasStackedSeries","hasDirtyStacks","updateTotals","getStacks","getMargins","extKey","drawChartBox","Chart.prototype.get","itemById","getAxes","Chart.prototype.getAxes","xAxisOptions","yAxisOptions","optionsArray","Chart.prototype.getSelectedPoints","getPointsCollection","getSelectedSeries","Chart.prototype.getSelectedSeries","Chart.prototype.setTitle","subtitleOptions","applyDescription","Chart.prototype.applyDescription","explicitOptions","isStock","elem.update","updateOptions","Chart.prototype.layOutTitles","titleSize","requiresDirtyBox","getChartSize","Chart.prototype.getChartSize","heightOption","containerWidth","containerHeight","Chart.prototype.temporaryDisplay","revert","hcOrigStyle","hcOrigDetached","contains","hcOricDetached","tempStyle","setProperty","setClassName","Chart.prototype.setClassName","getContainer","Chart.prototype.getContainer","containerId","containerStyle","getElementById","oldChartIndex","indexAttrName","skipClone","userSelect","exporting","Chart.prototype.getMargins","skipAxes","resetMargins","marginBottom","getAxisMargins","Chart.prototype.getAxisMargins","setChartSize","reflow","Chart.prototype.reflow","hasUserSize","isPrinting","reflowTimeout","setReflow","Chart.prototype.setReflow","unbindReflow","Chart.prototype.setSize","Chart.prototype.setChartSize","marginRight","plotSizeX","plotSizeY","plotBorderWidth","clipX","clipY","Chart.prototype.resetMargins","splashArrays","values","sideName","Chart.prototype.drawChartBox","plotBGImage","chartBackgroundColor","plotBackgroundColor","plotBackgroundImage","chartBackground","plotBackground","plotBorder","mgn","verb","chartBorderWidth","bgAttr","plotShadow","propFromSeries","Chart.prototype.propFromSeries","klass","linkSeries","Chart.prototype.linkSeries","chartSeries","setDataSortingOptions","renderSeries","Chart.prototype.renderSeries","renderLabels","Chart.prototype.renderLabels","Chart.prototype.render","renderAxes","correction","tempWidth","tempHeight","redoHorizontal","redoVertical","seriesGroup","addCredits","Chart.prototype.addCredits","creds","mapCredits","this.credits.update","Chart.prototype.destroy","scroller","Chart.prototype.firstRender","isReadyToRender","serieOptions","Chart.prototype.onload","callbacks","addSeries","Chart.prototype.addSeries","addAxis","Chart.prototype.addAxis","createAxis","addColorAxis","Chart.prototype.addColorAxis","Chart.prototype.createAxis","ColorAxis","bindAxes","showLoading","Chart.prototype.showLoading","loadingOptions","setLoadingSize","loadingDiv","loadingSpan","loadingShown","showDuration","hideLoading","Chart.prototype.hideLoading","hideDuration","Chart.prototype.update","oneToOne","adders","isResponsiveOptions","itemsForRemoval","updateAllSeries","runSetSize","updateAllAxes","propsRequireUpdateSeries","propsRequireDirtyBox","propsRequireReflow","collectionsWithUpdate","indexMap","isInternal","newOptions","hasId","touched","collectionsWithInit","newWidth","newHeight","setSubtitle","Chart.prototype.setSubtitle","setCaption","Chart.prototype.setCaption","showResetZoom","Chart.prototype.showResetZoom","zoomOut","btnOptions","relativeTo","hover","Chart.prototype.zoomOut","resetSelection","Chart.prototype.zoom","mouseDownPos","displayButton","hasZoomed","axisData","axisStartPos","axisEndPos","isWithinPane","Chart.prototype.pan","hasMapNavigation","mapNavigation","doRedraw","nextMousePos","mousePos","mouseDown","startPos","halfPointRange","pointRangeDirection","extremes","panMin","panMax","flipped","processedData","getProcessedData","yData","startMin","startMax","paddedMin","paddedMax","spill","LegendSymbolMixin","drawRectangle","symbolRadius","drawLineMarker","generalRadius","legendItemGroup","verticalCenter","radius","Series","processedYData","processedXData","_i","Series.prototype.init","getColor","getSymbol","parallelArrays","lastSeries","insert","Series.prototype.is","Series.prototype.insert","collection","indexOption","Series.prototype.bindAxes","axisTypes","AXIS","optionalAxis","Series.prototype.updateParallelArrays","toYData","Series.prototype.hasData","Series.prototype.autoIncrement","pointInterval","pointIntervalUnit","pointStart","Series.prototype.setDataSortingOptions","sorted","allowDG","Series.prototype.setOptions","itemOptions","seriesUserOptions","negativeFillColor","fillColor","Series.prototype.getName","getCyclic","Series.prototype.getCyclic","defaults","indexName","counterName","setting","Series.prototype.getColor","Series.prototype.getPointsCollection","hasGroupedData","Series.prototype.getSymbol","findPointIndex","Series.prototype.findPointIndex","optionsObject","oldData","matchedById","matchingPoint","matchKey","matchByName","oldPoint","pointIndex","cropped","cropStart","updateData","Series.prototype.updateData","pointsToAdd","hasUpdatedByKey","lastIndex","equalLength","succeeded","pointOptions","hasDerivedData","addPoint","Series.prototype.setData","updatePoints","oldDataLength","dataLength","firstPoint","turboThreshold","indexOfX","indexOfY","updatedData","sortData","isSeriesBoosting","getFirstValidPoint","pt","Series.prototype.sortData","sortKey","getPointOptionsObject","sortedData","aValue","bValue","seriesData","Series.prototype.getProcessedData","forceExtremesFromAll","cropThreshold","getExtremesFromAll","isLog","throwOnUnsorted","forceCrop","croppedData","cropData","Series.prototype.processData","basePointRange","Series.prototype.cropData","cropShoulder","cropEnd","Series.prototype.generatePoints","dataOptions","PointClass","processedDataLength","groupCropStartIndex","dataGrouping","groupAll","dataGroup","groupMap","Series.prototype.getXExtremes","Series.prototype.getExtremes","activeYData","activeCounter","xMin","xMax","shoulder","stackedYData","yDataLength","validValue","withinRange","Series.prototype.applyExtremes","Series.prototype.getFirstValidPoint","Series.prototype.translate","hasModifyValue","modifyValue","pointPlacementToXValue","dynamicallyPlaced","stackThreshold","startFromThreshold","closestPointRangePx","xValue","yValue","yBottom","stack","stacks","negStacks","stackKey","pointStack","stackValues","stackIndicator","getStackIndicator","irregularWidths","setOffset","pointXOffset","barW","translated","isPointInside","lastPlotX","getValidPoints","Series.prototype.getValidPoints","insideOnly","allowNull","getClipBox","Series.prototype.getClipBox","finalBox","scrollablePlotAreaOptions","scrollablePlotArea","scrollPositionX","getSharedClipKey","Series.prototype.getSharedClipKey","sharedClipKey","setClip","Series.prototype.setClip","seriesClipBox","markerClipRect","Series.prototype.animate","afterAnimate","Series.prototype.afterAnimate","finishedAnimating","drawPoints","Series.prototype.drawPoints","seriesMarkerOptions","specialGroup","globallyEnabled","enabledThreshold","pointMarkerOptions","hasPointMarker","hasImage","Series.prototype.markerAttribs","seriesStateOptions","pointStateOptions","radiusPlus","Series.prototype.pointAttribs","pointColorOption","pointColor","zoneColor","lineWidthPlus","Series.prototype.destroy","keepEventsForUpdate","issue134","removeEvents","clips","animationTimeout","survive","applyZones","Series.prototype.applyZones","translatedFrom","translatedTo","clipAttr","graph","area","chartSizeMax","pxRange","pxPosMin","pxPosMax","ignoreZones","zoneArea","zoneGraph","showLine","isVML","resetZones","invertGroups","Series.prototype.invertGroups","setInvert","isRadialSeries","Series.prototype.plotGroup","Series.prototype.getPlotBox","Series.prototype.removeEvents","Series.prototype.render","animDuration","chartSeriesGroup","invertible","drawGraph","drawDataLabels","redrawPoints","Series.prototype.redraw","wasDirty","Series.prototype.searchPoint","searchKDTree","buildKDTree","Series.prototype.buildKDTree","_kdtree","depth","dimensions","median","kdAxisArray","buildingKdTree","startRecursive","kdNow","Series.prototype.searchKDTree","_search","search","tree","kdX","kdY","tdist","sideA","sideB","nPoint1","kdComparer","nPoint2","kdDimensions","Series.prototype.pointPlacementToXValue","Series.prototype.isPointInside","Series.prototype.drawTracker","trackByArea","trackerPath","areaPath","graphPath","TRACKER_FILL","Series.prototype.addPoint","withEvent","isInTheMiddle","Series.prototype.removePoint","Series.prototype.remove","Series.prototype.update","oldOptions","initialType","newType","keepPoints","hasOptionChanged","initialSeriesProto","preserve","groups","casting","ownEvents","setName","Series.prototype.setName","Series.prototype.hasOptionChanged","optionName","option","oldOption","Series.prototype.onMouseOver","mouseOver","Series.prototype.onMouseOut","mouseOut","Series.prototype.setState","stateAnimation","labelBySeries","Series.prototype.setAllPointsToState","Series.prototype.setVisible","vis","oldVisibility","showOrHide","otherSeries","Series.prototype.show","Series.prototype.hide","Series.prototype.select","Series.prototype.shouldShowTooltip","normal","inactive","scrollableMinWidth","minWidth","scrollableMinHeight","minHeight","corrections","axis.getPlotLinePath","marginName","setUpScrolling","applyFixed","fixedDiv","Chart.prototype.setUpScrolling","WebkitOverflowScrolling","overflowX","overflowY","scrollingParent","innerContainer","moveFixedElements","Chart.prototype.moveFixedElements","fixedRenderer","fixedSelectors","axisClass","Chart.prototype.applyFixed","scrollableOptions","scrollableMask","scrollableDirty","scrollableWidth","scrollableHeight","scrollPositionY","maskTop","maskLeft","maskBottom","maskRight","maskPlotRight","maskPlotBottom","redrawTrigger","StackingAxisAdditions","oldStacks","stacksTouched","StackingAxisAdditions.prototype.buildStacks","actualSeries","setStackedPoints","setGroupedPoints","modifyStacks","StackingAxisAdditions.prototype.cleanStacks","cumulative","StackingAxisAdditions.prototype.resetStacks","StackingAxisAdditions.prototype.renderStackTotals","animationConfig","stackTotalGroup","StackingAxis","StackingAxis.compose","onInit","onDestroy","StackingAxis.onDestroy","StackingAxis.onInit","StackItem","isNegative","stackOption","hasValidPoints","rightCliff","leftCliff","StackItem.prototype.destroy","StackItem.prototype.render","formatOption","labelrank","StackItem.prototype.setOffset","xOffset","xWidth","boxBottom","boxTop","defaultX","stackItem","yZero","stackBox","getStackBox","isJustify","boxOffsetX","boxOffsetY","justifyDataLabel","StackItem.prototype.getStackBox","axisPos","neg","Chart.prototype.getStacks","Series.prototype.setGroupedPoints","Series.prototype.setStackedPoints","stackingParam","negKey","pointKey","singleStacks","Series.prototype.modifyStacks","pointExtremes","percentStacker","Series.prototype.percentStacker","totalFactor","Series.prototype.getStackIndicator","LineSeries","LineSeries.prototype.drawGraph","gappedPath","getGraphPath","getZonesGraphs","graphKey","preventGraphAnimation","xMap","fillGraph","linecap","LineSeries.prototype.getGraphPath","nullsAsZeroes","connectCliffs","gap","connectNulls","pathToPoint","getPointSpline","LineSeries.prototype.getZonesGraphs","propset","AreaSeries","AreaSeries.prototype.drawGraph","areaKey","fillOpacity","shiftUnit","AreaSeries.prototype.getGraphPath","topPath","bottomPoints","graphPoints","seriesIndex","translatedThreshold","addDummyPoints","otherI","stackedValues","nullVal","cliffVal","isCliff","doCurve","getStackPoints","leftNull","rightNull","rectPlotX","bottomPath","firstBottomPoint","AreaSeries.prototype.getStackPoints","pointMap","yAxisSeries","seriesLength","upOrDown","stackX","visibleSeries_1","idx","stackPoint","direction","nullName","cliff","otherStack","si","cliffName","SplineSeries","SplineSeries.prototype.getPointSpline","nextPoint","nextX","nextY","leftContX","smoothing","denom","leftContY","rightContX","rightContY","areaProto","AreaSplineSeries","ColumnSeries","ColumnSeries.prototype.animate","translateProp","translateStart","ColumnSeries.prototype.init","getColumnMetrics","ColumnSeries.prototype.getColumnMetrics","reverseStacks","stackGroups","columnCount","grouping","otherYAxis","columnIndex","categoryWidth","groupPadding","pointOffsetWidth","pointWidth","maxPointWidth","pointPadding","columnMetrics","paddedWidth","crispCol","ColumnSeries.prototype.crispCol","xCrisp","yCrisp","fromTop","adjustForMissingColumns","ColumnSeries.prototype.adjustForMissingColumns","indexInCategory_1","totalInCategory_1","pointValues","ColumnSeries.prototype.translate","dense","minPointLength","seriesPointWidth","seriesBarW","seriesXOffset","barX","barY","barH","ColumnSeries.prototype.drawGraph","ColumnSeries.prototype.pointAttribs","p2o","pointAttrToOptions","strokeOption","strokeWidthOption","brightness","ColumnSeries.prototype.drawPoints","animationLimit","hasGraphic","allowShadow","ColumnSeries.prototype.drawTracker","_hasTracking","trackerGroups","ColumnSeries.prototype.remove","BarSeries","ScatterSeries","applyJitter","ScatterSeries.prototype.applyJitter","jitter","plotProp","translatedJitter","rand","ScatterSeries.prototype.drawGraph","takeOrdinalPosition","CenteredSeriesMixin","getCenter","slicingRoom","slicedOffset","centerOption","smallestSize","angular","handleSlicingRoom","getStartAndEndRadians","startAngle","endAngle","PiePoint","labelDistance","getConnectorPath","PiePoint.prototype.getConnectorPath","labelPosition","connectorShape","predefinedShapes","connectorShapes","final","connectorPosition","getTranslate","PiePoint.prototype.getTranslate","sliced","slicedTranslation","PiePoint.prototype.haloPath","PiePoint.prototype.init","toggleSlice","PiePoint.prototype.isValid","PiePoint.prototype.setVisible","ignoreHiddenPoint","PiePoint.prototype.slice","shadowGroup","fixedOffset","breakAt","touchingSliceAt","softConnector","lineSegment","straight","crookedLine","pieCenterX","crookDistance","crookX","segmentWithCrook","useCrook","PieSeries","maxLabelDistance","PieSeries.prototype.animate","startAngleRad","startR","drawEmpty","PieSeries.prototype.drawEmpty","endAngleRad","centerX","centerY","PieSeries.prototype.drawPoints","delayedRendering","PieSeries.prototype.generatePoints","getX","PieSeries.prototype.getX","radii","asin","PieSeries.prototype.hasData","PieSeries.prototype.redrawPoints","groupTranslation","pointAttr","animateTo","sortByAngle","PieSeries.prototype.sortByAngle","PieSeries.prototype.translate","connectorOffset","radians","circ","radiusX","radiusY","half","finalConnectorOffset","natural","PieSeries.prototype.updateTotals","connectorPadding","H.distribute","maxDistance","sortByTarget","overlapping","origBoxes","restBoxes","reducedLen","targets","posInCompositeBox","Series.prototype.drawDataLabels","op","operator","property","mergeArrays","one","two","seriesDlOptions","dataLabelAnim","dlOptions","labelEnabled","dataLabelOnNull","connectors","contrastColor","inside","textPath","getDataLabelPath","dataLabelPath","alignDataLabel","Series.prototype.alignDataLabel","dlBox","justify","forceDL","setStartPos","setDataLabelStartPos","normRotation","negRotation","Series.prototype.setDataLabelStartPos","labelCenter","halfWidth","Series.prototype.justifyDataLabel","off","justified","pie","dataLabelPositioners","radialDistributionY","distributeBox","radialDistributionX","naturalY","seriesCenter","alignToPlotEdges","dataLabelWidth","alignToConnectors","maxDataLabelWidth","seriesTypes.pie.prototype.drawDataLabels","connectorWidth","maxWidth","labelHeight","halves","pointDataLabelsOptions","shortened","distributionLength","positionIndex","_attr","sideOverflow","verifyDataLabelOverflow","placeDataLabels","connectorColor","seriesTypes.pie.prototype.placeDataLabels","seriesTypes.pie.prototype.verifyDataLabelOverflow","minSize","newSize","column","seriesTypes.column.prototype.alignDataLabel","below","overshoot","hideOrShow","isLabelAffected","oldOpacity","isOld","collectAndHide","collector","hideOverlappingLabels","Chart.prototype.hideOverlappingLabels","label2","getAbsoluteBox","absoluteBox","box1","label1","box2","ResponsiveChart","currentOptions","ResponsiveChart.prototype.currentOptions","getCurrent","curr","matchResponsiveRule","ResponsiveChart.prototype.matchResponsiveRule","rule","matches","condition","_id","ResponsiveChart.prototype.setResponsive","responsive","currentResponsive","ruleIds","rules","mergedOptions","ruleId","undoOptions","ResponsiveComposition","ResponsiveComposition.compose","ChartClass","Animation","Responsive"]} \ No newline at end of file diff --git a/admin/js/angular-highcharts/highstock.src.js b/admin/js/angular-highcharts/highstock.src.js deleted file mode 100644 index 9e7f4ce6..00000000 --- a/admin/js/angular-highcharts/highstock.src.js +++ /dev/null @@ -1,43301 +0,0 @@ -/** - * @license Highstock JS v6.0.4 (2017-12-15) - * - * (c) 2009-2016 Torstein Honsi - * - * License: www.highcharts.com/license - */ -'use strict'; -(function(root, factory) { - if (typeof module === 'object' && module.exports) { - module.exports = root.document ? - factory(root) : - factory; - } else { - root.Highcharts = factory(root); - } -}(typeof window !== 'undefined' ? window : this, function(win) { - var Highcharts = (function() { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - /* global win, window */ - - // glob is a temporary fix to allow our es-modules to work. - var glob = typeof win === 'undefined' ? window : win, - doc = glob.document, - SVG_NS = 'http://www.w3.org/2000/svg', - userAgent = (glob.navigator && glob.navigator.userAgent) || '', - svg = doc && doc.createElementNS && !!doc.createElementNS(SVG_NS, 'svg').createSVGRect, - isMS = /(edge|msie|trident)/i.test(userAgent) && !glob.opera, - isFirefox = /Firefox/.test(userAgent), - hasBidiBug = isFirefox && parseInt(userAgent.split('Firefox/')[1], 10) < 4; // issue #38; - - var Highcharts = glob.Highcharts ? glob.Highcharts.error(16, true) : { - product: 'Highstock', - version: '6.0.4', - deg2rad: Math.PI * 2 / 360, - doc: doc, - hasBidiBug: hasBidiBug, - hasTouch: doc && doc.documentElement.ontouchstart !== undefined, - isMS: isMS, - isWebKit: /AppleWebKit/.test(userAgent), - isFirefox: isFirefox, - isTouchDevice: /(Mobile|Android|Windows Phone)/.test(userAgent), - SVG_NS: SVG_NS, - chartCount: 0, - seriesTypes: {}, - symbolSizes: {}, - svg: svg, - win: glob, - marginNames: ['plotTop', 'marginRight', 'marginBottom', 'plotLeft'], - noop: function() { - return undefined; - }, - /** - * An array containing the current chart objects in the page. A chart's - * position in the array is preserved throughout the page's lifetime. When - * a chart is destroyed, the array item becomes `undefined`. - * @type {Array.} - * @memberOf Highcharts - */ - charts: [] - }; - return Highcharts; - }()); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - /* eslint max-len: ["warn", 80, 4] */ - - /** - * The Highcharts object is the placeholder for all other members, and various - * utility functions. The most important member of the namespace would be the - * chart constructor. - * - * @example - * var chart = Highcharts.chart('container', { ... }); - * - * @namespace Highcharts - */ - - H.timers = []; - - var charts = H.charts, - doc = H.doc, - win = H.win; - - /** - * Provide error messages for debugging, with links to online explanation. This - * function can be overridden to provide custom error handling. - * - * @function #error - * @memberOf Highcharts - * @param {Number|String} code - The error code. See [errors.xml]{@link - * https://github.com/highcharts/highcharts/blob/master/errors/errors.xml} - * for available codes. If it is a string, the error message is printed - * directly in the console. - * @param {Boolean} [stop=false] - Whether to throw an error or just log a - * warning in the console. - * - * @sample highcharts/chart/highcharts-error/ Custom error handler - */ - H.error = function(code, stop) { - var msg = H.isNumber(code) ? - 'Highcharts error #' + code + ': www.highcharts.com/errors/' + code : - code; - if (stop) { - throw new Error(msg); - } - // else ... - if (win.console) { - console.log(msg); // eslint-disable-line no-console - } - }; - - /** - * An animator object used internally. One instance applies to one property - * (attribute or style prop) on one element. Animation is always initiated - * through {@link SVGElement#animate}. - * - * @constructor Fx - * @memberOf Highcharts - * @param {HTMLDOMElement|SVGElement} elem - The element to animate. - * @param {AnimationOptions} options - Animation options. - * @param {string} prop - The single attribute or CSS property to animate. - * @private - * - * @example - * var rect = renderer.rect(0, 0, 10, 10).add(); - * rect.animate({ width: 100 }); - */ - H.Fx = function(elem, options, prop) { - this.options = options; - this.elem = elem; - this.prop = prop; - }; - H.Fx.prototype = { - - /** - * Set the current step of a path definition on SVGElement. - * - * @function #dSetter - * @memberOf Highcharts.Fx - */ - dSetter: function() { - var start = this.paths[0], - end = this.paths[1], - ret = [], - now = this.now, - i = start.length, - startVal; - - // Land on the final path without adjustment points appended in the ends - if (now === 1) { - ret = this.toD; - - } else if (i === end.length && now < 1) { - while (i--) { - startVal = parseFloat(start[i]); - ret[i] = - isNaN(startVal) ? // a letter instruction like M or L - end[i] : - now * (parseFloat(end[i] - startVal)) + startVal; - - } - // If animation is finished or length not matching, land on right value - } else { - ret = end; - } - this.elem.attr('d', ret, null, true); - }, - - /** - * Update the element with the current animation step. - * - * @function #update - * @memberOf Highcharts.Fx - */ - update: function() { - var elem = this.elem, - prop = this.prop, // if destroyed, it is null - now = this.now, - step = this.options.step; - - // Animation setter defined from outside - if (this[prop + 'Setter']) { - this[prop + 'Setter'](); - - // Other animations on SVGElement - } else if (elem.attr) { - if (elem.element) { - elem.attr(prop, now, null, true); - } - - // HTML styles, raw HTML content like container size - } else { - elem.style[prop] = now + this.unit; - } - - if (step) { - step.call(elem, now, this); - } - - }, - - /** - * Run an animation. - * - * @function #run - * @memberOf Highcharts.Fx - * @param {Number} from - The current value, value to start from. - * @param {Number} to - The end value, value to land on. - * @param {String} [unit] - The property unit, for example `px`. - * - */ - run: function(from, to, unit) { - var self = this, - options = self.options, - timer = function(gotoEnd) { - return timer.stopped ? false : self.step(gotoEnd); - }, - requestAnimationFrame = - win.requestAnimationFrame || - function(step) { - setTimeout(step, 13); - }, - step = function() { - for (var i = 0; i < H.timers.length; i++) { - if (!H.timers[i]()) { - H.timers.splice(i--, 1); - } - } - - if (H.timers.length) { - requestAnimationFrame(step); - } - }; - - if (from === to) { - delete options.curAnim[this.prop]; - if (options.complete && H.keys(options.curAnim).length === 0) { - options.complete.call(this.elem); - } - } else { // #7166 - this.startTime = +new Date(); - this.start = from; - this.end = to; - this.unit = unit; - this.now = this.start; - this.pos = 0; - - timer.elem = this.elem; - timer.prop = this.prop; - - if (timer() && H.timers.push(timer) === 1) { - requestAnimationFrame(step); - } - } - }, - - /** - * Run a single step in the animation. - * - * @function #step - * @memberOf Highcharts.Fx - * @param {Boolean} [gotoEnd] - Whether to go to the endpoint of the - * animation after abort. - * @returns {Boolean} Returns `true` if animation continues. - */ - step: function(gotoEnd) { - var t = +new Date(), - ret, - done, - options = this.options, - elem = this.elem, - complete = options.complete, - duration = options.duration, - curAnim = options.curAnim; - - if (elem.attr && !elem.element) { // #2616, element is destroyed - ret = false; - - } else if (gotoEnd || t >= duration + this.startTime) { - this.now = this.end; - this.pos = 1; - this.update(); - - curAnim[this.prop] = true; - - done = true; - - H.objectEach(curAnim, function(val) { - if (val !== true) { - done = false; - } - }); - - if (done && complete) { - complete.call(elem); - } - ret = false; - - } else { - this.pos = options.easing((t - this.startTime) / duration); - this.now = this.start + ((this.end - this.start) * this.pos); - this.update(); - ret = true; - } - return ret; - }, - - /** - * Prepare start and end values so that the path can be animated one to one. - * - * @function #initPath - * @memberOf Highcharts.Fx - * @param {SVGElement} elem - The SVGElement item. - * @param {String} fromD - Starting path definition. - * @param {Array} toD - Ending path definition. - * @returns {Array} An array containing start and end paths in array form - * so that they can be animated in parallel. - */ - initPath: function(elem, fromD, toD) { - fromD = fromD || ''; - var shift, - startX = elem.startX, - endX = elem.endX, - bezier = fromD.indexOf('C') > -1, - numParams = bezier ? 7 : 3, - fullLength, - slice, - i, - start = fromD.split(' '), - end = toD.slice(), // copy - isArea = elem.isArea, - positionFactor = isArea ? 2 : 1, - reverse; - - /** - * In splines make moveTo and lineTo points have six parameters like - * bezier curves, to allow animation one-to-one. - */ - function sixify(arr) { - var isOperator, - nextIsOperator; - i = arr.length; - while (i--) { - - // Fill in dummy coordinates only if the next operator comes - // three places behind (#5788) - isOperator = arr[i] === 'M' || arr[i] === 'L'; - nextIsOperator = /[a-zA-Z]/.test(arr[i + 3]); - if (isOperator && nextIsOperator) { - arr.splice( - i + 1, 0, - arr[i + 1], arr[i + 2], - arr[i + 1], arr[i + 2] - ); - } - } - } - - /** - * Insert an array at the given position of another array - */ - function insertSlice(arr, subArr, index) { - [].splice.apply( - arr, [index, 0].concat(subArr) - ); - } - - /** - * If shifting points, prepend a dummy point to the end path. - */ - function prepend(arr, other) { - while (arr.length < fullLength) { - - // Move to, line to or curve to? - arr[0] = other[fullLength - arr.length]; - - // Prepend a copy of the first point - insertSlice(arr, arr.slice(0, numParams), 0); - - // For areas, the bottom path goes back again to the left, so we - // need to append a copy of the last point. - if (isArea) { - insertSlice( - arr, - arr.slice(arr.length - numParams), arr.length - ); - i--; - } - } - arr[0] = 'M'; - } - - /** - * Copy and append last point until the length matches the end length - */ - function append(arr, other) { - var i = (fullLength - arr.length) / numParams; - while (i > 0 && i--) { - - // Pull out the slice that is going to be appended or inserted. - // In a line graph, the positionFactor is 1, and the last point - // is sliced out. In an area graph, the positionFactor is 2, - // causing the middle two points to be sliced out, since an area - // path starts at left, follows the upper path then turns and - // follows the bottom back. - slice = arr.slice().splice( - (arr.length / positionFactor) - numParams, - numParams * positionFactor - ); - - // Move to, line to or curve to? - slice[0] = other[fullLength - numParams - (i * numParams)]; - - // Disable first control point - if (bezier) { - slice[numParams - 6] = slice[numParams - 2]; - slice[numParams - 5] = slice[numParams - 1]; - } - - // Now insert the slice, either in the middle (for areas) or at - // the end (for lines) - insertSlice(arr, slice, arr.length / positionFactor); - - if (isArea) { - i--; - } - } - } - - if (bezier) { - sixify(start); - sixify(end); - } - - // For sideways animation, find out how much we need to shift to get the - // start path Xs to match the end path Xs. - if (startX && endX) { - for (i = 0; i < startX.length; i++) { - // Moving left, new points coming in on right - if (startX[i] === endX[0]) { - shift = i; - break; - // Moving right - } else if (startX[0] === - endX[endX.length - startX.length + i]) { - shift = i; - reverse = true; - break; - } - } - if (shift === undefined) { - start = []; - } - } - - if (start.length && H.isNumber(shift)) { - - // The common target length for the start and end array, where both - // arrays are padded in opposite ends - fullLength = end.length + shift * positionFactor * numParams; - - if (!reverse) { - prepend(end, start); - append(start, end); - } else { - prepend(start, end); - append(end, start); - } - } - - return [start, end]; - } - }; // End of Fx prototype - - /** - * Handle animation of the color attributes directly. - */ - H.Fx.prototype.fillSetter = - H.Fx.prototype.strokeSetter = function() { - this.elem.attr( - this.prop, - H.color(this.start).tweenTo(H.color(this.end), this.pos), - null, - true - ); - }; - - /** - * Utility function to extend an object with the members of another. - * - * @function #extend - * @memberOf Highcharts - * @param {Object} a - The object to be extended. - * @param {Object} b - The object to add to the first one. - * @returns {Object} Object a, the original object. - */ - H.extend = function(a, b) { - var n; - if (!a) { - a = {}; - } - for (n in b) { - a[n] = b[n]; - } - return a; - }; - - /** - * Utility function to deep merge two or more objects and return a third object. - * If the first argument is true, the contents of the second object is copied - * into the first object. The merge function can also be used with a single - * object argument to create a deep copy of an object. - * - * @function #merge - * @memberOf Highcharts - * @param {Boolean} [extend] - Whether to extend the left-side object (a) or - return a whole new object. - * @param {Object} a - The first object to extend. When only this is given, the - function returns a deep copy. - * @param {...Object} [n] - An object to merge into the previous one. - * @returns {Object} - The merged object. If the first argument is true, the - * return is the same as the second argument. - */ - H.merge = function() { - var i, - args = arguments, - len, - ret = {}, - doCopy = function(copy, original) { - // An object is replacing a primitive - if (typeof copy !== 'object') { - copy = {}; - } - - H.objectEach(original, function(value, key) { - - // Copy the contents of objects, but not arrays or DOM nodes - if ( - H.isObject(value, true) && - !H.isClass(value) && - !H.isDOMElement(value) - ) { - copy[key] = doCopy(copy[key] || {}, value); - - // Primitives and arrays are copied over directly - } else { - copy[key] = original[key]; - } - }); - return copy; - }; - - // If first argument is true, copy into the existing object. Used in - // setOptions. - if (args[0] === true) { - ret = args[1]; - args = Array.prototype.slice.call(args, 2); - } - - // For each argument, extend the return - len = args.length; - for (i = 0; i < len; i++) { - ret = doCopy(ret, args[i]); - } - - return ret; - }; - - /** - * Shortcut for parseInt - * @ignore - * @param {Object} s - * @param {Number} mag Magnitude - */ - H.pInt = function(s, mag) { - return parseInt(s, mag || 10); - }; - - /** - * Utility function to check for string type. - * - * @function #isString - * @memberOf Highcharts - * @param {Object} s - The item to check. - * @returns {Boolean} - True if the argument is a string. - */ - H.isString = function(s) { - return typeof s === 'string'; - }; - - /** - * Utility function to check if an item is an array. - * - * @function #isArray - * @memberOf Highcharts - * @param {Object} obj - The item to check. - * @returns {Boolean} - True if the argument is an array. - */ - H.isArray = function(obj) { - var str = Object.prototype.toString.call(obj); - return str === '[object Array]' || str === '[object Array Iterator]'; - }; - - /** - * Utility function to check if an item is of type object. - * - * @function #isObject - * @memberOf Highcharts - * @param {Object} obj - The item to check. - * @param {Boolean} [strict=false] - Also checks that the object is not an - * array. - * @returns {Boolean} - True if the argument is an object. - */ - H.isObject = function(obj, strict) { - return !!obj && typeof obj === 'object' && (!strict || !H.isArray(obj)); - }; - - /** - * Utility function to check if an Object is a HTML Element. - * - * @function #isDOMElement - * @memberOf Highcharts - * @param {Object} obj - The item to check. - * @returns {Boolean} - True if the argument is a HTML Element. - */ - H.isDOMElement = function(obj) { - return H.isObject(obj) && typeof obj.nodeType === 'number'; - }; - - /** - * Utility function to check if an Object is an class. - * - * @function #isClass - * @memberOf Highcharts - * @param {Object} obj - The item to check. - * @returns {Boolean} - True if the argument is an class. - */ - H.isClass = function(obj) { - var c = obj && obj.constructor; - return !!( - H.isObject(obj, true) && - !H.isDOMElement(obj) && - (c && c.name && c.name !== 'Object') - ); - }; - - /** - * Utility function to check if an item is a number and it is finite (not NaN, - * Infinity or -Infinity). - * - * @function #isNumber - * @memberOf Highcharts - * @param {Object} n - * The item to check. - * @return {Boolean} - * True if the item is a finite number - */ - H.isNumber = function(n) { - return typeof n === 'number' && !isNaN(n) && n < Infinity && n > -Infinity; - }; - - /** - * Remove the last occurence of an item from an array. - * - * @function #erase - * @memberOf Highcharts - * @param {Array} arr - The array. - * @param {*} item - The item to remove. - */ - H.erase = function(arr, item) { - var i = arr.length; - while (i--) { - if (arr[i] === item) { - arr.splice(i, 1); - break; - } - } - }; - - /** - * Check if an object is null or undefined. - * - * @function #defined - * @memberOf Highcharts - * @param {Object} obj - The object to check. - * @returns {Boolean} - False if the object is null or undefined, otherwise - * true. - */ - H.defined = function(obj) { - return obj !== undefined && obj !== null; - }; - - /** - * Set or get an attribute or an object of attributes. To use as a setter, pass - * a key and a value, or let the second argument be a collection of keys and - * values. To use as a getter, pass only a string as the second argument. - * - * @function #attr - * @memberOf Highcharts - * @param {Object} elem - The DOM element to receive the attribute(s). - * @param {String|Object} [prop] - The property or an object of key-value pairs. - * @param {String} [value] - The value if a single property is set. - * @returns {*} When used as a getter, return the value. - */ - H.attr = function(elem, prop, value) { - var ret; - - // if the prop is a string - if (H.isString(prop)) { - // set the value - if (H.defined(value)) { - elem.setAttribute(prop, value); - - // get the value - } else if (elem && elem.getAttribute) { - ret = elem.getAttribute(prop); - } - - // else if prop is defined, it is a hash of key/value pairs - } else if (H.defined(prop) && H.isObject(prop)) { - H.objectEach(prop, function(val, key) { - elem.setAttribute(key, val); - }); - } - return ret; - }; - - /** - * Check if an element is an array, and if not, make it into an array. - * - * @function #splat - * @memberOf Highcharts - * @param obj {*} - The object to splat. - * @returns {Array} The produced or original array. - */ - H.splat = function(obj) { - return H.isArray(obj) ? obj : [obj]; - }; - - /** - * Set a timeout if the delay is given, otherwise perform the function - * synchronously. - * - * @function #syncTimeout - * @memberOf Highcharts - * @param {Function} fn - The function callback. - * @param {Number} delay - Delay in milliseconds. - * @param {Object} [context] - The context. - * @returns {Number} An identifier for the timeout that can later be cleared - * with clearTimeout. - */ - H.syncTimeout = function(fn, delay, context) { - if (delay) { - return setTimeout(fn, delay, context); - } - fn.call(0, context); - }; - - - /** - * Return the first value that is not null or undefined. - * - * @function #pick - * @memberOf Highcharts - * @param {...*} items - Variable number of arguments to inspect. - * @returns {*} The value of the first argument that is not null or undefined. - */ - H.pick = function() { - var args = arguments, - i, - arg, - length = args.length; - for (i = 0; i < length; i++) { - arg = args[i]; - if (arg !== undefined && arg !== null) { - return arg; - } - } - }; - - /** - * @typedef {Object} CSSObject - A style object with camel case property names. - * The properties can be whatever styles are supported on the given SVG or HTML - * element. - * @example - * { - * fontFamily: 'monospace', - * fontSize: '1.2em' - * } - */ - /** - * Set CSS on a given element. - * - * @function #css - * @memberOf Highcharts - * @param {HTMLDOMElement} el - A HTML DOM element. - * @param {CSSObject} styles - Style object with camel case property names. - * - */ - H.css = function(el, styles) { - if (H.isMS && !H.svg) { // #2686 - if (styles && styles.opacity !== undefined) { - styles.filter = 'alpha(opacity=' + (styles.opacity * 100) + ')'; - } - } - H.extend(el.style, styles); - }; - - /** - * A HTML DOM element. - * @typedef {Object} HTMLDOMElement - */ - - /** - * Utility function to create an HTML element with attributes and styles. - * - * @function #createElement - * @memberOf Highcharts - * @param {String} tag - The HTML tag. - * @param {Object} [attribs] - Attributes as an object of key-value pairs. - * @param {CSSObject} [styles] - Styles as an object of key-value pairs. - * @param {Object} [parent] - The parent HTML object. - * @param {Boolean} [nopad=false] - If true, remove all padding, border and - * margin. - * @returns {HTMLDOMElement} The created DOM element. - */ - H.createElement = function(tag, attribs, styles, parent, nopad) { - var el = doc.createElement(tag), - css = H.css; - if (attribs) { - H.extend(el, attribs); - } - if (nopad) { - css(el, { - padding: 0, - border: 'none', - margin: 0 - }); - } - if (styles) { - css(el, styles); - } - if (parent) { - parent.appendChild(el); - } - return el; - }; - - /** - * Extend a prototyped class by new members. - * - * @function #extendClass - * @memberOf Highcharts - * @param {Object} parent - The parent prototype to inherit. - * @param {Object} members - A collection of prototype members to add or - * override compared to the parent prototype. - * @returns {Object} A new prototype. - */ - H.extendClass = function(parent, members) { - var object = function() {}; - object.prototype = new parent(); // eslint-disable-line new-cap - H.extend(object.prototype, members); - return object; - }; - - /** - * Left-pad a string to a given length by adding a character repetetively. - * - * @function #pad - * @memberOf Highcharts - * @param {Number} number - The input string or number. - * @param {Number} length - The desired string length. - * @param {String} [padder=0] - The character to pad with. - * @returns {String} The padded string. - */ - H.pad = function(number, length, padder) { - return new Array((length || 2) + 1 - - String(number).length).join(padder || 0) + number; - }; - - /** - * @typedef {Number|String} RelativeSize - If a number is given, it defines the - * pixel length. If a percentage string is given, like for example `'50%'`, - * the setting defines a length relative to a base size, for example the size - * of a container. - */ - /** - * Return a length based on either the integer value, or a percentage of a base. - * - * @function #relativeLength - * @memberOf Highcharts - * @param {RelativeSize} value - * A percentage string or a number. - * @param {number} base - * The full length that represents 100%. - * @param {number} [offset=0] - * A pixel offset to apply for percentage values. Used internally in - * axis positioning. - * @return {number} - * The computed length. - */ - H.relativeLength = function(value, base, offset) { - return (/%$/).test(value) ? - (base * parseFloat(value) / 100) + (offset || 0) : - parseFloat(value); - }; - - /** - * Wrap a method with extended functionality, preserving the original function. - * - * @function #wrap - * @memberOf Highcharts - * @param {Object} obj - The context object that the method belongs to. In real - * cases, this is often a prototype. - * @param {String} method - The name of the method to extend. - * @param {Function} func - A wrapper function callback. This function is called - * with the same arguments as the original function, except that the - * original function is unshifted and passed as the first argument. - * - */ - H.wrap = function(obj, method, func) { - var proceed = obj[method]; - obj[method] = function() { - var args = Array.prototype.slice.call(arguments), - outerArgs = arguments, - ctx = this, - ret; - ctx.proceed = function() { - proceed.apply(ctx, arguments.length ? arguments : outerArgs); - }; - args.unshift(proceed); - ret = func.apply(this, args); - ctx.proceed = null; - return ret; - }; - }; - - /** - * Get the time zone offset based on the current timezone information as set in - * the global options. - * - * @function #getTZOffset - * @memberOf Highcharts - * @param {Number} timestamp - The JavaScript timestamp to inspect. - * @return {Number} - The timezone offset in minutes compared to UTC. - */ - H.getTZOffset = function(timestamp) { - var d = H.Date; - return ((d.hcGetTimezoneOffset && d.hcGetTimezoneOffset(timestamp)) || - d.hcTimezoneOffset || 0) * 60000; - }; - - /** - * Formats a JavaScript date timestamp (milliseconds since Jan 1st 1970) into a - * human readable date string. The format is a subset of the formats for PHP's - * [strftime]{@link - * http://www.php.net/manual/en/function.strftime.php} function. Additional - * formats can be given in the {@link Highcharts.dateFormats} hook. - * - * @function #dateFormat - * @memberOf Highcharts - * @param {String} format - The desired format where various time - * representations are prefixed with %. - * @param {Number} timestamp - The JavaScript timestamp. - * @param {Boolean} [capitalize=false] - Upper case first letter in the return. - * @returns {String} The formatted date. - */ - H.dateFormat = function(format, timestamp, capitalize) { - if (!H.defined(timestamp) || isNaN(timestamp)) { - return H.defaultOptions.lang.invalidDate || ''; - } - format = H.pick(format, '%Y-%m-%d %H:%M:%S'); - - var D = H.Date, - date = new D(timestamp - H.getTZOffset(timestamp)), - // get the basic time values - hours = date[D.hcGetHours](), - day = date[D.hcGetDay](), - dayOfMonth = date[D.hcGetDate](), - month = date[D.hcGetMonth](), - fullYear = date[D.hcGetFullYear](), - lang = H.defaultOptions.lang, - langWeekdays = lang.weekdays, - shortWeekdays = lang.shortWeekdays, - pad = H.pad, - - // List all format keys. Custom formats can be added from the outside. - replacements = H.extend({ - - // Day - // Short weekday, like 'Mon' - 'a': shortWeekdays ? - shortWeekdays[day] : langWeekdays[day].substr(0, 3), - // Long weekday, like 'Monday' - 'A': langWeekdays[day], - // Two digit day of the month, 01 to 31 - 'd': pad(dayOfMonth), - // Day of the month, 1 through 31 - 'e': pad(dayOfMonth, 2, ' '), - 'w': day, - - // Week (none implemented) - // 'W': weekNumber(), - - // Month - // Short month, like 'Jan' - 'b': lang.shortMonths[month], - // Long month, like 'January' - 'B': lang.months[month], - // Two digit month number, 01 through 12 - 'm': pad(month + 1), - - // Year - // Two digits year, like 09 for 2009 - 'y': fullYear.toString().substr(2, 2), - // Four digits year, like 2009 - 'Y': fullYear, - - // Time - // Two digits hours in 24h format, 00 through 23 - 'H': pad(hours), - // Hours in 24h format, 0 through 23 - 'k': hours, - // Two digits hours in 12h format, 00 through 11 - 'I': pad((hours % 12) || 12), - // Hours in 12h format, 1 through 12 - 'l': (hours % 12) || 12, - // Two digits minutes, 00 through 59 - 'M': pad(date[D.hcGetMinutes]()), - // Upper case AM or PM - 'p': hours < 12 ? 'AM' : 'PM', - // Lower case AM or PM - 'P': hours < 12 ? 'am' : 'pm', - // Two digits seconds, 00 through 59 - 'S': pad(date.getSeconds()), - // Milliseconds (naming from Ruby) - 'L': pad(Math.round(timestamp % 1000), 3) - }, - - /** - * A hook for defining additional date format specifiers. New - * specifiers are defined as key-value pairs by using the specifier - * as key, and a function which takes the timestamp as value. This - * function returns the formatted portion of the date. - * - * @type {Object} - * @name dateFormats - * @memberOf Highcharts - * @sample highcharts/global/dateformats/ Adding support for week - * number - */ - H.dateFormats - ); - - - // Do the replaces - H.objectEach(replacements, function(val, key) { - // Regex would do it in one line, but this is faster - while (format.indexOf('%' + key) !== -1) { - format = format.replace( - '%' + key, - typeof val === 'function' ? val(timestamp) : val - ); - } - - }); - - // Optionally capitalize the string and return - return capitalize ? - format.substr(0, 1).toUpperCase() + format.substr(1) : - format; - }; - - /** - * Format a single variable. Similar to sprintf, without the % prefix. - * - * @example - * formatSingle('.2f', 5); // => '5.00'. - * - * @function #formatSingle - * @memberOf Highcharts - * @param {String} format The format string. - * @param {*} val The value. - * @returns {String} The formatted representation of the value. - */ - H.formatSingle = function(format, val) { - var floatRegex = /f$/, - decRegex = /\.([0-9])/, - lang = H.defaultOptions.lang, - decimals; - - if (floatRegex.test(format)) { // float - decimals = format.match(decRegex); - decimals = decimals ? decimals[1] : -1; - if (val !== null) { - val = H.numberFormat( - val, - decimals, - lang.decimalPoint, - format.indexOf(',') > -1 ? lang.thousandsSep : '' - ); - } - } else { - val = H.dateFormat(format, val); - } - return val; - }; - - /** - * Format a string according to a subset of the rules of Python's String.format - * method. - * - * @function #format - * @memberOf Highcharts - * @param {String} str The string to format. - * @param {Object} ctx The context, a collection of key-value pairs where each - * key is replaced by its value. - * @returns {String} The formatted string. - * - * @example - * var s = Highcharts.format( - * 'The {color} fox was {len:.2f} feet long', - * { color: 'red', len: Math.PI } - * ); - * // => The red fox was 3.14 feet long - */ - H.format = function(str, ctx) { - var splitter = '{', - isInside = false, - segment, - valueAndFormat, - path, - i, - len, - ret = [], - val, - index; - - while (str) { - index = str.indexOf(splitter); - if (index === -1) { - break; - } - - segment = str.slice(0, index); - if (isInside) { // we're on the closing bracket looking back - - valueAndFormat = segment.split(':'); - path = valueAndFormat.shift().split('.'); // get first and leave - len = path.length; - val = ctx; - - // Assign deeper paths - for (i = 0; i < len; i++) { - if (val) { - val = val[path[i]]; - } - } - - // Format the replacement - if (valueAndFormat.length) { - val = H.formatSingle(valueAndFormat.join(':'), val); - } - - // Push the result and advance the cursor - ret.push(val); - - } else { - ret.push(segment); - - } - str = str.slice(index + 1); // the rest - isInside = !isInside; // toggle - splitter = isInside ? '}' : '{'; // now look for next matching bracket - } - ret.push(str); - return ret.join(''); - }; - - /** - * Get the magnitude of a number. - * - * @function #getMagnitude - * @memberOf Highcharts - * @param {Number} number The number. - * @returns {Number} The magnitude, where 1-9 are magnitude 1, 10-99 magnitude 2 - * etc. - */ - H.getMagnitude = function(num) { - return Math.pow(10, Math.floor(Math.log(num) / Math.LN10)); - }; - - /** - * Take an interval and normalize it to multiples of round numbers. - * - * @todo Move this function to the Axis prototype. It is here only for - * historical reasons. - * @function #normalizeTickInterval - * @memberOf Highcharts - * @param {Number} interval - The raw, un-rounded interval. - * @param {Array} [multiples] - Allowed multiples. - * @param {Number} [magnitude] - The magnitude of the number. - * @param {Boolean} [allowDecimals] - Whether to allow decimals. - * @param {Boolean} [hasTickAmount] - If it has tickAmount, avoid landing - * on tick intervals lower than original. - * @returns {Number} The normalized interval. - */ - H.normalizeTickInterval = function(interval, multiples, magnitude, - allowDecimals, hasTickAmount) { - var normalized, - i, - retInterval = interval; - - // round to a tenfold of 1, 2, 2.5 or 5 - magnitude = H.pick(magnitude, 1); - normalized = interval / magnitude; - - // multiples for a linear scale - if (!multiples) { - multiples = hasTickAmount ? - // Finer grained ticks when the tick amount is hard set, including - // when alignTicks is true on multiple axes (#4580). - [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10] : - - // Else, let ticks fall on rounder numbers - [1, 2, 2.5, 5, 10]; - - - // the allowDecimals option - if (allowDecimals === false) { - if (magnitude === 1) { - multiples = H.grep(multiples, function(num) { - return num % 1 === 0; - }); - } else if (magnitude <= 0.1) { - multiples = [1 / magnitude]; - } - } - } - - // normalize the interval to the nearest multiple - for (i = 0; i < multiples.length; i++) { - retInterval = multiples[i]; - // only allow tick amounts smaller than natural - if ((hasTickAmount && retInterval * magnitude >= interval) || - (!hasTickAmount && (normalized <= (multiples[i] + - (multiples[i + 1] || multiples[i])) / 2))) { - break; - } - } - - // Multiply back to the correct magnitude. Correct floats to appropriate - // precision (#6085). - retInterval = H.correctFloat( - retInterval * magnitude, -Math.round(Math.log(0.001) / Math.LN10) - ); - - return retInterval; - }; - - - /** - * Sort an object array and keep the order of equal items. The ECMAScript - * standard does not specify the behaviour when items are equal. - * - * @function #stableSort - * @memberOf Highcharts - * @param {Array} arr - The array to sort. - * @param {Function} sortFunction - The function to sort it with, like with - * regular Array.prototype.sort. - * - */ - H.stableSort = function(arr, sortFunction) { - var length = arr.length, - sortValue, - i; - - // Add index to each item - for (i = 0; i < length; i++) { - arr[i].safeI = i; // stable sort index - } - - arr.sort(function(a, b) { - sortValue = sortFunction(a, b); - return sortValue === 0 ? a.safeI - b.safeI : sortValue; - }); - - // Remove index from items - for (i = 0; i < length; i++) { - delete arr[i].safeI; // stable sort index - } - }; - - /** - * Non-recursive method to find the lowest member of an array. `Math.min` raises - * a maximum call stack size exceeded error in Chrome when trying to apply more - * than 150.000 points. This method is slightly slower, but safe. - * - * @function #arrayMin - * @memberOf Highcharts - * @param {Array} data An array of numbers. - * @returns {Number} The lowest number. - */ - H.arrayMin = function(data) { - var i = data.length, - min = data[0]; - - while (i--) { - if (data[i] < min) { - min = data[i]; - } - } - return min; - }; - - /** - * Non-recursive method to find the lowest member of an array. `Math.max` raises - * a maximum call stack size exceeded error in Chrome when trying to apply more - * than 150.000 points. This method is slightly slower, but safe. - * - * @function #arrayMax - * @memberOf Highcharts - * @param {Array} data - An array of numbers. - * @returns {Number} The highest number. - */ - H.arrayMax = function(data) { - var i = data.length, - max = data[0]; - - while (i--) { - if (data[i] > max) { - max = data[i]; - } - } - return max; - }; - - /** - * Utility method that destroys any SVGElement instances that are properties on - * the given object. It loops all properties and invokes destroy if there is a - * destroy method. The property is then delete. - * - * @function #destroyObjectProperties - * @memberOf Highcharts - * @param {Object} obj - The object to destroy properties on. - * @param {Object} [except] - Exception, do not destroy this property, only - * delete it. - * - */ - H.destroyObjectProperties = function(obj, except) { - H.objectEach(obj, function(val, n) { - // If the object is non-null and destroy is defined - if (val && val !== except && val.destroy) { - // Invoke the destroy - val.destroy(); - } - - // Delete the property from the object. - delete obj[n]; - }); - }; - - - /** - * Discard a HTML element by moving it to the bin and delete. - * - * @function #discardElement - * @memberOf Highcharts - * @param {HTMLDOMElement} element - The HTML node to discard. - * - */ - H.discardElement = function(element) { - var garbageBin = H.garbageBin; - // create a garbage bin element, not part of the DOM - if (!garbageBin) { - garbageBin = H.createElement('div'); - } - - // move the node and empty bin - if (element) { - garbageBin.appendChild(element); - } - garbageBin.innerHTML = ''; - }; - - /** - * Fix JS round off float errors. - * - * @function #correctFloat - * @memberOf Highcharts - * @param {Number} num - A float number to fix. - * @param {Number} [prec=14] - The precision. - * @returns {Number} The corrected float number. - */ - H.correctFloat = function(num, prec) { - return parseFloat( - num.toPrecision(prec || 14) - ); - }; - - /** - * Set the global animation to either a given value, or fall back to the given - * chart's animation option. - * - * @function #setAnimation - * @memberOf Highcharts - * @param {Boolean|Animation} animation - The animation object. - * @param {Object} chart - The chart instance. - * - * @todo This function always relates to a chart, and sets a property on the - * renderer, so it should be moved to the SVGRenderer. - */ - H.setAnimation = function(animation, chart) { - chart.renderer.globalAnimation = H.pick( - animation, - chart.options.chart.animation, - true - ); - }; - - /** - * Get the animation in object form, where a disabled animation is always - * returned as `{ duration: 0 }`. - * - * @function #animObject - * @memberOf Highcharts - * @param {Boolean|AnimationOptions} animation - An animation setting. Can be an - * object with duration, complete and easing properties, or a boolean to - * enable or disable. - * @returns {AnimationOptions} An object with at least a duration property. - */ - H.animObject = function(animation) { - return H.isObject(animation) ? - H.merge(animation) : { - duration: animation ? 500 : 0 - }; - }; - - /** - * The time unit lookup - */ - H.timeUnits = { - millisecond: 1, - second: 1000, - minute: 60000, - hour: 3600000, - day: 24 * 3600000, - week: 7 * 24 * 3600000, - month: 28 * 24 * 3600000, - year: 364 * 24 * 3600000 - }; - - /** - * Format a number and return a string based on input settings. - * - * @function #numberFormat - * @memberOf Highcharts - * @param {Number} number - The input number to format. - * @param {Number} decimals - The amount of decimals. A value of -1 preserves - * the amount in the input number. - * @param {String} [decimalPoint] - The decimal point, defaults to the one given - * in the lang options, or a dot. - * @param {String} [thousandsSep] - The thousands separator, defaults to the one - * given in the lang options, or a space character. - * @returns {String} The formatted number. - * - * @sample highcharts/members/highcharts-numberformat/ Custom number format - */ - H.numberFormat = function(number, decimals, decimalPoint, thousandsSep) { - number = +number || 0; - decimals = +decimals; - - var lang = H.defaultOptions.lang, - origDec = (number.toString().split('.')[1] || '').split('e')[0].length, - strinteger, - thousands, - ret, - roundedNumber, - exponent = number.toString().split('e'), - fractionDigits; - - if (decimals === -1) { - // Preserve decimals. Not huge numbers (#3793). - decimals = Math.min(origDec, 20); - } else if (!H.isNumber(decimals)) { - decimals = 2; - } else if (decimals && exponent[1] && exponent[1] < 0) { - // Expose decimals from exponential notation (#7042) - fractionDigits = decimals + +exponent[1]; - if (fractionDigits >= 0) { - // remove too small part of the number while keeping the notation - exponent[0] = (+exponent[0]).toExponential(fractionDigits) - .split('e')[0]; - decimals = fractionDigits; - } else { - // fractionDigits < 0 - exponent[0] = exponent[0].split('.')[0] || 0; - - if (decimals < 20) { - // use number instead of exponential notation (#7405) - number = (exponent[0] * Math.pow(10, exponent[1])) - .toFixed(decimals); - } else { - // or zero - number = 0; - } - exponent[1] = 0; - } - } - - // Add another decimal to avoid rounding errors of float numbers. (#4573) - // Then use toFixed to handle rounding. - roundedNumber = ( - Math.abs(exponent[1] ? exponent[0] : number) + - Math.pow(10, -Math.max(decimals, origDec) - 1) - ).toFixed(decimals); - - // A string containing the positive integer component of the number - strinteger = String(H.pInt(roundedNumber)); - - // Leftover after grouping into thousands. Can be 0, 1 or 3. - thousands = strinteger.length > 3 ? strinteger.length % 3 : 0; - - // Language - decimalPoint = H.pick(decimalPoint, lang.decimalPoint); - thousandsSep = H.pick(thousandsSep, lang.thousandsSep); - - // Start building the return - ret = number < 0 ? '-' : ''; - - // Add the leftover after grouping into thousands. For example, in the - // number 42 000 000, this line adds 42. - ret += thousands ? strinteger.substr(0, thousands) + thousandsSep : ''; - - // Add the remaining thousands groups, joined by the thousands separator - ret += strinteger - .substr(thousands) - .replace(/(\d{3})(?=\d)/g, '$1' + thousandsSep); - - // Add the decimal point and the decimal component - if (decimals) { - // Get the decimal component - ret += decimalPoint + roundedNumber.slice(-decimals); - } - - if (exponent[1] && +ret !== 0) { - ret += 'e' + exponent[1]; - } - - return ret; - }; - - /** - * Easing definition - * @ignore - * @param {Number} pos Current position, ranging from 0 to 1. - */ - Math.easeInOutSine = function(pos) { - return -0.5 * (Math.cos(Math.PI * pos) - 1); - }; - - /** - * Get the computed CSS value for given element and property, only for numerical - * properties. For width and height, the dimension of the inner box (excluding - * padding) is returned. Used for fitting the chart within the container. - * - * @function #getStyle - * @memberOf Highcharts - * @param {HTMLDOMElement} el - A HTML element. - * @param {String} prop - The property name. - * @param {Boolean} [toInt=true] - Parse to integer. - * @returns {Number} - The numeric value. - */ - H.getStyle = function(el, prop, toInt) { - - var style; - - // For width and height, return the actual inner pixel size (#4913) - if (prop === 'width') { - return Math.min(el.offsetWidth, el.scrollWidth) - - H.getStyle(el, 'padding-left') - - H.getStyle(el, 'padding-right'); - } else if (prop === 'height') { - return Math.min(el.offsetHeight, el.scrollHeight) - - H.getStyle(el, 'padding-top') - - H.getStyle(el, 'padding-bottom'); - } - - if (!win.getComputedStyle) { - // SVG not supported, forgot to load oldie.js? - H.error(27, true); - } - - // Otherwise, get the computed style - style = win.getComputedStyle(el, undefined); - if (style) { - style = style.getPropertyValue(prop); - if (H.pick(toInt, prop !== 'opacity')) { - style = H.pInt(style); - } - } - return style; - }; - - /** - * Search for an item in an array. - * - * @function #inArray - * @memberOf Highcharts - * @param {*} item - The item to search for. - * @param {arr} arr - The array or node collection to search in. - * @returns {Number} - The index within the array, or -1 if not found. - */ - H.inArray = function(item, arr) { - return (H.indexOfPolyfill || Array.prototype.indexOf).call(arr, item); - }; - - /** - * Filter an array by a callback. - * - * @function #grep - * @memberOf Highcharts - * @param {Array} arr - The array to filter. - * @param {Function} callback - The callback function. The function receives the - * item as the first argument. Return `true` if the item is to be - * preserved. - * @returns {Array} - A new, filtered array. - */ - H.grep = function(arr, callback) { - return (H.filterPolyfill || Array.prototype.filter).call(arr, callback); - }; - - /** - * Return the value of the first element in the array that satisfies the - * provided testing function. - * - * @function #find - * @memberOf Highcharts - * @param {Array} arr - The array to test. - * @param {Function} callback - The callback function. The function receives the - * item as the first argument. Return `true` if this item satisfies the - * condition. - * @returns {Mixed} - The value of the element. - */ - H.find = Array.prototype.find ? - function(arr, callback) { - return arr.find(callback); - } : - // Legacy implementation. PhantomJS, IE <= 11 etc. #7223. - function(arr, fn) { - var i, - length = arr.length; - - for (i = 0; i < length; i++) { - if (fn(arr[i], i)) { - return arr[i]; - } - } - }; - - /** - * Map an array by a callback. - * - * @function #map - * @memberOf Highcharts - * @param {Array} arr - The array to map. - * @param {Function} fn - The callback function. Return the new value for the - * new array. - * @returns {Array} - A new array item with modified items. - */ - H.map = function(arr, fn) { - var results = [], - i = 0, - len = arr.length; - - for (; i < len; i++) { - results[i] = fn.call(arr[i], arr[i], i, arr); - } - - return results; - }; - - /** - * Returns an array of a given object's own properties. - * - * @function #keys - * @memberOf highcharts - * @param {Object} obj - The object of which the properties are to be returned. - * @returns {Array} - An array of strings that represents all the properties. - */ - H.keys = function(obj) { - return (H.keysPolyfill || Object.keys).call(undefined, obj); - }; - - /** - * Reduce an array to a single value. - * - * @function #reduce - * @memberOf Highcharts - * @param {Array} arr - The array to reduce. - * @param {Function} fn - The callback function. Return the reduced value. - * Receives 4 arguments: Accumulated/reduced value, current value, current - * array index, and the array. - * @param {Mixed} initialValue - The initial value of the accumulator. - * @returns {Mixed} - The reduced value. - */ - H.reduce = function(arr, func, initialValue) { - return (H.reducePolyfill || Array.prototype.reduce).call( - arr, - func, - initialValue - ); - }; - - /** - * Get the element's offset position, corrected for `overflow: auto`. - * - * @function #offset - * @memberOf Highcharts - * @param {HTMLDOMElement} el - The HTML element. - * @returns {Object} An object containing `left` and `top` properties for the - * position in the page. - */ - H.offset = function(el) { - var docElem = doc.documentElement, - box = el.parentElement ? // IE11 throws Unspecified error in test suite - el.getBoundingClientRect() : { - top: 0, - left: 0 - }; - - return { - top: box.top + (win.pageYOffset || docElem.scrollTop) - - (docElem.clientTop || 0), - left: box.left + (win.pageXOffset || docElem.scrollLeft) - - (docElem.clientLeft || 0) - }; - }; - - /** - * Stop running animation. - * - * @todo A possible extension to this would be to stop a single property, when - * we want to continue animating others. Then assign the prop to the timer - * in the Fx.run method, and check for the prop here. This would be an - * improvement in all cases where we stop the animation from .attr. Instead of - * stopping everything, we can just stop the actual attributes we're setting. - * - * @function #stop - * @memberOf Highcharts - * @param {SVGElement} el - The SVGElement to stop animation on. - * @param {string} [prop] - The property to stop animating. If given, the stop - * method will stop a single property from animating, while others continue. - * - */ - H.stop = function(el, prop) { - - var i = H.timers.length; - - // Remove timers related to this element (#4519) - while (i--) { - if (H.timers[i].elem === el && (!prop || prop === H.timers[i].prop)) { - H.timers[i].stopped = true; // #4667 - } - } - }; - - /** - * Iterate over an array. - * - * @function #each - * @memberOf Highcharts - * @param {Array} arr - The array to iterate over. - * @param {Function} fn - The iterator callback. It passes three arguments: - * * item - The array item. - * * index - The item's index in the array. - * * arr - The array that each is being applied to. - * @param {Object} [ctx] The context. - */ - H.each = function(arr, fn, ctx) { // modern browsers - return (H.forEachPolyfill || Array.prototype.forEach).call(arr, fn, ctx); - }; - - /** - * Iterate over object key pairs in an object. - * - * @function #objectEach - * @memberOf Highcharts - * @param {Object} obj - The object to iterate over. - * @param {Function} fn - The iterator callback. It passes three arguments: - * * value - The property value. - * * key - The property key. - * * obj - The object that objectEach is being applied to. - * @param {Object} ctx The context - */ - H.objectEach = function(obj, fn, ctx) { - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - fn.call(ctx, obj[key], key, obj); - } - } - }; - - /** - * Add an event listener. - * - * @function #addEvent - * @memberOf Highcharts - * @param {Object} el - The element or object to add a listener to. It can be a - * {@link HTMLDOMElement}, an {@link SVGElement} or any other object. - * @param {String} type - The event type. - * @param {Function} fn - The function callback to execute when the event is - * fired. - * @returns {Function} A callback function to remove the added event. - */ - H.addEvent = function(el, type, fn) { - - var events, - itemEvents, - addEventListener = el.addEventListener || H.addEventListenerPolyfill; - - // If events are previously set directly on the prototype, pick them up - // and copy them over to the instance. Otherwise instance handlers would - // be set on the prototype and apply to multiple charts in the page. - if ( - el.hcEvents && - // IE8, window and document don't have hasOwnProperty - !Object.prototype.hasOwnProperty.call(el, 'hcEvents') - ) { - itemEvents = {}; - H.objectEach(el.hcEvents, function(handlers, eventType) { - itemEvents[eventType] = handlers.slice(0); - }); - el.hcEvents = itemEvents; - } - - events = el.hcEvents = el.hcEvents || {}; - - // Handle DOM events - if (addEventListener) { - addEventListener.call(el, type, fn, false); - } - - if (!events[type]) { - events[type] = []; - } - - events[type].push(fn); - - // Return a function that can be called to remove this event. - return function() { - H.removeEvent(el, type, fn); - }; - }; - - /** - * Remove an event that was added with {@link Highcharts#addEvent}. - * - * @function #removeEvent - * @memberOf Highcharts - * @param {Object} el - The element to remove events on. - * @param {String} [type] - The type of events to remove. If undefined, all - * events are removed from the element. - * @param {Function} [fn] - The specific callback to remove. If undefined, all - * events that match the element and optionally the type are removed. - * - */ - H.removeEvent = function(el, type, fn) { - - var events, - hcEvents = el.hcEvents, - index; - - function removeOneEvent(type, fn) { - var removeEventListener = - el.removeEventListener || H.removeEventListenerPolyfill; - - if (removeEventListener) { - removeEventListener.call(el, type, fn, false); - } - } - - function removeAllEvents() { - var types, - len; - - if (!el.nodeName) { - return; // break on non-DOM events - } - - if (type) { - types = {}; - types[type] = true; - } else { - types = hcEvents; - } - - H.objectEach(types, function(val, n) { - if (hcEvents[n]) { - len = hcEvents[n].length; - while (len--) { - removeOneEvent(n, hcEvents[n][len]); - } - } - }); - } - - if (hcEvents) { - if (type) { - events = hcEvents[type] || []; - if (fn) { - index = H.inArray(fn, events); - if (index > -1) { - events.splice(index, 1); - hcEvents[type] = events; - } - removeOneEvent(type, fn); - - } else { - removeAllEvents(); - hcEvents[type] = []; - } - } else { - removeAllEvents(); - el.hcEvents = {}; - } - } - }; - - /** - * Fire an event that was registered with {@link Highcharts#addEvent}. - * - * @function #fireEvent - * @memberOf Highcharts - * @param {Object} el - The object to fire the event on. It can be a - * {@link HTMLDOMElement}, an {@link SVGElement} or any other object. - * @param {String} type - The type of event. - * @param {Object} [eventArguments] - Custom event arguments that are passed on - * as an argument to the event handler. - * @param {Function} [defaultFunction] - The default function to execute if the - * other listeners haven't returned false. - * - */ - H.fireEvent = function(el, type, eventArguments, defaultFunction) { - var e, - hcEvents = el.hcEvents, - events, - len, - i, - fn; - - eventArguments = eventArguments || {}; - - if (doc.createEvent && (el.dispatchEvent || el.fireEvent)) { - e = doc.createEvent('Events'); - e.initEvent(type, true, true); - - H.extend(e, eventArguments); - - if (el.dispatchEvent) { - el.dispatchEvent(e); - } else { - el.fireEvent(type, e); - } - - } else if (hcEvents) { - - events = hcEvents[type] || []; - len = events.length; - - if (!eventArguments.target) { // We're running a custom event - - H.extend(eventArguments, { - // Attach a simple preventDefault function to skip default - // handler if called. The built-in defaultPrevented property is - // not overwritable (#5112) - preventDefault: function() { - eventArguments.defaultPrevented = true; - }, - // Setting target to native events fails with clicking the - // zoom-out button in Chrome. - target: el, - // If the type is not set, we're running a custom event (#2297). - // If it is set, we're running a browser event, and setting it - // will cause en error in IE8 (#2465). - type: type - }); - } - - - for (i = 0; i < len; i++) { - fn = events[i]; - - // If the event handler return false, prevent the default handler - // from executing - if (fn && fn.call(el, eventArguments) === false) { - eventArguments.preventDefault(); - } - } - } - - // Run the default if not prevented - if (defaultFunction && !eventArguments.defaultPrevented) { - defaultFunction(eventArguments); - } - }; - - /** - * An animation configuration. Animation configurations can also be defined as - * booleans, where `false` turns off animation and `true` defaults to a duration - * of 500ms. - * @typedef {Object} AnimationOptions - * @property {Number} duration - The animation duration in milliseconds. - * @property {String} [easing] - The name of an easing function as defined on - * the `Math` object. - * @property {Function} [complete] - A callback function to exectute when the - * animation finishes. - * @property {Function} [step] - A callback function to execute on each step of - * each attribute or CSS property that's being animated. The first argument - * contains information about the animation and progress. - */ - - - /** - * The global animate method, which uses Fx to create individual animators. - * - * @function #animate - * @memberOf Highcharts - * @param {HTMLDOMElement|SVGElement} el - The element to animate. - * @param {Object} params - An object containing key-value pairs of the - * properties to animate. Supports numeric as pixel-based CSS properties - * for HTML objects and attributes for SVGElements. - * @param {AnimationOptions} [opt] - Animation options. - */ - H.animate = function(el, params, opt) { - var start, - unit = '', - end, - fx, - args; - - if (!H.isObject(opt)) { // Number or undefined/null - args = arguments; - opt = { - duration: args[2], - easing: args[3], - complete: args[4] - }; - } - if (!H.isNumber(opt.duration)) { - opt.duration = 400; - } - opt.easing = typeof opt.easing === 'function' ? - opt.easing : - (Math[opt.easing] || Math.easeInOutSine); - opt.curAnim = H.merge(params); - - H.objectEach(params, function(val, prop) { - // Stop current running animation of this property - H.stop(el, prop); - - fx = new H.Fx(el, opt, prop); - end = null; - - if (prop === 'd') { - fx.paths = fx.initPath( - el, - el.d, - params.d - ); - fx.toD = params.d; - start = 0; - end = 1; - } else if (el.attr) { - start = el.attr(prop); - } else { - start = parseFloat(H.getStyle(el, prop)) || 0; - if (prop !== 'opacity') { - unit = 'px'; - } - } - - if (!end) { - end = val; - } - if (end && end.match && end.match('px')) { - end = end.replace(/px/g, ''); // #4351 - } - fx.run(start, end, unit); - }); - }; - - /** - * Factory to create new series prototypes. - * - * @function #seriesType - * @memberOf Highcharts - * - * @param {String} type - The series type name. - * @param {String} parent - The parent series type name. Use `line` to inherit - * from the basic {@link Series} object. - * @param {Object} options - The additional default options that is merged with - * the parent's options. - * @param {Object} props - The properties (functions and primitives) to set on - * the new prototype. - * @param {Object} [pointProps] - Members for a series-specific extension of the - * {@link Point} prototype if needed. - * @returns {*} - The newly created prototype as extended from {@link Series} - * or its derivatives. - */ - // docs: add to API + extending Highcharts - H.seriesType = function(type, parent, options, props, pointProps) { - var defaultOptions = H.getOptions(), - seriesTypes = H.seriesTypes; - - // Merge the options - defaultOptions.plotOptions[type] = H.merge( - defaultOptions.plotOptions[parent], - options - ); - - // Create the class - seriesTypes[type] = H.extendClass(seriesTypes[parent] || - function() {}, props); - seriesTypes[type].prototype.type = type; - - // Create the point class if needed - if (pointProps) { - seriesTypes[type].prototype.pointClass = - H.extendClass(H.Point, pointProps); - } - - return seriesTypes[type]; - }; - - /** - * Get a unique key for using in internal element id's and pointers. The key - * is composed of a random hash specific to this Highcharts instance, and a - * counter. - * @function #uniqueKey - * @memberOf Highcharts - * @return {string} The key. - * @example - * var id = H.uniqueKey(); // => 'highcharts-x45f6hp-0' - */ - H.uniqueKey = (function() { - - var uniqueKeyHash = Math.random().toString(36).substring(2, 9), - idCounter = 0; - - return function() { - return 'highcharts-' + uniqueKeyHash + '-' + idCounter++; - }; - }()); - - /** - * Register Highcharts as a plugin in jQuery - */ - if (win.jQuery) { - win.jQuery.fn.highcharts = function() { - var args = [].slice.call(arguments); - - if (this[0]) { // this[0] is the renderTo div - - // Create the chart - if (args[0]) { - new H[ // eslint-disable-line no-new - // Constructor defaults to Chart - H.isString(args[0]) ? args.shift() : 'Chart' - ](this[0], args[0], args[1]); - return this; - } - - // When called without parameters or with the return argument, - // return an existing chart - return charts[H.attr(this[0], 'data-highcharts-chart')]; - } - }; - } - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var each = H.each, - isNumber = H.isNumber, - map = H.map, - merge = H.merge, - pInt = H.pInt; - - /** - * @typedef {string} ColorString - * A valid color to be parsed and handled by Highcharts. Highcharts internally - * supports hex colors like `#ffffff`, rgb colors like `rgb(255,255,255)` and - * rgba colors like `rgba(255,255,255,1)`. Other colors may be supported by the - * browsers and displayed correctly, but Highcharts is not able to process them - * and apply concepts like opacity and brightening. - */ - /** - * Handle color operations. The object methods are chainable. - * @param {String} input The input color in either rbga or hex format - */ - H.Color = function(input) { - // Backwards compatibility, allow instanciation without new - if (!(this instanceof H.Color)) { - return new H.Color(input); - } - // Initialize - this.init(input); - }; - H.Color.prototype = { - - // Collection of parsers. This can be extended from the outside by pushing parsers - // to Highcharts.Color.prototype.parsers. - parsers: [{ - // RGBA color - regex: /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/, - parse: function(result) { - return [pInt(result[1]), pInt(result[2]), pInt(result[3]), parseFloat(result[4], 10)]; - } - }, { - // RGB color - regex: /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/, - parse: function(result) { - return [pInt(result[1]), pInt(result[2]), pInt(result[3]), 1]; - } - }], - - // Collection of named colors. Can be extended from the outside by adding - // colors to Highcharts.Color.prototype.names. - names: { - none: 'rgba(255,255,255,0)', - white: '#ffffff', - black: '#000000' - }, - - /** - * Parse the input color to rgba array - * @param {String} input - */ - init: function(input) { - var result, - rgba, - i, - parser, - len; - - this.input = input = this.names[ - input && input.toLowerCase ? - input.toLowerCase() : - '' - ] || input; - - // Gradients - if (input && input.stops) { - this.stops = map(input.stops, function(stop) { - return new H.Color(stop[1]); - }); - - // Solid colors - } else { - - // Bitmasking as input[0] is not working for legacy IE. - if (input && input.charAt && input.charAt() === '#') { - - len = input.length; - input = parseInt(input.substr(1), 16); - - // Handle long-form, e.g. #AABBCC - if (len === 7) { - - rgba = [ - (input & 0xFF0000) >> 16, - (input & 0xFF00) >> 8, - (input & 0xFF), - 1 - ]; - - // Handle short-form, e.g. #ABC - // In short form, the value is assumed to be the same - // for both nibbles for each component. e.g. #ABC = #AABBCC - } else if (len === 4) { - - rgba = [ - ((input & 0xF00) >> 4) | (input & 0xF00) >> 8, - ((input & 0xF0) >> 4) | (input & 0xF0), - ((input & 0xF) << 4) | (input & 0xF), - 1 - ]; - } - } - - // Otherwise, check regex parsers - if (!rgba) { - i = this.parsers.length; - while (i-- && !rgba) { - parser = this.parsers[i]; - result = parser.regex.exec(input); - if (result) { - rgba = parser.parse(result); - } - } - } - } - this.rgba = rgba || []; - }, - - /** - * Return the color a specified format - * @param {String} format - */ - get: function(format) { - var input = this.input, - rgba = this.rgba, - ret; - - if (this.stops) { - ret = merge(input); - ret.stops = [].concat(ret.stops); - each(this.stops, function(stop, i) { - ret.stops[i] = [ret.stops[i][0], stop.get(format)]; - }); - - // it's NaN if gradient colors on a column chart - } else if (rgba && isNumber(rgba[0])) { - if (format === 'rgb' || (!format && rgba[3] === 1)) { - ret = 'rgb(' + rgba[0] + ',' + rgba[1] + ',' + rgba[2] + ')'; - } else if (format === 'a') { - ret = rgba[3]; - } else { - ret = 'rgba(' + rgba.join(',') + ')'; - } - } else { - ret = input; - } - return ret; - }, - - /** - * Brighten the color - * @param {Number} alpha - */ - brighten: function(alpha) { - var i, - rgba = this.rgba; - - if (this.stops) { - each(this.stops, function(stop) { - stop.brighten(alpha); - }); - - } else if (isNumber(alpha) && alpha !== 0) { - for (i = 0; i < 3; i++) { - rgba[i] += pInt(alpha * 255); - - if (rgba[i] < 0) { - rgba[i] = 0; - } - if (rgba[i] > 255) { - rgba[i] = 255; - } - } - } - return this; - }, - - /** - * Set the color's opacity to a given alpha value - * @param {Number} alpha - */ - setOpacity: function(alpha) { - this.rgba[3] = alpha; - return this; - }, - - /* - * Return an intermediate color between two colors. - * - * @param {Highcharts.Color} to - * The color object to tween to. - * @param {Number} pos - * The intermediate position, where 0 is the from color (current - * color item), and 1 is the `to` color. - * - * @return {String} - * The intermediate color in rgba notation. - */ - tweenTo: function(to, pos) { - // Check for has alpha, because rgba colors perform worse due to lack of - // support in WebKit. - var fromRgba = this.rgba, - toRgba = to.rgba, - hasAlpha, - ret; - - // Unsupported color, return to-color (#3920, #7034) - if (!toRgba.length || !fromRgba || !fromRgba.length) { - ret = to.input || 'none'; - - // Interpolate - } else { - hasAlpha = (toRgba[3] !== 1 || fromRgba[3] !== 1); - ret = (hasAlpha ? 'rgba(' : 'rgb(') + - Math.round(toRgba[0] + (fromRgba[0] - toRgba[0]) * (1 - pos)) + - ',' + - Math.round(toRgba[1] + (fromRgba[1] - toRgba[1]) * (1 - pos)) + - ',' + - Math.round(toRgba[2] + (fromRgba[2] - toRgba[2]) * (1 - pos)) + - ( - hasAlpha ? - ( - ',' + - (toRgba[3] + (fromRgba[3] - toRgba[3]) * (1 - pos)) - ) : - '' - ) + - ')'; - } - return ret; - } - }; - H.color = function(input) { - return new H.Color(input); - }; - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var SVGElement, - SVGRenderer, - - addEvent = H.addEvent, - animate = H.animate, - attr = H.attr, - charts = H.charts, - color = H.color, - css = H.css, - createElement = H.createElement, - defined = H.defined, - deg2rad = H.deg2rad, - destroyObjectProperties = H.destroyObjectProperties, - doc = H.doc, - each = H.each, - extend = H.extend, - erase = H.erase, - grep = H.grep, - hasTouch = H.hasTouch, - inArray = H.inArray, - isArray = H.isArray, - isFirefox = H.isFirefox, - isMS = H.isMS, - isObject = H.isObject, - isString = H.isString, - isWebKit = H.isWebKit, - merge = H.merge, - noop = H.noop, - objectEach = H.objectEach, - pick = H.pick, - pInt = H.pInt, - removeEvent = H.removeEvent, - splat = H.splat, - stop = H.stop, - svg = H.svg, - SVG_NS = H.SVG_NS, - symbolSizes = H.symbolSizes, - win = H.win; - - /** - * @typedef {Object} SVGDOMElement - An SVG DOM element. - */ - /** - * The SVGElement prototype is a JavaScript wrapper for SVG elements used in the - * rendering layer of Highcharts. Combined with the {@link - * Highcharts.SVGRenderer} object, these prototypes allow freeform annotation - * in the charts or even in HTML pages without instanciating a chart. The - * SVGElement can also wrap HTML labels, when `text` or `label` elements are - * created with the `useHTML` parameter. - * - * The SVGElement instances are created through factory functions on the - * {@link Highcharts.SVGRenderer} object, like - * [rect]{@link Highcharts.SVGRenderer#rect}, [path]{@link - * Highcharts.SVGRenderer#path}, [text]{@link Highcharts.SVGRenderer#text}, - * [label]{@link Highcharts.SVGRenderer#label}, [g]{@link - * Highcharts.SVGRenderer#g} and more. - * - * @class Highcharts.SVGElement - */ - SVGElement = H.SVGElement = function() { - return this; - }; - extend(SVGElement.prototype, /** @lends Highcharts.SVGElement.prototype */ { - - // Default base for animation - opacity: 1, - SVG_NS: SVG_NS, - - /** - * For labels, these CSS properties are applied to the `text` node directly. - * - * @private - * @type {Array.} - */ - textProps: ['direction', 'fontSize', 'fontWeight', 'fontFamily', - 'fontStyle', 'color', 'lineHeight', 'width', 'textAlign', - 'textDecoration', 'textOverflow', 'textOutline' - ], - - /** - * Initialize the SVG element. This function only exists to make the - * initiation process overridable. It should not be called directly. - * - * @param {SVGRenderer} renderer - * The SVGRenderer instance to initialize to. - * @param {String} nodeName - * The SVG node name. - * - */ - init: function(renderer, nodeName) { - - /** - * The primary DOM node. Each `SVGElement` instance wraps a main DOM - * node, but may also represent more nodes. - * - * @name element - * @memberOf SVGElement - * @type {SVGDOMNode|HTMLDOMNode} - */ - this.element = nodeName === 'span' ? - createElement(nodeName) : - doc.createElementNS(this.SVG_NS, nodeName); - - /** - * The renderer that the SVGElement belongs to. - * - * @name renderer - * @memberOf SVGElement - * @type {SVGRenderer} - */ - this.renderer = renderer; - }, - - /** - * Animate to given attributes or CSS properties. - * - * @param {SVGAttributes} params SVG attributes or CSS to animate. - * @param {AnimationOptions} [options] Animation options. - * @param {Function} [complete] Function to perform at the end of animation. - * - * @sample highcharts/members/element-on/ - * Setting some attributes by animation - * - * @returns {SVGElement} Returns the SVGElement for chaining. - */ - animate: function(params, options, complete) { - var animOptions = H.animObject( - pick(options, this.renderer.globalAnimation, true) - ); - if (animOptions.duration !== 0) { - // allows using a callback with the global animation without - // overwriting it - if (complete) { - animOptions.complete = complete; - } - animate(this, params, animOptions); - } else { - this.attr(params, null, complete); - if (animOptions.step) { - animOptions.step.call(this); - } - } - return this; - }, - - /** - * @typedef {Object} GradientOptions - * @property {Object} linearGradient Holds an object that defines the start - * position and the end position relative to the shape. - * @property {Number} linearGradient.x1 Start horizontal position of the - * gradient. Ranges 0-1. - * @property {Number} linearGradient.x2 End horizontal position of the - * gradient. Ranges 0-1. - * @property {Number} linearGradient.y1 Start vertical position of the - * gradient. Ranges 0-1. - * @property {Number} linearGradient.y2 End vertical position of the - * gradient. Ranges 0-1. - * @property {Object} radialGradient Holds an object that defines the center - * position and the radius. - * @property {Number} radialGradient.cx Center horizontal position relative - * to the shape. Ranges 0-1. - * @property {Number} radialGradient.cy Center vertical position relative - * to the shape. Ranges 0-1. - * @property {Number} radialGradient.r Radius relative to the shape. Ranges - * 0-1. - * @property {Array.} stops The first item in each tuple is the - * position in the gradient, where 0 is the start of the gradient and 1 - * is the end of the gradient. Multiple stops can be applied. The second - * item is the color for each stop. This color can also be given in the - * rgba format. - * - * @example - * // Linear gradient used as a color option - * color: { - * linearGradient: { x1: 0, x2: 0, y1: 0, y2: 1 }, - * stops: [ - * [0, '#003399'], // start - * [0.5, '#ffffff'], // middle - * [1, '#3366AA'] // end - * ] - * } - * } - */ - /** - * Build and apply an SVG gradient out of a common JavaScript configuration - * object. This function is called from the attribute setters. - * - * @private - * @param {GradientOptions} color The gradient options structure. - * @param {string} prop The property to apply, can either be `fill` or - * `stroke`. - * @param {SVGDOMElement} elem SVG DOM element to apply the gradient on. - */ - colorGradient: function(color, prop, elem) { - var renderer = this.renderer, - colorObject, - gradName, - gradAttr, - radAttr, - gradients, - gradientObject, - stops, - stopColor, - stopOpacity, - radialReference, - id, - key = [], - value; - - // Apply linear or radial gradients - if (color.radialGradient) { - gradName = 'radialGradient'; - } else if (color.linearGradient) { - gradName = 'linearGradient'; - } - - if (gradName) { - gradAttr = color[gradName]; - gradients = renderer.gradients; - stops = color.stops; - radialReference = elem.radialReference; - - // Keep < 2.2 kompatibility - if (isArray(gradAttr)) { - color[gradName] = gradAttr = { - x1: gradAttr[0], - y1: gradAttr[1], - x2: gradAttr[2], - y2: gradAttr[3], - gradientUnits: 'userSpaceOnUse' - }; - } - - // Correct the radial gradient for the radial reference system - if ( - gradName === 'radialGradient' && - radialReference && - !defined(gradAttr.gradientUnits) - ) { - radAttr = gradAttr; // Save the radial attributes for updating - gradAttr = merge( - gradAttr, - renderer.getRadialAttr(radialReference, radAttr), { - gradientUnits: 'userSpaceOnUse' - } - ); - } - - // Build the unique key to detect whether we need to create a new - // element (#1282) - objectEach(gradAttr, function(val, n) { - if (n !== 'id') { - key.push(n, val); - } - }); - objectEach(stops, function(val) { - key.push(val); - }); - key = key.join(','); - - // Check if a gradient object with the same config object is created - // within this renderer - if (gradients[key]) { - id = gradients[key].attr('id'); - - } else { - - // Set the id and create the element - gradAttr.id = id = H.uniqueKey(); - gradients[key] = gradientObject = - renderer.createElement(gradName) - .attr(gradAttr) - .add(renderer.defs); - - gradientObject.radAttr = radAttr; - - // The gradient needs to keep a list of stops to be able to - // destroy them - gradientObject.stops = []; - each(stops, function(stop) { - var stopObject; - if (stop[1].indexOf('rgba') === 0) { - colorObject = H.color(stop[1]); - stopColor = colorObject.get('rgb'); - stopOpacity = colorObject.get('a'); - } else { - stopColor = stop[1]; - stopOpacity = 1; - } - stopObject = renderer.createElement('stop').attr({ - offset: stop[0], - 'stop-color': stopColor, - 'stop-opacity': stopOpacity - }).add(gradientObject); - - // Add the stop element to the gradient - gradientObject.stops.push(stopObject); - }); - } - - // Set the reference to the gradient object - value = 'url(' + renderer.url + '#' + id + ')'; - elem.setAttribute(prop, value); - elem.gradient = key; - - // Allow the color to be concatenated into tooltips formatters etc. - // (#2995) - color.toString = function() { - return value; - }; - } - }, - - /** - * Apply a text outline through a custom CSS property, by copying the text - * element and apply stroke to the copy. Used internally. Contrast checks - * at http://jsfiddle.net/highcharts/43soe9m1/2/ . - * - * @private - * @param {String} textOutline A custom CSS `text-outline` setting, defined - * by `width color`. - * @example - * // Specific color - * text.css({ - * textOutline: '1px black' - * }); - * // Automatic contrast - * text.css({ - * color: '#000000', // black text - * textOutline: '1px contrast' // => white outline - * }); - */ - applyTextOutline: function(textOutline) { - var elem = this.element, - tspans, - tspan, - hasContrast = textOutline.indexOf('contrast') !== -1, - styles = {}, - color, - strokeWidth, - firstRealChild, - i; - - // When the text shadow is set to contrast, use dark stroke for light - // text and vice versa. - if (hasContrast) { - styles.textOutline = textOutline = textOutline.replace( - /contrast/g, - this.renderer.getContrast(elem.style.fill) - ); - } - - // Extract the stroke width and color - textOutline = textOutline.split(' '); - color = textOutline[textOutline.length - 1]; - strokeWidth = textOutline[0]; - - if (strokeWidth && strokeWidth !== 'none' && H.svg) { - - this.fakeTS = true; // Fake text shadow - - tspans = [].slice.call(elem.getElementsByTagName('tspan')); - - // In order to get the right y position of the clone, - // copy over the y setter - this.ySetter = this.xSetter; - - // Since the stroke is applied on center of the actual outline, we - // need to double it to get the correct stroke-width outside the - // glyphs. - strokeWidth = strokeWidth.replace( - /(^[\d\.]+)(.*?)$/g, - function(match, digit, unit) { - return (2 * digit) + unit; - } - ); - - // Remove shadows from previous runs. Iterate from the end to - // support removing items inside the cycle (#6472). - i = tspans.length; - while (i--) { - tspan = tspans[i]; - if (tspan.getAttribute('class') === 'highcharts-text-outline') { - // Remove then erase - erase(tspans, elem.removeChild(tspan)); - } - } - - // For each of the tspans, create a stroked copy behind it. - firstRealChild = elem.firstChild; - each(tspans, function(tspan, y) { - var clone; - - // Let the first line start at the correct X position - if (y === 0) { - tspan.setAttribute('x', elem.getAttribute('x')); - y = elem.getAttribute('y'); - tspan.setAttribute('y', y || 0); - if (y === null) { - elem.setAttribute('y', 0); - } - } - - // Create the clone and apply outline properties - clone = tspan.cloneNode(1); - attr(clone, { - 'class': 'highcharts-text-outline', - 'fill': color, - 'stroke': color, - 'stroke-width': strokeWidth, - 'stroke-linejoin': 'round' - }); - elem.insertBefore(clone, firstRealChild); - }); - } - }, - - /** - * - * @typedef {Object} SVGAttributes An object of key-value pairs for SVG - * attributes. Attributes in Highcharts elements for the most parts - * correspond to SVG, but some are specific to Highcharts, like `zIndex`, - * `rotation`, `rotationOriginX`, `rotationOriginY`, `translateX`, - * `translateY`, `scaleX` and `scaleY`. SVG attributes containing a hyphen - * are _not_ camel-cased, they should be quoted to preserve the hyphen. - * - * @example - * { - * 'stroke': '#ff0000', // basic - * 'stroke-width': 2, // hyphenated - * 'rotation': 45 // custom - * 'd': ['M', 10, 10, 'L', 30, 30, 'z'] // path definition, note format - * } - */ - /** - * Apply native and custom attributes to the SVG elements. - * - * In order to set the rotation center for rotation, set x and y to 0 and - * use `translateX` and `translateY` attributes to position the element - * instead. - * - * Attributes frequently used in Highcharts are `fill`, `stroke`, - * `stroke-width`. - * - * @param {SVGAttributes|String} hash - The native and custom SVG - * attributes. - * @param {string} [val] - If the type of the first argument is `string`, - * the second can be a value, which will serve as a single attribute - * setter. If the first argument is a string and the second is undefined, - * the function serves as a getter and the current value of the property - * is returned. - * @param {Function} [complete] - A callback function to execute after - * setting the attributes. This makes the function compliant and - * interchangeable with the {@link SVGElement#animate} function. - * @param {boolean} [continueAnimation=true] Used internally when `.attr` is - * called as part of an animation step. Otherwise, calling `.attr` for an - * attribute will stop animation for that attribute. - * - * @returns {SVGElement|string|number} If used as a setter, it returns the - * current {@link SVGElement} so the calls can be chained. If used as a - * getter, the current value of the attribute is returned. - * - * @sample highcharts/members/renderer-rect/ - * Setting some attributes - * - * @example - * // Set multiple attributes - * element.attr({ - * stroke: 'red', - * fill: 'blue', - * x: 10, - * y: 10 - * }); - * - * // Set a single attribute - * element.attr('stroke', 'red'); - * - * // Get an attribute - * element.attr('stroke'); // => 'red' - * - */ - attr: function(hash, val, complete, continueAnimation) { - var key, - element = this.element, - hasSetSymbolSize, - ret = this, - skipAttr, - setter; - - // single key-value pair - if (typeof hash === 'string' && val !== undefined) { - key = hash; - hash = {}; - hash[key] = val; - } - - // used as a getter: first argument is a string, second is undefined - if (typeof hash === 'string') { - ret = (this[hash + 'Getter'] || this._defaultGetter).call( - this, - hash, - element - ); - - // setter - } else { - - objectEach(hash, function eachAttribute(val, key) { - skipAttr = false; - - // Unless .attr is from the animator update, stop current - // running animation of this property - if (!continueAnimation) { - stop(this, key); - } - - // Special handling of symbol attributes - if ( - this.symbolName && - /^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)$/ - .test(key) - ) { - if (!hasSetSymbolSize) { - this.symbolAttr(hash); - hasSetSymbolSize = true; - } - skipAttr = true; - } - - if (this.rotation && (key === 'x' || key === 'y')) { - this.doTransform = true; - } - - if (!skipAttr) { - setter = this[key + 'Setter'] || this._defaultSetter; - setter.call(this, val, key, element); - - - // Let the shadow follow the main element - if ( - this.shadows && - /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/ - .test(key) - ) { - this.updateShadows(key, val, setter); - } - - } - }, this); - - this.afterSetters(); - } - - // In accordance with animate, run a complete callback - if (complete) { - complete(); - } - - return ret; - }, - - /** - * This method is executed in the end of `attr()`, after setting all - * attributes in the hash. In can be used to efficiently consolidate - * multiple attributes in one SVG property -- e.g., translate, rotate and - * scale are merged in one "transform" attribute in the SVG node. - * - * @private - */ - afterSetters: function() { - // Update transform. Do this outside the loop to prevent redundant - // updating for batch setting of attributes. - if (this.doTransform) { - this.updateTransform(); - this.doTransform = false; - } - }, - - - /** - * Update the shadow elements with new attributes. - * - * @private - * @param {String} key - The attribute name. - * @param {String|Number} value - The value of the attribute. - * @param {Function} setter - The setter function, inherited from the - * parent wrapper - * - */ - updateShadows: function(key, value, setter) { - var shadows = this.shadows, - i = shadows.length; - - while (i--) { - setter.call( - shadows[i], - key === 'height' ? - Math.max(value - (shadows[i].cutHeight || 0), 0) : - key === 'd' ? this.d : value, - key, - shadows[i] - ); - } - }, - - - /** - * Add a class name to an element. - * - * @param {string} className - The new class name to add. - * @param {boolean} [replace=false] - When true, the existing class name(s) - * will be overwritten with the new one. When false, the new one is - * added. - * @returns {SVGElement} Return the SVG element for chainability. - */ - addClass: function(className, replace) { - var currentClassName = this.attr('class') || ''; - if (currentClassName.indexOf(className) === -1) { - if (!replace) { - className = - (currentClassName + (currentClassName ? ' ' : '') + - className).replace(' ', ' '); - } - this.attr('class', className); - } - - return this; - }, - - /** - * Check if an element has the given class name. - * @param {string} className - * The class name to check for. - * @return {Boolean} - * Whether the class name is found. - */ - hasClass: function(className) { - return inArray( - className, - (this.attr('class') || '').split(' ') - ) !== -1; - }, - - /** - * Remove a class name from the element. - * @param {String|RegExp} className The class name to remove. - * @return {SVGElement} Returns the SVG element for chainability. - */ - removeClass: function(className) { - return this.attr( - 'class', - (this.attr('class') || '').replace(className, '') - ); - }, - - /** - * If one of the symbol size affecting parameters are changed, - * check all the others only once for each call to an element's - * .attr() method - * @param {Object} hash - The attributes to set. - * @private - */ - symbolAttr: function(hash) { - var wrapper = this; - - each([ - 'x', - 'y', - 'r', - 'start', - 'end', - 'width', - 'height', - 'innerR', - 'anchorX', - 'anchorY' - ], function(key) { - wrapper[key] = pick(hash[key], wrapper[key]); - }); - - wrapper.attr({ - d: wrapper.renderer.symbols[wrapper.symbolName]( - wrapper.x, - wrapper.y, - wrapper.width, - wrapper.height, - wrapper - ) - }); - }, - - /** - * Apply a clipping rectangle to this element. - * - * @param {ClipRect} [clipRect] - The clipping rectangle. If skipped, the - * current clip is removed. - * @returns {SVGElement} Returns the SVG element to allow chaining. - */ - clip: function(clipRect) { - return this.attr( - 'clip-path', - clipRect ? - 'url(' + this.renderer.url + '#' + clipRect.id + ')' : - 'none' - ); - }, - - /** - * Calculate the coordinates needed for drawing a rectangle crisply and - * return the calculated attributes. - * - * @param {Object} rect - A rectangle. - * @param {number} rect.x - The x position. - * @param {number} rect.y - The y position. - * @param {number} rect.width - The width. - * @param {number} rect.height - The height. - * @param {number} [strokeWidth] - The stroke width to consider when - * computing crisp positioning. It can also be set directly on the rect - * parameter. - * - * @returns {{x: Number, y: Number, width: Number, height: Number}} The - * modified rectangle arguments. - */ - crisp: function(rect, strokeWidth) { - - var wrapper = this, - normalizer; - - strokeWidth = strokeWidth || rect.strokeWidth || 0; - // Math.round because strokeWidth can sometimes have roundoff errors - normalizer = Math.round(strokeWidth) % 2 / 2; - - // normalize for crisp edges - rect.x = Math.floor(rect.x || wrapper.x || 0) + normalizer; - rect.y = Math.floor(rect.y || wrapper.y || 0) + normalizer; - rect.width = Math.floor( - (rect.width || wrapper.width || 0) - 2 * normalizer - ); - rect.height = Math.floor( - (rect.height || wrapper.height || 0) - 2 * normalizer - ); - if (defined(rect.strokeWidth)) { - rect.strokeWidth = strokeWidth; - } - return rect; - }, - - /** - * Set styles for the element. In addition to CSS styles supported by - * native SVG and HTML elements, there are also some custom made for - * Highcharts, like `width`, `ellipsis` and `textOverflow` for SVG text - * elements. - * @param {CSSObject} styles The new CSS styles. - * @returns {SVGElement} Return the SVG element for chaining. - * - * @sample highcharts/members/renderer-text-on-chart/ - * Styled text - */ - css: function(styles) { - var oldStyles = this.styles, - newStyles = {}, - elem = this.element, - textWidth, - serializedCss = '', - hyphenate, - hasNew = !oldStyles, - // These CSS properties are interpreted internally by the SVG - // renderer, but are not supported by SVG and should not be added to - // the DOM. In styled mode, no CSS should find its way to the DOM - // whatsoever (#6173, #6474). - svgPseudoProps = ['textOutline', 'textOverflow', 'width']; - - // convert legacy - if (styles && styles.color) { - styles.fill = styles.color; - } - - // Filter out existing styles to increase performance (#2640) - if (oldStyles) { - objectEach(styles, function(style, n) { - if (style !== oldStyles[n]) { - newStyles[n] = style; - hasNew = true; - } - }); - } - if (hasNew) { - - // Merge the new styles with the old ones - if (oldStyles) { - styles = extend( - oldStyles, - newStyles - ); - } - - // Get the text width from style - textWidth = this.textWidth = ( - styles && - styles.width && - styles.width !== 'auto' && - elem.nodeName.toLowerCase() === 'text' && - pInt(styles.width) - ); - - // store object - this.styles = styles; - - if (textWidth && (!svg && this.renderer.forExport)) { - delete styles.width; - } - - // serialize and set style attribute - if (isMS && !svg) { - css(this.element, styles); - } else { - hyphenate = function(a, b) { - return '-' + b.toLowerCase(); - }; - objectEach(styles, function(style, n) { - if (inArray(n, svgPseudoProps) === -1) { - serializedCss += - n.replace(/([A-Z])/g, hyphenate) + ':' + - style + ';'; - } - }); - if (serializedCss) { - attr(elem, 'style', serializedCss); // #1881 - } - } - - - if (this.added) { - - // Rebuild text after added. Cache mechanisms in the buildText - // will prevent building if there are no significant changes. - if (this.element.nodeName === 'text') { - this.renderer.buildText(this); - } - - // Apply text outline after added - if (styles && styles.textOutline) { - this.applyTextOutline(styles.textOutline); - } - } - } - - return this; - }, - - - /** - * Get the current stroke width. In classic mode, the setter registers it - * directly on the element. - * @returns {number} The stroke width in pixels. - * @ignore - */ - strokeWidth: function() { - return this['stroke-width'] || 0; - }, - - - /** - * Add an event listener. This is a simple setter that replaces all other - * events of the same type, opposed to the {@link Highcharts#addEvent} - * function. - * @param {string} eventType - The event type. If the type is `click`, - * Highcharts will internally translate it to a `touchstart` event on - * touch devices, to prevent the browser from waiting for a click event - * from firing. - * @param {Function} handler - The handler callback. - * @returns {SVGElement} The SVGElement for chaining. - * - * @sample highcharts/members/element-on/ - * A clickable rectangle - */ - on: function(eventType, handler) { - var svgElement = this, - element = svgElement.element; - - // touch - if (hasTouch && eventType === 'click') { - element.ontouchstart = function(e) { - svgElement.touchEventFired = Date.now(); // #2269 - e.preventDefault(); - handler.call(element, e); - }; - element.onclick = function(e) { - if (win.navigator.userAgent.indexOf('Android') === -1 || - Date.now() - (svgElement.touchEventFired || 0) > 1100) { - handler.call(element, e); - } - }; - } else { - // simplest possible event model for internal use - element['on' + eventType] = handler; - } - return this; - }, - - /** - * Set the coordinates needed to draw a consistent radial gradient across - * a shape regardless of positioning inside the chart. Used on pie slices - * to make all the slices have the same radial reference point. - * - * @param {Array} coordinates The center reference. The format is - * `[centerX, centerY, diameter]` in pixels. - * @returns {SVGElement} Returns the SVGElement for chaining. - */ - setRadialReference: function(coordinates) { - var existingGradient = this.renderer.gradients[this.element.gradient]; - - this.element.radialReference = coordinates; - - // On redrawing objects with an existing gradient, the gradient needs - // to be repositioned (#3801) - if (existingGradient && existingGradient.radAttr) { - existingGradient.animate( - this.renderer.getRadialAttr( - coordinates, - existingGradient.radAttr - ) - ); - } - - return this; - }, - - /** - * Move an object and its children by x and y values. - * - * @param {number} x - The x value. - * @param {number} y - The y value. - */ - translate: function(x, y) { - return this.attr({ - translateX: x, - translateY: y - }); - }, - - /** - * Invert a group, rotate and flip. This is used internally on inverted - * charts, where the points and graphs are drawn as if not inverted, then - * the series group elements are inverted. - * - * @param {boolean} inverted - * Whether to invert or not. An inverted shape can be un-inverted by - * setting it to false. - * @return {SVGElement} - * Return the SVGElement for chaining. - */ - invert: function(inverted) { - var wrapper = this; - wrapper.inverted = inverted; - wrapper.updateTransform(); - return wrapper; - }, - - /** - * Update the transform attribute based on internal properties. Deals with - * the custom `translateX`, `translateY`, `rotation`, `scaleX` and `scaleY` - * attributes and updates the SVG `transform` attribute. - * @private - * - */ - updateTransform: function() { - var wrapper = this, - translateX = wrapper.translateX || 0, - translateY = wrapper.translateY || 0, - scaleX = wrapper.scaleX, - scaleY = wrapper.scaleY, - inverted = wrapper.inverted, - rotation = wrapper.rotation, - matrix = wrapper.matrix, - element = wrapper.element, - transform; - - // Flipping affects translate as adjustment for flipping around the - // group's axis - if (inverted) { - translateX += wrapper.width; - translateY += wrapper.height; - } - - // Apply translate. Nearly all transformed elements have translation, - // so instead of checking for translate = 0, do it always (#1767, - // #1846). - transform = ['translate(' + translateX + ',' + translateY + ')']; - - // apply matrix - if (defined(matrix)) { - transform.push( - 'matrix(' + matrix.join(',') + ')' - ); - } - - // apply rotation - if (inverted) { - transform.push('rotate(90) scale(-1,1)'); - } else if (rotation) { // text rotation - transform.push( - 'rotate(' + rotation + ' ' + - pick(this.rotationOriginX, element.getAttribute('x'), 0) + - ' ' + - pick(this.rotationOriginY, element.getAttribute('y') || 0) + ')' - ); - } - - // apply scale - if (defined(scaleX) || defined(scaleY)) { - transform.push( - 'scale(' + pick(scaleX, 1) + ' ' + pick(scaleY, 1) + ')' - ); - } - - if (transform.length) { - element.setAttribute('transform', transform.join(' ')); - } - }, - - /** - * Bring the element to the front. Alternatively, a new zIndex can be set. - * - * @returns {SVGElement} Returns the SVGElement for chaining. - * - * @sample highcharts/members/element-tofront/ - * Click an element to bring it to front - */ - toFront: function() { - var element = this.element; - element.parentNode.appendChild(element); - return this; - }, - - - /** - * Align the element relative to the chart or another box. - * - * @param {Object} [alignOptions] The alignment options. The function can be - * called without this parameter in order to re-align an element after the - * box has been updated. - * @param {string} [alignOptions.align=left] Horizontal alignment. Can be - * one of `left`, `center` and `right`. - * @param {string} [alignOptions.verticalAlign=top] Vertical alignment. Can - * be one of `top`, `middle` and `bottom`. - * @param {number} [alignOptions.x=0] Horizontal pixel offset from - * alignment. - * @param {number} [alignOptions.y=0] Vertical pixel offset from alignment. - * @param {Boolean} [alignByTranslate=false] Use the `transform` attribute - * with translateX and translateY custom attributes to align this elements - * rather than `x` and `y` attributes. - * @param {String|Object} box The box to align to, needs a width and height. - * When the box is a string, it refers to an object in the Renderer. For - * example, when box is `spacingBox`, it refers to `Renderer.spacingBox` - * which holds `width`, `height`, `x` and `y` properties. - * @returns {SVGElement} Returns the SVGElement for chaining. - */ - align: function(alignOptions, alignByTranslate, box) { - var align, - vAlign, - x, - y, - attribs = {}, - alignTo, - renderer = this.renderer, - alignedObjects = renderer.alignedObjects, - alignFactor, - vAlignFactor; - - // First call on instanciate - if (alignOptions) { - this.alignOptions = alignOptions; - this.alignByTranslate = alignByTranslate; - if (!box || isString(box)) { - this.alignTo = alignTo = box || 'renderer'; - // prevent duplicates, like legendGroup after resize - erase(alignedObjects, this); - alignedObjects.push(this); - box = null; // reassign it below - } - - // When called on resize, no arguments are supplied - } else { - alignOptions = this.alignOptions; - alignByTranslate = this.alignByTranslate; - alignTo = this.alignTo; - } - - box = pick(box, renderer[alignTo], renderer); - - // Assign variables - align = alignOptions.align; - vAlign = alignOptions.verticalAlign; - x = (box.x || 0) + (alignOptions.x || 0); // default: left align - y = (box.y || 0) + (alignOptions.y || 0); // default: top align - - // Align - if (align === 'right') { - alignFactor = 1; - } else if (align === 'center') { - alignFactor = 2; - } - if (alignFactor) { - x += (box.width - (alignOptions.width || 0)) / alignFactor; - } - attribs[alignByTranslate ? 'translateX' : 'x'] = Math.round(x); - - - // Vertical align - if (vAlign === 'bottom') { - vAlignFactor = 1; - } else if (vAlign === 'middle') { - vAlignFactor = 2; - } - if (vAlignFactor) { - y += (box.height - (alignOptions.height || 0)) / vAlignFactor; - } - attribs[alignByTranslate ? 'translateY' : 'y'] = Math.round(y); - - // Animate only if already placed - this[this.placed ? 'animate' : 'attr'](attribs); - this.placed = true; - this.alignAttr = attribs; - - return this; - }, - - /** - * Get the bounding box (width, height, x and y) for the element. Generally - * used to get rendered text size. Since this is called a lot in charts, - * the results are cached based on text properties, in order to save DOM - * traffic. The returned bounding box includes the rotation, so for example - * a single text line of rotation 90 will report a greater height, and a - * width corresponding to the line-height. - * - * @param {boolean} [reload] Skip the cache and get the updated DOM bouding - * box. - * @param {number} [rot] Override the element's rotation. This is internally - * used on axis labels with a value of 0 to find out what the bounding box - * would be have been if it were not rotated. - * @returns {Object} The bounding box with `x`, `y`, `width` and `height` - * properties. - * - * @sample highcharts/members/renderer-on-chart/ - * Draw a rectangle based on a text's bounding box - */ - getBBox: function(reload, rot) { - var wrapper = this, - bBox, // = wrapper.bBox, - renderer = wrapper.renderer, - width, - height, - rotation, - rad, - element = wrapper.element, - styles = wrapper.styles, - fontSize, - textStr = wrapper.textStr, - toggleTextShadowShim, - cache = renderer.cache, - cacheKeys = renderer.cacheKeys, - cacheKey; - - rotation = pick(rot, wrapper.rotation); - rad = rotation * deg2rad; - - - fontSize = styles && styles.fontSize; - - - // Avoid undefined and null (#7316) - if (defined(textStr)) { - - cacheKey = textStr.toString(); - - // Since numbers are monospaced, and numerical labels appear a lot - // in a chart, we assume that a label of n characters has the same - // bounding box as others of the same length. Unless there is inner - // HTML in the label. In that case, leave the numbers as is (#5899). - if (cacheKey.indexOf('<') === -1) { - cacheKey = cacheKey.replace(/[0-9]/g, '0'); - } - - // Properties that affect bounding box - cacheKey += [ - '', - rotation || 0, - fontSize, - styles && styles.width, - styles && styles.textOverflow // #5968 - ] - .join(','); - - } - - if (cacheKey && !reload) { - bBox = cache[cacheKey]; - } - - // No cache found - if (!bBox) { - - // SVG elements - if (element.namespaceURI === wrapper.SVG_NS || renderer.forExport) { - try { // Fails in Firefox if the container has display: none. - - // When the text shadow shim is used, we need to hide the - // fake shadows to get the correct bounding box (#3872) - toggleTextShadowShim = this.fakeTS && function(display) { - each( - element.querySelectorAll( - '.highcharts-text-outline' - ), - function(tspan) { - tspan.style.display = display; - } - ); - }; - - // Workaround for #3842, Firefox reporting wrong bounding - // box for shadows - if (toggleTextShadowShim) { - toggleTextShadowShim('none'); - } - - bBox = element.getBBox ? - // SVG: use extend because IE9 is not allowed to change - // width and height in case of rotation (below) - extend({}, element.getBBox()) : { - - // Legacy IE in export mode - width: element.offsetWidth, - height: element.offsetHeight - }; - - // #3842 - if (toggleTextShadowShim) { - toggleTextShadowShim(''); - } - } catch (e) {} - - // If the bBox is not set, the try-catch block above failed. The - // other condition is for Opera that returns a width of - // -Infinity on hidden elements. - if (!bBox || bBox.width < 0) { - bBox = { - width: 0, - height: 0 - }; - } - - - // VML Renderer or useHTML within SVG - } else { - - bBox = wrapper.htmlGetBBox(); - - } - - // True SVG elements as well as HTML elements in modern browsers - // using the .useHTML option need to compensated for rotation - if (renderer.isSVG) { - width = bBox.width; - height = bBox.height; - - // Workaround for wrong bounding box in IE, Edge and Chrome on - // Windows. With Highcharts' default font, IE and Edge report - // a box height of 16.899 and Chrome rounds it to 17. If this - // stands uncorrected, it results in more padding added below - // the text than above when adding a label border or background. - // Also vertical positioning is affected. - // http://jsfiddle.net/highcharts/em37nvuj/ - // (#1101, #1505, #1669, #2568, #6213). - if ( - styles && - styles.fontSize === '11px' && - Math.round(height) === 17 - ) { - bBox.height = height = 14; - } - - // Adjust for rotated text - if (rotation) { - bBox.width = Math.abs(height * Math.sin(rad)) + - Math.abs(width * Math.cos(rad)); - bBox.height = Math.abs(height * Math.cos(rad)) + - Math.abs(width * Math.sin(rad)); - } - } - - // Cache it. When loading a chart in a hidden iframe in Firefox and - // IE/Edge, the bounding box height is 0, so don't cache it (#5620). - if (cacheKey && bBox.height > 0) { - - // Rotate (#4681) - while (cacheKeys.length > 250) { - delete cache[cacheKeys.shift()]; - } - - if (!cache[cacheKey]) { - cacheKeys.push(cacheKey); - } - cache[cacheKey] = bBox; - } - } - return bBox; - }, - - /** - * Show the element after it has been hidden. - * - * @param {boolean} [inherit=false] Set the visibility attribute to - * `inherit` rather than `visible`. The difference is that an element with - * `visibility="visible"` will be visible even if the parent is hidden. - * - * @returns {SVGElement} Returns the SVGElement for chaining. - */ - show: function(inherit) { - return this.attr({ - visibility: inherit ? 'inherit' : 'visible' - }); - }, - - /** - * Hide the element, equivalent to setting the `visibility` attribute to - * `hidden`. - * - * @returns {SVGElement} Returns the SVGElement for chaining. - */ - hide: function() { - return this.attr({ - visibility: 'hidden' - }); - }, - - /** - * Fade out an element by animating its opacity down to 0, and hide it on - * complete. Used internally for the tooltip. - * - * @param {number} [duration=150] The fade duration in milliseconds. - */ - fadeOut: function(duration) { - var elemWrapper = this; - elemWrapper.animate({ - opacity: 0 - }, { - duration: duration || 150, - complete: function() { - // #3088, assuming we're only using this for tooltips - elemWrapper.attr({ - y: -9999 - }); - } - }); - }, - - /** - * Add the element to the DOM. All elements must be added this way. - * - * @param {SVGElement|SVGDOMElement} [parent] The parent item to add it to. - * If undefined, the element is added to the {@link - * Highcharts.SVGRenderer.box}. - * - * @returns {SVGElement} Returns the SVGElement for chaining. - * - * @sample highcharts/members/renderer-g - Elements added to a group - */ - add: function(parent) { - - var renderer = this.renderer, - element = this.element, - inserted; - - if (parent) { - this.parentGroup = parent; - } - - // mark as inverted - this.parentInverted = parent && parent.inverted; - - // build formatted text - if (this.textStr !== undefined) { - renderer.buildText(this); - } - - // Mark as added - this.added = true; - - // If we're adding to renderer root, or other elements in the group - // have a z index, we need to handle it - if (!parent || parent.handleZ || this.zIndex) { - inserted = this.zIndexSetter(); - } - - // If zIndex is not handled, append at the end - if (!inserted) { - (parent ? parent.element : renderer.box).appendChild(element); - } - - // fire an event for internal hooks - if (this.onAdd) { - this.onAdd(); - } - - return this; - }, - - /** - * Removes an element from the DOM. - * - * @private - * @param {SVGDOMElement|HTMLDOMElement} element The DOM node to remove. - */ - safeRemoveChild: function(element) { - var parentNode = element.parentNode; - if (parentNode) { - parentNode.removeChild(element); - } - }, - - /** - * Destroy the element and element wrapper and clear up the DOM and event - * hooks. - * - * - */ - destroy: function() { - var wrapper = this, - element = wrapper.element || {}, - parentToClean = - wrapper.renderer.isSVG && - element.nodeName === 'SPAN' && - wrapper.parentGroup, - grandParent, - ownerSVGElement = element.ownerSVGElement, - i; - - // remove events - element.onclick = element.onmouseout = element.onmouseover = - element.onmousemove = element.point = null; - stop(wrapper); // stop running animations - - if (wrapper.clipPath && ownerSVGElement) { - // Look for existing references to this clipPath and remove them - // before destroying the element (#6196). - each( - // The upper case version is for Edge - ownerSVGElement.querySelectorAll('[clip-path],[CLIP-PATH]'), - function(el) { - // Include the closing paranthesis in the test to rule out - // id's from 10 and above (#6550) - if (el - .getAttribute('clip-path') - .match(RegExp( - // Edge puts quotes inside the url, others not - '[\("]#' + wrapper.clipPath.element.id + '[\)"]' - )) - ) { - el.removeAttribute('clip-path'); - } - } - ); - wrapper.clipPath = wrapper.clipPath.destroy(); - } - - // Destroy stops in case this is a gradient object - if (wrapper.stops) { - for (i = 0; i < wrapper.stops.length; i++) { - wrapper.stops[i] = wrapper.stops[i].destroy(); - } - wrapper.stops = null; - } - - // remove element - wrapper.safeRemoveChild(element); - - - wrapper.destroyShadows(); - - - // In case of useHTML, clean up empty containers emulating SVG groups - // (#1960, #2393, #2697). - while ( - parentToClean && - parentToClean.div && - parentToClean.div.childNodes.length === 0 - ) { - grandParent = parentToClean.parentGroup; - wrapper.safeRemoveChild(parentToClean.div); - delete parentToClean.div; - parentToClean = grandParent; - } - - // remove from alignObjects - if (wrapper.alignTo) { - erase(wrapper.renderer.alignedObjects, wrapper); - } - - objectEach(wrapper, function(val, key) { - delete wrapper[key]; - }); - - return null; - }, - - - /** - * @typedef {Object} ShadowOptions - * @property {string} [color=#000000] The shadow color. - * @property {number} [offsetX=1] The horizontal offset from the element. - * @property {number} [offsetY=1] The vertical offset from the element. - * @property {number} [opacity=0.15] The shadow opacity. - * @property {number} [width=3] The shadow width or distance from the - * element. - */ - /** - * Add a shadow to the element. Must be called after the element is added to - * the DOM. In styled mode, this method is not used, instead use `defs` and - * filters. - * - * @param {boolean|ShadowOptions} shadowOptions The shadow options. If - * `true`, the default options are applied. If `false`, the current - * shadow will be removed. - * @param {SVGElement} [group] The SVG group element where the shadows will - * be applied. The default is to add it to the same parent as the current - * element. Internally, this is ised for pie slices, where all the - * shadows are added to an element behind all the slices. - * @param {boolean} [cutOff] Used internally for column shadows. - * - * @returns {SVGElement} Returns the SVGElement for chaining. - * - * @example - * renderer.rect(10, 100, 100, 100) - * .attr({ fill: 'red' }) - * .shadow(true); - */ - shadow: function(shadowOptions, group, cutOff) { - var shadows = [], - i, - shadow, - element = this.element, - strokeWidth, - shadowWidth, - shadowElementOpacity, - - // compensate for inverted plot area - transform; - - if (!shadowOptions) { - this.destroyShadows(); - - } else if (!this.shadows) { - shadowWidth = pick(shadowOptions.width, 3); - shadowElementOpacity = (shadowOptions.opacity || 0.15) / - shadowWidth; - transform = this.parentInverted ? - '(-1,-1)' : - '(' + pick(shadowOptions.offsetX, 1) + ', ' + - pick(shadowOptions.offsetY, 1) + ')'; - for (i = 1; i <= shadowWidth; i++) { - shadow = element.cloneNode(0); - strokeWidth = (shadowWidth * 2) + 1 - (2 * i); - attr(shadow, { - 'isShadow': 'true', - 'stroke': shadowOptions.color || '#000000', - 'stroke-opacity': shadowElementOpacity * i, - 'stroke-width': strokeWidth, - 'transform': 'translate' + transform, - 'fill': 'none' - }); - if (cutOff) { - attr( - shadow, - 'height', - Math.max(attr(shadow, 'height') - strokeWidth, 0) - ); - shadow.cutHeight = strokeWidth; - } - - if (group) { - group.element.appendChild(shadow); - } else if (element.parentNode) { - element.parentNode.insertBefore(shadow, element); - } - - shadows.push(shadow); - } - - this.shadows = shadows; - } - return this; - - }, - - /** - * Destroy shadows on the element. - * @private - */ - destroyShadows: function() { - each(this.shadows || [], function(shadow) { - this.safeRemoveChild(shadow); - }, this); - this.shadows = undefined; - }, - - - - xGetter: function(key) { - if (this.element.nodeName === 'circle') { - if (key === 'x') { - key = 'cx'; - } else if (key === 'y') { - key = 'cy'; - } - } - return this._defaultGetter(key); - }, - - /** - * Get the current value of an attribute or pseudo attribute, used mainly - * for animation. Called internally from the {@link - * Highcharts.SVGRenderer#attr} - * function. - * - * @private - */ - _defaultGetter: function(key) { - var ret = pick( - this[key + 'Value'], // align getter - this[key], - this.element ? this.element.getAttribute(key) : null, - 0 - ); - - if (/^[\-0-9\.]+$/.test(ret)) { // is numerical - ret = parseFloat(ret); - } - return ret; - }, - - - dSetter: function(value, key, element) { - if (value && value.join) { // join path - value = value.join(' '); - } - if (/(NaN| {2}|^$)/.test(value)) { - value = 'M 0 0'; - } - - // Check for cache before resetting. Resetting causes disturbance in the - // DOM, causing flickering in some cases in Edge/IE (#6747). Also - // possible performance gain. - if (this[key] !== value) { - element.setAttribute(key, value); - this[key] = value; - } - - }, - - dashstyleSetter: function(value) { - var i, - strokeWidth = this['stroke-width']; - - // If "inherit", like maps in IE, assume 1 (#4981). With HC5 and the new - // strokeWidth function, we should be able to use that instead. - if (strokeWidth === 'inherit') { - strokeWidth = 1; - } - value = value && value.toLowerCase(); - if (value) { - value = value - .replace('shortdashdotdot', '3,1,1,1,1,1,') - .replace('shortdashdot', '3,1,1,1') - .replace('shortdot', '1,1,') - .replace('shortdash', '3,1,') - .replace('longdash', '8,3,') - .replace(/dot/g, '1,3,') - .replace('dash', '4,3,') - .replace(/,$/, '') - .split(','); // ending comma - - i = value.length; - while (i--) { - value[i] = pInt(value[i]) * strokeWidth; - } - value = value.join(',') - .replace(/NaN/g, 'none'); // #3226 - this.element.setAttribute('stroke-dasharray', value); - } - }, - - alignSetter: function(value) { - var convert = { - left: 'start', - center: 'middle', - right: 'end' - }; - this.alignValue = value; - this.element.setAttribute('text-anchor', convert[value]); - }, - opacitySetter: function(value, key, element) { - this[key] = value; - element.setAttribute(key, value); - }, - titleSetter: function(value) { - var titleNode = this.element.getElementsByTagName('title')[0]; - if (!titleNode) { - titleNode = doc.createElementNS(this.SVG_NS, 'title'); - this.element.appendChild(titleNode); - } - - // Remove text content if it exists - if (titleNode.firstChild) { - titleNode.removeChild(titleNode.firstChild); - } - - titleNode.appendChild( - doc.createTextNode( - // #3276, #3895 - (String(pick(value), '')).replace(/<[^>]*>/g, '') - ) - ); - }, - textSetter: function(value) { - if (value !== this.textStr) { - // Delete bBox memo when the text changes - delete this.bBox; - - this.textStr = value; - if (this.added) { - this.renderer.buildText(this); - } - } - }, - fillSetter: function(value, key, element) { - if (typeof value === 'string') { - element.setAttribute(key, value); - } else if (value) { - this.colorGradient(value, key, element); - } - }, - visibilitySetter: function(value, key, element) { - // IE9-11 doesn't handle visibilty:inherit well, so we remove the - // attribute instead (#2881, #3909) - if (value === 'inherit') { - element.removeAttribute(key); - } else if (this[key] !== value) { // #6747 - element.setAttribute(key, value); - } - this[key] = value; - }, - zIndexSetter: function(value, key) { - var renderer = this.renderer, - parentGroup = this.parentGroup, - parentWrapper = parentGroup || renderer, - parentNode = parentWrapper.element || renderer.box, - childNodes, - otherElement, - otherZIndex, - element = this.element, - inserted, - undefinedOtherZIndex, - svgParent = parentNode === renderer.box, - run = this.added, - i; - - if (defined(value)) { - // So we can read it for other elements in the group - element.zIndex = value; - - value = +value; - if (this[key] === value) { // Only update when needed (#3865) - run = false; - } - this[key] = value; - } - - // Insert according to this and other elements' zIndex. Before .add() is - // called, nothing is done. Then on add, or by later calls to - // zIndexSetter, the node is placed on the right place in the DOM. - if (run) { - value = this.zIndex; - - if (value && parentGroup) { - parentGroup.handleZ = true; - } - - childNodes = parentNode.childNodes; - for (i = childNodes.length - 1; i >= 0 && !inserted; i--) { - otherElement = childNodes[i]; - otherZIndex = otherElement.zIndex; - undefinedOtherZIndex = !defined(otherZIndex); - - if (otherElement !== element) { - if ( - // Negative zIndex versus no zIndex: - // On all levels except the highest. If the parent is , - // then we don't want to put items before or - (value < 0 && undefinedOtherZIndex && !svgParent && !i) - ) { - parentNode.insertBefore(element, childNodes[i]); - inserted = true; - } else if ( - // Insert after the first element with a lower zIndex - pInt(otherZIndex) <= value || - // If negative zIndex, add this before first undefined zIndex element - (undefinedOtherZIndex && (!defined(value) || value >= 0)) - ) { - parentNode.insertBefore( - element, - childNodes[i + 1] || null // null for oldIE export - ); - inserted = true; - } - } - } - - if (!inserted) { - parentNode.insertBefore( - element, - childNodes[svgParent ? 3 : 0] || null // null for oldIE - ); - inserted = true; - } - } - return inserted; - }, - _defaultSetter: function(value, key, element) { - element.setAttribute(key, value); - } - }); - - // Some shared setters and getters - SVGElement.prototype.yGetter = - SVGElement.prototype.xGetter; - SVGElement.prototype.translateXSetter = - SVGElement.prototype.translateYSetter = - SVGElement.prototype.rotationSetter = - SVGElement.prototype.verticalAlignSetter = - SVGElement.prototype.rotationOriginXSetter = - SVGElement.prototype.rotationOriginYSetter = - SVGElement.prototype.scaleXSetter = - SVGElement.prototype.scaleYSetter = - SVGElement.prototype.matrixSetter = function(value, key) { - this[key] = value; - this.doTransform = true; - }; - - - // WebKit and Batik have problems with a stroke-width of zero, so in this case - // we remove the stroke attribute altogether. #1270, #1369, #3065, #3072. - SVGElement.prototype['stroke-widthSetter'] = - SVGElement.prototype.strokeSetter = function(value, key, element) { - this[key] = value; - // Only apply the stroke attribute if the stroke width is defined and larger - // than 0 - if (this.stroke && this['stroke-width']) { - // Use prototype as instance may be overridden - SVGElement.prototype.fillSetter.call( - this, - this.stroke, - 'stroke', - element - ); - - element.setAttribute('stroke-width', this['stroke-width']); - this.hasStroke = true; - } else if (key === 'stroke-width' && value === 0 && this.hasStroke) { - element.removeAttribute('stroke'); - this.hasStroke = false; - } - }; - - - /** - * Allows direct access to the Highcharts rendering layer in order to draw - * primitive shapes like circles, rectangles, paths or text directly on a chart, - * or independent from any chart. The SVGRenderer represents a wrapper object - * for SVG in modern browsers. Through the VMLRenderer, part of the `oldie.js` - * module, it also brings vector graphics to IE <= 8. - * - * An existing chart's renderer can be accessed through {@link Chart.renderer}. - * The renderer can also be used completely decoupled from a chart. - * - * @param {HTMLDOMElement} container - Where to put the SVG in the web page. - * @param {number} width - The width of the SVG. - * @param {number} height - The height of the SVG. - * @param {boolean} [forExport=false] - Whether the rendered content is intended - * for export. - * @param {boolean} [allowHTML=true] - Whether the renderer is allowed to - * include HTML text, which will be projected on top of the SVG. - * - * @example - * // Use directly without a chart object. - * var renderer = new Highcharts.Renderer(parentNode, 600, 400); - * - * @sample highcharts/members/renderer-on-chart - * Annotating a chart programmatically. - * @sample highcharts/members/renderer-basic - * Independent SVG drawing. - * - * @class Highcharts.SVGRenderer - */ - SVGRenderer = H.SVGRenderer = function() { - this.init.apply(this, arguments); - }; - extend(SVGRenderer.prototype, /** @lends Highcharts.SVGRenderer.prototype */ { - /** - * A pointer to the renderer's associated Element class. The VMLRenderer - * will have a pointer to VMLElement here. - * @type {SVGElement} - */ - Element: SVGElement, - SVG_NS: SVG_NS, - /** - * Initialize the SVGRenderer. Overridable initiator function that takes - * the same parameters as the constructor. - */ - init: function(container, width, height, style, forExport, allowHTML) { - var renderer = this, - boxWrapper, - element, - desc; - - boxWrapper = renderer.createElement('svg') - .attr({ - 'version': '1.1', - 'class': 'highcharts-root' - }) - - .css(this.getStyle(style)); - element = boxWrapper.element; - container.appendChild(element); - - // Always use ltr on the container, otherwise text-anchor will be - // flipped and text appear outside labels, buttons, tooltip etc (#3482) - attr(container, 'dir', 'ltr'); - - // For browsers other than IE, add the namespace attribute (#1978) - if (container.innerHTML.indexOf('xmlns') === -1) { - attr(element, 'xmlns', this.SVG_NS); - } - - // object properties - renderer.isSVG = true; - - /** - * The root `svg` node of the renderer. - * @name box - * @memberOf SVGRenderer - * @type {SVGDOMElement} - */ - this.box = element; - /** - * The wrapper for the root `svg` node of the renderer. - * - * @name boxWrapper - * @memberOf SVGRenderer - * @type {SVGElement} - */ - this.boxWrapper = boxWrapper; - renderer.alignedObjects = []; - - /** - * Page url used for internal references. - * @type {string} - */ - // #24, #672, #1070 - this.url = ( - (isFirefox || isWebKit) && - doc.getElementsByTagName('base').length - ) ? - win.location.href - .replace(/#.*?$/, '') // remove the hash - .replace(/<[^>]*>/g, '') // wing cut HTML - // escape parantheses and quotes - .replace(/([\('\)])/g, '\\$1') - // replace spaces (needed for Safari only) - .replace(/ /g, '%20') : - ''; - - // Add description - desc = this.createElement('desc').add(); - desc.element.appendChild( - doc.createTextNode('Created with Highstock 6.0.4') - ); - - /** - * A pointer to the `defs` node of the root SVG. - * @type {SVGElement} - * @name defs - * @memberOf SVGRenderer - */ - renderer.defs = this.createElement('defs').add(); - renderer.allowHTML = allowHTML; - renderer.forExport = forExport; - renderer.gradients = {}; // Object where gradient SvgElements are stored - renderer.cache = {}; // Cache for numerical bounding boxes - renderer.cacheKeys = []; - renderer.imgCount = 0; - - renderer.setSize(width, height, false); - - - - // Issue 110 workaround: - // In Firefox, if a div is positioned by percentage, its pixel position - // may land between pixels. The container itself doesn't display this, - // but an SVG element inside this container will be drawn at subpixel - // precision. In order to draw sharp lines, this must be compensated - // for. This doesn't seem to work inside iframes though (like in - // jsFiddle). - var subPixelFix, rect; - if (isFirefox && container.getBoundingClientRect) { - subPixelFix = function() { - css(container, { - left: 0, - top: 0 - }); - rect = container.getBoundingClientRect(); - css(container, { - left: (Math.ceil(rect.left) - rect.left) + 'px', - top: (Math.ceil(rect.top) - rect.top) + 'px' - }); - }; - - // run the fix now - subPixelFix(); - - // run it on resize - renderer.unSubPixelFix = addEvent(win, 'resize', subPixelFix); - } - }, - - - - /** - * Get the global style setting for the renderer. - * @private - * @param {CSSObject} style - Style settings. - * @return {CSSObject} The style settings mixed with defaults. - */ - getStyle: function(style) { - this.style = extend({ - - fontFamily: '"Lucida Grande", "Lucida Sans Unicode", ' + - 'Arial, Helvetica, sans-serif', - fontSize: '12px' - - }, style); - return this.style; - }, - /** - * Apply the global style on the renderer, mixed with the default styles. - * - * @param {CSSObject} style - CSS to apply. - */ - setStyle: function(style) { - this.boxWrapper.css(this.getStyle(style)); - }, - - - /** - * Detect whether the renderer is hidden. This happens when one of the - * parent elements has `display: none`. Used internally to detect when we - * needto render preliminarily in another div to get the text bounding boxes - * right. - * - * @returns {boolean} True if it is hidden. - */ - isHidden: function() { // #608 - return !this.boxWrapper.getBBox().width; - }, - - /** - * Destroys the renderer and its allocated members. - */ - destroy: function() { - var renderer = this, - rendererDefs = renderer.defs; - renderer.box = null; - renderer.boxWrapper = renderer.boxWrapper.destroy(); - - // Call destroy on all gradient elements - destroyObjectProperties(renderer.gradients || {}); - renderer.gradients = null; - - // Defs are null in VMLRenderer - // Otherwise, destroy them here. - if (rendererDefs) { - renderer.defs = rendererDefs.destroy(); - } - - // Remove sub pixel fix handler (#982) - if (renderer.unSubPixelFix) { - renderer.unSubPixelFix(); - } - - renderer.alignedObjects = null; - - return null; - }, - - /** - * Create a wrapper for an SVG element. Serves as a factory for - * {@link SVGElement}, but this function is itself mostly called from - * primitive factories like {@link SVGRenderer#path}, {@link - * SVGRenderer#rect} or {@link SVGRenderer#text}. - * - * @param {string} nodeName - The node name, for example `rect`, `g` etc. - * @returns {SVGElement} The generated SVGElement. - */ - createElement: function(nodeName) { - var wrapper = new this.Element(); - wrapper.init(this, nodeName); - return wrapper; - }, - - /** - * Dummy function for plugins, called every time the renderer is updated. - * Prior to Highcharts 5, this was used for the canvg renderer. - * @function - */ - draw: noop, - - /** - * Get converted radial gradient attributes according to the radial - * reference. Used internally from the {@link SVGElement#colorGradient} - * function. - * - * @private - */ - getRadialAttr: function(radialReference, gradAttr) { - return { - cx: (radialReference[0] - radialReference[2] / 2) + - gradAttr.cx * radialReference[2], - cy: (radialReference[1] - radialReference[2] / 2) + - gradAttr.cy * radialReference[2], - r: gradAttr.r * radialReference[2] - }; - }, - - getSpanWidth: function(wrapper, tspan) { - var renderer = this, - bBox = wrapper.getBBox(true), - actualWidth = bBox.width; - - // Old IE cannot measure the actualWidth for SVG elements (#2314) - if (!svg && renderer.forExport) { - actualWidth = renderer.measureSpanWidth( - tspan.firstChild.data, - wrapper.styles - ); - } - return actualWidth; - }, - - applyEllipsis: function(wrapper, tspan, text, width) { - var renderer = this, - rotation = wrapper.rotation, - str = text, - currentIndex, - minIndex = 0, - maxIndex = text.length, - updateTSpan = function(s) { - tspan.removeChild(tspan.firstChild); - if (s) { - tspan.appendChild(doc.createTextNode(s)); - } - }, - actualWidth, - wasTooLong; - wrapper.rotation = 0; // discard rotation when computing box - actualWidth = renderer.getSpanWidth(wrapper, tspan); - wasTooLong = actualWidth > width; - if (wasTooLong) { - while (minIndex <= maxIndex) { - currentIndex = Math.ceil((minIndex + maxIndex) / 2); - str = text.substring(0, currentIndex) + '\u2026'; - updateTSpan(str); - actualWidth = renderer.getSpanWidth(wrapper, tspan); - if (minIndex === maxIndex) { - // Complete - minIndex = maxIndex + 1; - } else if (actualWidth > width) { - // Too large. Set max index to current. - maxIndex = currentIndex - 1; - } else { - // Within width. Set min index to current. - minIndex = currentIndex; - } - } - // If max index was 0 it means just ellipsis was also to large. - if (maxIndex === 0) { - // Remove ellipses. - updateTSpan(''); - } - } - wrapper.rotation = rotation; // Apply rotation again. - return wasTooLong; - }, - - /** - * A collection of characters mapped to HTML entities. When `useHTML` on an - * element is true, these entities will be rendered correctly by HTML. In - * the SVG pseudo-HTML, they need to be unescaped back to simple characters, - * so for example `<` will render as `<`. - * - * @example - * // Add support for unescaping quotes - * Highcharts.SVGRenderer.prototype.escapes['"'] = '"'; - * - * @type {Object} - */ - escapes: { - '&': '&', - '<': '<', - '>': '>', - "'": ''', // eslint-disable-line quotes - '"': '"' - }, - - /** - * Parse a simple HTML string into SVG tspans. Called internally when text - * is set on an SVGElement. The function supports a subset of HTML tags, - * CSS text features like `width`, `text-overflow`, `white-space`, and - * also attributes like `href` and `style`. - * @private - * @param {SVGElement} wrapper The parent SVGElement. - */ - buildText: function(wrapper) { - var textNode = wrapper.element, - renderer = this, - forExport = renderer.forExport, - textStr = pick(wrapper.textStr, '').toString(), - hasMarkup = textStr.indexOf('<') !== -1, - lines, - childNodes = textNode.childNodes, - clsRegex, - styleRegex, - hrefRegex, - wasTooLong, - parentX = attr(textNode, 'x'), - textStyles = wrapper.styles, - width = wrapper.textWidth, - textLineHeight = textStyles && textStyles.lineHeight, - textOutline = textStyles && textStyles.textOutline, - ellipsis = textStyles && textStyles.textOverflow === 'ellipsis', - noWrap = textStyles && textStyles.whiteSpace === 'nowrap', - fontSize = textStyles && textStyles.fontSize, - textCache, - isSubsequentLine, - i = childNodes.length, - tempParent = width && !wrapper.added && this.box, - getLineHeight = function(tspan) { - var fontSizeStyle; - - fontSizeStyle = /(px|em)$/.test(tspan && tspan.style.fontSize) ? - tspan.style.fontSize : - (fontSize || renderer.style.fontSize || 12); - - - return textLineHeight ? - pInt(textLineHeight) : - renderer.fontMetrics( - fontSizeStyle, - // Get the computed size from parent if not explicit - tspan.getAttribute('style') ? tspan : textNode - ).h; - }, - unescapeEntities = function(inputStr) { - objectEach(renderer.escapes, function(value, key) { - inputStr = inputStr.replace( - new RegExp(value, 'g'), - key - ); - }); - return inputStr; - }; - - // The buildText code is quite heavy, so if we're not changing something - // that affects the text, skip it (#6113). - textCache = [ - textStr, - ellipsis, - noWrap, - textLineHeight, - textOutline, - fontSize, - width - ].join(','); - if (textCache === wrapper.textCache) { - return; - } - wrapper.textCache = textCache; - - // Remove old text - while (i--) { - textNode.removeChild(childNodes[i]); - } - - // Skip tspans, add text directly to text node. The forceTSpan is a hook - // used in text outline hack. - if (!hasMarkup && - !textOutline && - !ellipsis && - !width && - textStr.indexOf(' ') === -1 - ) { - textNode.appendChild(doc.createTextNode(unescapeEntities(textStr))); - - // Complex strings, add more logic - } else { - - clsRegex = /<.*class="([^"]+)".*>/; - styleRegex = /<.*style="([^"]+)".*>/; - hrefRegex = /<.*href="([^"]+)".*>/; - - if (tempParent) { - // attach it to the DOM to read offset width - tempParent.appendChild(textNode); - } - - if (hasMarkup) { - lines = textStr - - .replace(/<(b|strong)>/g, '') - .replace(/<(i|em)>/g, '') - - .replace(//g, '') - .split(//g); - - } else { - lines = [textStr]; - } - - - // Trim empty lines (#5261) - lines = grep(lines, function(line) { - return line !== ''; - }); - - - // build the lines - each(lines, function buildTextLines(line, lineNo) { - var spans, - spanNo = 0; - line = line - // Trim to prevent useless/costly process on the spaces - // (#5258) - .replace(/^\s+|\s+$/g, '') - .replace(//g, '|||'); - spans = line.split('|||'); - - each(spans, function buildTextSpans(span) { - if (span !== '' || spans.length === 1) { - var attributes = {}, - tspan = doc.createElementNS( - renderer.SVG_NS, - 'tspan' - ), - spanCls, - spanStyle; // #390 - if (clsRegex.test(span)) { - spanCls = span.match(clsRegex)[1]; - attr(tspan, 'class', spanCls); - } - if (styleRegex.test(span)) { - spanStyle = span.match(styleRegex)[1].replace( - /(;| |^)color([ :])/, - '$1fill$2' - ); - attr(tspan, 'style', spanStyle); - } - - // Not for export - #1529 - if (hrefRegex.test(span) && !forExport) { - attr( - tspan, - 'onclick', - 'location.href=\"' + - span.match(hrefRegex)[1] + '\"' - ); - attr(tspan, 'class', 'highcharts-anchor'); - - css(tspan, { - cursor: 'pointer' - }); - - } - - // Strip away unsupported HTML tags (#7126) - span = unescapeEntities( - span.replace(/<[a-zA-Z\/](.|\n)*?>/g, '') || ' ' - ); - - // Nested tags aren't supported, and cause crash in - // Safari (#1596) - if (span !== ' ') { - - // add the text node - tspan.appendChild(doc.createTextNode(span)); - - // First span in a line, align it to the left - if (!spanNo) { - if (lineNo && parentX !== null) { - attributes.x = parentX; - } - } else { - attributes.dx = 0; // #16 - } - - // add attributes - attr(tspan, attributes); - - // Append it - textNode.appendChild(tspan); - - // first span on subsequent line, add the line - // height - if (!spanNo && isSubsequentLine) { - - // allow getting the right offset height in - // exporting in IE - if (!svg && forExport) { - css(tspan, { - display: 'block' - }); - } - - // Set the line height based on the font size of - // either the text element or the tspan element - attr( - tspan, - 'dy', - getLineHeight(tspan) - ); - } - - /* - if (width) { - renderer.breakText(wrapper, width); - } - */ - - // Check width and apply soft breaks or ellipsis - if (width) { - var words = span.replace( - /([^\^])-/g, - '$1- ' - ).split(' '), // #1273 - hasWhiteSpace = ( - spans.length > 1 || - lineNo || - (words.length > 1 && !noWrap) - ), - tooLong, - rest = [], - actualWidth, - dy = getLineHeight(tspan), - rotation = wrapper.rotation; - - if (ellipsis) { - wasTooLong = renderer.applyEllipsis( - wrapper, - tspan, - span, - width - ); - } - - while (!ellipsis && - hasWhiteSpace && - (words.length || rest.length) - ) { - // discard rotation when computing box - wrapper.rotation = 0; - actualWidth = renderer.getSpanWidth( - wrapper, - tspan - ); - tooLong = actualWidth > width; - - // For ellipsis, do a binary search for the - // correct string length - if (wasTooLong === undefined) { - wasTooLong = tooLong; // First time - } - - // Looping down, this is the first word - // sequence that is not too long, so we can - // move on to build the next line. - if (!tooLong || words.length === 1) { - words = rest; - rest = []; - - if (words.length && !noWrap) { - tspan = doc.createElementNS( - SVG_NS, - 'tspan' - ); - attr(tspan, { - dy: dy, - x: parentX - }); - if (spanStyle) { // #390 - attr(tspan, 'style', spanStyle); - } - textNode.appendChild(tspan); - } - - // a single word is pressing it out - if (actualWidth > width) { - width = actualWidth; - } - } else { // append to existing line tspan - tspan.removeChild(tspan.firstChild); - rest.unshift(words.pop()); - } - if (words.length) { - tspan.appendChild( - doc.createTextNode( - words.join(' ') - .replace(/- /g, '-') - ) - ); - } - } - wrapper.rotation = rotation; - } - - spanNo++; - } - } - }); - // To avoid beginning lines that doesn't add to the textNode - // (#6144) - isSubsequentLine = ( - isSubsequentLine || - textNode.childNodes.length - ); - }); - - if (wasTooLong) { - wrapper.attr('title', wrapper.textStr); - } - if (tempParent) { - tempParent.removeChild(textNode); - } - - // Apply the text outline - if (textOutline && wrapper.applyTextOutline) { - wrapper.applyTextOutline(textOutline); - } - } - }, - - - - /* - breakText: function (wrapper, width) { - var bBox = wrapper.getBBox(), - node = wrapper.element, - textLength = node.textContent.length, - // try this position first, based on average character width - pos = Math.round(width * textLength / bBox.width), - increment = 0, - finalPos; - - if (bBox.width > width) { - while (finalPos === undefined) { - textLength = node.getSubStringLength(0, pos); - - if (textLength <= width) { - if (increment === -1) { - finalPos = pos; - } else { - increment = 1; - } - } else { - if (increment === 1) { - finalPos = pos - 1; - } else { - increment = -1; - } - } - pos += increment; - } - } - console.log( - 'width', - width, - 'stringWidth', - node.getSubStringLength(0, finalPos) - ) - }, - */ - - /** - * Returns white for dark colors and black for bright colors. - * - * @param {ColorString} rgba - The color to get the contrast for. - * @returns {string} The contrast color, either `#000000` or `#FFFFFF`. - */ - getContrast: function(rgba) { - rgba = color(rgba).rgba; - - // The threshold may be discussed. Here's a proposal for adding - // different weight to the color channels (#6216) - /* - rgba[0] *= 1; // red - rgba[1] *= 1.2; // green - rgba[2] *= 0.7; // blue - */ - - return rgba[0] + rgba[1] + rgba[2] > 2 * 255 ? '#000000' : '#FFFFFF'; - }, - - /** - * Create a button with preset states. - * @param {string} text - The text or HTML to draw. - * @param {number} x - The x position of the button's left side. - * @param {number} y - The y position of the button's top side. - * @param {Function} callback - The function to execute on button click or - * touch. - * @param {SVGAttributes} [normalState] - SVG attributes for the normal - * state. - * @param {SVGAttributes} [hoverState] - SVG attributes for the hover state. - * @param {SVGAttributes} [pressedState] - SVG attributes for the pressed - * state. - * @param {SVGAttributes} [disabledState] - SVG attributes for the disabled - * state. - * @param {Symbol} [shape=rect] - The shape type. - * @returns {SVGRenderer} The button element. - */ - button: function( - text, - x, - y, - callback, - normalState, - hoverState, - pressedState, - disabledState, - shape - ) { - var label = this.label( - text, - x, - y, - shape, - null, - null, - null, - null, - 'button' - ), - curState = 0; - - // Default, non-stylable attributes - label.attr(merge({ - 'padding': 8, - 'r': 2 - }, normalState)); - - - // Presentational - var normalStyle, - hoverStyle, - pressedStyle, - disabledStyle; - - // Normal state - prepare the attributes - normalState = merge({ - fill: '#f7f7f7', - stroke: '#cccccc', - 'stroke-width': 1, - style: { - color: '#333333', - cursor: 'pointer', - fontWeight: 'normal' - } - }, normalState); - normalStyle = normalState.style; - delete normalState.style; - - // Hover state - hoverState = merge(normalState, { - fill: '#e6e6e6' - }, hoverState); - hoverStyle = hoverState.style; - delete hoverState.style; - - // Pressed state - pressedState = merge(normalState, { - fill: '#e6ebf5', - style: { - color: '#000000', - fontWeight: 'bold' - } - }, pressedState); - pressedStyle = pressedState.style; - delete pressedState.style; - - // Disabled state - disabledState = merge(normalState, { - style: { - color: '#cccccc' - } - }, disabledState); - disabledStyle = disabledState.style; - delete disabledState.style; - - - // Add the events. IE9 and IE10 need mouseover and mouseout to funciton - // (#667). - addEvent(label.element, isMS ? 'mouseover' : 'mouseenter', function() { - if (curState !== 3) { - label.setState(1); - } - }); - addEvent(label.element, isMS ? 'mouseout' : 'mouseleave', function() { - if (curState !== 3) { - label.setState(curState); - } - }); - - label.setState = function(state) { - // Hover state is temporary, don't record it - if (state !== 1) { - label.state = curState = state; - } - // Update visuals - label.removeClass( - /highcharts-button-(normal|hover|pressed|disabled)/ - ) - .addClass( - 'highcharts-button-' + ['normal', 'hover', 'pressed', 'disabled'][state || 0] - ); - - - label.attr([ - normalState, - hoverState, - pressedState, - disabledState - ][state || 0]) - .css([ - normalStyle, - hoverStyle, - pressedStyle, - disabledStyle - ][state || 0]); - - }; - - - - // Presentational attributes - label - .attr(normalState) - .css(extend({ - cursor: 'default' - }, normalStyle)); - - - return label - .on('click', function(e) { - if (curState !== 3) { - callback.call(label, e); - } - }); - }, - - /** - * Make a straight line crisper by not spilling out to neighbour pixels. - * - * @param {Array} points - The original points on the format `['M', 0, 0, - * 'L', 100, 0]`. - * @param {number} width - The width of the line. - * @returns {Array} The original points array, but modified to render - * crisply. - */ - crispLine: function(points, width) { - // normalize to a crisp line - if (points[1] === points[4]) { - // Substract due to #1129. Now bottom and left axis gridlines behave - // the same. - points[1] = points[4] = Math.round(points[1]) - (width % 2 / 2); - } - if (points[2] === points[5]) { - points[2] = points[5] = Math.round(points[2]) + (width % 2 / 2); - } - return points; - }, - - - /** - * Draw a path, wraps the SVG `path` element. - * - * @param {Array} [path] An SVG path definition in array form. - * - * @example - * var path = renderer.path(['M', 10, 10, 'L', 30, 30, 'z']) - * .attr({ stroke: '#ff00ff' }) - * .add(); - * @returns {SVGElement} The generated wrapper element. - * - * @sample highcharts/members/renderer-path-on-chart/ - * Draw a path in a chart - * @sample highcharts/members/renderer-path/ - * Draw a path independent from a chart - * - */ - /** - * Draw a path, wraps the SVG `path` element. - * - * @param {SVGAttributes} [attribs] The initial attributes. - * @returns {SVGElement} The generated wrapper element. - */ - path: function(path) { - var attribs = { - - fill: 'none' - - }; - if (isArray(path)) { - attribs.d = path; - } else if (isObject(path)) { // attributes - extend(attribs, path); - } - return this.createElement('path').attr(attribs); - }, - - /** - * Draw a circle, wraps the SVG `circle` element. - * - * @param {number} [x] The center x position. - * @param {number} [y] The center y position. - * @param {number} [r] The radius. - * @returns {SVGElement} The generated wrapper element. - * - * @sample highcharts/members/renderer-circle/ Drawing a circle - */ - /** - * Draw a circle, wraps the SVG `circle` element. - * - * @param {SVGAttributes} [attribs] The initial attributes. - * @returns {SVGElement} The generated wrapper element. - */ - circle: function(x, y, r) { - var attribs = isObject(x) ? x : { - x: x, - y: y, - r: r - }, - wrapper = this.createElement('circle'); - - // Setting x or y translates to cx and cy - wrapper.xSetter = wrapper.ySetter = function(value, key, element) { - element.setAttribute('c' + key, value); - }; - - return wrapper.attr(attribs); - }, - - /** - * Draw and return an arc. - * @param {number} [x=0] Center X position. - * @param {number} [y=0] Center Y position. - * @param {number} [r=0] The outer radius of the arc. - * @param {number} [innerR=0] Inner radius like used in donut charts. - * @param {number} [start=0] The starting angle of the arc in radians, where - * 0 is to the right and `-Math.PI/2` is up. - * @param {number} [end=0] The ending angle of the arc in radians, where 0 - * is to the right and `-Math.PI/2` is up. - * @returns {SVGElement} The generated wrapper element. - * - * @sample highcharts/members/renderer-arc/ - * Drawing an arc - */ - /** - * Draw and return an arc. Overloaded function that takes arguments object. - * @param {SVGAttributes} attribs Initial SVG attributes. - * @returns {SVGElement} The generated wrapper element. - */ - arc: function(x, y, r, innerR, start, end) { - var arc, - options; - - if (isObject(x)) { - options = x; - y = options.y; - r = options.r; - innerR = options.innerR; - start = options.start; - end = options.end; - x = options.x; - } else { - options = { - innerR: innerR, - start: start, - end: end - }; - } - - // Arcs are defined as symbols for the ability to set - // attributes in attr and animate - arc = this.symbol('arc', x, y, r, r, options); - arc.r = r; // #959 - return arc; - }, - - /** - * Draw and return a rectangle. - * @param {number} [x] Left position. - * @param {number} [y] Top position. - * @param {number} [width] Width of the rectangle. - * @param {number} [height] Height of the rectangle. - * @param {number} [r] Border corner radius. - * @param {number} [strokeWidth] A stroke width can be supplied to allow - * crisp drawing. - * @returns {SVGElement} The generated wrapper element. - */ - /** - * Draw and return a rectangle. - * @param {SVGAttributes} [attributes] - * General SVG attributes for the rectangle. - * @return {SVGElement} - * The generated wrapper element. - * - * @sample highcharts/members/renderer-rect-on-chart/ - * Draw a rectangle in a chart - * @sample highcharts/members/renderer-rect/ - * Draw a rectangle independent from a chart - */ - rect: function(x, y, width, height, r, strokeWidth) { - - r = isObject(x) ? x.r : r; - - var wrapper = this.createElement('rect'), - attribs = isObject(x) ? x : x === undefined ? {} : { - x: x, - y: y, - width: Math.max(width, 0), - height: Math.max(height, 0) - }; - - - if (strokeWidth !== undefined) { - attribs.strokeWidth = strokeWidth; - attribs = wrapper.crisp(attribs); - } - attribs.fill = 'none'; - - - if (r) { - attribs.r = r; - } - - wrapper.rSetter = function(value, key, element) { - attr(element, { - rx: value, - ry: value - }); - }; - - return wrapper.attr(attribs); - }, - - /** - * Resize the {@link SVGRenderer#box} and re-align all aligned child - * elements. - * @param {number} width - * The new pixel width. - * @param {number} height - * The new pixel height. - * @param {Boolean|AnimationOptions} [animate=true] - * Whether and how to animate. - */ - setSize: function(width, height, animate) { - var renderer = this, - alignedObjects = renderer.alignedObjects, - i = alignedObjects.length; - - renderer.width = width; - renderer.height = height; - - renderer.boxWrapper.animate({ - width: width, - height: height - }, { - step: function() { - this.attr({ - viewBox: '0 0 ' + this.attr('width') + ' ' + - this.attr('height') - }); - }, - duration: pick(animate, true) ? undefined : 0 - }); - - while (i--) { - alignedObjects[i].align(); - } - }, - - /** - * Create and return an svg group element. Child - * {@link Highcharts.SVGElement} objects are added to the group by using the - * group as the first parameter - * in {@link Highcharts.SVGElement#add|add()}. - * - * @param {string} [name] The group will be given a class name of - * `highcharts-{name}`. This can be used for styling and scripting. - * @returns {SVGElement} The generated wrapper element. - * - * @sample highcharts/members/renderer-g/ - * Show and hide grouped objects - */ - g: function(name) { - var elem = this.createElement('g'); - return name ? elem.attr({ - 'class': 'highcharts-' + name - }) : elem; - }, - - /** - * Display an image. - * @param {string} src The image source. - * @param {number} [x] The X position. - * @param {number} [y] The Y position. - * @param {number} [width] The image width. If omitted, it defaults to the - * image file width. - * @param {number} [height] The image height. If omitted it defaults to the - * image file height. - * @returns {SVGElement} The generated wrapper element. - * - * @sample highcharts/members/renderer-image-on-chart/ - * Add an image in a chart - * @sample highcharts/members/renderer-image/ - * Add an image independent of a chart - */ - image: function(src, x, y, width, height) { - var attribs = { - preserveAspectRatio: 'none' - }, - elemWrapper; - - // optional properties - if (arguments.length > 1) { - extend(attribs, { - x: x, - y: y, - width: width, - height: height - }); - } - - elemWrapper = this.createElement('image').attr(attribs); - - // set the href in the xlink namespace - if (elemWrapper.element.setAttributeNS) { - elemWrapper.element.setAttributeNS('http://www.w3.org/1999/xlink', - 'href', src); - } else { - // could be exporting in IE - // using href throws "not supported" in ie7 and under, requries - // regex shim to fix later - elemWrapper.element.setAttribute('hc-svg-href', src); - } - return elemWrapper; - }, - - /** - * Draw a symbol out of pre-defined shape paths from - * {@link SVGRenderer#symbols}. - * It is used in Highcharts for point makers, which cake a `symbol` option, - * and label and button backgrounds like in the tooltip and stock flags. - * - * @param {Symbol} symbol - The symbol name. - * @param {number} x - The X coordinate for the top left position. - * @param {number} y - The Y coordinate for the top left position. - * @param {number} width - The pixel width. - * @param {number} height - The pixel height. - * @param {Object} [options] - Additional options, depending on the actual - * symbol drawn. - * @param {number} [options.anchorX] - The anchor X position for the - * `callout` symbol. This is where the chevron points to. - * @param {number} [options.anchorY] - The anchor Y position for the - * `callout` symbol. This is where the chevron points to. - * @param {number} [options.end] - The end angle of an `arc` symbol. - * @param {boolean} [options.open] - Whether to draw `arc` symbol open or - * closed. - * @param {number} [options.r] - The radius of an `arc` symbol, or the - * border radius for the `callout` symbol. - * @param {number} [options.start] - The start angle of an `arc` symbol. - */ - symbol: function(symbol, x, y, width, height, options) { - - var ren = this, - obj, - imageRegex = /^url\((.*?)\)$/, - isImage = imageRegex.test(symbol), - sym = !isImage && (this.symbols[symbol] ? symbol : 'circle'), - - - // get the symbol definition function - symbolFn = sym && this.symbols[sym], - - // check if there's a path defined for this symbol - path = defined(x) && symbolFn && symbolFn.call( - this.symbols, - Math.round(x), - Math.round(y), - width, - height, - options - ), - imageSrc, - centerImage; - - if (symbolFn) { - obj = this.path(path); - - - obj.attr('fill', 'none'); - - - // expando properties for use in animate and attr - extend(obj, { - symbolName: sym, - x: x, - y: y, - width: width, - height: height - }); - if (options) { - extend(obj, options); - } - - - // Image symbols - } else if (isImage) { - - - imageSrc = symbol.match(imageRegex)[1]; - - // Create the image synchronously, add attribs async - obj = this.image(imageSrc); - - // The image width is not always the same as the symbol width. The - // image may be centered within the symbol, as is the case when - // image shapes are used as label backgrounds, for example in flags. - obj.imgwidth = pick( - symbolSizes[imageSrc] && symbolSizes[imageSrc].width, - options && options.width - ); - obj.imgheight = pick( - symbolSizes[imageSrc] && symbolSizes[imageSrc].height, - options && options.height - ); - /** - * Set the size and position - */ - centerImage = function() { - obj.attr({ - width: obj.width, - height: obj.height - }); - }; - - /** - * Width and height setters that take both the image's physical size - * and the label size into consideration, and translates the image - * to center within the label. - */ - each(['width', 'height'], function(key) { - obj[key + 'Setter'] = function(value, key) { - var attribs = {}, - imgSize = this['img' + key], - trans = key === 'width' ? 'translateX' : 'translateY'; - this[key] = value; - if (defined(imgSize)) { - if (this.element) { - this.element.setAttribute(key, imgSize); - } - if (!this.alignByTranslate) { - attribs[trans] = ((this[key] || 0) - imgSize) / 2; - this.attr(attribs); - } - } - }; - }); - - - if (defined(x)) { - obj.attr({ - x: x, - y: y - }); - } - obj.isImg = true; - - if (defined(obj.imgwidth) && defined(obj.imgheight)) { - centerImage(); - } else { - // Initialize image to be 0 size so export will still function - // if there's no cached sizes. - obj.attr({ - width: 0, - height: 0 - }); - - // Create a dummy JavaScript image to get the width and height. - createElement('img', { - onload: function() { - - var chart = charts[ren.chartIndex]; - - // Special case for SVGs on IE11, the width is not - // accessible until the image is part of the DOM - // (#2854). - if (this.width === 0) { - css(this, { - position: 'absolute', - top: '-999em' - }); - doc.body.appendChild(this); - } - - // Center the image - symbolSizes[imageSrc] = { // Cache for next - width: this.width, - height: this.height - }; - obj.imgwidth = this.width; - obj.imgheight = this.height; - - if (obj.element) { - centerImage(); - } - - // Clean up after #2854 workaround. - if (this.parentNode) { - this.parentNode.removeChild(this); - } - - // Fire the load event when all external images are - // loaded - ren.imgCount--; - if (!ren.imgCount && chart && chart.onload) { - chart.onload(); - } - }, - src: imageSrc - }); - this.imgCount++; - } - } - - return obj; - }, - - /** - * @typedef {string} Symbol - * - * Can be one of `arc`, `callout`, `circle`, `diamond`, `square`, - * `triangle`, `triangle-down`. Symbols are used internally for point - * markers, button and label borders and backgrounds, or custom shapes. - * Extendable by adding to {@link SVGRenderer#symbols}. - */ - /** - * An extendable collection of functions for defining symbol paths. - */ - symbols: { - 'circle': function(x, y, w, h) { - // Return a full arc - return this.arc(x + w / 2, y + h / 2, w / 2, h / 2, { - start: 0, - end: Math.PI * 2, - open: false - }); - }, - - 'square': function(x, y, w, h) { - return [ - 'M', x, y, - 'L', x + w, y, - x + w, y + h, - x, y + h, - 'Z' - ]; - }, - - 'triangle': function(x, y, w, h) { - return [ - 'M', x + w / 2, y, - 'L', x + w, y + h, - x, y + h, - 'Z' - ]; - }, - - 'triangle-down': function(x, y, w, h) { - return [ - 'M', x, y, - 'L', x + w, y, - x + w / 2, y + h, - 'Z' - ]; - }, - 'diamond': function(x, y, w, h) { - return [ - 'M', x + w / 2, y, - 'L', x + w, y + h / 2, - x + w / 2, y + h, - x, y + h / 2, - 'Z' - ]; - }, - 'arc': function(x, y, w, h, options) { - var start = options.start, - rx = options.r || w, - ry = options.r || h || w, - proximity = 0.001, - fullCircle = - Math.abs(options.end - options.start - 2 * Math.PI) < - proximity, - // Substract a small number to prevent cos and sin of start and - // end from becoming equal on 360 arcs (related: #1561) - end = options.end - proximity, - innerRadius = options.innerR, - open = pick(options.open, fullCircle), - cosStart = Math.cos(start), - sinStart = Math.sin(start), - cosEnd = Math.cos(end), - sinEnd = Math.sin(end), - // Proximity takes care of rounding errors around PI (#6971) - longArc = options.end - start - Math.PI < proximity ? 0 : 1, - arc; - - arc = [ - 'M', - x + rx * cosStart, - y + ry * sinStart, - 'A', // arcTo - rx, // x radius - ry, // y radius - 0, // slanting - longArc, // long or short arc - 1, // clockwise - x + rx * cosEnd, - y + ry * sinEnd - ]; - - if (defined(innerRadius)) { - arc.push( - open ? 'M' : 'L', - x + innerRadius * cosEnd, - y + innerRadius * sinEnd, - 'A', // arcTo - innerRadius, // x radius - innerRadius, // y radius - 0, // slanting - longArc, // long or short arc - 0, // clockwise - x + innerRadius * cosStart, - y + innerRadius * sinStart - ); - } - - arc.push(open ? '' : 'Z'); // close - return arc; - }, - - /** - * Callout shape used for default tooltips, also used for rounded - * rectangles in VML - */ - callout: function(x, y, w, h, options) { - var arrowLength = 6, - halfDistance = 6, - r = Math.min((options && options.r) || 0, w, h), - safeDistance = r + halfDistance, - anchorX = options && options.anchorX, - anchorY = options && options.anchorY, - path; - - path = [ - 'M', x + r, y, - 'L', x + w - r, y, // top side - 'C', x + w, y, x + w, y, x + w, y + r, // top-right corner - 'L', x + w, y + h - r, // right side - 'C', x + w, y + h, x + w, y + h, x + w - r, y + h, // bottom-rgt - 'L', x + r, y + h, // bottom side - 'C', x, y + h, x, y + h, x, y + h - r, // bottom-left corner - 'L', x, y + r, // left side - 'C', x, y, x, y, x + r, y // top-left corner - ]; - - // Anchor on right side - if (anchorX && anchorX > w) { - - // Chevron - if ( - anchorY > y + safeDistance && - anchorY < y + h - safeDistance - ) { - path.splice(13, 3, - 'L', x + w, anchorY - halfDistance, - x + w + arrowLength, anchorY, - x + w, anchorY + halfDistance, - x + w, y + h - r - ); - - // Simple connector - } else { - path.splice(13, 3, - 'L', x + w, h / 2, - anchorX, anchorY, - x + w, h / 2, - x + w, y + h - r - ); - } - - // Anchor on left side - } else if (anchorX && anchorX < 0) { - - // Chevron - if ( - anchorY > y + safeDistance && - anchorY < y + h - safeDistance - ) { - path.splice(33, 3, - 'L', x, anchorY + halfDistance, - x - arrowLength, anchorY, - x, anchorY - halfDistance, - x, y + r - ); - - // Simple connector - } else { - path.splice(33, 3, - 'L', x, h / 2, - anchorX, anchorY, - x, h / 2, - x, y + r - ); - } - - } else if ( // replace bottom - anchorY && - anchorY > h && - anchorX > x + safeDistance && - anchorX < x + w - safeDistance - ) { - path.splice(23, 3, - 'L', anchorX + halfDistance, y + h, - anchorX, y + h + arrowLength, - anchorX - halfDistance, y + h, - x + r, y + h - ); - - } else if ( // replace top - anchorY && - anchorY < 0 && - anchorX > x + safeDistance && - anchorX < x + w - safeDistance - ) { - path.splice(3, 3, - 'L', anchorX - halfDistance, y, - anchorX, y - arrowLength, - anchorX + halfDistance, y, - w - r, y - ); - } - - return path; - } - }, - - /** - * @typedef {SVGElement} ClipRect - A clipping rectangle that can be applied - * to one or more {@link SVGElement} instances. It is instanciated with the - * {@link SVGRenderer#clipRect} function and applied with the {@link - * SVGElement#clip} function. - * - * @example - * var circle = renderer.circle(100, 100, 100) - * .attr({ fill: 'red' }) - * .add(); - * var clipRect = renderer.clipRect(100, 100, 100, 100); - * - * // Leave only the lower right quarter visible - * circle.clip(clipRect); - */ - /** - * Define a clipping rectangle. The clipping rectangle is later applied - * to {@link SVGElement} objects through the {@link SVGElement#clip} - * function. - * - * @param {String} id - * @param {number} x - * @param {number} y - * @param {number} width - * @param {number} height - * @returns {ClipRect} A clipping rectangle. - * - * @example - * var circle = renderer.circle(100, 100, 100) - * .attr({ fill: 'red' }) - * .add(); - * var clipRect = renderer.clipRect(100, 100, 100, 100); - * - * // Leave only the lower right quarter visible - * circle.clip(clipRect); - */ - clipRect: function(x, y, width, height) { - var wrapper, - id = H.uniqueKey(), - - clipPath = this.createElement('clipPath').attr({ - id: id - }).add(this.defs); - - wrapper = this.rect(x, y, width, height, 0).add(clipPath); - wrapper.id = id; - wrapper.clipPath = clipPath; - wrapper.count = 0; - - return wrapper; - }, - - - - - - /** - * Draw text. The text can contain a subset of HTML, like spans and anchors - * and some basic text styling of these. For more advanced features like - * border and background, use {@link Highcharts.SVGRenderer#label} instead. - * To update the text after render, run `text.attr({ text: 'New text' })`. - * @param {String} str - * The text of (subset) HTML to draw. - * @param {number} x - * The x position of the text's lower left corner. - * @param {number} y - * The y position of the text's lower left corner. - * @param {Boolean} [useHTML=false] - * Use HTML to render the text. - * - * @return {SVGElement} The text object. - * - * @sample highcharts/members/renderer-text-on-chart/ - * Annotate the chart freely - * @sample highcharts/members/renderer-on-chart/ - * Annotate with a border and in response to the data - * @sample highcharts/members/renderer-text/ - * Formatted text - */ - text: function(str, x, y, useHTML) { - - // declare variables - var renderer = this, - wrapper, - attribs = {}; - - if (useHTML && (renderer.allowHTML || !renderer.forExport)) { - return renderer.html(str, x, y); - } - - attribs.x = Math.round(x || 0); // X always needed for line-wrap logic - if (y) { - attribs.y = Math.round(y); - } - if (str || str === 0) { - attribs.text = str; - } - - wrapper = renderer.createElement('text') - .attr(attribs); - - if (!useHTML) { - wrapper.xSetter = function(value, key, element) { - var tspans = element.getElementsByTagName('tspan'), - tspan, - parentVal = element.getAttribute(key), - i; - for (i = 0; i < tspans.length; i++) { - tspan = tspans[i]; - // If the x values are equal, the tspan represents a - // linebreak - if (tspan.getAttribute(key) === parentVal) { - tspan.setAttribute(key, value); - } - } - element.setAttribute(key, value); - }; - } - - return wrapper; - }, - - /** - * Utility to return the baseline offset and total line height from the font - * size. - * - * @param {?string} fontSize The current font size to inspect. If not given, - * the font size will be found from the DOM element. - * @param {SVGElement|SVGDOMElement} [elem] The element to inspect for a - * current font size. - * @returns {Object} An object containing `h`: the line height, `b`: the - * baseline relative to the top of the box, and `f`: the font size. - */ - fontMetrics: function(fontSize, elem) { - var lineHeight, - baseline; - - - fontSize = fontSize || - // When the elem is a DOM element (#5932) - (elem && elem.style && elem.style.fontSize) || - // Fall back on the renderer style default - (this.style && this.style.fontSize); - - - - // Handle different units - if (/px/.test(fontSize)) { - fontSize = pInt(fontSize); - } else if (/em/.test(fontSize)) { - // The em unit depends on parent items - fontSize = parseFloat(fontSize) * - (elem ? this.fontMetrics(null, elem.parentNode).f : 16); - } else { - fontSize = 12; - } - - // Empirical values found by comparing font size and bounding box - // height. Applies to the default font family. - // http://jsfiddle.net/highcharts/7xvn7/ - lineHeight = fontSize < 24 ? fontSize + 3 : Math.round(fontSize * 1.2); - baseline = Math.round(lineHeight * 0.8); - - return { - h: lineHeight, - b: baseline, - f: fontSize - }; - }, - - /** - * Correct X and Y positioning of a label for rotation (#1764). - * - * @private - */ - rotCorr: function(baseline, rotation, alterY) { - var y = baseline; - if (rotation && alterY) { - y = Math.max(y * Math.cos(rotation * deg2rad), 4); - } - return { - x: (-baseline / 3) * Math.sin(rotation * deg2rad), - y: y - }; - }, - - /** - * Draw a label, which is an extended text element with support for border - * and background. Highcharts creates a `g` element with a text and a `path` - * or `rect` inside, to make it behave somewhat like a HTML div. Border and - * background are set through `stroke`, `stroke-width` and `fill` attributes - * using the {@link Highcharts.SVGElement#attr|attr} method. To update the - * text after render, run `label.attr({ text: 'New text' })`. - * - * @param {string} str - * The initial text string or (subset) HTML to render. - * @param {number} x - * The x position of the label's left side. - * @param {number} y - * The y position of the label's top side or baseline, depending on - * the `baseline` parameter. - * @param {String} shape - * The shape of the label's border/background, if any. Defaults to - * `rect`. Other possible values are `callout` or other shapes - * defined in {@link Highcharts.SVGRenderer#symbols}. - * @param {number} anchorX - * In case the `shape` has a pointer, like a flag, this is the - * coordinates it should be pinned to. - * @param {number} anchorY - * In case the `shape` has a pointer, like a flag, this is the - * coordinates it should be pinned to. - * @param {Boolean} baseline - * Whether to position the label relative to the text baseline, - * like {@link Highcharts.SVGRenderer#text|renderer.text}, or to the - * upper border of the rectangle. - * @param {String} className - * Class name for the group. - * - * @return {SVGElement} - * The generated label. - * - * @sample highcharts/members/renderer-label-on-chart/ - * A label on the chart - */ - label: function( - str, - x, - y, - shape, - anchorX, - anchorY, - useHTML, - baseline, - className - ) { - - var renderer = this, - wrapper = renderer.g(className !== 'button' && 'label'), - text = wrapper.text = renderer.text('', 0, 0, useHTML) - .attr({ - zIndex: 1 - }), - box, - bBox, - alignFactor = 0, - padding = 3, - paddingLeft = 0, - width, - height, - wrapperX, - wrapperY, - textAlign, - deferredAttr = {}, - strokeWidth, - baselineOffset, - hasBGImage = /^url\((.*?)\)$/.test(shape), - needsBox = hasBGImage, - getCrispAdjust, - updateBoxSize, - updateTextPadding, - boxAttr; - - if (className) { - wrapper.addClass('highcharts-' + className); - } - - - needsBox = hasBGImage; - getCrispAdjust = function() { - return (strokeWidth || 0) % 2 / 2; - }; - - - - /** - * This function runs after the label is added to the DOM (when the - * bounding box is available), and after the text of the label is - * updated to detect the new bounding box and reflect it in the border - * box. - */ - updateBoxSize = function() { - var style = text.element.style, - crispAdjust, - attribs = {}; - - bBox = ( - (width === undefined || height === undefined || textAlign) && - defined(text.textStr) && - text.getBBox() - ); // #3295 && 3514 box failure when string equals 0 - wrapper.width = ( - (width || bBox.width || 0) + - 2 * padding + - paddingLeft - ); - wrapper.height = (height || bBox.height || 0) + 2 * padding; - - // Update the label-scoped y offset - baselineOffset = padding + - renderer.fontMetrics(style && style.fontSize, text).b; - - - if (needsBox) { - - // Create the border box if it is not already present - if (!box) { - // Symbol definition exists (#5324) - wrapper.box = box = renderer.symbols[shape] || hasBGImage ? - renderer.symbol(shape) : - renderer.rect(); - - box.addClass( // Don't use label className for buttons - (className === 'button' ? '' : 'highcharts-label-box') + - (className ? ' highcharts-' + className + '-box' : '') - ); - - box.add(wrapper); - - crispAdjust = getCrispAdjust(); - attribs.x = crispAdjust; - attribs.y = (baseline ? -baselineOffset : 0) + crispAdjust; - } - - // Apply the box attributes - attribs.width = Math.round(wrapper.width); - attribs.height = Math.round(wrapper.height); - - box.attr(extend(attribs, deferredAttr)); - deferredAttr = {}; - } - }; - - /** - * This function runs after setting text or padding, but only if padding - * is changed - */ - updateTextPadding = function() { - var textX = paddingLeft + padding, - textY; - - // determin y based on the baseline - textY = baseline ? 0 : baselineOffset; - - // compensate for alignment - if ( - defined(width) && - bBox && - (textAlign === 'center' || textAlign === 'right') - ) { - textX += { - center: 0.5, - right: 1 - }[textAlign] * - (width - bBox.width); - } - - // update if anything changed - if (textX !== text.x || textY !== text.y) { - text.attr('x', textX); - if (textY !== undefined) { - text.attr('y', textY); - } - } - - // record current values - text.x = textX; - text.y = textY; - }; - - /** - * Set a box attribute, or defer it if the box is not yet created - * @param {Object} key - * @param {Object} value - */ - boxAttr = function(key, value) { - if (box) { - box.attr(key, value); - } else { - deferredAttr[key] = value; - } - }; - - /** - * After the text element is added, get the desired size of the border - * box and add it before the text in the DOM. - */ - wrapper.onAdd = function() { - text.add(wrapper); - wrapper.attr({ - // Alignment is available now (#3295, 0 not rendered if given - // as a value) - text: (str || str === 0) ? str : '', - x: x, - y: y - }); - - if (box && defined(anchorX)) { - wrapper.attr({ - anchorX: anchorX, - anchorY: anchorY - }); - } - }; - - /* - * Add specific attribute setters. - */ - - // only change local variables - wrapper.widthSetter = function(value) { - width = H.isNumber(value) ? value : null; // width:auto => null - }; - wrapper.heightSetter = function(value) { - height = value; - }; - wrapper['text-alignSetter'] = function(value) { - textAlign = value; - }; - wrapper.paddingSetter = function(value) { - if (defined(value) && value !== padding) { - padding = wrapper.padding = value; - updateTextPadding(); - } - }; - wrapper.paddingLeftSetter = function(value) { - if (defined(value) && value !== paddingLeft) { - paddingLeft = value; - updateTextPadding(); - } - }; - - - // change local variable and prevent setting attribute on the group - wrapper.alignSetter = function(value) { - value = { - left: 0, - center: 0.5, - right: 1 - }[value]; - if (value !== alignFactor) { - alignFactor = value; - // Bounding box exists, means we're dynamically changing - if (bBox) { - wrapper.attr({ - x: wrapperX - }); // #5134 - } - } - }; - - // apply these to the box and the text alike - wrapper.textSetter = function(value) { - if (value !== undefined) { - text.textSetter(value); - } - updateBoxSize(); - updateTextPadding(); - }; - - // apply these to the box but not to the text - wrapper['stroke-widthSetter'] = function(value, key) { - if (value) { - needsBox = true; - } - strokeWidth = this['stroke-width'] = value; - boxAttr(key, value); - }; - - wrapper.strokeSetter = - wrapper.fillSetter = - wrapper.rSetter = function(value, key) { - if (key !== 'r') { - if (key === 'fill' && value) { - needsBox = true; - } - // for animation getter (#6776) - wrapper[key] = value; - } - boxAttr(key, value); - }; - - wrapper.anchorXSetter = function(value, key) { - anchorX = wrapper.anchorX = value; - boxAttr(key, Math.round(value) - getCrispAdjust() - wrapperX); - }; - wrapper.anchorYSetter = function(value, key) { - anchorY = wrapper.anchorY = value; - boxAttr(key, value - wrapperY); - }; - - // rename attributes - wrapper.xSetter = function(value) { - wrapper.x = value; // for animation getter - if (alignFactor) { - value -= alignFactor * ((width || bBox.width) + 2 * padding); - } - wrapperX = Math.round(value); - wrapper.attr('translateX', wrapperX); - }; - wrapper.ySetter = function(value) { - wrapperY = wrapper.y = Math.round(value); - wrapper.attr('translateY', wrapperY); - }; - - // Redirect certain methods to either the box or the text - var baseCss = wrapper.css; - return extend(wrapper, { - /** - * Pick up some properties and apply them to the text instead of the - * wrapper. - * @ignore - */ - css: function(styles) { - if (styles) { - var textStyles = {}; - // Create a copy to avoid altering the original object - // (#537) - styles = merge(styles); - each(wrapper.textProps, function(prop) { - if (styles[prop] !== undefined) { - textStyles[prop] = styles[prop]; - delete styles[prop]; - } - }); - text.css(textStyles); - } - return baseCss.call(wrapper, styles); - }, - /** - * Return the bounding box of the box, not the group. - * @ignore - */ - getBBox: function() { - return { - width: bBox.width + 2 * padding, - height: bBox.height + 2 * padding, - x: bBox.x - padding, - y: bBox.y - padding - }; - }, - - /** - * Apply the shadow to the box. - * @ignore - */ - shadow: function(b) { - if (b) { - updateBoxSize(); - if (box) { - box.shadow(b); - } - } - return wrapper; - }, - - /** - * Destroy and release memory. - * @ignore - */ - destroy: function() { - - // Added by button implementation - removeEvent(wrapper.element, 'mouseenter'); - removeEvent(wrapper.element, 'mouseleave'); - - if (text) { - text = text.destroy(); - } - if (box) { - box = box.destroy(); - } - // Call base implementation to destroy the rest - SVGElement.prototype.destroy.call(wrapper); - - // Release local pointers (#1298) - wrapper = - renderer = - updateBoxSize = - updateTextPadding = - boxAttr = null; - } - }); - } - }); // end SVGRenderer - - - // general renderer - H.Renderer = SVGRenderer; - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - /* eslint max-len: ["warn", 80, 4] */ - var attr = H.attr, - createElement = H.createElement, - css = H.css, - defined = H.defined, - each = H.each, - extend = H.extend, - isFirefox = H.isFirefox, - isMS = H.isMS, - isWebKit = H.isWebKit, - pick = H.pick, - pInt = H.pInt, - SVGElement = H.SVGElement, - SVGRenderer = H.SVGRenderer, - win = H.win, - wrap = H.wrap; - - // Extend SvgElement for useHTML option - extend(SVGElement.prototype, /** @lends SVGElement.prototype */ { - /** - * Apply CSS to HTML elements. This is used in text within SVG rendering and - * by the VML renderer - */ - htmlCss: function(styles) { - var wrapper = this, - element = wrapper.element, - textWidth = styles && element.tagName === 'SPAN' && styles.width; - - if (textWidth) { - delete styles.width; - wrapper.textWidth = textWidth; - wrapper.updateTransform(); - } - if (styles && styles.textOverflow === 'ellipsis') { - styles.whiteSpace = 'nowrap'; - styles.overflow = 'hidden'; - } - wrapper.styles = extend(wrapper.styles, styles); - css(wrapper.element, styles); - - return wrapper; - }, - - /** - * VML and useHTML method for calculating the bounding box based on offsets - * @param {Boolean} refresh Whether to force a fresh value from the DOM or - * to use the cached value. - * - * @return {Object} A hash containing values for x, y, width and height - */ - - htmlGetBBox: function() { - var wrapper = this, - element = wrapper.element; - - return { - x: element.offsetLeft, - y: element.offsetTop, - width: element.offsetWidth, - height: element.offsetHeight - }; - }, - - /** - * VML override private method to update elements based on internal - * properties based on SVG transform - */ - htmlUpdateTransform: function() { - // aligning non added elements is expensive - if (!this.added) { - this.alignOnAdd = true; - return; - } - - var wrapper = this, - renderer = wrapper.renderer, - elem = wrapper.element, - translateX = wrapper.translateX || 0, - translateY = wrapper.translateY || 0, - x = wrapper.x || 0, - y = wrapper.y || 0, - align = wrapper.textAlign || 'left', - alignCorrection = { - left: 0, - center: 0.5, - right: 1 - }[align], - styles = wrapper.styles; - - // apply translate - css(elem, { - marginLeft: translateX, - marginTop: translateY - }); - - - if (wrapper.shadows) { // used in labels/tooltip - each(wrapper.shadows, function(shadow) { - css(shadow, { - marginLeft: translateX + 1, - marginTop: translateY + 1 - }); - }); - } - - - // apply inversion - if (wrapper.inverted) { // wrapper is a group - each(elem.childNodes, function(child) { - renderer.invertChild(child, elem); - }); - } - - if (elem.tagName === 'SPAN') { - - var rotation = wrapper.rotation, - baseline, - textWidth = pInt(wrapper.textWidth), - whiteSpace = styles && styles.whiteSpace, - currentTextTransform = [ - rotation, - align, - elem.innerHTML, - wrapper.textWidth, - wrapper.textAlign - ].join(','); - - // Do the calculations and DOM access only if properties changed - if (currentTextTransform !== wrapper.cTT) { - - - baseline = renderer.fontMetrics(elem.style.fontSize).b; - - // Renderer specific handling of span rotation - if (defined(rotation)) { - wrapper.setSpanRotation( - rotation, - alignCorrection, - baseline - ); - } - - // Reset multiline/ellipsis in order to read width (#4928, - // #5417) - css(elem, { - width: '', - whiteSpace: whiteSpace || 'nowrap' - }); - - // Update textWidth - if ( - elem.offsetWidth > textWidth && - /[ \-]/.test(elem.textContent || elem.innerText) - ) { // #983, #1254 - css(elem, { - width: textWidth + 'px', - display: 'block', - whiteSpace: whiteSpace || 'normal' // #3331 - }); - } - - - wrapper.getSpanCorrection( - elem.offsetWidth, - baseline, - alignCorrection, - rotation, - align - ); - } - - // apply position with correction - css(elem, { - left: (x + (wrapper.xCorr || 0)) + 'px', - top: (y + (wrapper.yCorr || 0)) + 'px' - }); - - // Force reflow in webkit to apply the left and top on useHTML - // element (#1249) - if (isWebKit) { - // Assigned to baseline for lint purpose - baseline = elem.offsetHeight; - } - - // record current text transform - wrapper.cTT = currentTextTransform; - } - }, - - /** - * Set the rotation of an individual HTML span - */ - setSpanRotation: function(rotation, alignCorrection, baseline) { - var rotationStyle = {}, - cssTransformKey = this.renderer.getTransformKey(); - - rotationStyle[cssTransformKey] = rotationStyle.transform = - 'rotate(' + rotation + 'deg)'; - rotationStyle[cssTransformKey + (isFirefox ? 'Origin' : '-origin')] = - rotationStyle.transformOrigin = - (alignCorrection * 100) + '% ' + baseline + 'px'; - css(this.element, rotationStyle); - }, - - /** - * Get the correction in X and Y positioning as the element is rotated. - */ - getSpanCorrection: function(width, baseline, alignCorrection) { - this.xCorr = -width * alignCorrection; - this.yCorr = -baseline; - } - }); - - // Extend SvgRenderer for useHTML option. - extend(SVGRenderer.prototype, /** @lends SVGRenderer.prototype */ { - - getTransformKey: function() { - return isMS && !/Edge/.test(win.navigator.userAgent) ? - '-ms-transform' : - isWebKit ? - '-webkit-transform' : - isFirefox ? - 'MozTransform' : - win.opera ? - '-o-transform' : - ''; - }, - - /** - * Create HTML text node. This is used by the VML renderer as well as the - * SVG renderer through the useHTML option. - * - * @param {String} str - * @param {Number} x - * @param {Number} y - */ - html: function(str, x, y) { - var wrapper = this.createElement('span'), - element = wrapper.element, - renderer = wrapper.renderer, - isSVG = renderer.isSVG, - addSetters = function(element, style) { - // These properties are set as attributes on the SVG group, and - // as identical CSS properties on the div. (#3542) - each(['opacity', 'visibility'], function(prop) { - wrap(element, prop + 'Setter', function( - proceed, - value, - key, - elem - ) { - proceed.call(this, value, key, elem); - style[key] = value; - }); - }); - }; - - // Text setter - wrapper.textSetter = function(value) { - if (value !== element.innerHTML) { - delete this.bBox; - } - this.textStr = value; - element.innerHTML = pick(value, ''); - wrapper.htmlUpdateTransform(); - }; - - // Add setters for the element itself (#4938) - if (isSVG) { // #4938, only for HTML within SVG - addSetters(wrapper, wrapper.element.style); - } - - // Various setters which rely on update transform - wrapper.xSetter = - wrapper.ySetter = - wrapper.alignSetter = - wrapper.rotationSetter = - function(value, key) { - if (key === 'align') { - // Do not overwrite the SVGElement.align method. Same as VML. - key = 'textAlign'; - } - wrapper[key] = value; - wrapper.htmlUpdateTransform(); - }; - - // Set the default attributes - wrapper - .attr({ - text: str, - x: Math.round(x), - y: Math.round(y) - }) - .css({ - - fontFamily: this.style.fontFamily, - fontSize: this.style.fontSize, - - position: 'absolute' - }); - - // Keep the whiteSpace style outside the wrapper.styles collection - element.style.whiteSpace = 'nowrap'; - - // Use the HTML specific .css method - wrapper.css = wrapper.htmlCss; - - // This is specific for HTML within SVG - if (isSVG) { - wrapper.add = function(svgGroupWrapper) { - - var htmlGroup, - container = renderer.box.parentNode, - parentGroup, - parents = []; - - this.parentGroup = svgGroupWrapper; - - // Create a mock group to hold the HTML elements - if (svgGroupWrapper) { - htmlGroup = svgGroupWrapper.div; - if (!htmlGroup) { - - // Read the parent chain into an array and read from top - // down - parentGroup = svgGroupWrapper; - while (parentGroup) { - - parents.push(parentGroup); - - // Move up to the next parent group - parentGroup = parentGroup.parentGroup; - } - - // Ensure dynamically updating position when any parent - // is translated - each(parents.reverse(), function(parentGroup) { - var htmlGroupStyle, - cls = attr(parentGroup.element, 'class'); - - // Common translate setter for X and Y on the HTML - // group. Using CSS transform instead of left and - // right prevents flickering in IE and Edge when - // moving tooltip (#6957). - function translateSetter(value, key) { - parentGroup[key] = value; - - // In IE and Edge, use translate because items - // would flicker below a HTML tooltip (#6957) - if (isMS) { - htmlGroupStyle[renderer.getTransformKey()] = - 'translate(' + ( - parentGroup.x || - parentGroup.translateX - ) + 'px,' + ( - parentGroup.y || - parentGroup.translateY - ) + 'px)'; - - // Otherwise, use left and top. Using translate - // doesn't work well with offline export (#7254, - // #7280) - } else { - if (key === 'translateX') { - htmlGroupStyle.left = value + 'px'; - } else { - htmlGroupStyle.top = value + 'px'; - } - } - - parentGroup.doTransform = true; - } - - if (cls) { - cls = { - className: cls - }; - } // else null - - // Create a HTML div and append it to the parent div - // to emulate the SVG group structure - htmlGroup = - parentGroup.div = - parentGroup.div || createElement('div', cls, { - position: 'absolute', - left: (parentGroup.translateX || 0) + 'px', - top: (parentGroup.translateY || 0) + 'px', - display: parentGroup.display, - opacity: parentGroup.opacity, // #5075 - pointerEvents: ( - parentGroup.styles && - parentGroup.styles.pointerEvents - ) // #5595 - - // the top group is appended to container - }, htmlGroup || container); - - // Shortcut - htmlGroupStyle = htmlGroup.style; - - // Set listeners to update the HTML div's position - // whenever the SVG group position is changed. - extend(parentGroup, { - // (#7287) Pass htmlGroup to use - // the related group - classSetter: (function(htmlGroup) { - return function(value) { - this.element.setAttribute( - 'class', - value - ); - htmlGroup.className = value; - }; - }(htmlGroup)), - on: function() { - if (parents[0].div) { // #6418 - wrapper.on.apply({ - element: parents[0].div - }, - arguments - ); - } - return parentGroup; - }, - translateXSetter: translateSetter, - translateYSetter: translateSetter - }); - addSetters(parentGroup, htmlGroupStyle); - }); - - } - } else { - htmlGroup = container; - } - - htmlGroup.appendChild(element); - - // Shared with VML: - wrapper.added = true; - if (wrapper.alignOnAdd) { - wrapper.htmlUpdateTransform(); - } - - return wrapper; - }; - } - return wrapper; - } - }); - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var color = H.color, - getTZOffset = H.getTZOffset, - isTouchDevice = H.isTouchDevice, - merge = H.merge, - pick = H.pick, - svg = H.svg, - win = H.win; - - /* **************************************************************************** - * Handle the options * - *****************************************************************************/ - /** - * @optionparent - */ - H.defaultOptions = { - - - /** - * An array containing the default colors for the chart's series. When - * all colors are used, new colors are pulled from the start again. - * - * Default colors can also be set on a series or series.type basis, - * see [column.colors](#plotOptions.column.colors), [pie.colors](#plotOptions. - * pie.colors). - * - * In styled mode, the colors option doesn't exist. Instead, colors - * are defined in CSS and applied either through series or point class - * names, or through the [chart.colorCount](#chart.colorCount) option. - * - * - * ### Legacy - * - * In Highcharts 3.x, the default colors were: - * - *
colors: ['#2f7ed8', '#0d233a', '#8bbc21', '#910000', '#1aadce', 
-             *     '#492970', '#f28f43', '#77a1e5', '#c42525', '#a6c96a']
- * - * In Highcharts 2.x, the default colors were: - * - *
colors: ['#4572A7', '#AA4643', '#89A54E', '#80699B', '#3D96AE', 
-             *    '#DB843D', '#92A8CD', '#A47D7C', '#B5CA92']
- * - * @type {Array} - * @sample {highcharts} highcharts/chart/colors/ Assign a global color theme - * @default ["#7cb5ec", "#434348", "#90ed7d", "#f7a35c", "#8085e9", - * "#f15c80", "#e4d354", "#2b908f", "#f45b5b", "#91e8e1"] - */ - colors: '#7cb5ec #434348 #90ed7d #f7a35c #8085e9 #f15c80 #e4d354 #2b908f #f45b5b #91e8e1'.split(' '), - - - - /** - * Styled mode only. Configuration object for adding SVG definitions for - * reusable elements. See [gradients, shadows and patterns](http://www. - * highcharts.com/docs/chart-design-and-style/gradients-shadows-and- - * patterns) for more information and code examples. - * - * @type {Object} - * @since 5.0.0 - * @apioption defs - */ - - /** - * @ignore - */ - symbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'], - lang: { - - /** - * The loading text that appears when the chart is set into the loading - * state following a call to `chart.showLoading`. - * - * @type {String} - * @default Loading... - */ - loading: 'Loading...', - - /** - * An array containing the months names. Corresponds to the `%B` format - * in `Highcharts.dateFormat()`. - * - * @type {Array} - * @default [ "January" , "February" , "March" , "April" , "May" , - * "June" , "July" , "August" , "September" , "October" , - * "November" , "December"] - */ - months: [ - 'January', 'February', 'March', 'April', 'May', 'June', 'July', - 'August', 'September', 'October', 'November', 'December' - ], - - /** - * An array containing the months names in abbreviated form. Corresponds - * to the `%b` format in `Highcharts.dateFormat()`. - * - * @type {Array} - * @default [ "Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , - * "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec"] - */ - shortMonths: [ - 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', - 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' - ], - - /** - * An array containing the weekday names. - * - * @type {Array} - * @default ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", - * "Friday", "Saturday"] - */ - weekdays: [ - 'Sunday', 'Monday', 'Tuesday', 'Wednesday', - 'Thursday', 'Friday', 'Saturday' - ], - - /** - * Short week days, starting Sunday. If not specified, Highcharts uses - * the first three letters of the `lang.weekdays` option. - * - * @type {Array} - * @sample highcharts/lang/shortweekdays/ - * Finnish two-letter abbreviations - * @since 4.2.4 - * @apioption lang.shortWeekdays - */ - - /** - * What to show in a date field for invalid dates. Defaults to an empty - * string. - * - * @type {String} - * @since 4.1.8 - * @product highcharts highstock - * @apioption lang.invalidDate - */ - - /** - * The default decimal point used in the `Highcharts.numberFormat` - * method unless otherwise specified in the function arguments. - * - * @type {String} - * @default . - * @since 1.2.2 - */ - decimalPoint: '.', - - /** - * [Metric prefixes](http://en.wikipedia.org/wiki/Metric_prefix) used - * to shorten high numbers in axis labels. Replacing any of the positions - * with `null` causes the full number to be written. Setting `numericSymbols` - * to `null` disables shortening altogether. - * - * @type {Array} - * @sample {highcharts} highcharts/lang/numericsymbols/ - * Replacing the symbols with text - * @sample {highstock} highcharts/lang/numericsymbols/ - * Replacing the symbols with text - * @default [ "k" , "M" , "G" , "T" , "P" , "E"] - * @since 2.3.0 - */ - numericSymbols: ['k', 'M', 'G', 'T', 'P', 'E'], - - /** - * The magnitude of [numericSymbols](#lang.numericSymbol) replacements. - * Use 10000 for Japanese, Korean and various Chinese locales, which - * use symbols for 10^4, 10^8 and 10^12. - * - * @type {Number} - * @sample highcharts/lang/numericsymbolmagnitude/ - * 10000 magnitude for Japanese - * @default 1000 - * @since 5.0.3 - * @apioption lang.numericSymbolMagnitude - */ - - /** - * The text for the label appearing when a chart is zoomed. - * - * @type {String} - * @default Reset zoom - * @since 1.2.4 - */ - resetZoom: 'Reset zoom', - - /** - * The tooltip title for the label appearing when a chart is zoomed. - * - * @type {String} - * @default Reset zoom level 1:1 - * @since 1.2.4 - */ - resetZoomTitle: 'Reset zoom level 1:1', - - /** - * The default thousands separator used in the `Highcharts.numberFormat` - * method unless otherwise specified in the function arguments. Since - * Highcharts 4.1 it defaults to a single space character, which is - * compatible with ISO and works across Anglo-American and continental - * European languages. - * - * The default is a single space. - * - * @type {String} - * @default - * @since 1.2.2 - */ - thousandsSep: ' ' - }, - - /** - * Global options that don't apply to each chart. These options, like - * the `lang` options, must be set using the `Highcharts.setOptions` - * method. - * - *
Highcharts.setOptions({
-             *     global: {
-             *         useUTC: false
-             *     }
-             * });
- * - */ - global: { - - /** - * Whether to use UTC time for axis scaling, tickmark placement and - * time display in `Highcharts.dateFormat`. Advantages of using UTC - * is that the time displays equally regardless of the user agent's - * time zone settings. Local time can be used when the data is loaded - * in real time or when correct Daylight Saving Time transitions are - * required. - * - * @type {Boolean} - * @sample {highcharts} highcharts/global/useutc-true/ True by default - * @sample {highcharts} highcharts/global/useutc-false/ False - * @default true - */ - useUTC: true - - /** - * A custom `Date` class for advanced date handling. For example, - * [JDate](https://githubcom/tahajahangir/jdate) can be hooked in to - * handle Jalali dates. - * - * @type {Object} - * @since 4.0.4 - * @product highcharts highstock - * @apioption global.Date - */ - - /** - * _Canvg rendering for Android 2.x is removed as of Highcharts 5.0\. - * Use the [libURL](#exporting.libURL) option to configure exporting._ - * - * The URL to the additional file to lazy load for Android 2.x devices. - * These devices don't support SVG, so we download a helper file that - * contains [canvg](http://code.google.com/p/canvg/), its dependency - * rbcolor, and our own CanVG Renderer class. To avoid hotlinking to - * our site, you can install canvas-tools.js on your own server and - * change this option accordingly. - * - * @type {String} - * @deprecated - * @default http://code.highcharts.com/{version}/modules/canvas-tools.js - * @product highcharts highmaps - * @apioption global.canvasToolsURL - */ - - /** - * A callback to return the time zone offset for a given datetime. It - * takes the timestamp in terms of milliseconds since January 1 1970, - * and returns the timezone offset in minutes. This provides a hook - * for drawing time based charts in specific time zones using their - * local DST crossover dates, with the help of external libraries. - * - * @type {Function} - * @see [global.timezoneOffset](#global.timezoneOffset) - * @sample {highcharts} highcharts/global/gettimezoneoffset/ - * Use moment.js to draw Oslo time regardless of browser locale - * @sample {highstock} highcharts/global/gettimezoneoffset/ - * Use moment.js to draw Oslo time regardless of browser locale - * @since 4.1.0 - * @product highcharts highstock - * @apioption global.getTimezoneOffset - */ - - /** - * Requires [moment.js](http://momentjs.com/). If the timezone option - * is specified, it creates a default - * [getTimezoneOffset](#global.getTimezoneOffset) function that looks - * up the specified timezone in moment.js. If moment.js is not included, - * this throws a Highcharts error in the console, but does not crash the - * chart. - * - * @type {String} - * @see [getTimezoneOffset](#global.getTimezoneOffset) - * @sample {highcharts} highcharts/global/timezone/ Europe/Oslo - * @sample {highstock} highcharts/global/timezone/ Europe/Oslo - * @default undefined - * @since 5.0.7 - * @product highcharts highstock - * @apioption global.timezone - */ - - /** - * The timezone offset in minutes. Positive values are west, negative - * values are east of UTC, as in the ECMAScript [getTimezoneOffset](https://developer. - * mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset) - * method. Use this to display UTC based data in a predefined time zone. - * - * @type {Number} - * @see [global.getTimezoneOffset](#global.getTimezoneOffset) - * @sample {highcharts} highcharts/global/timezoneoffset/ - * Timezone offset - * @sample {highstock} highcharts/global/timezoneoffset/ - * Timezone offset - * @default 0 - * @since 3.0.8 - * @product highcharts highstock - * @apioption global.timezoneOffset - */ - }, - chart: { - - /** - * When using multiple axis, the ticks of two or more opposite axes - * will automatically be aligned by adding ticks to the axis or axes - * with the least ticks, as if `tickAmount` were specified. - * - * This can be prevented by setting `alignTicks` to false. If the grid - * lines look messy, it's a good idea to hide them for the secondary - * axis by setting `gridLineWidth` to 0. - * - * @type {Boolean} - * @sample {highcharts} highcharts/chart/alignticks-true/ True by default - * @sample {highcharts} highcharts/chart/alignticks-false/ False - * @sample {highstock} stock/chart/alignticks-true/ - * True by default - * @sample {highstock} stock/chart/alignticks-false/ - * False - * @default true - * @product highcharts highstock - * @apioption chart.alignTicks - */ - - - /** - * Set the overall animation for all chart updating. Animation can be - * disabled throughout the chart by setting it to false here. It can - * be overridden for each individual API method as a function parameter. - * The only animation not affected by this option is the initial series - * animation, see [plotOptions.series.animation](#plotOptions.series. - * animation). - * - * The animation can either be set as a boolean or a configuration - * object. If `true`, it will use the 'swing' jQuery easing and a - * duration of 500 ms. If used as a configuration object, the following - * properties are supported: - * - *
- * - *
duration
- * - *
The duration of the animation in milliseconds.
- * - *
easing
- * - *
A string reference to an easing function set on the `Math` object. - * See [the easing demo](http://jsfiddle.net/gh/get/library/pure/ - * highcharts/highcharts/tree/master/samples/highcharts/plotoptions/ - * series-animation-easing/).
- * - *
- * - * @type {Boolean|Object} - * @sample {highcharts} highcharts/chart/animation-none/ - * Updating with no animation - * @sample {highcharts} highcharts/chart/animation-duration/ - * With a longer duration - * @sample {highcharts} highcharts/chart/animation-easing/ - * With a jQuery UI easing - * @sample {highmaps} maps/chart/animation-none/ - * Updating with no animation - * @sample {highmaps} maps/chart/animation-duration/ - * With a longer duration - * @default true - * @apioption chart.animation - */ - - /** - * A CSS class name to apply to the charts container `div`, allowing - * unique CSS styling for each chart. - * - * @type {String} - * @apioption chart.className - */ - - /** - * Event listeners for the chart. - * - * @apioption chart.events - */ - - /** - * Fires when a series is added to the chart after load time, using - * the `addSeries` method. One parameter, `event`, is passed to the - * function, containing common event information. - * Through `event.options` you can access the series options that was - * passed to the `addSeries` method. Returning false prevents the series - * from being added. - * - * @type {Function} - * @context Chart - * @sample {highcharts} highcharts/chart/events-addseries/ Alert on add series - * @sample {highstock} stock/chart/events-addseries/ Alert on add series - * @since 1.2.0 - * @apioption chart.events.addSeries - */ - - /** - * Fires when clicking on the plot background. One parameter, `event`, - * is passed to the function, containing common event information. - * - * Information on the clicked spot can be found through `event.xAxis` - * and `event.yAxis`, which are arrays containing the axes of each dimension - * and each axis' value at the clicked spot. The primary axes are `event. - * xAxis[0]` and `event.yAxis[0]`. Remember the unit of a datetime axis - * is milliseconds since 1970-01-01 00:00:00. - * - *
click: function(e) {
-                 *     console.log(
-                 *         Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', e.xAxis[0].value),
-                 *         e.yAxis[0].value
-                 *     )
-                 * }
- * - * @type {Function} - * @context Chart - * @sample {highcharts} highcharts/chart/events-click/ - * Alert coordinates on click - * @sample {highcharts} highcharts/chart/events-container/ - * Alternatively, attach event to container - * @sample {highstock} stock/chart/events-click/ - * Alert coordinates on click - * @sample {highstock} highcharts/chart/events-container/ - * Alternatively, attach event to container - * @sample {highmaps} maps/chart/events-click/ - * Record coordinates on click - * @sample {highmaps} highcharts/chart/events-container/ - * Alternatively, attach event to container - * @since 1.2.0 - * @apioption chart.events.click - */ - - - /** - * Fires when the chart is finished loading. Since v4.2.2, it also waits - * for images to be loaded, for example from point markers. One parameter, - * `event`, is passed to the function, containing common event information. - * - * There is also a second parameter to the chart constructor where a - * callback function can be passed to be executed on chart.load. - * - * @type {Function} - * @context Chart - * @sample {highcharts} highcharts/chart/events-load/ - * Alert on chart load - * @sample {highstock} stock/chart/events-load/ - * Alert on chart load - * @sample {highmaps} maps/chart/events-load/ - * Add series on chart load - * @apioption chart.events.load - */ - - /** - * Fires when the chart is redrawn, either after a call to chart.redraw() - * or after an axis, series or point is modified with the `redraw` option - * set to true. One parameter, `event`, is passed to the function, containing common event information. - * - * @type {Function} - * @context Chart - * @sample {highcharts} highcharts/chart/events-redraw/ - * Alert on chart redraw - * @sample {highstock} stock/chart/events-redraw/ - * Alert on chart redraw when adding a series or moving the - * zoomed range - * @sample {highmaps} maps/chart/events-redraw/ - * Set subtitle on chart redraw - * @since 1.2.0 - * @apioption chart.events.redraw - */ - - /** - * Fires after initial load of the chart (directly after the `load` - * event), and after each redraw (directly after the `redraw` event). - * - * @type {Function} - * @context Chart - * @since 5.0.7 - * @apioption chart.events.render - */ - - /** - * Fires when an area of the chart has been selected. Selection is enabled - * by setting the chart's zoomType. One parameter, `event`, is passed - * to the function, containing common event information. The default action for the selection event is to - * zoom the chart to the selected area. It can be prevented by calling - * `event.preventDefault()`. - * - * Information on the selected area can be found through `event.xAxis` - * and `event.yAxis`, which are arrays containing the axes of each dimension - * and each axis' min and max values. The primary axes are `event.xAxis[0]` - * and `event.yAxis[0]`. Remember the unit of a datetime axis is milliseconds - * since 1970-01-01 00:00:00. - * - *
selection: function(event) {
-                 *     // log the min and max of the primary, datetime x-axis
-                 *     console.log(
-                 *         Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', event.xAxis[0].min),
-                 *         Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', event.xAxis[0].max)
-                 *     );
-                 *     // log the min and max of the y axis
-                 *     console.log(event.yAxis[0].min, event.yAxis[0].max);
-                 * }
- * - * @type {Function} - * @sample {highcharts} highcharts/chart/events-selection/ - * Report on selection and reset - * @sample {highcharts} highcharts/chart/events-selection-points/ - * Select a range of points through a drag selection - * @sample {highstock} stock/chart/events-selection/ - * Report on selection and reset - * @sample {highstock} highcharts/chart/events-selection-points/ - * Select a range of points through a drag selection (Highcharts) - * @apioption chart.events.selection - */ - - /** - * The margin between the outer edge of the chart and the plot area. - * The numbers in the array designate top, right, bottom and left - * respectively. Use the options `marginTop`, `marginRight`, - * `marginBottom` and `marginLeft` for shorthand setting of one option. - * - * By default there is no margin. The actual space is dynamically calculated - * from the offset of axis labels, axis title, title, subtitle and legend - * in addition to the `spacingTop`, `spacingRight`, `spacingBottom` - * and `spacingLeft` options. - * - * @type {Array} - * @sample {highcharts} highcharts/chart/margins-zero/ - * Zero margins - * @sample {highstock} stock/chart/margin-zero/ - * Zero margins - * - * @defaults {all} null - * @apioption chart.margin - */ - - /** - * The margin between the bottom outer edge of the chart and the plot - * area. Use this to set a fixed pixel value for the margin as opposed - * to the default dynamic margin. See also `spacingBottom`. - * - * @type {Number} - * @sample {highcharts} highcharts/chart/marginbottom/ - * 100px bottom margin - * @sample {highstock} stock/chart/marginbottom/ - * 100px bottom margin - * @sample {highmaps} maps/chart/margin/ - * 100px margins - * @since 2.0 - * @apioption chart.marginBottom - */ - - /** - * The margin between the left outer edge of the chart and the plot - * area. Use this to set a fixed pixel value for the margin as opposed - * to the default dynamic margin. See also `spacingLeft`. - * - * @type {Number} - * @sample {highcharts} highcharts/chart/marginleft/ - * 150px left margin - * @sample {highstock} stock/chart/marginleft/ - * 150px left margin - * @sample {highmaps} maps/chart/margin/ - * 100px margins - * @default null - * @since 2.0 - * @apioption chart.marginLeft - */ - - /** - * The margin between the right outer edge of the chart and the plot - * area. Use this to set a fixed pixel value for the margin as opposed - * to the default dynamic margin. See also `spacingRight`. - * - * @type {Number} - * @sample {highcharts} highcharts/chart/marginright/ - * 100px right margin - * @sample {highstock} stock/chart/marginright/ - * 100px right margin - * @sample {highmaps} maps/chart/margin/ - * 100px margins - * @default null - * @since 2.0 - * @apioption chart.marginRight - */ - - /** - * The margin between the top outer edge of the chart and the plot area. - * Use this to set a fixed pixel value for the margin as opposed to - * the default dynamic margin. See also `spacingTop`. - * - * @type {Number} - * @sample {highcharts} highcharts/chart/margintop/ 100px top margin - * @sample {highstock} stock/chart/margintop/ - * 100px top margin - * @sample {highmaps} maps/chart/margin/ - * 100px margins - * @default null - * @since 2.0 - * @apioption chart.marginTop - */ - - /** - * Allows setting a key to switch between zooming and panning. Can be - * one of `alt`, `ctrl`, `meta` (the command key on Mac and Windows - * key on Windows) or `shift`. The keys are mapped directly to the key - * properties of the click event argument (`event.altKey`, `event.ctrlKey`, - * `event.metaKey` and `event.shiftKey`). - * - * @validvalue [null, "alt", "ctrl", "meta", "shift"] - * @type {String} - * @since 4.0.3 - * @product highcharts - * @apioption chart.panKey - */ - - /** - * Allow panning in a chart. Best used with [panKey](#chart.panKey) - * to combine zooming and panning. - * - * On touch devices, when the [tooltip.followTouchMove](#tooltip.followTouchMove) - * option is `true` (default), panning requires two fingers. To allow - * panning with one finger, set `followTouchMove` to `false`. - * - * @type {Boolean} - * @sample {highcharts} highcharts/chart/pankey/ Zooming and panning - * @default {highcharts} false - * @default {highstock} true - * @since 4.0.3 - * @product highcharts highstock - * @apioption chart.panning - */ - - - /** - * Equivalent to [zoomType](#chart.zoomType), but for multitouch gestures - * only. By default, the `pinchType` is the same as the `zoomType` setting. - * However, pinching can be enabled separately in some cases, for example - * in stock charts where a mouse drag pans the chart, while pinching - * is enabled. When [tooltip.followTouchMove](#tooltip.followTouchMove) - * is true, pinchType only applies to two-finger touches. - * - * @validvalue ["x", "y", "xy"] - * @type {String} - * @default {highcharts} null - * @default {highstock} x - * @since 3.0 - * @product highcharts highstock - * @apioption chart.pinchType - */ - - /** - * The corner radius of the outer chart border. - * - * @type {Number} - * @sample {highcharts} highcharts/chart/borderradius/ 20px radius - * @sample {highstock} stock/chart/border/ 10px radius - * @sample {highmaps} maps/chart/border/ Border options - * @default 0 - */ - borderRadius: 0, - - - /** - * Alias of `type`. - * - * @validvalue ["line", "spline", "column", "area", "areaspline", "pie"] - * @type {String} - * @deprecated - * @sample {highcharts} highcharts/chart/defaultseriestype/ Bar - * @default line - * @product highcharts - */ - defaultSeriesType: 'line', - - /** - * If true, the axes will scale to the remaining visible series once - * one series is hidden. If false, hiding and showing a series will - * not affect the axes or the other series. For stacks, once one series - * within the stack is hidden, the rest of the stack will close in - * around it even if the axis is not affected. - * - * @type {Boolean} - * @sample {highcharts} highcharts/chart/ignorehiddenseries-true/ - * True by default - * @sample {highcharts} highcharts/chart/ignorehiddenseries-false/ - * False - * @sample {highcharts} highcharts/chart/ignorehiddenseries-true-stacked/ - * True with stack - * @sample {highstock} stock/chart/ignorehiddenseries-true/ - * True by default - * @sample {highstock} stock/chart/ignorehiddenseries-false/ - * False - * @default true - * @since 1.2.0 - * @product highcharts highstock - */ - ignoreHiddenSeries: true, - - - /** - * Whether to invert the axes so that the x axis is vertical and y axis - * is horizontal. When `true`, the x axis is [reversed](#xAxis.reversed) - * by default. - * - * @productdesc {highcharts} - * If a bar series is present in the chart, it will be inverted - * automatically. Inverting the chart doesn't have an effect if there - * are no cartesian series in the chart, or if the chart is - * [polar](#chart.polar). - * - * @type {Boolean} - * @sample {highcharts} highcharts/chart/inverted/ - * Inverted line - * @sample {highstock} stock/navigator/inverted/ - * Inverted stock chart - * @default false - * @product highcharts highstock - * @apioption chart.inverted - */ - - /** - * The distance between the outer edge of the chart and the content, - * like title or legend, or axis title and labels if present. The - * numbers in the array designate top, right, bottom and left respectively. - * Use the options spacingTop, spacingRight, spacingBottom and spacingLeft - * options for shorthand setting of one option. - * - * @type {Array} - * @see [chart.margin](#chart.margin) - * @default [10, 10, 15, 10] - * @since 3.0.6 - */ - spacing: [10, 10, 15, 10], - - /** - * The button that appears after a selection zoom, allowing the user - * to reset zoom. - * - */ - resetZoomButton: { - - /** - * A collection of attributes for the button. The object takes SVG - * attributes like `fill`, `stroke`, `stroke-width` or `r`, the border - * radius. The theme also supports `style`, a collection of CSS properties - * for the text. Equivalent attributes for the hover state are given - * in `theme.states.hover`. - * - * @type {Object} - * @sample {highcharts} highcharts/chart/resetzoombutton-theme/ - * Theming the button - * @sample {highstock} highcharts/chart/resetzoombutton-theme/ - * Theming the button - * @since 2.2 - */ - theme: { - - /** - * The Z index for the reset zoom button. The default value - * places it below the tooltip that has Z index 7. - */ - zIndex: 6 - }, - - /** - * The position of the button. - * - * @type {Object} - * @sample {highcharts} highcharts/chart/resetzoombutton-position/ - * Above the plot area - * @sample {highstock} highcharts/chart/resetzoombutton-position/ - * Above the plot area - * @sample {highmaps} highcharts/chart/resetzoombutton-position/ - * Above the plot area - * @since 2.2 - */ - position: { - - /** - * The horizontal alignment of the button. - * - * @type {String} - */ - align: 'right', - - /** - * The horizontal offset of the button. - * - * @type {Number} - */ - x: -10, - - /** - * The vertical alignment of the button. - * - * @validvalue ["top", "middle", "bottom"] - * @type {String} - * @default top - * @apioption chart.resetZoomButton.position.verticalAlign - */ - - /** - * The vertical offset of the button. - * - * @type {Number} - */ - y: 10 - } - - /** - * What frame the button should be placed related to. Can be either - * `plot` or `chart` - * - * @validvalue ["plot", "chart"] - * @type {String} - * @sample {highcharts} highcharts/chart/resetzoombutton-relativeto/ - * Relative to the chart - * @sample {highstock} highcharts/chart/resetzoombutton-relativeto/ - * Relative to the chart - * @default plot - * @since 2.2 - * @apioption chart.resetZoomButton.relativeTo - */ - }, - - /** - * An explicit width for the chart. By default (when `null`) the width - * is calculated from the offset width of the containing element. - * - * @type {Number} - * @sample {highcharts} highcharts/chart/width/ 800px wide - * @sample {highstock} stock/chart/width/ 800px wide - * @sample {highmaps} maps/chart/size/ Chart with explicit size - * @default null - */ - width: null, - - /** - * An explicit height for the chart. If a _number_, the height is - * given in pixels. If given a _percentage string_ (for example `'56%'`), - * the height is given as the percentage of the actual chart width. - * This allows for preserving the aspect ratio across responsive - * sizes. - * - * By default (when `null`) the height is calculated from the offset - * height of the containing element, or 400 pixels if the containing - * element's height is 0. - * - * @type {Number|String} - * @sample {highcharts} highcharts/chart/height/ - * 500px height - * @sample {highstock} stock/chart/height/ - * 300px height - * @sample {highmaps} maps/chart/size/ - * Chart with explicit size - * @sample highcharts/chart/height-percent/ - * Highcharts with percentage height - * @default null - */ - height: null, - - - - /** - * The color of the outer chart border. - * - * @type {Color} - * @see In styled mode, the stroke is set with the `.highcharts-background` - * class. - * @sample {highcharts} highcharts/chart/bordercolor/ Brown border - * @sample {highstock} stock/chart/border/ Brown border - * @sample {highmaps} maps/chart/border/ Border options - * @default #335cad - */ - borderColor: '#335cad', - - /** - * The pixel width of the outer chart border. - * - * @type {Number} - * @see In styled mode, the stroke is set with the `.highcharts-background` - * class. - * @sample {highcharts} highcharts/chart/borderwidth/ 5px border - * @sample {highstock} stock/chart/border/ - * 2px border - * @sample {highmaps} maps/chart/border/ - * Border options - * @default 0 - * @apioption chart.borderWidth - */ - - /** - * The background color or gradient for the outer chart area. - * - * @type {Color} - * @see In styled mode, the background is set with the `.highcharts-background` class. - * @sample {highcharts} highcharts/chart/backgroundcolor-color/ Color - * @sample {highcharts} highcharts/chart/backgroundcolor-gradient/ Gradient - * @sample {highstock} stock/chart/backgroundcolor-color/ - * Color - * @sample {highstock} stock/chart/backgroundcolor-gradient/ - * Gradient - * @sample {highmaps} maps/chart/backgroundcolor-color/ - * Color - * @sample {highmaps} maps/chart/backgroundcolor-gradient/ - * Gradient - * @default #FFFFFF - */ - backgroundColor: '#ffffff', - - /** - * The background color or gradient for the plot area. - * - * @type {Color} - * @see In styled mode, the plot background is set with the `.highcharts-plot-background` class. - * @sample {highcharts} highcharts/chart/plotbackgroundcolor-color/ - * Color - * @sample {highcharts} highcharts/chart/plotbackgroundcolor-gradient/ - * Gradient - * @sample {highstock} stock/chart/plotbackgroundcolor-color/ - * Color - * @sample {highstock} stock/chart/plotbackgroundcolor-gradient/ - * Gradient - * @sample {highmaps} maps/chart/plotbackgroundcolor-color/ - * Color - * @sample {highmaps} maps/chart/plotbackgroundcolor-gradient/ - * Gradient - * @default null - * @apioption chart.plotBackgroundColor - */ - - - /** - * The URL for an image to use as the plot background. To set an image - * as the background for the entire chart, set a CSS background image - * to the container element. Note that for the image to be applied to - * exported charts, its URL needs to be accessible by the export server. - * - * @type {String} - * @see In styled mode, a plot background image can be set with the - * `.highcharts-plot-background` class and a [custom pattern](http://www. - * highcharts.com/docs/chart-design-and-style/gradients-shadows-and- - * patterns). - * @sample {highcharts} highcharts/chart/plotbackgroundimage/ Skies - * @sample {highstock} stock/chart/plotbackgroundimage/ Skies - * @default null - * @apioption chart.plotBackgroundImage - */ - - /** - * The color of the inner chart or plot area border. - * - * @type {Color} - * @see In styled mode, a plot border stroke can be set with the `. - * highcharts-plot-border` class. - * @sample {highcharts} highcharts/chart/plotbordercolor/ Blue border - * @sample {highstock} stock/chart/plotborder/ Blue border - * @sample {highmaps} maps/chart/plotborder/ Plot border options - * @default #cccccc - */ - plotBorderColor: '#cccccc' - - - /** - * The pixel width of the plot area border. - * - * @type {Number} - * @sample {highcharts} highcharts/chart/plotborderwidth/ 1px border - * @sample {highstock} stock/chart/plotborder/ - * 2px border - * @sample {highmaps} maps/chart/plotborder/ - * Plot border options - * @default 0 - * @apioption chart.plotBorderWidth - */ - - /** - * Whether to apply a drop shadow to the plot area. Requires that - * plotBackgroundColor be set. The shadow can be an object configuration - * containing `color`, `offsetX`, `offsetY`, `opacity` and `width`. - * - * @type {Boolean|Object} - * @sample {highcharts} highcharts/chart/plotshadow/ Plot shadow - * @sample {highstock} stock/chart/plotshadow/ - * Plot shadow - * @sample {highmaps} maps/chart/plotborder/ - * Plot border options - * @default false - * @apioption chart.plotShadow - */ - - /** - * When true, cartesian charts like line, spline, area and column are - * transformed into the polar coordinate system. Requires `highcharts- - * more.js`. - * - * @type {Boolean} - * @default false - * @since 2.3.0 - * @product highcharts - * @apioption chart.polar - */ - - /** - * Whether to reflow the chart to fit the width of the container div - * on resizing the window. - * - * @type {Boolean} - * @sample {highcharts} highcharts/chart/reflow-true/ True by default - * @sample {highcharts} highcharts/chart/reflow-false/ False - * @sample {highstock} stock/chart/reflow-true/ - * True by default - * @sample {highstock} stock/chart/reflow-false/ - * False - * @sample {highmaps} maps/chart/reflow-true/ - * True by default - * @sample {highmaps} maps/chart/reflow-false/ - * False - * @default true - * @since 2.1 - * @apioption chart.reflow - */ - - - - - /** - * The HTML element where the chart will be rendered. If it is a string, - * the element by that id is used. The HTML element can also be passed - * by direct reference, or as the first argument of the chart constructor, - * in which case the option is not needed. - * - * @type {String|Object} - * @sample {highcharts} highcharts/chart/reflow-true/ - * String - * @sample {highcharts} highcharts/chart/renderto-object/ - * Object reference - * @sample {highcharts} highcharts/chart/renderto-jquery/ - * Object reference through jQuery - * @sample {highstock} stock/chart/renderto-string/ - * String - * @sample {highstock} stock/chart/renderto-object/ - * Object reference - * @sample {highstock} stock/chart/renderto-jquery/ - * Object reference through jQuery - * @apioption chart.renderTo - */ - - /** - * The background color of the marker square when selecting (zooming - * in on) an area of the chart. - * - * @type {Color} - * @see In styled mode, the selection marker fill is set with the - * `.highcharts-selection-marker` class. - * @default rgba(51,92,173,0.25) - * @since 2.1.7 - * @apioption chart.selectionMarkerFill - */ - - /** - * Whether to apply a drop shadow to the outer chart area. Requires - * that backgroundColor be set. The shadow can be an object configuration - * containing `color`, `offsetX`, `offsetY`, `opacity` and `width`. - * - * @type {Boolean|Object} - * @sample {highcharts} highcharts/chart/shadow/ Shadow - * @sample {highstock} stock/chart/shadow/ - * Shadow - * @sample {highmaps} maps/chart/border/ - * Chart border and shadow - * @default false - * @apioption chart.shadow - */ - - /** - * Whether to show the axes initially. This only applies to empty charts - * where series are added dynamically, as axes are automatically added - * to cartesian series. - * - * @type {Boolean} - * @sample {highcharts} highcharts/chart/showaxes-false/ False by default - * @sample {highcharts} highcharts/chart/showaxes-true/ True - * @since 1.2.5 - * @product highcharts - * @apioption chart.showAxes - */ - - /** - * The space between the bottom edge of the chart and the content (plot - * area, axis title and labels, title, subtitle or legend in top position). - * - * @type {Number} - * @sample {highcharts} highcharts/chart/spacingbottom/ - * Spacing bottom set to 100 - * @sample {highstock} stock/chart/spacingbottom/ - * Spacing bottom set to 100 - * @sample {highmaps} maps/chart/spacing/ - * Spacing 100 all around - * @default 15 - * @since 2.1 - * @apioption chart.spacingBottom - */ - - /** - * The space between the left edge of the chart and the content (plot - * area, axis title and labels, title, subtitle or legend in top position). - * - * @type {Number} - * @sample {highcharts} highcharts/chart/spacingleft/ - * Spacing left set to 100 - * @sample {highstock} stock/chart/spacingleft/ - * Spacing left set to 100 - * @sample {highmaps} maps/chart/spacing/ - * Spacing 100 all around - * @default 10 - * @since 2.1 - * @apioption chart.spacingLeft - */ - - /** - * The space between the right edge of the chart and the content (plot - * area, axis title and labels, title, subtitle or legend in top - * position). - * - * @type {Number} - * @sample {highcharts} highcharts/chart/spacingright-100/ - * Spacing set to 100 - * @sample {highcharts} highcharts/chart/spacingright-legend/ - * Legend in right position with default spacing - * @sample {highstock} stock/chart/spacingright/ - * Spacing set to 100 - * @sample {highmaps} maps/chart/spacing/ - * Spacing 100 all around - * @default 10 - * @since 2.1 - * @apioption chart.spacingRight - */ - - /** - * The space between the top edge of the chart and the content (plot - * area, axis title and labels, title, subtitle or legend in top - * position). - * - * @type {Number} - * @sample {highcharts} highcharts/chart/spacingtop-100/ - * A top spacing of 100 - * @sample {highcharts} highcharts/chart/spacingtop-10/ - * Floating chart title makes the plot area align to the default - * spacingTop of 10. - * @sample {highstock} stock/chart/spacingtop/ - * A top spacing of 100 - * @sample {highmaps} maps/chart/spacing/ - * Spacing 100 all around - * @default 10 - * @since 2.1 - * @apioption chart.spacingTop - */ - - /** - * Additional CSS styles to apply inline to the container `div`. Note - * that since the default font styles are applied in the renderer, it - * is ignorant of the individual chart options and must be set globally. - * - * @type {CSSObject} - * @see In styled mode, general chart styles can be set with the `.highcharts-root` class. - * @sample {highcharts} highcharts/chart/style-serif-font/ - * Using a serif type font - * @sample {highcharts} highcharts/css/em/ - * Styled mode with relative font sizes - * @sample {highstock} stock/chart/style/ - * Using a serif type font - * @sample {highmaps} maps/chart/style-serif-font/ - * Using a serif type font - * @default {"fontFamily":"\"Lucida Grande\", \"Lucida Sans Unicode\", Verdana, Arial, Helvetica, sans-serif","fontSize":"12px"} - * @apioption chart.style - */ - - /** - * The default series type for the chart. Can be any of the chart types - * listed under [plotOptions](#plotOptions). - * - * @validvalue ["line", "spline", "column", "bar", "area", "areaspline", "pie", "arearange", "areasplinerange", "boxplot", "bubble", "columnrange", "errorbar", "funnel", "gauge", "heatmap", "polygon", "pyramid", "scatter", "solidgauge", "treemap", "waterfall"] - * @type {String} - * @sample {highcharts} highcharts/chart/type-bar/ Bar - * @sample {highstock} stock/chart/type/ - * Areaspline - * @sample {highmaps} maps/chart/type-mapline/ - * Mapline - * @default {highcharts} line - * @default {highstock} line - * @default {highmaps} map - * @since 2.1.0 - * @apioption chart.type - */ - - /** - * Decides in what dimensions the user can zoom by dragging the mouse. - * Can be one of `x`, `y` or `xy`. - * - * @validvalue [null, "x", "y", "xy"] - * @type {String} - * @see [panKey](#chart.panKey) - * @sample {highcharts} highcharts/chart/zoomtype-none/ None by default - * @sample {highcharts} highcharts/chart/zoomtype-x/ X - * @sample {highcharts} highcharts/chart/zoomtype-y/ Y - * @sample {highcharts} highcharts/chart/zoomtype-xy/ Xy - * @sample {highstock} stock/demo/basic-line/ None by default - * @sample {highstock} stock/chart/zoomtype-x/ X - * @sample {highstock} stock/chart/zoomtype-y/ Y - * @sample {highstock} stock/chart/zoomtype-xy/ Xy - * @product highcharts highstock - * @apioption chart.zoomType - */ - }, - - /** - * The chart's main title. - * - * @sample {highmaps} maps/title/title/ Title options demonstrated - */ - title: { - - /** - * The title of the chart. To disable the title, set the `text` to - * `null`. - * - * @type {String} - * @sample {highcharts} highcharts/title/text/ Custom title - * @sample {highstock} stock/chart/title-text/ Custom title - * @default {highcharts|highmaps} Chart title - * @default {highstock} null - */ - text: 'Chart title', - - /** - * The horizontal alignment of the title. Can be one of "left", "center" - * and "right". - * - * @validvalue ["left", "center", "right"] - * @type {String} - * @sample {highcharts} highcharts/title/align/ Aligned to the plot area (x = 70px = margin left - spacing left) - * @sample {highstock} stock/chart/title-align/ Aligned to the plot area (x = 50px = margin left - spacing left) - * @default center - * @since 2.0 - */ - align: 'center', - - /** - * The margin between the title and the plot area, or if a subtitle - * is present, the margin between the subtitle and the plot area. - * - * @type {Number} - * @sample {highcharts} highcharts/title/margin-50/ A chart title margin of 50 - * @sample {highcharts} highcharts/title/margin-subtitle/ The same margin applied with a subtitle - * @sample {highstock} stock/chart/title-margin/ A chart title margin of 50 - * @default 15 - * @since 2.1 - */ - margin: 15, - - /** - * Adjustment made to the title width, normally to reserve space for - * the exporting burger menu. - * - * @type {Number} - * @sample {highcharts} highcharts/title/widthadjust/ Wider menu, greater padding - * @sample {highstock} highcharts/title/widthadjust/ Wider menu, greater padding - * @sample {highmaps} highcharts/title/widthadjust/ Wider menu, greater padding - * @default -44 - * @since 4.2.5 - */ - widthAdjust: -44 - - /** - * When the title is floating, the plot area will not move to make space - * for it. - * - * @type {Boolean} - * @sample {highcharts} highcharts/chart/zoomtype-none/ False by default - * @sample {highcharts} highcharts/title/floating/ - * True - title on top of the plot area - * @sample {highstock} stock/chart/title-floating/ - * True - title on top of the plot area - * @default false - * @since 2.1 - * @apioption title.floating - */ - - /** - * CSS styles for the title. Use this for font styling, but use `align`, - * `x` and `y` for text alignment. - * - * In styled mode, the title style is given in the `.highcharts-title` class. - * - * @type {CSSObject} - * @sample {highcharts} highcharts/title/style/ Custom color and weight - * @sample {highstock} stock/chart/title-style/ Custom color and weight - * @sample highcharts/css/titles/ Styled mode - * @default {highcharts|highmaps} { "color": "#333333", "fontSize": "18px" } - * @default {highstock} { "color": "#333333", "fontSize": "16px" } - * @apioption title.style - */ - - /** - * Whether to [use HTML](http://www.highcharts.com/docs/chart-concepts/labels- - * and-string-formatting#html) to render the text. - * - * @type {Boolean} - * @default false - * @apioption title.useHTML - */ - - /** - * The vertical alignment of the title. Can be one of `"top"`, `"middle"` - * and `"bottom"`. When a value is given, the title behaves as if [floating](#title. - * floating) were `true`. - * - * @validvalue ["top", "middle", "bottom"] - * @type {String} - * @sample {highcharts} highcharts/title/verticalalign/ - * Chart title in bottom right corner - * @sample {highstock} stock/chart/title-verticalalign/ - * Chart title in bottom right corner - * @since 2.1 - * @apioption title.verticalAlign - */ - - /** - * The x position of the title relative to the alignment within chart. - * spacingLeft and chart.spacingRight. - * - * @type {Number} - * @sample {highcharts} highcharts/title/align/ - * Aligned to the plot area (x = 70px = margin left - spacing left) - * @sample {highstock} stock/chart/title-align/ - * Aligned to the plot area (x = 50px = margin left - spacing left) - * @default 0 - * @since 2.0 - * @apioption title.x - */ - - /** - * The y position of the title relative to the alignment within [chart. - * spacingTop](#chart.spacingTop) and [chart.spacingBottom](#chart.spacingBottom). - * By default it depends on the font size. - * - * @type {Number} - * @sample {highcharts} highcharts/title/y/ - * Title inside the plot area - * @sample {highstock} stock/chart/title-verticalalign/ - * Chart title in bottom right corner - * @since 2.0 - * @apioption title.y - */ - - }, - - /** - * The chart's subtitle. This can be used both to display a subtitle below - * the main title, and to display random text anywhere in the chart. The - * subtitle can be updated after chart initialization through the - * `Chart.setTitle` method. - * - * @sample {highmaps} maps/title/subtitle/ Subtitle options demonstrated - */ - subtitle: { - - /** - * The subtitle of the chart. - * - * @type {String} - * @sample {highcharts} highcharts/subtitle/text/ Custom subtitle - * @sample {highcharts} highcharts/subtitle/text-formatted/ Formatted and linked text. - * @sample {highstock} stock/chart/subtitle-text Custom subtitle - * @sample {highstock} stock/chart/subtitle-text-formatted Formatted and linked text. - */ - text: '', - - /** - * The horizontal alignment of the subtitle. Can be one of "left", - * "center" and "right". - * - * @validvalue ["left", "center", "right"] - * @type {String} - * @sample {highcharts} highcharts/subtitle/align/ Footnote at right of plot area - * @sample {highstock} stock/chart/subtitle-footnote Footnote at bottom right of plot area - * @default center - * @since 2.0 - */ - align: 'center', - - /** - * Adjustment made to the subtitle width, normally to reserve space - * for the exporting burger menu. - * - * @type {Number} - * @see [title.widthAdjust](#title.widthAdjust) - * @sample {highcharts} highcharts/title/widthadjust/ Wider menu, greater padding - * @sample {highstock} highcharts/title/widthadjust/ Wider menu, greater padding - * @sample {highmaps} highcharts/title/widthadjust/ Wider menu, greater padding - * @default -44 - * @since 4.2.5 - */ - widthAdjust: -44 - - /** - * When the subtitle is floating, the plot area will not move to make - * space for it. - * - * @type {Boolean} - * @sample {highcharts} highcharts/subtitle/floating/ - * Floating title and subtitle - * @sample {highstock} stock/chart/subtitle-footnote - * Footnote floating at bottom right of plot area - * @default false - * @since 2.1 - * @apioption subtitle.floating - */ - - /** - * CSS styles for the title. - * - * In styled mode, the subtitle style is given in the `.highcharts-subtitle` class. - * - * @type {CSSObject} - * @sample {highcharts} highcharts/subtitle/style/ - * Custom color and weight - * @sample {highcharts} highcharts/css/titles/ - * Styled mode - * @sample {highstock} stock/chart/subtitle-style - * Custom color and weight - * @sample {highstock} highcharts/css/titles/ - * Styled mode - * @sample {highmaps} highcharts/css/titles/ - * Styled mode - * @default { "color": "#666666" } - * @apioption subtitle.style - */ - - /** - * Whether to [use HTML](http://www.highcharts.com/docs/chart-concepts/labels- - * and-string-formatting#html) to render the text. - * - * @type {Boolean} - * @default false - * @apioption subtitle.useHTML - */ - - /** - * The vertical alignment of the title. Can be one of "top", "middle" - * and "bottom". When a value is given, the title behaves as floating. - * - * @validvalue ["top", "middle", "bottom"] - * @type {String} - * @sample {highcharts} highcharts/subtitle/verticalalign/ - * Footnote at the bottom right of plot area - * @sample {highstock} stock/chart/subtitle-footnote - * Footnote at the bottom right of plot area - * @default - * @since 2.1 - * @apioption subtitle.verticalAlign - */ - - /** - * The x position of the subtitle relative to the alignment within chart. - * spacingLeft and chart.spacingRight. - * - * @type {Number} - * @sample {highcharts} highcharts/subtitle/align/ - * Footnote at right of plot area - * @sample {highstock} stock/chart/subtitle-footnote - * Footnote at the bottom right of plot area - * @default 0 - * @since 2.0 - * @apioption subtitle.x - */ - - /** - * The y position of the subtitle relative to the alignment within chart. - * spacingTop and chart.spacingBottom. By default the subtitle is laid - * out below the title unless the title is floating. - * - * @type {Number} - * @sample {highcharts} highcharts/subtitle/verticalalign/ - * Footnote at the bottom right of plot area - * @sample {highstock} stock/chart/subtitle-footnote - * Footnote at the bottom right of plot area - * @default {highcharts} null - * @default {highstock} null - * @default {highmaps} - * @since 2.0 - * @apioption subtitle.y - */ - }, - - /** - * The plotOptions is a wrapper object for config objects for each series - * type. The config objects for each series can also be overridden for - * each series item as given in the series array. - * - * Configuration options for the series are given in three levels. Options - * for all series in a chart are given in the [plotOptions.series](#plotOptions. - * series) object. Then options for all series of a specific type are - * given in the plotOptions of that type, for example plotOptions.line. - * Next, options for one single series are given in [the series array](#series). - * - */ - plotOptions: {}, - - /** - * HTML labels that can be positioned anywhere in the chart area. - * - */ - labels: { - - /** - * A HTML label that can be positioned anywhere in the chart area. - * - * @type {Array} - * @apioption labels.items - */ - - /** - * Inner HTML or text for the label. - * - * @type {String} - * @apioption labels.items.html - */ - - /** - * CSS styles for each label. To position the label, use left and top - * like this: - * - *
style: {
-                 *     left: '100px',
-                 *     top: '100px'
-                 * }
- * - * @type {CSSObject} - * @apioption labels.items.style - */ - - /** - * Shared CSS styles for all labels. - * - * @type {CSSObject} - * @default { "color": "#333333" } - */ - style: { - position: 'absolute', - color: '#333333' - } - }, - - /** - * The legend is a box containing a symbol and name for each series - * item or point item in the chart. Each series (or points in case - * of pie charts) is represented by a symbol and its name in the legend. - * - * It is possible to override the symbol creator function and - * create [custom legend symbols](http://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/studies/legend- - * custom-symbol/). - * - * @productdesc {highmaps} - * A Highmaps legend by default contains one legend item per series, but if - * a `colorAxis` is defined, the axis will be displayed in the legend. - * Either as a gradient, or as multiple legend items for `dataClasses`. - */ - legend: { - - /** - * The background color of the legend. - * - * @type {Color} - * @see In styled mode, the legend background fill can be applied with - * the `.highcharts-legend-box` class. - * @sample {highcharts} highcharts/legend/backgroundcolor/ Yellowish background - * @sample {highstock} stock/legend/align/ Various legend options - * @sample {highmaps} maps/legend/border-background/ Border and background options - * @apioption legend.backgroundColor - */ - - /** - * The width of the drawn border around the legend. - * - * @type {Number} - * @see In styled mode, the legend border stroke width can be applied - * with the `.highcharts-legend-box` class. - * @sample {highcharts} highcharts/legend/borderwidth/ 2px border width - * @sample {highstock} stock/legend/align/ Various legend options - * @sample {highmaps} maps/legend/border-background/ Border and background options - * @default 0 - * @apioption legend.borderWidth - */ - - /** - * Enable or disable the legend. - * - * @type {Boolean} - * @sample {highcharts} highcharts/legend/enabled-false/ Legend disabled - * @sample {highstock} stock/legend/align/ Various legend options - * @sample {highmaps} maps/legend/enabled-false/ Legend disabled - * @default {highstock} false - * @default {highmaps} true - */ - enabled: true, - - /** - * The horizontal alignment of the legend box within the chart area. - * Valid values are `left`, `center` and `right`. - * - * In the case that the legend is aligned in a corner position, the - * `layout` option will determine whether to place it above/below - * or on the side of the plot area. - * - * @validvalue ["left", "center", "right"] - * @type {String} - * @sample {highcharts} highcharts/legend/align/ - * Legend at the right of the chart - * @sample {highstock} stock/legend/align/ - * Various legend options - * @sample {highmaps} maps/legend/alignment/ - * Legend alignment - * @since 2.0 - */ - align: 'center', - - /** - * When the legend is floating, the plot area ignores it and is allowed - * to be placed below it. - * - * @type {Boolean} - * @sample {highcharts} highcharts/legend/floating-false/ False by default - * @sample {highcharts} highcharts/legend/floating-true/ True - * @sample {highmaps} maps/legend/alignment/ Floating legend - * @default false - * @since 2.1 - * @apioption legend.floating - */ - - /** - * The layout of the legend items. Can be one of "horizontal" or "vertical". - * - * @validvalue ["horizontal", "vertical"] - * @type {String} - * @sample {highcharts} highcharts/legend/layout-horizontal/ Horizontal by default - * @sample {highcharts} highcharts/legend/layout-vertical/ Vertical - * @sample {highstock} stock/legend/layout-horizontal/ Horizontal by default - * @sample {highmaps} maps/legend/padding-itemmargin/ Vertical with data classes - * @sample {highmaps} maps/legend/layout-vertical/ Vertical with color axis gradient - * @default horizontal - */ - layout: 'horizontal', - - /** - * In a legend with horizontal layout, the itemDistance defines the - * pixel distance between each item. - * - * @type {Number} - * @sample {highcharts} highcharts/legend/layout-horizontal/ 50px item distance - * @sample {highstock} highcharts/legend/layout-horizontal/ 50px item distance - * @default {highcharts} 20 - * @default {highstock} 20 - * @default {highmaps} 8 - * @since 3.0.3 - * @apioption legend.itemDistance - */ - - /** - * The pixel bottom margin for each legend item. - * - * @type {Number} - * @sample {highcharts} highcharts/legend/padding-itemmargin/ Padding and item margins demonstrated - * @sample {highstock} highcharts/legend/padding-itemmargin/ Padding and item margins demonstrated - * @sample {highmaps} maps/legend/padding-itemmargin/ Padding and item margins demonstrated - * @default 0 - * @since 2.2.0 - * @apioption legend.itemMarginBottom - */ - - /** - * The pixel top margin for each legend item. - * - * @type {Number} - * @sample {highcharts} highcharts/legend/padding-itemmargin/ Padding and item margins demonstrated - * @sample {highstock} highcharts/legend/padding-itemmargin/ Padding and item margins demonstrated - * @sample {highmaps} maps/legend/padding-itemmargin/ Padding and item margins demonstrated - * @default 0 - * @since 2.2.0 - * @apioption legend.itemMarginTop - */ - - /** - * The width for each legend item. This is useful in a horizontal layout - * with many items when you want the items to align vertically. . - * - * @type {Number} - * @sample {highcharts} highcharts/legend/itemwidth-default/ Null by default - * @sample {highcharts} highcharts/legend/itemwidth-80/ 80 for aligned legend items - * @default null - * @since 2.0 - * @apioption legend.itemWidth - */ - - /** - * A [format string](http://www.highcharts.com/docs/chart-concepts/labels- - * and-string-formatting) for each legend label. Available variables - * relates to properties on the series, or the point in case of pies. - * - * @type {String} - * @default {name} - * @since 1.3 - * @apioption legend.labelFormat - */ - - /** - * Callback function to format each of the series' labels. The `this` - * keyword refers to the series object, or the point object in case - * of pie charts. By default the series or point name is printed. - * - * @productdesc {highmaps} - * In Highmaps the context can also be a data class in case - * of a `colorAxis`. - * - * @type {Function} - * @sample {highcharts} highcharts/legend/labelformatter/ Add text - * @sample {highmaps} maps/legend/labelformatter/ Data classes with label formatter - * @context {Series|Point} - */ - labelFormatter: function() { - return this.name; - }, - - /** - * Line height for the legend items. Deprecated as of 2.1\. Instead, - * the line height for each item can be set using itemStyle.lineHeight, - * and the padding between items using itemMarginTop and itemMarginBottom. - * - * @type {Number} - * @sample {highcharts} highcharts/legend/lineheight/ Setting padding - * @default 16 - * @since 2.0 - * @product highcharts - * @apioption legend.lineHeight - */ - - /** - * If the plot area sized is calculated automatically and the legend - * is not floating, the legend margin is the space between the legend - * and the axis labels or plot area. - * - * @type {Number} - * @sample {highcharts} highcharts/legend/margin-default/ 12 pixels by default - * @sample {highcharts} highcharts/legend/margin-30/ 30 pixels - * @default 12 - * @since 2.1 - * @apioption legend.margin - */ - - /** - * Maximum pixel height for the legend. When the maximum height is extended, - * navigation will show. - * - * @type {Number} - * @default undefined - * @since 2.3.0 - * @apioption legend.maxHeight - */ - - /** - * The color of the drawn border around the legend. - * - * @type {Color} - * @see In styled mode, the legend border stroke can be applied with - * the `.highcharts-legend-box` class. - * @sample {highcharts} highcharts/legend/bordercolor/ Brown border - * @sample {highstock} stock/legend/align/ Various legend options - * @sample {highmaps} maps/legend/border-background/ Border and background options - * @default #999999 - */ - borderColor: '#999999', - - /** - * The border corner radius of the legend. - * - * @type {Number} - * @sample {highcharts} highcharts/legend/borderradius-default/ Square by default - * @sample {highcharts} highcharts/legend/borderradius-round/ 5px rounded - * @sample {highmaps} maps/legend/border-background/ Border and background options - * @default 0 - */ - borderRadius: 0, - - /** - * Options for the paging or navigation appearing when the legend - * is overflown. Navigation works well on screen, but not in static - * exported images. One way of working around that is to [increase - * the chart height in export](http://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/legend/navigation- - * enabled-false/). - * - */ - navigation: { - - - /** - * The color for the active up or down arrow in the legend page navigation. - * - * @type {Color} - * @see In styled mode, the active arrow be styled with the `.highcharts-legend-nav-active` class. - * @sample {highcharts} highcharts/legend/navigation/ Legend page navigation demonstrated - * @sample {highstock} highcharts/legend/navigation/ Legend page navigation demonstrated - * @default #003399 - * @since 2.2.4 - */ - activeColor: '#003399', - - /** - * The color of the inactive up or down arrow in the legend page - * navigation. . - * - * @type {Color} - * @see In styled mode, the inactive arrow be styled with the - * `.highcharts-legend-nav-inactive` class. - * @sample {highcharts} highcharts/legend/navigation/ - * Legend page navigation demonstrated - * @sample {highstock} highcharts/legend/navigation/ - * Legend page navigation demonstrated - * @default {highcharts} #cccccc - * @default {highstock} #cccccc - * @default {highmaps} ##cccccc - * @since 2.2.4 - */ - inactiveColor: '#cccccc' - - - /** - * How to animate the pages when navigating up or down. A value of `true` - * applies the default navigation given in the chart.animation option. - * Additional options can be given as an object containing values for - * easing and duration. - * - * @type {Boolean|Object} - * @sample {highcharts} highcharts/legend/navigation/ - * Legend page navigation demonstrated - * @sample {highstock} highcharts/legend/navigation/ - * Legend page navigation demonstrated - * @default true - * @since 2.2.4 - * @apioption legend.navigation.animation - */ - - /** - * The pixel size of the up and down arrows in the legend paging - * navigation. - * - * @type {Number} - * @sample {highcharts} highcharts/legend/navigation/ - * Legend page navigation demonstrated - * @sample {highstock} highcharts/legend/navigation/ - * Legend page navigation demonstrated - * @default 12 - * @since 2.2.4 - * @apioption legend.navigation.arrowSize - */ - - /** - * Whether to enable the legend navigation. In most cases, disabling - * the navigation results in an unwanted overflow. - * - * See also the [adapt chart to legend](http://www.highcharts.com/plugin- - * registry/single/8/Adapt-Chart-To-Legend) plugin for a solution to - * extend the chart height to make room for the legend, optionally in - * exported charts only. - * - * @type {Boolean} - * @default true - * @since 4.2.4 - * @apioption legend.navigation.enabled - */ - - /** - * Text styles for the legend page navigation. - * - * @type {CSSObject} - * @see In styled mode, the navigation items are styled with the - * `.highcharts-legend-navigation` class. - * @sample {highcharts} highcharts/legend/navigation/ - * Legend page navigation demonstrated - * @sample {highstock} highcharts/legend/navigation/ - * Legend page navigation demonstrated - * @since 2.2.4 - * @apioption legend.navigation.style - */ - }, - - /** - * The inner padding of the legend box. - * - * @type {Number} - * @sample {highcharts} highcharts/legend/padding-itemmargin/ - * Padding and item margins demonstrated - * @sample {highstock} highcharts/legend/padding-itemmargin/ - * Padding and item margins demonstrated - * @sample {highmaps} maps/legend/padding-itemmargin/ - * Padding and item margins demonstrated - * @default 8 - * @since 2.2.0 - * @apioption legend.padding - */ - - /** - * Whether to reverse the order of the legend items compared to the - * order of the series or points as defined in the configuration object. - * - * @type {Boolean} - * @see [yAxis.reversedStacks](#yAxis.reversedStacks), - * [series.legendIndex](#series.legendIndex) - * @sample {highcharts} highcharts/legend/reversed/ - * Stacked bar with reversed legend - * @default false - * @since 1.2.5 - * @apioption legend.reversed - */ - - /** - * Whether to show the symbol on the right side of the text rather than - * the left side. This is common in Arabic and Hebraic. - * - * @type {Boolean} - * @sample {highcharts} highcharts/legend/rtl/ Symbol to the right - * @default false - * @since 2.2 - * @apioption legend.rtl - */ - - /** - * CSS styles for the legend area. In the 1.x versions the position - * of the legend area was determined by CSS. In 2.x, the position is - * determined by properties like `align`, `verticalAlign`, `x` and `y`, - * but the styles are still parsed for backwards compatibility. - * - * @type {CSSObject} - * @deprecated - * @product highcharts highstock - * @apioption legend.style - */ - - - - /** - * CSS styles for each legend item. Only a subset of CSS is supported, - * notably those options related to text. The default `textOverflow` - * property makes long texts truncate. Set it to `null` to wrap text - * instead. A `width` property can be added to control the text width. - * - * @type {CSSObject} - * @see In styled mode, the legend items can be styled with the `. - * highcharts-legend-item` class. - * @sample {highcharts} highcharts/legend/itemstyle/ Bold black text - * @sample {highmaps} maps/legend/itemstyle/ Item text styles - * @default { "color": "#333333", "cursor": "pointer", "fontSize": "12px", "fontWeight": "bold", "textOverflow": "ellipsis" } - */ - itemStyle: { - color: '#333333', - fontSize: '12px', - fontWeight: 'bold', - textOverflow: 'ellipsis' - }, - - /** - * CSS styles for each legend item in hover mode. Only a subset of - * CSS is supported, notably those options related to text. Properties - * are inherited from `style` unless overridden here. - * - * @type {CSSObject} - * @see In styled mode, the hovered legend items can be styled with - * the `.highcharts-legend-item:hover` pesudo-class. - * @sample {highcharts} highcharts/legend/itemhoverstyle/ Red on hover - * @sample {highmaps} maps/legend/itemstyle/ Item text styles - * @default { "color": "#000000" } - */ - itemHoverStyle: { - color: '#000000' - }, - - /** - * CSS styles for each legend item when the corresponding series or - * point is hidden. Only a subset of CSS is supported, notably those - * options related to text. Properties are inherited from `style` - * unless overridden here. - * - * @type {CSSObject} - * @see In styled mode, the hidden legend items can be styled with - * the `.highcharts-legend-item-hidden` class. - * @sample {highcharts} highcharts/legend/itemhiddenstyle/ Darker gray color - * @default { "color": "#cccccc" } - */ - itemHiddenStyle: { - color: '#cccccc' - }, - - /** - * Whether to apply a drop shadow to the legend. A `backgroundColor` - * also needs to be applied for this to take effect. The shadow can be - * an object configuration containing `color`, `offsetX`, `offsetY`, - * `opacity` and `width`. - * - * @type {Boolean|Object} - * @sample {highcharts} highcharts/legend/shadow/ - * White background and drop shadow - * @sample {highstock} stock/legend/align/ - * Various legend options - * @sample {highmaps} maps/legend/border-background/ - * Border and background options - * @default false - */ - shadow: false, - - - /** - * Default styling for the checkbox next to a legend item when - * `showCheckbox` is true. - */ - itemCheckboxStyle: { - position: 'absolute', - width: '13px', // for IE precision - height: '13px' - }, - // itemWidth: undefined, - - /** - * When this is true, the legend symbol width will be the same as - * the symbol height, which in turn defaults to the font size of the - * legend items. - * - * @type {Boolean} - * @default true - * @since 5.0.0 - */ - squareSymbol: true, - - /** - * The pixel height of the symbol for series types that use a rectangle - * in the legend. Defaults to the font size of legend items. - * - * @productdesc {highmaps} - * In Highmaps, when the symbol is the gradient of a vertical color - * axis, the height defaults to 200. - * - * @type {Number} - * @sample {highmaps} maps/legend/layout-vertical-sized/ - * Sized vertical gradient - * @sample {highmaps} maps/legend/padding-itemmargin/ - * No distance between data classes - * @since 3.0.8 - * @apioption legend.symbolHeight - */ - - /** - * The border radius of the symbol for series types that use a rectangle - * in the legend. Defaults to half the `symbolHeight`. - * - * @type {Number} - * @sample {highcharts} highcharts/legend/symbolradius/ Round symbols - * @sample {highstock} highcharts/legend/symbolradius/ Round symbols - * @sample {highmaps} highcharts/legend/symbolradius/ Round symbols - * @since 3.0.8 - * @apioption legend.symbolRadius - */ - - /** - * The pixel width of the legend item symbol. When the `squareSymbol` - * option is set, this defaults to the `symbolHeight`, otherwise 16. - * - * @productdesc {highmaps} - * In Highmaps, when the symbol is the gradient of a horizontal color - * axis, the width defaults to 200. - * - * @type {Number} - * @sample {highcharts} highcharts/legend/symbolwidth/ - * Greater symbol width and padding - * @sample {highmaps} maps/legend/padding-itemmargin/ - * Padding and item margins demonstrated - * @sample {highmaps} maps/legend/layout-vertical-sized/ - * Sized vertical gradient - * @apioption legend.symbolWidth - */ - - /** - * Whether to [use HTML](http://www.highcharts.com/docs/chart-concepts/labels- - * and-string-formatting#html) to render the legend item texts. Prior - * to 4.1.7, when using HTML, [legend.navigation](#legend.navigation) - * was disabled. - * - * @type {Boolean} - * @default false - * @apioption legend.useHTML - */ - - /** - * The width of the legend box. - * - * @type {Number} - * @sample {highcharts} highcharts/legend/width/ Aligned to the plot area - * @default null - * @since 2.0 - * @apioption legend.width - */ - - /** - * The pixel padding between the legend item symbol and the legend - * item text. - * - * @type {Number} - * @sample {highcharts} highcharts/legend/symbolpadding/ Greater symbol width and padding - * @default 5 - */ - symbolPadding: 5, - - /** - * The vertical alignment of the legend box. Can be one of `top`, - * `middle` or `bottom`. Vertical position can be further determined - * by the `y` option. - * - * In the case that the legend is aligned in a corner position, the - * `layout` option will determine whether to place it above/below - * or on the side of the plot area. - * - * @validvalue ["top", "middle", "bottom"] - * @type {String} - * @sample {highcharts} highcharts/legend/verticalalign/ Legend 100px from the top of the chart - * @sample {highstock} stock/legend/align/ Various legend options - * @sample {highmaps} maps/legend/alignment/ Legend alignment - * @default bottom - * @since 2.0 - */ - verticalAlign: 'bottom', - // width: undefined, - - /** - * The x offset of the legend relative to its horizontal alignment - * `align` within chart.spacingLeft and chart.spacingRight. Negative - * x moves it to the left, positive x moves it to the right. - * - * @type {Number} - * @sample {highcharts} highcharts/legend/width/ Aligned to the plot area - * @default 0 - * @since 2.0 - */ - x: 0, - - /** - * The vertical offset of the legend relative to it's vertical alignment - * `verticalAlign` within chart.spacingTop and chart.spacingBottom. - * Negative y moves it up, positive y moves it down. - * - * @type {Number} - * @sample {highcharts} highcharts/legend/verticalalign/ Legend 100px from the top of the chart - * @sample {highstock} stock/legend/align/ Various legend options - * @sample {highmaps} maps/legend/alignment/ Legend alignment - * @default 0 - * @since 2.0 - */ - y: 0, - - /** - * A title to be added on top of the legend. - * - * @sample {highcharts} highcharts/legend/title/ Legend title - * @sample {highmaps} maps/legend/alignment/ Legend with title - * @since 3.0 - */ - title: { - /** - * A text or HTML string for the title. - * - * @type {String} - * @default null - * @since 3.0 - * @apioption legend.title.text - */ - - - - /** - * Generic CSS styles for the legend title. - * - * @type {CSSObject} - * @see In styled mode, the legend title is styled with the - * `.highcharts-legend-title` class. - * @default {"fontWeight":"bold"} - * @since 3.0 - */ - style: { - fontWeight: 'bold' - } - - } - }, - - - /** - * The loading options control the appearance of the loading screen - * that covers the plot area on chart operations. This screen only - * appears after an explicit call to `chart.showLoading()`. It is a - * utility for developers to communicate to the end user that something - * is going on, for example while retrieving new data via an XHR connection. - * The "Loading..." text itself is not part of this configuration - * object, but part of the `lang` object. - * - */ - loading: { - - /** - * The duration in milliseconds of the fade out effect. - * - * @type {Number} - * @sample highcharts/loading/hideduration/ Fade in and out over a second - * @default 100 - * @since 1.2.0 - * @apioption loading.hideDuration - */ - - /** - * The duration in milliseconds of the fade in effect. - * - * @type {Number} - * @sample highcharts/loading/hideduration/ Fade in and out over a second - * @default 100 - * @since 1.2.0 - * @apioption loading.showDuration - */ - - - /** - * CSS styles for the loading label `span`. - * - * @type {CSSObject} - * @see In styled mode, the loading label is styled with the - * `.highcharts-legend-loading-inner` class. - * @sample {highcharts|highmaps} highcharts/loading/labelstyle/ Vertically centered - * @sample {highstock} stock/loading/general/ Label styles - * @default { "fontWeight": "bold", "position": "relative", "top": "45%" } - * @since 1.2.0 - */ - labelStyle: { - fontWeight: 'bold', - position: 'relative', - top: '45%' - }, - - /** - * CSS styles for the loading screen that covers the plot area. - * - * @type {CSSObject} - * @see In styled mode, the loading label is styled with the `.highcharts-legend-loading` class. - * @sample {highcharts|highmaps} highcharts/loading/style/ Gray plot area, white text - * @sample {highstock} stock/loading/general/ Gray plot area, white text - * @default { "position": "absolute", "backgroundColor": "#ffffff", "opacity": 0.5, "textAlign": "center" } - * @since 1.2.0 - */ - style: { - position: 'absolute', - backgroundColor: '#ffffff', - opacity: 0.5, - textAlign: 'center' - } - - }, - - - /** - * Options for the tooltip that appears when the user hovers over a - * series or point. - * - */ - tooltip: { - - /** - * Enable or disable the tooltip. - * - * @type {Boolean} - * @sample {highcharts} highcharts/tooltip/enabled/ Disabled - * @sample {highcharts} highcharts/plotoptions/series-point-events-mouseover/ Disable tooltip and show values on chart instead - * @default true - */ - enabled: true, - - /** - * Enable or disable animation of the tooltip. In slow legacy IE browsers - * the animation is disabled by default. - * - * @type {Boolean} - * @default true - * @since 2.3.0 - */ - animation: svg, - - /** - * The radius of the rounded border corners. - * - * @type {Number} - * @sample {highcharts} highcharts/tooltip/bordercolor-default/ 5px by default - * @sample {highcharts} highcharts/tooltip/borderradius-0/ Square borders - * @sample {highmaps} maps/tooltip/background-border/ Background and border demo - * @default 3 - */ - borderRadius: 3, - - /** - * For series on a datetime axes, the date format in the tooltip's - * header will by default be guessed based on the closest data points. - * This member gives the default string representations used for - * each unit. For an overview of the replacement codes, see [dateFormat](#Highcharts. - * dateFormat). - * - * Defaults to: - * - *
{
-                 *     millisecond:"%A, %b %e, %H:%M:%S.%L",
-                 *     second:"%A, %b %e, %H:%M:%S",
-                 *     minute:"%A, %b %e, %H:%M",
-                 *     hour:"%A, %b %e, %H:%M",
-                 *     day:"%A, %b %e, %Y",
-                 *     week:"Week from %A, %b %e, %Y",
-                 *     month:"%B %Y",
-                 *     year:"%Y"
-                 * }
- * - * @type {Object} - * @see [xAxis.dateTimeLabelFormats](#xAxis.dateTimeLabelFormats) - * @product highcharts highstock - */ - dateTimeLabelFormats: { - millisecond: '%A, %b %e, %H:%M:%S.%L', - second: '%A, %b %e, %H:%M:%S', - minute: '%A, %b %e, %H:%M', - hour: '%A, %b %e, %H:%M', - day: '%A, %b %e, %Y', - week: 'Week from %A, %b %e, %Y', - month: '%B %Y', - year: '%Y' - }, - - /** - * A string to append to the tooltip format. - * - * @sample {highcharts} highcharts/tooltip/footerformat/ A table for value alignment - * @sample {highmaps} maps/tooltip/format/ Format demo - * @since 2.2 - */ - footerFormat: '', - - /** - * Padding inside the tooltip, in pixels. - * - * @type {Number} - * @default 8 - * @since 5.0.0 - */ - padding: 8, - - /** - * Proximity snap for graphs or single points. It defaults to 10 for - * mouse-powered devices and 25 for touch devices. - * - * Note that in most cases the whole plot area captures the mouse - * movement, and in these cases `tooltip.snap` doesn't make sense. - * This applies when [stickyTracking](#plotOptions.series.stickyTracking) - * is `true` (default) and when the tooltip is [shared](#tooltip.shared) - * or [split](#tooltip.split). - * - * @type {Number} - * @sample {highcharts} highcharts/tooltip/bordercolor-default/ 10 px by default - * @sample {highcharts} highcharts/tooltip/snap-50/ 50 px on graph - * @default 10/25 - * @since 1.2.0 - * @product highcharts highstock - */ - snap: isTouchDevice ? 25 : 10, - - - /** - * The background color or gradient for the tooltip. - * - * In styled mode, the stroke width is set in the `.highcharts-tooltip-box` class. - * - * @type {Color} - * @sample {highcharts} highcharts/tooltip/backgroundcolor-solid/ Yellowish background - * @sample {highcharts} highcharts/tooltip/backgroundcolor-gradient/ Gradient - * @sample {highcharts} highcharts/css/tooltip-border-background/ Tooltip in styled mode - * @sample {highstock} stock/tooltip/general/ Custom tooltip - * @sample {highstock} highcharts/css/tooltip-border-background/ Tooltip in styled mode - * @sample {highmaps} maps/tooltip/background-border/ Background and border demo - * @sample {highmaps} highcharts/css/tooltip-border-background/ Tooltip in styled mode - * @default rgba(247,247,247,0.85) - */ - backgroundColor: color('#f7f7f7').setOpacity(0.85).get(), - - /** - * The pixel width of the tooltip border. - * - * In styled mode, the stroke width is set in the `.highcharts-tooltip-box` class. - * - * @type {Number} - * @sample {highcharts} highcharts/tooltip/bordercolor-default/ 2px by default - * @sample {highcharts} highcharts/tooltip/borderwidth/ No border (shadow only) - * @sample {highcharts} highcharts/css/tooltip-border-background/ Tooltip in styled mode - * @sample {highstock} stock/tooltip/general/ Custom tooltip - * @sample {highstock} highcharts/css/tooltip-border-background/ Tooltip in styled mode - * @sample {highmaps} maps/tooltip/background-border/ Background and border demo - * @sample {highmaps} highcharts/css/tooltip-border-background/ Tooltip in styled mode - * @default 1 - */ - borderWidth: 1, - - /** - * The HTML of the tooltip header line. Variables are enclosed by - * curly brackets. Available variables are `point.key`, `series.name`, - * `series.color` and other members from the `point` and `series` - * objects. The `point.key` variable contains the category name, x - * value or datetime string depending on the type of axis. For datetime - * axes, the `point.key` date format can be set using tooltip.xDateFormat. - * - * @type {String} - * @sample {highcharts} highcharts/tooltip/footerformat/ - * A HTML table in the tooltip - * @sample {highstock} highcharts/tooltip/footerformat/ - * A HTML table in the tooltip - * @sample {highmaps} maps/tooltip/format/ Format demo - */ - headerFormat: '{point.key}
', - - /** - * The HTML of the point's line in the tooltip. Variables are enclosed - * by curly brackets. Available variables are point.x, point.y, series. - * name and series.color and other properties on the same form. Furthermore, - * point.y can be extended by the `tooltip.valuePrefix` and `tooltip. - * valueSuffix` variables. This can also be overridden for each series, - * which makes it a good hook for displaying units. - * - * In styled mode, the dot is colored by a class name rather - * than the point color. - * - * @type {String} - * @sample {highcharts} highcharts/tooltip/pointformat/ A different point format with value suffix - * @sample {highmaps} maps/tooltip/format/ Format demo - * @default \u25CF {series.name}: {point.y}
- * @since 2.2 - */ - pointFormat: '\u25CF {series.name}: {point.y}
', - - /** - * Whether to apply a drop shadow to the tooltip. - * - * @type {Boolean} - * @sample {highcharts} highcharts/tooltip/bordercolor-default/ True by default - * @sample {highcharts} highcharts/tooltip/shadow/ False - * @sample {highmaps} maps/tooltip/positioner/ Fixed tooltip position, border and shadow disabled - * @default true - */ - shadow: true, - - /** - * CSS styles for the tooltip. The tooltip can also be styled through - * the CSS class `.highcharts-tooltip`. - * - * @type {CSSObject} - * @sample {highcharts} highcharts/tooltip/style/ Greater padding, bold text - * @default { "color": "#333333", "cursor": "default", "fontSize": "12px", "pointerEvents": "none", "whiteSpace": "nowrap" } - */ - style: { - color: '#333333', - cursor: 'default', - fontSize: '12px', - pointerEvents: 'none', // #1686 http://caniuse.com/#feat=pointer-events - whiteSpace: 'nowrap' - } - - - - /** - * The color of the tooltip border. When `null`, the border takes the - * color of the corresponding series or point. - * - * @type {Color} - * @sample {highcharts} highcharts/tooltip/bordercolor-default/ - * Follow series by default - * @sample {highcharts} highcharts/tooltip/bordercolor-black/ - * Black border - * @sample {highstock} stock/tooltip/general/ - * Styled tooltip - * @sample {highmaps} maps/tooltip/background-border/ - * Background and border demo - * @default null - * @apioption tooltip.borderColor - */ - - /** - * Since 4.1, the crosshair definitions are moved to the Axis object - * in order for a better separation from the tooltip. See [xAxis.crosshair](#xAxis. - * crosshair). - * - * @type {Mixed} - * @deprecated - * @sample {highcharts} highcharts/tooltip/crosshairs-x/ - * Enable a crosshair for the x value - * @default true - * @apioption tooltip.crosshairs - */ - - /** - * Whether the tooltip should follow the mouse as it moves across columns, - * pie slices and other point types with an extent. By default it behaves - * this way for scatter, bubble and pie series by override in the `plotOptions` - * for those series types. - * - * For touch moves to behave the same way, [followTouchMove](#tooltip. - * followTouchMove) must be `true` also. - * - * @type {Boolean} - * @default {highcharts} false - * @default {highstock} false - * @default {highmaps} true - * @since 3.0 - * @apioption tooltip.followPointer - */ - - /** - * Whether the tooltip should follow the finger as it moves on a touch - * device. If this is `true` and [chart.panning](#chart.panning) is - * set,`followTouchMove` will take over one-finger touches, so the user - * needs to use two fingers for zooming and panning. - * - * @type {Boolean} - * @default {highcharts} true - * @default {highstock} true - * @default {highmaps} false - * @since 3.0.1 - * @apioption tooltip.followTouchMove - */ - - /** - * Callback function to format the text of the tooltip from scratch. Return - * `false` to disable tooltip for a specific point on series. - * - * A subset of HTML is supported. Unless `useHTML` is true, the HTML of the - * tooltip is parsed and converted to SVG, therefore this isn't a complete HTML - * renderer. The following tags are supported: ``, ``, ``, ``, - * `
`, ``. Spans can be styled with a `style` attribute, - * but only text-related CSS that is shared with SVG is handled. - * - * Since version 2.1 the tooltip can be shared between multiple series - * through the `shared` option. The available data in the formatter - * differ a bit depending on whether the tooltip is shared or not. In - * a shared tooltip, all properties except `x`, which is common for - * all points, are kept in an array, `this.points`. - * - * Available data are: - * - *
- * - *
this.percentage (not shared) / this.points[i].percentage (shared)
- * - *
Stacked series and pies only. The point's percentage of the total. - *
- * - *
this.point (not shared) / this.points[i].point (shared)
- * - *
The point object. The point name, if defined, is available through - * `this.point.name`.
- * - *
this.points
- * - *
In a shared tooltip, this is an array containing all other properties - * for each point.
- * - *
this.series (not shared) / this.points[i].series (shared)
- * - *
The series object. The series name is available through - * `this.series.name`.
- * - *
this.total (not shared) / this.points[i].total (shared)
- * - *
Stacked series only. The total value at this point's x value. - *
- * - *
this.x
- * - *
The x value. This property is the same regardless of the tooltip - * being shared or not.
- * - *
this.y (not shared) / this.points[i].y (shared)
- * - *
The y value.
- * - *
- * - * @type {Function} - * @sample {highcharts} highcharts/tooltip/formatter-simple/ - * Simple string formatting - * @sample {highcharts} highcharts/tooltip/formatter-shared/ - * Formatting with shared tooltip - * @sample {highstock} stock/tooltip/formatter/ - * Formatting with shared tooltip - * @sample {highmaps} maps/tooltip/formatter/ - * String formatting - * @apioption tooltip.formatter - */ - - /** - * The number of milliseconds to wait until the tooltip is hidden when - * mouse out from a point or chart. - * - * @type {Number} - * @default 500 - * @since 3.0 - * @apioption tooltip.hideDelay - */ - - /** - * A callback function for formatting the HTML output for a single point - * in the tooltip. Like the `pointFormat` string, but with more flexibility. - * - * @type {Function} - * @context Point - * @since 4.1.0 - * @apioption tooltip.pointFormatter - */ - - /** - * A callback function to place the tooltip in a default position. The - * callback receives three parameters: `labelWidth`, `labelHeight` and - * `point`, where point contains values for `plotX` and `plotY` telling - * where the reference point is in the plot area. Add `chart.plotLeft` - * and `chart.plotTop` to get the full coordinates. - * - * The return should be an object containing x and y values, for example - * `{ x: 100, y: 100 }`. - * - * @type {Function} - * @sample {highcharts} highcharts/tooltip/positioner/ A fixed tooltip position - * @sample {highstock} stock/tooltip/positioner/ A fixed tooltip position on top of the chart - * @sample {highmaps} maps/tooltip/positioner/ A fixed tooltip position - * @since 2.2.4 - * @apioption tooltip.positioner - */ - - /** - * The name of a symbol to use for the border around the tooltip. - * - * @type {String} - * @default callout - * @validvalue ["callout", "square"] - * @since 4.0 - * @apioption tooltip.shape - */ - - /** - * When the tooltip is shared, the entire plot area will capture mouse - * movement or touch events. Tooltip texts for series types with ordered - * data (not pie, scatter, flags etc) will be shown in a single bubble. - * This is recommended for single series charts and for tablet/mobile - * optimized charts. - * - * See also [tooltip.split](#tooltip.split), that is better suited for - * charts with many series, especially line-type series. - * - * @type {Boolean} - * @sample {highcharts} highcharts/tooltip/shared-false/ False by default - * @sample {highcharts} highcharts/tooltip/shared-true/ True - * @sample {highcharts} highcharts/tooltip/shared-x-crosshair/ True with x axis crosshair - * @sample {highcharts} highcharts/tooltip/shared-true-mixed-types/ True with mixed series types - * @default false - * @since 2.1 - * @product highcharts highstock - * @apioption tooltip.shared - */ - - /** - * Split the tooltip into one label per series, with the header close - * to the axis. This is recommended over [shared](#tooltip.shared) tooltips - * for charts with multiple line series, generally making them easier - * to read. - * - * @productdesc {highstock} In Highstock, tooltips are split by default - * since v6.0.0. Stock charts typically contain multi-dimension points - * and multiple panes, making split tooltips the preferred layout over - * the previous `shared` tooltip. - * - * @type {Boolean} - * @sample {highcharts} highcharts/tooltip/split/ Split tooltip - * @sample {highstock} highcharts/tooltip/split/ Split tooltip - * @sample {highmaps} highcharts/tooltip/split/ Split tooltip - * @default {highcharts} false - * @default {highstock} true - * @product highcharts highstock - * @since 5.0.0 - * @apioption tooltip.split - */ - - /** - * Use HTML to render the contents of the tooltip instead of SVG. Using - * HTML allows advanced formatting like tables and images in the tooltip. - * It is also recommended for rtl languages as it works around rtl - * bugs in early Firefox. - * - * @type {Boolean} - * @sample {highcharts} highcharts/tooltip/footerformat/ A table for value alignment - * @sample {highcharts} highcharts/tooltip/fullhtml/ Full HTML tooltip - * @sample {highstock} highcharts/tooltip/footerformat/ A table for value alignment - * @sample {highstock} highcharts/tooltip/fullhtml/ Full HTML tooltip - * @sample {highmaps} maps/tooltip/usehtml/ Pure HTML tooltip - * @default false - * @since 2.2 - * @apioption tooltip.useHTML - */ - - /** - * How many decimals to show in each series' y value. This is overridable - * in each series' tooltip options object. The default is to preserve - * all decimals. - * - * @type {Number} - * @sample {highcharts} highcharts/tooltip/valuedecimals/ Set decimals, prefix and suffix for the value - * @sample {highstock} highcharts/tooltip/valuedecimals/ Set decimals, prefix and suffix for the value - * @sample {highmaps} maps/tooltip/valuedecimals/ Set decimals, prefix and suffix for the value - * @since 2.2 - * @apioption tooltip.valueDecimals - */ - - /** - * A string to prepend to each series' y value. Overridable in each - * series' tooltip options object. - * - * @type {String} - * @sample {highcharts} highcharts/tooltip/valuedecimals/ Set decimals, prefix and suffix for the value - * @sample {highstock} highcharts/tooltip/valuedecimals/ Set decimals, prefix and suffix for the value - * @sample {highmaps} maps/tooltip/valuedecimals/ Set decimals, prefix and suffix for the value - * @since 2.2 - * @apioption tooltip.valuePrefix - */ - - /** - * A string to append to each series' y value. Overridable in each series' - * tooltip options object. - * - * @type {String} - * @sample {highcharts} highcharts/tooltip/valuedecimals/ Set decimals, prefix and suffix for the value - * @sample {highstock} highcharts/tooltip/valuedecimals/ Set decimals, prefix and suffix for the value - * @sample {highmaps} maps/tooltip/valuedecimals/ Set decimals, prefix and suffix for the value - * @since 2.2 - * @apioption tooltip.valueSuffix - */ - - /** - * The format for the date in the tooltip header if the X axis is a - * datetime axis. The default is a best guess based on the smallest - * distance between points in the chart. - * - * @type {String} - * @sample {highcharts} highcharts/tooltip/xdateformat/ A different format - * @product highcharts highstock - * @apioption tooltip.xDateFormat - */ - }, - - - /** - * Highchart by default puts a credits label in the lower right corner - * of the chart. This can be changed using these options. - */ - credits: { - - /** - * Whether to show the credits text. - * - * @type {Boolean} - * @sample {highcharts} highcharts/credits/enabled-false/ Credits disabled - * @sample {highstock} stock/credits/enabled/ Credits disabled - * @sample {highmaps} maps/credits/enabled-false/ Credits disabled - * @default true - */ - enabled: true, - - /** - * The URL for the credits label. - * - * @type {String} - * @sample {highcharts} highcharts/credits/href/ Custom URL and text - * @sample {highmaps} maps/credits/customized/ Custom URL and text - * @default {highcharts} http://www.highcharts.com - * @default {highstock} "http://www.highcharts.com" - * @default {highmaps} http://www.highcharts.com - */ - href: 'http://www.highcharts.com', - - /** - * Position configuration for the credits label. - * - * @type {Object} - * @sample {highcharts} highcharts/credits/position-left/ Left aligned - * @sample {highcharts} highcharts/credits/position-left/ Left aligned - * @sample {highmaps} maps/credits/customized/ Left aligned - * @sample {highmaps} maps/credits/customized/ Left aligned - * @since 2.1 - */ - position: { - - /** - * Horizontal alignment of the credits. - * - * @validvalue ["left", "center", "right"] - * @type {String} - * @default right - */ - align: 'right', - - /** - * Horizontal pixel offset of the credits. - * - * @type {Number} - * @default -10 - */ - x: -10, - - /** - * Vertical alignment of the credits. - * - * @validvalue ["top", "middle", "bottom"] - * @type {String} - * @default bottom - */ - verticalAlign: 'bottom', - - /** - * Vertical pixel offset of the credits. - * - * @type {Number} - * @default -5 - */ - y: -5 - }, - - - /** - * CSS styles for the credits label. - * - * @type {CSSObject} - * @see In styled mode, credits styles can be set with the - * `.highcharts-credits` class. - * @default { "cursor": "pointer", "color": "#999999", "fontSize": "10px" } - */ - style: { - cursor: 'pointer', - color: '#999999', - fontSize: '9px' - }, - - - /** - * The text for the credits label. - * - * @productdesc {highmaps} - * If a map is loaded as GeoJSON, the text defaults to `Highcharts @ - * {map-credits}`. Otherwise, it defaults to `Highcharts.com`. - * - * @type {String} - * @sample {highcharts} highcharts/credits/href/ Custom URL and text - * @sample {highmaps} maps/credits/customized/ Custom URL and text - * @default {highcharts|highstock} Highcharts.com - */ - text: 'Highcharts.com' - } - }; - - - - /** - * Sets the getTimezoneOffset function. If the timezone option is set, a default - * getTimezoneOffset function with that timezone is returned. If not, the - * specified getTimezoneOffset function is returned. If neither are specified, - * undefined is returned. - * @return {function} a getTimezoneOffset function or undefined - */ - function getTimezoneOffsetOption() { - var globalOptions = H.defaultOptions.global, - moment = win.moment; - - if (globalOptions.timezone) { - if (!moment) { - // getTimezoneOffset-function stays undefined because it depends on - // Moment.js - H.error(25); - - } else { - return function(timestamp) { - return -moment.tz( - timestamp, - globalOptions.timezone - ).utcOffset(); - }; - } - } - - // If not timezone is set, look for the getTimezoneOffset callback - return globalOptions.useUTC && globalOptions.getTimezoneOffset; - } - - /** - * Set the time methods globally based on the useUTC option. Time method can be - * either local time or UTC (default). It is called internally on initiating - * Highcharts and after running `Highcharts.setOptions`. - * - * @private - */ - function setTimeMethods() { - var globalOptions = H.defaultOptions.global, - Date, - useUTC = globalOptions.useUTC, - GET = useUTC ? 'getUTC' : 'get', - SET = useUTC ? 'setUTC' : 'set', - setters = ['Minutes', 'Hours', 'Day', 'Date', 'Month', 'FullYear'], - getters = setters.concat(['Milliseconds', 'Seconds']), - n; - - H.Date = Date = globalOptions.Date || win.Date; // Allow using a different Date class - Date.hcTimezoneOffset = useUTC && globalOptions.timezoneOffset; - Date.hcGetTimezoneOffset = getTimezoneOffsetOption(); - Date.hcHasTimeZone = !!(Date.hcTimezoneOffset || Date.hcGetTimezoneOffset); - Date.hcMakeTime = function(year, month, date, hours, minutes, seconds) { - var d; - if (useUTC) { - d = Date.UTC.apply(0, arguments); - d += getTZOffset(d); - } else { - d = new Date( - year, - month, - pick(date, 1), - pick(hours, 0), - pick(minutes, 0), - pick(seconds, 0) - ).getTime(); - } - return d; - }; - - // Dynamically set setters and getters. Use for loop, H.each is not yet - // overridden in oldIE. - for (n = 0; n < setters.length; n++) { - Date['hcGet' + setters[n]] = GET + setters[n]; - } - for (n = 0; n < getters.length; n++) { - Date['hcSet' + getters[n]] = SET + getters[n]; - } - } - - /** - * Merge the default options with custom options and return the new options - * structure. Commonly used for defining reusable templates. - * - * @function #setOptions - * @memberOf Highcharts - * @sample highcharts/global/useutc-false Setting a global option - * @sample highcharts/members/setoptions Applying a global theme - * @param {Object} options The new custom chart options. - * @returns {Object} Updated options. - */ - H.setOptions = function(options) { - - // Copy in the default options - H.defaultOptions = merge(true, H.defaultOptions, options); - - // Apply UTC - setTimeMethods(); - - return H.defaultOptions; - }; - - /** - * Get the updated default options. Until 3.0.7, merely exposing defaultOptions for outside modules - * wasn't enough because the setOptions method created a new object. - */ - H.getOptions = function() { - return H.defaultOptions; - }; - - - // Series defaults - H.defaultPlotOptions = H.defaultOptions.plotOptions; - - // set the default time methods - setTimeMethods(); - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var correctFloat = H.correctFloat, - defined = H.defined, - destroyObjectProperties = H.destroyObjectProperties, - isNumber = H.isNumber, - merge = H.merge, - pick = H.pick, - deg2rad = H.deg2rad; - - /** - * The Tick class - */ - H.Tick = function(axis, pos, type, noLabel) { - this.axis = axis; - this.pos = pos; - this.type = type || ''; - this.isNew = true; - this.isNewLabel = true; - - if (!type && !noLabel) { - this.addLabel(); - } - }; - - H.Tick.prototype = { - /** - * Write the tick label - */ - addLabel: function() { - var tick = this, - axis = tick.axis, - options = axis.options, - chart = axis.chart, - categories = axis.categories, - names = axis.names, - pos = tick.pos, - labelOptions = options.labels, - str, - tickPositions = axis.tickPositions, - isFirst = pos === tickPositions[0], - isLast = pos === tickPositions[tickPositions.length - 1], - value = categories ? - pick(categories[pos], names[pos], pos) : - pos, - label = tick.label, - tickPositionInfo = tickPositions.info, - dateTimeLabelFormat; - - // Set the datetime label format. If a higher rank is set for this - // position, use that. If not, use the general format. - if (axis.isDatetimeAxis && tickPositionInfo) { - dateTimeLabelFormat = - options.dateTimeLabelFormats[ - tickPositionInfo.higherRanks[pos] || - tickPositionInfo.unitName - ]; - } - // set properties for access in render method - tick.isFirst = isFirst; - tick.isLast = isLast; - - // get the string - str = axis.labelFormatter.call({ - axis: axis, - chart: chart, - isFirst: isFirst, - isLast: isLast, - dateTimeLabelFormat: dateTimeLabelFormat, - value: axis.isLog ? correctFloat(axis.lin2log(value)) : value, - pos: pos - }); - - // first call - if (!defined(label)) { - - tick.label = label = - defined(str) && labelOptions.enabled ? - chart.renderer.text( - str, - 0, - 0, - labelOptions.useHTML - ) - - // without position absolute, IE export sometimes is - // wrong. - .css(merge(labelOptions.style)) - - .add(axis.labelGroup) : - null; - - // Un-rotated length - tick.labelLength = label && label.getBBox().width; - // Base value to detect change for new calls to getBBox - tick.rotation = 0; - - // update - } else if (label) { - label.attr({ - text: str - }); - } - }, - - /** - * Get the offset height or width of the label - */ - getLabelSize: function() { - return this.label ? - this.label.getBBox()[this.axis.horiz ? 'height' : 'width'] : - 0; - }, - - /** - * Handle the label overflow by adjusting the labels to the left and right - * edge, or hide them if they collide into the neighbour label. - */ - handleOverflow: function(xy) { - var axis = this.axis, - labelOptions = axis.options.labels, - pxPos = xy.x, - chartWidth = axis.chart.chartWidth, - spacing = axis.chart.spacing, - leftBound = pick(axis.labelLeft, Math.min(axis.pos, spacing[3])), - rightBound = pick( - axis.labelRight, - Math.max(!axis.isRadial ? axis.pos + axis.len : 0, - chartWidth - spacing[1] - ) - ), - label = this.label, - rotation = this.rotation, - factor = { - left: 0, - center: 0.5, - right: 1 - }[ - axis.labelAlign || label.attr('align') - ], - labelWidth = label.getBBox().width, - slotWidth = axis.getSlotWidth(), - modifiedSlotWidth = slotWidth, - xCorrection = factor, - goRight = 1, - leftPos, - rightPos, - textWidth, - css = {}; - - // Check if the label overshoots the chart spacing box. If it does, move - // it. If it now overshoots the slotWidth, add ellipsis. - if (!rotation && labelOptions.overflow !== false) { - leftPos = pxPos - factor * labelWidth; - rightPos = pxPos + (1 - factor) * labelWidth; - - if (leftPos < leftBound) { - modifiedSlotWidth = xy.x + modifiedSlotWidth * (1 - factor) - leftBound; - } else if (rightPos > rightBound) { - modifiedSlotWidth = - rightBound - xy.x + modifiedSlotWidth * factor; - goRight = -1; - } - - modifiedSlotWidth = Math.min(slotWidth, modifiedSlotWidth); // #4177 - if (modifiedSlotWidth < slotWidth && axis.labelAlign === 'center') { - xy.x += ( - goRight * - ( - slotWidth - - modifiedSlotWidth - - xCorrection * ( - slotWidth - Math.min(labelWidth, modifiedSlotWidth) - ) - ) - ); - } - // If the label width exceeds the available space, set a text width - // to be picked up below. Also, if a width has been set before, we - // need to set a new one because the reported labelWidth will be - // limited by the box (#3938). - if ( - labelWidth > modifiedSlotWidth || - (axis.autoRotation && (label.styles || {}).width) - ) { - textWidth = modifiedSlotWidth; - } - - // Add ellipsis to prevent rotated labels to be clipped against the edge - // of the chart - } else if (rotation < 0 && pxPos - factor * labelWidth < leftBound) { - textWidth = Math.round( - pxPos / Math.cos(rotation * deg2rad) - leftBound - ); - } else if (rotation > 0 && pxPos + factor * labelWidth > rightBound) { - textWidth = Math.round( - (chartWidth - pxPos) / Math.cos(rotation * deg2rad) - ); - } - - if (textWidth) { - css.width = textWidth; - if (!(labelOptions.style || {}).textOverflow) { - css.textOverflow = 'ellipsis'; - } - label.css(css); - } - }, - - /** - * Get the x and y position for ticks and labels - */ - getPosition: function(horiz, pos, tickmarkOffset, old) { - var axis = this.axis, - chart = axis.chart, - cHeight = (old && chart.oldChartHeight) || chart.chartHeight; - - return { - x: horiz ? - ( - axis.translate(pos + tickmarkOffset, null, null, old) + - axis.transB - ) : - ( - axis.left + - axis.offset + - ( - axis.opposite ? - ( - ( - (old && chart.oldChartWidth) || - chart.chartWidth - ) - - axis.right - - axis.left - ) : - 0 - ) - ), - - y: horiz ? - ( - cHeight - - axis.bottom + - axis.offset - - (axis.opposite ? axis.height : 0) - ) : - ( - cHeight - - axis.translate(pos + tickmarkOffset, null, null, old) - - axis.transB - ) - }; - - }, - - /** - * Get the x, y position of the tick label - */ - getLabelPosition: function( - x, - y, - label, - horiz, - labelOptions, - tickmarkOffset, - index, - step - ) { - var axis = this.axis, - transA = axis.transA, - reversed = axis.reversed, - staggerLines = axis.staggerLines, - rotCorr = axis.tickRotCorr || { - x: 0, - y: 0 - }, - yOffset = labelOptions.y, - - // Adjust for label alignment if we use reserveSpace: true (#5286) - labelOffsetCorrection = (!horiz && !axis.reserveSpaceDefault ? - -axis.labelOffset * ( - axis.labelAlign === 'center' ? 0.5 : 1 - ) : - 0 - ), - line; - - if (!defined(yOffset)) { - if (axis.side === 0) { - yOffset = label.rotation ? -8 : -label.getBBox().height; - } else if (axis.side === 2) { - yOffset = rotCorr.y + 8; - } else { - // #3140, #3140 - yOffset = Math.cos(label.rotation * deg2rad) * - (rotCorr.y - label.getBBox(false, 0).height / 2); - } - } - - x = x + - labelOptions.x + - labelOffsetCorrection + - rotCorr.x - - ( - tickmarkOffset && horiz ? - tickmarkOffset * transA * (reversed ? -1 : 1) : - 0 - ); - y = y + yOffset - (tickmarkOffset && !horiz ? - tickmarkOffset * transA * (reversed ? 1 : -1) : 0); - - // Correct for staggered labels - if (staggerLines) { - line = (index / (step || 1) % staggerLines); - if (axis.opposite) { - line = staggerLines - line - 1; - } - y += line * (axis.labelOffset / staggerLines); - } - - return { - x: x, - y: Math.round(y) - }; - }, - - /** - * Extendible method to return the path of the marker - */ - getMarkPath: function(x, y, tickLength, tickWidth, horiz, renderer) { - return renderer.crispLine([ - 'M', - x, - y, - 'L', - x + (horiz ? 0 : -tickLength), - y + (horiz ? tickLength : 0) - ], tickWidth); - }, - - /** - * Renders the gridLine. - * @param {Boolean} old Whether or not the tick is old - * @param {number} opacity The opacity of the grid line - * @param {number} reverseCrisp Modifier for avoiding overlapping 1 or -1 - * @return {undefined} - */ - renderGridLine: function(old, opacity, reverseCrisp) { - var tick = this, - axis = tick.axis, - options = axis.options, - gridLine = tick.gridLine, - gridLinePath, - attribs = {}, - pos = tick.pos, - type = tick.type, - tickmarkOffset = axis.tickmarkOffset, - renderer = axis.chart.renderer; - - - var gridPrefix = type ? type + 'Grid' : 'grid', - gridLineWidth = options[gridPrefix + 'LineWidth'], - gridLineColor = options[gridPrefix + 'LineColor'], - dashStyle = options[gridPrefix + 'LineDashStyle']; - - - if (!gridLine) { - - attribs.stroke = gridLineColor; - attribs['stroke-width'] = gridLineWidth; - if (dashStyle) { - attribs.dashstyle = dashStyle; - } - - if (!type) { - attribs.zIndex = 1; - } - if (old) { - attribs.opacity = 0; - } - tick.gridLine = gridLine = renderer.path() - .attr(attribs) - .addClass( - 'highcharts-' + (type ? type + '-' : '') + 'grid-line' - ) - .add(axis.gridGroup); - } - - // If the parameter 'old' is set, the current call will be followed - // by another call, therefore do not do any animations this time - if (!old && gridLine) { - gridLinePath = axis.getPlotLinePath( - pos + tickmarkOffset, - gridLine.strokeWidth() * reverseCrisp, - old, true - ); - if (gridLinePath) { - gridLine[tick.isNew ? 'attr' : 'animate']({ - d: gridLinePath, - opacity: opacity - }); - } - } - }, - - /** - * Renders the tick mark. - * @param {Object} xy The position vector of the mark - * @param {number} xy.x The x position of the mark - * @param {number} xy.y The y position of the mark - * @param {number} opacity The opacity of the mark - * @param {number} reverseCrisp Modifier for avoiding overlapping 1 or -1 - * @return {undefined} - */ - renderMark: function(xy, opacity, reverseCrisp) { - var tick = this, - axis = tick.axis, - options = axis.options, - renderer = axis.chart.renderer, - type = tick.type, - tickPrefix = type ? type + 'Tick' : 'tick', - tickSize = axis.tickSize(tickPrefix), - mark = tick.mark, - isNewMark = !mark, - x = xy.x, - y = xy.y; - - - var tickWidth = pick( - options[tickPrefix + 'Width'], !type && axis.isXAxis ? 1 : 0 - ), // X axis defaults to 1 - tickColor = options[tickPrefix + 'Color']; - - - if (tickSize) { - - // negate the length - if (axis.opposite) { - tickSize[0] = -tickSize[0]; - } - - // First time, create it - if (isNewMark) { - tick.mark = mark = renderer.path() - .addClass('highcharts-' + (type ? type + '-' : '') + 'tick') - .add(axis.axisGroup); - - - mark.attr({ - stroke: tickColor, - 'stroke-width': tickWidth - }); - - } - mark[isNewMark ? 'attr' : 'animate']({ - d: tick.getMarkPath( - x, - y, - tickSize[0], - mark.strokeWidth() * reverseCrisp, - axis.horiz, - renderer), - opacity: opacity - }); - - } - }, - - /** - * Renders the tick label. - * Note: The label should already be created in init(), so it should only - * have to be moved into place. - * @param {Object} xy The position vector of the label - * @param {number} xy.x The x position of the label - * @param {number} xy.y The y position of the label - * @param {Boolean} old Whether or not the tick is old - * @param {number} opacity The opacity of the label - * @param {number} index The index of the tick - * @return {undefined} - */ - renderLabel: function(xy, old, opacity, index) { - var tick = this, - axis = tick.axis, - horiz = axis.horiz, - options = axis.options, - label = tick.label, - labelOptions = options.labels, - step = labelOptions.step, - tickmarkOffset = axis.tickmarkOffset, - show = true, - x = xy.x, - y = xy.y; - if (label && isNumber(x)) { - label.xy = xy = tick.getLabelPosition( - x, - y, - label, - horiz, - labelOptions, - tickmarkOffset, - index, - step - ); - - // Apply show first and show last. If the tick is both first and - // last, it is a single centered tick, in which case we show the - // label anyway (#2100). - if ( - ( - tick.isFirst && - !tick.isLast && - !pick(options.showFirstLabel, 1) - ) || - ( - tick.isLast && - !tick.isFirst && - !pick(options.showLastLabel, 1) - ) - ) { - show = false; - - // Handle label overflow and show or hide accordingly - } else if ( - horiz && - !labelOptions.step && - !labelOptions.rotation && - !old && - opacity !== 0 - ) { - tick.handleOverflow(xy); - } - - // apply step - if (step && index % step) { - // show those indices dividable by step - show = false; - } - - // Set the new position, and show or hide - if (show && isNumber(xy.y)) { - xy.opacity = opacity; - label[tick.isNewLabel ? 'attr' : 'animate'](xy); - tick.isNewLabel = false; - } else { - label.attr('y', -9999); // #1338 - tick.isNewLabel = true; - } - } - }, - - /** - * Put everything in place - * - * @param index {Number} - * @param old {Boolean} Use old coordinates to prepare an animation into new - * position - */ - render: function(index, old, opacity) { - var tick = this, - axis = tick.axis, - horiz = axis.horiz, - pos = tick.pos, - tickmarkOffset = axis.tickmarkOffset, - xy = tick.getPosition(horiz, pos, tickmarkOffset, old), - x = xy.x, - y = xy.y, - reverseCrisp = ((horiz && x === axis.pos + axis.len) || - (!horiz && y === axis.pos)) ? -1 : 1; // #1480, #1687 - - opacity = pick(opacity, 1); - this.isActive = true; - - // Create the grid line - this.renderGridLine(old, opacity, reverseCrisp); - - // create the tick mark - this.renderMark(xy, opacity, reverseCrisp); - - // the label is created on init - now move it into place - this.renderLabel(xy, old, opacity, index); - - tick.isNew = false; - }, - - /** - * Destructor for the tick prototype - */ - destroy: function() { - destroyObjectProperties(this, this.axis); - } - }; - - }(Highcharts)); - var Axis = (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - - var addEvent = H.addEvent, - animObject = H.animObject, - arrayMax = H.arrayMax, - arrayMin = H.arrayMin, - color = H.color, - correctFloat = H.correctFloat, - defaultOptions = H.defaultOptions, - defined = H.defined, - deg2rad = H.deg2rad, - destroyObjectProperties = H.destroyObjectProperties, - each = H.each, - extend = H.extend, - fireEvent = H.fireEvent, - format = H.format, - getMagnitude = H.getMagnitude, - grep = H.grep, - inArray = H.inArray, - isArray = H.isArray, - isNumber = H.isNumber, - isString = H.isString, - merge = H.merge, - normalizeTickInterval = H.normalizeTickInterval, - objectEach = H.objectEach, - pick = H.pick, - removeEvent = H.removeEvent, - splat = H.splat, - syncTimeout = H.syncTimeout, - Tick = H.Tick; - - /** - * Create a new axis object. Called internally when instanciating a new chart or - * adding axes by {@link Highcharts.Chart#addAxis}. - * - * A chart can have from 0 axes (pie chart) to multiples. In a normal, single - * series cartesian chart, there is one X axis and one Y axis. - * - * The X axis or axes are referenced by {@link Highcharts.Chart.xAxis}, which is - * an array of Axis objects. If there is only one axis, it can be referenced - * through `chart.xAxis[0]`, and multiple axes have increasing indices. The same - * pattern goes for Y axes. - * - * If you need to get the axes from a series object, use the `series.xAxis` and - * `series.yAxis` properties. These are not arrays, as one series can only be - * associated to one X and one Y axis. - * - * A third way to reference the axis programmatically is by `id`. Add an `id` in - * the axis configuration options, and get the axis by - * {@link Highcharts.Chart#get}. - * - * Configuration options for the axes are given in options.xAxis and - * options.yAxis. - * - * @class Highcharts.Axis - * @memberOf Highcharts - * @param {Highcharts.Chart} chart - The Chart instance to apply the axis on. - * @param {Object} options - Axis options - */ - var Axis = function() { - this.init.apply(this, arguments); - }; - - H.extend(Axis.prototype, /** @lends Highcharts.Axis.prototype */ { - - /** - * The X axis or category axis. Normally this is the horizontal axis, - * though if the chart is inverted this is the vertical axis. In case of - * multiple axes, the xAxis node is an array of configuration objects. - * - * See [the Axis object](#Axis) for programmatic access to the axis. - * - * @productdesc {highmaps} - * In Highmaps, the axis is hidden, but it is used behind the scenes to - * control features like zooming and panning. Zooming is in effect the same - * as setting the extremes of one of the exes. - * - * @optionparent xAxis - */ - defaultOptions: { - /** - * Whether to allow decimals in this axis' ticks. When counting - * integers, like persons or hits on a web page, decimals should - * be avoided in the labels. - * - * @type {Boolean} - * @see [minTickInterval](#xAxis.minTickInterval) - * @sample {highcharts|highstock} - * highcharts/yaxis/allowdecimals-true/ - * True by default - * @sample {highcharts|highstock} - * highcharts/yaxis/allowdecimals-false/ - * False - * @default true - * @since 2.0 - * @apioption xAxis.allowDecimals - */ - // allowDecimals: null, - - - /** - * When using an alternate grid color, a band is painted across the - * plot area between every other grid line. - * - * @type {Color} - * @sample {highcharts} highcharts/yaxis/alternategridcolor/ - * Alternate grid color on the Y axis - * @sample {highstock} stock/xaxis/alternategridcolor/ - * Alternate grid color on the Y axis - * @default null - * @apioption xAxis.alternateGridColor - */ - // alternateGridColor: null, - - /** - * An array defining breaks in the axis, the sections defined will be - * left out and all the points shifted closer to each other. - * - * @productdesc {highcharts} - * Requires that the broken-axis.js module is loaded. - * - * @type {Array} - * @sample {highcharts} - * highcharts/axisbreak/break-simple/ - * Simple break - * @sample {highcharts|highstock} - * highcharts/axisbreak/break-visualized/ - * Advanced with callback - * @sample {highstock} - * stock/demo/intraday-breaks/ - * Break on nights and weekends - * @since 4.1.0 - * @product highcharts highstock - * @apioption xAxis.breaks - */ - - /** - * A number indicating how much space should be left between the start - * and the end of the break. The break size is given in axis units, - * so for instance on a `datetime` axis, a break size of 3600000 would - * indicate the equivalent of an hour. - * - * @type {Number} - * @default 0 - * @since 4.1.0 - * @product highcharts highstock - * @apioption xAxis.breaks.breakSize - */ - - /** - * The point where the break starts. - * - * @type {Number} - * @since 4.1.0 - * @product highcharts highstock - * @apioption xAxis.breaks.from - */ - - /** - * Defines an interval after which the break appears again. By default - * the breaks do not repeat. - * - * @type {Number} - * @default 0 - * @since 4.1.0 - * @product highcharts highstock - * @apioption xAxis.breaks.repeat - */ - - /** - * The point where the break ends. - * - * @type {Number} - * @since 4.1.0 - * @product highcharts highstock - * @apioption xAxis.breaks.to - */ - - /** - * If categories are present for the xAxis, names are used instead of - * numbers for that axis. Since Highcharts 3.0, categories can also - * be extracted by giving each point a [name](#series.data) and setting - * axis [type](#xAxis.type) to `category`. However, if you have multiple - * series, best practice remains defining the `categories` array. - * - * Example: - * - *
categories: ['Apples', 'Bananas', 'Oranges']
- * - * @type {Array} - * @sample {highcharts} highcharts/chart/reflow-true/ - * With - * @sample {highcharts} highcharts/xaxis/categories/ - * Without - * @product highcharts - * @default null - * @apioption xAxis.categories - */ - // categories: [], - - /** - * The highest allowed value for automatically computed axis extremes. - * - * @type {Number} - * @see [floor](#xAxis.floor) - * @sample {highcharts|highstock} highcharts/yaxis/floor-ceiling/ - * Floor and ceiling - * @since 4.0 - * @product highcharts highstock - * @apioption xAxis.ceiling - */ - - /** - * A class name that opens for styling the axis by CSS, especially in - * Highcharts styled mode. The class name is applied to group elements - * for the grid, axis elements and labels. - * - * @type {String} - * @sample {highcharts|highstock|highmaps} - * highcharts/css/axis/ - * Multiple axes with separate styling - * @since 5.0.0 - * @apioption xAxis.className - */ - - /** - * Configure a crosshair that follows either the mouse pointer or the - * hovered point. - * - * In styled mode, the crosshairs are styled in the - * `.highcharts-crosshair`, `.highcharts-crosshair-thin` or - * `.highcharts-xaxis-category` classes. - * - * @productdesc {highstock} - * In Highstock, bu default, the crosshair is enabled on the X axis and - * disabled on the Y axis. - * - * @type {Boolean|Object} - * @sample {highcharts} highcharts/xaxis/crosshair-both/ - * Crosshair on both axes - * @sample {highstock} stock/xaxis/crosshairs-xy/ - * Crosshair on both axes - * @sample {highmaps} highcharts/xaxis/crosshair-both/ - * Crosshair on both axes - * @default false - * @since 4.1 - * @apioption xAxis.crosshair - */ - - /** - * A class name for the crosshair, especially as a hook for styling. - * - * @type {String} - * @since 5.0.0 - * @apioption xAxis.crosshair.className - */ - - /** - * The color of the crosshair. Defaults to `#cccccc` for numeric and - * datetime axes, and `rgba(204,214,235,0.25)` for category axes, where - * the crosshair by default highlights the whole category. - * - * @type {Color} - * @sample {highcharts|highstock|highmaps} - * highcharts/xaxis/crosshair-customized/ - * Customized crosshairs - * @default #cccccc - * @since 4.1 - * @apioption xAxis.crosshair.color - */ - - /** - * The dash style for the crosshair. See - * [series.dashStyle](#plotOptions.series.dashStyle) - * for possible values. - * - * @validvalue ["Solid", "ShortDash", "ShortDot", "ShortDashDot", - * "ShortDashDotDot", "Dot", "Dash" ,"LongDash", - * "DashDot", "LongDashDot", "LongDashDotDot"] - * @type {String} - * @sample {highcharts|highmaps} highcharts/xaxis/crosshair-dotted/ - * Dotted crosshair - * @sample {highstock} stock/xaxis/crosshair-dashed/ - * Dashed X axis crosshair - * @default Solid - * @since 4.1 - * @apioption xAxis.crosshair.dashStyle - */ - - /** - * Whether the crosshair should snap to the point or follow the pointer - * independent of points. - * - * @type {Boolean} - * @sample {highcharts|highstock} - * highcharts/xaxis/crosshair-snap-false/ - * True by default - * @sample {highmaps} - * maps/demo/latlon-advanced/ - * Snap is false - * @default true - * @since 4.1 - * @apioption xAxis.crosshair.snap - */ - - /** - * The pixel width of the crosshair. Defaults to 1 for numeric or - * datetime axes, and for one category width for category axes. - * - * @type {Number} - * @sample {highcharts} highcharts/xaxis/crosshair-customized/ - * Customized crosshairs - * @sample {highstock} highcharts/xaxis/crosshair-customized/ - * Customized crosshairs - * @sample {highmaps} highcharts/xaxis/crosshair-customized/ - * Customized crosshairs - * @default 1 - * @since 4.1 - * @apioption xAxis.crosshair.width - */ - - /** - * The Z index of the crosshair. Higher Z indices allow drawing the - * crosshair on top of the series or behind the grid lines. - * - * @type {Number} - * @default 2 - * @since 4.1 - * @apioption xAxis.crosshair.zIndex - */ - - /** - * For a datetime axis, the scale will automatically adjust to the - * appropriate unit. This member gives the default string - * representations used for each unit. For intermediate values, - * different units may be used, for example the `day` unit can be used - * on midnight and `hour` unit be used for intermediate values on the - * same axis. For an overview of the replacement codes, see - * [dateFormat](#Highcharts.dateFormat). Defaults to: - * - *
{
-                 *     millisecond: '%H:%M:%S.%L',
-                 *     second: '%H:%M:%S',
-                 *     minute: '%H:%M',
-                 *     hour: '%H:%M',
-                 *     day: '%e. %b',
-                 *     week: '%e. %b',
-                 *     month: '%b \'%y',
-                 *     year: '%Y'
-                 * }
- * - * @type {Object} - * @sample {highcharts} highcharts/xaxis/datetimelabelformats/ - * Different day format on X axis - * @sample {highstock} stock/xaxis/datetimelabelformats/ - * More information in x axis labels - * @product highcharts highstock - */ - dateTimeLabelFormats: { - millisecond: '%H:%M:%S.%L', - second: '%H:%M:%S', - minute: '%H:%M', - hour: '%H:%M', - day: '%e. %b', - week: '%e. %b', - month: '%b \'%y', - year: '%Y' - }, - - /** - * _Requires Accessibility module_ - * - * Description of the axis to screen reader users. - * - * @type {String} - * @default undefined - * @since 5.0.0 - * @apioption xAxis.description - */ - - /** - * Whether to force the axis to end on a tick. Use this option with - * the `maxPadding` option to control the axis end. - * - * @productdesc {highstock} - * In Highstock, `endOnTick` is always false when the navigator is - * enabled, to prevent jumpy scrolling. - * - * @sample {highcharts} highcharts/chart/reflow-true/ - * True by default - * @sample {highcharts} highcharts/yaxis/endontick/ - * False - * @sample {highstock} stock/demo/basic-line/ - * True by default - * @sample {highstock} stock/xaxis/endontick/ - * False - * @since 1.2.0 - */ - endOnTick: false, - - /** - * Event handlers for the axis. - * - * @apioption xAxis.events - */ - - /** - * An event fired after the breaks have rendered. - * - * @type {Function} - * @see [breaks](#xAxis.breaks) - * @sample {highcharts} highcharts/axisbreak/break-event/ - * AfterBreak Event - * @since 4.1.0 - * @product highcharts - * @apioption xAxis.events.afterBreaks - */ - - /** - * As opposed to the `setExtremes` event, this event fires after the - * final min and max values are computed and corrected for `minRange`. - * - * - * Fires when the minimum and maximum is set for the axis, either by - * calling the `.setExtremes()` method or by selecting an area in the - * chart. One parameter, `event`, is passed to the function, containing - * common event information. - * - * The new user set minimum and maximum values can be found by `event. - * min` and `event.max`. These reflect the axis minimum and maximum - * in axis values. The actual data extremes are found in `event.dataMin` - * and `event.dataMax`. - * - * @type {Function} - * @context Axis - * @since 2.3 - * @apioption xAxis.events.afterSetExtremes - */ - - /** - * An event fired when a break from this axis occurs on a point. - * - * @type {Function} - * @see [breaks](#xAxis.breaks) - * @context Axis - * @sample {highcharts} highcharts/axisbreak/break-visualized/ - * Visualization of a Break - * @since 4.1.0 - * @product highcharts - * @apioption xAxis.events.pointBreak - */ - - /** - * An event fired when a point falls inside a break from this axis. - * - * @type {Function} - * @context Axis - * @product highcharts highstock - * @apioption xAxis.events.pointInBreak - */ - - /** - * Fires when the minimum and maximum is set for the axis, either by - * calling the `.setExtremes()` method or by selecting an area in the - * chart. One parameter, `event`, is passed to the function, - * containing common event information. - * - * The new user set minimum and maximum values can be found by `event. - * min` and `event.max`. These reflect the axis minimum and maximum - * in data values. When an axis is zoomed all the way out from the - * "Reset zoom" button, `event.min` and `event.max` are null, and - * the new extremes are set based on `this.dataMin` and `this.dataMax`. - * - * @type {Function} - * @context Axis - * @sample {highstock} stock/xaxis/events-setextremes/ - * Log new extremes on x axis - * @since 1.2.0 - * @apioption xAxis.events.setExtremes - */ - - /** - * The lowest allowed value for automatically computed axis extremes. - * - * @type {Number} - * @see [ceiling](#yAxis.ceiling) - * @sample {highcharts} highcharts/yaxis/floor-ceiling/ - * Floor and ceiling - * @sample {highstock} stock/demo/lazy-loading/ - * Prevent negative stock price on Y axis - * @default null - * @since 4.0 - * @product highcharts highstock - * @apioption xAxis.floor - */ - - /** - * The dash or dot style of the grid lines. For possible values, see - * [this demonstration](http://jsfiddle.net/gh/get/library/pure/ - *highcharts/highcharts/tree/master/samples/highcharts/plotoptions/ - *series-dashstyle-all/). - * - * @validvalue ["Solid", "ShortDash", "ShortDot", "ShortDashDot", - * "ShortDashDotDot", "Dot", "Dash" ,"LongDash", - * "DashDot", "LongDashDot", "LongDashDotDot"] - * @type {String} - * @sample {highcharts} highcharts/yaxis/gridlinedashstyle/ - * Long dashes - * @sample {highstock} stock/xaxis/gridlinedashstyle/ - * Long dashes - * @default Solid - * @since 1.2 - * @apioption xAxis.gridLineDashStyle - */ - - /** - * The Z index of the grid lines. - * - * @type {Number} - * @sample {highcharts|highstock} highcharts/xaxis/gridzindex/ - * A Z index of 4 renders the grid above the graph - * @default 1 - * @product highcharts highstock - * @apioption xAxis.gridZIndex - */ - - /** - * An id for the axis. This can be used after render time to get - * a pointer to the axis object through `chart.get()`. - * - * @type {String} - * @sample {highcharts} highcharts/xaxis/id/ - * Get the object - * @sample {highstock} stock/xaxis/id/ - * Get the object - * @default null - * @since 1.2.0 - * @apioption xAxis.id - */ - - /** - * The axis labels show the number or category for each tick. - * - * @productdesc {highmaps} - * X and Y axis labels are by default disabled in Highmaps, but the - * functionality is inherited from Highcharts and used on `colorAxis`, - * and can be enabled on X and Y axes too. - */ - labels: { - /** - * What part of the string the given position is anchored to. - * If `left`, the left side of the string is at the axis position. - * Can be one of `"left"`, `"center"` or `"right"`. Defaults to - * an intelligent guess based on which side of the chart the axis - * is on and the rotation of the label. - * - * @validvalue ["left", "center", "right"] - * @type {String} - * @sample {highcharts} highcharts/xaxis/labels-align-left/ - * Left - * @sample {highcharts} highcharts/xaxis/labels-align-right/ - * Right - * @sample {highcharts} - * highcharts/xaxis/labels-reservespace-true/ - * Left-aligned labels on a vertical category axis - * @see [reserveSpace](#xAxis.labels.reserveSpace) - * @apioption xAxis.labels.align - */ - // align: 'center', - - /** - * For horizontal axes, the allowed degrees of label rotation - * to prevent overlapping labels. If there is enough space, - * labels are not rotated. As the chart gets narrower, it - * will start rotating the labels -45 degrees, then remove - * every second label and try again with rotations 0 and -45 etc. - * Set it to `false` to disable rotation, which will - * cause the labels to word-wrap if possible. - * - * @type {Array} - * @sample {highcharts|highstock} - * highcharts/xaxis/labels-autorotation-default/ - * Default auto rotation of 0 or -45 - * @sample {highcharts|highstock} - * highcharts/xaxis/labels-autorotation-0-90/ - * Custom graded auto rotation - * @default [-45] - * @since 4.1.0 - * @product highcharts highstock - * @apioption xAxis.labels.autoRotation - */ - - /** - * When each category width is more than this many pixels, we don't - * apply auto rotation. Instead, we lay out the axis label with word - * wrap. A lower limit makes sense when the label contains multiple - * short words that don't extend the available horizontal space for - * each label. - * - * @type {Number} - * @sample {highcharts} - * highcharts/xaxis/labels-autorotationlimit/ - * Lower limit - * @default 80 - * @since 4.1.5 - * @product highcharts - * @apioption xAxis.labels.autoRotationLimit - */ - - /** - * Polar charts only. The label's pixel distance from the perimeter - * of the plot area. - * - * @type {Number} - * @default 15 - * @product highcharts - * @apioption xAxis.labels.distance - */ - - /** - * Enable or disable the axis labels. - * - * @sample {highcharts} highcharts/xaxis/labels-enabled/ - * X axis labels disabled - * @sample {highstock} stock/xaxis/labels-enabled/ - * X axis labels disabled - * @default {highcharts|highstock} true - * @default {highmaps} false - */ - enabled: true, - - /** - * A [format string](http://www.highcharts.com/docs/chart- - * concepts/labels-and-string-formatting) for the axis label. - * - * @type {String} - * @sample {highcharts|highstock} highcharts/yaxis/labels-format/ - * Add units to Y axis label - * @default {value} - * @since 3.0 - * @apioption xAxis.labels.format - */ - - /** - * Callback JavaScript function to format the label. The value - * is given by `this.value`. Additional properties for `this` are - * `axis`, `chart`, `isFirst` and `isLast`. The value of the default - * label formatter can be retrieved by calling - * `this.axis.defaultLabelFormatter.call(this)` within the function. - * - * Defaults to: - * - *
function() {
-                     *     return this.value;
-                     * }
- * - * @type {Function} - * @sample {highcharts} - * highcharts/xaxis/labels-formatter-linked/ - * Linked category names - * @sample {highcharts} - * highcharts/xaxis/labels-formatter-extended/ - * Modified numeric labels - * @sample {highstock} - * stock/xaxis/labels-formatter/ - * Added units on Y axis - * @apioption xAxis.labels.formatter - */ - - /** - * How to handle overflowing labels on horizontal axis. Can be - * undefined, `false` or `"justify"`. By default it aligns inside - * the chart area. If "justify", labels will not render outside - * the plot area. If `false`, it will not be aligned at all. - * If there is room to move it, it will be aligned to the edge, - * else it will be removed. - * - * @deprecated - * @validvalue [null, "justify"] - * @type {String} - * @since 2.2.5 - * @apioption xAxis.labels.overflow - */ - - /** - * The pixel padding for axis labels, to ensure white space between - * them. - * - * @type {Number} - * @default 5 - * @product highcharts - * @apioption xAxis.labels.padding - */ - - /** - * Whether to reserve space for the labels. By default, space is - * reserved for the labels in these cases: - * - * * On all horizontal axes. - * * On vertical axes if `label.align` is `right` on a left-side - * axis or `left` on a right-side axis. - * * On vertical axes if `label.align` is `center`. - * - * This can be turned off when for example the labels are rendered - * inside the plot area instead of outside. - * - * @type {Boolean} - * @sample {highcharts} highcharts/xaxis/labels-reservespace/ - * No reserved space, labels inside plot - * @sample {highcharts} - * highcharts/xaxis/labels-reservespace-true/ - * Left-aligned labels on a vertical category axis - * @see [labels.align](#xAxis.labels.align) - * @default null - * @since 4.1.10 - * @product highcharts - * @apioption xAxis.labels.reserveSpace - */ - - /** - * Rotation of the labels in degrees. - * - * @type {Number} - * @sample {highcharts} highcharts/xaxis/labels-rotation/ - * X axis labels rotated 90° - * @default 0 - * @apioption xAxis.labels.rotation - */ - // rotation: 0, - - /** - * Horizontal axes only. The number of lines to spread the labels - * over to make room or tighter labels. - * - * @type {Number} - * @sample {highcharts} highcharts/xaxis/labels-staggerlines/ - * Show labels over two lines - * @sample {highstock} stock/xaxis/labels-staggerlines/ - * Show labels over two lines - * @default null - * @since 2.1 - * @apioption xAxis.labels.staggerLines - */ - - /** - * To show only every _n_'th label on the axis, set the step to _n_. - * Setting the step to 2 shows every other label. - * - * By default, the step is calculated automatically to avoid - * overlap. To prevent this, set it to 1\. This usually only - * happens on a category axis, and is often a sign that you have - * chosen the wrong axis type. - * - * Read more at - * [Axis docs](http://www.highcharts.com/docs/chart-concepts/axes) - * => What axis should I use? - * - * @type {Number} - * @sample {highcharts} highcharts/xaxis/labels-step/ - * Showing only every other axis label on a categorized - * x axis - * @sample {highcharts} highcharts/xaxis/labels-step-auto/ - * Auto steps on a category axis - * @default null - * @since 2.1 - * @apioption xAxis.labels.step - */ - // step: null, - - - - /** - * CSS styles for the label. Use `whiteSpace: 'nowrap'` to prevent - * wrapping of category labels. Use `textOverflow: 'none'` to - * prevent ellipsis (dots). - * - * In styled mode, the labels are styled with the - * `.highcharts-axis-labels` class. - * - * @type {CSSObject} - * @sample {highcharts} highcharts/xaxis/labels-style/ - * Red X axis labels - */ - style: { - color: '#666666', - cursor: 'default', - fontSize: '11px' - }, - - - /** - * Whether to [use HTML](http://www.highcharts.com/docs/chart- - * concepts/labels-and-string-formatting#html) to render the labels. - * - * @type {Boolean} - * @default false - * @apioption xAxis.labels.useHTML - */ - - /** - * The x position offset of the label relative to the tick position - * on the axis. - * - * @sample {highcharts} highcharts/xaxis/labels-x/ - * Y axis labels placed on grid lines - */ - x: 0 - - /** - * The y position offset of the label relative to the tick position - * on the axis. The default makes it adapt to the font size on - * bottom axis. - * - * @type {Number} - * @sample {highcharts} highcharts/xaxis/labels-x/ - * Y axis labels placed on grid lines - * @default null - * @apioption xAxis.labels.y - */ - - /** - * The Z index for the axis labels. - * - * @type {Number} - * @default 7 - * @apioption xAxis.labels.zIndex - */ - }, - - /** - * Index of another axis that this axis is linked to. When an axis is - * linked to a master axis, it will take the same extremes as - * the master, but as assigned by min or max or by setExtremes. - * It can be used to show additional info, or to ease reading the - * chart by duplicating the scales. - * - * @type {Number} - * @sample {highcharts} highcharts/xaxis/linkedto/ - * Different string formats of the same date - * @sample {highcharts} highcharts/yaxis/linkedto/ - * Y values on both sides - * @default null - * @since 2.0.2 - * @product highcharts highstock - * @apioption xAxis.linkedTo - */ - - /** - * The maximum value of the axis. If `null`, the max value is - * automatically calculated. - * - * If the `endOnTick` option is true, the `max` value might - * be rounded up. - * - * If a [tickAmount](#yAxis.tickAmount) is set, the axis may be extended - * beyond the set max in order to reach the given number of ticks. The - * same may happen in a chart with multiple axes, determined by [chart. - * alignTicks](#chart), where a `tickAmount` is applied internally. - * - * @type {Number} - * @sample {highcharts} highcharts/yaxis/max-200/ - * Y axis max of 200 - * @sample {highcharts} highcharts/yaxis/max-logarithmic/ - * Y axis max on logarithmic axis - * @sample {highstock} stock/xaxis/min-max/ - * Fixed min and max on X axis - * @sample {highmaps} maps/axis/min-max/ - * Pre-zoomed to a specific area - * @apioption xAxis.max - */ - - /** - * Padding of the max value relative to the length of the axis. A - * padding of 0.05 will make a 100px axis 5px longer. This is useful - * when you don't want the highest data value to appear on the edge - * of the plot area. When the axis' `max` option is set or a max extreme - * is set using `axis.setExtremes()`, the maxPadding will be ignored. - * - * @sample {highcharts} highcharts/yaxis/maxpadding/ - * Max padding of 0.25 on y axis - * @sample {highstock} stock/xaxis/minpadding-maxpadding/ - * Greater min- and maxPadding - * @sample {highmaps} maps/chart/plotbackgroundcolor-gradient/ - * Add some padding - * @default {highcharts} 0.01 - * @default {highstock|highmaps} 0 - * @since 1.2.0 - */ - maxPadding: 0.01, - - /** - * Deprecated. Use `minRange` instead. - * - * @deprecated - * @type {Number} - * @product highcharts highstock - * @apioption xAxis.maxZoom - */ - - /** - * The minimum value of the axis. If `null` the min value is - * automatically calculated. - * - * If the `startOnTick` option is true (default), the `min` value might - * be rounded down. - * - * The automatically calculated minimum value is also affected by - * [floor](#yAxis.floor), [softMin](#yAxis.softMin), - * [minPadding](#yAxis.minPadding), [minRange](#yAxis.minRange) - * as well as [series.threshold](#plotOptions.series.threshold) - * and [series.softThreshold](#plotOptions.series.softThreshold). - * - * @type {Number} - * @sample {highcharts} highcharts/yaxis/min-startontick-false/ - * -50 with startOnTick to false - * @sample {highcharts} highcharts/yaxis/min-startontick-true/ - * -50 with startOnTick true by default - * @sample {highstock} stock/xaxis/min-max/ - * Set min and max on X axis - * @sample {highmaps} maps/axis/min-max/ - * Pre-zoomed to a specific area - * @apioption xAxis.min - */ - - /** - * The dash or dot style of the minor grid lines. For possible values, - * see [this demonstration](http://jsfiddle.net/gh/get/library/pure/ - * highcharts/highcharts/tree/master/samples/highcharts/plotoptions/ - * series-dashstyle-all/). - * - * @validvalue ["Solid", "ShortDash", "ShortDot", "ShortDashDot", - * "ShortDashDotDot", "Dot", "Dash" ,"LongDash", - * "DashDot", "LongDashDot", "LongDashDotDot"] - * @type {String} - * @sample {highcharts} highcharts/yaxis/minorgridlinedashstyle/ - * Long dashes on minor grid lines - * @sample {highstock} stock/xaxis/minorgridlinedashstyle/ - * Long dashes on minor grid lines - * @default Solid - * @since 1.2 - * @apioption xAxis.minorGridLineDashStyle - */ - - /** - * Specific tick interval in axis units for the minor ticks. - * On a linear axis, if `"auto"`, the minor tick interval is - * calculated as a fifth of the tickInterval. If `null`, minor - * ticks are not shown. - * - * On logarithmic axes, the unit is the power of the value. For example, - * setting the minorTickInterval to 1 puts one tick on each of 0.1, - * 1, 10, 100 etc. Setting the minorTickInterval to 0.1 produces 9 - * ticks between 1 and 10, 10 and 100 etc. - * - * If user settings dictate minor ticks to become too dense, they don't - * make sense, and will be ignored to prevent performance problems. - * - * @type {Number|String} - * @sample {highcharts} highcharts/yaxis/minortickinterval-null/ - * Null by default - * @sample {highcharts} highcharts/yaxis/minortickinterval-5/ - * 5 units - * @sample {highcharts} highcharts/yaxis/minortickinterval-log-auto/ - * "auto" - * @sample {highcharts} highcharts/yaxis/minortickinterval-log/ - * 0.1 - * @sample {highstock} stock/demo/basic-line/ - * Null by default - * @sample {highstock} stock/xaxis/minortickinterval-auto/ - * "auto" - * @apioption xAxis.minorTickInterval - */ - - /** - * The pixel length of the minor tick marks. - * - * @sample {highcharts} highcharts/yaxis/minorticklength/ - * 10px on Y axis - * @sample {highstock} stock/xaxis/minorticks/ - * 10px on Y axis - */ - minorTickLength: 2, - - /** - * The position of the minor tick marks relative to the axis line. - * Can be one of `inside` and `outside`. - * - * @validvalue ["inside", "outside"] - * @sample {highcharts} highcharts/yaxis/minortickposition-outside/ - * Outside by default - * @sample {highcharts} highcharts/yaxis/minortickposition-inside/ - * Inside - * @sample {highstock} stock/xaxis/minorticks/ - * Inside - */ - minorTickPosition: 'outside', - - /** - * Enable or disable minor ticks. Unless - * [minorTickInterval](#xAxis.minorTickInterval) is set, the tick - * interval is calculated as a fifth of the `tickInterval`. - * - * On a logarithmic axis, minor ticks are laid out based on a best - * guess, attempting to enter approximately 5 minor ticks between - * each major tick. - * - * Prior to v6.0.0, ticks were unabled in auto layout by setting - * `minorTickInterval` to `"auto"`. - * - * @productdesc {highcharts} - * On axes using [categories](#xAxis.categories), minor ticks are not - * supported. - * - * @type {Boolean} - * @default false - * @since 6.0.0 - * @sample {highcharts} highcharts/yaxis/minorticks-true/ - * Enabled on linear Y axis - * @apioption xAxis.minorTicks - */ - - /** - * The pixel width of the minor tick mark. - * - * @type {Number} - * @sample {highcharts} highcharts/yaxis/minortickwidth/ - * 3px width - * @sample {highstock} stock/xaxis/minorticks/ - * 1px width - * @default 0 - * @apioption xAxis.minorTickWidth - */ - - /** - * Padding of the min value relative to the length of the axis. A - * padding of 0.05 will make a 100px axis 5px longer. This is useful - * when you don't want the lowest data value to appear on the edge - * of the plot area. When the axis' `min` option is set or a min extreme - * is set using `axis.setExtremes()`, the minPadding will be ignored. - * - * @sample {highcharts} highcharts/yaxis/minpadding/ - * Min padding of 0.2 - * @sample {highstock} stock/xaxis/minpadding-maxpadding/ - * Greater min- and maxPadding - * @sample {highmaps} maps/chart/plotbackgroundcolor-gradient/ - * Add some padding - * @default {highcharts} 0.01 - * @default {highstock|highmaps} 0 - * @since 1.2.0 - */ - minPadding: 0.01, - - /** - * The minimum range to display on this axis. The entire axis will not - * be allowed to span over a smaller interval than this. For example, - * for a datetime axis the main unit is milliseconds. If minRange is - * set to 3600000, you can't zoom in more than to one hour. - * - * The default minRange for the x axis is five times the smallest - * interval between any of the data points. - * - * On a logarithmic axis, the unit for the minimum range is the power. - * So a minRange of 1 means that the axis can be zoomed to 10-100, - * 100-1000, 1000-10000 etc. - * - * Note that the `minPadding`, `maxPadding`, `startOnTick` and - * `endOnTick` settings also affect how the extremes of the axis - * are computed. - * - * @type {Number} - * @sample {highcharts} highcharts/xaxis/minrange/ - * Minimum range of 5 - * @sample {highstock} stock/xaxis/minrange/ - * Max zoom of 6 months overrides user selections - * @sample {highmaps} maps/axis/minrange/ - * Minimum range of 1000 - * @apioption xAxis.minRange - */ - - /** - * The minimum tick interval allowed in axis values. For example on - * zooming in on an axis with daily data, this can be used to prevent - * the axis from showing hours. Defaults to the closest distance between - * two points on the axis. - * - * @type {Number} - * @since 2.3.0 - * @apioption xAxis.minTickInterval - */ - - /** - * The distance in pixels from the plot area to the axis line. - * A positive offset moves the axis with it's line, labels and ticks - * away from the plot area. This is typically used when two or more - * axes are displayed on the same side of the plot. With multiple - * axes the offset is dynamically adjusted to avoid collision, this - * can be overridden by setting offset explicitly. - * - * @type {Number} - * @sample {highcharts} highcharts/yaxis/offset/ - * Y axis offset of 70 - * @sample {highcharts} highcharts/yaxis/offset-centered/ - * Axes positioned in the center of the plot - * @sample {highstock} stock/xaxis/offset/ - * Y axis offset by 70 px - * @default 0 - * @apioption xAxis.offset - */ - - /** - * Whether to display the axis on the opposite side of the normal. The - * normal is on the left side for vertical axes and bottom for - * horizontal, so the opposite sides will be right and top respectively. - * This is typically used with dual or multiple axes. - * - * @type {Boolean} - * @sample {highcharts} highcharts/yaxis/opposite/ - * Secondary Y axis opposite - * @sample {highstock} stock/xaxis/opposite/ - * Y axis on left side - * @default false - * @apioption xAxis.opposite - */ - - /** - * Refers to the index in the [panes](#panes) array. Used for circular - * gauges and polar charts. When the option is not set then first pane - * will be used. - * - * @type {Number} - * @sample highcharts/demo/gauge-vu-meter - * Two gauges with different center - * @product highcharts - * @apioption xAxis.pane - */ - - /** - * Whether to reverse the axis so that the highest number is closest - * to the origin. If the chart is inverted, the x axis is reversed by - * default. - * - * @type {Boolean} - * @sample {highcharts} highcharts/yaxis/reversed/ - * Reversed Y axis - * @sample {highstock} stock/xaxis/reversed/ - * Reversed Y axis - * @default false - * @apioption xAxis.reversed - */ - // reversed: false, - - /** - * Whether to show the last tick label. Defaults to `true` on cartesian - * charts, and `false` on polar charts. - * - * @type {Boolean} - * @sample {highcharts} highcharts/xaxis/showlastlabel-true/ - * Set to true on X axis - * @sample {highstock} stock/xaxis/showfirstlabel/ - * Labels below plot lines on Y axis - * @default true - * @product highcharts highstock - * @apioption xAxis.showLastLabel - */ - - /** - * For datetime axes, this decides where to put the tick between weeks. - * 0 = Sunday, 1 = Monday. - * - * @sample {highcharts} highcharts/xaxis/startofweek-monday/ - * Monday by default - * @sample {highcharts} highcharts/xaxis/startofweek-sunday/ - * Sunday - * @sample {highstock} stock/xaxis/startofweek-1 - * Monday by default - * @sample {highstock} stock/xaxis/startofweek-0 - * Sunday - * @product highcharts highstock - */ - startOfWeek: 1, - - /** - * Whether to force the axis to start on a tick. Use this option with - * the `minPadding` option to control the axis start. - * - * @productdesc {highstock} - * In Highstock, `startOnTick` is always false when the navigator is - * enabled, to prevent jumpy scrolling. - * - * @sample {highcharts} highcharts/xaxis/startontick-false/ - * False by default - * @sample {highcharts} highcharts/xaxis/startontick-true/ - * True - * @sample {highstock} stock/xaxis/endontick/ - * False for Y axis - * @since 1.2.0 - */ - startOnTick: false, - - /** - * The pixel length of the main tick marks. - * - * @sample {highcharts} highcharts/xaxis/ticklength/ - * 20 px tick length on the X axis - * @sample {highstock} stock/xaxis/ticks/ - * Formatted ticks on X axis - */ - tickLength: 10, - - /** - * For categorized axes only. If `on` the tick mark is placed in the - * center of the category, if `between` the tick mark is placed between - * categories. The default is `between` if the `tickInterval` is 1, - * else `on`. - * - * @validvalue [null, "on", "between"] - * @sample {highcharts} highcharts/xaxis/tickmarkplacement-between/ - * "between" by default - * @sample {highcharts} highcharts/xaxis/tickmarkplacement-on/ - * "on" - * @product highcharts - */ - tickmarkPlacement: 'between', - - /** - * If tickInterval is `null` this option sets the approximate pixel - * interval of the tick marks. Not applicable to categorized axis. - * - * The tick interval is also influenced by the [minTickInterval](#xAxis. - * minTickInterval) option, that, by default prevents ticks from being - * denser than the data points. - * - * @see [tickInterval](#xAxis.tickInterval), - * [tickPositioner](#xAxis.tickPositioner), - * [tickPositions](#xAxis.tickPositions). - * @sample {highcharts} highcharts/xaxis/tickpixelinterval-50/ - * 50 px on X axis - * @sample {highstock} stock/xaxis/tickpixelinterval/ - * 200 px on X axis - */ - tickPixelInterval: 100, - - /** - * The position of the major tick marks relative to the axis line. - * Can be one of `inside` and `outside`. - * - * @validvalue ["inside", "outside"] - * @sample {highcharts} highcharts/xaxis/tickposition-outside/ - * "outside" by default - * @sample {highcharts} highcharts/xaxis/tickposition-inside/ - * "inside" - * @sample {highstock} stock/xaxis/ticks/ - * Formatted ticks on X axis - */ - tickPosition: 'outside', - - /** - * The axis title, showing next to the axis line. - * - * @productdesc {highmaps} - * In Highmaps, the axis is hidden by default, but adding an axis title - * is still possible. X axis and Y axis titles will appear at the bottom - * and left by default. - */ - title: { - - /** - * Alignment of the title relative to the axis values. Possible - * values are "low", "middle" or "high". - * - * @validvalue ["low", "middle", "high"] - * @sample {highcharts} highcharts/xaxis/title-align-low/ - * "low" - * @sample {highcharts} highcharts/xaxis/title-align-center/ - * "middle" by default - * @sample {highcharts} highcharts/xaxis/title-align-high/ - * "high" - * @sample {highcharts} highcharts/yaxis/title-offset/ - * Place the Y axis title on top of the axis - * @sample {highstock} stock/xaxis/title-align/ - * Aligned to "high" value - */ - align: 'middle', - - - - /** - * CSS styles for the title. If the title text is longer than the - * axis length, it will wrap to multiple lines by default. This can - * be customized by setting `textOverflow: 'ellipsis'`, by - * setting a specific `width` or by setting `wordSpace: 'nowrap'`. - * - * In styled mode, the stroke width is given in the - * `.highcharts-axis-title` class. - * - * @type {CSSObject} - * @sample {highcharts} highcharts/xaxis/title-style/ - * Red - * @sample {highcharts} highcharts/css/axis/ - * Styled mode - * @default { "color": "#666666" } - */ - style: { - color: '#666666' - } - - }, - - /** - * The type of axis. Can be one of `linear`, `logarithmic`, `datetime` - * or `category`. In a datetime axis, the numbers are given in - * milliseconds, and tick marks are placed on appropriate values like - * full hours or days. In a category axis, the - * [point names](#series.line.data.name) of the chart's series are used - * for categories, if not a [categories](#xAxis.categories) array is - * defined. - * - * @validvalue ["linear", "logarithmic", "datetime", "category"] - * @sample {highcharts} highcharts/xaxis/type-linear/ - * Linear - * @sample {highcharts} highcharts/yaxis/type-log/ - * Logarithmic - * @sample {highcharts} highcharts/yaxis/type-log-minorgrid/ - * Logarithmic with minor grid lines - * @sample {highcharts} highcharts/xaxis/type-log-both/ - * Logarithmic on two axes - * @sample {highcharts} highcharts/yaxis/type-log-negative/ - * Logarithmic with extension to emulate negative values - * @product highcharts - */ - type: 'linear', - - - - /** - * Color of the minor, secondary grid lines. - * - * In styled mode, the stroke width is given in the - * `.highcharts-minor-grid-line` class. - * - * @type {Color} - * @sample {highcharts} highcharts/yaxis/minorgridlinecolor/ - * Bright grey lines from Y axis - * @sample {highcharts|highstock} highcharts/css/axis-grid/ - * Styled mode - * @sample {highstock} stock/xaxis/minorgridlinecolor/ - * Bright grey lines from Y axis - * @default #f2f2f2 - */ - minorGridLineColor: '#f2f2f2', - // minorGridLineDashStyle: null, - - /** - * Width of the minor, secondary grid lines. - * - * In styled mode, the stroke width is given in the - * `.highcharts-grid-line` class. - * - * @sample {highcharts} highcharts/yaxis/minorgridlinewidth/ - * 2px lines from Y axis - * @sample {highcharts|highstock} highcharts/css/axis-grid/ - * Styled mode - * @sample {highstock} stock/xaxis/minorgridlinewidth/ - * 2px lines from Y axis - */ - minorGridLineWidth: 1, - - /** - * Color for the minor tick marks. - * - * @type {Color} - * @sample {highcharts} highcharts/yaxis/minortickcolor/ - * Black tick marks on Y axis - * @sample {highstock} stock/xaxis/minorticks/ - * Black tick marks on Y axis - * @default #999999 - */ - minorTickColor: '#999999', - - /** - * The color of the line marking the axis itself. - * - * In styled mode, the line stroke is given in the - * `.highcharts-axis-line` or `.highcharts-xaxis-line` class. - * - * @productdesc {highmaps} - * In Highmaps, the axis line is hidden by default, because the axis is - * not visible by default. - * - * @type {Color} - * @sample {highcharts} highcharts/yaxis/linecolor/ - * A red line on Y axis - * @sample {highcharts|highstock} highcharts/css/axis/ - * Axes in styled mode - * @sample {highstock} stock/xaxis/linecolor/ - * A red line on X axis - * @default #ccd6eb - */ - lineColor: '#ccd6eb', - - /** - * The width of the line marking the axis itself. - * - * In styled mode, the stroke width is given in the - * `.highcharts-axis-line` or `.highcharts-xaxis-line` class. - * - * @sample {highcharts} highcharts/yaxis/linecolor/ - * A 1px line on Y axis - * @sample {highcharts|highstock} highcharts/css/axis/ - * Axes in styled mode - * @sample {highstock} stock/xaxis/linewidth/ - * A 2px line on X axis - * @default {highcharts|highstock} 1 - * @default {highmaps} 0 - */ - lineWidth: 1, - - /** - * Color of the grid lines extending the ticks across the plot area. - * - * In styled mode, the stroke is given in the `.highcharts-grid-line` - * class. - * - * @productdesc {highmaps} - * In Highmaps, the grid lines are hidden by default. - * - * @type {Color} - * @sample {highcharts} highcharts/yaxis/gridlinecolor/ - * Green lines - * @sample {highcharts|highstock} highcharts/css/axis-grid/ - * Styled mode - * @sample {highstock} stock/xaxis/gridlinecolor/ - * Green lines - * @default #e6e6e6 - */ - gridLineColor: '#e6e6e6', - // gridLineDashStyle: 'solid', - - - /** - * The width of the grid lines extending the ticks across the plot area. - * - * In styled mode, the stroke width is given in the - * `.highcharts-grid-line` class. - * - * @type {Number} - * @sample {highcharts} highcharts/yaxis/gridlinewidth/ - * 2px lines - * @sample {highcharts|highstock} highcharts/css/axis-grid/ - * Styled mode - * @sample {highstock} stock/xaxis/gridlinewidth/ - * 2px lines - * @default 0 - * @apioption xAxis.gridLineWidth - */ - // gridLineWidth: 0, - - /** - * Color for the main tick marks. - * - * In styled mode, the stroke is given in the `.highcharts-tick` - * class. - * - * @type {Color} - * @sample {highcharts} highcharts/xaxis/tickcolor/ - * Red ticks on X axis - * @sample {highcharts|highstock} highcharts/css/axis-grid/ - * Styled mode - * @sample {highstock} stock/xaxis/ticks/ - * Formatted ticks on X axis - * @default #ccd6eb - */ - tickColor: '#ccd6eb' - // tickWidth: 1 - - }, - - /** - * The Y axis or value axis. Normally this is the vertical axis, - * though if the chart is inverted this is the horizontal axis. - * In case of multiple axes, the yAxis node is an array of - * configuration objects. - * - * See [the Axis object](#Axis) for programmatic access to the axis. - * - * @extends xAxis - * @excluding ordinal,overscroll - * @optionparent yAxis - */ - defaultYAxisOptions: { - /** - * @productdesc {highstock} - * In Highstock, `endOnTick` is always false when the navigator is - * enabled, to prevent jumpy scrolling. - */ - endOnTick: true, - - /** - * @productdesc {highstock} - * In Highstock 1.x, the Y axis was placed on the left side by default. - * - * @sample {highcharts} highcharts/yaxis/opposite/ - * Secondary Y axis opposite - * @sample {highstock} stock/xaxis/opposite/ - * Y axis on left side - * @default {highstock} true - * @default {highcharts} false - * @product highstock highcharts - * @apioption yAxis.opposite - */ - - /** - * @see [tickInterval](#xAxis.tickInterval), - * [tickPositioner](#xAxis.tickPositioner), - * [tickPositions](#xAxis.tickPositions). - */ - tickPixelInterval: 72, - - showLastLabel: true, - - /** - * @extends xAxis.labels - */ - labels: { - /** - * What part of the string the given position is anchored to. Can - * be one of `"left"`, `"center"` or `"right"`. The exact position - * also depends on the `labels.x` setting. - * - * Angular gauges and solid gauges defaults to `center`. - * - * @validvalue ["left", "center", "right"] - * @type {String} - * @sample {highcharts} highcharts/yaxis/labels-align-left/ - * Left - * @default {highcharts|highmaps} right - * @default {highstock} left - * @apioption yAxis.labels.align - */ - - /** - * The x position offset of the label relative to the tick position - * on the axis. Defaults to -15 for left axis, 15 for right axis. - * - * @sample {highcharts} highcharts/xaxis/labels-x/ - * Y axis labels placed on grid lines - */ - x: -8 - }, - - /** - * @productdesc {highmaps} - * In Highmaps, the axis line is hidden by default, because the axis is - * not visible by default. - * - * @apioption yAxis.lineColor - */ - - /** - * @sample {highcharts} highcharts/yaxis/min-startontick-false/ - * -50 with startOnTick to false - * @sample {highcharts} highcharts/yaxis/min-startontick-true/ - * -50 with startOnTick true by default - * @sample {highstock} stock/yaxis/min-max/ - * Fixed min and max on Y axis - * @sample {highmaps} maps/axis/min-max/ - * Pre-zoomed to a specific area - * @apioption yAxis.min - */ - - /** - * @sample {highcharts} highcharts/yaxis/max-200/ - * Y axis max of 200 - * @sample {highcharts} highcharts/yaxis/max-logarithmic/ - * Y axis max on logarithmic axis - * @sample {highstock} stock/yaxis/min-max/ - * Fixed min and max on Y axis - * @sample {highmaps} maps/axis/min-max/ - * Pre-zoomed to a specific area - * @apioption yAxis.max - */ - - /** - * Padding of the max value relative to the length of the axis. A - * padding of 0.05 will make a 100px axis 5px longer. This is useful - * when you don't want the highest data value to appear on the edge - * of the plot area. When the axis' `max` option is set or a max extreme - * is set using `axis.setExtremes()`, the maxPadding will be ignored. - * - * @sample {highcharts} highcharts/yaxis/maxpadding-02/ - * Max padding of 0.2 - * @sample {highstock} stock/xaxis/minpadding-maxpadding/ - * Greater min- and maxPadding - * @since 1.2.0 - * @product highcharts highstock - */ - maxPadding: 0.05, - - /** - * Padding of the min value relative to the length of the axis. A - * padding of 0.05 will make a 100px axis 5px longer. This is useful - * when you don't want the lowest data value to appear on the edge - * of the plot area. When the axis' `min` option is set or a max extreme - * is set using `axis.setExtremes()`, the maxPadding will be ignored. - * - * @sample {highcharts} highcharts/yaxis/minpadding/ - * Min padding of 0.2 - * @sample {highstock} stock/xaxis/minpadding-maxpadding/ - * Greater min- and maxPadding - * @since 1.2.0 - * @product highcharts highstock - */ - minPadding: 0.05, - - /** - * Whether to force the axis to start on a tick. Use this option with - * the `maxPadding` option to control the axis start. - * - * @sample {highcharts} highcharts/xaxis/startontick-false/ - * False by default - * @sample {highcharts} highcharts/xaxis/startontick-true/ - * True - * @sample {highstock} stock/xaxis/endontick/ - * False for Y axis - * @since 1.2.0 - * @product highcharts highstock - */ - startOnTick: true, - - /** - * @extends xAxis.title - */ - title: { - - /** - * The rotation of the text in degrees. 0 is horizontal, 270 is - * vertical reading from bottom to top. - * - * @sample {highcharts} highcharts/yaxis/title-offset/ - * Horizontal - */ - rotation: 270, - - /** - * The actual text of the axis title. Horizontal texts can contain - * HTML, but rotated texts are painted using vector techniques and - * must be clean text. The Y axis title is disabled by setting the - * `text` option to `null`. - * - * @sample {highcharts} highcharts/xaxis/title-text/ - * Custom HTML - * @default {highcharts} Values - * @default {highstock} null - * @product highcharts highstock - */ - text: 'Values' - }, - - /** - * The stack labels show the total value for each bar in a stacked - * column or bar chart. The label will be placed on top of positive - * columns and below negative columns. In case of an inverted column - * chart or a bar chart the label is placed to the right of positive - * bars and to the left of negative bars. - * - * @product highcharts - */ - stackLabels: { - - /** - * Allow the stack labels to overlap. - * - * @sample {highcharts} - * highcharts/yaxis/stacklabels-allowoverlap-false/ - * Default false - * @since 5.0.13 - * @product highcharts - */ - allowOverlap: false, - - /** - * Enable or disable the stack total labels. - * - * @sample {highcharts} highcharts/yaxis/stacklabels-enabled/ - * Enabled stack total labels - * @since 2.1.5 - * @product highcharts - */ - enabled: false, - - /** - * Callback JavaScript function to format the label. The value is - * given by `this.total`. - * - * @default function() { return this.total; } - * - * @type {Function} - * @sample {highcharts} highcharts/yaxis/stacklabels-formatter/ - * Added units to stack total value - * @since 2.1.5 - * @product highcharts - */ - formatter: function() { - return H.numberFormat(this.total, -1); - }, - - - /** - * CSS styles for the label. - * - * In styled mode, the styles are set in the - * `.highcharts-stack-label` class. - * - * @type {CSSObject} - * @sample {highcharts} highcharts/yaxis/stacklabels-style/ - * Red stack total labels - * @since 2.1.5 - * @product highcharts - */ - style: { - fontSize: '11px', - fontWeight: 'bold', - color: '#000000', - textOutline: '1px contrast' - } - - }, - - gridLineWidth: 1, - lineWidth: 0 - // tickWidth: 0 - - }, - - /** - * These options extend the defaultOptions for left axes. - * - * @private - * @type {Object} - */ - defaultLeftAxisOptions: { - labels: { - x: -15 - }, - title: { - rotation: 270 - } - }, - - /** - * These options extend the defaultOptions for right axes. - * - * @private - * @type {Object} - */ - defaultRightAxisOptions: { - labels: { - x: 15 - }, - title: { - rotation: 90 - } - }, - - /** - * These options extend the defaultOptions for bottom axes. - * - * @private - * @type {Object} - */ - defaultBottomAxisOptions: { - labels: { - autoRotation: [-45], - x: 0 - // overflow: undefined, - // staggerLines: null - }, - title: { - rotation: 0 - } - }, - /** - * These options extend the defaultOptions for top axes. - * - * @private - * @type {Object} - */ - defaultTopAxisOptions: { - labels: { - autoRotation: [-45], - x: 0 - // overflow: undefined - // staggerLines: null - }, - title: { - rotation: 0 - } - }, - - /** - * Overrideable function to initialize the axis. - * - * @see {@link Axis} - */ - init: function(chart, userOptions) { - - - var isXAxis = userOptions.isX, - axis = this; - - - /** - * The Chart that the axis belongs to. - * - * @name chart - * @memberOf Axis - * @type {Chart} - */ - axis.chart = chart; - - /** - * Whether the axis is horizontal. - * - * @name horiz - * @memberOf Axis - * @type {Boolean} - */ - axis.horiz = chart.inverted && !axis.isZAxis ? !isXAxis : isXAxis; - - // Flag, isXAxis - axis.isXAxis = isXAxis; - - /** - * The collection where the axis belongs, for example `xAxis`, `yAxis` - * or `colorAxis`. Corresponds to properties on Chart, for example - * {@link Chart.xAxis}. - * - * @name coll - * @memberOf Axis - * @type {String} - */ - axis.coll = axis.coll || (isXAxis ? 'xAxis' : 'yAxis'); - - - axis.opposite = userOptions.opposite; // needed in setOptions - - /** - * The side on which the axis is rendered. 0 is top, 1 is right, 2 is - * bottom and 3 is left. - * - * @name side - * @memberOf Axis - * @type {Number} - */ - axis.side = userOptions.side || (axis.horiz ? - (axis.opposite ? 0 : 2) : // top : bottom - (axis.opposite ? 1 : 3)); // right : left - - axis.setOptions(userOptions); - - - var options = this.options, - type = options.type, - isDatetimeAxis = type === 'datetime'; - - axis.labelFormatter = options.labels.formatter || - axis.defaultLabelFormatter; // can be overwritten by dynamic format - - - // Flag, stagger lines or not - axis.userOptions = userOptions; - - axis.minPixelPadding = 0; - - - /** - * Whether the axis is reversed. Based on the `axis.reversed`, - * option, but inverted charts have reversed xAxis by default. - * - * @name reversed - * @memberOf Axis - * @type {Boolean} - */ - axis.reversed = options.reversed; - axis.visible = options.visible !== false; - axis.zoomEnabled = options.zoomEnabled !== false; - - // Initial categories - axis.hasNames = type === 'category' || options.categories === true; - axis.categories = options.categories || axis.hasNames; - axis.names = axis.names || []; // Preserve on update (#3830) - - // Placeholder for plotlines and plotbands groups - axis.plotLinesAndBandsGroups = {}; - - // Shorthand types - axis.isLog = type === 'logarithmic'; - axis.isDatetimeAxis = isDatetimeAxis; - axis.positiveValuesOnly = axis.isLog && !axis.allowNegativeLog; - - // Flag, if axis is linked to another axis - axis.isLinked = defined(options.linkedTo); - - // Major ticks - axis.ticks = {}; - axis.labelEdge = []; - // Minor ticks - axis.minorTicks = {}; - - // List of plotLines/Bands - axis.plotLinesAndBands = []; - - // Alternate bands - axis.alternateBands = {}; - - // Axis metrics - axis.len = 0; - axis.minRange = axis.userMinRange = options.minRange || options.maxZoom; - axis.range = options.range; - axis.offset = options.offset || 0; - - - // Dictionary for stacks - axis.stacks = {}; - axis.oldStacks = {}; - axis.stacksTouched = 0; - - - /** - * The maximum value of the axis. In a logarithmic axis, this is the - * logarithm of the real value, and the real value can be obtained from - * {@link Axis#getExtremes}. - * - * @name max - * @memberOf Axis - * @type {Number} - */ - axis.max = null; - /** - * The minimum value of the axis. In a logarithmic axis, this is the - * logarithm of the real value, and the real value can be obtained from - * {@link Axis#getExtremes}. - * - * @name min - * @memberOf Axis - * @type {Number} - */ - axis.min = null; - - - /** - * The processed crosshair options. - * - * @name crosshair - * @memberOf Axis - * @type {AxisCrosshairOptions} - */ - axis.crosshair = pick( - options.crosshair, - splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1], - false - ); - - var events = axis.options.events; - - // Register. Don't add it again on Axis.update(). - if (inArray(axis, chart.axes) === -1) { // - if (isXAxis) { // #2713 - chart.axes.splice(chart.xAxis.length, 0, axis); - } else { - chart.axes.push(axis); - } - - chart[axis.coll].push(axis); - } - - /** - * All series associated to the axis. - * - * @name series - * @memberOf Axis - * @type {Array.} - */ - axis.series = axis.series || []; // populated by Series - - // Reversed axis - if ( - chart.inverted && - !axis.isZAxis && - isXAxis && - axis.reversed === undefined - ) { - axis.reversed = true; - } - - // register event listeners - objectEach(events, function(event, eventType) { - addEvent(axis, eventType, event); - }); - - // extend logarithmic axis - axis.lin2log = options.linearToLogConverter || axis.lin2log; - if (axis.isLog) { - axis.val2lin = axis.log2lin; - axis.lin2val = axis.lin2log; - } - }, - - /** - * Merge and set options. - * - * @private - */ - setOptions: function(userOptions) { - this.options = merge( - this.defaultOptions, - this.coll === 'yAxis' && this.defaultYAxisOptions, [ - this.defaultTopAxisOptions, - this.defaultRightAxisOptions, - this.defaultBottomAxisOptions, - this.defaultLeftAxisOptions - ][this.side], - merge( - defaultOptions[this.coll], // if set in setOptions (#1053) - userOptions - ) - ); - }, - - /** - * The default label formatter. The context is a special config object for - * the label. In apps, use the {@link - * https://api.highcharts.com/highcharts/xAxis.labels.formatter| - * labels.formatter} instead except when a modification is needed. - * - * @private - */ - defaultLabelFormatter: function() { - var axis = this.axis, - value = this.value, - categories = axis.categories, - dateTimeLabelFormat = this.dateTimeLabelFormat, - lang = defaultOptions.lang, - numericSymbols = lang.numericSymbols, - numSymMagnitude = lang.numericSymbolMagnitude || 1000, - i = numericSymbols && numericSymbols.length, - multi, - ret, - formatOption = axis.options.labels.format, - - // make sure the same symbol is added for all labels on a linear - // axis - numericSymbolDetector = axis.isLog ? - Math.abs(value) : - axis.tickInterval; - - if (formatOption) { - ret = format(formatOption, this); - - } else if (categories) { - ret = value; - - } else if (dateTimeLabelFormat) { // datetime axis - ret = H.dateFormat(dateTimeLabelFormat, value); - - } else if (i && numericSymbolDetector >= 1000) { - // Decide whether we should add a numeric symbol like k (thousands) - // or M (millions). If we are to enable this in tooltip or other - // places as well, we can move this logic to the numberFormatter and - // enable it by a parameter. - while (i-- && ret === undefined) { - multi = Math.pow(numSymMagnitude, i + 1); - if ( - // Only accept a numeric symbol when the distance is more - // than a full unit. So for example if the symbol is k, we - // don't accept numbers like 0.5k. - numericSymbolDetector >= multi && - // Accept one decimal before the symbol. Accepts 0.5k but - // not 0.25k. How does this work with the previous? - (value * 10) % multi === 0 && - numericSymbols[i] !== null && - value !== 0 - ) { // #5480 - ret = H.numberFormat(value / multi, -1) + numericSymbols[i]; - } - } - } - - if (ret === undefined) { - if (Math.abs(value) >= 10000) { // add thousands separators - ret = H.numberFormat(value, -1); - } else { // small numbers - ret = H.numberFormat(value, -1, undefined, ''); // #2466 - } - } - - return ret; - }, - - /** - * Get the minimum and maximum for the series of each axis. The function - * analyzes the axis series and updates `this.dataMin` and `this.dataMax`. - * - * @private - */ - getSeriesExtremes: function() { - var axis = this, - chart = axis.chart; - axis.hasVisibleSeries = false; - - // Reset properties in case we're redrawing (#3353) - axis.dataMin = axis.dataMax = axis.threshold = null; - axis.softThreshold = !axis.isXAxis; - - if (axis.buildStacks) { - axis.buildStacks(); - } - - // loop through this axis' series - each(axis.series, function(series) { - - if (series.visible || !chart.options.chart.ignoreHiddenSeries) { - - var seriesOptions = series.options, - xData, - threshold = seriesOptions.threshold, - seriesDataMin, - seriesDataMax; - - axis.hasVisibleSeries = true; - - // Validate threshold in logarithmic axes - if (axis.positiveValuesOnly && threshold <= 0) { - threshold = null; - } - - // Get dataMin and dataMax for X axes - if (axis.isXAxis) { - xData = series.xData; - if (xData.length) { - // If xData contains values which is not numbers, then - // filter them out. To prevent performance hit, we only - // do this after we have already found seriesDataMin - // because in most cases all data is valid. #5234. - seriesDataMin = arrayMin(xData); - seriesDataMax = arrayMax(xData); - - if (!isNumber(seriesDataMin) && - !(seriesDataMin instanceof Date) // #5010 - ) { - xData = grep(xData, isNumber); - // Do it again with valid data - seriesDataMin = arrayMin(xData); - } - - axis.dataMin = Math.min( - pick(axis.dataMin, xData[0], seriesDataMin), - seriesDataMin - ); - axis.dataMax = Math.max( - pick(axis.dataMax, xData[0], seriesDataMax), - seriesDataMax - ); - } - - // Get dataMin and dataMax for Y axes, as well as handle - // stacking and processed data - } else { - - // Get this particular series extremes - series.getExtremes(); - seriesDataMax = series.dataMax; - seriesDataMin = series.dataMin; - - // Get the dataMin and dataMax so far. If percentage is - // used, the min and max are always 0 and 100. If - // seriesDataMin and seriesDataMax is null, then series - // doesn't have active y data, we continue with nulls - if (defined(seriesDataMin) && defined(seriesDataMax)) { - axis.dataMin = Math.min( - pick(axis.dataMin, seriesDataMin), - seriesDataMin - ); - axis.dataMax = Math.max( - pick(axis.dataMax, seriesDataMax), - seriesDataMax - ); - } - - // Adjust to threshold - if (defined(threshold)) { - axis.threshold = threshold; - } - // If any series has a hard threshold, it takes precedence - if (!seriesOptions.softThreshold || - axis.positiveValuesOnly - ) { - axis.softThreshold = false; - } - } - } - }); - }, - - /** - * Translate from axis value to pixel position on the chart, or back. Use - * the `toPixels` and `toValue` functions in applications. - * - * @private - */ - translate: function( - val, - backwards, - cvsCoord, - old, - handleLog, - pointPlacement - ) { - var axis = this.linkedParent || this, // #1417 - sign = 1, - cvsOffset = 0, - localA = old ? axis.oldTransA : axis.transA, - localMin = old ? axis.oldMin : axis.min, - returnValue, - minPixelPadding = axis.minPixelPadding, - doPostTranslate = ( - axis.isOrdinal || - axis.isBroken || - (axis.isLog && handleLog) - ) && axis.lin2val; - - if (!localA) { - localA = axis.transA; - } - - // In vertical axes, the canvas coordinates start from 0 at the top like - // in SVG. - if (cvsCoord) { - sign *= -1; // canvas coordinates inverts the value - cvsOffset = axis.len; - } - - // Handle reversed axis - if (axis.reversed) { - sign *= -1; - cvsOffset -= sign * (axis.sector || axis.len); - } - - // From pixels to value - if (backwards) { // reverse translation - - val = val * sign + cvsOffset; - val -= minPixelPadding; - returnValue = val / localA + localMin; // from chart pixel to value - if (doPostTranslate) { // log and ordinal axes - returnValue = axis.lin2val(returnValue); - } - - // From value to pixels - } else { - if (doPostTranslate) { // log and ordinal axes - val = axis.val2lin(val); - } - returnValue = isNumber(localMin) ? - ( - sign * (val - localMin) * localA + - cvsOffset + - (sign * minPixelPadding) + - (isNumber(pointPlacement) ? localA * pointPlacement : 0) - ) : - undefined; - } - - return returnValue; - }, - - /** - * Translate a value in terms of axis units into pixels within the chart. - * - * @param {Number} value - * A value in terms of axis units. - * @param {Boolean} paneCoordinates - * Whether to return the pixel coordinate relative to the chart or - * just the axis/pane itself. - * @return {Number} Pixel position of the value on the chart or axis. - */ - toPixels: function(value, paneCoordinates) { - return this.translate(value, false, !this.horiz, null, true) + - (paneCoordinates ? 0 : this.pos); - }, - - /** - * Translate a pixel position along the axis to a value in terms of axis - * units. - * @param {Number} pixel - * The pixel value coordinate. - * @param {Boolean} paneCoordiantes - * Whether the input pixel is relative to the chart or just the - * axis/pane itself. - * @return {Number} The axis value. - */ - toValue: function(pixel, paneCoordinates) { - return this.translate( - pixel - (paneCoordinates ? 0 : this.pos), - true, !this.horiz, - null, - true - ); - }, - - /** - * Create the path for a plot line that goes from the given value on - * this axis, across the plot to the opposite side. Also used internally for - * grid lines and crosshairs. - * - * @param {Number} value - * Axis value. - * @param {Number} [lineWidth=1] - * Used for calculation crisp line coordinates. - * @param {Boolean} [old=false] - * Use old coordinates (for resizing and rescaling). - * @param {Boolean} [force=false] - * If `false`, the function will return null when it falls outside - * the axis bounds. - * @param {Number} [translatedValue] - * If given, return the plot line path of a pixel position on the - * axis. - * - * @return {Array.} - * The SVG path definition for the plot line. - */ - getPlotLinePath: function(value, lineWidth, old, force, translatedValue) { - var axis = this, - chart = axis.chart, - axisLeft = axis.left, - axisTop = axis.top, - x1, - y1, - x2, - y2, - cHeight = (old && chart.oldChartHeight) || chart.chartHeight, - cWidth = (old && chart.oldChartWidth) || chart.chartWidth, - skip, - transB = axis.transB, - /** - * Check if x is between a and b. If not, either move to a/b - * or skip, depending on the force parameter. - */ - between = function(x, a, b) { - if (x < a || x > b) { - if (force) { - x = Math.min(Math.max(a, x), b); - } else { - skip = true; - } - } - return x; - }; - - translatedValue = pick( - translatedValue, - axis.translate(value, null, null, old) - ); - x1 = x2 = Math.round(translatedValue + transB); - y1 = y2 = Math.round(cHeight - translatedValue - transB); - if (!isNumber(translatedValue)) { // no min or max - skip = true; - force = false; // #7175, don't force it when path is invalid - } else if (axis.horiz) { - y1 = axisTop; - y2 = cHeight - axis.bottom; - x1 = x2 = between(x1, axisLeft, axisLeft + axis.width); - } else { - x1 = axisLeft; - x2 = cWidth - axis.right; - y1 = y2 = between(y1, axisTop, axisTop + axis.height); - } - return skip && !force ? - null : - chart.renderer.crispLine( - ['M', x1, y1, 'L', x2, y2], - lineWidth || 1 - ); - }, - - /** - * Internal function to et the tick positions of a linear axis to round - * values like whole tens or every five. - * - * @param {Number} tickInterval - * The normalized tick interval - * @param {Number} min - * Axis minimum. - * @param {Number} max - * Axis maximum. - * - * @return {Array.} - * An array of axis values where ticks should be placed. - */ - getLinearTickPositions: function(tickInterval, min, max) { - var pos, - lastPos, - roundedMin = - correctFloat(Math.floor(min / tickInterval) * tickInterval), - roundedMax = - correctFloat(Math.ceil(max / tickInterval) * tickInterval), - tickPositions = [], - precision; - - // When the precision is higher than what we filter out in - // correctFloat, skip it (#6183). - if (correctFloat(roundedMin + tickInterval) === roundedMin) { - precision = 20; - } - - // For single points, add a tick regardless of the relative position - // (#2662, #6274) - if (this.single) { - return [min]; - } - - // Populate the intermediate values - pos = roundedMin; - while (pos <= roundedMax) { - - // Place the tick on the rounded value - tickPositions.push(pos); - - // Always add the raw tickInterval, not the corrected one. - pos = correctFloat( - pos + tickInterval, - precision - ); - - // If the interval is not big enough in the current min - max range - // to actually increase the loop variable, we need to break out to - // prevent endless loop. Issue #619 - if (pos === lastPos) { - break; - } - - // Record the last value - lastPos = pos; - } - return tickPositions; - }, - - /** - * Resolve the new minorTicks/minorTickInterval options into the legacy - * loosely typed minorTickInterval option. - */ - getMinorTickInterval: function() { - var options = this.options; - - if (options.minorTicks === true) { - return pick(options.minorTickInterval, 'auto'); - } - if (options.minorTicks === false) { - return null; - } - return options.minorTickInterval; - }, - - /** - * Internal function to return the minor tick positions. For logarithmic - * axes, the same logic as for major ticks is reused. - * - * @return {Array.} - * An array of axis values where ticks should be placed. - */ - getMinorTickPositions: function() { - var axis = this, - options = axis.options, - tickPositions = axis.tickPositions, - minorTickInterval = axis.minorTickInterval, - minorTickPositions = [], - pos, - pointRangePadding = axis.pointRangePadding || 0, - min = axis.min - pointRangePadding, // #1498 - max = axis.max + pointRangePadding, // #1498 - range = max - min; - - // If minor ticks get too dense, they are hard to read, and may cause - // long running script. So we don't draw them. - if (range && range / minorTickInterval < axis.len / 3) { // #3875 - - if (axis.isLog) { - // For each interval in the major ticks, compute the minor ticks - // separately. - each(this.paddedTicks, function(pos, i, paddedTicks) { - if (i) { - minorTickPositions.push.apply( - minorTickPositions, - axis.getLogTickPositions( - minorTickInterval, - paddedTicks[i - 1], - paddedTicks[i], - true - ) - ); - } - }); - - } else if ( - axis.isDatetimeAxis && - this.getMinorTickInterval() === 'auto' - ) { // #1314 - minorTickPositions = minorTickPositions.concat( - axis.getTimeTicks( - axis.normalizeTimeTickInterval(minorTickInterval), - min, - max, - options.startOfWeek - ) - ); - } else { - for ( - pos = min + (tickPositions[0] - min) % minorTickInterval; pos <= max; pos += minorTickInterval - ) { - // Very, very, tight grid lines (#5771) - if (pos === minorTickPositions[0]) { - break; - } - minorTickPositions.push(pos); - } - } - } - - if (minorTickPositions.length !== 0) { - axis.trimTicks(minorTickPositions); // #3652 #3743 #1498 #6330 - } - return minorTickPositions; - }, - - /** - * Adjust the min and max for the minimum range. Keep in mind that the - * series data is not yet processed, so we don't have information on data - * cropping and grouping, or updated axis.pointRange or series.pointRange. - * The data can't be processed until we have finally established min and - * max. - * - * @private - */ - adjustForMinRange: function() { - var axis = this, - options = axis.options, - min = axis.min, - max = axis.max, - zoomOffset, - spaceAvailable, - closestDataRange, - i, - distance, - xData, - loopLength, - minArgs, - maxArgs, - minRange; - - // Set the automatic minimum range based on the closest point distance - if (axis.isXAxis && axis.minRange === undefined && !axis.isLog) { - - if (defined(options.min) || defined(options.max)) { - axis.minRange = null; // don't do this again - - } else { - - // Find the closest distance between raw data points, as opposed - // to closestPointRange that applies to processed points - // (cropped and grouped) - each(axis.series, function(series) { - xData = series.xData; - loopLength = series.xIncrement ? 1 : xData.length - 1; - for (i = loopLength; i > 0; i--) { - distance = xData[i] - xData[i - 1]; - if ( - closestDataRange === undefined || - distance < closestDataRange - ) { - closestDataRange = distance; - } - } - }); - axis.minRange = Math.min( - closestDataRange * 5, - axis.dataMax - axis.dataMin - ); - } - } - - // if minRange is exceeded, adjust - if (max - min < axis.minRange) { - - spaceAvailable = axis.dataMax - axis.dataMin >= axis.minRange; - minRange = axis.minRange; - zoomOffset = (minRange - max + min) / 2; - - // if min and max options have been set, don't go beyond it - minArgs = [min - zoomOffset, pick(options.min, min - zoomOffset)]; - // If space is available, stay within the data range - if (spaceAvailable) { - minArgs[2] = axis.isLog ? - axis.log2lin(axis.dataMin) : - axis.dataMin; - } - min = arrayMax(minArgs); - - maxArgs = [min + minRange, pick(options.max, min + minRange)]; - // If space is availabe, stay within the data range - if (spaceAvailable) { - maxArgs[2] = axis.isLog ? - axis.log2lin(axis.dataMax) : - axis.dataMax; - } - - max = arrayMin(maxArgs); - - // now if the max is adjusted, adjust the min back - if (max - min < minRange) { - minArgs[0] = max - minRange; - minArgs[1] = pick(options.min, max - minRange); - min = arrayMax(minArgs); - } - } - - // Record modified extremes - axis.min = min; - axis.max = max; - }, - - /** - * Find the closestPointRange across all series. - * - * @private - */ - getClosest: function() { - var ret; - - if (this.categories) { - ret = 1; - } else { - each(this.series, function(series) { - var seriesClosest = series.closestPointRange, - visible = series.visible || - !series.chart.options.chart.ignoreHiddenSeries; - - if (!series.noSharedTooltip && - defined(seriesClosest) && - visible - ) { - ret = defined(ret) ? - Math.min(ret, seriesClosest) : - seriesClosest; - } - }); - } - return ret; - }, - - /** - * When a point name is given and no x, search for the name in the existing - * categories, or if categories aren't provided, search names or create a - * new category (#2522). - * - * @private - * - * @param {Point} - * The point to inspect. - * - * @return {Number} - * The X value that the point is given. - */ - nameToX: function(point) { - var explicitCategories = isArray(this.categories), - names = explicitCategories ? this.categories : this.names, - nameX = point.options.x, - x; - - point.series.requireSorting = false; - - if (!defined(nameX)) { - nameX = this.options.uniqueNames === false ? - point.series.autoIncrement() : - inArray(point.name, names); - } - if (nameX === -1) { // The name is not found in currenct categories - if (!explicitCategories) { - x = names.length; - } - } else { - x = nameX; - } - - // Write the last point's name to the names array - if (x !== undefined) { - this.names[x] = point.name; - } - - return x; - }, - - /** - * When changes have been done to series data, update the axis.names. - * - * @private - */ - updateNames: function() { - var axis = this; - - if (this.names.length > 0) { - this.names.length = 0; - this.minRange = this.userMinRange; // Reset - each(this.series || [], function(series) { - - // Reset incrementer (#5928) - series.xIncrement = null; - - // When adding a series, points are not yet generated - if (!series.points || series.isDirtyData) { - series.processData(); - series.generatePoints(); - } - - each(series.points, function(point, i) { - var x; - if (point.options) { - x = axis.nameToX(point); - if (x !== undefined && x !== point.x) { - point.x = x; - series.xData[i] = x; - } - } - }); - }); - } - }, - - /** - * Update translation information. - * - * @private - */ - setAxisTranslation: function(saveOld) { - var axis = this, - range = axis.max - axis.min, - pointRange = axis.axisPointRange || 0, - closestPointRange, - minPointOffset = 0, - pointRangePadding = 0, - linkedParent = axis.linkedParent, - ordinalCorrection, - hasCategories = !!axis.categories, - transA = axis.transA, - isXAxis = axis.isXAxis; - - // Adjust translation for padding. Y axis with categories need to go - // through the same (#1784). - if (isXAxis || hasCategories || pointRange) { - - // Get the closest points - closestPointRange = axis.getClosest(); - - if (linkedParent) { - minPointOffset = linkedParent.minPointOffset; - pointRangePadding = linkedParent.pointRangePadding; - } else { - each(axis.series, function(series) { - var seriesPointRange = hasCategories ? - 1 : - ( - isXAxis ? - pick( - series.options.pointRange, - closestPointRange, - 0 - ) : - (axis.axisPointRange || 0) - ), // #2806 - pointPlacement = series.options.pointPlacement; - - pointRange = Math.max(pointRange, seriesPointRange); - - if (!axis.single) { - // minPointOffset is the value padding to the left of - // the axis in order to make room for points with a - // pointRange, typically columns. When the - // pointPlacement option is 'between' or 'on', this - // padding does not apply. - minPointOffset = Math.max( - minPointOffset, - isString(pointPlacement) ? 0 : seriesPointRange / 2 - ); - - // Determine the total padding needed to the length of - // the axis to make room for the pointRange. If the - // series' pointPlacement is 'on', no padding is added. - pointRangePadding = Math.max( - pointRangePadding, - pointPlacement === 'on' ? 0 : seriesPointRange - ); - } - }); - } - - // Record minPointOffset and pointRangePadding - ordinalCorrection = axis.ordinalSlope && closestPointRange ? - axis.ordinalSlope / closestPointRange : - 1; // #988, #1853 - axis.minPointOffset = minPointOffset = - minPointOffset * ordinalCorrection; - axis.pointRangePadding = - pointRangePadding = pointRangePadding * ordinalCorrection; - - // pointRange means the width reserved for each point, like in a - // column chart - axis.pointRange = Math.min(pointRange, range); - - // closestPointRange means the closest distance between points. In - // columns it is mostly equal to pointRange, but in lines pointRange - // is 0 while closestPointRange is some other value - if (isXAxis) { - axis.closestPointRange = closestPointRange; - } - } - - // Secondary values - if (saveOld) { - axis.oldTransA = transA; - } - axis.translationSlope = axis.transA = transA = - axis.options.staticScale || - axis.len / ((range + pointRangePadding) || 1); - - // Translation addend - axis.transB = axis.horiz ? axis.left : axis.bottom; - axis.minPixelPadding = transA * minPointOffset; - }, - - minFromRange: function() { - return this.max - this.range; - }, - - /** - * Set the tick positions to round values and optionally extend the extremes - * to the nearest tick. - * - * @private - */ - setTickInterval: function(secondPass) { - var axis = this, - chart = axis.chart, - options = axis.options, - isLog = axis.isLog, - log2lin = axis.log2lin, - isDatetimeAxis = axis.isDatetimeAxis, - isXAxis = axis.isXAxis, - isLinked = axis.isLinked, - maxPadding = options.maxPadding, - minPadding = options.minPadding, - length, - linkedParentExtremes, - tickIntervalOption = options.tickInterval, - minTickInterval, - tickPixelIntervalOption = options.tickPixelInterval, - categories = axis.categories, - threshold = axis.threshold, - softThreshold = axis.softThreshold, - thresholdMin, - thresholdMax, - hardMin, - hardMax; - - if (!isDatetimeAxis && !categories && !isLinked) { - this.getTickAmount(); - } - - // Min or max set either by zooming/setExtremes or initial options - hardMin = pick(axis.userMin, options.min); - hardMax = pick(axis.userMax, options.max); - - // Linked axis gets the extremes from the parent axis - if (isLinked) { - axis.linkedParent = chart[axis.coll][options.linkedTo]; - linkedParentExtremes = axis.linkedParent.getExtremes(); - axis.min = pick( - linkedParentExtremes.min, - linkedParentExtremes.dataMin - ); - axis.max = pick( - linkedParentExtremes.max, - linkedParentExtremes.dataMax - ); - if (options.type !== axis.linkedParent.options.type) { - H.error(11, 1); // Can't link axes of different type - } - - // Initial min and max from the extreme data values - } else { - - // Adjust to hard threshold - if (!softThreshold && defined(threshold)) { - if (axis.dataMin >= threshold) { - thresholdMin = threshold; - minPadding = 0; - } else if (axis.dataMax <= threshold) { - thresholdMax = threshold; - maxPadding = 0; - } - } - - axis.min = pick(hardMin, thresholdMin, axis.dataMin); - axis.max = pick(hardMax, thresholdMax, axis.dataMax); - - } - - if (isLog) { - if ( - axis.positiveValuesOnly && - !secondPass && - Math.min(axis.min, pick(axis.dataMin, axis.min)) <= 0 - ) { // #978 - H.error(10, 1); // Can't plot negative values on log axis - } - // The correctFloat cures #934, float errors on full tens. But it - // was too aggressive for #4360 because of conversion back to lin, - // therefore use precision 15. - axis.min = correctFloat(log2lin(axis.min), 15); - axis.max = correctFloat(log2lin(axis.max), 15); - } - - // handle zoomed range - if (axis.range && defined(axis.max)) { - axis.userMin = axis.min = hardMin = - Math.max(axis.dataMin, axis.minFromRange()); // #618, #6773 - axis.userMax = hardMax = axis.max; - - axis.range = null; // don't use it when running setExtremes - } - - // Hook for Highstock Scroller. Consider combining with beforePadding. - fireEvent(axis, 'foundExtremes'); - - // Hook for adjusting this.min and this.max. Used by bubble series. - if (axis.beforePadding) { - axis.beforePadding(); - } - - // adjust min and max for the minimum range - axis.adjustForMinRange(); - - // Pad the values to get clear of the chart's edges. To avoid - // tickInterval taking the padding into account, we do this after - // computing tick interval (#1337). - if (!categories && - !axis.axisPointRange && - !axis.usePercentage && - !isLinked && - defined(axis.min) && - defined(axis.max) - ) { - length = axis.max - axis.min; - if (length) { - if (!defined(hardMin) && minPadding) { - axis.min -= length * minPadding; - } - if (!defined(hardMax) && maxPadding) { - axis.max += length * maxPadding; - } - } - } - - // Handle options for floor, ceiling, softMin and softMax (#6359) - if (isNumber(options.softMin) && !isNumber(axis.userMin)) { - axis.min = Math.min(axis.min, options.softMin); - } - if (isNumber(options.softMax) && !isNumber(axis.userMax)) { - axis.max = Math.max(axis.max, options.softMax); - } - if (isNumber(options.floor)) { - axis.min = Math.max(axis.min, options.floor); - } - if (isNumber(options.ceiling)) { - axis.max = Math.min(axis.max, options.ceiling); - } - - - // When the threshold is soft, adjust the extreme value only if the data - // extreme and the padded extreme land on either side of the threshold. - // For example, a series of [0, 1, 2, 3] would make the yAxis add a tick - // for -1 because of the default minPadding and startOnTick options. - // This is prevented by the softThreshold option. - if (softThreshold && defined(axis.dataMin)) { - threshold = threshold || 0; - if (!defined(hardMin) && - axis.min < threshold && - axis.dataMin >= threshold - ) { - axis.min = threshold; - - } else if (!defined(hardMax) && - axis.max > threshold && - axis.dataMax <= threshold - ) { - axis.max = threshold; - } - } - - - // get tickInterval - if ( - axis.min === axis.max || - axis.min === undefined || - axis.max === undefined - ) { - axis.tickInterval = 1; - - } else if ( - isLinked && - !tickIntervalOption && - tickPixelIntervalOption === - axis.linkedParent.options.tickPixelInterval - ) { - axis.tickInterval = tickIntervalOption = - axis.linkedParent.tickInterval; - - } else { - axis.tickInterval = pick( - tickIntervalOption, - this.tickAmount ? - ((axis.max - axis.min) / Math.max(this.tickAmount - 1, 1)) : - undefined, - // For categoried axis, 1 is default, for linear axis use - // tickPix - categories ? - 1 : - // don't let it be more than the data range - (axis.max - axis.min) * tickPixelIntervalOption / - Math.max(axis.len, tickPixelIntervalOption) - ); - } - - /** - * Now we're finished detecting min and max, crop and group series data. - * This is in turn needed in order to find tick positions in - * ordinal axes. - */ - if (isXAxis && !secondPass) { - each(axis.series, function(series) { - series.processData( - axis.min !== axis.oldMin || axis.max !== axis.oldMax - ); - }); - } - - // set the translation factor used in translate function - axis.setAxisTranslation(true); - - // hook for ordinal axes and radial axes - if (axis.beforeSetTickPositions) { - axis.beforeSetTickPositions(); - } - - // hook for extensions, used in Highstock ordinal axes - if (axis.postProcessTickInterval) { - axis.tickInterval = axis.postProcessTickInterval(axis.tickInterval); - } - - // In column-like charts, don't cramp in more ticks than there are - // points (#1943, #4184) - if (axis.pointRange && !tickIntervalOption) { - axis.tickInterval = Math.max(axis.pointRange, axis.tickInterval); - } - - // Before normalizing the tick interval, handle minimum tick interval. - // This applies only if tickInterval is not defined. - minTickInterval = pick( - options.minTickInterval, - axis.isDatetimeAxis && axis.closestPointRange - ); - if (!tickIntervalOption && axis.tickInterval < minTickInterval) { - axis.tickInterval = minTickInterval; - } - - // for linear axes, get magnitude and normalize the interval - if (!isDatetimeAxis && !isLog && !tickIntervalOption) { - axis.tickInterval = normalizeTickInterval( - axis.tickInterval, - null, - getMagnitude(axis.tickInterval), - // If the tick interval is between 0.5 and 5 and the axis max is - // in the order of thousands, chances are we are dealing with - // years. Don't allow decimals. #3363. - pick( - options.allowDecimals, !( - axis.tickInterval > 0.5 && - axis.tickInterval < 5 && - axis.max > 1000 && - axis.max < 9999 - ) - ), !!this.tickAmount - ); - } - - // Prevent ticks from getting so close that we can't draw the labels - if (!this.tickAmount) { - axis.tickInterval = axis.unsquish(); - } - - this.setTickPositions(); - }, - - /** - * Now we have computed the normalized tickInterval, get the tick positions - */ - setTickPositions: function() { - - var options = this.options, - tickPositions, - tickPositionsOption = options.tickPositions, - minorTickIntervalOption = this.getMinorTickInterval(), - tickPositioner = options.tickPositioner, - startOnTick = options.startOnTick, - endOnTick = options.endOnTick; - - // Set the tickmarkOffset - this.tickmarkOffset = ( - this.categories && - options.tickmarkPlacement === 'between' && - this.tickInterval === 1 - ) ? 0.5 : 0; // #3202 - - - // get minorTickInterval - this.minorTickInterval = - minorTickIntervalOption === 'auto' && - this.tickInterval ? - this.tickInterval / 5 : - minorTickIntervalOption; - - // When there is only one point, or all points have the same value on - // this axis, then min and max are equal and tickPositions.length is 0 - // or 1. In this case, add some padding in order to center the point, - // but leave it with one tick. #1337. - this.single = - this.min === this.max && - defined(this.min) && - !this.tickAmount && - ( - // Data is on integer (#6563) - parseInt(this.min, 10) === this.min || - - // Between integers and decimals are not allowed (#6274) - options.allowDecimals !== false - ); - - // Find the tick positions. Work on a copy (#1565) - this.tickPositions = tickPositions = - tickPositionsOption && tickPositionsOption.slice(); - if (!tickPositions) { - - if (this.isDatetimeAxis) { - tickPositions = this.getTimeTicks( - this.normalizeTimeTickInterval( - this.tickInterval, - options.units - ), - this.min, - this.max, - options.startOfWeek, - this.ordinalPositions, - this.closestPointRange, - true - ); - } else if (this.isLog) { - tickPositions = this.getLogTickPositions( - this.tickInterval, - this.min, - this.max - ); - } else { - tickPositions = this.getLinearTickPositions( - this.tickInterval, - this.min, - this.max - ); - } - - // Too dense ticks, keep only the first and last (#4477) - if (tickPositions.length > this.len) { - tickPositions = [tickPositions[0], tickPositions.pop()]; - // Reduce doubled value (#7339) - if (tickPositions[0] === tickPositions[1]) { - tickPositions.length = 1; - } - } - - this.tickPositions = tickPositions; - - // Run the tick positioner callback, that allows modifying auto tick - // positions. - if (tickPositioner) { - tickPositioner = tickPositioner.apply( - this, [this.min, this.max] - ); - if (tickPositioner) { - this.tickPositions = tickPositions = tickPositioner; - } - } - - } - - // Reset min/max or remove extremes based on start/end on tick - this.paddedTicks = tickPositions.slice(0); // Used for logarithmic minor - this.trimTicks(tickPositions, startOnTick, endOnTick); - if (!this.isLinked) { - - // Substract half a unit (#2619, #2846, #2515, #3390), - // but not in case of multiple ticks (#6897) - if (this.single && tickPositions.length < 2) { - this.min -= 0.5; - this.max += 0.5; - } - if (!tickPositionsOption && !tickPositioner) { - this.adjustTickAmount(); - } - } - }, - - /** - * Handle startOnTick and endOnTick by either adapting to padding min/max or - * rounded min/max. Also handle single data points. - * - * @private - */ - trimTicks: function(tickPositions, startOnTick, endOnTick) { - var roundedMin = tickPositions[0], - roundedMax = tickPositions[tickPositions.length - 1], - minPointOffset = this.minPointOffset || 0; - - if (!this.isLinked) { - if (startOnTick && roundedMin !== -Infinity) { // #6502 - this.min = roundedMin; - } else { - while (this.min - minPointOffset > tickPositions[0]) { - tickPositions.shift(); - } - } - - if (endOnTick) { - this.max = roundedMax; - } else { - while (this.max + minPointOffset < - tickPositions[tickPositions.length - 1]) { - tickPositions.pop(); - } - } - - // If no tick are left, set one tick in the middle (#3195) - if ( - tickPositions.length === 0 && - defined(roundedMin) && - !this.options.tickPositions - ) { - tickPositions.push((roundedMax + roundedMin) / 2); - } - } - }, - - /** - * Check if there are multiple axes in the same pane. - * - * @private - * @return {Boolean} - * True if there are other axes. - */ - alignToOthers: function() { - var others = {}, // Whether there is another axis to pair with this one - hasOther, - options = this.options; - - if ( - // Only if alignTicks is true - this.chart.options.chart.alignTicks !== false && - options.alignTicks !== false && - - // Don't try to align ticks on a log axis, they are not evenly - // spaced (#6021) - !this.isLog - ) { - each(this.chart[this.coll], function(axis) { - var otherOptions = axis.options, - horiz = axis.horiz, - key = [ - horiz ? otherOptions.left : otherOptions.top, - otherOptions.width, - otherOptions.height, - otherOptions.pane - ].join(','); - - - if (axis.series.length) { // #4442 - if (others[key]) { - hasOther = true; // #4201 - } else { - others[key] = 1; - } - } - }); - } - return hasOther; - }, - - /** - * Find the max ticks of either the x and y axis collection, and record it - * in `this.tickAmount`. - * - * @private - */ - getTickAmount: function() { - var options = this.options, - tickAmount = options.tickAmount, - tickPixelInterval = options.tickPixelInterval; - - if (!defined(options.tickInterval) && - this.len < tickPixelInterval && - !this.isRadial && - !this.isLog && - options.startOnTick && - options.endOnTick - ) { - tickAmount = 2; - } - - if (!tickAmount && this.alignToOthers()) { - // Add 1 because 4 tick intervals require 5 ticks (including first - // and last) - tickAmount = Math.ceil(this.len / tickPixelInterval) + 1; - } - - // For tick amounts of 2 and 3, compute five ticks and remove the - // intermediate ones. This prevents the axis from adding ticks that are - // too far away from the data extremes. - if (tickAmount < 4) { - this.finalTickAmt = tickAmount; - tickAmount = 5; - } - - this.tickAmount = tickAmount; - }, - - /** - * When using multiple axes, adjust the number of ticks to match the highest - * number of ticks in that group. - * - * @private - */ - adjustTickAmount: function() { - var tickInterval = this.tickInterval, - tickPositions = this.tickPositions, - tickAmount = this.tickAmount, - finalTickAmt = this.finalTickAmt, - currentTickAmount = tickPositions && tickPositions.length, - threshold = pick(this.threshold, this.softThreshold ? 0 : null), - i, - len; - - if (this.hasData()) { - if (currentTickAmount < tickAmount) { - while (tickPositions.length < tickAmount) { - - // Extend evenly for both sides unless we're on the - // threshold (#3965) - if ( - tickPositions.length % 2 || - this.min === threshold - ) { - // to the end - tickPositions.push(correctFloat( - tickPositions[tickPositions.length - 1] + - tickInterval - )); - } else { - // to the start - tickPositions.unshift(correctFloat( - tickPositions[0] - tickInterval - )); - } - } - this.transA *= (currentTickAmount - 1) / (tickAmount - 1); - this.min = tickPositions[0]; - this.max = tickPositions[tickPositions.length - 1]; - - // We have too many ticks, run second pass to try to reduce ticks - } else if (currentTickAmount > tickAmount) { - this.tickInterval *= 2; - this.setTickPositions(); - } - - // The finalTickAmt property is set in getTickAmount - if (defined(finalTickAmt)) { - i = len = tickPositions.length; - while (i--) { - if ( - // Remove every other tick - (finalTickAmt === 3 && i % 2 === 1) || - // Remove all but first and last - (finalTickAmt <= 2 && i > 0 && i < len - 1) - ) { - tickPositions.splice(i, 1); - } - } - this.finalTickAmt = undefined; - } - } - }, - - /** - * Set the scale based on data min and max, user set min and max or options. - * - * @private - */ - setScale: function() { - var axis = this, - isDirtyData, - isDirtyAxisLength; - - axis.oldMin = axis.min; - axis.oldMax = axis.max; - axis.oldAxisLength = axis.len; - - // set the new axisLength - axis.setAxisSize(); - isDirtyAxisLength = axis.len !== axis.oldAxisLength; - - // is there new data? - each(axis.series, function(series) { - if ( - series.isDirtyData || - series.isDirty || - // When x axis is dirty, we need new data extremes for y as well - series.xAxis.isDirty - ) { - isDirtyData = true; - } - }); - - // do we really need to go through all this? - if ( - isDirtyAxisLength || - isDirtyData || - axis.isLinked || - axis.forceRedraw || - axis.userMin !== axis.oldUserMin || - axis.userMax !== axis.oldUserMax || - axis.alignToOthers() - ) { - - if (axis.resetStacks) { - axis.resetStacks(); - } - - axis.forceRedraw = false; - - // get data extremes if needed - axis.getSeriesExtremes(); - - // get fixed positions based on tickInterval - axis.setTickInterval(); - - // record old values to decide whether a rescale is necessary later - // on (#540) - axis.oldUserMin = axis.userMin; - axis.oldUserMax = axis.userMax; - - // Mark as dirty if it is not already set to dirty and extremes have - // changed. #595. - if (!axis.isDirty) { - axis.isDirty = - isDirtyAxisLength || - axis.min !== axis.oldMin || - axis.max !== axis.oldMax; - } - } else if (axis.cleanStacks) { - axis.cleanStacks(); - } - }, - - /** - * Set the minimum and maximum of the axes after render time. If the - * `startOnTick` and `endOnTick` options are true, the minimum and maximum - * values are rounded off to the nearest tick. To prevent this, these - * options can be set to false before calling setExtremes. Also, setExtremes - * will not allow a range lower than the `minRange` option, which by default - * is the range of five points. - * - * @param {Number} [newMin] - * The new minimum value. - * @param {Number} [newMax] - * The new maximum value. - * @param {Boolean} [redraw=true] - * Whether to redraw the chart or wait for an explicit call to - * {@link Highcharts.Chart#redraw} - * @param {AnimationOptions} [animation=true] - * Enable or modify animations. - * @param {Object} [eventArguments] - * Arguments to be accessed in event handler. - * - * @sample highcharts/members/axis-setextremes/ - * Set extremes from a button - * @sample highcharts/members/axis-setextremes-datetime/ - * Set extremes on a datetime axis - * @sample highcharts/members/axis-setextremes-off-ticks/ - * Set extremes off ticks - * @sample stock/members/axis-setextremes/ - * Set extremes in Highstock - * @sample maps/members/axis-setextremes/ - * Set extremes in Highmaps - */ - setExtremes: function(newMin, newMax, redraw, animation, eventArguments) { - var axis = this, - chart = axis.chart; - - redraw = pick(redraw, true); // defaults to true - - each(axis.series, function(serie) { - delete serie.kdTree; - }); - - // Extend the arguments with min and max - eventArguments = extend(eventArguments, { - min: newMin, - max: newMax - }); - - // Fire the event - fireEvent(axis, 'setExtremes', eventArguments, function() { - - axis.userMin = newMin; - axis.userMax = newMax; - axis.eventArgs = eventArguments; - - if (redraw) { - chart.redraw(animation); - } - }); - }, - - /** - * Overridable method for zooming chart. Pulled out in a separate method to - * allow overriding in stock charts. - * - * @private - */ - zoom: function(newMin, newMax) { - var dataMin = this.dataMin, - dataMax = this.dataMax, - options = this.options, - min = Math.min(dataMin, pick(options.min, dataMin)), - max = Math.max(dataMax, pick(options.max, dataMax)); - - if (newMin !== this.min || newMax !== this.max) { // #5790 - - // Prevent pinch zooming out of range. Check for defined is for - // #1946. #1734. - if (!this.allowZoomOutside) { - // #6014, sometimes newMax will be smaller than min (or newMin - // will be larger than max). - if (defined(dataMin)) { - if (newMin < min) { - newMin = min; - } - if (newMin > max) { - newMin = max; - } - } - if (defined(dataMax)) { - if (newMax < min) { - newMax = min; - } - if (newMax > max) { - newMax = max; - } - } - } - - // In full view, displaying the reset zoom button is not required - this.displayBtn = newMin !== undefined || newMax !== undefined; - - // Do it - this.setExtremes( - newMin, - newMax, - false, - undefined, { - trigger: 'zoom' - } - ); - } - - return true; - }, - - /** - * Update the axis metrics. - * - * @private - */ - setAxisSize: function() { - var chart = this.chart, - options = this.options, - // [top, right, bottom, left] - offsets = options.offsets || [0, 0, 0, 0], - horiz = this.horiz, - - // Check for percentage based input values. Rounding fixes problems - // with column overflow and plot line filtering (#4898, #4899) - width = this.width = Math.round(H.relativeLength( - pick( - options.width, - chart.plotWidth - offsets[3] + offsets[1] - ), - chart.plotWidth - )), - height = this.height = Math.round(H.relativeLength( - pick( - options.height, - chart.plotHeight - offsets[0] + offsets[2] - ), - chart.plotHeight - )), - top = this.top = Math.round(H.relativeLength( - pick(options.top, chart.plotTop + offsets[0]), - chart.plotHeight, - chart.plotTop - )), - left = this.left = Math.round(H.relativeLength( - pick(options.left, chart.plotLeft + offsets[3]), - chart.plotWidth, - chart.plotLeft - )); - - // Expose basic values to use in Series object and navigator - this.bottom = chart.chartHeight - height - top; - this.right = chart.chartWidth - width - left; - - // Direction agnostic properties - this.len = Math.max(horiz ? width : height, 0); // Math.max fixes #905 - this.pos = horiz ? left : top; // distance from SVG origin - }, - - /** - * The returned object literal from the {@link Highcharts.Axis#getExtremes} - * function. - * - * @typedef {Object} Extremes - * @property {Number} dataMax - * The maximum value of the axis' associated series. - * @property {Number} dataMin - * The minimum value of the axis' associated series. - * @property {Number} max - * The maximum axis value, either automatic or set manually. If - * the `max` option is not set, `maxPadding` is 0 and `endOnTick` - * is false, this value will be the same as `dataMax`. - * @property {Number} min - * The minimum axis value, either automatic or set manually. If - * the `min` option is not set, `minPadding` is 0 and - * `startOnTick` is false, this value will be the same - * as `dataMin`. - */ - /** - * Get the current extremes for the axis. - * - * @returns {Extremes} - * An object containing extremes information. - * - * @sample highcharts/members/axis-getextremes/ - * Report extremes by click on a button - * @sample maps/members/axis-getextremes/ - * Get extremes in Highmaps - */ - getExtremes: function() { - var axis = this, - isLog = axis.isLog, - lin2log = axis.lin2log; - - return { - min: isLog ? correctFloat(lin2log(axis.min)) : axis.min, - max: isLog ? correctFloat(lin2log(axis.max)) : axis.max, - dataMin: axis.dataMin, - dataMax: axis.dataMax, - userMin: axis.userMin, - userMax: axis.userMax - }; - }, - - /** - * Get the zero plane either based on zero or on the min or max value. - * Used in bar and area plots. - * - * @param {Number} threshold - * The threshold in axis values. - * - * @return {Number} - * The translated threshold position in terms of pixels, and - * corrected to stay within the axis bounds. - */ - getThreshold: function(threshold) { - var axis = this, - isLog = axis.isLog, - lin2log = axis.lin2log, - realMin = isLog ? lin2log(axis.min) : axis.min, - realMax = isLog ? lin2log(axis.max) : axis.max; - - if (threshold === null) { - threshold = realMin; - } else if (realMin > threshold) { - threshold = realMin; - } else if (realMax < threshold) { - threshold = realMax; - } - - return axis.translate(threshold, 0, 1, 0, 1); - }, - - /** - * Compute auto alignment for the axis label based on which side the axis is - * on and the given rotation for the label. - * - * @param {Number} rotation - * The rotation in degrees as set by either the `rotation` or - * `autoRotation` options. - * @private - */ - autoLabelAlign: function(rotation) { - var ret, - angle = (pick(rotation, 0) - (this.side * 90) + 720) % 360; - - if (angle > 15 && angle < 165) { - ret = 'right'; - } else if (angle > 195 && angle < 345) { - ret = 'left'; - } else { - ret = 'center'; - } - return ret; - }, - - /** - * Get the tick length and width for the axis based on axis options. - * - * @private - * - * @param {String} prefix - * 'tick' or 'minorTick' - * @return {Array.} - * An array of tickLength and tickWidth - */ - tickSize: function(prefix) { - var options = this.options, - tickLength = options[prefix + 'Length'], - tickWidth = pick( - options[prefix + 'Width'], - prefix === 'tick' && this.isXAxis ? 1 : 0 // X axis default 1 - ); - - if (tickWidth && tickLength) { - // Negate the length - if (options[prefix + 'Position'] === 'inside') { - tickLength = -tickLength; - } - return [tickLength, tickWidth]; - } - - }, - - /** - * Return the size of the labels. - * - * @private - */ - labelMetrics: function() { - var index = this.tickPositions && this.tickPositions[0] || 0; - return this.chart.renderer.fontMetrics( - this.options.labels.style && this.options.labels.style.fontSize, - this.ticks[index] && this.ticks[index].label - ); - }, - - /** - * Prevent the ticks from getting so close we can't draw the labels. On a - * horizontal axis, this is handled by rotating the labels, removing ticks - * and adding ellipsis. On a vertical axis remove ticks and add ellipsis. - * - * @private - */ - unsquish: function() { - var labelOptions = this.options.labels, - horiz = this.horiz, - tickInterval = this.tickInterval, - newTickInterval = tickInterval, - slotSize = this.len / ( - ((this.categories ? 1 : 0) + this.max - this.min) / tickInterval - ), - rotation, - rotationOption = labelOptions.rotation, - labelMetrics = this.labelMetrics(), - step, - bestScore = Number.MAX_VALUE, - autoRotation, - // Return the multiple of tickInterval that is needed to avoid - // collision - getStep = function(spaceNeeded) { - var step = spaceNeeded / (slotSize || 1); - step = step > 1 ? Math.ceil(step) : 1; - return step * tickInterval; - }; - - if (horiz) { - autoRotation = !labelOptions.staggerLines && - !labelOptions.step && - ( // #3971 - defined(rotationOption) ? [rotationOption] : - slotSize < pick(labelOptions.autoRotationLimit, 80) && - labelOptions.autoRotation - ); - - if (autoRotation) { - - // Loop over the given autoRotation options, and determine - // which gives the best score. The best score is that with - // the lowest number of steps and a rotation closest - // to horizontal. - each(autoRotation, function(rot) { - var score; - - if ( - rot === rotationOption || - (rot && rot >= -90 && rot <= 90) - ) { // #3891 - - step = getStep( - Math.abs(labelMetrics.h / Math.sin(deg2rad * rot)) - ); - - score = step + Math.abs(rot / 360); - - if (score < bestScore) { - bestScore = score; - rotation = rot; - newTickInterval = step; - } - } - }); - } - - } else if (!labelOptions.step) { // #4411 - newTickInterval = getStep(labelMetrics.h); - } - - this.autoRotation = autoRotation; - this.labelRotation = pick(rotation, rotationOption); - - return newTickInterval; - }, - - /** - * Get the general slot width for labels/categories on this axis. This may - * change between the pre-render (from Axis.getOffset) and the final tick - * rendering and placement. - * - * @private - * @return {Number} - * The pixel width allocated to each axis label. - */ - getSlotWidth: function() { - // #5086, #1580, #1931 - var chart = this.chart, - horiz = this.horiz, - labelOptions = this.options.labels, - slotCount = Math.max( - this.tickPositions.length - (this.categories ? 0 : 1), - 1 - ), - marginLeft = chart.margin[3]; - - return ( - horiz && - (labelOptions.step || 0) < 2 && - !labelOptions.rotation && // #4415 - ((this.staggerLines || 1) * this.len) / slotCount - ) || (!horiz && ( - // #7028 - ( - labelOptions.style && - parseInt(labelOptions.style.width, 10) - ) || - ( - marginLeft && - (marginLeft - chart.spacing[3]) - ) || - chart.chartWidth * 0.33 - )); - - }, - - /** - * Render the axis labels and determine whether ellipsis or rotation need - * to be applied. - * - * @private - */ - renderUnsquish: function() { - var chart = this.chart, - renderer = chart.renderer, - tickPositions = this.tickPositions, - ticks = this.ticks, - labelOptions = this.options.labels, - horiz = this.horiz, - slotWidth = this.getSlotWidth(), - innerWidth = Math.max( - 1, - Math.round(slotWidth - 2 * (labelOptions.padding || 5)) - ), - attr = {}, - labelMetrics = this.labelMetrics(), - textOverflowOption = labelOptions.style && - labelOptions.style.textOverflow, - css, - maxLabelLength = 0, - label, - i, - pos; - - // Set rotation option unless it is "auto", like in gauges - if (!isString(labelOptions.rotation)) { - attr.rotation = labelOptions.rotation || 0; // #4443 - } - - // Get the longest label length - each(tickPositions, function(tick) { - tick = ticks[tick]; - if (tick && tick.labelLength > maxLabelLength) { - maxLabelLength = tick.labelLength; - } - }); - this.maxLabelLength = maxLabelLength; - - - // Handle auto rotation on horizontal axis - if (this.autoRotation) { - - // Apply rotation only if the label is too wide for the slot, and - // the label is wider than its height. - if ( - maxLabelLength > innerWidth && - maxLabelLength > labelMetrics.h - ) { - attr.rotation = this.labelRotation; - } else { - this.labelRotation = 0; - } - - // Handle word-wrap or ellipsis on vertical axis - } else if (slotWidth) { - // For word-wrap or ellipsis - css = { - width: innerWidth + 'px' - }; - - if (!textOverflowOption) { - css.textOverflow = 'clip'; - - // On vertical axis, only allow word wrap if there is room - // for more lines. - i = tickPositions.length; - while (!horiz && i--) { - pos = tickPositions[i]; - label = ticks[pos].label; - if (label) { - // Reset ellipsis in order to get the correct - // bounding box (#4070) - if ( - label.styles && - label.styles.textOverflow === 'ellipsis' - ) { - label.css({ - textOverflow: 'clip' - }); - - // Set the correct width in order to read - // the bounding box height (#4678, #5034) - } else if (ticks[pos].labelLength > slotWidth) { - label.css({ - width: slotWidth + 'px' - }); - } - - if ( - label.getBBox().height > ( - this.len / tickPositions.length - - (labelMetrics.h - labelMetrics.f) - ) - ) { - label.specCss = { - textOverflow: 'ellipsis' - }; - } - } - } - } - } - - - // Add ellipsis if the label length is significantly longer than ideal - if (attr.rotation) { - css = { - width: ( - maxLabelLength > chart.chartHeight * 0.5 ? - chart.chartHeight * 0.33 : - chart.chartHeight - ) + 'px' - }; - if (!textOverflowOption) { - css.textOverflow = 'ellipsis'; - } - } - - // Set the explicit or automatic label alignment - this.labelAlign = labelOptions.align || - this.autoLabelAlign(this.labelRotation); - if (this.labelAlign) { - attr.align = this.labelAlign; - } - - // Apply general and specific CSS - each(tickPositions, function(pos) { - var tick = ticks[pos], - label = tick && tick.label; - if (label) { - // This needs to go before the CSS in old IE (#4502) - label.attr(attr); - - if (css) { - label.css(merge(css, label.specCss)); - } - delete label.specCss; - tick.rotation = attr.rotation; - } - }); - - // Note: Why is this not part of getLabelPosition? - this.tickRotCorr = renderer.rotCorr( - labelMetrics.b, - this.labelRotation || 0, - this.side !== 0 - ); - }, - - /** - * Return true if the axis has associated data. - * - * @return {Boolean} - * True if the axis has associated visible series and those series - * have either valid data points or explicit `min` and `max` - * settings. - */ - hasData: function() { - return ( - this.hasVisibleSeries || - ( - defined(this.min) && - defined(this.max) && - this.tickPositions && - this.tickPositions.length > 0 - ) - ); - }, - - /** - * Adds the title defined in axis.options.title. - * @param {Boolean} display - whether or not to display the title - */ - addTitle: function(display) { - var axis = this, - renderer = axis.chart.renderer, - horiz = axis.horiz, - opposite = axis.opposite, - options = axis.options, - axisTitleOptions = options.title, - textAlign; - - if (!axis.axisTitle) { - textAlign = axisTitleOptions.textAlign; - if (!textAlign) { - textAlign = (horiz ? { - low: 'left', - middle: 'center', - high: 'right' - } : { - low: opposite ? 'right' : 'left', - middle: 'center', - high: opposite ? 'left' : 'right' - })[axisTitleOptions.align]; - } - axis.axisTitle = renderer.text( - axisTitleOptions.text, - 0, - 0, - axisTitleOptions.useHTML - ) - .attr({ - zIndex: 7, - rotation: axisTitleOptions.rotation || 0, - align: textAlign - }) - .addClass('highcharts-axis-title') - - .css(axisTitleOptions.style) - - .add(axis.axisGroup); - axis.axisTitle.isNew = true; - } - - // Max width defaults to the length of the axis - - if (!axisTitleOptions.style.width && !axis.isRadial) { - - axis.axisTitle.css({ - width: axis.len - }); - - } - - - - // hide or show the title depending on whether showEmpty is set - axis.axisTitle[display ? 'show' : 'hide'](true); - }, - - /** - * Generates a tick for initial positioning. - * - * @private - * @param {number} pos - * The tick position in axis values. - * @param {number} i - * The index of the tick in {@link Axis.tickPositions}. - */ - generateTick: function(pos) { - var ticks = this.ticks; - - if (!ticks[pos]) { - ticks[pos] = new Tick(this, pos); - } else { - ticks[pos].addLabel(); // update labels depending on tick interval - } - }, - - /** - * Render the tick labels to a preliminary position to get their sizes. - * - * @private - */ - getOffset: function() { - var axis = this, - chart = axis.chart, - renderer = chart.renderer, - options = axis.options, - tickPositions = axis.tickPositions, - ticks = axis.ticks, - horiz = axis.horiz, - side = axis.side, - invertedSide = chart.inverted && - !axis.isZAxis ? [1, 0, 3, 2][side] : side, - hasData, - showAxis, - titleOffset = 0, - titleOffsetOption, - titleMargin = 0, - axisTitleOptions = options.title, - labelOptions = options.labels, - labelOffset = 0, // reset - labelOffsetPadded, - axisOffset = chart.axisOffset, - clipOffset = chart.clipOffset, - clip, - directionFactor = [-1, 1, 1, -1][side], - className = options.className, - axisParent = axis.axisParent, // Used in color axis - lineHeightCorrection, - tickSize = this.tickSize('tick'); - - // For reuse in Axis.render - hasData = axis.hasData(); - axis.showAxis = showAxis = hasData || pick(options.showEmpty, true); - - // Set/reset staggerLines - axis.staggerLines = axis.horiz && labelOptions.staggerLines; - - // Create the axisGroup and gridGroup elements on first iteration - if (!axis.axisGroup) { - axis.gridGroup = renderer.g('grid') - .attr({ - zIndex: options.gridZIndex || 1 - }) - .addClass( - 'highcharts-' + this.coll.toLowerCase() + '-grid ' + - (className || '') - ) - .add(axisParent); - axis.axisGroup = renderer.g('axis') - .attr({ - zIndex: options.zIndex || 2 - }) - .addClass( - 'highcharts-' + this.coll.toLowerCase() + ' ' + - (className || '') - ) - .add(axisParent); - axis.labelGroup = renderer.g('axis-labels') - .attr({ - zIndex: labelOptions.zIndex || 7 - }) - .addClass( - 'highcharts-' + axis.coll.toLowerCase() + '-labels ' + - (className || '') - ) - .add(axisParent); - } - - if (hasData || axis.isLinked) { - - // Generate ticks - each(tickPositions, function(pos, i) { - // i is not used here, but may be used in overrides - axis.generateTick(pos, i); - }); - - axis.renderUnsquish(); - - - // Left side must be align: right and right side must - // have align: left for labels - axis.reserveSpaceDefault = ( - side === 0 || - side === 2 || { - 1: 'left', - 3: 'right' - }[side] === axis.labelAlign - ); - if (pick( - labelOptions.reserveSpace, - axis.labelAlign === 'center' ? true : null, - axis.reserveSpaceDefault)) { - each(tickPositions, function(pos) { - // get the highest offset - labelOffset = Math.max( - ticks[pos].getLabelSize(), - labelOffset - ); - }); - } - - if (axis.staggerLines) { - labelOffset *= axis.staggerLines; - } - axis.labelOffset = labelOffset * (axis.opposite ? -1 : 1); - - } else { // doesn't have data - objectEach(ticks, function(tick, n) { - tick.destroy(); - delete ticks[n]; - }); - } - - if ( - axisTitleOptions && - axisTitleOptions.text && - axisTitleOptions.enabled !== false - ) { - axis.addTitle(showAxis); - - if (showAxis && axisTitleOptions.reserveSpace !== false) { - axis.titleOffset = titleOffset = - axis.axisTitle.getBBox()[horiz ? 'height' : 'width']; - titleOffsetOption = axisTitleOptions.offset; - titleMargin = defined(titleOffsetOption) ? - 0 : - pick(axisTitleOptions.margin, horiz ? 5 : 10); - } - } - - // Render the axis line - axis.renderLine(); - - // handle automatic or user set offset - axis.offset = directionFactor * pick(options.offset, axisOffset[side]); - - axis.tickRotCorr = axis.tickRotCorr || { - x: 0, - y: 0 - }; // polar - if (side === 0) { - lineHeightCorrection = -axis.labelMetrics().h; - } else if (side === 2) { - lineHeightCorrection = axis.tickRotCorr.y; - } else { - lineHeightCorrection = 0; - } - - // Find the padded label offset - labelOffsetPadded = Math.abs(labelOffset) + titleMargin; - if (labelOffset) { - labelOffsetPadded -= lineHeightCorrection; - labelOffsetPadded += directionFactor * ( - horiz ? - pick( - labelOptions.y, - axis.tickRotCorr.y + directionFactor * 8 - ) : - labelOptions.x - ); - } - - axis.axisTitleMargin = pick(titleOffsetOption, labelOffsetPadded); - - axisOffset[side] = Math.max( - axisOffset[side], - axis.axisTitleMargin + titleOffset + directionFactor * axis.offset, - labelOffsetPadded, // #3027 - hasData && tickPositions.length && tickSize ? - tickSize[0] + directionFactor * axis.offset : - 0 // #4866 - ); - - // Decide the clipping needed to keep the graph inside - // the plot area and axis lines - clip = options.offset ? - 0 : - Math.floor(axis.axisLine.strokeWidth() / 2) * 2; // #4308, #4371 - clipOffset[invertedSide] = Math.max(clipOffset[invertedSide], clip); - }, - - /** - * Internal function to get the path for the axis line. Extended for polar - * charts. - * - * @param {Number} lineWidth - * The line width in pixels. - * @return {Array} - * The SVG path definition in array form. - */ - getLinePath: function(lineWidth) { - var chart = this.chart, - opposite = this.opposite, - offset = this.offset, - horiz = this.horiz, - lineLeft = this.left + (opposite ? this.width : 0) + offset, - lineTop = chart.chartHeight - this.bottom - - (opposite ? this.height : 0) + offset; - - if (opposite) { - lineWidth *= -1; // crispify the other way - #1480, #1687 - } - - return chart.renderer - .crispLine([ - 'M', - horiz ? - this.left : - lineLeft, - horiz ? - lineTop : - this.top, - 'L', - horiz ? - chart.chartWidth - this.right : - lineLeft, - horiz ? - lineTop : - chart.chartHeight - this.bottom - ], lineWidth); - }, - - /** - * Render the axis line. Called internally when rendering and redrawing the - * axis. - */ - renderLine: function() { - if (!this.axisLine) { - this.axisLine = this.chart.renderer.path() - .addClass('highcharts-axis-line') - .add(this.axisGroup); - - - this.axisLine.attr({ - stroke: this.options.lineColor, - 'stroke-width': this.options.lineWidth, - zIndex: 7 - }); - - } - }, - - /** - * Position the axis title. - * - * @private - * - * @return {Object} - * X and Y positions for the title. - */ - getTitlePosition: function() { - // compute anchor points for each of the title align options - var horiz = this.horiz, - axisLeft = this.left, - axisTop = this.top, - axisLength = this.len, - axisTitleOptions = this.options.title, - margin = horiz ? axisLeft : axisTop, - opposite = this.opposite, - offset = this.offset, - xOption = axisTitleOptions.x || 0, - yOption = axisTitleOptions.y || 0, - axisTitle = this.axisTitle, - fontMetrics = this.chart.renderer.fontMetrics( - axisTitleOptions.style && axisTitleOptions.style.fontSize, - axisTitle - ), - // The part of a multiline text that is below the baseline of the - // first line. Subtract 1 to preserve pixel-perfectness from the - // old behaviour (v5.0.12), where only one line was allowed. - textHeightOvershoot = Math.max( - axisTitle.getBBox(null, 0).height - fontMetrics.h - 1, - 0 - ), - - // the position in the length direction of the axis - alongAxis = { - low: margin + (horiz ? 0 : axisLength), - middle: margin + axisLength / 2, - high: margin + (horiz ? axisLength : 0) - }[axisTitleOptions.align], - - // the position in the perpendicular direction of the axis - offAxis = (horiz ? axisTop + this.height : axisLeft) + - (horiz ? 1 : -1) * // horizontal axis reverses the margin - (opposite ? -1 : 1) * // so does opposite axes - this.axisTitleMargin + [-textHeightOvershoot, // top - textHeightOvershoot, // right - fontMetrics.f, // bottom - -textHeightOvershoot // left - ][this.side]; - - - return { - x: horiz ? - alongAxis + xOption : offAxis + (opposite ? this.width : 0) + offset + xOption, - y: horiz ? - offAxis + yOption - (opposite ? this.height : 0) + offset : alongAxis + yOption - }; - }, - - /** - * Render a minor tick into the given position. If a minor tick already - * exists in this position, move it. - * - * @param {number} pos - * The position in axis values. - */ - renderMinorTick: function(pos) { - var slideInTicks = this.chart.hasRendered && isNumber(this.oldMin), - minorTicks = this.minorTicks; - - if (!minorTicks[pos]) { - minorTicks[pos] = new Tick(this, pos, 'minor'); - } - - // Render new ticks in old position - if (slideInTicks && minorTicks[pos].isNew) { - minorTicks[pos].render(null, true); - } - - minorTicks[pos].render(null, false, 1); - }, - - /** - * Render a major tick into the given position. If a tick already exists - * in this position, move it. - * - * @param {number} pos - * The position in axis values. - * @param {number} i - * The tick index. - */ - renderTick: function(pos, i) { - var isLinked = this.isLinked, - ticks = this.ticks, - slideInTicks = this.chart.hasRendered && isNumber(this.oldMin); - - // Linked axes need an extra check to find out if - if (!isLinked || (pos >= this.min && pos <= this.max)) { - - if (!ticks[pos]) { - ticks[pos] = new Tick(this, pos); - } - - // render new ticks in old position - if (slideInTicks && ticks[pos].isNew) { - ticks[pos].render(i, true, 0.1); - } - - ticks[pos].render(i); - } - }, - - /** - * Render the axis. - * - * @private - */ - render: function() { - var axis = this, - chart = axis.chart, - renderer = chart.renderer, - options = axis.options, - isLog = axis.isLog, - lin2log = axis.lin2log, - isLinked = axis.isLinked, - tickPositions = axis.tickPositions, - axisTitle = axis.axisTitle, - ticks = axis.ticks, - minorTicks = axis.minorTicks, - alternateBands = axis.alternateBands, - stackLabelOptions = options.stackLabels, - alternateGridColor = options.alternateGridColor, - tickmarkOffset = axis.tickmarkOffset, - axisLine = axis.axisLine, - showAxis = axis.showAxis, - animation = animObject(renderer.globalAnimation), - from, - to; - - // Reset - axis.labelEdge.length = 0; - axis.overlap = false; - - // Mark all elements inActive before we go over and mark the active ones - each([ticks, minorTicks, alternateBands], function(coll) { - objectEach(coll, function(tick) { - tick.isActive = false; - }); - }); - - // If the series has data draw the ticks. Else only the line and title - if (axis.hasData() || isLinked) { - - // minor ticks - if (axis.minorTickInterval && !axis.categories) { - each(axis.getMinorTickPositions(), function(pos) { - axis.renderMinorTick(pos); - }); - } - - // Major ticks. Pull out the first item and render it last so that - // we can get the position of the neighbour label. #808. - if (tickPositions.length) { // #1300 - each(tickPositions, function(pos, i) { - axis.renderTick(pos, i); - }); - // In a categorized axis, the tick marks are displayed - // between labels. So we need to add a tick mark and - // grid line at the left edge of the X axis. - if (tickmarkOffset && (axis.min === 0 || axis.single)) { - if (!ticks[-1]) { - ticks[-1] = new Tick(axis, -1, null, true); - } - ticks[-1].render(-1); - } - - } - - // alternate grid color - if (alternateGridColor) { - each(tickPositions, function(pos, i) { - to = tickPositions[i + 1] !== undefined ? - tickPositions[i + 1] + tickmarkOffset : - axis.max - tickmarkOffset; - - if ( - i % 2 === 0 && - pos < axis.max && - to <= axis.max + ( - chart.polar ? - -tickmarkOffset : - tickmarkOffset - ) - ) { // #2248, #4660 - if (!alternateBands[pos]) { - alternateBands[pos] = new H.PlotLineOrBand(axis); - } - from = pos + tickmarkOffset; // #949 - alternateBands[pos].options = { - from: isLog ? lin2log(from) : from, - to: isLog ? lin2log(to) : to, - color: alternateGridColor - }; - alternateBands[pos].render(); - alternateBands[pos].isActive = true; - } - }); - } - - // custom plot lines and bands - if (!axis._addedPlotLB) { // only first time - each( - (options.plotLines || []).concat(options.plotBands || []), - function(plotLineOptions) { - axis.addPlotBandOrLine(plotLineOptions); - } - ); - axis._addedPlotLB = true; - } - - } // end if hasData - - // Remove inactive ticks - each([ticks, minorTicks, alternateBands], function(coll) { - var i, - forDestruction = [], - delay = animation.duration, - destroyInactiveItems = function() { - i = forDestruction.length; - while (i--) { - // When resizing rapidly, the same items - // may be destroyed in different timeouts, - // or the may be reactivated - if ( - coll[forDestruction[i]] && - !coll[forDestruction[i]].isActive - ) { - coll[forDestruction[i]].destroy(); - delete coll[forDestruction[i]]; - } - } - - }; - - objectEach(coll, function(tick, pos) { - if (!tick.isActive) { - // Render to zero opacity - tick.render(pos, false, 0); - tick.isActive = false; - forDestruction.push(pos); - } - }); - - // When the objects are finished fading out, destroy them - syncTimeout( - destroyInactiveItems, - coll === alternateBands || - !chart.hasRendered || - !delay ? - 0 : - delay - ); - }); - - // Set the axis line path - if (axisLine) { - axisLine[axisLine.isPlaced ? 'animate' : 'attr']({ - d: this.getLinePath(axisLine.strokeWidth()) - }); - axisLine.isPlaced = true; - - // Show or hide the line depending on options.showEmpty - axisLine[showAxis ? 'show' : 'hide'](true); - } - - if (axisTitle && showAxis) { - var titleXy = axis.getTitlePosition(); - if (isNumber(titleXy.y)) { - axisTitle[axisTitle.isNew ? 'attr' : 'animate'](titleXy); - axisTitle.isNew = false; - } else { - axisTitle.attr('y', -9999); - axisTitle.isNew = true; - } - } - - // Stacked totals: - if (stackLabelOptions && stackLabelOptions.enabled) { - axis.renderStackTotals(); - } - // End stacked totals - - axis.isDirty = false; - }, - - /** - * Redraw the axis to reflect changes in the data or axis extremes. Called - * internally from {@link Chart#redraw}. - * - * @private - */ - redraw: function() { - - if (this.visible) { - // render the axis - this.render(); - - // move plot lines and bands - each(this.plotLinesAndBands, function(plotLine) { - plotLine.render(); - }); - } - - // mark associated series as dirty and ready for redraw - each(this.series, function(series) { - series.isDirty = true; - }); - - }, - - // Properties to survive after destroy, needed for Axis.update (#4317, - // #5773, #5881). - keepProps: ['extKey', 'hcEvents', 'names', 'series', 'userMax', 'userMin'], - - /** - * Destroys an Axis instance. See {@link Axis#remove} for the API endpoint - * to fully remove the axis. - * - * @private - * @param {Boolean} keepEvents - * Whether to preserve events, used internally in Axis.update. - */ - destroy: function(keepEvents) { - var axis = this, - stacks = axis.stacks, - plotLinesAndBands = axis.plotLinesAndBands, - plotGroup, - i; - - // Remove the events - if (!keepEvents) { - removeEvent(axis); - } - - // Destroy each stack total - objectEach(stacks, function(stack, stackKey) { - destroyObjectProperties(stack); - - stacks[stackKey] = null; - }); - - // Destroy collections - each( - [axis.ticks, axis.minorTicks, axis.alternateBands], - function(coll) { - destroyObjectProperties(coll); - } - ); - if (plotLinesAndBands) { - i = plotLinesAndBands.length; - while (i--) { // #1975 - plotLinesAndBands[i].destroy(); - } - } - - // Destroy local variables - each( - ['stackTotalGroup', 'axisLine', 'axisTitle', 'axisGroup', - 'gridGroup', 'labelGroup', 'cross' - ], - function(prop) { - if (axis[prop]) { - axis[prop] = axis[prop].destroy(); - } - } - ); - - // Destroy each generated group for plotlines and plotbands - for (plotGroup in axis.plotLinesAndBandsGroups) { - axis.plotLinesAndBandsGroups[plotGroup] = - axis.plotLinesAndBandsGroups[plotGroup].destroy(); - } - - // Delete all properties and fall back to the prototype. - objectEach(axis, function(val, key) { - if (inArray(key, axis.keepProps) === -1) { - delete axis[key]; - } - }); - }, - - /** - * Internal function to draw a crosshair. - * - * @param {PointerEvent} [e] - * The event arguments from the modified pointer event, extended - * with `chartX` and `chartY` - * @param {Point} [point] - * The Point object if the crosshair snaps to points. - */ - drawCrosshair: function(e, point) { - - var path, - options = this.crosshair, - snap = pick(options.snap, true), - pos, - categorized, - graphic = this.cross; - - // Use last available event when updating non-snapped crosshairs without - // mouse interaction (#5287) - if (!e) { - e = this.cross && this.cross.e; - } - - if ( - // Disabled in options - !this.crosshair || - // Snap - ((defined(point) || !snap) === false) - ) { - this.hideCrosshair(); - } else { - - // Get the path - if (!snap) { - pos = e && - ( - this.horiz ? - e.chartX - this.pos : - this.len - e.chartY + this.pos - ); - } else if (defined(point)) { - // #3834 - pos = this.isXAxis ? point.plotX : this.len - point.plotY; - } - - if (defined(pos)) { - path = this.getPlotLinePath( - // First argument, value, only used on radial - point && (this.isXAxis ? - point.x : - pick(point.stackY, point.y) - ), - null, - null, - null, - pos // Translated position - ) || null; // #3189 - } - - if (!defined(path)) { - this.hideCrosshair(); - return; - } - - categorized = this.categories && !this.isRadial; - - // Draw the cross - if (!graphic) { - this.cross = graphic = this.chart.renderer - .path() - .addClass( - 'highcharts-crosshair highcharts-crosshair-' + - (categorized ? 'category ' : 'thin ') + - options.className - ) - .attr({ - zIndex: pick(options.zIndex, 2) - }) - .add(); - - - // Presentational attributes - graphic.attr({ - 'stroke': options.color || - ( - categorized ? - color('#ccd6eb') - .setOpacity(0.25).get() : - '#cccccc' - ), - 'stroke-width': pick(options.width, 1) - }).css({ - 'pointer-events': 'none' - }); - if (options.dashStyle) { - graphic.attr({ - dashstyle: options.dashStyle - }); - } - - - } - - graphic.show().attr({ - d: path - }); - - if (categorized && !options.width) { - graphic.attr({ - 'stroke-width': this.transA - }); - } - this.cross.e = e; - } - }, - - /** - * Hide the crosshair if visible. - */ - hideCrosshair: function() { - if (this.cross) { - this.cross.hide(); - } - } - }); // end Axis - - H.Axis = Axis; - return Axis; - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var Axis = H.Axis, - Date = H.Date, - dateFormat = H.dateFormat, - defaultOptions = H.defaultOptions, - defined = H.defined, - each = H.each, - extend = H.extend, - getMagnitude = H.getMagnitude, - getTZOffset = H.getTZOffset, - normalizeTickInterval = H.normalizeTickInterval, - pick = H.pick, - timeUnits = H.timeUnits; - /** - * Set the tick positions to a time unit that makes sense, for example - * on the first of each month or on every Monday. Return an array - * with the time positions. Used in datetime axes as well as for grouping - * data on a datetime axis. - * - * @param {Object} normalizedInterval The interval in axis values (ms) and the count - * @param {Number} min The minimum in axis values - * @param {Number} max The maximum in axis values - * @param {Number} startOfWeek - */ - Axis.prototype.getTimeTicks = function(normalizedInterval, min, max, startOfWeek) { - var tickPositions = [], - i, - higherRanks = {}, - useUTC = defaultOptions.global.useUTC, - minYear, // used in months and years as a basis for Date.UTC() - // When crossing DST, use the max. Resolves #6278. - minDate = new Date(min - Math.max(getTZOffset(min), getTZOffset(max))), - makeTime = Date.hcMakeTime, - interval = normalizedInterval.unitRange, - count = normalizedInterval.count, - baseOffset, // #6797 - variableDayLength; - - if (defined(min)) { // #1300 - minDate[Date.hcSetMilliseconds](interval >= timeUnits.second ? 0 : // #3935 - count * Math.floor(minDate.getMilliseconds() / count)); // #3652, #3654 - - if (interval >= timeUnits.second) { // second - minDate[Date.hcSetSeconds](interval >= timeUnits.minute ? 0 : // #3935 - count * Math.floor(minDate.getSeconds() / count)); - } - - if (interval >= timeUnits.minute) { // minute - minDate[Date.hcSetMinutes](interval >= timeUnits.hour ? 0 : - count * Math.floor(minDate[Date.hcGetMinutes]() / count)); - } - - if (interval >= timeUnits.hour) { // hour - minDate[Date.hcSetHours](interval >= timeUnits.day ? 0 : - count * Math.floor(minDate[Date.hcGetHours]() / count)); - } - - if (interval >= timeUnits.day) { // day - minDate[Date.hcSetDate](interval >= timeUnits.month ? 1 : - count * Math.floor(minDate[Date.hcGetDate]() / count)); - } - - if (interval >= timeUnits.month) { // month - minDate[Date.hcSetMonth](interval >= timeUnits.year ? 0 : - count * Math.floor(minDate[Date.hcGetMonth]() / count)); - minYear = minDate[Date.hcGetFullYear](); - } - - if (interval >= timeUnits.year) { // year - minYear -= minYear % count; - minDate[Date.hcSetFullYear](minYear); - } - - // week is a special case that runs outside the hierarchy - if (interval === timeUnits.week) { - // get start of current week, independent of count - minDate[Date.hcSetDate](minDate[Date.hcGetDate]() - minDate[Date.hcGetDay]() + - pick(startOfWeek, 1)); - } - - - // Get basics for variable time spans - minYear = minDate[Date.hcGetFullYear](); - var minMonth = minDate[Date.hcGetMonth](), - minDateDate = minDate[Date.hcGetDate](), - minHours = minDate[Date.hcGetHours](); - - // Redefine min to the floored/rounded minimum time (#7432) - min = minDate.getTime(); - - // Handle local timezone offset - if (Date.hcHasTimeZone) { - - // Detect whether we need to take the DST crossover into - // consideration. If we're crossing over DST, the day length may be - // 23h or 25h and we need to compute the exact clock time for each - // tick instead of just adding hours. This comes at a cost, so first - // we find out if it is needed (#4951). - variableDayLength = - (!useUTC || !!Date.hcGetTimezoneOffset) && - ( - // Long range, assume we're crossing over. - max - min > 4 * timeUnits.month || - // Short range, check if min and max are in different time - // zones. - getTZOffset(min) !== getTZOffset(max) - ); - - // Adjust minDate to the offset date - baseOffset = getTZOffset(minDate); - minDate = new Date(min + baseOffset); - } - - - // Iterate and add tick positions at appropriate values - var time = minDate.getTime(); - i = 1; - while (time < max) { - tickPositions.push(time); - - // if the interval is years, use Date.UTC to increase years - if (interval === timeUnits.year) { - time = makeTime(minYear + i * count, 0); - - // if the interval is months, use Date.UTC to increase months - } else if (interval === timeUnits.month) { - time = makeTime(minYear, minMonth + i * count); - - // if we're using global time, the interval is not fixed as it jumps - // one hour at the DST crossover - } else if ( - variableDayLength && - (interval === timeUnits.day || interval === timeUnits.week) - ) { - time = makeTime(minYear, minMonth, minDateDate + - i * count * (interval === timeUnits.day ? 1 : 7)); - - } else if (variableDayLength && interval === timeUnits.hour) { - // corrected by the start date time zone offset (baseOffset) - // to hide duplicated label (#6797) - time = makeTime(minYear, minMonth, minDateDate, minHours + - i * count, 0, 0, baseOffset) - baseOffset; - - // else, the interval is fixed and we use simple addition - } else { - time += interval * count; - } - - i++; - } - - // push the last time - tickPositions.push(time); - - - // Handle higher ranks. Mark new days if the time is on midnight - // (#950, #1649, #1760, #3349). Use a reasonable dropout threshold to - // prevent looping over dense data grouping (#6156). - if (interval <= timeUnits.hour && tickPositions.length < 10000) { - each(tickPositions, function(time) { - if ( - // Speed optimization, no need to run dateFormat unless - // we're on a full or half hour - time % 1800000 === 0 && - // Check for local or global midnight - dateFormat('%H%M%S%L', time) === '000000000' - ) { - higherRanks[time] = 'day'; - } - }); - } - } - - - // record information on the chosen unit - for dynamic label formatter - tickPositions.info = extend(normalizedInterval, { - higherRanks: higherRanks, - totalRange: interval * count - }); - - return tickPositions; - }; - - /** - * Get a normalized tick interval for dates. Returns a configuration object with - * unit range (interval), count and name. Used to prepare data for getTimeTicks. - * Previously this logic was part of getTimeTicks, but as getTimeTicks now runs - * of segments in stock charts, the normalizing logic was extracted in order to - * prevent it for running over again for each segment having the same interval. - * #662, #697. - */ - Axis.prototype.normalizeTimeTickInterval = function(tickInterval, unitsOption) { - var units = unitsOption || [ - [ - 'millisecond', // unit name - [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples - ], - [ - 'second', [1, 2, 5, 10, 15, 30] - ], - [ - 'minute', [1, 2, 5, 10, 15, 30] - ], - [ - 'hour', [1, 2, 3, 4, 6, 8, 12] - ], - [ - 'day', [1, 2] - ], - [ - 'week', [1, 2] - ], - [ - 'month', [1, 2, 3, 4, 6] - ], - [ - 'year', - null - ] - ], - unit = units[units.length - 1], // default unit is years - interval = timeUnits[unit[0]], - multiples = unit[1], - count, - i; - - // loop through the units to find the one that best fits the tickInterval - for (i = 0; i < units.length; i++) { - unit = units[i]; - interval = timeUnits[unit[0]]; - multiples = unit[1]; - - - if (units[i + 1]) { - // lessThan is in the middle between the highest multiple and the next unit. - var lessThan = (interval * multiples[multiples.length - 1] + - timeUnits[units[i + 1][0]]) / 2; - - // break and keep the current unit - if (tickInterval <= lessThan) { - break; - } - } - } - - // prevent 2.5 years intervals, though 25, 250 etc. are allowed - if (interval === timeUnits.year && tickInterval < 5 * interval) { - multiples = [1, 2, 5]; - } - - // get the count - count = normalizeTickInterval( - tickInterval / interval, - multiples, - unit[0] === 'year' ? Math.max(getMagnitude(tickInterval / interval), 1) : 1 // #1913, #2360 - ); - - return { - unitRange: interval, - count: count, - unitName: unit[0] - }; - }; - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var Axis = H.Axis, - getMagnitude = H.getMagnitude, - map = H.map, - normalizeTickInterval = H.normalizeTickInterval, - pick = H.pick; - /** - * Methods defined on the Axis prototype - */ - - /** - * Set the tick positions of a logarithmic axis - */ - Axis.prototype.getLogTickPositions = function(interval, min, max, minor) { - var axis = this, - options = axis.options, - axisLength = axis.len, - lin2log = axis.lin2log, - log2lin = axis.log2lin, - // Since we use this method for both major and minor ticks, - // use a local variable and return the result - positions = []; - - // Reset - if (!minor) { - axis._minorAutoInterval = null; - } - - // First case: All ticks fall on whole logarithms: 1, 10, 100 etc. - if (interval >= 0.5) { - interval = Math.round(interval); - positions = axis.getLinearTickPositions(interval, min, max); - - // Second case: We need intermediary ticks. For example - // 1, 2, 4, 6, 8, 10, 20, 40 etc. - } else if (interval >= 0.08) { - var roundedMin = Math.floor(min), - intermediate, - i, - j, - len, - pos, - lastPos, - break2; - - if (interval > 0.3) { - intermediate = [1, 2, 4]; - } else if (interval > 0.15) { // 0.2 equals five minor ticks per 1, 10, 100 etc - intermediate = [1, 2, 4, 6, 8]; - } else { // 0.1 equals ten minor ticks per 1, 10, 100 etc - intermediate = [1, 2, 3, 4, 5, 6, 7, 8, 9]; - } - - for (i = roundedMin; i < max + 1 && !break2; i++) { - len = intermediate.length; - for (j = 0; j < len && !break2; j++) { - pos = log2lin(lin2log(i) * intermediate[j]); - if (pos > min && (!minor || lastPos <= max) && lastPos !== undefined) { // #1670, lastPos is #3113 - positions.push(lastPos); - } - - if (lastPos > max) { - break2 = true; - } - lastPos = pos; - } - } - - // Third case: We are so deep in between whole logarithmic values that - // we might as well handle the tick positions like a linear axis. For - // example 1.01, 1.02, 1.03, 1.04. - } else { - var realMin = lin2log(min), - realMax = lin2log(max), - tickIntervalOption = minor ? - this.getMinorTickInterval() : - options.tickInterval, - filteredTickIntervalOption = tickIntervalOption === 'auto' ? null : tickIntervalOption, - tickPixelIntervalOption = options.tickPixelInterval / (minor ? 5 : 1), - totalPixelLength = minor ? axisLength / axis.tickPositions.length : axisLength; - - interval = pick( - filteredTickIntervalOption, - axis._minorAutoInterval, - (realMax - realMin) * tickPixelIntervalOption / (totalPixelLength || 1) - ); - - interval = normalizeTickInterval( - interval, - null, - getMagnitude(interval) - ); - - positions = map(axis.getLinearTickPositions( - interval, - realMin, - realMax - ), log2lin); - - if (!minor) { - axis._minorAutoInterval = interval / 5; - } - } - - // Set the axis-level tickInterval variable - if (!minor) { - axis.tickInterval = interval; - } - return positions; - }; - - Axis.prototype.log2lin = function(num) { - return Math.log(num) / Math.LN10; - }; - - Axis.prototype.lin2log = function(num) { - return Math.pow(10, num); - }; - - }(Highcharts)); - (function(H, Axis) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var arrayMax = H.arrayMax, - arrayMin = H.arrayMin, - defined = H.defined, - destroyObjectProperties = H.destroyObjectProperties, - each = H.each, - erase = H.erase, - merge = H.merge, - pick = H.pick; - /* - * The object wrapper for plot lines and plot bands - * @param {Object} options - */ - H.PlotLineOrBand = function(axis, options) { - this.axis = axis; - - if (options) { - this.options = options; - this.id = options.id; - } - }; - - H.PlotLineOrBand.prototype = { - - /** - * Render the plot line or plot band. If it is already existing, - * move it. - */ - render: function() { - var plotLine = this, - axis = plotLine.axis, - horiz = axis.horiz, - options = plotLine.options, - optionsLabel = options.label, - label = plotLine.label, - to = options.to, - from = options.from, - value = options.value, - isBand = defined(from) && defined(to), - isLine = defined(value), - svgElem = plotLine.svgElem, - isNew = !svgElem, - path = [], - color = options.color, - zIndex = pick(options.zIndex, 0), - events = options.events, - attribs = { - 'class': 'highcharts-plot-' + (isBand ? 'band ' : 'line ') + - (options.className || '') - }, - groupAttribs = {}, - renderer = axis.chart.renderer, - groupName = isBand ? 'bands' : 'lines', - group, - log2lin = axis.log2lin; - - // logarithmic conversion - if (axis.isLog) { - from = log2lin(from); - to = log2lin(to); - value = log2lin(value); - } - - - // Set the presentational attributes - if (isLine) { - attribs = { - stroke: color, - 'stroke-width': options.width - }; - if (options.dashStyle) { - attribs.dashstyle = options.dashStyle; - } - - } else if (isBand) { // plot band - if (color) { - attribs.fill = color; - } - if (options.borderWidth) { - attribs.stroke = options.borderColor; - attribs['stroke-width'] = options.borderWidth; - } - } - - - // Grouping and zIndex - groupAttribs.zIndex = zIndex; - groupName += '-' + zIndex; - - group = axis.plotLinesAndBandsGroups[groupName]; - if (!group) { - axis.plotLinesAndBandsGroups[groupName] = group = - renderer.g('plot-' + groupName) - .attr(groupAttribs).add(); - } - - // Create the path - if (isNew) { - plotLine.svgElem = svgElem = - renderer - .path() - .attr(attribs).add(group); - } - - - // Set the path or return - if (isLine) { - path = axis.getPlotLinePath(value, svgElem.strokeWidth()); - } else if (isBand) { // plot band - path = axis.getPlotBandPath(from, to, options); - } else { - return; - } - - - // common for lines and bands - if (isNew && path && path.length) { - svgElem.attr({ - d: path - }); - - // events - if (events) { - H.objectEach(events, function(event, eventType) { - svgElem.on(eventType, function(e) { - events[eventType].apply(plotLine, [e]); - }); - }); - } - } else if (svgElem) { - if (path) { - svgElem.show(); - svgElem.animate({ - d: path - }); - } else { - svgElem.hide(); - if (label) { - plotLine.label = label = label.destroy(); - } - } - } - - // the plot band/line label - if ( - optionsLabel && - defined(optionsLabel.text) && - path && - path.length && - axis.width > 0 && - axis.height > 0 && - !path.flat - ) { - // apply defaults - optionsLabel = merge({ - align: horiz && isBand && 'center', - x: horiz ? !isBand && 4 : 10, - verticalAlign: !horiz && isBand && 'middle', - y: horiz ? isBand ? 16 : 10 : isBand ? 6 : -4, - rotation: horiz && !isBand && 90 - }, optionsLabel); - - this.renderLabel(optionsLabel, path, isBand, zIndex); - - } else if (label) { // move out of sight - label.hide(); - } - - // chainable - return plotLine; - }, - - /** - * Render and align label for plot line or band. - */ - renderLabel: function(optionsLabel, path, isBand, zIndex) { - var plotLine = this, - label = plotLine.label, - renderer = plotLine.axis.chart.renderer, - attribs, - xBounds, - yBounds, - x, - y; - - // add the SVG element - if (!label) { - attribs = { - align: optionsLabel.textAlign || optionsLabel.align, - rotation: optionsLabel.rotation, - 'class': 'highcharts-plot-' + (isBand ? 'band' : 'line') + - '-label ' + (optionsLabel.className || '') - }; - - attribs.zIndex = zIndex; - - plotLine.label = label = renderer.text( - optionsLabel.text, - 0, - 0, - optionsLabel.useHTML - ) - .attr(attribs) - .add(); - - - label.css(optionsLabel.style); - - } - - // get the bounding box and align the label - // #3000 changed to better handle choice between plotband or plotline - xBounds = path.xBounds || [path[1], path[4], (isBand ? path[6] : path[1])]; - yBounds = path.yBounds || [path[2], path[5], (isBand ? path[7] : path[2])]; - - x = arrayMin(xBounds); - y = arrayMin(yBounds); - - label.align(optionsLabel, false, { - x: x, - y: y, - width: arrayMax(xBounds) - x, - height: arrayMax(yBounds) - y - }); - label.show(); - }, - - /** - * Remove the plot line or band - */ - destroy: function() { - // remove it from the lookup - erase(this.axis.plotLinesAndBands, this); - - delete this.axis; - destroyObjectProperties(this); - } - }; - - /** - * Object with members for extending the Axis prototype - * @todo Extend directly instead of adding object to Highcharts first - */ - - H.extend(Axis.prototype, /** @lends Highcharts.Axis.prototype */ { - - /** - * Internal function to create the SVG path definition for a plot band. - * - * @param {Number} from - * The axis value to start from. - * @param {Number} to - * The axis value to end on. - * - * @return {Array.} - * The SVG path definition in array form. - */ - getPlotBandPath: function(from, to) { - var toPath = this.getPlotLinePath(to, null, null, true), - path = this.getPlotLinePath(from, null, null, true), - result = [], - i, - // #4964 check if chart is inverted or plotband is on yAxis - horiz = this.horiz, - plus = 1, - flat, - outside = - (from < this.min && to < this.min) || - (from > this.max && to > this.max); - - if (path && toPath) { - - // Flat paths don't need labels (#3836) - if (outside) { - flat = path.toString() === toPath.toString(); - plus = 0; - } - - // Go over each subpath - for panes in Highstock - for (i = 0; i < path.length; i += 6) { - - // Add 1 pixel when coordinates are the same - if (horiz && toPath[i + 1] === path[i + 1]) { - toPath[i + 1] += plus; - toPath[i + 4] += plus; - } else if (!horiz && toPath[i + 2] === path[i + 2]) { - toPath[i + 2] += plus; - toPath[i + 5] += plus; - } - - result.push( - 'M', - path[i + 1], - path[i + 2], - 'L', - path[i + 4], - path[i + 5], - toPath[i + 4], - toPath[i + 5], - toPath[i + 1], - toPath[i + 2], - 'z' - ); - result.flat = flat; - } - - } else { // outside the axis area - path = null; - } - - return result; - }, - - /** - * Add a plot band after render time. - * - * @param {AxisPlotBandsOptions} options - * A configuration object for the plot band, as defined in {@link - * https://api.highcharts.com/highcharts/xAxis.plotBands| - * xAxis.plotBands}. - * @return {Object} - * The added plot band. - * @sample highcharts/members/axis-addplotband/ - * Toggle the plot band from a button - */ - addPlotBand: function(options) { - return this.addPlotBandOrLine(options, 'plotBands'); - }, - - /** - * Add a plot line after render time. - * - * @param {AxisPlotLinesOptions} options - * A configuration object for the plot line, as defined in {@link - * https://api.highcharts.com/highcharts/xAxis.plotLines| - * xAxis.plotLines}. - * @return {Object} - * The added plot line. - * @sample highcharts/members/axis-addplotline/ - * Toggle the plot line from a button - */ - addPlotLine: function(options) { - return this.addPlotBandOrLine(options, 'plotLines'); - }, - - /** - * Add a plot band or plot line after render time. Called from addPlotBand - * and addPlotLine internally. - * - * @private - * @param options {AxisPlotLinesOptions|AxisPlotBandsOptions} - * The plotBand or plotLine configuration object. - */ - addPlotBandOrLine: function(options, coll) { - var obj = new H.PlotLineOrBand(this, options).render(), - userOptions = this.userOptions; - - if (obj) { // #2189 - // Add it to the user options for exporting and Axis.update - if (coll) { - userOptions[coll] = userOptions[coll] || []; - userOptions[coll].push(options); - } - this.plotLinesAndBands.push(obj); - } - - return obj; - }, - - /** - * Remove a plot band or plot line from the chart by id. Called internally - * from `removePlotBand` and `removePlotLine`. - * - * @private - * @param {String} id - */ - removePlotBandOrLine: function(id) { - var plotLinesAndBands = this.plotLinesAndBands, - options = this.options, - userOptions = this.userOptions, - i = plotLinesAndBands.length; - while (i--) { - if (plotLinesAndBands[i].id === id) { - plotLinesAndBands[i].destroy(); - } - } - each([ - options.plotLines || [], - userOptions.plotLines || [], - options.plotBands || [], - userOptions.plotBands || [] - ], function(arr) { - i = arr.length; - while (i--) { - if (arr[i].id === id) { - erase(arr, arr[i]); - } - } - }); - }, - - /** - * Remove a plot band by its id. - * - * @param {String} id - * The plot band's `id` as given in the original configuration - * object or in the `addPlotBand` option. - * @sample highcharts/members/axis-removeplotband/ - * Remove plot band by id - * @sample highcharts/members/axis-addplotband/ - * Toggle the plot band from a button - */ - removePlotBand: function(id) { - this.removePlotBandOrLine(id); - }, - - /** - * Remove a plot line by its id. - * @param {String} id - * The plot line's `id` as given in the original configuration - * object or in the `addPlotLine` option. - * @sample highcharts/xaxis/plotlines-id/ - * Remove plot line by id - * @sample highcharts/members/axis-addplotline/ - * Toggle the plot line from a button - */ - removePlotLine: function(id) { - this.removePlotBandOrLine(id); - } - }); - - }(Highcharts, Axis)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var dateFormat = H.dateFormat, - each = H.each, - extend = H.extend, - format = H.format, - isNumber = H.isNumber, - map = H.map, - merge = H.merge, - pick = H.pick, - splat = H.splat, - syncTimeout = H.syncTimeout, - timeUnits = H.timeUnits; - /** - * The tooltip object - * @param {Object} chart The chart instance - * @param {Object} options Tooltip options - */ - H.Tooltip = function() { - this.init.apply(this, arguments); - }; - - H.Tooltip.prototype = { - - init: function(chart, options) { - - // Save the chart and options - this.chart = chart; - this.options = options; - - // List of crosshairs - this.crosshairs = []; - - // Current values of x and y when animating - this.now = { - x: 0, - y: 0 - }; - - // The tooltip is initially hidden - this.isHidden = true; - - - - // Public property for getting the shared state. - this.split = options.split && !chart.inverted; - this.shared = options.shared || this.split; - - }, - - /** - * Destroy the single tooltips in a split tooltip. - * If the tooltip is active then it is not destroyed, unless forced to. - * @param {boolean} force Force destroy all tooltips. - * @return {undefined} - */ - cleanSplit: function(force) { - each(this.chart.series, function(series) { - var tt = series && series.tt; - if (tt) { - if (!tt.isActive || force) { - series.tt = tt.destroy(); - } else { - tt.isActive = false; - } - } - }); - }, - - - - - /** - * Create the Tooltip label element if it doesn't exist, then return the - * label. - */ - getLabel: function() { - - var renderer = this.chart.renderer, - options = this.options; - - if (!this.label) { - // Create the label - if (this.split) { - this.label = renderer.g('tooltip'); - } else { - this.label = renderer.label( - '', - 0, - 0, - options.shape || 'callout', - null, - null, - options.useHTML, - null, - 'tooltip' - ) - .attr({ - padding: options.padding, - r: options.borderRadius - }); - - - this.label - .attr({ - 'fill': options.backgroundColor, - 'stroke-width': options.borderWidth - }) - // #2301, #2657 - .css(options.style) - .shadow(options.shadow); - - } - - - - this.label - .attr({ - zIndex: 8 - }) - .add(); - } - return this.label; - }, - - update: function(options) { - this.destroy(); - // Update user options (#6218) - merge(true, this.chart.options.tooltip.userOptions, options); - this.init(this.chart, merge(true, this.options, options)); - }, - - /** - * Destroy the tooltip and its elements. - */ - destroy: function() { - // Destroy and clear local variables - if (this.label) { - this.label = this.label.destroy(); - } - if (this.split && this.tt) { - this.cleanSplit(this.chart, true); - this.tt = this.tt.destroy(); - } - clearTimeout(this.hideTimer); - clearTimeout(this.tooltipTimeout); - }, - - /** - * Provide a soft movement for the tooltip - * - * @param {Number} x - * @param {Number} y - * @private - */ - move: function(x, y, anchorX, anchorY) { - var tooltip = this, - now = tooltip.now, - animate = tooltip.options.animation !== false && - !tooltip.isHidden && - // When we get close to the target position, abort animation and - // land on the right place (#3056) - (Math.abs(x - now.x) > 1 || Math.abs(y - now.y) > 1), - skipAnchor = tooltip.followPointer || tooltip.len > 1; - - // Get intermediate values for animation - extend(now, { - x: animate ? (2 * now.x + x) / 3 : x, - y: animate ? (now.y + y) / 2 : y, - anchorX: skipAnchor ? - undefined : animate ? (2 * now.anchorX + anchorX) / 3 : anchorX, - anchorY: skipAnchor ? - undefined : animate ? (now.anchorY + anchorY) / 2 : anchorY - }); - - // Move to the intermediate value - tooltip.getLabel().attr(now); - - - // Run on next tick of the mouse tracker - if (animate) { - - // Never allow two timeouts - clearTimeout(this.tooltipTimeout); - - // Set the fixed interval ticking for the smooth tooltip - this.tooltipTimeout = setTimeout(function() { - // The interval function may still be running during destroy, - // so check that the chart is really there before calling. - if (tooltip) { - tooltip.move(x, y, anchorX, anchorY); - } - }, 32); - - } - }, - - /** - * Hide the tooltip - */ - hide: function(delay) { - var tooltip = this; - // disallow duplicate timers (#1728, #1766) - clearTimeout(this.hideTimer); - delay = pick(delay, this.options.hideDelay, 500); - if (!this.isHidden) { - this.hideTimer = syncTimeout(function() { - tooltip.getLabel()[delay ? 'fadeOut' : 'hide'](); - tooltip.isHidden = true; - }, delay); - } - }, - - /** - * Extendable method to get the anchor position of the tooltip - * from a point or set of points - */ - getAnchor: function(points, mouseEvent) { - var ret, - chart = this.chart, - inverted = chart.inverted, - plotTop = chart.plotTop, - plotLeft = chart.plotLeft, - plotX = 0, - plotY = 0, - yAxis, - xAxis; - - points = splat(points); - - // Pie uses a special tooltipPos - ret = points[0].tooltipPos; - - // When tooltip follows mouse, relate the position to the mouse - if (this.followPointer && mouseEvent) { - if (mouseEvent.chartX === undefined) { - mouseEvent = chart.pointer.normalize(mouseEvent); - } - ret = [ - mouseEvent.chartX - chart.plotLeft, - mouseEvent.chartY - plotTop - ]; - } - // When shared, use the average position - if (!ret) { - each(points, function(point) { - yAxis = point.series.yAxis; - xAxis = point.series.xAxis; - plotX += point.plotX + - (!inverted && xAxis ? xAxis.left - plotLeft : 0); - plotY += - ( - point.plotLow ? - (point.plotLow + point.plotHigh) / 2 : - point.plotY - ) + - (!inverted && yAxis ? yAxis.top - plotTop : 0); // #1151 - }); - - plotX /= points.length; - plotY /= points.length; - - ret = [ - inverted ? chart.plotWidth - plotY : plotX, - this.shared && !inverted && points.length > 1 && mouseEvent ? - // place shared tooltip next to the mouse (#424) - mouseEvent.chartY - plotTop : - inverted ? chart.plotHeight - plotX : plotY - ]; - } - - return map(ret, Math.round); - }, - - /** - * Place the tooltip in a chart without spilling over - * and not covering the point it self. - */ - getPosition: function(boxWidth, boxHeight, point) { - - var chart = this.chart, - distance = this.distance, - ret = {}, - // Don't use h if chart isn't inverted (#7242) - h = (chart.inverted && point.h) || 0, // #4117 - swapped, - first = ['y', chart.chartHeight, boxHeight, - point.plotY + chart.plotTop, chart.plotTop, - chart.plotTop + chart.plotHeight - ], - second = ['x', chart.chartWidth, boxWidth, - point.plotX + chart.plotLeft, chart.plotLeft, - chart.plotLeft + chart.plotWidth - ], - // The far side is right or bottom - preferFarSide = !this.followPointer && pick( - point.ttBelow, !chart.inverted === !!point.negative - ), // #4984 - - /** - * Handle the preferred dimension. When the preferred dimension is - * tooltip on top or bottom of the point, it will look for space - * there. - */ - firstDimension = function( - dim, - outerSize, - innerSize, - point, - min, - max - ) { - var roomLeft = innerSize < point - distance, - roomRight = point + distance + innerSize < outerSize, - alignedLeft = point - distance - innerSize, - alignedRight = point + distance; - - if (preferFarSide && roomRight) { - ret[dim] = alignedRight; - } else if (!preferFarSide && roomLeft) { - ret[dim] = alignedLeft; - } else if (roomLeft) { - ret[dim] = Math.min( - max - innerSize, - alignedLeft - h < 0 ? alignedLeft : alignedLeft - h - ); - } else if (roomRight) { - ret[dim] = Math.max( - min, - alignedRight + h + innerSize > outerSize ? - alignedRight : - alignedRight + h - ); - } else { - return false; - } - }, - /** - * Handle the secondary dimension. If the preferred dimension is - * tooltip on top or bottom of the point, the second dimension is to - * align the tooltip above the point, trying to align center but - * allowing left or right align within the chart box. - */ - secondDimension = function(dim, outerSize, innerSize, point) { - var retVal; - - // Too close to the edge, return false and swap dimensions - if (point < distance || point > outerSize - distance) { - retVal = false; - // Align left/top - } else if (point < innerSize / 2) { - ret[dim] = 1; - // Align right/bottom - } else if (point > outerSize - innerSize / 2) { - ret[dim] = outerSize - innerSize - 2; - // Align center - } else { - ret[dim] = point - innerSize / 2; - } - return retVal; - }, - /** - * Swap the dimensions - */ - swap = function(count) { - var temp = first; - first = second; - second = temp; - swapped = count; - }, - run = function() { - if (firstDimension.apply(0, first) !== false) { - if ( - secondDimension.apply(0, second) === false && - !swapped - ) { - swap(true); - run(); - } - } else if (!swapped) { - swap(true); - run(); - } else { - ret.x = ret.y = 0; - } - }; - - // Under these conditions, prefer the tooltip on the side of the point - if (chart.inverted || this.len > 1) { - swap(); - } - run(); - - return ret; - - }, - - /** - * In case no user defined formatter is given, this will be used. Note that - * the context here is an object holding point, series, x, y etc. - * - * @returns {String|Array} - */ - defaultFormatter: function(tooltip) { - var items = this.points || splat(this), - s; - - // Build the header - s = [tooltip.tooltipFooterHeaderFormatter(items[0])]; - - // build the values - s = s.concat(tooltip.bodyFormatter(items)); - - // footer - s.push(tooltip.tooltipFooterHeaderFormatter(items[0], true)); - - return s; - }, - - /** - * Refresh the tooltip's text and position. - * @param {Object|Array} pointOrPoints Rither a point or an array of points - */ - refresh: function(pointOrPoints, mouseEvent) { - var tooltip = this, - label, - options = tooltip.options, - x, - y, - point = pointOrPoints, - anchor, - textConfig = {}, - text, - pointConfig = [], - formatter = options.formatter || tooltip.defaultFormatter, - shared = tooltip.shared, - currentSeries; - - if (!options.enabled) { - return; - } - - clearTimeout(this.hideTimer); - - // get the reference point coordinates (pie charts use tooltipPos) - tooltip.followPointer = splat(point)[0].series.tooltipOptions - .followPointer; - anchor = tooltip.getAnchor(point, mouseEvent); - x = anchor[0]; - y = anchor[1]; - - // shared tooltip, array is sent over - if (shared && !(point.series && point.series.noSharedTooltip)) { - each(point, function(item) { - item.setState('hover'); - - pointConfig.push(item.getLabelConfig()); - }); - - textConfig = { - x: point[0].category, - y: point[0].y - }; - textConfig.points = pointConfig; - point = point[0]; - - // single point tooltip - } else { - textConfig = point.getLabelConfig(); - } - this.len = pointConfig.length; // #6128 - text = formatter.call(textConfig, tooltip); - - // register the current series - currentSeries = point.series; - this.distance = pick(currentSeries.tooltipOptions.distance, 16); - - // update the inner HTML - if (text === false) { - this.hide(); - } else { - - label = tooltip.getLabel(); - - // show it - if (tooltip.isHidden) { - label.attr({ - opacity: 1 - }).show(); - } - - // update text - if (tooltip.split) { - this.renderSplit(text, splat(pointOrPoints)); - } else { - - // Prevent the tooltip from flowing over the chart box (#6659) - - if (!options.style.width) { - - label.css({ - width: this.chart.spacingBox.width - }); - - } - - - label.attr({ - text: text && text.join ? text.join('') : text - }); - - // Set the stroke color of the box to reflect the point - label.removeClass(/highcharts-color-[\d]+/g) - .addClass( - 'highcharts-color-' + - pick(point.colorIndex, currentSeries.colorIndex) - ); - - - label.attr({ - stroke: ( - options.borderColor || - point.color || - currentSeries.color || - '#666666' - ) - }); - - - tooltip.updatePosition({ - plotX: x, - plotY: y, - negative: point.negative, - ttBelow: point.ttBelow, - h: anchor[2] || 0 - }); - } - - this.isHidden = false; - } - }, - - /** - * Render the split tooltip. Loops over each point's text and adds - * a label next to the point, then uses the distribute function to - * find best non-overlapping positions. - */ - renderSplit: function(labels, points) { - var tooltip = this, - boxes = [], - chart = this.chart, - ren = chart.renderer, - rightAligned = true, - options = this.options, - headerHeight = 0, - tooltipLabel = this.getLabel(); - - // Graceful degradation for legacy formatters - if (H.isString(labels)) { - labels = [false, labels]; - } - // Create the individual labels for header and points, ignore footer - each(labels.slice(0, points.length + 1), function(str, i) { - if (str !== false) { - var point = points[i - 1] || - // Item 0 is the header. Instead of this, we could also - // use the crosshair label - { - isHeader: true, - plotX: points[0].plotX - }, - owner = point.series || tooltip, - tt = owner.tt, - series = point.series || {}, - colorClass = 'highcharts-color-' + pick( - point.colorIndex, - series.colorIndex, - 'none' - ), - target, - x, - bBox, - boxWidth; - - // Store the tooltip referance on the series - if (!tt) { - owner.tt = tt = ren.label( - null, - null, - null, - 'callout', - null, - null, - options.useHTML - ) - .addClass('highcharts-tooltip-box ' + colorClass) - .attr({ - 'padding': options.padding, - 'r': options.borderRadius, - - 'fill': options.backgroundColor, - 'stroke': ( - options.borderColor || - point.color || - series.color || - '#333333' - ), - 'stroke-width': options.borderWidth - - }) - .add(tooltipLabel); - } - - tt.isActive = true; - tt.attr({ - text: str - }); - - tt.css(options.style) - .shadow(options.shadow); - - - // Get X position now, so we can move all to the other side in - // case of overflow - bBox = tt.getBBox(); - boxWidth = bBox.width + tt.strokeWidth(); - if (point.isHeader) { - headerHeight = bBox.height; - x = Math.max( - 0, // No left overflow - Math.min( - point.plotX + chart.plotLeft - boxWidth / 2, - // No right overflow (#5794) - chart.chartWidth - boxWidth - ) - ); - } else { - x = point.plotX + chart.plotLeft - - pick(options.distance, 16) - boxWidth; - } - - - // If overflow left, we don't use this x in the next loop - if (x < 0) { - rightAligned = false; - } - - // Prepare for distribution - target = (point.series && point.series.yAxis && - point.series.yAxis.pos) + (point.plotY || 0); - target -= chart.plotTop; - boxes.push({ - target: point.isHeader ? - chart.plotHeight + headerHeight : target, - rank: point.isHeader ? 1 : 0, - size: owner.tt.getBBox().height + 1, - point: point, - x: x, - tt: tt - }); - } - }); - - // Clean previous run (for missing points) - this.cleanSplit(); - - // Distribute and put in place - H.distribute(boxes, chart.plotHeight + headerHeight); - each(boxes, function(box) { - var point = box.point, - series = point.series; - - // Put the label in place - box.tt.attr({ - visibility: box.pos === undefined ? 'hidden' : 'inherit', - x: (rightAligned || point.isHeader ? - box.x : - point.plotX + chart.plotLeft + pick(options.distance, 16)), - y: box.pos + chart.plotTop, - anchorX: point.isHeader ? - point.plotX + chart.plotLeft : point.plotX + series.xAxis.pos, - anchorY: point.isHeader ? - box.pos + chart.plotTop - 15 : point.plotY + series.yAxis.pos - }); - }); - }, - - /** - * Find the new position and perform the move - */ - updatePosition: function(point) { - var chart = this.chart, - label = this.getLabel(), - pos = (this.options.positioner || this.getPosition).call( - this, - label.width, - label.height, - point - ); - - // do the move - this.move( - Math.round(pos.x), - Math.round(pos.y || 0), // can be undefined (#3977) - point.plotX + chart.plotLeft, - point.plotY + chart.plotTop - ); - }, - - /** - * Get the optimal date format for a point, based on a range. - * @param {number} range - The time range - * @param {number|Date} date - The date of the point in question - * @param {number} startOfWeek - An integer representing the first day of - * the week, where 0 is Sunday - * @param {Object} dateTimeLabelFormats - A map of time units to formats - * @return {string} - the optimal date format for a point - */ - getDateFormat: function(range, date, startOfWeek, dateTimeLabelFormats) { - var dateStr = dateFormat('%m-%d %H:%M:%S.%L', date), - format, - n, - blank = '01-01 00:00:00.000', - strpos = { - millisecond: 15, - second: 12, - minute: 9, - hour: 6, - day: 3 - }, - lastN = 'millisecond'; // for sub-millisecond data, #4223 - for (n in timeUnits) { - - // If the range is exactly one week and we're looking at a - // Sunday/Monday, go for the week format - if ( - range === timeUnits.week && - +dateFormat('%w', date) === startOfWeek && - dateStr.substr(6) === blank.substr(6) - ) { - n = 'week'; - break; - } - - // The first format that is too great for the range - if (timeUnits[n] > range) { - n = lastN; - break; - } - - // If the point is placed every day at 23:59, we need to show - // the minutes as well. #2637. - if ( - strpos[n] && - dateStr.substr(strpos[n]) !== blank.substr(strpos[n]) - ) { - break; - } - - // Weeks are outside the hierarchy, only apply them on - // Mondays/Sundays like in the first condition - if (n !== 'week') { - lastN = n; - } - } - - if (n) { - format = dateTimeLabelFormats[n]; - } - - return format; - }, - - /** - * Get the best X date format based on the closest point range on the axis. - */ - getXDateFormat: function(point, options, xAxis) { - var xDateFormat, - dateTimeLabelFormats = options.dateTimeLabelFormats, - closestPointRange = xAxis && xAxis.closestPointRange; - - if (closestPointRange) { - xDateFormat = this.getDateFormat( - closestPointRange, - point.x, - xAxis.options.startOfWeek, - dateTimeLabelFormats - ); - } else { - xDateFormat = dateTimeLabelFormats.day; - } - - return xDateFormat || dateTimeLabelFormats.year; // #2546, 2581 - }, - - /** - * Format the footer/header of the tooltip - * #3397: abstraction to enable formatting of footer and header - */ - tooltipFooterHeaderFormatter: function(labelConfig, isFooter) { - var footOrHead = isFooter ? 'footer' : 'header', - series = labelConfig.series, - tooltipOptions = series.tooltipOptions, - xDateFormat = tooltipOptions.xDateFormat, - xAxis = series.xAxis, - isDateTime = ( - xAxis && - xAxis.options.type === 'datetime' && - isNumber(labelConfig.key) - ), - formatString = tooltipOptions[footOrHead + 'Format']; - - // Guess the best date format based on the closest point distance (#568, - // #3418) - if (isDateTime && !xDateFormat) { - xDateFormat = this.getXDateFormat( - labelConfig, - tooltipOptions, - xAxis - ); - } - - // Insert the footer date format if any - if (isDateTime && xDateFormat) { - each( - (labelConfig.point && labelConfig.point.tooltipDateKeys) || ['key'], - function(key) { - formatString = formatString.replace( - '{point.' + key + '}', - '{point.' + key + ':' + xDateFormat + '}' - ); - } - ); - } - - return format(formatString, { - point: labelConfig, - series: series - }); - }, - - /** - * Build the body (lines) of the tooltip by iterating over the items and - * returning one entry for each item, abstracting this functionality allows - * to easily overwrite and extend it. - */ - bodyFormatter: function(items) { - return map(items, function(item) { - var tooltipOptions = item.series.tooltipOptions; - return ( - tooltipOptions[ - (item.point.formatPrefix || 'point') + 'Formatter' - ] || - item.point.tooltipFormatter - ).call( - item.point, - tooltipOptions[(item.point.formatPrefix || 'point') + 'Format'] - ); - }); - } - - }; - - }(Highcharts)); - (function(Highcharts) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var H = Highcharts, - addEvent = H.addEvent, - attr = H.attr, - charts = H.charts, - color = H.color, - css = H.css, - defined = H.defined, - each = H.each, - extend = H.extend, - find = H.find, - fireEvent = H.fireEvent, - isObject = H.isObject, - offset = H.offset, - pick = H.pick, - splat = H.splat, - Tooltip = H.Tooltip; - - /** - * The mouse and touch tracker object. Each {@link Chart} item has one - * assosiated Pointer item that can be accessed from the {@link Chart.pointer} - * property. - * - * @class - * @param {Chart} chart - * The Chart instance. - * @param {Options} options - * The root options object. The pointer uses options from the chart and - * tooltip structures. - */ - Highcharts.Pointer = function(chart, options) { - this.init(chart, options); - }; - - Highcharts.Pointer.prototype = { - /** - * Initialize the Pointer. - * - * @private - */ - init: function(chart, options) { - - // Store references - this.options = options; - this.chart = chart; - - // Do we need to handle click on a touch device? - this.runChartClick = options.chart.events && !!options.chart.events.click; - - this.pinchDown = []; - this.lastValidTouch = {}; - - if (Tooltip) { - chart.tooltip = new Tooltip(chart, options.tooltip); - this.followTouchMove = pick(options.tooltip.followTouchMove, true); - } - - this.setDOMEvents(); - }, - - /** - * Resolve the zoomType option, this is reset on all touch start and mouse - * down events. - * - * @private - */ - zoomOption: function(e) { - var chart = this.chart, - options = chart.options.chart, - zoomType = options.zoomType || '', - inverted = chart.inverted, - zoomX, - zoomY; - - // Look for the pinchType option - if (/touch/.test(e.type)) { - zoomType = pick(options.pinchType, zoomType); - } - - this.zoomX = zoomX = /x/.test(zoomType); - this.zoomY = zoomY = /y/.test(zoomType); - this.zoomHor = (zoomX && !inverted) || (zoomY && inverted); - this.zoomVert = (zoomY && !inverted) || (zoomX && inverted); - this.hasZoom = zoomX || zoomY; - }, - - /** - * @typedef {Object} PointerEvent - * A native browser mouse or touch event, extended with position - * information relative to the {@link Chart.container}. - * @property {Number} chartX - * The X coordinate of the pointer interaction relative to the - * chart. - * @property {Number} chartY - * The Y coordinate of the pointer interaction relative to the - * chart. - * - */ - /** - * Takes a browser event object and extends it with custom Highcharts - * properties `chartX` and `chartY` in order to work on the internal - * coordinate system. - * - * @param {Object} e - * The event object in standard browsers. - * - * @return {PointerEvent} - * A browser event with extended properties `chartX` and `chartY`. - */ - normalize: function(e, chartPosition) { - var ePos; - - // iOS (#2757) - ePos = e.touches ? (e.touches.length ? e.touches.item(0) : e.changedTouches[0]) : e; - - // Get mouse position - if (!chartPosition) { - this.chartPosition = chartPosition = offset(this.chart.container); - } - - return extend(e, { - chartX: Math.round(ePos.pageX - chartPosition.left), - chartY: Math.round(ePos.pageY - chartPosition.top) - }); - }, - - /** - * Get the click position in terms of axis values. - * - * @param {PointerEvent} e - * A pointer event, extended with `chartX` and `chartY` - * properties. - */ - getCoordinates: function(e) { - var coordinates = { - xAxis: [], - yAxis: [] - }; - - each(this.chart.axes, function(axis) { - coordinates[axis.isXAxis ? 'xAxis' : 'yAxis'].push({ - axis: axis, - value: axis.toValue(e[axis.horiz ? 'chartX' : 'chartY']) - }); - }); - return coordinates; - }, - /** - * Finds the closest point to a set of coordinates, using the k-d-tree - * algorithm. - * - * @param {Array.} series - * All the series to search in. - * @param {boolean} shared - * Whether it is a shared tooltip or not. - * @param {object} coordinates - * Chart coordinates of the pointer. - * @param {number} coordinates.chartX - * @param {number} coordinates.chartY - * - * @return {Point|undefined} The point closest to given coordinates. - */ - findNearestKDPoint: function(series, shared, coordinates) { - var closest, - sort = function(p1, p2) { - var isCloserX = p1.distX - p2.distX, - isCloser = p1.dist - p2.dist, - isAbove = - (p2.series.group && p2.series.group.zIndex) - - (p1.series.group && p1.series.group.zIndex), - result; - - // We have two points which are not in the same place on xAxis - // and shared tooltip: - if (isCloserX !== 0 && shared) { // #5721 - result = isCloserX; - // Points are not exactly in the same place on x/yAxis: - } else if (isCloser !== 0) { - result = isCloser; - // The same xAxis and yAxis position, sort by z-index: - } else if (isAbove !== 0) { - result = isAbove; - // The same zIndex, sort by array index: - } else { - result = p1.series.index > p2.series.index ? -1 : 1; - } - return result; - }; - each(series, function(s) { - var noSharedTooltip = s.noSharedTooltip && shared, - compareX = (!noSharedTooltip && - s.options.findNearestPointBy.indexOf('y') < 0 - ), - point = s.searchPoint( - coordinates, - compareX - ); - if ( - // Check that we actually found a point on the series. - isObject(point, true) && - // Use the new point if it is closer. - (!isObject(closest, true) || (sort(closest, point) > 0)) - ) { - closest = point; - } - }); - return closest; - }, - getPointFromEvent: function(e) { - var target = e.target, - point; - - while (target && !point) { - point = target.point; - target = target.parentNode; - } - return point; - }, - - getChartCoordinatesFromPoint: function(point, inverted) { - var series = point.series, - xAxis = series.xAxis, - yAxis = series.yAxis, - plotX = pick(point.clientX, point.plotX); - - if (xAxis && yAxis) { - return inverted ? { - chartX: xAxis.len + xAxis.pos - plotX, - chartY: yAxis.len + yAxis.pos - point.plotY - } : { - chartX: plotX + xAxis.pos, - chartY: point.plotY + yAxis.pos - }; - } - }, - - /** - * Calculates what is the current hovered point/points and series. - * - * @private - * - * @param {undefined|Point} existingHoverPoint - * The point currrently beeing hovered. - * @param {undefined|Series} existingHoverSeries - * The series currently beeing hovered. - * @param {Array.} series - * All the series in the chart. - * @param {boolean} isDirectTouch - * Is the pointer directly hovering the point. - * @param {boolean} shared - * Whether it is a shared tooltip or not. - * @param {object} coordinates - * Chart coordinates of the pointer. - * @param {number} coordinates.chartX - * @param {number} coordinates.chartY - * - * @return {object} - * Object containing resulting hover data. - */ - getHoverData: function( - existingHoverPoint, - existingHoverSeries, - series, - isDirectTouch, - shared, - coordinates, - params - ) { - var hoverPoint, - hoverPoints = [], - hoverSeries = existingHoverSeries, - isBoosting = params && params.isBoosting, - useExisting = !!(isDirectTouch && existingHoverPoint), - notSticky = hoverSeries && !hoverSeries.stickyTracking, - filter = function(s) { - return ( - s.visible && - !(!shared && s.directTouch) && // #3821 - pick(s.options.enableMouseTracking, true) - ); - }, - // Which series to look in for the hover point - searchSeries = notSticky ? - // Only search on hovered series if it has stickyTracking false - [hoverSeries] : - // Filter what series to look in. - H.grep(series, function(s) { - return filter(s) && s.stickyTracking; - }); - - // Use existing hovered point or find the one closest to coordinates. - hoverPoint = useExisting ? - existingHoverPoint : - this.findNearestKDPoint(searchSeries, shared, coordinates); - - // Assign hover series - hoverSeries = hoverPoint && hoverPoint.series; - - // If we have a hoverPoint, assign hoverPoints. - if (hoverPoint) { - // When tooltip is shared, it displays more than one point - if (shared && !hoverSeries.noSharedTooltip) { - searchSeries = H.grep(series, function(s) { - return filter(s) && !s.noSharedTooltip; - }); - - // Get all points with the same x value as the hoverPoint - each(searchSeries, function(s) { - var point = find(s.points, function(p) { - return p.x === hoverPoint.x && !p.isNull; - }); - if (isObject(point)) { - /* - * Boost returns a minimal point. Convert it to a usable - * point for tooltip and states. - */ - if (isBoosting) { - point = s.getPoint(point); - } - hoverPoints.push(point); - } - }); - } else { - hoverPoints.push(hoverPoint); - } - } - return { - hoverPoint: hoverPoint, - hoverSeries: hoverSeries, - hoverPoints: hoverPoints - }; - }, - /** - * With line type charts with a single tracker, get the point closest to the - * mouse. Run Point.onMouseOver and display tooltip for the point or points. - * - * @private - */ - runPointActions: function(e, p) { - var pointer = this, - chart = pointer.chart, - series = chart.series, - tooltip = chart.tooltip && chart.tooltip.options.enabled ? - chart.tooltip : - undefined, - shared = tooltip ? tooltip.shared : false, - hoverPoint = p || chart.hoverPoint, - hoverSeries = hoverPoint && hoverPoint.series || chart.hoverSeries, - // onMouseOver or already hovering a series with directTouch - isDirectTouch = !!p || ( - (hoverSeries && hoverSeries.directTouch) && - pointer.isDirectTouch - ), - hoverData = this.getHoverData( - hoverPoint, - hoverSeries, - series, - isDirectTouch, - shared, - e, { - isBoosting: chart.isBoosting - } - ), - useSharedTooltip, - followPointer, - anchor, - points; - - // Update variables from hoverData. - hoverPoint = hoverData.hoverPoint; - points = hoverData.hoverPoints; - hoverSeries = hoverData.hoverSeries; - followPointer = hoverSeries && hoverSeries.tooltipOptions.followPointer; - useSharedTooltip = shared && hoverSeries && !hoverSeries.noSharedTooltip; - - // Refresh tooltip for kdpoint if new hover point or tooltip was hidden - // #3926, #4200 - if ( - hoverPoint && - // !(hoverSeries && hoverSeries.directTouch) && - (hoverPoint !== chart.hoverPoint || (tooltip && tooltip.isHidden)) - ) { - each(chart.hoverPoints || [], function(p) { - if (H.inArray(p, points) === -1) { - p.setState(); - } - }); - // Do mouseover on all points (#3919, #3985, #4410, #5622) - each(points || [], function(p) { - p.setState('hover'); - }); - // set normal state to previous series - if (chart.hoverSeries !== hoverSeries) { - hoverSeries.onMouseOver(); - } - - // If tracking is on series in stead of on each point, - // fire mouseOver on hover point. // #4448 - if (chart.hoverPoint) { - chart.hoverPoint.firePointEvent('mouseOut'); - } - - // Hover point may have been destroyed in the event handlers (#7127) - if (!hoverPoint.series) { - return; - } - - hoverPoint.firePointEvent('mouseOver'); - chart.hoverPoints = points; - chart.hoverPoint = hoverPoint; - // Draw tooltip if necessary - if (tooltip) { - tooltip.refresh(useSharedTooltip ? points : hoverPoint, e); - } - // Update positions (regardless of kdpoint or hoverPoint) - } else if (followPointer && tooltip && !tooltip.isHidden) { - anchor = tooltip.getAnchor([{}], e); - tooltip.updatePosition({ - plotX: anchor[0], - plotY: anchor[1] - }); - } - - // Start the event listener to pick up the tooltip and crosshairs - if (!pointer.unDocMouseMove) { - pointer.unDocMouseMove = addEvent( - chart.container.ownerDocument, - 'mousemove', - function(e) { - var chart = charts[H.hoverChartIndex]; - if (chart) { - chart.pointer.onDocumentMouseMove(e); - } - } - ); - } - - // Issues related to crosshair #4927, #5269 #5066, #5658 - each(chart.axes, function drawAxisCrosshair(axis) { - var snap = pick(axis.crosshair.snap, true), - point = !snap ? - undefined : - H.find(points, function(p) { - return p.series[axis.coll] === axis; - }); - - // Axis has snapping crosshairs, and one of the hover points belongs - // to axis. Always call drawCrosshair when it is not snap. - if (point || !snap) { - axis.drawCrosshair(e, point); - // Axis has snapping crosshairs, but no hover point belongs to axis - } else { - axis.hideCrosshair(); - } - }); - }, - - /** - * Reset the tracking by hiding the tooltip, the hover series state and the - * hover point - * - * @param allowMove {Boolean} - * Instead of destroying the tooltip altogether, allow moving it if - * possible. - */ - reset: function(allowMove, delay) { - var pointer = this, - chart = pointer.chart, - hoverSeries = chart.hoverSeries, - hoverPoint = chart.hoverPoint, - hoverPoints = chart.hoverPoints, - tooltip = chart.tooltip, - tooltipPoints = tooltip && tooltip.shared ? hoverPoints : hoverPoint; - - // Check if the points have moved outside the plot area (#1003, #4736, #5101) - if (allowMove && tooltipPoints) { - each(splat(tooltipPoints), function(point) { - if (point.series.isCartesian && point.plotX === undefined) { - allowMove = false; - } - }); - } - - // Just move the tooltip, #349 - if (allowMove) { - if (tooltip && tooltipPoints) { - tooltip.refresh(tooltipPoints); - if (hoverPoint) { // #2500 - hoverPoint.setState(hoverPoint.state, true); - each(chart.axes, function(axis) { - if (axis.crosshair) { - axis.drawCrosshair(null, hoverPoint); - } - }); - } - } - - // Full reset - } else { - - if (hoverPoint) { - hoverPoint.onMouseOut(); - } - - if (hoverPoints) { - each(hoverPoints, function(point) { - point.setState(); - }); - } - - if (hoverSeries) { - hoverSeries.onMouseOut(); - } - - if (tooltip) { - tooltip.hide(delay); - } - - if (pointer.unDocMouseMove) { - pointer.unDocMouseMove = pointer.unDocMouseMove(); - } - - // Remove crosshairs - each(chart.axes, function(axis) { - axis.hideCrosshair(); - }); - - pointer.hoverX = chart.hoverPoints = chart.hoverPoint = null; - } - }, - - /** - * Scale series groups to a certain scale and translation. - * - * @private - */ - scaleGroups: function(attribs, clip) { - - var chart = this.chart, - seriesAttribs; - - // Scale each series - each(chart.series, function(series) { - seriesAttribs = attribs || series.getPlotBox(); // #1701 - if (series.xAxis && series.xAxis.zoomEnabled && series.group) { - series.group.attr(seriesAttribs); - if (series.markerGroup) { - series.markerGroup.attr(seriesAttribs); - series.markerGroup.clip(clip ? chart.clipRect : null); - } - if (series.dataLabelsGroup) { - series.dataLabelsGroup.attr(seriesAttribs); - } - } - }); - - // Clip - chart.clipRect.attr(clip || chart.clipBox); - }, - - /** - * Start a drag operation. - * - * @private - */ - dragStart: function(e) { - var chart = this.chart; - - // Record the start position - chart.mouseIsDown = e.type; - chart.cancelClick = false; - chart.mouseDownX = this.mouseDownX = e.chartX; - chart.mouseDownY = this.mouseDownY = e.chartY; - }, - - /** - * Perform a drag operation in response to a mousemove event while the mouse - * is down. - * - * @private - */ - drag: function(e) { - - var chart = this.chart, - chartOptions = chart.options.chart, - chartX = e.chartX, - chartY = e.chartY, - zoomHor = this.zoomHor, - zoomVert = this.zoomVert, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop, - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - clickedInside, - size, - selectionMarker = this.selectionMarker, - mouseDownX = this.mouseDownX, - mouseDownY = this.mouseDownY, - panKey = chartOptions.panKey && e[chartOptions.panKey + 'Key']; - - // If the device supports both touch and mouse (like IE11), and we are touch-dragging - // inside the plot area, don't handle the mouse event. #4339. - if (selectionMarker && selectionMarker.touch) { - return; - } - - // If the mouse is outside the plot area, adjust to cooordinates - // inside to prevent the selection marker from going outside - if (chartX < plotLeft) { - chartX = plotLeft; - } else if (chartX > plotLeft + plotWidth) { - chartX = plotLeft + plotWidth; - } - - if (chartY < plotTop) { - chartY = plotTop; - } else if (chartY > plotTop + plotHeight) { - chartY = plotTop + plotHeight; - } - - // determine if the mouse has moved more than 10px - this.hasDragged = Math.sqrt( - Math.pow(mouseDownX - chartX, 2) + - Math.pow(mouseDownY - chartY, 2) - ); - - if (this.hasDragged > 10) { - clickedInside = chart.isInsidePlot(mouseDownX - plotLeft, mouseDownY - plotTop); - - // make a selection - if (chart.hasCartesianSeries && (this.zoomX || this.zoomY) && clickedInside && !panKey) { - if (!selectionMarker) { - this.selectionMarker = selectionMarker = chart.renderer.rect( - plotLeft, - plotTop, - zoomHor ? 1 : plotWidth, - zoomVert ? 1 : plotHeight, - 0 - ) - .attr({ - - fill: chartOptions.selectionMarkerFill || color('#335cad').setOpacity(0.25).get(), - - 'class': 'highcharts-selection-marker', - 'zIndex': 7 - }) - .add(); - } - } - - // adjust the width of the selection marker - if (selectionMarker && zoomHor) { - size = chartX - mouseDownX; - selectionMarker.attr({ - width: Math.abs(size), - x: (size > 0 ? 0 : size) + mouseDownX - }); - } - // adjust the height of the selection marker - if (selectionMarker && zoomVert) { - size = chartY - mouseDownY; - selectionMarker.attr({ - height: Math.abs(size), - y: (size > 0 ? 0 : size) + mouseDownY - }); - } - - // panning - if (clickedInside && !selectionMarker && chartOptions.panning) { - chart.pan(e, chartOptions.panning); - } - } - }, - - /** - * On mouse up or touch end across the entire document, drop the selection. - * - * @private - */ - drop: function(e) { - var pointer = this, - chart = this.chart, - hasPinched = this.hasPinched; - - if (this.selectionMarker) { - var selectionData = { - originalEvent: e, // #4890 - xAxis: [], - yAxis: [] - }, - selectionBox = this.selectionMarker, - selectionLeft = selectionBox.attr ? selectionBox.attr('x') : selectionBox.x, - selectionTop = selectionBox.attr ? selectionBox.attr('y') : selectionBox.y, - selectionWidth = selectionBox.attr ? selectionBox.attr('width') : selectionBox.width, - selectionHeight = selectionBox.attr ? selectionBox.attr('height') : selectionBox.height, - runZoom; - - // a selection has been made - if (this.hasDragged || hasPinched) { - - // record each axis' min and max - each(chart.axes, function(axis) { - if (axis.zoomEnabled && defined(axis.min) && (hasPinched || pointer[{ - xAxis: 'zoomX', - yAxis: 'zoomY' - }[axis.coll]])) { // #859, #3569 - var horiz = axis.horiz, - minPixelPadding = e.type === 'touchend' ? axis.minPixelPadding : 0, // #1207, #3075 - selectionMin = axis.toValue((horiz ? selectionLeft : selectionTop) + minPixelPadding), - selectionMax = axis.toValue((horiz ? selectionLeft + selectionWidth : selectionTop + selectionHeight) - minPixelPadding); - - selectionData[axis.coll].push({ - axis: axis, - min: Math.min(selectionMin, selectionMax), // for reversed axes - max: Math.max(selectionMin, selectionMax) - }); - runZoom = true; - } - }); - if (runZoom) { - fireEvent(chart, 'selection', selectionData, function(args) { - chart.zoom(extend(args, hasPinched ? { - animation: false - } : null)); - }); - } - - } - this.selectionMarker = this.selectionMarker.destroy(); - - // Reset scaling preview - if (hasPinched) { - this.scaleGroups(); - } - } - - // Reset all - if (chart) { // it may be destroyed on mouse up - #877 - css(chart.container, { - cursor: chart._cursor - }); - chart.cancelClick = this.hasDragged > 10; // #370 - chart.mouseIsDown = this.hasDragged = this.hasPinched = false; - this.pinchDown = []; - } - }, - - onContainerMouseDown: function(e) { - - if (e.button !== 2) { - - e = this.normalize(e); - - this.zoomOption(e); - - // issue #295, dragging not always working in Firefox - if (e.preventDefault) { - e.preventDefault(); - } - - this.dragStart(e); - } - }, - - - - onDocumentMouseUp: function(e) { - if (charts[H.hoverChartIndex]) { - charts[H.hoverChartIndex].pointer.drop(e); - } - }, - - /** - * Special handler for mouse move that will hide the tooltip when the mouse - * leaves the plotarea. Issue #149 workaround. The mouseleave event does not - * always fire. - * - * @private - */ - onDocumentMouseMove: function(e) { - var chart = this.chart, - chartPosition = this.chartPosition; - - e = this.normalize(e, chartPosition); - - // If we're outside, hide the tooltip - if (chartPosition && !this.inClass(e.target, 'highcharts-tracker') && - !chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) { - this.reset(); - } - }, - - /** - * When mouse leaves the container, hide the tooltip. - * - * @private - */ - onContainerMouseLeave: function(e) { - var chart = charts[H.hoverChartIndex]; - if (chart && (e.relatedTarget || e.toElement)) { // #4886, MS Touch end fires mouseleave but with no related target - chart.pointer.reset(); - chart.pointer.chartPosition = null; // also reset the chart position, used in #149 fix - } - }, - - // The mousemove, touchmove and touchstart event handler - onContainerMouseMove: function(e) { - - var chart = this.chart; - - if (!defined(H.hoverChartIndex) || !charts[H.hoverChartIndex] || !charts[H.hoverChartIndex].mouseIsDown) { - H.hoverChartIndex = chart.index; - } - - e = this.normalize(e); - e.returnValue = false; // #2251, #3224 - - if (chart.mouseIsDown === 'mousedown') { - this.drag(e); - } - - // Show the tooltip and run mouse over events (#977) - if ((this.inClass(e.target, 'highcharts-tracker') || - chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) && !chart.openMenu) { - this.runPointActions(e); - } - }, - - /** - * Utility to detect whether an element has, or has a parent with, a specific - * class name. Used on detection of tracker objects and on deciding whether - * hovering the tooltip should cause the active series to mouse out. - * - * @param {SVGDOMElement|HTMLDOMElement} element - * The element to investigate. - * @param {String} className - * The class name to look for. - * - * @return {Boolean} - * True if either the element or one of its parents has the given - * class name. - */ - inClass: function(element, className) { - var elemClassName; - while (element) { - elemClassName = attr(element, 'class'); - if (elemClassName) { - if (elemClassName.indexOf(className) !== -1) { - return true; - } - if (elemClassName.indexOf('highcharts-container') !== -1) { - return false; - } - } - element = element.parentNode; - } - }, - - onTrackerMouseOut: function(e) { - var series = this.chart.hoverSeries, - relatedTarget = e.relatedTarget || e.toElement; - - this.isDirectTouch = false; - - if ( - series && - relatedTarget && - !series.stickyTracking && - !this.inClass(relatedTarget, 'highcharts-tooltip') && - (!this.inClass( - relatedTarget, - 'highcharts-series-' + series.index - ) || // #2499, #4465 - !this.inClass(relatedTarget, 'highcharts-tracker') // #5553 - ) - ) { - series.onMouseOut(); - } - }, - - onContainerClick: function(e) { - var chart = this.chart, - hoverPoint = chart.hoverPoint, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop; - - e = this.normalize(e); - - if (!chart.cancelClick) { - - // On tracker click, fire the series and point events. #783, #1583 - if (hoverPoint && this.inClass(e.target, 'highcharts-tracker')) { - - // the series click event - fireEvent(hoverPoint.series, 'click', extend(e, { - point: hoverPoint - })); - - // the point click event - if (chart.hoverPoint) { // it may be destroyed (#1844) - hoverPoint.firePointEvent('click', e); - } - - // When clicking outside a tracker, fire a chart event - } else { - extend(e, this.getCoordinates(e)); - - // fire a click event in the chart - if (chart.isInsidePlot(e.chartX - plotLeft, e.chartY - plotTop)) { - fireEvent(chart, 'click', e); - } - } - - - } - }, - - /** - * Set the JS DOM events on the container and document. This method should contain - * a one-to-one assignment between methods and their handlers. Any advanced logic should - * be moved to the handler reflecting the event's name. - * - * @private - */ - setDOMEvents: function() { - - var pointer = this, - container = pointer.chart.container, - ownerDoc = container.ownerDocument; - - container.onmousedown = function(e) { - pointer.onContainerMouseDown(e); - }; - container.onmousemove = function(e) { - pointer.onContainerMouseMove(e); - }; - container.onclick = function(e) { - pointer.onContainerClick(e); - }; - this.unbindContainerMouseLeave = addEvent( - container, - 'mouseleave', - pointer.onContainerMouseLeave - ); - if (!H.unbindDocumentMouseUp) { - H.unbindDocumentMouseUp = addEvent( - ownerDoc, - 'mouseup', - pointer.onDocumentMouseUp - ); - } - if (H.hasTouch) { - container.ontouchstart = function(e) { - pointer.onContainerTouchStart(e); - }; - container.ontouchmove = function(e) { - pointer.onContainerTouchMove(e); - }; - if (!H.unbindDocumentTouchEnd) { - H.unbindDocumentTouchEnd = addEvent( - ownerDoc, - 'touchend', - pointer.onDocumentTouchEnd - ); - } - } - - }, - - /** - * Destroys the Pointer object and disconnects DOM events. - */ - destroy: function() { - var pointer = this; - - if (pointer.unDocMouseMove) { - pointer.unDocMouseMove(); - } - - this.unbindContainerMouseLeave(); - - if (!H.chartCount) { - if (H.unbindDocumentMouseUp) { - H.unbindDocumentMouseUp = H.unbindDocumentMouseUp(); - } - if (H.unbindDocumentTouchEnd) { - H.unbindDocumentTouchEnd = H.unbindDocumentTouchEnd(); - } - } - - // memory and CPU leak - clearInterval(pointer.tooltipTimeout); - - H.objectEach(pointer, function(val, prop) { - pointer[prop] = null; - }); - } - }; - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var charts = H.charts, - each = H.each, - extend = H.extend, - map = H.map, - noop = H.noop, - pick = H.pick, - Pointer = H.Pointer; - - /* Support for touch devices */ - extend(Pointer.prototype, /** @lends Pointer.prototype */ { - - /** - * Run translation operations - */ - pinchTranslate: function( - pinchDown, - touches, - transform, - selectionMarker, - clip, - lastValidTouch - ) { - if (this.zoomHor) { - this.pinchTranslateDirection( - true, - pinchDown, - touches, - transform, - selectionMarker, - clip, - lastValidTouch - ); - } - if (this.zoomVert) { - this.pinchTranslateDirection( - false, - pinchDown, - touches, - transform, - selectionMarker, - clip, - lastValidTouch - ); - } - }, - - /** - * Run translation operations for each direction (horizontal and vertical) - * independently - */ - pinchTranslateDirection: function(horiz, pinchDown, touches, transform, - selectionMarker, clip, lastValidTouch, forcedScale) { - var chart = this.chart, - xy = horiz ? 'x' : 'y', - XY = horiz ? 'X' : 'Y', - sChartXY = 'chart' + XY, - wh = horiz ? 'width' : 'height', - plotLeftTop = chart['plot' + (horiz ? 'Left' : 'Top')], - selectionWH, - selectionXY, - clipXY, - scale = forcedScale || 1, - inverted = chart.inverted, - bounds = chart.bounds[horiz ? 'h' : 'v'], - singleTouch = pinchDown.length === 1, - touch0Start = pinchDown[0][sChartXY], - touch0Now = touches[0][sChartXY], - touch1Start = !singleTouch && pinchDown[1][sChartXY], - touch1Now = !singleTouch && touches[1][sChartXY], - outOfBounds, - transformScale, - scaleKey, - setScale = function() { - // Don't zoom if fingers are too close on this axis - if (!singleTouch && Math.abs(touch0Start - touch1Start) > 20) { - scale = forcedScale || - Math.abs(touch0Now - touch1Now) / - Math.abs(touch0Start - touch1Start); - } - - clipXY = ((plotLeftTop - touch0Now) / scale) + touch0Start; - selectionWH = chart['plot' + (horiz ? 'Width' : 'Height')] / - scale; - }; - - // Set the scale, first pass - setScale(); - - // The clip position (x or y) is altered if out of bounds, the selection - // position is not - selectionXY = clipXY; - - // Out of bounds - if (selectionXY < bounds.min) { - selectionXY = bounds.min; - outOfBounds = true; - } else if (selectionXY + selectionWH > bounds.max) { - selectionXY = bounds.max - selectionWH; - outOfBounds = true; - } - - // Is the chart dragged off its bounds, determined by dataMin and - // dataMax? - if (outOfBounds) { - - // Modify the touchNow position in order to create an elastic drag - // movement. This indicates to the user that the chart is responsive - // but can't be dragged further. - touch0Now -= 0.8 * (touch0Now - lastValidTouch[xy][0]); - if (!singleTouch) { - touch1Now -= 0.8 * (touch1Now - lastValidTouch[xy][1]); - } - - // Set the scale, second pass to adapt to the modified touchNow - // positions - setScale(); - - } else { - lastValidTouch[xy] = [touch0Now, touch1Now]; - } - - // Set geometry for clipping, selection and transformation - if (!inverted) { - clip[xy] = clipXY - plotLeftTop; - clip[wh] = selectionWH; - } - scaleKey = inverted ? (horiz ? 'scaleY' : 'scaleX') : 'scale' + XY; - transformScale = inverted ? 1 / scale : scale; - - selectionMarker[wh] = selectionWH; - selectionMarker[xy] = selectionXY; - transform[scaleKey] = scale; - transform['translate' + XY] = (transformScale * plotLeftTop) + - (touch0Now - (transformScale * touch0Start)); - }, - - /** - * Handle touch events with two touches - */ - pinch: function(e) { - - var self = this, - chart = self.chart, - pinchDown = self.pinchDown, - touches = e.touches, - touchesLength = touches.length, - lastValidTouch = self.lastValidTouch, - hasZoom = self.hasZoom, - selectionMarker = self.selectionMarker, - transform = {}, - fireClickEvent = touchesLength === 1 && - ((self.inClass(e.target, 'highcharts-tracker') && - chart.runTrackerClick) || self.runChartClick), - clip = {}; - - // Don't initiate panning until the user has pinched. This prevents us - // from blocking page scrolling as users scroll down a long page - // (#4210). - if (touchesLength > 1) { - self.initiated = true; - } - - // On touch devices, only proceed to trigger click if a handler is - // defined - if (hasZoom && self.initiated && !fireClickEvent) { - e.preventDefault(); - } - - // Normalize each touch - map(touches, function(e) { - return self.normalize(e); - }); - - // Register the touch start position - if (e.type === 'touchstart') { - each(touches, function(e, i) { - pinchDown[i] = { - chartX: e.chartX, - chartY: e.chartY - }; - }); - lastValidTouch.x = [pinchDown[0].chartX, pinchDown[1] && - pinchDown[1].chartX - ]; - lastValidTouch.y = [pinchDown[0].chartY, pinchDown[1] && - pinchDown[1].chartY - ]; - - // Identify the data bounds in pixels - each(chart.axes, function(axis) { - if (axis.zoomEnabled) { - var bounds = chart.bounds[axis.horiz ? 'h' : 'v'], - minPixelPadding = axis.minPixelPadding, - min = axis.toPixels( - pick(axis.options.min, axis.dataMin) - ), - max = axis.toPixels( - pick(axis.options.max, axis.dataMax) - ), - absMin = Math.min(min, max), - absMax = Math.max(min, max); - - // Store the bounds for use in the touchmove handler - bounds.min = Math.min(axis.pos, absMin - minPixelPadding); - bounds.max = Math.max( - axis.pos + axis.len, - absMax + minPixelPadding - ); - } - }); - self.res = true; // reset on next move - - // Optionally move the tooltip on touchmove - } else if (self.followTouchMove && touchesLength === 1) { - this.runPointActions(self.normalize(e)); - - // Event type is touchmove, handle panning and pinching - } else if (pinchDown.length) { // can be 0 when releasing, if touchend - // fires first - - - // Set the marker - if (!selectionMarker) { - self.selectionMarker = selectionMarker = extend({ - destroy: noop, - touch: true - }, chart.plotBox); - } - - self.pinchTranslate( - pinchDown, - touches, - transform, - selectionMarker, - clip, - lastValidTouch - ); - - self.hasPinched = hasZoom; - - // Scale and translate the groups to provide visual feedback during - // pinching - self.scaleGroups(transform, clip); - - if (self.res) { - self.res = false; - this.reset(false, 0); - } - } - }, - - /** - * General touch handler shared by touchstart and touchmove. - */ - touch: function(e, start) { - var chart = this.chart, - hasMoved, - pinchDown, - isInside; - - if (chart.index !== H.hoverChartIndex) { - this.onContainerMouseLeave({ - relatedTarget: true - }); - } - H.hoverChartIndex = chart.index; - - if (e.touches.length === 1) { - - e = this.normalize(e); - - isInside = chart.isInsidePlot( - e.chartX - chart.plotLeft, - e.chartY - chart.plotTop - ); - if (isInside && !chart.openMenu) { - - // Run mouse events and display tooltip etc - if (start) { - this.runPointActions(e); - } - - // Android fires touchmove events after the touchstart even if - // the finger hasn't moved, or moved only a pixel or two. In iOS - // however, the touchmove doesn't fire unless the finger moves - // more than ~4px. So we emulate this behaviour in Android by - // checking how much it moved, and cancelling on small - // distances. #3450. - if (e.type === 'touchmove') { - pinchDown = this.pinchDown; - hasMoved = pinchDown[0] ? Math.sqrt( // #5266 - Math.pow(pinchDown[0].chartX - e.chartX, 2) + - Math.pow(pinchDown[0].chartY - e.chartY, 2) - ) >= 4 : false; - } - - if (pick(hasMoved, true)) { - this.pinch(e); - } - - } else if (start) { - // Hide the tooltip on touching outside the plot area (#1203) - this.reset(); - } - - } else if (e.touches.length === 2) { - this.pinch(e); - } - }, - - onContainerTouchStart: function(e) { - this.zoomOption(e); - this.touch(e, true); - }, - - onContainerTouchMove: function(e) { - this.touch(e); - }, - - onDocumentTouchEnd: function(e) { - if (charts[H.hoverChartIndex]) { - charts[H.hoverChartIndex].pointer.drop(e); - } - } - - }); - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var addEvent = H.addEvent, - charts = H.charts, - css = H.css, - doc = H.doc, - extend = H.extend, - hasTouch = H.hasTouch, - noop = H.noop, - Pointer = H.Pointer, - removeEvent = H.removeEvent, - win = H.win, - wrap = H.wrap; - - if (!hasTouch && (win.PointerEvent || win.MSPointerEvent)) { - - // The touches object keeps track of the points being touched at all times - var touches = {}, - hasPointerEvent = !!win.PointerEvent, - getWebkitTouches = function() { - var fake = []; - fake.item = function(i) { - return this[i]; - }; - H.objectEach(touches, function(touch) { - fake.push({ - pageX: touch.pageX, - pageY: touch.pageY, - target: touch.target - }); - }); - return fake; - }, - translateMSPointer = function(e, method, wktype, func) { - var p; - if ((e.pointerType === 'touch' || e.pointerType === e.MSPOINTER_TYPE_TOUCH) && charts[H.hoverChartIndex]) { - func(e); - p = charts[H.hoverChartIndex].pointer; - p[method]({ - type: wktype, - target: e.currentTarget, - preventDefault: noop, - touches: getWebkitTouches() - }); - } - }; - - /** - * Extend the Pointer prototype with methods for each event handler and more - */ - extend(Pointer.prototype, /** @lends Pointer.prototype */ { - onContainerPointerDown: function(e) { - translateMSPointer(e, 'onContainerTouchStart', 'touchstart', function(e) { - touches[e.pointerId] = { - pageX: e.pageX, - pageY: e.pageY, - target: e.currentTarget - }; - }); - }, - onContainerPointerMove: function(e) { - translateMSPointer(e, 'onContainerTouchMove', 'touchmove', function(e) { - touches[e.pointerId] = { - pageX: e.pageX, - pageY: e.pageY - }; - if (!touches[e.pointerId].target) { - touches[e.pointerId].target = e.currentTarget; - } - }); - }, - onDocumentPointerUp: function(e) { - translateMSPointer(e, 'onDocumentTouchEnd', 'touchend', function(e) { - delete touches[e.pointerId]; - }); - }, - - /** - * Add or remove the MS Pointer specific events - */ - batchMSEvents: function(fn) { - fn(this.chart.container, hasPointerEvent ? 'pointerdown' : 'MSPointerDown', this.onContainerPointerDown); - fn(this.chart.container, hasPointerEvent ? 'pointermove' : 'MSPointerMove', this.onContainerPointerMove); - fn(doc, hasPointerEvent ? 'pointerup' : 'MSPointerUp', this.onDocumentPointerUp); - } - }); - - // Disable default IE actions for pinch and such on chart element - wrap(Pointer.prototype, 'init', function(proceed, chart, options) { - proceed.call(this, chart, options); - if (this.hasZoom) { // #4014 - css(chart.container, { - '-ms-touch-action': 'none', - 'touch-action': 'none' - }); - } - }); - - // Add IE specific touch events to chart - wrap(Pointer.prototype, 'setDOMEvents', function(proceed) { - proceed.apply(this); - if (this.hasZoom || this.followTouchMove) { - this.batchMSEvents(addEvent); - } - }); - // Destroy MS events also - wrap(Pointer.prototype, 'destroy', function(proceed) { - this.batchMSEvents(removeEvent); - proceed.call(this); - }); - } - - }(Highcharts)); - (function(Highcharts) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var H = Highcharts, - - addEvent = H.addEvent, - css = H.css, - discardElement = H.discardElement, - defined = H.defined, - each = H.each, - isFirefox = H.isFirefox, - marginNames = H.marginNames, - merge = H.merge, - pick = H.pick, - setAnimation = H.setAnimation, - stableSort = H.stableSort, - win = H.win, - wrap = H.wrap; - - /** - * The overview of the chart's series. The legend object is instanciated - * internally in the chart constructor, and available from `chart.legend`. Each - * chart has only one legend. - * - * @class - */ - Highcharts.Legend = function(chart, options) { - this.init(chart, options); - }; - - Highcharts.Legend.prototype = { - - /** - * Initialize the legend. - * - * @private - */ - init: function(chart, options) { - - this.chart = chart; - - this.setOptions(options); - - if (options.enabled) { - - // Render it - this.render(); - - // move checkboxes - addEvent(this.chart, 'endResize', function() { - this.legend.positionCheckboxes(); - }); - } - }, - - setOptions: function(options) { - - var padding = pick(options.padding, 8); - - this.options = options; - - - this.itemStyle = options.itemStyle; - this.itemHiddenStyle = merge(this.itemStyle, options.itemHiddenStyle); - - this.itemMarginTop = options.itemMarginTop || 0; - this.padding = padding; - this.initialItemY = padding - 5; // 5 is pixels above the text - this.maxItemWidth = 0; - this.itemHeight = 0; - this.symbolWidth = pick(options.symbolWidth, 16); - this.pages = []; - - }, - - /** - * Update the legend with new options. Equivalent to running `chart.update` - * with a legend configuration option. - * @param {LegendOptions} options - * Legend options. - * @param {Boolean} [redraw=true] - * Whether to redraw the chart. - * - * @sample highcharts/legend/legend-update/ - * Legend update - */ - update: function(options, redraw) { - var chart = this.chart; - - this.setOptions(merge(true, this.options, options)); - this.destroy(); - chart.isDirtyLegend = chart.isDirtyBox = true; - if (pick(redraw, true)) { - chart.redraw(); - } - }, - - /** - * Set the colors for the legend item. - * - * @private - * @param {Series|Point} item - * A Series or Point instance - * @param {Boolean} visible - * Dimmed or colored - */ - colorizeItem: function(item, visible) { - item.legendGroup[visible ? 'removeClass' : 'addClass']( - 'highcharts-legend-item-hidden' - ); - - - var legend = this, - options = legend.options, - legendItem = item.legendItem, - legendLine = item.legendLine, - legendSymbol = item.legendSymbol, - hiddenColor = legend.itemHiddenStyle.color, - textColor = visible ? options.itemStyle.color : hiddenColor, - symbolColor = visible ? (item.color || hiddenColor) : hiddenColor, - markerOptions = item.options && item.options.marker, - symbolAttr = { - fill: symbolColor - }; - - if (legendItem) { - legendItem.css({ - fill: textColor, - color: textColor // #1553, oldIE - }); - } - if (legendLine) { - legendLine.attr({ - stroke: symbolColor - }); - } - - if (legendSymbol) { - - // Apply marker options - if (markerOptions && legendSymbol.isMarker) { // #585 - symbolAttr = item.pointAttribs(); - if (!visible) { - symbolAttr.stroke = symbolAttr.fill = hiddenColor; // #6769 - } - } - - legendSymbol.attr(symbolAttr); - } - - }, - - /** - * Position the legend item. - * - * @private - * @param {Series|Point} item - * The item to position - */ - positionItem: function(item) { - var legend = this, - options = legend.options, - symbolPadding = options.symbolPadding, - ltr = !options.rtl, - legendItemPos = item._legendItemPos, - itemX = legendItemPos[0], - itemY = legendItemPos[1], - checkbox = item.checkbox, - legendGroup = item.legendGroup; - - if (legendGroup && legendGroup.element) { - legendGroup.translate( - ltr ? - itemX : - legend.legendWidth - itemX - 2 * symbolPadding - 4, - itemY - ); - } - - if (checkbox) { - checkbox.x = itemX; - checkbox.y = itemY; - } - }, - - /** - * Destroy a single legend item, used internally on removing series items. - * - * @param {Series|Point} item - * The item to remove - */ - destroyItem: function(item) { - var checkbox = item.checkbox; - - // destroy SVG elements - each( - ['legendItem', 'legendLine', 'legendSymbol', 'legendGroup'], - function(key) { - if (item[key]) { - item[key] = item[key].destroy(); - } - } - ); - - if (checkbox) { - discardElement(item.checkbox); - } - }, - - /** - * Destroy the legend. Used internally. To reflow objects, `chart.redraw` - * must be called after destruction. - */ - destroy: function() { - function destroyItems(key) { - if (this[key]) { - this[key] = this[key].destroy(); - } - } - - // Destroy items - each(this.getAllItems(), function(item) { - each(['legendItem', 'legendGroup'], destroyItems, item); - }); - - // Destroy legend elements - each([ - 'clipRect', - 'up', - 'down', - 'pager', - 'nav', - 'box', - 'title', - 'group' - ], destroyItems, this); - this.display = null; // Reset in .render on update. - }, - - /** - * Position the checkboxes after the width is determined. - * - * @private - */ - positionCheckboxes: function() { - var alignAttr = this.group && this.group.alignAttr, - translateY, - clipHeight = this.clipHeight || this.legendHeight, - titleHeight = this.titleHeight; - - if (alignAttr) { - translateY = alignAttr.translateY; - each(this.allItems, function(item) { - var checkbox = item.checkbox, - top; - - if (checkbox) { - top = translateY + titleHeight + checkbox.y + - (this.scrollOffset || 0) + 3; - css(checkbox, { - left: (alignAttr.translateX + item.checkboxOffset + - checkbox.x - 20) + 'px', - top: top + 'px', - display: top > translateY - 6 && top < translateY + - clipHeight - 6 ? '' : 'none' - }); - } - }, this); - } - }, - - /** - * Render the legend title on top of the legend. - * - * @private - */ - renderTitle: function() { - var options = this.options, - padding = this.padding, - titleOptions = options.title, - titleHeight = 0, - bBox; - - if (titleOptions.text) { - if (!this.title) { - this.title = this.chart.renderer.label( - titleOptions.text, - padding - 3, - padding - 4, - null, - null, - null, - options.useHTML, - null, - 'legend-title' - ) - .attr({ - zIndex: 1 - }) - - .css(titleOptions.style) - - .add(this.group); - } - bBox = this.title.getBBox(); - titleHeight = bBox.height; - this.offsetWidth = bBox.width; // #1717 - this.contentGroup.attr({ - translateY: titleHeight - }); - } - this.titleHeight = titleHeight; - }, - - /** - * Set the legend item text. - * - * @param {Series|Point} item - * The item for which to update the text in the legend. - */ - setText: function(item) { - var options = this.options; - item.legendItem.attr({ - text: options.labelFormat ? - H.format(options.labelFormat, item) : options.labelFormatter.call(item) - }); - }, - - /** - * Render a single specific legend item. Called internally from the `render` - * function. - * - * @private - * @param {Series|Point} item - * The item to render. - */ - renderItem: function(item) { - var legend = this, - chart = legend.chart, - renderer = chart.renderer, - options = legend.options, - horizontal = options.layout === 'horizontal', - symbolWidth = legend.symbolWidth, - symbolPadding = options.symbolPadding, - - itemStyle = legend.itemStyle, - itemHiddenStyle = legend.itemHiddenStyle, - - padding = legend.padding, - itemDistance = horizontal ? pick(options.itemDistance, 20) : 0, - ltr = !options.rtl, - itemHeight, - widthOption = options.width, - itemMarginBottom = options.itemMarginBottom || 0, - itemMarginTop = legend.itemMarginTop, - bBox, - itemWidth, - li = item.legendItem, - isSeries = !item.series, - series = !isSeries && item.series.drawLegendSymbol ? - item.series : - item, - seriesOptions = series.options, - showCheckbox = legend.createCheckboxForItem && - seriesOptions && - seriesOptions.showCheckbox, - // full width minus text width - itemExtraWidth = symbolWidth + symbolPadding + itemDistance + - (showCheckbox ? 20 : 0), - useHTML = options.useHTML, - fontSize = 12, - itemClassName = item.options.className; - - if (!li) { // generate it once, later move it - - // Generate the group box, a group to hold the symbol and text. Text - // is to be appended in Legend class. - item.legendGroup = renderer.g('legend-item') - .addClass( - 'highcharts-' + series.type + '-series ' + - 'highcharts-color-' + item.colorIndex + - (itemClassName ? ' ' + itemClassName : '') + - (isSeries ? ' highcharts-series-' + item.index : '') - ) - .attr({ - zIndex: 1 - }) - .add(legend.scrollGroup); - - // Generate the list item text and add it to the group - item.legendItem = li = renderer.text( - '', - ltr ? symbolWidth + symbolPadding : -symbolPadding, - legend.baseline || 0, - useHTML - ) - - // merge to prevent modifying original (#1021) - .css(merge(item.visible ? itemStyle : itemHiddenStyle)) - - .attr({ - align: ltr ? 'left' : 'right', - zIndex: 2 - }) - .add(item.legendGroup); - - // Get the baseline for the first item - the font size is equal for - // all - if (!legend.baseline) { - - fontSize = itemStyle.fontSize; - - legend.fontMetrics = renderer.fontMetrics( - fontSize, - li - ); - legend.baseline = legend.fontMetrics.f + 3 + itemMarginTop; - li.attr('y', legend.baseline); - } - - // Draw the legend symbol inside the group box - legend.symbolHeight = options.symbolHeight || legend.fontMetrics.f; - series.drawLegendSymbol(legend, item); - - if (legend.setItemEvents) { - legend.setItemEvents(item, li, useHTML); - } - - // add the HTML checkbox on top - if (showCheckbox) { - legend.createCheckboxForItem(item); - } - } - - // Colorize the items - legend.colorizeItem(item, item.visible); - - // Take care of max width and text overflow (#6659) - - if (!itemStyle.width) { - - li.css({ - width: ( - options.itemWidth || - options.width || - chart.spacingBox.width - ) - itemExtraWidth - }); - - } - - - // Always update the text - legend.setText(item); - - // calculate the positions for the next line - bBox = li.getBBox(); - - itemWidth = item.checkboxOffset = - options.itemWidth || - item.legendItemWidth || - bBox.width + itemExtraWidth; - legend.itemHeight = itemHeight = Math.round( - item.legendItemHeight || bBox.height || legend.symbolHeight - ); - - // If the item exceeds the width, start a new line - if ( - horizontal && - legend.itemX - padding + itemWidth > ( - widthOption || ( - chart.spacingBox.width - 2 * padding - options.x - ) - ) - ) { - legend.itemX = padding; - legend.itemY += itemMarginTop + legend.lastLineHeight + - itemMarginBottom; - legend.lastLineHeight = 0; // reset for next line (#915, #3976) - } - - // If the item exceeds the height, start a new column - /* - if (!horizontal && legend.itemY + options.y + - itemHeight > chart.chartHeight - spacingTop - spacingBottom) { - legend.itemY = legend.initialItemY; - legend.itemX += legend.maxItemWidth; - legend.maxItemWidth = 0; - } - */ - - // Set the edge positions - legend.maxItemWidth = Math.max(legend.maxItemWidth, itemWidth); - legend.lastItemY = itemMarginTop + legend.itemY + itemMarginBottom; - legend.lastLineHeight = Math.max( // #915 - itemHeight, - legend.lastLineHeight - ); - - // cache the position of the newly generated or reordered items - item._legendItemPos = [legend.itemX, legend.itemY]; - - // advance - if (horizontal) { - legend.itemX += itemWidth; - - } else { - legend.itemY += itemMarginTop + itemHeight + itemMarginBottom; - legend.lastLineHeight = itemHeight; - } - - // the width of the widest item - legend.offsetWidth = widthOption || Math.max( - ( - horizontal ? legend.itemX - padding - (item.checkbox ? - // decrease by itemDistance only when no checkbox #4853 - 0 : - itemDistance - ) : itemWidth - ) + padding, - legend.offsetWidth - ); - }, - - /** - * Get all items, which is one item per series for most series and one - * item per point for pie series and its derivatives. - * - * @return {Array.} - * The current items in the legend. - */ - getAllItems: function() { - var allItems = []; - each(this.chart.series, function(series) { - var seriesOptions = series && series.options; - - // Handle showInLegend. If the series is linked to another series, - // defaults to false. - if (series && pick( - seriesOptions.showInLegend, !defined(seriesOptions.linkedTo) ? undefined : false, true - )) { - - // Use points or series for the legend item depending on - // legendType - allItems = allItems.concat( - series.legendItems || - ( - seriesOptions.legendType === 'point' ? - series.data : - series - ) - ); - } - }); - return allItems; - }, - - /** - * Get a short, three letter string reflecting the alignment and layout. - * - * @private - * @return {String} The alignment, empty string if floating - */ - getAlignment: function() { - var options = this.options; - - // Use the first letter of each alignment option in order to detect - // the side. (#4189 - use charAt(x) notation instead of [x] for IE7) - return options.floating ? '' : ( - options.align.charAt(0) + - options.verticalAlign.charAt(0) + - options.layout.charAt(0) - ); - }, - - /** - * Adjust the chart margins by reserving space for the legend on only one - * side of the chart. If the position is set to a corner, top or bottom is - * reserved for horizontal legends and left or right for vertical ones. - * - * @private - */ - adjustMargins: function(margin, spacing) { - var chart = this.chart, - options = this.options, - alignment = this.getAlignment(); - - if (alignment) { - - each([ - /(lth|ct|rth)/, - /(rtv|rm|rbv)/, - /(rbh|cb|lbh)/, - /(lbv|lm|ltv)/ - ], function(alignments, side) { - if (alignments.test(alignment) && !defined(margin[side])) { - - // Now we have detected on which side of the chart we should - // reserve space for the legend - chart[marginNames[side]] = Math.max( - chart[marginNames[side]], - ( - chart.legend[ - (side + 1) % 2 ? 'legendHeight' : 'legendWidth' - ] + [1, -1, -1, 1][side] * options[ - (side % 2) ? 'x' : 'y' - ] + - pick(options.margin, 12) + - spacing[side] + - ( - side === 0 ? - chart.titleOffset + - chart.options.title.margin : - 0 - ) // #7428 - ) - ); - } - }); - } - }, - - /** - * Render the legend. This method can be called both before and after - * `chart.render`. If called after, it will only rearrange items instead - * of creating new ones. Called internally on initial render and after - * redraws. - */ - render: function() { - var legend = this, - chart = legend.chart, - renderer = chart.renderer, - legendGroup = legend.group, - allItems, - display, - legendWidth, - legendHeight, - box = legend.box, - options = legend.options, - padding = legend.padding, - alignTo; - - legend.itemX = padding; - legend.itemY = legend.initialItemY; - legend.offsetWidth = 0; - legend.lastItemY = 0; - - if (!legendGroup) { - legend.group = legendGroup = renderer.g('legend') - .attr({ - zIndex: 7 - }) - .add(); - legend.contentGroup = renderer.g() - .attr({ - zIndex: 1 - }) // above background - .add(legendGroup); - legend.scrollGroup = renderer.g() - .add(legend.contentGroup); - } - - legend.renderTitle(); - - // add each series or point - allItems = legend.getAllItems(); - - // sort by legendIndex - stableSort(allItems, function(a, b) { - return ((a.options && a.options.legendIndex) || 0) - - ((b.options && b.options.legendIndex) || 0); - }); - - // reversed legend - if (options.reversed) { - allItems.reverse(); - } - - legend.allItems = allItems; - legend.display = display = !!allItems.length; - - // render the items - legend.lastLineHeight = 0; - each(allItems, function(item) { - legend.renderItem(item); - }); - - // Get the box - legendWidth = (options.width || legend.offsetWidth) + padding; - legendHeight = legend.lastItemY + legend.lastLineHeight + - legend.titleHeight; - legendHeight = legend.handleOverflow(legendHeight); - legendHeight += padding; - - // Draw the border and/or background - if (!box) { - legend.box = box = renderer.rect() - .addClass('highcharts-legend-box') - .attr({ - r: options.borderRadius - }) - .add(legendGroup); - box.isNew = true; - } - - - // Presentational - box - .attr({ - stroke: options.borderColor, - 'stroke-width': options.borderWidth || 0, - fill: options.backgroundColor || 'none' - }) - .shadow(options.shadow); - - - if (legendWidth > 0 && legendHeight > 0) { - box[box.isNew ? 'attr' : 'animate']( - box.crisp.call({}, { // #7260 - x: 0, - y: 0, - width: legendWidth, - height: legendHeight - }, box.strokeWidth()) - ); - box.isNew = false; - } - - // hide the border if no items - box[display ? 'show' : 'hide'](); - - - - legend.legendWidth = legendWidth; - legend.legendHeight = legendHeight; - - // Now that the legend width and height are established, put the items - // in the final position - each(allItems, function(item) { - legend.positionItem(item); - }); - - if (display) { - // If aligning to the top and the layout is horizontal, adjust for - // the title (#7428) - alignTo = chart.spacingBox; - if (/(lth|ct|rth)/.test(legend.getAlignment())) { - alignTo = merge(alignTo, { - y: alignTo.y + chart.titleOffset + - chart.options.title.margin - }); - } - - legendGroup.align(merge(options, { - width: legendWidth, - height: legendHeight - }), true, alignTo); - } - - if (!chart.isResizing) { - this.positionCheckboxes(); - } - }, - - /** - * Set up the overflow handling by adding navigation with up and down arrows - * below the legend. - * - * @private - */ - handleOverflow: function(legendHeight) { - var legend = this, - chart = this.chart, - renderer = chart.renderer, - options = this.options, - optionsY = options.y, - alignTop = options.verticalAlign === 'top', - padding = this.padding, - spaceHeight = chart.spacingBox.height + - (alignTop ? -optionsY : optionsY) - padding, - maxHeight = options.maxHeight, - clipHeight, - clipRect = this.clipRect, - navOptions = options.navigation, - animation = pick(navOptions.animation, true), - arrowSize = navOptions.arrowSize || 12, - nav = this.nav, - pages = this.pages, - lastY, - allItems = this.allItems, - clipToHeight = function(height) { - if (typeof height === 'number') { - clipRect.attr({ - height: height - }); - } else if (clipRect) { // Reset (#5912) - legend.clipRect = clipRect.destroy(); - legend.contentGroup.clip(); - } - - // useHTML - if (legend.contentGroup.div) { - legend.contentGroup.div.style.clip = height ? - 'rect(' + padding + 'px,9999px,' + - (padding + height) + 'px,0)' : - 'auto'; - } - }; - - - // Adjust the height - if ( - options.layout === 'horizontal' && - options.verticalAlign !== 'middle' && - !options.floating - ) { - spaceHeight /= 2; - } - if (maxHeight) { - spaceHeight = Math.min(spaceHeight, maxHeight); - } - - // Reset the legend height and adjust the clipping rectangle - pages.length = 0; - if (legendHeight > spaceHeight && navOptions.enabled !== false) { - - this.clipHeight = clipHeight = - Math.max(spaceHeight - 20 - this.titleHeight - padding, 0); - this.currentPage = pick(this.currentPage, 1); - this.fullHeight = legendHeight; - - // Fill pages with Y positions so that the top of each a legend item - // defines the scroll top for each page (#2098) - each(allItems, function(item, i) { - var y = item._legendItemPos[1], - h = Math.round(item.legendItem.getBBox().height), - len = pages.length; - - if (!len || (y - pages[len - 1] > clipHeight && - (lastY || y) !== pages[len - 1])) { - pages.push(lastY || y); - len++; - } - - // Keep track of which page each item is on - item.pageIx = len - 1; - if (lastY) { - allItems[i - 1].pageIx = len - 1; - } - - if (i === allItems.length - 1 && - y + h - pages[len - 1] > clipHeight) { - pages.push(y); - item.pageIx = len; - } - if (y !== lastY) { - lastY = y; - } - }); - - // Only apply clipping if needed. Clipping causes blurred legend in - // PDF export (#1787) - if (!clipRect) { - clipRect = legend.clipRect = - renderer.clipRect(0, padding, 9999, 0); - legend.contentGroup.clip(clipRect); - } - - clipToHeight(clipHeight); - - // Add navigation elements - if (!nav) { - this.nav = nav = renderer.g() - .attr({ - zIndex: 1 - }) - .add(this.group); - - this.up = renderer - .symbol( - 'triangle', - 0, - 0, - arrowSize, - arrowSize - ) - .on('click', function() { - legend.scroll(-1, animation); - }) - .add(nav); - - this.pager = renderer.text('', 15, 10) - .addClass('highcharts-legend-navigation') - - .css(navOptions.style) - - .add(nav); - - this.down = renderer - .symbol( - 'triangle-down', - 0, - 0, - arrowSize, - arrowSize - ) - .on('click', function() { - legend.scroll(1, animation); - }) - .add(nav); - } - - // Set initial position - legend.scroll(0); - - legendHeight = spaceHeight; - - // Reset - } else if (nav) { - clipToHeight(); - this.nav = nav.destroy(); // #6322 - this.scrollGroup.attr({ - translateY: 1 - }); - this.clipHeight = 0; // #1379 - } - - return legendHeight; - }, - - /** - * Scroll the legend by a number of pages. - * @param {Number} scrollBy - * The number of pages to scroll. - * @param {AnimationOptions} animation - * Whether and how to apply animation. - */ - scroll: function(scrollBy, animation) { - var pages = this.pages, - pageCount = pages.length, - currentPage = this.currentPage + scrollBy, - clipHeight = this.clipHeight, - navOptions = this.options.navigation, - pager = this.pager, - padding = this.padding; - - // When resizing while looking at the last page - if (currentPage > pageCount) { - currentPage = pageCount; - } - - if (currentPage > 0) { - - if (animation !== undefined) { - setAnimation(animation, this.chart); - } - - this.nav.attr({ - translateX: padding, - translateY: clipHeight + this.padding + 7 + this.titleHeight, - visibility: 'visible' - }); - this.up.attr({ - 'class': currentPage === 1 ? - 'highcharts-legend-nav-inactive' : 'highcharts-legend-nav-active' - }); - pager.attr({ - text: currentPage + '/' + pageCount - }); - this.down.attr({ - 'x': 18 + this.pager.getBBox().width, // adjust to text width - 'class': currentPage === pageCount ? - 'highcharts-legend-nav-inactive' : 'highcharts-legend-nav-active' - }); - - - this.up - .attr({ - fill: currentPage === 1 ? - navOptions.inactiveColor : navOptions.activeColor - }) - .css({ - cursor: currentPage === 1 ? 'default' : 'pointer' - }); - this.down - .attr({ - fill: currentPage === pageCount ? - navOptions.inactiveColor : navOptions.activeColor - }) - .css({ - cursor: currentPage === pageCount ? 'default' : 'pointer' - }); - - - this.scrollOffset = -pages[currentPage - 1] + this.initialItemY; - - this.scrollGroup.animate({ - translateY: this.scrollOffset - }); - - this.currentPage = currentPage; - this.positionCheckboxes(); - } - - } - - }; - - /* - * LegendSymbolMixin - */ - - H.LegendSymbolMixin = { - - /** - * Get the series' symbol in the legend - * - * @param {Object} legend The legend object - * @param {Object} item The series (this) or point - */ - drawRectangle: function(legend, item) { - var options = legend.options, - symbolHeight = legend.symbolHeight, - square = options.squareSymbol, - symbolWidth = square ? symbolHeight : legend.symbolWidth; - - item.legendSymbol = this.chart.renderer.rect( - square ? (legend.symbolWidth - symbolHeight) / 2 : 0, - legend.baseline - symbolHeight + 1, // #3988 - symbolWidth, - symbolHeight, - pick(legend.options.symbolRadius, symbolHeight / 2) - ) - .addClass('highcharts-point') - .attr({ - zIndex: 3 - }).add(item.legendGroup); - - }, - - /** - * Get the series' symbol in the legend. This method should be overridable - * to create custom symbols through - * Highcharts.seriesTypes[type].prototype.drawLegendSymbols. - * - * @param {Object} legend The legend object - */ - drawLineMarker: function(legend) { - - var options = this.options, - markerOptions = options.marker, - radius, - legendSymbol, - symbolWidth = legend.symbolWidth, - symbolHeight = legend.symbolHeight, - generalRadius = symbolHeight / 2, - renderer = this.chart.renderer, - legendItemGroup = this.legendGroup, - verticalCenter = legend.baseline - - Math.round(legend.fontMetrics.b * 0.3), - attr = {}; - - // Draw the line - - attr = { - 'stroke-width': options.lineWidth || 0 - }; - if (options.dashStyle) { - attr.dashstyle = options.dashStyle; - } - - - this.legendLine = renderer.path([ - 'M', - 0, - verticalCenter, - 'L', - symbolWidth, - verticalCenter - ]) - .addClass('highcharts-graph') - .attr(attr) - .add(legendItemGroup); - - // Draw the marker - if (markerOptions && markerOptions.enabled !== false) { - - // Do not allow the marker to be larger than the symbolHeight - radius = Math.min( - pick(markerOptions.radius, generalRadius), - generalRadius - ); - - // Restrict symbol markers size - if (this.symbol.indexOf('url') === 0) { - markerOptions = merge(markerOptions, { - width: symbolHeight, - height: symbolHeight - }); - radius = 0; - } - - this.legendSymbol = legendSymbol = renderer.symbol( - this.symbol, - (symbolWidth / 2) - radius, - verticalCenter - radius, - 2 * radius, - 2 * radius, - markerOptions - ) - .addClass('highcharts-point') - .add(legendItemGroup); - legendSymbol.isMarker = true; - } - } - }; - - // Workaround for #2030, horizontal legend items not displaying in IE11 Preview, - // and for #2580, a similar drawing flaw in Firefox 26. - // Explore if there's a general cause for this. The problem may be related - // to nested group elements, as the legend item texts are within 4 group - // elements. - if (/Trident\/7\.0/.test(win.navigator.userAgent) || isFirefox) { - wrap(Highcharts.Legend.prototype, 'positionItem', function(proceed, item) { - var legend = this, - // If chart destroyed in sync, this is undefined (#2030) - runPositionItem = function() { - if (item._legendItemPos) { - proceed.call(legend, item); - } - }; - - // Do it now, for export and to get checkbox placement - runPositionItem(); - - // Do it after to work around the core issue - setTimeout(runPositionItem); - }); - } - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var addEvent = H.addEvent, - animate = H.animate, - animObject = H.animObject, - attr = H.attr, - doc = H.doc, - Axis = H.Axis, // @todo add as requirement - createElement = H.createElement, - defaultOptions = H.defaultOptions, - discardElement = H.discardElement, - charts = H.charts, - css = H.css, - defined = H.defined, - each = H.each, - extend = H.extend, - find = H.find, - fireEvent = H.fireEvent, - grep = H.grep, - isNumber = H.isNumber, - isObject = H.isObject, - isString = H.isString, - Legend = H.Legend, // @todo add as requirement - marginNames = H.marginNames, - merge = H.merge, - objectEach = H.objectEach, - Pointer = H.Pointer, // @todo add as requirement - pick = H.pick, - pInt = H.pInt, - removeEvent = H.removeEvent, - seriesTypes = H.seriesTypes, - splat = H.splat, - svg = H.svg, - syncTimeout = H.syncTimeout, - win = H.win; - /** - * The Chart class. The recommended constructor is {@link Highcharts#chart}. - * @class Highcharts.Chart - * @param {String|HTMLDOMElement} renderTo - * The DOM element to render to, or its id. - * @param {Options} options - * The chart options structure. - * @param {Function} [callback] - * Function to run when the chart has loaded and and all external images - * are loaded. Defining a {@link - * https://api.highcharts.com/highcharts/chart.events.load|chart.event.load} - * handler is equivalent. - * - * @example - * var chart = Highcharts.chart('container', { - * title: { - * text: 'My chart' - * }, - * series: [{ - * data: [1, 3, 2, 4] - * }] - * }) - */ - var Chart = H.Chart = function() { - this.getArgs.apply(this, arguments); - }; - - /** - * Factory function for basic charts. - * - * @function #chart - * @memberOf Highcharts - * @param {String|HTMLDOMElement} renderTo - The DOM element to render to, or - * its id. - * @param {Options} options - The chart options structure. - * @param {Function} [callback] - Function to run when the chart has loaded and - * and all external images are loaded. Defining a {@link - * https://api.highcharts.com/highcharts/chart.events.load|chart.event.load} - * handler is equivalent. - * @return {Highcharts.Chart} - Returns the Chart object. - * - * @example - * // Render a chart in to div#container - * var chart = Highcharts.chart('container', { - * title: { - * text: 'My chart' - * }, - * series: [{ - * data: [1, 3, 2, 4] - * }] - * }); - */ - H.chart = function(a, b, c) { - return new Chart(a, b, c); - }; - - extend(Chart.prototype, /** @lends Highcharts.Chart.prototype */ { - - // Hook for adding callbacks in modules - callbacks: [], - - /** - * Handle the arguments passed to the constructor. - * - * @private - * @returns {Array} Arguments without renderTo - */ - getArgs: function() { - var args = [].slice.call(arguments); - - // Remove the optional first argument, renderTo, and - // set it on this. - if (isString(args[0]) || args[0].nodeName) { - this.renderTo = args.shift(); - } - this.init(args[0], args[1]); - }, - - /** - * Overridable function that initializes the chart. The constructor's - * arguments are passed on directly. - */ - init: function(userOptions, callback) { - - // Handle regular options - var options, - type, - seriesOptions = userOptions.series, // skip merging data points to increase performance - userPlotOptions = userOptions.plotOptions || {}; - - userOptions.series = null; - options = merge(defaultOptions, userOptions); // do the merge - - // Override (by copy of user options) or clear tooltip options - // in chart.options.plotOptions (#6218) - for (type in options.plotOptions) { - options.plotOptions[type].tooltip = ( - userPlotOptions[type] && - merge(userPlotOptions[type].tooltip) // override by copy - ) || undefined; // or clear - } - // User options have higher priority than default options (#6218). - // In case of exporting: path is changed - options.tooltip.userOptions = (userOptions.chart && - userOptions.chart.forExport && userOptions.tooltip.userOptions) || - userOptions.tooltip; - - options.series = userOptions.series = seriesOptions; // set back the series data - this.userOptions = userOptions; - - var optionsChart = options.chart; - - var chartEvents = optionsChart.events; - - this.margin = []; - this.spacing = []; - - this.bounds = { - h: {}, - v: {} - }; // Pixel data bounds for touch zoom - - // An array of functions that returns labels that should be considered - // for anti-collision - this.labelCollectors = []; - - this.callback = callback; - this.isResizing = 0; - - /** - * The options structure for the chart. It contains members for the sub - * elements like series, legend, tooltip etc. - * - * @memberof Highcharts.Chart - * @name options - * @type {Options} - */ - this.options = options; - /** - * All the axes in the chart. - * - * @memberof Highcharts.Chart - * @name axes - * @see Highcharts.Chart.xAxis - * @see Highcharts.Chart.yAxis - * @type {Array.} - */ - this.axes = []; - - /** - * All the current series in the chart. - * - * @memberof Highcharts.Chart - * @name series - * @type {Array.} - */ - this.series = []; - - /** - * The chart title. The title has an `update` method that allows - * modifying the options directly or indirectly via `chart.update`. - * - * @memberof Highcharts.Chart - * @name title - * @type Object - * - * @sample highcharts/members/title-update/ - * Updating titles - */ - - /** - * The chart subtitle. The subtitle has an `update` method that allows - * modifying the options directly or indirectly via `chart.update`. - * - * @memberof Highcharts.Chart - * @name subtitle - * @type Object - */ - - - - this.hasCartesianSeries = optionsChart.showAxes; - - var chart = this; - - // Add the chart to the global lookup - chart.index = charts.length; - - charts.push(chart); - H.chartCount++; - - // Chart event handlers - if (chartEvents) { - objectEach(chartEvents, function(event, eventType) { - addEvent(chart, eventType, event); - }); - } - - /** - * A collection of the X axes in the chart. - * @type {Array.} - * @name xAxis - * @memberOf Highcharts.Chart - */ - chart.xAxis = []; - /** - * A collection of the Y axes in the chart. - * @type {Array.} - * @name yAxis - * @memberOf Highcharts.Chart - */ - chart.yAxis = []; - - chart.pointCount = chart.colorCounter = chart.symbolCounter = 0; - - chart.firstRender(); - }, - - /** - * Internal function to unitialize an individual series. - * - * @private - */ - initSeries: function(options) { - var chart = this, - optionsChart = chart.options.chart, - type = options.type || optionsChart.type || optionsChart.defaultSeriesType, - series, - Constr = seriesTypes[type]; - - // No such series type - if (!Constr) { - H.error(17, true); - } - - series = new Constr(); - series.init(this, options); - return series; - }, - - /** - * Order all series above a given index. When series are added and ordered - * by configuration, only the last series is handled (#248, #1123, #2456, - * #6112). This function is called on series initialization and destroy. - * - * @private - * - * @param {number} fromIndex - * If this is given, only the series above this index are handled. - */ - orderSeries: function(fromIndex) { - var series = this.series, - i = fromIndex || 0; - for (; i < series.length; i++) { - if (series[i]) { - series[i].index = i; - series[i].name = series[i].name || - 'Series ' + (series[i].index + 1); - } - } - }, - - /** - * Check whether a given point is within the plot area. - * - * @param {Number} plotX - * Pixel x relative to the plot area. - * @param {Number} plotY - * Pixel y relative to the plot area. - * @param {Boolean} inverted - * Whether the chart is inverted. - * - * @return {Boolean} - * Returns true if the given point is inside the plot area. - */ - isInsidePlot: function(plotX, plotY, inverted) { - var x = inverted ? plotY : plotX, - y = inverted ? plotX : plotY; - - return x >= 0 && - x <= this.plotWidth && - y >= 0 && - y <= this.plotHeight; - }, - - /** - * Redraw the chart after changes have been done to the data, axis extremes - * chart size or chart elements. All methods for updating axes, series or - * points have a parameter for redrawing the chart. This is `true` by - * default. But in many cases you want to do more than one operation on the - * chart before redrawing, for example add a number of points. In those - * cases it is a waste of resources to redraw the chart for each new point - * added. So you add the points and call `chart.redraw()` after. - * - * @param {AnimationOptions} animation - * If or how to apply animation to the redraw. - */ - redraw: function(animation) { - var chart = this, - axes = chart.axes, - series = chart.series, - pointer = chart.pointer, - legend = chart.legend, - redrawLegend = chart.isDirtyLegend, - hasStackedSeries, - hasDirtyStacks, - hasCartesianSeries = chart.hasCartesianSeries, - isDirtyBox = chart.isDirtyBox, - i, - serie, - renderer = chart.renderer, - isHiddenChart = renderer.isHidden(), - afterRedraw = []; - - // Handle responsive rules, not only on resize (#6130) - if (chart.setResponsive) { - chart.setResponsive(false); - } - - H.setAnimation(animation, chart); - - if (isHiddenChart) { - chart.temporaryDisplay(); - } - - // Adjust title layout (reflow multiline text) - chart.layOutTitles(); - - // link stacked series - i = series.length; - while (i--) { - serie = series[i]; - - if (serie.options.stacking) { - hasStackedSeries = true; - - if (serie.isDirty) { - hasDirtyStacks = true; - break; - } - } - } - if (hasDirtyStacks) { // mark others as dirty - i = series.length; - while (i--) { - serie = series[i]; - if (serie.options.stacking) { - serie.isDirty = true; - } - } - } - - // Handle updated data in the series - each(series, function(serie) { - if (serie.isDirty) { - if (serie.options.legendType === 'point') { - if (serie.updateTotals) { - serie.updateTotals(); - } - redrawLegend = true; - } - } - if (serie.isDirtyData) { - fireEvent(serie, 'updatedData'); - } - }); - - // handle added or removed series - if (redrawLegend && legend.options.enabled) { // series or pie points are added or removed - // draw legend graphics - legend.render(); - - chart.isDirtyLegend = false; - } - - // reset stacks - if (hasStackedSeries) { - chart.getStacks(); - } - - - if (hasCartesianSeries) { - // set axes scales - each(axes, function(axis) { - axis.updateNames(); - axis.setScale(); - }); - } - - chart.getMargins(); // #3098 - - if (hasCartesianSeries) { - // If one axis is dirty, all axes must be redrawn (#792, #2169) - each(axes, function(axis) { - if (axis.isDirty) { - isDirtyBox = true; - } - }); - - // redraw axes - each(axes, function(axis) { - - // Fire 'afterSetExtremes' only if extremes are set - var key = axis.min + ',' + axis.max; - if (axis.extKey !== key) { // #821, #4452 - axis.extKey = key; - afterRedraw.push(function() { // prevent a recursive call to chart.redraw() (#1119) - fireEvent(axis, 'afterSetExtremes', extend(axis.eventArgs, axis.getExtremes())); // #747, #751 - delete axis.eventArgs; - }); - } - if (isDirtyBox || hasStackedSeries) { - axis.redraw(); - } - }); - } - - // the plot areas size has changed - if (isDirtyBox) { - chart.drawChartBox(); - } - - // Fire an event before redrawing series, used by the boost module to - // clear previous series renderings. - fireEvent(chart, 'predraw'); - - // redraw affected series - each(series, function(serie) { - if ((isDirtyBox || serie.isDirty) && serie.visible) { - serie.redraw(); - } - // Set it here, otherwise we will have unlimited 'updatedData' calls - // for a hidden series after setData(). Fixes #6012 - serie.isDirtyData = false; - }); - - // move tooltip or reset - if (pointer) { - pointer.reset(true); - } - - // redraw if canvas - renderer.draw(); - - // Fire the events - fireEvent(chart, 'redraw'); - fireEvent(chart, 'render'); - - if (isHiddenChart) { - chart.temporaryDisplay(true); - } - - // Fire callbacks that are put on hold until after the redraw - each(afterRedraw, function(callback) { - callback.call(); - }); - }, - - /** - * Get an axis, series or point object by `id` as given in the configuration - * options. Returns `undefined` if no item is found. - * @param id {String} The id as given in the configuration options. - * @return {Highcharts.Axis|Highcharts.Series|Highcharts.Point|undefined} - * The retrieved item. - * @sample highcharts/plotoptions/series-id/ - * Get series by id - */ - get: function(id) { - - var ret, - series = this.series, - i; - - function itemById(item) { - return item.id === id || (item.options && item.options.id === id); - } - - ret = - // Search axes - find(this.axes, itemById) || - - // Search series - find(this.series, itemById); - - // Search points - for (i = 0; !ret && i < series.length; i++) { - ret = find(series[i].points || [], itemById); - } - - return ret; - }, - - /** - * Create the Axis instances based on the config options. - * - * @private - */ - getAxes: function() { - var chart = this, - options = this.options, - xAxisOptions = options.xAxis = splat(options.xAxis || {}), - yAxisOptions = options.yAxis = splat(options.yAxis || {}), - optionsArray; - - // make sure the options are arrays and add some members - each(xAxisOptions, function(axis, i) { - axis.index = i; - axis.isX = true; - }); - - each(yAxisOptions, function(axis, i) { - axis.index = i; - }); - - // concatenate all axis options into one array - optionsArray = xAxisOptions.concat(yAxisOptions); - - each(optionsArray, function(axisOptions) { - new Axis(chart, axisOptions); // eslint-disable-line no-new - }); - }, - - - /** - * Returns an array of all currently selected points in the chart. Points - * can be selected by clicking or programmatically by the {@link - * Highcharts.Point#select} function. - * - * @return {Array.} - * The currently selected points. - * - * @sample highcharts/plotoptions/series-allowpointselect-line/ - * Get selected points - */ - getSelectedPoints: function() { - var points = []; - each(this.series, function(serie) { - // series.data - for points outside of viewed range (#6445) - points = points.concat(grep(serie.data || [], function(point) { - return point.selected; - })); - }); - return points; - }, - - /** - * Returns an array of all currently selected series in the chart. Series - * can be selected either programmatically by the {@link - * Highcharts.Series#select} function or by checking the checkbox next to - * the legend item if {@link - * https://api.highcharts.com/highcharts/plotOptions.series.showCheckbox| - * series.showCheckBox} is true. - * - * @return {Array.} - * The currently selected series. - * - * @sample highcharts/members/chart-getselectedseries/ - * Get selected series - */ - getSelectedSeries: function() { - return grep(this.series, function(serie) { - return serie.selected; - }); - }, - - /** - * Set a new title or subtitle for the chart. - * - * @param titleOptions {TitleOptions} - * New title options. The title text itself is set by the - * `titleOptions.text` property. - * @param subtitleOptions {SubtitleOptions} - * New subtitle options. The subtitle text itself is set by the - * `subtitleOptions.text` property. - * @param redraw {Boolean} - * Whether to redraw the chart or wait for a later call to - * `chart.redraw()`. - * - * @sample highcharts/members/chart-settitle/ Set title text and styles - * - */ - setTitle: function(titleOptions, subtitleOptions, redraw) { - var chart = this, - options = chart.options, - chartTitleOptions, - chartSubtitleOptions; - - chartTitleOptions = options.title = merge( - - // Default styles - { - style: { - color: '#333333', - fontSize: options.isStock ? '16px' : '18px' // #2944 - } - }, - - options.title, - titleOptions - ); - chartSubtitleOptions = options.subtitle = merge( - - // Default styles - { - style: { - color: '#666666' - } - }, - - options.subtitle, - subtitleOptions - ); - - // add title and subtitle - each([ - ['title', titleOptions, chartTitleOptions], - ['subtitle', subtitleOptions, chartSubtitleOptions] - ], function(arr, i) { - var name = arr[0], - title = chart[name], - titleOptions = arr[1], - chartTitleOptions = arr[2]; - - if (title && titleOptions) { - chart[name] = title = title.destroy(); // remove old - } - - if (chartTitleOptions && !title) { - chart[name] = chart.renderer.text( - chartTitleOptions.text, - 0, - 0, - chartTitleOptions.useHTML - ) - .attr({ - align: chartTitleOptions.align, - 'class': 'highcharts-' + name, - zIndex: chartTitleOptions.zIndex || 4 - }) - .add(); - - // Update methods, shortcut to Chart.setTitle - chart[name].update = function(o) { - chart.setTitle(!i && o, i && o); - }; - - - // Presentational - chart[name].css(chartTitleOptions.style); - - - } - }); - chart.layOutTitles(redraw); - }, - - /** - * Internal function to lay out the chart titles and cache the full offset - * height for use in `getMargins`. The result is stored in - * `this.titleOffset`. - * - * @private - */ - layOutTitles: function(redraw) { - var titleOffset = 0, - requiresDirtyBox, - renderer = this.renderer, - spacingBox = this.spacingBox; - - // Lay out the title and the subtitle respectively - each(['title', 'subtitle'], function(key) { - var title = this[key], - titleOptions = this.options[key], - offset = key === 'title' ? -3 : - // Floating subtitle (#6574) - titleOptions.verticalAlign ? 0 : titleOffset + 2, - titleSize; - - if (title) { - - titleSize = titleOptions.style.fontSize; - - titleSize = renderer.fontMetrics(titleSize, title).b; - - title - .css({ - width: (titleOptions.width || - spacingBox.width + titleOptions.widthAdjust) + 'px' - }) - .align(extend({ - y: offset + titleSize - }, titleOptions), false, 'spacingBox'); - - if (!titleOptions.floating && !titleOptions.verticalAlign) { - titleOffset = Math.ceil( - titleOffset + - // Skip the cache for HTML (#3481) - title.getBBox(titleOptions.useHTML).height - ); - } - } - }, this); - - requiresDirtyBox = this.titleOffset !== titleOffset; - this.titleOffset = titleOffset; // used in getMargins - - if (!this.isDirtyBox && requiresDirtyBox) { - this.isDirtyBox = requiresDirtyBox; - // Redraw if necessary (#2719, #2744) - if (this.hasRendered && pick(redraw, true) && this.isDirtyBox) { - this.redraw(); - } - } - }, - - /** - * Internal function to get the chart width and height according to options - * and container size. Sets {@link Chart.chartWidth} and {@link - * Chart.chartHeight}. - */ - getChartSize: function() { - var chart = this, - optionsChart = chart.options.chart, - widthOption = optionsChart.width, - heightOption = optionsChart.height, - renderTo = chart.renderTo; - - // Get inner width and height - if (!defined(widthOption)) { - chart.containerWidth = H.getStyle(renderTo, 'width'); - } - if (!defined(heightOption)) { - chart.containerHeight = H.getStyle(renderTo, 'height'); - } - - /** - * The current pixel width of the chart. - * - * @name chartWidth - * @memberOf Chart - * @type {Number} - */ - chart.chartWidth = Math.max( // #1393 - 0, - widthOption || chart.containerWidth || 600 // #1460 - ); - /** - * The current pixel height of the chart. - * - * @name chartHeight - * @memberOf Chart - * @type {Number} - */ - chart.chartHeight = Math.max( - 0, - H.relativeLength( - heightOption, - chart.chartWidth - ) || - (chart.containerHeight > 1 ? chart.containerHeight : 400) - ); - }, - - /** - * If the renderTo element has no offsetWidth, most likely one or more of - * its parents are hidden. Loop up the DOM tree to temporarily display the - * parents, then save the original display properties, and when the true - * size is retrieved, reset them. Used on first render and on redraws. - * - * @private - * - * @param {Boolean} revert - * Revert to the saved original styles. - */ - temporaryDisplay: function(revert) { - var node = this.renderTo, - tempStyle; - if (!revert) { - while (node && node.style) { - - // When rendering to a detached node, it needs to be temporarily - // attached in order to read styling and bounding boxes (#5783, - // #7024). - if (!doc.body.contains(node) && !node.parentNode) { - node.hcOrigDetached = true; - doc.body.appendChild(node); - } - if ( - H.getStyle(node, 'display', false) === 'none' || - node.hcOricDetached - ) { - node.hcOrigStyle = { - display: node.style.display, - height: node.style.height, - overflow: node.style.overflow - }; - tempStyle = { - display: 'block', - overflow: 'hidden' - }; - if (node !== this.renderTo) { - tempStyle.height = 0; - } - - H.css(node, tempStyle); - - // If it still doesn't have an offset width after setting - // display to block, it probably has an !important priority - // #2631, 6803 - if (!node.offsetWidth) { - node.style.setProperty('display', 'block', 'important'); - } - } - node = node.parentNode; - - if (node === doc.body) { - break; - } - } - } else { - while (node && node.style) { - if (node.hcOrigStyle) { - H.css(node, node.hcOrigStyle); - delete node.hcOrigStyle; - } - if (node.hcOrigDetached) { - doc.body.removeChild(node); - node.hcOrigDetached = false; - } - node = node.parentNode; - } - } - }, - - /** - * Set the {@link Chart.container|chart container's} class name, in - * addition to `highcharts-container`. - */ - setClassName: function(className) { - this.container.className = 'highcharts-container ' + (className || ''); - }, - - /** - * Get the containing element, determine the size and create the inner - * container div to hold the chart. - * - * @private - */ - getContainer: function() { - var chart = this, - container, - options = chart.options, - optionsChart = options.chart, - chartWidth, - chartHeight, - renderTo = chart.renderTo, - indexAttrName = 'data-highcharts-chart', - oldChartIndex, - Ren, - containerId = H.uniqueKey(), - containerStyle, - key; - - if (!renderTo) { - chart.renderTo = renderTo = optionsChart.renderTo; - } - - if (isString(renderTo)) { - chart.renderTo = renderTo = doc.getElementById(renderTo); - } - - // Display an error if the renderTo is wrong - if (!renderTo) { - H.error(13, true); - } - - // If the container already holds a chart, destroy it. The check for - // hasRendered is there because web pages that are saved to disk from - // the browser, will preserve the data-highcharts-chart attribute and - // the SVG contents, but not an interactive chart. So in this case, - // charts[oldChartIndex] will point to the wrong chart if any (#2609). - oldChartIndex = pInt(attr(renderTo, indexAttrName)); - if ( - isNumber(oldChartIndex) && - charts[oldChartIndex] && - charts[oldChartIndex].hasRendered - ) { - charts[oldChartIndex].destroy(); - } - - // Make a reference to the chart from the div - attr(renderTo, indexAttrName, chart.index); - - // remove previous chart - renderTo.innerHTML = ''; - - // If the container doesn't have an offsetWidth, it has or is a child of - // a node that has display:none. We need to temporarily move it out to a - // visible state to determine the size, else the legend and tooltips - // won't render properly. The skipClone option is used in sparklines as - // a micro optimization, saving about 1-2 ms each chart. - if (!optionsChart.skipClone && !renderTo.offsetWidth) { - chart.temporaryDisplay(); - } - - // get the width and height - chart.getChartSize(); - chartWidth = chart.chartWidth; - chartHeight = chart.chartHeight; - - // Create the inner container - - containerStyle = extend({ - position: 'relative', - overflow: 'hidden', // needed for context menu (avoid scrollbars) - // and content overflow in IE - width: chartWidth + 'px', - height: chartHeight + 'px', - textAlign: 'left', - lineHeight: 'normal', // #427 - zIndex: 0, // #1072 - '-webkit-tap-highlight-color': 'rgba(0,0,0,0)' - }, optionsChart.style); - - - /** - * The containing HTML element of the chart. The container is - * dynamically inserted into the element given as the `renderTo` - * parameterin the {@link Highcharts#chart} constructor. - * - * @memberOf Highcharts.Chart - * @type {HTMLDOMElement} - */ - container = createElement( - 'div', { - id: containerId - }, - containerStyle, - renderTo - ); - chart.container = container; - - // cache the cursor (#1650) - chart._cursor = container.style.cursor; - - // Initialize the renderer - Ren = H[optionsChart.renderer] || H.Renderer; - - /** - * The renderer instance of the chart. Each chart instance has only one - * associated renderer. - * @type {SVGRenderer} - * @name renderer - * @memberOf Chart - */ - chart.renderer = new Ren( - container, - chartWidth, - chartHeight, - null, - optionsChart.forExport, - options.exporting && options.exporting.allowHTML - ); - - - chart.setClassName(optionsChart.className); - - chart.renderer.setStyle(optionsChart.style); - - - // Add a reference to the charts index - chart.renderer.chartIndex = chart.index; - }, - - /** - * Calculate margins by rendering axis labels in a preliminary position. - * Title, subtitle and legend have already been rendered at this stage, but - * will be moved into their final positions. - * - * @private - */ - getMargins: function(skipAxes) { - var chart = this, - spacing = chart.spacing, - margin = chart.margin, - titleOffset = chart.titleOffset; - - chart.resetMargins(); - - // Adjust for title and subtitle - if (titleOffset && !defined(margin[0])) { - chart.plotTop = Math.max( - chart.plotTop, - titleOffset + chart.options.title.margin + spacing[0] - ); - } - - // Adjust for legend - if (chart.legend && chart.legend.display) { - chart.legend.adjustMargins(margin, spacing); - } - - // adjust for scroller - if (chart.extraMargin) { - chart[chart.extraMargin.type] = - (chart[chart.extraMargin.type] || 0) + chart.extraMargin.value; - } - - // adjust for rangeSelector - if (chart.adjustPlotArea) { - chart.adjustPlotArea(); - } - - if (!skipAxes) { - this.getAxisMargins(); - } - }, - - getAxisMargins: function() { - - var chart = this, - // [top, right, bottom, left] - axisOffset = chart.axisOffset = [0, 0, 0, 0], - margin = chart.margin; - - // pre-render axes to get labels offset width - if (chart.hasCartesianSeries) { - each(chart.axes, function(axis) { - if (axis.visible) { - axis.getOffset(); - } - }); - } - - // Add the axis offsets - each(marginNames, function(m, side) { - if (!defined(margin[side])) { - chart[m] += axisOffset[side]; - } - }); - - chart.setChartSize(); - - }, - - /** - * Reflows the chart to its container. By default, the chart reflows - * automatically to its container following a `window.resize` event, as per - * the {@link https://api.highcharts/highcharts/chart.reflow|chart.reflow} - * option. However, there are no reliable events for div resize, so if the - * container is resized without a window resize event, this must be called - * explicitly. - * - * @param {Object} e - * Event arguments. Used primarily when the function is called - * internally as a response to window resize. - * - * @sample highcharts/members/chart-reflow/ - * Resize div and reflow - * @sample highcharts/chart/events-container/ - * Pop up and reflow - */ - reflow: function(e) { - var chart = this, - optionsChart = chart.options.chart, - renderTo = chart.renderTo, - hasUserSize = ( - defined(optionsChart.width) && - defined(optionsChart.height) - ), - width = optionsChart.width || H.getStyle(renderTo, 'width'), - height = optionsChart.height || H.getStyle(renderTo, 'height'), - target = e ? e.target : win; - - // Width and height checks for display:none. Target is doc in IE8 and - // Opera, win in Firefox, Chrome and IE9. - if (!hasUserSize && - !chart.isPrinting && - width && - height && - (target === win || target === doc) - ) { - if ( - width !== chart.containerWidth || - height !== chart.containerHeight - ) { - clearTimeout(chart.reflowTimeout); - // When called from window.resize, e is set, else it's called - // directly (#2224) - chart.reflowTimeout = syncTimeout(function() { - // Set size, it may have been destroyed in the meantime - // (#1257) - if (chart.container) { - chart.setSize(undefined, undefined, false); - } - }, e ? 100 : 0); - } - chart.containerWidth = width; - chart.containerHeight = height; - } - }, - - /** - * Add the event handlers necessary for auto resizing, depending on the - * `chart.events.reflow` option. - * - * @private - */ - initReflow: function() { - var chart = this, - unbind; - - unbind = addEvent(win, 'resize', function(e) { - chart.reflow(e); - }); - addEvent(chart, 'destroy', unbind); - - // The following will add listeners to re-fit the chart before and after - // printing (#2284). However it only works in WebKit. Should have worked - // in Firefox, but not supported in IE. - /* - if (win.matchMedia) { - win.matchMedia('print').addListener(function reflow() { - chart.reflow(); - }); - } - */ - }, - - /** - * Resize the chart to a given width and height. In order to set the width - * only, the height argument may be skipped. To set the height only, pass - * `undefined for the width. - * @param {Number|undefined|null} [width] - * The new pixel width of the chart. Since v4.2.6, the argument can - * be `undefined` in order to preserve the current value (when - * setting height only), or `null` to adapt to the width of the - * containing element. - * @param {Number|undefined|null} [height] - * The new pixel height of the chart. Since v4.2.6, the argument can - * be `undefined` in order to preserve the current value, or `null` - * in order to adapt to the height of the containing element. - * @param {AnimationOptions} [animation=true] - * Whether and how to apply animation. - * - * @sample highcharts/members/chart-setsize-button/ - * Test resizing from buttons - * @sample highcharts/members/chart-setsize-jquery-resizable/ - * Add a jQuery UI resizable - * @sample stock/members/chart-setsize/ - * Highstock with UI resizable - */ - setSize: function(width, height, animation) { - var chart = this, - renderer = chart.renderer, - globalAnimation; - - // Handle the isResizing counter - chart.isResizing += 1; - - // set the animation for the current process - H.setAnimation(animation, chart); - - chart.oldChartHeight = chart.chartHeight; - chart.oldChartWidth = chart.chartWidth; - if (width !== undefined) { - chart.options.chart.width = width; - } - if (height !== undefined) { - chart.options.chart.height = height; - } - chart.getChartSize(); - - // Resize the container with the global animation applied if enabled - // (#2503) - - globalAnimation = renderer.globalAnimation; - (globalAnimation ? animate : css)(chart.container, { - width: chart.chartWidth + 'px', - height: chart.chartHeight + 'px' - }, globalAnimation); - - - chart.setChartSize(true); - renderer.setSize(chart.chartWidth, chart.chartHeight, animation); - - // handle axes - each(chart.axes, function(axis) { - axis.isDirty = true; - axis.setScale(); - }); - - chart.isDirtyLegend = true; // force legend redraw - chart.isDirtyBox = true; // force redraw of plot and chart border - - chart.layOutTitles(); // #2857 - chart.getMargins(); - - chart.redraw(animation); - - - chart.oldChartHeight = null; - fireEvent(chart, 'resize'); - - // Fire endResize and set isResizing back. If animation is disabled, - // fire without delay - syncTimeout(function() { - if (chart) { - fireEvent(chart, 'endResize', null, function() { - chart.isResizing -= 1; - }); - } - }, animObject(globalAnimation).duration); - }, - - /** - * Set the public chart properties. This is done before and after the - * pre-render to determine margin sizes. - * - * @private - */ - setChartSize: function(skipAxes) { - var chart = this, - inverted = chart.inverted, - renderer = chart.renderer, - chartWidth = chart.chartWidth, - chartHeight = chart.chartHeight, - optionsChart = chart.options.chart, - spacing = chart.spacing, - clipOffset = chart.clipOffset, - clipX, - clipY, - plotLeft, - plotTop, - plotWidth, - plotHeight, - plotBorderWidth; - - /** - * The current left position of the plot area in pixels. - * - * @name plotLeft - * @memberOf Chart - * @type {Number} - */ - chart.plotLeft = plotLeft = Math.round(chart.plotLeft); - - /** - * The current top position of the plot area in pixels. - * - * @name plotTop - * @memberOf Chart - * @type {Number} - */ - chart.plotTop = plotTop = Math.round(chart.plotTop); - - /** - * The current width of the plot area in pixels. - * - * @name plotWidth - * @memberOf Chart - * @type {Number} - */ - chart.plotWidth = plotWidth = Math.max( - 0, - Math.round(chartWidth - plotLeft - chart.marginRight) - ); - - /** - * The current height of the plot area in pixels. - * - * @name plotHeight - * @memberOf Chart - * @type {Number} - */ - chart.plotHeight = plotHeight = Math.max( - 0, - Math.round(chartHeight - plotTop - chart.marginBottom) - ); - - chart.plotSizeX = inverted ? plotHeight : plotWidth; - chart.plotSizeY = inverted ? plotWidth : plotHeight; - - chart.plotBorderWidth = optionsChart.plotBorderWidth || 0; - - // Set boxes used for alignment - chart.spacingBox = renderer.spacingBox = { - x: spacing[3], - y: spacing[0], - width: chartWidth - spacing[3] - spacing[1], - height: chartHeight - spacing[0] - spacing[2] - }; - chart.plotBox = renderer.plotBox = { - x: plotLeft, - y: plotTop, - width: plotWidth, - height: plotHeight - }; - - plotBorderWidth = 2 * Math.floor(chart.plotBorderWidth / 2); - clipX = Math.ceil(Math.max(plotBorderWidth, clipOffset[3]) / 2); - clipY = Math.ceil(Math.max(plotBorderWidth, clipOffset[0]) / 2); - chart.clipBox = { - x: clipX, - y: clipY, - width: Math.floor( - chart.plotSizeX - - Math.max(plotBorderWidth, clipOffset[1]) / 2 - - clipX - ), - height: Math.max( - 0, - Math.floor( - chart.plotSizeY - - Math.max(plotBorderWidth, clipOffset[2]) / 2 - - clipY - ) - ) - }; - - if (!skipAxes) { - each(chart.axes, function(axis) { - axis.setAxisSize(); - axis.setAxisTranslation(); - }); - } - }, - - /** - * Initial margins before auto size margins are applied. - * - * @private - */ - resetMargins: function() { - var chart = this, - chartOptions = chart.options.chart; - - // Create margin and spacing array - each(['margin', 'spacing'], function splashArrays(target) { - var value = chartOptions[target], - values = isObject(value) ? value : [value, value, value, value]; - - each(['Top', 'Right', 'Bottom', 'Left'], function(sideName, side) { - chart[target][side] = pick( - chartOptions[target + sideName], - values[side] - ); - }); - }); - - // Set margin names like chart.plotTop, chart.plotLeft, - // chart.marginRight, chart.marginBottom. - each(marginNames, function(m, side) { - chart[m] = pick(chart.margin[side], chart.spacing[side]); - }); - chart.axisOffset = [0, 0, 0, 0]; // top, right, bottom, left - chart.clipOffset = [0, 0, 0, 0]; - }, - - /** - * Internal function to draw or redraw the borders and backgrounds for chart - * and plot area. - * - * @private - */ - drawChartBox: function() { - var chart = this, - optionsChart = chart.options.chart, - renderer = chart.renderer, - chartWidth = chart.chartWidth, - chartHeight = chart.chartHeight, - chartBackground = chart.chartBackground, - plotBackground = chart.plotBackground, - plotBorder = chart.plotBorder, - chartBorderWidth, - - plotBGImage = chart.plotBGImage, - chartBackgroundColor = optionsChart.backgroundColor, - plotBackgroundColor = optionsChart.plotBackgroundColor, - plotBackgroundImage = optionsChart.plotBackgroundImage, - - mgn, - bgAttr, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop, - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - plotBox = chart.plotBox, - clipRect = chart.clipRect, - clipBox = chart.clipBox, - verb = 'animate'; - - // Chart area - if (!chartBackground) { - chart.chartBackground = chartBackground = renderer.rect() - .addClass('highcharts-background') - .add(); - verb = 'attr'; - } - - - // Presentational - chartBorderWidth = optionsChart.borderWidth || 0; - mgn = chartBorderWidth + (optionsChart.shadow ? 8 : 0); - - bgAttr = { - fill: chartBackgroundColor || 'none' - }; - - if (chartBorderWidth || chartBackground['stroke-width']) { // #980 - bgAttr.stroke = optionsChart.borderColor; - bgAttr['stroke-width'] = chartBorderWidth; - } - chartBackground - .attr(bgAttr) - .shadow(optionsChart.shadow); - - chartBackground[verb]({ - x: mgn / 2, - y: mgn / 2, - width: chartWidth - mgn - chartBorderWidth % 2, - height: chartHeight - mgn - chartBorderWidth % 2, - r: optionsChart.borderRadius - }); - - // Plot background - verb = 'animate'; - if (!plotBackground) { - verb = 'attr'; - chart.plotBackground = plotBackground = renderer.rect() - .addClass('highcharts-plot-background') - .add(); - } - plotBackground[verb](plotBox); - - - // Presentational attributes for the background - plotBackground - .attr({ - fill: plotBackgroundColor || 'none' - }) - .shadow(optionsChart.plotShadow); - - // Create the background image - if (plotBackgroundImage) { - if (!plotBGImage) { - chart.plotBGImage = renderer.image( - plotBackgroundImage, - plotLeft, - plotTop, - plotWidth, - plotHeight - ).add(); - } else { - plotBGImage.animate(plotBox); - } - } - - - // Plot clip - if (!clipRect) { - chart.clipRect = renderer.clipRect(clipBox); - } else { - clipRect.animate({ - width: clipBox.width, - height: clipBox.height - }); - } - - // Plot area border - verb = 'animate'; - if (!plotBorder) { - verb = 'attr'; - chart.plotBorder = plotBorder = renderer.rect() - .addClass('highcharts-plot-border') - .attr({ - zIndex: 1 // Above the grid - }) - .add(); - } - - - // Presentational - plotBorder.attr({ - stroke: optionsChart.plotBorderColor, - 'stroke-width': optionsChart.plotBorderWidth || 0, - fill: 'none' - }); - - - plotBorder[verb](plotBorder.crisp({ - x: plotLeft, - y: plotTop, - width: plotWidth, - height: plotHeight - }, -plotBorder.strokeWidth())); // #3282 plotBorder should be negative; - - // reset - chart.isDirtyBox = false; - }, - - /** - * Detect whether a certain chart property is needed based on inspecting its - * options and series. This mainly applies to the chart.inverted property, - * and in extensions to the chart.angular and chart.polar properties. - * - * @private - */ - propFromSeries: function() { - var chart = this, - optionsChart = chart.options.chart, - klass, - seriesOptions = chart.options.series, - i, - value; - - - each(['inverted', 'angular', 'polar'], function(key) { - - // The default series type's class - klass = seriesTypes[optionsChart.type || - optionsChart.defaultSeriesType]; - - // Get the value from available chart-wide properties - value = - optionsChart[key] || // It is set in the options - (klass && klass.prototype[key]); // The default series class - // requires it - - // 4. Check if any the chart's series require it - i = seriesOptions && seriesOptions.length; - while (!value && i--) { - klass = seriesTypes[seriesOptions[i].type]; - if (klass && klass.prototype[key]) { - value = true; - } - } - - // Set the chart property - chart[key] = value; - }); - - }, - - /** - * Internal function to link two or more series together, based on the - * `linkedTo` option. This is done from `Chart.render`, and after - * `Chart.addSeries` and `Series.remove`. - * - * @private - */ - linkSeries: function() { - var chart = this, - chartSeries = chart.series; - - // Reset links - each(chartSeries, function(series) { - series.linkedSeries.length = 0; - }); - - // Apply new links - each(chartSeries, function(series) { - var linkedTo = series.options.linkedTo; - if (isString(linkedTo)) { - if (linkedTo === ':previous') { - linkedTo = chart.series[series.index - 1]; - } else { - linkedTo = chart.get(linkedTo); - } - // #3341 avoid mutual linking - if (linkedTo && linkedTo.linkedParent !== series) { - linkedTo.linkedSeries.push(series); - series.linkedParent = linkedTo; - series.visible = pick( - series.options.visible, - linkedTo.options.visible, - series.visible - ); // #3879 - } - } - }); - }, - - /** - * Render series for the chart. - * - * @private - */ - renderSeries: function() { - each(this.series, function(serie) { - serie.translate(); - serie.render(); - }); - }, - - /** - * Render labels for the chart. - * - * @private - */ - renderLabels: function() { - var chart = this, - labels = chart.options.labels; - if (labels.items) { - each(labels.items, function(label) { - var style = extend(labels.style, label.style), - x = pInt(style.left) + chart.plotLeft, - y = pInt(style.top) + chart.plotTop + 12; - - // delete to prevent rewriting in IE - delete style.left; - delete style.top; - - chart.renderer.text( - label.html, - x, - y - ) - .attr({ - zIndex: 2 - }) - .css(style) - .add(); - - }); - } - }, - - /** - * Render all graphics for the chart. Runs internally on initialization. - * - * @private - */ - render: function() { - var chart = this, - axes = chart.axes, - renderer = chart.renderer, - options = chart.options, - tempWidth, - tempHeight, - redoHorizontal, - redoVertical; - - // Title - chart.setTitle(); - - - // Legend - chart.legend = new Legend(chart, options.legend); - - // Get stacks - if (chart.getStacks) { - chart.getStacks(); - } - - // Get chart margins - chart.getMargins(true); - chart.setChartSize(); - - // Record preliminary dimensions for later comparison - tempWidth = chart.plotWidth; - // 21 is the most common correction for X axis labels - // use Math.max to prevent negative plotHeight - tempHeight = chart.plotHeight = Math.max(chart.plotHeight - 21, 0); - - // Get margins by pre-rendering axes - each(axes, function(axis) { - axis.setScale(); - }); - chart.getAxisMargins(); - - // If the plot area size has changed significantly, calculate tick positions again - redoHorizontal = tempWidth / chart.plotWidth > 1.1; - redoVertical = tempHeight / chart.plotHeight > 1.05; // Height is more sensitive - - if (redoHorizontal || redoVertical) { - - each(axes, function(axis) { - if ((axis.horiz && redoHorizontal) || (!axis.horiz && redoVertical)) { - axis.setTickInterval(true); // update to reflect the new margins - } - }); - chart.getMargins(); // second pass to check for new labels - } - - // Draw the borders and backgrounds - chart.drawChartBox(); - - - // Axes - if (chart.hasCartesianSeries) { - each(axes, function(axis) { - if (axis.visible) { - axis.render(); - } - }); - } - - // The series - if (!chart.seriesGroup) { - chart.seriesGroup = renderer.g('series-group') - .attr({ - zIndex: 3 - }) - .add(); - } - chart.renderSeries(); - - // Labels - chart.renderLabels(); - - // Credits - chart.addCredits(); - - // Handle responsiveness - if (chart.setResponsive) { - chart.setResponsive(); - } - - // Set flag - chart.hasRendered = true; - - }, - - /** - * Set a new credits label for the chart. - * - * @param {CreditOptions} options - * A configuration object for the new credits. - * @sample highcharts/credits/credits-update/ Add and update credits - */ - addCredits: function(credits) { - var chart = this; - - credits = merge(true, this.options.credits, credits); - if (credits.enabled && !this.credits) { - - /** - * The chart's credits label. The label has an `update` method that - * allows setting new options as per the {@link - * https://api.highcharts.com/highcharts/credits| - * credits options set}. - * - * @memberof Highcharts.Chart - * @name credits - * @type {Highcharts.SVGElement} - */ - this.credits = this.renderer.text( - credits.text + (this.mapCredits || ''), - 0, - 0 - ) - .addClass('highcharts-credits') - .on('click', function() { - if (credits.href) { - win.location.href = credits.href; - } - }) - .attr({ - align: credits.position.align, - zIndex: 8 - }) - - .css(credits.style) - - .add() - .align(credits.position); - - // Dynamically update - this.credits.update = function(options) { - chart.credits = chart.credits.destroy(); - chart.addCredits(options); - }; - } - }, - - /** - * Remove the chart and purge memory. This method is called internally - * before adding a second chart into the same container, as well as on - * window unload to prevent leaks. - * - * @sample highcharts/members/chart-destroy/ - * Destroy the chart from a button - * @sample stock/members/chart-destroy/ - * Destroy with Highstock - */ - destroy: function() { - var chart = this, - axes = chart.axes, - series = chart.series, - container = chart.container, - i, - parentNode = container && container.parentNode; - - // fire the chart.destoy event - fireEvent(chart, 'destroy'); - - // Delete the chart from charts lookup array - if (chart.renderer.forExport) { - H.erase(charts, chart); // #6569 - } else { - charts[chart.index] = undefined; - } - H.chartCount--; - chart.renderTo.removeAttribute('data-highcharts-chart'); - - // remove events - removeEvent(chart); - - // ==== Destroy collections: - // Destroy axes - i = axes.length; - while (i--) { - axes[i] = axes[i].destroy(); - } - - // Destroy scroller & scroller series before destroying base series - if (this.scroller && this.scroller.destroy) { - this.scroller.destroy(); - } - - // Destroy each series - i = series.length; - while (i--) { - series[i] = series[i].destroy(); - } - - // ==== Destroy chart properties: - each([ - 'title', 'subtitle', 'chartBackground', 'plotBackground', - 'plotBGImage', 'plotBorder', 'seriesGroup', 'clipRect', 'credits', - 'pointer', 'rangeSelector', 'legend', 'resetZoomButton', 'tooltip', - 'renderer' - ], function(name) { - var prop = chart[name]; - - if (prop && prop.destroy) { - chart[name] = prop.destroy(); - } - }); - - // remove container and all SVG - if (container) { // can break in IE when destroyed before finished loading - container.innerHTML = ''; - removeEvent(container); - if (parentNode) { - discardElement(container); - } - - } - - // clean it all up - objectEach(chart, function(val, key) { - delete chart[key]; - }); - - }, - - - /** - * VML namespaces can't be added until after complete. Listening - * for Perini's doScroll hack is not enough. - * - * @private - */ - isReadyToRender: function() { - var chart = this; - - // Note: win == win.top is required - if ((!svg && (win == win.top && doc.readyState !== 'complete'))) { // eslint-disable-line eqeqeq - doc.attachEvent('onreadystatechange', function() { - doc.detachEvent('onreadystatechange', chart.firstRender); - if (doc.readyState === 'complete') { - chart.firstRender(); - } - }); - return false; - } - return true; - }, - - /** - * Prepare for first rendering after all data are loaded. - * - * @private - */ - firstRender: function() { - var chart = this, - options = chart.options; - - // Check whether the chart is ready to render - if (!chart.isReadyToRender()) { - return; - } - - // Create the container - chart.getContainer(); - - // Run an early event after the container and renderer are established - fireEvent(chart, 'init'); - - - chart.resetMargins(); - chart.setChartSize(); - - // Set the common chart properties (mainly invert) from the given series - chart.propFromSeries(); - - // get axes - chart.getAxes(); - - // Initialize the series - each(options.series || [], function(serieOptions) { - chart.initSeries(serieOptions); - }); - - chart.linkSeries(); - - // Run an event after axes and series are initialized, but before render. At this stage, - // the series data is indexed and cached in the xData and yData arrays, so we can access - // those before rendering. Used in Highstock. - fireEvent(chart, 'beforeRender'); - - // depends on inverted and on margins being set - if (Pointer) { - - /** - * The Pointer that keeps track of mouse and touch interaction. - * - * @memberof Chart - * @name pointer - * @type Pointer - */ - chart.pointer = new Pointer(chart, options); - } - - chart.render(); - - // Fire the load event if there are no external images - if (!chart.renderer.imgCount && chart.onload) { - chart.onload(); - } - - // If the chart was rendered outside the top container, put it back in (#3679) - chart.temporaryDisplay(true); - - }, - - /** - * Internal function that runs on chart load, async if any images are loaded - * in the chart. Runs the callbacks and triggers the `load` and `render` - * events. - * - * @private - */ - onload: function() { - - // Run callbacks - each([this.callback].concat(this.callbacks), function(fn) { - if (fn && this.index !== undefined) { // Chart destroyed in its own callback (#3600) - fn.apply(this, [this]); - } - }, this); - - fireEvent(this, 'load'); - fireEvent(this, 'render'); - - - // Set up auto resize, check for not destroyed (#6068) - if (defined(this.index) && this.options.chart.reflow !== false) { - this.initReflow(); - } - - // Don't run again - this.onload = null; - } - - }); // end Chart - - }(Highcharts)); - (function(Highcharts) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var Point, - H = Highcharts, - - each = H.each, - extend = H.extend, - erase = H.erase, - fireEvent = H.fireEvent, - format = H.format, - isArray = H.isArray, - isNumber = H.isNumber, - pick = H.pick, - removeEvent = H.removeEvent; - - /** - * The Point object. The point objects are generated from the `series.data` - * configuration objects or raw numbers. They can be accessed from the - * `Series.points` array. Other ways to instaniate points are through {@link - * Highcharts.Series#addPoint} or {@link Highcharts.Series#setData}. - * - * @class - */ - - Highcharts.Point = Point = function() {}; - Highcharts.Point.prototype = { - - /** - * Initialize the point. Called internally based on the `series.data` - * option. - * @param {Series} series - * The series object containing this point. - * @param {Number|Array|Object} options - * The data in either number, array or object format. - * @param {Number} x Optionally, the X value of the point. - * @return {Point} The Point instance. - */ - init: function(series, options, x) { - - var point = this, - colors, - colorCount = series.chart.options.chart.colorCount, - colorIndex; - - /** - * The series object associated with the point. - * - * @name series - * @memberof Highcharts.Point - * @type Highcharts.Series - */ - point.series = series; - - - /** - * The point's current color. - * @name color - * @memberof Highcharts.Point - * @type {Color} - */ - point.color = series.color; // #3445 - - point.applyOptions(options, x); - - if (series.options.colorByPoint) { - - colors = series.options.colors || series.chart.options.colors; - point.color = point.color || colors[series.colorCounter]; - colorCount = colors.length; - - colorIndex = series.colorCounter; - series.colorCounter++; - // loop back to zero - if (series.colorCounter === colorCount) { - series.colorCounter = 0; - } - } else { - colorIndex = series.colorIndex; - } - - /** - * The point's current color index, used in styled mode instead of - * `color`. The color index is inserted in class names used for styling. - * @name colorIndex - * @memberof Highcharts.Point - * @type {Number} - */ - point.colorIndex = pick(point.colorIndex, colorIndex); - - series.chart.pointCount++; - return point; - }, - /** - * Apply the options containing the x and y data and possible some extra - * properties. Called on point init or from point.update. - * - * @private - * @param {Object} options The point options as defined in series.data. - * @param {Number} x Optionally, the X value. - * @returns {Object} The Point instance. - */ - applyOptions: function(options, x) { - var point = this, - series = point.series, - pointValKey = series.options.pointValKey || series.pointValKey; - - options = Point.prototype.optionsToObject.call(this, options); - - // copy options directly to point - extend(point, options); - point.options = point.options ? extend(point.options, options) : options; - - // Since options are copied into the Point instance, some accidental options must be shielded (#5681) - if (options.group) { - delete point.group; - } - - // For higher dimension series types. For instance, for ranges, point.y is mapped to point.low. - if (pointValKey) { - point.y = point[pointValKey]; - } - point.isNull = pick( - point.isValid && !point.isValid(), - point.x === null || !isNumber(point.y, true) - ); // #3571, check for NaN - - // The point is initially selected by options (#5777) - if (point.selected) { - point.state = 'select'; - } - - // If no x is set by now, get auto incremented value. All points must have an - // x value, however the y value can be null to create a gap in the series - if ('name' in point && x === undefined && series.xAxis && series.xAxis.hasNames) { - point.x = series.xAxis.nameToX(point); - } - if (point.x === undefined && series) { - if (x === undefined) { - point.x = series.autoIncrement(point); - } else { - point.x = x; - } - } - - return point; - }, - - /** - * Transform number or array configs into objects. Used internally to unify - * the different configuration formats for points. For example, a simple - * number `10` in a line series will be transformed to `{ y: 10 }`, and an - * array config like `[1, 10]` in a scatter series will be transformed to - * `{ x: 1, y: 10 }`. - * - * @param {Number|Array|Object} options - * The input options - * @return {Object} Transformed options. - */ - optionsToObject: function(options) { - var ret = {}, - series = this.series, - keys = series.options.keys, - pointArrayMap = keys || series.pointArrayMap || ['y'], - valueCount = pointArrayMap.length, - firstItemType, - i = 0, - j = 0; - - if (isNumber(options) || options === null) { - ret[pointArrayMap[0]] = options; - - } else if (isArray(options)) { - // with leading x value - if (!keys && options.length > valueCount) { - firstItemType = typeof options[0]; - if (firstItemType === 'string') { - ret.name = options[0]; - } else if (firstItemType === 'number') { - ret.x = options[0]; - } - i++; - } - while (j < valueCount) { - if (!keys || options[i] !== undefined) { // Skip undefined positions for keys - ret[pointArrayMap[j]] = options[i]; - } - i++; - j++; - } - } else if (typeof options === 'object') { - ret = options; - - // This is the fastest way to detect if there are individual point dataLabels that need - // to be considered in drawDataLabels. These can only occur in object configs. - if (options.dataLabels) { - series._hasPointLabels = true; - } - - // Same approach as above for markers - if (options.marker) { - series._hasPointMarkers = true; - } - } - return ret; - }, - - /** - * Get the CSS class names for individual points. Used internally where the - * returned value is set on every point. - * - * @returns {String} The class names. - */ - getClassName: function() { - return 'highcharts-point' + - (this.selected ? ' highcharts-point-select' : '') + - (this.negative ? ' highcharts-negative' : '') + - (this.isNull ? ' highcharts-null-point' : '') + - (this.colorIndex !== undefined ? ' highcharts-color-' + - this.colorIndex : '') + - (this.options.className ? ' ' + this.options.className : '') + - (this.zone && this.zone.className ? ' ' + - this.zone.className.replace('highcharts-negative', '') : ''); - }, - - /** - * In a series with `zones`, return the zone that the point belongs to. - * - * @return {Object} - * The zone item. - */ - getZone: function() { - var series = this.series, - zones = series.zones, - zoneAxis = series.zoneAxis || 'y', - i = 0, - zone; - - zone = zones[i]; - while (this[zoneAxis] >= zone.value) { - zone = zones[++i]; - } - - if (zone && zone.color && !this.options.color) { - this.color = zone.color; - } - - return zone; - }, - - /** - * Destroy a point to clear memory. Its reference still stays in - * `series.data`. - * - * @private - */ - destroy: function() { - var point = this, - series = point.series, - chart = series.chart, - hoverPoints = chart.hoverPoints, - prop; - - chart.pointCount--; - - if (hoverPoints) { - point.setState(); - erase(hoverPoints, point); - if (!hoverPoints.length) { - chart.hoverPoints = null; - } - - } - if (point === chart.hoverPoint) { - point.onMouseOut(); - } - - // remove all events - if (point.graphic || point.dataLabel) { // removeEvent and destroyElements are performance expensive - removeEvent(point); - point.destroyElements(); - } - - if (point.legendItem) { // pies have legend items - chart.legend.destroyItem(point); - } - - for (prop in point) { - point[prop] = null; - } - - - }, - - /** - * Destroy SVG elements associated with the point. - * - * @private - */ - destroyElements: function() { - var point = this, - props = ['graphic', 'dataLabel', 'dataLabelUpper', 'connector', 'shadowGroup'], - prop, - i = 6; - while (i--) { - prop = props[i]; - if (point[prop]) { - point[prop] = point[prop].destroy(); - } - } - }, - - /** - * Return the configuration hash needed for the data label and tooltip - * formatters. - * - * @returns {Object} - * Abstract object used in formatters and formats. - */ - getLabelConfig: function() { - return { - x: this.category, - y: this.y, - color: this.color, - colorIndex: this.colorIndex, - key: this.name || this.category, - series: this.series, - point: this, - percentage: this.percentage, - total: this.total || this.stackTotal - }; - }, - - /** - * Extendable method for formatting each point's tooltip line. - * - * @param {String} pointFormat - * The point format. - * @return {String} - * A string to be concatenated in to the common tooltip text. - */ - tooltipFormatter: function(pointFormat) { - - // Insert options for valueDecimals, valuePrefix, and valueSuffix - var series = this.series, - seriesTooltipOptions = series.tooltipOptions, - valueDecimals = pick(seriesTooltipOptions.valueDecimals, ''), - valuePrefix = seriesTooltipOptions.valuePrefix || '', - valueSuffix = seriesTooltipOptions.valueSuffix || ''; - - // Loop over the point array map and replace unformatted values with sprintf formatting markup - each(series.pointArrayMap || ['y'], function(key) { - key = '{point.' + key; // without the closing bracket - if (valuePrefix || valueSuffix) { - pointFormat = pointFormat.replace(key + '}', valuePrefix + key + '}' + valueSuffix); - } - pointFormat = pointFormat.replace(key + '}', key + ':,.' + valueDecimals + 'f}'); - }); - - return format(pointFormat, { - point: this, - series: this.series - }); - }, - - /** - * Fire an event on the Point object. - * - * @private - * @param {String} eventType - * @param {Object} eventArgs Additional event arguments - * @param {Function} defaultFunction Default event handler - */ - firePointEvent: function(eventType, eventArgs, defaultFunction) { - var point = this, - series = this.series, - seriesOptions = series.options; - - // load event handlers on demand to save time on mouseover/out - if (seriesOptions.point.events[eventType] || (point.options && point.options.events && point.options.events[eventType])) { - this.importEvents(); - } - - // add default handler if in selection mode - if (eventType === 'click' && seriesOptions.allowPointSelect) { - defaultFunction = function(event) { - // Control key is for Windows, meta (= Cmd key) for Mac, Shift for Opera - if (point.select) { // Could be destroyed by prior event handlers (#2911) - point.select(null, event.ctrlKey || event.metaKey || event.shiftKey); - } - }; - } - - fireEvent(this, eventType, eventArgs, defaultFunction); - }, - - /** - * For certain series types, like pie charts, where individual points can - * be shown or hidden. - * - * @name visible - * @memberOf Highcharts.Point - * @type {Boolean} - */ - visible: true - }; - - /** - * For categorized axes this property holds the category name for the - * point. For other axes it holds the X value. - * - * @name category - * @memberOf Highcharts.Point - * @type {String|Number} - */ - - /** - * The name of the point. The name can be given as the first position of the - * point configuration array, or as a `name` property in the configuration: - * - * @example - * // Array config - * data: [ - * ['John', 1], - * ['Jane', 2] - * ] - * - * // Object config - * data: [{ - * name: 'John', - * y: 1 - * }, { - * name: 'Jane', - * y: 2 - * }] - * - * @name name - * @memberOf Highcharts.Point - * @type {String} - */ - - - /** - * The percentage for points in a stacked series or pies. - * - * @name percentage - * @memberOf Highcharts.Point - * @type {Number} - */ - - /** - * The total of values in either a stack for stacked series, or a pie in a pie - * series. - * - * @name total - * @memberOf Highcharts.Point - * @type {Number} - */ - - /** - * The x value of the point. - * - * @name x - * @memberOf Highcharts.Point - * @type {Number} - */ - - /** - * The y value of the point. - * - * @name y - * @memberOf Highcharts.Point - * @type {Number} - */ - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var addEvent = H.addEvent, - animObject = H.animObject, - arrayMax = H.arrayMax, - arrayMin = H.arrayMin, - correctFloat = H.correctFloat, - Date = H.Date, - defaultOptions = H.defaultOptions, - defaultPlotOptions = H.defaultPlotOptions, - defined = H.defined, - each = H.each, - erase = H.erase, - extend = H.extend, - fireEvent = H.fireEvent, - grep = H.grep, - isArray = H.isArray, - isNumber = H.isNumber, - isString = H.isString, - LegendSymbolMixin = H.LegendSymbolMixin, // @todo add as a requirement - merge = H.merge, - objectEach = H.objectEach, - pick = H.pick, - Point = H.Point, // @todo add as a requirement - removeEvent = H.removeEvent, - splat = H.splat, - SVGElement = H.SVGElement, - syncTimeout = H.syncTimeout, - win = H.win; - - /** - * This is the base series prototype that all other series types inherit from. - * A new series is initialized either through the - * {@link https://api.highcharts.com/highcharts/series|series} option structure, - * or after the chart is initialized, through - * {@link Highcharts.Chart#addSeries}. - * - * The object can be accessed in a number of ways. All series and point event - * handlers give a reference to the `series` object. The chart object has a - * {@link Highcharts.Chart.series|series} property that is a collection of all - * the chart's series. The point objects and axis objects also have the same - * reference. - * - * Another way to reference the series programmatically is by `id`. Add an id - * in the series configuration options, and get the series object by {@link - * Highcharts.Chart#get}. - * - * Configuration options for the series are given in three levels. Options for - * all series in a chart are given in the - * {@link https://api.highcharts.com/highcharts/plotOptions.series| - * plotOptions.series} object. Then options for all series of a specific type - * are given in the plotOptions of that type, for example `plotOptions.line`. - * Next, options for one single series are given in the series array, or as - * arguements to `chart.addSeries`. - * - * The data in the series is stored in various arrays. - * - * - First, `series.options.data` contains all the original config options for - * each point whether added by options or methods like `series.addPoint`. - * - Next, `series.data` contains those values converted to points, but in case - * the series data length exceeds the `cropThreshold`, or if the data is - * grouped, `series.data` doesn't contain all the points. It only contains the - * points that have been created on demand. - * - Then there's `series.points` that contains all currently visible point - * objects. In case of cropping, the cropped-away points are not part of this - * array. The `series.points` array starts at `series.cropStart` compared to - * `series.data` and `series.options.data`. If however the series data is - * grouped, these can't be correlated one to one. - * - `series.xData` and `series.processedXData` contain clean x values, - * equivalent to `series.data` and `series.points`. - * - `series.yData` and `series.processedYData` contain clean y values, - * equivalent to `series.data` and `series.points`. - * - * @class Highcharts.Series - * @param {Highcharts.Chart} chart - * The chart instance. - * @param {Options.plotOptions.series} options - * The series options. - * - */ - - /** - * General options for all series types. - * @optionparent plotOptions.series - */ - H.Series = H.seriesType('line', null, { // base series options - - /** - * The SVG value used for the `stroke-linecap` and `stroke-linejoin` - * of a line graph. Round means that lines are rounded in the ends and - * bends. - * - * @validvalue ["round", "butt", "square"] - * @type {String} - * @default round - * @since 3.0.7 - * @apioption plotOptions.line.linecap - */ - - /** - * Pixel with of the graph line. - * - * @type {Number} - * @see In styled mode, the line stroke-width can be set with the - * `.highcharts-graph` class name. - * @sample {highcharts} highcharts/plotoptions/series-linewidth-general/ - * On all series - * @sample {highcharts} highcharts/plotoptions/series-linewidth-specific/ - * On one single series - * @default 2 - * @product highcharts highstock - */ - lineWidth: 2, - - - /** - * For some series, there is a limit that shuts down initial animation - * by default when the total number of points in the chart is too high. - * For example, for a column chart and its derivatives, animation doesn't - * run if there is more than 250 points totally. To disable this cap, set - * `animationLimit` to `Infinity`. - * - * @type {Number} - * @apioption plotOptions.series.animationLimit - */ - - /** - * Allow this series' points to be selected by clicking on the graphic - * (columns, point markers, pie slices, map areas etc). - * - * @see [Chart#getSelectedPoints] - * (../class-reference/Highcharts.Chart#getSelectedPoints). - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/series-allowpointselect-line/ - * Line - * @sample {highcharts} - * highcharts/plotoptions/series-allowpointselect-column/ - * Column - * @sample {highcharts} highcharts/plotoptions/series-allowpointselect-pie/ - * Pie - * @sample {highmaps} maps/plotoptions/series-allowpointselect/ - * Map area - * @sample {highmaps} maps/plotoptions/mapbubble-allowpointselect/ - * Map bubble - * @default false - * @since 1.2.0 - */ - allowPointSelect: false, - - - - /** - * If true, a checkbox is displayed next to the legend item to allow - * selecting the series. The state of the checkbox is determined by - * the `selected` option. - * - * @productdesc {highmaps} - * Note that if a `colorAxis` is defined, the color axis is represented in - * the legend, not the series. - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/series-showcheckbox-true/ - * Show select box - * @default false - * @since 1.2.0 - */ - showCheckbox: false, - - - - /** - * Enable or disable the initial animation when a series is displayed. - * The animation can also be set as a configuration object. Please - * note that this option only applies to the initial animation of the - * series itself. For other animations, see [chart.animation](#chart. - * animation) and the animation parameter under the API methods. The - * following properties are supported: - * - *
- * - *
duration
- * - *
The duration of the animation in milliseconds.
- * - *
easing
- * - *
A string reference to an easing function set on the `Math` object. - * See the _Custom easing function_ demo below.
- * - *
- * - * Due to poor performance, animation is disabled in old IE browsers - * for several chart types. - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/series-animation-disabled/ - * Animation disabled - * @sample {highcharts} highcharts/plotoptions/series-animation-slower/ - * Slower animation - * @sample {highcharts} highcharts/plotoptions/series-animation-easing/ - * Custom easing function - * @sample {highstock} stock/plotoptions/animation-slower/ - * Slower animation - * @sample {highstock} stock/plotoptions/animation-easing/ - * Custom easing function - * @sample {highmaps} maps/plotoptions/series-animation-true/ - * Animation enabled on map series - * @sample {highmaps} maps/plotoptions/mapbubble-animation-false/ - * Disabled on mapbubble series - * @default {highcharts} true - * @default {highstock} true - * @default {highmaps} false - */ - animation: { - duration: 1000 - }, - - /** - * A class name to apply to the series' graphical elements. - * - * @type {String} - * @since 5.0.0 - * @apioption plotOptions.series.className - */ - - /** - * The main color of the series. In line type series it applies to the - * line and the point markers unless otherwise specified. In bar type - * series it applies to the bars unless a color is specified per point. - * The default value is pulled from the `options.colors` array. - * - * In styled mode, the color can be defined by the - * [colorIndex](#plotOptions.series.colorIndex) option. Also, the series - * color can be set with the `.highcharts-series`, `.highcharts-color-{n}`, - * `.highcharts-{type}-series` or `.highcharts-series-{n}` class, or - * individual classes given by the `className` option. - * - * @productdesc {highmaps} - * In maps, the series color is rarely used, as most choropleth maps use the - * color to denote the value of each point. The series color can however be - * used in a map with multiple series holding categorized data. - * - * @type {Color} - * @sample {highcharts} highcharts/plotoptions/series-color-general/ - * General plot option - * @sample {highcharts} highcharts/plotoptions/series-color-specific/ - * One specific series - * @sample {highcharts} highcharts/plotoptions/series-color-area/ - * Area color - * @sample {highmaps} maps/demo/category-map/ - * Category map by multiple series - * @apioption plotOptions.series.color - */ - - /** - * Styled mode only. A specific color index to use for the series, so its - * graphic representations are given the class name `highcharts-color- - * {n}`. - * - * @type {Number} - * @since 5.0.0 - * @apioption plotOptions.series.colorIndex - */ - - - /** - * Whether to connect a graph line across null points, or render a gap - * between the two points on either side of the null. - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/series-connectnulls-false/ - * False by default - * @sample {highcharts} highcharts/plotoptions/series-connectnulls-true/ - * True - * @product highcharts highstock - * @apioption plotOptions.series.connectNulls - */ - - - /** - * You can set the cursor to "pointer" if you have click events attached - * to the series, to signal to the user that the points and lines can - * be clicked. - * - * @validvalue [null, "default", "none", "help", "pointer", "crosshair"] - * @type {String} - * @see In styled mode, the series cursor can be set with the same classes - * as listed under [series.color](#plotOptions.series.color). - * @sample {highcharts} highcharts/plotoptions/series-cursor-line/ - * On line graph - * @sample {highcharts} highcharts/plotoptions/series-cursor-column/ - * On columns - * @sample {highcharts} highcharts/plotoptions/series-cursor-scatter/ - * On scatter markers - * @sample {highstock} stock/plotoptions/cursor/ - * Pointer on a line graph - * @sample {highmaps} maps/plotoptions/series-allowpointselect/ - * Map area - * @sample {highmaps} maps/plotoptions/mapbubble-allowpointselect/ - * Map bubble - * @apioption plotOptions.series.cursor - */ - - - /** - * A name for the dash style to use for the graph, or for some series types - * the outline of each shape. The value for the `dashStyle` include: - * - * * Solid - * * ShortDash - * * ShortDot - * * ShortDashDot - * * ShortDashDotDot - * * Dot - * * Dash - * * LongDash - * * DashDot - * * LongDashDot - * * LongDashDotDot - * - * @validvalue ["Solid", "ShortDash", "ShortDot", "ShortDashDot", - * "ShortDashDotDot", "Dot", "Dash" ,"LongDash", "DashDot", - * "LongDashDot", "LongDashDotDot"] - * @type {String} - * @see In styled mode, the [stroke dash-array](http://jsfiddle.net/gh/get/ - * library/pure/highcharts/highcharts/tree/master/samples/highcharts/css/ - * series-dashstyle/) can be set with the same classes as listed under - * [series.color](#plotOptions.series.color). - * - * @sample {highcharts} highcharts/plotoptions/series-dashstyle-all/ - * Possible values demonstrated - * @sample {highcharts} highcharts/plotoptions/series-dashstyle/ - * Chart suitable for printing in black and white - * @sample {highstock} highcharts/plotoptions/series-dashstyle-all/ - * Possible values demonstrated - * @sample {highmaps} highcharts/plotoptions/series-dashstyle-all/ - * Possible values demonstrated - * @sample {highmaps} maps/plotoptions/series-dashstyle/ - * Dotted borders on a map - * @default Solid - * @since 2.1 - * @apioption plotOptions.series.dashStyle - */ - - /** - * Requires the Accessibility module. - * - * A description of the series to add to the screen reader information - * about the series. - * - * @type {String} - * @default undefined - * @since 5.0.0 - * @apioption plotOptions.series.description - */ - - - - - - /** - * Enable or disable the mouse tracking for a specific series. This - * includes point tooltips and click events on graphs and points. For - * large datasets it improves performance. - * - * @type {Boolean} - * @sample {highcharts} - * highcharts/plotoptions/series-enablemousetracking-false/ - * No mouse tracking - * @sample {highmaps} - * maps/plotoptions/series-enablemousetracking-false/ - * No mouse tracking - * @default true - * @apioption plotOptions.series.enableMouseTracking - */ - - /** - * By default, series are exposed to screen readers as regions. By enabling - * this option, the series element itself will be exposed in the same - * way as the data points. This is useful if the series is not used - * as a grouping entity in the chart, but you still want to attach a - * description to the series. - * - * Requires the Accessibility module. - * - * @type {Boolean} - * @sample highcharts/accessibility/art-grants/ - * Accessible data visualization - * @default undefined - * @since 5.0.12 - * @apioption plotOptions.series.exposeElementToA11y - */ - - /** - * Whether to use the Y extremes of the total chart width or only the - * zoomed area when zooming in on parts of the X axis. By default, the - * Y axis adjusts to the min and max of the visible data. Cartesian - * series only. - * - * @type {Boolean} - * @default false - * @since 4.1.6 - * @product highcharts highstock - * @apioption plotOptions.series.getExtremesFromAll - */ - - /** - * An id for the series. This can be used after render time to get a - * pointer to the series object through `chart.get()`. - * - * @type {String} - * @sample {highcharts} highcharts/plotoptions/series-id/ Get series by id - * @since 1.2.0 - * @apioption series.id - */ - - /** - * The index of the series in the chart, affecting the internal index - * in the `chart.series` array, the visible Z index as well as the order - * in the legend. - * - * @type {Number} - * @default undefined - * @since 2.3.0 - * @apioption series.index - */ - - /** - * An array specifying which option maps to which key in the data point - * array. This makes it convenient to work with unstructured data arrays - * from different sources. - * - * @type {Array} - * @see [series.data](#series.line.data) - * @sample {highcharts|highstock} highcharts/series/data-keys/ - * An extended data array with keys - * @since 4.1.6 - * @product highcharts highstock - * @apioption plotOptions.series.keys - */ - - /** - * The sequential index of the series in the legend. - * - * @sample {highcharts|highstock} highcharts/series/legendindex/ - * Legend in opposite order - * @type {Number} - * @see [legend.reversed](#legend.reversed), [yAxis.reversedStacks](#yAxis. - * reversedStacks) - * @apioption series.legendIndex - */ - - /** - * The line cap used for line ends and line joins on the graph. - * - * @validvalue ["round", "square"] - * @type {String} - * @default round - * @product highcharts highstock - * @apioption plotOptions.series.linecap - */ - - /** - * The [id](#series.id) of another series to link to. Additionally, - * the value can be ":previous" to link to the previous series. When - * two series are linked, only the first one appears in the legend. - * Toggling the visibility of this also toggles the linked series. - * - * @type {String} - * @sample {highcharts} highcharts/demo/arearange-line/ Linked series - * @sample {highstock} highcharts/demo/arearange-line/ Linked series - * @since 3.0 - * @product highcharts highstock - * @apioption plotOptions.series.linkedTo - */ - - /** - * The name of the series as shown in the legend, tooltip etc. - * - * @type {String} - * @sample {highcharts} highcharts/series/name/ Series name - * @sample {highmaps} maps/demo/category-map/ Series name - * @apioption series.name - */ - - /** - * The color for the parts of the graph or points that are below the - * [threshold](#plotOptions.series.threshold). - * - * @type {Color} - * @see In styled mode, a negative color is applied by setting this - * option to `true` combined with the `.highcharts-negative` class name. - * - * @sample {highcharts} highcharts/plotoptions/series-negative-color/ - * Spline, area and column - * @sample {highcharts} highcharts/plotoptions/arearange-negativecolor/ - * Arearange - * @sample {highcharts} highcharts/css/series-negative-color/ - * Styled mode - * @sample {highstock} highcharts/plotoptions/series-negative-color/ - * Spline, area and column - * @sample {highstock} highcharts/plotoptions/arearange-negativecolor/ - * Arearange - * @sample {highmaps} highcharts/plotoptions/series-negative-color/ - * Spline, area and column - * @sample {highmaps} highcharts/plotoptions/arearange-negativecolor/ - * Arearange - * @default null - * @since 3.0 - * @apioption plotOptions.series.negativeColor - */ - - /** - * Same as [accessibility.pointDescriptionFormatter](#accessibility. - * pointDescriptionFormatter), but for an individual series. Overrides - * the chart wide configuration. - * - * @type {Function} - * @since 5.0.12 - * @apioption plotOptions.series.pointDescriptionFormatter - */ - - /** - * If no x values are given for the points in a series, `pointInterval` - * defines the interval of the x values. For example, if a series contains - * one value every decade starting from year 0, set `pointInterval` to - * `10`. In true `datetime` axes, the `pointInterval` is set in - * milliseconds. - * - * It can be also be combined with `pointIntervalUnit` to draw irregular - * time intervals. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-pointstart-datetime/ - * Datetime X axis - * @sample {highstock} stock/plotoptions/pointinterval-pointstart/ - * Using pointStart and pointInterval - * @default 1 - * @product highcharts highstock - * @apioption plotOptions.series.pointInterval - */ - - /** - * On datetime series, this allows for setting the - * [pointInterval](#plotOptions.series.pointInterval) to irregular time - * units, `day`, `month` and `year`. A day is usually the same as 24 hours, - * but `pointIntervalUnit` also takes the DST crossover into consideration - * when dealing with local time. Combine this option with `pointInterval` - * to draw weeks, quarters, 6 months, 10 years etc. - * - * @validvalue [null, "day", "month", "year"] - * @type {String} - * @sample {highcharts} highcharts/plotoptions/series-pointintervalunit/ - * One point a month - * @sample {highstock} highcharts/plotoptions/series-pointintervalunit/ - * One point a month - * @since 4.1.0 - * @product highcharts highstock - * @apioption plotOptions.series.pointIntervalUnit - */ - - /** - * Possible values: `null`, `"on"`, `"between"`. - * - * In a column chart, when pointPlacement is `"on"`, the point will - * not create any padding of the X axis. In a polar column chart this - * means that the first column points directly north. If the pointPlacement - * is `"between"`, the columns will be laid out between ticks. This - * is useful for example for visualising an amount between two points - * in time or in a certain sector of a polar chart. - * - * Since Highcharts 3.0.2, the point placement can also be numeric, - * where 0 is on the axis value, -0.5 is between this value and the - * previous, and 0.5 is between this value and the next. Unlike the - * textual options, numeric point placement options won't affect axis - * padding. - * - * Note that pointPlacement needs a [pointRange](#plotOptions.series. - * pointRange) to work. For column series this is computed, but for - * line-type series it needs to be set. - * - * Defaults to `null` in cartesian charts, `"between"` in polar charts. - * - * @validvalue [null, "on", "between"] - * @type {String|Number} - * @see [xAxis.tickmarkPlacement](#xAxis.tickmarkPlacement) - * @sample {highcharts|highstock} - * highcharts/plotoptions/series-pointplacement-between/ - * Between in a column chart - * @sample {highcharts|highstock} - * highcharts/plotoptions/series-pointplacement-numeric/ - * Numeric placement for custom layout - * @default null - * @since 2.3.0 - * @product highcharts highstock - * @apioption plotOptions.series.pointPlacement - */ - - /** - * If no x values are given for the points in a series, pointStart defines - * on what value to start. For example, if a series contains one yearly - * value starting from 1945, set pointStart to 1945. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-pointstart-linear/ - * Linear - * @sample {highcharts} highcharts/plotoptions/series-pointstart-datetime/ - * Datetime - * @sample {highstock} stock/plotoptions/pointinterval-pointstart/ - * Using pointStart and pointInterval - * @default 0 - * @product highcharts highstock - * @apioption plotOptions.series.pointStart - */ - - /** - * Whether to select the series initially. If `showCheckbox` is true, - * the checkbox next to the series name in the legend will be checked for a - * selected series. - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/series-selected/ - * One out of two series selected - * @default false - * @since 1.2.0 - * @apioption plotOptions.series.selected - */ - - /** - * Whether to apply a drop shadow to the graph line. Since 2.3 the shadow - * can be an object configuration containing `color`, `offsetX`, `offsetY`, - * `opacity` and `width`. - * - * @type {Boolean|Object} - * @sample {highcharts} highcharts/plotoptions/series-shadow/ Shadow enabled - * @default false - * @apioption plotOptions.series.shadow - */ - - /** - * Whether to display this particular series or series type in the legend. - * The default value is `true` for standalone series, `false` for linked - * series. - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/series-showinlegend/ - * One series in the legend, one hidden - * @default true - * @apioption plotOptions.series.showInLegend - */ - - /** - * If set to `True`, the accessibility module will skip past the points - * in this series for keyboard navigation. - * - * @type {Boolean} - * @since 5.0.12 - * @apioption plotOptions.series.skipKeyboardNavigation - */ - - /** - * This option allows grouping series in a stacked chart. The stack - * option can be a string or a number or anything else, as long as the - * grouped series' stack options match each other. - * - * @type {String} - * @sample {highcharts} highcharts/series/stack/ Stacked and grouped columns - * @default null - * @since 2.1 - * @product highcharts highstock - * @apioption series.stack - */ - - /** - * Whether to stack the values of each series on top of each other. - * Possible values are `null` to disable, `"normal"` to stack by value or - * `"percent"`. When stacking is enabled, data must be sorted in ascending - * X order. A special stacking option is with the streamgraph series type, - * where the stacking option is set to `"stream"`. - * - * @validvalue [null, "normal", "percent"] - * @type {String} - * @see [yAxis.reversedStacks](#yAxis.reversedStacks) - * @sample {highcharts} highcharts/plotoptions/series-stacking-line/ - * Line - * @sample {highcharts} highcharts/plotoptions/series-stacking-column/ - * Column - * @sample {highcharts} highcharts/plotoptions/series-stacking-bar/ - * Bar - * @sample {highcharts} highcharts/plotoptions/series-stacking-area/ - * Area - * @sample {highcharts} highcharts/plotoptions/series-stacking-percent-line/ - * Line - * @sample {highcharts} - * highcharts/plotoptions/series-stacking-percent-column/ - * Column - * @sample {highcharts} highcharts/plotoptions/series-stacking-percent-bar/ - * Bar - * @sample {highcharts} highcharts/plotoptions/series-stacking-percent-area/ - * Area - * @sample {highstock} stock/plotoptions/stacking/ - * Area - * @default null - * @product highcharts highstock - * @apioption plotOptions.series.stacking - */ - - /** - * Whether to apply steps to the line. Possible values are `left`, `center` - * and `right`. - * - * @validvalue [null, "left", "center", "right"] - * @type {String} - * @sample {highcharts} highcharts/plotoptions/line-step/ - * Different step line options - * @sample {highcharts} highcharts/plotoptions/area-step/ - * Stepped, stacked area - * @sample {highstock} stock/plotoptions/line-step/ - * Step line - * @default {highcharts} null - * @default {highstock} false - * @since 1.2.5 - * @product highcharts highstock - * @apioption plotOptions.series.step - */ - - /** - * The threshold, also called zero level or base level. For line type - * series this is only used in conjunction with - * [negativeColor](#plotOptions.series.negativeColor). - * - * @type {Number} - * @see [softThreshold](#plotOptions.series.softThreshold). - * @default 0 - * @since 3.0 - * @product highcharts highstock - * @apioption plotOptions.series.threshold - */ - - /** - * The type of series, for example `line` or `column`. - * - * @validvalue [null, "line", "spline", "column", "area", "areaspline", - * "pie", "arearange", "areasplinerange", "boxplot", "bubble", - * "columnrange", "errorbar", "funnel", "gauge", "scatter", - * "waterfall"] - * @type {String} - * @sample {highcharts} highcharts/series/type/ - * Line and column in the same chart - * @sample {highmaps} maps/demo/mapline-mappoint/ - * Multiple types in the same map - * @apioption series.type - */ - - /** - * Set the initial visibility of the series. - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/series-visible/ - * Two series, one hidden and one visible - * @sample {highstock} stock/plotoptions/series-visibility/ - * Hidden series - * @default true - * @apioption plotOptions.series.visible - */ - - /** - * When using dual or multiple x axes, this number defines which xAxis - * the particular series is connected to. It refers to either the [axis - * id](#xAxis.id) or the index of the axis in the xAxis array, with - * 0 being the first. - * - * @type {Number|String} - * @default 0 - * @product highcharts highstock - * @apioption series.xAxis - */ - - /** - * When using dual or multiple y axes, this number defines which yAxis - * the particular series is connected to. It refers to either the [axis - * id](#yAxis.id) or the index of the axis in the yAxis array, with - * 0 being the first. - * - * @type {Number|String} - * @sample {highcharts} highcharts/series/yaxis/ - * Apply the column series to the secondary Y axis - * @default 0 - * @product highcharts highstock - * @apioption series.yAxis - */ - - /** - * Defines the Axis on which the zones are applied. - * - * @type {String} - * @see [zones](#plotOptions.series.zones) - * @sample {highcharts} highcharts/series/color-zones-zoneaxis-x/ - * Zones on the X-Axis - * @sample {highstock} highcharts/series/color-zones-zoneaxis-x/ - * Zones on the X-Axis - * @default y - * @since 4.1.0 - * @product highcharts highstock - * @apioption plotOptions.series.zoneAxis - */ - - /** - * Define the visual z index of the series. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-zindex-default/ - * With no z index, the series defined last are on top - * @sample {highcharts} highcharts/plotoptions/series-zindex/ - * With a z index, the series with the highest z index is on top - * @sample {highstock} highcharts/plotoptions/series-zindex-default/ - * With no z index, the series defined last are on top - * @sample {highstock} highcharts/plotoptions/series-zindex/ - * With a z index, the series with the highest z index is on top - * @product highcharts highstock - * @apioption series.zIndex - */ - - /** - * General event handlers for the series items. These event hooks can also - * be attached to the series at run time using the `Highcharts.addEvent` - * function. - */ - events: { - - /** - * Fires after the series has finished its initial animation, or in - * case animation is disabled, immediately as the series is displayed. - * - * @type {Function} - * @context Series - * @sample {highcharts} - * highcharts/plotoptions/series-events-afteranimate/ - * Show label after animate - * @sample {highstock} - * highcharts/plotoptions/series-events-afteranimate/ - * Show label after animate - * @since 4.0 - * @product highcharts highstock - * @apioption plotOptions.series.events.afterAnimate - */ - - /** - * Fires when the checkbox next to the series' name in the legend is - * clicked. One parameter, `event`, is passed to the function. The state - * of the checkbox is found by `event.checked`. The checked item is - * found by `event.item`. Return `false` to prevent the default action - * which is to toggle the select state of the series. - * - * @type {Function} - * @context Series - * @sample {highcharts} - * highcharts/plotoptions/series-events-checkboxclick/ - * Alert checkbox status - * @since 1.2.0 - * @apioption plotOptions.series.events.checkboxClick - */ - - /** - * Fires when the series is clicked. One parameter, `event`, is passed - * to the function, containing common event information. Additionally, - * `event.point` holds a pointer to the nearest point on the graph. - * - * @type {Function} - * @context Series - * @sample {highcharts} highcharts/plotoptions/series-events-click/ - * Alert click info - * @sample {highstock} stock/plotoptions/series-events-click/ - * Alert click info - * @sample {highmaps} maps/plotoptions/series-events-click/ - * Display click info in subtitle - * @apioption plotOptions.series.events.click - */ - - /** - * Fires when the series is hidden after chart generation time, either - * by clicking the legend item or by calling `.hide()`. - * - * @type {Function} - * @context Series - * @sample {highcharts} highcharts/plotoptions/series-events-hide/ - * Alert when the series is hidden by clicking the legend item - * @since 1.2.0 - * @apioption plotOptions.series.events.hide - */ - - /** - * Fires when the legend item belonging to the series is clicked. One - * parameter, `event`, is passed to the function. The default action - * is to toggle the visibility of the series. This can be prevented - * by returning `false` or calling `event.preventDefault()`. - * - * @type {Function} - * @context Series - * @sample {highcharts} - * highcharts/plotoptions/series-events-legenditemclick/ - * Confirm hiding and showing - * @apioption plotOptions.series.events.legendItemClick - */ - - /** - * Fires when the mouse leaves the graph. One parameter, `event`, is - * passed to the function, containing common event information. If the - * [stickyTracking](#plotOptions.series) option is true, `mouseOut` - * doesn't happen before the mouse enters another graph or leaves the - * plot area. - * - * @type {Function} - * @context Series - * @sample {highcharts} - * highcharts/plotoptions/series-events-mouseover-sticky/ - * With sticky tracking by default - * @sample {highcharts} - * highcharts/plotoptions/series-events-mouseover-no-sticky/ - * Without sticky tracking - * @apioption plotOptions.series.events.mouseOut - */ - - /** - * Fires when the mouse enters the graph. One parameter, `event`, is - * passed to the function, containing common event information. - * - * @type {Function} - * @context Series - * @sample {highcharts} - * highcharts/plotoptions/series-events-mouseover-sticky/ - * With sticky tracking by default - * @sample {highcharts} - * highcharts/plotoptions/series-events-mouseover-no-sticky/ - * Without sticky tracking - * @apioption plotOptions.series.events.mouseOver - */ - - /** - * Fires when the series is shown after chart generation time, either - * by clicking the legend item or by calling `.show()`. - * - * @type {Function} - * @context Series - * @sample {highcharts} highcharts/plotoptions/series-events-show/ - * Alert when the series is shown by clicking the legend item. - * @since 1.2.0 - * @apioption plotOptions.series.events.show - */ - - }, - - - - /** - * Options for the point markers of line-like series. Properties like - * `fillColor`, `lineColor` and `lineWidth` define the visual appearance - * of the markers. Other series types, like column series, don't have - * markers, but have visual options on the series level instead. - * - * In styled mode, the markers can be styled with the `.highcharts-point`, - * `.highcharts-point-hover` and `.highcharts-point-select` - * class names. - * - * @product highcharts highstock - */ - marker: { - - - - /** - * The width of the point marker's outline. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-marker-fillcolor/ - * 2px blue marker - * @default 0 - * @product highcharts highstock - */ - lineWidth: 0, - - - /** - * The color of the point marker's outline. When `null`, the series' - * or point's color is used. - * - * @type {Color} - * @sample {highcharts} highcharts/plotoptions/series-marker-fillcolor/ - * Inherit from series color (null) - * @product highcharts highstock - */ - lineColor: '#ffffff', - - /** - * The fill color of the point marker. When `null`, the series' or - * point's color is used. - * - * @type {Color} - * @sample {highcharts} highcharts/plotoptions/series-marker-fillcolor/ - * White fill - * @default null - * @product highcharts highstock - * @apioption plotOptions.series.marker.fillColor - */ - - - - /** - * Enable or disable the point marker. If `null`, the markers are hidden - * when the data is dense, and shown for more widespread data points. - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/series-marker-enabled/ - * Disabled markers - * @sample {highcharts} - * highcharts/plotoptions/series-marker-enabled-false/ - * Disabled in normal state but enabled on hover - * @sample {highstock} stock/plotoptions/series-marker/ - * Enabled markers - * @default {highcharts} null - * @default {highstock} false - * @product highcharts highstock - * @apioption plotOptions.series.marker.enabled - */ - - /** - * Image markers only. Set the image width explicitly. When using this - * option, a `width` must also be set. - * - * @type {Number} - * @sample {highcharts} - * highcharts/plotoptions/series-marker-width-height/ - * Fixed width and height - * @sample {highstock} - * highcharts/plotoptions/series-marker-width-height/ - * Fixed width and height - * @default null - * @since 4.0.4 - * @product highcharts highstock - * @apioption plotOptions.series.marker.height - */ - - /** - * A predefined shape or symbol for the marker. When null, the symbol - * is pulled from options.symbols. Other possible values are "circle", - * "square", "diamond", "triangle" and "triangle-down". - * - * Additionally, the URL to a graphic can be given on this form: - * "url(graphic.png)". Note that for the image to be applied to exported - * charts, its URL needs to be accessible by the export server. - * - * Custom callbacks for symbol path generation can also be added to - * `Highcharts.SVGRenderer.prototype.symbols`. The callback is then - * used by its method name, as shown in the demo. - * - * @validvalue [null, "circle", "square", "diamond", "triangle", - * "triangle-down"] - * @type {String} - * @sample {highcharts} highcharts/plotoptions/series-marker-symbol/ - * Predefined, graphic and custom markers - * @sample {highstock} highcharts/plotoptions/series-marker-symbol/ - * Predefined, graphic and custom markers - * @default null - * @product highcharts highstock - * @apioption plotOptions.series.marker.symbol - */ - - /** - * The radius of the point marker. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-marker-radius/ - * Bigger markers - * @default 4 - * @product highcharts highstock - */ - radius: 4, - - /** - * Image markers only. Set the image width explicitly. When using this - * option, a `height` must also be set. - * - * @type {Number} - * @sample {highcharts} - * highcharts/plotoptions/series-marker-width-height/ - * Fixed width and height - * @sample {highstock} - * highcharts/plotoptions/series-marker-width-height/ - * Fixed width and height - * @default null - * @since 4.0.4 - * @product highcharts highstock - * @apioption plotOptions.series.marker.width - */ - - - /** - * States for a single point marker. - * @product highcharts highstock - */ - states: { - /** - * The hover state for a single point marker. - * @product highcharts highstock - */ - hover: { - - /** - * Animation when hovering over the marker. - * @type {Boolean|Object} - */ - animation: { - duration: 50 - }, - - /** - * Enable or disable the point marker. - * - * @type {Boolean} - * @sample {highcharts} - * highcharts/plotoptions/series-marker-states-hover-enabled/ - * Disabled hover state - * @default true - * @product highcharts highstock - */ - enabled: true, - - /** - * The fill color of the marker in hover state. - * - * @type {Color} - * @default null - * @product highcharts highstock - * @apioption plotOptions.series.marker.states.hover.fillColor - */ - - /** - * The color of the point marker's outline. When `null`, the - * series' or point's color is used. - * - * @type {Color} - * @sample {highcharts} - * highcharts/plotoptions/series-marker-states-hover-linecolor/ - * White fill color, black line color - * @default #ffffff - * @product highcharts highstock - * @apioption plotOptions.series.marker.states.hover.lineColor - */ - - /** - * The width of the point marker's outline. - * - * @type {Number} - * @sample {highcharts} - * highcharts/plotoptions/series-marker-states-hover-linewidth/ - * 3px line width - * @default 0 - * @product highcharts highstock - * @apioption plotOptions.series.marker.states.hover.lineWidth - */ - - /** - * The radius of the point marker. In hover state, it defaults to the - * normal state's radius + 2 as per the [radiusPlus](#plotOptions.series. - * marker.states.hover.radiusPlus) option. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-marker-states-hover-radius/ 10px radius - * @product highcharts highstock - * @apioption plotOptions.series.marker.states.hover.radius - */ - - /** - * The number of pixels to increase the radius of the hovered point. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-states-hover-linewidthplus/ 5 pixels greater radius on hover - * @sample {highstock} highcharts/plotoptions/series-states-hover-linewidthplus/ 5 pixels greater radius on hover - * @default 2 - * @since 4.0.3 - * @product highcharts highstock - */ - radiusPlus: 2, - - - - /** - * The additional line width for a hovered point. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-states-hover-linewidthplus/ 2 pixels wider on hover - * @sample {highstock} highcharts/plotoptions/series-states-hover-linewidthplus/ 2 pixels wider on hover - * @default 1 - * @since 4.0.3 - * @product highcharts highstock - */ - lineWidthPlus: 1 - - }, - - - - - /** - * The appearance of the point marker when selected. In order to - * allow a point to be selected, set the `series.allowPointSelect` - * option to true. - * - * @product highcharts highstock - */ - select: { - - /** - * Enable or disable visible feedback for selection. - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/series-marker-states-select-enabled/ - * Disabled select state - * @default true - * @product highcharts highstock - * @apioption plotOptions.series.marker.states.select.enabled - */ - - /** - * The fill color of the point marker. - * - * @type {Color} - * @sample {highcharts} highcharts/plotoptions/series-marker-states-select-fillcolor/ - * Solid red discs for selected points - * @default null - * @product highcharts highstock - */ - fillColor: '#cccccc', - - - - /** - * The color of the point marker's outline. When `null`, the series' - * or point's color is used. - * - * @type {Color} - * @sample {highcharts} highcharts/plotoptions/series-marker-states-select-linecolor/ - * Red line color for selected points - * @default #000000 - * @product highcharts highstock - */ - lineColor: '#000000', - - - - /** - * The width of the point marker's outline. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-marker-states-select-linewidth/ - * 3px line width for selected points - * @default 0 - * @product highcharts highstock - */ - lineWidth: 2 - - /** - * The radius of the point marker. In hover state, it defaults to the - * normal state's radius + 2. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-marker-states-select-radius/ - * 10px radius for selected points - * @product highcharts highstock - * @apioption plotOptions.series.marker.states.select.radius - */ - - } - - } - }, - - - - /** - * Properties for each single point. - */ - point: { - - - /** - * Events for each single point. - */ - events: { - - /** - * Fires when a point is clicked. One parameter, `event`, is passed - * to the function, containing common event information. - * - * If the `series.allowPointSelect` option is true, the default action - * for the point's click event is to toggle the point's select state. - * Returning `false` cancels this action. - * - * @type {Function} - * @context Point - * @sample {highcharts} highcharts/plotoptions/series-point-events-click/ Click marker to alert values - * @sample {highcharts} highcharts/plotoptions/series-point-events-click-column/ Click column - * @sample {highcharts} highcharts/plotoptions/series-point-events-click-url/ Go to URL - * @sample {highmaps} maps/plotoptions/series-point-events-click/ Click marker to display values - * @sample {highmaps} maps/plotoptions/series-point-events-click-url/ Go to URL - * @apioption plotOptions.series.point.events.click - */ - - /** - * Fires when the mouse leaves the area close to the point. One parameter, - * `event`, is passed to the function, containing common event information. - * - * @type {Function} - * @context Point - * @sample {highcharts} highcharts/plotoptions/series-point-events-mouseover/ Show values in the chart's corner on mouse over - * @apioption plotOptions.series.point.events.mouseOut - */ - - /** - * Fires when the mouse enters the area close to the point. One parameter, - * `event`, is passed to the function, containing common event information. - * - * @type {Function} - * @context Point - * @sample {highcharts} highcharts/plotoptions/series-point-events-mouseover/ Show values in the chart's corner on mouse over - * @apioption plotOptions.series.point.events.mouseOver - */ - - /** - * Fires when the point is removed using the `.remove()` method. One - * parameter, `event`, is passed to the function. Returning `false` - * cancels the operation. - * - * @type {Function} - * @context Point - * @sample {highcharts} highcharts/plotoptions/series-point-events-remove/ Remove point and confirm - * @since 1.2.0 - * @apioption plotOptions.series.point.events.remove - */ - - /** - * Fires when the point is selected either programmatically or following - * a click on the point. One parameter, `event`, is passed to the function. - * Returning `false` cancels the operation. - * - * @type {Function} - * @context Point - * @sample {highcharts} highcharts/plotoptions/series-point-events-select/ Report the last selected point - * @sample {highmaps} maps/plotoptions/series-allowpointselect/ Report select and unselect - * @since 1.2.0 - * @apioption plotOptions.series.point.events.select - */ - - /** - * Fires when the point is unselected either programmatically or following - * a click on the point. One parameter, `event`, is passed to the function. - * Returning `false` cancels the operation. - * - * @type {Function} - * @context Point - * @sample {highcharts} highcharts/plotoptions/series-point-events-unselect/ Report the last unselected point - * @sample {highmaps} maps/plotoptions/series-allowpointselect/ Report select and unselect - * @since 1.2.0 - * @apioption plotOptions.series.point.events.unselect - */ - - /** - * Fires when the point is updated programmatically through the `.update()` - * method. One parameter, `event`, is passed to the function. The new - * point options can be accessed through `event.options`. Returning - * `false` cancels the operation. - * - * @type {Function} - * @context Point - * @sample {highcharts} highcharts/plotoptions/series-point-events-update/ Confirm point updating - * @since 1.2.0 - * @apioption plotOptions.series.point.events.update - */ - - } - }, - - - - /** - * Options for the series data labels, appearing next to each data - * point. - * - * In styled mode, the data labels can be styled wtih the `.highcharts-data-label-box` and `.highcharts-data-label` class names ([see example](http://jsfiddle. - * net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/css/series- - * datalabels)). - */ - dataLabels: { - - - /** - * The alignment of the data label compared to the point. If `right`, - * the right side of the label should be touching the point. For - * points with an extent, like columns, the alignments also dictates - * how to align it inside the box, as given with the [inside](#plotOptions. - * column.dataLabels.inside) option. Can be one of "left", "center" - * or "right". - * - * @validvalue ["left", "center", "right"] - * @type {String} - * @sample {highcharts} highcharts/plotoptions/series-datalabels-align-left/ Left aligned - * @default center - */ - align: 'center', - - - /** - * Whether to allow data labels to overlap. To make the labels less - * sensitive for overlapping, the [dataLabels.padding](#plotOptions. - * series.dataLabels.padding) can be set to 0. - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/series-datalabels-allowoverlap-false/ Don't allow overlap - * @sample {highstock} highcharts/plotoptions/series-datalabels-allowoverlap-false/ Don't allow overlap - * @sample {highmaps} highcharts/plotoptions/series-datalabels-allowoverlap-false/ Don't allow overlap - * @default false - * @since 4.1.0 - * @apioption plotOptions.series.dataLabels.allowOverlap - */ - - - /** - * The border radius in pixels for the data label. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/ Data labels box options - * @sample {highstock} highcharts/plotoptions/series-datalabels-box/ Data labels box options - * @sample {highmaps} maps/plotoptions/series-datalabels-box/ Data labels box options - * @default 0 - * @since 2.2.1 - * @apioption plotOptions.series.dataLabels.borderRadius - */ - - - /** - * The border width in pixels for the data label. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/ Data labels box options - * @sample {highstock} highcharts/plotoptions/series-datalabels-box/ Data labels box options - * @default 0 - * @since 2.2.1 - * @apioption plotOptions.series.dataLabels.borderWidth - */ - - /** - * A class name for the data label. Particularly in styled mode, this can - * be used to give each series' or point's data label unique styling. - * In addition to this option, a default color class name is added - * so that we can give the labels a [contrast text shadow](http://jsfiddle. - * net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/css/data- - * label-contrast/). - * - * @type {String} - * @sample {highcharts} highcharts/css/series-datalabels/ Styling by CSS - * @sample {highstock} highcharts/css/series-datalabels/ Styling by CSS - * @sample {highmaps} highcharts/css/series-datalabels/ Styling by CSS - * @since 5.0.0 - * @apioption plotOptions.series.dataLabels.className - */ - - /** - * The text color for the data labels. Defaults to `null`. For certain series - * types, like column or map, the data labels can be drawn inside the points. - * In this case the data label will be drawn with maximum contrast by default. - * Additionally, it will be given a `text-outline` style with the opposite - * color, to further increase the contrast. This can be overridden by setting - * the `text-outline` style to `none` in the `dataLabels.style` option. - * - * @type {Color} - * @sample {highcharts} highcharts/plotoptions/series-datalabels-color/ - * Red data labels - * @sample {highmaps} maps/demo/color-axis/ - * White data labels - * @apioption plotOptions.series.dataLabels.color - */ - - /** - * Whether to hide data labels that are outside the plot area. By default, - * the data label is moved inside the plot area according to the [overflow](#plotOptions. - * series.dataLabels.overflow) option. - * - * @type {Boolean} - * @default true - * @since 2.3.3 - * @apioption plotOptions.series.dataLabels.crop - */ - - /** - * Whether to defer displaying the data labels until the initial series - * animation has finished. - * - * @type {Boolean} - * @default true - * @since 4.0 - * @product highcharts highstock - * @apioption plotOptions.series.dataLabels.defer - */ - - /** - * Enable or disable the data labels. - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/series-datalabels-enabled/ Data labels enabled - * @sample {highmaps} maps/demo/color-axis/ Data labels enabled - * @default false - * @apioption plotOptions.series.dataLabels.enabled - */ - - /** - * A [format string](http://www.highcharts.com/docs/chart-concepts/labels- - * and-string-formatting) for the data label. Available variables are - * the same as for `formatter`. - * - * @type {String} - * @sample {highcharts} highcharts/plotoptions/series-datalabels-format/ Add a unit - * @sample {highstock} highcharts/plotoptions/series-datalabels-format/ Add a unit - * @sample {highmaps} maps/plotoptions/series-datalabels-format/ Formatted value in the data label - * @default {highcharts} {y} - * @default {highstock} {y} - * @default {highmaps} {point.value} - * @since 3.0 - * @apioption plotOptions.series.dataLabels.format - */ - - /** - * Callback JavaScript function to format the data label. Note that - * if a `format` is defined, the format takes precedence and the formatter - * is ignored. Available data are: - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
`this.percentage`Stacked series and pies only. The point's percentage of the - * total.
`this.point`The point object. The point name, if defined, is available - * through `this.point.name`.
`this.series`:The series object. The series name is available through `this. - * series.name`.
`this.total`Stacked series only. The total value at this point's x value. - *
`this.x`:The x value.
`this.y`:The y value.
- * - * @type {Function} - * @sample {highmaps} maps/plotoptions/series-datalabels-format/ Formatted value - */ - formatter: function() { - return this.y === null ? '' : H.numberFormat(this.y, -1); - }, - - - - /** - * Styles for the label. The default `color` setting is `"contrast"`, - * which is a pseudo color that Highcharts picks up and applies the - * maximum contrast to the underlying point item, for example the - * bar in a bar chart. - * - * The `textOutline` is a pseudo property that - * applies an outline of the given width with the given color, which - * by default is the maximum contrast to the text. So a bright text - * color will result in a black text outline for maximum readability - * on a mixed background. In some cases, especially with grayscale - * text, the text outline doesn't work well, in which cases it can - * be disabled by setting it to `"none"`. When `useHTML` is true, the - * `textOutline` will not be picked up. In this, case, the same effect - * can be acheived through the `text-shadow` CSS property. - * - * @type {CSSObject} - * @sample {highcharts} highcharts/plotoptions/series-datalabels-style/ - * Bold labels - * @sample {highmaps} maps/demo/color-axis/ Bold labels - * @default {"color": "contrast", "fontSize": "11px", "fontWeight": "bold", "textOutline": "1px contrast" } - * @since 4.1.0 - */ - style: { - fontSize: '11px', - fontWeight: 'bold', - color: 'contrast', - textOutline: '1px contrast' - }, - - /** - * The background color or gradient for the data label. - * - * @type {Color} - * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/ Data labels box options - * @sample {highmaps} maps/plotoptions/series-datalabels-box/ Data labels box options - * @since 2.2.1 - * @apioption plotOptions.series.dataLabels.backgroundColor - */ - - /** - * The border color for the data label. Defaults to `undefined`. - * - * @type {Color} - * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/ Data labels box options - * @sample {highstock} highcharts/plotoptions/series-datalabels-box/ Data labels box options - * @default undefined - * @since 2.2.1 - * @apioption plotOptions.series.dataLabels.borderColor - */ - - /** - * The shadow of the box. Works best with `borderWidth` or `backgroundColor`. - * Since 2.3 the shadow can be an object configuration containing `color`, - * `offsetX`, `offsetY`, `opacity` and `width`. - * - * @type {Boolean|Object} - * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/ Data labels box options - * @sample {highstock} highcharts/plotoptions/series-datalabels-box/ Data labels box options - * @default false - * @since 2.2.1 - * @apioption plotOptions.series.dataLabels.shadow - */ - - - /** - * For points with an extent, like columns or map areas, whether to align the data - * label inside the box or to the actual value point. Defaults to `false` - * in most cases, `true` in stacked columns. - * - * @type {Boolean} - * @since 3.0 - * @apioption plotOptions.series.dataLabels.inside - */ - - /** - * How to handle data labels that flow outside the plot area. The default - * is `justify`, which aligns them inside the plot area. For columns - * and bars, this means it will be moved inside the bar. To display - * data labels outside the plot area, set `crop` to `false` and `overflow` - * to `"none"`. - * - * @validvalue ["justify", "none"] - * @type {String} - * @default justify - * @since 3.0.6 - * @apioption plotOptions.series.dataLabels.overflow - */ - - /** - * Text rotation in degrees. Note that due to a more complex structure, - * backgrounds, borders and padding will be lost on a rotated data - * label. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-datalabels-rotation/ Vertical labels - * @default 0 - * @apioption plotOptions.series.dataLabels.rotation - */ - - /** - * Whether to [use HTML](http://www.highcharts.com/docs/chart-concepts/labels- - * and-string-formatting#html) to render the labels. - * - * @type {Boolean} - * @default false - * @apioption plotOptions.series.dataLabels.useHTML - */ - - /** - * The vertical alignment of a data label. Can be one of `top`, `middle` - * or `bottom`. The default value depends on the data, for instance - * in a column chart, the label is above positive values and below - * negative values. - * - * @validvalue ["top", "middle", "bottom"] - * @type {String} - * @since 2.3.3 - */ - verticalAlign: 'bottom', // above singular point - - - /** - * The x position offset of the label relative to the point. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-datalabels-rotation/ Vertical and positioned - * @default 0 - */ - x: 0, - - - /** - * The y position offset of the label relative to the point. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-datalabels-rotation/ Vertical and positioned - * @default -6 - */ - y: 0, - - - /** - * When either the `borderWidth` or the `backgroundColor` is set, - * this is the padding within the box. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/ Data labels box options - * @sample {highstock} highcharts/plotoptions/series-datalabels-box/ Data labels box options - * @sample {highmaps} maps/plotoptions/series-datalabels-box/ Data labels box options - * @default {highcharts} 5 - * @default {highstock} 5 - * @default {highmaps} 0 - * @since 2.2.1 - */ - padding: 5 - - /** - * The name of a symbol to use for the border around the label. Symbols - * are predefined functions on the Renderer object. - * - * @type {String} - * @sample {highcharts} highcharts/plotoptions/series-datalabels-shape/ A callout for annotations - * @sample {highstock} highcharts/plotoptions/series-datalabels-shape/ A callout for annotations - * @sample {highmaps} highcharts/plotoptions/series-datalabels-shape/ A callout for annotations (Highcharts demo) - * @default square - * @since 4.1.2 - * @apioption plotOptions.series.dataLabels.shape - */ - - /** - * The Z index of the data labels. The default Z index puts it above - * the series. Use a Z index of 2 to display it behind the series. - * - * @type {Number} - * @default 6 - * @since 2.3.5 - * @apioption plotOptions.series.dataLabels.zIndex - */ - - /** - * A declarative filter for which data labels to display. The - * declarative filter is designed for use when callback functions are - * not available, like when the chart options require a pure JSON - * structure or for use with graphical editors. For programmatic - * control, use the `formatter` instead, and return `false` to disable - * a single data label. - * - * @example - * filter: { - * property: 'percentage', - * operator: '>', - * value: 4 - * } - * - * @sample highcharts/demo/pie-monochrome - * Data labels filtered by percentage - * - * @type {Object} - * @since 6.0.3 - * @apioption plotOptions.series.dataLabels.filter - */ - - /** - * The point property to filter by. Point options are passed directly to - * properties, additionally there are `y` value, `percentage` and others - * listed under [Point](https://api.highcharts.com/class-reference/Highcharts.Point) - * members. - * - * @type {String} - * @apioption plotOptions.series.dataLabels.filter.property - */ - - /** - * The operator to compare by. Can be one of `>`, `<`, `>=`, `<=`, `==`, - * and `===`. - * - * @type {String} - * @validvalue [">", "<", ">=", "<=", "==", "===""] - * @apioption plotOptions.series.dataLabels.filter.operator - */ - - /** - * The value to compare against. - * - * @type {Mixed} - * @apioption plotOptions.series.dataLabels.filter.value - */ - }, - // draw points outside the plot area when the number of points is less than - // this - - - - /** - * When the series contains less points than the crop threshold, all - * points are drawn, even if the points fall outside the visible plot - * area at the current zoom. The advantage of drawing all points (including - * markers and columns), is that animation is performed on updates. - * On the other hand, when the series contains more points than the - * crop threshold, the series data is cropped to only contain points - * that fall within the plot area. The advantage of cropping away invisible - * points is to increase performance on large series. - * - * @type {Number} - * @default 300 - * @since 2.2 - * @product highcharts highstock - */ - cropThreshold: 300, - - - - /** - * The width of each point on the x axis. For example in a column chart - * with one value each day, the pointRange would be 1 day (= 24 * 3600 - * * 1000 milliseconds). This is normally computed automatically, but - * this option can be used to override the automatic value. - * - * @type {Number} - * @default 0 - * @product highstock - */ - pointRange: 0, - - /** - * When this is true, the series will not cause the Y axis to cross - * the zero plane (or [threshold](#plotOptions.series.threshold) option) - * unless the data actually crosses the plane. - * - * For example, if `softThreshold` is `false`, a series of 0, 1, 2, - * 3 will make the Y axis show negative values according to the `minPadding` - * option. If `softThreshold` is `true`, the Y axis starts at 0. - * - * @type {Boolean} - * @default true - * @since 4.1.9 - * @product highcharts highstock - */ - softThreshold: true, - - - - /** - * A wrapper object for all the series options in specific states. - * - * @type {plotOptions.series.states} - */ - states: { - - - /** - * Options for the hovered series. These settings override the normal - * state options when a series is moused over or touched. - * - */ - hover: { - - /** - * Enable separate styles for the hovered series to visualize that the - * user hovers either the series itself or the legend. . - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/series-states-hover-enabled/ Line - * @sample {highcharts} highcharts/plotoptions/series-states-hover-enabled-column/ Column - * @sample {highcharts} highcharts/plotoptions/series-states-hover-enabled-pie/ Pie - * @default true - * @since 1.2 - * @apioption plotOptions.series.states.hover.enabled - */ - - - /** - * Animation setting for hovering the graph in line-type series. - * - * @type {Boolean|Object} - * @default { "duration": 50 } - * @since 5.0.8 - * @product highcharts - */ - animation: { - /** - * The duration of the hover animation in milliseconds. By - * default the hover state animates quickly in, and slowly back - * to normal. - */ - duration: 50 - }, - - /** - * Pixel with of the graph line. By default this property is - * undefined, and the `lineWidthPlus` property dictates how much - * to increase the linewidth from normal state. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-states-hover-linewidth/ - * 5px line on hover - * @default undefined - * @product highcharts highstock - * @apioption plotOptions.series.states.hover.lineWidth - */ - - - /** - * The additional line width for the graph of a hovered series. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/series-states-hover-linewidthplus/ - * 5 pixels wider - * @sample {highstock} highcharts/plotoptions/series-states-hover-linewidthplus/ - * 5 pixels wider - * @default 1 - * @since 4.0.3 - * @product highcharts highstock - */ - lineWidthPlus: 1, - - - - /** - * In Highcharts 1.0, the appearance of all markers belonging to - * the hovered series. For settings on the hover state of the individual - * point, see [marker.states.hover](#plotOptions.series.marker.states. - * hover). - * - * @extends plotOptions.series.marker - * @deprecated - * @product highcharts highstock - */ - marker: { - // lineWidth: base + 1, - // radius: base + 1 - }, - - - - /** - * Options for the halo appearing around the hovered point in line- - * type series as well as outside the hovered slice in pie charts. - * By default the halo is filled by the current point or series - * color with an opacity of 0.25\. The halo can be disabled by setting - * the `halo` option to `false`. - * - * In styled mode, the halo is styled with the `.highcharts-halo` class, with colors inherited from `.highcharts-color-{n}`. - * - * @type {Object} - * @sample {highcharts} highcharts/plotoptions/halo/ Halo options - * @sample {highstock} highcharts/plotoptions/halo/ Halo options - * @since 4.0 - * @product highcharts highstock - */ - halo: { - - /** - * A collection of SVG attributes to override the appearance of the - * halo, for example `fill`, `stroke` and `stroke-width`. - * - * @type {Object} - * @since 4.0 - * @product highcharts highstock - * @apioption plotOptions.series.states.hover.halo.attributes - */ - - - /** - * The pixel size of the halo. For point markers this is the radius - * of the halo. For pie slices it is the width of the halo outside - * the slice. For bubbles it defaults to 5 and is the width of the - * halo outside the bubble. - * - * @type {Number} - * @default 10 - * @since 4.0 - * @product highcharts highstock - */ - size: 10, - - - - - /** - * Opacity for the halo unless a specific fill is overridden using - * the `attributes` setting. Note that Highcharts is only able to - * apply opacity to colors of hex or rgb(a) formats. - * - * @type {Number} - * @default 0.25 - * @since 4.0 - * @product highcharts highstock - */ - opacity: 0.25 - - } - }, - - - /** - * Specific options for point in selected states, after being selected - * by [allowPointSelect](#plotOptions.series.allowPointSelect) or - * programmatically. - * - * @type {Object} - * @extends plotOptions.series.states.hover - * @excluding brightness - * @sample {highmaps} maps/plotoptions/series-allowpointselect/ - * Allow point select demo - * @product highmaps - */ - select: { - marker: {} - } - }, - - - - /** - * Sticky tracking of mouse events. When true, the `mouseOut` event - * on a series isn't triggered until the mouse moves over another series, - * or out of the plot area. When false, the `mouseOut` event on a - * series is triggered when the mouse leaves the area around the series' - * graph or markers. This also implies the tooltip when not shared. When - * `stickyTracking` is false and `tooltip.shared` is false, the tooltip will - * be hidden when moving the mouse between series. Defaults to true for line - * and area type series, but to false for columns, pies etc. - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/series-stickytracking-true/ - * True by default - * @sample {highcharts} highcharts/plotoptions/series-stickytracking-false/ - * False - * @default {highcharts} true - * @default {highstock} true - * @default {highmaps} false - * @since 2.0 - */ - stickyTracking: true, - - /** - * A configuration object for the tooltip rendering of each single series. - * Properties are inherited from [tooltip](#tooltip), but only the - * following properties can be defined on a series level. - * - * @type {Object} - * @extends tooltip - * @excluding animation,backgroundColor,borderColor,borderRadius,borderWidth,crosshairs,enabled,formatter,positioner,shadow,shared,shape,snap,style,useHTML - * @since 2.3 - * @apioption plotOptions.series.tooltip - */ - - /** - * When a series contains a data array that is longer than this, only - * one dimensional arrays of numbers, or two dimensional arrays with - * x and y values are allowed. Also, only the first point is tested, - * and the rest are assumed to be the same format. This saves expensive - * data checking and indexing in long series. Set it to `0` disable. - * - * @type {Number} - * @default 1000 - * @since 2.2 - * @product highcharts highstock - */ - turboThreshold: 1000, - - /** - * An array defining zones within a series. Zones can be applied to - * the X axis, Y axis or Z axis for bubbles, according to the `zoneAxis` - * option. - * - * In styled mode, the color zones are styled with the `.highcharts- - * zone-{n}` class, or custom classed from the `className` option ([view - * live demo](http://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/css/color- - * zones/)). - * - * @type {Array} - * @see [zoneAxis](#plotOptions.series.zoneAxis) - * @sample {highcharts} highcharts/series/color-zones-simple/ Color zones - * @sample {highstock} highcharts/series/color-zones-simple/ Color zones - * @since 4.1.0 - * @product highcharts highstock - * @apioption plotOptions.series.zones - */ - - /** - * Styled mode only. A custom class name for the zone. - * - * @type {String} - * @sample {highcharts} highcharts/css/color-zones/ Zones styled by class name - * @sample {highstock} highcharts/css/color-zones/ Zones styled by class name - * @sample {highmaps} highcharts/css/color-zones/ Zones styled by class name - * @since 5.0.0 - * @apioption plotOptions.series.zones.className - */ - - /** - * Defines the color of the series. - * - * @type {Color} - * @see [series color](#plotOptions.series.color) - * @since 4.1.0 - * @product highcharts highstock - * @apioption plotOptions.series.zones.color - */ - - /** - * A name for the dash style to use for the graph. - * - * @type {String} - * @see [series.dashStyle](#plotOptions.series.dashStyle) - * @sample {highcharts} highcharts/series/color-zones-dashstyle-dot/ - * Dashed line indicates prognosis - * @sample {highstock} highcharts/series/color-zones-dashstyle-dot/ - * Dashed line indicates prognosis - * @since 4.1.0 - * @product highcharts highstock - * @apioption plotOptions.series.zones.dashStyle - */ - - /** - * Defines the fill color for the series (in area type series) - * - * @type {Color} - * @see [fillColor](#plotOptions.area.fillColor) - * @since 4.1.0 - * @product highcharts highstock - * @apioption plotOptions.series.zones.fillColor - */ - - /** - * The value up to where the zone extends, if undefined the zones stretches - * to the last value in the series. - * - * @type {Number} - * @default undefined - * @since 4.1.0 - * @product highcharts highstock - * @apioption plotOptions.series.zones.value - */ - - - - /** - * Determines whether the series should look for the nearest point - * in both dimensions or just the x-dimension when hovering the series. - * Defaults to `'xy'` for scatter series and `'x'` for most other - * series. If the data has duplicate x-values, it is recommended to - * set this to `'xy'` to allow hovering over all points. - * - * Applies only to series types using nearest neighbor search (not - * direct hover) for tooltip. - * - * @validvalue ['x', 'xy'] - * @type {String} - * @sample {highcharts} highcharts/series/findnearestpointby/ - * Different hover behaviors - * @sample {highstock} highcharts/series/findnearestpointby/ - * Different hover behaviors - * @sample {highmaps} highcharts/series/findnearestpointby/ - * Different hover behaviors - * @since 5.0.10 - */ - findNearestPointBy: 'x' - - }, /** @lends Highcharts.Series.prototype */ { - isCartesian: true, - pointClass: Point, - sorted: true, // requires the data to be sorted - requireSorting: true, - directTouch: false, - axisTypes: ['xAxis', 'yAxis'], - colorCounter: 0, - // each point's x and y values are stored in this.xData and this.yData - parallelArrays: ['x', 'y'], - coll: 'series', - init: function(chart, options) { - var series = this, - events, - chartSeries = chart.series, - lastSeries; - - /** - * Read only. The chart that the series belongs to. - * - * @name chart - * @memberOf Series - * @type {Chart} - */ - series.chart = chart; - - /** - * Read only. The series' type, like "line", "area", "column" etc. The - * type in the series options anc can be altered using {@link - * Series#update}. - * - * @name type - * @memberOf Series - * @type String - */ - - /** - * Read only. The series' current options. To update, use {@link - * Series#update}. - * - * @name options - * @memberOf Series - * @type SeriesOptions - */ - series.options = options = series.setOptions(options); - series.linkedSeries = []; - - // bind the axes - series.bindAxes(); - - // set some variables - extend(series, { - /** - * The series name as given in the options. Defaults to - * "Series {n}". - * - * @name name - * @memberOf Series - * @type {String} - */ - name: options.name, - state: '', - /** - * Read only. The series' visibility state as set by {@link - * Series#show}, {@link Series#hide}, or in the initial - * configuration. - * - * @name visible - * @memberOf Series - * @type {Boolean} - */ - visible: options.visible !== false, // true by default - /** - * Read only. The series' selected state as set by {@link - * Highcharts.Series#select}. - * - * @name selected - * @memberOf Series - * @type {Boolean} - */ - selected: options.selected === true // false by default - }); - - // register event listeners - events = options.events; - - objectEach(events, function(event, eventType) { - addEvent(series, eventType, event); - }); - if ( - (events && events.click) || - ( - options.point && - options.point.events && - options.point.events.click - ) || - options.allowPointSelect - ) { - chart.runTrackerClick = true; - } - - series.getColor(); - series.getSymbol(); - - // Set the data - each(series.parallelArrays, function(key) { - series[key + 'Data'] = []; - }); - series.setData(options.data, false); - - // Mark cartesian - if (series.isCartesian) { - chart.hasCartesianSeries = true; - } - - // Get the index and register the series in the chart. The index is one - // more than the current latest series index (#5960). - if (chartSeries.length) { - lastSeries = chartSeries[chartSeries.length - 1]; - } - series._i = pick(lastSeries && lastSeries._i, -1) + 1; - - // Insert the series and re-order all series above the insertion point. - chart.orderSeries(this.insert(chartSeries)); - }, - - /** - * Insert the series in a collection with other series, either the chart - * series or yAxis series, in the correct order according to the index - * option. Used internally when adding series. - * - * @private - * @param {Array.} collection - * A collection of series, like `chart.series` or `xAxis.series`. - * @returns {Number} The index of the series in the collection. - */ - insert: function(collection) { - var indexOption = this.options.index, - i; - - // Insert by index option - if (isNumber(indexOption)) { - i = collection.length; - while (i--) { - // Loop down until the interted element has higher index - if (indexOption >= - pick(collection[i].options.index, collection[i]._i)) { - collection.splice(i + 1, 0, this); - break; - } - } - if (i === -1) { - collection.unshift(this); - } - i = i + 1; - - // Or just push it to the end - } else { - collection.push(this); - } - return pick(i, collection.length - 1); - }, - - /** - * Set the xAxis and yAxis properties of cartesian series, and register the - * series in the `axis.series` array. - * - * @private - */ - bindAxes: function() { - var series = this, - seriesOptions = series.options, - chart = series.chart, - axisOptions; - - // repeat for xAxis and yAxis - each(series.axisTypes || [], function(AXIS) { - - // loop through the chart's axis objects - each(chart[AXIS], function(axis) { - axisOptions = axis.options; - - // apply if the series xAxis or yAxis option mathches the number - // of the axis, or if undefined, use the first axis - if ( - seriesOptions[AXIS] === axisOptions.index || - ( - seriesOptions[AXIS] !== undefined && - seriesOptions[AXIS] === axisOptions.id - ) || - ( - seriesOptions[AXIS] === undefined && - axisOptions.index === 0 - ) - ) { - - // register this series in the axis.series lookup - series.insert(axis.series); - - // set this series.xAxis or series.yAxis reference - /** - * Read only. The unique xAxis object associated with the - * series. - * - * @name xAxis - * @memberOf Series - * @type Axis - */ - /** - * Read only. The unique yAxis object associated with the - * series. - * - * @name yAxis - * @memberOf Series - * @type Axis - */ - series[AXIS] = axis; - - // mark dirty for redraw - axis.isDirty = true; - } - }); - - // The series needs an X and an Y axis - if (!series[AXIS] && series.optionalAxis !== AXIS) { - H.error(18, true); - } - - }); - }, - - /** - * For simple series types like line and column, the data values are held in - * arrays like xData and yData for quick lookup to find extremes and more. - * For multidimensional series like bubble and map, this can be extended - * with arrays like zData and valueData by adding to the - * `series.parallelArrays` array. - * - * @private - */ - updateParallelArrays: function(point, i) { - var series = point.series, - args = arguments, - fn = isNumber(i) ? - // Insert the value in the given position - function(key) { - var val = key === 'y' && series.toYData ? - series.toYData(point) : - point[key]; - series[key + 'Data'][i] = val; - } : - // Apply the method specified in i with the following arguments - // as arguments - function(key) { - Array.prototype[i].apply( - series[key + 'Data'], - Array.prototype.slice.call(args, 2) - ); - }; - - each(series.parallelArrays, fn); - }, - - /** - * Return an auto incremented x value based on the pointStart and - * pointInterval options. This is only used if an x value is not given for - * the point that calls autoIncrement. - * - * @private - */ - autoIncrement: function() { - - var options = this.options, - xIncrement = this.xIncrement, - date, - pointInterval, - pointIntervalUnit = options.pointIntervalUnit, - dstCrossover = 0; - - xIncrement = pick(xIncrement, options.pointStart, 0); - - this.pointInterval = pointInterval = pick( - this.pointInterval, - options.pointInterval, - 1 - ); - - // Added code for pointInterval strings - if (pointIntervalUnit) { - date = new Date(xIncrement); - - if (pointIntervalUnit === 'day') { - date = +date[Date.hcSetDate]( - date[Date.hcGetDate]() + pointInterval - ); - } else if (pointIntervalUnit === 'month') { - date = +date[Date.hcSetMonth]( - date[Date.hcGetMonth]() + pointInterval - ); - } else if (pointIntervalUnit === 'year') { - date = +date[Date.hcSetFullYear]( - date[Date.hcGetFullYear]() + pointInterval - ); - } - - if (Date.hcHasTimeZone) { - dstCrossover = H.getTZOffset(date) - H.getTZOffset(xIncrement); - } - pointInterval = date - xIncrement + dstCrossover; - - } - - this.xIncrement = xIncrement + pointInterval; - return xIncrement; - }, - - /** - * Set the series options by merging from the options tree. Called - * internally on initiating and updating series. This function will not - * redraw the series. For API usage, use {@link Series#update}. - * - * @param {Options.plotOptions.series} itemOptions - * The series options. - */ - setOptions: function(itemOptions) { - var chart = this.chart, - chartOptions = chart.options, - plotOptions = chartOptions.plotOptions, - userOptions = chart.userOptions || {}, - userPlotOptions = userOptions.plotOptions || {}, - typeOptions = plotOptions[this.type], - options, - zones; - - this.userOptions = itemOptions; - - // General series options take precedence over type options because - // otherwise, default type options like column.animation would be - // overwritten by the general option. But issues have been raised here - // (#3881), and the solution may be to distinguish between default - // option and userOptions like in the tooltip below. - options = merge( - typeOptions, - plotOptions.series, - itemOptions - ); - - // The tooltip options are merged between global and series specific - // options. Importance order asscendingly: - // globals: (1)tooltip, (2)plotOptions.series, (3)plotOptions[this.type] - // init userOptions with possible later updates: 4-6 like 1-3 and - // (7)this series options - this.tooltipOptions = merge( - defaultOptions.tooltip, // 1 - defaultOptions.plotOptions.series && - defaultOptions.plotOptions.series.tooltip, // 2 - defaultOptions.plotOptions[this.type].tooltip, // 3 - chartOptions.tooltip.userOptions, // 4 - plotOptions.series && plotOptions.series.tooltip, // 5 - plotOptions[this.type].tooltip, // 6 - itemOptions.tooltip // 7 - ); - - // When shared tooltip, stickyTracking is true by default, - // unless user says otherwise. - this.stickyTracking = pick( - itemOptions.stickyTracking, - userPlotOptions[this.type] && - userPlotOptions[this.type].stickyTracking, - userPlotOptions.series && userPlotOptions.series.stickyTracking, - ( - this.tooltipOptions.shared && !this.noSharedTooltip ? - true : - options.stickyTracking - ) - ); - - // Delete marker object if not allowed (#1125) - if (typeOptions.marker === null) { - delete options.marker; - } - - // Handle color zones - this.zoneAxis = options.zoneAxis; - zones = this.zones = (options.zones || []).slice(); - if ( - (options.negativeColor || options.negativeFillColor) && - !options.zones - ) { - zones.push({ - value: options[this.zoneAxis + 'Threshold'] || - options.threshold || - 0, - className: 'highcharts-negative', - - color: options.negativeColor, - fillColor: options.negativeFillColor - - }); - } - if (zones.length) { // Push one extra zone for the rest - if (defined(zones[zones.length - 1].value)) { - zones.push({ - - color: this.color, - fillColor: this.fillColor - - }); - } - } - return options; - }, - - getCyclic: function(prop, value, defaults) { - var i, - chart = this.chart, - userOptions = this.userOptions, - indexName = prop + 'Index', - counterName = prop + 'Counter', - len = defaults ? defaults.length : pick( - chart.options.chart[prop + 'Count'], - chart[prop + 'Count'] - ), - setting; - - if (!value) { - // Pick up either the colorIndex option, or the _colorIndex after - // Series.update() - setting = pick( - userOptions[indexName], - userOptions['_' + indexName] - ); - if (defined(setting)) { // after Series.update() - i = setting; - } else { - // #6138 - if (!chart.series.length) { - chart[counterName] = 0; - } - userOptions['_' + indexName] = i = chart[counterName] % len; - chart[counterName] += 1; - } - if (defaults) { - value = defaults[i]; - } - } - // Set the colorIndex - if (i !== undefined) { - this[indexName] = i; - } - this[prop] = value; - }, - - /** - * Get the series' color based on either the options or pulled from global - * options. - * - * @return {Color} The series color. - */ - - getColor: function() { - if (this.options.colorByPoint) { - // #4359, selected slice got series.color even when colorByPoint was - // set. - this.options.color = null; - } else { - this.getCyclic( - 'color', - this.options.color || defaultPlotOptions[this.type].color, - this.chart.options.colors - ); - } - }, - - /** - * Get the series' symbol based on either the options or pulled from global - * options. - */ - getSymbol: function() { - var seriesMarkerOption = this.options.marker; - - this.getCyclic( - 'symbol', - seriesMarkerOption.symbol, - this.chart.options.symbols - ); - }, - - drawLegendSymbol: LegendSymbolMixin.drawLineMarker, - - /** - * Apply a new set of data to the series and optionally redraw it. The new - * data array is passed by reference (except in case of `updatePoints`), and - * may later be mutated when updating the chart data. - * - * Note the difference in behaviour when setting the same amount of points, - * or a different amount of points, as handled by the `updatePoints` - * parameter. - * - * @param {SeriesDataOptions} data - * Takes an array of data in the same format as described under - * `series.typedata` for the given series type. - * @param {Boolean} [redraw=true] - * Whether to redraw the chart after the series is altered. If doing - * more operations on the chart, it is a good idea to set redraw to - * false and call {@link Chart#redraw} after. - * @param {AnimationOptions} [animation] - * When the updated data is the same length as the existing data, - * points will be updated by default, and animation visualizes how - * the points are changed. Set false to disable animation, or a - * configuration object to set duration or easing. - * @param {Boolean} [updatePoints=true] - * When the updated data is the same length as the existing data, - * points will be updated instead of replaced. This allows updating - * with animation and performs better. In this case, the original - * array is not passed by reference. Set false to prevent. - * - * @sample highcharts/members/series-setdata/ - * Set new data from a button - * @sample highcharts/members/series-setdata-pie/ - * Set data in a pie - * @sample stock/members/series-setdata/ - * Set new data in Highstock - * @sample maps/members/series-setdata/ - * Set new data in Highmaps - */ - setData: function(data, redraw, animation, updatePoints) { - var series = this, - oldData = series.points, - oldDataLength = (oldData && oldData.length) || 0, - dataLength, - options = series.options, - chart = series.chart, - firstPoint = null, - xAxis = series.xAxis, - i, - turboThreshold = options.turboThreshold, - pt, - xData = this.xData, - yData = this.yData, - pointArrayMap = series.pointArrayMap, - valueCount = pointArrayMap && pointArrayMap.length; - - data = data || []; - dataLength = data.length; - redraw = pick(redraw, true); - - // If the point count is the same as is was, just run Point.update which - // is cheaper, allows animation, and keeps references to points. - if ( - updatePoints !== false && - dataLength && - oldDataLength === dataLength && - !series.cropped && - !series.hasGroupedData && - series.visible - ) { - each(data, function(point, i) { - // .update doesn't exist on a linked, hidden series (#3709) - if (oldData[i].update && point !== options.data[i]) { - oldData[i].update(point, false, null, false); - } - }); - - } else { - - // Reset properties - series.xIncrement = null; - - series.colorCounter = 0; // for series with colorByPoint (#1547) - - // Update parallel arrays - each(this.parallelArrays, function(key) { - series[key + 'Data'].length = 0; - }); - - // In turbo mode, only one- or twodimensional arrays of numbers are - // allowed. The first value is tested, and we assume that all the - // rest are defined the same way. Although the 'for' loops are - // similar, they are repeated inside each if-else conditional for - // max performance. - if (turboThreshold && dataLength > turboThreshold) { - - // find the first non-null point - i = 0; - while (firstPoint === null && i < dataLength) { - firstPoint = data[i]; - i++; - } - - - if (isNumber(firstPoint)) { // assume all points are numbers - for (i = 0; i < dataLength; i++) { - xData[i] = this.autoIncrement(); - yData[i] = data[i]; - } - - // Assume all points are arrays when first point is - } else if (isArray(firstPoint)) { - if (valueCount) { // [x, low, high] or [x, o, h, l, c] - for (i = 0; i < dataLength; i++) { - pt = data[i]; - xData[i] = pt[0]; - yData[i] = pt.slice(1, valueCount + 1); - } - } else { // [x, y] - for (i = 0; i < dataLength; i++) { - pt = data[i]; - xData[i] = pt[0]; - yData[i] = pt[1]; - } - } - } else { - // Highcharts expects configs to be numbers or arrays in - // turbo mode - H.error(12); - } - } else { - for (i = 0; i < dataLength; i++) { - if (data[i] !== undefined) { // stray commas in oldIE - pt = { - series: series - }; - series.pointClass.prototype.applyOptions.apply( - pt, [data[i]] - ); - series.updateParallelArrays(pt, i); - } - } - } - - // Forgetting to cast strings to numbers is a common caveat when - // handling CSV or JSON - if (yData && isString(yData[0])) { - H.error(14, true); - } - - series.data = []; - series.options.data = series.userOptions.data = data; - - // destroy old points - i = oldDataLength; - while (i--) { - if (oldData[i] && oldData[i].destroy) { - oldData[i].destroy(); - } - } - - // reset minRange (#878) - if (xAxis) { - xAxis.minRange = xAxis.userMinRange; - } - - // redraw - series.isDirty = chart.isDirtyBox = true; - series.isDirtyData = !!oldData; - animation = false; - } - - // Typically for pie series, points need to be processed and generated - // prior to rendering the legend - if (options.legendType === 'point') { - this.processData(); - this.generatePoints(); - } - - if (redraw) { - chart.redraw(animation); - } - }, - - /** - * Internal function to process the data by cropping away unused data points - * if the series is longer than the crop threshold. This saves computing - * time for large series. In Highstock, this function is extended to - * provide data grouping. - * - * @private - * @param {Boolean} force - * Force data grouping. - */ - processData: function(force) { - var series = this, - processedXData = series.xData, // copied during slice operation - processedYData = series.yData, - dataLength = processedXData.length, - croppedData, - cropStart = 0, - cropped, - distance, - closestPointRange, - xAxis = series.xAxis, - i, // loop variable - options = series.options, - cropThreshold = options.cropThreshold, - getExtremesFromAll = - series.getExtremesFromAll || - options.getExtremesFromAll, // #4599 - isCartesian = series.isCartesian, - xExtremes, - val2lin = xAxis && xAxis.val2lin, - isLog = xAxis && xAxis.isLog, - throwOnUnsorted = series.requireSorting, - min, - max; - - // If the series data or axes haven't changed, don't go through this. - // Return false to pass the message on to override methods like in data - // grouping. - if ( - isCartesian && - !series.isDirty && - !xAxis.isDirty && - !series.yAxis.isDirty && - !force - ) { - return false; - } - - if (xAxis) { - xExtremes = xAxis.getExtremes(); // corrected for log axis (#3053) - min = xExtremes.min; - max = xExtremes.max; - } - - // optionally filter out points outside the plot area - if ( - isCartesian && - series.sorted && - !getExtremesFromAll && - (!cropThreshold || dataLength > cropThreshold || series.forceCrop) - ) { - - // it's outside current extremes - if ( - processedXData[dataLength - 1] < min || - processedXData[0] > max - ) { - processedXData = []; - processedYData = []; - - // only crop if it's actually spilling out - } else if ( - processedXData[0] < min || - processedXData[dataLength - 1] > max - ) { - croppedData = this.cropData( - series.xData, - series.yData, - min, - max - ); - processedXData = croppedData.xData; - processedYData = croppedData.yData; - cropStart = croppedData.start; - cropped = true; - } - } - - - // Find the closest distance between processed points - i = processedXData.length || 1; - while (--i) { - distance = isLog ? - val2lin(processedXData[i]) - val2lin(processedXData[i - 1]) : - processedXData[i] - processedXData[i - 1]; - - if ( - distance > 0 && - ( - closestPointRange === undefined || - distance < closestPointRange - ) - ) { - closestPointRange = distance; - - // Unsorted data is not supported by the line tooltip, as well as - // data grouping and navigation in Stock charts (#725) and width - // calculation of columns (#1900) - } else if (distance < 0 && throwOnUnsorted) { - H.error(15); - throwOnUnsorted = false; // Only once - } - } - - // Record the properties - series.cropped = cropped; // undefined or true - series.cropStart = cropStart; - series.processedXData = processedXData; - series.processedYData = processedYData; - - series.closestPointRange = closestPointRange; - - }, - - /** - * Iterate over xData and crop values between min and max. Returns object - * containing crop start/end cropped xData with corresponding part of yData, - * dataMin and dataMax within the cropped range. - * - * @private - */ - cropData: function(xData, yData, min, max) { - var dataLength = xData.length, - cropStart = 0, - cropEnd = dataLength, - // line-type series need one point outside - cropShoulder = pick(this.cropShoulder, 1), - i, - j; - - // iterate up to find slice start - for (i = 0; i < dataLength; i++) { - if (xData[i] >= min) { - cropStart = Math.max(0, i - cropShoulder); - break; - } - } - - // proceed to find slice end - for (j = i; j < dataLength; j++) { - if (xData[j] > max) { - cropEnd = j + cropShoulder; - break; - } - } - - return { - xData: xData.slice(cropStart, cropEnd), - yData: yData.slice(cropStart, cropEnd), - start: cropStart, - end: cropEnd - }; - }, - - - /** - * Generate the data point after the data has been processed by cropping - * away unused points and optionally grouped in Highcharts Stock. - * - * @private - */ - generatePoints: function() { - var series = this, - options = series.options, - dataOptions = options.data, - data = series.data, - dataLength, - processedXData = series.processedXData, - processedYData = series.processedYData, - PointClass = series.pointClass, - processedDataLength = processedXData.length, - cropStart = series.cropStart || 0, - cursor, - hasGroupedData = series.hasGroupedData, - keys = options.keys, - point, - points = [], - i; - - if (!data && !hasGroupedData) { - var arr = []; - arr.length = dataOptions.length; - data = series.data = arr; - } - - if (keys && hasGroupedData) { - // grouped data has already applied keys (#6590) - series.options.keys = false; - } - - for (i = 0; i < processedDataLength; i++) { - cursor = cropStart + i; - if (!hasGroupedData) { - point = data[cursor]; - if (!point && dataOptions[cursor] !== undefined) { // #970 - data[cursor] = point = (new PointClass()).init( - series, - dataOptions[cursor], - processedXData[i] - ); - } - } else { - // splat the y data in case of ohlc data array - point = (new PointClass()).init( - series, [processedXData[i]].concat(splat(processedYData[i])) - ); - - /** - * Highstock only. If a point object is created by data - * grouping, it doesn't reflect actual points in the raw data. - * In this case, the `dataGroup` property holds information - * that points back to the raw data. - * - * - `dataGroup.start` is the index of the first raw data point - * in the group. - * - `dataGroup.length` is the amount of points in the group. - * - * @name dataGroup - * @memberOf Point - * @type {Object} - * - */ - point.dataGroup = series.groupMap[i]; - } - if (point) { // #6279 - point.index = cursor; // For faster access in Point.update - points[i] = point; - } - } - - // restore keys options (#6590) - series.options.keys = keys; - - // Hide cropped-away points - this only runs when the number of points - // is above cropThreshold, or when swithching view from non-grouped - // data to grouped data (#637) - if ( - data && - ( - processedDataLength !== (dataLength = data.length) || - hasGroupedData - ) - ) { - for (i = 0; i < dataLength; i++) { - // when has grouped data, clear all points - if (i === cropStart && !hasGroupedData) { - i += processedDataLength; - } - if (data[i]) { - data[i].destroyElements(); - data[i].plotX = undefined; // #1003 - } - } - } - - /** - * Read only. An array containing those values converted to points, but - * in case the series data length exceeds the `cropThreshold`, or if the - * data is grouped, `series.data` doesn't contain all the points. It - * only contains the points that have been created on demand. To - * modify the data, use {@link Highcharts.Series#setData} or {@link - * Highcharts.Point#update}. - * - * @name data - * @memberOf Highcharts.Series - * @see Series.points - * @type {Array.} - */ - series.data = data; - - /** - * An array containing all currently visible point objects. In case of - * cropping, the cropped-away points are not part of this array. The - * `series.points` array starts at `series.cropStart` compared to - * `series.data` and `series.options.data`. If however the series data - * is grouped, these can't be correlated one to one. To - * modify the data, use {@link Highcharts.Series#setData} or {@link - * Highcharts.Point#update}. - * @name points - * @memberof Series - * @type {Array.} - */ - series.points = points; - }, - - /** - * Calculate Y extremes for the visible data. The result is set as - * `dataMin` and `dataMax` on the Series item. - * - * @param {Array.} [yData] - * The data to inspect. Defaults to the current data within the - * visible range. - * - */ - getExtremes: function(yData) { - var xAxis = this.xAxis, - yAxis = this.yAxis, - xData = this.processedXData, - yDataLength, - activeYData = [], - activeCounter = 0, - // #2117, need to compensate for log X axis - xExtremes = xAxis.getExtremes(), - xMin = xExtremes.min, - xMax = xExtremes.max, - validValue, - withinRange, - x, - y, - i, - j; - - yData = yData || this.stackedYData || this.processedYData || []; - yDataLength = yData.length; - - for (i = 0; i < yDataLength; i++) { - - x = xData[i]; - y = yData[i]; - - // For points within the visible range, including the first point - // outside the visible range (#7061), consider y extremes. - validValue = - (isNumber(y, true) || isArray(y)) && - (!yAxis.positiveValuesOnly || (y.length || y > 0)); - withinRange = - this.getExtremesFromAll || - this.options.getExtremesFromAll || - this.cropped || - ((xData[i + 1] || x) >= xMin && (xData[i - 1] || x) <= xMax); - - if (validValue && withinRange) { - - j = y.length; - if (j) { // array, like ohlc or range data - while (j--) { - if (typeof y[j] === 'number') { // #7380 - activeYData[activeCounter++] = y[j]; - } - } - } else { - activeYData[activeCounter++] = y; - } - } - } - - this.dataMin = arrayMin(activeYData); - this.dataMax = arrayMax(activeYData); - }, - - /** - * Translate data points from raw data values to chart specific positioning - * data needed later in the `drawPoints` and `drawGraph` functions. This - * function can be overridden in plugins and custom series type - * implementations. - */ - translate: function() { - if (!this.processedXData) { // hidden series - this.processData(); - } - this.generatePoints(); - var series = this, - options = series.options, - stacking = options.stacking, - xAxis = series.xAxis, - categories = xAxis.categories, - yAxis = series.yAxis, - points = series.points, - dataLength = points.length, - hasModifyValue = !!series.modifyValue, - i, - pointPlacement = options.pointPlacement, - dynamicallyPlaced = - pointPlacement === 'between' || - isNumber(pointPlacement), - threshold = options.threshold, - stackThreshold = options.startFromThreshold ? threshold : 0, - plotX, - plotY, - lastPlotX, - stackIndicator, - closestPointRangePx = Number.MAX_VALUE; - - // Point placement is relative to each series pointRange (#5889) - if (pointPlacement === 'between') { - pointPlacement = 0.5; - } - if (isNumber(pointPlacement)) { - pointPlacement *= pick(options.pointRange || xAxis.pointRange); - } - - // Translate each point - for (i = 0; i < dataLength; i++) { - var point = points[i], - xValue = point.x, - yValue = point.y, - yBottom = point.low, - stack = stacking && yAxis.stacks[( - series.negStacks && - yValue < (stackThreshold ? 0 : threshold) ? '-' : '' - ) + series.stackKey], - pointStack, - stackValues; - - // Discard disallowed y values for log axes (#3434) - if (yAxis.positiveValuesOnly && yValue !== null && yValue <= 0) { - point.isNull = true; - } - - // Get the plotX translation - point.plotX = plotX = correctFloat( // #5236 - Math.min(Math.max(-1e5, xAxis.translate( - xValue, - 0, - 0, - 0, - 1, - pointPlacement, - this.type === 'flags' - )), 1e5) // #3923 - ); - - // Calculate the bottom y value for stacked series - if ( - stacking && - series.visible && - !point.isNull && - stack && - stack[xValue] - ) { - stackIndicator = series.getStackIndicator( - stackIndicator, - xValue, - series.index - ); - pointStack = stack[xValue]; - stackValues = pointStack.points[stackIndicator.key]; - yBottom = stackValues[0]; - yValue = stackValues[1]; - - if ( - yBottom === stackThreshold && - stackIndicator.key === stack[xValue].base - ) { - yBottom = pick(threshold, yAxis.min); - } - if (yAxis.positiveValuesOnly && yBottom <= 0) { // #1200, #1232 - yBottom = null; - } - - point.total = point.stackTotal = pointStack.total; - point.percentage = - pointStack.total && - (point.y / pointStack.total * 100); - point.stackY = yValue; - - // Place the stack label - pointStack.setOffset( - series.pointXOffset || 0, - series.barW || 0 - ); - - } - - // Set translated yBottom or remove it - point.yBottom = defined(yBottom) ? - yAxis.translate(yBottom, 0, 1, 0, 1) : - null; - - // general hook, used for Highstock compare mode - if (hasModifyValue) { - yValue = series.modifyValue(yValue, point); - } - - // Set the the plotY value, reset it for redraws - point.plotY = plotY = - (typeof yValue === 'number' && yValue !== Infinity) ? - Math.min(Math.max(-1e5, - yAxis.translate(yValue, 0, 1, 0, 1)), 1e5) : // #3201 - undefined; - - point.isInside = - plotY !== undefined && - plotY >= 0 && - plotY <= yAxis.len && // #3519 - plotX >= 0 && - plotX <= xAxis.len; - - - // Set client related positions for mouse tracking - point.clientX = dynamicallyPlaced ? - correctFloat( - xAxis.translate(xValue, 0, 0, 0, 1, pointPlacement) - ) : - plotX; // #1514, #5383, #5518 - - point.negative = point.y < (threshold || 0); - - // some API data - point.category = categories && categories[point.x] !== undefined ? - categories[point.x] : point.x; - - // Determine auto enabling of markers (#3635, #5099) - if (!point.isNull) { - if (lastPlotX !== undefined) { - closestPointRangePx = Math.min( - closestPointRangePx, - Math.abs(plotX - lastPlotX) - ); - } - lastPlotX = plotX; - } - - // Find point zone - point.zone = this.zones.length && point.getZone(); - } - series.closestPointRangePx = closestPointRangePx; - }, - - /** - * Return the series points with null points filtered out. - * - * @param {Array.} [points] - * The points to inspect, defaults to {@link Series.points}. - * @param {Boolean} [insideOnly=false] - * Whether to inspect only the points that are inside the visible - * view. - * - * @return {Array.} - * The valid points. - */ - getValidPoints: function(points, insideOnly) { - var chart = this.chart; - // #3916, #5029, #5085 - return grep(points || this.points || [], function isValidPoint(point) { - if (insideOnly && !chart.isInsidePlot( - point.plotX, - point.plotY, - chart.inverted - )) { - return false; - } - return !point.isNull; - }); - }, - - /** - * Set the clipping for the series. For animated series it is called twice, - * first to initiate animating the clip then the second time without the - * animation to set the final clip. - * - * @private - */ - setClip: function(animation) { - var chart = this.chart, - options = this.options, - renderer = chart.renderer, - inverted = chart.inverted, - seriesClipBox = this.clipBox, - clipBox = seriesClipBox || chart.clipBox, - sharedClipKey = - this.sharedClipKey || [ - '_sharedClip', - animation && animation.duration, - animation && animation.easing, - clipBox.height, - options.xAxis, - options.yAxis - ].join(','), // #4526 - clipRect = chart[sharedClipKey], - markerClipRect = chart[sharedClipKey + 'm']; - - // If a clipping rectangle with the same properties is currently present - // in the chart, use that. - if (!clipRect) { - - // When animation is set, prepare the initial positions - if (animation) { - clipBox.width = 0; - if (inverted) { - clipBox.x = chart.plotSizeX; - } - - chart[sharedClipKey + 'm'] = markerClipRect = renderer.clipRect( - inverted ? chart.plotSizeX + 99 : -99, // include the width of the first marker - inverted ? -chart.plotLeft : -chart.plotTop, - 99, - inverted ? chart.chartWidth : chart.chartHeight - ); - } - chart[sharedClipKey] = clipRect = renderer.clipRect(clipBox); - // Create hashmap for series indexes - clipRect.count = { - length: 0 - }; - - } - if (animation) { - if (!clipRect.count[this.index]) { - clipRect.count[this.index] = true; - clipRect.count.length += 1; - } - } - - if (options.clip !== false) { - this.group.clip(animation || seriesClipBox ? clipRect : chart.clipRect); - this.markerGroup.clip(markerClipRect); - this.sharedClipKey = sharedClipKey; - } - - // Remove the shared clipping rectangle when all series are shown - if (!animation) { - if (clipRect.count[this.index]) { - delete clipRect.count[this.index]; - clipRect.count.length -= 1; - } - - if (clipRect.count.length === 0 && sharedClipKey && chart[sharedClipKey]) { - if (!seriesClipBox) { - chart[sharedClipKey] = chart[sharedClipKey].destroy(); - } - if (chart[sharedClipKey + 'm']) { - chart[sharedClipKey + 'm'] = chart[sharedClipKey + 'm'].destroy(); - } - } - } - }, - - /** - * Animate in the series. Called internally twice. First with the `init` - * parameter set to true, which sets up the initial state of the animation. - * Then when ready, it is called with the `init` parameter undefined, in - * order to perform the actual animation. After the second run, the function - * is removed. - * - * @param {Boolean} init - * Initialize the animation. - */ - animate: function(init) { - var series = this, - chart = series.chart, - clipRect, - animation = animObject(series.options.animation), - sharedClipKey; - - // Initialize the animation. Set up the clipping rectangle. - if (init) { - - series.setClip(animation); - - // Run the animation - } else { - sharedClipKey = this.sharedClipKey; - clipRect = chart[sharedClipKey]; - if (clipRect) { - clipRect.animate({ - width: chart.plotSizeX, - x: 0 - }, animation); - } - if (chart[sharedClipKey + 'm']) { - chart[sharedClipKey + 'm'].animate({ - width: chart.plotSizeX + 99, - x: 0 - }, animation); - } - - // Delete this function to allow it only once - series.animate = null; - - } - }, - - /** - * This runs after animation to land on the final plot clipping. - * - * @private - */ - afterAnimate: function() { - this.setClip(); - fireEvent(this, 'afterAnimate'); - this.finishedAnimating = true; - }, - - /** - * Draw the markers for line-like series types, and columns or other - * graphical representation for {@link Point} objects for other series - * types. The resulting element is typically stored as {@link - * Point.graphic}, and is created on the first call and updated and moved on - * subsequent calls. - */ - drawPoints: function() { - var series = this, - points = series.points, - chart = series.chart, - i, - point, - symbol, - graphic, - options = series.options, - seriesMarkerOptions = options.marker, - pointMarkerOptions, - hasPointMarker, - enabled, - isInside, - markerGroup = series[series.specialGroup] || series.markerGroup, - xAxis = series.xAxis, - markerAttribs, - globallyEnabled = pick( - seriesMarkerOptions.enabled, - xAxis.isRadial ? true : null, - // Use larger or equal as radius is null in bubbles (#6321) - series.closestPointRangePx >= 2 * seriesMarkerOptions.radius - ); - - if (seriesMarkerOptions.enabled !== false || series._hasPointMarkers) { - - for (i = 0; i < points.length; i++) { - point = points[i]; - graphic = point.graphic; - pointMarkerOptions = point.marker || {}; - hasPointMarker = !!point.marker; - enabled = (globallyEnabled && pointMarkerOptions.enabled === undefined) || pointMarkerOptions.enabled; - isInside = point.isInside; - - // only draw the point if y is defined - if (enabled && !point.isNull) { - - // Shortcuts - symbol = pick(pointMarkerOptions.symbol, series.symbol); - point.hasImage = symbol.indexOf('url') === 0; - - markerAttribs = series.markerAttribs( - point, - point.selected && 'select' - ); - - if (graphic) { // update - graphic[isInside ? 'show' : 'hide'](true) // Since the marker group isn't clipped, each individual marker must be toggled - .animate(markerAttribs); - } else if (isInside && (markerAttribs.width > 0 || point.hasImage)) { - - /** - * The graphic representation of the point. Typically - * this is a simple shape, like a `rect` for column - * charts or `path` for line markers, but for some - * complex series types like boxplot or 3D charts, the - * graphic may be a `g` element containing other shapes. - * The graphic is generated the first time {@link - * Series#drawPoints} runs, and updated and moved on - * subsequent runs. - * - * @memberof Point - * @name graphic - * @type {SVGElement} - */ - point.graphic = graphic = chart.renderer.symbol( - symbol, - markerAttribs.x, - markerAttribs.y, - markerAttribs.width, - markerAttribs.height, - hasPointMarker ? pointMarkerOptions : seriesMarkerOptions - ) - .add(markerGroup); - } - - - // Presentational attributes - if (graphic) { - graphic.attr(series.pointAttribs(point, point.selected && 'select')); - } - - - if (graphic) { - graphic.addClass(point.getClassName(), true); - } - - } else if (graphic) { - point.graphic = graphic.destroy(); // #1269 - } - } - } - - }, - - /** - * Get non-presentational attributes for a point. Used internally for both - * styled mode and classic. Can be overridden for different series types. - * - * @see Series#pointAttribs - * - * @param {Point} point - * The Point to inspect. - * @param {String} [state] - * The state, can be either `hover`, `select` or undefined. - * - * @return {SVGAttributes} - * A hash containing those attributes that are not settable from - * CSS. - */ - markerAttribs: function(point, state) { - var seriesMarkerOptions = this.options.marker, - seriesStateOptions, - pointMarkerOptions = point.marker || {}, - pointStateOptions, - radius = pick( - pointMarkerOptions.radius, - seriesMarkerOptions.radius - ), - attribs; - - // Handle hover and select states - if (state) { - seriesStateOptions = seriesMarkerOptions.states[state]; - pointStateOptions = pointMarkerOptions.states && - pointMarkerOptions.states[state]; - - radius = pick( - pointStateOptions && pointStateOptions.radius, - seriesStateOptions && seriesStateOptions.radius, - radius + (seriesStateOptions && seriesStateOptions.radiusPlus || 0) - ); - } - - if (point.hasImage) { - radius = 0; // and subsequently width and height is not set - } - - attribs = { - x: Math.floor(point.plotX) - radius, // Math.floor for #1843 - y: point.plotY - radius - }; - - if (radius) { - attribs.width = attribs.height = 2 * radius; - } - - return attribs; - - }, - - - /** - * Internal function to get presentational attributes for each point. Unlike - * {@link Series#markerAttribs}, this function should return those - * attributes that can also be set in CSS. In styled mode, `pointAttribs` - * won't be called. - * - * @param {Point} point - * The point instance to inspect. - * @param {String} [state] - * The point state, can be either `hover`, `select` or undefined for - * normal state. - * - * @return {SVGAttributes} - * The presentational attributes to be set on the point. - */ - pointAttribs: function(point, state) { - var seriesMarkerOptions = this.options.marker, - seriesStateOptions, - pointOptions = point && point.options, - pointMarkerOptions = (pointOptions && pointOptions.marker) || {}, - pointStateOptions, - color = this.color, - pointColorOption = pointOptions && pointOptions.color, - pointColor = point && point.color, - strokeWidth = pick( - pointMarkerOptions.lineWidth, - seriesMarkerOptions.lineWidth - ), - zoneColor = point && point.zone && point.zone.color, - fill, - stroke; - - color = pointColorOption || zoneColor || pointColor || color; - fill = pointMarkerOptions.fillColor || seriesMarkerOptions.fillColor || color; - stroke = pointMarkerOptions.lineColor || seriesMarkerOptions.lineColor || color; - - // Handle hover and select states - if (state) { - seriesStateOptions = seriesMarkerOptions.states[state]; - pointStateOptions = (pointMarkerOptions.states && pointMarkerOptions.states[state]) || {}; - strokeWidth = pick( - pointStateOptions.lineWidth, - seriesStateOptions.lineWidth, - strokeWidth + pick( - pointStateOptions.lineWidthPlus, - seriesStateOptions.lineWidthPlus, - 0 - ) - ); - fill = pointStateOptions.fillColor || seriesStateOptions.fillColor || fill; - stroke = pointStateOptions.lineColor || seriesStateOptions.lineColor || stroke; - } - - return { - 'stroke': stroke, - 'stroke-width': strokeWidth, - 'fill': fill - }; - }, - - /** - * Clear DOM objects and free up memory. - * - * @private - */ - destroy: function() { - var series = this, - chart = series.chart, - issue134 = /AppleWebKit\/533/.test(win.navigator.userAgent), - destroy, - i, - data = series.data || [], - point, - axis; - - // add event hook - fireEvent(series, 'destroy'); - - // remove all events - removeEvent(series); - - // erase from axes - each(series.axisTypes || [], function(AXIS) { - axis = series[AXIS]; - if (axis && axis.series) { - erase(axis.series, series); - axis.isDirty = axis.forceRedraw = true; - } - }); - - // remove legend items - if (series.legendItem) { - series.chart.legend.destroyItem(series); - } - - // destroy all points with their elements - i = data.length; - while (i--) { - point = data[i]; - if (point && point.destroy) { - point.destroy(); - } - } - series.points = null; - - // Clear the animation timeout if we are destroying the series during initial animation - clearTimeout(series.animationTimeout); - - // Destroy all SVGElements associated to the series - objectEach(series, function(val, prop) { - if (val instanceof SVGElement && !val.survive) { // Survive provides a hook for not destroying - - // issue 134 workaround - destroy = issue134 && prop === 'group' ? - 'hide' : - 'destroy'; - - val[destroy](); - } - }); - - // remove from hoverSeries - if (chart.hoverSeries === series) { - chart.hoverSeries = null; - } - erase(chart.series, series); - chart.orderSeries(); - - // clear all members - objectEach(series, function(val, prop) { - delete series[prop]; - }); - }, - - /** - * Get the graph path. - * - * @private - */ - getGraphPath: function(points, nullsAsZeroes, connectCliffs) { - var series = this, - options = series.options, - step = options.step, - reversed, - graphPath = [], - xMap = [], - gap; - - points = points || series.points; - - // Bottom of a stack is reversed - reversed = points.reversed; - if (reversed) { - points.reverse(); - } - // Reverse the steps (#5004) - step = { - right: 1, - center: 2 - }[step] || (step && 3); - if (step && reversed) { - step = 4 - step; - } - - // Remove invalid points, especially in spline (#5015) - if (options.connectNulls && !nullsAsZeroes && !connectCliffs) { - points = this.getValidPoints(points); - } - - // Build the line - each(points, function(point, i) { - - var plotX = point.plotX, - plotY = point.plotY, - lastPoint = points[i - 1], - pathToPoint; // the path to this point from the previous - - if ((point.leftCliff || (lastPoint && lastPoint.rightCliff)) && !connectCliffs) { - gap = true; // ... and continue - } - - // Line series, nullsAsZeroes is not handled - if (point.isNull && !defined(nullsAsZeroes) && i > 0) { - gap = !options.connectNulls; - - // Area series, nullsAsZeroes is set - } else if (point.isNull && !nullsAsZeroes) { - gap = true; - - } else { - - if (i === 0 || gap) { - pathToPoint = ['M', point.plotX, point.plotY]; - - } else if (series.getPointSpline) { // generate the spline as defined in the SplineSeries object - - pathToPoint = series.getPointSpline(points, point, i); - - } else if (step) { - - if (step === 1) { // right - pathToPoint = [ - 'L', - lastPoint.plotX, - plotY - ]; - - } else if (step === 2) { // center - pathToPoint = [ - 'L', - (lastPoint.plotX + plotX) / 2, - lastPoint.plotY, - 'L', - (lastPoint.plotX + plotX) / 2, - plotY - ]; - - } else { - pathToPoint = [ - 'L', - plotX, - lastPoint.plotY - ]; - } - pathToPoint.push('L', plotX, plotY); - - } else { - // normal line to next point - pathToPoint = [ - 'L', - plotX, - plotY - ]; - } - - // Prepare for animation. When step is enabled, there are two path nodes for each x value. - xMap.push(point.x); - if (step) { - xMap.push(point.x); - } - - graphPath.push.apply(graphPath, pathToPoint); - gap = false; - } - }); - - graphPath.xMap = xMap; - series.graphPath = graphPath; - - return graphPath; - - }, - - /** - * Draw the graph. Called internally when rendering line-like series types. - * The first time it generates the `series.graph` item and optionally other - * series-wide items like `series.area` for area charts. On subsequent calls - * these items are updated with new positions and attributes. - */ - drawGraph: function() { - var series = this, - options = this.options, - graphPath = (this.gappedPath || this.getGraphPath).call(this), - props = [ - [ - 'graph', - 'highcharts-graph', - - options.lineColor || this.color, - options.dashStyle - - ] - ]; - - // Add the zone properties if any - each(this.zones, function(zone, i) { - props.push([ - 'zone-graph-' + i, - 'highcharts-graph highcharts-zone-graph-' + i + ' ' + (zone.className || ''), - - zone.color || series.color, - zone.dashStyle || options.dashStyle - - ]); - }); - - // Draw the graph - each(props, function(prop, i) { - var graphKey = prop[0], - graph = series[graphKey], - attribs; - - if (graph) { - graph.endX = series.preventGraphAnimation ? - null : - graphPath.xMap; - graph.animate({ - d: graphPath - }); - - } else if (graphPath.length) { // #1487 - - series[graphKey] = series.chart.renderer.path(graphPath) - .addClass(prop[1]) - .attr({ - zIndex: 1 - }) // #1069 - .add(series.group); - - - attribs = { - 'stroke': prop[2], - 'stroke-width': options.lineWidth, - 'fill': (series.fillGraph && series.color) || 'none' // Polygon series use filled graph - }; - - if (prop[3]) { - attribs.dashstyle = prop[3]; - } else if (options.linecap !== 'square') { - attribs['stroke-linecap'] = attribs['stroke-linejoin'] = 'round'; - } - - graph = series[graphKey] - .attr(attribs) - .shadow((i < 2) && options.shadow); // add shadow to normal series (0) or to first zone (1) #3932 - - } - - // Helpers for animation - if (graph) { - graph.startX = graphPath.xMap; - graph.isArea = graphPath.isArea; // For arearange animation - } - }); - }, - - /** - * Clip the graphs into zones for colors and styling. - * - * @private - */ - applyZones: function() { - var series = this, - chart = this.chart, - renderer = chart.renderer, - zones = this.zones, - translatedFrom, - translatedTo, - clips = this.clips || [], - clipAttr, - graph = this.graph, - area = this.area, - chartSizeMax = Math.max(chart.chartWidth, chart.chartHeight), - axis = this[(this.zoneAxis || 'y') + 'Axis'], - extremes, - reversed, - inverted = chart.inverted, - horiz, - pxRange, - pxPosMin, - pxPosMax, - ignoreZones = false; - - if (zones.length && (graph || area) && axis && axis.min !== undefined) { - reversed = axis.reversed; - horiz = axis.horiz; - // The use of the Color Threshold assumes there are no gaps - // so it is safe to hide the original graph and area - if (graph) { - graph.hide(); - } - if (area) { - area.hide(); - } - - // Create the clips - extremes = axis.getExtremes(); - each(zones, function(threshold, i) { - - translatedFrom = reversed ? - (horiz ? chart.plotWidth : 0) : - (horiz ? 0 : axis.toPixels(extremes.min)); - translatedFrom = Math.min(Math.max(pick(translatedTo, translatedFrom), 0), chartSizeMax); - translatedTo = Math.min(Math.max(Math.round(axis.toPixels(pick(threshold.value, extremes.max), true)), 0), chartSizeMax); - - if (ignoreZones) { - translatedFrom = translatedTo = axis.toPixels(extremes.max); - } - - pxRange = Math.abs(translatedFrom - translatedTo); - pxPosMin = Math.min(translatedFrom, translatedTo); - pxPosMax = Math.max(translatedFrom, translatedTo); - if (axis.isXAxis) { - clipAttr = { - x: inverted ? pxPosMax : pxPosMin, - y: 0, - width: pxRange, - height: chartSizeMax - }; - if (!horiz) { - clipAttr.x = chart.plotHeight - clipAttr.x; - } - } else { - clipAttr = { - x: 0, - y: inverted ? pxPosMax : pxPosMin, - width: chartSizeMax, - height: pxRange - }; - if (horiz) { - clipAttr.y = chart.plotWidth - clipAttr.y; - } - } - - - // VML SUPPPORT - if (inverted && renderer.isVML) { - if (axis.isXAxis) { - clipAttr = { - x: 0, - y: reversed ? pxPosMin : pxPosMax, - height: clipAttr.width, - width: chart.chartWidth - }; - } else { - clipAttr = { - x: clipAttr.y - chart.plotLeft - chart.spacingBox.x, - y: 0, - width: clipAttr.height, - height: chart.chartHeight - }; - } - } - // END OF VML SUPPORT - - - if (clips[i]) { - clips[i].animate(clipAttr); - } else { - clips[i] = renderer.clipRect(clipAttr); - - if (graph) { - series['zone-graph-' + i].clip(clips[i]); - } - - if (area) { - series['zone-area-' + i].clip(clips[i]); - } - } - // if this zone extends out of the axis, ignore the others - ignoreZones = threshold.value > extremes.max; - }); - this.clips = clips; - } - }, - - /** - * Initialize and perform group inversion on series.group and - * series.markerGroup. - * - * @private - */ - invertGroups: function(inverted) { - var series = this, - chart = series.chart, - remover; - - function setInvert() { - each(['group', 'markerGroup'], function(groupName) { - if (series[groupName]) { - - // VML/HTML needs explicit attributes for flipping - if (chart.renderer.isVML) { - series[groupName].attr({ - width: series.yAxis.len, - height: series.xAxis.len - }); - } - - series[groupName].width = series.yAxis.len; - series[groupName].height = series.xAxis.len; - series[groupName].invert(inverted); - } - }); - } - - // Pie, go away (#1736) - if (!series.xAxis) { - return; - } - - // A fixed size is needed for inversion to work - remover = addEvent(chart, 'resize', setInvert); - addEvent(series, 'destroy', remover); - - // Do it now - setInvert(inverted); // do it now - - // On subsequent render and redraw, just do setInvert without setting up events again - series.invertGroups = setInvert; - }, - - /** - * General abstraction for creating plot groups like series.group, - * series.dataLabelsGroup and series.markerGroup. On subsequent calls, the - * group will only be adjusted to the updated plot size. - * - * @private - */ - plotGroup: function(prop, name, visibility, zIndex, parent) { - var group = this[prop], - isNew = !group; - - // Generate it on first call - if (isNew) { - this[prop] = group = this.chart.renderer.g() - .attr({ - zIndex: zIndex || 0.1 // IE8 and pointer logic use this - }) - .add(parent); - - } - - // Add the class names, and replace existing ones as response to - // Series.update (#6660) - group.addClass( - ( - 'highcharts-' + name + - ' highcharts-series-' + this.index + - ' highcharts-' + this.type + '-series ' + - ( - defined(this.colorIndex) ? - 'highcharts-color-' + this.colorIndex + ' ' : - '' - ) + - (this.options.className || '') + - (group.hasClass('highcharts-tracker') ? ' highcharts-tracker' : '') - ), - true - ); - - // Place it on first and subsequent (redraw) calls - group.attr({ - visibility: visibility - })[isNew ? 'attr' : 'animate']( - this.getPlotBox() - ); - return group; - }, - - /** - * Get the translation and scale for the plot area of this series. - */ - getPlotBox: function() { - var chart = this.chart, - xAxis = this.xAxis, - yAxis = this.yAxis; - - // Swap axes for inverted (#2339) - if (chart.inverted) { - xAxis = yAxis; - yAxis = this.xAxis; - } - return { - translateX: xAxis ? xAxis.left : chart.plotLeft, - translateY: yAxis ? yAxis.top : chart.plotTop, - scaleX: 1, // #1623 - scaleY: 1 - }; - }, - - /** - * Render the graph and markers. Called internally when first rendering and - * later when redrawing the chart. This function can be extended in plugins, - * but normally shouldn't be called directly. - */ - render: function() { - var series = this, - chart = series.chart, - group, - options = series.options, - // Animation doesn't work in IE8 quirks when the group div is - // hidden, and looks bad in other oldIE - animDuration = (!!series.animate && - chart.renderer.isSVG && - animObject(options.animation).duration - ), - visibility = series.visible ? 'inherit' : 'hidden', // #2597 - zIndex = options.zIndex, - hasRendered = series.hasRendered, - chartSeriesGroup = chart.seriesGroup, - inverted = chart.inverted; - - // the group - group = series.plotGroup( - 'group', - 'series', - visibility, - zIndex, - chartSeriesGroup - ); - - series.markerGroup = series.plotGroup( - 'markerGroup', - 'markers', - visibility, - zIndex, - chartSeriesGroup - ); - - // initiate the animation - if (animDuration) { - series.animate(true); - } - - // SVGRenderer needs to know this before drawing elements (#1089, #1795) - group.inverted = series.isCartesian ? inverted : false; - - // draw the graph if any - if (series.drawGraph) { - series.drawGraph(); - series.applyZones(); - } - - /* each(series.points, function (point) { - if (point.redraw) { - point.redraw(); - } - });*/ - - // draw the data labels (inn pies they go before the points) - if (series.drawDataLabels) { - series.drawDataLabels(); - } - - // draw the points - if (series.visible) { - series.drawPoints(); - } - - - // draw the mouse tracking area - if ( - series.drawTracker && - series.options.enableMouseTracking !== false - ) { - series.drawTracker(); - } - - // Handle inverted series and tracker groups - series.invertGroups(inverted); - - // Initial clipping, must be defined after inverting groups for VML. - // Applies to columns etc. (#3839). - if (options.clip !== false && !series.sharedClipKey && !hasRendered) { - group.clip(chart.clipRect); - } - - // Run the animation - if (animDuration) { - series.animate(); - } - - // Call the afterAnimate function on animation complete (but don't - // overwrite the animation.complete option which should be available to - // the user). - if (!hasRendered) { - series.animationTimeout = syncTimeout(function() { - series.afterAnimate(); - }, animDuration); - } - - series.isDirty = false; // means data is in accordance with what you see - // (See #322) series.isDirty = series.isDirtyData = false; // means - // data is in accordance with what you see - series.hasRendered = true; - }, - - /** - * Redraw the series. This function is called internally from `chart.redraw` - * and normally shouldn't be called directly. - * - * @private - */ - redraw: function() { - var series = this, - chart = series.chart, - // cache it here as it is set to false in render, but used after - wasDirty = series.isDirty || series.isDirtyData, - group = series.group, - xAxis = series.xAxis, - yAxis = series.yAxis; - - // reposition on resize - if (group) { - if (chart.inverted) { - group.attr({ - width: chart.plotWidth, - height: chart.plotHeight - }); - } - - group.animate({ - translateX: pick(xAxis && xAxis.left, chart.plotLeft), - translateY: pick(yAxis && yAxis.top, chart.plotTop) - }); - } - - series.translate(); - series.render(); - if (wasDirty) { // #3868, #3945 - delete this.kdTree; - } - }, - - kdAxisArray: ['clientX', 'plotY'], - - searchPoint: function(e, compareX) { - var series = this, - xAxis = series.xAxis, - yAxis = series.yAxis, - inverted = series.chart.inverted; - - return this.searchKDTree({ - clientX: inverted ? - xAxis.len - e.chartY + xAxis.pos : e.chartX - xAxis.pos, - plotY: inverted ? - yAxis.len - e.chartX + yAxis.pos : e.chartY - yAxis.pos - }, compareX); - }, - - /** - * Build the k-d-tree that is used by mouse and touch interaction to get the - * closest point. Line-like series typically have a one-dimensional tree - * where points are searched along the X axis, while scatter-like series - * typically search in two dimensions, X and Y. - * - * @private - */ - buildKDTree: function() { - - // Prevent multiple k-d-trees from being built simultaneously (#6235) - this.buildingKdTree = true; - - var series = this, - dimensions = series.options.findNearestPointBy.indexOf('y') > -1 ? - 2 : 1; - - // Internal function - function _kdtree(points, depth, dimensions) { - var axis, - median, - length = points && points.length; - - if (length) { - - // alternate between the axis - axis = series.kdAxisArray[depth % dimensions]; - - // sort point array - points.sort(function(a, b) { - return a[axis] - b[axis]; - }); - - median = Math.floor(length / 2); - - // build and return nod - return { - point: points[median], - left: _kdtree( - points.slice(0, median), depth + 1, dimensions - ), - right: _kdtree( - points.slice(median + 1), depth + 1, dimensions - ) - }; - - } - } - - // Start the recursive build process with a clone of the points array - // and null points filtered out (#3873) - function startRecursive() { - series.kdTree = _kdtree( - series.getValidPoints( - null, - // For line-type series restrict to plot area, but - // column-type series not (#3916, #4511) - !series.directTouch - ), - dimensions, - dimensions - ); - series.buildingKdTree = false; - } - delete series.kdTree; - - // For testing tooltips, don't build async - syncTimeout(startRecursive, series.options.kdNow ? 0 : 1); - }, - - searchKDTree: function(point, compareX) { - var series = this, - kdX = this.kdAxisArray[0], - kdY = this.kdAxisArray[1], - kdComparer = compareX ? 'distX' : 'dist', - kdDimensions = series.options.findNearestPointBy.indexOf('y') > -1 ? - 2 : 1; - - // Set the one and two dimensional distance on the point object - function setDistance(p1, p2) { - var x = (defined(p1[kdX]) && defined(p2[kdX])) ? - Math.pow(p1[kdX] - p2[kdX], 2) : - null, - y = (defined(p1[kdY]) && defined(p2[kdY])) ? - Math.pow(p1[kdY] - p2[kdY], 2) : - null, - r = (x || 0) + (y || 0); - - p2.dist = defined(r) ? Math.sqrt(r) : Number.MAX_VALUE; - p2.distX = defined(x) ? Math.sqrt(x) : Number.MAX_VALUE; - } - - function _search(search, tree, depth, dimensions) { - var point = tree.point, - axis = series.kdAxisArray[depth % dimensions], - tdist, - sideA, - sideB, - ret = point, - nPoint1, - nPoint2; - - setDistance(search, point); - - // Pick side based on distance to splitting point - tdist = search[axis] - point[axis]; - sideA = tdist < 0 ? 'left' : 'right'; - sideB = tdist < 0 ? 'right' : 'left'; - - // End of tree - if (tree[sideA]) { - nPoint1 = _search(search, tree[sideA], depth + 1, dimensions); - - ret = (nPoint1[kdComparer] < ret[kdComparer] ? nPoint1 : point); - } - if (tree[sideB]) { - // compare distance to current best to splitting point to decide - // wether to check side B or not - if (Math.sqrt(tdist * tdist) < ret[kdComparer]) { - nPoint2 = _search( - search, - tree[sideB], - depth + 1, - dimensions - ); - ret = nPoint2[kdComparer] < ret[kdComparer] ? - nPoint2 : - ret; - } - } - - return ret; - } - - if (!this.kdTree && !this.buildingKdTree) { - this.buildKDTree(); - } - - if (this.kdTree) { - return _search(point, this.kdTree, kdDimensions, kdDimensions); - } - } - - }); // end Series prototype - - /** - * A line series displays information as a series of data points connected by - * straight line segments. - * - * @sample {highcharts} highcharts/demo/line-basic/ Line chart - * @sample {highstock} stock/demo/basic-line/ Line chart - * - * @extends plotOptions.series - * @product highcharts highstock - * @apioption plotOptions.line - */ - - /** - * A `line` series. If the [type](#series.line.type) option is not - * specified, it is inherited from [chart.type](#chart.type). - * - * For options that apply to multiple series, it is recommended to add - * them to the [plotOptions.series](#plotOptions.series) options structure. - * To apply to all series of this specific type, apply it to [plotOptions. - * line](#plotOptions.line). - * - * @type {Object} - * @extends series,plotOptions.line - * @excluding dataParser,dataURL - * @product highcharts highstock - * @apioption series.line - */ - - /** - * An array of data points for the series. For the `line` series type, - * points can be given in the following ways: - * - * 1. An array of numerical values. In this case, the numerical values - * will be interpreted as `y` options. The `x` values will be automatically - * calculated, either starting at 0 and incremented by 1, or from `pointStart` - * and `pointInterval` given in the series options. If the axis has - * categories, these will be used. Example: - * - * ```js - * data: [0, 5, 3, 5] - * ``` - * - * 2. An array of arrays with 2 values. In this case, the values correspond - * to `x,y`. If the first value is a string, it is applied as the name - * of the point, and the `x` value is inferred. - * - * ```js - * data: [ - * [0, 1], - * [1, 2], - * [2, 8] - * ] - * ``` - * - * 3. An array of objects with named values. The objects are point - * configuration objects as seen below. If the total number of data - * points exceeds the series' [turboThreshold](#series.line.turboThreshold), - * this option is not available. - * - * ```js - * data: [{ - * x: 1, - * y: 9, - * name: "Point2", - * color: "#00FF00" - * }, { - * x: 1, - * y: 6, - * name: "Point1", - * color: "#FF00FF" - * }] - * ``` - * - * @type {Array} - * @sample {highcharts} highcharts/chart/reflow-true/ Numerical values - * @sample {highcharts} highcharts/series/data-array-of-arrays/ Arrays of numeric x and y - * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/ Arrays of datetime x and y - * @sample {highcharts} highcharts/series/data-array-of-name-value/ Arrays of point.name and y - * @sample {highcharts} highcharts/series/data-array-of-objects/ Config objects - * @apioption series.line.data - */ - - /** - * An additional, individual class name for the data point's graphic - * representation. - * - * @type {String} - * @since 5.0.0 - * @product highcharts - * @apioption series.line.data.className - */ - - /** - * Individual color for the point. By default the color is pulled from - * the global `colors` array. - * - * In styled mode, the `color` option doesn't take effect. Instead, use - * `colorIndex`. - * - * @type {Color} - * @sample {highcharts} highcharts/point/color/ Mark the highest point - * @default undefined - * @product highcharts highstock - * @apioption series.line.data.color - */ - - /** - * Styled mode only. A specific color index to use for the point, so its - * graphic representations are given the class name - * `highcharts-color-{n}`. - * - * @type {Number} - * @since 5.0.0 - * @product highcharts - * @apioption series.line.data.colorIndex - */ - - /** - * Individual data label for each point. The options are the same as - * the ones for [plotOptions.series.dataLabels](#plotOptions.series. - * dataLabels) - * - * @type {Object} - * @sample {highcharts} highcharts/point/datalabels/ Show a label for the last value - * @sample {highstock} highcharts/point/datalabels/ Show a label for the last value - * @product highcharts highstock - * @apioption series.line.data.dataLabels - */ - - /** - * A description of the point to add to the screen reader information - * about the point. Requires the Accessibility module. - * - * @type {String} - * @default undefined - * @since 5.0.0 - * @apioption series.line.data.description - */ - - /** - * An id for the point. This can be used after render time to get a - * pointer to the point object through `chart.get()`. - * - * @type {String} - * @sample {highcharts} highcharts/point/id/ Remove an id'd point - * @default null - * @since 1.2.0 - * @product highcharts highstock - * @apioption series.line.data.id - */ - - /** - * The rank for this point's data label in case of collision. If two - * data labels are about to overlap, only the one with the highest `labelrank` - * will be drawn. - * - * @type {Number} - * @apioption series.line.data.labelrank - */ - - /** - * The name of the point as shown in the legend, tooltip, dataLabel - * etc. - * - * @type {String} - * @sample {highcharts} highcharts/series/data-array-of-objects/ Point names - * @see [xAxis.uniqueNames](#xAxis.uniqueNames) - * @apioption series.line.data.name - */ - - /** - * Whether the data point is selected initially. - * - * @type {Boolean} - * @default false - * @product highcharts highstock - * @apioption series.line.data.selected - */ - - /** - * The x value of the point. For datetime axes, the X value is the timestamp - * in milliseconds since 1970. - * - * @type {Number} - * @product highcharts highstock - * @apioption series.line.data.x - */ - - /** - * The y value of the point. - * - * @type {Number} - * @default null - * @product highcharts highstock - * @apioption series.line.data.y - */ - - /** - * Individual point events - * - * @extends plotOptions.series.point.events - * @product highcharts highstock - * @apioption series.line.data.events - */ - - /** - * @extends plotOptions.series.marker - * @product highcharts highstock - * @apioption series.line.data.marker - */ - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var Axis = H.Axis, - Chart = H.Chart, - correctFloat = H.correctFloat, - defined = H.defined, - destroyObjectProperties = H.destroyObjectProperties, - each = H.each, - format = H.format, - objectEach = H.objectEach, - pick = H.pick, - Series = H.Series; - - /** - * The class for stacks. Each stack, on a specific X value and either negative - * or positive, has its own stack item. - * - * @class - */ - H.StackItem = function(axis, options, isNegative, x, stackOption) { - - var inverted = axis.chart.inverted; - - this.axis = axis; - - // Tells if the stack is negative - this.isNegative = isNegative; - - // Save the options to be able to style the label - this.options = options; - - // Save the x value to be able to position the label later - this.x = x; - - // Initialize total value - this.total = null; - - // This will keep each points' extremes stored by series.index and point - // index - this.points = {}; - - // Save the stack option on the series configuration object, and whether to - // treat it as percent - this.stack = stackOption; - this.leftCliff = 0; - this.rightCliff = 0; - - // The align options and text align varies on whether the stack is negative - // and if the chart is inverted or not. - // First test the user supplied value, then use the dynamic. - this.alignOptions = { - align: options.align || - (inverted ? (isNegative ? 'left' : 'right') : 'center'), - verticalAlign: options.verticalAlign || - (inverted ? 'middle' : (isNegative ? 'bottom' : 'top')), - y: pick(options.y, inverted ? 4 : (isNegative ? 14 : -6)), - x: pick(options.x, inverted ? (isNegative ? -6 : 6) : 0) - }; - - this.textAlign = options.textAlign || - (inverted ? (isNegative ? 'right' : 'left') : 'center'); - }; - - H.StackItem.prototype = { - destroy: function() { - destroyObjectProperties(this, this.axis); - }, - - /** - * Renders the stack total label and adds it to the stack label group. - */ - render: function(group) { - var options = this.options, - formatOption = options.format, - str = formatOption ? - format(formatOption, this) : - options.formatter.call(this); // format the text in the label - - // Change the text to reflect the new total and set visibility to hidden - // in case the serie is hidden - if (this.label) { - this.label.attr({ - text: str, - visibility: 'hidden' - }); - // Create new label - } else { - this.label = - this.axis.chart.renderer.text(str, null, null, options.useHTML) - .css(options.style) - .attr({ - align: this.textAlign, - rotation: options.rotation, - visibility: 'hidden' // hidden until setOffset is called - }) - .add(group); // add to the labels-group - } - }, - - /** - * Sets the offset that the stack has from the x value and repositions the - * label. - */ - setOffset: function(xOffset, xWidth) { - var stackItem = this, - axis = stackItem.axis, - chart = axis.chart, - // stack value translated mapped to chart coordinates - y = axis.translate( - axis.usePercentage ? 100 : stackItem.total, - 0, - 0, - 0, - 1 - ), - yZero = axis.translate(0), // stack origin - h = Math.abs(y - yZero), // stack height - x = chart.xAxis[0].translate(stackItem.x) + xOffset, // x position - stackBox = stackItem.getStackBox(chart, stackItem, x, y, xWidth, h), - label = stackItem.label, - alignAttr; - - if (label) { - // Align the label to the box - label.align(stackItem.alignOptions, null, stackBox); - - // Set visibility (#678) - alignAttr = label.alignAttr; - label[ - stackItem.options.crop === false || chart.isInsidePlot( - alignAttr.x, - alignAttr.y - ) ? 'show' : 'hide'](true); - } - }, - getStackBox: function(chart, stackItem, x, y, xWidth, h) { - var reversed = stackItem.axis.reversed, - inverted = chart.inverted, - plotHeight = chart.plotHeight, - neg = (stackItem.isNegative && !reversed) || - (!stackItem.isNegative && reversed); // #4056 - - return { // this is the box for the complete stack - x: inverted ? (neg ? y : y - h) : x, - y: inverted ? - plotHeight - x - xWidth : - (neg ? - (plotHeight - y - h) : - plotHeight - y - ), - width: inverted ? h : xWidth, - height: inverted ? xWidth : h - }; - } - }; - - /** - * Generate stacks for each series and calculate stacks total values - */ - Chart.prototype.getStacks = function() { - var chart = this; - - // reset stacks for each yAxis - each(chart.yAxis, function(axis) { - if (axis.stacks && axis.hasVisibleSeries) { - axis.oldStacks = axis.stacks; - } - }); - - each(chart.series, function(series) { - if (series.options.stacking && (series.visible === true || - chart.options.chart.ignoreHiddenSeries === false)) { - series.stackKey = series.type + pick(series.options.stack, ''); - } - }); - }; - - - // Stacking methods defined on the Axis prototype - - /** - * Build the stacks from top down - */ - Axis.prototype.buildStacks = function() { - var axisSeries = this.series, - reversedStacks = pick(this.options.reversedStacks, true), - len = axisSeries.length, - i; - if (!this.isXAxis) { - this.usePercentage = false; - i = len; - while (i--) { - axisSeries[reversedStacks ? i : len - i - 1].setStackedPoints(); - } - - // Loop up again to compute percent and stream stack - for (i = 0; i < len; i++) { - axisSeries[i].modifyStacks(); - } - } - }; - - Axis.prototype.renderStackTotals = function() { - var axis = this, - chart = axis.chart, - renderer = chart.renderer, - stacks = axis.stacks, - stackTotalGroup = axis.stackTotalGroup; - - // Create a separate group for the stack total labels - if (!stackTotalGroup) { - axis.stackTotalGroup = stackTotalGroup = - renderer.g('stack-labels') - .attr({ - visibility: 'visible', - zIndex: 6 - }) - .add(); - } - - // plotLeft/Top will change when y axis gets wider so we need to translate - // the stackTotalGroup at every render call. See bug #506 and #516 - stackTotalGroup.translate(chart.plotLeft, chart.plotTop); - - // Render each stack total - objectEach(stacks, function(type) { - objectEach(type, function(stack) { - stack.render(stackTotalGroup); - }); - }); - }; - - /** - * Set all the stacks to initial states and destroy unused ones. - */ - Axis.prototype.resetStacks = function() { - var axis = this, - stacks = axis.stacks; - if (!axis.isXAxis) { - objectEach(stacks, function(type) { - objectEach(type, function(stack, key) { - // Clean up memory after point deletion (#1044, #4320) - if (stack.touched < axis.stacksTouched) { - stack.destroy(); - delete type[key]; - - // Reset stacks - } else { - stack.total = null; - stack.cumulative = null; - } - }); - }); - } - }; - - Axis.prototype.cleanStacks = function() { - var stacks; - - if (!this.isXAxis) { - if (this.oldStacks) { - stacks = this.stacks = this.oldStacks; - } - - // reset stacks - objectEach(stacks, function(type) { - objectEach(type, function(stack) { - stack.cumulative = stack.total; - }); - }); - } - }; - - - // Stacking methods defnied for Series prototype - - /** - * Adds series' points value to corresponding stack - */ - Series.prototype.setStackedPoints = function() { - if (!this.options.stacking || (this.visible !== true && - this.chart.options.chart.ignoreHiddenSeries !== false)) { - return; - } - - var series = this, - xData = series.processedXData, - yData = series.processedYData, - stackedYData = [], - yDataLength = yData.length, - seriesOptions = series.options, - threshold = seriesOptions.threshold, - stackThreshold = pick(seriesOptions.startFromThreshold && threshold, 0), - stackOption = seriesOptions.stack, - stacking = seriesOptions.stacking, - stackKey = series.stackKey, - negKey = '-' + stackKey, - negStacks = series.negStacks, - yAxis = series.yAxis, - stacks = yAxis.stacks, - oldStacks = yAxis.oldStacks, - stackIndicator, - isNegative, - stack, - other, - key, - pointKey, - i, - x, - y; - - - yAxis.stacksTouched += 1; - - // loop over the non-null y values and read them into a local array - for (i = 0; i < yDataLength; i++) { - x = xData[i]; - y = yData[i]; - stackIndicator = series.getStackIndicator( - stackIndicator, - x, - series.index - ); - pointKey = stackIndicator.key; - // Read stacked values into a stack based on the x value, - // the sign of y and the stack key. Stacking is also handled for null - // values (#739) - isNegative = negStacks && y < (stackThreshold ? 0 : threshold); - key = isNegative ? negKey : stackKey; - - // Create empty object for this stack if it doesn't exist yet - if (!stacks[key]) { - stacks[key] = {}; - } - - // Initialize StackItem for this x - if (!stacks[key][x]) { - if (oldStacks[key] && oldStacks[key][x]) { - stacks[key][x] = oldStacks[key][x]; - stacks[key][x].total = null; - } else { - stacks[key][x] = new H.StackItem( - yAxis, - yAxis.options.stackLabels, - isNegative, - x, - stackOption - ); - } - } - - // If the StackItem doesn't exist, create it first - stack = stacks[key][x]; - if (y !== null) { - stack.points[pointKey] = stack.points[series.index] = [pick(stack.cumulative, stackThreshold)]; - - // Record the base of the stack - if (!defined(stack.cumulative)) { - stack.base = pointKey; - } - stack.touched = yAxis.stacksTouched; - - - // In area charts, if there are multiple points on the same X value, - // let the area fill the full span of those points - if (stackIndicator.index > 0 && series.singleStacks === false) { - stack.points[pointKey][0] = - stack.points[series.index + ',' + x + ',0'][0]; - } - - // When updating to null, reset the point stack (#7493) - } else { - stack.points[pointKey] = stack.points[series.index] = null; - } - - // Add value to the stack total - if (stacking === 'percent') { - - // Percent stacked column, totals are the same for the positive and - // negative stacks - other = isNegative ? stackKey : negKey; - if (negStacks && stacks[other] && stacks[other][x]) { - other = stacks[other][x]; - stack.total = other.total = - Math.max(other.total, stack.total) + Math.abs(y) || 0; - - // Percent stacked areas - } else { - stack.total = correctFloat(stack.total + (Math.abs(y) || 0)); - } - } else { - stack.total = correctFloat(stack.total + (y || 0)); - } - - stack.cumulative = pick(stack.cumulative, stackThreshold) + (y || 0); - - if (y !== null) { - stack.points[pointKey].push(stack.cumulative); - stackedYData[i] = stack.cumulative; - } - - } - - if (stacking === 'percent') { - yAxis.usePercentage = true; - } - - this.stackedYData = stackedYData; // To be used in getExtremes - - // Reset old stacks - yAxis.oldStacks = {}; - }; - - /** - * Iterate over all stacks and compute the absolute values to percent - */ - Series.prototype.modifyStacks = function() { - var series = this, - stackKey = series.stackKey, - stacks = series.yAxis.stacks, - processedXData = series.processedXData, - stackIndicator, - stacking = series.options.stacking; - - if (series[stacking + 'Stacker']) { // Modifier function exists - each([stackKey, '-' + stackKey], function(key) { - var i = processedXData.length, - x, - stack, - pointExtremes; - - while (i--) { - x = processedXData[i]; - stackIndicator = series.getStackIndicator( - stackIndicator, - x, - series.index, - key - ); - stack = stacks[key] && stacks[key][x]; - pointExtremes = stack && stack.points[stackIndicator.key]; - if (pointExtremes) { - series[stacking + 'Stacker'](pointExtremes, stack, i); - } - } - }); - } - }; - - /** - * Modifier function for percent stacks. Blows up the stack to 100%. - */ - Series.prototype.percentStacker = function(pointExtremes, stack, i) { - var totalFactor = stack.total ? 100 / stack.total : 0; - // Y bottom value - pointExtremes[0] = correctFloat(pointExtremes[0] * totalFactor); - // Y value - pointExtremes[1] = correctFloat(pointExtremes[1] * totalFactor); - this.stackedYData[i] = pointExtremes[1]; - }; - - /** - * Get stack indicator, according to it's x-value, to determine points with the - * same x-value - */ - Series.prototype.getStackIndicator = function(stackIndicator, x, index, key) { - // Update stack indicator, when: - // first point in a stack || x changed || stack type (negative vs positive) - // changed: - if (!defined(stackIndicator) || stackIndicator.x !== x || - (key && stackIndicator.key !== key)) { - stackIndicator = { - x: x, - index: 0, - key: key - }; - } else { - stackIndicator.index++; - } - - stackIndicator.key = [index, x, stackIndicator.index].join(','); - - return stackIndicator; - }; - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var addEvent = H.addEvent, - animate = H.animate, - Axis = H.Axis, - Chart = H.Chart, - createElement = H.createElement, - css = H.css, - defined = H.defined, - each = H.each, - erase = H.erase, - extend = H.extend, - fireEvent = H.fireEvent, - inArray = H.inArray, - isNumber = H.isNumber, - isObject = H.isObject, - isArray = H.isArray, - merge = H.merge, - objectEach = H.objectEach, - pick = H.pick, - Point = H.Point, - Series = H.Series, - seriesTypes = H.seriesTypes, - setAnimation = H.setAnimation, - splat = H.splat; - - // Extend the Chart prototype for dynamic methods - extend(Chart.prototype, /** @lends Highcharts.Chart.prototype */ { - - /** - * Add a series to the chart after render time. Note that this method should - * never be used when adding data synchronously at chart render time, as it - * adds expense to the calculations and rendering. When adding data at the - * same time as the chart is initialized, add the series as a configuration - * option instead. With multiple axes, the `offset` is dynamically adjusted. - * - * @param {SeriesOptions} options - * The config options for the series. - * @param {Boolean} [redraw=true] - * Whether to redraw the chart after adding. - * @param {AnimationOptions} animation - * Whether to apply animation, and optionally animation - * configuration. - * - * @return {Highcharts.Series} - * The newly created series object. - * - * @sample highcharts/members/chart-addseries/ - * Add a series from a button - * @sample stock/members/chart-addseries/ - * Add a series in Highstock - */ - addSeries: function(options, redraw, animation) { - var series, - chart = this; - - if (options) { - redraw = pick(redraw, true); // defaults to true - - fireEvent(chart, 'addSeries', { - options: options - }, function() { - series = chart.initSeries(options); - - chart.isDirtyLegend = true; // the series array is out of sync with the display - chart.linkSeries(); - if (redraw) { - chart.redraw(animation); - } - }); - } - - return series; - }, - - /** - * Add an axis to the chart after render time. Note that this method should - * never be used when adding data synchronously at chart render time, as it - * adds expense to the calculations and rendering. When adding data at the - * same time as the chart is initialized, add the axis as a configuration - * option instead. - * @param {AxisOptions} options - * The axis options. - * @param {Boolean} [isX=false] - * Whether it is an X axis or a value axis. - * @param {Boolean} [redraw=true] - * Whether to redraw the chart after adding. - * @param {AnimationOptions} [animation=true] - * Whether and how to apply animation in the redraw. - * - * @sample highcharts/members/chart-addaxis/ Add and remove axes - * - * @return {Axis} - * The newly generated Axis object. - */ - addAxis: function(options, isX, redraw, animation) { - var key = isX ? 'xAxis' : 'yAxis', - chartOptions = this.options, - userOptions = merge(options, { - index: this[key].length, - isX: isX - }), - axis; - - axis = new Axis(this, userOptions); - - // Push the new axis options to the chart options - chartOptions[key] = splat(chartOptions[key] || {}); - chartOptions[key].push(userOptions); - - if (pick(redraw, true)) { - this.redraw(animation); - } - - return axis; - }, - - /** - * Dim the chart and show a loading text or symbol. Options for the loading - * screen are defined in {@link - * https://api.highcharts.com/highcharts/loading|the loading options}. - * - * @param {String} str - * An optional text to show in the loading label instead of the - * default one. The default text is set in {@link - * http://api.highcharts.com/highcharts/lang.loading|lang.loading}. - * - * @sample highcharts/members/chart-hideloading/ - * Show and hide loading from a button - * @sample highcharts/members/chart-showloading/ - * Apply different text labels - * @sample stock/members/chart-show-hide-loading/ - * Toggle loading in Highstock - */ - showLoading: function(str) { - var chart = this, - options = chart.options, - loadingDiv = chart.loadingDiv, - loadingOptions = options.loading, - setLoadingSize = function() { - if (loadingDiv) { - css(loadingDiv, { - left: chart.plotLeft + 'px', - top: chart.plotTop + 'px', - width: chart.plotWidth + 'px', - height: chart.plotHeight + 'px' - }); - } - }; - - // create the layer at the first call - if (!loadingDiv) { - chart.loadingDiv = loadingDiv = createElement('div', { - className: 'highcharts-loading highcharts-loading-hidden' - }, null, chart.container); - - chart.loadingSpan = createElement( - 'span', { - className: 'highcharts-loading-inner' - }, - null, - loadingDiv - ); - addEvent(chart, 'redraw', setLoadingSize); // #1080 - } - - loadingDiv.className = 'highcharts-loading'; - - // Update text - chart.loadingSpan.innerHTML = str || options.lang.loading; - - - // Update visuals - css(loadingDiv, extend(loadingOptions.style, { - zIndex: 10 - })); - css(chart.loadingSpan, loadingOptions.labelStyle); - - // Show it - if (!chart.loadingShown) { - css(loadingDiv, { - opacity: 0, - display: '' - }); - animate(loadingDiv, { - opacity: loadingOptions.style.opacity || 0.5 - }, { - duration: loadingOptions.showDuration || 0 - }); - } - - - chart.loadingShown = true; - setLoadingSize(); - }, - - /** - * Hide the loading layer. - * - * @see Highcharts.Chart#showLoading - * @sample highcharts/members/chart-hideloading/ - * Show and hide loading from a button - * @sample stock/members/chart-show-hide-loading/ - * Toggle loading in Highstock - */ - hideLoading: function() { - var options = this.options, - loadingDiv = this.loadingDiv; - - if (loadingDiv) { - loadingDiv.className = 'highcharts-loading highcharts-loading-hidden'; - - animate(loadingDiv, { - opacity: 0 - }, { - duration: options.loading.hideDuration || 100, - complete: function() { - css(loadingDiv, { - display: 'none' - }); - } - }); - - } - this.loadingShown = false; - }, - - /** - * These properties cause isDirtyBox to be set to true when updating. Can be extended from plugins. - */ - propsRequireDirtyBox: ['backgroundColor', 'borderColor', 'borderWidth', 'margin', 'marginTop', 'marginRight', - 'marginBottom', 'marginLeft', 'spacing', 'spacingTop', 'spacingRight', 'spacingBottom', 'spacingLeft', - 'borderRadius', 'plotBackgroundColor', 'plotBackgroundImage', 'plotBorderColor', 'plotBorderWidth', - 'plotShadow', 'shadow' - ], - - /** - * These properties cause all series to be updated when updating. Can be - * extended from plugins. - */ - propsRequireUpdateSeries: ['chart.inverted', 'chart.polar', - 'chart.ignoreHiddenSeries', 'chart.type', 'colors', 'plotOptions', - 'tooltip' - ], - - /** - * A generic function to update any element of the chart. Elements can be - * enabled and disabled, moved, re-styled, re-formatted etc. - * - * A special case is configuration objects that take arrays, for example - * {@link https://api.highcharts.com/highcharts/xAxis|xAxis}, - * {@link https://api.highcharts.com/highcharts/yAxis|yAxis} or - * {@link https://api.highcharts.com/highcharts/series|series}. For these - * collections, an `id` option is used to map the new option set to an - * existing object. If an existing object of the same id is not found, the - * corresponding item is updated. So for example, running `chart.update` - * with a series item without an id, will cause the existing chart's series - * with the same index in the series array to be updated. When the - * `oneToOne` parameter is true, `chart.update` will also take care of - * adding and removing items from the collection. Read more under the - * parameter description below. - * - * See also the {@link https://api.highcharts.com/highcharts/responsive| - * responsive option set}. Switching between `responsive.rules` basically - * runs `chart.update` under the hood. - * - * @param {Options} options - * A configuration object for the new chart options. - * @param {Boolean} [redraw=true] - * Whether to redraw the chart. - * @param {Boolean} [oneToOne=false] - * When `true`, the `series`, `xAxis` and `yAxis` collections will - * be updated one to one, and items will be either added or removed - * to match the new updated options. For example, if the chart has - * two series and we call `chart.update` with a configuration - * containing three series, one will be added. If we call - * `chart.update` with one series, one will be removed. Setting an - * empty `series` array will remove all series, but leaving out the - * `series` property will leave all series untouched. If the series - * have id's, the new series options will be matched by id, and the - * remaining ones removed. - * - * @sample highcharts/members/chart-update/ - * Update chart geometry - */ - update: function(options, redraw, oneToOne) { - var chart = this, - adders = { - credits: 'addCredits', - title: 'setTitle', - subtitle: 'setSubtitle' - }, - optionsChart = options.chart, - updateAllAxes, - updateAllSeries, - newWidth, - newHeight, - itemsForRemoval = []; - - // If the top-level chart option is present, some special updates are required - if (optionsChart) { - merge(true, chart.options.chart, optionsChart); - - // Setter function - if ('className' in optionsChart) { - chart.setClassName(optionsChart.className); - } - - if ('inverted' in optionsChart || 'polar' in optionsChart) { - // Parse options.chart.inverted and options.chart.polar together - // with the available series. - chart.propFromSeries(); - updateAllAxes = true; - } - - if ('alignTicks' in optionsChart) { // #6452 - updateAllAxes = true; - } - - objectEach(optionsChart, function(val, key) { - if (inArray('chart.' + key, chart.propsRequireUpdateSeries) !== -1) { - updateAllSeries = true; - } - // Only dirty box - if (inArray(key, chart.propsRequireDirtyBox) !== -1) { - chart.isDirtyBox = true; - } - }); - - - if ('style' in optionsChart) { - chart.renderer.setStyle(optionsChart.style); - } - - } - - // Moved up, because tooltip needs updated plotOptions (#6218) - - if (options.colors) { - this.options.colors = options.colors; - } - - - if (options.plotOptions) { - merge(true, this.options.plotOptions, options.plotOptions); - } - - // Some option stuctures correspond one-to-one to chart objects that - // have update methods, for example - // options.credits => chart.credits - // options.legend => chart.legend - // options.title => chart.title - // options.tooltip => chart.tooltip - // options.subtitle => chart.subtitle - // options.mapNavigation => chart.mapNavigation - // options.navigator => chart.navigator - // options.scrollbar => chart.scrollbar - objectEach(options, function(val, key) { - if (chart[key] && typeof chart[key].update === 'function') { - chart[key].update(val, false); - - // If a one-to-one object does not exist, look for an adder function - } else if (typeof chart[adders[key]] === 'function') { - chart[adders[key]](val); - } - - if ( - key !== 'chart' && - inArray(key, chart.propsRequireUpdateSeries) !== -1 - ) { - updateAllSeries = true; - } - }); - - // Setters for collections. For axes and series, each item is referred - // by an id. If the id is not found, it defaults to the corresponding - // item in the collection, so setting one series without an id, will - // update the first series in the chart. Setting two series without - // an id will update the first and the second respectively (#6019) - // chart.update and responsive. - each([ - 'xAxis', - 'yAxis', - 'zAxis', - 'series', - 'colorAxis', - 'pane' - ], function(coll) { - if (options[coll]) { - each(splat(options[coll]), function(newOptions, i) { - var item = ( - defined(newOptions.id) && - chart.get(newOptions.id) - ) || chart[coll][i]; - if (item && item.coll === coll) { - item.update(newOptions, false); - - if (oneToOne) { - item.touched = true; - } - } - - // If oneToOne and no matching item is found, add one - if (!item && oneToOne) { - if (coll === 'series') { - chart.addSeries(newOptions, false) - .touched = true; - } else if (coll === 'xAxis' || coll === 'yAxis') { - chart.addAxis(newOptions, coll === 'xAxis', false) - .touched = true; - } - } - - }); - - // Add items for removal - if (oneToOne) { - each(chart[coll], function(item) { - if (!item.touched) { - itemsForRemoval.push(item); - } else { - delete item.touched; - } - }); - } - - - } - }); - - each(itemsForRemoval, function(item) { - item.remove(false); - }); - - if (updateAllAxes) { - each(chart.axes, function(axis) { - axis.update({}, false); - }); - } - - // Certain options require the whole series structure to be thrown away - // and rebuilt - if (updateAllSeries) { - each(chart.series, function(series) { - series.update({}, false); - }); - } - - // For loading, just update the options, do not redraw - if (options.loading) { - merge(true, chart.options.loading, options.loading); - } - - // Update size. Redraw is forced. - newWidth = optionsChart && optionsChart.width; - newHeight = optionsChart && optionsChart.height; - if ((isNumber(newWidth) && newWidth !== chart.chartWidth) || - (isNumber(newHeight) && newHeight !== chart.chartHeight)) { - chart.setSize(newWidth, newHeight); - } else if (pick(redraw, true)) { - chart.redraw(); - } - }, - - /** - * Shortcut to set the subtitle options. This can also be done from {@link - * Chart#update} or {@link Chart#setTitle}. - * - * @param {SubtitleOptions} options - * New subtitle options. The subtitle text itself is set by the - * `options.text` property. - */ - setSubtitle: function(options) { - this.setTitle(undefined, options); - } - - - }); - - // extend the Point prototype for dynamic methods - extend(Point.prototype, /** @lends Highcharts.Point.prototype */ { - /** - * Update point with new options (typically x/y data) and optionally redraw - * the series. - * - * @param {Object} options - * The point options. Point options are handled as described under - * the `series.type.data` item for each series type. For example - * for a line series, if options is a single number, the point will - * be given that number as the main y value. If it is an array, it - * will be interpreted as x and y values respectively. If it is an - * object, advanced options are applied. - * @param {Boolean} [redraw=true] - * Whether to redraw the chart after the point is updated. If doing - * more operations on the chart, it is best practice to set - * `redraw` to false and call `chart.redraw()` after. - * @param {AnimationOptions} [animation=true] - * Whether to apply animation, and optionally animation - * configuration. - * - * @sample highcharts/members/point-update-column/ - * Update column value - * @sample highcharts/members/point-update-pie/ - * Update pie slice - * @sample maps/members/point-update/ - * Update map area value in Highmaps - */ - update: function(options, redraw, animation, runEvent) { - var point = this, - series = point.series, - graphic = point.graphic, - i, - chart = series.chart, - seriesOptions = series.options; - - redraw = pick(redraw, true); - - function update() { - - point.applyOptions(options); - - // Update visuals - if (point.y === null && graphic) { // #4146 - point.graphic = graphic.destroy(); - } - if (isObject(options, true)) { - // Destroy so we can get new elements - if (graphic && graphic.element) { - // "null" is also a valid symbol - if (options && options.marker && options.marker.symbol !== undefined) { - point.graphic = graphic.destroy(); - } - } - if (options && options.dataLabels && point.dataLabel) { // #2468 - point.dataLabel = point.dataLabel.destroy(); - } - if (point.connector) { - point.connector = point.connector.destroy(); // #7243 - } - } - - // record changes in the parallel arrays - i = point.index; - series.updateParallelArrays(point, i); - - // Record the options to options.data. If the old or the new config - // is an object, use point options, otherwise use raw options - // (#4701, #4916). - seriesOptions.data[i] = ( - isObject(seriesOptions.data[i], true) || - isObject(options, true) - ) ? - point.options : - options; - - // redraw - series.isDirty = series.isDirtyData = true; - if (!series.fixedBox && series.hasCartesianSeries) { // #1906, #2320 - chart.isDirtyBox = true; - } - - if (seriesOptions.legendType === 'point') { // #1831, #1885 - chart.isDirtyLegend = true; - } - if (redraw) { - chart.redraw(animation); - } - } - - // Fire the event with a default handler of doing the update - if (runEvent === false) { // When called from setData - update(); - } else { - point.firePointEvent('update', { - options: options - }, update); - } - }, - - /** - * Remove a point and optionally redraw the series and if necessary the axes - * @param {Boolean} redraw - * Whether to redraw the chart or wait for an explicit call. When - * doing more operations on the chart, for example running - * `point.remove()` in a loop, it is best practice to set `redraw` - * to false and call `chart.redraw()` after. - * @param {AnimationOptions} [animation=false] - * Whether to apply animation, and optionally animation - * configuration. - * - * @sample highcharts/plotoptions/series-point-events-remove/ - * Remove point and confirm - * @sample highcharts/members/point-remove/ - * Remove pie slice - * @sample maps/members/point-remove/ - * Remove selected points in Highmaps - */ - remove: function(redraw, animation) { - this.series.removePoint(inArray(this, this.series.data), redraw, animation); - } - }); - - // Extend the series prototype for dynamic methods - extend(Series.prototype, /** @lends Series.prototype */ { - /** - * Add a point to the series after render time. The point can be added at - * the end, or by giving it an X value, to the start or in the middle of the - * series. - * - * @param {Number|Array|Object} options - * The point options. If options is a single number, a point with - * that y value is appended to the series.If it is an array, it will - * be interpreted as x and y values respectively. If it is an - * object, advanced options as outlined under `series.data` are - * applied. - * @param {Boolean} [redraw=true] - * Whether to redraw the chart after the point is added. When adding - * more than one point, it is highly recommended that the redraw - * option be set to false, and instead {@link Chart#redraw} - * is explicitly called after the adding of points is finished. - * Otherwise, the chart will redraw after adding each point. - * @param {Boolean} [shift=false] - * If true, a point is shifted off the start of the series as one is - * appended to the end. - * @param {AnimationOptions} [animation] - * Whether to apply animation, and optionally animation - * configuration. - * - * @sample highcharts/members/series-addpoint-append/ - * Append point - * @sample highcharts/members/series-addpoint-append-and-shift/ - * Append and shift - * @sample highcharts/members/series-addpoint-x-and-y/ - * Both X and Y values given - * @sample highcharts/members/series-addpoint-pie/ - * Append pie slice - * @sample stock/members/series-addpoint/ - * Append 100 points in Highstock - * @sample stock/members/series-addpoint-shift/ - * Append and shift in Highstock - * @sample maps/members/series-addpoint/ - * Add a point in Highmaps - */ - addPoint: function(options, redraw, shift, animation) { - var series = this, - seriesOptions = series.options, - data = series.data, - chart = series.chart, - xAxis = series.xAxis, - names = xAxis && xAxis.hasNames && xAxis.names, - dataOptions = seriesOptions.data, - point, - isInTheMiddle, - xData = series.xData, - i, - x; - - // Optional redraw, defaults to true - redraw = pick(redraw, true); - - // Get options and push the point to xData, yData and series.options. In series.generatePoints - // the Point instance will be created on demand and pushed to the series.data array. - point = { - series: series - }; - series.pointClass.prototype.applyOptions.apply(point, [options]); - x = point.x; - - // Get the insertion point - i = xData.length; - if (series.requireSorting && x < xData[i - 1]) { - isInTheMiddle = true; - while (i && xData[i - 1] > x) { - i--; - } - } - - series.updateParallelArrays(point, 'splice', i, 0, 0); // insert undefined item - series.updateParallelArrays(point, i); // update it - - if (names && point.name) { - names[x] = point.name; - } - dataOptions.splice(i, 0, options); - - if (isInTheMiddle) { - series.data.splice(i, 0, null); - series.processData(); - } - - // Generate points to be added to the legend (#1329) - if (seriesOptions.legendType === 'point') { - series.generatePoints(); - } - - // Shift the first point off the parallel arrays - if (shift) { - if (data[0] && data[0].remove) { - data[0].remove(false); - } else { - data.shift(); - series.updateParallelArrays(point, 'shift'); - - dataOptions.shift(); - } - } - - // redraw - series.isDirty = true; - series.isDirtyData = true; - - if (redraw) { - chart.redraw(animation); // Animation is set anyway on redraw, #5665 - } - }, - - /** - * Remove a point from the series. Unlike the {@link Highcharts.Point#remove} - * method, this can also be done on a point that is not instanciated because - * it is outside the view or subject to Highstock data grouping. - * - * @param {Number} i - * The index of the point in the {@link Highcharts.Series.data|data} - * array. - * @param {Boolean} [redraw=true] - * Whether to redraw the chart after the point is added. When - * removing more than one point, it is highly recommended that the - * `redraw` option be set to `false`, and instead {@link - * Highcharts.Chart#redraw} is explicitly called after the adding of - * points is finished. - * @param {AnimationOptions} [animation] - * Whether and optionally how the series should be animated. - * - * @sample highcharts/members/series-removepoint/ - * Remove cropped point - */ - removePoint: function(i, redraw, animation) { - - var series = this, - data = series.data, - point = data[i], - points = series.points, - chart = series.chart, - remove = function() { - - if (points && points.length === data.length) { // #4935 - points.splice(i, 1); - } - data.splice(i, 1); - series.options.data.splice(i, 1); - series.updateParallelArrays(point || { - series: series - }, 'splice', i, 1); - - if (point) { - point.destroy(); - } - - // redraw - series.isDirty = true; - series.isDirtyData = true; - if (redraw) { - chart.redraw(); - } - }; - - setAnimation(animation, chart); - redraw = pick(redraw, true); - - // Fire the event with a default handler of removing the point - if (point) { - point.firePointEvent('remove', null, remove); - } else { - remove(); - } - }, - - /** - * Remove a series and optionally redraw the chart. - * - * @param {Boolean} [redraw=true] - * Whether to redraw the chart or wait for an explicit call to - * {@link Highcharts.Chart#redraw}. - * @param {AnimationOptions} [animation] - * Whether to apply animation, and optionally animation - * configuration - * @param {Boolean} [withEvent=true] - * Used internally, whether to fire the series `remove` event. - * - * @sample highcharts/members/series-remove/ - * Remove first series from a button - */ - remove: function(redraw, animation, withEvent) { - var series = this, - chart = series.chart; - - function remove() { - - // Destroy elements - series.destroy(); - - // Redraw - chart.isDirtyLegend = chart.isDirtyBox = true; - chart.linkSeries(); - - if (pick(redraw, true)) { - chart.redraw(animation); - } - } - - // Fire the event with a default handler of removing the point - if (withEvent !== false) { - fireEvent(series, 'remove', null, remove); - } else { - remove(); - } - }, - - /** - * Update the series with a new set of options. For a clean and precise - * handling of new options, all methods and elements from the series are - * removed, and it is initiated from scratch. Therefore, this method is more - * performance expensive than some other utility methods like {@link - * Series#setData} or {@link Series#setVisible}. - * - * @param {SeriesOptions} options - * New options that will be merged with the series' existing - * options. - * @param {Boolean} [redraw=true] - * Whether to redraw the chart after the series is altered. If doing - * more operations on the chart, it is a good idea to set redraw to - * false and call {@link Chart#redraw} after. - * - * @sample highcharts/members/series-update/ - * Updating series options - * @sample maps/members/series-update/ - * Update series options in Highmaps - */ - update: function(newOptions, redraw) { - var series = this, - chart = series.chart, - // must use user options when changing type because series.options - // is merged in with type specific plotOptions - oldOptions = series.userOptions, - oldType = series.oldType || series.type, - newType = newOptions.type || oldOptions.type || chart.options.chart.type, - proto = seriesTypes[oldType].prototype, - n, - groups = [ - 'group', - 'markerGroup', - 'dataLabelsGroup' - ], - preserve = [ - 'navigatorSeries', - 'baseSeries' - ], - - // Animation must be enabled when calling update before the initial - // animation has first run. This happens when calling update - // directly after chart initialization, or when applying responsive - // rules (#6912). - animation = series.finishedAnimating && { - animation: false - }; - - // Running Series.update to update the data only is an intuitive usage, - // so we want to make sure that when used like this, we run the - // cheaper setData function and allow animation instead of completely - // recreating the series instance. - if (Object.keys && Object.keys(newOptions).toString() === 'data') { - return this.setData(newOptions.data, redraw); - } - - // Make sure preserved properties are not destroyed (#3094) - preserve = groups.concat(preserve); - each(preserve, function(prop) { - preserve[prop] = series[prop]; - delete series[prop]; - }); - - // Do the merge, with some forced options - newOptions = merge(oldOptions, animation, { - index: series.index, - pointStart: series.xData[0] // when updating after addPoint - }, { - data: series.options.data - }, newOptions); - - // Destroy the series and delete all properties. Reinsert all methods - // and properties from the new type prototype (#2270, #3719) - series.remove(false, null, false); - for (n in proto) { - series[n] = undefined; - } - extend(series, seriesTypes[newType || oldType].prototype); - - // Re-register groups (#3094) and other preserved properties - each(preserve, function(prop) { - series[prop] = preserve[prop]; - }); - - series.init(chart, newOptions); - - // Update the Z index of groups (#3380, #7397) - if (newOptions.zIndex !== oldOptions.zIndex) { - each(groups, function(groupName) { - if (series[groupName]) { - series[groupName].attr({ - zIndex: newOptions.zIndex - }); - } - }); - } - - - series.oldType = oldType; - chart.linkSeries(); // Links are lost in series.remove (#3028) - if (pick(redraw, true)) { - chart.redraw(false); - } - } - }); - - // Extend the Axis.prototype for dynamic methods - extend(Axis.prototype, /** @lends Highcharts.Axis.prototype */ { - - /** - * Update an axis object with a new set of options. The options are merged - * with the existing options, so only new or altered options need to be - * specified. - * - * @param {Object} options - * The new options that will be merged in with existing options on - * the axis. - * @sample highcharts/members/axis-update/ Axis update demo - */ - update: function(options, redraw) { - var chart = this.chart; - - options = chart.options[this.coll][this.options.index] = - merge(this.userOptions, options); - - this.destroy(true); - - this.init(chart, extend(options, { - events: undefined - })); - - chart.isDirtyBox = true; - if (pick(redraw, true)) { - chart.redraw(); - } - }, - - /** - * Remove the axis from the chart. - * - * @param {Boolean} [redraw=true] Whether to redraw the chart following the - * remove. - * - * @sample highcharts/members/chart-addaxis/ Add and remove axes - */ - remove: function(redraw) { - var chart = this.chart, - key = this.coll, // xAxis or yAxis - axisSeries = this.series, - i = axisSeries.length; - - // Remove associated series (#2687) - while (i--) { - if (axisSeries[i]) { - axisSeries[i].remove(false); - } - } - - // Remove the axis - erase(chart.axes, this); - erase(chart[key], this); - - if (isArray(chart.options[key])) { - chart.options[key].splice(this.options.index, 1); - } else { // color axis, #6488 - delete chart.options[key]; - } - - each(chart[key], function(axis, i) { // Re-index, #1706 - axis.options.index = i; - }); - this.destroy(); - chart.isDirtyBox = true; - - if (pick(redraw, true)) { - chart.redraw(); - } - }, - - /** - * Update the axis title by options after render time. - * - * @param {TitleOptions} titleOptions - * The additional title options. - * @param {Boolean} [redraw=true] - * Whether to redraw the chart after setting the title. - * @sample highcharts/members/axis-settitle/ Set a new Y axis title - */ - setTitle: function(titleOptions, redraw) { - this.update({ - title: titleOptions - }, redraw); - }, - - /** - * Set new axis categories and optionally redraw. - * @param {Array.} categories - The new categories. - * @param {Boolean} [redraw=true] - Whether to redraw the chart. - * @sample highcharts/members/axis-setcategories/ Set categories by click on - * a button - */ - setCategories: function(categories, redraw) { - this.update({ - categories: categories - }, redraw); - } - - }); - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var color = H.color, - each = H.each, - LegendSymbolMixin = H.LegendSymbolMixin, - map = H.map, - pick = H.pick, - Series = H.Series, - seriesType = H.seriesType; - - /** - * Area series type. - * @constructor seriesTypes.area - * @extends {Series} - */ - /** - * The area series type. - * @extends {plotOptions.line} - * @product highcharts highstock - * @sample {highcharts} highcharts/demo/area-basic/ - * Area chart - * @sample {highstock} stock/demo/area/ - * Area chart - * @optionparent plotOptions.area - */ - seriesType('area', 'line', { - - /** - * Fill color or gradient for the area. When `null`, the series' `color` - * is used with the series' `fillOpacity`. - * - * @type {Color} - * @see In styled mode, the fill color can be set with the `.highcharts-area` class name. - * @sample {highcharts} highcharts/plotoptions/area-fillcolor-default/ Null by default - * @sample {highcharts} highcharts/plotoptions/area-fillcolor-gradient/ Gradient - * @default null - * @product highcharts highstock - * @apioption plotOptions.area.fillColor - */ - - /** - * Fill opacity for the area. When you set an explicit `fillColor`, - * the `fillOpacity` is not applied. Instead, you should define the - * opacity in the `fillColor` with an rgba color definition. The `fillOpacity` - * setting, also the default setting, overrides the alpha component - * of the `color` setting. - * - * @type {Number} - * @see In styled mode, the fill opacity can be set with the `.highcharts-area` class name. - * @sample {highcharts} highcharts/plotoptions/area-fillopacity/ Automatic fill color and fill opacity of 0.1 - * @default {highcharts} 0.75 - * @default {highstock} .75 - * @product highcharts highstock - * @apioption plotOptions.area.fillOpacity - */ - - /** - * A separate color for the graph line. By default the line takes the - * `color` of the series, but the lineColor setting allows setting a - * separate color for the line without altering the `fillColor`. - * - * @type {Color} - * @see In styled mode, the line stroke can be set with the `.highcharts-graph` class name. - * @sample {highcharts} highcharts/plotoptions/area-linecolor/ Dark gray line - * @default null - * @product highcharts highstock - * @apioption plotOptions.area.lineColor - */ - - /** - * A separate color for the negative part of the area. - * - * @type {Color} - * @see [negativeColor](#plotOptions.area.negativeColor). In styled mode, a negative - * color is set with the `.highcharts-negative` class name ([view live - * demo](http://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/css/series- - * negative-color/)). - * @since 3.0 - * @product highcharts - * @apioption plotOptions.area.negativeFillColor - */ - - /** - * When this is true, the series will not cause the Y axis to cross - * the zero plane (or [threshold](#plotOptions.series.threshold) option) - * unless the data actually crosses the plane. - * - * For example, if `softThreshold` is `false`, a series of 0, 1, 2, - * 3 will make the Y axis show negative values according to the `minPadding` - * option. If `softThreshold` is `true`, the Y axis starts at 0. - * - * @type {Boolean} - * @default false - * @since 4.1.9 - * @product highcharts highstock - */ - softThreshold: false, - - /** - * The Y axis value to serve as the base for the area, for distinguishing - * between values above and below a threshold. If `null`, the area - * behaves like a line series with fill between the graph and the Y - * axis minimum. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/area-threshold/ A threshold of 100 - * @default 0 - * @since 2.0 - * @product highcharts highstock - */ - threshold: 0 - - /** - * Whether the whole area or just the line should respond to mouseover - * tooltips and other mouse or touch events. - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/area-trackbyarea/ Display the tooltip when the area is hovered - * @sample {highstock} highcharts/plotoptions/area-trackbyarea/ Display the tooltip when the area is hovered - * @default false - * @since 1.1.6 - * @product highcharts highstock - * @apioption plotOptions.area.trackByArea - */ - - - }, /** @lends seriesTypes.area.prototype */ { - singleStacks: false, - /** - * Return an array of stacked points, where null and missing points are replaced by - * dummy points in order for gaps to be drawn correctly in stacks. - */ - getStackPoints: function(points) { - var series = this, - segment = [], - keys = [], - xAxis = this.xAxis, - yAxis = this.yAxis, - stack = yAxis.stacks[this.stackKey], - pointMap = {}, - seriesIndex = series.index, - yAxisSeries = yAxis.series, - seriesLength = yAxisSeries.length, - visibleSeries, - upOrDown = pick(yAxis.options.reversedStacks, true) ? 1 : -1, - i; - - - points = points || this.points; - - if (this.options.stacking) { - - for (i = 0; i < points.length; i++) { - // Reset after point update (#7326) - points[i].leftNull = points[i].rightNull = null; - - // Create a map where we can quickly look up the points by their - // X values. - pointMap[points[i].x] = points[i]; - } - - // Sort the keys (#1651) - H.objectEach(stack, function(stackX, x) { - if (stackX.total !== null) { // nulled after switching between grouping and not (#1651, #2336) - keys.push(x); - } - }); - keys.sort(function(a, b) { - return a - b; - }); - - visibleSeries = map(yAxisSeries, function() { - return this.visible; - }); - - each(keys, function(x, idx) { - var y = 0, - stackPoint, - stackedValues; - - if (pointMap[x] && !pointMap[x].isNull) { - segment.push(pointMap[x]); - - // Find left and right cliff. -1 goes left, 1 goes right. - each([-1, 1], function(direction) { - var nullName = direction === 1 ? 'rightNull' : 'leftNull', - cliffName = direction === 1 ? 'rightCliff' : 'leftCliff', - cliff = 0, - otherStack = stack[keys[idx + direction]]; - - // If there is a stack next to this one, to the left or to the right... - if (otherStack) { - i = seriesIndex; - while (i >= 0 && i < seriesLength) { // Can go either up or down, depending on reversedStacks - stackPoint = otherStack.points[i]; - if (!stackPoint) { - // If the next point in this series is missing, mark the point - // with point.leftNull or point.rightNull = true. - if (i === seriesIndex) { - pointMap[x][nullName] = true; - - // If there are missing points in the next stack in any of the - // series below this one, we need to substract the missing values - // and add a hiatus to the left or right. - } else if (visibleSeries[i]) { - stackedValues = stack[x].points[i]; - if (stackedValues) { - cliff -= stackedValues[1] - stackedValues[0]; - } - } - } - // When reversedStacks is true, loop up, else loop down - i += upOrDown; - } - } - pointMap[x][cliffName] = cliff; - }); - - - // There is no point for this X value in this series, so we - // insert a dummy point in order for the areas to be drawn - // correctly. - } else { - - // Loop down the stack to find the series below this one that has - // a value (#1991) - i = seriesIndex; - while (i >= 0 && i < seriesLength) { - stackPoint = stack[x].points[i]; - if (stackPoint) { - y = stackPoint[1]; - break; - } - // When reversedStacks is true, loop up, else loop down - i += upOrDown; - } - y = yAxis.translate(y, 0, 1, 0, 1); // #6272 - segment.push({ - isNull: true, - plotX: xAxis.translate(x, 0, 0, 0, 1), // #6272 - x: x, - plotY: y, - yBottom: y - }); - } - }); - - } - - return segment; - }, - - getGraphPath: function(points) { - var getGraphPath = Series.prototype.getGraphPath, - graphPath, - options = this.options, - stacking = options.stacking, - yAxis = this.yAxis, - topPath, - bottomPath, - bottomPoints = [], - graphPoints = [], - seriesIndex = this.index, - i, - areaPath, - plotX, - stacks = yAxis.stacks[this.stackKey], - threshold = options.threshold, - translatedThreshold = yAxis.getThreshold(options.threshold), - isNull, - yBottom, - connectNulls = options.connectNulls || stacking === 'percent', - /** - * To display null points in underlying stacked series, this series graph must be - * broken, and the area also fall down to fill the gap left by the null point. #2069 - */ - addDummyPoints = function(i, otherI, side) { - var point = points[i], - stackedValues = stacking && stacks[point.x].points[seriesIndex], - nullVal = point[side + 'Null'] || 0, - cliffVal = point[side + 'Cliff'] || 0, - top, - bottom, - isNull = true; - - if (cliffVal || nullVal) { - - top = (nullVal ? stackedValues[0] : stackedValues[1]) + cliffVal; - bottom = stackedValues[0] + cliffVal; - isNull = !!nullVal; - - } else if (!stacking && points[otherI] && points[otherI].isNull) { - top = bottom = threshold; - } - - // Add to the top and bottom line of the area - if (top !== undefined) { - graphPoints.push({ - plotX: plotX, - plotY: top === null ? translatedThreshold : yAxis.getThreshold(top), - isNull: isNull, - isCliff: true - }); - bottomPoints.push({ - plotX: plotX, - plotY: bottom === null ? translatedThreshold : yAxis.getThreshold(bottom), - doCurve: false // #1041, gaps in areaspline areas - }); - } - }; - - // Find what points to use - points = points || this.points; - - // Fill in missing points - if (stacking) { - points = this.getStackPoints(points); - } - - for (i = 0; i < points.length; i++) { - isNull = points[i].isNull; - plotX = pick(points[i].rectPlotX, points[i].plotX); - yBottom = pick(points[i].yBottom, translatedThreshold); - - if (!isNull || connectNulls) { - - if (!connectNulls) { - addDummyPoints(i, i - 1, 'left'); - } - - if (!(isNull && !stacking && connectNulls)) { // Skip null point when stacking is false and connectNulls true - graphPoints.push(points[i]); - bottomPoints.push({ - x: i, - plotX: plotX, - plotY: yBottom - }); - } - - if (!connectNulls) { - addDummyPoints(i, i + 1, 'right'); - } - } - } - - topPath = getGraphPath.call(this, graphPoints, true, true); - - bottomPoints.reversed = true; - bottomPath = getGraphPath.call(this, bottomPoints, true, true); - if (bottomPath.length) { - bottomPath[0] = 'L'; - } - - areaPath = topPath.concat(bottomPath); - graphPath = getGraphPath.call(this, graphPoints, false, connectNulls); // TODO: don't set leftCliff and rightCliff when connectNulls? - - areaPath.xMap = topPath.xMap; - this.areaPath = areaPath; - - return graphPath; - }, - - /** - * Draw the graph and the underlying area. This method calls the Series base - * function and adds the area. The areaPath is calculated in the getSegmentPath - * method called from Series.prototype.drawGraph. - */ - drawGraph: function() { - - // Define or reset areaPath - this.areaPath = []; - - // Call the base method - Series.prototype.drawGraph.apply(this); - - // Define local variables - var series = this, - areaPath = this.areaPath, - options = this.options, - zones = this.zones, - props = [ - [ - 'area', - 'highcharts-area', - - this.color, - options.fillColor - - ] - ]; // area name, main color, fill color - - each(zones, function(zone, i) { - props.push([ - 'zone-area-' + i, - 'highcharts-area highcharts-zone-area-' + i + ' ' + zone.className, - - zone.color || series.color, - zone.fillColor || options.fillColor - - ]); - }); - - each(props, function(prop) { - var areaKey = prop[0], - area = series[areaKey]; - - // Create or update the area - if (area) { // update - area.endX = series.preventGraphAnimation ? null : areaPath.xMap; - area.animate({ - d: areaPath - }); - - } else { // create - area = series[areaKey] = series.chart.renderer.path(areaPath) - .addClass(prop[1]) - .attr({ - - fill: pick( - prop[3], - color(prop[2]).setOpacity(pick(options.fillOpacity, 0.75)).get() - ), - - zIndex: 0 // #1069 - }).add(series.group); - area.isArea = true; - } - area.startX = areaPath.xMap; - area.shiftUnit = options.step ? 2 : 1; - }); - }, - - drawLegendSymbol: LegendSymbolMixin.drawRectangle - }); - - /** - * A `area` series. If the [type](#series.area.type) option is not - * specified, it is inherited from [chart.type](#chart.type). - * - * For options that apply to multiple series, it is recommended to add - * them to the [plotOptions.series](#plotOptions.series) options structure. - * To apply to all series of this specific type, apply it to [plotOptions. - * area](#plotOptions.area). - * - * @type {Object} - * @extends series,plotOptions.area - * @excluding dataParser,dataURL - * @product highcharts highstock - * @apioption series.area - */ - - /** - * An array of data points for the series. For the `area` series type, - * points can be given in the following ways: - * - * 1. An array of numerical values. In this case, the numerical values - * will be interpreted as `y` options. The `x` values will be automatically - * calculated, either starting at 0 and incremented by 1, or from `pointStart` - * and `pointInterval` given in the series options. If the axis has - * categories, these will be used. Example: - * - * ```js - * data: [0, 5, 3, 5] - * ``` - * - * 2. An array of arrays with 2 values. In this case, the values correspond - * to `x,y`. If the first value is a string, it is applied as the name - * of the point, and the `x` value is inferred. - * - * ```js - * data: [ - * [0, 9], - * [1, 7], - * [2, 6] - * ] - * ``` - * - * 3. An array of objects with named values. The objects are point - * configuration objects as seen below. If the total number of data - * points exceeds the series' [turboThreshold](#series.area.turboThreshold), - * this option is not available. - * - * ```js - * data: [{ - * x: 1, - * y: 9, - * name: "Point2", - * color: "#00FF00" - * }, { - * x: 1, - * y: 6, - * name: "Point1", - * color: "#FF00FF" - * }] - * ``` - * - * @type {Array} - * @extends series.line.data - * @sample {highcharts} highcharts/chart/reflow-true/ Numerical values - * @sample {highcharts} highcharts/series/data-array-of-arrays/ Arrays of numeric x and y - * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/ Arrays of datetime x and y - * @sample {highcharts} highcharts/series/data-array-of-name-value/ Arrays of point.name and y - * @sample {highcharts} highcharts/series/data-array-of-objects/ Config objects - * @product highcharts highstock - * @apioption series.area.data - */ - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var pick = H.pick, - seriesType = H.seriesType; - - /** - * A spline series is a special type of line series, where the segments between - * the data points are smoothed. - * - * @sample {highcharts} highcharts/demo/spline-irregular-time/ Spline chart - * @sample {highstock} stock/demo/spline/ Spline chart - * - * @extends plotOptions.series - * @excluding step - * @product highcharts highstock - * @apioption plotOptions.spline - */ - - /** - * Spline series type. - * @constructor seriesTypes.spline - * @extends {Series} - */ - seriesType('spline', 'line', {}, /** @lends seriesTypes.spline.prototype */ { - /** - * Get the spline segment from a given point's previous neighbour to the - * given point - */ - getPointSpline: function(points, point, i) { - var - // 1 means control points midway between points, 2 means 1/3 from - // the point, 3 is 1/4 etc - smoothing = 1.5, - denom = smoothing + 1, - plotX = point.plotX, - plotY = point.plotY, - lastPoint = points[i - 1], - nextPoint = points[i + 1], - leftContX, - leftContY, - rightContX, - rightContY, - ret; - - function doCurve(otherPoint) { - return otherPoint && - !otherPoint.isNull && - otherPoint.doCurve !== false && - !point.isCliff; // #6387, area splines next to null - } - - // Find control points - if (doCurve(lastPoint) && doCurve(nextPoint)) { - var lastX = lastPoint.plotX, - lastY = lastPoint.plotY, - nextX = nextPoint.plotX, - nextY = nextPoint.plotY, - correction = 0; - - leftContX = (smoothing * plotX + lastX) / denom; - leftContY = (smoothing * plotY + lastY) / denom; - rightContX = (smoothing * plotX + nextX) / denom; - rightContY = (smoothing * plotY + nextY) / denom; - - // Have the two control points make a straight line through main - // point - if (rightContX !== leftContX) { // #5016, division by zero - correction = ((rightContY - leftContY) * (rightContX - plotX)) / - (rightContX - leftContX) + plotY - rightContY; - } - - leftContY += correction; - rightContY += correction; - - // to prevent false extremes, check that control points are between - // neighbouring points' y values - if (leftContY > lastY && leftContY > plotY) { - leftContY = Math.max(lastY, plotY); - // mirror of left control point - rightContY = 2 * plotY - leftContY; - } else if (leftContY < lastY && leftContY < plotY) { - leftContY = Math.min(lastY, plotY); - rightContY = 2 * plotY - leftContY; - } - if (rightContY > nextY && rightContY > plotY) { - rightContY = Math.max(nextY, plotY); - leftContY = 2 * plotY - rightContY; - } else if (rightContY < nextY && rightContY < plotY) { - rightContY = Math.min(nextY, plotY); - leftContY = 2 * plotY - rightContY; - } - - // record for drawing in next point - point.rightContX = rightContX; - point.rightContY = rightContY; - - - } - - // Visualize control points for debugging - /* - if (leftContX) { - this.chart.renderer.circle( - leftContX + this.chart.plotLeft, - leftContY + this.chart.plotTop, - 2 - ) - .attr({ - stroke: 'red', - 'stroke-width': 2, - fill: 'none', - zIndex: 9 - }) - .add(); - this.chart.renderer.path(['M', leftContX + this.chart.plotLeft, - leftContY + this.chart.plotTop, - 'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop]) - .attr({ - stroke: 'red', - 'stroke-width': 2, - zIndex: 9 - }) - .add(); - } - if (rightContX) { - this.chart.renderer.circle( - rightContX + this.chart.plotLeft, - rightContY + this.chart.plotTop, - 2 - ) - .attr({ - stroke: 'green', - 'stroke-width': 2, - fill: 'none', - zIndex: 9 - }) - .add(); - this.chart.renderer.path(['M', rightContX + this.chart.plotLeft, - rightContY + this.chart.plotTop, - 'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop]) - .attr({ - stroke: 'green', - 'stroke-width': 2, - zIndex: 9 - }) - .add(); - } - // */ - ret = [ - 'C', - pick(lastPoint.rightContX, lastPoint.plotX), - pick(lastPoint.rightContY, lastPoint.plotY), - pick(leftContX, plotX), - pick(leftContY, plotY), - plotX, - plotY - ]; - // reset for updating series later - lastPoint.rightContX = lastPoint.rightContY = null; - return ret; - } - }); - - /** - * A `spline` series. If the [type](#series.spline.type) option is - * not specified, it is inherited from [chart.type](#chart.type). - * - * For options that apply to multiple series, it is recommended to add - * them to the [plotOptions.series](#plotOptions.series) options structure. - * To apply to all series of this specific type, apply it to [plotOptions. - * spline](#plotOptions.spline). - * - * @type {Object} - * @extends series,plotOptions.spline - * @excluding dataParser,dataURL - * @product highcharts highstock - * @apioption series.spline - */ - - /** - * An array of data points for the series. For the `spline` series type, - * points can be given in the following ways: - * - * 1. An array of numerical values. In this case, the numerical values - * will be interpreted as `y` options. The `x` values will be automatically - * calculated, either starting at 0 and incremented by 1, or from `pointStart` - * and `pointInterval` given in the series options. If the axis has - * categories, these will be used. Example: - * - * ```js - * data: [0, 5, 3, 5] - * ``` - * - * 2. An array of arrays with 2 values. In this case, the values correspond - * to `x,y`. If the first value is a string, it is applied as the name - * of the point, and the `x` value is inferred. - * - * ```js - * data: [ - * [0, 9], - * [1, 2], - * [2, 8] - * ] - * ``` - * - * 3. An array of objects with named values. The objects are point - * configuration objects as seen below. If the total number of data - * points exceeds the series' [turboThreshold](#series.spline.turboThreshold), - * this option is not available. - * - * ```js - * data: [{ - * x: 1, - * y: 9, - * name: "Point2", - * color: "#00FF00" - * }, { - * x: 1, - * y: 0, - * name: "Point1", - * color: "#FF00FF" - * }] - * ``` - * - * @type {Array} - * @extends series.line.data - * @sample {highcharts} highcharts/chart/reflow-true/ - * Numerical values - * @sample {highcharts} highcharts/series/data-array-of-arrays/ - * Arrays of numeric x and y - * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/ - * Arrays of datetime x and y - * @sample {highcharts} highcharts/series/data-array-of-name-value/ - * Arrays of point.name and y - * @sample {highcharts} highcharts/series/data-array-of-objects/ - * Config objects - * @product highcharts highstock - * @apioption series.spline.data - */ - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var areaProto = H.seriesTypes.area.prototype, - defaultPlotOptions = H.defaultPlotOptions, - LegendSymbolMixin = H.LegendSymbolMixin, - seriesType = H.seriesType; - /** - * AreaSplineSeries object - */ - /** - * The area spline series is an area series where the graph between the points - * is smoothed into a spline. - * - * @extends plotOptions.area - * @excluding step - * @sample {highcharts} highcharts/demo/areaspline/ Area spline chart - * @sample {highstock} stock/demo/areaspline/ Area spline chart - * @product highcharts highstock - * @apioption plotOptions.areaspline - */ - seriesType('areaspline', 'spline', defaultPlotOptions.area, { - getStackPoints: areaProto.getStackPoints, - getGraphPath: areaProto.getGraphPath, - drawGraph: areaProto.drawGraph, - drawLegendSymbol: LegendSymbolMixin.drawRectangle - }); - /** - * A `areaspline` series. If the [type](#series.areaspline.type) option - * is not specified, it is inherited from [chart.type](#chart.type). - * - * - * For options that apply to multiple series, it is recommended to add - * them to the [plotOptions.series](#plotOptions.series) options structure. - * To apply to all series of this specific type, apply it to [plotOptions. - * areaspline](#plotOptions.areaspline). - * - * @type {Object} - * @extends series,plotOptions.areaspline - * @excluding dataParser,dataURL - * @product highcharts highstock - * @apioption series.areaspline - */ - - - /** - * An array of data points for the series. For the `areaspline` series - * type, points can be given in the following ways: - * - * 1. An array of numerical values. In this case, the numerical values - * will be interpreted as `y` options. The `x` values will be automatically - * calculated, either starting at 0 and incremented by 1, or from `pointStart` - * and `pointInterval` given in the series options. If the axis has - * categories, these will be used. Example: - * - * ```js - * data: [0, 5, 3, 5] - * ``` - * - * 2. An array of arrays with 2 values. In this case, the values correspond - * to `x,y`. If the first value is a string, it is applied as the name - * of the point, and the `x` value is inferred. - * - * ```js - * data: [ - * [0, 10], - * [1, 9], - * [2, 3] - * ] - * ``` - * - * 3. An array of objects with named values. The objects are point - * configuration objects as seen below. If the total number of data - * points exceeds the series' [turboThreshold](#series.areaspline.turboThreshold), - * this option is not available. - * - * ```js - * data: [{ - * x: 1, - * y: 4, - * name: "Point2", - * color: "#00FF00" - * }, { - * x: 1, - * y: 4, - * name: "Point1", - * color: "#FF00FF" - * }] - * ``` - * - * @type {Array} - * @extends series.line.data - * @sample {highcharts} highcharts/chart/reflow-true/ Numerical values - * @sample {highcharts} highcharts/series/data-array-of-arrays/ Arrays of numeric x and y - * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/ Arrays of datetime x and y - * @sample {highcharts} highcharts/series/data-array-of-name-value/ Arrays of point.name and y - * @sample {highcharts} highcharts/series/data-array-of-objects/ Config objects - * @product highcharts highstock - * @apioption series.areaspline.data - */ - - - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var animObject = H.animObject, - color = H.color, - each = H.each, - extend = H.extend, - isNumber = H.isNumber, - LegendSymbolMixin = H.LegendSymbolMixin, - merge = H.merge, - noop = H.noop, - pick = H.pick, - Series = H.Series, - seriesType = H.seriesType, - svg = H.svg; - /** - * The column series type. - * - * @constructor seriesTypes.column - * @augments Series - */ - - /** - * Column series display one column per value along an X axis. - * - * @sample {highcharts} highcharts/demo/column-basic/ Column chart - * @sample {highstock} stock/demo/column/ Column chart - * - * @extends {plotOptions.line} - * @product highcharts highstock - * @excluding connectNulls,dashStyle,gapSize,gapUnit,linecap,lineWidth,marker, - * connectEnds,step - * @optionparent plotOptions.column - */ - seriesType('column', 'line', { - - /** - * The corner radius of the border surrounding each column or bar. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/column-borderradius/ - * Rounded columns - * @default 0 - * @product highcharts highstock - */ - borderRadius: 0, - - /** - * The width of the border surrounding each column or bar. - * - * In styled mode, the stroke width can be set with the `.highcharts-point` - * rule. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/column-borderwidth/ - * 2px black border - * @default 1 - * @product highcharts highstock - * @apioption plotOptions.column.borderWidth - */ - - /** - * When using automatic point colors pulled from the `options.colors` - * collection, this option determines whether the chart should receive - * one color per series or one color per point. - * - * @type {Boolean} - * @see [series colors](#plotOptions.column.colors) - * @sample {highcharts} highcharts/plotoptions/column-colorbypoint-false/ - * False by default - * @sample {highcharts} highcharts/plotoptions/column-colorbypoint-true/ - * True - * @default false - * @since 2.0 - * @product highcharts highstock - * @apioption plotOptions.column.colorByPoint - */ - - /** - * A series specific or series type specific color set to apply instead - * of the global [colors](#colors) when [colorByPoint](#plotOptions. - * column.colorByPoint) is true. - * - * @type {Array} - * @since 3.0 - * @product highcharts highstock - * @apioption plotOptions.column.colors - */ - - /** - * When true, each column edge is rounded to its nearest pixel in order - * to render sharp on screen. In some cases, when there are a lot of - * densely packed columns, this leads to visible difference in column - * widths or distance between columns. In these cases, setting `crisp` - * to `false` may look better, even though each column is rendered - * blurry. - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/column-crisp-false/ - * Crisp is false - * @default true - * @since 5.0.10 - * @product highcharts highstock - */ - crisp: true, - - /** - * Padding between each value groups, in x axis units. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/column-grouppadding-default/ - * 0.2 by default - * @sample {highcharts} highcharts/plotoptions/column-grouppadding-none/ - * No group padding - all columns are evenly spaced - * @default 0.2 - * @product highcharts highstock - */ - groupPadding: 0.2, - - /** - * Whether to group non-stacked columns or to let them render independent - * of each other. Non-grouped columns will be laid out individually - * and overlap each other. - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/column-grouping-false/ - * Grouping disabled - * @sample {highstock} highcharts/plotoptions/column-grouping-false/ - * Grouping disabled - * @default true - * @since 2.3.0 - * @product highcharts highstock - * @apioption plotOptions.column.grouping - */ - - marker: null, // point options are specified in the base options - - /** - * The maximum allowed pixel width for a column, translated to the height - * of a bar in a bar chart. This prevents the columns from becoming - * too wide when there is a small number of points in the chart. - * - * @type {Number} - * @see [pointWidth](#plotOptions.column.pointWidth) - * @sample {highcharts} highcharts/plotoptions/column-maxpointwidth-20/ - * Limited to 50 - * @sample {highstock} highcharts/plotoptions/column-maxpointwidth-20/ - * Limited to 50 - * @default null - * @since 4.1.8 - * @product highcharts highstock - * @apioption plotOptions.column.maxPointWidth - */ - - /** - * Padding between each column or bar, in x axis units. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/column-pointpadding-default/ - * 0.1 by default - * @sample {highcharts} highcharts/plotoptions/column-pointpadding-025/ - * 0.25 - * @sample {highcharts} highcharts/plotoptions/column-pointpadding-none/ - * 0 for tightly packed columns - * @default 0.1 - * @product highcharts highstock - */ - pointPadding: 0.1, - - /** - * A pixel value specifying a fixed width for each column or bar. When - * `null`, the width is calculated from the `pointPadding` and - * `groupPadding`. - * - * @type {Number} - * @see [maxPointWidth](#plotOptions.column.maxPointWidth) - * @sample {highcharts} highcharts/plotoptions/column-pointwidth-20/ - * 20px wide columns regardless of chart width or the amount of data - * points - * @default null - * @since 1.2.5 - * @product highcharts highstock - * @apioption plotOptions.column.pointWidth - */ - - /** - * The minimal height for a column or width for a bar. By default, - * 0 values are not shown. To visualize a 0 (or close to zero) point, - * set the minimal point length to a pixel value like 3\. In stacked - * column charts, minPointLength might not be respected for tightly - * packed values. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/column-minpointlength/ - * Zero base value - * @sample {highcharts} highcharts/plotoptions/column-minpointlength-pos-and-neg/ - * Positive and negative close to zero values - * @default 0 - * @product highcharts highstock - */ - minPointLength: 0, - - /** - * When the series contains less points than the crop threshold, all - * points are drawn, event if the points fall outside the visible plot - * area at the current zoom. The advantage of drawing all points (including - * markers and columns), is that animation is performed on updates. - * On the other hand, when the series contains more points than the - * crop threshold, the series data is cropped to only contain points - * that fall within the plot area. The advantage of cropping away invisible - * points is to increase performance on large series. . - * - * @type {Number} - * @default 50 - * @product highcharts highstock - */ - cropThreshold: 50, - - /** - * The X axis range that each point is valid for. This determines the - * width of the column. On a categorized axis, the range will be 1 - * by default (one category unit). On linear and datetime axes, the - * range will be computed as the distance between the two closest data - * points. - * - * The default `null` means it is computed automatically, but this option - * can be used to override the automatic value. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/column-pointrange/ - * Set the point range to one day on a data set with one week - * between the points - * @default null - * @since 2.3 - * @product highcharts highstock - */ - pointRange: null, - - states: { - - /** - * Options for the hovered point. These settings override the normal - * state options when a point is moused over or touched. - * - * @extends plotOptions.series.states.hover - * @excluding halo,lineWidth,lineWidthPlus,marker - * @product highcharts highstock - */ - hover: { - - /** - * @ignore-option - */ - halo: false, - /** - * A specific border color for the hovered point. Defaults to - * inherit the normal state border color. - * - * @type {Color} - * @product highcharts - * @apioption plotOptions.column.states.hover.borderColor - */ - - /** - * A specific color for the hovered point. - * - * @type {Color} - * @default undefined - * @product highcharts - * @apioption plotOptions.column.states.hover.color - */ - - - - /** - * How much to brighten the point on interaction. Requires the main - * color to be defined in hex or rgb(a) format. - * - * In styled mode, the hover brightening is by default replaced - * with a fill-opacity set in the `.highcharts-point:hover` rule. - * - * @sample {highcharts} - * highcharts/plotoptions/column-states-hover-brightness/ - * Brighten by 0.5 - * @product highcharts highstock - */ - brightness: 0.1 - - - }, - - - /** - * Options for the selected point. These settings override the normal - * state options when a point is selected. - * - * @excluding halo,lineWidth,lineWidthPlus,marker - * @product highcharts highstock - */ - select: { - /** - * A specific color for the selected point. - * - * @type {Color} - * @default #cccccc - * @product highcharts highstock - */ - color: '#cccccc', - - /** - * A specific border color for the selected point. - * - * @type {Color} - * @default #000000 - * @product highcharts highstock - */ - borderColor: '#000000' - } - - }, - - dataLabels: { - align: null, // auto - verticalAlign: null, // auto - y: null - }, - - /** - * When this is true, the series will not cause the Y axis to cross - * the zero plane (or [threshold](#plotOptions.series.threshold) option) - * unless the data actually crosses the plane. - * - * For example, if `softThreshold` is `false`, a series of 0, 1, 2, - * 3 will make the Y axis show negative values according to the `minPadding` - * option. If `softThreshold` is `true`, the Y axis starts at 0. - * - * @type {Boolean} - * @default {highcharts} true - * @default {highstock} false - * @since 4.1.9 - * @product highcharts highstock - */ - softThreshold: false, - - // false doesn't work well: http://jsfiddle.net/highcharts/hz8fopan/14/ - /** @ignore */ - startFromThreshold: true, - - stickyTracking: false, - - tooltip: { - distance: 6 - }, - - /** - * The Y axis value to serve as the base for the columns, for distinguishing - * between values above and below a threshold. If `null`, the columns - * extend from the padding Y axis minimum. - * - * @type {Number} - * @default 0 - * @since 2.0 - * @product highcharts - */ - threshold: 0, - - - /** - * The color of the border surrounding each column or bar. - * - * In styled mode, the border stroke can be set with the `.highcharts-point` - * rule. - * - * @type {Color} - * @sample {highcharts} highcharts/plotoptions/column-bordercolor/ - * Dark gray border - * @default #ffffff - * @product highcharts highstock - */ - borderColor: '#ffffff' - // borderWidth: 1 - - - }, /** @lends seriesTypes.column.prototype */ { - cropShoulder: 0, - // When tooltip is not shared, this series (and derivatives) requires direct - // touch/hover. KD-tree does not apply. - directTouch: true, - trackerGroups: ['group', 'dataLabelsGroup'], - // use separate negative stacks, unlike area stacks where a negative point - // is substracted from previous (#1910) - negStacks: true, - - /** - * Initialize the series. Extends the basic Series.init method by - * marking other series of the same type as dirty. - * - * @function #init - * @memberOf seriesTypes.column - * - */ - init: function() { - Series.prototype.init.apply(this, arguments); - - var series = this, - chart = series.chart; - - // if the series is added dynamically, force redraw of other - // series affected by a new column - if (chart.hasRendered) { - each(chart.series, function(otherSeries) { - if (otherSeries.type === series.type) { - otherSeries.isDirty = true; - } - }); - } - }, - - /** - * Return the width and x offset of the columns adjusted for grouping, - * groupPadding, pointPadding, pointWidth etc. - */ - getColumnMetrics: function() { - - var series = this, - options = series.options, - xAxis = series.xAxis, - yAxis = series.yAxis, - reversedXAxis = xAxis.reversed, - stackKey, - stackGroups = {}, - columnCount = 0; - - // Get the total number of column type series. This is called on every - // series. Consider moving this logic to a chart.orderStacks() function - // and call it on init, addSeries and removeSeries - if (options.grouping === false) { - columnCount = 1; - } else { - each(series.chart.series, function(otherSeries) { - var otherOptions = otherSeries.options, - otherYAxis = otherSeries.yAxis, - columnIndex; - if ( - otherSeries.type === series.type && - ( - otherSeries.visible || - !series.chart.options.chart.ignoreHiddenSeries - ) && - yAxis.len === otherYAxis.len && - yAxis.pos === otherYAxis.pos - ) { // #642, #2086 - if (otherOptions.stacking) { - stackKey = otherSeries.stackKey; - if (stackGroups[stackKey] === undefined) { - stackGroups[stackKey] = columnCount++; - } - columnIndex = stackGroups[stackKey]; - } else if (otherOptions.grouping !== false) { // #1162 - columnIndex = columnCount++; - } - otherSeries.columnIndex = columnIndex; - } - }); - } - - var categoryWidth = Math.min( - Math.abs(xAxis.transA) * ( - xAxis.ordinalSlope || - options.pointRange || - xAxis.closestPointRange || - xAxis.tickInterval || - 1 - ), // #2610 - xAxis.len // #1535 - ), - groupPadding = categoryWidth * options.groupPadding, - groupWidth = categoryWidth - 2 * groupPadding, - pointOffsetWidth = groupWidth / (columnCount || 1), - pointWidth = Math.min( - options.maxPointWidth || xAxis.len, - pick( - options.pointWidth, - pointOffsetWidth * (1 - 2 * options.pointPadding) - ) - ), - pointPadding = (pointOffsetWidth - pointWidth) / 2, - // #1251, #3737 - colIndex = (series.columnIndex || 0) + (reversedXAxis ? 1 : 0), - pointXOffset = - pointPadding + - ( - groupPadding + - colIndex * pointOffsetWidth - - (categoryWidth / 2) - ) * (reversedXAxis ? -1 : 1); - - // Save it for reading in linked series (Error bars particularly) - series.columnMetrics = { - width: pointWidth, - offset: pointXOffset - }; - return series.columnMetrics; - - }, - - /** - * Make the columns crisp. The edges are rounded to the nearest full pixel. - */ - crispCol: function(x, y, w, h) { - var chart = this.chart, - borderWidth = this.borderWidth, - xCrisp = -(borderWidth % 2 ? 0.5 : 0), - yCrisp = borderWidth % 2 ? 0.5 : 1, - right, - bottom, - fromTop; - - if (chart.inverted && chart.renderer.isVML) { - yCrisp += 1; - } - - // Horizontal. We need to first compute the exact right edge, then round - // it and compute the width from there. - if (this.options.crisp) { - right = Math.round(x + w) + xCrisp; - x = Math.round(x) + xCrisp; - w = right - x; - } - - // Vertical - bottom = Math.round(y + h) + yCrisp; - fromTop = Math.abs(y) <= 0.5 && bottom > 0.5; // #4504, #4656 - y = Math.round(y) + yCrisp; - h = bottom - y; - - // Top edges are exceptions - if (fromTop && h) { // #5146 - y -= 1; - h += 1; - } - - return { - x: x, - y: y, - width: w, - height: h - }; - }, - - /** - * Translate each point to the plot area coordinate system and find shape - * positions - */ - translate: function() { - var series = this, - chart = series.chart, - options = series.options, - dense = series.dense = - series.closestPointRange * series.xAxis.transA < 2, - borderWidth = series.borderWidth = pick( - options.borderWidth, - dense ? 0 : 1 // #3635 - ), - yAxis = series.yAxis, - threshold = options.threshold, - translatedThreshold = series.translatedThreshold = - yAxis.getThreshold(threshold), - minPointLength = pick(options.minPointLength, 5), - metrics = series.getColumnMetrics(), - pointWidth = metrics.width, - // postprocessed for border width - seriesBarW = series.barW = - Math.max(pointWidth, 1 + 2 * borderWidth), - pointXOffset = series.pointXOffset = metrics.offset; - - if (chart.inverted) { - translatedThreshold -= 0.5; // #3355 - } - - // When the pointPadding is 0, we want the columns to be packed tightly, - // so we allow individual columns to have individual sizes. When - // pointPadding is greater, we strive for equal-width columns (#2694). - if (options.pointPadding) { - seriesBarW = Math.ceil(seriesBarW); - } - - Series.prototype.translate.apply(series); - - // Record the new values - each(series.points, function(point) { - var yBottom = pick(point.yBottom, translatedThreshold), - safeDistance = 999 + Math.abs(yBottom), - plotY = Math.min( - Math.max(-safeDistance, point.plotY), - yAxis.len + safeDistance - ), // Don't draw too far outside plot area (#1303, #2241, #4264) - barX = point.plotX + pointXOffset, - barW = seriesBarW, - barY = Math.min(plotY, yBottom), - up, - barH = Math.max(plotY, yBottom) - barY; - - // Handle options.minPointLength - if (minPointLength && Math.abs(barH) < minPointLength) { - barH = minPointLength; - up = (!yAxis.reversed && !point.negative) || - (yAxis.reversed && point.negative); - - // Reverse zeros if there's no positive value in the series - // in visible range (#7046) - if ( - point.y === threshold && - series.dataMax <= threshold && - yAxis.min < threshold // and if there's room for it (#7311) - ) { - up = !up; - } - - // If stacked... - barY = Math.abs(barY - translatedThreshold) > minPointLength ? - // ...keep position - yBottom - minPointLength : - // #1485, #4051 - translatedThreshold - (up ? minPointLength : 0); - } - - // Cache for access in polar - point.barX = barX; - point.pointWidth = pointWidth; - - // Fix the tooltip on center of grouped columns (#1216, #424, #3648) - point.tooltipPos = chart.inverted ? [ - yAxis.len + yAxis.pos - chart.plotLeft - plotY, - series.xAxis.len - barX - barW / 2, barH - ] : [barX + barW / 2, plotY + yAxis.pos - chart.plotTop, barH]; - - // Register shape type and arguments to be used in drawPoints - point.shapeType = 'rect'; - point.shapeArgs = series.crispCol.apply( - series, - point.isNull ? - // #3169, drilldown from null must have a position to work - // from #6585, dataLabel should be placed on xAxis, not - // floating in the middle of the chart - [barX, translatedThreshold, barW, 0] : [barX, barY, barW, barH] - ); - }); - - }, - - getSymbol: noop, - - /** - * Use a solid rectangle like the area series types - */ - drawLegendSymbol: LegendSymbolMixin.drawRectangle, - - - /** - * Columns have no graph - */ - drawGraph: function() { - this.group[ - this.dense ? 'addClass' : 'removeClass' - ]('highcharts-dense-data'); - }, - - - /** - * Get presentational attributes - */ - pointAttribs: function(point, state) { - var options = this.options, - stateOptions, - ret, - p2o = this.pointAttrToOptions || {}, - strokeOption = p2o.stroke || 'borderColor', - strokeWidthOption = p2o['stroke-width'] || 'borderWidth', - fill = (point && point.color) || this.color, - stroke = (point && point[strokeOption]) || options[strokeOption] || - this.color || fill, // set to fill when borderColor null - strokeWidth = (point && point[strokeWidthOption]) || - options[strokeWidthOption] || this[strokeWidthOption] || 0, - dashstyle = options.dashStyle, - zone, - brightness; - - // Handle zone colors - if (point && this.zones.length) { - zone = point.getZone(); - // When zones are present, don't use point.color (#4267). Changed - // order (#6527) - fill = point.options.color || (zone && zone.color) || this.color; - } - - // Select or hover states - if (state) { - stateOptions = merge( - options.states[state], - // #6401 - point.options.states && point.options.states[state] || {} - ); - brightness = stateOptions.brightness; - fill = stateOptions.color || - ( - brightness !== undefined && - color(fill).brighten(stateOptions.brightness).get() - ) || - fill; - stroke = stateOptions[strokeOption] || stroke; - strokeWidth = stateOptions[strokeWidthOption] || strokeWidth; - dashstyle = stateOptions.dashStyle || dashstyle; - } - - ret = { - 'fill': fill, - 'stroke': stroke, - 'stroke-width': strokeWidth - }; - - if (dashstyle) { - ret.dashstyle = dashstyle; - } - - return ret; - }, - - - /** - * Draw the columns. For bars, the series.group is rotated, so the same - * coordinates apply for columns and bars. This method is inherited by - * scatter series. - */ - drawPoints: function() { - var series = this, - chart = this.chart, - options = series.options, - renderer = chart.renderer, - animationLimit = options.animationLimit || 250, - shapeArgs; - - // draw the columns - each(series.points, function(point) { - var plotY = point.plotY, - graphic = point.graphic; - - if (isNumber(plotY) && point.y !== null) { - shapeArgs = point.shapeArgs; - - if (graphic) { // update - graphic[ - chart.pointCount < animationLimit ? 'animate' : 'attr' - ]( - merge(shapeArgs) - ); - - } else { - point.graphic = graphic = - renderer[point.shapeType](shapeArgs) - .add(point.group || series.group); - } - - // Border radius is not stylable (#6900) - if (options.borderRadius) { - graphic.attr({ - r: options.borderRadius - }); - } - - - // Presentational - graphic - .attr(series.pointAttribs( - point, - point.selected && 'select' - )) - .shadow( - options.shadow, - null, - options.stacking && !options.borderRadius - ); - - - graphic.addClass(point.getClassName(), true); - - - } else if (graphic) { - point.graphic = graphic.destroy(); // #1269 - } - }); - }, - - /** - * Animate the column heights one by one from zero - * @param {Boolean} init Whether to initialize the animation or run it - */ - animate: function(init) { - var series = this, - yAxis = this.yAxis, - options = series.options, - inverted = this.chart.inverted, - attr = {}, - translateProp = inverted ? 'translateX' : 'translateY', - translateStart, - translatedThreshold; - - if (svg) { // VML is too slow anyway - if (init) { - attr.scaleY = 0.001; - translatedThreshold = Math.min( - yAxis.pos + yAxis.len, - Math.max(yAxis.pos, yAxis.toPixels(options.threshold)) - ); - if (inverted) { - attr.translateX = translatedThreshold - yAxis.len; - } else { - attr.translateY = translatedThreshold; - } - series.group.attr(attr); - - } else { // run the animation - translateStart = series.group.attr(translateProp); - series.group.animate({ - scaleY: 1 - }, - extend(animObject(series.options.animation), { - // Do the scale synchronously to ensure smooth updating - // (#5030, #7228) - step: function(val, fx) { - - attr[translateProp] = - translateStart + - fx.pos * (yAxis.pos - translateStart); - series.group.attr(attr); - } - })); - - // delete this function to allow it only once - series.animate = null; - } - } - }, - - /** - * Remove this series from the chart - */ - remove: function() { - var series = this, - chart = series.chart; - - // column and bar series affects other series of the same type - // as they are either stacked or grouped - if (chart.hasRendered) { - each(chart.series, function(otherSeries) { - if (otherSeries.type === series.type) { - otherSeries.isDirty = true; - } - }); - } - - Series.prototype.remove.apply(series, arguments); - } - }); - - - /** - * A `column` series. If the [type](#series.column.type) option is - * not specified, it is inherited from [chart.type](#chart.type). - * - * For options that apply to multiple series, it is recommended to add - * them to the [plotOptions.series](#plotOptions.series) options structure. - * To apply to all series of this specific type, apply it to [plotOptions. - * column](#plotOptions.column). - * - * @type {Object} - * @extends series,plotOptions.column - * @excluding dataParser,dataURL,marker - * - * @product highcharts highstock - * @apioption series.column - */ - - /** - * @excluding halo,lineWidth,lineWidthPlus,marker - * @product highcharts highstock - * @apioption series.column.states.hover - */ - - /** - * @excluding halo,lineWidth,lineWidthPlus,marker - * @product highcharts highstock - * @apioption series.column.states.select - */ - - /** - * An array of data points for the series. For the `column` series type, - * points can be given in the following ways: - * - * 1. An array of numerical values. In this case, the numerical values - * will be interpreted as `y` options. The `x` values will be automatically - * calculated, either starting at 0 and incremented by 1, or from `pointStart` - * and `pointInterval` given in the series options. If the axis has - * categories, these will be used. Example: - * - * ```js - * data: [0, 5, 3, 5] - * ``` - * - * 2. An array of arrays with 2 values. In this case, the values correspond - * to `x,y`. If the first value is a string, it is applied as the name - * of the point, and the `x` value is inferred. - * - * ```js - * data: [ - * [0, 6], - * [1, 2], - * [2, 6] - * ] - * ``` - * - * 3. An array of objects with named values. The objects are point - * configuration objects as seen below. If the total number of data - * points exceeds the series' [turboThreshold](#series.column.turboThreshold), - * this option is not available. - * - * ```js - * data: [{ - * x: 1, - * y: 9, - * name: "Point2", - * color: "#00FF00" - * }, { - * x: 1, - * y: 6, - * name: "Point1", - * color: "#FF00FF" - * }] - * ``` - * - * @type {Array} - * @extends series.line.data - * @excluding marker - * @sample {highcharts} highcharts/chart/reflow-true/ Numerical values - * @sample {highcharts} highcharts/series/data-array-of-arrays/ - * Arrays of numeric x and y - * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/ - * Arrays of datetime x and y - * @sample {highcharts} highcharts/series/data-array-of-name-value/ - * Arrays of point.name and y - * @sample {highcharts} highcharts/series/data-array-of-objects/ - * Config objects - * @product highcharts highstock - * @apioption series.column.data - */ - - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - - var seriesType = H.seriesType; - - /** - * The Bar series class - */ - seriesType('bar', 'column', null, { - inverted: true - }); - /** - * A bar series is a special type of column series where the columns are - * horizontal. - * - * @sample highcharts/demo/bar-basic/ Bar chart - * @extends {plotOptions.column} - * @product highcharts - * @optionparent plotOptions.bar - */ - - - /** - * A `bar` series. If the [type](#series.bar.type) option is not specified, - * it is inherited from [chart.type](#chart.type). - * - * For options that apply to multiple series, it is recommended to add - * them to the [plotOptions.series](#plotOptions.series) options structure. - * To apply to all series of this specific type, apply it to [plotOptions. - * bar](#plotOptions.bar). - * - * @type {Object} - * @extends series,plotOptions.bar - * @excluding dataParser,dataURL - * @product highcharts - * @apioption series.bar - */ - - /** - * An array of data points for the series. For the `bar` series type, - * points can be given in the following ways: - * - * 1. An array of numerical values. In this case, the numerical values - * will be interpreted as `y` options. The `x` values will be automatically - * calculated, either starting at 0 and incremented by 1, or from `pointStart` - * and `pointInterval` given in the series options. If the axis has - * categories, these will be used. Example: - * - * ```js - * data: [0, 5, 3, 5] - * ``` - * - * 2. An array of arrays with 2 values. In this case, the values correspond - * to `x,y`. If the first value is a string, it is applied as the name - * of the point, and the `x` value is inferred. - * - * ```js - * data: [ - * [0, 5], - * [1, 10], - * [2, 3] - * ] - * ``` - * - * 3. An array of objects with named values. The objects are point - * configuration objects as seen below. If the total number of data - * points exceeds the series' [turboThreshold](#series.bar.turboThreshold), - * this option is not available. - * - * ```js - * data: [{ - * x: 1, - * y: 1, - * name: "Point2", - * color: "#00FF00" - * }, { - * x: 1, - * y: 10, - * name: "Point1", - * color: "#FF00FF" - * }] - * ``` - * - * @type {Array} - * @extends series.column.data - * @sample {highcharts} highcharts/chart/reflow-true/ Numerical values - * @sample {highcharts} highcharts/series/data-array-of-arrays/ Arrays of numeric x and y - * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/ Arrays of datetime x and y - * @sample {highcharts} highcharts/series/data-array-of-name-value/ Arrays of point.name and y - * @sample {highcharts} highcharts/series/data-array-of-objects/ Config objects - * @product highcharts - * @apioption series.bar.data - */ - - /** - * Alignment of the data label relative to the data point. - * - * @type {String} - * @sample {highcharts} highcharts/plotoptions/bar-datalabels-align-inside-bar/ - * Data labels inside the bar - * @default left - * @product highcharts - * @apioption plotOptions.bar.dataLabels.align - */ - - /** - * The x position of the data label relative to the data point. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/bar-datalabels-align-inside-bar/ - * Data labels inside the bar - * @default 5 - * @product highcharts - * @apioption plotOptions.bar.dataLabels.x - */ - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var Series = H.Series, - seriesType = H.seriesType; - - /** - * A scatter plot uses cartesian coordinates to display values for two variables - * for a set of data. - * - * @sample {highcharts} highcharts/demo/scatter/ Scatter plot - * - * @extends {plotOptions.line} - * @product highcharts highstock - * @optionparent plotOptions.scatter - */ - seriesType('scatter', 'line', { - - /** - * The width of the line connecting the data points. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/scatter-linewidth-none/ - * 0 by default - * @sample {highcharts} highcharts/plotoptions/scatter-linewidth-1/ - * 1px - * @default 0 - * @product highcharts highstock - */ - lineWidth: 0, - - findNearestPointBy: 'xy', - marker: { - enabled: true // Overrides auto-enabling in line series (#3647) - }, - - /** - * Sticky tracking of mouse events. When true, the `mouseOut` event - * on a series isn't triggered until the mouse moves over another series, - * or out of the plot area. When false, the `mouseOut` event on a series - * is triggered when the mouse leaves the area around the series' graph - * or markers. This also implies the tooltip. When `stickyTracking` - * is false and `tooltip.shared` is false, the tooltip will be hidden - * when moving the mouse between series. - * - * @type {Boolean} - * @default false - * @product highcharts highstock - * @apioption plotOptions.scatter.stickyTracking - */ - - /** - * A configuration object for the tooltip rendering of each single - * series. Properties are inherited from #tooltip. - * Overridable properties are `headerFormat`, `pointFormat`, `yDecimals`, - * `xDateFormat`, `yPrefix` and `ySuffix`. Unlike other series, in - * a scatter plot the series.name by default shows in the headerFormat - * and point.x and point.y in the pointFormat. - * - * @product highcharts highstock - */ - tooltip: { - - headerFormat: '\u25CF ' + - ' {series.name}
', - - - pointFormat: 'x: {point.x}
y: {point.y}
' - } - - // Prototype members - }, { - sorted: false, - requireSorting: false, - noSharedTooltip: true, - trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'], - takeOrdinalPosition: false, // #2342 - drawGraph: function() { - if (this.options.lineWidth) { - Series.prototype.drawGraph.call(this); - } - } - }); - - /** - * A `scatter` series. If the [type](#series.scatter.type) option is - * not specified, it is inherited from [chart.type](#chart.type). - * - * For options that apply to multiple series, it is recommended to add - * them to the [plotOptions.series](#plotOptions.series) options structure. - * To apply to all series of this specific type, apply it to [plotOptions. - * scatter](#plotOptions.scatter). - * - * @type {Object} - * @extends series,plotOptions.scatter - * @excluding dataParser,dataURL,stack - * @product highcharts highstock - * @apioption series.scatter - */ - - /** - * An array of data points for the series. For the `scatter` series - * type, points can be given in the following ways: - * - * 1. An array of numerical values. In this case, the numerical values - * will be interpreted as `y` options. The `x` values will be automatically - * calculated, either starting at 0 and incremented by 1, or from `pointStart` - * and `pointInterval` given in the series options. If the axis has - * categories, these will be used. Example: - * - * ```js - * data: [0, 5, 3, 5] - * ``` - * - * 2. An array of arrays with 2 values. In this case, the values correspond - * to `x,y`. If the first value is a string, it is applied as the name - * of the point, and the `x` value is inferred. - * - * ```js - * data: [ - * [0, 0], - * [1, 8], - * [2, 9] - * ] - * ``` - * - * 3. An array of objects with named values. The objects are point - * configuration objects as seen below. If the total number of data - * points exceeds the series' [turboThreshold](#series.scatter.turboThreshold), - * this option is not available. - * - * ```js - * data: [{ - * x: 1, - * y: 2, - * name: "Point2", - * color: "#00FF00" - * }, { - * x: 1, - * y: 4, - * name: "Point1", - * color: "#FF00FF" - * }] - * ``` - * - * @type {Array} - * @extends series.line.data - * @sample {highcharts} highcharts/chart/reflow-true/ - * Numerical values - * @sample {highcharts} highcharts/series/data-array-of-arrays/ - * Arrays of numeric x and y - * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/ - * Arrays of datetime x and y - * @sample {highcharts} highcharts/series/data-array-of-name-value/ - * Arrays of point.name and y - * @sample {highcharts} highcharts/series/data-array-of-objects/ - * Config objects - * @product highcharts highstock - * @apioption series.scatter.data - */ - - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var deg2rad = H.deg2rad, - isNumber = H.isNumber, - pick = H.pick, - relativeLength = H.relativeLength; - H.CenteredSeriesMixin = { - /** - * Get the center of the pie based on the size and center options relative to the - * plot area. Borrowed by the polar and gauge series types. - */ - getCenter: function() { - - var options = this.options, - chart = this.chart, - slicingRoom = 2 * (options.slicedOffset || 0), - handleSlicingRoom, - plotWidth = chart.plotWidth - 2 * slicingRoom, - plotHeight = chart.plotHeight - 2 * slicingRoom, - centerOption = options.center, - positions = [pick(centerOption[0], '50%'), pick(centerOption[1], '50%'), options.size || '100%', options.innerSize || 0], - smallestSize = Math.min(plotWidth, plotHeight), - i, - value; - - for (i = 0; i < 4; ++i) { - value = positions[i]; - handleSlicingRoom = i < 2 || (i === 2 && /%$/.test(value)); - - // i == 0: centerX, relative to width - // i == 1: centerY, relative to height - // i == 2: size, relative to smallestSize - // i == 3: innerSize, relative to size - positions[i] = relativeLength(value, [plotWidth, plotHeight, smallestSize, positions[2]][i]) + - (handleSlicingRoom ? slicingRoom : 0); - - } - // innerSize cannot be larger than size (#3632) - if (positions[3] > positions[2]) { - positions[3] = positions[2]; - } - return positions; - }, - /** - * getStartAndEndRadians - Calculates start and end angles in radians. - * Used in series types such as pie and sunburst. - * - * @param {Number} start Start angle in degrees. - * @param {Number} end Start angle in degrees. - * @return {object} Returns an object containing start and end angles as - * radians. - */ - getStartAndEndRadians: function getStartAndEndRadians(start, end) { - var startAngle = isNumber(start) ? start : 0, // must be a number - endAngle = ( - ( - isNumber(end) && // must be a number - end > startAngle && // must be larger than the start angle - // difference must be less than 360 degrees - (end - startAngle) < 360 - ) ? - end : - startAngle + 360 - ), - correction = -90; - return { - start: deg2rad * (startAngle + correction), - end: deg2rad * (endAngle + correction) - }; - } - }; - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var addEvent = H.addEvent, - CenteredSeriesMixin = H.CenteredSeriesMixin, - defined = H.defined, - each = H.each, - extend = H.extend, - getStartAndEndRadians = CenteredSeriesMixin.getStartAndEndRadians, - inArray = H.inArray, - LegendSymbolMixin = H.LegendSymbolMixin, - noop = H.noop, - pick = H.pick, - Point = H.Point, - Series = H.Series, - seriesType = H.seriesType, - seriesTypes = H.seriesTypes, - setAnimation = H.setAnimation; - - /** - * The pie series type. - * - * @constructor seriesTypes.pie - * @augments Series - */ - - /** - * A pie chart is a circular graphic which is divided into slices to illustrate - * numerical proportion. - * - * @sample highcharts/demo/pie-basic/ Pie chart - * - * @extends {plotOptions.line} - * @excluding animationLimit,boostThreshold,connectEnds,connectNulls, - * cropThreshold,dashStyle,findNearestPointBy,getExtremesFromAll, - * lineWidth,marker,negativeColor,pointInterval,pointIntervalUnit, - * pointPlacement,pointStart,softThreshold,stacking,step,threshold, - * turboThreshold,zoneAxis,zones - * @product highcharts - * @optionparent plotOptions.pie - */ - seriesType('pie', 'line', { - - /** - * The center of the pie chart relative to the plot area. Can be percentages - * or pixel values. The default behaviour (as of 3.0) is to center - * the pie so that all slices and data labels are within the plot area. - * As a consequence, the pie may actually jump around in a chart with - * dynamic values, as the data labels move. In that case, the center - * should be explicitly set, for example to `["50%", "50%"]`. - * - * @type {Array} - * @sample {highcharts} highcharts/plotoptions/pie-center/ Centered at 100, 100 - * @default [null, null] - * @product highcharts - */ - center: [null, null], - - clip: false, - - /** @ignore */ - colorByPoint: true, // always true for pies - - /** - * A series specific or series type specific color set to use instead - * of the global [colors](#colors). - * - * @type {Array} - * @sample {highcharts} highcharts/demo/pie-monochrome/ Set default colors for all pies - * @since 3.0 - * @product highcharts - * @apioption plotOptions.pie.colors - */ - - /** - * @extends plotOptions.series.dataLabels - * @excluding align,allowOverlap,staggerLines,step - * @product highcharts - */ - dataLabels: { - /** - * The color of the line connecting the data label to the pie slice. - * The default color is the same as the point's color. - * - * In styled mode, the connector stroke is given in the - * `.highcharts-data-label-connector` class. - * - * @type {String} - * @sample {highcharts} highcharts/plotoptions/pie-datalabels-connectorcolor/ Blue connectors - * @sample {highcharts} highcharts/css/pie-point/ Styled connectors - * @default {point.color} - * @since 2.1 - * @product highcharts - * @apioption plotOptions.pie.dataLabels.connectorColor - */ - - /** - * The distance from the data label to the connector. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/pie-datalabels-connectorpadding/ No padding - * @default 5 - * @since 2.1 - * @product highcharts - * @apioption plotOptions.pie.dataLabels.connectorPadding - */ - - /** - * The width of the line connecting the data label to the pie slice. - * - * - * In styled mode, the connector stroke width is given in the - * `.highcharts-data-label-connector` class. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/pie-datalabels-connectorwidth-disabled/ Disable the connector - * @sample {highcharts} highcharts/css/pie-point/ Styled connectors - * @default 1 - * @since 2.1 - * @product highcharts - * @apioption plotOptions.pie.dataLabels.connectorWidth - */ - - /** - * The distance of the data label from the pie's edge. Negative numbers - * put the data label on top of the pie slices. Connectors are only - * shown for data labels outside the pie. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/pie-datalabels-distance/ Data labels on top of the pie - * @default 30 - * @since 2.1 - * @product highcharts - */ - distance: 30, - - /** - * Enable or disable the data labels. - * - * @type {Boolean} - * @since 2.1 - * @product highcharts - */ - enabled: true, - - formatter: function() { // #2945 - return this.point.isNull ? undefined : this.point.name; - }, - - /** - * Whether to render the connector as a soft arc or a line with sharp - * break. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/pie-datalabels-softconnector-true/ Soft - * @sample {highcharts} highcharts/plotoptions/pie-datalabels-softconnector-false/ Non soft - * @since 2.1.7 - * @product highcharts - * @apioption plotOptions.pie.dataLabels.softConnector - */ - - x: 0 - // y: 0 - }, - - /** - * The end angle of the pie in degrees where 0 is top and 90 is right. - * Defaults to `startAngle` plus 360. - * - * @type {Number} - * @sample {highcharts} highcharts/demo/pie-semi-circle/ Semi-circle donut - * @default null - * @since 1.3.6 - * @product highcharts - * @apioption plotOptions.pie.endAngle - */ - - /** - * Equivalent to [chart.ignoreHiddenSeries](#chart.ignoreHiddenSeries), - * this option tells whether the series shall be redrawn as if the - * hidden point were `null`. - * - * The default value changed from `false` to `true` with Highcharts - * 3.0. - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/pie-ignorehiddenpoint/ True, the hiddden point is ignored - * @default true - * @since 2.3.0 - * @product highcharts - */ - ignoreHiddenPoint: true, - - /** - * The size of the inner diameter for the pie. A size greater than 0 - * renders a donut chart. Can be a percentage or pixel value. Percentages - * are relative to the pie size. Pixel values are given as integers. - * - * - * Note: in Highcharts < 4.1.2, the percentage was relative to the plot - * area, not the pie size. - * - * @type {String|Number} - * @sample {highcharts} highcharts/plotoptions/pie-innersize-80px/ 80px inner size - * @sample {highcharts} highcharts/plotoptions/pie-innersize-50percent/ 50% of the plot area - * @sample {highcharts} highcharts/demo/3d-pie-donut/ 3D donut - * @default 0 - * @since 2.0 - * @product highcharts - * @apioption plotOptions.pie.innerSize - */ - - /** @ignore */ - legendType: 'point', - - /** @ignore */ - marker: null, // point options are specified in the base options - - /** - * The minimum size for a pie in response to auto margins. The pie will - * try to shrink to make room for data labels in side the plot area, - * but only to this size. - * - * @type {Number} - * @default 80 - * @since 3.0 - * @product highcharts - * @apioption plotOptions.pie.minSize - */ - - /** - * The diameter of the pie relative to the plot area. Can be a percentage - * or pixel value. Pixel values are given as integers. The default - * behaviour (as of 3.0) is to scale to the plot area and give room - * for data labels within the plot area. As a consequence, the size - * of the pie may vary when points are updated and data labels more - * around. In that case it is best to set a fixed value, for example - * `"75%"`. - * - * @type {String|Number} - * @sample {highcharts} highcharts/plotoptions/pie-size/ Smaller pie - * @default - * @product highcharts - */ - size: null, - - /** - * Whether to display this particular series or series type in the - * legend. Since 2.1, pies are not shown in the legend by default. - * - * @type {Boolean} - * @sample {highcharts} highcharts/plotoptions/series-showinlegend/ One series in the legend, one hidden - * @product highcharts - */ - showInLegend: false, - - /** - * If a point is sliced, moved out from the center, how many pixels - * should it be moved?. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/pie-slicedoffset-20/ 20px offset - * @default 10 - * @product highcharts - */ - slicedOffset: 10, - - /** - * The start angle of the pie slices in degrees where 0 is top and 90 - * right. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/pie-startangle-90/ Start from right - * @default 0 - * @since 2.3.4 - * @product highcharts - * @apioption plotOptions.pie.startAngle - */ - - /** - * Sticky tracking of mouse events. When true, the `mouseOut` event - * on a series isn't triggered until the mouse moves over another series, - * or out of the plot area. When false, the `mouseOut` event on a - * series is triggered when the mouse leaves the area around the series' - * graph or markers. This also implies the tooltip. When `stickyTracking` - * is false and `tooltip.shared` is false, the tooltip will be hidden - * when moving the mouse between series. - * - * @product highcharts - */ - stickyTracking: false, - - tooltip: { - followPointer: true - }, - - - /** - * The color of the border surrounding each slice. When `null`, the - * border takes the same color as the slice fill. This can be used - * together with a `borderWidth` to fill drawing gaps created by antialiazing - * artefacts in borderless pies. - * - * In styled mode, the border stroke is given in the `.highcharts-point` class. - * - * @type {Color} - * @sample {highcharts} highcharts/plotoptions/pie-bordercolor-black/ Black border - * @default #ffffff - * @product highcharts - */ - borderColor: '#ffffff', - - /** - * The width of the border surrounding each slice. - * - * When setting the border width to 0, there may be small gaps between - * the slices due to SVG antialiasing artefacts. To work around this, - * keep the border width at 0.5 or 1, but set the `borderColor` to - * `null` instead. - * - * In styled mode, the border stroke width is given in the `.highcharts-point` class. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/pie-borderwidth/ 3px border - * @default 1 - * @product highcharts - */ - borderWidth: 1, - - states: { - - /** - * @extends plotOptions.series.states.hover - * @product highcharts - */ - hover: { - - /** - * How much to brighten the point on interaction. Requires the main - * color to be defined in hex or rgb(a) format. - * - * In styled mode, the hover brightness is by default replaced - * by a fill-opacity given in the `.highcharts-point-hover` class. - * - * @type {Number} - * @sample {highcharts} highcharts/plotoptions/pie-states-hover-brightness/ Brightened by 0.5 - * @default 0.1 - * @product highcharts - */ - brightness: 0.1, - - shadow: false - } - } - - - }, /** @lends seriesTypes.pie.prototype */ { - isCartesian: false, - requireSorting: false, - directTouch: true, - noSharedTooltip: true, - trackerGroups: ['group', 'dataLabelsGroup'], - axisTypes: [], - pointAttribs: seriesTypes.column.prototype.pointAttribs, - /** - * Animate the pies in - */ - animate: function(init) { - var series = this, - points = series.points, - startAngleRad = series.startAngleRad; - - if (!init) { - each(points, function(point) { - var graphic = point.graphic, - args = point.shapeArgs; - - if (graphic) { - // start values - graphic.attr({ - r: point.startR || (series.center[3] / 2), // animate from inner radius (#779) - start: startAngleRad, - end: startAngleRad - }); - - // animate - graphic.animate({ - r: args.r, - start: args.start, - end: args.end - }, series.options.animation); - } - }); - - // delete this function to allow it only once - series.animate = null; - } - }, - - /** - * Recompute total chart sum and update percentages of points. - */ - updateTotals: function() { - var i, - total = 0, - points = this.points, - len = points.length, - point, - ignoreHiddenPoint = this.options.ignoreHiddenPoint; - - // Get the total sum - for (i = 0; i < len; i++) { - point = points[i]; - total += (ignoreHiddenPoint && !point.visible) ? - 0 : - point.isNull ? 0 : point.y; - } - this.total = total; - - // Set each point's properties - for (i = 0; i < len; i++) { - point = points[i]; - point.percentage = (total > 0 && (point.visible || !ignoreHiddenPoint)) ? point.y / total * 100 : 0; - point.total = total; - } - }, - - /** - * Extend the generatePoints method by adding total and percentage properties to each point - */ - generatePoints: function() { - Series.prototype.generatePoints.call(this); - this.updateTotals(); - }, - - /** - * Do translation for pie slices - */ - translate: function(positions) { - this.generatePoints(); - - var series = this, - cumulative = 0, - precision = 1000, // issue #172 - options = series.options, - slicedOffset = options.slicedOffset, - connectorOffset = slicedOffset + (options.borderWidth || 0), - finalConnectorOffset, - start, - end, - angle, - radians = getStartAndEndRadians(options.startAngle, options.endAngle), - startAngleRad = series.startAngleRad = radians.start, - endAngleRad = series.endAngleRad = radians.end, - circ = endAngleRad - startAngleRad, // 2 * Math.PI, - points = series.points, - radiusX, // the x component of the radius vector for a given point - radiusY, - labelDistance = options.dataLabels.distance, - ignoreHiddenPoint = options.ignoreHiddenPoint, - i, - len = points.length, - point; - - // Get positions - either an integer or a percentage string must be given. - // If positions are passed as a parameter, we're in a recursive loop for adjusting - // space for data labels. - if (!positions) { - series.center = positions = series.getCenter(); - } - - // Utility for getting the x value from a given y, used for anticollision - // logic in data labels. - // Added point for using specific points' label distance. - series.getX = function(y, left, point) { - angle = Math.asin(Math.min((y - positions[1]) / (positions[2] / 2 + point.labelDistance), 1)); - return positions[0] + - (left ? -1 : 1) * - (Math.cos(angle) * (positions[2] / 2 + point.labelDistance)); - }; - - // Calculate the geometry for each point - for (i = 0; i < len; i++) { - - point = points[i]; - - // Used for distance calculation for specific point. - point.labelDistance = pick( - point.options.dataLabels && point.options.dataLabels.distance, - labelDistance - ); - - // Saved for later dataLabels distance calculation. - series.maxLabelDistance = Math.max(series.maxLabelDistance || 0, point.labelDistance); - - // set start and end angle - start = startAngleRad + (cumulative * circ); - if (!ignoreHiddenPoint || point.visible) { - cumulative += point.percentage / 100; - } - end = startAngleRad + (cumulative * circ); - - // set the shape - point.shapeType = 'arc'; - point.shapeArgs = { - x: positions[0], - y: positions[1], - r: positions[2] / 2, - innerR: positions[3] / 2, - start: Math.round(start * precision) / precision, - end: Math.round(end * precision) / precision - }; - - // The angle must stay within -90 and 270 (#2645) - angle = (end + start) / 2; - if (angle > 1.5 * Math.PI) { - angle -= 2 * Math.PI; - } else if (angle < -Math.PI / 2) { - angle += 2 * Math.PI; - } - - // Center for the sliced out slice - point.slicedTranslation = { - translateX: Math.round(Math.cos(angle) * slicedOffset), - translateY: Math.round(Math.sin(angle) * slicedOffset) - }; - - // set the anchor point for tooltips - radiusX = Math.cos(angle) * positions[2] / 2; - radiusY = Math.sin(angle) * positions[2] / 2; - point.tooltipPos = [ - positions[0] + radiusX * 0.7, - positions[1] + radiusY * 0.7 - ]; - - point.half = angle < -Math.PI / 2 || angle > Math.PI / 2 ? 1 : 0; - point.angle = angle; - - // Set the anchor point for data labels. Use point.labelDistance - // instead of labelDistance // #1174 - // finalConnectorOffset - not override connectorOffset value. - finalConnectorOffset = Math.min(connectorOffset, point.labelDistance / 5); // #1678 - point.labelPos = [ - positions[0] + radiusX + Math.cos(angle) * point.labelDistance, // first break of connector - positions[1] + radiusY + Math.sin(angle) * point.labelDistance, // a/a - positions[0] + radiusX + Math.cos(angle) * finalConnectorOffset, // second break, right outside pie - positions[1] + radiusY + Math.sin(angle) * finalConnectorOffset, // a/a - positions[0] + radiusX, // landing point for connector - positions[1] + radiusY, // a/a - point.labelDistance < 0 ? // alignment - 'center' : - point.half ? 'right' : 'left', // alignment - angle // center angle - ]; - - } - }, - - drawGraph: null, - - /** - * Draw the data points - */ - drawPoints: function() { - var series = this, - chart = series.chart, - renderer = chart.renderer, - groupTranslation, - graphic, - pointAttr, - shapeArgs; - - - var shadow = series.options.shadow; - if (shadow && !series.shadowGroup) { - series.shadowGroup = renderer.g('shadow') - .add(series.group); - } - - - // draw the slices - each(series.points, function(point) { - graphic = point.graphic; - if (!point.isNull) { - shapeArgs = point.shapeArgs; - - - // If the point is sliced, use special translation, else use - // plot area traslation - groupTranslation = point.getTranslate(); - - - // Put the shadow behind all points - var shadowGroup = point.shadowGroup; - if (shadow && !shadowGroup) { - shadowGroup = point.shadowGroup = renderer.g('shadow') - .add(series.shadowGroup); - } - - if (shadowGroup) { - shadowGroup.attr(groupTranslation); - } - pointAttr = series.pointAttribs(point, point.selected && 'select'); - - - // Draw the slice - if (graphic) { - graphic - .setRadialReference(series.center) - - .attr(pointAttr) - - .animate(extend(shapeArgs, groupTranslation)); - } else { - - point.graphic = graphic = renderer[point.shapeType](shapeArgs) - .setRadialReference(series.center) - .attr(groupTranslation) - .add(series.group); - - if (!point.visible) { - graphic.attr({ - visibility: 'hidden' - }); - } - - - graphic - .attr(pointAttr) - .attr({ - 'stroke-linejoin': 'round' - }) - .shadow(shadow, shadowGroup); - - } - - graphic.addClass(point.getClassName()); - - } else if (graphic) { - point.graphic = graphic.destroy(); - } - }); - - }, - - - searchPoint: noop, - - /** - * Utility for sorting data labels - */ - sortByAngle: function(points, sign) { - points.sort(function(a, b) { - return a.angle !== undefined && (b.angle - a.angle) * sign; - }); - }, - - /** - * Use a simple symbol from LegendSymbolMixin - */ - drawLegendSymbol: LegendSymbolMixin.drawRectangle, - - /** - * Use the getCenter method from drawLegendSymbol - */ - getCenter: CenteredSeriesMixin.getCenter, - - /** - * Pies don't have point marker symbols - */ - getSymbol: noop - - - /** - * @constructor seriesTypes.pie.prototype.pointClass - * @extends {Point} - */ - }, /** @lends seriesTypes.pie.prototype.pointClass.prototype */ { - /** - * Initiate the pie slice - */ - init: function() { - - Point.prototype.init.apply(this, arguments); - - var point = this, - toggleSlice; - - point.name = pick(point.name, 'Slice'); - - // add event listener for select - toggleSlice = function(e) { - point.slice(e.type === 'select'); - }; - addEvent(point, 'select', toggleSlice); - addEvent(point, 'unselect', toggleSlice); - - return point; - }, - - /** - * Negative points are not valid (#1530, #3623, #5322) - */ - isValid: function() { - return H.isNumber(this.y, true) && this.y >= 0; - }, - - /** - * Toggle the visibility of the pie slice - * @param {Boolean} vis Whether to show the slice or not. If undefined, the - * visibility is toggled - */ - setVisible: function(vis, redraw) { - var point = this, - series = point.series, - chart = series.chart, - ignoreHiddenPoint = series.options.ignoreHiddenPoint; - - redraw = pick(redraw, ignoreHiddenPoint); - - if (vis !== point.visible) { - - // If called without an argument, toggle visibility - point.visible = point.options.visible = vis = vis === undefined ? !point.visible : vis; - series.options.data[inArray(point, series.data)] = point.options; // update userOptions.data - - // Show and hide associated elements. This is performed regardless of redraw or not, - // because chart.redraw only handles full series. - each(['graphic', 'dataLabel', 'connector', 'shadowGroup'], function(key) { - if (point[key]) { - point[key][vis ? 'show' : 'hide'](true); - } - }); - - if (point.legendItem) { - chart.legend.colorizeItem(point, vis); - } - - // #4170, hide halo after hiding point - if (!vis && point.state === 'hover') { - point.setState(''); - } - - // Handle ignore hidden slices - if (ignoreHiddenPoint) { - series.isDirty = true; - } - - if (redraw) { - chart.redraw(); - } - } - }, - - /** - * Set or toggle whether the slice is cut out from the pie - * @param {Boolean} sliced When undefined, the slice state is toggled - * @param {Boolean} redraw Whether to redraw the chart. True by default. - */ - slice: function(sliced, redraw, animation) { - var point = this, - series = point.series, - chart = series.chart; - - setAnimation(animation, chart); - - // redraw is true by default - redraw = pick(redraw, true); - - // if called without an argument, toggle - point.sliced = point.options.sliced = sliced = defined(sliced) ? sliced : !point.sliced; - series.options.data[inArray(point, series.data)] = point.options; // update userOptions.data - - point.graphic.animate(this.getTranslate()); - - - if (point.shadowGroup) { - point.shadowGroup.animate(this.getTranslate()); - } - - }, - - getTranslate: function() { - return this.sliced ? this.slicedTranslation : { - translateX: 0, - translateY: 0 - }; - }, - - haloPath: function(size) { - var shapeArgs = this.shapeArgs; - - return this.sliced || !this.visible ? [] : - this.series.chart.renderer.symbols.arc( - shapeArgs.x, - shapeArgs.y, - shapeArgs.r + size, - shapeArgs.r + size, { - innerR: this.shapeArgs.r - 1, - start: shapeArgs.start, - end: shapeArgs.end - } - ); - } - }); - - /** - * A `pie` series. If the [type](#series.pie.type) option is not specified, - * it is inherited from [chart.type](#chart.type). - * - * For options that apply to multiple series, it is recommended to add - * them to the [plotOptions.series](#plotOptions.series) options structure. - * To apply to all series of this specific type, apply it to [plotOptions. - * pie](#plotOptions.pie). - * - * @type {Object} - * @extends series,plotOptions.pie - * @excluding dataParser,dataURL,stack,xAxis,yAxis - * @product highcharts - * @apioption series.pie - */ - - /** - * An array of data points for the series. For the `pie` series type, - * points can be given in the following ways: - * - * 1. An array of numerical values. In this case, the numerical values - * will be interpreted as `y` options. Example: - * - * ```js - * data: [0, 5, 3, 5] - * ``` - * - * 2. An array of objects with named values. The objects are point - * configuration objects as seen below. If the total number of data - * points exceeds the series' [turboThreshold](#series.pie.turboThreshold), - * this option is not available. - * - * ```js - * data: [{ - * y: 1, - * name: "Point2", - * color: "#00FF00" - * }, { - * y: 7, - * name: "Point1", - * color: "#FF00FF" - * }] - * - * @type {Array} - * @extends series.line.data - * @excluding marker,x - * @sample {highcharts} highcharts/chart/reflow-true/ Numerical values - * @sample {highcharts} highcharts/series/data-array-of-arrays/ Arrays of numeric x and y - * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/ Arrays of datetime x and y - * @sample {highcharts} highcharts/series/data-array-of-name-value/ Arrays of point.name and y - * @sample {highcharts} highcharts/series/data-array-of-objects/ Config objects - * @product highcharts - * @apioption series.pie.data - */ - - /** - * The sequential index of the data point in the legend. - * - * @type {Number} - * @product highcharts - * @apioption series.pie.data.legendIndex - */ - - /** - * Whether to display a slice offset from the center. - * - * @type {Boolean} - * @sample {highcharts} highcharts/point/sliced/ One sliced point - * @product highcharts - * @apioption series.pie.data.sliced - */ - - /** - * Fires when the checkbox next to the point name in the legend is clicked. - * One parameter, event, is passed to the function. The state of the - * checkbox is found by event.checked. The checked item is found by - * event.item. Return false to prevent the default action which is to - * toggle the select state of the series. - * - * @type {Function} - * @context Point - * @sample {highcharts} highcharts/plotoptions/series-events-checkboxclick/ - * Alert checkbox status - * @since 1.2.0 - * @product highcharts - * @apioption plotOptions.pie.events.checkboxClick - */ - - /** - * Not applicable to pies, as the legend item is per point. See point. - * events. - * - * @type {Function} - * @since 1.2.0 - * @product highcharts - * @apioption plotOptions.pie.events.legendItemClick - */ - - /** - * Fires when the legend item belonging to the pie point (slice) is - * clicked. The `this` keyword refers to the point itself. One parameter, - * `event`, is passed to the function, containing common event information. The - * default action is to toggle the visibility of the point. This can be - * prevented by calling `event.preventDefault()`. - * - * @type {Function} - * @sample {highcharts} highcharts/plotoptions/pie-point-events-legenditemclick/ - * Confirm toggle visibility - * @since 1.2.0 - * @product highcharts - * @apioption plotOptions.pie.point.events.legendItemClick - */ - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var addEvent = H.addEvent, - arrayMax = H.arrayMax, - defined = H.defined, - each = H.each, - extend = H.extend, - format = H.format, - map = H.map, - merge = H.merge, - noop = H.noop, - pick = H.pick, - relativeLength = H.relativeLength, - Series = H.Series, - seriesTypes = H.seriesTypes, - stableSort = H.stableSort; - - /* eslint max-len: ["warn", 80, 4] */ - /** - * General distribution algorithm for distributing labels of differing size - * along a confined length in two dimensions. The algorithm takes an array of - * objects containing a size, a target and a rank. It will place the labels as - * close as possible to their targets, skipping the lowest ranked labels if - * necessary. - */ - H.distribute = function(boxes, len) { - - var i, - overlapping = true, - origBoxes = boxes, // Original array will be altered with added .pos - restBoxes = [], // The outranked overshoot - box, - target, - total = 0; - - function sortByTarget(a, b) { - return a.target - b.target; - } - - // If the total size exceeds the len, remove those boxes with the lowest - // rank - i = boxes.length; - while (i--) { - total += boxes[i].size; - } - - // Sort by rank, then slice away overshoot - if (total > len) { - stableSort(boxes, function(a, b) { - return (b.rank || 0) - (a.rank || 0); - }); - i = 0; - total = 0; - while (total <= len) { - total += boxes[i].size; - i++; - } - restBoxes = boxes.splice(i - 1, boxes.length); - } - - // Order by target - stableSort(boxes, sortByTarget); - - - // So far we have been mutating the original array. Now - // create a copy with target arrays - boxes = map(boxes, function(box) { - return { - size: box.size, - targets: [box.target], - align: pick(box.align, 0.5) - }; - }); - - while (overlapping) { - // Initial positions: target centered in box - i = boxes.length; - while (i--) { - box = boxes[i]; - // Composite box, average of targets - target = ( - Math.min.apply(0, box.targets) + - Math.max.apply(0, box.targets) - ) / 2; - box.pos = Math.min( - Math.max(0, target - box.size * box.align), - len - box.size - ); - } - - // Detect overlap and join boxes - i = boxes.length; - overlapping = false; - while (i--) { - // Overlap - if (i > 0 && boxes[i - 1].pos + boxes[i - 1].size > boxes[i].pos) { - // Add this size to the previous box - boxes[i - 1].size += boxes[i].size; - boxes[i - 1].targets = boxes[i - 1] - .targets - .concat(boxes[i].targets); - boxes[i - 1].align = 0.5; - - // Overlapping right, push left - if (boxes[i - 1].pos + boxes[i - 1].size > len) { - boxes[i - 1].pos = len - boxes[i - 1].size; - } - boxes.splice(i, 1); // Remove this item - overlapping = true; - } - } - } - - // Now the composite boxes are placed, we need to put the original boxes - // within them - i = 0; - each(boxes, function(box) { - var posInCompositeBox = 0; - each(box.targets, function() { - origBoxes[i].pos = box.pos + posInCompositeBox; - posInCompositeBox += origBoxes[i].size; - i++; - }); - }); - - // Add the rest (hidden) boxes and sort by target - origBoxes.push.apply(origBoxes, restBoxes); - stableSort(origBoxes, sortByTarget); - }; - - - /** - * Draw the data labels - */ - Series.prototype.drawDataLabels = function() { - var series = this, - seriesOptions = series.options, - options = seriesOptions.dataLabels, - points = series.points, - pointOptions, - generalOptions, - hasRendered = series.hasRendered || 0, - str, - dataLabelsGroup, - defer = pick(options.defer, !!seriesOptions.animation), - renderer = series.chart.renderer; - - /* - * Handle the dataLabels.filter option. - */ - function applyFilter(point, options) { - var filter = options.filter, - op, - prop, - val; - if (filter) { - op = filter.operator; - prop = point[filter.property]; - val = filter.value; - if ( - (op === '>' && prop > val) || - (op === '<' && prop < val) || - (op === '>=' && prop >= val) || - (op === '<=' && prop <= val) || - (op === '==' && prop == val) || // eslint-disable-line eqeqeq - (op === '===' && prop === val) - ) { - return true; - } - return false; - } - return true; - } - - if (options.enabled || series._hasPointLabels) { - - // Process default alignment of data labels for columns - if (series.dlProcessOptions) { - series.dlProcessOptions(options); - } - - // Create a separate group for the data labels to avoid rotation - dataLabelsGroup = series.plotGroup( - 'dataLabelsGroup', - 'data-labels', - defer && !hasRendered ? 'hidden' : 'visible', // #5133 - options.zIndex || 6 - ); - - if (defer) { - dataLabelsGroup.attr({ - opacity: +hasRendered - }); // #3300 - if (!hasRendered) { - addEvent(series, 'afterAnimate', function() { - if (series.visible) { // #2597, #3023, #3024 - dataLabelsGroup.show(true); - } - dataLabelsGroup[ - seriesOptions.animation ? 'animate' : 'attr' - ]({ - opacity: 1 - }, { - duration: 200 - }); - }); - } - } - - // Make the labels for each point - generalOptions = options; - each(points, function(point) { - var enabled, - dataLabel = point.dataLabel, - labelConfig, - attr, - rotation, - connector = point.connector, - isNew = !dataLabel, - style, - formatString; - - // Determine if each data label is enabled - // @note dataLabelAttribs (like pointAttribs) would eradicate - // the need for dlOptions, and simplify the section below. - pointOptions = point.dlOptions || // dlOptions is used in treemaps - (point.options && point.options.dataLabels); - enabled = pick( - pointOptions && pointOptions.enabled, - generalOptions.enabled - ) && !point.isNull; // #2282, #4641, #7112 - - if (enabled) { - enabled = applyFilter(point, pointOptions || options) === true; - } - - if (enabled) { - // Create individual options structure that can be extended - // without affecting others - options = merge(generalOptions, pointOptions); - labelConfig = point.getLabelConfig(); - formatString = ( - options[point.formatPrefix + 'Format'] || - options.format - ); - - str = defined(formatString) ? - format(formatString, labelConfig) : - ( - options[point.formatPrefix + 'Formatter'] || - options.formatter - ).call(labelConfig, options); - - style = options.style; - rotation = options.rotation; - - // Determine the color - style.color = pick( - options.color, - style.color, - series.color, - '#000000' - ); - // Get automated contrast color - if (style.color === 'contrast') { - point.contrastColor = - renderer.getContrast(point.color || series.color); - style.color = options.inside || - pick(point.labelDistance, options.distance) < 0 || - !!seriesOptions.stacking ? - point.contrastColor : - '#000000'; - } - if (seriesOptions.cursor) { - style.cursor = seriesOptions.cursor; - } - - - attr = { - - fill: options.backgroundColor, - stroke: options.borderColor, - 'stroke-width': options.borderWidth, - - r: options.borderRadius || 0, - rotation: rotation, - padding: options.padding, - zIndex: 1 - }; - - // Remove unused attributes (#947) - H.objectEach(attr, function(val, name) { - if (val === undefined) { - delete attr[name]; - } - }); - } - // If the point is outside the plot area, destroy it. #678, #820 - if (dataLabel && (!enabled || !defined(str))) { - point.dataLabel = dataLabel = dataLabel.destroy(); - if (connector) { - point.connector = connector.destroy(); - } - // Individual labels are disabled if the are explicitly disabled - // in the point options, or if they fall outside the plot area. - } else if (enabled && defined(str)) { - // create new label - if (!dataLabel) { - dataLabel = point.dataLabel = rotation ? - - renderer.text(str, 0, -9999) // labels don't rotate - .addClass('highcharts-data-label') : - - renderer.label( - str, - 0, -9999, - options.shape, - null, - null, - options.useHTML, - null, - 'data-label' - ); - - dataLabel.addClass( - ' highcharts-data-label-color-' + point.colorIndex + - ' ' + (options.className || '') + - (options.useHTML ? 'highcharts-tracker' : '') // #3398 - ); - } else { - attr.text = str; - } - dataLabel.attr(attr); - - // Styles must be applied before add in order to read text - // bounding box - dataLabel.css(style).shadow(options.shadow); - - - if (!dataLabel.added) { - dataLabel.add(dataLabelsGroup); - } - // Now the data label is created and placed at 0,0, so we need - // to align it - series.alignDataLabel(point, dataLabel, options, null, isNew); - } - }); - } - }; - - /** - * Align each individual data label - */ - Series.prototype.alignDataLabel = function( - point, - dataLabel, - options, - alignTo, - isNew - ) { - var chart = this.chart, - inverted = chart.inverted, - plotX = pick(point.dlBox && point.dlBox.centerX, point.plotX, -9999), - plotY = pick(point.plotY, -9999), - bBox = dataLabel.getBBox(), - fontSize, - baseline, - rotation = options.rotation, - normRotation, - negRotation, - align = options.align, - rotCorr, // rotation correction - // Math.round for rounding errors (#2683), alignTo to allow column - // labels (#2700) - visible = - this.visible && - ( - point.series.forceDL || - chart.isInsidePlot(plotX, Math.round(plotY), inverted) || - ( - alignTo && chart.isInsidePlot( - plotX, - inverted ? - alignTo.x + 1 : - alignTo.y + alignTo.height - 1, - inverted - ) - ) - ), - alignAttr, // the final position; - justify = pick(options.overflow, 'justify') === 'justify'; - - if (visible) { - - - fontSize = options.style.fontSize; - - - baseline = chart.renderer.fontMetrics(fontSize, dataLabel).b; - - // The alignment box is a singular point - alignTo = extend({ - x: inverted ? this.yAxis.len - plotY : plotX, - y: Math.round(inverted ? this.xAxis.len - plotX : plotY), - width: 0, - height: 0 - }, alignTo); - - // Add the text size for alignment calculation - extend(options, { - width: bBox.width, - height: bBox.height - }); - - // Allow a hook for changing alignment in the last moment, then do the - // alignment - if (rotation) { - justify = false; // Not supported for rotated text - rotCorr = chart.renderer.rotCorr(baseline, rotation); // #3723 - alignAttr = { - x: alignTo.x + options.x + alignTo.width / 2 + rotCorr.x, - y: ( - alignTo.y + - options.y + { - top: 0, - middle: 0.5, - bottom: 1 - }[options.verticalAlign] * - alignTo.height - ) - }; - dataLabel[isNew ? 'attr' : 'animate'](alignAttr) - .attr({ // #3003 - align: align - }); - - // Compensate for the rotated label sticking out on the sides - normRotation = (rotation + 720) % 360; - negRotation = normRotation > 180 && normRotation < 360; - - if (align === 'left') { - alignAttr.y -= negRotation ? bBox.height : 0; - } else if (align === 'center') { - alignAttr.x -= bBox.width / 2; - alignAttr.y -= bBox.height / 2; - } else if (align === 'right') { - alignAttr.x -= bBox.width; - alignAttr.y -= negRotation ? 0 : bBox.height; - } - - - } else { - dataLabel.align(options, null, alignTo); - alignAttr = dataLabel.alignAttr; - } - - // Handle justify or crop - if (justify) { - point.isLabelJustified = this.justifyDataLabel( - dataLabel, - options, - alignAttr, - bBox, - alignTo, - isNew - ); - - // Now check that the data label is within the plot area - } else if (pick(options.crop, true)) { - visible = - chart.isInsidePlot( - alignAttr.x, - alignAttr.y - ) && - chart.isInsidePlot( - alignAttr.x + bBox.width, - alignAttr.y + bBox.height - ); - } - - // When we're using a shape, make it possible with a connector or an - // arrow pointing to thie point - if (options.shape && !rotation) { - dataLabel[isNew ? 'attr' : 'animate']({ - anchorX: inverted ? chart.plotWidth - point.plotY : point.plotX, - anchorY: inverted ? chart.plotHeight - point.plotX : point.plotY - }); - } - } - - // Show or hide based on the final aligned position - if (!visible) { - dataLabel.attr({ - y: -9999 - }); - dataLabel.placed = false; // don't animate back in - } - - }; - - /** - * If data labels fall partly outside the plot area, align them back in, in a - * way that doesn't hide the point. - */ - Series.prototype.justifyDataLabel = function( - dataLabel, - options, - alignAttr, - bBox, - alignTo, - isNew - ) { - var chart = this.chart, - align = options.align, - verticalAlign = options.verticalAlign, - off, - justified, - padding = dataLabel.box ? 0 : (dataLabel.padding || 0); - - // Off left - off = alignAttr.x + padding; - if (off < 0) { - if (align === 'right') { - options.align = 'left'; - } else { - options.x = -off; - } - justified = true; - } - - // Off right - off = alignAttr.x + bBox.width - padding; - if (off > chart.plotWidth) { - if (align === 'left') { - options.align = 'right'; - } else { - options.x = chart.plotWidth - off; - } - justified = true; - } - - // Off top - off = alignAttr.y + padding; - if (off < 0) { - if (verticalAlign === 'bottom') { - options.verticalAlign = 'top'; - } else { - options.y = -off; - } - justified = true; - } - - // Off bottom - off = alignAttr.y + bBox.height - padding; - if (off > chart.plotHeight) { - if (verticalAlign === 'top') { - options.verticalAlign = 'bottom'; - } else { - options.y = chart.plotHeight - off; - } - justified = true; - } - - if (justified) { - dataLabel.placed = !isNew; - dataLabel.align(options, null, alignTo); - } - - return justified; - }; - - /** - * Override the base drawDataLabels method by pie specific functionality - */ - if (seriesTypes.pie) { - seriesTypes.pie.prototype.drawDataLabels = function() { - var series = this, - data = series.data, - point, - chart = series.chart, - options = series.options.dataLabels, - connectorPadding = pick(options.connectorPadding, 10), - connectorWidth = pick(options.connectorWidth, 1), - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - connector, - seriesCenter = series.center, - radius = seriesCenter[2] / 2, - centerY = seriesCenter[1], - dataLabel, - dataLabelWidth, - labelPos, - labelHeight, - // divide the points into right and left halves for anti collision - halves = [ - [], // right - [] // left - ], - x, - y, - visibility, - j, - overflow = [0, 0, 0, 0]; // top, right, bottom, left - - // get out if not enabled - if (!series.visible || (!options.enabled && !series._hasPointLabels)) { - return; - } - - // Reset all labels that have been shortened - each(data, function(point) { - if (point.dataLabel && point.visible && point.dataLabel.shortened) { - point.dataLabel - .attr({ - width: 'auto' - }).css({ - width: 'auto', - textOverflow: 'clip' - }); - point.dataLabel.shortened = false; - } - }); - - - // run parent method - Series.prototype.drawDataLabels.apply(series); - - each(data, function(point) { - if (point.dataLabel && point.visible) { // #407, #2510 - - // Arrange points for detection collision - halves[point.half].push(point); - - // Reset positions (#4905) - point.dataLabel._pos = null; - } - }); - - /* Loop over the points in each half, starting from the top and bottom - * of the pie to detect overlapping labels. - */ - each(halves, function(points, i) { - - var top, - bottom, - length = points.length, - positions = [], - naturalY, - sideOverflow, - positionsIndex, // Point index in positions array. - size; - - if (!length) { - return; - } - - // Sort by angle - series.sortByAngle(points, i - 0.5); - // Only do anti-collision when we have dataLabels outside the pie - // and have connectors. (#856) - if (series.maxLabelDistance > 0) { - top = Math.max( - 0, - centerY - radius - series.maxLabelDistance - ); - bottom = Math.min( - centerY + radius + series.maxLabelDistance, - chart.plotHeight - ); - each(points, function(point) { - // check if specific points' label is outside the pie - if (point.labelDistance > 0 && point.dataLabel) { - // point.top depends on point.labelDistance value - // Used for calculation of y value in getX method - point.top = Math.max( - 0, - centerY - radius - point.labelDistance - ); - point.bottom = Math.min( - centerY + radius + point.labelDistance, - chart.plotHeight - ); - size = point.dataLabel.getBBox().height || 21; - - // point.positionsIndex is needed for getting index of - // parameter related to specific point inside positions - // array - not every point is in positions array. - point.positionsIndex = positions.push({ - target: point.labelPos[1] - point.top + size / 2, - size: size, - rank: point.y - }) - 1; - } - }); - H.distribute(positions, bottom + size - top); - } - - // Now the used slots are sorted, fill them up sequentially - for (j = 0; j < length; j++) { - - point = points[j]; - positionsIndex = point.positionsIndex; - labelPos = point.labelPos; - dataLabel = point.dataLabel; - visibility = point.visible === false ? 'hidden' : 'inherit'; - naturalY = labelPos[1]; - y = naturalY; - - if (positions && defined(positions[positionsIndex])) { - if (positions[positionsIndex].pos === undefined) { - visibility = 'hidden'; - } else { - labelHeight = positions[positionsIndex].size; - y = point.top + positions[positionsIndex].pos; - } - } - - // It is needed to delete point.positionIndex for - // dynamically added points etc. - - delete point.positionIndex; - - // get the x - use the natural x position for labels near the - // top and bottom, to prevent the top and botton slice - // connectors from touching each other on either side - if (options.justify) { - x = seriesCenter[0] + - (i ? -1 : 1) * (radius + point.labelDistance); - } else { - x = series.getX( - y < point.top + 2 || y > point.bottom - 2 ? - naturalY : - y, - i, - point - ); - } - - - // Record the placement and visibility - dataLabel._attr = { - visibility: visibility, - align: labelPos[6] - }; - dataLabel._pos = { - x: ( - x + - options.x + - ({ - left: connectorPadding, - right: -connectorPadding - }[labelPos[6]] || 0) - ), - - // 10 is for the baseline (label vs text) - y: y + options.y - 10 - }; - labelPos.x = x; - labelPos.y = y; - - - // Detect overflowing data labels - if (pick(options.crop, true)) { - dataLabelWidth = dataLabel.getBBox().width; - - sideOverflow = null; - // Overflow left - if (x - dataLabelWidth < connectorPadding) { - sideOverflow = Math.round( - dataLabelWidth - x + connectorPadding - ); - overflow[3] = Math.max(sideOverflow, overflow[3]); - - // Overflow right - } else if ( - x + dataLabelWidth > - plotWidth - connectorPadding - ) { - sideOverflow = Math.round( - x + dataLabelWidth - plotWidth + connectorPadding - ); - overflow[1] = Math.max(sideOverflow, overflow[1]); - } - - // Overflow top - if (y - labelHeight / 2 < 0) { - overflow[0] = Math.max( - Math.round(-y + labelHeight / 2), - overflow[0] - ); - - // Overflow left - } else if (y + labelHeight / 2 > plotHeight) { - overflow[2] = Math.max( - Math.round(y + labelHeight / 2 - plotHeight), - overflow[2] - ); - } - dataLabel.sideOverflow = sideOverflow; - } - } // for each point - }); // for each half - - // Do not apply the final placement and draw the connectors until we - // have verified that labels are not spilling over. - if ( - arrayMax(overflow) === 0 || - this.verifyDataLabelOverflow(overflow) - ) { - - // Place the labels in the final position - this.placeDataLabels(); - - // Draw the connectors - if (connectorWidth) { - each(this.points, function(point) { - var isNew; - - connector = point.connector; - dataLabel = point.dataLabel; - - if ( - dataLabel && - dataLabel._pos && - point.visible && - point.labelDistance > 0 - ) { - visibility = dataLabel._attr.visibility; - - isNew = !connector; - - if (isNew) { - point.connector = connector = chart.renderer.path() - .addClass('highcharts-data-label-connector ' + - ' highcharts-color-' + point.colorIndex) - .add(series.dataLabelsGroup); - - - connector.attr({ - 'stroke-width': connectorWidth, - 'stroke': ( - options.connectorColor || - point.color || - '#666666' - ) - }); - - } - connector[isNew ? 'attr' : 'animate']({ - d: series.connectorPath(point.labelPos) - }); - connector.attr('visibility', visibility); - - } else if (connector) { - point.connector = connector.destroy(); - } - }); - } - } - }; - - /** - * Extendable method for getting the path of the connector between the data - * label and the pie slice. - */ - seriesTypes.pie.prototype.connectorPath = function(labelPos) { - var x = labelPos.x, - y = labelPos.y; - return pick(this.options.dataLabels.softConnector, true) ? [ - 'M', - // end of the string at the label - x + (labelPos[6] === 'left' ? 5 : -5), y, - 'C', - x, y, // first break, next to the label - 2 * labelPos[2] - labelPos[4], 2 * labelPos[3] - labelPos[5], - labelPos[2], labelPos[3], // second break - 'L', - labelPos[4], labelPos[5] // base - ] : [ - 'M', - // end of the string at the label - x + (labelPos[6] === 'left' ? 5 : -5), y, - 'L', - labelPos[2], labelPos[3], // second break - 'L', - labelPos[4], labelPos[5] // base - ]; - }; - - /** - * Perform the final placement of the data labels after we have verified - * that they fall within the plot area. - */ - seriesTypes.pie.prototype.placeDataLabels = function() { - each(this.points, function(point) { - var dataLabel = point.dataLabel, - _pos; - if (dataLabel && point.visible) { - _pos = dataLabel._pos; - if (_pos) { - - // Shorten data labels with ellipsis if they still overflow - // after the pie has reached minSize (#223). - if (dataLabel.sideOverflow) { - dataLabel._attr.width = - dataLabel.getBBox().width - dataLabel.sideOverflow; - dataLabel.css({ - width: dataLabel._attr.width + 'px', - textOverflow: 'ellipsis' - }); - dataLabel.shortened = true; - } - - dataLabel.attr(dataLabel._attr); - dataLabel[dataLabel.moved ? 'animate' : 'attr'](_pos); - dataLabel.moved = true; - } else if (dataLabel) { - dataLabel.attr({ - y: -9999 - }); - } - } - }, this); - }; - - seriesTypes.pie.prototype.alignDataLabel = noop; - - /** - * Verify whether the data labels are allowed to draw, or we should run more - * translation and data label positioning to keep them inside the plot area. - * Returns true when data labels are ready to draw. - */ - seriesTypes.pie.prototype.verifyDataLabelOverflow = function(overflow) { - - var center = this.center, - options = this.options, - centerOption = options.center, - minSize = options.minSize || 80, - newSize = minSize, - // If a size is set, return true and don't try to shrink the pie - // to fit the labels. - ret = options.size !== null; - - if (!ret) { - // Handle horizontal size and center - if (centerOption[0] !== null) { // Fixed center - newSize = Math.max(center[2] - - Math.max(overflow[1], overflow[3]), minSize); - - } else { // Auto center - newSize = Math.max( - // horizontal overflow - center[2] - overflow[1] - overflow[3], - minSize - ); - // horizontal center - center[0] += (overflow[3] - overflow[1]) / 2; - } - - // Handle vertical size and center - if (centerOption[1] !== null) { // Fixed center - newSize = Math.max(Math.min(newSize, center[2] - - Math.max(overflow[0], overflow[2])), minSize); - - } else { // Auto center - newSize = Math.max( - Math.min( - newSize, - // vertical overflow - center[2] - overflow[0] - overflow[2] - ), - minSize - ); - // vertical center - center[1] += (overflow[0] - overflow[2]) / 2; - } - - // If the size must be decreased, we need to run translate and - // drawDataLabels again - if (newSize < center[2]) { - center[2] = newSize; - center[3] = Math.min( // #3632 - relativeLength(options.innerSize || 0, newSize), - newSize - ); - this.translate(center); - - if (this.drawDataLabels) { - this.drawDataLabels(); - } - // Else, return true to indicate that the pie and its labels is - // within the plot area - } else { - ret = true; - } - } - return ret; - }; - } - - if (seriesTypes.column) { - - /** - * Override the basic data label alignment by adjusting for the position of - * the column - */ - seriesTypes.column.prototype.alignDataLabel = function( - point, - dataLabel, - options, - alignTo, - isNew - ) { - var inverted = this.chart.inverted, - series = point.series, - // data label box for alignment - dlBox = point.dlBox || point.shapeArgs, - below = pick( - point.below, // range series - point.plotY > pick(this.translatedThreshold, series.yAxis.len) - ), - // draw it inside the box? - inside = pick(options.inside, !!this.options.stacking), - overshoot; - - // Align to the column itself, or the top of it - if (dlBox) { // Area range uses this method but not alignTo - alignTo = merge(dlBox); - - if (alignTo.y < 0) { - alignTo.height += alignTo.y; - alignTo.y = 0; - } - overshoot = alignTo.y + alignTo.height - series.yAxis.len; - if (overshoot > 0) { - alignTo.height -= overshoot; - } - - if (inverted) { - alignTo = { - x: series.yAxis.len - alignTo.y - alignTo.height, - y: series.xAxis.len - alignTo.x - alignTo.width, - width: alignTo.height, - height: alignTo.width - }; - } - - // Compute the alignment box - if (!inside) { - if (inverted) { - alignTo.x += below ? 0 : alignTo.width; - alignTo.width = 0; - } else { - alignTo.y += below ? alignTo.height : 0; - alignTo.height = 0; - } - } - } - - - // When alignment is undefined (typically columns and bars), display the - // individual point below or above the point depending on the threshold - options.align = pick( - options.align, !inverted || inside ? 'center' : below ? 'right' : 'left' - ); - options.verticalAlign = pick( - options.verticalAlign, - inverted || inside ? 'middle' : below ? 'top' : 'bottom' - ); - - // Call the parent method - Series.prototype.alignDataLabel.call( - this, - point, - dataLabel, - options, - alignTo, - isNew - ); - - // If label was justified and we have contrast, set it: - if (point.isLabelJustified && point.contrastColor) { - point.dataLabel.css({ - color: point.contrastColor - }); - } - }; - } - - }(Highcharts)); - (function(H) { - /** - * (c) 2009-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - /** - * Highcharts module to hide overlapping data labels. This module is included in - * Highcharts. - */ - var Chart = H.Chart, - each = H.each, - objectEach = H.objectEach, - pick = H.pick, - addEvent = H.addEvent; - - // Collect potensial overlapping data labels. Stack labels probably don't need - // to be considered because they are usually accompanied by data labels that lie - // inside the columns. - addEvent(Chart.prototype, 'render', function collectAndHide() { - var labels = []; - - // Consider external label collectors - each(this.labelCollectors || [], function(collector) { - labels = labels.concat(collector()); - }); - - each(this.yAxis || [], function(yAxis) { - if ( - yAxis.options.stackLabels && - !yAxis.options.stackLabels.allowOverlap - ) { - objectEach(yAxis.stacks, function(stack) { - objectEach(stack, function(stackItem) { - labels.push(stackItem.label); - }); - }); - } - }); - - each(this.series || [], function(series) { - var dlOptions = series.options.dataLabels, - // Range series have two collections - collections = series.dataLabelCollections || ['dataLabel']; - - if ( - (dlOptions.enabled || series._hasPointLabels) && - !dlOptions.allowOverlap && - series.visible - ) { // #3866 - each(collections, function(coll) { - each(series.points, function(point) { - if (point[coll]) { - point[coll].labelrank = pick( - point.labelrank, - point.shapeArgs && point.shapeArgs.height - ); // #4118 - labels.push(point[coll]); - } - }); - }); - } - }); - this.hideOverlappingLabels(labels); - }); - - /** - * Hide overlapping labels. Labels are moved and faded in and out on zoom to - * provide a smooth visual imression. - */ - Chart.prototype.hideOverlappingLabels = function(labels) { - - var len = labels.length, - label, - i, - j, - label1, - label2, - isIntersecting, - pos1, - pos2, - parent1, - parent2, - padding, - bBox, - intersectRect = function(x1, y1, w1, h1, x2, y2, w2, h2) { - return !( - x2 > x1 + w1 || - x2 + w2 < x1 || - y2 > y1 + h1 || - y2 + h2 < y1 - ); - }; - - for (i = 0; i < len; i++) { - label = labels[i]; - if (label) { - - // Mark with initial opacity - label.oldOpacity = label.opacity; - label.newOpacity = 1; - - // Get width and height if pure text nodes (stack labels) - if (!label.width) { - bBox = label.getBBox(); - label.width = bBox.width; - label.height = bBox.height; - } - } - } - - // Prevent a situation in a gradually rising slope, that each label will - // hide the previous one because the previous one always has lower rank. - labels.sort(function(a, b) { - return (b.labelrank || 0) - (a.labelrank || 0); - }); - - // Detect overlapping labels - for (i = 0; i < len; i++) { - label1 = labels[i]; - - for (j = i + 1; j < len; ++j) { - label2 = labels[j]; - if ( - label1 && label2 && - label1 !== label2 && // #6465, polar chart with connectEnds - label1.placed && label2.placed && - label1.newOpacity !== 0 && label2.newOpacity !== 0 - ) { - pos1 = label1.alignAttr; - pos2 = label2.alignAttr; - // Different panes have different positions - parent1 = label1.parentGroup; - parent2 = label2.parentGroup; - // Substract the padding if no background or border (#4333) - padding = 2 * (label1.box ? 0 : (label1.padding || 0)); - isIntersecting = intersectRect( - pos1.x + parent1.translateX, - pos1.y + parent1.translateY, - label1.width - padding, - label1.height - padding, - pos2.x + parent2.translateX, - pos2.y + parent2.translateY, - label2.width - padding, - label2.height - padding - ); - - if (isIntersecting) { - (label1.labelrank < label2.labelrank ? label1 : label2) - .newOpacity = 0; - } - } - } - } - - // Hide or show - each(labels, function(label) { - var complete, - newOpacity; - - if (label) { - newOpacity = label.newOpacity; - - if (label.oldOpacity !== newOpacity && label.placed) { - - // Make sure the label is completely hidden to avoid catching - // clicks (#4362) - if (newOpacity) { - label.show(true); - } else { - complete = function() { - label.hide(); - }; - } - - // Animate or set the opacity - label.alignAttr.opacity = newOpacity; - label[label.isOld ? 'animate' : 'attr']( - label.alignAttr, - null, - complete - ); - - } - label.isOld = true; - } - }); - }; - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var addEvent = H.addEvent, - Chart = H.Chart, - createElement = H.createElement, - css = H.css, - defaultOptions = H.defaultOptions, - defaultPlotOptions = H.defaultPlotOptions, - each = H.each, - extend = H.extend, - fireEvent = H.fireEvent, - hasTouch = H.hasTouch, - inArray = H.inArray, - isObject = H.isObject, - Legend = H.Legend, - merge = H.merge, - pick = H.pick, - Point = H.Point, - Series = H.Series, - seriesTypes = H.seriesTypes, - svg = H.svg, - TrackerMixin; - - /** - * TrackerMixin for points and graphs. - */ - TrackerMixin = H.TrackerMixin = { - - /** - * Draw the tracker for a point. - */ - drawTrackerPoint: function() { - var series = this, - chart = series.chart, - pointer = chart.pointer, - onMouseOver = function(e) { - var point = pointer.getPointFromEvent(e); - // undefined on graph in scatterchart - if (point !== undefined) { - pointer.isDirectTouch = true; - point.onMouseOver(e); - } - }; - - // Add reference to the point - each(series.points, function(point) { - if (point.graphic) { - point.graphic.element.point = point; - } - if (point.dataLabel) { - if (point.dataLabel.div) { - point.dataLabel.div.point = point; - } else { - point.dataLabel.element.point = point; - } - } - }); - - // Add the event listeners, we need to do this only once - if (!series._hasTracking) { - each(series.trackerGroups, function(key) { - if (series[key]) { // we don't always have dataLabelsGroup - series[key] - .addClass('highcharts-tracker') - .on('mouseover', onMouseOver) - .on('mouseout', function(e) { - pointer.onTrackerMouseOut(e); - }); - if (hasTouch) { - series[key].on('touchstart', onMouseOver); - } - - - if (series.options.cursor) { - series[key] - .css(css) - .css({ - cursor: series.options.cursor - }); - } - - } - }); - series._hasTracking = true; - } - }, - - /** - * Draw the tracker object that sits above all data labels and markers to - * track mouse events on the graph or points. For the line type charts - * the tracker uses the same graphPath, but with a greater stroke width - * for better control. - */ - drawTrackerGraph: function() { - var series = this, - options = series.options, - trackByArea = options.trackByArea, - trackerPath = [].concat(trackByArea ? series.areaPath : series.graphPath), - trackerPathLength = trackerPath.length, - chart = series.chart, - pointer = chart.pointer, - renderer = chart.renderer, - snap = chart.options.tooltip.snap, - tracker = series.tracker, - i, - onMouseOver = function() { - if (chart.hoverSeries !== series) { - series.onMouseOver(); - } - }, - /* - * Empirical lowest possible opacities for TRACKER_FILL for an element to stay invisible but clickable - * IE6: 0.002 - * IE7: 0.002 - * IE8: 0.002 - * IE9: 0.00000000001 (unlimited) - * IE10: 0.0001 (exporting only) - * FF: 0.00000000001 (unlimited) - * Chrome: 0.000001 - * Safari: 0.000001 - * Opera: 0.00000000001 (unlimited) - */ - TRACKER_FILL = 'rgba(192,192,192,' + (svg ? 0.0001 : 0.002) + ')'; - - // Extend end points. A better way would be to use round linecaps, - // but those are not clickable in VML. - if (trackerPathLength && !trackByArea) { - i = trackerPathLength + 1; - while (i--) { - if (trackerPath[i] === 'M') { // extend left side - trackerPath.splice(i + 1, 0, trackerPath[i + 1] - snap, trackerPath[i + 2], 'L'); - } - if ((i && trackerPath[i] === 'M') || i === trackerPathLength) { // extend right side - trackerPath.splice(i, 0, 'L', trackerPath[i - 2] + snap, trackerPath[i - 1]); - } - } - } - - // draw the tracker - if (tracker) { - tracker.attr({ - d: trackerPath - }); - } else if (series.graph) { // create - - series.tracker = renderer.path(trackerPath) - .attr({ - 'stroke-linejoin': 'round', // #1225 - visibility: series.visible ? 'visible' : 'hidden', - stroke: TRACKER_FILL, - fill: trackByArea ? TRACKER_FILL : 'none', - 'stroke-width': series.graph.strokeWidth() + (trackByArea ? 0 : 2 * snap), - zIndex: 2 - }) - .add(series.group); - - // The tracker is added to the series group, which is clipped, but is covered - // by the marker group. So the marker group also needs to capture events. - each([series.tracker, series.markerGroup], function(tracker) { - tracker.addClass('highcharts-tracker') - .on('mouseover', onMouseOver) - .on('mouseout', function(e) { - pointer.onTrackerMouseOut(e); - }); - - - if (options.cursor) { - tracker.css({ - cursor: options.cursor - }); - } - - - if (hasTouch) { - tracker.on('touchstart', onMouseOver); - } - }); - } - } - }; - /* End TrackerMixin */ - - - /** - * Add tracking event listener to the series group, so the point graphics - * themselves act as trackers - */ - - if (seriesTypes.column) { - seriesTypes.column.prototype.drawTracker = TrackerMixin.drawTrackerPoint; - } - - if (seriesTypes.pie) { - seriesTypes.pie.prototype.drawTracker = TrackerMixin.drawTrackerPoint; - } - - if (seriesTypes.scatter) { - seriesTypes.scatter.prototype.drawTracker = TrackerMixin.drawTrackerPoint; - } - - /* - * Extend Legend for item events - */ - extend(Legend.prototype, { - - setItemEvents: function(item, legendItem, useHTML) { - var legend = this, - boxWrapper = legend.chart.renderer.boxWrapper, - activeClass = 'highcharts-legend-' + - (item instanceof Point ? 'point' : 'series') + '-active'; - - // Set the events on the item group, or in case of useHTML, the item itself (#1249) - (useHTML ? legendItem : item.legendGroup).on('mouseover', function() { - item.setState('hover'); - - // A CSS class to dim or hide other than the hovered series - boxWrapper.addClass(activeClass); - - - legendItem.css(legend.options.itemHoverStyle); - - }) - .on('mouseout', function() { - - legendItem.css(merge(item.visible ? legend.itemStyle : legend.itemHiddenStyle)); - - - // A CSS class to dim or hide other than the hovered series - boxWrapper.removeClass(activeClass); - - item.setState(); - }) - .on('click', function(event) { - var strLegendItemClick = 'legendItemClick', - fnLegendItemClick = function() { - if (item.setVisible) { - item.setVisible(); - } - }; - - // A CSS class to dim or hide other than the hovered series. Event - // handling in iOS causes the activeClass to be added prior to click - // in some cases (#7418). - boxWrapper.removeClass(activeClass); - - // Pass over the click/touch event. #4. - event = { - browserEvent: event - }; - - // click the name or symbol - if (item.firePointEvent) { // point - item.firePointEvent(strLegendItemClick, event, fnLegendItemClick); - } else { - fireEvent(item, strLegendItemClick, event, fnLegendItemClick); - } - }); - }, - - createCheckboxForItem: function(item) { - var legend = this; - - item.checkbox = createElement('input', { - type: 'checkbox', - checked: item.selected, - defaultChecked: item.selected // required by IE7 - }, legend.options.itemCheckboxStyle, legend.chart.container); - - addEvent(item.checkbox, 'click', function(event) { - var target = event.target; - fireEvent( - item.series || item, - 'checkboxClick', { // #3712 - checked: target.checked, - item: item - }, - function() { - item.select(); - } - ); - }); - } - }); - - - - // Add pointer cursor to legend itemstyle in defaultOptions - defaultOptions.legend.itemStyle.cursor = 'pointer'; - - - - /* - * Extend the Chart object with interaction - */ - - extend(Chart.prototype, /** @lends Chart.prototype */ { - /** - * Display the zoom button. - * - * @private - */ - showResetZoom: function() { - var chart = this, - lang = defaultOptions.lang, - btnOptions = chart.options.chart.resetZoomButton, - theme = btnOptions.theme, - states = theme.states, - alignTo = btnOptions.relativeTo === 'chart' ? null : 'plotBox'; - - function zoomOut() { - chart.zoomOut(); - } - - this.resetZoomButton = chart.renderer.button(lang.resetZoom, null, null, zoomOut, theme, states && states.hover) - .attr({ - align: btnOptions.position.align, - title: lang.resetZoomTitle - }) - .addClass('highcharts-reset-zoom') - .add() - .align(btnOptions.position, false, alignTo); - - }, - - /** - * Zoom out to 1:1. - * - * @private - */ - zoomOut: function() { - var chart = this; - fireEvent(chart, 'selection', { - resetSelection: true - }, function() { - chart.zoom(); - }); - }, - - /** - * Zoom into a given portion of the chart given by axis coordinates. - * @param {Object} event - * - * @private - */ - zoom: function(event) { - var chart = this, - hasZoomed, - pointer = chart.pointer, - displayButton = false, - resetZoomButton; - - // If zoom is called with no arguments, reset the axes - if (!event || event.resetSelection) { - each(chart.axes, function(axis) { - hasZoomed = axis.zoom(); - }); - pointer.initiated = false; // #6804 - - } else { // else, zoom in on all axes - each(event.xAxis.concat(event.yAxis), function(axisData) { - var axis = axisData.axis, - isXAxis = axis.isXAxis; - - // don't zoom more than minRange - if (pointer[isXAxis ? 'zoomX' : 'zoomY']) { - hasZoomed = axis.zoom(axisData.min, axisData.max); - if (axis.displayBtn) { - displayButton = true; - } - } - }); - } - - // Show or hide the Reset zoom button - resetZoomButton = chart.resetZoomButton; - if (displayButton && !resetZoomButton) { - chart.showResetZoom(); - } else if (!displayButton && isObject(resetZoomButton)) { - chart.resetZoomButton = resetZoomButton.destroy(); - } - - - // Redraw - if (hasZoomed) { - chart.redraw( - pick(chart.options.chart.animation, event && event.animation, chart.pointCount < 100) // animation - ); - } - }, - - /** - * Pan the chart by dragging the mouse across the pane. This function is - * called on mouse move, and the distance to pan is computed from chartX - * compared to the first chartX position in the dragging operation. - * - * @private - */ - pan: function(e, panning) { - - var chart = this, - hoverPoints = chart.hoverPoints, - doRedraw; - - // remove active points for shared tooltip - if (hoverPoints) { - each(hoverPoints, function(point) { - point.setState(); - }); - } - - each(panning === 'xy' ? [1, 0] : [1], function(isX) { // xy is used in maps - var axis = chart[isX ? 'xAxis' : 'yAxis'][0], - horiz = axis.horiz, - mousePos = e[horiz ? 'chartX' : 'chartY'], - mouseDown = horiz ? 'mouseDownX' : 'mouseDownY', - startPos = chart[mouseDown], - halfPointRange = (axis.pointRange || 0) / 2, - extremes = axis.getExtremes(), - panMin = axis.toValue(startPos - mousePos, true) + - halfPointRange, - panMax = axis.toValue(startPos + axis.len - mousePos, true) - - halfPointRange, - flipped = panMax < panMin, - newMin = flipped ? panMax : panMin, - newMax = flipped ? panMin : panMax, - paddedMin = Math.min( - extremes.dataMin, - halfPointRange ? - extremes.min : - axis.toValue( - axis.toPixels(extremes.min) - axis.minPixelPadding - ) - ), - paddedMax = Math.max( - extremes.dataMax, - halfPointRange ? - extremes.max : - axis.toValue( - axis.toPixels(extremes.max) + axis.minPixelPadding - ) - ), - spill; - - // If the new range spills over, either to the min or max, adjust - // the new range. - spill = paddedMin - newMin; - if (spill > 0) { - newMax += spill; - newMin = paddedMin; - } - spill = newMax - paddedMax; - if (spill > 0) { - newMax = paddedMax; - newMin -= spill; - } - - // Set new extremes if they are actually new - if (axis.series.length && newMin !== extremes.min && newMax !== extremes.max) { - axis.setExtremes( - newMin, - newMax, - false, - false, { - trigger: 'pan' - } - ); - doRedraw = true; - } - - chart[mouseDown] = mousePos; // set new reference for next run - }); - - if (doRedraw) { - chart.redraw(false); - } - css(chart.container, { - cursor: 'move' - }); - } - }); - - /* - * Extend the Point object with interaction - */ - extend(Point.prototype, /** @lends Highcharts.Point.prototype */ { - /** - * Toggle the selection status of a point. - * @param {Boolean} [selected] - * When `true`, the point is selected. When `false`, the point is - * unselected. When `null` or `undefined`, the selection state is - * toggled. - * @param {Boolean} [accumulate=false] - * When `true`, the selection is added to other selected points. - * When `false`, other selected points are deselected. Internally in - * Highcharts, when {@link http://api.highcharts.com/highcharts/plotOptions.series.allowPointSelect|allowPointSelect} - * is `true`, selected points are accumulated on Control, Shift or - * Cmd clicking the point. - * - * @see Highcharts.Chart#getSelectedPoints - * - * @sample highcharts/members/point-select/ - * Select a point from a button - * @sample highcharts/chart/events-selection-points/ - * Select a range of points through a drag selection - * @sample maps/series/data-id/ - * Select a point in Highmaps - */ - select: function(selected, accumulate) { - var point = this, - series = point.series, - chart = series.chart; - - selected = pick(selected, !point.selected); - - // fire the event with the default handler - point.firePointEvent(selected ? 'select' : 'unselect', { - accumulate: accumulate - }, function() { - - /** - * Whether the point is selected or not. - * @see Point#select - * @see Chart#getSelectedPoints - * @memberof Point - * @name selected - * @type {Boolean} - */ - point.selected = point.options.selected = selected; - series.options.data[inArray(point, series.data)] = point.options; - - point.setState(selected && 'select'); - - // unselect all other points unless Ctrl or Cmd + click - if (!accumulate) { - each(chart.getSelectedPoints(), function(loopPoint) { - if (loopPoint.selected && loopPoint !== point) { - loopPoint.selected = loopPoint.options.selected = false; - series.options.data[inArray(loopPoint, series.data)] = loopPoint.options; - loopPoint.setState(''); - loopPoint.firePointEvent('unselect'); - } - }); - } - }); - }, - - /** - * Runs on mouse over the point. Called internally from mouse and touch - * events. - * - * @param {Object} e The event arguments - */ - onMouseOver: function(e) { - var point = this, - series = point.series, - chart = series.chart, - pointer = chart.pointer; - e = e ? - pointer.normalize(e) : - // In cases where onMouseOver is called directly without an event - pointer.getChartCoordinatesFromPoint(point, chart.inverted); - pointer.runPointActions(e, point); - }, - - /** - * Runs on mouse out from the point. Called internally from mouse and touch - * events. - */ - onMouseOut: function() { - var point = this, - chart = point.series.chart; - point.firePointEvent('mouseOut'); - each(chart.hoverPoints || [], function(p) { - p.setState(); - }); - chart.hoverPoints = chart.hoverPoint = null; - }, - - /** - * Import events from the series' and point's options. Only do it on - * demand, to save processing time on hovering. - * - * @private - */ - importEvents: function() { - if (!this.hasImportedEvents) { - var point = this, - options = merge(point.series.options.point, point.options), - events = options.events; - - point.events = events; - - H.objectEach(events, function(event, eventType) { - addEvent(point, eventType, event); - }); - this.hasImportedEvents = true; - - } - }, - - /** - * Set the point's state. - * @param {String} [state] - * The new state, can be one of `''` (an empty string), `hover` or - * `select`. - */ - setState: function(state, move) { - var point = this, - plotX = Math.floor(point.plotX), // #4586 - plotY = point.plotY, - series = point.series, - stateOptions = series.options.states[state] || {}, - markerOptions = defaultPlotOptions[series.type].marker && - series.options.marker, - normalDisabled = markerOptions && markerOptions.enabled === false, - markerStateOptions = (markerOptions && markerOptions.states && - markerOptions.states[state]) || {}, - stateDisabled = markerStateOptions.enabled === false, - stateMarkerGraphic = series.stateMarkerGraphic, - pointMarker = point.marker || {}, - chart = series.chart, - halo = series.halo, - haloOptions, - markerAttribs, - hasMarkers = markerOptions && series.markerAttribs, - newSymbol; - - state = state || ''; // empty string - - if ( - // already has this state - (state === point.state && !move) || - - // selected points don't respond to hover - (point.selected && state !== 'select') || - - // series' state options is disabled - (stateOptions.enabled === false) || - - // general point marker's state options is disabled - (state && ( - stateDisabled || - (normalDisabled && markerStateOptions.enabled === false) - )) || - - // individual point marker's state options is disabled - ( - state && - pointMarker.states && - pointMarker.states[state] && - pointMarker.states[state].enabled === false - ) // #1610 - - ) { - return; - } - - if (hasMarkers) { - markerAttribs = series.markerAttribs(point, state); - } - - // Apply hover styles to the existing point - if (point.graphic) { - - if (point.state) { - point.graphic.removeClass('highcharts-point-' + point.state); - } - if (state) { - point.graphic.addClass('highcharts-point-' + state); - } - - - point.graphic.animate( - series.pointAttribs(point, state), - pick( - chart.options.chart.animation, - stateOptions.animation - ) - ); - - - if (markerAttribs) { - point.graphic.animate( - markerAttribs, - pick( - chart.options.chart.animation, // Turn off globally - markerStateOptions.animation, - markerOptions.animation - ) - ); - } - - // Zooming in from a range with no markers to a range with markers - if (stateMarkerGraphic) { - stateMarkerGraphic.hide(); - } - } else { - // if a graphic is not applied to each point in the normal state, create a shared - // graphic for the hover state - if (state && markerStateOptions) { - newSymbol = pointMarker.symbol || series.symbol; - - // If the point has another symbol than the previous one, throw away the - // state marker graphic and force a new one (#1459) - if (stateMarkerGraphic && stateMarkerGraphic.currentSymbol !== newSymbol) { - stateMarkerGraphic = stateMarkerGraphic.destroy(); - } - - // Add a new state marker graphic - if (!stateMarkerGraphic) { - if (newSymbol) { - series.stateMarkerGraphic = stateMarkerGraphic = chart.renderer.symbol( - newSymbol, - markerAttribs.x, - markerAttribs.y, - markerAttribs.width, - markerAttribs.height - ) - .add(series.markerGroup); - stateMarkerGraphic.currentSymbol = newSymbol; - } - - // Move the existing graphic - } else { - stateMarkerGraphic[move ? 'animate' : 'attr']({ // #1054 - x: markerAttribs.x, - y: markerAttribs.y - }); - } - - if (stateMarkerGraphic) { - stateMarkerGraphic.attr(series.pointAttribs(point, state)); - } - - } - - if (stateMarkerGraphic) { - stateMarkerGraphic[state && chart.isInsidePlot(plotX, plotY, chart.inverted) ? 'show' : 'hide'](); // #2450 - stateMarkerGraphic.element.point = point; // #4310 - } - } - - // Show me your halo - haloOptions = stateOptions.halo; - if (haloOptions && haloOptions.size) { - if (!halo) { - series.halo = halo = chart.renderer.path() - // #5818, #5903, #6705 - .add((point.graphic || stateMarkerGraphic).parentGroup); - } - halo[move ? 'animate' : 'attr']({ - d: point.haloPath(haloOptions.size) - }); - halo.attr({ - 'class': 'highcharts-halo highcharts-color-' + - pick(point.colorIndex, series.colorIndex) - }); - halo.point = point; // #6055 - - - halo.attr(extend({ - 'fill': point.color || series.color, - 'fill-opacity': haloOptions.opacity, - 'zIndex': -1 // #4929, IE8 added halo above everything - }, haloOptions.attributes)); - - - } else if (halo && halo.point && halo.point.haloPath) { - // Animate back to 0 on the current halo point (#6055) - halo.animate({ - d: halo.point.haloPath(0) - }); - } - - point.state = state; - }, - - /** - * Get the path definition for the halo, which is usually a shadow-like - * circle around the currently hovered point. - * @param {Number} size - * The radius of the circular halo. - * @return {Array} The path definition - */ - haloPath: function(size) { - var series = this.series, - chart = series.chart; - - return chart.renderer.symbols.circle( - Math.floor(this.plotX) - size, - this.plotY - size, - size * 2, - size * 2 - ); - } - }); - - /* - * Extend the Series object with interaction - */ - - extend(Series.prototype, /** @lends Highcharts.Series.prototype */ { - /** - * Runs on mouse over the series graphical items. - */ - onMouseOver: function() { - var series = this, - chart = series.chart, - hoverSeries = chart.hoverSeries; - - // set normal state to previous series - if (hoverSeries && hoverSeries !== series) { - hoverSeries.onMouseOut(); - } - - // trigger the event, but to save processing time, - // only if defined - if (series.options.events.mouseOver) { - fireEvent(series, 'mouseOver'); - } - - // hover this - series.setState('hover'); - chart.hoverSeries = series; - }, - - /** - * Runs on mouse out of the series graphical items. - */ - onMouseOut: function() { - // trigger the event only if listeners exist - var series = this, - options = series.options, - chart = series.chart, - tooltip = chart.tooltip, - hoverPoint = chart.hoverPoint; - - chart.hoverSeries = null; // #182, set to null before the mouseOut event fires - - // trigger mouse out on the point, which must be in this series - if (hoverPoint) { - hoverPoint.onMouseOut(); - } - - // fire the mouse out event - if (series && options.events.mouseOut) { - fireEvent(series, 'mouseOut'); - } - - - // hide the tooltip - if (tooltip && !series.stickyTracking && (!tooltip.shared || series.noSharedTooltip)) { - tooltip.hide(); - } - - // set normal state - series.setState(); - }, - - /** - * Set the state of the series. Called internally on mouse interaction - * operations, but it can also be called directly to visually - * highlight a series. - * - * @param {String} [state] - * Can be either `hover` or undefined to set to normal - * state. - */ - setState: function(state) { - var series = this, - options = series.options, - graph = series.graph, - stateOptions = options.states, - lineWidth = options.lineWidth, - attribs, - i = 0; - - state = state || ''; - - if (series.state !== state) { - - // Toggle class names - each([ - series.group, - series.markerGroup, - series.dataLabelsGroup - ], function(group) { - if (group) { - // Old state - if (series.state) { - group.removeClass('highcharts-series-' + series.state); - } - // New state - if (state) { - group.addClass('highcharts-series-' + state); - } - } - }); - - series.state = state; - - - - if (stateOptions[state] && stateOptions[state].enabled === false) { - return; - } - - if (state) { - lineWidth = stateOptions[state].lineWidth || lineWidth + (stateOptions[state].lineWidthPlus || 0); // #4035 - } - - if (graph && !graph.dashstyle) { // hover is turned off for dashed lines in VML - attribs = { - 'stroke-width': lineWidth - }; - - // Animate the graph stroke-width. By default a quick animation - // to hover, slower to un-hover. - graph.animate( - attribs, - pick( - series.chart.options.chart.animation, - stateOptions[state] && stateOptions[state].animation - ) - ); - while (series['zone-graph-' + i]) { - series['zone-graph-' + i].attr(attribs); - i = i + 1; - } - } - - } - }, - - /** - * Show or hide the series. - * - * @param {Boolean} [visible] - * True to show the series, false to hide. If undefined, the - * visibility is toggled. - * @param {Boolean} [redraw=true] - * Whether to redraw the chart after the series is altered. If doing - * more operations on the chart, it is a good idea to set redraw to - * false and call {@link Chart#redraw|chart.redraw()} after. - */ - setVisible: function(vis, redraw) { - var series = this, - chart = series.chart, - legendItem = series.legendItem, - showOrHide, - ignoreHiddenSeries = chart.options.chart.ignoreHiddenSeries, - oldVisibility = series.visible; - - // if called without an argument, toggle visibility - series.visible = vis = series.options.visible = series.userOptions.visible = vis === undefined ? !oldVisibility : vis; // #5618 - showOrHide = vis ? 'show' : 'hide'; - - // show or hide elements - each(['group', 'dataLabelsGroup', 'markerGroup', 'tracker', 'tt'], function(key) { - if (series[key]) { - series[key][showOrHide](); - } - }); - - - // hide tooltip (#1361) - if (chart.hoverSeries === series || (chart.hoverPoint && chart.hoverPoint.series) === series) { - series.onMouseOut(); - } - - - if (legendItem) { - chart.legend.colorizeItem(series, vis); - } - - - // rescale or adapt to resized chart - series.isDirty = true; - // in a stack, all other series are affected - if (series.options.stacking) { - each(chart.series, function(otherSeries) { - if (otherSeries.options.stacking && otherSeries.visible) { - otherSeries.isDirty = true; - } - }); - } - - // show or hide linked series - each(series.linkedSeries, function(otherSeries) { - otherSeries.setVisible(vis, false); - }); - - if (ignoreHiddenSeries) { - chart.isDirtyBox = true; - } - if (redraw !== false) { - chart.redraw(); - } - - fireEvent(series, showOrHide); - }, - - /** - * Show the series if hidden. - * - * @sample highcharts/members/series-hide/ - * Toggle visibility from a button - */ - show: function() { - this.setVisible(true); - }, - - /** - * Hide the series if visible. If the {@link - * https://api.highcharts.com/highcharts/chart.ignoreHiddenSeries| - * chart.ignoreHiddenSeries} option is true, the chart is redrawn without - * this series. - * - * @sample highcharts/members/series-hide/ - * Toggle visibility from a button - */ - hide: function() { - this.setVisible(false); - }, - - - /** - * Select or unselect the series. This means its {@link - * Highcharts.Series.selected|selected} property is set, the checkbox in the - * legend is toggled and when selected, the series is returned by the - * {@link Highcharts.Chart#getSelectedSeries} function. - * - * @param {Boolean} [selected] - * True to select the series, false to unselect. If undefined, the - * selection state is toggled. - * - * @sample highcharts/members/series-select/ - * Select a series from a button - */ - select: function(selected) { - var series = this; - - series.selected = selected = (selected === undefined) ? - !series.selected : - selected; - - if (series.checkbox) { - series.checkbox.checked = selected; - } - - fireEvent(series, selected ? 'select' : 'unselect'); - }, - - drawTracker: TrackerMixin.drawTrackerGraph - }); - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var Chart = H.Chart, - each = H.each, - inArray = H.inArray, - isArray = H.isArray, - isObject = H.isObject, - pick = H.pick, - splat = H.splat; - - - /** - * Allows setting a set of rules to apply for different screen or chart - * sizes. Each rule specifies additional chart options. - * - * @sample {highstock} stock/demo/responsive/ Stock chart - * @sample highcharts/responsive/axis/ Axis - * @sample highcharts/responsive/legend/ Legend - * @sample highcharts/responsive/classname/ Class name - * @since 5.0.0 - * @apioption responsive - */ - - /** - * A set of rules for responsive settings. The rules are executed from - * the top down. - * - * @type {Array} - * @sample {highcharts} highcharts/responsive/axis/ Axis changes - * @sample {highstock} highcharts/responsive/axis/ Axis changes - * @sample {highmaps} highcharts/responsive/axis/ Axis changes - * @since 5.0.0 - * @apioption responsive.rules - */ - - /** - * A full set of chart options to apply as overrides to the general - * chart options. The chart options are applied when the given rule - * is active. - * - * A special case is configuration objects that take arrays, for example - * [xAxis](#xAxis), [yAxis](#yAxis) or [series](#series). For these - * collections, an `id` option is used to map the new option set to - * an existing object. If an existing object of the same id is not found, - * the item of the same indexupdated. So for example, setting `chartOptions` - * with two series items without an `id`, will cause the existing chart's - * two series to be updated with respective options. - * - * @type {Object} - * @sample {highstock} stock/demo/responsive/ Stock chart - * @sample highcharts/responsive/axis/ Axis - * @sample highcharts/responsive/legend/ Legend - * @sample highcharts/responsive/classname/ Class name - * @since 5.0.0 - * @apioption responsive.rules.chartOptions - */ - - /** - * Under which conditions the rule applies. - * - * @type {Object} - * @since 5.0.0 - * @apioption responsive.rules.condition - */ - - /** - * A callback function to gain complete control on when the responsive - * rule applies. Return `true` if it applies. This opens for checking - * against other metrics than the chart size, or example the document - * size or other elements. - * - * @type {Function} - * @context Chart - * @since 5.0.0 - * @apioption responsive.rules.condition.callback - */ - - /** - * The responsive rule applies if the chart height is less than this. - * - * @type {Number} - * @since 5.0.0 - * @apioption responsive.rules.condition.maxHeight - */ - - /** - * The responsive rule applies if the chart width is less than this. - * - * @type {Number} - * @sample highcharts/responsive/axis/ Max width is 500 - * @since 5.0.0 - * @apioption responsive.rules.condition.maxWidth - */ - - /** - * The responsive rule applies if the chart height is greater than this. - * - * @type {Number} - * @default 0 - * @since 5.0.0 - * @apioption responsive.rules.condition.minHeight - */ - - /** - * The responsive rule applies if the chart width is greater than this. - * - * @type {Number} - * @default 0 - * @since 5.0.0 - * @apioption responsive.rules.condition.minWidth - */ - - /** - * Update the chart based on the current chart/document size and options for - * responsiveness. - */ - Chart.prototype.setResponsive = function(redraw) { - var options = this.options.responsive, - ruleIds = [], - currentResponsive = this.currentResponsive, - currentRuleIds; - - if (options && options.rules) { - each(options.rules, function(rule) { - if (rule._id === undefined) { - rule._id = H.uniqueKey(); - } - - this.matchResponsiveRule(rule, ruleIds, redraw); - }, this); - } - - // Merge matching rules - var mergedOptions = H.merge.apply(0, H.map(ruleIds, function(ruleId) { - return H.find(options.rules, function(rule) { - return rule._id === ruleId; - }).chartOptions; - })); - - // Stringified key for the rules that currently apply. - ruleIds = ruleIds.toString() || undefined; - currentRuleIds = currentResponsive && currentResponsive.ruleIds; - - - // Changes in what rules apply - if (ruleIds !== currentRuleIds) { - - // Undo previous rules. Before we apply a new set of rules, we need to - // roll back completely to base options (#6291). - if (currentResponsive) { - this.update(currentResponsive.undoOptions, redraw); - } - - if (ruleIds) { - // Get undo-options for matching rules - this.currentResponsive = { - ruleIds: ruleIds, - mergedOptions: mergedOptions, - undoOptions: this.currentOptions(mergedOptions) - }; - - this.update(mergedOptions, redraw); - - } else { - this.currentResponsive = undefined; - } - } - }; - - /** - * Handle a single responsiveness rule - */ - Chart.prototype.matchResponsiveRule = function(rule, matches) { - var condition = rule.condition, - fn = condition.callback || function() { - return this.chartWidth <= pick(condition.maxWidth, Number.MAX_VALUE) && - this.chartHeight <= pick(condition.maxHeight, Number.MAX_VALUE) && - this.chartWidth >= pick(condition.minWidth, 0) && - this.chartHeight >= pick(condition.minHeight, 0); - }; - - if (fn.call(this)) { - matches.push(rule._id); - } - - }; - - /** - * Get the current values for a given set of options. Used before we update - * the chart with a new responsiveness rule. - * TODO: Restore axis options (by id?) - */ - Chart.prototype.currentOptions = function(options) { - - var ret = {}; - - /** - * Recurse over a set of options and its current values, - * and store the current values in the ret object. - */ - function getCurrent(options, curr, ret, depth) { - var i; - H.objectEach(options, function(val, key) { - if (!depth && inArray(key, ['series', 'xAxis', 'yAxis']) > -1) { - val = splat(val); - - ret[key] = []; - - // Iterate over collections like series, xAxis or yAxis and map - // the items by index. - for (i = 0; i < val.length; i++) { - if (curr[key][i]) { // Item exists in current data (#6347) - ret[key][i] = {}; - getCurrent( - val[i], - curr[key][i], - ret[key][i], - depth + 1 - ); - } - } - } else if (isObject(val)) { - ret[key] = isArray(val) ? [] : {}; - getCurrent(val, curr[key] || {}, ret[key], depth + 1); - } else { - ret[key] = curr[key] || null; - } - }); - } - - getCurrent(options, this.options, ret, 0); - return ret; - }; - - }(Highcharts)); - var Highcharts = (function(Highcharts) { - - return Highcharts; - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var addEvent = H.addEvent, - Axis = H.Axis, - Chart = H.Chart, - css = H.css, - dateFormat = H.dateFormat, - defined = H.defined, - each = H.each, - extend = H.extend, - noop = H.noop, - pick = H.pick, - Series = H.Series, - timeUnits = H.timeUnits, - wrap = H.wrap; - - /* **************************************************************************** - * Start ordinal axis logic * - *****************************************************************************/ - - - wrap(Series.prototype, 'init', function(proceed) { - var series = this, - xAxis; - - // call the original function - proceed.apply(this, Array.prototype.slice.call(arguments, 1)); - - xAxis = series.xAxis; - - // Destroy the extended ordinal index on updated data - if (xAxis && xAxis.options.ordinal) { - addEvent(series, 'updatedData', function() { - delete xAxis.ordinalIndex; - }); - } - }); - - /** - * In an ordinal axis, there might be areas with dense consentrations of points, then large - * gaps between some. Creating equally distributed ticks over this entire range - * may lead to a huge number of ticks that will later be removed. So instead, break the - * positions up in segments, find the tick positions for each segment then concatenize them. - * This method is used from both data grouping logic and X axis tick position logic. - */ - wrap(Axis.prototype, 'getTimeTicks', function(proceed, normalizedInterval, min, max, startOfWeek, positions, closestDistance, findHigherRanks) { - - var start = 0, - end, - segmentPositions, - higherRanks = {}, - hasCrossedHigherRank, - info, - posLength, - outsideMax, - groupPositions = [], - lastGroupPosition = -Number.MAX_VALUE, - tickPixelIntervalOption = this.options.tickPixelInterval; - - // The positions are not always defined, for example for ordinal positions when data - // has regular interval (#1557, #2090) - if ((!this.options.ordinal && !this.options.breaks) || !positions || positions.length < 3 || min === undefined) { - return proceed.call(this, normalizedInterval, min, max, startOfWeek); - } - - // Analyze the positions array to split it into segments on gaps larger than 5 times - // the closest distance. The closest distance is already found at this point, so - // we reuse that instead of computing it again. - posLength = positions.length; - - for (end = 0; end < posLength; end++) { - - outsideMax = end && positions[end - 1] > max; - - if (positions[end] < min) { // Set the last position before min - start = end; - } - - if (end === posLength - 1 || positions[end + 1] - positions[end] > closestDistance * 5 || outsideMax) { - - // For each segment, calculate the tick positions from the getTimeTicks utility - // function. The interval will be the same regardless of how long the segment is. - if (positions[end] > lastGroupPosition) { // #1475 - - segmentPositions = proceed.call(this, normalizedInterval, positions[start], positions[end], startOfWeek); - - // Prevent duplicate groups, for example for multiple segments within one larger time frame (#1475) - while (segmentPositions.length && segmentPositions[0] <= lastGroupPosition) { - segmentPositions.shift(); - } - if (segmentPositions.length) { - lastGroupPosition = segmentPositions[segmentPositions.length - 1]; - } - - groupPositions = groupPositions.concat(segmentPositions); - } - // Set start of next segment - start = end + 1; - } - - if (outsideMax) { - break; - } - } - - // Get the grouping info from the last of the segments. The info is the same for - // all segments. - info = segmentPositions.info; - - // Optionally identify ticks with higher rank, for example when the ticks - // have crossed midnight. - if (findHigherRanks && info.unitRange <= timeUnits.hour) { - end = groupPositions.length - 1; - - // Compare points two by two - for (start = 1; start < end; start++) { - if (dateFormat('%d', groupPositions[start]) !== dateFormat('%d', groupPositions[start - 1])) { - higherRanks[groupPositions[start]] = 'day'; - hasCrossedHigherRank = true; - } - } - - // If the complete array has crossed midnight, we want to mark the first - // positions also as higher rank - if (hasCrossedHigherRank) { - higherRanks[groupPositions[0]] = 'day'; - } - info.higherRanks = higherRanks; - } - - // Save the info - groupPositions.info = info; - - - - // Don't show ticks within a gap in the ordinal axis, where the space between - // two points is greater than a portion of the tick pixel interval - if (findHigherRanks && defined(tickPixelIntervalOption)) { // check for squashed ticks - - var length = groupPositions.length, - i = length, - itemToRemove, - translated, - translatedArr = [], - lastTranslated, - medianDistance, - distance, - distances = []; - - // Find median pixel distance in order to keep a reasonably even distance between - // ticks (#748) - while (i--) { - translated = this.translate(groupPositions[i]); - if (lastTranslated) { - distances[i] = lastTranslated - translated; - } - translatedArr[i] = lastTranslated = translated; - } - distances.sort(); - medianDistance = distances[Math.floor(distances.length / 2)]; - if (medianDistance < tickPixelIntervalOption * 0.6) { - medianDistance = null; - } - - // Now loop over again and remove ticks where needed - i = groupPositions[length - 1] > max ? length - 1 : length; // #817 - lastTranslated = undefined; - while (i--) { - translated = translatedArr[i]; - distance = Math.abs(lastTranslated - translated); - // #4175 - when axis is reversed, the distance, is negative but - // tickPixelIntervalOption positive, so we need to compare the same values - - // Remove ticks that are closer than 0.6 times the pixel interval from the one to the right, - // but not if it is close to the median distance (#748). - if (lastTranslated && distance < tickPixelIntervalOption * 0.8 && - (medianDistance === null || distance < medianDistance * 0.8)) { - - // Is this a higher ranked position with a normal position to the right? - if (higherRanks[groupPositions[i]] && !higherRanks[groupPositions[i + 1]]) { - - // Yes: remove the lower ranked neighbour to the right - itemToRemove = i + 1; - lastTranslated = translated; // #709 - - } else { - - // No: remove this one - itemToRemove = i; - } - - groupPositions.splice(itemToRemove, 1); - - } else { - lastTranslated = translated; - } - } - } - return groupPositions; - }); - - // Extend the Axis prototype - extend(Axis.prototype, /** @lends Axis.prototype */ { - - /** - * Calculate the ordinal positions before tick positions are calculated. - */ - beforeSetTickPositions: function() { - var axis = this, - len, - ordinalPositions = [], - useOrdinal = false, - dist, - extremes = axis.getExtremes(), - min = extremes.min, - max = extremes.max, - minIndex, - maxIndex, - slope, - hasBreaks = axis.isXAxis && !!axis.options.breaks, - isOrdinal = axis.options.ordinal, - overscrollPointsRange = Number.MAX_VALUE, - ignoreHiddenSeries = axis.chart.options.chart.ignoreHiddenSeries, - isNavigatorAxis = axis.options.className === 'highcharts-navigator-xaxis', - i; - - if ( - axis.options.overscroll && - axis.max === axis.dataMax && - ( - // Panning is an execption, - // We don't want to apply overscroll when panning over the dataMax - !axis.chart.mouseIsDown || - isNavigatorAxis - ) && ( - // Scrollbar buttons are the other execption: - !axis.eventArgs || - axis.eventArgs && axis.eventArgs.trigger !== 'navigator' - ) - ) { - axis.max += axis.options.overscroll; - - // Live data and buttons require translation for the min: - if (!isNavigatorAxis && defined(axis.userMin)) { - axis.min += axis.options.overscroll; - } - } - - // Apply the ordinal logic - if (isOrdinal || hasBreaks) { // #4167 YAxis is never ordinal ? - - each(axis.series, function(series, i) { - - if ( - (!ignoreHiddenSeries || series.visible !== false) && - (series.takeOrdinalPosition !== false || hasBreaks) - ) { - - // concatenate the processed X data into the existing positions, or the empty array - ordinalPositions = ordinalPositions.concat(series.processedXData); - len = ordinalPositions.length; - - // remove duplicates (#1588) - ordinalPositions.sort(function(a, b) { - return a - b; // without a custom function it is sorted as strings - }); - - overscrollPointsRange = Math.min( - overscrollPointsRange, - pick( - // Check for a single-point series: - series.closestPointRange, - overscrollPointsRange - ) - ); - - if (len) { - i = len - 1; - while (i--) { - if (ordinalPositions[i] === ordinalPositions[i + 1]) { - ordinalPositions.splice(i, 1); - } - } - } - } - - }); - - // cache the length - len = ordinalPositions.length; - - // Check if we really need the overhead of mapping axis data against the ordinal positions. - // If the series consist of evenly spaced data any way, we don't need any ordinal logic. - if (len > 2) { // two points have equal distance by default - dist = ordinalPositions[1] - ordinalPositions[0]; - i = len - 1; - while (i-- && !useOrdinal) { - if (ordinalPositions[i + 1] - ordinalPositions[i] !== dist) { - useOrdinal = true; - } - } - - // When zooming in on a week, prevent axis padding for weekends even though the data within - // the week is evenly spaced. - if (!axis.options.keepOrdinalPadding && - ( - ordinalPositions[0] - min > dist || - max - ordinalPositions[ordinalPositions.length - 1] > dist - ) - ) { - useOrdinal = true; - } - } else if (axis.options.overscroll) { - if (len === 2) { - // Exactly two points, distance for overscroll is fixed: - overscrollPointsRange = ordinalPositions[1] - ordinalPositions[0]; - } else if (len === 1) { - // We have just one point, closest distance is unknown. - // Assume then it is last point and overscrolled range: - overscrollPointsRange = axis.options.overscroll; - ordinalPositions = [ordinalPositions[0], ordinalPositions[0] + overscrollPointsRange]; - } else { - // In case of zooming in on overscrolled range, stick to the old range: - overscrollPointsRange = axis.overscrollPointsRange; - } - } - - // Record the slope and offset to compute the linear values from the array index. - // Since the ordinal positions may exceed the current range, get the start and - // end positions within it (#719, #665b) - if (useOrdinal) { - - if (axis.options.overscroll) { - axis.overscrollPointsRange = overscrollPointsRange; - ordinalPositions = ordinalPositions.concat(axis.getOverscrollPositions()); - } - - // Register - axis.ordinalPositions = ordinalPositions; - - // This relies on the ordinalPositions being set. Use Math.max - // and Math.min to prevent padding on either sides of the data. - minIndex = axis.ordinal2lin( // #5979 - Math.max( - min, - ordinalPositions[0] - ), - true - ); - maxIndex = Math.max(axis.ordinal2lin( - Math.min( - max, - ordinalPositions[ordinalPositions.length - 1] - ), - true - ), 1); // #3339 - - // Set the slope and offset of the values compared to the indices in the ordinal positions - axis.ordinalSlope = slope = (max - min) / (maxIndex - minIndex); - axis.ordinalOffset = min - (minIndex * slope); - - } else { - axis.overscrollPointsRange = pick(axis.closestPointRange, axis.overscrollPointsRange); - axis.ordinalPositions = axis.ordinalSlope = axis.ordinalOffset = undefined; - } - } - - axis.isOrdinal = isOrdinal && useOrdinal; // #3818, #4196, #4926 - axis.groupIntervalFactor = null; // reset for next run - }, - /** - * Translate from a linear axis value to the corresponding ordinal axis position. If there - * are no gaps in the ordinal axis this will be the same. The translated value is the value - * that the point would have if the axis were linear, using the same min and max. - * - * @param Number val The axis value - * @param Boolean toIndex Whether to return the index in the ordinalPositions or the new value - */ - val2lin: function(val, toIndex) { - var axis = this, - ordinalPositions = axis.ordinalPositions, - ret; - - if (!ordinalPositions) { - ret = val; - - } else { - - var ordinalLength = ordinalPositions.length, - i, - distance, - ordinalIndex; - - // first look for an exact match in the ordinalpositions array - i = ordinalLength; - while (i--) { - if (ordinalPositions[i] === val) { - ordinalIndex = i; - break; - } - } - - // if that failed, find the intermediate position between the two nearest values - i = ordinalLength - 1; - while (i--) { - if (val > ordinalPositions[i] || i === 0) { // interpolate - distance = (val - ordinalPositions[i]) / (ordinalPositions[i + 1] - ordinalPositions[i]); // something between 0 and 1 - ordinalIndex = i + distance; - break; - } - } - ret = toIndex ? - ordinalIndex : - axis.ordinalSlope * (ordinalIndex || 0) + axis.ordinalOffset; - } - return ret; - }, - /** - * Translate from linear (internal) to axis value - * - * @param Number val The linear abstracted value - * @param Boolean fromIndex Translate from an index in the ordinal positions rather than a value - */ - lin2val: function(val, fromIndex) { - var axis = this, - ordinalPositions = axis.ordinalPositions, - ret; - - if (!ordinalPositions) { // the visible range contains only equally spaced values - ret = val; - - } else { - - var ordinalSlope = axis.ordinalSlope, - ordinalOffset = axis.ordinalOffset, - i = ordinalPositions.length - 1, - linearEquivalentLeft, - linearEquivalentRight, - distance; - - - // Handle the case where we translate from the index directly, used only - // when panning an ordinal axis - if (fromIndex) { - - if (val < 0) { // out of range, in effect panning to the left - val = ordinalPositions[0]; - } else if (val > i) { // out of range, panning to the right - val = ordinalPositions[i]; - } else { // split it up - i = Math.floor(val); - distance = val - i; // the decimal - } - - // Loop down along the ordinal positions. When the linear equivalent of i matches - // an ordinal position, interpolate between the left and right values. - } else { - while (i--) { - linearEquivalentLeft = (ordinalSlope * i) + ordinalOffset; - if (val >= linearEquivalentLeft) { - linearEquivalentRight = (ordinalSlope * (i + 1)) + ordinalOffset; - distance = (val - linearEquivalentLeft) / (linearEquivalentRight - linearEquivalentLeft); // something between 0 and 1 - break; - } - } - } - - // If the index is within the range of the ordinal positions, return the associated - // or interpolated value. If not, just return the value - return distance !== undefined && ordinalPositions[i] !== undefined ? - ordinalPositions[i] + (distance ? distance * (ordinalPositions[i + 1] - ordinalPositions[i]) : 0) : - val; - } - return ret; - }, - /** - * Get the ordinal positions for the entire data set. This is necessary in chart panning - * because we need to find out what points or data groups are available outside the - * visible range. When a panning operation starts, if an index for the given grouping - * does not exists, it is created and cached. This index is deleted on updated data, so - * it will be regenerated the next time a panning operation starts. - */ - getExtendedPositions: function() { - var axis = this, - chart = axis.chart, - grouping = axis.series[0].currentDataGrouping, - ordinalIndex = axis.ordinalIndex, - key = grouping ? grouping.count + grouping.unitName : 'raw', - overscroll = axis.options.overscroll, - extremes = axis.getExtremes(), - fakeAxis, - fakeSeries; - - // If this is the first time, or the ordinal index is deleted by updatedData, - // create it. - if (!ordinalIndex) { - ordinalIndex = axis.ordinalIndex = {}; - } - - - if (!ordinalIndex[key]) { - - // Create a fake axis object where the extended ordinal positions are emulated - fakeAxis = { - series: [], - chart: chart, - getExtremes: function() { - return { - min: extremes.dataMin, - max: extremes.dataMax + overscroll - }; - }, - options: { - ordinal: true - }, - val2lin: Axis.prototype.val2lin, // #2590 - ordinal2lin: Axis.prototype.ordinal2lin // #6276 - }; - - // Add the fake series to hold the full data, then apply processData to it - each(axis.series, function(series) { - fakeSeries = { - xAxis: fakeAxis, - xData: series.xData.slice(), - chart: chart, - destroyGroupedData: noop - }; - - fakeSeries.xData = fakeSeries.xData.concat(axis.getOverscrollPositions()); - - fakeSeries.options = { - dataGrouping: grouping ? { - enabled: true, - forced: true, - approximation: 'open', // doesn't matter which, use the fastest - units: [ - [grouping.unitName, [grouping.count]] - ] - } : { - enabled: false - } - }; - series.processData.apply(fakeSeries); - - - fakeAxis.series.push(fakeSeries); - }); - - // Run beforeSetTickPositions to compute the ordinalPositions - axis.beforeSetTickPositions.apply(fakeAxis); - - // Cache it - ordinalIndex[key] = fakeAxis.ordinalPositions; - } - return ordinalIndex[key]; - }, - - /** - * Get ticks for an ordinal axis within a range where points don't exist. - * It is required when overscroll is enabled. We can't base on points, - * because we may not have any, so we use approximated pointRange and - * generate these ticks between - * evenly spaced. Used in panning and navigator scrolling. - * - * @returns positions {Array} Generated ticks - * @private - */ - getOverscrollPositions: function() { - var axis = this, - extraRange = axis.options.overscroll, - distance = axis.overscrollPointsRange, - positions = [], - max = axis.dataMax; - - if (H.defined(distance)) { - // Max + pointRange because we need to scroll to the last - - positions.push(max); - - while (max <= axis.dataMax + extraRange) { - max += distance; - positions.push(max); - } - - } - - return positions; - }, - - /** - * Find the factor to estimate how wide the plot area would have been if ordinal - * gaps were included. This value is used to compute an imagined plot width in order - * to establish the data grouping interval. - * - * A real world case is the intraday-candlestick - * example. Without this logic, it would show the correct data grouping when viewing - * a range within each day, but once moving the range to include the gap between two - * days, the interval would include the cut-away night hours and the data grouping - * would be wrong. So the below method tries to compensate by identifying the most - * common point interval, in this case days. - * - * An opposite case is presented in issue #718. We have a long array of daily data, - * then one point is appended one hour after the last point. We expect the data grouping - * not to change. - * - * In the future, if we find cases where this estimation doesn't work optimally, we - * might need to add a second pass to the data grouping logic, where we do another run - * with a greater interval if the number of data groups is more than a certain fraction - * of the desired group count. - */ - getGroupIntervalFactor: function(xMin, xMax, series) { - var i, - processedXData = series.processedXData, - len = processedXData.length, - distances = [], - median, - groupIntervalFactor = this.groupIntervalFactor; - - // Only do this computation for the first series, let the other inherit it (#2416) - if (!groupIntervalFactor) { - - // Register all the distances in an array - for (i = 0; i < len - 1; i++) { - distances[i] = processedXData[i + 1] - processedXData[i]; - } - - // Sort them and find the median - distances.sort(function(a, b) { - return a - b; - }); - median = distances[Math.floor(len / 2)]; - - // Compensate for series that don't extend through the entire axis extent. #1675. - xMin = Math.max(xMin, processedXData[0]); - xMax = Math.min(xMax, processedXData[len - 1]); - - this.groupIntervalFactor = groupIntervalFactor = (len * median) / (xMax - xMin); - } - - // Return the factor needed for data grouping - return groupIntervalFactor; - }, - - /** - * Make the tick intervals closer because the ordinal gaps make the ticks spread out or cluster - */ - postProcessTickInterval: function(tickInterval) { - // Problem: http://jsfiddle.net/highcharts/FQm4E/1/ - // This is a case where this algorithm doesn't work optimally. In this case, the - // tick labels are spread out per week, but all the gaps reside within weeks. So - // we have a situation where the labels are courser than the ordinal gaps, and - // thus the tick interval should not be altered - var ordinalSlope = this.ordinalSlope, - ret; - - - if (ordinalSlope) { - if (!this.options.breaks) { - ret = tickInterval / (ordinalSlope / this.closestPointRange); - } else { - ret = this.closestPointRange || tickInterval; // #7275 - } - } else { - ret = tickInterval; - } - return ret; - } - }); - - // Record this to prevent overwriting by broken-axis module (#5979) - Axis.prototype.ordinal2lin = Axis.prototype.val2lin; - - // Extending the Chart.pan method for ordinal axes - wrap(Chart.prototype, 'pan', function(proceed, e) { - var chart = this, - xAxis = chart.xAxis[0], - overscroll = xAxis.options.overscroll, - chartX = e.chartX, - runBase = false; - - if (xAxis.options.ordinal && xAxis.series.length) { - - var mouseDownX = chart.mouseDownX, - extremes = xAxis.getExtremes(), - dataMax = extremes.dataMax, - min = extremes.min, - max = extremes.max, - trimmedRange, - hoverPoints = chart.hoverPoints, - closestPointRange = xAxis.closestPointRange || xAxis.overscrollPointsRange, - pointPixelWidth = xAxis.translationSlope * (xAxis.ordinalSlope || closestPointRange), - movedUnits = (mouseDownX - chartX) / pointPixelWidth, // how many ordinal units did we move? - extendedAxis = { - ordinalPositions: xAxis.getExtendedPositions() - }, // get index of all the chart's points - ordinalPositions, - searchAxisLeft, - lin2val = xAxis.lin2val, - val2lin = xAxis.val2lin, - searchAxisRight; - - if (!extendedAxis.ordinalPositions) { // we have an ordinal axis, but the data is equally spaced - runBase = true; - - } else if (Math.abs(movedUnits) > 1) { - - // Remove active points for shared tooltip - if (hoverPoints) { - each(hoverPoints, function(point) { - point.setState(); - }); - } - - if (movedUnits < 0) { - searchAxisLeft = extendedAxis; - searchAxisRight = xAxis.ordinalPositions ? xAxis : extendedAxis; - } else { - searchAxisLeft = xAxis.ordinalPositions ? xAxis : extendedAxis; - searchAxisRight = extendedAxis; - } - - // In grouped data series, the last ordinal position represents the grouped data, which is - // to the left of the real data max. If we don't compensate for this, we will be allowed - // to pan grouped data series passed the right of the plot area. - ordinalPositions = searchAxisRight.ordinalPositions; - if (dataMax > ordinalPositions[ordinalPositions.length - 1]) { - ordinalPositions.push(dataMax); - } - - // Get the new min and max values by getting the ordinal index for the current extreme, - // then add the moved units and translate back to values. This happens on the - // extended ordinal positions if the new position is out of range, else it happens - // on the current x axis which is smaller and faster. - chart.fixedRange = max - min; - trimmedRange = xAxis.toFixedRange(null, null, - lin2val.apply(searchAxisLeft, [ - val2lin.apply(searchAxisLeft, [min, true]) + movedUnits, // the new index - true // translate from index - ]), - lin2val.apply(searchAxisRight, [ - val2lin.apply(searchAxisRight, [max, true]) + movedUnits, // the new index - true // translate from index - ]) - ); - - // Apply it if it is within the available data range - if ( - trimmedRange.min >= Math.min(extremes.dataMin, min) && - trimmedRange.max <= Math.max(dataMax, max) + overscroll - ) { - xAxis.setExtremes(trimmedRange.min, trimmedRange.max, true, false, { - trigger: 'pan' - }); - } - - chart.mouseDownX = chartX; // set new reference for next run - css(chart.container, { - cursor: 'move' - }); - } - - } else { - runBase = true; - } - - // revert to the linear chart.pan version - if (runBase) { - if (overscroll) { - xAxis.max = xAxis.dataMax + overscroll; - } - // call the original function - proceed.apply(this, Array.prototype.slice.call(arguments, 1)); - } - }); - - /* **************************************************************************** - * End ordinal axis logic * - *****************************************************************************/ - - }(Highcharts)); - (function(H) { - /** - * (c) 2009-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - - var pick = H.pick, - wrap = H.wrap, - each = H.each, - extend = H.extend, - isArray = H.isArray, - fireEvent = H.fireEvent, - Axis = H.Axis, - Series = H.Series; - - function stripArguments() { - return Array.prototype.slice.call(arguments, 1); - } - - extend(Axis.prototype, { - isInBreak: function(brk, val) { - var ret, - repeat = brk.repeat || Infinity, - from = brk.from, - length = brk.to - brk.from, - test = (val >= from ? (val - from) % repeat : repeat - ((from - val) % repeat)); - - if (!brk.inclusive) { - ret = test < length && test !== 0; - } else { - ret = test <= length; - } - return ret; - }, - - isInAnyBreak: function(val, testKeep) { - - var breaks = this.options.breaks, - i = breaks && breaks.length, - inbrk, - keep, - ret; - - - if (i) { - - while (i--) { - if (this.isInBreak(breaks[i], val)) { - inbrk = true; - if (!keep) { - keep = pick(breaks[i].showPoints, this.isXAxis ? false : true); - } - } - } - - if (inbrk && testKeep) { - ret = inbrk && !keep; - } else { - ret = inbrk; - } - } - return ret; - } - }); - - wrap(Axis.prototype, 'setTickPositions', function(proceed) { - proceed.apply(this, Array.prototype.slice.call(arguments, 1)); - - if (this.options.breaks) { - var axis = this, - tickPositions = this.tickPositions, - info = this.tickPositions.info, - newPositions = [], - i; - - for (i = 0; i < tickPositions.length; i++) { - if (!axis.isInAnyBreak(tickPositions[i])) { - newPositions.push(tickPositions[i]); - } - } - - this.tickPositions = newPositions; - this.tickPositions.info = info; - } - }); - - wrap(Axis.prototype, 'init', function(proceed, chart, userOptions) { - var axis = this, - breaks; - // Force Axis to be not-ordinal when breaks are defined - if (userOptions.breaks && userOptions.breaks.length) { - userOptions.ordinal = false; - } - proceed.call(this, chart, userOptions); - breaks = this.options.breaks; - axis.isBroken = (isArray(breaks) && !!breaks.length); - if (axis.isBroken) { - axis.val2lin = function(val) { - var nval = val, - brk, - i; - - for (i = 0; i < axis.breakArray.length; i++) { - brk = axis.breakArray[i]; - if (brk.to <= val) { - nval -= brk.len; - } else if (brk.from >= val) { - break; - } else if (axis.isInBreak(brk, val)) { - nval -= (val - brk.from); - break; - } - } - - return nval; - }; - - axis.lin2val = function(val) { - var nval = val, - brk, - i; - - for (i = 0; i < axis.breakArray.length; i++) { - brk = axis.breakArray[i]; - if (brk.from >= nval) { - break; - } else if (brk.to < nval) { - nval += brk.len; - } else if (axis.isInBreak(brk, nval)) { - nval += brk.len; - } - } - return nval; - }; - - axis.setExtremes = function(newMin, newMax, redraw, animation, eventArguments) { - // If trying to set extremes inside a break, extend it to before and after the break ( #3857 ) - while (this.isInAnyBreak(newMin)) { - newMin -= this.closestPointRange; - } - while (this.isInAnyBreak(newMax)) { - newMax -= this.closestPointRange; - } - Axis.prototype.setExtremes.call(this, newMin, newMax, redraw, animation, eventArguments); - }; - - axis.setAxisTranslation = function(saveOld) { - Axis.prototype.setAxisTranslation.call(this, saveOld); - - var breaks = axis.options.breaks, - breakArrayT = [], // Temporary one - breakArray = [], - length = 0, - inBrk, - repeat, - min = axis.userMin || axis.min, - max = axis.userMax || axis.max, - pointRangePadding = pick(axis.pointRangePadding, 0), - start, - i; - - // Min & max check (#4247) - each(breaks, function(brk) { - repeat = brk.repeat || Infinity; - if (axis.isInBreak(brk, min)) { - min += (brk.to % repeat) - (min % repeat); - } - if (axis.isInBreak(brk, max)) { - max -= (max % repeat) - (brk.from % repeat); - } - }); - - // Construct an array holding all breaks in the axis - each(breaks, function(brk) { - start = brk.from; - repeat = brk.repeat || Infinity; - - while (start - repeat > min) { - start -= repeat; - } - while (start < min) { - start += repeat; - } - - for (i = start; i < max; i += repeat) { - breakArrayT.push({ - value: i, - move: 'in' - }); - breakArrayT.push({ - value: i + (brk.to - brk.from), - move: 'out', - size: brk.breakSize - }); - } - }); - - breakArrayT.sort(function(a, b) { - var ret; - if (a.value === b.value) { - ret = (a.move === 'in' ? 0 : 1) - (b.move === 'in' ? 0 : 1); - } else { - ret = a.value - b.value; - } - return ret; - }); - - // Simplify the breaks - inBrk = 0; - start = min; - - each(breakArrayT, function(brk) { - inBrk += (brk.move === 'in' ? 1 : -1); - - if (inBrk === 1 && brk.move === 'in') { - start = brk.value; - } - if (inBrk === 0) { - breakArray.push({ - from: start, - to: brk.value, - len: brk.value - start - (brk.size || 0) - }); - length += brk.value - start - (brk.size || 0); - } - }); - - axis.breakArray = breakArray; - - // Used with staticScale, and below, the actual axis length when - // breaks are substracted. - axis.unitLength = max - min - length + pointRangePadding; - - fireEvent(axis, 'afterBreaks'); - - if (axis.options.staticScale) { - axis.transA = axis.options.staticScale; - } else if (axis.unitLength) { - axis.transA *= (max - axis.min + pointRangePadding) / - axis.unitLength; - } - - if (pointRangePadding) { - axis.minPixelPadding = axis.transA * axis.minPointOffset; - } - - axis.min = min; - axis.max = max; - }; - } - }); - - wrap(Series.prototype, 'generatePoints', function(proceed) { - - proceed.apply(this, stripArguments(arguments)); - - var series = this, - xAxis = series.xAxis, - yAxis = series.yAxis, - points = series.points, - point, - i = points.length, - connectNulls = series.options.connectNulls, - nullGap; - - - if (xAxis && yAxis && (xAxis.options.breaks || yAxis.options.breaks)) { - while (i--) { - point = points[i]; - - nullGap = point.y === null && connectNulls === false; // respect nulls inside the break (#4275) - if (!nullGap && (xAxis.isInAnyBreak(point.x, true) || yAxis.isInAnyBreak(point.y, true))) { - points.splice(i, 1); - if (this.data[i]) { - this.data[i].destroyElements(); // removes the graphics for this point if they exist - } - } - } - } - - }); - - function drawPointsWrapped(proceed) { - proceed.apply(this); - this.drawBreaks(this.xAxis, ['x']); - this.drawBreaks(this.yAxis, pick(this.pointArrayMap, ['y'])); - } - - H.Series.prototype.drawBreaks = function(axis, keys) { - var series = this, - points = series.points, - breaks, - threshold, - eventName, - y; - - if (!axis) { - return; // #5950 - } - - each(keys, function(key) { - breaks = axis.breakArray || []; - threshold = axis.isXAxis ? axis.min : pick(series.options.threshold, axis.min); - each(points, function(point) { - y = pick(point['stack' + key.toUpperCase()], point[key]); - each(breaks, function(brk) { - eventName = false; - - if ((threshold < brk.from && y > brk.to) || (threshold > brk.from && y < brk.from)) { - eventName = 'pointBreak'; - } else if ((threshold < brk.from && y > brk.from && y < brk.to) || (threshold > brk.from && y > brk.to && y < brk.from)) { // point falls inside the break - eventName = 'pointInBreak'; - } - if (eventName) { - fireEvent(axis, eventName, { - point: point, - brk: brk - }); - } - }); - }); - }); - }; - - - /** - * Extend getGraphPath by identifying gaps in the data so that we can draw a gap - * in the line or area. This was moved from ordinal axis module to broken axis - * module as of #5045. - */ - H.Series.prototype.gappedPath = function() { - var gapSize = this.options.gapSize, - points = this.points.slice(), - i = points.length - 1, - yAxis = this.yAxis, - xRange, - stack; - - /** - * Defines when to display a gap in the graph, together with the `gapUnit` - * option. - * - * When the `gapUnit` is `relative` (default), a gap size of 5 means - * that if the distance between two points is greater than five times - * that of the two closest points, the graph will be broken. - * - * When the `gapUnit` is `value`, the gap is based on absolute axis values, - * which on a datetime axis is milliseconds. - * - * In practice, this option is most often used to visualize gaps in - * time series. In a stock chart, intraday data is available for daytime - * hours, while gaps will appear in nights and weekends. - * - * @type {Number} - * @see [xAxis.breaks](#xAxis.breaks) - * @sample {highstock} stock/plotoptions/series-gapsize/ - * Setting the gap size to 2 introduces gaps for weekends in daily - * datasets. - * @default 0 - * @product highstock - * @apioption plotOptions.series.gapSize - */ - - /** - * Together with `gapSize`, this option defines where to draw gaps in the - * graph. - * - * @type {String} - * @see [gapSize](plotOptions.series.gapSize) - * @default relative - * @validvalue ["relative", "value"] - * @since 5.0.13 - * @product highstock - * @apioption plotOptions.series.gapUnit - */ - - if (gapSize && i > 0) { // #5008 - - // Gap unit is relative - if (this.options.gapUnit !== 'value') { - gapSize *= this.closestPointRange; - } - - // extension for ordinal breaks - while (i--) { - if (points[i + 1].x - points[i].x > gapSize) { - xRange = (points[i].x + points[i + 1].x) / 2; - - points.splice( // insert after this one - i + 1, - 0, { - isNull: true, - x: xRange - } - ); - - // For stacked chart generate empty stack items, #6546 - if (this.options.stacking) { - stack = yAxis.stacks[this.stackKey][xRange] = new H.StackItem( - yAxis, - yAxis.options.stackLabels, - false, - xRange, - this.stack - ); - stack.total = 0; - } - } - } - } - - // Call base method - return this.getGraphPath(points); - }; - - wrap(H.seriesTypes.column.prototype, 'drawPoints', drawPointsWrapped); - wrap(H.Series.prototype, 'drawPoints', drawPointsWrapped); - - }(Highcharts)); - (function() { - - - }()); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var arrayMax = H.arrayMax, - arrayMin = H.arrayMin, - Axis = H.Axis, - defaultPlotOptions = H.defaultPlotOptions, - defined = H.defined, - each = H.each, - extend = H.extend, - format = H.format, - isNumber = H.isNumber, - merge = H.merge, - pick = H.pick, - Point = H.Point, - Series = H.Series, - Tooltip = H.Tooltip, - wrap = H.wrap; - - /* **************************************************************************** - * Start data grouping module * - ******************************************************************************/ - - /** - * Data grouping is the concept of sampling the data values into larger - * blocks in order to ease readability and increase performance of the - * JavaScript charts. Highstock by default applies data grouping when - * the points become closer than a certain pixel value, determined by - * the `groupPixelWidth` option. - * - * If data grouping is applied, the grouping information of grouped - * points can be read from the [Point.dataGroup](#Point.dataGroup). - * - * @product highstock - * @apioption plotOptions.series.dataGrouping - */ - - /** - * The method of approximation inside a group. When for example 30 days - * are grouped into one month, this determines what value should represent - * the group. Possible values are "average", "averages", "open", "high", - * "low", "close" and "sum". For OHLC and candlestick series the approximation - * is "ohlc" by default, which finds the open, high, low and close values - * within all the grouped data. For ranges, the approximation is "range", - * which finds the low and high values. For multi-dimensional data, - * like ranges and OHLC, "averages" will compute the average for each - * dimension. - * - * Custom aggregate methods can be added by assigning a callback function - * as the approximation. This function takes a numeric array as the - * argument and should return a single numeric value or `null`. Note - * that the numeric array will never contain null values, only true - * numbers. Instead, if null values are present in the raw data, the - * numeric array will have an `.hasNulls` property set to `true`. For - * single-value data sets the data is available in the first argument - * of the callback function. For OHLC data sets, all the open values - * are in the first argument, all high values in the second etc. - * - * Since v4.2.7, grouping meta data is available in the approximation - * callback from `this.dataGroupInfo`. It can be used to extract information - * from the raw data. - * - * Defaults to `average` for line-type series, `sum` for columns, `range` - * for range series and `ohlc` for OHLC and candlestick. - * - * @validvalue ["average", "averages", "open", "high", "low", "close", "sum"] - * @type {String|Function} - * @sample {highstock} stock/plotoptions/series-datagrouping-approximation Approximation callback with custom data - * @product highstock - * @apioption plotOptions.series.dataGrouping.approximation - */ - - /** - * Datetime formats for the header of the tooltip in a stock chart. - * The format can vary within a chart depending on the currently selected - * time range and the current data grouping. - * - * The default formats are: - * - *
{
-         *     millisecond: ['%A, %b %e, %H:%M:%S.%L', '%A, %b %e, %H:%M:%S.%L', '-%H:%M:%S.%L'],
-         *     second: ['%A, %b %e, %H:%M:%S', '%A, %b %e, %H:%M:%S', '-%H:%M:%S'],
-         *     minute: ['%A, %b %e, %H:%M', '%A, %b %e, %H:%M', '-%H:%M'],
-         *     hour: ['%A, %b %e, %H:%M', '%A, %b %e, %H:%M', '-%H:%M'],
-         *     day: ['%A, %b %e, %Y', '%A, %b %e', '-%A, %b %e, %Y'],
-         *     week: ['Week from %A, %b %e, %Y', '%A, %b %e', '-%A, %b %e, %Y'],
-         *     month: ['%B %Y', '%B', '-%B %Y'],
-         *     year: ['%Y', '%Y', '-%Y']
-         * }
- * - * For each of these array definitions, the first item is the format - * used when the active time span is one unit. For instance, if the - * current data applies to one week, the first item of the week array - * is used. The second and third items are used when the active time - * span is more than two units. For instance, if the current data applies - * to two weeks, the second and third item of the week array are used, - * and applied to the start and end date of the time span. - * - * @type {Object} - * @product highstock - * @apioption plotOptions.series.dataGrouping.dateTimeLabelFormats - */ - - /** - * Enable or disable data grouping. - * - * @type {Boolean} - * @default true - * @product highstock - * @apioption plotOptions.series.dataGrouping.enabled - */ - - /** - * When data grouping is forced, it runs no matter how small the intervals - * are. This can be handy for example when the sum should be calculated - * for values appearing at random times within each hour. - * - * @type {Boolean} - * @default false - * @product highstock - * @apioption plotOptions.series.dataGrouping.forced - */ - - /** - * The approximate pixel width of each group. If for example a series - * with 30 points is displayed over a 600 pixel wide plot area, no grouping - * is performed. If however the series contains so many points that - * the spacing is less than the groupPixelWidth, Highcharts will try - * to group it into appropriate groups so that each is more or less - * two pixels wide. If multiple series with different group pixel widths - * are drawn on the same x axis, all series will take the greatest width. - * For example, line series have 2px default group width, while column - * series have 10px. If combined, both the line and the column will - * have 10px by default. - * - * @type {Number} - * @default 2 - * @product highstock - * @apioption plotOptions.series.dataGrouping.groupPixelWidth - */ - - /** - * Normally, a group is indexed by the start of that group, so for example - * when 30 daily values are grouped into one month, that month's x value - * will be the 1st of the month. This apparently shifts the data to - * the left. When the smoothed option is true, this is compensated for. - * The data is shifted to the middle of the group, and min and max - * values are preserved. Internally, this is used in the Navigator series. - * - * @type {Boolean} - * @default false - * @product highstock - * @apioption plotOptions.series.dataGrouping.smoothed - */ - - /** - * An array determining what time intervals the data is allowed to be - * grouped to. Each array item is an array where the first value is - * the time unit and the second value another array of allowed multiples. - * Defaults to: - * - *
units: [[
-         *     'millisecond', // unit name
-         *     [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples
-         * ], [
-         *     'second',
-         *     [1, 2, 5, 10, 15, 30]
-         * ], [
-         *     'minute',
-         *     [1, 2, 5, 10, 15, 30]
-         * ], [
-         *     'hour',
-         *     [1, 2, 3, 4, 6, 8, 12]
-         * ], [
-         *     'day',
-         *     [1]
-         * ], [
-         *     'week',
-         *     [1]
-         * ], [
-         *     'month',
-         *     [1, 3, 6]
-         * ], [
-         *     'year',
-         *     null
-         * ]]
- * - * @type {Array} - * @product highstock - * @apioption plotOptions.series.dataGrouping.units - */ - - /** - * The approximate pixel width of each group. If for example a series - * with 30 points is displayed over a 600 pixel wide plot area, no grouping - * is performed. If however the series contains so many points that - * the spacing is less than the groupPixelWidth, Highcharts will try - * to group it into appropriate groups so that each is more or less - * two pixels wide. Defaults to `10`. - * - * @type {Number} - * @sample {highstock} stock/plotoptions/series-datagrouping-grouppixelwidth/ - * Two series with the same data density but different groupPixelWidth - * @default 10 - * @product highstock - * @apioption plotOptions.column.dataGrouping.groupPixelWidth - */ - - var seriesProto = Series.prototype, - baseProcessData = seriesProto.processData, - baseGeneratePoints = seriesProto.generatePoints, - - /** - * - */ - commonOptions = { - approximation: 'average', // average, open, high, low, close, sum - // enabled: null, // (true for stock charts, false for basic), - // forced: undefined, - groupPixelWidth: 2, - // the first one is the point or start value, the second is the start value if we're dealing with range, - // the third one is the end value if dealing with a range - dateTimeLabelFormats: { - millisecond: ['%A, %b %e, %H:%M:%S.%L', '%A, %b %e, %H:%M:%S.%L', '-%H:%M:%S.%L'], - second: ['%A, %b %e, %H:%M:%S', '%A, %b %e, %H:%M:%S', '-%H:%M:%S'], - minute: ['%A, %b %e, %H:%M', '%A, %b %e, %H:%M', '-%H:%M'], - hour: ['%A, %b %e, %H:%M', '%A, %b %e, %H:%M', '-%H:%M'], - day: ['%A, %b %e, %Y', '%A, %b %e', '-%A, %b %e, %Y'], - week: ['Week from %A, %b %e, %Y', '%A, %b %e', '-%A, %b %e, %Y'], - month: ['%B %Y', '%B', '-%B %Y'], - year: ['%Y', '%Y', '-%Y'] - } - // smoothed = false, // enable this for navigator series only - }, - - specificOptions = { // extends common options - line: {}, - spline: {}, - area: {}, - areaspline: {}, - column: { - approximation: 'sum', - groupPixelWidth: 10 - }, - arearange: { - approximation: 'range' - }, - areasplinerange: { - approximation: 'range' - }, - columnrange: { - approximation: 'range', - groupPixelWidth: 10 - }, - candlestick: { - approximation: 'ohlc', - groupPixelWidth: 10 - }, - ohlc: { - approximation: 'ohlc', - groupPixelWidth: 5 - } - }, - - // units are defined in a separate array to allow complete overriding in case of a user option - defaultDataGroupingUnits = H.defaultDataGroupingUnits = [ - [ - 'millisecond', // unit name - [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples - ], - [ - 'second', [1, 2, 5, 10, 15, 30] - ], - [ - 'minute', [1, 2, 5, 10, 15, 30] - ], - [ - 'hour', [1, 2, 3, 4, 6, 8, 12] - ], - [ - 'day', [1] - ], - [ - 'week', [1] - ], - [ - 'month', [1, 3, 6] - ], - [ - 'year', - null - ] - ], - - - /** - * Define the available approximation types. The data grouping - * approximations takes an array or numbers as the first parameter. In case - * of ohlc, four arrays are sent in as four parameters. Each array consists - * only of numbers. In case null values belong to the group, the property - * .hasNulls will be set to true on the array. - */ - approximations = H.approximations = { - sum: function(arr) { - var len = arr.length, - ret; - - // 1. it consists of nulls exclusively - if (!len && arr.hasNulls) { - ret = null; - // 2. it has a length and real values - } else if (len) { - ret = 0; - while (len--) { - ret += arr[len]; - } - } - // 3. it has zero length, so just return undefined - // => doNothing() - - return ret; - }, - average: function(arr) { - var len = arr.length, - ret = approximations.sum(arr); - - // If we have a number, return it divided by the length. If not, - // return null or undefined based on what the sum method finds. - if (isNumber(ret) && len) { - ret = ret / len; - } - - return ret; - }, - // The same as average, but for series with multiple values, like area - // ranges. - averages: function() { // #5479 - var ret = []; - - each(arguments, function(arr) { - ret.push(approximations.average(arr)); - }); - - // Return undefined when first elem. is undefined and let - // sum method handle null (#7377) - return ret[0] === undefined ? undefined : ret; - }, - open: function(arr) { - return arr.length ? arr[0] : (arr.hasNulls ? null : undefined); - }, - high: function(arr) { - return arr.length ? arrayMax(arr) : (arr.hasNulls ? null : undefined); - }, - low: function(arr) { - return arr.length ? arrayMin(arr) : (arr.hasNulls ? null : undefined); - }, - close: function(arr) { - return arr.length ? arr[arr.length - 1] : (arr.hasNulls ? null : undefined); - }, - // ohlc and range are special cases where a multidimensional array is input and an array is output - ohlc: function(open, high, low, close) { - open = approximations.open(open); - high = approximations.high(high); - low = approximations.low(low); - close = approximations.close(close); - - if (isNumber(open) || isNumber(high) || isNumber(low) || isNumber(close)) { - return [open, high, low, close]; - } - // else, return is undefined - }, - range: function(low, high) { - low = approximations.low(low); - high = approximations.high(high); - - if (isNumber(low) || isNumber(high)) { - return [low, high]; - } else if (low === null && high === null) { - return null; - } - // else, return is undefined - } - }; - - /** - * Takes parallel arrays of x and y data and groups the data into intervals - * defined by groupPositions, a collection of starting x values for each group. - */ - seriesProto.groupData = function(xData, yData, groupPositions, approximation) { - var series = this, - data = series.data, - dataOptions = series.options.data, - groupedXData = [], - groupedYData = [], - groupMap = [], - dataLength = xData.length, - pointX, - pointY, - groupedY, - // when grouping the fake extended axis for panning, - // we don't need to consider y - handleYData = !!yData, - values = [], - approximationFn = typeof approximation === 'function' ? - approximation : - approximations[approximation] || - // if the approximation is not found use default series type - // approximation (#2914) - ( - specificOptions[series.type] && - approximations[specificOptions[series.type].approximation] - ) || approximations[commonOptions.approximation], - pointArrayMap = series.pointArrayMap, - pointArrayMapLength = pointArrayMap && pointArrayMap.length, - pos = 0, - start = 0, - valuesLen, - i, j; - - // Calculate values array size from pointArrayMap length - if (pointArrayMapLength) { - each(pointArrayMap, function() { - values.push([]); - }); - } else { - values.push([]); - } - valuesLen = pointArrayMapLength || 1; - - // Start with the first point within the X axis range (#2696) - for (i = 0; i <= dataLength; i++) { - if (xData[i] >= groupPositions[0]) { - break; - } - } - - for (i; i <= dataLength; i++) { - - // when a new group is entered, summarize and initiate - // the previous group - while (( - groupPositions[pos + 1] !== undefined && - xData[i] >= groupPositions[pos + 1] - ) || i === dataLength) { // get the last group - - // get group x and y - pointX = groupPositions[pos]; - series.dataGroupInfo = { - start: start, - length: values[0].length - }; - groupedY = approximationFn.apply(series, values); - - // push the grouped data - if (groupedY !== undefined) { - groupedXData.push(pointX); - groupedYData.push(groupedY); - groupMap.push(series.dataGroupInfo); - } - - // reset the aggregate arrays - start = i; - for (j = 0; j < valuesLen; j++) { - values[j].length = 0; // faster than values[j] = [] - values[j].hasNulls = false; - } - - // Advance on the group positions - pos += 1; - - // don't loop beyond the last group - if (i === dataLength) { - break; - } - } - - // break out - if (i === dataLength) { - break; - } - - // for each raw data point, push it to an array that contains all values - // for this specific group - if (pointArrayMap) { - - var index = series.cropStart + i, - point = (data && data[index]) || - series.pointClass.prototype.applyOptions.apply({ - series: series - }, [dataOptions[index]]), - val; - - for (j = 0; j < pointArrayMapLength; j++) { - val = point[pointArrayMap[j]]; - if (isNumber(val)) { - values[j].push(val); - } else if (val === null) { - values[j].hasNulls = true; - } - } - - } else { - pointY = handleYData ? yData[i] : null; - - if (isNumber(pointY)) { - values[0].push(pointY); - } else if (pointY === null) { - values[0].hasNulls = true; - } - } - } - - return [groupedXData, groupedYData, groupMap]; - }; - - /** - * Extend the basic processData method, that crops the data to the current zoom - * range, with data grouping logic. - */ - seriesProto.processData = function() { - var series = this, - chart = series.chart, - options = series.options, - dataGroupingOptions = options.dataGrouping, - groupingEnabled = series.allowDG !== false && dataGroupingOptions && - pick(dataGroupingOptions.enabled, chart.options.isStock), - visible = series.visible || !chart.options.chart.ignoreHiddenSeries, - hasGroupedData, - skip, - lastDataGrouping = this.currentDataGrouping, - currentDataGrouping; - - // run base method - series.forceCrop = groupingEnabled; // #334 - series.groupPixelWidth = null; // #2110 - series.hasProcessed = true; // #2692 - - // skip if processData returns false or if grouping is disabled (in that order) - skip = baseProcessData.apply(series, arguments) === false || !groupingEnabled; - if (!skip) { - series.destroyGroupedData(); - - var i, - processedXData = series.processedXData, - processedYData = series.processedYData, - plotSizeX = chart.plotSizeX, - xAxis = series.xAxis, - ordinal = xAxis.options.ordinal, - groupPixelWidth = series.groupPixelWidth = xAxis.getGroupPixelWidth && xAxis.getGroupPixelWidth(); - - // Execute grouping if the amount of points is greater than the limit defined in groupPixelWidth - if (groupPixelWidth) { - hasGroupedData = true; - - series.isDirty = true; // force recreation of point instances in series.translate, #5699 - series.points = null; // #6709 - - var extremes = xAxis.getExtremes(), - xMin = extremes.min, - xMax = extremes.max, - groupIntervalFactor = (ordinal && xAxis.getGroupIntervalFactor(xMin, xMax, series)) || 1, - interval = (groupPixelWidth * (xMax - xMin) / plotSizeX) * groupIntervalFactor, - groupPositions = xAxis.getTimeTicks( - xAxis.normalizeTimeTickInterval(interval, dataGroupingOptions.units || defaultDataGroupingUnits), - Math.min(xMin, processedXData[0]), // Processed data may extend beyond axis (#4907) - Math.max(xMax, processedXData[processedXData.length - 1]), - xAxis.options.startOfWeek, - processedXData, - series.closestPointRange - ), - groupedData = seriesProto.groupData.apply(series, [processedXData, processedYData, groupPositions, dataGroupingOptions.approximation]), - groupedXData = groupedData[0], - groupedYData = groupedData[1]; - - // prevent the smoothed data to spill out left and right, and make - // sure data is not shifted to the left - if (dataGroupingOptions.smoothed && groupedXData.length) { - i = groupedXData.length - 1; - groupedXData[i] = Math.min(groupedXData[i], xMax); - while (i-- && i > 0) { - groupedXData[i] += interval / 2; - } - groupedXData[0] = Math.max(groupedXData[0], xMin); - } - - // record what data grouping values were used - currentDataGrouping = groupPositions.info; - series.closestPointRange = groupPositions.info.totalRange; - series.groupMap = groupedData[2]; - - // Make sure the X axis extends to show the first group (#2533) - // But only for visible series (#5493, #6393) - if (defined(groupedXData[0]) && groupedXData[0] < xAxis.dataMin && visible) { - if (xAxis.min === xAxis.dataMin) { - xAxis.min = groupedXData[0]; - } - xAxis.dataMin = groupedXData[0]; - } - - // set series props - series.processedXData = groupedXData; - series.processedYData = groupedYData; - } else { - series.groupMap = null; - } - series.hasGroupedData = hasGroupedData; - series.currentDataGrouping = currentDataGrouping; - - series.preventGraphAnimation = - (lastDataGrouping && lastDataGrouping.totalRange) !== - (currentDataGrouping && currentDataGrouping.totalRange); - } - }; - - /** - * Destroy the grouped data points. #622, #740 - */ - seriesProto.destroyGroupedData = function() { - - var groupedData = this.groupedData; - - // clear previous groups - each(groupedData || [], function(point, i) { - if (point) { - groupedData[i] = point.destroy ? point.destroy() : null; - } - }); - this.groupedData = null; - }; - - /** - * Override the generatePoints method by adding a reference to grouped data - */ - seriesProto.generatePoints = function() { - - baseGeneratePoints.apply(this); - - // record grouped data in order to let it be destroyed the next time processData runs - this.destroyGroupedData(); // #622 - this.groupedData = this.hasGroupedData ? this.points : null; - }; - - /** - * Override point prototype to throw a warning when trying to update grouped points - */ - wrap(Point.prototype, 'update', function(proceed) { - if (this.dataGroup) { - H.error(24); - } else { - proceed.apply(this, [].slice.call(arguments, 1)); - } - }); - - /** - * Extend the original method, make the tooltip's header reflect the grouped range - */ - wrap(Tooltip.prototype, 'tooltipFooterHeaderFormatter', function(proceed, labelConfig, isFooter) { - var tooltip = this, - series = labelConfig.series, - options = series.options, - tooltipOptions = series.tooltipOptions, - dataGroupingOptions = options.dataGrouping, - xDateFormat = tooltipOptions.xDateFormat, - xDateFormatEnd, - xAxis = series.xAxis, - dateFormat = H.dateFormat, - currentDataGrouping, - dateTimeLabelFormats, - labelFormats, - formattedKey; - - // apply only to grouped series - if (xAxis && xAxis.options.type === 'datetime' && dataGroupingOptions && isNumber(labelConfig.key)) { - - // set variables - currentDataGrouping = series.currentDataGrouping; - dateTimeLabelFormats = dataGroupingOptions.dateTimeLabelFormats; - - // if we have grouped data, use the grouping information to get the right format - if (currentDataGrouping) { - labelFormats = dateTimeLabelFormats[currentDataGrouping.unitName]; - if (currentDataGrouping.count === 1) { - xDateFormat = labelFormats[0]; - } else { - xDateFormat = labelFormats[1]; - xDateFormatEnd = labelFormats[2]; - } - // if not grouped, and we don't have set the xDateFormat option, get the best fit, - // so if the least distance between points is one minute, show it, but if the - // least distance is one day, skip hours and minutes etc. - } else if (!xDateFormat && dateTimeLabelFormats) { - xDateFormat = tooltip.getXDateFormat(labelConfig, tooltipOptions, xAxis); - } - - // now format the key - formattedKey = dateFormat(xDateFormat, labelConfig.key); - if (xDateFormatEnd) { - formattedKey += dateFormat(xDateFormatEnd, labelConfig.key + currentDataGrouping.totalRange - 1); - } - - // return the replaced format - return format(tooltipOptions[(isFooter ? 'footer' : 'header') + 'Format'], { - point: extend(labelConfig.point, { - key: formattedKey - }), - series: series - }); - - } - - // else, fall back to the regular formatter - return proceed.call(tooltip, labelConfig, isFooter); - }); - - /** - * Destroy grouped data on series destroy - */ - wrap(seriesProto, 'destroy', function(proceed) { - proceed.call(this); - this.destroyGroupedData(); - }); - - - // Handle default options for data grouping. This must be set at runtime because some series types are - // defined after this. - wrap(seriesProto, 'setOptions', function(proceed, itemOptions) { - - var options = proceed.call(this, itemOptions), - type = this.type, - plotOptions = this.chart.options.plotOptions, - defaultOptions = defaultPlotOptions[type].dataGrouping; - - if (specificOptions[type]) { // #1284 - if (!defaultOptions) { - defaultOptions = merge(commonOptions, specificOptions[type]); - } - - options.dataGrouping = merge( - defaultOptions, - plotOptions.series && plotOptions.series.dataGrouping, // #1228 - plotOptions[type].dataGrouping, // Set by the StockChart constructor - itemOptions.dataGrouping - ); - } - - if (this.chart.options.isStock) { - this.requireSorting = true; - } - - return options; - }); - - - /** - * When resetting the scale reset the hasProccessed flag to avoid taking previous data grouping - * of neighbour series into accound when determining group pixel width (#2692). - */ - wrap(Axis.prototype, 'setScale', function(proceed) { - proceed.call(this); - each(this.series, function(series) { - series.hasProcessed = false; - }); - }); - - /** - * Get the data grouping pixel width based on the greatest defined individual width - * of the axis' series, and if whether one of the axes need grouping. - */ - Axis.prototype.getGroupPixelWidth = function() { - - var series = this.series, - len = series.length, - i, - groupPixelWidth = 0, - doGrouping = false, - dataLength, - dgOptions; - - // If multiple series are compared on the same x axis, give them the same - // group pixel width (#334) - i = len; - while (i--) { - dgOptions = series[i].options.dataGrouping; - if (dgOptions) { - groupPixelWidth = Math.max(groupPixelWidth, dgOptions.groupPixelWidth); - - } - } - - // If one of the series needs grouping, apply it to all (#1634) - i = len; - while (i--) { - dgOptions = series[i].options.dataGrouping; - - if (dgOptions && series[i].hasProcessed) { // #2692 - - dataLength = (series[i].processedXData || series[i].data).length; - - // Execute grouping if the amount of points is greater than the limit defined in groupPixelWidth - if (series[i].groupPixelWidth || dataLength > (this.chart.plotSizeX / groupPixelWidth) || (dataLength && dgOptions.forced)) { - doGrouping = true; - } - } - } - - return doGrouping ? groupPixelWidth : 0; - }; - - /** - * Highstock only. Force data grouping on all the axis' series. - * - * @param {SeriesDatagroupingOptions} [dataGrouping] - * A `dataGrouping` configuration. Use `false` to disable data grouping - * dynamically. - * @param {Boolean} [redraw=true] - * Whether to redraw the chart or wait for a later call to {@link - * Chart#redraw}. - * - * @function setDataGrouping - * @memberOf Axis.prototype - */ - Axis.prototype.setDataGrouping = function(dataGrouping, redraw) { - var i; - - redraw = pick(redraw, true); - - if (!dataGrouping) { - dataGrouping = { - forced: false, - units: null - }; - } - - // Axis is instantiated, update all series - if (this instanceof Axis) { - i = this.series.length; - while (i--) { - this.series[i].update({ - dataGrouping: dataGrouping - }, false); - } - - // Axis not yet instanciated, alter series options - } else { - each(this.chart.options.series, function(seriesOptions) { - seriesOptions.dataGrouping = dataGrouping; - }, false); - } - - if (redraw) { - this.chart.redraw(); - } - }; - - - - /* **************************************************************************** - * End data grouping module * - ******************************************************************************/ - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var each = H.each, - Point = H.Point, - seriesType = H.seriesType, - seriesTypes = H.seriesTypes; - - /** - * The ohlc series type. - * - * @constructor seriesTypes.ohlc - * @augments seriesTypes.column - */ - /** - * An OHLC chart is a style of financial chart used to describe price - * movements over time. It displays open, high, low and close values per data - * point. - * - * @sample stock/demo/ohlc/ OHLC chart - * @extends {plotOptions.column} - * @excluding borderColor,borderRadius,borderWidth,crisp - * @product highstock - * @optionparent plotOptions.ohlc - */ - seriesType('ohlc', 'column', { - - /** - * The approximate pixel width of each group. If for example a series - * with 30 points is displayed over a 600 pixel wide plot area, no grouping - * is performed. If however the series contains so many points that - * the spacing is less than the groupPixelWidth, Highcharts will try - * to group it into appropriate groups so that each is more or less - * two pixels wide. Defaults to `5`. - * - * @type {Number} - * @default 5 - * @product highstock - * @apioption plotOptions.ohlc.dataGrouping.groupPixelWidth - */ - - /** - * The pixel width of the line/border. Defaults to `1`. - * - * @type {Number} - * @sample {highstock} stock/plotoptions/ohlc-linewidth/ - * A greater line width - * @default 1 - * @product highstock - */ - lineWidth: 1, - - tooltip: { - - - pointFormat: '\u25CF {series.name}
' + // eslint-disable-line max-len - 'Open: {point.open}
' + - 'High: {point.high}
' + - 'Low: {point.low}
' + - 'Close: {point.close}
' - - }, - - threshold: null, - - - states: { - - /** - * @extends plotOptions.column.states.hover - * @product highstock - */ - hover: { - - /** - * The pixel width of the line representing the OHLC point. - * - * @type {Number} - * @default 3 - * @product highstock - */ - lineWidth: 3 - } - }, - - - /** - * Line color for up points. - * - * @type {Color} - * @product highstock - * @apioption plotOptions.ohlc.upColor - */ - - - - stickyTracking: true - - }, /** @lends seriesTypes.ohlc */ { - directTouch: false, - pointArrayMap: ['open', 'high', 'low', 'close'], - toYData: function(point) { // return a plain array for speedy calculation - return [point.open, point.high, point.low, point.close]; - }, - pointValKey: 'close', - - - pointAttrToOptions: { - 'stroke': 'color', - 'stroke-width': 'lineWidth' - }, - - /** - * Postprocess mapping between options and SVG attributes - */ - pointAttribs: function(point, state) { - var attribs = seriesTypes.column.prototype.pointAttribs.call( - this, - point, - state - ), - options = this.options; - - delete attribs.fill; - - if (!point.options.color && - options.upColor && - point.open < point.close - ) { - attribs.stroke = options.upColor; - } - - return attribs; - }, - - - /** - * Translate data points from raw values x and y to plotX and plotY - */ - translate: function() { - var series = this, - yAxis = series.yAxis, - hasModifyValue = !!series.modifyValue, - translated = [ - 'plotOpen', - 'plotHigh', - 'plotLow', - 'plotClose', - 'yBottom' - ]; // translate OHLC for - - seriesTypes.column.prototype.translate.apply(series); - - // Do the translation - each(series.points, function(point) { - each( - [point.open, point.high, point.low, point.close, point.low], - function(value, i) { - if (value !== null) { - if (hasModifyValue) { - value = series.modifyValue(value); - } - point[translated[i]] = yAxis.toPixels(value, true); - } - } - ); - - // Align the tooltip to the high value to avoid covering the point - point.tooltipPos[1] = - point.plotHigh + yAxis.pos - series.chart.plotTop; - }); - }, - - /** - * Draw the data points - */ - drawPoints: function() { - var series = this, - points = series.points, - chart = series.chart; - - - each(points, function(point) { - var plotOpen, - plotClose, - crispCorr, - halfWidth, - path, - graphic = point.graphic, - crispX, - isNew = !graphic; - - if (point.plotY !== undefined) { - - // Create and/or update the graphic - if (!graphic) { - point.graphic = graphic = chart.renderer.path() - .add(series.group); - } - - - graphic.attr( - series.pointAttribs(point, point.selected && 'select') - ); // #3897 - - - // crisp vector coordinates - crispCorr = (graphic.strokeWidth() % 2) / 2; - crispX = Math.round(point.plotX) - crispCorr; // #2596 - halfWidth = Math.round(point.shapeArgs.width / 2); - - // the vertical stem - path = [ - 'M', - crispX, Math.round(point.yBottom), - 'L', - crispX, Math.round(point.plotHigh) - ]; - - // open - if (point.open !== null) { - plotOpen = Math.round(point.plotOpen) + crispCorr; - path.push( - 'M', - crispX, - plotOpen, - 'L', - crispX - halfWidth, - plotOpen - ); - } - - // close - if (point.close !== null) { - plotClose = Math.round(point.plotClose) + crispCorr; - path.push( - 'M', - crispX, - plotClose, - 'L', - crispX + halfWidth, - plotClose - ); - } - - graphic[isNew ? 'attr' : 'animate']({ - d: path - }) - .addClass(point.getClassName(), true); - - } - - - }); - - }, - - animate: null // Disable animation - - /** - * @constructor seriesTypes.ohlc.prototype.pointClass - * @extends {Point} - */ - }, /** @lends seriesTypes.ohlc.prototype.pointClass.prototype */ { - /** - * Extend the parent method by adding up or down to the class name. - */ - getClassName: function() { - return Point.prototype.getClassName.call(this) + - ( - this.open < this.close ? - ' highcharts-point-up' : - ' highcharts-point-down' - ); - } - }); - - /** - * A `ohlc` series. If the [type](#series.ohlc.type) option is not - * specified, it is inherited from [chart.type](#chart.type). - * - * For options that apply to multiple series, it is recommended to add - * them to the [plotOptions.series](#plotOptions.series) options structure. - * To apply to all series of this specific type, apply it to [plotOptions. - * ohlc](#plotOptions.ohlc). - * - * @type {Object} - * @extends series,plotOptions.ohlc - * @excluding dataParser,dataURL - * @product highstock - * @apioption series.ohlc - */ - - /** - * An array of data points for the series. For the `ohlc` series type, - * points can be given in the following ways: - * - * 1. An array of arrays with 5 or 4 values. In this case, the values - * correspond to `x,open,high,low,close`. If the first value is a string, - * it is applied as the name of the point, and the `x` value is inferred. - * The `x` value can also be omitted, in which case the inner arrays - * should be of length 4\. Then the `x` value is automatically calculated, - * either starting at 0 and incremented by 1, or from `pointStart` - * and `pointInterval` given in the series options. - * - * ```js - * data: [ - * [0, 6, 5, 6, 7], - * [1, 9, 4, 8, 2], - * [2, 6, 3, 4, 10] - * ] - * ``` - * - * 2. An array of objects with named values. The objects are point - * configuration objects as seen below. If the total number of data - * points exceeds the series' [turboThreshold](#series.ohlc.turboThreshold), - * this option is not available. - * - * ```js - * data: [{ - * x: 1, - * open: 3, - * high: 4, - * low: 5, - * close: 2, - * name: "Point2", - * color: "#00FF00" - * }, { - * x: 1, - * open: 4, - * high: 3, - * low: 6, - * close: 7, - * name: "Point1", - * color: "#FF00FF" - * }] - * ``` - * - * @type {Array} - * @extends series.arearange.data - * @excluding y,marker - * @product highstock - * @apioption series.ohlc.data - */ - - /** - * The closing value of each data point. - * - * @type {Number} - * @product highstock - * @apioption series.ohlc.data.close - */ - - /** - * The opening value of each data point. - * - * @type {Number} - * @product highstock - * @apioption series.ohlc.data.open - */ - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var defaultPlotOptions = H.defaultPlotOptions, - each = H.each, - merge = H.merge, - seriesType = H.seriesType, - seriesTypes = H.seriesTypes; - - /** - * A candlestick chart is a style of financial chart used to describe price - * movements over time. - * - * @sample stock/demo/candlestick/ Candlestick chart - * - * @extends {plotOptions.ohlc} - * @excluding borderColor,borderRadius,borderWidth - * @product highstock - * @optionparent plotOptions.candlestick - */ - var candlestickOptions = { - - states: { - - /** - * @extends plotOptions.column.states.hover - * @product highstock - */ - hover: { - - /** - * The pixel width of the line/border around the candlestick. - * - * @type {Number} - * @default 2 - * @product highstock - */ - lineWidth: 2 - } - }, - - /** - * @extends {plotOptions.ohlc.tooltip} - */ - tooltip: defaultPlotOptions.ohlc.tooltip, - - threshold: null, - - - /** - * The color of the line/border of the candlestick. - * - * In styled mode, the line stroke can be set with the `.highcharts- - * candlestick-series .highcahrts-point` rule. - * - * @type {Color} - * @see [upLineColor](#plotOptions.candlestick.upLineColor) - * @sample {highstock} stock/plotoptions/candlestick-linecolor/ - * Candlestick line colors - * @default #000000 - * @product highstock - */ - lineColor: '#000000', - - /** - * The pixel width of the candlestick line/border. Defaults to `1`. - * - * - * In styled mode, the line stroke width can be set with the `. - * highcharts-candlestick-series .highcahrts-point` rule. - * - * @type {Number} - * @default 1 - * @product highstock - */ - lineWidth: 1, - - /** - * The fill color of the candlestick when values are rising. - * - * In styled mode, the up color can be set with the `.highcharts- - * candlestick-series .highcharts-point-up` rule. - * - * @type {Color} - * @sample {highstock} stock/plotoptions/candlestick-color/ Custom colors - * @sample {highstock} highcharts/css/candlestick/ Colors in styled mode - * @default #ffffff - * @product highstock - */ - upColor: '#ffffff', - - stickyTracking: true - - /** - * The specific line color for up candle sticks. The default is to inherit - * the general `lineColor` setting. - * - * @type {Color} - * @sample {highstock} stock/plotoptions/candlestick-linecolor/ Candlestick line colors - * @default null - * @since 1.3.6 - * @product highstock - * @apioption plotOptions.candlestick.upLineColor - */ - - - /** - * @default ohlc - * @apioption plotOptions.candlestick.dataGrouping.approximation - */ - - }; - - /** - * The candlestick series type. - * - * @constructor seriesTypes.candlestick - * @augments seriesTypes.ohlc - */ - seriesType('candlestick', 'ohlc', merge( - defaultPlotOptions.column, - candlestickOptions - ), /** @lends seriesTypes.candlestick */ { - - /** - * Postprocess mapping between options and SVG attributes - */ - pointAttribs: function(point, state) { - var attribs = seriesTypes.column.prototype.pointAttribs.call(this, point, state), - options = this.options, - isUp = point.open < point.close, - stroke = options.lineColor || this.color, - stateOptions; - - attribs['stroke-width'] = options.lineWidth; - - attribs.fill = point.options.color || (isUp ? (options.upColor || this.color) : this.color); - attribs.stroke = point.lineColor || (isUp ? (options.upLineColor || stroke) : stroke); - - // Select or hover states - if (state) { - stateOptions = options.states[state]; - attribs.fill = stateOptions.color || attribs.fill; - attribs.stroke = stateOptions.lineColor || attribs.stroke; - attribs['stroke-width'] = - stateOptions.lineWidth || attribs['stroke-width']; - } - - - return attribs; - }, - - /** - * Draw the data points - */ - drawPoints: function() { - var series = this, - points = series.points, - chart = series.chart; - - - each(points, function(point) { - - var graphic = point.graphic, - plotOpen, - plotClose, - topBox, - bottomBox, - hasTopWhisker, - hasBottomWhisker, - crispCorr, - crispX, - path, - halfWidth, - isNew = !graphic; - - if (point.plotY !== undefined) { - - if (!graphic) { - point.graphic = graphic = chart.renderer.path() - .add(series.group); - } - - - graphic - .attr(series.pointAttribs(point, point.selected && 'select')) // #3897 - .shadow(series.options.shadow); - - - // Crisp vector coordinates - crispCorr = (graphic.strokeWidth() % 2) / 2; - crispX = Math.round(point.plotX) - crispCorr; // #2596 - plotOpen = point.plotOpen; - plotClose = point.plotClose; - topBox = Math.min(plotOpen, plotClose); - bottomBox = Math.max(plotOpen, plotClose); - halfWidth = Math.round(point.shapeArgs.width / 2); - hasTopWhisker = Math.round(topBox) !== Math.round(point.plotHigh); - hasBottomWhisker = bottomBox !== point.yBottom; - topBox = Math.round(topBox) + crispCorr; - bottomBox = Math.round(bottomBox) + crispCorr; - - // Create the path. Due to a bug in Chrome 49, the path is first instanciated - // with no values, then the values pushed. For unknown reasons, instanciated - // the path array with all the values would lead to a crash when updating - // frequently (#5193). - path = []; - path.push( - 'M', - crispX - halfWidth, bottomBox, - 'L', - crispX - halfWidth, topBox, - 'L', - crispX + halfWidth, topBox, - 'L', - crispX + halfWidth, bottomBox, - 'Z', // Use a close statement to ensure a nice rectangle #2602 - 'M', - crispX, topBox, - 'L', - crispX, hasTopWhisker ? Math.round(point.plotHigh) : topBox, // #460, #2094 - 'M', - crispX, bottomBox, - 'L', - crispX, hasBottomWhisker ? Math.round(point.yBottom) : bottomBox // #460, #2094 - ); - - graphic[isNew ? 'attr' : 'animate']({ - d: path - }) - .addClass(point.getClassName(), true); - - } - }); - - } - - - }); - - /** - * A `candlestick` series. If the [type](#series.candlestick.type) - * option is not specified, it is inherited from [chart.type](#chart. - * type). - * - * For options that apply to multiple series, it is recommended to add - * them to the [plotOptions.series](#plotOptions.series) options structure. - * To apply to all series of this specific type, apply it to [plotOptions. - * candlestick](#plotOptions.candlestick). - * - * @type {Object} - * @extends series,plotOptions.candlestick - * @excluding dataParser,dataURL - * @product highstock - * @apioption series.candlestick - */ - - /** - * An array of data points for the series. For the `candlestick` series - * type, points can be given in the following ways: - * - * 1. An array of arrays with 5 or 4 values. In this case, the values - * correspond to `x,open,high,low,close`. If the first value is a string, - * it is applied as the name of the point, and the `x` value is inferred. - * The `x` value can also be omitted, in which case the inner arrays - * should be of length 4\. Then the `x` value is automatically calculated, - * either starting at 0 and incremented by 1, or from `pointStart` - * and `pointInterval` given in the series options. - * - * ```js - * data: [ - * [0, 7, 2, 0, 4], - * [1, 1, 4, 2, 8], - * [2, 3, 3, 9, 3] - * ] - * ``` - * - * 2. An array of objects with named values. The objects are point - * configuration objects as seen below. If the total number of data - * points exceeds the series' [turboThreshold](#series.candlestick. - * turboThreshold), this option is not available. - * - * ```js - * data: [{ - * x: 1, - * open: 9, - * high: 2, - * low: 4, - * close: 6, - * name: "Point2", - * color: "#00FF00" - * }, { - * x: 1, - * open: 1, - * high: 4, - * low: 7, - * close: 7, - * name: "Point1", - * color: "#FF00FF" - * }] - * ``` - * - * @type {Array} - * @extends series.ohlc.data - * @excluding y - * @product highstock - * @apioption series.candlestick.data - */ - - }(Highcharts)); - var onSeriesMixin = (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - - var each = H.each, - seriesTypes = H.seriesTypes, - stableSort = H.stableSort; - - var onSeriesMixin = { - /** - * Extend the translate method by placing the point on the related series - */ - translate: function() { - - seriesTypes.column.prototype.translate.apply(this); - - var series = this, - options = series.options, - chart = series.chart, - points = series.points, - cursor = points.length - 1, - point, - lastPoint, - optionsOnSeries = options.onSeries, - onSeries = optionsOnSeries && chart.get(optionsOnSeries), - onKey = options.onKey || 'y', - step = onSeries && onSeries.options.step, - onData = onSeries && onSeries.points, - i = onData && onData.length, - xAxis = series.xAxis, - yAxis = series.yAxis, - xAxisExt = xAxis.getExtremes(), - xOffset = 0, - leftPoint, - lastX, - rightPoint, - currentDataGrouping, - distanceRatio; - - // relate to a master series - if (onSeries && onSeries.visible && i) { - xOffset = (onSeries.pointXOffset || 0) + (onSeries.barW || 0) / 2; - currentDataGrouping = onSeries.currentDataGrouping; - lastX = ( - onData[i - 1].x + - (currentDataGrouping ? currentDataGrouping.totalRange : 0) - ); // #2374 - - // sort the data points - stableSort(points, function(a, b) { - return (a.x - b.x); - }); - - onKey = 'plot' + onKey[0].toUpperCase() + onKey.substr(1); - while (i-- && points[cursor]) { - leftPoint = onData[i]; - point = points[cursor]; - point.y = leftPoint.y; - - if (leftPoint.x <= point.x && leftPoint[onKey] !== undefined) { - if (point.x <= lastX) { // #803 - - point.plotY = leftPoint[onKey]; - - // interpolate between points, #666 - if (leftPoint.x < point.x && !step) { - rightPoint = onData[i + 1]; - if (rightPoint && rightPoint[onKey] !== undefined) { - // the distance ratio, between 0 and 1 - distanceRatio = (point.x - leftPoint.x) / - (rightPoint.x - leftPoint.x); - point.plotY += - distanceRatio * - // the plotY distance - (rightPoint[onKey] - leftPoint[onKey]); - point.y += - distanceRatio * - (rightPoint.y - leftPoint.y); - } - } - } - cursor--; - i++; // check again for points in the same x position - if (cursor < 0) { - break; - } - } - } - } - - // Add plotY position and handle stacking - each(points, function(point, i) { - - var stackIndex; - - // Undefined plotY means the point is either on axis, outside series - // range or hidden series. If the series is outside the range of the - // x axis it should fall through with an undefined plotY, but then - // we must remove the shapeArgs (#847). - if (point.plotY === undefined) { - if (point.x >= xAxisExt.min && point.x <= xAxisExt.max) { - // we're inside xAxis range - point.plotY = chart.chartHeight - xAxis.bottom - - (xAxis.opposite ? xAxis.height : 0) + - xAxis.offset - yAxis.top; // #3517 - } else { - point.shapeArgs = {}; // 847 - } - } - point.plotX += xOffset; // #2049 - // if multiple flags appear at the same x, order them into a stack - lastPoint = points[i - 1]; - if (lastPoint && lastPoint.plotX === point.plotX) { - if (lastPoint.stackIndex === undefined) { - lastPoint.stackIndex = 0; - } - stackIndex = lastPoint.stackIndex + 1; - } - point.stackIndex = stackIndex; // #3639 - }); - - - } - }; - return onSeriesMixin; - }(Highcharts)); - (function(H, onSeriesMixin) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var addEvent = H.addEvent, - each = H.each, - merge = H.merge, - noop = H.noop, - Renderer = H.Renderer, - Series = H.Series, - seriesType = H.seriesType, - SVGRenderer = H.SVGRenderer, - TrackerMixin = H.TrackerMixin, - VMLRenderer = H.VMLRenderer, - symbols = SVGRenderer.prototype.symbols; - - /** - * The Flags series. - * @constructor seriesTypes.flags - * @augments seriesTypes.column - */ - /** - * Flags are used to mark events in stock charts. They can be added on the - * timeline, or attached to a specific series. - * - * @sample stock/demo/flags-general/ Flags on a line series - * @extends {plotOptions.column} - * @excluding animation,borderColor,borderRadius,borderWidth,colorByPoint,dataGrouping,pointPadding,pointWidth,turboThreshold - * @product highstock - * @optionparent plotOptions.flags - */ - seriesType('flags', 'column', { - - /** - * In case the flag is placed on a series, on what point key to place - * it. Line and columns have one key, `y`. In range or OHLC-type series, - * however, the flag can optionally be placed on the `open`, `high`, - * `low` or `close` key. - * - * @validvalue ["y", "open", "high", "low", "close"] - * @type {String} - * @sample {highstock} stock/plotoptions/flags-onkey/ Range series, flag on high - * @default y - * @since 4.2.2 - * @product highstock - * @apioption plotOptions.flags.onKey - */ - - /** - * The id of the series that the flags should be drawn on. If no id - * is given, the flags are drawn on the x axis. - * - * @type {String} - * @sample {highstock} stock/plotoptions/flags/ Flags on series and on x axis - * @default undefined - * @product highstock - * @apioption plotOptions.flags.onSeries - */ - - pointRange: 0, // #673 - - /** - * Whether the flags are allowed to overlap sideways. If `false`, the flags - * are moved sideways using an algorithm that seeks to place every flag as - * close as possible to its original position. - * - * @sample {highstock} stock/plotoptions/flags-allowoverlapx - * Allow sideways overlap - * - * @since 6.0.4 - */ - allowOverlapX: false, - - /** - * The shape of the marker. Can be one of "flag", "circlepin", "squarepin", - * or an image on the format `url(/path-to-image.jpg)`. Individual - * shapes can also be set for each point. - * - * @validvalue ["flag", "circlepin", "squarepin"] - * @type {String} - * @sample {highstock} stock/plotoptions/flags/ Different shapes - * @default flag - * @product highstock - */ - shape: 'flag', - - /** - * When multiple flags in the same series fall on the same value, this - * number determines the vertical offset between them. - * - * @type {Number} - * @sample {highstock} stock/plotoptions/flags-stackdistance/ A greater stack distance - * @default 12 - * @product highstock - */ - stackDistance: 12, - - /** - * Text alignment for the text inside the flag. - * - * @validvalue ["left", "center", "right"] - * @type {String} - * @default center - * @since 5.0.0 - * @product highstock - */ - textAlign: 'center', - - /** - * Specific tooltip options for flag series. Flag series tooltips are - * different from most other types in that a flag doesn't have a data - * value, so the tooltip rather displays the `text` option for each - * point. - * - * @type {Object} - * @extends plotOptions.series.tooltip - * @excluding changeDecimals,valueDecimals,valuePrefix,valueSuffix - * @product highstock - */ - tooltip: { - pointFormat: '{point.text}
' - }, - - threshold: null, - - /** - * The text to display on each flag. This can be defined on series level, - * or individually for each point. Defaults to `"A"`. - * - * @type {String} - * @default A - * @product highstock - * @apioption plotOptions.flags.title - */ - - /** - * The y position of the top left corner of the flag relative to either - * the series (if onSeries is defined), or the x axis. Defaults to - * `-30`. - * - * @type {Number} - * @default -30 - * @product highstock - */ - y: -30, - - /** - * Whether to use HTML to render the flag texts. Using HTML allows for - * advanced formatting, images and reliable bi-directional text rendering. - * Note that exported images won't respect the HTML, and that HTML - * won't respect Z-index settings. - * - * @type {Boolean} - * @default false - * @since 1.3 - * @product highstock - * @apioption plotOptions.flags.useHTML - */ - - - - /** - * The fill color for the flags. - */ - fillColor: '#ffffff', - - /** - * The color of the line/border of the flag. - * - * In styled mode, the stroke is set in the `.highcharts-flag-series - * .highcharts-point` rule. - * - * @type {Color} - * @default #000000 - * @product highstock - * @apioption plotOptions.flags.lineColor - */ - - /** - * The pixel width of the flag's line/border. - * - * @type {Number} - * @default 1 - * @product highstock - */ - lineWidth: 1, - - states: { - - /** - * @extends plotOptions.column.states.hover - * @product highstock - */ - hover: { - - /** - * The color of the line/border of the flag. - * - * @product highstock - */ - lineColor: '#000000', - - /** - * The fill or background color of the flag. - * - * @product highstock - */ - fillColor: '#ccd6eb' - } - }, - - /** - * The text styles of the flag. - * - * In styled mode, the styles are set in the `.highcharts-flag- - * series .highcharts-point` rule. - * - * @type {CSSObject} - * @default { "fontSize": "11px", "fontWeight": "bold" } - * @product highstock - */ - style: { - fontSize: '11px', - fontWeight: 'bold' - } - - - }, /** @lends seriesTypes.flags.prototype */ { - sorted: false, - noSharedTooltip: true, - allowDG: false, - takeOrdinalPosition: false, // #1074 - trackerGroups: ['markerGroup'], - forceCrop: true, - /** - * Inherit the initialization from base Series. - */ - init: Series.prototype.init, - - - /** - * Get presentational attributes - */ - pointAttribs: function(point, state) { - var options = this.options, - color = (point && point.color) || this.color, - lineColor = options.lineColor, - lineWidth = (point && point.lineWidth), - fill = (point && point.fillColor) || options.fillColor; - - if (state) { - fill = options.states[state].fillColor; - lineColor = options.states[state].lineColor; - lineWidth = options.states[state].lineWidth; - } - - return { - 'fill': fill || color, - 'stroke': lineColor || color, - 'stroke-width': lineWidth || options.lineWidth || 0 - }; - }, - - - translate: onSeriesMixin.translate, - - /** - * Draw the markers - */ - drawPoints: function() { - var series = this, - points = series.points, - chart = series.chart, - renderer = chart.renderer, - plotX, - plotY, - options = series.options, - optionsY = options.y, - shape, - i, - point, - graphic, - stackIndex, - anchorY, - attribs, - outsideRight, - yAxis = series.yAxis, - boxesMap = {}, - boxes = []; - - i = points.length; - while (i--) { - point = points[i]; - outsideRight = point.plotX > series.xAxis.len; - plotX = point.plotX; - stackIndex = point.stackIndex; - shape = point.options.shape || options.shape; - plotY = point.plotY; - - if (plotY !== undefined) { - plotY = point.plotY + optionsY - (stackIndex !== undefined && stackIndex * options.stackDistance); - } - point.anchorX = stackIndex ? undefined : point.plotX; // skip connectors for higher level stacked points - anchorY = stackIndex ? undefined : point.plotY; - - graphic = point.graphic; - - // Only draw the point if y is defined and the flag is within the visible area - if (plotY !== undefined && plotX >= 0 && !outsideRight) { - - // Create the flag - if (!graphic) { - graphic = point.graphic = renderer.label( - '', - null, - null, - shape, - null, - null, - options.useHTML - ) - - .attr(series.pointAttribs(point)) - .css(merge(options.style, point.style)) - - .attr({ - align: shape === 'flag' ? 'left' : 'center', - width: options.width, - height: options.height, - 'text-align': options.textAlign - }) - .addClass('highcharts-point') - .add(series.markerGroup); - - // Add reference to the point for tracker (#6303) - if (point.graphic.div) { - point.graphic.div.point = point; - } - - - graphic.shadow(options.shadow); - - graphic.isNew = true; - } - - if (plotX > 0) { // #3119 - plotX -= graphic.strokeWidth() % 2; // #4285 - } - - // Plant the flag - attribs = { - y: plotY, - anchorY: anchorY - }; - if (options.allowOverlapX) { - attribs.x = plotX; - attribs.anchorX = point.anchorX; - } - graphic.attr({ - text: point.options.title || options.title || 'A' - })[graphic.isNew ? 'attr' : 'animate'](attribs); - - // Rig for the distribute function - if (!options.allowOverlapX) { - if (!boxesMap[point.plotX]) { - boxesMap[point.plotX] = { - align: 0, - size: graphic.width, - target: plotX, - anchorX: plotX - }; - } else { - boxesMap[point.plotX].size = Math.max( - boxesMap[point.plotX].size, - graphic.width - ); - } - } - - // Set the tooltip anchor position - point.tooltipPos = chart.inverted ? [yAxis.len + yAxis.pos - chart.plotLeft - plotY, series.xAxis.len - plotX] : [plotX, plotY + yAxis.pos - chart.plotTop]; // #6327 - - } else if (graphic) { - point.graphic = graphic.destroy(); - } - - } - - // Handle X-dimension overlapping - if (!options.allowOverlapX) { - H.objectEach(boxesMap, function(box) { - box.plotX = box.anchorX; - boxes.push(box); - }); - - H.distribute(boxes, this.xAxis.len); - - each(points, function(point) { - var box = point.graphic && boxesMap[point.plotX]; - if (box) { - point.graphic[point.graphic.isNew ? 'attr' : 'animate']({ - x: box.pos, - anchorX: point.anchorX - }); - point.graphic.isNew = false; - } - }); - } - - // Might be a mix of SVG and HTML and we need events for both (#6303) - if (options.useHTML) { - H.wrap(series.markerGroup, 'on', function(proceed) { - return H.SVGElement.prototype.on.apply( - proceed.apply(this, [].slice.call(arguments, 1)), // for HTML - [].slice.call(arguments, 1)); // and for SVG - }); - } - - }, - - /** - * Extend the column trackers with listeners to expand and contract stacks - */ - drawTracker: function() { - var series = this, - points = series.points; - - TrackerMixin.drawTrackerPoint.apply(this); - - // Bring each stacked flag up on mouse over, this allows readability of vertically - // stacked elements as well as tight points on the x axis. #1924. - each(points, function(point) { - var graphic = point.graphic; - if (graphic) { - addEvent(graphic.element, 'mouseover', function() { - - // Raise this point - if (point.stackIndex > 0 && !point.raised) { - point._y = graphic.y; - graphic.attr({ - y: point._y - 8 - }); - point.raised = true; - } - - // Revert other raised points - each(points, function(otherPoint) { - if (otherPoint !== point && otherPoint.raised && otherPoint.graphic) { - otherPoint.graphic.attr({ - y: otherPoint._y - }); - otherPoint.raised = false; - } - }); - }); - } - }); - }, - - animate: noop, // Disable animation - buildKDTree: noop, - setClip: noop - - }); - - // create the flag icon with anchor - symbols.flag = function(x, y, w, h, options) { - var anchorX = (options && options.anchorX) || x, - anchorY = (options && options.anchorY) || y; - - return symbols.circle(anchorX - 1, anchorY - 1, 2, 2).concat( - [ - 'M', anchorX, anchorY, - 'L', x, y + h, - x, y, - x + w, y, - x + w, y + h, - x, y + h, - 'Z' - ] - ); - }; - - /* - * Create the circlepin and squarepin icons with anchor - */ - function createPinSymbol(shape) { - symbols[shape + 'pin'] = function(x, y, w, h, options) { - - var anchorX = options && options.anchorX, - anchorY = options && options.anchorY, - path, - labelTopOrBottomY; - - // For single-letter flags, make sure circular flags are not taller than their width - if (shape === 'circle' && h > w) { - x -= Math.round((h - w) / 2); - w = h; - } - - path = symbols[shape](x, y, w, h); - - if (anchorX && anchorY) { - // if the label is below the anchor, draw the connecting line from the top edge of the label - // otherwise start drawing from the bottom edge - labelTopOrBottomY = (y > anchorY) ? y : y + h; - path.push( - 'M', - shape === 'circle' ? path[1] - path[4] : path[1] + path[4] / 2, - labelTopOrBottomY, - 'L', - anchorX, - anchorY - ); - path = path.concat( - symbols.circle(anchorX - 1, anchorY - 1, 2, 2) - ); - } - - return path; - }; - } - createPinSymbol('circle'); - createPinSymbol('square'); - - - // The symbol callbacks are generated on the SVGRenderer object in all browsers. Even - // VML browsers need this in order to generate shapes in export. Now share - // them with the VMLRenderer. - if (Renderer === VMLRenderer) { - each(['flag', 'circlepin', 'squarepin'], function(shape) { - VMLRenderer.prototype.symbols[shape] = symbols[shape]; - }); - } - - - /** - * A `flags` series. If the [type](#series.flags.type) option is not - * specified, it is inherited from [chart.type](#chart.type). - * - * For options that apply to multiple series, it is recommended to add - * them to the [plotOptions.series](#plotOptions.series) options structure. - * To apply to all series of this specific type, apply it to [plotOptions. - * flags](#plotOptions.flags). - * - * @type {Object} - * @extends series,plotOptions.flags - * @excluding dataParser,dataURL - * @product highstock - * @apioption series.flags - */ - - /** - * An array of data points for the series. For the `flags` series type, - * points can be given in the following ways: - * - * 1. An array of objects with named values. The objects are point - * configuration objects as seen below. If the total number of data - * points exceeds the series' [turboThreshold](#series.flags.turboThreshold), - * this option is not available. - * - * ```js - * data: [{ - * x: 1, - * title: "A", - * text: "First event" - * }, { - * x: 1, - * title: "B", - * text: "Second event" - * }] - * - * @type {Array} - * @extends series.line.data - * @excluding y,dataLabels,marker,name - * @product highstock - * @apioption series.flags.data - */ - - /** - * The fill color of an individual flag. By default it inherits from - * the series color. - * - * @type {Color} - * @product highstock - * @apioption series.flags.data.fillColor - */ - - /** - * The longer text to be shown in the flag's tooltip. - * - * @type {String} - * @product highstock - * @apioption series.flags.data.text - */ - - /** - * The short text to be shown on the flag. - * - * @type {String} - * @product highstock - * @apioption series.flags.data.title - */ - - - }(Highcharts, onSeriesMixin)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var addEvent = H.addEvent, - Axis = H.Axis, - correctFloat = H.correctFloat, - defaultOptions = H.defaultOptions, - defined = H.defined, - destroyObjectProperties = H.destroyObjectProperties, - each = H.each, - fireEvent = H.fireEvent, - hasTouch = H.hasTouch, - isTouchDevice = H.isTouchDevice, - merge = H.merge, - pick = H.pick, - removeEvent = H.removeEvent, - svg = H.svg, - wrap = H.wrap, - swapXY; - - /** - * - * The scrollbar is a means of panning over the X axis of a stock chart. - * - * In styled mode, all the presentational options for the - * scrollbar are replaced by the classes `.highcharts-scrollbar-thumb`, - * `.highcharts-scrollbar-arrow`, `.highcharts-scrollbar-button`, - * `.highcharts-scrollbar-rifles` and `.highcharts-scrollbar-track`. - * - * @product highstock - * @optionparent scrollbar - */ - var defaultScrollbarOptions = { - - /** - * The height of the scrollbar. The height also applies to the width - * of the scroll arrows so that they are always squares. Defaults to - * 20 for touch devices and 14 for mouse devices. - * - * @type {Number} - * @sample {highstock} stock/scrollbar/height/ A 30px scrollbar - * @product highstock - */ - height: isTouchDevice ? 20 : 14, - - /** - * The border rounding radius of the bar. - * - * @type {Number} - * @sample {highstock} stock/scrollbar/style/ Scrollbar styling - * @default 0 - * @product highstock - */ - barBorderRadius: 0, - - /** - * The corner radius of the scrollbar buttons. - * - * @type {Number} - * @sample {highstock} stock/scrollbar/style/ Scrollbar styling - * @default 0 - * @product highstock - */ - buttonBorderRadius: 0, - - /** - * Whether to redraw the main chart as the scrollbar or the navigator - * zoomed window is moved. Defaults to `true` for modern browsers and - * `false` for legacy IE browsers as well as mobile devices. - * - * @type {Boolean} - * @since 1.3 - * @product highstock - */ - liveRedraw: svg && !isTouchDevice, - - /** - * The margin between the scrollbar and its axis when the scrollbar is - * applied directly to an axis. - */ - margin: 10, - - /** - * The minimum width of the scrollbar. - * - * @type {Number} - * @default 6 - * @since 1.2.5 - * @product highstock - */ - minWidth: 6, - - step: 0.2, - - /** - * The z index of the scrollbar group. - */ - zIndex: 3, - - - /** - * The background color of the scrollbar itself. - * - * @type {Color} - * @sample {highstock} stock/scrollbar/style/ Scrollbar styling - * @default #cccccc - * @product highstock - */ - barBackgroundColor: '#cccccc', - - /** - * The width of the bar's border. - * - * @type {Number} - * @sample {highstock} stock/scrollbar/style/ Scrollbar styling - * @default 1 - * @product highstock - */ - barBorderWidth: 1, - - /** - * The color of the scrollbar's border. - * - * @type {Color} - * @default #cccccc - * @product highstock - */ - barBorderColor: '#cccccc', - - /** - * The color of the small arrow inside the scrollbar buttons. - * - * @type {Color} - * @sample {highstock} stock/scrollbar/style/ Scrollbar styling - * @default #333333 - * @product highstock - */ - buttonArrowColor: '#333333', - - /** - * The color of scrollbar buttons. - * - * @type {Color} - * @sample {highstock} stock/scrollbar/style/ Scrollbar styling - * @default #e6e6e6 - * @product highstock - */ - buttonBackgroundColor: '#e6e6e6', - - /** - * The color of the border of the scrollbar buttons. - * - * @type {Color} - * @sample {highstock} stock/scrollbar/style/ Scrollbar styling - * @default #cccccc - * @product highstock - */ - buttonBorderColor: '#cccccc', - - /** - * The border width of the scrollbar buttons. - * - * @type {Number} - * @sample {highstock} stock/scrollbar/style/ Scrollbar styling - * @default 1 - * @product highstock - */ - buttonBorderWidth: 1, - - /** - * The color of the small rifles in the middle of the scrollbar. - * - * @type {Color} - * @default #333333 - * @product highstock - */ - rifleColor: '#333333', - - /** - * The color of the track background. - * - * @type {Color} - * @sample {highstock} stock/scrollbar/style/ Scrollbar styling - * @default #f2f2f2 - * @product highstock - */ - trackBackgroundColor: '#f2f2f2', - - /** - * The color of the border of the scrollbar track. - * - * @type {Color} - * @sample {highstock} stock/scrollbar/style/ Scrollbar styling - * @default #f2f2f2 - * @product highstock - */ - trackBorderColor: '#f2f2f2', - - /** - * The width of the border of the scrollbar track. - * - * @type {Number} - * @sample {highstock} stock/scrollbar/style/ Scrollbar styling - * @default 1 - * @product highstock - */ - trackBorderWidth: 1 - - }; - - defaultOptions.scrollbar = merge(true, defaultScrollbarOptions, defaultOptions.scrollbar); - - /** - * When we have vertical scrollbar, rifles and arrow in buttons should be rotated. - * The same method is used in Navigator's handles, to rotate them. - * @param {Array} path - path to be rotated - * @param {Boolean} vertical - if vertical scrollbar, swap x-y values - */ - H.swapXY = swapXY = function(path, vertical) { - var i, - len = path.length, - temp; - - if (vertical) { - for (i = 0; i < len; i += 3) { - temp = path[i + 1]; - path[i + 1] = path[i + 2]; - path[i + 2] = temp; - } - } - - return path; - }; - - /** - * A reusable scrollbar, internally used in Highstock's navigator and optionally - * on individual axes. - * - * @class - * @param {Object} renderer - * @param {Object} options - * @param {Object} chart - */ - function Scrollbar(renderer, options, chart) { // docs - this.init(renderer, options, chart); - } - - Scrollbar.prototype = { - - init: function(renderer, options, chart) { - - this.scrollbarButtons = []; - - this.renderer = renderer; - - this.userOptions = options; - this.options = merge(defaultScrollbarOptions, options); - - this.chart = chart; - - this.size = pick(this.options.size, this.options.height); // backward compatibility - - // Init - if (options.enabled) { - this.render(); - this.initEvents(); - this.addEvents(); - } - }, - - /** - * Render scrollbar with all required items. - */ - render: function() { - var scroller = this, - renderer = scroller.renderer, - options = scroller.options, - size = scroller.size, - group; - - // Draw the scrollbar group - scroller.group = group = renderer.g('scrollbar').attr({ - zIndex: options.zIndex, - translateY: -99999 - }).add(); - - // Draw the scrollbar track: - scroller.track = renderer.rect() - .addClass('highcharts-scrollbar-track') - .attr({ - x: 0, - r: options.trackBorderRadius || 0, - height: size, - width: size - }).add(group); - - - scroller.track.attr({ - fill: options.trackBackgroundColor, - stroke: options.trackBorderColor, - 'stroke-width': options.trackBorderWidth - }); - - this.trackBorderWidth = scroller.track.strokeWidth(); - scroller.track.attr({ - y: -this.trackBorderWidth % 2 / 2 - }); - - - // Draw the scrollbar itself - scroller.scrollbarGroup = renderer.g().add(group); - - scroller.scrollbar = renderer.rect() - .addClass('highcharts-scrollbar-thumb') - .attr({ - height: size, - width: size, - r: options.barBorderRadius || 0 - }).add(scroller.scrollbarGroup); - - scroller.scrollbarRifles = renderer.path( - swapXY([ - 'M', -3, size / 4, - 'L', -3, 2 * size / 3, - 'M', - 0, size / 4, - 'L', - 0, 2 * size / 3, - 'M', - 3, size / 4, - 'L', - 3, 2 * size / 3 - ], options.vertical)) - .addClass('highcharts-scrollbar-rifles') - .add(scroller.scrollbarGroup); - - - scroller.scrollbar.attr({ - fill: options.barBackgroundColor, - stroke: options.barBorderColor, - 'stroke-width': options.barBorderWidth - }); - scroller.scrollbarRifles.attr({ - stroke: options.rifleColor, - 'stroke-width': 1 - }); - - scroller.scrollbarStrokeWidth = scroller.scrollbar.strokeWidth(); - scroller.scrollbarGroup.translate(-scroller.scrollbarStrokeWidth % 2 / 2, -scroller.scrollbarStrokeWidth % 2 / 2); - - // Draw the buttons: - scroller.drawScrollbarButton(0); - scroller.drawScrollbarButton(1); - }, - - /** - * Position the scrollbar, method called from a parent with defined dimensions - * @param {Number} x - x-position on the chart - * @param {Number} y - y-position on the chart - * @param {Number} width - width of the scrollbar - * @param {Number} height - height of the scorllbar - */ - position: function(x, y, width, height) { - var scroller = this, - options = scroller.options, - vertical = options.vertical, - xOffset = height, - yOffset = 0, - method = scroller.rendered ? 'animate' : 'attr'; - - scroller.x = x; - scroller.y = y + this.trackBorderWidth; - scroller.width = width; // width with buttons - scroller.height = height; - scroller.xOffset = xOffset; - scroller.yOffset = yOffset; - - // If Scrollbar is a vertical type, swap options: - if (vertical) { - scroller.width = scroller.yOffset = width = yOffset = scroller.size; - scroller.xOffset = xOffset = 0; - scroller.barWidth = height - width * 2; // width without buttons - scroller.x = x = x + scroller.options.margin; - } else { - scroller.height = scroller.xOffset = height = xOffset = scroller.size; - scroller.barWidth = width - height * 2; // width without buttons - scroller.y = scroller.y + scroller.options.margin; - } - - // Set general position for a group: - scroller.group[method]({ - translateX: x, - translateY: scroller.y - }); - - // Resize background/track: - scroller.track[method]({ - width: width, - height: height - }); - - // Move right/bottom button ot it's place: - scroller.scrollbarButtons[1][method]({ - translateX: vertical ? 0 : width - xOffset, - translateY: vertical ? height - yOffset : 0 - }); - }, - - /** - * Draw the scrollbar buttons with arrows - * @param {Number} index 0 is left, 1 is right - */ - drawScrollbarButton: function(index) { - var scroller = this, - renderer = scroller.renderer, - scrollbarButtons = scroller.scrollbarButtons, - options = scroller.options, - size = scroller.size, - group, - tempElem; - - group = renderer.g().add(scroller.group); - scrollbarButtons.push(group); - - // Create a rectangle for the scrollbar button - tempElem = renderer.rect() - .addClass('highcharts-scrollbar-button') - .add(group); - - - // Presentational attributes - tempElem.attr({ - stroke: options.buttonBorderColor, - 'stroke-width': options.buttonBorderWidth, - fill: options.buttonBackgroundColor - }); - - - // Place the rectangle based on the rendered stroke width - tempElem.attr(tempElem.crisp({ - x: -0.5, - y: -0.5, - width: size + 1, // +1 to compensate for crispifying in rect method - height: size + 1, - r: options.buttonBorderRadius - }, tempElem.strokeWidth())); - - // Button arrow - tempElem = renderer - .path(swapXY([ - 'M', - size / 2 + (index ? -1 : 1), - size / 2 - 3, - 'L', - size / 2 + (index ? -1 : 1), - size / 2 + 3, - 'L', - size / 2 + (index ? 2 : -2), - size / 2 - ], options.vertical)) - .addClass('highcharts-scrollbar-arrow') - .add(scrollbarButtons[index]); - - - tempElem.attr({ - fill: options.buttonArrowColor - }); - - }, - - /** - * Set scrollbar size, with a given scale. - * @param {Number} from - scale (0-1) where bar should start - * @param {Number} to - scale (0-1) where bar should end - */ - setRange: function(from, to) { - var scroller = this, - options = scroller.options, - vertical = options.vertical, - minWidth = options.minWidth, - fullWidth = scroller.barWidth, - fromPX, - toPX, - newPos, - newSize, - newRiflesPos, - method = this.rendered && !this.hasDragged ? 'animate' : 'attr'; - - if (!defined(fullWidth)) { - return; - } - - from = Math.max(from, 0); - fromPX = Math.ceil(fullWidth * from); - toPX = fullWidth * Math.min(to, 1); - scroller.calculatedWidth = newSize = correctFloat(toPX - fromPX); - - // We need to recalculate position, if minWidth is used - if (newSize < minWidth) { - fromPX = (fullWidth - minWidth + newSize) * from; - newSize = minWidth; - } - newPos = Math.floor(fromPX + scroller.xOffset + scroller.yOffset); - newRiflesPos = newSize / 2 - 0.5; // -0.5 -> rifle line width / 2 - - // Store current position: - scroller.from = from; - scroller.to = to; - - if (!vertical) { - scroller.scrollbarGroup[method]({ - translateX: newPos - }); - scroller.scrollbar[method]({ - width: newSize - }); - scroller.scrollbarRifles[method]({ - translateX: newRiflesPos - }); - scroller.scrollbarLeft = newPos; - scroller.scrollbarTop = 0; - } else { - scroller.scrollbarGroup[method]({ - translateY: newPos - }); - scroller.scrollbar[method]({ - height: newSize - }); - scroller.scrollbarRifles[method]({ - translateY: newRiflesPos - }); - scroller.scrollbarTop = newPos; - scroller.scrollbarLeft = 0; - } - - if (newSize <= 12) { - scroller.scrollbarRifles.hide(); - } else { - scroller.scrollbarRifles.show(true); - } - - // Show or hide the scrollbar based on the showFull setting - if (options.showFull === false) { - if (from <= 0 && to >= 1) { - scroller.group.hide(); - } else { - scroller.group.show(); - } - } - - scroller.rendered = true; - }, - - /** - * Init events methods, so we have an access to the Scrollbar itself - */ - initEvents: function() { - var scroller = this; - /** - * Event handler for the mouse move event. - */ - scroller.mouseMoveHandler = function(e) { - var normalizedEvent = scroller.chart.pointer.normalize(e), - options = scroller.options, - direction = options.vertical ? 'chartY' : 'chartX', - initPositions = scroller.initPositions, - scrollPosition, - chartPosition, - change; - - // In iOS, a mousemove event with e.pageX === 0 is fired when holding the finger - // down in the center of the scrollbar. This should be ignored. - if (scroller.grabbedCenter && (!e.touches || e.touches[0][direction] !== 0)) { // #4696, scrollbar failed on Android - chartPosition = scroller.cursorToScrollbarPosition(normalizedEvent)[direction]; - scrollPosition = scroller[direction]; - - change = chartPosition - scrollPosition; - - scroller.hasDragged = true; - scroller.updatePosition(initPositions[0] + change, initPositions[1] + change); - - if (scroller.hasDragged) { - fireEvent(scroller, 'changed', { - from: scroller.from, - to: scroller.to, - trigger: 'scrollbar', - DOMType: e.type, - DOMEvent: e - }); - } - } - }; - - /** - * Event handler for the mouse up event. - */ - scroller.mouseUpHandler = function(e) { - if (scroller.hasDragged) { - fireEvent(scroller, 'changed', { - from: scroller.from, - to: scroller.to, - trigger: 'scrollbar', - DOMType: e.type, - DOMEvent: e - }); - } - scroller.grabbedCenter = scroller.hasDragged = scroller.chartX = scroller.chartY = null; - }; - - scroller.mouseDownHandler = function(e) { - var normalizedEvent = scroller.chart.pointer.normalize(e), - mousePosition = scroller.cursorToScrollbarPosition(normalizedEvent); - - scroller.chartX = mousePosition.chartX; - scroller.chartY = mousePosition.chartY; - scroller.initPositions = [scroller.from, scroller.to]; - - scroller.grabbedCenter = true; - }; - - scroller.buttonToMinClick = function(e) { - var range = correctFloat(scroller.to - scroller.from) * scroller.options.step; - scroller.updatePosition(correctFloat(scroller.from - range), correctFloat(scroller.to - range)); - fireEvent(scroller, 'changed', { - from: scroller.from, - to: scroller.to, - trigger: 'scrollbar', - DOMEvent: e - }); - }; - - scroller.buttonToMaxClick = function(e) { - var range = (scroller.to - scroller.from) * scroller.options.step; - scroller.updatePosition(scroller.from + range, scroller.to + range); - fireEvent(scroller, 'changed', { - from: scroller.from, - to: scroller.to, - trigger: 'scrollbar', - DOMEvent: e - }); - }; - - scroller.trackClick = function(e) { - var normalizedEvent = scroller.chart.pointer.normalize(e), - range = scroller.to - scroller.from, - top = scroller.y + scroller.scrollbarTop, - left = scroller.x + scroller.scrollbarLeft; - - if ((scroller.options.vertical && normalizedEvent.chartY > top) || - (!scroller.options.vertical && normalizedEvent.chartX > left)) { - // On the top or on the left side of the track: - scroller.updatePosition(scroller.from + range, scroller.to + range); - } else { - // On the bottom or the right side of the track: - scroller.updatePosition(scroller.from - range, scroller.to - range); - } - - fireEvent(scroller, 'changed', { - from: scroller.from, - to: scroller.to, - trigger: 'scrollbar', - DOMEvent: e - }); - }; - }, - - /** - * Get normalized (0-1) cursor position over the scrollbar - * @param {Event} normalizedEvent - normalized event, with chartX and chartY values - * @return {Object} Local position {chartX, chartY} - */ - cursorToScrollbarPosition: function(normalizedEvent) { - var scroller = this, - options = scroller.options, - minWidthDifference = options.minWidth > scroller.calculatedWidth ? options.minWidth : 0; // minWidth distorts translation - - return { - chartX: (normalizedEvent.chartX - scroller.x - scroller.xOffset) / (scroller.barWidth - minWidthDifference), - chartY: (normalizedEvent.chartY - scroller.y - scroller.yOffset) / (scroller.barWidth - minWidthDifference) - }; - }, - - /** - * Update position option in the Scrollbar, with normalized 0-1 scale - */ - updatePosition: function(from, to) { - if (to > 1) { - from = correctFloat(1 - correctFloat(to - from)); - to = 1; - } - - if (from < 0) { - to = correctFloat(to - from); - from = 0; - } - - this.from = from; - this.to = to; - }, - - /** - * Update the scrollbar with new options - */ - update: function(options) { - this.destroy(); - this.init(this.chart.renderer, merge(true, this.options, options), this.chart); - }, - - /** - * Set up the mouse and touch events for the Scrollbar - */ - addEvents: function() { - var buttonsOrder = this.options.inverted ? [1, 0] : [0, 1], - buttons = this.scrollbarButtons, - bar = this.scrollbarGroup.element, - track = this.track.element, - mouseDownHandler = this.mouseDownHandler, - mouseMoveHandler = this.mouseMoveHandler, - mouseUpHandler = this.mouseUpHandler, - _events; - - // Mouse events - _events = [ - [buttons[buttonsOrder[0]].element, 'click', this.buttonToMinClick], - [buttons[buttonsOrder[1]].element, 'click', this.buttonToMaxClick], - [track, 'click', this.trackClick], - [bar, 'mousedown', mouseDownHandler], - [bar.ownerDocument, 'mousemove', mouseMoveHandler], - [bar.ownerDocument, 'mouseup', mouseUpHandler] - ]; - - // Touch events - if (hasTouch) { - _events.push( - [bar, 'touchstart', mouseDownHandler], [bar.ownerDocument, 'touchmove', mouseMoveHandler], [bar.ownerDocument, 'touchend', mouseUpHandler] - ); - } - - // Add them all - each(_events, function(args) { - addEvent.apply(null, args); - }); - this._events = _events; - }, - - /** - * Removes the event handlers attached previously with addEvents. - */ - removeEvents: function() { - each(this._events, function(args) { - removeEvent.apply(null, args); - }); - this._events.length = 0; - }, - - /** - * Destroys allocated elements. - */ - destroy: function() { - - var scroller = this.chart.scroller; - - // Disconnect events added in addEvents - this.removeEvents(); - - // Destroy properties - each(['track', 'scrollbarRifles', 'scrollbar', 'scrollbarGroup', 'group'], function(prop) { - if (this[prop] && this[prop].destroy) { - this[prop] = this[prop].destroy(); - } - }, this); - - if (scroller && this === scroller.scrollbar) { // #6421, chart may have more scrollbars - scroller.scrollbar = null; - - // Destroy elements in collection - destroyObjectProperties(scroller.scrollbarButtons); - } - } - }; - - /** - * Wrap axis initialization and create scrollbar if enabled: - */ - wrap(Axis.prototype, 'init', function(proceed) { - var axis = this; - proceed.apply(axis, Array.prototype.slice.call(arguments, 1)); - - if (axis.options.scrollbar && axis.options.scrollbar.enabled) { - // Predefined options: - axis.options.scrollbar.vertical = !axis.horiz; - axis.options.startOnTick = axis.options.endOnTick = false; - - axis.scrollbar = new Scrollbar(axis.chart.renderer, axis.options.scrollbar, axis.chart); - - addEvent(axis.scrollbar, 'changed', function(e) { - var unitedMin = Math.min(pick(axis.options.min, axis.min), axis.min, axis.dataMin), - unitedMax = Math.max(pick(axis.options.max, axis.max), axis.max, axis.dataMax), - range = unitedMax - unitedMin, - to, - from; - - if ((axis.horiz && !axis.reversed) || (!axis.horiz && axis.reversed)) { - to = unitedMin + range * this.to; - from = unitedMin + range * this.from; - } else { - // y-values in browser are reversed, but this also applies for reversed horizontal axis: - to = unitedMin + range * (1 - this.from); - from = unitedMin + range * (1 - this.to); - } - - axis.setExtremes(from, to, true, false, e); - }); - } - }); - - /** - * Wrap rendering axis, and update scrollbar if one is created: - */ - wrap(Axis.prototype, 'render', function(proceed) { - var axis = this, - scrollMin = Math.min( - pick(axis.options.min, axis.min), - axis.min, - pick(axis.dataMin, axis.min) // #6930 - ), - scrollMax = Math.max( - pick(axis.options.max, axis.max), - axis.max, - pick(axis.dataMax, axis.max) // #6930 - ), - scrollbar = axis.scrollbar, - titleOffset = axis.titleOffset || 0, - offsetsIndex, - from, - to; - - proceed.apply(axis, Array.prototype.slice.call(arguments, 1)); - - if (scrollbar) { - - if (axis.horiz) { - scrollbar.position( - axis.left, - axis.top + axis.height + 2 + axis.chart.scrollbarsOffsets[1] + - (axis.opposite ? - 0 : - titleOffset + axis.axisTitleMargin + axis.offset - ), - axis.width, - axis.height - ); - offsetsIndex = 1; - } else { - scrollbar.position( - axis.left + axis.width + 2 + axis.chart.scrollbarsOffsets[0] + - (axis.opposite ? - titleOffset + axis.axisTitleMargin + axis.offset : - 0 - ), - axis.top, - axis.width, - axis.height - ); - offsetsIndex = 0; - } - - if ((!axis.opposite && !axis.horiz) || (axis.opposite && axis.horiz)) { - axis.chart.scrollbarsOffsets[offsetsIndex] += - axis.scrollbar.size + axis.scrollbar.options.margin; - } - - if (isNaN(scrollMin) || isNaN(scrollMax) || !defined(axis.min) || !defined(axis.max)) { - scrollbar.setRange(0, 0); // default action: when there is not extremes on the axis, but scrollbar exists, make it full size - } else { - from = (axis.min - scrollMin) / (scrollMax - scrollMin); - to = (axis.max - scrollMin) / (scrollMax - scrollMin); - - if ((axis.horiz && !axis.reversed) || (!axis.horiz && axis.reversed)) { - scrollbar.setRange(from, to); - } else { - scrollbar.setRange(1 - to, 1 - from); // inverse vertical axis - } - } - } - }); - - /** - * Make space for a scrollbar - */ - wrap(Axis.prototype, 'getOffset', function(proceed) { - var axis = this, - index = axis.horiz ? 2 : 1, - scrollbar = axis.scrollbar; - - proceed.apply(axis, Array.prototype.slice.call(arguments, 1)); - - if (scrollbar) { - axis.chart.scrollbarsOffsets = [0, 0]; // reset scrollbars offsets - axis.chart.axisOffset[index] += scrollbar.size + scrollbar.options.margin; - } - }); - - /** - * Destroy scrollbar when connected to the specific axis - */ - wrap(Axis.prototype, 'destroy', function(proceed) { - if (this.scrollbar) { - this.scrollbar = this.scrollbar.destroy(); - } - - proceed.apply(this, Array.prototype.slice.call(arguments, 1)); - }); - - H.Scrollbar = Scrollbar; - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - /* eslint max-len: ["warn", 80, 4] */ - - /** - * Options for the corresponding navigator series if `showInNavigator` - * is `true` for this series. Available options are the same as any - * series, documented at [plotOptions](#plotOptions.series) and - * [series](#series). - * - * - * These options are merged with options in [navigator.series](#navigator. - * series), and will take precedence if the same option is defined both - * places. - * - * @type {Object} - * @see [navigator.series](#navigator.series) - * @default undefined - * @since 5.0.0 - * @product highstock - * @apioption plotOptions.series.navigatorOptions - */ - - /** - * Whether or not to show the series in the navigator. Takes precedence - * over [navigator.baseSeries](#navigator.baseSeries) if defined. - * - * @type {Boolean} - * @default undefined - * @since 5.0.0 - * @product highstock - * @apioption plotOptions.series.showInNavigator - */ - - var addEvent = H.addEvent, - Axis = H.Axis, - Chart = H.Chart, - color = H.color, - defaultDataGroupingUnits = H.defaultDataGroupingUnits, - defaultOptions = H.defaultOptions, - defined = H.defined, - destroyObjectProperties = H.destroyObjectProperties, - each = H.each, - erase = H.erase, - error = H.error, - extend = H.extend, - grep = H.grep, - hasTouch = H.hasTouch, - isArray = H.isArray, - isNumber = H.isNumber, - isObject = H.isObject, - merge = H.merge, - pick = H.pick, - removeEvent = H.removeEvent, - Scrollbar = H.Scrollbar, - Series = H.Series, - seriesTypes = H.seriesTypes, - wrap = H.wrap, - - units = [].concat(defaultDataGroupingUnits), // copy - defaultSeriesType, - - // Finding the min or max of a set of variables where we don't know if they - // are defined, is a pattern that is repeated several places in Highcharts. - // Consider making this a global utility method. - numExt = function(extreme) { - var numbers = grep(arguments, isNumber); - if (numbers.length) { - return Math[extreme].apply(0, numbers); - } - }; - - // add more resolution to units - units[4] = ['day', [1, 2, 3, 4]]; // allow more days - units[5] = ['week', [1, 2, 3]]; // allow more weeks - - defaultSeriesType = seriesTypes.areaspline === undefined ? - 'line' : - 'areaspline'; - - extend(defaultOptions, { - - /** - * The navigator is a small series below the main series, displaying - * a view of the entire data set. It provides tools to zoom in and - * out on parts of the data as well as panning across the dataset. - * - * @product highstock - * @optionparent navigator - */ - navigator: { - /** - * The height of the navigator. - * - * @type {Number} - * @sample {highstock} stock/navigator/height/ A higher navigator - * @default 40 - * @product highstock - */ - height: 40, - - /** - * The distance from the nearest element, the X axis or X axis labels. - * - * @type {Number} - * @sample {highstock} stock/navigator/margin/ - * A margin of 2 draws the navigator closer to the X axis labels - * @default 25 - * @product highstock - */ - margin: 25, - - /** - * Whether the mask should be inside the range marking the zoomed - * range, or outside. In Highstock 1.x it was always `false`. - * - * @type {Boolean} - * @sample {highstock} stock/navigator/maskinside-false/ - * False, mask outside - * @default true - * @since 2.0 - * @product highstock - */ - maskInside: true, - - /** - * Options for the handles for dragging the zoomed area. - * - * @type {Object} - * @sample {highstock} stock/navigator/handles/ Colored handles - * @product highstock - */ - handles: { - /** - * Width for handles. - * - * @type {Number} - * @default 7 - * @product highstock - * @sample {highstock} stock/navigator/styled-handles/ - * Styled handles - * @since 6.0.0 - */ - width: 7, - - /** - * Height for handles. - * - * @type {Number} - * @default 15 - * @product highstock - * @sample {highstock} stock/navigator/styled-handles/ - * Styled handles - * @since 6.0.0 - */ - height: 15, - - /** - * Array to define shapes of handles. 0-index for left, 1-index for - * right. - * - * Additionally, the URL to a graphic can be given on this form: - * `url(graphic.png)`. Note that for the image to be applied to - * exported charts, its URL needs to be accessible by the export - * server. - * - * Custom callbacks for symbol path generation can also be added to - * `Highcharts.SVGRenderer.prototype.symbols`. The callback is then - * used by its method name, as shown in the demo. - * - * @type {Array} - * @default ['navigator-handle', 'navigator-handle'] - * @product highstock - * @sample {highstock} stock/navigator/styled-handles/ - * Styled handles - * @since 6.0.0 - */ - symbols: ['navigator-handle', 'navigator-handle'], - - /** - * Allows to enable/disable handles. - * - * @type {Boolean} - * @default true - * @product highstock - * @since 6.0.0 - */ - enabled: true, - - - /** - * The width for the handle border and the stripes inside. - * - * @type {Number} - * @default 7 - * @product highstock - * @sample {highstock} stock/navigator/styled-handles/ - * Styled handles - * @since 6.0.0 - */ - lineWidth: 1, - - /** - * The fill for the handle. - * - * @type {Color} - * @product highstock - */ - backgroundColor: '#f2f2f2', - - /** - * The stroke for the handle border and the stripes inside. - * - * @type {Color} - * @product highstock - */ - borderColor: '#999999' - - - }, - - - - /** - * The color of the mask covering the areas of the navigator series - * that are currently not visible in the main series. The default - * color is bluish with an opacity of 0.3 to see the series below. - * - * @type {Color} - * @see In styled mode, the mask is styled with the - * `.highcharts-navigator-mask` and - * `.highcharts-navigator-mask-inside` classes. - * @sample {highstock} stock/navigator/maskfill/ - * Blue, semi transparent mask - * @default rgba(102,133,194,0.3) - * @product highstock - */ - maskFill: color('#6685c2').setOpacity(0.3).get(), - - /** - * The color of the line marking the currently zoomed area in the - * navigator. - * - * @type {Color} - * @sample {highstock} stock/navigator/outline/ 2px blue outline - * @default #cccccc - * @product highstock - */ - outlineColor: '#cccccc', - - /** - * The width of the line marking the currently zoomed area in the - * navigator. - * - * @type {Number} - * @see In styled mode, the outline stroke width is set with the `. - * highcharts-navigator-outline` class. - * @sample {highstock} stock/navigator/outline/ 2px blue outline - * @default 2 - * @product highstock - */ - outlineWidth: 1, - - - /** - * Options for the navigator series. Available options are the same - * as any series, documented at [plotOptions](#plotOptions.series) - * and [series](#series). - * - * Unless data is explicitly defined on navigator.series, the data - * is borrowed from the first series in the chart. - * - * Default series options for the navigator series are: - * - *
series: {
-                 *     type: 'areaspline',
-                 *     fillOpacity: 0.05,
-                 *     dataGrouping: {
-                 *         smoothed: true
-                 *     },
-                 *     lineWidth: 1,
-                 *     marker: {
-                 *         enabled: false
-                 *     }
-                 * }
- * - * @type {Object} - * @see In styled mode, the navigator series is styled with the `. - * highcharts-navigator-series` class. - * @sample {highstock} stock/navigator/series-data/ - * Using a separate data set for the navigator - * @sample {highstock} stock/navigator/series/ - * A green navigator series - * @product highstock - */ - series: { - - /** - * The type of the navigator series. Defaults to `areaspline` if - * defined, otherwise `line`. - * - * @type {String} - */ - type: defaultSeriesType, - - - - /** - * The fill opacity of the navigator series. - */ - fillOpacity: 0.05, - - /** - * The pixel line width of the navigator series. - */ - lineWidth: 1, - - - /** - * @ignore - */ - compare: null, - - /** - * Data grouping options for the navigator series. - * - * @extends {plotOptions.series.dataGrouping} - */ - dataGrouping: { - approximation: 'average', - enabled: true, - groupPixelWidth: 2, - smoothed: true, - units: units - }, - - /** - * Data label options for the navigator series. Data labels are - * disabled by default on the navigator series. - * - * @extends {plotOptions.series.dataLabels} - */ - dataLabels: { - enabled: false, - zIndex: 2 // #1839 - }, - - id: 'highcharts-navigator-series', - className: 'highcharts-navigator-series', - - /** - * Line color for the navigator series. Allows setting the color - * while disallowing the default candlestick setting. - * - * @type {Color} - */ - lineColor: null, // #4602 - - marker: { - enabled: false - }, - - pointRange: 0, - /** - * The threshold option. Setting it to 0 will make the default - * navigator area series draw its area from the 0 value and up. - * @type {Number} - */ - threshold: null - }, - - /** - * Options for the navigator X axis. Default series options - * for the navigator xAxis are: - * - *
xAxis: {
-                 *     tickWidth: 0,
-                 *     lineWidth: 0,
-                 *     gridLineWidth: 1,
-                 *     tickPixelInterval: 200,
-                 *     labels: {
-                 *     	   align: 'left',
-                 *         style: {
-                 *             color: '#888'
-                 *         },
-                 *         x: 3,
-                 *         y: -4
-                 *     }
-                 * }
- * - * @type {Object} - * @extends {xAxis} - * @excluding linkedTo,maxZoom,minRange,opposite,range,scrollbar, - * showEmpty,maxRange - * @product highstock - */ - xAxis: { - /** - * Additional range on the right side of the xAxis. Works similar to - * xAxis.maxPadding, but value is set in milliseconds. - * Can be set for both, main xAxis and navigator's xAxis. - * - * @type {Number} - * @default 0 - * @since 6.0.0 - * @product highstock - * @apioption xAxis.overscroll - */ - overscroll: 0, - - className: 'highcharts-navigator-xaxis', - tickLength: 0, - - - lineWidth: 0, - gridLineColor: '#e6e6e6', - gridLineWidth: 1, - - - tickPixelInterval: 200, - - labels: { - align: 'left', - - - style: { - color: '#999999' - }, - - - x: 3, - y: -4 - }, - - crosshair: false - }, - - /** - * Options for the navigator Y axis. Default series options - * for the navigator yAxis are: - * - *
yAxis: {
-                 *     gridLineWidth: 0,
-                 *     startOnTick: false,
-                 *     endOnTick: false,
-                 *     minPadding: 0.1,
-                 *     maxPadding: 0.1,
-                 *     labels: {
-                 *         enabled: false
-                 *     },
-                 *     title: {
-                 *         text: null
-                 *     },
-                 *     tickWidth: 0
-                 * }
- * - * @type {Object} - * @extends {yAxis} - * @excluding height,linkedTo,maxZoom,minRange,ordinal,range,showEmpty, - * scrollbar,top,units,maxRange - * @product highstock - */ - yAxis: { - - className: 'highcharts-navigator-yaxis', - - - gridLineWidth: 0, - - - startOnTick: false, - endOnTick: false, - minPadding: 0.1, - maxPadding: 0.1, - labels: { - enabled: false - }, - crosshair: false, - title: { - text: null - }, - tickLength: 0, - tickWidth: 0 - } - } - }); - - /** - * Draw one of the handles on the side of the zoomed range in the navigator - * @param {Boolean} inverted flag for chart.inverted - * @returns {Array} Path to be used in a handle - */ - H.Renderer.prototype.symbols['navigator-handle'] = function( - x, - y, - w, - h, - options - ) { - var halfWidth = options.width / 2, - markerPosition = Math.round(halfWidth / 3) + 0.5, - height = options.height; - - return [ - 'M', -halfWidth - 1, 0.5, - 'L', - halfWidth, 0.5, - 'L', - halfWidth, height + 0.5, - 'L', -halfWidth - 1, height + 0.5, - 'L', -halfWidth - 1, 0.5, - 'M', -markerPosition, 4, - 'L', -markerPosition, height - 3, - 'M', - markerPosition - 1, 4, - 'L', - markerPosition - 1, height - 3 - ]; - }; - - /** - * The Navigator class - * @param {Object} chart - Chart object - * @class - */ - function Navigator(chart) { - this.init(chart); - } - - Navigator.prototype = { - /** - * Draw one of the handles on the side of the zoomed range in the navigator - * @param {Number} x The x center for the handle - * @param {Number} index 0 for left and 1 for right - * @param {Boolean} inverted flag for chart.inverted - * @param {String} verb use 'animate' or 'attr' - */ - drawHandle: function(x, index, inverted, verb) { - var navigator = this, - height = navigator.navigatorOptions.handles.height; - - // Place it - navigator.handles[index][verb](inverted ? { - translateX: Math.round(navigator.left + navigator.height / 2), - translateY: Math.round( - navigator.top + parseInt(x, 10) + 0.5 - height - ) - } : { - translateX: Math.round(navigator.left + parseInt(x, 10)), - translateY: Math.round( - navigator.top + navigator.height / 2 - height / 2 - 1 - ) - }); - }, - - /** - * Render outline around the zoomed range - * @param {Number} zoomedMin in pixels position where zoomed range starts - * @param {Number} zoomedMax in pixels position where zoomed range ends - * @param {Boolean} inverted flag if chart is inverted - * @param {String} verb use 'animate' or 'attr' - */ - drawOutline: function(zoomedMin, zoomedMax, inverted, verb) { - var navigator = this, - maskInside = navigator.navigatorOptions.maskInside, - outlineWidth = navigator.outline.strokeWidth(), - halfOutline = outlineWidth / 2, - outlineCorrection = (outlineWidth % 2) / 2, // #5800 - outlineHeight = navigator.outlineHeight, - scrollbarHeight = navigator.scrollbarHeight, - navigatorSize = navigator.size, - left = navigator.left - scrollbarHeight, - navigatorTop = navigator.top, - verticalMin, - path; - - if (inverted) { - left -= halfOutline; - verticalMin = navigatorTop + zoomedMax + outlineCorrection; - zoomedMax = navigatorTop + zoomedMin + outlineCorrection; - - path = [ - 'M', - left + outlineHeight, - navigatorTop - scrollbarHeight - outlineCorrection, // top edge - 'L', - left + outlineHeight, - verticalMin, // top right of zoomed range - 'L', - left, - verticalMin, // top left of z.r. - 'L', - left, - zoomedMax, // bottom left of z.r. - 'L', - left + outlineHeight, - zoomedMax, // bottom right of z.r. - 'L', - left + outlineHeight, - navigatorTop + navigatorSize + scrollbarHeight // bottom edge - ].concat(maskInside ? [ - 'M', - left + outlineHeight, - verticalMin - halfOutline, // upper left of zoomed range - 'L', - left + outlineHeight, - zoomedMax + halfOutline // upper right of z.r. - ] : []); - } else { - zoomedMin += left + scrollbarHeight - outlineCorrection; - zoomedMax += left + scrollbarHeight - outlineCorrection; - navigatorTop += halfOutline; - - path = [ - 'M', - left, - navigatorTop, // left - 'L', - zoomedMin, - navigatorTop, // upper left of zoomed range - 'L', - zoomedMin, - navigatorTop + outlineHeight, // lower left of z.r. - 'L', - zoomedMax, - navigatorTop + outlineHeight, // lower right of z.r. - 'L', - zoomedMax, - navigatorTop, // upper right of z.r. - 'L', - left + navigatorSize + scrollbarHeight * 2, - navigatorTop // right - ].concat(maskInside ? [ - 'M', - zoomedMin - halfOutline, - navigatorTop, // upper left of zoomed range - 'L', - zoomedMax + halfOutline, - navigatorTop // upper right of z.r. - ] : []); - } - navigator.outline[verb]({ - d: path - }); - }, - - /** - * Render outline around the zoomed range - * @param {Number} zoomedMin in pixels position where zoomed range starts - * @param {Number} zoomedMax in pixels position where zoomed range ends - * @param {Boolean} inverted flag if chart is inverted - * @param {String} verb use 'animate' or 'attr' - */ - drawMasks: function(zoomedMin, zoomedMax, inverted, verb) { - var navigator = this, - left = navigator.left, - top = navigator.top, - navigatorHeight = navigator.height, - height, - width, - x, - y; - - // Determine rectangle position & size - // According to (non)inverted position: - if (inverted) { - x = [left, left, left]; - y = [top, top + zoomedMin, top + zoomedMax]; - width = [navigatorHeight, navigatorHeight, navigatorHeight]; - height = [ - zoomedMin, - zoomedMax - zoomedMin, - navigator.size - zoomedMax - ]; - } else { - x = [left, left + zoomedMin, left + zoomedMax]; - y = [top, top, top]; - width = [ - zoomedMin, - zoomedMax - zoomedMin, - navigator.size - zoomedMax - ]; - height = [navigatorHeight, navigatorHeight, navigatorHeight]; - } - each(navigator.shades, function(shade, i) { - shade[verb]({ - x: x[i], - y: y[i], - width: width[i], - height: height[i] - }); - }); - }, - - /** - * Generate DOM elements for a navigator: - * - main navigator group - * - all shades - * - outline - * - handles - */ - renderElements: function() { - var navigator = this, - navigatorOptions = navigator.navigatorOptions, - maskInside = navigatorOptions.maskInside, - chart = navigator.chart, - inverted = chart.inverted, - renderer = chart.renderer, - navigatorGroup; - - // Create the main navigator group - navigator.navigatorGroup = navigatorGroup = renderer.g('navigator') - .attr({ - zIndex: 8, - visibility: 'hidden' - }) - .add(); - - - - var mouseCursor = { - cursor: inverted ? 'ns-resize' : 'ew-resize' - }; - - - // Create masks, each mask will get events and fill: - each([!maskInside, maskInside, !maskInside], function(hasMask, index) { - navigator.shades[index] = renderer.rect() - .addClass('highcharts-navigator-mask' + - (index === 1 ? '-inside' : '-outside')) - - .attr({ - fill: hasMask ? navigatorOptions.maskFill : 'rgba(0,0,0,0)' - }) - .css(index === 1 && mouseCursor) - - .add(navigatorGroup); - }); - - // Create the outline: - navigator.outline = renderer.path() - .addClass('highcharts-navigator-outline') - - .attr({ - 'stroke-width': navigatorOptions.outlineWidth, - stroke: navigatorOptions.outlineColor - }) - - .add(navigatorGroup); - - // Create the handlers: - if (navigatorOptions.handles.enabled) { - each([0, 1], function(index) { - navigatorOptions.handles.inverted = chart.inverted; - navigator.handles[index] = renderer.symbol( - navigatorOptions.handles.symbols[index], -navigatorOptions.handles.width / 2 - 1, - 0, - navigatorOptions.handles.width, - navigatorOptions.handles.height, - navigatorOptions.handles - ); - // zIndex = 6 for right handle, 7 for left. - // Can't be 10, because of the tooltip in inverted chart #2908 - navigator.handles[index].attr({ - zIndex: 7 - index - }) - .addClass( - 'highcharts-navigator-handle ' + - 'highcharts-navigator-handle-' + ['left', 'right'][index] - ).add(navigatorGroup); - - - var handlesOptions = navigatorOptions.handles; - navigator.handles[index] - .attr({ - fill: handlesOptions.backgroundColor, - stroke: handlesOptions.borderColor, - 'stroke-width': handlesOptions.lineWidth - }) - .css(mouseCursor); - - }); - } - }, - - /** - * Update navigator - * @param {Object} options Options to merge in when updating navigator - */ - update: function(options) { - // Remove references to old navigator series in base series - each(this.series || [], function(series) { - if (series.baseSeries) { - delete series.baseSeries.navigatorSeries; - } - }); - // Destroy and rebuild navigator - this.destroy(); - var chartOptions = this.chart.options; - merge(true, chartOptions.navigator, this.options, options); - this.init(this.chart); - }, - - /** - * Render the navigator - * @param {Number} min X axis value minimum - * @param {Number} max X axis value maximum - * @param {Number} pxMin Pixel value minimum - * @param {Number} pxMax Pixel value maximum - */ - render: function(min, max, pxMin, pxMax) { - - var navigator = this, - chart = navigator.chart, - navigatorWidth, - scrollbarLeft, - scrollbarTop, - scrollbarHeight = navigator.scrollbarHeight, - navigatorSize, - xAxis = navigator.xAxis, - scrollbarXAxis = xAxis.fake ? chart.xAxis[0] : xAxis, - navigatorEnabled = navigator.navigatorEnabled, - zoomedMin, - zoomedMax, - rendered = navigator.rendered, - inverted = chart.inverted, - verb, - newMin, - newMax, - currentRange, - minRange = chart.xAxis[0].minRange, - maxRange = chart.xAxis[0].options.maxRange; - - // Don't redraw while moving the handles (#4703). - if (this.hasDragged && !defined(pxMin)) { - return; - } - - // Don't render the navigator until we have data (#486, #4202, #5172). - if (!isNumber(min) || !isNumber(max)) { - // However, if navigator was already rendered, we may need to resize - // it. For example hidden series, but visible navigator (#6022). - if (rendered) { - pxMin = 0; - pxMax = pick(xAxis.width, scrollbarXAxis.width); - } else { - return; - } - } - - navigator.left = pick( - xAxis.left, - // in case of scrollbar only, without navigator - chart.plotLeft + scrollbarHeight + (inverted ? chart.plotWidth : 0) - ); - - navigator.size = zoomedMax = navigatorSize = pick( - xAxis.len, - (inverted ? chart.plotHeight : chart.plotWidth) - - 2 * scrollbarHeight - ); - - if (inverted) { - navigatorWidth = scrollbarHeight; - } else { - navigatorWidth = navigatorSize + 2 * scrollbarHeight; - } - - // Get the pixel position of the handles - pxMin = pick(pxMin, xAxis.toPixels(min, true)); - pxMax = pick(pxMax, xAxis.toPixels(max, true)); - - // Verify (#1851, #2238) - if (!isNumber(pxMin) || Math.abs(pxMin) === Infinity) { - pxMin = 0; - pxMax = navigatorWidth; - } - - // Are we below the minRange? (#2618, #6191) - newMin = xAxis.toValue(pxMin, true); - newMax = xAxis.toValue(pxMax, true); - currentRange = Math.abs(H.correctFloat(newMax - newMin)); - if (currentRange < minRange) { - if (this.grabbedLeft) { - pxMin = xAxis.toPixels(newMax - minRange, true); - } else if (this.grabbedRight) { - pxMax = xAxis.toPixels(newMin + minRange, true); - } - } else if (defined(maxRange) && currentRange > maxRange) { - /** - * Maximum range which can be set using the navigator's handles. - * Opposite of [xAxis.minRange](#xAxis.minRange). - * - * @type {Number} - * @default undefined - * @product highstock - * @sample {highstock} stock/navigator/maxrange/ - * Defined max and min range - * @since 6.0.0 - * @apioption xAxis.maxRange - */ - if (this.grabbedLeft) { - pxMin = xAxis.toPixels(newMax - maxRange, true); - } else if (this.grabbedRight) { - pxMax = xAxis.toPixels(newMin + maxRange, true); - } - } - - // Handles are allowed to cross, but never exceed the plot area - navigator.zoomedMax = Math.min(Math.max(pxMin, pxMax, 0), zoomedMax); - navigator.zoomedMin = Math.min( - Math.max( - navigator.fixedWidth ? - navigator.zoomedMax - navigator.fixedWidth : - Math.min(pxMin, pxMax), - 0 - ), - zoomedMax - ); - - navigator.range = navigator.zoomedMax - navigator.zoomedMin; - - zoomedMax = Math.round(navigator.zoomedMax); - zoomedMin = Math.round(navigator.zoomedMin); - - if (navigatorEnabled) { - navigator.navigatorGroup.attr({ - visibility: 'visible' - }); - // Place elements - verb = rendered && !navigator.hasDragged ? 'animate' : 'attr'; - - navigator.drawMasks(zoomedMin, zoomedMax, inverted, verb); - navigator.drawOutline(zoomedMin, zoomedMax, inverted, verb); - - if (navigator.navigatorOptions.handles.enabled) { - navigator.drawHandle(zoomedMin, 0, inverted, verb); - navigator.drawHandle(zoomedMax, 1, inverted, verb); - } - } - - if (navigator.scrollbar) { - if (inverted) { - scrollbarTop = navigator.top - scrollbarHeight; - scrollbarLeft = navigator.left - scrollbarHeight + - (navigatorEnabled || !scrollbarXAxis.opposite ? 0 : - // Multiple axes has offsets: - (scrollbarXAxis.titleOffset || 0) + - // Self margin from the axis.title - scrollbarXAxis.axisTitleMargin - ); - scrollbarHeight = navigatorSize + 2 * scrollbarHeight; - } else { - scrollbarTop = navigator.top + - (navigatorEnabled ? navigator.height : -scrollbarHeight); - scrollbarLeft = navigator.left - scrollbarHeight; - } - // Reposition scrollbar - navigator.scrollbar.position( - scrollbarLeft, - scrollbarTop, - navigatorWidth, - scrollbarHeight - ); - // Keep scale 0-1 - navigator.scrollbar.setRange( - // Use real value, not rounded because range can be very small - // (#1716) - navigator.zoomedMin / navigatorSize, - navigator.zoomedMax / navigatorSize - ); - } - navigator.rendered = true; - }, - - /** - * Set up the mouse and touch events for the navigator - */ - addMouseEvents: function() { - var navigator = this, - chart = navigator.chart, - container = chart.container, - eventsToUnbind = [], - mouseMoveHandler, - mouseUpHandler; - - /** - * Create mouse events' handlers. - * Make them as separate functions to enable wrapping them: - */ - navigator.mouseMoveHandler = mouseMoveHandler = function(e) { - navigator.onMouseMove(e); - }; - navigator.mouseUpHandler = mouseUpHandler = function(e) { - navigator.onMouseUp(e); - }; - - // Add shades and handles mousedown events - eventsToUnbind = navigator.getPartsEvents('mousedown'); - // Add mouse move and mouseup events. These are bind to doc/container, - // because Navigator.grabbedSomething flags are stored in mousedown - // events - eventsToUnbind.push( - addEvent(container, 'mousemove', mouseMoveHandler), - addEvent(container.ownerDocument, 'mouseup', mouseUpHandler) - ); - - // Touch events - if (hasTouch) { - eventsToUnbind.push( - addEvent(container, 'touchmove', mouseMoveHandler), - addEvent(container.ownerDocument, 'touchend', mouseUpHandler) - ); - eventsToUnbind.concat(navigator.getPartsEvents('touchstart')); - } - - navigator.eventsToUnbind = eventsToUnbind; - - // Data events - if (navigator.series && navigator.series[0]) { - eventsToUnbind.push( - addEvent( - navigator.series[0].xAxis, - 'foundExtremes', - function() { - chart.navigator.modifyNavigatorAxisExtremes(); - } - ) - ); - } - }, - - /** - * Generate events for handles and masks - * @param {String} eventName Event name handler, 'mousedown' or 'touchstart' - * @returns {Array} An array of arrays: [DOMElement, eventName, callback]. - */ - getPartsEvents: function(eventName) { - var navigator = this, - events = []; - each(['shades', 'handles'], function(name) { - each(navigator[name], function(navigatorItem, index) { - events.push( - addEvent( - navigatorItem.element, - eventName, - function(e) { - navigator[name + 'Mousedown'](e, index); - } - ) - ); - }); - }); - return events; - }, - - /** - * Mousedown on a shaded mask, either: - * - will be stored for future drag&drop - * - will directly shift to a new range - * - * @param {Object} e Mouse event - * @param {Number} index Index of a mask in Navigator.shades array - */ - shadesMousedown: function(e, index) { - e = this.chart.pointer.normalize(e); - - var navigator = this, - chart = navigator.chart, - xAxis = navigator.xAxis, - zoomedMin = navigator.zoomedMin, - navigatorPosition = navigator.left, - navigatorSize = navigator.size, - range = navigator.range, - chartX = e.chartX, - fixedMax, - ext, - left; - - // For inverted chart, swap some options: - if (chart.inverted) { - chartX = e.chartY; - navigatorPosition = navigator.top; - } - - if (index === 1) { - // Store information for drag&drop - navigator.grabbedCenter = chartX; - navigator.fixedWidth = range; - navigator.dragOffset = chartX - zoomedMin; - } else { - // Shift the range by clicking on shaded areas - left = chartX - navigatorPosition - range / 2; - if (index === 0) { - left = Math.max(0, left); - } else if (index === 2 && left + range >= navigatorSize) { - left = navigatorSize - range; - fixedMax = navigator.getUnionExtremes().dataMax; // #2293, #3543 - } - if (left !== zoomedMin) { // it has actually moved - navigator.fixedWidth = range; // #1370 - - ext = xAxis.toFixedRange(left, left + range, null, fixedMax); - if (defined(ext.min)) { // #7411 - chart.xAxis[0].setExtremes( - Math.min(ext.min, ext.max), - Math.max(ext.min, ext.max), - true, - null, // auto animation - { - trigger: 'navigator' - } - ); - } - } - } - }, - - /** - * Mousedown on a handle mask. - * Will store necessary information for drag&drop. - * - * @param {Object} e Mouse event - * @param {Number} index Index of a handle in Navigator.handles array - */ - handlesMousedown: function(e, index) { - e = this.chart.pointer.normalize(e); - - var navigator = this, - chart = navigator.chart, - baseXAxis = chart.xAxis[0], - // For reversed axes, min and max are chagned, - // so the other extreme should be stored - reverse = (chart.inverted && !baseXAxis.reversed) || - (!chart.inverted && baseXAxis.reversed); - - if (index === 0) { - // Grab the left handle - navigator.grabbedLeft = true; - navigator.otherHandlePos = navigator.zoomedMax; - navigator.fixedExtreme = reverse ? baseXAxis.min : baseXAxis.max; - } else { - // Grab the right handle - navigator.grabbedRight = true; - navigator.otherHandlePos = navigator.zoomedMin; - navigator.fixedExtreme = reverse ? baseXAxis.max : baseXAxis.min; - } - - chart.fixedRange = null; - }, - /** - * Mouse move event based on x/y mouse position. - * @param {Object} e Mouse event - */ - onMouseMove: function(e) { - var navigator = this, - chart = navigator.chart, - left = navigator.left, - navigatorSize = navigator.navigatorSize, - range = navigator.range, - dragOffset = navigator.dragOffset, - inverted = chart.inverted, - chartX; - - - // In iOS, a mousemove event with e.pageX === 0 is fired when holding - // the finger down in the center of the scrollbar. This should be - // ignored. - if (!e.touches || e.touches[0].pageX !== 0) { // #4696 - - e = chart.pointer.normalize(e); - chartX = e.chartX; - - // Swap some options for inverted chart - if (inverted) { - left = navigator.top; - chartX = e.chartY; - } - - // Drag left handle or top handle - if (navigator.grabbedLeft) { - navigator.hasDragged = true; - navigator.render( - 0, - 0, - chartX - left, - navigator.otherHandlePos - ); - // Drag right handle or bottom handle - } else if (navigator.grabbedRight) { - navigator.hasDragged = true; - navigator.render( - 0, - 0, - navigator.otherHandlePos, - chartX - left - ); - // Drag scrollbar or open area in navigator - } else if (navigator.grabbedCenter) { - navigator.hasDragged = true; - if (chartX < dragOffset) { // outside left - chartX = dragOffset; - // outside right - } else if (chartX > navigatorSize + dragOffset - range) { - chartX = navigatorSize + dragOffset - range; - } - - navigator.render( - 0, - 0, - chartX - dragOffset, - chartX - dragOffset + range - ); - } - if ( - navigator.hasDragged && - navigator.scrollbar && - navigator.scrollbar.options.liveRedraw - ) { - e.DOMType = e.type; // DOMType is for IE8 - setTimeout(function() { - navigator.onMouseUp(e); - }, 0); - } - } - }, - - /** - * Mouse up event based on x/y mouse position. - * @param {Object} e Mouse event - */ - onMouseUp: function(e) { - var navigator = this, - chart = navigator.chart, - xAxis = navigator.xAxis, - scrollbar = navigator.scrollbar, - fixedMin, - fixedMax, - ext, - DOMEvent = e.DOMEvent || e; - - if ( - // MouseUp is called for both, navigator and scrollbar (that order), - // which causes calling afterSetExtremes twice. Prevent first call - // by checking if scrollbar is going to set new extremes (#6334) - (navigator.hasDragged && (!scrollbar || !scrollbar.hasDragged)) || - e.trigger === 'scrollbar' - ) { - // When dragging one handle, make sure the other one doesn't change - if (navigator.zoomedMin === navigator.otherHandlePos) { - fixedMin = navigator.fixedExtreme; - } else if (navigator.zoomedMax === navigator.otherHandlePos) { - fixedMax = navigator.fixedExtreme; - } - // Snap to right edge (#4076) - if (navigator.zoomedMax === navigator.size) { - fixedMax = navigator.getUnionExtremes().dataMax; - } - ext = xAxis.toFixedRange( - navigator.zoomedMin, - navigator.zoomedMax, - fixedMin, - fixedMax - ); - - if (defined(ext.min)) { - chart.xAxis[0].setExtremes( - Math.min(ext.min, ext.max), - Math.max(ext.min, ext.max), - true, - // Run animation when clicking buttons, scrollbar track etc, - // but not when dragging handles or scrollbar - navigator.hasDragged ? false : null, { - trigger: 'navigator', - triggerOp: 'navigator-drag', - DOMEvent: DOMEvent // #1838 - } - ); - } - } - - if (e.DOMType !== 'mousemove') { - navigator.grabbedLeft = navigator.grabbedRight = - navigator.grabbedCenter = navigator.fixedWidth = - navigator.fixedExtreme = navigator.otherHandlePos = - navigator.hasDragged = navigator.dragOffset = null; - } - }, - - /** - * Removes the event handlers attached previously with addEvents. - */ - removeEvents: function() { - if (this.eventsToUnbind) { - each(this.eventsToUnbind, function(unbind) { - unbind(); - }); - this.eventsToUnbind = undefined; - } - this.removeBaseSeriesEvents(); - }, - - /** - * Remove data events. - */ - removeBaseSeriesEvents: function() { - var baseSeries = this.baseSeries || []; - if (this.navigatorEnabled && baseSeries[0]) { - if (this.navigatorOptions.adaptToUpdatedData !== false) { - each(baseSeries, function(series) { - removeEvent(series, 'updatedData', this.updatedDataHandler); - }, this); - } - - // We only listen for extremes-events on the first baseSeries - if (baseSeries[0].xAxis) { - removeEvent( - baseSeries[0].xAxis, - 'foundExtremes', - this.modifyBaseAxisExtremes - ); - } - } - }, - - /** - * Initiate the Navigator object - */ - init: function(chart) { - var chartOptions = chart.options, - navigatorOptions = chartOptions.navigator, - navigatorEnabled = navigatorOptions.enabled, - scrollbarOptions = chartOptions.scrollbar, - scrollbarEnabled = scrollbarOptions.enabled, - height = navigatorEnabled ? navigatorOptions.height : 0, - scrollbarHeight = scrollbarEnabled ? scrollbarOptions.height : 0; - - this.handles = []; - this.shades = []; - - this.chart = chart; - this.setBaseSeries(); - - this.height = height; - this.scrollbarHeight = scrollbarHeight; - this.scrollbarEnabled = scrollbarEnabled; - this.navigatorEnabled = navigatorEnabled; - this.navigatorOptions = navigatorOptions; - this.scrollbarOptions = scrollbarOptions; - this.outlineHeight = height + scrollbarHeight; - - this.opposite = pick( - navigatorOptions.opposite, !navigatorEnabled && chart.inverted - ); // #6262 - - var navigator = this, - baseSeries = navigator.baseSeries, - xAxisIndex = chart.xAxis.length, - yAxisIndex = chart.yAxis.length, - baseXaxis = baseSeries && baseSeries[0] && baseSeries[0].xAxis || - chart.xAxis[0]; - - // Make room for the navigator, can be placed around the chart: - chart.extraMargin = { - type: navigator.opposite ? 'plotTop' : 'marginBottom', - value: ( - navigatorEnabled || !chart.inverted ? - navigator.outlineHeight : - 0 - ) + navigatorOptions.margin - }; - if (chart.inverted) { - chart.extraMargin.type = navigator.opposite ? - 'marginRight' : - 'plotLeft'; - } - chart.isDirtyBox = true; - - if (navigator.navigatorEnabled) { - // an x axis is required for scrollbar also - navigator.xAxis = new Axis(chart, merge({ - // inherit base xAxis' break and ordinal options - breaks: baseXaxis.options.breaks, - ordinal: baseXaxis.options.ordinal - }, navigatorOptions.xAxis, { - id: 'navigator-x-axis', - yAxis: 'navigator-y-axis', - isX: true, - type: 'datetime', - index: xAxisIndex, - offset: 0, - keepOrdinalPadding: true, // #2436 - startOnTick: false, - endOnTick: false, - minPadding: 0, - maxPadding: 0, - zoomEnabled: false - }, chart.inverted ? { - offsets: [scrollbarHeight, 0, -scrollbarHeight, 0], - width: height - } : { - offsets: [0, -scrollbarHeight, 0, scrollbarHeight], - height: height - })); - - navigator.yAxis = new Axis(chart, merge(navigatorOptions.yAxis, { - id: 'navigator-y-axis', - alignTicks: false, - offset: 0, - index: yAxisIndex, - zoomEnabled: false - }, chart.inverted ? { - width: height - } : { - height: height - })); - - // If we have a base series, initialize the navigator series - if (baseSeries || navigatorOptions.series.data) { - navigator.updateNavigatorSeries(); - - // If not, set up an event to listen for added series - } else if (chart.series.length === 0) { - - wrap(chart, 'redraw', function(proceed, animation) { - // We've got one, now add it as base and reset chart.redraw - if (chart.series.length > 0 && !navigator.series) { - navigator.setBaseSeries(); - chart.redraw = proceed; // reset - } - proceed.call(chart, animation); - }); - } - - // Render items, so we can bind events to them: - navigator.renderElements(); - // Add mouse events - navigator.addMouseEvents(); - - // in case of scrollbar only, fake an x axis to get translation - } else { - navigator.xAxis = { - translate: function(value, reverse) { - var axis = chart.xAxis[0], - ext = axis.getExtremes(), - scrollTrackWidth = axis.len - 2 * scrollbarHeight, - min = numExt('min', axis.options.min, ext.dataMin), - valueRange = numExt( - 'max', - axis.options.max, - ext.dataMax - ) - min; - - return reverse ? - // from pixel to value - (value * valueRange / scrollTrackWidth) + min : - // from value to pixel - scrollTrackWidth * (value - min) / valueRange; - }, - toPixels: function(value) { - return this.translate(value); - }, - toValue: function(value) { - return this.translate(value, true); - }, - toFixedRange: Axis.prototype.toFixedRange, - fake: true - }; - } - - - // Initialize the scrollbar - if (chart.options.scrollbar.enabled) { - chart.scrollbar = navigator.scrollbar = new Scrollbar( - chart.renderer, - merge(chart.options.scrollbar, { - margin: navigator.navigatorEnabled ? 0 : 10, - vertical: chart.inverted - }), - chart - ); - addEvent(navigator.scrollbar, 'changed', function(e) { - var range = navigator.size, - to = range * this.to, - from = range * this.from; - - navigator.hasDragged = navigator.scrollbar.hasDragged; - navigator.render(0, 0, from, to); - - if ( - chart.options.scrollbar.liveRedraw || - e.DOMType !== 'mousemove' - ) { - setTimeout(function() { - navigator.onMouseUp(e); - }); - } - }); - } - - // Add data events - navigator.addBaseSeriesEvents(); - // Add redraw events - navigator.addChartEvents(); - }, - - /** - * Get the union data extremes of the chart - the outer data extremes of the - * base X axis and the navigator axis. - * @param {boolean} returnFalseOnNoBaseSeries - as the param says. - */ - getUnionExtremes: function(returnFalseOnNoBaseSeries) { - var baseAxis = this.chart.xAxis[0], - navAxis = this.xAxis, - navAxisOptions = navAxis.options, - baseAxisOptions = baseAxis.options, - ret; - - if (!returnFalseOnNoBaseSeries || baseAxis.dataMin !== null) { - ret = { - dataMin: pick( // #4053 - navAxisOptions && navAxisOptions.min, - numExt( - 'min', - baseAxisOptions.min, - baseAxis.dataMin, - navAxis.dataMin, - navAxis.min - ) - ), - dataMax: pick( - navAxisOptions && navAxisOptions.max, - numExt( - 'max', - baseAxisOptions.max, - baseAxis.dataMax, - navAxis.dataMax, - navAxis.max - ) - ) - }; - } - return ret; - }, - - /** - * Set the base series and update the navigator series from this. With a bit - * of modification we should be able to make this an API method to be called - * from the outside - * @param {Object} baseSeriesOptions - * Additional series options for a navigator - * @param {Boolean} [redraw] - * Whether to redraw after update. - */ - setBaseSeries: function(baseSeriesOptions, redraw) { - var chart = this.chart, - baseSeries = this.baseSeries = []; - - baseSeriesOptions = ( - baseSeriesOptions || - chart.options && chart.options.navigator.baseSeries || - 0 - ); - - // Iterate through series and add the ones that should be shown in - // navigator. - each(chart.series || [], function(series, i) { - if ( - // Don't include existing nav series - !series.options.isInternal && - ( - series.options.showInNavigator || - ( - i === baseSeriesOptions || - series.options.id === baseSeriesOptions - ) && - series.options.showInNavigator !== false - ) - ) { - baseSeries.push(series); - } - }); - - // When run after render, this.xAxis already exists - if (this.xAxis && !this.xAxis.fake) { - this.updateNavigatorSeries(redraw); - } - }, - - /* - * Update series in the navigator from baseSeries, adding new if does not - * exist. - */ - updateNavigatorSeries: function(redraw) { - var navigator = this, - chart = navigator.chart, - baseSeries = navigator.baseSeries, - baseOptions, - mergedNavSeriesOptions, - chartNavigatorSeriesOptions = navigator.navigatorOptions.series, - baseNavigatorOptions, - navSeriesMixin = { - enableMouseTracking: false, - index: null, // #6162 - linkedTo: null, // #6734 - group: 'nav', // for columns - padXAxis: false, - xAxis: 'navigator-x-axis', - yAxis: 'navigator-y-axis', - showInLegend: false, - stacking: false, // #4823 - isInternal: true, - visible: true - }, - // Remove navigator series that are no longer in the baseSeries - navigatorSeries = navigator.series = H.grep( - navigator.series || [], - function(navSeries) { - var base = navSeries.baseSeries; - if (H.inArray(base, baseSeries) < 0) { // Not in array - // If there is still a base series connected to this - // series, remove event handler and reference. - if (base) { - removeEvent( - base, - 'updatedData', - navigator.updatedDataHandler - ); - delete base.navigatorSeries; - } - // Kill the nav series - navSeries.destroy(); - return false; - } - return true; - } - ); - - // Go through each base series and merge the options to create new - // series - if (baseSeries && baseSeries.length) { - each(baseSeries, function eachBaseSeries(base) { - var linkedNavSeries = base.navigatorSeries, - userNavOptions = extend( - // Grab color from base as default - { - color: base.color - }, !isArray(chartNavigatorSeriesOptions) ? - chartNavigatorSeriesOptions : - defaultOptions.navigator.series - ); - - // Don't update if the series exists in nav and we have disabled - // adaptToUpdatedData. - if ( - linkedNavSeries && - navigator.navigatorOptions.adaptToUpdatedData === false - ) { - return; - } - - navSeriesMixin.name = 'Navigator ' + baseSeries.length; - - baseOptions = base.options || {}; - baseNavigatorOptions = baseOptions.navigatorOptions || {}; - mergedNavSeriesOptions = merge( - baseOptions, - navSeriesMixin, - userNavOptions, - baseNavigatorOptions - ); - - // Merge data separately. Do a slice to avoid mutating the - // navigator options from base series (#4923). - var navigatorSeriesData = - baseNavigatorOptions.data || userNavOptions.data; - navigator.hasNavigatorData = - navigator.hasNavigatorData || !!navigatorSeriesData; - mergedNavSeriesOptions.data = - navigatorSeriesData || - baseOptions.data && baseOptions.data.slice(0); - - // Update or add the series - if (linkedNavSeries && linkedNavSeries.options) { - linkedNavSeries.update(mergedNavSeriesOptions, redraw); - } else { - base.navigatorSeries = chart.initSeries( - mergedNavSeriesOptions - ); - base.navigatorSeries.baseSeries = base; // Store ref - navigatorSeries.push(base.navigatorSeries); - } - }); - } - - // If user has defined data (and no base series) or explicitly defined - // navigator.series as an array, we create these series on top of any - // base series. - if ( - chartNavigatorSeriesOptions.data && - !(baseSeries && baseSeries.length) || - isArray(chartNavigatorSeriesOptions) - ) { - navigator.hasNavigatorData = false; - // Allow navigator.series to be an array - chartNavigatorSeriesOptions = H.splat(chartNavigatorSeriesOptions); - each(chartNavigatorSeriesOptions, function(userSeriesOptions, i) { - navSeriesMixin.name = - 'Navigator ' + (navigatorSeries.length + 1); - mergedNavSeriesOptions = merge( - defaultOptions.navigator.series, { - // Since we don't have a base series to pull color from, - // try to fake it by using color from series with same - // index. Otherwise pull from the colors array. We need - // an explicit color as otherwise updates will increment - // color counter and we'll get a new color for each - // update of the nav series. - color: chart.series[i] && - !chart.series[i].options.isInternal && - chart.series[i].color || - chart.options.colors[i] || - chart.options.colors[0] - }, - navSeriesMixin, - userSeriesOptions - ); - mergedNavSeriesOptions.data = userSeriesOptions.data; - if (mergedNavSeriesOptions.data) { - navigator.hasNavigatorData = true; - navigatorSeries.push( - chart.initSeries(mergedNavSeriesOptions) - ); - } - }); - } - - this.addBaseSeriesEvents(); - }, - - /** - * Add data events. - * For example when main series is updated we need to recalculate extremes - */ - addBaseSeriesEvents: function() { - var navigator = this, - baseSeries = navigator.baseSeries || []; - - // Bind modified extremes event to first base's xAxis only. - // In event of > 1 base-xAxes, the navigator will ignore those. - // Adding this multiple times to the same axis is no problem, as - // duplicates should be discarded by the browser. - if (baseSeries[0] && baseSeries[0].xAxis) { - addEvent( - baseSeries[0].xAxis, - 'foundExtremes', - this.modifyBaseAxisExtremes - ); - } - - each(baseSeries, function(base) { - // Link base series show/hide to navigator series visibility - addEvent(base, 'show', function() { - if (this.navigatorSeries) { - this.navigatorSeries.setVisible(true, false); - } - }); - addEvent(base, 'hide', function() { - if (this.navigatorSeries) { - this.navigatorSeries.setVisible(false, false); - } - }); - - // Respond to updated data in the base series, unless explicitily - // not adapting to data changes. - if (this.navigatorOptions.adaptToUpdatedData !== false) { - if (base.xAxis) { - addEvent(base, 'updatedData', this.updatedDataHandler); - } - } - - // Handle series removal - addEvent(base, 'remove', function() { - if (this.navigatorSeries) { - erase(navigator.series, this.navigatorSeries); - this.navigatorSeries.remove(false); - delete this.navigatorSeries; - } - }); - }, this); - }, - - /** - * Set the navigator x axis extremes to reflect the total. The navigator - * extremes should always be the extremes of the union of all series in the - * chart as well as the navigator series. - */ - modifyNavigatorAxisExtremes: function() { - var xAxis = this.xAxis, - unionExtremes; - - if (xAxis.getExtremes) { - unionExtremes = this.getUnionExtremes(true); - if ( - unionExtremes && - ( - unionExtremes.dataMin !== xAxis.min || - unionExtremes.dataMax !== xAxis.max - ) - ) { - xAxis.min = unionExtremes.dataMin; - xAxis.max = unionExtremes.dataMax; - } - } - }, - - /** - * Hook to modify the base axis extremes with information from the Navigator - */ - modifyBaseAxisExtremes: function() { - var baseXAxis = this, - navigator = baseXAxis.chart.navigator, - baseExtremes = baseXAxis.getExtremes(), - baseMin = baseExtremes.min, - baseMax = baseExtremes.max, - baseDataMin = baseExtremes.dataMin, - baseDataMax = baseExtremes.dataMax, - range = baseMax - baseMin, - stickToMin = navigator.stickToMin, - stickToMax = navigator.stickToMax, - overscroll = baseXAxis.options.overscroll, - newMax, - newMin, - navigatorSeries = navigator.series && navigator.series[0], - hasSetExtremes = !!baseXAxis.setExtremes, - - // When the extremes have been set by range selector button, don't - // stick to min or max. The range selector buttons will handle the - // extremes. (#5489) - unmutable = baseXAxis.eventArgs && - baseXAxis.eventArgs.trigger === 'rangeSelectorButton'; - - if (!unmutable) { - - // If the zoomed range is already at the min, move it to the right - // as new data comes in - if (stickToMin) { - newMin = baseDataMin; - newMax = newMin + range; - } - - // If the zoomed range is already at the max, move it to the right - // as new data comes in - if (stickToMax) { - newMax = baseDataMax + overscroll; - - // if stickToMin is true, the new min value is set above - if (!stickToMin) { - newMin = Math.max( - newMax - range, - navigatorSeries && navigatorSeries.xData ? - navigatorSeries.xData[0] : -Number.MAX_VALUE - ); - } - } - - // Update the extremes - if (hasSetExtremes && (stickToMin || stickToMax)) { - if (isNumber(newMin)) { - baseXAxis.min = baseXAxis.userMin = newMin; - baseXAxis.max = baseXAxis.userMax = newMax; - } - } - } - - // Reset - navigator.stickToMin = navigator.stickToMax = null; - }, - - /** - * Handler for updated data on the base series. When data is modified, the - * navigator series must reflect it. This is called from the Chart.redraw - * function before axis and series extremes are computed. - */ - updatedDataHandler: function() { - var navigator = this.chart.navigator, - baseSeries = this, - navigatorSeries = this.navigatorSeries; - - // If the scrollbar is scrolled all the way to the right, keep right as - // new data comes in. - navigator.stickToMax = - Math.round(navigator.zoomedMax) >= Math.round(navigator.size); - - // Detect whether the zoomed area should stick to the minimum or - // maximum. If the current axis minimum falls outside the new updated - // dataset, we must adjust. - navigator.stickToMin = isNumber(baseSeries.xAxis.min) && - (baseSeries.xAxis.min <= baseSeries.xData[0]) && - (!this.chart.fixedRange || !navigator.stickToMax); - - // Set the navigator series data to the new data of the base series - if (navigatorSeries && !navigator.hasNavigatorData) { - navigatorSeries.options.pointStart = baseSeries.xData[0]; - navigatorSeries.setData( - baseSeries.options.data, - false, - null, - false - ); // #5414 - } - }, - - /** - * Add chart events, like redrawing navigator, when chart requires that. - */ - addChartEvents: function() { - addEvent(this.chart, 'redraw', function() { - // Move the scrollbar after redraw, like after data updata even if - // axes don't redraw - var navigator = this.navigator, - xAxis = navigator && ( - navigator.baseSeries && - navigator.baseSeries[0] && - navigator.baseSeries[0].xAxis || - navigator.scrollbar && this.xAxis[0] - ); // #5709 - - if (xAxis) { - navigator.render(xAxis.min, xAxis.max); - } - }); - }, - - /** - * Destroys allocated elements. - */ - destroy: function() { - - // Disconnect events added in addEvents - this.removeEvents(); - - if (this.xAxis) { - erase(this.chart.xAxis, this.xAxis); - erase(this.chart.axes, this.xAxis); - } - if (this.yAxis) { - erase(this.chart.yAxis, this.yAxis); - erase(this.chart.axes, this.yAxis); - } - // Destroy series - each(this.series || [], function(s) { - if (s.destroy) { - s.destroy(); - } - }); - - // Destroy properties - each([ - 'series', 'xAxis', 'yAxis', 'shades', 'outline', 'scrollbarTrack', - 'scrollbarRifles', 'scrollbarGroup', 'scrollbar', 'navigatorGroup', - 'rendered' - ], function(prop) { - if (this[prop] && this[prop].destroy) { - this[prop].destroy(); - } - this[prop] = null; - }, this); - - // Destroy elements in collection - each([this.handles], function(coll) { - destroyObjectProperties(coll); - }, this); - } - }; - - H.Navigator = Navigator; - - /** - * For Stock charts, override selection zooming with some special features - * because X axis zooming is already allowed by the Navigator and Range - * selector. - */ - wrap(Axis.prototype, 'zoom', function(proceed, newMin, newMax) { - var chart = this.chart, - chartOptions = chart.options, - zoomType = chartOptions.chart.zoomType, - previousZoom, - navigator = chartOptions.navigator, - rangeSelector = chartOptions.rangeSelector, - ret; - - if (this.isXAxis && ((navigator && navigator.enabled) || - (rangeSelector && rangeSelector.enabled))) { - - // For x only zooming, fool the chart.zoom method not to create the zoom - // button because the property already exists - if (zoomType === 'x') { - chart.resetZoomButton = 'blocked'; - - // For y only zooming, ignore the X axis completely - } else if (zoomType === 'y') { - ret = false; - - // For xy zooming, record the state of the zoom before zoom selection, - // then when the reset button is pressed, revert to this state. This - // should apply only if the chart is initialized with a range (#6612), - // otherwise zoom all the way out. - } else if (zoomType === 'xy' && this.options.range) { - - previousZoom = this.previousZoom; - if (defined(newMin)) { - this.previousZoom = [this.min, this.max]; - } else if (previousZoom) { - newMin = previousZoom[0]; - newMax = previousZoom[1]; - delete this.previousZoom; - } - } - - } - return ret !== undefined ? ret : proceed.call(this, newMin, newMax); - }); - - // Initialize navigator for stock charts - wrap(Chart.prototype, 'init', function(proceed, options, callback) { - - addEvent(this, 'beforeRender', function() { - var options = this.options; - if (options.navigator.enabled || options.scrollbar.enabled) { - this.scroller = this.navigator = new Navigator(this); - } - }); - - proceed.call(this, options, callback); - - }); - - /** - * For stock charts, extend the Chart.setChartSize method so that we can set the - * final top position of the navigator once the height of the chart, including - * the legend, is determined. #367. We can't use Chart.getMargins, because - * labels offsets are not calculated yet. - */ - wrap(Chart.prototype, 'setChartSize', function(proceed) { - - var legend = this.legend, - navigator = this.navigator, - scrollbarHeight, - legendOptions, - xAxis, - yAxis; - - proceed.apply(this, [].slice.call(arguments, 1)); - - if (navigator) { - legendOptions = legend && legend.options; - xAxis = navigator.xAxis; - yAxis = navigator.yAxis; - scrollbarHeight = navigator.scrollbarHeight; - - // Compute the top position - if (this.inverted) { - navigator.left = navigator.opposite ? - this.chartWidth - scrollbarHeight - navigator.height : - this.spacing[3] + scrollbarHeight; - navigator.top = this.plotTop + scrollbarHeight; - } else { - navigator.left = this.plotLeft + scrollbarHeight; - navigator.top = navigator.navigatorOptions.top || - this.chartHeight - - navigator.height - - scrollbarHeight - - this.spacing[2] - - ( - this.rangeSelector && this.extraBottomMargin ? - this.rangeSelector.getHeight() : - 0 - ) - - ( - ( - legendOptions && - legendOptions.verticalAlign === 'bottom' && - legendOptions.enabled && - !legendOptions.floating - ) ? - legend.legendHeight + pick(legendOptions.margin, 10) : - 0 - ); - } - - if (xAxis && yAxis) { // false if navigator is disabled (#904) - - if (this.inverted) { - xAxis.options.left = yAxis.options.left = navigator.left; - } else { - xAxis.options.top = yAxis.options.top = navigator.top; - } - - xAxis.setAxisSize(); - yAxis.setAxisSize(); - } - } - }); - - // Pick up badly formatted point options to addPoint - wrap(Series.prototype, 'addPoint', function( - proceed, - options, - redraw, - shift, - animation - ) { - var turboThreshold = this.options.turboThreshold; - if ( - turboThreshold && - this.xData.length > turboThreshold && - isObject(options, true) && - this.chart.navigator - ) { - error(20, true); - } - proceed.call(this, options, redraw, shift, animation); - }); - - // Handle adding new series - wrap(Chart.prototype, 'addSeries', function( - proceed, - options, - redraw, - animation - ) { - var series = proceed.call(this, options, false, animation); - if (this.navigator) { - // Recompute which series should be shown in navigator, and add them - this.navigator.setBaseSeries(null, false); - } - if (pick(redraw, true)) { - this.redraw(); - } - return series; - }); - - // Handle updating series - wrap(Series.prototype, 'update', function(proceed, newOptions, redraw) { - proceed.call(this, newOptions, false); - if (this.chart.navigator && !this.options.isInternal) { - this.chart.navigator.setBaseSeries(null, false); - } - if (pick(redraw, true)) { - this.chart.redraw(); - } - }); - - Chart.prototype.callbacks.push(function(chart) { - var extremes, - navigator = chart.navigator; - - // Initiate the navigator - if (navigator) { - extremes = chart.xAxis[0].getExtremes(); - navigator.render(extremes.min, extremes.max); - } - }); - - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var addEvent = H.addEvent, - Axis = H.Axis, - Chart = H.Chart, - css = H.css, - createElement = H.createElement, - dateFormat = H.dateFormat, - defaultOptions = H.defaultOptions, - useUTC = defaultOptions.global.useUTC, - defined = H.defined, - destroyObjectProperties = H.destroyObjectProperties, - discardElement = H.discardElement, - each = H.each, - extend = H.extend, - fireEvent = H.fireEvent, - HCDate = H.Date, - isNumber = H.isNumber, - merge = H.merge, - pick = H.pick, - pInt = H.pInt, - splat = H.splat, - wrap = H.wrap; - - /* **************************************************************************** - * Start Range Selector code * - *****************************************************************************/ - extend(defaultOptions, { - - /** - * The range selector is a tool for selecting ranges to display within - * the chart. It provides buttons to select preconfigured ranges in - * the chart, like 1 day, 1 week, 1 month etc. It also provides input - * boxes where min and max dates can be manually input. - * - * @product highstock - * @optionparent rangeSelector - */ - rangeSelector: { - // allButtonsEnabled: false, - // enabled: true, - // buttons: {Object} - // buttonSpacing: 0, - - /** - * The vertical alignment of the rangeselector box. Allowed properties are `top`, - * `middle`, `bottom`. - * - * @since 6.0.0 - * - * @sample {highstock} stock/rangeselector/vertical-align-middle/ Middle - * - * @sample {highstock} stock/rangeselector/vertical-align-bottom/ Bottom - */ - verticalAlign: 'top', - - /** - * A collection of attributes for the buttons. The object takes SVG - * attributes like `fill`, `stroke`, `stroke-width`, as well as `style`, - * a collection of CSS properties for the text. - * - * The object can also be extended with states, so you can set presentational - * options for `hover`, `select` or `disabled` button states. - * - * CSS styles for the text label. - * - * In styled mode, the buttons are styled by the `.highcharts- - * range-selector-buttons .highcharts-button` rule with its different - * states. - * - * @type {Object} - * @sample {highstock} stock/rangeselector/styling/ Styling the buttons and inputs - * @product highstock - */ - buttonTheme: { - 'stroke-width': 0, - width: 28, - height: 18, - padding: 2, - zIndex: 7 // #484, #852 - }, - - /** - * When the rangeselector is floating, the plot area does not reserve - * space for it. This opens for positioning anywhere on the chart. - * - * @sample {highstock} stock/rangeselector/floating/ - * Placing the range selector between the plot area and the - * navigator - * @since 6.0.0 - * @product highstock - */ - floating: false, - - /** - * The x offset of the range selector relative to its horizontal - * alignment within `chart.spacingLeft` and `chart.spacingRight`. - * - * @since 6.0.0 - * @product highstock - */ - x: 0, - - /** - * The y offset of the range selector relative to its horizontal - * alignment within `chart.spacingLeft` and `chart.spacingRight`. - * - * @since 6.0.0 - * @product highstock - */ - y: 0, - - /** - * Deprecated. The height of the range selector. Currently it is - * calculated dynamically. - * - * @type {Number} - * @default undefined - * @since 2.1.9 - * @product highstock - * @deprecated true - */ - height: undefined, // reserved space for buttons and input - - /** - * Positioning for the input boxes. Allowed properties are `align`, - * `x` and `y`. - * - * @type {Object} - * @default { align: "right" } - * @since 1.2.4 - * @product highstock - */ - inputPosition: { - /** - * The alignment of the input box. Allowed properties are `left`, - * `center`, `right`. - * @validvalue ["left", "center", "right"] - * @sample {highstock} stock/rangeselector/input-button-position/ - * Alignment - * @since 6.0.0 - */ - align: 'right', - x: 0, - y: 0 - }, - - /** - * Positioning for the button row. - * - * @since 1.2.4 - * @product highstock - */ - buttonPosition: { - /** - * The alignment of the input box. Allowed properties are `left`, - * `center`, `right`. - * - * @validvalue ["left", "center", "right"] - * @sample {highstock} stock/rangeselector/input-button-position/ - * Alignment - * @since 6.0.0 - */ - align: 'left', - /** - * X offset of the button row. - */ - x: 0, - /** - * Y offset of the button row. - */ - y: 0 - }, - // inputDateFormat: '%b %e, %Y', - // inputEditDateFormat: '%Y-%m-%d', - // inputEnabled: true, - // selected: undefined, - - // inputStyle: {}, - - /** - * CSS styles for the labels - the Zoom, From and To texts. - * - * In styled mode, the labels are styled by the `.highcharts-range-label` class. - * - * @type {CSSObject} - * @sample {highstock} stock/rangeselector/styling/ Styling the buttons and inputs - * @product highstock - */ - labelStyle: { - color: '#666666' - } - - } - }); - - defaultOptions.lang = merge( - defaultOptions.lang, - /** - * Language object. The language object is global and it can't be set - * on each chart initiation. Instead, use `Highcharts.setOptions` to - * set it before any chart is initialized. - * - *
Highcharts.setOptions({
-             *     lang: {
-             *         months: [
-             *             'Janvier', 'Février', 'Mars', 'Avril',
-             *             'Mai', 'Juin', 'Juillet', 'Août',
-             *             'Septembre', 'Octobre', 'Novembre', 'Décembre'
-             *         ],
-             *         weekdays: [
-             *             'Dimanche', 'Lundi', 'Mardi', 'Mercredi',
-             *             'Jeudi', 'Vendredi', 'Samedi'
-             *         ]
-             *     }
-             * });
- * - * @optionparent lang - * @product highstock - */ - { - - /** - * The text for the label for the range selector buttons. - * - * @type {String} - * @default Zoom - * @product highstock - */ - rangeSelectorZoom: 'Zoom', - - /** - * The text for the label for the "from" input box in the range - * selector. - * - * @type {String} - * @default From - * @product highstock - */ - rangeSelectorFrom: 'From', - - /** - * The text for the label for the "to" input box in the range selector. - * - * @type {String} - * @default To - * @product highstock - */ - rangeSelectorTo: 'To' - } - ); - - /** - * The range selector. - * @class - * @param {Object} chart - */ - function RangeSelector(chart) { - - // Run RangeSelector - this.init(chart); - } - - RangeSelector.prototype = { - /** - * The method to run when one of the buttons in the range selectors is clicked - * @param {Number} i The index of the button - * @param {Object} rangeOptions - * @param {Boolean} redraw - */ - clickButton: function(i, redraw) { - var rangeSelector = this, - chart = rangeSelector.chart, - rangeOptions = rangeSelector.buttonOptions[i], - baseAxis = chart.xAxis[0], - unionExtremes = (chart.scroller && chart.scroller.getUnionExtremes()) || baseAxis || {}, - dataMin = unionExtremes.dataMin, - dataMax = unionExtremes.dataMax, - newMin, - newMax = baseAxis && Math.round(Math.min(baseAxis.max, pick(dataMax, baseAxis.max))), // #1568 - type = rangeOptions.type, - baseXAxisOptions, - range = rangeOptions._range, - rangeMin, - minSetting, - rangeSetting, - ctx, - ytdExtremes, - dataGrouping = rangeOptions.dataGrouping; - - if (dataMin === null || dataMax === null) { // chart has no data, base series is removed - return; - } - - // Set the fixed range before range is altered - chart.fixedRange = range; - - // Apply dataGrouping associated to button - if (dataGrouping) { - this.forcedDataGrouping = true; - Axis.prototype.setDataGrouping.call(baseAxis || { - chart: this.chart - }, dataGrouping, false); - } - - // Apply range - if (type === 'month' || type === 'year') { - if (!baseAxis) { - // This is set to the user options and picked up later when the axis is instantiated - // so that we know the min and max. - range = rangeOptions; - } else { - ctx = { - range: rangeOptions, - max: newMax, - dataMin: dataMin, - dataMax: dataMax - }; - newMin = baseAxis.minFromRange.call(ctx); - if (isNumber(ctx.newMax)) { - newMax = ctx.newMax; - } - } - - // Fixed times like minutes, hours, days - } else if (range) { - newMin = Math.max(newMax - range, dataMin); - newMax = Math.min(newMin + range, dataMax); - - } else if (type === 'ytd') { - - // On user clicks on the buttons, or a delayed action running from the beforeRender - // event (below), the baseAxis is defined. - if (baseAxis) { - // When "ytd" is the pre-selected button for the initial view, its calculation - // is delayed and rerun in the beforeRender event (below). When the series - // are initialized, but before the chart is rendered, we have access to the xData - // array (#942). - if (dataMax === undefined) { - dataMin = Number.MAX_VALUE; - dataMax = Number.MIN_VALUE; - each(chart.series, function(series) { - var xData = series.xData; // reassign it to the last item - dataMin = Math.min(xData[0], dataMin); - dataMax = Math.max(xData[xData.length - 1], dataMax); - }); - redraw = false; - } - ytdExtremes = rangeSelector.getYTDExtremes(dataMax, dataMin, useUTC); - newMin = rangeMin = ytdExtremes.min; - newMax = ytdExtremes.max; - - // "ytd" is pre-selected. We don't yet have access to processed point and extremes data - // (things like pointStart and pointInterval are missing), so we delay the process (#942) - } else { - addEvent(chart, 'beforeRender', function() { - rangeSelector.clickButton(i); - }); - return; - } - } else if (type === 'all' && baseAxis) { - newMin = dataMin; - newMax = dataMax; - } - - newMin += rangeOptions._offsetMin; - newMax += rangeOptions._offsetMax; - - rangeSelector.setSelected(i); - - // Update the chart - if (!baseAxis) { - // Axis not yet instanciated. Temporarily set min and range - // options and remove them on chart load (#4317). - baseXAxisOptions = splat(chart.options.xAxis)[0]; - rangeSetting = baseXAxisOptions.range; - baseXAxisOptions.range = range; - minSetting = baseXAxisOptions.min; - baseXAxisOptions.min = rangeMin; - addEvent(chart, 'load', function resetMinAndRange() { - baseXAxisOptions.range = rangeSetting; - baseXAxisOptions.min = minSetting; - }); - } else { - // Existing axis object. Set extremes after render time. - baseAxis.setExtremes( - newMin, - newMax, - pick(redraw, 1), - null, // auto animation - { - trigger: 'rangeSelectorButton', - rangeSelectorButton: rangeOptions - } - ); - } - }, - - /** - * Set the selected option. This method only sets the internal flag, it - * doesn't update the buttons or the actual zoomed range. - */ - setSelected: function(selected) { - this.selected = this.options.selected = selected; - }, - - /** - * The default buttons for pre-selecting time frames - */ - defaultButtons: [{ - type: 'month', - count: 1, - text: '1m' - }, { - type: 'month', - count: 3, - text: '3m' - }, { - type: 'month', - count: 6, - text: '6m' - }, { - type: 'ytd', - text: 'YTD' - }, { - type: 'year', - count: 1, - text: '1y' - }, { - type: 'all', - text: 'All' - }], - - /** - * Initialize the range selector - */ - init: function(chart) { - var rangeSelector = this, - options = chart.options.rangeSelector, - buttonOptions = options.buttons || [].concat(rangeSelector.defaultButtons), - selectedOption = options.selected, - blurInputs = function() { - var minInput = rangeSelector.minInput, - maxInput = rangeSelector.maxInput; - - // #3274 in some case blur is not defined - if (minInput && minInput.blur) { - fireEvent(minInput, 'blur'); - } - if (maxInput && maxInput.blur) { - fireEvent(maxInput, 'blur'); - } - }; - - rangeSelector.chart = chart; - rangeSelector.options = options; - rangeSelector.buttons = []; - - chart.extraTopMargin = options.height; - rangeSelector.buttonOptions = buttonOptions; - - this.unMouseDown = addEvent(chart.container, 'mousedown', blurInputs); - this.unResize = addEvent(chart, 'resize', blurInputs); - - // Extend the buttonOptions with actual range - each(buttonOptions, rangeSelector.computeButtonRange); - - // zoomed range based on a pre-selected button index - if (selectedOption !== undefined && buttonOptions[selectedOption]) { - this.clickButton(selectedOption, false); - } - - - addEvent(chart, 'load', function() { - // If a data grouping is applied to the current button, release it - // when extremes change - if (chart.xAxis && chart.xAxis[0]) { - addEvent(chart.xAxis[0], 'setExtremes', function(e) { - if ( - this.max - this.min !== chart.fixedRange && - e.trigger !== 'rangeSelectorButton' && - e.trigger !== 'updatedData' && - rangeSelector.forcedDataGrouping - ) { - this.setDataGrouping(false, false); - } - }); - } - }); - }, - - /** - * Dynamically update the range selector buttons after a new range has been - * set - */ - updateButtonStates: function() { - var rangeSelector = this, - chart = this.chart, - baseAxis = chart.xAxis[0], - actualRange = Math.round(baseAxis.max - baseAxis.min), - hasNoData = !baseAxis.hasVisibleSeries, - day = 24 * 36e5, // A single day in milliseconds - unionExtremes = ( - chart.scroller && - chart.scroller.getUnionExtremes() - ) || baseAxis, - dataMin = unionExtremes.dataMin, - dataMax = unionExtremes.dataMax, - ytdExtremes = rangeSelector.getYTDExtremes( - dataMax, - dataMin, - useUTC - ), - ytdMin = ytdExtremes.min, - ytdMax = ytdExtremes.max, - selected = rangeSelector.selected, - selectedExists = isNumber(selected), - allButtonsEnabled = rangeSelector.options.allButtonsEnabled, - buttons = rangeSelector.buttons; - - each(rangeSelector.buttonOptions, function(rangeOptions, i) { - var range = rangeOptions._range, - type = rangeOptions.type, - count = rangeOptions.count || 1, - button = buttons[i], - state = 0, - disable, - select, - offsetRange = rangeOptions._offsetMax - rangeOptions._offsetMin, - isSelected = i === selected, - // Disable buttons where the range exceeds what is allowed in - // the current view - isTooGreatRange = range > dataMax - dataMin, - // Disable buttons where the range is smaller than the minimum - // range - isTooSmallRange = range < baseAxis.minRange, - // Do not select the YTD button if not explicitly told so - isYTDButNotSelected = false, - // Disable the All button if we're already showing all - isAllButAlreadyShowingAll = false, - isSameRange = range === actualRange; - // Months and years have a variable range so we check the extremes - if ( - (type === 'month' || type === 'year') && - ( - actualRange + 36e5 >= { - month: 28, - year: 365 - }[type] * day * count + offsetRange - ) && - ( - actualRange - 36e5 <= { - month: 31, - year: 366 - }[type] * day * count + offsetRange - ) - ) { - isSameRange = true; - } else if (type === 'ytd') { - isSameRange = (ytdMax - ytdMin + offsetRange) === actualRange; - isYTDButNotSelected = !isSelected; - } else if (type === 'all') { - isSameRange = baseAxis.max - baseAxis.min >= dataMax - dataMin; - isAllButAlreadyShowingAll = (!isSelected && - selectedExists && - isSameRange - ); - } - - // The new zoom area happens to match the range for a button - mark - // it selected. This happens when scrolling across an ordinal gap. - // It can be seen in the intraday demos when selecting 1h and scroll - // across the night gap. - disable = (!allButtonsEnabled && - ( - isTooGreatRange || - isTooSmallRange || - isAllButAlreadyShowingAll || - hasNoData - ) - ); - select = ( - (isSelected && isSameRange) || - (isSameRange && !selectedExists && !isYTDButNotSelected) - ); - - if (disable) { - state = 3; - } else if (select) { - selectedExists = true; // Only one button can be selected - state = 2; - } - - // If state has changed, update the button - if (button.state !== state) { - button.setState(state); - } - }); - }, - - /** - * Compute and cache the range for an individual button - */ - computeButtonRange: function(rangeOptions) { - var type = rangeOptions.type, - count = rangeOptions.count || 1, - - // these time intervals have a fixed number of milliseconds, as - // opposed to month, ytd and year - fixedTimes = { - millisecond: 1, - second: 1000, - minute: 60 * 1000, - hour: 3600 * 1000, - day: 24 * 3600 * 1000, - week: 7 * 24 * 3600 * 1000 - }; - - // Store the range on the button object - if (fixedTimes[type]) { - rangeOptions._range = fixedTimes[type] * count; - } else if (type === 'month' || type === 'year') { - rangeOptions._range = { - month: 30, - year: 365 - }[type] * 24 * 36e5 * count; - } - - rangeOptions._offsetMin = pick(rangeOptions.offsetMin, 0); - rangeOptions._offsetMax = pick(rangeOptions.offsetMax, 0); - rangeOptions._range += - rangeOptions._offsetMax - rangeOptions._offsetMin; - }, - - /** - * Set the internal and displayed value of a HTML input for the dates - * @param {String} name - * @param {Number} time - */ - setInputValue: function(name, time) { - var options = this.chart.options.rangeSelector, - input = this[name + 'Input']; - - if (defined(time)) { - input.previousValue = input.HCTime; - input.HCTime = time; - } - - input.value = dateFormat( - options.inputEditDateFormat || '%Y-%m-%d', - input.HCTime - ); - this[name + 'DateBox'].attr({ - text: dateFormat( - options.inputDateFormat || '%b %e, %Y', - input.HCTime - ) - }); - }, - - showInput: function(name) { - var inputGroup = this.inputGroup, - dateBox = this[name + 'DateBox']; - - css(this[name + 'Input'], { - left: (inputGroup.translateX + dateBox.x) + 'px', - top: inputGroup.translateY + 'px', - width: (dateBox.width - 2) + 'px', - height: (dateBox.height - 2) + 'px', - border: '2px solid silver' - }); - }, - - hideInput: function(name) { - css(this[name + 'Input'], { - border: 0, - width: '1px', - height: '1px' - }); - this.setInputValue(name); - }, - - /** - * Draw either the 'from' or the 'to' HTML input box of the range selector - * @param {Object} name - */ - drawInput: function(name) { - var rangeSelector = this, - chart = rangeSelector.chart, - chartStyle = chart.renderer.style || {}, - renderer = chart.renderer, - options = chart.options.rangeSelector, - lang = defaultOptions.lang, - div = rangeSelector.div, - isMin = name === 'min', - input, - label, - dateBox, - inputGroup = this.inputGroup; - - function updateExtremes() { - var inputValue = input.value, - value = (options.inputDateParser || Date.parse)(inputValue), - chartAxis = chart.xAxis[0], - dataAxis = chart.scroller && chart.scroller.xAxis ? chart.scroller.xAxis : chartAxis, - dataMin = dataAxis.dataMin, - dataMax = dataAxis.dataMax; - if (value !== input.previousValue) { - input.previousValue = value; - // If the value isn't parsed directly to a value by the browser's Date.parse method, - // like YYYY-MM-DD in IE, try parsing it a different way - if (!isNumber(value)) { - value = inputValue.split('-'); - value = Date.UTC(pInt(value[0]), pInt(value[1]) - 1, pInt(value[2])); - } - - if (isNumber(value)) { - - // Correct for timezone offset (#433) - if (!useUTC) { - value = value + new Date().getTimezoneOffset() * 60 * 1000; - } - - // Validate the extremes. If it goes beyound the data min or max, use the - // actual data extreme (#2438). - if (isMin) { - if (value > rangeSelector.maxInput.HCTime) { - value = undefined; - } else if (value < dataMin) { - value = dataMin; - } - } else { - if (value < rangeSelector.minInput.HCTime) { - value = undefined; - } else if (value > dataMax) { - value = dataMax; - } - } - - // Set the extremes - if (value !== undefined) { - chartAxis.setExtremes( - isMin ? value : chartAxis.min, - isMin ? chartAxis.max : value, - undefined, - undefined, { - trigger: 'rangeSelectorInput' - } - ); - } - } - } - } - - // Create the text label - this[name + 'Label'] = label = renderer.label(lang[isMin ? 'rangeSelectorFrom' : 'rangeSelectorTo'], this.inputGroup.offset) - .addClass('highcharts-range-label') - .attr({ - padding: 2 - }) - .add(inputGroup); - inputGroup.offset += label.width + 5; - - // Create an SVG label that shows updated date ranges and and records click events that - // bring in the HTML input. - this[name + 'DateBox'] = dateBox = renderer.label('', inputGroup.offset) - .addClass('highcharts-range-input') - .attr({ - padding: 2, - width: options.inputBoxWidth || 90, - height: options.inputBoxHeight || 17, - stroke: options.inputBoxBorderColor || '#cccccc', - 'stroke-width': 1, - 'text-align': 'center' - }) - .on('click', function() { - rangeSelector.showInput(name); // If it is already focused, the onfocus event doesn't fire (#3713) - rangeSelector[name + 'Input'].focus(); - }) - .add(inputGroup); - inputGroup.offset += dateBox.width + (isMin ? 10 : 0); - - - // Create the HTML input element. This is rendered as 1x1 pixel then set to the right size - // when focused. - this[name + 'Input'] = input = createElement('input', { - name: name, - className: 'highcharts-range-selector', - type: 'text' - }, { - top: chart.plotTop + 'px' // prevent jump on focus in Firefox - }, div); - - - // Styles - label.css(merge(chartStyle, options.labelStyle)); - - dateBox.css(merge({ - color: '#333333' - }, chartStyle, options.inputStyle)); - - css(input, extend({ - position: 'absolute', - border: 0, - width: '1px', // Chrome needs a pixel to see it - height: '1px', - padding: 0, - textAlign: 'center', - fontSize: chartStyle.fontSize, - fontFamily: chartStyle.fontFamily, - top: '-9999em' // #4798 - }, options.inputStyle)); - - - // Blow up the input box - input.onfocus = function() { - rangeSelector.showInput(name); - }; - // Hide away the input box - input.onblur = function() { - rangeSelector.hideInput(name); - }; - - // handle changes in the input boxes - input.onchange = updateExtremes; - - input.onkeypress = function(event) { - // IE does not fire onchange on enter - if (event.keyCode === 13) { - updateExtremes(); - } - }; - }, - - /** - * Get the position of the range selector buttons and inputs. This can be overridden from outside for custom positioning. - */ - getPosition: function() { - var chart = this.chart, - options = chart.options.rangeSelector, - top = (options.verticalAlign) === 'top' ? chart.plotTop - chart.axisOffset[0] : 0; // set offset only for varticalAlign top - - return { - buttonTop: top + options.buttonPosition.y, - inputTop: top + options.inputPosition.y - 10 - }; - }, - /** - * Get the extremes of YTD. - * Will choose dataMax if its value is lower than the current timestamp. - * Will choose dataMin if its value is higher than the timestamp for - * the start of current year. - * @param {number} dataMax - * @param {number} dataMin - * @return {object} Returns min and max for the YTD - */ - getYTDExtremes: function(dataMax, dataMin, useUTC) { - var min, - now = new HCDate(dataMax), - year = now[HCDate.hcGetFullYear](), - startOfYear = useUTC ? HCDate.UTC(year, 0, 1) : +new HCDate(year, 0, 1); // eslint-disable-line new-cap - min = Math.max(dataMin || 0, startOfYear); - now = now.getTime(); - return { - max: Math.min(dataMax || now, now), - min: min - }; - }, - - /** - * Render the range selector including the buttons and the inputs. The first time render - * is called, the elements are created and positioned. On subsequent calls, they are - * moved and updated. - * @param {Number} min X axis minimum - * @param {Number} max X axis maximum - */ - render: function(min, max) { - - var rangeSelector = this, - chart = rangeSelector.chart, - renderer = chart.renderer, - container = chart.container, - chartOptions = chart.options, - navButtonOptions = chartOptions.exporting && chartOptions.exporting.enabled !== false && - chartOptions.navigation && chartOptions.navigation.buttonOptions, - lang = defaultOptions.lang, - div = rangeSelector.div, - options = chartOptions.rangeSelector, - floating = options.floating, - buttons = rangeSelector.buttons, - inputGroup = rangeSelector.inputGroup, - buttonTheme = options.buttonTheme, - buttonPosition = options.buttonPosition, - inputPosition = options.inputPosition, - inputEnabled = options.inputEnabled, - states = buttonTheme && buttonTheme.states, - plotLeft = chart.plotLeft, - buttonLeft, - buttonGroup = rangeSelector.buttonGroup, - group, - groupHeight, - rendered = rangeSelector.rendered, - verticalAlign = rangeSelector.options.verticalAlign, - legend = chart.legend, - legendOptions = legend && legend.options, - buttonPositionY = buttonPosition.y, - inputPositionY = inputPosition.y, - animate = rendered || false, - exportingX = 0, - alignTranslateY, - legendHeight, - minPosition, - translateY = 0, - translateX; - - if (options.enabled === false) { - return; - } - - // create the elements - if (!rendered) { - - rangeSelector.group = group = renderer.g('range-selector-group') - .attr({ - zIndex: 7 - }) - .add(); - - rangeSelector.buttonGroup = buttonGroup = renderer.g('range-selector-buttons').add(group); - - rangeSelector.zoomText = renderer.text(lang.rangeSelectorZoom, pick(plotLeft + buttonPosition.x, plotLeft), 15) - .css(options.labelStyle) - .add(buttonGroup); - - // button start position - buttonLeft = pick(plotLeft + buttonPosition.x, plotLeft) + rangeSelector.zoomText.getBBox().width + 5; - - each(rangeSelector.buttonOptions, function(rangeOptions, i) { - - buttons[i] = renderer.button( - rangeOptions.text, - buttonLeft, - 0, - function() { - - // extract events from button object and call - var buttonEvents = rangeOptions.events && rangeOptions.events.click, - callDefaultEvent; - - if (buttonEvents) { - callDefaultEvent = buttonEvents.call(rangeOptions); - } - - if (callDefaultEvent !== false) { - rangeSelector.clickButton(i); - } - - rangeSelector.isActive = true; - }, - buttonTheme, - states && states.hover, - states && states.select, - states && states.disabled - ) - .attr({ - 'text-align': 'center' - }) - .add(buttonGroup); - - // increase button position for the next button - buttonLeft += buttons[i].width + pick(options.buttonSpacing, 5); - }); - - // first create a wrapper outside the container in order to make - // the inputs work and make export correct - if (inputEnabled !== false) { - rangeSelector.div = div = createElement('div', null, { - position: 'relative', - height: 0, - zIndex: 1 // above container - }); - - container.parentNode.insertBefore(div, container); - - // Create the group to keep the inputs - rangeSelector.inputGroup = inputGroup = renderer.g('input-group') - .add(group); - inputGroup.offset = 0; - - rangeSelector.drawInput('min'); - rangeSelector.drawInput('max'); - } - } - - plotLeft = chart.plotLeft - chart.spacing[3]; - rangeSelector.updateButtonStates(); - - // detect collisiton with exporting - if ( - navButtonOptions && - this.titleCollision(chart) && - verticalAlign === 'top' && - buttonPosition.align === 'right' && - ( - (buttonPosition.y + buttonGroup.getBBox().height - 12) < - ((navButtonOptions.y || 0) + navButtonOptions.height) - ) - ) { - exportingX = -40; - } - - if (buttonPosition.align === 'left') { - translateX = buttonPosition.x - chart.spacing[3]; - } else if (buttonPosition.align === 'right') { - translateX = buttonPosition.x + exportingX - chart.spacing[1]; - } - - // align button group - buttonGroup.align({ - y: buttonPosition.y, - width: buttonGroup.getBBox().width, - align: buttonPosition.align, - x: translateX - }, true, chart.spacingBox); - - // skip animation - rangeSelector.group.placed = animate; - rangeSelector.buttonGroup.placed = animate; - - if (inputEnabled !== false) { - - var inputGroupX, - inputGroupWidth, - buttonGroupX, - buttonGroupWidth; - - // detect collision with exporting - if ( - navButtonOptions && - this.titleCollision(chart) && - verticalAlign === 'top' && - inputPosition.align === 'right' && - ( - (inputPosition.y - inputGroup.getBBox().height - 12) < - ((navButtonOptions.y || 0) + navButtonOptions.height + chart.spacing[0]) - ) - ) { - exportingX = -40; - } else { - exportingX = 0; - } - - if (inputPosition.align === 'left') { - translateX = plotLeft; - } else if (inputPosition.align === 'right') { - translateX = -Math.max(chart.axisOffset[1], -exportingX); // yAxis offset - } - - // Update the alignment to the updated spacing box - inputGroup.align({ - y: inputPosition.y, - width: inputGroup.getBBox().width, - align: inputPosition.align, - x: inputPosition.x + translateX - 2 // fix wrong getBBox() value on right align - }, true, chart.spacingBox); - - // detect collision - inputGroupX = inputGroup.alignAttr.translateX + inputGroup.alignOptions.x - - exportingX + inputGroup.getBBox().x + 2; // getBBox for detecing left margin, 2px padding to not overlap input and label - - inputGroupWidth = inputGroup.alignOptions.width; - - buttonGroupX = buttonGroup.alignAttr.translateX + buttonGroup.getBBox().x; - buttonGroupWidth = buttonGroup.getBBox().width + 20; // 20 is minimal spacing between elements - - if ( - (inputPosition.align === buttonPosition.align) || - ( - (buttonGroupX + buttonGroupWidth > inputGroupX) && - (inputGroupX + inputGroupWidth > buttonGroupX) && - (buttonPositionY < (inputPositionY + inputGroup.getBBox().height)) - ) - ) { - - inputGroup.attr({ - translateX: inputGroup.alignAttr.translateX + (chart.axisOffset[1] >= -exportingX ? 0 : -exportingX), - translateY: inputGroup.alignAttr.translateY + buttonGroup.getBBox().height + 10 - }); - - } - - // Set or reset the input values - rangeSelector.setInputValue('min', min); - rangeSelector.setInputValue('max', max); - - // skip animation - rangeSelector.inputGroup.placed = animate; - } - - // vertical align - rangeSelector.group.align({ - verticalAlign: verticalAlign - }, true, chart.spacingBox); - - // set position - groupHeight = rangeSelector.group.getBBox().height + 20; // # 20 padding - alignTranslateY = rangeSelector.group.alignAttr.translateY; - - // calculate bottom position - if (verticalAlign === 'bottom') { - legendHeight = legendOptions && legendOptions.verticalAlign === 'bottom' && legendOptions.enabled && - !legendOptions.floating ? legend.legendHeight + pick(legendOptions.margin, 10) : 0; - - groupHeight = groupHeight + legendHeight - 20; - translateY = alignTranslateY - groupHeight - (floating ? 0 : options.y) - 10; // 10 spacing - - } - - if (verticalAlign === 'top') { - if (floating) { - translateY = 0; - } - - if (chart.titleOffset) { - translateY = chart.titleOffset + chart.options.title.margin; - } - - translateY += ((chart.margin[0] - chart.spacing[0]) || 0); - - } else if (verticalAlign === 'middle') { - if (inputPositionY === buttonPositionY) { - if (inputPositionY < 0) { - translateY = alignTranslateY + minPosition; - } else { - translateY = alignTranslateY; - } - } else if (inputPositionY || buttonPositionY) { - if (inputPositionY < 0 || buttonPositionY < 0) { - translateY -= Math.min(inputPositionY, buttonPositionY); - } else { - translateY = alignTranslateY - groupHeight + minPosition; - } - } - } - - rangeSelector.group.translate( - options.x, - options.y + Math.floor(translateY) - ); - - // translate HTML inputs - if (inputEnabled !== false) { - rangeSelector.minInput.style.marginTop = rangeSelector.group.translateY + 'px'; - rangeSelector.maxInput.style.marginTop = rangeSelector.group.translateY + 'px'; - } - - rangeSelector.rendered = true; - }, - - /** - * Extracts height of range selector - * @return {Number} Returns rangeSelector height - */ - getHeight: function() { - var rangeSelector = this, - options = rangeSelector.options, - rangeSelectorGroup = rangeSelector.group, - inputPosition = options.inputPosition, - buttonPosition = options.buttonPosition, - yPosition = options.y, - buttonPositionY = buttonPosition.y, - inputPositionY = inputPosition.y, - rangeSelectorHeight = 0, - minPosition; - - rangeSelectorHeight = rangeSelectorGroup ? (rangeSelectorGroup.getBBox(true).height) + 13 + yPosition : 0; // 13px to keep back compatibility - - minPosition = Math.min(inputPositionY, buttonPositionY); - - if ( - (inputPositionY < 0 && buttonPositionY < 0) || - (inputPositionY > 0 && buttonPositionY > 0) - ) { - rangeSelectorHeight += Math.abs(minPosition); - } - - return rangeSelectorHeight; - }, - - /** - * Detect collision with title or subtitle - * @param {object} chart - * @return {Boolean} Returns collision status - */ - titleCollision: function(chart) { - return !(chart.options.title.text || chart.options.subtitle.text); - }, - - /** - * Update the range selector with new options - * @param {object} options - */ - update: function(options) { - var chart = this.chart; - - merge(true, chart.options.rangeSelector, options); - this.destroy(); - this.init(chart); - chart.rangeSelector.render(); - }, - - /** - * Destroys allocated elements. - */ - destroy: function() { - var rSelector = this, - minInput = rSelector.minInput, - maxInput = rSelector.maxInput; - - rSelector.unMouseDown(); - rSelector.unResize(); - - // Destroy elements in collections - destroyObjectProperties(rSelector.buttons); - - // Clear input element events - if (minInput) { - minInput.onfocus = minInput.onblur = minInput.onchange = null; - } - if (maxInput) { - maxInput.onfocus = maxInput.onblur = maxInput.onchange = null; - } - - // Destroy HTML and SVG elements - H.objectEach(rSelector, function(val, key) { - if (val && key !== 'chart') { - if (val.destroy) { // SVGElement - val.destroy(); - } else if (val.nodeType) { // HTML element - discardElement(this[key]); - } - } - if (val !== RangeSelector.prototype[key]) { - rSelector[key] = null; - } - }, this); - } - }; - - /** - * Add logic to normalize the zoomed range in order to preserve the pressed state of range selector buttons - */ - Axis.prototype.toFixedRange = function(pxMin, pxMax, fixedMin, fixedMax) { - var fixedRange = this.chart && this.chart.fixedRange, - newMin = pick(fixedMin, this.translate(pxMin, true, !this.horiz)), - newMax = pick(fixedMax, this.translate(pxMax, true, !this.horiz)), - changeRatio = fixedRange && (newMax - newMin) / fixedRange; - - // If the difference between the fixed range and the actual requested range is - // too great, the user is dragging across an ordinal gap, and we need to release - // the range selector button. - if (changeRatio > 0.7 && changeRatio < 1.3) { - if (fixedMax) { - newMin = newMax - fixedRange; - } else { - newMax = newMin + fixedRange; - } - } - if (!isNumber(newMin) || !isNumber(newMax)) { // #1195, #7411 - newMin = newMax = undefined; - } - - return { - min: newMin, - max: newMax - }; - }; - - /** - * Get the axis min value based on the range option and the current max. For - * stock charts this is extended via the {@link RangeSelector} so that if the - * selected range is a multiple of months or years, it is compensated for - * various month lengths. - * - * @return {number} The new minimum value. - */ - Axis.prototype.minFromRange = function() { - var rangeOptions = this.range, - type = rangeOptions.type, - timeName = { - month: 'Month', - year: 'FullYear' - }[type], - min, - max = this.max, - dataMin, - range, - // Get the true range from a start date - getTrueRange = function(base, count) { - var date = new Date(base), - basePeriod = date['get' + timeName](); - - date['set' + timeName](basePeriod + count); - - if (basePeriod === date['get' + timeName]()) { - date.setDate(0); // #6537 - } - - return date.getTime() - base; - }; - - if (isNumber(rangeOptions)) { - min = max - rangeOptions; - range = rangeOptions; - } else { - min = max + getTrueRange(max, -rangeOptions.count); - - // Let the fixedRange reflect initial settings (#5930) - if (this.chart) { - this.chart.fixedRange = max - min; - } - } - - dataMin = pick(this.dataMin, Number.MIN_VALUE); - if (!isNumber(min)) { - min = dataMin; - } - if (min <= dataMin) { - min = dataMin; - if (range === undefined) { // #4501 - range = getTrueRange(min, rangeOptions.count); - } - this.newMax = Math.min(min + range, this.dataMax); - } - if (!isNumber(max)) { - min = undefined; - } - return min; - - }; - - // Initialize rangeselector for stock charts - wrap(Chart.prototype, 'init', function(proceed, options, callback) { - - addEvent(this, 'init', function() { - if (this.options.rangeSelector.enabled) { - this.rangeSelector = new RangeSelector(this); - } - }); - - proceed.call(this, options, callback); - - }); - - wrap(Chart.prototype, 'render', function(proceed, options, callback) { - - var chart = this, - axes = chart.axes, - rangeSelector = chart.rangeSelector, - verticalAlign; - - if (rangeSelector) { - - each(axes, function(axis) { - axis.updateNames(); - axis.setScale(); - }); - - chart.getAxisMargins(); - - rangeSelector.render(); - verticalAlign = rangeSelector.options.verticalAlign; - - if (!rangeSelector.options.floating) { - if (verticalAlign === 'bottom') { - this.extraBottomMargin = true; - } else if (verticalAlign !== 'middle') { - this.extraTopMargin = true; - } - } - } - - proceed.call(this, options, callback); - - }); - - wrap(Chart.prototype, 'update', function(proceed, options, redraw, oneToOne) { - - var chart = this, - rangeSelector = chart.rangeSelector, - verticalAlign; - - this.extraBottomMargin = false; - this.extraTopMargin = false; - - if (rangeSelector) { - - rangeSelector.render(); - - verticalAlign = (options.rangeSelector && options.rangeSelector.verticalAlign) || - (rangeSelector.options && rangeSelector.options.verticalAlign); - - if (!rangeSelector.options.floating) { - if (verticalAlign === 'bottom') { - this.extraBottomMargin = true; - } else if (verticalAlign !== 'middle') { - this.extraTopMargin = true; - } - } - } - - proceed.call(this, H.merge(true, options, { - chart: { - marginBottom: pick(options.chart && options.chart.marginBottom, chart.margin.bottom), - spacingBottom: pick(options.chart && options.chart.spacingBottom, chart.spacing.bottom) - } - }), redraw, oneToOne); - - }); - - wrap(Chart.prototype, 'redraw', function(proceed, options, callback) { - var chart = this, - rangeSelector = chart.rangeSelector, - verticalAlign; - - if (rangeSelector && !rangeSelector.options.floating) { - - rangeSelector.render(); - verticalAlign = rangeSelector.options.verticalAlign; - - if (verticalAlign === 'bottom') { - this.extraBottomMargin = true; - } else if (verticalAlign !== 'middle') { - this.extraTopMargin = true; - } - } - - proceed.call(this, options, callback); - }); - - Chart.prototype.adjustPlotArea = function() { - var chart = this, - rangeSelector = chart.rangeSelector, - rangeSelectorHeight; - - if (this.rangeSelector) { - - rangeSelectorHeight = rangeSelector.getHeight(); - - if (this.extraTopMargin) { - this.plotTop += rangeSelectorHeight; - } - - if (this.extraBottomMargin) { - this.marginBottom += rangeSelectorHeight; - } - } - }; - - Chart.prototype.callbacks.push(function(chart) { - var extremes, - rangeSelector = chart.rangeSelector, - unbindRender, - unbindSetExtremes; - - function renderRangeSelector() { - extremes = chart.xAxis[0].getExtremes(); - if (isNumber(extremes.min)) { - rangeSelector.render(extremes.min, extremes.max); - } - } - - if (rangeSelector) { - // redraw the scroller on setExtremes - unbindSetExtremes = addEvent( - chart.xAxis[0], - 'afterSetExtremes', - function(e) { - rangeSelector.render(e.min, e.max); - } - ); - - // redraw the scroller chart resize - unbindRender = addEvent(chart, 'redraw', renderRangeSelector); - - // do it now - renderRangeSelector(); - } - - // Remove resize/afterSetExtremes at chart destroy - addEvent(chart, 'destroy', function destroyEvents() { - if (rangeSelector) { - unbindRender(); - unbindSetExtremes(); - } - }); - }); - - - H.RangeSelector = RangeSelector; - - /* **************************************************************************** - * End Range Selector code * - *****************************************************************************/ - - }(Highcharts)); - (function(H) { - /** - * (c) 2010-2017 Torstein Honsi - * - * License: www.highcharts.com/license - */ - var arrayMax = H.arrayMax, - arrayMin = H.arrayMin, - Axis = H.Axis, - Chart = H.Chart, - defined = H.defined, - each = H.each, - extend = H.extend, - format = H.format, - grep = H.grep, - inArray = H.inArray, - isNumber = H.isNumber, - isString = H.isString, - map = H.map, - merge = H.merge, - pick = H.pick, - Point = H.Point, - Renderer = H.Renderer, - Series = H.Series, - splat = H.splat, - SVGRenderer = H.SVGRenderer, - VMLRenderer = H.VMLRenderer, - wrap = H.wrap, - - - seriesProto = Series.prototype, - seriesInit = seriesProto.init, - seriesProcessData = seriesProto.processData, - pointTooltipFormatter = Point.prototype.tooltipFormatter; - - - /** - * Compare the values of the series against the first non-null, non- - * zero value in the visible range. The y axis will show percentage - * or absolute change depending on whether `compare` is set to `"percent"` - * or `"value"`. When this is applied to multiple series, it allows - * comparing the development of the series against each other. - * - * @type {String} - * @see [compareBase](#plotOptions.series.compareBase), [Axis.setCompare()](#Axis. - * setCompare()) - * @sample {highstock} stock/plotoptions/series-compare-percent/ Percent - * @sample {highstock} stock/plotoptions/series-compare-value/ Value - * @default undefined - * @since 1.0.1 - * @product highstock - * @apioption plotOptions.series.compare - */ - - /** - * Defines if comparisson should start from the first point within the visible - * range or should start from the first point before the range. - * In other words, this flag determines if first point within the visible range - * will have 0% (`compareStart=true`) or should have been already calculated - * according to the previous point (`compareStart=false`). - * - * @type {Boolean} - * @sample {highstock} stock/plotoptions/series-comparestart/ Calculate compare within visible range - * @default false - * @since 6.0.0 - * @product highstock - * @apioption plotOptions.series.compareStart - */ - - /** - * When [compare](#plotOptions.series.compare) is `percent`, this option - * dictates whether to use 0 or 100 as the base of comparison. - * - * @validvalue [0, 100] - * @type {Number} - * @sample {highstock} / Compare base is 100 - * @default 0 - * @since 5.0.6 - * @product highstock - * @apioption plotOptions.series.compareBase - */ - - /** - * Factory function for creating new stock charts. Creates a new {@link Chart| - * Chart} object with different default options than the basic Chart. - * - * @function #stockChart - * @memberOf Highcharts - * - * @param {String|HTMLDOMElement} renderTo - * The DOM element to render to, or its id. - * @param {Options} options - * The chart options structure as described in the {@link - * https://api.highcharts.com/highstock|options reference}. - * @param {Function} callback - * A function to execute when the chart object is finished loading and - * rendering. In most cases the chart is built in one thread, but in - * Internet Explorer version 8 or less the chart is sometimes initialized - * before the document is ready, and in these cases the chart object - * will not be finished synchronously. As a consequence, code that - * relies on the newly built Chart object should always run in the - * callback. Defining a {@link https://api.highcharts.com/highstock/chart.events.load| - * chart.event.load} handler is equivalent. - * - * @return {Chart} - * The chart object. - * - * @example - * var chart = Highcharts.stockChart('container', { - * series: [{ - * data: [1, 2, 3, 4, 5, 6, 7, 8, 9], - * pointInterval: 24 * 60 * 60 * 1000 - * }] - * }); - */ - H.StockChart = H.stockChart = function(a, b, c) { - var hasRenderToArg = isString(a) || a.nodeName, - options = arguments[hasRenderToArg ? 1 : 0], - seriesOptions = options.series, // to increase performance, don't merge the data - defaultOptions = H.getOptions(), - opposite, - - // Always disable startOnTick:true on the main axis when the navigator - // is enabled (#1090) - navigatorEnabled = pick( - options.navigator && options.navigator.enabled, - defaultOptions.navigator.enabled, - true - ), - disableStartOnTick = navigatorEnabled ? { - startOnTick: false, - endOnTick: false - } : null, - - lineOptions = { - - marker: { - enabled: false, - radius: 2 - } - // gapSize: 0 - }, - columnOptions = { - shadow: false, - borderWidth: 0 - }; - - // apply X axis options to both single and multi y axes - options.xAxis = map(splat(options.xAxis || {}), function(xAxisOptions) { - return merge({ // defaults - minPadding: 0, - maxPadding: 0, - overscroll: 0, - ordinal: true, - title: { - text: null - }, - labels: { - overflow: 'justify' - }, - showLastLabel: true - }, - defaultOptions.xAxis, // #3802 - xAxisOptions, // user options - { // forced options - type: 'datetime', - categories: null - }, - disableStartOnTick - ); - }); - - // apply Y axis options to both single and multi y axes - options.yAxis = map(splat(options.yAxis || {}), function(yAxisOptions) { - opposite = pick(yAxisOptions.opposite, true); - return merge({ // defaults - labels: { - y: -2 - }, - opposite: opposite, - - /** - * @default {highcharts} true - * @default {highstock} false - * @apioption yAxis.showLastLabel - */ - showLastLabel: false, - - title: { - text: null - } - }, - defaultOptions.yAxis, // #3802 - yAxisOptions // user options - ); - }); - - options.series = null; - - options = merge({ - chart: { - panning: true, - pinchType: 'x' - }, - navigator: { - enabled: navigatorEnabled - }, - scrollbar: { - // #4988 - check if setOptions was called - enabled: pick(defaultOptions.scrollbar.enabled, true) - }, - rangeSelector: { - // #4988 - check if setOptions was called - enabled: pick(defaultOptions.rangeSelector.enabled, true) - }, - title: { - text: null - }, - tooltip: { - split: pick(defaultOptions.tooltip.split, true), - crosshairs: true - }, - legend: { - enabled: false - }, - - plotOptions: { - line: lineOptions, - spline: lineOptions, - area: lineOptions, - areaspline: lineOptions, - arearange: lineOptions, - areasplinerange: lineOptions, - column: columnOptions, - columnrange: columnOptions, - candlestick: columnOptions, - ohlc: columnOptions - } - - }, - - options, // user's options - - { // forced options - isStock: true // internal flag - } - ); - - options.series = seriesOptions; - - return hasRenderToArg ? - new Chart(a, options, c) : - new Chart(options, b); - }; - - // Override the automatic label alignment so that the first Y axis' labels - // are drawn on top of the grid line, and subsequent axes are drawn outside - wrap(Axis.prototype, 'autoLabelAlign', function(proceed) { - var chart = this.chart, - options = this.options, - panes = chart._labelPanes = chart._labelPanes || {}, - key, - labelOptions = this.options.labels; - if (this.chart.options.isStock && this.coll === 'yAxis') { - key = options.top + ',' + options.height; - if (!panes[key] && labelOptions.enabled) { // do it only for the first Y axis of each pane - if (labelOptions.x === 15) { // default - labelOptions.x = 0; - } - if (labelOptions.align === undefined) { - labelOptions.align = 'right'; - } - panes[key] = this; - return 'right'; - } - } - return proceed.apply(this, [].slice.call(arguments, 1)); - }); - - // Clear axis from label panes (#6071) - wrap(Axis.prototype, 'destroy', function(proceed) { - var chart = this.chart, - key = this.options && (this.options.top + ',' + this.options.height); - - if (key && chart._labelPanes && chart._labelPanes[key] === this) { - delete chart._labelPanes[key]; - } - - return proceed.apply(this, Array.prototype.slice.call(arguments, 1)); - }); - - // Override getPlotLinePath to allow for multipane charts - wrap(Axis.prototype, 'getPlotLinePath', function(proceed, value, lineWidth, old, force, translatedValue) { - var axis = this, - series = (this.isLinked && !this.series ? this.linkedParent.series : this.series), - chart = axis.chart, - renderer = chart.renderer, - axisLeft = axis.left, - axisTop = axis.top, - x1, - y1, - x2, - y2, - result = [], - axes = [], // #3416 need a default array - axes2, - uniqueAxes, - transVal; - - /** - * Return the other axis based on either the axis option or on related series. - */ - function getAxis(coll) { - var otherColl = coll === 'xAxis' ? 'yAxis' : 'xAxis', - opt = axis.options[otherColl]; - - // Other axis indexed by number - if (isNumber(opt)) { - return [chart[otherColl][opt]]; - } - - // Other axis indexed by id (like navigator) - if (isString(opt)) { - return [chart.get(opt)]; - } - - // Auto detect based on existing series - return map(series, function(s) { - return s[otherColl]; - }); - } - - // Ignore in case of colorAxis or zAxis. #3360, #3524, #6720 - if (axis.coll !== 'xAxis' && axis.coll !== 'yAxis') { - return proceed.apply(this, [].slice.call(arguments, 1)); - } - - // Get the related axes based on series - axes = getAxis(axis.coll); - - // Get the related axes based options.*Axis setting #2810 - axes2 = (axis.isXAxis ? chart.yAxis : chart.xAxis); - each(axes2, function(A) { - if (defined(A.options.id) ? A.options.id.indexOf('navigator') === -1 : true) { - var a = (A.isXAxis ? 'yAxis' : 'xAxis'), - rax = (defined(A.options[a]) ? chart[a][A.options[a]] : chart[a][0]); - - if (axis === rax) { - axes.push(A); - } - } - }); - - - // Remove duplicates in the axes array. If there are no axes in the axes array, - // we are adding an axis without data, so we need to populate this with grid - // lines (#2796). - uniqueAxes = axes.length ? [] : [axis.isXAxis ? chart.yAxis[0] : chart.xAxis[0]]; // #3742 - each(axes, function(axis2) { - if ( - inArray(axis2, uniqueAxes) === -1 && - // Do not draw on axis which overlap completely. #5424 - !H.find(uniqueAxes, function(unique) { - return unique.pos === axis2.pos && unique.len && axis2.len; - }) - ) { - uniqueAxes.push(axis2); - } - }); - - transVal = pick(translatedValue, axis.translate(value, null, null, old)); - if (isNumber(transVal)) { - if (axis.horiz) { - each(uniqueAxes, function(axis2) { - var skip; - - y1 = axis2.pos; - y2 = y1 + axis2.len; - x1 = x2 = Math.round(transVal + axis.transB); - - if (x1 < axisLeft || x1 > axisLeft + axis.width) { // outside plot area - if (force) { - x1 = x2 = Math.min(Math.max(axisLeft, x1), axisLeft + axis.width); - } else { - skip = true; - } - } - if (!skip) { - result.push('M', x1, y1, 'L', x2, y2); - } - }); - } else { - each(uniqueAxes, function(axis2) { - var skip; - - x1 = axis2.pos; - x2 = x1 + axis2.len; - y1 = y2 = Math.round(axisTop + axis.height - transVal); - - if (y1 < axisTop || y1 > axisTop + axis.height) { // outside plot area - if (force) { - y1 = y2 = Math.min(Math.max(axisTop, y1), axis.top + axis.height); - } else { - skip = true; - } - } - if (!skip) { - result.push('M', x1, y1, 'L', x2, y2); - } - }); - } - } - return result.length > 0 ? - renderer.crispPolyLine(result, lineWidth || 1) : - null; // #3557 getPlotLinePath in regular Highcharts also returns null - }); - - // Function to crisp a line with multiple segments - SVGRenderer.prototype.crispPolyLine = function(points, width) { - // points format: ['M', 0, 0, 'L', 100, 0] - // normalize to a crisp line - var i; - for (i = 0; i < points.length; i = i + 6) { - if (points[i + 1] === points[i + 4]) { - // Substract due to #1129. Now bottom and left axis gridlines behave the same. - points[i + 1] = points[i + 4] = Math.round(points[i + 1]) - (width % 2 / 2); - } - if (points[i + 2] === points[i + 5]) { - points[i + 2] = points[i + 5] = Math.round(points[i + 2]) + (width % 2 / 2); - } - } - return points; - }; - - if (Renderer === VMLRenderer) { - VMLRenderer.prototype.crispPolyLine = SVGRenderer.prototype.crispPolyLine; - } - - - // Wrapper to hide the label - wrap(Axis.prototype, 'hideCrosshair', function(proceed, i) { - - proceed.call(this, i); - - if (this.crossLabel) { - this.crossLabel = this.crossLabel.hide(); - } - }); - - // Wrapper to draw the label - wrap(Axis.prototype, 'drawCrosshair', function(proceed, e, point) { - - // Draw the crosshair - proceed.call(this, e, point); - - // Check if the label has to be drawn - if (!defined(this.crosshair.label) || !this.crosshair.label.enabled || !this.cross) { - return; - } - - var chart = this.chart, - options = this.options.crosshair.label, // the label's options - horiz = this.horiz, // axis orientation - opposite = this.opposite, // axis position - left = this.left, // left position - top = this.top, // top position - crossLabel = this.crossLabel, // reference to the svgElement - posx, - posy, - crossBox, - formatOption = options.format, - formatFormat = '', - limit, - align, - tickInside = this.options.tickPosition === 'inside', - snap = this.crosshair.snap !== false, - value, - offset = 0; - - // Use last available event (#5287) - if (!e) { - e = this.cross && this.cross.e; - } - - align = (horiz ? 'center' : opposite ? - (this.labelAlign === 'right' ? 'right' : 'left') : - (this.labelAlign === 'left' ? 'left' : 'center')); - - // If the label does not exist yet, create it. - if (!crossLabel) { - crossLabel = this.crossLabel = chart.renderer.label(null, null, null, options.shape || 'callout') - .addClass('highcharts-crosshair-label' + - (this.series[0] && ' highcharts-color-' + this.series[0].colorIndex)) - .attr({ - align: options.align || align, - padding: pick(options.padding, 8), - r: pick(options.borderRadius, 3), - zIndex: 2 - }) - .add(this.labelGroup); - - - // Presentational - crossLabel - .attr({ - fill: options.backgroundColor || - (this.series[0] && this.series[0].color) || '#666666', - stroke: options.borderColor || '', - 'stroke-width': options.borderWidth || 0 - }) - .css(extend({ - color: '#ffffff', - fontWeight: 'normal', - fontSize: '11px', - textAlign: 'center' - }, options.style)); - - } - - if (horiz) { - posx = snap ? point.plotX + left : e.chartX; - posy = top + (opposite ? 0 : this.height); - } else { - posx = opposite ? this.width + left : 0; - posy = snap ? point.plotY + top : e.chartY; - } - - if (!formatOption && !options.formatter) { - if (this.isDatetimeAxis) { - formatFormat = '%b %d, %Y'; - } - formatOption = '{value' + (formatFormat ? ':' + formatFormat : '') + '}'; - } - - // Show the label - value = snap ? point[this.isXAxis ? 'x' : 'y'] : this.toValue(horiz ? e.chartX : e.chartY); - crossLabel.attr({ - text: formatOption ? format(formatOption, { - value: value - }) : options.formatter.call(this, value), - x: posx, - y: posy, - visibility: 'visible' - }); - - crossBox = crossLabel.getBBox(); - - // now it is placed we can correct its position - if (horiz) { - if ((tickInside && !opposite) || (!tickInside && opposite)) { - posy = crossLabel.y - crossBox.height; - } - } else { - posy = crossLabel.y - (crossBox.height / 2); - } - - // check the edges - if (horiz) { - limit = { - left: left - crossBox.x, - right: left + this.width - crossBox.x - }; - } else { - limit = { - left: this.labelAlign === 'left' ? left : 0, - right: this.labelAlign === 'right' ? left + this.width : chart.chartWidth - }; - } - - // left edge - if (crossLabel.translateX < limit.left) { - offset = limit.left - crossLabel.translateX; - } - // right edge - if (crossLabel.translateX + crossBox.width >= limit.right) { - offset = -(crossLabel.translateX + crossBox.width - limit.right); - } - - // show the crosslabel - crossLabel.attr({ - x: posx + offset, - y: posy, - // First set x and y, then anchorX and anchorY, when box is actually calculated, #5702 - anchorX: horiz ? posx : (this.opposite ? 0 : chart.chartWidth), - anchorY: horiz ? (this.opposite ? chart.chartHeight : 0) : posy + crossBox.height / 2 - }); - }); - - /* **************************************************************************** - * Start value compare logic * - *****************************************************************************/ - - /** - * Extend series.init by adding a method to modify the y value used for plotting - * on the y axis. This method is called both from the axis when finding dataMin - * and dataMax, and from the series.translate method. - */ - seriesProto.init = function() { - - // Call base method - seriesInit.apply(this, arguments); - - // Set comparison mode - this.setCompare(this.options.compare); - }; - - /** - * Highstock only. Set the {@link - * http://api.highcharts.com/highstock/plotOptions.series.compare| - * compare} mode of the series after render time. In most cases it is more - * useful running {@link Axis#setCompare} on the X axis to update all its - * series. - * - * @function setCompare - * @memberOf Series.prototype - * - * @param {String} compare - * Can be one of `null`, `"percent"` or `"value"`. - */ - seriesProto.setCompare = function(compare) { - - // Set or unset the modifyValue method - this.modifyValue = (compare === 'value' || compare === 'percent') ? function(value, point) { - var compareValue = this.compareValue; - - if (value !== undefined && compareValue !== undefined) { // #2601, #5814 - - // Get the modified value - if (compare === 'value') { - value -= compareValue; - - // Compare percent - } else { - value = 100 * (value / compareValue) - - (this.options.compareBase === 100 ? 0 : 100); - } - - // record for tooltip etc. - if (point) { - point.change = value; - } - - return value; - } - } : null; - - // Survive to export, #5485 - this.userOptions.compare = compare; - - // Mark dirty - if (this.chart.hasRendered) { - this.isDirty = true; - } - - }; - - /** - * Extend series.processData by finding the first y value in the plot area, - * used for comparing the following values - */ - seriesProto.processData = function() { - var series = this, - i, - keyIndex = -1, - processedXData, - processedYData, - compareStart = series.options.compareStart === true ? 0 : 1, - length, - compareValue; - - // call base method - seriesProcessData.apply(this, arguments); - - if (series.xAxis && series.processedYData) { // not pies - - // local variables - processedXData = series.processedXData; - processedYData = series.processedYData; - length = processedYData.length; - - // For series with more than one value (range, OHLC etc), compare against - // close or the pointValKey (#4922, #3112) - if (series.pointArrayMap) { - // Use close if present (#3112) - keyIndex = inArray('close', series.pointArrayMap); - if (keyIndex === -1) { - keyIndex = inArray(series.pointValKey || 'y', series.pointArrayMap); - } - } - - // find the first value for comparison - for (i = 0; i < length - compareStart; i++) { - compareValue = processedYData[i] && keyIndex > -1 ? - processedYData[i][keyIndex] : - processedYData[i]; - if ( - isNumber(compareValue) && - processedXData[i + compareStart] >= series.xAxis.min && - compareValue !== 0 - ) { - series.compareValue = compareValue; - break; - } - } - } - }; - - /** - * Modify series extremes - */ - wrap(seriesProto, 'getExtremes', function(proceed) { - var extremes; - - proceed.apply(this, [].slice.call(arguments, 1)); - - if (this.modifyValue) { - extremes = [this.modifyValue(this.dataMin), this.modifyValue(this.dataMax)]; - this.dataMin = arrayMin(extremes); - this.dataMax = arrayMax(extremes); - } - }); - - /** - * Highstock only. Set the compare mode on all series belonging to an Y axis - * after render time. - * - * @param {String} compare - * The compare mode. Can be one of `null`, `"value"` or `"percent"`. - * @param {Boolean} [redraw=true] - * Whether to redraw the chart or to wait for a later call to {@link - * Chart#redraw}, - * - * @function setCompare - * @memberOf Axis.prototype - * - * @see {@link https://api.highcharts.com/highstock/series.plotOptions.compare| - * series.plotOptions.compare} - * - * @sample stock/members/axis-setcompare/ - * Set compoare - */ - Axis.prototype.setCompare = function(compare, redraw) { - if (!this.isXAxis) { - each(this.series, function(series) { - series.setCompare(compare); - }); - if (pick(redraw, true)) { - this.chart.redraw(); - } - } - }; - - /** - * Extend the tooltip formatter by adding support for the point.change variable - * as well as the changeDecimals option - */ - Point.prototype.tooltipFormatter = function(pointFormat) { - var point = this; - - pointFormat = pointFormat.replace( - '{point.change}', - (point.change > 0 ? '+' : '') + - H.numberFormat(point.change, pick(point.series.tooltipOptions.changeDecimals, 2)) - ); - - return pointTooltipFormatter.apply(this, [pointFormat]); - }; - - /* **************************************************************************** - * End value compare logic * - *****************************************************************************/ - - - /** - * Extend the Series prototype to create a separate series clip box. This is - * related to using multiple panes, and a future pane logic should incorporate - * this feature (#2754). - */ - wrap(Series.prototype, 'render', function(proceed) { - // Only do this on not 3d (#2939, #5904) nor polar (#6057) charts, and only - // if the series type handles clipping in the animate method (#2975). - if (!(this.chart.is3d && this.chart.is3d()) && - !this.chart.polar && - this.xAxis && - !this.xAxis.isRadial // Gauge, #6192 - ) { - - // First render, initial clip box - if (!this.clipBox && this.animate) { - this.clipBox = merge(this.chart.clipBox); - this.clipBox.width = this.xAxis.len; - this.clipBox.height = this.yAxis.len; - - // On redrawing, resizing etc, update the clip rectangle - } else if (this.chart[this.sharedClipKey]) { - this.chart[this.sharedClipKey].attr({ - width: this.xAxis.len, - height: this.yAxis.len - }); - // #3111 - } else if (this.clipBox) { - this.clipBox.width = this.xAxis.len; - this.clipBox.height = this.yAxis.len; - } - } - proceed.call(this); - }); - - wrap(Chart.prototype, 'getSelectedPoints', function(proceed) { - var points = proceed.call(this); - - each(this.series, function(serie) { - // series.points - for grouped points (#6445) - if (serie.hasGroupedData) { - points = points.concat(grep(serie.points || [], function(point) { - return point.selected; - })); - } - }); - return points; - }); - - wrap(Chart.prototype, 'update', function(proceed, options) { - // Use case: enabling scrollbar from a disabled state. - // Scrollbar needs to be initialized from a controller, Navigator in this - // case (#6615) - if ('scrollbar' in options && this.navigator) { - merge(true, this.options.scrollbar, options.scrollbar); - this.navigator.update({}, false); - delete options.scrollbar; - } - - return proceed.apply(this, Array.prototype.slice.call(arguments, 1)); - }); - - }(Highcharts)); - (function() { - - - }()); - return Highcharts -})); diff --git a/admin/js/angular-highcharts/sankey.js b/admin/js/angular-highcharts/sankey.js index 8947cb79..9c93e6f9 100644 --- a/admin/js/angular-highcharts/sankey.js +++ b/admin/js/angular-highcharts/sankey.js @@ -1,17 +1,38 @@ /* - Highcharts JS v6.0.4 (2017-12-15) + Highcharts JS v9.1.2 (2021-06-16) + Sankey diagram module - (c) 2010-2017 Torstein Honsi + (c) 2010-2021 Torstein Honsi License: www.highcharts.com/license */ -(function(k){"object"===typeof module&&module.exports?module.exports=k:k(Highcharts)})(function(k){(function(g){var k=g.defined,d=g.each,w=g.extend,x=g.seriesType,r=g.Point;x("sankey","column",{colorByPoint:!0,curveFactor:.33,dataLabels:{enabled:!0,backgroundColor:"none",crop:!1,nodeFormat:void 0,nodeFormatter:function(){return this.point.name},format:void 0,formatter:function(){return""},inside:!0},linkOpacity:.5,nodeWidth:20,nodePadding:10,showInLegend:!1,states:{hover:{linkOpacity:1}},tooltip:{followPointer:!0, -headerFormat:'\x3cspan style\x3d"font-size: 0.85em"\x3e{series.name}\x3c/span\x3e\x3cbr/\x3e',pointFormat:"{point.fromNode.name} \u2192 {point.toNode.name}: \x3cb\x3e{point.weight}\x3c/b\x3e\x3cbr/\x3e",nodeFormat:"{point.name}: \x3cb\x3e{point.sum}\x3c/b\x3e\x3cbr/\x3e"}},{isCartesian:!1,forceDL:!0,createNode:function(c){function a(a,b){return g.find(a,function(a){return a.id===b})}var b=a(this.nodes,c),e;b||(e=this.options.nodes&&a(this.options.nodes,c),b=(new r).init(this,w({className:"highcharts-node", -isNode:!0,id:c,y:1},e)),b.linksTo=[],b.linksFrom=[],b.formatPrefix="node",b.name=b.name||b.id,b.getSum=function(){var a=0,c=0;d(b.linksTo,function(c){a+=c.weight});d(b.linksFrom,function(a){c+=a.weight});return Math.max(a,c)},b.offset=function(a,c){for(var f=0,e=0;e -b&&(b=f.fromNode.column);a.column=b+1}c[a.column]||(c[a.column]=this.createNodeColumn());c[a.column].push(a)},this);return c},pointAttribs:function(c,a){var b=this.options.linkOpacity;a&&(b=this.options.states[a].linkOpacity||b);return{fill:c.isNode?c.color:g.color(c.color).setOpacity(b).get()}},generatePoints:function(){var c={};g.Series.prototype.generatePoints.call(this);this.nodes||(this.nodes=[]);this.colorCounter=0;d(this.nodes,function(a){a.linksFrom.length=0;a.linksTo.length=0});d(this.points, -function(a){k(a.from)&&(c[a.from]||(c[a.from]=this.createNode(a.from)),c[a.from].linksFrom.push(a),a.fromNode=c[a.from],a.color=a.options.color||c[a.from].color);k(a.to)&&(c[a.to]||(c[a.to]=this.createNode(a.to)),c[a.to].linksTo.push(a),a.toNode=c[a.to]);a.name=a.name||a.id},this)},translate:function(){this.processedXData||this.processData();this.generatePoints();this.nodeColumns=this.createNodeColumns();var c=this.chart,a=c.inverted,b=this.options,e=0,f=b.nodeWidth,g=this.nodeColumns,k=(c.plotSizeX- -f)/(g.length-1),t=(a?-k:k)*b.curveFactor,m=Infinity;d(this.nodeColumns,function(a){m=Math.min(m,(c.plotSizeY-(a.length-1)*b.nodePadding)/a.sum())});d(this.nodeColumns,function(b){d(b,function(l){var r=l.getSum(),u=r*m,v=b.top(m)+b.offset(l,m),n=a?c.plotSizeX-e:e;l.sum=r;l.shapeType="rect";l.shapeArgs=a?{x:n-f,y:c.plotSizeY-v-u,width:f,height:u}:{x:n,y:v,width:f,height:u};l.shapeArgs.display=l.hasShape()?"":"none";l.plotY=1;d(l.linksFrom,function(b){var d=b.weight*m,e=l.offset(b,"linksFrom")*m,e=v+ -e,h=b.toNode,p=g[h.column].top(m)+h.offset(b,"linksTo")*m+g[h.column].offset(h,m),q=f,h=h.column*k,r=b.outgoing;a&&(e=c.plotSizeY-e,p=c.plotSizeY-p,h=c.plotSizeX-h,q=-q,d=-d);b.shapeType="path";b.shapeArgs={d:["M",n+q,e,"C",n+q+t,e,h-t,p,h,p,"L",h+(r?q:0),p+d/2,"L",h,p+d,"C",h-t,p+d,n+q+t,e+d,n+q,e+d,"z"]};b.dlBox={x:n+(h-n+q)/2,y:e+(p-e)/2,height:d,width:0};b.y=b.plotY=1;b.color||(b.color=l.color)})});e+=k},this)},render:function(){var c=this.points;this.points=this.points.concat(this.nodes);g.seriesTypes.column.prototype.render.call(this); -this.points=c},animate:g.Series.prototype.animate},{getClassName:function(){return"highcharts-link "+r.prototype.getClassName.call(this)},isValid:function(){return this.isNode||"number"===typeof this.weight}})})(k)}); +'use strict';(function(c){"object"===typeof module&&module.exports?(c["default"]=c,module.exports=c):"function"===typeof define&&define.amd?define("highcharts/modules/sankey",["highcharts"],function(q){c(q);c.Highcharts=q;return c}):c("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(c){function q(c,f,h,k){c.hasOwnProperty(f)||(c[f]=k.apply(null,h))}c=c?c._modules:{};q(c,"Mixins/Nodes.js",[c["Core/Globals.js"],c["Core/Series/Point.js"],c["Core/Series/Series.js"],c["Core/Utilities.js"]], +function(c,f,h,k){var p=k.defined,g=k.extend,e=k.find,n=k.pick;return c.NodesMixin={createNode:function(d){function b(a,b){return e(a,function(a){return a.id===b})}var a=b(this.nodes,d),c=this.pointClass;if(!a){var f=this.options.nodes&&b(this.options.nodes,d);a=(new c).init(this,g({className:"highcharts-node",isNode:!0,id:d,y:1},f));a.linksTo=[];a.linksFrom=[];a.formatPrefix="node";a.name=a.name||a.options.id||"";a.mass=n(a.options.mass,a.options.marker&&a.options.marker.radius,this.options.marker&& +this.options.marker.radius,4);a.getSum=function(){var b=0,d=0;a.linksTo.forEach(function(a){b+=a.weight});a.linksFrom.forEach(function(a){d+=a.weight});return Math.max(b,d)};a.offset=function(b,d){for(var c=0,e=0;ed){var e=l.fromNode;d=e.column}}b.column=d+1;e&&"hanging"===e.options.layout&&(b.hangsFrom=e,c=-1,L(e.linksFrom,function(a,d){(a=a.toNode===b)&&(c=d);return a}),b.column+=c)}a[b.column]||(a[b.column]=this.createNodeColumn()); +a[b.column].push(b)},this);for(var b=0;bthis.chart.plotSizeY&&(a=this.chart.plotSizeY/b)}return a};e.prototype.hasData=function(){return!!this.processedXData.length};e.prototype.pointAttribs=function(a,b){if(!a)return{};var d=this,e=d.mapOptionsToLevel[(a.isNode?a.level:a.fromNode.level)||0]||{},l=a.options,f=e.states&&e.states[b||""]||{};b=["colorByPoint","borderColor","borderWidth","linkOpacity"].reduce(function(a, +b){a[b]=t(f[b],l[b],e[b],d.options[b]);return a},{});var w=t(f.color,l.color,b.colorByPoint?a.color:e.color);return a.isNode?{fill:w,stroke:b.borderColor,"stroke-width":b.borderWidth}:{fill:c.parse(w).setOpacity(b.linkOpacity).get()}};e.prototype.render=function(){var a=this.points;this.points=this.points.concat(this.nodes||[]);b.prototype.render.call(this);this.points=a};e.prototype.translate=function(){var b=this,d=function(a){for(var d=a.slice(),l=b.options.minLinkWidth||0,w,x=0,g,I=e.plotSizeY- +f.borderWidth-(a.length-1)*c.nodePadding;a.length;){x=I/a.sum();w=!1;for(g=a.length;g--;)a[g].getSum()*xh+k;e.inverted&&(r=e.plotSizeY-r,b=(e.plotSizeY||0)-b,c=e.plotSizeX-c,k=-k,f=-f,n=h>c);a.shapeType="path";a.linkBase=[r,r+f,b,b+f];if(n&&"number"===typeof b)a.shapeArgs={d:[["M",h+k,r],["C",h+k+g,r,c-g,b,c,b],["L",c+(m?k:0),b+f/2],["L",c,b+f],["C",c-g,b+f,h+k+g,r+f,h+k,r+f],["Z"]]};else if("number"===typeof b){g=c-20-f;m=c-20;n=c;var p=h+k,q=p+20,t=q+f,v=r,u=r+f,G=u+20,C=G+(e.plotHeight-r-f),y=C+20,E=y+f,H= +b,D=H+f,z=D+20,A=y+.7*f,B=n-.7*f,J=p+.7*f;a.shapeArgs={d:[["M",p,v],["C",J,v,t,u-.7*f,t,G],["L",t,C],["C",t,A,J,E,p,E],["L",n,E],["C",B,E,g,A,g,C],["L",g,z],["C",g,D-.7*f,B,H,n,H],["L",n,D],["C",m,D,m,D,m,z],["L",m,C],["C",m,y,m,y,n,y],["L",p,y],["C",q,y,q,y,q,C],["L",q,G],["C",q,u,q,u,p,u],["Z"]]}}a.dlBox={x:h+(c-h+k)/2,y:r+(b-r)/2,height:f,width:0};a.tooltipPos=e.inverted?[e.plotSizeY-a.dlBox.y-f/2,e.plotSizeX-a.dlBox.x]:[a.dlBox.x,a.dlBox.y+f/2];a.y=a.plotY=1;a.color||(a.color=d.color)};e.prototype.translateNode= +function(a,b){var c=this.translationFactor,d=this.chart,f=this.options,g=a.getSum(),l=Math.max(Math.round(g*c),this.options.minLinkWidth),h=Math.round(f.borderWidth)%2/2,k=b.offset(a,c);b=Math.floor(t(k.absoluteTop,b.top(c)+k.relativeTop))+h;h=Math.floor(this.colDistance*a.column+f.borderWidth/2)+h;h=d.inverted?d.plotSizeX-h:h;c=Math.round(this.nodeWidth);if(a.sum=g){a.shapeType="rect";a.nodeX=h;a.nodeY=b;g=h;k=b;var m=a.options.width||f.width||c,n=a.options.height||f.height||l;d.inverted&&(g=h-c, +k=d.plotSizeY-b-l,m=a.options.height||f.height||c,n=a.options.width||f.width||l);a.dlOptions=e.getDLOptions({level:this.mapOptionsToLevel[a.level],optionsPoint:a.options});a.plotX=1;a.plotY=1;a.tooltipPos=d.inverted?[d.plotSizeY-k-n/2,d.plotSizeX-g-m/2]:[g+m/2,k+n/2];a.shapeArgs={x:g,y:k,width:m,height:n,display:a.hasShape()?"":"none"}}else a.dlOptions={enabled:!1}};e.defaultOptions=A(b.defaultOptions,{borderWidth:0,colorByPoint:!0,curveFactor:.33,dataLabels:{enabled:!0,backgroundColor:"none",crop:!1, +nodeFormat:void 0,nodeFormatter:function(){return this.point.name},format:void 0,formatter:function(){},inside:!0},inactiveOtherPoints:!0,linkOpacity:.5,minLinkWidth:0,nodeWidth:20,nodePadding:10,showInLegend:!1,states:{hover:{linkOpacity:1},inactive:{linkOpacity:.1,opacity:.1,animation:{duration:50}}},tooltip:{followPointer:!0,headerFormat:'{series.name}
',pointFormat:"{point.fromNode.name} \u2192 {point.toNode.name}: {point.weight}
",nodeFormat:"{point.name}: {point.sum}
"}}); +return e}(b);g(e.prototype,{animate:d.prototype.animate,createNode:h.createNode,destroy:h.destroy,forceDL:!0,invertible:!0,isCartesian:!1,orderNodes:!0,pointArrayMap:["from","to"],pointClass:k,searchPoint:f.noop,setData:h.setData});p.registerSeriesType("sankey",e);"";"";return e});q(c,"masters/modules/sankey.src.js",[],function(){})}); +//# sourceMappingURL=sankey.js.map \ No newline at end of file diff --git a/admin/js/angular-highcharts/sankey.js.map b/admin/js/angular-highcharts/sankey.js.map new file mode 100644 index 00000000..6175a1be --- /dev/null +++ b/admin/js/angular-highcharts/sankey.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sankey.js.map","lineCount":37,"mappings":"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","sources":["sankey.src.js"],"names":["factory","module","exports","define","amd","Highcharts","undefined","_registerModule","obj","path","args","fn","hasOwnProperty","apply","_modules","H","Point","Series","U","defined","extend","find","pick","NodesMixin","createNode","id","findById","nodes","node","PointClass","pointClass","options","init","className","isNode","y","linksTo","linksFrom","formatPrefix","name","mass","marker","radius","getSum","node.getSum","sumTo","sumFrom","forEach","link","weight","Math","max","offset","node.offset","point","coll","i","length","hasShape","node.hasShape","outgoing","push","generatePoints","chart","nodeLookup","prototype","call","colorCounter","level","points","from","fromNode","styledMode","colorIndex","color","to","toNode","setData","destroy","arguments","data","concat","setNodeState","state","others","linkOrNode","series","setState","graphic","SeriesRegistry","__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","__","constructor","create","SankeyPoint","_super","_this","linkBase","nodeX","nodeY","applyOptions","SankeyPoint.prototype.applyOptions","x","column","getClassName","SankeyPoint.prototype.getClassName","isValid","SankeyPoint.prototype.isValid","seriesTypes","Color","isArray","isNumber","isObject","merge","result","getColor","index","mapOptionsToLevel","parentColor","parentColorIndex","colors","siblings","chartOptionsChart","getColorByPoint","colorByPoint","colorIndexByPoint","colorCount","colorVariation","key","parse","brighten","get","getLevelOptions","params","levels","converted","defaults","reduce","item","levelIsConstant","setTreeValues","tree","before","idRoot","nodeRoot","mapIdToNode","optionsPoint","childrenTotal","children","levelDynamic","visible","child","newOptions","val","value","isLeaf","updateRootId","rootId","rootNode","userOptions","TreeSeriesMixin","ColumnSeries","relativeLength","stableSort","SankeySeries","colDistance","group","nodePadding","nodeWidth","translationFactor","getDLOptions","SankeySeries.getDLOptions","dataLabels","optionsLevel","style","createNodeColumn","SankeySeries.prototype.createNodeColumn","sum","column.sum","column.offset","factor","totalNodeOffset","height","minLinkWidth","relativeTop","top","column.top","nodeHeight","plotSizeY","createNodeColumns","SankeySeries.prototype.createNodeColumns","columns","fromColumn","layout","hangsFrom","found","SankeySeries.prototype.generatePoints","order","orderNodes","filter","a","getNodePadding","SankeySeries.prototype.getNodePadding","nodeColumns","maxLength","acc","col","hasData","SankeySeries.prototype.hasData","processedXData","pointAttribs","SankeySeries.prototype.pointAttribs","levelOptions","stateOptions","states","values","fill","stroke","borderColor","borderWidth","setOpacity","linkOpacity","render","SankeySeries.prototype.render","translate","SankeySeries.prototype.translate","getColumnTranslationFactor","slice","exceedsMinLinkWidth","remainingHeight","splice","processData","plotSizeX","min","Infinity","borderRadius","linkColor","linkLineWidth","translateNode","linkPoint","isNull","translateLink","allowShadow","SankeySeries.prototype.translateLink","getY","fromOrTo","linkTop","shapeArgs","linkHeight","curvy","inverted","curveFactor","fromY","toY","nodeLeft","nodeW","right","straight","shapeType","x1","bend","x2","x3","x4","x5","x6","fy1","fy2","fy3","y4","plotHeight","y5","y6","ty1","ty2","ty3","cy2","cx1","cx2","dlBox","width","tooltipPos","plotY","SankeySeries.prototype.translateNode","round","crisp","nodeOffset","fromNodeTop","floor","absoluteTop","left","dlOptions","plotX","display","enabled","defaultOptions","backgroundColor","crop","nodeFormat","nodeFormatter","format","formatter","inside","inactiveOtherPoints","showInLegend","hover","inactive","opacity","animation","duration","tooltip","followPointer","headerFormat","pointFormat","animate","forceDL","invertible","isCartesian","pointArrayMap","searchPoint","noop","registerSeriesType"]} \ No newline at end of file diff --git a/admin/js/angular-highcharts/solid-gauge.src.js b/admin/js/angular-highcharts/solid-gauge.src.js deleted file mode 100644 index ea40e361..00000000 --- a/admin/js/angular-highcharts/solid-gauge.src.js +++ /dev/null @@ -1,305 +0,0 @@ -/** - * @license Highcharts JS v5.0.6 (2016-12-07) - * Solid angular gauge module - * - * (c) 2010-2016 Torstein Honsi - * - * License: www.highcharts.com/license - */ -(function(factory) { - if (typeof module === 'object' && module.exports) { - module.exports = factory; - } else { - factory(Highcharts); - } -}(function(Highcharts) { - (function(H) { - /** - * Solid angular gauge module - * - * (c) 2010-2016 Torstein Honsi - * - * License: www.highcharts.com/license - */ - - 'use strict'; - - var pInt = H.pInt, - pick = H.pick, - each = H.each, - isNumber = H.isNumber, - colorAxisMethods; - - // These methods are defined in the ColorAxis object, and copied here. - // If we implement an AMD system we should make ColorAxis a dependency. - colorAxisMethods = { - - - initDataClasses: function(userOptions) { - var axis = this, - chart = this.chart, - dataClasses, - colorCounter = 0, - options = this.options; - this.dataClasses = dataClasses = []; - - each(userOptions.dataClasses, function(dataClass, i) { - var colors; - - dataClass = H.merge(dataClass); - dataClasses.push(dataClass); - if (!dataClass.color) { - if (options.dataClassColor === 'category') { - colors = chart.options.colors; - dataClass.color = colors[colorCounter++]; - // loop back to zero - if (colorCounter === colors.length) { - colorCounter = 0; - } - } else { - dataClass.color = axis.tweenColors(H.color(options.minColor), H.color(options.maxColor), i / (userOptions.dataClasses.length - 1)); - } - } - }); - }, - - initStops: function(userOptions) { - this.stops = userOptions.stops || [ - [0, this.options.minColor], - [1, this.options.maxColor] - ]; - each(this.stops, function(stop) { - stop.color = H.color(stop[1]); - }); - }, - /** - * Translate from a value to a color - */ - toColor: function(value, point) { - var pos, - stops = this.stops, - from, - to, - color, - dataClasses = this.dataClasses, - dataClass, - i; - - if (dataClasses) { - i = dataClasses.length; - while (i--) { - dataClass = dataClasses[i]; - from = dataClass.from; - to = dataClass.to; - if ((from === undefined || value >= from) && (to === undefined || value <= to)) { - color = dataClass.color; - if (point) { - point.dataClass = i; - } - break; - } - } - - } else { - - if (this.isLog) { - value = this.val2lin(value); - } - pos = 1 - ((this.max - value) / (this.max - this.min)); - i = stops.length; - while (i--) { - if (pos > stops[i][0]) { - break; - } - } - from = stops[i] || stops[i + 1]; - to = stops[i + 1] || from; - - // The position within the gradient - pos = 1 - (to[0] - pos) / ((to[0] - from[0]) || 1); - - color = this.tweenColors( - from.color, - to.color, - pos - ); - } - return color; - }, - /* - * Return an intermediate color between two colors, according to pos where 0 - * is the from color and 1 is the to color. - */ - tweenColors: function(from, to, pos) { - // Check for has alpha, because rgba colors perform worse due to lack of - // support in WebKit. - var hasAlpha, - ret; - - // Unsupported color, return to-color (#3920) - if (!to.rgba.length || !from.rgba.length) { - ret = to.input || 'none'; - - // Interpolate - } else { - from = from.rgba; - to = to.rgba; - hasAlpha = (to[3] !== 1 || from[3] !== 1); - ret = (hasAlpha ? 'rgba(' : 'rgb(') + - Math.round(to[0] + (from[0] - to[0]) * (1 - pos)) + ',' + - Math.round(to[1] + (from[1] - to[1]) * (1 - pos)) + ',' + - Math.round(to[2] + (from[2] - to[2]) * (1 - pos)) + - (hasAlpha ? (',' + (to[3] + (from[3] - to[3]) * (1 - pos))) : '') + ')'; - } - return ret; - } - }; - - /** - * Handle animation of the color attributes directly - */ - each(['fill', 'stroke'], function(prop) { - H.Fx.prototype[prop + 'Setter'] = function() { - this.elem.attr( - prop, - colorAxisMethods.tweenColors( - H.color(this.start), - H.color(this.end), - this.pos - ), - null, - true - ); - }; - }); - - // The solidgauge series type - H.seriesType('solidgauge', 'gauge', { - colorByPoint: true - - }, { - - /** - * Extend the translate function to extend the Y axis with the necessary - * decoration (#5895). - */ - translate: function() { - var axis = this.yAxis; - H.extend(axis, colorAxisMethods); - - // Prepare data classes - if (!axis.dataClasses && axis.options.dataClasses) { - axis.initDataClasses(axis.options); - } - axis.initStops(axis.options); - - // Generate points and inherit data label position - H.seriesTypes.gauge.prototype.translate.call(this); - }, - - /** - * Draw the points where each point is one needle - */ - drawPoints: function() { - var series = this, - yAxis = series.yAxis, - center = yAxis.center, - options = series.options, - renderer = series.chart.renderer, - overshoot = options.overshoot, - overshootVal = isNumber(overshoot) ? overshoot / 180 * Math.PI : 0, - thresholdAngleRad; - - // Handle the threshold option - if (isNumber(options.threshold)) { - thresholdAngleRad = yAxis.startAngleRad + yAxis.translate( - options.threshold, - null, - null, - null, - true - ); - } - this.thresholdAngleRad = pick(thresholdAngleRad, yAxis.startAngleRad); - - - each(series.points, function(point) { - var graphic = point.graphic, - rotation = yAxis.startAngleRad + yAxis.translate(point.y, null, null, null, true), - radius = (pInt(pick(point.options.radius, options.radius, 100)) * center[2]) / 200, - innerRadius = (pInt(pick(point.options.innerRadius, options.innerRadius, 60)) * center[2]) / 200, - shapeArgs, - d, - toColor = yAxis.toColor(point.y, point), - axisMinAngle = Math.min(yAxis.startAngleRad, yAxis.endAngleRad), - axisMaxAngle = Math.max(yAxis.startAngleRad, yAxis.endAngleRad), - minAngle, - maxAngle; - - if (toColor === 'none') { // #3708 - toColor = point.color || series.color || 'none'; - } - if (toColor !== 'none') { - point.color = toColor; - } - - // Handle overshoot and clipping to axis max/min - rotation = Math.max(axisMinAngle - overshootVal, Math.min(axisMaxAngle + overshootVal, rotation)); - - // Handle the wrap option - if (options.wrap === false) { - rotation = Math.max(axisMinAngle, Math.min(axisMaxAngle, rotation)); - } - - minAngle = Math.min(rotation, series.thresholdAngleRad); - maxAngle = Math.max(rotation, series.thresholdAngleRad); - - if (maxAngle - minAngle > 2 * Math.PI) { - maxAngle = minAngle + 2 * Math.PI; - } - - point.shapeArgs = shapeArgs = { - x: center[0], - y: center[1], - r: radius, - innerR: innerRadius, - start: minAngle, - end: maxAngle, - fill: toColor - }; - point.startR = radius; // For PieSeries.animate - - if (graphic) { - d = shapeArgs.d; - graphic.animate(shapeArgs); - if (d) { - shapeArgs.d = d; // animate alters it - } - } else { - point.graphic = renderer.arc(shapeArgs) - .addClass('highcharts-point') - .attr({ - fill: toColor, - 'sweep-flag': 0 - }) - .add(series.group); - - - } - }); - }, - - /** - * Extend the pie slice animation by animating from start angle and up - */ - animate: function(init) { - - if (!init) { - this.startAngleRad = this.thresholdAngleRad; - H.seriesTypes.pie.prototype.animate.call(this, init); - } - } - }); - - }(Highcharts)); -}));