upd: add support in frontend

This commit is contained in:
Insert5StarName 2023-09-22 22:33:18 +02:00
parent feec3c302b
commit dc10579950
7 changed files with 47 additions and 3 deletions

View file

@ -39,6 +39,8 @@ SPDX-License-Identifier: AGPL-3.0-only
</span> </span>
<span v-if="note.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['disableFederation']"><i class="ti ti-rocket-off"></i></span> <span v-if="note.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['disableFederation']"><i class="ti ti-rocket-off"></i></span>
<span v-if="note.channel" style="margin-left: 0.5em;" :title="note.channel.name"><i class="ti ti-device-tv"></i></span> <span v-if="note.channel" style="margin-left: 0.5em;" :title="note.channel.name"><i class="ti ti-device-tv"></i></span>
<span v-if="note.updatedAt" style="margin-left: 0.5em;" :title="'edited'"><i class="ti ti-pencil"></i></span>
</div> </div>
</div> </div>
<div v-if="renoteCollapsed" :class="$style.collapsedRenoteTarget"> <div v-if="renoteCollapsed" :class="$style.collapsedRenoteTarget">

View file

@ -58,6 +58,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<i v-else-if="appearNote.visibility === 'followers'" class="ti ti-lock"></i> <i v-else-if="appearNote.visibility === 'followers'" class="ti ti-lock"></i>
<i v-else-if="appearNote.visibility === 'specified'" ref="specified" class="ti ti-mail"></i> <i v-else-if="appearNote.visibility === 'specified'" ref="specified" class="ti ti-mail"></i>
</span> </span>
<span v-if="appearNote.updatedAt" style="margin-left: 0.5em;" :title="'Edited'"><i class="ti ti-pencil"></i></span>
<span v-if="appearNote.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['disableFederation']"><i class="ti ti-rocket-off"></i></span> <span v-if="appearNote.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['disableFederation']"><i class="ti ti-rocket-off"></i></span>
</div> </div>
</div> </div>

View file

@ -22,6 +22,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<i v-else-if="note.visibility === 'followers'" class="ti ti-lock"></i> <i v-else-if="note.visibility === 'followers'" class="ti ti-lock"></i>
<i v-else-if="note.visibility === 'specified'" ref="specified" class="ti ti-mail"></i> <i v-else-if="note.visibility === 'specified'" ref="specified" class="ti ti-mail"></i>
</span> </span>
<span v-if="note.updatedAt" style="margin-left: 0.5em;" :title="'Edited'"><i class="ti ti-pencil"></i></span>
<span v-if="note.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['disableFederation']"><i class="ti ti-rocket-off"></i></span> <span v-if="note.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['disableFederation']"><i class="ti ti-rocket-off"></i></span>
<span v-if="note.channel" style="margin-left: 0.5em;" :title="note.channel.name"><i class="ti ti-device-tv"></i></span> <span v-if="note.channel" style="margin-left: 0.5em;" :title="note.channel.name"><i class="ti ti-device-tv"></i></span>
</div> </div>

View file

