rym_horizon/app.js

84 lines
2.9 KiB
JavaScript

document.addEventListener("DOMContentLoaded", () => {
// --- NAV SWITCHER DES ONGLETS LATÉRAUX ---
const navLinks = document.querySelectorAll(".nav-link");
const tabContents = document.querySelectorAll(".tab-content");
navLinks.forEach(link => {
link.addEventListener("click", (e) => {
e.preventDefault();
navLinks.forEach(l => l.classList.remove("active"));
tabContents.forEach(tc => tc.classList.remove("active"));
link.classList.add("active");
const tabId = link.getAttribute("data-tab");
const targetSection = document.getElementById(tabId);
if (targetSection) {
targetSection.classList.add("active");
}
});
});
// --- 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);
setTimeout(() => { draggable.style.display = "none"; }, 0);
});
draggable.addEventListener("dragend", () => {
draggable.style.display = "block";
});
});
dropZones.forEach(zone => {
zone.addEventListener("dragover", (e) => {
e.preventDefault();
zone.classList.add("drag-over");
});
zone.addEventListener("dragleave", () => {
zone.classList.remove("drag-over");
});
zone.addEventListener("drop", (e) => {
e.preventDefault();
zone.classList.remove("drag-over");
const id = e.dataTransfer.getData("text/plain");
const draggableElement = document.getElementById(id);
if (draggableElement) {
zone.appendChild(draggableElement);
recalculerChargeHebdo();
}
});
});
// Calcul initial
recalculerChargeHebdo();
});