PluginProbe
CartFlows – Funnel Builder & Checkout Plugin for WooCommerce / 3.3.0
CartFlows – Funnel Builder & Checkout Plugin for WooCommerce v3.3.0
3.3.0 3.2.1 3.2.0 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.1 trunk 1.0.4 1.1.0 1.1.0.1 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 All 162 releases
← All changes | assets/js/frontend.js +444 -19 1.0.4 → 3.3.0 View file →
@@ -1,19 +1,444 @@
1 -(function($){
2 -
3 - $(document).ready(function($) {
4 -
5 - $(document).on( 'click', 'a[href*="wcf-next-step"]', function(e) {
6 -
7 - e.preventDefault();
8 -
9 - if( 'undefined' !== typeof cartflows.is_pb_preview && '1' == cartflows.is_pb_preview ) {
10 - e.stopPropagation();
11 - return;
12 - }
13 -
14 - window.location.href = cartflows.next_step;
15 -
16 - return false;
17 - });
18 - });
19 -})(jQuery);
1 +( function ( $ ) {
2 + const wcf_order_review_toggler = function () {
3 + const mobile_order_review_section = $(
4 + '.wcf-collapsed-order-review-section'
5 + ),
6 + mobile_order_review_wrap = $(
7 + '.wcf-cartflows-review-order-wrapper'
8 + ),
9 + desktop_order_review_wrap = $( '.wcf-order-wrap' );
10 +
11 + let timeout = false;
12 + const resizeEvent =
13 + 'onorientationchange' in window ? 'orientationchange' : 'resize';
14 +
15 + $( '.wcf-order-review-toggle' ).on(
16 + 'click',
17 + function wcf_show_order_summary( e ) {
18 + e.preventDefault();
19 +
20 + if ( mobile_order_review_section.hasClass( 'wcf-show' ) ) {
21 + mobile_order_review_wrap.slideUp( 400 );
22 + mobile_order_review_section.removeClass( 'wcf-show' );
23 + $( '.wcf-order-review-toggle-text' ).text(
24 + cartflows.order_review_toggle_texts.toggle_show_text
25 + );
26 + } else {
27 + mobile_order_review_wrap.slideDown( 400 );
28 + mobile_order_review_section.addClass( 'wcf-show' );
29 + $( '.wcf-order-review-toggle-text' ).text(
30 + cartflows.order_review_toggle_texts.toggle_hide_text
31 + );
32 + }
33 + }
34 + );
35 +
36 + $( window ).on( resizeEvent, function () {
37 + clearTimeout( timeout );
38 +
39 + timeout = setTimeout( function () {
40 + const width = window.innerWidth || $( window ).width();
41 +
42 + if ( width >= 769 ) {
43 + mobile_order_review_wrap.css( { display: 'none' } );
44 + mobile_order_review_wrap.removeClass( 'wcf-show' );
45 + $( '.wcf-order-review-toggle' ).removeClass( 'wcf-show' );
46 + $( '.wcf-order-review-toggle-text' ).text(
47 + cartflows.order_review_toggle_texts.toggle_show_text
48 + );
49 + }
50 + }, 200 );
51 + } );
52 +
53 + // Update checkout when shipping methods changes.
54 + mobile_order_review_wrap.on(
55 + 'change',
56 + 'select.shipping_method, input[name^="shipping_method"]',
57 + function () {
58 + /**
59 + * Uncheck all shipping radio buttons of desktop. Those will be auto updated by update_checkout action.
60 + * While performing the update checkout, it searches for the selected shipping method in whole page.
61 + */
62 + desktop_order_review_wrap
63 + .find(
64 + 'input[name^="shipping_method"][type="radio"]:checked'
65 + )
66 + .each( function () {
67 + $( this ).removeAttr( 'checked' );
68 + } );
69 +
70 + $( document.body ).trigger( 'update_checkout', {
71 + update_shipping_method: true,
72 + } );
73 + }
74 + );
75 + };
76 +
77 + function setCookie( cName, cValue, expDays ) {
78 + const date = new Date();
79 + date.setTime( date.getTime() + expDays * 24 * 60 * 60 * 1000 );
80 + const expires = 'expires=' + date.toUTCString();
81 + document.cookie = cName + '=' + cValue + '; ' + expires + '; path=/';
82 + }
83 +
84 + /* It will redirect if anyone clicked on link before ready */
85 + $( document ).on( 'click', 'a[href*="wcf-next-step"]', function ( e ) {
86 + e.preventDefault();
87 +
88 + if (
89 + 'undefined' !== typeof cartflows.is_pb_preview &&
90 + true === cartflows.is_pb_preview
91 + ) {
92 + e.stopPropagation();
93 + return;
94 + }
95 +
96 + window.location.href = cartflows.next_step;
97 +
98 + return false;
99 + } );
100 +
101 + /* Once the link is ready this will work to stop conditional propogation*/
102 + $( document ).on( 'click', '.wcf-next-step-link', function ( e ) {
103 + if (
104 + 'undefined' !== typeof cartflows.is_pb_preview &&
105 + '1' === cartflows.is_pb_preview
106 + ) {
107 + e.preventDefault();
108 + e.stopPropagation();
109 + return false;
110 + }
111 + } );
112 +
113 + // Remove css when oceanwp theme is enabled.
114 + const remove_oceanwp_custom_style = function () {
115 + if (
116 + 'OceanWP' === cartflows.current_theme &&
117 + 'default' !== cartflows.page_template
118 + ) {
119 + const style = document.getElementById( 'oceanwp-style-css' );
120 + if ( null !== style ) {
121 + style.remove();
122 + }
123 + }
124 + };
125 +
126 + const trigger_facebook_events = function () {
127 + if (
128 + 'enable' === cartflows.fb_setting.facebook_pixel_tracking &&
129 + cartflows.fb_setting.facebook_pixel_id !== ''
130 + ) {
131 + const add_payment_info_event =
132 + cartflows.fb_setting.facebook_pixel_add_payment_info;
133 + if (
134 + 'enable' === add_payment_info_event &&
135 + cartflows.is_checkout_page
136 + ) {
137 + jQuery( 'form.woocommerce-checkout' ).on(
138 + 'submit',
139 + function () {
140 + fbq(
141 + 'track',
142 + 'AddPaymentInfo',
143 + JSON.parse( cartflows.fb_add_payment_info_data )
144 + );
145 + }
146 + );
147 + } else if (
148 + cartflows.is_optin &&
149 + 'enable' === cartflows.fb_setting.facebook_pixel_optin_lead
150 + ) {
151 + jQuery( 'form.woocommerce-checkout' ).on(
152 + 'submit',
153 + function () {
154 + fbq( 'track', 'Lead', { plugin: 'CartFlows' } );
155 + }
156 + );
157 + }
158 + }
159 + };
160 +
161 + const trigger_google_events = function () {
162 + if ( cartflows.ga_setting.enable_google_analytics === 'enable' ) {
163 + if (
164 + cartflows.is_checkout_page &&
165 + 'enable' === cartflows.ga_setting.enable_add_payment_info
166 + ) {
167 + jQuery( 'form.woocommerce-checkout' ).on(
168 + 'submit',
169 + function () {
170 + gtag(
171 + 'event',
172 + 'add_payment_info',
173 + JSON.parse( cartflows.add_payment_info_data )
174 + );
175 + }
176 + );
177 + } else if (
178 + cartflows.is_optin &&
179 + 'enable' === cartflows.ga_setting.enable_optin_lead
180 + ) {
181 + jQuery( 'form.woocommerce-checkout' ).on(
182 + 'submit',
183 + function () {
184 + gtag( 'event', 'Lead', { plugin: 'CartFlows' } );
185 + }
186 + );
187 + }
188 + }
189 + };
190 +
191 + // Trigger TikTok events on form submit.
192 + const trigger_tiktok_events = function () {
193 + if (
194 + 'enable' === cartflows.tik_setting.tiktok_pixel_tracking &&
195 + cartflows.tik_setting.tiktok_pixel_id !== ''
196 + ) {
197 + /* global ttq */
198 + const add_payment_info_event =
199 + cartflows.tik_setting.enable_tiktok_add_payment_info;
200 + if (
201 + 'enable' === add_payment_info_event &&
202 + cartflows.is_checkout_page
203 + ) {
204 + jQuery( 'form.woocommerce-checkout' ).on(
205 + 'submit',
206 + function () {
207 + ttq.track(
208 + 'AddPaymentInfo',
209 + JSON.parse( cartflows.tiktok_add_payment_info_data )
210 + );
211 + }
212 + );
213 + } else if (
214 + cartflows.is_optin &&
215 + 'enable' === cartflows.tik_setting.enable_tiktok_optin_lead
216 + ) {
217 + jQuery( 'form.woocommerce-checkout' ).on(
218 + 'submit',
219 + function () {
220 + ttq.track( 'Lead', { plugin: 'CartFlows' } );
221 + }
222 + );
223 + }
224 + }
225 + };
226 +
227 + // Trigger google ads events on form submit.
228 + const trigger_google_ads_events = function () {
229 + if ( cartflows.gads_setting.google_ads_tracking === 'enable' ) {
230 + if (
231 + cartflows.is_checkout_page &&
232 + 'enable' ===
233 + cartflows.gads_setting.enable_google_ads_add_payment_info
234 + ) {
235 + jQuery( 'form.woocommerce-checkout' ).on(
236 + 'submit',
237 + function () {
238 + gtag(
239 + 'event',
240 + 'add_payment_info',
241 + JSON.parse( cartflows.add_payment_info_data )
242 + );
243 + }
244 + );
245 + } else if (
246 + cartflows.is_optin &&
247 + 'enable' === cartflows.gads_setting.enable_google_ads_optin_lead
248 + ) {
249 + jQuery( 'form.woocommerce-checkout' ).on(
250 + 'submit',
251 + function () {
252 + gtag( 'event', 'Lead', { plugin: 'CartFlows' } );
253 + }
254 + );
255 + }
256 + }
257 + };
258 +
259 + // Trigger Snapchat events on form submit.
260 + const trigger_snapchat_events = function () {
261 + if (
262 + 'enable' === cartflows.snap_settings.snapchat_pixel_tracking &&
263 + cartflows.snap_settings.snapchat_pixel_id !== ''
264 + ) {
265 + /* global snaptr */
266 + if (
267 + cartflows.is_optin &&
268 + 'enable' === cartflows.snap_settings.enable_snapchat_optin_lead
269 + ) {
270 + jQuery( 'form.woocommerce-checkout' ).on(
271 + 'submit',
272 + function () {
273 + snaptr( 'track', 'SIGN_UP', {
274 + sign_up_method: 'CartFlows Optin Lead',
275 + } );
276 + }
277 + );
278 + }
279 + }
280 + };
281 +
282 + // Trigger pinterest events on form submit.
283 + const trigger_pinterest_events = function () {
284 + if (
285 + 'enable' === cartflows.pin_settings.pinterest_tag_tracking &&
286 + cartflows.pin_settings.pinterest_tag_id !== '' &&
287 + typeof pintrk !== 'undefined'
288 + ) {
289 + /* global pintrk */
290 + const add_payment_info_event =
291 + cartflows.pin_settings.enable_pinterest_add_payment_info;
292 + if (
293 + 'enable' === add_payment_info_event &&
294 + cartflows.is_checkout_page
295 + ) {
296 + jQuery( 'form.woocommerce-checkout' ).on(
297 + 'submit',
298 + function () {
299 + pintrk(
300 + 'track',
301 + 'AddPaymentInfo',
302 + JSON.parse(
303 + cartflows.pinterest_add_payment_info_data
304 + )
305 + );
306 + }
307 + );
308 + } else if ( cartflows.is_optin ) {
309 + if (
310 + 'enable' ===
311 + cartflows.pin_settings.enable_pinterest_optin_lead
312 + ) {
313 + jQuery( 'form.woocommerce-checkout' ).on(
314 + 'submit',
315 + function () {
316 + pintrk( 'track', 'Lead', {
317 + lead_type: 'CartFlows Optin',
318 + } );
319 + }
320 + );
321 + }
322 + if (
323 + 'enable' === cartflows.pin_settings.enable_pinterest_signup
324 + ) {
325 + jQuery( 'form.woocommerce-checkout' ).on(
326 + 'submit',
327 + function () {
328 + pintrk(
329 + 'track',
330 + 'Signup',
331 + JSON.parse(
332 + cartflows.pinterest_signup_info_data
333 + )
334 + );
335 + }
336 + );
337 + }
338 + }
339 + }
340 + };
341 +
342 + /**
343 + *
344 + * @param {string} next_step_url
345 + * @return {string} next_step_url Modified string if query string is present.
346 + */
347 + const may_be_append_query_string = function ( next_step_url ) {
348 + // Get the URL parameters.
349 + const urlParams = new URLSearchParams( window.location.search );
350 +
351 + // Return the URL if no query string is present.
352 + if ( urlParams.length <= 0 ) {
353 + return next_step_url;
354 + }
355 +
356 + // Get all URL parameter keys.
357 + const keys = urlParams.keys();
358 +
359 + // Store all parameters temporary.
360 + const params = {};
361 +
362 + // Loop through all parameter as keys to make key-value pair array/object.
363 + for ( const key of keys ) {
364 + params[ key ] = urlParams.get( key );
365 + }
366 +
367 + // Convert the object to a query string.
368 + const queryString = new URLSearchParams( params ).toString();
369 +
370 + // Return if the querystring is empty.
371 + if ( '' === queryString ) {
372 + return next_step_url;
373 + }
374 +
375 + /**
376 + * Append the query string to the URL
377 + * If: No question mark is in the URL then: add the question mark before query string.
378 + * Else: Question mark is found then: add '&' before query string..
379 + */
380 + if ( next_step_url.indexOf( '?' ) === -1 ) {
381 + next_step_url = next_step_url + '?' + queryString;
382 + } else {
383 + next_step_url = next_step_url + '&' + queryString;
384 + }
385 +
386 + return next_step_url;
387 + };
388 +
389 + /**
390 + * Assign the class & link to specific button
391 + */
392 + const setup_next_step_url = function () {
393 + const next_links = $( 'a[href*="wcf-next-step"]' );
394 +
395 + if (
396 + next_links.length > 0 &&
397 + 'undefined' !== typeof cartflows.next_step
398 + ) {
399 + next_links.addClass( 'wcf-next-step-link' );
400 + next_links.attr(
401 + 'href',
402 + may_be_append_query_string( cartflows.next_step )
403 + );
404 + }
405 + };
406 +
407 + // Event listener for accepting or declining Pinterest consent.
408 + $( document ).on( 'click', '.wcf-pinterest-consent-button', function () {
409 + const consentButton = $( this );
410 + const consentAction = consentButton.data( 'action' );
411 +
412 + setCookie(
413 + cartflows?.pinterest_consent_cookie,
414 + 'accept' === consentAction ? 'true' : 'false',
415 + 30
416 + );
417 +
418 + // Hide the consent popup.
419 + $( '#cartflows-pinterest-consent-wrapper' ).hide();
420 +
421 + // Dispatch a custom event to notify that consent has changed.
422 + if ( 'accept' === consentAction ) {
423 + document.dispatchEvent(
424 + new CustomEvent( 'cartflows_pinterest_consent_changed', {
425 + detail: 'true',
426 + } )
427 + );
428 + }
429 + } );
430 +
431 + $( function () {
432 + setup_next_step_url();
433 + remove_oceanwp_custom_style();
434 + if ( '1' !== cartflows.is_pb_preview ) {
435 + trigger_facebook_events();
436 + trigger_google_events();
437 + trigger_tiktok_events();
438 + trigger_google_ads_events();
439 + trigger_snapchat_events();
440 + trigger_pinterest_events();
441 + }
442 + wcf_order_review_toggler();
443 + } );
444 +} )( jQuery );