ajax-submission.js
1 month ago
ajax-submission.min.js
1 month ago
everest-forms-file-upload.js
4 months ago
everest-forms-file-upload.min.js
4 months ago
everest-forms-survey-polls-quiz.js
1 year ago
everest-forms-survey-polls-quiz.min.js
2 years ago
everest-forms.js
4 months ago
everest-forms.min.js
4 months ago
evf-form-preview.js
1 year ago
evf-form-preview.min.js
1 year ago
text-limit.js
1 year ago
text-limit.min.js
1 year ago
ajax-submission.js
577 lines
| 1 | /* global everest_forms_ajax_submission_params */ |
| 2 | jQuery( function( $ ) { |
| 3 | 'use strict'; |
| 4 | |
| 5 | var isPaymentDebugEnabled = function() { |
| 6 | try { |
| 7 | return ( |
| 8 | window.everest_forms_ajax_submission_params && |
| 9 | '1' === String( window.everest_forms_ajax_submission_params.payment_debug || '' ) |
| 10 | ); |
| 11 | } catch ( e ) { |
| 12 | return false; |
| 13 | } |
| 14 | }; |
| 15 | |
| 16 | var getSafePaymentDebugErrorMessage = function( error ) { |
| 17 | if ( ! error ) { |
| 18 | return ''; |
| 19 | } |
| 20 | if ( 'string' === typeof error ) { |
| 21 | return error; |
| 22 | } |
| 23 | if ( error.messages && error.messages.message ) { |
| 24 | var messages = error.messages.message; |
| 25 | if ( Array.isArray( messages ) && messages.length && messages[ 0 ].text ) { |
| 26 | return String( messages[ 0 ].text ); |
| 27 | } |
| 28 | } |
| 29 | if ( error.message ) { |
| 30 | return String( error.message ); |
| 31 | } |
| 32 | return 'Payment request failed.'; |
| 33 | }; |
| 34 | |
| 35 | var sanitizePaymentDebugPayload = function( payload ) { |
| 36 | if ( null === payload || undefined === payload ) { |
| 37 | return {}; |
| 38 | } |
| 39 | if ( 'object' !== typeof payload || Array.isArray( payload ) ) { |
| 40 | return payload; |
| 41 | } |
| 42 | |
| 43 | var safe = {}; |
| 44 | Object.keys( payload ).forEach( function( key ) { |
| 45 | if ( 'error' === key ) { |
| 46 | safe.error = getSafePaymentDebugErrorMessage( payload.error ); |
| 47 | return; |
| 48 | } |
| 49 | if ( 'response' === key ) { |
| 50 | safe.response = |
| 51 | 'string' === typeof payload.response |
| 52 | ? payload.response |
| 53 | : payload.response |
| 54 | ? '[redacted]' |
| 55 | : undefined; |
| 56 | return; |
| 57 | } |
| 58 | safe[ key ] = payload[ key ]; |
| 59 | } ); |
| 60 | return safe; |
| 61 | }; |
| 62 | |
| 63 | var paymentDebugLog = function( formTuple, stage, payload ) { |
| 64 | if ( ! isPaymentDebugEnabled() ) { |
| 65 | return; |
| 66 | } |
| 67 | |
| 68 | try { |
| 69 | // eslint-disable-next-line no-console |
| 70 | console.log( |
| 71 | '[EVF Payment Debug] ' + String( stage || '' ), |
| 72 | sanitizePaymentDebugPayload( payload ) |
| 73 | ); |
| 74 | } catch ( e ) { |
| 75 | // no-op |
| 76 | } |
| 77 | }; |
| 78 | |
| 79 | /** |
| 80 | * Selected gateway slug from posted radio value (not data-evf-gateway / CSS alone). |
| 81 | * |
| 82 | * @param {jQuery} formTuple Form wrapper. |
| 83 | * @return {string|undefined} |
| 84 | */ |
| 85 | function getSelectedPaymentGatewayFromForm( formTuple ) { |
| 86 | var $checked = formTuple.find( '.evf-payment-gateway-radio:checked' ); |
| 87 | if ( ! $checked.length ) { |
| 88 | return undefined; |
| 89 | } |
| 90 | var value = $checked.val(); |
| 91 | return value ? String( value ) : undefined; |
| 92 | } |
| 93 | |
| 94 | var evf_ajax_submission_init = function(){ |
| 95 | var form = $( 'form[data-ajax_submission="1"]' ); |
| 96 | form.each( function( i, v ) { |
| 97 | $( document ).ready( function() { |
| 98 | var formTuple = $( v ), |
| 99 | btn = formTuple.find( '.evf-submit' ), |
| 100 | razorpayForms = formTuple.find( "[data-gateway='razorpay']" ); |
| 101 | |
| 102 | btn.on( 'click', async function( e ) { |
| 103 | var selectedGatewayFromSelector = getSelectedPaymentGatewayFromForm( formTuple ); |
| 104 | var paymentMethod = selectedGatewayFromSelector; |
| 105 | if(undefined === paymentMethod) { |
| 106 | paymentMethod = formTuple.find( ".everest-forms-stripe-gateways-tabs .evf-tab" ).has( 'a.active' ).data( 'gateway' ); |
| 107 | } |
| 108 | if(undefined === paymentMethod) { |
| 109 | paymentMethod = formTuple.find( ".everest-forms-gateway[data-gateway='stripe']" ).data( 'gateway' ); |
| 110 | } |
| 111 | paymentDebugLog( formTuple, 'submit_click_start', { |
| 112 | formId: formTuple.data( 'formid' ), |
| 113 | paymentMethod: paymentMethod |
| 114 | } ); |
| 115 | |
| 116 | if (formTuple.find( ".everest-forms-gateway[data-gateway='stripe']").hasClass('StripeElement--empty') && formTuple.find( '.evf-field-credit-card' ).is(':visible') ){ |
| 117 | $(document).ready(function() { |
| 118 | $('#card-errors').html('This field is required').show(); |
| 119 | $('.evf-submit').text('Submit'); |
| 120 | $('.evf-submit').attr('disabled', false); |
| 121 | |
| 122 | }); |
| 123 | formTuple.trigger( 'focusout' ).trigger( 'change' ).trigger( 'submit' ); |
| 124 | return false; |
| 125 | } |
| 126 | |
| 127 | var hasPaymentGatewaySelector = formTuple.find( '.evf-payment-gateway-radio' ).length > 0; |
| 128 | |
| 129 | // For square payment credit card validation. |
| 130 | var squareSelectedGateway = getSelectedPaymentGatewayFromForm( formTuple ); |
| 131 | var squareIsSelected = hasPaymentGatewaySelector |
| 132 | ? 'square' === squareSelectedGateway |
| 133 | : 'square' === squareSelectedGateway || ( undefined === squareSelectedGateway && 'none' !== formTuple.find( ".everest-forms-gateway[data-gateway='square']" ).closest( '.evf-field' ).css( 'display' ) ); |
| 134 | paymentDebugLog( formTuple, 'square_selection_check', { |
| 135 | hasPaymentGatewaySelector: hasPaymentGatewaySelector, |
| 136 | squareSelectedGateway: squareSelectedGateway, |
| 137 | squareIsSelected: squareIsSelected |
| 138 | } ); |
| 139 | if ( squareIsSelected ) { |
| 140 | var squareMsgContainer = formTuple.find(".everest-forms-gateway[data-gateway='square']").find('.sq-card-message-error'); |
| 141 | if ( squareMsgContainer.length > 0 ) { |
| 142 | var squareErrorMsg = squareMsgContainer.text(); |
| 143 | paymentDebugLog( formTuple, 'square_validation_error', { |
| 144 | squareErrorMsg: squareErrorMsg |
| 145 | } ); |
| 146 | $( document ).ready( function() { |
| 147 | $( '#card-errors' ).html( squareErrorMsg ).show(); |
| 148 | $( '.evf-submit' ).text( 'Submit' ); |
| 149 | $( '.evf-submit' ).attr( 'disabled', false); |
| 150 | }); |
| 151 | formTuple.trigger( 'focusout' ).trigger( 'change' ).trigger( 'submit' ); |
| 152 | return false; |
| 153 | } |
| 154 | } |
| 155 | |
| 156 | if ( typeof tinyMCE !== 'undefined' ) { |
| 157 | tinyMCE.triggerSave(); |
| 158 | } |
| 159 | |
| 160 | var recaptchaID = btn.get( 0 ).recaptchaID; |
| 161 | |
| 162 | if ( recaptchaID === 0 ) { |
| 163 | grecaptcha.execute( recaptchaID ); |
| 164 | return false; |
| 165 | } |
| 166 | |
| 167 | var selectedPayGateway = getSelectedPaymentGatewayFromForm( formTuple ); |
| 168 | var hasRazorpayGatewayMarker = formTuple.find( "[data-gateway='razorpay']" ).length > 0; |
| 169 | var shouldBypassAjaxForRazorpay = hasRazorpayGatewayMarker && ( 'razorpay' === selectedPayGateway || ! hasPaymentGatewaySelector ); |
| 170 | paymentDebugLog( formTuple, 'payment_gateway_pre_ajax', { |
| 171 | selectedPayGateway: selectedPayGateway, |
| 172 | hasRazorpayGatewayMarker: hasRazorpayGatewayMarker, |
| 173 | shouldBypassAjaxForRazorpay: shouldBypassAjaxForRazorpay |
| 174 | } ); |
| 175 | |
| 176 | if ( shouldBypassAjaxForRazorpay ) { |
| 177 | return true; |
| 178 | } |
| 179 | |
| 180 | var data = formTuple.serializeArray(); |
| 181 | e.preventDefault(); |
| 182 | // We let the bubbling events in form play itself out. |
| 183 | formTuple.trigger( 'focusout' ).trigger( 'change' ).trigger( 'submit' ); |
| 184 | |
| 185 | var errors = formTuple.find( '.evf-error:visible' ); |
| 186 | |
| 187 | var authorizeNetHidden = formTuple.find( ".everest-forms-authorize_net[data-gateway='authorize-net']" ); |
| 188 | var legacyAuthorizeFieldVisible = ! hasPaymentGatewaySelector && formTuple.find( '.evf-field-authorize-net' ).is( ':visible' ); |
| 189 | var shouldTokenizeAuthorizeNet = authorizeNetHidden.length && |
| 190 | window.EverestFormsAuthorizeNet && |
| 191 | typeof window.EverestFormsAuthorizeNet.getCardData === 'function' && |
| 192 | typeof window.EverestFormsAuthorizeNet.authorizeNetAjaxSubmitHandler === 'function' && |
| 193 | ( 'authorize_net' === selectedPayGateway || ( ! hasPaymentGatewaySelector && legacyAuthorizeFieldVisible ) ); |
| 194 | paymentDebugLog( formTuple, 'authorize_net_check', { |
| 195 | authorizeNetHiddenCount: authorizeNetHidden.length, |
| 196 | legacyAuthorizeFieldVisible: legacyAuthorizeFieldVisible, |
| 197 | shouldTokenizeAuthorizeNet: shouldTokenizeAuthorizeNet |
| 198 | } ); |
| 199 | |
| 200 | if ( shouldTokenizeAuthorizeNet ) { |
| 201 | const cardData = window.EverestFormsAuthorizeNet.getCardData( formTuple ); |
| 202 | paymentDebugLog( formTuple, 'authorize_net_card_fields_presence', { |
| 203 | hasAllFields: ! Object.values( cardData ).some( function( value ) { return ! value; } ) |
| 204 | } ); |
| 205 | |
| 206 | if( ! Object.values(cardData).some(value => !value ) ) { |
| 207 | |
| 208 | // Define the Promise. |
| 209 | const authorizeNetAjaxSubmitHandlerPromise = new Promise(function (resolve, reject) { |
| 210 | window.EverestFormsAuthorizeNet.authorizeNetAjaxSubmitHandler(v).then(resolve).catch(reject); |
| 211 | }); |
| 212 | |
| 213 | try { |
| 214 | const response = await authorizeNetAjaxSubmitHandlerPromise; |
| 215 | paymentDebugLog( formTuple, 'authorize_net_tokenized', { |
| 216 | resultCode: response && response.messages ? response.messages.resultCode : '' |
| 217 | } ); |
| 218 | |
| 219 | if( "Ok" === response.messages.resultCode ) { |
| 220 | data.push( |
| 221 | { name: 'everest_forms[authorize_net][opaque_data][descriptor]', value: response.opaqueData.dataDescriptor }, |
| 222 | { name: 'everest_forms[authorize_net][opaque_data][value]', value: response.opaqueData.dataValue } |
| 223 | ); |
| 224 | paymentDebugLog( formTuple, 'authorize_net_opaque_data_attached', {} ); |
| 225 | } |
| 226 | } catch (error) { |
| 227 | paymentDebugLog( formTuple, 'authorize_net_tokenization_failed', { |
| 228 | errorMessage: getSafePaymentDebugErrorMessage( error ) |
| 229 | } ); |
| 230 | btn.attr( 'disabled', false ).html( everest_forms_ajax_submission_params.submit ); |
| 231 | return; |
| 232 | } |
| 233 | |
| 234 | } |
| 235 | |
| 236 | if (errors.length < 1) { |
| 237 | errors = formTuple.parents('div.everest-forms').find('.everest-forms-notice.everest-forms-notice--error .evf-error'); |
| 238 | } |
| 239 | } |
| 240 | |
| 241 | if ( errors.length > 0 ) { |
| 242 | btn.attr( 'disabled', false ).html( everest_forms_ajax_submission_params.submit ); |
| 243 | $( [document.documentElement, document.body] ).animate({ |
| 244 | scrollTop: errors.last().offset().top |
| 245 | }, 800 ); |
| 246 | return; |
| 247 | } |
| 248 | |
| 249 | // Change the text to user defined property. |
| 250 | $( this ).html( formTuple.data( 'process-text' ) ); |
| 251 | |
| 252 | // Add action intend for ajax_form_submission endpoint. |
| 253 | data.push({ |
| 254 | name: 'action', |
| 255 | value: 'everest_forms_ajax_form_submission' |
| 256 | }); |
| 257 | |
| 258 | data.push({ |
| 259 | name: 'security', |
| 260 | value: everest_forms_ajax_submission_params.evf_ajax_submission |
| 261 | }); |
| 262 | paymentDebugLog( formTuple, 'ajax_submission_dispatched', { |
| 263 | selectedPayGateway: selectedPayGateway, |
| 264 | payloadLength: data.length |
| 265 | } ); |
| 266 | |
| 267 | // Fire the ajax request. |
| 268 | $.ajax({ |
| 269 | url: everest_forms_ajax_submission_params.ajax_url, |
| 270 | type: 'POST', |
| 271 | data: data |
| 272 | }) |
| 273 | .done( function ( xhr, textStatus, errorThrown ) { |
| 274 | var redirect_url = ( xhr.data && xhr.data.redirect_url ) ? xhr.data.redirect_url : ''; |
| 275 | var selectedGateway = getSelectedPaymentGatewayFromForm( formTuple ); |
| 276 | var hasPaymentGatewayField = formTuple.find( '.evf-payment-gateway-radio' ).length > 0; |
| 277 | paymentDebugLog( formTuple, 'ajax_done', { |
| 278 | textStatus: textStatus, |
| 279 | success: xhr ? xhr.success : undefined, |
| 280 | response: xhr && xhr.data ? xhr.data.response : undefined, |
| 281 | selectedGateway: selectedGateway, |
| 282 | redirectUrl: redirect_url |
| 283 | } ); |
| 284 | if ( undefined === selectedGateway && ! hasPaymentGatewayField ) { |
| 285 | var $squareClosest = formTuple.find( ".everest-forms-gateway[data-gateway='square']" ).closest( '.evf-field' ); |
| 286 | var $stripeClosest = formTuple.find( ".everest-forms-gateway[data-gateway='stripe']" ).closest( '.evf-field' ); |
| 287 | if ( $squareClosest.length && 'none' !== $squareClosest.css( 'display' ) ) { |
| 288 | selectedGateway = 'square'; |
| 289 | } else if ( $stripeClosest.length && 'none' !== $stripeClosest.css( 'display' ) ) { |
| 290 | selectedGateway = 'stripe'; |
| 291 | } |
| 292 | } |
| 293 | if ( |
| 294 | redirect_url && |
| 295 | 'undefined' !== redirect_url && |
| 296 | ( |
| 297 | 'paypal' === selectedGateway || |
| 298 | ( 'stripe' !== selectedGateway && 'square' !== selectedGateway ) |
| 299 | ) |
| 300 | ) { |
| 301 | paymentDebugLog( formTuple, 'gateway_redirect_url', { |
| 302 | redirectUrl: redirect_url, |
| 303 | selectedGateway: selectedGateway, |
| 304 | } ); |
| 305 | formTuple.trigger( 'reset' ); |
| 306 | var new_tab = xhr.data.enable_redirect_in_new_tab ? xhr.data.enable_redirect_in_new_tab : false; |
| 307 | |
| 308 | if (new_tab) { |
| 309 | var newWindow = window.open(redirect_url, '_blank'); |
| 310 | if (!newWindow || newWindow.closed || typeof newWindow.closed === 'undefined') { |
| 311 | window.location.href = redirect_url; |
| 312 | } |
| 313 | } else { |
| 314 | window.location.href = redirect_url; |
| 315 | return; |
| 316 | } |
| 317 | } |
| 318 | var paypalRedirect = |
| 319 | ( xhr && xhr.redirect ) || |
| 320 | ( xhr && xhr.data && xhr.data.redirect ); |
| 321 | var isPayPalRedirect = |
| 322 | ( xhr && 'paypal' === xhr.payment_method ) || |
| 323 | ( xhr && xhr.data && 'paypal' === xhr.data.payment_method ) || |
| 324 | 'paypal' === selectedGateway; |
| 325 | |
| 326 | if ( paypalRedirect && isPayPalRedirect ) { |
| 327 | paymentDebugLog( formTuple, 'paypal_redirect', { |
| 328 | redirectUrl: paypalRedirect, |
| 329 | selectedGateway: selectedGateway, |
| 330 | } ); |
| 331 | window.location.href = paypalRedirect; |
| 332 | return; |
| 333 | } |
| 334 | |
| 335 | if ( 'success' === xhr.data.response || true === xhr.success ) { |
| 336 | let pdf_download_message = ''; |
| 337 | let quiz_reporting = ''; |
| 338 | let preview_confirmation = ''; |
| 339 | let message_location = ''; |
| 340 | let form_state_type = ''; |
| 341 | |
| 342 | if(xhr.data.form_id !== undefined && xhr.data.entry_id !== undefined && xhr.data.pdf_download == true){ |
| 343 | pdf_download_message = '<br><small><a href="/?page=evf-entries-pdf&form_id='+ xhr.data.form_id+'&entry_id='+xhr.data.entry_id+'">' + xhr.data.pdf_download_message + '</a></small>'; |
| 344 | } |
| 345 | if( xhr.data.quiz_result_shown == true){ |
| 346 | quiz_reporting = xhr.data.quiz_reporting; |
| 347 | } |
| 348 | |
| 349 | if( xhr.data.is_preview_confirmation == '1'){ |
| 350 | preview_confirmation = xhr.data.preview_confirmation; |
| 351 | } |
| 352 | |
| 353 | if ( xhr.data.message_display_location !== undefined && xhr.data.message_display_location !== '' ) { |
| 354 | message_location = xhr.data.message_display_location; |
| 355 | } |
| 356 | |
| 357 | if ( xhr.data.form_state_type !== undefined && xhr.data.form_state_type !== '' ) { |
| 358 | form_state_type = xhr.data.form_state_type; |
| 359 | } |
| 360 | |
| 361 | var paymentMethod = hasPaymentGatewayField ? selectedGateway : formTuple.find( ".everest-forms-stripe-gateways-tabs .evf-tab" ).has( 'a.active' ).data( 'gateway' ); |
| 362 | |
| 363 | if(undefined === paymentMethod && ! hasPaymentGatewayField) { |
| 364 | paymentMethod = formTuple.find( ".everest-forms-gateway[data-gateway='ideal']" ).data( 'gateway' ); |
| 365 | if ('ideal' === paymentMethod ) { |
| 366 | paymentMethod = 'ideal'; |
| 367 | } else { |
| 368 | paymentMethod = formTuple.find( ".everest-forms-gateway[data-gateway='stripe']" ).data( 'gateway' ); |
| 369 | } |
| 370 | } |
| 371 | |
| 372 | if( 'stripe' === paymentMethod && 'none' !== formTuple.find( ".everest-forms-gateway[data-gateway='stripe']" ).closest( '.evf-field' ).css( 'display' ) ) { |
| 373 | paymentDebugLog( formTuple, 'trigger_stripe_payment_flow', {} ); |
| 374 | formTuple.trigger( 'everest_forms_frontend_before_ajax_complete_success_message', xhr.data ); |
| 375 | return; |
| 376 | } |
| 377 | |
| 378 | if(undefined === paymentMethod) { |
| 379 | paymentMethod = formTuple.find( ".everest-forms-gateway[data-gateway='ideal']" ).data( 'gateway' ); |
| 380 | } |
| 381 | |
| 382 | |
| 383 | if( 'ideal' === paymentMethod && 'none' !== formTuple.find( ".everest-forms-gateway[data-gateway='ideal']" ).closest( '.evf-field' ).css( 'display' ) ) { |
| 384 | paymentDebugLog( formTuple, 'trigger_ideal_payment_flow', {} ); |
| 385 | formTuple.trigger( 'evf_process_payment', xhr.data ); |
| 386 | return; |
| 387 | } |
| 388 | if( 'square' === selectedGateway ){ |
| 389 | paymentDebugLog( formTuple, 'trigger_square_payment_flow', {} ); |
| 390 | |
| 391 | formTuple.trigger( 'everest_forms_frontend_payment_before_success_message', xhr.data ); |
| 392 | return; |
| 393 | } |
| 394 | |
| 395 | var formContainer = formTuple.closest( '.everest-forms' ); |
| 396 | |
| 397 | formTuple.trigger( 'reset' ); |
| 398 | formContainer.find( '.everest-forms-notice' ).remove(); |
| 399 | |
| 400 | // If the form state is hidden, scope the hide to this submitted form only. |
| 401 | if ( 'hide' === form_state_type && 'hide' !== message_location ) { |
| 402 | formTuple.find( '.evf-frontend-row, .evf-submit-container' ).hide(); |
| 403 | } |
| 404 | |
| 405 | if ( 'hide' === message_location ) { |
| 406 | formContainer.html( |
| 407 | '<div class="everest-forms-notice everest-forms-notice--success" role="alert">' + |
| 408 | xhr.data.message + pdf_download_message + |
| 409 | '</div>' + quiz_reporting + preview_confirmation |
| 410 | ).focus(); |
| 411 | } else if ( 'top' === message_location) { |
| 412 | formContainer.prepend( |
| 413 | '<div class="everest-forms-notice everest-forms-notice--success" role="alert">' + |
| 414 | xhr.data.message + pdf_download_message + |
| 415 | '</div>' + quiz_reporting + preview_confirmation |
| 416 | ).focus(); |
| 417 | } else if ( 'bottom' === message_location ) { |
| 418 | formContainer.append( |
| 419 | preview_confirmation + '<div class="everest-forms-notice everest-forms-notice--success" role="alert">' + |
| 420 | xhr.data.message + pdf_download_message + |
| 421 | '</div>' + quiz_reporting |
| 422 | ).focus(); |
| 423 | }else if ( 'popup' === message_location ) { |
| 424 | $('body').css('overflow', 'hidden'); |
| 425 | |
| 426 | var popupHTML = ` |
| 427 | <div class="everest-forms-popup-overlay"> |
| 428 | <div class="everest-forms-popup"> |
| 429 | <div class="everest-forms-popup-close"> |
| 430 | <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> |
| 431 | <path d="M7 6.06668L1.26666 0.333344L0.333328 1.20001L6.06666 6.93334L0.333328 12.6L1.26666 13.5333L7 7.86668L12.6667 13.5333L13.6 12.6L7.93333 6.93334L13.6667 1.33334L12.7333 0.466677L7 6.06668Z" fill="#383838"/> |
| 432 | </svg> |
| 433 | </div> |
| 434 | <img src="${ everest_forms_ajax_submission_params.evf_checked_image_url }" alt="Checked Logo" class="everest-forms-popup-success-logo"> |
| 435 | <p class="everest-forms-popup-success-text">${ everest_forms_ajax_submission_params.i18n_evf_success_text }</p> |
| 436 | <p>${ xhr.data.message }</p> |
| 437 | </div> |
| 438 | </div> |
| 439 | `; |
| 440 | |
| 441 | $('body').append(popupHTML); |
| 442 | |
| 443 | $('.everest-forms-popup-close').on('click', function() { |
| 444 | $('.everest-forms-popup-overlay').fadeOut(200, function() { |
| 445 | $(this).remove(); |
| 446 | $('body').css('overflow', ''); |
| 447 | }); |
| 448 | }); |
| 449 | |
| 450 | formContainer.append( |
| 451 | preview_confirmation + quiz_reporting |
| 452 | ).focus(); |
| 453 | } |
| 454 | |
| 455 | btn.attr('disabled', false).html(everest_forms_ajax_submission_params.submit); |
| 456 | paymentDebugLog( formTuple, 'payment_completed_success_notice', { |
| 457 | messageLocation: message_location, |
| 458 | formStateType: form_state_type |
| 459 | } ); |
| 460 | |
| 461 | // Trigger for form submission success. |
| 462 | var event = new CustomEvent("everest_forms_ajax_submission_success", { |
| 463 | detail: { |
| 464 | formId: 'evf-form-' + xhr.data.form_id, |
| 465 | } |
| 466 | }); |
| 467 | document.dispatchEvent(event); |
| 468 | } else { |
| 469 | var form_id = formTuple.data( 'formid' ); |
| 470 | var err = JSON.parse( errorThrown.responseText ); |
| 471 | if( 'undefined' !== typeof err.data[form_id] ) { |
| 472 | var error = err.data[form_id].header; |
| 473 | } else{ |
| 474 | var error = everest_forms_ajax_submission_params.error; |
| 475 | } |
| 476 | var fields = err.data.error; |
| 477 | |
| 478 | if ( 'string' === typeof err.data.message ) { |
| 479 | error = err.data.message; |
| 480 | } |
| 481 | |
| 482 | formTuple.closest( '.everest-forms' ).find( '.everest-forms-notice' ).remove(); |
| 483 | formTuple.closest( '.everest-forms' ).prepend( '<div class="everest-forms-notice everest-forms-notice--error" role="alert">'+ error +'</div>' ).focus(); |
| 484 | |
| 485 | // Begin fixing the tamper. |
| 486 | $( fields ).each( function( index, fieldTuple ) { |
| 487 | var err_msg = Object.values(fieldTuple)[0], |
| 488 | fld_id = Object.keys(fieldTuple)[0], |
| 489 | err_field, fid, lbl = true; |
| 490 | |
| 491 | var fld_container_id = 'evf'-+ form_id +'-field_' + fld_id +'-container'; |
| 492 | |
| 493 | if($('#'+fld_container_id).hasClass('evf-field-signature')) { //When field type is signature |
| 494 | fid = 'evf-signature-img-input-' + fld_id; |
| 495 | err_field = $( '#' + fid ); |
| 496 | } else if ($('#'+fld_container_id).hasClass('evf-field-likert')) { //When field type is likert |
| 497 | fid = 'everest_forms-' + form_id + '-field_' + fld_id + '_'; |
| 498 | err_field = $( '[id^="' + fid + '"]' ); |
| 499 | lbl = false; |
| 500 | |
| 501 | err_field.each( function( index, element ) { |
| 502 | var tbl_header = $( element ).closest( 'tr.evf-' + form_id +'-field_' + fld_id ).find( 'th' ), |
| 503 | id = 'everest_forms[form_fields][' + fld_id + '][' + ( parseInt( tbl_header.closest( 'tr' ).index() ) + 1 ) + ']'; |
| 504 | |
| 505 | if ( ! tbl_header.children().is( 'label' ) ) { |
| 506 | if( tbl_header.parents( 'span.input-wrapper' ).length ) { |
| 507 | tbl_header.parents( 'span.input-wrapper' ).append( '<label id="' + id + '" for="' + id + '" class="evf-error">' + everest_forms_ajax_submission_params.required + '</label>' ); |
| 508 | } else { |
| 509 | tbl_header.append( '<label id="' + id + '" for="' + id + '" class="evf-error">' + everest_forms_ajax_submission_params.required + '</label>' ); |
| 510 | } |
| 511 | } else { |
| 512 | tbl_header.children().find( '#' + id ).show(); |
| 513 | } |
| 514 | }); |
| 515 | } else if ($('#'+fld_container_id).hasClass('evf-field-address')) { //When field type is address |
| 516 | fid = 'evf-' + form_id + '-field_' + fld_id; |
| 517 | err_field = $( '[id^="' + fid + '"]' ); |
| 518 | |
| 519 | err_field.each( function ( index, element ) { |
| 520 | var fieldId = String( $( element ).attr( 'id' ) ); |
| 521 | |
| 522 | if ( fieldId.includes( '-container' ) || fieldId.includes( '-address2' ) ) { |
| 523 | err_field.splice( index, 1 ); |
| 524 | } else { |
| 525 | if ( 'undefined' !== typeof $( element ).val() ) { |
| 526 | err_field.splice( index, 1 ); |
| 527 | }; |
| 528 | } |
| 529 | }); |
| 530 | } else { |
| 531 | fid = 'evf-' + form_id + '-field_' + fld_id; |
| 532 | err_field = $( '#' + fid ); |
| 533 | } |
| 534 | |
| 535 | err_field.addClass( 'evf-error' ); |
| 536 | err_field.attr( 'aria-invalid', true ); |
| 537 | err_field.first().closest( '.evf-field' ).addClass( 'everest-forms-invalid evf-has-error' ); |
| 538 | |
| 539 | if ( true === lbl && ! err_field.is( 'label' ) ) { |
| 540 | if( err_field.parents( 'span.input-wrapper' ).length ){ |
| 541 | err_field.parents( 'span.input-wrapper' ).after( '<label id="' + err_field.attr( 'id' ) + '-error" class="evf-error" for="' + err_field.attr( 'id' ) + '">' + err_msg + '</label>' ).show(); |
| 542 | } else { |
| 543 | err_field.after( '<label id="' + err_field.attr( 'id' ) + '-error" class="evf-error" for="' + err_field.attr( 'id' ) + '">' + err_msg + '</label>' ).show(); |
| 544 | } |
| 545 | } |
| 546 | }); |
| 547 | |
| 548 | btn.attr( 'disabled', false ).html( everest_forms_ajax_submission_params.submit ); |
| 549 | } |
| 550 | |
| 551 | }) |
| 552 | .fail( function () { |
| 553 | paymentDebugLog( formTuple, 'ajax_failed', {} ); |
| 554 | btn.attr( 'disabled', false ).html( everest_forms_ajax_submission_params.submit ); |
| 555 | formTuple.trigger( 'focusout' ).trigger( 'change' ); |
| 556 | formTuple.closest( '.everest-forms' ).find( '.everest-forms-notice' ).remove(); |
| 557 | formTuple.closest( '.everest-forms' ).prepend( '<div class="everest-forms-notice everest-forms-notice--error" role="alert">'+ everest_forms_ajax_submission_params.error +'</div>' ).focus(); |
| 558 | }) |
| 559 | .always( function( xhr ) { |
| 560 | var redirect_url = ( xhr.data && xhr.data.redirect_url ) ? xhr.data.redirect_url : ''; |
| 561 | paymentDebugLog( formTuple, 'ajax_always', { |
| 562 | redirectUrl: redirect_url |
| 563 | } ); |
| 564 | if ( ! redirect_url && $( '.everest-forms-notice' ).length && xhr.data.submission_message_scroll === "1" ) { |
| 565 | $( [document.documentElement, document.body] ).animate({ |
| 566 | scrollTop: $( '.everest-forms-notice' ).offset().top |
| 567 | }, 800 ); |
| 568 | } |
| 569 | }); |
| 570 | }); |
| 571 | }); |
| 572 | }); |
| 573 | }; |
| 574 | |
| 575 | evf_ajax_submission_init(); |
| 576 | }); |
| 577 |