Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

jsarnowski / jsarnowski/cartflows   php

Repository URL to install this package:

Version: 1.6.11 

/ js / checkout-template.js

( function ( $ ) {
	var wcf_reload_checkout_on_return = function () {
		var vis = ( function () {
			var stateKey,
				eventKey,
				keys = {
					hidden: 'visibilitychange',
					webkitHidden: 'webkitvisibilitychange',
					mozHidden: 'mozvisibilitychange',
					msHidden: 'msvisibilitychange',
				};
			for ( stateKey in keys ) {
				if ( stateKey in document ) {
					eventKey = keys[ stateKey ];
					break;
				}
			}
			return function ( c ) {
				if ( c ) document.addEventListener( eventKey, c );
				return ! document[ stateKey ];
			};
		} )();

		var visible = vis(); // gives current state

		vis( function () {
			if ( vis() ) {
				location.reload();
			}
		} );
	};

	var wcf_show_loader = function () {
		$( '.wcf-loader-bg' ).addClass( 'show' );
	};

	var wcf_hide_loader = function () {
		$( '.wcf-loader-bg' ).removeClass( 'show' );
	};

	/**
	 * Checkout Custom Field Validations
	 * This will collect all the present fields in the woocommerce form and adds an class if the field
	 * is blank
	 */
	var wcf_custom_field_validation = function () {
		var custom_field_add_class = function (
			field_value,
			field_row,
			field_wrap,
			field_type
		) {
			if (
				field_value == '' ||
				( 'select' == field_type && field_value == ' ' )
			) {
				if ( field_row.hasClass( 'validate-required' ) ) {
					field_wrap.addClass( 'field-required' );
				}
			} else {
				field_wrap.removeClass( 'field-required' );
			}
		};

		var fields_wrapper = $( 'form.woocommerce-checkout #customer_details' ),
			$all_fields = fields_wrapper.find( 'input, textarea' ),
			$selects = fields_wrapper.find( 'select' );

		$all_fields.on( 'blur', function () {
			var $this = $( this ),
				field_type = $this.attr( 'type' ),
				field_row = $this.closest( 'p.form-row' ),
				field_value = $this.val();

			custom_field_add_class( field_value, field_row, $this, field_type );
		} );

		$selects.on( 'blur', function () {
			var $this = $( this ),
				field_row = $this.closest( 'p.form-row' ),
				field_type = 'select',
				field_wrap = field_row.find( '.select2-container--default' ),
				field_value = field_row.find( 'select' ).val();

			custom_field_add_class(
				field_value,
				field_row,
				field_wrap,
				field_type
			);
		} );
	};

	/**
	 * Billing and shipping field add class form-row-first and form-row-last
	 * To add those classes to change the layout of the field
	 */
	var add_custom_class_address_field = function () {
		// For Billing address fields.
		var $get_checkout_style_layout = $( '.cartflows-container' ).find(
				'.wcf-embed-checkout-form-two-column'
			),
			$get_bill_addr_field_one = $(
				'.wcf-embed-checkout-form .woocommerce-checkout'
			).find( '#billing_address_1_field' ),
			$get_bill_addr_field_two = $(
				'.wcf-embed-checkout-form .woocommerce-checkout'
			).find( '#billing_address_2_field' );

		if ( $get_bill_addr_field_one.hasClass( 'form-row-wide' ) ) {
			$get_bill_addr_field_one.removeClass( 'form-row-wide' );
			$get_bill_addr_field_one.addClass( 'form-row-first' );
		}

		if ( $get_bill_addr_field_two.hasClass( 'form-row-wide' ) ) {
			$get_bill_addr_field_two.removeClass( 'form-row-wide' );
			$get_bill_addr_field_two.addClass( 'form-row-last' );

			if (
				$get_bill_addr_field_two
					.find( 'label' )
					.hasClass( 'screen-reader-text' )
			) {
				$get_bill_addr_field_two.addClass( 'mt20' );
			} else {
				$get_bill_addr_field_two.removeClass( 'mt20' );
			}
		}

		// For Shipping address fields.
		var $get_ship_addr_field_one = $(
			'.wcf-embed-checkout-form .woocommerce-checkout'
		).find( '#shipping_address_1_field' );
		var $get_ship_addr_field_two = $(
			'.wcf-embed-checkout-form .woocommerce-checkout'
		).find( '#shipping_address_2_field' );
		if ( $get_ship_addr_field_one.hasClass( 'form-row-wide' ) ) {
			$get_ship_addr_field_one.removeClass( 'form-row-wide' );
			$get_ship_addr_field_one.addClass( 'form-row-first' );
		}

		if ( $get_ship_addr_field_two.hasClass( 'form-row-wide' ) ) {
			$get_ship_addr_field_two.removeClass( 'form-row-wide' );
			$get_ship_addr_field_two.addClass( 'form-row-last' );

			if (
				$get_ship_addr_field_two
					.find( 'label' )
					.hasClass( 'screen-reader-text' )
			) {
				$get_ship_addr_field_two.addClass( 'mt20' );
			} else {
				$get_ship_addr_field_two.removeClass( 'mt20' );
			}
		}

		function address_fields_management( type ) {
			var wrapper = $( '.woocommerce-' + type + '-fields' );

			setTimeout( function () {
				var column_three = wrapper.find( '.wcf-column-33' );
				column_three.css( 'clear', '' );
				column_three.first().css( 'clear', 'left' );
				// column_three.first().css( 'margin-right', '10px' );
				// column_three.last().css( 'margin-left', '10px' );
			}, 100 );

			setTimeout( function () {
				var column_fifty = wrapper.find( '.wcf-column-50' );
				column_fifty.css( 'clear', '' );
				column_fifty.last().css( 'clear', 'left' );
			}, 100 );
		}

		// address_fields_management( 'billing' );
		// address_fields_management( 'shipping' );

		var billing_country = $(
			'.wcf-embed-checkout-form .woocommerce-checkout'
		).find( '#billing_country' );

		billing_country.on( 'change', function ( e ) {
			// address_fields_management( 'billing' );
		} );

		var shipping_country = $(
			'.wcf-embed-checkout-form .woocommerce-checkout'
		).find( '#shipping_country' );

		shipping_country.on( 'change', function ( e ) {
			// address_fields_management( 'shipping' );
		} );
	};

	var wcf_check_is_local_storage = function () {
		var test = 'test';
		try {
			localStorage.setItem( test, test );
			localStorage.removeItem( test );
			return true;
		} catch ( e ) {
			return false;
		}
	};

	var wcf_persistent_data = function () {
		if ( 'yes' != cartflows.allow_persistence ) {
			return;
		}

		if ( false === wcf_check_is_local_storage() ) {
			return;
		}

		var checkout_cust_form = 'form.woocommerce-checkout #customer_details';

		var wcf_form_data = {
			set: function () {
				var checkout_data = [];
				var checkout_form = $(
					'form.woocommerce-checkout #customer_details'
				);

				localStorage.removeItem( 'cartflows_checkout_form' );

				checkout_form
					.find(
						'input[type=text], select, input[type=email], input[type=tel]'
					)
					.each( function () {
						checkout_data.push( {
							name: this.name,
							value: this.value,
						} );
					} );

				cartflows_checkout_form = JSON.stringify( checkout_data );
				localStorage.setItem(
					'cartflows_checkout_form',
					cartflows_checkout_form
				);
			},
			get: function () {
				if (
					localStorage.getItem( 'cartflows_checkout_form' ) != null
				) {
					checkout_data = JSON.parse(
						localStorage.getItem( 'cartflows_checkout_form' )
					);

					for ( var i = 0; i < checkout_data.length; i++ ) {
						if (
							$(
								'form.woocommerce-checkout [name=' +
									checkout_data[ i ].name +
									']'
							).hasClass( 'select2-hidden-accessible' )
						) {
							$(
								'form.woocommerce-checkout [name=' +
									checkout_data[ i ].name +
									']'
							).selectWoo( 'val', [ checkout_data[ i ].value ] );
						} else {
							$(
								'form.woocommerce-checkout [name=' +
									checkout_data[ i ].name +
									']'
							).val( checkout_data[ i ].value );
						}
					}
				}
			},
		};

		wcf_form_data.get();

		$(
			checkout_cust_form + ' input, ' + checkout_cust_form + ' select'
		).on( 'change', function () {
			wcf_form_data.set();
		} );
	};

	var wcf_checkout_coupons = {
		init: function () {
			$( document.body ).on(
				'click',
				'.wcf-submit-coupon',
				this.submit_coupon
			);
			$( document.body ).on(
				'click',
				'.wcf-remove-coupon',
				this.remove_coupon
			);
		},

		submit_coupon: function ( e ) {
			e.preventDefault();
			var coupon_wrapper = $( '.wcf-custom-coupon-field' ),
				coupon_field = coupon_wrapper.find( '.wcf-coupon-code-input' ),
				coupon_value = coupon_field.val();

			if ( '' == coupon_value ) {
				coupon_field.addClass( 'field-required' );
				return false;
			} else {
				coupon_field.removeClass( 'field-required' );
			}

			var data = {
				coupon_code: coupon_value,
				action: 'wcf_woo_apply_coupon',
				security: cartflows.wcf_validate_coupon_nonce,
			};

			$.ajax( {
				type: 'POST',
				url: cartflows.ajax_url,
				data: data,

				success: function ( code ) {
					var coupon_message = $( '.wcf-custom-coupon-field' );
					coupon_message
						.find( '.woocommerce-error, .woocommerce-message' )
						.remove();

					var data = JSON.parse( code );

					if ( data.status == true ) {
						$( document.body ).trigger( 'update_checkout', {
							update_shipping_method: false,
						} );
						coupon_message.prepend( data.msg );
					} else {
						coupon_message.prepend( data.msg );
					}
				},
			} );
		},

		remove_coupon: function ( e ) {
			e.preventDefault();
			var data = {
				coupon_code: $( this ).attr( 'data-coupon' ),
				action: 'wcf_woo_remove_coupon',
				security: cartflows.wcf_validate_remove_coupon_nonce,
			};

			$.ajax( {
				type: 'POST',
				url: cartflows.ajax_url,
				data: data,

				success: function ( code ) {
					var coupon_message = $( '.wcf-custom-coupon-field' );
					coupon_message
						.find( '.woocommerce-error, .woocommerce-message' )
						.hide();

					if ( code ) {
						$( document.body ).trigger( 'update_checkout', {
							update_shipping_method: false,
						} );
						coupon_message.prepend( code );
					}
				},
			} );
		},
	};

	var wcf_remove_cart_products = function () {
		$( document.body ).on(
			'click',
			'#wcf-embed-checkout-form .remove',
			function ( e ) {
				e.preventDefault();
				var p_id = $( this ).attr( 'data-id' );
				var data = {
					p_key: $( this ).attr( 'data-item-key' ),
					p_id: p_id,
					action: 'wcf_woo_remove_cart_product',
					security: cartflows.wcf_validate_remove_cart_product_nonce,
				};

				$.ajax( {
					type: 'POST',
					url: cartflows.ajax_url,
					data: data,

					success: function ( response ) {
						var data = JSON.parse( response );

						if ( data.need_shipping == false ) {
							// $('#wcf-embed-checkout-form').find('#ship-to-different-address-checkbox').hide();
							$( '#wcf-embed-checkout-form' )
								.find( '#ship-to-different-address-checkbox' )
								.attr( 'checked', false );
						}
						$( '#wcf-embed-checkout-form' )
							.find( '.woocommerce-notices-wrapper' )
							.first()
							.html( data.msg );
						$( document ).trigger( 'cartflows_remove_product', [
							p_id,
						] );
						$( '#wcf-embed-checkout-form' ).trigger(
							'update_checkout'
						);
					},
				} );
			}
		);
	};

	$( function () {
		wcf_persistent_data();

		//wcf_reload_checkout_on_return();

		wcf_custom_field_validation();

		add_custom_class_address_field();

		wcf_remove_cart_products();

		wcf_checkout_coupons.init();
	} );
} )( jQuery );