|
const slideTitle = document.getElementById('slide-title'); |
|
const slideImage = document.getElementById('slide-image'); |
|
const prevBtn = document.getElementById('prev-btn'); |
|
const nextBtn = document.getElementById('next-btn'); |
|
const promptBox = document.getElementById('promptBox'); |
|
const promptText = document.getElementById('promptText'); |
|
const responseBox = document.getElementById('responseBox'); |
|
const responseContent = document.getElementById('responseContent'); |
|
const promptIcon = document.getElementById('promptIcon'); |
|
const videoIcon = document.getElementById('videoIcon'); |
|
const videoOverlay = document.getElementById('videoOverlay'); |
|
const videoPlayer = document.getElementById('videoPlayer'); |
|
const closeVideo = document.getElementById('closeVideo'); |
|
const queryButton = document.getElementById('queryButton'); |
|
const websiteIcon = document.getElementById('websiteIcon'); |
|
const websiteLayer = document.getElementById('websiteLayer'); |
|
const websiteFrame = document.getElementById('websiteFrame'); |
|
const textboxIcon = document.getElementById('textboxIcon'); |
|
const textboxLayer = document.getElementById('textboxLayer'); |
|
const textboxContent = document.getElementById('textboxContent'); |
|
|
|
let slides = []; |
|
let currentIndex = 0; |
|
let websiteVisible = false; |
|
let textboxVisible = false; |
|
|
|
async function fetchSlides() { |
|
try { |
|
const response = await fetch('config.json'); |
|
const data = await response.json(); |
|
slides = data.slides; |
|
loadSlide(currentIndex); |
|
} catch (error) { |
|
console.error('Error loading slides:', error); |
|
} |
|
} |
|
|
|
function loadSlide(index) { |
|
if (!slides.length) return; |
|
const slide = slides[index]; |
|
slideTitle.textContent = slide.id.replace('_', ' '); |
|
slideImage.src = slide.image; |
|
promptBox.style.display = 'none'; |
|
responseBox.style.display = 'none'; |
|
responseContent.innerHTML = ''; |
|
videoPlayer.src = ''; |
|
textboxLayer.style.transform = 'translateX(100%)'; |
|
textboxLayer.style.display = 'none'; |
|
textboxContent.innerHTML = ''; |
|
textboxVisible = false; |
|
if (websiteVisible) { |
|
toggleWebsiteLayer(); |
|
} |
|
} |
|
|
|
function toggleWebsiteLayer() { |
|
if (websiteVisible) { |
|
websiteLayer.style.display = 'none'; |
|
websiteFrame.src = ''; |
|
} else { |
|
const websiteURL = slides[currentIndex]?.website || ''; |
|
if (websiteURL) { |
|
window.open(websiteURL, '_blank'); |
|
} else { |
|
console.warn('No website URL defined for this slide.'); |
|
} |
|
} |
|
websiteVisible = !websiteVisible; |
|
} |
|
|
|
function toggleTextboxLayer() { |
|
if (textboxVisible) { |
|
textboxLayer.style.transform = 'translateX(100%)'; |
|
setTimeout(() => { |
|
textboxLayer.style.display = 'none'; |
|
}, 300); |
|
textboxContent.innerHTML = ''; |
|
} else { |
|
const markdownText = slides[currentIndex]?.text || "No additional text available."; |
|
textboxContent.innerHTML = marked(markdownText); |
|
textboxLayer.style.display = 'block'; |
|
setTimeout(() => { |
|
textboxLayer.style.transform = 'translateX(0)'; |
|
}, 10); |
|
} |
|
textboxVisible = !textboxVisible; |
|
} |
|
|
|
prevBtn.addEventListener('click', () => { |
|
currentIndex = (currentIndex - 1 + slides.length) % slides.length; |
|
loadSlide(currentIndex); |
|
}); |
|
|
|
nextBtn.addEventListener('click', () => { |
|
currentIndex = (currentIndex + 1) % slides.length; |
|
loadSlide(currentIndex); |
|
}); |
|
|
|
promptIcon.addEventListener('click', () => { |
|
const slideText = slides[currentIndex]?.text || "No prompt text available."; |
|
promptBox.style.display = promptBox.style.display === 'block' ? 'none' : 'block'; |
|
promptText.value = slideText; |
|
}); |
|
|
|
videoIcon.addEventListener('click', () => { |
|
const videoURL = slides[currentIndex]?.video || ''; |
|
if (videoURL) { |
|
videoPlayer.src = videoURL; |
|
videoOverlay.style.display = 'flex'; |
|
} |
|
}); |
|
|
|
closeVideo.addEventListener('click', () => { |
|
videoOverlay.style.display = 'none'; |
|
videoPlayer.src = ''; |
|
}); |
|
|
|
websiteIcon.addEventListener('click', toggleWebsiteLayer); |
|
textboxIcon.addEventListener('click', toggleTextboxLayer); |
|
|
|
queryButton.addEventListener('click', async () => { |
|
const userPrompt = promptText.value.trim(); |
|
if (!userPrompt) return; |
|
responseBox.style.display = "block"; |
|
responseContent.innerHTML = "Processing..."; |
|
setTimeout(() => { |
|
responseContent.innerHTML = "Response received: " + userPrompt; |
|
}, 2000); |
|
}); |
|
|
|
fetchSlides(); |
|
|