-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Ajout des boutons radio riches #168
Ajout des boutons radio riches #168
Conversation
Je veux bien un premier retour histoire d'être sûr que je vais dans la bonne direction. |
37e4f3c
to
f4d87da
Compare
5296bf6
to
2a87139
Compare
ed8a084
to
90262f2
Compare
dsfr/enums.py
Outdated
if not PY311 and isinstance(value, (list, tuple)): | ||
# Prior to Python 3.11, EnumDict does not interpret auto() when | ||
# wrapped in a tuple so we need to set the value alone a first time | ||
# before wrapping it in a tuple. | ||
if len(value) == 1: | ||
return super().__setitem__(member, value[0]) | ||
elif len(value) == 2: | ||
value, label = value | ||
else: | ||
*value, label = value | ||
|
||
super().__setitem__(member, value) | ||
dict.__setitem__(self, member, (self[member], label)) | ||
return |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Y'a des petites bizarreries dans le support des Choices
dans Django mais, en gros, ça :
class TestEnum(IntEnum):
WEEE = auto(), "Weee"
OOOH = auto(), "Oooh"
ça crée une exception avant python 3.11… Je sais pas trop pourquoi c'est pas supporté au niveau de django.db.models.enums.ChoicesMeta
.
if PY311: | ||
if "label" in value: | ||
super().__setitem__( | ||
member, (value.pop("value"), value.pop("label")) | ||
) | ||
else: | ||
super().__setitem__(member, value.pop("value")) | ||
else: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pareil que pour #r1750009159. Ça pourra être supprimé quand Django dropera le support de Python 3.11 dans quelques années.
312b7e1
to
9c20344
Compare
Ça m'a l'air pas mal ! Je note cependant que si on valide le formulaire et qu'il est réaffiché (par exemple, s'il y a des erreurs de validation sur d'autres champs), les valeurs ne sont pas conservées. Edit: tu vas devoir rebase, j'ai vu au passage et corrigé un bug sur le champ précédent (checkbox multiple…) |
9c20344
to
d449c17
Compare
class RichRadioSelect(_RichChoiceWidget, RadioSelect): | ||
""" | ||
Widget for producing riche radio buttons. This widget works with | ||
`dsfr.enums.RichRadioButtonChoices`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Est-ce que c'est possible de faire un lien vers la documentation de ce composant, ici ?
dsfr/widgets.py
Outdated
## `html_label` | ||
|
||
The `html_label` instance member can be used to put HTML code inside `<label>`. It | ||
is automatically marked as HTML-safe with [`django.utils.safestring.mark_safe`][1] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Est-ce que la forme
[lien`][1]
[1]: https://
fonctionne dans la doc ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On dirait que non (mais je ne pense pas que ça soit indispensable
dsfr/enums.py
Outdated
... COLD = {"value": "COLD"} | ||
``` | ||
|
||
See [this section on how to provide default values for additionnal attributes](#default-values) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
J'essaie de faire une référence vers une autre section de la doc de ce composant. Ça fonctionne ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Idem, ça ne fonctionne pas dans mon éditeur (VS Codium) mais pas grave
dsfr/enums.py
Outdated
... } | ||
``` | ||
|
||
See `dsfr.widgets.RichRadioSelect` for more details. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
C'est possible de faire un réf à la doc de ce composant ici ?
C'est bon, c'est réglé. |
d449c17
to
b29bc53
Compare
J'ai traduit la doc en français, plutôt. |
b29bc53
to
bb5fcff
Compare
bb5fcff
to
570179e
Compare
🎯 Objectif
Voici ma tentative d'ajouter des boutons radio riches. Je suis un peu sceptique sur cette solution parce qu'elle repose sur une nouvelle forme d'
enum
s, plus complexe et qui repose pas mal sur la métaprogrammation, ce qui peut être difficile à maintenir. Mais pour l'instant, c'est la solution la plus user-friendly que j'ai trouvée. L'idée, c'est de l'utiliser comme ça :