diff --git a/examples/website/src/components/Layouts/index/index.tsx b/examples/website/src/components/Layouts/index/index.tsx
index a3e1917dd..90fb4e52b 100644
--- a/examples/website/src/components/Layouts/index/index.tsx
+++ b/examples/website/src/components/Layouts/index/index.tsx
@@ -6,7 +6,6 @@ import React, { useState, useEffect } from 'react'
import { ConfigProvider, theme } from 'antd'
import '@wcj/dark-mode';
import HomeFooter from './HomeFooter';
-import AnchorRight from '../Anchor';
export default function Layout(props: KktproPageProps) {
const { pathname } = useLocation();
@@ -37,9 +36,6 @@ export default function Layout(props: KktproPageProps) {
)}
diff --git a/examples/website/src/components/Layouts/Anchor/hooks.js b/examples/website/src/components/Preview/Anchor/hooks.js
similarity index 78%
rename from examples/website/src/components/Layouts/Anchor/hooks.js
rename to examples/website/src/components/Preview/Anchor/hooks.js
index 75da23188..600582340 100644
--- a/examples/website/src/components/Layouts/Anchor/hooks.js
+++ b/examples/website/src/components/Preview/Anchor/hooks.js
@@ -7,8 +7,8 @@ export function useComponentMarkdown() {
const componentName = pathname?.split('/').at(-1);
if (componentName) {
try {
- const mdText = require(`../../../pages/${componentName}/README.md`)
- ?.default?.source;
+ const mdText = require(`src/pages/${componentName}/README.md`)?.default
+ ?.source;
return mdText;
} catch {}
}
diff --git a/examples/website/src/components/Layouts/Anchor/index.jsx b/examples/website/src/components/Preview/Anchor/index.jsx
similarity index 68%
rename from examples/website/src/components/Layouts/Anchor/index.jsx
rename to examples/website/src/components/Preview/Anchor/index.jsx
index bb1f1af38..e913abc20 100644
--- a/examples/website/src/components/Layouts/Anchor/index.jsx
+++ b/examples/website/src/components/Preview/Anchor/index.jsx
@@ -1,13 +1,11 @@
import { Anchor } from 'antd';
import { useEffect, useState } from 'react';
import remark from 'remark';
-import { useComponentMarkdown } from './hooks';
-export default function Anchors() {
- const markdownText = useComponentMarkdown();
+export default function Anchors({ markdownText }) {
const [items, setItems] = useState([]);
- function traverse(node, headers = []) {
+ function traverse(node, stack = [{ children: [] }]) {
let currentHeader = null;
if (node.type === 'heading') {
@@ -15,40 +13,41 @@ export default function Anchors() {
const text = node.children[0].value;
const href = text
?.toLowerCase()
- .replace(/^[^\w\u4e00-\u9fa5]+|[^\w\u4e00-\u9fa5]+$/g, '')
- .replace(/\s+/g, '-')
- .replace(/\./g, '');
+ .replace(/^[^\w\u4e00-\u9fa5]+|[^\w\u4e00-\u9fa5]+$|[\n+/\/@\.]/g, '')
+ .replace(/\s+/g, '-');
const level = node.depth;
currentHeader = { text, href, level, children: [] };
- if (level === 1) {
- headers.push(currentHeader);
- } else {
- const parentHeader = headers[headers.length - 1];
- if (parentHeader) {
- parentHeader.children.push(currentHeader);
+ let top = stack[stack.length - 1];
+
+ while (stack.length > level) {
+ stack.pop();
+ top = stack[stack.length - 1];
+ }
+
+ if (level > stack.length) {
+ if (top.children.length > 0) {
+ stack.push(top.children[top.children.length - 1]);
}
}
+
+ top.children.push(currentHeader);
}
if (node.children) {
for (let i = 0; i < node.children.length; i++) {
- traverse(
- node.children[i],
- currentHeader ? currentHeader.children : headers,
- );
+ traverse(node.children[i], stack);
}
}
- return headers;
+ return stack[0].children;
}
useEffect(() => {
const processor = remark();
const ast = processor.parse(markdownText);
const headers = traverse(ast);
-
const items = createItems(headers);
setItems(items);
}, [markdownText]);
@@ -73,6 +72,7 @@ export default function Anchors() {
{
+ console.log('link: ', link);
e.preventDefault();
const element = document.getElementById(link.href);
element?.scrollIntoView({ behavior: 'instant', block: 'start' });
diff --git a/examples/website/src/components/Preview/index.tsx b/examples/website/src/components/Preview/index.tsx
index 502976395..189b76030 100644
--- a/examples/website/src/components/Preview/index.tsx
+++ b/examples/website/src/components/Preview/index.tsx
@@ -17,6 +17,8 @@ import Loading from '../Loading';
import BackToUp from '@uiw/react-back-to-top';
import Footer from "../Footer"
import './nodes/toc.less';
+import { useHyperlink } from './useHyperlink';
+import Anchors from './Anchor';
const Preview = CodeLayout.Preview;
const Code = CodeLayout.Code;
@@ -58,6 +60,7 @@ const Markdown = styled<
const PreviewDocument = ({ path, editePath }: { path: MdDataHandle, editePath: string; }) => {
const $dom = useRef(null);
const { mdData, loading } = useMdData(path);
+ useHyperlink($dom.current);
return (
@@ -151,6 +154,9 @@ const PreviewDocument = ({ path, editePath }: { path: MdDataHandle, editePath: s
Top
+
);
};
diff --git a/examples/website/src/components/Preview/useHyperlink.tsx b/examples/website/src/components/Preview/useHyperlink.tsx
index dc67b8b33..f73ecb8fa 100644
--- a/examples/website/src/components/Preview/useHyperlink.tsx
+++ b/examples/website/src/components/Preview/useHyperlink.tsx
@@ -43,7 +43,7 @@ export const useHyperlink = (dom: HTMLDivElement | null) => {
target.classList.add('active');
}
};
- const scrollFn = () => {};
+ const scrollFn = () => { };
const scrollEndFn = () => {
const $main = document.getElementsByTagName(
'main',