You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
5.9 KiB

<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>