- Renamed plugin to avoid WordPress.org naming conflict causing false update notifications - Added /downloads static route to serve plugin zip file - Updated all CSS classes from dutchie- to crawlsy- prefix - Added plugin zip to backend/public/downloads for hosting - Plugin available at: https://dispos.crawlsy.com/downloads/crawlsy-menus-1.3.0.zip 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
58 lines
1.9 KiB
JavaScript
58 lines
1.9 KiB
JavaScript
/**
|
|
* Crawlsy Menus - WordPress Plugin JavaScript
|
|
*/
|
|
|
|
(function($) {
|
|
'use strict';
|
|
|
|
/**
|
|
* Initialize plugin
|
|
*/
|
|
$(document).ready(function() {
|
|
// Lazy load images
|
|
if ('IntersectionObserver' in window) {
|
|
const imageObserver = new IntersectionObserver((entries, observer) => {
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
const img = entry.target;
|
|
if (img.dataset.src) {
|
|
img.src = img.dataset.src;
|
|
img.removeAttribute('data-src');
|
|
observer.unobserve(img);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
document.querySelectorAll('.crawlsy-product-image img[data-src]').forEach(img => {
|
|
imageObserver.observe(img);
|
|
});
|
|
}
|
|
|
|
// Add animation to product cards on scroll
|
|
if ('IntersectionObserver' in window) {
|
|
const cardObserver = new IntersectionObserver((entries) => {
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
entry.target.style.opacity = '0';
|
|
entry.target.style.transform = 'translateY(20px)';
|
|
setTimeout(() => {
|
|
entry.target.style.transition = 'opacity 0.5s, transform 0.5s';
|
|
entry.target.style.opacity = '1';
|
|
entry.target.style.transform = 'translateY(0)';
|
|
}, 10);
|
|
cardObserver.unobserve(entry.target);
|
|
}
|
|
});
|
|
}, {
|
|
threshold: 0.1
|
|
});
|
|
|
|
document.querySelectorAll('.crawlsy-product-card').forEach(card => {
|
|
cardObserver.observe(card);
|
|
});
|
|
}
|
|
});
|
|
|
|
})(jQuery);
|