Plugin

RevealAllSpoilers

Reveal all spoilers in a message by Ctrl-clicking a spoiler, or in the chat with Ctrl+Shift-click

Accessibility Chat Shortcuts Utility
index.ts
Download

Source

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