@@ -106,10 +106,10 @@ SPDX-License-Identifier: AGPL-3.0-only
106
106
<MkTime :time="appearNote.createdAt" mode="detail" colored/>
107
107
</MkA>
108
108
</div>
109
- <MkReactionsViewer ref="reactionsViewer" :note="appearNote"/>
109
+ <MkReactionsViewer v-if="appearNote.reactionAcceptance !== 'likeOnly'" ref="reactionsViewer" :note="appearNote"/>
110
110
<button class="_button" :class="$style.noteFooterButton" @click="reply()">
111
111
<i class="ti ti-arrow-back-up"></i>
112
- <p v-if="appearNote.repliesCount > 0" :class="$style.noteFooterButtonCount">{{ appearNote.repliesCount }}</p>
112
+ <p v-if="appearNote.repliesCount > 0" :class="$style.noteFooterButtonCount">{{ number( appearNote.repliesCount) }}</p>
113
113
</button>
114
114
<button
115
115
v-if="canRenote"
@@ -119,17 +119,17 @@ SPDX-License-Identifier: AGPL-3.0-only
119
119
@mousedown="renote()"
120
120
>
121
121
<i class="ti ti-repeat"></i>
122
- <p v-if="appearNote.renoteCount > 0" :class="$style.noteFooterButtonCount">{{ appearNote.renoteCount }}</p>
122
+ <p v-if="appearNote.renoteCount > 0" :class="$style.noteFooterButtonCount">{{ number( appearNote.renoteCount) }}</p>
123
123
</button>
124
124
<button v-else class="_button" :class="$style.noteFooterButton" disabled>
125
125
<i class="ti ti-ban"></i>
126
126
</button>
127
- <button v-if="appearNote.myReaction == null" ref="reactButton" :class="$style.noteFooterButton" class="_button" @mousedown="react()">
128
- <i v-if="appearNote.reactionAcceptance === 'likeOnly'" class="ti ti-heart"></i>
127
+ <button ref="reactButton" :class="$style.noteFooterButton" class="_button" @click="toggleReact()">
128
+ <i v-if="appearNote.reactionAcceptance === 'likeOnly' && appearNote.myReaction != null" class="ti ti-heart-filled" style="color: var(--eventReactionHeart);"></i>
129
+ <i v-else-if="appearNote.myReaction != null" class="ti ti-minus" style="color: var(--accent);"></i>
130
+ <i v-else-if="appearNote.reactionAcceptance === 'likeOnly'" class="ti ti-heart"></i>
129
131
<i v-else class="ti ti-plus"></i>
130
- </button>
131
- <button v-if="appearNote.myReaction != null" ref="reactButton" class="_button" :class="[$style.noteFooterButton, $style.reacted]" @click="undoReact(appearNote)">
132
- <i class="ti ti-minus"></i>
132
+ <p v-if="appearNote.reactionCount > 0" :class="$style.noteFooterButtonCount">{{ number(appearNote.reactionCount) }}</p>
133
133
</button>
134
134
<button v-if="defaultStore.state.showClipButtonInNoteFooter" ref="clipButton" class="_button" :class="$style.noteFooterButton" @mousedown="clip()">
135
135
<i class="ti ti-paperclip"></i>
@@ -209,6 +209,7 @@ import { pleaseLogin } from '@/scripts/please-login.js';
209
209
import { checkWordMute } from '@/scripts/check-word-mute.js';
210
210
import { userPage } from '@/filters/user.js';
211
211
import { notePage } from '@/filters/note.js';
212
+ import number from '@/filters/number.js';
212
213
import * as os from '@/os.js';
213
214
import { misskeyApi } from '@/scripts/misskey-api.js';
214
215
import * as sound from '@/scripts/sound.js';
@@ -401,14 +402,22 @@ function react(viaKeyboard = false): void {
401
402
}
402
403
}
403
404
404
- function undoReact(note ): void {
405
- const oldReaction = note .myReaction;
405
+ function undoReact(targetNote: Misskey.entities.Note ): void {
406
+ const oldReaction = targetNote .myReaction;
406
407
if (!oldReaction) return;
407
408
misskeyApi('notes/reactions/delete', {
408
- noteId: note .id,
409
+ noteId: targetNote .id,
409
410
});
410
411
}
411
412
413
+ function toggleReact() {
414
+ if (appearNote.value.myReaction == null) {
415
+ react();
416
+ } else {
417
+ undoReact(appearNote.value);
418
+ }
419
+ }
420
+
412
421
function onContextmenu(ev: MouseEvent): void {
413
422
const isLink = (el: HTMLElement): boolean => {
414
423
if (el.tagName === 'A') return true;
0 commit comments