diff --git a/css/style.css b/css/style.css index 0329f48..e17a351 100644 --- a/css/style.css +++ b/css/style.css @@ -1012,7 +1012,13 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { .epr-action-group{ display:inline-flex; align-items:center; - gap:4px; + gap:8px; +} + +.epr-auto-badge-wrap{ + display:inline-flex; + align-items:center; + gap:8px; } .epr-add-range-wrap{ @@ -1025,7 +1031,28 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { .epr-header-label{ display:inline-flex; align-items:center; - gap:6px; + gap:8px; +} + +.batch-config label{ + display:inline-flex; + align-items:center; + gap:8px; + flex-wrap:wrap; +} + +.batch-info{ + display:flex; + align-items:center; + gap:8px; + flex-wrap:wrap; +} + +.auto-info{ + display:flex; + align-items:center; + gap:8px; + flex-wrap:wrap; } .btn-aide-bib{ @@ -1048,23 +1075,53 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { color:#212529; } -/* (?) inline dans un bouton action — masqué avec le bouton parent. */ -.bib-aide-inline{ - display:inline; - margin-left:0.35em; - font-weight:700; - cursor:help; - white-space:nowrap; +/* (?) rond assorti au bouton voisin (Bootstrap ms1). */ +.btn-secondary + .btn-aide-bib, +.btn-aide-tone-secondary{ + border-color:#6c757d; + background-color:#6c757d; + color:#fff; +} +.btn-secondary + .btn-aide-bib:hover, +.btn-aide-tone-secondary:hover{ + background-color:#5a6268; + color:#fff; } -button .bib-aide-inline, -.badge .bib-aide-inline{ - color:inherit; +.btn-success + .btn-aide-bib, +.btn-aide-tone-success, +.btn-auto.btn-success + .btn-aide-bib{ + border-color:#28a745; + background-color:#28a745; + color:#fff; +} +.btn-success + .btn-aide-bib:hover, +.btn-aide-tone-success:hover, +.btn-auto.btn-success + .btn-aide-bib:hover{ + background-color:#218838; + color:#fff; } -.bib-aide-inline:focus{ - outline:1px dotted currentColor; - outline-offset:2px; +.btn-danger + .btn-aide-bib, +.btn-aide-tone-danger{ + border-color:#dc3545; + background-color:#dc3545; + color:#fff; +} +.btn-danger + .btn-aide-bib:hover, +.btn-aide-tone-danger:hover{ + background-color:#c82333; + color:#fff; +} + +.btn-auto.btn-secondary + .btn-aide-bib{ + border-color:#6c757d; + background-color:#6c757d; + color:#fff; +} +.btn-auto.btn-secondary + .btn-aide-bib:hover{ + background-color:#5a6268; + color:#fff; } .tippy-box[data-theme~='ms1-bib']{ @@ -1125,8 +1182,8 @@ button .bib-aide-inline, .epr-line{ display:grid; - grid-template-columns: minmax(72px, 1fr) minmax(72px, 1fr) 52px 52px 52px 52px 52px 36px 36px; - gap:8px; + grid-template-columns: 52px 52px 48px 48px 48px 48px 48px 32px 32px; + gap:6px; align-items:center; } .batch-checkbox{ diff --git a/inc_footer_scripts.php b/inc_footer_scripts.php index 61de8b0..64d4d8f 100644 --- a/inc_footer_scripts.php +++ b/inc_footer_scripts.php @@ -2032,13 +2032,25 @@ if ($strLangue == 'fr') { interactive: true, content: bibTippyAideContent }); + } - scope.querySelectorAll('.bib-aide-inline:not([data-bib-aide-bound])').forEach(function (el) { - el.setAttribute('data-bib-aide-bound', '1'); - el.addEventListener('click', function (e) { - e.stopPropagation(); - }); - }); + /** Affiche ou masque le .epr-action-group entier (bouton + ?). */ + function bibSetActionGroupDisplay(btn, show) { + if (!btn) return; + let group = btn.closest('.epr-action-group'); + let val = show ? '' : 'none'; + if (group) { + group.style.display = val; + } else { + btn.style.display = show ? '' : 'none'; + } + } + + function bibSetGroupDisplay(selector, show, row) { + let el = (row || moduleBib).querySelector(selector); + if (el) { + el.style.display = show ? '' : 'none'; + } } function setBibContainerHtml(row, html) { @@ -2090,8 +2102,8 @@ if ($strLangue == 'fr') { if (!row) return; let btnAuto = row.querySelector('.btn-auto'); - let badge = row.querySelector('.bib-auto-badge'); - let btnDesactiver = row.querySelector('.btn-desactiver-auto'); + let badgeWrap = row.querySelector('.epr-auto-badge-wrap'); + let desactiverGroup = row.querySelector('.epr-action-desactiver-group'); row.dataset.autoActive = isActive ? '1' : '0'; @@ -2107,12 +2119,12 @@ if ($strLangue == 'fr') { btnAuto.classList.toggle('btn-secondary', !isActive); } - if (badge) { - badge.style.display = isActive ? '' : 'none'; + if (badgeWrap) { + badgeWrap.style.display = isActive ? '' : 'none'; } - if (btnDesactiver) { - btnDesactiver.style.display = isActive ? '' : 'none'; + if (desactiverGroup) { + desactiverGroup.style.display = isActive ? '' : 'none'; } } @@ -2147,10 +2159,7 @@ if ($strLangue == 'fr') { btnBatch.style.display = ''; } - let btnReset = row.querySelector('.btn-reset'); - if (btnReset) { - btnReset.style.display = ''; - } + bibSetGroupDisplay(row.querySelector('.btn-reset'), true); fetch('/ajax_bib_range.php', { method: 'POST', @@ -2208,10 +2217,7 @@ if ($strLangue == 'fr') { btnBatch.style.display = 'none'; } - let btnReset = row.querySelector('.btn-reset'); - if (btnReset) { - btnReset.style.display = 'none'; - } + bibSetGroupDisplay(row.querySelector('.btn-reset'), false); fetch('/ajax_bib_range.php', { method: 'POST', @@ -2264,8 +2270,11 @@ if ($strLangue == 'fr') { // RESET BUTTON // ===================== let btnReset = row.querySelector('.btn-reset'); + let resetGroup = row.querySelector('.epr-action-reset-group'); - if (btnReset) { + if (resetGroup) { + resetGroup.style.display = hasBib ? '' : 'none'; + } else if (btnReset) { btnReset.style.display = hasBib ? '' : 'none'; } @@ -2477,8 +2486,8 @@ if ($strLangue == 'fr') { let hasSelection = selected.length > 0; - if (goBtn) goBtn.style.display = hasSelection ? 'inline-block' : 'none'; - if (simBtn) simBtn.style.display = hasSelection ? 'inline-block' : 'none'; + bibSetGroupDisplay('.epr-action-go-group', hasSelection, row); + bibSetGroupDisplay('.epr-action-sim-group', hasSelection, row); row.dataset.loading = '0'; @@ -2755,9 +2764,10 @@ if ($strLangue == 'fr') { let goBtn = row.querySelector('.btn-go-batch'); if (goBtn) { - goBtn.style.display = 'none'; goBtn.textContent = 'GO'; } + bibSetGroupDisplay(row.querySelector('.btn-go-batch'), false); + bibSetGroupDisplay(row.querySelector('.btn-simuler-batch'), false); // Reset des checkbox row.querySelectorAll('.batch-select-range').forEach(cb => { cb.checked = false; @@ -2886,14 +2896,10 @@ if ($strLangue == 'fr') { let goBtn = row.querySelector('.btn-go-batch'); if (goBtn) { - goBtn.style.display = 'none'; goBtn.textContent = 'GO'; } - - let simBtn = row.querySelector('.btn-simuler-batch'); - if (simBtn) { - simBtn.style.display = 'none'; - } + bibSetGroupDisplay(row.querySelector('.btn-go-batch'), false); + bibSetGroupDisplay(row.querySelector('.btn-simuler-batch'), false); let orderBlock = row.querySelector('.batch-order'); if (orderBlock) { @@ -2973,18 +2979,13 @@ if ($strLangue == 'fr') { orderBlock.closest('.mb-2').style.display = 'none'; } - // cacher simuler - let simBtn = row.querySelector('.btn-simuler-batch'); - if (simBtn) { - simBtn.style.display = 'none'; - } + bibSetGroupDisplay(row.querySelector('.btn-simuler-batch'), false); - // bouton GO let goBtn = row.querySelector('.btn-go-batch'); if (goBtn) { - goBtn.style.display = 'none'; goBtn.textContent = 'Réinitialiser'; } + bibSetGroupDisplay(goBtn, false); // warning let info = row.querySelector('.epr-actions .batch-info-text'); @@ -3101,11 +3102,8 @@ if ($strLangue == 'fr') { }); // cacher boutons batch - let goBtn = row.querySelector('.btn-go-batch'); - let simBtn = row.querySelector('.btn-simuler-batch'); - - if (goBtn) goBtn.style.display = 'none'; - if (simBtn) simBtn.style.display = 'none'; + bibSetGroupDisplay(row.querySelector('.btn-go-batch'), false); + bibSetGroupDisplay(row.querySelector('.btn-simuler-batch'), false); // cacher config let config = row.querySelector('.batch-config-container'); diff --git a/php/inc_fx_promoteur.php b/php/inc_fx_promoteur.php index 35afcdf..59da160 100644 --- a/php/inc_fx_promoteur.php +++ b/php/inc_fx_promoteur.php @@ -2725,37 +2725,30 @@ function fxBibTippyAttr($clef) { return ' data-tippy-content="' . fxBibEsc($strTip) . '"'; } -/** Contenu aide (?) — texte caché + « ? » avec espace après. */ +/** Contenu aide (?) — texte caché ; espace visuel avant le rond via CSS (.epr-action-group gap). */ function fxBibAideInner($clef) { $strAide = trim(fxBibAide($clef, 0)); if ($strAide === '') { return ''; } - return '? '; + return '?'; } -/** Bouton (?) séparé — en-têtes, colonnes, textes sans bouton action. */ -function fxBibAideButton($clef) { +/** Bouton (?) rond à côté du libellé / bouton action — $strTone : secondary|success|danger (optionnel). */ +function fxBibAideButton($clef, $strTone = '') { $strInner = fxBibAideInner($clef); if ($strInner === '') { return ''; } - return ''; } -/** (?) inline — à l'intérieur d'un bouton (masqué avec le bouton parent). */ -function fxBibAideInline($clef) { - $strInner = fxBibAideInner($clef); - if ($strInner === '') { - return ''; - } - return '' - . $strInner - . ''; -} - /** Libellé info_texte + bouton (?) si info_aide renseigné. */ function fxBibTexteAide($clef, $mem_echo = 1, $strFallback = '') { $str = fxBibTexte($clef, 0, $strFallback); @@ -2784,8 +2777,9 @@ function renderBibAddRangeButton($epr_id, $extraStyle = '') { + + - + + - + + + + + @@ -2844,17 +2844,19 @@ function renderBibAssignActions($tabBibAssignments, $strLangue, $infoBib, $blnAu
- + + - + + - - +
@@ -2862,15 +2864,17 @@ function renderBibAssignActions($tabBibAssignments, $strLangue, $infoBib, $blnAu diff --git a/php/inc_settings.php b/php/inc_settings.php index 32cf2cb..5e2cdec 100644 --- a/php/inc_settings.php +++ b/php/inc_settings.php @@ -7,7 +7,7 @@ * Constantes * * **************/ -define('_VERSION_CODE', '4.72.63'); +define('_VERSION_CODE', '4.72.631'); define('_DATE_CODE', '2026-06-17'); //MSIN-4290 define('QR_SECRET_KEY', 'ms1_qr_2026_cle_secrete_longue_et_fixe');