meface/docs/.vuepress/theme/components/SubSidebar.vue

76 lines
1.6 KiB
Vue

<script>
import { isActive } from '@theme/helpers/utils'
export default {
computed: {
headers () {
return this.$showSubSideBar ? this.$page.headers : []
}
},
methods: {
isLinkActive (header) {
const active = isActive(this.$route, this.$page.path + '#' + header.slug)
if (active) {
setTimeout(() => {
document.querySelector(`.reco-${header.slug}`).scrollIntoView()
}, 300)
}
return active
}
},
render (h) {
return h('ul', {
class: { 'sub-sidebar-wrapper': true },
style: { width: this.headers.length > 0 ? '12rem' : '0' }
}, [
...this.headers.map(header => {
return h('li', {
class: {
active: this.isLinkActive(header),
[`level-${header.level}`]: true
},
attr: { key: header.title }
}, [
h('router-link', {
class: { 'sidebar-link': true, [`reco-${header.slug}`]: true },
props: { to: `${this.$page.path}#${header.slug}` }
}, header.title)
])
})
])
}
}
</script>
<style lang="stylus" scoped>
.sub-sidebar-wrapper
width 12rem
padding-left 0
list-style none
font-size 12px
li
padding .2rem 0
cursor pointer
border-left 1px solid var(--border-color)
a
padding 0.35rem 1rem 0.35rem 0rem
color var(--text-color)
&:hover
a
color $accentColor
&.active
border-left 1px solid $accentColor
a
color $accentColor
&.level-1
padding-left .4rem
&.level-2
padding-left .9rem
&.level-3
padding-left 1.5rem
&.level-4
padding-left 2rem
</style>