mirror of
https://github.com/yangshun/tech-interview-handbook.git
synced 2026-04-26 11:33:33 +08:00
website: move into monorepo
This commit is contained in:
47
apps/website/src/theme/DocItem/Content/index.js
Normal file
47
apps/website/src/theme/DocItem/Content/index.js
Normal file
@@ -0,0 +1,47 @@
|
||||
import React from 'react';
|
||||
import clsx from 'clsx';
|
||||
import { ThemeClassNames } from '@docusaurus/theme-common';
|
||||
import { useDoc } from '@docusaurus/theme-common/internal';
|
||||
import Heading from '@theme/Heading';
|
||||
import MDXContent from '@theme/MDXContent';
|
||||
/**
|
||||
Title can be declared inside md content or declared through
|
||||
front matter and added manually. To make both cases consistent,
|
||||
the added title is added under the same div.markdown block
|
||||
See https://github.com/facebook/docusaurus/pull/4882#issuecomment-853021120
|
||||
|
||||
We render a "synthetic title" if:
|
||||
- user doesn't ask to hide it with front matter
|
||||
- the markdown content does not already contain a top-level h1 heading
|
||||
*/
|
||||
function useSyntheticTitle() {
|
||||
const { metadata, frontMatter, contentTitle } = useDoc();
|
||||
const shouldRender =
|
||||
!frontMatter.hide_title && typeof contentTitle === 'undefined';
|
||||
if (!shouldRender) {
|
||||
return null;
|
||||
}
|
||||
return metadata.title;
|
||||
}
|
||||
export default function DocItemContent({ children }) {
|
||||
const syntheticTitle = useSyntheticTitle();
|
||||
return (
|
||||
<div className={clsx(ThemeClassNames.docs.docMarkdown, 'markdown')}>
|
||||
{syntheticTitle && (
|
||||
<header>
|
||||
<Heading as="h1">{syntheticTitle}</Heading>
|
||||
</header>
|
||||
)}
|
||||
<div className="margin-bottom--lg">
|
||||
<iframe
|
||||
src="https://ghbtns.com/github-btn.html?user=yangshun&repo=tech-interview-handbook&type=star&count=true&size=large"
|
||||
frameBorder={0}
|
||||
width={160}
|
||||
height={30}
|
||||
title="GitHub Stars"
|
||||
/>
|
||||
</div>
|
||||
<MDXContent>{children}</MDXContent>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
59
apps/website/src/theme/DocItem/Layout/index.js
Normal file
59
apps/website/src/theme/DocItem/Layout/index.js
Normal file
@@ -0,0 +1,59 @@
|
||||
import React from 'react';
|
||||
import clsx from 'clsx';
|
||||
import { useWindowSize } from '@docusaurus/theme-common';
|
||||
import { useDoc } from '@docusaurus/theme-common/internal';
|
||||
import DocItemPaginator from '@theme/DocItem/Paginator';
|
||||
import DocVersionBanner from '@theme/DocVersionBanner';
|
||||
import DocVersionBadge from '@theme/DocVersionBadge';
|
||||
import DocItemFooter from '@theme/DocItem/Footer';
|
||||
import DocItemTOCMobile from '@theme/DocItem/TOC/Mobile';
|
||||
import DocItemTOCDesktop from '@theme/DocItem/TOC/Desktop';
|
||||
import DocItemContent from '@theme/DocItem/Content';
|
||||
import DocBreadcrumbs from '@theme/DocBreadcrumbs';
|
||||
import styles from './styles.module.css';
|
||||
import SidebarAd from '../../../components/SidebarAd';
|
||||
|
||||
/**
|
||||
* Decide if the toc should be rendered, on mobile or desktop viewports
|
||||
*/
|
||||
function useDocTOC() {
|
||||
const { frontMatter, toc } = useDoc();
|
||||
const windowSize = useWindowSize();
|
||||
const hidden = frontMatter.hide_table_of_contents;
|
||||
const canRender = !hidden && toc.length > 0;
|
||||
const mobile = canRender ? <DocItemTOCMobile /> : undefined;
|
||||
const desktop =
|
||||
canRender && (windowSize === 'desktop' || windowSize === 'ssr') ? (
|
||||
<DocItemTOCDesktop />
|
||||
) : undefined;
|
||||
return {
|
||||
hidden,
|
||||
mobile,
|
||||
desktop,
|
||||
};
|
||||
}
|
||||
export default function DocItemLayout({ children }) {
|
||||
const docTOC = useDocTOC();
|
||||
return (
|
||||
<div className="row">
|
||||
<div className={clsx('col', !docTOC.hidden && styles.docItemCol)}>
|
||||
<DocVersionBanner />
|
||||
<div className={styles.docItemContainer}>
|
||||
<article>
|
||||
<DocBreadcrumbs />
|
||||
<DocVersionBadge />
|
||||
{docTOC.mobile}
|
||||
<DocItemContent>{children}</DocItemContent>
|
||||
<DocItemFooter />
|
||||
</article>
|
||||
<DocItemPaginator />
|
||||
{/* TIH: Add sidebar */}
|
||||
<div className="margin-top--md">
|
||||
<SidebarAd position="docs_bottom" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{docTOC.desktop && <div className="col col--3">{docTOC.desktop}</div>}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
17
apps/website/src/theme/DocItem/Layout/styles.module.css
Normal file
17
apps/website/src/theme/DocItem/Layout/styles.module.css
Normal file
@@ -0,0 +1,17 @@
|
||||
/* TIH: Add horizontal padding */
|
||||
@media (min-width: 768px) {
|
||||
.docItemContainer {
|
||||
padding: 0 3rem;
|
||||
}
|
||||
}
|
||||
|
||||
.docItemContainer header + *,
|
||||
.docItemContainer article > *:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
@media (min-width: 997px) {
|
||||
.docItemCol {
|
||||
max-width: 75% !important;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user