mirror of
https://github.com/velocitatem/PHANTOM.git
synced 2026-05-31 08:33:36 +00:00
migrated academic page to docs
This commit is contained in:
142
docs/static/js/index.js
vendored
Normal file
142
docs/static/js/index.js
vendored
Normal file
@@ -0,0 +1,142 @@
|
||||
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();
|
||||
|
||||
})
|
||||
Reference in New Issue
Block a user