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