Skip to content

Commit f92e576

Browse files
authored
docs: update sponsors source (#2554)
1 parent 7e29b2f commit f92e576

9 files changed

Lines changed: 54 additions & 154 deletions

File tree

.vitepress/theme/components/AsideSponsors.vue

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
<script setup lang="ts">
22
import { computed } from 'vue'
3-
import { VPDocAsideSponsors } from '@voidzero-dev/vitepress-theme'
4-
import { useSponsor, voidZero } from '../composables/sponsor'
3+
import {
4+
VPDocAsideSponsors,
5+
type Sponsors,
6+
} from '@voidzero-dev/vitepress-theme'
7+
import { useSponsor } from '../composables/sponsor'
58
6-
const { data } = useSponsor()
9+
const data = useSponsor()
710
811
const sponsors = computed(() => {
9-
return [
10-
{ size: 'small' as const, items: [voidZero] },
11-
...(data.value?.map((sponsor) => {
12-
return {
13-
size: (sponsor.size === 'big' ? 'mini' : 'xmini') as 'mini' | 'xmini',
14-
items: sponsor.items,
15-
}
16-
}) ?? []),
17-
]
12+
return data.value?.map<Sponsors>((s, i) => {
13+
return {
14+
size: i === 0 ? 'small' : s.size === 'big' ? 'mini' : 'xmini',
15+
items: s.items,
16+
}
17+
})
1818
})
1919
</script>
2020

@@ -36,7 +36,7 @@ const sponsors = computed(() => {
3636
<p class="extra-info">リプレイを視聴する</p>
3737
</span>
3838
</a>
39-
<VPDocAsideSponsors v-if="data" :data="sponsors" />
39+
<VPDocAsideSponsors v-if="sponsors" :data="sponsors" />
4040
</template>
4141

4242
<style scoped>

.vitepress/theme/composables/images/astro.svg

Lines changed: 0 additions & 1 deletion
This file was deleted.

.vitepress/theme/composables/images/bolt.svg

Lines changed: 0 additions & 1 deletion
This file was deleted.

.vitepress/theme/composables/images/nuxtlabs.svg

Lines changed: 0 additions & 1 deletion
This file was deleted.

.vitepress/theme/composables/images/stackblitz.svg

Lines changed: 0 additions & 1 deletion
This file was deleted.

.vitepress/theme/composables/images/voidzero.svg

Lines changed: 0 additions & 3 deletions
This file was deleted.
Lines changed: 32 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -1,132 +1,46 @@
1-
import { onMounted, onUnmounted, ref } from 'vue'
2-
import type {
3-
Sponsor,
4-
SponsorTier,
5-
} from '@voidzero-dev/vitepress-theme/src/types/sponsors'
6-
import voidZeroSvg from './images/voidzero.svg'
7-
import boltSvg from './images/bolt.svg'
8-
import nuxtLabsSvg from './images/nuxtlabs.svg'
1+
import { onMounted, ref } from 'vue'
2+
import type { Sponsor, SponsorTier } from '@voidzero-dev/vitepress-theme'
93

104
interface Sponsors {
11-
special: Sponsor[]
5+
main: Sponsor[]
6+
partnership: Sponsor[]
127
platinum: Sponsor[]
13-
platinum_china: Sponsor[]
148
gold: Sponsor[]
15-
silver: Sponsor[]
16-
bronze: Sponsor[]
179
}
1810

1911
// shared data across instances so we load only once.
2012
const data = ref<SponsorTier[]>()
2113

22-
const dataHost = 'https://sponsors.vuejs.org'
23-
const dataUrl = `${dataHost}/vite.json`
24-
25-
export const voidZero = {
26-
name: 'VoidZero',
27-
url: 'https://voidzero.dev',
28-
img: voidZeroSvg,
29-
} satisfies Sponsor
30-
31-
const viteSponsors: Pick<Sponsors, 'special' | 'gold'> = {
32-
special: [
33-
// sponsors patak-dev
34-
{
35-
name: 'Bolt',
36-
url: 'https://bolt.new',
37-
img: boltSvg,
38-
},
39-
// sponsors antfu
40-
{
41-
name: 'NuxtLabs',
42-
url: 'https://nuxtlabs.com',
43-
img: nuxtLabsSvg,
44-
},
45-
],
46-
gold: [
47-
// now automated via sponsors.vuejs.org too
48-
],
49-
}
50-
51-
function toggleDarkLogos() {
52-
if (data.value) {
53-
const isDark = document.documentElement.classList.contains('dark')
54-
data.value.forEach(({ items }) => {
55-
items.forEach((s: Sponsor) => {
56-
if (s.hasDark) {
57-
s.img = isDark
58-
? s.img.replace(/(\.\w+)$/, '-dark$1')
59-
: s.img.replace(/-dark(\.\w+)$/, '$1')
60-
}
61-
})
62-
})
63-
}
64-
}
65-
6614
export function useSponsor() {
6715
onMounted(async () => {
68-
const ob = new MutationObserver((list) => {
69-
for (const m of list) {
70-
if (m.attributeName === 'class') {
71-
toggleDarkLogos()
72-
}
73-
}
74-
})
75-
ob.observe(document.documentElement, { attributes: true })
76-
onUnmounted(() => {
77-
ob.disconnect()
78-
})
79-
80-
if (data.value) {
81-
return
82-
}
83-
84-
const result = await fetch(dataUrl)
85-
const json = await result.json()
86-
87-
data.value = mapSponsors(json)
88-
toggleDarkLogos()
16+
if (data.value) return
17+
18+
const result = await fetch('https://sponsors.vite.dev/sponsors.json')
19+
const sponsors: Sponsors = await result.json()
20+
21+
data.value = [
22+
{
23+
tier: '提供',
24+
size: 'big',
25+
items: sponsors.main,
26+
},
27+
{
28+
tier: 'パートナーシップ',
29+
size: 'big',
30+
items: sponsors.partnership,
31+
},
32+
{
33+
tier: 'プラチナスポンサー',
34+
size: 'big',
35+
items: sponsors.platinum,
36+
},
37+
{
38+
tier: 'ゴールドスポンサー',
39+
size: 'medium',
40+
items: sponsors.gold,
41+
},
42+
]
8943
})
9044

91-
return {
92-
data,
93-
}
94-
}
95-
96-
function mapSponsors(sponsors: Sponsors): SponsorTier[] {
97-
return [
98-
{
99-
tier: 'パートナーシップ',
100-
size: 'big' as const,
101-
items: viteSponsors['special'],
102-
},
103-
{
104-
tier: 'プラチナスポンサー',
105-
size: 'big' as const,
106-
items: mapImgPath(sponsors['platinum']),
107-
},
108-
{
109-
tier: 'ゴールドスポンサー',
110-
size: 'medium' as const,
111-
items: [...mapImgPath(sponsors['gold']), ...viteSponsors['gold']],
112-
},
113-
]
114-
}
115-
116-
const viteSponsorNames = new Set(
117-
Object.values(viteSponsors).flatMap((sponsors) =>
118-
sponsors.map((s) => s.name),
119-
),
120-
)
121-
122-
/**
123-
* Map Vue/Vite sponsors data to objects and filter out Vite-specific sponsors
124-
*/
125-
function mapImgPath(sponsors: Sponsor[]) {
126-
return sponsors
127-
.filter((sponsor) => !viteSponsorNames.has(sponsor.name))
128-
.map((sponsor) => ({
129-
...sponsor,
130-
img: `${dataHost}/images/${sponsor.img}`,
131-
}))
45+
return data
13246
}

.vitepress/theme/landing/Layout.vue

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<script setup>
22
// these components live in @voidzero-dev/vitepress-theme
3+
import { computed } from 'vue'
34
import Hero from './Hero.vue'
45
import ViteFeatureGrid1 from './FeatureGrid1.vue'
56
import ViteFeatureGrid2 from './FeatureGrid2.vue'
@@ -12,7 +13,11 @@ import Spacer from '@components/shared/Spacer.vue'
1213
import Footer from '@components/oss/Footer.vue'
1314
import { useSponsor } from '../composables/sponsor'
1415
15-
const { data: sponsors } = useSponsor()
16+
const data = useSponsor()
17+
18+
const sponsors = computed(
19+
() => data.value?.filter((s) => s.tier !== '提供') ?? [],
20+
)
1621
</script>
1722
1823
<template>

acknowledgements.md

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,10 @@ description: Vite は偉大なプロジェクトの上に成り立っていま
66
<script setup>
77
import { computed } from 'vue'
88
// import { data } from './_data/acknowledgements.data' // 日本語リポジトリには packages/vite がないのでエラーになる。
9-
import { useSponsor, voidZero } from './.vitepress/theme/composables/sponsor'
9+
import { useSponsor } from './.vitepress/theme/composables/sponsor'
1010
import VPSponsors from '@components/vitepress-default/VPSponsors.vue'
1111

12-
const { data: sponsorData } = useSponsor()
13-
14-
const allSponsors = computed(() => {
15-
if (!sponsorData.value) return []
16-
return [
17-
{
18-
tier: 'Brought to you by',
19-
size: 'big',
20-
items: [voidZero],
21-
},
22-
...sponsorData.value,
23-
]
24-
})
12+
const sponsors = useSponsor()
2513

2614
function npmUrl(name) {
2715
return `https://www.npmjs.com/package/${name}`
@@ -43,7 +31,7 @@ Vite は国際的なコントリビューターのチームによって開発さ
4331
Vite の開発は寛大なスポンサーによって支えられています。[GitHub Sponsors](https://github.com/sponsors/vitejs) または [Open Collective](https://opencollective.com/vite) を通じて Vite を支援できます。
4432

4533
<div class="sponsors-container">
46-
<VPSponsors :data="allSponsors" />
34+
<VPSponsors :data="sponsors ?? []" />
4735
</div>
4836

4937
<!--

0 commit comments

Comments
 (0)