diff --git a/packages/backend/src/mfm/to-html.ts b/packages/backend/src/mfm/to-html.ts
index 5ae4cda2a..ddfd92588 100644
--- a/packages/backend/src/mfm/to-html.ts
+++ b/packages/backend/src/mfm/to-html.ts
@@ -1,4 +1,4 @@
-import { JSDOM } from "jsdom";
+import { Window as HappyDom } from "happy-dom";
import type * as mfm from "mfm-js";
import config from "@/config/index.js";
import { intersperse } from "@/prelude/array.js";
@@ -14,7 +14,7 @@ export async function toHtml(
return null;
}
- const { window } = new JSDOM("");
+ const { window } = new HappyDom();
const doc = window.document;
@@ -82,7 +82,7 @@ export async function toHtml(
hashtag(node) {
const a = doc.createElement("a");
- a.href = `${config.url}/tags/${node.props.hashtag}`;
+ a.setAttribute('href', `${config.url}/tags/${node.props.hashtag}`);
a.textContent = `#${node.props.hashtag}`;
a.setAttribute("rel", "tag");
return a;
@@ -108,7 +108,7 @@ export async function toHtml(
async link(node) {
const a = doc.createElement("a");
- a.href = node.props.url;
+ a.setAttribute('href', node.props.url);
await appendChildren(node.children, a);
return a;
},
@@ -124,7 +124,7 @@ export async function toHtml(
el.setAttribute("class", "h-card");
el.setAttribute("translate", "no");
const a = doc.createElement("a");
- a.href = resolved.href;
+ a.setAttribute('href', resolved.href);
a.className = "u-url mention";
const span = doc.createElement("span");
span.textContent = resolved.username;
@@ -157,14 +157,14 @@ export async function toHtml(
url(node) {
const a = doc.createElement("a");
- a.href = node.props.url;
+ a.setAttribute('href', node.props.url);
a.textContent = node.props.url.replace(/^https?:\/\//, '');
return a;
},
search(node) {
const a = doc.createElement("a");
- a.href = `${config.searchEngine}${node.props.query}`;
+ a.setAttribute('href', `${config.searchEngine}${node.props.query}`);
a.textContent = node.props.content;
return a;
},