diff --git a/src/api/MessagePopover.tsx b/src/api/MessagePopover.tsx index 45471649..eb68ed2d 100644 --- a/src/api/MessagePopover.tsx +++ b/src/api/MessagePopover.tsx @@ -16,9 +16,10 @@ * along with this program. If not, see . */ +import ErrorBoundary from "@components/ErrorBoundary"; import { Logger } from "@utils/Logger"; import { Channel, Message } from "discord-types/general"; -import type { ComponentType, MouseEventHandler, ReactElement } from "react"; +import type { ComponentType, MouseEventHandler } from "react"; const logger = new Logger("MessagePopover"); @@ -48,22 +49,26 @@ export function removeButton(identifier: string) { } export function _buildPopoverElements( - msg: Message, - PopoverButton: ComponentType, + Component: React.ComponentType, + message: Message ) { - const items = [] as ReactElement[]; + const items: React.ReactNode[] = []; for (const [identifier, getItem] of buttons.entries()) { try { - const item = getItem(msg); + const item = getItem(message); if (item) { item.key ??= identifier; - items.push(); + items.push( + + + + ); } } catch (err) { logger.error(`[${identifier}]`, err); } } - return items; + return <>{items}; } diff --git a/src/plugins/_api/messagePopover.ts b/src/plugins/_api/messagePopover.ts index d29b9b2d..57b9b119 100644 --- a/src/plugins/_api/messagePopover.ts +++ b/src/plugins/_api/messagePopover.ts @@ -26,8 +26,8 @@ export default definePlugin({ patches: [{ find: "Messages.MESSAGE_UTILITIES_A11Y_LABEL", replacement: { - match: /"reply-self".+?Fragment,{children:\[(?=.+?\((\i\.\i),{label:)(?<=message:(\i).+?)/, - replace: (m, PopoverButton, msg) => `${m}...Vencord.Api.MessagePopover._buildPopoverElements(${msg},${PopoverButton}),` + match: /\.jsx\)\((\i\.\i),\{label:\i\.\i\.Messages\.MESSAGE_ACTION_REPLY.{0,200}?"reply-self".{0,50}?\}\):null(?=,.+?message:(\i))/, + replace: "$&,Vencord.Api.MessagePopover._buildPopoverElements($1,$2)" } }], }); diff --git a/src/plugins/maskedLinkPaste/index.ts b/src/plugins/maskedLinkPaste/index.ts deleted file mode 100644 index bcd622ed..00000000 --- a/src/plugins/maskedLinkPaste/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Vencord, a Discord client mod - * Copyright (c) 2023 Vendicated and contributors - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -import { Devs } from "@utils/constants.js"; -import definePlugin from "@utils/types"; -import { findByPropsLazy } from "@webpack"; - -const linkRegex = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/; - -const SlateTransforms = findByPropsLazy("insertText", "selectCommandOption"); - -export default definePlugin({ - name: "MaskedLinkPaste", - authors: [Devs.TheSun], - description: "Pasting a link while having text selected will paste a hyperlink", - patches: [ - { - find: ".selection,preventEmojiSurrogates:", - replacement: { - match: /(?<=\i.delete.{0,50})(\i)\.insertText\((\i)\)/, - replace: "$self.handlePaste($1, $2, () => $&)" - } - } - ], - - handlePaste(editor, content: string, originalBehavior: () => void) { - if (content && linkRegex.test(content) && editor.operations?.[0]?.type === "remove_text") { - SlateTransforms.insertText( - editor, - `[${editor.operations[0].text}](${content})` - ); - } - else originalBehavior(); - } -}); diff --git a/src/plugins/youtubeAdblock.desktop/adguard.js b/src/plugins/youtubeAdblock.desktop/adguard.js index 7db249a2..df68366b 100644 --- a/src/plugins/youtubeAdblock.desktop/adguard.js +++ b/src/plugins/youtubeAdblock.desktop/adguard.js @@ -19,7 +19,6 @@ * along with AdGuard's Block YouTube Ads. If not, see . */ -const LOGO_ID = "block-youtube-ads-logo"; const hiddenCSS = [ "#__ffYoutube1", "#__ffYoutube2", @@ -98,7 +97,7 @@ const hideElements = () => { } const rule = selectors.join(", ") + " { display: none!important; }"; const style = document.createElement("style"); - style.innerHTML = rule; + style.textContent = rule; document.head.appendChild(style); }; /** @@ -195,68 +194,25 @@ const jsonOverride = (propertyName, overrideValue) => { return obj; }; // Override Response.prototype.json - const nativeResponseJson = Response.prototype.json; - Response.prototype.json = new Proxy(nativeResponseJson, { - apply(...args) { + Response.prototype.json = new Proxy(Response.prototype.json, { + async apply(...args) { // Call the target function, get the original Promise - const promise = Reflect.apply(...args); + const result = await Reflect.apply(...args); // Create a new one and override the JSON inside - return new Promise((resolve, reject) => { - promise.then(data => { - overrideObject(data, propertyName, overrideValue); - resolve(data); - }).catch(error => reject(error)); - }); + overrideObject(result, propertyName, overrideValue); + return result; }, }); }; -const addAdGuardLogoStyle = () => { }; -const addAdGuardLogo = () => { - if (document.getElementById(LOGO_ID)) { - return; - } - const logo = document.createElement("span"); - logo.innerHTML = "__logo_text__"; - logo.setAttribute("id", LOGO_ID); - if (window.location.hostname === "m.youtube.com") { - const btn = document.querySelector("header.mobile-topbar-header > button"); - if (btn) { - btn.parentNode?.insertBefore(logo, btn.nextSibling); - addAdGuardLogoStyle(); - } - } else if (window.location.hostname === "www.youtube.com") { - const code = document.getElementById("country-code"); - if (code) { - code.innerHTML = ""; - code.appendChild(logo); - addAdGuardLogoStyle(); - } - } else if (window.location.hostname === "music.youtube.com") { - const el = document.querySelector(".ytmusic-nav-bar#left-content"); - if (el) { - el.appendChild(logo); - addAdGuardLogoStyle(); - } - } else if (window.location.hostname === "www.youtube-nocookie.com") { - const code = document.querySelector("#yt-masthead #logo-container .content-region"); - if (code) { - code.innerHTML = ""; - code.appendChild(logo); - addAdGuardLogoStyle(); - } - } -}; // Removes ads metadata from YouTube XHR requests jsonOverride("adPlacements", []); jsonOverride("playerAds", []); // Applies CSS that hides YouTube ad elements hideElements(); // Some changes should be re-evaluated on every page change -addAdGuardLogo(); hideDynamicAds(); autoSkipAds(); observeDomChanges(() => { - addAdGuardLogo(); hideDynamicAds(); autoSkipAds(); });