From 49f3090edd63a201e6093e1d1efeac362bf86d55 Mon Sep 17 00:00:00 2001 From: syuilo <Syuilotan@yahoo.co.jp> Date: Sun, 8 Jan 2023 10:48:44 +0900 Subject: [PATCH] tweak note componsnt --- packages/frontend/src/components/MkNote.vue | 12 +++-- .../src/components/MkNoteDetailed.vue | 15 ++++-- .../frontend/src/components/MkNoteHeader.vue | 11 +++-- .../src/components/MkSubNoteContent.vue | 2 +- .../frontend/src/components/MkVisibility.vue | 48 ------------------- 5 files changed, 29 insertions(+), 59 deletions(-) delete mode 100644 packages/frontend/src/components/MkVisibility.vue diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue index 3aa9e516f0..5be8df5285 100644 --- a/packages/frontend/src/components/MkNote.vue +++ b/packages/frontend/src/components/MkNote.vue @@ -13,7 +13,7 @@ <div v-if="appearNote._prId_" class="info"><i class="fas fa-bullhorn"></i> {{ i18n.ts.promotion }}<button class="_textButton hide" @click="readPromo()">{{ i18n.ts.hideThisNote }} <i class="ti ti-x"></i></button></div> <div v-if="appearNote._featuredId_" class="info"><i class="ti ti-bolt"></i> {{ i18n.ts.featured }}</div> <div v-if="isRenote" class="renote"> - <MkAvatar class="avatar" :user="note.user"/> + <MkAvatar v-once class="avatar" :user="note.user"/> <i class="ti ti-repeat"></i> <I18n :src="i18n.ts.renotedBy" tag="span"> <template #user> @@ -27,11 +27,16 @@ <i v-if="isMyRenote" class="ti ti-dots dropdownIcon"></i> <MkTime :time="note.createdAt"/> </button> - <MkVisibility :note="note"/> + <span v-if="note.visibility !== 'public'" style="{ margin-left: 0.5em; }" :title="i18n.ts._visibility[note.visibility]"> + <i v-if="note.visibility === 'home'" class="ti ti-home"></i> + <i v-else-if="note.visibility === 'followers'" class="ti ti-lock-open"></i> + <i v-else-if="note.visibility === 'specified'" ref="specified" class="ti ti-mail"></i> + </span> + <span v-if="note.localOnly" style="{ margin-left: 0.5em; }" :title="i18n.ts._visibility['localOnly']"><i class="ti ti-world-off"></i></span> </div> </div> <article class="article" @contextmenu.stop="onContextmenu"> - <MkAvatar class="avatar" :user="appearNote.user"/> + <MkAvatar v-once class="avatar" :user="appearNote.user"/> <div class="main"> <MkNoteHeader class="header" :note="appearNote" :mini="true"/> <MkInstanceTicker v-if="showTicker" class="ticker" :instance="appearNote.user.instance"/> @@ -126,7 +131,6 @@ import MkPoll from '@/components/MkPoll.vue'; import MkUsersTooltip from '@/components/MkUsersTooltip.vue'; import MkUrlPreview from '@/components/MkUrlPreview.vue'; import MkInstanceTicker from '@/components/MkInstanceTicker.vue'; -import MkVisibility from '@/components/MkVisibility.vue'; import { pleaseLogin } from '@/scripts/please-login'; import { focusPrev, focusNext } from '@/scripts/focus'; import { checkWordMute } from '@/scripts/check-word-mute'; diff --git a/packages/frontend/src/components/MkNoteDetailed.vue b/packages/frontend/src/components/MkNoteDetailed.vue index 2d2830f08c..d803253b2f 100644 --- a/packages/frontend/src/components/MkNoteDetailed.vue +++ b/packages/frontend/src/components/MkNoteDetailed.vue @@ -25,7 +25,12 @@ <i v-if="isMyRenote" class="ti ti-dots dropdownIcon"></i> <MkTime :time="note.createdAt"/> </button> - <MkVisibility :note="note"/> + <span v-if="note.visibility !== 'public'" style="{ margin-left: 0.5em; }" :title="i18n.ts._visibility[note.visibility]"> + <i v-if="note.visibility === 'home'" class="ti ti-home"></i> + <i v-else-if="note.visibility === 'followers'" class="ti ti-lock-open"></i> + <i v-else-if="note.visibility === 'specified'" ref="specified" class="ti ti-mail"></i> + </span> + <span v-if="note.localOnly" style="{ margin-left: 0.5em; }" :title="i18n.ts._visibility['localOnly']"><i class="ti ti-world-off"></i></span> </div> </div> <article class="article" @contextmenu.stop="onContextmenu"> @@ -38,7 +43,12 @@ </MkA> <span v-if="appearNote.user.isBot" class="is-bot">bot</span> <div class="info"> - <MkVisibility :note="appearNote"/> + <span v-if="appearNote.visibility !== 'public'" style="{ margin-left: 0.5em; }" :title="i18n.ts._visibility[appearNote.visibility]"> + <i v-if="appearNote.visibility === 'home'" class="ti ti-home"></i> + <i v-else-if="appearNote.visibility === 'followers'" class="ti ti-lock-open"></i> + <i v-else-if="appearNote.visibility === 'specified'" ref="specified" class="ti ti-mail"></i> + </span> + <span v-if="appearNote.localOnly" style="{ margin-left: 0.5em; }" :title="i18n.ts._visibility['localOnly']"><i class="ti ti-world-off"></i></span> </div> </div> <div class="username"><MkAcct :user="appearNote.user"/></div> @@ -136,7 +146,6 @@ import MkPoll from '@/components/MkPoll.vue'; import MkUsersTooltip from '@/components/MkUsersTooltip.vue'; import MkUrlPreview from '@/components/MkUrlPreview.vue'; import MkInstanceTicker from '@/components/MkInstanceTicker.vue'; -import MkVisibility from '@/components/MkVisibility.vue'; import { pleaseLogin } from '@/scripts/please-login'; import { checkWordMute } from '@/scripts/check-word-mute'; import { userPage } from '@/filters/user'; diff --git a/packages/frontend/src/components/MkNoteHeader.vue b/packages/frontend/src/components/MkNoteHeader.vue index 333c3ddbd9..61d07f85e5 100644 --- a/packages/frontend/src/components/MkNoteHeader.vue +++ b/packages/frontend/src/components/MkNoteHeader.vue @@ -1,6 +1,6 @@ <template> <header class="kkwtjztg"> - <MkA v-user-preview="note.user.id" class="name" :to="userPage(note.user)"> + <MkA v-once v-user-preview="note.user.id" class="name" :to="userPage(note.user)"> <MkUserName :user="note.user"/> </MkA> <div v-if="note.user.isBot" class="is-bot">bot</div> @@ -9,7 +9,12 @@ <MkA class="created-at" :to="notePage(note)"> <MkTime :time="note.createdAt"/> </MkA> - <MkVisibility :note="note"/> + <span v-if="note.visibility !== 'public'" style="{ margin-left: 0.5em; }" :title="i18n.ts._visibility[note.visibility]"> + <i v-if="note.visibility === 'home'" class="ti ti-home"></i> + <i v-else-if="note.visibility === 'followers'" class="ti ti-lock-open"></i> + <i v-else-if="note.visibility === 'specified'" ref="specified" class="ti ti-mail"></i> + </span> + <span v-if="note.localOnly" style="{ margin-left: 0.5em; }" :title="i18n.ts._visibility['localOnly']"><i class="ti ti-world-off"></i></span> </div> </header> </template> @@ -17,7 +22,7 @@ <script lang="ts" setup> import { } from 'vue'; import * as misskey from 'misskey-js'; -import MkVisibility from '@/components/MkVisibility.vue'; +import { i18n } from '@/i18n'; import { notePage } from '@/filters/note'; import { userPage } from '@/filters/user'; diff --git a/packages/frontend/src/components/MkSubNoteContent.vue b/packages/frontend/src/components/MkSubNoteContent.vue index 55b04e6686..79eb9ccf45 100644 --- a/packages/frontend/src/components/MkSubNoteContent.vue +++ b/packages/frontend/src/components/MkSubNoteContent.vue @@ -4,7 +4,7 @@ <span v-if="note.isHidden" style="opacity: 0.5">({{ i18n.ts.private }})</span> <span v-if="note.deletedAt" style="opacity: 0.5">({{ i18n.ts.deleted }})</span> <MkA v-if="note.replyId" class="reply" :to="`/notes/${note.replyId}`"><i class="ti ti-arrow-back-up"></i></MkA> - <Mfm v-if="note.text" :text="note.text" :author="note.user" :i="$i"/> + <Mfm v-if="note.text" v-once :text="note.text" :author="note.user" :i="$i"/> <MkA v-if="note.renoteId" class="rp" :to="`/notes/${note.renoteId}`">RN: ...</MkA> </div> <details v-if="note.files.length > 0"> diff --git a/packages/frontend/src/components/MkVisibility.vue b/packages/frontend/src/components/MkVisibility.vue deleted file mode 100644 index 2becb69d5a..0000000000 --- a/packages/frontend/src/components/MkVisibility.vue +++ /dev/null @@ -1,48 +0,0 @@ -<template> -<span v-if="note.visibility !== 'public'" :class="$style.visibility" :title="i18n.ts._visibility[note.visibility]"> - <i v-if="note.visibility === 'home'" class="ti ti-home"></i> - <i v-else-if="note.visibility === 'followers'" class="ti ti-lock-open"></i> - <i v-else-if="note.visibility === 'specified'" ref="specified" class="ti ti-mail"></i> -</span> -<span v-if="note.localOnly" :class="$style.localOnly" :title="i18n.ts._visibility['localOnly']"><i class="ti ti-world-off"></i></span> -</template> - -<script lang="ts" setup> -import { ref } from 'vue'; -import XDetails from '@/components/MkUsersTooltip.vue'; -import * as os from '@/os'; -import { useTooltip } from '@/scripts/use-tooltip'; -import { i18n } from '@/i18n'; - -const props = defineProps<{ - note: { - visibility: string; - localOnly?: boolean; - visibleUserIds?: string[]; - }, -}>(); - -const specified = $shallowRef<HTMLElement>(); - -if (props.note.visibility === 'specified') { - useTooltip($$(specified), async (showing) => { - const users = await os.api('users/show', { - userIds: props.note.visibleUserIds, - limit: 10, - }); - - os.popup(XDetails, { - showing, - users, - count: props.note.visibleUserIds.length, - targetElement: specified, - }, {}, 'closed'); - }); -} -</script> - -<style lang="scss" module> -.visibility, .localOnly { - margin-left: 0.5em; -} -</style>