diff --git a/autopost/public/autopost.js b/autopost/public/autopost.js index 52b3d7e..53125fb 100644 --- a/autopost/public/autopost.js +++ b/autopost/public/autopost.js @@ -65,7 +65,7 @@ function updateTable(rows) { var tr = '' + '' + - '' + + '' + '' + '' + esc(row.nom) + '' + '' + statusText + '' + diff --git a/autopost/public/checkboxes.css b/autopost/public/checkboxes.css new file mode 100644 index 0000000..ec884ae --- /dev/null +++ b/autopost/public/checkboxes.css @@ -0,0 +1,141 @@ +/* Checkboxes personnalisées modernes */ + +/* Style de base pour toutes les checkboxes */ +.checkbox-custom { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + width: 18px; + height: 18px; + border: 2px solid #4b5563; + border-radius: 4px; + background: #1f2937; + position: relative; + cursor: pointer; + transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); + outline: none; + display: inline-flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} + +/* État hover */ +.checkbox-custom:hover { + border-color: #6b7280; + background: #374151; + transform: scale(1.05); + box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); +} + +/* État focus */ +.checkbox-custom:focus { + border-color: #3b82f6; + box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2); +} + +/* État checked */ +.checkbox-custom:checked { + background: linear-gradient(135deg, #3b82f6, #1d4ed8); + border-color: #3b82f6; + transform: scale(1.05); + box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2); +} + +/* Icône de validation */ +.checkbox-custom:checked::after { + content: ''; + position: absolute; + width: 10px; + height: 6px; + border: 2px solid white; + border-top: none; + border-right: none; + transform: rotate(-45deg); + top: 3px; + left: 3px; + animation: checkmark 0.2s ease-in-out; +} + +/* Animation de la coche */ +@keyframes checkmark { + 0% { + transform: rotate(-45deg) scale(0); + opacity: 0; + } + 50% { + transform: rotate(-45deg) scale(1.2); + opacity: 1; + } + 100% { + transform: rotate(-45deg) scale(1); + opacity: 1; + } +} + +/* État indéterminé pour "Tout sélectionner" */ +.checkbox-custom:indeterminate { + background: linear-gradient(135deg, #f59e0b, #d97706); + border-color: #f59e0b; + transform: scale(1.05); + box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.2); +} + +.checkbox-custom:indeterminate::after { + content: ''; + position: absolute; + width: 8px; + height: 2px; + background: white; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + border-radius: 1px; + animation: indeterminate 0.2s ease-in-out; +} + +/* Animation de l'état indéterminé */ +@keyframes indeterminate { + 0% { + width: 0; + opacity: 0; + } + 100% { + width: 8px; + opacity: 1; + } +} + +/* Effet de selection pour les lignes avec checkbox cochée */ +tr:has(.checkbox-custom:checked) { + background-color: rgba(59, 130, 246, 0.05) !important; + border-left: 3px solid #3b82f6; +} + +/* Animation d'apparition lors du chargement */ +.checkbox-custom { + animation: fadeIn 0.3s ease-in-out; +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: scale(0.8); + } + to { + opacity: 1; + transform: scale(1); + } +} + +/* Amélioration pour les écrans tactiles */ +@media (hover: none) { + .checkbox-custom:hover { + transform: none; + box-shadow: none; + } + + .checkbox-custom:active { + transform: scale(0.95); + } +} \ No newline at end of file diff --git a/autopost/server.js b/autopost/server.js index ffbeb84..d5d05c1 100644 --- a/autopost/server.js +++ b/autopost/server.js @@ -92,7 +92,7 @@ function renderRow(row) { return ` - + ${esc(row.nom)} ${statusText} diff --git a/autopost/views/autopost.html b/autopost/views/autopost.html index 3f01f3d..be35724 100644 --- a/autopost/views/autopost.html +++ b/autopost/views/autopost.html @@ -5,6 +5,7 @@ {{TITLE}} + @@ -135,7 +136,7 @@ - + Name Status