Modrinth/pages/mod/_id/index.vue
2020-10-21 14:30:13 -07:00

103 lines
2.4 KiB
Vue

<template>
<ModPage :mod="mod" :versions="versions" :members="members">
<div class="markdown-body" v-html="body"></div>
</ModPage>
</template>
<script>
import axios from 'axios'
import xss from 'xss'
import marked from 'marked'
import ModPage from '@/components/ModPage'
export default {
components: { ModPage },
auth: false,
async asyncData(data) {
let res = await axios.get(
`https://api.modrinth.com/api/v1/mod/${data.params.id}`
)
const mod = res.data
res = await axios.get(
`https://api.modrinth.com/api/v1/team/${mod.team}/members`
)
const members = res.data
for (let i = 0; i < members.length; i++) {
res = await axios.get(
`https://api.modrinth.com/api/v1/user/${members[i].user_id}`
)
members[i].avatar_url = res.data.avatar_url
}
res = await axios.get(mod.body_url)
const body = xss(marked(res.data))
const versions = []
for (const version of mod.versions) {
res = await axios.get(
`https://api.modrinth.com/api/v1/version/${version}`
)
versions.push(res.data)
}
return {
mod,
body,
versions,
members,
}
},
head() {
return {
title: this.mod.title + ' - Modrinth',
meta: [
{
hid: 'description',
name: 'description',
content:
this.mod.description +
' View other minecraft mods on Modrinth today! Modrinth is a new and modern Minecraft modding platform that is compatible with CurseForge too!',
},
{
hid: 'apple-mobile-web-app-title',
name: 'apple-mobile-web-app-title',
content: this.mod.title,
},
{
hid: 'og:site_name',
name: 'og:site_name',
content: this.mod.title,
},
{
hid: 'og:description',
name: 'og:description',
content: this.mod.description,
},
{ hid: 'og:type', name: 'og:type', content: 'article' },
{
hid: 'og:image',
name: 'og:image',
content: this.mod.icon_url
? this.mod.icon_url
: 'https://cdn.modrinth.com/placeholder.png',
},
],
}
},
}
</script>
<style lang="scss" scoped>
.markdown-body {
padding: 20px;
box-shadow: 0 2px 3px 1px var(--color-grey-2);
background: var(--color-bg);
border-radius: 0 0 var(--size-rounded-sm) var(--size-rounded-sm);
}
</style>