@ -143,6 +143,7 @@ const props = withDefaults(defineProps<{
fixed?: boolean; fixed?: boolean;
autofocus?: boolean; autofocus?: boolean;
freezeAfterPosted?: boolean; freezeAfterPosted?: boolean;
editId?: Misskey.entities.Note["id"];
}>(), { }>(), {
initialVisibleUsers: () => [], initialVisibleUsers: () => [],
autofocus: true, autofocus: true,
@ -709,6 +710,7 @@ async function post(ev?: MouseEvent) {
visibility: visibility, visibility: visibility,
visibleUserIds: visibility === 'specified' ? visibleUsers.map(u => u.id) : undefined, visibleUserIds: visibility === 'specified' ? visibleUsers.map(u => u.id) : undefined,
reactionAcceptance, reactionAcceptance,
editId: props.editId ? props.editId : undefined,
}; };
if (withHashtags && hashtags && hashtags.trim() !== '') { if (withHashtags && hashtags && hashtags.trim() !== '') {
@ -731,7 +733,7 @@ async function post(ev?: MouseEvent) {
} }
posting = true; posting = true;
os.api('notes/create', postData, token).then(() => { os.api(postData.editId ? "notes/edit" : "notes/create", postData, token).then(() => {
if (props.freezeAfterPosted) { if (props.freezeAfterPosted) {
posted = true; posted = true;
} else { } else {
@ -755,7 +757,7 @@ async function post(ev?: MouseEvent) {
const text = postData.text ?? ''; const text = postData.text ?? '';
const lowerCase = text.toLowerCase(); const lowerCase = text.toLowerCase();
if ((lowerCase.includes('love') || lowerCase.includes('❤')) && lowerCase.includes('misskey')) { if ((lowerCase.includes('love') || lowerCase.includes('❤')) && lowerCase.includes('sharkey')) {
claimAchievement('iLoveMisskey'); claimAchievement('iLoveMisskey');
} }
if ([ if ([

View file

@ -30,6 +30,7 @@ const props = defineProps<{
instant?: boolean; instant?: boolean;
fixed?: boolean; fixed?: boolean;
autofocus?: boolean; autofocus?: boolean;
editId?: Misskey.entities.Note["id"];
}>(); }>();
const emit = defineEmits<{ const emit = defineEmits<{

View file

@ -171,6 +171,18 @@ export function getNoteMenu(props: {
} }
}); });
} }
function edit(): void {
//os.api('notes/delete', {
// noteId: appearNote.id,
//});
os.post({
initialNote: appearNote,
renote: appearNote.renote,
reply: appearNote.reply,
channel: appearNote.channel,
editId: appearNote.id,
});
}
function toggleFavorite(favorite: boolean): void { function toggleFavorite(favorite: boolean): void {
claimAchievement('noteFavorited1'); claimAchievement('noteFavorited1');
@ -353,10 +365,17 @@ export function getNoteMenu(props: {
...(appearNote.userId === $i.id || $i.isModerator || $i.isAdmin ? [ ...(appearNote.userId === $i.id || $i.isModerator || $i.isAdmin ? [
null, null,
appearNote.userId === $i.id ? { appearNote.userId === $i.id ? {
icon: 'ti ti-pencil',
text: i18n.ts.edit,
danger: true,
action: edit,
}: undefined,
{
icon: 'ti ti-edit', icon: 'ti ti-edit',
text: i18n.ts.deleteAndEdit, text: i18n.ts.deleteAndEdit,
danger: true,
action: delEdit, action: delEdit,
} : undefined, },
{ {
icon: 'ti ti-trash', icon: 'ti ti-trash',
text: i18n.ts.delete, text: i18n.ts.delete,

View file

@ -508,6 +508,24 @@ export type Endpoints = {
}; };
}; res: { createdNote: Note }; }; }; res: { createdNote: Note }; };
'notes/delete': { req: { noteId: Note['id']; }; res: null; }; 'notes/delete': { req: { noteId: Note['id']; }; res: null; };
'notes/edit': { req: {
visibility?: 'public' | 'home' | 'followers' | 'specified',
visibleUserIds?: User['id'][];
text?: null | string;
cw?: null | string;
viaMobile?: boolean;
localOnly?: boolean;
fileIds?: DriveFile['id'][];
replyId?: null | Note['id'];
renoteId?: null | Note['id'];
channelId?: null | Channel['id'];
poll?: null | {
choices: string[];
multiple?: boolean;
expiresAt?: null | number;
expiredAfter?: null | number;
};
}; res: { createdNote: Note }; };
'notes/favorites/create': { req: { noteId: Note['id']; }; res: null; }; 'notes/favorites/create': { req: { noteId: Note['id']; }; res: null; };
'notes/favorites/delete': { req: { noteId: Note['id']; }; res: null; }; 'notes/favorites/delete': { req: { noteId: Note['id']; }; res: null; };
'notes/featured': { req: TODO; res: Note[]; }; 'notes/featured': { req: TODO; res: Note[]; };