mirror of
https://ghproxy.net/https://github.com/elementor/one-click-accessibility.git
synced 2026-07-21 12:16:59 +08:00
84 lines
2.5 KiB
JavaScript
84 lines
2.5 KiB
JavaScript
import AlertTitle from '@elementor/ui/AlertTitle';
|
|
import Box from '@elementor/ui/Box';
|
|
import Divider from '@elementor/ui/Divider';
|
|
import Typography from '@elementor/ui/Typography';
|
|
import PropTypes from 'prop-types';
|
|
import { ImagePreview } from '@ea11y-apps/scanner/components/alt-text-form/image-preview';
|
|
import ManageFooterActions from '@ea11y-apps/scanner/components/manage-footer-actions';
|
|
import { ManageItemHeader } from '@ea11y-apps/scanner/components/manage-item-header';
|
|
import {
|
|
AlertWithDisabledState,
|
|
StyledBox,
|
|
} from '@ea11y-apps/scanner/styles/app.styles';
|
|
import { remediationItem } from '@ea11y-apps/scanner/types/remediation-item';
|
|
import {
|
|
focusOnElement,
|
|
removeExistingFocus,
|
|
} from '@ea11y-apps/scanner/utils/focus-on-element';
|
|
import { getElementByXPath } from '@ea11y-apps/scanner/utils/get-element-by-xpath';
|
|
import { useEffect } from '@wordpress/element';
|
|
import { __ } from '@wordpress/i18n';
|
|
|
|
export const ManageAltText = ({ item, current, openEdit }) => {
|
|
const data = JSON.parse(item?.content);
|
|
const node = getElementByXPath(data?.xpath);
|
|
const global = item.global === '1';
|
|
const isActive = global ? item.active_for_page === '1' : item.active === '1';
|
|
|
|
useEffect(() => {
|
|
void (node ? focusOnElement(node) : removeExistingFocus());
|
|
}, [current]);
|
|
|
|
const isDecorative =
|
|
data.attribute_name === 'role' && data.attribute_value === 'presentation';
|
|
|
|
return (
|
|
<StyledBox>
|
|
<Divider />
|
|
<Box>
|
|
<ManageItemHeader
|
|
isActive={isActive}
|
|
openEdit={openEdit}
|
|
global={global}
|
|
/>
|
|
<ImagePreview element={node} />
|
|
</Box>
|
|
{isDecorative ? (
|
|
<AlertWithDisabledState
|
|
color={isActive ? 'info' : 'secondary'}
|
|
disabled={!isActive}
|
|
>
|
|
<Box>
|
|
<AlertTitle>
|
|
{__('Decorative image', 'pojo-accessibility')}
|
|
</AlertTitle>
|
|
{__(
|
|
"(decorative images don't require descriptions)",
|
|
'pojo-accessibility',
|
|
)}
|
|
</Box>
|
|
</AlertWithDisabledState>
|
|
) : (
|
|
<Box>
|
|
<Typography variant="body2" sx={{ marginBlockEnd: 1 }}>
|
|
{__('Alt text', 'pojo-accessibility')}
|
|
</Typography>
|
|
<AlertWithDisabledState
|
|
color={isActive ? 'info' : 'secondary'}
|
|
icon={false}
|
|
disabled={!isActive}
|
|
>
|
|
<Box>{data.attribute_value}</Box>
|
|
</AlertWithDisabledState>
|
|
</Box>
|
|
)}
|
|
<ManageFooterActions item={item} isActive={isActive} />
|
|
</StyledBox>
|
|
);
|
|
};
|
|
|
|
ManageAltText.propTypes = {
|
|
item: remediationItem,
|
|
current: PropTypes.number.isRequired,
|
|
openEdit: PropTypes.func.isRequired,
|
|
};
|