UNPKG

highcharts

Version:
117 lines (116 loc) 3.12 kB
/* * * * Plugin for displaying a message when there is no data visible in chart. * * (c) 2010-2026 Highsoft AS * * Author: Øystein Moseng * * A commercial license may be required depending on use. * See www.highcharts.com/license * * * */ 'use strict'; import AST from '../../Core/Renderer/HTML/AST.js'; import NoDataDefaults from './NoDataDefaults.js'; import { addEvent, extend, merge } from '../../Shared/Utilities.js'; /* * * * Functions * * */ /** * Returns true if there are data points within the plot area now. * * @internal * @function Highcharts.Chart#hasData * @return {boolean|undefined} * True, if there are data points. * @requires modules/no-data-to-display */ function chartHasData() { const chart = this, series = chart.series || []; let i = series.length; while (i--) { if (series[i].hasData() && !series[i].options.isInternal) { return true; } } return chart.loadingShown; // #4588 } /** * Hide the no-data message. * * @internal * @function Highcharts.Chart#hideNoData * @return {void} * @requires modules/no-data-to-display */ function chartHideNoData() { const chart = this; if (chart.noDataLabel) { chart.noDataLabel = chart.noDataLabel.destroy(); } } /** * Display the no-data message. * * @internal * @function Highcharts.Chart#showNoData * @param {string} [str] * An optional message to show in place of the default one * @return {void} * @requires modules/no-data-to-display */ function chartShowNoData(str) { const chart = this, options = chart.options, text = str || (options && options.lang.noData) || '', noDataOptions = options && (options.noData || {}); if (chart.renderer) { // Meaning chart is not destroyed if (!chart.noDataLabel) { chart.noDataLabel = chart.renderer .label(text, 0, 0, void 0, void 0, void 0, noDataOptions.useHTML, void 0, 'no-data') .add(); } if (!chart.styledMode) { chart.noDataLabel .attr(AST.filterUserAttributes(noDataOptions.attr || {})) .css(noDataOptions.style || {}); } chart.noDataLabel.align(extend(chart.noDataLabel.getBBox(), noDataOptions.position || {}), false, 'plotBox'); } } /** @internal */ function compose(ChartClass, highchartsDefaultOptions) { const chartProto = ChartClass.prototype; if (!chartProto.showNoData) { chartProto.hasData = chartHasData; chartProto.hideNoData = chartHideNoData; chartProto.showNoData = chartShowNoData; addEvent(ChartClass, 'render', onChartRender); merge(true, highchartsDefaultOptions, NoDataDefaults); } } /** * Add event listener to handle automatic show or hide the no-data message. * @internal */ function onChartRender() { const chart = this; if (chart.hasData()) { chart.hideNoData(); } else { chart.showNoData(); } } /* * * * Default Export * * */ /** @internal */ const NoDataToDisplay = { compose }; /** @internal */ export default NoDataToDisplay;