| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- /*global wc_tokenization_form_params */
- jQuery( function( $ ) {
- /**
- * WCTokenizationForm class.
- */
- var TokenizationForm = function( $target ) {
- this.$target = $target;
- this.$formWrap = $target.closest( '.payment_box' );
- // Params.
- this.params = $.extend( {}, {
- 'is_registration_required': false,
- 'is_logged_in' : false
- }, wc_tokenization_form_params );
- // Bind functions to this.
- this.onDisplay = this.onDisplay.bind( this );
- this.hideForm = this.hideForm.bind( this );
- this.showForm = this.showForm.bind( this );
- this.showSaveNewCheckbox = this.showSaveNewCheckbox.bind( this );
- this.hideSaveNewCheckbox = this.hideSaveNewCheckbox.bind( this );
- // When a radio button is changed, make sure to show/hide our new CC info area.
- this.$target.on(
- 'click change',
- ':input.woocommerce-SavedPaymentMethods-tokenInput',
- { tokenizationForm: this },
- this.onTokenChange
- );
- // OR if create account is checked.
- $( 'input#createaccount' ).on( 'change', { tokenizationForm: this }, this.onCreateAccountChange );
- // First display.
- this.onDisplay();
- };
- TokenizationForm.prototype.onDisplay = function() {
- // Make sure a radio button is selected if there is no is_default for this payment method..
- if ( 0 === $( ':input.woocommerce-SavedPaymentMethods-tokenInput:checked', this.$target ).length ) {
- $( ':input.woocommerce-SavedPaymentMethods-tokenInput:last', this.$target ).prop( 'checked', true );
- }
- // Don't show the "use new" radio button if we only have one method..
- if ( 0 === this.$target.data( 'count' ) ) {
- $( '.woocommerce-SavedPaymentMethods-new', this.$target ).remove();
- }
- // Hide "save card" if "Create Account" is not checked and registration is not forced.
- var hasCreateAccountCheckbox = 0 < $( 'input#createaccount' ).length,
- createAccount = hasCreateAccountCheckbox && $( 'input#createaccount' ).is( ':checked' );
- if ( createAccount || this.params.is_logged_in || this.params.is_registration_required ) {
- this.showSaveNewCheckbox();
- } else {
- this.hideSaveNewCheckbox();
- }
- // Trigger change event
- $( ':input.woocommerce-SavedPaymentMethods-tokenInput:checked', this.$target ).trigger( 'change' );
- };
- TokenizationForm.prototype.onTokenChange = function( event ) {
- if ( 'new' === $( this ).val() ) {
- event.data.tokenizationForm.showForm();
- event.data.tokenizationForm.showSaveNewCheckbox();
- } else {
- event.data.tokenizationForm.hideForm();
- event.data.tokenizationForm.hideSaveNewCheckbox();
- }
- };
- TokenizationForm.prototype.onCreateAccountChange = function( event ) {
- if ( $( this ).is( ':checked' ) ) {
- event.data.tokenizationForm.showSaveNewCheckbox();
- } else {
- event.data.tokenizationForm.hideSaveNewCheckbox();
- }
- };
- TokenizationForm.prototype.hideForm = function() {
- $( '.wc-payment-form', this.$formWrap ).hide();
- };
- TokenizationForm.prototype.showForm = function() {
- $( '.wc-payment-form', this.$formWrap ).show();
- };
- TokenizationForm.prototype.showSaveNewCheckbox = function() {
- $( '.woocommerce-SavedPaymentMethods-saveNew', this.$formWrap ).show();
- };
- TokenizationForm.prototype.hideSaveNewCheckbox = function() {
- $( '.woocommerce-SavedPaymentMethods-saveNew', this.$formWrap ).hide();
- };
- /**
- * Function to call wc_product_gallery on jquery selector.
- */
- $.fn.wc_tokenization_form = function( args ) {
- new TokenizationForm( this, args );
- return this;
- };
- /**
- * Initialize.
- */
- $( document.body ).on( 'updated_checkout wc-credit-card-form-init', function() {
- // Loop over gateways with saved payment methods
- var $saved_payment_methods = $( 'ul.woocommerce-SavedPaymentMethods' );
- $saved_payment_methods.each( function() {
- $( this ).wc_tokenization_form();
- } );
- } );
- } );
|