varbase_heroslider_media-9.0.0-alpha1/js/oembed-frame.heroslider.youtube.js

js/oembed-frame.heroslider.youtube.js
/**
 * @file
 * Behaviors of Youtube player in the Hero slider OEmbed iframe.
 */

function ready(fn) {
  if (document.readyState !== 'loading') {
    fn();
  } else if (document.addEventListener) {
    document.addEventListener('DOMContentLoaded', fn);
  } else {
    document.attachEvent('onreadystatechange', function onReadyStateChange() {
      if (document.readyState !== 'loading') {
        fn();
      }
    });
  }
}

const tag = document.createElement('script');
tag.src = '//www.youtube.com/player_api';
const firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

ready(function initializeYoutubePlayer() {
  const mediaIframe = document.querySelector('iframe');
  mediaIframe.setAttribute('id', 'media-oembed-iframe');
  mediaIframe.style.opacity = '0';
  document.body.style.backgroundColor = '#000000';

  let playerConfigured = false;
  let youtubePlayer;

  function onPlayerReady(event) {
    event.target.mute();
    event.target.setVolume(0);
    event.target.playVideo();
  }

  function onPlayerStateChange(event) {
    if (event.data === window.YT.PlayerState.BUFFERING) {
      mediaIframe.style.opacity = '0';
    } else {
      mediaIframe.style.opacity = '1';
    }

    if (event.data === window.YT.PlayerState.PLAYING) {
      youtubePlayer.isPlaying = true;
    } else {
      youtubePlayer.isPlaying = false;
    }

    if (event.data === window.YT.PlayerState.ENDED) {
      window.parent.postMessage('endedYoutube', '*');
      youtubePlayer.pauseVideo();
      youtubePlayer.seekTo(0);
    } else {
      window.parent.postMessage('playingYoutube', '*');
    }
  }

  function actionProcessor(evt) {
    // Manage Youtube video.
    if (evt.data === 'play') {
      const youtubeIframe = document.querySelector(
        'iframe[src*="youtube.com"]',
      );
      if (youtubeIframe !== undefined && youtubeIframe.src !== undefined) {
        if (!playerConfigured) {
          let youtubeURL = String(youtubeIframe.src);
          youtubeURL = youtubeURL.replace(/autoplay=0/gi, 'autoplay=1');
          youtubeURL = youtubeURL.replace(/controls=1/gi, 'controls=0');
          youtubeURL += '&controls=0';
          youtubeURL += '&enablejsapi=1';
          youtubeURL += '&showinfo=0'; // Hide the video title.
          youtubeURL += '&modestbranding=1'; // Hide the Youtube Logo.
          youtubeURL += '&loop=1'; // Run the video in a loop.
          youtubeURL += '&fs=1'; // Hide the full screen button.
          youtubeURL += '&cc_load_policy=1'; // Hide closed captions.
          youtubeURL += '&iv_load_policy=1'; // Hide the Video Annotations.
          youtubeURL += '&volume=0';
          youtubeURL += '&rel=0';
          youtubeIframe.src = youtubeURL;
          youtubeURL = undefined;

          youtubePlayer = new window.YT.Player(youtubeIframe.id, {
            playerVars: {
              autoplay: 1, // Auto-play the video on load.
              controls: 0, // Show pause/play buttons in player.
              showinfo: 0, // Hide the video title.
              modestbranding: 1, // Hide the Youtube Logo.
              loop: 1, // Run the video in a loop.
              fs: 0, // Hide the full screen button.
              autohide: 0, // Hide video controls when playing.
              rel: 0, // Hide related videos.
            },
            events: {
              onReady: onPlayerReady,
              onStateChange: onPlayerStateChange,
            },
          });

          playerConfigured = true;
        } else if (typeof youtubePlayer.playVideo === 'function') {
          youtubePlayer.playVideo();
        }
      }
    } else if (evt.data === 'pause') {
      if (playerConfigured) {
        youtubePlayer.pauseVideo();
        youtubePlayer.isPlaying = false;
      }
    }
  }

  // Setup the event listener for messaging.
  if (window.addEventListener) {
    window.addEventListener('message', actionProcessor, false);
  } else {
    window.attachEvent('onmessage', actionProcessor);
  }
});

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc