mirror of
https://github.com/AstrBotDevs/AstrBot
synced 2026-07-01 01:10:21 +08:00
* docs: transfer AstrBotDevs/AstrBot-docs to AstrBotDevs/AstrBot * refactor: reorder imports and improve type hints in sync_docs_to_wiki.py and upload_doc_images_to_r2.py * feat: add GitHub Actions workflow to sync wiki with documentation Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com> Co-authored-by: anka-afk <110004162+anka-afk@users.noreply.github.com> Co-authored-by: zouyonghe <62183434+zouyonghe@users.noreply.github.com> Co-authored-by: shuiping233 <49360196+shuiping233@users.noreply.github.com> Co-authored-by: LIghtJUNction <106986785+LIghtJUNction@users.noreply.github.com> Co-authored-by: Sjshi763 <179909421+Sjshi763@users.noreply.github.com> Co-authored-by: xiewoc <70128845+xiewoc@users.noreply.github.com> Co-authored-by: QingFeng-awa <151742581+QingFeng-awa@users.noreply.github.com> Co-authored-by: PaloMiku <96452465+PaloMiku@users.noreply.github.com> Co-authored-by: shangxueink <138397030+shangxueink@users.noreply.github.com> Co-authored-by: IGCrystal-A <244300990+IGCrystal-A@users.noreply.github.com> Co-authored-by: RC-CHN <67079377+RC-CHN@users.noreply.github.com> Co-authored-by: MC090610 <113341105+MC090610@users.noreply.github.com> Co-authored-by: Waterwzy <196913419+Waterwzy@users.noreply.github.com> Co-authored-by: Lanhuace-Wan <186303160+Lanhuace-Wan@users.noreply.github.com> Co-authored-by: LiAlH4qwq <61769640+LiAlH4qwq@users.noreply.github.com> Co-authored-by: HSOS6 <209910899+HSOS6@users.noreply.github.com> Co-authored-by: th-dd <162813557+th-dd@users.noreply.github.com> Co-authored-by: miaoxutao123 <81676466+miaoxutao123@users.noreply.github.com> Co-authored-by: nuomicici <143102889+nuomicici@users.noreply.github.com> Co-authored-by: nasyt233 <210103278+nasyt233@users.noreply.github.com> Co-authored-by: jlugjb <7426462+jlugjb@users.noreply.github.com> Co-authored-by: Raven95676 <176760093+Raven95676@users.noreply.github.com> Co-authored-by: Futureppo <180109455+Futureppo@users.noreply.github.com> Co-authored-by: MliKiowa <61873808+MliKiowa@users.noreply.github.com> Co-authored-by: Fridemn <150212937+Fridemn@users.noreply.github.com> Co-authored-by: BakaCookie520 <138355736+BakaCookie520@users.noreply.github.com> Co-authored-by: YumeYuka <125112916+YumeYuka@users.noreply.github.com> Co-authored-by: xming521 <32786500+xming521@users.noreply.github.com> Co-authored-by: ywh555hhh <121592812+ywh555hhh@users.noreply.github.com> Co-authored-by: stevessr <89645372+stevessr@users.noreply.github.com> Co-authored-by: roeseth <41995115+roeseth@users.noreply.github.com> Co-authored-by: ikun-1145141 <265925499+ikun-1145141@users.noreply.github.com> Co-authored-by: evpeople <54983536+evpeople@users.noreply.github.com> Co-authored-by: Yue-bin <60509781+Yue-bin@users.noreply.github.com> Co-authored-by: W1ndys <109416673+W1ndys@users.noreply.github.com> Co-authored-by: TheFurina <218887821+TheFurina@users.noreply.github.com> Co-authored-by: Seayon <12275933+Seayon@users.noreply.github.com> Co-authored-by: OnlyblackTea <38585636+OnlyblackTea@users.noreply.github.com> Co-authored-by: ocetars <74854972+ocetars@users.noreply.github.com> Co-authored-by: railgun19457 <117180744+railgun19457@users.noreply.github.com> Co-authored-by: JunieXD <107397009+JunieXD@users.noreply.github.com> Co-authored-by: advent259141 <197440256+advent259141@users.noreply.github.com> Co-authored-by: Doge2077 <91442300+Doge2077@users.noreply.github.com> Co-authored-by: Bocity <23430545+Bocity@users.noreply.github.com> Co-authored-by: Aurora-xk <192227833+Aurora-xk@users.noreply.github.com>
122 lines
3.1 KiB
Vue
122 lines
3.1 KiB
Vue
<script setup>
|
|
import { computed } from 'vue'
|
|
import { useData, useRoute } from 'vitepress'
|
|
|
|
const route = useRoute()
|
|
const { frontmatter } = useData()
|
|
|
|
const isEnglish = computed(() => route.path.startsWith('/en/'))
|
|
|
|
const zhTabs = [
|
|
{
|
|
text: '简介和部署',
|
|
link: '/what-is-astrbot',
|
|
matchers: ['/what-is-astrbot', '/community', '/faq', '/deploy/', '/others/', '/ospp/']
|
|
},
|
|
{ text: '接入消息平台', link: '/platform/start', matchers: ['/platform/'] },
|
|
{ text: '接入 AI', link: '/providers/start', matchers: ['/providers/'] },
|
|
{ text: '使用', link: '/use/webui', matchers: ['/use/'] },
|
|
{ text: '开发', link: '/dev/star/plugin-new', matchers: ['/dev/'] }
|
|
]
|
|
|
|
const enTabs = [
|
|
{
|
|
text: 'Intro & Deploy',
|
|
link: '/en/what-is-astrbot',
|
|
matchers: ['/en/what-is-astrbot', '/en/community', '/en/faq', '/en/deploy/', '/en/others/', '/en/ospp/']
|
|
},
|
|
{ text: 'Messaging Platforms', link: '/en/platform/start', matchers: ['/en/platform/'] },
|
|
{ text: 'AI Integration', link: '/en/providers/start', matchers: ['/en/providers/'] },
|
|
{ text: 'Usage', link: '/en/use/webui', matchers: ['/en/use/'] },
|
|
{ text: 'Development', link: '/en/dev/star/plugin-new', matchers: ['/en/dev/'] }
|
|
]
|
|
|
|
const tabs = computed(() => (isEnglish.value ? enTabs : zhTabs))
|
|
|
|
const isHome = computed(() => route.path === '/' || route.path === '/en/')
|
|
|
|
const shouldShow = computed(() => frontmatter.value.layout !== false && frontmatter.value.layout !== 'home' && !isHome.value)
|
|
|
|
function isActive(tab) {
|
|
return tab.matchers.some(prefix => route.path.startsWith(prefix))
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<template v-if="shouldShow">
|
|
<div class="VPSectionTabsPlaceholder" aria-hidden="true" />
|
|
<div class="VPSectionTabs">
|
|
<div class="container">
|
|
<a
|
|
v-for="tab in tabs"
|
|
:key="tab.link"
|
|
class="tab"
|
|
:class="{ active: isActive(tab) }"
|
|
:href="tab.link"
|
|
>
|
|
{{ tab.text }}
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
<style scoped>
|
|
.VPSectionTabs {
|
|
display: none;
|
|
}
|
|
|
|
.VPSectionTabsPlaceholder {
|
|
display: none;
|
|
}
|
|
|
|
@media (min-width: 1280px) {
|
|
.VPSectionTabsPlaceholder {
|
|
display: block;
|
|
height: var(--vp-section-tabs-height, 44px);
|
|
}
|
|
|
|
.VPSectionTabs {
|
|
display: block;
|
|
position: fixed;
|
|
left: 0;
|
|
right: 0;
|
|
top: calc(var(--vp-layout-top-height, 0px) + var(--vp-nav-height));
|
|
z-index: 26;
|
|
border-bottom: 1px solid var(--vp-c-gutter);
|
|
background-color: var(--vp-nav-bg-color);
|
|
}
|
|
|
|
.container {
|
|
margin: 0 auto;
|
|
max-width: var(--vp-layout-max-width);
|
|
display: flex;
|
|
align-items: flex-end;
|
|
gap: 10px;
|
|
box-sizing: border-box;
|
|
height: var(--vp-section-tabs-height, 44px);
|
|
padding: 0 32px 8px;
|
|
}
|
|
|
|
.tab {
|
|
border-radius: 999px;
|
|
padding: 6px 12px;
|
|
font-size: 13px;
|
|
line-height: 20px;
|
|
color: var(--vp-c-text-2);
|
|
white-space: nowrap;
|
|
transition: color 0.2s ease, background-color 0.2s ease;
|
|
}
|
|
|
|
.tab:hover {
|
|
color: var(--vp-c-text-1);
|
|
background-color: var(--vp-c-default-soft);
|
|
}
|
|
|
|
.tab.active {
|
|
color: var(--vp-c-brand-1);
|
|
background-color: var(--vp-c-brand-soft);
|
|
}
|
|
}
|
|
</style>
|