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