Merge branch 'develop' into pick-renote-sensitive-home-by-default
This commit is contained in:
commit
6ee1221c17
|
@ -47,6 +47,7 @@ jobs:
|
||||||
|
|
||||||
e2e:
|
e2e:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
if: false
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
### Client
|
### Client
|
||||||
- センシティブチャンネルのNoteのReNoteはデフォルトでHome TLに流れるようになりました
|
- センシティブチャンネルのNoteのReNoteはデフォルトでHome TLに流れるようになりました
|
||||||
|
- Enhance: Renote自体を通報できるように
|
||||||
|
|
||||||
### Server
|
### Server
|
||||||
- 通報のメール通知を無効化するオプションを追加
|
- 通報のメール通知を無効化するオプションを追加
|
||||||
|
|
|
@ -656,6 +656,7 @@ export interface Locale {
|
||||||
"sample": string;
|
"sample": string;
|
||||||
"abuseReports": string;
|
"abuseReports": string;
|
||||||
"reportAbuse": string;
|
"reportAbuse": string;
|
||||||
|
"reportAbuseRenote": string;
|
||||||
"reportAbuseOf": string;
|
"reportAbuseOf": string;
|
||||||
"fillAbuseReportDescription": string;
|
"fillAbuseReportDescription": string;
|
||||||
"abuseReported": string;
|
"abuseReported": string;
|
||||||
|
|
|
@ -653,6 +653,7 @@ behavior: "動作"
|
||||||
sample: "サンプル"
|
sample: "サンプル"
|
||||||
abuseReports: "通報"
|
abuseReports: "通報"
|
||||||
reportAbuse: "通報"
|
reportAbuse: "通報"
|
||||||
|
reportAbuseRenote: "Renoteを通報"
|
||||||
reportAbuseOf: "{name}を通報する"
|
reportAbuseOf: "{name}を通報する"
|
||||||
fillAbuseReportDescription: "通報理由の詳細を記入してください。対象のノートがある場合はそのURLも記入してください。"
|
fillAbuseReportDescription: "通報理由の詳細を記入してください。対象のノートがある場合はそのURLも記入してください。"
|
||||||
abuseReported: "内容が送信されました。ご報告ありがとうございました。"
|
abuseReported: "内容が送信されました。ご報告ありがとうございました。"
|
||||||
|
|
|
@ -23,10 +23,14 @@
|
||||||
</template>
|
</template>
|
||||||
</I18n>
|
</I18n>
|
||||||
<div :class="$style.renoteInfo">
|
<div :class="$style.renoteInfo">
|
||||||
<button ref="renoteTime" :class="$style.renoteTime" class="_button" @click="showRenoteMenu()">
|
<span :class="$style.renoteTime">
|
||||||
<i v-if="isMyRenote" class="ti ti-dots" :class="$style.renoteMenu"></i>
|
<button ref="renoteTime" class="_button">
|
||||||
<MkTime :time="note.createdAt"/>
|
<i class="ti ti-dots" :class="$style.renoteMenu" @click="showRenoteMenu()"></i>
|
||||||
</button>
|
</button>
|
||||||
|
<MkA :to="notePage(note)">
|
||||||
|
<MkTime :time="note.createdAt"/>
|
||||||
|
</MkA>
|
||||||
|
</span>
|
||||||
<span v-if="note.visibility !== 'public'" style="margin-left: 0.5em;" :title="i18n.ts._visibility[note.visibility]">
|
<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-if="note.visibility === 'home'" class="ti ti-home"></i>
|
||||||
<i v-else-if="note.visibility === 'followers'" class="ti ti-lock"></i>
|
<i v-else-if="note.visibility === 'followers'" class="ti ti-lock"></i>
|
||||||
|
@ -156,7 +160,7 @@ import { reactionPicker } from '@/scripts/reaction-picker';
|
||||||
import { extractUrlFromMfm } from '@/scripts/extract-url-from-mfm';
|
import { extractUrlFromMfm } from '@/scripts/extract-url-from-mfm';
|
||||||
import { $i } from '@/account';
|
import { $i } from '@/account';
|
||||||
import { i18n } from '@/i18n';
|
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 { useNoteCapture } from '@/scripts/use-note-capture';
|
||||||
import { deepClone } from '@/scripts/clone';
|
import { deepClone } from '@/scripts/clone';
|
||||||
import { useTooltip } from '@/scripts/use-tooltip';
|
import { useTooltip } from '@/scripts/use-tooltip';
|
||||||
|
@ -166,6 +170,7 @@ import { MenuItem } from '@/types/menu';
|
||||||
import MkRippleEffect from '@/components/MkRippleEffect.vue';
|
import MkRippleEffect from '@/components/MkRippleEffect.vue';
|
||||||
import { showMovedDialog } from '@/scripts/show-moved-dialog';
|
import { showMovedDialog } from '@/scripts/show-moved-dialog';
|
||||||
import { shouldCollapsed } from '@/scripts/collapsed';
|
import { shouldCollapsed } from '@/scripts/collapsed';
|
||||||
|
import { notePage } from '@/filters/note';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
note: misskey.entities.Note;
|
note: misskey.entities.Note;
|
||||||
|
@ -424,21 +429,26 @@ async function clip() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function showRenoteMenu(viaKeyboard = false): void {
|
function showRenoteMenu(viaKeyboard = false): void {
|
||||||
if (!isMyRenote) return;
|
if (isMyRenote) {
|
||||||
pleaseLogin();
|
pleaseLogin();
|
||||||
os.popupMenu([{
|
os.popupMenu([{
|
||||||
text: i18n.ts.unrenote,
|
text: i18n.ts.unrenote,
|
||||||
icon: 'ti ti-trash',
|
icon: 'ti ti-trash',
|
||||||
danger: true,
|
danger: true,
|
||||||
action: () => {
|
action: () => {
|
||||||
os.api('notes/delete', {
|
os.api('notes/delete', {
|
||||||
noteId: note.id,
|
noteId: note.id,
|
||||||
});
|
});
|
||||||
isDeleted.value = true;
|
isDeleted.value = true;
|
||||||
},
|
},
|
||||||
}], renoteTime.value, {
|
}], renoteTime.value, {
|
||||||
viaKeyboard: viaKeyboard,
|
viaKeyboard: viaKeyboard,
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
os.popupMenu([getAbuseNoteMenu(note, i18n.ts.reportAbuseRenote)], renoteTime.value, {
|
||||||
|
viaKeyboard: viaKeyboard,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function focus() {
|
function focus() {
|
||||||
|
|
|
@ -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: {
|
export function getNoteMenu(props: {
|
||||||
note: misskey.entities.Note;
|
note: misskey.entities.Note;
|
||||||
menuButton: Ref<HTMLElement>;
|
menuButton: Ref<HTMLElement>;
|
||||||
|
@ -332,19 +346,11 @@ export function getNoteMenu(props: {
|
||||||
}]
|
}]
|
||||||
: []
|
: []
|
||||||
),*/
|
),*/
|
||||||
...(appearNote.userId !== $i.id ? [
|
...(appearNote.userId !== $i.id || (isRenote && props.note.userId !== $i.id) ? [
|
||||||
null,
|
null,
|
||||||
{
|
appearNote.userId !== $i.id ? getAbuseNoteMenu(appearNote, i18n.ts.reportAbuse) : undefined,
|
||||||
icon: 'ti ti-exclamation-circle',
|
isRenote && props.note.userId !== $i.id ? getAbuseNoteMenu(props.note, i18n.ts.reportAbuseRenote) : undefined,
|
||||||
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 || $i.isModerator || $i.isAdmin ? [
|
...(appearNote.userId === $i.id || $i.isModerator || $i.isAdmin ? [
|
||||||
|
|
Loading…
Reference in New Issue