PluginProbe
Elementor Website Builder – more than just a page builder / 3.4.7
Elementor Website Builder – more than just a page builder v3.4.7
4.3.4 4.3.3 4.3.2 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 All 457 releases
← All changes | assets/js/frontend.js +1438 -1005 4.2.0-beta1 → 3.4.7 View file →
@@ -1,6 +1,6 @@
1 -"use strict";
2 -(self["webpackChunkelementorFrontend"] = self["webpackChunkelementorFrontend"] || []).push([["frontend"],{
1 +/*! elementor - v3.4.7 - 31-10-2021 */
2 +(self["webpackChunkelementor"] = self["webpackChunkelementor"] || []).push([["frontend"],{
3 3
4 4 /***/ "../assets/dev/js/frontend/documents-manager.js":
5 5 /*!******************************************************!*\
6 6 !*** ../assets/dev/js/frontend/documents-manager.js ***!
@@ -6,16 +6,20 @@
6 6 !*** ../assets/dev/js/frontend/documents-manager.js ***!
7 7 \******************************************************/
8 8 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
9 9
10 +"use strict";
10 11
11 12
12 13 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
14 +
13 15 Object.defineProperty(exports, "__esModule", ({
14 16 value: true
15 17 }));
16 -exports["default"] = void 0;
18 +exports.default = void 0;
19 +
17 20 var _document = _interopRequireDefault(__webpack_require__(/*! ./document */ "../assets/dev/js/frontend/document.js"));
21 +
18 22 class _default extends elementorModules.ViewModule {
19 23 constructor(...args) {
20 24 super(...args);
21 25 this.documents = {};
@@ -21,8 +25,9 @@
21 25 this.documents = {};
22 26 this.initDocumentClasses();
23 27 this.attachDocumentsClasses();
24 28 }
29 +
25 30 getDefaultSettings() {
26 31 return {
27 32 selectors: {
28 33 document: '.elementor'
@@ -28,8 +33,9 @@
28 33 document: '.elementor'
29 34 }
30 35 };
31 36 }
37 +
32 38 getDefaultElements() {
33 39 const selectors = this.getSettings('selectors');
34 40 return {
35 41 $documents: jQuery(selectors.document)
@@ -34,8 +40,9 @@
34 40 return {
35 41 $documents: jQuery(selectors.document)
36 42 };
37 43 }
44 +
38 45 initDocumentClasses() {
39 46 this.documentClasses = {
40 47 base: _document.default
41 48 };
@@ -40,27 +47,32 @@
40 47 base: _document.default
41 48 };
42 49 elementorFrontend.hooks.doAction('elementor/frontend/documents-manager/init-classes', this);
43 50 }
51 +
44 52 addDocumentClass(documentType, documentClass) {
45 53 this.documentClasses[documentType] = documentClass;
46 54 }
55 +
47 56 attachDocumentsClasses() {
48 57 this.elements.$documents.each((index, document) => this.attachDocumentClass(jQuery(document)));
49 58 }
59 +
50 60 attachDocumentClass($document) {
51 61 const documentData = $document.data(),
52 - documentID = documentData.elementorId,
53 - documentType = documentData.elementorType,
54 - DocumentClass = this.documentClasses[documentType] || this.documentClasses.base;
62 + documentID = documentData.elementorId,
63 + documentType = documentData.elementorType,
64 + DocumentClass = this.documentClasses[documentType] || this.documentClasses.base;
55 65 this.documents[documentID] = new DocumentClass({
56 66 $element: $document,
57 67 id: documentID
58 68 });
59 69 }
70 +
60 71 }
61 -exports["default"] = _default;
62 72
73 +exports.default = _default;
74 +
63 75 /***/ }),
64 76
65 77 /***/ "../assets/dev/js/frontend/elements-handlers-manager.js":
66 78 /*!**************************************************************!*\
@@ -67,18 +79,18 @@
67 79 !*** ../assets/dev/js/frontend/elements-handlers-manager.js ***!
68 80 \**************************************************************/
69 81 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
70 82
83 +"use strict";
71 84
72 85
73 86 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
74 -__webpack_require__(/*! core-js/modules/esnext.iterator.constructor.js */ "../node_modules/core-js/modules/esnext.iterator.constructor.js");
75 -__webpack_require__(/*! core-js/modules/esnext.iterator.for-each.js */ "../node_modules/core-js/modules/esnext.iterator.for-each.js");
87 +
76 88 var _global = _interopRequireDefault(__webpack_require__(/*! ./handlers/global */ "../assets/dev/js/frontend/handlers/global.js"));
77 -var _container = _interopRequireDefault(__webpack_require__(/*! ./handlers/container/container */ "../assets/dev/js/frontend/handlers/container/container.js"));
89 +
78 90 var _section = _interopRequireDefault(__webpack_require__(/*! ./handlers/section/section */ "../assets/dev/js/frontend/handlers/section/section.js"));
91 +
79 92 var _column = _interopRequireDefault(__webpack_require__(/*! ./handlers/column */ "../assets/dev/js/frontend/handlers/column.js"));
80 -/* global elementorFrontendConfig */
81 93
82 94 module.exports = function ($) {
83 95 const handlersInstances = {};
84 96 this.elementsHandlers = {
@@ -90,25 +102,16 @@
90 102 'toggle.default': () => __webpack_require__.e(/*! import() | toggle */ "toggle").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/toggle */ "../assets/dev/js/frontend/handlers/toggle.js")),
91 103 'video.default': () => __webpack_require__.e(/*! import() | video */ "video").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/video */ "../assets/dev/js/frontend/handlers/video.js")),
92 104 'image-carousel.default': () => __webpack_require__.e(/*! import() | image-carousel */ "image-carousel").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/image-carousel */ "../assets/dev/js/frontend/handlers/image-carousel.js")),
93 105 'text-editor.default': () => __webpack_require__.e(/*! import() | text-editor */ "text-editor").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/text-editor */ "../assets/dev/js/frontend/handlers/text-editor.js")),
94 - 'wp-widget-media_audio.default': () => __webpack_require__.e(/*! import() | wp-audio */ "wp-audio").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/wp-audio */ "../assets/dev/js/frontend/handlers/wp-audio.js")),
95 - container: _container.default,
96 - section: _section.default,
97 - column: _column.default
106 + 'wp-widget-media_audio.default': () => __webpack_require__.e(/*! import() | wp-audio */ "wp-audio").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/wp-audio */ "../assets/dev/js/frontend/handlers/wp-audio.js"))
98 107 };
99 - if (elementorFrontendConfig.experimentalFeatures['nested-elements']) {
100 - this.elementsHandlers['nested-tabs.default'] = () => __webpack_require__.e(/*! import() | nested-tabs */ "nested-tabs").then(__webpack_require__.bind(__webpack_require__, /*! elementor/modules/nested-tabs/assets/js/frontend/handlers/nested-tabs */ "../modules/nested-tabs/assets/js/frontend/handlers/nested-tabs.js"));
101 - }
102 - if (elementorFrontendConfig.experimentalFeatures['nested-elements']) {
103 - this.elementsHandlers['nested-accordion.default'] = () => __webpack_require__.e(/*! import() | nested-accordion */ "nested-accordion").then(__webpack_require__.bind(__webpack_require__, /*! elementor/modules/nested-accordion/assets/js/frontend/handlers/nested-accordion */ "../modules/nested-accordion/assets/js/frontend/handlers/nested-accordion.js"));
104 - }
105 - if (elementorFrontendConfig.experimentalFeatures.container) {
106 - this.elementsHandlers['contact-buttons.default'] = () => __webpack_require__.e(/*! import() | contact-buttons */ "contact-buttons").then(__webpack_require__.bind(__webpack_require__, /*! elementor/modules/floating-buttons/assets/js/floating-buttons/frontend/handlers/contact-buttons */ "../modules/floating-buttons/assets/js/floating-buttons/frontend/handlers/contact-buttons.js"));
107 - this.elementsHandlers['floating-bars-var-1.default'] = () => __webpack_require__.e(/*! import() | floating-bars */ "floating-bars").then(__webpack_require__.bind(__webpack_require__, /*! elementor/modules/floating-buttons/assets/js/floating-bars/frontend/handlers/floating-bars */ "../modules/floating-buttons/assets/js/floating-bars/frontend/handlers/floating-bars.js"));
108 - }
108 +
109 109 const addGlobalHandlers = () => elementorFrontend.hooks.addAction('frontend/element_ready/global', _global.default);
110 +
110 111 const addElementsHandlers = () => {
112 + this.elementsHandlers.section = _section.default;
113 + this.elementsHandlers.column = _column.default;
111 114 $.each(this.elementsHandlers, (elementName, Handlers) => {
112 115 const elementData = elementName.split('.');
113 116 elementName = elementData[0];
114 117 const skin = elementData[1] || null;
@@ -114,73 +117,86 @@
114 117 const skin = elementData[1] || null;
115 118 this.attachHandler(elementName, Handlers, skin);
116 119 });
117 120 };
118 - const isClassHandler = Handler => Handler.prototype?.getUniqueHandlerID;
119 - const addHandlerWithHook = (elementBaseName, Handler, skin = 'default') => {
121 +
122 + const isClassHandler = Handler => {
123 + var _Handler$prototype;
124 +
125 + return (_Handler$prototype = Handler.prototype) === null || _Handler$prototype === void 0 ? void 0 : _Handler$prototype.getUniqueHandlerID;
126 + };
127 +
128 + const addHandlerWithHook = (elementName, Handler, skin = 'default') => {
120 129 skin = skin ? '.' + skin : '';
121 - const elementName = elementBaseName + skin;
122 - elementorFrontend.hooks.addAction(`frontend/element_ready/${elementName}`, $element => {
130 + elementorFrontend.hooks.addAction(`frontend/element_ready/${elementName}${skin}`, $element => {
123 131 if (isClassHandler(Handler)) {
124 132 this.addHandler(Handler, {
125 - $element,
126 - elementName
133 + $element
127 134 }, true);
128 135 } else {
129 136 const handlerValue = Handler();
130 - if (!handlerValue) {
131 - return;
132 - }
137 +
133 138 if (handlerValue instanceof Promise) {
134 139 handlerValue.then(({
135 140 default: dynamicHandler
136 141 }) => {
137 142 this.addHandler(dynamicHandler, {
138 - $element,
139 - elementName
143 + $element
140 144 }, true);
141 145 });
142 146 } else {
143 147 this.addHandler(handlerValue, {
144 - $element,
145 - elementName
148 + $element
146 149 }, true);
147 150 }
148 151 }
149 152 });
150 153 };
154 +
151 155 this.addHandler = function (HandlerClass, options) {
152 156 const elementID = options.$element.data('model-cid');
153 - let handlerID;
157 + let handlerID; // If element is in edit mode
154 158
155 - // If element is in edit mode
156 159 if (elementID) {
157 160 handlerID = HandlerClass.prototype.getConstructorID();
161 +
158 162 if (!handlersInstances[elementID]) {
159 163 handlersInstances[elementID] = {};
160 164 }
165 +
161 166 const oldHandler = handlersInstances[elementID][handlerID];
167 +
162 168 if (oldHandler) {
163 169 oldHandler.onDestroy();
164 170 }
165 171 }
172 +
166 173 const newHandler = new HandlerClass(options);
167 - elementorFrontend.hooks.doAction(`frontend/element_handler_ready/${options.elementName}`, options.$element, $);
174 +
168 175 if (elementID) {
169 176 handlersInstances[elementID][handlerID] = newHandler;
170 177 }
171 178 };
179 +
172 180 this.attachHandler = (elementName, Handlers, skin) => {
173 181 if (!Array.isArray(Handlers)) {
174 182 Handlers = [Handlers];
175 183 }
184 +
176 185 Handlers.forEach(Handler => addHandlerWithHook(elementName, Handler, skin));
177 186 };
187 +
178 188 this.getHandler = function (handlerName) {
189 + if (!handlerName) {
190 + return;
191 + }
192 +
179 193 const elementHandler = this.elementsHandlers[handlerName];
194 +
180 195 if (isClassHandler(elementHandler)) {
181 196 return elementHandler;
182 197 }
198 +
183 199 return new Promise(res => {
184 200 elementHandler().then(({
185 201 default: dynamicHandler
186 202 }) => {
@@ -188,38 +204,40 @@
188 204 });
189 205 });
190 206 };
191 207
192 - /**
193 - * @param {string} handlerName
194 - * @deprecated since 3.1.0, use `elementorFrontend.elementsHandler.getHandler` instead.
195 - */
196 208 this.getHandlers = function (handlerName) {
197 - elementorDevTools.deprecation.deprecated('getHandlers', '3.1.0', 'elementorFrontend.elementsHandler.getHandler');
209 + elementorCommon.helpers.softDeprecated('getHandlers', '3.1.0', 'elementorFrontend.elementsHandler.getHandler');
210 +
198 211 if (handlerName) {
199 212 return this.getHandler(handlerName);
200 213 }
214 +
201 215 return this.elementsHandlers;
202 216 };
217 +
203 218 this.runReadyTrigger = function (scope) {
204 - const isDelayChildHandlers = !!scope.closest('[data-delay-child-handlers="true"]') && 0 !== scope.closest('[data-delay-child-handlers="true"]').length;
205 - if (elementorFrontend.config.is_static || isDelayChildHandlers) {
219 + if (elementorFrontend.config.is_static) {
206 220 return;
207 - }
221 + } // Initializing the `$scope` as frontend jQuery instance
208 222
209 - // Initializing the `$scope` as frontend jQuery instance
223 +
210 224 const $scope = jQuery(scope),
211 - elementType = $scope.attr('data-element_type');
225 + elementType = $scope.attr('data-element_type');
226 +
212 227 if (!elementType) {
213 228 return;
214 229 }
230 +
215 231 elementorFrontend.hooks.doAction('frontend/element_ready/global', $scope, $);
216 232 elementorFrontend.hooks.doAction(`frontend/element_ready/${elementType}`, $scope, $);
233 +
217 234 if ('widget' === elementType) {
218 235 const widgetType = $scope.attr('data-widget_type');
219 236 elementorFrontend.hooks.doAction(`frontend/element_ready/${widgetType}`, $scope, $);
220 237 }
221 238 };
239 +
222 240 this.init = () => {
223 241 addGlobalHandlers();
224 242 addElementsHandlers();
225 243 };
@@ -232,66 +250,77 @@
232 250 !*** ../assets/dev/js/frontend/frontend.js ***!
233 251 \*********************************************/
234 252 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
235 253
254 +"use strict";
236 255
237 256
238 257 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
258 +
239 259 Object.defineProperty(exports, "__esModule", ({
240 260 value: true
241 261 }));
242 -exports["default"] = void 0;
243 -__webpack_require__(/*! core-js/modules/esnext.iterator.constructor.js */ "../node_modules/core-js/modules/esnext.iterator.constructor.js");
244 -__webpack_require__(/*! core-js/modules/esnext.iterator.find.js */ "../node_modules/core-js/modules/esnext.iterator.find.js");
245 -__webpack_require__(/*! core-js/modules/esnext.iterator.for-each.js */ "../node_modules/core-js/modules/esnext.iterator.for-each.js");
262 +exports.default = void 0;
263 +
246 264 __webpack_require__(/*! ../public-path */ "../assets/dev/js/public-path.js");
265 +
247 266 var _documentsManager = _interopRequireDefault(__webpack_require__(/*! ./documents-manager */ "../assets/dev/js/frontend/documents-manager.js"));
267 +
248 268 var _storage = _interopRequireDefault(__webpack_require__(/*! elementor-common/utils/storage */ "../core/common/assets/js/utils/storage.js"));
269 +
249 270 var _environment = _interopRequireDefault(__webpack_require__(/*! elementor-common/utils/environment */ "../core/common/assets/js/utils/environment.js"));
271 +
250 272 var _youtubeLoader = _interopRequireDefault(__webpack_require__(/*! ./utils/video-api/youtube-loader */ "../assets/dev/js/frontend/utils/video-api/youtube-loader.js"));
273 +
251 274 var _vimeoLoader = _interopRequireDefault(__webpack_require__(/*! ./utils/video-api/vimeo-loader */ "../assets/dev/js/frontend/utils/video-api/vimeo-loader.js"));
275 +
252 276 var _baseLoader = _interopRequireDefault(__webpack_require__(/*! ./utils/video-api/base-loader */ "../assets/dev/js/frontend/utils/video-api/base-loader.js"));
277 +
253 278 var _urlActions = _interopRequireDefault(__webpack_require__(/*! ./utils/url-actions */ "../assets/dev/js/frontend/utils/url-actions.js"));
254 -var _swiper = _interopRequireDefault(__webpack_require__(/*! ./utils/swiper */ "../assets/dev/js/frontend/utils/swiper.js"));
279 +
280 +var _swiperBc = _interopRequireDefault(__webpack_require__(/*! ./utils/swiper-bc */ "../assets/dev/js/frontend/utils/swiper-bc.js"));
281 +
255 282 var _lightboxManager = _interopRequireDefault(__webpack_require__(/*! ./utils/lightbox/lightbox-manager */ "../assets/dev/js/frontend/utils/lightbox/lightbox-manager.js"));
283 +
256 284 var _assetsLoader = _interopRequireDefault(__webpack_require__(/*! ./utils/assets-loader */ "../assets/dev/js/frontend/utils/assets-loader.js"));
285 +
257 286 var _breakpoints = _interopRequireDefault(__webpack_require__(/*! elementor-utils/breakpoints */ "../assets/dev/js/utils/breakpoints.js"));
258 -var _events = _interopRequireDefault(__webpack_require__(/*! elementor-utils/events */ "../assets/dev/js/utils/events.js"));
287 +
259 288 var _frontend = _interopRequireDefault(__webpack_require__(/*! elementor/modules/shapes/assets/js/frontend/frontend */ "../modules/shapes/assets/js/frontend/frontend.js"));
260 -var _controls = _interopRequireDefault(__webpack_require__(/*! ./utils/controls */ "../assets/dev/js/frontend/utils/controls.js"));
261 -var _anchorScrollMargin = _interopRequireDefault(__webpack_require__(/*! ./utils/anchor-scroll-margin */ "../assets/dev/js/frontend/utils/anchor-scroll-margin.js"));
289 +
262 290 var _utils = __webpack_require__(/*! elementor-frontend/utils/utils */ "../assets/dev/js/frontend/utils/utils.js");
291 +
263 292 /* global elementorFrontendConfig */
293 +const EventManager = __webpack_require__(/*! elementor-utils/hooks */ "../assets/dev/js/utils/hooks.js"),
294 + ElementsHandler = __webpack_require__(/*! elementor-frontend/elements-handlers-manager */ "../assets/dev/js/frontend/elements-handlers-manager.js"),
295 + AnchorsModule = __webpack_require__(/*! elementor-frontend/utils/anchors */ "../assets/dev/js/frontend/utils/anchors.js");
264 296
265 -const EventManager = __webpack_require__(/*! elementor-utils/hooks */ "../assets/dev/js/utils/hooks.js"),
266 - ElementsHandler = __webpack_require__(/*! elementor-frontend/elements-handlers-manager */ "../assets/dev/js/frontend/elements-handlers-manager.js");
267 297 class Frontend extends elementorModules.ViewModule {
268 298 constructor(...args) {
269 299 super(...args);
270 300 this.config = elementorFrontendConfig;
271 301 this.config.legacyMode = {
272 - /**
273 - * @deprecated since 3.1.0
274 - */
275 302 get elementWrappers() {
276 303 if (elementorFrontend.isEditMode()) {
277 - window.top.elementorDevTools.deprecation.deprecated('elementorFrontend.config.legacyMode.elementWrappers', '3.1.0');
304 + elementorCommon.helpers.hardDeprecated('elementorFrontend.config.legacyMode.elementWrappers', '3.1.0', 'elementorFrontend.config.experimentalFeatures.e_dom_optimization');
278 305 }
279 - return false;
306 +
307 + return !elementorFrontend.config.experimentalFeatures.e_dom_optimization;
280 308 }
309 +
281 310 };
282 311 this.populateActiveBreakpointsConfig();
283 - }
312 + } // TODO: BC since 2.5.0
284 313
285 - /**
286 - * @deprecated since 2.5.0, use `elementorModules.frontend.handlers.Base` instead.
287 - */
314 +
288 315 get Module() {
289 316 if (this.isEditMode()) {
290 - parent.elementorDevTools.deprecation.deprecated('elementorFrontend.Module', '2.5.0', 'elementorModules.frontend.handlers.Base');
317 + parent.elementorCommon.helpers.hardDeprecated('elementorFrontend.Module', '2.5.0', 'elementorModules.frontend.handlers.Base');
291 318 }
319 +
292 320 return elementorModules.frontend.handlers.Base;
293 321 }
322 +
294 323 getDefaultSettings() {
295 324 return {
296 325 selectors: {
297 326 elementor: '.elementor',
@@ -298,11 +327,12 @@
298 327 adminBar: '#wpadminbar'
299 328 }
300 329 };
301 330 }
331 +
302 332 getDefaultElements() {
303 333 const defaultElements = {
304 - window,
334 + window: window,
305 335 $window: jQuery(window),
306 336 $document: jQuery(document),
307 337 $head: jQuery(document.head),
308 338 $body: jQuery(document.body),
@@ -313,75 +343,79 @@
313 343 };
314 344 defaultElements.$body.append(defaultElements.$deviceMode);
315 345 return defaultElements;
316 346 }
347 +
317 348 bindEvents() {
318 349 this.elements.$window.on('resize', () => this.setDeviceModeData());
319 350 }
320 -
321 351 /**
322 - * @param {string} elementName
323 - * @deprecated since 2.4.0, use `this.elements` instead.
352 + * @deprecated 2.4.0 Use just `this.elements` instead
324 353 */
354 +
355 +
325 356 getElements(elementName) {
326 357 return this.getItems(this.elements, elementName);
327 358 }
328 -
329 359 /**
330 - * @param {string} settingName
331 - * @deprecated since 2.4.0, this method was never in use.
360 + * @deprecated 2.4.0 This method was never in use
332 361 */
362 +
363 +
333 364 getPageSettings(settingName) {
334 365 const settingsObject = this.isEditMode() ? elementor.settings.page.model.attributes : this.config.settings.page;
335 366 return this.getItems(settingsObject, settingName);
336 367 }
337 368
338 - /**
339 - * @param {string} settingName
340 - * @deprecated since 3.0.0, use `getKitSettings()` instead and remove the `elementor_` prefix.
341 - */
342 369 getGeneralSettings(settingName) {
343 370 if (this.isEditMode()) {
344 - parent.elementorDevTools.deprecation.deprecated('getGeneralSettings()', '3.0.0', 'getKitSettings() and remove the `elementor_` prefix');
371 + parent.elementorCommon.helpers.softDeprecated('getGeneralSettings', '3.0.0', 'getKitSettings and remove the `elementor_` prefix');
345 372 }
373 +
346 374 return this.getKitSettings(`elementor_${settingName}`);
347 375 }
376 +
348 377 getKitSettings(settingName) {
349 378 // TODO: use Data API.
350 379 return this.getItems(this.config.kit, settingName);
351 380 }
381 +
352 382 getCurrentDeviceMode() {
353 383 return getComputedStyle(this.elements.$deviceMode[0], ':after').content.replace(/"/g, '');
354 384 }
385 +
355 386 getDeviceSetting(deviceMode, settings, settingKey) {
356 387 // Add specific handling for widescreen since it is larger than desktop.
357 388 if ('widescreen' === deviceMode) {
358 389 return this.getWidescreenSetting(settings, settingKey);
359 390 }
391 +
360 392 const devices = elementorFrontend.breakpoints.getActiveBreakpointsList({
361 393 largeToSmall: true,
362 394 withDesktop: true
363 395 });
364 396 let deviceIndex = devices.indexOf(deviceMode);
397 +
365 398 while (deviceIndex > 0) {
366 399 const currentDevice = devices[deviceIndex],
367 - fullSettingKey = settingKey + '_' + currentDevice,
368 - deviceValue = settings[fullSettingKey];
400 + fullSettingKey = settingKey + '_' + currentDevice,
401 + deviceValue = settings[fullSettingKey]; // Accept 0 as value.
369 402
370 - // Accept 0 as value.
371 403 if (deviceValue || 0 === deviceValue) {
372 404 return deviceValue;
373 405 }
406 +
374 407 deviceIndex--;
375 408 }
409 +
376 410 return settings[settingKey];
377 411 }
412 +
378 413 getWidescreenSetting(settings, settingKey) {
379 414 const deviceMode = 'widescreen',
380 - widescreenSettingKey = settingKey + '_' + deviceMode;
381 - let settingToReturn;
415 + widescreenSettingKey = settingKey + '_' + deviceMode;
416 + let settingToReturn; // If the device mode is 'widescreen', and the setting exists - return it.
382 417
383 - // If the device mode is 'widescreen', and the setting exists - return it.
384 418 if (settings[widescreenSettingKey]) {
385 419 settingToReturn = settings[widescreenSettingKey];
386 420 } else {
387 421 // Otherwise, return the desktop setting
@@ -386,52 +420,60 @@
386 420 } else {
387 421 // Otherwise, return the desktop setting
388 422 settingToReturn = settings[settingKey];
389 423 }
424 +
390 425 return settingToReturn;
391 426 }
427 +
392 428 getCurrentDeviceSetting(settings, settingKey) {
393 429 return this.getDeviceSetting(elementorFrontend.getCurrentDeviceMode(), settings, settingKey);
394 430 }
431 +
395 432 isEditMode() {
396 433 return this.config.environmentMode.edit;
397 434 }
435 +
398 436 isWPPreviewMode() {
399 437 return this.config.environmentMode.wpPreview;
400 438 }
439 +
401 440 initDialogsManager() {
402 441 let dialogsManager;
442 +
403 443 this.getDialogsManager = () => {
404 444 if (!dialogsManager) {
405 445 dialogsManager = new DialogsManager.Instance();
406 446 }
447 +
407 448 return dialogsManager;
408 449 };
409 450 }
451 +
410 452 initOnReadyComponents() {
411 453 this.utils = {
412 454 youtube: new _youtubeLoader.default(),
413 455 vimeo: new _vimeoLoader.default(),
414 456 baseVideoLoader: new _baseLoader.default(),
457 + anchors: new AnchorsModule(),
458 +
415 459 get lightbox() {
416 460 return _lightboxManager.default.getLightbox();
417 461 },
462 +
418 463 urlActions: new _urlActions.default(),
419 - swiper: _swiper.default,
464 + swiper: _swiperBc.default,
420 465 environment: _environment.default,
421 466 assetsLoader: new _assetsLoader.default(),
422 - escapeHTML: _utils.escapeHTML,
423 - events: _events.default,
424 - controls: new _controls.default(),
425 - anchor_scroll_margin: new _anchorScrollMargin.default()
426 - };
467 + escapeHTML: _utils.escapeHTML
468 + }; // TODO: BC since 2.4.0
427 469
428 - // TODO: BC since 2.4.0
429 470 this.modules = {
430 471 StretchElement: elementorModules.frontend.tools.StretchElement,
431 472 Masonry: elementorModules.utils.Masonry
432 473 };
433 474 this.elementsHandler.init();
475 +
434 476 if (this.isEditMode()) {
435 477 elementor.once('document:loaded', () => this.onDocumentLoaded());
436 478 } else {
437 479 this.onDocumentLoaded();
@@ -436,11 +478,13 @@
436 478 } else {
437 479 this.onDocumentLoaded();
438 480 }
439 481 }
482 +
440 483 initOnReadyElements() {
441 484 this.elements.$wpAdminBar = this.elements.$document.find(this.getSettings('selectors.adminBar'));
442 485 }
486 +
443 487 addUserAgentClasses() {
444 488 for (const [key, value] of Object.entries(_environment.default)) {
445 489 if (value) {
446 490 this.elements.$body.addClass('e--ua-' + key);
@@ -446,20 +490,25 @@
446 490 this.elements.$body.addClass('e--ua-' + key);
447 491 }
448 492 }
449 493 }
494 +
450 495 setDeviceModeData() {
451 496 this.elements.$body.attr('data-elementor-device-mode', this.getCurrentDeviceMode());
452 497 }
498 +
453 499 addListenerOnce(listenerID, event, callback, to) {
454 500 if (!to) {
455 501 to = this.elements.$window;
456 502 }
503 +
457 504 if (!this.isEditMode()) {
458 505 to.on(event, callback);
459 506 return;
460 507 }
508 +
461 509 this.removeListeners(listenerID, event, to);
510 +
462 511 if (to instanceof jQuery) {
463 512 const eventNS = event + '.' + listenerID;
464 513 to.on(eventNS, callback);
465 514 } else {
@@ -465,12 +514,14 @@
465 514 } else {
466 515 to.on(event, callback, listenerID);
467 516 }
468 517 }
518 +
469 519 removeListeners(listenerID, event, callback, from) {
470 520 if (!from) {
471 521 from = this.elements.$window;
472 522 }
523 +
473 524 if (from instanceof jQuery) {
474 525 const eventNS = event + '.' + listenerID;
475 526 from.off(eventNS, callback);
476 527 } else {
@@ -475,50 +526,72 @@
475 526 from.off(eventNS, callback);
476 527 } else {
477 528 from.off(event, callback, listenerID);
478 529 }
479 - }
530 + } // Based on underscore function
480 531
481 - // Based on underscore function
532 +
482 533 debounce(func, wait) {
483 534 let timeout;
484 535 return function () {
485 536 const context = this,
486 - args = arguments;
537 + args = arguments;
538 +
487 539 const later = () => {
488 540 timeout = null;
489 541 func.apply(context, args);
490 542 };
543 +
491 544 const callNow = !timeout;
492 545 clearTimeout(timeout);
493 546 timeout = setTimeout(later, wait);
547 +
494 548 if (callNow) {
495 549 func.apply(context, args);
496 550 }
497 551 };
498 552 }
553 +
554 + waypoint($element, callback, options) {
555 + const defaultOptions = {
556 + offset: '100%',
557 + triggerOnce: true
558 + };
559 + options = jQuery.extend(defaultOptions, options);
560 +
561 + const correctCallback = function () {
562 + const element = this.element || this,
563 + result = callback.apply(element, arguments); // If is Waypoint new API and is frontend
564 +
565 + if (options.triggerOnce && this.destroy) {
566 + this.destroy();
567 + }
568 +
569 + return result;
570 + };
571 +
572 + return $element.elementorWaypoint(correctCallback, options);
573 + }
574 +
499 575 muteMigrationTraces() {
500 576 jQuery.migrateMute = true;
501 577 jQuery.migrateTrace = false;
502 578 }
503 -
504 579 /**
505 580 * Initialize the modules' widgets handlers.
506 581 */
582 +
583 +
507 584 initModules() {
508 585 const handlers = {
509 586 shapes: _frontend.default
510 587 };
511 -
512 - // TODO: BC - Deprecated since 3.5.0
513 588 elementorFrontend.trigger('elementor/modules/init:before');
514 -
515 - // TODO: Use this instead.
516 - elementorFrontend.trigger('elementor/modules/init/before');
517 589 Object.entries(handlers).forEach(([moduleName, ModuleClass]) => {
518 590 this.modulesHandlers[moduleName] = new ModuleClass();
519 591 });
520 592 }
593 +
521 594 populateActiveBreakpointsConfig() {
522 595 this.config.responsive.activeBreakpoints = {};
523 596 Object.entries(this.config.responsive.breakpoints).forEach(([breakpointKey, breakpointData]) => {
524 597 if (breakpointData.is_enabled) {
@@ -525,8 +598,9 @@
525 598 this.config.responsive.activeBreakpoints[breakpointKey] = breakpointData;
526 599 }
527 600 });
528 601 }
602 +
529 603 init() {
530 604 this.hooks = new EventManager();
531 605 this.breakpoints = new _breakpoints.default(this.config.responsive);
532 606 this.storage = new _storage.default();
@@ -534,26 +608,31 @@
534 608 this.modulesHandlers = {};
535 609 this.addUserAgentClasses();
536 610 this.setDeviceModeData();
537 611 this.initDialogsManager();
612 +
538 613 if (this.isEditMode()) {
539 614 this.muteMigrationTraces();
540 - }
615 + } // Keep this line before `initOnReadyComponents` call
541 616
542 - // Keep this line before `initOnReadyComponents` call
543 - _events.default.dispatch(this.elements.$window, 'elementor/frontend/init');
617 +
618 + this.elements.$window.trigger('elementor/frontend/init');
544 619 this.initModules();
545 620 this.initOnReadyElements();
546 621 this.initOnReadyComponents();
547 622 }
623 +
548 624 onDocumentLoaded() {
549 625 this.documentsManager = new _documentsManager.default();
550 626 this.trigger('components:init');
551 627 new _lightboxManager.default();
552 628 }
629 +
553 630 }
554 -exports["default"] = Frontend;
631 +
632 +exports.default = Frontend;
555 633 window.elementorFrontend = new Frontend();
634 +
556 635 if (!elementorFrontend.isEditMode()) {
557 636 jQuery(() => elementorFrontend.init());
558 637 }
559 638
@@ -558,63 +637,203 @@
558 637 }
559 638
560 639 /***/ }),
561 640
562 -/***/ "../assets/dev/js/frontend/handlers/column.js":
563 -/*!****************************************************!*\
564 - !*** ../assets/dev/js/frontend/handlers/column.js ***!
565 - \****************************************************/
566 -/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
641 +/***/ "../assets/dev/js/frontend/handlers/background-slideshow.js":
642 +/*!******************************************************************!*\
643 + !*** ../assets/dev/js/frontend/handlers/background-slideshow.js ***!
644 + \******************************************************************/
645 +/***/ ((__unused_webpack_module, exports) => {
567 646
647 +"use strict";
568 648
569 649
570 650 Object.defineProperty(exports, "__esModule", ({
571 651 value: true
572 652 }));
573 -exports["default"] = void 0;
574 -var _default = exports["default"] = [() => __webpack_require__.e(/*! import() | shared-frontend-handlers */ "shared-frontend-handlers").then(__webpack_require__.bind(__webpack_require__, /*! ./background-slideshow */ "../assets/dev/js/frontend/handlers/background-slideshow.js"))];
653 +exports.default = void 0;
575 654
576 -/***/ }),
655 +class BackgroundSlideshow extends elementorModules.frontend.handlers.SwiperBase {
656 + getDefaultSettings() {
657 + return {
658 + classes: {
659 + swiperContainer: 'elementor-background-slideshow swiper-container',
660 + swiperWrapper: 'swiper-wrapper',
661 + swiperSlide: 'elementor-background-slideshow__slide swiper-slide',
662 + slideBackground: 'elementor-background-slideshow__slide__image',
663 + kenBurns: 'elementor-ken-burns',
664 + kenBurnsActive: 'elementor-ken-burns--active',
665 + kenBurnsIn: 'elementor-ken-burns--in',
666 + kenBurnsOut: 'elementor-ken-burns--out'
667 + }
668 + };
669 + }
577 670
578 -/***/ "../assets/dev/js/frontend/handlers/container/container.js":
579 -/*!*****************************************************************!*\
580 - !*** ../assets/dev/js/frontend/handlers/container/container.js ***!
581 - \*****************************************************************/
582 -/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
671 + getSwiperOptions() {
672 + const elementSettings = this.getElementSettings();
673 + const swiperOptions = {
674 + grabCursor: false,
675 + slidesPerView: 1,
676 + slidesPerGroup: 1,
677 + loop: 'yes' === elementSettings.background_slideshow_loop,
678 + speed: elementSettings.background_slideshow_transition_duration,
679 + autoplay: {
680 + delay: elementSettings.background_slideshow_slide_duration,
681 + stopOnLastSlide: !elementSettings.background_slideshow_loop
682 + },
683 + handleElementorBreakpoints: true,
684 + on: {
685 + slideChange: () => {
686 + if (elementSettings.background_slideshow_ken_burns) {
687 + this.handleKenBurns();
688 + }
689 + }
690 + }
691 + };
583 692
693 + if ('yes' === elementSettings.background_slideshow_loop) {
694 + swiperOptions.loopedSlides = this.getSlidesCount();
695 + }
584 696
697 + switch (elementSettings.background_slideshow_slide_transition) {
698 + case 'fade':
699 + swiperOptions.effect = 'fade';
700 + swiperOptions.fadeEffect = {
701 + crossFade: true
702 + };
703 + break;
585 704
586 -Object.defineProperty(exports, "__esModule", ({
587 - value: true
588 -}));
589 -exports["default"] = void 0;
590 -var _createEditorHandler = __webpack_require__(/*! ../create-editor-handler */ "../assets/dev/js/frontend/handlers/create-editor-handler.js");
591 -var _default = exports["default"] = [() => __webpack_require__.e(/*! import() | shared-frontend-handlers */ "shared-frontend-handlers").then(__webpack_require__.bind(__webpack_require__, /*! ../background-slideshow */ "../assets/dev/js/frontend/handlers/background-slideshow.js")), () => __webpack_require__.e(/*! import() | shared-frontend-handlers */ "shared-frontend-handlers").then(__webpack_require__.bind(__webpack_require__, /*! ../background-video */ "../assets/dev/js/frontend/handlers/background-video.js")), (0, _createEditorHandler.createEditorHandler)(() => __webpack_require__.e(/*! import() | shared-editor-handlers */ "shared-editor-handlers").then(__webpack_require__.bind(__webpack_require__, /*! ../handles-position */ "../assets/dev/js/frontend/handlers/handles-position.js"))), (0, _createEditorHandler.createEditorHandler)(() => __webpack_require__.e(/*! import() | container-editor-handlers */ "container-editor-handlers").then(__webpack_require__.bind(__webpack_require__, /*! ./shapes */ "../assets/dev/js/frontend/handlers/container/shapes.js"))), (0, _createEditorHandler.createEditorHandler)(() => __webpack_require__.e(/*! import() | container-editor-handlers */ "container-editor-handlers").then(__webpack_require__.bind(__webpack_require__, /*! ./grid-container */ "../assets/dev/js/frontend/handlers/container/grid-container.js")))];
705 + case 'slide_down':
706 + swiperOptions.autoplay.reverseDirection = true;
592 707
708 + case 'slide_up':
709 + swiperOptions.direction = 'vertical';
710 + break;
711 + }
712 +
713 + return swiperOptions;
714 + }
715 +
716 + buildSwiperElements() {
717 + const classes = this.getSettings('classes'),
718 + elementSettings = this.getElementSettings(),
719 + direction = 'slide_left' === elementSettings.background_slideshow_slide_transition ? 'ltr' : 'rtl',
720 + $container = jQuery('<div>', {
721 + class: classes.swiperContainer,
722 + dir: direction
723 + }),
724 + $wrapper = jQuery('<div>', {
725 + class: classes.swiperWrapper
726 + }),
727 + kenBurnsActive = elementSettings.background_slideshow_ken_burns;
728 + let slideInnerClass = classes.slideBackground;
729 +
730 + if (kenBurnsActive) {
731 + slideInnerClass += ' ' + classes.kenBurns;
732 + const kenBurnsDirection = 'in' === elementSettings.background_slideshow_ken_burns_zoom_direction ? 'kenBurnsIn' : 'kenBurnsOut';
733 + slideInnerClass += ' ' + classes[kenBurnsDirection];
734 + }
735 +
736 + this.elements.$slides = jQuery();
737 + elementSettings.background_slideshow_gallery.forEach(slide => {
738 + const $slide = jQuery('<div>', {
739 + class: classes.swiperSlide
740 + }),
741 + $slidebg = jQuery('<div>', {
742 + class: slideInnerClass,
743 + style: 'background-image: url("' + slide.url + '");'
744 + });
745 + $slide.append($slidebg);
746 + $wrapper.append($slide);
747 + this.elements.$slides = this.elements.$slides.add($slide);
748 + });
749 + $container.append($wrapper);
750 + this.$element.prepend($container);
751 + this.elements.$backgroundSlideShowContainer = $container;
752 + }
753 +
754 + async initSlider() {
755 + if (1 >= this.getSlidesCount()) {
756 + return;
757 + }
758 +
759 + const elementSettings = this.getElementSettings();
760 + const Swiper = elementorFrontend.utils.swiper;
761 + this.swiper = await new Swiper(this.elements.$backgroundSlideShowContainer, this.getSwiperOptions()); // Expose the swiper instance in the frontend
762 +
763 + this.elements.$backgroundSlideShowContainer.data('swiper', this.swiper);
764 +
765 + if (elementSettings.background_slideshow_ken_burns) {
766 + this.handleKenBurns();
767 + }
768 + }
769 +
770 + activate() {
771 + this.buildSwiperElements();
772 + this.initSlider();
773 + }
774 +
775 + deactivate() {
776 + if (this.swiper) {
777 + this.swiper.destroy();
778 + this.elements.$backgroundSlideShowContainer.remove();
779 + }
780 + }
781 +
782 + run() {
783 + if ('slideshow' === this.getElementSettings('background_background')) {
784 + this.activate();
785 + } else {
786 + this.deactivate();
787 + }
788 + }
789 +
790 + onInit() {
791 + super.onInit();
792 +
793 + if (this.getElementSettings('background_slideshow_gallery')) {
794 + this.run();
795 + }
796 + }
797 +
798 + onDestroy() {
799 + super.onDestroy();
800 + this.deactivate();
801 + }
802 +
803 + onElementChange(propertyName) {
804 + if ('background_background' === propertyName) {
805 + this.run();
806 + }
807 + }
808 +
809 +}
810 +
811 +exports.default = BackgroundSlideshow;
812 +
593 813 /***/ }),
594 814
595 -/***/ "../assets/dev/js/frontend/handlers/create-editor-handler.js":
596 -/*!*******************************************************************!*\
597 - !*** ../assets/dev/js/frontend/handlers/create-editor-handler.js ***!
598 - \*******************************************************************/
599 -/***/ ((__unused_webpack_module, exports) => {
815 +/***/ "../assets/dev/js/frontend/handlers/column.js":
816 +/*!****************************************************!*\
817 + !*** ../assets/dev/js/frontend/handlers/column.js ***!
818 + \****************************************************/
819 +/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
600 820
821 +"use strict";
601 822
602 823
824 +var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
825 +
603 826 Object.defineProperty(exports, "__esModule", ({
604 827 value: true
605 828 }));
606 -exports.createEditorHandler = createEditorHandler;
607 -function createEditorHandler(importer) {
608 - return () => {
609 - return new Promise(resolve => {
610 - if (elementorFrontend.isEditMode()) {
611 - importer().then(resolve);
612 - }
613 - });
614 - };
615 -}
829 +exports.default = void 0;
616 830
831 +var _backgroundSlideshow = _interopRequireDefault(__webpack_require__(/*! ./background-slideshow */ "../assets/dev/js/frontend/handlers/background-slideshow.js"));
832 +
833 +var _default = [_backgroundSlideshow.default];
834 +exports.default = _default;
835 +
617 836 /***/ }),
618 837
619 838 /***/ "../assets/dev/js/frontend/handlers/global.js":
620 839 /*!****************************************************!*\
@@ -621,41 +840,51 @@
621 840 !*** ../assets/dev/js/frontend/handlers/global.js ***!
622 841 \****************************************************/
623 842 /***/ ((__unused_webpack_module, exports) => {
624 843
844 +"use strict";
625 845
626 846
627 847 Object.defineProperty(exports, "__esModule", ({
628 848 value: true
629 849 }));
630 -exports["default"] = void 0;
850 +exports.default = void 0;
851 +
631 852 class GlobalHandler extends elementorModules.frontend.handlers.Base {
632 853 getWidgetType() {
633 854 return 'global';
634 855 }
856 +
635 857 animate() {
636 858 const $element = this.$element,
637 - animation = this.getAnimation();
859 + animation = this.getAnimation();
860 +
638 861 if ('none' === animation) {
639 862 $element.removeClass('elementor-invisible');
640 863 return;
641 864 }
865 +
642 866 const elementSettings = this.getElementSettings(),
643 - animationDelay = elementSettings._animation_delay || elementSettings.animation_delay || 0;
867 + animationDelay = elementSettings._animation_delay || elementSettings.animation_delay || 0;
644 868 $element.removeClass(animation);
869 +
645 870 if (this.currentAnimation) {
646 871 $element.removeClass(this.currentAnimation);
647 872 }
873 +
648 874 this.currentAnimation = animation;
649 875 setTimeout(() => {
650 876 $element.removeClass('elementor-invisible').addClass('animated ' + animation);
651 877 }, animationDelay);
652 878 }
879 +
653 880 getAnimation() {
654 881 return this.getCurrentDeviceSetting('animation') || this.getCurrentDeviceSetting('_animation');
655 882 }
883 +
656 884 onInit(...args) {
657 885 super.onInit(...args);
886 +
658 887 if (this.getAnimation()) {
659 888 const observer = elementorModules.utils.Scroll.scrollObserver({
660 889 callback: event => {
661 890 if (event.isInViewport) {
@@ -666,23 +895,408 @@
666 895 });
667 896 observer.observe(this.$element[0]);
668 897 }
669 898 }
899 +
670 900 onElementChange(propertyName) {
671 901 if (/^_?animation/.test(propertyName)) {
672 902 this.animate();
673 903 }
674 904 }
905 +
675 906 }
907 +
676 908 var _default = $scope => {
677 909 elementorFrontend.elementsHandler.addHandler(GlobalHandler, {
678 910 $element: $scope
679 911 });
680 912 };
681 -exports["default"] = _default;
682 913
914 +exports.default = _default;
915 +
683 916 /***/ }),
684 917
918 +/***/ "../assets/dev/js/frontend/handlers/section/background-video.js":
919 +/*!**********************************************************************!*\
920 + !*** ../assets/dev/js/frontend/handlers/section/background-video.js ***!
921 + \**********************************************************************/
922 +/***/ ((__unused_webpack_module, exports) => {
923 +
924 +"use strict";
925 +
926 +
927 +Object.defineProperty(exports, "__esModule", ({
928 + value: true
929 +}));
930 +exports.default = void 0;
931 +
932 +class BackgroundVideo extends elementorModules.frontend.handlers.Base {
933 + getDefaultSettings() {
934 + return {
935 + selectors: {
936 + backgroundVideoContainer: '.elementor-background-video-container',
937 + backgroundVideoEmbed: '.elementor-background-video-embed',
938 + backgroundVideoHosted: '.elementor-background-video-hosted'
939 + }
940 + };
941 + }
942 +
943 + getDefaultElements() {
944 + const selectors = this.getSettings('selectors'),
945 + elements = {
946 + $backgroundVideoContainer: this.$element.find(selectors.backgroundVideoContainer)
947 + };
948 + elements.$backgroundVideoEmbed = elements.$backgroundVideoContainer.children(selectors.backgroundVideoEmbed);
949 + elements.$backgroundVideoHosted = elements.$backgroundVideoContainer.children(selectors.backgroundVideoHosted);
950 + return elements;
951 + }
952 +
953 + calcVideosSize($video) {
954 + let aspectRatioSetting = '16:9';
955 +
956 + if ('vimeo' === this.videoType) {
957 + aspectRatioSetting = $video[0].width + ':' + $video[0].height;
958 + }
959 +
960 + const containerWidth = this.elements.$backgroundVideoContainer.outerWidth(),
961 + containerHeight = this.elements.$backgroundVideoContainer.outerHeight(),
962 + aspectRatioArray = aspectRatioSetting.split(':'),
963 + aspectRatio = aspectRatioArray[0] / aspectRatioArray[1],
964 + ratioWidth = containerWidth / aspectRatio,
965 + ratioHeight = containerHeight * aspectRatio,
966 + isWidthFixed = containerWidth / containerHeight > aspectRatio;
967 + return {
968 + width: isWidthFixed ? containerWidth : ratioHeight,
969 + height: isWidthFixed ? ratioWidth : containerHeight
970 + };
971 + }
972 +
973 + changeVideoSize() {
974 + if (!('hosted' === this.videoType) && !this.player) {
975 + return;
976 + }
977 +
978 + let $video;
979 +
980 + if ('youtube' === this.videoType) {
981 + $video = jQuery(this.player.getIframe());
982 + } else if ('vimeo' === this.videoType) {
983 + $video = jQuery(this.player.element);
984 + } else if ('hosted' === this.videoType) {
985 + $video = this.elements.$backgroundVideoHosted;
986 + }
987 +
988 + if (!$video) {
989 + return;
990 + }
991 +
992 + const size = this.calcVideosSize($video);
993 + $video.width(size.width).height(size.height);
994 + }
995 +
996 + startVideoLoop(firstTime) {
997 + // If the section has been removed
998 + if (!this.player.getIframe().contentWindow) {
999 + return;
1000 + }
1001 +
1002 + const elementSettings = this.getElementSettings(),
1003 + startPoint = elementSettings.background_video_start || 0,
1004 + endPoint = elementSettings.background_video_end;
1005 +
1006 + if (elementSettings.background_play_once && !firstTime) {
1007 + this.player.stopVideo();
1008 + return;
1009 + }
1010 +
1011 + this.player.seekTo(startPoint);
1012 +
1013 + if (endPoint) {
1014 + const durationToEnd = endPoint - startPoint + 1;
1015 + setTimeout(() => {
1016 + this.startVideoLoop(false);
1017 + }, durationToEnd * 1000);
1018 + }
1019 + }
1020 +
1021 + prepareVimeoVideo(Vimeo, videoLink) {
1022 + const elementSettings = this.getElementSettings(),
1023 + videoSize = this.elements.$backgroundVideoContainer.outerWidth(),
1024 + vimeoOptions = {
1025 + url: videoLink,
1026 + width: videoSize.width,
1027 + autoplay: true,
1028 + loop: !elementSettings.background_play_once,
1029 + transparent: false,
1030 + background: true,
1031 + muted: true
1032 + };
1033 + this.player = new Vimeo.Player(this.elements.$backgroundVideoContainer, vimeoOptions); // Handle user-defined start/end times
1034 +
1035 + this.handleVimeoStartEndTimes(elementSettings);
1036 + this.player.ready().then(() => {
1037 + jQuery(this.player.element).addClass('elementor-background-video-embed');
1038 + this.changeVideoSize();
1039 + });
1040 + }
1041 +
1042 + handleVimeoStartEndTimes(elementSettings) {
1043 + // If a start time is defined, set the start time
1044 + if (elementSettings.background_video_start) {
1045 + this.player.on('play', data => {
1046 + if (0 === data.seconds) {
1047 + this.player.setCurrentTime(elementSettings.background_video_start);
1048 + }
1049 + });
1050 + }
1051 +
1052 + this.player.on('timeupdate', data => {
1053 + // If an end time is defined, handle ending the video
1054 + if (elementSettings.background_video_end && elementSettings.background_video_end < data.seconds) {
1055 + if (elementSettings.background_play_once) {
1056 + // Stop at user-defined end time if not loop
1057 + this.player.pause();
1058 + } else {
1059 + // Go to start time if loop
1060 + this.player.setCurrentTime(elementSettings.background_video_start);
1061 + }
1062 + } // If start time is defined but an end time is not, go to user-defined start time at video end.
1063 + // Vimeo JS API has an 'ended' event, but it never fires when infinite loop is defined, so we
1064 + // get the video duration (returns a promise) then use duration-0.5s as end time
1065 +
1066 +
1067 + this.player.getDuration().then(duration => {
1068 + if (elementSettings.background_video_start && !elementSettings.background_video_end && data.seconds > duration - 0.5) {
1069 + this.player.setCurrentTime(elementSettings.background_video_start);
1070 + }
1071 + });
1072 + });
1073 + }
1074 +
1075 + prepareYTVideo(YT, videoID) {
1076 + const $backgroundVideoContainer = this.elements.$backgroundVideoContainer,
1077 + elementSettings = this.getElementSettings();
1078 + let startStateCode = YT.PlayerState.PLAYING; // Since version 67, Chrome doesn't fire the `PLAYING` state at start time
1079 +
1080 + if (window.chrome) {
1081 + startStateCode = YT.PlayerState.UNSTARTED;
1082 + }
1083 +
1084 + const playerOptions = {
1085 + videoId: videoID,
1086 + events: {
1087 + onReady: () => {
1088 + this.player.mute();
1089 + this.changeVideoSize();
1090 + this.startVideoLoop(true);
1091 + this.player.playVideo();
1092 + },
1093 + onStateChange: event => {
1094 + switch (event.data) {
1095 + case startStateCode:
1096 + $backgroundVideoContainer.removeClass('elementor-invisible elementor-loading');
1097 + break;
1098 +
1099 + case YT.PlayerState.ENDED:
1100 + this.player.seekTo(elementSettings.background_video_start || 0);
1101 +
1102 + if (elementSettings.background_play_once) {
1103 + this.player.destroy();
1104 + }
1105 +
1106 + }
1107 + }
1108 + },
1109 + playerVars: {
1110 + controls: 0,
1111 + rel: 0,
1112 + playsinline: 1
1113 + }
1114 + }; // To handle CORS issues, when the default host is changed, the origin parameter has to be set.
1115 +
1116 + if (elementSettings.background_privacy_mode) {
1117 + playerOptions.host = 'https://www.youtube-nocookie.com';
1118 + playerOptions.origin = window.location.hostname;
1119 + }
1120 +
1121 + $backgroundVideoContainer.addClass('elementor-loading elementor-invisible');
1122 + this.player = new YT.Player(this.elements.$backgroundVideoEmbed[0], playerOptions);
1123 + }
1124 +
1125 + activate() {
1126 + let videoLink = this.getElementSettings('background_video_link'),
1127 + videoID;
1128 + const playOnce = this.getElementSettings('background_play_once');
1129 +
1130 + if (-1 !== videoLink.indexOf('vimeo.com')) {
1131 + this.videoType = 'vimeo';
1132 + this.apiProvider = elementorFrontend.utils.vimeo;
1133 + } else if (videoLink.match(/^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com)/)) {
1134 + this.videoType = 'youtube';
1135 + this.apiProvider = elementorFrontend.utils.youtube;
1136 + }
1137 +
1138 + if (this.apiProvider) {
1139 + videoID = this.apiProvider.getVideoIDFromURL(videoLink);
1140 + this.apiProvider.onApiReady(apiObject => {
1141 + if ('youtube' === this.videoType) {
1142 + this.prepareYTVideo(apiObject, videoID);
1143 + }
1144 +
1145 + if ('vimeo' === this.videoType) {
1146 + this.prepareVimeoVideo(apiObject, videoLink);
1147 + }
1148 + });
1149 + } else {
1150 + this.videoType = 'hosted';
1151 + const startTime = this.getElementSettings('background_video_start'),
1152 + endTime = this.getElementSettings('background_video_end');
1153 +
1154 + if (startTime || endTime) {
1155 + videoLink += '#t=' + (startTime || 0) + (endTime ? ',' + endTime : '');
1156 + }
1157 +
1158 + this.elements.$backgroundVideoHosted.attr('src', videoLink).one('canplay', this.changeVideoSize.bind(this));
1159 +
1160 + if (playOnce) {
1161 + this.elements.$backgroundVideoHosted.on('ended', () => {
1162 + this.elements.$backgroundVideoHosted.hide();
1163 + });
1164 + }
1165 + }
1166 +
1167 + elementorFrontend.elements.$window.on('resize', this.changeVideoSize);
1168 + }
1169 +
1170 + deactivate() {
1171 + if ('youtube' === this.videoType && this.player.getIframe() || 'vimeo' === this.videoType) {
1172 + this.player.destroy();
1173 + } else {
1174 + this.elements.$backgroundVideoHosted.removeAttr('src').off('ended');
1175 + }
1176 +
1177 + elementorFrontend.elements.$window.off('resize', this.changeVideoSize);
1178 + }
1179 +
1180 + run() {
1181 + const elementSettings = this.getElementSettings();
1182 +
1183 + if (!elementSettings.background_play_on_mobile && 'mobile' === elementorFrontend.getCurrentDeviceMode()) {
1184 + return;
1185 + }
1186 +
1187 + if ('video' === elementSettings.background_background && elementSettings.background_video_link) {
1188 + this.activate();
1189 + } else {
1190 + this.deactivate();
1191 + }
1192 + }
1193 +
1194 + onInit(...args) {
1195 + super.onInit(...args);
1196 + this.changeVideoSize = this.changeVideoSize.bind(this);
1197 + this.run();
1198 + }
1199 +
1200 + onElementChange(propertyName) {
1201 + if ('background_background' === propertyName) {
1202 + this.run();
1203 + }
1204 + }
1205 +
1206 +}
1207 +
1208 +exports.default = BackgroundVideo;
1209 +
1210 +/***/ }),
1211 +
1212 +/***/ "../assets/dev/js/frontend/handlers/section/handles-position.js":
1213 +/*!**********************************************************************!*\
1214 + !*** ../assets/dev/js/frontend/handlers/section/handles-position.js ***!
1215 + \**********************************************************************/
1216 +/***/ ((__unused_webpack_module, exports) => {
1217 +
1218 +"use strict";
1219 +
1220 +
1221 +Object.defineProperty(exports, "__esModule", ({
1222 + value: true
1223 +}));
1224 +exports.default = void 0;
1225 +
1226 +class HandlesPosition extends elementorModules.frontend.handlers.Base {
1227 + isActive() {
1228 + return elementorFrontend.isEditMode();
1229 + }
1230 +
1231 + isFirstSection() {
1232 + return this.$element[0] === document.querySelector('.elementor-edit-mode .elementor-top-section');
1233 + }
1234 +
1235 + isOverflowHidden() {
1236 + return 'hidden' === this.$element.css('overflow');
1237 + }
1238 +
1239 + getOffset() {
1240 + if ('body' === elementor.config.document.container) {
1241 + return this.$element.offset().top;
1242 + }
1243 +
1244 + const $container = jQuery(elementor.config.document.container);
1245 + return this.$element.offset().top - $container.offset().top;
1246 + }
1247 +
1248 + setHandlesPosition() {
1249 + const document = elementor.documents.getCurrent();
1250 +
1251 + if (!document || !document.container.isEditable()) {
1252 + return;
1253 + }
1254 +
1255 + const insideHandleClass = 'elementor-section--handles-inside',
1256 + $handlesElement = this.$element.find('> .elementor-element-overlay > .elementor-editor-section-settings');
1257 +
1258 + if (elementor.settings.page.model.attributes.scroll_snap) {
1259 + this.$element.addClass(insideHandleClass);
1260 + return;
1261 + }
1262 +
1263 + const isOverflowHidden = this.isOverflowHidden();
1264 +
1265 + if (!isOverflowHidden && !this.isFirstSection()) {
1266 + return;
1267 + }
1268 +
1269 + const offset = isOverflowHidden ? 0 : this.getOffset();
1270 +
1271 + if (offset < 25) {
1272 + this.$element.addClass(insideHandleClass);
1273 +
1274 + if (offset < -5) {
1275 + $handlesElement.css('top', -offset);
1276 + } else {
1277 + $handlesElement.css('top', '');
1278 + }
1279 + } else {
1280 + this.$element.removeClass(insideHandleClass);
1281 + }
1282 + }
1283 +
1284 + onInit() {
1285 + if (!this.isActive()) {
1286 + return;
1287 + }
1288 +
1289 + this.setHandlesPosition();
1290 + this.$element.on('mouseenter', this.setHandlesPosition.bind(this));
1291 + }
1292 +
1293 +}
1294 +
1295 +exports.default = HandlesPosition;
1296 +
1297 +/***/ }),
1298 +
685 1299 /***/ "../assets/dev/js/frontend/handlers/section/section.js":
686 1300 /*!*************************************************************!*\
687 1301 !*** ../assets/dev/js/frontend/handlers/section/section.js ***!
688 1302 \*************************************************************/
@@ -687,163 +1301,321 @@
687 1301 !*** ../assets/dev/js/frontend/handlers/section/section.js ***!
688 1302 \*************************************************************/
689 1303 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
690 1304
1305 +"use strict";
691 1306
692 1307
1308 +var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1309 +
693 1310 Object.defineProperty(exports, "__esModule", ({
694 1311 value: true
695 1312 }));
696 -exports["default"] = void 0;
697 -var _createEditorHandler = __webpack_require__(/*! ../create-editor-handler */ "../assets/dev/js/frontend/handlers/create-editor-handler.js");
698 -var _default = exports["default"] = [() => __webpack_require__.e(/*! import() | section-frontend-handlers */ "section-frontend-handlers").then(__webpack_require__.bind(__webpack_require__, /*! ./stretched-section */ "../assets/dev/js/frontend/handlers/section/stretched-section.js")),
699 -// Must run before BackgroundSlideshow to init the slideshow only after the stretch.
700 -() => __webpack_require__.e(/*! import() | shared-frontend-handlers */ "shared-frontend-handlers").then(__webpack_require__.bind(__webpack_require__, /*! ../background-slideshow */ "../assets/dev/js/frontend/handlers/background-slideshow.js")), () => __webpack_require__.e(/*! import() | shared-frontend-handlers */ "shared-frontend-handlers").then(__webpack_require__.bind(__webpack_require__, /*! ../background-video */ "../assets/dev/js/frontend/handlers/background-video.js")), (0, _createEditorHandler.createEditorHandler)(() => __webpack_require__.e(/*! import() | shared-editor-handlers */ "shared-editor-handlers").then(__webpack_require__.bind(__webpack_require__, /*! ../handles-position */ "../assets/dev/js/frontend/handlers/handles-position.js"))), (0, _createEditorHandler.createEditorHandler)(() => __webpack_require__.e(/*! import() | section-editor-handlers */ "section-editor-handlers").then(__webpack_require__.bind(__webpack_require__, /*! ./shapes */ "../assets/dev/js/frontend/handlers/section/shapes.js")))];
1313 +exports.default = void 0;
701 1314
1315 +var _backgroundSlideshow = _interopRequireDefault(__webpack_require__(/*! ../background-slideshow */ "../assets/dev/js/frontend/handlers/background-slideshow.js"));
1316 +
1317 +var _backgroundVideo = _interopRequireDefault(__webpack_require__(/*! ./background-video */ "../assets/dev/js/frontend/handlers/section/background-video.js"));
1318 +
1319 +var _handlesPosition = _interopRequireDefault(__webpack_require__(/*! ./handles-position */ "../assets/dev/js/frontend/handlers/section/handles-position.js"));
1320 +
1321 +var _stretchedSection = _interopRequireDefault(__webpack_require__(/*! ./stretched-section */ "../assets/dev/js/frontend/handlers/section/stretched-section.js"));
1322 +
1323 +var _shapes = _interopRequireDefault(__webpack_require__(/*! ./shapes */ "../assets/dev/js/frontend/handlers/section/shapes.js"));
1324 +
1325 +var _default = [_stretchedSection.default, // Must run before BackgroundSlideshow to init the slideshow only after the stretch.
1326 +_backgroundSlideshow.default, _backgroundVideo.default, _handlesPosition.default, _shapes.default];
1327 +exports.default = _default;
1328 +
702 1329 /***/ }),
703 1330
704 -/***/ "../assets/dev/js/frontend/utils/anchor-scroll-margin.js":
705 -/*!***************************************************************!*\
706 - !*** ../assets/dev/js/frontend/utils/anchor-scroll-margin.js ***!
707 - \***************************************************************/
708 -/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1331 +/***/ "../assets/dev/js/frontend/handlers/section/shapes.js":
1332 +/*!************************************************************!*\
1333 + !*** ../assets/dev/js/frontend/handlers/section/shapes.js ***!
1334 + \************************************************************/
1335 +/***/ ((__unused_webpack_module, exports) => {
709 1336
1337 +"use strict";
710 1338
711 1339
712 1340 Object.defineProperty(exports, "__esModule", ({
713 1341 value: true
714 1342 }));
715 -exports["default"] = void 0;
716 -__webpack_require__(/*! core-js/modules/es.array.push.js */ "../node_modules/core-js/modules/es.array.push.js");
717 -__webpack_require__(/*! core-js/modules/esnext.iterator.constructor.js */ "../node_modules/core-js/modules/esnext.iterator.constructor.js");
718 -__webpack_require__(/*! core-js/modules/esnext.iterator.filter.js */ "../node_modules/core-js/modules/esnext.iterator.filter.js");
719 -__webpack_require__(/*! core-js/modules/esnext.iterator.for-each.js */ "../node_modules/core-js/modules/esnext.iterator.for-each.js");
720 -class _default extends elementorModules.ViewModule {
1343 +exports.default = void 0;
1344 +
1345 +class Shapes extends elementorModules.frontend.handlers.Base {
721 1346 getDefaultSettings() {
722 1347 return {
723 1348 selectors: {
724 - links: '.elementor-element a[href*="#"]',
725 - stickyElements: '.elementor-element.elementor-sticky'
726 - }
1349 + container: '> .elementor-shape-%s'
1350 + },
1351 + svgURL: elementorFrontend.config.urls.assets + 'shapes/'
727 1352 };
728 1353 }
729 - onInit() {
730 - this.observeStickyElements(() => {
731 - this.initializeStickyAndAnchorTracking();
732 - });
1354 +
1355 + getDefaultElements() {
1356 + const elements = {},
1357 + selectors = this.getSettings('selectors');
1358 + elements.$topContainer = this.$element.find(selectors.container.replace('%s', 'top'));
1359 + elements.$bottomContainer = this.$element.find(selectors.container.replace('%s', 'bottom'));
1360 + return elements;
733 1361 }
734 - observeStickyElements(callback) {
735 - const observer = new MutationObserver(mutationsList => {
736 - for (const mutation of mutationsList) {
737 - if ('childList' === mutation.type || 'attributes' === mutation.type && mutation.target.classList.contains('elementor-sticky')) {
738 - callback();
739 - }
1362 +
1363 + isActive() {
1364 + return elementorFrontend.isEditMode();
1365 + }
1366 +
1367 + getSvgURL(shapeType, fileName) {
1368 + let svgURL = this.getSettings('svgURL') + fileName + '.svg';
1369 +
1370 + if (elementor.config.additional_shapes && shapeType in elementor.config.additional_shapes) {
1371 + svgURL = elementor.config.additional_shapes[shapeType];
1372 +
1373 + if (-1 < fileName.indexOf('-negative')) {
1374 + svgURL = svgURL.replace('.svg', '-negative.svg');
740 1375 }
741 - });
742 - observer.observe(document.body, {
743 - childList: true,
744 - subtree: true,
745 - attributes: true,
746 - attributeFilter: ['class', 'style']
747 - });
1376 + }
1377 +
1378 + return svgURL;
748 1379 }
749 - initializeStickyAndAnchorTracking() {
750 - const anchorLinks = this.getAllAnchorLinks();
751 - const stickyElements = this.getAllStickyElements();
752 - const trackedElements = [];
753 - if (!stickyElements.length > 0 && !anchorLinks.length > 0) {
1380 +
1381 + buildSVG(side) {
1382 + const baseSettingKey = 'shape_divider_' + side,
1383 + shapeType = this.getElementSettings(baseSettingKey),
1384 + $svgContainer = this.elements['$' + side + 'Container'];
1385 + $svgContainer.attr('data-shape', shapeType);
1386 +
1387 + if (!shapeType) {
1388 + $svgContainer.empty(); // Shape-divider set to 'none'
1389 +
754 1390 return;
755 1391 }
756 - this.trackStickyElements(stickyElements, trackedElements);
757 - this.trackAnchorLinks(anchorLinks, trackedElements);
758 - this.organizeStickyAndAnchors(trackedElements);
1392 +
1393 + let fileName = shapeType;
1394 +
1395 + if (this.getElementSettings(baseSettingKey + '_negative')) {
1396 + fileName += '-negative';
1397 + }
1398 +
1399 + const svgURL = this.getSvgURL(shapeType, fileName);
1400 + jQuery.get(svgURL, data => {
1401 + $svgContainer.empty().append(data.childNodes[0]);
1402 + });
1403 + this.setNegative(side);
759 1404 }
760 - trackAnchorLinks(anchorLinks, trackedElements) {
761 - anchorLinks.forEach(element => {
762 - const target = this.getAnchorTarget(element);
763 - const scrollPosition = this.getScrollPosition(target);
764 - trackedElements.push({
765 - element: target,
766 - type: 'anchor',
767 - scrollPosition
768 - });
769 - });
1405 +
1406 + setNegative(side) {
1407 + this.elements['$' + side + 'Container'].attr('data-negative', !!this.getElementSettings('shape_divider_' + side + '_negative'));
770 1408 }
771 - trackStickyElements(stickyElements, trackedElements) {
772 - stickyElements.forEach(element => {
773 - const settings = this.getElementSettings(element);
774 - if (!settings || !settings.sticky_anchor_link_offset) {
775 - return;
1409 +
1410 + onInit(...args) {
1411 + if (!this.isActive(this.getSettings())) {
1412 + return;
1413 + }
1414 +
1415 + super.onInit(...args);
1416 + ['top', 'bottom'].forEach(side => {
1417 + if (this.getElementSettings('shape_divider_' + side)) {
1418 + this.buildSVG(side);
776 1419 }
777 - const {
778 - sticky_anchor_link_offset: scrollMarginTop
779 - } = settings;
780 - if (0 === scrollMarginTop) {
781 - return;
782 - }
783 - const scrollPosition = this.getScrollPosition(element);
784 - trackedElements.push({
785 - scrollMarginTop,
786 - type: 'sticky',
787 - scrollPosition
788 - });
789 1420 });
790 1421 }
791 - organizeStickyAndAnchors(elements) {
792 - const stickyList = this.filterAndSortElementsByType(elements, 'sticky');
793 - const anchorList = this.filterAndSortElementsByType(elements, 'anchor');
794 - stickyList.forEach((sticky, index) => {
795 - this.defineCurrentStickyRange(sticky, index, stickyList, anchorList);
796 - });
1422 +
1423 + onElementChange(propertyName) {
1424 + const shapeChange = propertyName.match(/^shape_divider_(top|bottom)$/);
1425 +
1426 + if (shapeChange) {
1427 + this.buildSVG(shapeChange[1]);
1428 + return;
1429 + }
1430 +
1431 + const negativeChange = propertyName.match(/^shape_divider_(top|bottom)_negative$/);
1432 +
1433 + if (negativeChange) {
1434 + this.buildSVG(negativeChange[1]);
1435 + this.setNegative(negativeChange[1]);
1436 + }
797 1437 }
798 - defineCurrentStickyRange(sticky, index, stickyList, anchorList) {
799 - const nextStickyScrollPosition = index + 1 < stickyList.length ? stickyList[index + 1].scrollPosition : Infinity;
800 - sticky.anchor = anchorList.filter(anchor => {
801 - const withinRange = anchor.scrollPosition > sticky.scrollPosition && anchor.scrollPosition < nextStickyScrollPosition;
802 - if (withinRange) {
803 - anchor.element.style.scrollMarginTop = `${sticky.scrollMarginTop}px`;
804 - }
805 - return withinRange;
806 - });
1438 +
1439 +}
1440 +
1441 +exports.default = Shapes;
1442 +
1443 +/***/ }),
1444 +
1445 +/***/ "../assets/dev/js/frontend/handlers/section/stretched-section.js":
1446 +/*!***********************************************************************!*\
1447 + !*** ../assets/dev/js/frontend/handlers/section/stretched-section.js ***!
1448 + \***********************************************************************/
1449 +/***/ ((__unused_webpack_module, exports) => {
1450 +
1451 +"use strict";
1452 +
1453 +
1454 +Object.defineProperty(exports, "__esModule", ({
1455 + value: true
1456 +}));
1457 +exports.default = void 0;
1458 +
1459 +class StretchedSection extends elementorModules.frontend.handlers.Base {
1460 + bindEvents() {
1461 + const handlerID = this.getUniqueHandlerID();
1462 + elementorFrontend.addListenerOnce(handlerID, 'resize', this.stretch);
1463 + elementorFrontend.addListenerOnce(handlerID, 'sticky:stick', this.stretch, this.$element);
1464 + elementorFrontend.addListenerOnce(handlerID, 'sticky:unstick', this.stretch, this.$element);
1465 +
1466 + if (elementorFrontend.isEditMode()) {
1467 + this.onKitChangeStretchContainerChange = this.onKitChangeStretchContainerChange.bind(this);
1468 + elementor.channels.editor.on('kit:change:stretchContainer', this.onKitChangeStretchContainerChange);
1469 + }
807 1470 }
808 - getScrollPosition(element) {
809 - let offsetTop = 0;
810 - while (element) {
811 - offsetTop += element.offsetTop;
812 - element = element.offsetParent;
1471 +
1472 + unbindEvents() {
1473 + elementorFrontend.removeListeners(this.getUniqueHandlerID(), 'resize', this.stretch);
1474 +
1475 + if (elementorFrontend.isEditMode()) {
1476 + elementor.channels.editor.off('kit:change:stretchContainer', this.onKitChangeStretchContainerChange);
813 1477 }
814 - return offsetTop;
815 1478 }
816 - getAllStickyElements() {
817 - const allStickyElements = document.querySelectorAll(this.getSettings('selectors.stickyElements'));
818 - return Array.from(allStickyElements).filter((anchor, index, self) => index === self.findIndex(t => t.getAttribute('data-id') === anchor.getAttribute('data-id')));
1479 +
1480 + isActive(settings) {
1481 + return elementorFrontend.isEditMode() || settings.$element.hasClass('elementor-section-stretched');
819 1482 }
820 - getAllAnchorLinks() {
821 - const allAnchors = document.querySelectorAll(this.getSettings('selectors.links'));
822 - return Array.from(allAnchors).filter((anchor, index, self) => index === self.findIndex(t => t.getAttribute('href') === anchor.getAttribute('href')));
1483 +
1484 + initStretch() {
1485 + this.stretch = this.stretch.bind(this);
1486 + this.stretchElement = new elementorModules.frontend.tools.StretchElement({
1487 + element: this.$element,
1488 + selectors: {
1489 + container: this.getStretchContainer()
1490 + }
1491 + });
823 1492 }
824 - filterAndSortElementsByType(elements, type) {
825 - return elements.filter(item => type === item.type).sort((a, b) => a.scrollPosition - b.scrollPosition);
1493 +
1494 + getStretchContainer() {
1495 + return elementorFrontend.getKitSettings('stretched_section_container') || window;
826 1496 }
827 - isValidSelector(hash) {
828 - const validSelectorPattern = /^#[A-Za-z_][\w-]*$/;
829 - return validSelectorPattern.test(hash);
1497 +
1498 + stretch() {
1499 + if (!this.getElementSettings('stretch_section')) {
1500 + return;
1501 + }
1502 +
1503 + this.stretchElement.stretch();
830 1504 }
831 - getAnchorTarget(element) {
832 - const hash = element?.hash;
833 - if (!this.isValidSelector(hash)) {
834 - return null;
1505 +
1506 + onInit(...args) {
1507 + if (!this.isActive(this.getSettings())) {
1508 + return;
835 1509 }
836 - return document.querySelector(hash);
1510 +
1511 + this.initStretch();
1512 + super.onInit(...args);
1513 + this.stretch();
837 1514 }
838 - getElementSettings(element) {
839 - return JSON.parse(element.getAttribute('data-settings'));
1515 +
1516 + onElementChange(propertyName) {
1517 + if ('stretch_section' === propertyName) {
1518 + if (this.getElementSettings('stretch_section')) {
1519 + this.stretch();
1520 + } else {
1521 + this.stretchElement.reset();
1522 + }
1523 + }
840 1524 }
1525 +
1526 + onKitChangeStretchContainerChange() {
1527 + this.stretchElement.setSettings('selectors.container', this.getStretchContainer());
1528 + this.stretch();
1529 + }
1530 +
841 1531 }
842 -exports["default"] = _default;
843 1532
1533 +exports.default = StretchedSection;
1534 +
844 1535 /***/ }),
845 1536
1537 +/***/ "../assets/dev/js/frontend/utils/anchors.js":
1538 +/*!**************************************************!*\
1539 + !*** ../assets/dev/js/frontend/utils/anchors.js ***!
1540 + \**************************************************/
1541 +/***/ ((module) => {
1542 +
1543 +"use strict";
1544 +
1545 +
1546 +module.exports = elementorModules.ViewModule.extend({
1547 + getDefaultSettings: function () {
1548 + return {
1549 + scrollDuration: 500,
1550 + selectors: {
1551 + links: 'a[href*="#"]',
1552 + targets: '.elementor-element, .elementor-menu-anchor',
1553 + scrollable: 'html, body'
1554 + }
1555 + };
1556 + },
1557 + getDefaultElements: function () {
1558 + var $ = jQuery,
1559 + selectors = this.getSettings('selectors');
1560 + return {
1561 + $scrollable: $(selectors.scrollable)
1562 + };
1563 + },
1564 + bindEvents: function () {
1565 + elementorFrontend.elements.$document.on('click', this.getSettings('selectors.links'), this.handleAnchorLinks);
1566 + },
1567 + handleAnchorLinks: function (event) {
1568 + var clickedLink = event.currentTarget,
1569 + isSamePathname = location.pathname === clickedLink.pathname,
1570 + isSameHostname = location.hostname === clickedLink.hostname,
1571 + $anchor;
1572 +
1573 + if (!isSameHostname || !isSamePathname || clickedLink.hash.length < 2) {
1574 + return;
1575 + }
1576 +
1577 + try {
1578 + $anchor = jQuery(clickedLink.hash).filter(this.getSettings('selectors.targets'));
1579 + } catch (e) {
1580 + return;
1581 + }
1582 +
1583 + if (!$anchor.length) {
1584 + return;
1585 + }
1586 +
1587 + var scrollTop = $anchor.offset().top,
1588 + $wpAdminBar = elementorFrontend.elements.$wpAdminBar,
1589 + $activeStickies = jQuery('.elementor-section.elementor-sticky--active:visible'),
1590 + maxStickyHeight = 0;
1591 +
1592 + if ($wpAdminBar.length > 0) {
1593 + scrollTop -= $wpAdminBar.height();
1594 + } // Offset height of tallest sticky
1595 +
1596 +
1597 + if ($activeStickies.length > 0) {
1598 + maxStickyHeight = Math.max.apply(null, $activeStickies.map(function () {
1599 + return jQuery(this).outerHeight();
1600 + }).get());
1601 + scrollTop -= maxStickyHeight;
1602 + }
1603 +
1604 + event.preventDefault();
1605 + scrollTop = elementorFrontend.hooks.applyFilters('frontend/handlers/menu_anchor/scroll_top_distance', scrollTop);
1606 + this.elements.$scrollable.animate({
1607 + scrollTop: scrollTop
1608 + }, this.getSettings('scrollDuration'), 'linear');
1609 + },
1610 + onInit: function () {
1611 + elementorModules.ViewModule.prototype.onInit.apply(this, arguments);
1612 + this.bindEvents();
1613 + }
1614 +});
1615 +
1616 +/***/ }),
1617 +
846 1618 /***/ "../assets/dev/js/frontend/utils/assets-loader.js":
847 1619 /*!********************************************************!*\
848 1620 !*** ../assets/dev/js/frontend/utils/assets-loader.js ***!
849 1621 \********************************************************/
@@ -848,14 +1620,16 @@
848 1620 !*** ../assets/dev/js/frontend/utils/assets-loader.js ***!
849 1621 \********************************************************/
850 1622 /***/ ((__unused_webpack_module, exports) => {
851 1623
1624 +"use strict";
852 1625
853 1626
854 1627 Object.defineProperty(exports, "__esModule", ({
855 1628 value: true
856 1629 }));
857 -exports["default"] = void 0;
1630 +exports.default = void 0;
1631 +
858 1632 class AssetsLoader {
859 1633 getScriptElement(src) {
860 1634 const scriptElement = document.createElement('script');
861 1635 scriptElement.src = src;
@@ -860,8 +1634,9 @@
860 1634 const scriptElement = document.createElement('script');
861 1635 scriptElement.src = src;
862 1636 return scriptElement;
863 1637 }
1638 +
864 1639 getStyleElement(src) {
865 1640 const styleElement = document.createElement('link');
866 1641 styleElement.rel = 'stylesheet';
867 1642 styleElement.href = src;
@@ -866,161 +1641,47 @@
866 1641 styleElement.rel = 'stylesheet';
867 1642 styleElement.href = src;
868 1643 return styleElement;
869 1644 }
1645 +
870 1646 load(type, key) {
871 1647 const assetData = AssetsLoader.assets[type][key];
1648 +
872 1649 if (!assetData.loader) {
873 - assetData.loader = this.isAssetLoaded(assetData, type) ? Promise.resolve(true) : this.loadAsset(assetData, type);
1650 + assetData.loader = new Promise(resolve => {
1651 + const element = 'style' === type ? this.getStyleElement(assetData.src) : this.getScriptElement(assetData.src);
1652 +
1653 + element.onload = () => resolve(true);
1654 +
1655 + const parent = 'head' === assetData.parent ? assetData.parent : 'body';
1656 + document[parent].appendChild(element);
1657 + });
874 1658 }
1659 +
875 1660 return assetData.loader;
876 1661 }
877 - isAssetLoaded(assetData, assetType) {
878 - const filePath = 'script' === assetType ? `script[src="${assetData.src}"]` : `link[href="${assetData.src}"]`;
879 - return !!document.querySelectorAll(filePath)?.length;
880 - }
881 - loadAsset(assetData, assetType) {
882 - return new Promise(resolve => {
883 - const element = 'style' === assetType ? this.getStyleElement(assetData.src) : this.getScriptElement(assetData.src);
884 - element.onload = () => resolve(true);
885 - this.appendAsset(assetData, element);
886 - });
887 - }
888 - appendAsset(assetData, element) {
889 - const beforeElement = document.querySelector(assetData.before);
890 - if (!!beforeElement) {
891 - beforeElement.insertAdjacentElement('beforebegin', element);
892 - return;
893 - }
894 - const parent = 'head' === assetData.parent ? assetData.parent : 'body';
895 - document[parent].appendChild(element);
896 - }
1662 +
897 1663 }
898 -exports["default"] = AssetsLoader;
899 -const assetsUrl = elementorFrontendConfig.urls.assets;
1664 +
1665 +exports.default = AssetsLoader;
900 1666 const fileSuffix = elementorFrontendConfig.environmentMode.isScriptDebug ? '' : '.min';
901 -const pluginVersion = elementorFrontendConfig.version;
902 1667 AssetsLoader.assets = {
903 1668 script: {
904 1669 dialog: {
905 - src: `${assetsUrl}lib/dialog/dialog${fileSuffix}.js?ver=4.9.3`
1670 + src: `${elementorFrontendConfig.urls.assets}lib/dialog/dialog${fileSuffix}.js?ver=4.8.1`
906 1671 },
907 1672 'share-link': {
908 - src: `${assetsUrl}lib/share-link/share-link${fileSuffix}.js?ver=${pluginVersion}`
1673 + src: `${elementorFrontendConfig.urls.assets}lib/share-link/share-link${fileSuffix}.js?ver=${elementorFrontendConfig.version}`
909 1674 },
910 - // TODO: Remove 'swiper' in v3.29.0 [ED-16272].
911 1675 swiper: {
912 - src: `${assetsUrl}lib/swiper/v8/swiper${fileSuffix}.js?ver=8.4.5`
1676 + src: `${elementorFrontendConfig.urls.assets}lib/swiper/swiper${fileSuffix}.js?ver=5.3.6`
913 1677 }
914 1678 },
915 - style: {
916 - swiper: {
917 - src: `${assetsUrl}lib/swiper/v8/css/swiper${fileSuffix}.css?ver=8.4.5`,
918 - parent: 'head'
919 - },
920 - 'e-lightbox': {
921 - src: elementorFrontendConfig?.responsive?.hasCustomBreakpoints ? `${elementorFrontendConfig.urls.uploadUrl}/elementor/css/custom-lightbox.min.css?ver=${pluginVersion}` : `${assetsUrl}css/conditionals/lightbox${fileSuffix}.css?ver=${pluginVersion}`
922 - },
923 - dialog: {
924 - src: `${assetsUrl}css/conditionals/dialog${fileSuffix}.css?ver=${pluginVersion}`,
925 - parent: 'head',
926 - before: '#elementor-frontend-css'
927 - }
928 - }
1679 + style: {}
929 1680 };
930 1681
931 1682 /***/ }),
932 1683
933 -/***/ "../assets/dev/js/frontend/utils/controls.js":
934 -/*!***************************************************!*\
935 - !*** ../assets/dev/js/frontend/utils/controls.js ***!
936 - \***************************************************/
937 -/***/ ((__unused_webpack_module, exports) => {
938 -
939 -
940 -
941 -Object.defineProperty(exports, "__esModule", ({
942 - value: true
943 -}));
944 -exports["default"] = void 0;
945 -class Controls {
946 - /**
947 - * Get Control Value
948 - *
949 - * Retrieves a control value.
950 - * This function has been copied from `elementor/assets/dev/js/editor/utils/conditions.js`.
951 - *
952 - * @since 3.11.0
953 - *
954 - * @param {{}} controlSettings A settings object (e.g. element settings - keys and values)
955 - * @param {string} controlKey The control key name
956 - * @param {string} controlSubKey A specific property of the control object.
957 - * @return {*} Control Value
958 - */
959 - getControlValue(controlSettings, controlKey, controlSubKey) {
960 - let value;
961 - if ('object' === typeof controlSettings[controlKey] && controlSubKey) {
962 - value = controlSettings[controlKey][controlSubKey];
963 - } else {
964 - value = controlSettings[controlKey];
965 - }
966 - return value;
967 - }
968 -
969 - /**
970 - * Get the value of a responsive control.
971 - *
972 - * Retrieves the value of a responsive control for the current device or for this first parent device which has a control value.
973 - *
974 - * @since 3.11.0
975 - *
976 - * @param {{}} controlSettings A settings object (e.g. element settings - keys and values)
977 - * @param {string} controlKey The control key name
978 - * @param {string} controlSubKey A specific property of the control object.
979 - * @param {string} device If we want to get a value for a specific device mode.
980 - * @return {*} Control Value
981 - */
982 - getResponsiveControlValue(controlSettings, controlKey, controlSubKey = '', device = null) {
983 - const currentDeviceMode = device || elementorFrontend.getCurrentDeviceMode(),
984 - controlValueDesktop = this.getControlValue(controlSettings, controlKey, controlSubKey);
985 -
986 - // Set the control value for the current device mode.
987 - // First check the widescreen device mode.
988 - if ('widescreen' === currentDeviceMode) {
989 - const controlValueWidescreen = this.getControlValue(controlSettings, `${controlKey}_widescreen`, controlSubKey);
990 - return !!controlValueWidescreen || 0 === controlValueWidescreen ? controlValueWidescreen : controlValueDesktop;
991 - }
992 -
993 - // Loop through all responsive and desktop device modes.
994 - const activeBreakpoints = elementorFrontend.breakpoints.getActiveBreakpointsList({
995 - withDesktop: true
996 - });
997 - let parentDeviceMode = currentDeviceMode,
998 - deviceIndex = activeBreakpoints.indexOf(currentDeviceMode),
999 - controlValue = '';
1000 - while (deviceIndex <= activeBreakpoints.length) {
1001 - if ('desktop' === parentDeviceMode) {
1002 - controlValue = controlValueDesktop;
1003 - break;
1004 - }
1005 - const responsiveControlKey = `${controlKey}_${parentDeviceMode}`,
1006 - responsiveControlValue = this.getControlValue(controlSettings, responsiveControlKey, controlSubKey);
1007 - if (!!responsiveControlValue || 0 === responsiveControlValue) {
1008 - controlValue = responsiveControlValue;
1009 - break;
1010 - }
1011 -
1012 - // If no control value has been set for the current device mode, then check the parent device mode.
1013 - deviceIndex++;
1014 - parentDeviceMode = activeBreakpoints[deviceIndex];
1015 - }
1016 - return controlValue;
1017 - }
1018 -}
1019 -exports["default"] = Controls;
1020 -
1021 -/***/ }),
1022 -
1023 1684 /***/ "../assets/dev/js/frontend/utils/lightbox/lightbox-manager.js":
1024 1685 /*!********************************************************************!*\
1025 1686 !*** ../assets/dev/js/frontend/utils/lightbox/lightbox-manager.js ***!
1026 1687 \********************************************************************/
@@ -1025,167 +1686,178 @@
1025 1686 !*** ../assets/dev/js/frontend/utils/lightbox/lightbox-manager.js ***!
1026 1687 \********************************************************************/
1027 1688 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1028 1689
1690 +"use strict";
1029 1691
1030 1692
1031 1693 Object.defineProperty(exports, "__esModule", ({
1032 1694 value: true
1033 1695 }));
1034 -exports["default"] = void 0;
1035 -__webpack_require__(/*! core-js/modules/esnext.iterator.constructor.js */ "../node_modules/core-js/modules/esnext.iterator.constructor.js");
1036 -__webpack_require__(/*! core-js/modules/esnext.iterator.find.js */ "../node_modules/core-js/modules/esnext.iterator.find.js");
1696 +exports.default = void 0;
1697 +
1037 1698 class LightboxManager extends elementorModules.ViewModule {
1038 1699 static getLightbox() {
1039 1700 const lightboxPromise = new Promise(resolveLightbox => {
1040 - Promise.all(/*! import() | lightbox */[__webpack_require__.e("vendors-node_modules_dompurify_dist_purify_cjs_js"), __webpack_require__.e("lightbox")]).then(__webpack_require__.t.bind(__webpack_require__, /*! elementor-frontend/utils/lightbox/lightbox */ "../assets/dev/js/frontend/utils/lightbox/lightbox.js", 23)).then(({
1041 - default: LightboxModule
1042 - }) => resolveLightbox(new LightboxModule()));
1043 - }),
1044 - dialogScriptPromise = elementorFrontend.utils.assetsLoader.load('script', 'dialog'),
1045 - dialogStylePromise = elementorFrontend.utils.assetsLoader.load('style', 'dialog'),
1046 - shareLinkPromise = elementorFrontend.utils.assetsLoader.load('script', 'share-link'),
1047 - swiperStylePromise = elementorFrontend.utils.assetsLoader.load('style', 'swiper'),
1048 - lightboxStylePromise = elementorFrontend.utils.assetsLoader.load('style', 'e-lightbox');
1049 - return Promise.all([lightboxPromise, dialogScriptPromise, dialogStylePromise, shareLinkPromise, swiperStylePromise, lightboxStylePromise]).then(() => lightboxPromise);
1701 + __webpack_require__.e(/*! import() | lightbox */ "lightbox").then(__webpack_require__.t.bind(__webpack_require__, /*! elementor-frontend/utils/lightbox/lightbox */ "../assets/dev/js/frontend/utils/lightbox/lightbox.js", 23)).then(({
1702 + default: LightboxModule
1703 + }) => resolveLightbox(new LightboxModule()));
1704 + }),
1705 + dialogPromise = elementorFrontend.utils.assetsLoader.load('script', 'dialog'),
1706 + shareLinkPromise = elementorFrontend.utils.assetsLoader.load('script', 'share-link');
1707 + return Promise.all([lightboxPromise, dialogPromise, shareLinkPromise]).then(() => lightboxPromise);
1050 1708 }
1709 +
1051 1710 getDefaultSettings() {
1052 1711 return {
1053 1712 selectors: {
1054 - links: 'a, [data-elementor-lightbox]',
1055 - slideshow: '[data-elementor-lightbox-slideshow]'
1713 + links: 'a, [data-elementor-lightbox]'
1056 1714 }
1057 1715 };
1058 1716 }
1717 +
1059 1718 getDefaultElements() {
1060 1719 return {
1061 - $links: jQuery(this.getSettings('selectors.links')),
1062 - $slideshow: jQuery(this.getSettings('selectors.slideshow'))
1720 + $links: jQuery(this.getSettings('selectors.links'))
1063 1721 };
1064 1722 }
1723 +
1065 1724 isLightboxLink(element) {
1066 1725 // Check for lowercase `a` to make sure it works also for links inside SVGs.
1067 - if ('a' === element.tagName.toLowerCase() && (element.hasAttribute('download') || !/^[^?]+\.(png|jpe?g|gif|svg|webp|avif)(\?.*)?$/i.test(element.href)) && !element.dataset.elementorLightboxVideo) {
1726 + if ('a' === element.tagName.toLowerCase() && (element.hasAttribute('download') || !/^[^?]+\.(png|jpe?g|gif|svg|webp)(\?.*)?$/i.test(element.href)) && !element.dataset.elementorLightboxVideo) {
1068 1727 return false;
1069 1728 }
1729 +
1070 1730 const generalOpenInLightbox = elementorFrontend.getKitSettings('global_image_lightbox'),
1071 - currentLinkOpenInLightbox = element.dataset.elementorOpenLightbox;
1731 + currentLinkOpenInLightbox = element.dataset.elementorOpenLightbox;
1072 1732 return 'yes' === currentLinkOpenInLightbox || generalOpenInLightbox && 'no' !== currentLinkOpenInLightbox;
1073 1733 }
1074 - isLightboxSlideshow() {
1075 - return 0 !== this.elements.$slideshow.length;
1076 - }
1734 +
1077 1735 async onLinkClick(event) {
1078 1736 const element = event.currentTarget,
1079 - $target = jQuery(event.target),
1080 - editMode = elementorFrontend.isEditMode(),
1081 - isColorPickingMode = editMode && elementor.$previewContents.find('body').hasClass('elementor-editor__ui-state__color-picker'),
1082 - isClickInsideElementor = !!$target.closest('.elementor-edit-area').length;
1737 + $target = jQuery(event.target),
1738 + editMode = elementorFrontend.isEditMode(),
1739 + isColorPickingMode = editMode && elementor.$previewContents.find('body').hasClass('elementor-editor__ui-state__color-picker'),
1740 + isClickInsideElementor = !!$target.closest('.elementor-edit-area').length;
1741 +
1083 1742 if (!this.isLightboxLink(element)) {
1084 1743 if (editMode && isClickInsideElementor) {
1085 1744 event.preventDefault();
1086 1745 }
1746 +
1087 1747 return;
1088 1748 }
1749 +
1089 1750 event.preventDefault();
1751 +
1090 1752 if (editMode && !elementor.getPreferences('lightbox_in_editor')) {
1091 1753 return;
1092 - }
1754 + } // Disable lightbox on color picking mode.
1093 1755
1094 - // Disable lightbox on color picking mode.
1756 +
1095 1757 if (isColorPickingMode) {
1096 1758 return;
1097 1759 }
1098 - const lightbox = await LightboxManager.getLightbox();
1760 +
1761 + const lightbox = this.isOptimizedAssetsLoading() ? await LightboxManager.getLightbox() : elementorFrontend.utils.lightbox;
1099 1762 lightbox.createLightbox(element);
1100 1763 }
1764 +
1765 + isOptimizedAssetsLoading() {
1766 + return elementorFrontend.config.experimentalFeatures.e_optimized_assets_loading;
1767 + }
1768 +
1101 1769 bindEvents() {
1102 1770 elementorFrontend.elements.$document.on('click', this.getSettings('selectors.links'), event => this.onLinkClick(event));
1103 1771 }
1772 +
1104 1773 onInit(...args) {
1105 1774 super.onInit(...args);
1106 - if (elementorFrontend.isEditMode()) {
1775 +
1776 + if (!this.isOptimizedAssetsLoading() || elementorFrontend.isEditMode()) {
1107 1777 return;
1108 - }
1109 - this.maybeActivateLightboxOnLink();
1110 - }
1111 - maybeActivateLightboxOnLink() {
1112 - // Detecting lightbox links on init will reduce the time of waiting to the lightbox to be display on slow connections.
1778 + } // Detecting lightbox links on init will reduce the time of waiting to the lightbox to be display on slow connections.
1779 +
1780 +
1113 1781 this.elements.$links.each((index, element) => {
1114 1782 if (this.isLightboxLink(element)) {
1115 - LightboxManager.getLightbox();
1783 + LightboxManager.getLightbox(); // Breaking the iteration when the library loading has already been triggered.
1116 1784
1117 - // Breaking the iteration when the library loading has already been triggered.
1118 1785 return false;
1119 1786 }
1120 1787 });
1121 1788 }
1789 +
1122 1790 }
1123 -exports["default"] = LightboxManager;
1124 1791
1792 +exports.default = LightboxManager;
1793 +
1125 1794 /***/ }),
1126 1795
1127 -/***/ "../assets/dev/js/frontend/utils/swiper.js":
1128 -/*!*************************************************!*\
1129 - !*** ../assets/dev/js/frontend/utils/swiper.js ***!
1130 - \*************************************************/
1131 -/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1796 +/***/ "../assets/dev/js/frontend/utils/swiper-bc.js":
1797 +/*!****************************************************!*\
1798 + !*** ../assets/dev/js/frontend/utils/swiper-bc.js ***!
1799 + \****************************************************/
1800 +/***/ ((__unused_webpack_module, exports) => {
1132 1801
1802 +"use strict";
1133 1803
1134 1804
1135 1805 Object.defineProperty(exports, "__esModule", ({
1136 1806 value: true
1137 1807 }));
1138 -exports["default"] = void 0;
1139 -__webpack_require__(/*! core-js/modules/esnext.iterator.constructor.js */ "../node_modules/core-js/modules/esnext.iterator.constructor.js");
1140 -__webpack_require__(/*! core-js/modules/esnext.iterator.for-each.js */ "../node_modules/core-js/modules/esnext.iterator.for-each.js");
1141 -class SwiperHandler {
1808 +exports.default = void 0;
1809 +
1810 +class SwiperBC {
1142 1811 constructor(container, config) {
1143 1812 this.config = config;
1813 +
1144 1814 if (this.config.breakpoints) {
1145 1815 // The config is passed as a param to allow adjustConfig to be called outside of this wrapper
1146 1816 this.config = this.adjustConfig(config);
1817 + } // In case of a legacy behaviour the constructor should return a new Swiper instance instead of a Promise.
1818 +
1819 +
1820 + if (config.legacy) {
1821 + return this.createSwiperInstance(container, this.config);
1147 1822 }
1148 - if (container instanceof jQuery) {
1149 - container = container[0];
1150 - }
1151 1823
1152 - // The Swiper will overlap the column width when applying custom margin values on the column.
1153 - container.closest('.elementor-widget-wrap')?.classList.add('e-swiper-container');
1154 - container.closest('.elementor-widget')?.classList.add('e-widget-swiper');
1155 1824 return new Promise(resolve => {
1156 - // TODO: Remove in v3.29.0 [ED-16272].
1157 - if ('undefined' === typeof Swiper) {
1158 - elementorFrontend.utils.assetsLoader.load('script', 'swiper').then(() => resolve(this.createSwiperInstance(container, this.config)));
1159 - return;
1825 + if (!elementorFrontend.config.experimentalFeatures.e_optimized_assets_loading) {
1826 + return resolve(this.createSwiperInstance(container, this.config));
1160 1827 }
1161 - if ('function' === typeof Swiper && 'undefined' === typeof window.Swiper) {
1162 - window.Swiper = Swiper;
1163 - }
1164 - resolve(this.createSwiperInstance(container, this.config));
1828 +
1829 + elementorFrontend.utils.assetsLoader.load('script', 'swiper').then(() => resolve(this.createSwiperInstance(container, this.config)));
1165 1830 });
1166 1831 }
1832 +
1167 1833 createSwiperInstance(container, config) {
1168 - const SwiperSource = window.Swiper;
1834 + // The condition should run only once to prevent an additional overwrite of the SwiperSource.
1835 + if (!SwiperBC.isSwiperLoaded && elementorFrontend.config.experimentalFeatures.e_optimized_assets_loading) {
1836 + SwiperSource = window.Swiper;
1837 + SwiperBC.isSwiperLoaded = true; // Once the SwiperSource has the Swiper lib function, we need to overwrite window.Swiper with the legacySwiper class.
1838 +
1839 + legacySwiper();
1840 + }
1841 +
1169 1842 SwiperSource.prototype.adjustConfig = this.adjustConfig;
1170 - config = this.applyMotionPreferences(config);
1171 1843 return new SwiperSource(container, config);
1172 - }
1844 + } // Backwards compatibility for Elementor Pro <2.9.0 (old Swiper version - <5.0.0)
1845 + // In Swiper 5.0.0 and up, breakpoints changed from acting as max-width to acting as min-width
1173 1846
1174 - // Backwards compatibility for Elementor Pro <2.9.0 (old Swiper version - <5.0.0)
1175 - // In Swiper 5.0.0 and up, breakpoints changed from acting as max-width to acting as min-width
1847 +
1176 1848 adjustConfig(config) {
1177 1849 // Only reverse the breakpoints if the handle param has been defined
1178 1850 if (!config.handleElementorBreakpoints) {
1179 1851 return config;
1180 1852 }
1853 +
1181 1854 const elementorBreakpoints = elementorFrontend.config.responsive.activeBreakpoints,
1182 - elementorBreakpointValues = elementorFrontend.breakpoints.getBreakpointValues();
1855 + elementorBreakpointValues = elementorFrontend.breakpoints.getBreakpointValues();
1183 1856 Object.keys(config.breakpoints).forEach(configBPKey => {
1184 1857 const configBPKeyInt = parseInt(configBPKey);
1185 - let breakpointToUpdate;
1858 + let breakpointToUpdate; // The `configBPKeyInt + 1` is a BC Fix for Elementor Pro Carousels from 2.8.0-2.8.3 used with Elementor >= 2.9.0
1186 1859
1187 - // The `configBPKeyInt + 1` is a BC Fix for Elementor Pro Carousels from 2.8.0-2.8.3 used with Elementor >= 2.9.0
1188 1860 if (configBPKeyInt === elementorBreakpoints.mobile.value || configBPKeyInt + 1 === elementorBreakpoints.mobile.value) {
1189 1861 // This handles the mobile breakpoint. Elementor's default sm breakpoint is never actually used,
1190 1862 // so the mobile breakpoint (md) needs to be handled separately and set to the 0 breakpoint (xs)
1191 1863 breakpointToUpdate = 0;
@@ -1197,17 +1869,16 @@
1197 1869 // Find the index of the current config breakpoint in the Elementor Breakpoints array
1198 1870 const currentBPIndexInElementorBPs = elementorBreakpointValues.findIndex(elementorBP => {
1199 1871 // BC Fix for Elementor Pro Carousels from 2.8.0-2.8.3 used with Elementor >= 2.9.0
1200 1872 return configBPKeyInt === elementorBP || configBPKeyInt + 1 === elementorBP;
1201 - });
1873 + }); // For all other Swiper config breakpoints, move them one breakpoint down on the breakpoint list,
1874 + // according to the array of Elementor's global breakpoints
1202 1875
1203 - // For all other Swiper config breakpoints, move them one breakpoint down on the breakpoint list,
1204 - // according to the array of Elementor's global breakpoints
1205 1876 breakpointToUpdate = elementorBreakpointValues[currentBPIndexInElementorBPs - 1];
1206 1877 }
1207 - config.breakpoints[breakpointToUpdate] = config.breakpoints[configBPKey];
1208 1878
1209 - // Then reset the settings in the original breakpoint key to the default values
1879 + config.breakpoints[breakpointToUpdate] = config.breakpoints[configBPKey]; // Then reset the settings in the original breakpoint key to the default values
1880 +
1210 1881 config.breakpoints[configBPKey] = {
1211 1882 slidesPerView: config.slidesPerView,
1212 1883 slidesPerGroup: config.slidesPerGroup ? config.slidesPerGroup : 1
1213 1884 };
@@ -1213,21 +1884,31 @@
1213 1884 };
1214 1885 });
1215 1886 return config;
1216 1887 }
1217 - applyMotionPreferences(config) {
1218 - const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
1219 - if (!prefersReducedMotion) {
1220 - return config;
1888 +
1889 +} // The following code is needed to support Pro version < 3.1.0.
1890 +
1891 +
1892 +exports.default = SwiperBC;
1893 +SwiperBC.isSwiperLoaded = false; // In the legacy behavior, window.Swiper was a class that returns an instance of the Swiper lib function after config adjustments.
1894 +
1895 +function legacySwiper() {
1896 + window.Swiper = class {
1897 + constructor(container, config) {
1898 + config.legacy = true;
1899 + return new SwiperBC(container, config);
1221 1900 }
1222 - return Object.assign({}, config, {
1223 - speed: 0,
1224 - autoplay: false
1225 - });
1226 - }
1901 +
1902 + };
1227 1903 }
1228 -exports["default"] = SwiperHandler;
1229 1904
1905 +let SwiperSource = window.Swiper; // In case that the Swiper lib exists (meaning not in optimized mode) we overwrite the window.Swiper with a class that supports legacy behavior.
1906 +
1907 +if (SwiperSource) {
1908 + legacySwiper();
1909 +}
1910 +
1230 1911 /***/ }),
1231 1912
1232 1913 /***/ "../assets/dev/js/frontend/utils/url-actions.js":
1233 1914 /*!******************************************************!*\
@@ -1232,17 +1913,18 @@
1232 1913 /***/ "../assets/dev/js/frontend/utils/url-actions.js":
1233 1914 /*!******************************************************!*\
1234 1915 !*** ../assets/dev/js/frontend/utils/url-actions.js ***!
1235 1916 \******************************************************/
1236 -/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1917 +/***/ ((__unused_webpack_module, exports) => {
1237 1918
1919 +"use strict";
1238 1920
1239 1921
1240 1922 Object.defineProperty(exports, "__esModule", ({
1241 1923 value: true
1242 1924 }));
1243 -exports["default"] = void 0;
1244 -__webpack_require__(/*! core-js/modules/web.dom-exception.stack.js */ "../node_modules/core-js/modules/web.dom-exception.stack.js");
1925 +exports.default = void 0;
1926 +
1245 1927 class _default extends elementorModules.ViewModule {
1246 1928 getDefaultSettings() {
1247 1929 return {
1248 1930 selectors: {
@@ -1249,77 +1931,81 @@
1249 1931 links: 'a[href^="%23elementor-action"], a[href^="#elementor-action"]'
1250 1932 }
1251 1933 };
1252 1934 }
1935 +
1253 1936 bindEvents() {
1254 1937 elementorFrontend.elements.$document.on('click', this.getSettings('selectors.links'), this.runLinkAction.bind(this));
1255 1938 }
1939 +
1256 1940 initActions() {
1257 1941 this.actions = {
1258 1942 lightbox: async settings => {
1259 1943 const lightbox = await elementorFrontend.utils.lightbox;
1260 - if (settings.slideshow) {
1261 - // Handle slideshow display
1262 - lightbox.openSlideshow(settings.slideshow, settings.url);
1944 +
1945 + if (settings.id) {
1946 + lightbox.openSlideshow(settings.id, settings.url);
1263 1947 } else {
1264 - // If the settings has an ID - the lightbox target content is an image - the ID is an attachment ID.
1265 - if (settings.id) {
1266 - settings.type = 'image';
1267 - }
1268 1948 lightbox.showModal(settings);
1269 1949 }
1270 1950 }
1271 1951 };
1272 1952 }
1953 +
1273 1954 addAction(name, callback) {
1274 1955 this.actions[name] = callback;
1275 1956 }
1957 +
1276 1958 runAction(url, ...restArgs) {
1277 - url = decodeURI(url);
1278 1959 url = decodeURIComponent(url);
1279 - const actionMatch = url.match(/action=(.+?)&/);
1960 + const actionMatch = url.match(/action=(.+?)&/),
1961 + settingsMatch = url.match(/settings=(.+)/);
1962 +
1280 1963 if (!actionMatch) {
1281 1964 return;
1282 1965 }
1966 +
1283 1967 const action = this.actions[actionMatch[1]];
1968 +
1284 1969 if (!action) {
1285 1970 return;
1286 1971 }
1972 +
1287 1973 let settings = {};
1288 - const settingsMatch = url.match(/settings=(.+)/);
1974 +
1289 1975 if (settingsMatch) {
1290 1976 settings = JSON.parse(atob(settingsMatch[1]));
1291 1977 }
1292 - settings.previousEvent = event;
1978 +
1293 1979 action(settings, ...restArgs);
1294 1980 }
1981 +
1295 1982 runLinkAction(event) {
1296 1983 event.preventDefault();
1297 1984 this.runAction(jQuery(event.currentTarget).attr('href'), event);
1298 1985 }
1986 +
1299 1987 runHashAction() {
1300 - if (!location.hash) {
1301 - return;
1988 + if (location.hash) {
1989 + this.runAction(location.hash);
1302 1990 }
1991 + }
1303 1992
1304 - // Only if an element with this action hash exists on the page do we allow running the action.
1305 - const elementWithHash = document.querySelector(`[data-e-action-hash="${location.hash}"], a[href*="${location.hash}"]`);
1306 - if (elementWithHash) {
1307 - this.runAction(elementWithHash.getAttribute('data-e-action-hash'));
1308 - }
1309 - }
1310 1993 createActionHash(action, settings) {
1311 1994 // We need to encode the hash tag (#) here, in order to support share links for a variety of providers
1312 1995 return encodeURIComponent(`#elementor-action:action=${action}&settings=${btoa(JSON.stringify(settings))}`);
1313 1996 }
1997 +
1314 1998 onInit() {
1315 1999 super.onInit();
1316 2000 this.initActions();
1317 2001 elementorFrontend.on('components:init', this.runHashAction.bind(this));
1318 2002 }
2003 +
1319 2004 }
1320 -exports["default"] = _default;
1321 2005
2006 +exports.default = _default;
2007 +
1322 2008 /***/ }),
1323 2009
1324 2010 /***/ "../assets/dev/js/frontend/utils/utils.js":
1325 2011 /*!************************************************!*\
@@ -1326,14 +2012,16 @@
1326 2012 !*** ../assets/dev/js/frontend/utils/utils.js ***!
1327 2013 \************************************************/
1328 2014 /***/ ((__unused_webpack_module, exports) => {
1329 2015
2016 +"use strict";
1330 2017
1331 2018
1332 2019 Object.defineProperty(exports, "__esModule", ({
1333 2020 value: true
1334 2021 }));
1335 -exports.isScrollSnapActive = exports.escapeHTML = void 0;
2022 +exports.escapeHTML = void 0;
2023 +
1336 2024 // Escape HTML special chars to prevent XSS.
1337 2025 const escapeHTML = str => {
1338 2026 const specialChars = {
1339 2027 '&': '&amp;',
@@ -1344,15 +2032,9 @@
1344 2032 };
1345 2033 return str.replace(/[&<>'"]/g, tag => specialChars[tag] || tag);
1346 2034 };
1347 2035
1348 -// Check if Scroll-Snap is active.
1349 2036 exports.escapeHTML = escapeHTML;
1350 -const isScrollSnapActive = () => {
1351 - const scrollSnapStatus = elementorFrontend.isEditMode() ? elementor.settings.page.model.attributes?.scroll_snap : elementorFrontend.config.settings.page?.scroll_snap;
1352 - return 'yes' === scrollSnapStatus ? true : false;
1353 -};
1354 -exports.isScrollSnapActive = isScrollSnapActive;
1355 2037
1356 2038 /***/ }),
1357 2039
1358 2040 /***/ "../assets/dev/js/frontend/utils/video-api/base-loader.js":
@@ -1360,14 +2042,16 @@
1360 2042 !*** ../assets/dev/js/frontend/utils/video-api/base-loader.js ***!
1361 2043 \****************************************************************/
1362 2044 /***/ ((__unused_webpack_module, exports) => {
1363 2045
2046 +"use strict";
1364 2047
1365 2048
1366 2049 Object.defineProperty(exports, "__esModule", ({
1367 2050 value: true
1368 2051 }));
1369 -exports["default"] = void 0;
2052 +exports.default = void 0;
2053 +
1370 2054 class BaseLoader extends elementorModules.ViewModule {
1371 2055 getDefaultSettings() {
1372 2056 return {
1373 2057 isInserted: false,
@@ -1375,13 +2059,15 @@
1375 2059 firstScript: 'script:first'
1376 2060 }
1377 2061 };
1378 2062 }
2063 +
1379 2064 getDefaultElements() {
1380 2065 return {
1381 2066 $firstScript: jQuery(this.getSettings('selectors.firstScript'))
1382 2067 };
1383 2068 }
2069 +
1384 2070 insertAPI() {
1385 2071 this.elements.$firstScript.before(jQuery('<script>', {
1386 2072 src: this.getApiURL()
1387 2073 }));
@@ -1386,16 +2072,19 @@
1386 2072 src: this.getApiURL()
1387 2073 }));
1388 2074 this.setSettings('isInserted', true);
1389 2075 }
2076 +
1390 2077 getVideoIDFromURL(url) {
1391 2078 const videoIDParts = url.match(this.getURLRegex());
1392 2079 return videoIDParts && videoIDParts[1];
1393 2080 }
2081 +
1394 2082 onApiReady(callback) {
1395 2083 if (!this.getSettings('isInserted')) {
1396 2084 this.insertAPI();
1397 2085 }
2086 +
1398 2087 if (this.isApiLoaded()) {
1399 2088 callback(this.getApiObject());
1400 2089 } else {
1401 2090 // If not ready check again by timeout..
@@ -1403,14 +2092,17 @@
1403 2092 this.onApiReady(callback);
1404 2093 }, 350);
1405 2094 }
1406 2095 }
2096 +
1407 2097 getAutoplayURL(videoURL) {
1408 2098 return videoURL.replace('&autoplay=0', '') + '&autoplay=1';
1409 2099 }
2100 +
1410 2101 }
1411 -exports["default"] = BaseLoader;
1412 2102
2103 +exports.default = BaseLoader;
2104 +
1413 2105 /***/ }),
1414 2106
1415 2107 /***/ "../assets/dev/js/frontend/utils/video-api/vimeo-loader.js":
1416 2108 /*!*****************************************************************!*\
@@ -1417,37 +2109,48 @@
1417 2109 !*** ../assets/dev/js/frontend/utils/video-api/vimeo-loader.js ***!
1418 2110 \*****************************************************************/
1419 2111 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1420 2112
2113 +"use strict";
1421 2114
1422 2115
1423 2116 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
2117 +
1424 2118 Object.defineProperty(exports, "__esModule", ({
1425 2119 value: true
1426 2120 }));
1427 -exports["default"] = void 0;
2121 +exports.default = void 0;
2122 +
1428 2123 var _baseLoader = _interopRequireDefault(__webpack_require__(/*! ./base-loader */ "../assets/dev/js/frontend/utils/video-api/base-loader.js"));
2124 +
1429 2125 class VimeoLoader extends _baseLoader.default {
1430 2126 getApiURL() {
1431 2127 return 'https://player.vimeo.com/api/player.js';
1432 2128 }
2129 +
1433 2130 getURLRegex() {
1434 2131 return /^(?:https?:\/\/)?(?:www|player\.)?(?:vimeo\.com\/)?(?:video\/|external\/)?(\d+)([^.?&#"'>]?)/;
1435 2132 }
2133 +
1436 2134 isApiLoaded() {
1437 2135 return window.Vimeo;
1438 2136 }
2137 +
1439 2138 getApiObject() {
1440 2139 return Vimeo;
1441 2140 }
2141 +
1442 2142 getAutoplayURL(videoURL) {
1443 - // Vimeo requires the '#t=' param to be last in the URL.
2143 + videoURL = super.getAutoplayURL(videoURL); // Vimeo requires the '#t=' param to be last in the URL.
2144 +
1444 2145 const timeMatch = videoURL.match(/#t=[^&]*/);
1445 2146 return videoURL.replace(timeMatch[0], '') + timeMatch;
1446 2147 }
2148 +
1447 2149 }
1448 -exports["default"] = VimeoLoader;
1449 2150
2151 +exports.default = VimeoLoader;
2152 +
1450 2153 /***/ }),
1451 2154
1452 2155 /***/ "../assets/dev/js/frontend/utils/video-api/youtube-loader.js":
1453 2156 /*!*******************************************************************!*\
@@ -1454,32 +2157,41 @@
1454 2157 !*** ../assets/dev/js/frontend/utils/video-api/youtube-loader.js ***!
1455 2158 \*******************************************************************/
1456 2159 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1457 2160
2161 +"use strict";
1458 2162
1459 2163
1460 2164 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
2165 +
1461 2166 Object.defineProperty(exports, "__esModule", ({
1462 2167 value: true
1463 2168 }));
1464 -exports["default"] = void 0;
2169 +exports.default = void 0;
2170 +
1465 2171 var _baseLoader = _interopRequireDefault(__webpack_require__(/*! ./base-loader */ "../assets/dev/js/frontend/utils/video-api/base-loader.js"));
2172 +
1466 2173 class YoutubeLoader extends _baseLoader.default {
1467 2174 getApiURL() {
1468 2175 return 'https://www.youtube.com/iframe_api';
1469 2176 }
2177 +
1470 2178 getURLRegex() {
1471 - return /^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?vi?=|(?:embed|v|vi|user|shorts)\/))([^?&"'>]+)/;
2179 + return /^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?vi?=|(?:embed|v|vi|user)\/))([^?&"'>]+)/;
1472 2180 }
2181 +
1473 2182 isApiLoaded() {
1474 2183 return window.YT && YT.loaded;
1475 2184 }
2185 +
1476 2186 getApiObject() {
1477 2187 return YT;
1478 2188 }
2189 +
1479 2190 }
1480 -exports["default"] = YoutubeLoader;
1481 2191
2192 +exports.default = YoutubeLoader;
2193 +
1482 2194 /***/ }),
1483 2195
1484 2196 /***/ "../assets/dev/js/public-path.js":
1485 2197 /*!***************************************!*\
@@ -1486,8 +2198,9 @@
1486 2198 !*** ../assets/dev/js/public-path.js ***!
1487 2199 \***************************************/
1488 2200 /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
1489 2201
2202 +"use strict";
1490 2203
1491 2204
1492 2205 /* eslint-disable camelcase */
1493 2206 __webpack_require__.p = elementorFrontendConfig.urls.assets + 'js/';
@@ -1497,20 +2210,18 @@
1497 2210 /***/ "../assets/dev/js/utils/breakpoints.js":
1498 2211 /*!*********************************************!*\
1499 2212 !*** ../assets/dev/js/utils/breakpoints.js ***!
1500 2213 \*********************************************/
1501 -/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2214 +/***/ ((__unused_webpack_module, exports) => {
1502 2215
2216 +"use strict";
1503 2217
1504 2218
1505 2219 Object.defineProperty(exports, "__esModule", ({
1506 2220 value: true
1507 2221 }));
1508 -exports["default"] = void 0;
1509 -__webpack_require__(/*! core-js/modules/es.array.push.js */ "../node_modules/core-js/modules/es.array.push.js");
1510 -__webpack_require__(/*! core-js/modules/esnext.iterator.constructor.js */ "../node_modules/core-js/modules/esnext.iterator.constructor.js");
1511 -__webpack_require__(/*! core-js/modules/esnext.iterator.for-each.js */ "../node_modules/core-js/modules/esnext.iterator.for-each.js");
1512 -__webpack_require__(/*! core-js/modules/esnext.iterator.map.js */ "../node_modules/core-js/modules/esnext.iterator.map.js");
2222 +exports.default = void 0;
2223 +
1513 2224 /**
1514 2225 * Breakpoints
1515 2226 *
1516 2227 * This utility class contains helper functions relating to Elementor's breakpoints system.
@@ -1518,14 +2229,12 @@
1518 2229 * @since 3.4.0
1519 2230 */
1520 2231 class Breakpoints extends elementorModules.Module {
1521 2232 constructor(responsiveConfig) {
1522 - super();
2233 + super(); // The passed config is either `elementor.config.responsive` or `elementorFrontend.config.responsive`
1523 2234
1524 - // The passed config is either `elementor.config.responsive` or `elementorFrontend.config.responsive`
1525 2235 this.responsiveConfig = responsiveConfig;
1526 2236 }
1527 -
1528 2237 /**
1529 2238 * Get Active Breakpoints List
1530 2239 *
1531 2240 * Returns a flat array containing the active breakpoints/devices. By default, it returns the li
@@ -1534,30 +2243,33 @@
1534 2243 * @since 3.4.0
1535 2244 *
1536 2245 * @param {Object} args
1537 2246 */
2247 +
2248 +
1538 2249 getActiveBreakpointsList(args = {}) {
1539 2250 const defaultArgs = {
1540 2251 largeToSmall: false,
1541 2252 withDesktop: false
1542 2253 };
1543 - args = {
1544 - ...defaultArgs,
2254 + args = { ...defaultArgs,
1545 2255 ...args
1546 2256 };
1547 2257 const breakpointKeys = Object.keys(this.responsiveConfig.activeBreakpoints);
2258 +
1548 2259 if (args.withDesktop) {
1549 2260 // If there is an active 'widescreen' breakpoint, insert the artificial 'desktop' device below it.
1550 2261 const widescreenIndex = breakpointKeys.indexOf('widescreen'),
1551 - indexToInsertDesktopDevice = -1 === widescreenIndex ? breakpointKeys.length : breakpointKeys.length - 1;
2262 + indexToInsertDesktopDevice = -1 === widescreenIndex ? breakpointKeys.length : breakpointKeys.length - 1;
1552 2263 breakpointKeys.splice(indexToInsertDesktopDevice, 0, 'desktop');
1553 2264 }
2265 +
1554 2266 if (args.largeToSmall) {
1555 2267 breakpointKeys.reverse();
1556 2268 }
2269 +
1557 2270 return breakpointKeys;
1558 2271 }
1559 -
1560 2272 /**
1561 2273 * Get Active Breakpoint Values
1562 2274 *
1563 2275 * Returns a flat array containing the list of active breakpoint values, from smallest to largest.
@@ -1563,19 +2275,20 @@
1563 2275 * Returns a flat array containing the list of active breakpoint values, from smallest to largest.
1564 2276 *
1565 2277 * @since 3.4.0
1566 2278 */
2279 +
2280 +
1567 2281 getBreakpointValues() {
1568 2282 const {
1569 - activeBreakpoints
1570 - } = this.responsiveConfig,
1571 - breakpointValues = [];
2283 + activeBreakpoints
2284 + } = this.responsiveConfig,
2285 + breakpointValues = [];
1572 2286 Object.values(activeBreakpoints).forEach(breakpointConfig => {
1573 2287 breakpointValues.push(breakpointConfig.value);
1574 2288 });
1575 2289 return breakpointValues;
1576 2290 }
1577 -
1578 2291 /**
1579 2292 * Get Desktop Previous Device Key
1580 2293 *
1581 2294 * Returns the key of the device directly under desktop (can be 'tablet', 'tablet_extra', 'laptop').
@@ -1581,17 +2294,20 @@
1581 2294 * Returns the key of the device directly under desktop (can be 'tablet', 'tablet_extra', 'laptop').
1582 2295 *
1583 2296 * @since 3.4.0
1584 2297 *
1585 - * @return {string} device key
2298 + * @returns {string}
1586 2299 */
2300 +
2301 +
1587 2302 getDesktopPreviousDeviceKey() {
1588 2303 let desktopPreviousDevice = '';
1589 2304 const {
1590 - activeBreakpoints
1591 - } = this.responsiveConfig,
1592 - breakpointKeys = Object.keys(activeBreakpoints),
1593 - numOfDevices = breakpointKeys.length;
2305 + activeBreakpoints
2306 + } = this.responsiveConfig,
2307 + breakpointKeys = Object.keys(activeBreakpoints),
2308 + numOfDevices = breakpointKeys.length;
2309 +
1594 2310 if ('min' === activeBreakpoints[breakpointKeys[numOfDevices - 1]].direction) {
1595 2311 // If the widescreen breakpoint is active, the device that's previous to desktop is the last one before
1596 2312 // widescreen.
1597 2313 desktopPreviousDevice = breakpointKeys[numOfDevices - 2];
@@ -1598,11 +2314,11 @@
1598 2314 } else {
1599 2315 // If the widescreen breakpoint isn't active, we just take the last device returned by the config.
1600 2316 desktopPreviousDevice = breakpointKeys[numOfDevices - 1];
1601 2317 }
2318 +
1602 2319 return desktopPreviousDevice;
1603 2320 }
1604 -
1605 2321 /**
1606 2322 * Get Device Minimum Breakpoint
1607 2323 *
1608 2324 * Returns the minimum point in the device's display range. For each device, the minimum point of its display range
@@ -1610,18 +2326,19 @@
1610 2326 * and desktop, and the mobile breakpoint is 767px, the minimum display point for tablet devices is 768px.
1611 2327 *
1612 2328 * @since 3.4.0
1613 2329 *
1614 - * @return {number|*} minimum breakpoint
2330 + * @returns {number|*}
1615 2331 */
2332 +
2333 +
1616 2334 getDesktopMinPoint() {
1617 2335 const {
1618 - activeBreakpoints
1619 - } = this.responsiveConfig,
1620 - desktopPreviousDevice = this.getDesktopPreviousDeviceKey();
2336 + activeBreakpoints
2337 + } = this.responsiveConfig,
2338 + desktopPreviousDevice = this.getDesktopPreviousDeviceKey();
1621 2339 return activeBreakpoints[desktopPreviousDevice].value + 1;
1622 2340 }
1623 -
1624 2341 /**
1625 2342 * Get Device Minimum Breakpoint
1626 2343 *
1627 2344 * Returns the minimum point in the device's display range. For each device, the minimum point of its display range
@@ -1629,20 +2346,24 @@
1629 2346 * and desktop, and the mobile breakpoint is 767px, the minimum display point for tablet devices is 768px.
1630 2347 *
1631 2348 * @since 3.4.0
1632 2349 *
1633 - * @param {string} device
1634 - * @return {number|*} minimum breakpoint
2350 + * @param device
2351 + * @returns {number|*}
1635 2352 */
2353 +
2354 +
1636 2355 getDeviceMinBreakpoint(device) {
1637 2356 if ('desktop' === device) {
1638 2357 return this.getDesktopMinPoint();
1639 2358 }
2359 +
1640 2360 const {
1641 - activeBreakpoints
1642 - } = this.responsiveConfig,
1643 - breakpointNames = Object.keys(activeBreakpoints);
2361 + activeBreakpoints
2362 + } = this.responsiveConfig,
2363 + breakpointNames = Object.keys(activeBreakpoints);
1644 2364 let minBreakpoint;
2365 +
1645 2366 if (breakpointNames[0] === device) {
1646 2367 // For the lowest breakpoint, the min point is always 320.
1647 2368 minBreakpoint = 320;
1648 2369 } else if ('widescreen' === device) {
@@ -1656,76 +2377,31 @@
1656 2377 minBreakpoint = this.responsiveConfig.breakpoints.widescreen;
1657 2378 }
1658 2379 } else {
1659 2380 const deviceNameIndex = breakpointNames.indexOf(device),
1660 - previousIndex = deviceNameIndex - 1;
2381 + previousIndex = deviceNameIndex - 1;
1661 2382 minBreakpoint = activeBreakpoints[breakpointNames[previousIndex]].value + 1;
1662 2383 }
2384 +
1663 2385 return minBreakpoint;
1664 2386 }
1665 -
1666 2387 /**
1667 2388 * Get Active Match Regex
1668 2389 *
1669 2390 * Returns a regular expression containing all active breakpoints prefixed with an underscore.
1670 2391 *
1671 - * @return {RegExp} Active Match Regex
2392 + * @returns {RegExp}
1672 2393 */
2394 +
2395 +
1673 2396 getActiveMatchRegex() {
1674 2397 return new RegExp(this.getActiveBreakpointsList().map(device => '_' + device).join('|') + '$');
1675 2398 }
2399 +
1676 2400 }
1677 -exports["default"] = Breakpoints;
1678 2401
1679 -/***/ }),
2402 +exports.default = Breakpoints;
1680 2403
1681 -/***/ "../assets/dev/js/utils/events.js":
1682 -/*!****************************************!*\
1683 - !*** ../assets/dev/js/utils/events.js ***!
1684 - \****************************************/
1685 -/***/ ((__unused_webpack_module, exports) => {
1686 -
1687 -
1688 -
1689 -Object.defineProperty(exports, "__esModule", ({
1690 - value: true
1691 -}));
1692 -exports["default"] = exports.Events = void 0;
1693 -class Events {
1694 - /**
1695 - * Dispatch an Elementor event.
1696 - *
1697 - * Will dispatch both native event & jQuery event (as BC).
1698 - * By default, `bcEvent` is `null`.
1699 - *
1700 - * @param {Object} context - The context that will dispatch the event.
1701 - * @param {string} event - Event to dispatch.
1702 - * @param {*} data - Data to pass to the event, default to `null`.
1703 - * @param {string|null} bcEvent - BC event to dispatch, default to `null`.
1704 - *
1705 - * @return {void}
1706 - */
1707 - static dispatch(context, event, data = null, bcEvent = null) {
1708 - // Make sure to use the native context if it's a jQuery instance.
1709 - context = context instanceof jQuery ? context[0] : context;
1710 -
1711 - // Dispatch the BC event only if exists.
1712 - if (bcEvent) {
1713 - context.dispatchEvent(new CustomEvent(bcEvent, {
1714 - detail: data
1715 - }));
1716 - }
1717 -
1718 - // jQuery's `.on()` listens also to native custom events, so there is no need
1719 - // to dispatch also a jQuery event.
1720 - context.dispatchEvent(new CustomEvent(event, {
1721 - detail: data
1722 - }));
1723 - }
1724 -}
1725 -exports.Events = Events;
1726 -var _default = exports["default"] = Events;
1727 -
1728 2404 /***/ }),
1729 2405
1730 2406 /***/ "../assets/dev/js/utils/hooks.js":
1731 2407 /*!***************************************!*\
@@ -1730,48 +2406,50 @@
1730 2406 /***/ "../assets/dev/js/utils/hooks.js":
1731 2407 /*!***************************************!*\
1732 2408 !*** ../assets/dev/js/utils/hooks.js ***!
1733 2409 \***************************************/
1734 -/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2410 +/***/ ((module) => {
1735 2411
2412 +"use strict";
1736 2413
1737 -
1738 2414 /**
1739 2415 * Handles managing all events for whatever you plug it into. Priorities for hooks are based on lowest to highest in
1740 2416 * that, lowest priority hooks are fired first.
1741 2417 */
1742 -__webpack_require__(/*! core-js/modules/es.array.push.js */ "../node_modules/core-js/modules/es.array.push.js");
2418 +
1743 2419 var EventManager = function () {
1744 2420 var slice = Array.prototype.slice,
1745 - MethodsAvailable;
1746 -
2421 + MethodsAvailable;
1747 2422 /**
1748 2423 * Contains the hooks that get registered with this EventManager. The array for storage utilizes a "flat"
1749 2424 * object literal such that looking up the hook utilizes the native object literal hash.
1750 2425 */
2426 +
1751 2427 var STORAGE = {
1752 2428 actions: {},
1753 2429 filters: {}
1754 2430 };
1755 -
1756 2431 /**
1757 2432 * Removes the specified hook by resetting the value of it.
1758 2433 *
1759 - * @param {string} type Type of hook, either 'actions' or 'filters'
1760 - * @param {Function} hook The hook (namespace.identifier) to remove
1761 - * @param {Function} callback
1762 - * @param {*} context
2434 + * @param type Type of hook, either 'actions' or 'filters'
2435 + * @param hook The hook (namespace.identifier) to remove
2436 + *
1763 2437 * @private
1764 2438 */
2439 +
1765 2440 function _removeHook(type, hook, callback, context) {
1766 2441 var handlers, handler, i;
2442 +
1767 2443 if (!STORAGE[type][hook]) {
1768 2444 return;
1769 2445 }
2446 +
1770 2447 if (!callback) {
1771 2448 STORAGE[type][hook] = [];
1772 2449 } else {
1773 2450 handlers = STORAGE[type][hook];
2451 +
1774 2452 if (!context) {
1775 2453 for (i = handlers.length; i--;) {
1776 2454 if (handlers[i].callback === callback) {
1777 2455 handlers.splice(i, 1);
@@ -1779,8 +2457,9 @@
1779 2457 }
1780 2458 } else {
1781 2459 for (i = handlers.length; i--;) {
1782 2460 handler = handlers[i];
2461 +
1783 2462 if (handler.callback === callback && handler.context === context) {
1784 2463 handlers.splice(i, 1);
1785 2464 }
1786 2465 }
@@ -1786,49 +2465,55 @@
1786 2465 }
1787 2466 }
1788 2467 }
1789 2468 }
1790 -
1791 2469 /**
1792 2470 * Use an insert sort for keeping our hooks organized based on priority. This function is ridiculously faster
1793 2471 * than bubble sort, etc: http://jsperf.com/javascript-sort
1794 2472 *
1795 - * @param {Array<*>} hooks The custom array containing all of the appropriate hooks to perform an insert sort on.
2473 + * @param hooks The custom array containing all of the appropriate hooks to perform an insert sort on.
1796 2474 * @private
1797 2475 */
2476 +
2477 +
1798 2478 function _hookInsertSort(hooks) {
1799 2479 var tmpHook, j, prevHook;
2480 +
1800 2481 for (var i = 1, len = hooks.length; i < len; i++) {
1801 2482 tmpHook = hooks[i];
1802 2483 j = i;
2484 +
1803 2485 while ((prevHook = hooks[j - 1]) && prevHook.priority > tmpHook.priority) {
1804 2486 hooks[j] = hooks[j - 1];
1805 2487 --j;
1806 2488 }
2489 +
1807 2490 hooks[j] = tmpHook;
1808 2491 }
2492 +
1809 2493 return hooks;
1810 2494 }
1811 -
1812 2495 /**
1813 2496 * Adds the hook to the appropriate storage container
1814 2497 *
1815 - * @param {string} type 'actions' or 'filters'
1816 - * @param {Array<*>} hook The hook (namespace.identifier) to add to our event manager
1817 - * @param {Function} callback The function that will be called when the hook is executed.
1818 - * @param {number} priority The priority of this hook. Must be an integer.
1819 - * @param {*} [context] A value to be used for this
2498 + * @param type 'actions' or 'filters'
2499 + * @param hook The hook (namespace.identifier) to add to our event manager
2500 + * @param callback The function that will be called when the hook is executed.
2501 + * @param priority The priority of this hook. Must be an integer.
2502 + * @param [context] A value to be used for this
1820 2503 * @private
1821 2504 */
2505 +
2506 +
1822 2507 function _addHook(type, hook, callback, priority, context) {
1823 2508 var hookObject = {
1824 - callback,
1825 - priority,
1826 - context
1827 - };
2509 + callback: callback,
2510 + priority: priority,
2511 + context: context
2512 + }; // Utilize 'prop itself' : http://jsperf.com/hasownproperty-vs-in-vs-undefined/19
1828 2513
1829 - // Utilize 'prop itself' : http://jsperf.com/hasownproperty-vs-in-vs-undefined/19
1830 2514 var hooks = STORAGE[type][hook];
2515 +
1831 2516 if (hooks) {
1832 2517 // TEMP FIX BUG
1833 2518 var hasSameCallback = false;
1834 2519 jQuery.each(hooks, function () {
@@ -1836,37 +2521,43 @@
1836 2521 hasSameCallback = true;
1837 2522 return false;
1838 2523 }
1839 2524 });
2525 +
1840 2526 if (hasSameCallback) {
1841 2527 return;
1842 - }
1843 - // END TEMP FIX BUG
2528 + } // END TEMP FIX BUG
1844 2529
2530 +
1845 2531 hooks.push(hookObject);
1846 2532 hooks = _hookInsertSort(hooks);
1847 2533 } else {
1848 2534 hooks = [hookObject];
1849 2535 }
2536 +
1850 2537 STORAGE[type][hook] = hooks;
1851 2538 }
1852 -
1853 2539 /**
1854 2540 * Runs the specified hook. If it is an action, the value is not modified but if it is a filter, it is.
1855 2541 *
1856 - * @param {string} type 'actions' or 'filters'
1857 - * @param {*} hook The hook ( namespace.identifier ) to be ran.
1858 - * @param {Array<*>} args Arguments to pass to the action/filter. If it's a filter, args is actually a single parameter.
2542 + * @param type 'actions' or 'filters'
2543 + * @param hook The hook ( namespace.identifier ) to be ran.
2544 + * @param args Arguments to pass to the action/filter. If it's a filter, args is actually a single parameter.
1859 2545 * @private
1860 2546 */
2547 +
2548 +
1861 2549 function _runHook(type, hook, args) {
1862 2550 var handlers = STORAGE[type][hook],
1863 - i,
1864 - len;
2551 + i,
2552 + len;
2553 +
1865 2554 if (!handlers) {
1866 2555 return 'filters' === type ? args[0] : false;
1867 2556 }
2557 +
1868 2558 len = handlers.length;
2559 +
1869 2560 if ('filters' === type) {
1870 2561 for (i = 0; i < len; i++) {
1871 2562 args[0] = handlers[i].callback.apply(handlers[i].context, args);
1872 2563 }
@@ -1874,112 +2565,128 @@
1874 2565 for (i = 0; i < len; i++) {
1875 2566 handlers[i].callback.apply(handlers[i].context, args);
1876 2567 }
1877 2568 }
2569 +
1878 2570 return 'filters' === type ? args[0] : true;
1879 2571 }
1880 -
1881 2572 /**
1882 2573 * Adds an action to the event manager.
1883 2574 *
1884 - * @param {string} action Must contain namespace.identifier
1885 - * @param {Function} callback Must be a valid callback function before this action is added
1886 - * @param {number} [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook
1887 - * @param {*} [context] Supply a value to be used for this
2575 + * @param action Must contain namespace.identifier
2576 + * @param callback Must be a valid callback function before this action is added
2577 + * @param [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook
2578 + * @param [context] Supply a value to be used for this
1888 2579 */
2580 +
2581 +
1889 2582 function addAction(action, callback, priority, context) {
1890 2583 if ('string' === typeof action && 'function' === typeof callback) {
1891 2584 priority = parseInt(priority || 10, 10);
2585 +
1892 2586 _addHook('actions', action, callback, priority, context);
1893 2587 }
2588 +
1894 2589 return MethodsAvailable;
1895 2590 }
1896 -
1897 2591 /**
1898 2592 * Performs an action if it exists. You can pass as many arguments as you want to this function; the only rule is
1899 2593 * that the first argument must always be the action.
1900 2594 */
1901 - function doAction(/* Action, arg1, arg2, ... */
1902 - ) {
2595 +
2596 +
2597 + function doAction() {
1903 2598 var args = slice.call(arguments);
1904 2599 var action = args.shift();
2600 +
1905 2601 if ('string' === typeof action) {
1906 2602 _runHook('actions', action, args);
1907 2603 }
2604 +
1908 2605 return MethodsAvailable;
1909 2606 }
1910 -
1911 2607 /**
1912 2608 * Removes the specified action if it contains a namespace.identifier & exists.
1913 2609 *
1914 - * @param {string} action The action to remove
1915 - * @param {Function} [callback] Callback function to remove
2610 + * @param action The action to remove
2611 + * @param [callback] Callback function to remove
1916 2612 */
2613 +
2614 +
1917 2615 function removeAction(action, callback) {
1918 2616 if ('string' === typeof action) {
1919 2617 _removeHook('actions', action, callback);
1920 2618 }
2619 +
1921 2620 return MethodsAvailable;
1922 2621 }
1923 -
1924 2622 /**
1925 2623 * Adds a filter to the event manager.
1926 2624 *
1927 - * @param {string} filter Must contain namespace.identifier
1928 - * @param {Function} callback Must be a valid callback function before this action is added
1929 - * @param {number} [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook
1930 - * @param {*} [context] Supply a value to be used for this
2625 + * @param filter Must contain namespace.identifier
2626 + * @param callback Must be a valid callback function before this action is added
2627 + * @param [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook
2628 + * @param [context] Supply a value to be used for this
1931 2629 */
2630 +
2631 +
1932 2632 function addFilter(filter, callback, priority, context) {
1933 2633 if ('string' === typeof filter && 'function' === typeof callback) {
1934 2634 priority = parseInt(priority || 10, 10);
2635 +
1935 2636 _addHook('filters', filter, callback, priority, context);
1936 2637 }
2638 +
1937 2639 return MethodsAvailable;
1938 2640 }
1939 -
1940 2641 /**
1941 2642 * Performs a filter if it exists. You should only ever pass 1 argument to be filtered. The only rule is that
1942 2643 * the first argument must always be the filter.
1943 2644 */
1944 - function applyFilters(/* Filter, filtered arg, arg2, ... */
1945 - ) {
2645 +
2646 +
2647 + function applyFilters() {
1946 2648 var args = slice.call(arguments);
1947 2649 var filter = args.shift();
2650 +
1948 2651 if ('string' === typeof filter) {
1949 2652 return _runHook('filters', filter, args);
1950 2653 }
2654 +
1951 2655 return MethodsAvailable;
1952 2656 }
1953 -
1954 2657 /**
1955 2658 * Removes the specified filter if it contains a namespace.identifier & exists.
1956 2659 *
1957 - * @param {string} filter The action to remove
1958 - * @param {Function} [callback] Callback function to remove
2660 + * @param filter The action to remove
2661 + * @param [callback] Callback function to remove
1959 2662 */
2663 +
2664 +
1960 2665 function removeFilter(filter, callback) {
1961 2666 if ('string' === typeof filter) {
1962 2667 _removeHook('filters', filter, callback);
1963 2668 }
2669 +
1964 2670 return MethodsAvailable;
1965 2671 }
1966 -
1967 2672 /**
1968 2673 * Maintain a reference to the object scope so our public methods never get confusing.
1969 2674 */
2675 +
2676 +
1970 2677 MethodsAvailable = {
1971 - removeFilter,
1972 - applyFilters,
1973 - addFilter,
1974 - removeAction,
1975 - doAction,
1976 - addAction
1977 - };
2678 + removeFilter: removeFilter,
2679 + applyFilters: applyFilters,
2680 + addFilter: addFilter,
2681 + removeAction: removeAction,
2682 + doAction: doAction,
2683 + addAction: addAction
2684 + }; // return all of the publicly available methods
1978 2685
1979 - // Return all of the publicly available methods
1980 2686 return MethodsAvailable;
1981 2687 };
2688 +
1982 2689 module.exports = EventManager;
1983 2690
1984 2691 /***/ }),
1985 2692
@@ -1988,53 +2695,56 @@
1988 2695 !*** ../core/common/assets/js/utils/environment.js ***!
1989 2696 \*****************************************************/
1990 2697 /***/ ((__unused_webpack_module, exports) => {
1991 2698
2699 +"use strict";
1992 2700
1993 2701
1994 2702 Object.defineProperty(exports, "__esModule", ({
1995 2703 value: true
1996 2704 }));
1997 -exports["default"] = void 0;
2705 +exports.default = void 0;
2706 +
1998 2707 const matchUserAgent = UserAgentStr => {
1999 - return userAgent.indexOf(UserAgentStr) >= 0;
2000 - },
2001 - userAgent = navigator.userAgent,
2002 - // Solution influenced by https://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser
2708 + return userAgent.indexOf(UserAgentStr) >= 0;
2709 +},
2710 + userAgent = navigator.userAgent,
2711 + // Solution influenced by https://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser
2712 +// Opera 8.0+
2713 +isOpera = !!window.opr && !!opr.addons || !!window.opera || matchUserAgent(' OPR/'),
2714 + // Firefox 1.0+
2715 +isFirefox = matchUserAgent('Firefox'),
2716 + // Safari 3.0+ "[object HTMLElementConstructor]"
2717 +isSafari = /^((?!chrome|android).)*safari/i.test(userAgent) || /constructor/i.test(window.HTMLElement) || (p => {
2718 + return '[object SafariRemoteNotification]' === p.toString();
2719 +})(!window.safari || typeof safari !== 'undefined' && safari.pushNotification),
2720 + // Internet Explorer 6-11
2721 +isIE = /Trident|MSIE/.test(userAgent) && (
2722 +/*@cc_on!@*/
2723 + false || !!document.documentMode),
2724 + // Edge 20+
2725 +isEdge = !isIE && !!window.StyleMedia || matchUserAgent('Edg'),
2726 + // Google Chrome (Not accurate)
2727 +isChrome = !!window.chrome && matchUserAgent('Chrome') && !(isEdge || isOpera),
2728 + // Blink engine
2729 +isBlink = matchUserAgent('Chrome') && !!window.CSS,
2730 + // Apple Webkit engine
2731 +isAppleWebkit = matchUserAgent('AppleWebKit') && !isBlink,
2732 + environment = {
2733 + appleWebkit: isAppleWebkit,
2734 + blink: isBlink,
2735 + chrome: isChrome,
2736 + edge: isEdge,
2737 + firefox: isFirefox,
2738 + ie: isIE,
2739 + mac: matchUserAgent('Macintosh'),
2740 + opera: isOpera,
2741 + safari: isSafari,
2742 + webkit: matchUserAgent('AppleWebKit')
2743 +};
2003 2744
2004 - // Opera 8.0+
2005 - isOpera = !!window.opr && !!opr.addons || !!window.opera || matchUserAgent(' OPR/'),
2006 - // Firefox 1.0+
2007 - isFirefox = matchUserAgent('Firefox'),
2008 - // Safari 3.0+ "[object HTMLElementConstructor]"
2009 - isSafari = /^((?!chrome|android).)*safari/i.test(userAgent) || /constructor/i.test(window.HTMLElement) || (p => {
2010 - return '[object SafariRemoteNotification]' === p.toString();
2011 - })(!window.safari || typeof safari !== 'undefined' && safari.pushNotification),
2012 - // Internet Explorer 6-11
2013 - isIE = /Trident|MSIE/.test(userAgent) && (/* @cc_on!@*/ false || !!document.documentMode),
2014 - // Edge 20+
2015 - isEdge = !isIE && !!window.StyleMedia || matchUserAgent('Edg'),
2016 - // Google Chrome (Not accurate)
2017 - isChrome = !!window.chrome && matchUserAgent('Chrome') && !(isEdge || isOpera),
2018 - // Blink engine
2019 - isBlink = matchUserAgent('Chrome') && !!window.CSS,
2020 - // Apple Webkit engine
2021 - isAppleWebkit = matchUserAgent('AppleWebKit') && !isBlink,
2022 - isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0,
2023 - environment = {
2024 - isTouchDevice,
2025 - appleWebkit: isAppleWebkit,
2026 - blink: isBlink,
2027 - chrome: isChrome,
2028 - edge: isEdge,
2029 - firefox: isFirefox,
2030 - ie: isIE,
2031 - mac: matchUserAgent('Macintosh'),
2032 - opera: isOpera,
2033 - safari: isSafari,
2034 - webkit: matchUserAgent('AppleWebKit')
2035 - };
2036 -var _default = exports["default"] = environment;
2745 +var _default = environment;
2746 +exports.default = _default;
2037 2747
2038 2748 /***/ }),
2039 2749
2040 2750 /***/ "../core/common/assets/js/utils/storage.js":
@@ -2040,38 +2750,44 @@
2040 2750 /***/ "../core/common/assets/js/utils/storage.js":
2041 2751 /*!*************************************************!*\
2042 2752 !*** ../core/common/assets/js/utils/storage.js ***!
2043 2753 \*************************************************/
2044 -/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2754 +/***/ ((__unused_webpack_module, exports) => {
2045 2755
2756 +"use strict";
2046 2757
2047 2758
2048 2759 Object.defineProperty(exports, "__esModule", ({
2049 2760 value: true
2050 2761 }));
2051 -exports["default"] = void 0;
2052 -__webpack_require__(/*! core-js/modules/esnext.iterator.constructor.js */ "../node_modules/core-js/modules/esnext.iterator.constructor.js");
2053 -__webpack_require__(/*! core-js/modules/esnext.iterator.for-each.js */ "../node_modules/core-js/modules/esnext.iterator.for-each.js");
2762 +exports.default = void 0;
2763 +
2054 2764 class _default extends elementorModules.Module {
2055 2765 get(key, options) {
2056 2766 options = options || {};
2057 2767 let storage;
2768 +
2058 2769 try {
2059 2770 storage = options.session ? sessionStorage : localStorage;
2060 2771 } catch (e) {
2061 2772 return key ? undefined : {};
2062 2773 }
2774 +
2063 2775 let elementorStorage = storage.getItem('elementor');
2776 +
2064 2777 if (elementorStorage) {
2065 2778 elementorStorage = JSON.parse(elementorStorage);
2066 2779 } else {
2067 2780 elementorStorage = {};
2068 2781 }
2782 +
2069 2783 if (!elementorStorage.__expiration) {
2070 2784 elementorStorage.__expiration = {};
2071 2785 }
2786 +
2072 2787 const expiration = elementorStorage.__expiration;
2073 2788 let expirationToCheck = [];
2789 +
2074 2790 if (key) {
2075 2791 if (expiration[key]) {
2076 2792 expirationToCheck = [key];
2077 2793 }
@@ -2077,8 +2793,9 @@
2077 2793 }
2078 2794 } else {
2079 2795 expirationToCheck = Object.keys(expiration);
2080 2796 }
2797 +
2081 2798 let entryExpired = false;
2082 2799 expirationToCheck.forEach(expirationKey => {
2083 2800 if (new Date(expiration[expirationKey]) < new Date()) {
2084 2801 delete elementorStorage[expirationKey];
@@ -2085,39 +2802,50 @@
2085 2802 delete expiration[expirationKey];
2086 2803 entryExpired = true;
2087 2804 }
2088 2805 });
2806 +
2089 2807 if (entryExpired) {
2090 2808 this.save(elementorStorage, options.session);
2091 2809 }
2810 +
2092 2811 if (key) {
2093 2812 return elementorStorage[key];
2094 2813 }
2814 +
2095 2815 return elementorStorage;
2096 2816 }
2817 +
2097 2818 set(key, value, options) {
2098 2819 options = options || {};
2099 2820 const elementorStorage = this.get(null, options);
2100 2821 elementorStorage[key] = value;
2822 +
2101 2823 if (options.lifetimeInSeconds) {
2102 2824 const date = new Date();
2103 2825 date.setTime(date.getTime() + options.lifetimeInSeconds * 1000);
2104 2826 elementorStorage.__expiration[key] = date.getTime();
2105 2827 }
2828 +
2106 2829 this.save(elementorStorage, options.session);
2107 2830 }
2831 +
2108 2832 save(object, session) {
2109 2833 let storage;
2834 +
2110 2835 try {
2111 2836 storage = session ? sessionStorage : localStorage;
2112 2837 } catch (e) {
2113 2838 return;
2114 2839 }
2840 +
2115 2841 storage.setItem('elementor', JSON.stringify(object));
2116 2842 }
2843 +
2117 2844 }
2118 -exports["default"] = _default;
2119 2845
2846 +exports.default = _default;
2847 +
2120 2848 /***/ }),
2121 2849
2122 2850 /***/ "../modules/shapes/assets/js/frontend/frontend.js":
2123 2851 /*!********************************************************!*\
@@ -2124,327 +2852,32 @@
2124 2852 !*** ../modules/shapes/assets/js/frontend/frontend.js ***!
2125 2853 \********************************************************/
2126 2854 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2127 2855
2856 +"use strict";
2128 2857
2129 2858
2130 2859 Object.defineProperty(exports, "__esModule", ({
2131 2860 value: true
2132 2861 }));
2133 -exports["default"] = void 0;
2862 +exports.default = void 0;
2863 +
2134 2864 class _default extends elementorModules.Module {
2135 2865 constructor() {
2136 2866 super();
2137 - elementorFrontend.elementsHandler.attachHandler('text-path', () => Promise.all(/*! import() | text-path */[__webpack_require__.e("vendors-node_modules_dompurify_dist_purify_cjs_js"), __webpack_require__.e("text-path")]).then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/text-path */ "../modules/shapes/assets/js/frontend/handlers/text-path.js")));
2867 + elementorFrontend.elementsHandler.attachHandler('text-path', () => __webpack_require__.e(/*! import() | text-path */ "text-path").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/text-path */ "../modules/shapes/assets/js/frontend/handlers/text-path.js")));
2138 2868 }
2139 -}
2140 -exports["default"] = _default;
2141 2869
2142 -/***/ }),
2143 -
2144 -/***/ "../node_modules/core-js/internals/a-possible-prototype.js":
2145 -/*!*****************************************************************!*\
2146 - !*** ../node_modules/core-js/internals/a-possible-prototype.js ***!
2147 - \*****************************************************************/
2148 -/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2149 -
2150 -
2151 -var isPossiblePrototype = __webpack_require__(/*! ../internals/is-possible-prototype */ "../node_modules/core-js/internals/is-possible-prototype.js");
2152 -
2153 -var $String = String;
2154 -var $TypeError = TypeError;
2155 -
2156 -module.exports = function (argument) {
2157 - if (isPossiblePrototype(argument)) return argument;
2158 - throw new $TypeError("Can't set " + $String(argument) + ' as a prototype');
2159 -};
2160 -
2161 -
2162 -/***/ }),
2163 -
2164 -/***/ "../node_modules/core-js/internals/dom-exception-constants.js":
2165 -/*!********************************************************************!*\
2166 - !*** ../node_modules/core-js/internals/dom-exception-constants.js ***!
2167 - \********************************************************************/
2168 -/***/ ((module) => {
2169 -
2170 -
2171 -module.exports = {
2172 - IndexSizeError: { s: 'INDEX_SIZE_ERR', c: 1, m: 1 },
2173 - DOMStringSizeError: { s: 'DOMSTRING_SIZE_ERR', c: 2, m: 0 },
2174 - HierarchyRequestError: { s: 'HIERARCHY_REQUEST_ERR', c: 3, m: 1 },
2175 - WrongDocumentError: { s: 'WRONG_DOCUMENT_ERR', c: 4, m: 1 },
2176 - InvalidCharacterError: { s: 'INVALID_CHARACTER_ERR', c: 5, m: 1 },
2177 - NoDataAllowedError: { s: 'NO_DATA_ALLOWED_ERR', c: 6, m: 0 },
2178 - NoModificationAllowedError: { s: 'NO_MODIFICATION_ALLOWED_ERR', c: 7, m: 1 },
2179 - NotFoundError: { s: 'NOT_FOUND_ERR', c: 8, m: 1 },
2180 - NotSupportedError: { s: 'NOT_SUPPORTED_ERR', c: 9, m: 1 },
2181 - InUseAttributeError: { s: 'INUSE_ATTRIBUTE_ERR', c: 10, m: 1 },
2182 - InvalidStateError: { s: 'INVALID_STATE_ERR', c: 11, m: 1 },
2183 - SyntaxError: { s: 'SYNTAX_ERR', c: 12, m: 1 },
2184 - InvalidModificationError: { s: 'INVALID_MODIFICATION_ERR', c: 13, m: 1 },
2185 - NamespaceError: { s: 'NAMESPACE_ERR', c: 14, m: 1 },
2186 - InvalidAccessError: { s: 'INVALID_ACCESS_ERR', c: 15, m: 1 },
2187 - ValidationError: { s: 'VALIDATION_ERR', c: 16, m: 0 },
2188 - TypeMismatchError: { s: 'TYPE_MISMATCH_ERR', c: 17, m: 1 },
2189 - SecurityError: { s: 'SECURITY_ERR', c: 18, m: 1 },
2190 - NetworkError: { s: 'NETWORK_ERR', c: 19, m: 1 },
2191 - AbortError: { s: 'ABORT_ERR', c: 20, m: 1 },
2192 - URLMismatchError: { s: 'URL_MISMATCH_ERR', c: 21, m: 1 },
2193 - QuotaExceededError: { s: 'QUOTA_EXCEEDED_ERR', c: 22, m: 1 },
2194 - TimeoutError: { s: 'TIMEOUT_ERR', c: 23, m: 1 },
2195 - InvalidNodeTypeError: { s: 'INVALID_NODE_TYPE_ERR', c: 24, m: 1 },
2196 - DataCloneError: { s: 'DATA_CLONE_ERR', c: 25, m: 1 }
2197 -};
2198 -
2199 -
2200 -/***/ }),
2201 -
2202 -/***/ "../node_modules/core-js/internals/error-stack-clear.js":
2203 -/*!**************************************************************!*\
2204 - !*** ../node_modules/core-js/internals/error-stack-clear.js ***!
2205 - \**************************************************************/
2206 -/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2207 -
2208 -
2209 -var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../node_modules/core-js/internals/function-uncurry-this.js");
2210 -
2211 -var $Error = Error;
2212 -var replace = uncurryThis(''.replace);
2213 -
2214 -var TEST = (function (arg) { return String(new $Error(arg).stack); })('zxcasd');
2215 -// eslint-disable-next-line redos/no-vulnerable, sonarjs/slow-regex -- safe
2216 -var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/;
2217 -var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);
2218 -
2219 -module.exports = function (stack, dropEntries) {
2220 - if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) {
2221 - while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');
2222 - } return stack;
2223 -};
2224 -
2225 -
2226 -/***/ }),
2227 -
2228 -/***/ "../node_modules/core-js/internals/function-uncurry-this-accessor.js":
2229 -/*!***************************************************************************!*\
2230 - !*** ../node_modules/core-js/internals/function-uncurry-this-accessor.js ***!
2231 - \***************************************************************************/
2232 -/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2233 -
2234 -
2235 -var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../node_modules/core-js/internals/function-uncurry-this.js");
2236 -var aCallable = __webpack_require__(/*! ../internals/a-callable */ "../node_modules/core-js/internals/a-callable.js");
2237 -
2238 -module.exports = function (object, key, method) {
2239 - try {
2240 - // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
2241 - return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));
2242 - } catch (error) { /* empty */ }
2243 -};
2244 -
2245 -
2246 -/***/ }),
2247 -
2248 -/***/ "../node_modules/core-js/internals/inherit-if-required.js":
2249 -/*!****************************************************************!*\
2250 - !*** ../node_modules/core-js/internals/inherit-if-required.js ***!
2251 - \****************************************************************/
2252 -/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2253 -
2254 -
2255 -var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../node_modules/core-js/internals/is-callable.js");
2256 -var isObject = __webpack_require__(/*! ../internals/is-object */ "../node_modules/core-js/internals/is-object.js");
2257 -var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "../node_modules/core-js/internals/object-set-prototype-of.js");
2258 -
2259 -// makes subclassing work correct for wrapped built-ins
2260 -module.exports = function ($this, dummy, Wrapper) {
2261 - var NewTarget, NewTargetPrototype;
2262 - if (
2263 - // it can work only with native `setPrototypeOf`
2264 - setPrototypeOf &&
2265 - // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
2266 - isCallable(NewTarget = dummy.constructor) &&
2267 - NewTarget !== Wrapper &&
2268 - isObject(NewTargetPrototype = NewTarget.prototype) &&
2269 - NewTargetPrototype !== Wrapper.prototype
2270 - ) setPrototypeOf($this, NewTargetPrototype);
2271 - return $this;
2272 -};
2273 -
2274 -
2275 -/***/ }),
2276 -
2277 -/***/ "../node_modules/core-js/internals/is-possible-prototype.js":
2278 -/*!******************************************************************!*\
2279 - !*** ../node_modules/core-js/internals/is-possible-prototype.js ***!
2280 - \******************************************************************/
2281 -/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2282 -
2283 -
2284 -var isObject = __webpack_require__(/*! ../internals/is-object */ "../node_modules/core-js/internals/is-object.js");
2285 -
2286 -module.exports = function (argument) {
2287 - return isObject(argument) || argument === null;
2288 -};
2289 -
2290 -
2291 -/***/ }),
2292 -
2293 -/***/ "../node_modules/core-js/internals/normalize-string-argument.js":
2294 -/*!**********************************************************************!*\
2295 - !*** ../node_modules/core-js/internals/normalize-string-argument.js ***!
2296 - \**********************************************************************/
2297 -/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2298 -
2299 -
2300 -var toString = __webpack_require__(/*! ../internals/to-string */ "../node_modules/core-js/internals/to-string.js");
2301 -
2302 -module.exports = function (argument, $default) {
2303 - return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);
2304 -};
2305 -
2306 -
2307 -/***/ }),
2308 -
2309 -/***/ "../node_modules/core-js/internals/object-set-prototype-of.js":
2310 -/*!********************************************************************!*\
2311 - !*** ../node_modules/core-js/internals/object-set-prototype-of.js ***!
2312 - \********************************************************************/
2313 -/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2314 -
2315 -
2316 -/* eslint-disable no-proto -- safe */
2317 -var uncurryThisAccessor = __webpack_require__(/*! ../internals/function-uncurry-this-accessor */ "../node_modules/core-js/internals/function-uncurry-this-accessor.js");
2318 -var isObject = __webpack_require__(/*! ../internals/is-object */ "../node_modules/core-js/internals/is-object.js");
2319 -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "../node_modules/core-js/internals/require-object-coercible.js");
2320 -var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ "../node_modules/core-js/internals/a-possible-prototype.js");
2321 -
2322 -// `Object.setPrototypeOf` method
2323 -// https://tc39.es/ecma262/#sec-object.setprototypeof
2324 -// Works with __proto__ only. Old v8 can't work with null proto objects.
2325 -// eslint-disable-next-line es/no-object-setprototypeof -- safe
2326 -module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {
2327 - var CORRECT_SETTER = false;
2328 - var test = {};
2329 - var setter;
2330 - try {
2331 - setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');
2332 - setter(test, []);
2333 - CORRECT_SETTER = test instanceof Array;
2334 - } catch (error) { /* empty */ }
2335 - return function setPrototypeOf(O, proto) {
2336 - requireObjectCoercible(O);
2337 - aPossiblePrototype(proto);
2338 - if (!isObject(O)) return O;
2339 - if (CORRECT_SETTER) setter(O, proto);
2340 - else O.__proto__ = proto;
2341 - return O;
2342 - };
2343 -}() : undefined);
2344 -
2345 -
2346 -/***/ }),
2347 -
2348 -/***/ "../node_modules/core-js/internals/to-string.js":
2349 -/*!******************************************************!*\
2350 - !*** ../node_modules/core-js/internals/to-string.js ***!
2351 - \******************************************************/
2352 -/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2353 -
2354 -
2355 -var classof = __webpack_require__(/*! ../internals/classof */ "../node_modules/core-js/internals/classof.js");
2356 -
2357 -var $String = String;
2358 -
2359 -module.exports = function (argument) {
2360 - if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');
2361 - return $String(argument);
2362 -};
2363 -
2364 -
2365 -/***/ }),
2366 -
2367 -/***/ "../node_modules/core-js/modules/web.dom-exception.stack.js":
2368 -/*!******************************************************************!*\
2369 - !*** ../node_modules/core-js/modules/web.dom-exception.stack.js ***!
2370 - \******************************************************************/
2371 -/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
2372 -
2373 -
2374 -var $ = __webpack_require__(/*! ../internals/export */ "../node_modules/core-js/internals/export.js");
2375 -var globalThis = __webpack_require__(/*! ../internals/global-this */ "../node_modules/core-js/internals/global-this.js");
2376 -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../node_modules/core-js/internals/get-built-in.js");
2377 -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../node_modules/core-js/internals/create-property-descriptor.js");
2378 -var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ "../node_modules/core-js/internals/object-define-property.js").f);
2379 -var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../node_modules/core-js/internals/has-own-property.js");
2380 -var anInstance = __webpack_require__(/*! ../internals/an-instance */ "../node_modules/core-js/internals/an-instance.js");
2381 -var inheritIfRequired = __webpack_require__(/*! ../internals/inherit-if-required */ "../node_modules/core-js/internals/inherit-if-required.js");
2382 -var normalizeStringArgument = __webpack_require__(/*! ../internals/normalize-string-argument */ "../node_modules/core-js/internals/normalize-string-argument.js");
2383 -var DOMExceptionConstants = __webpack_require__(/*! ../internals/dom-exception-constants */ "../node_modules/core-js/internals/dom-exception-constants.js");
2384 -var clearErrorStack = __webpack_require__(/*! ../internals/error-stack-clear */ "../node_modules/core-js/internals/error-stack-clear.js");
2385 -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../node_modules/core-js/internals/descriptors.js");
2386 -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../node_modules/core-js/internals/is-pure.js");
2387 -
2388 -var DOM_EXCEPTION = 'DOMException';
2389 -var Error = getBuiltIn('Error');
2390 -var NativeDOMException = getBuiltIn(DOM_EXCEPTION);
2391 -
2392 -var $DOMException = function DOMException() {
2393 - anInstance(this, DOMExceptionPrototype);
2394 - var argumentsLength = arguments.length;
2395 - var message = normalizeStringArgument(argumentsLength < 1 ? undefined : arguments[0]);
2396 - var name = normalizeStringArgument(argumentsLength < 2 ? undefined : arguments[1], 'Error');
2397 - var that = new NativeDOMException(message, name);
2398 - var error = new Error(message);
2399 - error.name = DOM_EXCEPTION;
2400 - defineProperty(that, 'stack', createPropertyDescriptor(1, clearErrorStack(error.stack, 1)));
2401 - inheritIfRequired(that, this, $DOMException);
2402 - return that;
2403 -};
2404 -
2405 -var DOMExceptionPrototype = $DOMException.prototype = NativeDOMException.prototype;
2406 -
2407 -var ERROR_HAS_STACK = 'stack' in new Error(DOM_EXCEPTION);
2408 -var DOM_EXCEPTION_HAS_STACK = 'stack' in new NativeDOMException(1, 2);
2409 -
2410 -// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
2411 -var descriptor = NativeDOMException && DESCRIPTORS && Object.getOwnPropertyDescriptor(globalThis, DOM_EXCEPTION);
2412 -
2413 -// Bun ~ 0.1.1 DOMException have incorrect descriptor and we can't redefine it
2414 -// https://github.com/Jarred-Sumner/bun/issues/399
2415 -var BUGGY_DESCRIPTOR = !!descriptor && !(descriptor.writable && descriptor.configurable);
2416 -
2417 -var FORCED_CONSTRUCTOR = ERROR_HAS_STACK && !BUGGY_DESCRIPTOR && !DOM_EXCEPTION_HAS_STACK;
2418 -
2419 -// `DOMException` constructor patch for `.stack` where it's required
2420 -// https://webidl.spec.whatwg.org/#es-DOMException-specialness
2421 -$({ global: true, constructor: true, forced: IS_PURE || FORCED_CONSTRUCTOR }, { // TODO: fix export logic
2422 - DOMException: FORCED_CONSTRUCTOR ? $DOMException : NativeDOMException
2423 -});
2424 -
2425 -var PolyfilledDOMException = getBuiltIn(DOM_EXCEPTION);
2426 -var PolyfilledDOMExceptionPrototype = PolyfilledDOMException.prototype;
2427 -
2428 -if (PolyfilledDOMExceptionPrototype.constructor !== PolyfilledDOMException) {
2429 - if (!IS_PURE) {
2430 - defineProperty(PolyfilledDOMExceptionPrototype, 'constructor', createPropertyDescriptor(1, PolyfilledDOMException));
2431 - }
2432 -
2433 - for (var key in DOMExceptionConstants) if (hasOwn(DOMExceptionConstants, key)) {
2434 - var constant = DOMExceptionConstants[key];
2435 - var constantName = constant.s;
2436 - if (!hasOwn(PolyfilledDOMException, constantName)) {
2437 - defineProperty(PolyfilledDOMException, constantName, createPropertyDescriptor(6, constant.c));
2438 - }
2439 - }
2440 2870 }
2441 2871
2872 +exports.default = _default;
2442 2873
2443 2874 /***/ })
2444 2875
2445 2876 },
2446 2877 /******/ __webpack_require__ => { // webpackRuntimeModules
2878 +/******/ "use strict";
2879 +/******/
2447 2880 /******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
2448 2881 /******/ __webpack_require__.O(0, ["frontend-modules"], () => (__webpack_exec__("../assets/dev/js/frontend/frontend.js")));
2449 2882 /******/ var __webpack_exports__ = __webpack_require__.O();
2450 2883 /******/ }