Files
palina-theme/assets/js/main.js
Sebastian Krüger 6f2d6b643d
All checks were successful
Deploy Theme / deploy (push) Successful in 13s
fix: ensure post card hover effects work by preventing animation property locking
2026-02-22 08:37:23 +01:00

49 lines
1.9 KiB
JavaScript

// Main JavaScript file for Palina theme
// Using HTMX and Alpine.js for enhanced functionality
document.addEventListener('DOMContentLoaded', () => {
console.log('Palina theme loaded!');
// Staggered fade-in animation for post grid
const animateGridItems = (container = document) => {
const gridItems = container.querySelectorAll('.post-grid-item:not(.animated)');
gridItems.forEach((item, index) => {
item.style.animationDelay = `${index * 100}ms`;
item.classList.add('animate-fadeInUp');
item.classList.add('animated');
// Clean up animation class after it finishes to allow hover transforms
item.addEventListener('animationend', () => {
item.classList.remove('animate-fadeInUp');
item.style.opacity = '1';
}, { once: true });
});
};
// Initial animation
animateGridItems();
// Re-run animation and other setup when HTMX settles new content
// Use document instead of document.body to persist across boosted navigation
document.addEventListener('htmx:afterSettle', (event) => {
// Global page fade-in animation
const mainContent = document.getElementById('main-content');
if (mainContent) {
mainContent.classList.remove('animate-fadeInUp');
void mainContent.offsetWidth; // Force reflow to restart animation
mainContent.classList.add('animate-fadeInUp');
}
// If the settled element is the posts-container or contains grid items
const target = event.detail.target;
if (target.id === 'posts-container' || target.querySelector('.post-grid-item')) {
animateGridItems(target);
}
// Handle global boost re-animation
if (event.detail.boosted) {
animateGridItems();
}
});
});