| @@ -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 |