2018-04-09 09:43:31 -07:00
< template >
2018-08-24 12:04:26 -07:00
< div class = "status-el" v-if ="!hideReply" :class="[{ 'status-el_focused': isFocused }, { 'status-conversation': inlineExpanded }]" >
2018-04-09 09:43:31 -07: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 } } < / r o u t e r - l i n k > < / s m a l l >
< small class = "muteWords" > { { muteWordHits . join ( ', ' ) } } < / small >
2018-03-31 11:14:36 -07:00
< a href = "#" class = "unmute" @click.prevent ="toggleMute" > < i class = "icon-eye-off" > < / i > < / a >
2018-04-09 09:43:31 -07:00
< / div >
< / template >
< template v-else >
2018-06-18 01:36:58 -07:00
< div v-if ="retweet && !noHeading" :class="[repeaterClass, { highlighted: repeaterStyle }]" :style="[repeaterStyle]" class="media container retweet-info" >
2018-04-09 09:43:31 -07:00
< StillImage v -if = " retweet " class = 'avatar' :src ="statusoid.user.profile_image_url_original" / >
2018-04-10 09:25:24 -07:00
< div class = "media-body faint" >
2018-08-13 04:46:28 -07: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 09:43:31 -07:00
< i class = 'fa icon-retweet retweeted' > < / i >
{ { $t ( 'timeline.repeated' ) } }
< / div >
< / div >
2018-06-18 01:36:58 -07:00
< div : class = "[userClass, { highlighted: userStyle, 'is-retweet': retweet }]" : style = "[ userStyle ]" class = "media status" >
2018-04-09 09:43:31 -07: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 14:28:24 -07:00
< div class = "usercard media-body" v-if ="userExpanded" >
2018-04-09 09:43:31 -07:00
< user -card -content :user ="status.user" :switcher ="false" > < / u s e r - c a r d - c o n t e n t >
< / div >
2018-04-10 12:12:59 -07:00
< div v-if ="!noHeading" class="media-body container media-heading" >
2018-04-09 09:43:31 -07:00
< div class = "media-heading-left" >
< div class = "name-and-links" >
2018-08-09 02:52:34 -07: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 09:43:31 -07:00
< span class = "links" >
< router -link : to = "{ name: 'user-profile', params: { id: status.user.id } }" > { { status . user . screen _name } } < / r o u t e r - l i n k >
2018-04-14 04:24:05 -07:00
< span v-if ="status.in_reply_to_screen_name" class="faint reply-info" >
< i class = "icon-right-open" > < / i >
2018-04-09 09:43:31 -07:00
< router -link : to = "{ name: 'user-profile', params: { id: status.in_reply_to_user_id } }" >
{ { status . in _reply _to _screen _name } }
< / r o u t e r - l i n k >
< / span >
< a v-if ="isReply && !noReplyLinks" href="#" @click.prevent="gotoOriginal(status.in_reply_to_status_id)" >
2018-04-09 14:28:24 -07:00
< i class = "icon-reply" @ mouseenter = "replyEnter(status.in_reply_to_status_id, $event)" @mouseout ="replyLeave()" > < / i >
2018-04-09 09:43:31 -07: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 >
< / r o u t e r - l i n k >
2018-08-13 04:46:28 -07:00
< div class = "visibility-icon" v-if ="status.visibility" >
2018-08-27 02:51:30 -07:00
< i :class ="visibilityIcon(status.visibility)" : title = "status.visibility | capitalize" > < / i >
2018-08-13 04:46:28 -07:00
< / div >
2018-08-27 02:55:07 -07:00
< a :href ="status.external_url" target = "_blank" v-if ="!status.is_local" class="source_url" title="Source" >
< i class = "icon-link-ext-alt" > < / i >
< / a >
2018-04-09 09:43:31 -07:00
< template v-if ="expandable" >
2018-08-27 02:55:07 -07:00
< a href = "#" @click.prevent ="toggleExpanded" title = "Expand" >
< i class = "icon-plus-squared" > < / i >
< / a >
2018-04-09 09:43:31 -07:00
< / template >
2018-04-09 14:28:24 -07:00
< a href = "#" @click.prevent ="toggleMute" v-if ="unmuted" > < i class = "icon-eye-off" > < / i > < / a >
2018-04-09 09:43:31 -07: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 10:03:03 -07:00
< div class = "status-preview status-preview-loading" v-else >
2018-03-31 11:14:36 -07:00
< i class = "icon-spin4 animate-spin" > < / i >
2018-04-09 09:43:31 -07:00
< / div >
< / div >
< div : class = "{'tall-status': hideTallStatus}" class = "status-content-wrapper" >
2018-08-19 18:59:06 -07:00
< a class = "tall-status-hider" : class = "{ 'tall-status-hider_focused': isFocused }" v-if ="hideTallStatus" href="#" @click.prevent="toggleShowMore" > Show more < / a >
2018-08-19 19:41:40 -07:00
< div @click.prevent ="linkClicked" class = "status-content media-body" v-html ="status.statusnet_html" v-if="!hideSubjectStatus" > < / div >
2018-08-19 18:59:06 -07:00
< div @click.prevent ="linkClicked" class = "status-content media-body" v -html = " status.summary " v-else > < / div >
2018-08-19 19:41:40 -07:00
< a v-if ="hideSubjectStatus" href="#" class="cw-status-hider" @click.prevent="toggleShowMore" > Show more < / a >
2018-08-19 18:59:06 -07:00
< a v-if ="showingMore" href="#" class="status-unhider" @click.prevent="toggleShowMore" > Show less < / a >
2018-04-09 09:43:31 -07:00
< / div >
2018-08-25 12:33:44 -07:00
< div v -if = ' status.attachments & & ! hideSubjectStatus ' class = 'attachments media-body' >
2018-08-25 16:21:54 -07:00
< attachment :size ="attachmentSize" :status-id ="status.id" :nsfw ="nsfwClickthrough" :attachment ="attachment" v-for ="attachment in status.attachments" :key="attachment.id" >
2018-04-09 09:43:31 -07:00
< / 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 11:14:36 -07:00
< i class = "icon-reply" : class = "{'icon-reply-active': replying}" > < / i >
2018-04-09 09:43:31 -07:00
< / a >
< / div >
2018-08-09 09:47:08 -07:00
< retweet -button : visibility = 'status.visibility' : loggedIn = 'loggedIn' : status = 'status' > < / r e t w e e t - b u t t o n >
2018-04-09 09:43:31 -07:00
< favorite -button : loggedIn = 'loggedIn' : status = 'status' > < / f a v o r i t e - b u t t o n >
< delete -button : status = 'status' > < / d e l e t e - b u t t o n >
< / div >
< / div >
< / div >
< div class = "container" v-if ="replying" >
< div class = "reply-left" / >
2018-09-25 05:16:26 -07:00
< post -status -form class = "reply-body" :reply-to ="status.id" :attentions ="status.attentions" :repliedUser ="status.user" :copy-message-scope ="status.visibility" :subject ="replySubject" v -on :posted ="toggleReplying" / >
2018-04-09 09:43:31 -07:00
< / div >
< / template >
< / div >
< / template >
2016-10-28 06:19:42 -07:00
< script src = "./status.js" > < / script >
2016-10-28 16:38:41 -07:00
< style lang = "scss" >
2018-04-09 09:43:31 -07: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 14:28:24 -07:00
border - color : $fallback -- border ;
border - color : var ( -- border , $fallback -- border ) ;
2018-04-09 09:43:31 -07:00
}
. status - preview - container {
position : relative ;
max - width : 100 % ;
}
. status - preview {
position : absolute ;
max - width : 95 % ;
display : flex ;
2018-04-07 09:30:27 -07: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 09:43:31 -07:00
box - shadow : 2 px 2 px 3 px rgba ( 0 , 0 , 0 , 0.5 ) ;
2018-04-10 09:25:24 -07:00
margin - top : 0.25 em ;
margin - left : 0.5 em ;
2018-04-09 09:43:31 -07:00
z - index : 50 ;
2018-08-13 04:46:28 -07:00
2018-04-09 09:43:31 -07:00
. status {
flex : 1 ;
border : 0 ;
2018-04-10 09:25:24 -07:00
min - width : 15 em ;
2018-04-09 09:43:31 -07:00
}
}
. status - preview - loading {
display : block ;
2018-04-12 10:03:03 -07:00
min - width : 15 em ;
padding : 1 em ;
2018-04-09 09:43:31 -07:00
text - align : center ;
border - width : 1 px ;
border - style : solid ;
2018-08-13 04:46:28 -07:00
2018-04-12 10:03:03 -07:00
i {
font - size : 2 em ;
}
2018-04-09 09:43:31 -07: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 09:30:27 -07:00
border - color : $fallback -- border ;
border - color : var ( -- border , $fallback -- border ) ;
2018-04-11 09:34:40 -07:00
border - left : 4 px $fallback -- cRed ;
border - left : 4 px var ( -- cRed , $fallback -- cRed ) ;
2018-04-07 09:30:27 -07:00
& _focused {
background - color : $fallback -- lightBg ;
background - color : var ( -- lightBg , $fallback -- lightBg ) ;
}
2018-04-09 09:43:31 -07:00
. timeline & {
border - bottom - width : 1 px ;
border - bottom - style : solid ;
}
2017-05-31 15:02:04 -07:00
2018-04-09 09:43:31 -07:00
. media - body {
flex : 1 ;
padding : 0 ;
margin : 0 0 0.25 em 0.8 em ;
2018-04-10 12:12:59 -07:00
}
2018-04-14 21:46:06 -07:00
. usercard {
margin - bottom : .7 em
}
2018-04-10 12:12:59 -07:00
. media - heading {
2018-04-09 09:43:31 -07:00
flex - wrap : nowrap ;
2018-08-15 03:02:39 -07:00
line - height : 18 px ;
2017-11-13 06:33:54 -08:00
}
2018-04-09 09:43:31 -07:00
. media - heading - left {
padding : 0 ;
vertical - align : bottom ;
flex - basis : 100 % ;
small {
font - weight : lighter ;
}
h4 {
2018-04-13 21:44:59 -07:00
white - space : nowrap ;
2018-04-09 09:43:31 -07:00
font - size : 14 px ;
margin - right : 0.25 em ;
2018-04-13 21:44:59 -07:00
overflow : hidden ;
text - overflow : ellipsis ;
2018-04-09 09:43:31 -07:00
}
. name - and - links {
padding : 0 ;
flex : 1 0 ;
display : flex ;
flex - wrap : wrap ;
2018-08-13 04:46:28 -07:00
align - items : baseline ;
. user - name {
2018-08-15 03:02:39 -07:00
margin - right : .45 em ;
2018-08-13 05:36:10 -07:00
2018-08-13 04:46:28 -07:00
img {
width : 14 px ;
height : 14 px ;
2018-08-13 05:36:10 -07:00
vertical - align : middle ;
object - fit : contain
2018-08-13 04:46:28 -07:00
}
}
2018-04-09 09:43:31 -07:00
}
2018-08-13 04:46:28 -07:00
2018-04-13 21:44:59 -07:00
. links {
2018-04-14 04:24:05 -07:00
display : flex ;
2018-04-09 09:43:31 -07:00
font - size : 12 px ;
2018-04-09 14:28:24 -07:00
color : $fallback -- link ;
color : var ( -- link , $fallback -- link ) ;
2018-04-13 21:44:59 -07:00
max - width : 100 % ;
a {
max - width : 100 % ;
text - overflow : ellipsis ;
overflow : hidden ;
white - space : nowrap ;
}
2018-04-09 09:43:31 -07:00
}
2018-04-14 04:24:05 -07:00
. reply - info {
display : flex ;
}
2018-04-09 09:43:31 -07:00
. replies {
line - height : 16 px ;
}
. reply - link {
margin - right : 0.2 em ;
}
}
. media - heading - right {
2018-08-13 04:46:28 -07:00
display : inline - flex ;
2018-04-09 09:43:31 -07:00
flex - shrink : 0 ;
flex - wrap : nowrap ;
2018-08-13 04:46:28 -07:00
margin - left : .25 em ;
2018-08-15 03:02:39 -07:00
align - self : baseline ;
2018-08-13 04:46:28 -07:00
2018-04-09 09:43:31 -07:00
. timeago {
margin - right : 0.2 em ;
font - size : 12 px ;
2018-08-13 04:46:28 -07:00
align - self : last baseline ;
2018-04-09 09:43:31 -07:00
}
2018-08-13 04:46:28 -07:00
> * {
2018-04-09 09:43:31 -07:00
margin - left : 0.2 em ;
}
2018-08-15 03:02:39 -07:00
a : hover i {
color : $fallback -- fg ;
color : var ( -- fg , $fallback -- fg ) ;
}
2018-04-09 09:43:31 -07: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 14:28:24 -07: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 09:43:31 -07:00
}
2018-08-19 18:59:06 -07:00
. status - unhider , . cw - status - hider {
2018-04-09 09:43:31 -07:00
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 ;
}
2018-08-31 06:04:52 -07:00
pre {
overflow : auto ;
}
2018-04-09 09:43:31 -07:00
p {
margin : 0 ;
margin - top : 0.2 em ;
margin - bottom : 0.5 em ;
}
2018-08-31 05:11:27 -07:00
h1 {
font - size : 1.1 em ;
2018-08-31 06:04:52 -07:00
line - height : 1.2 em ;
2018-08-31 06:13:43 -07:00
margin : 1.4 em 0 ;
2018-08-31 05:11:27 -07:00
}
h2 {
2018-08-31 06:13:43 -07:00
font - size : 1.1 em ;
margin : 1.0 em 0 ;
2018-08-31 05:11:27 -07:00
}
h3 {
font - size : 1 em ;
2018-08-31 06:13:43 -07:00
margin : 1.2 em 0 ;
2018-08-31 05:11:27 -07:00
}
h4 {
2018-08-31 06:13:43 -07:00
margin : 1.1 em 0 ;
2018-08-31 05:11:27 -07:00
}
2018-04-09 09:43:31 -07:00
}
2017-11-13 06:33:54 -08:00
2018-04-09 09:43:31 -07:00
. retweet - info {
2018-04-14 04:28:20 -07:00
padding : 0.4 em 0.6 em 0 0.6 em ;
2018-06-18 01:36:58 -07:00
margin : 0 ;
2018-08-13 04:46:28 -07:00
2017-11-13 06:33:54 -08:00
. avatar {
2018-04-09 14:28:24 -07:00
border - radius : $fallback -- avatarAltRadius ;
border - radius : var ( -- avatarAltRadius , $fallback -- avatarAltRadius ) ;
2018-04-09 09:43:31 -07:00
margin - left : 28 px ;
width : 20 px ;
height : 20 px ;
2017-11-13 06:33:54 -08:00
}
2018-04-09 09:43:31 -07:00
. media - body {
font - size : 1 em ;
line - height : 22 px ;
2018-04-14 04:24:05 -07:00
display : flex ;
align - content : center ;
flex - wrap : wrap ;
2018-08-13 04:46:28 -07:00
. user - name {
font - weight : bold ;
2018-08-13 05:36:10 -07:00
2018-08-13 04:46:28 -07:00
img {
width : 14 px ;
height : 14 px ;
vertical - align : middle ;
2018-08-13 05:36:10 -07:00
object - fit : contain
2018-08-13 04:46:28 -07:00
}
}
2018-04-14 04:24:05 -07:00
i {
padding : 0 0.2 em ;
}
2018-08-13 04:46:28 -07:00
2018-04-13 21:44:59 -07:00
a {
max - width : 100 % ;
overflow : hidden ;
text - overflow : ellipsis ;
white - space : nowrap ;
}
2017-11-13 06:33:54 -08:00
}
}
2018-04-09 09:43:31 -07:00
}
2017-11-13 06:33:54 -08:00
2018-04-09 09:43:31 -07:00
. status - fadein {
2018-04-11 09:34:40 -07:00
animation - duration : 0.4 s ;
2018-04-09 09:43:31 -07: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 09:30:27 -07:00
color : $fallback -- cBlue ;
color : var ( -- cBlue , $fallback -- cBlue ) ;
2018-04-09 09:43:31 -07:00
}
. icon - reply . icon - reply - active {
2018-04-07 09:30:27 -07:00
color : $fallback -- cBlue ;
color : var ( -- cBlue , $fallback -- cBlue ) ;
2018-04-09 09:43:31 -07:00
}
. status . avatar - compact {
width : 32 px ;
height : 32 px ;
2018-04-09 14:28:24 -07:00
border - radius : $fallback -- avatarAltRadius ;
border - radius : var ( -- avatarAltRadius , $fallback -- avatarAltRadius ) ;
2018-04-09 09:43:31 -07:00
}
. avatar {
width : 48 px ;
height : 48 px ;
2018-04-07 16:39:39 -07:00
border - radius : $fallback -- avatarRadius ;
border - radius : var ( -- avatarRadius , $fallback -- avatarRadius ) ;
2018-04-09 09:43:31 -07:00
overflow : hidden ;
position : relative ;
img {
width : 100 % ;
height : 100 % ;
}
& . animated : : before {
display : none ;
2017-11-13 06:33:54 -08:00
}
2017-05-31 15:02:04 -07:00
2018-04-09 09:43:31 -07:00
& . retweeted {
}
}
. status : hover . animated . avatar {
canvas {
display : none ;
}
img {
visibility : visible ;
}
}
. status {
display : flex ;
padding : 0.6 em ;
2018-06-18 01:36:58 -07:00
& . is - retweet {
padding - top : 0.1 em ;
}
2018-04-09 09:43:31 -07: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 09:34:40 -07: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 09:43:31 -07: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 09:25:24 -07:00
. status . avatar - compact {
width : 32 px ;
height : 32 px ;
}
2018-04-09 09:43:31 -07:00
}
2017-06-01 07:35:00 -07:00
2016-10-28 16:38:41 -07:00
< / style >