Debugger.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /* *
  2. *
  3. * (c) 2010-2021 Torstein Honsi
  4. *
  5. * License: www.highcharts.com/license
  6. *
  7. * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
  8. *
  9. * */
  10. 'use strict';
  11. import H from '../Core/Globals.js';
  12. import Chart from '../Core/Chart/Chart.js';
  13. import U from '../Core/Utilities.js';
  14. var addEvent = U.addEvent, isNumber = U.isNumber, setOptions = U.setOptions;
  15. setOptions({
  16. /**
  17. * @optionparent chart
  18. */
  19. chart: {
  20. /**
  21. * Whether to display errors on the chart. When `false`, the errors will
  22. * be shown only in the console.
  23. *
  24. * @sample highcharts/chart/display-errors/
  25. * Show errors on chart
  26. *
  27. * @since 7.0.0
  28. * @requires modules/debugger
  29. */
  30. displayErrors: true
  31. }
  32. });
  33. /* eslint-disable no-invalid-this */
  34. addEvent(Chart, 'displayError', function (e) {
  35. var chart = this, code = e.code, msg, options = chart.options.chart, renderer = chart.renderer, chartWidth, chartHeight;
  36. if (chart.errorElements) {
  37. (chart.errorElements).forEach(function (el) {
  38. if (el) {
  39. el.destroy();
  40. }
  41. });
  42. }
  43. if (options && options.displayErrors && renderer) {
  44. chart.errorElements = [];
  45. msg = isNumber(code) ?
  46. ('Highcharts error #' + code + ': ' +
  47. H.errorMessages[code].text) :
  48. code;
  49. chartWidth = chart.chartWidth;
  50. chartHeight = chart.chartHeight;
  51. // Format msg so SVGRenderer can handle it
  52. msg = msg
  53. .replace(/<h1>(.*)<\/h1>/g, '<br><span style="font-size: 24px">$1</span><br>')
  54. .replace(/<p>/g, '')
  55. .replace(/<\/p>/g, '<br>');
  56. // Render red chart frame.
  57. chart.errorElements[0] = renderer.rect(2, 2, chartWidth - 4, chartHeight - 4).attr({
  58. 'stroke-width': 4,
  59. stroke: '#ff0000',
  60. zIndex: 3
  61. }).add();
  62. // Render error message
  63. chart.errorElements[1] = renderer.label(msg, 0, 0, 'rect', void 0, void 0, void 0, void 0, 'debugger').css({
  64. color: '#ffffff',
  65. width: (chartWidth - 16) + 'px',
  66. padding: 0
  67. }).attr({
  68. fill: 'rgba(255, 0, 0, 0.9)',
  69. width: chartWidth,
  70. padding: 8,
  71. zIndex: 10
  72. }).add();
  73. chart.errorElements[1].attr({
  74. y: chartHeight - this.errorElements[1].getBBox().height
  75. });
  76. }
  77. });
  78. addEvent(Chart, 'beforeRedraw', function () {
  79. var errorElements = this.errorElements;
  80. if (errorElements && errorElements.length) {
  81. errorElements.forEach(function (el) {
  82. el.destroy();
  83. });
  84. }
  85. this.errorElements = null;
  86. });