Bootstrap theme + rework some views

This commit is contained in:
William Bouzourène 2025-05-13 15:01:12 +02:00
parent e2de88b25b
commit 183415912f
Signed by: bouzoure
SSH key fingerprint: SHA256:19MbXpLua4rUtk8tunMesD8KUKb91LXLHg8E/qTooww
6 changed files with 267 additions and 257 deletions

6
frontend/bootstrap.scss vendored Normal file
View file

@ -0,0 +1,6 @@
$red: #cb0000;
@use "npm:bootstrap/scss/bootstrap.scss" with (
$enable-rounded: false,
$danger: $red
);

View file

@ -1,4 +1,4 @@
@import "npm:bootstrap/dist/css/bootstrap.css"; @import "bootstrap.scss";
@import "npm:bootstrap-icons/font/bootstrap-icons.css"; @import "npm:bootstrap-icons/font/bootstrap-icons.css";
img#header-logo { img#header-logo {

View file

@ -8,6 +8,7 @@
"url": "https://git.readonly.ch/bouzoure/pop-camarades" "url": "https://git.readonly.ch/bouzoure/pop-camarades"
}, },
"devDependencies": { "devDependencies": {
"@parcel/transformer-sass": "2.15.0",
"parcel": "^2.15.0", "parcel": "^2.15.0",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"prettier-plugin-jinja-template": "^2.1.0" "prettier-plugin-jinja-template": "^2.1.0"

54
pnpm-lock.yaml generated
View file

@ -18,6 +18,9 @@ importers:
specifier: ^3.7.1 specifier: ^3.7.1
version: 3.7.1 version: 3.7.1
devDependencies: devDependencies:
'@parcel/transformer-sass':
specifier: 2.15.0
version: 2.15.0(@parcel/core@2.15.0(@swc/helpers@0.5.17))
parcel: parcel:
specifier: ^2.15.0 specifier: ^2.15.0
version: 2.15.0(@swc/helpers@0.5.17) version: 2.15.0(@swc/helpers@0.5.17)
@ -370,6 +373,10 @@ packages:
resolution: {integrity: sha512-I108zq+ZwQrGXgkbdIXLW3VbUQhW0gjACiHVEXM380wWm/44bbrGLbD6VMupq5svP2Y5sKkopI9zzjuYUHplHw==} resolution: {integrity: sha512-I108zq+ZwQrGXgkbdIXLW3VbUQhW0gjACiHVEXM380wWm/44bbrGLbD6VMupq5svP2Y5sKkopI9zzjuYUHplHw==}
engines: {node: '>= 16.0.0', parcel: ^2.15.0} engines: {node: '>= 16.0.0', parcel: ^2.15.0}
'@parcel/transformer-sass@2.15.0':
resolution: {integrity: sha512-upcwFGc7fd0QlHSReLc4OTZTcwDGlHlDT70cQOCbAPRRE6YDGIJYqhAeqTWShEDsZBets4GJyu6SN1lDsXjTIQ==}
engines: {node: '>= 16.0.0', parcel: ^2.15.0}
'@parcel/transformer-svg@2.15.0': '@parcel/transformer-svg@2.15.0':
resolution: {integrity: sha512-pbhbkxM4mWjH4kpg8F+0xmHbXNCTavJ4DzrCoYgLZszZKYMhOYQZZ/uHkx4wOZ+b3n4iPe4QDlByYkh0QACxbw==} resolution: {integrity: sha512-pbhbkxM4mWjH4kpg8F+0xmHbXNCTavJ4DzrCoYgLZszZKYMhOYQZZ/uHkx4wOZ+b3n4iPe4QDlByYkh0QACxbw==}
engines: {node: '>= 16.0.0', parcel: ^2.15.0} engines: {node: '>= 16.0.0', parcel: ^2.15.0}
@ -584,6 +591,10 @@ packages:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'} engines: {node: '>=10'}
chokidar@4.0.3:
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
engines: {node: '>= 14.16.0'}
chrome-trace-event@1.0.4: chrome-trace-event@1.0.4:
resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
engines: {node: '>=6.0'} engines: {node: '>=6.0'}
@ -643,6 +654,9 @@ packages:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
immutable@5.1.2:
resolution: {integrity: sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ==}
is-extglob@2.1.1: is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@ -794,17 +808,30 @@ packages:
resolution: {integrity: sha512-FPvF2XxTSikpJxcr+bHut2H4gJ17+18Uy20D5/F+SKzFap62R3cM5wH6b8WN3LyGSYeQilLEcJcR1fjBSI2S1A==} resolution: {integrity: sha512-FPvF2XxTSikpJxcr+bHut2H4gJ17+18Uy20D5/F+SKzFap62R3cM5wH6b8WN3LyGSYeQilLEcJcR1fjBSI2S1A==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
readdirp@4.1.2:
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
engines: {node: '>= 14.18.0'}
regenerator-runtime@0.14.1: regenerator-runtime@0.14.1:
resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
safe-buffer@5.2.1: safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
sass@1.88.0:
resolution: {integrity: sha512-sF6TWQqjFvr4JILXzG4ucGOLELkESHL+I5QJhh7CNaE+Yge0SI+ehCatsXhJ7ymU1hAFcIS3/PBpjdIbXoyVbg==}
engines: {node: '>=14.0.0'}
hasBin: true
semver@7.7.1: semver@7.7.1:
resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
engines: {node: '>=10'} engines: {node: '>=10'}
hasBin: true hasBin: true
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
supports-color@7.2.0: supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'} engines: {node: '>=8'}
@ -1426,6 +1453,15 @@ snapshots:
- '@parcel/core' - '@parcel/core'
- napi-wasm - napi-wasm
'@parcel/transformer-sass@2.15.0(@parcel/core@2.15.0(@swc/helpers@0.5.17))':
dependencies:
'@parcel/plugin': 2.15.0(@parcel/core@2.15.0(@swc/helpers@0.5.17))
'@parcel/source-map': 2.1.1
sass: 1.88.0
transitivePeerDependencies:
- '@parcel/core'
- napi-wasm
'@parcel/transformer-svg@2.15.0(@parcel/core@2.15.0(@swc/helpers@0.5.17))': '@parcel/transformer-svg@2.15.0(@parcel/core@2.15.0(@swc/helpers@0.5.17))':
dependencies: dependencies:
'@parcel/diagnostic': 2.15.0 '@parcel/diagnostic': 2.15.0
@ -1626,6 +1662,10 @@ snapshots:
ansi-styles: 4.3.0 ansi-styles: 4.3.0
supports-color: 7.2.0 supports-color: 7.2.0
chokidar@4.0.3:
dependencies:
readdirp: 4.1.2
chrome-trace-event@1.0.4: {} chrome-trace-event@1.0.4: {}
clone@2.1.2: {} clone@2.1.2: {}
@ -1664,6 +1704,8 @@ snapshots:
has-flag@4.0.0: {} has-flag@4.0.0: {}
immutable@5.1.2: {}
is-extglob@2.1.1: {} is-extglob@2.1.1: {}
is-glob@4.0.3: is-glob@4.0.3:
@ -1811,12 +1853,24 @@ snapshots:
react-refresh@0.16.0: {} react-refresh@0.16.0: {}
readdirp@4.1.2: {}
regenerator-runtime@0.14.1: {} regenerator-runtime@0.14.1: {}
safe-buffer@5.2.1: {} safe-buffer@5.2.1: {}
sass@1.88.0:
dependencies:
chokidar: 4.0.3
immutable: 5.1.2
source-map-js: 1.2.1
optionalDependencies:
'@parcel/watcher': 2.5.1
semver@7.7.1: {} semver@7.7.1: {}
source-map-js@1.2.1: {}
supports-color@7.2.0: supports-color@7.2.0:
dependencies: dependencies:
has-flag: 4.0.0 has-flag: 4.0.0

View file

@ -49,10 +49,7 @@
{% endif %} {% endif %}
</div> </div>
<div <div id="search-container" class="h-100 p-4 mb-3 bg-body-tertiary border">
id="search-container"
class="h-100 p-4 mb-3 bg-body-tertiary border rounded-3"
>
<div class="row"> <div class="row">
<div class="col-lg-6 mb-3"> <div class="col-lg-6 mb-3">
<label for="name" class="form-label">Nom et prénom</label> <label for="name" class="form-label">Nom et prénom</label>
@ -83,11 +80,10 @@
</div> </div>
<div class="col-sm-6 col-lg-3 mb-3 pt-3"> <div class="col-sm-6 col-lg-3 mb-3 pt-3">
{% if PermShow %} {% if PermShow %}
<div class="form-check form-switch"> <div class="form-check">
<input <input
class="form-check-input" class="form-check-input"
type="checkbox" type="checkbox"
role="switch"
data-search-field="active" data-search-field="active"
data-search-advanced="false" data-search-advanced="false"
id="active" id="active"
@ -106,11 +102,10 @@
{% endif %} {% endif %}
{% if PermShowArchived %} {% if PermShowArchived %}
<div class="form-check form-switch"> <div class="form-check">
<input <input
class="form-check-input" class="form-check-input"
type="checkbox" type="checkbox"
role="switch"
data-search-field="archive" data-search-field="archive"
data-search-advanced="false" data-search-advanced="false"
id="archive" id="archive"

View file

@ -49,15 +49,12 @@
</div> </div>
</div> </div>
<div class="mt-4 mb-3 d-md-none">
<span class="h4"> Permissions membres </span>
</div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-2"> <div class="col-md-2">
<div class="d-none d-md-block">Permissions membres</div> <div class="mb-2">Permissions membres</div>
</div> </div>
<div class="col-md-10"> <div class="col-md-10">
<div class="mb-1">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
@ -66,12 +63,10 @@
autocomplete="off" autocomplete="off"
{% if Role.ShowMember %}checked{% endif %} {% if Role.ShowMember %}checked{% endif %}
/> />
<label for="show_member" class="form-label"> Afficher membres </label> <label for="show_member" class="form-label"> Afficher </label>
</div>
</div> </div>
<div class="row mb-3"> <div class="mb-1">
<div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
@ -80,12 +75,10 @@
autocomplete="off" autocomplete="off"
{% if Role.CreateMember %}checked{% endif %} {% if Role.CreateMember %}checked{% endif %}
/> />
<label for="create_member" class="form-label"> Créer membres </label> <label for="create_member" class="form-label"> Créer </label>
</div>
</div> </div>
<div class="row mb-3"> <div class="mb-1">
<div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
@ -94,12 +87,10 @@
autocomplete="off" autocomplete="off"
{% if Role.EditMember %}checked{% endif %} {% if Role.EditMember %}checked{% endif %}
/> />
<label for="edit_member" class="form-label"> Modifier membres </label> <label for="edit_member" class="form-label"> Modifier </label>
</div>
</div> </div>
<div class="row mb-3"> <div class="mb-1">
<div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
@ -109,13 +100,11 @@
{% if Role.ShowArchivedMember %}checked{% endif %} {% if Role.ShowArchivedMember %}checked{% endif %}
/> />
<label for="show_archived_member" class="form-label"> <label for="show_archived_member" class="form-label">
Afficher membres archivés Afficher archivés
</label> </label>
</div> </div>
</div>
<div class="row mb-3"> <div class="mb-1">
<div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
@ -124,14 +113,10 @@
autocomplete="off" autocomplete="off"
{% if Role.ArchiveMember %}checked{% endif %} {% if Role.ArchiveMember %}checked{% endif %}
/> />
<label for="archive_member" class="form-label"> <label for="archive_member" class="form-label"> Archiver </label>
Archiver membres
</label>
</div>
</div> </div>
<div class="row mb-3"> <div class="mb-1">
<div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
@ -140,14 +125,10 @@
autocomplete="off" autocomplete="off"
{% if Role.RestoreMember %}checked{% endif %} {% if Role.RestoreMember %}checked{% endif %}
/> />
<label for="restore_member" class="form-label"> <label for="restore_member" class="form-label"> Restaurer </label>
Restaurer membres
</label>
</div>
</div> </div>
<div class="row mb-3"> <div class="mb-1">
<div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
@ -157,13 +138,11 @@
{% if Role.PurgeMember %}checked{% endif %} {% if Role.PurgeMember %}checked{% endif %}
/> />
<label for="purge_member" class="form-label"> <label for="purge_member" class="form-label">
Purger membres (suppression définitive) Purger (suppression définitive)
</label> </label>
</div> </div>
</div>
<div class="row mb-3"> <div class="mb-1">
<div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
@ -173,20 +152,18 @@
{% if Role.ConvertMemberToContact %}checked{% endif %} {% if Role.ConvertMemberToContact %}checked{% endif %}
/> />
<label for="convert_member_to_contact" class="form-label"> <label for="convert_member_to_contact" class="form-label">
Convertir membres en contacts Convertir en contacts
</label> </label>
</div> </div>
</div> </div>
<div class="mt-4 mb-3 d-md-none">
<span class="h4"> Permissions contacts </span>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-2"> <div class="col-md-2">
<div class="d-none d-md-block">Permissions contacts</div> <div class="mb-2">Permissions contacts</div>
</div> </div>
<div class="col-md-10"> <div class="col-md-10">
<div class="mb-1">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
@ -195,14 +172,10 @@
autocomplete="off" autocomplete="off"
{% if Role.ShowContact %}checked{% endif %} {% if Role.ShowContact %}checked{% endif %}
/> />
<label for="show_contact" class="form-label"> <label for="show_contact" class="form-label"> Afficher </label>
Afficher contacts
</label>
</div>
</div> </div>
<div class="row mb-3"> <div class="mb-1">
<div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
@ -211,14 +184,10 @@
autocomplete="off" autocomplete="off"
{% if Role.CreateContact %}checked{% endif %} {% if Role.CreateContact %}checked{% endif %}
/> />
<label for="create_contact" class="form-label"> <label for="create_contact" class="form-label"> Créer </label>
Créer contacts
</label>
</div>
</div> </div>
<div class="row mb-3"> <div class="mb-1">
<div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
@ -227,14 +196,10 @@
autocomplete="off" autocomplete="off"
{% if Role.EditContact %}checked{% endif %} {% if Role.EditContact %}checked{% endif %}
/> />
<label for="edit_contact" class="form-label"> <label for="edit_contact" class="form-label"> Modifier </label>
Modifier contacts
</label>
</div>
</div> </div>
<div class="row mb-3"> <div class="mb-1">
<div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
@ -244,13 +209,11 @@
{% if Role.ShowArchivedContact %}checked{% endif %} {% if Role.ShowArchivedContact %}checked{% endif %}
/> />
<label for="show_archived_contact" class="form-label"> <label for="show_archived_contact" class="form-label">
Afficher contacts archivés Afficher archivés
</label> </label>
</div> </div>
</div>
<div class="row mb-3"> <div class="mb-1">
<div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
@ -259,14 +222,10 @@
autocomplete="off" autocomplete="off"
{% if Role.ArchiveContact %}checked{% endif %} {% if Role.ArchiveContact %}checked{% endif %}
/> />
<label for="archive_contact" class="form-label"> <label for="archive_contact" class="form-label"> Archiver </label>
Archiver contacts
</label>
</div>
</div> </div>
<div class="row mb-3"> <div class="mb-1">
<div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
@ -275,14 +234,10 @@
autocomplete="off" autocomplete="off"
{% if Role.RestoreContact %}checked{% endif %} {% if Role.RestoreContact %}checked{% endif %}
/> />
<label for="restore_contact" class="form-label"> <label for="restore_contact" class="form-label"> Restaurer </label>
Restaurer contacts
</label>
</div>
</div> </div>
<div class="row mb-3"> <div class="mb-1">
<div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
@ -292,13 +247,11 @@
{% if Role.PurgeContact %}checked{% endif %} {% if Role.PurgeContact %}checked{% endif %}
/> />
<label for="purge_contact" class="form-label"> <label for="purge_contact" class="form-label">
Purger contacts (suppression définitive) Purger (suppression définitive)
</label> </label>
</div> </div>
</div>
<div class="row mb-3"> <div class="mb-1">
<div class="col-md-10 offset-md-2">
<input <input
type="checkbox" type="checkbox"
class="form-check-input me-2" class="form-check-input me-2"
@ -308,10 +261,11 @@
{% if Role.ConvertContactToMember %}checked{% endif %} {% if Role.ConvertContactToMember %}checked{% endif %}
/> />
<label for="convert_contact_to_member" class="form-label"> <label for="convert_contact_to_member" class="form-label">
Convertir contacts en membres Convertir en membres
</label> </label>
</div> </div>
</div> </div>
</div>
<div class="my-4"> <div class="my-4">
<button class="btn btn-outline-primary" type="submit"> <button class="btn btn-outline-primary" type="submit">