PluginProbe
Elementor Website Builder – more than just a page builder / 4.2.2
Elementor Website Builder – more than just a page builder v4.2.2
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 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
elementor / assets / js / youtube-handler.js

youtube-handler.js in Elementor Website Builder – more than just a page builder 4.2.2, at assets/js/youtube-handler.js

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