koel/resources/assets/js/components/meta/AboutKoelModal.vue

147 lines
3.2 KiB
Vue
Raw Normal View History

2022-04-15 14:24:30 +00:00
<template>
<div v-koel-focus class="about text-secondary" data-testid="about-koel" tabindex="0" @keydown.esc="close">
2022-04-15 14:24:30 +00:00
<main>
<div class="logo">
2022-04-21 22:58:32 +00:00
<img alt="Koel's logo" src="@/../img/logo.svg" width="128">
2022-04-15 14:24:30 +00:00
</div>
<p class="current-version">Koel {{ currentVersion }}</p>
2022-04-15 14:24:30 +00:00
<p v-if="shouldNotifyNewVersion" data-testid="new-version-about">
<a :href="latestVersionReleaseUrl" target="_blank">
A new version of Koel is available ({{ latestVersion }})!
2022-04-15 14:24:30 +00:00
</a>
</p>
<p class="author">
2022-04-21 22:58:32 +00:00
Made with by
<a href="https://github.com/phanan" rel="noopener" target="_blank">Phan An</a>
2022-04-15 14:24:30 +00:00
and quite a few
<a href="https://github.com/koel/core/graphs/contributors" rel="noopener" target="_blank">awesome</a>&nbsp;<a
href="https://github.com/koel/koel/graphs/contributors" rel="noopener" target="_blank">contributors</a>.
2022-04-15 14:24:30 +00:00
</p>
<div v-if="credits" class="credit-wrapper" data-testid="demo-credits">
2022-08-04 08:34:13 +00:00
Music by
<ul class="credits">
<li v-for="credit in credits" :key="credit.name">
<a :href="credit.url" target="_blank">{{ credit.name }}</a>
</li>
</ul>
</div>
2022-04-15 14:24:30 +00:00
<SponsorList/>
2022-04-15 14:24:30 +00:00
<p>
Loving Koel? Please consider supporting its development via
2022-04-21 22:58:32 +00:00
<a href="https://github.com/users/phanan/sponsorship" rel="noopener" target="_blank">GitHub Sponsors</a>
2022-04-15 14:24:30 +00:00
and/or
2022-04-21 22:58:32 +00:00
<a href="https://opencollective.com/koel" rel="noopener" target="_blank">OpenCollective</a>.
2022-04-15 14:24:30 +00:00
</p>
</main>
<footer>
2022-05-03 16:51:59 +00:00
<Btn data-testid="close-modal-btn" red rounded @click.prevent="close">Close</Btn>
2022-04-15 14:24:30 +00:00
</footer>
</div>
</template>
2022-04-15 17:00:08 +00:00
<script lang="ts" setup>
2022-08-04 08:34:13 +00:00
import { orderBy } from 'lodash'
import { onMounted, ref } from 'vue'
2022-04-29 20:15:10 +00:00
import { isDemo } from '@/utils'
import { useNewVersionNotification } from '@/composables'
import { http } from '@/services'
2022-04-15 14:24:30 +00:00
import SponsorList from '@/components/meta/SponsorList.vue'
import Btn from '@/components/ui/Btn.vue'
2022-04-15 14:24:30 +00:00
2022-08-04 08:34:13 +00:00
type DemoCredits = {
name: string
url: string
}
const credits = ref<DemoCredits[] | null>(null)
2022-08-04 08:34:13 +00:00
const {
shouldNotifyNewVersion,
currentVersion,
latestVersion,
latestVersionReleaseUrl
} = useNewVersionNotification()
2022-04-15 17:00:08 +00:00
const emit = defineEmits<{ (e: 'close'): void }>()
2022-04-15 17:00:08 +00:00
const close = () => emit('close')
2022-08-04 08:34:13 +00:00
onMounted(async () => {
credits.value = isDemo() ? orderBy(await http.get<DemoCredits[]>('demo/credits'), 'name') : null
2022-08-04 08:34:13 +00:00
})
2022-04-15 14:24:30 +00:00
</script>
<style lang="scss" scoped>
.about {
text-align: center;
max-width: 480px;
overflow: hidden;
position: relative;
2022-04-15 14:24:30 +00:00
main {
padding: 1.8rem;
2022-04-15 14:24:30 +00:00
p {
margin: 1rem 0;
}
}
footer {
2022-04-15 14:24:30 +00:00
padding: 1rem;
background: rgba(255, 255, 255, .02);
2022-04-15 14:24:30 +00:00
}
a {
color: var(--color-text-primary);
&:hover {
color: var(--color-accent);
2022-04-15 14:24:30 +00:00
}
}
}
2022-08-04 08:34:13 +00:00
.credit-wrapper {
max-height: 9rem;
overflow: auto;
}
.credits, .credits li {
display: inline;
}
.credits {
display: inline;
li {
display: inline;
&:last-child {
&::before {
content: ', and '
}
&::after {
content: '.';
}
}
}
li + li {
&::before {
content: ', ';
}
}
}
.sponsors {
margin-top: 1rem;
}
2022-04-15 14:24:30 +00:00
</style>