diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-04-17 23:52:54 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2021-04-17 23:52:54 +0900 |
| commit | e7610b24677600a49ca585b17b63b0aa0c972598 (patch) | |
| tree | d8c4bb21c7224ec8f2864336e0fd98fa767abde7 /src/client/components | |
| parent | Update Dockerfile (diff) | |
| download | sharkey-e7610b24677600a49ca585b17b63b0aa0c972598.tar.gz sharkey-e7610b24677600a49ca585b17b63b0aa0c972598.tar.bz2 sharkey-e7610b24677600a49ca585b17b63b0aa0c972598.zip | |
display online status
Diffstat (limited to 'src/client/components')
| -rw-r--r-- | src/client/components/avatars.vue | 2 | ||||
| -rw-r--r-- | src/client/components/global/avatar.vue | 21 | ||||
| -rw-r--r-- | src/client/components/note-detailed.vue | 2 | ||||
| -rw-r--r-- | src/client/components/user-info.vue | 2 | ||||
| -rw-r--r-- | src/client/components/user-online-indicator.vue | 50 | ||||
| -rw-r--r-- | src/client/components/user-preview.vue | 2 | ||||
| -rw-r--r-- | src/client/components/user-select-dialog.vue | 4 | ||||
| -rw-r--r-- | src/client/components/users-dialog.vue | 2 |
8 files changed, 77 insertions, 8 deletions
diff --git a/src/client/components/avatars.vue b/src/client/components/avatars.vue index cac95e6d40..da862967dd 100644 --- a/src/client/components/avatars.vue +++ b/src/client/components/avatars.vue @@ -1,7 +1,7 @@ <template> <div> <div v-for="user in us" :key="user.id" style="display:inline-block;width:32px;height:32px;margin-right:8px;"> - <MkAvatar :user="user" style="width:32px;height:32px;"/> + <MkAvatar :user="user" style="width:32px;height:32px;" :show-indicator="true"/> </div> </div> </template> diff --git a/src/client/components/global/avatar.vue b/src/client/components/global/avatar.vue index 83675a155c..64fb2116b6 100644 --- a/src/client/components/global/avatar.vue +++ b/src/client/components/global/avatar.vue @@ -1,9 +1,11 @@ <template> <span class="eiwwqkts _noSelect" :class="{ cat }" :title="acct(user)" v-if="disableLink" v-user-preview="disablePreview ? undefined : user.id" @click="onClick"> <img class="inner" :src="url" decoding="async"/> + <MkUserOnlineIndicator v-if="showIndicator" class="indicator" :user="user"/> </span> <MkA class="eiwwqkts _noSelect" :class="{ cat }" :to="userPage(user)" :title="acct(user)" :target="target" v-else v-user-preview="disablePreview ? undefined : user.id"> <img class="inner" :src="url" decoding="async"/> + <MkUserOnlineIndicator v-if="showIndicator" class="indicator" :user="user"/> </MkA> </template> @@ -12,8 +14,12 @@ import { defineComponent } from 'vue'; import { getStaticImageUrl } from '@client/scripts/get-static-image-url'; import { extractAvgColorFromBlurhash } from '@client/scripts/extract-avg-color-from-blurhash'; import { acct, userPage } from '@client/filters/user'; +import MkUserOnlineIndicator from '@client/components/user-online-indicator.vue'; export default defineComponent({ + components: { + MkUserOnlineIndicator + }, props: { user: { type: Object, @@ -30,6 +36,10 @@ export default defineComponent({ disablePreview: { required: false, default: false + }, + showIndicator: { + required: false, + default: false } }, emits: ['click'], @@ -93,7 +103,7 @@ export default defineComponent({ } } - .inner { + > .inner { position: absolute; bottom: 0; left: 0; @@ -106,5 +116,14 @@ export default defineComponent({ width: 100%; height: 100%; } + + > .indicator { + position: absolute; + z-index: 1; + bottom: 0; + left: 0; + width: 20%; + height: 20%; + } } </style> diff --git a/src/client/components/note-detailed.vue b/src/client/components/note-detailed.vue index b25c97543b..50e76e5299 100644 --- a/src/client/components/note-detailed.vue +++ b/src/client/components/note-detailed.vue @@ -35,7 +35,7 @@ </div> <article class="article" @contextmenu.stop="onContextmenu"> <header class="header"> - <MkAvatar class="avatar" :user="appearNote.user"/> + <MkAvatar class="avatar" :user="appearNote.user" :show-indicator="true"/> <div class="body"> <div class="top"> <MkA class="name" :to="userPage(appearNote.user)" v-user-preview="appearNote.user.id"> diff --git a/src/client/components/user-info.vue b/src/client/components/user-info.vue index ac2f9a75a6..289e0f3c3f 100644 --- a/src/client/components/user-info.vue +++ b/src/client/components/user-info.vue @@ -1,7 +1,7 @@ <template> <div class="_panel vjnjpkug"> <div class="banner" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl})` : ''"></div> - <MkAvatar class="avatar" :user="user" :disable-preview="true"/> + <MkAvatar class="avatar" :user="user" :disable-preview="true" :show-indicator="true"/> <div class="title"> <MkA class="name" :to="userPage(user)"><MkUserName :user="user" :nowrap="false"/></MkA> <p class="username"><MkAcct :user="user"/></p> diff --git a/src/client/components/user-online-indicator.vue b/src/client/components/user-online-indicator.vue new file mode 100644 index 0000000000..bb98978bba --- /dev/null +++ b/src/client/components/user-online-indicator.vue @@ -0,0 +1,50 @@ +<template> +<div class="fzgwjkgc" :class="user.onlineStatus" v-tooltip="text"></div> +</template> + +<script lang="ts"> +import { defineComponent } from 'vue'; + +export default defineComponent({ + props: { + user: { + type: Object, + required: true + }, + }, + + computed: { + text(): string { + switch (this.user.onlineStatus) { + case 'online': return this.$ts.online; + case 'active': return this.$ts.active; + case 'offline': return this.$ts.offline; + case 'unknown': return this.$ts.unknown; + } + } + } +}); +</script> + +<style lang="scss" scoped> +.fzgwjkgc { + box-shadow: 0 0 0 3px var(--panel); + border-radius: 100%; + + &.online { + background: #58d4c9; + } + + &.active { + background: #e4bc48; + } + + &.offline { + background: #ea5353; + } + + &.unknown { + background: #888; + } +} +</style> diff --git a/src/client/components/user-preview.vue b/src/client/components/user-preview.vue index b2b3358374..2ec81a5220 100644 --- a/src/client/components/user-preview.vue +++ b/src/client/components/user-preview.vue @@ -3,7 +3,7 @@ <div v-if="showing" class="fxxzrfni _popup _shadow" :style="{ top: top + 'px', left: left + 'px' }" @mouseover="() => { $emit('mouseover'); }" @mouseleave="() => { $emit('mouseleave'); }"> <div v-if="fetched" class="info"> <div class="banner" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl})` : ''"></div> - <MkAvatar class="avatar" :user="user" :disable-preview="true"/> + <MkAvatar class="avatar" :user="user" :disable-preview="true" :show-indicator="true"/> <div class="title"> <MkA class="name" :to="userPage(user)"><MkUserName :user="user" :nowrap="false"/></MkA> <p class="username"><MkAcct :user="user"/></p> diff --git a/src/client/components/user-select-dialog.vue b/src/client/components/user-select-dialog.vue index 05a43402a8..a243e182e8 100644 --- a/src/client/components/user-select-dialog.vue +++ b/src/client/components/user-select-dialog.vue @@ -17,7 +17,7 @@ <div class="tbhwbxda _section result" v-if="username != '' || host != ''" :class="{ hit: users.length > 0 }"> <div class="users" v-if="users.length > 0"> <div class="user" v-for="user in users" :key="user.id" :class="{ selected: selected && selected.id === user.id }" @click="selected = user" @dblclick="ok()"> - <MkAvatar :user="user" class="avatar"/> + <MkAvatar :user="user" class="avatar" :show-indicator="true"/> <div class="body"> <MkUserName :user="user" class="name"/> <MkAcct :user="user" class="acct"/> @@ -31,7 +31,7 @@ <div class="tbhwbxda _section recent" v-if="username == '' && host == ''"> <div class="users"> <div class="user" v-for="user in recentUsers" :key="user.id" :class="{ selected: selected && selected.id === user.id }" @click="selected = user" @dblclick="ok()"> - <MkAvatar :user="user" class="avatar"/> + <MkAvatar :user="user" class="avatar" :show-indicator="true"/> <div class="body"> <MkUserName :user="user" class="name"/> <MkAcct :user="user" class="acct"/> diff --git a/src/client/components/users-dialog.vue b/src/client/components/users-dialog.vue index 381aa60911..ebf867f702 100644 --- a/src/client/components/users-dialog.vue +++ b/src/client/components/users-dialog.vue @@ -7,7 +7,7 @@ <div class="users"> <MkA v-for="item in items" class="user" :key="item.id" :to="userPage(extract ? extract(item) : item)"> - <MkAvatar :user="extract ? extract(item) : item" class="avatar" :disable-link="true"/> + <MkAvatar :user="extract ? extract(item) : item" class="avatar" :disable-link="true" :show-indicator="true"/> <div class="body"> <MkUserName :user="extract ? extract(item) : item" class="name"/> <MkAcct :user="extract ? extract(item) : item" class="acct"/> |