annotate discord-disable-menu-on-links.user.js @ 147:15ec4ec958d7 default tip

Sentence case name and match filename (sort of)
author nanaya <me@nanaya.net>
date Sat, 27 Sep 2025 15:06:06 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
147
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
1 // ==UserScript==
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
2 // @name Discord disable menu on links
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
3 // @namespace https://nanaya.net
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
4 // @match https://discord.com/*
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
5 // @grant none
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
6 // @version 1.0.0
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
7 // @author nanaya
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
8 // @description Disable custom context menu for external links in Discord
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
9 // @downloadURL https://hg.nanaya.net/ec-userscripts/raw-file/tip/discord-disable-menu-on-links.user.js
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
10 // ==/UserScript==
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
11
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
12 function disableCustomContextMenu (e) {
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
13 e.stopPropagation();
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
14 }
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
15
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
16 function fix (link) {
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
17 if (!(link instanceof window.HTMLAnchorElement)) return;
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
18 if (link.rel.match(/\bnoopener\b/) == null && link.dataset.role !== 'img') return;
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
19
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
20 if (link._ecDisableDiscordMenuOnLinks) return;
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
21 link._ecDisableDiscordMenuOnLinks = true;
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
22 link.addEventListener('contextmenu', disableCustomContextMenu);
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
23 }
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
24
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
25 function run (nodes) {
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
26 nodes ??= [document.body];
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
27
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
28 for (const node of nodes) {
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
29 if (!(node instanceof window.HTMLElement)) continue;
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
30 fix(node);
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
31 for (const link of node.querySelectorAll('a[rel~=noopener], a[data-role=img]')) {
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
32 fix(link);
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
33 }
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
34 }
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
35 }
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
36
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
37 function onMutate (mutations) {
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
38 for (const mutation of mutations) {
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
39 run(mutation.addedNodes);
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
40 }
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
41 }
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
42
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
43 const observer = new window.MutationObserver(onMutate);
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
44 observer.observe(document, { childList: true, subtree: true });
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
45
15ec4ec958d7 Sentence case name and match filename (sort of)
nanaya <me@nanaya.net>
parents:
diff changeset
46 run();