BetterDiscordApp-rauenzi/renderer/src/ui/base/markdown.jsx

39 lines
1.3 KiB
React
Raw Normal View History

2023-06-15 04:17:10 +02:00
import React from "@modules/react";
import WebpackModules from "@modules/webpackmodules";
import DiscordModules from "@modules/discordmodules";
2024-02-24 11:17:59 +01:00
let DiscordMarkdown, rules;
2024-02-24 11:17:59 +01:00
function setupMarkdown() {
DiscordMarkdown = WebpackModules.find(m => m?.prototype?.render && m.rules);
rules = {};
if (DiscordMarkdown) {
rules = {
...DiscordMarkdown.rules,
link: DiscordModules.SimpleMarkdown.defaultRules.link
};
2024-02-24 11:17:59 +01:00
const originalLink = rules.link.react;
rules.link.react = function() {
const original = Reflect.apply(originalLink, undefined, arguments);
original.props.className = "bd-link";
original.props.target = "_blank";
original.props.rel = "noopener noreferrer";
return original;
};
}
}
export default function Markdown({className, children}) {
2024-02-24 11:17:59 +01:00
if (!DiscordMarkdown && !rules) setupMarkdown();
if (!DiscordMarkdown) return <div className="bd-markdown-fallback">{children}</div>;
return <DiscordMarkdown
className={className}
parser={DiscordModules.SimpleMarkdown.parserFor(rules)}
output={DiscordModules.SimpleMarkdown.reactFor(DiscordModules.SimpleMarkdown.ruleOutput(rules, "react"))}
>
{children}
</DiscordMarkdown>;
}