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

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