/**
* Front-end Script
*/
window.GFStripe = null;
(function($){
GFStripe = function( args ) {
for( var prop in args ) {
if( args.hasOwnProperty( prop ) )
this[prop] = args[prop];
}
this.form = null;
this.init = function() {
if( ! this.isCreditCardOnPage() )
return;
var GFStripeObj = this;
Stripe.setPublishableKey( this.apiKey );
// initialize spinner
if( ! this.isAjax )
gformInitSpinner( this.formId );
// bind Stripe functionality to submit event
$( '#gform_' + this.formId ).submit( function( event ){
if ($(this).data('gfstripesubmitting') || $('#gform_save_' + GFStripeObj.formId).val() == 1) {
return;
} else {
event.preventDefault();
$(this).data('gfstripesubmitting', true);
}
var form = $(this),
ccInputPrefix = 'input_' + GFStripeObj.formId + '_' + GFStripeObj.ccFieldId + '_',
cc = {
number: form.find( '#' + ccInputPrefix + '1' ).val(),
exp_month: form.find( '#' + ccInputPrefix + '2_month' ).val(),
exp_year: form.find( '#' + ccInputPrefix + '2_year' ).val(),
cvc: form.find( '#' + ccInputPrefix + '3' ).val(),
name: form.find( '#' + ccInputPrefix + '5').val()
};
GFStripeObj.form = form;
Stripe.card.createToken( cc, function( status, response ) {
GFStripeObj.responseHandler( status, response );
} );
} );
};
this.responseHandler = function( status, response ) {
var form = this.form,
ccInputPrefix = 'input_' + this.formId + '_' + this.ccFieldId + '_',
ccInputSuffixes = [ '1', '2_month', '2_year', '3', '5' ],
cardType = false;
// remove "name" attribute from credit card inputs
for( var i = 0; i < ccInputSuffixes.length; i++ ) {
var input = form.find( '#' + ccInputPrefix + ccInputSuffixes[i] );
if( ccInputSuffixes[i] == '1' ) {
var ccNumber = $.trim( input.val() ),
cardType = gformFindCardType( ccNumber );
if( typeof this.cardLabels[cardType] != 'undefined' )
cardType = this.cardLabels[cardType];
form.append( $( '' ).val( ccNumber.slice( -4 ) ) );
form.append( $( '' ).val( cardType ) );
}
input.attr( 'name', null );
}
// append stripe.js response
form.append( $( '' ).val( $.toJSON( response ) ) );
// submit the form
form.submit();
}
this.isLastPage = function() {
var targetPageInput = $( '#gform_target_page_number_' + this.formId );
if( targetPageInput.length > 0 )
return targetPageInput.val() == 0;
return true;
}
this.isCreditCardOnPage = function() {
var currentPage = this.getCurrentPageNumber();
// if current page is false or no credit card page number, assume this is not a multi-page form
if( ! this.ccPage || ! currentPage )
return true;
return this.ccPage == currentPage;
}
this.getCurrentPageNumber = function() {
var currentPageInput = $( '#gform_source_page_number_' + this.formId );
return currentPageInput.length > 0 ? currentPageInput.val() : false;
}
this.init();
}
})(jQuery);