Resolve "UI for multi-disc albums"

This commit is contained in:
Auri 2018-12-11 10:17:05 +01:00 committed by Eliot Berriot
parent 2b24f19dd8
commit ef2dc03808
3 changed files with 44 additions and 7 deletions

View File

@ -0,0 +1 @@
Add UI elements for multi-disc albums (#631)

View File

@ -392,4 +392,12 @@ button.reset {
[role="button"] { [role="button"] {
cursor: pointer; cursor: pointer;
} }
.left.floated {
float: left;
}
.right.floated {
float: right;
}
</style> </style>

View File

@ -39,12 +39,27 @@
</a> </a>
</div> </div>
</section> </section>
<section class="ui vertical stripe segment"> <template v-if="discs && discs.length > 1">
<h2> <section v-for="(tracks, disc_number) in discs" class="ui vertical stripe segment">
<translate>Tracks</translate> <translate
</h2> tag="h2"
<track-table v-if="album" :artist="album.artist" :display-position="true" :tracks="album.tracks"></track-table> class="left floated"
</section> :translate-params="{number: disc_number + 1}"
>Volume %{ number }</translate>
<play-button class="right floated orange" :tracks="tracks">
<translate>Play all</translate>
</play-button>
<track-table :artist="album.artist" :display-position="true" :tracks="tracks"></track-table>
</section>
</template>
<template v-else>
<section class="ui vertical stripe segment">
<h2>
<translate>Tracks</translate>
</h2>
<track-table v-if="album" :artist="album.artist" :display-position="true" :tracks="album.tracks"></track-table>
</section>
</template>
<section class="ui vertical stripe segment"> <section class="ui vertical stripe segment">
<h2> <h2>
<translate>User libraries</translate> <translate>User libraries</translate>
@ -67,6 +82,17 @@ import LibraryWidget from "@/components/federation/LibraryWidget"
const FETCH_URL = "albums/" const FETCH_URL = "albums/"
function groupByDisc(acc, track) {
var dn = track.disc_number - 1
if (dn < 0) dn = 0
if (acc[dn] == undefined) {
acc.push([track])
} else {
acc[dn].push(track)
}
return acc
}
export default { export default {
props: ["id"], props: ["id"],
components: { components: {
@ -77,7 +103,8 @@ export default {
data() { data() {
return { return {
isLoading: true, isLoading: true,
album: null album: null,
discs: []
} }
}, },
created() { created() {
@ -91,6 +118,7 @@ export default {
logger.default.debug('Fetching album "' + this.id + '"') logger.default.debug('Fetching album "' + this.id + '"')
axios.get(url).then(response => { axios.get(url).then(response => {
self.album = backend.Album.clean(response.data) self.album = backend.Album.clean(response.data)
self.discs = self.album.tracks.reduce(groupByDisc, [])
self.isLoading = false self.isLoading = false
}) })
} }