// Page script for /pages/realisations.html document.addEventListener('DOMContentLoaded', async () => { const dataUrl = '../assets/data/projects.json'; let allProjects = []; try { const res = await fetch(dataUrl); if (!res.ok) throw new Error(res.statusText); allProjects = await res.json(); } catch (err) { console.error('Failed to load projects data:', err); return; } const ITEMS_PER_PAGE = 9; let currentPage = 1; let currentFilter = 'all'; const portfolioGrid = document.getElementById('portfolio-grid'); const paginationContainer = document.getElementById('pagination'); const filterTabs = document.querySelectorAll('.filter-tab'); const modalOverlay = document.getElementById('project-modal-overlay'); const modalClose = document.getElementById('project-modal-close'); const gallerySlides = document.getElementById('gallery-slides'); const galleryPrev = document.getElementById('gallery-prev'); const galleryNext = document.getElementById('gallery-next'); const modalTitle = document.getElementById('modal-title'); const modalCategory = document.getElementById('modal-category'); const modalDesc = document.getElementById('modal-desc'); const modalMeta = document.getElementById('modal-meta'); const modalFeatures = document.getElementById('modal-features'); const modalTech = document.getElementById('modal-tech'); const modalStats = document.getElementById('modal-stats'); function getFilteredProjects() { if (currentFilter === 'all') return [...allProjects]; return allProjects.filter(p => p.category === currentFilter); } function getTotalPages(filtered) { return Math.ceil(filtered.length / ITEMS_PER_PAGE) || 1; } function getProjectsForPage(filtered, page) { const start = (page - 1) * ITEMS_PER_PAGE; return filtered.slice(start, start + ITEMS_PER_PAGE); } function getCategoryLabel(category) { const labels = { 'bot': 'Bot Discord', 'map': 'Fortnite Map', 'graphisme': 'Graphisme' }; return labels[category] || category; } function renderProjects() { const filtered = getFilteredProjects(); const projects = getProjectsForPage(filtered, currentPage); portfolioGrid.innerHTML = projects.map(project => `
${project.desc.substring(0, 80)}...