You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

139 lines
4.1 KiB

<template>
<v-app-bar app clipped-left>
<slot name="leftDrawerIcon" />
<nuxt-link v-if="!isAuthenticated" to="/" style="line-height: 0">
<img src="~/assets/icon.png" height="48" />
</nuxt-link>
<v-toolbar-title v-if="!isAuthenticated" class="ml-2 d-none d-sm-flex">
doccano
</v-toolbar-title>
<v-btn
v-if="isAuthenticated && isIndividualProject"
text
class="d-none d-sm-flex"
style="text-transform: none"
>
<v-icon small class="mr-1">
{{ mdiHexagonMultiple }}
</v-icon>
<span> {{ currentProject.name }}</span>
</v-btn>
<div class="flex-grow-1" />
<the-color-mode-switcher />
<locale-menu />
<v-btn
v-if="isAuthenticated"
text
class="text-capitalize"
@click="$router.push(localePath('/projects'))"
>
{{ $t('header.projects') }}
</v-btn>
<v-menu v-if="!isAuthenticated" open-on-hover offset-y>
<template #activator="{ on }">
<v-btn text v-on="on">
{{ $t('home.demoDropDown') }}
<v-icon>{{ mdiMenuDown }}</v-icon>
</v-btn>
</template>
<v-list>
<v-list-item
v-for="(item, index) in items"
:key="index"
@click="$router.push('/demo/' + item.link)"
>
<v-list-item-title>{{ item.title }}</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>
<v-btn v-if="!isAuthenticated" outlined @click="$router.push(localePath('/auth'))">
{{ $t('user.login') }}
</v-btn>
<v-menu v-if="isAuthenticated" offset-y>
<template #activator="{ on }">
<v-btn on icon v-on="on">
<v-icon>{{ mdiDotsVertical }}</v-icon>
</v-btn>
</template>
<v-list>
<v-subheader>{{ getUsername }}</v-subheader>
<v-list-item>
<v-list-item-content>
<v-switch :input-value="isRTL" :label="direction" class="ms-1" @change="toggleRTL" />
</v-list-item-content>
</v-list-item>
<v-list-item @click="signout">
<v-list-item-icon>
<v-icon>{{ mdiLogout }}</v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title>
{{ $t('user.signOut') }}
</v-list-item-title>
</v-list-item-content>
</v-list-item>
</v-list>
</v-menu>
</v-app-bar>
</template>
<script>
import { mdiLogout, mdiDotsVertical, mdiMenuDown, mdiHexagonMultiple } from '@mdi/js'
import { mapGetters, mapActions } from 'vuex'
import TheColorModeSwitcher from './TheColorModeSwitcher'
import LocaleMenu from './LocaleMenu'
export default {
components: {
TheColorModeSwitcher,
LocaleMenu
},
data() {
return {
items: [
{ title: this.$t('home.demoNER'), link: 'named-entity-recognition' },
{ title: this.$t('home.demoSent'), link: 'sentiment-analysis' },
{ title: this.$t('home.demoTranslation'), link: 'translation' },
{
title: 'Intent Detection and Slot Filling',
link: 'intent-detection-and-slot-filling'
},
{ title: this.$t('home.demoTextToSQL'), link: 'text-to-sql' },
{ title: 'Image Classification', link: 'image-classification' },
{ title: 'Image Captioning', link: 'image-caption' },
{ title: 'Object Detection', link: 'object-detection' },
{ title: 'Polygon Segmentation', link: 'segmentation' },
{ title: 'Speech to Text', link: 'speech-to-text' }
],
mdiLogout,
mdiDotsVertical,
mdiMenuDown,
mdiHexagonMultiple
}
},
computed: {
...mapGetters('auth', ['isAuthenticated', 'getUsername']),
...mapGetters('projects', ['currentProject']),
...mapGetters('config', ['isRTL']),
isIndividualProject() {
return this.$route.name && this.$route.name.startsWith('projects-id')
},
direction() {
return this.isRTL ? 'RTL' : 'LTR'
}
},
methods: {
...mapActions('auth', ['logout']),
...mapActions('config', ['toggleRTL']),
signout() {
this.logout()
this.$router.push(this.localePath('/'))
}
}
}
</script>