From 8477e89fe48cc6d59a21a167b85b9140a8ea37b4 Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Sat, 25 Apr 2020 18:25:00 +0300 Subject: [PATCH 1/2] feat(v2): add ability to specify CSS class for navbar item --- .../src/theme/Navbar/index.js | 33 ++++++++++++------- website/docs/theme-classic.md | 1 + website/docusaurus.config.js | 2 +- website/src/css/custom.css | 18 ++++++++++ 4 files changed, 42 insertions(+), 12 deletions(-) diff --git a/packages/docusaurus-theme-classic/src/theme/Navbar/index.js b/packages/docusaurus-theme-classic/src/theme/Navbar/index.js index d7c5d066ece2..7319e420071c 100644 --- a/packages/docusaurus-theme-classic/src/theme/Navbar/index.js +++ b/packages/docusaurus-theme-classic/src/theme/Navbar/index.js @@ -49,9 +49,12 @@ function NavLink({activeBasePath, to, href, label, position, ...props}) { ); } -function NavItem({items, position, ...props}) { +function NavItem({items, position, className, ...props}) { + const navLinkClassNames = (className) => + classnames('navbar__item', 'navbar__link', className); + if (!items) { - return ; + return ; } return ( @@ -60,13 +63,16 @@ function NavItem({items, position, ...props}) { 'dropdown--left': position === 'left', 'dropdown--right': position === 'right', })}> - + {props.label}
    - {items.map((linkItemInner, i) => ( + {items.map(({className, ...linkItemInnerProps}, i) => (
  • - +
  • ))}
@@ -74,26 +80,31 @@ function NavItem({items, position, ...props}) { ); } -function MobileNavItem({items, ...props}) { +function MobileNavItem({items, className, ...props}) { + const navLinkClassNames = (className, isSubList = false) => + classnames('menu__link', className, { + 'menu__link--sublist': isSubList, + }); + if (!items) { return (
  • - +
  • ); } return (
  • - + {props.label}
      - {items.map((linkItemInner, i) => ( + {items.map(({className, ...linkItemInnerProps}, i) => (
    • diff --git a/website/docs/theme-classic.md b/website/docs/theme-classic.md index c6d4ce8afbb8..a77816c8920a 100644 --- a/website/docs/theme-classic.md +++ b/website/docs/theme-classic.md @@ -138,6 +138,7 @@ module.exports = { // To apply the active class styling on all // routes starting with this path. activeBasePath: 'docs', + className: '', // Custom CSS class (for styling any item) }, // ... other links ], diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 1e76f8504084..bcbba5488fab 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -120,8 +120,8 @@ module.exports = { }, { href: 'https://github.com/facebook/docusaurus', - label: 'GitHub', position: 'right', + className: 'header-github-link', }, ], }, diff --git a/website/src/css/custom.css b/website/src/css/custom.css index b45ea0a3a234..433ae3f52335 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -35,3 +35,21 @@ html[data-theme='dark'] .docusaurus-highlight-code-line { .navbar__item.dropdown > .navbar__link { pointer-events: none; } + +.header-github-link:hover { + opacity: 0.6; +} + +.header-github-link:before { + content: ''; + width: 24px; + height: 24px; + display: flex; + background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") + no-repeat; +} + +html[data-theme='dark'] .header-github-link:before { + background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") + no-repeat; +} From 5aabdefc79d89d7bb2f6953ab2c689118c371ee0 Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Sat, 25 Apr 2020 18:41:38 +0300 Subject: [PATCH 2/2] Fix linting issues --- .../src/theme/Navbar/index.js | 46 ++++++++++--------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/packages/docusaurus-theme-classic/src/theme/Navbar/index.js b/packages/docusaurus-theme-classic/src/theme/Navbar/index.js index 7319e420071c..5db5e854c625 100644 --- a/packages/docusaurus-theme-classic/src/theme/Navbar/index.js +++ b/packages/docusaurus-theme-classic/src/theme/Navbar/index.js @@ -50,8 +50,8 @@ function NavLink({activeBasePath, to, href, label, position, ...props}) { } function NavItem({items, position, className, ...props}) { - const navLinkClassNames = (className) => - classnames('navbar__item', 'navbar__link', className); + const navLinkClassNames = (extraClassName) => + classnames('navbar__item', 'navbar__link', extraClassName); if (!items) { return ; @@ -67,22 +67,24 @@ function NavItem({items, position, className, ...props}) { {props.label}
        - {items.map(({className, ...linkItemInnerProps}, i) => ( -
      • - -
      • - ))} + {items.map( + ({className: childItemClassName, ...linkItemInnerProps}, i) => ( +
      • + +
      • + ), + )}
      ); } function MobileNavItem({items, className, ...props}) { - const navLinkClassNames = (className, isSubList = false) => - classnames('menu__link', className, { + const navLinkClassNames = (extraClassName, isSubList = false) => + classnames('menu__link', extraClassName, { 'menu__link--sublist': isSubList, }); @@ -100,15 +102,17 @@ function MobileNavItem({items, className, ...props}) { {props.label}
        - {items.map(({className, ...linkItemInnerProps}, i) => ( -
      • - -
      • - ))} + {items.map( + ({className: childItemClassName, ...linkItemInnerProps}, i) => ( +
      • + +
      • + ), + )}
      );