2022-11-14 11:20:07 +09:00
< script setup lang = "ts" >
2023-01-08 15:21:09 +09:00
import type { mastodon } from 'masto'
2022-11-14 11:20:07 +09:00
2023-01-07 18:31:48 +09:00
const {
status ,
2023-01-19 00:59:37 +09:00
newer ,
2023-01-07 18:31:48 +09:00
withAction = true ,
2023-01-29 08:39:03 +09:00
cleanSharedLink ,
2023-01-07 18:31:48 +09:00
} = defineProps < {
2023-01-08 15:21:09 +09:00
status : mastodon . v1 . Status | mastodon . v1 . StatusEdit
2023-01-19 00:59:37 +09:00
newer ? : mastodon . v1 . Status
2022-11-26 09:04:31 +09:00
withAction ? : boolean
2023-01-29 08:39:03 +09:00
cleanSharedLink ? : string | false
2022-11-14 11:20:07 +09:00
} > ( )
2023-01-06 01:48:20 +09:00
2023-01-18 06:41:26 +09:00
const { translation } = useTranslation ( status , getLanguageCode ( ) )
2023-01-07 18:31:48 +09:00
const emojisObject = useEmojisFallback ( ( ) => status . emojis )
2023-01-29 08:39:03 +09: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 18:31:48 +09:00
const vnode = $computed ( ( ) => {
if ( ! status . content )
return null
const vnode = contentToVNode ( status . content , {
emojis : emojisObject . value ,
2023-01-12 02:18:06 +09:00
mentions : 'mentions' in status ? status . mentions : undefined ,
2023-01-07 18:31:48 +09:00
markdown : true ,
2023-01-13 09:08:56 +09:00
collapseMentionLink : ! ! ( 'inReplyToId' in status && status . inReplyToId ) ,
2023-01-19 00:59:37 +09:00
status : 'id' in status ? status : undefined ,
inReplyToStatus : newer ,
2023-01-29 08:39:03 +09:00
cleanSharedLink ,
2023-01-07 18:31:48 +09:00
} )
2023-01-29 08:39:03 +09:00
2023-01-07 18:31:48 +09:00
return vnode
} )
2022-11-14 11:20:07 +09:00
< / script >
< template >
2023-01-19 00:59:37 +09:00
< div class = "status-body" whitespace -pre -wrap break -words : class = "{ 'with-action': withAction }" relative >
2023-01-07 18:31:48 +09:00
< span
2022-11-28 01:54:11 +09:00
v - if = "status.content"
2023-01-07 18:31:48 +09:00
class = "content-rich line-compact" dir = "auto"
: lang = "('language' in status && status.language) || undefined"
>
< component :is ="vnode" / >
< / span >
2022-12-24 06:53:21 +09:00
< div v -else / >
2022-11-28 01:54:11 +09:00
< template v-if ="translation.visible" >
< div my2 h -px border = "b base" bg -base / >
2023-01-16 18:55:00 +09: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-28 01:54:11 +09:00
< / template >
2022-11-21 06:21:53 +09:00
< / div >
2022-11-14 11:20:07 +09:00
< / template >
2022-11-26 09:04:31 +09:00
< style >
. status - body . with - action p {
cursor : pointer ;
}
< / style >