From 2bf2715ab4efe99074bf67df4e4fa9251ae61064 Mon Sep 17 00:00:00 2001 From: Oxbian Date: Sun, 27 Oct 2024 16:30:48 -0400 Subject: feat: refactored and optimized code + icon --- main.js | 81 ++++++++++++++++++++++++++++++++++------------------------------- 1 file changed, 42 insertions(+), 39 deletions(-) (limited to 'main.js') diff --git a/main.js b/main.js index 1382cde..1b53218 100644 --- a/main.js +++ b/main.js @@ -1,55 +1,58 @@ -setInterval(function () { - // Delete lockicon on nitro emote - document.querySelector('#emoji-picker-grid ul li button [class^="emojiLockIconContainer"]')?.remove(); +/* Remove nitro things from discord emojis menu */ +const emojiPickerObserver = new MutationObserver(() => { - //Remove annoying nitro banner that appears when emote is clicked - document.querySelector("div[class*='emojiPicker'] div[class*='hasTabParentContainer']")?.remove(); - document.querySelector("div[class*='emojiPicker'] div[class*='backdrop']")?.remove(); - document.querySelector("[class^='upsellContainer']")?.remove(); - // Discord crash if bellow removed - //document.querySelector("[class^='nitroTopDividerContainer']")?.remove(); - // Remove class categorySectionNitroLocked sur ceux ayant la classe les div categorySection*/ -}, 100); + // Select objects to remove + const selectors = [ + '#emoji-picker-grid ul li button [class^="emojiLockIconContainer"]', + "div[class*='emojiPicker'] div[class*='hasTabParentContainer']", + "div[class*='emojiPicker'] div[class*='backdrop']", + "[class^='upsellContainer']" + ]; -setInterval(function () { - // Add event listener on emote to copy them - document.querySelectorAll("div[class*='listItems'] div[class*='categorySection'] ul li button").forEach((btn) => { - if (btn.getAttribute("affected") !== "true") { - btn.setAttribute("affected", "true"); - - btn.addEventListener("click", (e) => { - let source = e.currentTarget.querySelector("img").getAttribute('src'); - copyTextToClipboard(source) - }); - } + // Search and delete objects + selectors.forEach(selector => { + document.querySelectorAll(selector).forEach(element => element.remove()); }); -}, 1000); +}); +/* Function to copy emojis link into the clipboard */ async function copyTextToClipboard(textToCopy) { try { - if (navigator?.clipboard?.writeText) { - await navigator.clipboard.writeText(textToCopy); - } + await navigator.clipboard.writeText(textToCopy); } catch (err) { - console.error(err); + console.error("Error while copy in the clipboard : ", err); } } -// Ajoute un écouteur d'événement de clic au document pour capturer les clics sur les images emoji -document.addEventListener("click", function(event) { - // Vérifie si l'élément cliqué est une image avec la classe 'emoji' - if (event.target.classList.contains("emoji")) { - // Sélectionne le parent (ou ancêtre) ayant un id commençant par 'message-content' - const parentDiv = event.target.closest("div[id^='message-content']"); +/* Add event on each emoji on emojis menu to copy them into the clipboard */ +const emojisObserver = new MutationObserver(() => { + document.querySelectorAll("div[class*='listItems'] div[class*='categorySection'] ul li button:not([affected])") + .forEach(btn => { + btn.setAttribute("affected", "true"); + + btn.addEventListener("click", (e) => { + let source = e.currentTarget.querySelector("img").getAttribute('src'); + copyTextToClipboard(source); + }); + }); +}); - // Vérifie que l'image est bien dans une div dont l'id commence par 'message-content' +/* Copy emojis from chat when clicked on */ +document.addEventListener("click", function(event) { + const emojiImage = event.target; + + if (emojiImage.classList.contains("emoji")) { + const parentDiv = emojiImage.closest("div[id^='message-content']"); + if (parentDiv) { - let source = event.target.getAttribute('src'); - let parsedUrl = new URL(source); - parsedUrl.searchParams.set("size", "48"); - copyTextToClipboard(parsedUrl.toString()); + let source = emojiImage.getAttribute('src'); + let parsedUrl = new URL(source); + parsedUrl.searchParams.set("size", "48"); + copyTextToClipboard(parsedUrl.toString()); } } }); -// copier le lien dans [class^='markup'] div span span span.text +/* Check change in DOM to run functions if needed */ +emojisObserver.observe(document.body, { childList: true, subtree: true }); +emojiPickerObserver.observe(document.body, { childList: true, subtree: true }); -- cgit v1.2.3