Skip to content
Snippets Groups Projects
ChannelCard.vue 3.41 KiB
Newer Older
<template>
  <div class="card app-card">
    <div
Georg Krause's avatar
Georg Krause committed
      v-lazy:background-image="imageUrl"
      :class="['ui', 'head-image', {'circular': object.artist.content_category != 'podcast'}, {'padded': object.artist.content_category === 'podcast'}, 'image', {'default-cover': !object.artist.cover}]"
      @click="$router.push({name: 'channels.detail', params: {id: urlId}})"
Georg Krause's avatar
Georg Krause committed
    >
      <play-button
        :icon-only="true"
        :is-playable="true"
        :button-classes="['ui', 'circular', 'large', 'vibrant', 'icon', 'button']"
        :artist="object.artist"
      />
    </div>
    <div class="content">
      <strong>
Georg Krause's avatar
Georg Krause committed
        <router-link
          class="discrete link"
          :to="{name: 'channels.detail', params: {id: urlId}}"
        >
          {{ object.artist.name }}
        </router-link>
      </strong>
      <div class="description">
Georg Krause's avatar
Georg Krause committed
        <translate
          v-if="object.artist.content_category === 'podcast'"
Georg Krause's avatar
Georg Krause committed
          key="1"
          class="meta ellipsis"
          translate-context="Content/Channel/Paragraph"
          translate-plural="%{ count } episodes"
          :translate-n="object.artist.tracks_count"
Georg Krause's avatar
Georg Krause committed
          :translate-params="{count: object.artist.tracks_count}"
        >
          %{ count } episode
        </translate>
Georg Krause's avatar
Georg Krause committed
        <translate
          v-else
          key="2"
          translate-context="*/*/*"
          :translate-params="{count: object.artist.tracks_count}"
          :translate-n="object.artist.tracks_count"
          translate-plural="%{ count } tracks"
        >
          %{ count } track
        </translate>
        <tags-list
          label-classes="tiny"
          :truncate-size="20"
          :limit="2"
          :show-more="false"
          :tags="object.artist.tags"
        />
      </div>
    </div>
    <div class="extra content">
      <time
        v-translate
        class="meta ellipsis"
        :datetime="object.artist.modification_date"
Georg Krause's avatar
Georg Krause committed
        :title="updatedTitle"
      >
Ciarán Ainsworth's avatar
Ciarán Ainsworth committed
        %{ updatedAgo }
      <play-button
        class="right floated basic icon"
        :dropdown-only="true"
        :is-playable="true"
Georg Krause's avatar
Georg Krause committed
        :dropdown-icon-classes="['ellipsis', 'horizontal', 'large really discrete']"
        :artist="object.artist"
        :channel="object"
        :account="object.attributed_to"
      />
    </div>
  </div>
</template>

<script>
Kasper Seweryn's avatar
Kasper Seweryn committed
import PlayButton from '~/components/audio/PlayButton.vue'
import TagsList from '~/components/tags/List.vue'
import { momentFormat } from '~/init/filters'
Georg Krause's avatar
Georg Krause committed
import moment from 'moment'
export default {
  components: {
    PlayButton,
    TagsList
  },
Georg Krause's avatar
Georg Krause committed
  props: {
    object: { type: Object, required: true }
  },
  computed: {
    imageUrl () {
      if (this.object.artist.cover) {
        return this.$store.getters['instance/absoluteUrl'](this.object.artist.cover.urls.medium_square_crop)
Georg Krause's avatar
Georg Krause committed
      return null
    },
    urlId () {
      if (this.object.actor && this.object.actor.is_local) {
        return this.object.actor.preferred_username
      } else if (this.object.actor) {
        return this.object.actor.full_username
      } else {
        return this.object.uuid
      }
    },
    updatedTitle () {
Georg Krause's avatar
Georg Krause committed
      const d = momentFormat(this.object.artist.modification_date)
      const message = this.$pgettext('*/*/*', 'Updated on %{ date }')
      return this.$gettextInterpolate(message, { date: d })
Ciarán Ainsworth's avatar
Ciarán Ainsworth committed
    },
    updatedAgo () {
      return moment(this.object.artist.modification_date).fromNow()