diff --git a/assets/src/scripts/d3-rendering/accessibility.js b/assets/src/scripts/d3-rendering/accessibility.js index a2f5ecf69cb5c4d09fd9bb462aa32860fa7aa1ae..2eb765e67419ed0430840cd86b5104e74596bc89 100644 --- a/assets/src/scripts/d3-rendering/accessibility.js +++ b/assets/src/scripts/d3-rendering/accessibility.js @@ -7,9 +7,7 @@ * @param {Boolean} isInteractive * @param {String} idPrefix */ -export const addSVGAccessibility = function(svg, {primaryTitle, secondaryTitle, description, isInteractive, idPrefix}) { - const title = `${primaryTitle}${secondaryTitle ? ` -- ${secondaryTitle}` : ''}`; - +export const addSVGAccessibility = function(svg, {title, description, isInteractive, idPrefix}) { svg.selectAll('title, desc').remove(); let descElement = svg.insert('desc', ':first-child') .html(description); diff --git a/assets/src/scripts/d3-rendering/accessibility.test.js b/assets/src/scripts/d3-rendering/accessibility.test.js index 500261646454f8d65eb5168f8e03b4c88cef55a6..c97d7a2ae01e288d98d15f6a278574c56ecf2613 100644 --- a/assets/src/scripts/d3-rendering/accessibility.test.js +++ b/assets/src/scripts/d3-rendering/accessibility.test.js @@ -17,7 +17,7 @@ describe('svgAccessibility tests', () => { it('Should add a title and desc tags and aria attributes', () => { addSVGAccessibility(svg, { - primaryTitle: 'This is a title', + title: 'This is a title', description: 'This is a description', isInteractive: false, idPrefix: 'prefix' @@ -34,35 +34,15 @@ describe('svgAccessibility tests', () => { expect(svg.attr('aria-describedby')).toContain('prefix-desc'); }); - it('Should add a secondary title if needed and desc tags and aria attributes', () => { - addSVGAccessibility(svg, { - primaryTitle: 'This is a title', - secondaryTitle: 'with a second parameter', - description: 'This is a description', - isInteractive: false, - idPrefix: 'prefix' - }); - - const title = svg.selectAll('title'); - const desc = svg.selectAll('desc'); - - expect(title.size()).toBe(1); - expect(desc.size()).toBe(1); - expect(title.html()).toEqual('This is a title -- with a second parameter'); - expect(desc.html()).toEqual('This is a description'); - expect(svg.attr('aria-labelledby')).toContain('prefix-title'); - expect(svg.attr('aria-describedby')).toContain('prefix-desc'); - }); - it('Should remove the previous title and desc tags when called again', () => { addSVGAccessibility(svg, { - primaryTitle: 'This is a title', + title: 'This is a title', description: 'This is a description', isInteractive: false }); addSVGAccessibility(svg, { - primaryTitle: 'That is a title', + title: 'That is a title', description: 'That is a description', isInteractive: false }); @@ -78,7 +58,7 @@ describe('svgAccessibility tests', () => { it('Should not add a tabindex if isInteractive is false', () => { addSVGAccessibility(svg, { - primaryTitle: 'This is a title', + title: 'This is a title', description: 'This is a description', isInteractive: false }); @@ -87,7 +67,7 @@ describe('svgAccessibility tests', () => { it('Should add a tabindex if isInteractive is true', () => { addSVGAccessibility(svg, { - primaryTitle: 'This is a title', + title: 'This is a title', description: 'This is a description', isInteractive: true }); diff --git a/assets/src/scripts/monitoring-location/components/hydrograph/selectors/legend-data.js b/assets/src/scripts/monitoring-location/components/hydrograph/selectors/legend-data.js index 5f792251ed72b8560129f8755db456c6ebbf368f..b4bc18ac585e6d2a81ccd38c24b48b0d54ce2edf 100644 --- a/assets/src/scripts/monitoring-location/components/hydrograph/selectors/legend-data.js +++ b/assets/src/scripts/monitoring-location/components/hydrograph/selectors/legend-data.js @@ -6,14 +6,14 @@ import {defineLineMarker, defineRectangleMarker, defineCircleMarker, defineTextO import {showFloodLevels} from 'ml/selectors/flood-data-selector'; import {getPrimaryMedianStatisticsData} from 'ml/selectors/hydrograph-data-selector'; -import {isCompareIVDataVisible, isMedianDataVisible} from 'ml/selectors/hydrograph-state-selector'; +import {isCompareIVDataVisible, isMedianDataVisible, + getSelectedSecondaryParameterCode} from 'ml/selectors/hydrograph-state-selector'; import {getUniqueGWKinds} from './discrete-data'; import {getFloodLevelData} from './flood-level-data'; import {getIVUniqueDataKinds, HASH_ID} from './iv-data'; import {getThresholdsInRange} from './thresholds-data'; import {getPrimaryParameter} from './time-series-data'; -import {getSelectedSecondaryParameterCode} from '../../../selectors/hydrograph-state-selector'; const TS_LABEL = { diff --git a/assets/src/scripts/monitoring-location/components/hydrograph/time-series-graph.js b/assets/src/scripts/monitoring-location/components/hydrograph/time-series-graph.js index 9e9d25c904bfda84b63cd929f7367ff465de2864..c92552701ab18aa473d105691d89fa6e911fe65c 100644 --- a/assets/src/scripts/monitoring-location/components/hydrograph/time-series-graph.js +++ b/assets/src/scripts/monitoring-location/components/hydrograph/time-series-graph.js @@ -1,5 +1,5 @@ import {line as d3Line, curveStepAfter} from 'd3-shape'; -import {createStructuredSelector} from 'reselect'; +import {createSelector, createStructuredSelector} from 'reselect'; import config from 'ui/config'; import {link} from 'ui/lib/d3-redux'; @@ -161,6 +161,18 @@ const drawWatermark = function(elem, store) { }, getMainLayout)); }; +/** + * Redux selector helper function that can combine the primary and secondary data titles into a single string. + * @return {String} the concatenated accessibility title when a secondary data parameter is selected, otherwise returns + * the standard primary parameter title. + */ +const combinedAccessibilityTitle = createSelector( + getTitle('primary'), + getTitle('secondary'), + (primaryTitle, secondaryTitle) => { + return `${primaryTitle}${secondaryTitle ? ` -- ${secondaryTitle}` : ''}`; + }); + /* * Initialize the time series svg and other elements but don't render any data * @param {D3 selection} elem @@ -198,8 +210,7 @@ export const initializeTimeSeriesGraph = function(elem, store, siteNo, agencyCod .attr('height', layout.height - layout.margin.bottom); }, getMainLayout)) .call(link(store, addSVGAccessibility, createStructuredSelector({ - primaryTitle: getTitle('primary'), - secondaryTitle: getTitle('secondary'), + title: combinedAccessibilityTitle, description: getDescription, isInteractive: () => true, idPrefix: () => 'hydrograph'