UNPKG

@neosjs/vitepress-theme

Version:

NeosJS VitePress theme

67 lines (66 loc) 1.69 kB
import { onMounted, ref } from "vue"; const data = ref(); const dataUrl = `/sponsors.json`; const viteSponsors = { special: [], platinum: [], gold: [], silver: [], bronze: [] }; export function useSponsor() { onMounted(async () => { if (data.value) return; const result = await fetch(dataUrl); const json = await result.json(); data.value = mapSponsors(json); }); return { data }; } function mapSponsors(sponsors) { return [ { // 特殊赞助商 tier: "\u7279\u6B8A\u8D5E\u52A9\u5546", size: "big", items: viteSponsors.special.concat(mapImgPath(sponsors.special)) }, { // 白金赞助商 tier: "\u767D\u91D1\u8D5E\u52A9\u5546", size: "big", items: viteSponsors.platinum.concat(mapImgPath(sponsors.platinum)) }, { // 黄金赞助商 tier: "\u9EC4\u91D1\u8D5E\u52A9\u5546", size: "medium", items: viteSponsors.gold.concat(mapImgPath(sponsors.gold)) }, { // 铜赞助商 tier: "\u767D\u94F6\u8D5E\u52A9\u5546", size: "xmini", items: viteSponsors.silver.concat(mapImgPath(sponsors.silver)) }, { // 铜赞助商 tier: "\u94DC\u8D5E\u52A9\u5546", size: "xmini", items: viteSponsors.bronze.concat(mapImgPath(sponsors.bronze)) } ]; } const viteSponsorNames = new Set( Object.values(viteSponsors).flatMap( (sponsors) => sponsors.map((s) => s.name) ) ); function mapImgPath(sponsors) { return sponsors.filter((sponsor) => !viteSponsorNames.has(sponsor.name)).map((sponsor) => ({ ...sponsor, img: sponsor.img.includes("http") ? sponsor.img : `/sponsor/${sponsor.img}` })); }