diff --git a/packages/frontend/src/components/DynamicNote.vue b/packages/frontend/src/components/DynamicNote.vue
index 6b3e36c9e5..115aeecfb3 100644
--- a/packages/frontend/src/components/DynamicNote.vue
+++ b/packages/frontend/src/components/DynamicNote.vue
@@ -14,12 +14,13 @@ Displays a note with either Misskey or Sharkey style, based on user preference.
:withHardMute="withHardMute"
@reaction="emoji => emit('reaction', emoji)"
@removeReaction="emoji => emit('removeReaction', emoji)"
+ @expandCW="n => emit('expandCW', n)"
/>
diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue
index fd752eb3f8..9feed0acc6 100644
--- a/packages/frontend/src/components/MkNote.vue
+++ b/packages/frontend/src/components/MkNote.vue
@@ -12,6 +12,7 @@ SPDX-License-Identifier: AGPL-3.0-only
:withHardMute="withHardMute"
:class="[$style.root, { [$style.showActionsOnlyHover]: prefer.s.showNoteActionsOnlyHover, [$style.skipRender]: prefer.s.skipNoteRender }]"
:tabindex="isDeleted ? '-1' : '0'"
+ @expand="n => emit('expandCW', n)"
>
@@ -244,6 +245,7 @@ provide(DI.mock, props.mock);
const emit = defineEmits<{
(ev: 'reaction', emoji: string): void;
(ev: 'removeReaction', emoji: string): void;
+ (ev: 'expandCW', note: Misskey.entities.Note): void;
}>();
const router = useRouter();
diff --git a/packages/frontend/src/components/SkNote.vue b/packages/frontend/src/components/SkNote.vue
index 8cfdcec62b..d2b31e3df7 100644
--- a/packages/frontend/src/components/SkNote.vue
+++ b/packages/frontend/src/components/SkNote.vue
@@ -14,6 +14,7 @@ Displays a note in the Sharkey style. Used to show the "main" note in a given co
:withHardMute="withHardMute"
:class="[$style.root, { [$style.showActionsOnlyHover]: prefer.s.showNoteActionsOnlyHover, [$style.skipRender]: prefer.s.skipNoteRender }]"
:tabindex="isDeleted ? '-1' : '0'"
+ @expand="n => emit('expandCW', n)"
>
@@ -245,6 +246,7 @@ provide(DI.mock, props.mock);
const emit = defineEmits<{
(ev: 'reaction', emoji: string): void;
(ev: 'removeReaction', emoji: string): void;
+ (ev: 'expandCW', note: Misskey.entities.Note): void;
}>();
const router = useRouter();
diff --git a/packages/frontend/src/pages/user/home.vue b/packages/frontend/src/pages/user/home.vue
index 156eab004f..0df9b425ed 100644
--- a/packages/frontend/src/pages/user/home.vue
+++ b/packages/frontend/src/pages/user/home.vue
@@ -176,10 +176,10 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
-
+
@@ -198,6 +198,7 @@ SPDX-License-Identifier: AGPL-3.0-only
import { defineAsyncComponent, computed, onMounted, onUnmounted, nextTick, watch, ref } from 'vue';
import * as Misskey from 'misskey-js';
import { getScrollPosition } from '@@/js/scroll.js';
+import { patchMuteOverrides } from '@/utility/check-word-mute.js';
import MkTab from '@/components/MkTab.vue';
import MkNotes from '@/components/MkNotes.vue';
import MkFollowButton from '@/components/MkFollowButton.vue';
@@ -255,6 +256,14 @@ const emit = defineEmits<{
(ev: 'unfoldFiles'): void;
}>();
+const cwOverrides = patchMuteOverrides();
+
+function onExpandCW() {
+ // This kills the user-level and instance-level CWs for all notes below this point
+ cwOverrides.userMandatoryCW = null;
+ cwOverrides.instanceMandatoryCW = null;
+}
+
const router = useRouter();
const user = ref(props.user);
diff --git a/packages/frontend/src/utility/check-word-mute.ts b/packages/frontend/src/utility/check-word-mute.ts
index fb61ad74ad..6b054852f5 100644
--- a/packages/frontend/src/utility/check-word-mute.ts
+++ b/packages/frontend/src/utility/check-word-mute.ts
@@ -19,7 +19,6 @@ export interface Mute {
noteMuted?: boolean;
noteMandatoryCW?: string | null;
- // TODO show this as a single block on user timelines
userMandatoryCW?: string | null;
instanceMandatoryCW?: string | null;
}