213 lines
6.8 KiB
Vue
Raw Normal View History

<template>
<nav class="navbar is-light is-fixed-top" :style="zindex">
<div class="navbar-brand is-flex-grow-1">
2024-09-09 21:00:35 +02:00
<control-link
2024-08-22 21:31:59 +02:00
v-if="settingsStore.show_menu_item_playlists"
2024-09-09 21:00:35 +02:00
class="navbar-item"
2024-08-22 21:31:59 +02:00
:to="{ name: 'playlists' }"
>
<mdicon class="icon" name="music-box-multiple" size="16" />
2024-09-09 21:00:35 +02:00
</control-link>
<control-link
2024-08-22 21:31:59 +02:00
v-if="settingsStore.show_menu_item_music"
2024-09-09 21:00:35 +02:00
class="navbar-item"
2024-08-22 21:31:59 +02:00
:to="{ name: 'music' }"
>
<mdicon class="icon" name="music" size="16" />
2024-09-09 21:00:35 +02:00
</control-link>
<control-link
2024-08-22 21:31:59 +02:00
v-if="settingsStore.show_menu_item_podcasts"
2024-09-09 21:00:35 +02:00
class="navbar-item"
2024-08-22 21:31:59 +02:00
:to="{ name: 'podcasts' }"
>
<mdicon class="icon" name="microphone" size="16" />
2024-09-09 21:00:35 +02:00
</control-link>
<control-link
2024-08-22 21:31:59 +02:00
v-if="settingsStore.show_menu_item_audiobooks"
2024-09-09 21:00:35 +02:00
class="navbar-item"
2024-08-22 21:31:59 +02:00
:to="{ name: 'audiobooks' }"
>
<mdicon class="icon" name="book-open-variant" size="16" />
2024-09-09 21:00:35 +02:00
</control-link>
<control-link
2024-08-22 21:31:59 +02:00
v-if="settingsStore.show_menu_item_radio"
2024-09-09 21:00:35 +02:00
class="navbar-item"
2024-08-22 21:31:59 +02:00
:to="{ name: 'radio' }"
>
<mdicon class="icon" name="radio" size="16" />
2024-09-09 21:00:35 +02:00
</control-link>
<control-link
2024-08-22 21:31:59 +02:00
v-if="settingsStore.show_menu_item_files"
2024-09-09 21:00:35 +02:00
class="navbar-item"
2024-08-22 21:31:59 +02:00
:to="{ name: 'files' }"
>
<mdicon class="icon" name="folder-open" size="16" />
2024-09-09 21:00:35 +02:00
</control-link>
<control-link
2024-08-22 21:31:59 +02:00
v-if="settingsStore.show_menu_item_search"
2024-09-09 21:00:35 +02:00
class="navbar-item"
2024-08-22 21:31:59 +02:00
:to="{ name: searchStore.search_source }"
>
<mdicon class="icon" name="magnify" size="16" />
2024-09-09 21:00:35 +02:00
</control-link>
<a
class="navbar-item ml-auto"
2024-09-09 21:00:35 +02:00
@click="uiStore.show_burger_menu = !uiStore.show_burger_menu"
>
<mdicon
class="icon"
:name="uiStore.show_burger_menu ? 'close' : 'menu'"
/>
</a>
<div
2024-09-09 21:00:35 +02:00
class="dropdown is-right"
:class="{ 'is-active': uiStore.show_burger_menu }"
>
2024-09-09 21:00:35 +02:00
<div class="dropdown-menu">
<div class="dropdown-content">
<control-link class="dropdown-item" :to="{ name: 'playlists' }">
<span class="icon-text">
<mdicon class="icon" name="music-box-multiple" size="16" />
</span>
2022-05-20 13:44:22 +02:00
<b v-text="$t('navigation.playlists')" />
2024-09-09 21:00:35 +02:00
</control-link>
<control-link class="dropdown-item" :to="{ name: 'music' }">
<span class="icon-text">
<mdicon class="icon" name="music" size="16" />
</span>
2022-05-20 13:44:22 +02:00
<b v-text="$t('navigation.music')" />
2024-09-09 21:00:35 +02:00
</control-link>
<control-link class="dropdown-item" :to="{ name: 'music-artists' }">
<span class="pl-5" v-text="$t('navigation.artists')" />
2024-09-09 21:00:35 +02:00
</control-link>
<control-link class="dropdown-item" :to="{ name: 'music-albums' }">
<span class="pl-5" v-text="$t('navigation.albums')" />
2024-09-09 21:00:35 +02:00
</control-link>
<control-link class="dropdown-item" :to="{ name: 'music-genres' }">
<span class="pl-5" v-text="$t('navigation.genres')" />
2024-09-09 21:00:35 +02:00
</control-link>
<control-link
v-if="spotify_enabled"
2024-09-10 21:07:02 +02:00
class="dropdown-item"
:to="{ name: 'music-spotify' }"
>
<span class="pl-5" v-text="$t('navigation.spotify')" />
2024-09-09 21:00:35 +02:00
</control-link>
<control-link class="dropdown-item" :to="{ name: 'podcasts' }">
<span class="icon-text">
<mdicon class="icon" name="microphone" size="16" />
</span>
2022-05-20 13:44:22 +02:00
<b v-text="$t('navigation.podcasts')" />
2024-09-09 21:00:35 +02:00
</control-link>
<control-link class="dropdown-item" :to="{ name: 'audiobooks' }">
<span class="icon-text">
<mdicon class="icon" name="book-open-variant" size="16" />
</span>
2022-05-20 13:44:22 +02:00
<b v-text="$t('navigation.audiobooks')" />
2024-09-09 21:00:35 +02:00
</control-link>
<control-link class="dropdown-item" :to="{ name: 'radio' }">
<span class="icon-text">
<mdicon class="icon" name="radio" size="16" />
</span>
2022-05-20 13:44:22 +02:00
<b v-text="$t('navigation.radio')" />
2024-09-09 21:00:35 +02:00
</control-link>
<control-link class="dropdown-item" :to="{ name: 'files' }">
<span class="icon-text">
<mdicon class="icon" name="folder-open" size="16" />
</span>
2022-05-20 13:44:22 +02:00
<b v-text="$t('navigation.files')" />
2024-09-09 21:00:35 +02:00
</control-link>
<control-link
class="dropdown-item"
:to="{ name: searchStore.search_source }"
>
<span class="icon-text">
<mdicon class="icon" name="magnify" size="16" />
</span>
2022-05-20 13:44:22 +02:00
<b v-text="$t('navigation.search')" />
2024-09-09 21:00:35 +02:00
</control-link>
<hr class="my-3" />
2024-09-09 21:00:35 +02:00
<control-link
class="dropdown-item"
:to="{ name: 'settings-webinterface' }"
>
2024-04-21 17:44:55 +02:00
{{ $t('navigation.settings') }}
2024-09-09 21:00:35 +02:00
</control-link>
<a
2024-09-09 21:00:35 +02:00
class="dropdown-item"
@click.stop.prevent="open_update_dialog()"
v-text="$t('navigation.update-library')"
/>
2024-09-09 21:00:35 +02:00
<control-link class="dropdown-item" :to="{ name: 'about' }">
2024-04-21 17:44:55 +02:00
{{ $t('navigation.about') }}
2024-09-09 21:00:35 +02:00
</control-link>
</div>
</div>
</div>
</div>
<div
v-show="show_settings_menu"
class="is-overlay"
@click="show_settings_menu = false"
/>
</nav>
</template>
<script>
2024-09-09 21:00:35 +02:00
import ControlLink from '@/components/ControlLink.vue'
2024-08-22 21:31:59 +02:00
import { useSearchStore } from '@/stores/search'
import { useServicesStore } from '@/stores/services'
import { useSettingsStore } from '@/stores/settings'
import { useUIStore } from '@/stores/ui'
export default {
name: 'NavbarTop',
2024-09-09 21:00:35 +02:00
components: { ControlLink },
2024-08-22 21:31:59 +02:00
setup() {
return {
searchStore: useSearchStore(),
servicesStore: useServicesStore(),
settingsStore: useSettingsStore(),
uiStore: useUIStore()
}
},
data() {
return {
show_settings_menu: false
}
},
computed: {
2024-03-26 12:04:04 +01:00
spotify_enabled() {
2024-08-22 21:31:59 +02:00
return this.servicesStore.spotify.webapi_token_valid
},
zindex() {
2024-08-22 21:31:59 +02:00
if (this.uiStore.show_player_menu) {
return 'z-index: 21'
}
return ''
}
},
watch: {
$route(to, from) {
this.show_settings_menu = false
2019-02-16 06:48:45 +01:00
}
},
methods: {
on_click_outside_settings() {
this.show_settings_menu = !this.show_settings_menu
2022-02-19 07:05:59 +01:00
},
open_update_dialog() {
2024-09-09 21:00:35 +02:00
this.uiStore.show_update_dialog = true
2022-02-19 07:05:59 +01:00
this.show_settings_menu = false
2024-09-09 21:00:35 +02:00
this.uiStore.show_burger_menu = false
}
}
}
</script>