commit: 478ca39e5e8463044a259388459da56d2141e104
parent: f7765acf9d92951a616f41b738d5d23ede58c162
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Thu, 15 Feb 2018 23:05:12 +0100
After click to embed video, autoplay it (#6480)
Diffstat:
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/app/javascript/mastodon/features/status/components/card.js b/app/javascript/mastodon/features/status/components/card.js
@@ -30,6 +30,29 @@ const trim = (text, len) => {
return text.substring(0, cut) + (text.length > len ? '…' : '');
};
+const domParser = new DOMParser();
+
+const addAutoPlay = html => {
+ const document = domParser.parseFromString(html, 'text/html').documentElement;
+ const iframe = document.querySelector('iframe');
+
+ if (iframe) {
+ if (iframe.src.indexOf('?') !== -1) {
+ iframe.src += '&';
+ } else {
+ iframe.src += '?';
+ }
+
+ iframe.src += 'autoplay=1&auto_play=1';
+
+ // 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
+ return document.querySelector('body').innerHTML;
+ }
+
+ return html;
+};
+
export default class Card extends React.PureComponent {
static propTypes = {
@@ -92,7 +115,7 @@ export default class Card extends React.PureComponent {
renderVideo () {
const { card } = this.props;
- const content = { __html: card.get('html') };
+ const content = { __html: addAutoPlay(card.get('html')) };
const { width } = this.state;
const ratio = card.get('width') / card.get('height');
const height = card.get('width') > card.get('height') ? (width / ratio) : (width * ratio);