Skip to content

Commit

Permalink
Improve terms tokens feedback and accessibility. (#6214)
Browse files Browse the repository at this point in the history
  • Loading branch information
afercia authored Apr 19, 2018
1 parent 473ef22 commit a105592
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 8 deletions.
8 changes: 6 additions & 2 deletions components/form-token-field/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -451,9 +451,11 @@ class FormTokenField extends Component {
return components;
}

renderToken( token ) {
renderToken( token, index, tokens ) {
const value = this.getTokenValue( token );
const status = token.status ? token.status : undefined;
const termPosition = index + 1;
const termsCount = tokens.length;

return (
<Token
Expand All @@ -468,6 +470,8 @@ class FormTokenField extends Component {
onMouseLeave={ token.onMouseLeave }
disabled={ 'error' !== status && this.props.disabled }
messages={ this.props.messages }
termsCount={ termsCount }
termPosition={ termPosition }
/>
);
}
Expand Down Expand Up @@ -583,7 +587,7 @@ FormTokenField.defaultProps = {
messages: {
added: __( 'Item added.' ),
removed: __( 'Item removed.' ),
remove: __( 'Remove item: %s.' ),
remove: __( 'Remove item' ),
},
};

Expand Down
28 changes: 23 additions & 5 deletions components/form-token-field/token.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ import { noop } from 'lodash';
/**
* WordPress dependencies
*/
import { sprintf } from '@wordpress/i18n';
import withInstanceId from '../higher-order/with-instance-id';
import { __, sprintf } from '@wordpress/i18n';

/**
* Internal dependencies
Expand All @@ -25,6 +26,9 @@ function Token( {
onMouseEnter,
onMouseLeave,
messages,
termPosition,
termsCount,
instanceId,
} ) {
const tokenClasses = classnames( 'components-form-token-field__token', {
'is-error': 'error' === status,
Expand All @@ -36,25 +40,39 @@ function Token( {

const onClick = () => onClickRemove( { value } );

const transformedValue = displayTransform( value );
const termPositionAndCount = sprintf(
/* translators: 1: term name, 2: term position in a set of terms, 3: total term set count. */
__( '%1$s (%2$s of %3$s)' ),
transformedValue,
termPosition,
termsCount
);

return (
<span
className={ tokenClasses }
onMouseEnter={ onMouseEnter }
onMouseLeave={ onMouseLeave }
title={ title }
>
<span className="components-form-token-field__token-text">
{ displayTransform( value ) }
<span
className="components-form-token-field__token-text"
id={ `components-form-token-field__token-text-${ instanceId }` }
>
<span className="screen-reader-text">{ termPositionAndCount }</span>
<span aria-hidden="true">{ transformedValue }</span>
</span>

<IconButton
className="components-form-token-field__remove-token"
icon="dismiss"
onClick={ ! disabled && onClick }
label={ sprintf( messages.remove, displayTransform( value ) ) }
label={ messages.remove }
aria-describedby={ `components-form-token-field__token-text-${ instanceId }` }
/>
</span>
);
}

export default Token;
export default withInstanceId( Token );
2 changes: 1 addition & 1 deletion editor/components/post-taxonomies/flat-term-selector.js
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ class FlatTermSelector extends Component {
);
const termAddedLabel = sprintf( _x( '%s added', 'term' ), singularName );
const termRemovedLabel = sprintf( _x( '%s removed', 'term' ), singularName );
const removeTermLabel = sprintf( _x( 'Remove %s: %%s', 'term' ), singularName );
const removeTermLabel = sprintf( _x( 'Remove %s', 'term' ), singularName );

return (
<FormTokenField
Expand Down

0 comments on commit a105592

Please sign in to comment.