From 2fdec0ce29c5b61f61640123db16d89a72e97de2 Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Fri, 16 May 2025 20:00:48 -0400 Subject: add option to put Translate button in the note toolbar --- .../frontend/src/components/SkNoteDetailed.vue | 23 +++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'packages/frontend/src/components/SkNoteDetailed.vue') diff --git a/packages/frontend/src/components/SkNoteDetailed.vue b/packages/frontend/src/components/SkNoteDetailed.vue index c499855a80..e2a9ba9a40 100644 --- a/packages/frontend/src/components/SkNoteDetailed.vue +++ b/packages/frontend/src/components/SkNoteDetailed.vue @@ -109,12 +109,13 @@ SPDX-License-Identifier: AGPL-3.0-only class="_selectable" /> RN: -
+
-
+
{{ i18n.tsx.translatedFrom({ x: translation.sourceLang }) }}:
+
{{ i18n.ts.translationFailed }}
{{ i18n.ts._animatedMFM.play }} {{ i18n.ts._animatedMFM.stop }} @@ -180,6 +181,9 @@ SPDX-License-Identifier: AGPL-3.0-only + @@ -272,7 +276,7 @@ import { reactionPicker } from '@/utility/reaction-picker.js'; import { extractUrlFromMfm } from '@/utility/extract-url-from-mfm.js'; import { $i } from '@/i.js'; import { i18n } from '@/i18n.js'; -import { getNoteClipMenu, getNoteMenu, getRenoteMenu } from '@/utility/get-note-menu.js'; +import { getNoteClipMenu, getNoteMenu, getRenoteMenu, translateNote } from '@/utility/get-note-menu.js'; import { getNoteVersionsMenu } from '@/utility/get-note-versions-menu.js'; import { checkAnimationFromMfm } from '@/utility/check-animated-mfm.js'; import { useNoteCapture } from '@/use/use-note-capture.js'; @@ -286,7 +290,7 @@ import MkPagination from '@/components/MkPagination.vue'; import MkReactionIcon from '@/components/MkReactionIcon.vue'; import MkButton from '@/components/MkButton.vue'; import { boostMenuItems, computeRenoteTooltip } from '@/utility/boost-quote.js'; -import { isEnabledUrlPreview } from '@/instance.js'; +import { instance, isEnabledUrlPreview } from '@/instance.js'; import { getAppearNote } from '@/utility/get-appear-note.js'; import { prefer } from '@/preferences.js'; import { getPluginHandlers } from '@/plugin.js'; @@ -343,7 +347,7 @@ const isMyRenote = $i && ($i.id === note.value.userId); const showContent = ref(prefer.s.uncollapseCW); const isDeleted = ref(false); const renoted = ref(false); -const translation = ref(null); +const translation = ref(null); const translating = ref(false); const parsed = appearNote.value.text ? mfm.parse(appearNote.value.text) : null; const urls = parsed ? extractUrlFromMfm(parsed).filter((url) => appearNote.value.renote?.url !== url && appearNote.value.renote?.uri !== url) : null; @@ -392,6 +396,11 @@ const keymap = { if (!prefer.s.showClipButtonInNoteFooter) return; clip(); }, + 't': () => { + if (prefer.s.showTranslationButtonInNoteFooter && $i?.policies.canUseTranslator && instance.translatorAvailable) { + translate(); + } + }, 'o': () => galleryEl.value?.openGallery(), 'v|enter': () => { if (appearNote.value.cw != null) { @@ -770,6 +779,10 @@ async function clip(): Promise { os.popupMenu(await getNoteClipMenu({ note: note.value, isDeleted }), clipButton.value).then(focus); } +async function translate() { + await translateNote(appearNote.value.id, translation, translating); +} + function showRenoteMenu(): void { if (!isMyRenote) return; pleaseLogin({ openOnRemote: pleaseLoginContext.value }); -- cgit v1.2.3-freya