UNPKG

highcharts

Version:
148 lines (147 loc) 4.41 kB
/* * * * (c) 2009-2019 Øystein Moseng * * Utils for dealing with charts. * * License: www.highcharts.com/license * * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!! * * */ 'use strict'; import HTMLUtilities from './htmlUtilities.js'; var stripHTMLTags = HTMLUtilities.stripHTMLTagsFromString; import H from '../../../parts/Globals.js'; var find = H.find; /* eslint-disable valid-jsdoc */ /** * @return {string} */ function getChartTitle(chart) { return stripHTMLTags(chart.options.title.text || chart.langFormat('accessibility.defaultChartTitle', { chart: chart })); } /** * @param {Highcharts.Axis} axis * @return {string} */ function getAxisDescription(axis) { return stripHTMLTags(axis && (axis.userOptions && axis.userOptions.accessibility && axis.userOptions.accessibility.description || axis.axisTitle && axis.axisTitle.textStr || axis.options.id || axis.categories && 'categories' || axis.isDatetimeAxis && 'Time' || 'values')); } /** * Get the DOM element for the first point in the series. * @private * @param {Highcharts.Series} series * The series to get element for. * @return {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement|undefined} * The DOM element for the point. */ function getSeriesFirstPointElement(series) { if (series.points && series.points.length && series.points[0].graphic) { return series.points[0].graphic.element; } } /** * Get the DOM element for the series that we put accessibility info on. * @private * @param {Highcharts.Series} series * The series to get element for. * @return {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement|undefined} * The DOM element for the series */ function getSeriesA11yElement(series) { var firstPointEl = getSeriesFirstPointElement(series); return (firstPointEl && firstPointEl.parentNode || series.graph && series.graph.element || series.group && series.group.element); // Could be tracker series depending on series type } /** * Remove aria-hidden from element. Also unhides parents of the element, and * hides siblings that are not explicitly unhidden. * @private * @param {Highcharts.Chart} chart * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement} element * @return {void} */ function unhideChartElementFromAT(chart, element) { element.setAttribute('aria-hidden', false); if (element === chart.renderTo || !element.parentNode) { return; } // Hide siblings unless their hidden state is already explicitly set Array.prototype.forEach.call(element.parentNode.childNodes, function (node) { if (!node.hasAttribute('aria-hidden')) { node.setAttribute('aria-hidden', true); } }); // Repeat for parent unhideChartElementFromAT(chart, element.parentNode); } /** * Hide series from screen readers. * @private * @param {Highcharts.Series} series * The series to hide * @return {void} */ function hideSeriesFromAT(series) { var seriesEl = getSeriesA11yElement(series); if (seriesEl) { seriesEl.setAttribute('aria-hidden', true); } } /** * Get series objects by series name. * @private * @param {Highcharts.Chart} chart * @param {string} name * @return {Array<Highcharts.Series>} */ function getSeriesFromName(chart, name) { if (!name) { return chart.series; } return (chart.series || []).filter(function (s) { return s.name === name; }); } /** * Get point in a series from x/y values. * @private * @param {Array<Highcharts.Series>} series * @param {number} x * @param {number} y * @return {Highcharts.Point|undefined} */ function getPointFromXY(series, x, y) { var i = series.length, res; while (i--) { res = find(series[i].points || [], function (p) { return p.x === x && p.y === y; }); if (res) { return res; } } } var ChartUtilities = { getChartTitle: getChartTitle, getAxisDescription: getAxisDescription, getPointFromXY: getPointFromXY, getSeriesFirstPointElement: getSeriesFirstPointElement, getSeriesFromName: getSeriesFromName, getSeriesA11yElement: getSeriesA11yElement, unhideChartElementFromAT: unhideChartElementFromAT, hideSeriesFromAT: hideSeriesFromAT }; export default ChartUtilities;