File "pp-woocommerce.js"

Full path: /home/kosmetik/public_html/wp-content/plugins/powerpack-elements142/assets/js/pp-woocommerce.js
File size: 11.57 B
MIME-type: text/plain
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

(function ($) {

	var RegisterPPQuickView = function ($scope, $) {
		var scope_id = $scope.data('id');
		var quick_view_btn = $scope.find('.pp-quick-view-btn');
		var modal_wrap = $scope.find('.pp-quick-view-' + scope_id);

		modal_wrap.appendTo(document.body);

		var pp_quick_view_bg = modal_wrap.find('.pp-quick-view-bg'),
			pp_qv_modal = modal_wrap.find('#pp-quick-view-modal'),
			pp_qv_content = pp_qv_modal.find('#pp-quick-view-content'),
			pp_qv_close_btn = pp_qv_modal.find('#pp-quick-view-close'),
			pp_qv_wrapper = pp_qv_modal.find('.pp-content-main-wrapper'),
			pp_qv_wrapper_w = pp_qv_wrapper.width(),
			pp_qv_wrapper_h = pp_qv_wrapper.height();

		$scope
			.off('click', '.pp-quick-view-btn')
			.on('click', '.pp-quick-view-btn', function (e) {
				e.preventDefault();

				var $this = $(this);
				var wrap = $this.closest('li.product');
				var product_id = $this.data('product_id');

				if (!pp_qv_modal.hasClass('loading')) {
					pp_qv_modal.addClass('loading');
				}

				if (!pp_quick_view_bg.hasClass('pp-quick-view-bg-ready')) {
					pp_quick_view_bg.addClass('pp-quick-view-bg-ready');
				}

				$(document).trigger('pp_quick_view_loading');

				pp_qv_ajax_call($this, product_id);
			});

		var pp_qv_ajax_call = function (t, product_id) {

			pp_qv_modal.css('opacity', 0);

			$.ajax({
				url: pp.ajax_url,
				data: {
					action: 'pp_woo_quick_view',
					product_id: product_id
				},
				dataType: 'html',
				type: 'POST',
				success: function (data) {
					pp_qv_content.html(data);
					pp_qv_content_height();
				}
			});
		};

		var pp_qv_content_height = function () {

			// Variation Form
			var form_variation = pp_qv_content.find('.variations_form');

			form_variation.trigger('check_variations');
			form_variation.trigger('reset_image');

			if (!pp_qv_modal.hasClass('open')) {

				pp_qv_modal.removeClass('loading').addClass('open');

				var scrollbar_width = pp_get_scrollbar_width();
				var $html = $('html');

				$html.css('margin-right', scrollbar_width);
				$html.addClass('pp-quick-view-is-open');
			}

			var var_form = pp_qv_modal.find('.variations_form');
			if (var_form.length > 0 && 'function' === typeof var_form.wc_variation_form) {
				var_form.wc_variation_form();
				var_form.find('select').change();
			}

			pp_qv_content.imagesLoaded(function (e) {

				var image_slider_wrap = pp_qv_modal.find('.pp-qv-image-slider');

				if (image_slider_wrap.find('li').length > 1) {
					image_slider_wrap.flexslider({
						animation: "slide",
						start: function (slider) {
							setTimeout(function () {
								pp_update_summary_height(true);
							}, 300);
						},
					});
				} else {
					setTimeout(function () {
						pp_update_summary_height(true);
					}, 300);
				}
			});

			// stop loader
			$(document).trigger('pp_quick_view_loader_stop');
		};

		var pp_qv_close_modal = function () {

			// Close box by click overlay
			pp_qv_wrapper.on('click', function (e) {

				if (this === e.target) {
					pp_qv_close();
				}
			});

			// Close box with esc key
			$(document).keyup(function (e) {
				if (e.keyCode === 27) {
					pp_qv_close();
				}
			});

			// Close box by click close button
			pp_qv_close_btn.on('click', function (e) {
				e.preventDefault();
				pp_qv_close();
			});

			var pp_qv_close = function () {
				pp_quick_view_bg.removeClass('pp-quick-view-bg-ready');
				pp_qv_modal.removeClass('open').removeClass('loading');
				$('html').removeClass('pp-quick-view-is-open');
				$('html').css('margin-right', '');

				setTimeout(function () {
					pp_qv_content.html('');
				}, 600);
			}
		};

		var pp_update_summary_height = function (update_css) {
			var quick_view = pp_qv_content,
				img_height = quick_view.find('.product .pp-qv-image-slider').first().height(),
				summary = quick_view.find('.product .summary.entry-summary'),
				content = summary.css('content');

			if ('undefined' != typeof content && 544 == content.replace(/[^0-9]/g, '') && 0 != img_height && null !== img_height) {
				summary.css('height', img_height);
			} else {
				summary.css('height', '');
			}

			if (true === update_css) {
				pp_qv_modal.css('opacity', 1);
			}
		};

		var pp_get_scrollbar_width = function () {

			var div = $('<div style="width:50px;height:50px;overflow:hidden;position:absolute;top:-200px;left:-200px;"><div style="height:100px;"></div>');
			// Append our div, do our calculation and then remove it 
			$('body').append(div);
			var w1 = $('div', div).innerWidth();
			div.css('overflow-y', 'scroll');
			var w2 = $('div', div).innerWidth();
			$(div).remove();

			return (w1 - w2);
		}


		pp_qv_close_modal();
		//pp_update_summary_height();

		window.addEventListener("resize", function (event) {
			pp_update_summary_height();
		});

		/* Add to cart ajax */
		/**
		 * pp_add_to_cart_ajax class.
		 */
		var pp_add_to_cart_ajax = function () {

			modal_wrap
				.off('click', '#pp-quick-view-content .single_add_to_cart_button')
				.off('pp_added_to_cart')
				.on('click', '#pp-quick-view-content .single_add_to_cart_button', this.onAddToCart)
				.on('pp_added_to_cart', this.updateButton);
		};

		/**
		 * Handle the add to cart event.
		 */
		pp_add_to_cart_ajax.prototype.onAddToCart = function (e) {

			e.preventDefault();

			var $thisbutton = $(this),
				product_id = $(this).val(),
				variation_id = $('input[name="variation_id"]').val() || '',
				quantity = $('input[name="quantity"]').val();

			if ($thisbutton.is('.single_add_to_cart_button')) {
				$thisbutton.removeClass('added');
				$thisbutton.addClass('loading');

				// Ajax action.
				if (variation_id != '') {
					jQuery.ajax({
						url: pp.ajax_url,
						type: 'POST',
						data: 'action=pp_add_cart_single_product&product_id=' + product_id + '&variation_id=' + variation_id + '&quantity=' + quantity,

						success: function (results) {
							// Trigger event so themes can refresh other areas.
							$(document.body).trigger('wc_fragment_refresh');
							$(document.body).trigger('pp_added_to_cart', [$thisbutton]);
							$thisbutton.removeClass('loading');
							$thisbutton.addClass('added');
						}
					});
					
				} else {
					jQuery.ajax({
						url: pp.ajax_url,
						type: 'POST',
						data: 'action=pp_add_cart_single_product&product_id=' + product_id + '&quantity=' + quantity,

						success: function (results) {
							// Trigger event so themes can refresh other areas.
							$(document.body).trigger('wc_fragment_refresh');
							modal_wrap.trigger('pp_added_to_cart', [$thisbutton]);
						}
					});
				}
			}
		};

		/**
		 * Update cart page elements after add to cart events.
		 */
		pp_add_to_cart_ajax.prototype.updateButton = function (e, button) {
			button = typeof button === 'undefined' ? false : button;

			if ($(button)) {
				$(button).removeClass('loading');
				$(button).addClass('added');

				// View cart text.
				/*if (!pp.is_cart && $(button).parent().find('.added_to_cart').length === 0 && pp.is_single_product) {
					$(button).after(' <a href="' + pp.cart_url + '" class="added_to_cart wc-forward" title="' +
						pp.view_cart + '">' + pp.view_cart + '</a>');
				}*/


			}
		};

		/**
		 * Init pp_add_to_cart_ajax.
		 */
		new pp_add_to_cart_ajax();
	}

	var RegisterPPAddCart = function ($scope, $) {

		//
		$layout = $scope.data('element_type');

		if ('pp-woo-products.skin-2' !== $layout && 'pp-woo-products-slider.slider-modern' !== $layout) {
			return;
		}

		/* Add to cart for styles */
		var style_add_to_cart = function () {

			//fa-spinner

			$(document.body)
				.off('click', '.pp-product-actions .pp-add-to-cart-btn.product_type_simple')
				.off('pp_product_actions_added_to_cart')
				.on('click', '.pp-product-actions .pp-add-to-cart-btn.product_type_simple', this.onAddToCart)
				.on('pp_product_actions_added_to_cart', this.updateButton);
		};

		/**
		 * Handle the add to cart event.
		 */
		style_add_to_cart.prototype.onAddToCart = function (e) {

			e.preventDefault();

			var $thisbutton = $(this),
				product_id = $thisbutton.data('product_id'),
				quantity = 1,
				cart_icon = $thisbutton.find('pp-action-item');

			$thisbutton.removeClass('added');
			$thisbutton.addClass('loading');

			jQuery.ajax({
				url: pp.ajax_url,
				type: 'POST',
				data: 'action=pp_add_cart_single_product&product_id=' + product_id + '&quantity=' + quantity,

				success: function (results) {
					// Trigger event so themes can refresh other areas.
					$(document.body).trigger('wc_fragment_refresh');
					$(document.body).trigger('pp_product_actions_added_to_cart', [$thisbutton]);
				}
			});
		};

		/**
		 * Update cart page elements after add to cart events.
		 */
		style_add_to_cart.prototype.updateButton = function (e, button) {
			button = typeof button === 'undefined' ? false : button;

			if ($(button)) {
				$(button).removeClass('loading');
				$(button).addClass('added');

				// Show view cart notice.
				if ( ! pp.is_cart && $(button).parent().find( '.added_to_cart' ).length === 0  && pp.is_single_product) {
					$(button).after( ' <a href="' + pp.cart_url + '" class="added_to_cart wc-forward" title="' +
						pp.view_cart + '">' + pp.view_cart + '</a>' );
				}
			}
		};

		/**
		 * Init style_add_to_cart.
		 */
		new style_add_to_cart();
	}
	/**
	 * Function for Product Grid.
	 *
	 */
	var WidgetPPWooProducts = function ($scope, $, $panel) {

		if ('undefined' == typeof $scope) {
			return;
		}

		/* Slider */
		var slider_wrapper = $scope.find('.pp-woo-products-slider');

		if (slider_wrapper.length > 0) {
			var slider_selector = slider_wrapper.find('ul.products'),
				slider_options = JSON.parse(slider_wrapper.attr('data-woo_slider'));

			slider_selector.slick(slider_options);
		}

		if (!elementorFrontend.isEditMode()) {
			/* Common */
			RegisterPPQuickView($scope, $);
			/* Style specific cart button */
			RegisterPPAddCart($scope, $);
		}

		if (elementorFrontend.isEditMode()) {
			//console.log($scope);
			RegisterPPQuickView($scope, $);
		}

	}

	/**
	 * Function for Product Grid.
	 *
	 */
	var WidgetPPWooAddToCart = function ($scope, $) {
		$('body').off('added_to_cart.pp_cart').on('added_to_cart.pp_cart', function () {

			if ($scope.hasClass('elementor-widget-pp-woo-add-to-cart')) {

				$btn = $scope.find('.ajax_add_to_cart.pp-redirect');

				if ($btn.length > 0) {

					// View cart text.
					if (!pp.is_cart && $btn.hasClass('added')) {
						window.location = pp.cart_url;
					}
				}
			}
		});
	}

	/**
	 * Function for Product Categories.
	 *
	 */
	var WooCategoriesHandler = function( $scope, $ ) {
		
        var $carousel                   = $scope.find('.pp-woo-categories-carousel').eq(0);

		if ( $carousel.length > 0 ) {
            var $carousel_selector = $carousel.find('.products.pp-slick-slider');
            var $carousel_options 	= JSON.parse( $carousel.attr('data-cat-carousel-options') );
            //console.log($carousel_options);
            $carousel_selector.slick($carousel_options);
		}
	}


	$(window).on('elementor/frontend/init', function () {
		elementorFrontend.hooks.addAction('frontend/element_ready/pp-woo-products.skin-1', WidgetPPWooProducts);
		elementorFrontend.hooks.addAction('frontend/element_ready/pp-woo-products.skin-2', WidgetPPWooProducts);
		elementorFrontend.hooks.addAction('frontend/element_ready/pp-woo-products.skin-3', WidgetPPWooProducts);
		elementorFrontend.hooks.addAction('frontend/element_ready/pp-woo-products.skin-4', WidgetPPWooProducts);
		elementorFrontend.hooks.addAction('frontend/element_ready/pp-woo-products.skin-5', WidgetPPWooProducts);
		elementorFrontend.hooks.addAction('frontend/element_ready/pp-woo-add-to-cart.default', WidgetPPWooAddToCart);
		elementorFrontend.hooks.addAction('frontend/element_ready/pp-woo-categories.default', WooCategoriesHandler);

	});


})(jQuery);