From 7ca27197bff59b038b3092db0e7e95671990e6ad Mon Sep 17 00:00:00 2001 From: kdeterme Date: Thu, 17 Sep 2026 15:41:57 +0200 Subject: [PATCH] feat: add custom admin assets to dynamically toggle approval_except_urgent field visibility --- loko/contracts/admin.py | 6 ++++++ .../static/contracts/css/contract_admin.css | 16 ++++++++++++++++ .../static/contracts/js/contract_admin.js | 19 +++++++++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 loko/contracts/static/contracts/css/contract_admin.css create mode 100644 loko/contracts/static/contracts/js/contract_admin.js diff --git a/loko/contracts/admin.py b/loko/contracts/admin.py index 5cd3b76..9b04071 100644 --- a/loko/contracts/admin.py +++ b/loko/contracts/admin.py @@ -158,6 +158,12 @@ class ContractAdmin(admin.ModelAdmin): }), ) + class Media: + css = { + 'all': ('contracts/css/contract_admin.css',) + } + js = ('contracts/js/contract_admin.js',) + def thematics_list(self, obj): return ", ".join([thematic.name for thematic in obj.thematics.all()]) thematics_list.short_description = 'Thématiques' diff --git a/loko/contracts/static/contracts/css/contract_admin.css b/loko/contracts/static/contracts/css/contract_admin.css new file mode 100644 index 0000000..050de46 --- /dev/null +++ b/loko/contracts/static/contracts/css/contract_admin.css @@ -0,0 +1,16 @@ +/* Indentation et mise en valeur ergonomique de l'option "Sauf si urgence" */ +.form-row.field-approval_except_urgent { + margin-left: 32px !important; + padding-left: 16px !important; + border-left: 3px solid #79aec8 !important; + background-color: rgba(121, 174, 200, 0.04); + transition: opacity 0.2s ease-in-out; +} + +.form-row.field-approval_except_urgent .checkbox-row { + position: relative; +} + +.form-row.field-approval_except_urgent label { + font-weight: 500; +} diff --git a/loko/contracts/static/contracts/js/contract_admin.js b/loko/contracts/static/contracts/js/contract_admin.js new file mode 100644 index 0000000..d51d799 --- /dev/null +++ b/loko/contracts/static/contracts/js/contract_admin.js @@ -0,0 +1,19 @@ +document.addEventListener('DOMContentLoaded', function() { + const needsApprovalCheckbox = document.getElementById('id_needs_approval'); + const exceptUrgentRow = document.querySelector('.form-row.field-approval_except_urgent'); + + if (needsApprovalCheckbox && exceptUrgentRow) { + function syncExceptUrgentVisibility() { + if (needsApprovalCheckbox.checked) { + exceptUrgentRow.style.opacity = '1'; + exceptUrgentRow.style.pointerEvents = 'auto'; + } else { + exceptUrgentRow.style.opacity = '0.45'; + exceptUrgentRow.style.pointerEvents = 'none'; + } + } + + needsApprovalCheckbox.addEventListener('change', syncExceptUrgentVisibility); + syncExceptUrgentVisibility(); + } +});