/* * * * (c) 2010-2019 Torstein Honsi * * License: www.highcharts.com/license * * */ 'use strict'; import H from '../parts/Globals.js'; var addEvent = H.addEvent, isNumber = H.isNumber, setOptions = H.setOptions, each = H.each; setOptions({ /** * @optionparent chart */ chart: { /** * Whether to display errors on the chart. When `false`, the errors will * be shown only in the console. * * Requires `debugger.js` module. * * @sample highcharts/chart/display-errors/ * Show errors on chart * * @since 7.0.0 */ displayErrors: true } }); addEvent(H.Chart, 'displayError', function (e) { var chart = this, code = e.code, msg, options = chart.options.chart, renderer = chart.renderer, chartWidth, chartHeight; if (chart.errorElements) { each(chart.errorElements, function (el) { if (el) { el.destroy(); } }); } if (options && options.displayErrors) { chart.errorElements = []; msg = isNumber(code) ? 'Highcharts error #' + code + ': ' + H.errorMessages[code].title + H.errorMessages[code].text : code; chartWidth = chart.chartWidth; chartHeight = chart.chartHeight; // Render red chart frame. chart.errorElements[0] = renderer.rect( 2, 2, chartWidth - 4, chartHeight - 4 ).attr({ 'stroke-width': 4, stroke: '#ff0000', zIndex: 3 }).add(); // Render error message. chart.errorElements[1] = renderer.label( msg, 0, 0, 'rect', null, null, true ).css({ color: '#ffffff', width: chartWidth - 16, padding: 0 }).attr({ fill: '#ff0000', width: chartWidth, padding: 8, zIndex: 10 }).add(); chart.errorElements[1].attr({ y: chartHeight - this.errorElements[1].getBBox().height }); } }); addEvent(H.Chart, 'beforeRedraw', function () { var errorElements = this.errorElements; if (errorElements && errorElements.length) { each(errorElements, function (el) { el.destroy(); }); } this.errorElements = null; });