2022-11-14 03:20:07 +01:00
< script setup lang = "ts" >
2023-01-08 07:21:09 +01:00
import type { mastodon } from 'masto'
2022-11-14 03:20:07 +01:00
2023-01-07 10:31:48 +01:00
const {
status ,
2023-01-18 16:59:37 +01:00
newer ,
2023-01-07 10:31:48 +01:00
withAction = true ,
2023-01-29 00:39:03 +01:00
cleanSharedLink ,
2023-01-07 10:31:48 +01:00
} = defineProps < {
2023-01-08 07:21:09 +01:00
status : mastodon . v1 . Status | mastodon . v1 . StatusEdit
2023-01-18 16:59:37 +01:00
newer ? : mastodon . v1 . Status
2022-11-26 01:04:31 +01:00
withAction ? : boolean
2023-01-29 00:39:03 +01:00
cleanSharedLink ? : string | false
2022-11-14 03:20:07 +01:00
} > ( )
2023-01-05 17:48:20 +01:00
2023-01-17 22:41:26 +01:00
const { translation } = useTranslation ( status , getLanguageCode ( ) )
2023-01-07 10:31:48 +01:00
const emojisObject = useEmojisFallback ( ( ) => status . emojis )
2023-01-29 00:39:03 +01:00
/ * *
* example status raw content
*
* < p > 🔴 trying to code live - come let & # 39 ; s talk < span class = "h-card" > < a href = "https://m.webtoo.ls/@elk" class = "u-url mention" > @ < span > elk < / span > < / a > < / span > and < a href = "https://social.ayco.io/tags/opensource" class = "mention hashtag" rel = "tag" > # < span > opensource < / span > < / a > < a href = "https://www.twitch.tv/ayoayco" target = "_blank" rel = "nofollow noopener noreferrer" > < span class = "invisible" > https : //www.</span><span class="">twitch.tv/ayoayco</span><span class="invisible"></span></a></p>
*
*
* "<p>I say something about the link first</p><p><a href=\"https://ayco.io\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><span class=\"invisible\">https://</span><span class=\"\">ayco.io</span><span class=\"invisible\"></span></a></p>"
*
* /
2023-01-07 10:31:48 +01:00
const vnode = $computed ( ( ) => {
if ( ! status . content )
return null
const vnode = contentToVNode ( status . content , {
emojis : emojisObject . value ,
2023-01-11 18:18:06 +01:00
mentions : 'mentions' in status ? status . mentions : undefined ,
2023-01-07 10:31:48 +01:00
markdown : true ,
2023-01-13 01:08:56 +01:00
collapseMentionLink : ! ! ( 'inReplyToId' in status && status . inReplyToId ) ,
2023-01-18 16:59:37 +01:00
status : 'id' in status ? status : undefined ,
inReplyToStatus : newer ,
2023-01-29 00:39:03 +01:00
cleanSharedLink ,
2023-01-07 10:31:48 +01:00
} )
2023-01-29 00:39:03 +01:00
2023-01-07 10:31:48 +01:00
return vnode
} )
2022-11-14 03:20:07 +01:00
< / script >
< template >
2023-01-18 16:59:37 +01:00
< div class = "status-body" whitespace -pre -wrap break -words : class = "{ 'with-action': withAction }" relative >
2023-01-07 10:31:48 +01:00
< span
2022-11-27 17:54:11 +01:00
v - if = "status.content"
2023-01-07 10:31:48 +01:00
class = "content-rich line-compact" dir = "auto"
: lang = "('language' in status && status.language) || undefined"
>
< component :is = "vnode" / >
< / span >
2022-12-23 22:53:21 +01:00
< div v -else / >
2022-11-27 17:54:11 +01:00
< template v-if = "translation.visible" >
< div my2 h -px border = "b base" bg -base / >
2023-01-16 10:55:00 +01:00
< ContentRich v-if = "translation.success" class="line-compact" :content="translation.text" :emojis="status.emojis" / >
< div v -else text -red -4 >
Error : { { translation . error } }
< / div >
2022-11-27 17:54:11 +01:00
< / template >
2022-11-20 22:21:53 +01:00
< / div >
2022-11-14 03:20:07 +01:00
< / template >
2022-11-26 01:04:31 +01:00
< style >
. status - body . with - action p {
cursor : pointer ;
}
< / style >