diff --git a/css/style.css b/css/style.css index bce08bd..733b5e7 100644 --- a/css/style.css +++ b/css/style.css @@ -2091,14 +2091,6 @@ a.ms1-trad-link.btn-aide-trad{ padding-top:2px; } -.bib-range-preview{ - grid-column:1 / -1; - grid-row:2; - margin:0 0 2px; - font-size:12px; - line-height:1.3; -} - .epr-line .bib-start, .epr-line .bib-qty, .epr-line .bib-end{ @@ -2145,9 +2137,8 @@ a.ms1-trad-link.btn-aide-trad{ color:inherit; } -.bib-range-preview--error{ - color:#dc3545; - font-weight:600; +.bib-range-validate-msg{ + margin-bottom:4px; } .bib-field--pick:focus, diff --git a/inc_footer_scripts.php b/inc_footer_scripts.php index cfa53de..4226943 100644 --- a/inc_footer_scripts.php +++ b/inc_footer_scripts.php @@ -2631,11 +2631,32 @@ if ($strLangue == 'fr') { return { start: row.querySelector('.bib-start'), qty: row.querySelector('.bib-qty'), - end: row.querySelector('.bib-end'), - preview: row.querySelector('.bib-range-preview') + end: row.querySelector('.bib-end') }; } + function bibRangeGetErrorEl(row) { + var el = row && row.nextElementSibling; + if (el && el.classList.contains('bib-error')) { + return el; + } + return null; + } + + function bibRangeClearRangeError(row) { + var errEl = bibRangeGetErrorEl(row); + if (!errEl) return; + + var msg = errEl.querySelector('.bib-range-validate-msg'); + if (msg) { + msg.remove(); + } + + if (!errEl.querySelector('div:not(.bib-range-validate-msg)') && !errEl.textContent.trim()) { + errEl.style.display = 'none'; + } + } + function bibRangeClearFieldClasses(row) { var fields = bibRangeGetFields(row); if (!fields) return; @@ -2655,9 +2676,7 @@ if ($strLangue == 'fr') { } }); - if (fields.preview) { - fields.preview.classList.remove('bib-range-preview--error'); - } + bibRangeClearRangeError(row); } /** MSIN-4429 — Validation différée (blur / OK), pas pendant la frappe. */ @@ -2721,26 +2740,34 @@ if ($strLangue == 'fr') { function bibRangeShowValidation(row, validation) { var fields = bibRangeGetFields(row); - if (!fields || !fields.preview) { + if (!fields) { return; } bibRangeClearValidationUi(row); if (!validation) { - bibRangeUpdatePreview(row); return; } - var msg = bibRangeValidationMessage(validation); var target = validation.field === 'qty' ? fields.qty : fields.end; if (target) { target.classList.add('bib-field--invalid'); } - fields.preview.textContent = msg; - fields.preview.classList.remove('bib-ui-hidden'); - fields.preview.classList.add('bib-range-preview--error'); + var errEl = bibRangeGetErrorEl(row); + if (!errEl) { + return; + } + + var msgEl = errEl.querySelector('.bib-range-validate-msg'); + if (!msgEl) { + msgEl = document.createElement('div'); + msgEl.className = 'bib-range-validate-msg'; + errEl.insertBefore(msgEl, errEl.firstChild); + } + msgEl.textContent = bibRangeValidationMessage(validation); + errEl.style.display = 'block'; } function bibRangeValidateOnBlur(row) { @@ -2748,45 +2775,12 @@ if ($strLangue == 'fr') { bibRangeShowValidation(row, bibRangeValidate(row)); } - function bibRangeUpdatePreview(row) { - var fields = bibRangeGetFields(row); - if (!fields || !fields.preview) return; - - if (fields.preview.classList.contains('bib-range-preview--error')) { - return; - } - - var start = bibRangeParseInt(fields.start && fields.start.value); - var end = bibRangeParseInt(fields.end && fields.end.value); - var qty = bibRangeParseInt(fields.qty && fields.qty.value); - - fields.preview.classList.remove('bib-range-preview--error'); - - if (start > 0 && end >= start && qty > 0) { - fields.preview.textContent = bibJsFmt('jsRangePreview', start, end, qty); - fields.preview.classList.remove('bib-ui-hidden'); - } else if (!row.dataset.rangePilot && bibJs('jsRangePickHint')) { - var startVal = bibRangeParseInt(fields.start && fields.start.value); - if (startVal > 0) { - fields.preview.textContent = bibJs('jsRangePickHint'); - fields.preview.classList.remove('bib-ui-hidden'); - } else { - fields.preview.textContent = ''; - fields.preview.classList.add('bib-ui-hidden'); - } - } else { - fields.preview.textContent = ''; - fields.preview.classList.add('bib-ui-hidden'); - } - } - function applyBibRangeFieldState(row) { var fields = bibRangeGetFields(row); if (!fields || !fields.start || !fields.qty || !fields.end) return; if (row.dataset.locked === '1') { bibRangeClearFieldClasses(row); - bibRangeUpdatePreview(row); return; } @@ -2803,7 +2797,6 @@ if ($strLangue == 'fr') { fields.qty.value = ''; fields.end.value = ''; row.dataset.rangePilot = ''; - bibRangeUpdatePreview(row); return; } @@ -2812,7 +2805,6 @@ if ($strLangue == 'fr') { fields.end.classList.add('bib-field--pick'); fields.qty.readOnly = true; fields.end.readOnly = true; - bibRangeUpdatePreview(row); return; } @@ -2839,8 +2831,6 @@ if ($strLangue == 'fr') { fields.qty.value = ''; } } - - bibRangeUpdatePreview(row); } function onBibRangeFieldPick(row, pilot) { @@ -3548,7 +3538,10 @@ if ($strLangue == 'fr') { if (validation) { bibRangeShowValidation(row, validation); if (errorDiv) { - errorDiv.innerText = bibRangeValidationMessage(validation); + var msgEl = errorDiv.querySelector('.bib-range-validate-msg'); + if (!msgEl) { + errorDiv.innerText = bibRangeValidationMessage(validation); + } errorDiv.style.display = 'block'; } var invalidField = validation.field === 'qty' diff --git a/php/inc_fx_promoteur.php b/php/inc_fx_promoteur.php index 6cc4a90..aa518b9 100644 --- a/php/inc_fx_promoteur.php +++ b/php/inc_fx_promoteur.php @@ -3104,8 +3104,6 @@ function fxBibModuleJsDataAttrs() { 'auto-pending-bibs' => 'bib_v4_js_auto_pending_bibs', 'range-incomplete' => 'bib_v4_js_range_incomplete', 'range-invalid' => 'bib_v4_js_range_invalid', - 'range-preview' => 'bib_v4_js_range_preview', - 'range-pick-hint' => 'bib_v4_js_range_pick_hint', 'range-invalid-end' => 'bib_v4_js_range_invalid_end', 'range-invalid-qty' => 'bib_v4_js_range_invalid_qty', ]; @@ -5301,8 +5299,6 @@ if (!$blnRangeLocked && ( -
-
diff --git a/php/inc_settings.php b/php/inc_settings.php index 257aaa3..11691de 100644 --- a/php/inc_settings.php +++ b/php/inc_settings.php @@ -7,7 +7,7 @@ * Constantes * * **************/ -define('_VERSION_CODE', '4.72.731'); +define('_VERSION_CODE', '4.72.732'); define('_DATE_CODE', '2026-07-07'); //MSIN-4290 define('QR_SECRET_KEY', 'ms1_qr_2026_cle_secrete_longue_et_fixe');