PluginProbe
Elementor Website Builder – more than just a page builder / 3.5.3
Elementor Website Builder – more than just a page builder v3.5.3
4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
elementor / assets / js / frontend-modules.js

frontend-modules.js in Elementor Website Builder – more than just a page builder 3.5.3, at assets/js/frontend-modules.js

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