valider
This commit is contained in:
parent
a1e1a75c0a
commit
1add3cde74
File diff suppressed because one or more lines are too long
104
Vue/gabarit.php
104
Vue/gabarit.php
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user