1window.PMSTaxVatValidation = ( function( $, window ) { 2 3 function normalizeVatNumber( country, vatNumber ) { 4 vatNumber = String( vatNumber || '' ).trim().toUpperCase(); 5 6 if( country && vatNumber.indexOf( country ) === 0 ) 7 vatNumber = vatNumber.substring( country.length ); 8 9 return vatNumber; 10 } 11 12 function getMinimumLength( country, minimumCharacters ) { 13 minimumCharacters = minimumCharacters || {}; 14 15 if( country && minimumCharacters[country] ) 16 return minimumCharacters[country]; 17 18 return minimumCharacters.default || 8; 19 } 20 21 function validate( args ) { 22 var deferred = $.Deferred(); 23 var country = args.country || ''; 24 var vatNumber = normalizeVatNumber( country, args.vatNumber ); 25 var minimumLength = getMinimumLength( country, args.minimumCharacters ); 26 27 if( !country || !vatNumber ) { 28 deferred.resolve({ 29 status: 'empty', 30 country: country, 31 vatNumber: vatNumber 32 }); 33 34 return deferred.promise(); 35 } 36 37 if( vatNumber.length < minimumLength ) { 38 deferred.resolve({ 39 status: 'too_short', 40 country: country, 41 vatNumber: vatNumber 42 }); 43 44 return deferred.promise(); 45 } 46 47 $.post( args.ajaxUrl, { 48 action: 'pms_tax_validate_vat', 49 pms_nonce: args.nonce || '', 50 vatNumber: vatNumber, 51 vatCountry: country 52 }, function( response ) { 53 if( !response ) { 54 deferred.resolve({ 55 status: 'invalid', 56 country: country, 57 vatNumber: vatNumber 58 }); 59 60 return; 61 } 62 63 try { 64 response = typeof response === 'string' ? JSON.parse( response ) : response; 65 } catch( error ) { 66 response = { status: 'invalid' }; 67 } 68 69 deferred.resolve({ 70 status: response.status === 'valid' ? 'valid' : 'invalid', 71 country: country, 72 vatNumber: vatNumber, 73 response: response 74 }); 75 }).fail( function() { 76 deferred.resolve({ 77 status: 'invalid', 78 country: country, 79 vatNumber: vatNumber 80 }); 81 }); 82 83 return deferred.promise(); 84 } 85 86 return { 87 normalizeVatNumber: normalizeVatNumber, 88 getMinimumLength: getMinimumLength, 89 validate: validate 90 }; 91 92})( jQuery, window );
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.