PageSourceSearch

https://berocket.com/wp-content/plugins/sumosubscriptions/assets/js/frontend/single-product.js?ver=17.3.0

js berocket.com collected 2026-10-02 06:21:45 UTC 8,906 bytes, 240 lines download raw bytes

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.