Provide accessible name to radio groups (#945)

This commit is contained in:
Sascha Ißbrücker
2025-01-12 22:10:14 +01:00
committed by GitHub
parent d2e8a95e3c
commit 649f4154e5
2 changed files with 22 additions and 20 deletions

View File

@@ -42,8 +42,11 @@
</div> </div>
{% endif %} {% endif %}
{% if 'shared' in preferences_form.editable_fields %} {% if 'shared' in preferences_form.editable_fields %}
<div class="form-group radio-group"> <div class="form-group radio-group" role="radiogroup" aria-labelledby="search-shared-label">
<div class="form-label{% if 'shared' in search.modified_params %} text-bold{% endif %}">Shared filter</div> <label id="search-shared-label"
class="form-label{% if 'shared' in search.modified_params %} text-bold{% endif %}">
Shared filter
</label>
{% for radio in preferences_form.shared %} {% for radio in preferences_form.shared %}
<label for="{{ radio.id_for_label }}" class="form-radio form-inline"> <label for="{{ radio.id_for_label }}" class="form-radio form-inline">
{{ radio.tag }} {{ radio.tag }}
@@ -54,8 +57,11 @@
</div> </div>
{% endif %} {% endif %}
{% if 'unread' in preferences_form.editable_fields %} {% if 'unread' in preferences_form.editable_fields %}
<div class="form-group radio-group"> <div class="form-group radio-group" role="radiogroup" aria-labelledby="search-unread-label">
<div class="form-label{% if 'unread' in search.modified_params %} text-bold{% endif %}">Unread filter</div> <label id="search-unread-label"
class="form-label{% if 'unread' in search.modified_params %} text-bold{% endif %}">
Unread filter
</label>
{% for radio in preferences_form.unread %} {% for radio in preferences_form.unread %}
<label for="{{ radio.id_for_label }}" class="form-radio form-inline"> <label for="{{ radio.id_for_label }}" class="form-radio form-inline">
{{ radio.tag }} {{ radio.tag }}

View File

@@ -71,19 +71,15 @@ class BookmarkSearchTagTest(TestCase, BookmarkFactoryMixin, HtmlTestMixin):
radios = form.select(f'input[name="{name}"][type="radio"]') radios = form.select(f'input[name="{name}"][type="radio"]')
self.assertTrue(len(radios) == 0) self.assertTrue(len(radios) == 0)
def assertUnmodifiedLabel(self, html: str, text: str, id: str = ""): def assertUnmodifiedLabel(self, html: str, text: str):
id_attr = f'for="{id}"' if id else "" soup = self.make_soup(html)
tag = "label" if id else "div" label = soup.find("label", string=lambda s: s and s.strip() == text)
needle = f'<{tag} class="form-label" {id_attr}>{text}</{tag}>' self.assertEqual(label["class"], ["form-label"])
self.assertInHTML(needle, html) def assertModifiedLabel(self, html: str, text: str):
soup = self.make_soup(html)
def assertModifiedLabel(self, html: str, text: str, id: str = ""): label = soup.find("label", string=lambda s: s and s.strip() == text)
id_attr = f'for="{id}"' if id else "" self.assertEqual(label["class"], ["form-label", "text-bold"])
tag = "label" if id else "div"
needle = f'<{tag} class="form-label text-bold" {id_attr}>{text}</{tag}>'
self.assertInHTML(needle, html)
def test_search_form_inputs(self): def test_search_form_inputs(self):
# Without params # Without params
@@ -216,27 +212,27 @@ class BookmarkSearchTagTest(TestCase, BookmarkFactoryMixin, HtmlTestMixin):
url = "/test" url = "/test"
rendered_template = self.render_template(url) rendered_template = self.render_template(url)
self.assertUnmodifiedLabel(rendered_template, "Sort by", "id_sort") self.assertUnmodifiedLabel(rendered_template, "Sort by")
self.assertUnmodifiedLabel(rendered_template, "Shared filter") self.assertUnmodifiedLabel(rendered_template, "Shared filter")
self.assertUnmodifiedLabel(rendered_template, "Unread filter") self.assertUnmodifiedLabel(rendered_template, "Unread filter")
# Modified sort # Modified sort
url = "/test?sort=title_asc" url = "/test?sort=title_asc"
rendered_template = self.render_template(url) rendered_template = self.render_template(url)
self.assertModifiedLabel(rendered_template, "Sort by", "id_sort") self.assertModifiedLabel(rendered_template, "Sort by")
self.assertUnmodifiedLabel(rendered_template, "Shared filter") self.assertUnmodifiedLabel(rendered_template, "Shared filter")
self.assertUnmodifiedLabel(rendered_template, "Unread filter") self.assertUnmodifiedLabel(rendered_template, "Unread filter")
# Modified shared # Modified shared
url = "/test?shared=yes" url = "/test?shared=yes"
rendered_template = self.render_template(url) rendered_template = self.render_template(url)
self.assertUnmodifiedLabel(rendered_template, "Sort by", "id_sort") self.assertUnmodifiedLabel(rendered_template, "Sort by")
self.assertModifiedLabel(rendered_template, "Shared filter") self.assertModifiedLabel(rendered_template, "Shared filter")
self.assertUnmodifiedLabel(rendered_template, "Unread filter") self.assertUnmodifiedLabel(rendered_template, "Unread filter")
# Modified unread # Modified unread
url = "/test?unread=yes" url = "/test?unread=yes"
rendered_template = self.render_template(url) rendered_template = self.render_template(url)
self.assertUnmodifiedLabel(rendered_template, "Sort by", "id_sort") self.assertUnmodifiedLabel(rendered_template, "Sort by")
self.assertUnmodifiedLabel(rendered_template, "Shared filter") self.assertUnmodifiedLabel(rendered_template, "Shared filter")
self.assertModifiedLabel(rendered_template, "Unread filter") self.assertModifiedLabel(rendered_template, "Unread filter")