1jQuery(function ($) { 2 // Populate expiry year dropdown for credit card edit form 3 var $yearSelect = $('#anet-credit-card-edit-expiry-year'); 4 if ($yearSelect.length && $yearSelect.children('option').length === 0) { 5 var currentYear = new Date().getFullYear(); 6 $yearSelect.append($('<option>', { 7 value: '', 8 text: 'Select Year', 9 disabled: true, 10 selected: true 11 })); 12 for (var i = 0; i < 10; i++) { 13 var year = currentYear + i; 14 $yearSelect.append($('<option>', { 15 value: year, 16 text: year 17 })); 18 } 19 $yearSelect.val(''); 20 } 21 $('#anet-credit-card-edit-expiry-month')[0].selectedIndex = 0; 22 $('#anet-credit-card-save-btn').on('click', function (e) { 23 e.preventDefault(); 24 // Validation 25 var $error = $('#anet-credit-card-edit-error'); 26 $error.hide().text(''); 27 var cardNumber = $('#anet-credit-card-edit-card-number').val().replace(/\s+/g, ''); 28 var month = $('#anet-credit-card-edit-expiry-month').val(); 29 var year = $('#anet-credit-card-edit-expiry-year').val(); 30 // Check if card number is masked (starts with 'XXXX') 31 const isCardNumberMasked = cardNumber.startsWith('XXXX'); 32 // Validate card number (12-16 digits) 33 if (cardNumber === '' || (!isCardNumberMasked && !/^\d{12,16}$/.test(cardNumber))) { 34 $error.text('Please enter a valid credit card number (12-16 digits).').show(); 35 $('#anet-credit-card-edit-card-number').focus(); 36 return false; 37 } 38 // Expiry: both month and year must be selected 39 if (!month || !year) { 40 $error.text('Please select both expiry month and year.').show(); 41 if (!month) { 42 $('#anet-credit-card-edit-expiry-month').focus(); 43 } else { 44 $('#anet-credit-card-edit-expiry-year').focus(); 45 } 46 return false; 47 } 48 // Expiry must not be in the past 49 var now = new Date(); 50 var thisMonth = now.getMonth() + 1; 51 var thisYear = now.getFullYear(); 52 var expMonth = parseInt(month, 10); 53 var expYear = parseInt(year, 10); 54 if (expYear < thisYear || (expYear === thisYear && expMonth < thisMonth)) { 55 $error.text('The expiry date cannot be in the past.').show(); 56 $('#anet-credit-card-edit-expiry-month').focus(); 57 return false; 58 } 59 $('#anet-credit-card-edit-form form').submit(); 60 }); 61});
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.