funquail/front/src/components/audio/track/Row.vue

95 lines
2.8 KiB
Vue
Raw Normal View History

<template>
<tr>
<td>
<play-button class="basic icon" :discrete="true" :track="track"></play-button>
</td>
<td>
<img class="ui mini image" v-if="track.album.cover.original" v-lazy="$store.getters['instance/absoluteUrl'](track.album.cover.small_square_crop)">
2018-07-17 11:09:13 +00:00
<img class="ui mini image" v-else src="../../../assets/audio/default-cover.png">
</td>
<td colspan="6">
<router-link class="track" :to="{name: 'library.tracks.detail', params: {id: track.id }}">
<template v-if="displayPosition && track.position">
{{ track.position }}.
</template>
{{ track.title }}
</router-link>
</td>
2018-07-30 14:03:07 +02:00
<td colspan="4">
<router-link v-if="track.artist.id === albumArtist.id" class="artist discrete link" :to="{name: 'library.artists.detail', params: {id: track.artist.id }}">
{{ track.artist.name }}
</router-link>
<template v-else>
<router-link class="artist discrete link" :to="{name: 'library.artists.detail', params: {id: albumArtist.id }}">
{{ albumArtist.name }}
</router-link>
/
<router-link class="artist discrete link" :to="{name: 'library.artists.detail', params: {id: track.artist.id }}">
{{ track.artist.name }}
</router-link>
</template>
</td>
2018-07-30 14:03:07 +02:00
<td colspan="4">
<router-link class="album discrete link" :to="{name: 'library.albums.detail', params: {id: track.album.id }}">
{{ track.album.title }}
</router-link>
</td>
2018-09-22 12:29:30 +00:00
<td colspan="4" v-if="track.duration">
{{ time.parse(track.duration) }}
2018-07-30 14:03:07 +02:00
</td>
<td colspan="4" v-else>
<translate>N/A</translate>
</td>
<td>
<track-favorite-icon class="favorite-icon" :track="track"></track-favorite-icon>
<track-playlist-icon
v-if="$store.state.auth.authenticated"
:track="track"></track-playlist-icon>
</td>
</tr>
</template>
<script>
2018-07-30 14:03:07 +02:00
import time from '@/utils/time'
import TrackFavoriteIcon from '@/components/favorites/TrackFavoriteIcon'
import TrackPlaylistIcon from '@/components/playlists/TrackPlaylistIcon'
import PlayButton from '@/components/audio/PlayButton'
export default {
props: {
track: {type: Object, required: true},
artist: {type: Object, required: false},
displayPosition: {type: Boolean, default: false}
},
components: {
TrackFavoriteIcon,
TrackPlaylistIcon,
PlayButton
},
2018-07-30 14:03:07 +02:00
data () {
return {
time
}
},
computed: {
albumArtist () {
if (this.artist) {
return this.artist
} else {
return this.track.album.artist
}
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
2018-03-20 23:40:11 +01:00
<style lang="scss" scoped>
2018-03-20 23:40:11 +01:00
tr:not(:hover) {
.favorite-icon:not(.favorited), .playlist-icon {
display: none;
}
}
</style>