feat(cw-button): Add aria controls to CW trigger (#2303)
Add an ID to the CW spoiler input field to give aria-controls a handle on it. Pass that id to the CW trigger button. Modify text icon button component to accept aria controls id value. Add aria-expanded value to text icon button to indicate when it is expanded.gh/stable
parent
948dd26931
commit
995f0ad51c
|
@ -146,7 +146,7 @@ class ComposeForm extends React.PureComponent {
|
||||||
<div className='compose-form'>
|
<div className='compose-form'>
|
||||||
<Collapsable isVisible={this.props.spoiler} fullHeight={50}>
|
<Collapsable isVisible={this.props.spoiler} fullHeight={50}>
|
||||||
<div className="spoiler-input">
|
<div className="spoiler-input">
|
||||||
<input placeholder={intl.formatMessage(messages.spoiler_placeholder)} value={this.props.spoiler_text} onChange={this.handleChangeSpoilerText} onKeyDown={this.handleKeyDown} type="text" className="spoiler-input__input" />
|
<input placeholder={intl.formatMessage(messages.spoiler_placeholder)} value={this.props.spoiler_text} onChange={this.handleChangeSpoilerText} onKeyDown={this.handleKeyDown} type="text" className="spoiler-input__input" id='cw-spoiler-input'/>
|
||||||
</div>
|
</div>
|
||||||
</Collapsable>
|
</Collapsable>
|
||||||
|
|
||||||
|
|
|
@ -13,10 +13,10 @@ class TextIconButton extends React.PureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { label, title, active } = this.props;
|
const { label, title, active, ariaControls } = this.props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<button title={title} aria-label={title} className={`text-icon-button ${active ? 'active' : ''}`} onClick={this.handleClick}>
|
<button title={title} aria-label={title} className={`text-icon-button ${active ? 'active' : ''}`} aria-expanded={active} onClick={this.handleClick} aria-controls={ariaControls}>
|
||||||
{label}
|
{label}
|
||||||
</button>
|
</button>
|
||||||
);
|
);
|
||||||
|
@ -28,7 +28,8 @@ TextIconButton.propTypes = {
|
||||||
label: PropTypes.string.isRequired,
|
label: PropTypes.string.isRequired,
|
||||||
title: PropTypes.string,
|
title: PropTypes.string,
|
||||||
active: PropTypes.bool,
|
active: PropTypes.bool,
|
||||||
onClick: PropTypes.func.isRequired
|
onClick: PropTypes.func.isRequired,
|
||||||
|
ariaControls: PropTypes.string
|
||||||
};
|
};
|
||||||
|
|
||||||
export default TextIconButton;
|
export default TextIconButton;
|
||||||
|
|
|
@ -10,7 +10,8 @@ const messages = defineMessages({
|
||||||
const mapStateToProps = (state, { intl }) => ({
|
const mapStateToProps = (state, { intl }) => ({
|
||||||
label: 'CW',
|
label: 'CW',
|
||||||
title: intl.formatMessage(messages.title),
|
title: intl.formatMessage(messages.title),
|
||||||
active: state.getIn(['compose', 'spoiler'])
|
active: state.getIn(['compose', 'spoiler']),
|
||||||
|
ariaControls: 'cw-spoiler-input'
|
||||||
});
|
});
|
||||||
|
|
||||||
const mapDispatchToProps = dispatch => ({
|
const mapDispatchToProps = dispatch => ({
|
||||||
|
|
Reference in New Issue