(function($) {
"use strict";
/*===========================================
Table of contents
01. On Load Function
02. Preloader
03. Mobile Menu Active
04. Sticky fix
05. Scroll To Top
06. Set Background Image
07. Popup Sidemenu
08. Search Box Popup
09. Hero Slider Active
10. Magnific Popup
11. Filter Menu
12. Tab Indicator
13. Form Steps
14. Quantity Adder
15. Woocommerce Toggle
16. Shop Big Image Src Set
=============================================*/
/*---------- 01. On Load Function ----------*/
$(window).on('load', function () {
$('.preloader').fadeOut();
slickFixer();
});
function slickFixer() {
setTimeout(function () {
$('.slick-slider').each(function () {
$(this).slick('refresh');
});
}, 400);
}
$(window).on('resize', function (){
slickFixer()
});
/*---------- 02. Preloader ----------*/
if ($('.preloader').length > 0) {
$('.preloaderCls').each(function() {
$(this).on('click', function(e) {
e.preventDefault();
$('.preloader').css('display', 'none');
})
});
};
/*---------- 03. Mobile Menu Active ----------*/
$.fn.vsmobilemenu = function(options) {
var opt = $.extend({
menuToggleBtn: '.vs-menu-toggle',
bodyToggleClass: 'vs-body-visible',
subMenuClass: 'vs-submenu',
subMenuParent: 'vs-item-has-children',
subMenuParentToggle: 'vs-active',
meanExpandClass: 'vs-mean-expand',
subMenuToggleClass: 'vs-open',
toggleSpeed: 400,
}, options);
return this.each(function() {
var menu = $(this); // Select menu
// Menu Show & Hide
function menuToggle() {
menu.toggleClass(opt.bodyToggleClass);
// collapse submenu on menu hide or show
var subMenu = '.' + opt.subMenuClass;
$(subMenu).each(function() {
if ($(this).hasClass(opt.subMenuToggleClass)) {
$(this).removeClass(opt.subMenuToggleClass);
$(this).css('display', 'none')
$(this).parent().removeClass(opt.subMenuParentToggle);
};
});
};
// Class Set Up for every submenu
menu.find('li').each(function() {
var submenu = $(this).find('ul');
submenu.addClass(opt.subMenuClass);
submenu.css('display', 'none');
submenu.parent().addClass(opt.subMenuParent);
submenu.prev('a').addClass(opt.meanExpandClass);
submenu.next('a').addClass(opt.meanExpandClass);
});
// Toggle Submenu
function toggleDropDown($element) {
if ($($element).next('ul').length > 0) {
$($element).parent().toggleClass(opt.subMenuParentToggle);
$($element).next('ul').slideToggle(opt.toggleSpeed);
$($element).next('ul').toggleClass(opt.subMenuToggleClass);
} else if ($($element).prev('ul').length > 0) {
$($element).parent().toggleClass(opt.subMenuParentToggle);
$($element).prev('ul').slideToggle(opt.toggleSpeed);
$($element).prev('ul').toggleClass(opt.subMenuToggleClass);
};
};
// Submenu toggle Button
var expandToggler = '.' + opt.meanExpandClass;
$(expandToggler).each(function() {
$(this).on('click', function(e) {
e.preventDefault();
toggleDropDown(this);
});
});
// Menu Show & Hide On Toggle Btn click
$(opt.menuToggleBtn).each(function() {
$(this).on('click', function() {
menuToggle();
})
})
// Hide Menu On out side click
menu.on('click', function(e) {
e.stopPropagation();
menuToggle()
})
// Stop Hide full menu on menu click
menu.find('div').on('click', function(e) {
e.stopPropagation();
});
});
};
$('.vs-menu-wrapper').vsmobilemenu();
/*---------- 04. Sticky fix ----------*/
var lastScrollTop = '';
var scrollToTopBtn = '.scrollToTop'
function stickyMenu($targetMenu, $toggleClass, $parentClass) {
var st = $(window).scrollTop();
if ($(window).scrollTop() > 600) {
var height = $targetMenu.css('height');
$targetMenu.parent().css('min-height', height).addClass($parentClass);
if (st > lastScrollTop) {
$targetMenu.removeClass($toggleClass);
} else {
$targetMenu.addClass($toggleClass);
};
} else {
$targetMenu.parent().css('min-height', '').removeClass($parentClass);
$targetMenu.removeClass($toggleClass);
};
lastScrollTop = st;
};
$(window).on("scroll", function() {
stickyMenu($('.sticky-active'), "active", "will-sticky");
if ($(this).scrollTop() > 500) {
$(scrollToTopBtn).addClass('show');
} else {
$(scrollToTopBtn).removeClass('show');
}
});
/*---------- 05. Scroll To Top ----------*/
$(scrollToTopBtn).each(function() {
$(this).on('click', function(e) {
e.preventDefault();
$('html, body').animate({
scrollTop: 0
}, lastScrollTop / 3);
return false;
});
})
/*---------- 06.Set Background Image ----------*/
if ($('[data-bg-src]').length > 0) {
$('[data-bg-src]').each(function() {
var src = $(this).attr('data-bg-src');
$(this).css({
'background-image': 'url(' + src + ')'
});
});
};
if ($('[data-bg-color]').length > 0) {
$('[data-bg-color]').each(function() {
var color = $(this).attr('data-bg-color');
$(this).css({
'background-color': color
});
});
};
/*---------- 07. Popup Sidemenu ----------*/
function popupSideMenu($sideMenu, $sideMunuOpen, $sideMenuCls, $toggleCls) {
// Sidebar Popup
$($sideMunuOpen).on('click', function(e) {
e.preventDefault();
$($sideMenu).addClass($toggleCls);
});
$($sideMenu).on('click', function(e) {
e.stopPropagation();
$($sideMenu).removeClass($toggleCls)
});
var sideMenuChild = $sideMenu + ' > div';
$(sideMenuChild).on('click', function(e) {
e.stopPropagation();
$($sideMenu).addClass($toggleCls)
});
$($sideMenuCls).on('click', function(e) {
e.preventDefault();
e.stopPropagation();
$($sideMenu).removeClass($toggleCls);
});
};
popupSideMenu('.sidemenu-wrapper', '.sideMenuToggler', '.sideMenuCls', 'show');
/*---------- 08. Search Box Popup ----------*/
function popupSarchBox($searchBox, $searchOpen, $searchCls, $toggleCls) {
$($searchOpen).on('click', function(e) {
e.preventDefault();
$($searchBox).addClass($toggleCls);
});
$($searchBox).on('click', function(e) {
e.stopPropagation();
$($searchBox).removeClass($toggleCls);
});
$($searchBox).find('form').on('click', function(e) {
e.stopPropagation();
$($searchBox).addClass($toggleCls);
});
$($searchCls).on('click', function(e) {
e.preventDefault();
e.stopPropagation();
$($searchBox).removeClass($toggleCls);
});
};
popupSarchBox('.popup-search-box', '.searchBoxTggler', '.searchClose', 'show');
/*----------- 10. Magnific Popup ----------*/
/* magnificPopup img view */
$('.popup-image').magnificPopup({
type: 'image',
gallery: {
enabled: true
}
});
/* magnificPopup video view */
$('.popup-video').magnificPopup({
type: 'iframe'
});
/*----------- 11. Filter Menu ----------*/
$('.filter-active').imagesLoaded(function() {
var $filter = '.filter-active',
$filterItem = '.filter-item',
$filterMenu = '.filter-menu-active';
if ($($filter).length > 0) {
var $grid = $($filter).isotope({
itemSelector: $filterItem,
filter: '*',
masonry: {
// use outer width of grid-sizer for columnWidth
columnWidth: $filterItem
}
});
// filter items on button click
$($filterMenu).on('click', 'button', function() {
var filterValue = $(this).attr('data-filter');
$grid.isotope({
filter: filterValue
});
});
// Menu Active Class
$($filterMenu).on('click', 'button', function(event) {
event.preventDefault();
$(this).addClass('active');
$(this).siblings('.active').removeClass('active');
});
};
});
/*----------- 12. Tab Indicator ----------*/
$.fn.indicator = function() {
var $menu = $(this),
$linkBtn = $menu.find('a'),
$btn = $menu.find('button');
// Append indicator
$menu.append('');
var $line = $menu.find('.indicator');
// Check which type button is Available
if ($linkBtn.length) {
var $currentBtn = $linkBtn;
} else if ($btn.length) {
var $currentBtn = $btn
}
// On Click Button Class Remove
$currentBtn.on('click', function(e) {
e.preventDefault();
$(this).addClass('active');
$(this).siblings('.active').removeClass('active');
linePos()
})
// Indicator Position
function linePos() {
var $btnActive = $menu.find('.active'),
$height = $btnActive.css('height'),
$width = $btnActive.css('width'),
$top = $btnActive.position().top + 'px',
$left = $btnActive.position().left + 'px';
$line.css({
top: $top,
left: $left,
width: $width,
height: $height,
})
}
linePos()
}
// Call On Load
if ($('.filter-menu').length) {
$('.filter-menu').indicator();
}
if ($('.product-tab').length) {
$('.product-tab').indicator();
}
/*----------- 15. Woocommerce Toggle ----------*/
// Woocommerce Rating Toggle
$('.rating-select .stars a').each(function() {
$(this).on('click', function(e) {
e.preventDefault();
$(this).siblings().removeClass('active');
$(this).parent().parent().addClass('selected');
$(this).addClass('active');
});
})
/*----------- 16. Shop Big Image Src Set ----------*/
if ($('.product-thumb').length) {
$('.product-thumb').each(function() {
$(this).on('click', function() {
var src = $(this).find('img').data('big-img');
$('.img-fullsize img').attr('src', src);
$('.img-fullsize .popup-image').attr('href', src);
})
})
}
$('.product-big-img.vs-carousel').slick({
dots: true,
infinite: true,
arrows: false,
prevArrow: '',
nextArrow: '',
autoplay: true,
autoplaySpeed: 6000,
fade: false,
speed: 1000,
slidesToShow: 1,
slidesToScroll: 1,
});
$('.blog-img-slider').slick({
dots: false,
infinite: true,
arrows: true,
prevArrow: '',
nextArrow: '',
autoplay: true,
autoplaySpeed: 6000,
fade: false,
speed: 1000,
slidesToShow: 1,
slidesToScroll: 1,
});
$(document).on('click', '.quantity-plus,.quantity-minus', function(e) {
e.preventDefault();
// Get current quantity values
var qty = $(this).closest('.product-quantity').find('.qty');
var val = parseFloat(qty.val());
var max = parseFloat(qty.attr('max'));
var min = parseFloat(qty.attr('min'));
var step = parseFloat(qty.attr('step'));
// Change the value if plus or minus
if ($(this).is('.quantity-plus')) {
if (max && (max <= val)) {
qty.val(max);
} else {
qty.val(val + step);
}
} else {
if (min && (min >= val)) {
qty.val(min);
} else if (val > 0) {
qty.val(val - step);
}
}
$('.cart_table button[name="update_cart"]').prop('disabled', false);
});
/*----------- 10. Filter Menu ----------*/
$('.search-active').imagesLoaded(function() {
var $filter = '.search-active',
$filterItem = '.grid-item';
if ($($filter).length > 0) {
var $grid = $($filter).isotope({
itemSelector: $filterItem,
filter: '*',
masonry: {
// use outer width of grid-sizer for columnWidth
columnWidth: $filterItem
}
});
};
});
function setPos (element) {
var indicator = element.siblings('.indicator'),
btnWidth = element.css('width'),
btnHiehgt = element.css('height'),
btnLeft = element.position().left,
btnTop = element.position().top;
element.addClass('active').siblings().removeClass('active');
indicator.css({
left: btnLeft + 'px',
top: btnTop + 'px',
width: btnWidth,
height: btnHiehgt,
})
};
$('.login-tab a').each(function(){
var link = $(this);
if (link.hasClass('active')) setPos(link);
link.on('mouseover', function(){
setPos($(this));
});
})
function popupSarchBox($searchBox, $searchOpen, $searchCls, $toggleCls) {
$($searchOpen).on('click', function(e) {
e.preventDefault();
$($searchBox).addClass($toggleCls);
});
$($searchBox).on('click', function(e) {
e.stopPropagation();
$($searchBox).removeClass($toggleCls);
});
$($searchBox).find('form').on('click', function(e) {
e.stopPropagation();
$($searchBox).addClass($toggleCls);
});
$($searchCls).on('click', function(e) {
e.preventDefault();
e.stopPropagation();
$($searchBox).removeClass($toggleCls);
});
};
popupSarchBox('.popup-search-box', '.searchBoxTggler', '.searchClose', 'show');
$('.product-img-slide').slick({
dots: true,
infinite: true,
arrows: false,
autoplay: true,
autoplaySpeed: 6000,
fade: true,
speed: 1000,
slidesToShow: 1,
slidesToScroll: 1,
});
$('.related-product-slider').slick({
dots: false,
infinite: true,
arrows: false,
autoplay: true,
autoplaySpeed: 6000,
fade: false,
speed: 1000,
slidesToShow: 3,
slidesToScroll: 1,
responsive: [{
breakpoint: 992,
settings: {
slidesToShow: 2
}
},{
breakpoint: 767,
settings: {
slidesToShow: 1
}
}]
});
const tabs = document.querySelectorAll('[data-tab-target]')
const tabContents = document.querySelectorAll('[data-tab-content]')
tabs.forEach(tab => {
tab.addEventListener('click', () => {
const target = document.querySelector(tab.dataset.tabTarget)
tabContents.forEach(tabContent => {
tabContent.classList.remove('active')
})
tabs.forEach(tab => {
tab.classList.remove('active')
})
tab.classList.add('active')
target.classList.add('active')
})
})
$('.logo-img').each(function () {
var $img = jQuery(this);
var imgID = $img.attr('id');
var imgClass = $img.attr('class');
var imgURL = $img.attr('src');
jQuery.get(imgURL, function (data) {
// Get the SVG tag, ignore the rest
var $svg = jQuery(data).find('svg');
// Add replaced image's ID to the new SVG
if (typeof imgID !== 'undefined') {
$svg = $svg.attr('id', imgID);
}
// Add replaced image's classes to the new SVG
if (typeof imgClass !== 'undefined') {
$svg = $svg.attr('class', imgClass + ' replaced-svg');
}
// Remove any invalid XML tags as per http://validator.w3.org
$svg = $svg.removeAttr('xmlns:a');
// Check if the viewport is set, else we gonna set it if we can.
if (!$svg.attr('viewBox') && $svg.attr('height') && $svg.attr('width')) {
$svg.attr('viewBox', '0 0 ' + $svg.attr('height') + ' ' + $svg.attr('width'));
}
// Replace image with new SVG
$img.replaceWith($svg);
}, 'xml');
});
})(jQuery);