Skip to content

Commit 2454f85

Browse files
PB-375: Align video background with embedded video
- fix autoplay
1 parent 808a7b6 commit 2454f85

File tree

10 files changed

+67
-11
lines changed

10 files changed

+67
-11
lines changed

app/code/Magento/PageBuilder/view/adminhtml/pagebuilder/content_type/video.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@
4444
</element>
4545
<element name="video">
4646
<attribute name="video_source" source="src" converter="Magento_PageBuilder/js/content-type/video/converter/attribute/videosrc" preview_converter="Magento_PageBuilder/js/content-type/video/converter/attribute/videosrc"/>
47-
<attribute name="autoplay" source="autoplay"/>
47+
<attribute name="autoplay" storage_key="autoplay" source="autoplay" converter="Magento_PageBuilder/js/content-type/video/converter/attribute/autoplay"/>
48+
<attribute name="muted_video" storage_key="autoplay" source="muted"/>
4849
</element>
4950
</elements>
5051
</appearance>

app/code/Magento/PageBuilder/view/adminhtml/web/js/content-type/video/converter/attribute/src.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/content-type/video/converter/attribute/videosrc.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/content-type/video/preview.js

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/template/content-type/video/default/master.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<div class="pagebuilder-video-wrapper" attr="data.wrapper.attributes" ko-style="Object.assign(data.wrapper.style(), {backgroundColor: data.wrapper.style().borderColor})" css="data.wrapper.css">
1111
<div class="pagebuilder-video-container" if="data.video.attributes().src">
1212
<iframe frameborder="0" allowfullscreen attr="data.video.attributes" if="isHosted(data.video.attributes().src)"/>
13-
<video frameborder="0" controls="" attr="autoplay: data.video.attributes().autoplay ==='true' ? 'true' : null, src: data.video.attributes().src, 'data-element': data.video.attributes()['data-element']" ifnot="isHosted(data.video.attributes().src)"/>
13+
<video frameborder="0" controls="" attr="data.video.attributes" ifnot="isHosted(data.video.attributes().src)"/>
1414
</div>
1515
</div>
1616
</div>

app/code/Magento/PageBuilder/view/adminhtml/web/template/content-type/video/default/preview.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<div class="pagebuilder-video-wrapper" attr="data.wrapper.attributes" ko-style="Object.assign(data.wrapper.style(), {backgroundColor: data.wrapper.style().borderColor})" css="data.wrapper.css">
1212
<div class="pagebuilder-video-container">
1313
<iframe frameborder="0" allowfullscreen attr="data.video.attributes" if="isHosted(data.video.attributes().src)"/>
14-
<video frameborder="0" controls="" attr="autoplay: data.video.attributes().autoplay ==='true' ? 'true' : null, src: data.video.attributes().src, 'data-element': data.video.attributes()['data-element']" ifnot="isHosted(data.video.attributes().src)"/>
14+
<video frameborder="0" controls attr="data.video.attributes()" ifnot="isHosted(data.video.attributes().src)" afterRender="onAfterRender"/>
1515
<i class="icon-pagebuilder-video pagebuilder-video-placeholder" ifnot="data.video.attributes().src"/>
1616
</div>
1717
</div>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
import ConverterInterface from "../../../../converter/converter-interface";
7+
import {DataObject} from "../../../../data-store";
8+
import {get} from "../../../../utils/object";
9+
10+
export default class VideoSrc implements ConverterInterface {
11+
/**
12+
* Convert value to internal format
13+
*
14+
* @param value string
15+
* @returns {string | object}
16+
*/
17+
public fromDom(value: string): string | object {
18+
return value === "true" ? value : "false";
19+
}
20+
21+
/**
22+
* Convert value to knockout format
23+
*
24+
* @param name string
25+
* @param data Object
26+
* @returns {boolean|string}
27+
*/
28+
public toDom(name: string, data: DataObject): boolean|string {
29+
const value = get<string>(data, name);
30+
31+
return value === "true" ? true : null;
32+
}
33+
}

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/content-type/video/converter/attribute/src.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ export default class Src implements ConverterInterface {
4343
const fileRegExp = new RegExp("^(?:https:|http:)?\\/\\/.*[\\\\\\/].+\\.(webm|mp4|ogv)(?!\w)");
4444

4545
if (youtubeRegExp.test(value)) {
46-
return "https://www.youtube.com/embed/" + youtubeRegExp.exec(value)[1] + (data.autoplay === "true" ? "?autoplay=1" : "");
46+
return "https://www.youtube.com/embed/" + youtubeRegExp.exec(value)[1];
4747
} else if (vimeoRegExp.test(value)) {
48-
return "https://player.vimeo.com/video/" + vimeoRegExp.exec(value)[3] + "?title=0&byline=0&portrait=0" + (data.autoplay === "true" ? "&autoplay=1" : "");
48+
return "https://player.vimeo.com/video/" + vimeoRegExp.exec(value)[3] + "?title=0&byline=0&portrait=0";
4949
} else if (fileRegExp.test(value)) {
5050
const result = fileRegExp.exec(value);
5151
return result[1] + ":" + value;

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/content-type/video/converter/attribute/videosrc.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ export default class VideoSrc implements ConverterInterface {
3838

3939
if (youtubeRegExp.test(value)) {
4040
return "https://www.youtube.com/embed/" + youtubeRegExp.exec(value)[1] +
41-
(data.autoplay === "true" ? "?autoplay=1" : "");
41+
(data.autoplay === "true" ? "?autoplay=1&mute=1" : "");
4242
} else if (vimeoRegExp.test(value)) {
4343
return "https://player.vimeo.com/video/" + vimeoRegExp.exec(value)[3] +
44-
"?title=0&byline=0&portrait=0" + (data.autoplay === "true" ? "&autoplay=1" : "");
44+
"?title=0&byline=0&portrait=0" + (data.autoplay === "true" ? "&autoplay=1&autopause=0&muted=1" : "");
4545
}
4646

4747
return value;

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/content-type/video/preview.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,14 @@ export default class Preview extends BasePreview {
4040
return (vimeoRegExp.test(src) || youtubeRegExp.test(src));
4141
}
4242

43+
/**
44+
* After render callback
45+
*
46+
* @param {HTMLVideoElement} videoElement
47+
* @param {Preview} self
48+
*/
49+
public onAfterRender(videoElement: HTMLVideoElement, self: Preview) {
50+
// Assign muted attribute explicitly due to API issues
51+
videoElement.muted = self.data.video.attributes().autoplay;
52+
}
4353
}

0 commit comments

Comments
 (0)