diff --git a/src/agenda_culturel/forms.py b/src/agenda_culturel/forms.py index f76c568..89511c7 100644 --- a/src/agenda_culturel/forms.py +++ b/src/agenda_culturel/forms.py @@ -42,6 +42,8 @@ logger = logging.getLogger(__name__) class TagForm(ModelForm): + required_css_class = 'required' + class Meta: model = Tag fields = ["name", "description", "in_included_suggestions", "in_excluded_suggestions", "principal", "category"] @@ -50,6 +52,8 @@ class TagForm(ModelForm): } class TagRenameForm(Form): + required_css_class = 'required' + name = CharField( label=_('Name of new tag'), required=True @@ -77,6 +81,8 @@ class TagRenameForm(Form): return "force" in self.fields and self.cleaned_data["force"] == True class URLSubmissionForm(Form): + required_css_class = 'required' + url = URLField(max_length=512) category = ModelChoiceField( label=_("Category"), @@ -109,6 +115,8 @@ class DynamicArrayWidgetTags(DynamicArrayWidget): class RecurrentImportForm(ModelForm): + required_css_class = 'required' + class Meta: model = RecurrentImport fields = "__all__" @@ -118,12 +126,16 @@ class RecurrentImportForm(ModelForm): class CategorisationRuleImportForm(ModelForm): + required_css_class = 'required' + class Meta: model = CategorisationRule fields = "__all__" class EventForm(ModelForm): + required_css_class = 'required' + old_local_image = CharField(widget=HiddenInput(), required=False) tags = MultipleChoiceField( @@ -225,6 +237,7 @@ class MultipleChoiceFieldAcceptAll(MultipleChoiceField): class EventModerateForm(ModelForm): + required_css_class = 'required' tags = MultipleChoiceField( label=_("Tags"), @@ -271,6 +284,8 @@ class EventModerateForm(ModelForm): class BatchImportationForm(Form): + required_css_class = 'required' + json = CharField( label="JSON", widget=Textarea(attrs={"rows": "10"}), @@ -280,6 +295,8 @@ class BatchImportationForm(Form): class FixDuplicates(Form): + required_css_class = 'required' + action = ChoiceField() def __init__(self, *args, **kwargs): @@ -364,6 +381,8 @@ class FixDuplicates(Form): class SelectEventInList(Form): + required_css_class = 'required' + event = ChoiceField() def __init__(self, *args, **kwargs): @@ -376,6 +395,8 @@ class SelectEventInList(Form): class MergeDuplicates(Form): + required_css_class = 'required' + checkboxes_fields = ["reference_urls", "description"] def __init__(self, *args, **kwargs): @@ -524,6 +545,8 @@ class MergeDuplicates(Form): class CategorisationForm(Form): + required_css_class = 'required' + def __init__(self, *args, **kwargs): if "events" in kwargs: events = kwargs.pop("events", None) @@ -554,6 +577,8 @@ class CategorisationForm(Form): class EventAddPlaceForm(Form): + required_css_class = 'required' + place = ModelChoiceField( label=_("Place"), queryset=Place.objects.all().order_by("name"), @@ -591,6 +616,8 @@ class EventAddPlaceForm(Form): class PlaceForm(ModelForm): + required_css_class = 'required' + apply_to_all = BooleanField( initial=True, label=_( diff --git a/src/agenda_culturel/static/style.scss b/src/agenda_culturel/static/style.scss index 88a6c6c..38f80b3 100644 --- a/src/agenda_culturel/static/style.scss +++ b/src/agenda_culturel/static/style.scss @@ -1442,4 +1442,9 @@ form.messages div, form.moderation-events { .moderate-preview .event-body { max-height: 400px; overflow-y: auto; +} + +label.required::after { + content: ' *'; + color: red; } \ No newline at end of file