添加评论支持

This commit is contained in:
lilingfengdev 2024-11-15 20:00:53 +08:00
parent 307124a286
commit 01aa3b09aa
6 changed files with 101 additions and 11 deletions

View File

@ -60,7 +60,7 @@ RNG 是 **随机数生成器** 的简写。
use-vanilla-random: false
```
:::tips
:::tip
如果你使用 Paper 核心但想用回原版的 RNG 算法,请参考 [Paper#7166](https://github.com/PaperMC/Paper/issues/7166#issuecomment-998988542) 中提到的解决方法。

View File

@ -46,6 +46,9 @@ const config = {
defaultLocale: 'zh-Hans',
locales: ['zh-Hans'],
},
clientModules: [
require.resolve('./src/clientModules/routeModules.js')
],
presets: [
[
@ -124,6 +127,12 @@ const config = {
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
giscus: {
repo: 'postyizhan/NitWikit',
repoId: 'R_kgDOLkVR-A',
category: 'Announcements',
categoryId: 'DIC_kwDOLkVR-M4CkTAe'
},
// 标题渲染范围
tableOfContents: {
minHeadingLevel: 2,
@ -245,6 +254,8 @@ const config = {
},
// 颜色随系统切换
colorMode: {
defaultMode: 'light',
disableSwitch: false,
respectPrefersColorScheme: true,
},

View File

@ -18,18 +18,21 @@
},
"dependencies": {
"@ant-design/icons": "^5.5.1",
"@docusaurus/core": "3.5.2",
"@docusaurus/plugin-content-docs": "3.5.2",
"@docusaurus/plugin-debug": "3.5.2",
"@docusaurus/plugin-pwa": "3.5.2",
"@docusaurus/plugin-sitemap": "3.5.2",
"@docusaurus/preset-classic": "3.5.2",
"@docusaurus/theme-common": "^3.5.2",
"@docusaurus/theme-mermaid": "3.5.2",
"@docusaurus/theme-search-algolia": "3.5.2",
"@docusaurus/core": "^3.6.1",
"@docusaurus/plugin-content-docs": "^3.6.1",
"@docusaurus/plugin-debug": "^3.6.1",
"@docusaurus/plugin-pwa": "^3.6.1",
"@docusaurus/plugin-sitemap": "^3.6.1",
"@docusaurus/preset-classic": "^3.6.1",
"@docusaurus/theme-common": "^3.6.1",
"@docusaurus/theme-mermaid": "^3.6.1",
"@docusaurus/theme-search-algolia": "^3.6.1",
"@giscus/react": "^3.0.0",
"@mdx-js/react": "3.0.1",
"antd": "^5.21.2",
"clsx": "2.1.1",
"mitt": "^3.0.1",
"pnpm": "^9.13.2",
"prism-react-renderer": "^2.3.1",
"react": "18.3.1",
"react-dom": "18.3.1"

View File

@ -0,0 +1,18 @@
import mitt from 'mitt';
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
const emitter = mitt();
if (ExecutionEnvironment.canUseDOM) {
window.emitter = emitter;
}
export function onRouteDidUpdate() {
if (ExecutionEnvironment.canUseDOM) {
setTimeout(() => {
window.emitter.emit('onRouteDidUpdate');
});
}
// https://github.com/facebook/docusaurus/issues/8278
}

View File

@ -0,0 +1,55 @@
import React, { forwardRef, useEffect, useState } from 'react';
import BrowserOnly from '@docusaurus/BrowserOnly';
import Giscus from '@giscus/react';
import {
useThemeConfig,
useColorMode,
} from '@docusaurus/theme-common';
export const Comment = forwardRef((props, ref) => {
const { giscus } = useThemeConfig();
const { colorMode } = useColorMode();
const { theme = 'light', darkTheme = 'dark_dimmed' } = giscus;
const giscusTheme = colorMode === 'dark' ? darkTheme : theme;
const [routeDidUpdate, setRouteDidUpdate] = useState(false);
useEffect(() => {
function eventHandler(e) {
setRouteDidUpdate(true);
}
window.emitter.on('onRouteDidUpdate', eventHandler);
return () => {
window.emitter.off('onRouteDidUpdate', eventHandler);
};
}, []);
if (!routeDidUpdate) {
return null;
}
return (
<BrowserOnly fallback={<div>Loading Comments...</div>}>
{() => (
<div ref={ref} id="comment" style={{ paddingTop: 50 }}>
<Giscus
id="comments"
mapping="title"
strict="1"
reactionsEnabled="1"
emitMetadata="0"
inputPosition="bottom"
lang="zh-CN"
loading="lazy"
{...giscus}
theme={giscusTheme}
/>
</div>
)}
</BrowserOnly>
);
});
export default Comment;

View File

@ -14,7 +14,7 @@ import ContentVisibility from '@theme/ContentVisibility';
import styles from './styles.module.css';
import { FloatButton, Modal } from 'antd';
import { FilePdfOutlined, PrinterOutlined } from '@ant-design/icons';
import Comment from '../../../components/comment';
/**
* Decide if the toc should be rendered, on mobile or desktop viewports
*/
@ -55,6 +55,8 @@ export default function DocItemLayout({children}) {
},
})
};
const { frontMatter } = useDoc();
const { hide_comment: hideComment } = frontMatter;
return (
<div className="row">
<div className={clsx('col', !docTOC.hidden && styles.docItemCol)}>
@ -70,6 +72,7 @@ export default function DocItemLayout({children}) {
</article>
<DocItemPaginator />
</div>
{!hideComment && <Comment />}
</div>
{docTOC.desktop && <div className="col col--3">{docTOC.desktop}</div>}
<FloatButton.Group shape="circle" style={{right: 24}} className="article-float-buttons">