@@ -286,11 +286,18 @@ def show_pending_subs(mlist, form):
286286 return 0
287287 form .AddItem ('<hr>' )
288288 form .AddItem (Center (Header (2 , _ ('Subscription Requests' ))))
289- table = Table (border = 2 )
289+ table = Table (
290+ role = "table" ,
291+ aria_label = _ ("Pending Subscription Requests" ),
292+ style = "border: 1px solid #ccc; border-collapse: collapse; width: 100%;"
293+ )
290294 table .AddRow ([Center (Bold (_ ('Address/name/time' ))),
291295 Center (Bold (_ ('Your decision' ))),
292296 Center (Bold (_ ('Reason for refusal' )))
293297 ])
298+ table .AddCellInfo (table .GetCurrentRowIndex (), 0 , role = "columnheader" , scope = "col" )
299+ table .AddCellInfo (table .GetCurrentRowIndex (), 1 , role = "columnheader" , scope = "col" )
300+ table .AddCellInfo (table .GetCurrentRowIndex (), 2 , role = "columnheader" , scope = "col" )
294301 # Alphabetical order by email address
295302 byaddrs = {}
296303 for id in pendingsubs :
@@ -349,11 +356,18 @@ def show_pending_unsubs(mlist, form):
349356 pendingunsubs = mlist .GetUnsubscriptionIds ()
350357 if not pendingunsubs :
351358 return 0
352- table = Table (border = 2 )
359+ table = Table (
360+ role = "table" ,
361+ aria_label = _ ("Pending Unsubscription Requests" ),
362+ style = "border: 1px solid #ccc; border-collapse: collapse; width: 100%;"
363+ )
353364 table .AddRow ([Center (Bold (_ ('User address/name' ))),
354365 Center (Bold (_ ('Your decision' ))),
355366 Center (Bold (_ ('Reason for refusal' )))
356367 ])
368+ table .AddCellInfo (table .GetCurrentRowIndex (), 0 , role = "columnheader" , scope = "col" )
369+ table .AddCellInfo (table .GetCurrentRowIndex (), 1 , role = "columnheader" , scope = "col" )
370+ table .AddCellInfo (table .GetCurrentRowIndex (), 2 , role = "columnheader" , scope = "col" )
357371 # Alphabetical order by email address
358372 byaddrs = {}
359373 for id in pendingunsubs :
@@ -435,7 +449,11 @@ def show_helds_overview(mlist, form, ssort=SSENDER):
435449 (ssort == SSENDER , ssort == SSENDERTIME , ssort == STIME ))))
436450 # Add the by-sender overview tables
437451 admindburl = mlist .GetScriptURL ('admindb' , absolute = 1 )
438- table = Table (border = 0 )
452+ table = Table (
453+ role = "table" ,
454+ aria_label = _ ("Held Messages Overview" ),
455+ border = 0
456+ )
439457 form .AddItem (table )
440458 skeys = list (byskey .keys ())
441459 skeys .sort ()
@@ -445,40 +463,48 @@ def show_helds_overview(mlist, form, ssort=SSENDER):
445463 esender = Utils .websafe (sender )
446464 senderurl = admindburl + '?sender=' + qsender
447465 # The encompassing sender table
448- stable = Table (border = 1 )
466+ stable = Table (
467+ role = "table" ,
468+ aria_label = _ ("Messages from {sender}" ).format (sender = esender ),
469+ border = 1
470+ )
449471 stable .AddRow ([Center (Bold (_ ('From:' )).Format () + esender )])
450- stable .AddCellInfo (stable .GetCurrentRowIndex (), 0 , colspan = 2 )
451- left = Table (border = 0 )
472+ stable .AddCellInfo (stable .GetCurrentRowIndex (), 0 , colspan = 2 , role = "cell" )
473+ left = Table (
474+ role = "table" ,
475+ aria_label = _ ("Actions for messages from {sender}" ).format (sender = esender ),
476+ border = 0
477+ )
452478 left .AddRow ([_ ('Action to take on all these held messages:' )])
453- left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 )
479+ left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 , role = "cell" )
454480 btns = hacky_radio_buttons (
455481 'senderaction-' + qsender ,
456482 (_ ('Defer' ), _ ('Accept' ), _ ('Reject' ), _ ('Discard' )),
457483 (mm_cfg .DEFER , mm_cfg .APPROVE , mm_cfg .REJECT , mm_cfg .DISCARD ),
458484 (1 , 0 , 0 , 0 ))
459485 left .AddRow ([btns ])
460- left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 )
486+ left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 , role = "cell" )
461487 left .AddRow ([
462488 '<label>' +
463489 CheckBox ('senderpreserve-' + qsender , 1 ).Format () +
464490 ' ' +
465491 _ ('Preserve messages for the site administrator' ) +
466492 '</label>'
467493 ])
468- left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 )
494+ left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 , role = "cell" )
469495 left .AddRow ([
470496 '<label>' +
471497 CheckBox ('senderforward-' + qsender , 1 ).Format () +
472498 ' ' +
473499 _ ('Forward messages (individually) to:' ) +
474500 '</label>'
475501 ])
476- left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 )
502+ left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 , role = "cell" )
477503 left .AddRow ([
478504 TextBox ('senderforwardto-' + qsender ,
479505 value = mlist .GetOwnerEmail ())
480506 ])
481- left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 )
507+ left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 , role = "cell" )
482508 # If the sender is a member and the message is being held due to a
483509 # moderation bit, give the admin a chance to clear the member's mod
484510 # bit. If this sender is not a member and is not already on one of
@@ -496,7 +522,7 @@ def show_helds_overview(mlist, form, ssort=SSENDER):
496522 else :
497523 left .AddRow (
498524 [_ ('<em>The sender is now a member of this list</em>' )])
499- left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 )
525+ left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 , role = "cell" )
500526 elif sender not in (mlist .accept_these_nonmembers +
501527 mlist .hold_these_nonmembers +
502528 mlist .reject_these_nonmembers +
@@ -508,29 +534,33 @@ def show_helds_overview(mlist, form, ssort=SSENDER):
508534 _ (f'Add <b>{ esender } </b> to one of these sender filters:' ) +
509535 '</label>'
510536 ])
511- left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 )
537+ left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 , role = "cell" )
512538 btns = hacky_radio_buttons (
513539 'senderfilter-' + qsender ,
514540 (_ ('Accepts' ), _ ('Holds' ), _ ('Rejects' ), _ ('Discards' )),
515541 (mm_cfg .ACCEPT , mm_cfg .HOLD , mm_cfg .REJECT , mm_cfg .DISCARD ),
516542 (0 , 0 , 0 , 1 ))
517543 left .AddRow ([btns ])
518- left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 )
544+ left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 , role = "cell" )
519545 if sender not in mlist .ban_list :
520546 left .AddRow ([
521547 '<label>' +
522548 CheckBox ('senderbanp-' + qsender , 1 ).Format () +
523549 ' ' +
524550 _ (f"""Ban <b>{ esender } </b> from ever subscribing to this
525551 mailing list""" ) + '</label>' ])
526- left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 )
527- right = Table (border = 0 )
552+ left .AddCellInfo (left .GetCurrentRowIndex (), 0 , colspan = 2 , role = "cell" )
553+ right = Table (
554+ role = "table" ,
555+ aria_label = _ ("Actions for messages from {sender}" ).format (sender = esender ),
556+ border = 0
557+ )
528558 right .AddRow ([
529559 _ (f"""Click on the message number to view the individual
530560 message, or you can """ ) +
531561 Link (senderurl , _ (f'view all messages from { esender } ' )).Format ()
532562 ])
533- right .AddCellInfo (right .GetCurrentRowIndex (), 0 , colspan = 2 )
563+ right .AddCellInfo (right .GetCurrentRowIndex (), 0 , colspan = 2 , role = "cell" )
534564 right .AddRow ([' ' , ' ' ])
535565 counter = 1
536566 for ptime , id in byskey [skey ]:
@@ -553,7 +583,11 @@ def show_helds_overview(mlist, form, ssort=SSENDER):
553583 charset = Utils .GetCharSet (mlist .preferred_language )
554584 dispsubj = format_subject (subject , charset )
555585
556- t = Table (border = 0 )
586+ t = Table (
587+ role = "table" ,
588+ aria_label = _ ("Message {counter}" ).format (counter = counter ),
589+ border = 0
590+ )
557591 t .AddRow ([Link (admindburl + '?msgid=%d' % id , '[%d]' % counter ),
558592 Bold (_ ('Subject:' )),
559593 Utils .websafe (dispsubj )
0 commit comments