PluginProbe
Elementor Website Builder – more than just a page builder / 3.7.0-dev1
Elementor Website Builder – more than just a page builder v3.7.0-dev1
4.3.1 4.3.0 4.3.0-beta3 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 All 454 releases
elementor / assets / js / frontend-modules.js

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

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