Your IP : 18.222.50.201


Current Path : /var/www/www-root/data/www/monolith-realty.ru/bitrix/js/landing/mediaplayer/
Upload File :
Current File : /var/www/www-root/data/www/monolith-realty.ru/bitrix/js/landing/mediaplayer/youtube_mediaplayer.js

;(function() {
	"use strict";

	BX.namespace("BX.Landing.MediaPlayer");

	const addQueryParams = BX.Landing.Utils.addQueryParams;
	const getQueryParams = BX.Landing.Utils.getQueryParams;

	/**
	 * Implements interface for works with youtube player
	 * @extends {BX.Landing.MediaPlayer.BasePlayer}
	 * @param {HTMLIFrameElement} iframe
	 * @param {Object} additionalParameters - additional params for player
	 * @inheritDoc
	 * @constructor
	 */
	BX.Landing.MediaPlayer.Youtube = function(iframe, additionalParameters)
	{
		BX.Landing.MediaPlayer.BasePlayer.apply(this, arguments);

		// load API
		if (!BX.Landing.MediaPlayer.Youtube.isApiAdded)
		{
			const tag = document.createElement('script');
			tag.src = "https://www.youtube.com/iframe_api";
			const firstScriptTag = document.getElementsByTagName('script')[0];
			firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

			BX.Landing.MediaPlayer.Youtube.isApiAdded = true;

			window.onYouTubeIframeAPIReady = BX.Landing.MediaPlayer.Youtube.onApiReady;
			window.onPlayerReady = BX.Landing.MediaPlayer.Youtube.onPlayerReady;
		}

		if (BX.Landing.MediaPlayer.Youtube.isApiLoaded())
		{
			this.init();
		}
		else
		{
			BX.Landing.MediaPlayer.Youtube.sheduldedPlayers.push(this);
		}

	};

	/**
	 * Check is YT iframe Api loaded
	 */
	BX.Landing.MediaPlayer.Youtube.isApiLoaded = function()
	{
		return (typeof YT !== "undefined" && typeof YT.Player !== "undefined");
	};

	/**
	 * Flag, indicating whether API was added on page (It doesn't matter if it's loaded or not yet)
	 * @type {boolean}
	 */
	BX.Landing.MediaPlayer.Youtube.isApiAdded = false;

	/**
	 * List of players, then added before api loaded, for lazy load
	 * @type {*[]}
	 */
	BX.Landing.MediaPlayer.Youtube.sheduldedPlayers = [];

	BX.Landing.MediaPlayer.Youtube.onApiReady = function()
	{
		BX.Landing.MediaPlayer.Youtube.sheduldedPlayers.forEach(mediaPlayer => {
			mediaPlayer.init();
		});
	}

	BX.Landing.MediaPlayer.Youtube.prototype = {
		constructor: BX.Landing.MediaPlayer.Youtube,
		__proto__: BX.Landing.MediaPlayer.BasePlayer.prototype,

		init: function()
		{
			let src = this.iframe.src;
			if ((new RegExp("^\/\/")).test(src))
			{
				src = src.replace("//", "https://");
			}
			if ((new RegExp("^http:\/\/")).test(src))
			{
				src = src.replace("http://", "https://");
			}

			this.iframe.src = addQueryParams(src, {
				enablejsapi: 1,
				origin: window.location.protocol + '//' + window.location.host,
			});

			this.player = new YT.Player(this.iframe, {
				events: {
					onReady: () => {
						void (this.parameters.autoplay ? this.play() : this.pause());
						void (this.parameters.mute ? this.mute() : this.unMute());
						void (this.parameters.loop ? this.setLoop(true) : this.setLoop(false));
						this.onPlayerReady();
					}
				}
			});
		},

		/**
		 * Starts playback
		 */
		play: function()
		{
			this.player.playVideo();
		},

		/**
		 * Stops playback
		 */
		pause: function()
		{
			this.player.pauseVideo();
		},

		/**
		 * Stops video
		 */
		stop: function()
		{
			this.player.stopVideo();
		},

		/**
		 * Sets loop playback
		 * @param {Boolean} value
		 */
		setLoop: function(value)
		{
			this.parameters.loop = value;

			if (!this.loopInited)
			{
				this.loopInited = true;
				this.player.addEventListener("onStateChange", function(event) {
					void (this.parameters.loop && event.data === 0 && this.play());
				}.bind(this));
			}
		},

		/**
		 * Sets start video
		 * @param seconds
		 */
		seekTo: function(seconds)
		{
			this.player.seekTo(seconds);
		},

		/**
		 * Disables sound
		 */
		mute: function()
		{
			this.player.mute();
		},

		/**
		 * Enables sound
		 */
		unMute: function()
		{
			this.player.unMute();
		}
	};
})();