From fa17623fa8c548d482e086ade33d995a4882b98f Mon Sep 17 00:00:00 2001 From: syuilo <syuilotan@yahoo.co.jp> Date: Mon, 29 Oct 2018 21:32:38 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=A2=E3=83=90=E3=82=A4=E3=83=AB=E7=89=88?= =?UTF-8?q?=E3=81=8B=E3=82=89=E3=83=96=E3=83=AD=E3=83=83=E3=82=AF=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- locales/ja-JP.yml | 4 + .../app/mobile/views/components/index.ts | 2 - .../mobile/views/components/mute-button.vue | 79 ------------------- src/client/app/mobile/views/pages/user.vue | 75 +++++++++++++++--- 4 files changed, 69 insertions(+), 91 deletions(-) delete mode 100644 src/client/app/mobile/views/components/mute-button.vue diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 267c49e312..297d510dd4 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1534,6 +1534,10 @@ mobile/views/pages/user.vue: timeline: "タイムライン" media: "メディア" is-suspended: "このユーザーは凍結されています。" + mute: "ミュート" + unmute: "ミュート解除" + block: "ブロック" + unblobk: "ブロック解除" mobile/views/pages/user/home.vue: recent-notes: "最近の投稿" diff --git a/src/client/app/mobile/views/components/index.ts b/src/client/app/mobile/views/components/index.ts index 3e830f4e96..38c130ecbf 100644 --- a/src/client/app/mobile/views/components/index.ts +++ b/src/client/app/mobile/views/components/index.ts @@ -12,7 +12,6 @@ import noteCard from './note-card.vue'; import userCard from './user-card.vue'; import noteDetail from './note-detail.vue'; import followButton from './follow-button.vue'; -import muteButton from './mute-button.vue'; import friendsMaker from './friends-maker.vue'; import notification from './notification.vue'; import notifications from './notifications.vue'; @@ -37,7 +36,6 @@ Vue.component('mk-note-card', noteCard); Vue.component('mk-user-card', userCard); Vue.component('mk-note-detail', noteDetail); Vue.component('mk-follow-button', followButton); -Vue.component('mk-mute-button', muteButton); Vue.component('mk-friends-maker', friendsMaker); Vue.component('mk-notification', notification); Vue.component('mk-notifications', notifications); diff --git a/src/client/app/mobile/views/components/mute-button.vue b/src/client/app/mobile/views/components/mute-button.vue deleted file mode 100644 index 316fbda8f1..0000000000 --- a/src/client/app/mobile/views/components/mute-button.vue +++ /dev/null @@ -1,79 +0,0 @@ -<template> -<button - class="mk-mute-button" - :class="{ active: user.isMuted }" - @click="onClick"> - <span v-if="!user.isMuted">%fa:eye-slash% %i18n:@mute%</span> - <span v-else>%fa:eye% %i18n:@unmute%</span> -</button> -</template> - -<script lang="ts"> -import Vue from 'vue' -export default Vue.extend({ - props: { - user: { - type: Object, - required: true - } - }, - methods: { - onClick() { - if (!this.user.isMuted) { - this.mute(); - } else { - this.unmute(); - } - }, - mute() { - (this as any).api('mute/create', { userId: this.user.id}) - .then(() => { this.user.isMuted = true }) - .catch(() => { alert('error')}) - }, - unmute() { - (this as any).api('mute/delete', { userId: this.user.id }) - .then(() => { this.user.isMuted = false }) - .catch(() => { alert('error') }) - } - }, -}) -</script> - - -<style lang="stylus" scoped> - - -.mk-mute-button - display block - user-select none - cursor pointer - padding 0 16px - margin 0 - min-width 100px - line-height 36px - font-size 14px - font-weight bold - color var(--primary) - background transparent - outline none - border solid 1px var(--primary) - border-radius 36px - - &:hover - background var(--primaryAlpha01) - - &:active - background var(--primaryAlpha02) - - &.active - color var(--primaryForeground) - background var(--primary) - - &:hover - background var(--primaryLighten10) - border-color var(--primaryLighten10) - &:active - background var(--primaryDarken10) - border-color var(--primaryDarken10) - -</style> diff --git a/src/client/app/mobile/views/pages/user.vue b/src/client/app/mobile/views/pages/user.vue index 95ef387d96..aa8e688985 100644 --- a/src/client/app/mobile/views/pages/user.vue +++ b/src/client/app/mobile/views/pages/user.vue @@ -11,7 +11,7 @@ <a class="avatar"> <img :src="user.avatarUrl" alt="avatar"/> </a> - <mk-mute-button v-if="$store.getters.isSignedIn && $store.state.i.id != user.id" :user="user"/> + <button class="menu" ref="menu" @click="menu">%fa:ellipsis-h%</button> <mk-follow-button v-if="$store.getters.isSignedIn && $store.state.i.id != user.id" :user="user"/> </div> <div class="title"> @@ -67,6 +67,7 @@ import Vue from 'vue'; import * as age from 's-age'; import parseAcct from '../../../../../misc/acct/parse'; import Progress from '../../../common/scripts/loading'; +import Menu from '../../../common/views/components/menu.vue'; import XHome from './user/home.vue'; export default Vue.extend({ @@ -109,7 +110,61 @@ export default Vue.extend({ Progress.done(); document.title = `${Vue.filter('userName')(this.user)} | ${(this as any).os.instanceName}`; }); - } + }, + + menu() { + let menu = [{ + icon: this.user.isMuted ? '%fa:eye%' : '%fa:eye-slash%', + text: this.user.isMuted ? '%i18n:@unmute%' : '%i18n:@mute%', + action: () => { + if (this.user.isMuted) { + (this as any).api('mute/delete', { + userId: this.user.id + }).then(() => { + this.user.isMuted = false; + }, () => { + alert('error'); + }); + } else { + (this as any).api('mute/create', { + userId: this.user.id + }).then(() => { + this.user.isMuted = true; + }, () => { + alert('error'); + }); + } + } + }, { + icon: this.user.isBlocking ? '%fa:user%' : '%fa:user-slash%', + text: this.user.isBlocking ? '%i18n:@unblock%' : '%i18n:@block%', + action: () => { + if (this.user.isBlocking) { + (this as any).api('blocking/delete', { + userId: this.user.id + }).then(() => { + this.user.isBlocking = false; + }, () => { + alert('error'); + }); + } else { + (this as any).api('blocking/create', { + userId: this.user.id + }).then(() => { + this.user.isBlocking = true; + }, () => { + alert('error'); + }); + } + } + }]; + + this.os.new(Menu, { + source: this.$refs.menu, + compact: true, + items: menu + }); + }, } }); </script> @@ -156,14 +211,10 @@ main max-width 600px > .top - &:after - content '' - display block - clear both + display flex > .avatar display block - float left width 25% height 40px @@ -183,11 +234,15 @@ main border 4px solid $bg border-radius 12px - > .mk-mute-button - float right + > .menu + margin 0 0 0 auto + padding 8px + margin-right 8px + font-size 18px + color var(--text) > .mk-follow-button - float right + margin 0 > .title margin 8px 0