adds HandledLink to StatusContent

This commit is contained in:
ChaosExAnima 2025-10-02 16:58:13 +02:00
parent 826951aa59
commit e53f58835f
No known key found for this signature in database
GPG Key ID: 8F2B333100FB6117

View File

@ -18,6 +18,7 @@ import { languages as preloadedLanguages } from 'mastodon/initial_state';
import { isModernEmojiEnabled } from '../utils/environment';
import { EmojiHTML } from './emoji/html';
import { HandledLink } from './status/handled_link';
const MAX_HEIGHT = 706; // 22px * 32 (+ 2px padding at the top)
@ -99,6 +100,23 @@ class StatusContent extends PureComponent {
}
const { status, onCollapsedToggle } = this.props;
if (status.get('collapsed', null) === null && onCollapsedToggle) {
const { collapsible, onClick } = this.props;
const collapsed =
collapsible
&& onClick
&& node.clientHeight > MAX_HEIGHT
&& status.get('spoiler_text').length === 0;
onCollapsedToggle(collapsed);
}
// Exit if modern emoji is enabled, as it handles links using .
if (isModernEmojiEnabled()) {
return;
}
const links = node.querySelectorAll('a');
let link, mention;
@ -128,18 +146,6 @@ class StatusContent extends PureComponent {
link.classList.add('unhandled-link');
}
}
if (status.get('collapsed', null) === null && onCollapsedToggle) {
const { collapsible, onClick } = this.props;
const collapsed =
collapsible
&& onClick
&& node.clientHeight > MAX_HEIGHT
&& status.get('spoiler_text').length === 0;
onCollapsedToggle(collapsed);
}
}
componentDidMount () {
@ -201,6 +207,23 @@ class StatusContent extends PureComponent {
this.node = c;
};
handleElement = (element, {key, ...props}) => {
if (element instanceof HTMLAnchorElement) {
const mention = this.props.status.get('mentions').find(item => element.href === item.get('url'));
return (
<HandledLink
{...props}
href={element.href}
text={element.innerText}
hashtagAccountId={this.props.status.getIn(['account', 'id'])}
mentionAccountId={mention?.get('id')}
key={key}
/>
);
}
return undefined;
}
render () {
const { status, intl, statusContent } = this.props;
@ -245,6 +268,7 @@ class StatusContent extends PureComponent {
lang={language}
htmlString={content}
extraEmojis={status.get('emojis')}
onElement={this.handleElement.bind(this)}
/>
{poll}
@ -262,6 +286,7 @@ class StatusContent extends PureComponent {
lang={language}
htmlString={content}
extraEmojis={status.get('emojis')}
onElement={this.handleElement.bind(this)}
/>
{poll}