feat: panneau A propos elegant + retrait Editor POC
- Remplace Editor POC par A propos (sparkles) dans le menu header - Modale About avec animation fade+scale, logo SVG, hero gradient - Stats live: fichiers, vaults (API /health), tests (285) - Stack techno: 12 badges (FastAPI, vanilla JS, Docker, etc.) - Footer: date livraison, blague aleatoire (10 variantes humour) - Touche d'humour: git push --force accidentels, CSS > backend - Fermeture: bouton X, clic overlay, Escape - initAboutModal dans sync.js + config.js export
This commit is contained in:
@@ -1386,6 +1386,7 @@ export {
|
||||
loadAbout as initAboutSection,
|
||||
loadHiddenFilesSettings as initHiddenFilesConfig,
|
||||
initThemePicker,
|
||||
initAboutModal,
|
||||
switchSidebarTab,
|
||||
};
|
||||
|
||||
@@ -1451,3 +1452,59 @@ function initThemePicker() {
|
||||
renderCards();
|
||||
});
|
||||
}
|
||||
|
||||
// ── About Modal ──────────────────────────────────────────────────────
|
||||
function initAboutModal() {
|
||||
var overlay = document.getElementById('about-overlay');
|
||||
var closeBtn = document.getElementById('about-close');
|
||||
if (!overlay) return;
|
||||
|
||||
// Open button
|
||||
var openBtn = document.getElementById('about-open-btn');
|
||||
if (openBtn) {
|
||||
openBtn.addEventListener('click', function() {
|
||||
overlay.classList.add('active');
|
||||
populateAbout();
|
||||
});
|
||||
}
|
||||
|
||||
// Close
|
||||
closeBtn.addEventListener('click', function() { overlay.classList.remove('active'); });
|
||||
overlay.addEventListener('click', function(e) { if (e.target === overlay) overlay.classList.remove('active'); });
|
||||
document.addEventListener('keydown', function(e) { if (e.key === 'Escape' && overlay.classList.contains('active')) overlay.classList.remove('active'); });
|
||||
|
||||
function populateAbout() {
|
||||
// Live stats from health endpoint
|
||||
fetch('/api/health')
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(d) {
|
||||
var fEl = document.getElementById('about-stat-files');
|
||||
var vEl = document.getElementById('about-stat-vaults');
|
||||
if (fEl) fEl.textContent = d.total_files || '—';
|
||||
if (vEl) vEl.textContent = d.vaults || '—';
|
||||
})
|
||||
.catch(function() {});
|
||||
|
||||
// Build date (today)
|
||||
var now = new Date();
|
||||
var months = ['Janvier','Fevrier','Mars','Avril','Mai','Juin','Juillet','Aout','Septembre','Octobre','Novembre','Decembre'];
|
||||
var dateEl = document.getElementById('about-build-date');
|
||||
if (dateEl) dateEl.textContent = months[now.getMonth()] + ' ' + now.getFullYear();
|
||||
|
||||
// Random joke
|
||||
var jokes = [
|
||||
'0 bug connu. Les autres sont timides.',
|
||||
'Compile du premier coup. (Sauf le lundi matin.)',
|
||||
'Ecrit par un humain. Probablement.',
|
||||
'Aucun LLM n\'a ete blesse durant ce developpement.',
|
||||
'Quand ca marche, on appelle ca une feature.',
|
||||
'CSS: 90% du temps de dev, 10% du code.',
|
||||
'Dark mode active depuis la naissance du projet.',
|
||||
'Ca marche sur ma machine™',
|
||||
'Techniquement, tout est un edge case.',
|
||||
'Le CSS de ce panneau a pris plus de temps que le backend.'
|
||||
];
|
||||
var jokeEl = document.getElementById('about-joke');
|
||||
if (jokeEl) jokeEl.textContent = '« ' + jokes[Math.floor(Math.random() * jokes.length)] + ' »';
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user