diff --git a/controlpanel/templates/templatetags/field.html b/controlpanel/templates/templatetags/field.html
index 8930650..d69077f 100644
--- a/controlpanel/templates/templatetags/field.html
+++ b/controlpanel/templates/templatetags/field.html
@@ -59,6 +59,7 @@
name="{{ field.html_name }}"
id="{{ field.auto_id }}"
{% if field.widget_type == "selectmultiple" %}multiple{% endif %}
+ {% for attr, value in field.field.widget.attrs.items %}{{ attr }}="{{ value }}" {% endfor %}
>
{% if field.widget_type == "selectmultiple" %}
diff --git a/management/forms.py b/management/forms.py
index 6ff8f45..bf50e65 100644
--- a/management/forms.py
+++ b/management/forms.py
@@ -47,6 +47,7 @@ class ClubRoleAssignForm(forms.ModelForm):
class Meta:
model = ClubRole
fields = ["member", "role"]
+ widgets = {"member": forms.Select(attrs={"data-searchable": "true", "data-search-placeholder": _("Type a name to search...")})}
def __init__(self, *args, club=None, **kwargs):
super().__init__(*args, **kwargs)
@@ -155,7 +156,10 @@ class NewsForm(forms.ModelForm):
class Meta:
model = News
fields = ["title", "teams", "visibility", "body"]
- widgets = {"teams": forms.CheckboxSelectMultiple, "body": forms.Textarea(attrs={"rows": 8})}
+ widgets = {
+ "teams": forms.SelectMultiple(attrs={"data-searchable": "true", "data-search-placeholder": _("Type to filter teams...")}),
+ "body": forms.Textarea(attrs={"rows": 8}),
+ }
def __init__(self, *args, club=None, **kwargs):
super().__init__(*args, **kwargs)
diff --git a/management/templates/management/news_form.html b/management/templates/management/news_form.html
index 83918b1..2e69760 100644
--- a/management/templates/management/news_form.html
+++ b/management/templates/management/news_form.html
@@ -1,5 +1,5 @@
{% extends "management/base.html" %}
-{% load i18n lucide ui %}
+{% load i18n lucide static ui %}
{% block heading %}{% if update_view %}{% blocktrans %}Edit {{ object }}{% endblocktrans %}{% else %}{% trans "New news item" %}{% endif %}{% endblock heading %}
@@ -15,6 +15,10 @@
{% endfor %}
+ {% if not update_view %}
+
{% trans "Photos can be added once the news item is created." %}
+ {% endif %}
+
{% for field in form %}
{% form_field field %}
@@ -29,3 +33,7 @@
{% endblock panel %}
+
+{% block extra_body %}
+
+{% endblock extra_body %}
diff --git a/management/templates/management/role_list.html b/management/templates/management/role_list.html
index 3a35795..7a0d20b 100644
--- a/management/templates/management/role_list.html
+++ b/management/templates/management/role_list.html
@@ -1,5 +1,5 @@
{% extends "management/base.html" %}
-{% load i18n lucide %}
+{% load i18n lucide static %}
{% comment %}
One section per non-MEMBER role (management.views.ClubRoleListView) -- the
@@ -62,93 +62,5 @@
{% endblock panel %}
{% block extra_body %}
- {% trans "Type a name to search..." as search_placeholder %}
-
+
{% endblock extra_body %}
diff --git a/static/css/app.css b/static/css/app.css
index 65efb5b..4b2b18f 100644
--- a/static/css/app.css
+++ b/static/css/app.css
@@ -3900,6 +3900,18 @@
}
}
}
+ .empty\:hidden {
+ &:empty {
+ display: none;
+ }
+ }
+ .hover\:opacity-100 {
+ &:hover {
+ @media (hover: hover) {
+ opacity: 100%;
+ }
+ }
+ }
.sm\:hidden {
@media (width >= 40rem) {
display: none;
diff --git a/static/js/searchable-select.js b/static/js/searchable-select.js
new file mode 100644
index 0000000..a08fb8f
--- /dev/null
+++ b/static/js/searchable-select.js
@@ -0,0 +1,152 @@
+/*
+ * Progressive enhancement for a plain