/* ========================================================== M. Courcelle — Labo Ordinateur Menubar + menu mobile + pied de page, injectés dans chaque page. Un seul endroit à modifier pour toutes les pages. ========================================================== */ (function () { /* ── Structure du menu ── Modifier ici pour ajouter une page. Les entrées sans "href" s'affichent en grisé (« bientôt »). */ const MENU = [ { label: "L'Ordinateur", items: [ { label: "Labo Ordinateur", href: "index.html", shortcut: "index" }, { sep: true }, { label: "Les périphériques", href: "peripheriques.html" }, { label: "Vocabulaire de base", href: "vocabulaire.html" } ] }, { label: "Dactylographie", items: [ { label: "Le clavier" }, { label: "Exercices et jeux" } ] }, { label: "Cybersécurité", items: [ { label: "Les mots de passe" }, { label: "Le phishing" } ] } ]; const stripes = ['as1','as2','as3','as4','as5','as6'] .map(c => `
`).join(''); function ddItem(it) { if (it.sep) return ''; const sc = it.shortcut ? `${it.shortcut}` : ''; if (!it.href) { return `${it.label}bientôt`; } return `${it.label}${sc}`; } const menubar = ` `; const footer = ` `; /* ── Injection ── */ document.addEventListener('DOMContentLoaded', function () { document.body.insertAdjacentHTML('afterbegin', menubar); document.body.insertAdjacentHTML('beforeend', footer); // Hamburger const btn = document.getElementById('mb-hamburger'); const menu = document.getElementById('mb-mobile-menu'); btn.addEventListener('click', function () { const open = menu.classList.toggle('open'); btn.classList.toggle('open', open); document.body.style.overflow = open ? 'hidden' : ''; }); // Mode lisibilité (dyslexie) const dy = document.getElementById('mb-dyslexic-btn'); if (localStorage.getItem('courcelle_lisibilite') === '1') document.body.classList.add('dyslexic'); dy.addEventListener('click', function () { const on = !document.body.classList.contains('dyslexic'); document.body.classList.toggle('dyslexic', on); localStorage.setItem('courcelle_lisibilite', on ? '1' : '0'); }); // Repli visuel pour les images pas encore en place document.querySelectorAll('img[data-todo]').forEach(function (img) { img.addEventListener('error', function () { const box = document.createElement('div'); box.className = 'img-todo'; box.innerHTML = 'Image à placer' + '' + img.getAttribute('src') + '' + '' + img.getAttribute('data-todo') + ''; img.replaceWith(box); }); }); }); })();