mirror of
https://github.com/psviderski/uncloud.git
synced 2026-08-26 19:13:34 +00:00
docs: wwizzle breadcrumbs and overwrite base url to /docs
This commit is contained in:
@@ -0,0 +1,23 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import Link from '@docusaurus/Link';
|
||||||
|
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||||
|
import {translate} from '@docusaurus/Translate';
|
||||||
|
import IconHome from '@theme/Icon/Home';
|
||||||
|
import styles from './styles.module.css';
|
||||||
|
export default function HomeBreadcrumbItem() {
|
||||||
|
const homeHref = useBaseUrl('/docs');
|
||||||
|
return (
|
||||||
|
<li className="breadcrumbs__item">
|
||||||
|
<Link
|
||||||
|
aria-label={translate({
|
||||||
|
id: 'theme.docs.breadcrumbs.home',
|
||||||
|
message: 'Home page',
|
||||||
|
description: 'The ARIA label for the home page in the breadcrumbs',
|
||||||
|
})}
|
||||||
|
className="breadcrumbs__link"
|
||||||
|
href={homeHref}>
|
||||||
|
<IconHome className={styles.breadcrumbHomeIcon} />
|
||||||
|
</Link>
|
||||||
|
</li>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
.breadcrumbHomeIcon {
|
||||||
|
position: relative;
|
||||||
|
top: 1px;
|
||||||
|
vertical-align: top;
|
||||||
|
height: 1.1rem;
|
||||||
|
width: 1.1rem;
|
||||||
|
}
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import clsx from 'clsx';
|
||||||
|
import {ThemeClassNames} from '@docusaurus/theme-common';
|
||||||
|
import {useSidebarBreadcrumbs} from '@docusaurus/plugin-content-docs/client';
|
||||||
|
import {useHomePageRoute} from '@docusaurus/theme-common/internal';
|
||||||
|
import Link from '@docusaurus/Link';
|
||||||
|
import {translate} from '@docusaurus/Translate';
|
||||||
|
import HomeBreadcrumbItem from '@theme/DocBreadcrumbs/Items/Home';
|
||||||
|
import styles from './styles.module.css';
|
||||||
|
// TODO move to design system folder
|
||||||
|
function BreadcrumbsItemLink({children, href, isLast}) {
|
||||||
|
const className = 'breadcrumbs__link';
|
||||||
|
if (isLast) {
|
||||||
|
return (
|
||||||
|
<span className={className} itemProp="name">
|
||||||
|
{children}
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return href ? (
|
||||||
|
<Link className={className} href={href} itemProp="item">
|
||||||
|
<span itemProp="name">{children}</span>
|
||||||
|
</Link>
|
||||||
|
) : (
|
||||||
|
// TODO Google search console doesn't like breadcrumb items without href.
|
||||||
|
// The schema doesn't seem to require `id` for each `item`, although Google
|
||||||
|
// insist to infer one, even if it's invalid. Removing `itemProp="item
|
||||||
|
// name"` for now, since I don't know how to properly fix it.
|
||||||
|
// See https://github.com/facebook/docusaurus/issues/7241
|
||||||
|
<span className={className}>{children}</span>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// TODO move to design system folder
|
||||||
|
function BreadcrumbsItem({children, active, index, addMicrodata}) {
|
||||||
|
return (
|
||||||
|
<li
|
||||||
|
{...(addMicrodata && {
|
||||||
|
itemScope: true,
|
||||||
|
itemProp: 'itemListElement',
|
||||||
|
itemType: 'https://schema.org/ListItem',
|
||||||
|
})}
|
||||||
|
className={clsx('breadcrumbs__item', {
|
||||||
|
'breadcrumbs__item--active': active,
|
||||||
|
})}>
|
||||||
|
{children}
|
||||||
|
<meta itemProp="position" content={String(index + 1)} />
|
||||||
|
</li>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
export default function DocBreadcrumbs() {
|
||||||
|
const breadcrumbs = useSidebarBreadcrumbs();
|
||||||
|
const homePageRoute = useHomePageRoute();
|
||||||
|
if (!breadcrumbs) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<nav
|
||||||
|
className={clsx(
|
||||||
|
ThemeClassNames.docs.docBreadcrumbs,
|
||||||
|
styles.breadcrumbsContainer,
|
||||||
|
)}
|
||||||
|
aria-label={translate({
|
||||||
|
id: 'theme.docs.breadcrumbs.navAriaLabel',
|
||||||
|
message: 'Breadcrumbs',
|
||||||
|
description: 'The ARIA label for the breadcrumbs',
|
||||||
|
})}>
|
||||||
|
<ul
|
||||||
|
className="breadcrumbs"
|
||||||
|
itemScope
|
||||||
|
itemType="https://schema.org/BreadcrumbList">
|
||||||
|
{homePageRoute && <HomeBreadcrumbItem />}
|
||||||
|
{breadcrumbs.map((item, idx) => {
|
||||||
|
const isLast = idx === breadcrumbs.length - 1;
|
||||||
|
const href =
|
||||||
|
item.type === 'category' && item.linkUnlisted
|
||||||
|
? undefined
|
||||||
|
: item.href;
|
||||||
|
return (
|
||||||
|
<BreadcrumbsItem
|
||||||
|
key={idx}
|
||||||
|
active={isLast}
|
||||||
|
index={idx}
|
||||||
|
addMicrodata={!!href}>
|
||||||
|
<BreadcrumbsItemLink href={href} isLast={isLast}>
|
||||||
|
{item.label}
|
||||||
|
</BreadcrumbsItemLink>
|
||||||
|
</BreadcrumbsItem>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
.breadcrumbsContainer {
|
||||||
|
--ifm-breadcrumb-size-multiplier: 0.8;
|
||||||
|
margin-bottom: 0.8rem;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user