var woodmartThemeModule; var wooFile = false; (function ($) { "use strict"; woodmartThemeModule = (function () { var woodmartTheme = { popupEffect: 'mfp-move-horizontal', bootstrapTooltips: '.woodmart-tooltip, .product-actions-btns > a, .wrapp-buttons .woodmart-buttons > div:not(.woodmart-add-btn) a, .wrapp-buttons .woodmart-buttons .woodmart-add-btn, body:not(.catalog-mode-on):not(.login-see-prices) .woodmart-hover-base:not(.product-in-carousel) .woodmart-buttons > div:not(.woodmart-add-btn) a, body:not(.catalog-mode-on):not(.login-see-prices) .woodmart-hover-base.hover-width-small:not(.product-in-carousel) .woodmart-add-btn, body:not(.catalog-mode-on):not(.login-see-prices) .woodmart-hover-base.add-small-button:not(.product-in-carousel) .woodmart-add-btn, .woodmart-hover-base .product-compare-button a', }; return { init: function () { // Disable nanoscroller option woodmartTheme.disableNanoScrollerWebkit = woodmart_settings.disable_nanoscroller == 'webkit' && (jscd.browser == 'Chrome' || jscd.browser == 'Opera' || jscd.browser == 'Safari'); this.headerBanner(); this.headerBuilder() this.visibleElements(); this.bannersHover(); this.portfolioEffects(); this.parallax(); this.googleMap(); this.scrollTop(); this.sidebarMenu(); this.widgetsHidable(); this.stickyColumn(); this.mfpPopup(); this.blogMasonry(); this.blogLoadMore(); this.portfolioLoadMore(); this.equalizeColumns(); this.menuSetUp(); this.menuOffsets(); this.onePageMenu(); this.mobileNavigation(); this.simpleDropdown(); this.promoPopup(); this.contentPopup(); this.cookiesPopup(); this.btnsToolTips(); this.stickyFooter(); this.countDownTimer(); this.nanoScroller(); this.gradientShift(); this.videoPoster(); this.mobileSearchIcon(); this.fullScreenMenu(); this.searchFullScreen(); this.wooInit(); this.lazyLoading(); this.ajaxSearch(); this.photoswipeImages(); this.stickySocialButtons(); this.animationsOffset(); this.hiddenSidebar(); this.imageHotspot(); this.woodSliderLazyLoad(); this.owlCarouselInit(); this.portfolioPhotoSwipe(); this.woocommerceNotices(); this.menuDropdownsAJAX(); this.instagramAjaxQuery(); $(window).resize(); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * WooCommerce init *------------------------------------------------------------------------------------------------------------------------------------------- */ wooInit: function () { if (!woodmart_settings.woo_installed) return; this.loginDropdown(); this.loginSidebar(); this.productLoaderPosition(); this.initZoom(); this.woocommerceWrappTable(); this.woocommerceComments(); this.onRemoveFromCart(); this.woocommerceQuantity(); this.updateWishListNumberInit(); this.cartWidget(); this.ajaxFilters(); this.shopPageInit(); this.filtersArea(); this.categoriesMenu(); this.headerCategoriesMenu(); this.loginTabs(); this.productVideo(); this.product360Button(); this.wishList(); this.compare(); this.woodmartCompare(); this.productsLoadMore(); this.productsTabs(); this.swatchesVariations(); this.swatchesOnGrid(); this.quickViewInit(); this.quickShop(); this.addToCart(); this.productAccordion(); this.productImagesGallery(); this.productImages(); this.stickyDetails(); this.stickyAddToCart(); this.stickySidebarBtn(); }, instagramAjaxQuery: function () { $('.instagram-widget').each(function () { var $instagram = $(this); if (!$instagram.hasClass('instagram-with-error')) { return; } var username = $instagram.data('username'); var atts = $instagram.data('atts'); var request_param = username.indexOf('#') > -1 ? 'explore/tags/' + username.substr(1) : username; var url = 'https://www.instagram.com/' + request_param + '/'; $instagram.addClass('loading'); $.ajax({ url: url, success: function (response) { $.ajax({ url: woodmart_settings.ajaxurl, data: { action: 'woodmart_instagram_ajax_query', body: response, atts: atts, }, dataType: 'json', method: 'POST', success: function (response) { $instagram.parent().html(response); woodmartThemeModule.owlCarouselInit(); }, error: function (data) { console.log('instagram ajax error'); }, }); }, error: function (data) { console.log('instagram ajax error'); }, }); }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Menu dropdowns AJAX *------------------------------------------------------------------------------------------------------------------------------------------- */ menuDropdownsAJAX: function () { var $menus = jQuery('.menu').has('.dropdown-load-ajax'); jQuery('body').on('mousemove', checkMenuProximity); function checkMenuProximity(event) { $menus.each(function () { var $menu = jQuery(this); if ($menu.hasClass('dropdowns-loading') || $menu.hasClass('dropdowns-loaded')) return; if (!isNear($menu, 50, event)) return; loadDropdowns($menu); }); } function loadDropdowns($menu) { $menu.addClass('dropdowns-loading'); var $items = $menu.find('.dropdown-load-ajax'), ids = []; $items.each(function () { ids.push(jQuery(this).find('.dropdown-html-placeholder').data('id')); }); jQuery.ajax({ url: woodmart_settings.ajaxurl, data: { action: 'woodmart_load_html_dropdowns', ids: ids, }, dataType: 'json', method: 'POST', success: function (response) { if (response.status == 'success') { Object.keys(response.data).forEach(function (id) { var html = response.data[id]; $menu.find('[data-id="' + id + '"]').replaceWith(html); }); // Initialize OWL Carousels woodmartThemeModule.owlCarouselInit(); } else { console.log('loading html dropdowns returns wrong data - ', response.message); } }, error: function (data) { console.log('loading html dropdowns ajax error'); }, complete: function () { $menu.removeClass('dropdowns-loading').addClass('dropdowns-loaded'); }, }); } function isNear($element, distance, event) { var left = $element.offset().left - distance, top = $element.offset().top - distance, right = left + $element.width() + (2 * distance), bottom = top + $element.height() + (2 * distance), x = event.pageX, y = event.pageY; return (x > left && x < right && y > top && y < bottom); }; }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * WooCommerce pretty notices *------------------------------------------------------------------------------------------------------------------------------------------- */ woocommerceNotices: function () { var notices = '.woocommerce-error, .woocommerce-info, .woocommerce-message, div.wpcf7-response-output, #yith-wcwl-popup-message, .mc4wp-alert, .dokan-store-contact .alert-success, .yith_ywraq_add_item_product_message'; $('body').on('click', notices, function () { var $msg = $(this); hideMessage($msg); }); var showAllMessages = function () { $notices.addClass('shown-notice'); }; var hideAllMessages = function () { hideMessage($notices); }; var hideMessage = function ($msg) { $msg.removeClass('shown-notice').addClass('hidden-notice'); }; }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Portfolio photo swipe *------------------------------------------------------------------------------------------------------------------------------------------- */ portfolioPhotoSwipe: function () { $(document).on('click', '.portfolio-enlarge', function (e) { e.preventDefault(); var $parent = $(this).parents('.owl-item'); if ($parent.length == 0) { $parent = $(this).parents('.portfolio-entry'); } var index = $parent.index(); var items = getPortfolioImages(); woodmartThemeModule.callPhotoSwipe(index, items); }); var getPortfolioImages = function () { var items = []; $('.portfolio-entry').find('figure a img').each(function () { items.push({ src: $(this).attr('src'), w: $(this).attr('width'), h: $(this).attr('height') }); }); return items; }; }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Owl carousel init function *------------------------------------------------------------------------------------------------------------------------------------------- */ owlCarouselInit: function () { $(document).on('FrontendEditorCarouselInit', function (event, $element) { owlInit($element); }); $('div[data-owl-carousel]:not(.scroll-init)').each(function () { owlInit($(this)); }); if (typeof ($.fn.waypoint) != 'undefined') { $('div[data-owl-carousel].scroll-init').waypoint(function () { owlInit($(this)); }, { offset: '100%' }); } function owlInit($this) { var $owl = $this.find('.owl-carousel'); if ($(window).width() <= 1024 && $this.hasClass('disable-owl-mobile') || $owl.hasClass('owl-loaded')) { return; } var options = { rtl: $('body').hasClass('rtl'), items: $this.data('desktop') ? $this.data('desktop') : 1, responsive: { 1025: { items: $this.data('desktop') ? $this.data('desktop') : 1 }, 769: { items: $this.data('tablet_landscape') ? $this.data('tablet_landscape') : 1 }, 577: { items: $this.data('tablet') ? $this.data('tablet') : 1 }, 0: { items: $this.data('mobile') ? $this.data('mobile') : 1 } }, autoplay: $this.data('autoplay') == 'yes' ? true : false, autoplayHoverPause: $this.data('autoplay' == 'yes') ? true : false, autoplayTimeout: $this.data('speed') ? $this.data('speed') : 5000, dots: $this.data('hide_pagination_control') == 'yes' ? false : true, nav: $this.data('hide_prev_next_buttons') == 'yes' ? false : true, autoHeight: $this.data('autoheight') == 'yes' ? true : false, slideBy: $this.data('scroll_per_page') == 'yes' ? 'page' : 1, navText: false, center: $this.data('center_mode') == 'yes' ? true : false, loop: $this.data('wrap') == 'yes' ? true : false, dragEndSpeed: $this.data('dragendspeed') ? $this.data('dragendspeed') : 200, onRefreshed: function () { $(window).resize(); } }; if ($this.data('sliding_speed')) { options.smartSpeed = $this.data('sliding_speed'); options.dragEndSpeed = $this.data('sliding_speed'); } if ($this.data('animation')) { options.animateOut = $this.data('animation'); options.mouseDrag = false; } if ($this.data('content_animation')) { function determinePseudoActive() { var id = $owl.find('.owl-item.active').find('.woodmart-slide').attr('id'); $owl.find('.owl-item.pseudo-active').removeClass('pseudo-active'); var $els = $owl.find('[id="' + id + '"]'); $els.each(function () { if (!$(this).parent().hasClass('active')) { $(this).parent().addClass('pseudo-active'); } }); } determinePseudoActive(); options.onTranslated = function () { determinePseudoActive(); }; } $(window).on('vc_js', function () { $owl.trigger('refresh.owl.carousel'); }); $owl.owlCarousel(options); if ($this.data('autoheight') == 'yes') { $owl.imagesLoaded(function () { $owl.trigger('refresh.owl.carousel'); }); } } }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Woodmart slider lazyload *------------------------------------------------------------------------------------------------------------------------------------------- */ woodSliderLazyLoad: function () { $('.woodmart-slider').on('changed.owl.carousel', function (event) { var $this = $(this); var active = $this.find('.owl-item').eq(event.item.index); var id = active.find('.woodmart-slide').attr('id'); var $els = $this.find('[id="' + id + '"]'); active.find('.woodmart-slide').addClass('woodmart-loaded'); $els.each(function () { $(this).addClass('woodmart-loaded'); }); }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Image hotspot *------------------------------------------------------------------------------------------------------------------------------------------- */ imageHotspot: function () { //Hotspot action $('.woodmart-image-hotspot').each(function () { var _this = $(this); var btn = _this.find('.hotspot-btn'); // var content = _this.find('.hotspot-content'); var parentWrapper = _this.parents('.woodmart-image-hotspot-wrapper'); if (!parentWrapper.hasClass('hotspot-action-click') && $(window).width() > 1024) return; btn.on('click', function () { if (_this.hasClass('hotspot-opened')) { _this.removeClass('hotspot-opened'); } else { _this.addClass('hotspot-opened'); _this.siblings().removeClass('hotspot-opened'); } $(document).trigger('wood-images-loaded'); return false; }); $(document).on('click', function (e) { var target = e.target; if (_this.hasClass('hotspot-opened') && !$(target).is('.woodmart-image-hotspot') && !$(target).parents().is('.woodmart-image-hotspot')) { _this.removeClass('hotspot-opened'); return false; } }); }); //Image loaded $('.woodmart-image-hotspot-wrapper').each(function () { var _this = $(this); _this.imagesLoaded(function () { _this.addClass('loaded'); }); }); //Content position $('.woodmart-image-hotspot .hotspot-content').each(function () { var content = $(this); var offsetLeft = content.offset().left; var offsetRight = $(window).width() - (offsetLeft + content.outerWidth()); if ($(window).width() > 768) { if (offsetLeft <= 0) content.addClass('hotspot-overflow-right'); if (offsetRight <= 0) content.addClass('hotspot-overflow-left'); } if ($(window).width() <= 768) { if (offsetLeft <= 0) content.css('marginLeft', Math.abs(offsetLeft - 15) + 'px'); if (offsetRight <= 0) content.css('marginLeft', offsetRight - 15 + 'px'); } }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Hidden sidebar button *------------------------------------------------------------------------------------------------------------------------------------------- */ hiddenSidebar: function () { $('body').on('click', '.woodmart-show-sidebar-btn, .woodmart-sticky-sidebar-opener', function (e) { e.preventDefault(); if ($('.sidebar-container').hasClass('show-hidden-sidebar')) { woodmartThemeModule.hideShopSidebar(); } else { showSidebar(); } }); $('body').on("click touchstart", ".woodmart-close-side, .close-side-widget", function () { woodmartThemeModule.hideShopSidebar(); }); var showSidebar = function () { $('.sidebar-container').addClass('show-hidden-sidebar'); $('.woodmart-close-side').addClass('woodmart-close-side-opened'); $('.woodmart-show-sidebar-btn').addClass('btn-clicked'); if ($(window).width() >= 1024 && (!woodmartTheme.disableNanoScrollerWebkit && woodmart_settings.disable_nanoscroller != 'disable')) { $(".sidebar-inner.woodmart-sidebar-scroll").nanoScroller({ paneClass: 'woodmart-scroll-pane', sliderClass: 'woodmart-scroll-slider', contentClass: 'woodmart-sidebar-content', preventPageScrolling: false }); } }; }, hideShopSidebar: function () { $('.woodmart-show-sidebar-btn').removeClass('btn-clicked'); $('.sidebar-container').removeClass('show-hidden-sidebar'); $('.woodmart-close-side').removeClass('woodmart-close-side-opened'); if (!woodmartTheme.disableNanoScrollerWebkit && woodmart_settings.disable_nanoscroller != 'disable') { $('.sidebar-inner.woodmart-scroll').nanoScroller({ destroy: true }); } }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Css animations offset *------------------------------------------------------------------------------------------------------------------------------------------- */ animationsOffset: function () { if (typeof ($.fn.waypoint) == 'undefined') return; $('.wpb_animate_when_almost_visible:not(.wpb_start_animation)').waypoint(function () { $(this).addClass('wpb_start_animation animated') }, { offset: '100%' }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Social buttons class on load *------------------------------------------------------------------------------------------------------------------------------------------- */ stickySocialButtons: function () { $('.woodmart-sticky-social').addClass('buttons-loaded'); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Photoswipe gallery *------------------------------------------------------------------------------------------------------------------------------------------- */ photoswipeImages: function () { $('.photoswipe-images').each(function () { var $this = $(this); $this.on('click', 'a', function (e) { e.preventDefault(); var index = $(e.currentTarget).data('index') - 1; var items = getGalleryItems($this, []); woodmartThemeModule.callPhotoSwipe(index, items); }); }); var getGalleryItems = function ($gallery, items) { var src, width, height, title; $gallery.find('a').each(function () { src = $(this).attr('href'); width = $(this).data('width'); height = $(this).data('height'); title = $(this).attr('title'); if (!isItemInArray(items, src)) { items.push({ src: src, w: width, h: height, title: title }); } }); return items; }; var isItemInArray = function (items, src) { var i; for (i = 0; i < items.length; i++) { if (items[i].src == src) { return true; } } return false; }; }, callPhotoSwipe: function (index, items) { var pswpElement = document.querySelectorAll('.pswp')[0]; if ($('body').hasClass('rtl')) { index = items.length - index - 1; items = items.reverse(); } // define options (if needed) var options = { // optionName: 'option value' // for example: index: index, // start at first slide shareButtons: [ { id: 'facebook', label: woodmart_settings.share_fb, url: 'https://www.facebook.com/sharer/sharer.php?u={{url}}' }, { id: 'twitter', label: woodmart_settings.tweet, url: 'https://twitter.com/intent/tweet?text={{text}}&url={{url}}' }, { id: 'pinterest', label: woodmart_settings.pin_it, url: 'http://www.pinterest.com/pin/create/button/' + '?url={{url}}&media={{image_url}}&description={{text}}' }, { id: 'download', label: woodmart_settings.download_image, url: '{{raw_image_url}}', download: true } ], // getThumbBoundsFn: function(index) { // // get window scroll Y // var pageYScroll = window.pageYOffset || document.documentElement.scrollTop; // // optionally get horizontal scroll // // get position of element relative to viewport // var rect = $target.offset(); // // w = width // return {x:rect.left, y:rect.top + pageYScroll, w:rect.width}; // } }; // Initializes and opens PhotoSwipe var gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, options); gallery.init(); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Header banner *------------------------------------------------------------------------------------------------------------------------------------------- */ headerBanner: function () { var banner_version = woodmart_settings.header_banner_version, banner_btn = woodmart_settings.header_banner_close_btn, banner_enabled = woodmart_settings.header_banner_enabled; if (Cookies.get('woodmart_tb_banner_' + banner_version) == 'closed' || banner_btn == false || banner_enabled == false) return; var banner = $('.header-banner'); if (!$('body').hasClass('page-template-maintenance')) { $('body').addClass('header-banner-display'); } banner.on('click', '.close-header-banner', function (e) { e.preventDefault(); closeBanner(); }) var closeBanner = function () { $('body').removeClass('header-banner-display').addClass('header-banner-hide'); Cookies.set('woodmart_tb_banner_' + banner_version, 'closed', { expires: 60, path: '/' }); }; }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Full screen menu *------------------------------------------------------------------------------------------------------------------------------------------- */ fullScreenMenu: function () { $('.full-screen-burger-icon').on('click', function () { $('body').toggleClass('full-screen-menu-open'); }); $(document).keyup(function (e) { if (e.keyCode === 27) $('.full-screen-close-icon').click(); }); $('.full-screen-close-icon').on('click', function () { $('body').removeClass('full-screen-menu-open'); setTimeout(function () { $('.full-screen-nav .menu-item-has-children').removeClass('sub-menu-open'); $('.full-screen-nav .menu-item-has-children .icon-sub-fs').removeClass('up-icon'); }, 200) }); $('.full-screen-nav .menu > .menu-item.menu-item-has-children, .full-screen-nav .menu-item-design-default.menu-item-has-children .menu-item-has-children').append(''); $('.full-screen-nav').on('click', '.icon-sub-fs', function (e) { var $icon = $(this), $parentItem = $icon.parent(); e.preventDefault(); if ($parentItem.hasClass('sub-menu-open')) { $parentItem.removeClass('sub-menu-open'); $icon.removeClass('up-icon'); } else { $parentItem.siblings('.sub-menu-open').find('.icon-sub-fs').removeClass('up-icon'); $parentItem.siblings('.sub-menu-open').removeClass('sub-menu-open'); $parentItem.addClass('sub-menu-open'); $icon.addClass('up-icon'); } }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Mobile search icon *------------------------------------------------------------------------------------------------------------------------------------------- */ mobileSearchIcon: function () { $('.mobile-search-icon.search-button').on('click', function (e) { e.preventDefault(); if (!$('.mobile-nav').hasClass('act-mobile-menu')) { $('.mobile-nav').addClass('act-mobile-menu'); $('.woodmart-close-side').addClass('woodmart-close-side-opened'); $('.mobile-nav .searchform').find('input[type="text"]').focus(); } }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Video Poster *------------------------------------------------------------------------------------------------------------------------------------------- */ videoPoster: function () { $('.woodmart-video-poster-wrapper').on('click', function () { var videoWrapper = $(this), video = videoWrapper.parent().find('iframe'), videoScr = video.attr('src'), videoNewSrc = videoScr + '&autoplay=1'; if (videoScr.indexOf('vimeo.com') + 1) { videoNewSrc = videoScr + '?autoplay=1'; } video.attr('src', videoNewSrc); videoWrapper.addClass('hidden-poster'); }) }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Header builder scripts for sticky header *------------------------------------------------------------------------------------------------------------------------------------------- */ headerBuilder: function () { var $header = $('.whb-header'), $stickyElements = $('.whb-sticky-row'), $firstSticky = '', headerHeight = $header.find('.whb-main-header').outerHeight(), $window = $(window), isSticked = false, adminBarHeight = $('#wpadminbar').outerHeight(), stickAfter = 300, cloneHTML = '', isHideOnScroll = $header.hasClass('whb-hide-on-scroll'); $stickyElements.each(function () { if ($(this).outerHeight() > 10) { $firstSticky = $(this); return false; } }); // Real header sticky option if ($header.hasClass('whb-sticky-real')) { // if no sticky rows if ($firstSticky.length == 0 || $firstSticky.outerHeight() < 10) return; $header.addClass('whb-sticky-prepared').css({ paddingTop: headerHeight }) stickAfter = $firstSticky.offset().top - adminBarHeight } // Sticky header clone if ($header.hasClass('whb-sticky-clone')) { var data = [] data['cloneClass'] = $header.find('.whb-general-header').attr('class') if (isHideOnScroll) { data['wrapperClasses'] = 'whb-hide-on-scroll'; } cloneHTML = woodmart_settings.whb_header_clone cloneHTML = cloneHTML.replace(/<%([^%>]+)?%>/g, function (replacement) { var selector = replacement.slice(2, -2) return $header.find(selector).length ? $('
') .append($header.find(selector).first().clone()) .html() : (data[selector] !== undefined) ? data[selector] : '' }) $header.after(cloneHTML) $header = $header.parent().find('.whb-clone') $header.find('.whb-row').removeClass('whb-flex-equal-sides').addClass('whb-flex-flex-middle'); } if ($('.whb-header').hasClass('whb-scroll-slide')) { stickAfter = headerHeight + adminBarHeight } var previousScroll; $window.on('scroll', function () { var after = stickAfter; var currentScroll = $(window).scrollTop(); var windowHeight = $(window).height(); var documentHeight = $(document).height(); if ($('.header-banner').length > 0 && $('body').hasClass('header-banner-display')) { after += $('.header-banner').outerHeight(); } if (!$('.close-header-banner').length && $header.hasClass('whb-scroll-stick')) { after = stickAfter } if (currentScroll > after) { stickHeader(); } else { unstickHeader(); } var startAfter = 100; if ($header.hasClass('whb-scroll-stick')) { startAfter = 500; } if (isHideOnScroll) { if (previousScroll - currentScroll > 0 && currentScroll > after ) { $header.addClass('whb-scroll-up'); $header.removeClass('whb-scroll-down'); } else if (currentScroll - previousScroll > 0 && currentScroll + windowHeight != documentHeight && currentScroll > (after + startAfter)) { $header.addClass('whb-scroll-down'); $header.removeClass('whb-scroll-up'); } else if (currentScroll <= after) { $header.removeClass('whb-scroll-down'); $header.removeClass('whb-scroll-up'); } else if (currentScroll + windowHeight >= documentHeight - 5) { $header.addClass('whb-scroll-up'); $header.removeClass('whb-scroll-down'); } } previousScroll = currentScroll; }); function stickHeader() { if (isSticked) return isSticked = true $header.addClass('whb-sticked') } function unstickHeader() { if (!isSticked) return isSticked = false $header.removeClass('whb-sticked') } }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Counter shortcode method *------------------------------------------------------------------------------------------------------------------------------------------- */ counterShortcode: function (counter) { if (counter.attr('data-state') == 'done' || counter.text() != counter.data('final')) { return; } counter.prop('Counter', 0).animate({ Counter: counter.text() }, { duration: 3000, easing: 'swing', step: function (now) { if (now >= counter.data('final')) { counter.attr('data-state', 'done'); } counter.text(Math.ceil(now)); } }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Activate methods in viewport *------------------------------------------------------------------------------------------------------------------------------------------- */ visibleElements: function () { $('.woodmart-counter .counter-value').each(function () { $(this).waypoint(function () { woodmartThemeModule.counterShortcode($(this)); }, { offset: '100%' }); }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Banner hover effect with jquery panr *------------------------------------------------------------------------------------------------------------------------------------------- */ bannersHover: function () { if (typeof ($.fn.panr) == 'undefined') return; $('.promo-banner.banner-hover-parallax').panr({ sensitivity: 20, scale: false, scaleOnHover: true, scaleTo: 1.15, scaleDuration: .34, panY: true, panX: true, panDuration: 0.5, resetPanOnMouseLeave: true }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Portfolio hover effects *------------------------------------------------------------------------------------------------------------------------------------------- */ portfolioEffects: function () { if (typeof ($.fn.panr) == 'undefined') return; $('.woodmart-portfolio-holder .portfolio-parallax').panr({ sensitivity: 15, scale: false, scaleOnHover: true, scaleTo: 1.12, scaleDuration: 0.45, panY: true, panX: true, panDuration: 1.5, resetPanOnMouseLeave: true }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Promo popup *------------------------------------------------------------------------------------------------------------------------------------------- */ promoPopup: function () { var promo_version = woodmart_settings.promo_version; if ($('body').hasClass('page-template-maintenance') || woodmart_settings.enable_popup != 'yes' || (woodmart_settings.promo_popup_hide_mobile == 'yes' && $(window).width() < 768)) return; var popup = $('.woodmart-promo-popup'), shown = false, pages = Cookies.get('woodmart_shown_pages'); var showPopup = function () { $.magnificPopup.open({ items: { src: '.woodmart-promo-popup' }, type: 'inline', removalDelay: 500, //delay removal by X to allow out-animation tClose: woodmart_settings.close, tLoading: woodmart_settings.loading, callbacks: { beforeOpen: function () { this.st.mainClass = woodmartTheme.popupEffect + ' promo-popup-wrapper'; }, open: function () { // Will fire when this exact popup is opened // this - is Magnific Popup object }, close: function () { Cookies.set('woodmart_popup_' + promo_version, 'shown', { expires: 7, path: '/' }); } // e.t.c. } }); $(document).trigger('wood-images-loaded'); }; $('.woodmart-open-newsletter').on('click', function (e) { e.preventDefault(); showPopup(); }) if (!pages) pages = 0; if (pages < woodmart_settings.popup_pages) { pages++; Cookies.set('woodmart_shown_pages', pages, { expires: 7, path: '/' }); return false; } if (Cookies.get('woodmart_popup_' + promo_version) != 'shown') { if (woodmart_settings.popup_event == 'scroll') { $(window).scroll(function () { if (shown) return false; if ($(document).scrollTop() >= woodmart_settings.popup_scroll) { showPopup(); shown = true; } }); } else { setTimeout(function () { showPopup(); }, woodmart_settings.popup_delay); } } }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Content in popup element *------------------------------------------------------------------------------------------------------------------------------------------- */ contentPopup: function () { var popup = $('.woodmart-open-popup'); popup.magnificPopup({ type: 'inline', removalDelay: 500, //delay removal by X to allow out-animation tClose: woodmart_settings.close, tLoading: woodmart_settings.loading, callbacks: { beforeOpen: function () { this.st.mainClass = woodmartTheme.popupEffect + ' content-popup-wrapper'; }, open: function () { $(document).trigger('wood-images-loaded'); } } }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Cookies law *------------------------------------------------------------------------------------------------------------------------------------------- */ cookiesPopup: function () { var cookies_version = woodmart_settings.cookies_version; if (Cookies.get('woodmart_cookies_' + cookies_version) == 'accepted') return; var popup = $('.woodmart-cookies-popup'); setTimeout(function () { popup.addClass('popup-display'); popup.on('click', '.cookies-accept-btn', function (e) { e.preventDefault(); acceptCookies(); }) }, 2500); var acceptCookies = function () { popup.removeClass('popup-display').addClass('popup-hide'); Cookies.set('woodmart_cookies_' + cookies_version, 'accepted', { expires: 60, path: '/' }); }; }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Google map *------------------------------------------------------------------------------------------------------------------------------------------- */ googleMap: function () { var gmap = $(".google-map-container-with-content"); $(window).resize(function () { gmap.css({ 'height': gmap.find('.woodmart-google-map.with-content').outerHeight() }) }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Menu preparation *------------------------------------------------------------------------------------------------------------------------------------------- */ menuSetUp: function () { var hasChildClass = 'menu-item-has-children', mainMenu = $('.woodmart-navigation').find('ul.menu'), lis = mainMenu.find(' > li'), openedClass = 'item-menu-opened'; $('.mobile-nav').find('ul.site-mobile-menu').find(' > li').has('.sub-menu-dropdown').addClass(hasChildClass); mainMenu.on('click', ' > .item-event-click > a', function (e) { e.preventDefault(); if (!$(this).parent().hasClass(openedClass)) { $('.' + openedClass).removeClass(openedClass); } $(this).parent().toggleClass(openedClass); }); $(document).on('click', function (e) { var target = e.target; if ($('.' + openedClass).length > 0 && !$(target).is('.item-event-hover') && !$(target).parents().is('.item-event-hover') && !$(target).parents().is('.' + openedClass + '')) { mainMenu.find('.' + openedClass + '').removeClass(openedClass); return false; } }); var menuForIPad = function () { if ($(window).width() <= 1024) { mainMenu.find(' > .menu-item-has-children.item-event-hover').each(function () { $(this).data('original-event', 'hover').removeClass('item-event-hover').addClass('item-event-click'); }); } else { mainMenu.find(' > .item-event-click').each(function () { if ($(this).data('original-event') == 'hover') { $(this).removeClass('item-event-click').addClass('item-event-hover'); } }); } }; $(window).on('resize', menuForIPad); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Keep navigation dropdowns in the screen *------------------------------------------------------------------------------------------------------------------------------------------- */ menuOffsets: function () { var mainMenu = $('.main-nav, .whb-secondary-menu').find('ul.menu'), lis = mainMenu.find(' > li.menu-item-design-sized, li.menu-item-design-full-width'); mainMenu.on('hover', ' > li.menu-item-design-sized, li.menu-item-design-full-width', function (e) { setOffset($(this)); }); var setOffset = function (li) { var dropdown = li.find(' > .sub-menu-dropdown'), styleID = 'arrow-offset', siteWrapper = $('.website-wrapper'); dropdown.attr('style', ''); var dropdownWidth = dropdown.outerWidth(), dropdownOffset = dropdown.offset(), screenWidth = $(window).width(), bodyRight = siteWrapper.outerWidth() + siteWrapper.offset().left, viewportWidth = ($('body').hasClass('wrapper-boxed')) ? bodyRight : screenWidth, extraSpace = (li.hasClass('menu-item-design-full-width')) ? 0 : 10; if (!dropdownWidth || !dropdownOffset) return; var dropdownOffsetRight = screenWidth - dropdownOffset.left - dropdownWidth; if ($('body').hasClass('rtl') && dropdownOffsetRight + dropdownWidth >= viewportWidth && (li.hasClass('menu-item-design-sized') || li.hasClass('menu-item-design-full-width'))) { // If right point is not in the viewport var toLeft = dropdownOffsetRight + dropdownWidth - viewportWidth; dropdown.css({ right: - toLeft - extraSpace }); } else if (dropdownOffset.left + dropdownWidth >= viewportWidth && (li.hasClass('menu-item-design-sized') || li.hasClass('menu-item-design-full-width'))) { // If right point is not in the viewport var toRight = dropdownOffset.left + dropdownWidth - viewportWidth; dropdown.css({ left: - toRight - extraSpace }); } }; lis.each(function () { setOffset($(this)); $(this).addClass('with-offsets'); }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * One page menu *------------------------------------------------------------------------------------------------------------------------------------------- */ onePageMenu: function () { var scrollToRow = function (hash) { var row = $('#' + hash); if (row.length < 1) return; var position = row.offset().top; $('html, body').animate({ scrollTop: position - woodmart_settings.one_page_menu_offset }, 800); setTimeout(function () { activeMenuItem(hash); }, 800); }; var activeMenuItem = function (hash) { var itemHash; $('.onepage-link').each(function () { itemHash = $(this).find('> a').attr('href').split('#')[1]; if (itemHash == hash) { $('.onepage-link').removeClass('current-menu-item'); $(this).addClass('current-menu-item'); } }); }; $('body').on('click', '.onepage-link > a', function (e) { var $this = $(this), hash = $this.attr('href').split('#')[1]; if ($('#' + hash).length < 1) return; e.preventDefault(); scrollToRow(hash); // close mobile menu $('.woodmart-close-side').trigger('click'); }); if ($('.onepage-link').length > 0) { $('.entry-content > .vc_section, .entry-content > .vc_row').waypoint(function () { var hash = $(this).attr('id'); activeMenuItem(hash); }, { offset: 150 }); // $('.onepage-link').removeClass('current-menu-item'); // URL contains hash var locationHash = window.location.hash.split('#')[1]; if (window.location.hash.length > 1) { setTimeout(function () { scrollToRow(locationHash); }, 500); } } }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * mobile responsive navigation *------------------------------------------------------------------------------------------------------------------------------------------- */ mobileNavigation: function () { var body = $("body"), mobileNav = $(".mobile-nav"), wrapperSite = $(".website-wrapper"), dropDownCat = $(".mobile-nav .site-mobile-menu .menu-item-has-children"), elementIcon = '', butOpener = $(".icon-sub-menu"); var closeSide = $('.woodmart-close-side'); dropDownCat.append(elementIcon); mobileNav.on("click", ".icon-sub-menu", function (e) { e.preventDefault(); if ($(this).parent().hasClass("opener-page")) { $(this).parent().removeClass("opener-page").find("> ul").slideUp(200); $(this).parent().removeClass("opener-page").find(".sub-menu-dropdown .container > ul, .sub-menu-dropdown > ul").slideUp(200); $(this).parent().find('> .icon-sub-menu').removeClass("up-icon"); } else { $(this).parent().addClass("opener-page").find("> ul").slideDown(200); $(this).parent().addClass("opener-page").find(".sub-menu-dropdown .container > ul, .sub-menu-dropdown > ul").slideDown(200); $(this).parent().find('> .icon-sub-menu').addClass("up-icon"); } }); mobileNav.on('click', '.mobile-nav-tabs li', function () { if ($(this).hasClass('active')) return; var menuName = $(this).data('menu'); $(this).parent().find('.active').removeClass('active'); $(this).addClass('active'); $('.mobile-menu-tab').removeClass('active'); $('.mobile-' + menuName + '-menu').addClass('active'); }); body.on("click", ".mobile-nav-icon", function () { if (mobileNav.hasClass("act-mobile-menu")) { closeMenu(); } else { openMenu(); } }); body.on("click touchstart", ".woodmart-close-side", function () { closeMenu(); }); body.on('click', '.mobile-nav .login-side-opener', function () { closeMenu(); }); function openMenu() { mobileNav.addClass("act-mobile-menu"); closeSide.addClass('woodmart-close-side-opened'); } function closeMenu() { mobileNav.removeClass("act-mobile-menu"); closeSide.removeClass('woodmart-close-side-opened'); $('.mobile-nav .searchform input[type=text]').blur(); } }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Simple dropdown for category select on search form *------------------------------------------------------------------------------------------------------------------------------------------- */ simpleDropdown: function () { $('.input-dropdown-inner').each(function () { var dd = $(this); var btn = dd.find('> a'); var input = dd.find('> input'); var list = dd.find('> .list-wrapper'); inputPadding(); $(document).on('click', function (e) { var target = e.target; if (dd.hasClass('dd-shown') && !$(target).is('.input-dropdown-inner') && !$(target).parents().is('.input-dropdown-inner')) { hideList(); return false; } }); btn.on('click', function (e) { e.preventDefault(); if (dd.hasClass('dd-shown')) { hideList(); } else { showList(); } return false; }); list.on('click', 'a', function (e) { e.preventDefault(); var value = $(this).data('val'); var label = $(this).text(); list.find('.current-item').removeClass('current-item'); $(this).parent().addClass('current-item'); if (value != 0) { list.find('ul:not(.children) > li:first-child').show(); } else if (value == 0) { list.find('ul:not(.children) > li:first-child').hide(); } btn.text(label); input.val(value).trigger('cat_selected'); hideList(); inputPadding(); }); function showList() { dd.addClass('dd-shown'); list.slideDown(100); if (typeof ($.fn.devbridgeAutocomplete) != 'undefined') { dd.parent().siblings('[type="text"]').devbridgeAutocomplete('hide'); } setTimeout(function () { woodmartThemeModule.nanoScroller(); }, 300); } function hideList() { dd.removeClass('dd-shown'); list.slideUp(100); } function inputPadding() { if ($(window).width() <= 768) return; var paddingValue = dd.innerWidth() + dd.parent().siblings('.searchsubmit').innerWidth() + 17, padding = 'padding-right'; if ($('body').hasClass('rtl')) padding = 'padding-left'; dd.parent().parent().find('.s').css(padding, paddingValue); } }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Function to make columns the same height *------------------------------------------------------------------------------------------------------------------------------------------- */ equalizeColumns: function () { $.fn.woodmart_equlize = function (options) { var settings = $.extend({ child: "", }, options); var that = this; if (settings.child != '') { that = this.find(settings.child); } var resize = function () { var maxHeight = 0; var height; that.each(function () { $(this).attr('style', ''); if ($(window).width() > 767 && $(this).outerHeight() > maxHeight) maxHeight = $(this).outerHeight(); }); that.each(function () { $(this).css({ minHeight: maxHeight }); }); } $(window).on('resize', function () { resize(); }); setTimeout(function () { resize(); }, 200); setTimeout(function () { resize(); }, 500); setTimeout(function () { resize(); }, 800); } $('.equal-columns').each(function () { $(this).woodmart_equlize({ child: '> [class*=col-]' }); }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Enable masonry grid for blog *------------------------------------------------------------------------------------------------------------------------------------------- */ blogMasonry: function () { if (typeof ($.fn.isotope) == 'undefined' || typeof ($.fn.imagesLoaded) == 'undefined') return; var $container = $('.masonry-container'); // initialize Masonry after all images have loaded $container.imagesLoaded(function () { $container.isotope({ gutter: 0, isOriginLeft: !$('body').hasClass('rtl'), itemSelector: '.blog-design-masonry, .blog-design-mask, .masonry-item' }); }); //Portfolio filters $('.masonry-filter').on('click', 'a', function (e) { e.preventDefault(); $('.masonry-filter').find('.filter-active').removeClass('filter-active'); $(this).addClass('filter-active'); var filterValue = $(this).attr('data-filter'); $(this).parents('.portfolio-filter').next('.masonry-container.woodmart-portfolio-holder').isotope({ filter: filterValue }); }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Helper function that make btn click when you scroll page to it *------------------------------------------------------------------------------------------------------------------------------------------- */ clickOnScrollButton: function (btnClass, destroy, offset) { if (typeof $.waypoints != 'function') return; var $btn = $(btnClass); if (destroy) { $btn.waypoint('destroy'); } if (!offset) { offset = 0; } $btn.waypoint(function () { $btn.trigger('click'); }, { offset: function () { return $(window).outerHeight() + parseInt(offset); } }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Load more button for blog shortcode *------------------------------------------------------------------------------------------------------------------------------------------- */ blogLoadMore: function () { var btnClass = '.woodmart-blog-load-more.load-on-scroll', process = false; woodmartThemeModule.clickOnScrollButton(btnClass, false, false); $('.woodmart-blog-load-more').on('click', function (e) { e.preventDefault(); if (process || $(this).hasClass('no-more-posts')) return; process = true; var $this = $(this), holder = $this.parent().siblings('.woodmart-blog-holder'), source = holder.data('source'), action = 'woodmart_get_blog_' + source, ajaxurl = woodmart_settings.ajaxurl, dataType = 'json', method = 'POST', atts = holder.data('atts'), paged = holder.data('paged'); $this.addClass('loading'); var data = { atts: atts, paged: paged, action: action, }; if (source == 'main_loop') { ajaxurl = $(this).attr('href'); method = 'GET'; data = {}; } $.ajax({ url: ajaxurl, data: data, dataType: dataType, method: method, success: function (data) { var items = $(data.items); if (items) { if (holder.hasClass('masonry-container')) { // initialize Masonry after all images have loaded holder.append(items).isotope('appended', items); holder.imagesLoaded().progress(function () { holder.isotope('layout'); woodmartThemeModule.clickOnScrollButton(btnClass, true, false); }); } else { holder.append(items); woodmartThemeModule.clickOnScrollButton(btnClass, true, false); } holder.data('paged', paged + 1); if (source == 'main_loop') { $this.attr('href', data.nextPage); if (data.status == 'no-more-posts') { $this.hide().remove(); } } } if (data.status == 'no-more-posts') { $this.addClass('no-more-posts'); $this.hide(); } }, error: function (data) { console.log('ajax error'); }, complete: function () { $this.removeClass('loading'); process = false; }, }); }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Load more button for portfolio shortcode *------------------------------------------------------------------------------------------------------------------------------------------- */ portfolioLoadMore: function () { if (typeof $.waypoints != 'function') return; var waypoint = $('.woodmart-portfolio-load-more.load-on-scroll').waypoint(function () { $('.woodmart-portfolio-load-more.load-on-scroll').trigger('click'); }, { offset: '100%' }), process = false; $('.woodmart-portfolio-load-more').on('click', function (e) { e.preventDefault(); if (process || $(this).hasClass('no-more-posts')) return; process = true; var $this = $(this), holder = $this.parent().parent().find('.woodmart-portfolio-holder'), source = holder.data('source'), action = 'woodmart_get_portfolio_' + source, ajaxurl = woodmart_settings.ajaxurl, dataType = 'json', method = 'POST', timeout, atts = holder.data('atts'), paged = holder.data('paged'); $this.addClass('loading'); var data = { atts: atts, paged: paged, action: action, }; if (source == 'main_loop') { ajaxurl = $(this).attr('href'); method = 'GET'; data = {}; } $.ajax({ url: ajaxurl, data: data, dataType: dataType, method: method, success: function (data) { var items = $(data.items); if (items) { if (holder.hasClass('masonry-container')) { // initialize Masonry after all images have loaded holder.append(items).isotope('appended', items); holder.imagesLoaded().progress(function () { holder.isotope('layout'); clearTimeout(timeout); timeout = setTimeout(function () { $('.woodmart-portfolio-load-more.load-on-scroll').waypoint('destroy'); waypoint = $('.woodmart-portfolio-load-more.load-on-scroll').waypoint(function () { $('.woodmart-portfolio-load-more.load-on-scroll').trigger('click'); }, { offset: '100%' }); }, 1000); }); } else { holder.append(items); } holder.data('paged', paged + 1); $this.attr('href', data.nextPage); } woodmartThemeModule.mfpPopup(); woodmartThemeModule.portfolioEffects(); if (data.status == 'no-more-posts') { $this.addClass('no-more-posts'); $this.hide(); } }, error: function (data) { console.log('ajax error'); }, complete: function () { $this.removeClass('loading'); process = false; }, }); }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * MEGA MENU *------------------------------------------------------------------------------------------------------------------------------------------- */ sidebarMenu: function () { var heightMegaMenu = $(".widget_nav_mega_menu #menu-categories").height(); var heightMegaNavigation = $(".categories-menu-dropdown").height(); var subMenuHeight = $(".widget_nav_mega_menu ul > li.menu-item-design-sized > .sub-menu-dropdown, .widget_nav_mega_menu ul > li.menu-item-design-full-width > .sub-menu-dropdown"); var megaNavigationHeight = $(".categories-menu-dropdown ul > li.menu-item-design-sized > .sub-menu-dropdown, .categories-menu-dropdown ul > li.menu-item-design-full-width > .sub-menu-dropdown"); subMenuHeight.css( "min-height", heightMegaMenu + "px" ); megaNavigationHeight.css( "min-height", heightMegaNavigation + "px" ); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Hide widget on title click *------------------------------------------------------------------------------------------------------------------------------------------- */ widgetsHidable: function () { $(document).on('click', '.widget-hidable .widget-title', function () { var content = $(this).siblings('ul, div, form, label, select'); $(this).parent().toggleClass('widget-hidden'); content.stop().slideToggle(200); }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Sticky column for portfolio items *------------------------------------------------------------------------------------------------------------------------------------------- */ stickyColumn: function () { var details = $('.woodmart-sticky-column'); details.each(function () { var $column = $(this), offset = 0; if ($('body').hasClass('enable-sticky-header') || $('.whb-sticky-row').length > 0 || $('.whb-sticky-header').length > 0) { offset = 150; } $column.find(' > .vc_column-inner > .wpb_wrapper').stick_in_parent({ offset_top: offset }); }) }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Use magnific popup for images *------------------------------------------------------------------------------------------------------------------------------------------- */ mfpPopup: function () { $('.gallery').magnificPopup({ delegate: ' > a', type: 'image', removalDelay: 500, //delay removal by X to allow out-animation tClose: woodmart_settings.close, tLoading: woodmart_settings.loading, callbacks: { beforeOpen: function () { this.st.image.markup = this.st.image.markup.replace('mfp-figure', 'mfp-figure mfp-with-anim'); this.st.mainClass = woodmartTheme.popupEffect; } }, image: { verticalFit: true }, gallery: { enabled: true, navigateByImgClick: true }, }); $('[data-rel="mfp"]').magnificPopup({ type: 'image', removalDelay: 500, //delay removal by X to allow out-animation tClose: woodmart_settings.close, tLoading: woodmart_settings.loading, callbacks: { beforeOpen: function () { this.st.image.markup = this.st.image.markup.replace('mfp-figure', 'mfp-figure mfp-with-anim'); this.st.mainClass = woodmartTheme.popupEffect; } }, image: { verticalFit: true }, gallery: { enabled: false, navigateByImgClick: false }, }); $(document).on('click', '.mfp-img', function () { var mfp = jQuery.magnificPopup.instance; // get instance mfp.st.image.verticalFit = !mfp.st.image.verticalFit; // toggle verticalFit on and off mfp.currItem.img.removeAttr('style'); // remove style attribute, to remove max-width if it was applied mfp.updateSize(); // force update of size }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Parallax effect *------------------------------------------------------------------------------------------------------------------------------------------- */ parallax: function () { if ($(window).width() <= 1024) return; $('.parallax-yes').each(function () { var $bgobj = $(this); $(window).scroll(function () { var yPos = -($(window).scrollTop() / $bgobj.data('speed')); var coords = 'center ' + yPos + 'px'; $bgobj.css({ backgroundPosition: coords }); }); }); $('.woodmart-parallax').each(function () { var $this = $(this); if ($this.hasClass('wpb_column')) { $this.find('> .vc_column-inner').parallax("50%", 0.3); } else { $this.parallax("50%", 0.3); } }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Scroll top button *------------------------------------------------------------------------------------------------------------------------------------------- */ scrollTop: function () { //Check to see if the window is top if not then display button $(window).scroll(function () { if ($(this).scrollTop() > 100) { $('.scrollToTop').addClass('button-show'); } else { $('.scrollToTop').removeClass('button-show'); } }); //Click event to scroll to top $('.scrollToTop').on('click', function () { $('html, body').animate({ scrollTop: 0 }, 800); return false; }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * ToolTips titles *------------------------------------------------------------------------------------------------------------------------------------------- */ btnsToolTips: function () { if ($(window).width() <= 1024) return; var $tooltips = $('.woodmart-css-tooltip, .product-grid-item:not(.woodmart-hover-base):not(.woodmart-hover-icons) .woodmart-buttons > div a, .woodmart-hover-base.product-in-carousel .woodmart-buttons > div a'), $bootstrapTooltips = $(woodmartTheme.bootstrapTooltips); // .product-grid-item .add_to_cart_button $tooltips.each(function () { $(this).find('.woodmart-tooltip-label').remove(); $(this).addClass('woodmart-tltp').prepend('' + $(this).text() + ''); $(this).find('.woodmart-tooltip-label').trigger('mouseover'); }) .off('mouseover.tooltips') .on('mouseover.tooltips', function () { var $label = $(this).find('.woodmart-tooltip-label'), width = $label.outerWidth(); if ($('body').hasClass('rtl')) { $label.css({ marginRight: - parseInt(width / 2) }) } else { $label.css({ marginLeft: - parseInt(width / 2) }) } }); // Bootstrap tooltips $bootstrapTooltips.tooltip({ animation: false, container: 'body', trigger: 'hover', title: function () { if ($(this).find('.added_to_cart').length > 0) return $(this).find('.add_to_cart_button').text(); return $(this).text(); } }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Sticky footer: margin bottom for main wrapper *------------------------------------------------------------------------------------------------------------------------------------------- */ stickyFooter: function () { if (!$('body').hasClass('sticky-footer-on') || $(window).width() <= 1024) return; var $footer = $('.footer-container'), $page = $('.main-page-wrapper'), $window = $(window); if ($('.woodmart-prefooter').length > 0) { $page = $('.woodmart-prefooter'); } var footerOffset = function () { $page.css({ marginBottom: $footer.outerHeight() }) }; $window.on('resize', footerOffset); $footer.imagesLoaded(function () { footerOffset(); }); //Safari fix var footerSafariFix = function () { if (!$('html').hasClass('browser-Safari')) return; var windowScroll = $window.scrollTop(); var footerOffsetTop = $(document).outerHeight() - $footer.outerHeight(); if (footerOffsetTop < windowScroll + $footer.outerHeight() + $window.outerHeight()) { $footer.addClass('visible-footer'); } else { $footer.removeClass('visible-footer'); } }; footerSafariFix(); $window.on('scroll', footerSafariFix); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Back in history *------------------------------------------------------------------------------------------------------------------------------------------- */ backHistory: function () { history.go(-1); setTimeout(function () { $('.filters-area').removeClass('filters-opened').stop().hide(); $('.open-filters').removeClass('btn-opened'); if ($(window).width() <= 1024) { $('.woodmart-product-categories').removeClass('categories-opened').stop().hide(); $('.woodmart-show-categories').removeClass('button-open'); } woodmartThemeModule.btnsToolTips(); woodmartThemeModule.categoriesAccordion(); woodmartThemeModule.woocommercePriceSlider(); }, 20); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Ajax Search for products *------------------------------------------------------------------------------------------------------------------------------------------- */ ajaxSearch: function () { if (typeof ($.fn.devbridgeAutocomplete) == 'undefined') return; var escapeRegExChars = function (value) { return value.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); }; $('form.woodmart-ajax-search').each(function () { var $this = $(this), number = parseInt($this.data('count')), thumbnail = parseInt($this.data('thumbnail')), productCat = $this.find('[name="product_cat"]'), $results = $this.parent().find('.woodmart-search-results'), postType = $this.data('post_type'), url = woodmart_settings.ajaxurl + '?action=woodmart_ajax_search', price = parseInt($this.data('price')); if (number > 0) url += '&number=' + number; url += '&post_type=' + postType; $results.on('click', '.view-all-results', function () { $this.submit(); }); if (productCat.length && productCat.val() !== '') { url += '&product_cat=' + productCat.val(); } $this.find('[type="text"]').devbridgeAutocomplete({ serviceUrl: url, appendTo: $results, onSelect: function (suggestion) { if (suggestion.permalink.length > 0) window.location.href = suggestion.permalink; }, onSearchStart: function (query) { $this.addClass('search-loading'); }, beforeRender: function (container) { if (container[0].childElementCount > 2) $(container).append('
' + woodmart_settings.all_results + '
'); }, onSearchComplete: function (query, suggestions) { $this.removeClass('search-loading'); if ($(window).width() >= 1024 && (!woodmartTheme.disableNanoScrollerWebkit && woodmart_settings.disable_nanoscroller != 'disable')) { $(".woodmart-scroll").nanoScroller({ paneClass: 'woodmart-scroll-pane', sliderClass: 'woodmart-scroll-slider', contentClass: 'woodmart-scroll-content', preventPageScrolling: false }); } $(document).trigger('wood-images-loaded'); }, formatResult: function (suggestion, currentValue) { if (currentValue == '&') currentValue = "&"; var pattern = '(' + escapeRegExChars(currentValue) + ')', returnValue = ''; if (thumbnail && suggestion.thumbnail) { returnValue += '
' + suggestion.thumbnail + '
'; } returnValue += '

' + suggestion.value .replace(new RegExp(pattern, 'gi'), '$1<\/strong>') // .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') .replace(/<(\/?strong)>/g, '<$1>') + '

'; if (suggestion.no_found) returnValue = '
' + suggestion.value + '
'; if (price && suggestion.price) { returnValue += '
' + suggestion.price + '
'; } return returnValue; } }); if (productCat.length) { var searchForm = $this.find('[type="text"]').devbridgeAutocomplete(), serviceUrl = woodmart_settings.ajaxurl + '?action=woodmart_ajax_search'; if (number > 0) serviceUrl += '&number=' + number; serviceUrl += '&post_type=' + postType; productCat.on('cat_selected', function () { if (productCat.val() != '') { searchForm.setOptions({ serviceUrl: serviceUrl + '&product_cat=' + productCat.val() }); } else { searchForm.setOptions({ serviceUrl: serviceUrl }); } searchForm.hide(); searchForm.onValueChange(); }); } $('body').on('click', function () { $this.find('[type="text"]').devbridgeAutocomplete('hide'); }); $('.woodmart-search-results').on('click', function (e) { e.stopPropagation(); }); }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Search full screen *------------------------------------------------------------------------------------------------------------------------------------------- */ searchFullScreen: function () { var body = $('body'), searchWrapper = $('.woodmart-search-full-screen'), offset = 0; body.on('click', '.search-button:not(.mobile-search-icon) > a', function (e) { e.preventDefault(); if ($(this).parent().find('.woodmart-search-dropdown').length > 0) return; // if dropdown search on header builder if (body.hasClass('global-search-dropdown') || $(window).width() < 1024) return; if (isOpened()) { closeWidget(); } else { setTimeout(function () { openWidget(); }, 10); } }) body.on("click", ".woodmart-close-search, .main-page-wrapper, .header-banner", function (event) { if (!$(event.target).is('.woodmart-close-search') && $(event.target).closest(".woodmart-search-full-screen").length) return; if (isOpened()) { closeWidget(); } }); var closeByEsc = function (e) { if (e.keyCode === 27) { closeWidget(); body.unbind('keyup', closeByEsc); } }; var closeWidget = function () { $('body').removeClass('woodmart-search-opened'); searchWrapper.removeClass('search-overlap'); }; var openWidget = function () { var bar = $('#wpadminbar').outerHeight(); var offset = 0; if ($('.whb-sticked').length > 0) { if ($('.whb-clone').length > 0) offset = $('.whb-sticked').outerHeight() + bar; else offset = $('.whb-main-header').outerHeight() + bar; } else { offset = $('.whb-main-header').outerHeight() + bar; if ($('body').hasClass('header-banner-display')) { offset += $('.header-banner').outerHeight(); } } searchWrapper.css('top', offset); // Close by esc body.on('keyup', closeByEsc); $('body').addClass('woodmart-search-opened'); searchWrapper.addClass('search-overlap'); setTimeout(function () { searchWrapper.find('input[type="text"]').focus(); $(window).one('scroll', function () { if (isOpened()) { closeWidget(); } }); }, 300); }; var isOpened = function () { return $('body').hasClass('woodmart-search-opened'); }; }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Sale final date countdown *------------------------------------------------------------------------------------------------------------------------------------------- */ countDownTimer: function () { $('.woodmart-timer').each(function () { var time = moment.tz($(this).data('end-date'), $(this).data('timezone')); $(this).countdown(time.toDate(), function (event) { $(this).html(event.strftime('' + '%-D ' + woodmart_settings.countdown_days + ' ' + '%H ' + woodmart_settings.countdown_hours + ' ' + '%M ' + woodmart_settings.countdown_mins + ' ' + '%S ' + woodmart_settings.countdown_sec + '')); }); }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Init nanoscroller *------------------------------------------------------------------------------------------------------------------------------------------- */ nanoScroller: function () { if ($(window).width() < 1024 || (woodmart_settings.disable_nanoscroller == 'webkit' && (jscd.browser == 'Chrome' || jscd.browser == 'Opera' || jscd.browser == 'Safari')) || woodmart_settings.disable_nanoscroller == 'disable') return; $(".woodmart-scroll").nanoScroller({ paneClass: 'woodmart-scroll-pane', sliderClass: 'woodmart-scroll-slider', contentClass: 'woodmart-scroll-content', preventPageScrolling: false }); $('body').on('wc_fragments_refreshed wc_fragments_loaded added_to_cart', function () { $(".widget_shopping_cart .woodmart-scroll").nanoScroller({ paneClass: 'woodmart-scroll-pane', sliderClass: 'woodmart-scroll-slider', contentClass: 'woodmart-scroll-content', preventPageScrolling: false }); $(".widget_shopping_cart .woodmart-scroll-content").scroll(function () { $(document).trigger('wood-images-loaded'); }) }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * WoodMart gradient *------------------------------------------------------------------------------------------------------------------------------------------- */ gradientShift: function () { $('.woodmart_gradient').each(function () { var selector = $(this); var parent = selector.prev(); parent.css('position', 'relative'); parent.prepend(selector); }); }, /** *------------------------------------------------------------------------------------------------------------------------------------------- * Lazy loading *------------------------------------------------------------------------------------------------------------------------------------------- */ lazyLoading: function () { if (!window.addEventListener || !window.requestAnimationFrame || !document.getElementsByClassName) return; // start var pItem = document.getElementsByClassName('woodmart-lazy-load'), pCount, timer; $(document).on('wood-images-loaded added_to_cart', function () { inView(); }) $('.woodmart-scroll-content, .woodmart-sidebar-content').scroll(function () { $(document).trigger('wood-images-loaded'); }) // $(document).on( 'scroll', '.woodmart-scroll-content', function() { // $(document).trigger('wood-images-loaded'); // }) // WooCommerce tabs fix $('.wc-tabs > li').on('click', function () { $(document).trigger('wood-images-loaded'); }); // scroll and resize events window.addEventListener('scroll', scroller, false); window.addEventListener('resize', scroller, false); // DOM mutation observer if (MutationObserver) { var observer = new MutationObserver(function () { // console.log('mutated', pItem.length, pCount) if (pItem.length !== pCount) inView(); }); observer.observe(document.body, { subtree: true, childList: true, attributes: true, characterData: true }); } // initial check inView(); // throttled scroll/resize function scroller() { timer = timer || setTimeout(function () { timer = null; inView(); }, 100); } // image in view? function inView() { if (pItem.length) requestAnimationFrame(function () { var wT = window.pageYOffset, wB = wT + window.innerHeight, cRect, pT, pB, p = 0; while (p < pItem.length) { cRect = pItem[p].getBoundingClientRect(); pT = wT + cRect.top; pB = pT + cRect.height; if (wT < pB && wB > pT && !pItem[p].loaded) { loadFullImage(pItem[p], p); } else p++; } pCount = pItem.length; }); } // replace with full image function loadFullImage(item, i) { item.onload = addedImg; item.src = item.dataset.woodSrc; if (typeof (item.dataset.srcset) != 'undefined') { item.srcset = item.dataset.srcset; } item.loaded = true // replace image function addedImg() { requestAnimationFrame(function () { item.classList.add('woodmart-loaded') var $masonry = jQuery(item).parents('.view-masonry .gallery-images, .grid-masonry, .masonry-container'); if ($masonry.length > 0) { $masonry.isotope('layout'); } var $categories = jQuery(item).parents('.categories-masonry'); if ($categories.length > 0) { $categories.packery(); } // var $owl = jQuery(item).parents('.owl-carousel'); // if ($owl.length > 0) { // $owl.trigger('refresh.owl.carousel'); // } }); } } }, } }()); })(jQuery); jQuery(document).ready(function () { if (!wooFile) { woodmartThemeModule.init(); } }); var wooFile = true; //Functions WOO (function ($) { "use strict"; var woodmartTheme = { popupEffect: 'mfp-move-horizontal', supports_html5_storage: false, shopLoadMoreBtn: '.woodmart-products-load-more.load-on-scroll', ajaxLinks: '.woodmart-product-categories a, .widget_product_categories a, .widget_layered_nav_filters a, .woocommerce-widget-layered-nav a, .filters-area:not(.custom-content) a, body.post-type-archive-product:not(.woocommerce-account) .woocommerce-pagination a, body.tax-product_cat:not(.woocommerce-account) .woocommerce-pagination a, .woodmart-shop-tools a, .woodmart-woocommerce-layered-nav a, .woodmart-price-filter a, .woodmart-clear-filters-wrapp a, .woodmart-woocommerce-sort-by a', mainCarouselArg: { rtl: $('body').hasClass('rtl'), items: woodmart_settings.product_gallery.thumbs_slider.position == 'centered' ? 2 : 1, autoplay: woodmart_settings.product_slider_autoplay, autoplayTimeout: 3000, loop: woodmart_settings.product_slider_autoplay, center: woodmart_settings.product_gallery.thumbs_slider.position == 'centered', startPosition: woodmart_settings.product_gallery.thumbs_slider.position == 'centered' ? woodmart_settings.centered_gallery_start : 0, dots: false, nav: true, autoHeight: woodmart_settings.product_slider_auto_height == 'yes', navText: false, onRefreshed: function () { $(window).resize(); } } }; /* Storage Handling */ try { woodmartTheme.supports_html5_storage = ('sessionStorage' in window && window.sessionStorage !== null); window.sessionStorage.setItem('woodmart', 'test'); window.sessionStorage.removeItem('woodmart'); } catch (err) { woodmartTheme.supports_html5_storage = false; } /** *------------------------------------------------------------------------------------------------------------------------------------------- * Product filters *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.productFilters = function () { //Select checkboxes value var removeValue = function ($mainInput, currentVal) { if ($mainInput.length == 0) return; var mainInputVal = $mainInput.val(); if (mainInputVal.indexOf(',') > 0) { $mainInput.val(mainInputVal.replace(',' + currentVal, '').replace(currentVal + ',', '')); } else { $mainInput.val(mainInputVal.replace(currentVal, '')); } } $('.woodmart-pf-checkboxes li > .pf-value').on('click', function (e) { e.preventDefault(); var $this = $(this); var $li = $this.parent(); var $widget = $this.parents('.woodmart-pf-checkboxes'); var $mainInput = $widget.find('.result-input'); var $results = $widget.find('.woodmart-pf-results'); var multiSelect = $widget.hasClass('multi_select'); var mainInputVal = $mainInput.val(); var currentText = $this.data('title'); var currentVal = $this.data('val'); if (multiSelect) { if (!$li.hasClass('pf-active')) { if (mainInputVal == '') { $mainInput.val(currentVal); } else { $mainInput.val(mainInputVal + ',' + currentVal); } $results.prepend('
  • ' + currentText + '
  • '); $li.addClass('pf-active'); } else { removeValue($mainInput, currentVal); $results.find('li[data-title="' + currentVal + '"]').remove(); $li.removeClass('pf-active'); } } else { if (!$li.hasClass('pf-active')) { $mainInput.val(currentVal); $results.find('.selected-value').remove(); $results.prepend('
  • ' + currentText + '
  • '); $li.parents('.woodmart-scroll-content').find('.pf-active').removeClass('pf-active'); $li.addClass('pf-active'); } else { $mainInput.val(''); $results.find('.selected-value').remove(); $li.removeClass('pf-active'); } } }); //Label clear $('.woodmart-pf-checkboxes').on('click', '.selected-value', function () { var $this = $(this); var $widget = $this.parents('.woodmart-pf-checkboxes'); var $mainInput = $widget.find('.result-input'); var currentVal = $this.data('title'); //Price filter clear if (currentVal == 'price-filter') { var min = $this.data('min'); var max = $this.data('max'); var $slider = $widget.find('.price_slider_widget'); $slider.slider('values', 0, min); $slider.slider('values', 1, max); $widget.find('.min_price').val(''); $widget.find('.max_price').val(''); $(document.body).trigger('filter_price_slider_slide', [min, max, min, max, $slider]); return; } removeValue($mainInput, currentVal); $widget.find('.pf-value[data-val="' + currentVal + '"]').parent().removeClass('pf-active'); $this.remove(); }); //Checkboxes value dropdown $('.woodmart-pf-checkboxes').each(function () { var $this = $(this); var $btn = $this.find('.woodmart-pf-title'); var $list = $btn.siblings('.woodmart-pf-dropdown'); var multiSelect = $this.hasClass('multi_select'); $btn.on('click', function (e) { var target = e.target; if ($(target).is($btn.find('.selected-value'))) return; if (!$this.hasClass('opened')) { $this.addClass('opened'); $list.slideDown(100); setTimeout(function () { woodmartThemeModule.nanoScroller(); }, 300); } else { close(); } }); $(document).on('click', function (e) { var target = e.target; if ($this.hasClass('opened') && (multiSelect && !$(target).is($this) && !$(target).parents().is($this)) || (!multiSelect && !$(target).is($btn) && !$(target).parents().is($btn))) { close(); } }); var close = function () { $this.removeClass('opened'); $list.slideUp(100); } }); var removeEmptyValues = function ($selector) { $selector.find('.woodmart-pf-checkboxes').each(function () { if (!$(this).find('input[type="hidden"]').val()) { $(this).find('input[type="hidden"]').remove(); } }); } var changeFormAction = function ($form) { var activeCat = $form.find('.woodmart-pf-categories .pf-active .pf-value'); if (activeCat.length > 0) { $form.attr('action', activeCat.attr('href')); } } //Price slider init $(document.body).on('filter_price_slider_create filter_price_slider_slide', function (event, min, max, minPrice, maxPrice, $slider) { var minHtml = accounting.formatMoney(min, { symbol: woocommerce_price_slider_params.currency_format_symbol, decimal: woocommerce_price_slider_params.currency_format_decimal_sep, thousand: woocommerce_price_slider_params.currency_format_thousand_sep, precision: woocommerce_price_slider_params.currency_format_num_decimals, format: woocommerce_price_slider_params.currency_format }); var maxHtml = accounting.formatMoney(max, { symbol: woocommerce_price_slider_params.currency_format_symbol, decimal: woocommerce_price_slider_params.currency_format_decimal_sep, thousand: woocommerce_price_slider_params.currency_format_thousand_sep, precision: woocommerce_price_slider_params.currency_format_num_decimals, format: woocommerce_price_slider_params.currency_format }); $slider.siblings('.filter_price_slider_amount').find('span.from').html(minHtml); $slider.siblings('.filter_price_slider_amount').find('span.to').html(maxHtml); var $results = $slider.parents('.woodmart-pf-checkboxes').find('.woodmart-pf-results'); var value = $results.find('.selected-value'); if (min == minPrice && max == maxPrice) { value.remove(); } else { if (value.length == 0) { $results.prepend('
  • ' + minHtml + ' - ' + maxHtml + '
  • '); } else { value.html(minHtml + ' - ' + maxHtml); } } $(document.body).trigger('price_slider_updated', [min, max]); }); $('.woodmart-pf-price-range .price_slider_widget').each(function () { var $this = $(this); var $minInput = $this.siblings('.filter_price_slider_amount').find('.min_price'); var $maxInput = $this.siblings('.filter_price_slider_amount').find('.max_price'); var minPrice = parseInt($minInput.data('min')); var maxPrice = parseInt($maxInput.data('max')); var currentMinPrice = parseInt($minInput.val()); var currentMaxPrice = parseInt($maxInput.val()); $('.price_slider_widget, .price_label').show(); $this.slider({ range: true, animate: true, min: minPrice, max: maxPrice, values: [currentMinPrice, currentMaxPrice], create: function () { if (currentMinPrice == minPrice && currentMaxPrice == maxPrice) { $minInput.val(''); $maxInput.val(''); } $(document.body).trigger('filter_price_slider_create', [currentMinPrice, currentMaxPrice, minPrice, maxPrice, $this]); }, slide: function (event, ui) { if (ui.values[0] == minPrice && ui.values[1] == maxPrice) { $minInput.val(''); $maxInput.val(''); } else { $minInput.val(ui.values[0]); $maxInput.val(ui.values[1]); } $(document.body).trigger('filter_price_slider_slide', [ui.values[0], ui.values[1], minPrice, maxPrice, $this]); }, change: function (event, ui) { $(document.body).trigger('price_slider_change', [ui.values[0], ui.values[1]]); } }); }); //Submit filter form $('.woodmart-product-filters').one('click', '.woodmart-pf-btn button', function (e) { var $form = $(this).parents('.woodmart-product-filters'); removeEmptyValues($form); changeFormAction($form); if (typeof ($.fn.pjax) == 'undefined') return; $.pjax({ container: '.main-page-wrapper', timeout: woodmart_settings.pjax_timeout, url: $form.attr('action'), data: $form.serialize(), scrollTo: false }); $(this).prop('disabled', true); }); //Create labels after ajax $('.woodmart-pf-checkboxes .pf-active > .pf-value').each(function () { var resultsWrapper = $(this).parents('.woodmart-pf-checkboxes').find('.woodmart-pf-results'); resultsWrapper.prepend('
  • ' + $(this).data('title') + '
  • '); }); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Sticky sidebar button *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.stickySidebarBtn = function () { var $trigger = $('.woodmart-show-sidebar-btn'); var $stickyBtn = $('.shop-sidebar-opener'); if ($stickyBtn.length <= 0 || $trigger.length <= 0 || $(window).width() >= 1024) return; var stickySidebarBtnToggle = function () { var btnOffset = $trigger.offset().top + $trigger.outerHeight(); var windowScroll = $(window).scrollTop(); if (btnOffset < windowScroll) { $stickyBtn.addClass('woodmart-sidebar-btn-shown'); } else { $stickyBtn.removeClass('woodmart-sidebar-btn-shown'); } }; stickySidebarBtnToggle(); $(window).scroll(stickySidebarBtnToggle); $(window).resize(stickySidebarBtnToggle); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Product thumbnail images & photo swipe gallery *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.productImages = function () { // Init photoswipe var currentImage, $productGallery = $('.woocommerce-product-gallery'), $mainImages = $('.woocommerce-product-gallery__wrapper'), $thumbs = $productGallery.find('.thumbnails'), currentClass = 'current-image', PhotoSwipeTrigger = '.woodmart-show-product-gallery'; $thumbs.addClass('thumbnails-ready'); if ($productGallery.hasClass('image-action-popup')) { PhotoSwipeTrigger += ', .woocommerce-product-gallery__image a'; } $productGallery.on('click', '.woocommerce-product-gallery__image a', function (e) { e.preventDefault(); }); $productGallery.on('click', PhotoSwipeTrigger, function (e) { e.preventDefault(); currentImage = $(this).attr('href'); // build items array var items = getProductItems(); woodmartThemeModule.callPhotoSwipe(getCurrentGalleryIndex(e), items); }); $thumbs.on('click', '.image-link', function (e) { e.preventDefault(); // if( $thumbs.hasClass('thumbnails-large') ) { // var index = $(e.currentTarget).index() + 1; // var items = getProductItems(); // callPhotoSwipe(index, items); // return; // } // var href = $(this).attr('href'), // src = $(this).attr('data-single-image'), // width = $(this).attr('data-width'), // height = $(this).attr('data-height'), // title = $(this).attr('title'); // $thumbs.find('.' + currentClass).removeClass(currentClass); // $(this).addClass(currentClass); // if( $mainImages.find('img').attr('src') == src ) return; // $mainImages.addClass('loading-image').attr('href', href).find('img').attr('src', src).attr('srcset', src).one('load', function() { // $mainImages.removeClass('loading-image').data('width', width).data('height', height).attr('title', title); // }); }); var getCurrentGalleryIndex = function (e) { if ($mainImages.hasClass('owl-carousel')) return $mainImages.find('.owl-item.active').index(); else return $(e.currentTarget).parent().parent().index(); }; var getProductItems = function () { var items = []; $mainImages.find('figure a img').each(function () { var src = $(this).attr('data-large_image'), width = $(this).attr('data-large_image_width'), height = $(this).attr('data-large_image_height'), caption = $(this).data('caption'); items.push({ src: src, w: width, h: height, title: (woodmart_settings.product_images_captions == 'yes') ? caption : false }); }); return items; }; /* Fix zoom for first item firstly */ if ($productGallery.hasClass('image-action-zoom')) { var zoom_target = $('.woocommerce-product-gallery__image'); var image_to_zoom = zoom_target.find('img'); // But only zoom if the img is larger than its container. if (image_to_zoom.attr('width') > $('.woocommerce-product-gallery').width()) { zoom_target.trigger('zoom.destroy'); zoom_target.zoom({ touch: false }); } } }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Sticky add to cart *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.stickyAddToCart = function () { var $trigger = $('.summary-inner .cart'); var $stickyBtn = $('.woodmart-sticky-btn'); if ($stickyBtn.length <= 0 || $trigger.length <= 0 || ($(window).width() <= 768 && $stickyBtn.hasClass('mobile-off'))) return; var summaryOffset = $trigger.offset().top + $trigger.outerHeight(); var $scrollToTop = $('.scrollToTop'); var stickyAddToCartToggle = function () { var windowScroll = $(window).scrollTop(); var windowHeight = $(window).height(); var documentHeight = $(document).height(); if (summaryOffset < windowScroll && windowScroll + windowHeight != documentHeight) { $stickyBtn.addClass('woodmart-sticky-btn-shown'); $scrollToTop.addClass('woodmart-sticky-btn-shown'); } else if (windowScroll + windowHeight == documentHeight || summaryOffset > windowScroll) { $stickyBtn.removeClass('woodmart-sticky-btn-shown'); $scrollToTop.removeClass('woodmart-sticky-btn-shown'); } }; stickyAddToCartToggle(); $(window).scroll(stickyAddToCartToggle); $('.woodmart-sticky-add-to-cart').on('click', function (e) { e.preventDefault(); $('html, body').animate({ scrollTop: $('.summary-inner').offset().top }, 800); }); $('.woodmart-sticky-btn-wishlist').on('click', function (e) { if (!$(this).hasClass('exists')) e.preventDefault(); $('.summary-inner > .yith-wcwl-add-to-wishlist .add_to_wishlist').trigger('click'); }); $('body').on('added_to_wishlist', function () { $('.woodmart-sticky-btn-wishlist').addClass('exists'); }); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Login dropdown *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.loginDropdown = function () { if ($(window).width() <= 1024) return; $('.menu-item-register:not(.login-side-opener)').on('mouseover', function () { $(this).addClass('opened'); }).on('mouseout', function (event) { if (!$(event.target).is('input')) { $(this).removeClass('opened'); } }).on('mouseleave', function () { var $this = $(this); setTimeout(function () { $this.removeClass('opened'); }, 300); }); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Login sidebar *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.loginSidebar = function () { var body = $('body'); var loginFormSide = $('.login-form-side'); var closeSide = $('.woodmart-close-side'); $('.login-side-opener').on('click', function (e) { e.preventDefault(); if (isOpened()) { closeWidget(); } else { setTimeout(function () { openWidget(); }, 10); } }); body.on('click touchstart', '.woodmart-close-side', function () { if (isOpened()) closeWidget(); }); body.on('click', '.close-side-widget', function (e) { e.preventDefault(); if (isOpened()) closeWidget(); }); $(document).keyup(function (e) { if (e.keyCode === 27 && isOpened()) closeWidget(); }); var closeWidget = function () { loginFormSide.removeClass('woodmart-login-side-opened'); closeSide.removeClass('woodmart-close-side-opened'); }; var openWidget = function () { loginFormSide.addClass('woodmart-login-side-opened'); closeSide.addClass('woodmart-close-side-opened'); }; var isOpened = function () { return loginFormSide.hasClass('woodmart-login-side-opened'); }; }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Shop loader position *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.shopLoader = function () { var loaderClass = '.woodmart-shop-loader', contentClass = '.products[data-source="main_loop"]', sidebarClass = '.area-sidebar-shop', sidebarLeftClass = 'sidebar-left', hiddenClass = 'hidden-loader', hiddenTopClass = 'hidden-from-top', hiddenBottomClass = 'hidden-from-bottom'; var loaderVerticalPosition = function () { var $products = $(contentClass), $loader = $products.parent().find(loaderClass); if ($products.length < 1) return; var offset = $(window).height() / 2, scrollTop = $(window).scrollTop(), holderTop = $products.offset().top - offset, holderHeight = $products.height(), holderBottom = holderTop + holderHeight - 130; if (scrollTop < holderTop) { $loader.addClass(hiddenClass + ' ' + hiddenTopClass); } else if (scrollTop > holderBottom) { $loader.addClass(hiddenClass + ' ' + hiddenBottomClass); } else { $loader.removeClass(hiddenClass + ' ' + hiddenTopClass + ' ' + hiddenBottomClass); } }; var loaderHorizontalPosition = function () { var $products = $(contentClass), $sidebar = $(sidebarClass), $loader = $products.parent().find(loaderClass), sidebarWidth = $sidebar.outerWidth(); if ($products.length < 1) return; if (sidebarWidth > 0 && $sidebar.hasClass(sidebarLeftClass)) { if ($('body').hasClass('rtl')) { $loader.css({ 'marginLeft': - sidebarWidth / 2 - 15 }) } else { $loader.css({ 'marginLeft': sidebarWidth / 2 - 15 }) } } else if (sidebarWidth > 0) { if ($('body').hasClass('rtl')) { $loader.css({ 'marginLeft': sidebarWidth / 2 - 15 }) } else { $loader.css({ 'marginLeft': - sidebarWidth / 2 - 15 }) } } }; $(window).off('scroll.loaderVerticalPosition'); $(window).off('loaderHorizontalPosition'); $(window).on('scroll.loaderVerticalPosition', loaderVerticalPosition); $(window).on('resize.loaderHorizontalPosition', loaderHorizontalPosition); loaderVerticalPosition(); loaderHorizontalPosition(); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * "Sort by" widget reinit *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.sortByWidget = function () { if (typeof ($.fn.pjax) == 'undefined') return; $('.woocommerce-ordering').on('change', 'select.orderby', function () { var $form = $(this).closest('form'); $form.find('[name="_pjax"]').remove(); $.pjax({ container: '.main-page-wrapper', timeout: woodmart_settings.pjax_timeout, url: '?' + $form.serialize(), scrollTo: false }); }); $('.woocommerce-ordering').submit(function (e) { e.preventDefault(e); }); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Add filters dropdowns compatibility *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.filterDropdowns = function () { // Init $('.woodmart-widget-layered-nav-dropdown-form').each(function(){ var $form = $(this); var $select = $form.find('select'); var slug = $select.data('slug'); $select.change(function () { var val = $(this).val(); $('input[name=filter_' + slug + ']').val(val); }); if ($().selectWoo) { $select.selectWoo({ placeholder: $select.data('placeholder'), minimumResultsForSearch: 5, width: '100%', allowClear: $select.attr('multiple') ? false : true, language: { noResults: function () { return $select.data('noResults'); } } }).on('select2:unselecting', function () { $(this).data('unselecting', true); }).on('select2:opening', function (e) { if ($(this).data('unselecting')) { $(this).removeData('unselecting'); e.preventDefault(); } }); } }); function ajaxAction($element) { var $form = $element.parent('.woodmart-widget-layered-nav-dropdown-form'); if (typeof ($.fn.pjax) == 'undefined') { return; } $.pjax({ container: '.main-page-wrapper', timeout: woodmart_settings.pjax_timeout, url: $form.attr('action'), data: $form.serialize(), scrollTo: false }); } $('.woodmart-widget-layered-nav-dropdown__submit').on('click', function (e) { if (!$(this).siblings('select').attr('multiple')) { return; } ajaxAction($(this)); $(this).prop('disabled', true); }); $('.woodmart-widget-layered-nav-dropdown-form select').on('change', function (e) { if ($(this).attr('multiple')) { return; } ajaxAction($(this)); }); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Sticky details block for special product type *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.stickyDetails = function () { if ( !$('body').hasClass('woodmart-product-sticky-on') || $(window).width() <= 1024 ) return; var details = $('.entry-summary'); details.each(function () { var $column = $(this), offset = 40, $inner = $column.find('.summary-inner'), $images = $column.parent().find('.product-images-inner'); if ($('body').hasClass('enable-sticky-header') || $('.whb-sticky-row').length > 0 || $('.whb-sticky-header').length > 0) { offset = 150; } $images.imagesLoaded(function () { var diff = $inner.outerHeight() - $images.outerHeight(); if (diff < -100) { $inner.stick_in_parent({ offset_top: offset }); } else if (diff > 100) { $images.stick_in_parent({ offset_top: offset }); } $(window).resize(function () { if ($(window).width() <= 1024) { $inner.trigger('sticky_kit:detach'); $images.trigger('sticky_kit:detach'); } else if ($inner.outerHeight() < $images.outerHeight()) { $inner.stick_in_parent({ offset_top: offset }); } else { $images.stick_in_parent({ offset_top: offset }); } }); }); }); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Product accordion *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.productAccordion = function () { var $accordion = $('.wc-tabs-wrapper'); var time = 300; var hash = window.location.hash; var url = window.location.href; if (hash.toLowerCase().indexOf('comment-') >= 0 || hash === '#reviews' || hash === '#tab-reviews') { $accordion.find('.tab-title-reviews').addClass('active'); } else if (url.indexOf('comment-page-') > 0 || url.indexOf('cpage=') > 0) { $accordion.find('.tab-title-reviews').addClass('active'); } else { $accordion.find('.woodmart-accordion-title').first().addClass('active'); } $accordion.on('click', '.woodmart-accordion-title', function (e) { e.preventDefault(); var $this = $(this), $panel = $this.siblings('.woocommerce-Tabs-panel'); var curentIndex = $this.parent().index(); var oldIndex = $this.parent().siblings().find('.active').parent('.woodmart-tab-wrapper').index(); if ($this.hasClass('active')) { oldIndex = curentIndex; $this.removeClass('active'); $panel.stop().slideUp(time); } else { $accordion.find('.woodmart-accordion-title').removeClass('active'); $accordion.find('.woocommerce-Tabs-panel').slideUp(); $this.addClass('active'); $panel.stop().slideDown(time); } if (oldIndex == -1) oldIndex = curentIndex; $(window).resize(); setTimeout(function () { $(window).resize(); if ($(window).width() < 1024 && curentIndex > oldIndex) { $('html, body').animate({ scrollTop: $this.offset().top - $this.outerHeight() - $('.sticky-header').outerHeight() - 50 }, 500); } }, time); }); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Product thumbnail images & photo swipe gallery *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.productImagesGallery = function () { var $mainImages = $('.woocommerce-product-gallery__image:eq(0) img'), $thumbs = $('.images .thumbnails'), // magnific photo-swipe $mainOwl = $('.woocommerce-product-gallery__wrapper'), thumbs_position = woodmart_settings.product_gallery.thumbs_slider.position; // if (woodmart_settings.product_gallery.thumbs_slider.position == 'centered' && $mainOwl.find('.product-image-wrap').length > 1) { // var moveblock = $mainOwl.find('.product-image-wrap:eq(0)'); // moveblock.remove(); // $mainOwl.find('.product-image-wrap:eq(0)').after(moveblock); // } if (woodmart_settings.product_gallery.images_slider) { if (woodmart_settings.product_slider_auto_height == 'yes') { $('.product-images').imagesLoaded(function () { initMainGallery(); }); } else { initMainGallery(); } } else if (jQuery(window).width() <= 1024 && (thumbs_position == 'bottom_combined' || thumbs_position == 'bottom_column' || thumbs_position == 'bottom_grid')) { initMainGallery(); } if (woodmart_settings.product_gallery.thumbs_slider.enabled && woodmart_settings.product_gallery.images_slider) { initThumbnailsMarkup(); if (woodmart_settings.product_gallery.thumbs_slider.position == 'left' && jQuery(window).width() > 1024 && typeof ($.fn.slick) != 'undefined') { initThumbnailsVertical(); } else { initThumbnailsHorizontal(); } } function initMainGallery() { $('.woocommerce-product-gallery__wrapper').trigger('destroy.owl.carousel'); $('.woocommerce-product-gallery__wrapper').addClass('owl-carousel').owlCarousel(woodmartTheme.mainCarouselArg); $(document).trigger('wood-images-loaded'); }; function initThumbnailsMarkup() { var markup = ''; $('.woocommerce-product-gallery__image').each(function () { var image = $(this).data('thumb'), alt = $(this).find('a > img').attr('alt'), title = $(this).find('a > img').attr('title'); markup += '
    ' + alt + '
    '; }); if ($thumbs.hasClass('slick-slider')) { $thumbs.slick('unslick'); } else if ($thumbs.hasClass('owl-carousel')) { $thumbs.trigger('destroy.owl.carousel'); } $thumbs.empty(); $thumbs.append(markup); }; function initThumbnailsVertical() { $thumbs.slick({ slidesToShow: woodmart_settings.product_gallery.thumbs_slider.items.vertical_items, slidesToScroll: woodmart_settings.product_gallery.thumbs_slider.items.vertical_items, vertical: true, verticalSwiping: true, infinite: false, }); $thumbs.on('click', '.product-image-thumbnail', function (e) { var i = $(this).index(); $mainOwl.trigger('to.owl.carousel', i); }); $mainOwl.on('changed.owl.carousel', function (e) { var i = e.item.index; $thumbs.slick('slickGoTo', i); $thumbs.find('.active-thumb').removeClass('active-thumb'); $thumbs.find('.product-image-thumbnail').eq(i).addClass('active-thumb'); }); $thumbs.find('.product-image-thumbnail').eq(0).addClass('active-thumb'); }; function initThumbnailsHorizontal() { $thumbs.addClass('owl-carousel').owlCarousel({ rtl: $('body').hasClass('rtl'), items: woodmart_settings.product_gallery.thumbs_slider.items.desktop, responsive: { 1025: { items: woodmart_settings.product_gallery.thumbs_slider.items.desktop }, 769: { items: woodmart_settings.product_gallery.thumbs_slider.items.tablet_landscape }, 577: { items: woodmart_settings.product_gallery.thumbs_slider.items.tablet }, 0: { items: woodmart_settings.product_gallery.thumbs_slider.items.mobile } }, dots: false, nav: true, // mouseDrag: false, navText: false, }); var $thumbsOwl = $thumbs.owlCarousel(); $thumbs.on('click', '.owl-item', function (e) { var i = $(this).index(); $thumbsOwl.trigger('to.owl.carousel', i); $mainOwl.trigger('to.owl.carousel', i); }); $mainOwl.on('changed.owl.carousel', function (e) { var i = e.item.index; $thumbsOwl.trigger('to.owl.carousel', i); $thumbs.find('.active-thumb').removeClass('active-thumb'); $thumbs.find('.product-image-thumbnail').eq(i).addClass('active-thumb'); }); $thumbs.find('.product-image-thumbnail').eq(0).addClass('active-thumb'); }; // Update first thumbnail on variation change }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * WooCommerce adding to cart *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.addToCart = function () { var that = this, timeoutNumber = 0; that.addToCartAllTypes(); $('body').on('added_to_cart', function (event, fragments, cart_hash) { if (woodmart_settings.add_to_cart_action == 'popup') { var html = [ '
    ', '

    ' + woodmart_settings.added_to_cart + '

    ', '' + woodmart_settings.continue_shopping + '', '' + woodmart_settings.view_cart + '', '
    ', ].join(""); $.magnificPopup.open({ removalDelay: 500, //delay removal by X to allow out-animation tClose: woodmart_settings.close, tLoading: woodmart_settings.loading, callbacks: { beforeOpen: function () { this.st.mainClass = woodmartTheme.popupEffect + ' cart-popup-wrapper'; }, }, items: { src: '', type: 'inline' } }); $('.white-popup').on('click', '.close-popup', function (e) { e.preventDefault(); $.magnificPopup.close(); }); } else if (woodmart_settings.add_to_cart_action == 'widget') { clearTimeout(timeoutNumber); if ($('.act-scroll .woodmart-shopping-cart, .whb-sticked .woodmart-shopping-cart').length > 0) { $('.act-scroll .woodmart-shopping-cart, .whb-sticked .woodmart-shopping-cart').addClass('display-widget'); } else { $('.whb-header .woodmart-shopping-cart').addClass('display-widget'); } if ($('.cart-widget-opener').length > 0) { $('.cart-widget-opener').trigger('click'); } timeoutNumber = setTimeout(function () { $('.display-widget').removeClass('display-widget'); }, 3500); } that.btnsToolTips(); }); }, woodmartThemeModule.addToCartAllTypes = function () { if (woodmart_settings.ajax_add_to_cart == false) return; // AJAX add to cart for all types of products $('body').on('submit', 'form.cart', function (e) { var $productWrapper = $(this).parents('.single-product-page'); if ($productWrapper.hasClass('product-type-external') || $productWrapper.hasClass('product-type-zakeke')) return; e.preventDefault(); var $form = $(this), $thisbutton = $form.find('.button'), data = $form.serialize(); data += '&action=woodmart_ajax_add_to_cart'; if ($thisbutton.val()) { data += '&add-to-cart=' + $thisbutton.val(); } $thisbutton.removeClass('added not-added'); $thisbutton.addClass('loading'); // Trigger event $(document.body).trigger('adding_to_cart', [$thisbutton, data]); $.ajax({ url: woodmart_settings.ajaxurl, data: data, method: 'POST', success: function (response) { if (!response) { return; } var this_page = window.location.toString(); this_page = this_page.replace('add-to-cart', 'added-to-cart'); if (response.error && response.product_url) { window.location = response.product_url; return; } // Redirect to cart option if (wc_add_to_cart_params.cart_redirect_after_add === 'yes') { window.location = wc_add_to_cart_params.cart_url; return; } else { $thisbutton.removeClass('loading'); var fragments = response.fragments; var cart_hash = response.cart_hash; // Block fragments class if (fragments) { $.each(fragments, function (key) { $(key).addClass('updating'); }); } // Replace fragments if (fragments) { $.each(fragments, function (key, value) { $(key).replaceWith(value); }); } // Show notices if (response.notices.indexOf('error') > 0) { $('body').append(response.notices); $thisbutton.addClass('not-added'); } else { if (woodmart_settings.add_to_cart_action == 'widget') $.magnificPopup.close(); // Changes button classes $thisbutton.addClass('added'); // Trigger event so themes can refresh other areas $(document.body).trigger('added_to_cart', [fragments, cart_hash, $thisbutton]); } } }, error: function () { console.log('ajax adding to cart error'); }, complete: function () { }, }); }); }; woodmartThemeModule.updateWishListNumberInit = function () { if (woodmart_settings.wishlist == 'no' || $('.wishlist-count').length <= 0) return; var that = this; if (woodmartTheme.supports_html5_storage) { try { var wishlistNumber = sessionStorage.getItem('woodmart_wishlist_number'), cookie_hash = Cookies.get('woodmart_wishlist_hash'); if (wishlistNumber === null || wishlistNumber === undefined || wishlistNumber === '') { wishlistNumber = 0; } if (cookie_hash === null || cookie_hash === undefined || cookie_hash === '') { cookie_hash = 0; } if (wishlistNumber == cookie_hash) { this.setWishListNumber(wishlistNumber); } else { throw 'No wishlist number'; } } catch (err) { this.updateWishListNumber(); } } else { this.updateWishListNumber(); } $('body').on('added_to_cart added_to_wishlist removed_from_wishlist', function () { that.updateWishListNumber(); that.btnsToolTips(); that.woocommerceWrappTable(); }); }; woodmartThemeModule.updateCartWidgetFromLocalStorage = function () { var that = this; if (woodmartTheme.supports_html5_storage) { try { var wc_fragments = $.parseJSON(sessionStorage.getItem(wc_cart_fragments_params.fragment_name)); if (wc_fragments && wc_fragments['div.widget_shopping_cart_content']) { $.each(wc_fragments, function (key, value) { $(key).replaceWith(value); }); $(document.body).trigger('wc_fragments_loaded'); } else { throw 'No fragment'; } } catch (err) { console.log('cant update cart widget'); } } }; woodmartThemeModule.updateWishListNumber = function () { var that = this; $.ajax({ url: woodmart_settings.ajaxurl, data: { action: 'woodmart_wishlist_number', }, method: 'get', success: function (data) { that.setWishListNumber(data); if (woodmartTheme.supports_html5_storage) { sessionStorage.setItem('woodmart_wishlist_number', data); } } }); }; woodmartThemeModule.setWishListNumber = function (num) { num = ($.isNumeric(num)) ? num : 0; $('.woodmart-wishlist-info-widget .wishlist-count').text(num); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Quick Shop *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.quickShop = function () { var btnSelector = '.quick-shop-on.product-type-variable .add_to_cart_button'; $(document).on('click', btnSelector, function (e) { e.preventDefault(); var $this = $(this), $product = $this.parents('.product').first(), $content = $product.find('.quick-shop-form'), id = $product.data('id'), loadingClass = 'btn-loading'; if ($this.hasClass(loadingClass)) return; // Simply show quick shop form if it is already loaded with AJAX previously if ($product.hasClass('quick-shop-loaded')) { $product.addClass('quick-shop-shown'); return; } $this.addClass(loadingClass); $product.addClass('loading-quick-shop'); $.ajax({ url: woodmart_settings.ajaxurl, data: { action: 'woodmart_quick_shop', id: id, }, method: 'get', success: function (data) { // insert variations form $content.append(data); initVariationForm($product); $('body').trigger('woodmart-quick-view-displayed'); woodmartThemeModule.swatchesVariations(); woodmartThemeModule.btnsToolTips(); }, complete: function () { setTimeout(function () { $this.removeClass(loadingClass); $product.removeClass('loading-quick-shop'); $product.addClass('quick-shop-shown quick-shop-loaded'); }, 100); }, error: function () { }, }); }) .on('click', '.quick-shop-close', function () { var $this = $(this), $product = $this.parents('.product'); $product.removeClass('quick-shop-shown'); }); $(document.body).on('added_to_cart', function () { $('.product').removeClass('quick-shop-shown'); }); function initVariationForm($product) { $product.find('.variations_form').wc_variation_form().find('.variations select:eq(0)').change(); $product.find('.variations_form').trigger('wc_variation_form'); } }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Quick View *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.quickViewInit = function () { // Open popup with product info when click on Quick View button $(document).on('click', '.open-quick-view', function (e) { e.preventDefault(); var productId = $(this).data('id'), loopName = $(this).data('loop-name'), closeText = woodmart_settings.close, loadingText = woodmart_settings.loading, loop = $(this).data('loop'), prev = '', next = '', loopBtns = $('.quick-view').find('[data-loop-name="' + loopName + '"]'), btn = $(this); btn.addClass('loading'); if (typeof loopBtns[loop - 1] != 'undefined') { prev = loopBtns.eq(loop - 1).addClass('quick-view-prev'); prev = $('
    ').append(prev.clone()).html(); } if (typeof loopBtns[loop + 1] != 'undefined') { next = loopBtns.eq(loop + 1).addClass('quick-view-next'); next = $('
    ').append(next.clone()).html(); } woodmartThemeModule.quickViewLoad(productId, btn, prev, next); }); }; woodmartThemeModule.quickViewLoad = function (id, btn, prev, next) { var data = { id: id, action: "woodmart_quick_view", }; var initPopup = function (data) { $.magnificPopup.open({ items: { src: '', // can be a HTML string, jQuery object, or CSS selector type: 'inline' }, tClose: woodmart_settings.close, tLoading: woodmart_settings.loading, removalDelay: 500, //delay removal by X to allow out-animation callbacks: { beforeOpen: function () { this.st.mainClass = woodmartTheme.popupEffect + ' quick-view-wrapper'; }, open: function () { $('.variations_form').each(function () { $(this).wc_variation_form().find('.variations select:eq(0)').change(); }); $('.variations_form').trigger('wc_variation_form'); $('body').trigger('woodmart-quick-view-displayed'); woodmartThemeModule.swatchesVariations(); woodmartThemeModule.btnsToolTips(); setTimeout(function () { woodmartThemeModule.nanoScroller(); }, 300); } }, }); } $.ajax({ url: woodmart_settings.ajaxurl, data: data, method: 'get', success: function (data) { if (woodmart_settings.quickview_in_popup_fix) { $.magnificPopup.close(); setTimeout(function () { initPopup(data); }, 500); } else { initPopup(data); } }, complete: function () { btn.removeClass('loading'); }, error: function () { }, }); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Swatches variations *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.swatchesVariations = function () { var $variation_forms = $('.variations_form'); // Firefox mobile fix $('.variations_form .label').on('click', function (e) { if ($(this).siblings('.value').hasClass('with-swatches')) { e.preventDefault(); } }); $variation_forms.each(function () { var $variation_form = $(this); if ($variation_form.data('swatches')) return; $variation_form.data('swatches', true); // If AJX if (!$variation_form.data('product_variations')) { $variation_form.find('.swatches-select').find('> div').addClass('swatch-enabled'); } if ($('.swatches-select > div').hasClass('active-swatch')) { $variation_form.addClass('variation-swatch-selected'); } $variation_form.on('click', '.swatches-select > div', function () { var value = $(this).data('value'); var id = $(this).parent().data('id'); $variation_form.trigger('check_variations', ['attribute_' + id, true]); resetSwatches($variation_form); //$variation_form.find('select#' + id).val('').trigger('change'); //$variation_form.trigger('check_variations'); if ($(this).hasClass('active-swatch')) { // Removed since 2.9 version as not necessary // $variation_form.find( '.variations select' ).val( '' ).change(); // $variation_form.trigger( 'reset_data' ); // $(this).removeClass('active-swatch') return; } if ($(this).hasClass('swatch-disabled')) return; $variation_form.find('select#' + id).val(value).trigger('change'); $(this).parent().find('.active-swatch').removeClass('active-swatch'); $(this).addClass('active-swatch'); resetSwatches($variation_form); }) // On clicking the reset variation button .on('click', '.reset_variations', function (event) { $variation_form.find('.active-swatch').removeClass('active-swatch'); if (!isQuickView()) { replaceMainGallery('default', $variation_form); } }) .on('reset_data', function () { if (!$variation_form.find('.variations .value').hasClass('with-swatches') && !isQuickView()) { replaceMainGallery('default', $variation_form); } var all_attributes_chosen = true; var some_attributes_chosen = false; $variation_form.find('.variations select').each(function () { var attribute_name = $(this).data('attribute_name') || $(this).attr('name'); var value = $(this).val() || ''; if (value.length === 0) { all_attributes_chosen = false; } else { some_attributes_chosen = true; } }); if (all_attributes_chosen) { $(this).parent().find('.active-swatch').removeClass('active-swatch'); } $variation_form.removeClass('variation-swatch-selected'); var $mainOwl = (isQuickView()) ? $('.product-quick-view .woocommerce-product-gallery__wrapper') : $('.woocommerce-product-gallery__wrapper'); resetSwatches($variation_form); if (!isQuickShop($variation_form)) { scrollToTop(); } if (!$mainOwl.hasClass('owl-carousel')) return; if (woodmart_settings.product_slider_auto_height == 'yes') { if (!isQuickView() && isVariationGallery('default')) { $mainOwl.trigger('destroy.owl.carousel'); } $('.product-images').imagesLoaded(function () { $mainOwl = $mainOwl.owlCarousel(woodmartTheme.mainCarouselArg); $mainOwl.trigger('refresh.owl.carousel'); }); } else { $mainOwl = $mainOwl.owlCarousel(woodmartTheme.mainCarouselArg); $mainOwl.trigger('refresh.owl.carousel'); } var slide_go_to = woodmart_settings.product_gallery.thumbs_slider.position == 'centered' ? woodmart_settings.centered_gallery_start : 0; if (isQuickView()) slide_go_to = 0; $mainOwl.trigger('to.owl.carousel', slide_go_to); }) // Update first tumbnail .on('reset_image', function () { var $thumb = $('.thumbnails .product-image-thumbnail img').first(); if (!isQuickView() && !isQuickShop($variation_form)) { $thumb.wc_reset_variation_attr('src'); } }) .on('show_variation', function (e, variation, purchasable) { if (!variation.image.src) { return; } // See if the gallery has an image with the same original src as the image we want to switch to. var galleryHasImage = $('.thumbnails .product-image-thumbnail img[data-o_src="' + variation.image.thumb_src + '"]').length > 0; var $firstThumb = $('.thumbnails .product-image-thumbnail img').first(); // If the gallery has the image, reset the images. We'll scroll to the correct one. if (galleryHasImage) { $firstThumb.wc_reset_variation_attr('src'); } if (!isQuickView() && !isQuickShop($variation_form) && !replaceMainGallery(variation.variation_id, $variation_form)) { if ($firstThumb.attr('src') != variation.image.thumb_src) { $firstThumb.wc_set_variation_attr('src', variation.image.src); } woodmartThemeModule.initZoom(); } $variation_form.addClass('variation-swatch-selected'); if (!isQuickShop($variation_form)) { scrollToTop(); } var $mainOwl = (isQuickView()) ? $('.product-quick-view .woocommerce-product-gallery__wrapper') : $('.woocommerce-product-gallery__wrapper'); if (!$mainOwl.hasClass('owl-carousel')) return; if (woodmart_settings.product_slider_auto_height == 'yes') { if (!isQuickView() && isVariationGallery(variation.variation_id)) { $mainOwl.trigger('destroy.owl.carousel'); } $('.product-images').imagesLoaded(function () { $mainOwl = $mainOwl.owlCarousel(woodmartTheme.mainCarouselArg); $mainOwl.trigger('refresh.owl.carousel'); }); } else { $mainOwl = $mainOwl.owlCarousel(woodmartTheme.mainCarouselArg); $mainOwl.trigger('refresh.owl.carousel'); } var $thumbs = $('.images .thumbnails'); $mainOwl.trigger('to.owl.carousel', 0); if ($thumbs.hasClass('owl-carousel')) { $thumbs.owlCarousel().trigger('to.owl.carousel', 0); $thumbs.find('.active-thumb').removeClass('active-thumb'); $thumbs.find('.product-image-thumbnail').eq(0).addClass('active-thumb'); } else if ($thumbs.hasClass('slick-slider')) { $thumbs.slick('slickGoTo', 0); if (!$thumbs.find('.product-image-thumbnail').eq(0).hasClass('active-thumb')) { $thumbs.find('.active-thumb').removeClass('active-thumb'); $thumbs.find('.product-image-thumbnail').eq(0).addClass('active-thumb'); } } }); }) var resetSwatches = function ($variation_form) { // If using AJAX if (!$variation_form.data('product_variations')) return; $variation_form.find('.variations select').each(function () { var select = $(this); var swatch = select.parent().find('.swatches-select'); var options = select.html(); // var options = select.data('attribute_html'); options = $(options); swatch.find('> div').removeClass('swatch-enabled').addClass('swatch-disabled'); options.each(function (el) { var value = $(this).val(); if ($(this).hasClass('enabled')) { // if( ! el.disabled ) { swatch.find('div[data-value="' + value + '"]').removeClass('swatch-disabled').addClass('swatch-enabled'); } else { swatch.find('div[data-value="' + value + '"]').addClass('swatch-disabled').removeClass('swatch-enabled'); } }); }); }; var isQuickView = function () { return $('.single-product-content').hasClass('product-quick-view'); }; var isQuickShop = function ($form) { return $form.parent().hasClass('quick-shop-form'); }; var isVariationGallery = function (key) { return typeof woodmart_variation_gallery_data !== 'undefined' && woodmart_variation_gallery_data && woodmart_variation_gallery_data[key]; }; var scrollToTop = function () { if (!$('body').hasClass('woodmart-product-sticky-on') || !$('.summary-inner').hasClass('is_stuck') || !woodmart_settings.woodmart_sticky_desc_scroll || $(window).width() <= 1024) return; $('.woodmart-swatch').tooltip('hide'); $('html, body').animate({ scrollTop: $('.product-image-summary').offset().top - 150 }, 800); } var replaceMainGallery = function (key, $variationForm) { if (!isVariationGallery(key) || isQuickShop($variationForm) && isQuickView()) { return false; } var imagesData = woodmart_variation_gallery_data[key]; var $mainGallery = $('.woocommerce-product-gallery__wrapper'); $mainGallery.empty(); for (var index = 0; index < imagesData.length; index++) { $mainGallery.append( '' ); } woodmartThemeModule.productImagesGallery(); $('.woocommerce-product-gallery__image').trigger('zoom.destroy'); if (!isQuickView()) { woodmartThemeModule.initZoom(); } return true; } }; woodmartThemeModule.swatchesOnGrid = function () { $('body').on('click', '.swatch-on-grid', function () { var src, srcset, image_sizes; var imageSrc = $(this).data('image-src'), imageSrcset = $(this).data('image-srcset'), imageSizes = $(this).data('image-sizes'); if (typeof imageSrc == 'undefined') return; var product = $(this).parents('.product-grid-item'), image = product.find('.product-image-link > img'), srcOrig = image.data('original-src'), srcsetOrig = image.data('original-srcset'), sizesOrig = image.data('original-sizes'); if (typeof srcOrig == 'undefined') { image.data('original-src', image.attr('src')); } if (typeof srcsetOrig == 'undefined') { image.data('original-srcset', image.attr('srcset')); } if (typeof sizesOrig == 'undefined') { image.data('original-sizes', image.attr('sizes')); } if ($(this).hasClass('current-swatch')) { src = srcOrig; srcset = srcsetOrig; image_sizes = sizesOrig; $(this).removeClass('current-swatch'); product.removeClass('product-swatched'); } else { $(this).parent().find('.current-swatch').removeClass('current-swatch'); $(this).addClass('current-swatch'); product.addClass('product-swatched'); src = imageSrc; srcset = imageSrcset; image_sizes = imageSizes; } if (image.attr('src') == src) return; product.addClass('loading-image'); image.attr('src', src).attr('srcset', srcset).attr('image_sizes', image_sizes).one('load', function () { product.removeClass('loading-image'); }); }); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Products tabs element AJAX loading *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.productsTabs = function () { var process = false; $('.woodmart-products-tabs').each(function () { var $this = $(this), $inner = $this.find('.woodmart-tab-content'), cache = []; if ($inner.find('.owl-carousel').length < 1) { cache[0] = { html: $inner.html() }; } $this.find('.products-tabs-title li').on('click', function (e) { e.preventDefault(); var $this = $(this), atts = $this.data('atts'), index = $this.index(); if (process || $this.hasClass('active-tab-title')) return; process = true; loadTab(atts, index, $inner, $this, cache, function (data) { if (data.html) { $inner.html(data.html); $(document).trigger('wood-images-loaded'); woodmartThemeModule.productHover(); woodmartThemeModule.btnsToolTips(); woodmartThemeModule.shopMasonry(); woodmartThemeModule.productsLoadMore(); woodmartThemeModule.countDownTimer(); woodmartThemeModule.productLoaderPosition(); } }); }); var $nav = $this.find('.tabs-navigation-wrapper'), $subList = $nav.find('ul'), time = 300; $nav.on('click', '.open-title-menu', function () { var $btn = $(this); if ($subList.hasClass('list-shown')) { $btn.removeClass('toggle-active'); $subList.stop().slideUp(time).removeClass('list-shown'); } else { $btn.addClass('toggle-active'); $subList.addClass('list-shown'); setTimeout(function () { $('body').one('click', function (e) { var target = e.target; if (!$(target).is('.tabs-navigation-wrapper') && !$(target).parents().is('.tabs-navigation-wrapper')) { $btn.removeClass('toggle-active'); $subList.removeClass('list-shown'); return false; } }); }, 10); } }) .on('click', 'li', function () { var $btn = $nav.find('.open-title-menu'), text = $(this).text(); if ($subList.hasClass('list-shown')) { $btn.removeClass('toggle-active').text(text); $subList.removeClass('list-shown'); } }); }); var loadTab = function (atts, index, holder, btn, cache, callback) { btn.parent().find('.active-tab-title').removeClass('active-tab-title'); btn.addClass('active-tab-title') if (cache[index]) { holder.addClass('loading'); setTimeout(function () { callback(cache[index]); holder.removeClass('loading'); process = false; }, 300); return; } holder.addClass('loading').parent().addClass('element-loading'); btn.addClass('loading'); $.ajax({ url: woodmart_settings.ajaxurl, data: { atts: atts, action: 'woodmart_get_products_tab_shortcode', }, dataType: 'json', method: 'POST', success: function (data) { cache[index] = data; callback(data); }, error: function (data) { console.log('ajax error'); }, complete: function () { holder.removeClass('loading').parent().removeClass('element-loading'); btn.removeClass('loading'); process = false; woodmartThemeModule.compare(); }, }); }; }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Load more button for products shortcode *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.productsLoadMore = function () { var process = false, intervalID; $('.woodmart-products-element').each(function () { var $this = $(this), cache = [], inner = $this.find('.woodmart-products-holder'); if (!inner.hasClass('pagination-arrows')) return; cache[1] = { items: inner.html(), status: 'have-posts' }; $this.on('recalc', function () { calc(); }); $(window).resize(function () { calc(); }); var calc = function () { var height = inner.outerHeight(); $this.stop().css({ minHeight: height }); }; // sticky buttons var body = $('body'), btnWrap = $this.find('.products-footer'), btnLeft = btnWrap.find('.woodmart-products-load-prev'), btnRight = btnWrap.find('.woodmart-products-load-next'), loadWrapp = $this.find('.woodmart-products-loader'), scrollTop, holderTop, btnLeftOffset, btnRightOffset, holderBottom, holderHeight, holderWidth, btnsHeight, offsetArrow = 50, offset, windowWidth; if (body.hasClass('rtl')) { btnLeft = btnRight; btnRight = btnWrap.find('.woodmart-products-load-prev'); } $(window).scroll(function () { buttonsPos(); }); function buttonsPos() { offset = $(window).height() / 2; windowWidth = $(window).outerWidth(true); holderWidth = $this.outerWidth(true); scrollTop = $(window).scrollTop(); holderTop = $this.offset().top - offset; btnLeftOffset = $this.offset().left - offsetArrow; btnRightOffset = holderWidth + $this.offset().left + offsetArrow - btnRight.outerWidth(); btnsHeight = btnLeft.outerHeight(); holderHeight = $this.height() - btnsHeight; holderBottom = holderTop + holderHeight; if ($(window).width() <= 1024) { btnLeftOffset = btnLeftOffset + 35; btnRightOffset = btnRightOffset - 35; } btnLeft.css({ 'left': btnLeftOffset + 'px' }); btnRight.css({ 'left': btnRightOffset + 'px' }); if (scrollTop < holderTop || scrollTop > holderBottom) { btnWrap.removeClass('show-arrow'); loadWrapp.addClass('hidden-loader'); } else { btnWrap.addClass('show-arrow'); loadWrapp.removeClass('hidden-loader'); } }; $this.find('.woodmart-products-load-prev, .woodmart-products-load-next').off('click').on('click', function (e) { e.preventDefault(); if (process || $(this).hasClass('disabled')) return; process = true; clearInterval(intervalID); var $this = $(this), holder = $this.parent().parent().prev(), next = $this.parent().find('.woodmart-products-load-next'), prev = $this.parent().find('.woodmart-products-load-prev'), atts = holder.data('atts'), action = 'woodmart_get_products_shortcode', ajaxurl = woodmart_settings.ajaxurl, dataType = 'json', method = 'POST', paged = holder.attr('data-paged'); paged++; if ($this.hasClass('woodmart-products-load-prev')) { if (paged < 2) return; paged = paged - 2; } loadProducts('arrows', atts, ajaxurl, action, dataType, method, paged, holder, $this, cache, function (data) { var isBorderedGrid = holder.hasClass('products-bordered-grid'); if (!isBorderedGrid) { holder.addClass('woodmart-animated-products'); } if (data.items) { holder.html(data.items).attr('data-paged', paged); holder.imagesLoaded().progress(function () { holder.parent().trigger('recalc'); }); $(document).trigger('wood-images-loaded'); woodmartThemeModule.productHover(); woodmartThemeModule.btnsToolTips(); } if ($(window).width() < 768) { $('html, body').stop().animate({ scrollTop: holder.offset().top - 150 }, 400); } if (!isBorderedGrid) { var iter = 0; intervalID = setInterval(function () { holder.find('.product-grid-item').eq(iter).addClass('woodmart-animated'); iter++; }, 100); } if (paged > 1) { prev.removeClass('disabled'); } else { prev.addClass('disabled'); } if (data.status == 'no-more-posts') { next.addClass('disabled'); } else { next.removeClass('disabled'); } }); }); }); woodmartThemeModule.clickOnScrollButton(woodmartTheme.shopLoadMoreBtn, false, woodmart_settings.infinit_scroll_offset); $(document).off('click', '.woodmart-products-load-more').on('click', '.woodmart-products-load-more', function (e) { e.preventDefault(); if (process) return; process = true; var $this = $(this), holder = $this.parent().siblings('.woodmart-products-holder'), source = holder.data('source'), action = 'woodmart_get_products_' + source, ajaxurl = woodmart_settings.ajaxurl, dataType = 'json', method = 'POST', atts = holder.data('atts'), paged = holder.data('paged'); paged++; if (source == 'main_loop') { ajaxurl = $(this).attr('href'); method = 'GET'; } loadProducts('load-more', atts, ajaxurl, action, dataType, method, paged, holder, $this, [], function (data) { if (data.items) { if (holder.hasClass('grid-masonry')) { isotopeAppend(holder, data.items); } else { holder.append(data.items); } holder.imagesLoaded().progress(function () { woodmartThemeModule.clickOnScrollButton(woodmartTheme.shopLoadMoreBtn, true, woodmart_settings.infinit_scroll_offset); }); $(document).trigger('wood-images-loaded'); holder.data('paged', paged); woodmartThemeModule.productHover(); woodmartThemeModule.btnsToolTips(); } if (source == 'main_loop') { $this.attr('href', data.nextPage); if (data.status == 'no-more-posts') { $this.hide().remove(); } } if (data.status == 'no-more-posts') { $this.hide(); } }); }); var loadProducts = function (btnType, atts, ajaxurl, action, dataType, method, paged, holder, btn, cache, callback) { var data = { atts: atts, paged: paged, action: action, woo_ajax: 1, }; if (cache[paged]) { holder.addClass('loading'); setTimeout(function () { callback(cache[paged]); holder.removeClass('loading'); process = false; }, 300); return; } if (btnType == 'arrows') holder.addClass('loading').parent().addClass('element-loading'); btn.addClass('loading'); if (action == 'woodmart_get_products_main_loop') { var loop = holder.find('.product').last().data('loop'); data = { loop: loop, woo_ajax: 1 }; } $.ajax({ url: ajaxurl, data: data, dataType: dataType, method: method, success: function (data) { cache[paged] = data; callback(data); }, error: function (data) { console.log('ajax error'); }, complete: function () { if (btnType == 'arrows') holder.removeClass('loading').parent().removeClass('element-loading'); btn.removeClass('loading'); process = false; woodmartThemeModule.compare(); woodmartThemeModule.productHover(); woodmartThemeModule.countDownTimer(); }, }); }; var isotopeAppend = function (el, items) { // initialize Masonry after all images have loaded var items = $(items); el.append(items).isotope('appended', items); el.imagesLoaded().progress(function () { el.isotope('layout'); }); }; }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Compare button *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.compare = function () { var body = $("body"), button = $("a.compare"); body.on("click", "a.compare", function () { $(this).addClass("loading"); }); body.on("yith_woocompare_open_popup", function () { button.removeClass("loading"); body.addClass("compare-opened"); }); body.on('click', '#cboxClose, #cboxOverlay', function () { body.removeClass("compare-opened"); }); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * WoodMart compare functions *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.woodmartCompare = function () { var cookiesName = 'woodmart_compare_list'; if (woodmart_settings.is_multisite) { cookiesName += '_' + woodmart_settings.current_blog_id; } var $body = $("body"), $widget = $('.woodmart-compare-info-widget'), compareCookie = Cookies.get(cookiesName); if ($widget.length > 0) { try { var ids = JSON.parse(compareCookie); $widget.find('.compare-count').text(ids.length); } catch (e) { console.log('cant parse cookies json'); } } // Add to compare action $body.on('click', '.woodmart-compare-btn a', function (e) { var $this = $(this), id = $this.data('id'), addedText = $this.data('added-text'); if ($this.hasClass('added')) return true; e.preventDefault(); $this.addClass('loading'); jQuery.ajax({ url: woodmart_settings.ajaxurl, data: { action: 'woodmart_add_to_compare', id: id, }, dataType: 'json', method: 'GET', success: function (response) { if (response.table) { updateCompare(response); } else { console.log('something wrong loading compare data ', response); } }, error: function (data) { console.log('We cant add to compare. Something wrong with AJAX response. Probably some PHP conflict.'); }, complete: function () { $this.removeClass('loading').addClass('added'); if ($this.find('span').length > 0) { $this.find('span').text(addedText); } else { $this.text(addedText); } }, }); }); // Remove from compare action $body.on('click', '.woodmart-compare-remove', function (e) { var $table = $('.woodmart-compare-table'); e.preventDefault(); var $this = $(this), id = $this.data('id'); $table.addClass('loading'); $this.addClass('loading'); jQuery.ajax({ url: woodmart_settings.ajaxurl, data: { action: 'woodmart_remove_from_compare', id: id, }, dataType: 'json', method: 'GET', success: function (response) { if (response.table) { updateCompare(response); } else { console.log('something wrong loading compare data ', response); } }, error: function (data) { console.log('We cant remove product compare. Something wrong with AJAX response. Probably some PHP conflict.'); }, complete: function () { $table.removeClass('loading'); $this.addClass('loading'); }, }); }); // Elements update after ajax function updateCompare(data) { if ($widget.length > 0) { $widget.find('.compare-count').text(data.count); } if ($('.woodmart-compare-table').length > 0) { $('.woodmart-compare-table').replaceWith(data.table); } } }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Add class in wishlist *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.wishList = function () { var body = $("body"); body.on("click", ".add_to_wishlist", function () { $(this).parent().addClass("feid-in"); }); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Product 360 button *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.product360Button = function () { $('.product-360-button a').magnificPopup({ type: 'inline', mainClass: 'mfp-fade', // removalDelay: 500, //delay removal by X to allow out-animation // callbacks: { // beforeOpen: function() { // this.st.mainClass = woodmartTheme.popupEffect; // } // }, preloader: false, tClose: woodmart_settings.close, tLoading: woodmart_settings.loading, fixedContentPos: false, callbacks: { open: function () { $(window).resize() }, }, }); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Product video button *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.productVideo = function () { $('.product-video-button a').magnificPopup({ tClose: woodmart_settings.close, tLoading: woodmart_settings.loading, type: 'iframe', iframe: { patterns: { youtube: { index: 'youtube.com/', id: 'v=', src: '/www.youtube.com/embed/%id%?rel=0&autoplay=1' } } }, preloader: false, fixedContentPos: false }); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Login tabs for my account page *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.loginTabs = function () { var tabs = $('.woodmart-register-tabs'), btn = tabs.find('.woodmart-switch-to-register'), title = $('.col-register-text h2'), login = tabs.find('.col-login'), loginText = tabs.find('.login-info'), register = tabs.find('.col-register'), classOpened = 'active-register', loginLabel = btn.data('login'), registerLabel = btn.data('register'); btn.on('click', function (e) { e.preventDefault(); if (isShown()) { hideRegister(); } else { showRegister(); } var scrollTo = $('.main-page-wrapper').offset().top - 100; if ($(window).width() < 768) { $('html, body').stop().animate({ scrollTop: tabs.offset().top - 90 }, 400); } }); var showRegister = function () { tabs.addClass(classOpened); btn.text(loginLabel); if (loginText.length > 0) { title.text(registerLabel); } }; var hideRegister = function () { tabs.removeClass(classOpened); btn.text(registerLabel); if (loginText.length > 0) { title.text(loginLabel); } }; var isShown = function () { return tabs.hasClass(classOpened); }; }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Header Categories menu for mobile *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.headerCategoriesMenu = function () { if ($(window).width() > 1024) return; var categories = $('.header-categories-nav'), catsUl = categories.find('.categories-menu-dropdown'), subCategories = categories.find('.menu-item-has-children'), button = categories.find('.menu-opener'), time = 200, iconDropdown = ''; subCategories.find('> a').before(iconDropdown); catsUl.on('click', '.drop-category', function () { var sublist = $(this).parent().find('> .sub-menu-dropdown, >.sub-sub-menu'); if (sublist.hasClass('child-open')) { $(this).removeClass("act-icon"); sublist.slideUp(time).removeClass('child-open'); } else { $(this).addClass("act-icon"); sublist.slideDown(time).addClass('child-open'); } }); categories.on('click', '.menu-opener', function (e) { e.preventDefault(); if (isOpened()) { closeCats(); } else { //setTimeout(function() { openCats(); //}, 50); } }); catsUl.on('click', 'a', function (e) { closeCats(); catsUl.stop().attr('style', ''); }); var isOpened = function () { return catsUl.hasClass('categories-opened'); }; var openCats = function () { catsUl.addClass('categories-opened').stop().slideDown(time); button.addClass('button-open'); }; var closeCats = function () { catsUl.removeClass('categories-opened').stop().slideUp(time); button.removeClass('button-open'); }; }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Categories menu for mobile *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.categoriesMenu = function () { if ($(window).width() > 1024) return; var categories = $('.woodmart-product-categories'), subCategories = categories.find('li > ul'), button = $('.woodmart-show-categories'), time = 200; //this.categoriesMenuBtns(); $('body').on('click', '.icon-drop-category', function () { if ($(this).closest('.has-sub').find('> ul').hasClass('child-open')) { $(this).removeClass("woodmart-act-icon").closest('.has-sub').find('> ul').slideUp(time).removeClass('child-open'); } else { $(this).addClass("woodmart-act-icon").closest('.has-sub').find('> ul').slideDown(time).addClass('child-open'); } }); $('body').on('click', '.woodmart-show-categories', function (e) { e.preventDefault(); if (isOpened()) { closeCats(); } else { //setTimeout(function() { openCats(); //}, 50); } }); $('body').on('click', '.woodmart-product-categories a', function (e) { closeCats(); categories.stop().attr('style', ''); }); var isOpened = function () { return $('.woodmart-product-categories').hasClass('categories-opened'); }; var openCats = function () { $('.woodmart-product-categories').addClass('categories-opened').stop().slideDown(time); $('.woodmart-show-categories').addClass('button-open'); }; var closeCats = function () { $('.woodmart-product-categories').removeClass('categories-opened').stop().slideUp(time); $('.woodmart-show-categories').removeClass('button-open'); }; }; woodmartThemeModule.categoriesMenuBtns = function () { if ($(window).width() > 1024) return; var categories = $('.woodmart-product-categories'), subCategories = categories.find('li > ul'), iconDropdown = ''; categories.addClass('responsive-cateogires'); subCategories.parent().addClass('has-sub').find('> .category-nav-link').prepend(iconDropdown); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Filters area *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.filtersArea = function () { var filters = $('.filters-area'), btn = $('.open-filters'), time = 200; $('body').on('click', '.open-filters', function (e) { e.preventDefault(); if (isOpened()) { closeFilters(); } else { woodmartThemeModule.openFilters(time); setTimeout(function () { woodmartThemeModule.shopLoader(); }, time); } }); if (woodmart_settings.shop_filters_close == 'no') { $('body').on('click', woodmartTheme.ajaxLinks, function () { if (isOpened()) { closeFilters(); } }); } var isOpened = function () { filters = $('.filters-area') return filters.hasClass('filters-opened'); }; var closeFilters = function () { filters = $('.filters-area') filters.removeClass('filters-opened'); filters.stop().slideUp(time); $('.open-filters').removeClass('btn-opened'); }; }; woodmartThemeModule.openFilters = function (time) { var filters = $('.filters-area') filters.stop().slideDown(time); $('.open-filters').addClass('btn-opened'); setTimeout(function () { filters.addClass('filters-opened'); $('body').removeClass('body-filters-opened'); woodmartThemeModule.nanoScroller(); $(document).trigger('wood-images-loaded'); }, time); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Init shop page JS functions *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.shopPageInit = function () { woodmartThemeModule.shopMasonry(); woodmartThemeModule.ajaxSearch(); woodmartThemeModule.productHover(); woodmartThemeModule.btnsToolTips(); woodmartThemeModule.compare(); woodmartThemeModule.filterDropdowns(); woodmartThemeModule.sortByWidget(); woodmartThemeModule.categoriesMenuBtns(); woodmartThemeModule.categoriesAccordion(); woodmartThemeModule.woocommercePriceSlider(); woodmartThemeModule.updateCartWidgetFromLocalStorage(); // refresh cart in sidebar woodmartThemeModule.countDownTimer(); woodmartThemeModule.nanoScroller(); woodmartThemeModule.shopLoader(); woodmartThemeModule.stickySidebarBtn(); woodmartThemeModule.productFilters(); woodmartThemeModule.clickOnScrollButton(woodmartTheme.shopLoadMoreBtn, false, woodmart_settings.infinit_scroll_offset); // Bootstrap tooltips reset $('body > .tooltip').remove(); $(document.body).on('updated_wc_div', function () { $(document).trigger('wood-images-loaded'); }); $(document).trigger('resize.vcRowBehaviour'); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Ajax filters *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.ajaxFilters = function () { if (!$('body').hasClass('woodmart-ajax-shop-on') || typeof ($.fn.pjax) == 'undefined') return; var that = this, filtersState = false, products = $('.products'); $('body').on('click', '.post-type-archive-product .products-footer .woocommerce-pagination a', function (e) { scrollToTop(true); }); $(document).pjax(woodmartTheme.ajaxLinks, '.main-page-wrapper', { timeout: woodmart_settings.pjax_timeout, scrollTo: false }); if (woodmart_settings.price_filter_action == 'click') { $(document).on('click', '.widget_price_filter form .button', function () { var form = $('.widget_price_filter form'); $.pjax({ container: '.main-page-wrapper', timeout: woodmart_settings.pjax_timeout, url: form.attr('action'), data: form.serialize(), scrollTo: false }); return false; }); } else if (woodmart_settings.price_filter_action == 'submit') { $(document).on('submit', '.widget_price_filter form', function (event) { var container = $('.main-page-wrapper'); $.pjax.submit(event, container); }); } $(document).on('pjax:error', function (xhr, textStatus, error, options) { console.log('pjax error ' + error); }); $(document).on('pjax:start', function (xhr, options) { $('.site-content').removeClass('ajax-loaded'); $('.site-content').addClass('ajax-loading'); woodmartThemeModule.hideShopSidebar(); }); $(document).on('pjax:complete', function (xhr, textStatus, options) { that.shopPageInit(); scrollToTop(false); $(document).trigger('wood-images-loaded'); $('.woodmart-sidebar-content').scroll(function () { $(document).trigger('wood-images-loaded'); }) $('.site-content').removeClass('ajax-loading'); }); $(document).on('pjax:beforeReplace', function (contents, options) { if ($('.filters-area').hasClass('filters-opened') && woodmart_settings.shop_filters_close == 'yes') { filtersState = true; $('body').addClass('body-filters-opened'); } }); $(document).on('pjax:end', function (xhr, textStatus, options) { if (filtersState) { $('.filters-area').css('display', 'block'); woodmartThemeModule.openFilters(200); filtersState = false; } $('.site-content').removeClass('ajax-loading'); $('.site-content').addClass('ajax-loaded'); }); var scrollToTop = function (type) { if (woodmart_settings.ajax_scroll == 'no' && type == false) return false; var $scrollTo = $(woodmart_settings.ajax_scroll_class), scrollTo = $scrollTo.offset().top - woodmart_settings.ajax_scroll_offset; $('html, body').stop().animate({ scrollTop: scrollTo }, 400); }; }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Side shopping cart widget *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.cartWidget = function () { var widget = $('.cart-widget-opener'), btn = widget.find('a'), body = $('body'); var cartWidgetSide = $('.cart-widget-side'); var closeSide = $('.woodmart-close-side'); widget.on('click', function (e) { if (!isCart() && !isCheckout()) e.preventDefault(); if (isOpened()) { closeWidget(); } else { setTimeout(function () { openWidget(); }, 10); } }); body.on("click touchstart", ".woodmart-close-side", function () { if (isOpened()) { closeWidget(); } }); body.on("click", ".close-side-widget", function (e) { e.preventDefault(); if (isOpened()) { closeWidget(); } }); $(document).keyup(function (e) { if (e.keyCode === 27 && isOpened()) closeWidget(); }); var closeWidget = function () { cartWidgetSide.removeClass('woodmart-cart-opened'); closeSide.removeClass('woodmart-close-side-opened'); }; var openWidget = function () { if (isCart() || isCheckout()) return false; cartWidgetSide.addClass('woodmart-cart-opened'); closeSide.addClass('woodmart-close-side-opened'); }; var isOpened = function () { return cartWidgetSide.hasClass('woodmart-cart-opened'); }; var isCart = function () { return $('body').hasClass('woocommerce-cart'); }; var isCheckout = function () { return $('body').hasClass('woocommerce-checkout'); }; }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Quantityt +/- *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.woocommerceQuantity = function () { if (!String.prototype.getDecimals) { String.prototype.getDecimals = function () { var num = this, match = ('' + num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/); if (!match) { return 0; } return Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0)); } } $(document).on('click', '.plus, .minus', function () { // Get values var $qty = $(this).closest('.quantity').find('.qty'), currentVal = parseFloat($qty.val()), max = parseFloat($qty.attr('max')), min = parseFloat($qty.attr('min')), step = $qty.attr('step'); // Format values if (!currentVal || currentVal === '' || currentVal === 'NaN') currentVal = 0; if (max === '' || max === 'NaN') max = ''; if (min === '' || min === 'NaN') min = 0; if (step === 'any' || step === '' || step === undefined || parseFloat(step) === 'NaN') step = '1'; // Change the value if ($(this).is('.plus')) { if (max && (currentVal >= max)) { $qty.val(max); } else { $qty.val((currentVal + parseFloat(step)).toFixed(step.getDecimals())); } } else { if (min && (currentVal <= min)) { $qty.val(min); } else if (currentVal > 0) { $qty.val((currentVal - parseFloat(step)).toFixed(step.getDecimals())); } } // Trigger change event $qty.trigger('change'); }); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * On remove from cart widget *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.onRemoveFromCart = function () { $(document).on('click', '.widget_shopping_cart .remove', function (e) { e.preventDefault(); $(this).parent().addClass('removing-process'); }); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Fix comments *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.woocommerceComments = function () { var hash = window.location.hash; var url = window.location.href; if (hash.toLowerCase().indexOf('comment-') >= 0 || hash === '#reviews' || hash === '#tab-reviews' || url.indexOf('comment-page-') > 0 || url.indexOf('cpage=') > 0) { setTimeout(function () { window.scrollTo(0, 0); }, 1); setTimeout(function () { $('html, body').stop().animate({ scrollTop: $(hash).offset().top - 100 }, 400); }, 10); } }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Mobile responsive navigation *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.woocommerceWrappTable = function () { var wooTable = $(".shop_table:not(.shop_table_responsive):not(.woocommerce-checkout-review-order-table)").wrap("
    "); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Product loder position *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.productLoaderPosition = function () { var recalc = function () { $('.woodmart-products-loader').each(function () { var $loader = $(this), $loaderWrap = $loader.parent(); if ($loader.length == 0) return; $loader.css('left', $loaderWrap.offset().left + $loaderWrap.outerWidth() / 2); }); }; $(window).on('resize', recalc); recalc(); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Init Zoom *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.initZoom = function () { if (woodmart_settings.zoom_enable != 'yes') return false; var $zoomTarget = $('.woocommerce-product-gallery__image'), zoomEnabled = false; $($zoomTarget).each(function () { var image = $(this).find('img'); if (image.data('large_image_width') > $('.product-image-wrap').width()) { zoomEnabled = true; return false; } }); // But only zoom if the img is larger than its container. if (zoomEnabled) { var zoomOptions = { touch: false }; if ('ontouchstart' in window) { zoomOptions.on = 'click'; } $zoomTarget.trigger('zoom.destroy'); $zoomTarget.zoom(zoomOptions); } }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Product Hover *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.productHover = function () { $('.woodmart-hover-base').each(function () { var $product = $(this); $product.imagesLoaded(function () { // Read more details button var btnHTML = '' + 'more' + '', content = $product.find('.hover-content'), inner = content.find('.hover-content-inner'), contentHeight = content.outerHeight(), innerHeight = inner.outerHeight(), delta = innerHeight - contentHeight; if (content.hasClass('more-description')) return; if (delta > 30) { content.addClass('more-description'); content.append(btnHTML); } else if (delta > 0) { content.css('height', contentHeight + delta); } // Bottom block height recalc($product); }); }); $('body').on('click', '.more-details-btn', function (e) { e.preventDefault(); $(this).parent().addClass('show-full-description'); recalc($(this).parents('.woodmart-hover-base')); }); if ($(window).width() <= 1024) { $('.woodmart-hover-base').on('click', function (e) { var hoverClass = 'state-hover'; if (!$(this).hasClass(hoverClass) && woodmart_settings.base_hover_mobile_click == 'no') { e.preventDefault(); $('.' + hoverClass).removeClass(hoverClass); $(this).addClass(hoverClass); } }); $(document).on('click touchstart', function (e) { if ($(e.target).closest('.state-hover').length == 0) { $('.state-hover').removeClass('state-hover'); } }); } var recalc = function ($el) { if ($el.hasClass('product-in-carousel')) { return; } var heightHideInfo = $el.find('.fade-in-block').outerHeight(); $el.find('.content-product-imagin').css({ marginBottom: -heightHideInfo }); $el.addClass('hover-ready'); }; $('.product-grid-item').each(function () { var $el = $(this), widthHiddenInfo = $el.outerWidth(); if ($(window).width() <= 1024 && $el.hasClass('woodmart-hover-icons') || !woodmart_settings.hover_width_small) return; if (widthHiddenInfo < 255 || $(window).width() <= 1024) { $el.removeClass('hover-width-big').addClass('hover-width-small'); } else { $el.removeClass('hover-width-small').addClass('hover-width-big'); } }) }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Enable masonry grid for shop isotope type *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.shopMasonry = function () { if (typeof ($.fn.isotope) == 'undefined' || typeof ($.fn.imagesLoaded) == 'undefined') return; var $container = $('.elements-grid.grid-masonry'); // initialize Masonry after all images have loaded $container.imagesLoaded(function () { $container.isotope({ isOriginLeft: !$('body').hasClass('rtl'), itemSelector: '.category-grid-item, .product-grid-item', }); }); // Categories masonry $(window).resize(function () { var $catsContainer = $('.categories-masonry'); var colWidth = ($catsContainer.hasClass('categories-style-masonry')) ? '.category-grid-item' : '.col-lg-3.category-grid-item'; $catsContainer.imagesLoaded(function () { $catsContainer.packery({ resizable: false, isOriginLeft: !$('body').hasClass('rtl'), // layoutMode: 'packery', packery: { gutter: 0, columnWidth: colWidth }, itemSelector: '.category-grid-item', // masonry: { // gutter: 0 // } }); }); }); }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * Categories toggle accordion *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.categoriesAccordion = function () { if (woodmart_settings.categories_toggle == 'no') return; var $widget = $('.widget_product_categories'), $list = $widget.find('.product-categories'), time = 300; $list.find('.cat-parent').each(function () { if ($(this).find(' > .woodmart-cats-toggle').length > 0) return; if ($(this).find(' > .children').length == 0) return; $(this).append('
    '); }); $list.on('click', '.woodmart-cats-toggle', function () { var $btn = $(this), $subList = $btn.prev(); if ($subList.hasClass('list-shown')) { $btn.removeClass('toggle-active'); $subList.stop().slideUp(time).removeClass('list-shown'); } else { $subList.parent().parent().find('> li > .list-shown').slideUp().removeClass('list-shown'); $subList.parent().parent().find('> li > .toggle-active').removeClass('toggle-active'); $btn.addClass('toggle-active'); $subList.stop().slideDown(time).addClass('list-shown'); } }); if ($list.find('li.current-cat.cat-parent, li.current-cat-parent').length > 0) { $list.find('li.current-cat.cat-parent, li.current-cat-parent').find('> .woodmart-cats-toggle').click(); } }; /** *------------------------------------------------------------------------------------------------------------------------------------------- * WooCommerce price filter slider with ajax *------------------------------------------------------------------------------------------------------------------------------------------- */ woodmartThemeModule.woocommercePriceSlider = function () { // woocommerce_price_slider_params is required to continue, ensure the object exists if (typeof woocommerce_price_slider_params === 'undefined' || $('.price_slider_amount #min_price').length < 1 || !$.fn.slider) { return false; } var $slider = $('.price_slider'); if ($slider.slider('instance') !== undefined) return; // Get markup ready for slider $('input#min_price, input#max_price').hide(); $('.price_slider, .price_label').show(); // Price slider uses $ ui var min_price = $('.price_slider_amount #min_price').data('min'), max_price = $('.price_slider_amount #max_price').data('max'), current_min_price = parseInt(min_price, 10), current_max_price = parseInt(max_price, 10); if ($('.products').attr('data-min_price') && $('.products').attr('data-min_price').length > 0) { current_min_price = parseInt($('.products').attr('data-min_price'), 10); } if ($('.products').attr('data-max_price') && $('.products').attr('data-max_price').length > 0) { current_max_price = parseInt($('.products').attr('data-max_price'), 10); } $slider.slider({ range: true, animate: true, min: min_price, max: max_price, values: [current_min_price, current_max_price], create: function () { $('.price_slider_amount #min_price').val(current_min_price); $('.price_slider_amount #max_price').val(current_max_price); $(document.body).trigger('price_slider_create', [current_min_price, current_max_price]); }, slide: function (event, ui) { $('input#min_price').val(ui.values[0]); $('input#max_price').val(ui.values[1]); $(document.body).trigger('price_slider_slide', [ui.values[0], ui.values[1]]); }, change: function (event, ui) { $(document.body).trigger('price_slider_change', [ui.values[0], ui.values[1]]); } }); setTimeout(function () { $(document.body).trigger('price_slider_create', [current_min_price, current_max_price]); if ($slider.find('.ui-slider-range').length > 1) $slider.find('.ui-slider-range').first().remove(); }, 10); }; })(jQuery); jQuery(document).ready(function () { woodmartThemeModule.init(); });