{"version":3,"sources":["s4wc.min.js"],"names":["Stripe","setPublishableKey","s4wc_info","publishableKey","jQuery","$","initCCForm","$ccForm","$ccNumber","find","$ccExpiry","$ccCvc","hasCard","savedCardsEnabled","hide","$form","on","val","slideDown","slideUp","savedFieldValues","number","attr","classes","expiry","cvc","stripeFormHandler","is","length","cardExpiry","payment","name","billing_name","stripeData","exp_month","month","exp_year","year","address_line1","billing_address_1","address_line2","billing_address_2","address_city","billing_city","address_state","billing_state","address_zip","billing_postcode","address_country","billing_country","stripeFormValidator","createToken","stripeResponseHandler","status","response","error","remove","before","message","append","id","$ccSave","prop","submit","errors","fieldValidator","i","len","field","type","validateCardNumber","push","validateCardExpiry","validateCardCVC","cardType","trigger"],"mappings":"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","file":"s4wc.min.js","sourcesContent":["/* global Stripe, s4wc_info */\n\n// Set API key\nStripe.setPublishableKey( s4wc_info.publishableKey );\n\njQuery( function ( $ ) {\n var $form = $( 'form.checkout, form#order_review' ),\n savedFieldValues = {},\n $ccForm, $ccNumber, $ccExpiry, $ccCvc;\n\n function initCCForm () {\n $ccForm = $( '#s4wc-cc-form' );\n $ccNumber = $ccForm.find( '#s4wc-card-number' );\n $ccExpiry = $ccForm.find( '#s4wc-card-expiry' );\n $ccCvc = $ccForm.find( '#s4wc-card-cvc' );\n\n // Hide the CC form if the user has a saved card.\n if ( s4wc_info.hasCard && s4wc_info.savedCardsEnabled ) {\n $ccForm.hide();\n }\n\n // Toggle new card form\n $form.on( 'change', 'input[name=\"s4wc_card\"]', function () {\n\n if ( $( 'input[name=\"s4wc_card\"]:checked' ).val() === 'new' ) {\n $ccForm.slideDown( 200 );\n } else {\n $ccForm.slideUp( 200 );\n }\n });\n\n // Add in lost data\n if ( savedFieldValues.number ) {\n $ccNumber.val( savedFieldValues.number.val ).attr( 'class', savedFieldValues.number.classes );\n }\n\n if ( savedFieldValues.expiry ) {\n $ccExpiry.val( savedFieldValues.expiry.val );\n }\n\n if ( savedFieldValues.cvc ) {\n $ccCvc.val( savedFieldValues.cvc.val );\n }\n }\n\n function stripeFormHandler () {\n if ( $( '#payment_method_s4wc' ).is( ':checked' ) && ( ! $( 'input[name=\"s4wc_card\"]' ).length || $( 'input[name=\"s4wc_card\"]:checked' ).val() === 'new' ) ) {\n\n if ( ! $( 'input.stripe_token' ).length ) {\n var cardExpiry = $ccExpiry.payment( 'cardExpiryVal' ),\n name = ( $( '#billing_first_name' ).val() || $( '#billing_last_name' ).val() ) ? $( '#billing_first_name' ).val() + ' ' + $( '#billing_last_name' ).val() : s4wc_info.billing_name;\n\n var stripeData = {\n number : $ccNumber.val() || '',\n cvc : $ccCvc.val() || '',\n exp_month : cardExpiry.month || '',\n exp_year : cardExpiry.year || '',\n name : $( '.s4wc-billing-name' ).val() || name || '',\n address_line1 : $( '#billing_address_1' ).val() || s4wc_info.billing_address_1 || '',\n address_line2 : $( '#billing_address_2' ).val() || s4wc_info.billing_address_2 || '',\n address_city : $( '#billing_city' ).val() || s4wc_info.billing_city || '',\n address_state : $( '#billing_state' ).val() || s4wc_info.billing_state || '',\n address_zip : $( '.s4wc-billing-zip' ).val() || $( '#billing_postcode' ).val() || s4wc_info.billing_postcode || '',\n address_country : $( '#billing_country' ).val() || s4wc_info.billing_country || ''\n };\n\n // Validate form fields, create token if form is valid\n if ( stripeFormValidator( stripeData ) ) {\n Stripe.createToken( stripeData, stripeResponseHandler );\n return false;\n }\n }\n }\n\n return true;\n }\n\n function stripeResponseHandler ( status, response ) {\n\n if ( response.error ) {\n // show the errors on the form\n $( '.payment-errors, .stripe_token, .form_errors' ).remove();\n $ccForm.before( '' + response.error.message + '' );\n\n } else {\n // insert the token into the form so it gets submitted to the server\n $form.append( '' );\n\n // tell the server if we want to save the card\n var $ccSave = $( '#s4wc-cc-form #s4wc-save-card' ).prop('checked');\n $form.append( '' );\n $form.submit();\n }\n }\n\n function stripeFormValidator ( stripeData ) {\n\n // Validate form fields\n var errors = fieldValidator( stripeData );\n\n // If there are errors, display them using wc_add_notice on the backend\n if ( errors.length ) {\n\n $( '.stripe_token, .form_errors' ).remove();\n\n for ( var i = 0, len = errors.length; i < len; i++ ) {\n var field = errors[i].field,\n type = errors[i].type;\n\n $form.append( '' );\n }\n\n $form.append( '' );\n\n return false;\n }\n\n // Create the token if we don't have any errors\n else {\n // Clear out notices\n $form.find( '.woocommerce-error' ).remove();\n\n return true;\n }\n }\n\n function fieldValidator ( stripeData ) {\n var errors = [];\n\n // Card number validation\n if ( ! stripeData.number ) {\n errors.push({\n 'field' : 's4wc-card-number',\n 'type' : 'undefined'\n });\n } else if ( ! $.payment.validateCardNumber( stripeData.number ) ) {\n errors.push({\n 'field' : 's4wc-card-number',\n 'type' : 'invalid'\n });\n }\n\n // Card expiration validation\n if ( ! stripeData.exp_month || ! stripeData.exp_year ) {\n errors.push({\n 'field' : 's4wc-card-expiry',\n 'type' : 'undefined'\n });\n } else if ( ! $.payment.validateCardExpiry( stripeData.exp_month, stripeData.exp_year ) ) {\n errors.push({\n 'field' : 's4wc-card-expiry',\n 'type' : 'invalid'\n });\n }\n\n // Card CVC validation\n if ( ! stripeData.cvc ) {\n errors.push({\n 'field' : 's4wc-card-cvc',\n 'type' : 'undefined'\n });\n } else if ( ! $.payment.validateCardCVC( stripeData.cvc, $.payment.cardType( stripeData.number ) ) ) {\n errors.push({\n 'field' : 's4wc-card-cvc',\n 'type' : 'invalid'\n });\n }\n\n // Send the errors back\n return errors;\n }\n\n // Make sure the credit card form exists before we try working with it\n $( 'body' ).on( 'updated_checkout.s4wc', initCCForm ).trigger( 'updated_checkout.s4wc' );\n\n // Checkout Form\n $( 'form.checkout' ).on( 'checkout_place_order', stripeFormHandler );\n\n // Pay Page Form\n $( 'form#order_review' ).on( 'submit', stripeFormHandler );\n\n // Both Forms\n $form.on( 'keyup change', '#s4wc-card-number, #s4wc-card-expiry, #s4wc-card-cvc, input[name=\"s4wc_card\"], input[name=\"payment_method\"]', function () {\n\n // Save credit card details in case the address changes (or something else)\n savedFieldValues.number = {\n 'val' : $ccNumber.val(),\n 'classes' : $ccNumber.attr( 'class' )\n };\n savedFieldValues.expiry = {\n 'val' : $ccExpiry.val()\n };\n savedFieldValues.cvc = {\n 'val' : $ccCvc.val()\n };\n\n $( '.woocommerce_error, .woocommerce-error, .woocommerce-message, .woocommerce_message, .stripe_token, .form_errors' ).remove();\n });\n});\n"],"sourceRoot":"/source/"}