1/* global sumosubs_checkout_params */ 2 3jQuery( function( $ ) { 4 // sumosubs_checkout_params is required to continue, ensure the object exists 5 if ( typeof sumosubs_checkout_params === 'undefined' ) { 6 return false; 7 } 8 9 var block_wrapper = function() { 10 if ( 'cart' === sumosubs_checkout_params.current_page ) { 11 return $( 'div.cart_totals' ); 12 } else { 13 return $( '.woocommerce-checkout-payment, .woocommerce-checkout-review-order-table' ).closest( 'form' ); 14 } 15 }; 16 17 var is_blocked = function( $node ) { 18 return $node.is( '.processing' ) || $node.parents( '.processing' ).length; 19 }; 20 21 /** 22 * Block a node visually for processing. 23 * 24 * @param {JQuery Object} $node 25 */ 26 var block = function( $node ) { 27 if ( ! is_blocked( $node ) ) { 28 $node.addClass( 'processing' ).block( { 29 message : null, 30 overlayCSS : { 31 background : '#fff', 32 opacity : 0.6 33 } 34 } ); 35 } 36 }; 37 38 /** 39 * Unblock a node after processing is complete. 40 * 41 * @param {JQuery Object} $node 42 */ 43 var unblock = function( $node ) { 44 $node.removeClass( 'processing' ).unblock(); 45 }; 46 47 var checkout = { 48 /** 49 * Manage Cart/Checkout page events. 50 */ 51 sync : false, 52 isSubscribed : false, 53 subscriptionDuration : null, 54 subscriptionDurationValue : null, 55 subscriptionRecurring : null, 56 init : function() { 57 this.onPageLoad(); 58 59 $( document ).on( 'change', '#sumo_order_subscription_status', this.toggleOrderSubscription ); 60 $( document ).on( 'change', '#sumo_order_subscription_duration', this.toggleOrderSubscriptionDuration ); 61 $( document ).on( 'change', '#sumo_order_subscription_duration_value', this.toggleOrderSubscriptionDurationValue ); 62 $( document ).on( 'change', '#sumo_order_subscription_recurring', this.toggleOrderSubscriptionRecurring ); 63 $( document ).on( 'updated_wc_div', this.mayBeDisplayOrderSubscription ); 64 $( document ).on( 'updated_cart_totals', this.mayBeDisplayOrderSubscription ); 65 }, 66 onPageLoad : function() { 67 if ( 'checkout' === sumosubs_checkout_params.current_page ) { 68 checkout.sync = true; 69 } 70 71 this.getOrderSubscription(); 72 }, 73 toggleOrderSubscription : function( evt ) { 74 evt.preventDefault(); 75 checkout.sync = false; 76 checkout.getOrderSubscription(); 77 }, 78 toggleOrderSubscriptionDuration : function( evt ) { 79 evt.preventDefault(); 80 var duration_options = { }; 81 var $elements = $( '#sumo_order_subscription_duration_value' ); 82 $elements.empty(); 83 84 switch ( $( evt.currentTarget ).val() ) { 85 case 'W': 86 duration_options = sumosubs_checkout_params.subscription_week_duration_options; 87 break; 88 case 'M': 89 duration_options = sumosubs_checkout_params.subscription_month_duration_options; 90 break; 91 case 'Y': 92 duration_options = sumosubs_checkout_params.subscription_year_duration_options; 93 break; 94 default : 95 duration_options = sumosubs_checkout_params.subscription_day_duration_options; 96 break; 97 } 98 99 $.each( duration_options, function( value, key ) { 100 $elements.append( $( '<option></option>' ).attr( 'value', value ).text( key ) ); 101 } ); 102 103 checkout.updateCheckout(); 104 }, 105 toggleOrderSubscriptionDurationValue : function( evt ) { 106 evt.preventDefault(); 107 checkout.updateCheckout(); 108 }, 109 toggleOrderSubscriptionRecurring : function( evt ) { 110 evt.preventDefault(); 111 checkout.updateCheckout(); 112 }, 113 mayBeDisplayOrderSubscription : function() { 114 $( '.sumo_order_subscription_subscribe_duration' ).slide
114Up(); 115 $( '.sumo_order_subscription_subscribe_length' ).slideUp(); 116 117 if ( $( '#sumo_order_subscription_status' ).is( ':checked' ) ) { 118 $( '.sumo_order_subscription_subscribe_duration' ).slideDown(); 119 $( '.sumo_order_subscription_subscribe_length' ).slideDown(); 120 } 121 }, 122 getOrderSubscription : function() { 123 checkout.mayBeDisplayOrderSubscription(); 124 checkout.updateCheckout(); 125 }, 126 populateSubscriptionPlan : function() { 127 checkout.isSubscribed = $( '#sumo_order_subscription_status' ).is( ':checked' ); 128 checkout.subscriptionDuration = sumosubs_checkout_params.default_order_subscription_duration; 129 checkout.subscriptionDurationValue = sumosubs_checkout_params.default_order_subscription_duration_value; 130 checkout.subscriptionRecurring = sumosubs_checkout_params.default_order_subscription_installment; 131 132 if ( sumosubs_checkout_params.can_user_select_plan ) { 133 checkout.subscriptionDuration = $( '#sumo_order_subscription_duration' ).val(); 134 checkout.subscriptionDurationValue = $( '#sumo_order_subscription_duration_value' ).val(); 135 checkout.subscriptionRecurring = 'undefined' === typeof $( '#sumo_order_subscription_recurring' ).val() ? '0' : $( '#sumo_order_subscription_recurring' ).val(); 136 } 137 }, 138 updateCheckout : function() { 139 checkout.populateSubscriptionPlan(); 140 141 $.blockUI.defaults.overlayCSS.cursor = 'wait'; 142 block( block_wrapper() ); 143 144 $.ajax( { 145 type : 'POST', 146 url : sumosubs_checkout_params.wp_ajax_url, 147 dataType : 'text', 148 async : sumosubs_checkout_params.load_ajax_synchronously ? false : ( checkout.sync ? false : true ), 149 data : { 150 action : 'sumosubscription_checkout_order_subscription', 151 security : sumosubs_checkout_params.update_order_subscription_nonce, 152 subscribed : checkout.isSubscribed ? 'yes' : 'no', 153 subscription_duration : checkout.subscriptionDuration, 154 subscription_duration_value : checkout.subscriptionDurationValue, 155 subscription_recurring : checkout.subscriptionRecurring 156 }, 157 success : function() { 158 if ( 'checkout' === sumosubs_checkout_params.current_page ) { 159 checkout.forceRenderSignupFormIfGuest(); 160 161 $( document.body ).trigger( 'update_checkout' ); 162 } 163 }, 164 complete : function() { 165 unblock( block_wrapper() ); 166 167 if ( $( '.woocommerce-cart-form' ).length && 'cart' === sumosubs_checkout_params.current_page ) { 168 $( document.body ).trigger( 'wc_update_cart' ); 169 } 170 171 checkout.clearCache(); 172 } 173 } ); 174 }, 175 forceRenderSignupFormIfGuest : function() { 176 if ( sumosubs_checkout_params.is_user_logged_in ) { 177 return false; 178 } 179 180 if ( $( 'p.create-account' ).length ) { 181 $( 'p.create-account' ).show(); 182 $( 'div.create-account' ).slideUp(); 183 } 184 185 if ( sumosubs_checkout_params.maybe_prevent_from_hiding_guest_signup_form && sumosubs_checkout_params.can_user_subscribe_for_order ) { 186 $( 'div.create-account' ).slideUp(); 187 } 188 189 if ( checkout.isSubscribed ) { 190 if ( $( 'p.create-account' ).length ) { 191 $( 'p.create-account' ).hide(); 192 } 193 if ( $( 'div.create-account' ).length ) { 194 $( 'div.create-account' ).slideDown(); 195 } 196 } 197 }, 198 clearCache : function() { 199 checkout.sync = false; 200 checkout.isSubscribed = false; 201 checkout.subscriptionDuration = null; 202 checkout.subscriptionDurationValue = null; 203 checkout.subscriptionRecurring = null; 204 } 205 }; 206 207 //may be Order Subscription is subscribed. 208 if ( sumosubs_checkout_params.can_user_subscribe_for_order ) { 209 checkout.init(); 210 } 211} );
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.