$.fn.video_cta = function()

in src/assets/js/youtubeplayer.js [42:216]


  $.fn.video_cta = function (options) {
    var settings = $.extend(
      {
        yt_object: null,
        container: '<div id="stdVideo"><div id="stdVideo-player"></div></div>',
        container_id: 'stdVideo-player',
        close: '#stdVideo-close',
        cta: '.video-link',
        cta_container: '.video-cta',
        youtube_id_data: 'youtube_id',
        target_data: 'youtube_target',
        default_target: null,
      },
      options
    );
    var $link = $(settings.cta);
    var $link_container = $link.closest(settings.cta_container);
    var yt_player;
    var $container;
    var $target = settings.default_target;
    var playing = false;
    var is_ios = navigator.userAgent.match(/(iPod|iPhone|iPad)/) != null;
    var is_android = /(android)/i.test(navigator.userAgent);
    var mobileOS = is_ios || is_android;

    if (settings.default_target.length) {
      settings.default_target.find('.bg').on('click', closeVideo);
    }

    $('body')
      // Deregister to avoiding multiple bindings.
      .off('keyup.escCloseVideo')
      .on('keyup.escCloseVideo', function (e) {
        // 27 is the escape key.
        if (e.originalEvent.keyCode === 27 && closeVideo) {
          closeVideo();
        }
      });

    if ($(settings.close).length) {
      $(settings.close).on('click', closeVideo);
    }

    this.on('click', settings.cta, function (e) {
      e.preventDefault();

      if ($('#' + settings.container_id).length && playing) {
        closeVideo({ fast: true });
      }

      $link = $(this);
      $link_container = $link.closest(settings.cta_container);
      $target = $('#' + $link.data(settings.target_data)).length
        ? $('#' + $link.data(settings.target_data))
        : settings.default_target;
      $link.addClass('loading');
      $target.addClass('loading');
      var id =
        typeof $link.data(settings.youtube_id_data) !== typeof undefined &&
        $link.data(settings.youtube_id_data) !== false
          ? $link.data(settings.youtube_id_data)
          : $link.attr('href');
      loadVideo(id);
    });

    // The API calls this function when the player state changes
    /*
			ENDED
			PLAYING
			PAUSED
			BUFFERING
			CUED
		*/
    function onPlayerStateChange(event) {
      // Open video player when playing
      if (event.data == settings.yt_object.PlayerState.PLAYING && !playing) {
        openVideo();

        //  Close video when ended
      } else if (event.data == settings.yt_object.PlayerState.ENDED) {
        closeVideo();
      }
    }

    // The API calls this function when the player is ready.
    function onPlayerReady() {
      if (playing) {
        closeVideo();
      }

      if (mobileOS) {
        openVideo();
      } else {
        yt_player.playVideo();
      }
    }

    function loadVideo(id) {
      $container = $(settings.container);

      // if (settings.close) {
      // $close = $(settings.close);
      // $close.appendTo($container);
      // $close.on('click', closeVideo);
      // }

      if ($('#' + $link.data(settings.target_data)).length) {
        // if custom target
        $container.appendTo($target);
      } else {
        // if default player
        $container.appendTo($target.find('.cell'));
        $target.velocity('fadeIn');
      }

      // creating a player: https://developers.google.com/youtube/iframe_api_reference#Getting_Started
      yt_player = new settings.yt_object.Player(settings.container_id, {
        height: '390',
        width: '640',
        videoId: id,
        events: {
          onReady: onPlayerReady,
          onStateChange: onPlayerStateChange,
        },
        playerVars: {
          controls: 1,
          enablejsapi: 1,
          loop: 0,
          showinfo: 0,
          modestbranding: 1,
        },
      });
    }

    function openVideo() {
      playing = true;
      $container.addClass('playing');
      $link_container.addClass('playing');
      $link.removeClass('loading');
      $target.removeClass('loading');
    }

    function closeVideo(options) {
      if (!yt_player || !yt_player.stopVideo) {
        console.log(
          'Bailing early from closeVideo due to yt_player being undefined or stopVideo method missing.'
        );
        return;
      }

      var v = $.extend(
        {
          fast: false,
        },
        options
      );

      yt_player.stopVideo();
      playing = false;
      $container.removeClass('playing');
      $link_container.removeClass('playing');
      if (!$('#' + $link.data(settings.target_data)).length) {
        $target.velocity('fadeOut');
      }
      if (v.fast) {
        yt_player = null;
        $container.remove();
      } else {
        setTimeout(function () {
          yt_player = null;
          $container.remove();
        }, 1000);
      }
    }
  };