<div class="carousel"> <% let scanlatorID = scan.scanlator.replace('-', '') %> <div class="cards-container cards-container_<%=scanlatorID%>"> <% scan.Results.forEach(result=>{%> <%- include('searchCards.ejs', {result, scanlator:scan.scanlator}) %> <% }) %> </div> <div class="buttonContainer" id="buttonContainer<%= scanlatorID %>"> <button class="prev-btn" onclick="handlePrev_<%= scanlatorID %>()"><span class="material-symbols-outlined chevron"> chevron_left </span></button> <button class="next-btn" onclick="handleNext_<%= scanlatorID %>()"><span class="material-symbols-outlined chevron"> chevron_right </span></button> </div> </div> <script> clearVariables_<%= scanlatorID %>(); needsChevrons_<%= scanlatorID %>(); function clearVariables_<%= scanlatorID %>() { ['cardsContainer_<%= scanlatorID %>', 'cardsAmount_<%= scanlatorID %>', 'cardWidth_<%= scanlatorID %>', 'currentPosition_<%= scanlatorID %>', 'maxPosition_<%= scanlatorID %>', 'imageAmount_<%= scanlatorID %>', 'imageOffSetWith_<%= scanlatorID %>', 'carouselWidth_<%= scanlatorID %>', 'gap_<%= scanlatorID %>', 'cards_<%= scanlatorID %>', 'lastCard_<%= scanlatorID %>', 'lastCardBoundingRect_<%= scanlatorID %>', 'nextButtonBoudingRect_<%= scanlatorID %>'].forEach((variable) => { if (window.hasOwnProperty(variable)) { delete window[variable]; } }); } // Initializing variables try { var cardAmount_<%= scanlatorID %> = document.querySelectorAll('.cards-container_<%=scanlatorID %> .card').length - 3; var cardWidth_<%= scanlatorID %> = document.querySelector('.cards-container_<%=scanlatorID %> .card').offsetWidth; var currentPosition_<%= scanlatorID %> = 0; var maxPosition_<%= scanlatorID %> = - cardAmount_<%= scanlatorID %>; } catch (error) { clearVariables_<%= scanlatorID %>(); var cardAmount_<%= scanlatorID %> = document.querySelectorAll('.cards-container_<%=scanlatorID %> .card').length - 3; var cardWidth_<%= scanlatorID %> = document.querySelector('.cards-container_<%=scanlatorID %> .card').offsetWidth; var currentPosition_<%= scanlatorID %> = 0; var maxPosition_<%= scanlatorID %> = - cardAmount_<%= scanlatorID %>; } function needsChevrons_<%= scanlatorID %>() { let cardsContainer_<%= scanlatorID %> = document.querySelectorAll('.cards-container_<%= scanlatorID %>')[0] let gap_<%= scanlatorID %> = parseFloat(window.getComputedStyle(cardsContainer_<%= scanlatorID %>).gap); let imageAmount_<%= scanlatorID %> = document.querySelectorAll('.img_<%= scanlatorID %>').length; let imageOffSetWith_<%= scanlatorID %> = document.querySelectorAll('.img_<%= scanlatorID %>')[0].offsetWidth+gap_<%= scanlatorID %> let carouselWidth_<%= scanlatorID %> = document.getElementById('buttonContainer<%= scanlatorID %>').offsetWidth; // console.log('Chevron check', carouselWidth_<%= scanlatorID %>,(imageAmount_<%= scanlatorID %> * imageOffSetWith_<%= scanlatorID %>),(imageAmount_<%= scanlatorID %> * imageOffSetWith_<%= scanlatorID %>) < carouselWidth_<%= scanlatorID %>) if ((imageAmount_<%= scanlatorID %> * imageOffSetWith_<%= scanlatorID %>) < carouselWidth_<%= scanlatorID %>) { return document.getElementById('buttonContainer<%= scanlatorID %>').classList.add('hidden'); } document.getElementById('buttonContainer<%= scanlatorID %>').classList.remove('hidden'); } // Hiding button container if all cards fit in view window.addEventListener('resize', (event) => { needsChevrons_<%= scanlatorID %>(); }); // Function to handle previous button click function handlePrev_<%= scanlatorID %>() { let cardsContainer_<%= scanlatorID %> = document.querySelector('.cards-container_<%=scanlatorID %>'); if (currentPosition_<%= scanlatorID %> == 0) return; currentPosition_<%= scanlatorID %>++; cardsContainer_<%= scanlatorID %>.style.transform = `translateX(${currentPosition_<%= scanlatorID %>*cardWidth_<%= scanlatorID %>}px)`; } // Function to handle next button click function handleNext_<%= scanlatorID %>() { let cardsContainer_<%= scanlatorID %> = document.querySelector('.cards-container_<%= scanlatorID %>'); let cards_<%= scanlatorID %> = document.querySelectorAll('.cards-container_<%= scanlatorID %> .card') let lastCard_<%= scanlatorID %> = cards_<%= scanlatorID %>[cards_<%= scanlatorID %>.length-1]; let lastCardBoundingRect_<%= scanlatorID %> = lastCard_<%= scanlatorID %>.getBoundingClientRect(); let nextButtonBoudingRect_<%= scanlatorID %> = document.querySelector('#buttonContainer<%= scanlatorID %> .next-btn').getBoundingClientRect(); if((lastCardBoundingRect_<%= scanlatorID %>.x+lastCardBoundingRect_<%= scanlatorID %>.width)<nextButtonBoudingRect_<%= scanlatorID %>.x) return; if (currentPosition_<%= scanlatorID %> == maxPosition_<%= scanlatorID %>) return; currentPosition_<%= scanlatorID %>--; cardsContainer_<%= scanlatorID %>.style.transform = `translateX(${currentPosition_<%= scanlatorID %>*cardWidth_<%= scanlatorID %>}px)`; cards_<%= scanlatorID %> = document.querySelectorAll('.cards-container_<%= scanlatorID %> .card') lastCard_<%= scanlatorID %> = cards_<%= scanlatorID %>[cards_<%= scanlatorID %>.length-1]; lastCardBoundingRect_<%= scanlatorID %> = lastCard_<%= scanlatorID %>.getBoundingClientRect(); nextButtonBoudingRect_<%= scanlatorID %> = document.querySelector('#buttonContainer<%= scanlatorID %> .next-btn').getBoundingClientRect(); } </script>