1/*global wc_tokenization_form_params */ 2jQuery( function( $ ) { 3 4 /** 5 * WCTokenizationForm class. 6 */ 7 var TokenizationForm = function( $target ) { 8 this.$target = $target; 9 this.$formWrap = $target.closest( '.payment_box' ); 10 11 // Params. 12 this.params = $.extend( {}, { 13 'is_registration_required': false, 14 'is_logged_in' : false 15 }, wc_tokenization_form_params ); 16 17 // Bind functions to this. 18 this.onDisplay = this.onDisplay.bind( this ); 19 this.hideForm = this.hideForm.bind( this ); 20 this.showForm = this.showForm.bind( this ); 21 this.showSaveNewCheckbox = this.showSaveNewCheckbox.bind( this ); 22 this.hideSaveNewCheckbox = this.hideSaveNewCheckbox.bind( this ); 23 24 // When a radio button is changed, make sure to show/hide our new CC info area. 25 this.$target.on( 26 'click change', 27 ':input.woocommerce-SavedPaymentMethods-tokenInput', 28 { tokenizationForm: this }, 29 this.onTokenChange 30 ); 31 32 // OR if create account is checked. 33 $( 'input#createaccount' ).on( 'change', { tokenizationForm: this }, this.onCreateAccountChange ); 34 35 // First display. 36 this.onDisplay(); 37 }; 38 39 TokenizationForm.prototype.onDisplay = function() { 40 // Make sure a radio button is selected if there is no is_default for this payment method.. 41 if ( 0 === $( ':input.woocommerce-SavedPaymentMethods-tokenInput:checked', this.$target ).length ) { 42 $( ':input.woocommerce-SavedPaymentMethods-tokenInput:last', this.$target ).prop( 'checked', true ); 43 } 44 45 // Don't show the "use new" radio button if we only have one method.. 46 if ( 0 === this.$target.data( 'count' ) ) { 47 $( '.woocommerce-SavedPaymentMethods-new', this.$target ).remove(); 48 } 49 50 // Hide "save card" if "Create Account" is not checked and registration is not forced. 51 var hasCreateAccountCheckbox = 0 < $( 'input#createaccount' ).length, 52 createAccount = hasCreateAccountCheckbox && $( 'input#createaccount' ).is( ':checked' ); 53 54 if ( createAccount || this.params.is_logged_in || this.params.is_registration_required ) { 55 this.showSaveNewCheckbox(); 56 } else { 57 this.hideSaveNewCheckbox(); 58 } 59 60 // Trigger change event 61 $( ':input.woocommerce-SavedPaymentMethods-tokenInput:checked', this.$target ).trigger( 'change' ); 62 }; 63 64 TokenizationForm.prototype.onTokenChange = function( event ) { 65 if ( 'new' === $( this ).val() ) { 66 event.data.tokenizationForm.showForm(); 67 event.data.tokenizationForm.showSaveNewCheckbox(); 68 } else { 69 event.data.tokenizationForm.hideForm(); 70 event.data.tokenizationForm.hideSaveNewCheckbox(); 71 } 72 }; 73 74 TokenizationForm.prototype.onCreateAccountChange = function( event ) { 75 if ( $( this ).is( ':checked' ) ) { 76 event.data.tokenizationForm.showSaveNewCheckbox(); 77 } else { 78 event.data.tokenizationForm.hideSaveNewCheckbox(); 79 } 80 }; 81 82 TokenizationForm.prototype.hideForm = function() { 83 $( '.wc-payment-form', this.$formWrap ).hide(); 84 }; 85 86 TokenizationForm.prototype.showForm = function() { 87 $( '.wc-payment-form', this.$formWrap ).show(); 88 }; 89 90 TokenizationForm.prototype.showSaveNewCheckbox = function() { 91 $( '.woocommerce-SavedPaymentMethods-saveNew', this.$formWrap ).show(); 92 }; 93 94 TokenizationForm.prototype.hideSaveNewCheckbox = function() { 95 $( '.woocommerce-SavedPaymentMethods-saveNew', this.$formWrap ).hide(); 96 }; 97 98 /** 99 * Function to call wc_product_gallery on jquery selector. 100 */ 101 $.fn.wc_tokenization_form = function( args ) { 102 new TokenizationForm( this, args ); 103 return this; 104 }; 105 106 /** 107 * Initialize. 108 */ 109 $( document.body ).on( 'updated_checkout wc-credit-card-form-init', function() { 110 // Loop over gateways with saved payment methods 111 var $saved_payment_methods = $( 'ul.woocommerce-SavedPaymentMethods' ); 112 113 $saved_payment_methods.each( function() { 114 $( this ).wc_tokenization_form(); 115 } ); 116 } ); 117} );
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.