|
@@ -119,14 +119,14 @@ export default class SlideContent {
|
|
|
}
|
|
|
}
|
|
|
// Videos
|
|
|
- else if ( backgroundVideo && !this.Reveal.isSpeakerNotes() ) {
|
|
|
+ else if ( backgroundVideo ) {
|
|
|
let video = document.createElement( 'video' );
|
|
|
|
|
|
if( backgroundVideoLoop ) {
|
|
|
video.setAttribute( 'loop', '' );
|
|
|
}
|
|
|
|
|
|
- if( backgroundVideoMuted ) {
|
|
|
+ if( backgroundVideoMuted || this.Reveal.isSpeakerNotes() ) {
|
|
|
video.muted = true;
|
|
|
}
|
|
|
|
|
@@ -280,7 +280,9 @@ export default class SlideContent {
|
|
|
*/
|
|
|
startEmbeddedContent( element ) {
|
|
|
|
|
|
- if( element && !this.Reveal.isSpeakerNotes() ) {
|
|
|
+ if( element ) {
|
|
|
+
|
|
|
+ const isSpeakerNotesWindow = this.Reveal.isSpeakerNotes();
|
|
|
|
|
|
// Restart GIFs
|
|
|
queryAll( element, 'img[src$=".gif"]' ).forEach( el => {
|
|
@@ -306,6 +308,9 @@ export default class SlideContent {
|
|
|
|
|
|
if( autoplay && typeof el.play === 'function' ) {
|
|
|
|
|
|
+ // In teh speaker view we only auto-play muted media
|
|
|
+ if( isSpeakerNotesWindow && !el.muted ) return;
|
|
|
+
|
|
|
// If the media is ready, start playback
|
|
|
if( el.readyState > 1 ) {
|
|
|
this.startEmbeddedMedia( { target: el } );
|
|
@@ -337,27 +342,33 @@ export default class SlideContent {
|
|
|
}
|
|
|
} );
|
|
|
|
|
|
- // Normal iframes
|
|
|
- queryAll( element, 'iframe[src]' ).forEach( el => {
|
|
|
- if( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {
|
|
|
- return;
|
|
|
- }
|
|
|
+ // Don't play iframe content in the speaker view since we can't
|
|
|
+ // guarantee that it's muted
|
|
|
+ if( !isSpeakerNotesWindow ) {
|
|
|
|
|
|
- this.startEmbeddedIframe( { target: el } );
|
|
|
- } );
|
|
|
+ // Normal iframes
|
|
|
+ queryAll( element, 'iframe[src]' ).forEach( el => {
|
|
|
+ if( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- // Lazy loading iframes
|
|
|
- queryAll( element, 'iframe[data-src]' ).forEach( el => {
|
|
|
- if( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {
|
|
|
- return;
|
|
|
- }
|
|
|
+ this.startEmbeddedIframe( { target: el } );
|
|
|
+ } );
|
|
|
|
|
|
- if( el.getAttribute( 'src' ) !== el.getAttribute( 'data-src' ) ) {
|
|
|
- el.removeEventListener( 'load', this.startEmbeddedIframe ); // remove first to avoid dupes
|
|
|
- el.addEventListener( 'load', this.startEmbeddedIframe );
|
|
|
- el.setAttribute( 'src', el.getAttribute( 'data-src' ) );
|
|
|
- }
|
|
|
- } );
|
|
|
+ // Lazy loading iframes
|
|
|
+ queryAll( element, 'iframe[data-src]' ).forEach( el => {
|
|
|
+ if( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if( el.getAttribute( 'src' ) !== el.getAttribute( 'data-src' ) ) {
|
|
|
+ el.removeEventListener( 'load', this.startEmbeddedIframe ); // remove first to avoid dupes
|
|
|
+ el.addEventListener( 'load', this.startEmbeddedIframe );
|
|
|
+ el.setAttribute( 'src', el.getAttribute( 'data-src' ) );
|
|
|
+ }
|
|
|
+ } );
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|