From 5ef167b4a830a0a2d99388df46cc72d8139b4569 Mon Sep 17 00:00:00 2001 From: Bruno Viveiros Date: Mon, 21 Aug 2023 17:03:21 -0300 Subject: [PATCH 1/2] fix: YouTube iframe being able to start at a defined time --- .../features/status/components/card.jsx | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/app/javascript/mastodon/features/status/components/card.jsx b/app/javascript/mastodon/features/status/components/card.jsx index f37b558c4cd..38ad5b72cb3 100644 --- a/app/javascript/mastodon/features/status/components/card.jsx +++ b/app/javascript/mastodon/features/status/components/card.jsx @@ -35,18 +35,20 @@ const getHostname = url => { const domParser = new DOMParser(); -const addAutoPlay = html => { +const handleIframeUrl = (html, url) => { const document = domParser.parseFromString(html, 'text/html').documentElement; const iframe = document.querySelector('iframe'); + const startTime = new URL(url).searchParams.get('t') if (iframe) { - if (iframe.src.indexOf('?') !== -1) { - iframe.src += '&'; - } else { - iframe.src += '?'; - } + const iframeUrl = new URL(iframe.src) - iframe.src += 'autoplay=1&auto_play=1'; + iframeUrl.searchParams.set('autoplay', 1) + iframeUrl.searchParams.set('auto_play', 1) + + if (startTime) iframeUrl.searchParams.set('start', startTime) + + iframe.src = iframeUrl.href // DOM parser creates html/body elements around original HTML fragment, // so we need to get innerHTML out of the body and not the entire document @@ -108,7 +110,7 @@ export default class Card extends PureComponent { renderVideo () { const { card } = this.props; - const content = { __html: addAutoPlay(card.get('html')) }; + const content = { __html: handleIframeUrl(card.get('html'), card.get('url')) }; return (
Date: Tue, 22 Aug 2023 09:33:26 -0300 Subject: [PATCH 2/2] fix: add provider_name check to card iframes --- app/javascript/mastodon/features/status/components/card.jsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/features/status/components/card.jsx b/app/javascript/mastodon/features/status/components/card.jsx index 38ad5b72cb3..9dad058e5c4 100644 --- a/app/javascript/mastodon/features/status/components/card.jsx +++ b/app/javascript/mastodon/features/status/components/card.jsx @@ -35,7 +35,7 @@ const getHostname = url => { const domParser = new DOMParser(); -const handleIframeUrl = (html, url) => { +const handleIframeUrl = (html, url, providerName) => { const document = domParser.parseFromString(html, 'text/html').documentElement; const iframe = document.querySelector('iframe'); const startTime = new URL(url).searchParams.get('t') @@ -46,7 +46,7 @@ const handleIframeUrl = (html, url) => { iframeUrl.searchParams.set('autoplay', 1) iframeUrl.searchParams.set('auto_play', 1) - if (startTime) iframeUrl.searchParams.set('start', startTime) + if (startTime && providerName === "YouTube") iframeUrl.searchParams.set('start', startTime) iframe.src = iframeUrl.href @@ -110,7 +110,7 @@ export default class Card extends PureComponent { renderVideo () { const { card } = this.props; - const content = { __html: handleIframeUrl(card.get('html'), card.get('url')) }; + const content = { __html: handleIframeUrl(card.get('html'), card.get('url'), card.get('provider_name')) }; return (