summaryrefslogtreecommitdiff
path: root/static/js/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'static/js/index.js')
-rw-r--r--static/js/index.js142
1 files changed, 142 insertions, 0 deletions
diff --git a/static/js/index.js b/static/js/index.js
new file mode 100644
index 0000000..de8c42c
--- /dev/null
+++ b/static/js/index.js
@@ -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();
+
+})