diff --git a/Bootstrap_new/css/theme-modern.css b/Bootstrap_new/css/theme-modern.css index 869732a6..8c1170c0 100644 --- a/Bootstrap_new/css/theme-modern.css +++ b/Bootstrap_new/css/theme-modern.css @@ -1483,3 +1483,95 @@ select[class*="selectpicker"], display: flex !important; align-items: center; } + +/* Styles sidebar toggle + ligne sélectionnée */ +/* ── Ligne DataTable sélectionnée ── */ + .table tbody tr.row-selected > td { + background: rgba(26, 107, 74, 0.08) !important; + border-left: 3px solid var(--color-accent, #0abf7c); + } + + /* ── Transitions fluides (doivent être déclarées ici, APRÈS le CSS du template, + pour ne pas être écrasées par Bootstrap/css/style.css) ── */ + /* + #sidebar { + transition: width 0.3s cubic-bezier(.4,0,.2,1), + transform 0.3s cubic-bezier(.4,0,.2,1) !important; + overflow: hidden !important; + will-change: width; + } + */ + + /* + #main { + transition: margin-left 0.3s cubic-bezier(.4,0,.2,1) !important; + will-change: margin-left; + } + */ + + /* ── Mode réduit (icônes seules) — desktop ── */ + body.toggle-sidebar #sidebar { + width: 68px !important; + min-width: 68px !important; + } + + body.toggle-sidebar #main { + margin-left: 68px !important; + } + /* Masquer textes et chevrons */ + body.toggle-sidebar #sidebar .nav-link span, + body.toggle-sidebar #sidebar .nav-link .bi-chevron-down, + body.toggle-sidebar #sidebar .sidebar-section-label { + opacity: 0; + width: 0; + overflow: hidden; + white-space: nowrap; + display: inline-block; /* garder dans le flux mais invisible — évite le reflow brutal */ + transition: opacity 0.2s ease, width 0.2s ease; + } + body:not(.toggle-sidebar) #sidebar .nav-link span, + body:not(.toggle-sidebar) #sidebar .nav-link .bi-chevron-down { + opacity: 1; + width: auto; + transition: opacity 0.25s ease 0.05s, width 0.25s ease; + } + /* Centrer les icônes et agrandir légèrement */ + body.toggle-sidebar #sidebar .nav-link { + justify-content: center !important; + padding: 11px 0 !important; + } + body.toggle-sidebar #sidebar .nav-link i:first-child { + font-size: 1.25rem !important; + width: auto !important; + margin: 0 !important; + } + /* Fermer les sous-menus */ + body.toggle-sidebar #sidebar .nav-content { + display: none !important; + } + /* Tooltip natif au survol en mode réduit */ + body.toggle-sidebar #sidebar .nav-link { + position: relative; + } + + /* ── Mobile : slide depuis la gauche ── */ + @media (max-width: 1199px) { + #sidebar { + transform: translateX(-100%); + width: var(--sidebar-width, 240px) !important; + } + #sidebar.sidebar-mobile-open { + transform: translateX(0); + } + /* Overlay semi-transparent derrière le sidebar mobile */ + #sidebar.sidebar-mobile-open::after { + content: ''; + position: fixed; + inset: 0; + background: rgba(0,0,0,0.35); + z-index: -1; + } + #main { + margin-left: 0 !important; + } + } \ No newline at end of file diff --git a/Controleur/gabarit.php b/Controleur/gabarit.php deleted file mode 100755 index b094d3f7..00000000 --- a/Controleur/gabarit.php +++ /dev/null @@ -1,320 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - <?= $_SESSION['vue'] ?> - - - - - - - - - - - - - - -
-
- -
- -
-
-
-
- - -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Context
" . $this->nettoyer(format_N($_SESSION['ndDep_C'])) . " > " . $this->nettoyer(format_N($_SESSION['ndActif_C'])) ?>" readonly >
- " " ): ?> - - -
Changer mot de passe
- - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - -
- -
- - - \ No newline at end of file diff --git a/Js/fonctions.js b/Js/fonctions.js index 4c74fbbd..00fe184c 100755 --- a/Js/fonctions.js +++ b/Js/fonctions.js @@ -48120,13 +48120,11 @@ function filtreTableReference(numeroTable) { const racineWeb = $("#racineWeb").val(); const $divListe = $("#div_listetables"); - // 1. DESTRUCTION TOTALE de l'existant + // Nettoyage radical if ($("#listetables").length) { - $("#listetables").selectpicker('destroy'); // Tue l'instance JS + $("#listetables").selectpicker('destroy'); } - // Supprime physiquement tous les menus détachés du body $('.bootstrap-select.bs-container').remove(); - // Vide le conteneur pour repartir de zéro $divListe.empty(); $.ajax({ @@ -48134,35 +48132,30 @@ function filtreTableReference(numeroTable) { type : 'post', data: { numeroTable: numeroTable }, success: function(data) { - // 1. On injecte le HTML brut - $divListe.html(data); + // Injection du HTML + $divListe.html(data); - const $select = $("#listetables"); + const $select = $("#listetables"); - // 2. NETTOYAGE CHIRURGICAL des options - // On force le texte à être propre et on supprime l'attribut title - // qui cause souvent le doublon dans le rendu du plugin - $select.find('option').each(function() { - const propre = $(this).text().trim(); - $(this).text(propre); // Nettoie le texte interne - $(this).attr('data-content', ''); // Supprime d'éventuels attributs parasites - $(this).removeAttr('title'); // Supprime le titre qui double le rendu - }); + // On retire la classe 'selectpicker' temporairement pour éviter + // que le script global ne l'attrape avant nous + $select.removeClass('selectpicker'); - // 3. INITIALISATION avec paramètres de sécurité - $select.selectpicker({ - liveSearch: true, - size: 10, - container: 'body', - style: 'btn-form-select', // Utilise votre classe de style - noneSelectedText: (typeof _ !== 'undefined') ? _("-- Sélectionner --") : "-- Sélectionner --" - }); + setTimeout(function() { + $select.selectpicker({ + liveSearch: true, + size: 10, + container: 'body', + width: '100%' + }); + + // On remet la classe après initialisation si nécessaire pour le CSS + $select.addClass('selectpicker'); - // 4. Focus UX - setTimeout(function() { - $divListe.find('.dropdown-toggle').focus(); - }, 200); - } + // Focus sur le bouton généré + $divListe.find('.dropdown-toggle').focus(); + }, 100); + } }); } diff --git a/Vue/gabarit.php b/Vue/gabarit.php index 32b5b8d7..5ddea837 100755 --- a/Vue/gabarit.php +++ b/Vue/gabarit.php @@ -2,7 +2,7 @@ /* * INTER SANTÉ — gabarit.php * Point d'entrée principal — Structure modulaire SaaS Premium - * Refonte UI/UX v2025 + * Refonte UI/UX v2026 */ require_once 'gabarit_queries.php'; diff --git a/Vue/includes/scripts-footer.php b/Vue/includes/scripts-footer.php index 326728c2..bc0e1d6e 100644 --- a/Vue/includes/scripts-footer.php +++ b/Vue/includes/scripts-footer.php @@ -96,9 +96,15 @@ }); } - /* --- Bootstrap Select global --- */ + /* --- Bootstrap Select global (Version Corrigée) --- */ if ($.fn.selectpicker) { - $('select.selectpicker').selectpicker('refresh'); + // On n'utilise plus 'refresh' à l'aveugle sur tout ce qui bouge + // On laisse les fonctions spécifiques gérer leurs propres instances + $('.selectpicker').each(function() { + if (!$(this).parent().hasClass('bootstrap-select')) { + $(this).selectpicker(); + } + }); } /* --- Sidebar toggle --- @@ -151,94 +157,5 @@ }); // end document.ready - - - -