jQuery(document).ready(function ($) { if (fifuImageVars.fifu_block) { jQuery('body').on('contextmenu', 'img', function (e) { return false; }); } // forwarding if (fifuImageVars.fifu_redirection && fifuImageVars.fifu_forwarding_url && !fifuImageVars.fifu_is_front_page) { attr = fifuImageVars.fifu_lazy ? 'data-src' : 'src'; if (fifuImageVars.fifu_main_image_url) jQuery('img[' + attr + '*="' + fifu_no_protocol(fifuImageVars.fifu_main_image_url) + '"]').wrap(''); else jQuery('img[srcset*="' + fifu_no_protocol(fifuImageVars.fifu_local_image_url) + '"]').wrap(''); } // lazy load if (fifuImageVars.fifu_lazy) fifu_lazy(); else { // no WordPress lazy load for the top images jQuery('img').each(function (index) { if (jQuery(this).offset().top < jQuery(window).height()) { jQuery(this).removeAttr('loading'); } }); } // for all images on home/shop if (fifuImageVars.fifu_should_crop) { setTimeout(function () { cropImage(); }, parseInt(fifuImageVars.fifu_crop_delay)); } // woocommerce lightbox/zoom disableClick($); disableLink($); // zoomImg setTimeout(function () { jQuery('img.zoomImg').css('z-index', ''); // Check if the zoomImg is missing an alt attribute and if its preceding sibling is an image if (!jQuery('img.zoomImg').attr('alt')) { const $zoomImg = jQuery('img.zoomImg'); const $precedingImg = $zoomImg.prev('img'); if ($precedingImg.length > 0) { $zoomImg.attr('alt', $precedingImg.attr('alt')); } } }, 1000); jQuery('img[height=1]').each(function (index) { if (jQuery(this).attr('width') != 1) jQuery(this).css('position', 'relative'); }); // load more buttons + lazy load jQuery('a.btn-load-more').on('click', function () { fifu_lazy(); }); }); jQuery(document).ajaxComplete(function ($) { // image not found jQuery('div.woocommerce-product-gallery img').on('error', function () { jQuery(this)[0].src = fifuImageVars.fifu_error_url; }); }); jQuery(window).on('ajaxComplete', function () { if (fifuImageVars.fifu_lazy) fifu_lazy(); // timeout necessary (load more button of Bimber) setTimeout(function () { if (fifuImageVars.fifu_slider) fifu_slider = fifu_load_slider(); }, 300); }); jQuery(document).ajaxSuccess(function ($) { if (fifuImageVars.fifu_lazy) fifu_lazy_ajax(); }); var observer = new MutationObserver(function (mutations) { if (fifuImageVars.fifu_lazy) { mutations.forEach(function (mutation) { mutation.addedNodes.forEach(function (node) { if (jQuery(node).find('img').length > 0) { // ignore WooCommerce zoom if (!jQuery(node).hasClass('pswp__zoom-wrap')) { jQuery(node).find('img').each(function (index) { // dont touch on slider if (jQuery(this).attr('src') == 'null' || jQuery(this).hasClass('lazyload') || jQuery(this).parent().hasClass('lslide') || jQuery(this).parent().hasClass('lg-img-wrap')) return; fifu_lazy_ajax(this); }); } return; } else if (jQuery(node).prop('tagName') == 'IMG') { // ignore WooCommerce zoom if (!jQuery(node).hasClass('zoomImg')) fifu_lazy_ajax(node); return; } }); }); } }); observer.observe(document, {attributes: false, childList: true, characterData: false, subtree: true}); function cropImage(selector) { if (!selector) selector = fifuImageVars.fifu_crop_default + fifuImageVars.fifu_crop_selectors; // get selectors and set individual ratios in a dictionary sel = selector.split(','); dictRatio = {}; dicFit = {}; selector = ''; for (i = 0; i < sel.length; i++) { arr = sel[i].split('|'); if (arr.length > 1) { dictRatio[i] = arr[1]; if (arr.length > 2) dicFit[i] = arr[2]; } selector += arr[0]; if (i + 1 < sel.length) selector += ', '; } fit = fifuImageVars.fifu_fit; // get global ratio global_ratio = fifuImageVars.fifu_crop_ratio; global_ratio_w = global_ratio.split(':')[0]; global_ratio_h = global_ratio.split(':')[1]; // for each selector sel = selector.split(','); for (i = 0; i < sel.length; i++) { // define which ratio will be used if (dictRatio) { local_ratio = dictRatio[i]; ratio_w = local_ratio ? local_ratio.split(':')[0] : global_ratio_w; ratio_h = local_ratio ? local_ratio.split(':')[1] : global_ratio_h; } // define which fit will be used if (dicFit) { local_fit = dicFit[i]; fit = local_fit ? local_fit : fit; } jQuery(sel[i]).each(function (index) { // ignore fifu slider if (sel[i].trim() === '.fifu-slider') return; var width; var backend = false; // a.g1-frame-inner is for bimber theme jQuery(this).find('img, a.g1-frame').each(function (index) { // ignore ignoreSelectors = fifuImageVars.fifu_crop_ignore_parent.split(','); skip = false; for (j = 0; j < ignoreSelectors.length; j++) { if (jQuery(this).parent().is(ignoreSelectors[j])) { skip = true; break } } if (skip) return; // from backend theme_width = jQuery(this).attr('theme-width'); theme_height = jQuery(this).attr('theme-height'); // from frontend if (!width) { width = jQuery(this).parent().css('width').replace('px', ''); width = width != 0 ? width : jQuery(this).parent().parent().css('width').replace('px', ''); width = width != 0 ? width : jQuery(this).parent().parent().parent().css('width').replace('px', ''); } if (width == '100%') { width = jQuery(this).parent()[0].clientWidth; width = width != 0 ? width : jQuery(this).parent().parent()[0].clientWidth; width = width != 0 ? width : jQuery(this).parent().parent().parent()[0].clientWidth; } if (isValidImgClass(jQuery(this).attr('class'))) { if (fifuImageVars.fifu_should_crop_with_theme_sizes && (backend || (theme_width && theme_height && theme_height != 9999))) { backend = true; // backend jQuery(this).attr('style', jQuery(this).attr('style') + ';height: ' + (width * theme_height / theme_width) + 'px !important'); } else { // frontend jQuery(this).attr('style', jQuery(this).attr('style') + ';height: ' + (width * ratio_h / ratio_w) + 'px !important'); } if (jQuery(this)[0].clientHeight > jQuery(this)[0].clientWidth) jQuery(this).css('width', '100%'); else jQuery(this).css('width', width + 'px !important'); jQuery(this).css('object-fit', fit ? fit : 'cover'); // position position = jQuery(this).attr('fifu-position'); if (position) { jQuery(this).css('object-position', position); jQuery(this).removeAttr('fifu-position'); } } }); // background images jQuery(this).find('*[style*="background-image"]').each(function (index) { jQuery(this).css('background-size', fit); }); }); } jQuery('a.woocommerce-LoopProduct-link').css('width', '100%'); } function isValidImgClass(className) { // bimber return !className || !className.includes('avatar'); } function disableClick($) { if (!fifuImageVars.fifu_woo_lbox_enabled) { firstParentClass = ''; parentClass = ''; jQuery('figure.woocommerce-product-gallery__wrapper').find('div.woocommerce-product-gallery__image').each(function (index) { parentClass = jQuery(this).parent().attr('class').split(' ')[0]; if (!firstParentClass) firstParentClass = parentClass; if (parentClass != firstParentClass) return false; jQuery(this).children().click(function () { return false; }); jQuery(this).children().children().css("cursor", "default"); }); } } function disableLink($) { if (!fifuImageVars.fifu_woo_lbox_enabled) { firstParentClass = ''; parentClass = ''; jQuery('figure.woocommerce-product-gallery__wrapper').find('div.woocommerce-product-gallery__image').each(function (index) { parentClass = jQuery(this).parent().attr('class').split(' ')[0]; if (!firstParentClass) firstParentClass = parentClass; if (parentClass != firstParentClass) return false; jQuery(this).children().attr("href", ""); }); } } jQuery(document).ajaxSuccess(function () { if (fifuImageVars.fifu_should_crop) { setTimeout(function () { cropImage(); }, parseInt(fifuImageVars.fifu_crop_delay)); } }); jQuery(document).click(function ($) { fifu_fix_gallery_height(); }) function fifu_fix_gallery_height() { if (fifuImageVars.fifu_is_flatsome_active) { mainImage = jQuery('.woocommerce-product-gallery__wrapper div.flickity-viewport').find('img')[0]; if (mainImage) jQuery('.woocommerce-product-gallery__wrapper div.flickity-viewport').css('height', mainImage.clientHeight + 'px'); } } // var resizeWindowTimeout; // jQuery(window).on('resize', function (e) { // clearTimeout(resizeWindowTimeout); // resizeWindowTimeout = setTimeout(fifu_resize_slider, 100); // }); // for infinite scroll jQuery(document.body).on('post-load', function () { if (fifuImageVars.fifu_lazy) fifu_lazy(); setTimeout(function () { if (fifuImageVars.fifu_slider) fifu_slider = fifu_load_slider(); }, 300); }); jQuery('img.lazy').on('appear', function () { if (fifuImageVars.fifu_should_crop) cropImage(); }); // fix conflict between lazyload and slider (height:0px) jQuery('ul#image-gallery > li > img').on('load', function () { if (fifuImageVars.fifu_lazy && !fifuImageVars.fifu_slider_vertical) { if (jQuery(this).parent().hasClass('active')) jQuery(this).parent().parent().css('height', this.clientHeight); } }); function fifu_no_protocol(url) { return url.replace(/^https?:\/\//, ''); }