diff --git a/pages/event/_id.vue b/pages/event/_id.vue index 0864b16d..f7e8b9a1 100644 --- a/pages/event/_id.vue +++ b/pages/event/_id.vue @@ -15,8 +15,12 @@ el-row el-col(:md='18') + //- event image - img.main.mb-3(:src='imgPath' v-if='event.image_path') + el-image.main_image.mb-3(:src='imgPath' v-if='event.image_path' fit='contain') + div.loading(slot='placeholder') + el-icon(name='loading') + //- info for mobile screen div.d-block.d-lg-none span {{event|when}}, {{event|to}}
@@ -26,13 +30,14 @@ el-tag.mr-1.mb-1(v-for='tag in event.tags' size='mini' :key='tag') {{tag}} - //- info & actions for desktop el-dialog.embedDialog(:visible.sync='showEmbed') h4(slot='title') {{$t('common.embed_title')}} EmbedEvent(:event='event') + + //- info & actions for desktop el-col.d-none.d-lg-block(:md='6') el-menu.menu.mt-2 - p {{event|when}}
{{event|to}} + p {{event|when}}
{{event|to}} p {{event.place.name}} - {{event.place.address}} el-divider {{$t('common.actions')}} el-menu-item( @@ -93,55 +98,93 @@ export default { showFollowMe: false } }, - head () { - if (!this.event) { return {} } - const tags_feed = this.event.tags.map(tag => ({ rel: 'alternate', + head() { + if (!this.event) { + return {} + } + const tags_feed = this.event.tags.map(tag => ({ + rel: 'alternate', type: 'application/rss+xml', title: `${this.settings.title} events tagged ${tag}`, - href: this.settings.baseurl + `/feed/rss?tags=${tag}` })) - const place_feed = { rel: 'alternate', + href: this.settings.baseurl + `/feed/rss?tags=${tag}` + })) + const place_feed = { + rel: 'alternate', type: 'application/rss+xml', title: `${this.settings.title} events @${this.event.place.name}`, - href: this.settings.baseurl + `/feed/rss?places=${this.event.placeId}` } + href: this.settings.baseurl + `/feed/rss?places=${this.event.placeId}` + } return { title: `${this.settings.title} - ${this.event.title}`, meta: [ // hid is used as unique identifier. Do not use `vmid` for it as it will not work - { hid: 'description', + { + hid: 'description', name: 'description', - content: this.event.description.replace('\n', '').slice(0, 1000) }, - { hid: 'og-description', + content: this.event.description.replace('\n', '').slice(0, 1000) + }, + { + hid: 'og-description', name: 'og:description', - content: this.event.description.replace('\n', '').slice(0, 100) }, + content: this.event.description.replace('\n', '').slice(0, 100) + }, { hid: 'og-title', property: 'og:title', content: this.event.title }, - { hid: 'og-url', property: 'og:url', content: `${this.settings.baseurl}/event/${this.event.id}` }, + { + hid: 'og-url', + property: 'og:url', + content: `${this.settings.baseurl}/event/${this.event.id}` + }, { property: 'og:type', content: 'event' }, - { property: 'og:image', content: `${this.settings.baseurl}${this.imgPath}` }, + { + property: 'og:image', + content: `${this.settings.baseurl}${this.imgPath}` + }, { property: 'og:site_name', content: this.settings.title }, - { property: 'og:updated_time', content: moment.unix(this.event.start_datetime).format() }, - { property: 'article:published_time', content: moment.unix(this.event.start_datetime).format() }, + { + property: 'og:updated_time', + content: moment.unix(this.event.start_datetime).format() + }, + { + property: 'article:published_time', + content: moment.unix(this.event.start_datetime).format() + }, { property: 'article:section', content: 'event' }, { property: 'twitter:card', content: 'summary' }, { property: 'twitter:title', content: this.event.title }, - { property: 'twitter:image', content: `${this.settings.baseurl}${this.imgPath}` }, - { property: 'twitter:description', content: this.event.description.replace('\n', '').slice(0, 100) } + { + property: 'twitter:image', + content: `${this.settings.baseurl}${this.imgPath}` + }, + { + property: 'twitter:description', + content: this.event.description.replace('\n', '').slice(0, 100) + } ], link: [ { rel: 'image_src', href: `${this.settings.baseurl}${this.imgPath}` }, - { rel: 'alternate', type: 'application/rss+xml', title: this.settings.title, href: this.settings.baseurl + '/feed/rss' }, + { + rel: 'alternate', + type: 'application/rss+xml', + title: this.settings.title, + href: this.settings.baseurl + '/feed/rss' + }, ...tags_feed, place_feed ] } }, - async asyncData ({ $axios, params, error, store }) { + async asyncData({ $axios, params, error, store }) { try { - const [ id, start_datetime ] = params.id.split('_') + const [id, start_datetime] = params.id.split('_') const event = await $axios.$get(`/event/${id}`) - event.start_datetime = start_datetime ? Number(start_datetime) : event.start_datetime + event.start_datetime = start_datetime + ? Number(start_datetime) + : event.start_datetime const now = new Date() - const events = await $axios.$get(`/event/${now.getMonth()}/${now.getFullYear()}`) + const events = await $axios.$get( + `/event/${now.getMonth()}/${now.getFullYear()}` + ) store.commit('setEvents', events) return { event, id: Number(id) } } catch (e) { @@ -151,62 +194,81 @@ export default { computed: { ...mapGetters(['filteredEvents']), ...mapState(['settings']), - fedi_user () { + fedi_user() { // TODO: return this.settings.fedi_admin }, - next () { + next() { let found = false const event = this.filteredEvents.find(e => { - if (found) { return e } - found = (e.start_datetime === this.event.start_datetime && e.id === this.event.id) + if (found) { + return e + } + found = + e.start_datetime === this.event.start_datetime && + e.id === this.event.id }) - if (!event) { return false } + if (!event) { + return false + } if (event.recurrent) { return `${event.id}_${event.start_datetime}` } return event.id }, - prev () { + prev() { let event = false this.filteredEvents.find(e => { - if (e.start_datetime === this.event.start_datetime && e.id === this.event.id) { return true } + if ( + e.start_datetime === this.event.start_datetime && + e.id === this.event.id + ) { + return true + } event = e }) - if (!event) { return false } + if (!event) { + return false + } if (event.recurrent) { return `${event.id}_${event.start_datetime}` } return event.id }, - imgPath () { + imgPath() { return this.event.image_path && '/media/' + this.event.image_path }, - is_mine () { - if (!this.$auth.user) { return false } - return this.event.userId === this.$auth.user.id || this.$auth.user.is_admin + is_mine() { + if (!this.$auth.user) { + return false + } + return ( + this.event.userId === this.$auth.user.id || this.$auth.user.is_admin + ) } }, methods: { - copyLink () { - Message({ message: this.$t('common.copied'), type: 'success' }) + copyLink() { + Message({ message: this.$t('common.copied'), type: 'success', showClose: true }) }, - comment_filter (value) { - return value.replace(/]+).*>(?:.(?!<\/a>))*.<\/a>/, (orig, url) => { - // get extension - const ext = url.slice(-4) - if (['.mp3', '.ogg'].includes(ext)) { - return `` - } else { - return orig + comment_filter(value) { + return value.replace( + /]+).*>(?:.(?!<\/a>))*.<\/a>/, + (orig, url) => { + // get extension + const ext = url.slice(-4) + if (['.mp3', '.ogg'].includes(ext)) { + return `` + } else { + return orig + } } - }) + ) } } }