131 lines
2.8 KiB
JavaScript
131 lines
2.8 KiB
JavaScript
window.GFToken = null;
|
|
|
|
( function( $ ) {
|
|
|
|
GFToken = function( args ) {
|
|
|
|
for ( var prop in args ) {
|
|
if ( args.hasOwnProperty( prop ) )
|
|
this[prop] = args[prop];
|
|
}
|
|
|
|
this.form = $( '#gform_' + this.formId );
|
|
|
|
this.init = function() {
|
|
|
|
var GFTokenObj = this;
|
|
|
|
this.tokens = {};
|
|
|
|
/* Initialize spinner. */
|
|
if ( ! this.isAjax )
|
|
gformInitSpinner( this.formId );
|
|
|
|
/* If multipage form, run on gform_page_loaded. */
|
|
if ( this.hasPages ) {
|
|
|
|
$( document ).bind( 'gform_page_loaded', function( event, form_id, current_page ) {
|
|
|
|
if ( form_id != GFTokenObj.formId)
|
|
return;
|
|
|
|
if ( current_page != GFTokenObj.pageCount)
|
|
GFTokenObj.saveEntryData();
|
|
|
|
} );
|
|
|
|
}
|
|
|
|
this.form.submit( function() {
|
|
GFTokenObj.onSubmit();
|
|
} );
|
|
|
|
};
|
|
|
|
this.onSubmit = function() {
|
|
|
|
if ( this.form.data('gftokensubmitting') ) {
|
|
return;
|
|
} else {
|
|
event.preventDefault();
|
|
this.form.data( 'gftokensubmitting', true );
|
|
}
|
|
|
|
this.saveEntryData();
|
|
this.processTokens();
|
|
|
|
}
|
|
|
|
this.processTokens = function() {
|
|
|
|
/* Process feeds. */
|
|
for ( var feed_id in this.feeds ) {
|
|
|
|
this.active_feed = this.feeds[feed_id];
|
|
|
|
/* Create new feed object so we can store the billing information. */
|
|
var feed = {
|
|
'billing_fields': {},
|
|
'id': this.active_feed.id,
|
|
'name': this.active_feed.name
|
|
};
|
|
|
|
/* Add billing information to feed object. */
|
|
for ( var billing_field in this.active_feed.billing_fields ) {
|
|
|
|
field_id = this.active_feed.billing_fields[ billing_field ];
|
|
feed.billing_fields[ billing_field ] = this.entry_data[ field_id ];
|
|
|
|
}
|
|
|
|
/* Get credit card token response. */
|
|
window[ this.callback ].createToken( feed, this );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
this.saveEntryData = function() {
|
|
|
|
var GFPaymentObj = this,
|
|
input_prefix = 'input_' + this.formId + '_';
|
|
|
|
if ( ! this.entry_data )
|
|
this.entry_data = {};
|
|
|
|
this.form.find( 'input[id^="' + input_prefix + '"], select[id^="' + input_prefix + '"], textarea[id^="' + input_prefix + '"]' ).each( function() {
|
|
|
|
var input_id = $( this ).attr( 'id' ).replace( input_prefix, '' ).replace( '_', '.' );
|
|
|
|
if ( $.inArray( input_id, GFPaymentObj.fields ) >= 0 )
|
|
GFPaymentObj.entry_data[ input_id ] = $( this ).val();
|
|
|
|
} );
|
|
|
|
}
|
|
|
|
this.saveToken = function( token ) {
|
|
|
|
/* Add token response to tokens array. */
|
|
this.tokens[ this.active_feed.id ] = {
|
|
'feed_id': this.active_feed.id,
|
|
'response': token
|
|
};
|
|
|
|
if ( this.tokens.length == this.feeds.length ) {
|
|
|
|
/* Add tokens to form. */
|
|
this.form.find( this.responseField ).val( $.toJSON( this.tokens ) );
|
|
|
|
/* Submit the form. */
|
|
this.form.submit();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
this.init();
|
|
|
|
}
|
|
|
|
} )( jQuery ); |