Skip to content
Snippets Groups Projects
ChannelCard.vue 3.41 KiB
Newer Older
  • Learn to ignore specific revisions
  • <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()