2016-10-28 06:19:42 -07:00
|
|
|
<template>
|
2017-05-31 01:47:18 -07: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-21 15:00:25 -08:00
|
|
|
<i class="base09 icon-reply" :class="{'icon-reply-active': replying}"></i>
|
2017-05-31 01:47:18 -07:00
|
|
|
</a>
|
|
|
|
</div>
|
2018-02-02 02:27:31 -08:00
|
|
|
<retweet-button :loggedIn="loggedIn" :status=status></retweet-button>
|
2018-02-03 00:18:53 -08:00
|
|
|
<favorite-button :loggedIn="loggedIn" :status=status></favorite-button>
|
2017-05-31 01:47:18 -07: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-12 15:06:48 -08: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-13 15:01:50 -08: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 06:53:23 -07:00
|
|
|
<small class="muteWords">{{muteWordHits.join(', ')}}</small>
|
2017-11-21 15:00:25 -08:00
|
|
|
<a href="#" class="unmute" @click.prevent="toggleMute"><i class="base09 icon-eye-off"></i></a>
|
2016-10-28 06:19:42 -07:00
|
|
|
</div>
|
2017-02-13 15:01:50 -08: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 03:05:03 -07:00
|
|
|
Repeated by <a :href="statusoid.user.statusnet_profile_url" style="font-weight: bold;" :title="'@'+statusoid.user.screen_name">{{retweeter}}</a>
|
2017-02-13 15:01:50 -08:00
|
|
|
</div>
|
2016-10-28 06:19:42 -07:00
|
|
|
</div>
|
2017-02-13 15:01:50 -08:00
|
|
|
<div class="media status container">
|
|
|
|
<div class="media-left">
|
|
|
|
<a :href="status.user.statusnet_profile_url">
|
2017-05-22 04:50:10 -07:00
|
|
|
<img @click.prevent="toggleUserExpanded" :class="{retweeted: retweet}" class='avatar' :src="status.user.profile_image_url_original">
|
|
|
|
<img v-if="retweet" class='avatar-retweeter' :src="statusoid.user.profile_image_url_original"></img>
|
2017-02-13 15:01:50 -08:00
|
|
|
</a>
|
|
|
|
</div>
|
|
|
|
<div class="media-body">
|
2017-11-20 03:03:02 -08:00
|
|
|
<div class="base03-border usercard" v-if="userExpanded">
|
2017-08-21 10:25:01 -07:00
|
|
|
<user-card-content :user="status.user" :switcher="false"></user-card-content>
|
2017-02-16 06:58:49 -08:00
|
|
|
</div>
|
2017-02-13 15:01:50 -08:00
|
|
|
<div class="user-content">
|
2017-05-31 15:02:04 -07:00
|
|
|
<div class="media-heading">
|
|
|
|
<div class="name-and-links">
|
2017-06-01 07:35:00 -07:00
|
|
|
<h4 class="user-name">{{status.user.name}}</h4>
|
2017-05-31 15:02:04 -07: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"> >
|
|
|
|
<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-13 06:33:54 -08:00
|
|
|
<template v-if="isReply">
|
2017-05-31 15:02:04 -07:00
|
|
|
<small>
|
2017-06-07 07:58:24 -07: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-05-31 15:02:04 -07:00
|
|
|
</small>
|
|
|
|
</template>
|
|
|
|
-
|
|
|
|
<small>
|
|
|
|
<router-link :to="{ name: 'conversation', params: { id: status.id } }">
|
2017-05-31 15:11:57 -07:00
|
|
|
<timeago :since="status.created_at" :auto-update="60"></timeago>
|
2017-05-31 15:02:04 -07:00
|
|
|
</router-link>
|
|
|
|
</small>
|
|
|
|
</h4>
|
|
|
|
</div>
|
2017-06-04 13:58:15 -07:00
|
|
|
<h4 class="replies" v-if="inConversation">
|
|
|
|
<small v-if="replies.length">Replies:</small>
|
|
|
|
<small v-for="reply in replies">
|
2017-06-07 07:58:24 -07:00
|
|
|
<a href="#" @click.prevent="gotoOriginal(reply.id)" @mouseenter="replyEnter(reply.id, $event)" @mouseout="replyLeave()">{{reply.name}} </a>
|
2017-06-04 13:58:15 -07:00
|
|
|
</small>
|
|
|
|
</h4>
|
2017-05-31 15:02:04 -07:00
|
|
|
</div>
|
|
|
|
<div class="heading-icons">
|
2017-11-21 15:00:25 -08: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-05-31 15:02:04 -07:00
|
|
|
<template v-if="expandable">
|
2017-11-21 15:00:25 -08:00
|
|
|
<a href="#" @click.prevent="toggleExpanded" class="expand"><i class="base09 icon-plus-squared"></i></a>
|
2017-05-31 15:02:04 -07:00
|
|
|
</template>
|
|
|
|
</div>
|
|
|
|
</div>
|
2016-11-28 07:10:03 -08:00
|
|
|
|
2017-11-13 06:33:54 -08:00
|
|
|
<div class="status-preview base00-background base03-border" v-if="showPreview && preview">
|
|
|
|
<img class="avatar" :src="preview.user.profile_image_url_original">
|
|
|
|
<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-21 15:00:25 -08:00
|
|
|
<i class="base09 icon-spin4 animate-spin"></i>
|
2017-11-13 06:33:54 -08:00
|
|
|
</div>
|
|
|
|
|
2017-02-19 03:58:25 -08:00
|
|
|
<div @click.prevent="linkClicked" class="status-content" v-html="status.statusnet_html"></div>
|
2016-11-28 07:10:03 -08:00
|
|
|
|
2017-02-13 15:01:50 -08:00
|
|
|
<div v-if='status.attachments' class='attachments'>
|
2018-02-04 07:26:46 -08: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-13 15:01:50 -08:00
|
|
|
</attachment>
|
|
|
|
</div>
|
2016-11-28 07:10:03 -08:00
|
|
|
</div>
|
2016-10-28 06:19:42 -07:00
|
|
|
|
2018-02-01 14:45:29 -08: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-28 06:19:42 -07:00
|
|
|
</div>
|
2018-02-01 14:45:29 -08: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-13 15:01:50 -08:00
|
|
|
</div>
|
2016-10-28 06:19:42 -07:00
|
|
|
</div>
|
|
|
|
</div>
|
2017-03-09 11:32:54 -08: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-13 15:01:50 -08:00
|
|
|
</template>
|
2016-10-28 06:19:42 -07:00
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script src="./status.js" ></script>
|
2016-10-28 16:38:41 -07:00
|
|
|
|
|
|
|
<style lang="scss">
|
2016-11-25 08:19:46 -08:00
|
|
|
@import '../../_variables.scss';
|
2017-05-31 15:02:04 -07:00
|
|
|
|
|
|
|
status-text-container {
|
|
|
|
display: block;
|
2017-11-13 06:33:54 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
.status-preview {
|
|
|
|
position: absolute;
|
|
|
|
max-width: 34em;
|
|
|
|
padding: 0.5em;
|
|
|
|
display: flex;
|
|
|
|
border-color: inherit;
|
|
|
|
border-style: solid;
|
|
|
|
border-width: 1px;
|
|
|
|
border-radius: 4px;
|
|
|
|
box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.5);
|
|
|
|
margin-top: 0.5em;
|
|
|
|
margin-left: 1em;
|
|
|
|
|
|
|
|
.avatar {
|
|
|
|
flex-shrink: 0;
|
|
|
|
width: 32px;
|
|
|
|
height: 32px;
|
|
|
|
border-radius: 50%;
|
|
|
|
}
|
|
|
|
.text {
|
|
|
|
h4 {
|
|
|
|
margin-bottom: 0.4em;
|
|
|
|
small {
|
|
|
|
font-weight: lighter;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
padding: 0 0.5em 0.5em 0.5em;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.status-preview-loading {
|
|
|
|
display: block;
|
|
|
|
font-size: 2em;
|
|
|
|
min-width: 8em;
|
|
|
|
text-align: center;
|
|
|
|
}
|
2017-05-31 15:02:04 -07:00
|
|
|
|
2016-11-25 08:19:46 -08:00
|
|
|
.status-el {
|
2016-11-12 11:57:54 -08:00
|
|
|
hyphens: auto;
|
|
|
|
overflow-wrap: break-word;
|
2016-10-28 16:38:41 -07:00
|
|
|
word-wrap: break-word;
|
2016-11-03 08:59:27 -07:00
|
|
|
word-break: break-word;
|
2017-03-08 15:09:23 -08:00
|
|
|
border-left-width: 0px;
|
2017-05-31 15:02:04 -07:00
|
|
|
line-height: 18px;
|
2017-11-12 21:28:21 -08:00
|
|
|
|
|
|
|
.timeline & {
|
|
|
|
border-bottom-width: 1px;
|
|
|
|
border-bottom-style: solid;
|
|
|
|
}
|
2017-05-31 15:02:04 -07:00
|
|
|
|
|
|
|
.notify {
|
|
|
|
.avatar {
|
|
|
|
border-width: 3px;
|
|
|
|
border-style: solid;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.media-body {
|
|
|
|
flex: 1;
|
|
|
|
padding-left: 0.5em;
|
|
|
|
}
|
|
|
|
|
2016-10-28 16:38:41 -07:00
|
|
|
|
2016-11-28 07:10:03 -08:00
|
|
|
.user-content {
|
2017-05-31 15:02:04 -07:00
|
|
|
|
2016-11-28 07:10:03 -08:00
|
|
|
min-height: 52px;
|
2017-02-17 23:48:35 -08:00
|
|
|
padding-top: 1px;
|
2016-11-28 07:10:03 -08:00
|
|
|
}
|
|
|
|
|
2017-05-31 15:02:04 -07:00
|
|
|
.media-heading {
|
|
|
|
display: flex;
|
|
|
|
min-height: 1.4em;
|
|
|
|
margin-bottom: 0.3em;
|
|
|
|
|
|
|
|
small {
|
|
|
|
font-weight: lighter;
|
|
|
|
}
|
|
|
|
h4 {
|
|
|
|
margin-right: 0.4em;
|
|
|
|
}
|
|
|
|
.name-and-links {
|
|
|
|
flex: 1 0;
|
|
|
|
display: flex;
|
|
|
|
flex-wrap: wrap;
|
|
|
|
}
|
2017-06-04 13:58:15 -07:00
|
|
|
.replies {
|
2017-06-05 02:03:32 -07:00
|
|
|
flex-basis: 100%;
|
2017-06-04 13:58:15 -07:00
|
|
|
}
|
2017-05-31 15:02:04 -07:00
|
|
|
}
|
|
|
|
|
2016-11-25 08:34:41 -08:00
|
|
|
.source_url {
|
2017-05-31 15:11:57 -07:00
|
|
|
|
2017-05-31 15:02:04 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
.expand {
|
2017-05-31 15:11:57 -07:00
|
|
|
margin-right: -0.3em;
|
2016-11-25 08:34:41 -08:00
|
|
|
}
|
|
|
|
|
2016-10-28 16:38:41 -07:00
|
|
|
a {
|
2016-11-12 11:57:54 -08:00
|
|
|
display: inline-block;
|
2017-02-19 03:13:56 -08:00
|
|
|
word-break: break-all;
|
2016-10-28 16:38:41 -07:00
|
|
|
}
|
2016-11-12 12:31:41 -08:00
|
|
|
|
|
|
|
.status-content {
|
2017-02-17 23:48:35 -08:00
|
|
|
margin: 3px 15px 4px 0;
|
2017-11-13 08:39:27 -08:00
|
|
|
max-height: 400px;
|
|
|
|
overflow-y: auto;
|
|
|
|
overflow-x: hidden;
|
2017-11-20 03:03:02 -08:00
|
|
|
|
2017-11-07 02:22:33 -08:00
|
|
|
img, video {
|
|
|
|
max-width: 100%;
|
|
|
|
max-height: 400px;
|
2018-02-01 07:18:51 -08:00
|
|
|
vertical-align: middle;
|
2017-11-12 13:57:41 -08:00
|
|
|
object-fit: contain;
|
2017-11-07 02:22:33 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
blockquote {
|
|
|
|
margin: 0.2em 0 0.2em 2em;
|
|
|
|
font-style: italic;
|
|
|
|
}
|
2016-11-12 12:31:41 -08:00
|
|
|
}
|
2016-11-25 04:42:33 -08:00
|
|
|
|
|
|
|
p {
|
2016-11-25 08:19:46 -08:00
|
|
|
margin: 0;
|
|
|
|
margin-top: 0.2em;
|
|
|
|
margin-bottom: 0.5em;
|
2016-11-25 04:42:33 -08:00
|
|
|
}
|
2017-05-31 15:02:04 -07:00
|
|
|
|
|
|
|
.media-left {
|
2017-08-20 06:53:48 -07:00
|
|
|
margin: 0.2em 0.3em 0 0;
|
|
|
|
img {
|
|
|
|
float: right;
|
|
|
|
border-radius: 5px;
|
|
|
|
}
|
2017-05-31 15:02:04 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
.retweet-info {
|
|
|
|
padding: 0.7em 0 0 0.6em;
|
|
|
|
|
|
|
|
.media-left {
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
i {
|
|
|
|
align-self: center;
|
|
|
|
text-align: right;
|
|
|
|
flex: 1;
|
|
|
|
padding-right: 0.3em;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2016-11-25 08:19:46 -08:00
|
|
|
}
|
2016-11-02 10:38:30 -07:00
|
|
|
|
2017-11-12 15:06:48 -08:00
|
|
|
.status-fadein {
|
|
|
|
animation-duration: 0.5s;
|
|
|
|
animation-name: fadein;
|
|
|
|
}
|
|
|
|
|
|
|
|
@keyframes fadein {
|
|
|
|
from {
|
|
|
|
opacity: 0;
|
|
|
|
}
|
|
|
|
to {
|
|
|
|
opacity: 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-06-07 07:58:24 -07:00
|
|
|
.greentext {
|
|
|
|
color: green;
|
|
|
|
}
|
|
|
|
|
2017-03-05 05:34:14 -08:00
|
|
|
.status-conversation {
|
2017-03-08 15:09:23 -08:00
|
|
|
border-left-style: solid;
|
2017-02-22 15:26:37 -08:00
|
|
|
}
|
|
|
|
|
2016-11-25 08:19:46 -08:00
|
|
|
.status-actions {
|
2017-05-31 15:02:04 -07:00
|
|
|
padding-top: 0.15em;
|
|
|
|
width: 100%;
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
div, favorite-button {
|
2017-06-01 07:35:00 -07:00
|
|
|
max-width: 6em;
|
2017-05-31 15:02:04 -07:00
|
|
|
flex: 1;
|
|
|
|
}
|
2016-11-25 08:19:46 -08:00
|
|
|
}
|
2016-11-13 08:52:20 -08:00
|
|
|
|
2016-11-25 08:19:46 -08:00
|
|
|
.icon-reply:hover {
|
2016-11-13 08:52:20 -08:00
|
|
|
color: $blue;
|
2016-11-25 08:19:46 -08:00
|
|
|
}
|
2016-11-25 04:42:33 -08:00
|
|
|
|
2017-11-24 13:55:46 -08:00
|
|
|
.icon-reply.icon-reply-active {
|
2017-03-09 11:32:54 -08:00
|
|
|
color: $blue;
|
|
|
|
}
|
|
|
|
|
2016-11-25 08:19:46 -08:00
|
|
|
.status .avatar {
|
2017-05-22 04:50:10 -07:00
|
|
|
width: 48px;
|
|
|
|
height: 48px;
|
|
|
|
|
|
|
|
&.retweeted {
|
|
|
|
width: 40px;
|
|
|
|
height: 40px;
|
|
|
|
margin-right: 8px;
|
|
|
|
margin-bottom: 8px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.status img.avatar-retweeter {
|
|
|
|
width: 24px;
|
|
|
|
height: 24px;
|
|
|
|
position: absolute;
|
|
|
|
margin-left: 24px;
|
|
|
|
margin-top: 24px;
|
2016-11-25 08:19:46 -08:00
|
|
|
}
|
2016-11-25 04:42:33 -08:00
|
|
|
|
2016-11-25 08:19:46 -08:00
|
|
|
.status.compact .avatar {
|
|
|
|
width: 32px;
|
|
|
|
}
|
2016-11-25 04:42:33 -08:00
|
|
|
|
2016-11-25 08:19:46 -08:00
|
|
|
.status {
|
2017-05-31 15:02:04 -07:00
|
|
|
padding: 0.4em 0.7em 0.45em 0.7em;
|
2017-03-08 15:09:23 -08:00
|
|
|
border-left: 4px rgba(255, 48, 16, 0.65);
|
|
|
|
border-left-style: inherit;
|
2016-11-25 08:19:46 -08:00
|
|
|
}
|
2017-05-31 15:02:04 -07:00
|
|
|
|
2017-11-12 14:26:43 -08:00
|
|
|
.status-conversation:last-child {
|
|
|
|
border-bottom: none;
|
|
|
|
}
|
|
|
|
|
|
|
|
.timeline .panel.timeline {
|
|
|
|
border-radius: 10px;
|
|
|
|
overflow: hidden;
|
|
|
|
}
|
|
|
|
|
2017-03-30 05:11:32 -07:00
|
|
|
.muted {
|
2017-06-07 07:58:24 -07:00
|
|
|
padding: 0.1em 0.4em 0.1em 0.8em;
|
2017-03-30 05:11:32 -07:00
|
|
|
button {
|
|
|
|
margin-left: auto;
|
|
|
|
}
|
2017-04-09 06:53:23 -07:00
|
|
|
|
|
|
|
.muteWords {
|
|
|
|
margin-left: 10px;
|
|
|
|
}
|
2017-02-13 15:01:50 -08:00
|
|
|
}
|
2017-02-14 12:47:37 -08:00
|
|
|
|
|
|
|
a.unmute {
|
|
|
|
display: block;
|
|
|
|
margin-left: auto;
|
|
|
|
}
|
2017-02-16 06:58:49 -08:00
|
|
|
|
2017-03-09 11:32:54 -08:00
|
|
|
.reply-left {
|
|
|
|
flex: 0;
|
|
|
|
min-width: 48px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.reply-body {
|
|
|
|
flex: 1;
|
|
|
|
}
|
|
|
|
|
2017-06-01 07:35:00 -07:00
|
|
|
@media all and (max-width: 960px) {
|
|
|
|
.status-el {
|
|
|
|
.name-and-links {
|
|
|
|
margin-left: -0.25em;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.status {
|
|
|
|
max-width: 100%;
|
|
|
|
}
|
|
|
|
|
|
|
|
.status .avatar {
|
|
|
|
width: 40px;
|
|
|
|
height: 40px;
|
|
|
|
|
|
|
|
&.retweeted {
|
|
|
|
width: 34px;
|
|
|
|
height: 34px;
|
|
|
|
margin-right: 8px;
|
|
|
|
margin-bottom: 8px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.status img.avatar-retweeter {
|
|
|
|
width: 22px;
|
|
|
|
height: 22px;
|
|
|
|
position: absolute;
|
|
|
|
margin-left: 18px;
|
|
|
|
margin-top: 18px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-10-28 16:38:41 -07:00
|
|
|
</style>
|