From c4c4c8007bf85afee71420576d343442e388f352 Mon Sep 17 00:00:00 2001
From: Mark Sapiro <mark@msapiro.net>
Date: Sat, 24 Jun 2017 14:34:48 -0700
Subject: Added screen reader labels to some admindb radio buttons.

---
 Mailman/Cgi/admindb.py | 25 ++++++++++---------------
 Mailman/htmlformat.py  | 12 +++---------
 2 files changed, 13 insertions(+), 24 deletions(-)

(limited to 'Mailman')

diff --git a/Mailman/Cgi/admindb.py b/Mailman/Cgi/admindb.py
index 855c2e04..cc863306 100644
--- a/Mailman/Cgi/admindb.py
+++ b/Mailman/Cgi/admindb.py
@@ -95,8 +95,9 @@ def hacky_radio_buttons(btnname, labels, values, defaults, spacing=3):
     space = '&nbsp;' * spacing
     btns = Table(cellspacing='5', cellpadding='0')
     btns.AddRow([space + text + space for text in labels])
-    btns.AddRow([Center(RadioButton(btnname, value, default))
-                 for value, default in zip(values, defaults)])
+    btns.AddRow([Center(RadioButton(btnname, value, default).Format()
+                     + '<div class=hidden>' + label + '</div>')
+                 for label, value, default in zip(labels, values, defaults)])
     return btns
 
 
@@ -747,20 +748,14 @@ def show_post_requests(mlist, id, info, total, count, form):
     when = msgdata.get('received_time')
     if when:
         t.AddRow([Bold(_('Received:')), time.ctime(when)])
-        t.AddCellInfo(row+2, col-1, align='right')
-    # We can't use a RadioButtonArray here because horizontal placement can be
-    # confusing to the user and vertical placement takes up too much
-    # real-estate.  This is a hack!
-    buttons = Table(cellspacing="5", cellpadding="0")
-    buttons.AddRow(map(lambda x, s='&nbsp;'*5: s+x+s,
-                       (_('Defer'), _('Approve'), _('Reject'), _('Discard'))))
-    buttons.AddRow([Center(RadioButton(id, mm_cfg.DEFER, 1)),
-                    Center(RadioButton(id, mm_cfg.APPROVE, 0)),
-                    Center(RadioButton(id, mm_cfg.REJECT, 0)),
-                    Center(RadioButton(id, mm_cfg.DISCARD, 0)),
-                    ])
+        t.AddCellInfo(row+3, col-1, align='right')
+    buttons = hacky_radio_buttons(id,
+                (_('Defer'), _('Approve'), _('Reject'), _('Discard')),
+                (mm_cfg.DEFER, mm_cfg.APPROVE, mm_cfg.REJECT, mm_cfg.DISCARD),
+                (1, 0, 0, 0),
+                spacing=5)
     t.AddRow([Bold(_('Action:')), buttons])
-    t.AddCellInfo(row+3, col-1, align='right')
+    t.AddCellInfo(t.GetCurrentRowIndex(), col-1, align='right')
     t.AddRow(['&nbsp;',
               '<label>' +
               CheckBox('preserve-%d' % id, 'on', 0).Format() +
diff --git a/Mailman/htmlformat.py b/Mailman/htmlformat.py
index 19f6457d..210150ed 100755
--- a/Mailman/htmlformat.py
+++ b/Mailman/htmlformat.py
@@ -318,15 +318,9 @@ class Document(Container):
                           'content="text/html; charset=%s">' % charset)
             if self.title:
                 output.append('%s<TITLE>%s</TITLE>' % (tab, self.title))
-            # This is a kluge to only add this style to the page that needs it.
-            parts = Utils.GetPathPieces()
-            if parts:
-                if len(parts) > 2 and parts[-1] not in ('add', 'remove',
-                                                       'change'):
-                    parts[2] = 'list'
-                if (len(parts) == 2 and parts[1] == 'members' or
-                    len(parts) > 2 and parts[1:3] == ['members', 'list']):
-                    output.append("""\
+            # Add CSS to visually hide some labeling text but allow screen
+            # readers to read it.
+            output.append("""\
 <style type="text/css">
     div.hidden
         {position:absolute;
-- 
cgit v1.2.3