v3.0.0/src/site/pages/a/_identifier.vue

142 lines
5.1 KiB
Vue
Raw Normal View History

2018-09-17 09:38:25 +02:00
<style lang="scss" scoped>
2018-09-19 09:45:50 +02:00
@import '~/assets/styles/_colors.scss';
2018-09-17 09:38:25 +02:00
section { background-color: $backgroundLight1 !important; }
section.hero div.hero-body.align-top {
align-items: baseline;
flex-grow: 0;
padding-bottom: 0;
}
div.loading-container {
justify-content: center;
display: flex;
}
</style>
<style lang="scss">
2018-09-19 09:45:50 +02:00
@import '~/assets/styles/_colors.scss';
2018-09-17 09:38:25 +02:00
</style>
<template>
<section class="hero is-fullheight">
2018-09-18 08:52:49 +02:00
<template v-if="files && files.length">
2018-09-17 09:38:25 +02:00
<div class="hero-body align-top">
<div class="container">
<h1 class="title">{{ name }}</h1>
2018-09-18 09:21:48 +02:00
<h2 class="subtitle">Serving {{ files ? files.length : 0 }} files</h2>
2018-09-18 08:34:00 +02:00
<a v-if="downloadLink"
:href="downloadLink">Download Album</a>
2018-09-17 09:38:25 +02:00
<hr>
</div>
</div>
<div class="hero-body">
<div class="container">
2018-09-18 09:21:48 +02:00
<Grid v-if="files && files.length"
2018-09-17 09:38:25 +02:00
:files="files"
:isPublic="true"
2019-02-18 15:36:35 +01:00
:width="200" />
2018-09-17 09:38:25 +02:00
</div>
</div>
</template>
<template v-else>
<div class="hero-body">
<div class="container loading-container">
2019-02-18 15:36:35 +01:00
<Loading class="square" />
2018-09-17 09:38:25 +02:00
</div>
</div>
</template>
</section>
</template>
<script>
2018-09-19 09:45:50 +02:00
import Grid from '~/components/grid/Grid.vue';
import Loading from '~/components/loading/CubeShadow.vue';
2018-09-17 09:38:25 +02:00
import axios from 'axios';
2018-09-19 09:45:50 +02:00
import config from '~/config.js';
2018-09-17 09:38:25 +02:00
export default {
components: { Grid, Loading },
2018-09-19 09:45:50 +02:00
async asyncData({ params, error }) {
2018-09-17 09:38:25 +02:00
try {
2018-09-19 09:45:50 +02:00
const res = await axios.get(`${config.baseURL}/album/${params.identifier}`);
const downloadLink = res.data.downloadEnabled ? `${config.baseURL}/album/${params.identifier}/zip` : null;
2018-09-17 09:38:25 +02:00
return {
name: res.data.name,
downloadEnabled: res.data.downloadEnabled,
2018-09-18 08:34:00 +02:00
files: res.data.files,
downloadLink
2018-09-17 09:38:25 +02:00
};
2018-09-19 09:45:50 +02:00
} catch (err) {
/*
2018-09-18 08:52:49 +02:00
return {
name: null,
downloadEnabled: false,
files: [],
downloadLink: null,
error: error.response.status
};
2018-09-19 09:45:50 +02:00
*/
error({ statusCode: 404, message: 'Post not found' });
2018-09-17 09:38:25 +02:00
}
},
data() {
return {};
},
2018-09-19 09:45:50 +02:00
computed: {
config() {
return this.$store.state.config;
}
},
2018-09-17 09:38:25 +02:00
metaInfo() {
2018-09-19 09:45:50 +02:00
if (this.files) {
2018-09-18 09:21:48 +02:00
return {
title: `${this.name ? this.name : ''}`,
meta: [
{ vmid: 'theme-color', name: 'theme-color', content: '#30a9ed' },
{ vmid: 'twitter:card', name: 'twitter:card', content: 'summary' },
{ vmid: 'twitter:title', name: 'twitter:title', content: `Album: ${this.name} | Files: ${this.files.length}` },
{ vmid: 'twitter:description', name: 'twitter:description', content: 'A modern and self-hosted file upload service that can handle anything you throw at it. Fast uploads, file manager and sharing capabilities all crafted with a beautiful user experience in mind.' },
{ vmid: 'twitter:image', name: 'twitter:image', content: `${this.files.length > 0 ? this.files[0].thumbSquare : '/public/images/share.jpg'}` },
{ vmid: 'twitter:image:src', name: 'twitter:image:src', value: `${this.files.length > 0 ? this.files[0].thumbSquare : '/public/images/share.jpg'}` },
2018-09-17 09:38:25 +02:00
2018-09-18 09:21:48 +02:00
{ vmid: 'og:url', property: 'og:url', content: `${config.URL}/a/${this.$route.params.identifier}` },
{ vmid: 'og:title', property: 'og:title', content: `Album: ${this.name} | Files: ${this.files.length}` },
{ vmid: 'og:description', property: 'og:description', content: 'A modern and self-hosted file upload service that can handle anything you throw at it. Fast uploads, file manager and sharing capabilities all crafted with a beautiful user experience in mind.' },
{ vmid: 'og:image', property: 'og:image', content: `${this.files.length > 0 ? this.files[0].thumbSquare : '/public/images/share.jpg'}` },
{ vmid: 'og:image:secure_url', property: 'og:image:secure_url', content: `${this.files.length > 0 ? this.files[0].thumbSquare : '/public/images/share.jpg'}` }
]
};
}
2018-09-19 09:45:50 +02:00
return {
title: `${this.name ? this.name : ''}`,
meta: [
{ vmid: 'theme-color', name: 'theme-color', content: '#30a9ed' },
{ vmid: 'twitter:card', name: 'twitter:card', content: 'summary' },
{ vmid: 'twitter:title', name: 'twitter:title', content: 'lolisafe' },
{ vmid: 'twitter:description', name: 'twitter:description', content: 'A modern and self-hosted file upload service that can handle anything you throw at it. Fast uploads, file manager and sharing capabilities all crafted with a beautiful user experience in mind.' },
{ vmid: 'og:url', property: 'og:url', content: `${config.URL}/a/${this.$route.params.identifier}` },
{ vmid: 'og:title', property: 'og:title', content: 'lolisafe' },
{ vmid: 'og:description', property: 'og:description', content: 'A modern and self-hosted file upload service that can handle anything you throw at it. Fast uploads, file manager and sharing capabilities all crafted with a beautiful user experience in mind.' }
]
};
2018-09-17 09:38:25 +02:00
},
mounted() {
2018-09-19 09:45:50 +02:00
/*
2018-09-18 08:52:49 +02:00
if (this.error) {
if (this.error === 404) {
this.$toast.open('Album not found', true, 3000);
setTimeout(() => this.$router.push('/404'), 3000);
return;
}
2018-09-19 09:45:50 +02:00
this.$toast.open(`Error code ${this.error}`, true, 3000);
2018-09-18 08:52:49 +02:00
}
2018-09-19 09:45:50 +02:00
*/
2018-09-17 09:38:25 +02:00
this.$ga.page({
page: `/a/${this.$route.params.identifier}`,
title: `Album | ${this.name}`,
location: window.location.href
});
2018-09-18 08:34:00 +02:00
}
2018-09-17 09:38:25 +02:00
};
</script>