diff --git a/.gitignore b/.gitignore index 3055b57..f5607ca 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,7 @@ dist/ build/ .sass-cache/ .cache/ + +# --- Nginx erreurs fichiers --- +# A remplir au fur et à mesure +50x.html diff --git a/CHANGELOG.md b/CHANGELOG.md index 439fc1e..89de242 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,8 +12,12 @@ et ce projet respecte le [Versionnement Sémantique](https://semver.org/lang/fr/ - **Moteur Drag & Drop Natif :** Implémentation d'un système de planification agile (Kanban) dans `app.js` permettant de glisser-déposer les séances d'entraînement à la souris sans aucune dépendance logicielle externe. - **Cockpit Physiologique & Matériel :** Intégration de 4 indicateurs de performance (Fraîcheur VRC, Charge Hebdo, Usure Chaîne Vélo, Paires Carbone) basés sur des tracés SVG natifs et légers. - **Gouvernance & Linters :** Déploiement des fichiers de configuration modernes `eslint.config.js` (Format Flat Config de niveau industriel) et `.stylelintrc.json` à la racine du projet. +- **Moteur Kanban Métier :** Implémentation du système de Drag & Drop natif dans l'onglet RYM Coach permettant de réorganiser le planning hebdomadaire. +- **Calculateur de Charge Dynamique :** Automatisation du recalcul du spinner "Charge Hebdo" en JavaScript à chaque déplacement d'entraînement. ### Modifié +- **Architecture de Navigation :** Consolidation du routage événementiel pour assurer la permutation étanche entre les onglets MCO Dashboard, RYM Bank, RYM Coach et Suivi Cohorte. +- **Design System :** Correction structurelle des imbrications de conteneurs Bootstrap 5 pour garantir un affichage fluide de la zone Expert. - **Design System Responsif :** Optimisation de la structure Bootstrap 5 pour forcer l'alignement des "spinners" sur une seule ligne (`row`) sur écran desktop et une répartition fluide sur mobile. - **Pont de Développement :** Restructuration du conteneur de validation openSUSE Leap 15.6 via un montage de volume Podman sécurisé (`:Z`) permettant l'audit du code en temps réel depuis l'hôte Fedora. diff --git a/app.js b/app.js index fb38959..a713383 100644 --- a/app.js +++ b/app.js @@ -1,5 +1,5 @@ document.addEventListener("DOMContentLoaded", () => { - // --- GESTION DES ONGLETS EXISTANTE --- + // --- NAV SWITCHER DES ONGLETS LATÉRAUX --- const navLinks = document.querySelectorAll(".nav-link"); const tabContents = document.querySelectorAll(".tab-content"); @@ -11,21 +11,42 @@ document.addEventListener("DOMContentLoaded", () => { link.classList.add("active"); const tabId = link.getAttribute("data-tab"); - document.getElementById(tabId).classList.add("active"); + const targetSection = document.getElementById(tabId); + if (targetSection) { + targetSection.classList.add("active"); + } }); }); - // --- OPTION 1 : DRAG & DROP ENGINE (AAA SOUVERAIN) --- + // --- DRAG & DROP ENGINE INTELLIGENT --- const draggables = document.querySelectorAll(".rym-draggable-workout"); const dropZones = document.querySelectorAll(".drop-zone"); + function recalculerChargeHebdo() { + let totalSéances = 0; + + dropZones.forEach(zone => { + totalSéances += zone.querySelectorAll(".rym-draggable-workout").length; + }); + + // Calcul dynamique : 25% de charge par bloc actif, plafonné à 100% + const nouvelleCharge = Math.min(totalSéances * 25, 100); + + // Cibler le deuxième spinner du dashboard (Charge Hebdo) + const spinnerCharge = document.querySelectorAll(".rym-spinner-wrapper")[1]; + if (spinnerCharge) { + const cercleStroke = spinnerCharge.querySelector(".circle-stroke"); + const texteValeur = spinnerCharge.querySelector(".rym-spinner-text span"); + + texteValeur.textContent = nouvelleCharge; + cercleStroke.setAttribute("stroke-dasharray", `${nouvelleCharge}, 100`); + } + } + draggables.forEach(draggable => { draggable.addEventListener("dragstart", (e) => { e.dataTransfer.setData("text/plain", draggable.id); - // Petit délai pour l'effet visuel de déplacement - setTimeout(() => { - draggable.style.display = "none"; - }, 0); + setTimeout(() => { draggable.style.display = "none"; }, 0); }); draggable.addEventListener("dragend", () => { @@ -35,7 +56,7 @@ document.addEventListener("DOMContentLoaded", () => { dropZones.forEach(zone => { zone.addEventListener("dragover", (e) => { - e.preventDefault(); // Indispensable pour autoriser le drop + e.preventDefault(); zone.classList.add("drag-over"); }); @@ -52,10 +73,11 @@ document.addEventListener("DOMContentLoaded", () => { if (draggableElement) { zone.appendChild(draggableElement); - // Ici se branchera l'appel API asynchrone vers ton Gitea/Serveur - const targetDay = zone.getAttribute("data-day"); - console.log(`Séance déplacée avec succès sur le jour : ${targetDay}`); + recalculerChargeHebdo(); } }); }); + + // Calcul initial + recalculerChargeHebdo(); }); diff --git a/index.html b/index.html index b26d929..1101329 100644 --- a/index.html +++ b/index.html @@ -135,7 +135,7 @@
Lundi
-
+
Natation : 2500m
@@ -144,7 +144,7 @@
Mardi
-
+
VMA Balayage
@@ -153,7 +153,7 @@
Mercredi
-
+
Vélo Tempête
@@ -186,7 +186,11 @@
-
+
+
Agenda Précision Premium
+

Zone réservée aux flux haute précision asynchrones.

+
+