1/*! elementor-pro - v3.21.0 - 20-05-2024 */ 2(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["frontend"],{ 3
4/***/ "../assets/dev/js/frontend/frontend.js": 5/*!*********************************************!*\ 6 !*** ../assets/dev/js/frontend/frontend.js ***! 7 \*********************************************/ 8/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { 9 10"use strict"; 11 12 13var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 14__webpack_require__(/*! ../public-path */ "../assets/dev/js/public-path.js"); 15var _frontend = _interopRequireDefault(__webpack_require__(/*! ../../../../modules/motion-fx/assets/js/frontend/frontend */ "../modules/motion-fx/assets/js/frontend/frontend.js")); 16var _frontend2 = _interopRequireDefault(__webpack_require__(/*! ../../../../modules/sticky/assets/js/frontend/frontend */ "../modules/sticky/assets/js/frontend/frontend.js")); 17var _frontend3 = _interopRequireDefault(__webpack_require__(/*! ../../../../modules/code-highlight/assets/js/frontend/frontend */ "../modules/code-highlight/assets/js/frontend/frontend.js")); 18var _frontend4 = _interopRequireDefault(__webpack_require__(/*! ../../../../modules/video-playlist/assets/js/frontend/frontend */ "../modules/video-playlist/assets/js/frontend/frontend.js")); 19var _frontend5 = _interopRequireDefault(__webpack_require__(/*! ../../../../modules/payments/assets/js/frontend/frontend */ "../modules/payments/assets/js/frontend/frontend.js")); 20var _frontend6 = _interopRequireDefault(__webpack_require__(/*! ../../../../modules/progress-tracker/assets/js/frontend/frontend */ "../modules/progress-tracker/assets/js/frontend/frontend.js")); 21var _controls = _interopRequireDefault(__webpack_require__(/*! ./utils/controls */ "../assets/dev/js/frontend/utils/controls.js")); 22var _dropdownMenuHeightController = _interopRequireDefault(__webpack_require__(/*! ./utils/dropdown-menu-height-controller */ "../assets/dev/js/frontend/utils/dropdown-menu-height-controller.js")); 23class ElementorProFrontend extends elementorModules.ViewModule { 24 onInit() { 25 super.onInit(); 26 this.config = ElementorProFrontendConfig; 27 this.modules = {}; 28 this.initOnReadyComponents(); 29 } 30 bindEvents() { 31 jQuery(window).on('elementor/frontend/init', this.onElementorFrontendInit.bind(this)); 32 } 33 initModules() { 34 // Handlers that should be available by default for sections usage. 35 let handlers = { 36 motionFX: _frontend.default, 37 sticky: _frontend2.default, 38 codeHighlight: _frontend3.default, 39 videoPlaylist: _frontend4.default, 40 payments: _frontend5.default, 41 progressTracker: _frontend6.default 42 }; 43 44 // Keep this line before applying filter on the handlers. 45 // TODO: BC - Deprecated since 3.7.0 46 elementorProFrontend.trigger('elementor-pro/modules/init:before'); 47 48 // TODO: Use this instead. 49 elementorProFrontend.trigger('elementor-pro/modules/init/before'); 50 handlers = elementorFrontend.hooks.applyFilters('elementor-pro/frontend/handlers', handlers); 51 jQuery.each(handlers, (moduleName, ModuleClass) => { 52 this.modules[moduleName] = new ModuleClass(); 53 }); 54 55 // TODO: BC Since 2.9.0 56 this.modules.linkActions = { 57 addAction: function () { 58 elementorFrontend.utils.urlActions.addAction(...arguments); 59 } 60 }; 61 } 62 onElementorFrontendInit() { 63 this.initModules(); 64 } 65 initOnReadyComponents() { 66 this.utils = { 67 controls: new _controls.default(), 68 DropdownMenuHeightController: _dropdownMenuHeightController.default 69 }; 70 } 71} 72window.elementorProFrontend = new ElementorProFrontend(); 73 74/***/ }), 75
76/***/ "../assets/dev/js/frontend/utils/controls.js": 77/*!***************************************************!*\ 78 !*** ../assets/dev/js/frontend/utils/controls.js ***! 79 \***************************************************/ 80/***/ ((__unused_webpack_module, exports) => { 81 82"use strict"; 83 84 85Object.defineProperty(exports, "__esModule", ({ 86 value: true 87})); 88exports["default"] = void 0; 89class Controls { 90 /** 91 * Get Control Value 92 * 93 * Retrieves a control value. 94 * This function has been copied from `elementor/assets/dev/js/editor/utils/conditions.js`. 95 * 96 * @since 3.11.0 97 * 98 * @param {{}} controlSettings A settings object (e.g. element settings - keys and values) 99 * @param {string} controlKey The control key name 100 * @param {string} controlSubKey A specific property of the control object. 101 * @return {*} Control Value 102 */ 103 getControlValue(controlSettings, controlKey, controlSubKey) { 104 let value; 105 if ('object' === typeof controlSettings[controlKey] && controlSubKey) { 106 value = controlSettings[controlKey][controlSubKey]; 107 } else { 108 value = controlSettings[controlKey]; 109 } 110 return value; 111 } 112 113 /** 114 * Get the value of a responsive control. 115 * 116 * Retrieves the value of a responsive control for the current device or for this first parent device which has a control value. 117 * 118 * @since 3.11.0 119 * 120 * @param {{}} controlSettings A settings object (e.g. element settings - keys and values) 121 * @param {string} controlKey The control key name 122 * @param {string} controlSubKey A specific property of the control object. 123 * @return {*} Control Value 124 */ 125 getResponsiveControlValue(controlSettings, controlKey) {
126 let controlSubKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; 127 const currentDeviceMode = elementorFrontend.getCurrentDeviceMode(), 128 controlValueDesktop = this.getControlValue(controlSettings, controlKey, controlSubKey); 129 130 // Set the control value for the current device mode. 131 // First check the widescreen device mode. 132 if ('widescreen' === currentDeviceMode) { 133 const controlValueWidescreen = this.getControlValue(controlSettings, `${controlKey}_widescreen`, controlSubKey); 134 return !!controlValueWidescreen || 0 === controlValueWidescreen ? controlValueWidescreen : controlValueDesktop; 135 } 136 137 // Loop through all responsive and desktop device modes. 138 const activeBreakpoints = elementorFrontend.breakpoints.getActiveBreakpointsList({ 139 withDesktop: true 140 }); 141 let parentDeviceMode = currentDeviceMode, 142 deviceIndex = activeBreakpoints.indexOf(currentDeviceMode), 143 controlValue = ''; 144 while (deviceIndex <= activeBreakpoints.length) { 145 if ('desktop' === parentDeviceMode) { 146 controlValue = controlValueDesktop; 147 break; 148 } 149 const responsiveControlKey = `${controlKey}_${parentDeviceMode}`, 150 responsiveControlValue = this.getControlValue(controlSettings, responsiveControlKey, controlSubKey); 151 if (!!responsiveControlValue || 0 === responsiveControlValue) { 152 controlValue = responsiveControlValue; 153 break; 154 } 155 156 // If no control value has been set for the current device mode, then check the parent device mode. 157 deviceIndex++; 158 parentDeviceMode = activeBreakpoints[deviceIndex]; 159 } 160 return controlValue; 161 } 162} 163exports["default"] = Controls; 164 165/***/ }), 166
167/***/ "../assets/dev/js/frontend/utils/dropdown-menu-height-controller.js": 168/*!**************************************************************************!*\ 169 !*** ../assets/dev/js/frontend/utils/dropdown-menu-height-controller.js ***! 170 \**************************************************************************/ 171/***/ ((__unused_webpack_module, exports) => { 172 173"use strict"; 174 175 176Object.defineProperty(exports, "__esModule", ({ 177 value: true 178})); 179exports["default"] = void 0; 180class DropdownMenuHeightController { 181 constructor(widgetConfig) { 182 this.widgetConfig = widgetConfig; 183 } 184 calculateStickyMenuNavHeight() { 185 this.widgetConfig.elements.$dropdownMenuContainer.css(this.widgetConfig.settings.menuHeightCssVarName, ''); 186 const menuToggleHeight = this.widgetConfig.elements.$dropdownMenuContainer.offset().top - jQuery(window).scrollTop(); 187 return elementorFrontend.elements.$window.height() - menuToggleHeight; 188 } 189 calculateMenuTabContentHeight($tab) { 190 return elementorFrontend.elements.$window.height() - $tab[0].getBoundingClientRect().top; 191 } 192 isElementSticky() { 193 return this.widgetConfig.elements.$element.hasClass('elementor-sticky') || this.widgetConfig.elements.$element.parents('.elementor-sticky').length; 194 } 195 getMenuHeight() { 196 return this.isElementSticky() ? this.calculateStickyMenuNavHeight() + 'px' : this.widgetConfig.settings.dropdownMenuContainerMaxHeight; 197 } 198 setMenuHeight(menuHeight) { 199 this.widgetConfig.elements.$dropdownMenuContainer.css(this.widgetConfig.settings.menuHeightCssVarName, menuHeight); 200 } 201 reassignMobileMenuHeight() { 202 const menuHeight = this.isToggleActive() ? this.getMenuHeight() : 0; 203 return this.setMenuHeight(menuHeight); 204 } 205 reassignMenuHeight($activeTabContent) { 206 if (!this.isElementSticky() || 0 === $activeTabContent.length) { 207 return; 208 } 209 const offsetBottom = elementorFrontend.elements.$window.height() - $activeTabContent[0].getBoundingClientRect().top, 210 isContentHeightBiggerThanWindow = $activeTabContent.height() > offsetBottom; 211 if (!isContentHeightBiggerThanWindow) { 212 return; 213 } 214 $activeTabContent.css('height', this.calculateMenuTabContentHeight($activeTabContent) + 'px'); 215 $activeTabContent.css('overflow-y', 'scroll'); 216 } 217 resetMenuHeight($activeTabContent) { 218 if (!this.isElementSticky()) { 219 return; 220 } 221 $activeTabContent.css('height', 'initial'); 222 $activeTabContent.css('overflow-y', 'visible'); 223 } 224 isToggleActive() { 225 const $menuToggle = this.widgetConfig.elements.$menuToggle; 226 227 // New approach. 228 // Aria attributes instead of css classes. 229 if (!!this.widgetConfig.attributes?.menuToggleState) { 230 return 'true' === $menuToggle.attr(this.widgetConfig.attributes.menuToggleState); 231 } 232 233 // This can be removed once the new markup of the Mega Menu has been implemented. 234 // Previously we used state classes to indicate the active state of the menu toggle. 235 return $menuToggle.hasClass(this.widgetConfig.classes.menuToggleActiveClass); 236 } 237} 238exports["default"] = DropdownMenuHeightController; 239 240/***/ }), 241
242/***/ "../assets/dev/js/public-path.js": 243/*!***************************************!*\ 244 !*** ../assets/dev/js/public-path.js ***! 245 \***************************************/ 246/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { 247 248"use strict"; 249 250 251/* eslint-disable camelcase */ 252__webpack_require__.p = ElementorProFrontendConfig.urls.assets + 'js/'; 253 254/***/ }), 255
256/***/ "../modules/code-highlight/assets/js/frontend/frontend.js": 257/*!****************************************************************!*\ 258 !*** ../modules/code-highlight/assets/js/frontend/frontend.js ***! 259 \****************************************************************/ 260/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 261 262"use strict"; 263 264 265Object.defineProperty(exports, "__esModule", ({ 266 value: true 267})); 268exports["default"] = void 0; 269class _default extends elementorModules.Module { 270 constructor() { 271 super(); 272 elementorFrontend.elementsHandler.attachHandler('code-highlight', () => __webpack_require__.e(/*! import() | code-highlight */ "code-highlight").then(__webpack_require__.bind(__webpack_require__, /*! ./handler */ "../modules/code-highlight/assets/js/frontend/handler.js"))); 273 } 274} 275exports["default"] = _default; 276 277/***/ }), 278
279/***/ "../modules/motion-fx/assets/js/frontend/frontend.js": 280/*!***********************************************************!*\ 281 !*** ../modules/motion-fx/assets/js/frontend/frontend.js ***! 282 \***********************************************************/ 283/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 284 285"use strict"; 286 287 288var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 289Object.defineProperty(exports, "__esModule", ({ 290 value: true 291})); 292exports["default"] = void 0; 293var _handler = _interopRequireDefault(__webpack_require__(/*! ./handler */ "../modules/motion-fx/assets/js/frontend/handler.js")); 294class _default extends elementorModules.Module { 295 constructor() { 296 super(); 297 elementorFrontend.elementsHandler.attachHandler('global', _handler.default, null); 298 } 299} 300exports["default"] = _default; 301 302/***/ }), 303
304/***/ "../modules/motion-fx/assets/js/frontend/handler.js": 305/*!**********************************************************!*\ 306 !*** ../modules/motion-fx/assets/js/frontend/handler.js ***! 307 \**********************************************************/ 308/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 309 310"use strict"; 311 312 313var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 314Object.defineProperty(exports, "__esModule", ({ 315 value: true 316})); 317exports["default"] = void 0; 318var _motionFx = _interopRequireDefault(__webpack_require__(/*! ./motion-fx/motion-fx */ "../modules/motion-fx/assets/js/frontend/motion-fx/motion-fx.js")); 319class _default extends elementorModules.frontend.handlers.Base { 320 __construct() { 321 super.__construct(...arguments); 322 this.toggle = elementorFrontend.debounce(this.toggle, 200); 323 } 324 getDefaultSettings() { 325 return { 326 selectors: { 327 container: '.elementor-widget-container' 328 } 329 }; 330 } 331 getDefaultElements() { 332 const selectors = this.getSettings('selectors'); 333 return { 334 $container: this.$element.find(selectors.container) 335 }; 336 } 337 bindEvents() { 338 elementorFrontend.elements.$window.on('resize', this.toggle); 339 } 340 unbindEvents() { 341 elementorFrontend.elements.$window.off('resize', this.toggle); 342 } 343 addCSSTransformEvents() { 344 // Remove CSS transition variable that assigned from scroll.js in order to allow the transition of the CSS-Transform. 345 const motionFxScrolling = this.getElementSettings('motion_fx_motion_fx_scrolling'); 346 if (motionFxScrolling && !this.isTransitionEventAdded) { 347 this.isTransitionEventAdded = true; 348 this.elements.$container.on('mouseenter', () => { 349 this.elements.$container.css('--e-transform-transition-duration', ''); 350 }); 351 } 352 } 353 initEffects() { 354 this.effects = { 355 translateY: { 356 interaction: 'scroll', 357 actions: ['translateY'] 358 }, 359 translateX: { 360 interaction: 'scroll', 361 actions: ['translateX'] 362 }, 363 rotateZ: { 364 interaction: 'scroll', 365 actions: ['rotateZ'] 366 }, 367 scale: { 368 interaction: 'scroll', 369 actions: ['scale'] 370 }, 371 opacity: { 372 interaction: 'scroll', 373 actions: ['opacity'] 374 }, 375 blur: { 376 interaction: 'scroll', 377 actions: ['blur'] 378 }, 379 mouseTrack: { 380 interaction: 'mouseMove', 381 actions: ['translateXY'] 382 }, 383 tilt: { 384 interaction: 'mouseMove', 385 actions: ['tilt'] 386 } 387 }; 388 } 389 prepareOptions(name) { 390 const elementSettings = this.getElementSettings(), 391 type = 'motion_fx' === name ? 'element' : 'background', 392 interactions = {}; 393 jQuery.each(elementSettings, (key, value) => { 394 const keyRegex = new RegExp('^' + name + '_(.+?)_effect'), 395 keyMatches = key.match(keyRegex); 396 if (!keyMatches || !value) { 397 return; 398 } 399 const options = {}, 400 effectName = keyMatches[1]; 401 jQuery.each(elementSettings, (subKey, subValue) => { 402 const subKeyRegex = new RegExp(name + '_' + effectName + '_(.+)'), 403 subKeyMatches = subKey.match(subKeyRegex); 404 if (!subKeyMatches) { 405 return; 406 } 407 const subFieldName = subKeyMatches[1]; 408 if ('effect' === subFieldName) { 409 return; 410 } 411 if ('object' === typeof subValue) { 412 subValue = Object.keys(subValue.sizes).length ? subValue.sizes : subValue.size; 413 } 414 options[subKeyMatches[1]] = subValue; 415 }); 416 const effect = this.effects[effectName], 417 interactionName = effect.interaction; 418 if (!interactions[interactionName]) { 419 interactions[interactionName] = {}; 420 } 421 effect.actions.forEach(action => interactions[interactionName][action] = options); 422 }); 423 let $element = this.$element, 424 $dimensionsElement; 425 const elementType = this.getElementType(); 426 if ('element' === type && !['section', 'container'].includes(elementType)) { 427 $dimensionsElement = $element; 428 let childElementSelector;
429 if ('column' === elementType) { 430 childElementSelector = '.elementor-widget-wrap'; 431 } else { 432 childElementSelector = '.elementor-widget-container'; 433 } 434 $element = $element.find('> ' + childElementSelector); 435 } 436 const options = { 437 type, 438 interactions, 439 elementSettings, 440 $element, 441 $dimensionsElement, 442 refreshDimensions: this.isEdit, 443 range: elementSettings[name + '_range'], 444 classes: { 445 element: 'elementor-motion-effects-element', 446 parent: 'elementor-motion-effects-parent', 447 backgroundType: 'elementor-motion-effects-element-type-background', 448 container: 'elementor-motion-effects-container', 449 layer: 'elementor-motion-effects-layer', 450 perspective: 'elementor-motion-effects-perspective' 451 } 452 }; 453 if (!options.range && 'fixed' === this.getCurrentDeviceSetting('_position')) { 454 options.range = 'page'; 455 } 456 if ('fixed' === this.getCurrentDeviceSetting('_position')) { 457 options.isFixedPosition = true; 458 } 459 if ('background' === type && 'column' === this.getElementType()) { 460 options.addBackgroundLayerTo = ' > .elementor-element-populated'; 461 } 462 return options; 463 } 464 activate(name) { 465 const options = this.prepareOptions(name); 466 if (jQuery.isEmptyObject(options.interactions)) { 467 return; 468 } 469 this[name] = new _motionFx.default(options); 470 } 471 deactivate(name) { 472 if (this[name]) { 473 this[name].destroy(); 474 delete this[name]; 475 } 476 } 477 toggle() { 478 const currentDeviceMode = elementorFrontend.getCurrentDeviceMode(), 479 elementSettings = this.getElementSettings(); 480 ['motion_fx', 'background_motion_fx'].forEach(name => { 481 const devices = elementSettings[name + '_devices'], 482 isCurrentModeActive = !devices || -1 !== devices.indexOf(currentDeviceMode); 483 if (isCurrentModeActive && (elementSettings[name + '_motion_fx_scrolling'] || elementSettings[name + '_motion_fx_mouse'])) { 484 if (this[name]) { 485 this.refreshInstance(name); 486 } else { 487 this.activate(name); 488 } 489 } else { 490 this.deactivate(name); 491 } 492 }); 493 } 494 refreshInstance(instanceName) { 495 const instance = this[instanceName]; 496 if (!instance) { 497 return; 498 } 499 const preparedOptions = this.prepareOptions(instanceName); 500 instance.setSettings(preparedOptions); 501 instance.refresh(); 502 } 503 onInit() { 504 super.onInit(); 505 this.initEffects(); 506 this.addCSSTransformEvents(); 507 this.toggle(); 508 } 509 onElementChange(propertyName) { 510 if (/motion_fx_((scrolling)|(mouse)|(devices))$/.test(propertyName)) { 511 if ('motion_fx_motion_fx_scrolling' === propertyName) { 512 this.addCSSTransformEvents(); 513 } 514 this.toggle(); 515 return; 516 } 517 const propertyMatches = propertyName.match('.*?(motion_fx|_transform)'); 518 if (propertyMatches) { 519 const instanceName = propertyMatches[0].match('(_transform)') ? 'motion_fx' : propertyMatches[0]; 520 this.refreshInstance(instanceName); 521 if (!this[instanceName]) { 522 this.activate(instanceName); 523 } 524 } 525 if (/^_position/.test(propertyName)) { 526 ['motion_fx', 'background_motion_fx'].forEach(instanceName => { 527 this.refreshInstance(instanceName); 528 }); 529 } 530 } 531 onDestroy() { 532 super.onDestroy(); 533 ['motion_fx', 'background_motion_fx'].forEach(name => { 534 this.deactivate(name); 535 }); 536 } 537} 538exports["default"] = _default; 539 540/***/ }), 541
542/***/ "../modules/motion-fx/assets/js/frontend/motion-fx/actions.js": 543/*!********************************************************************!*\ 544 !*** ../modules/motion-fx/assets/js/frontend/motion-fx/actions.js ***! 545 \********************************************************************/ 546/***/ ((__unused_webpack_module, exports) => { 547 548"use strict"; 549 550 551Object.defineProperty(exports, "__esModule", ({ 552 value: true 553})); 554exports["default"] = void 0; 555class _default extends elementorModules.Module { 556 getMovePointFromPassedPercents(movableRange, passedPercents) { 557 const movePoint = passedPercents / movableRange * 100; 558 return +movePoint.toFixed(2); 559 } 560 getEffectValueFromMovePoint(range, movePoint) { 561 return range * movePoint / 100; 562 } 563 getStep(passedPercents, options) { 564 if ('element' === this.getSettings('type')) { 565 return this.getElementStep(passedPercents, options); 566 } 567 return this.getBackgroundStep(passedPercents, options); 568 } 569 getElementStep(passedPercents, options) { 570 return -(passedPercents - 50) * options.speed; 571 } 572 getBackgroundStep(passedPercents, options) { 573 const movableRange = this.getSettings('dimensions.movable' + options.axis.toUpperCase()); 574 return -this.getEffectValueFromMovePoint(movableRange, passedPercents); 575 } 576 getDirectionMovePoint(passedPercents, direction, range) { 577 let movePoint; 578 if (passedPercents < range.start) { 579 if ('out-in' === direction) { 580 movePoint = 0; 581 } else if ('in-out' === direction) { 582 movePoint = 100; 583 } else { 584 movePoint = this.getMovePointFromPassedPercents(range.start, passedPercents); 585 if ('in-out-in' === direction) { 586 movePoint = 100 - movePoint; 587 } 588 } 589 } else if (passedPercents < range.end) { 590 if ('in-out-in' === direction) { 591 movePoint = 0; 592 } else if ('out-in-out' === direction) { 593 movePoint = 100; 594 } else { 595 movePoint = this.getMovePointFromPassedPercents(range.end - range.start, passedPercents - range.start); 596 if ('in-out' === direction) { 597 movePoint = 100 - movePoint; 598 } 599 } 600 } else if ('in-out' === direction) { 601 movePoint = 0; 602 } else if ('out-in' === direction) { 603 movePoint = 100; 604 } else { 605 movePoint = this.getMovePointFromPassedPercents(100 - range.end, 100 - passedPercents); 606 if ('in-out-in' === direction) { 607 movePoint = 100 - movePoint; 608 } 609 } 610 return movePoint; 611 } 612 translateX(actionData, passedPercents) { 613 actionData.axis = 'x'; 614 actionData.unit = 'px'; 615 this.transform('translateX', passedPercents, actionData); 616 } 617 translateY(actionData, passedPercents) { 618 actionData.axis = 'y'; 619 actionData.unit = 'px'; 620 this.transform('translateY', passedPercents, actionData); 621 } 622 translateXY(actionData, passedPercentsX, passedPercentsY) { 623 this.translateX(actionData, passedPercentsX); 624 this.translateY(actionData, passedPercentsY); 625 } 626 tilt(actionData, passedPercentsX, passedPercentsY) { 627 const options = { 628 speed: actionData.speed / 10, 629 direction: actionData.direction 630 }; 631 this.rotateX(options, passedPercentsY); 632 this.rotateY(options, 100 - passedPercentsX); 633 } 634 rotateX(actionData, passedPercents) { 635 actionData.axis = 'x'; 636 actionData.unit = 'deg'; 637 this.transform('rotateX', passedPercents, actionData); 638 } 639 rotateY(actionData, passedPercents) { 640 actionData.axis = 'y'; 641 actionData.unit = 'deg'; 642 this.transform('rotateY', passedPercents, actionData); 643 } 644 rotateZ(actionData, passedPercents) { 645 actionData.unit = 'deg'; 646 this.transform('rotateZ', passedPercents, actionData); 647 } 648 scale(actionData, passedPercents) { 649 const movePoint = this.getDirectionMovePoint(passedPercents, actionData.direction, actionData.range); 650 this.updateRulePart('transform', 'scale', 1 + actionData.speed * movePoint / 1000); 651 } 652 transform(action, passedPercents, actionData) { 653 if (actionData.direction) { 654 passedPercents = 100 - passedPercents; 655 }
656 this.updateRulePart('transform', action, this.getStep(passedPercents, actionData) + actionData.unit); 657 } 658 setCSSTransformVariables(elementSettings) { 659 this.CSSTransformVariables = []; 660 jQuery.each(elementSettings, (settingKey, settingValue) => { 661 const transformKeyMatches = settingKey.match(/_transform_(.+?)_effect/m); 662 if (transformKeyMatches && settingValue) { 663 if ('perspective' === transformKeyMatches[1]) { 664 this.CSSTransformVariables.unshift(transformKeyMatches[1]); 665 return; 666 } 667 if (this.CSSTransformVariables.includes(transformKeyMatches[1])) { 668 return; 669 } 670 this.CSSTransformVariables.push(transformKeyMatches[1]); 671 } 672 }); 673 } 674 opacity(actionData, passedPercents) { 675 const movePoint = this.getDirectionMovePoint(passedPercents, actionData.direction, actionData.range), 676 level = actionData.level / 10, 677 opacity = 1 - level + this.getEffectValueFromMovePoint(level, movePoint); 678 this.$element.css({ 679 opacity, 680 'will-change': 'opacity' 681 }); 682 } 683 blur(actionData, passedPercents) { 684 const movePoint = this.getDirectionMovePoint(passedPercents, actionData.direction, actionData.range), 685 blur = actionData.level - this.getEffectValueFromMovePoint(actionData.level, movePoint); 686 this.updateRulePart('filter', 'blur', blur + 'px'); 687 } 688 updateRulePart(ruleName, key, value) { 689 if (!this.rulesVariables[ruleName]) { 690 this.rulesVariables[ruleName] = {}; 691 } 692 if (!this.rulesVariables[ruleName][key]) { 693 this.rulesVariables[ruleName][key] = true; 694 this.updateRule(ruleName); 695 } 696 const cssVarKey = `--${key}`; 697 this.$element[0].style.setProperty(cssVarKey, value); 698 } 699 updateRule(ruleName) { 700 let value = ''; 701 value += this.concatTransformCSSProperties(ruleName); 702 value += this.concatTransformMotionEffectCSSProperties(ruleName); 703 this.$element.css(ruleName, value); 704 } 705 concatTransformCSSProperties(ruleName) { 706 let value = ''; 707 if ('transform' === ruleName) { 708 jQuery.each(this.CSSTransformVariables, (index, variableKey) => { 709 const variableName = variableKey; 710 if (variableKey.startsWith('flip')) { 711 variableKey = variableKey.replace('flip', 'scale'); 712 } 713 714 // Adding default value because of the hover state. if there is no default the transform will break. 715 const defaultUnit = variableKey.startsWith('rotate') || variableKey.startsWith('skew') ? 'deg' : 'px', 716 defaultValue = variableKey.startsWith('scale') ? 1 : 0 + defaultUnit; 717 value += `${variableKey}(var(--e-transform-${variableName}, ${defaultValue}))`; 718 }); 719 } 720 return value; 721 } 722 concatTransformMotionEffectCSSProperties(ruleName) { 723 let value = ''; 724 jQuery.each(this.rulesVariables[ruleName], variableKey => { 725 value += `${variableKey}(var(--${variableKey}))`; 726 }); 727 return value; 728 } 729 runAction(actionName, actionData, passedPercents) { 730 if (actionData.affectedRange) { 731 if (actionData.affectedRange.start > passedPercents) { 732 passedPercents = actionData.affectedRange.start; 733 } 734 if (actionData.affectedRange.end < passedPercents) { 735 passedPercents = actionData.affectedRange.end; 736 } 737 } 738 for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { 739 args[_key - 3] = arguments[_key]; 740 } 741 this[actionName](actionData, passedPercents, ...args); 742 } 743 refresh() { 744 this.rulesVariables = {}; 745 this.CSSTransformVariables = []; 746 this.$element.css({ 747 transform: '', 748 filter: '', 749 opacity: '', 750 'will-change': '' 751 }); 752 } 753 onInit() { 754 this.$element = this.getSettings('$targetElement'); 755 this.refresh(); 756 } 757} 758exports["default"] = _default; 759 760/***/ }), 761
762/***/ "../modules/motion-fx/assets/js/frontend/motion-fx/interactions/base.js": 763/*!******************************************************************************!*\ 764 !*** ../modules/motion-fx/assets/js/frontend/motion-fx/interactions/base.js ***! 765 \******************************************************************************/ 766/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 767 768"use strict"; 769 770 771var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 772Object.defineProperty(exports, "__esModule", ({ 773 value: true 774})); 775exports["default"] = void 0; 776var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js")); 777class _default extends elementorModules.ViewModule { 778 constructor() { 779 super(...arguments); 780 (0, _defineProperty2.default)(this, "onInsideViewport", () => { 781 this.run(); 782 this.animationFrameRequest = requestAnimationFrame(this.onInsideViewport); 783 }); 784 } 785 __construct(options) { 786 this.motionFX = options.motionFX; 787 if (!this.intersectionObservers) { 788 this.setElementInViewportObserver(); 789 } 790 } 791 setElementInViewportObserver() { 792 this.intersectionObserver = elementorModules.utils.Scroll.scrollObserver({ 793 callback: event => { 794 if (event.isInViewport) { 795 this.onInsideViewport(); 796 } else { 797 this.removeAnimationFrameRequest(); 798 } 799 } 800 }); 801 802 // Determine which element we should observe. 803 const observedElement = 'page' === this.motionFX.getSettings('range') ? elementorFrontend.elements.$body[0] : this.motionFX.elements.$parent[0]; 804 this.intersectionObserver.observe(observedElement); 805 } 806 runCallback() { 807 const callback = this.getSettings('callback'); 808 callback(...arguments); 809 } 810 removeIntersectionObserver() { 811 if (this.intersectionObserver) { 812 this.intersectionObserver.unobserve(this.motionFX.elements.$parent[0]); 813 } 814 } 815 removeAnimationFrameRequest() { 816 if (this.animationFrameRequest) { 817 cancelAnimationFrame(this.animationFrameRequest); 818 } 819 } 820 destroy() { 821 this.removeAnimationFrameRequest(); 822 this.removeIntersectionObserver(); 823 } 824 onInit() { 825 super.onInit(); 826 } 827} 828exports["default"] = _default; 829 830/***/ }), 831
832/***/ "../modules/motion-fx/assets/js/frontend/motion-fx/interactions/mouse-move.js": 833/*!************************************************************************************!*\ 834 !*** ../modules/motion-fx/assets/js/frontend/motion-fx/interactions/mouse-move.js ***! 835 \************************************************************************************/ 836/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 837 838"use strict"; 839 840 841var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 842Object.defineProperty(exports, "__esModule", ({ 843 value: true 844})); 845exports["default"] = void 0; 846var _base = _interopRequireDefault(__webpack_require__(/*! ./base */ "../modules/motion-fx/assets/js/frontend/motion-fx/interactions/base.js")); 847class MouseMoveInteraction extends _base.default { 848 bindEvents() { 849 if (!MouseMoveInteraction.mouseTracked) { 850 elementorFrontend.elements.$window.on('mousemove', MouseMoveInteraction.updateMousePosition); 851 MouseMoveInteraction.mouseTracked = true; 852 } 853 } 854 run() { 855 const mousePosition = MouseMoveInteraction.mousePosition, 856 oldMousePosition = this.oldMousePosition; 857 if (oldMousePosition.x === mousePosition.x && oldMousePosition.y === mousePosition.y) { 858 return; 859 } 860 this.oldMousePosition = { 861 x: mousePosition.x, 862 y: mousePosition.y 863 }; 864 const passedPercentsX = 100 / innerWidth * mousePosition.x, 865 passedPercentsY = 100 / innerHeight * mousePosition.y; 866 this.runCallback(passedPercentsX, passedPercentsY); 867 } 868 onInit() { 869 this.oldMousePosition = {}; 870 super.onInit(); 871 } 872} 873exports["default"] = MouseMoveInteraction; 874MouseMoveInteraction.mousePosition = {}; 875MouseMoveInteraction.updateMousePosition = event => { 876 MouseMoveInteraction.mousePosition = { 877 x: event.clientX, 878 y: event.clientY 879 }; 880}; 881 882/***/ }), 883
884/***/ "../modules/motion-fx/assets/js/frontend/motion-fx/interactions/scroll.js": 885/*!********************************************************************************!*\ 886 !*** ../modules/motion-fx/assets/js/frontend/motion-fx/interactions/scroll.js ***! 887 \********************************************************************************/ 888/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 889 890"use strict"; 891 892 893var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 894Object.defineProperty(exports, "__esModule", ({ 895 value: true 896})); 897exports["default"] = void 0; 898var _base = _interopRequireDefault(__webpack_require__(/*! ./base */ "../modules/motion-fx/assets/js/frontend/motion-fx/interactions/base.js")); 899class _default extends _base.default { 900 run() { 901 if (pageYOffset === this.windowScrollTop) { 902 return false; 903 } 904 this.onScrollMovement(); 905 this.windowScrollTop = pageYOffset; 906 } 907 onScrollMovement() { 908 this.updateMotionFxDimensions(); 909 this.updateAnimation(); 910 this.resetTransitionVariable(); 911 } 912 resetTransitionVariable() { 913 this.motionFX.$element.css('--e-transform-transition-duration', '100ms'); 914 } 915 updateMotionFxDimensions() { 916 const motionFXSettings = this.motionFX.getSettings(); 917 if (motionFXSettings.refreshDimensions) { 918 this.motionFX.defineDimensions(); 919 } 920 } 921 updateAnimation() { 922 let passedRangePercents; 923 if ('page' === this.motionFX.getSettings('range')) { 924 passedRangePercents = elementorModules.utils.Scroll.getPageScrollPercentage(); 925 } else if (this.motionFX.getSettings('isFixedPosition')) { 926 passedRangePercents = elementorModules.utils.Scroll.getPageScrollPercentage({}, window.innerHeight); 927 } else { 928 passedRangePercents = elementorModules.utils.Scroll.getElementViewportPercentage(this.motionFX.elements.$parent); 929 } 930 this.runCallback(passedRangePercents); 931 } 932} 933exports["default"] = _default; 934 935/***/ }), 936
937/***/ "../modules/motion-fx/assets/js/frontend/motion-fx/motion-fx.js": 938/*!**********************************************************************!*\ 939 !*** ../modules/motion-fx/assets/js/frontend/motion-fx/motion-fx.js ***! 940 \**********************************************************************/ 941/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 942 943"use strict"; 944 945 946var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 947Object.defineProperty(exports, "__esModule", ({ 948 value: true 949})); 950exports["default"] = void 0; 951var _scroll = _interopRequireDefault(__webpack_require__(/*! ./interactions/scroll */ "../modules/motion-fx/assets/js/frontend/motion-fx/interactions/scroll.js")); 952var _mouseMove = _interopRequireDefault(__webpack_require__(/*! ./interactions/mouse-move */ "../modules/motion-fx/assets/js/frontend/motion-fx/interactions/mouse-move.js")); 953var _actions = _interopRequireDefault(__webpack_require__(/*! ./actions */ "../modules/motion-fx/assets/js/frontend/motion-fx/actions.js")); 954class _default extends elementorModules.ViewModule { 955 getDefaultSettings() { 956 return { 957 type: 'element', 958 $element: null, 959 $dimensionsElement: null, 960 addBackgroundLayerTo: null, 961 interactions: {}, 962 refreshDimensions: false, 963 range: 'viewport', 964 classes: { 965 element: 'motion-fx-element', 966 parent: 'motion-fx-parent', 967 backgroundType: 'motion-fx-element-type-background', 968 container: 'motion-fx-container', 969 layer: 'motion-fx-layer', 970 perspective: 'motion-fx-perspective' 971 } 972 }; 973 } 974 bindEvents() { 975 this.defineDimensions = this.defineDimensions.bind(this); 976 elementorFrontend.elements.$window.on('resize elementor-pro/motion-fx/recalc', this.defineDimensions); 977 } 978 unbindEvents() { 979 elementorFrontend.elements.$window.off('resize elementor-pro/motion-fx/recalc', this.defineDimensions); 980 } 981 addBackgroundLayer() { 982 const settings = this.getSettings(); 983 this.elements.$motionFXContainer = jQuery('<div>', { 984 class: settings.classes.container 985 }); 986 this.elements.$motionFXLayer = jQuery('<div>', { 987 class: settings.classes.layer 988 });
989 this.updateBackgroundLayerSize(); 990 this.elements.$motionFXContainer.prepend(this.elements.$motionFXLayer); 991 const $addBackgroundLayerTo = settings.addBackgroundLayerTo ? this.$element.find(settings.addBackgroundLayerTo) : this.$element; 992 $addBackgroundLayerTo.prepend(this.elements.$motionFXContainer); 993 } 994 removeBackgroundLayer() { 995 this.elements.$motionFXContainer.remove(); 996 } 997 updateBackgroundLayerSize() { 998 const settings = this.getSettings(), 999 speed = { 1000 x: 0, 1001 y: 0 1002 }, 1003 mouseInteraction = settings.interactions.mouseMove, 1004 scrollInteraction = settings.interactions.scroll; 1005 if (mouseInteraction && mouseInteraction.translateXY) { 1006 speed.x = mouseInteraction.translateXY.speed * 10; 1007 speed.y = mouseInteraction.translateXY.speed * 10; 1008 } 1009 if (scrollInteraction) { 1010 if (scrollInteraction.translateX) { 1011 speed.x = scrollInteraction.translateX.speed * 10; 1012 } 1013 if (scrollInteraction.translateY) { 1014 speed.y = scrollInteraction.translateY.speed * 10; 1015 } 1016 } 1017 this.elements.$motionFXLayer.css({ 1018 width: 100 + speed.x + '%', 1019 height: 100 + speed.y + '%' 1020 }); 1021 } 1022 defineDimensions() { 1023 const $dimensionsElement = this.getSettings('$dimensionsElement') || this.$element, 1024 elementOffset = $dimensionsElement.offset(); 1025 const dimensions = { 1026 elementHeight: $dimensionsElement.outerHeight(), 1027 elementWidth: $dimensionsElement.outerWidth(), 1028 elementTop: elementOffset.top, 1029 elementLeft: elementOffset.left 1030 }; 1031 dimensions.elementRange = dimensions.elementHeight + innerHeight; 1032 this.setSettings('dimensions', dimensions); 1033 if ('background' === this.getSettings('type')) { 1034 this.defineBackgroundLayerDimensions(); 1035 } 1036 } 1037 defineBackgroundLayerDimensions() { 1038 const dimensions = this.getSettings('dimensions'); 1039 dimensions.layerHeight = this.elements.$motionFXLayer.height(); 1040 dimensions.layerWidth = this.elements.$motionFXLayer.width(); 1041 dimensions.movableX = dimensions.layerWidth - dimensions.elementWidth; 1042 dimensions.movableY = dimensions.layerHeight - dimensions.elementHeight; 1043 this.setSettings('dimensions', dimensions); 1044 } 1045 initInteractionsTypes() { 1046 this.interactionsTypes = { 1047 scroll: _scroll.default, 1048 mouseMove: _mouseMove.default 1049 }; 1050 } 1051 prepareSpecialActions() { 1052 const settings = this.getSettings(), 1053 hasTiltEffect = !!(settings.interactions.mouseMove && settings.interactions.mouseMove.tilt); 1054 this.elements.$parent.toggleClass(settings.classes.perspective, hasTiltEffect); 1055 } 1056 cleanSpecialActions() { 1057 const settings = this.getSettings(); 1058 this.elements.$parent.removeClass(settings.classes.perspective); 1059 } 1060 runInteractions() { 1061 var _this = this; 1062 const settings = this.getSettings(); 1063 this.actions.setCSSTransformVariables(settings.elementSettings); 1064 this.prepareSpecialActions(); 1065 jQuery.each(settings.interactions, (interactionName, actions) => { 1066 this.interactions[interactionName] = new this.interactionsTypes[interactionName]({ 1067 motionFX: this, 1068 callback: function () { 1069 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 1070 args[_key] = arguments[_key]; 1071 } 1072 jQuery.each(actions, (actionName, actionData) => _this.actions.runAction(actionName, actionData, ...args)); 1073 } 1074 }); 1075 this.interactions[interactionName].run(); 1076 }); 1077 } 1078 destroyInteractions() { 1079 this.cleanSpecialActions(); 1080 jQuery.each(this.interactions, (interactionName, interaction) => interaction.destroy()); 1081 this.interactions = {}; 1082 } 1083 refresh() { 1084 this.actions.setSettings(this.getSettings()); 1085 if ('background' === this.getSettings('type')) {
1086 this.updateBackgroundLayerSize(); 1087 this.defineBackgroundLayerDimensions(); 1088 } 1089 this.actions.refresh(); 1090 this.destroyInteractions(); 1091 this.runInteractions(); 1092 } 1093 destroy() { 1094 this.destroyInteractions(); 1095 this.actions.refresh(); 1096 const settings = this.getSettings(); 1097 this.$element.removeClass(settings.classes.element); 1098 this.elements.$parent.removeClass(settings.classes.parent); 1099 if ('background' === settings.type) { 1100 this.$element.removeClass(settings.classes.backgroundType); 1101 this.removeBackgroundLayer(); 1102 } 1103 } 1104 onInit() { 1105 super.onInit(); 1106 const settings = this.getSettings(); 1107 this.$element = settings.$element; 1108 this.elements.$parent = this.$element.parent(); 1109 this.$element.addClass(settings.classes.element); 1110 this.elements.$parent = this.$element.parent(); 1111 this.elements.$parent.addClass(settings.classes.parent); 1112 if ('background' === settings.type) { 1113 this.$element.addClass(settings.classes.backgroundType); 1114 this.addBackgroundLayer(); 1115 } 1116 this.defineDimensions(); 1117 settings.$targetElement = 'element' === settings.type ? this.$element : this.elements.$motionFXLayer; 1118 this.interactions = {}; 1119 this.actions = new _actions.default(settings); 1120 this.initInteractionsTypes(); 1121 this.runInteractions(); 1122 } 1123} 1124exports["default"] = _default; 1125 1126/***/ }), 1127
1128/***/ "../modules/payments/assets/js/frontend/frontend.js": 1129/*!**********************************************************!*\ 1130 !*** ../modules/payments/assets/js/frontend/frontend.js ***! 1131 \**********************************************************/ 1132/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 1133 1134"use strict"; 1135 1136 1137Object.defineProperty(exports, "__esModule", ({ 1138 value: true 1139})); 1140exports["default"] = void 0; 1141class _default extends elementorModules.Module { 1142 constructor() { 1143 super(); 1144 elementorFrontend.elementsHandler.attachHandler('paypal-button', () => __webpack_require__.e(/*! import() | paypal-button */ "paypal-button").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/paypal-button */ "../modules/payments/assets/js/frontend/handlers/paypal-button.js"))); 1145 elementorFrontend.elementsHandler.attachHandler('stripe-button', () => Promise.all(/*! import() | stripe-button */[__webpack_require__.e("vendors-node_modules_dompurify_dist_purify_js"), __webpack_require__.e("stripe-button")]).then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/stripe-button */ "../modules/payments/assets/js/frontend/handlers/stripe-button.js"))); 1146 } 1147} 1148exports["default"] = _default; 1149 1150/***/ }), 1151
1152/***/ "../modules/progress-tracker/assets/js/frontend/frontend.js": 1153/*!******************************************************************!*\ 1154 !*** ../modules/progress-tracker/assets/js/frontend/frontend.js ***! 1155 \******************************************************************/ 1156/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 1157 1158"use strict"; 1159 1160 1161Object.defineProperty(exports, "__esModule", ({ 1162 value: true 1163})); 1164exports["default"] = void 0; 1165class _default extends elementorModules.Module { 1166 constructor() { 1167 super(); 1168 elementorFrontend.elementsHandler.attachHandler('progress-tracker', () => __webpack_require__.e(/*! import() | progress-tracker */ "progress-tracker").then(__webpack_require__.bind(__webpack_require__, /*! ./handlers/progress-tracker */ "../modules/progress-tracker/assets/js/frontend/handlers/progress-tracker.js"))); 1169 } 1170} 1171exports["default"] = _default; 1172 1173/***/ }), 1174
1175/***/ "../modules/sticky/assets/js/frontend/frontend.js": 1176/*!********************************************************!*\ 1177 !*** ../modules/sticky/assets/js/frontend/frontend.js ***! 1178 \********************************************************/ 1179/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 1180 1181"use strict"; 1182 1183 1184var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 1185Object.defineProperty(exports, "__esModule", ({ 1186 value: true 1187})); 1188exports["default"] = void 0; 1189var _sticky = _interopRequireDefault(__webpack_require__(/*! ./handlers/sticky */ "../modules/sticky/assets/js/frontend/handlers/sticky.js")); 1190class _default extends elementorModules.Module { 1191 constructor() { 1192 super(); 1193 elementorFrontend.elementsHandler.attachHandler('section', _sticky.default, null); 1194 elementorFrontend.elementsHandler.attachHandler('container', _sticky.default, null); 1195 elementorFrontend.elementsHandler.attachHandler('widget', _sticky.default, null); 1196 } 1197} 1198exports["default"] = _default; 1199 1200/***/ }), 1201
1202/***/ "../modules/sticky/assets/js/frontend/handlers/sticky.js": 1203/*!***************************************************************!*\ 1204 !*** ../modules/sticky/assets/js/frontend/handlers/sticky.js ***! 1205 \***************************************************************/ 1206/***/ ((__unused_webpack_module, exports) => { 1207 1208"use strict"; 1209 1210 1211Object.defineProperty(exports, "__esModule", ({ 1212 value: true 1213})); 1214exports["default"] = void 0; 1215var _default = exports["default"] = elementorModules.frontend.handlers.Base.extend({ 1216 currentConfig: {}, 1217 debouncedReactivate: null, 1218 bindEvents() { 1219 elementorFrontend.addListenerOnce(this.getUniqueHandlerID() + 'sticky', 'resize', this.reactivateOnResize); 1220 }, 1221 unbindEvents() { 1222 elementorFrontend.removeListeners(this.getUniqueHandlerID() + 'sticky', 'resize', this.reactivateOnResize); 1223 }, 1224 isStickyInstanceActive() { 1225 return undefined !== this.$element.data('sticky'); 1226 }, 1227 /** 1228 * Get the current active setting value for a responsive control. 1229 * 1230 * @param {string} setting 1231 * @return {any} - Setting value. 1232 */ 1233 getResponsiveSetting(setting) { 1234 const elementSettings = this.getElementSettings(); 1235 return elementorFrontend.getCurrentDeviceSetting(elementSettings, setting); 1236 }, 1237 /** 1238 * Return an array of settings names for responsive control (e.g. `settings`, `setting_tablet`, `setting_mobile` ). 1239 * 1240 * @param {string} setting 1241 * @return {string[]} - List of settings. 1242 */ 1243 getResponsiveSettingList(setting) { 1244 const breakpoints = Object.keys(elementorFrontend.config.responsive.activeBreakpoints); 1245 return ['', ...breakpoints].map(suffix => { 1246 return suffix ? `${setting}_${suffix}` : setting; 1247 }); 1248 }, 1249 getConfig() { 1250 const elementSettings = this.getElementSettings(), 1251 stickyOptions = { 1252 to: elementSettings.sticky, 1253 offset: this.getResponsiveSetting('sticky_offset'), 1254 effectsOffset: this.getResponsiveSetting('sticky_effects_offset'), 1255 classes: { 1256 sticky: 'elementor-sticky', 1257 stickyActive: 'elementor-sticky--active elementor-section--handles-inside', 1258 stickyEffects: 'elementor-sticky--effects', 1259 spacer: 'elementor-sticky__spacer' 1260 }, 1261 isRTL: elementorFrontend.config.is_rtl, 1262 // In edit mode, since the preview is an iframe, the scrollbar is on the left. The scrollbar width is 1263 // compensated for in this case. 1264 handleScrollbarWidth: elementorFrontend.isEditMode() 1265 }, 1266 $wpAdminBar = elementorFrontend.elements.$wpAdminBar, 1267 isParentContainer = this.isContainerElement(this.$element[0]) && !this.isContainerElement(this.$element[0].parentElement); 1268 if ($wpAdminBar.length && 'top' === elementSettings.sticky && 'fixed' === $wpAdminBar.css('position')) { 1269 stickyOptions.offset += $wpAdminBar.height(); 1270 } 1271 1272 // The `stickyOptions.parent` value should only be applied to inner elements, and not to top level containers. 1273 if (elementSettings.sticky_parent && !isParentContainer) { 1274 // TODO: The e-container classes should be removed in the next update. 1275 stickyOptions.parent = '.e-container, .e-container__inner, .e-con, .e-con-inner, .elementor-widget-wrap'; 1276 } 1277 return stickyOptions; 1278 }, 1279 activate() { 1280 this.currentConfig = this.getConfig(); 1281 this.$element.sticky(this.currentConfig); 1282 }, 1283 deactivate() { 1284 if (!this.isStickyInstanceActive()) { 1285 return; 1286 } 1287 this.$element.sticky('destroy'); 1288 }, 1289 run(refresh) { 1290 if (!this.getElementSettings('sticky')) { 1291 this.deactivate(); 1292 return; 1293 } 1294 var currentDeviceMode = elementorFrontend.getCurrentDeviceMode(), 1295 activeDevices = this.getElementSettings('sticky_on'); 1296 if (-1 !== activeDevices.indexOf(currentDeviceMode)) { 1297 if (true === refresh) { 1298 this.reactivate(); 1299 } else if (!this.isStickyInstanceActive()) { 1300 this.activate(); 1301 } 1302 } else { 1303 this.deactivate(); 1304 } 1305 }, 1306 /** 1307 * Reactivate the sticky instance on resize only if the new sticky config is different from the current active one, 1308 * in order to avoid re-initializing the sticky when not needed, and avoid layout shifts. 1309 * The config can be different between devices, so this need to be checked on each screen resize to make sure that 1310 * the current screen size uses the appropriate Sticky config. 1311 * 1312 * @return {void} 1313 */ 1314 reactivateOnResize() { 1315 clearTimeout(this.debouncedReactivate); 1316 this.debouncedReactivate = setTimeout(() => { 1317 const config = this.getConfig(), 1318 isDifferentConfig = JSON.stringify(config) !== JSON.stringify(this.currentConfig); 1319 if (isDifferentConfig) { 1320 this.run(true); 1321 } 1322 }, 300); 1323 }, 1324 reactivate() { 1325 this.deactivate(); 1326 this.activate(); 1327 },
1328 onElementChange(settingKey) { 1329 if (-1 !== ['sticky', 'sticky_on'].indexOf(settingKey)) { 1330 this.run(true); 1331 } 1332 1333 // Settings that trigger a re-activation when changed. 1334 const settings = [...this.getResponsiveSettingList('sticky_offset'), ...this.getResponsiveSettingList('sticky_effects_offset'), 'sticky_parent']; 1335 if (-1 !== settings.indexOf(settingKey)) { 1336 this.reactivate(); 1337 } 1338 }, 1339 /** 1340 * Listen to device mode changes and re-initialize the sticky. 1341 * 1342 * @return {void} 1343 */ 1344 onDeviceModeChange() { 1345 // Wait for the call stack to be empty. 1346 // The `run` function requests the current device mode from the CSS so it's not ready immediately. 1347 // (need to wait for the `deviceMode` event to change the CSS). 1348 // See `elementorFrontend.getCurrentDeviceMode()` for reference. 1349 setTimeout(() => this.run(true)); 1350 }, 1351 onInit() { 1352 elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); 1353 if (elementorFrontend.isEditMode()) { 1354 elementor.listenTo(elementor.channels.deviceMode, 'change', () => this.onDeviceModeChange()); 1355 } 1356 this.run(); 1357 }, 1358 onDestroy() { 1359 elementorModules.frontend.handlers.Base.prototype.onDestroy.apply(this, arguments); 1360 this.deactivate(); 1361 }, 1362 /** 1363 * 1364 * @param {HTMLElement|null|undefined} element 1365 * @return {boolean} Is the passed element a container. 1366 */ 1367 isContainerElement(element) { 1368 const containerClasses = [ 1369 // TODO: The e-container classes should be removed in the next update. 1370 'e-container', 'e-container__inner', 'e-con', 'e-con-inner']; 1371 return containerClasses.some(containerClass => { 1372 return element?.classList.contains(containerClass); 1373 }); 1374 } 1375}); 1376 1377/***/ }), 1378
1379/***/ "../modules/video-playlist/assets/js/frontend/frontend.js": 1380/*!****************************************************************!*\ 1381 !*** ../modules/video-playlist/assets/js/frontend/frontend.js ***! 1382 \****************************************************************/ 1383/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 1384 1385"use strict"; 1386 1387 1388Object.defineProperty(exports, "__esModule", ({ 1389 value: true 1390})); 1391exports["default"] = void 0; 1392class _default extends elementorModules.Module { 1393 constructor() { 1394 super(); 1395 elementorFrontend.hooks.addAction('frontend/element_ready/video-playlist.default', $element => { 1396 __webpack_require__.e(/*! import() | video-playlist */ "video-playlist").then(__webpack_require__.bind(__webpack_require__, /*! ./handler */ "../modules/video-playlist/assets/js/frontend/handler.js")).then(_ref => { 1397 let { 1398 default: dynamicHandler 1399 } = _ref; 1400 elementorFrontend.elementsHandler.addHandler(dynamicHandler, { 1401 $element, 1402 toggleSelf: false 1403 }); 1404 }); 1405 }); 1406 } 1407} 1408exports["default"] = _default; 1409 1410/***/ }), 1411
vendor: 876 bytes, lines 1412-1436
1412/***/ "../node_modules/@babel/runtime/helpers/defineProperty.js": 1413/*!****************************************************************!*\ 1414 !*** ../node_modules/@babel/runtime/helpers/defineProperty.js ***! 1415 \****************************************************************/ 1416/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1417 1418var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ "../node_modules/@babel/runtime/helpers/toPropertyKey.js"); 1419function _defineProperty(obj, key, value) { 1420 key = toPropertyKey(key); 1421 if (key in obj) { 1422 Object.defineProperty(obj, key, { 1423 value: value, 1424 enumerable: true, 1425 configurable: true, 1426 writable: true 1427 }); 1428 } else { 1429 obj[key] = value; 1430 } 1431 return obj; 1432} 1433module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports; 1434 1435/***/ }), 1436
vendor: 562 bytes, lines 1437-1451
1437/***/ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js": 1438/*!***********************************************************************!*\ 1439 !*** ../node_modules/@babel/runtime/helpers/interopRequireDefault.js ***! 1440 \***********************************************************************/ 1441/***/ ((module) => { 1442 1443function _interopRequireDefault(obj) { 1444 return obj && obj.__esModule ? obj : { 1445 "default": obj 1446 }; 1447} 1448module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports; 1449 1450/***/ }), 1451
vendor: 976 bytes, lines 1452-1472
1452/***/ "../node_modules/@babel/runtime/helpers/toPrimitive.js": 1453/*!*************************************************************!*\ 1454 !*** ../node_modules/@babel/runtime/helpers/toPrimitive.js ***! 1455 \*************************************************************/ 1456/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1457 1458var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]); 1459function _toPrimitive(input, hint) { 1460 if (_typeof(input) !== "object" || input === null) return input; 1461 var prim = input[Symbol.toPrimitive]; 1462 if (prim !== undefined) { 1463 var res = prim.call(input, hint || "default"); 1464 if (_typeof(res) !== "object") return res; 1465 throw new TypeError("@@toPrimitive must return a primitive value."); 1466 } 1467 return (hint === "string" ? String : Number)(input); 1468} 1469module.exports = _toPrimitive, module.exports.__esModule = true, module.exports["default"] = module.exports; 1470 1471/***/ }), 1472
vendor: 831 bytes, lines 1473-1488
1473/***/ "../node_modules/@babel/runtime/helpers/toPropertyKey.js": 1474/*!***************************************************************!*\ 1475 !*** ../node_modules/@babel/runtime/helpers/toPropertyKey.js ***! 1476 \***************************************************************/ 1477/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1478 1479var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]); 1480var toPrimitive = __webpack_require__(/*! ./toPrimitive.js */ "../node_modules/@babel/runtime/helpers/toPrimitive.js"); 1481function _toPropertyKey(arg) { 1482 var key = toPrimitive(arg, "string"); 1483 return _typeof(key) === "symbol" ? key : String(key); 1484} 1485module.exports = _toPropertyKey, module.exports.__esModule = true, module.exports["default"] = module.exports; 1486 1487/***/ }), 1488
vendor: 811 bytes, lines 1489-1506
1489/***/ "../node_modules/@babel/runtime/helpers/typeof.js": 1490/*!********************************************************!*\ 1491 !*** ../node_modules/@babel/runtime/helpers/typeof.js ***! 1492 \********************************************************/ 1493/***/ ((module) => { 1494 1495function _typeof(o) { 1496 "@babel/helpers - typeof"; 1497 1498 return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { 1499 return typeof o; 1500 } : function (o) { 1501 return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; 1502 }, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(o); 1503} 1504module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports; 1505 1506/***/ })
1506 1507 1508}, 1509/******/ __webpack_require__ => { // webpackRuntimeModules 1510/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) 1511/******/ var __webpack_exports__ = (__webpack_exec__("../assets/dev/js/frontend/frontend.js")); 1512/******/ } 1513]); 1514//# sourceMappingURL=frontend.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.