/home/techb158/on-time-movers.com/wp-content/plugins/wpforms/assets/js
Edit: /home/techb158/on-time-movers.com/wp-content/plugins/wpforms/assets/js/wpforms.js (76216B)
/* global wpforms_settings, grecaptcha, hcaptcha, wpformsRecaptchaCallback, wpformsRecaptchaV3Execute, wpforms_validate, wpforms_datepicker, wpforms_timepicker, Mailcheck, Choices, WPFormsPasswordField, WPFormsEntryPreview, punycode, tinyMCE, WPFormsUtils */
'use strict';
var wpforms = window.wpforms || ( function( document, window, $ ) {
var app = {
/**
* Start the engine.
*
* @since 1.2.3
*/
init: function() {
// Document ready.
$( app.ready );
// Page load.
$( window ).on( 'load', function() {
// In the case of jQuery 3.+, we need to wait for a ready event first.
if ( typeof $.ready.then === 'function' ) {
$.ready.then( app.load );
} else {
app.load();
}
} );
app.bindUIActions();
app.bindOptinMonster();
},
/**
* Document ready.
*
* @since 1.2.3
*/
ready: function() {
// Clear URL - remove wpforms_form_id.
app.clearUrlQuery();
// Set user identifier.
app.setUserIndentifier();
app.loadValidation();
app.loadDatePicker();
app.loadTimePicker();
app.loadInputMask();
app.loadSmartPhoneField();
app.loadPayments();
app.loadMailcheck();
app.loadChoicesJS();
// Randomize elements.
$( '.wpforms-randomize' ).each( function() {
var $list = $( this ),
$listItems = $list.children();
while ( $listItems.length ) {
$list.append( $listItems.splice( Math.floor( Math.random() * $listItems.length ), 1 )[0] );
}
} );
// Unlock pagebreak navigation.
$( '.wpforms-page-button' ).prop( 'disabled', false );
$( document ).trigger( 'wpformsReady' );
},
/**
* Page load.
*
* @since 1.2.3
*/
load: function() {
},
//--------------------------------------------------------------------//
// Initializing
//--------------------------------------------------------------------//
/**
* Remove wpforms_form_id from URL.
*
* @since 1.5.2
*/
clearUrlQuery: function() {
var loc = window.location,
query = loc.search;
if ( query.indexOf( 'wpforms_form_id=' ) !== -1 ) {
query = query.replace( /([&?]wpforms_form_id=[0-9]*$|wpforms_form_id=[0-9]*&|[?&]wpforms_form_id=[0-9]*(?=#))/, '' );
history.replaceState( {}, null, loc.origin + loc.pathname + query );
}
},
/**
* Load jQuery Validation.
*
* @since 1.2.3
*/
loadValidation: function() {
// Only load if jQuery validation library exists.
if ( typeof $.fn.validate !== 'undefined' ) {
// jQuery Validation library will not correctly validate
// fields that do not have a name attribute, so we use the
// `wpforms-input-temp-name` class to add a temporary name
// attribute before validation is initialized, then remove it
// before the form submits.
$( '.wpforms-input-temp-name' ).each( function( index, el ) {
var random = Math.floor( Math.random() * 9999 ) + 1;
$( this ).attr( 'name', 'wpf-temp-' + random );
} );
// Prepend URL field contents with https:// if user input doesn't contain a schema.
$( document ).on( 'change', '.wpforms-validate input[type=url]', function() {
var url = $( this ).val();
if ( ! url ) {
return false;
}
if ( url.substr( 0, 7 ) !== 'http://' && url.substr( 0, 8 ) !== 'https://' ) {
$( this ).val( 'https://' + url );
}
} );
$.validator.messages.required = wpforms_settings.val_required;
$.validator.messages.url = wpforms_settings.val_url;
$.validator.messages.email = wpforms_settings.val_email;
$.validator.messages.number = wpforms_settings.val_number;
// Payments: Validate method for Credit Card Number.
if ( typeof $.fn.payment !== 'undefined' ) {
$.validator.addMethod( 'creditcard', function( value, element ) {
//var type = $.payment.cardType(value);
var valid = $.payment.validateCardNumber( value );
return this.optional( element ) || valid;
}, wpforms_settings.val_creditcard );
// @todo validate CVC and expiration
}
// Validate method for file extensions.
$.validator.addMethod( 'extension', function( value, element, param ) {
param = 'string' === typeof param ? param.replace( /,/g, '|' ) : 'png|jpe?g|gif';
return this.optional( element ) || value.match( new RegExp( '\\.(' + param + ')$', 'i' ) );
}, wpforms_settings.val_fileextension );
// Validate method for file size.
$.validator.addMethod( 'maxsize', function( value, element, param ) {
var maxSize = param,
optionalValue = this.optional( element ),
i, len, file;
if ( optionalValue ) {
return optionalValue;
}
if ( element.files && element.files.length ) {
i = 0;
len = element.files.length;
for ( ; i < len; i++ ) {
file = element.files[i];
if ( file.size > maxSize ) {
return false;
}
}
}
return true;
}, wpforms_settings.val_filesize );
// Validate email addresses.
$.validator.methods.email = function( value, element ) {
// For comments, see wpforms_is_email() function.
const isEmail = function( value ) {
if ( value.length > 254 ) {
return false;
}
const valueArr = value.split( '@' );
if ( valueArr.length !== 2 ) {
return false;
}
const local = valueArr[ 0 ];
const domain = valueArr[ 1 ];
if ( local.length > 63 ) {
return false;
}
const domainArr = domain.split( '.' );
for ( const domainLabel of domainArr ) {
if ( domainLabel.length > 63 ) {
return false;
}
}
return true;
};
const isEmailTest = isEmail( value );
// Test email on the multiple @ and spaces:
// - no spaces allowed in the local and domain parts
// - only one @ after the local part allowed
var structureTest = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test( value );
// Test emails on the multiple dots:
// - start and finish with dot not allowed
// - two dots in a row not allowed
var dotsTest = /^(?!\.)(?!.*?\.\.).*[^.]$/.test( value );
return this.optional( element ) || ( structureTest && dotsTest && isEmailTest );
};
// Validate email by allowlist/blocklist.
$.validator.addMethod( 'restricted-email', function( value, element ) {
var validator = this,
$el = $( element ),
$field = $el.closest( '.wpforms-field' ),
$form = $el.closest( '.wpforms-form' ),
isValid = 'pending';
if ( ! $el.val().length ) {
return true;
}
this.startRequest( element );
$.post( {
url: wpforms_settings.ajaxurl,
type: 'post',
async: false,
data: {
'action': 'wpforms_restricted_email',
'form_id': $form.data( 'formid' ),
'field_id': $field.data( 'field-id' ),
'email': $el.val(),
},
dataType: 'json',
success: function( response ) {
var errors = {};
isValid = response.success && response.data;
if ( isValid ) {
validator.toHide = validator.errorsFor( element );
validator.showErrors();
} else {
errors[ element.name ] = wpforms_settings.val_email_restricted;
validator.showErrors( errors );
}
validator.stopRequest( element, isValid );
},
} );
return isValid;
}, wpforms_settings.val_email_restricted );
// Validate confirmations.
$.validator.addMethod( 'confirm', function( value, element, param ) {
const field = $( element ).closest( '.wpforms-field' );
return $( field.find( 'input' )[ 0 ] ).val() === $( field.find( 'input' )[ 1 ] ).val();
}, wpforms_settings.val_confirm );
// Validate required payments.
$.validator.addMethod( 'required-payment', function( value, element ) {
return app.amountSanitize( value ) > 0;
}, wpforms_settings.val_requiredpayment );
// Validate 12-hour time.
$.validator.addMethod( 'time12h', function( value, element ) {
return this.optional( element ) || /^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test( value );
}, wpforms_settings.val_time12h );
// Validate 24-hour time.
$.validator.addMethod( 'time24h', function( value, element ) {
return this.optional( element ) || /^(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(\ ?[AP]M)?$/i.test( value );
}, wpforms_settings.val_time24h );
// Validate time limits.
$.validator.addMethod( 'time-limit', function( value, element ) { // eslint-disable-line complexity
var $input = $( element ),
minTime = $input.data( 'min-time' ),
maxTime = $input.data( 'max-time' ),
isRequired = $input.prop( 'required' ),
isLimited = typeof minTime !== 'undefined';
if ( ! isLimited ) {
return true;
}
if ( ! isRequired && app.empty( value ) ) {
return true;
}
if ( app.compareTimesGreaterThan( maxTime, minTime ) ) {
return app.compareTimesGreaterThan( value, minTime ) && app.compareTimesGreaterThan( maxTime, value );
}
return ( app.compareTimesGreaterThan( value, minTime ) && app.compareTimesGreaterThan( value, maxTime ) ) ||
( app.compareTimesGreaterThan( minTime, value ) && app.compareTimesGreaterThan( maxTime, value ) );
}, function( params, element ) {
var $input = $( element ),
minTime = $input.data( 'min-time' ),
maxTime = $input.data( 'max-time' );
// Replace `00:**pm` with `12:**pm`.
minTime = minTime.replace( /^00:([0-9]{2})pm$/, '12:$1pm' );
maxTime = maxTime.replace( /^00:([0-9]{2})pm$/, '12:$1pm' );
// Properly format time: add space before AM/PM, make uppercase.
minTime = minTime.replace( /(am|pm)/g, ' $1' ).toUpperCase();
maxTime = maxTime.replace( /(am|pm)/g, ' $1' ).toUpperCase();
return wpforms_settings.val_time_limit
.replace( '{minTime}', minTime )
.replace( '{maxTime}', maxTime );
} );
// Validate checkbox choice limit.
$.validator.addMethod( 'check-limit', function( value, element ) {
var $ul = $( element ).closest( 'ul' ),
$checked = $ul.find( 'input[type="checkbox"]:checked' ),
choiceLimit = parseInt( $ul.attr( 'data-choice-limit' ) || 0, 10 );
if ( 0 === choiceLimit ) {
return true;
}
return $checked.length <= choiceLimit;
}, function( params, element ) {
var choiceLimit = parseInt( $( element ).closest( 'ul' ).attr( 'data-choice-limit' ) || 0, 10 );
return wpforms_settings.val_checklimit.replace( '{#}', choiceLimit );
} );
// Validate Smart Phone Field.
if ( typeof $.fn.intlTelInput !== 'undefined' ) {
$.validator.addMethod( 'smart-phone-field', function( value, element ) {
if ( value.match( /[^\d()\-+\s]/ ) ) {
return false;
}
return this.optional( element ) || $( element ).intlTelInput( 'isValidNumber' );
}, wpforms_settings.val_phone );
}
// Validate Inputmask completeness.
$.validator.addMethod( 'inputmask-incomplete', function( value, element ) {
if ( value.length === 0 || typeof $.fn.inputmask === 'undefined' ) {
return true;
}
return $( element ).inputmask( 'isComplete' );
}, wpforms_settings.val_inputmask_incomplete );
// Validate Payment item value on zero.
$.validator.addMethod( 'required-positive-number', function( value, element ) {
return app.amountSanitize( value ) > 0;
}, wpforms_settings.val_number_positive );
// Validate US Phone Field.
$.validator.addMethod( 'us-phone-field', function( value, element ) {
if ( value.match( /[^\d()\-+\s]/ ) ) {
return false;
}
return this.optional( element ) || value.replace( /[^\d]/g, '' ).length === 10;
}, wpforms_settings.val_phone );
// Validate International Phone Field.
$.validator.addMethod( 'int-phone-field', function( value, element ) {
if ( value.match( /[^\d()\-+\s]/ ) ) {
return false;
}
return this.optional( element ) || value.replace( /[^\d]/g, '' ).length > 0;
}, wpforms_settings.val_phone );
// Validate password strength.
$.validator.addMethod( 'password-strength', function( value, element ) {
var $el = $( element );
return $el.val().trim() === '' && ! $el.hasClass( 'wpforms-field-required' ) || // Don't check the password strength for empty fields which is set as not required.
WPFormsPasswordField.passwordStrength( value, element ) >= Number( $el.data( 'password-strength-level' ) );
}, wpforms_settings.val_password_strength );
// Finally load jQuery Validation library for our forms.
$( '.wpforms-validate' ).each( function() {
var form = $( this ),
formID = form.data( 'formid' ),
properties;
// TODO: cleanup this BC with wpforms_validate.
if ( typeof window['wpforms_' + formID] !== 'undefined' && window['wpforms_' + formID].hasOwnProperty( 'validate' ) ) {
properties = window['wpforms_' + formID].validate;
} else if ( typeof wpforms_validate !== 'undefined' ) {
properties = wpforms_validate;
} else {
properties = {
errorClass: 'wpforms-error',
validClass: 'wpforms-valid',
ignore: ':hidden:not(textarea.wp-editor-area), .wpforms-conditional-hide textarea.wp-editor-area',
errorPlacement: function( error, element ) {
if ( app.isLikertScaleField( element ) ) {
element.closest( 'table' ).hasClass( 'single-row' ) ?
element.closest( '.wpforms-field' ).append( error ) :
element.closest( 'tr' ).find( 'th' ).append( error );
} else if ( app.isWrappedField( element ) ) {
element.closest( '.wpforms-field' ).append( error );
} else if ( app.isDateTimeField( element ) ) {
app.dateTimeErrorPlacement( element, error );
} else if ( app.isFieldInColumn( element ) ) {
element.parent().append( error );
} else {
error.insertAfter( element );
}
},
highlight: function( element, errorClass, validClass ) {
var $element = $( element ),
$field = $element.closest( '.wpforms-field' ),
inputName = $element.attr( 'name' );
if ( 'radio' === $element.attr( 'type' ) || 'checkbox' === $element.attr( 'type' ) ) {
$field.find( 'input[name="' + inputName + '"]' ).addClass( errorClass ).removeClass( validClass );
} else {
$element.addClass( errorClass ).removeClass( validClass );
}
$field.addClass( 'wpforms-has-error' );
},
unhighlight: function( element, errorClass, validClass ) {
var $element = $( element ),
$field = $element.closest( '.wpforms-field' ),
inputName = $element.attr( 'name' );
if ( 'radio' === $element.attr( 'type' ) || 'checkbox' === $element.attr( 'type' ) ) {
$field.find( 'input[name="' + inputName + '"]' ).addClass( validClass ).removeClass( errorClass );
} else {
$element.addClass( validClass ).removeClass( errorClass );
}
$field.removeClass( 'wpforms-has-error' );
},
submitHandler: function( form ) {
/**
* Submit handler routine.
*
* @since 1.7.2
*
* @returns {boolean|void} False if form won't submit.
*/
var submitHandlerRoutine = function() {
var $form = $( form ),
$submit = $form.find( '.wpforms-submit' ),
altText = $submit.data( 'alt-text' ),
recaptchaID = $submit.get( 0 ).recaptchaID;
if ( $form.data( 'token' ) && 0 === $( '.wpforms-token', $form ).length ) {
$( '
' )
.val( $form.data( 'token' ) )
.appendTo( $form );
}
$submit.prop( 'disabled', true );
$form.find( '#wpforms-field_recaptcha-error' ).remove();
// Display processing text.
if ( altText ) {
$submit.text( altText );
}
if ( ! app.empty( recaptchaID ) || recaptchaID === 0 ) {
// Form contains invisible reCAPTCHA.
grecaptcha.execute( recaptchaID ).then( null, function( reason ) {
reason = ( null === reason ) ? '' : '
' + reason;
$form.find( '.wpforms-recaptcha-container' )
.append( '
' );
$submit.prop( 'disabled', false );
} );
return false;
}
// Remove name attributes if needed.
$( '.wpforms-input-temp-name' ).removeAttr( 'name' );
app.formSubmit( $form );
};
// In the case of active Google reCAPTCHA v3, first, we should call `grecaptcha.execute`.
// This is needed to obtain proper grecaptcha token before submitting the form.
if ( typeof wpformsRecaptchaV3Execute === 'function' ) {
return wpformsRecaptchaV3Execute( submitHandlerRoutine );
}
return submitHandlerRoutine();
},
invalidHandler: function( event, validator ) {
if ( typeof validator.errorList[0] !== 'undefined' ) {
app.scrollToError( $( validator.errorList[0].element ) );
}
},
onkeyup: function( element, event ) {
// This code is copied from JQuery Validate 'onkeyup' method with only one change: 'wpforms-novalidate-onkeyup' class check.
var excludedKeys = [ 16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225 ];
if ( $( element ).hasClass( 'wpforms-novalidate-onkeyup' ) ) {
return; // Disable onkeyup validation for some elements (e.g. remote calls).
}
if ( 9 === event.which && '' === this.elementValue( element ) || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {
return;
} else if ( element.name in this.submitted || element.name in this.invalid ) {
this.element( element );
}
},
onfocusout: function( element ) {
// This code is copied from JQuery Validate 'onfocusout' method with only one change: 'wpforms-novalidate-onkeyup' class check.
var validate = false;
if ( $( element ).hasClass( 'wpforms-novalidate-onkeyup' ) && ! element.value ) {
validate = true; // Empty value error handling for elements with onkeyup validation disabled.
}
if ( ! this.checkable( element ) && ( element.name in this.submitted || ! this.optional( element ) ) ) {
validate = true;
}
if ( validate ) {
this.element( element );
}
},
onclick: function( element ) {
var validate = false,
type = ( element || {} ).type,
$el = $( element );
if ( [ 'checkbox', 'radio' ].indexOf( type ) > -1 ) {
if ( $el.hasClass( 'wpforms-likert-scale-option' ) ) {
$el = $el.closest( 'tr' );
} else {
$el = $el.closest( '.wpforms-field' );
}
$el.find( 'label.wpforms-error' ).remove();
validate = true;
}
if ( validate ) {
this.element( element );
}
},
};
}
form.validate( properties );
} );
}
},
/**
* Is field inside column.
*
* @since 1.6.3
*
* @param {jQuery} element current form element.
*
* @returns {boolean} true/false.
*/
isFieldInColumn: function( element ) {
return element.parent().hasClass( 'wpforms-one-half' ) ||
element.parent().hasClass( 'wpforms-two-fifths' ) ||
element.parent().hasClass( 'wpforms-one-fifth' );
},
/**
* Is datetime field.
*
* @since 1.6.3
*
* @param {jQuery} element current form element.
*
* @returns {boolean} true/false.
*/
isDateTimeField: function( element ) {
return element.hasClass( 'wpforms-timepicker' ) ||
element.hasClass( 'wpforms-datepicker' ) ||
( element.is( 'select' ) && element.attr( 'class' ).match( /date-month|date-day|date-year/ ) );
},
/**
* Is field wrapped in some container.
*
* @since 1.6.3
*
* @param {jQuery} element current form element.
*
* @returns {boolean} true/false.
*/
isWrappedField: function( element ) { // eslint-disable-line complexity
return 'checkbox' === element.attr( 'type' ) ||
'radio' === element.attr( 'type' ) ||
'range' === element.attr( 'type' ) ||
'select' === element.is( 'select' ) ||
element.parent().hasClass( 'iti' ) ||
element.hasClass( 'wpforms-validation-group-member' ) ||
element.hasClass( 'choicesjs-select' ) ||
element.hasClass( 'wpforms-net-promoter-score-option' );
},
/**
* Is likert scale field.
*
* @since 1.6.3
*
* @param {jQuery} element current form element.
*
* @returns {boolean} true/false.
*/
isLikertScaleField: function( element ) {
return element.hasClass( 'wpforms-likert-scale-option' );
},
/**
* Print error message into date time fields.
*
* @since 1.6.3
*
* @param {jQuery} element current form element.
* @param {string} error Error message.
*/
dateTimeErrorPlacement: function( element, error ) {
var $wrapper = element.closest( '.wpforms-field-row-block, .wpforms-field-date-time' );
if ( $wrapper.length ) {
if ( ! $wrapper.find( 'label.wpforms-error' ).length ) {
$wrapper.append( error );
}
} else {
element.closest( '.wpforms-field' ).append( error );
}
},
/**
* Load jQuery Date Picker.
*
* @since 1.2.3
*/
loadDatePicker: function() {
// Only load if jQuery datepicker library exists.
if ( typeof $.fn.flatpickr !== 'undefined' ) {
$( '.wpforms-datepicker-wrap' ).each( function() {
var element = $( this ),
$input = element.find( 'input' ),
form = element.closest( '.wpforms-form' ),
formID = form.data( 'formid' ),
fieldID = element.closest( '.wpforms-field' ).data( 'field-id' ),
properties;
if ( typeof window['wpforms_' + formID + '_' + fieldID] !== 'undefined' && window['wpforms_' + formID + '_' + fieldID].hasOwnProperty( 'datepicker' ) ) {
properties = window['wpforms_' + formID + '_' + fieldID].datepicker;
} else if ( typeof window['wpforms_' + formID] !== 'undefined' && window['wpforms_' + formID].hasOwnProperty( 'datepicker' ) ) {
properties = window['wpforms_' + formID].datepicker;
} else if ( typeof wpforms_datepicker !== 'undefined' ) {
properties = wpforms_datepicker;
} else {
properties = {
disableMobile: true,
};
}
// Redefine locale only if user doesn't do that manually, and we have the locale.
if (
! properties.hasOwnProperty( 'locale' ) &&
typeof wpforms_settings !== 'undefined' &&
wpforms_settings.hasOwnProperty( 'locale' )
) {
properties.locale = wpforms_settings.locale;
}
properties.wrap = true;
properties.dateFormat = $input.data( 'date-format' );
if ( $input.data( 'disable-past-dates' ) === 1 ) {
properties.minDate = 'today';
}
var limitDays = $input.data( 'limit-days' ),
weekDays = [ 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat' ];
if ( limitDays && limitDays !== '' ) {
limitDays = limitDays.split( ',' );
properties.disable = [ function( date ) {
var limitDay;
for ( var i in limitDays ) {
limitDay = weekDays.indexOf( limitDays[ i ] );
if ( limitDay === date.getDay() ) {
return false;
}
}
return true;
} ];
}
// Toggle clear date icon.
properties.onChange = function( selectedDates, dateStr, instance ) {
var display = dateStr === '' ? 'none' : 'block';
element.find( '.wpforms-datepicker-clear' ).css( 'display', display );
};
element.flatpickr( properties );
} );
}
},
/**
* Load jQuery Time Picker.
*
* @since 1.2.3
*/
loadTimePicker: function() {
// Only load if jQuery timepicker library exists.
if ( typeof $.fn.timepicker !== 'undefined' ) {
$( '.wpforms-timepicker' ).each( function() {
var element = $( this ),
form = element.closest( '.wpforms-form' ),
formID = form.data( 'formid' ),
fieldID = element.closest( '.wpforms-field' ).data( 'field-id' ),
properties;
if (
typeof window['wpforms_' + formID + '_' + fieldID] !== 'undefined' &&
window['wpforms_' + formID + '_' + fieldID].hasOwnProperty( 'timepicker' )
) {
properties = window['wpforms_' + formID + '_' + fieldID].timepicker;
} else if (
typeof window['wpforms_' + formID] !== 'undefined' &&
window['wpforms_' + formID].hasOwnProperty( 'timepicker' )
) {
properties = window['wpforms_' + formID].timepicker;
} else if ( typeof wpforms_timepicker !== 'undefined' ) {
properties = wpforms_timepicker;
} else {
properties = {
scrollDefault: 'now',
forceRoundTime: true,
};
}
element.timepicker( properties );
} );
}
},
/**
* Load jQuery input masks.
*
* @since 1.2.3
*/
loadInputMask: function() {
// Only load if jQuery input mask library exists.
if ( typeof $.fn.inputmask === 'undefined' ) {
return;
}
// This setting has no effect when switching to the "RTL" mode.
$( '.wpforms-masked-input' ).inputmask( { rightAlign: false } );
},
/**
* Load Smart Phone field.
*
* @since 1.5.2
*/
loadSmartPhoneField: function() {
// Only load if library exists.
if ( typeof $.fn.intlTelInput === 'undefined' ) {
return;
}
var inputOptions = {};
// Determine the country by IP if no GDPR restrictions enabled.
if ( ! wpforms_settings.gdpr ) {
inputOptions.geoIpLookup = app.currentIpToCountry;
}
// Try to kick in an alternative solution if GDPR restrictions are enabled.
if ( wpforms_settings.gdpr ) {
var lang = this.getFirstBrowserLanguage(),
countryCode = lang.indexOf( '-' ) > -1 ? lang.split( '-' ).pop() : '';
}
// Make sure the library recognizes browser country code to avoid console error.
if ( countryCode ) {
var countryData = window.intlTelInputGlobals.getCountryData();
countryData = countryData.filter( function( country ) {
return country.iso2 === countryCode.toLowerCase();
} );
countryCode = countryData.length ? countryCode : '';
}
// Set default country.
inputOptions.initialCountry = wpforms_settings.gdpr && countryCode ? countryCode : 'auto';
$( '.wpforms-smart-phone-field' ).each( function( i, el ) {
var $el = $( el );
// Hidden input allows to include country code into submitted data.
inputOptions.hiddenInput = $el.closest( '.wpforms-field-phone' ).data( 'field-id' );
inputOptions.utilsScript = wpforms_settings.wpforms_plugin_url + 'assets/pro/lib/intl-tel-input/jquery.intl-tel-input-utils.min.js';
$el.intlTelInput( inputOptions );
// For proper validation, we should preserve the name attribute of the input field.
// But we need to modify original input name not to interfere with a hidden input.
$el.attr( 'name', 'wpf-temp-' + $el.attr( 'name' ) );
// Add special class to remove name attribute before submitting.
// So, only the hidden input value will be submitted.
$el.addClass( 'wpforms-input-temp-name' );
// Instantly update a hidden form input with a correct data.
// Previously "blur" only was used, which is broken in case Enter was used to submit the form.
$el.on( 'blur input', function() {
if ( $el.intlTelInput( 'isValidNumber' ) || ! app.empty( window.WPFormsEditEntry ) ) {
$el.siblings( 'input[type="hidden"]' ).val( $el.intlTelInput( 'getNumber' ) );
}
} );
} );
// Update hidden input of the `Smart` phone field to be sure the latest value will be submitted.
$( '.wpforms-form' ).on( 'wpformsBeforeFormSubmit', function() {
$( this ).find( '.wpforms-smart-phone-field' ).trigger( 'input' );
} );
},
/**
* Payments: Do various payment-related tasks on load.
*
* @since 1.2.6
*/
loadPayments: function() {
// Update Total field(s) with the latest calculation.
$( '.wpforms-payment-total' ).each( function( index, el ) {
app.amountTotal( this );
} );
// Credit card validation.
if ( typeof $.fn.payment !== 'undefined' ) {
$( '.wpforms-field-credit-card-cardnumber' ).payment( 'formatCardNumber' );
$( '.wpforms-field-credit-card-cardcvc' ).payment( 'formatCardCVC' );
}
},
/**
* Load mailcheck.
*
* @since 1.5.3
*/
loadMailcheck: function() {
// Skip loading if `wpforms_mailcheck_enabled` filter return false.
if ( ! wpforms_settings.mailcheck_enabled ) {
return;
}
// Only load if library exists.
if ( typeof $.fn.mailcheck === 'undefined' ) {
return;
}
if ( wpforms_settings.mailcheck_domains.length > 0 ) {
Mailcheck.defaultDomains = Mailcheck.defaultDomains.concat( wpforms_settings.mailcheck_domains );
}
if ( wpforms_settings.mailcheck_toplevel_domains.length > 0 ) {
Mailcheck.defaultTopLevelDomains = Mailcheck.defaultTopLevelDomains.concat( wpforms_settings.mailcheck_toplevel_domains );
}
// Mailcheck suggestion.
$( document ).on( 'blur', '.wpforms-field-email input', function() {
var $input = $( this ),
id = $input.attr( 'id' );
$input.mailcheck( {
suggested: function( $el, suggestion ) {
if ( suggestion.address.match( /^xn--/ ) ) {
suggestion.full = punycode.toUnicode( decodeURI( suggestion.full ) );
var parts = suggestion.full.split( '@' );
suggestion.address = parts[0];
suggestion.domain = parts[1];
}
if ( suggestion.domain.match( /^xn--/ ) ) {
suggestion.domain = punycode.toUnicode( decodeURI( suggestion.domain ) );
}
var address = decodeURI( suggestion.address ).replaceAll( /[<>'"()/\\|:;=@%&\s]/ig, '' ).substr( 0, 64 ),
domain = decodeURI( suggestion.domain ).replaceAll( /[<>'"()/\\|:;=@%&+_\s]/ig, '' );
suggestion = '
' + address + '@' + domain + '';
suggestion = wpforms_settings.val_email_suggestion.replace( '{suggestion}', suggestion );
$el.closest( '.wpforms-field' ).find( '#' + id + '_suggestion' ).remove();
$el.parent().append( '
' );
},
empty: function() {
$( '#' + id + '_suggestion' ).remove();
},
} );
} );
// Apply Mailcheck suggestion.
$( document ).on( 'click', '.wpforms-field-email .mailcheck-suggestion', function( e ) {
var $suggestion = $( this ),
$field = $suggestion.closest( '.wpforms-field' ),
id = $suggestion.data( 'id' );
e.preventDefault();
$field.find( '#' + id ).val( $suggestion.text() );
$suggestion.parent().remove();
} );
},
/**
* Load Choices.js library for all Modern style Dropdown fields (