mirror of
https://github.com/eliahuhorwitz/Academic-project-page-template.git
synced 2026-02-13 02:12:46 +00:00
143 lines
4.3 KiB
JavaScript
143 lines
4.3 KiB
JavaScript
window.HELP_IMPROVE_VIDEOJS = false;
|
|
|
|
// More Works Dropdown Functionality
|
|
function toggleMoreWorks() {
|
|
const dropdown = document.getElementById('moreWorksDropdown');
|
|
const button = document.querySelector('.more-works-btn');
|
|
|
|
if (dropdown.classList.contains('show')) {
|
|
dropdown.classList.remove('show');
|
|
button.classList.remove('active');
|
|
} else {
|
|
dropdown.classList.add('show');
|
|
button.classList.add('active');
|
|
}
|
|
}
|
|
|
|
// Close dropdown when clicking outside
|
|
document.addEventListener('click', function(event) {
|
|
const container = document.querySelector('.more-works-container');
|
|
const dropdown = document.getElementById('moreWorksDropdown');
|
|
const button = document.querySelector('.more-works-btn');
|
|
|
|
if (container && !container.contains(event.target)) {
|
|
dropdown.classList.remove('show');
|
|
button.classList.remove('active');
|
|
}
|
|
});
|
|
|
|
// Close dropdown on escape key
|
|
document.addEventListener('keydown', function(event) {
|
|
if (event.key === 'Escape') {
|
|
const dropdown = document.getElementById('moreWorksDropdown');
|
|
const button = document.querySelector('.more-works-btn');
|
|
dropdown.classList.remove('show');
|
|
button.classList.remove('active');
|
|
}
|
|
});
|
|
|
|
// Copy BibTeX to clipboard
|
|
function copyBibTeX() {
|
|
const bibtexElement = document.getElementById('bibtex-code');
|
|
const button = document.querySelector('.copy-bibtex-btn');
|
|
const copyText = button.querySelector('.copy-text');
|
|
|
|
if (bibtexElement) {
|
|
navigator.clipboard.writeText(bibtexElement.textContent).then(function() {
|
|
// Success feedback
|
|
button.classList.add('copied');
|
|
copyText.textContent = 'Cop';
|
|
|
|
setTimeout(function() {
|
|
button.classList.remove('copied');
|
|
copyText.textContent = 'Copy';
|
|
}, 2000);
|
|
}).catch(function(err) {
|
|
console.error('Failed to copy: ', err);
|
|
// Fallback for older browsers
|
|
const textArea = document.createElement('textarea');
|
|
textArea.value = bibtexElement.textContent;
|
|
document.body.appendChild(textArea);
|
|
textArea.select();
|
|
document.execCommand('copy');
|
|
document.body.removeChild(textArea);
|
|
|
|
button.classList.add('copied');
|
|
copyText.textContent = 'Cop';
|
|
setTimeout(function() {
|
|
button.classList.remove('copied');
|
|
copyText.textContent = 'Copy';
|
|
}, 2000);
|
|
});
|
|
}
|
|
}
|
|
|
|
// Scroll to top functionality
|
|
function scrollToTop() {
|
|
window.scrollTo({
|
|
top: 0,
|
|
behavior: 'smooth'
|
|
});
|
|
}
|
|
|
|
// Show/hide scroll to top button
|
|
window.addEventListener('scroll', function() {
|
|
const scrollButton = document.querySelector('.scroll-to-top');
|
|
if (window.pageYOffset > 300) {
|
|
scrollButton.classList.add('visible');
|
|
} else {
|
|
scrollButton.classList.remove('visible');
|
|
}
|
|
});
|
|
|
|
// Video carousel autoplay when in view
|
|
function setupVideoCarouselAutoplay() {
|
|
const carouselVideos = document.querySelectorAll('.results-carousel video');
|
|
|
|
if (carouselVideos.length === 0) return;
|
|
|
|
const observer = new IntersectionObserver((entries) => {
|
|
entries.forEach(entry => {
|
|
const video = entry.target;
|
|
if (entry.isIntersecting) {
|
|
// Video is in view, play it
|
|
video.play().catch(e => {
|
|
// Autoplay failed, probably due to browser policy
|
|
console.log('Autoplay prevented:', e);
|
|
});
|
|
} else {
|
|
// Video is out of view, pause it
|
|
video.pause();
|
|
}
|
|
});
|
|
}, {
|
|
threshold: 0.5 // Trigger when 50% of the video is visible
|
|
});
|
|
|
|
carouselVideos.forEach(video => {
|
|
observer.observe(video);
|
|
});
|
|
}
|
|
|
|
$(document).ready(function() {
|
|
// Check for click events on the navbar burger icon
|
|
|
|
var options = {
|
|
slidesToScroll: 1,
|
|
slidesToShow: 1,
|
|
loop: true,
|
|
infinite: true,
|
|
autoplay: true,
|
|
autoplaySpeed: 5000,
|
|
}
|
|
|
|
// Initialize all div with carousel class
|
|
var carousels = bulmaCarousel.attach('.carousel', options);
|
|
|
|
bulmaSlider.attach();
|
|
|
|
// Setup video autoplay for carousel
|
|
setupVideoCarouselAutoplay();
|
|
|
|
})
|