Skip to content

Commit ad0067b

Browse files
committed
sidebar sponsors
1 parent a360920 commit ad0067b

File tree

4 files changed

+83
-10
lines changed

4 files changed

+83
-10
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<script setup lang="ts">
2+
import SponsorsGroup from './SponsorsGroup.vue'
3+
import { useData } from 'vitepress'
4+
const { frontmatter } = useData()
5+
</script>
6+
7+
<template>
8+
<div v-if="frontmatter.sponsors !== false">
9+
<a class="sponsors-aside-text" href="/sponsor/">Sponsors</a>
10+
<SponsorsGroup tier="special" />
11+
<SponsorsGroup tier="platinum" />
12+
</div>
13+
</template>
14+
15+
<style>
16+
a.sponsors-aside-text {
17+
display: block;
18+
margin: 2em 0 1em;
19+
font-weight: 700;
20+
font-size: 11px;
21+
text-transform: uppercase;
22+
letter-spacing: 0.4px;
23+
}
24+
</style>

src/sponsor/Sponsors.vue renamed to .vitepress/theme/components/SponsorsGroup.vue

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ interface Data {
2121
bronze: Sponsor[]
2222
}
2323
24-
const { tier } = defineProps<{ tier: keyof Data }>()
24+
const { tier, placement = 'aside' } = defineProps<{
25+
tier: keyof Data
26+
placement?: 'aside' | 'page' | 'landing'
27+
}>()
2528
2629
onMounted(async () => {
2730
if (!data) {
@@ -31,7 +34,7 @@ onMounted(async () => {
3134
</script>
3235

3336
<template>
34-
<div v-if="data" class="sponsor-container" :class="tier">
37+
<div v-if="data" class="sponsor-container" :class="[tier, placement]">
3538
<a
3639
v-for="{ url, img, name } of data[tier]"
3740
class="sponsor-item"
@@ -73,7 +76,50 @@ onMounted(async () => {
7376
max-height: 60px;
7477
}
7578
76-
@media (max-width: 600px) {
79+
/* aside mode (on content pages) */
80+
.sponsor-container.aside {
81+
justify-content: space-between;
82+
}
83+
.aside .sponsor-item {
84+
margin: 1px;
85+
background-color: var(--vt-c-bg-soft);
86+
display: flex;
87+
justify-content: space-around;
88+
align-items: center;
89+
border-radius: 4px;
90+
transition: background-color .2s ease;
91+
}
92+
.aside .sponsor-item img {
93+
transition: filter .2s ease;
94+
}
95+
.dark .aside .sponsor-item img {
96+
filter: grayscale(1) invert(1);
97+
}
98+
.dark .aside .sponsor-item:hover {
99+
background-color: var(--vt-c-white-soft);
100+
}
101+
.dark .aside .sponsor-item:hover img {
102+
filter: none;
103+
}
104+
.aside .special .sponsor-item {
105+
width: 100%;
106+
height: 60px;
107+
}
108+
.aside .special .sponsor-item img {
109+
width: 120px;
110+
}
111+
112+
.aside .platinum .sponsor-item {
113+
width: 110px;
114+
height: 50px;
115+
}
116+
.aside .platinum .sponsor-item img,
117+
.aside .platinum_china .sponsor-item img {
118+
max-width: 88px;
119+
}
120+
121+
/* narrow, aside will be hidden under this state so it's mutually exclusive */
122+
@media (max-width: 720px) {
77123
.sponsor-item {
78124
padding: 6px;
79125
margin-bottom: 20px;

.vitepress/theme/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@ import {
88
preferSFC,
99
filterHeadersByPreference
1010
} from './components/preferences'
11+
import SponsorsAside from './components/SponsorsAside.vue'
1112

1213
export default Object.assign({}, VPTheme, {
1314
Layout: () => {
1415
// @ts-ignore
1516
return h(VPTheme.Layout, null, {
1617
banner: () => h(Banner),
17-
'sidebar-top': () => h(PreferenceSwitch)
18+
'sidebar-top': () => h(PreferenceSwitch),
19+
'aside-mid': () => h(SponsorsAside)
1820
})
1921
},
2022
enhanceApp({ app }: { app: App }) {

src/sponsor/index.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22
sidebar: false
33
ads: false
44
editLink: false
5+
sponsors: false
56
---
67

78
<script setup>
8-
import Sponsors from './Sponsors.vue'
9+
import SponsorsGroup from '/@theme/components/SponsorsGroup.vue'
910
</script>
1011

1112
# Become a Vue.js Sponsor
@@ -57,20 +58,20 @@ Sponsorships can be done via [GitHub Sponsors](https://github.com/sponsors/yyx99
5758

5859
### Special Global Sponsor
5960

60-
<Sponsors tier="special" />
61+
<SponsorsGroup tier="special" placement="page" />
6162

6263
### Platinum
6364

64-
<Sponsors tier="platinum" />
65+
<SponsorsGroup tier="platinum" placement="page" />
6566

6667
### Platinum (China)
6768

68-
<Sponsors tier="platinum_china" />
69+
<SponsorsGroup tier="platinum_china" placement="page" />
6970

7071
### Gold
7172

72-
<Sponsors tier="gold" />
73+
<SponsorsGroup tier="gold" placement="page" />
7374

7475
### Silver
7576

76-
<Sponsors tier="silver" />
77+
<SponsorsGroup tier="silver" placement="page" />

0 commit comments

Comments
 (0)