@neosjs/vitepress-theme
Version:
NeosJS VitePress theme
67 lines (66 loc) • 1.69 kB
JavaScript
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}`
}));
}