mirror of
https://github.com/OpenBMB/ChatDev.git
synced 2026-08-01 10:56:06 +00:00
feat: scroll to content in tutorial view
This commit is contained in:
parent
53870bd6f0
commit
485e33f91f
@ -1,8 +1,11 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { ref, onMounted, nextTick } from 'vue'
|
import { ref, onMounted, nextTick } from 'vue'
|
||||||
|
import { useRoute } from 'vue-router'
|
||||||
import MarkdownIt from 'markdown-it'
|
import MarkdownIt from 'markdown-it'
|
||||||
import markdownItAnchor from 'markdown-it-anchor'
|
import markdownItAnchor from 'markdown-it-anchor'
|
||||||
|
|
||||||
|
const route = useRoute()
|
||||||
|
|
||||||
const renderedContent = ref('')
|
const renderedContent = ref('')
|
||||||
const currentLang = ref('en') // 'zh' for Chinese, 'en' for English
|
const currentLang = ref('en') // 'zh' for Chinese, 'en' for English
|
||||||
const markdownBody = ref(null)
|
const markdownBody = ref(null)
|
||||||
@ -28,6 +31,23 @@ md.use(markdownItAnchor, {
|
|||||||
|
|
||||||
const getTutorialFile = () => (currentLang.value === 'en' ? '/tutorial-en.md' : '/tutorial-zh.md')
|
const getTutorialFile = () => (currentLang.value === 'en' ? '/tutorial-en.md' : '/tutorial-zh.md')
|
||||||
|
|
||||||
|
const scrollToHash = () => {
|
||||||
|
// Wait for DOM to update, then scroll to hash if present
|
||||||
|
nextTick(() => {
|
||||||
|
if (route.hash) {
|
||||||
|
// Remove the '#' from the hash
|
||||||
|
const targetId = route.hash.slice(1)
|
||||||
|
const targetElement = document.getElementById(targetId)
|
||||||
|
|
||||||
|
if (targetElement) {
|
||||||
|
setTimeout(() => {
|
||||||
|
targetElement.scrollIntoView({ behavior: 'smooth', block: 'start' })
|
||||||
|
}, 100)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
const addCopyButtons = () => {
|
const addCopyButtons = () => {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
const container = markdownBody.value
|
const container = markdownBody.value
|
||||||
@ -71,6 +91,7 @@ const loadTutorial = async () => {
|
|||||||
|
|
||||||
renderedContent.value = md.render(text)
|
renderedContent.value = md.render(text)
|
||||||
addCopyButtons()
|
addCopyButtons()
|
||||||
|
scrollToHash()
|
||||||
} else {
|
} else {
|
||||||
console.error('Failed to fetch tutorial markdown')
|
console.error('Failed to fetch tutorial markdown')
|
||||||
}
|
}
|
||||||
@ -117,6 +138,7 @@ onMounted(() => {
|
|||||||
box-shadow: 0 4px 32px 0 rgba(0, 255, 255, 0.08), 0 0 0 2px #00eaff33;
|
box-shadow: 0 4px 32px 0 rgba(0, 255, 255, 0.08), 0 0 0 2px #00eaff33;
|
||||||
border: 1.5px solid #00eaff33;
|
border: 1.5px solid #00eaff33;
|
||||||
transition: box-shadow 0.3s;
|
transition: box-shadow 0.3s;
|
||||||
|
scroll-behavior: smooth;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lang-switch {
|
.lang-switch {
|
||||||
@ -175,6 +197,23 @@ onMounted(() => {
|
|||||||
color: #00eaff;
|
color: #00eaff;
|
||||||
text-shadow: 0 0 8px #00eaff44;
|
text-shadow: 0 0 8px #00eaff44;
|
||||||
letter-spacing: 0.02em;
|
letter-spacing: 0.02em;
|
||||||
|
scroll-margin-top: 20px; /* Offset for hash scroll target */
|
||||||
|
transition: background 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Highlight targeted heading */
|
||||||
|
:deep(.markdown-body h1:target),
|
||||||
|
:deep(.markdown-body h2:target),
|
||||||
|
:deep(.markdown-body h3:target),
|
||||||
|
:deep(.markdown-body h4:target),
|
||||||
|
:deep(.markdown-body h5:target),
|
||||||
|
:deep(.markdown-body h6:target) {
|
||||||
|
background: rgba(0, 234, 255, 0.15);
|
||||||
|
padding: 8px 12px;
|
||||||
|
margin-left: -12px;
|
||||||
|
margin-right: -12px;
|
||||||
|
border-radius: 6px;
|
||||||
|
box-shadow: 0 0 16px rgba(0, 234, 255, 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.markdown-body h1) { font-size: 2.2em; border-bottom: 1px solid #00eaff33; padding-bottom: 0.3em; }
|
:deep(.markdown-body h1) { font-size: 2.2em; border-bottom: 1px solid #00eaff33; padding-bottom: 0.3em; }
|
||||||
|
|||||||
@ -25,7 +25,24 @@ const routes = [
|
|||||||
|
|
||||||
const router = createRouter({
|
const router = createRouter({
|
||||||
history: createWebHistory(),
|
history: createWebHistory(),
|
||||||
routes
|
routes,
|
||||||
|
scrollBehavior(to, from, savedPosition) {
|
||||||
|
if (savedPosition) {
|
||||||
|
return savedPosition
|
||||||
|
}
|
||||||
|
|
||||||
|
if (to.hash) {
|
||||||
|
return {
|
||||||
|
el: to.hash,
|
||||||
|
behavior: 'smooth',
|
||||||
|
// Add a small delay to ensure the element exists
|
||||||
|
top: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise scroll to top
|
||||||
|
return { top: 0 }
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
export default router
|
export default router
|
||||||
Loading…
x
Reference in New Issue
Block a user