( function( $ ) { UAELRegistrationForm = { /** * Check Password Strength * */ _checkPasswordStrength: function( $scope ) { var strength; var password = $scope.find( 'input[type=password]' ).val(); var pass_wrap = $scope.find( '.uael-pass-wrapper' ); var pass_notice = $scope.find( '.uael-pass-notice' ); pass_wrap.css( 'display', 'block' ); if( uaelRegistration.wp_version ){ strength = wp.passwordStrength.meter( password, wp.passwordStrength.userInputDisallowedList(), password ); } else { strength = wp.passwordStrength.meter( password, wp.passwordStrength.userInputBlacklist(), password ); } switch ( strength ) { case -1: // pass_notice.html( pwsL10n.unknown ).css( 'color', '#cfcfcf' ); break; case 2: pass_notice.html( pwsL10n.bad ).css( 'color', '#e07757' ); break; case 3: pass_notice.html( pwsL10n.good ).css( 'color', '#f0ad4e' ); break; case 4: pass_notice.html( pwsL10n.strong ).css( 'color', '#5cb85c' ); break; case 5: pass_notice.html( pwsL10n.mismatch ).css( 'color', '#f0ad4e' ); break; default: pass_notice.html( pwsL10n['short'] ).css( 'color', '#d9534f' ); } }, /** * Display error messages * */ _printErrorMessages: function( $scope, form_field, message ) { var $is_error = form_field.next().hasClass( 'uael-register-field-message' ); if( $is_error ) { return; } else { form_field.after( '' + message + '' ); } }, /** * Submit form action * */ _submitForm: function( $this, widget_wrapper, $scope ) { var ajaxurl = uaelRegistration.ajax_url; var $password = ''; var $invalid_field = false; var user_email_regex = /\S+@\S+\.\S+/; var is_password_exists = false; var form_wrap = $scope.find( '.uael-registration-form' ); var redirect_url = form_wrap.attr( 'data-redirect-url' ); var button_text = $this.find( '.uael-registration-submit' ); var user_pass = form_wrap.find( '.form-field-password' ); var form_fields = form_wrap.find( '.uael-input-fields' ); var is_secure = true; var user_data = {}; var recaptcha_field = $scope.find( '.uael-g-recaptcha-field' ); var acceptance = $scope.find( 'input[name=uae-terms-checkbox]' ); var acceptance_field = $scope.find( '.elementor-field-subgroup' ); var acceptance_wrap = $scope.find( '.acceptance-field' ); if( acceptance_wrap.length > 0 ) { if( !acceptance.is( ':checked' ) ) { $invalid_field = true; acceptance_field.next().show(); } $scope.find( '.elementor-acceptance-field' ).on( 'click', function() { $scope.find( '.uael-register-acceptance-message' ).hide(); }); } user_data['page_id'] = widget_wrapper.data( 'page-id' ); user_data['widget_id'] = $scope.data( 'id' ); if( recaptcha_field.length > 0 ) { user_data['is_recaptcha_enabled'] = 'yes'; user_data['recaptcha_token'] = form_wrap.find( '.uael-g-recaptcha-response' ).val(); } form_fields.each( function( item ) { var $this = $( this ); var form_field = $this.find( '.elementor-field' ); var field_type = form_field.attr( 'name' ); var is_required = $this.hasClass( 'elementor-field-required' ); var field_text = form_field.val(); if ( form_field.length > 0 && '' !== field_text ) { if ( 'email' === field_type ) { field_text = $.trim( field_text ); if ( user_email_regex.test( field_text ) ) { form_field.siblings( '.uael-register-field-message' ).hide(); } else { $invalid_field = true; UAELRegistrationForm._printErrorMessages( $scope, form_field, uaelRegistration.invalid_mail ); } } if( 'password' === is_password_exists ) { is_password_exists = true; } if ( 'confirm_pass' === field_type ) { if ( user_pass.val() !== form_field.val() ) { // var error_message = form_field.next().hasClass( 'uael-register-field-message' ); $invalid_field = true; UAELRegistrationForm._printErrorMessages( $scope, form_field, uaelRegistration.pass_unmatch ); } } else if( '' !== field_text && '' !== field_type ) { user_data[field_type] = field_text; } } else if ( form_field.length > 0 && is_required ) { $invalid_field = true; UAELRegistrationForm._printErrorMessages( $scope, form_field, uaelRegistration.required ); } if( form_field.hasClass( 'uael-regform-set-field' ) && '' !== field_text ) { is_secure = false; $scope.find( '.uael-registration-message' ).addClass( 'error' ).text( "Invalid Form!" ); } user_data[field_type] = field_text; }); if( is_secure ) { user_data['auto_login'] = form_wrap.attr( 'data-auto_login' ); user_data['send_email'] = form_wrap.attr( 'data-send_email' ); if( false == is_password_exists ) { user_data['send_email_password'] = 'yes'; } else { user_data['send_email_password'] = 'no'; } var nonce = $scope.find('input#uael-reg-form-nonce').val(); $scope.find( '.uael-registration-message' ).text( "" ).removeClass( 'success error' ); if ( ! $invalid_field ) { $.post( ajaxurl, { action: 'uael_register_user', data: user_data, nonce: nonce, method: 'post', dataType: 'json', beforeSend: function () { form_wrap.animate({ opacity: '0.45' }, 500 ).addClass( 'uael-form-waiting' ); if( ! button_text.hasClass( 'disabled' ) && ! $invalid_field ) { button_text.addClass( 'disabled' ); button_text.append( '' ); } user_pass.siblings( '.uael-pass-wrapper' ).remove(); }, }, function( data ) { if( recaptcha_field.length > 0 ) { recaptcha_id = recaptcha_field.attr( 'data-widgetid' ); grecaptcha.reset( recaptcha_id ); grecaptcha.execute( recaptcha_id ); } if ( data.success === true ) { if ( 'yes' === user_data['auto_login'] && ( ( 'undefined' === typeof redirect_url ) || ( '' === redirect_url ) ) ) { location.reload(); } else if ( ( 'undefined' !== typeof redirect_url ) && ( '' !== redirect_url ) ) { window.setTimeout( function () { window.location = redirect_url; }); } if( 'yes' === form_wrap.attr( 'data-hide_form' ) ) { form_wrap.find( '.elementor-form' ).remove(); } else { button_text.find( '.uael-form-loader' ).remove(); button_text.removeClass( 'disabled' ); $scope.find( '.uael-register-field-message' ).remove(); $scope.find( '.elementor-form' ).trigger( 'reset' ); } form_wrap.animate({ opacity: '1' }, 100 ).removeClass( 'uael-form-waiting' ); if( 'yes' !== form_wrap.attr( 'data-hide_form' ) ) { $success_text = widget_wrapper.data( 'success-message' ); $scope.find( '.uael-registration-message' ).removeClass( 'error' ).addClass( 'success' ).text( $success_text ); } } else { form_wrap.animate({ opacity: '1' }, 100 ).removeClass( 'uael-form-waiting' ); button_text.find( '.uael-form-loader' ).remove(); button_text.removeClass( 'disabled' ); $scope.find( '.uael-register-field-message' ).remove(); jQuery.each( data.error, function ( key, message ) { var error_field = $scope.find( '.form-field-' + key ); UAELRegistrationForm._printErrorMessages( $scope, error_field, message ); }); if( undefined === data.error ) { $error_text = widget_wrapper.data( 'error-message' ); $scope.find( '.uael-registration-message' ).removeClass( 'success' ).addClass( 'error' ).text( $error_text ); } } }); } else { return false; } } } } window.onLoadUAEReCaptcha = function() { var reCaptchaFields = $( '.uael-g-recaptcha-field' ), widgetID; if ( reCaptchaFields.length > 0 ) { reCaptchaFields.each( function() { var self = $( this ), attrWidget = self.attr( 'data-widgetid' ); // Avoid re-rendering as it's throwing API error if ( ( typeof attrWidget !== typeof undefined && attrWidget !== false ) ) { return; } else { widgetID = grecaptcha.render( $( this ).attr( 'id' ), { sitekey : self.data( 'sitekey' ), callback: function( response ) { if ( response != '' ) { self.append( jQuery( '', { type: 'hidden', value: response, class: 'uael-g-recaptcha-response' })); } } }); self.attr( 'data-widgetid', widgetID ); } }); } }; /** * Registration Form handler Function. * */ var WidgetUAELRegistrationFormHandler = function( $scope, $ ) { if ( 'undefined' == typeof $scope ) return; var scope_id = $scope.data( 'id' ); var submit_button = $scope.find( '.uael-register-submit' ); var password_field = $scope.find( 'input[type=password]' ); var widget_wrapper = $scope.find( '.uael-registration-form' ); var form_wrapper = widget_wrapper.find( '.elementor-form' ); if( 'yes' == widget_wrapper.data( 'strength-check' ) ) { password_field.on( 'keyup', function( e ) { UAELRegistrationForm._checkPasswordStrength( $scope ); }); } password_field.on( 'focusout', function( e ) { if( '' === $scope.find( 'input[type=password]' ).val() ) { $scope.find( '.uael-pass-wrapper' ).css( 'display', 'none' ); } }); $scope.find( '.elementor-field' ).on( 'keyup', function( e ) { $( this ).siblings( '.uael-register-field-message' ).remove(); }); if( $scope.find( '.uael-recaptcha-alert' ).length > 0 ) { submit_button.addClass( 'uael-submit-disabled' ); } else { var recaptcha_field = $scope.find( '.uael-g-recaptcha-field' ); submit_button.removeClass( 'uael-submit-disabled' ); if ( elementorFrontend.isEditMode() && undefined == recaptcha_field.attr( 'data-widgetid' ) ) { onLoadUAEReCaptcha(); } if( recaptcha_field.length > 0 ) { grecaptcha.ready( function () { recaptcha_id = recaptcha_field.attr( 'data-widgetid' ); grecaptcha.execute( recaptcha_id ); }); } } /** * Validate form on submit button click. * */ submit_button.on( 'click', function() { event.preventDefault(); var $this = $( this ); UAELRegistrationForm._submitForm( $this, widget_wrapper, $scope ); } ); }; $( window ).on( 'elementor/frontend/init', function () { elementorFrontend.hooks.addAction( 'frontend/element_ready/uael-registration-form.default', WidgetUAELRegistrationFormHandler ); }); } )( jQuery );