diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2020-12-30 13:07:16 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2020-12-30 13:07:16 +0900 |
| commit | 10cb15b000d22e488521bbdf04bbce526e7b044f (patch) | |
| tree | 23fbde09de6e9071ee997eb8b703bbbaefc53946 /src/client/widgets | |
| parent | clean up (diff) | |
| download | misskey-10cb15b000d22e488521bbdf04bbce526e7b044f.tar.gz misskey-10cb15b000d22e488521bbdf04bbce526e7b044f.tar.bz2 misskey-10cb15b000d22e488521bbdf04bbce526e7b044f.zip | |
nanka iroiro
Diffstat (limited to 'src/client/widgets')
| -rw-r--r-- | src/client/widgets/index.ts | 2 | ||||
| -rw-r--r-- | src/client/widgets/online-users.vue | 67 |
2 files changed, 69 insertions, 0 deletions
diff --git a/src/client/widgets/index.ts b/src/client/widgets/index.ts index 2095a5be1b..2c99a73079 100644 --- a/src/client/widgets/index.ts +++ b/src/client/widgets/index.ts @@ -14,6 +14,7 @@ export default function(app: App) { app.component('MkwFederation', defineAsyncComponent(() => import('./federation.vue'))); app.component('MkwPostForm', defineAsyncComponent(() => import('./post-form.vue'))); app.component('MkwSlideshow', defineAsyncComponent(() => import('./slideshow.vue'))); + app.component('MkwOnlineUsers', defineAsyncComponent(() => import('./online-users.vue'))); app.component('MkwButton', defineAsyncComponent(() => import('./button.vue'))); } @@ -31,5 +32,6 @@ export const widgets = [ 'federation', 'postForm', 'slideshow', + 'onlineUsers', 'button', ]; diff --git a/src/client/widgets/online-users.vue b/src/client/widgets/online-users.vue new file mode 100644 index 0000000000..5b889f4816 --- /dev/null +++ b/src/client/widgets/online-users.vue @@ -0,0 +1,67 @@ +<template> +<div class="mkw-onlineUsers" :class="{ _panel: !props.transparent, pad: !props.transparent }"> + <I18n v-if="onlineUsersCount" :src="$ts.onlineUsersCount" text-tag="span" class="text"> + <template #n><b>{{ onlineUsersCount }}</b></template> + </I18n> +</div> +</template> + +<script lang="ts"> +import { defineComponent } from 'vue'; +import define from './define'; +import * as os from '@/os'; + +const widget = define({ + name: 'onlineUsers', + props: () => ({ + transparent: { + type: 'boolean', + default: true, + }, + }) +}); + +export default defineComponent({ + extends: widget, + data() { + return { + onlineUsersCount: null, + clock: null, + }; + }, + created() { + this.tick(); + this.clock = setInterval(this.tick, 1000 * 15); + }, + beforeUnmount() { + clearInterval(this.clock); + }, + methods: { + tick() { + os.api('get-online-users-count').then(res => { + this.onlineUsersCount = res.count; + }); + } + } +}); +</script> + +<style lang="scss" scoped> +.mkw-onlineUsers { + text-align: center; + + &.pad { + padding: 16px 0; + } + + > .text { + ::v-deep(b) { + color: #41b781; + } + + ::v-deep(span) { + opacity: 0.7; + } + } +} +</style> |