diff --git a/front/src/components/library/AlbumBase.vue b/front/src/components/library/AlbumBase.vue index 016be2c3779e99ddc14c9dcd1ca585ea8e462a59..083e5547b09f883bfb8f00bf44ad79273d87b195 100644 --- a/front/src/components/library/AlbumBase.vue +++ b/front/src/components/library/AlbumBase.vue @@ -13,6 +13,7 @@ <div v-html="subtitle"></div> </div> </h2> + <tags-list v-if="object.tags && object.tags.length > 0" :tags="object.tags"></tags-list> <div class="ui hidden divider"></div> <div class="header-buttons"> @@ -103,6 +104,7 @@ import backend from "@/audio/backend" import PlayButton from "@/components/audio/PlayButton" import EmbedWizard from "@/components/audio/EmbedWizard" import Modal from '@/components/semantic/Modal' +import TagsList from "@/components/tags/List" const FETCH_URL = "albums/" @@ -123,7 +125,8 @@ export default { components: { PlayButton, EmbedWizard, - Modal + Modal, + TagsList, }, data() { return { diff --git a/front/src/components/library/ArtistBase.vue b/front/src/components/library/ArtistBase.vue index 3c21f603fe150109ade24448510bb42805ac4663..5472ee307cf76ddf65f6c203f23fb379d9aad62a 100644 --- a/front/src/components/library/ArtistBase.vue +++ b/front/src/components/library/ArtistBase.vue @@ -21,6 +21,7 @@ </div> </div> </h2> + <tags-list v-if="object.tags && object.tags.length > 0" :tags="object.tags"></tags-list> <div class="ui hidden divider"></div> <div class="header-buttons"> <div class="ui buttons"> @@ -123,17 +124,20 @@ import PlayButton from "@/components/audio/PlayButton" import EmbedWizard from "@/components/audio/EmbedWizard" import Modal from '@/components/semantic/Modal' import RadioButton from "@/components/radios/Button" +import TagsList from "@/components/tags/List" const FETCH_URL = "albums/" + export default { props: ["id"], components: { PlayButton, EmbedWizard, Modal, - RadioButton + RadioButton, + TagsList, }, data() { return { diff --git a/front/src/components/library/TrackBase.vue b/front/src/components/library/TrackBase.vue index 2f3cc51a9d74b1b855e2edefa6288704a6bcb0db..32942958ba44a091207c98cfa96c2d5721b06a1a 100644 --- a/front/src/components/library/TrackBase.vue +++ b/front/src/components/library/TrackBase.vue @@ -17,6 +17,8 @@ <div class="sub header" v-html="subtitle"></div> </div> </h2> + <tags-list v-if="track.tags && track.tags.length > 0" :tags="track.tags"></tags-list> + <div class="ui hidden divider"></div> <div class="header-buttons"> <div class="ui buttons"> <play-button class="orange" :track="track"> @@ -121,6 +123,7 @@ import TrackFavoriteIcon from "@/components/favorites/TrackFavoriteIcon" import TrackPlaylistIcon from "@/components/playlists/TrackPlaylistIcon" import Modal from '@/components/semantic/Modal' import EmbedWizard from "@/components/audio/EmbedWizard" +import TagsList from "@/components/tags/List" const FETCH_URL = "tracks/" @@ -131,7 +134,8 @@ export default { TrackPlaylistIcon, TrackFavoriteIcon, Modal, - EmbedWizard + EmbedWizard, + TagsList, }, data() { return { diff --git a/front/src/components/tags/List.vue b/front/src/components/tags/List.vue new file mode 100644 index 0000000000000000000000000000000000000000..9ffb0f1f080752787e8df137a2f6046c9cec737e --- /dev/null +++ b/front/src/components/tags/List.vue @@ -0,0 +1,39 @@ +<template> + <div> + <router-link + :to="{name: 'library.tags.detail', params: {id: tag}}" + class="ui circular hashtag label" + v-for="tag in toDisplay" + :key="tag"> + #{{ tag }} + </router-link> + <div role="button" @click.prevent="honorLimit = false" class="ui circular inverted teal label" v-if="toDisplay.length < tags.length"> + <translate translate-context="Content/*/Button/Label/Verb" :translate-params="{count: tags.length - toDisplay.length}" :translate-n="tags.length - toDisplay.length" translate-plural="Show %{ count } more tags">Show 1 more tag</translate> + </div> + </div> +</template> +<script> +export default { + props: ['tags'], + data () { + return { + limit: 5, + honorLimit: true, + } + }, + computed: { + toDisplay () { + if (!this.honorLimit) { + return this.tags + } + return (this.tags || []).slice(0, this.limit) + } + } +} +</script> +<style lang="scss" scoped> +.ui.circular.label { + padding-left: 1em !important; + padding-right: 1em !important; +} +</style>