;(function($){
"use strict";
var WooLentorQuickView = {
body: $('body'),
modal: $('#woolentor-quickview-modal'),
modalbody: $('.woolentor-quickview-modal-body'),
/**
* [init]
* @return {[void]} Initial Function
*/
init: function(){
this.wrapperHeight();
$( document )
.on( 'click.WooLentorQuickView', 'a.woolentor-quickview-btn,.woolentorquickview', this.openQuickView )
.on( 'click.WooLentorQuickView', '.woolentor-quickview-modal-close', this.closeQuickView )
.on( 'click.WooLentorQuickView', '.woolentor-quickview-overlay', this.closeQuickView );
$( document ).keyup( this.closeKeyUp );
if( woolentorQuickView.optionData['enableAjaxCart'] === 'on' ){
$( document ).on( 'click.WooLentorQuickView', '.woolentor-quickview-modal-content .woolentorquickview-content-template:not(.external) .single_add_to_cart_button:not(.disabled)', this.addToCart );
}
},
/**
* [openQuickView] Open quickview
* @param event
* @return {[void]}
*/
openQuickView: function( event ){
event.preventDefault();
var $this = $(this),
id = $this.data('product_id');
WooLentorQuickView.modalbody.html(''); /*clear content*/
WooLentorQuickView.body.addClass('woolentor-quickview-loader');
$this.addClass('loading');
WooLentorQuickView.modal.addClass('loading');
$.ajax({
url: woolentorQuickView.ajaxUrl,
data: {
action: 'woolentor_quickview',
id: id,
nonce: woolentorQuickView.ajaxNonce,
},
method: 'POST',
success: function (response) {
if ( response ) {
WooLentorQuickView.body.removeClass('woolentor-quickview-loader');
WooLentorQuickView.modal.removeClass('loading').addClass('woolentor-quickview-open');
$this.removeClass('loading');
WooLentorQuickView.modalbody.html( response );
WooLentorQuickView.variation( WooLentorQuickView.modalbody );
$(document).trigger('woolentor_quick_view_rendered');
if( woolentorQuickView.optionData['thumbnailLayout'] === 'slider' ){
WooLentorQuickView.imageSlider();
}
} else {
console.log( 'Something wrong loading fetching product data' );
}
},
error: function (response) {
console.log('Something wrong with AJAX response.');
},
complete: function () {
$this.removeClass('loading');
},
});
},
/**
* [variation] Product variation data manager
* @param {[String]} $container
* @return {[void]}
*/
variation: function( $container ){
var $formvariation = $container.find('.variations_form');
$formvariation.each( function() {
$( this ).wc_variation_form();
});
$formvariation.trigger( 'check_variations' );
$formvariation.trigger( 'reset_image' );
if( typeof $.fn.wc_product_gallery !== 'undefined' ) {
$container.find('.woocommerce-product-gallery').each( function () {
$(this).wc_product_gallery();
} );
}
if( woolentorQuickView.optionData['thumbnailLayout'] === 'slider' ){
WooLentorQuickView.variationData( $container );
}
},
/**
* [variationData] Manage varition data
* @param {[String]} $product
* @return {[void]}
*/
variationData: function( $product ){
$( '.single_variation_wrap' ).on( 'show_variation', function ( event, variation ) {
$product.find('.woolentor-quickview-main-image-slider').slick('slickGoTo', 0);
});
},
/**
* [closeQuickView] Close quickview
* @param event
* @return {[void]}
*/
closeQuickView: function( event ) {
event.preventDefault();
WooLentorQuickView.modal.removeClass('woolentor-quickview-open');
},
/**
* [closeKeyUp] Close quickview after press ESC Button
* @param event
* @return {[void]}
*/
closeKeyUp: function(event){
if( event.keyCode === 27 ){
WooLentorQuickView.modal.removeClass('woolentor-quickview-open');
}
},
/**
* [wrapperHeight] Manage Modal wrapper height
* @return {[void]}
*/
wrapperHeight: function(){
var window_width = $(window).width(),
window_height = $(window).height();
$('.woolentor-quickview-modal-wrapper').css({"max-height": ( window_height-150 )+"px"});
},
/*
* Cuctom image slider
*/
MainImageSlider: function(){
$('.woolentor-quickview-main-image-slider').slick({
slidesToShow: 1,
slidesToScroll: 1,
arrows: true,
fade: true,
asNavFor: '.woolentor-quickview-thumbnail-slider',
prevArrow: '←',
nextArrow: '→',
});
},
ThumbnailSlider: function(){
$('.woolentor-quickview-thumbnail-slider').slick({
slidesToShow: 4,
slidesToScroll: 1,
asNavFor: '.woolentor-quickview-main-image-slider',
dots: false,
arrows: true,
focusOnSelect: true,
prevArrow: '←',
nextArrow: '→',
});
},
imageSlider: function(){
this.MainImageSlider();
this.ThumbnailSlider();
},
/**
* [addToCart]
* @param event
*/
addToCart: function( event ){
event.preventDefault();
var $this = $(this),
$form = $this.closest('form.cart'),
all_data = $form.serialize(),
product_qty = $form.find('input[name=quantity]').val() || 1,
product_id = $form.find('input[name=product_id]').val() || $this.val(),
variation_id = $form.find('input[name=variation_id]').val() || 0;
/* For Variation product */
var item = {},
variations = $form.find( 'select[name^=attribute]' );
if ( !variations.length) {
variations = $form.find( '[name^=attribute]:checked' );
}
if ( !variations.length) {
variations = $form.find( 'input[name^=attribute]' );
}
variations.each( function() {
var $thisitem = $( this ),
attributeName = $thisitem.attr( 'name' ),
attributevalue = $thisitem.val(),
index,
attributeTaxName;
$thisitem.removeClass( 'error' );
if ( attributevalue.length === 0 ) {
index = attributeName.lastIndexOf( '_' );
attributeTaxName = attributeName.substring( index + 1 );
$thisitem.addClass( 'required error' );
} else {
item[attributeName] = attributevalue;
}
});
var data = {
product_id: product_id,
product_sku: '',
quantity: product_qty,
variation_id: variation_id,
variations: item,
all_data: all_data,
};
var alldata = data.all_data + '&product_id='+ data.product_id + '&product_sku='+ data.product_sku + '&quantity='+ data.quantity + '&variation_id='+ data.variation_id + '&variations='+ JSON.stringify( data.variations ) +'&action=woolentor_quickview_insert_to_cart' +'&nonce='+woolentorQuickView.ajaxNonce;
$( document.body ).trigger('adding_to_cart', [$this, data]);
$.ajax({
type: 'POST',
url: woolentorQuickView.ajaxUrl,
data: alldata,
beforeSend: function (response) {
$this.removeClass('added').addClass('loading');
},
complete: function (response) {
$this.addClass('added').removeClass('loading');
},
success: function (response) {
if ( response.error & response.product_url ) {
window.location = response.product_url;
return;
} else {
$( document.body ).trigger( 'wc_fragment_refresh' );
$(document.body).trigger('added_to_cart', [response.fragments, response.cart_hash, $this]);
}
},
});
}
};
$( document ).ready( function() {
WooLentorQuickView.init();
$( window ).on( 'resize', WooLentorQuickView.wrapperHeight );
});
})(jQuery);