funkwhale/front/src/components/audio/track/Table.vue

91 lines
2.8 KiB
Vue
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<table class="ui compact very basic fixed single line unstackable table">
<thead>
<tr>
<th></th>
<th></th>
<th colspan="6">{{ $gettext('Title') }}</th>
<th colspan="6">{{ $gettext('Artist') }}</th>
<th colspan="6">{{ $gettext('Album') }}</th>
<th></th>
</tr>
</thead>
<tbody>
<track-row
:display-position="displayPosition"
:track="track"
:key="index + '-' + track.id"
v-for="(track, index) in tracks"></track-row>
</tbody>
<tfoot class="full-width">
<tr>
<th colspan="3">
<button @click="showDownloadModal = !showDownloadModal" class="ui basic button">
{{ $gettext('Download') }}
</button>
<modal :show.sync="showDownloadModal">
<div class="header">{{ $gettext('Download tracks') }}</div>
<div class="content">
<div class="description">
<p>{{ $gettext('There is currently no way to download directly multiple tracks from funkwhale as a ZIP archive. However, you can use a command line tools such as cURL to easily download a list of tracks.') }}</p>
{{ $gettext('Simply copy paste the snippet below into a terminal to launch the download.') }}
<div class="ui warning message">
{{ $gettext('Keep your PRIVATE_TOKEN secret as it gives access to your account.') }}
</div>
<pre>
export PRIVATE_TOKEN="{{ $store.state.auth.token }}"
<template v-for="track in tracks"><template v-if="track.files.length > 0">
curl -G -o "{{ track.files[0].filename }}" <template v-if="$store.state.auth.authenticated">--header "Authorization: JWT $PRIVATE_TOKEN"</template> "{{ $store.getters['instance/absoluteUrl'](track.files[0].path) }}"</template></template>
</pre>
</div>
</div>
<div class="actions">
<div class="ui black deny button">{{ $gettext('Cancel') }}</div>
</div>
</modal>
</th>
<th></th>
<th colspan="4"></th>
<th colspan="6"></th>
<th colspan="6"></th>
<th></th>
</tr>
</tfoot>
</table>
</template>
<script>
import backend from '@/audio/backend'
import TrackRow from '@/components/audio/track/Row'
import Modal from '@/components/semantic/Modal'
export default {
props: {
tracks: {type: Array, required: true},
displayPosition: {type: Boolean, default: false}
},
components: {
Modal,
TrackRow
},
data () {
return {
backend: backend,
showDownloadModal: false
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
tr:not(:hover) .favorite-icon:not(.favorited) {
display: none;
}
pre {
overflow-x: scroll;
}
</style>