2018-04-09 16:43:31 +00:00
< template >
2018-04-11 16:34:40 +00:00
< div class = "status-el" : class = "[{ 'status-el_focused': isFocused }, { 'status-conversation': inlineExpanded }]" >
2018-04-09 16:43:31 +00:00
< 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 >
2018-03-31 18:14:36 +00:00
< a href = "#" class = "unmute" @click.prevent ="toggleMute" > < i class = "icon-eye-off" > < / i > < / a >
2018-04-09 16:43:31 +00:00
< / div >
< / template >
< template v-else >
2018-06-18 08:36:58 +00:00
< div v-if = "retweet && !noHeading" :class="[repeaterClass, { highlighted: repeaterStyle }]" :style="[repeaterStyle]" class="media container retweet-info" >
2018-04-09 16:43:31 +00:00
< StillImage v-if = "retweet" class = 'avatar' :src = "statusoid.user.profile_image_url_original" / >
2018-04-10 16:25:24 +00:00
< div class = "media-body faint" >
2018-08-13 11:46:28 +00:00
< a v-if = "retweeterHtml" :href="statusoid.user.statusnet_profile_url" class="user-name" :title="'@'+statusoid.user.screen_name" v-html="retweeterHtml" > < / a >
< a v -else :href = "statusoid.user.statusnet_profile_url" class = "user-name" :title = "'@'+statusoid.user.screen_name" > { { retweeter } } < / a >
2018-04-09 16:43:31 +00:00
< i class = 'fa icon-retweet retweeted' > < / i >
{ { $t ( 'timeline.repeated' ) } }
< / div >
< / div >
2018-06-18 08:36:58 +00:00
< div : class = "[userClass, { highlighted: userStyle, 'is-retweet': retweet }]" : style = "[ userStyle ]" class = "media status" >
2018-04-09 16:43:31 +00:00
< 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" >
2018-04-09 21:28:24 +00:00
< div class = "usercard media-body" v-if = "userExpanded" >
2018-04-09 16:43:31 +00:00
< user-card-content :user = "status.user" :switcher = "false" > < / user-card-content >
< / div >
2018-04-10 19:12:59 +00:00
< div v-if = "!noHeading" class="media-body container media-heading" >
2018-04-09 16:43:31 +00:00
< div class = "media-heading-left" >
< div class = "name-and-links" >
2018-08-09 09:52:34 +00:00
< h4 class = "user-name" v-if = "status.user.name_html" v-html="status.user.name_html" > < / h4 >
< h4 class = "user-name" v-else > {{ status.user.name }} < / h4 >
2018-04-09 16:43:31 +00:00
< span class = "links" >
< router-link : to = "{ name: 'user-profile', params: { id: status.user.id } }" > { { status . user . screen _name } } < / router-link >
2018-04-14 11:24:05 +00:00
< span v-if = "status.in_reply_to_screen_name" class="faint reply-info" >
< i class = "icon-right-open" > < / i >
2018-04-09 16:43:31 +00:00
< 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)" >
2018-04-09 21:28:24 +00:00
< i class = "icon-reply" @ mouseenter = "replyEnter(status.in_reply_to_status_id, $event)" @mouseout ="replyLeave()" > < / i >
2018-04-09 16:43:31 +00:00
< / 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 >
2018-08-13 11:46:28 +00:00
< div class = "visibility-icon" v-if = "status.visibility" >
< i :class = "visibilityIcon(status.visibility)" > < / i >
< / div >
< a :href = "status.external_url" target = "_blank" v-if = "!status.is_local" class="source_url"><i class="icon-link-ext-alt" > < / i > < / a >
2018-04-09 16:43:31 +00:00
< template v-if = "expandable" >
2018-04-09 21:28:24 +00:00
< a href = "#" @click.prevent ="toggleExpanded" > < i class = "icon-plus-squared" > < / i > < / a >
2018-04-09 16:43:31 +00:00
< / template >
2018-04-09 21:28:24 +00:00
< a href = "#" @click.prevent ="toggleMute" v-if = "unmuted"><i class="icon-eye-off" > < / i > < / a >
2018-04-09 16:43:31 +00:00
< / div >
< / div >
< div v-if = "showPreview" class="status-preview-container" >
< status class = "status-preview" v-if = "preview" :noReplyLinks="true" :statusoid="preview" : compact = true > < / status >
2018-04-12 17:03:03 +00:00
< div class = "status-preview status-preview-loading" v-else >
2018-03-31 18:14:36 +00:00
< i class = "icon-spin4 animate-spin" > < / i >
2018-04-09 16:43:31 +00:00
< / div >
< / div >
< div : class = "{'tall-status': hideTallStatus}" class = "status-content-wrapper" >
2018-04-09 21:28:24 +00:00
< a class = "tall-status-hider" : class = "{ 'tall-status-hider_focused': isFocused }" v-if = "hideTallStatus" href="#" @click.prevent="toggleShowTall" > Show more < / a >
2018-04-09 16:43:31 +00:00
< 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" >
2018-03-31 18:14:36 +00:00
< i class = "icon-reply" : class = "{'icon-reply-active': replying}" > < / i >
2018-04-09 16:43:31 +00:00
< / a >
< / div >
2018-08-09 16:47:08 +00:00
< retweet-button : visibility = 'status.visibility' : loggedIn = 'loggedIn' : status = 'status' > < / retweet-button >
2018-04-09 16:43:31 +00:00
< 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" / >
2018-06-12 17:28:48 +00:00
< post-status-form class = "reply-body" :reply-to = "status.id" :attentions = "status.attentions" :repliedUser = "status.user" :message-scope = "status.visibility" v -on :posted = "toggleReplying" / >
2018-04-09 16:43:31 +00:00
< / div >
< / template >
< / div >
< / template >
2016-10-28 13:19:42 +00:00
< script src = "./status.js" > < / script >
2016-10-28 23:38:41 +00:00
< style lang = "scss" >
2018-04-09 16:43:31 +00:00
@ import '../../_variables.scss' ;
. status - body {
flex : 1 ;
min - width : 0 ;
}
. status - preview . status - el {
border - style : solid ;
border - width : 1 px ;
2018-04-09 21:28:24 +00:00
border - color : $fallback -- border ;
border - color : var ( -- border , $fallback -- border ) ;
2018-04-09 16:43:31 +00:00
}
. status - preview - container {
position : relative ;
max - width : 100 % ;
}
. status - preview {
position : absolute ;
max - width : 95 % ;
display : flex ;
2018-04-07 16:30:27 +00:00
background - color : $fallback -- bg ;
background - color : var ( -- bg , $fallback -- bg ) ;
border - color : $fallback -- border ;
border - color : var ( -- border , $fallback -- border ) ;
border - style : solid ;
border - width : 1 px ;
border - radius : $fallback -- tooltipRadius ;
border - radius : var ( -- tooltipRadius , $fallback -- tooltipRadius ) ;
2018-04-09 16:43:31 +00:00
box - shadow : 2 px 2 px 3 px rgba ( 0 , 0 , 0 , 0.5 ) ;
2018-04-10 16:25:24 +00:00
margin - top : 0.25 em ;
margin - left : 0.5 em ;
2018-04-09 16:43:31 +00:00
z - index : 50 ;
2018-08-13 11:46:28 +00:00
2018-04-09 16:43:31 +00:00
. status {
flex : 1 ;
border : 0 ;
2018-04-10 16:25:24 +00:00
min - width : 15 em ;
2018-04-09 16:43:31 +00:00
}
}
. status - preview - loading {
display : block ;
2018-04-12 17:03:03 +00:00
min - width : 15 em ;
padding : 1 em ;
2018-04-09 16:43:31 +00:00
text - align : center ;
border - width : 1 px ;
border - style : solid ;
2018-08-13 11:46:28 +00:00
2018-04-12 17:03:03 +00:00
i {
font - size : 2 em ;
}
2018-04-09 16:43:31 +00:00
}
. 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 ;
2018-04-07 16:30:27 +00:00
border - color : $fallback -- border ;
border - color : var ( -- border , $fallback -- border ) ;
2018-04-11 16:34:40 +00:00
border - left : 4 px $fallback -- cRed ;
border - left : 4 px var ( -- cRed , $fallback -- cRed ) ;
2018-04-07 16:30:27 +00:00
& _focused {
background - color : $fallback -- lightBg ;
background - color : var ( -- lightBg , $fallback -- lightBg ) ;
}
2018-04-09 16:43:31 +00:00
. timeline & {
border - bottom - width : 1 px ;
border - bottom - style : solid ;
}
2017-05-31 22:02:04 +00:00
2018-04-09 16:43:31 +00:00
. media - body {
flex : 1 ;
padding : 0 ;
margin : 0 0 0.25 em 0.8 em ;
2018-04-10 19:12:59 +00:00
}
2018-04-15 04:46:06 +00:00
. usercard {
margin - bottom : .7 em
}
2018-04-10 19:12:59 +00:00
. media - heading {
2018-04-09 16:43:31 +00:00
flex - wrap : nowrap ;
2018-08-15 10:02:39 +00:00
line - height : 18 px ;
2017-11-13 14:33:54 +00:00
}
2018-04-09 16:43:31 +00:00
. media - heading - left {
padding : 0 ;
vertical - align : bottom ;
flex - basis : 100 % ;
small {
font - weight : lighter ;
}
h4 {
2018-04-14 04:44:59 +00:00
white - space : nowrap ;
2018-04-09 16:43:31 +00:00
font - size : 14 px ;
margin - right : 0.25 em ;
2018-04-14 04:44:59 +00:00
overflow : hidden ;
text - overflow : ellipsis ;
2018-04-09 16:43:31 +00:00
}
. name - and - links {
padding : 0 ;
flex : 1 0 ;
display : flex ;
flex - wrap : wrap ;
2018-08-13 11:46:28 +00:00
align - items : baseline ;
. user - name {
2018-08-15 10:02:39 +00:00
margin - right : .45 em ;
2018-08-13 12:36:10 +00:00
2018-08-13 11:46:28 +00:00
img {
width : 14 px ;
height : 14 px ;
2018-08-13 12:36:10 +00:00
vertical - align : middle ;
object - fit : contain
2018-08-13 11:46:28 +00:00
}
}
2018-04-09 16:43:31 +00:00
}
2018-08-13 11:46:28 +00:00
2018-04-14 04:44:59 +00:00
. links {
2018-04-14 11:24:05 +00:00
display : flex ;
2018-04-09 16:43:31 +00:00
font - size : 12 px ;
2018-04-09 21:28:24 +00:00
color : $fallback -- link ;
color : var ( -- link , $fallback -- link ) ;
2018-04-14 04:44:59 +00:00
max - width : 100 % ;
a {
max - width : 100 % ;
text - overflow : ellipsis ;
overflow : hidden ;
white - space : nowrap ;
}
2018-04-09 16:43:31 +00:00
}
2018-04-14 11:24:05 +00:00
. reply - info {
display : flex ;
}
2018-04-09 16:43:31 +00:00
. replies {
line - height : 16 px ;
}
. reply - link {
margin - right : 0.2 em ;
}
}
. media - heading - right {
2018-08-13 11:46:28 +00:00
display : inline - flex ;
2018-04-09 16:43:31 +00:00
flex - shrink : 0 ;
flex - wrap : nowrap ;
2018-08-13 11:46:28 +00:00
margin - left : .25 em ;
2018-08-15 10:02:39 +00:00
align - self : baseline ;
2018-08-13 11:46:28 +00:00
2018-04-09 16:43:31 +00:00
. timeago {
margin - right : 0.2 em ;
font - size : 12 px ;
2018-08-13 11:46:28 +00:00
align - self : last baseline ;
2018-04-09 16:43:31 +00:00
}
2018-08-13 11:46:28 +00:00
> * {
2018-04-09 16:43:31 +00:00
margin - left : 0.2 em ;
}
2018-08-15 10:02:39 +00:00
a : hover i {
color : $fallback -- fg ;
color : var ( -- fg , $fallback -- fg ) ;
}
2018-04-09 16:43:31 +00:00
}
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 ;
2018-04-09 21:28:24 +00:00
background : linear - gradient ( to bottom , rgba ( 0 , 0 , 0 , 0 ) , $fallback -- bg 80 % ) ;
background : linear - gradient ( to bottom , rgba ( 0 , 0 , 0 , 0 ) , var ( -- bg , $fallback -- bg ) 80 % ) ;
& _focused {
background : linear - gradient ( to bottom , rgba ( 0 , 0 , 0 , 0 ) , $fallback -- lightBg 80 % ) ;
background : linear - gradient ( to bottom , rgba ( 0 , 0 , 0 , 0 ) , var ( -- lightBg , $fallback -- lightBg ) 80 % ) ;
}
2018-04-09 16:43:31 +00:00
}
. 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-13 14:33:54 +00:00
2018-04-09 16:43:31 +00:00
. retweet - info {
2018-04-14 11:28:20 +00:00
padding : 0.4 em 0.6 em 0 0.6 em ;
2018-06-18 08:36:58 +00:00
margin : 0 ;
2018-08-13 11:46:28 +00:00
2017-11-13 14:33:54 +00:00
. avatar {
2018-04-09 21:28:24 +00:00
border - radius : $fallback -- avatarAltRadius ;
border - radius : var ( -- avatarAltRadius , $fallback -- avatarAltRadius ) ;
2018-04-09 16:43:31 +00:00
margin - left : 28 px ;
width : 20 px ;
height : 20 px ;
2017-11-13 14:33:54 +00:00
}
2018-04-09 16:43:31 +00:00
. media - body {
font - size : 1 em ;
line - height : 22 px ;
2018-04-14 11:24:05 +00:00
display : flex ;
align - content : center ;
flex - wrap : wrap ;
2018-08-13 11:46:28 +00:00
. user - name {
font - weight : bold ;
2018-08-13 12:36:10 +00:00
2018-08-13 11:46:28 +00:00
img {
width : 14 px ;
height : 14 px ;
vertical - align : middle ;
2018-08-13 12:36:10 +00:00
object - fit : contain
2018-08-13 11:46:28 +00:00
}
}
2018-04-14 11:24:05 +00:00
i {
padding : 0 0.2 em ;
}
2018-08-13 11:46:28 +00:00
2018-04-14 04:44:59 +00:00
a {
max - width : 100 % ;
overflow : hidden ;
text - overflow : ellipsis ;
white - space : nowrap ;
}
2017-11-13 14:33:54 +00:00
}
}
2018-04-09 16:43:31 +00:00
}
2017-11-13 14:33:54 +00:00
2018-04-09 16:43:31 +00:00
. status - fadein {
2018-04-11 16:34:40 +00:00
animation - duration : 0.4 s ;
2018-04-09 16:43:31 +00:00
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 {
2018-04-07 16:30:27 +00:00
color : $fallback -- cBlue ;
color : var ( -- cBlue , $fallback -- cBlue ) ;
2018-04-09 16:43:31 +00:00
}
. icon - reply . icon - reply - active {
2018-04-07 16:30:27 +00:00
color : $fallback -- cBlue ;
color : var ( -- cBlue , $fallback -- cBlue ) ;
2018-04-09 16:43:31 +00:00
}
. status . avatar - compact {
width : 32 px ;
height : 32 px ;
2018-04-09 21:28:24 +00:00
border - radius : $fallback -- avatarAltRadius ;
border - radius : var ( -- avatarAltRadius , $fallback -- avatarAltRadius ) ;
2018-04-09 16:43:31 +00:00
}
. avatar {
width : 48 px ;
height : 48 px ;
2018-04-07 23:39:39 +00:00
border - radius : $fallback -- avatarRadius ;
border - radius : var ( -- avatarRadius , $fallback -- avatarRadius ) ;
2018-04-09 16:43:31 +00:00
overflow : hidden ;
position : relative ;
img {
width : 100 % ;
height : 100 % ;
}
& . animated : : before {
display : none ;
2017-11-13 14:33:54 +00:00
}
2017-05-31 22:02:04 +00:00
2018-04-09 16:43:31 +00:00
& . retweeted {
}
}
. status : hover . animated . avatar {
canvas {
display : none ;
}
img {
visibility : visible ;
}
}
. status {
display : flex ;
padding : 0.6 em ;
2018-06-18 08:36:58 +00:00
& . is - retweet {
padding - top : 0.1 em ;
}
2018-04-09 16:43:31 +00:00
}
. status - conversation : last - child {
border - bottom : none ;
}
. 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 ;
}
2018-04-11 16:34:40 +00:00
. timeline > {
. status - el : last - child {
border - bottom - radius : 0 0 $fallback -- panelRadius $fallback -- panelRadius ; ;
border - radius : 0 0 var ( -- panelRadius , $fallback -- panelRadius ) var ( -- panelRadius , $fallback -- panelRadius ) ;
}
}
2018-04-09 16:43:31 +00:00
@ 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 ;
}
2018-04-10 16:25:24 +00:00
. status . avatar - compact {
width : 32 px ;
height : 32 px ;
}
2018-04-09 16:43:31 +00:00
}
2017-06-01 14:35:00 +00:00
2016-10-28 23:38:41 +00:00
< / style >