handle embedded iframe content better

This commit is contained in:
Alec Armbruster 2023-06-25 11:01:40 -04:00
parent d1404f3228
commit 462c7ab748
No known key found for this signature in database
GPG key ID: 52BC7C84E960FD1B
2 changed files with 18 additions and 30 deletions

View file

@ -1,8 +1,7 @@
import { Component, linkEvent } from "inferno";
import { Component } from "inferno";
import { Post } from "lemmy-js-client";
import * as sanitizeHtml from "sanitize-html";
import { relTags } from "../../config";
import { I18NextService } from "../../services";
import { Icon } from "../common/icon";
interface MetadataCardProps {
@ -17,10 +16,6 @@ export class MetadataCard extends Component<
MetadataCardProps,
MetadataCardState
> {
state: MetadataCardState = {
expanded: false,
};
constructor(props: any, context: any) {
super(props, context);
}
@ -29,7 +24,7 @@ export class MetadataCard extends Component<
const post = this.props.post;
return (
<>
{!this.state.expanded && post.embed_title && post.url && (
{post.embed_title && post.url && (
<div className="post-metadata-card card border-secondary mt-3 mb-2">
<div className="row">
<div className="col-12">
@ -61,34 +56,12 @@ export class MetadataCard extends Component<
}}
/>
)}
{post.embed_video_url && (
<button
className="mt-2 btn btn-secondary text-monospace"
onClick={linkEvent(this, this.handleIframeExpand)}
>
{I18NextService.i18n.t("expand_here")}
</button>
)}
</div>
</div>
</div>
</div>
)}
{this.state.expanded && post.embed_video_url && (
<div className="ratio ratio-16x9">
<iframe
allowFullScreen
className="post-metadata-iframe"
src={post.embed_video_url}
title={post.embed_title}
></iframe>
</div>
)}
</>
);
}
handleIframeExpand(i: MetadataCard) {
i.setState({ expanded: !i.state.expanded });
}
}

View file

@ -262,6 +262,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
const { post } = this.postView;
const { url } = post;
// if direct video link
if (url && isVideo(url)) {
return (
<div className="embed-responsive mt-3">
@ -272,6 +273,20 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
);
}
// if embedded video link
if (url && post.embed_video_url) {
return (
<div className="ratio ratio-16x9">
<iframe
allowFullScreen
className="post-metadata-iframe"
src={post.embed_video_url}
title={post.embed_title}
></iframe>
</div>
);
}
return <></>;
}
@ -338,7 +353,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
</a>
);
} else if (url) {
if (!this.props.hideImage && isVideo(url)) {
if ((!this.props.hideImage && isVideo(url)) || post.embed_video_url) {
return (
<a
className="text-body"