PluginProbe
Elementor Website Builder – more than just a page builder / 3.6.5
Elementor Website Builder – more than just a page builder v3.6.5
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.6.5, at assets/js/frontend-modules.js

1,241 lines 35.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /*! elementor - v3.6.5 - 27-04-2022 */
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); // Note: Converting the constructor to string in order to avoid equation issues
650 // due to different memory addresses between iframes (window.Object !== window.top.Object).
651
652 if (args[property].constructor.toString() !== type.prototype.constructor.toString()) {
653 throw Error(`${property} invalid constructor type.`);
654 }
655 }
656
657 }
658
659 exports["default"] = ArgsObject;
660
661 /***/ }),
662
663 /***/ "../assets/dev/js/modules/imports/force-method-implementation.js":
664 /*!***********************************************************************!*\
665 !*** ../assets/dev/js/modules/imports/force-method-implementation.js ***!
666 \***********************************************************************/
667 /***/ ((__unused_webpack_module, exports) => {
668
669 "use strict";
670
671
672 Object.defineProperty(exports, "__esModule", ({
673 value: true
674 }));
675 exports["default"] = exports.ForceMethodImplementation = void 0;
676
677 // TODO: Wrong location used as `elementorModules.ForceMethodImplementation(); should be` `elementorUtils.forceMethodImplementation()`;
678 class ForceMethodImplementation extends Error {
679 constructor(info = {}) {
680 super(`${info.isStatic ? 'static ' : ''}${info.fullName}() should be implemented, please provide '${info.functionName || info.fullName}' functionality.`);
681 Error.captureStackTrace(this, ForceMethodImplementation);
682 }
683
684 }
685
686 exports.ForceMethodImplementation = ForceMethodImplementation;
687
688 var _default = () => {
689 const stack = Error().stack,
690 caller = stack.split('\n')[2].trim(),
691 callerName = caller.startsWith('at new') ? 'constructor' : caller.split(' ')[1],
692 info = {};
693 info.functionName = callerName;
694 info.fullName = callerName;
695
696 if (info.functionName.includes('.')) {
697 const parts = info.functionName.split('.');
698 info.className = parts[0];
699 info.functionName = parts[1];
700 } else {
701 info.isStatic = true;
702 }
703
704 throw new ForceMethodImplementation(info);
705 };
706
707 exports["default"] = _default;
708
709 /***/ }),
710
711 /***/ "../assets/dev/js/modules/imports/instance-type.js":
712 /*!*********************************************************!*\
713 !*** ../assets/dev/js/modules/imports/instance-type.js ***!
714 \*********************************************************/
715 /***/ ((__unused_webpack_module, exports) => {
716
717 "use strict";
718
719
720 Object.defineProperty(exports, "__esModule", ({
721 value: true
722 }));
723 exports["default"] = void 0;
724
725 class InstanceType {
726 static [Symbol.hasInstance](target) {
727 /**
728 * This is function extending being called each time JS uses instanceOf, since babel use it each time it create new class
729 * its give's opportunity to mange capabilities of instanceOf operator.
730 * saving current class each time will give option later to handle instanceOf manually.
731 */
732 let result = super[Symbol.hasInstance](target); // Act normal when validate a class, which does not have instance type.
733
734 if (target && !target.constructor.getInstanceType) {
735 return result;
736 }
737
738 if (target) {
739 if (!target.instanceTypes) {
740 target.instanceTypes = [];
741 }
742
743 if (!result) {
744 if (this.getInstanceType() === target.constructor.getInstanceType()) {
745 result = true;
746 }
747 }
748
749 if (result) {
750 const name = this.getInstanceType === InstanceType.getInstanceType ? 'BaseInstanceType' : this.getInstanceType();
751
752 if (-1 === target.instanceTypes.indexOf(name)) {
753 target.instanceTypes.push(name);
754 }
755 }
756 }
757
758 if (!result && target) {
759 // Check if the given 'target', is instance of known types.
760 result = target.instanceTypes && Array.isArray(target.instanceTypes) && -1 !== target.instanceTypes.indexOf(this.getInstanceType());
761 }
762
763 return result;
764 }
765
766 constructor() {
767 // Since anonymous classes sometimes do not get validated by babel, do it manually.
768 let target = new.target;
769 const prototypes = [];
770
771 while (target.__proto__ && target.__proto__.name) {
772 prototypes.push(target.__proto__);
773 target = target.__proto__;
774 }
775
776 prototypes.reverse().forEach(proto => this instanceof proto);
777 }
778
779 static getInstanceType() {
780 elementorModules.ForceMethodImplementation();
781 }
782
783 }
784
785 exports["default"] = InstanceType;
786
787 /***/ }),
788
789 /***/ "../assets/dev/js/modules/imports/module.js":
790 /*!**************************************************!*\
791 !*** ../assets/dev/js/modules/imports/module.js ***!
792 \**************************************************/
793 /***/ ((module) => {
794
795 "use strict";
796
797
798 const Module = function () {
799 const $ = jQuery,
800 instanceParams = arguments,
801 self = this,
802 events = {};
803 let settings;
804
805 const ensureClosureMethods = function () {
806 $.each(self, function (methodName) {
807 const oldMethod = self[methodName];
808
809 if ('function' !== typeof oldMethod) {
810 return;
811 }
812
813 self[methodName] = function () {
814 return oldMethod.apply(self, arguments);
815 };
816 });
817 };
818
819 const initSettings = function () {
820 settings = self.getDefaultSettings();
821 const instanceSettings = instanceParams[0];
822
823 if (instanceSettings) {
824 $.extend(true, settings, instanceSettings);
825 }
826 };
827
828 const init = function () {
829 self.__construct.apply(self, instanceParams);
830
831 ensureClosureMethods();
832 initSettings();
833 self.trigger('init');
834 };
835
836 this.getItems = function (items, itemKey) {
837 if (itemKey) {
838 const keyStack = itemKey.split('.'),
839 currentKey = keyStack.splice(0, 1);
840
841 if (!keyStack.length) {
842 return items[currentKey];
843 }
844
845 if (!items[currentKey]) {
846 return;
847 }
848
849 return this.getItems(items[currentKey], keyStack.join('.'));
850 }
851
852 return items;
853 };
854
855 this.getSettings = function (setting) {
856 return this.getItems(settings, setting);
857 };
858
859 this.setSettings = function (settingKey, value, settingsContainer) {
860 if (!settingsContainer) {
861 settingsContainer = settings;
862 }
863
864 if ('object' === typeof settingKey) {
865 $.extend(settingsContainer, settingKey);
866 return self;
867 }
868
869 const keyStack = settingKey.split('.'),
870 currentKey = keyStack.splice(0, 1);
871
872 if (!keyStack.length) {
873 settingsContainer[currentKey] = value;
874 return self;
875 }
876
877 if (!settingsContainer[currentKey]) {
878 settingsContainer[currentKey] = {};
879 }
880
881 return self.setSettings(keyStack.join('.'), value, settingsContainer[currentKey]);
882 };
883
884 this.getErrorMessage = function (type, functionName) {
885 let message;
886
887 switch (type) {
888 case 'forceMethodImplementation':
889 message = `The method '${functionName}' must to be implemented in the inheritor child.`;
890 break;
891
892 default:
893 message = 'An error occurs';
894 }
895
896 return message;
897 }; // TODO: This function should be deleted ?.
898
899
900 this.forceMethodImplementation = function (functionName) {
901 throw new Error(this.getErrorMessage('forceMethodImplementation', functionName));
902 };
903
904 this.on = function (eventName, callback) {
905 if ('object' === typeof eventName) {
906 $.each(eventName, function (singleEventName) {
907 self.on(singleEventName, this);
908 });
909 return self;
910 }
911
912 const eventNames = eventName.split(' ');
913 eventNames.forEach(function (singleEventName) {
914 if (!events[singleEventName]) {
915 events[singleEventName] = [];
916 }
917
918 events[singleEventName].push(callback);
919 });
920 return self;
921 };
922
923 this.off = function (eventName, callback) {
924 if (!events[eventName]) {
925 return self;
926 }
927
928 if (!callback) {
929 delete events[eventName];
930 return self;
931 }
932
933 const callbackIndex = events[eventName].indexOf(callback);
934
935 if (-1 !== callbackIndex) {
936 delete events[eventName][callbackIndex]; // Reset array index (for next off on same event).
937
938 events[eventName] = events[eventName].filter(val => val);
939 }
940
941 return self;
942 };
943
944 this.trigger = function (eventName) {
945 const methodName = 'on' + eventName[0].toUpperCase() + eventName.slice(1),
946 params = Array.prototype.slice.call(arguments, 1);
947
948 if (self[methodName]) {
949 self[methodName].apply(self, params);
950 }
951
952 const callbacks = events[eventName];
953
954 if (!callbacks) {
955 return self;
956 }
957
958 $.each(callbacks, function (index, callback) {
959 callback.apply(self, params);
960 });
961 return self;
962 };
963
964 init();
965 };
966
967 Module.prototype.__construct = function () {};
968
969 Module.prototype.getDefaultSettings = function () {
970 return {};
971 };
972
973 Module.prototype.getConstructorID = function () {
974 return this.constructor.name;
975 };
976
977 Module.extend = function (properties) {
978 const $ = jQuery,
979 parent = this;
980
981 const child = function () {
982 return parent.apply(this, arguments);
983 };
984
985 $.extend(child, parent);
986 child.prototype = Object.create($.extend({}, parent.prototype, properties));
987 child.prototype.constructor = child;
988 child.__super__ = parent.prototype;
989 return child;
990 };
991
992 module.exports = Module;
993
994 /***/ }),
995
996 /***/ "../assets/dev/js/modules/imports/utils/masonry.js":
997 /*!*********************************************************!*\
998 !*** ../assets/dev/js/modules/imports/utils/masonry.js ***!
999 \*********************************************************/
1000 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1001
1002 "use strict";
1003
1004
1005 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1006
1007 var _viewModule = _interopRequireDefault(__webpack_require__(/*! ../view-module */ "../assets/dev/js/modules/imports/view-module.js"));
1008
1009 module.exports = _viewModule.default.extend({
1010 getDefaultSettings: function () {
1011 return {
1012 container: null,
1013 items: null,
1014 columnsCount: 3,
1015 verticalSpaceBetween: 30
1016 };
1017 },
1018 getDefaultElements: function () {
1019 return {
1020 $container: jQuery(this.getSettings('container')),
1021 $items: jQuery(this.getSettings('items'))
1022 };
1023 },
1024 run: function () {
1025 var heights = [],
1026 distanceFromTop = this.elements.$container.position().top,
1027 settings = this.getSettings(),
1028 columnsCount = settings.columnsCount;
1029 distanceFromTop += parseInt(this.elements.$container.css('margin-top'), 10);
1030 this.elements.$items.each(function (index) {
1031 var row = Math.floor(index / columnsCount),
1032 $item = jQuery(this),
1033 itemHeight = $item[0].getBoundingClientRect().height + settings.verticalSpaceBetween;
1034
1035 if (row) {
1036 var itemPosition = $item.position(),
1037 indexAtRow = index % columnsCount,
1038 pullHeight = itemPosition.top - distanceFromTop - heights[indexAtRow];
1039 pullHeight -= parseInt($item.css('margin-top'), 10);
1040 pullHeight *= -1;
1041 $item.css('margin-top', pullHeight + 'px');
1042 heights[indexAtRow] += itemHeight;
1043 } else {
1044 heights.push(itemHeight);
1045 }
1046 });
1047 }
1048 });
1049
1050 /***/ }),
1051
1052 /***/ "../assets/dev/js/modules/imports/utils/scroll.js":
1053 /*!********************************************************!*\
1054 !*** ../assets/dev/js/modules/imports/utils/scroll.js ***!
1055 \********************************************************/
1056 /***/ ((__unused_webpack_module, exports) => {
1057
1058 "use strict";
1059
1060
1061 Object.defineProperty(exports, "__esModule", ({
1062 value: true
1063 }));
1064 exports["default"] = void 0;
1065
1066 // Moved from elementor pro: 'assets/dev/js/frontend/utils'
1067 class Scroll {
1068 /**
1069 * @param {object} obj
1070 * @param {number} obj.sensitivity - Value between 0-100 - Will determine the intersection trigger points on the element
1071 * @param {function} obj.callback - Will be triggered on each intersection point between the element and the viewport top/bottom
1072 * @param {string} obj.offset - Offset between the element intersection points and the viewport, written like in CSS: '-50% 0 -25%'
1073 * @param {HTMLElement} obj.root - The element that the events will be relative to, if 'null' will be relative to the viewport
1074 */
1075 static scrollObserver(obj) {
1076 let lastScrollY = 0; // Generating threshholds points along the animation height
1077 // More threshholds points = more trigger points of the callback
1078
1079 const buildThreshholds = (sensitivityPercentage = 0) => {
1080 const threshholds = [];
1081
1082 if (sensitivityPercentage > 0 && sensitivityPercentage <= 100) {
1083 const increment = 100 / sensitivityPercentage;
1084
1085 for (let i = 0; i <= 100; i += increment) {
1086 threshholds.push(i / 100);
1087 }
1088 } else {
1089 threshholds.push(0);
1090 }
1091
1092 return threshholds;
1093 };
1094
1095 const options = {
1096 root: obj.root || null,
1097 rootMargin: obj.offset || '0px',
1098 threshold: buildThreshholds(obj.sensitivity)
1099 };
1100
1101 function handleIntersect(entries) {
1102 const currentScrollY = entries[0].boundingClientRect.y,
1103 isInViewport = entries[0].isIntersecting,
1104 intersectionScrollDirection = currentScrollY < lastScrollY ? 'down' : 'up',
1105 scrollPercentage = Math.abs(parseFloat((entries[0].intersectionRatio * 100).toFixed(2)));
1106 obj.callback({
1107 sensitivity: obj.sensitivity,
1108 isInViewport,
1109 scrollPercentage,
1110 intersectionScrollDirection
1111 });
1112 lastScrollY = currentScrollY;
1113 }
1114
1115 return new IntersectionObserver(handleIntersect, options);
1116 }
1117 /**
1118 * @param {jQuery Element} $element
1119 * @param {object} offsetObj
1120 * @param {number} offsetObj.start - Offset start value in percentages
1121 * @param {number} offsetObj.end - Offset end value in percentages
1122 */
1123
1124
1125 static getElementViewportPercentage($element, offsetObj = {}) {
1126 const elementOffset = $element[0].getBoundingClientRect(),
1127 offsetStart = offsetObj.start || 0,
1128 offsetEnd = offsetObj.end || 0,
1129 windowStartOffset = window.innerHeight * offsetStart / 100,
1130 windowEndOffset = window.innerHeight * offsetEnd / 100,
1131 y1 = elementOffset.top - window.innerHeight,
1132 y2 = elementOffset.top + windowStartOffset + $element.height(),
1133 startPosition = 0 - y1 + windowStartOffset,
1134 endPosition = y2 - y1 + windowEndOffset,
1135 percent = Math.max(0, Math.min(startPosition / endPosition, 1));
1136 return parseFloat((percent * 100).toFixed(2));
1137 }
1138 /**
1139 * @param {object} offsetObj
1140 * @param {number} offsetObj.start - Offset start value in percentages
1141 * @param {number} offsetObj.end - Offset end value in percentages
1142 * @param {number} limitPageHeight - Will limit the page height calculation
1143 */
1144
1145
1146 static getPageScrollPercentage(offsetObj = {}, limitPageHeight) {
1147 const offsetStart = offsetObj.start || 0,
1148 offsetEnd = offsetObj.end || 0,
1149 initialPageHeight = limitPageHeight || document.documentElement.scrollHeight - document.documentElement.clientHeight,
1150 heightOffset = initialPageHeight * offsetStart / 100,
1151 pageRange = initialPageHeight + heightOffset + initialPageHeight * offsetEnd / 100,
1152 scrollPos = document.documentElement.scrollTop + document.body.scrollTop + heightOffset;
1153 return scrollPos / pageRange * 100;
1154 }
1155
1156 }
1157
1158 exports["default"] = Scroll;
1159
1160 /***/ }),
1161
1162 /***/ "../assets/dev/js/modules/imports/view-module.js":
1163 /*!*******************************************************!*\
1164 !*** ../assets/dev/js/modules/imports/view-module.js ***!
1165 \*******************************************************/
1166 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1167
1168 "use strict";
1169
1170
1171 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1172
1173 var _module = _interopRequireDefault(__webpack_require__(/*! ./module */ "../assets/dev/js/modules/imports/module.js"));
1174
1175 module.exports = _module.default.extend({
1176 elements: null,
1177 getDefaultElements: function () {
1178 return {};
1179 },
1180 bindEvents: function () {},
1181 onInit: function () {
1182 this.initElements();
1183 this.bindEvents();
1184 },
1185 initElements: function () {
1186 this.elements = this.getDefaultElements();
1187 }
1188 });
1189
1190 /***/ }),
1191
1192 /***/ "../assets/dev/js/modules/modules.js":
1193 /*!*******************************************!*\
1194 !*** ../assets/dev/js/modules/modules.js ***!
1195 \*******************************************/
1196 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1197
1198 "use strict";
1199
1200
1201 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
1202
1203 Object.defineProperty(exports, "__esModule", ({
1204 value: true
1205 }));
1206 exports["default"] = void 0;
1207
1208 var _module = _interopRequireDefault(__webpack_require__(/*! ./imports/module */ "../assets/dev/js/modules/imports/module.js"));
1209
1210 var _viewModule = _interopRequireDefault(__webpack_require__(/*! ./imports/view-module */ "../assets/dev/js/modules/imports/view-module.js"));
1211
1212 var _argsObject = _interopRequireDefault(__webpack_require__(/*! ./imports/args-object */ "../assets/dev/js/modules/imports/args-object.js"));
1213
1214 var _masonry = _interopRequireDefault(__webpack_require__(/*! ./imports/utils/masonry */ "../assets/dev/js/modules/imports/utils/masonry.js"));
1215
1216 var _scroll = _interopRequireDefault(__webpack_require__(/*! ./imports/utils/scroll */ "../assets/dev/js/modules/imports/utils/scroll.js"));
1217
1218 var _forceMethodImplementation = _interopRequireDefault(__webpack_require__(/*! ./imports/force-method-implementation */ "../assets/dev/js/modules/imports/force-method-implementation.js"));
1219
1220 var _default = window.elementorModules = {
1221 Module: _module.default,
1222 ViewModule: _viewModule.default,
1223 ArgsObject: _argsObject.default,
1224 ForceMethodImplementation: _forceMethodImplementation.default,
1225 utils: {
1226 Masonry: _masonry.default,
1227 Scroll: _scroll.default
1228 }
1229 };
1230
1231 exports["default"] = _default;
1232
1233 /***/ })
1234
1235 },
1236 /******/ __webpack_require__ => { // webpackRuntimeModules
1237 /******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
1238 /******/ var __webpack_exports__ = (__webpack_exec__("../assets/dev/js/frontend/modules.js"));
1239 /******/ }
1240 ]);
1241 //# sourceMappingURL=frontend-modules.js.map