frontend-modules.js (34839B)
1 /*! elementor - v3.4.4 - 13-09-2021 */ 2 (self["webpackChunkelementor"] = self["webpackChunkelementor"] || []).push([["frontend-modules"],{ 3 4 /***/ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js": 5 /*!***********************************************************************!*\ 6 !*** ../node_modules/@babel/runtime/helpers/interopRequireDefault.js ***! 7 \***********************************************************************/ 8 /***/ ((module) => { 9 10 function _interopRequireDefault(obj) { 11 return obj && obj.__esModule ? obj : { 12 "default": obj 13 }; 14 } 15 16 module.exports = _interopRequireDefault; 17 module.exports.default = module.exports, module.exports.__esModule = true; 18 19 /***/ }), 20 21 /***/ "../assets/dev/js/frontend/document.js": 22 /*!*********************************************!*\ 23 !*** ../assets/dev/js/frontend/document.js ***! 24 \*********************************************/ 25 /***/ ((__unused_webpack_module, exports) => { 26 27 "use strict"; 28 29 30 Object.defineProperty(exports, "__esModule", ({ 31 value: true 32 })); 33 exports.default = void 0; 34 35 class _default extends elementorModules.ViewModule { 36 getDefaultSettings() { 37 return { 38 selectors: { 39 elements: '.elementor-element', 40 nestedDocumentElements: '.elementor .elementor-element' 41 }, 42 classes: { 43 editMode: 'elementor-edit-mode' 44 } 45 }; 46 } 47 48 getDefaultElements() { 49 const selectors = this.getSettings('selectors'); 50 return { 51 $elements: this.$element.find(selectors.elements).not(this.$element.find(selectors.nestedDocumentElements)) 52 }; 53 } 54 55 getDocumentSettings(setting) { 56 let elementSettings; 57 58 if (this.isEdit) { 59 elementSettings = {}; 60 const settings = elementor.settings.page.model; 61 jQuery.each(settings.getActiveControls(), controlKey => { 62 elementSettings[controlKey] = settings.attributes[controlKey]; 63 }); 64 } else { 65 elementSettings = this.$element.data('elementor-settings') || {}; 66 } 67 68 return this.getItems(elementSettings, setting); 69 } 70 71 runElementsHandlers() { 72 this.elements.$elements.each((index, element) => elementorFrontend.elementsHandler.runReadyTrigger(element)); 73 } 74 75 onInit() { 76 this.$element = this.getSettings('$element'); 77 super.onInit(); 78 this.isEdit = this.$element.hasClass(this.getSettings('classes.editMode')); 79 80 if (this.isEdit) { 81 elementor.on('document:loaded', () => { 82 elementor.settings.page.model.on('change', this.onSettingsChange.bind(this)); 83 }); 84 } else { 85 this.runElementsHandlers(); 86 } 87 } 88 89 onSettingsChange() {} 90 91 } 92 93 exports.default = _default; 94 95 /***/ }), 96 97 /***/ "../assets/dev/js/frontend/handlers/base-swiper.js": 98 /*!*********************************************************!*\ 99 !*** ../assets/dev/js/frontend/handlers/base-swiper.js ***! 100 \*********************************************************/ 101 /***/ ((__unused_webpack_module, exports, __webpack_require__) => { 102 103 "use strict"; 104 105 106 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 107 108 Object.defineProperty(exports, "__esModule", ({ 109 value: true 110 })); 111 exports.default = void 0; 112 113 var _base = _interopRequireDefault(__webpack_require__(/*! ./base */ "../assets/dev/js/frontend/handlers/base.js")); 114 115 class SwiperHandlerBase extends _base.default { 116 getInitialSlide() { 117 const editSettings = this.getEditSettings(); 118 return editSettings.activeItemIndex ? editSettings.activeItemIndex - 1 : 0; 119 } 120 121 getSlidesCount() { 122 return this.elements.$slides.length; 123 } // This method live-handles the 'Pause On Hover' control's value being changed in the Editor Panel 124 125 126 togglePauseOnHover(toggleOn) { 127 if (toggleOn) { 128 this.elements.$swiperContainer.on({ 129 mouseenter: () => { 130 this.swiper.autoplay.stop(); 131 }, 132 mouseleave: () => { 133 this.swiper.autoplay.start(); 134 } 135 }); 136 } else { 137 this.elements.$swiperContainer.off('mouseenter mouseleave'); 138 } 139 } 140 141 handleKenBurns() { 142 const settings = this.getSettings(); 143 144 if (this.$activeImageBg) { 145 this.$activeImageBg.removeClass(settings.classes.kenBurnsActive); 146 } 147 148 this.activeItemIndex = this.swiper ? this.swiper.activeIndex : this.getInitialSlide(); 149 150 if (this.swiper) { 151 this.$activeImageBg = jQuery(this.swiper.slides[this.activeItemIndex]).children('.' + settings.classes.slideBackground); 152 } else { 153 this.$activeImageBg = jQuery(this.elements.$slides[0]).children('.' + settings.classes.slideBackground); 154 } 155 156 this.$activeImageBg.addClass(settings.classes.kenBurnsActive); 157 } 158 159 } 160 161 exports.default = SwiperHandlerBase; 162 163 /***/ }), 164 165 /***/ "../assets/dev/js/frontend/handlers/base.js": 166 /*!**************************************************!*\ 167 !*** ../assets/dev/js/frontend/handlers/base.js ***! 168 \**************************************************/ 169 /***/ ((module) => { 170 171 "use strict"; 172 173 174 module.exports = elementorModules.ViewModule.extend({ 175 $element: null, 176 editorListeners: null, 177 onElementChange: null, 178 onEditSettingsChange: null, 179 onPageSettingsChange: null, 180 isEdit: null, 181 __construct: function (settings) { 182 if (!this.isActive(settings)) { 183 return; 184 } 185 186 this.$element = settings.$element; 187 this.isEdit = this.$element.hasClass('elementor-element-edit-mode'); 188 189 if (this.isEdit) { 190 this.addEditorListeners(); 191 } 192 }, 193 isActive: function () { 194 return true; 195 }, 196 findElement: function (selector) { 197 var $mainElement = this.$element; 198 return $mainElement.find(selector).filter(function () { 199 return jQuery(this).closest('.elementor-element').is($mainElement); 200 }); 201 }, 202 getUniqueHandlerID: function (cid, $element) { 203 if (!cid) { 204 cid = this.getModelCID(); 205 } 206 207 if (!$element) { 208 $element = this.$element; 209 } 210 211 return cid + $element.attr('data-element_type') + this.getConstructorID(); 212 }, 213 initEditorListeners: function () { 214 var self = this; 215 self.editorListeners = [{ 216 event: 'element:destroy', 217 to: elementor.channels.data, 218 callback: function (removedModel) { 219 if (removedModel.cid !== self.getModelCID()) { 220 return; 221 } 222 223 self.onDestroy(); 224 } 225 }]; 226 227 if (self.onElementChange) { 228 const elementType = self.getWidgetType() || self.getElementType(); 229 let eventName = 'change'; 230 231 if ('global' !== elementType) { 232 eventName += ':' + elementType; 233 } 234 235 self.editorListeners.push({ 236 event: eventName, 237 to: elementor.channels.editor, 238 callback: function (controlView, elementView) { 239 var elementViewHandlerID = self.getUniqueHandlerID(elementView.model.cid, elementView.$el); 240 241 if (elementViewHandlerID !== self.getUniqueHandlerID()) { 242 return; 243 } 244 245 self.onElementChange(controlView.model.get('name'), controlView, elementView); 246 } 247 }); 248 } 249 250 if (self.onEditSettingsChange) { 251 self.editorListeners.push({ 252 event: 'change:editSettings', 253 to: elementor.channels.editor, 254 callback: function (changedModel, view) { 255 if (view.model.cid !== self.getModelCID()) { 256 return; 257 } 258 259 self.onEditSettingsChange(Object.keys(changedModel.changed)[0]); 260 } 261 }); 262 } 263 264 ['page'].forEach(function (settingsType) { 265 var listenerMethodName = 'on' + settingsType[0].toUpperCase() + settingsType.slice(1) + 'SettingsChange'; 266 267 if (self[listenerMethodName]) { 268 self.editorListeners.push({ 269 event: 'change', 270 to: elementor.settings[settingsType].model, 271 callback: function (model) { 272 self[listenerMethodName](model.changed); 273 } 274 }); 275 } 276 }); 277 }, 278 getEditorListeners: function () { 279 if (!this.editorListeners) { 280 this.initEditorListeners(); 281 } 282 283 return this.editorListeners; 284 }, 285 addEditorListeners: function () { 286 var uniqueHandlerID = this.getUniqueHandlerID(); 287 this.getEditorListeners().forEach(function (listener) { 288 elementorFrontend.addListenerOnce(uniqueHandlerID, listener.event, listener.callback, listener.to); 289 }); 290 }, 291 removeEditorListeners: function () { 292 var uniqueHandlerID = this.getUniqueHandlerID(); 293 this.getEditorListeners().forEach(function (listener) { 294 elementorFrontend.removeListeners(uniqueHandlerID, listener.event, null, listener.to); 295 }); 296 }, 297 getElementType: function () { 298 return this.$element.data('element_type'); 299 }, 300 getWidgetType: function () { 301 const widgetType = this.$element.data('widget_type'); 302 303 if (!widgetType) { 304 return; 305 } 306 307 return widgetType.split('.')[0]; 308 }, 309 getID: function () { 310 return this.$element.data('id'); 311 }, 312 getModelCID: function () { 313 return this.$element.data('model-cid'); 314 }, 315 getElementSettings: function (setting) { 316 let elementSettings = {}; 317 const modelCID = this.getModelCID(); 318 319 if (this.isEdit && modelCID) { 320 const settings = elementorFrontend.config.elements.data[modelCID], 321 attributes = settings.attributes; 322 let type = attributes.widgetType || attributes.elType; 323 324 if (attributes.isInner) { 325 type = 'inner-' + type; 326 } 327 328 let settingsKeys = elementorFrontend.config.elements.keys[type]; 329 330 if (!settingsKeys) { 331 settingsKeys = elementorFrontend.config.elements.keys[type] = []; 332 jQuery.each(settings.controls, (name, control) => { 333 if (control.frontend_available) { 334 settingsKeys.push(name); 335 } 336 }); 337 } 338 339 jQuery.each(settings.getActiveControls(), function (controlKey) { 340 if (-1 !== settingsKeys.indexOf(controlKey)) { 341 let value = attributes[controlKey]; 342 343 if (value.toJSON) { 344 value = value.toJSON(); 345 } 346 347 elementSettings[controlKey] = value; 348 } 349 }); 350 } else { 351 elementSettings = this.$element.data('settings') || {}; 352 } 353 354 return this.getItems(elementSettings, setting); 355 }, 356 getEditSettings: function (setting) { 357 var attributes = {}; 358 359 if (this.isEdit) { 360 attributes = elementorFrontend.config.elements.editSettings[this.getModelCID()].attributes; 361 } 362 363 return this.getItems(attributes, setting); 364 }, 365 getCurrentDeviceSetting: function (settingKey) { 366 return elementorFrontend.getCurrentDeviceSetting(this.getElementSettings(), settingKey); 367 }, 368 onInit: function () { 369 if (this.isActive(this.getSettings())) { 370 elementorModules.ViewModule.prototype.onInit.apply(this, arguments); 371 } 372 }, 373 onDestroy: function () { 374 if (this.isEdit) { 375 this.removeEditorListeners(); 376 } 377 378 if (this.unbindEvents) { 379 this.unbindEvents(); 380 } 381 } 382 }); 383 384 /***/ }), 385 386 /***/ "../assets/dev/js/frontend/modules.js": 387 /*!********************************************!*\ 388 !*** ../assets/dev/js/frontend/modules.js ***! 389 \********************************************/ 390 /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { 391 392 "use strict"; 393 394 395 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 396 397 var _modules = _interopRequireDefault(__webpack_require__(/*! ../modules/modules */ "../assets/dev/js/modules/modules.js")); 398 399 var _document = _interopRequireDefault(__webpack_require__(/*! ./document */ "../assets/dev/js/frontend/document.js")); 400 401 var _stretchElement = _interopRequireDefault(__webpack_require__(/*! ./tools/stretch-element */ "../assets/dev/js/frontend/tools/stretch-element.js")); 402 403 var _base = _interopRequireDefault(__webpack_require__(/*! ./handlers/base */ "../assets/dev/js/frontend/handlers/base.js")); 404 405 var _baseSwiper = _interopRequireDefault(__webpack_require__(/*! ./handlers/base-swiper */ "../assets/dev/js/frontend/handlers/base-swiper.js")); 406 407 _modules.default.frontend = { 408 Document: _document.default, 409 tools: { 410 StretchElement: _stretchElement.default 411 }, 412 handlers: { 413 Base: _base.default, 414 SwiperBase: _baseSwiper.default 415 } 416 }; 417 418 /***/ }), 419 420 /***/ "../assets/dev/js/frontend/tools/stretch-element.js": 421 /*!**********************************************************!*\ 422 !*** ../assets/dev/js/frontend/tools/stretch-element.js ***! 423 \**********************************************************/ 424 /***/ ((module) => { 425 426 "use strict"; 427 428 429 module.exports = elementorModules.ViewModule.extend({ 430 getDefaultSettings: function () { 431 return { 432 element: null, 433 direction: elementorFrontend.config.is_rtl ? 'right' : 'left', 434 selectors: { 435 container: window 436 } 437 }; 438 }, 439 getDefaultElements: function () { 440 return { 441 $element: jQuery(this.getSettings('element')) 442 }; 443 }, 444 stretch: function () { 445 var containerSelector = this.getSettings('selectors.container'), 446 $container; 447 448 try { 449 $container = jQuery(containerSelector); 450 } catch (e) {} 451 452 if (!$container || !$container.length) { 453 $container = jQuery(this.getDefaultSettings().selectors.container); 454 } 455 456 this.reset(); 457 var $element = this.elements.$element, 458 containerWidth = $container.innerWidth(), 459 elementOffset = $element.offset().left, 460 isFixed = 'fixed' === $element.css('position'), 461 correctOffset = isFixed ? 0 : elementOffset; 462 463 if (window !== $container[0]) { 464 var containerOffset = $container.offset().left; 465 466 if (isFixed) { 467 correctOffset = containerOffset; 468 } 469 470 if (elementOffset > containerOffset) { 471 correctOffset = elementOffset - containerOffset; 472 } 473 } 474 475 if (!isFixed) { 476 if (elementorFrontend.config.is_rtl) { 477 correctOffset = containerWidth - ($element.outerWidth() + correctOffset); 478 } 479 480 correctOffset = -correctOffset; 481 } 482 483 var css = {}; 484 css.width = containerWidth + 'px'; 485 css[this.getSettings('direction')] = correctOffset + 'px'; 486 $element.css(css); 487 }, 488 reset: function () { 489 var css = {}; 490 css.width = ''; 491 css[this.getSettings('direction')] = ''; 492 this.elements.$element.css(css); 493 } 494 }); 495 496 /***/ }), 497 498 /***/ "../assets/dev/js/modules/imports/args-object.js": 499 /*!*******************************************************!*\ 500 !*** ../assets/dev/js/modules/imports/args-object.js ***! 501 \*******************************************************/ 502 /***/ ((__unused_webpack_module, exports, __webpack_require__) => { 503 504 "use strict"; 505 506 507 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 508 509 Object.defineProperty(exports, "__esModule", ({ 510 value: true 511 })); 512 exports.default = void 0; 513 514 var _instanceType = _interopRequireDefault(__webpack_require__(/*! ./instance-type */ "../assets/dev/js/modules/imports/instance-type.js")); 515 516 class ArgsObject extends _instanceType.default { 517 static getInstanceType() { 518 return 'ArgsObject'; 519 } 520 /** 521 * Function constructor(). 522 * 523 * Create ArgsObject. 524 * 525 * @param {{}} args 526 */ 527 528 529 constructor(args) { 530 super(); 531 this.args = args; 532 } 533 /** 534 * Function requireArgument(). 535 * 536 * Validate property in args. 537 * 538 * @param {string} property 539 * @param {{}} args 540 * 541 * @throws {Error} 542 * 543 */ 544 545 546 requireArgument(property, args = this.args) { 547 if (!args.hasOwnProperty(property)) { 548 throw Error(`${property} is required.`); 549 } 550 } 551 /** 552 * Function requireArgumentType(). 553 * 554 * Validate property in args using `type === typeof(args.whatever)`. 555 * 556 * @param {string} property 557 * @param {string} type 558 * @param {{}} args 559 * 560 * @throws {Error} 561 * 562 */ 563 564 565 requireArgumentType(property, type, args = this.args) { 566 this.requireArgument(property, args); 567 568 if (typeof args[property] !== type) { 569 throw Error(`${property} invalid type: ${type}.`); 570 } 571 } 572 /** 573 * Function requireArgumentInstance(). 574 * 575 * Validate property in args using `args.whatever instanceof instance`. 576 * 577 * @param {string} property 578 * @param {instanceof} instance 579 * @param {{}} args 580 * 581 * @throws {Error} 582 * 583 */ 584 585 586 requireArgumentInstance(property, instance, args = this.args) { 587 this.requireArgument(property, args); 588 589 if (!(args[property] instanceof instance)) { 590 throw Error(`${property} invalid instance.`); 591 } 592 } 593 /** 594 * Function requireArgumentConstructor(). 595 * 596 * Validate property in args using `type === args.whatever.constructor`. 597 * 598 * @param {string} property 599 * @param {*} type 600 * @param {{}} args 601 * 602 * @throws {Error} 603 * 604 */ 605 606 607 requireArgumentConstructor(property, type, args = this.args) { 608 this.requireArgument(property, args); 609 610 if (args[property].constructor !== type) { 611 throw Error(`${property} invalid constructor type.`); 612 } 613 } 614 615 } 616 617 exports.default = ArgsObject; 618 619 /***/ }), 620 621 /***/ "../assets/dev/js/modules/imports/force-method-implementation.js": 622 /*!***********************************************************************!*\ 623 !*** ../assets/dev/js/modules/imports/force-method-implementation.js ***! 624 \***********************************************************************/ 625 /***/ ((__unused_webpack_module, exports) => { 626 627 "use strict"; 628 629 630 Object.defineProperty(exports, "__esModule", ({ 631 value: true 632 })); 633 exports.default = exports.ForceMethodImplementation = void 0; 634 635 // TODO: Wrong location used as `elementorModules.ForceMethodImplementation(); should be` `elementorUtils.forceMethodImplementation()`; 636 class ForceMethodImplementation extends Error { 637 constructor(info = {}) { 638 super(`${info.isStatic ? 'static ' : ''}${info.fullName}() should be implemented, please provide '${info.functionName || info.fullName}' functionality.`); 639 Error.captureStackTrace(this, ForceMethodImplementation); 640 } 641 642 } 643 644 exports.ForceMethodImplementation = ForceMethodImplementation; 645 646 var _default = () => { 647 const stack = Error().stack, 648 caller = stack.split('\n')[2].trim(), 649 callerName = caller.startsWith('at new') ? 'constructor' : caller.split(' ')[1], 650 info = {}; 651 info.functionName = callerName; 652 info.fullName = callerName; 653 654 if (info.functionName.includes('.')) { 655 const parts = info.functionName.split('.'); 656 info.className = parts[0]; 657 info.functionName = parts[1]; 658 } else { 659 info.isStatic = true; 660 } 661 662 throw new ForceMethodImplementation(info); 663 }; 664 665 exports.default = _default; 666 667 /***/ }), 668 669 /***/ "../assets/dev/js/modules/imports/instance-type.js": 670 /*!*********************************************************!*\ 671 !*** ../assets/dev/js/modules/imports/instance-type.js ***! 672 \*********************************************************/ 673 /***/ ((__unused_webpack_module, exports) => { 674 675 "use strict"; 676 677 678 Object.defineProperty(exports, "__esModule", ({ 679 value: true 680 })); 681 exports.default = void 0; 682 683 class InstanceType { 684 static [Symbol.hasInstance](target) { 685 /** 686 * This is function extending being called each time JS uses instanceOf, since babel use it each time it create new class 687 * its give's opportunity to mange capabilities of instanceOf operator. 688 * saving current class each time will give option later to handle instanceOf manually. 689 */ 690 let result = super[Symbol.hasInstance](target); // Act normal when validate a class, which does not have instance type. 691 692 if (target && !target.constructor.getInstanceType) { 693 return result; 694 } 695 696 if (target) { 697 if (!target.instanceTypes) { 698 target.instanceTypes = []; 699 } 700 701 if (!result) { 702 if (this.getInstanceType() === target.constructor.getInstanceType()) { 703 result = true; 704 } 705 } 706 707 if (result) { 708 const name = this.getInstanceType === InstanceType.getInstanceType ? 'BaseInstanceType' : this.getInstanceType(); 709 710 if (-1 === target.instanceTypes.indexOf(name)) { 711 target.instanceTypes.push(name); 712 } 713 } 714 } 715 716 if (!result && target) { 717 // Check if the given 'target', is instance of known types. 718 result = target.instanceTypes && Array.isArray(target.instanceTypes) && -1 !== target.instanceTypes.indexOf(this.getInstanceType()); 719 } 720 721 return result; 722 } 723 724 constructor() { 725 // Since anonymous classes sometimes do not get validated by babel, do it manually. 726 let target = new.target; 727 const prototypes = []; 728 729 while (target.__proto__ && target.__proto__.name) { 730 prototypes.push(target.__proto__); 731 target = target.__proto__; 732 } 733 734 prototypes.reverse().forEach(proto => this instanceof proto); 735 } 736 737 static getInstanceType() { 738 elementorModules.ForceMethodImplementation(); 739 } 740 741 } 742 743 exports.default = InstanceType; 744 745 /***/ }), 746 747 /***/ "../assets/dev/js/modules/imports/module.js": 748 /*!**************************************************!*\ 749 !*** ../assets/dev/js/modules/imports/module.js ***! 750 \**************************************************/ 751 /***/ ((module) => { 752 753 "use strict"; 754 755 756 const Module = function () { 757 const $ = jQuery, 758 instanceParams = arguments, 759 self = this, 760 events = {}; 761 let settings; 762 763 const ensureClosureMethods = function () { 764 $.each(self, function (methodName) { 765 const oldMethod = self[methodName]; 766 767 if ('function' !== typeof oldMethod) { 768 return; 769 } 770 771 self[methodName] = function () { 772 return oldMethod.apply(self, arguments); 773 }; 774 }); 775 }; 776 777 const initSettings = function () { 778 settings = self.getDefaultSettings(); 779 const instanceSettings = instanceParams[0]; 780 781 if (instanceSettings) { 782 $.extend(true, settings, instanceSettings); 783 } 784 }; 785 786 const init = function () { 787 self.__construct.apply(self, instanceParams); 788 789 ensureClosureMethods(); 790 initSettings(); 791 self.trigger('init'); 792 }; 793 794 this.getItems = function (items, itemKey) { 795 if (itemKey) { 796 const keyStack = itemKey.split('.'), 797 currentKey = keyStack.splice(0, 1); 798 799 if (!keyStack.length) { 800 return items[currentKey]; 801 } 802 803 if (!items[currentKey]) { 804 return; 805 } 806 807 return this.getItems(items[currentKey], keyStack.join('.')); 808 } 809 810 return items; 811 }; 812 813 this.getSettings = function (setting) { 814 return this.getItems(settings, setting); 815 }; 816 817 this.setSettings = function (settingKey, value, settingsContainer) { 818 if (!settingsContainer) { 819 settingsContainer = settings; 820 } 821 822 if ('object' === typeof settingKey) { 823 $.extend(settingsContainer, settingKey); 824 return self; 825 } 826 827 const keyStack = settingKey.split('.'), 828 currentKey = keyStack.splice(0, 1); 829 830 if (!keyStack.length) { 831 settingsContainer[currentKey] = value; 832 return self; 833 } 834 835 if (!settingsContainer[currentKey]) { 836 settingsContainer[currentKey] = {}; 837 } 838 839 return self.setSettings(keyStack.join('.'), value, settingsContainer[currentKey]); 840 }; 841 842 this.getErrorMessage = function (type, functionName) { 843 let message; 844 845 switch (type) { 846 case 'forceMethodImplementation': 847 message = `The method '${functionName}' must to be implemented in the inheritor child.`; 848 break; 849 850 default: 851 message = 'An error occurs'; 852 } 853 854 return message; 855 }; // TODO: This function should be deleted ?. 856 857 858 this.forceMethodImplementation = function (functionName) { 859 throw new Error(this.getErrorMessage('forceMethodImplementation', functionName)); 860 }; 861 862 this.on = function (eventName, callback) { 863 if ('object' === typeof eventName) { 864 $.each(eventName, function (singleEventName) { 865 self.on(singleEventName, this); 866 }); 867 return self; 868 } 869 870 const eventNames = eventName.split(' '); 871 eventNames.forEach(function (singleEventName) { 872 if (!events[singleEventName]) { 873 events[singleEventName] = []; 874 } 875 876 events[singleEventName].push(callback); 877 }); 878 return self; 879 }; 880 881 this.off = function (eventName, callback) { 882 if (!events[eventName]) { 883 return self; 884 } 885 886 if (!callback) { 887 delete events[eventName]; 888 return self; 889 } 890 891 const callbackIndex = events[eventName].indexOf(callback); 892 893 if (-1 !== callbackIndex) { 894 delete events[eventName][callbackIndex]; // Reset array index (for next off on same event). 895 896 events[eventName] = events[eventName].filter(val => val); 897 } 898 899 return self; 900 }; 901 902 this.trigger = function (eventName) { 903 const methodName = 'on' + eventName[0].toUpperCase() + eventName.slice(1), 904 params = Array.prototype.slice.call(arguments, 1); 905 906 if (self[methodName]) { 907 self[methodName].apply(self, params); 908 } 909 910 const callbacks = events[eventName]; 911 912 if (!callbacks) { 913 return self; 914 } 915 916 $.each(callbacks, function (index, callback) { 917 callback.apply(self, params); 918 }); 919 return self; 920 }; 921 922 init(); 923 }; 924 925 Module.prototype.__construct = function () {}; 926 927 Module.prototype.getDefaultSettings = function () { 928 return {}; 929 }; 930 931 Module.prototype.getConstructorID = function () { 932 return this.constructor.name; 933 }; 934 935 Module.extend = function (properties) { 936 const $ = jQuery, 937 parent = this; 938 939 const child = function () { 940 return parent.apply(this, arguments); 941 }; 942 943 $.extend(child, parent); 944 child.prototype = Object.create($.extend({}, parent.prototype, properties)); 945 child.prototype.constructor = child; 946 child.__super__ = parent.prototype; 947 return child; 948 }; 949 950 module.exports = Module; 951 952 /***/ }), 953 954 /***/ "../assets/dev/js/modules/imports/utils/masonry.js": 955 /*!*********************************************************!*\ 956 !*** ../assets/dev/js/modules/imports/utils/masonry.js ***! 957 \*********************************************************/ 958 /***/ ((module, __unused_webpack_exports, __webpack_require__) => { 959 960 "use strict"; 961 962 963 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 964 965 var _viewModule = _interopRequireDefault(__webpack_require__(/*! ../view-module */ "../assets/dev/js/modules/imports/view-module.js")); 966 967 module.exports = _viewModule.default.extend({ 968 getDefaultSettings: function () { 969 return { 970 container: null, 971 items: null, 972 columnsCount: 3, 973 verticalSpaceBetween: 30 974 }; 975 }, 976 getDefaultElements: function () { 977 return { 978 $container: jQuery(this.getSettings('container')), 979 $items: jQuery(this.getSettings('items')) 980 }; 981 }, 982 run: function () { 983 var heights = [], 984 distanceFromTop = this.elements.$container.position().top, 985 settings = this.getSettings(), 986 columnsCount = settings.columnsCount; 987 distanceFromTop += parseInt(this.elements.$container.css('margin-top'), 10); 988 this.elements.$items.each(function (index) { 989 var row = Math.floor(index / columnsCount), 990 $item = jQuery(this), 991 itemHeight = $item[0].getBoundingClientRect().height + settings.verticalSpaceBetween; 992 993 if (row) { 994 var itemPosition = $item.position(), 995 indexAtRow = index % columnsCount, 996 pullHeight = itemPosition.top - distanceFromTop - heights[indexAtRow]; 997 pullHeight -= parseInt($item.css('margin-top'), 10); 998 pullHeight *= -1; 999 $item.css('margin-top', pullHeight + 'px'); 1000 heights[indexAtRow] += itemHeight; 1001 } else { 1002 heights.push(itemHeight); 1003 } 1004 }); 1005 } 1006 }); 1007 1008 /***/ }), 1009 1010 /***/ "../assets/dev/js/modules/imports/utils/scroll.js": 1011 /*!********************************************************!*\ 1012 !*** ../assets/dev/js/modules/imports/utils/scroll.js ***! 1013 \********************************************************/ 1014 /***/ ((__unused_webpack_module, exports) => { 1015 1016 "use strict"; 1017 1018 1019 Object.defineProperty(exports, "__esModule", ({ 1020 value: true 1021 })); 1022 exports.default = void 0; 1023 1024 // Moved from elementor pro: 'assets/dev/js/frontend/utils' 1025 class Scroll { 1026 /** 1027 * @param {object} obj 1028 * @param {number} obj.sensitivity - Value between 0-100 - Will determine the intersection trigger points on the element 1029 * @param {function} obj.callback - Will be triggered on each intersection point between the element and the viewport top/bottom 1030 * @param {string} obj.offset - Offset between the element intersection points and the viewport, written like in CSS: '-50% 0 -25%' 1031 * @param {HTMLElement} obj.root - The element that the events will be relative to, if 'null' will be relative to the viewport 1032 */ 1033 static scrollObserver(obj) { 1034 let lastScrollY = 0; // Generating threshholds points along the animation height 1035 // More threshholds points = more trigger points of the callback 1036 1037 const buildThreshholds = (sensitivityPercentage = 0) => { 1038 const threshholds = []; 1039 1040 if (sensitivityPercentage > 0 && sensitivityPercentage <= 100) { 1041 const increment = 100 / sensitivityPercentage; 1042 1043 for (let i = 0; i <= 100; i += increment) { 1044 threshholds.push(i / 100); 1045 } 1046 } else { 1047 threshholds.push(0); 1048 } 1049 1050 return threshholds; 1051 }; 1052 1053 const options = { 1054 root: obj.root || null, 1055 rootMargin: obj.offset || '0px', 1056 threshold: buildThreshholds(obj.sensitivity) 1057 }; 1058 1059 function handleIntersect(entries, observer) { 1060 const currentScrollY = entries[0].boundingClientRect.y, 1061 isInViewport = entries[0].isIntersecting, 1062 intersectionScrollDirection = currentScrollY < lastScrollY ? 'down' : 'up', 1063 scrollPercentage = Math.abs(parseFloat((entries[0].intersectionRatio * 100).toFixed(2))); 1064 obj.callback({ 1065 sensitivity: obj.sensitivity, 1066 isInViewport, 1067 scrollPercentage, 1068 intersectionScrollDirection 1069 }); 1070 lastScrollY = currentScrollY; 1071 } 1072 1073 return new IntersectionObserver(handleIntersect, options); 1074 } 1075 /** 1076 * @param {jQuery Element} $element 1077 * @param {object} offsetObj 1078 * @param {number} offsetObj.start - Offset start value in percentages 1079 * @param {number} offsetObj.end - Offset end value in percentages 1080 */ 1081 1082 1083 static getElementViewportPercentage($element, offsetObj = {}) { 1084 const elementOffset = $element[0].getBoundingClientRect(), 1085 offsetStart = offsetObj.start || 0, 1086 offsetEnd = offsetObj.end || 0, 1087 windowStartOffset = window.innerHeight * offsetStart / 100, 1088 windowEndOffset = window.innerHeight * offsetEnd / 100, 1089 y1 = elementOffset.top - window.innerHeight, 1090 y2 = elementOffset.top + windowStartOffset + $element.height(), 1091 startPosition = 0 - y1 + windowStartOffset, 1092 endPosition = y2 - y1 + windowEndOffset, 1093 percent = Math.max(0, Math.min(startPosition / endPosition, 1)); 1094 return parseFloat((percent * 100).toFixed(2)); 1095 } 1096 /** 1097 * @param {object} offsetObj 1098 * @param {number} offsetObj.start - Offset start value in percentages 1099 * @param {number} offsetObj.end - Offset end value in percentages 1100 * @param {number} limitPageHeight - Will limit the page height calculation 1101 */ 1102 1103 1104 static getPageScrollPercentage(offsetObj = {}, limitPageHeight) { 1105 const offsetStart = offsetObj.start || 0, 1106 offsetEnd = offsetObj.end || 0, 1107 initialPageHeight = limitPageHeight || document.documentElement.scrollHeight - document.documentElement.clientHeight, 1108 heightOffset = initialPageHeight * offsetStart / 100, 1109 pageRange = initialPageHeight + heightOffset + initialPageHeight * offsetEnd / 100, 1110 scrollPos = document.documentElement.scrollTop + document.body.scrollTop + heightOffset; 1111 return scrollPos / pageRange * 100; 1112 } 1113 1114 } 1115 1116 exports.default = Scroll; 1117 1118 /***/ }), 1119 1120 /***/ "../assets/dev/js/modules/imports/view-module.js": 1121 /*!*******************************************************!*\ 1122 !*** ../assets/dev/js/modules/imports/view-module.js ***! 1123 \*******************************************************/ 1124 /***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1125 1126 "use strict"; 1127 1128 1129 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 1130 1131 var _module = _interopRequireDefault(__webpack_require__(/*! ./module */ "../assets/dev/js/modules/imports/module.js")); 1132 1133 module.exports = _module.default.extend({ 1134 elements: null, 1135 getDefaultElements: function () { 1136 return {}; 1137 }, 1138 bindEvents: function () {}, 1139 onInit: function () { 1140 this.initElements(); 1141 this.bindEvents(); 1142 }, 1143 initElements: function () { 1144 this.elements = this.getDefaultElements(); 1145 } 1146 }); 1147 1148 /***/ }), 1149 1150 /***/ "../assets/dev/js/modules/modules.js": 1151 /*!*******************************************!*\ 1152 !*** ../assets/dev/js/modules/modules.js ***! 1153 \*******************************************/ 1154 /***/ ((__unused_webpack_module, exports, __webpack_require__) => { 1155 1156 "use strict"; 1157 1158 1159 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 1160 1161 Object.defineProperty(exports, "__esModule", ({ 1162 value: true 1163 })); 1164 exports.default = void 0; 1165 1166 var _module = _interopRequireDefault(__webpack_require__(/*! ./imports/module */ "../assets/dev/js/modules/imports/module.js")); 1167 1168 var _viewModule = _interopRequireDefault(__webpack_require__(/*! ./imports/view-module */ "../assets/dev/js/modules/imports/view-module.js")); 1169 1170 var _argsObject = _interopRequireDefault(__webpack_require__(/*! ./imports/args-object */ "../assets/dev/js/modules/imports/args-object.js")); 1171 1172 var _masonry = _interopRequireDefault(__webpack_require__(/*! ./imports/utils/masonry */ "../assets/dev/js/modules/imports/utils/masonry.js")); 1173 1174 var _scroll = _interopRequireDefault(__webpack_require__(/*! ./imports/utils/scroll */ "../assets/dev/js/modules/imports/utils/scroll.js")); 1175 1176 var _forceMethodImplementation = _interopRequireDefault(__webpack_require__(/*! ./imports/force-method-implementation */ "../assets/dev/js/modules/imports/force-method-implementation.js")); 1177 1178 var _default = window.elementorModules = { 1179 Module: _module.default, 1180 ViewModule: _viewModule.default, 1181 ArgsObject: _argsObject.default, 1182 ForceMethodImplementation: _forceMethodImplementation.default, 1183 utils: { 1184 Masonry: _masonry.default, 1185 Scroll: _scroll.default 1186 } 1187 }; 1188 1189 exports.default = _default; 1190 1191 /***/ }) 1192 1193 }, 1194 /******/ __webpack_require__ => { // webpackRuntimeModules 1195 /******/ "use strict"; 1196 /******/ 1197 /******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) 1198 /******/ var __webpack_exports__ = (__webpack_exec__("../assets/dev/js/frontend/modules.js")); 1199 /******/ } 1200 ]); 1201 //# sourceMappingURL=frontend-modules.js.map