1/** 2* @author Amazzing 3* @copyright Amazzing 4* @license https://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) 5*/ 6 7$.extend(cb, { 8 carousels: {}, 9 classes: {n: 'sw-nav', p: 'sw-pgn'}, 10 resizeTimer: null, 11 initCarousels: function() { 12 cb.prepareAllCarousels(); 13 $(window).on('resize.cb', function() { 14 cb.onResize(); 15 }); 16 }, 17 prepareAllCarousels: function() { 18 $('.cb-wrapper').find('.cb-carousel').each(function() { 19 cb.renderCarousel($(this)); 20 }); 21 }, 22 renderCarousel: function($container) { 23 var id = $container.closest('.cb-wrapper').data('wrapper'), 24 settings = cb.formatSettings($container.data('settings')); 25 if (!$container.data('ready')) { 26 cb.addHoverClassesIfRequired($container, settings); 27 cb.carousels[id] = new Swiper($container[0], cb.prepareCarouselParams($container, settings)); 28 $container.data('ready', 1); 29 } else if (id in cb.carousels) { 30 $.extend(cb.carousels[id].params, cb.getResponsiveParams($container, settings, false)); 31 cb.carousels[id].update(); 32 } 33 }, 34 formatSettings: function(settings) { 35 $.each(settings, function(i, v){ 36 settings[i] = parseInt(v); 37 }); 38 return settings; 39 }, 40 addHoverClassesIfRequired: function($container, settings) { 41 if (cb_isDesktop) { 42 ['n', 'p'].forEach(function(type) { 43 if (settings[type] && settings[type] == 2) { 44 $container.closest('.cb-wrapper').addClass(type+'-hover'); 45 } 46 }); 47 } 48 }, 49 prepareCarouselParams: function($container, settings) { 50 var params = { 51 speed: settings.s, 52 autoplay: settings.a ? { 53 delay: settings.ps, 54 pauseOnMouseEnter: !!settings.ah, 55 } : false, 56 updateOnImagesReady: false, 57 spaceBetween: settings.sb, 58 on: { 59 init: function () { 60 cb.fixLazyDelay($container, settings); 61 }, 62 }, 63 // effect: 'cube', //"slide", "fade", "cube", "coverflow", "flip" 64 }; 65 if (settings.n) { 66 $container.append('<div class="'+cb.classes.n+' prev"></div><div class="'+cb.classes.n+' next"></div>'); 67 params.navigation = { 68 prevEl: $container.find('.'+cb.classes.n+'.prev')[0], 69 nextEl: $container.find('.'+cb.classes.n+'.next')[0], 70 }; 71 } 72 if (settings.p) { 73 // pagination is added after container in order to not affect position of nav buttons 74 $container.after('<div class="'+cb.classes.p+'"></div>'); 75 params.pagination = { 76 el: $container.parent().find('.'+cb.classes.p)[0], 77 bulletClass: cb.classes.p+'-bullet', 78 modifierClass: cb.classes.p+'-', 79 bulletActiveClass: 'active', 80 clickable: true, 81 }; 82 } 83 $.extend(params, cb.getResponsiveParams($container, settings, true)); 84 return params; 85 }, 86 getResponsiveParams: function($container, settings, includeLoop) { 87 var itemsData = cb.getItemsData($container, settings), 88 params = { 89 slidesPerView: itemsData.num, 90 slidesPerGroup: settings.m && settings.m < itemsData.num ? settings.m : itemsData.num, 91 }; 92 if (includeLoop) { 93 params.loop = settings.l && itemsData.overflow; 94 } 95 $container.parent().find('.'+cb.classes.n+', .'+cb.classes.p).toggleClass('hidden', !itemsData.overflow); 96 return params; 97 }, 98 getItemsData: function($container, settings) { 99 var itemsNum = cb.getResponsiveItemsNum(settings), 100 wrapperWidth = $container.closest('.cb-wrapper').innerWidth(), 101 itemWidth = parseInt(wrapperWidth / itemsNum); 102 return {num: itemsNum, width: itemWidth, overflow: $container.find('.cb-item').length > itemsNum}; 103 }, 104 getResponsiveItemsNum: function(settings) { 105 var w = $(window).width(), itemsNum = settings.i; 106 if (w < 480) {itemsNum = settings.i_480;} 107 else if (w < 768) {itemsNum = settings.i_768;} 108 else if (w < 992) {itemsNum = settings.i_992;} 109 else if (w < 1200) {itemsNum = settings.i_1200;} 110 return itemsNum; 111 }, 112 fixLazyDelay: function($container, settings) { 113 if (settings.a) { 114 setTimeout(function() { 115 cb.removeLazyAttr($container); 116 }, Math.round(settings.ps / 2)); 117 } else { 118 $container.one('mouseenter.nolazy', function() { 119 cb.removeLazyAttr($container); 120 }); 121 } 122 }, 123 removeLazyAttr: function($container) { 124 $container.find('img[loading="lazy"]').removeAttr('loading'); 125 }, 126 onResize: function() { 127 clearTimeout(cb.resizeTimer); 128 cb.resizeTimer = setTimeout(function() { 129 cb.prepareAllCarousels(); 130 }, 200); 131 }, 132}); 133/* since 3.0.0 */
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.