mirror of
https://github.com/mastodon/mastodon.git
synced 2025-11-28 02:20:47 +00:00
Improve link a11y when not revealed
This commit is contained in:
parent
cee9147934
commit
df7828e665
|
|
@ -1,6 +1,6 @@
|
||||||
import punycode from 'node:punycode';
|
import punycode from 'node:punycode';
|
||||||
|
|
||||||
import { useCallback, useState } from 'react';
|
import { useCallback, useId, useState } from 'react';
|
||||||
|
|
||||||
import { FormattedMessage } from 'react-intl';
|
import { FormattedMessage } from 'react-intl';
|
||||||
|
|
||||||
|
|
@ -105,6 +105,8 @@ const Card: React.FC<CardProps> = ({ card, sensitive }) => {
|
||||||
setRevealed(true);
|
setRevealed(true);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
const spoilerButtonId = useId();
|
||||||
|
|
||||||
if (card === null) {
|
if (card === null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
@ -193,7 +195,13 @@ const Card: React.FC<CardProps> = ({ card, sensitive }) => {
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
let spoilerButton = (
|
const spoilerButton = (
|
||||||
|
<div
|
||||||
|
className={classNames('spoiler-button', {
|
||||||
|
'spoiler-button--minified': revealed,
|
||||||
|
})}
|
||||||
|
id={spoilerButtonId}
|
||||||
|
>
|
||||||
<button
|
<button
|
||||||
type='button'
|
type='button'
|
||||||
onClick={handleReveal}
|
onClick={handleReveal}
|
||||||
|
|
@ -212,15 +220,6 @@ const Card: React.FC<CardProps> = ({ card, sensitive }) => {
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
);
|
|
||||||
|
|
||||||
spoilerButton = (
|
|
||||||
<div
|
|
||||||
className={classNames('spoiler-button', {
|
|
||||||
'spoiler-button--minified': revealed,
|
|
||||||
})}
|
|
||||||
>
|
|
||||||
{spoilerButton}
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -261,13 +260,15 @@ const Card: React.FC<CardProps> = ({ card, sensitive }) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
// eslint-disable-next-line jsx-a11y/click-events-have-key-events
|
<div className={classNames('status-card', { expanded: largeImage })}>
|
||||||
<div
|
|
||||||
className={classNames('status-card', { expanded: largeImage })}
|
|
||||||
onClick={revealed ? undefined : handleReveal}
|
|
||||||
>
|
|
||||||
{embed}
|
{embed}
|
||||||
<a href={card.get('url')} target='_blank' rel='noopener'>
|
<a
|
||||||
|
href={card.get('url')}
|
||||||
|
target='_blank'
|
||||||
|
rel='noopener'
|
||||||
|
onClick={revealed ? undefined : handleReveal}
|
||||||
|
aria-describedby={revealed ? undefined : spoilerButtonId}
|
||||||
|
>
|
||||||
{description}
|
{description}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user