# elementor/4.3.0/assets/js/youtube-handler.js

Elementor Website Builder – more than just a page builder, version 4.3.0. 106 lines.

- Page: https://pluginprobe.com/plugins/elementor/4.3.0/code/assets/js/youtube-handler.js
- Raw: https://pluginprobe.com/plugins/elementor/4.3.0/raw/assets/js/youtube-handler.js
- Modified: 2026-09-01T11:47:36+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/elementor/4.3.0/code/assets/js/youtube-handler.js#L10-L20`.

```javascript
"use strict";

(function() {

//#region \0rolldown/runtime.js
	var __defProp = Object.defineProperty;
	var __name = (target, value) => __defProp(target, "name", {
		value,
		configurable: true
	});

//#endregion

//#region modules/atomic-widgets/elements/atomic-youtube/youtube-handler.js
	var _frontendHandlers = (globalThis.elementorV2.frontendHandlers);
	var getYoutubeVideoIdFromUrl = (url) => {
		const match = url.match(/^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?vi?=|(?:embed|v|vi|user|shorts)\/))([^?&"'>]+)/);
		return match ? match[1] : null;
	};
	var loadYouTubeAPI = () => {
		return new Promise((resolve) => {
			if (window.YT && window.YT.loaded) {
				resolve(window.YT);
				return;
			}
			const YOUTUBE_IFRAME_API_URL = "https://www.youtube.com/iframe_api";
			if (!document.querySelector(`script[src="${YOUTUBE_IFRAME_API_URL}"]`)) {
				const tag = document.createElement("script");
				tag.src = YOUTUBE_IFRAME_API_URL;
				const firstScriptTag = document.getElementsByTagName("script")[0];
				firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
			}
			const checkYT = () => {
				if (window.YT && window.YT.loaded) resolve(window.YT);
				else setTimeout(checkYT, 350);
			};
			checkYT();
		});
	};
	(0, _frontendHandlers.register)({
		elementType: "e-youtube",
		id: "e-youtube-handler",
		callback: ({ element }) => {
			const youtubeElement = document.createElement("div");
			youtubeElement.style.height = "100%";
			element.appendChild(youtubeElement);
			const settingsAttr = element.getAttribute("data-settings");
			const parsedSettings = settingsAttr ? JSON.parse(settingsAttr) : {};
			const videoId = getYoutubeVideoIdFromUrl(parsedSettings.source);
			if (!videoId) return;
			let player;
			let observer;
			const prepareYTVideo = (YT) => {
				const playerOptions = {
					videoId,
					events: {
						onReady: () => {
							if (parsedSettings.mute) player.mute();
							if (parsedSettings.autoplay) player.playVideo();
						},
						onStateChange: (event) => {
							if (event.data === YT.PlayerState.ENDED && parsedSettings.loop) player.seekTo(parsedSettings.start || 0);
						}
					},
					playerVars: {
						controls: parsedSettings.controls ? 1 : 0,
						rel: parsedSettings.rel ? 0 : 1,
						cc_load_policy: parsedSettings.cc_load_policy ? 1 : 0,
						autoplay: parsedSettings.autoplay ? 1 : 0,
						start: parsedSettings.start,
						end: parsedSettings.end
					}
				};
				if (parsedSettings.privacy) {
					playerOptions.host = "https://www.youtube-nocookie.com";
					playerOptions.origin = window.location.hostname;
				}
				player = new YT.Player(youtubeElement, playerOptions);
				return player;
			};
			if (parsedSettings.lazyload) {
				observer = new IntersectionObserver((entries) => {
					if (entries[0].isIntersecting) {
						loadYouTubeAPI().then((apiObject) => prepareYTVideo(apiObject));
						observer.unobserve(element);
					}
				});
				observer.observe(element);
			} else loadYouTubeAPI().then((apiObject) => prepareYTVideo(apiObject));
			return () => {
				if (player && "function" === typeof player.destroy) {
					player.destroy();
					player = null;
				}
				if (element.contains(youtubeElement)) element.removeChild(youtubeElement);
				if (observer && "function" === typeof observer.disconnect) {
					observer.disconnect();
					observer = null;
				}
			};
		}
	});

//#endregion
})();
//# sourceMappingURL=youtube-handler.js.map
```
