From 691f3f440ee7a51cf7f297569afdce72cbc37504 Mon Sep 17 00:00:00 2001 From: funkonaut Date: Mon, 29 Aug 2022 17:59:57 -0500 Subject: [PATCH] Add aria labels to inputs to make them accessible for screen reader users. Assign ids to the tds containing the setting name and description and then use them as the label via the aria-labeledby attribute. --- boxes/__init__.py | 6 +++--- scripts/boxesserver | 18 +++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/boxes/__init__.py b/boxes/__init__.py index 16ba5ae..91be3a6 100755 --- a/boxes/__init__.py +++ b/boxes/__init__.py @@ -198,7 +198,7 @@ class ArgparseEdgeType: ("""""" % (e, ' selected="selected"' if e == default else "", translate("%s %s" % (e, self.names.get(e, "")))) for e in self.edges)) - return """\n""" % (name, options) + return """\n""" % (name, name, name+"_id", name+"_description", options) def inx(self, name, viewname, arg): return (' \n' % @@ -218,8 +218,8 @@ class BoolArg: if isinstance(default, (str)): default = self(default) return """ -""" % \ - (name, name, ' checked="checked"' if default else "") +""" % \ + (name, name, name, name+"_id", name+"_description",' checked="checked"' if default else "") boolarg = BoolArg() diff --git a/scripts/boxesserver b/scripts/boxesserver index 624f6b9..3eaeec0 100755 --- a/scripts/boxesserver +++ b/scripts/boxesserver @@ -160,25 +160,24 @@ class BServer: viewname = name[len(prefix)+1:] default = defaults.get(name, None) - - row = """%s%%s%s\n""" % \ - (_(viewname), "" if not a.help else markdown.markdown(_(a.help))) + row = """%%s%s\n""" % \ + (name+"_id", name, _(viewname), name+"_description","" if not a.help else markdown.markdown(_(a.help))) if (isinstance(a, argparse._StoreAction) and hasattr(a.type, "html")): input = a.type.html(name, default or a.default, _) elif a.dest == "layout": val = (default or a.default).split("\n") - input = """""" % \ - (name, max((len(l) for l in val))+10, len(val)+1, default or a.default) + input = """""" % \ + (name, name, name+"_id", name+"_description", max((len(l) for l in val))+10, len(val)+1, default or a.default) elif a.choices: options = "\n".join( ("""""" % (e, ' selected="selected"' if (e == (default or a.default)) or (str(e) == str(default or a.default)) else "", _(e)) for e in a.choices)) - input = """\n""" % (name, options) + input = """\n""" % (name, name, name+"_id", name+"_description", options) else: - input = """""" % \ - (name, default or a.default) + input = """""" % \ + (name, name, name+"_id", name+"_description", default or a.default) return row % input @@ -245,11 +244,12 @@ class BServer: continue if len(group._group_actions) == 1 and isinstance(group._group_actions[0], argparse._HelpAction): continue - prefix = getattr(group, "prefix", None) + prefix = getattr(group, "prefix", None) result.append('''

%s

\n\n''' % (groupid, groupid, groupid, _(group.title), groupid)) for a in group._group_actions: if a.dest in ("input", "output"): + continue result.append(self.arg2html(a, prefix, defaults, _)) result.append("")