Skip to content

Commit 4cc3725

Browse files
committed
fix(v2): make more accessible skip link
1 parent ffb2d29 commit 4cc3725

1 file changed

Lines changed: 25 additions & 17 deletions

File tree

  • packages/docusaurus-theme-classic/src/theme/SkipToContent

packages/docusaurus-theme-classic/src/theme/SkipToContent/index.tsx

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,35 +5,43 @@
55
* LICENSE file in the root directory of this source tree.
66
*/
77

8-
import React from 'react';
8+
import React, {useRef, useEffect} from 'react';
9+
import {useLocation} from '@docusaurus/router';
910

1011
import styles from './styles.module.css';
1112

13+
function programmaticFocus(el) {
14+
el.setAttribute('tabindex', '-1');
15+
el.focus();
16+
setTimeout(() => el.removeAttribute('tabindex'), 1000);
17+
}
18+
1219
function SkipToContent(): JSX.Element {
13-
const handleSkip = (e: React.KeyboardEvent<HTMLButtonElement>) => {
14-
if (e.keyCode !== 13) {
15-
return;
16-
}
20+
const containerRef = useRef(null);
21+
const location = useLocation();
1722

18-
(document.activeElement as HTMLElement).blur();
23+
const handleSkip = (e: React.MouseEvent<HTMLLinkElement>) => {
24+
e.preventDefault();
1925

20-
const firstMainElement = document.querySelector('main:first-of-type');
26+
const targetElement =
27+
document.querySelector('main:first-of-type') ||
28+
document.querySelector('.main-wrapper');
2129

22-
if (firstMainElement) {
23-
firstMainElement.scrollIntoView();
30+
if (targetElement) {
31+
programmaticFocus(targetElement);
2432
}
2533
};
2634

35+
useEffect(() => {
36+
programmaticFocus(containerRef.current);
37+
}, [location.pathname]);
38+
2739
return (
28-
<nav aria-label="Skip navigation links">
29-
<button
30-
type="button"
31-
tabIndex={0}
32-
className={styles.skipToContent}
33-
onKeyDown={handleSkip}>
40+
<div ref={containerRef}>
41+
<a href="#main" className={styles.skipToContent} onClick={handleSkip}>
3442
Skip to main content
35-
</button>
36-
</nav>
43+
</a>
44+
</div>
3745
);
3846
}
3947

0 commit comments

Comments
 (0)