gancio/components/Nav.vue

94 lines
3 KiB
Vue
Raw Normal View History

2019-04-03 00:25:12 +02:00
<template lang="pug">
v-app-bar(app aria-label='Menu' height=64)
2020-07-25 21:41:22 +02:00
//- logo, title and description
v-list-item(:to='$route.name==="index"?"/about":"/"')
v-list-item-avatar(tile)
v-img(src='/logo.png' alt='home')
2020-07-25 21:41:22 +02:00
v-list-item-content.d-none.d-sm-flex
v-list-item-title
h2 {{settings.title}}
v-list-item-subtitle {{settings.description}}
v-spacer
2022-02-26 21:19:59 +01:00
v-btn(v-if='$auth.loggedIn || settings.allow_anon_event' icon nuxt to='/add' :aria-label='$t("common.add_event")' :title='$t("common.add_event")')
v-icon(large color='primary' v-text='mdiPlus')
2020-07-25 21:41:22 +02:00
2022-02-26 21:19:59 +01:00
v-btn(icon nuxt to='/export' :title='$t("common.share")' :aria-label='$t("common.share")')
v-icon(v-text='mdiShareVariant')
2020-07-25 21:41:22 +02:00
2022-02-26 21:19:59 +01:00
v-btn(v-if='!$auth.loggedIn' icon nuxt to='/login' :title='$t("common.login")' :aria-label='$t("common.login")')
v-icon(v-text='mdiLogin')
client-only
2022-02-07 12:14:31 +01:00
v-menu(v-if='$auth.loggedIn' offset-y)
template(v-slot:activator="{ on, attrs }")
2022-02-26 21:19:59 +01:00
v-btn(icon v-bind='attrs' v-on='on' title='Menu' aria-label='Menu')
v-icon(v-text='mdiDotsVertical')
2022-02-07 12:14:31 +01:00
v-list
v-list-item(nuxt to='/settings')
v-list-item-icon
v-icon(v-text='mdiCog')
2022-02-07 12:14:31 +01:00
v-list-item-content
v-list-item-title {{$t('common.settings')}}
2020-07-25 21:41:22 +02:00
2022-02-07 12:14:31 +01:00
v-list-item(v-if='$auth.user.is_admin' nuxt to='/admin')
v-list-item-icon
v-icon(v-text='mdiAccount')
2022-02-07 12:14:31 +01:00
v-list-item-content
v-list-item-title {{$t('common.admin')}}
2020-07-25 21:41:22 +02:00
2022-02-07 12:14:31 +01:00
v-list-item(@click='logout')
v-list-item-icon
v-icon(v-text='mdiLogout')
2022-02-07 12:14:31 +01:00
v-list-item-content
v-list-item-title {{$t('common.logout')}}
template(#placeholder)
2022-02-26 21:19:59 +01:00
v-btn(v-if='$auth.loggedIn' icon aria-label='Menu' title='Menu')
v-icon(v-text='mdiDotsVertical')
2020-07-25 21:41:22 +02:00
2022-02-26 21:19:59 +01:00
v-btn(icon target='_blank' :href='feedLink' title='RSS' aria-label='RSS')
v-icon(color='orange' v-text='mdiRss')
2020-07-25 21:41:22 +02:00
2019-04-03 00:25:12 +02:00
</template>
<script>
2019-06-25 01:05:38 +02:00
import { mapState } from 'vuex'
import clipboard from '../assets/clipboard'
import { mdiPlus, mdiShareVariant, mdiLogin, mdiDotsVertical, mdiLogout, mdiAccount, mdiCog, mdiRss } from '@mdi/js'
2019-05-30 12:04:14 +02:00
2019-04-03 00:25:12 +02:00
export default {
name: 'Nav',
data () {
return { mdiPlus, mdiShareVariant, mdiLogout, mdiLogin, mdiDotsVertical, mdiAccount, mdiCog, mdiRss }
},
mixins: [clipboard],
2019-06-25 01:05:38 +02:00
computed: {
2020-06-05 23:04:12 +02:00
...mapState(['filters', 'settings']),
feedLink () {
2022-01-17 12:02:28 +01:00
const tags = this.filters.tags && this.filters.tags.map(encodeURIComponent).join(',')
2020-10-17 00:41:21 +02:00
const places = this.filters.places && this.filters.places.join(',')
2020-06-05 23:04:12 +02:00
let query = ''
if (tags || places) {
query = '?'
if (tags) {
query += 'tags=' + tags
if (places) { query += '&places=' + places }
} else {
query += 'places=' + places
}
}
return `${this.settings.baseurl}/feed/rss${query}`
},
2019-06-25 01:05:38 +02:00
},
2019-05-30 12:04:14 +02:00
methods: {
logout () {
2020-10-07 11:12:13 +02:00
this.$root.$message('common.logout_ok')
2019-05-30 12:04:14 +02:00
this.$auth.logout()
2020-06-04 23:33:45 +02:00
}
2019-05-30 12:04:14 +02:00
}
2019-04-03 00:25:12 +02:00
}
</script>