mirror of
https://github.com/postyizhan/NitWikit.git
synced 2025-03-31 19:30:35 +08:00
添加评论支持
This commit is contained in:
parent
307124a286
commit
01aa3b09aa
@ -60,7 +60,7 @@ RNG 是 **随机数生成器** 的简写。
|
||||
use-vanilla-random: false
|
||||
```
|
||||
|
||||
:::tips
|
||||
:::tip
|
||||
|
||||
如果你使用 Paper 核心但想用回原版的 RNG 算法,请参考 [Paper#7166](https://github.com/PaperMC/Paper/issues/7166#issuecomment-998988542) 中提到的解决方法。
|
||||
|
||||
|
@ -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,
|
||||
},
|
||||
|
||||
|
21
package.json
21
package.json
@ -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"
|
||||
|
18
src/clientModules/routeModules.js
Normal file
18
src/clientModules/routeModules.js
Normal 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
|
||||
}
|
||||
|
55
src/components/comment/index.jsx
Normal file
55
src/components/comment/index.jsx
Normal 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;
|
||||
|
@ -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">
|
||||
|
Loading…
x
Reference in New Issue
Block a user