From 19fe32bd7e416a6a408887e8cc5b03bc775c10a2 Mon Sep 17 00:00:00 2001
From: 1Step621 <86859447+1STEP621@users.noreply.github.com>
Date: Sat, 13 Jan 2024 15:25:11 +0900
Subject: Feat(frontend):
リアクション・ノート内絵文字・/about#emojisで絵文字詳細が見られるように
(#12984)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* リアクション・ノート内絵文字・/about#emojisで絵文字詳細が見られるように
* update CHANGELOG.md
* fix locale & type errors
* fix locale etc
* fix
* fix type
* lint fixes
* lint fixes(2)
---
.../src/components/MkCustomEmojiDetailedDialog.vue | 102 +++++++++++++++++++++
.../src/components/MkReactionsViewer.reaction.vue | 18 ++++
.../src/components/global/MkCustomEmoji.vue | 16 +++-
packages/frontend/src/pages/emojis.emoji.vue | 23 ++---
4 files changed, 145 insertions(+), 14 deletions(-)
create mode 100644 packages/frontend/src/components/MkCustomEmojiDetailedDialog.vue
(limited to 'packages/frontend/src')
diff --git a/packages/frontend/src/components/MkCustomEmojiDetailedDialog.vue b/packages/frontend/src/components/MkCustomEmojiDetailedDialog.vue
new file mode 100644
index 0000000000..c53bbca37c
--- /dev/null
+++ b/packages/frontend/src/components/MkCustomEmojiDetailedDialog.vue
@@ -0,0 +1,102 @@
+
+
+
+
+ :{{ emoji.name }}:
+
+
+
+
+
+
+
+ {{ i18n.ts.name }}
+ {{ emoji.name }}
+
+
+ {{ i18n.ts.tags }}
+
+ {{ i18n.ts.none }}
+
+
+ {{ alias }}
+
+
+
+
+
+ {{ i18n.ts.category }}
+ {{ emoji.category ?? i18n.ts.none }}
+
+
+ {{ i18n.ts.sensitive }}
+ {{ emoji.isSensitive ? i18n.ts.yes : i18n.ts.no }}
+
+
+ {{ i18n.ts.localOnly }}
+ {{ emoji.localOnly ? i18n.ts.yes : i18n.ts.no }}
+
+
+ {{ i18n.ts.license }}
+ {{ emoji.license ?? i18n.ts.none }}
+
+
+ {{ i18n.ts.emojiUrl }}
+
+ {{ emoji.url }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.vue b/packages/frontend/src/components/MkReactionsViewer.reaction.vue
index 5ca09fa822..330e54f08a 100644
--- a/packages/frontend/src/components/MkReactionsViewer.reaction.vue
+++ b/packages/frontend/src/components/MkReactionsViewer.reaction.vue
@@ -10,6 +10,7 @@ SPDX-License-Identifier: AGPL-3.0-only
class="_button"
:class="[$style.root, { [$style.reacted]: note.myReaction == reaction, [$style.canToggle]: canToggle, [$style.small]: defaultStore.state.reactionsDisplaySize === 'small', [$style.large]: defaultStore.state.reactionsDisplaySize === 'large' }]"
@click="toggleReaction()"
+ @contextmenu.prevent.stop="menu"
>
{{ count }}
@@ -21,6 +22,7 @@ import { computed, inject, onMounted, shallowRef, watch } from 'vue';
import * as Misskey from 'misskey-js';
import XDetails from '@/components/MkReactionsViewer.details.vue';
import MkReactionIcon from '@/components/MkReactionIcon.vue';
+import MkCustomEmojiDetailedDialog from './MkCustomEmojiDetailedDialog.vue';
import * as os from '@/os.js';
import { misskeyApi, misskeyApiGet } from '@/scripts/misskey-api.js';
import { useTooltip } from '@/scripts/use-tooltip.js';
@@ -98,6 +100,22 @@ async function toggleReaction() {
}
}
+async function menu(ev) {
+ if (!canToggle.value) return;
+ if (!props.reaction.includes(":")) return;
+ os.popupMenu([{
+ text: i18n.ts.info,
+ icon: 'ti ti-info-circle',
+ action: async () => {
+ os.popup(MkCustomEmojiDetailedDialog, {
+ emoji: await misskeyApiGet('emoji', {
+ name: props.reaction.replace(/:/g, '').replace(/@\./, ''),
+ }),
+ });
+ },
+ }], ev.currentTarget ?? ev.target);
+}
+
function anime() {
if (document.hidden) return;
if (!defaultStore.state.animation) return;
diff --git a/packages/frontend/src/components/global/MkCustomEmoji.vue b/packages/frontend/src/components/global/MkCustomEmoji.vue
index dd3fe77251..b384e8afcb 100644
--- a/packages/frontend/src/components/global/MkCustomEmoji.vue
+++ b/packages/frontend/src/components/global/MkCustomEmoji.vue
@@ -24,9 +24,11 @@ import { getProxiedImageUrl, getStaticImageUrl } from '@/scripts/media-proxy.js'
import { defaultStore } from '@/store.js';
import { customEmojisMap } from '@/custom-emojis.js';
import * as os from '@/os.js';
+import { misskeyApiGet } from '@/scripts/misskey-api.js';
import copyToClipboard from '@/scripts/copy-to-clipboard.js';
import * as sound from '@/scripts/sound.js';
import { i18n } from '@/i18n.js';
+import MkCustomEmojiDetailedDialog from '@/components/MkCustomEmojiDetailedDialog.vue';
const props = defineProps<{
name: string;
@@ -93,7 +95,19 @@ function onClick(ev: MouseEvent) {
react(`:${props.name}:`);
sound.playMisskeySfx('reaction');
},
- }] : [])], ev.currentTarget ?? ev.target);
+ }] : []), {
+ text: i18n.ts.info,
+ icon: 'ti ti-info-circle',
+ action: async () => {
+ os.popup(MkCustomEmojiDetailedDialog, {
+ emoji: await misskeyApiGet('emoji', {
+ name: customEmojiName.value,
+ }),
+ }, {
+ anchor: ev.target,
+ });
+ },
+ }], ev.currentTarget ?? ev.target);
}
}
diff --git a/packages/frontend/src/pages/emojis.emoji.vue b/packages/frontend/src/pages/emojis.emoji.vue
index ea6947bbba..faa7acdcb8 100644
--- a/packages/frontend/src/pages/emojis.emoji.vue
+++ b/packages/frontend/src/pages/emojis.emoji.vue
@@ -14,19 +14,15 @@ SPDX-License-Identifier: AGPL-3.0-only