Plugin
RevealAllSpoilers
Reveal all spoilers in a message by Ctrl-clicking a spoiler, or in the chat with Ctrl+Shift-click
1
/*2
* FiveCord — a Discord client mod3
* Copyright (c) 2025 FiveCord4
* SPDX-License-Identifier: GPL-3.0-or-later5
*/6
7
import { Devs, IS_MAC } from "@utils/constants";8
import definePlugin from "@utils/types";9
import { findCssClassesLazy } from "@webpack";10
11
const SpoilerClasses = findCssClassesLazy("spoilerContent", "hidden");12
const MessagesClasses = findCssClassesLazy("messagesWrapper", "navigationDescription");13
14
export default definePlugin({15
name: "RevealAllSpoilers",16
description: "Reveal all spoilers in a message by Ctrl-clicking a spoiler, or in the chat with Ctrl+Shift-click",17
authors: [Devs.whqwert],18
tags: ["Accessibility", "Chat", "Shortcuts", "Utility"],19
patches: [20
{21
find: ".removeObscurity,",22
replacement: {23
match: /(?<=removeObscurity(?:",|=)(\i)=>{)/,24
replace: (_, event) => `$self.reveal(${event});`25
}26
}27
],28
29
reveal(event: MouseEvent) {30
const { ctrlKey, metaKey, shiftKey, target } = event;31
32
if (!(IS_MAC ? metaKey : ctrlKey)) { return; }33
34
const { spoilerContent, hidden } = SpoilerClasses;35
const { messagesWrapper } = MessagesClasses;36
37
const parent = shiftKey38
? document.querySelector(`div.${messagesWrapper}`)39
: (target as HTMLSpanElement).parentElement;40
41
for (const spoiler of parent!.querySelectorAll(`span.${spoilerContent}.${hidden}`)) {42
(spoiler as HTMLSpanElement).click();43
}44
}45
46
});47