(function ($) { var PPSliderUpdate = function ($, $carousel) { var $containers = { ".pp-advanced-tabs": ".pp-advanced-tabs-title", ".pp-toggle-container": ".pp-toggle-switch", ".elementor-tabs": ".elementor-tab-title", }; $.each($containers, function (main_parent, click_element) { if ($($carousel).closest(main_parent).length > 0) { $($carousel) .closest(main_parent) .find(click_element) .on("click", function () { setTimeout(function () { $carousel.slick("setPosition"); }, 100); }); } }); }; 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_woo_products_script.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_woo_products_script.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_woo_products_script.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"); $(button).addClass("testng"); // View cart text. if ( ! pp_woo_products_script.is_cart && $(button).parent().find('.added_to_cart').length === 0 ) { $(button).after( ' <a href="' + pp_woo_products_script.cart_url + '" class="added_to_cart wc-forward" title="' + pp_woo_products_script.view_cart + '">' + pp_woo_products_script.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_woo_products_script.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_woo_products_script.is_cart && $(button).parent().find(".added_to_cart").length === 0 && pp_woo_products_script.is_single_product ) { $(button).after( ' <a href="' + pp_woo_products_script.cart_url + '" class="added_to_cart wc-forward" title="' + pp_woo_products_script.view_cart + '">' + pp_woo_products_script.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); PPSliderUpdate($, slider_selector); } if (!elementorFrontend.isEditMode()) { /* Common */ RegisterPPQuickView($scope, $); /* Style specific cart button */ RegisterPPAddCart($scope, $); } if (elementorFrontend.isEditMode()) { RegisterPPQuickView($scope, $); } $scope .find(".pp-post-filter") .off("click") .on("click", function () { $(this).siblings().removeClass("pp-filter-current"); $(this).addClass("pp-filter-current"); count = 1; _postsFilterAjax($scope, $(this)); }); }; var _postsFilterAjax = function ($scope, $this) { $scope .find(".pp-posts-grid .pp-grid-item-wrap") .last() .after( '<div class="pp-posts-loader-wrap"><div class="pp-loader"></div><div class="pp-loader-overlay"></div></div>' ); var $args = { page_id: $scope.find(".pp-woo-products-inner").data("page"), widget_id: $scope.data("id"), filter: $this.data("filter"), skin: $scope.find(".pp-woo-products-inner").data("skin"), page_number: 1, }; _callAjax($scope, $args); }; var _callAjax = function ($scope, $obj, $append) { var loader = $scope.find(".pp-posts-loader"); $.ajax({ url: pp_woo_products_script.ajax_url, data: { action: "pp_get_product", page_id: $obj.page_id, widget_id: $obj.widget_id, category: $obj.filter, skin: $obj.skin, page_number: $obj.page_number, }, dataType: "json", type: "POST", success: function (data) { //$scope.find( '.pp-posts-loader' ).remove(); var sel = $scope.find(".products"); if (true == $append) { var html_str = data.data.html; //html_str = html_str.replace( 'pp-post-wrapper-featured', '' ); sel.append(html_str); } else { sel.html(data.data.html); } $scope .find(".pp-posts-pagination-wrap") .html(data.data.pagination); var layout = $scope.find(".pp-posts-grid").data("layout"), selector = $scope.find(".pp-posts-grid"); if ("masonry" == layout) { $scope.imagesLoaded(function () { selector.isotope("destroy"); selector.isotope({ layoutMode: layout, itemSelector: ".pp-grid-item-wrap", }); }); } // Complete the process 'loadStatus' loadStatus = true; if (true == $append) { loader.hide(); $scope.find(".pp-post-load-more").show(); } /*if( count == total ) { $scope.find( '.pp-post-load-more' ).hide(); }*/ }, }); }; /** * Function for Product Grid. * */ var WidgetPPWooAddToCart = function ($scope, $) { $("body") .off("added_to_cart.pp_cart") .on("added_to_cart.pp_cart", function ( e, fragments, cart_hash, this_button ) { if ( $(this_button) .parent() .parent() .parent() .hasClass("elementor-widget-pp-woo-add-to-cart") ) { $btn = $(this_button); if ($btn.length > 0) { // View cart text. if ( !pp_woo_products_script.is_cart && $btn.hasClass("added") ) { if( $btn.hasClass( 'pp-redirect' ) ) { setTimeout(function () { window.location = pp_woo_products_script.cart_url; }, 500); } } } } }); }; /** * Function for Product Categories. * */ var WooOffcanvasCartHandler = function ($scope, $) { var container = $scope.find(".pp-offcanvas-cart-container"); if ($(container).length > 0) { new PPOffcanvasContent($scope); } }; /** * 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") ); $carousel_selector.slick($carousel_options); PPSliderUpdate($, $carousel_selector); } }; /** * Function for Woo Product Tabs */ var WooProductTabsHandler = function ($scope) { var $tabs = $scope.find(".wc-tabs-wrapper, .woocommerce-tabs, #rating"); // Trigger WooCommerce's Single Product JS manually on widget load $tabs.trigger("init"); }; /** * Function for Woo Add to Cart Notification */ var WooAddToCartNotificationHandler = function ($scope, $) { var cartForm = $(".single-product .cart"); var stickyCartBtnArea = $(".pp-add-to-cart-sticky"); if (stickyCartBtnArea.length <= 0 || cartForm.length <= 0) { return; } var totalOffset = cartForm.offset().top + cartForm.outerHeight(); var addToCartStickyToggler = function () { var windowScroll = $(window).scrollTop(); var windowHeight = $(window).height(); var documentHeight = $(document).height(); if ( totalOffset < windowScroll && windowScroll + windowHeight != documentHeight ) { stickyCartBtnArea.addClass("pp-sticky-shown"); } else if ( windowScroll + windowHeight == documentHeight || totalOffset > windowScroll ) { stickyCartBtnArea.removeClass("pp-sticky-shown"); } }; addToCartStickyToggler(); $(window).scroll(addToCartStickyToggler); // If Variations Product $(".pp-sticky-add-to-cart").on("click", function (e) { e.preventDefault(); $("html, body").animate( { scrollTop: $(".single-product .cart").offset().top - 30, }, 500 ); }); }; var WooMiniCartHandler = function ($scope) { new PPWooMiniCart( $scope ); }; var WooMyAccountHandler = function ($scope, $) { $scope.find('button[name="save_address"], button[name="save_account_details"]').parent().addClass('pp-my-account-button'); }; /* Add to cart Quantity ajax */ /** * pp-add-to-cart-qty-ajax class. */ var pp_add_to_cart_quantity_ajax = function () { this.init(); }; pp_add_to_cart_quantity_ajax.prototype = { init: function() { this.bindEvents(); }, bindEvents: function() { var self = this; var ppAddToCartQtyAjax = $( ".pp-woo-add-to-cart input.pp-add-to-cart-qty-ajax" ); if ( $( ".pp-woo-add-to-cart input" ).hasClass( 'pp-add-to-cart-qty-ajax' ) ) { ppAddToCartQtyAjax.bind( 'keyup mouseup', function () { var ppAddToCartQtyAjaxVal = ppAddToCartQtyAjax.val(); ppAddToCartQtyAjax.siblings( '.ajax_add_to_cart' ).attr( 'data-quantity', ppAddToCartQtyAjaxVal ); } ); } }, } new pp_add_to_cart_quantity_ajax(); $(window).on("elementor/frontend/init", function () { var widgets = { 'pp-woo-products.skin-1': WidgetPPWooProducts, 'pp-woo-products.skin-2': WidgetPPWooProducts, 'pp-woo-products.skin-3': WidgetPPWooProducts, 'pp-woo-products.skin-4': WidgetPPWooProducts, 'pp-woo-products.skin-5': WidgetPPWooProducts, 'pp-woo-add-to-cart.default': WidgetPPWooAddToCart, 'pp-woo-categories.default': WooCategoriesHandler, 'pp-woo-offcanvas-cart.default': WooOffcanvasCartHandler, 'pp-woo-add-to-cart-notification.default': WooAddToCartNotificationHandler, 'pp-woo-mini-cart.default': WooMiniCartHandler, 'pp-woo-my-account.default': WooMyAccountHandler, } $.each( widgets, function( widget, callback ) { elementorFrontend.hooks.addAction( 'frontend/element_ready/' + widget, callback ); }); //elementorFrontend.hooks.addAction('frontend/element_ready/pp-woo-product-tabs.default', WooProductTabsHandler); }); })(jQuery);