PageSourceSearch

https://24classics.com/wp-content/plugins/memberpress/js/signup.js?ver=1.11.35

js 24classics.com collected 2026-10-06 12:54:18 UTC 20,119 bytes, 550 lines download raw bytes

1(function($) {
2  $(document).ready(function() {
3    $('body').on('click', '.mepr-signup-form .have-coupon-link', function(e) {
4      e.preventDefault();
5      $(this).hide();
6      $('div.mepr_coupon_'+$(this).data("prdid")).show();
7    });
8
9    $('body').on('keydown', '.mepr-signup-form .mepr-coupon-code', function(e) {
10      if(e.which === 13) {
11        e.preventDefault();
12        $(this).trigger('blur');
13      }
14    });
15
16    // Store the default price string
17    $('.mepr_price_cell').each(function () {
18      $(this).data('default-price-string', $(this).text());
19    });
20
21    let updateCheckoutStateTimeout,
22        lastRequestData,
23        updatingCheckoutState = false,
24        updateCheckoutStateAgain = false,
25        updateCheckoutState = function ($form) {
26          clearTimeout(updateCheckoutStateTimeout);
27
28          updateCheckoutStateTimeout = setTimeout(function () {
29            debouncedUpdateCheckoutState($form);
30          }, 50);
31        },
32        getRequestData = function ($form) {
33          let payment_methods = [];
34
35          $form.find('input[name="mepr_payment_method"]').each(function () {
36            payment_methods.push($(this).val());
37          });
38
39          const data = {
40            action: 'mepr_get_checkout_state',
41            mepr_product_id: $form.find('input[name="mepr_product_id"]').val(),
42            'mepr-address-one': $form.find('input[name="mepr-address-one"]').val(),
43            'mepr-address-two': $form.find('input[name="mepr-address-two"]').val(),
44            'mepr-address-city': $form.find('input[name="mepr-address-city"]').val(),
45            'mepr-address-state': $form.find('select[name="mepr-address-state"]').is(':visible') ? $form.find('select[name="mepr-address-state"]').val() : $form.find('input[name="mepr-address-state"]').val(),
46            'mepr-address-country': $form.find('select[name="mepr-address-country"]').val(),
47            'mepr-address-zip': $form.find('input[name="mepr-address-zip"]').val(),
48            mepr_vat_number: $form.find('input[name="mepr_vat_number"]').val(),
49            mepr_vat_customer_type: $form.find('input[name="mepr_vat_customer_type"]:checked').val(),
50            mepr_coupon_code: $form.find('input[name="mepr_coupon_code"]').val(),
51            mepr_coupon_nonce: MeprSignup.coupon_nonce,
52            mpca_corporate_account_id: $form.find('input[name="mpca_corporate_account_id"]').val(),
53            mpgft_gift_checkbox: $form.find('input[name="mpgft-signup-gift-checkbox"]').is(':checked'),
54            mepr_payment_methods: payment_methods
55          };
56
57          if (!data.mpgft_gift_checkbox) {
58            let order_bumps = [];
59
60            $form.find('input[name="mepr_order_bumps[]"]:checked').each(function () {
61              order_bumps.push($(this).val());
62            });
63
64            data.mepr_order_bumps = order_bumps;
65          }
66
67          $form.trigger('meprCheckoutStateRequestData', [data]);
68
69          return data;
70        };
71
72    const debouncedUpdateCheckoutState = function ($form) {
73      if (updatingCheckoutState) {
74        updateCheckoutStateAgain = true;
75        return;
76      }
77
78      const data = getRequestData($form);
79
80      if (JSON.stringify(data) === JSON.stringify(lastRequestData)) {
81        return;
82      }
83
84      updatingCheckoutState = true;
85      lastRequestData = data;
86
87      if (MeprSignup.spc_enabled === '1' && MeprSignup.spc_invoice === '1') {
88        $form.find('.mepr-invoice-loader').fadeIn();
89      }
90
91      const onComplete = function () {
92        if (MeprSignup.spc_enabled === '1' && MeprSignup.spc_invoice === '1') {
93          $form.find('.mepr-invoice-loader').hide();
94        }
95
96        updatingCheckoutState = false;
97      };
98
99      $.ajax({
100        type: 'POST',
101        url: MeprI18n.ajaxurl,
102        dataType: 'json',
103        data: getRequestData($form)
104      })
105      .done(function (response) {
106        if (response && typeof response.success === 'boolean' && response.success) {
107          $form.trigger('meprPriceStringUpdated', [response.data]);
108          $form.find('div.mepr_price_cell').html(response.data.price_string);
109
110          if (response.data.payment_required) {
111            $form.find('.mepr-payment-methods-wrapper').show();
112            $form.find('input[name="mepr_payment_methods_hidden"]').remove();
113          } else {
114            $form.find('.mepr-payment-methods-wrapper').hide();
115            $form.append('<input type="hidden" name="mepr_payment_methods_hidden" value="1">');
116
117            // Clear validation errors on fields now hidden
118            $form.find('.mepr-payment-methods-wrapper .mepr-form-input').each(function () {
119              meprValidateInput(this);
120            });
121          }
122
123          $form.trigger('meprAfterPriceStringUpdated', [response.data]);
124
125          if (MeprSignup.spc_enabled === '1' && MeprSignup.spc_invoice === '1') {
126            $form.find('.mepr-transaction-invoice-wrapper > div').replaceWith(response.data.invoice_html);
127            $form.find(".mepr-transaction-invoice-wrapper .mp_invoice").css({ opacity: 1 });
128          }
129
130          $form.trigger('meprAfterCheckoutStateUpdated', [response.data]);
131
132          onComplete();
133
134          if (updateCheckoutStateAgain) {
135            updateCheckoutStateAgain = false;
136            updateCheckoutState($form);
137          }
138        } else {
139          onComplete();
140        }
141      })
142      .fail(onComplete);
143    };
144
145    $('.mepr-signup-form').on('meprUpdateCheckoutState', function () {
146      updateCheckoutState($(this));
147    });
148
149    $('.mepr-signup-form').each(function () {
150      var $form = $(this);
151
152      if($form.find('input[name="mpgft-signup-gift-checkbox"]').is(':checked')) {
153        updateCheckoutState($form);
154      }
155    });
156
157    var meprValidateInput = function (obj, submitting) {
158      $(obj).removeClass('invalid');
159
160      var form = $(obj).closest('.mepr-signup-form');
161
162      if ($(obj).attr('required') !== undefined) {
163        var notBlank = mpValidateFieldNotBlank($(obj));
164        mpToggleFieldValidation($(obj), notBlank);
165      }
166
167      // Validate actual email only if it's not empty otherwise let the required/un-required logic hold
168      if ($(obj).attr('type')==='email' && $(obj).val().length > 0) {
169        var validEmail = mpValidateEmail($(obj).val());
170        mpToggleFieldValidation($(obj), validEmail);
171      }
172
173      // Validate the URL by using the browser validation functions
174      if ($(obj).attr('type')==='url' && $(obj).val().length > 0) {
175        var validURL = mpValidateUrl($(obj).val());
176        mpToggleFieldValidation($(obj), validURL);
177      }
178
179      if ($(obj).hasClass('mepr-password-confirm')) {
180        var confirmMatch = $(obj).val() === form.find('.mepr-password').val();
181        mpToggleFieldValidation($(obj), confirmMatch);
182      }
183
184      if($(obj).hasClass('mepr-coupon-code') && !submitting) {
185        var price_string = form.find('div.mepr_price_cell');
186
187        if($(obj).val().match(/(\s|\S)/)) {
188          $(obj).prev('.mp-form-label').find('.mepr-coupon-loader').fadeIn();
189          $(obj).data('validating', true);
190
191          var data = {
192            action: 'mepr_validate_coupon',
193            code: $(obj).val(),
194            prd_id: $(obj).data("prdid"),
195            user_email: form.find("input[name='user_email']").val(),
196            coupon_nonce: MeprSignup.coupon_nonce
197          };
198
199          $.post(MeprI18n.ajaxurl, data, function(res) {
200            $(obj).prev('.mp-form-label').find('.mepr-coupon-loader').hide();
201            res = res.trim();
202            mpToggleFieldValidation($(obj), (res.toString() == 'true'));
203
204            if(res.toString() == 'true') {
205              if($(obj).data('submit-when-valid')) {
206                form.one('meprAfterPriceStringUpdated', function () {
207                  form.find('.mepr-submit').trigger('click');
208                });
209              }
210
211              // Let's update price string and invoice
212              updateCheckoutState(form);
213            }
214            else {
215              form.find('.mepr-payment-methods-wrapper:hidden').show();
216              form.find('input[name="mepr_payment_methods_hidden"]').remove();
217              price_string.text(price_string.data('default-price-string'));
218
219              // Invalid Coupon - update SPC Invoice
220              updateCheckoutState(form);
221            }
222          })
223          .always(function () {
224            $(obj).removeData('validating');
225            $(obj).removeData('submit-when-valid');
226          });
227        }
228        else if($(obj).val().trim() === '') {
229          if (form.find('.mepr-payment-methods-wrapper').is(':hidden')) {
230            // Looks like we need to restore the payment methods
231            form.find('.mepr-payment-methods-wrapper').show();
232            form.find('input[name="mepr_payment_methods_hidden"]').remove();
233          }
234
235          price_string.text(price_string.data('default-price-string'));
236          // Enpty Coupon - update SPC Invoice
237          updateCheckoutState(form);
238        }
239      }
240
241      $(obj).trigger('mepr-validate-input');
242    };
243
244    $('body').on('focus', '.mepr-form .mepr-form-input', function (e) {
245      $(this).prev('.mp-form-label').find('.cc-error').hide();
246      $(this).removeClass('invalid');
247    });
248
249    $('body').on('blur', '.mepr-form .mepr-form-input', function (e) {
250      //Don't validate date fields here, wait til the push the submit button
251      if(!$(this).hasClass('mepr-date-picker')) {
252        meprValidateInput(this);
253      }
254    });
255
256    // Specific to validating with the datepicker ui text field
257    $('body').on('mepr-date-picker-closed', '.mepr-form .mepr-form-input.mepr-date-picker', function (e, date, inst) {
258      meprValidateInput(this);
259    });
260
261    $('body').on('click', '.mepr-signup-form .mepr-submit', function (e) {
262      // We want to control if/when the form is submitted
263      e.preventDefault();
264
265      var form = $(this).closest('.mepr-signup-form');
266      var coupon = form.find('.mepr-coupon-code');
267
268      if(coupon.data('validating')) {
269        coupon.data('submit-when-valid', true);
270        return;
271      }
272
273      $.each(form.find('.mepr-form-input:visible'), function(i,obj) {
274        meprValidateInput(obj, true);
275      });
276
277      if (0 < form.find('.invalid:visible').length) {
278        form.find('.validation').addClass('failed');
279      }
280      else {
281        var submittedTelInputs = document.querySelectorAll(".mepr-tel-input");
282        for (var i = 0; i < submittedTelInputs.length; i++) {
283          var iti = window.intlTelInputGlobals.getInstance(submittedTelInputs[i]);
284          submittedTelInputs[i].value = iti.getNumber();
285        }
286        form.find('.validation').addClass('passed');
287        this.disabled = true;
288        form.find('.mepr-loading-gif').show();
289        $(this).trigger('mepr-register-submit');
290        form.submit();
291      }
292    });
293
294    $('body').on('click', '.mepr-signup-form div[class^=mepr-payment-method] input.mepr-form-radio', function () {
295      var form = $(this).closest('.mepr-signup-form');
296
297      // Reset the transaction ID to prevent any issues after switching payment methods
298      form.find('input[name="mepr_transaction_id"]').val('');
299
300      var pmid = '.mp-pm-desc-' + $(this).val();
301      var pmid_exists = (form.find(pmid).length > 0);
302
303      form.find('.mepr-payment-method-desc-text').addClass('mepr-close');
304
305      if(pmid_exists) {
306        form.find(pmid).removeClass('mepr-close');
307      }
308
309      //If nothing has the mepr-close class, we still need to show this one's description
310      var mepr_close_exists = (form.find('.mepr-payment-method-desc-text.mepr-close').length > 0);
311
312      if(mepr_close_exists) {
313        form.find('.mepr-payment-method-desc-text.mepr-close').slideUp({
314          duration: 200,
315          complete: function() {
316            // Clear validation errors on fields now hidden
317            form.find('.mepr-payment-methods-wrapper .mepr-form-input').each(function () {
318              $('.mepr-form-input.invalid').removeClass('.invalid');
319              $('.cc-error').hide();
320              $('.mepr-form-has-errors').hide();
321            });
322
323            if(pmid_exists) {
324              form.find(pmid).slideDown(200);
325            }
326          }
327        });
328      } else {
329        // Clear validation errors on fields now hidden
330        form.find('.mepr-payment-methods-wrapper .mepr-form-input').each(function () {
331          $('.mepr-form-input.invalid').removeClass('.invalid');
332          $('.cc-error').hide();
333          $('.mepr-form-has-errors').hide();
334        });
335
336        if(pmid_exists) {
337          form.find(pmid).slideDown(200);
338        }
339      }
340    });
341
342    // Update price string & invoice when certain inputs change value
343    $("body").on("change mepr-geolocated",
344      ".mepr-form .mepr-form-input, .mepr-form .mepr-form-radios-input, .mepr-form .mepr-select-field",
345      function () {
346        if($(this).attr('name') == 'mepr-address-zip' ||
347          $(this).attr('name') == 'mepr-address-city' ||
348          $(this).attr('name') == 'mepr-address-country' ||
349          $(this).attr('name') == 'mepr-address-one' ||
350          $(this).attr('name') == 'mepr-address-state' ||
351          $(this).attr('name') == 'mepr_vat_customer_type' ||
352          $(this).attr('name') == 'mepr_vat_number' ||
353          $(this).attr('name') == 'mpgft-signup-gift-checkbox'
354        ) {
355          updateCheckoutState($(this).closest(".mepr-signup-form"));
356        }
357      }
358    );
359
360    $(".mepr-replace-file").each(function(){
361      $(this).closest('div').find('.mepr-file-uploader').hide();
362    });
363    $('body').on('click', '.mepr-replace-file', function (e) {
364      $(this).closest('div').find('.mepr-file-uploader').toggle();
365    });
366
367    // Set the visibility of payment methods based on order bumps
368    var handleOrderBumpToggle = function () {
369      var $input = $(this),
370          $order_bump = $input.closest('.mepr-order-bump'),
371          $order_bumps = $order_bump.closest('.mepr-order-bumps'),
372          $form = $order_bumps.closest('.mepr-signup-form'),
373          has_order_bump = false,
374          has_sub = false,
375          $to_hide = $(),
376          $to_show = $(),
377          $compatible_pm,
378          $incompatible_pm;
379
380      $order_bumps.find('input[name="mepr_order_bumps[]"]:checked').each(function () {
381        has_order_bump = true;
382
383        if($(this).closest('.mepr-order-bump').hasClass('mepr-sub')) {
384          has_sub = true;
385        }
386      });
387
388      $form.find('div[class^=mepr-payment-method] input.mepr-form-radio, input[type="hidden"][name="mepr_payment_method"]').each(function () {
389        var $pm = $(this);
390
391        if(has_order_bump) {
392          if($pm.hasClass('mepr-can-order-bumps')) {
393            if(has_sub) {
394              if($pm.hasClass('mepr-can-multiple-subscriptions')) {
395                $to_show = $to_show.add($pm);
396
397                if(!$compatible_pm) {
398                  $compatible_pm = $pm;
399                }
400              } else {
401                $to_hide = $to_hide.add($pm);
402
403                if($pm.prop('checked')) {
404                  $incompatible_pm = $pm;
405                }
406              }
407            } else {
408              $to_show = $to_show.add($pm);
409
410              if(!$compatible_pm) {
411                $compatible_pm = $pm;
412              }
413            }
414          } else {
415            $to_hide = $to_hide.add($pm);
416
417            if($pm.prop('checked')) {
418              $incompatible_pm = $pm;
419            }
420          }
421        } else {
422          $to_show = $to_show.add($pm);
423        }
424      });
425
426      if(!$to_show.length) {
427        alert(MeprSignup.no_compatible_pms);
428        return false;
429      }
430
431      if($incompatible_pm) {
432        if($compatible_pm) {
433          var compatible_pm_label = $compatible_pm.data('payment-method-type'),
434              prompt = MeprSignup.switch_pm_prompt.replace('%s', compatible_pm_label);
435
436          if($.magnificPopup) {
437            var $switch_button = $('<div class="mepr-btn">').text(MeprSignup.switch_pm.replace('%s', compatible_pm_label)).on('click', function () {
438              $compatible_pm.trigger('click');
439              $input.trigger('click');
440              $.magnificPopup.close();
441            });
442
443            var $cancel_button = $('<div class="mepr-btn mepr-btn-secondary">').text(MeprSignup.cancel).on('click', function () {
444              $.magnificPopup.close();
445            });
446
447            var $popup_content = $('<div class="mepr-switch-pm-popup">').append(
448              $('<img class="mepr-switch-pm-popup-icon">').attr('src', MeprSignup.warning_icon_url),
449              $('<p>').text(prompt),
450              $('<div class="mepr-switch-pm-popup-buttons">').append($switch_button, $cancel_button)
451            );
452
453            $.magnificPopup.open({
454              mainClass: 'mepr-switch-pm-mfp',
455              items: {
456                src: $popup_content,
457                type: 'inline'
458              }
459            });
460          } else if(confirm(prompt)) {
461            $compatible_pm.trigger('click');
462            $input.trigger('click');
463            return;
464          }
465        } else {
466          alert(MeprSignup.no_compatible_pms);
467        }
468
469        return false;
470      }
471
472      $to_hide.closest('.mepr_payment_method, .mepr-payment-option-label').hide();
473      $to_show.closest('.mepr_payment_method, .mepr-payment-option-label').show();
474
475      $order_bump.toggleClass('mepr-order-bump-selected', this.checked);
476    };
477
478    $('body').on('click', '.mepr-signup-form input[name="mepr_order_bumps[]"]', handleOrderBumpToggle);
479
480    // Hide subscription order bumps if no payment method supports multiple subscriptions
481    $('.mepr-signup-form').each(function () {
482      var $form = $(this),
483          $order_bumps = $form.find('.mepr-order-bumps'),
484          pm_supports_multiple_subs = false;
485
486      if(!$order_bumps.length) {
487        return;
488      }
489
490      $form.find('div[class^=mepr-payment-method] input.mepr-form-radio, input[type="hidden"][name="mepr_payment_method"]').each(function (index) {
491        var $pm = $(this);
492
493        if($pm.hasClass('mepr-can-multiple-subscriptions') && pm_supports_multiple_subs === false) {
494          pm_supports_multiple_subs = index;
495        }
496      });
497
498      if(pm_supports_multiple_subs === false) {
499        $order_bumps.find('.mepr-order-bump.mepr-sub').hide();
500
501        if(!$order_bumps.find('.mepr-order-bump:visible').length) {
502          $order_bumps.hide();
503        }
504      } else if(pm_supports_multiple_subs > 0) {
505        var $new_first_pm = $form.find('div[class^=mepr-payment-method] input.mepr-form-radio').eq(pm_supports_multiple_subs);
506
507        $new_first_pm
508          .closest('.mepr_payment_method, .mepr-payment-option-label')
509          .insertBefore(
510            $form.find('div[class^=mepr-payment-method] input.mepr-form-radio')
511              .eq(0)
512              .closest('.mepr_payment_method, .mepr-payment-option-label')
513          );
514
515        $new_first_pm.trigger('click');
516      }
517
518      // If gift checkbox is checked, hide and disable order bumps
519      if($form.find('input[name="mpgft-signup-gift-checkbox"]').is(':checked')) {
520        $order_bumps.hide().find('input[name="mepr_order_bumps[]"]').prop('checked', false);
521      }
522    });
523
524    $("body").on("change",
525      '.mepr-form input[name="mepr_order_bumps[]"]',
526      function (e) {
527        let form = $(this).closest(".mepr-signup-form");
528        if( $('input[type="hidden"][name="mepr_process_signup_form"]').length ) {
529          if( $('input[type="hidden"][name="mepr_process_signup_form"]').val() == 'Y' ) {
530            return;
531          }
532        }
533        updateCheckoutState(form);
534      }
535    );
536
537    $("body").on('change', '.mepr-signup-form input[name="mpgft-signup-gift-checkbox"]', function () {
538      let $is_gift = $(this),
539          $form = $is_gift.closest('.mepr-signup-form');
540
541      if ($is_gift.is(':checked')) {
542        $form.find('.mepr-order-bumps').hide().find('input[name="mepr_order_bumps[]"]:checked').prop('checked', false).each(function () {
543          handleOrderBumpToggle.call(this);
544        });
545      } else {
546        $form.find('.mepr-order-bumps').show();
547      }
548    });
549  });
550})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.