Skip to content

Commit 4e1f2f4

Browse files
committed
fix: anchors are now not accessible when href is empty or absent
1 parent 1c79bc3 commit 4e1f2f4

File tree

5 files changed

+35
-26
lines changed

5 files changed

+35
-26
lines changed

packages/render-html/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
"dependencies": {
9090
"@jsamr/counter-style": "^2.0.1",
9191
"@jsamr/react-native-li": "^2.3.0",
92-
"@native-html/transient-render-engine": "10.0.0",
92+
"@native-html/transient-render-engine": "10.0.2",
9393
"@types/ramda": "^0.27.40",
9494
"@types/urijs": "^1.19.15",
9595
"prop-types": "^15.5.7",

packages/render-html/src/__tests__/component.render-html.test.tsx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,32 @@ describe('RenderHTML', () => {
141141
act(() => anchor.props.onPress?.({}));
142142
expect(onPress).toHaveBeenCalled();
143143
});
144+
it('should add accessibility features to anchors when href is non-empty', () => {
145+
const { getByTestId } = render(
146+
<RenderHTML
147+
source={{
148+
html: `<a href="https://domain.com">test</a>`
149+
}}
150+
debug={false}
151+
contentWidth={0}
152+
/>
153+
);
154+
expect(getByTestId('a').props.accessibilityRole).toBe('link');
155+
expect(getByTestId('a').props.accessible).toBe(true);
156+
});
157+
it('should not add accessibility features to anchors when href is empty', () => {
158+
const { getByTestId } = render(
159+
<RenderHTML
160+
source={{
161+
html: `<a href="">test</a>`
162+
}}
163+
debug={false}
164+
contentWidth={0}
165+
/>
166+
);
167+
expect(getByTestId('a').props.accessibilityRole).not.toBeDefined();
168+
expect(getByTestId('a').props.accessible).not.toBeDefined();
169+
});
144170
it("should add accessibility role 'header' to headings", () => {
145171
for (const header of ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']) {
146172
const { getByTestId } = render(

packages/render-html/src/elements/AElement.tsx

Lines changed: 0 additions & 10 deletions
This file was deleted.

packages/render-html/src/renderers/ARenderer.tsx

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ import React from 'react';
22
import { InternalMixedRenderer } from '../render/render-types';
33
import { TNode, DocumentContext } from '@native-html/transient-render-engine';
44
import { InternalRendererProps, RenderersProps } from '../shared-types';
5-
import { AccessibilityProps, GestureResponderEvent } from 'react-native';
6-
import AElement from '../elements/AElement';
5+
import { GestureResponderEvent } from 'react-native';
76
import useNormalizedUrl from '../hooks/useNormalizedUrl';
87
import { useDocumentMetadata } from '../context/DocumentMetadataProvider';
98
import { useRendererProps } from '../context/RenderersPropsProvider';
@@ -40,20 +39,14 @@ export function useAElementProps<T extends TNode>(
4039
if (typeof syntheticAnchorOnLinkPress !== 'function') {
4140
return props;
4241
}
43-
const accessibilityProps: AccessibilityProps = {
44-
accessible: true,
45-
accessibilityRole: 'link'
46-
};
4742
return {
4843
...props,
49-
onPress: syntheticAnchorOnLinkPress,
50-
textProps: accessibilityProps,
51-
viewProps: accessibilityProps
44+
onPress: syntheticAnchorOnLinkPress
5245
};
5346
}
5447

5548
const ARenderer: InternalMixedRenderer = (props) => {
56-
return React.createElement(AElement, useAElementProps(props));
49+
return React.createElement(props.TDefaultRenderer, useAElementProps(props));
5750
};
5851

5952
export default ARenderer;

yarn.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4380,9 +4380,9 @@ __metadata:
43804380
languageName: node
43814381
linkType: hard
43824382

4383-
"@native-html/transient-render-engine@npm:10.0.0":
4384-
version: 10.0.0
4385-
resolution: "@native-html/transient-render-engine@npm:10.0.0"
4383+
"@native-html/transient-render-engine@npm:10.0.2":
4384+
version: 10.0.2
4385+
resolution: "@native-html/transient-render-engine@npm:10.0.2"
43864386
dependencies:
43874387
"@native-html/css-processor": 1.10.2
43884388
"@types/ramda": ^0.27.44
@@ -4394,7 +4394,7 @@ __metadata:
43944394
peerDependencies:
43954395
"@types/react-native": "*"
43964396
react-native: ^*
4397-
checksum: 5830444fd08f6db40226fddc583b743452e9386538059fda32e2e20f7bf76b2972c837a12bce82353622f41a2dfd5665ab61071abbf6260c499b4603e79d7777
4397+
checksum: 3d5854625d30ed5b1c451c093ea6130cfd925e8f12d77d5c896895c7d236a4c322a3e9080eb02e5bd104e7e03123837f20a76b7fbe1f309eb3b5d5947f8b5150
43984398
languageName: node
43994399
linkType: hard
44004400

@@ -19965,7 +19965,7 @@ fsevents@^1.2.7:
1996519965
"@jsamr/counter-style": ^2.0.1
1996619966
"@jsamr/react-native-li": ^2.3.0
1996719967
"@microsoft/api-extractor": ^7.14.0
19968-
"@native-html/transient-render-engine": 10.0.0
19968+
"@native-html/transient-render-engine": 10.0.2
1996919969
"@release-it/conventional-changelog": ^2.0.1
1997019970
"@testing-library/react-hooks": ^7.0.0
1997119971
"@testing-library/react-native": ^7.2.0

0 commit comments

Comments
 (0)