feat: ワードミュートに該当したノートを非表示にできるように
Co-authored-by: Nafu Satsuki <satsuki@nafusoft.dev>
This commit is contained in:
		@@ -1735,6 +1735,7 @@ _wordMute:
 | 
			
		||||
  muteWords: "Muted words"
 | 
			
		||||
  muteWordsDescription: "Separate with spaces for an AND condition or with line breaks for an OR condition."
 | 
			
		||||
  muteWordsDescription2: "Surround keywords with slashes to use regular expressions."
 | 
			
		||||
  hideMutedNotes: "Hide notes containing muted words"
 | 
			
		||||
_instanceMute:
 | 
			
		||||
  instanceMuteDescription: "This will mute any notes/renotes from the listed instances, including those of users replying to a user from a muted instance."
 | 
			
		||||
  instanceMuteDescription2: "Separate with newlines"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								locales/index.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								locales/index.d.ts
									
									
									
									
										vendored
									
									
								
							@@ -1865,6 +1865,7 @@ export interface Locale {
 | 
			
		||||
        "muteWords": string;
 | 
			
		||||
        "muteWordsDescription": string;
 | 
			
		||||
        "muteWordsDescription2": string;
 | 
			
		||||
        "hideMutedNotes": string;
 | 
			
		||||
    };
 | 
			
		||||
    "_instanceMute": {
 | 
			
		||||
        "instanceMuteDescription": string;
 | 
			
		||||
 
 | 
			
		||||
@@ -1770,6 +1770,7 @@ _wordMute:
 | 
			
		||||
  muteWords: "ミュートするワード"
 | 
			
		||||
  muteWordsDescription: "スペースで区切るとAND指定になり、改行で区切るとOR指定になります。"
 | 
			
		||||
  muteWordsDescription2: "キーワードをスラッシュで囲むと正規表現になります。"
 | 
			
		||||
  hideMutedNotes: "ミュートされた単語を含むノートを非表示にする"
 | 
			
		||||
 | 
			
		||||
_instanceMute:
 | 
			
		||||
  instanceMuteDescription: "ミュートしたサーバーのユーザーへの返信を含めて、設定したサーバーの全てのノートとRenoteをミュートします。"
 | 
			
		||||
 
 | 
			
		||||
@@ -133,7 +133,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		||||
		</div>
 | 
			
		||||
	</article>
 | 
			
		||||
</div>
 | 
			
		||||
<div v-else :class="$style.muted" @click="muted = false">
 | 
			
		||||
<div v-else :class="$style.muted" :style="hideMutedNotes ? 'display: none' : undefined" @click="muted = false">
 | 
			
		||||
	<I18n :src="i18n.ts.userSaysSomething" tag="small">
 | 
			
		||||
		<template #name>
 | 
			
		||||
			<MkA v-user-preview="appearNote.userId" :to="userPage(appearNote.user)">
 | 
			
		||||
@@ -244,6 +244,7 @@ const translation = ref<any>(null);
 | 
			
		||||
const translating = ref(false);
 | 
			
		||||
const showTicker = (defaultStore.state.instanceTicker === 'always') || (defaultStore.state.instanceTicker === 'remote' && appearNote.user.instance);
 | 
			
		||||
const canRenote = computed(() => ['public', 'home'].includes(appearNote.visibility) || (appearNote.visibility === 'followers' && appearNote.userId === $i.id));
 | 
			
		||||
const hideMutedNotes = defaultStore.state.hideMutedNotes;
 | 
			
		||||
let renoteCollapsed = $ref(defaultStore.state.collapseRenotes && isRenote && (($i && ($i.id === note.userId || $i.id === appearNote.userId)) || (appearNote.myReaction != null)));
 | 
			
		||||
 | 
			
		||||
function checkMute(note: Misskey.entities.Note, mutedWords: Array<string | string[]> | undefined | null): boolean {
 | 
			
		||||
 
 | 
			
		||||
@@ -46,6 +46,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		||||
				<MkSwitch v-model="showNoteActionsOnlyHover">{{ i18n.ts.showNoteActionsOnlyHover }}</MkSwitch>
 | 
			
		||||
				<MkSwitch v-model="showClipButtonInNoteFooter">{{ i18n.ts.showClipButtonInNoteFooter }}</MkSwitch>
 | 
			
		||||
				<MkSwitch v-model="collapseRenotes">{{ i18n.ts.collapseRenotes }}</MkSwitch>
 | 
			
		||||
				<MkSwitch v-model="hideMutedNotes">{{ i18n.ts._wordMute.hideMutedNotes }}</MkSwitch>
 | 
			
		||||
				<MkSwitch v-model="advancedMfm">{{ i18n.ts.enableAdvancedMfm }}</MkSwitch>
 | 
			
		||||
				<MkSwitch v-if="advancedMfm" v-model="animatedMfm">{{ i18n.ts.enableAnimatedMfm }}</MkSwitch>
 | 
			
		||||
				<MkSwitch v-model="showGapBetweenNotesInTimeline">{{ i18n.ts.showGapBetweenNotesInTimeline }}</MkSwitch>
 | 
			
		||||
@@ -229,6 +230,7 @@ const showClipButtonInNoteFooter = computed(defaultStore.makeGetterSetter('showC
 | 
			
		||||
const reactionsDisplaySize = computed(defaultStore.makeGetterSetter('reactionsDisplaySize'));
 | 
			
		||||
const limitWidthOfReaction = computed(defaultStore.makeGetterSetter('limitWidthOfReaction'));
 | 
			
		||||
const collapseRenotes = computed(defaultStore.makeGetterSetter('collapseRenotes'));
 | 
			
		||||
const hideMutedNotes = computed(defaultStore.makeGetterSetter('hideMutedNotes'));
 | 
			
		||||
const reduceAnimation = computed(defaultStore.makeGetterSetter('animation', v => !v, v => !v));
 | 
			
		||||
const useBlurEffectForModal = computed(defaultStore.makeGetterSetter('useBlurEffectForModal'));
 | 
			
		||||
const useBlurEffect = computed(defaultStore.makeGetterSetter('useBlurEffect'));
 | 
			
		||||
@@ -295,6 +297,7 @@ watch([
 | 
			
		||||
	limitWidthOfReaction,
 | 
			
		||||
	highlightSensitiveMedia,
 | 
			
		||||
	keepScreenOn,
 | 
			
		||||
    hideMutedNotes,
 | 
			
		||||
	disableStreamingTimeline,
 | 
			
		||||
], async () => {
 | 
			
		||||
	await reloadAsk();
 | 
			
		||||
 
 | 
			
		||||
@@ -370,6 +370,10 @@ export const defaultStore = markRaw(new Storage('base', {
 | 
			
		||||
		where: 'device',
 | 
			
		||||
		default: false,
 | 
			
		||||
	},
 | 
			
		||||
	hideMutedNotes: {
 | 
			
		||||
		where: 'device',
 | 
			
		||||
		default: false,
 | 
			
		||||
	},
 | 
			
		||||
	tlWithReplies: {
 | 
			
		||||
		where: 'device',
 | 
			
		||||
		default: false,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user