From 3f6e04380f89905a75b26f9ca2fd0c96ef4bc9a2 Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Wed, 3 Feb 2021 14:06:21 +0300 Subject: [PATCH] fix(v2): make more accessible skip link (#4162) --- .../src/theme/SkipToContent/index.tsx | 42 +++++++++++-------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/packages/docusaurus-theme-classic/src/theme/SkipToContent/index.tsx b/packages/docusaurus-theme-classic/src/theme/SkipToContent/index.tsx index ed5ec122ee..32883e1b37 100644 --- a/packages/docusaurus-theme-classic/src/theme/SkipToContent/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/SkipToContent/index.tsx @@ -5,35 +5,43 @@ * LICENSE file in the root directory of this source tree. */ -import React from 'react'; +import React, {useRef, useEffect} from 'react'; +import {useLocation} from '@docusaurus/router'; import styles from './styles.module.css'; +function programmaticFocus(el) { + el.setAttribute('tabindex', '-1'); + el.focus(); + setTimeout(() => el.removeAttribute('tabindex'), 1000); +} + function SkipToContent(): JSX.Element { - const handleSkip = (e: React.KeyboardEvent) => { - if (e.keyCode !== 13) { - return; - } + const containerRef = useRef(null); + const location = useLocation(); - (document.activeElement as HTMLElement).blur(); + const handleSkip = (e: React.MouseEvent) => { + e.preventDefault(); - const firstMainElement = document.querySelector('main:first-of-type'); + const targetElement = + document.querySelector('main:first-of-type') || + document.querySelector('.main-wrapper'); - if (firstMainElement) { - firstMainElement.scrollIntoView(); + if (targetElement) { + programmaticFocus(targetElement); } }; + useEffect(() => { + programmaticFocus(containerRef.current); + }, [location.pathname]); + return ( - + + ); }