1/* global sumosubs_single_product_params */ 2 3jQuery( function ( $ ) { 4 // sumosubs_single_product_params is required to continue, ensure the object exists 5 if ( typeof sumosubs_single_product_params === 'undefined' ) { 6 return false; 7 } 8 9 /** 10 * Check if a node is blocked for processing. 11 * 12 * @param {JQuery Object} $node 13 * @return {bool} True if the DOM Element is UI Blocked, false if not. 14 */ 15 var is_blocked = function ( $node ) { 16 return $node.is( '.processing' ) || $node.parents( '.processing' ).length; 17 }; 18 19 /** 20 * Block a node visually for processing. 21 * 22 * @param {JQuery Object} $node 23 */ 24 var block = function ( $node ) { 25 if ( !is_blocked( $node ) ) { 26 $node.addClass( 'processing' ).block( { 27 message: null, 28 overlayCSS: { 29 background: '#fff', 30 opacity: 0.6 31 } 32 } ); 33 } 34 }; 35 36 /** 37 * Unblock a node after processing is complete. 38 * 39 * @param {JQuery Object} $node 40 */ 41 var unblock = function ( $node ) { 42 $node.removeClass( 'processing' ).unblock(); 43 }; 44 45 var $product_div = $( '.summary, .entry-summary' ).closest( 'div' ); 46 var $product_variation_div = $( '.variations_form' ).closest( 'form' ); 47 48 var variation_form = { 49 $form: $( '.variations_form' ), 50 init: function () { 51 if ( 'from-plugin' === sumosubs_single_product_params.variation_data_template ) { 52 $( document ).on( 'change', '.variations select', this.legacy.toggleVariations ); 53 $( document ).on( 'found_variation.wc-variation-form', { variationForm: this }, this.legacy.onFoundVariation ); 54 $( document ).on( 'click.wc-variation-form', '.reset_variations', { variationForm: this }, this.legacy.onResetVariation ); 55 } else { 56 $( document ).on( 'found_variation.wc-variation-form', this.onFoundVariation ); 57 $( document ).on( 'reset_data', this.onResetVariation ); 58 } 59 }, 60 onFoundVariation: function ( evt, variation ) { 61 variation_form.onResetVariation(); 62 63 if ( variation.sumosubs_plan_message ) { 64 variation_form.$form.find( '.woocommerce-variation-add-to-cart' ).before( variation.sumosubs_plan_message ); 65 } 66 67 if ( variation.sumosubs_add_to_cart_label ) { 68 variation_form.$form.find( '.single_add_to_cart_button' ).addClass( 'sumosubs_single_variation_subscribe_button' ).text( variation.sumosubs_add_to_cart_label ); 69 } 70 71 if ( variation.sumosubs_restricted_message ) { 72 variation_form.$form.find( '.woocommerce-variation-add-to-cart' ).before( variation.sumosubs_restricted_message ); 73 } 74 75 if ( variation.sumosubs_optional_plan_fields_for_user ) { 76 variation_form.$form.find( '.woocommerce-variation-add-to-cart' ).before( variation.sumosubs_optional_plan_fields_for_user ); 77 } 78 79 if ( variation.sumosubs_synced_next_payment_date ) { 80 variation_form.$form.find( '.woocommerce-variation-add-to-cart' ).after( variation.sumosubs_synced_next_payment_date ); 81 } 82 }, 83 onResetVariation: function () { 84 if ( variation_form.$form.find( '.sumosubs_plan_message' ).length ) { 85 variation_form.$form.find( '.sumosubs_plan_message' ).remove(); 86 } 87 88 if ( variation_form.$form.find( '#sumosubs_restricted_message' ).length ) { 89 variation_form.$form.find( '#sumosubs_restricted_message' ).remove(); 90 } 91 92 if ( variation_form.$form.find( '.sumosubs_subscribe_optional_trial_r_signup_fields' ).length ) { 93 variation_form.$form.find( '.sumosubs_subscribe_optional_trial_r_signup_fields' ).remove(); 94 } 95 96 if ( variation_form.$form.find( '#sumosubs_initial_synced_payment_date' ).length ) { 97 variation_form.$form.find( '#sumosubs_initial_synced_payment_date' ).remove(); 98 } 99 100 $( '.single_add_to_cart_button' ).removeClass( 'sumosubs_single_variation_subscribe_button' ).text( sumosubs_single_product_params.default_add_to_cart_text ); 101 }, 102 legacy: { 103 getSingleAddToCartVariationData: function () { 104 var $hidden_datas = $( 'form' ).find( '#sumosubs_single_variation_data' ).data(); 105 106 if ( 'undefined' !== typeof $hidden_datas ) { 107 var beforeVariationData = '', 108 afterVariationData = ''; 109 110 $.each( $hidden_datas, function ( context, data ) { 111 switch ( context ) { 112 case 'sumosubs_add_to_cart_label_' + variation_form.legacy.variation_id: 113 $( '.single_add_to_cart_button' ).addClass( 'sumosubs_single_variation_subscribe_button' ).text( data ); 114 break; 115 case 'sumosubs_synced_next_payment_date_' + variation_form.legacy.variation_id: 116 afterVariationData += data; 117 break; 118 case 'sumosubs_plan_message_' + variation_form.legacy.variation_id: 119 case 'sumosubs_restricted_message_' + variation_form.legacy.variation_id: 120 case 'sumosubs_optional_plan_fields_for_user_' + variation_form.legacy.variation_id: 121 beforeVariationData += data; 122 } 123 } ); 124
125 if ( '' !== beforeVariationData || '' !== afterVariationData ) { 126 if ( '' !== beforeVariationData ) { 127 $( 'span#sumosubs_before_single_variation' ).html( beforeVariationData ); 128 } 129 if ( '' !== afterVariationData ) { 130 $( 'span#sumosubs_after_single_variation' ).html( afterVariationData ); 131 } 132 } 133 } 134 }, 135 onFoundVariation: function ( evt, variation ) { 136 variation_form.legacy.variation_id = variation.variation_id; 137 variation_form.legacy.onResetVariation(); 138 139 if ( '' !== variation_form.legacy.variation_id ) { 140 variation_form.legacy.getSingleAddToCartVariationData(); 141 } 142 }, 143 toggleVariations: function () { 144 variation_form.legacy.variation_id = $( 'input[name="variation_id"]' ).val(); 145 146 if ( '' !== variation_form.legacy.variation_id ) { 147 $.each( $( 'form' ).find( '#sumosubs_single_variations' ).data( 'variations' ), function ( index, variation_id ) { 148 if ( variation_id == variation_form.legacy.variation_id ) { 149 variation_form.legacy.getSingleAddToCartVariationData(); 150 } 151 } ); 152 } else { 153 variation_form.legacy.onResetVariation(); 154 } 155 }, 156 onResetVariation: function () { 157 $( 'span#sumosubs_before_single_variation, span#sumosubs_after_single_variation' ).html( '' ); 158 $( '.single_add_to_cart_button' ).removeClass( 'sumosubs_single_variation_subscribe_button' ).text( sumosubs_single_product_params.default_add_to_cart_text ); 159 } 160 }, 161 }; 162 163 var single_product = { 164 /** 165 * Init single product 166 */ 167 init: function () { 168 this.populate(); 169 170 $( document ).on( 'click', '#sumosubs_subscribe_optional_trial', this.toggleOptionalPlanSubscribedByUser ); 171 $( document ).on( 'click', '#sumosubs_subscribe_optional_signup', this.toggleOptionalPlanSubscribedByUser ); 172 variation_form.init(); 173 }, 174 populate: function ( id, type ) { 175 id = id || sumosubs_single_product_params.product_id; 176 type = type || sumosubs_single_product_params.product_type; 177 178 single_product.product_id = id; 179 single_product.product_type = type; 180 181 single_product.block_field = $product_div; 182 single_product.html_plan_field = 'p.price'; 183 single_product.default_plan = $( 'p.price' ).html(); 184 185 if ( single_product.product_type === 'variation' ) { 186 single_product.block_field = $product_variation_div; 187 single_product.html_plan_field = 'span.price'; 188 single_product.default_plan = $( 'div.woocommerce-variation-price, span.price' ).html(); 189 } 190 }, 191 toggleOptionalPlanSubscribedByUser: function ( evt ) { 192 var $this = $( evt.currentTarget ); 193 194 if ( 'undefined' === typeof $this.data( 'product_id' ) ) { 195 return false; 196 } 197 198 single_product.populate( $this.data( 'product_id' ), $this.data( 'product_type' ) ); 199 single_product.saveSubscribedOptionalPlan(); 200 }, 201 saveSubscribedOptionalPlan: function () { 202 $.blockUI.defaults.overlayCSS.cursor = 'wait'; 203 block( single_product.block_field ); 204 205 $.ajax( { 206 type: 'POST', 207 url: sumosubs_single_product_params.wp_ajax_url, 208 dataType: 'json', 209 data: { 210 action: 'sumosubscription_get_subscribed_optional_plans_by_user', 211 security: sumosubs_single_product_params.get_product_nonce, 212 product_id: single_product.product_id, 213 selected_plans: Array( 214 $( '#sumosubs_subscribe_optional_trial' ).is( ':checked' ) ? $( '#sumosubs_subscribe_optional_trial' ).data( 'plan' ) : '', 215 $( '#sumosubs_subscribe_optional_signup' ).is( ':checked' ) ? $( '#sumosubs_subscribe_optional_signup' ).data( 'plan' ) : '' 216 ) 217 }, 218 success: function ( data ) { 219 if ( data === null ) { 220 $( single_product.html_plan_field ).html( single_product.default_plan ); 221 } else { 222 if ( data.subscribed_plan !== '' ) { 223 if ( $( 'span.sumosubs_plan_message' ).length > 0 ) { 224 $( 'span.sumosubs_plan_message' ).html( data.subscribed_plan ); 225 } 226 } 227 if ( data.next_payment_sync_on !== '' ) { 228 $( 'p#sumosubs_initial_synced_payment_date' ).html( data.next_payment_sync_on ) 229 } 230 } 231 }, 232 complete: function () { 233 unblock( single_product.block_field ); 234 } 235 } ); 236 }, 237 }; 238 239 single_product.init(); 240} );
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.