Newer
Older
<main>
<div v-if="isLoading" class="ui vertical segment" v-title="labels.playlist">
<div :class="['ui', 'centered', 'active', 'inline', 'loader']"></div>
</div>
<section v-if="!isLoading && playlist" class="ui head vertical center aligned stripe segment" v-title="playlist.name">
<div class="segment-content">
<h2 class="ui center aligned icon header">
<i class="circular inverted list yellow icon"></i>
<div class="content">
{{ playlist.name }}
<div class="sub header">
<translate
translate-plural="Playlist containing %{ count } tracks, by %{ username }"
:translate-n="playlist.tracks_count"
:translate-params="{count: playlist.tracks_count, username: playlist.user.username}">
Playlist containing %{ count } track, by %{ username }
</translate><br>
<duration :seconds="playlist.duration" />
</div>
</div>
</h2>
<div class="ui hidden divider"></div>
<play-button class="orange" :is-playable="playlist.is_playable" :tracks="tracks"><translate>Play all</translate></play-button>
v-if="$store.state.auth.profile && playlist.user.id === $store.state.auth.profile.id"
@click="edit = !edit">
<i class="pencil icon"></i>
<template v-if="edit"><translate>End edition</translate></template>
<template v-else><translate>Edit...</translate></template>
<dangerous-button v-if="$store.state.auth.profile && playlist.user.id === $store.state.auth.profile.id" class="labeled icon" :action="deletePlaylist">
<i class="trash icon"></i> <translate>Delete</translate>
<p slot="modal-header">
<translate :translate-params="{playlist: playlist.name}">Do you want to delete the playlist "%{ playlist }"?</translate>
</p>
<p slot="modal-content"><translate>This will completely delete this playlist and cannot be undone.</translate></p>
<p slot="modal-confirm"><translate>Delete playlist</translate></p>
</section>
<section class="ui vertical stripe segment">
<playlist-editor
@playlist-updated="playlist = $event"
@tracks-updated="updatePlts"
:playlist="playlist" :playlist-tracks="playlistTracks"></playlist-editor>
<track-table :display-position="true" :tracks="tracks"></track-table>
</template>
</section>
</main>
import axios from "axios"
import TrackTable from "@/components/audio/track/Table"
import RadioButton from "@/components/radios/Button"
import PlayButton from "@/components/audio/PlayButton"
import PlaylistEditor from "@/components/playlists/Editor"
id: { required: true },
defaultEdit: { type: Boolean, default: false }
},
components: {
PlaylistEditor,
TrackTable,
PlayButton,
RadioButton
},
data: function() {
playlist: null,
tracks: [],
playlistTracks: []
}
},
created: function() {
labels() {
playlist: this.$gettext("Playlist")
updatePlts(v) {
this.playlistTracks = v
this.tracks = v.map((e, i) => {
let track = e.track
track.position = i + 1
return track
})
},
fetch: function() {
let url = "playlists/" + this.id + "/"
axios.get(url).then(response => {
axios
.get(url + "tracks/")
.then(response => {
self.updatePlts(response.data.results)
})
.then(() => {
self.isLoading = false
})
deletePlaylist() {
let url = "playlists/" + this.id + "/"
axios.delete(url).then(response => {
self.$store.dispatch("playlists/fetchOwn")
path: "/library"
})
})
}
}
}
</script>