diff --git a/CHANGELOG.md b/CHANGELOG.md index 026903afe..5c49f4b5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - Fix: システムアカウントが削除できる問題を修正 ### Client +- Enhance: モデレーターがセンシティブ設定を変更する際に確認ダイアログを出すように - Fix: 削除して編集の削除タイミングを投稿後になるように `#14498` ### Server diff --git a/locales/index.d.ts b/locales/index.d.ts index dfdc5a3b3..947b57779 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -5262,6 +5262,14 @@ export interface Locale extends ILocale { * " {emoji} " をリアクションしますか? */ "reactAreYouSure": ParameterizedString<"emoji">; + /** + * このメディアをセンシティブとして設定しますか? + */ + "markAsSensitiveConfirm": string; + /** + * このメディアのセンシティブ指定を解除しますか? + */ + "unmarkAsSensitiveConfirm": string; "_accountSettings": { /** * コンテンツの表示にログインを必須にする diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index c3d6fa5a4..fbe4d9889 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1311,6 +1311,8 @@ federationSpecified: "このサーバーはホワイトリスト連合で運用 federationDisabled: "このサーバーは連合が無効化されています。他のサーバーのユーザーとやり取りすることはできません。" confirmOnReact: "リアクションする際に確認する" reactAreYouSure: "\" {emoji} \" をリアクションしますか?" +markAsSensitiveConfirm: "このメディアをセンシティブとして設定しますか?" +unmarkAsSensitiveConfirm: "このメディアのセンシティブ指定を解除しますか?" _accountSettings: requireSigninToViewContents: "コンテンツの表示にログインを必須にする" diff --git a/packages/frontend/src/components/MkMediaAudio.vue b/packages/frontend/src/components/MkMediaAudio.vue index 8cf88abaa..3d2795b37 100644 --- a/packages/frontend/src/components/MkMediaAudio.vue +++ b/packages/frontend/src/components/MkMediaAudio.vue @@ -259,7 +259,14 @@ function showMenu(ev: MouseEvent) { }); } -function toggleSensitive(file: Misskey.entities.DriveFile) { +async function toggleSensitive(file: Misskey.entities.DriveFile) { + const { canceled } = await os.confirm({ + type: 'warning', + text: file.isSensitive ? i18n.ts.unmarkAsSensitiveConfirm : i18n.ts.markAsSensitiveConfirm, + }); + + if (canceled) return; + os.apiWithDialog('drive/files/update', { fileId: file.id, isSensitive: !file.isSensitive, diff --git a/packages/frontend/src/components/MkMediaImage.vue b/packages/frontend/src/components/MkMediaImage.vue index 3645a4a66..8ab990b92 100644 --- a/packages/frontend/src/components/MkMediaImage.vue +++ b/packages/frontend/src/components/MkMediaImage.vue @@ -124,11 +124,21 @@ function showMenu(ev: MouseEvent) { if (iAmModerator) { menuItems.push({ - text: i18n.ts.markAsSensitive, + text: props.image.isSensitive ? i18n.ts.unmarkAsSensitive : i18n.ts.markAsSensitive, icon: 'ti ti-eye-exclamation', danger: true, - action: () => { - os.apiWithDialog('drive/files/update', { fileId: props.image.id, isSensitive: true }); + action: async () => { + const { canceled } = await os.confirm({ + type: 'warning', + text: props.image.isSensitive ? i18n.ts.unmarkAsSensitiveConfirm : i18n.ts.markAsSensitiveConfirm, + }); + + if (canceled) return; + + os.apiWithDialog('drive/files/update', { + fileId: props.image.id, + isSensitive: !props.image.isSensitive, + }); }, }); } diff --git a/packages/frontend/src/components/MkMediaVideo.vue b/packages/frontend/src/components/MkMediaVideo.vue index 26372e1a5..682da2271 100644 --- a/packages/frontend/src/components/MkMediaVideo.vue +++ b/packages/frontend/src/components/MkMediaVideo.vue @@ -284,7 +284,14 @@ function showMenu(ev: MouseEvent) { }); } -function toggleSensitive(file: Misskey.entities.DriveFile) { +async function toggleSensitive(file: Misskey.entities.DriveFile) { + const { canceled } = await os.confirm({ + type: 'warning', + text: file.isSensitive ? i18n.ts.unmarkAsSensitiveConfirm : i18n.ts.markAsSensitiveConfirm, + }); + + if (canceled) return; + os.apiWithDialog('drive/files/update', { fileId: file.id, isSensitive: !file.isSensitive, diff --git a/packages/frontend/src/pages/admin-file.vue b/packages/frontend/src/pages/admin-file.vue index 60f6be51d..7ccb996ff 100644 --- a/packages/frontend/src/pages/admin-file.vue +++ b/packages/frontend/src/pages/admin-file.vue @@ -36,8 +36,9 @@ SPDX-License-Identifier: AGPL-3.0-only +
- {{ i18n.ts.sensitive }} + {{ i18n.ts.sensitive }}
@@ -117,9 +118,21 @@ async function del() { }); } -async function toggleIsSensitive(v) { - await misskeyApi('drive/files/update', { fileId: props.fileId, isSensitive: v }); - isSensitive.value = v; +async function toggleSensitive() { + if (!file.value) return; + + const { canceled } = await os.confirm({ + type: 'warning', + text: isSensitive.value ? i18n.ts.unmarkAsSensitiveConfirm : i18n.ts.markAsSensitiveConfirm, + }); + + if (canceled) return; + isSensitive.value = !isSensitive.value; + + os.apiWithDialog('drive/files/update', { + fileId: file.value.id, + isSensitive: !file.value.isSensitive, + }); } const headerActions = computed(() => [{