(function($) {
"use strict";
$.extend($.apusThemeCore, {
/**
* Initialize scripts
*/
woo_init: function() {
var self = this;
self.loginRegister();
self.cartOffcanvas();
self.addToCartAction();
self.getProductAjax();
self.searchProduct();
self.productDetail();
self.initQuickview();
self.initSwatches();
self.wishlistInit();
self.initFilter();
self.searchHeader();
$( 'body' ).on( 'found_variation', function( event, variation ) {
self.variationsImageUpdate(variation);
});
$( 'body' ).on( 'reset_image', function( event, variation ) {
self.variationsImageUpdate(variation);
});
if ( $.isFunction( $.fn.select2 ) ) {
$('.apus-search-form .select-category select').select2();
}
$(document).on('click', '.apus-topcart a.mini-cart', function(){
$('.apus-topcart .cart_list').perfectScrollbar();
});
$(document).on('click', '.filter-btn', function(){
$(this).closest('.filter-btn-wrapper').find('.shop-filter-sidebar-wrapper').addClass('active');
$(this).closest('.filter-btn-wrapper').find('.shop-filter-sidebar-overlay').addClass('active');
$("body").css("overflow-y", "hidden");
});
$(document).on('click', '.close-filter', function(){
$(this).closest('.filter-btn-wrapper').find('.shop-filter-sidebar-wrapper').removeClass('active');
$(this).closest('.filter-btn-wrapper').find('.shop-filter-sidebar-overlay').removeClass('active');
$("body").css("overflow-y", "initial");
});
$('.shop-filter-sidebar-overlay').on('click', function(){
$(this).closest('.filter-btn-wrapper').find('.shop-filter-sidebar-wrapper').removeClass('active');
$(this).removeClass('active');
$("body").css("overflow-y", "initial");
});
setTimeout(function(){
$('.top-categories-inner .list-category-products').perfectScrollbar();
}, 100);
},
wishlistInit: function() {
$( 'body' ).on( 'added_to_wishlist', function( event, variation ) {
$('.wishlist-icon .count').each(function(){
var count = $(this).text();
count = parseInt(count) + 1;
$(this).text(count);
});
});
$('body').on('removed_from_wishlist', function( event, variation ) {
if ( $('.wishlist-icon .count').length > 0 ) {
$('.wishlist-icon .count').each(function(){
var count = $(this).text();
count = parseInt(count) - 1;
$(this).text(count);
});
}
});
$('body').on('woosw_change_count', function( event, variation ) {
if ( $('.count.woosw-custom-menu-item').length > 0 ) {
$('.count.woosw-custom-menu-item').each(function(){
$(this).text(variation);
});
}
});
},
searchHeader: function() {
$('.apus-search-form').each(function(){
var $form_container = $(this);
$form_container.find('.show-search-header').on('click', function(e){
e.preventDefault();
if ( $form_container.find('.apus-search-form-inner').hasClass('active') ) {
$form_container.find('.apus-search-form-inner').removeClass('active');
$form_container.find('.overlay-search-header').removeClass('active');
setTimeout(function(){
$("body").css("overflow-y", "initial").removeClass('search-show-header-static');
},500);
} else {
$form_container.find('.apus-search-form-inner').addClass('active');
$form_container.find('.overlay-search-header').addClass('active');
$("body").css("overflow-y", "hidden").addClass('search-show-header-static');
}
$(this).find('i').toggleClass("flaticon-loupe ti-close");
});
$form_container.find('.overlay-search-header').on('click', function(e){
$form_container.find('.apus-search-form-inner').removeClass('active');
$form_container.find('.overlay-search-header').removeClass('active');
setTimeout(function(){
$("body").css("overflow-y", "initial").toggleClass('search-show-header-static');
},500);
$form_container.find('.show-search-header i').toggleClass("flaticon-loupe ti-close");
});
});
},
cartOffcanvas: function() {
$('.mini-cart.offcanvas').on('click', function(e){
e.preventDefault();
if ( $('.offcanvas-content').hasClass('active') ) {
$('.offcanvas-content').removeClass('active');
$('.overlay-offcanvas-content').removeClass('active');
} else {
$('.offcanvas-content').addClass('active');
$('.overlay-offcanvas-content').addClass('active');
}
});
$('.overlay-offcanvas-content, .close-cart, .widget_shopping_cart_heading').on('click', function(){
$('.offcanvas-content').removeClass('active');
$('.overlay-offcanvas-content').removeClass('active');
});
},
addToCartAction: function() {
jQuery('body').bind('added_to_cart', function( fragments, cart_hash ){
$('.offcanvas-content').addClass('active');
$('.overlay-offcanvas-content').addClass('active');
});
},
getProductAjax: function() {
var self = this;
$('[data-load="ajax"] a').on('click', function(e){
e.preventDefault();
var $href = $(this).attr('href');
$(this).parent().parent().find('li').removeClass('active');
$(this).parent().addClass('active');
var main = $($href);
if ( main.length > 0 ) {
if ( main.data('loaded') == false ) {
main.parent().addClass('loading');
main.data('loaded', 'true');
$.ajax({
url: uomo_woo_opts.ajaxurl.toString().replace( '%%endpoint%%', 'uomo_ajax_get_products' ),
type:'POST',
dataType: 'html',
data: {
settings: main.data('settings'),
tab: main.data('tab')
}
}).done(function(reponse) {
main.html( reponse );
main.parent().removeClass('loading');
main.parent().find('.tab-pane').removeClass('active');
main.addClass('active');
main.find('[data-time="timmer"]').each(function(index, el) {
var $this = $(this);
var $date = $this.data('date').split("-");
var $format = "
%%D%% "+ uomo_countdown_opts.days +"
%%H%% "+ uomo_countdown_opts.hours +"
%%M%% "+ uomo_countdown_opts.mins +"
%%S%% "+ uomo_countdown_opts.secs +"
";
if ( $(this).data('format')) {
$format = $(this).data('format');
}
$this.apusCountDown({
TargetDate:$date[0]+"/"+$date[1]+"/"+$date[2]+" "+$date[3]+":"+$date[4]+":"+$date[5],
DisplayFormat: $format,
FinishMessage: "",
});
});
if ( main.find('.slick-carousel') ) {
self.initSlick(main.find('.slick-carousel'));
}
self.layzyLoadImage();
});
return true;
} else {
main.parent().removeClass('loading');
main.parent().find('.tab-pane').removeClass('active');
main.addClass('active');
var $slick = $("[data-carousel=slick]", main);
if ($slick.length > 0 && $slick.hasClass('slick-initialized')) {
$slick.slick('refresh');
}
self.layzyLoadImage();
}
}
});
},
loginRegister: function(){
var self = this;
$('body').on( 'click', '.register-login-action', function(e){
e.preventDefault();
var href = $(this).attr('href');
$(this).closest('.user').find('.register_login_wrapper').removeClass('active');
$(href).addClass('active');
if ( $(this).hasClass('creat-account') ) {
var $cookie_val = '#customer_register';
} else {
var $cookie_val = '#customer_login';
}
self.setCookie('uomo_login_register', $cookie_val, 1);
} );
},
searchProduct: function(){
if ( $('.apus-autocompleate-input').length ) {
$('.apus-autocompleate-input').typeahead({
hint: true,
highlight: true,
minLength : 3,
}, {
limit: 10,
name: 'search',
source: function (query, processSync, processAsync) {
processSync([uomo_woo_opts.empty_msg]);
$('.twitter-typeahead').addClass('loading');
return $.ajax({
url: uomo_woo_opts.ajaxurl.toString().replace( '%%endpoint%%', 'uomo_autocomplete_search' ),
type: 'GET',
data: {
's': query,
'category': $('.apus-search-form .dropdown_product_cat').val(),
'security': uomo_woo_opts.ajax_nonce
},
dataType: 'json',
success: function (json) {
$('.twitter-typeahead').removeClass('loading');
return processAsync(json);
}
});
},
templates: {
empty : [
'',
uomo_woo_opts.empty_msg,
'
'
].join('\n'),
suggestion: function(data) {
return '';
}
},
}
);
$('.apus-autocompleate-input').on('typeahead:selected', function (e, data) {
e.preventDefault();
setTimeout(function(){
$('.apus-autocompleate-input').val(data.title);
}, 5);
return false;
});
}
},
productDetail: function(){
// review click link
$('.woocommerce-review-link').on('click', function(){
$('.woocommerce-tabs a[href="#tabs-list-reviews"]').trigger('click');
$('html, body').animate({
scrollTop: $("#reviews").offset().top
}, 1000);
return false;
});
$( document.body )
.off( 'click', '.woocommerce-tabs.tabs-v2 .tab-item a.tab-header-title' )
.on( 'click', '.woocommerce-tabs.tabs-v2 .tab-item a.tab-header-title', function( event ) {
event.preventDefault();
$(this).closest('.tab-item').find('.tabs-content-wrapper').addClass('active');
$(this).closest('.woocommerce-tabs').find('.overlay-tabs').addClass('active');
} );
// $('.woocommerce-tabs.tabs-v2 .tab-item a.tab-header-title').on('click', function(){
// $(this).closest('.tab-item').find('.tabs-content-wrapper').addClass('active');
// $(this).closest('.woocommerce-tabs').find('.overlay-tabs').addClass('active');
// });
$('.overlay-tabs, .close-tab').on('click', function(){
$('.woocommerce-tabs.tabs-v2 .tabs-content-wrapper').removeClass('active');
$('.overlay-tabs').removeClass('active');
});
// Remove active tab
$( 'body' ).on( 'init', '.apus-wc-tabs', function() {
var hash = window.location.hash;
var url = window.location.href;
var $tabs = $( this );
if ( hash.toLowerCase().indexOf( 'comment-' ) >= 0 || hash === '#reviews' || hash === '#tab-reviews' ) {
$tabs.find( '.reviews_tab a' ).trigger('click');
} else if ( url.indexOf( 'comment-page-' ) > 0 || url.indexOf( 'cpage=' ) > 0 ) {
$tabs.find( '.reviews_tab a' ).trigger('click');
} else if ( hash === '#tab-additional_information' ) {
$tabs.find( '.additional_information_tab a' ).trigger('click');
}
} );
$('.delivery-shipping-info .item .item-btn').magnificPopup({
mainClass: 'apus-mfp-zoom-in login-popup',
type:'inline',
midClick: true
});
var main_sticky = $('.add-to-cart-bottom-wrapper');
if ( main_sticky.length > 0 && $('.details-product form.cart').length > 0 ){
setTimeout(function(){
var height = main_sticky.outerHeight();
$('body.sticky-add-to-cart').css({
'margin-bottom': height + 'px'
});
var Apus_Add_To_Cart_Fixed = function(){
"use strict";
var fromBottom = $('.details-product form.cart').offset().top + $('.details-product form.cart').outerHeight();
if( $(document).scrollTop() > fromBottom ){
main_sticky.addClass('sticky');
} else {
main_sticky.removeClass('sticky');
}
}
if ($(window).width() > 991) {
$(window).scroll(function(event) {
Apus_Add_To_Cart_Fixed();
});
Apus_Add_To_Cart_Fixed();
}
}, 100);
}
if ($('.details-product .sticky-this').length > 0 ) {
if ($(window).width() > 991) {
$('.details-product .sticky-this').stick_in_parent({
parent: ".product-v-wrapper"
});
}
}
},
initQuickview: function(){
var self = this;
$('body').on('click', 'a.quickview', function (e) {
e.preventDefault();
var $self = $(this);
$self.addClass('loading');
var product_id = $(this).data('product_id');
var url = uomo_woo_opts.ajaxurl.toString().replace( '%%endpoint%%', 'uomo_quickview_product' ) + '&product_id=' + product_id;
$.get(url,function(data,status){
$.magnificPopup.open({
mainClass: 'apus-mfp-zoom-in apus-quickview',
items : {
src : data,
type: 'inline'
},
callbacks: {
open: function() {
// variation
if ( $('.apus-quickview').find('.slick-carousel').length ) {
var $slick = $('.apus-quickview').find('.slick-carousel');
if ( $slick.hasClass('slick-initialized')) {
$slick.slick('refresh');
} else {
self.initSlick($slick);
}
}
setTimeout(function(){
self.layzyLoadImage();
if ( typeof wc_add_to_cart_variation_params !== 'undefined' ) {
$( '.variations_form' ).each( function() {
$( this ).wc_variation_form().find('.variations select:eq(0)').trigger('change');
});
}
if ( $.isFunction( $.fn.tawcvs_variation_swatches_form ) ) {
$( '.variations_form' ).tawcvs_variation_swatches_form();
}
}, 200);
self.refresh_quantity_increments();
// setTimeout(function(){
// var $max_heigh = $('.apus-mfp-zoom-in.apus-quickview .gallery-wrapper').outerHeight();
// $('.apus-mfp-zoom-in.apus-quickview .information').css({'height': $max_heigh});
// $('.apus-mfp-zoom-in.apus-quickview .information').perfectScrollbar();
// }, 100);
}
}
});
$self.removeClass('loading');
});
});
},
initSwatches: function() {
$( 'body' ).on( 'click', '.swatches-wrapper li a', function() {
var $parent = $(this).closest('.product-block');
var $image = $parent.find('.image img');
$('.swatches-wrapper li a').removeClass('active');
if ( $(this).attr( 'data-image_src' ) ) {
$image.attr('src', $(this).attr( 'data-image_src' ) );
$(this).addClass('active');
}
if ( $(this).attr( 'data-image_srcset' ) ) {
$image.attr('srcset', $(this).attr( 'data-image_srcset' ) );
}
if ( $(this).attr( 'data-image_sizes') ) {
$image.attr('sizes', $(this).attr( 'data-image_sizes' ) );
}
});
},
variationsImageUpdate: function( variation ) {
var $form = $('.variations_form'),
$product = $form.closest( '.product' ),
$product_gallery = $product.find( '.apus-woocommerce-product-gallery-wrapper' ),
$gallery_img = $product.find( '.apus-woocommerce-product-gallery-thumbs img:eq(0)' ),
$product_img_wrap = $product_gallery.find( '.woocommerce-product-gallery__image, .woocommerce-product-gallery__image--placeholder' ).eq( 0 ),
$product_img = $product_img_wrap.find( '.wp-post-image' ),
$product_link = $product_img_wrap.find( 'a' ).eq( 0 );
if ( variation && variation.image && variation.image.src && variation.image.src.length > 1 ) {
if ( $( '.apus-woocommerce-product-gallery-thumbs img[src="' + variation.image.thumb_src + '"]' ).length > 0 ) {
$( '.apus-woocommerce-product-gallery-thumbs img[src="' + variation.image.thumb_src + '"]' ).trigger( 'click' );
$form.attr( 'current-image', variation.image_id );
return;
} else {
$product_img.wc_set_variation_attr( 'src', variation.image.src );
$product_img.wc_set_variation_attr( 'height', variation.image.src_h );
$product_img.wc_set_variation_attr( 'width', variation.image.src_w );
$product_img.wc_set_variation_attr( 'srcset', variation.image.srcset );
$product_img.wc_set_variation_attr( 'sizes', variation.image.sizes );
$product_img.wc_set_variation_attr( 'title', variation.image.title );
$product_img.wc_set_variation_attr( 'alt', variation.image.alt );
$product_img.wc_set_variation_attr( 'data-src', variation.image.full_src );
$product_img.wc_set_variation_attr( 'data-large_image', variation.image.full_src );
$product_img.wc_set_variation_attr( 'data-large_image_width', variation.image.full_src_w );
$product_img.wc_set_variation_attr( 'data-large_image_height', variation.image.full_src_h );
$product_img_wrap.wc_set_variation_attr( 'data-thumb', variation.image.src );
$gallery_img.wc_set_variation_attr( 'src', variation.image.thumb_src );
$gallery_img.wc_set_variation_attr( 'srcset', variation.image.thumb_srcset );
$product_link.wc_set_variation_attr( 'href', variation.image.full_src );
$gallery_img.removeAttr('srcset');
if ( $('.apus-woocommerce-product-gallery').hasClass('slick-carousel') ) {
$('.apus-woocommerce-product-gallery').slick('slickGoTo', 0);
}
}
} else {
$product_img.wc_reset_variation_attr( 'src' );
$product_img.wc_reset_variation_attr( 'width' );
$product_img.wc_reset_variation_attr( 'height' );
$product_img.wc_reset_variation_attr( 'srcset' );
$product_img.wc_reset_variation_attr( 'sizes' );
$product_img.wc_reset_variation_attr( 'title' );
$product_img.wc_reset_variation_attr( 'alt' );
$product_img.wc_reset_variation_attr( 'data-src' );
$product_img.wc_reset_variation_attr( 'data-large_image' );
$product_img.wc_reset_variation_attr( 'data-large_image_width' );
$product_img.wc_reset_variation_attr( 'data-large_image_height' );
$product_img_wrap.wc_reset_variation_attr( 'data-thumb' );
$gallery_img.wc_reset_variation_attr( 'src' );
$product_link.wc_reset_variation_attr( 'href' );
}
window.setTimeout( function() {
$( window ).trigger( 'resize' );
$form.wc_maybe_trigger_slide_position_reset( variation );
$product_gallery.trigger( 'woocommerce_gallery_init_zoom' );
}, 20 );
},
initFilter: function() {
var self = this;
$('body').on('click', '.show-filter', function(e){
e.preventDefault();
$(".shop-top-sidebar-wrapper").toggle(300);
});
self.filterScrollbarsInit();
$('body').on('click', '.shop-top-categories a', function(e) {
e.preventDefault();
self.shopGetPage($(this).attr('href'));
});
$('body').on('click', '.widget_product_categories a', function(e) {
e.preventDefault();
self.shopGetPage($(this).attr('href'));
});
$('body').on('click', '.woocommerce-widget-layered-nav-list a', function(e) {
e.preventDefault();
self.shopGetPage($(this).attr('href'));
});
$('body').on('click', '.apus-price-filter a', function(e) {
e.preventDefault();
self.shopGetPage($(this).attr('href'));
});
$('body').on('click', '.apus-product-sorting a', function(e) {
e.preventDefault();
self.shopGetPage($(this).attr('href'));
});
$('body').on('click', '.widget_orderby a', function(e) {
e.preventDefault();
self.shopGetPage($(this).attr('href'), false, true);
});
$('body').on('click', '.widget_product_tag_cloud a', function(e) {
e.preventDefault();
self.shopGetPage($(this).attr('href'), false, true);
});
$('body').on('change', '.orderby-wrapper select', function(){
$('.orderby-wrapper form.woocommerce-ordering').trigger('submit');
});
$('body').on('submit', '.orderby-wrapper form.woocommerce-ordering', function (e) {
e.preventDefault();
var url = $(this).attr('action');
var formData = $(this).find(":input").filter(function(index, element) {
return $(element).val() != '';
}).serialize();
if( url.indexOf('?') != -1 ) {
url = url + '&' + formData;
} else{
url = url + '?' + formData;
}
self.shopGetPage( url );
return false;
});
$('body').on('click', '.shop-filter-top-wrapper aside .widget-title', function(){
$(this).closest('aside').find(' .widget-title ').toggleClass('active');
$(this).closest('aside').find(' .widget-title + * ').slideToggle();
});
// ajax pagination
if ( $('.ajax-pagination').length ) {
self.ajaxPaginationLoad();
}
},
shopGetPage: function(pageUrl, isBackButton, isProductTag){
var self = this;
if (self.shopAjax) { return false; }
if (pageUrl) {
// Remove any visible shop notices
//self.shopRemoveNotices();
// Set current shop URL (used to reset search and product-tag AJAX results)
self.shopSetCurrentUrl(isProductTag);
// Show 'loader' overlay
self.shopShowLoader();
// Make sure the URL has a trailing-slash before query args (301 redirect fix)
pageUrl = pageUrl.replace(/\/?(\?|#|$)/, '/$1');
// Set browser history "pushState" (if not back button "popstate" event)
if (!isBackButton) {
self.setPushState(pageUrl);
}
self.shopAjax = $.ajax({
url: pageUrl,
data: {
'load_type': 'full',
'_preset': uomo_woo_opts._preset
},
dataType: 'html',
cache: false,
headers: {'cache-control': 'no-cache'},
method: 'POST', // Note: Using "POST" method for the Ajax request to avoid "load_type" query-string in pagination links
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log('Apus: AJAX error - shopGetPage() - ' + errorThrown);
// Hide 'loader' overlay (after scroll animation)
self.shopHideLoader();
self.shopAjax = false;
},
success: function(response) {
// Update shop content
self.shopUpdateContent(response);
self.shopAjax = false;
}
});
}
},
shopHideLoader: function(){
$('body').find('#apus-shop-products-wrapper').removeClass('loading');
},
shopShowLoader: function(){
$('body').find('#apus-shop-products-wrapper').addClass('loading');
},
setPushState: function(pageUrl) {
window.history.pushState({apusShop: true}, '', pageUrl);
},
shopSetCurrentUrl: function(isProductTag) {
var self = this;
// Exclude product-tag page URL's
if (!self.isProductTagUrl) {
// Set current page URL
self.searchAndTagsResetURL = window.location.href;
}
// Is the current URL a product-tag URL?
self.isProductTagUrl = (isProductTag) ? true : false;
},
/**
* Shop: Update shop content with AJAX HTML
*/
shopUpdateContent: function(ajaxHTML) {
var self = this,
$ajaxHTML = $('' + ajaxHTML + '
'); // Wrap the returned HTML string in a dummy 'div' element we can get the elements
// Page title - wp_title()
var wpTitle = $ajaxHTML.find('#apus-wp-title').text();
if (wpTitle.length) {
// Update document/page title
document.title = wpTitle;
}
// Extract elements
var $categories = $ajaxHTML.find('.shop-top-categories'),
$sidebar = $ajaxHTML.find('.shop-top-sidebar-wrapper'),
$sidebar_left = $ajaxHTML.find('.shop-sidebar-left-wrapper'),
$sidebar_right = $ajaxHTML.find('.shop-sidebar-right-wrapper'),
$shop = $ajaxHTML.find('#apus-shop-products-wrapper');
// Prepare/replace categories
if ($categories.length) {
var $shopCategories = $('.shop-top-categories');
$shopCategories.replaceWith($categories);
}
// Prepare/replace sidebar filters
if ($sidebar_left.length) {
var $shopSidebar = $('.shop-sidebar-left-wrapper');
$shopSidebar.replaceWith($sidebar_left);
self.filterScrollbarsInit();
}
if ($sidebar_right.length) {
var $shopSidebar = $('.shop-sidebar-right-wrapper');
$shopSidebar.replaceWith($sidebar_right);
self.filterScrollbarsInit();
}
// Replace shop
if ($shop.length) {
$('#apus-shop-products-wrapper').replaceWith($shop);
}
$("body").css("overflow-y", "initial");
// Load images (init Unveil)
self.layzyLoadImage();
// Isoto Load
self.initIsotope();
// paging
self.ajaxPaginationLoad();
setTimeout(function() {
// Hide 'loader' overlay (after scroll animation)
self.shopHideLoader();
}, 100);
},
filterScrollbarsInit: function() {
$('.apus-woocommerce-widget-layered-nav .wrapper-limit').perfectScrollbar();
$('.apus-widget_price_filter .wrapper-limit').perfectScrollbar();
$('.apus_widget_product_sorting .wrapper-limit').perfectScrollbar();
$('.widget_product_tag_cloud .tagcloud').perfectScrollbar();
},
/**
* Shop: Initialize infinite load
*/
ajaxPaginationLoad: function() {
var self = this,
$infloadControls = $('.ajax-pagination'),
nextPageUrl;
// Used to check if "infload" needs to be initialized after Ajax page load
self.shopInfLoadBound = true;
self.infloadScroll = ($infloadControls.hasClass('infinite-action')) ? true : false;
if (self.infloadScroll) {
self.infscrollLock = false;
var pxFromWindowBottomToBottom,
pxFromMenuToBottom = Math.round($(document).height() - $infloadControls.offset().top);
//bufferPx = 0;
/* Bind: Window resize event to re-calculate the 'pxFromMenuToBottom' value (so the items load at the correct scroll-position) */
var to = null;
$(window).resize(function() {
if (to) { clearTimeout(to); }
to = setTimeout(function() {
pxFromMenuToBottom = Math.round($(document).height() - $infloadControls.offset().top);
}, 100);
});
$(window).scroll(function(){
if (self.infscrollLock) {
return;
}
pxFromWindowBottomToBottom = 0 + $(document).height() - ($(window).scrollTop()) - $(window).height();
// If distance remaining in the scroll (including buffer) is less than the pagination element to bottom:
if ((pxFromWindowBottomToBottom/* - bufferPx*/) < pxFromMenuToBottom) {
self.ajaxPaginationGet();
}
});
} else {
var $productsWrap = $('body');
/* Bind: "Load" button */
$productsWrap.on('click', '#apus-shop-products-wrapper .apus-loadmore-btn', function(e) {
e.preventDefault();
self.ajaxPaginationGet();
});
}
if (self.infloadScroll) {
$(window).trigger('scroll'); // Trigger scroll in case the pagination element (+buffer) is above the window bottom
}
},
/**
* Shop: AJAX load next page
*/
ajaxPaginationGet: function() {
var self = this;
if (self.shopAjax) return false;
// Remove any visible shop notices
//self.shopRemoveNotices();
// Get elements (these can be replaced with AJAX, don't pre-cache)
var $nextPageLink = $('.apus-pagination-next-link').find('a'),
$infloadControls = $('.ajax-pagination'),
nextPageUrl = $nextPageLink.attr('href');
if (nextPageUrl) {
//nextPageUrl = self.updateUrlParameter(nextPageUrl, 'load_type', 'products');
// Show 'loader'
$infloadControls.addClass('apus-loader');
self.shopAjax = $.ajax({
url: nextPageUrl,
data: {
load_type: 'products',
'_preset': uomo_woo_opts._preset
},
dataType: 'html',
cache: false,
headers: {'cache-control': 'no-cache'},
method: 'GET',
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log('APUS: AJAX error - ajaxPaginationGet() - ' + errorThrown);
},
complete: function() {
// Hide 'loader'
$infloadControls.removeClass('apus-loader');
},
success: function(response) {
var $response = $('' + response + '
'), $moreProducts = $response.children('.apus-products');
// add new products
var $layout_type = $('.apus-shop-products-wrapper').data('layout_type');
if ( $layout_type == 'metro' ) {
var $new = $moreProducts.find('.isotope-item').appendTo($('.apus-shop-products-wrapper .products .isotope-items'));
setTimeout(function(){
$('.apus-shop-products-wrapper').find('.isotope-items').isotope( 'insert', $new );
}, 50);
} else {
$('.apus-shop-products-wrapper .products .row-products-wrapper').append($moreProducts.html());
}
// Load images (init Unveil)
self.layzyLoadImage();
// Get the 'next page' URL
nextPageUrl = $response.find('.apus-pagination-next-link').children('a').attr('href');
if (nextPageUrl) {
$nextPageLink.attr('href', nextPageUrl);
} else {
$('.apus-shop-products-wrapper').addClass('all-products-loaded');
if (self.infloadScroll) {
self.infscrollLock = true; // "Lock" scroll (no more products/pages)
}
$infloadControls.find('.apus-loadmore-btn').addClass('hidden');
$nextPageLink.removeAttr('href');
}
self.shopAjax = false;
if (self.infloadScroll) {
$(window).trigger('scroll'); // Trigger 'scroll' in case the pagination element (+buffer) is still above the window bottom
}
}
});
} else {
if (self.infloadScroll) {
self.infscrollLock = true; // "Lock" scroll (no more products/pages)
}
}
}
});
$.apusThemeExtensions.shop = $.apusThemeCore.woo_init;
// gallery
var ApusProductGallery = function( $target, args ) {
var self = this;
this.$target = $target;
this.$images = $( '.woocommerce-product-gallery__image', $target );
// No images? Abort.
if ( 0 === this.$images.length ) {
this.$target.css( 'opacity', 1 );
return;
}
// Make this object available.
$target.data( 'product_gallery', this );
// Pick functionality to initialize...
this.zoom_enabled = $.isFunction( $.fn.zoom ) && wc_single_product_params.zoom_enabled;
this.photoswipe_enabled = typeof PhotoSwipe !== 'undefined' && wc_single_product_params.photoswipe_enabled;
// ...also taking args into account.
if ( args ) {
this.zoom_enabled = false === args.zoom_enabled ? false : this.zoom_enabled;
this.photoswipe_enabled = false === args.photoswipe_enabled ? false : this.photoswipe_enabled;
}
// Bind functions to this.
this.initZoom = this.initZoom.bind( this );
this.initZoomForTarget = this.initZoomForTarget.bind( this );
this.initPhotoswipe = this.initPhotoswipe.bind( this );
this.getGalleryItems = this.getGalleryItems.bind( this );
this.openPhotoswipe = this.openPhotoswipe.bind( this );
this.$target.css( 'opacity', 1 );
if ( this.zoom_enabled ) {
this.initZoom();
$target.on( 'woocommerce_gallery_init_zoom', this.initZoom );
}
if ( this.photoswipe_enabled ) {
this.initPhotoswipe();
}
$('.apus-woocommerce-product-gallery').on('beforeChange', function(event, slick, currentSlide, nextSlide){
self.initZoomForTarget( self.$images.eq(nextSlide) );
});
};
/**
* Init zoom.
*/
ApusProductGallery.prototype.initZoom = function() {
this.initZoomForTarget( this.$images.first() );
};
/**
* Init zoom.
*/
ApusProductGallery.prototype.initZoomForTarget = function( zoomTarget ) {
if ( ! this.zoom_enabled ) {
return false;
}
var galleryWidth = this.$target.width(),
zoomEnabled = false;
$( zoomTarget ).each( function( index, target ) {
var image = $( target ).find( 'img' );
if ( image.data( 'large_image_width' ) > galleryWidth ) {
zoomEnabled = true;
return false;
}
} );
// But only zoom if the img is larger than its container.
if ( zoomEnabled ) {
var zoom_options = {
touch: false
};
if ( 'ontouchstart' in window ) {
zoom_options.on = 'click';
}
zoomTarget.trigger( 'zoom.destroy' );
zoomTarget.zoom( zoom_options );
}
};
/**
* Init PhotoSwipe.
*/
ApusProductGallery.prototype.initPhotoswipe = function() {
if ( this.$images.length > 0 ) {
this.$target.prepend( '' );
this.$target.on( 'click', '.woocommerce-product-gallery__trigger', this.openPhotoswipe );
}
//this.$target.on( 'click', '.woocommerce-product-gallery__image a', this.openPhotoswipe );
};
/**
* Get product gallery image items.
*/
ApusProductGallery.prototype.getGalleryItems = function() {
var $slides = this.$images,
items = [];
if ( $slides.length > 0 ) {
$slides.each( function( i, el ) {
var img = $( el ).find( 'img' ),
large_image_src = img.attr( 'data-large_image' ),
large_image_w = img.attr( 'data-large_image_width' ),
large_image_h = img.attr( 'data-large_image_height' ),
item = {
src : large_image_src,
w : large_image_w,
h : large_image_h,
title: img.attr( 'data-caption' ) ? img.attr( 'data-caption' ) : img.attr( 'title' )
};
items.push( item );
} );
}
return items;
};
/**
* Open photoswipe modal.
*/
ApusProductGallery.prototype.openPhotoswipe = function( e ) {
e.preventDefault();
var pswpElement = $( '.pswp' )[0],
items = this.getGalleryItems(),
eventTarget = $( e.target ),
clicked;
if ( this.$target.find( '.woocommerce-product-gallery__image.slick-current' ).length > 0 ) {
clicked = this.$target.find( '.woocommerce-product-gallery__image.slick-current' );
} else {
clicked = eventTarget.closest( '.woocommerce-product-gallery__image' );
}
var options = $.extend( {
index: $( clicked ).index()
}, wc_single_product_params.photoswipe_options );
// Initializes and opens PhotoSwipe.
var photoswipe = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options );
photoswipe.init();
};
/**
* Function to call wc_product_gallery on jquery selector.
*/
$.fn.apus_wc_product_gallery = function( args ) {
new ApusProductGallery( this, args );
return this;
};
/*
* Initialize all galleries on page.
*/
$( '.apus-woocommerce-product-gallery-wrapper' ).each( function() {
$( this ).apus_wc_product_gallery();
} );
})(jQuery);