PluginProbe
Elementor Website Builder – more than just a page builder / 3.32.3
Elementor Website Builder – more than just a page builder v3.32.3
4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 All 454 releases
← All changes | assets/js/youtube-handler.js +134 -99 4.3.0-beta2 → 3.32.3 View file →
@@ -1,106 +1,141 @@
1 +/*! elementor - v3.32.0 - 29-09-2025 */
1 2 "use strict";
3 +(self["webpackChunkelementorFrontend"] = self["webpackChunkelementorFrontend"] || []).push([["youtube-handler"],{
2 4
3 -(function() {
5 +/***/ "../modules/atomic-widgets/elements/atomic-youtube/youtube-handler.js":
6 +/*!****************************************************************************!*\
7 + !*** ../modules/atomic-widgets/elements/atomic-youtube/youtube-handler.js ***!
8 + \****************************************************************************/
9 +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
4 10
5 -//#region \0rolldown/runtime.js
6 - var __defProp = Object.defineProperty;
7 - var __name = (target, value) => __defProp(target, "name", {
8 - value,
9 - configurable: true
10 - });
11 11
12 -//#endregion
13 12
14 -//#region modules/atomic-widgets/elements/atomic-youtube/youtube-handler.js
15 - var _frontendHandlers = (globalThis.elementorV2.frontendHandlers);
16 - var getYoutubeVideoIdFromUrl = (url) => {
17 - const match = url.match(/^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?vi?=|(?:embed|v|vi|user|shorts)\/))([^?&"'>]+)/);
18 - return match ? match[1] : null;
19 - };
20 - var loadYouTubeAPI = () => {
21 - return new Promise((resolve) => {
22 - if (window.YT && window.YT.loaded) {
23 - resolve(window.YT);
24 - return;
25 - }
26 - const YOUTUBE_IFRAME_API_URL = "https://www.youtube.com/iframe_api";
27 - if (!document.querySelector(`script[src="${YOUTUBE_IFRAME_API_URL}"]`)) {
28 - const tag = document.createElement("script");
29 - tag.src = YOUTUBE_IFRAME_API_URL;
30 - const firstScriptTag = document.getElementsByTagName("script")[0];
31 - firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
32 - }
33 - const checkYT = () => {
34 - if (window.YT && window.YT.loaded) resolve(window.YT);
35 - else setTimeout(checkYT, 350);
36 - };
37 - checkYT();
38 - });
39 - };
40 - (0, _frontendHandlers.register)({
41 - elementType: "e-youtube",
42 - id: "e-youtube-handler",
43 - callback: ({ element }) => {
44 - const youtubeElement = document.createElement("div");
45 - youtubeElement.style.height = "100%";
46 - element.appendChild(youtubeElement);
47 - const settingsAttr = element.getAttribute("data-settings");
48 - const parsedSettings = settingsAttr ? JSON.parse(settingsAttr) : {};
49 - const videoId = getYoutubeVideoIdFromUrl(parsedSettings.source);
50 - if (!videoId) return;
51 - let player;
52 - let observer;
53 - const prepareYTVideo = (YT) => {
54 - const playerOptions = {
55 - videoId,
56 - events: {
57 - onReady: () => {
58 - if (parsedSettings.mute) player.mute();
59 - if (parsedSettings.autoplay) player.playVideo();
60 - },
61 - onStateChange: (event) => {
62 - if (event.data === YT.PlayerState.ENDED && parsedSettings.loop) player.seekTo(parsedSettings.start || 0);
63 - }
64 - },
65 - playerVars: {
66 - controls: parsedSettings.controls ? 1 : 0,
67 - rel: parsedSettings.rel ? 0 : 1,
68 - cc_load_policy: parsedSettings.cc_load_policy ? 1 : 0,
69 - autoplay: parsedSettings.autoplay ? 1 : 0,
70 - start: parsedSettings.start,
71 - end: parsedSettings.end
72 - }
73 - };
74 - if (parsedSettings.privacy) {
75 - playerOptions.host = "https://www.youtube-nocookie.com";
76 - playerOptions.origin = window.location.hostname;
77 - }
78 - player = new YT.Player(youtubeElement, playerOptions);
79 - return player;
80 - };
81 - if (parsedSettings.lazyload) {
82 - observer = new IntersectionObserver((entries) => {
83 - if (entries[0].isIntersecting) {
84 - loadYouTubeAPI().then((apiObject) => prepareYTVideo(apiObject));
85 - observer.unobserve(element);
86 - }
87 - });
88 - observer.observe(element);
89 - } else loadYouTubeAPI().then((apiObject) => prepareYTVideo(apiObject));
90 - return () => {
91 - if (player && "function" === typeof player.destroy) {
92 - player.destroy();
93 - player = null;
94 - }
95 - if (element.contains(youtubeElement)) element.removeChild(youtubeElement);
96 - if (observer && "function" === typeof observer.disconnect) {
97 - observer.disconnect();
98 - observer = null;
99 - }
100 - };
101 - }
102 - });
13 +var _frontendHandlers = __webpack_require__(/*! @elementor/frontend-handlers */ "@elementor/frontend-handlers");
14 +const getYoutubeVideoIdFromUrl = url => {
15 + const regex = /^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?vi?=|(?:embed|v|vi|user|shorts)\/))([^?&"'>]+)/;
16 + const match = url.match(regex);
17 + return match ? match[1] : null;
18 +};
19 +const loadYouTubeAPI = () => {
20 + return new Promise(resolve => {
21 + if (window.YT && window.YT.loaded) {
22 + resolve(window.YT);
23 + return;
24 + }
25 + const YOUTUBE_IFRAME_API_URL = 'https://www.youtube.com/iframe_api';
26 + if (!document.querySelector(`script[src="${YOUTUBE_IFRAME_API_URL}"]`)) {
27 + const tag = document.createElement('script');
28 + tag.src = YOUTUBE_IFRAME_API_URL;
29 + const firstScriptTag = document.getElementsByTagName('script')[0];
30 + firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
31 + }
32 + const checkYT = () => {
33 + if (window.YT && window.YT.loaded) {
34 + resolve(window.YT);
35 + } else {
36 + setTimeout(checkYT, 350);
37 + }
38 + };
39 + checkYT();
40 + });
41 +};
42 +(0, _frontendHandlers.register)({
43 + elementType: 'e-youtube',
44 + uniqueId: 'e-youtube-handler',
45 + callback: _ref => {
46 + let {
47 + element
48 + } = _ref;
49 + const youtubeElement = document.createElement('div');
50 + youtubeElement.style.height = '100%';
51 + element.appendChild(youtubeElement);
52 + const settingsAttr = element.getAttribute('data-settings');
53 + const parsedSettings = settingsAttr ? JSON.parse(settingsAttr) : {};
54 + const videoId = getYoutubeVideoIdFromUrl(parsedSettings.source);
55 + if (!videoId) {
56 + return;
57 + }
58 + let player;
59 + let observer;
60 + const prepareYTVideo = YT => {
61 + const playerOptions = {
62 + videoId,
63 + events: {
64 + onReady: () => {
65 + if (parsedSettings.mute) {
66 + player.mute();
67 + }
68 + if (parsedSettings.autoplay) {
69 + player.playVideo();
70 + }
71 + },
72 + onStateChange: event => {
73 + if (event.data === YT.PlayerState.ENDED && parsedSettings.loop) {
74 + player.seekTo(parsedSettings.start || 0);
75 + }
76 + }
77 + },
78 + playerVars: {
79 + controls: parsedSettings.controls ? 1 : 0,
80 + rel: parsedSettings.rel ? 0 : 1,
81 + cc_load_policy: parsedSettings.cc_load_policy ? 1 : 0,
82 + autoplay: parsedSettings.autoplay ? 1 : 0,
83 + start: parsedSettings.start,
84 + end: parsedSettings.end
85 + }
86 + };
103 87
104 -//#endregion
105 -})();
88 + // To handle CORS issues, when the default host is changed, the origin parameter has to be set.
89 + if (parsedSettings.privacy) {
90 + playerOptions.host = 'https://www.youtube-nocookie.com';
91 + playerOptions.origin = window.location.hostname;
92 + }
93 + player = new YT.Player(youtubeElement, playerOptions);
94 + return player;
95 + };
96 + if (parsedSettings.lazyload) {
97 + observer = new IntersectionObserver(entries => {
98 + if (entries[0].isIntersecting) {
99 + loadYouTubeAPI().then(apiObject => prepareYTVideo(apiObject));
100 + observer.unobserve(element);
101 + }
102 + });
103 + observer.observe(element);
104 + } else {
105 + loadYouTubeAPI().then(apiObject => prepareYTVideo(apiObject));
106 + }
107 + return () => {
108 + if (player && 'function' === typeof player.destroy) {
109 + player.destroy();
110 + player = null;
111 + }
112 + if (element.contains(youtubeElement)) {
113 + element.removeChild(youtubeElement);
114 + }
115 + if (observer && 'function' === typeof observer.disconnect) {
116 + observer.disconnect();
117 + observer = null;
118 + }
119 + };
120 + }
121 +});
122 +
123 +/***/ }),
124 +
125 +/***/ "@elementor/frontend-handlers":
126 +/*!***********************************************!*\
127 + !*** external "elementorV2.frontendHandlers" ***!
128 + \***********************************************/
129 +/***/ ((module) => {
130 +
131 +module.exports = elementorV2.frontendHandlers;
132 +
133 +/***/ })
134 +
135 +},
136 +/******/ __webpack_require__ => { // webpackRuntimeModules
137 +/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
138 +/******/ var __webpack_exports__ = (__webpack_exec__("../modules/atomic-widgets/elements/atomic-youtube/youtube-handler.js"));
139 +/******/ }
140 +]);
106 141 //# sourceMappingURL=youtube-handler.js.map