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