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();
});