// Global configuration and utilities const CONFIG = { apiBaseUrl: 'https://fakestoreapi.com', phoneNumber: '+33139912304', whatsappNumber: '+33139912304', companyName: 'FRANCE ÉLECTRICITÉ & PEINTURE DISTRIBUTION', address: 'Sarcelles, 95200, France' }; // Initialize the application document.addEventListener('DOMContentLoaded', function() { console.log('DOM Content Loaded - Initializing App'); initializeApp(); setupEventListeners(); loadInitialData(); // Force re-render of feather icons setTimeout(() => { if (window.feather) { feather.replace(); } }, 100); }); function initializeApp() { // Set up service worker for PWA functionality if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw.js') .then(registration => { console.log('SW registered: ', registration); }) .catch(registrationError => { console.log('SW registration failed: ', registrationError); }); } // Initialize animations initAnimations(); } function setupEventListeners() { // Search functionality const searchInput = document.querySelector('#search-input'); if (searchInput) { searchInput.addEventListener('input', debounce(handleSearch, 300)); } // Phone click handlers const phoneLinks = document.querySelectorAll('[data-phone]'); phoneLinks.forEach(link => { link.addEventListener('click', function(e) { e.preventDefault(); window.open(`tel:${CONFIG.phoneNumber}`, '_self'); }); } // WhatsApp click handlers const whatsappLinks = document.querySelectorAll('[data-whatsapp]'); whatsappLinks.forEach(link => { link.addEventListener('click', function(e) { e.preventDefault(); window.open(`https://wa.me/${CONFIG.whatsappNumber}`, '_blank'); }); } // Mobile menu toggle const menuToggle = document.querySelector('#menu-toggle'); const mobileMenu = document.querySelector('#mobile-menu'); if (menuToggle && mobileMenu) { menuToggle.addEventListener('click', function() { mobileMenu.classList.toggle('hidden'); menuToggle.querySelector('i').setAttribute('data-feather', mobileMenu.classList.contains('hidden') ? 'menu' : 'x' ); feather.replace(); }); } } function loadInitialData() { // Load featured products for homepage fetchFeaturedProducts(); // Load categories for navigation fetchCategories(); } function fetchFeaturedProducts() { // Mock API call for featured products fetch(`${CONFIG.apiBaseUrl}/products?limit=8`) .then(response => response.json()) .then(products => { displayFeaturedProducts(products); }) .catch(error => { console.error('Error fetching featured products:', error); }); } function fetchCategories() { // Mock API call for categories const categories = [ { name: 'Électricité', slug: 'electricite', icon: 'zap' }, { name: 'Peinture', slug: 'peinture', icon: 'droplet' }, { name: 'Outillage', slug: 'outillage', icon: 'tool' }, { name: 'Préparation', slug: 'preparation', icon: 'settings' }, { name: 'Promotions', slug: 'promotions', icon: 'tag' } ]; updateNavigationCategories(categories); } function handleSearch(event) { const query = event.target.value.trim(); if (query.length > 2) { performSearch(query); } } function performSearch(query) { fetch(`${CONFIG.apiBaseUrl}/products`) .then(response => response.json()) .then(products => { const filteredProducts = products.filter(product => product.title.toLowerCase().includes(query.toLowerCase()) ); displaySearchResults(filteredProducts); }) .catch(error => { console.error('Search error:', error); }); } function displayFeaturedProducts(products) { const container = document.querySelector('#featured-products'); if (!container) return; container.innerHTML = products.map(product => `
${product.description.substring(0, 80)}...
${product.description.substring(0, 120)}...