aboutsummaryrefslogtreecommitdiff
path: root/src/components/notifications
diff options
context:
space:
mode:
authorshpuld <shp@cock.li>2018-04-09 19:43:31 +0300
committershpuld <shp@cock.li>2018-04-09 19:43:31 +0300
commitf4f9b3fa265df95ade97625cf2f870ded0825eb1 (patch)
treebc90340face910ee2c72ebcd9ee8911d62ac9ee3 /src/components/notifications
parent936ca1a38cc1b9206dea8970eda6885fc7d4391d (diff)
small fixes
Diffstat (limited to 'src/components/notifications')
-rw-r--r--src/components/notifications/notifications.js14
-rw-r--r--src/components/notifications/notifications.scss97
-rw-r--r--src/components/notifications/notifications.vue62
3 files changed, 97 insertions, 76 deletions
diff --git a/src/components/notifications/notifications.js b/src/components/notifications/notifications.js
index e9b83bf0..19f767ab 100644
--- a/src/components/notifications/notifications.js
+++ b/src/components/notifications/notifications.js
@@ -1,12 +1,14 @@
import Status from '../status/status.vue'
import StillImage from '../still-image/still-image.vue'
+import UserCardContent from '../user_card_content/user_card_content.vue'
import { sortBy, take, filter } from 'lodash'
const Notifications = {
data () {
return {
- visibleNotificationCount: 10
+ visibleNotificationCount: 10,
+ userExpanded: false
}
},
computed: {
@@ -24,15 +26,10 @@ const Notifications = {
},
unseenCount () {
return this.unseenNotifications.length
- },
- hiderStyle () {
- return {
- background: `linear-gradient(to bottom, rgba(0, 0, 0, 0), ${this.$store.state.config.colors['base00']} 80%)`
- }
}
},
components: {
- Status, StillImage
+ Status, StillImage, UserCardContent
},
watch: {
unseenCount (count) {
@@ -46,6 +43,9 @@ const Notifications = {
methods: {
markAsSeen () {
this.$store.commit('markNotificationsAsSeen', this.visibleNotifications)
+ },
+ toggleUserExpanded () {
+ this.userExpanded = !this.userExpanded
}
}
}
diff --git a/src/components/notifications/notifications.scss b/src/components/notifications/notifications.scss
index 3c500b36..73a70a14 100644
--- a/src/components/notifications/notifications.scss
+++ b/src/components/notifications/notifications.scss
@@ -30,22 +30,52 @@
}
.notification {
- // Will have to use pixels here to ensure consistent distance with
- // pad alone and pad + border, browsers bad at rounding this with em,
- // they love to give a 1 pixel ghost offset with 0.7em vs 0.3em + 0.4em,
- // which does not happen with 10px vs 4px + 6px.
- padding: 0.4em 0 0 10px;
+ padding-left: 4px;
+ box-sizing: border-box;
display: flex;
border-bottom: 1px solid;
border-bottom-color: inherit;
+ .non-mention {
+ display: flex;
+ flex: 1;
+ flex-wrap: nowrap;
+ padding: 0.6em;
+ .status-el {
+ padding: 0;
+ .status-content.media-body {
+ margin: 0;
+ }
+ }
+ }
- .text {
+ .status-el {
+ flex: 1;
+ }
+
+ .notification-right {
+ flex: 1;
+ margin-left: 0.8em;
+ }
+
+ .notification-details {
min-width: 0px;
word-wrap: break-word;
line-height:18px;
position: relative;
overflow: hidden;
+ width: 100%;
+ padding: 0.5em;
+ flex: 1;
+ flex-wrap: nowrap;
+
+ .username {
+ font-weight: bolder;
+ }
+ .timeago {
+ float: right;
+ font-size: 12px;
+ }
.icon-retweet.lit {
color: $green;
@@ -79,7 +109,6 @@
}
}
- padding: 0.3em 0.8em 0.5em;
p {
margin: 0;
margin-top: 0;
@@ -87,29 +116,6 @@
}
}
- .avatar {
- margin-top: 0.3em;
- width: 32px;
- height: 32px;
- border-radius: 50%;
- overflow: hidden;
- line-height: 0;
-
- &.animated::before {
- display: none;
- }
-
- }
-
- &:hover .animated.avatar {
- canvas {
- display: none;
- }
- img {
- visibility: visible;
- }
- }
-
&:last-child {
border-bottom: none;
border-radius: 0 0 10px 10px;
@@ -135,6 +141,35 @@
.unseen {
border-left: 4px solid rgba(255, 16, 8, 0.75);
- padding-left: 6px;
+ padding-left: 0px;
+ }
+}
+
+.notification {
+ .avatar-compact {
+ margin-top: 0.3em;
+ width: 32px;
+ height: 32px;
+ border-radius: 50%;
+ overflow: hidden;
+ line-height: 0;
+
+ &.animated::before {
+ display: none;
+ }
+
+ }
+
+ &:hover .animated.avatar {
+ canvas {
+ display: none;
+ }
+ img {
+ visibility: visible;
+ }
+ }
+
+ .notification-usercard {
+ margin-left: 0.8em;
}
}
diff --git a/src/components/notifications/notifications.vue b/src/components/notifications/notifications.vue
index 8e6f12b2..99f00032 100644
--- a/src/components/notifications/notifications.vue
+++ b/src/components/notifications/notifications.vue
@@ -8,46 +8,32 @@
</div>
<div class="panel-body base03-border">
<div v-for="notification in visibleNotifications" :key="notification" class="notification" :class='{"unseen": !notification.seen}'>
- <div>
- <a :href="notification.action.user.statusnet_profile_url" target="_blank">
- <StillImage class='avatar' :src="notification.action.user.profile_image_url_original"/>
+ <status v-if="notification.type === 'mention'" :compact="true" :statusoid="notification.status"></status>
+ <div class="non-mention" v-else>
+ <a :href="notification.action.user.statusnet_profile_url" @click.stop.prevent.capture="toggleUserExpanded">
+ <StillImage class='avatar-compact' :src="notification.action.user.profile_image_url_original"/>
</a>
- </div>
- <div class='text' style="width: 100%;">
- <div v-if="notification.type === 'favorite'">
- <h1>
- <span :title="'@'+notification.action.user.screen_name">{{ notification.action.user.name }}</span>
- <i class="fa icon-star lit"></i>
- <small><router-link :to="{ name: 'conversation', params: { id: notification.status.id } }"><timeago :since="notification.action.created_at" :auto-update="240"></timeago></router-link></small>
- </h1>
- <div class="notification-gradient" :style="hiderStyle"></div>
- <div class="notification-content" v-html="notification.status.statusnet_html"></div>
- </div>
- <div v-if="notification.type === 'repeat'">
- <h1>
- <span :title="'@'+notification.action.user.screen_name">{{ notification.action.user.name }}</span>
- <i class="fa icon-retweet lit"></i>
- <small><router-link :to="{ name: 'conversation', params: { id: notification.status.id } }"><timeago :since="notification.action.created_at" :auto-update="240"></timeago></router-link></small>
- </h1>
- <div class="notification-gradient" :style="hiderStyle"></div>
- <div class="notification-content" v-html="notification.status.statusnet_html"></div>
- </div>
- <div v-if="notification.type === 'mention'">
- <h1>
- <span :title="'@'+notification.action.user.screen_name">{{ notification.action.user.name }}</span>
- <i class="fa icon-reply lit"></i>
- <small><router-link :to="{ name: 'conversation', params: { id: notification.status.id } }"><timeago :since="notification.action.created_at" :auto-update="240"></timeago></router-link></small>
- </h1>
- <status :compact="true" :statusoid="notification.status"></status>
- </div>
- <div v-if="notification.type === 'follow'">
- <h1>
- <span :title="'@'+notification.action.user.screen_name">{{ notification.action.user.name }}</span>
- <i class="fa icon-user-plus lit"></i>
- </h1>
- <div>
- <router-link :to="{ name: 'user-profile', params: { id: notification.action.user.id } }">@{{ notification.action.user.screen_name }}</router-link> {{$t('notifications.followed_you')}}
+ <div class='notification-right'>
+ <div class="base03-border usercard" v-if="userExpanded">
+ <user-card-content :user="notification.action.user" :switcher="false"></user-card-content>
</div>
+ <span class="notification-details">
+ <span class="username" :title="'@'+notification.action.user.screen_name">{{ notification.action.user.name }}</span>
+ <span v-if="notification.type === 'favorite'">
+ <i class="fa icon-star lit"></i>
+ <small>{{$t('notifications.favorited_you')}}</small>
+ </span>
+ <span v-if="notification.type === 'repeat'">
+ <i class="fa icon-retweet lit"></i>
+ <small>{{$t('notifications.repeated_you')}}</small>
+ </span>
+ <span v-if="notification.type === 'follow'">
+ <i class="fa icon-user-plus lit"></i>
+ <small>{{$t('notifications.followed_you')}}</small>
+ </span>
+ <small class="timeago"><router-link :to="{ name: 'conversation', params: { id: notification.status.id } }"><timeago :since="notification.action.created_at" :auto-update="240"></timeago></router-link></small>
+ </span>
+ <status class="base04" :compact="true" :statusoid="notification.status" :noHeading="true"></status>
</div>
</div>
</div>