<div class="chapterOverview" id="chapterOverview"> <div class="flexBox" id="flexBox"> <% for(var [index, img] of data.List.entries()){ %> <img class="overview" id="img<%= index %>" src=<%= img.replaceAll(' ','%20') %> onclick="_scrollTo('<%= '_img'+index%>')" /> <% } %> </div> <div class="expand" onclick="toggle()"> <span class="material-symbols-outlined" id="expandChevron">chevron_right</span> </div> </div> <div class="wrapperReaderBox"> <div class="spacer" id="spacer"></div> <div class="readerDisplay"> <div class="chapterNav" hx-get="/chapternavinfo/<%= data.scanlator %>/<%= encodeURIComponent(data.mangaLink)%>/<%= data.title %>/<%= data.chapterNum %>" hx-trigger="load" hx-target="this" hx-swap="outerHTML" hx-indicator=".progress" > </div> <button class="pullBackUp" onclick="pullUp()"> <span class="material-symbols-outlined chevronUp">expand_less</span></button> <div id="display"> <% for(var [index, img] of data.List.entries()){ %> <img id="_img<%= index %>" src=<%= img.replaceAll(' ','%20') %> alt="img<%= index %>"/> <% } %> <div id="last-image" hx-post="/chapterRead/<%= data.scanlator %>/<%= encodeURIComponent(data.mangaLink)%>/<%= data.title %>/<%= data.chapterNum %>" hx-swap="none" ></div> </div> <div class="chapterNav " hx-get="/chapternavinfo/<%= data.scanlator %>/<%= encodeURIComponent(data.mangaLink)%>/<%= data.title %>/<%= data.chapterNum %>" hx-trigger="load" hx-target="this" hx-swap="outerHTML" hx-indicator=".progress" > </div> </div> </div> <script> clearVariables(); handleInView(); function clearVariables() { [ 'lastImage', 'observer', 'flexBox', 'chapterOverview', 'chevron', 'spacer', 'preview', 'elements', 'windowHeight', 'bounding', 'element', 'elementId' ].forEach((variable) => { if (window.hasOwnProperty(variable)) { delete window[variable]; } }); } function pullUp() { window.scrollTo({ top: 0, behavior: 'smooth' }) } function _scrollTo(elementId) { document.getElementById(elementId).scrollIntoView({ behavior: 'smooth', block: 'start' }); } window.addEventListener('scroll', handleInView); function handleInView() { var elements = document.querySelectorAll('#display img'); // Replace '.your-element-class' with the class of the elements you want to check var windowHeight = window.innerHeight; elements.forEach((element)=> { var bounding = element.getBoundingClientRect(); if (bounding.top<windowHeight && (bounding.top + bounding.height) > windowHeight) { if(document.querySelector('.inView')) document.querySelector('.inView').classList.remove('inView'); document.getElementById(element.alt).classList.add('inView'); } }); }; function toggle() { let flexBox = document.getElementById('flexBox'); if( flexBox.style.display!='none') return closePreview(); return openPreview(); } function openPreview() { let flexBox = document.getElementById('flexBox'); let chapterOverview = document.getElementById('chapterOverview'); let chevron = document.getElementById('expandChevron'); let spacer = document.getElementById('spacer'); flexBox.style.display='flex'; chevron.innerText='chevron_left'; chapterOverview.style.width = '25vw'; spacer.style.width = '25%'; setCookie("preview", "preview", 1) } function closePreview() { let flexBox = document.getElementById('flexBox'); let chapterOverview = document.getElementById('chapterOverview'); let chevron = document.getElementById('expandChevron'); let spacer = document.getElementById('spacer'); flexBox.style.display = 'none'; chevron.innerText='chevron_right'; chapterOverview.style.width = '1vw'; spacer.style.width = '0%'; setCookie("preview", "dontpreview", 1) } function setCookie(name, value, days) { var expires = ""; if (days) { var date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); expires = "; expires=" + date.toUTCString(); } document.cookie = name + "=" + (value || "") + expires + "; path=/"; } function getCookie(name) { if(!document.cookie) return ''; return document.cookie.split(name+'=')[1].split(';')[0]; } function hasFinished() { const lastImage = document.getElementById('last-image'); const observer = new IntersectionObserver(entries => { if (entries[0].isIntersecting) { lastImage.click(); } }); observer.observe(lastImage); } function checkPreview() { let preview = getCookie('preview'); if(preview=='preview') return openPreview(); return closePreview(); } try { hasFinished(); checkPreview(); } catch (error) { clearVariables(); hasFinished(); checkPreview(); } </script>