Add a11y features to the line-chart component
- Treat it as an image - Add a title and a description - Hide the axes, just in case
This commit is contained in:
parent
866b74be19
commit
cdb1831ceb
|
@ -37,6 +37,9 @@ export default Component.extend(WindowResizable, {
|
||||||
timeseries: false,
|
timeseries: false,
|
||||||
chartClass: 'is-primary',
|
chartClass: 'is-primary',
|
||||||
|
|
||||||
|
title: 'Line Chart',
|
||||||
|
description: null,
|
||||||
|
|
||||||
// Private Properties
|
// Private Properties
|
||||||
|
|
||||||
width: 0,
|
width: 0,
|
||||||
|
@ -96,6 +99,22 @@ export default Component.extend(WindowResizable, {
|
||||||
return scale;
|
return scale;
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
xRange: computed('data.[]', 'xFormat', 'xProp', 'timeseries', function() {
|
||||||
|
const { xProp, timeseries, data } = this.getProperties('xProp', 'timeseries', 'data');
|
||||||
|
const range = d3Array.extent(data, d => d[xProp]);
|
||||||
|
const formatter = this.xFormat(timeseries);
|
||||||
|
|
||||||
|
return range.map(formatter);
|
||||||
|
}),
|
||||||
|
|
||||||
|
yRange: computed('data.[]', 'yFormat', 'yProp', function() {
|
||||||
|
const yProp = this.get('yProp');
|
||||||
|
const range = d3Array.extent(this.get('data'), d => d[yProp]);
|
||||||
|
const formatter = this.yFormat();
|
||||||
|
|
||||||
|
return range.map(formatter);
|
||||||
|
}),
|
||||||
|
|
||||||
yScale: computed('data.[]', 'yProp', 'xAxisOffset', function() {
|
yScale: computed('data.[]', 'yProp', 'xAxisOffset', function() {
|
||||||
const yProp = this.get('yProp');
|
const yProp = this.get('yProp');
|
||||||
let max = d3Array.max(this.get('data'), d => d[yProp]) || 1;
|
let max = d3Array.max(this.get('data'), d => d[yProp]) || 1;
|
||||||
|
|
|
@ -1,4 +1,13 @@
|
||||||
<svg data-test-line-chart>
|
<svg data-test-line-chart role="img" aria-labelledby="{{concat "title-" elementId}} {{concat "desc-" elementId}}">
|
||||||
|
<title id="{{concat "title-" elementId}}">{{title}}</title>
|
||||||
|
<description id="{{concat "desc-" elementId}}">
|
||||||
|
{{#if description}}
|
||||||
|
{{description}}
|
||||||
|
{{else}}
|
||||||
|
X-axis values range from {{xRange.firstObject}} to {{xRange.lastObject}},
|
||||||
|
and Y-axis values range from {{yRange.firstObject}} to {{yRange.lastObject}}.
|
||||||
|
{{/if}}
|
||||||
|
</description>
|
||||||
<defs>
|
<defs>
|
||||||
<linearGradient x1="0" x2="0" y1="0" y2="1" class="{{chartClass}}" id="{{fillId}}">
|
<linearGradient x1="0" x2="0" y1="0" y2="1" class="{{chartClass}}" id="{{fillId}}">
|
||||||
<stop class="start" offset="0%" />
|
<stop class="start" offset="0%" />
|
||||||
|
@ -14,8 +23,8 @@
|
||||||
<rect class="area" x="0" y="0" width="{{yAxisOffset}}" height="{{xAxisOffset}}" fill="url(#{{fillId}})" clip-path="url(#{{maskId}})" />
|
<rect class="area" x="0" y="0" width="{{yAxisOffset}}" height="{{xAxisOffset}}" fill="url(#{{fillId}})" clip-path="url(#{{maskId}})" />
|
||||||
<rect class="hover-target" x="0" y="0" width="{{yAxisOffset}}" height="{{xAxisOffset}}" />
|
<rect class="hover-target" x="0" y="0" width="{{yAxisOffset}}" height="{{xAxisOffset}}" />
|
||||||
</g>
|
</g>
|
||||||
<g class="x-axis axis" transform="translate(0, {{xAxisOffset}})"></g>
|
<g aria-hidden="true" class="x-axis axis" transform="translate(0, {{xAxisOffset}})"></g>
|
||||||
<g class="y-axis axis" transform="translate({{yAxisOffset}}, 0)"></g>
|
<g aria-hidden="true" class="y-axis axis" transform="translate({{yAxisOffset}}, 0)"></g>
|
||||||
</svg>
|
</svg>
|
||||||
<div class="chart-tooltip is-snappy {{if isActive "active" "inactive"}}" style={{tooltipStyle}}>
|
<div class="chart-tooltip is-snappy {{if isActive "active" "inactive"}}" style={{tooltipStyle}}>
|
||||||
<p>
|
<p>
|
||||||
|
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.6 KiB |
Loading…
Reference in New Issue