This commit is contained in:
KONE SOREL 2026-02-05 12:42:44 +00:00
parent a1e1a75c0a
commit 1add3cde74
2 changed files with 44 additions and 62 deletions

File diff suppressed because one or more lines are too long

View File

@ -126,7 +126,7 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
<link rel="manifest" href="<?= $racineWeb ?>manifest.json">
<!-- 4. VOS STYLES PERSONNALISÉS (en dernier pour qu'ils dominent) -->
<link href="<?= $racineWeb ?>Bootstrap_new/css/style_office.css?ver=2026.02.04.04" rel="stylesheet">
<link href="<?= $racineWeb ?>Bootstrap_new/css/style_office.css?ver=2026.02.05.00" rel="stylesheet">
<link href="<?= $racineWeb ?>Bootstrap_new/css/ux_enhancements.css?ver=2025.12.21.02" rel="stylesheet">
<!-- Charts -->
@ -721,45 +721,30 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
<script src="Bootstrap/vendor/echarts/echarts.min.js"></script>
<script>
// CORRECTION URGENTE - FORCE LE BON MENU
document.addEventListener('DOMContentLoaded', function() {
// Attendre que NavigationManager soit prêt
/* ================================
1) Correction urgente - Forcer le bon menu
================================= */
setTimeout(function() {
// 1. Vérifier l'état actuel
const openMenus = document.querySelectorAll('.nav-submenu.show');
// 2. Si submenu1 est ouvert mais on est sur Accueil
if (window.appConfig?.activeLink === 'Accueil') {
const wrongMenu = document.getElementById('submenu1');
const correctMenu = document.getElementById('submenu0');
if (wrongMenu?.classList.contains('show')) {
// FORCER LA CORRECTION
if (window.appUX?.navigation) {
// Fermer tous les menus
window.appUX.navigation.closeAllMenus();
// Ouvrir submenu0
setTimeout(() => {
window.appUX.navigation.openMenuById('submenu0');
}, 200);
}
// Fallback manuel
else {
// Fermer submenu1
} else {
wrongMenu.classList.remove('show');
const wrongLink = document.querySelector('[href="#submenu1"]');
if (wrongLink) {
wrongLink.setAttribute('aria-expanded', 'false');
wrongLink.classList.remove('active');
}
// Ouvrir submenu0
setTimeout(() => {
if (correctMenu) {
correctMenu.classList.add('show');
@ -773,91 +758,88 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
}
}
}
// Vérification finale
setTimeout(() => {
const finalState = document.querySelectorAll('.nav-submenu.show');
if (finalState.length === 1 && finalState[0].id === 'submenu0') {
// OK
}
}, 500);
}, 1000); // Attendre 1s que tout soit initialisé
});
</script>
}, 1000);
<script>
document.addEventListener('DOMContentLoaded', function () {
// 1) Déplacer immédiatement tous les modals existants sous <body>
document.querySelectorAll('.modal').forEach(function (m) {
/* ================================
2) Gestion des modals Bootstrap
================================= */
document.querySelectorAll('.modal').forEach(function(m) {
if (m.parentNode !== document.body) document.body.appendChild(m);
});
// 2) Intercepter tous les clics sur triggers AVANT Bootstrap (phase capture)
document.addEventListener('click', function (e) {
document.addEventListener('click', function(e) {
const trigger = e.target.closest('[data-bs-toggle="modal"][data-bs-target]');
if (!trigger) return;
const targetSelector = trigger.getAttribute('data-bs-target');
const modal = document.querySelector(targetSelector);
if (modal && modal.parentNode !== document.body) {
document.body.appendChild(modal);
document.body.appendChild(modal);
}
}, true);
// 3) Fallback: si un modal s'ouvre autrement, garantir le déplacement
document.addEventListener('show.bs.modal', function (event) {
document.addEventListener('show.bs.modal', function(event) {
const modal = event.target;
if (modal && modal.parentNode !== document.body) {
document.body.appendChild(modal);
document.body.appendChild(modal);
}
});
});
</script>
<script>
document.addEventListener("DOMContentLoaded", function () {
// On initialise les menus SANS les forcer à s'ouvrir
/* ================================
3) Gestion des sous-menus (Collapse)
================================= */
document.querySelectorAll('[data-submenu-target]').forEach(link => {
link.addEventListener('click', function (e) {
link.addEventListener('click', function(e) {
e.preventDefault();
const targetId = this.getAttribute('data-submenu-target');
const targetEl = document.getElementById(targetId);
if (targetEl) {
const instance = bootstrap.Collapse.getOrCreateInstance(targetEl, {
parent: '.nav-section', // Ferme les autres quand on en ouvre un
parent: '.nav-section',
toggle: false
});
instance.toggle();
}
});
});
});
</script>
<script>
document.addEventListener("DOMContentLoaded", function () {
const btn = document.getElementById('userDropdownBtn');
if (btn) {
// On crée l'instance Bootstrap une seule fois
const dropdown = new bootstrap.Dropdown(btn);
btn.addEventListener('click', function (e) {
// ÉTAPE CLÉ : On empêche les autres scripts du header de bloquer le clic
/* ================================
4) Dropdown utilisateur
================================= */
const btn = document.getElementById('userDropdownBtn');
if (btn) {
const dropdown = new bootstrap.Dropdown(btn);
btn.addEventListener('click', function(e) {
e.preventDefault();
e.stopPropagation();
// On force l'ouverture/fermeture
e.stopPropagation();
dropdown.toggle();
});
}
// Sécurité : Fermer le menu si on clique n'importe où ailleurs sur la page
document.addEventListener('click', function (e) {
document.addEventListener('click', function(e) {
const btn = document.getElementById('userDropdownBtn');
if (btn && !btn.contains(e.target)) {
const instance = bootstrap.Dropdown.getInstance(btn);
if (instance) instance.hide();
}
});
/* ================================
5) Ajouter étoile rouge aux champs required
================================= */
document.querySelectorAll('input[required], select[required], textarea[required]').forEach(function(el) {
let label = document.querySelector('label[for="'+el.id+'"]');
if (label && !label.querySelector('.required-star')) {
label.innerHTML += '<span class="required-star">*</span>';
}
});
});
</script>
</body>