tosave 30%
Read more
This product is sold and fulfilled by an independent third-party seller. This product may have been reviewed against Truly Free’s standards for the limited purpose of assigning marketplace badges.
Any such review is based on information provided by the seller and does not constitute certification, approval, or a guarantee of safety, efficacy, or regulatory compliance.
Truly Free assumes no liability for inaccuracies, omissions, product claims or for any damages or adverse outcomes arising from the use or misuse of this product.
Any Truly Free Trust Badges shown here were reviewed against our published standards and approved based on information submitted by the seller. The seller has sole access to and control over its product listing content and is solely responsible for the accuracy of any additional claims being made.





Previous page



Next page
P.now('premium-aplus-13-carousel-5').execute(function(init) { if (init) { return; } P.register('premium-aplus-13-carousel-5', function() { return function() { P.when('A', 'jQuery', 'a-carousel-framework', 'ready').execute('paginate-carousel', function (A, $, framework) { const ENTER_KEY_CODE = 13; const ESCAPE_KEY_CODE = 27; const LEFT_ARROW_KEY = 37; const RIGHT_ARROW_KEY = 39; const HOME_KEY = 36; const END_KEY = 35; var moduleId = '5'; var carouselName = 'premium-aplus-13-carousel-5'; var paginationAction = 'aplus-pagination-dot-action-' + moduleId + '-' + carouselName; var paginationGroup = '#aplus-pagination-group-' + moduleId + '-' + carouselName; /* If the carousel goes to a new page */ A.on('a:carousel:'+carouselName+':change:pageNumber', function (data) { A.$(paginationGroup+' .carousel-slider-circle').removeClass('aplus-carousel-active').attr('aria-selected', 'false').attr('tabindex', -1) .eq(data.newValue - 1).addClass('aplus-carousel-active').attr('aria-selected', 'true').attr('tabindex', 0); }); function syncPaginationDotsWithCarouselPages(numPages) { const parentElement = document.querySelector(paginationGroup); if (parentElement && parentElement.children) { const children = parentElement.children; for (let i = 0; i < children.length; i++) { if (i >= numPages) { // If number of dots > num of pages, we should hide other dots children[i].classList.add('aplus-pagination-dot--display-none'); } else if (children[i].classList.contains('aplus-pagination-dot--display-none')) { // Reset display of dots if it was hidden before children[i].classList.remove('aplus-pagination-dot--display-none'); } } } } framework.onInit(carouselName, function (carousel) { try { var totalPages = carousel.getAttr('totalPages'); syncPaginationDotsWithCarouselPages(totalPages); /* Resize event handler to re-calculate the pagination dots count based on orientation */ window.addEventListener('resize', function() { carousel.resize(); totalPages = carousel.getAttr('totalPages'); syncPaginationDotsWithCarouselPages(totalPages); }); A.declarative(paginationAction, 'click keydown', function(event){ var isClick = event.type === 'click'; var isKeydown = event.type === 'keydown'; var isEnter = isKeydown && event.$event.keyCode === ENTER_KEY_CODE; var isEsc = isKeydown && event.$event.keyCode === ESCAPE_KEY_CODE; var isLeftArrow = isKeydown && event.$event.keyCode === LEFT_ARROW_KEY; var isRightArrow = isKeydown && event.$event.keyCode === RIGHT_ARROW_KEY; var isHome = isKeydown && event.$event.keyCode === HOME_KEY; var isEnd = isKeydown && event.$event.keyCode === END_KEY; if (isClick || isEnter) { var data = event.data; carousel.gotoPage(data.page); } else if (isEsc) { event.$target.blur(); } else if (isLeftArrow || isRightArrow || isHome || isEnd) { event.$event.preventDefault(); const dots = A.$(paginationGroup + ' .carousel-slider-circle'); const currentIndex = dots.index(event.$target); let nextIndex; if (isLeftArrow) { nextIndex = currentIndex > 0 ? currentIndex - 1 : dots.length - 1; } else if (isRightArrow) { nextIndex = currentIndex < dots.length - 1 ? currentIndex + 1 : 0; } else if (isHome) { nextIndex = 0; } else if (isEnd) { nextIndex = dots.length - 1; } dots.eq(nextIndex).focus(); carousel.gotoPage(nextIndex + 1); } }); } catch (e) { P.log('Failed to init ' + carouselName + '. Error: ' + e.message, 'FATAL', 'AplusModuleResources'); } }); }); } });});
(function(f) {var _np=(window.P._namespace('PremiumAplusModule'));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) { P.when('premium-aplus-13-carousel-5').execute(function(init){init();});}));
Previous page




Next page
1 PURSUIT 2 CRAFTSMANSHIP 3 TECHNOLOY 4 FABRIC
(function(f) {var _np=(window.P._namespace('PremiumAplusModule'));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) { P.when('premium-module-12-nav-carousel').execute(function(init){ init(); });}));





Previous page



Next page
P.now('premium-aplus-13-carousel-5').execute(function(init) { if (init) { return; } P.register('premium-aplus-13-carousel-5', function() { return function() { P.when('A', 'jQuery', 'a-carousel-framework', 'ready').execute('paginate-carousel', function (A, $, framework) { const ENTER_KEY_CODE = 13; const ESCAPE_KEY_CODE = 27; const LEFT_ARROW_KEY = 37; const RIGHT_ARROW_KEY = 39; const HOME_KEY = 36; const END_KEY = 35; var moduleId = '5'; var carouselName = 'premium-aplus-13-carousel-5'; var paginationAction = 'aplus-pagination-dot-action-' + moduleId + '-' + carouselName; var paginationGroup = '#aplus-pagination-group-' + moduleId + '-' + carouselName; /* If the carousel goes to a new page */ A.on('a:carousel:'+carouselName+':change:pageNumber', function (data) { A.$(paginationGroup+' .carousel-slider-circle').removeClass('aplus-carousel-active').attr('aria-selected', 'false').attr('tabindex', -1) .eq(data.newValue - 1).addClass('aplus-carousel-active').attr('aria-selected', 'true').attr('tabindex', 0); }); function syncPaginationDotsWithCarouselPages(numPages) { const parentElement = document.querySelector(paginationGroup); if (parentElement && parentElement.children) { const children = parentElement.children; for (let i = 0; i < children.length; i++) { if (i >= numPages) { // If number of dots > num of pages, we should hide other dots children[i].classList.add('aplus-pagination-dot--display-none'); } else if (children[i].classList.contains('aplus-pagination-dot--display-none')) { // Reset display of dots if it was hidden before children[i].classList.remove('aplus-pagination-dot--display-none'); } } } } framework.onInit(carouselName, function (carousel) { try { var totalPages = carousel.getAttr('totalPages'); syncPaginationDotsWithCarouselPages(totalPages); /* Resize event handler to re-calculate the pagination dots count based on orientation */ window.addEventListener('resize', function() { carousel.resize(); totalPages = carousel.getAttr('totalPages'); syncPaginationDotsWithCarouselPages(totalPages); }); A.declarative(paginationAction, 'click keydown', function(event){ var isClick = event.type === 'click'; var isKeydown = event.type === 'keydown'; var isEnter = isKeydown && event.$event.keyCode === ENTER_KEY_CODE; var isEsc = isKeydown && event.$event.keyCode === ESCAPE_KEY_CODE; var isLeftArrow = isKeydown && event.$event.keyCode === LEFT_ARROW_KEY; var isRightArrow = isKeydown && event.$event.keyCode === RIGHT_ARROW_KEY; var isHome = isKeydown && event.$event.keyCode === HOME_KEY; var isEnd = isKeydown && event.$event.keyCode === END_KEY; if (isClick || isEnter) { var data = event.data; carousel.gotoPage(data.page); } else if (isEsc) { event.$target.blur(); } else if (isLeftArrow || isRightArrow || isHome || isEnd) { event.$event.preventDefault(); const dots = A.$(paginationGroup + ' .carousel-slider-circle'); const currentIndex = dots.index(event.$target); let nextIndex; if (isLeftArrow) { nextIndex = currentIndex > 0 ? currentIndex - 1 : dots.length - 1; } else if (isRightArrow) { nextIndex = currentIndex < dots.length - 1 ? currentIndex + 1 : 0; } else if (isHome) { nextIndex = 0; } else if (isEnd) { nextIndex = dots.length - 1; } dots.eq(nextIndex).focus(); carousel.gotoPage(nextIndex + 1); } }); } catch (e) { P.log('Failed to init ' + carouselName + '. Error: ' + e.message, 'FATAL', 'AplusModuleResources'); } }); }); } });});
(function(f) {var _np=(window.P._namespace('PremiumAplusModule'));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) { P.when('premium-aplus-13-carousel-5').execute(function(init){init();});}));
Previous page




Next page
1 PURSUIT 2 CRAFTSMANSHIP 3 TECHNOLOY 4 FABRIC
(function(f) {var _np=(window.P._namespace('PremiumAplusModule'));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) { P.when('premium-module-12-nav-carousel').execute(function(init){ init(); });}));