/* ================================================ ---------------------- Main.js ----------------- */ (function ($) { 'use strict'; var Porto = { initialised: false, mobile: false, init: function () { if (!this.initialised) { this.initialised = true; } else { return; } // Call Porto Functions this.checkMobile(); this.stickyHeader(); this.headerSearchToggle(); this.mMenuIcons(); this.mMenuToggle(); this.mobileMenu(); this.scrollToTop(); this.quantityInputs(); this.countTo(); this.tooltip(); this.popover(); this.changePassToggle(); this.changeBillToggle(); this.catAccordion(); this.ajaxLoadProduct(); this.toggleFilter(); this.toggleSidebar(); this.productTabSroll(); this.scrollToElement(); this.loginPopup(); this.modalView(); this.productManage(); this.ratingTooltip(); this.windowClick(); this.popupMenu(); this.topNotice(); this.ratingForm(); this.parallax(); this.sideMenu(); /* Menu via superfish plugin */ if ($.fn.superfish) { this.menuInit(); } /* Call function if Owl Carousel plugin is included */ if ($.fn.owlCarousel) { this.owlCarousels(); } /* Call function if noUiSlider plugin is included - for category pages */ if (typeof noUiSlider === 'object') { this.filterSlider(); } /* Call if not mobile and plugin is included */ if ($.fn.themeSticky) { this.stickySidebar(); } /* Call function if Light Gallery plugin is included */ if ($.fn.magnificPopup) { this.lightBox(); } /* Word rotate if Morphext plugin is included */ if ($.fn.Morphext) { this.wordRotate(); } /* Images grid if isotope plugin is included */ if ($.fn.isotope) { this.isotopes(); } /* Zoom image if elevateZoom plugin is included */ if ($.fn.elevateZoom) { this.zoomImage(); } }, checkMobile: function () { /* Mobile Detect*/ if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) { this.mobile = true; } else { this.mobile = false; } }, menuInit: function () { // General Menu $('.menu:not(.menu-vertical)').superfish({ popUpSelector: 'ul, .megamenu', hoverClass: 'show', delay: 0, speed: 80, speedOut: 80, autoArrows: true }); // Vertical Menu $('.menu.menu-vertical').superfish({ popUpSelector: 'ul, .megamenu', hoverClass: 'show', delay: 0, speed: 200, speedOut: 200, autoArrows: true, animation: { left: "100%", opacity: "show" }, animationOut: { left: "90%", opacity: "hide" } }); // Calculate fixed-width megamenu's position. var calculateMegaMenuPosition = function() { $('.menu:not(.menu-vertical) .megamenu-fixed-width').each(function() { var $menu = $(this), $left = $menu.parent().offset().left - 15, $width = $menu.outerWidth(), $right_max = $(window).width() - 45, $right_space = $right_max - $left - $width; if ( $right_space < 0 ) { $menu.css( 'left', $right_space + 'px'); } else { $menu.css( 'left', '-15px'); } }); } calculateMegaMenuPosition(); // Recalculate menu position on resize event. $.fn.smartresize ? $(window).smartresize( calculateMegaMenuPosition ) : $(window).on('resize', calculateMegaMenuPosition); }, stickyHeader: function () { var isInitialised = false; var objectsArray = null; var optionsArray = null; // Fix Sticky Header var fixStickyHeader = function( $stickyHeader, options, stickyOffset ) { // If already fixed, return. if ( $stickyHeader.hasClass( 'fixed' ) ) { return; } // Set wrapper's min-height - sticky header's placeholder. $stickyHeader.parent().css('min-height', options.height); // Show moved objects on sticky options.move && options.move.forEach( function(moveOption) { // Show clones if (moveOption.clone) { $stickyHeader.find( moveOption.item ).show(); // Wrap with placeholders to replace, and move } else { var moveTo = $stickyHeader.find( options.moveTo ), moveIndex = 0; $(moveOption.item).each(function() { var moveItem = $(this); // Wrap with placeholders moveItem.wrap('
' ); // Move 'end' == moveOption.position ? moveItem.appendTo(moveTo) : moveItem.prependTo(moveTo); }); } }); // Change options.changes && options.changes.forEach( function(change) { change.removeClass && $stickyHeader.find( change.item ).removeClass( change.removeClass ); change.addClass && $stickyHeader.find( change.item ).addClass( change.addClass ); }); // Fix sticky header $stickyHeader .addClass('fixed') .css('top', -options.height) .animate({ top: stickyOffset }); }; // Unfix Sticky Header var unfixStickyHeader = function( $stickyHeader, options ) { // If already unfixed, return. if ( ! $stickyHeader.hasClass( 'fixed' ) ) { return; } // Unfix sticky header $stickyHeader.removeClass('fixed'); $stickyHeader.css('top', ''); // Change options.changes && options.changes.forEach( function(change) { change.removeClass && $stickyHeader.find( change.item ).addClass( change.removeClass ); change.addClass && $stickyHeader.find( change.item ).removeClass( change.addClass ); }); // Hide or replace moved objects on unsticky options.move && options.move.forEach( function(moveOption) { // Hide clones if ( moveOption.clone ) { $stickyHeader.find( moveOption.item ).hide(); // Replace placeholders with originals } else { var moveIndex = 0; $stickyHeader .find( moveOption.item ) .each( function() { $('.sticky-placeholder[data-sticky-placeholder="' + ( moveOption.indexStart + ( ++ moveIndex ) ) + '"]').replaceWith( $(this) ); }); } }); // Unset wrapper's min-height - sticky header's placeholder. $stickyHeader.parent().css('min-height', ''); }; // Setup sticky header on only desktop. var setupStickyHeader = function () { var moveCount = 0; // Count of items to move optionsArray = []; // Init Sticky Header objectsArray = $('.sticky-header').each(function() { var $this = $(this), userOptions = $this.data('sticky-options'), options = {}; if ( userOptions ) { options = JSON.parse(userOptions.replace(/'/g,'"').replace(';','')); } // Number objects to move. options.move && options.move.forEach( function( moveOption ) { if ( ! moveOption.clone ) { moveOption.indexStart = moveCount; moveCount += $( moveOption.item ).length; } }); // Get original properties. options.height = $this.outerHeight(); options.offset = $this.offset().top; options.paddingTop = parseInt( $this.css('padding-top') ); optionsArray.push( options ); // Wrap sticky header. $this.wrap('
'); }); isInitialised = true; }; // Build and rebuild sticky header. var buildStickyHeader = function() { // if mobile & tablet if ( 992 > $(window).width() ) { // if sticky header is initialised, fix it. if ( isInitialised ) { objectsArray.each( function( index ) { unfixStickyHeader( $(this), optionsArray[index] ); }); } // if desktop } else { // Initialize sticky header isInitialised || setupStickyHeader(); // Calculate sticky header's top position var scrollTop = $(window).scrollTop(); var stickyOffset = 0; objectsArray.each( function( index ){ var $this = $(this), options = optionsArray[index]; // On Sticky, fix if ( scrollTop + stickyOffset >= options.offset + options.paddingTop ) { $this.hasClass('fixed') || fixStickyHeader( $this, options, stickyOffset ); stickyOffset += $this.outerHeight(); // On Unsticky, unfix } else if ( $this.hasClass('fixed') || ! isInitialised ) { unfixStickyHeader( $this, options ); } }); } } // init setTimeout( buildStickyHeader, 500 ); $(window).smartresize( buildStickyHeader ); $(window).on( 'scroll', buildStickyHeader ); }, headerSearchToggle: function () { $('.header-search').length && $('body') // Stop Propagation .on('click', '.header-search', function (e) { e.stopPropagation(); }) // Search Toggle .on('click', '.search-toggle', function (e) { var $headerSearch = $(this).closest('.header-search'); $headerSearch.toggleClass('show'); $('.header-search-wrapper').toggleClass('show'); // Will be deprecated. $headerSearch.hasClass('show') && $headerSearch.find('input.form-control').focus(); e.preventDefault(); }) // Search Deactive .on('click', function (e) { $('.header-search').removeClass('show'); $('.header-search-wrapper').removeClass('show'); // Will be deprecated. $('body').removeClass('is-search-active'); }); var calcHeaderSearchPosition = function() { $('.header-search').each(function() { var $this = $(this); $this.find('.header-search-wrapper').css( $(window).width() < 576 ? { left: 15 - $this.offset().left + 'px', right: 15 + $this.offset().left + $this.width() - $(window).width() + 'px' } : { left: '', right: '' } ); }); }; calcHeaderSearchPosition(); $.fn.smartresize ? $(window).smartresize( calcHeaderSearchPosition ) : $(window).on( 'resize', calcHeaderSearchPosition ); }, mMenuToggle: function () { // Mobile Menu Show/Hide $('.mobile-menu-toggler').on('click', function (e) { $('body').toggleClass('mmenu-active'); $(this).toggleClass('active'); e.preventDefault(); }); // Menu Show/Hide // Used in Demo 12 $('.menu-toggler').on('click', function (e) { if ($(window).width() >= 992) { $('.main-dropdown-menu').toggleClass('show'); } else { $('body').toggleClass('mmenu-active'); } e.preventDefault(); }); // Hide Menu $('.mobile-menu-overlay, .mobile-menu-close').on('click', function (e) { $('body').removeClass('mmenu-active'); $('.menu-toggler').removeClass('active'); e.preventDefault(); }); }, mMenuIcons: function () { // Add Mobile menu icon arrows or plus/minus to items with children $('.mobile-menu').find('li').each(function () { var $this = $(this); if ($this.find('ul').length) { $('', { 'class': 'mmenu-btn' }).appendTo($this.children('a')); } }); }, mobileMenu: function () { // Mobile Menu Toggle $('.mmenu-btn').on('click', function (e) { var $parent = $(this).closest('li'), $targetUl = $parent.find('ul').eq(0); if (!$parent.hasClass('open')) { $targetUl.slideDown(300, function () { $parent.addClass('open'); }); } else { $targetUl.slideUp(300, function () { $parent.removeClass('open'); }); } e.stopPropagation(); e.preventDefault(); }); }, owlCarousels: function () { var sliderDefaultOptions = { loop: true, margin: 0, responsiveClass: true, nav: false, navText: ['', ''], dots: true, autoplay: true, autoplayTimeout: 15000, items: 1, }; var sliderInit = function($slider, sliderCustomOptions) { var newSliderOptions; if (sliderCustomOptions) { newSliderOptions = $.extend(true, {}, sliderDefaultOptions, sliderCustomOptions); } else { newSliderOptions = sliderDefaultOptions; } $slider.hasClass('nav-thin') && ( newSliderOptions.navText = ['', ''] ); var userOptions = $slider.data('owl-options'); if (typeof userOptions == 'string') { userOptions = JSON.parse(userOptions.replace(/'/g,'"').replace(';','')); newSliderOptions = $.extend(true, {}, newSliderOptions, userOptions); } $slider.owlCarousel(newSliderOptions); } var sliderCustomOptionsArray = { '.home-slider': { lazyLoad: true, autoplay: false, dots: false, nav: true, autoplayTimeout: 12000, animateOut: 'fadeOut', navText: ['', ''], loop: true }, '.testimonials-carousel': { lazyLoad: true, autoHeight: true, responsive: { 992: { items: 2 } } }, '.featured-products': { loop: false, margin: 30, autoplay: false, responsive: { 0: { items: 2 }, 700: { items: 3, margin: 15 }, 1200: { items: 4 } } }, '.cats-slider': { loop: false, margin: 20, autoplay: false, nav: true, dots: false, items: 2, responsive: { 576: { items: 3 }, 992: { items: 4, }, 1200: { items: 5, }, 1400: { items: 6 } } }, '.products-slider': { loop: false, margin: 20, autoplay: false, dots: true, items: 2, responsive: { 576: { items: 3 }, 992: { items: 4, } } }, '.categories-slider': { loop: false, margin: 20, autoplay: false, nav: true, dots: false, items: 2, responsive: { 576: { items: 3 }, 992: { items: 5, } } }, '.quantity-inputs': { items: 2, margin: 20, dots: false, nav: true, responsive: { 992: { items: 4 }, 768: { items: 3 } }, onInitialized: function () { this.$element.find('.horizontal-quantity').val(1); } }, '.banners-slider': { dots: true, loop: false, margin: 20, responsive: { 576: { items: 2 }, 992: { items: 3 } } }, '.brands-slider': { loop: false, margin: 20, autoHeight: true, autoplay: false, dots: false, items: 2, responsive: { 576: { items: 4 }, 768: { items: 6 } } }, '.widget-featured-products': { lazyLoad: true, nav: true, navText: ['', ''], dots: false, autoHeight: true }, '.entry-slider': { margin: 2, lazyLoad: true, }, // Single.html - Related posts '.related-posts-carousel': { loop: false, margin: 30, autoplay: false, responsive: { 480: { items: 2 }, 1200: { items: 3 } } }, '.boxed-slider': { lazyLoad: true, autoplayTimeout: 20000, animateOut: 'fadeOut', dots: false }, // About Slider '.about-slider': { margin: 2, lazyLoad: true, }, // Product single carousel - Default layout '.product-single-default .product-single-carousel': { nav: true, dotsContainer: '#carousel-custom-dots', autoplay: false, onInitialized: function () { var $source = this.$element; if ($.fn.elevateZoom) { $source.find('img').each(function () { var $this = $(this), zoomConfig = { responsive: true, zoomWindowFadeIn: 350, zoomWindowFadeOut: 200, borderSize: 0, zoomContainer: $this.parent(), zoomType: 'inner', cursor: 'grab' }; $this.elevateZoom(zoomConfig); }); } }, }, // Product single carousel - Extended layout '.product-single-extended .product-single-carousel': { dots: false, autoplay: false, center: true, items: 1, responsive: { 768: { items: 3 } } } }; // Init custom carousels var selectors = Object.keys(sliderCustomOptionsArray); selectors.forEach(function(selector) { $(selector).each(function() { sliderInit($(this), sliderCustomOptionsArray[selector]); }); }); // Init all carousels except custom carousels. $('.owl-carousel').each(function() { if ( ! $(this).data('owl.carousel') ) sliderInit($(this), sliderInit); }); // Add loaded class on lazy load $('.home-slider').on('loaded.owl.lazy', function (event) { $(event.element).closest('.home-slide').addClass('loaded'); $(event.element).closest('.home-slider').addClass('loaded'); // For Demo 12 }); $('.boxed-slider').on('loaded.owl.lazy', function (event) { $(event.element).closest('.category-slide').addClass('loaded'); }); $('.about-slider').on('loaded.owl.lazy', function (event) { $(event.element).closest('div').addClass('loaded'); }); // Product Page Dot Thumbnails Carousel $('#carousel-custom-dots .owl-dot').click(function () { $('.product-single-carousel').trigger('to.owl.carousel', [$(this).index(), 300]); }); }, filterSlider: function () { // Slider For category pages / filter price var priceSlider = document.getElementById('price-slider'), currencyVar = '$'; // Check if #price-slider elem is exists if not return // to prevent error logs if (priceSlider == null) return; noUiSlider.create(priceSlider, { start: [200, 700], connect: true, step: 100, margin: 100, range: { 'min': 0, 'max': 1000 } }); // Update Price Range priceSlider.noUiSlider.on('update', function (values, handle) { var values = values.map(function (value) { return currencyVar + value; }) $('#filter-price-range').text(values.join(' - ')); }); }, stickySidebar: function () { var paddingOffsetTop = 10; $('.header .sticky-header').each(function(){ paddingOffsetTop += $(this).height(); }); $(".sidebar-wrapper, .sticky-slider").themeSticky({ autoInit: true, minWidth: 991, containerSelector: '.row, .container', paddingOffsetBottom: 10, paddingOffsetTop: paddingOffsetTop }); }, countTo: function () { // CountTo plugin used count animations for homepages if ($.fn.countTo) { if ($.fn.waypoint) { $('.count').waypoint(function () { $(this.element).countTo(); }, { offset: '90%', triggerOnce: true }); } else { $('.count').countTo(); } } else { // fallback if count plugin doesn't included // Get the data-to value and add it to element $('.count').each(function () { var $this = $(this), countValue = $this.data('to'); $this.text(countValue); }); } }, tooltip: function () { // Bootstrap Tooltip if ($.fn.tooltip) { $('[data-toggle="tooltip"]').tooltip({ trigger: 'hover focus' // click can be added too }); } }, popover: function () { // Bootstrap Popover if ($.fn.popover) { $('[data-toggle="popover"]').popover({ trigger: 'focus' }); } }, changePassToggle: function () { // Toggle new/change password section via checkbox $('#change-pass-checkbox').on('change', function () { $('#account-chage-pass').toggleClass('show'); }); }, changeBillToggle: function () { // Checkbox review - billing address checkbox $('#change-bill-address').on('change', function () { $('#checkout-shipping-address').toggleClass('show'); $('#new-checkout-address').toggleClass('show'); }); }, catAccordion: function () { // Toggle "open" Class for parent elem - Home cat widget $('.catAccordion').on('shown.bs.collapse', function (item) { var parent = $(item.target).closest('li'); if (!parent.hasClass('open')) { parent.addClass('open'); } }).on('hidden.bs.collapse', function (item) { var parent = $(item.target).closest('li'); if (parent.hasClass('open')) { parent.removeClass('open'); } }); }, scrollBtnAppear: function () { if ($(window).scrollTop() >= 400) { $('#scroll-top').addClass('fixed'); } else { $('#scroll-top').removeClass('fixed'); } }, scrollToTop: function () { $('#scroll-top').on('click', function (e) { $('html, body').animate({ 'scrollTop': 0 }, 1200); e.preventDefault(); }); }, newsletterPopup: function() { $.magnificPopup.open({ items: { src: '#newsletter-popup-form' }, type: 'inline', mainClass: 'mfp-newsletter', removalDelay: 350, callbacks: { open: function() { if($('.sticky-header.fixed').css('margin-right')) { var newMargin = Number($('.sticky-header.fixed').css('margin-right').slice(0, -2))+17+'px'; $('.sticky-header.fixed').css('margin-right', newMargin); $('.sticky-header.fixed-nav').css('margin-right', newMargin); $('#scroll-top').css('margin-right', newMargin); } }, afterClose: function() { if($('.sticky-header.fixed').css('margin-right')) { var newMargin = Number($('.sticky-header.fixed').css('margin-right').slice(0, -2))-17+'px'; $('.sticky-header.fixed').css('margin-right', newMargin); $('.sticky-header.fixed-nav').css('margin-right', newMargin); $('#scroll-top').css('margin-right', newMargin); } } }, }); }, lightBox: function () { // Newsletter popup if ( document.getElementById('newsletter-popup-form') ) { setTimeout(function() { var mpInstance = $.magnificPopup.instance; if (mpInstance.isOpen) { mpInstance.close(); setTimeout(function() { Porto.newsletterPopup(); },360); } else { Porto.newsletterPopup(); } }, 10000); } // Gallery Lightbox var links = []; var $productSliderImages = $('.product-single-carousel .owl-item:not(.cloned) img').length === 0 ? $('.product-single-gallery img') : $('.product-single-carousel .owl-item:not(.cloned) img'); $productSliderImages.each(function () { links.push({ 'src': $(this).attr('data-zoom-image') }); }); $(".prod-full-screen").click(function (e) { var currentIndex; if (e.currentTarget.closest(".product-slider-container")) { currentIndex = ($('.product-single-carousel').data('owl.carousel').current() + $productSliderImages.length - Math.ceil($productSliderImages.length / 2)) % $productSliderImages.length; } else { currentIndex = $(e.currentTarget).closest(".product-item").index(); } $.magnificPopup.open({ items: links, navigateByImgClick: true, type: 'image', gallery: { enabled: true }, }, currentIndex); }); //QuickView Popup $('body').on('click', 'a.btn-quickview', function (e) { e.preventDefault(); Porto.ajaxLoading(); var ajaxUrl = $(this).attr('href'); setTimeout(function () { $.magnificPopup.open({ type: 'ajax', mainClass: "mfp-ajax-product", tLoading: '', preloader: false, removalDelay: 350, items: { src: ajaxUrl }, callbacks: { open: function() { if($('.sticky-header.fixed').css('margin-right')) { var newMargin = Number($('.sticky-header.fixed').css('margin-right').slice(0, -2))+17+'px'; $('.sticky-header.fixed').css('margin-right', newMargin); $('.sticky-header.fixed-nav').css('margin-right', newMargin); $('#scroll-top').css('margin-right', newMargin); } }, ajaxContentAdded: function () { Porto.owlCarousels(); Porto.quantityInputs(); if (typeof addthis !== 'undefined') { addthis.layers.refresh(); } else { $.getScript("https://s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5b927288a03dbde6"); } }, beforeClose: function () { $('.ajax-overlay').remove(); }, afterClose: function() { if($('.sticky-header.fixed').css('margin-right')) { var newMargin = Number($('.sticky-header.fixed').css('margin-right').slice(0, -2))-17+'px'; $('.sticky-header.fixed').css('margin-right', newMargin); $('.sticky-header.fixed-nav').css('margin-right', newMargin); $('#scroll-top').css('margin-right', newMargin); } } }, ajax: { tError: '', } }); }, 500); }); }, productTabSroll: function () { // Scroll to product details tab and show review tab - product pages $('.rating-link').on('click', function (e) { if ($('.product-single-tabs').length) { $('#product-tab-reviews').tab('show'); } else if ($('.product-single-collapse').length) { $('#product-reviews-content').collapse('show'); } else { return; } if ($('#product-reviews-content').length) { setTimeout(function () { var scrollTabPos = $('#product-reviews-content').offset().top - 60; $('html, body').stop().animate({ 'scrollTop': scrollTabPos }, 800); }, 250); } e.preventDefault(); }); }, quantityInputs: function () { // Quantity input - cart - product pages if ($.fn.TouchSpin) { // Vertical Quantity $('.vertical-quantity').TouchSpin({ verticalbuttons: true, verticalup: '', verticaldown: '', verticalupclass: 'icon-up-dir', verticaldownclass: 'icon-down-dir', buttondown_class: 'btn btn-outline', buttonup_class: 'btn btn-outline', initval: 1, min: 1 }); // Horizontal Quantity $('.horizontal-quantity').TouchSpin({ verticalbuttons: false, buttonup_txt: '', buttondown_txt: '', buttondown_class: 'btn btn-outline btn-down-icon', buttonup_class: 'btn btn-outline btn-up-icon', initval: 1, min: 1 }); } }, ajaxLoading: function () { $('body').append("
"); }, wordRotate: function () { $('.word-rotater').each(function () { $(this).Morphext({ animation: 'bounceIn', separator: ',', speed: 2000 }); }); }, ajaxLoadProduct: function () { var loadCount = 0; $loadButton.click(function (e) { e.preventDefault(); $(this).text('Loading ...'); $.ajax({ url: "ajax/category-ajax-products.html", success: function (result) { var grid = $('.product-ajax-grid'); var className = grid.find('.product-default').parent().attr('class'); var $newItems = $(result); $newItems.find('.product-default').each(function() { $(this).parent().attr('class', className); }); setTimeout(function () { $newItems.hide().appendTo(grid).fadeIn(); $loadButton.text('Load More'); ++loadCount >= 2 && $loadButton.hide(); }, 350); }, failure: function () { $loadButton.text("Sorry something went wrong."); } }); }); }, toggleFilter: function () { // toggle sidebar filter $('.filter-toggle a').click(function (e) { e.preventDefault(); $('.filter-toggle').toggleClass('opened'); $('main').toggleClass('sidebar-opened'); }); // hide sidebar filter and sidebar overlay $('.sidebar-overlay').click(function (e) { $('.filter-toggle').removeClass('opened'); $('main').removeClass('sidebar-opened'); }); // show/hide sort menu $('.sort-menu-trigger').click(function (e) { e.preventDefault(); $('.select-custom').removeClass('opened'); $(e.target).closest('.select-custom').toggleClass('opened'); }); }, toggleSidebar: function () { $('.sidebar-toggle').click(function () { $('main').toggleClass('sidebar-opened'); }); }, scrollToElement: function () { $('.scrolling-box a[href^="#"]').on('click', function (event) { var target = $(this.getAttribute('href')); if (target.length) { event.preventDefault(); $('html, body').stop().animate({ scrollTop: target.offset().top - 90 }, 700); } }); }, loginPopup: function () { $('.login-link').click(function (e) { e.preventDefault(); Porto.ajaxLoading(); var ajaxUrl = "ajax/login-popup.html"; setTimeout(function () { $.magnificPopup.open({ type: 'ajax', mainClass: "login-popup", tLoading: '', preloader: false, removalDelay: 350, items: { src: ajaxUrl }, callbacks: { open: function() { if($('.sticky-header.fixed').css('margin-right')) { var newMargin = Number($('.sticky-header.fixed').css('margin-right').slice(0, -2))+17+'px'; $('.sticky-header.fixed').css('margin-right', newMargin); $('.sticky-header.fixed-nav').css('margin-right', newMargin); $('#scroll-top').css('margin-right', newMargin); } }, beforeClose: function () { $('.ajax-overlay').remove(); }, afterClose: function() { if($('.sticky-header.fixed').css('margin-right')) { var newMargin = Number($('.sticky-header.fixed').css('margin-right').slice(0, -2))-17+'px'; $('.sticky-header.fixed').css('margin-right', newMargin); $('.sticky-header.fixed-nav').css('margin-right', newMargin); $('#scroll-top').css('margin-right', newMargin); } } }, ajax: { tError: '', } }); }, 1500); }); }, modalView: function() { $('body').on('click', '.btn-add-cart', function(e){ $('.add-cart-box #productImage').attr('src', $(this).parents('.product-default').find('figure img').attr('src')); $('.add-cart-box #productTitle').text($(this).parents('.product-default').find('.product-title').text()); if($('.sticky-header.fixed').css('margin-right')) { var newMargin = Number($('.sticky-header.fixed').css('margin-right').slice(0, -2))+17+'px'; $('.sticky-header.fixed').css('margin-right', newMargin); $('.sticky-header.fixed-nav').css('margin-right', newMargin); $('#scroll-top').css('margin-right', newMargin); } }); $('.modal#addCartModal').on('hidden.bs.modal', function(e){ if($('.sticky-header.fixed').css('margin-right')) { var newMargin = Number($('.sticky-header.fixed').css('margin-right').slice(0, -2))-17+'px'; $('.sticky-header.fixed').css('margin-right', newMargin); $('.sticky-header.fixed-nav').css('margin-right', newMargin); $('#scroll-top').css('margin-right', newMargin); } }) }, productManage: function () { $('.product-select').click(function(e) { $(this).parents('.product-default').find('figure img').attr('src', $(this).data('src')); $(this).addClass('checked').siblings().removeClass('checked'); }); }, ratingTooltip: function () { $('body').on('mouseenter touchstart', '.product-ratings', function(e) { var ratingsRes = $(this).find('.ratings').width() / $(this).width() * 5; $(this).find('.tooltiptext').text(ratingsRes?ratingsRes.toFixed(2):ratingsRes); }); }, windowClick: function () { $(document).click(function (e) { // if click is happend outside of filter menu, hide it. if (!$(e.target).closest('.toolbox-item.select-custom').length) { $('.select-custom').removeClass('opened'); } }); }, popupMenu: function() { if ( $('.popup-menu').length <= 0) { return; } // Hide scroll bar var $popup_menu_ul = $('.popup-menu-ul'); var scroll_bar_size = $popup_menu_ul.parent().width() - $popup_menu_ul.children().width(); scroll_bar_size >= 0 && $popup_menu_ul.css('margin-right', '-' + scroll_bar_size + 'px'), $popup_menu_ul.css('margin-top', scroll_bar_size + 'px'); // Open $('.popup-menu-toggler').on('click', function(e){ e.preventDefault(); $(this).siblings('.popup-menu').addClass('open'); // Close on escape key $(document).on('keydown.popup-menu', function(e){ if (e.which == 27) { $('.popup-menu').removeClass('open'); $(document).off('keydown.popup-menu'); } }); }); // Close when close button is clicked. $('body').on('click', '.popup-menu-close', function(e){ $('.popup-menu').removeClass('open'); $(document).off('keydown.popup-menu'); e.preventDefault(); }); // Toggle submenus $('body').on('click', '.popup-menu a', function(e){ var $ul = $(this).siblings('ul'); $ul.length && $ul.toggleClass('open'), e.preventDefault(); }); }, topNotice: function() { if ( $('.top-notice .mfp-close').length ) { $('body').on('click', '.top-notice .mfp-close', function() { var topNoticeHeight = $(this).height(); $(this) .closest('.top-notice') .fadeOut(function() { $(this).addClass('closed'); }); }); } }, ratingForm: function() { $('body').on('click', '.rating-form .rating-stars > a', function(e) { var $star = $(this); $star.addClass('active').siblings().removeClass('active'); $star.parent().addClass('selected'); $star.closest('.rating-form').find('select').val($star.text()); e.preventDefault(); }); }, parallax: function() { var wrappers = $('[data-parallax]'), defaultOptions = { speed: 1.5, horizontalPosition: '50%', offset: 0, enableOnMobile: true }; if ( ! wrappers.length ) { return; } wrappers.each(function() { var wrapper = $(this), opts = wrapper.data('parallax'); if ( opts ) { opts = JSON.parse(opts.replace(/'/g,'"').replace(';','')); } var options = $.extend(true, {}, defaultOptions, opts), $window = $(window), offset, yPos, plxPos, background; // Create Parallax Element background = $('
'); // Set Style for Parallax Element var bg = wrapper.data('image-src') ? 'url(' + wrapper.data('image-src') + ')' : wrapper.css('background-image'); background.css({ 'background-image': bg, 'background-size': 'cover', 'background-position': '50% 0%', 'position': 'absolute', 'top': 0, 'left': 0, 'width': '100%', // 'height': '150%' 'height': options.speed * 100 + '%' }); // Add Parallax Element on DOM wrapper.prepend(background); // Set Overlfow Hidden and Position Relative to Parallax Wrapper wrapper.css({ 'position' : 'relative', 'overflow' : 'hidden' }); // If enabled if ( ! Porto.mobile || options.enableOnMobile ) { var moveParallax = function() { offset = wrapper.offset(); yPos = -($window.scrollTop() - (offset.top - 100)) / ((options.speed + 2 )); plxPos = (yPos < 0) ? Math.abs(yPos) : -Math.abs(yPos); background.css({ 'transform' : 'translate3d(0, '+ ( (plxPos - 50) + (options.offset) ) +'px, 0)', 'background-position-x' : options.horizontalPosition }); }; $(window).on('scroll resize', moveParallax); moveParallax(); // If disabled } else { wrapper.addClass('parallax-disabled'); } }); }, isotopes: function () { var defaultOptions = { itemsSelector: '.grid-item', masonry: { columnWidth: '.grid-col-sizer' }, percentPosition: true, // Sort sortBy: 'original-order', getSortData: { 'md-order': '[data-md-order] parseInt' }, sortReorder: false }; // Init all grids $('.grid').each(function () { var $this = $(this), userOptions = $this.data('grid-options'); if (userOptions) { userOptions = JSON.parse(userOptions.replace(/'/g,'"').replace(';','')); } var options = $.extend(true, {}, defaultOptions, userOptions); var gridIns = $this.isotope(options); if ( options.sortReorder ) { var reorderGrid = function() { var windowWidth = $(window).width(); gridIns.isotope({ sortBy: (windowWidth < 768 && windowWidth > 400 ) ? 'md-order' : 'original-order' }); }; // Reorder when resize event is called. $.fn.smartresize ? $(window).smartresize(reorderGrid) : $(window).on('resize', reorderGrid ); } }); }, zoomImage: function() { $('.product-single-grid .product-single-gallery img').each(function () { var $this = $(this), zoomConfig = { responsive: true, zoomWindowFadeIn: 350, zoomWindowFadeOut: 200, borderSize: 0, zoomContainer: $this.parent(), zoomType: 'inner', cursor: 'grab' }; $this.elevateZoom(zoomConfig); }); }, sideMenu: function() { $('.side-menu').length && $('body').on('click', '.side-menu-toggle', function(e) { $(this).siblings('ul').slideToggle('fast'); $(this).parent().toggleClass('show'); e.stopPropagation(); }); } }; $('body').prepend('
'); //Variables var $loadButton = $('.loadmore'); // Ready Event jQuery(document).ready(function () { // Init our app Porto.init(); }); // Load Event $(window).on('load', function () { $('body').addClass("loaded"); Porto.scrollBtnAppear(); }); // Scroll Event $(window).on('scroll', function () { Porto.scrollBtnAppear(); }); })(jQuery);