diff --git a/.github/workflows/test-frontend.yml b/.github/workflows/test-frontend.yml
index eef68aa0d1..b92bd18ec8 100644
--- a/.github/workflows/test-frontend.yml
+++ b/.github/workflows/test-frontend.yml
@@ -47,6 +47,7 @@ jobs:
e2e:
runs-on: ubuntu-latest
+ if: false
strategy:
fail-fast: false
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6f851e4e5f..9f9c6a6975 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -21,6 +21,7 @@
### Client
- センシティブチャンネルのNoteのReNoteはデフォルトでHome TLに流れるようになりました
+- Enhance: Renote自体を通報できるように
### Server
- 通報のメール通知を無効化するオプションを追加
diff --git a/locales/index.d.ts b/locales/index.d.ts
index 8efbb6175e..6272b2eb3e 100644
--- a/locales/index.d.ts
+++ b/locales/index.d.ts
@@ -656,6 +656,7 @@ export interface Locale {
"sample": string;
"abuseReports": string;
"reportAbuse": string;
+ "reportAbuseRenote": string;
"reportAbuseOf": string;
"fillAbuseReportDescription": string;
"abuseReported": string;
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index af7eaad474..9070d82a09 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -653,6 +653,7 @@ behavior: "動作"
sample: "サンプル"
abuseReports: "通報"
reportAbuse: "通報"
+reportAbuseRenote: "Renoteを通報"
reportAbuseOf: "{name}を通報する"
fillAbuseReportDescription: "通報理由の詳細を記入してください。対象のノートがある場合はそのURLも記入してください。"
abuseReported: "内容が送信されました。ご報告ありがとうございました。"
diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue
index 59817dced5..1c4d2b4c4c 100644
--- a/packages/frontend/src/components/MkNote.vue
+++ b/packages/frontend/src/components/MkNote.vue
@@ -23,10 +23,14 @@
-
+
+
+
+
+
+
@@ -156,7 +160,7 @@ import { reactionPicker } from '@/scripts/reaction-picker';
import { extractUrlFromMfm } from '@/scripts/extract-url-from-mfm';
import { $i } from '@/account';
import { i18n } from '@/i18n';
-import { getNoteClipMenu, getNoteMenu } from '@/scripts/get-note-menu';
+import { getAbuseNoteMenu, getNoteClipMenu, getNoteMenu } from '@/scripts/get-note-menu';
import { useNoteCapture } from '@/scripts/use-note-capture';
import { deepClone } from '@/scripts/clone';
import { useTooltip } from '@/scripts/use-tooltip';
@@ -166,6 +170,7 @@ import { MenuItem } from '@/types/menu';
import MkRippleEffect from '@/components/MkRippleEffect.vue';
import { showMovedDialog } from '@/scripts/show-moved-dialog';
import { shouldCollapsed } from '@/scripts/collapsed';
+import { notePage } from '@/filters/note';
const props = defineProps<{
note: misskey.entities.Note;
@@ -424,21 +429,26 @@ async function clip() {
}
function showRenoteMenu(viaKeyboard = false): void {
- if (!isMyRenote) return;
- pleaseLogin();
- os.popupMenu([{
- text: i18n.ts.unrenote,
- icon: 'ti ti-trash',
- danger: true,
- action: () => {
- os.api('notes/delete', {
- noteId: note.id,
- });
- isDeleted.value = true;
- },
- }], renoteTime.value, {
- viaKeyboard: viaKeyboard,
- });
+ if (isMyRenote) {
+ pleaseLogin();
+ os.popupMenu([{
+ text: i18n.ts.unrenote,
+ icon: 'ti ti-trash',
+ danger: true,
+ action: () => {
+ os.api('notes/delete', {
+ noteId: note.id,
+ });
+ isDeleted.value = true;
+ },
+ }], renoteTime.value, {
+ viaKeyboard: viaKeyboard,
+ });
+ } else {
+ os.popupMenu([getAbuseNoteMenu(note, i18n.ts.reportAbuseRenote)], renoteTime.value, {
+ viaKeyboard: viaKeyboard,
+ });
+ }
}
function focus() {
diff --git a/packages/frontend/src/scripts/get-note-menu.ts b/packages/frontend/src/scripts/get-note-menu.ts
index 960f26ca67..6b7b4714ef 100644
--- a/packages/frontend/src/scripts/get-note-menu.ts
+++ b/packages/frontend/src/scripts/get-note-menu.ts
@@ -86,6 +86,20 @@ export async function getNoteClipMenu(props: {
}];
}
+export function getAbuseNoteMenu(note: misskey.entities.Note, text: string): MenuItem {
+ return {
+ icon: 'ti ti-exclamation-circle',
+ text,
+ action: (): void => {
+ const u = note.url ?? note.uri ?? `${url}/notes/${note.id}`;
+ os.popup(defineAsyncComponent(() => import('@/components/MkAbuseReportWindow.vue')), {
+ user: note.user,
+ initialComment: `Note: ${u}\n-----\n`,
+ }, {}, 'closed');
+ },
+ };
+}
+
export function getNoteMenu(props: {
note: misskey.entities.Note;
menuButton: Ref;
@@ -332,19 +346,11 @@ export function getNoteMenu(props: {
}]
: []
),*/
- ...(appearNote.userId !== $i.id ? [
+ ...(appearNote.userId !== $i.id || (isRenote && props.note.userId !== $i.id) ? [
null,
- {
- icon: 'ti ti-exclamation-circle',
- text: i18n.ts.reportAbuse,
- action: () => {
- const u = appearNote.url ?? appearNote.uri ?? `${url}/notes/${appearNote.id}`;
- os.popup(defineAsyncComponent(() => import('@/components/MkAbuseReportWindow.vue')), {
- user: appearNote.user,
- initialComment: `Note: ${u}\n-----\n`,
- }, {}, 'closed');
- },
- }]
+ appearNote.userId !== $i.id ? getAbuseNoteMenu(appearNote, i18n.ts.reportAbuse) : undefined,
+ isRenote && props.note.userId !== $i.id ? getAbuseNoteMenu(props.note, i18n.ts.reportAbuseRenote) : undefined,
+ ]
: []
),
...(appearNote.userId === $i.id || $i.isModerator || $i.isAdmin ? [