Linux hkvL61zh9Vexzf 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018 x86_64 Path : /www/wwwroot/fashion-kingdom.com/wp-content/plugins/kitify/assets/js/ |
Current File : /www/wwwroot/fashion-kingdom.com/wp-content/plugins/kitify/assets/js/kitify-base.js |
(function ($, elementor) { "use strict"; var getElementSettings = function( $element ) { var elementSettings = {}, modelCID = $element.data( 'model-cid' ); if ( isEditMode && modelCID ) { var settings = elementorFrontend.config.elements.data[ modelCID ], settingsKeys = elementorFrontend.config.elements.keys[ settings.attributes.widgetType || settings.attributes.elType ]; jQuery.each( settings.getActiveControls(), function( controlKey ) { if ( -1 !== settingsKeys.indexOf( controlKey ) ) { elementSettings[ controlKey ] = settings.attributes[ controlKey ]; } } ); } else { elementSettings = $element.data('settings') || {}; } return elementSettings; }; var isEditMode = false; function getHeaderHeight(){ var _height = 0; var $stickySection = $('.elementor-location-header .elementor-top-section[data-settings*="sticky_on"]'); if($stickySection.length){ _height = $stickySection.innerHeight(); } return _height; } function checkHeaderHeight(){ document.documentElement.style.setProperty('--kitify-header-height', getHeaderHeight() + 'px'); } document.addEventListener('DOMContentLoaded', function () { document.body.classList.add('kitify--js-ready'); checkHeaderHeight(); if(!Kitify.isPageSpeed()){ Kitify.localCache.validCache(false); Kitify.ajaxTemplateHelper.init(); $('.col-row').each(function (){ if($(this).closest('[data-kitify_ajax_loadtemplate]').length == 0){ $(this).trigger('kitify/LazyloadSequenceEffects'); } }) } }); $(window).on('load', function (){ $('.template-loaded[data-kitify_ajax_loadtemplate="true"] .col-row').trigger('kitify/LazyloadSequenceEffects'); }); $(document).on('kitify/LazyloadSequenceEffects', '.col-row, .swiper-container', function (e){ var $this = $(this); if( $this.hasClass('swiper-container') ){ Kitify.LazyLoad( $this, {rootMargin: '0px'} ).observe(); } else{ Kitify.LazyLoad( $('>*', $this), {rootMargin: '0px'} ).observe(); } }); $(window).on('load resize', checkHeaderHeight); $(document).on('kitify/woocommerce/single/init_product_slider', function (e, slider) { slider.controlNav.eq(slider.animatingTo).closest('li').get(0).scrollIntoView({ inline: "center", block: "nearest", behavior: "smooth" }); slider.viewport.closest('.woocommerce-product-gallery').css('--singleproduct-thumbs-height', slider.viewport.height() + 'px'); }); var Kitify = { log: function (...data){ if(window.KitifySettings.devMode === 'true'){ console.log(...data); } }, addedScripts: {}, addedStyles: {}, addedAssetsPromises: [], carouselInited: [], swiperInstances: {}, localCache: { cache_key: typeof KitifySettings.themeName !== "undefined" ? KitifySettings.themeName : 'kitify', /** * timeout for cache in seconds, default 5 mins * @type {number} */ timeout: typeof KitifySettings.cache_ttl !== "undefined" && parseInt(KitifySettings.cache_ttl) > 0 ? parseInt(KitifySettings.cache_ttl) : (60 * 5), timeout2: 60 * 10, /** * @type {{_: number, data: {}}} **/ data:{}, remove: function (url) { delete Kitify.localCache.data[url]; }, exist: function (url) { return !!Kitify.localCache.data[url] && ((Date.now() - Kitify.localCache.data[url]._) / 1000 < Kitify.localCache.timeout2); }, get: function (url) { //Kitify.log('Get cache for ' + url); return Kitify.localCache.data[url].data; }, set: function (url, cachedData, callback) { Kitify.localCache.remove(url); Kitify.localCache.data[url] = { _: Date.now(), data: cachedData }; if ("function" == typeof callback && "number" != typeof callback.nodeType) { callback(cachedData) } }, hashCode: function (s){ var hash = 0; s = s.toString(); if (s.length == 0) return hash; for (var i = 0; i < s.length; i++) { var char = s.charCodeAt(i); hash = (hash << 5) - hash + char; hash = hash & hash; // Convert to 32bit integer } return Math.abs(hash); }, validCache: function ( force ){ var expiry = typeof KitifySettings.local_ttl !== "undefined" && parseInt(KitifySettings.local_ttl) > 0 ? parseInt(KitifySettings.local_ttl) : 60 * 30; // 30 mins var cacheKey = Kitify.localCache.cache_key + '_cache_timeout' + Kitify.localCache.hashCode(KitifySettings.homeURL); try{ var whenCached = localStorage.getItem(cacheKey); if (whenCached !== null || force) { var age = (Date.now() - whenCached) / 1000; if (age > expiry || force) { Object.keys(localStorage).forEach(function (key) { if (key.indexOf(Kitify.localCache.cache_key) === 0) { localStorage.removeItem(key); } }); localStorage.setItem(cacheKey, Date.now()); } } else { localStorage.setItem(cacheKey, Date.now()); } } catch (ex) { Kitify.log(ex); } } }, isPageSpeed: function () { return (typeof navigator !== "undefined" && (/(lighthouse|gtmetrix)/i.test(navigator.userAgent.toLocaleLowerCase()) || /mozilla\/5\.0 \(x11; linux x86_64\)/i.test(navigator.userAgent.toLocaleLowerCase()))); }, addQueryArg: function (url, key, value) { var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"); var separator = url.indexOf('?') !== -1 ? "&" : "?"; if (url.match(re)) { return url.replace(re, '$1' + key + "=" + value + '$2'); } else { return url + separator + key + "=" + value; } }, getUrlParameter: function (name, url) { if (!url) url = window.location.href; name = name.replace(/[\[\]]/g, "\\$&"); var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, " ")); }, parseQueryString: function (query) { var urlparts = query.split("?"); var query_string = {}; if (urlparts.length >= 2) { var vars = urlparts[1].split("&"); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split("="); var key = decodeURIComponent(pair[0]); var value = decodeURIComponent(pair[1]); // If first entry with this name if (typeof query_string[key] === "undefined") { query_string[key] = decodeURIComponent(value); // If second entry with this name } else if (typeof query_string[key] === "string") { var arr = [query_string[key], decodeURIComponent(value)]; query_string[key] = arr; // If third or later entry with this name } else { query_string[key].push(decodeURIComponent(value)); } } } return query_string; }, removeURLParameter: function (url, parameter) { let urlparts = url?.split('?') ?? []; if (urlparts.length >= 2) { let prefix = encodeURIComponent(parameter) + '='; let pars = urlparts[1].split(/[&;]/g); //reverse iteration as may be destructive for (let i = pars.length; i-- > 0;) { //idiom for string.startsWith if (pars[i].lastIndexOf(prefix, 0) !== -1) { pars.splice(i, 1); } } url = urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : ""); return url; } else { return url; } }, initCarousel: function ($scope) { let $carousel = $scope.find('.kitify-carousel').first(); if ($carousel.length === 0) { return; } const $swiperContainer = $carousel.find('>.swiper-container, >div>.swiper-container').first(); if ($swiperContainer.length === 0) { return; } if ($carousel.hasClass('inited')) { return; } const totalSlides = $carousel.find('.swiper-wrapper').first().find('.swiper-slide').length; $carousel.addClass('inited'); const isSwiperLatest = elementorFrontendConfig.experimentalFeatures.e_swiper_latest || false; let elementSettings = $carousel.data('slider_options'), slidesToShow = parseInt(elementSettings.slidesToShow.desktop) || 1, elementorBreakpoints = elementorFrontend.config.responsive.activeBreakpoints, carousel_id = elementSettings.uniqueID, eUniqueId = $carousel.closest('.elementor-element').data('id'), e_dRows = parseInt(elementSettings.rows.desktop || 1); let swiperOptions = { slidesPerView: slidesToShow, loop: elementSettings.infinite, speed: elementSettings.speed, handleElementorBreakpoints: true, slidesPerGroup: parseInt(elementSettings.slidesToScroll.desktop || 1), loopAdditionalSlides: 1, loopFillGroupWithBlank: 1, loopedSlides: 4, preloadImages: false, ...( isSwiperLatest ? { grid: { rows: e_dRows, fill: 'row' } } : { slidesPerColumn: e_dRows, }), ...(e_dRows > 1 ? { rewind: elementSettings.infinite, loop: false } : {}) } swiperOptions.breakpoints = {}; let lastBreakpointSlidesToShowValue = 1; let defaultLGDevicesSlidesCount = 1; Object.keys(elementorBreakpoints).reverse().forEach(function (breakpointName) { // Tablet has a specific default `slides_to_show`. let defaultSlidesToShow = 'tablet' === breakpointName ? defaultLGDevicesSlidesCount : lastBreakpointSlidesToShowValue; swiperOptions.breakpoints[elementorBreakpoints[breakpointName].value] = { slidesPerView: +elementSettings.slidesToShow[breakpointName] || defaultSlidesToShow, slidesPerGroup: +elementSettings.slidesToScroll[breakpointName] || 1, ...( isSwiperLatest ? { grid: { rows: +elementSettings.rows[breakpointName] || 1, fill: 'row' } } : { slidesPerColumn: +elementSettings.rows[breakpointName] || 1, } ) } lastBreakpointSlidesToShowValue = +elementSettings.slidesToShow[breakpointName] || defaultSlidesToShow; }); if (elementSettings.autoplay) { swiperOptions.autoplay = { delay: (elementSettings.effect === 'slide' && elementSettings.infiniteEffect ? 0 : elementSettings.autoplaySpeed), disableOnInteraction: elementSettings.pauseOnInteraction, pauseOnMouseEnter: elementSettings.pauseOnHover, reverseDirection: elementSettings.reverseDirection || false, } if(elementSettings.effect === 'slide' && elementSettings.infiniteEffect){ swiperOptions.freeMode = { enable: true }; $carousel.addClass('kitify--linear-effect'); if(swiperOptions.slidesPerView === 1){ swiperOptions.slidesPerView = 'auto'; swiperOptions.breakpoints = {}; $carousel.addClass('kitify--linear-effect-auto'); } } } if (elementSettings.centerMode) { swiperOptions.centerInsufficientSlides = true; swiperOptions.centeredSlides = true; swiperOptions.centeredSlidesBounds = false; } switch (elementSettings.effect) { case 'fade': if (slidesToShow === 1) { swiperOptions.effect = elementSettings.effect; swiperOptions.fadeEffect = { crossFade: true }; } break; case 'coverflow': swiperOptions.effect = 'coverflow'; swiperOptions.grabCursor = true; swiperOptions.centeredSlides = true; swiperOptions.slidesPerView = 'auto'; swiperOptions.coverflowEffect = { rotate: 50, stretch: 0, depth: 100, modifier: 1, slideShadows: true }; swiperOptions.coverflowEffect = $.extend( {}, { rotate: 0, stretch: 100, depth: 100, modifier: 2.6, scale: 1, slideShadows : true }, elementSettings.coverflowEffect ) break; case 'cube': swiperOptions.effect = 'cube'; swiperOptions.grabCursor = true; swiperOptions.cubeEffect = { shadow: true, slideShadows: true, shadowOffset: 20, shadowScale: 0.94, } swiperOptions.slidesPerView = 1; swiperOptions.slidesPerGroup = 1; break; case 'flip': swiperOptions.effect = 'flip'; swiperOptions.grabCursor = true; swiperOptions.slidesPerView = 1; swiperOptions.slidesPerGroup = 1; break; case 'slide': swiperOptions.effect = 'slide'; swiperOptions.grabCursor = true; break; case 'cards': swiperOptions.effect = 'cards'; swiperOptions.grabCursor = true; swiperOptions.cardsEffect = { perSlideOffset: 8, perSlideRotate: 2, rotate: true, slideShadows: true, } break; case 'creative': swiperOptions.effect = 'creative'; swiperOptions.grabCursor = true; swiperOptions.creativeEffect = { limitProgress: 1, progressMultiplier: 1, prev: { shadow: false, translate: ["-120%", 0, -500], }, next: { shadow: false, translate: ["120%", 0, -500], }, } break; } if (elementSettings.arrows) { swiperOptions.navigation = { prevEl: elementSettings.prevArrow, nextEl: elementSettings.nextArrow }; } if (elementSettings.dots) { let _dotType = elementSettings.dotType || 'bullets'; swiperOptions.pagination = { el: elementSettings.dotsElm || '.kitify-carousel__dots', clickable: true, renderFraction: function ( c, t ){ return `<span class="${c}"></span><span>/</span><span class="${t}"></span>` } }; if(_dotType !== 'custom'){ swiperOptions.pagination.type = _dotType } if (_dotType === 'bullets') { swiperOptions.pagination.dynamicBullets = true; swiperOptions.pagination.dynamicMainBullets = 0; swiperOptions.pagination.renderBullet = function (index, className) { return '<span class="' + className + '">' + (index + 1) + "</span>"; } } if (_dotType === 'custom') { swiperOptions.pagination.modifierClass = 'kitify-swiper-pagination-' swiperOptions.pagination.renderBullet = function (t, e) { return '<span class="' + e + '"><svg width="65px" height="65px" viewBox="0 0 72 72" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"><circle class="time" stroke-width="5" fill="none" stroke-linecap="round" cx="33" cy="33" r="28"></circle></svg></span>' } } } var enableScrollbar = elementSettings.scrollbar || false; if (!enableScrollbar) { swiperOptions.scrollbar = false; } else { swiperOptions.scrollbar = { el: '.kitify-carousel__scrollbar_' + eUniqueId, draggable: true } } var _has_slidechange_effect = false, _slide_change_effect_in = elementSettings.content_effect_in || 'fadeInUp', _slide_change_effect_out = elementSettings.content_effect_out || 'fadeOutDown'; if (elementSettings.content_selector !== undefined && $carousel.find(elementSettings.content_selector).length > 0) { _has_slidechange_effect = true; } if ($carousel.closest('.no-slide-animation').length || $carousel.closest('.slide-no-animation').length) { _has_slidechange_effect = false; } if (elementSettings.direction) { swiperOptions.direction = elementSettings.direction; } if (elementSettings.autoHeight) { swiperOptions.autoHeight = elementSettings.autoHeight } swiperOptions.watchSlidesProgress = true; swiperOptions.watchSlidesVisibility = true; swiperOptions.parallax = true; if(typeof elementSettings.asFor !== "undefined" && elementSettings.asFor.trim() !== ''){ swiperOptions.slideToClickedSlide = true; } const Swiper = elementorFrontend.utils.swiper; $('.swiper-slide .kitify-has-entrance-animation', $scope).each(function (){ const _settings = $(this).data('settings'); const _animationName = elementorFrontend.getCurrentDeviceSetting(_settings, '_animation') || elementorFrontend.getCurrentDeviceSetting(_settings, 'animation'); delete _settings?._animation; delete _settings?.animation; _settings.n_animation = _animationName; this.setAttribute('data-settings', JSON.stringify(_settings)) }); const slideContentAnimation_cb = ( _deactivateSlides, _activateSlides ) => { _activateSlides.forEach( _slide => { _slide.querySelectorAll('.kitify-has-entrance-animation').forEach( _animation_item => { let _settings = JSON.parse(_animation_item.getAttribute('data-settings')); let _animationName = elementorFrontend.getCurrentDeviceSetting(_settings, 'n_animation') || elementorFrontend.getCurrentDeviceSetting(_settings, '_animation') || elementorFrontend.getCurrentDeviceSetting(_settings, 'animation'); let _animationDelay = elementorFrontend.getCurrentDeviceSetting(_settings, '_animation_delay') || elementorFrontend.getCurrentDeviceSetting(_settings, 'animation_delay') || 0; if(_animationName === 'none'){ _animation_item.classList.remove('elementor-invisible') } else{ setTimeout( () => { _animation_item.classList.remove('elementor-invisible') _animation_item.classList.add('animated', _animationName) }, _animationDelay ) } } ) _slide.querySelectorAll('.elementor-background-video-hosted')?.forEach( (_video) => { _video?.play() } ) } ); _deactivateSlides.forEach( _slide => { _slide.querySelectorAll('.kitify-has-entrance-animation').forEach( _animation_item => { let _settings = JSON.parse(_animation_item.getAttribute('data-settings')); let _animationName = elementorFrontend.getCurrentDeviceSetting(_settings, 'n_animation') || elementorFrontend.getCurrentDeviceSetting(_settings, '_animation') || elementorFrontend.getCurrentDeviceSetting(_settings, 'animation'); if(_animationName === 'none'){ _animation_item.classList.remove('animated') _animation_item.classList.add('elementor-invisible') } else{ _animation_item.classList.add('elementor-invisible') _animation_item.classList.remove('animated', _animationName) } } ) _slide.querySelectorAll('.elementor-background-video-hosted')?.forEach( (_video) => { _video?.pause() } ) } ) if (_has_slidechange_effect) { _deactivateSlides.forEach( _slide => { _slide.querySelectorAll(elementSettings.content_selector).forEach( _selector => { _selector.classList.add('no-effect-class', _slide_change_effect_out) _selector.classList.remove(_slide_change_effect_in) } ) }) _activateSlides.forEach( _slide => { _slide.querySelectorAll(elementSettings.content_selector).forEach( _selector => { _selector.classList.remove('no-effect-class', _slide_change_effect_out) _selector.classList.add(_slide_change_effect_in) } ) }) } } $swiperContainer.trigger('kitify/LazyloadSequenceEffects'); $carousel.css({ '--totalSlides': totalSlides, '--swiperSpeed': `${swiperOptions.speed}ms` }); if(elementSettings?.variableWidth){ swiperOptions.slidesPerView = 'auto'; swiperOptions.loopedSlides = null; swiperOptions.loopPreventsSlide = false; swiperOptions.breakpoints = {}; swiperOptions.on = { init: function ( ) { const swiper = this; setTimeout( () => { let _cheight = $('.swiper-slide-active', swiper.$el).first().innerHeight(); swiper.el.style.setProperty('--swiperHeight', _cheight + 'px'); }, 300) }, resize: function ( ) { const swiper = this; setTimeout( () => { let _cheight = $('.swiper-slide-active', swiper.$el).first().innerHeight(); swiper.el.style.setProperty('--swiperHeight', _cheight + 'px'); }, 50) } } } swiperOptions.on = { ...swiperOptions?.on, beforeInit: ( _swiper ) => { if(isSwiperLatest){ let _classFB = ['swiper-container', 'swiper-container-initialized']; _classFB.push(`swiper-container-${_swiper.params.direction}`); _classFB.push(`swiper-container-${_swiper.params.effect}`); if( ['coverflow', 'cube', 'flip', 'creative', 'creative'].includes(_swiper.params.effect) ) { _classFB.push('swiper-container-3d'); } if( _swiper.params.autoHeight ){ _classFB.push('swiper-container-autoheight'); } $swiperContainer.addClass(_classFB) } }, afterInit: ( _swiper ) => { $('.swiper-slide-duplicate .kitify-embla_wrap.embla--inited', _swiper.$wrapperEl).removeClass('embla--inited').trigger('kitify/init-embla-slider'); }, changeDirection: function( ) { if(isSwiperLatest){ $swiperContainer.removeClass('swiper-container-horizontal swiper-container-vertical').addClass(`swiper-container-${this.params.direction}`) } }, beforeResize: function (){ $('>.swiper-slide', this.$wrapperEl).css('width', '') }, slideChangeTransitionEnd: function (){ const _swiper = this; let _slides = []; if(isSwiperLatest){ _slides = _swiper.slides; } else{ for (let i = 0; i < _swiper.slides.length; i += 1) { _slides.push(_swiper.slides[i]) } } let _deactivateSlides = _slides.filter( (_item, _idx) => { let _flag = !_swiper.visibleSlidesIndexes.includes(_idx); if(_swiper.params.slidesPerView !== 'auto' && _swiper.params.slidesPerView > 1 && (_item.classList.contains('swiper-slide-duplicate-prev') || _item.classList.contains('swiper-slide-duplicate-next'))){ _flag = false; } return _flag; }); let _activeSlides = _slides.filter( (_item, _idx) => { return _swiper.visibleSlidesIndexes.includes(_idx) }); slideContentAnimation_cb(_deactivateSlides, _activeSlides); }, slideChange: function (){ const _swiper = this; $('[data-carousel-goto="#'+carousel_id+'"]').removeClass('s-active'); $('[data-carousel-goto="#'+carousel_id+'"][data-carousel-index="'+_swiper.realIndex+'"]').addClass('s-active'); }, transitionStart: (_swiper) => { if(elementSettings?.variableWidth){ setTimeout(() => { _swiper.update() }, 50) } } }; if( $scope.hasClass('elementor-kitify-portfolio') && $('.preset-grid-2b, .preset-grid-2b', $scope).length > 0){ swiperOptions.autoHeight = false; for (const _bkp_key in swiperOptions.breakpoints) { swiperOptions.breakpoints[_bkp_key].autoHeight = elementorBreakpoints?.mobile?.value === parseInt(_bkp_key) } } swiperOptions = elementorFrontend.hooks.applyFilters('kitify/carousel/options', swiperOptions, $scope, carousel_id); new Swiper($swiperContainer, swiperOptions).then(function (SwiperInstance) { Kitify.swiperInstances[carousel_id] = SwiperInstance if(elementSettings?.variableWidth || elementSettings?.infiniteEffect){ SwiperInstance.update() } Kitify.carouselInited.push({ id: carousel_id, syncWith: elementSettings.asFor, thumbs: elementSettings.thumbs }) $swiperContainer.data('swiper', SwiperInstance); if(SwiperInstance?.pagination?.bullets?.length < 5){ SwiperInstance?.pagination?.$el?.addClass('no-bullets-dynamic'); } if(elementSettings.autoplay && elementSettings.pauseOnHover && typeof SwiperInstance.autoplay !== "undefined" && typeof SwiperInstance.autoplay.onMouseEnter === "undefined"){ $swiperContainer.on('mouseenter', function (){ SwiperInstance.autoplay.stop(); }).on('mouseleave', function (){ SwiperInstance.autoplay.start(); }); } if(elementSettings.autoHeight){ SwiperInstance.wrapperEl.style.height = 'auto'; } $carousel.css('--data-autoplay-speed', SwiperInstance.params.autoplay.delay + 'ms'); $swiperContainer.find('.e-parent').trigger('kitify/section/calculate-container-width'); Kitify.carouselInited.forEach( _syncItem => { if(_syncItem?.synced !== true && _syncItem?.syncWith !== ''){ const _c = _syncItem?.syncWith?.split(',')?.map( _a => _a?.trim())?.filter( _b => _b !== '' ) const _ok = _c?.filter( (_d) => { return Kitify.carouselInited.filter( _e => _e.id === _d ).length > 0 }) if(_c?.length > 0 && _c?.length === _ok?.length){ _syncItem.synced = true; let _main_instance = Kitify.swiperInstances[_syncItem.id] let _synced = _ok?.map( _e => Kitify.swiperInstances[_e] ) _main_instance.controller.control = _synced } } if(_syncItem?.syncedThumbs !== true && _syncItem?.thumbs !== '' && Kitify.swiperInstances[_syncItem?.thumbs]){ const _mainS = Kitify.swiperInstances[_syncItem.id], _thumbS = Kitify.swiperInstances[_syncItem.thumbs]; _thumbS.params.slideToClickedSlide = true _thumbS.update() _mainS.params.thumbs.swiper = _thumbS _mainS.update() _mainS.thumbs.init() _mainS.thumbs.update() _syncItem.syncedThumbs = true; } }) if (_has_slidechange_effect) { $carousel.find(elementSettings.content_selector).addClass('animated no-effect-class'); $carousel.find('.swiper-slide-visible ' + elementSettings.content_selector).removeClass('no-effect-class').addClass(_slide_change_effect_in); } $('.elementor-motion-effects-element', $scope).trigger('resize'); $(document).trigger('kitify/carousel/init_success', { swiperContainer: $swiperContainer, SwiperInstance: SwiperInstance, parentContainer: $scope }); }); }, initMasonry: function ($scope) { var $container = $scope.find('.kitify-masonry-wrapper').first(); if ($container.length == 0) { return; } var $list_wrap = $scope.find($container.data('kitifymasonry_wrap')), itemSelector = $container.data('kitifymasonry_itemselector'), $advanceSettings = $container.data('kitifymasonry_layouts') || false, $itemsList = $scope.find(itemSelector), $masonryInstance, _configs; if ($list_wrap.length) { if ($advanceSettings !== false) { $(document).trigger('kitify/masonry/calculate-item-sizes', [$container, false]); $(window).on('resize', function () { $(document).trigger('kitify/masonry/calculate-item-sizes', [$container, true]); }); _configs = { itemSelector: itemSelector, percentPosition: true, masonry: { columnWidth: 1, gutter: 0, }, } } else { _configs = { itemSelector: itemSelector, percentPosition: true, } } $masonryInstance = $list_wrap.isotope(_configs); $('img', $itemsList).imagesLoaded().progress(function (instance, image) { var $image = $(image.img), $parentItem = $image.closest(itemSelector); $parentItem.addClass('item-loaded'); if ($masonryInstance) { $masonryInstance.isotope('layout'); } }); } }, initCustomHandlers: function () { $(document) .on('click', '.kitify .kitify-pagination_ajax_loadmore a', function (e){ e.preventDefault(); if ($('body').hasClass('elementor-editor-active')) { return false; } var $kitWrap,$parentContainer, $container, ajaxType, $parentNav, widgetId, itemSelector; $parentNav = $(this).closest('.kitify-pagination'); $kitWrap = $(this).closest('.kitify'); widgetId = $kitWrap.data('id'); if ($parentNav.hasClass('doing-ajax')) { return false; } ajaxType = 'load_widget'; if($kitWrap.find('div[data-widget_current_query="yes"]').length > 0){ ajaxType = 'load_fullpage'; } if($kitWrap.hasClass('elementor-kitify-wooproducts')){ $container = $kitWrap.find('.kitify-products__list'); $parentContainer = $kitWrap.find('.kitify-products'); itemSelector = '.kitify-product.product_item'; } else{ $container = $($parentNav.data('container')); $parentContainer = $($parentNav.data('parent-container')); itemSelector = $parentNav.data('item-selector'); } if ($('a.next', $parentNav).length) { $parentNav.addClass('doing-ajax'); $parentContainer.addClass('doing-ajax'); var success_func = function (response) { var $data = $(response).find('.elementor-element-' + widgetId + ' ' + itemSelector); if ($parentContainer.find('.kitify-carousel').length > 0) { var swiper = $parentContainer.find('.kitify-carousel').get(0).swiper; swiper.appendSlide($data); } else if ($container.data('isotope')) { $container.append($data); $container.isotope('insert', $data); $(document).trigger('kitify/masonry/calculate-item-sizes', [$parentContainer, true]); $('img', $data).imagesLoaded().progress(function (instance, image) { var $image = $(image.img), $parentItem = $image.closest(itemSelector); $parentItem.addClass('item-loaded'); $container.isotope('layout'); }); } else { $data.addClass('fadeIn animated').appendTo($container); } $parentContainer.removeClass('doing-ajax'); $parentNav.removeClass('doing-ajax kitify-ajax-load-first'); if ($(response).find( '.elementor-element-' + widgetId + ' .kitify-ajax-pagination').length) { var $new_pagination = $(response).find( '.elementor-element-' + widgetId + ' .kitify-ajax-pagination'); $parentNav.replaceWith($new_pagination); $parentNav = $new_pagination; } else { $parentNav.addClass('nothingtoshow'); } $('body').trigger('jetpack-lazy-images-load'); $(document).trigger('kitify/ajax-loadmore/success', { parentContainer: $parentContainer, contentHolder: $container, pagination: $parentNav }); }; var url_request = $('a.next', $parentNav).get(0).href.replace(/^\//, ''); url_request = Kitify.removeURLParameter(url_request, '_'); var ajaxOpts = { url: url_request, type: "GET", cache: true, dataType: 'html', success: function (res) { success_func(res); } }; $.ajax(ajaxOpts); } }) .on('click', '.kitify .kitify-ajax-pagination .page-numbers a', function (e){ e.preventDefault(); if ($('body').hasClass('elementor-editor-active')) { return false; } var $kitWrap,$parentContainer, $container, ajaxType, $parentNav, widgetId, itemSelector, templateId, pagedKey; $parentNav = $(this).closest('.kitify-pagination'); $kitWrap = $(this).closest('.kitify'); widgetId = $kitWrap.data('id'); if ($parentNav.hasClass('doing-ajax')) { return false; } templateId = $kitWrap.closest('.elementor[data-elementor-settings][data-elementor-id]').data('elementor-id'); if($kitWrap.hasClass('elementor-kitify-wooproducts')){ $container = $kitWrap.find('.kitify-products__list'); $parentContainer = $kitWrap.find('.kitify-products'); itemSelector = '.kitify-product.product_item'; var tmpClass = $parentContainer.closest('.woocommerce').attr('class').match(/\bkitify_wc_widget_([^\s]*)/); if (tmpClass !== null && tmpClass[1]) { pagedKey = 'product-page-' + tmpClass[1]; } else{ pagedKey = 'paged'; } } else{ $container = $($parentNav.data('container')); $parentContainer = $($parentNav.data('parent-container')); itemSelector = $parentNav.data('item-selector'); pagedKey = $parentNav.data('ajax_request_id'); } ajaxType = 'load_widget'; if($kitWrap.find('div[data-widget_current_query="yes"]').length > 0){ ajaxType = 'load_fullpage'; pagedKey = 'paged'; } $parentNav.addClass('doing-ajax'); $parentContainer.addClass('doing-ajax'); var success_func = function (res, israw) { var $response; if(israw){ var jsoncontent = JSON.parse(res); var contentraw = jsoncontent['template_content']; $response = $('<div></div>').html(contentraw); } else{ $response = $(res); } var $data = $response.find('.elementor-element-' + widgetId + ' ' + itemSelector); if ($parentContainer.find('.kitify-carousel').length > 0) { var swiper = $parentContainer.find('.kitify-carousel').get(0).swiper; swiper.removeAllSlides(); swiper.appendSlide($data); } else if ($container.data('isotope')) { $container.isotope('remove', $container.isotope('getItemElements')); $container.isotope('insert', $data); $(document).trigger('kitify/masonry/calculate-item-sizes', [$parentContainer, true]); $('img', $data).imagesLoaded().progress(function (instance, image) { var $image = $(image.img), $parentItem = $image.closest(itemSelector); $parentItem.addClass('item-loaded'); $container.isotope('layout'); }); } else { $data.addClass('fadeIn animated').appendTo($container.empty()); } $parentContainer.removeClass('doing-ajax'); $parentNav.removeClass('doing-ajax kitify-ajax-load-first'); if ($response.find( '.elementor-element-' + widgetId + ' .kitify-ajax-pagination').length) { var $new_pagination = $response.find( '.elementor-element-' + widgetId + ' .kitify-ajax-pagination'); $parentNav.replaceWith($new_pagination); $parentNav = $new_pagination; } else { $parentNav.addClass('nothingtoshow'); } if($response.find( '.elementor-element-' + widgetId + ' .woocommerce-result-count').length && $kitWrap.find('.woocommerce-result-count').length){ $kitWrap.find('.woocommerce-result-count').replaceWith($response.find( '.elementor-element-' + widgetId + ' .woocommerce-result-count')); } $('html,body').animate({ 'scrollTop': $parentContainer.offset().top - getHeaderHeight() - 50 }, 400); $('body').trigger('jetpack-lazy-images-load'); $(document).trigger('kitify/ajax-pagination/success', { parentContainer: $parentContainer, contentHolder: $container, pagination: $parentNav }); }; var url_request = e.target.href.replace(/^\//, ''); if( ajaxType == 'load_widget' ){ var _tmpURL = url_request; url_request = Kitify.addQueryArg(KitifySettings.widgetApiUrl, 'template_id', templateId); url_request = Kitify.addQueryArg(url_request, 'widget_id', widgetId); url_request = Kitify.addQueryArg(url_request, 'dev', KitifySettings.devMode); url_request = Kitify.addQueryArg(url_request, pagedKey, Kitify.getUrlParameter(pagedKey, _tmpURL)); url_request = Kitify.addQueryArg(url_request, 'kitifypagedkey', pagedKey); } url_request = Kitify.removeURLParameter(url_request, '_'); var ajaxOpts = { url: url_request, type: "GET", cache: true, dataType: 'html', ajax_request_id: Kitify.getUrlParameter(pagedKey, url_request), success: function (res) { if(ajaxType == 'load_widget'){ success_func(res, true); } else{ success_func(res, false); } } }; $.ajax(ajaxOpts) }) .on('click', '[data-kitify-element-link]', function (e) { var $wrapper = $(this), data = $wrapper.data('kitify-element-link'), id = $wrapper.data('id'), anchor = document.createElement('a'), anchorReal; anchor.id = 'nova-wrapper-link-' + id; anchor.href = data.url; anchor.target = data.is_external ? '_blank' : '_self'; anchor.rel = data.nofollow ? 'nofollow noreferer' : ''; anchor.style.display = 'none'; document.body.appendChild(anchor); anchorReal = document.getElementById(anchor.id); anchorReal.click(); anchorReal.remove(); }) .on('click', '.kitify-masonry_filter .kitify-masonry_filter-item', function (e){ e.preventDefault(); var $wrap = $(this).closest('.kitify-masonry_filter'), $isotopeInstance = $($wrap.data('kitifymasonry_container')), _filter = $(this).data('filter'); if (_filter != '*'){ _filter = '.' + _filter; } if ($isotopeInstance.data('isotope')) { $(this).addClass('active').siblings('.kitify-masonry_filter-item').removeClass('active'); $isotopeInstance.isotope({ filter: _filter }); } }) .on('kitify/masonry/calculate-item-sizes', function (e, $isotope_container, need_relayout) { var masonrySettings = $isotope_container.data('kitifymasonry_layouts') || false, $isotopeInstance = $isotope_container.find($isotope_container.data('kitifymasonry_wrap')); if (masonrySettings !== false) { var win_w = $(window).width(), selector = $isotope_container.data('kitifymasonry_itemselector'); if (win_w > 1023) { $isotope_container.addClass('cover-img-bg'); var _base_w = masonrySettings.item_width, _base_h = masonrySettings.item_height, _container_width_base = masonrySettings.container_width, _container_width = $isotope_container.width(), item_per_page = Math.round(_container_width_base / _base_w), itemwidth = Math.floor(_container_width / item_per_page), margin = parseInt($isotope_container.data('kitifymasonry_itemmargin') || 0), dimension = (_base_h ? parseFloat(_base_w / _base_h) : 1), layout_mapping = masonrySettings.layout || [{w: 1, h: 1}]; var _idx = 0, _idx2 = 0; $(selector, $isotope_container).each(function () { $(this) .css({ 'width': Math.floor(itemwidth * (layout_mapping[_idx]['w']) - (margin / 2)), 'height': _base_h ? Math.floor(itemwidth / dimension * (layout_mapping[_idx]['h'])) : 'auto' }) .addClass('kitify-disable-cols-style'); // .attr('data-kitifymansory--item_setting', JSON.stringify({ // 'index': _idx2 + '_' + _idx, // 'itemwidth': itemwidth, // 'layout': layout_mapping[_idx] // })); _idx++; if (_idx == layout_mapping.length) { _idx2++; _idx = 0; } }); } else { $isotope_container.removeClass('kitify-masonry--cover-bg'); $(selector, $isotope_container).css({ 'width': '', 'height': '' }).removeClass('kitify-disable-cols-style'); } } if (need_relayout) { if ($isotopeInstance.data('isotope')) { $isotopeInstance.isotope('layout'); } } }) .on('keyup', function (e) { if(e.keyCode == 27){ $('.kitify-cart').removeClass('kitify-cart-open'); $('.kitify-hamburger-panel').removeClass('open-state'); $('html').removeClass('kitify-hamburger-panel-visible'); } }) .on('kitify/section/calculate-container-width', '.elementor-top-section', function (e){ var $scope = $(this); var $child_container = $scope.find('>.e-con-inner'); if(!$child_container.length){ $child_container = $scope; } $child_container.css('--kitify-section-width', $child_container.width() + 'px'); $(window).on('resize', function (){ $child_container.css('--kitify-section-width', $child_container.width() + 'px'); }); }) .on('click', function (e){ if( $(e.target).closest('.kitify-cart').length == 0 ) { $('.kitify-cart').removeClass('kitify-cart-open'); } }) }, ImageScrollHandler: function($scope) { var elementSettings = getElementSettings( $scope ), scrollElement = $scope.find('.kitify-image-scroll-container'), scrollOverlay = scrollElement.find('.kitify-image-scroll-overlay'), scrollVertical = scrollElement.find('.kitify-image-scroll-vertical'), imageScroll = scrollElement.find('.kitify-image-scroll-image img'), direction = elementSettings.direction_type, reverse = elementSettings.reverse, trigger = elementSettings.trigger_type, transformOffset = null; function startTransform() { imageScroll.css('transform', (direction === 'vertical' ? 'translateY' : 'translateX') + '( -' + transformOffset + 'px)'); } function endTransform() { imageScroll.css('transform', (direction === 'vertical' ? 'translateY' : 'translateX') + '(0px)'); } function setTransform() { if( direction === 'vertical' ) { transformOffset = imageScroll.height() - scrollElement.height(); } else { transformOffset = imageScroll.width() - scrollElement.width(); } } if ( trigger === 'scroll' ) { scrollElement.addClass('kitify-container-scroll'); if ( direction === 'vertical' ) { scrollVertical.addClass('kitify-image-scroll-ver'); } else { scrollElement.imagesLoaded(function() { scrollOverlay.css( { 'width': imageScroll.width(), 'height': imageScroll.height() } ); }); } } else { if ( reverse === 'yes' ) { scrollElement.imagesLoaded(function() { scrollElement.addClass('kitify-container-scroll-instant'); setTransform(); startTransform(); }); } if ( direction === 'vertical' ) { scrollVertical.removeClass('kitify-image-scroll-ver'); } scrollElement.mouseenter(function() { scrollElement.removeClass('kitify-container-scroll-instant'); setTransform(); reverse === 'yes' ? endTransform() : startTransform(); }); scrollElement.mouseleave(function() { reverse === 'yes' ? startTransform() : endTransform(); }); } }, isEditMode: function () { return Boolean(elementorFrontend.isEditMode()); }, mobileAndTabletCheck: function () { return ( (('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)) && (window.innerWidth < 1400) ) }, loadStyle: function (style, uri) { if (Kitify.addedStyles.hasOwnProperty(style) && Kitify.addedStyles[style] === uri) { return style; } if (!uri) { return; } Kitify.addedStyles[style] = uri; return new Promise(function (resolve, reject) { var tag = document.createElement('link'); tag.id = style + '-css'; tag.rel = 'stylesheet'; tag.href = uri; tag.type = 'text/css'; tag.media = 'all'; tag.onload = function () { resolve(style); }; tag.onerror = function () { reject(`Can not load css file "${uri}"`); } document.head.appendChild(tag); }); }, loadScriptAsync: function (script, uri, callback, async) { if (Kitify.addedScripts.hasOwnProperty(script)) { return script; } if (!uri) { return; } Kitify.addedScripts[script] = uri; return new Promise(function (resolve, reject) { var tag = document.createElement('script'); tag.src = uri; tag.id = script + '-js'; tag.async = async; tag.onload = function () { resolve(script); if ("function" == typeof callback && "number" != typeof callback.nodeType) { callback(); } }; tag.onerror = function () { reject(`Can not load javascript file "${uri}"`); if ("function" == typeof callback && "number" != typeof callback.nodeType) { callback(); } } document.head.appendChild(tag); }); }, detectWidgetsNotInHeader: function (){ let itemDetected = ['.elementor-widget-icon-list', '.main-color', '.elementor-icon', '.elementor-heading-title', '.elementor-widget-text-editor', '.elementor-widget-divider', '.elementor-icon-list-item', '.elementor-social-icon', '.elementor-button', '.kitify-nav-wrap', '.kitify-nav', '.menu-item-link-depth-0']; let _q = []; itemDetected.forEach( _item => _q.push('.kitify-nav__sub ' + _item) ); document.querySelectorAll(_q.join()).forEach( _item => _item.classList.add('ignore-docs-style') ); $('.elementor-widget-icon-list .elementor-icon-list-item').each(function (){ var $child_a = $('>a', $(this)), _href = $child_a.attr('href'); if($(this).closest('.kitify-nav__sub').length && $(this).closest('.menu-item.need-check-active').length){ if(window.location.href == _href){ $(this).addClass('current-menu-item') } } }) }, isInViewport: function (element) { let bounding = element.getBoundingClientRect(); return (bounding.top >= -element.offsetHeight && bounding.left >= -element.offsetWidth && bounding.right <= (window.innerWidth || document.documentElement.clientWidth) + element.offsetWidth && bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) + element.offsetHeight ) }, LazyLoad: function (){ var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var _defaultConfig$option = $.extend({}, { rootMargin: '50px', threshold: 0, load: function load(element) { var base_src = element.getAttribute('data-src') || element.getAttribute('data-lazy') || element.getAttribute('data-lazy-src') || element.getAttribute('data-lazy-original'), base_srcset = element.getAttribute('data-src') || element.getAttribute('data-lazy-srcset'), base_sizes = element.getAttribute('data-sizes') || element.getAttribute('data-lazy-sizes'); if (base_src) { element.src = base_src; } if (base_srcset) { element.srcset = base_srcset; } if (base_sizes) { element.sizes = base_sizes; } if (element.getAttribute('data-background-image')) { element.style.backgroundImage = 'url("' + element.getAttribute('data-background-image') + '")'; } element.setAttribute('data-element-loaded', true); if (element.classList.contains('jetpack-lazy-image')) { element.classList.add('jetpack-lazy-image--handled'); } }, complete: function (elm) {} }, options), rootMargin = _defaultConfig$option.rootMargin, threshold = _defaultConfig$option.threshold, load = _defaultConfig$option.load, complete = _defaultConfig$option.complete; // // If initialized, then disconnect the observer var _target_cache = false, _counter = 0; function onIntersection(load) { return function (entries, observer) { entries.forEach(function (entry) { if(entry.isIntersecting){ if(_counter > 7){ _counter = 0; } if(_target_cache !== entry.target.offsetTop){ _counter = 0; _target_cache = entry.target.offsetTop; } else{ _counter++; } observer.unobserve(entry.target); entry.target.style.setProperty('--effect-delay', _counter); load(entry.target); } }); }; } var observer = void 0; if ("IntersectionObserver" in window) { observer = new IntersectionObserver(onIntersection(load), { rootMargin: rootMargin, threshold: threshold }); } return { observe: function observe() { if(!selector){ return; } for (var i = 0; i < selector.length; i++) { if(selector[i].getAttribute('data-element-loaded') === 'true'){ continue; } if (observer) { observer.observe(selector[i]); continue; } load(selector[i]); } complete(selector); } }; }, elementorFrontendInit: function ($container, reinit_global_trigger) { if( typeof window.elementorFrontend.hooks === "undefined"){ return; } Kitify.detectWidgetsNotInHeader(); if(reinit_global_trigger){ $(window).trigger('elementor/frontend/init'); } $container.removeClass('need-reinit-js'); $container.find('[data-element_type]').each(function () { var $this = $(this), elementType = $this.data('element_type'); if (!elementType) { return; } try { if ('widget' === elementType) { elementType = $this.data('widget_type'); window.elementorFrontend.hooks.doAction('frontend/element_ready/widget', $this, $); } window.elementorFrontend.hooks.doAction('frontend/element_ready/global', $this, $); window.elementorFrontend.hooks.doAction('frontend/element_ready/' + elementType, $this, $); } catch (err) { Kitify.log(err); $this.remove(); return false; } }); }, initAnimationsHandlers: function ($selector) { $selector.find('[data-element_type]').each(function () { var $this = $(this), elementType = $this.data('element_type'); if (!elementType) { return; } window.elementorFrontend.hooks.doAction('frontend/element_ready/global', $this, $); }); }, hamburgerPanel: function ($scope) { var wid = $scope.data('id'), _wid_tpl_id = $scope.find('.kitify-hamburger-panel__content').attr('data-template-id'), _need_add_remove = true, $wContent = $scope.find('>.elementor-widget-container').clone(); if( !!$scope.data('hamburgerTemplateId') && ( _wid_tpl_id == $scope.data('hamburgerTemplateId') ) ){ _need_add_remove = false; } else{ $scope.data('hamburgerTemplateId', _wid_tpl_id); } if ($('.kitify-site-wrapper > .elementor-location-header >.kitify-burger-wrapall').length == 0) { $('<div/>').addClass('kitify-burger-wrapall').appendTo($('.kitify-site-wrapper > .elementor-location-header')); } var $burger_wrap_all = $('.kitify-burger-wrapall'); if ( _need_add_remove && $('.elementor-element-' + wid, $burger_wrap_all).length) { $('.elementor-element-' + wid, $burger_wrap_all).remove(); } var $new_scope = $scope; if($scope.closest('.elementor-location-header').length){ if(_need_add_remove){ $('<div/>').addClass('elementor-element elementor-element-' + wid).append($wContent).appendTo($burger_wrap_all); } $('.kitify.elementor-element-' + wid + ' .kitify-hamburger-panel__instance').remove(); $new_scope = $('.elementor-element-' + wid, $burger_wrap_all); $('.kitify-hamburger-panel__toggle', $new_scope).remove(); } var $panel = $('.kitify-hamburger-panel', $new_scope), $toggleButton = $('.kitify-hamburger-panel__toggle', $scope), $instance = $('.kitify-hamburger-panel__instance', $new_scope), $cover = $('.kitify-hamburger-panel__cover', $new_scope), $inner = $('.kitify-hamburger-panel__inner', $new_scope), $closeButton = $('.kitify-hamburger-panel__close-button', $new_scope), $html = $('html'), settings = $panel.data('settings') || {}, $panelInstance = $('.elementor-element-' + wid + ' .kitify-hamburger-panel'); if (!settings['ajaxTemplate']) { Kitify.elementorFrontendInit($inner, false); } $toggleButton.on('click', function (e) { e.preventDefault(); if (!$panel.hasClass('open-state')) { $panelInstance.addClass('open-state'); $html.addClass('kitify-hamburger-panel-visible'); Kitify.initAnimationsHandlers($inner); } else { $panelInstance.removeClass('open-state'); $html.removeClass('kitify-hamburger-panel-visible'); } }); $closeButton.on('click', function (e) { e.preventDefault(); if (!$panel.hasClass('open-state')) { $panelInstance.addClass('open-state'); $html.addClass('kitify-hamburger-panel-visible'); Kitify.initAnimationsHandlers($inner); } else { $panelInstance.removeClass('open-state'); $html.removeClass('kitify-hamburger-panel-visible'); } }); $(document).on('click.kitifyHamburgerPanel', function (event) { if (($(event.target).closest('.kitify-hamburger-panel__toggle').length || $(event.target).closest('.kitify-hamburger-panel__instance').length) && !$(event.target).closest('.kitify-hamburger-panel__cover').length ) { return; } if (!$panel.hasClass('open-state')) { return; } $('.elementor-element-' + wid + ' .kitify-hamburger-panel').removeClass('open-state'); if (!$(event.target).closest('.kitify-hamburger-panel__toggle').length) { $html.removeClass('kitify-hamburger-panel-visible'); } event.stopPropagation(); }); }, wooCard: function ($scope) { if (window.KitifyEditor && window.KitifyEditor.activeSection) { let section = window.KitifyEditor.activeSection, isCart = -1 !== ['cart_list_style', 'cart_list_items_style', 'cart_buttons_style'].indexOf(section); $('.widget_shopping_cart_content').empty(); $(document.body).trigger('wc_fragment_refresh'); } var $target = $('.kitify-cart', $scope), $toggle = $('.kitify-cart__heading-link', $target), settings = $target.data('settings'), firstMouseEvent = true; switch (settings['triggerType']) { case 'hover': hoverType(); break; case 'click': clickType(); break; } $target.on('click', '.kitify-cart__close-button', function (event) { if (!$target.hasClass('kitify-cart-open-proccess')) { $target.toggleClass('kitify-cart-open'); } }); function hoverType() { var scrollOffset = 0; if ('ontouchend' in window || 'ontouchstart' in window) { $target.on('touchstart', function (event) { scrollOffset = $(window).scrollTop(); }); $target.on('touchend', function (event) { if (scrollOffset !== $(window).scrollTop()) { return false; } var $this = $(this); if ($this.hasClass('kitify-cart-open-proccess')) { return; } setTimeout(function () { $this.toggleClass('kitify-cart-open'); }, 10); }); $(document).on('touchend', function (event) { if ($(event.target).closest($target).length) { return; } if ($target.hasClass('kitify-cart-open-proccess')) { return; } if (!$target.hasClass('kitify-cart-open')) { return; } $target.removeClass('kitify-cart-open'); }); } else { $target.on('mouseenter mouseleave', function (event) { if (firstMouseEvent && 'mouseleave' === event.type) { return; } if (firstMouseEvent && 'mouseenter' === event.type) { firstMouseEvent = false; } if (!$(this).hasClass('kitify-cart-open-proccess')) { $(this).toggleClass('kitify-cart-open'); } }); } } function clickType() { $toggle.on('click', function (event) { event.preventDefault(); if (!$target.hasClass('kitify-cart-open-proccess')) { $target.toggleClass('kitify-cart-open'); } }); } }, wooGallery: function ($scope) { if (Kitify.isEditMode()) { $('.woocommerce-product-gallery', $scope).wc_product_gallery(); } var centerdots_cb = function () { if ($scope.find('.flex-viewport').length) { $scope.find('.woocommerce-product-gallery').css('--singleproduct-thumbs-height', $scope.find('.flex-viewport').height() + 'px'); if ($scope.find('.woocommerce-product-gallery__trigger').length) { $scope.find('.woocommerce-product-gallery__trigger').appendTo($scope.find('.flex-viewport')); } if ($('.la-custom-badge', $scope).length) { $('.la-custom-badge', $scope).prependTo($scope.find('.flex-viewport')); } if ($('.woocommerce-product-gallery__actions', $scope).length) { $('.woocommerce-product-gallery__actions', $scope).prependTo($scope.find('.flex-viewport')); } } var $nav = $scope.find('.flex-direction-nav'); if ($nav.length && $scope.find('.flex-viewport').length) { $nav.appendTo($scope.find('.flex-viewport')) } var $thumbs = $scope.find('.flex-control-thumbs').get(0); if (typeof $thumbs === "undefined" || $scope.find('.kitify-product-images').hasClass('layout-type-wc')) { return; } var pos = {top: 0, left: 0, x: 0, y: 0}; var mouseDownHandler = function (e) { $thumbs.style.cursor = 'grabbing'; $thumbs.style.userSelect = 'none'; pos = { left: $thumbs.scrollLeft, top: $thumbs.scrollTop, // Get the current mouse position x: e.clientX, y: e.clientY, }; document.addEventListener('mousemove', mouseMoveHandler); document.addEventListener('mouseup', mouseUpHandler); }; var mouseMoveHandler = function (e) { // How far the mouse has been moved const dx = e.clientX - pos.x; const dy = e.clientY - pos.y; // Scroll the element $thumbs.scrollTop = pos.top - dy; $thumbs.scrollLeft = pos.left - dx; }; var mouseUpHandler = function () { $thumbs.style.cursor = 'grab'; $thumbs.style.removeProperty('user-select'); document.removeEventListener('mousemove', mouseMoveHandler); document.removeEventListener('mouseup', mouseUpHandler); }; // Attach the handler $thumbs.addEventListener('mousedown', mouseDownHandler); } setTimeout(centerdots_cb, 300); function flexdestroy($els) { $els.each(function () { var $el = jQuery(this); var $elClean = $el.clone(); $elClean.find('.flex-viewport').children().unwrap(); $elClean.find('img.zoomImg, .woocommerce-product-gallery__trigger').remove(); $elClean .removeClass('flexslider') .find('.clone, .flex-direction-nav, .flex-control-nav') .remove() .end() .find('*').removeAttr('style').removeClass(function (index, css) { // If element is SVG css has an Object inside (?) if (typeof css === 'string') { return (css.match(/\bflex\S+/g) || []).join(' '); } }); $elClean.insertBefore($el); $el.remove(); }); } if ($scope.find('.kitify-product-images').hasClass('layout-type-5') || $scope.find('.kitify-product-images').hasClass('layout-type-6')) { flexdestroy($scope.find('.kitify-product-images')); } var $gallery_target = $scope.find('.woocommerce-product-gallery'); var data_columns = parseInt($gallery_target.data('columns')); if($scope.find('.kitify-product-images').hasClass('layout-type-4')){ data_columns = parseInt($gallery_target.closest('.elementor-kitify-wooproduct-images').css('--singleproduct-image-column')); } if ($gallery_target.find('.woocommerce-product-gallery__image').length <= data_columns) { $gallery_target.addClass('center-thumb'); if($scope.find('.kitify-product-images').hasClass('layout-type-4')){ flexdestroy($scope.find('.kitify-product-images')); $gallery_target = $scope.find('.woocommerce-product-gallery'); } } if( $scope.find('.kitify-product-images').hasClass('layout-type-5') || $scope.find('.kitify-product-images').hasClass('layout-type-6') ){ $scope.find('.woocommerce-product-gallery__image a').attr('data-elementor-open-lightbox', 'yes'); $scope.find('.woocommerce-product-gallery__image a').attr('data-elementor-lightbox-slideshow', $scope.data('id')); } else{ $scope.find('.woocommerce-product-gallery__image a').attr('data-elementor-open-lightbox', 'no'); } $scope.find('.woocommerce-product-gallery__image').each(function (){ if( $(this).find('.zoominner').length == 0 ){ $(this).wrapInner('<div class="zoomouter"><div class="zoominner"></div></div>'); } }) var initZoom = function (zoomTarget) { var zoom_enabled = $.isFunction($.fn.zoom) && wc_single_product_params.zoom_enabled; if (!zoom_enabled) { return; } var galleryWidth = $gallery_target.width(), zoomEnabled = false, zoom_options; if($scope.find('.kitify-product-images').hasClass('layout-type-4')){ galleryWidth = $(zoomTarget).width() } $(zoomTarget).each(function (index, target) { var image = $(target).find('img'); if (image.data('large_image_width') > galleryWidth) { zoomEnabled = true; return false; } }); // But only zoom if the img is larger than its container. if (zoomEnabled) { try { zoom_options = $.extend({ touch: false }, wc_single_product_params.zoom_options); } catch (ex) { zoom_options = { touch: false }; } if ('ontouchstart' in document.documentElement) { zoom_options.on = 'click'; } zoomTarget.trigger('zoom.destroy'); zoomTarget.zoom(zoom_options); } } initZoom($gallery_target.find('.woocommerce-product-gallery__image .zoominner')); }, wooTabs: function ($scope) { var $tabs = $scope.find('.wc-tabs-wrapper').first(); if ($tabs) { $tabs.wrapInner('<div class="kitify-wc-tabs--content"></div>'); $tabs.find('.wc-tabs').wrapAll('<div class="kitify-wc-tabs--controls"></div>'); $tabs.find('.kitify-wc-tabs--controls').prependTo($tabs); $tabs.find('.wc-tab').wrapInner('<div class="tab-content"></div>'); $tabs.find('.wc-tab').each(function () { var _html = $('#' + $(this).attr('aria-labelledby')).html(); $(this).prepend('<div class="wc-tab-title">' + _html + '</div>'); }); $('.wc-tab-title a', $tabs).wrapInner('<span></span>'); $('.wc-tab-title a', $tabs).on('click', function (e) { e.preventDefault(); $tabs.find('.wc-tabs').find('li[aria-controls="' + $(this).attr('href').replace('#', '') + '"]').toggleClass('active').siblings().removeClass('active'); $(this).closest('.wc-tab').toggleClass('active').siblings().removeClass('active'); }); $('.wc-tabs li a', $tabs).on('click', function (e) { var $wrapper = $(this).closest('.wc-tabs-wrapper, .woocommerce-tabs'); $wrapper.find($(this).attr('href')).addClass('active').siblings().removeClass('active'); }); $('.wc-tabs li', $tabs).removeClass('active'); $('.wc-tab-title a', $tabs).first().trigger('click'); } }, SearchAnimate: function ($scope) { var $target = $scope.find('#js_header_search_modal'); if (!$target.length) { return; } $("#js_header_search_modal").animatedModal({ animatedIn: 'slideInDown', animatedOut: 'slideOutUp', beforeOpen: function() { window.setTimeout(function () { $(".header-search").addClass('animate'); }, 300); window.setTimeout(function () { $(".header-search").addClass('animate-line'); }, 1000); }, }); }, animatedBoxHandler: function ($scope) { var $target = $scope.find('.kitify-animated-box'), toogleEvents = 'mouseenter mouseleave', scrollOffset = $(window).scrollTop(), firstMouseEvent = true; if (!$target.length) { return; } if ('ontouchend' in window || 'ontouchstart' in window) { $target.on('touchstart', function (event) { scrollOffset = $(window).scrollTop(); }); $target.on('touchend', function (event) { if (scrollOffset !== $(window).scrollTop()) { return false; } if (!$(this).hasClass('flipped-stop')) { $(this).toggleClass('flipped'); } }); } else { $target.on(toogleEvents, function (event) { if (firstMouseEvent && 'mouseleave' === event.type) { return; } if (firstMouseEvent && 'mouseenter' === event.type) { firstMouseEvent = false; } if (!$(this).hasClass('flipped-stop')) { $(this).toggleClass('flipped'); } }); } }, ajaxTemplateHelper: { need_reinit_js : false, template_processed : {}, template_processed_count : 0, template_loaded : [], total_template : 0, processInsertData: function ($el, templateContent, template_id){ Kitify.ajaxTemplateHelper.template_processed_count++; if (templateContent) { $el.html(templateContent); if($el.find('div[data-kitify_ajax_loadtemplate]:not(.template-loaded,.is-loading)').length){ Kitify.log('found template in ajax content'); Kitify.ajaxTemplateHelper.init(); } } if(Kitify.ajaxTemplateHelper.template_processed_count >= Kitify.ajaxTemplateHelper.total_template && Kitify.ajaxTemplateHelper.need_reinit_js){ Kitify.ajaxTemplateHelper.need_reinit_js = false; Promise.all(Kitify.addedAssetsPromises).then(function (value) { // $(window).trigger('elementor/frontend/init'); Kitify.elementorFrontendInit($('.need-reinit-js[data-kitify_ajax_loadtemplate="true"]'), false); $('.elementor-motion-effects-element').trigger('resize'); $('body').trigger('jetpack-lazy-images-load'); //Kitify.log('Kitify.addedAssetsPromises --- FINISHED'); }, function (reason){ Kitify.log(`An error occurred while insert the asset resources, however we still need to insert content. Reason detail: "${reason}"`); // $(window).trigger('elementor/frontend/init'); Kitify.elementorFrontendInit($('.need-reinit-js[data-kitify_ajax_loadtemplate="true"]'), false); $('.elementor-motion-effects-element').trigger('resize'); $('body').trigger('jetpack-lazy-images-load'); Kitify.log('Kitify.addedAssetsPromises --- ERROR'); }); } $(document).trigger('kitify/ajax-load-template/after', { target_id: template_id, contentHolder: $el, parentContainer: $el, response: templateContent }); }, templateRenderCallback: function ( response, template_id ){ var templateContent = response['template_content'], templateScripts = response['template_scripts'], templateStyles = response['template_styles'], template_metadata = response['template_metadata']; for (var scriptHandler in templateScripts) { if($( '#' + scriptHandler + '-js').length == 0) { Kitify.addedAssetsPromises.push(Kitify.loadScriptAsync(scriptHandler, templateScripts[scriptHandler], '', true)); } } for (var styleHandler in templateStyles) { if($( '#' + styleHandler + '-css').length == 0) { Kitify.addedAssetsPromises.push(Kitify.loadStyle(styleHandler, templateStyles[styleHandler])); } } document.querySelectorAll('body:not(.elementor-editor-active) div[data-kitify_ajax_loadtemplate][data-cache-id="' + template_id + '"]:not(.template-loaded)').forEach(function (elm) { elm.classList.remove('is-loading'); elm.classList.add('template-loaded'); elm.classList.add('need-reinit-js'); Kitify.ajaxTemplateHelper.processInsertData($(elm), templateContent, template_id); }); var wpbar = document.querySelectorAll('#wp-admin-bar-elementor_edit_page ul'); if (wpbar && typeof template_metadata['title'] !== "undefined") { setTimeout(function () { var _tid = 'wp-admin-bar-elementor_edit_doc_'+template_metadata['id']; if($('#'+_tid).length == 0){ $('<li id="'+_tid+'" class="elementor-general-section"><a class="ab-item" title="'+template_metadata['title']+'" data-title="'+template_metadata['title']+'" href="' + template_metadata['href'] + '"><span class="elementor-edit-link-title">' + template_metadata['title'] + '</span><span class="elementor-edit-link-type">' + template_metadata['sub_title'] + '</span></a></li>').prependTo($(wpbar)); } }, 2000); } }, init: function (){ if(KitifySettings.isElementorAdmin){ /** do not run if current context is editor **/ return; } Kitify.ajaxTemplateHelper.need_reinit_js = false; Kitify.ajaxTemplateHelper.template_loaded = []; Kitify.ajaxTemplateHelper.template_processed_count = 0; Kitify.ajaxTemplateHelper.total_template = 0; Kitify.ajaxTemplateHelper.template_processed = {}; var templates = document.querySelectorAll('body:not(.elementor-editor-active) div[data-kitify_ajax_loadtemplate]:not(.template-loaded)'); if (templates.length) { var template_ids = []; var template_exist_ids = []; templates.forEach(function (el) { if (!el.classList.contains('is-loading') && !el.classList.contains('template-loaded')) { el.classList.add('is-loading'); var _cache_key = el.getAttribute('data-template-id'); if (!template_ids.includes(_cache_key)) { var exits_nodes = document.querySelectorAll('.elementor.elementor-'+_cache_key+'[data-elementor-type]:not([data-elementor-title])'); if(exits_nodes.length == 0){ template_ids.push(_cache_key); } else{ template_exist_ids.push(_cache_key); } } el.setAttribute('data-cache-id', _cache_key); } }); var arr_ids = [], _idx1 = 0, _idx2 = 0, _bk = 6; var ajaxCalling = function (template_ids){ var _ajax_data_sending = { 'action': 'kitify_ajax', '_nonce': window.KitifySettings.ajaxNonce, 'actions': JSON.stringify({ 'elementor_template' : { 'action': 'elementor_template', 'data': { 'template_ids': template_ids, 'current_url': window.location.href, 'current_url_no_search': window.location.href.replace(window.location.search, ''), 'dev': window.KitifySettings.devMode } } }) }; if(KitifySettings.useFrontAjax == 'true'){ _ajax_data_sending['kitify-ajax'] = 'yes'; delete _ajax_data_sending['action']; } $.ajax({ type: KitifySettings.useFrontAjax == 'true' ? 'GET' : 'POST', url: KitifySettings.useFrontAjax == 'true' ? window.location.href : window.KitifySettings.ajaxUrl, dataType: 'json', data: _ajax_data_sending, success: function (resp, textStatus, jqXHR) { var responses = resp.data.responses.elementor_template.data; $.each( responses, function( templateId, response ) { var cached_key = 'kitifyTpl_' + templateId; var browserCacheKey = Kitify.localCache.cache_key + '_' + Kitify.localCache.hashCode(templateId); Kitify.localCache.set(cached_key, response); Kitify.ajaxTemplateHelper.templateRenderCallback(response, templateId); try{ //Kitify.log('setup browser cache for ' + browserCacheKey); localStorage.setItem(browserCacheKey, JSON.stringify(response)); localStorage.setItem(browserCacheKey + ':ts', Date.now()); } catch (ajax_ex1){ Kitify.log('Cannot setup browser cache', ajax_ex1); } }); } }); } template_exist_ids.forEach(function (templateId){ var exist_tpl = document.querySelector('.elementor.elementor-'+templateId+'[data-elementor-type]'); Kitify.ajaxTemplateHelper.need_reinit_js = true; Kitify.ajaxTemplateHelper.templateRenderCallback({ 'template_content' : exist_tpl.outerHTML, 'template_scripts' : [], 'template_styles' : [], 'template_metadata' : {}, }, templateId); }); template_ids.forEach(function (templateId){ var cached_key = 'kitifyTpl_' + templateId; var cached_key2 = 'kitifyTplExist_' + templateId; if(Kitify.localCache.exist(cached_key2)){ if(Kitify.localCache.exist(cached_key)){ Kitify.ajaxTemplateHelper.need_reinit_js = true; Kitify.ajaxTemplateHelper.templateRenderCallback(Kitify.localCache.get(cached_key), templateId); } return; } Kitify.localCache.set(cached_key2, 'yes'); if(Kitify.localCache.exist(cached_key)){ Kitify.ajaxTemplateHelper.need_reinit_js = true; Kitify.ajaxTemplateHelper.templateRenderCallback(Kitify.localCache.get(cached_key), templateId); } else{ $(document).trigger('kitify/ajax-load-template/before', { target_id: templateId }); var browserCacheKey = Kitify.localCache.cache_key + '_' + Kitify.localCache.hashCode(templateId); var expiry = Kitify.localCache.timeout; try{ var browserCached = localStorage.getItem(browserCacheKey); var browserWhenCached = localStorage.getItem(browserCacheKey + ':ts'); if (browserCached !== null && browserWhenCached !== null) { var age = (Date.now() - browserWhenCached) / 1000; if (age < expiry) { //Kitify.log(`render from cache for ID: ${templateId} | Cache Key: ${browserCacheKey}`); Kitify.ajaxTemplateHelper.need_reinit_js = true; Kitify.ajaxTemplateHelper.templateRenderCallback(JSON.parse(browserCached), templateId); return; } else { //Kitify.log(`clear browser cache key for ID: ${templateId} | Cache Key: ${browserCacheKey}`); // We need to clean up this old key localStorage.removeItem(browserCacheKey); localStorage.removeItem(browserCacheKey + ':ts'); } } //Kitify.log('run ajaxCalling() for ' + templateId); _idx1++; if(_idx1 > _bk){ _idx1 = 0; _idx2++; } if( "undefined" == typeof arr_ids[_idx2] ) { arr_ids[_idx2] = []; } arr_ids[_idx2].push(templateId); Kitify.ajaxTemplateHelper.template_loaded.push(templateId); } catch (ajax_ex) { Kitify.log('Cannot setup browser cache ajaxCalling() for ' + templateId); _idx1++; if(_idx1 == _bk){ _idx1 = 0; _idx2++; } if( "undefined" == typeof arr_ids[_idx2] ) { arr_ids[_idx2] = []; } arr_ids[_idx2].push(templateId); Kitify.ajaxTemplateHelper.template_loaded.push(templateId); } } }); Kitify.ajaxTemplateHelper.total_template = templates.length; if(arr_ids.length){ Kitify.ajaxTemplateHelper.need_reinit_js = true; arr_ids.forEach(function (arr_id){ ajaxCalling(arr_id); }); } } } }, }; var KitifyTools = { getElementPercentageSeen: function( $element, offset ) { var offsetSettings = offset || {}, startOffset = offsetSettings.start || 0, endOffset = offsetSettings.end || 0, viewportHeight = $( window ).height(), viewportStartOffset = viewportHeight * startOffset / 100, viewportEndOffset = viewportHeight * endOffset / 100, scrollTop = $( window ).scrollTop(), elementOffsetTop = $element.offset().top, elementHeight = $element.height(), percentage; percentage = (scrollTop + viewportHeight + viewportStartOffset - elementOffsetTop) / (viewportHeight + viewportStartOffset + viewportEndOffset + elementHeight); percentage = Math.min( 100, Math.max( 0, percentage * 100 ) ); return parseFloat( percentage.toFixed( 2 ) ); }, isRTL: function() { return $( 'body' ).hasClass( 'rtl' ); }, inArray: function( needle, haystack ) { return -1 < haystack.indexOf( needle ); }, debounce: function( threshold, callback ) { var timeout; return function debounced( $event ) { function delayed() { callback.call( this, $event ); timeout = null; } if ( timeout ) { clearTimeout( timeout ); } timeout = setTimeout( delayed, threshold ); }; }, getObjectNextKey: function( object, key ) { var keys = Object.keys( object ), idIndex = keys.indexOf( key ), nextIndex = idIndex += 1; if( nextIndex >= keys.length ) { //we're at the end, there is no next return false; } var nextKey = keys[ nextIndex ]; return nextKey; }, getObjectPrevKey: function( object, key ) { var keys = Object.keys( object ), idIndex = keys.indexOf( key ), prevIndex = idIndex -= 1; if ( 0 > idIndex ) { //we're at the end, there is no next return false; } var prevKey = keys[ prevIndex ]; return prevKey; }, getObjectFirstKey: function( object ) { return Object.keys( object )[0]; }, getObjectLastKey: function( object ) { return Object.keys( object )[ Object.keys( object ).length - 1 ]; }, getObjectValues: function( object ) { var values; if ( !Object.values ) { values = Object.keys( object ).map( function( e ) { return object[e] } ); return values; } return Object.values( object ); }, validateEmail: function( email ) { var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; return re.test( email ); }, mobileAndTabletcheck: function() { var check = false; (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera); return check; }, addThousandCommaSeparator: function ( nStr, separator ) { var nStr = nStr + '', separator = separator.toString().replace(/[0-9]/g, ''), x = nStr.split('.'), x1 = x[0], x2 = x.length > 1 ? '.' + x[1] : '', rgx = /(\d+)(\d{3})/; if ( '' === separator ) { return nStr; } while ( rgx.test(x1) ) { x1 = x1.replace(rgx, '$1' + separator + '$2'); } return x1 + x2; }, getElementorElementSettings: function( $scope ) { if ( window.elementorFrontend && window.elementorFrontend.isEditMode() && $scope.hasClass( 'elementor-element-edit-mode' ) ) { return KitifyTools.getEditorElementSettings( $scope ); } return $scope.data( 'settings' ) || {}; }, getEditorElementSettings: function( $scope ) { var modelCID = $scope.data( 'model-cid' ), elementData; if ( ! modelCID ) { return {}; } if ( ! elementor.hasOwnProperty( 'config' ) ) { return {}; } if ( ! elementor.config.hasOwnProperty( 'elements' ) ) { return {}; } if ( ! elementor.config.elements.hasOwnProperty( 'data' ) ) { return {}; } elementData = elementor.config.elements.data[ modelCID ]; if ( ! elementData ) { return {}; } return elementData.toJSON(); } }; $(window).on('elementor/frontend/init', function () { elementorFrontend.hooks.addAction('frontend/element_ready/kitify-advanced-carousel.default', function ($scope) { Kitify.initCarousel($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-slides.default', function ($scope) { Kitify.initCarousel($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-posts.default', function ($scope) { Kitify.initCarousel($scope); Kitify.initMasonry($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-portfolio.default', function ($scope) { Kitify.initCarousel($scope); Kitify.initMasonry($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-images-layout.default', function ($scope) { Kitify.initCarousel($scope); Kitify.initMasonry($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-team-member.default', function ($scope) { Kitify.initCarousel($scope); Kitify.initMasonry($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-testimonials.default', function ($scope) { Kitify.initCarousel($scope); Kitify.initMasonry($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-banner-list.default', function ($scope) { Kitify.initCarousel($scope); Kitify.initMasonry($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-instagram-feed.default', function ($scope) { Kitify.initCarousel($scope); Kitify.initMasonry($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-wooproduct-datatabs.default', function ($scope) { $scope.foundation(); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-woo-categories.default', function ($scope) { Kitify.initCarousel($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-scroll-image.default', function ($scope) { Kitify.ImageScrollHandler($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-hamburger-panel.default', function ($scope) { Kitify.hamburgerPanel($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-menucart.default', function ($scope) { Kitify.wooCard($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-animated-box.default', function ($scope) { Kitify.animatedBoxHandler($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-search.default', function ($scope) { Kitify.SearchAnimate($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-wooproducts.default', function ($scope) { Kitify.initCarousel($scope); Kitify.initMasonry($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-wooproduct-images.default', function ($scope) { Kitify.wooGallery($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-wooproduct-datatabs.default', function ($scope) { Kitify.wooTabs($scope); }); elementorFrontend.hooks.addAction('frontend/element_ready/kitify-image-comparison.default', function ($scope) { var $target = $scope.find( '.kitify-image-comparison__instance' ), instance = null, imageComparisonItems = $( '.kitify-image-comparison__container', $target ), settings = $target.data( 'settings' ), elementId = $scope.data( 'id' ); if ( ! $target.length ) { return; } window.juxtapose.scanPage( '.kitify-juxtapose' ); Kitify.initCarousel( $scope ); }); window.elementorFrontend.hooks.addAction('frontend/element_ready/section', function ($scope) { if( $scope.hasClass('elementor-top-section') ) { $scope.trigger('kitify/section/calculate-container-width'); } }); Kitify.initCustomHandlers(); }); window.Kitify = Kitify; window.KitifyTools = KitifyTools; $.ajaxPrefilter(function (options, originalOptions, jqXHR) { if (options.cache) { //Here is our identifier for the cache. Maybe have a better, safer ID (it depends on the object string representation here) ? // on $.ajax call we could also set an ID in originalOptions var id = Kitify.removeURLParameter(originalOptions.url, '_') + ("undefined" !== typeof originalOptions.ajax_request_id ? JSON.stringify(originalOptions.ajax_request_id) : "undefined" !== typeof originalOptions.data ? JSON.stringify(originalOptions.data) : ''); id = Kitify.localCache.hashCode(id.replace(/null$/g, '')); options.cache = false; options.beforeSend = function () { if (!Kitify.localCache.exist(id)) { jqXHR.promise().done(function (data, textStatus) { Kitify.localCache.set(id, data); }); } return true; }; } }); $.ajaxTransport("+*", function (options, originalOptions, jqXHR) { //same here, careful because options.url has already been through jQuery processing var id = Kitify.removeURLParameter(originalOptions.url, '_') + ("undefined" !== typeof originalOptions.ajax_request_id ? JSON.stringify(originalOptions.ajax_request_id) : "undefined" !== typeof originalOptions.data ? JSON.stringify(originalOptions.data) : ''); options.cache = false; id = Kitify.localCache.hashCode(id.replace(/null$/g, '')); if (Kitify.localCache.exist(id)) { return { send: function (headers, completeCallback) { setTimeout(function () { completeCallback(200, "OK", [Kitify.localCache.get(id)]); }, 50); }, abort: function () { /* abort code, nothing needed here I guess... */ } }; } }); }(jQuery, window.elementorFrontend)); (function ($) { class _eContainerHandler extends elementorModules.frontend.handlers.Base { _editorInit(){ setTimeout( () => { if(this.$element.data('nesting-level') > 0){ this.$element.removeClass('e-root-container elementor-top-section'); } else{ this.$element.addClass('e-root-container elementor-top-section'); this._FullwidthRight(); } }, 50); } _FullwidthRight() { const $scope = this.$element; if( $scope.hasClass('elementor-top-section') ) { $scope.trigger('kitify/section/calculate-container-width'); } } bindEvents() { if(this.isEdit){ this._editorInit() } else{ this._FullwidthRight() } } } $( window ).on( 'elementor/frontend/init', () => { elementorFrontend.hooks.addAction( 'frontend/element_ready/container', ( $element ) => { elementorFrontend.elementsHandler.addHandler( _eContainerHandler, { $element, } ); } ); } ); }(jQuery));