"use strict"; jQuery( function() { initEvents(); initStyles(); sanitizeBlogContent(); cleanupDuplicateBlocks(); initCollapseMenu(); checkCountUp(); initScrollReveal(); checkScrollAnimation(); }); jQuery(window).on('scroll', function (event) { checkNavbar(); checkGoTop(); checkScrollAnimation(); }).scroll(); jQuery(window).on('load', function(){ initMasonry(); initParallax(); }); jQuery(window).on("resize", function () { setResizeStyles(); }).resize(); /* Navbar menu initialization */ function initCollapseMenu() { var navbar = jQuery('.lte-navbar-items'), navbar_toggle = jQuery('.lte-navbar-toggle'), navbar_wrapper = jQuery("#lte-nav-wrapper"); navbar_wrapper.on('click', '.lte-navbar-toggle', function (e) { navbar_toggle.toggleClass('collapsed'); navbar.toggleClass('collapse'); navbar_wrapper.toggleClass('mob-visible'); }); // Anchor mobile menu navbar.on('click', '.menu-item-type-custom > a', function(e) { var el = jQuery(this); if ( jQuery(this).attr('href') != '#pll_switcher' && typeof jQuery(this).attr('href') !== 'undefined' && jQuery(this).attr('href') !== '#' && jQuery(this).attr('href').indexOf("#") != -1 && ( ( el.closest('li').hasClass('menu-item-has-children') && e.target.tagName != 'A') || ( !el.closest('li').hasClass('menu-item-has-children') && e.target.tagName == 'A')) ) { navbar_toggle.addClass('collapsed'); navbar.addClass('collapse'); navbar_wrapper.removeClass('mob-visible'); } }); navbar.on('click', '.menu-item-has-children > a', function(e) { var el = jQuery(this); if (!el.closest('.lte-navbar-items').hasClass('collapse')) { if ((el.attr('href') === undefined || el.attr('href') === '#') || e.target.tagName == 'A') { el.next().toggleClass('show'); el.parent().toggleClass('show'); return false; } // Remove duplicate footers and duplicate blog grids (defensive cleanup) function cleanupDuplicateBlocks(){ try { // Keep only the first footer wrapper var footers = document.querySelectorAll('.lte-footer-wrapper'); for (var i = 1; i < footers.length; i++) { footers[i].remove(); } // Keep only the first blog grid inside main blog wrap var grids = document.querySelectorAll('.lte-blog-wrap .blog.blog-block'); for (var j = 1; j < grids.length; j++) { grids[j].remove(); } } catch(e) { /* no-op */ } } } }); var lastWidth; jQuery(window).on("resize", function () { checkNavbar(); var winWidth = jQuery(window).width(), winHeight = jQuery(window).height(); lastWidth = winWidth; }); } // Remove empty/garbage paragraphs from blog content and normalize spacing function sanitizeBlogContent(){ try { var blocks = document.querySelectorAll('.text.lte-text-page.clearfix'); blocks.forEach(function(block){ // remove
that are empty or contain only
or whitespace
Array.from(block.querySelectorAll('p')).forEach(function(p){
var html = p.innerHTML.trim();
var text = p.textContent.replace(/\u00A0/g,' ').trim();
if (!text || /^
(\s| )*$/i.test(html)) {
p.remove();
return;
}
// remove hashtag-only paragraphs (e.g., #tag #tag2)
var anchors = Array.from(p.querySelectorAll('a'));
var allHashLinks = anchors.length > 0 && anchors.every(function(a){
var t = (a.textContent||'').trim();
return t.startsWith('#');
});
var pureHashText = /^#\S+(?:\s+#\S+)*$/.test(text);
if (allHashLinks || pureHashText) {
p.remove();
return;
}
// strip excessive bottom margins coming from pasted content
p.style.marginBottom = '';
p.style.marginTop = '';
});
// collapse consecutive
duplicates with same text var prevText = null; Array.from(block.querySelectorAll('p')).forEach(function(p){ var t = p.textContent.trim(); if (prevText !== null && t === prevText) { p.remove(); } else { prevText = t; } }); }); // Remove tags/sharing/related containers if still present in DOM document.querySelectorAll('.blog-info-post-bottom, .tags-line, .lte-sharing, .lte-related').forEach(function(el){ el.remove(); }); } catch(e) { /* no-op */ } } /* Navbar attributes with dependency on resolution and scroll status */ function checkNavbar() { var navbar = jQuery('.lte-navbar-items'), scroll = jQuery(window).scrollTop(), navBar = jQuery('.lte-navbar'), topBar = jQuery('.lte-topbar-block'), navbar_toggle = jQuery('.lte-navbar-toggle'), navbar_wrapper = jQuery("#lte-nav-wrapper"), slideDiv = jQuery('.slider-full'), winWidth = jQuery(window).width(), winHeight = jQuery(window).height(), navbar_mobile_width = navbar.data('mobile-screen-width'); if ( winWidth < navbar_mobile_width ) { navbar.addClass('navbar-mobile').removeClass('navbar-desktop'); navbar_wrapper.addClass('lte-navwrapper-mobile').removeClass('lte-navwrapper-desktop'); } else { navbar.addClass('navbar-desktop').removeClass('navbar-mobile'); navbar_wrapper.addClass('lte-navwrapper-desktop').removeClass('lte-navwrapper-mobile'); } topBar.addClass('inited'); navbar_wrapper.addClass('inited'); if ( topBar.length ) { navBar.data('offset-top', topBar.height()); } if (winWidth > navbar_mobile_width && navbar_toggle.is(':hidden')) { navbar.addClass('collapse'); navbar_toggle.addClass('collapsed'); navbar_wrapper.removeClass('mob-visible'); } jQuery("#lte-nav-wrapper.navbar-layout-transparent + .lte-page-header, #lte-nav-wrapper.navbar-layout-transparent + .main-wrapper").css('margin-top', '-' + navbar_wrapper.height() + 'px'); jQuery(".lte-image-preview img").each(function(i, el) { var height = jQuery(el).height() - 700; jQuery(el) .on('mouseover', function() { jQuery(this).css( { '-webkit-transform' : 'translateY(-' + height + 'px)', 'transform' : 'translateY(-' + height + 'px)' } ); }) .on('mouseout', function() { jQuery(this).css( { '-webkit-transform' : 'translateY(0px)', 'transform' : 'translateY(0px)' } ); }); }); } /* Check GoTop Visibility */ function checkGoTop() { var gotop = jQuery('.lte-go-top'), scrollBottom = jQuery(document).height() - jQuery(window).height() - jQuery(window).scrollTop(); if ( gotop.length ) { if ( jQuery(window).scrollTop() > 400 ) { gotop.addClass('show'); } else { gotop.removeClass('show'); } if ( scrollBottom < 50 ) { gotop.addClass('scroll-bottom'); } else { gotop.removeClass('scroll-bottom'); } } } /* All keyboard and mouse events */ function initEvents() { initSearch(); jQuery('.swipebox.photo').magnificPopup({type:'image', gallery: { enabled: true }}); jQuery('.swipebox.lte-video-popup').magnificPopup({type:'iframe'}); jQuery('.magnific-popup-link').magnificPopup({type:'ajax'}); jQuery('.swipebox-gallery').each(function() { jQuery(this).magnificPopup({type:'image', delegate: '.lte-gallery', gallery: { enabled: true }}); }); if (!/Mobi/.test(navigator.userAgent) && jQuery(window).width() > 768) { jQuery('.matchHeight').matchHeight(); jQuery('.items-matchHeight article').matchHeight(); } jQuery('.lte-sidebar-filter').on('click', function() { jQuery(this).parent().toggleClass('lte-show'); }); jQuery('.lte-sidebar-close').on('click', function() { jQuery(this).parent().parent().removeClass('lte-show'); }); jQuery('.lte-sidebar-overlay').on('click', function() { jQuery(this).parent().removeClass('lte-show'); }); /* Scrolling to navbar from "go top" button in footer */ jQuery('.lte-go-top').on('click', function() { jQuery('html, body').animate({ scrollTop: 0 }, 1200); return false; }); // WooCommerce grid-list toggle jQuery('.gridlist-toggle').on('click', 'a', function() { jQuery('.matchHeight').matchHeight(); }); jQuery('.woocommerce').on('click', 'div.quantity > span', function(e) { var f = jQuery(this).siblings('input'), step = 1, fixed = 0, val; if ( jQuery(f).is("[step]") ) { step = parseFloat(jQuery(f).attr('step')); } if ( step != 1 ) fixed = 1; if (jQuery(this).hasClass('more')) { val = parseFloat(f.val()) + step; } else { val = parseFloat(f.val()) - step; } f.val(val); e.preventDefault(); jQuery(this).siblings('input').change(); return false; }); if ( jQuery('.lte-mouse-move-object').length ) { jQuery('.lte-mouse-move-object').each(function(i, el) { jQuery('body').on('mousemove', function(e){ jQuery(el)[0].style.WebkitTransform = 'translate3d(' + '-' + (((e.pageX - jQuery(this).offset().left) / jQuery(el).width()) * 10) + 'px, 0, 0)'; }); }); } jQuery('.lte-mouse-move .elementor-column-wrap') .on('mouseover', function() { if ( typeof jQuery(this).data('bg-size') === 'undefined' ) { jQuery(this).data('bg-size', jQuery(this).css('background-size')); } if ( jQuery(this).css( 'background-size' ) != 'cover' ) { jQuery(this)[0].style.setProperty( 'background-size', parseInt(jQuery(this).data('bg-size')) + 10 + '%', 'important' ); } }) .on('mouseout', function(){ if ( jQuery(this).css( 'background-size' ) != 'cover' ) { jQuery(this)[0].style.setProperty( 'background-size', jQuery(this).data('bg-size'), 'important' ); } }) .on('mousemove', function(e){ if ( jQuery(this).css( 'background-size' ) != 'cover' ) { jQuery(this)[0].style.setProperty( 'background-position', ((e.pageX - jQuery(this).offset().left) / jQuery(this).width()) * 100 + '% ' + ((e.pageY - jQuery(this).offset().top) / jQuery(this).height()) * 100 + '%', 'important' ); } }); jQuery('.lte-services-sc.lte-layout-promo .lte-item') .on('mouseover', function(i, el) { jQuery(this).siblings().removeClass('lte-active'); jQuery(this).addClass('lte-active'); jQuery(this).parent().parent().find('.lte-bg-item.lte-active').removeClass('lte-active'); jQuery(this).parent().parent().find('.lte-bg-item-' + jQuery(this).data('id')).addClass('lte-active'); }); jQuery('.lte-events-sc.lte-events-layout-grid .lte-item') .on('mouseover', function(i, el) { var height = jQuery(this).find('.lte-excerpt').height(); jQuery(this).find('.lte-event-pre').css( { '-webkit-transform' : 'translateY(-' + height + 'px)', 'transform' : 'translateY(-' + height + 'px)' } ); }) .on('mouseout', function(i, el) { var height = 0; jQuery(this).find('.lte-event-pre').css( { '-webkit-transform' : 'translateY(-' + height + 'px)', 'transform' : 'translateY(-' + height + 'px)' } ); }); jQuery('.lte-navbar').on( 'affix.bs.affix', function(){ if (!jQuery( window ).scrollTop()) return false; }); jQuery('.lte-cursor-follow-wrapper').mousemove(function(i, el) { var relX = i.pageX - jQuery(this).offset().left; var relY = i.pageY - jQuery(this).offset().top; jQuery(this).find('.lte-tab-cursor').css({"left" : relX, "top" : relY}); }); if ( jQuery('.lte-particles-ripples').length ) { jQuery('.lte-particles-ripples').ripples({ resolution: 512, dropRadius: 20, perturbance: 0.04, }); setInterval(function() { if ( !document.hidden ) { var $el = jQuery('.lte-particles-ripples'); var x = Math.random() * $el.outerWidth(); var y = Math.random() * $el.outerHeight(); var dropRadius = 20; var strength = 0.04 + Math.random() * 0.04; $el.ripples('drop', x, y, dropRadius, strength); } }, 400); } } function initSearch() { let searchHandler = function(event){ if (jQuery(event.target).is(".lte-top-search-wrapper, .lte-top-search-wrapper *")) return; jQuery(document).off("click", searchHandler); jQuery('.lte-top-search-wrapper').removeClass('show-field'); jQuery('.lte-navbar-items').removeClass('muted'); } let search_href = jQuery('.lte-top-search-wrapper').data('base-href'), search_soruce = jQuery('.lte-top-search-wrapper').data('source'); jQuery('.lte-top-search-ico').on('click', function (e) { e.preventDefault(); jQuery(this).parent().toggleClass('show-field'); jQuery('.lte-navbar-items').toggleClass('muted'); if (jQuery(this).parent().hasClass('show-field')) { jQuery(document).on("click", searchHandler); } else { jQuery(document).off("click", searchHandler); } }); jQuery('.lte-nav-search .lte-header').on('click', function(e) { jQuery(this).prev().find('.lte-top-search-ico').click(); return false; }); jQuery('.lte-top-search-ico-close').on('click', function (e) { jQuery(this).parent().toggleClass('show-field'); jQuery('.lte-navbar-items').toggleClass('muted'); return false; }); jQuery('#lte-top-search-ico-mobile').on('click', function() { if ( search_soruce == 'woocommerce' ) { window.location = search_href + '?s=' + jQuery(this).next().val() + '&post_type=product'; } else { window.location = search_href + '?s=' + jQuery(this).next().val(); } return false; }); jQuery('.lte-top-search-wrapper input').keypress(function (e) { if (e.which == 13) { if ( search_soruce == 'woocommerce' ) { window.location = search_href + '?s=' + jQuery(this).val() + '&post_type=product'; } else { window.location = search_href + '?s=' + jQuery(this).val(); } return false; } }); } function lteUrlDecode(str) { return decodeURIComponent((str+'').replace(/\+/g, '%20')); } /* Parallax initialization */ function initParallax() { // Only for desktop if (/Mobi/.test(navigator.userAgent)) return false; jQuery('.lte-parallax').parallax("50%", 0.2); jQuery('section.lte-parallax-yes, .elementor-element.lte-parallax-yes, div.lte-parallax-yes > .elementor-column-wrap').each(function(i, el) { var val = jQuery(el).attr('class').match(/lte-bg-parallax-value-(\S+)/); if ( val === null ) var val = [0, 0.2]; jQuery(el).parallax("50%", parseFloat(val[1])); }); if ( jQuery('.lte-parallax-image').length ) { var id = 'lte-p-id' + Math.floor(Math.random() * 100000); jQuery('.lte-parallax-image').closest('.elementor-widget-wrap').attr('id', id ); var parallaxInstance = new Parallax(document.getElementById(id)); } if ( jQuery('.lte-parallax-slider-sc').length ) { var parallaxInstance = new Parallax(document.getElementById('lte-parallax-slider-sc-wrap')); } if (typeof jQuery().paroller === "function") { jQuery("[data-paroller-factor]").paroller(); setTimeout(function() { window.dispatchEvent(new Event('resize')); }, 400); } } /* Adding custom classes to elements */ function initStyles() { jQuery('select.wpcf7-select, aside select, .lte-wc-order select').wrap('
') jQuery('.wpcf7-checkbox').parent().addClass('margin-none'); jQuery('input[type="submit"], button[type="submit"]').not('.lte-btn').addClass('lte-btn'); jQuery('#send_comment').removeClass('btn-xs'); jQuery('#searchsubmit').removeClass('lte-btn'); jQuery('blockquote').append(''); jQuery('table:not([class])').addClass('lte-table'); jQuery('ul:not([class]), ol:not([class])').addClass('lte-list'); jQuery('.lte-sidebar-header .lte-header-widget').each(function(i, el) { jQuery(el).clone().removeClass('lte-header-widget').addClass('lte-header-watermark').insertAfter(el); }); jQuery('.current-menu-ancestor, .current-menu-item, .current-menu-parent, .current_page_parent, .current_page_item').addClass('lte-active'); // WooCommerce styles jQuery('.woocommerce .button').addClass('lte-btn btn-main').removeClass('button'); jQuery('.woocommerce-message .lte-btn, .woocommerce-info .lte-btn').addClass('btn-xs'); jQuery('.woocommerce .price_slider_amount .lte-btn').removeClass('btn-black color-hover-white').addClass('btn btn-main btn-xs'); jQuery('.woocommerce .checkout-button').removeClass('btn-black color-hover-white').addClass('btn btn-black color-hover-main'); jQuery('button.single_add_to_cart_button').removeClass('btn-xs color-hover-white').addClass('color-hover-main'); jQuery('.woocommerce .coupon .lte-btn').removeClass('color-hover-white').addClass('color-hover-main'); jQuery('.woocommerce .product .wc-label-new').closest('.product').addClass('lte-wc-new'); jQuery('.widget_product_search button').removeClass('lte-btn btn-xs'); jQuery('.woocommerce .product_meta span').each(function(i, el) { jQuery(el).html(jQuery(el).html().replace(/\,/gi, ',')); }); // Cart quanity change jQuery('.woocommerce div.quantity,.woocommerce-page div.quantity').append(''); jQuery(document).off('updated_wc_div').on('updated_wc_div', function () { jQuery('.woocommerce div.quantity,.woocommerce-page div.quantity').append(''); initStyles(); }); jQuery('.input-group-append .lte-btn').removeClass('btn-xs'); jQuery(".woocommerce *:not(.lte-btn-wrap) > .lte-btn").wrap(' a').wrapInner(''); jQuery('.blog-post .nav-links > a[rel="next"]').wrap(''); jQuery('.blog-post .nav-links > a[rel="prev"]').wrap(''); jQuery('.lte-background-no-img').each(function() { var rx = Math.floor((Math.random() * 1200)) + 'px', ry = Math.floor((Math.random() * 900)) + 'px'; jQuery(this).css('background-position', rx + ' ' + ry); }); var overlays = jQuery('*[class*="lte-overlay-wrapper-"]') .each(function (i, el) { var overlay = this.className.match(/lte-overlay-wrapper-(\S+)/); if ( jQuery(this).hasClass('elementor-column') ) { jQuery(el).children('.elementor-column-wrap').prepend(''); } else { jQuery(el).prepend(''); } }); var header_icon_class = jQuery('#lte-header-icon').data('icon'); jQuery('.wp-searchform .lte-btn').removeClass('lte-btn'); // Settings copyrights overlay for non-default heights var copyrights = jQuery('.copyright-block.copyright-layout-copyright-transparent'), footer = jQuery('#lte-widgets-footer + .copyright-block-transparent'), widgets_footer = jQuery('#lte-widgets-footer'), footerHeight = footer.outerHeight(); widgets_footer.css('padding-bottom', 0 + footerHeight + 'px'); footer.css('margin-top', '-' + 0 + (footerHeight - -2) + 'px'); copyrights.css('margin-top', '-' + (copyrights.outerHeight()) + 'px') var bodyStyles = window.getComputedStyle(document.body); var niceScrollConf = {cursorcolor:bodyStyles.getPropertyValue('--main'),cursorborder:"0px",background:"#fff",cursorwidth: "5px",cursorborderradius: "0px",autohidemode:false}; jQuery('.lte-price-sc.lte-scroll-yes .lte-filter-item').niceScroll(niceScrollConf); } /* Styles reloaded then page has been resized */ function setResizeStyles() { var videos = jQuery('.blog-post article.format-video iframe'), container = jQuery('.blog-post'), bodyWidth = jQuery(window).outerWidth(), contentWrapper = jQuery('.lte-content-wrapper.lte-footer-parallax'), footerWrapper = jQuery('.lte-content-wrapper.lte-footer-parallax + .lte-footer-wrapper'); contentWrapper.css('margin-bottom', footerWrapper.outerHeight() + 'px'); jQuery.each(videos, function(i, el) { var height = jQuery(el).height(), width = jQuery(el).width(), containerW = jQuery(container).width(), ratio = containerW / width; jQuery(el).css('width', width * ratio); jQuery(el).css('height', height * ratio); }); jQuery('.lte-services-sc.lte-layout-tabs').each(function(i, el) { var wrapper = jQuery(el) if ( !wrapper.hasClass('hasHeight') ) { wrapper.css('height', wrapper.height()); wrapper.addClass('hasHeight'); } }); document.documentElement.style.setProperty( '--fullwidth', bodyWidth + 'px' ); } /* Starting countUp function */ function checkCountUp() { if (jQuery(".lte-countup-animation").length){ jQuery('.lte-countup-animation').counterUp(); } } /* Scroll Reveal Initialization Catches the classes: lte-sr-fade_in lte-sr-text_el lte-sr-delay-200 lte-sr-duration-300 lte-sr-sequences-100 */ function initScrollReveal() { if (/Mobi/.test(navigator.userAgent) || jQuery(window).width() < 768) return false; window.sr = ScrollReveal(); var srAnimations = { zoom_in: { opacity : 1, scale : 0.01, }, zoom_in_large: { opacity : 0, scale : 5.01, }, fade_in: { distance: 1, opacity : 0, scale : 1, }, slide_from_left: { distance: '50%', origin: 'left', scale : 1, }, slide_from_right: { distance: '50%', origin: 'right', scale : 1, }, slide_from_top: { distance: '50%', origin: 'top', scale : 1, }, slide_from_bottom: { distance: '50%', origin: 'bottom', scale : 1, }, slide_rotate: { rotate: { x: 0, y: 0, z: 360 }, }, }; var srElCfg = { block: [''], items: ['article', '.item'], text_el: ['.heading', '.lte-btn', '.lte-btn-wrap', 'p', 'ul', 'img'], list_el: ['li'] }; /* Parsing elements class to get variables */ jQuery('.lte-sr').each(function() { var el = jQuery(this), srClass = el.attr('class'); var srId = srClass.match(/lte-sr-id-(\S+)/), srEffect = srClass.match(/lte-sr-effect-(\S+)/), srEl = srClass.match(/lte-sr-el-(\S+)/), srDelay = srClass.match(/lte-sr-delay-(\d+)/), srDuration = srClass.match(/lte-sr-duration-(\d+)/), srSeq = srClass.match(/lte-sr-sequences-(\d+)/); var cfg = srAnimations[srEffect[1]]; var srConfig = { delay : parseInt(srDelay[1]), duration : parseInt(srDuration[1]), easing : 'ease-in-out', afterReveal: function (domEl) { jQuery(domEl).css('transition', 'all .3s ease'); } } cfg = jQuery.extend({}, cfg, srConfig); var initedEls = []; jQuery.each(srElCfg[srEl[1]], function(i, e) { initedEls.push('.lte-sr-id-' + srId[1] + ' ' + e); }); sr.reveal(initedEls.join(','), cfg, parseInt(srSeq[1])); }); } /* Masonry initialization */ function initMasonry() { jQuery('.masonry').masonry({ itemSelector: '.item', columnWidth: '.item' }); jQuery('.gallery-inner').masonry({ itemSelector: '.mdiv', columnWidth: '.mdiv' }); } /* Scroll animation used for homepages */ function checkScrollAnimation() { var scrollBlock = jQuery('.ltx-check-scroll:not(.done)'); if (scrollBlock.length) { jQuery.each(scrollBlock, function(i, el) { var scrollTop = scrollBlock.offset().top - window.innerHeight; if ( jQuery(window).scrollTop() >= scrollTop ) { scrollBlock.addClass('done'); } }); } } setTimeout(function() { if ( typeof Pace !== 'undefined' ) { Pace.stop(); } }, 3000);