£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyʦ•ꎅȮFÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~芩ÊǍí`ÔÑ©ú뙵'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶êםӼ㞪éUWŸÈË%DÒÕ¬ï‘]/Åcx ‰ï2ß]ä6G[]S£Ôϯrs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ ¯¹ægƒÛowЍø^d™ý½ßB7áyMä9ÜÖUã !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // the semi-colon before function invocation is a safety net against concatenated // scripts and/or other plugins which may not be closed properly. ;// noinspection JSUnusedLocalSymbols (function ($, window, document, undefined) { "use strict"; // undefined is used here as the undefined global variable in ECMAScript 3 is // mutable (ie. it can be changed by someone else). undefined isn't really being // passed in so we can ensure the value of it is truly undefined. In ES5, undefined // can no longer be modified. // window and document are passed through as local variables rather than global // as this (slightly) quickens the resolution process and can be more efficiently // minified (especially when both are regularly referenced in your plugin). // Create the defaults once var pluginName = "forminatorFront", defaults = { form_type: 'custom-form', rules: {}, messages: {}, conditions: {}, inline_validation: false, print_value: false, chart_design: 'bar', chart_options: {}, forminator_fields: [], general_messages: { calculation_error: 'Failed to calculate field.', payment_require_ssl_error: 'SSL required to submit this form, please check your URL.', payment_require_amount_error: 'PayPal amount must be greater than 0.', form_has_error: 'Please correct the errors before submission.' }, payment_require_ssl : false, }; // The actual plugin constructor function ForminatorFront(element, options) { this.element = element; this.$el = $(this.element); this.forminator_selector = '#' + $(this.element).attr('id') + '[data-forminator-render="' + $(this.element).data('forminator-render') + '"]'; this.forminator_loader_selector = 'div[data-forminator-render="' + $(this.element).data('forminator-render') + '"]' + '[data-form="' + $(this.element).attr('id') + '"]'; // jQuery has an extend method which merges the contents of two or // more objects, storing the result in the first object. The first object // is generally empty as we don't want to alter the default options for // future instances of the plugin this.settings = $.extend({}, defaults, options); // special treatment for rules, messages, and conditions if (typeof this.settings.messages !== 'undefined') { this.settings.messages = this.maybeParseStringToJson(this.settings.messages, 'object'); } if (typeof this.settings.rules !== 'undefined') { this.settings.rules = this.maybeParseStringToJson(this.settings.rules, 'object'); } if (typeof this.settings.calendar !== 'undefined') { this.settings.calendar = this.maybeParseStringToJson(this.settings.calendar, 'array'); } this._defaults = defaults; this._name = pluginName; this.form_id = 0; this.template_type = ''; this.init(); this.handleDiviPopup(); } // Avoid Plugin.prototype conflicts $.extend(ForminatorFront.prototype, { init: function () { var self = this; if (this.$el.find('input[name="form_id"]').length > 0) { this.form_id = this.$el.find('input[name="form_id"]').val(); } if (this.$el.find('input[name="form_type"]').length > 0) { this.template_type = this.$el.find('input[name="form_type"]').val(); } $(this.forminator_loader_selector).remove(); // If form from hustle popup, do not show if (this.$el.closest('.wph-modal').length === 0) { this.$el.show(); } // Show form when popup trigger with click $(document).on("hustle:module:displayed", function (e, data) { var $modal = $('.wph-modal-active'); $modal.find('form').css('display', ''); }); self.reint_intlTelInput(); // Show form when popup trigger setTimeout(function () { var $modal = $('.wph-modal-active'); $modal.find('form').css('display', ''); }, 10); //selective activation based on type of form switch (this.settings.form_type) { case 'custom-form': $( this.element ).each( function() { self.init_custom_form( this ); }); this.$el.on( 'forminator-clone-group', function ( event ) { self.init_custom_form( event.target ); } ); break; case 'poll': this.init_poll_form(); break; case 'quiz': this.init_quiz_form(); break; } //init submit var submitOptions = { form_type: self.settings.form_type, forminator_selector: self.forminator_selector, chart_design: self.settings.chart_design, chart_options: self.settings.chart_options, has_quiz_loader: self.settings.has_quiz_loader, has_loader: self.settings.has_loader, loader_label: self.settings.loader_label, resetEnabled: self.settings.is_reset_enabled, inline_validation: self.settings.inline_validation, }; if( 'leads' === this.template_type || 'quiz' === this.settings.form_type ) { submitOptions.form_placement = self.settings.form_placement; submitOptions.hasLeads = self.settings.hasLeads; submitOptions.leads_id = self.settings.leads_id; submitOptions.quiz_id = self.settings.quiz_id; submitOptions.skip_form = self.settings.skip_form; } $(this.element).forminatorFrontSubmit( submitOptions ); // TODO: confirm usage on form type // Handle field activation classes this.activate_field(); // Handle special classes for material design // this.material_field(); // Init small form for all type of form this.small_form(); // trigger form added in the DOM $(document).trigger('forminator:form:added') }, init_custom_form: function ( form_selector ) { var self = this, $saveDraft = this.$el.find( '.forminator-save-draft-link' ), saveDraftExists = 0 !== $saveDraft.length ? true : false, draftTimer ; //initiate validator this.init_intlTelInput_validation( form_selector ); if (this.settings.inline_validation) { $( form_selector ).forminatorFrontValidate({ rules: self.settings.rules, messages: self.settings.messages }); } // initiate calculator $( form_selector ).forminatorFrontCalculate({ forminatorFields: self.settings.forminator_fields, generalMessages: self.settings.general_messages, memoizeTime: self.settings.calcs_memoize_time || 300, }); // initiate merge tags $( form_selector ).forminatorFrontMergeTags({ forminatorFields: self.settings.forminator_fields, print_value: self.settings.print_value, }); //initiate pagination this.init_pagination( form_selector ); if( self.settings.has_stripe ) { var stripe_payment = $(this.element).find('.forminator-stripe-element[data-type="stripe-ocs"]').first(); if ( 1 > stripe_payment.length ) { stripe_payment = $(this.element).find('.forminator-stripe-element').first(); } if ( $( self.element ).is( ':visible' ) ) { this.renderStripe( self, stripe_payment ); } // Show Stripe on modal display. $( document ).on( "forminator:form:added", function () { self.renderStripe( self, stripe_payment ); }); } if( self.settings.has_paypal // Fix for Divi popup. && ( ! $( self.element ).closest( '.et_pb_section' ).length || $( self.element ).is( ':visible' ) ) ) { $(this.element).forminatorFrontPayPal({ type: 'paypal', paymentEl: this.settings.paypal_config, paymentRequireSsl: self.settings.payment_require_ssl, generalMessages: self.settings.general_messages, has_loader: self.settings.has_loader, loader_label: self.settings.loader_label, }); } //initiate condition $( form_selector ).forminatorFrontCondition(this.settings.conditions, this.settings.calendar); //initiate forminator ui scripts this.init_fui( form_selector ); //initiate datepicker $( form_selector ).find('.forminator-datepicker').forminatorFrontDatePicker(this.settings.calendar); // Handle responsive captcha this.responsive_captcha( form_selector ); // Handle field counter this.field_counter( form_selector ); // Handle number input this.field_number( form_selector ); // Handle time fields this.field_time(); // Handle upload field change $( form_selector ).find('.forminator-multi-upload').forminatorFrontMultiFile( this.$el ); this.upload_field( form_selector ); this.init_login_2FA(); self.maybeRemoveDuplicateFields( form_selector ); self.checkComplianzBlocker(); // Handle function on resize $(window).on('resize', function () { self.responsive_captcha( form_selector ); }); // Handle function on load $( window ).on( 'load', function () { // Repeat the function here, just in case our scripts gets loaded late self.maybeRemoveDuplicateFields( form_selector ); }); // We have to declare initialData here, after everything has been set initially, to prevent triggering change event. var initialData = saveDraftExists ? this.$el.serializeArray() : ''; this.$el.find( ".forminator-field input, .forminator-row input[type=hidden], .forminator-field select, .forminator-field textarea, .forminator-field-signature").on( 'change input', function (e) { if ( saveDraftExists && $saveDraft.hasClass( 'disabled' ) ) { clearTimeout( draftTimer ); draftTimer = setTimeout( function() { self.maybe_enable_save_draft( $saveDraft, initialData ); }, 500 ); } }); if( 'undefined' !== typeof self.settings.hasLeads ) { if( 'beginning' === self.settings.form_placement ) { $('#forminator-module-' + this.settings.quiz_id ).css({ 'height': 0, 'opacity': 0, 'overflow': 'hidden', 'visibility': 'hidden', 'pointer-events': 'none', 'margin': 0, 'padding': 0, 'border': 0 }); } if( 'end' === self.settings.form_placement ) { $( form_selector ).css({ 'height': 0, 'opacity': 0, 'overflow': 'hidden', 'visibility': 'hidden', 'pointer-events': 'none', 'margin': 0, 'padding': 0, 'border': 0 }); } } }, init_poll_form: function() { var self = this, $fieldset = this.$el.find( 'fieldset' ), $selection = this.$el.find( '.forminator-radio input' ), $input = this.$el.find( '.forminator-input' ), $field = $input.closest( '.forminator-field' ) ; // Load input states FUI.inputStates( $input ); // Show input when option has been selected $selection.on( 'click', function() { // Reset $field.addClass( 'forminator-hidden' ); $field.attr( 'aria-hidden', 'true' ); $input.removeAttr( 'tabindex' ); $input.attr( 'name', '' ); var checked = this.checked, $id = $( this ).attr( 'id' ), $name = $( this ).attr( 'name' ) ; // Once an option has been chosen, remove error class. $fieldset.removeClass( 'forminator-has_error' ); if ( self.$el.find( '.forminator-input#' + $id + '-extra' ).length ) { var $extra = self.$el.find( '.forminator-input#' + $id + '-extra' ), $extraField = $extra.closest( '.forminator-field' ) ; if ( checked ) { $extra.attr( 'name', $name + '-extra' ); $extraField.removeClass( 'forminator-hidden' ); $extraField.removeAttr( 'aria-hidden' ); $extra.attr( 'tabindex', '-1' ); $extra.focus(); } else { $extraField.addClass( 'forminator-hidden' ); $extraField.attr( 'aria-hidden', 'true' ); $extra.removeAttr( 'tabindex' ); } } return true; }); // Disable options if ( this.$el.hasClass( 'forminator-poll-disabled' ) ) { this.$el.find( '.forminator-radio' ).each( function() { $( this ).addClass( 'forminator-disabled' ); $( this ).find( 'input' ).attr( 'disabled', true ); }); } }, init_quiz_form: function () { var self = this, lead_placement = 'undefined' !== typeof self.settings.form_placement ? self.settings.form_placement : '', quiz_id = 'undefined' !== typeof self.settings.quiz_id ? self.settings.quiz_id : 0; this.$el.find('.forminator-button:not(.forminator-quiz-start)').each(function () { $(this).prop("disabled", true); }); this.$el.find('.forminator-answer input').each(function () { $(this).attr('checked', false); }); this.$el.find('.forminator-result--info button').on('click', function () { location.reload(); }); $('#forminator-quiz-leads-' + quiz_id + ' .forminator-quiz-intro .forminator-quiz-start').on('click', function(e){ e.preventDefault(); $(this).closest( '.forminator-quiz-intro').hide(); self.$el.prepend('') .find('.forminator-quiz-start').trigger('click').remove(); }); this.$el.on('click', '.forminator-quiz-start', function (e) { e.preventDefault(); self.$el.find('.forminator-quiz-intro').hide(); self.$el.find('.forminator-pagination').removeClass('forminator-hidden'); //initiate pagination var args = { totalSteps: self.$el.find('.forminator-pagination').length - 1, //subtract the last step with result step: 0, quiz: true }; if ( self.settings.text_next ) { args.next_button = self.settings.text_next; } if ( self.settings.text_prev ) { args.prev_button = self.settings.text_prev; } if ( self.settings.submit_class ) { args.submitButtonClass = self.settings.submit_class; } $(self.element).forminatorFrontPagination(args); }); if( 'end' !== lead_placement ) { this.$el.find('.forminator-submit-rightaway').on("click", function () { self.$el.submit(); $(this).closest('.forminator-question').find('.forminator-submit-rightaway').addClass('forminator-has-been-disabled').attr('disabled', 'disabled'); }); } if( self.settings.hasLeads ) { if( 'beginning' === lead_placement ) { self.$el.css({ 'height': 0, 'opacity': 0, 'overflow': 'hidden', 'visibility': 'hidden', 'pointer-events': 'none', 'margin': 0, 'padding': 0, 'border': 0 }); } if( 'end' === lead_placement ) { self.$el.closest('div').find('#forminator-module-' + self.settings.leads_id ).css({ 'height': 0, 'opacity': 0, 'overflow': 'hidden', 'visibility': 'hidden', 'pointer-events': 'none', 'margin': 0, 'padding': 0, 'border': 0 }); $('#forminator-quiz-leads-' + quiz_id + ' .forminator-lead-form-skip' ).hide(); } } this.$el.on('click', '.forminator-social--icon a', function (e) { e.preventDefault(); var social = $(this).data('social'), url = $(this).closest('.forminator-social--icons').data('url'), message = $(this).closest('.forminator-social--icons').data('message'), message = encodeURIComponent(message), social_shares = { 'facebook': 'https://www.facebook.com/sharer/sharer.php?u=' + url + '"e=' + message, 'twitter': 'https://twitter.com/intent/tweet?&url=' + url + '&text=' + message, 'google': 'https://plus.google.com/share?url=' + url, 'linkedin': 'https://www.linkedin.com/shareArticle?mini=true&url=' + url + '&title=' + message }; if (social_shares[social] !== undefined) { var newwindow = window.open(social_shares[social], social, 'height=' + $(window).height() + ',width=' + $(window).width()); if (window.focus) { newwindow.focus(); } return false; } }); this.$el.on('change', '.forminator-answer input', function (e) { var paginated = !!$( this ).closest('.forminator-pagination').length, parent = paginated ? $( this ).closest('.forminator-pagination') : self.$el, count = parent.find('.forminator-answer input:checked').length, amount_answers = parent.find('.forminator-question').length, parentQuestion = $( this ).closest( '.forminator-question' ), isMultiChoice = parentQuestion.data( 'multichoice' ) ; self.$el.find('.forminator-button:not(.forminator-button-back)').each(function () { var disabled = count < amount_answers; $( this ).prop('disabled', disabled); if ( paginated ) { if ( disabled ) { $( this ).addClass('forminator-disabled'); } else { $( this ).removeClass('forminator-disabled'); } } }); // If multichoice is false, uncheck other options if( this.checked && false === isMultiChoice ) { parentQuestion .find( '.forminator-answer' ) .not( $( this ).parent( '.forminator-answer' ) ) .each( function( i, el ){ $( el ).find( '> input' ).prop( 'checked', false ); }); } }); }, small_form: function () { var form = $( this.element ), formWidth = form.width() ; if ( 783 < Math.max( document.documentElement.clientWidth, window.innerWidth || 0 ) ) { if ( form.hasClass( 'forminator-size--small' ) ) { if ( 480 < formWidth ) { form.removeClass( 'forminator-size--small' ); } } else { var hasHustle = form.closest('.hustle-content'); if ( form.is(":visible") && 480 >= formWidth && ! hasHustle.length ) { form.addClass( 'forminator-size--small' ); } } } }, init_intlTelInput_validation: function ( form_selector ) { var form = $( form_selector ), is_material = form.is('.forminator-design--material'), fields = form.find('.forminator-field--phone'); if ( ! form.is('form') ) { // For cloning phone fields inside group fields. is_material = form.closest('form').is('.forminator-design--material'); } fields.each(function () { // Initialize intlTelInput plugin on each field with "format check" enabled and // set to check either "international" or "standard" phones. var self = this, is_national_phone = $(this).data('national_mode'), country = $(this).data('country'), validation = $(this).data('validation'), iti = window.intlTelInput.getInstance(self); if ('undefined' !== typeof (is_national_phone)) { if (is_material) { $(this).unwrap('.forminator-input--wrap'); } // If it's already intialised then first destroy it and then reinit. if ( iti ) { iti.destroy(); } var args = { nationalMode: ('enabled' === is_national_phone) ? true : false, initialCountry: 'undefined' !== typeof ( country ) ? country : 'us', validationNumberTypes: null, loadUtils: () => import(window.ForminatorFront.cform.intlTelInput_utils_script), strictMode: true, }; if ( 'undefined' !== typeof ( validation ) && 'standard' === validation ) { args.allowDropdown = false; } // stop from removing country code. if ( 'undefined' !== typeof ( validation ) && 'international' === validation ) { args.autoHideDialCode = false; args.separateDialCode = true; } var iti = window.intlTelInput(self, args); if ( 'undefined' !== typeof ( validation ) && 'standard' === validation ) { // Reset country to default if changed and invalid previously. $( this ).on( 'blur', function() { if ( '' === $( self ).val() ) { iti.setCountry( country ); form.validate().element( $( self ) ); } }); } if ( ! is_material ) { $(this).closest( '.forminator-field' ).find( 'div.iti' ).addClass( 'forminator-phone' ); } else { $(this).closest( '.forminator-field' ).find( 'div.iti' ).addClass( 'forminator-input-with-phone' ); if ( $(this).closest( '.forminator-field' ).find( 'div.iti' ).hasClass( 'iti--allow-dropdown' ) ) { $(this).closest( '.forminator-field' ).find( '.forminator-label' ).addClass( 'iti--allow-dropdown' ); } } // intlTelInput plugin adds a markup that's not compatible with 'material' theme when 'allowDropdown' is true (default). // If we're going to allow users to disable the dropdown, this should be adjusted accordingly. if (is_material) { //$(this).closest('.intl-tel-input.allow-dropdown').addClass('forminator-phone-intl').removeClass('intl-tel-input'); //$(this).wrap('
'); // Wrap Element if (!$(this).parent().hasClass('forminator-input--wrap')) { $(this).wrap('
'); } } } }); }, reint_intlTelInput: function () { var self = this; self.$el.on( 'after:forminator:form:submit', function (e, data) { self.init_intlTelInput_validation( self.forminator_selector ); } ); }, init_fui: function ( form_selector ) { var form = $( form_selector ), input = form.find( '.forminator-input' ), textarea = form.find( '.forminator-textarea' ), select2 = form.find( '.forminator-select2' ), multiselect = form.find( '.forminator-multiselect' ), stripe = form.find( '.forminator-stripe-element' ), slider = form.find( '.forminator-slider' ), rating = form.find( '.forminator-rating' ), checkbox = form.find( '.forminator-checkbox' ), radio = form.find( '.forminator-radio' ) ; var isDefault = ( form.attr( 'data-design' ) === 'default' ), isBold = ( form.attr( 'data-design' ) === 'bold' ), isFlat = ( form.attr( 'data-design' ) === 'flat' ), isMaterial = ( form.attr( 'data-design' ) === 'material' ) ; if ( input.length ) { input.each( function() { FUI.inputStates( this ); }); } if ( checkbox.length ) { checkbox.each( function() { FUI.checkboxStates( this ); }); } if ( radio.length ) { radio.each( function() { FUI.radioStates( this ); }); } if ( textarea.length ) { textarea.each( function() { FUI.textareaStates( this ); }); } if ( 'function' === typeof FUI.select2 ) { FUI.select2( select2.length ); } if ( 'function' === typeof FUI.slider ) { FUI.slider(); } if ( multiselect.length ) { FUI.multiSelectStates( multiselect ); } if ( rating.length && 'function' === typeof FUI.rating ) { FUI.rating( rating ); } if ( form.hasClass( 'forminator-design--material' ) ) { if ( input.length ) { input.each( function() { FUI.inputMaterial( this ); }); } if ( textarea.length ) { textarea.each( function() { FUI.textareaMaterial( this ); }); } if ( stripe.length ) { stripe.each( function() { if ($(this).hasClass('forminator-stripe-payment-element')) { return; // Skip to the next iteration } var field = $(this).closest('.forminator-field'); var label = field.find('.forminator-label'); if (label.length) { field.addClass('forminator-stripe-floating'); // Add floating class label.addClass('forminator-floating--input'); } }); } } }, responsive_captcha: function ( form_selector ) { $( form_selector ).find('.forminator-g-recaptcha').each(function () { var badge = $(this).data('badge'); // eslint-disable-line if ($(this).is(':visible') && 'inline' === badge ) { var width = $(this).parent().width(), scale = 1; if (width < 302) { scale = width / 302; } $(this).css('transform', 'scale(' + scale + ')'); $(this).css('-webkit-transform', 'scale(' + scale + ')'); $(this).css('transform-origin', '0 0'); $(this).css('-webkit-transform-origin', '0 0'); } }); }, init_pagination: function ( form_selector ) { var self = this, num_pages = $( form_selector ).find(".forminator-pagination").length, hash = window.location.hash, hashStep = false, step = 0; if (num_pages > 0) { //find from hash if (typeof hash !== "undefined" && hash.indexOf('step-') >= 0) { hashStep = true; step = hash.substr(6, 8); } $(this.element).forminatorFrontPagination({ totalSteps: num_pages, hashStep: hashStep, step: step, inline_validation: self.settings.inline_validation, submitButtonClass: self.settings.submit_button_class }); } }, activate_field: function () { var form = $( this.element ); var input = form.find( '.forminator-input' ); var textarea = form.find( '.forminator-textarea' ); function classFilled( el ) { var element = $( el ); var elementValue = element.val().trim(); var elementField = element.closest( '.forminator-field' ); var elementAnswer = element.closest( '.forminator-poll--answer' ); var filledClass = 'forminator-is_filled'; if ( '' !== elementValue ) { elementField.addClass( filledClass ); elementAnswer.addClass( filledClass ); } else { elementField.removeClass( filledClass ); elementAnswer.removeClass( filledClass ); } element.change( function( e ) { if ( '' !== elementValue ) { elementField.addClass( filledClass ); elementAnswer.addClass( filledClass ); } else { elementField.removeClass( filledClass ); elementAnswer.removeClass( filledClass ); } e.stopPropagation(); }); } function classHover( el ) { var element = $( el ); var elementField = element.closest( '.forminator-field' ); var elementAnswer = element.closest( '.forminator-poll--answer' ); var hoverClass = 'forminator-is_hover'; element.on( 'mouseover', function( e ) { elementField.addClass( hoverClass ); elementAnswer.addClass( hoverClass ); e.stopPropagation(); }).on( 'mouseout', function( e ) { elementField.removeClass( hoverClass ); elementAnswer.removeClass( hoverClass ); e.stopPropagation(); }); } function classActive( el ) { var element = $( el ); var elementField = element.closest( '.forminator-field' ); var elementAnswer = element.closest( '.forminator-poll--answer' ); var activeClass = 'forminator-is_active'; element.focus( function( e ) { elementField.addClass( activeClass ); elementAnswer.addClass( activeClass ); e.stopPropagation(); }).blur( function( e ) { elementField.removeClass( activeClass ); elementAnswer.removeClass( activeClass ); e.stopPropagation(); }); } function classError( el ) { var element = $( el ); var elementValue = element.val().trim(); var elementField = element.closest( '.forminator-field' ); var elementTime = element.attr( 'data-field' ); var timePicker = element.closest( '.forminator-timepicker' ); var timeColumn = timePicker.parent(); var errorField = elementField.find( '.forminator-error-message' ); var errorClass = 'forminator-has_error'; element.on( 'load change keyup keydown', function( e ) { if ( 'undefined' !== typeof elementTime && false !== elementTime ) { if ( 'hours' === element.data( 'field' ) ) { var hoursError = timeColumn.find( '.forminator-error-message[data-error-field="hours"]' ); if ( '' !== elementValue && 0 !== hoursError.length ) { hoursError.remove(); } } if ( 'minutes' === element.data( 'field' ) ) { var minutesError = timeColumn.find( '.forminator-error-message[data-error-field="minutes"]' ); if ( '' !== elementValue && 0 !== minutesError.length ) { minutesError.remove(); } } } else { if ( '' !== elementValue && errorField.text() ) { errorField.remove(); elementField.removeClass( errorClass ); } } e.stopPropagation(); }); } if ( input.length ) { input.each( function() { //classFilled( this ); //classHover( this ); //classActive( this ); classError( this ); }); } if ( textarea.length ) { textarea.each( function() { //classFilled( this ); //classHover( this ); //classActive( this ); classError( this ); }); } form.find('select.forminator-select2 + .forminator-select').each(function () { var $select = $(this); // Set field active class on hover $select.on('mouseover', function (e) { e.stopPropagation(); $(this).closest('.forminator-field').addClass('forminator-is_hover'); }).on('mouseout', function (e) { e.stopPropagation(); $(this).closest('.forminator-field').removeClass('forminator-is_hover'); }); // Set field active class on focus $select.on('click', function (e) { e.stopPropagation(); checkSelectActive(); if ($select.hasClass('select2-container--open')) { $(this).closest('.forminator-field').addClass('forminator-is_active'); } else { $(this).closest('.forminator-field').removeClass('forminator-is_active'); } }); }); function checkSelectActive() { if (form.find('.select2-container').hasClass('select2-container--open')) { setTimeout(checkSelectActive, 300); } else { form.find('.select2-container').closest('.forminator-field').removeClass('forminator-is_active'); } } }, field_counter: function ( form_selector ) { var form = $( form_selector ), submit_button = form.find('.forminator-button-submit'); form.find('.forminator-input, .forminator-input input, .forminator-textarea').each(function () { var $input = $(this), numwords = 0, count = 0; $input.on('keydown', function (e) { if ( ! $(this).hasClass('forminator-textarea') && e.keyCode === 13 ) { e.preventDefault(); if ( submit_button.is(":visible") ) { submit_button.trigger('click'); } return false; } }); $input.on('change keyup keydown', function (e) { e.stopPropagation(); var $field = $(this).closest('.forminator-col'), $limit = $field.find('.forminator-description span') ; if ($limit.length) { var textLimit = parseInt( $limit.data('limit') ); if (textLimit) { if ($limit.data('type') !== "words") { if ( $limit.data( 'editor' ) === 1 ) { const content = $( this ) .val() .replace( /<[^>]*>/g, '' ), content_text = $( '