Plugin
RevealAllSpoilers
Reveal all spoilers in a message by Ctrl-clicking a spoiler, or in the chat with Ctrl+Shift-click
1
import { Devs, IS_MAC } from "@utils/constants";2
import definePlugin from "@utils/types";3
import { findCssClassesLazy } from "@webpack";4
5
const SpoilerClasses = findCssClassesLazy("spoilerContent", "hidden");6
const MessagesClasses = findCssClassesLazy("messagesWrapper", "navigationDescription");7
8
export 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 = shiftKey32
? 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