mirror of https://github.com/vuejs/vitepress
feat: add array sidebar support (#35)
parent
da8df19cbe
commit
4a8388e113
@ -1,43 +1,61 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="sidebar">
|
<ul class="sidebar">
|
||||||
<ul>
|
<SideBarItem v-for="item of items" :item="item" />
|
||||||
<SideBarItem v-for="item of items" :item="item"></SideBarItem>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script src="./SideBar"></script>
|
<script src="./SideBar"></script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.sidebar ul {
|
.sidebar,
|
||||||
|
.sidebar-items {
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
line-height: 2;
|
line-height: 2;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar a {
|
.sidebar-items .sidebar-items {
|
||||||
display: inline-block;
|
padding-left: 1rem;
|
||||||
color: var(--text-color);
|
|
||||||
padding-left: 1.5rem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar a:hover {
|
.sidebar-items .sidebar-items .sidebar-link {
|
||||||
color: var(--accent-color);
|
border-left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar a.active {
|
.sidebar-items .sidebar-items .sidebar-link.active {
|
||||||
color: var(--accent-color);
|
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar > ul > li > a.active {
|
.sidebar-items .sidebar-link {
|
||||||
padding-left: 1.25rem;
|
padding: .35rem 1rem .35rem 2rem;
|
||||||
border-left: .25rem solid var(--accent-color);
|
line-height: 1.4;
|
||||||
|
font-size: 0.9em;
|
||||||
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar ul ul {
|
.sidebar-link {
|
||||||
font-size: 0.9em;
|
display: block;
|
||||||
padding-left: 1rem;
|
margin: 0;
|
||||||
|
border-left: .25rem solid transparent;
|
||||||
|
padding: .35rem 1.5rem .35rem 1.25rem;
|
||||||
|
line-height: 1.7;
|
||||||
|
font-size: 1em;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--text-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
a.sidebar-link {
|
||||||
|
transition: color .15s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.sidebar-link:hover {
|
||||||
|
color: var(--accent-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
a.sidebar-link.active {
|
||||||
|
border-left-color: var(--accent-color);
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--accent-color);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -1,5 +1,23 @@
|
|||||||
import { useSiteData } from 'vitepress'
|
import { useSiteData, Route } from 'vitepress'
|
||||||
|
|
||||||
|
export const hashRE = /#.*$/
|
||||||
|
export const extRE = /\.(md|html)$/
|
||||||
|
|
||||||
export function withBase(path: string) {
|
export function withBase(path: string) {
|
||||||
return (useSiteData().value.base + path).replace(/\/+/g, '/')
|
return (useSiteData().value.base + path).replace(/\/+/g, '/')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function isActive(route: Route, path?: string): boolean {
|
||||||
|
if (path === undefined) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
const routePath = normalize(route.path)
|
||||||
|
const pagePath = normalize(path)
|
||||||
|
|
||||||
|
return routePath === pagePath
|
||||||
|
}
|
||||||
|
|
||||||
|
export function normalize(path: string): string {
|
||||||
|
return decodeURI(path).replace(hashRE, '').replace(extRE, '')
|
||||||
|
}
|
||||||
|
Loading…
Reference in new issue