* Switch away from nesting React trees and mangling the DOM By parsing HTML events and manipulating the AST before passing it to React Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Use MatrixClientContext in Pill now that we are in the main React tree Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Add missing import Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Break import cycles Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Iterate Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Iterate Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Iterate Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Minimise Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Iterate Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Iterate Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Docs Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
/*
|
|
Copyright 2024-2025 New Vector Ltd.
|
|
Copyright 2022 The Matrix.org Foundation C.I.C.
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
|
|
Please see LICENSE files in the repository root for full details.
|
|
*/
|
|
|
|
import React from "react";
|
|
import { domToReact } from "html-react-parser";
|
|
|
|
import LinkWithTooltip from "../components/views/elements/LinkWithTooltip";
|
|
import { getSingleTextContentNode, type RendererMap } from "./utils.tsx";
|
|
|
|
/**
|
|
* Wraps ambiguous links in a tooltip trigger that shows the full URL.
|
|
*/
|
|
export const ambiguousLinkTooltipRenderer: RendererMap = {
|
|
a: (anchor, { isHtml }) => {
|
|
// Ambiguous URLs are only possible in HTML content
|
|
if (!isHtml) return;
|
|
|
|
const href = anchor.attribs["href"];
|
|
if (href && href !== getSingleTextContentNode(anchor)) {
|
|
let tooltip = href as string;
|
|
try {
|
|
tooltip = new URL(href, window.location.href).toString();
|
|
} catch {
|
|
// Not all hrefs will be valid URLs
|
|
}
|
|
return <LinkWithTooltip tooltip={tooltip}>{domToReact([anchor])}</LinkWithTooltip>;
|
|
}
|
|
},
|
|
};
|