2018-04-10 02:43:31 +10:00
<!-- < template >
2017-05-31 18:47:18 +10:00
< div class = "status-el base00-background" v-if = "compact" >
< div @click.prevent ="linkClicked" class = "status-content" v-html = "status.statusnet_html" > < / div >
< div v-if = "loggedIn" >
< div class = 'status-actions' >
< div >
< a href = "#" v -on :click.prevent = "toggleReplying" >
2017-11-22 10:00:25 +11:00
< i class = "base09 icon-reply" : class = "{'icon-reply-active': replying}" > < / i >
2017-05-31 18:47:18 +10:00
< / a >
< / div >
2018-02-02 21:27:31 +11:00
< retweet-button :loggedIn = "loggedIn" : status = status > < / retweet-button >
2018-02-03 19:18:53 +11:00
< favorite-button :loggedIn = "loggedIn" : status = status > < / favorite-button >
2017-05-31 18:47:18 +10:00
< / div >
< / div >
< post-status-form class = "reply-body" :reply-to = "status.id" :attentions = "status.attentions" :repliedUser = "status.user" v -on :posted = "toggleReplying" v -if = " replying " / >
< / div >
2017-11-13 10:06:48 +11:00
< div class = "status-el base00-background base03-border status-fadein" v -else -if = " ! status.deleted " v -bind : class = "[{ 'base01-background': isFocused }, { 'status-conversation': inConversation }]" >
2017-02-14 10:01:50 +11:00
< template v-if = "muted" >
< div class = "media status container muted" >
< small > < router-link : to = "{ name: 'user-profile', params: { id: status.user.id } }" > { { status . user . screen _name } } < / router-link > < / small >
2017-04-09 23:53:23 +10:00
< small class = "muteWords" > { { muteWordHits . join ( ', ' ) } } < / small >
2017-11-22 10:00:25 +11:00
< a href = "#" class = "unmute" @click.prevent ="toggleMute" > < i class = "base09 icon-eye-off" > < / i > < / a >
2016-10-29 00:19:42 +11:00
< / div >
2017-02-14 10:01:50 +11:00
< / template >
< template v-if = "!muted" >
< div v-if = "retweet" class="media container retweet-info" >
< div class = "media-left" >
< i class = 'fa icon-retweet retweeted' > < / i >
< / div >
< div class = "media-body" >
2017-06-02 20:05:03 +10:00
Repeated by < a :href = "statusoid.user.statusnet_profile_url" style = "font-weight: bold;" :title = "'@'+statusoid.user.screen_name" > { { retweeter } } < / a >
2017-02-14 10:01:50 +11:00
< / div >
2016-10-29 00:19:42 +11:00
< / div >
2017-02-14 10:01:50 +11:00
< div class = "media status container" >
< div class = "media-left" >
< a :href = "status.user.statusnet_profile_url" >
2018-02-04 03:55:45 +11:00
< StillImage @click.native.prevent ="toggleUserExpanded" : class = "{retweeted: retweet}" class = 'avatar' :src = "status.user.profile_image_url_original" / >
2018-03-12 10:31:33 +11:00
< StillImage v-if = "retweet" class = 'avatar avatar-retweeter' :src = "statusoid.user.profile_image_url_original" / >
2017-02-14 10:01:50 +11:00
< / a >
< / div >
< div class = "media-body" >
2017-11-20 22:03:02 +11:00
< div class = "base03-border usercard" v-if = "userExpanded" >
2017-08-22 03:25:01 +10:00
< user-card-content :user = "status.user" :switcher = "false" > < / user-card-content >
2017-02-17 01:58:49 +11:00
< / div >
2017-02-14 10:01:50 +11:00
< div class = "user-content" >
2017-06-01 08:02:04 +10:00
< div class = "media-heading" >
< div class = "name-and-links" >
2017-06-02 00:35:00 +10:00
< h4 class = "user-name" > { { status . user . name } } < / h4 >
2017-06-01 08:02:04 +10:00
< div class = "links" >
< h4 >
< small > < router-link : to = "{ name: 'user-profile', params: { id: status.user.id } }" > { { status . user . screen _name } } < / router-link > < / small >
< small v-if = "status.in_reply_to_screen_name" > & gt ;
< router-link : to = "{ name: 'user-profile', params: { id: status.in_reply_to_user_id } }" >
{ { status . in _reply _to _screen _name } }
< / router-link >
< / small >
2017-11-14 01:33:54 +11:00
< template v-if = "isReply" >
2017-06-01 08:02:04 +10:00
< small >
2017-06-08 00:58:24 +10:00
< a href = "#" @click.prevent ="gotoOriginal(status.in_reply_to_status_id)" > < i class = "icon-reply" @ mouseenter = "replyEnter(status.in_reply_to_status_id, $event)" @mouseout ="replyLeave()" > < / i > < / a >
2017-06-01 08:02:04 +10:00
< / small >
< / template >
-
< small >
< router-link : to = "{ name: 'conversation', params: { id: status.id } }" >
2017-06-01 08:11:57 +10:00
< timeago :since = "status.created_at" :auto-update = "60" > < / timeago >
2017-06-01 08:02:04 +10:00
< / router-link >
< / small >
< / h4 >
< / div >
2017-06-05 06:58:15 +10:00
< h4 class = "replies" v-if = "inConversation" >
< small v-if = "replies.length" > Replies : < / small >
< small v-for = "reply in replies" >
2017-06-08 00:58:24 +10:00
< a href = "#" @click.prevent ="gotoOriginal(reply.id)" @ mouseenter = "replyEnter(reply.id, $event)" @mouseout ="replyLeave()" > {{ reply.name }} & nbsp ; < / a >
2017-06-05 06:58:15 +10:00
< / small >
< / h4 >
2017-06-01 08:02:04 +10:00
< / div >
< div class = "heading-icons" >
2017-11-22 10:00:25 +11:00
< a href = "#" @click.prevent ="toggleMute" v-if = "unmuted"><i class="base09 icon-eye-off" > < / i > < / a >
< a :href = "status.external_url" target = "_blank" v-if = "!status.is_local" class="source_url"><i class="base09 icon-binoculars" > < / i > < / a >
2017-06-01 08:02:04 +10:00
< template v-if = "expandable" >
2017-11-22 10:00:25 +11:00
< a href = "#" @click.prevent ="toggleExpanded" class = "expand" > < i class = "base09 icon-plus-squared" > < / i > < / a >
2017-06-01 08:02:04 +10:00
< / template >
< / div >
< / div >
2016-11-29 02:10:03 +11:00
2017-11-14 01:33:54 +11:00
< div class = "status-preview base00-background base03-border" v-if = "showPreview && preview" >
2018-02-04 03:55:45 +11:00
< StillImage class = "avatar" :src = "preview.user.profile_image_url_original" / >
2017-11-14 01:33:54 +11:00
< div class = "text" >
< h4 >
{ { preview . user . name } }
< small > < a > { { preview . user . screen _name } } < / a > < / small >
< / h4 >
< div @click.prevent ="linkClicked" class = "status-content" v-html = "preview.statusnet_html" > < / div >
< / div >
< / div >
< div class = "status-preview status-preview-loading base00-background base03-border" v -else -if = " showPreview " >
2017-11-22 10:00:25 +11:00
< i class = "base09 icon-spin4 animate-spin" > < / i >
2017-11-14 01:33:54 +11:00
< / div >
2017-02-19 22:58:25 +11:00
< div @click.prevent ="linkClicked" class = "status-content" v-html = "status.statusnet_html" > < / div >
2016-11-29 02:10:03 +11:00
2017-02-14 10:01:50 +11:00
< div v -if = ' status.attachments ' class = 'attachments' >
2018-02-05 02:26:46 +11:00
< attachment v-if = "!hideAttachments" :status-id="status.id" :nsfw="status.nsfw" :attachment="attachment" v-for="attachment in status.attachments" :key="attachment.id" >
2017-02-14 10:01:50 +11:00
< / attachment >
< / div >
2016-11-29 02:10:03 +11:00
< / div >
2016-10-29 00:19:42 +11:00
2018-02-02 09:45:29 +11:00
< div class = 'status-actions' >
< div v-if = "loggedIn" >
< a href = "#" v -on :click.prevent = "toggleReplying" >
< i class = "base09 icon-reply" : class = "{'icon-reply-active': replying}" > < / i >
< / a >
2016-10-29 00:19:42 +11:00
< / div >
2018-02-02 09:45:29 +11:00
< retweet-button :loggedIn = "loggedIn" : status = status > < / retweet-button >
< favorite-button :loggedIn = "loggedIn" : status = status > < / favorite-button >
< delete-button : status = status > < / delete-button >
2017-02-14 10:01:50 +11:00
< / div >
2016-10-29 00:19:42 +11:00
< / div >
< / div >
2017-03-10 06:32:54 +11:00
< div class = "status base00-background container" v-if = "replying" >
< div class = "reply-left" / >
< post-status-form class = "reply-body" :reply-to = "status.id" :attentions = "status.attentions" :repliedUser = "status.user" v -on :posted = "toggleReplying" / >
< / div >
2017-02-14 10:01:50 +11:00
< / template >
2016-10-29 00:19:42 +11:00
< / div >
< / template >
2018-04-10 02:43:31 +10:00
-- >
< template >
< div class = "status-el base00-background base03-border" : class = "[{ 'base01-background': isFocused }, { 'status-conversation': inlineExpanded }]" >
< template v-if = "muted && !noReplyLinks" >
< div class = "media status container muted" >
< small > < router-link : to = "{ name: 'user-profile', params: { id: status.user.id } }" > { { status . user . screen _name } } < / router-link > < / small >
< small class = "muteWords" > { { muteWordHits . join ( ', ' ) } } < / small >
< a href = "#" class = "unmute" @click.prevent ="toggleMute" > < i class = "base09 icon-eye-off" > < / i > < / a >
< / div >
< / template >
< template v-else >
< div v-if = "retweet && !noHeading" class="media container retweet-info" >
< StillImage v-if = "retweet" class = 'avatar' :src = "statusoid.user.profile_image_url_original" / >
< div class = "media-body base04" >
< a :href = "statusoid.user.statusnet_profile_url" style = "font-weight: bold;" :title = "'@'+statusoid.user.screen_name" > { { retweeter } } < / a >
< i class = 'fa icon-retweet retweeted' > < / i >
{ { $t ( 'timeline.repeated' ) } }
< / div >
< / div >
< div class = "media status" >
< div v-if = "!noHeading" class="media-left" >
< a :href = "status.user.statusnet_profile_url" @click.stop.prevent.capture ="toggleUserExpanded" >
< StillImage class = 'avatar' : class = "{'avatar-compact': compact}" :src = "status.user.profile_image_url_original" / >
< / a >
< / div >
< div class = "status-body" >
< div class = "base03-border usercard media-body" v-if = "userExpanded" >
< user-card-content :user = "status.user" :switcher = "false" > < / user-card-content >
< / div >
< div v-if = "!noHeading" class="media-body container" >
< div class = "media-heading-left" >
< div class = "name-and-links" >
< h4 class = "user-name" > { { status . user . name } } < / h4 >
< span class = "links" >
< router-link : to = "{ name: 'user-profile', params: { id: status.user.id } }" > { { status . user . screen _name } } < / router-link >
< span v-if = "status.in_reply_to_screen_name" > & gt ;
< router-link : to = "{ name: 'user-profile', params: { id: status.in_reply_to_user_id } }" >
{ { status . in _reply _to _screen _name } }
< / router-link >
< / span >
< a v-if = "isReply && !noReplyLinks" href="#" @click.prevent="gotoOriginal(status.in_reply_to_status_id)" >
< i class = "icon-reply base09" @ mouseenter = "replyEnter(status.in_reply_to_status_id, $event)" @mouseout ="replyLeave()" > < / i >
< / a >
< / span >
< / div >
< h4 class = "replies" v-if = "inConversation && !noReplyLinks" >
< small v-if = "replies.length" > Replies : < / small >
< small class = "reply-link" v-for = "reply in replies" >
< a href = "#" @click.prevent ="gotoOriginal(reply.id)" @ mouseenter = "replyEnter(reply.id, $event)" @mouseout ="replyLeave()" > {{ reply.name }} & nbsp ; < / a >
< / small >
< / h4 >
< / div >
< div class = "media-heading-right" >
< router-link class = "timeago" : to = "{ name: 'conversation', params: { id: status.id } }" >
< timeago :since = "status.created_at" :auto-update = "60" > < / timeago >
< / router-link >
< a :href = "status.external_url" target = "_blank" v-if = "!status.is_local" class="source_url"><i class="base09 icon-binoculars" > < / i > < / a >
< template v-if = "expandable" >
< a href = "#" @click.prevent ="toggleExpanded" > < i class = "base09 icon-plus-squared" > < / i > < / a >
< / template >
< a href = "#" @click.prevent ="toggleMute" v-if = "unmuted"><i class="base09 icon-eye-off" > < / i > < / a >
< / div >
< / div >
< div v-if = "showPreview" class="status-preview-container" >
< status class = "status-preview" v-if = "preview" :noReplyLinks="true" :statusoid="preview" : compact = true > < / status >
< div class = "status-preview status-preview-loading base00-background base03-border" v-else >
< i class = "base09 icon-spin4 animate-spin" > < / i >
< / div >
< / div >
< div : class = "{'tall-status': hideTallStatus}" class = "status-content-wrapper" >
< a class = "tall-status-hider" :style = "hiderStyle" v-if = "hideTallStatus" href="#" @click.prevent="toggleShowTall" > Show more < / a >
< div @click.prevent ="linkClicked" class = "status-content media-body" v-html = "status.statusnet_html" > < / div >
< a v-if = "showingTall" href="#" class="tall-status-unhider" @click.prevent="toggleShowTall" > Show less < / a >
< / div >
< div v -if = ' status.attachments ' class = 'attachments media-body' >
< attachment :size = "attachmentSize" :status-id = "status.id" :nsfw = "status.nsfw" :attachment = "attachment" v-for = "attachment in status.attachments" :key="attachment.id" >
< / attachment >
< / div >
< div v-if = "!noHeading && !noReplyLinks" class = 'status-actions media-body' >
< div v-if = "loggedIn" >
< a href = "#" v -on :click.prevent = "toggleReplying" >
< i class = "base09 icon-reply" : class = "{'icon-reply-active': replying}" > < / i >
< / a >
< / div >
< retweet-button : loggedIn = 'loggedIn' : status = 'status' > < / retweet-button >
< favorite-button : loggedIn = 'loggedIn' : status = 'status' > < / favorite-button >
< delete-button : status = 'status' > < / delete-button >
< / div >
< / div >
< / div >
< div class = "container" v-if = "replying" >
< div class = "reply-left" / >
< post-status-form class = "reply-body" :reply-to = "status.id" :attentions = "status.attentions" :repliedUser = "status.user" v -on :posted = "toggleReplying" / >
< / div >
< / template >
< / div >
< / template >
2016-10-29 00:19:42 +11:00
< script src = "./status.js" > < / script >
2016-10-29 10:38:41 +11:00
< style lang = "scss" >
2018-04-10 02:43:31 +10:00
@ import '../../_variables.scss' ;
. status - body {
flex : 1 ;
min - width : 0 ;
}
. status - preview . status - el {
border - style : solid ;
border - width : 1 px ;
}
. status - preview - container {
position : relative ;
max - width : 100 % ;
}
. status - preview {
position : absolute ;
max - width : 95 % ;
display : flex ;
border - radius : 4 px ;
box - shadow : 2 px 2 px 3 px rgba ( 0 , 0 , 0 , 0.5 ) ;
margin - top : 0.5 em ;
margin - left : 1 em ;
z - index : 50 ;
. status {
flex : 1 ;
border : 0 ;
}
}
. status - preview - loading {
display : block ;
font - size : 2 em ;
min - width : 8 em ;
padding : 0.5 em ;
text - align : center ;
border - width : 1 px ;
border - style : solid ;
}
. status - el {
hyphens : auto ;
overflow - wrap : break - word ;
word - wrap : break - word ;
word - break : break - word ;
border - left - width : 0 px ;
line - height : 18 px ;
min - width : 0 ;
. timeline & {
border - bottom - width : 1 px ;
border - bottom - style : solid ;
}
2017-06-01 08:02:04 +10:00
2018-04-10 02:43:31 +10:00
. media - body {
flex : 1 ;
padding : 0 ;
margin : 0 0 0.25 em 0.8 em ;
flex - wrap : nowrap ;
2017-11-14 01:33:54 +11:00
}
2018-04-10 02:43:31 +10:00
. media - heading - left {
padding : 0 ;
vertical - align : bottom ;
flex - basis : 100 % ;
small {
font - weight : lighter ;
}
h4 {
font - size : 14 px ;
margin - right : 0.25 em ;
}
. name - and - links {
padding : 0 ;
flex : 1 0 ;
display : flex ;
flex - wrap : wrap ;
}
. links {
padding - top : 1 px ;
font - size : 12 px ;
}
. replies {
line - height : 16 px ;
}
. reply - link {
margin - right : 0.2 em ;
}
}
. media - heading - right {
flex - shrink : 0 ;
2017-11-14 01:33:54 +11:00
display : flex ;
2018-04-10 02:43:31 +10:00
flex - wrap : nowrap ;
max - height : 1.5 em ;
margin - left : 0.25 em ;
. timeago {
margin - right : 0.2 em ;
font - size : 12 px ;
padding - top : 1 px ;
}
i {
margin - left : 0.2 em ;
}
}
a {
display : inline - block ;
word - break : break - all ;
}
. tall - status {
position : relative ;
height : 220 px ;
overflow - x : hidden ;
overflow - y : hidden ;
}
. tall - status - hider {
position : absolute ;
height : 70 px ;
margin - top : 150 px ;
width : 100 % ;
text - align : center ;
line - height : 110 px ;
}
. tall - status - unhider {
width : 100 % ;
text - align : center ;
}
. status - content {
margin - right : 0.5 em ;
img , video {
max - width : 100 % ;
max - height : 400 px ;
vertical - align : middle ;
object - fit : contain ;
}
blockquote {
margin : 0.2 em 0 0.2 em 2 em ;
font - style : italic ;
}
p {
margin : 0 ;
margin - top : 0.2 em ;
margin - bottom : 0.5 em ;
}
}
2017-11-14 01:33:54 +11:00
2018-04-10 02:43:31 +10:00
. retweet - info {
padding : 0.3 em 0.6 em 0 0.6 em ;
margin : 0 0 - 0.3 em 0 ;
2017-11-14 01:33:54 +11:00
. avatar {
2018-04-10 02:43:31 +10:00
margin - left : 28 px ;
width : 20 px ;
height : 20 px ;
border - radius : 5 px ;
2017-11-14 01:33:54 +11:00
}
2018-04-10 02:43:31 +10:00
. media - body {
font - size : 1 em ;
line - height : 22 px ;
2017-11-14 01:33:54 +11:00
}
}
2018-04-10 02:43:31 +10:00
}
2017-11-14 01:33:54 +11:00
2018-04-10 02:43:31 +10:00
. status - fadein {
animation - duration : 0.5 s ;
animation - name : fadein ;
}
@ keyframes fadein {
from {
opacity : 0 ;
}
to {
opacity : 1 ;
}
}
. greentext {
color : green ;
}
. status - conversation {
border - left - style : solid ;
}
. status - actions {
width : 100 % ;
display : flex ;
div , favorite - button {
padding - top : 0.25 em ;
max - width : 6 em ;
flex : 1 ;
}
}
. icon - reply : hover {
color : $blue ;
}
. icon - reply . icon - reply - active {
color : $blue ;
}
. status . avatar - compact {
width : 32 px ;
height : 32 px ;
border - radius : 50 % ;
}
. avatar {
width : 48 px ;
height : 48 px ;
border - radius : 5 px ;
overflow : hidden ;
position : relative ;
img {
width : 100 % ;
height : 100 % ;
}
& . animated : : before {
display : none ;
2017-11-14 01:33:54 +11:00
}
2017-06-01 08:02:04 +10:00
2018-04-10 02:43:31 +10:00
& . retweeted {
}
}
. status : hover . animated . avatar {
canvas {
display : none ;
}
img {
visibility : visible ;
}
}
. status . avatar - retweeter {
width : 24 px ;
height : 24 px ;
position : absolute ;
margin - left : 24 px ;
margin - top : 24 px ;
}
. status {
display : flex ;
padding : 0.6 em ;
border - left : 4 px rgba ( 255 , 48 , 16 , 0.65 ) ;
border - left - style : inherit ;
}
. status - conversation : last - child {
border - bottom : none ;
}
. timeline . panel . timeline {
border - radius : 10 px ;
overflow : hidden ;
}
. muted {
padding : 0.25 em 0.5 em ;
button {
margin - left : auto ;
}
. muteWords {
margin - left : 10 px ;
}
}
a . unmute {
display : block ;
margin - left : auto ;
}
. reply - left {
flex : 0 ;
min - width : 48 px ;
}
. reply - body {
flex : 1 ;
}
@ media all and ( max - width : 960 px ) {
. status - el {
. retweet - info {
. avatar {
margin - left : 20 px ;
}
}
}
. status {
max - width : 100 % ;
}
. status . avatar {
width : 40 px ;
height : 40 px ;
}
}
2017-06-02 00:35:00 +10:00
2016-10-29 10:38:41 +11:00
< / style >