@docusaurus/theme-classic 0.0.0-5180 → 0.0.0-5185
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/getSwizzleConfig.js +5 -5
- package/lib/theme/AnnouncementBar/index.js +1 -1
- package/lib/theme/BlogListPage/index.js +2 -11
- package/lib/theme/BlogPostItem/Container/index.d.ts +9 -0
- package/lib/theme/BlogPostItem/Container/index.js +26 -0
- package/lib/theme/BlogPostItem/Content/index.d.ts +9 -0
- package/lib/theme/BlogPostItem/Content/index.js +23 -0
- package/lib/theme/BlogPostItem/Footer/ReadMoreLink/index.d.ts +9 -0
- package/lib/theme/BlogPostItem/Footer/ReadMoreLink/index.js +38 -0
- package/lib/theme/BlogPostItem/Footer/index.d.ts +8 -0
- package/lib/theme/BlogPostItem/Footer/index.js +52 -0
- package/lib/theme/BlogPostItem/Footer/styles.module.css +10 -0
- package/lib/theme/BlogPostItem/Header/Author/index.d.ts +9 -0
- package/lib/theme/{BlogPostAuthor → BlogPostItem/Header/Author}/index.js +3 -2
- package/lib/theme/BlogPostItem/Header/Authors/index.d.ts +9 -0
- package/{src/theme/BlogPostAuthors/index.tsx → lib/theme/BlogPostItem/Header/Authors/index.js} +9 -10
- package/lib/theme/{BlogPostAuthors → BlogPostItem/Header/Authors}/styles.module.css +0 -0
- package/lib/theme/{BlogPostAuthor → BlogPostItem/Header/Info}/index.d.ts +2 -2
- package/lib/theme/BlogPostItem/Header/Info/index.js +60 -0
- package/lib/theme/BlogPostItem/Header/Info/styles.module.css +10 -0
- package/lib/theme/{BlogPostAuthors → BlogPostItem/Header/Title}/index.d.ts +2 -2
- package/lib/theme/BlogPostItem/Header/Title/index.js +27 -0
- package/{src/theme/BlogPostItem → lib/theme/BlogPostItem/Header/Title}/styles.module.css +2 -10
- package/lib/theme/BlogPostItem/Header/index.d.ts +8 -0
- package/lib/theme/BlogPostItem/Header/index.js +19 -0
- package/lib/theme/BlogPostItem/index.d.ts +1 -1
- package/lib/theme/BlogPostItem/index.js +16 -142
- package/lib/theme/BlogPostItems/index.d.ts +9 -0
- package/lib/theme/BlogPostItems/index.js +27 -0
- package/lib/theme/BlogPostPage/Metadata/index.d.ts +8 -0
- package/lib/theme/BlogPostPage/Metadata/index.js +41 -0
- package/lib/theme/BlogPostPage/index.js +21 -58
- package/lib/theme/BlogTagsPostsPage/index.d.ts +1 -1
- package/lib/theme/BlogTagsPostsPage/index.js +36 -30
- package/lib/theme/ColorModeToggle/index.js +2 -2
- package/lib/theme/DocBreadcrumbs/index.js +1 -1
- package/lib/theme/DocPage/Layout/Sidebar/ExpandButton/index.js +1 -1
- package/lib/theme/DocSidebar/Desktop/CollapseButton/index.js +1 -1
- package/lib/theme/DocSidebarItem/Link/index.js +1 -1
- package/lib/theme/EditThisPage/index.js +1 -1
- package/lib/theme/Footer/LinkItem/index.js +1 -1
- package/lib/theme/{IconArrow → Icon/Arrow}/index.d.ts +1 -1
- package/lib/theme/{IconArrow → Icon/Arrow}/index.js +0 -0
- package/lib/theme/{IconClose → Icon/Close}/index.d.ts +1 -1
- package/lib/theme/{IconClose → Icon/Close}/index.js +0 -0
- package/lib/theme/{IconDarkMode → Icon/DarkMode}/index.d.ts +1 -1
- package/lib/theme/{IconDarkMode → Icon/DarkMode}/index.js +0 -0
- package/lib/theme/{IconEdit → Icon/Edit}/index.d.ts +1 -1
- package/lib/theme/{IconEdit → Icon/Edit}/index.js +0 -0
- package/lib/theme/{IconEdit → Icon/Edit}/styles.module.css +0 -0
- package/lib/theme/{IconExternalLink → Icon/ExternalLink}/index.d.ts +1 -1
- package/lib/theme/{IconExternalLink → Icon/ExternalLink}/index.js +0 -0
- package/lib/theme/{IconExternalLink → Icon/ExternalLink}/styles.module.css +0 -0
- package/lib/theme/{IconHome → Icon/Home}/index.d.ts +1 -1
- package/lib/theme/{IconHome → Icon/Home}/index.js +0 -0
- package/lib/theme/{IconLanguage → Icon/Language}/index.d.ts +1 -1
- package/lib/theme/{IconLanguage → Icon/Language}/index.js +0 -0
- package/lib/theme/{IconLightMode → Icon/LightMode}/index.d.ts +1 -1
- package/lib/theme/{IconLightMode → Icon/LightMode}/index.js +0 -0
- package/lib/theme/{IconMenu → Icon/Menu}/index.d.ts +1 -1
- package/lib/theme/{IconMenu → Icon/Menu}/index.js +0 -0
- package/lib/theme/Navbar/MobileSidebar/Header/index.js +1 -1
- package/lib/theme/Navbar/MobileSidebar/Toggle/index.js +1 -1
- package/lib/theme/NavbarItem/LocaleDropdownNavbarItem/index.js +1 -1
- package/lib/theme/NavbarItem/NavbarNavLink.js +1 -1
- package/package.json +14 -14
- package/src/getSwizzleConfig.ts +5 -5
- package/src/theme/AnnouncementBar/index.tsx +1 -1
- package/src/theme/BlogListPage/index.tsx +2 -11
- package/src/theme/BlogPostItem/Container/index.tsx +32 -0
- package/src/theme/BlogPostItem/Content/index.tsx +29 -0
- package/src/theme/BlogPostItem/Footer/ReadMoreLink/index.tsx +44 -0
- package/src/theme/BlogPostItem/Footer/index.tsx +60 -0
- package/src/theme/BlogPostItem/Footer/styles.module.css +10 -0
- package/src/theme/{BlogPostAuthor → BlogPostItem/Header/Author}/index.tsx +8 -3
- package/{lib/theme/BlogPostAuthors/index.js → src/theme/BlogPostItem/Header/Authors/index.tsx} +14 -3
- package/src/theme/{BlogPostAuthors → BlogPostItem/Header/Authors}/styles.module.css +0 -0
- package/src/theme/BlogPostItem/Header/Info/index.tsx +71 -0
- package/src/theme/BlogPostItem/Header/Info/styles.module.css +10 -0
- package/src/theme/BlogPostItem/Header/Title/index.tsx +33 -0
- package/{lib/theme/BlogPostItem → src/theme/BlogPostItem/Header/Title}/styles.module.css +2 -10
- package/src/theme/BlogPostItem/Header/index.tsx +21 -0
- package/src/theme/BlogPostItem/index.tsx +19 -145
- package/src/theme/BlogPostItems/index.tsx +30 -0
- package/src/theme/BlogPostPage/Metadata/index.tsx +44 -0
- package/src/theme/BlogPostPage/index.tsx +29 -60
- package/src/theme/BlogTagsPostsPage/index.tsx +42 -35
- package/src/theme/ColorModeToggle/index.tsx +2 -2
- package/src/theme/DocBreadcrumbs/index.tsx +1 -1
- package/src/theme/DocPage/Layout/Sidebar/ExpandButton/index.tsx +1 -1
- package/src/theme/DocSidebar/Desktop/CollapseButton/index.tsx +1 -1
- package/src/theme/DocSidebarItem/Link/index.tsx +1 -1
- package/src/theme/EditThisPage/index.tsx +1 -1
- package/src/theme/Footer/LinkItem/index.tsx +1 -1
- package/src/theme/{IconArrow → Icon/Arrow}/index.tsx +1 -1
- package/src/theme/{IconClose → Icon/Close}/index.tsx +1 -1
- package/src/theme/{IconDarkMode → Icon/DarkMode}/index.tsx +1 -1
- package/src/theme/{IconEdit → Icon/Edit}/index.tsx +1 -1
- package/src/theme/{IconEdit → Icon/Edit}/styles.module.css +0 -0
- package/src/theme/{IconExternalLink → Icon/ExternalLink}/index.tsx +1 -1
- package/src/theme/{IconExternalLink → Icon/ExternalLink}/styles.module.css +0 -0
- package/src/theme/{IconHome → Icon/Home}/index.tsx +1 -1
- package/src/theme/{IconLanguage → Icon/Language}/index.tsx +1 -1
- package/src/theme/{IconLightMode → Icon/LightMode}/index.tsx +1 -1
- package/src/theme/{IconMenu → Icon/Menu}/index.tsx +1 -1
- package/src/theme/Navbar/MobileSidebar/Header/index.tsx +1 -1
- package/src/theme/Navbar/MobileSidebar/Toggle/index.tsx +1 -1
- package/src/theme/NavbarItem/LocaleDropdownNavbarItem/index.tsx +1 -1
- package/src/theme/NavbarItem/NavbarNavLink.tsx +1 -1
- package/src/theme-classic.d.ts +89 -27
|
@@ -7,155 +7,29 @@
|
|
|
7
7
|
|
|
8
8
|
import React from 'react';
|
|
9
9
|
import clsx from 'clsx';
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import MDXContent from '@theme/MDXContent';
|
|
16
|
-
import EditThisPage from '@theme/EditThisPage';
|
|
17
|
-
import TagsListInline from '@theme/TagsListInline';
|
|
18
|
-
import BlogPostAuthors from '@theme/BlogPostAuthors';
|
|
10
|
+
import {useBlogPost} from '@docusaurus/theme-common/internal';
|
|
11
|
+
import BlogPostItemContainer from '@theme/BlogPostItem/Container';
|
|
12
|
+
import BlogPostItemHeader from '@theme/BlogPostItem/Header';
|
|
13
|
+
import BlogPostItemContent from '@theme/BlogPostItem/Content';
|
|
14
|
+
import BlogPostItemFooter from '@theme/BlogPostItem/Footer';
|
|
19
15
|
import type {Props} from '@theme/BlogPostItem';
|
|
20
16
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const {selectMessage} = usePluralForm();
|
|
26
|
-
return (readingTimeFloat: number) => {
|
|
27
|
-
const readingTime = Math.ceil(readingTimeFloat);
|
|
28
|
-
return selectMessage(
|
|
29
|
-
readingTime,
|
|
30
|
-
translate(
|
|
31
|
-
{
|
|
32
|
-
id: 'theme.blog.post.readingTime.plurals',
|
|
33
|
-
description:
|
|
34
|
-
'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',
|
|
35
|
-
message: 'One min read|{readingTime} min read',
|
|
36
|
-
},
|
|
37
|
-
{readingTime},
|
|
38
|
-
),
|
|
39
|
-
);
|
|
40
|
-
};
|
|
17
|
+
// apply a bottom margin in list view
|
|
18
|
+
function useContainerClassName() {
|
|
19
|
+
const {isBlogPostPage} = useBlogPost();
|
|
20
|
+
return !isBlogPostPage ? 'margin-bottom--xl' : undefined;
|
|
41
21
|
}
|
|
42
22
|
|
|
43
|
-
export default function BlogPostItem(
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
frontMatter,
|
|
49
|
-
assets,
|
|
50
|
-
metadata,
|
|
51
|
-
truncated,
|
|
52
|
-
isBlogPostPage = false,
|
|
53
|
-
} = props;
|
|
54
|
-
const {
|
|
55
|
-
date,
|
|
56
|
-
formattedDate,
|
|
57
|
-
permalink,
|
|
58
|
-
tags,
|
|
59
|
-
readingTime,
|
|
60
|
-
title,
|
|
61
|
-
editUrl,
|
|
62
|
-
authors,
|
|
63
|
-
} = metadata;
|
|
64
|
-
|
|
65
|
-
const image = assets.image ?? frontMatter.image;
|
|
66
|
-
const truncatedPost = !isBlogPostPage && truncated;
|
|
67
|
-
const tagsExists = tags.length > 0;
|
|
68
|
-
const TitleHeading = isBlogPostPage ? 'h1' : 'h2';
|
|
69
|
-
|
|
23
|
+
export default function BlogPostItem({
|
|
24
|
+
children,
|
|
25
|
+
className,
|
|
26
|
+
}: Props): JSX.Element {
|
|
27
|
+
const containerClassName = useContainerClassName();
|
|
70
28
|
return (
|
|
71
|
-
<
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
<header>
|
|
77
|
-
<TitleHeading className={styles.blogPostTitle} itemProp="headline">
|
|
78
|
-
{isBlogPostPage ? (
|
|
79
|
-
title
|
|
80
|
-
) : (
|
|
81
|
-
<Link itemProp="url" to={permalink}>
|
|
82
|
-
{title}
|
|
83
|
-
</Link>
|
|
84
|
-
)}
|
|
85
|
-
</TitleHeading>
|
|
86
|
-
<div className={clsx(styles.blogPostData, 'margin-vert--md')}>
|
|
87
|
-
<time dateTime={date} itemProp="datePublished">
|
|
88
|
-
{formattedDate}
|
|
89
|
-
</time>
|
|
90
|
-
|
|
91
|
-
{typeof readingTime !== 'undefined' && (
|
|
92
|
-
<>
|
|
93
|
-
{' · '}
|
|
94
|
-
{readingTimePlural(readingTime)}
|
|
95
|
-
</>
|
|
96
|
-
)}
|
|
97
|
-
</div>
|
|
98
|
-
<BlogPostAuthors authors={authors} assets={assets} />
|
|
99
|
-
</header>
|
|
100
|
-
|
|
101
|
-
{image && (
|
|
102
|
-
<meta itemProp="image" content={withBaseUrl(image, {absolute: true})} />
|
|
103
|
-
)}
|
|
104
|
-
|
|
105
|
-
<div
|
|
106
|
-
// This ID is used for the feed generation to locate the main content
|
|
107
|
-
id={isBlogPostPage ? blogPostContainerID : undefined}
|
|
108
|
-
className="markdown"
|
|
109
|
-
itemProp="articleBody">
|
|
110
|
-
<MDXContent>{children}</MDXContent>
|
|
111
|
-
</div>
|
|
112
|
-
|
|
113
|
-
{(tagsExists || truncated || editUrl) && (
|
|
114
|
-
<footer
|
|
115
|
-
className={clsx(
|
|
116
|
-
'row docusaurus-mt-lg',
|
|
117
|
-
isBlogPostPage && styles.blogPostDetailsFull,
|
|
118
|
-
)}>
|
|
119
|
-
{tagsExists && (
|
|
120
|
-
<div className={clsx('col', {'col--9': truncatedPost})}>
|
|
121
|
-
<TagsListInline tags={tags} />
|
|
122
|
-
</div>
|
|
123
|
-
)}
|
|
124
|
-
|
|
125
|
-
{isBlogPostPage && editUrl && (
|
|
126
|
-
<div className="col margin-top--sm">
|
|
127
|
-
<EditThisPage editUrl={editUrl} />
|
|
128
|
-
</div>
|
|
129
|
-
)}
|
|
130
|
-
|
|
131
|
-
{truncatedPost && (
|
|
132
|
-
<div
|
|
133
|
-
className={clsx('col text--right', {
|
|
134
|
-
'col--3': tagsExists,
|
|
135
|
-
})}>
|
|
136
|
-
<Link
|
|
137
|
-
to={metadata.permalink}
|
|
138
|
-
aria-label={translate(
|
|
139
|
-
{
|
|
140
|
-
message: 'Read more about {title}',
|
|
141
|
-
id: 'theme.blog.post.readMoreLabel',
|
|
142
|
-
description:
|
|
143
|
-
'The ARIA label for the link to full blog posts from excerpts',
|
|
144
|
-
},
|
|
145
|
-
{title},
|
|
146
|
-
)}>
|
|
147
|
-
<b>
|
|
148
|
-
<Translate
|
|
149
|
-
id="theme.blog.post.readMore"
|
|
150
|
-
description="The label used in blog post item excerpts to link to full blog posts">
|
|
151
|
-
Read More
|
|
152
|
-
</Translate>
|
|
153
|
-
</b>
|
|
154
|
-
</Link>
|
|
155
|
-
</div>
|
|
156
|
-
)}
|
|
157
|
-
</footer>
|
|
158
|
-
)}
|
|
159
|
-
</article>
|
|
29
|
+
<BlogPostItemContainer className={clsx(containerClassName, className)}>
|
|
30
|
+
<BlogPostItemHeader />
|
|
31
|
+
<BlogPostItemContent>{children}</BlogPostItemContent>
|
|
32
|
+
<BlogPostItemFooter />
|
|
33
|
+
</BlogPostItemContainer>
|
|
160
34
|
);
|
|
161
35
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import {BlogPostProvider} from '@docusaurus/theme-common/internal';
|
|
10
|
+
import BlogPostItem from '@theme/BlogPostItem';
|
|
11
|
+
import type {Props} from '@theme/BlogPostItems';
|
|
12
|
+
|
|
13
|
+
export default function BlogPostItems({
|
|
14
|
+
items,
|
|
15
|
+
component: BlogPostItemComponent = BlogPostItem,
|
|
16
|
+
}: Props): JSX.Element {
|
|
17
|
+
return (
|
|
18
|
+
<>
|
|
19
|
+
{items.map(({content: BlogPostContent}) => (
|
|
20
|
+
<BlogPostProvider
|
|
21
|
+
key={BlogPostContent.metadata.permalink}
|
|
22
|
+
content={BlogPostContent}>
|
|
23
|
+
<BlogPostItemComponent>
|
|
24
|
+
<BlogPostContent />
|
|
25
|
+
</BlogPostItemComponent>
|
|
26
|
+
</BlogPostProvider>
|
|
27
|
+
))}
|
|
28
|
+
</>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import {PageMetadata} from '@docusaurus/theme-common';
|
|
10
|
+
import {useBlogPost} from '@docusaurus/theme-common/internal';
|
|
11
|
+
|
|
12
|
+
export default function BlogPostPageMetadata(): JSX.Element {
|
|
13
|
+
const {assets, metadata} = useBlogPost();
|
|
14
|
+
const {title, description, date, tags, authors, frontMatter} = metadata;
|
|
15
|
+
|
|
16
|
+
const {keywords} = frontMatter;
|
|
17
|
+
const image = assets.image ?? frontMatter.image;
|
|
18
|
+
return (
|
|
19
|
+
<PageMetadata
|
|
20
|
+
title={title}
|
|
21
|
+
description={description}
|
|
22
|
+
keywords={keywords}
|
|
23
|
+
image={image}>
|
|
24
|
+
<meta property="og:type" content="article" />
|
|
25
|
+
<meta property="article:published_time" content={date} />
|
|
26
|
+
{/* TODO double check those article meta array syntaxes, see https://ogp.me/#array */}
|
|
27
|
+
{authors.some((author) => author.url) && (
|
|
28
|
+
<meta
|
|
29
|
+
property="article:author"
|
|
30
|
+
content={authors
|
|
31
|
+
.map((author) => author.url)
|
|
32
|
+
.filter(Boolean)
|
|
33
|
+
.join(',')}
|
|
34
|
+
/>
|
|
35
|
+
)}
|
|
36
|
+
{tags.length > 0 && (
|
|
37
|
+
<meta
|
|
38
|
+
property="article:tag"
|
|
39
|
+
content={tags.map((tag) => tag.label).join(',')}
|
|
40
|
+
/>
|
|
41
|
+
)}
|
|
42
|
+
</PageMetadata>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
@@ -5,56 +5,26 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import React from 'react';
|
|
8
|
+
import React, {type ReactNode} from 'react';
|
|
9
9
|
import clsx from 'clsx';
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
HtmlClassNameProvider,
|
|
13
|
-
ThemeClassNames,
|
|
14
|
-
} from '@docusaurus/theme-common';
|
|
10
|
+
import {HtmlClassNameProvider, ThemeClassNames} from '@docusaurus/theme-common';
|
|
11
|
+
import {BlogPostProvider, useBlogPost} from '@docusaurus/theme-common/internal';
|
|
15
12
|
import BlogLayout from '@theme/BlogLayout';
|
|
16
13
|
import BlogPostItem from '@theme/BlogPostItem';
|
|
17
14
|
import BlogPostPaginator from '@theme/BlogPostPaginator';
|
|
15
|
+
import BlogPostPageMetadata from '@theme/BlogPostPage/Metadata';
|
|
18
16
|
import TOC from '@theme/TOC';
|
|
19
17
|
import type {Props} from '@theme/BlogPostPage';
|
|
18
|
+
import type {BlogSidebar} from '@docusaurus/plugin-content-blog';
|
|
20
19
|
|
|
21
|
-
function
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
title={title}
|
|
30
|
-
description={description}
|
|
31
|
-
keywords={keywords}
|
|
32
|
-
image={image}>
|
|
33
|
-
<meta property="og:type" content="article" />
|
|
34
|
-
<meta property="article:published_time" content={date} />
|
|
35
|
-
{/* TODO double check those article meta array syntaxes, see https://ogp.me/#array */}
|
|
36
|
-
{authors.some((author) => author.url) && (
|
|
37
|
-
<meta
|
|
38
|
-
property="article:author"
|
|
39
|
-
content={authors
|
|
40
|
-
.map((author) => author.url)
|
|
41
|
-
.filter(Boolean)
|
|
42
|
-
.join(',')}
|
|
43
|
-
/>
|
|
44
|
-
)}
|
|
45
|
-
{tags.length > 0 && (
|
|
46
|
-
<meta
|
|
47
|
-
property="article:tag"
|
|
48
|
-
content={tags.map((tag) => tag.label).join(',')}
|
|
49
|
-
/>
|
|
50
|
-
)}
|
|
51
|
-
</PageMetadata>
|
|
52
|
-
);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
function BlogPostPageContent(props: Props): JSX.Element {
|
|
56
|
-
const {content: BlogPostContents, sidebar} = props;
|
|
57
|
-
const {assets, metadata} = BlogPostContents;
|
|
20
|
+
function BlogPostPageContent({
|
|
21
|
+
sidebar,
|
|
22
|
+
children,
|
|
23
|
+
}: {
|
|
24
|
+
sidebar: BlogSidebar;
|
|
25
|
+
children: ReactNode;
|
|
26
|
+
}): JSX.Element {
|
|
27
|
+
const {metadata, toc} = useBlogPost();
|
|
58
28
|
const {nextItem, prevItem, frontMatter} = metadata;
|
|
59
29
|
const {
|
|
60
30
|
hide_table_of_contents: hideTableOfContents,
|
|
@@ -65,21 +35,15 @@ function BlogPostPageContent(props: Props): JSX.Element {
|
|
|
65
35
|
<BlogLayout
|
|
66
36
|
sidebar={sidebar}
|
|
67
37
|
toc={
|
|
68
|
-
!hideTableOfContents &&
|
|
38
|
+
!hideTableOfContents && toc.length > 0 ? (
|
|
69
39
|
<TOC
|
|
70
|
-
toc={
|
|
40
|
+
toc={toc}
|
|
71
41
|
minHeadingLevel={tocMinHeadingLevel}
|
|
72
42
|
maxHeadingLevel={tocMaxHeadingLevel}
|
|
73
43
|
/>
|
|
74
44
|
) : undefined
|
|
75
45
|
}>
|
|
76
|
-
<BlogPostItem
|
|
77
|
-
frontMatter={frontMatter}
|
|
78
|
-
assets={assets}
|
|
79
|
-
metadata={metadata}
|
|
80
|
-
isBlogPostPage>
|
|
81
|
-
<BlogPostContents />
|
|
82
|
-
</BlogPostItem>
|
|
46
|
+
<BlogPostItem>{children}</BlogPostItem>
|
|
83
47
|
|
|
84
48
|
{(nextItem || prevItem) && (
|
|
85
49
|
<BlogPostPaginator nextItem={nextItem} prevItem={prevItem} />
|
|
@@ -89,14 +53,19 @@ function BlogPostPageContent(props: Props): JSX.Element {
|
|
|
89
53
|
}
|
|
90
54
|
|
|
91
55
|
export default function BlogPostPage(props: Props): JSX.Element {
|
|
56
|
+
const BlogPostContent = props.content;
|
|
92
57
|
return (
|
|
93
|
-
<
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
58
|
+
<BlogPostProvider content={props.content} isBlogPostPage>
|
|
59
|
+
<HtmlClassNameProvider
|
|
60
|
+
className={clsx(
|
|
61
|
+
ThemeClassNames.wrapper.blogPages,
|
|
62
|
+
ThemeClassNames.page.blogPostPage,
|
|
63
|
+
)}>
|
|
64
|
+
<BlogPostPageMetadata />
|
|
65
|
+
<BlogPostPageContent sidebar={props.sidebar}>
|
|
66
|
+
<BlogPostContent />
|
|
67
|
+
</BlogPostPageContent>
|
|
68
|
+
</HtmlClassNameProvider>
|
|
69
|
+
</BlogPostProvider>
|
|
101
70
|
);
|
|
102
71
|
}
|
|
@@ -16,10 +16,10 @@ import {
|
|
|
16
16
|
} from '@docusaurus/theme-common';
|
|
17
17
|
import Link from '@docusaurus/Link';
|
|
18
18
|
import BlogLayout from '@theme/BlogLayout';
|
|
19
|
-
import BlogPostItem from '@theme/BlogPostItem';
|
|
20
19
|
import BlogListPaginator from '@theme/BlogListPaginator';
|
|
21
20
|
import SearchMetadata from '@theme/SearchMetadata';
|
|
22
21
|
import type {Props} from '@theme/BlogTagsPostsPage';
|
|
22
|
+
import BlogPostItems from '@theme/BlogPostItems';
|
|
23
23
|
|
|
24
24
|
// Very simple pluralization: probably good enough for now
|
|
25
25
|
function useBlogPostsPlural() {
|
|
@@ -39,14 +39,9 @@ function useBlogPostsPlural() {
|
|
|
39
39
|
);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
tag,
|
|
44
|
-
items,
|
|
45
|
-
sidebar,
|
|
46
|
-
listMetadata,
|
|
47
|
-
}: Props): JSX.Element {
|
|
42
|
+
function useBlogTagsPostsPageTitle(tag: Props['tag']): string {
|
|
48
43
|
const blogPostsPlural = useBlogPostsPlural();
|
|
49
|
-
|
|
44
|
+
return translate(
|
|
50
45
|
{
|
|
51
46
|
id: 'theme.blog.tagTitle',
|
|
52
47
|
description: 'The title of the page for a blog tag',
|
|
@@ -54,40 +49,52 @@ export default function BlogTagsPostsPage({
|
|
|
54
49
|
},
|
|
55
50
|
{nPosts: blogPostsPlural(tag.count), tagName: tag.label},
|
|
56
51
|
);
|
|
52
|
+
}
|
|
57
53
|
|
|
54
|
+
function BlogTagsPostsPageMetadata({tag}: Props): JSX.Element {
|
|
55
|
+
const title = useBlogTagsPostsPageTitle(tag);
|
|
56
|
+
return (
|
|
57
|
+
<>
|
|
58
|
+
<PageMetadata title={title} />
|
|
59
|
+
<SearchMetadata tag="blog_tags_posts" />
|
|
60
|
+
</>
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function BlogTagsPostsPageContent({
|
|
65
|
+
tag,
|
|
66
|
+
items,
|
|
67
|
+
sidebar,
|
|
68
|
+
listMetadata,
|
|
69
|
+
}: Props): JSX.Element {
|
|
70
|
+
const title = useBlogTagsPostsPageTitle(tag);
|
|
71
|
+
return (
|
|
72
|
+
<BlogLayout sidebar={sidebar}>
|
|
73
|
+
<header className="margin-bottom--xl">
|
|
74
|
+
<h1>{title}</h1>
|
|
75
|
+
|
|
76
|
+
<Link href={tag.allTagsPath}>
|
|
77
|
+
<Translate
|
|
78
|
+
id="theme.tags.tagsPageLink"
|
|
79
|
+
description="The label of the link targeting the tag list page">
|
|
80
|
+
View All Tags
|
|
81
|
+
</Translate>
|
|
82
|
+
</Link>
|
|
83
|
+
</header>
|
|
84
|
+
<BlogPostItems items={items} />
|
|
85
|
+
<BlogListPaginator metadata={listMetadata} />
|
|
86
|
+
</BlogLayout>
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
export default function BlogTagsPostsPage(props: Props): JSX.Element {
|
|
58
90
|
return (
|
|
59
91
|
<HtmlClassNameProvider
|
|
60
92
|
className={clsx(
|
|
61
93
|
ThemeClassNames.wrapper.blogPages,
|
|
62
94
|
ThemeClassNames.page.blogTagPostListPage,
|
|
63
95
|
)}>
|
|
64
|
-
<
|
|
65
|
-
<
|
|
66
|
-
<BlogLayout sidebar={sidebar}>
|
|
67
|
-
<header className="margin-bottom--xl">
|
|
68
|
-
<h1>{title}</h1>
|
|
69
|
-
|
|
70
|
-
<Link href={tag.allTagsPath}>
|
|
71
|
-
<Translate
|
|
72
|
-
id="theme.tags.tagsPageLink"
|
|
73
|
-
description="The label of the link targeting the tag list page">
|
|
74
|
-
View All Tags
|
|
75
|
-
</Translate>
|
|
76
|
-
</Link>
|
|
77
|
-
</header>
|
|
78
|
-
|
|
79
|
-
{items.map(({content: BlogPostContent}) => (
|
|
80
|
-
<BlogPostItem
|
|
81
|
-
key={BlogPostContent.metadata.permalink}
|
|
82
|
-
frontMatter={BlogPostContent.frontMatter}
|
|
83
|
-
assets={BlogPostContent.assets}
|
|
84
|
-
metadata={BlogPostContent.metadata}
|
|
85
|
-
truncated>
|
|
86
|
-
<BlogPostContent />
|
|
87
|
-
</BlogPostItem>
|
|
88
|
-
))}
|
|
89
|
-
<BlogListPaginator metadata={listMetadata} />
|
|
90
|
-
</BlogLayout>
|
|
96
|
+
<BlogTagsPostsPageMetadata {...props} />
|
|
97
|
+
<BlogTagsPostsPageContent {...props} />
|
|
91
98
|
</HtmlClassNameProvider>
|
|
92
99
|
);
|
|
93
100
|
}
|
|
@@ -9,8 +9,8 @@ import React from 'react';
|
|
|
9
9
|
import clsx from 'clsx';
|
|
10
10
|
import useIsBrowser from '@docusaurus/useIsBrowser';
|
|
11
11
|
import {translate} from '@docusaurus/Translate';
|
|
12
|
-
import IconLightMode from '@theme/
|
|
13
|
-
import IconDarkMode from '@theme/
|
|
12
|
+
import IconLightMode from '@theme/Icon/LightMode';
|
|
13
|
+
import IconDarkMode from '@theme/Icon/DarkMode';
|
|
14
14
|
import type {Props} from '@theme/ColorModeToggle';
|
|
15
15
|
|
|
16
16
|
import styles from './styles.module.css';
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
import Link from '@docusaurus/Link';
|
|
16
16
|
import useBaseUrl from '@docusaurus/useBaseUrl';
|
|
17
17
|
import {translate} from '@docusaurus/Translate';
|
|
18
|
-
import IconHome from '@theme/
|
|
18
|
+
import IconHome from '@theme/Icon/Home';
|
|
19
19
|
|
|
20
20
|
import styles from './styles.module.css';
|
|
21
21
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import React from 'react';
|
|
9
9
|
import {translate} from '@docusaurus/Translate';
|
|
10
|
-
import IconArrow from '@theme/
|
|
10
|
+
import IconArrow from '@theme/Icon/Arrow';
|
|
11
11
|
import type {Props} from '@theme/DocPage/Layout/Sidebar/ExpandButton';
|
|
12
12
|
|
|
13
13
|
import styles from './styles.module.css';
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import React from 'react';
|
|
9
9
|
import clsx from 'clsx';
|
|
10
10
|
import {translate} from '@docusaurus/Translate';
|
|
11
|
-
import IconArrow from '@theme/
|
|
11
|
+
import IconArrow from '@theme/Icon/Arrow';
|
|
12
12
|
import type {Props} from '@theme/DocSidebar/Desktop/CollapseButton';
|
|
13
13
|
|
|
14
14
|
import styles from './styles.module.css';
|
|
@@ -11,7 +11,7 @@ import {ThemeClassNames} from '@docusaurus/theme-common';
|
|
|
11
11
|
import {isActiveSidebarItem} from '@docusaurus/theme-common/internal';
|
|
12
12
|
import Link from '@docusaurus/Link';
|
|
13
13
|
import isInternalUrl from '@docusaurus/isInternalUrl';
|
|
14
|
-
import IconExternalLink from '@theme/
|
|
14
|
+
import IconExternalLink from '@theme/Icon/ExternalLink';
|
|
15
15
|
import type {Props} from '@theme/DocSidebarItem/Link';
|
|
16
16
|
|
|
17
17
|
import styles from './styles.module.css';
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import React from 'react';
|
|
9
9
|
import Translate from '@docusaurus/Translate';
|
|
10
10
|
import {ThemeClassNames} from '@docusaurus/theme-common';
|
|
11
|
-
import IconEdit from '@theme/
|
|
11
|
+
import IconEdit from '@theme/Icon/Edit';
|
|
12
12
|
import type {Props} from '@theme/EditThisPage';
|
|
13
13
|
|
|
14
14
|
export default function EditThisPage({editUrl}: Props): JSX.Element {
|
|
@@ -10,7 +10,7 @@ import React from 'react';
|
|
|
10
10
|
import Link from '@docusaurus/Link';
|
|
11
11
|
import useBaseUrl from '@docusaurus/useBaseUrl';
|
|
12
12
|
import isInternalUrl from '@docusaurus/isInternalUrl';
|
|
13
|
-
import IconExternalLink from '@theme/
|
|
13
|
+
import IconExternalLink from '@theme/Icon/ExternalLink';
|
|
14
14
|
import type {Props} from '@theme/Footer/LinkItem';
|
|
15
15
|
|
|
16
16
|
export default function FooterLinkItem({item}: Props): JSX.Element {
|
|
File without changes
|
|
File without changes
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import React from 'react';
|
|
9
9
|
import {useNavbarMobileSidebar} from '@docusaurus/theme-common/internal';
|
|
10
10
|
import NavbarColorModeToggle from '@theme/Navbar/ColorModeToggle';
|
|
11
|
-
import IconClose from '@theme/
|
|
11
|
+
import IconClose from '@theme/Icon/Close';
|
|
12
12
|
import NavbarLogo from '@theme/Navbar/Logo';
|
|
13
13
|
|
|
14
14
|
function CloseButton() {
|