mixit/compiler/src/mastodon/status.vue

92 lines
2.9 KiB
Vue
Raw Normal View History

2019-04-14 14:52:12 +00:00
<template lang="pug">
2019-04-17 11:36:17 +00:00
.status
account(v-if="withAccount" :account="status.account" :showMedia="showMedia")
2019-04-14 14:52:12 +00:00
2019-04-17 11:36:17 +00:00
span.text-icon.letter(v-if="status.reblog")
2019-04-14 14:52:12 +00:00
2019-04-17 11:36:17 +00:00
a.date(target="_blank" :href="status.uri")
from-now(:date="status.created_at" :now="now")
2019-04-14 14:52:12 +00:00
2019-04-17 11:36:17 +00:00
.content(:class="{ avatared: showMedia }")
template(v-if="!status.reblog")
.spoiler(v-if="status.spoiler_text" @click.stop.prevent="status.sensitive = !status.sensitive").
{{ status.spoiler_text || 'Spoiler' }} {{ status.sensitive ? '&rarr;' : '&darr;' }}
div(v-if="!status.spoiler_text || !status.sensitive")
.text(v-html="parseEmojis(status.content, status.emojis)")
a.media(v-for="media in status.media_attachments" :href="media.url" target="_blank")
template(v-if="showMedia")
img(v-if="media.type == 'image' || media.type == 'gifv'" :src="media.preview_url" :alt="media.description" :title="media.description")
.gif(v-if="media.type == 'gifv'") GIF
template(v-else) Hidden media
status.reblog(v-else :status="status.reblog" :now="now" :showMedia="showMedia")
2019-04-14 14:52:12 +00:00
2019-04-17 11:36:17 +00:00
.meta(v-if="!status.reblog")
a.replies(@click.stop.prevent="makeReply(status)")
span.text-icon
| {{ status.replies_count }}
a.reblogs(:class="{ colored: status.reblogged }" @click.stop.prevent="makeReblog(status)")
span.text-icon
| {{ status.reblogs_count }}
a.favourites(:class="{ colored: status.favourited }" @click.stop.prevent="makeFav(status)")
span.text-icon
| {{ status.favourites_count }}
a.fil(v-if="status.in_reply_to_id" @click.stop.prevent="showReply(status.in_reply_to_id)")
| Voir le fil
2019-04-14 14:52:12 +00:00
</template>
<script>
import fromNowVue, { timedMixin } from '../core/fromNow.vue'
import { parseEmojisMixin } from './tools'
import accountVue from './account.vue'
export default {
2019-04-18 15:37:44 +00:00
name: 'Status',
2019-04-14 14:52:12 +00:00
components: {
account: accountVue,
fromNow: fromNowVue
},
2019-04-18 15:37:44 +00:00
mixins: [ timedMixin, parseEmojisMixin ],
2019-04-14 14:52:12 +00:00
props: {
2019-04-18 15:37:44 +00:00
status: {
type: Object,
default: undefined
},
2019-04-17 10:08:30 +00:00
withAccount: {
2019-04-15 16:01:30 +00:00
type: Boolean,
default: true
},
2019-04-17 10:08:30 +00:00
showMedia: {
2019-04-14 14:52:12 +00:00
type: Boolean,
default: true
}
},
methods: {
showReply(statusId) {
console.error(statusId) //TODO:
},
makeReply(status) {
console.error(status.id) //TODO:
},
2019-04-17 08:22:45 +00:00
emitMark(status, action, callback, undo = false) {
2019-04-14 14:52:12 +00:00
this.$emit('mark', {
id: status.id,
2019-04-17 08:22:45 +00:00
type: (undo ? 'un' : '') + action,
2019-04-14 14:52:12 +00:00
callback: callback
})
},
makeReblog(status) {
this.emitMark(status, 'reblog', () => {
status.reblogs_count += (status.reblogged ? -1 : 1)
status.reblogged = !status.reblogged
2019-04-17 08:22:45 +00:00
}, status.reblogged)
2019-04-14 14:52:12 +00:00
},
makeFav(status) {
this.emitMark(status, 'favourite', () => {
status.favourites_count += (status.favourited ? -1 : 1)
status.favourited = !status.favourited
2019-04-17 08:22:45 +00:00
}, status.favourited)
2019-04-14 14:52:12 +00:00
}
}
}
</script>