diff --git a/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.js b/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.js index 38d2ee9c76..1d0080c55b 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.js +++ b/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.js @@ -10,6 +10,7 @@ import classnames from 'classnames'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import useBaseUrl from '@docusaurus/useBaseUrl'; import Link from '@docusaurus/Link'; +import isInternalUrl from '@docusaurus/utils'; // eslint-disable-line import/no-extraneous-dependencies import styles from './styles.module.css'; @@ -70,11 +71,18 @@ function DocSidebarItem({item, onItemClick, collapsible}) { return (
  • + {...(isInternalUrl(href) + ? { + activeClassName: 'menu__link--active', + exact: true, + onClick: onItemClick, + } + : { + target: '_blank', + rel: 'noreferrer noopener', + })}> {label}
  • diff --git a/packages/docusaurus/src/client/exports/Link.js b/packages/docusaurus/src/client/exports/Link.js index 9f40e95e5c..37cfd6cb91 100644 --- a/packages/docusaurus/src/client/exports/Link.js +++ b/packages/docusaurus/src/client/exports/Link.js @@ -7,13 +7,12 @@ import React, {useEffect, useRef} from 'react'; import {NavLink} from 'react-router-dom'; - -const internalRegex = /^\/(?!\/)/; +import isInternalUrl from '@docusaurus/utils'; function Link(props) { const {to, href} = props; const targetLink = to || href; - const isInternal = internalRegex.test(targetLink); + const isInternal = isInternalUrl; const preloaded = useRef(false); const IOSupported = diff --git a/packages/docusaurus/src/client/exports/utils.js b/packages/docusaurus/src/client/exports/utils.js new file mode 100644 index 0000000000..74ed1a1177 --- /dev/null +++ b/packages/docusaurus/src/client/exports/utils.js @@ -0,0 +1,9 @@ +/** + * Copyright (c) 2017-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +export default function isInternalUrl(url) { + return /^\/(?!\/)/.test(url); +}